<?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>95508</bug_id>
          
          <creation_ts>2012-08-30 16:11:49 -0700</creation_ts>
          <short_desc>Remove all-but-one use of WTF::String::operator+= from WebCore</short_desc>
          <delta_ts>2012-09-01 01:19:30 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>benjamin</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>japhet</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>709125</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-30 16:11:49 -0700</bug_when>
    <thetext>Remove all-but-one use of WTF::String::operator+= from WebCore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709128</commentid>
    <comment_count>1</comment_count>
      <attachid>161579</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-30 16:20:08 -0700</bug_when>
    <thetext>Created attachment 161579
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709160</commentid>
    <comment_count>2</comment_count>
      <attachid>161579</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-30 16:47:27 -0700</bug_when>
    <thetext>Comment on attachment 161579
Patch

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

&gt; Source/WebCore/inspector/InspectorStyleTextEditor.cpp:107
&gt; +            textToSet.append(formatLineFeed);

It seems this function wants a StringBuilder.  Maybe needs a fixme.

&gt; Source/WebCore/inspector/NetworkResourcesData.cpp:116
&gt;      m_content = m_decoder-&gt;decode(m_dataBuffer-&gt;data(), m_dataBuffer-&gt;size());
&gt; -    m_content += m_decoder-&gt;flush();
&gt; +    m_content.append(m_decoder-&gt;flush());

It seems decoder wants a decodeAndFlush command. :)  Or a ShouldFlush enum (like I think it used to ahve).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709171</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-30 16:52:56 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 161579 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=161579&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorStyleTextEditor.cpp:107
&gt; &gt; +            textToSet.append(formatLineFeed);
&gt; 
&gt; It seems this function wants a StringBuilder.  Maybe needs a fixme.

Yeah, the problem is that it&apos;s doing a bunch of complex insert operations as well.  I can add a FIXME.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709219</commentid>
    <comment_count>4</comment_count>
      <attachid>161579</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-08-30 18:32:20 -0700</bug_when>
    <thetext>Comment on attachment 161579
Patch

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

I am only half convinced we should have String::append() at all.

This is an improvement in any case.

&gt; Source/WebCore/platform/chromium/support/WebHTTPLoadInfo.cpp:109
&gt; -        result.iterator-&gt;second += &quot;\n&quot; + String(value);
&gt; +        result.iterator-&gt;second.append(&quot;\n&quot; + String(value));

One of those ugly case where the verbose way is better:
    result.iterator-&gt;second.append = result.iterator-&gt;second.append + &apos;\n&apos; + String(value);

&gt; Source/WebCore/platform/chromium/support/WebURLResponse.cpp:264
&gt; -        result.iterator-&gt;second += &quot;, &quot; + valueStr;
&gt; +        result.iterator-&gt;second.append(&quot;, &quot; + valueStr);

The ugly case.

&gt; Source/WebCore/xml/XMLHttpRequest.cpp:922
&gt; -        result.iterator-&gt;second += &quot;, &quot; + value;
&gt; +        result.iterator-&gt;second.append(&quot;, &quot; + value);

Another case for
    result.iterator-&gt;second.append = result.iterator-&gt;second.append + &quot;, &quot; + value);

&gt; Source/WebCore/xml/XPathFunctions.cpp:-565
&gt; -    // FIXME: Building a String a character at a time is quite slow.
&gt;      for (unsigned i1 = 0; i1 &lt; s1.length(); ++i1) {
&gt;          UChar ch = s1[i1];
&gt;          size_t i2 = s2.find(ch);
&gt;          
&gt;          if (i2 == notFound)
&gt; -            newString += String(&amp;ch, 1);
&gt; -        else if (i2 &lt; s3.length()) {
&gt; -            UChar c2 = s3[i2];
&gt; -            newString += String(&amp;c2, 1);
&gt; -        }

:)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709221</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-30 18:37:05 -0700</bug_when>
    <thetext>Thanks for the review.  I will uglify the code before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709222</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-30 18:37:13 -0700</bug_when>
    <thetext>:)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709858</commentid>
    <comment_count>7</comment_count>
      <attachid>161579</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-08-31 11:57:25 -0700</bug_when>
    <thetext>Comment on attachment 161579
Patch

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

&gt;&gt; Source/WebCore/inspector/NetworkResourcesData.cpp:116
&gt;&gt; +    m_content.append(m_decoder-&gt;flush());
&gt; 
&gt; It seems decoder wants a decodeAndFlush command. :)  Or a ShouldFlush enum (like I think it used to ahve).

It would be good to have a “decode all at once” function that does the decode plus the flush. Simplistic uses of the decoder all want that. I don’t think adding an argument to decode is the way to do it, though. I’d prefer the new function.

Since flush almost always returns an empty string, there is not a significant performance issue caused by using append in the implementation, whether at these call sites or inside the helper function. Basically, the flush function will only return characters if there is a trailing partial character sequence. Not really that common.

&gt;&gt; Source/WebCore/platform/chromium/support/WebHTTPLoadInfo.cpp:109
&gt;&gt; +        result.iterator-&gt;second.append(&quot;\n&quot; + String(value));
&gt; 
&gt; One of those ugly case where the verbose way is better:
&gt;     result.iterator-&gt;second.append = result.iterator-&gt;second.append + &apos;\n&apos; + String(value);

With a some work, we could make the append function call style get the same performance as the verbose way. More template meta-programming work, but not too terribly difficult.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710197</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-01 01:18:00 -0700</bug_when>
    <thetext>Ok.  I&apos;m going to land with the prettier idiom for now because these are fairly rare cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710198</commentid>
    <comment_count>9</comment_count>
      <attachid>161579</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-01 01:19:27 -0700</bug_when>
    <thetext>Comment on attachment 161579
Patch

Clearing flags on attachment: 161579

Committed r127366: &lt;http://trac.webkit.org/changeset/127366&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710199</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-01 01:19:30 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161579</attachid>
            <date>2012-08-30 16:20:08 -0700</date>
            <delta_ts>2012-09-01 01:19:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95508-20120830161956.patch</filename>
            <type>text/plain</type>
            <size>19072</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3MTU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjJiZjBjZGNlNWFmZTdm
YzVkNWY0MzczMzVkMDY1Y2YwZGUwMWVhMi4uMjI5OWZkNTc4ZWFmOTU0N2VhYjk3MzdkZTMwNWZm
ZTE3NTliOTc5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDczIEBACiAyMDEyLTA4LTMwICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKKyAgICAgICAgUmVtb3ZlIGFsbC1idXQtb25l
IHVzZSBvZiBXVEY6OlN0cmluZzo6b3BlcmF0b3IrPSBmcm9tIFdlYkNvcmUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NTA4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCByZW1vdmVzIGFs
bCB0aGUgdXNlcyBvZiBXVEY6OlN0cmluZzo6b3BlcmF0b3IrPSBmcm9tCisgICAgICAgIFdlYkNv
cmUsIGV4Y2VwdCB0aG9zZSBpbiBXb3JrZXJTY3JpcHRMb2FkZXIgKHdoaWNoIG5lZWQgYSBtb3Jl
IGRlbGljYXRlCisgICAgICAgIHBhdGNoKS4gVGhlcmUgd2VyZSBhY3R1YWxseSBhIGhhbmRmdWwg
b2YgbGVnaXRpbWF0ZSB1c2UgY2FzZXMgZm9yICs9IGluCisgICAgICAgIHRoaXMgZ3JvdXAuIEkn
dmUgcmVwbGFjZWQgdGhlbSB3aXRoIGNhbGxzIHRvIFN0cmluZzo6YXBwZW5kIHJhdGhlciB0aGFu
CisgICAgICAgICs9IHNvIHRoYXQgd2UgY2FuIHJlbW92ZSArPSBhbmQgZW5jb3VyYWdlIG1vc3Qg
Y29udHJpYnV0b3JzIHRvIHVzZQorICAgICAgICBtb3JlIGVmZmljaWVudCBzdHJpbmcgaWRpb21z
LgorCisgICAgICAgIChUaGVyZSBhcmUgbGlrZWx5IHNvbWUgbW9yZSB1c2VzIGluIFdlYkNvcmUg
aGlkaW5nIGluIHBvcnQtc3BlY2lmaWMKKyAgICAgICAgY29kZS0tLXRoaXMgcGF0Y2ggY292ZXJz
IG9ubHkgdGhvc2UgY2FsbCBzaXRlcyBmb3VuZCB3aGVuIGNvbXBpbGluZyB0aGUKKyAgICAgICAg
Y2hyb21pdW0tbWFjIHBvcnQuKQorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxl
VGV4dEVkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVRleHRFZGl0
b3I6Omluc2VydFByb3BlcnR5KToKKyAgICAgICAgICAgIC0gVGhpcyBjb21wbGljYXRlZCBmdW5j
dGlvbiBsb29rcyByZWFsbHkgaW5lZmZpY2llbnQsIGJ1dCBJIGRpZG4ndAorICAgICAgICAgICAg
ICBoYXZlIHRoZSBoZWFydCB0byByZXdyaXRlIGl0LgorICAgICAgICAqIGluc3BlY3Rvci9OZXR3
b3JrUmVzb3VyY2VzRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrUmVzb3VyY2Vz
RGF0YTo6UmVzb3VyY2VEYXRhOjpkZWNvZGVEYXRhVG9Db250ZW50KToKKyAgICAgICAgKiBsb2Fk
ZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNo
ZWRDU1NTdHlsZVNoZWV0OjpzaGVldFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkQ1NT
U3R5bGVTaGVldDo6ZGF0YSk6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkRm9udDo6ZW5zdXJlU1ZHRm9udERhdGEpOgorICAg
ICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q2FjaGVkU2NyaXB0OjpzY3JpcHQpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRYU0xT
dHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFhTTFN0eWxlU2hlZXQ6OmRh
dGEpOgorICAgICAgICAgICAgLSBUaGlzIGRlY29kZXIvZmx1c2ggcGF0dGVybiBjYW4gcHJvYmFi
bHkgYmUgaW1wcm92ZWQgYnkgY29tYmluaW5nCisgICAgICAgICAgICAgIHRoZSBkZWNvZGUgYW5k
IGZsdXNoIG9wZXJhdGlvbnMsIGJ1dCBJIGRpZG4ndCBkbyB0aGF0IGluIHRoaXMKKyAgICAgICAg
ICAgICAgcGF0Y2guCisgICAgICAgICogcGFnZS9GcmFtZVRyZWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVUcmVlOjp1bmlxdWVDaGlsZE5hbWUpOgorICAgICAgICAgICAgLSBJIGZvdW5k
IHRoaXMgY29kZSB2ZXJ5IGFtdXNpbmcuIEl0J3Mgd29ycmllZCBlbm91Z2ggYWJvdXQKKyAgICAg
ICAgICAgICAgZWZmaWNpZW5jeSB0byBnaXZlIGEgYmlnIHNwZWVjaCBhYm91dCB3aHkgc25wcmlu
dGYgaXMgc2FmZSwgYnV0CisgICAgICAgICAgICAgIHRoZW4gaXQgaW1wbGljaXRseSBwZXJmb3Jt
cyBhIGxhcmdlIG51bWJlciBvZiBtYWxsb2NzIGFuZCBtZW1jcHkKKyAgICAgICAgICAgICAgb3Bl
cmF0aW9ucy4KKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZTo6dXNlclN0eWxlU2hlZXQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQv
V2ViSFRUUExvYWRJbmZvLmNwcDoKKyAgICAgICAgKFdlYktpdDo6YWRkSGVhZGVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlc3BvbnNlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OmFkZEhUVFBIZWFkZXJGaWVsZCk6CisgICAgICAg
ICAgICAtIFRoaXMgaGVhZGVyLWFwcGVuZGluZyBpZGlvbSBsb29rcyBsaWtlIGEgcmVhc29uYWJs
ZSB1c2UgY2FzZSBmb3IKKyAgICAgICAgICAgICAgU3RyaW5nOjphcHBlbmQuCisgICAgICAgICog
eG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0
OjpzZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0SGVh
ZGVySW50ZXJuYWwpOgorICAgICAgICAqIHhtbC9YUGF0aEZ1bmN0aW9ucy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpYUGF0aDo6RnVuVHJhbnNsYXRlOjpldmFsdWF0ZSk6CisgICAgICAgICAgICAt
IEZpeGVzIDYgeWVhciBvbGQgRklYTUUuCisgICAgICAgICogeG1sL3BhcnNlci9YTUxEb2N1bWVu
dFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6YXBwZW5k
KToKKyAgICAgICAgKiB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmg6CisgICAgICAgIChY
TUxEb2N1bWVudFBhcnNlcik6CisgICAgICAgICogeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNl
ckxpYnhtbDIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmRvRW5k
KToKKyAgICAgICAgKiB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmRvRW5kKToKKyAgICAgICAgICAgIC0gQ2hh
bmdlZCBtX29yaWdpbmFsU291cmNlRm9yVHJhbnNmb3JtIHRvIGEgU2VnbWVudGVkU3RyaW5nIHNv
IHRoYXQKKyAgICAgICAgICAgICAgd2UgZG9uJ3QgbmVlZCB0byBtYWxsb2MgYW5kIGNvcHkgdGhl
IGVudGlyZSBkb2N1bWVudCBldmVyeSB0aW1lCisgICAgICAgICAgICAgIHdlIGdldCBtb3JlIGRh
dGEgZnJvbSB0aGUgbmV0d29yay4KKworMjAxMi0wOC0zMCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3
ZWJraXQub3JnPgorCiAgICAgICAgIFJlcGxhY2UgbW9yZSBpbnN0YW5jZXMgb2YgKz0gd2l0aCBT
dHJpbmdCdWlsZGVyCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05NTUwMgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yU3R5bGVUZXh0RWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JTdHlsZVRleHRFZGl0b3IuY3BwCmluZGV4IDc5NzZhNGFiZWQ5NTZkOTkyMmQ1ZjMxMDU4OWE0
NTNkMjlkMWEwODkuLjA1OWE2NTBiMjc3YTllMzg0MzFkZGYxMTgzMzJiYTc0NDZiZGVmYjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVRleHRFZGl0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVRleHRF
ZGl0b3IuY3BwCkBAIC0xMDQsMTEgKzEwNCwxMSBAQCB2b2lkIEluc3BlY3RvclN0eWxlVGV4dEVk
aXRvcjo6aW5zZXJ0UHJvcGVydHkodW5zaWduZWQgaW5kZXgsIGNvbnN0IFN0cmluZyYgcHJvcAog
ICAgICAgICAgICAgICAgIHRleHRUb1NldC5pbnNlcnQoZm9ybWF0TGluZUZlZWQsIGZvcm1hdHRp
bmdQcmVwZW5kT2Zmc2V0KTsKICAgICAgICAgfQogICAgICAgICBpZiAoIWlzSFRNTExpbmVCcmVh
ayhtX3N0eWxlVGV4dFtwcm9wZXJ0eVN0YXJ0XSkpCi0gICAgICAgICAgICB0ZXh0VG9TZXQgKz0g
Zm9ybWF0TGluZUZlZWQ7CisgICAgICAgICAgICB0ZXh0VG9TZXQuYXBwZW5kKGZvcm1hdExpbmVG
ZWVkKTsKICAgICB9IGVsc2UgewogICAgICAgICBTdHJpbmcgZnVsbFByZWZpeCA9IGZvcm1hdExp
bmVGZWVkICsgZm9ybWF0UHJvcGVydHlQcmVmaXg7CiAgICAgICAgIGxvbmcgZnVsbFByZWZpeExl
bmd0aCA9IGZ1bGxQcmVmaXgubGVuZ3RoKCk7Ci0gICAgICAgIHRleHRUb1NldCArPSBmdWxsUHJl
Zml4OworICAgICAgICB0ZXh0VG9TZXQuYXBwZW5kKGZ1bGxQcmVmaXgpOwogICAgICAgICBpZiAo
aW5zZXJ0Rmlyc3RJblNvdXJjZSAmJiAocHJvcGVydHlTdGFydCA8IGZ1bGxQcmVmaXhMZW5ndGgg
fHwgbV9zdHlsZVRleHQuc3Vic3RyaW5nKHByb3BlcnR5U3RhcnQgLSBmdWxsUHJlZml4TGVuZ3Ro
LCBmdWxsUHJlZml4TGVuZ3RoKSAhPSBmdWxsUHJlZml4KSkKICAgICAgICAgICAgIHRleHRUb1Nl
dC5pbnNlcnQoZnVsbFByZWZpeCwgZm9ybWF0dGluZ1ByZXBlbmRPZmZzZXQpOwogICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvTmV0d29ya1Jlc291cmNlc0RhdGEuY3BwCmlu
ZGV4IGUwNWQxM2RlY2IzODE4ZmNmMWJiODMzMjgzNTlkZWFmYjI5NWRmYWMuLjQ0MTZhZGY3Njdm
M2U4ZGUyZGI1NTIyMjRkN2YyNmNlNjVmODhjYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9OZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL05ldHdvcmtSZXNvdXJjZXNEYXRhLmNwcApAQCAtMTEzLDcgKzExMyw3IEBAIHNp
emVfdCBOZXR3b3JrUmVzb3VyY2VzRGF0YTo6UmVzb3VyY2VEYXRhOjpkZWNvZGVEYXRhVG9Db250
ZW50KCkKICAgICBBU1NFUlQoIWhhc0NvbnRlbnQoKSk7CiAgICAgc2l6ZV90IGRhdGFMZW5ndGgg
PSBtX2RhdGFCdWZmZXItPnNpemUoKTsKICAgICBtX2NvbnRlbnQgPSBtX2RlY29kZXItPmRlY29k
ZShtX2RhdGFCdWZmZXItPmRhdGEoKSwgbV9kYXRhQnVmZmVyLT5zaXplKCkpOwotICAgIG1fY29u
dGVudCArPSBtX2RlY29kZXItPmZsdXNoKCk7CisgICAgbV9jb250ZW50LmFwcGVuZChtX2RlY29k
ZXItPmZsdXNoKCkpOwogICAgIG1fZGF0YUJ1ZmZlciA9IG51bGxwdHI7CiAgICAgcmV0dXJuIGNv
bnRlbnRTaXplSW5CeXRlcyhtX2NvbnRlbnQpIC0gZGF0YUxlbmd0aDsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcAppbmRleCBi
MjU5NmNkZjVkNTAwMGM3MWExYzZjYTg4NWI0MTQxMzUyM2Q2MWFmLi4yOWRhNjI4ZmRlODNlNmY1
YzUzOWViNDFlOTNhMTFmYTA4OWNmYjgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwCkBAIC05MCw3ICs5MCw3IEBAIGNvbnN0
IFN0cmluZyBDYWNoZWRDU1NTdHlsZVNoZWV0OjpzaGVldFRleHQoYm9vbCBlbmZvcmNlTUlNRVR5
cGUsIGJvb2wqIGhhc1ZhbGlkCiAgICAgCiAgICAgLy8gRG9uJ3QgY2FjaGUgdGhlIGRlY29kZWQg
dGV4dCwgcmVnZW5lcmF0aW5nIGlzIGNoZWFwIGFuZCBpdCBjYW4gdXNlIHF1aXRlIGEgYml0IG9m
IG1lbW9yeQogICAgIFN0cmluZyBzaGVldFRleHQgPSBtX2RlY29kZXItPmRlY29kZShtX2RhdGEt
PmRhdGEoKSwgbV9kYXRhLT5zaXplKCkpOwotICAgIHNoZWV0VGV4dCArPSBtX2RlY29kZXItPmZs
dXNoKCk7CisgICAgc2hlZXRUZXh0LmFwcGVuZChtX2RlY29kZXItPmZsdXNoKCkpOwogICAgIHJl
dHVybiBzaGVldFRleHQ7CiB9CiAKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIENhY2hlZENTU1N0
eWxlU2hlZXQ6OmRhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0
YVJlY2VpdgogICAgIC8vIERlY29kZSB0aGUgZGF0YSB0byBmaW5kIG91dCB0aGUgZW5jb2Rpbmcg
YW5kIGtlZXAgdGhlIHNoZWV0IHRleHQgYXJvdW5kIGR1cmluZyBjaGVja05vdGlmeSgpCiAgICAg
aWYgKG1fZGF0YSkgewogICAgICAgICBtX2RlY29kZWRTaGVldFRleHQgPSBtX2RlY29kZXItPmRl
Y29kZShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCkpOwotICAgICAgICBtX2RlY29kZWRT
aGVldFRleHQgKz0gbV9kZWNvZGVyLT5mbHVzaCgpOworICAgICAgICBtX2RlY29kZWRTaGVldFRl
eHQuYXBwZW5kKG1fZGVjb2Rlci0+Zmx1c2goKSk7CiAgICAgfQogICAgIHNldExvYWRpbmcoZmFs
c2UpOwogICAgIGNoZWNrTm90aWZ5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkRm9udC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkRm9udC5jcHAKaW5kZXggMjdmZmQ5NTc0N2EyYzg0NzAwZGE1ZjQxN2UxYTI3YjkxOGFiODM3
MC4uNzJjN2NhNzU5Mzg5NTI0Y2M2MTU5NTFiNWZlNjhlMjg5OTUzYTZmZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmNwcApAQCAtMTM3LDcgKzEzNyw3IEBAIGJv
b2wgQ2FjaGVkRm9udDo6ZW5zdXJlU1ZHRm9udERhdGEoKQogCiAgICAgICAgIFJlZlB0cjxUZXh0
UmVzb3VyY2VEZWNvZGVyPiBkZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJh
cHBsaWNhdGlvbi94bWwiKTsKICAgICAgICAgU3RyaW5nIHN2Z1NvdXJjZSA9IGRlY29kZXItPmRl
Y29kZShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCkpOwotICAgICAgICBzdmdTb3VyY2Ug
Kz0gZGVjb2Rlci0+Zmx1c2goKTsKKyAgICAgICAgc3ZnU291cmNlLmFwcGVuZChkZWNvZGVyLT5m
bHVzaCgpKTsKICAgICAgICAgCiAgICAgICAgIG1fZXh0ZXJuYWxTVkdEb2N1bWVudC0+c2V0Q29u
dGVudChzdmdTb3VyY2UpOwogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZFNjcmlwdC5jcHAKaW5kZXggMTJjOWZlNTczMmYwMWZlZDFjOTI4YjRlOWU5MDdhMTBh
NzFmY2E5OS4uNzIyNjRmYTRiNGVlNDk3NTgyN2U5ZmMwOTE3OTJlZjdjZjA0NmI0MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5jcHAKQEAgLTcxLDcgKzcx
LDcgQEAgY29uc3QgU3RyaW5nJiBDYWNoZWRTY3JpcHQ6OnNjcmlwdCgpCiAKICAgICBpZiAoIW1f
c2NyaXB0ICYmIG1fZGF0YSkgewogICAgICAgICBtX3NjcmlwdCA9IG1fZGVjb2Rlci0+ZGVjb2Rl
KG1fZGF0YS0+ZGF0YSgpLCBlbmNvZGVkU2l6ZSgpKTsKLSAgICAgICAgbV9zY3JpcHQgKz0gbV9k
ZWNvZGVyLT5mbHVzaCgpOworICAgICAgICBtX3NjcmlwdC5hcHBlbmQobV9kZWNvZGVyLT5mbHVz
aCgpKTsKICAgICAgICAgc2V0RGVjb2RlZFNpemUobV9zY3JpcHQuc2l6ZUluQnl0ZXMoKSk7CiAg
ICAgfQogICAgIG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRYU0xTdHlsZVNoZWV0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRYU0xTdHlsZVNoZWV0LmNw
cAppbmRleCAwZTc3MTYxOGJjNTg5MWIzODY2MTdjNzE5N2I5NzViM2RlY2YzNjUxLi43N2M1MWU4
ZDhmNDIyZjkwMzllYjc1M2RkY2I3MjcxYWIzYTkzNzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwCkBAIC02OSwxMSArNjks
MTEgQEAgdm9pZCBDYWNoZWRYU0xTdHlsZVNoZWV0OjpkYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXYKICAgICBpZiAoIWFsbERhdGFSZWNlaXZlZCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhID0gZGF0YTsgICAgIAorICAgIG1fZGF0YSA9
IGRhdGE7CiAgICAgc2V0RW5jb2RlZFNpemUobV9kYXRhLmdldCgpID8gbV9kYXRhLT5zaXplKCkg
OiAwKTsKICAgICBpZiAobV9kYXRhLmdldCgpKSB7Ci0gICAgICAgIG1fc2hlZXQgPSBTdHJpbmco
bV9kZWNvZGVyLT5kZWNvZGUobV9kYXRhLT5kYXRhKCksIGVuY29kZWRTaXplKCkpKTsKLSAgICAg
ICAgbV9zaGVldCArPSBtX2RlY29kZXItPmZsdXNoKCk7CisgICAgICAgIG1fc2hlZXQgPSBtX2Rl
Y29kZXItPmRlY29kZShtX2RhdGEtPmRhdGEoKSwgZW5jb2RlZFNpemUoKSk7CisgICAgICAgIG1f
c2hlZXQuYXBwZW5kKG1fZGVjb2Rlci0+Zmx1c2goKSk7CiAgICAgfQogICAgIHNldExvYWRpbmco
ZmFsc2UpOwogICAgIGNoZWNrTm90aWZ5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVHJlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVHJlZS5jcHAKaW5k
ZXggNjM3OGYzZmM4MGQ4YjNkYzBkMmEzMjhiNzhkNmU0OGY2NzIyNDQ2ZS4uZDYyNDU3OTgzYWUw
ZDhiODg3ODJlYzkxMmUxMWY2ZjU1MzYzNmNjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVRyZWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVUcmVlLmNw
cApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogdXNpbmcgc3RkOjpzd2FwOwogCkBAIC0x
NTAsMjkgKzE1MSwyMyBAQCBBdG9taWNTdHJpbmcgRnJhbWVUcmVlOjp1bmlxdWVDaGlsZE5hbWUo
Y29uc3QgQXRvbWljU3RyaW5nJiByZXF1ZXN0ZWROYW1lKSBjb25zdAogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNoYWluLmFwcGVuZChmcmFtZSk7CiAgICAgfQotICAgIFN0cmluZyBuYW1l
OwotICAgIG5hbWUgKz0gZnJhbWVQYXRoUHJlZml4OwotICAgIGlmIChmcmFtZSkKLSAgICAgICAg
bmFtZSArPSBmcmFtZS0+dHJlZSgpLT51bmlxdWVOYW1lKCkuc3RyaW5nKCkuc3Vic3RyaW5nKGZy
YW1lUGF0aFByZWZpeExlbmd0aCwKLSAgICAgICAgICAgIGZyYW1lLT50cmVlKCktPnVuaXF1ZU5h
bWUoKS5sZW5ndGgoKSAtIGZyYW1lUGF0aFByZWZpeExlbmd0aCAtIGZyYW1lUGF0aFN1ZmZpeExl
bmd0aCk7CisgICAgU3RyaW5nQnVpbGRlciBuYW1lOworICAgIG5hbWUuYXBwZW5kKGZyYW1lUGF0
aFByZWZpeCk7CisgICAgaWYgKGZyYW1lKSB7CisgICAgICAgIG5hbWUuYXBwZW5kKGZyYW1lLT50
cmVlKCktPnVuaXF1ZU5hbWUoKS5zdHJpbmcoKS5zdWJzdHJpbmcoZnJhbWVQYXRoUHJlZml4TGVu
Z3RoLAorICAgICAgICAgICAgZnJhbWUtPnRyZWUoKS0+dW5pcXVlTmFtZSgpLmxlbmd0aCgpIC0g
ZnJhbWVQYXRoUHJlZml4TGVuZ3RoIC0gZnJhbWVQYXRoU3VmZml4TGVuZ3RoKSk7CisgICAgfQog
ICAgIGZvciAoaW50IGkgPSBjaGFpbi5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewogICAgICAg
ICBmcmFtZSA9IGNoYWluW2ldOwotICAgICAgICBuYW1lICs9ICIvIjsKLSAgICAgICAgbmFtZSAr
PSBmcmFtZS0+dHJlZSgpLT51bmlxdWVOYW1lKCk7CisgICAgICAgIG5hbWUuYXBwZW5kKCcvJyk7
CisgICAgICAgIG5hbWUuYXBwZW5kKGZyYW1lLT50cmVlKCktPnVuaXF1ZU5hbWUoKSk7CiAgICAg
fQogCi0gICAgLy8gU3VmZml4IGJ1ZmZlciBoYXMgbW9yZSB0aGFuIGVub3VnaCBzcGFjZSBmb3I6
Ci0gICAgLy8gICAgIDEwIGNoYXJhY3RlcnMgYmVmb3JlIHRoZSBudW1iZXIKLSAgICAvLyAgICAg
YSBudW1iZXIgKDIwIGRpZ2l0cyBmb3IgdGhlIGxhcmdlc3QgNjQtYml0IGludGVnZXIpCi0gICAg
Ly8gICAgIDYgY2hhcmFjdGVycyBhZnRlciB0aGUgbnVtYmVyCi0gICAgLy8gICAgIHRyYWlsaW5n
IG51bGwgYnl0ZQotICAgIC8vIEJ1dCB3ZSBzdGlsbCB1c2Ugc25wcmludGYganVzdCB0byBiZSBl
eHRyYS1zYWZlLgotICAgIGNoYXIgc3VmZml4WzQwXTsKLSAgICBzbnByaW50ZihzdWZmaXgsIHNp
emVvZihzdWZmaXgpLCAiLzwhLS1mcmFtZSV1LS0+LS0+IiwgY2hpbGRDb3VudCgpKTsKLQotICAg
IG5hbWUgKz0gc3VmZml4OworICAgIG5hbWUuYXBwZW5kTGl0ZXJhbCgiLzwhLS1mcmFtZSIpOwor
ICAgIG5hbWUuYXBwZW5kKFN0cmluZzo6bnVtYmVyKGNoaWxkQ291bnQoKSkpOworICAgIG5hbWUu
YXBwZW5kTGl0ZXJhbCgiLS0+LS0+Iik7CiAKLSAgICByZXR1cm4gQXRvbWljU3RyaW5nKG5hbWUp
OworICAgIHJldHVybiBuYW1lLnRvQXRvbWljU3RyaW5nKCk7CiB9CiAKIGlubGluZSBGcmFtZSog
RnJhbWVUcmVlOjpzY29wZWRDaGlsZCh1bnNpZ25lZCBpbmRleCwgVHJlZVNjb3BlKiBzY29wZSkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IGI4YjgzNTY5MjYxMDYwZWZhOTk2YTAzMzMyYTJi
Y2VjOWM4MDRiNTAuLjI5ODM4MDhlYWNhYzMxMjA5NmUyOWJhMWZkZjdjYTk4ZDMyM2QzNDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmNwcApAQCAtODM3LDcgKzgzNyw3IEBAIGNvbnN0IFN0cmluZyYgUGFnZTo6
dXNlclN0eWxlU2hlZXQoKSBjb25zdAogCiAgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+
IGRlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoInRleHQvY3NzIik7CiAgICAg
bV91c2VyU3R5bGVTaGVldCA9IGRlY29kZXItPmRlY29kZShkYXRhLT5kYXRhKCksIGRhdGEtPnNp
emUoKSk7Ci0gICAgbV91c2VyU3R5bGVTaGVldCArPSBkZWNvZGVyLT5mbHVzaCgpOworICAgIG1f
dXNlclN0eWxlU2hlZXQuYXBwZW5kKGRlY29kZXItPmZsdXNoKCkpOwogCiAgICAgcmV0dXJuIG1f
dXNlclN0eWxlU2hlZXQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9zdXBwb3J0L1dlYkhUVFBMb2FkSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYkhUVFBMb2FkSW5mby5jcHAKaW5kZXggNzc2MmZkOGM0
OWZkYTI0MmEzNzAyNmM2ZGZlNjc3ZjIzMDUwZTI5ZC4uMzNlYWNlMWQyZGYyMTFiNzY5NTJiNjc0
ZjBiOTU3MGM5MzRlN2NjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vc3VwcG9ydC9XZWJIVFRQTG9hZEluZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViSFRUUExvYWRJbmZvLmNwcApAQCAtMTA2LDcgKzEw
Niw3IEBAIHN0YXRpYyB2b2lkIGFkZEhlYWRlcihIVFRQSGVhZGVyTWFwKiBtYXAsIGNvbnN0IFdl
YlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nCiAgICAgSFRUUEhlYWRlck1hcDo6QWRkUmVz
dWx0IHJlc3VsdCA9IG1hcC0+YWRkKG5hbWUsIHZhbHVlKTsKICAgICAvLyBJdCBpcyBpbXBvcnRh
bnQgdGhhdCB2YWx1ZXMgYXJlIHNlcGFyYXRlZCBieSAnXG4nLCBub3QgY29tbWEsIG90aGVyd2lz
ZSBTZXQtQ29va2llIGhlYWRlciBpcyBub3QgcGFyc2VhYmxlLgogICAgIGlmICghcmVzdWx0Lmlz
TmV3RW50cnkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kICs9ICJcbiIgKyBTdHJp
bmcodmFsdWUpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5hcHBlbmQoIlxuIiAr
IFN0cmluZyh2YWx1ZSkpOwogfQogCiB2b2lkIFdlYkhUVFBMb2FkSW5mbzo6YWRkUmVxdWVzdEhl
YWRlcihjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgdmFsdWUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJl
c3BvbnNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2Vi
VVJMUmVzcG9uc2UuY3BwCmluZGV4IDFmOWI5Njg2MGUwYmEyZTkzODViZTU1NTk1ZGE2ZTA5ZjUx
NTEzZDQuLjlkZTNjMDFhMGNhOWQ0MzhkYTBhYWEwYzY4OTMzZGU4ZjBiNzI5MTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVzcG9u
c2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2Vi
VVJMUmVzcG9uc2UuY3BwCkBAIC0yNjEsNyArMjYxLDcgQEAgdm9pZCBXZWJVUkxSZXNwb25zZTo6
YWRkSFRUUEhlYWRlckZpZWxkKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5n
JgogICAgIEhUVFBIZWFkZXJNYXA6OkFkZFJlc3VsdCByZXN1bHQgPQogICAgICAgICBjb25zdF9j
YXN0PEhUVFBIZWFkZXJNYXAqPigmbWFwKS0+YWRkKG5hbWUsIHZhbHVlU3RyKTsKICAgICBpZiAo
IXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCArPSAi
LCAiICsgdmFsdWVTdHI7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmFwcGVuZCgi
LCAiICsgdmFsdWVTdHIpOwogfQogCiB2b2lkIFdlYlVSTFJlc3BvbnNlOjpjbGVhckhUVFBIZWFk
ZXJGaWVsZChjb25zdCBXZWJTdHJpbmcmIG5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1
ZXN0LmNwcAppbmRleCAxMTFhNjQ5YTEzZTc2YWVmODM3MGIxODJjOTUxY2E5ZTc1Y2ZiMjJlLi44
ZmI3Y2UwZjUyYmQzYTIzOWQxN2Q3ZTRkNzZiMzUyMmEwYzNmYzRmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdC5jcHAKQEAgLTY0NCw4ICs2NDQsNyBAQCB2b2lkIFhNTEh0dHBSZXF1
ZXN0OjpzZW5kKERPTUZvcm1EYXRhKiBib2R5LCBFeGNlcHRpb25Db2RlJiBlYykKIAogICAgICAg
ICBTdHJpbmcgY29udGVudFR5cGUgPSBnZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiKTsK
ICAgICAgICAgaWYgKGNvbnRlbnRUeXBlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgY29udGVu
dFR5cGUgPSAibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9IjsKLSAgICAgICAgICAgIGNv
bnRlbnRUeXBlICs9IG1fcmVxdWVzdEVudGl0eUJvZHktPmJvdW5kYXJ5KCkuZGF0YSgpOworICAg
ICAgICAgICAgY29udGVudFR5cGUgPSBtYWtlU3RyaW5nKCJtdWx0aXBhcnQvZm9ybS1kYXRhOyBi
b3VuZGFyeT0iLCBtX3JlcXVlc3RFbnRpdHlCb2R5LT5ib3VuZGFyeSgpLmRhdGEoKSk7CiAgICAg
ICAgICAgICBzZXRSZXF1ZXN0SGVhZGVySW50ZXJuYWwoIkNvbnRlbnQtVHlwZSIsIGNvbnRlbnRU
eXBlKTsKICAgICAgICAgfQogICAgIH0KQEAgLTkyMCw3ICs5MTksNyBAQCB2b2lkIFhNTEh0dHBS
ZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhZGVySW50ZXJuYWwoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
LCBjb25zdCBTdAogewogICAgIEhUVFBIZWFkZXJNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3Jl
cXVlc3RIZWFkZXJzLmFkZChuYW1lLCB2YWx1ZSk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRy
eSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgKz0gIiwgIiArIHZhbHVlOworICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC5hcHBlbmQoIiwgIiArIHZhbHVlKTsKIH0KIAog
U3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRSZXF1ZXN0SGVhZGVyKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0
aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCmluZGV4IDNj
OTBlM2I1MTcxODU5YTU2ZTg3MmJiNzY1MmY1OTU5OGE2MzdkMmEuLjM5MzRlYmE4ZWFhZTRhMWI1
ODkwMmI4ODkzZjU1YzJlNmNjNDEzZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9Y
UGF0aEZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25z
LmNwcApAQCAtNTUwLDIyICs1NTAsMTkgQEAgVmFsdWUgRnVuVHJhbnNsYXRlOjpldmFsdWF0ZSgp
IGNvbnN0CiAgICAgU3RyaW5nIHMxID0gYXJnKDApLT5ldmFsdWF0ZSgpLnRvU3RyaW5nKCk7CiAg
ICAgU3RyaW5nIHMyID0gYXJnKDEpLT5ldmFsdWF0ZSgpLnRvU3RyaW5nKCk7CiAgICAgU3RyaW5n
IHMzID0gYXJnKDIpLT5ldmFsdWF0ZSgpLnRvU3RyaW5nKCk7Ci0gICAgU3RyaW5nIG5ld1N0cmlu
ZzsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKIAotICAgIC8vIEZJWE1FOiBCdWlsZGluZyBh
IFN0cmluZyBhIGNoYXJhY3RlciBhdCBhIHRpbWUgaXMgcXVpdGUgc2xvdy4KICAgICBmb3IgKHVu
c2lnbmVkIGkxID0gMDsgaTEgPCBzMS5sZW5ndGgoKTsgKytpMSkgewogICAgICAgICBVQ2hhciBj
aCA9IHMxW2kxXTsKICAgICAgICAgc2l6ZV90IGkyID0gczIuZmluZChjaCk7CiAgICAgICAgIAog
ICAgICAgICBpZiAoaTIgPT0gbm90Rm91bmQpCi0gICAgICAgICAgICBuZXdTdHJpbmcgKz0gU3Ry
aW5nKCZjaCwgMSk7Ci0gICAgICAgIGVsc2UgaWYgKGkyIDwgczMubGVuZ3RoKCkpIHsKLSAgICAg
ICAgICAgIFVDaGFyIGMyID0gczNbaTJdOwotICAgICAgICAgICAgbmV3U3RyaW5nICs9IFN0cmlu
ZygmYzIsIDEpOwotICAgICAgICB9CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNoKTsKKyAg
ICAgICAgZWxzZSBpZiAoaTIgPCBzMy5sZW5ndGgoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoczNbaTJdKTsKICAgICB9CiAKLSAgICByZXR1cm4gbmV3U3RyaW5nOworICAgIHJldHVybiBy
ZXN1bHQudG9TdHJpbmcoKTsKIH0KIAogVmFsdWUgRnVuQm9vbGVhbjo6ZXZhbHVhdGUoKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNwcApp
bmRleCA1MjQxZjA3MTU5NDFlMjMxYzE1YzgzZjYxNmQ0MDc0ZWVjNDI3ODg3Li42OWVmNmE1MmM2
ZjgzYWU5NGQ4YmVhNmU4ZDViYTg0YThlNjAyMzc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94
bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNwcApAQCAtMTEyLDIyICsxMTIsMjAgQEAgdm9p
ZCBYTUxEb2N1bWVudFBhcnNlcjo6aW5zZXJ0KGNvbnN0IFNlZ21lbnRlZFN0cmluZyYpCiAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmFwcGVu
ZChjb25zdCBTZWdtZW50ZWRTdHJpbmcmIHMpCit2b2lkIFhNTERvY3VtZW50UGFyc2VyOjphcHBl
bmQoY29uc3QgU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiB7Ci0gICAgU3RyaW5nIHBhcnNlU3Ry
aW5nID0gcy50b1N0cmluZygpOwotCiAgICAgaWYgKG1fc2F3WFNMVHJhbnNmb3JtIHx8ICFtX3Nh
d0ZpcnN0RWxlbWVudCkKLSAgICAgICAgbV9vcmlnaW5hbFNvdXJjZUZvclRyYW5zZm9ybSArPSBw
YXJzZVN0cmluZzsKKyAgICAgICAgbV9vcmlnaW5hbFNvdXJjZUZvclRyYW5zZm9ybS5hcHBlbmQo
c291cmNlKTsKIAogICAgIGlmIChpc1N0b3BwZWQoKSB8fCBtX3Nhd1hTTFRyYW5zZm9ybSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fcGFyc2VyUGF1c2VkKSB7Ci0gICAgICAgIG1fcGVu
ZGluZ1NyYy5hcHBlbmQocyk7CisgICAgICAgIG1fcGVuZGluZ1NyYy5hcHBlbmQoc291cmNlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGRvV3JpdGUocGFyc2VTdHJpbmcpOworICAg
IGRvV3JpdGUoc291cmNlLnRvU3RyaW5nKCkpOwogCiAgICAgLy8gQWZ0ZXIgcGFyc2luZywgZ28g
YWhlYWQgYW5kIGRpc3BhdGNoIGltYWdlIGJlZm9yZWxvYWQgZXZlbnRzLgogICAgIEltYWdlTG9h
ZGVyOjpkaXNwYXRjaFBlbmRpbmdCZWZvcmVMb2FkRXZlbnRzKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29y
ZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmgKaW5kZXggMmE3MjQ1ZTYxMzMxOTYzN2Y4
MWY2MTFlMzA4MzE0OWYwMDZiZTc0YS4uZThkMTQ0YmVjMzRlYjE0M2RmZTJjZGQ0MDY3NzU1MzA3
NWU2ZTliMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVu
dFBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJz
ZXIuaApAQCAtMTc3LDcgKzE3Nyw3IEBAIHB1YmxpYzoKIAogICAgICAgICBGcmFtZVZpZXcqIG1f
dmlldzsKIAotICAgICAgICBTdHJpbmcgbV9vcmlnaW5hbFNvdXJjZUZvclRyYW5zZm9ybTsKKyAg
ICAgICAgU2VnbWVudGVkU3RyaW5nIG1fb3JpZ2luYWxTb3VyY2VGb3JUcmFuc2Zvcm07CiAKICNp
ZiBVU0UoUVhNTFNUUkVBTSkKICAgICAgICAgUVhtbFN0cmVhbVJlYWRlciBtX3N0cmVhbTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4
bWwyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4
bWwyLmNwcAppbmRleCA0OWEzMTZlMDg1OTVlNGM3NWM4NzEzNDI5NzM2YzYyNGMyY2Y5NmM3Li4y
MDgzMzZlZDI1ZGI5MDc0ZTI1ZjlmZTYxYTA1ZmRlMThhOWZhNmZjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCkBA
IC0xMzMyLDcgKzEzMzIsNyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpkb0VuZCgpCiAgICAg
ICAgIHhtbFRyZWVWaWV3ZXIudHJhbnNmb3JtRG9jdW1lbnRUb1RyZWVWaWV3KCk7CiAKICAgICBp
ZiAobV9zYXdYU0xUcmFuc2Zvcm0pIHsKLSAgICAgICAgdm9pZCogZG9jID0geG1sRG9jUHRyRm9y
U3RyaW5nKGRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCksIG1fb3JpZ2luYWxTb3Vy
Y2VGb3JUcmFuc2Zvcm0sIGRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKTsKKyAgICAgICAgdm9p
ZCogZG9jID0geG1sRG9jUHRyRm9yU3RyaW5nKGRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9h
ZGVyKCksIG1fb3JpZ2luYWxTb3VyY2VGb3JUcmFuc2Zvcm0udG9TdHJpbmcoKSwgZG9jdW1lbnQo
KS0+dXJsKCkuc3RyaW5nKCkpOwogICAgICAgICBkb2N1bWVudCgpLT5zZXRUcmFuc2Zvcm1Tb3Vy
Y2UoYWRvcHRQdHIobmV3IFRyYW5zZm9ybVNvdXJjZShkb2MpKSk7CiAKICAgICAgICAgZG9jdW1l
bnQoKS0+c2V0UGFyc2luZyhmYWxzZSk7IC8vIE1ha2UgdGhlIGRvY3VtZW50IHRoaW5rIGl0J3Mg
ZG9uZSwgc28gaXQgd2lsbCBhcHBseSBYU0wgc3R5bGVzaGVldHMuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwIGIvU291cmNlL1dl
YkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclF0LmNwcAppbmRleCA2NDMwYWNjYzky
MzIyMzJmMjRhNmQyYzY0ZWM4N2EzZjk1YzlkNWYyLi5jMGJhOWNlZDZhZTk4NGNiZjAxYTI2ZDY1
ZDA1MmZhNGZjOWM3ZTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hN
TERvY3VtZW50UGFyc2VyUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1M
RG9jdW1lbnRQYXJzZXJRdC5jcHAKQEAgLTIwMSw3ICsyMDEsNyBAQCB2b2lkIFhNTERvY3VtZW50
UGFyc2VyOjpkb0VuZCgpCiB7CiAjaWYgRU5BQkxFKFhTTFQpCiAgICAgaWYgKG1fc2F3WFNMVHJh
bnNmb3JtKSB7Ci0gICAgICAgIGRvY3VtZW50KCktPnNldFRyYW5zZm9ybVNvdXJjZShhZG9wdFB0
cihuZXcgVHJhbnNmb3JtU291cmNlKG1fb3JpZ2luYWxTb3VyY2VGb3JUcmFuc2Zvcm0pKSk7Cisg
ICAgICAgIGRvY3VtZW50KCktPnNldFRyYW5zZm9ybVNvdXJjZShhZG9wdFB0cihuZXcgVHJhbnNm
b3JtU291cmNlKG1fb3JpZ2luYWxTb3VyY2VGb3JUcmFuc2Zvcm0udG9TdHJpbmcoKSkpKTsKICAg
ICAgICAgZG9jdW1lbnQoKS0+c2V0UGFyc2luZyhmYWxzZSk7IC8vIE1ha2UgdGhlIGRvYyB0aGlu
ayBpdCdzIGRvbmUsIHNvIGl0IHdpbGwgYXBwbHkgeHNsIHNoZWV0cy4KICAgICAgICAgZG9jdW1l
bnQoKS0+c3R5bGVSZXNvbHZlckNoYW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlhdGVseSk7CiAgICAg
ICAgIGRvY3VtZW50KCktPnNldFBhcnNpbmcodHJ1ZSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>