<?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>73457</bug_id>
          
          <creation_ts>2011-11-30 09:35:27 -0800</creation_ts>
          <short_desc>8 bit string work slows down Kraken json-stringify-tinderbox</short_desc>
          <delta_ts>2011-12-06 22:27:58 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>73236</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>fpizlo</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>511814</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-11-30 09:35:27 -0800</bug_when>
    <thetext>It appears that json-stringify-tinderbox slows down in part due to StringBuilder converting 8 bit string to 16 bit strings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512044</commentid>
    <comment_count>1</comment_count>
      <attachid>117258</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-11-30 12:58:20 -0800</bug_when>
    <thetext>Created attachment 117258
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512055</commentid>
    <comment_count>2</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-11-30 13:06:20 -0800</bug_when>
    <thetext>Forgot to mention that this change eliminates the slowdown to json-stringify-tinderbox.  It does introduce a 4.4% slowdown to json-parse-financial.  That will be addressed in a subsequent patch to StringImpl::equal.

The attached proposed patch along with the proposed StringImpl::equal give Kraken a slight improvement (.5% using the arithmetic mean and 1% using the geometric mean) when compared to r100509 using bencher.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512062</commentid>
    <comment_count>3</comment_count>
      <attachid>117258</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-11-30 13:14:37 -0800</bug_when>
    <thetext>Comment on attachment 117258
Patch

Attachment 117258 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10704273</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512070</commentid>
    <comment_count>4</comment_count>
      <attachid>117258</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-11-30 13:27:14 -0800</bug_when>
    <thetext>Comment on attachment 117258
Patch

Attachment 117258 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/10697288</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512104</commentid>
    <comment_count>5</comment_count>
      <attachid>117266</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-11-30 13:55:00 -0800</bug_when>
    <thetext>Created attachment 117266
Patch updated with StringBuilder::characters() named correctly

The prior performance comments hold for this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512456</commentid>
    <comment_count>6</comment_count>
      <attachid>117266</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-30 21:54:53 -0800</bug_when>
    <thetext>Comment on attachment 117266
Patch updated with StringBuilder::characters() named correctly

Attachment 117266 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10696506</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512990</commentid>
    <comment_count>7</comment_count>
      <attachid>117457</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-12-01 12:29:36 -0800</bug_when>
    <thetext>Created attachment 117457
Patch with speculative fix for chromium linux</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513128</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-12-01 14:36:49 -0800</bug_when>
    <thetext>Can you include the perf effect in the ChangeLog, and post the results here?

Makes it easier to track things down in case somewhere there is a slow-down.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513289</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-12-01 17:03:34 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Can you include the perf effect in the ChangeLog, and post the results here?
&gt; 
&gt; Makes it easier to track things down in case somewhere there is a slow-down.

Added the following to the ChangeLog:

        This change eliminates 5% of the 7% slowdown to json-stringify-tinderbox.
        This change introduces a 4.8% slowdown to json-parse-financial.
        Both of these remaining slowdowns will be addressed in a subsequent
        patch to StringImpl::equal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513411</commentid>
    <comment_count>10</comment_count>
      <attachid>117457</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-12-01 19:42:06 -0800</bug_when>
    <thetext>Comment on attachment 117457
Patch with speculative fix for chromium linux

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

&gt; Source/JavaScriptCore/wtf/text/StringBuilder.cpp:156
&gt; +    else if (m_buffer-&gt;hasOneRef())
&gt; +            m_buffer = StringImpl::reallocate(m_buffer.release(), requiredLength, m_bufferCharacters16);

Indentation issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514171</commentid>
    <comment_count>11</comment_count>
      <attachid>117697</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-12-02 14:41:58 -0800</bug_when>
    <thetext>Created attachment 117697
Patch with fix for Win build failure

This also includes the requested performance comment and indentation fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515216</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-12-05 11:09:00 -0800</bug_when>
    <thetext>Committed r102017: &lt;http://trac.webkit.org/changeset/102017&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516504</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-06 22:27:58 -0800</bug_when>
    <thetext>It appears that this patch regressed StringBuilder:
http://build.webkit.org/builders/Chromium%20Linux%20Release%20%28Tests%29/builds/26827/steps/run-api-tests/logs/stdio

[ RUN      ] StringBuilderTest.Append
Tools/TestWebKitAPI/Tests/WTF/StringBuilder.cpp:53: Failure
Value of: String(builder.characters(), builder.length())
  Actual: 0123456789abcd7
Expected: String(expected)
Which is: 0123456789abcdefg
Tools/TestWebKitAPI/Tests/WTF/StringBuilder.cpp:53: Failure
Value of: String(builder.characters(), builder.length())
  Actual: 0123456789abcd7
Expected: String(expected)
Which is: 0123456789abcdefg
Tools/TestWebKitAPI/Tests/WTF/StringBuilder.cpp:53: Failure
Value of: String(builder.characters(), builder.length())
  Actual: 0123456789abcd7
Expected: String(expected)
Which is: 0123456789abcdefg#
Tools/TestWebKitAPI/Tests/WTF/StringBuilder.cpp:53: Failure
Value of: String(builder.characters(), builder.length())
  Actual: 0123456789abcd7
Expected: String(expected)
Which is: 0123456789abcdefg#
Tools/TestWebKitAPI/Tests/WTF/StringBuilder.cpp:53: Failure
Value of: String(builder.characters(), builder.length())
  Actual: 0123456789abcdefg#0123456789abcd7
Expected: String(expected)
Which is: 0123456789abcdefg#0123456789abcdefg#XYZ
[  FAILED  ] StringBuilderTest.Append (1 ms)
[----------] 1 test from StringBuilderTest (1 ms total)

[ RUN      ] StringBuilderTest.ToStringPreserveCapacity
Tools/TestWebKitAPI/Tests/WTF/StringBuilder.cpp:153: Failure
Value of: string1
  Actual: 0123456789abcdefghijklmnopqrstuvwxyz
Expected: String(&quot;0123456789abcdefghijklmnopqrstuvwxyzABCDEF&quot;)
Which is: 0123456789abcdefghijklmnopqrstuvwxyzABCDEF
[  FAILED  ] StringBuilderTest.ToStringPreserveCapacity (0 ms)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117258</attachid>
            <date>2011-11-30 12:58:20 -0800</date>
            <delta_ts>2011-11-30 13:55:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>73457-1.patch</filename>
            <type>text/plain</type>
            <size>21246</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAxNTQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBA
CisyMDExLTExLTMwICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIDggYml0IHN0cmluZyB3b3JrIHNsb3dzIGRvd24gS3Jha2VuIGpzb24tc3RyaW5naWZ5LXRp
bmRlcmJveAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzM0NTcKKworICAgICAgICBBZGRlZCA4IGJpdCBwYXRoIHRvIFN0cmluZ0J1aWxkZXIuICBTdHJp
bmdCdWlsZGVyIHN0YXJ0cworICAgICAgICBhc3N1bWluZyA4IGJpdCBjb250ZW50cyBhbmQgZ2V0
cyBjb252ZXJ0ZWQgdG8gMTYgYml0IHVwb24KKyAgICAgICAgc2VlaW5nIHRoZSBmaXJzdCAxNiBi
aXQgY2hhcmFjdGVyIG9yIHN0cmluZy4gIFNwbGl0CisgICAgICAgIGFwcGVuZFVuaW5pdGlhbGll
emVkIGludG8gYW4gaW5saW5lZCBmYXN0IGFuZCBmdW5jdGlvbiBjYWxsCisgICAgICAgIHNsb3cg
Y2FzZS4KKworICAgICAgICBGYWN0b3JlZCBvdXQgdGhlIHByb2Nlc3Npbmcgb2YgdGhlIFVTdHJp
bmcgYXJndW1lbnQgZnJvbQorICAgICAgICBTdHJpbmdpZmllcjo6YXBwZW5kUXVvdGVkU3RyaW5n
KCkgdG8gYSBzdGF0aWMgdGVtcGxhdGVkIGZ1bmN0aW9uCisgICAgICAgIGJhc2VkIG9uIGNoYXJh
Y3RlciBzaXplLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogcnVudGltZS9KU09OT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6YXBwZW5kU3RyaW5n
VG9VU3RyaW5nQnVpbGRlcik6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjphcHBlbmRRdW90
ZWRTdHJpbmcpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwOgorICAgICAg
ICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpyZXNpemUpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWls
ZGVyOjphbGxvY2F0ZUJ1ZmZlcik6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmFsbG9j
YXRlQnVmZmVyVXBDb252ZXJ0KToKKyAgICAgICAgKFdURjo6TENoYXIpOgorICAgICAgICAoV1RG
OjpVQ2hhcik6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnJlc2VydmVDYXBhY2l0eSk6
CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmFwcGVuZFVuaW5pdGlhbGl6ZWQpOgorICAg
ICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjphcHBlbmRVbmluaXRpYWxpemVkU2xvdyk6CisgICAg
ICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmFwcGVuZCk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1
aWxkZXI6OnNocmlua1RvRml0KToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg6
CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OlN0cmluZ0J1aWxkZXIpOgorICAgICAgICAo
V1RGOjpTdHJpbmdCdWlsZGVyOjphcHBlbmQpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVy
OjpvcGVyYXRvcltdKToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6Y2hhcmFjdGVyczgp
OgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpjaGFyYWN0ZXJzMTYpOgorICAgICAgICAo
V1RGOjpTdHJpbmdCdWlsZGVyOjpjaGFyYWN0ZXJzQmxhaCk6CisgICAgICAgIChXVEY6OkxDaGFy
KToKKyAgICAgICAgKFdURjo6VUNoYXIpOgorCiAyMDExLTExLTMwICBNYXJrIEhhaG5lbmJlcmcg
IDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgdG9TdHJpbmdDYWxsYmFjayBhbmQg
dmFsdWVPZkNhbGxiYWNrIGRvIG5vdCBjaGVjayB0aGUgZW50aXJlIHByb3RvdHlwZSBjaGFpbiBm
b3IgY29udmVydFRvVHlwZSBjYWxsYmFjawpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPTk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHJldmlzaW9uIDEwMTQzOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYs
MTMgKzI2Niw5IEBAIExvY2FsPFVua25vd24+IFN0cmluZ2lmaWVyOjpzdHJpbmdpZnkoSGEKICAg
ICByZXR1cm4gTG9jYWw8VW5rbm93bj4obV9leGVjLT5nbG9iYWxEYXRhKCksIGpzU3RyaW5nKG1f
ZXhlYywgcmVzdWx0LnRvVVN0cmluZygpKSk7CiB9CiAKLXZvaWQgU3RyaW5naWZpZXI6OmFwcGVu
ZFF1b3RlZFN0cmluZyhVU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgY29uc3QgVVN0cmluZyYgdmFs
dWUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+CitzdGF0aWMgdm9pZCBhcHBlbmRTdHJp
bmdUb1VTdHJpbmdCdWlsZGVyKFVTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCBjb25zdCBDaGFyVHlw
ZSogZGF0YSwgaW50IGxlbmd0aCkKIHsKLSAgICBpbnQgbGVuZ3RoID0gdmFsdWUubGVuZ3RoKCk7
Ci0KLSAgICBidWlsZGVyLmFwcGVuZCgnIicpOwotCi0gICAgY29uc3QgVUNoYXIqIGRhdGEgPSB2
YWx1ZS5jaGFyYWN0ZXJzKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewogICAgICAgICBpbnQgc3RhcnQgPSBpOwogICAgICAgICB3aGlsZSAoaSA8IGxlbmd0aCAmJiAo
ZGF0YVtpXSA+IDB4MUYgJiYgZGF0YVtpXSAhPSAnIicgJiYgZGF0YVtpXSAhPSAnXFwnKSkKQEAg
LTI4MSw0MiArMjc3LDU0IEBAIHZvaWQgU3RyaW5naWZpZXI6OmFwcGVuZFF1b3RlZFN0cmluZyhV
U3QKICAgICAgICAgaWYgKGkgPj0gbGVuZ3RoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IHN3aXRjaCAoZGF0YVtpXSkgewotICAgICAgICAgICAgY2FzZSAnXHQnOgotICAgICAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCdcXCcpOwotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCd0Jyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdccic6Ci0g
ICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1xcJyk7Ci0gICAgICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmQoJ3InKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgJ1xuJzoKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnXFwnKTsKLSAgICAgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZCgnbicpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSAnXGYnOgotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdcXCcp
OwotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdmJyk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdcYic6Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmQoJ1xcJyk7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ2InKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJyInOgotICAgICAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCdcXCcpOwotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCci
Jyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdcXCc6Ci0gICAg
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1xcJyk7Ci0gICAgICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmQoJ1xcJyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIGhleERpZ2l0c1tdID0gIjAx
MjM0NTY3ODlhYmNkZWYiOwotICAgICAgICAgICAgICAgIFVDaGFyIGNoID0gZGF0YVtpXTsKLSAg
ICAgICAgICAgICAgICBVQ2hhciBoZXhbXSA9IHsgJ1xcJywgJ3UnLCBoZXhEaWdpdHNbKGNoID4+
IDEyKSAmIDB4Rl0sIGhleERpZ2l0c1soY2ggPj4gOCkgJiAweEZdLCBoZXhEaWdpdHNbKGNoID4+
IDQpICYgMHhGXSwgaGV4RGlnaXRzW2NoICYgMHhGXSB9OwotICAgICAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKGhleCwgV1RGX0FSUkFZX0xFTkdUSChoZXgpKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAnXHQnOgorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1xc
Jyk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgndCcpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgJ1xyJzoKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdcXCcpOwor
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ3InKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICdcbic6CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnXFwnKTsKKyAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKCduJyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSAnXGYnOgorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1xcJyk7CisgICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZCgnZicpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
J1xiJzoKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdcXCcpOworICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmQoJ2InKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICciJzoK
KyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdcXCcpOworICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmQoJyInKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdcXCc6CisgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZCgnXFwnKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCdcXCcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBzdGF0aWMgY29uc3QgY2hhciBoZXhEaWdpdHNbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKKyAg
ICAgICAgICAgIENoYXJUeXBlIGNoID0gZGF0YVtpXTsKKyAgICAgICAgICAgIExDaGFyIGhleFtd
ID0geyAnXFwnLCAndScsIGhleERpZ2l0c1soY2ggPj4gMTIpICYgMHhGXSwgaGV4RGlnaXRzWyhj
aCA+PiA4KSAmIDB4Rl0sIGhleERpZ2l0c1soY2ggPj4gNCkgJiAweEZdLCBoZXhEaWdpdHNbY2gg
JiAweEZdIH07CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChoZXgsIFdURl9BUlJBWV9MRU5H
VEgoaGV4KSk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KK30KKyAgICAK
K3ZvaWQgU3RyaW5naWZpZXI6OmFwcGVuZFF1b3RlZFN0cmluZyhVU3RyaW5nQnVpbGRlciYgYnVp
bGRlciwgY29uc3QgVVN0cmluZyYgdmFsdWUpCit7CisgICAgaW50IGxlbmd0aCA9IHZhbHVlLmxl
bmd0aCgpOworCisgICAgYnVpbGRlci5hcHBlbmQoJyInKTsKKworICAgIGlmICh2YWx1ZS5pczhC
aXQoKSkKKyAgICAgICAgYXBwZW5kU3RyaW5nVG9VU3RyaW5nQnVpbGRlcjxMQ2hhcj4oYnVpbGRl
ciwgdmFsdWUuY2hhcmFjdGVyczgoKSwgbGVuZ3RoKTsKKyAgICBlbHNlCisgICAgICAgIGFwcGVu
ZFN0cmluZ1RvVVN0cmluZ0J1aWxkZXI8VUNoYXI+KGJ1aWxkZXIsIHZhbHVlLmNoYXJhY3RlcnMx
NigpLCBsZW5ndGgpOwogCiAgICAgYnVpbGRlci5hcHBlbmQoJyInKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAJKHJldmlz
aW9uIDEwMTQzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsOCArNjMsMTIgQEAgdm9pZCBTdHJpbmdCdWls
ZGVyOjpyZXNpemUodW5zaWduZWQgbmV3UwogCiAgICAgLy8gSWYgdGhlcmUgaXMgYSBidWZmZXIs
IHdlIG9ubHkgbmVlZCB0byBkdXBsaWNhdGUgaXQgaWYgaXQgaGFzIG1vcmUgdGhhbiBvbmUgcmVm
LgogICAgIGlmIChtX2J1ZmZlcikgewotICAgICAgICBpZiAoIW1fYnVmZmVyLT5oYXNPbmVSZWYo
KSkKLSAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fYnVmZmVyLT5jaGFyYWN0ZXJzKCksIG1f
YnVmZmVyLT5sZW5ndGgoKSk7CisgICAgICAgIGlmICghbV9idWZmZXItPmhhc09uZVJlZigpKSB7
CisgICAgICAgICAgICBpZiAobV9idWZmZXItPmlzOEJpdCgpKQorICAgICAgICAgICAgICAgIGFs
bG9jYXRlQnVmZmVyKG1fYnVmZmVyLT5jaGFyYWN0ZXJzOCgpLCBtX2J1ZmZlci0+bGVuZ3RoKCkp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fYnVm
ZmVyLT5jaGFyYWN0ZXJzMTYoKSwgbV9idWZmZXItPmxlbmd0aCgpKTsKKyAgICAgICAgfQogICAg
ICAgICBtX2xlbmd0aCA9IG5ld1NpemU7CiAgICAgICAgIG1fc3RyaW5nID0gU3RyaW5nKCk7CiAg
ICAgICAgIHJldHVybjsKQEAgLTc4LDQ2ICs4MiwxMDggQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjpy
ZXNpemUodW5zaWduZWQgbmV3UwogICAgIG1fc3RyaW5nID0gU3RyaW5nSW1wbDo6Y3JlYXRlKG1f
c3RyaW5nLmltcGwoKSwgMCwgbmV3U2l6ZSk7CiB9CiAKLXZvaWQgU3RyaW5nQnVpbGRlcjo6cmVz
ZXJ2ZUNhcGFjaXR5KHVuc2lnbmVkIG5ld0NhcGFjaXR5KQorLy8gQWxsb2NhdGUgYSBuZXcgOCBi
aXQgYnVmZmVyLCBjb3B5aW5nIGluIGN1cnJlbnRDaGFyYWN0ZXJzICh0aGVzZSBtYXkgY29tZSBm
cm9tIGVpdGhlciBtX3N0cmluZworLy8gb3IgbV9idWZmZXIsIG5laXRoZXIgd2lsbCBiZSByZWFz
c2lnbmVkIHVudGlsIHRoZSBjb3B5IGhhcyBjb21wbGV0ZWQpLgordm9pZCBTdHJpbmdCdWlsZGVy
OjphbGxvY2F0ZUJ1ZmZlcihjb25zdCBMQ2hhciogY3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVk
IHJlcXVpcmVkTGVuZ3RoKQogewotICAgIGlmIChtX2J1ZmZlcikgewotICAgICAgICAvLyBJZiB0
aGVyZSBpcyBhbHJlYWR5IGEgYnVmZmVyLCB0aGVuIGdyb3cgaWYgbmVjZXNzYXJ5LgotICAgICAg
ICBpZiAobmV3Q2FwYWNpdHkgPiBtX2J1ZmZlci0+bGVuZ3RoKCkpCi0gICAgICAgICAgICByZWFs
bG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBHcm93
IHRoZSBzdHJpbmcsIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgaWYgKG5ld0NhcGFjaXR5ID4gbV9s
ZW5ndGgpCi0gICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX3N0cmluZy5jaGFyYWN0ZXJzKCks
IG5ld0NhcGFjaXR5KTsKLSAgICB9CisgICAgQVNTRVJUKG1faXM4Qml0KTsKKyAgICAvLyBDb3B5
IHRoZSBleGlzdGluZyBkYXRhIGludG8gYSBuZXcgYnVmZmVyLCBzZXQgcmVzdWx0IHRvIHBvaW50
IHRvIHRoZSBlbmQgb2YgdGhlIGV4aXN0aW5nIGRhdGEuCisgICAgUmVmUHRyPFN0cmluZ0ltcGw+
IGJ1ZmZlciA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVxdWlyZWRMZW5ndGgs
IG1fYnVmZmVyQ2hhcmFjdGVyczgpOworICAgIG1lbWNweShtX2J1ZmZlckNoYXJhY3RlcnM4LCBj
dXJyZW50Q2hhcmFjdGVycywgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2xlbmd0aCkgKiBzaXplb2Yo
TENoYXIpKTsgLy8gVGhpcyBjYW4ndCBvdmVyZmxvdy4KKyAgICAKKyAgICAvLyBVcGRhdGUgdGhl
IGJ1aWxkZXIgc3RhdGUuCisgICAgbV9idWZmZXIgPSBidWZmZXIucmVsZWFzZSgpOworICAgIG1f
c3RyaW5nID0gU3RyaW5nKCk7CiB9CiAKLS8vIEFsbG9jYXRlIGEgbmV3IGJ1ZmZlciwgY29weWlu
ZyBpbiBjdXJyZW50Q2hhcmFjdGVycyAodGhlc2UgbWF5IGNvbWUgZnJvbSBlaXRoZXIgbV9zdHJp
bmcKKy8vIEFsbG9jYXRlIGEgbmV3IDE2IGJpdCBidWZmZXIsIGNvcHlpbmcgaW4gY3VycmVudENo
YXJhY3RlcnMgKHRoZXNlIG1heSBjb21lIGZyb20gZWl0aGVyIG1fc3RyaW5nCiAvLyBvciBtX2J1
ZmZlciwgIG5laXRoZXIgd2lsbCBiZSByZWFzc2lnbmVkIHVudGlsIHRoZSBjb3B5IGhhcyBjb21w
bGV0ZWQpLgogdm9pZCBTdHJpbmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZlcihjb25zdCBVQ2hhciog
Y3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQogeworICAgIEFTU0VS
VCghbV9pczhCaXQpOwogICAgIC8vIENvcHkgdGhlIGV4aXN0aW5nIGRhdGEgaW50byBhIG5ldyBi
dWZmZXIsIHNldCByZXN1bHQgdG8gcG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUgZXhpc3RpbmcgZGF0
YS4KLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gYnVmZmVyID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5p
bml0aWFsaXplZChyZXF1aXJlZExlbmd0aCwgbV9idWZmZXJDaGFyYWN0ZXJzKTsKLSAgICBtZW1j
cHkobV9idWZmZXJDaGFyYWN0ZXJzLCBjdXJyZW50Q2hhcmFjdGVycywgc3RhdGljX2Nhc3Q8c2l6
ZV90PihtX2xlbmd0aCkgKiBzaXplb2YoVUNoYXIpKTsgLy8gVGhpcyBjYW4ndCBvdmVyZmxvdy4K
KyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gYnVmZmVyID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0
aWFsaXplZChyZXF1aXJlZExlbmd0aCwgbV9idWZmZXJDaGFyYWN0ZXJzMTYpOworICAgIG1lbWNw
eShtX2J1ZmZlckNoYXJhY3RlcnMxNiwgY3VycmVudENoYXJhY3RlcnMsIHN0YXRpY19jYXN0PHNp
emVfdD4obV9sZW5ndGgpICogc2l6ZW9mKFVDaGFyKSk7IC8vIFRoaXMgY2FuJ3Qgb3ZlcmZsb3cu
CisgICAgCisgICAgLy8gVXBkYXRlIHRoZSBidWlsZGVyIHN0YXRlLgorICAgIG1fYnVmZmVyID0g
YnVmZmVyLnJlbGVhc2UoKTsKKyAgICBtX3N0cmluZyA9IFN0cmluZygpOworfQogCisvLyBBbGxv
Y2F0ZSBhIG5ldyAxNiBiaXQgYnVmZmVyLCBjb3B5aW5nIGluIGN1cnJlbnRDaGFyYWN0ZXJzICh3
aGljaCBpcyA4IGJpdCBhbmQgbWF5IGNvbWUKKy8vIGZyb20gZWl0aGVyIG1fc3RyaW5nIG9yIG1f
YnVmZmVyLCBuZWl0aGVyIHdpbGwgYmUgcmVhc3NpZ25lZCB1bnRpbCB0aGUgY29weSBoYXMgY29t
cGxldGVkKS4KK3ZvaWQgU3RyaW5nQnVpbGRlcjo6YWxsb2NhdGVCdWZmZXJVcENvbnZlcnQoY29u
c3QgTENoYXIqIGN1cnJlbnRDaGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKK3sK
KyAgICBBU1NFUlQobV9pczhCaXQpOworICAgIC8vIENvcHkgdGhlIGV4aXN0aW5nIGRhdGEgaW50
byBhIG5ldyBidWZmZXIsIHNldCByZXN1bHQgdG8gcG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUgZXhp
c3RpbmcgZGF0YS4KKyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gYnVmZmVyID0gU3RyaW5nSW1wbDo6
Y3JlYXRlVW5pbml0aWFsaXplZChyZXF1aXJlZExlbmd0aCwgbV9idWZmZXJDaGFyYWN0ZXJzMTYp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xlbmd0aDsgaSsrKQorICAgICAgICBt
X2J1ZmZlckNoYXJhY3RlcnMxNltpXSA9IGN1cnJlbnRDaGFyYWN0ZXJzW2ldOworICAgIAorICAg
IG1faXM4Qml0ID0gZmFsc2U7CisgICAgCiAgICAgLy8gVXBkYXRlIHRoZSBidWlsZGVyIHN0YXRl
LgogICAgIG1fYnVmZmVyID0gYnVmZmVyLnJlbGVhc2UoKTsKICAgICBtX3N0cmluZyA9IFN0cmlu
ZygpOwogfQogCi12b2lkIFN0cmluZ0J1aWxkZXI6OnJlYWxsb2NhdGVCdWZmZXIodW5zaWduZWQg
cmVxdWlyZWRMZW5ndGgpCit0ZW1wbGF0ZSA8Pgordm9pZCBTdHJpbmdCdWlsZGVyOjpyZWFsbG9j
YXRlQnVmZmVyPExDaGFyPih1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKIHsKICAgICAvLyBJZiB0
aGUgYnVmZmVyIGhhcyBvbmx5IG9uZSByZWYgKGJ5IHRoaXMgU3RyaW5nQnVpbGRlciksIHJlYWxs
b2NhdGUgaXQsCiAgICAgLy8gb3RoZXJ3aXNlIGZhbGwgYmFjayB0byAiYWxsb2NhdGUgYW5kIGNv
cHkiIG1ldGhvZC4KICAgICBtX3N0cmluZyA9IFN0cmluZygpOworICAgIAorICAgIEFTU0VSVCht
X2lzOEJpdCk7CisgICAgQVNTRVJUKG1fYnVmZmVyLT5pczhCaXQoKSk7CisgICAgCiAgICAgaWYg
KG1fYnVmZmVyLT5oYXNPbmVSZWYoKSkKLSAgICAgICAgbV9idWZmZXIgPSBTdHJpbmdJbXBsOjpy
ZWFsbG9jYXRlKG1fYnVmZmVyLnJlbGVhc2UoKSwgcmVxdWlyZWRMZW5ndGgsIG1fYnVmZmVyQ2hh
cmFjdGVycyk7CisgICAgICAgIG1fYnVmZmVyID0gU3RyaW5nSW1wbDo6cmVhbGxvY2F0ZShtX2J1
ZmZlci5yZWxlYXNlKCksIHJlcXVpcmVkTGVuZ3RoLCBtX2J1ZmZlckNoYXJhY3RlcnM4KTsKICAg
ICBlbHNlCi0gICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fYnVmZmVyLT5jaGFyYWN0ZXJzKCksIHJl
cXVpcmVkTGVuZ3RoKTsKKyAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9idWZmZXItPmNoYXJhY3Rl
cnM4KCksIHJlcXVpcmVkTGVuZ3RoKTsKK30KKwordGVtcGxhdGUgPD4KK3ZvaWQgU3RyaW5nQnVp
bGRlcjo6cmVhbGxvY2F0ZUJ1ZmZlcjxVQ2hhcj4odW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpCit7
CisgICAgLy8gSWYgdGhlIGJ1ZmZlciBoYXMgb25seSBvbmUgcmVmIChieSB0aGlzIFN0cmluZ0J1
aWxkZXIpLCByZWFsbG9jYXRlIGl0LAorICAgIC8vIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gImFs
bG9jYXRlIGFuZCBjb3B5IiBtZXRob2QuCisgICAgbV9zdHJpbmcgPSBTdHJpbmcoKTsKKyAgICAK
KyAgICBpZiAobV9idWZmZXItPmlzOEJpdCgpKQorICAgICAgICBhbGxvY2F0ZUJ1ZmZlclVwQ29u
dmVydChtX2J1ZmZlci0+Y2hhcmFjdGVyczgoKSwgcmVxdWlyZWRMZW5ndGgpOworICAgIGVsc2Ug
aWYgKG1fYnVmZmVyLT5oYXNPbmVSZWYoKSkKKyAgICAgICAgICAgIG1fYnVmZmVyID0gU3RyaW5n
SW1wbDo6cmVhbGxvY2F0ZShtX2J1ZmZlci5yZWxlYXNlKCksIHJlcXVpcmVkTGVuZ3RoLCBtX2J1
ZmZlckNoYXJhY3RlcnMxNik7CisgICAgZWxzZQorICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX2J1
ZmZlci0+Y2hhcmFjdGVyczE2KCksIHJlcXVpcmVkTGVuZ3RoKTsKK30KKwordm9pZCBTdHJpbmdC
dWlsZGVyOjpyZXNlcnZlQ2FwYWNpdHkodW5zaWduZWQgbmV3Q2FwYWNpdHkpCit7CisgICAgaWYg
KG1fYnVmZmVyKSB7CisgICAgICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkgYSBidWZmZXIsIHRo
ZW4gZ3JvdyBpZiBuZWNlc3NhcnkuCisgICAgICAgIGlmIChuZXdDYXBhY2l0eSA+IG1fYnVmZmVy
LT5sZW5ndGgoKSkgeworICAgICAgICAgICAgaWYgKG1fYnVmZmVyLT5pczhCaXQoKSkKKyAgICAg
ICAgICAgICAgICByZWFsbG9jYXRlQnVmZmVyPExDaGFyPihuZXdDYXBhY2l0eSk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVhbGxvY2F0ZUJ1ZmZlcjxVQ2hhcj4obmV3Q2Fw
YWNpdHkpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gR3JvdyB0aGUgc3Ry
aW5nLCBpZiBuZWNlc3NhcnkuCisgICAgICAgIGlmIChuZXdDYXBhY2l0eSA+IG1fbGVuZ3RoKSB7
CisgICAgICAgICAgICBBU1NFUlQoIW1fc3RyaW5nLmlzTnVsbCgpKTsKKyAgICAgICAgICAgIGlm
IChtX3N0cmluZy5pczhCaXQoKSkKKyAgICAgICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX3N0
cmluZy5jaGFyYWN0ZXJzOCgpLCBuZXdDYXBhY2l0eSk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9zdHJpbmcuY2hhcmFjdGVyczE2KCksIG5ld0Nh
cGFjaXR5KTsKKyAgICAgICAgfQorICAgIH0KIH0KIAogLy8gTWFrZSAnbGVuZ3RoJyBhZGRpdGlv
bmFsIGNhcGFjaXR5IGJlIGF2YWlsYWJsZSBpbiBtX2J1ZmZlciwgdXBkYXRlIG1fc3RyaW5nICYg
bV9sZW5ndGgsCiAvLyByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBuZXdseSBhbGxvY2F0ZWQgc3Rv
cmFnZS4KLVVDaGFyKiBTdHJpbmdCdWlsZGVyOjphcHBlbmRVbmluaXRpYWxpemVkKHVuc2lnbmVk
IGxlbmd0aCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KK0FMV0FZU19JTkxJTkUgQ2hh
clR5cGUqIFN0cmluZ0J1aWxkZXI6OmFwcGVuZFVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3Ro
KQogewogICAgIEFTU0VSVChsZW5ndGgpOwogCkBAIC0xMjYsMjUgKzE5MiwzNiBAQCBVQ2hhciog
U3RyaW5nQnVpbGRlcjo6YXBwZW5kVW5pbml0aWFsaXplCiAgICAgaWYgKHJlcXVpcmVkTGVuZ3Ro
IDwgbGVuZ3RoKQogICAgICAgICBDUkFTSCgpOwogCi0gICAgaWYgKG1fYnVmZmVyKSB7CisgICAg
aWYgKChtX2J1ZmZlcikgJiYgKHJlcXVpcmVkTGVuZ3RoIDw9IG1fYnVmZmVyLT5sZW5ndGgoKSkp
IHsKICAgICAgICAgLy8gSWYgdGhlIGJ1ZmZlciBpcyB2YWxpZCBpdCBtdXN0IGJlIGF0IGxlYXN0
IGFzIGxvbmcgYXMgdGhlIGN1cnJlbnQgYnVpbGRlciBjb250ZW50cyEKICAgICAgICAgQVNTRVJU
KG1fYnVmZmVyLT5sZW5ndGgoKSA+PSBtX2xlbmd0aCk7CisgICAgICAgIHVuc2lnbmVkIGN1cnJl
bnRMZW5ndGggPSBtX2xlbmd0aDsKKyAgICAgICAgbV9zdHJpbmcgPSBTdHJpbmcoKTsKKyAgICAg
ICAgbV9sZW5ndGggPSByZXF1aXJlZExlbmd0aDsKKyAgICAgICAgcmV0dXJuIGdldEJ1ZmZlckNo
YXJhY3RlcnM8Q2hhclR5cGU+KCkgKyBjdXJyZW50TGVuZ3RoOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gYXBwZW5kVW5pbml0aWFsaXplZFNsb3c8Q2hhclR5cGU+KHJlcXVpcmVkTGVuZ3RoKTsK
K30KIAotICAgICAgICAvLyBDaGVjayBpZiB0aGUgYnVmZmVyIGFscmVhZHkgaGFzIHN1ZmZpY2ll
bnQgY2FwYWNpdHkuCi0gICAgICAgIGlmIChyZXF1aXJlZExlbmd0aCA8PSBtX2J1ZmZlci0+bGVu
Z3RoKCkpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGggPSBtX2xlbmd0aDsK
LSAgICAgICAgICAgIG1fc3RyaW5nID0gU3RyaW5nKCk7Ci0gICAgICAgICAgICBtX2xlbmd0aCA9
IHJlcXVpcmVkTGVuZ3RoOwotICAgICAgICAgICAgcmV0dXJuIG1fYnVmZmVyQ2hhcmFjdGVycyAr
IGN1cnJlbnRMZW5ndGg7Ci0gICAgICAgIH0KKy8vIE1ha2UgJ2xlbmd0aCcgYWRkaXRpb25hbCBj
YXBhY2l0eSBiZSBhdmFpbGFibGUgaW4gbV9idWZmZXIsIHVwZGF0ZSBtX3N0cmluZyAmIG1fbGVu
Z3RoLAorLy8gcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbmV3bHkgYWxsb2NhdGVkIHN0b3JhZ2Uu
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+CitDaGFyVHlwZSogU3RyaW5nQnVpbGRlcjo6
YXBwZW5kVW5pbml0aWFsaXplZFNsb3codW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpCit7CisgICAg
QVNTRVJUKHJlcXVpcmVkTGVuZ3RoKTsKIAotICAgICAgICByZWFsbG9jYXRlQnVmZmVyKHN0ZDo6
bWF4KHJlcXVpcmVkTGVuZ3RoLCBzdGQ6Om1heChtaW5pbXVtQ2FwYWNpdHksIG1fYnVmZmVyLT5s
ZW5ndGgoKSAqIDIpKSk7CisgICAgaWYgKG1fYnVmZmVyKSB7CisgICAgICAgIC8vIElmIHRoZSBi
dWZmZXIgaXMgdmFsaWQgaXQgbXVzdCBiZSBhdCBsZWFzdCBhcyBsb25nIGFzIHRoZSBjdXJyZW50
IGJ1aWxkZXIgY29udGVudHMhCisgICAgICAgIEFTU0VSVChtX2J1ZmZlci0+bGVuZ3RoKCkgPj0g
bV9sZW5ndGgpOworICAgICAgICAKKyAgICAgICAgcmVhbGxvY2F0ZUJ1ZmZlcjxDaGFyVHlwZT4o
c3RkOjptYXgocmVxdWlyZWRMZW5ndGgsIHN0ZDo6bWF4KG1pbmltdW1DYXBhY2l0eSwgbV9idWZm
ZXItPmxlbmd0aCgpICogMikpKTsKICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQobV9zdHJp
bmcubGVuZ3RoKCkgPT0gbV9sZW5ndGgpOwotICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX3N0cmlu
Zy5jaGFyYWN0ZXJzKCksIHN0ZDo6bWF4KHJlcXVpcmVkTGVuZ3RoLCBzdGQ6Om1heChtaW5pbXVt
Q2FwYWNpdHksIG1fbGVuZ3RoICogMikpKTsKKyAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9sZW5n
dGggPyBtX3N0cmluZy5nZXRDaGFyYWN0ZXJzPENoYXJUeXBlPigpIDogMCwgc3RkOjptYXgocmVx
dWlyZWRMZW5ndGgsIHN0ZDo6bWF4KG1pbmltdW1DYXBhY2l0eSwgbV9sZW5ndGggKiAyKSkpOwog
ICAgIH0KLQotICAgIFVDaGFyKiByZXN1bHQgPSBtX2J1ZmZlckNoYXJhY3RlcnMgKyBtX2xlbmd0
aDsKKyAgICAKKyAgICBDaGFyVHlwZSogcmVzdWx0ID0gZ2V0QnVmZmVyQ2hhcmFjdGVyczxDaGFy
VHlwZT4oKSArIG1fbGVuZ3RoOwogICAgIG1fbGVuZ3RoID0gcmVxdWlyZWRMZW5ndGg7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE1Myw5ICsyMzAsMjkgQEAgdm9pZCBTdHJpbmdCdWlsZGVy
OjphcHBlbmQoY29uc3QgVUNoYXIqIAogewogICAgIGlmICghbGVuZ3RoKQogICAgICAgICByZXR1
cm47CisKICAgICBBU1NFUlQoY2hhcmFjdGVycyk7CiAKLSAgICBtZW1jcHkoYXBwZW5kVW5pbml0
aWFsaXplZChsZW5ndGgpLCBjaGFyYWN0ZXJzLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkg
KiAyKTsKKyAgICBpZiAobV9pczhCaXQpIHsKKyAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBuZXcg
c2l6ZSBvZiB0aGUgYnVpbGRlciBhZnRlciBhcHBlbmRpbmcuCisgICAgICAgIHVuc2lnbmVkIHJl
cXVpcmVkTGVuZ3RoID0gbGVuZ3RoICsgbV9sZW5ndGg7CisgICAgICAgIGlmIChyZXF1aXJlZExl
bmd0aCA8IGxlbmd0aCkKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIAorICAgICAgICBp
ZiAobV9idWZmZXIpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSBidWZmZXIgaXMgdmFsaWQgaXQg
bXVzdCBiZSBhdCBsZWFzdCBhcyBsb25nIGFzIHRoZSBjdXJyZW50IGJ1aWxkZXIgY29udGVudHMh
CisgICAgICAgICAgICBBU1NFUlQobV9idWZmZXItPmxlbmd0aCgpID49IG1fbGVuZ3RoKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXJVcENvbnZlcnQobV9idWZmZXIt
PmNoYXJhY3RlcnM4KCksIHJlcXVpcmVkTGVuZ3RoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIEFTU0VSVChtX3N0cmluZy5sZW5ndGgoKSA9PSBtX2xlbmd0aCk7CisgICAgICAgICAg
ICBhbGxvY2F0ZUJ1ZmZlclVwQ29udmVydChtX3N0cmluZy5pc051bGwoKSA/IDAgOiBtX3N0cmlu
Zy5jaGFyYWN0ZXJzOCgpLCBzdGQ6Om1heChyZXF1aXJlZExlbmd0aCwgc3RkOjptYXgobWluaW11
bUNhcGFjaXR5LCBtX2xlbmd0aCAqIDIpKSk7CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHko
bV9idWZmZXJDaGFyYWN0ZXJzMTYgKyBtX2xlbmd0aCwgY2hhcmFjdGVycywgc3RhdGljX2Nhc3Q8
c2l6ZV90PihsZW5ndGgpICogc2l6ZW9mKFVDaGFyKSk7ICAgICAgICAKKyAgICAgICAgbV9sZW5n
dGggPSByZXF1aXJlZExlbmd0aDsKKyAgICB9IGVsc2UKKyAgICAgICAgbWVtY3B5KGFwcGVuZFVu
aW5pdGlhbGl6ZWQ8VUNoYXI+KGxlbmd0aCksIGNoYXJhY3RlcnMsIHN0YXRpY19jYXN0PHNpemVf
dD4obGVuZ3RoKSAqIHNpemVvZihVQ2hhcikpOwogfQogCiB2b2lkIFN0cmluZ0J1aWxkZXI6OmFw
cGVuZChjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQpAQCAtMTY0LDE3
ICsyNjEsMzEgQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmQoY29uc3QgTENoYXIqIAogICAg
ICAgICByZXR1cm47CiAgICAgQVNTRVJUKGNoYXJhY3RlcnMpOwogCi0gICAgVUNoYXIqIGRlc3Qg
PSBhcHBlbmRVbmluaXRpYWxpemVkKGxlbmd0aCk7Ci0gICAgY29uc3QgTENoYXIqIGVuZCA9IGNo
YXJhY3RlcnMgKyBsZW5ndGg7Ci0gICAgd2hpbGUgKGNoYXJhY3RlcnMgPCBlbmQpCi0gICAgICAg
ICooZGVzdCsrKSA9ICooY2hhcmFjdGVycysrKTsKKyAgICBpZiAobV9pczhCaXQpIHsKKyAgICAg
ICAgTENoYXIqIGRlc3QgPSBhcHBlbmRVbmluaXRpYWxpemVkPExDaGFyPihsZW5ndGgpOworICAg
ICAgICBpZiAobGVuZ3RoID4gOCkKKyAgICAgICAgICAgIG1lbWNweShkZXN0LCBjaGFyYWN0ZXJz
LCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkgKiBzaXplb2YoTENoYXIpKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBjb25zdCBMQ2hhciogZW5kID0gY2hhcmFjdGVycyArIGxlbmd0
aDsKKyAgICAgICAgICAgIHdoaWxlIChjaGFyYWN0ZXJzIDwgZW5kKQorICAgICAgICAgICAgICAg
ICooZGVzdCsrKSA9ICooY2hhcmFjdGVycysrKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg
ICAgICAgIFVDaGFyKiBkZXN0ID0gYXBwZW5kVW5pbml0aWFsaXplZDxVQ2hhcj4obGVuZ3RoKTsK
KyAgICAgICAgY29uc3QgTENoYXIqIGVuZCA9IGNoYXJhY3RlcnMgKyBsZW5ndGg7CisgICAgICAg
IHdoaWxlIChjaGFyYWN0ZXJzIDwgZW5kKQorICAgICAgICAgICAgKihkZXN0KyspID0gKihjaGFy
YWN0ZXJzKyspOworICAgIH0KIH0KIAogdm9pZCBTdHJpbmdCdWlsZGVyOjpzaHJpbmtUb0ZpdCgp
CiB7CiAgICAgLy8gSWYgdGhlIGJ1ZmZlciBpcyBhdCBsZWFzdCA4MCUgZnVsbCwgZG9uJ3QgYm90
aGVyIGNvcHlpbmcuIE5lZWQgdG8gdHVuZSB0aGlzIGhldXJpc3RpYyEKICAgICBpZiAobV9idWZm
ZXIgJiYgbV9idWZmZXItPmxlbmd0aCgpID4gKG1fbGVuZ3RoICsgKG1fbGVuZ3RoID4+IDIpKSkg
ewotICAgICAgICByZWFsbG9jYXRlQnVmZmVyKG1fbGVuZ3RoKTsKKyAgICAgICAgaWYgKG1faXM4
Qml0KQorICAgICAgICAgICAgcmVhbGxvY2F0ZUJ1ZmZlcjxMQ2hhcj4obV9sZW5ndGgpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICByZWFsbG9jYXRlQnVmZmVyPFVDaGFyPihtX2xlbmd0aCk7
CiAgICAgICAgIG1fc3RyaW5nID0gbV9idWZmZXI7CiAgICAgICAgIG1fYnVmZmVyID0gMDsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmgJKHJldmlzaW9uIDEwMTQzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAgY2xhc3Mg
U3RyaW5nQnVpbGRlciB7CiBwdWJsaWM6CiAgICAgU3RyaW5nQnVpbGRlcigpCiAgICAgICAgIDog
bV9sZW5ndGgoMCkKKyAgICAgICAgLCBtX2lzOEJpdCh0cnVlKQogICAgIHsKICAgICB9CiAKQEAg
LTQ1LDE1ICs0NiwyMyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcm
IHN0cmluZykKICAgICB7CisgICAgICAgIGlmICghc3RyaW5nLmxlbmd0aCgpKQorICAgICAgICAg
ICAgcmV0dXJuOworCiAgICAgICAgIC8vIElmIHdlJ3JlIGFwcGVuZGluZyB0byBhbiBlbXB0eSBz
dHJpbmcsIGFuZCB0aGVyZSBpcyBub3QgYnVmZmVyCiAgICAgICAgIC8vIChpbiBjYXNlIHJlc2Vy
dmVDYXBhY2l0eSBoYXMgYmVlbiBjYWxsZWQpIHRoZW4ganVzdCByZXRhaW4gdGhlCiAgICAgICAg
IC8vIHN0cmluZy4KICAgICAgICAgaWYgKCFtX2xlbmd0aCAmJiAhbV9idWZmZXIpIHsKICAgICAg
ICAgICAgIG1fc3RyaW5nID0gc3RyaW5nOwogICAgICAgICAgICAgbV9sZW5ndGggPSBzdHJpbmcu
bGVuZ3RoKCk7CisgICAgICAgICAgICBtX2lzOEJpdCA9IG1fc3RyaW5nLmlzOEJpdCgpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGFwcGVuZChzdHJpbmcuY2hhcmFj
dGVycygpLCBzdHJpbmcubGVuZ3RoKCkpOworCisgICAgICAgIGlmIChzdHJpbmcuaXM4Qml0KCkp
CisgICAgICAgICAgICBhcHBlbmQoc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgo
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFwcGVuZChzdHJpbmcuY2hhcmFjdGVyczE2
KCksIHN0cmluZy5sZW5ndGgoKSk7CiAgICAgfQogCiAgICAgdm9pZCBhcHBlbmQoY29uc3QgY2hh
ciogY2hhcmFjdGVycykKQEAgLTY0LDE2ICs3MywyMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFw
cGVuZChVQ2hhciBjKQogICAgIHsKLSAgICAgICAgaWYgKG1fYnVmZmVyICYmIG1fbGVuZ3RoIDwg
bV9idWZmZXItPmxlbmd0aCgpICYmIG1fc3RyaW5nLmlzTnVsbCgpKQotICAgICAgICAgICAgbV9i
dWZmZXJDaGFyYWN0ZXJzW21fbGVuZ3RoKytdID0gYzsKKyAgICAgICAgaWYgKG1fYnVmZmVyICYm
ICFtX2lzOEJpdCAmJiBtX2xlbmd0aCA8IG1fYnVmZmVyLT5sZW5ndGgoKSAmJiBtX3N0cmluZy5p
c051bGwoKSkKKyAgICAgICAgICAgIG1fYnVmZmVyQ2hhcmFjdGVyczE2W21fbGVuZ3RoKytdID0g
YzsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYXBwZW5kKCZjLCAxKTsKICAgICB9CiAKICAg
ICB2b2lkIGFwcGVuZChjaGFyIGMpCiAgICAgewotICAgICAgICBpZiAobV9idWZmZXIgJiYgbV9s
ZW5ndGggPCBtX2J1ZmZlci0+bGVuZ3RoKCkgJiYgbV9zdHJpbmcuaXNOdWxsKCkpCi0gICAgICAg
ICAgICBtX2J1ZmZlckNoYXJhY3RlcnNbbV9sZW5ndGgrK10gPSAodW5zaWduZWQgY2hhciljOwor
ICAgICAgICBpZiAobV9idWZmZXIgJiYgbV9sZW5ndGggPCBtX2J1ZmZlci0+bGVuZ3RoKCkgJiYg
bV9zdHJpbmcuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIGlmIChtX2lzOEJpdCkKKyAgICAgICAg
ICAgICAgICBtX2J1ZmZlckNoYXJhY3RlcnM4W21fbGVuZ3RoKytdID0gKExDaGFyKWM7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9idWZmZXJDaGFyYWN0ZXJzMTZbbV9sZW5n
dGgrK10gPSAoTENoYXIpYzsKKyAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICBh
cHBlbmQoJmMsIDEpOwogICAgIH0KQEAgLTExMCwxMCArMTIzLDM0IEBAIHB1YmxpYzoKICAgICBV
Q2hhciBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQo
aSA8IG1fbGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnMoKVtpXTsKKyAgICAgICAg
aWYgKG1faXM4Qml0KQorICAgICAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnM4KClbaV07CisgICAg
ICAgIHJldHVybiBjaGFyYWN0ZXJzMTYoKVtpXTsKKyAgICB9CisKKyAgICBjb25zdCBMQ2hhciog
Y2hhcmFjdGVyczgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1faXM4Qml0KTsKKyAg
ICAgICAgaWYgKCFtX2xlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAo
IW1fc3RyaW5nLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIG1fc3RyaW5nLmNoYXJhY3Rl
cnM4KCk7CisgICAgICAgIEFTU0VSVChtX2J1ZmZlcik7CisgICAgICAgIHJldHVybiBtX2J1ZmZl
ci0+Y2hhcmFjdGVyczgoKTsKICAgICB9CiAKLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycygp
IGNvbnN0CisgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMxNigpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoIW1faXM4Qml0KTsKKyAgICAgICAgaWYgKCFtX2xlbmd0aCkKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICBpZiAoIW1fc3RyaW5nLmlzTnVsbCgpKQorICAgICAgICAg
ICAgcmV0dXJuIG1fc3RyaW5nLmNoYXJhY3RlcnMxNigpOworICAgICAgICBBU1NFUlQobV9idWZm
ZXIpOworICAgICAgICByZXR1cm4gbV9idWZmZXItPmNoYXJhY3RlcnMxNigpOworICAgIH0KKyAg
ICAKKyAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVyc0JsYWgoKSBjb25zdAogICAgIHsKICAgICAg
ICAgaWYgKCFtX2xlbmd0aCkKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMTIyLDcgKzE1OSw3
IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fYnVmZmVyKTsKICAgICAgICAgcmV0dXJuIG1f
YnVmZmVyLT5jaGFyYWN0ZXJzKCk7CiAgICAgfQotCisgICAgCiAgICAgdm9pZCBjbGVhcigpCiAg
ICAgewogICAgICAgICBtX2xlbmd0aCA9IDA7CkBAIC0xMzEsMTcgKzE2OCw0MyBAQCBwdWJsaWM6
CiAgICAgfQogCiBwcml2YXRlOgorICAgIHZvaWQgYWxsb2NhdGVCdWZmZXIoY29uc3QgTENoYXIq
IGN1cnJlbnRDaGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1aXJlZExlbmd0aCk7CiAgICAgdm9pZCBh
bGxvY2F0ZUJ1ZmZlcihjb25zdCBVQ2hhciogY3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVkIHJl
cXVpcmVkTGVuZ3RoKTsKKyAgICB2b2lkIGFsbG9jYXRlQnVmZmVyVXBDb252ZXJ0KGNvbnN0IExD
aGFyKiBjdXJyZW50Q2hhcmFjdGVycywgdW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpOworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KICAgICB2b2lkIHJlYWxsb2NhdGVCdWZmZXIodW5z
aWduZWQgcmVxdWlyZWRMZW5ndGgpOwotICAgIFVDaGFyKiBhcHBlbmRVbmluaXRpYWxpemVkKHVu
c2lnbmVkIGxlbmd0aCk7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgorICAgIEFM
V0FZU19JTkxJTkUgQ2hhclR5cGUqIGFwcGVuZFVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3Ro
KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+CisgICAgQ2hhclR5cGUqIGFwcGVu
ZFVuaW5pdGlhbGl6ZWRTbG93KHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIENoYXJUeXBlPgorICAgIEFMV0FZU19JTkxJTkUgQ2hhclR5cGUgKiBnZXRCdWZmZXJDaGFy
YWN0ZXJzKCk7CiAgICAgdm9pZCByZWlmeVN0cmluZygpOwogCiAgICAgdW5zaWduZWQgbV9sZW5n
dGg7CiAgICAgU3RyaW5nIG1fc3RyaW5nOwogICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBtX2J1ZmZl
cjsKLSAgICBVQ2hhciogbV9idWZmZXJDaGFyYWN0ZXJzOworICAgIGJvb2wgbV9pczhCaXQ7Cisg
ICAgdW5pb24geworICAgICAgICBMQ2hhciogbV9idWZmZXJDaGFyYWN0ZXJzODsKKyAgICAgICAg
VUNoYXIqIG1fYnVmZmVyQ2hhcmFjdGVyczE2OworICAgIH07CiB9OwogCit0ZW1wbGF0ZSA8Pgor
QUxXQVlTX0lOTElORSBMQ2hhciogU3RyaW5nQnVpbGRlcjo6Z2V0QnVmZmVyQ2hhcmFjdGVyczxM
Q2hhcj4oKQoreworICAgIEFTU0VSVChtX2lzOEJpdCk7CisgICAgcmV0dXJuIG1fYnVmZmVyQ2hh
cmFjdGVyczg7Cit9CisKK3RlbXBsYXRlIDw+CitBTFdBWVNfSU5MSU5FIFVDaGFyKiBTdHJpbmdC
dWlsZGVyOjpnZXRCdWZmZXJDaGFyYWN0ZXJzPFVDaGFyPigpCit7CisgICAgQVNTRVJUKCFtX2lz
OEJpdCk7CisgICAgcmV0dXJuIG1fYnVmZmVyQ2hhcmFjdGVyczE2OworfSAgICAKKwogfSAvLyBu
YW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6U3RyaW5nQnVpbGRlcjsK
</data>
<flag name="commit-queue"
          id="116643"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117266</attachid>
            <date>2011-11-30 13:55:00 -0800</date>
            <delta_ts>2011-12-01 12:29:36 -0800</delta_ts>
            <desc>Patch updated with StringBuilder::characters() named correctly</desc>
            <filename>73457-2.patch</filename>
            <type>text/plain</type>
            <size>21285</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAxNTQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBA
CisyMDExLTExLTMwICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIDggYml0IHN0cmluZyB3b3JrIHNsb3dzIGRvd24gS3Jha2VuIGpzb24tc3RyaW5naWZ5LXRp
bmRlcmJveAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzM0NTcKKworICAgICAgICBBZGRlZCA4IGJpdCBwYXRoIHRvIFN0cmluZ0J1aWxkZXIuICBTdHJp
bmdCdWlsZGVyIHN0YXJ0cworICAgICAgICBhc3N1bWluZyA4IGJpdCBjb250ZW50cyBhbmQgZ2V0
cyBjb252ZXJ0ZWQgdG8gMTYgYml0IHVwb24KKyAgICAgICAgc2VlaW5nIHRoZSBmaXJzdCAxNiBi
aXQgY2hhcmFjdGVyIG9yIHN0cmluZy4gIFNwbGl0CisgICAgICAgIGFwcGVuZFVuaW5pdGlhbGll
emVkIGludG8gYW4gaW5saW5lZCBmYXN0IGFuZCBmdW5jdGlvbiBjYWxsCisgICAgICAgIHNsb3cg
Y2FzZS4KKworICAgICAgICBGYWN0b3JlZCBvdXQgdGhlIHByb2Nlc3Npbmcgb2YgdGhlIFVTdHJp
bmcgYXJndW1lbnQgZnJvbQorICAgICAgICBTdHJpbmdpZmllcjo6YXBwZW5kUXVvdGVkU3RyaW5n
KCkgdG8gYSBzdGF0aWMgdGVtcGxhdGVkIGZ1bmN0aW9uCisgICAgICAgIGJhc2VkIG9uIGNoYXJh
Y3RlciBzaXplLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogcnVudGltZS9KU09OT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6YXBwZW5kU3RyaW5n
VG9VU3RyaW5nQnVpbGRlcik6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjphcHBlbmRRdW90
ZWRTdHJpbmcpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwOgorICAgICAg
ICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpyZXNpemUpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWls
ZGVyOjphbGxvY2F0ZUJ1ZmZlcik6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmFsbG9j
YXRlQnVmZmVyVXBDb252ZXJ0KToKKyAgICAgICAgKFdURjo6TENoYXIpOgorICAgICAgICAoV1RG
OjpVQ2hhcik6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnJlc2VydmVDYXBhY2l0eSk6
CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmFwcGVuZFVuaW5pdGlhbGl6ZWQpOgorICAg
ICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjphcHBlbmRVbmluaXRpYWxpemVkU2xvdyk6CisgICAg
ICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmFwcGVuZCk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1
aWxkZXI6OnNocmlua1RvRml0KToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg6
CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OlN0cmluZ0J1aWxkZXIpOgorICAgICAgICAo
V1RGOjpTdHJpbmdCdWlsZGVyOjphcHBlbmQpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVy
OjpvcGVyYXRvcltdKToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6Y2hhcmFjdGVyczgp
OgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpjaGFyYWN0ZXJzMTYpOgorICAgICAgICAo
V1RGOjpTdHJpbmdCdWlsZGVyOjpjaGFyYWN0ZXJzQmxhaCk6CisgICAgICAgIChXVEY6OkxDaGFy
KToKKyAgICAgICAgKFdURjo6VUNoYXIpOgorCiAyMDExLTExLTMwICBNYXJrIEhhaG5lbmJlcmcg
IDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgdG9TdHJpbmdDYWxsYmFjayBhbmQg
dmFsdWVPZkNhbGxiYWNrIGRvIG5vdCBjaGVjayB0aGUgZW50aXJlIHByb3RvdHlwZSBjaGFpbiBm
b3IgY29udmVydFRvVHlwZSBjYWxsYmFjawpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPTk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHJldmlzaW9uIDEwMTQzOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYs
MTMgKzI2Niw5IEBAIExvY2FsPFVua25vd24+IFN0cmluZ2lmaWVyOjpzdHJpbmdpZnkoSGEKICAg
ICByZXR1cm4gTG9jYWw8VW5rbm93bj4obV9leGVjLT5nbG9iYWxEYXRhKCksIGpzU3RyaW5nKG1f
ZXhlYywgcmVzdWx0LnRvVVN0cmluZygpKSk7CiB9CiAKLXZvaWQgU3RyaW5naWZpZXI6OmFwcGVu
ZFF1b3RlZFN0cmluZyhVU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgY29uc3QgVVN0cmluZyYgdmFs
dWUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+CitzdGF0aWMgdm9pZCBhcHBlbmRTdHJp
bmdUb1VTdHJpbmdCdWlsZGVyKFVTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCBjb25zdCBDaGFyVHlw
ZSogZGF0YSwgaW50IGxlbmd0aCkKIHsKLSAgICBpbnQgbGVuZ3RoID0gdmFsdWUubGVuZ3RoKCk7
Ci0KLSAgICBidWlsZGVyLmFwcGVuZCgnIicpOwotCi0gICAgY29uc3QgVUNoYXIqIGRhdGEgPSB2
YWx1ZS5jaGFyYWN0ZXJzKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewogICAgICAgICBpbnQgc3RhcnQgPSBpOwogICAgICAgICB3aGlsZSAoaSA8IGxlbmd0aCAmJiAo
ZGF0YVtpXSA+IDB4MUYgJiYgZGF0YVtpXSAhPSAnIicgJiYgZGF0YVtpXSAhPSAnXFwnKSkKQEAg
LTI4MSw0MiArMjc3LDU0IEBAIHZvaWQgU3RyaW5naWZpZXI6OmFwcGVuZFF1b3RlZFN0cmluZyhV
U3QKICAgICAgICAgaWYgKGkgPj0gbGVuZ3RoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IHN3aXRjaCAoZGF0YVtpXSkgewotICAgICAgICAgICAgY2FzZSAnXHQnOgotICAgICAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCdcXCcpOwotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCd0Jyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdccic6Ci0g
ICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1xcJyk7Ci0gICAgICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmQoJ3InKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgJ1xuJzoKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnXFwnKTsKLSAgICAgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZCgnbicpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSAnXGYnOgotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdcXCcp
OwotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdmJyk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdcYic6Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmQoJ1xcJyk7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ2InKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJyInOgotICAgICAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCdcXCcpOwotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCci
Jyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdcXCc6Ci0gICAg
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1xcJyk7Ci0gICAgICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmQoJ1xcJyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIGhleERpZ2l0c1tdID0gIjAx
MjM0NTY3ODlhYmNkZWYiOwotICAgICAgICAgICAgICAgIFVDaGFyIGNoID0gZGF0YVtpXTsKLSAg
ICAgICAgICAgICAgICBVQ2hhciBoZXhbXSA9IHsgJ1xcJywgJ3UnLCBoZXhEaWdpdHNbKGNoID4+
IDEyKSAmIDB4Rl0sIGhleERpZ2l0c1soY2ggPj4gOCkgJiAweEZdLCBoZXhEaWdpdHNbKGNoID4+
IDQpICYgMHhGXSwgaGV4RGlnaXRzW2NoICYgMHhGXSB9OwotICAgICAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKGhleCwgV1RGX0FSUkFZX0xFTkdUSChoZXgpKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAnXHQnOgorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1xc
Jyk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgndCcpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgJ1xyJzoKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdcXCcpOwor
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ3InKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICdcbic6CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnXFwnKTsKKyAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKCduJyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSAnXGYnOgorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1xcJyk7CisgICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZCgnZicpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
J1xiJzoKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdcXCcpOworICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmQoJ2InKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICciJzoK
KyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdcXCcpOworICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmQoJyInKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdcXCc6CisgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZCgnXFwnKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCdcXCcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBzdGF0aWMgY29uc3QgY2hhciBoZXhEaWdpdHNbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKKyAg
ICAgICAgICAgIENoYXJUeXBlIGNoID0gZGF0YVtpXTsKKyAgICAgICAgICAgIExDaGFyIGhleFtd
ID0geyAnXFwnLCAndScsIGhleERpZ2l0c1soY2ggPj4gMTIpICYgMHhGXSwgaGV4RGlnaXRzWyhj
aCA+PiA4KSAmIDB4Rl0sIGhleERpZ2l0c1soY2ggPj4gNCkgJiAweEZdLCBoZXhEaWdpdHNbY2gg
JiAweEZdIH07CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChoZXgsIFdURl9BUlJBWV9MRU5H
VEgoaGV4KSk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KK30KKyAgICAK
K3ZvaWQgU3RyaW5naWZpZXI6OmFwcGVuZFF1b3RlZFN0cmluZyhVU3RyaW5nQnVpbGRlciYgYnVp
bGRlciwgY29uc3QgVVN0cmluZyYgdmFsdWUpCit7CisgICAgaW50IGxlbmd0aCA9IHZhbHVlLmxl
bmd0aCgpOworCisgICAgYnVpbGRlci5hcHBlbmQoJyInKTsKKworICAgIGlmICh2YWx1ZS5pczhC
aXQoKSkKKyAgICAgICAgYXBwZW5kU3RyaW5nVG9VU3RyaW5nQnVpbGRlcjxMQ2hhcj4oYnVpbGRl
ciwgdmFsdWUuY2hhcmFjdGVyczgoKSwgbGVuZ3RoKTsKKyAgICBlbHNlCisgICAgICAgIGFwcGVu
ZFN0cmluZ1RvVVN0cmluZ0J1aWxkZXI8VUNoYXI+KGJ1aWxkZXIsIHZhbHVlLmNoYXJhY3RlcnMx
NigpLCBsZW5ndGgpOwogCiAgICAgYnVpbGRlci5hcHBlbmQoJyInKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAJKHJldmlz
aW9uIDEwMTQzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsOCArNjMsMTIgQEAgdm9pZCBTdHJpbmdCdWls
ZGVyOjpyZXNpemUodW5zaWduZWQgbmV3UwogCiAgICAgLy8gSWYgdGhlcmUgaXMgYSBidWZmZXIs
IHdlIG9ubHkgbmVlZCB0byBkdXBsaWNhdGUgaXQgaWYgaXQgaGFzIG1vcmUgdGhhbiBvbmUgcmVm
LgogICAgIGlmIChtX2J1ZmZlcikgewotICAgICAgICBpZiAoIW1fYnVmZmVyLT5oYXNPbmVSZWYo
KSkKLSAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fYnVmZmVyLT5jaGFyYWN0ZXJzKCksIG1f
YnVmZmVyLT5sZW5ndGgoKSk7CisgICAgICAgIGlmICghbV9idWZmZXItPmhhc09uZVJlZigpKSB7
CisgICAgICAgICAgICBpZiAobV9idWZmZXItPmlzOEJpdCgpKQorICAgICAgICAgICAgICAgIGFs
bG9jYXRlQnVmZmVyKG1fYnVmZmVyLT5jaGFyYWN0ZXJzOCgpLCBtX2J1ZmZlci0+bGVuZ3RoKCkp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fYnVm
ZmVyLT5jaGFyYWN0ZXJzMTYoKSwgbV9idWZmZXItPmxlbmd0aCgpKTsKKyAgICAgICAgfQogICAg
ICAgICBtX2xlbmd0aCA9IG5ld1NpemU7CiAgICAgICAgIG1fc3RyaW5nID0gU3RyaW5nKCk7CiAg
ICAgICAgIHJldHVybjsKQEAgLTc4LDQ2ICs4MiwxMTAgQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjpy
ZXNpemUodW5zaWduZWQgbmV3UwogICAgIG1fc3RyaW5nID0gU3RyaW5nSW1wbDo6Y3JlYXRlKG1f
c3RyaW5nLmltcGwoKSwgMCwgbmV3U2l6ZSk7CiB9CiAKLXZvaWQgU3RyaW5nQnVpbGRlcjo6cmVz
ZXJ2ZUNhcGFjaXR5KHVuc2lnbmVkIG5ld0NhcGFjaXR5KQorLy8gQWxsb2NhdGUgYSBuZXcgOCBi
aXQgYnVmZmVyLCBjb3B5aW5nIGluIGN1cnJlbnRDaGFyYWN0ZXJzICh0aGVzZSBtYXkgY29tZSBm
cm9tIGVpdGhlciBtX3N0cmluZworLy8gb3IgbV9idWZmZXIsIG5laXRoZXIgd2lsbCBiZSByZWFz
c2lnbmVkIHVudGlsIHRoZSBjb3B5IGhhcyBjb21wbGV0ZWQpLgordm9pZCBTdHJpbmdCdWlsZGVy
OjphbGxvY2F0ZUJ1ZmZlcihjb25zdCBMQ2hhciogY3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVk
IHJlcXVpcmVkTGVuZ3RoKQogewotICAgIGlmIChtX2J1ZmZlcikgewotICAgICAgICAvLyBJZiB0
aGVyZSBpcyBhbHJlYWR5IGEgYnVmZmVyLCB0aGVuIGdyb3cgaWYgbmVjZXNzYXJ5LgotICAgICAg
ICBpZiAobmV3Q2FwYWNpdHkgPiBtX2J1ZmZlci0+bGVuZ3RoKCkpCi0gICAgICAgICAgICByZWFs
bG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBHcm93
IHRoZSBzdHJpbmcsIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgaWYgKG5ld0NhcGFjaXR5ID4gbV9s
ZW5ndGgpCi0gICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX3N0cmluZy5jaGFyYWN0ZXJzKCks
IG5ld0NhcGFjaXR5KTsKLSAgICB9CisgICAgQVNTRVJUKG1faXM4Qml0KTsKKyAgICAvLyBDb3B5
IHRoZSBleGlzdGluZyBkYXRhIGludG8gYSBuZXcgYnVmZmVyLCBzZXQgcmVzdWx0IHRvIHBvaW50
IHRvIHRoZSBlbmQgb2YgdGhlIGV4aXN0aW5nIGRhdGEuCisgICAgUmVmUHRyPFN0cmluZ0ltcGw+
IGJ1ZmZlciA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVxdWlyZWRMZW5ndGgs
IG1fYnVmZmVyQ2hhcmFjdGVyczgpOworICAgIG1lbWNweShtX2J1ZmZlckNoYXJhY3RlcnM4LCBj
dXJyZW50Q2hhcmFjdGVycywgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2xlbmd0aCkgKiBzaXplb2Yo
TENoYXIpKTsgLy8gVGhpcyBjYW4ndCBvdmVyZmxvdy4KKyAgICAKKyAgICAvLyBVcGRhdGUgdGhl
IGJ1aWxkZXIgc3RhdGUuCisgICAgbV9idWZmZXIgPSBidWZmZXIucmVsZWFzZSgpOworICAgIG1f
c3RyaW5nID0gU3RyaW5nKCk7CiB9CiAKLS8vIEFsbG9jYXRlIGEgbmV3IGJ1ZmZlciwgY29weWlu
ZyBpbiBjdXJyZW50Q2hhcmFjdGVycyAodGhlc2UgbWF5IGNvbWUgZnJvbSBlaXRoZXIgbV9zdHJp
bmcKKy8vIEFsbG9jYXRlIGEgbmV3IDE2IGJpdCBidWZmZXIsIGNvcHlpbmcgaW4gY3VycmVudENo
YXJhY3RlcnMgKHRoZXNlIG1heSBjb21lIGZyb20gZWl0aGVyIG1fc3RyaW5nCiAvLyBvciBtX2J1
ZmZlciwgIG5laXRoZXIgd2lsbCBiZSByZWFzc2lnbmVkIHVudGlsIHRoZSBjb3B5IGhhcyBjb21w
bGV0ZWQpLgogdm9pZCBTdHJpbmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZlcihjb25zdCBVQ2hhciog
Y3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQogeworICAgIEFTU0VS
VCghbV9pczhCaXQpOwogICAgIC8vIENvcHkgdGhlIGV4aXN0aW5nIGRhdGEgaW50byBhIG5ldyBi
dWZmZXIsIHNldCByZXN1bHQgdG8gcG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUgZXhpc3RpbmcgZGF0
YS4KLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gYnVmZmVyID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5p
bml0aWFsaXplZChyZXF1aXJlZExlbmd0aCwgbV9idWZmZXJDaGFyYWN0ZXJzKTsKLSAgICBtZW1j
cHkobV9idWZmZXJDaGFyYWN0ZXJzLCBjdXJyZW50Q2hhcmFjdGVycywgc3RhdGljX2Nhc3Q8c2l6
ZV90PihtX2xlbmd0aCkgKiBzaXplb2YoVUNoYXIpKTsgLy8gVGhpcyBjYW4ndCBvdmVyZmxvdy4K
KyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gYnVmZmVyID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0
aWFsaXplZChyZXF1aXJlZExlbmd0aCwgbV9idWZmZXJDaGFyYWN0ZXJzMTYpOworICAgIG1lbWNw
eShtX2J1ZmZlckNoYXJhY3RlcnMxNiwgY3VycmVudENoYXJhY3RlcnMsIHN0YXRpY19jYXN0PHNp
emVfdD4obV9sZW5ndGgpICogc2l6ZW9mKFVDaGFyKSk7IC8vIFRoaXMgY2FuJ3Qgb3ZlcmZsb3cu
CisgICAgCisgICAgLy8gVXBkYXRlIHRoZSBidWlsZGVyIHN0YXRlLgorICAgIG1fYnVmZmVyID0g
YnVmZmVyLnJlbGVhc2UoKTsKKyAgICBtX3N0cmluZyA9IFN0cmluZygpOworfQogCisvLyBBbGxv
Y2F0ZSBhIG5ldyAxNiBiaXQgYnVmZmVyLCBjb3B5aW5nIGluIGN1cnJlbnRDaGFyYWN0ZXJzICh3
aGljaCBpcyA4IGJpdCBhbmQgbWF5IGNvbWUKKy8vIGZyb20gZWl0aGVyIG1fc3RyaW5nIG9yIG1f
YnVmZmVyLCBuZWl0aGVyIHdpbGwgYmUgcmVhc3NpZ25lZCB1bnRpbCB0aGUgY29weSBoYXMgY29t
cGxldGVkKS4KK3ZvaWQgU3RyaW5nQnVpbGRlcjo6YWxsb2NhdGVCdWZmZXJVcENvbnZlcnQoY29u
c3QgTENoYXIqIGN1cnJlbnRDaGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKK3sK
KyAgICBBU1NFUlQobV9pczhCaXQpOworICAgIC8vIENvcHkgdGhlIGV4aXN0aW5nIGRhdGEgaW50
byBhIG5ldyBidWZmZXIsIHNldCByZXN1bHQgdG8gcG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUgZXhp
c3RpbmcgZGF0YS4KKyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gYnVmZmVyID0gU3RyaW5nSW1wbDo6
Y3JlYXRlVW5pbml0aWFsaXplZChyZXF1aXJlZExlbmd0aCwgbV9idWZmZXJDaGFyYWN0ZXJzMTYp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xlbmd0aDsgaSsrKQorICAgICAgICBt
X2J1ZmZlckNoYXJhY3RlcnMxNltpXSA9IGN1cnJlbnRDaGFyYWN0ZXJzW2ldOworICAgIAorICAg
IG1faXM4Qml0ID0gZmFsc2U7CisgICAgCiAgICAgLy8gVXBkYXRlIHRoZSBidWlsZGVyIHN0YXRl
LgogICAgIG1fYnVmZmVyID0gYnVmZmVyLnJlbGVhc2UoKTsKICAgICBtX3N0cmluZyA9IFN0cmlu
ZygpOwogfQogCi12b2lkIFN0cmluZ0J1aWxkZXI6OnJlYWxsb2NhdGVCdWZmZXIodW5zaWduZWQg
cmVxdWlyZWRMZW5ndGgpCit0ZW1wbGF0ZSA8Pgordm9pZCBTdHJpbmdCdWlsZGVyOjpyZWFsbG9j
YXRlQnVmZmVyPExDaGFyPih1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKIHsKICAgICAvLyBJZiB0
aGUgYnVmZmVyIGhhcyBvbmx5IG9uZSByZWYgKGJ5IHRoaXMgU3RyaW5nQnVpbGRlciksIHJlYWxs
b2NhdGUgaXQsCiAgICAgLy8gb3RoZXJ3aXNlIGZhbGwgYmFjayB0byAiYWxsb2NhdGUgYW5kIGNv
cHkiIG1ldGhvZC4KICAgICBtX3N0cmluZyA9IFN0cmluZygpOworICAgIAorICAgIEFTU0VSVCht
X2lzOEJpdCk7CisgICAgQVNTRVJUKG1fYnVmZmVyLT5pczhCaXQoKSk7CisgICAgCiAgICAgaWYg
KG1fYnVmZmVyLT5oYXNPbmVSZWYoKSkKLSAgICAgICAgbV9idWZmZXIgPSBTdHJpbmdJbXBsOjpy
ZWFsbG9jYXRlKG1fYnVmZmVyLnJlbGVhc2UoKSwgcmVxdWlyZWRMZW5ndGgsIG1fYnVmZmVyQ2hh
cmFjdGVycyk7CisgICAgICAgIG1fYnVmZmVyID0gU3RyaW5nSW1wbDo6cmVhbGxvY2F0ZShtX2J1
ZmZlci5yZWxlYXNlKCksIHJlcXVpcmVkTGVuZ3RoLCBtX2J1ZmZlckNoYXJhY3RlcnM4KTsKICAg
ICBlbHNlCi0gICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fYnVmZmVyLT5jaGFyYWN0ZXJzKCksIHJl
cXVpcmVkTGVuZ3RoKTsKKyAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9idWZmZXItPmNoYXJhY3Rl
cnM4KCksIHJlcXVpcmVkTGVuZ3RoKTsKK30KKwordGVtcGxhdGUgPD4KK3ZvaWQgU3RyaW5nQnVp
bGRlcjo6cmVhbGxvY2F0ZUJ1ZmZlcjxVQ2hhcj4odW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpCit7
CisgICAgLy8gSWYgdGhlIGJ1ZmZlciBoYXMgb25seSBvbmUgcmVmIChieSB0aGlzIFN0cmluZ0J1
aWxkZXIpLCByZWFsbG9jYXRlIGl0LAorICAgIC8vIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gImFs
bG9jYXRlIGFuZCBjb3B5IiBtZXRob2QuCisgICAgbV9zdHJpbmcgPSBTdHJpbmcoKTsKKyAgICAK
KyAgICBpZiAobV9idWZmZXItPmlzOEJpdCgpKQorICAgICAgICBhbGxvY2F0ZUJ1ZmZlclVwQ29u
dmVydChtX2J1ZmZlci0+Y2hhcmFjdGVyczgoKSwgcmVxdWlyZWRMZW5ndGgpOworICAgIGVsc2Ug
aWYgKG1fYnVmZmVyLT5oYXNPbmVSZWYoKSkKKyAgICAgICAgICAgIG1fYnVmZmVyID0gU3RyaW5n
SW1wbDo6cmVhbGxvY2F0ZShtX2J1ZmZlci5yZWxlYXNlKCksIHJlcXVpcmVkTGVuZ3RoLCBtX2J1
ZmZlckNoYXJhY3RlcnMxNik7CisgICAgZWxzZQorICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX2J1
ZmZlci0+Y2hhcmFjdGVyczE2KCksIHJlcXVpcmVkTGVuZ3RoKTsKK30KKwordm9pZCBTdHJpbmdC
dWlsZGVyOjpyZXNlcnZlQ2FwYWNpdHkodW5zaWduZWQgbmV3Q2FwYWNpdHkpCit7CisgICAgaWYg
KG1fYnVmZmVyKSB7CisgICAgICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkgYSBidWZmZXIsIHRo
ZW4gZ3JvdyBpZiBuZWNlc3NhcnkuCisgICAgICAgIGlmIChuZXdDYXBhY2l0eSA+IG1fYnVmZmVy
LT5sZW5ndGgoKSkgeworICAgICAgICAgICAgaWYgKG1fYnVmZmVyLT5pczhCaXQoKSkKKyAgICAg
ICAgICAgICAgICByZWFsbG9jYXRlQnVmZmVyPExDaGFyPihuZXdDYXBhY2l0eSk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVhbGxvY2F0ZUJ1ZmZlcjxVQ2hhcj4obmV3Q2Fw
YWNpdHkpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gR3JvdyB0aGUgc3Ry
aW5nLCBpZiBuZWNlc3NhcnkuCisgICAgICAgIGlmIChuZXdDYXBhY2l0eSA+IG1fbGVuZ3RoKSB7
CisgICAgICAgICAgICBpZiAoIW1fbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgTENoYXIqIG51
bGxQbGFjZWhvbGRlciA9IDA7CisgICAgICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXIobnVsbFBs
YWNlaG9sZGVyLCBuZXdDYXBhY2l0eSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3RyaW5n
LmlzOEJpdCgpKQorICAgICAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fc3RyaW5nLmNoYXJh
Y3RlcnM4KCksIG5ld0NhcGFjaXR5KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBhbGxvY2F0ZUJ1ZmZlcihtX3N0cmluZy5jaGFyYWN0ZXJzMTYoKSwgbmV3Q2FwYWNpdHkpOwor
ICAgICAgICB9CisgICAgfQogfQogCiAvLyBNYWtlICdsZW5ndGgnIGFkZGl0aW9uYWwgY2FwYWNp
dHkgYmUgYXZhaWxhYmxlIGluIG1fYnVmZmVyLCB1cGRhdGUgbV9zdHJpbmcgJiBtX2xlbmd0aCwK
IC8vIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGFsbG9jYXRlZCBzdG9yYWdlLgotVUNo
YXIqIFN0cmluZ0J1aWxkZXI6OmFwcGVuZFVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQor
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgorQUxXQVlTX0lOTElORSBDaGFyVHlwZSogU3Ry
aW5nQnVpbGRlcjo6YXBwZW5kVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAg
QVNTRVJUKGxlbmd0aCk7CiAKQEAgLTEyNiwyNSArMTk0LDM2IEBAIFVDaGFyKiBTdHJpbmdCdWls
ZGVyOjphcHBlbmRVbmluaXRpYWxpemUKICAgICBpZiAocmVxdWlyZWRMZW5ndGggPCBsZW5ndGgp
CiAgICAgICAgIENSQVNIKCk7CiAKLSAgICBpZiAobV9idWZmZXIpIHsKKyAgICBpZiAoKG1fYnVm
ZmVyKSAmJiAocmVxdWlyZWRMZW5ndGggPD0gbV9idWZmZXItPmxlbmd0aCgpKSkgewogICAgICAg
ICAvLyBJZiB0aGUgYnVmZmVyIGlzIHZhbGlkIGl0IG11c3QgYmUgYXQgbGVhc3QgYXMgbG9uZyBh
cyB0aGUgY3VycmVudCBidWlsZGVyIGNvbnRlbnRzIQogICAgICAgICBBU1NFUlQobV9idWZmZXIt
Pmxlbmd0aCgpID49IG1fbGVuZ3RoKTsKKyAgICAgICAgdW5zaWduZWQgY3VycmVudExlbmd0aCA9
IG1fbGVuZ3RoOworICAgICAgICBtX3N0cmluZyA9IFN0cmluZygpOworICAgICAgICBtX2xlbmd0
aCA9IHJlcXVpcmVkTGVuZ3RoOworICAgICAgICByZXR1cm4gZ2V0QnVmZmVyQ2hhcmFjdGVyczxD
aGFyVHlwZT4oKSArIGN1cnJlbnRMZW5ndGg7CisgICAgfQorICAgIAorICAgIHJldHVybiBhcHBl
bmRVbmluaXRpYWxpemVkU2xvdzxDaGFyVHlwZT4ocmVxdWlyZWRMZW5ndGgpOworfQogCi0gICAg
ICAgIC8vIENoZWNrIGlmIHRoZSBidWZmZXIgYWxyZWFkeSBoYXMgc3VmZmljaWVudCBjYXBhY2l0
eS4KLSAgICAgICAgaWYgKHJlcXVpcmVkTGVuZ3RoIDw9IG1fYnVmZmVyLT5sZW5ndGgoKSkgewot
ICAgICAgICAgICAgdW5zaWduZWQgY3VycmVudExlbmd0aCA9IG1fbGVuZ3RoOwotICAgICAgICAg
ICAgbV9zdHJpbmcgPSBTdHJpbmcoKTsKLSAgICAgICAgICAgIG1fbGVuZ3RoID0gcmVxdWlyZWRM
ZW5ndGg7Ci0gICAgICAgICAgICByZXR1cm4gbV9idWZmZXJDaGFyYWN0ZXJzICsgY3VycmVudExl
bmd0aDsKLSAgICAgICAgfQorLy8gTWFrZSAnbGVuZ3RoJyBhZGRpdGlvbmFsIGNhcGFjaXR5IGJl
IGF2YWlsYWJsZSBpbiBtX2J1ZmZlciwgdXBkYXRlIG1fc3RyaW5nICYgbV9sZW5ndGgsCisvLyBy
ZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBuZXdseSBhbGxvY2F0ZWQgc3RvcmFnZS4KK3RlbXBsYXRl
IDx0eXBlbmFtZSBDaGFyVHlwZT4KK0NoYXJUeXBlKiBTdHJpbmdCdWlsZGVyOjphcHBlbmRVbmlu
aXRpYWxpemVkU2xvdyh1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKK3sKKyAgICBBU1NFUlQocmVx
dWlyZWRMZW5ndGgpOwogCi0gICAgICAgIHJlYWxsb2NhdGVCdWZmZXIoc3RkOjptYXgocmVxdWly
ZWRMZW5ndGgsIHN0ZDo6bWF4KG1pbmltdW1DYXBhY2l0eSwgbV9idWZmZXItPmxlbmd0aCgpICog
MikpKTsKKyAgICBpZiAobV9idWZmZXIpIHsKKyAgICAgICAgLy8gSWYgdGhlIGJ1ZmZlciBpcyB2
YWxpZCBpdCBtdXN0IGJlIGF0IGxlYXN0IGFzIGxvbmcgYXMgdGhlIGN1cnJlbnQgYnVpbGRlciBj
b250ZW50cyEKKyAgICAgICAgQVNTRVJUKG1fYnVmZmVyLT5sZW5ndGgoKSA+PSBtX2xlbmd0aCk7
CisgICAgICAgIAorICAgICAgICByZWFsbG9jYXRlQnVmZmVyPENoYXJUeXBlPihzdGQ6Om1heChy
ZXF1aXJlZExlbmd0aCwgc3RkOjptYXgobWluaW11bUNhcGFjaXR5LCBtX2J1ZmZlci0+bGVuZ3Ro
KCkgKiAyKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChtX3N0cmluZy5sZW5ndGgo
KSA9PSBtX2xlbmd0aCk7Ci0gICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fc3RyaW5nLmNoYXJhY3Rl
cnMoKSwgc3RkOjptYXgocmVxdWlyZWRMZW5ndGgsIHN0ZDo6bWF4KG1pbmltdW1DYXBhY2l0eSwg
bV9sZW5ndGggKiAyKSkpOworICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX2xlbmd0aCA/IG1fc3Ry
aW5nLmdldENoYXJhY3RlcnM8Q2hhclR5cGU+KCkgOiAwLCBzdGQ6Om1heChyZXF1aXJlZExlbmd0
aCwgc3RkOjptYXgobWluaW11bUNhcGFjaXR5LCBtX2xlbmd0aCAqIDIpKSk7CiAgICAgfQotCi0g
ICAgVUNoYXIqIHJlc3VsdCA9IG1fYnVmZmVyQ2hhcmFjdGVycyArIG1fbGVuZ3RoOworICAgIAor
ICAgIENoYXJUeXBlKiByZXN1bHQgPSBnZXRCdWZmZXJDaGFyYWN0ZXJzPENoYXJUeXBlPigpICsg
bV9sZW5ndGg7CiAgICAgbV9sZW5ndGggPSByZXF1aXJlZExlbmd0aDsKICAgICByZXR1cm4gcmVz
dWx0OwogfQpAQCAtMTUzLDkgKzIzMiwyOSBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZChj
b25zdCBVQ2hhciogCiB7CiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJldHVybjsKKwogICAg
IEFTU0VSVChjaGFyYWN0ZXJzKTsKIAotICAgIG1lbWNweShhcHBlbmRVbmluaXRpYWxpemVkKGxl
bmd0aCksIGNoYXJhY3RlcnMsIHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSAqIDIpOworICAg
IGlmIChtX2lzOEJpdCkgeworICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIG5ldyBzaXplIG9mIHRo
ZSBidWlsZGVyIGFmdGVyIGFwcGVuZGluZy4KKyAgICAgICAgdW5zaWduZWQgcmVxdWlyZWRMZW5n
dGggPSBsZW5ndGggKyBtX2xlbmd0aDsKKyAgICAgICAgaWYgKHJlcXVpcmVkTGVuZ3RoIDwgbGVu
Z3RoKQorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2J1ZmZl
cikgeworICAgICAgICAgICAgLy8gSWYgdGhlIGJ1ZmZlciBpcyB2YWxpZCBpdCBtdXN0IGJlIGF0
IGxlYXN0IGFzIGxvbmcgYXMgdGhlIGN1cnJlbnQgYnVpbGRlciBjb250ZW50cyEKKyAgICAgICAg
ICAgIEFTU0VSVChtX2J1ZmZlci0+bGVuZ3RoKCkgPj0gbV9sZW5ndGgpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlclVwQ29udmVydChtX2J1ZmZlci0+Y2hhcmFjdGVy
czgoKSwgcmVxdWlyZWRMZW5ndGgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNT
RVJUKG1fc3RyaW5nLmxlbmd0aCgpID09IG1fbGVuZ3RoKTsKKyAgICAgICAgICAgIGFsbG9jYXRl
QnVmZmVyVXBDb252ZXJ0KG1fc3RyaW5nLmlzTnVsbCgpID8gMCA6IG1fc3RyaW5nLmNoYXJhY3Rl
cnM4KCksIHN0ZDo6bWF4KHJlcXVpcmVkTGVuZ3RoLCBzdGQ6Om1heChtaW5pbXVtQ2FwYWNpdHks
IG1fbGVuZ3RoICogMikpKTsKKyAgICAgICAgfQorCisgICAgICAgIG1lbWNweShtX2J1ZmZlckNo
YXJhY3RlcnMxNiArIG1fbGVuZ3RoLCBjaGFyYWN0ZXJzLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxl
bmd0aCkgKiBzaXplb2YoVUNoYXIpKTsgICAgICAgIAorICAgICAgICBtX2xlbmd0aCA9IHJlcXVp
cmVkTGVuZ3RoOworICAgIH0gZWxzZQorICAgICAgICBtZW1jcHkoYXBwZW5kVW5pbml0aWFsaXpl
ZDxVQ2hhcj4obGVuZ3RoKSwgY2hhcmFjdGVycywgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgp
ICogc2l6ZW9mKFVDaGFyKSk7CiB9CiAKIHZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kKGNvbnN0
IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCkBAIC0xNjQsMTcgKzI2MywzMSBA
QCB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZChjb25zdCBMQ2hhciogCiAgICAgICAgIHJldHVy
bjsKICAgICBBU1NFUlQoY2hhcmFjdGVycyk7CiAKLSAgICBVQ2hhciogZGVzdCA9IGFwcGVuZFVu
aW5pdGlhbGl6ZWQobGVuZ3RoKTsKLSAgICBjb25zdCBMQ2hhciogZW5kID0gY2hhcmFjdGVycyAr
IGxlbmd0aDsKLSAgICB3aGlsZSAoY2hhcmFjdGVycyA8IGVuZCkKLSAgICAgICAgKihkZXN0Kysp
ID0gKihjaGFyYWN0ZXJzKyspOworICAgIGlmIChtX2lzOEJpdCkgeworICAgICAgICBMQ2hhciog
ZGVzdCA9IGFwcGVuZFVuaW5pdGlhbGl6ZWQ8TENoYXI+KGxlbmd0aCk7CisgICAgICAgIGlmIChs
ZW5ndGggPiA4KQorICAgICAgICAgICAgbWVtY3B5KGRlc3QsIGNoYXJhY3RlcnMsIHN0YXRpY19j
YXN0PHNpemVfdD4obGVuZ3RoKSAqIHNpemVvZihMQ2hhcikpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIGNvbnN0IExDaGFyKiBlbmQgPSBjaGFyYWN0ZXJzICsgbGVuZ3RoOworICAgICAg
ICAgICAgd2hpbGUgKGNoYXJhY3RlcnMgPCBlbmQpCisgICAgICAgICAgICAgICAgKihkZXN0Kysp
ID0gKihjaGFyYWN0ZXJzKyspOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgVUNo
YXIqIGRlc3QgPSBhcHBlbmRVbmluaXRpYWxpemVkPFVDaGFyPihsZW5ndGgpOworICAgICAgICBj
b25zdCBMQ2hhciogZW5kID0gY2hhcmFjdGVycyArIGxlbmd0aDsKKyAgICAgICAgd2hpbGUgKGNo
YXJhY3RlcnMgPCBlbmQpCisgICAgICAgICAgICAqKGRlc3QrKykgPSAqKGNoYXJhY3RlcnMrKyk7
CisgICAgfQogfQogCiB2b2lkIFN0cmluZ0J1aWxkZXI6OnNocmlua1RvRml0KCkKIHsKICAgICAv
LyBJZiB0aGUgYnVmZmVyIGlzIGF0IGxlYXN0IDgwJSBmdWxsLCBkb24ndCBib3RoZXIgY29weWlu
Zy4gTmVlZCB0byB0dW5lIHRoaXMgaGV1cmlzdGljIQogICAgIGlmIChtX2J1ZmZlciAmJiBtX2J1
ZmZlci0+bGVuZ3RoKCkgPiAobV9sZW5ndGggKyAobV9sZW5ndGggPj4gMikpKSB7Ci0gICAgICAg
IHJlYWxsb2NhdGVCdWZmZXIobV9sZW5ndGgpOworICAgICAgICBpZiAobV9pczhCaXQpCisgICAg
ICAgICAgICByZWFsbG9jYXRlQnVmZmVyPExDaGFyPihtX2xlbmd0aCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHJlYWxsb2NhdGVCdWZmZXI8VUNoYXI+KG1fbGVuZ3RoKTsKICAgICAgICAg
bV9zdHJpbmcgPSBtX2J1ZmZlcjsKICAgICAgICAgbV9idWZmZXIgPSAwOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaAkocmV2
aXNpb24gMTAxNDM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQCBjbGFzcyBTdHJpbmdCdWls
ZGVyIHsKIHB1YmxpYzoKICAgICBTdHJpbmdCdWlsZGVyKCkKICAgICAgICAgOiBtX2xlbmd0aCgw
KQorICAgICAgICAsIG1faXM4Qml0KHRydWUpCiAgICAgewogICAgIH0KIApAQCAtNDUsMTUgKzQ2
LDIzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYgc3RyaW5nKQog
ICAgIHsKKyAgICAgICAgaWYgKCFzdHJpbmcubGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm47
CisKICAgICAgICAgLy8gSWYgd2UncmUgYXBwZW5kaW5nIHRvIGFuIGVtcHR5IHN0cmluZywgYW5k
IHRoZXJlIGlzIG5vdCBidWZmZXIKICAgICAgICAgLy8gKGluIGNhc2UgcmVzZXJ2ZUNhcGFjaXR5
IGhhcyBiZWVuIGNhbGxlZCkgdGhlbiBqdXN0IHJldGFpbiB0aGUKICAgICAgICAgLy8gc3RyaW5n
LgogICAgICAgICBpZiAoIW1fbGVuZ3RoICYmICFtX2J1ZmZlcikgewogICAgICAgICAgICAgbV9z
dHJpbmcgPSBzdHJpbmc7CiAgICAgICAgICAgICBtX2xlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsK
KyAgICAgICAgICAgIG1faXM4Qml0ID0gbV9zdHJpbmcuaXM4Qml0KCk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgYXBwZW5kKHN0cmluZy5jaGFyYWN0ZXJzKCksIHN0
cmluZy5sZW5ndGgoKSk7CisKKyAgICAgICAgaWYgKHN0cmluZy5pczhCaXQoKSkKKyAgICAgICAg
ICAgIGFwcGVuZChzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgYXBwZW5kKHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5n
Lmxlbmd0aCgpKTsKICAgICB9CiAKICAgICB2b2lkIGFwcGVuZChjb25zdCBjaGFyKiBjaGFyYWN0
ZXJzKQpAQCAtNjQsMTYgKzczLDIwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYXBwZW5kKFVDaGFy
IGMpCiAgICAgewotICAgICAgICBpZiAobV9idWZmZXIgJiYgbV9sZW5ndGggPCBtX2J1ZmZlci0+
bGVuZ3RoKCkgJiYgbV9zdHJpbmcuaXNOdWxsKCkpCi0gICAgICAgICAgICBtX2J1ZmZlckNoYXJh
Y3RlcnNbbV9sZW5ndGgrK10gPSBjOworICAgICAgICBpZiAobV9idWZmZXIgJiYgIW1faXM4Qml0
ICYmIG1fbGVuZ3RoIDwgbV9idWZmZXItPmxlbmd0aCgpICYmIG1fc3RyaW5nLmlzTnVsbCgpKQor
ICAgICAgICAgICAgbV9idWZmZXJDaGFyYWN0ZXJzMTZbbV9sZW5ndGgrK10gPSBjOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBhcHBlbmQoJmMsIDEpOwogICAgIH0KIAogICAgIHZvaWQgYXBw
ZW5kKGNoYXIgYykKICAgICB7Ci0gICAgICAgIGlmIChtX2J1ZmZlciAmJiBtX2xlbmd0aCA8IG1f
YnVmZmVyLT5sZW5ndGgoKSAmJiBtX3N0cmluZy5pc051bGwoKSkKLSAgICAgICAgICAgIG1fYnVm
ZmVyQ2hhcmFjdGVyc1ttX2xlbmd0aCsrXSA9ICh1bnNpZ25lZCBjaGFyKWM7CisgICAgICAgIGlm
IChtX2J1ZmZlciAmJiBtX2xlbmd0aCA8IG1fYnVmZmVyLT5sZW5ndGgoKSAmJiBtX3N0cmluZy5p
c051bGwoKSkgeworICAgICAgICAgICAgaWYgKG1faXM4Qml0KQorICAgICAgICAgICAgICAgIG1f
YnVmZmVyQ2hhcmFjdGVyczhbbV9sZW5ndGgrK10gPSAoTENoYXIpYzsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBtX2J1ZmZlckNoYXJhY3RlcnMxNlttX2xlbmd0aCsrXSA9IChM
Q2hhciljOworICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFwcGVuZCgmYywg
MSk7CiAgICAgfQpAQCAtMTEwLDkgKzEyMywzMyBAQCBwdWJsaWM6CiAgICAgVUNoYXIgb3BlcmF0
b3JbXSh1bnNpZ25lZCBpKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGkgPCBtX2xlbmd0
aCk7Ci0gICAgICAgIHJldHVybiBjaGFyYWN0ZXJzKClbaV07CisgICAgICAgIGlmIChtX2lzOEJp
dCkKKyAgICAgICAgICAgIHJldHVybiBjaGFyYWN0ZXJzOCgpW2ldOworICAgICAgICByZXR1cm4g
Y2hhcmFjdGVyczE2KClbaV07CisgICAgfQorCisgICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnM4
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2lzOEJpdCk7CisgICAgICAgIGlmICgh
bV9sZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKCFtX3N0cmluZy5p
c051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBtX3N0cmluZy5jaGFyYWN0ZXJzOCgpOworICAg
ICAgICBBU1NFUlQobV9idWZmZXIpOworICAgICAgICByZXR1cm4gbV9idWZmZXItPmNoYXJhY3Rl
cnM4KCk7CiAgICAgfQogCisgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMxNigpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoIW1faXM4Qml0KTsKKyAgICAgICAgaWYgKCFtX2xlbmd0aCkK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoIW1fc3RyaW5nLmlzTnVsbCgpKQor
ICAgICAgICAgICAgcmV0dXJuIG1fc3RyaW5nLmNoYXJhY3RlcnMxNigpOworICAgICAgICBBU1NF
UlQobV9idWZmZXIpOworICAgICAgICByZXR1cm4gbV9idWZmZXItPmNoYXJhY3RlcnMxNigpOwor
ICAgIH0KKyAgICAKICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycygpIGNvbnN0CiAgICAgewog
ICAgICAgICBpZiAoIW1fbGVuZ3RoKQpAQCAtMTIyLDcgKzE1OSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgQVNTRVJUKG1fYnVmZmVyKTsKICAgICAgICAgcmV0dXJuIG1fYnVmZmVyLT5jaGFyYWN0ZXJz
KCk7CiAgICAgfQotCisgICAgCiAgICAgdm9pZCBjbGVhcigpCiAgICAgewogICAgICAgICBtX2xl
bmd0aCA9IDA7CkBAIC0xMzEsMTcgKzE2OCw0MyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRl
OgorICAgIHZvaWQgYWxsb2NhdGVCdWZmZXIoY29uc3QgTENoYXIqIGN1cnJlbnRDaGFyYWN0ZXJz
LCB1bnNpZ25lZCByZXF1aXJlZExlbmd0aCk7CiAgICAgdm9pZCBhbGxvY2F0ZUJ1ZmZlcihjb25z
dCBVQ2hhciogY3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKTsKKyAg
ICB2b2lkIGFsbG9jYXRlQnVmZmVyVXBDb252ZXJ0KGNvbnN0IExDaGFyKiBjdXJyZW50Q2hhcmFj
dGVycywgdW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBD
aGFyVHlwZT4KICAgICB2b2lkIHJlYWxsb2NhdGVCdWZmZXIodW5zaWduZWQgcmVxdWlyZWRMZW5n
dGgpOwotICAgIFVDaGFyKiBhcHBlbmRVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Cisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgorICAgIEFMV0FZU19JTkxJTkUgQ2hhclR5
cGUqIGFwcGVuZFVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQ2hhclR5cGU+CisgICAgQ2hhclR5cGUqIGFwcGVuZFVuaW5pdGlhbGl6ZWRTbG93
KHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgorICAg
IEFMV0FZU19JTkxJTkUgQ2hhclR5cGUgKiBnZXRCdWZmZXJDaGFyYWN0ZXJzKCk7CiAgICAgdm9p
ZCByZWlmeVN0cmluZygpOwogCiAgICAgdW5zaWduZWQgbV9sZW5ndGg7CiAgICAgU3RyaW5nIG1f
c3RyaW5nOwogICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBtX2J1ZmZlcjsKLSAgICBVQ2hhciogbV9i
dWZmZXJDaGFyYWN0ZXJzOworICAgIGJvb2wgbV9pczhCaXQ7CisgICAgdW5pb24geworICAgICAg
ICBMQ2hhciogbV9idWZmZXJDaGFyYWN0ZXJzODsKKyAgICAgICAgVUNoYXIqIG1fYnVmZmVyQ2hh
cmFjdGVyczE2OworICAgIH07CiB9OwogCit0ZW1wbGF0ZSA8PgorQUxXQVlTX0lOTElORSBMQ2hh
ciogU3RyaW5nQnVpbGRlcjo6Z2V0QnVmZmVyQ2hhcmFjdGVyczxMQ2hhcj4oKQoreworICAgIEFT
U0VSVChtX2lzOEJpdCk7CisgICAgcmV0dXJuIG1fYnVmZmVyQ2hhcmFjdGVyczg7Cit9CisKK3Rl
bXBsYXRlIDw+CitBTFdBWVNfSU5MSU5FIFVDaGFyKiBTdHJpbmdCdWlsZGVyOjpnZXRCdWZmZXJD
aGFyYWN0ZXJzPFVDaGFyPigpCit7CisgICAgQVNTRVJUKCFtX2lzOEJpdCk7CisgICAgcmV0dXJu
IG1fYnVmZmVyQ2hhcmFjdGVyczE2OworfSAgICAKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVz
aW5nIFdURjo6U3RyaW5nQnVpbGRlcjsK
</data>
<flag name="commit-queue"
          id="116740"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117457</attachid>
            <date>2011-12-01 12:29:36 -0800</date>
            <delta_ts>2011-12-02 14:41:58 -0800</delta_ts>
            <desc>Patch with speculative fix for chromium linux</desc>
            <filename>73457-3.patch</filename>
            <type>text/plain</type>
            <size>21319</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAxNTQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBA
CisyMDExLTEyLTAxICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIDggYml0IHN0cmluZyB3b3JrIHNsb3dzIGRvd24gS3Jha2VuIGpzb24tc3RyaW5naWZ5LXRp
bmRlcmJveAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzM0NTcKKworICAgICAgICBBZGRlZCA4IGJpdCBwYXRoIHRvIFN0cmluZ0J1aWxkZXIuICBTdHJp
bmdCdWlsZGVyIHN0YXJ0cworICAgICAgICBhc3N1bWluZyA4IGJpdCBjb250ZW50cyBhbmQgZ2V0
cyBjb252ZXJ0ZWQgdG8gMTYgYml0IHVwb24KKyAgICAgICAgc2VlaW5nIHRoZSBmaXJzdCAxNiBi
aXQgY2hhcmFjdGVyIG9yIHN0cmluZy4gIFNwbGl0CisgICAgICAgIGFwcGVuZFVuaW5pdGlhbGll
emVkIGludG8gYW4gaW5saW5lZCBmYXN0IGFuZCBmdW5jdGlvbiBjYWxsCisgICAgICAgIHNsb3cg
Y2FzZS4KKworICAgICAgICBGYWN0b3JlZCBvdXQgdGhlIHByb2Nlc3Npbmcgb2YgdGhlIFVTdHJp
bmcgYXJndW1lbnQgZnJvbQorICAgICAgICBTdHJpbmdpZmllcjo6YXBwZW5kUXVvdGVkU3RyaW5n
KCkgdG8gYSBzdGF0aWMgdGVtcGxhdGVkIGZ1bmN0aW9uCisgICAgICAgIGJhc2VkIG9uIGNoYXJh
Y3RlciBzaXplLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogcnVudGltZS9KU09OT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6YXBwZW5kU3RyaW5n
VG9VU3RyaW5nQnVpbGRlcik6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjphcHBlbmRRdW90
ZWRTdHJpbmcpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwOgorICAgICAg
ICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpyZXNpemUpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWls
ZGVyOjphbGxvY2F0ZUJ1ZmZlcik6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmFsbG9j
YXRlQnVmZmVyVXBDb252ZXJ0KToKKyAgICAgICAgKFdURjo6TENoYXIpOgorICAgICAgICAoV1RG
OjpVQ2hhcik6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnJlc2VydmVDYXBhY2l0eSk6
CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmFwcGVuZFVuaW5pdGlhbGl6ZWQpOgorICAg
ICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjphcHBlbmRVbmluaXRpYWxpemVkU2xvdyk6CisgICAg
ICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmFwcGVuZCk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1
aWxkZXI6OnNocmlua1RvRml0KToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg6
CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OlN0cmluZ0J1aWxkZXIpOgorICAgICAgICAo
V1RGOjpTdHJpbmdCdWlsZGVyOjphcHBlbmQpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVy
OjpvcGVyYXRvcltdKToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6Y2hhcmFjdGVyczgp
OgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpjaGFyYWN0ZXJzMTYpOgorICAgICAgICAo
V1RGOjpTdHJpbmdCdWlsZGVyOjpjaGFyYWN0ZXJzQmxhaCk6CisgICAgICAgIChXVEY6OkxDaGFy
KToKKyAgICAgICAgKFdURjo6VUNoYXIpOgorCiAyMDExLTExLTMwICBNYXJrIEhhaG5lbmJlcmcg
IDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgdG9TdHJpbmdDYWxsYmFjayBhbmQg
dmFsdWVPZkNhbGxiYWNrIGRvIG5vdCBjaGVjayB0aGUgZW50aXJlIHByb3RvdHlwZSBjaGFpbiBm
b3IgY29udmVydFRvVHlwZSBjYWxsYmFjawpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPTk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHJldmlzaW9uIDEwMTQzOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYs
MTMgKzI2Niw5IEBAIExvY2FsPFVua25vd24+IFN0cmluZ2lmaWVyOjpzdHJpbmdpZnkoSGEKICAg
ICByZXR1cm4gTG9jYWw8VW5rbm93bj4obV9leGVjLT5nbG9iYWxEYXRhKCksIGpzU3RyaW5nKG1f
ZXhlYywgcmVzdWx0LnRvVVN0cmluZygpKSk7CiB9CiAKLXZvaWQgU3RyaW5naWZpZXI6OmFwcGVu
ZFF1b3RlZFN0cmluZyhVU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgY29uc3QgVVN0cmluZyYgdmFs
dWUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+CitzdGF0aWMgdm9pZCBhcHBlbmRTdHJp
bmdUb1VTdHJpbmdCdWlsZGVyKFVTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCBjb25zdCBDaGFyVHlw
ZSogZGF0YSwgaW50IGxlbmd0aCkKIHsKLSAgICBpbnQgbGVuZ3RoID0gdmFsdWUubGVuZ3RoKCk7
Ci0KLSAgICBidWlsZGVyLmFwcGVuZCgnIicpOwotCi0gICAgY29uc3QgVUNoYXIqIGRhdGEgPSB2
YWx1ZS5jaGFyYWN0ZXJzKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewogICAgICAgICBpbnQgc3RhcnQgPSBpOwogICAgICAgICB3aGlsZSAoaSA8IGxlbmd0aCAmJiAo
ZGF0YVtpXSA+IDB4MUYgJiYgZGF0YVtpXSAhPSAnIicgJiYgZGF0YVtpXSAhPSAnXFwnKSkKQEAg
LTI4MSw0MiArMjc3LDU0IEBAIHZvaWQgU3RyaW5naWZpZXI6OmFwcGVuZFF1b3RlZFN0cmluZyhV
U3QKICAgICAgICAgaWYgKGkgPj0gbGVuZ3RoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IHN3aXRjaCAoZGF0YVtpXSkgewotICAgICAgICAgICAgY2FzZSAnXHQnOgotICAgICAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCdcXCcpOwotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCd0Jyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdccic6Ci0g
ICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1xcJyk7Ci0gICAgICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmQoJ3InKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgJ1xuJzoKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnXFwnKTsKLSAgICAgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZCgnbicpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSAnXGYnOgotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdcXCcp
OwotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdmJyk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdcYic6Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmQoJ1xcJyk7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ2InKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJyInOgotICAgICAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCdcXCcpOwotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCci
Jyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdcXCc6Ci0gICAg
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1xcJyk7Ci0gICAgICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmQoJ1xcJyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIGhleERpZ2l0c1tdID0gIjAx
MjM0NTY3ODlhYmNkZWYiOwotICAgICAgICAgICAgICAgIFVDaGFyIGNoID0gZGF0YVtpXTsKLSAg
ICAgICAgICAgICAgICBVQ2hhciBoZXhbXSA9IHsgJ1xcJywgJ3UnLCBoZXhEaWdpdHNbKGNoID4+
IDEyKSAmIDB4Rl0sIGhleERpZ2l0c1soY2ggPj4gOCkgJiAweEZdLCBoZXhEaWdpdHNbKGNoID4+
IDQpICYgMHhGXSwgaGV4RGlnaXRzW2NoICYgMHhGXSB9OwotICAgICAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKGhleCwgV1RGX0FSUkFZX0xFTkdUSChoZXgpKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAnXHQnOgorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1xc
Jyk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgndCcpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgJ1xyJzoKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdcXCcpOwor
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ3InKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICdcbic6CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnXFwnKTsKKyAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKCduJyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSAnXGYnOgorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1xcJyk7CisgICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZCgnZicpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
J1xiJzoKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdcXCcpOworICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmQoJ2InKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICciJzoK
KyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdcXCcpOworICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmQoJyInKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdcXCc6CisgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZCgnXFwnKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCdcXCcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBzdGF0aWMgY29uc3QgY2hhciBoZXhEaWdpdHNbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKKyAg
ICAgICAgICAgIENoYXJUeXBlIGNoID0gZGF0YVtpXTsKKyAgICAgICAgICAgIExDaGFyIGhleFtd
ID0geyAnXFwnLCAndScsIGhleERpZ2l0c1soY2ggPj4gMTIpICYgMHhGXSwgaGV4RGlnaXRzWyhj
aCA+PiA4KSAmIDB4Rl0sIGhleERpZ2l0c1soY2ggPj4gNCkgJiAweEZdLCBoZXhEaWdpdHNbY2gg
JiAweEZdIH07CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChoZXgsIFdURl9BUlJBWV9MRU5H
VEgoaGV4KSk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KK30KKyAgICAK
K3ZvaWQgU3RyaW5naWZpZXI6OmFwcGVuZFF1b3RlZFN0cmluZyhVU3RyaW5nQnVpbGRlciYgYnVp
bGRlciwgY29uc3QgVVN0cmluZyYgdmFsdWUpCit7CisgICAgaW50IGxlbmd0aCA9IHZhbHVlLmxl
bmd0aCgpOworCisgICAgYnVpbGRlci5hcHBlbmQoJyInKTsKKworICAgIGlmICh2YWx1ZS5pczhC
aXQoKSkKKyAgICAgICAgYXBwZW5kU3RyaW5nVG9VU3RyaW5nQnVpbGRlcjxMQ2hhcj4oYnVpbGRl
ciwgdmFsdWUuY2hhcmFjdGVyczgoKSwgbGVuZ3RoKTsKKyAgICBlbHNlCisgICAgICAgIGFwcGVu
ZFN0cmluZ1RvVVN0cmluZ0J1aWxkZXI8VUNoYXI+KGJ1aWxkZXIsIHZhbHVlLmNoYXJhY3RlcnMx
NigpLCBsZW5ndGgpOwogCiAgICAgYnVpbGRlci5hcHBlbmQoJyInKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAJKHJldmlz
aW9uIDEwMTQzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsOCArNjMsMTIgQEAgdm9pZCBTdHJpbmdCdWls
ZGVyOjpyZXNpemUodW5zaWduZWQgbmV3UwogCiAgICAgLy8gSWYgdGhlcmUgaXMgYSBidWZmZXIs
IHdlIG9ubHkgbmVlZCB0byBkdXBsaWNhdGUgaXQgaWYgaXQgaGFzIG1vcmUgdGhhbiBvbmUgcmVm
LgogICAgIGlmIChtX2J1ZmZlcikgewotICAgICAgICBpZiAoIW1fYnVmZmVyLT5oYXNPbmVSZWYo
KSkKLSAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fYnVmZmVyLT5jaGFyYWN0ZXJzKCksIG1f
YnVmZmVyLT5sZW5ndGgoKSk7CisgICAgICAgIGlmICghbV9idWZmZXItPmhhc09uZVJlZigpKSB7
CisgICAgICAgICAgICBpZiAobV9idWZmZXItPmlzOEJpdCgpKQorICAgICAgICAgICAgICAgIGFs
bG9jYXRlQnVmZmVyKG1fYnVmZmVyLT5jaGFyYWN0ZXJzOCgpLCBtX2J1ZmZlci0+bGVuZ3RoKCkp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fYnVm
ZmVyLT5jaGFyYWN0ZXJzMTYoKSwgbV9idWZmZXItPmxlbmd0aCgpKTsKKyAgICAgICAgfQogICAg
ICAgICBtX2xlbmd0aCA9IG5ld1NpemU7CiAgICAgICAgIG1fc3RyaW5nID0gU3RyaW5nKCk7CiAg
ICAgICAgIHJldHVybjsKQEAgLTc4LDQ2ICs4MiwxMTAgQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjpy
ZXNpemUodW5zaWduZWQgbmV3UwogICAgIG1fc3RyaW5nID0gU3RyaW5nSW1wbDo6Y3JlYXRlKG1f
c3RyaW5nLmltcGwoKSwgMCwgbmV3U2l6ZSk7CiB9CiAKLXZvaWQgU3RyaW5nQnVpbGRlcjo6cmVz
ZXJ2ZUNhcGFjaXR5KHVuc2lnbmVkIG5ld0NhcGFjaXR5KQorLy8gQWxsb2NhdGUgYSBuZXcgOCBi
aXQgYnVmZmVyLCBjb3B5aW5nIGluIGN1cnJlbnRDaGFyYWN0ZXJzICh0aGVzZSBtYXkgY29tZSBm
cm9tIGVpdGhlciBtX3N0cmluZworLy8gb3IgbV9idWZmZXIsIG5laXRoZXIgd2lsbCBiZSByZWFz
c2lnbmVkIHVudGlsIHRoZSBjb3B5IGhhcyBjb21wbGV0ZWQpLgordm9pZCBTdHJpbmdCdWlsZGVy
OjphbGxvY2F0ZUJ1ZmZlcihjb25zdCBMQ2hhciogY3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVk
IHJlcXVpcmVkTGVuZ3RoKQogewotICAgIGlmIChtX2J1ZmZlcikgewotICAgICAgICAvLyBJZiB0
aGVyZSBpcyBhbHJlYWR5IGEgYnVmZmVyLCB0aGVuIGdyb3cgaWYgbmVjZXNzYXJ5LgotICAgICAg
ICBpZiAobmV3Q2FwYWNpdHkgPiBtX2J1ZmZlci0+bGVuZ3RoKCkpCi0gICAgICAgICAgICByZWFs
bG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBHcm93
IHRoZSBzdHJpbmcsIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgaWYgKG5ld0NhcGFjaXR5ID4gbV9s
ZW5ndGgpCi0gICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX3N0cmluZy5jaGFyYWN0ZXJzKCks
IG5ld0NhcGFjaXR5KTsKLSAgICB9CisgICAgQVNTRVJUKG1faXM4Qml0KTsKKyAgICAvLyBDb3B5
IHRoZSBleGlzdGluZyBkYXRhIGludG8gYSBuZXcgYnVmZmVyLCBzZXQgcmVzdWx0IHRvIHBvaW50
IHRvIHRoZSBlbmQgb2YgdGhlIGV4aXN0aW5nIGRhdGEuCisgICAgUmVmUHRyPFN0cmluZ0ltcGw+
IGJ1ZmZlciA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVxdWlyZWRMZW5ndGgs
IG1fYnVmZmVyQ2hhcmFjdGVyczgpOworICAgIG1lbWNweShtX2J1ZmZlckNoYXJhY3RlcnM4LCBj
dXJyZW50Q2hhcmFjdGVycywgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2xlbmd0aCkgKiBzaXplb2Yo
TENoYXIpKTsgLy8gVGhpcyBjYW4ndCBvdmVyZmxvdy4KKyAgICAKKyAgICAvLyBVcGRhdGUgdGhl
IGJ1aWxkZXIgc3RhdGUuCisgICAgbV9idWZmZXIgPSBidWZmZXIucmVsZWFzZSgpOworICAgIG1f
c3RyaW5nID0gU3RyaW5nKCk7CiB9CiAKLS8vIEFsbG9jYXRlIGEgbmV3IGJ1ZmZlciwgY29weWlu
ZyBpbiBjdXJyZW50Q2hhcmFjdGVycyAodGhlc2UgbWF5IGNvbWUgZnJvbSBlaXRoZXIgbV9zdHJp
bmcKKy8vIEFsbG9jYXRlIGEgbmV3IDE2IGJpdCBidWZmZXIsIGNvcHlpbmcgaW4gY3VycmVudENo
YXJhY3RlcnMgKHRoZXNlIG1heSBjb21lIGZyb20gZWl0aGVyIG1fc3RyaW5nCiAvLyBvciBtX2J1
ZmZlciwgIG5laXRoZXIgd2lsbCBiZSByZWFzc2lnbmVkIHVudGlsIHRoZSBjb3B5IGhhcyBjb21w
bGV0ZWQpLgogdm9pZCBTdHJpbmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZlcihjb25zdCBVQ2hhciog
Y3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQogeworICAgIEFTU0VS
VCghbV9pczhCaXQpOwogICAgIC8vIENvcHkgdGhlIGV4aXN0aW5nIGRhdGEgaW50byBhIG5ldyBi
dWZmZXIsIHNldCByZXN1bHQgdG8gcG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUgZXhpc3RpbmcgZGF0
YS4KLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gYnVmZmVyID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5p
bml0aWFsaXplZChyZXF1aXJlZExlbmd0aCwgbV9idWZmZXJDaGFyYWN0ZXJzKTsKLSAgICBtZW1j
cHkobV9idWZmZXJDaGFyYWN0ZXJzLCBjdXJyZW50Q2hhcmFjdGVycywgc3RhdGljX2Nhc3Q8c2l6
ZV90PihtX2xlbmd0aCkgKiBzaXplb2YoVUNoYXIpKTsgLy8gVGhpcyBjYW4ndCBvdmVyZmxvdy4K
KyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gYnVmZmVyID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0
aWFsaXplZChyZXF1aXJlZExlbmd0aCwgbV9idWZmZXJDaGFyYWN0ZXJzMTYpOworICAgIG1lbWNw
eShtX2J1ZmZlckNoYXJhY3RlcnMxNiwgY3VycmVudENoYXJhY3RlcnMsIHN0YXRpY19jYXN0PHNp
emVfdD4obV9sZW5ndGgpICogc2l6ZW9mKFVDaGFyKSk7IC8vIFRoaXMgY2FuJ3Qgb3ZlcmZsb3cu
CisgICAgCisgICAgLy8gVXBkYXRlIHRoZSBidWlsZGVyIHN0YXRlLgorICAgIG1fYnVmZmVyID0g
YnVmZmVyLnJlbGVhc2UoKTsKKyAgICBtX3N0cmluZyA9IFN0cmluZygpOworfQogCisvLyBBbGxv
Y2F0ZSBhIG5ldyAxNiBiaXQgYnVmZmVyLCBjb3B5aW5nIGluIGN1cnJlbnRDaGFyYWN0ZXJzICh3
aGljaCBpcyA4IGJpdCBhbmQgbWF5IGNvbWUKKy8vIGZyb20gZWl0aGVyIG1fc3RyaW5nIG9yIG1f
YnVmZmVyLCBuZWl0aGVyIHdpbGwgYmUgcmVhc3NpZ25lZCB1bnRpbCB0aGUgY29weSBoYXMgY29t
cGxldGVkKS4KK3ZvaWQgU3RyaW5nQnVpbGRlcjo6YWxsb2NhdGVCdWZmZXJVcENvbnZlcnQoY29u
c3QgTENoYXIqIGN1cnJlbnRDaGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKK3sK
KyAgICBBU1NFUlQobV9pczhCaXQpOworICAgIC8vIENvcHkgdGhlIGV4aXN0aW5nIGRhdGEgaW50
byBhIG5ldyBidWZmZXIsIHNldCByZXN1bHQgdG8gcG9pbnQgdG8gdGhlIGVuZCBvZiB0aGUgZXhp
c3RpbmcgZGF0YS4KKyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gYnVmZmVyID0gU3RyaW5nSW1wbDo6
Y3JlYXRlVW5pbml0aWFsaXplZChyZXF1aXJlZExlbmd0aCwgbV9idWZmZXJDaGFyYWN0ZXJzMTYp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xlbmd0aDsgaSsrKQorICAgICAgICBt
X2J1ZmZlckNoYXJhY3RlcnMxNltpXSA9IGN1cnJlbnRDaGFyYWN0ZXJzW2ldOworICAgIAorICAg
IG1faXM4Qml0ID0gZmFsc2U7CisgICAgCiAgICAgLy8gVXBkYXRlIHRoZSBidWlsZGVyIHN0YXRl
LgogICAgIG1fYnVmZmVyID0gYnVmZmVyLnJlbGVhc2UoKTsKICAgICBtX3N0cmluZyA9IFN0cmlu
ZygpOwogfQogCi12b2lkIFN0cmluZ0J1aWxkZXI6OnJlYWxsb2NhdGVCdWZmZXIodW5zaWduZWQg
cmVxdWlyZWRMZW5ndGgpCit0ZW1wbGF0ZSA8Pgordm9pZCBTdHJpbmdCdWlsZGVyOjpyZWFsbG9j
YXRlQnVmZmVyPExDaGFyPih1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKIHsKICAgICAvLyBJZiB0
aGUgYnVmZmVyIGhhcyBvbmx5IG9uZSByZWYgKGJ5IHRoaXMgU3RyaW5nQnVpbGRlciksIHJlYWxs
b2NhdGUgaXQsCiAgICAgLy8gb3RoZXJ3aXNlIGZhbGwgYmFjayB0byAiYWxsb2NhdGUgYW5kIGNv
cHkiIG1ldGhvZC4KICAgICBtX3N0cmluZyA9IFN0cmluZygpOworICAgIAorICAgIEFTU0VSVCht
X2lzOEJpdCk7CisgICAgQVNTRVJUKG1fYnVmZmVyLT5pczhCaXQoKSk7CisgICAgCiAgICAgaWYg
KG1fYnVmZmVyLT5oYXNPbmVSZWYoKSkKLSAgICAgICAgbV9idWZmZXIgPSBTdHJpbmdJbXBsOjpy
ZWFsbG9jYXRlKG1fYnVmZmVyLnJlbGVhc2UoKSwgcmVxdWlyZWRMZW5ndGgsIG1fYnVmZmVyQ2hh
cmFjdGVycyk7CisgICAgICAgIG1fYnVmZmVyID0gU3RyaW5nSW1wbDo6cmVhbGxvY2F0ZShtX2J1
ZmZlci5yZWxlYXNlKCksIHJlcXVpcmVkTGVuZ3RoLCBtX2J1ZmZlckNoYXJhY3RlcnM4KTsKICAg
ICBlbHNlCi0gICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fYnVmZmVyLT5jaGFyYWN0ZXJzKCksIHJl
cXVpcmVkTGVuZ3RoKTsKKyAgICAgICAgYWxsb2NhdGVCdWZmZXIobV9idWZmZXItPmNoYXJhY3Rl
cnM4KCksIHJlcXVpcmVkTGVuZ3RoKTsKK30KKwordGVtcGxhdGUgPD4KK3ZvaWQgU3RyaW5nQnVp
bGRlcjo6cmVhbGxvY2F0ZUJ1ZmZlcjxVQ2hhcj4odW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpCit7
CisgICAgLy8gSWYgdGhlIGJ1ZmZlciBoYXMgb25seSBvbmUgcmVmIChieSB0aGlzIFN0cmluZ0J1
aWxkZXIpLCByZWFsbG9jYXRlIGl0LAorICAgIC8vIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gImFs
bG9jYXRlIGFuZCBjb3B5IiBtZXRob2QuCisgICAgbV9zdHJpbmcgPSBTdHJpbmcoKTsKKyAgICAK
KyAgICBpZiAobV9idWZmZXItPmlzOEJpdCgpKQorICAgICAgICBhbGxvY2F0ZUJ1ZmZlclVwQ29u
dmVydChtX2J1ZmZlci0+Y2hhcmFjdGVyczgoKSwgcmVxdWlyZWRMZW5ndGgpOworICAgIGVsc2Ug
aWYgKG1fYnVmZmVyLT5oYXNPbmVSZWYoKSkKKyAgICAgICAgICAgIG1fYnVmZmVyID0gU3RyaW5n
SW1wbDo6cmVhbGxvY2F0ZShtX2J1ZmZlci5yZWxlYXNlKCksIHJlcXVpcmVkTGVuZ3RoLCBtX2J1
ZmZlckNoYXJhY3RlcnMxNik7CisgICAgZWxzZQorICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX2J1
ZmZlci0+Y2hhcmFjdGVyczE2KCksIHJlcXVpcmVkTGVuZ3RoKTsKK30KKwordm9pZCBTdHJpbmdC
dWlsZGVyOjpyZXNlcnZlQ2FwYWNpdHkodW5zaWduZWQgbmV3Q2FwYWNpdHkpCit7CisgICAgaWYg
KG1fYnVmZmVyKSB7CisgICAgICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkgYSBidWZmZXIsIHRo
ZW4gZ3JvdyBpZiBuZWNlc3NhcnkuCisgICAgICAgIGlmIChuZXdDYXBhY2l0eSA+IG1fYnVmZmVy
LT5sZW5ndGgoKSkgeworICAgICAgICAgICAgaWYgKG1fYnVmZmVyLT5pczhCaXQoKSkKKyAgICAg
ICAgICAgICAgICByZWFsbG9jYXRlQnVmZmVyPExDaGFyPihuZXdDYXBhY2l0eSk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVhbGxvY2F0ZUJ1ZmZlcjxVQ2hhcj4obmV3Q2Fw
YWNpdHkpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gR3JvdyB0aGUgc3Ry
aW5nLCBpZiBuZWNlc3NhcnkuCisgICAgICAgIGlmIChuZXdDYXBhY2l0eSA+IG1fbGVuZ3RoKSB7
CisgICAgICAgICAgICBpZiAoIW1fbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgTENoYXIqIG51
bGxQbGFjZWhvbGRlciA9IDA7CisgICAgICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXIobnVsbFBs
YWNlaG9sZGVyLCBuZXdDYXBhY2l0eSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3RyaW5n
LmlzOEJpdCgpKQorICAgICAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fc3RyaW5nLmNoYXJh
Y3RlcnM4KCksIG5ld0NhcGFjaXR5KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBhbGxvY2F0ZUJ1ZmZlcihtX3N0cmluZy5jaGFyYWN0ZXJzMTYoKSwgbmV3Q2FwYWNpdHkpOwor
ICAgICAgICB9CisgICAgfQogfQogCiAvLyBNYWtlICdsZW5ndGgnIGFkZGl0aW9uYWwgY2FwYWNp
dHkgYmUgYXZhaWxhYmxlIGluIG1fYnVmZmVyLCB1cGRhdGUgbV9zdHJpbmcgJiBtX2xlbmd0aCwK
IC8vIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGFsbG9jYXRlZCBzdG9yYWdlLgotVUNo
YXIqIFN0cmluZ0J1aWxkZXI6OmFwcGVuZFVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQor
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgorQUxXQVlTX0lOTElORSBDaGFyVHlwZSogU3Ry
aW5nQnVpbGRlcjo6YXBwZW5kVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAg
QVNTRVJUKGxlbmd0aCk7CiAKQEAgLTEyNiwyNSArMTk0LDM2IEBAIFVDaGFyKiBTdHJpbmdCdWls
ZGVyOjphcHBlbmRVbmluaXRpYWxpemUKICAgICBpZiAocmVxdWlyZWRMZW5ndGggPCBsZW5ndGgp
CiAgICAgICAgIENSQVNIKCk7CiAKLSAgICBpZiAobV9idWZmZXIpIHsKKyAgICBpZiAoKG1fYnVm
ZmVyKSAmJiAocmVxdWlyZWRMZW5ndGggPD0gbV9idWZmZXItPmxlbmd0aCgpKSkgewogICAgICAg
ICAvLyBJZiB0aGUgYnVmZmVyIGlzIHZhbGlkIGl0IG11c3QgYmUgYXQgbGVhc3QgYXMgbG9uZyBh
cyB0aGUgY3VycmVudCBidWlsZGVyIGNvbnRlbnRzIQogICAgICAgICBBU1NFUlQobV9idWZmZXIt
Pmxlbmd0aCgpID49IG1fbGVuZ3RoKTsKKyAgICAgICAgdW5zaWduZWQgY3VycmVudExlbmd0aCA9
IG1fbGVuZ3RoOworICAgICAgICBtX3N0cmluZyA9IFN0cmluZygpOworICAgICAgICBtX2xlbmd0
aCA9IHJlcXVpcmVkTGVuZ3RoOworICAgICAgICByZXR1cm4gZ2V0QnVmZmVyQ2hhcmFjdGVyczxD
aGFyVHlwZT4oKSArIGN1cnJlbnRMZW5ndGg7CisgICAgfQorICAgIAorICAgIHJldHVybiBhcHBl
bmRVbmluaXRpYWxpemVkU2xvdzxDaGFyVHlwZT4ocmVxdWlyZWRMZW5ndGgpOworfQogCi0gICAg
ICAgIC8vIENoZWNrIGlmIHRoZSBidWZmZXIgYWxyZWFkeSBoYXMgc3VmZmljaWVudCBjYXBhY2l0
eS4KLSAgICAgICAgaWYgKHJlcXVpcmVkTGVuZ3RoIDw9IG1fYnVmZmVyLT5sZW5ndGgoKSkgewot
ICAgICAgICAgICAgdW5zaWduZWQgY3VycmVudExlbmd0aCA9IG1fbGVuZ3RoOwotICAgICAgICAg
ICAgbV9zdHJpbmcgPSBTdHJpbmcoKTsKLSAgICAgICAgICAgIG1fbGVuZ3RoID0gcmVxdWlyZWRM
ZW5ndGg7Ci0gICAgICAgICAgICByZXR1cm4gbV9idWZmZXJDaGFyYWN0ZXJzICsgY3VycmVudExl
bmd0aDsKLSAgICAgICAgfQorLy8gTWFrZSAnbGVuZ3RoJyBhZGRpdGlvbmFsIGNhcGFjaXR5IGJl
IGF2YWlsYWJsZSBpbiBtX2J1ZmZlciwgdXBkYXRlIG1fc3RyaW5nICYgbV9sZW5ndGgsCisvLyBy
ZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBuZXdseSBhbGxvY2F0ZWQgc3RvcmFnZS4KK3RlbXBsYXRl
IDx0eXBlbmFtZSBDaGFyVHlwZT4KK0NoYXJUeXBlKiBTdHJpbmdCdWlsZGVyOjphcHBlbmRVbmlu
aXRpYWxpemVkU2xvdyh1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKK3sKKyAgICBBU1NFUlQocmVx
dWlyZWRMZW5ndGgpOwogCi0gICAgICAgIHJlYWxsb2NhdGVCdWZmZXIoc3RkOjptYXgocmVxdWly
ZWRMZW5ndGgsIHN0ZDo6bWF4KG1pbmltdW1DYXBhY2l0eSwgbV9idWZmZXItPmxlbmd0aCgpICog
MikpKTsKKyAgICBpZiAobV9idWZmZXIpIHsKKyAgICAgICAgLy8gSWYgdGhlIGJ1ZmZlciBpcyB2
YWxpZCBpdCBtdXN0IGJlIGF0IGxlYXN0IGFzIGxvbmcgYXMgdGhlIGN1cnJlbnQgYnVpbGRlciBj
b250ZW50cyEKKyAgICAgICAgQVNTRVJUKG1fYnVmZmVyLT5sZW5ndGgoKSA+PSBtX2xlbmd0aCk7
CisgICAgICAgIAorICAgICAgICByZWFsbG9jYXRlQnVmZmVyPENoYXJUeXBlPihzdGQ6Om1heChy
ZXF1aXJlZExlbmd0aCwgc3RkOjptYXgobWluaW11bUNhcGFjaXR5LCBtX2J1ZmZlci0+bGVuZ3Ro
KCkgKiAyKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChtX3N0cmluZy5sZW5ndGgo
KSA9PSBtX2xlbmd0aCk7Ci0gICAgICAgIGFsbG9jYXRlQnVmZmVyKG1fc3RyaW5nLmNoYXJhY3Rl
cnMoKSwgc3RkOjptYXgocmVxdWlyZWRMZW5ndGgsIHN0ZDo6bWF4KG1pbmltdW1DYXBhY2l0eSwg
bV9sZW5ndGggKiAyKSkpOworICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX2xlbmd0aCA/IG1fc3Ry
aW5nLmdldENoYXJhY3RlcnM8Q2hhclR5cGU+KCkgOiAwLCBzdGQ6Om1heChyZXF1aXJlZExlbmd0
aCwgc3RkOjptYXgobWluaW11bUNhcGFjaXR5LCBtX2xlbmd0aCAqIDIpKSk7CiAgICAgfQotCi0g
ICAgVUNoYXIqIHJlc3VsdCA9IG1fYnVmZmVyQ2hhcmFjdGVycyArIG1fbGVuZ3RoOworICAgIAor
ICAgIENoYXJUeXBlKiByZXN1bHQgPSBnZXRCdWZmZXJDaGFyYWN0ZXJzPENoYXJUeXBlPigpICsg
bV9sZW5ndGg7CiAgICAgbV9sZW5ndGggPSByZXF1aXJlZExlbmd0aDsKICAgICByZXR1cm4gcmVz
dWx0OwogfQpAQCAtMTUzLDkgKzIzMiwyOSBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZChj
b25zdCBVQ2hhciogCiB7CiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJldHVybjsKKwogICAg
IEFTU0VSVChjaGFyYWN0ZXJzKTsKIAotICAgIG1lbWNweShhcHBlbmRVbmluaXRpYWxpemVkKGxl
bmd0aCksIGNoYXJhY3RlcnMsIHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSAqIDIpOworICAg
IGlmIChtX2lzOEJpdCkgeworICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIG5ldyBzaXplIG9mIHRo
ZSBidWlsZGVyIGFmdGVyIGFwcGVuZGluZy4KKyAgICAgICAgdW5zaWduZWQgcmVxdWlyZWRMZW5n
dGggPSBsZW5ndGggKyBtX2xlbmd0aDsKKyAgICAgICAgaWYgKHJlcXVpcmVkTGVuZ3RoIDwgbGVu
Z3RoKQorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2J1ZmZl
cikgeworICAgICAgICAgICAgLy8gSWYgdGhlIGJ1ZmZlciBpcyB2YWxpZCBpdCBtdXN0IGJlIGF0
IGxlYXN0IGFzIGxvbmcgYXMgdGhlIGN1cnJlbnQgYnVpbGRlciBjb250ZW50cyEKKyAgICAgICAg
ICAgIEFTU0VSVChtX2J1ZmZlci0+bGVuZ3RoKCkgPj0gbV9sZW5ndGgpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlclVwQ29udmVydChtX2J1ZmZlci0+Y2hhcmFjdGVy
czgoKSwgcmVxdWlyZWRMZW5ndGgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNT
RVJUKG1fc3RyaW5nLmxlbmd0aCgpID09IG1fbGVuZ3RoKTsKKyAgICAgICAgICAgIGFsbG9jYXRl
QnVmZmVyVXBDb252ZXJ0KG1fc3RyaW5nLmlzTnVsbCgpID8gMCA6IG1fc3RyaW5nLmNoYXJhY3Rl
cnM4KCksIHN0ZDo6bWF4KHJlcXVpcmVkTGVuZ3RoLCBzdGQ6Om1heChtaW5pbXVtQ2FwYWNpdHks
IG1fbGVuZ3RoICogMikpKTsKKyAgICAgICAgfQorCisgICAgICAgIG1lbWNweShtX2J1ZmZlckNo
YXJhY3RlcnMxNiArIG1fbGVuZ3RoLCBjaGFyYWN0ZXJzLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxl
bmd0aCkgKiBzaXplb2YoVUNoYXIpKTsgICAgICAgIAorICAgICAgICBtX2xlbmd0aCA9IHJlcXVp
cmVkTGVuZ3RoOworICAgIH0gZWxzZQorICAgICAgICBtZW1jcHkoYXBwZW5kVW5pbml0aWFsaXpl
ZDxVQ2hhcj4obGVuZ3RoKSwgY2hhcmFjdGVycywgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgp
ICogc2l6ZW9mKFVDaGFyKSk7CiB9CiAKIHZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kKGNvbnN0
IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCkBAIC0xNjQsMTcgKzI2MywzMSBA
QCB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZChjb25zdCBMQ2hhciogCiAgICAgICAgIHJldHVy
bjsKICAgICBBU1NFUlQoY2hhcmFjdGVycyk7CiAKLSAgICBVQ2hhciogZGVzdCA9IGFwcGVuZFVu
aW5pdGlhbGl6ZWQobGVuZ3RoKTsKLSAgICBjb25zdCBMQ2hhciogZW5kID0gY2hhcmFjdGVycyAr
IGxlbmd0aDsKLSAgICB3aGlsZSAoY2hhcmFjdGVycyA8IGVuZCkKLSAgICAgICAgKihkZXN0Kysp
ID0gKihjaGFyYWN0ZXJzKyspOworICAgIGlmIChtX2lzOEJpdCkgeworICAgICAgICBMQ2hhciog
ZGVzdCA9IGFwcGVuZFVuaW5pdGlhbGl6ZWQ8TENoYXI+KGxlbmd0aCk7CisgICAgICAgIGlmIChs
ZW5ndGggPiA4KQorICAgICAgICAgICAgbWVtY3B5KGRlc3QsIGNoYXJhY3RlcnMsIHN0YXRpY19j
YXN0PHNpemVfdD4obGVuZ3RoKSAqIHNpemVvZihMQ2hhcikpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIGNvbnN0IExDaGFyKiBlbmQgPSBjaGFyYWN0ZXJzICsgbGVuZ3RoOworICAgICAg
ICAgICAgd2hpbGUgKGNoYXJhY3RlcnMgPCBlbmQpCisgICAgICAgICAgICAgICAgKihkZXN0Kysp
ID0gKihjaGFyYWN0ZXJzKyspOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgVUNo
YXIqIGRlc3QgPSBhcHBlbmRVbmluaXRpYWxpemVkPFVDaGFyPihsZW5ndGgpOworICAgICAgICBj
b25zdCBMQ2hhciogZW5kID0gY2hhcmFjdGVycyArIGxlbmd0aDsKKyAgICAgICAgd2hpbGUgKGNo
YXJhY3RlcnMgPCBlbmQpCisgICAgICAgICAgICAqKGRlc3QrKykgPSAqKGNoYXJhY3RlcnMrKyk7
CisgICAgfQogfQogCiB2b2lkIFN0cmluZ0J1aWxkZXI6OnNocmlua1RvRml0KCkKIHsKICAgICAv
LyBJZiB0aGUgYnVmZmVyIGlzIGF0IGxlYXN0IDgwJSBmdWxsLCBkb24ndCBib3RoZXIgY29weWlu
Zy4gTmVlZCB0byB0dW5lIHRoaXMgaGV1cmlzdGljIQogICAgIGlmIChtX2J1ZmZlciAmJiBtX2J1
ZmZlci0+bGVuZ3RoKCkgPiAobV9sZW5ndGggKyAobV9sZW5ndGggPj4gMikpKSB7Ci0gICAgICAg
IHJlYWxsb2NhdGVCdWZmZXIobV9sZW5ndGgpOworICAgICAgICBpZiAobV9pczhCaXQpCisgICAg
ICAgICAgICByZWFsbG9jYXRlQnVmZmVyPExDaGFyPihtX2xlbmd0aCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHJlYWxsb2NhdGVCdWZmZXI8VUNoYXI+KG1fbGVuZ3RoKTsKICAgICAgICAg
bV9zdHJpbmcgPSBtX2J1ZmZlcjsKICAgICAgICAgbV9idWZmZXIgPSAwOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaAkocmV2
aXNpb24gMTAxNDM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsOCBAQCBjbGFzcyBTdHJpbmdCdWls
ZGVyIHsKIHB1YmxpYzoKICAgICBTdHJpbmdCdWlsZGVyKCkKICAgICAgICAgOiBtX2xlbmd0aCgw
KQorICAgICAgICAsIG1faXM4Qml0KHRydWUpCisgICAgICAgICwgbV9idWZmZXJDaGFyYWN0ZXJz
OCgwKQogICAgIHsKICAgICB9CiAKQEAgLTQ1LDE1ICs0NywyMyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICB7CisgICAgICAgIGlmICghc3Ry
aW5nLmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIC8vIElmIHdlJ3Jl
IGFwcGVuZGluZyB0byBhbiBlbXB0eSBzdHJpbmcsIGFuZCB0aGVyZSBpcyBub3QgYnVmZmVyCiAg
ICAgICAgIC8vIChpbiBjYXNlIHJlc2VydmVDYXBhY2l0eSBoYXMgYmVlbiBjYWxsZWQpIHRoZW4g
anVzdCByZXRhaW4gdGhlCiAgICAgICAgIC8vIHN0cmluZy4KICAgICAgICAgaWYgKCFtX2xlbmd0
aCAmJiAhbV9idWZmZXIpIHsKICAgICAgICAgICAgIG1fc3RyaW5nID0gc3RyaW5nOwogICAgICAg
ICAgICAgbV9sZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CisgICAgICAgICAgICBtX2lzOEJpdCA9
IG1fc3RyaW5nLmlzOEJpdCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAg
ICAgIGFwcGVuZChzdHJpbmcuY2hhcmFjdGVycygpLCBzdHJpbmcubGVuZ3RoKCkpOworCisgICAg
ICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCisgICAgICAgICAgICBhcHBlbmQoc3RyaW5nLmNoYXJh
Y3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFw
cGVuZChzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgoKSk7CiAgICAgfQogCiAg
ICAgdm9pZCBhcHBlbmQoY29uc3QgY2hhciogY2hhcmFjdGVycykKQEAgLTY0LDE2ICs3NCwyMCBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGFwcGVuZChVQ2hhciBjKQogICAgIHsKLSAgICAgICAgaWYg
KG1fYnVmZmVyICYmIG1fbGVuZ3RoIDwgbV9idWZmZXItPmxlbmd0aCgpICYmIG1fc3RyaW5nLmlz
TnVsbCgpKQotICAgICAgICAgICAgbV9idWZmZXJDaGFyYWN0ZXJzW21fbGVuZ3RoKytdID0gYzsK
KyAgICAgICAgaWYgKG1fYnVmZmVyICYmICFtX2lzOEJpdCAmJiBtX2xlbmd0aCA8IG1fYnVmZmVy
LT5sZW5ndGgoKSAmJiBtX3N0cmluZy5pc051bGwoKSkKKyAgICAgICAgICAgIG1fYnVmZmVyQ2hh
cmFjdGVyczE2W21fbGVuZ3RoKytdID0gYzsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYXBw
ZW5kKCZjLCAxKTsKICAgICB9CiAKICAgICB2b2lkIGFwcGVuZChjaGFyIGMpCiAgICAgewotICAg
ICAgICBpZiAobV9idWZmZXIgJiYgbV9sZW5ndGggPCBtX2J1ZmZlci0+bGVuZ3RoKCkgJiYgbV9z
dHJpbmcuaXNOdWxsKCkpCi0gICAgICAgICAgICBtX2J1ZmZlckNoYXJhY3RlcnNbbV9sZW5ndGgr
K10gPSAodW5zaWduZWQgY2hhciljOworICAgICAgICBpZiAobV9idWZmZXIgJiYgbV9sZW5ndGgg
PCBtX2J1ZmZlci0+bGVuZ3RoKCkgJiYgbV9zdHJpbmcuaXNOdWxsKCkpIHsKKyAgICAgICAgICAg
IGlmIChtX2lzOEJpdCkKKyAgICAgICAgICAgICAgICBtX2J1ZmZlckNoYXJhY3RlcnM4W21fbGVu
Z3RoKytdID0gKExDaGFyKWM7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9i
dWZmZXJDaGFyYWN0ZXJzMTZbbV9sZW5ndGgrK10gPSAoTENoYXIpYzsKKyAgICAgICAgfQogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBhcHBlbmQoJmMsIDEpOwogICAgIH0KQEAgLTExMCw5ICsx
MjQsMzMgQEAgcHVibGljOgogICAgIFVDaGFyIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QK
ICAgICB7CiAgICAgICAgIEFTU0VSVChpIDwgbV9sZW5ndGgpOwotICAgICAgICByZXR1cm4gY2hh
cmFjdGVycygpW2ldOworICAgICAgICBpZiAobV9pczhCaXQpCisgICAgICAgICAgICByZXR1cm4g
Y2hhcmFjdGVyczgoKVtpXTsKKyAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnMxNigpW2ldOworICAg
IH0KKworICAgIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzOCgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQobV9pczhCaXQpOworICAgICAgICBpZiAoIW1fbGVuZ3RoKQorICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIGlmICghbV9zdHJpbmcuaXNOdWxsKCkpCisgICAgICAgICAgICBy
ZXR1cm4gbV9zdHJpbmcuY2hhcmFjdGVyczgoKTsKKyAgICAgICAgQVNTRVJUKG1fYnVmZmVyKTsK
KyAgICAgICAgcmV0dXJuIG1fYnVmZmVyLT5jaGFyYWN0ZXJzOCgpOwogICAgIH0KIAorICAgIGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzMTYoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCFt
X2lzOEJpdCk7CisgICAgICAgIGlmICghbV9sZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgaWYgKCFtX3N0cmluZy5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBtX3N0
cmluZy5jaGFyYWN0ZXJzMTYoKTsKKyAgICAgICAgQVNTRVJUKG1fYnVmZmVyKTsKKyAgICAgICAg
cmV0dXJuIG1fYnVmZmVyLT5jaGFyYWN0ZXJzMTYoKTsKKyAgICB9CisgICAgCiAgICAgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKCFtX2xlbmd0aCkK
QEAgLTEyMiw3ICsxNjAsNyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX2J1ZmZlcik7CiAg
ICAgICAgIHJldHVybiBtX2J1ZmZlci0+Y2hhcmFjdGVycygpOwogICAgIH0KLQorICAgIAogICAg
IHZvaWQgY2xlYXIoKQogICAgIHsKICAgICAgICAgbV9sZW5ndGggPSAwOwpAQCAtMTMxLDE3ICsx
NjksNDMgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICB2b2lkIGFsbG9jYXRlQnVm
ZmVyKGNvbnN0IExDaGFyKiBjdXJyZW50Q2hhcmFjdGVycywgdW5zaWduZWQgcmVxdWlyZWRMZW5n
dGgpOwogICAgIHZvaWQgYWxsb2NhdGVCdWZmZXIoY29uc3QgVUNoYXIqIGN1cnJlbnRDaGFyYWN0
ZXJzLCB1bnNpZ25lZCByZXF1aXJlZExlbmd0aCk7CisgICAgdm9pZCBhbGxvY2F0ZUJ1ZmZlclVw
Q29udmVydChjb25zdCBMQ2hhciogY3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVk
TGVuZ3RoKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+CiAgICAgdm9pZCByZWFs
bG9jYXRlQnVmZmVyKHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKTsKLSAgICBVQ2hhciogYXBwZW5k
VW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBD
aGFyVHlwZT4KKyAgICBBTFdBWVNfSU5MSU5FIENoYXJUeXBlKiBhcHBlbmRVbmluaXRpYWxpemVk
KHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgorICAg
IENoYXJUeXBlKiBhcHBlbmRVbmluaXRpYWxpemVkU2xvdyh1bnNpZ25lZCBsZW5ndGgpOworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KKyAgICBBTFdBWVNfSU5MSU5FIENoYXJUeXBl
ICogZ2V0QnVmZmVyQ2hhcmFjdGVycygpOwogICAgIHZvaWQgcmVpZnlTdHJpbmcoKTsKIAogICAg
IHVuc2lnbmVkIG1fbGVuZ3RoOwogICAgIFN0cmluZyBtX3N0cmluZzsKICAgICBSZWZQdHI8U3Ry
aW5nSW1wbD4gbV9idWZmZXI7Ci0gICAgVUNoYXIqIG1fYnVmZmVyQ2hhcmFjdGVyczsKKyAgICBi
b29sIG1faXM4Qml0OworICAgIHVuaW9uIHsKKyAgICAgICAgTENoYXIqIG1fYnVmZmVyQ2hhcmFj
dGVyczg7CisgICAgICAgIFVDaGFyKiBtX2J1ZmZlckNoYXJhY3RlcnMxNjsKKyAgICB9OwogfTsK
IAordGVtcGxhdGUgPD4KK0FMV0FZU19JTkxJTkUgTENoYXIqIFN0cmluZ0J1aWxkZXI6OmdldEJ1
ZmZlckNoYXJhY3RlcnM8TENoYXI+KCkKK3sKKyAgICBBU1NFUlQobV9pczhCaXQpOworICAgIHJl
dHVybiBtX2J1ZmZlckNoYXJhY3RlcnM4OworfQorCit0ZW1wbGF0ZSA8PgorQUxXQVlTX0lOTElO
RSBVQ2hhciogU3RyaW5nQnVpbGRlcjo6Z2V0QnVmZmVyQ2hhcmFjdGVyczxVQ2hhcj4oKQorewor
ICAgIEFTU0VSVCghbV9pczhCaXQpOworICAgIHJldHVybiBtX2J1ZmZlckNoYXJhY3RlcnMxNjsK
K30gICAgCisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OlN0cmluZ0J1aWxkZXI7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117697</attachid>
            <date>2011-12-02 14:41:58 -0800</date>
            <delta_ts>2011-12-05 10:51:41 -0800</delta_ts>
            <desc>Patch with fix for Win build failure</desc>
            <filename>73457-5.patch</filename>
            <type>text/plain</type>
            <size>21511</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAxNzQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBA
CisyMDExLTEyLTAyICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIDggYml0IHN0cmluZyB3b3JrIHNsb3dzIGRvd24gS3Jha2VuIGpzb24tc3RyaW5naWZ5LXRp
bmRlcmJveAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzM0NTcKKworICAgICAgICBBZGRlZCA4IGJpdCBwYXRoIHRvIFN0cmluZ0J1aWxkZXIuICBTdHJp
bmdCdWlsZGVyIHN0YXJ0cworICAgICAgICBhc3N1bWluZyA4IGJpdCBjb250ZW50cyBhbmQgZ2V0
cyBjb252ZXJ0ZWQgdG8gMTYgYml0IHVwb24KKyAgICAgICAgc2VlaW5nIHRoZSBmaXJzdCAxNiBi
aXQgY2hhcmFjdGVyIG9yIHN0cmluZy4gIFNwbGl0CisgICAgICAgIGFwcGVuZFVuaW5pdGlhbGll
emVkIGludG8gYW4gaW5saW5lZCBmYXN0IGFuZCBmdW5jdGlvbiBjYWxsCisgICAgICAgIHNsb3cg
Y2FzZS4KKworICAgICAgICBGYWN0b3JlZCBvdXQgdGhlIHByb2Nlc3Npbmcgb2YgdGhlIFVTdHJp
bmcgYXJndW1lbnQgZnJvbQorICAgICAgICBTdHJpbmdpZmllcjo6YXBwZW5kUXVvdGVkU3RyaW5n
KCkgdG8gYSBzdGF0aWMgdGVtcGxhdGVkIGZ1bmN0aW9uCisgICAgICAgIGJhc2VkIG9uIGNoYXJh
Y3RlciBzaXplLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGVsaW1pbmF0ZXMgNSUgb2YgdGhlIDcl
IHNsb3dkb3duIHRvIGpzb24tc3RyaW5naWZ5LXRpbmRlcmJveC4KKyAgICAgICAgVGhpcyBjaGFu
Z2UgaW50cm9kdWNlcyBhIDQuOCUgc2xvd2Rvd24gdG8ganNvbi1wYXJzZS1maW5hbmNpYWwuCisg
ICAgICAgIFRoaXMgc2xvd2Rvd24gd2lsbCBiZSBhZGRyZXNzZWQgaW4gYSBzdWJzZXF1ZW50IHBh
dGNoIHRvIFN0cmluZ0ltcGw6OmVxdWFsLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogcnVudGltZS9KU09OT2JqZWN0LmNwcDoKKyAgICAgICAgKEpT
Qzo6YXBwZW5kU3RyaW5nVG9VU3RyaW5nQnVpbGRlcik6CisgICAgICAgIChKU0M6OlN0cmluZ2lm
aWVyOjphcHBlbmRRdW90ZWRTdHJpbmcpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpyZXNpemUpOgorICAgICAgICAo
V1RGOjpTdHJpbmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZlcik6CisgICAgICAgIChXVEY6OlN0cmlu
Z0J1aWxkZXI6OmFsbG9jYXRlQnVmZmVyVXBDb252ZXJ0KToKKyAgICAgICAgKFdURjo6TENoYXIp
OgorICAgICAgICAoV1RGOjpVQ2hhcik6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnJl
c2VydmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmFwcGVuZFVuaW5p
dGlhbGl6ZWQpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjphcHBlbmRVbmluaXRpYWxp
emVkU2xvdyk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmFwcGVuZCk6CisgICAgICAg
IChXVEY6OlN0cmluZ0J1aWxkZXI6OnNocmlua1RvRml0KToKKyAgICAgICAgKiB3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OlN0cmluZ0J1aWxk
ZXIpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjphcHBlbmQpOgorICAgICAgICAoV1RG
OjpTdHJpbmdCdWlsZGVyOjpvcGVyYXRvcltdKToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRl
cjo6Y2hhcmFjdGVyczgpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpjaGFyYWN0ZXJz
MTYpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpjaGFyYWN0ZXJzQmxhaCk6CisgICAg
ICAgIChXVEY6OkxDaGFyKToKKyAgICAgICAgKFdURjo6VUNoYXIpOgorCiAyMDExLTEyLTAxICBN
aWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIENoYW5nZXMgcHJv
cG9zZWQgZm9yIDczNDU3IHNsb3cgZG93biBLcmFrZW4ganNvbi1wYXJzZS1maW5hbmNpYWwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCShyZXZp
c2lvbiAxMDE3NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY2LDEzICsyNjYsOSBAQCBMb2NhbDxVbmtub3duPiBT
dHJpbmdpZmllcjo6c3RyaW5naWZ5KEhhCiAgICAgcmV0dXJuIExvY2FsPFVua25vd24+KG1fZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBqc1N0cmluZyhtX2V4ZWMsIHJlc3VsdC50b1VTdHJpbmcoKSkpOwog
fQogCi12b2lkIFN0cmluZ2lmaWVyOjphcHBlbmRRdW90ZWRTdHJpbmcoVVN0cmluZ0J1aWxkZXIm
IGJ1aWxkZXIsIGNvbnN0IFVTdHJpbmcmIHZhbHVlKQordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJU
eXBlPgorc3RhdGljIHZvaWQgYXBwZW5kU3RyaW5nVG9VU3RyaW5nQnVpbGRlcihVU3RyaW5nQnVp
bGRlciYgYnVpbGRlciwgY29uc3QgQ2hhclR5cGUqIGRhdGEsIGludCBsZW5ndGgpCiB7Ci0gICAg
aW50IGxlbmd0aCA9IHZhbHVlLmxlbmd0aCgpOwotCi0gICAgYnVpbGRlci5hcHBlbmQoJyInKTsK
LQotICAgIGNvbnN0IFVDaGFyKiBkYXRhID0gdmFsdWUuY2hhcmFjdGVycygpOwogICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgaW50IHN0YXJ0ID0gaTsKICAg
ICAgICAgd2hpbGUgKGkgPCBsZW5ndGggJiYgKGRhdGFbaV0gPiAweDFGICYmIGRhdGFbaV0gIT0g
JyInICYmIGRhdGFbaV0gIT0gJ1xcJykpCkBAIC0yODEsNDIgKzI3Nyw1NCBAQCB2b2lkIFN0cmlu
Z2lmaWVyOjphcHBlbmRRdW90ZWRTdHJpbmcoVVN0CiAgICAgICAgIGlmIChpID49IGxlbmd0aCkK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBzd2l0Y2ggKGRhdGFbaV0pIHsKLSAgICAgICAg
ICAgIGNhc2UgJ1x0JzoKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnXFwnKTsKLSAg
ICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgndCcpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSAnXHInOgotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCdcXCcpOwotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdyJyk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdcbic6Ci0gICAgICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmQoJ1xcJyk7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ24nKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ1xmJzoKLSAgICAgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZCgnXFwnKTsKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFw
cGVuZCgnZicpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnXGIn
OgotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdcXCcpOwotICAgICAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCdiJyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlICciJzoKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnXFwnKTsKLSAgICAg
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnIicpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSAnXFwnOgotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdc
XCcpOwotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdcXCcpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBzdGF0aWMg
Y29uc3QgY2hhciBoZXhEaWdpdHNbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKLSAgICAgICAgICAg
ICAgICBVQ2hhciBjaCA9IGRhdGFbaV07Ci0gICAgICAgICAgICAgICAgVUNoYXIgaGV4W10gPSB7
ICdcXCcsICd1JywgaGV4RGlnaXRzWyhjaCA+PiAxMikgJiAweEZdLCBoZXhEaWdpdHNbKGNoID4+
IDgpICYgMHhGXSwgaGV4RGlnaXRzWyhjaCA+PiA0KSAmIDB4Rl0sIGhleERpZ2l0c1tjaCAmIDB4
Rl0gfTsKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChoZXgsIFdURl9BUlJBWV9MRU5H
VEgoaGV4KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ1x0JzoKKyAg
ICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdcXCcpOworICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmQoJ3QnKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdccic6CisgICAgICAg
ICAgICBidWlsZGVyLmFwcGVuZCgnXFwnKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdy
Jyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnXG4nOgorICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQoJ1xcJyk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnbicpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ1xmJzoKKyAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCdcXCcpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ2YnKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdcYic6CisgICAgICAgICAgICBidWlsZGVyLmFw
cGVuZCgnXFwnKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdiJyk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSAnIic6CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgn
XFwnKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCciJyk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAnXFwnOgorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1xcJyk7
CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnXFwnKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgaGV4RGlnaXRz
W10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CisgICAgICAgICAgICBVQ2hhciBjaCA9IGRhdGFbaV07
CisgICAgICAgICAgICBMQ2hhciBoZXhbXSA9IHsgJ1xcJywgJ3UnLCBoZXhEaWdpdHNbKGNoID4+
IDEyKSAmIDB4Rl0sIGhleERpZ2l0c1soY2ggPj4gOCkgJiAweEZdLCBoZXhEaWdpdHNbKGNoID4+
IDQpICYgMHhGXSwgaGV4RGlnaXRzW2NoICYgMHhGXSB9OworICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmQoaGV4LCBXVEZfQVJSQVlfTEVOR1RIKGhleCkpOworICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICB9Cit9CisgICAgCit2b2lkIFN0cmluZ2lmaWVyOjphcHBlbmRRdW90ZWRT
dHJpbmcoVVN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IFVTdHJpbmcmIHZhbHVlKQorewor
ICAgIGludCBsZW5ndGggPSB2YWx1ZS5sZW5ndGgoKTsKKworICAgIGJ1aWxkZXIuYXBwZW5kKCci
Jyk7CisKKyAgICBpZiAodmFsdWUuaXM4Qml0KCkpCisgICAgICAgIGFwcGVuZFN0cmluZ1RvVVN0
cmluZ0J1aWxkZXI8TENoYXI+KGJ1aWxkZXIsIHZhbHVlLmNoYXJhY3RlcnM4KCksIGxlbmd0aCk7
CisgICAgZWxzZQorICAgICAgICBhcHBlbmRTdHJpbmdUb1VTdHJpbmdCdWlsZGVyPFVDaGFyPihi
dWlsZGVyLCB2YWx1ZS5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKTsKIAogICAgIGJ1aWxkZXIuYXBw
ZW5kKCciJyk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5n
QnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuY3BwCShyZXZpc2lvbiAxMDE3NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDgg
KzYzLDEyIEBAIHZvaWQgU3RyaW5nQnVpbGRlcjo6cmVzaXplKHVuc2lnbmVkIG5ld1MKIAogICAg
IC8vIElmIHRoZXJlIGlzIGEgYnVmZmVyLCB3ZSBvbmx5IG5lZWQgdG8gZHVwbGljYXRlIGl0IGlm
IGl0IGhhcyBtb3JlIHRoYW4gb25lIHJlZi4KICAgICBpZiAobV9idWZmZXIpIHsKLSAgICAgICAg
aWYgKCFtX2J1ZmZlci0+aGFzT25lUmVmKCkpCi0gICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlciht
X2J1ZmZlci0+Y2hhcmFjdGVycygpLCBtX2J1ZmZlci0+bGVuZ3RoKCkpOworICAgICAgICBpZiAo
IW1fYnVmZmVyLT5oYXNPbmVSZWYoKSkgeworICAgICAgICAgICAgaWYgKG1fYnVmZmVyLT5pczhC
aXQoKSkKKyAgICAgICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX2J1ZmZlci0+Y2hhcmFjdGVy
czgoKSwgbV9idWZmZXItPmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBhbGxvY2F0ZUJ1ZmZlcihtX2J1ZmZlci0+Y2hhcmFjdGVyczE2KCksIG1fYnVmZmVyLT5s
ZW5ndGgoKSk7CisgICAgICAgIH0KICAgICAgICAgbV9sZW5ndGggPSBuZXdTaXplOwogICAgICAg
ICBtX3N0cmluZyA9IFN0cmluZygpOwogICAgICAgICByZXR1cm47CkBAIC03OCw0NiArODIsMTEw
IEBAIHZvaWQgU3RyaW5nQnVpbGRlcjo6cmVzaXplKHVuc2lnbmVkIG5ld1MKICAgICBtX3N0cmlu
ZyA9IFN0cmluZ0ltcGw6OmNyZWF0ZShtX3N0cmluZy5pbXBsKCksIDAsIG5ld1NpemUpOwogfQog
Ci12b2lkIFN0cmluZ0J1aWxkZXI6OnJlc2VydmVDYXBhY2l0eSh1bnNpZ25lZCBuZXdDYXBhY2l0
eSkKKy8vIEFsbG9jYXRlIGEgbmV3IDggYml0IGJ1ZmZlciwgY29weWluZyBpbiBjdXJyZW50Q2hh
cmFjdGVycyAodGhlc2UgbWF5IGNvbWUgZnJvbSBlaXRoZXIgbV9zdHJpbmcKKy8vIG9yIG1fYnVm
ZmVyLCBuZWl0aGVyIHdpbGwgYmUgcmVhc3NpZ25lZCB1bnRpbCB0aGUgY29weSBoYXMgY29tcGxl
dGVkKS4KK3ZvaWQgU3RyaW5nQnVpbGRlcjo6YWxsb2NhdGVCdWZmZXIoY29uc3QgTENoYXIqIGN1
cnJlbnRDaGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKIHsKLSAgICBpZiAobV9i
dWZmZXIpIHsKLSAgICAgICAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIGJ1ZmZlciwgdGhlbiBn
cm93IGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgaWYgKG5ld0NhcGFjaXR5ID4gbV9idWZmZXItPmxl
bmd0aCgpKQotICAgICAgICAgICAgcmVhbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0eSk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgLy8gR3JvdyB0aGUgc3RyaW5nLCBpZiBuZWNlc3NhcnkuCi0gICAg
ICAgIGlmIChuZXdDYXBhY2l0eSA+IG1fbGVuZ3RoKQotICAgICAgICAgICAgYWxsb2NhdGVCdWZm
ZXIobV9zdHJpbmcuY2hhcmFjdGVycygpLCBuZXdDYXBhY2l0eSk7Ci0gICAgfQorICAgIEFTU0VS
VChtX2lzOEJpdCk7CisgICAgLy8gQ29weSB0aGUgZXhpc3RpbmcgZGF0YSBpbnRvIGEgbmV3IGJ1
ZmZlciwgc2V0IHJlc3VsdCB0byBwb2ludCB0byB0aGUgZW5kIG9mIHRoZSBleGlzdGluZyBkYXRh
LgorICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBidWZmZXIgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmlu
aXRpYWxpemVkKHJlcXVpcmVkTGVuZ3RoLCBtX2J1ZmZlckNoYXJhY3RlcnM4KTsKKyAgICBtZW1j
cHkobV9idWZmZXJDaGFyYWN0ZXJzOCwgY3VycmVudENoYXJhY3RlcnMsIHN0YXRpY19jYXN0PHNp
emVfdD4obV9sZW5ndGgpICogc2l6ZW9mKExDaGFyKSk7IC8vIFRoaXMgY2FuJ3Qgb3ZlcmZsb3cu
CisgICAgCisgICAgLy8gVXBkYXRlIHRoZSBidWlsZGVyIHN0YXRlLgorICAgIG1fYnVmZmVyID0g
YnVmZmVyLnJlbGVhc2UoKTsKKyAgICBtX3N0cmluZyA9IFN0cmluZygpOwogfQogCi0vLyBBbGxv
Y2F0ZSBhIG5ldyBidWZmZXIsIGNvcHlpbmcgaW4gY3VycmVudENoYXJhY3RlcnMgKHRoZXNlIG1h
eSBjb21lIGZyb20gZWl0aGVyIG1fc3RyaW5nCisvLyBBbGxvY2F0ZSBhIG5ldyAxNiBiaXQgYnVm
ZmVyLCBjb3B5aW5nIGluIGN1cnJlbnRDaGFyYWN0ZXJzICh0aGVzZSBtYXkgY29tZSBmcm9tIGVp
dGhlciBtX3N0cmluZwogLy8gb3IgbV9idWZmZXIsICBuZWl0aGVyIHdpbGwgYmUgcmVhc3NpZ25l
ZCB1bnRpbCB0aGUgY29weSBoYXMgY29tcGxldGVkKS4KIHZvaWQgU3RyaW5nQnVpbGRlcjo6YWxs
b2NhdGVCdWZmZXIoY29uc3QgVUNoYXIqIGN1cnJlbnRDaGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1
aXJlZExlbmd0aCkKIHsKKyAgICBBU1NFUlQoIW1faXM4Qml0KTsKICAgICAvLyBDb3B5IHRoZSBl
eGlzdGluZyBkYXRhIGludG8gYSBuZXcgYnVmZmVyLCBzZXQgcmVzdWx0IHRvIHBvaW50IHRvIHRo
ZSBlbmQgb2YgdGhlIGV4aXN0aW5nIGRhdGEuCi0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IGJ1ZmZl
ciA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVxdWlyZWRMZW5ndGgsIG1fYnVm
ZmVyQ2hhcmFjdGVycyk7Ci0gICAgbWVtY3B5KG1fYnVmZmVyQ2hhcmFjdGVycywgY3VycmVudENo
YXJhY3RlcnMsIHN0YXRpY19jYXN0PHNpemVfdD4obV9sZW5ndGgpICogc2l6ZW9mKFVDaGFyKSk7
IC8vIFRoaXMgY2FuJ3Qgb3ZlcmZsb3cuCisgICAgUmVmUHRyPFN0cmluZ0ltcGw+IGJ1ZmZlciA9
IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVxdWlyZWRMZW5ndGgsIG1fYnVmZmVy
Q2hhcmFjdGVyczE2KTsKKyAgICBtZW1jcHkobV9idWZmZXJDaGFyYWN0ZXJzMTYsIGN1cnJlbnRD
aGFyYWN0ZXJzLCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fbGVuZ3RoKSAqIHNpemVvZihVQ2hhcikp
OyAvLyBUaGlzIGNhbid0IG92ZXJmbG93LgorICAgIAorICAgIC8vIFVwZGF0ZSB0aGUgYnVpbGRl
ciBzdGF0ZS4KKyAgICBtX2J1ZmZlciA9IGJ1ZmZlci5yZWxlYXNlKCk7CisgICAgbV9zdHJpbmcg
PSBTdHJpbmcoKTsKK30KIAorLy8gQWxsb2NhdGUgYSBuZXcgMTYgYml0IGJ1ZmZlciwgY29weWlu
ZyBpbiBjdXJyZW50Q2hhcmFjdGVycyAod2hpY2ggaXMgOCBiaXQgYW5kIG1heSBjb21lCisvLyBm
cm9tIGVpdGhlciBtX3N0cmluZyBvciBtX2J1ZmZlciwgbmVpdGhlciB3aWxsIGJlIHJlYXNzaWdu
ZWQgdW50aWwgdGhlIGNvcHkgaGFzIGNvbXBsZXRlZCkuCit2b2lkIFN0cmluZ0J1aWxkZXI6OmFs
bG9jYXRlQnVmZmVyVXBDb252ZXJ0KGNvbnN0IExDaGFyKiBjdXJyZW50Q2hhcmFjdGVycywgdW5z
aWduZWQgcmVxdWlyZWRMZW5ndGgpCit7CisgICAgQVNTRVJUKG1faXM4Qml0KTsKKyAgICAvLyBD
b3B5IHRoZSBleGlzdGluZyBkYXRhIGludG8gYSBuZXcgYnVmZmVyLCBzZXQgcmVzdWx0IHRvIHBv
aW50IHRvIHRoZSBlbmQgb2YgdGhlIGV4aXN0aW5nIGRhdGEuCisgICAgUmVmUHRyPFN0cmluZ0lt
cGw+IGJ1ZmZlciA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVxdWlyZWRMZW5n
dGgsIG1fYnVmZmVyQ2hhcmFjdGVyczE2KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9sZW5ndGg7IGkrKykKKyAgICAgICAgbV9idWZmZXJDaGFyYWN0ZXJzMTZbaV0gPSBjdXJyZW50
Q2hhcmFjdGVyc1tpXTsKKyAgICAKKyAgICBtX2lzOEJpdCA9IGZhbHNlOworICAgIAogICAgIC8v
IFVwZGF0ZSB0aGUgYnVpbGRlciBzdGF0ZS4KICAgICBtX2J1ZmZlciA9IGJ1ZmZlci5yZWxlYXNl
KCk7CiAgICAgbV9zdHJpbmcgPSBTdHJpbmcoKTsKIH0KIAotdm9pZCBTdHJpbmdCdWlsZGVyOjpy
ZWFsbG9jYXRlQnVmZmVyKHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQordGVtcGxhdGUgPD4KK3Zv
aWQgU3RyaW5nQnVpbGRlcjo6cmVhbGxvY2F0ZUJ1ZmZlcjxMQ2hhcj4odW5zaWduZWQgcmVxdWly
ZWRMZW5ndGgpCiB7CiAgICAgLy8gSWYgdGhlIGJ1ZmZlciBoYXMgb25seSBvbmUgcmVmIChieSB0
aGlzIFN0cmluZ0J1aWxkZXIpLCByZWFsbG9jYXRlIGl0LAogICAgIC8vIG90aGVyd2lzZSBmYWxs
IGJhY2sgdG8gImFsbG9jYXRlIGFuZCBjb3B5IiBtZXRob2QuCiAgICAgbV9zdHJpbmcgPSBTdHJp
bmcoKTsKKyAgICAKKyAgICBBU1NFUlQobV9pczhCaXQpOworICAgIEFTU0VSVChtX2J1ZmZlci0+
aXM4Qml0KCkpOworICAgIAogICAgIGlmIChtX2J1ZmZlci0+aGFzT25lUmVmKCkpCi0gICAgICAg
IG1fYnVmZmVyID0gU3RyaW5nSW1wbDo6cmVhbGxvY2F0ZShtX2J1ZmZlci5yZWxlYXNlKCksIHJl
cXVpcmVkTGVuZ3RoLCBtX2J1ZmZlckNoYXJhY3RlcnMpOworICAgICAgICBtX2J1ZmZlciA9IFN0
cmluZ0ltcGw6OnJlYWxsb2NhdGUobV9idWZmZXIucmVsZWFzZSgpLCByZXF1aXJlZExlbmd0aCwg
bV9idWZmZXJDaGFyYWN0ZXJzOCk7CiAgICAgZWxzZQotICAgICAgICBhbGxvY2F0ZUJ1ZmZlciht
X2J1ZmZlci0+Y2hhcmFjdGVycygpLCByZXF1aXJlZExlbmd0aCk7CisgICAgICAgIGFsbG9jYXRl
QnVmZmVyKG1fYnVmZmVyLT5jaGFyYWN0ZXJzOCgpLCByZXF1aXJlZExlbmd0aCk7Cit9CisKK3Rl
bXBsYXRlIDw+Cit2b2lkIFN0cmluZ0J1aWxkZXI6OnJlYWxsb2NhdGVCdWZmZXI8VUNoYXI+KHVu
c2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQoreworICAgIC8vIElmIHRoZSBidWZmZXIgaGFzIG9ubHkg
b25lIHJlZiAoYnkgdGhpcyBTdHJpbmdCdWlsZGVyKSwgcmVhbGxvY2F0ZSBpdCwKKyAgICAvLyBv
dGhlcndpc2UgZmFsbCBiYWNrIHRvICJhbGxvY2F0ZSBhbmQgY29weSIgbWV0aG9kLgorICAgIG1f
c3RyaW5nID0gU3RyaW5nKCk7CisgICAgCisgICAgaWYgKG1fYnVmZmVyLT5pczhCaXQoKSkKKyAg
ICAgICAgYWxsb2NhdGVCdWZmZXJVcENvbnZlcnQobV9idWZmZXItPmNoYXJhY3RlcnM4KCksIHJl
cXVpcmVkTGVuZ3RoKTsKKyAgICBlbHNlIGlmIChtX2J1ZmZlci0+aGFzT25lUmVmKCkpCisgICAg
ICAgIG1fYnVmZmVyID0gU3RyaW5nSW1wbDo6cmVhbGxvY2F0ZShtX2J1ZmZlci5yZWxlYXNlKCks
IHJlcXVpcmVkTGVuZ3RoLCBtX2J1ZmZlckNoYXJhY3RlcnMxNik7CisgICAgZWxzZQorICAgICAg
ICBhbGxvY2F0ZUJ1ZmZlcihtX2J1ZmZlci0+Y2hhcmFjdGVyczE2KCksIHJlcXVpcmVkTGVuZ3Ro
KTsKK30KKwordm9pZCBTdHJpbmdCdWlsZGVyOjpyZXNlcnZlQ2FwYWNpdHkodW5zaWduZWQgbmV3
Q2FwYWNpdHkpCit7CisgICAgaWYgKG1fYnVmZmVyKSB7CisgICAgICAgIC8vIElmIHRoZXJlIGlz
IGFscmVhZHkgYSBidWZmZXIsIHRoZW4gZ3JvdyBpZiBuZWNlc3NhcnkuCisgICAgICAgIGlmIChu
ZXdDYXBhY2l0eSA+IG1fYnVmZmVyLT5sZW5ndGgoKSkgeworICAgICAgICAgICAgaWYgKG1fYnVm
ZmVyLT5pczhCaXQoKSkKKyAgICAgICAgICAgICAgICByZWFsbG9jYXRlQnVmZmVyPExDaGFyPihu
ZXdDYXBhY2l0eSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVhbGxvY2F0
ZUJ1ZmZlcjxVQ2hhcj4obmV3Q2FwYWNpdHkpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gR3JvdyB0aGUgc3RyaW5nLCBpZiBuZWNlc3NhcnkuCisgICAgICAgIGlmIChuZXdD
YXBhY2l0eSA+IG1fbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAoIW1fbGVuZ3RoKSB7CisgICAg
ICAgICAgICAgICAgTENoYXIqIG51bGxQbGFjZWhvbGRlciA9IDA7CisgICAgICAgICAgICAgICAg
YWxsb2NhdGVCdWZmZXIobnVsbFBsYWNlaG9sZGVyLCBuZXdDYXBhY2l0eSk7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKG1fc3RyaW5nLmlzOEJpdCgpKQorICAgICAgICAgICAgICAgIGFsbG9jYXRl
QnVmZmVyKG1fc3RyaW5nLmNoYXJhY3RlcnM4KCksIG5ld0NhcGFjaXR5KTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX3N0cmluZy5jaGFyYWN0ZXJz
MTYoKSwgbmV3Q2FwYWNpdHkpOworICAgICAgICB9CisgICAgfQogfQogCiAvLyBNYWtlICdsZW5n
dGgnIGFkZGl0aW9uYWwgY2FwYWNpdHkgYmUgYXZhaWxhYmxlIGluIG1fYnVmZmVyLCB1cGRhdGUg
bV9zdHJpbmcgJiBtX2xlbmd0aCwKIC8vIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGFs
bG9jYXRlZCBzdG9yYWdlLgotVUNoYXIqIFN0cmluZ0J1aWxkZXI6OmFwcGVuZFVuaW5pdGlhbGl6
ZWQodW5zaWduZWQgbGVuZ3RoKQordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgorQUxXQVlT
X0lOTElORSBDaGFyVHlwZSogU3RyaW5nQnVpbGRlcjo6YXBwZW5kVW5pbml0aWFsaXplZCh1bnNp
Z25lZCBsZW5ndGgpCiB7CiAgICAgQVNTRVJUKGxlbmd0aCk7CiAKQEAgLTEyNiwyNSArMTk0LDM2
IEBAIFVDaGFyKiBTdHJpbmdCdWlsZGVyOjphcHBlbmRVbmluaXRpYWxpemUKICAgICBpZiAocmVx
dWlyZWRMZW5ndGggPCBsZW5ndGgpCiAgICAgICAgIENSQVNIKCk7CiAKLSAgICBpZiAobV9idWZm
ZXIpIHsKKyAgICBpZiAoKG1fYnVmZmVyKSAmJiAocmVxdWlyZWRMZW5ndGggPD0gbV9idWZmZXIt
Pmxlbmd0aCgpKSkgewogICAgICAgICAvLyBJZiB0aGUgYnVmZmVyIGlzIHZhbGlkIGl0IG11c3Qg
YmUgYXQgbGVhc3QgYXMgbG9uZyBhcyB0aGUgY3VycmVudCBidWlsZGVyIGNvbnRlbnRzIQogICAg
ICAgICBBU1NFUlQobV9idWZmZXItPmxlbmd0aCgpID49IG1fbGVuZ3RoKTsKKyAgICAgICAgdW5z
aWduZWQgY3VycmVudExlbmd0aCA9IG1fbGVuZ3RoOworICAgICAgICBtX3N0cmluZyA9IFN0cmlu
ZygpOworICAgICAgICBtX2xlbmd0aCA9IHJlcXVpcmVkTGVuZ3RoOworICAgICAgICByZXR1cm4g
Z2V0QnVmZmVyQ2hhcmFjdGVyczxDaGFyVHlwZT4oKSArIGN1cnJlbnRMZW5ndGg7CisgICAgfQor
ICAgIAorICAgIHJldHVybiBhcHBlbmRVbmluaXRpYWxpemVkU2xvdzxDaGFyVHlwZT4ocmVxdWly
ZWRMZW5ndGgpOworfQogCi0gICAgICAgIC8vIENoZWNrIGlmIHRoZSBidWZmZXIgYWxyZWFkeSBo
YXMgc3VmZmljaWVudCBjYXBhY2l0eS4KLSAgICAgICAgaWYgKHJlcXVpcmVkTGVuZ3RoIDw9IG1f
YnVmZmVyLT5sZW5ndGgoKSkgewotICAgICAgICAgICAgdW5zaWduZWQgY3VycmVudExlbmd0aCA9
IG1fbGVuZ3RoOwotICAgICAgICAgICAgbV9zdHJpbmcgPSBTdHJpbmcoKTsKLSAgICAgICAgICAg
IG1fbGVuZ3RoID0gcmVxdWlyZWRMZW5ndGg7Ci0gICAgICAgICAgICByZXR1cm4gbV9idWZmZXJD
aGFyYWN0ZXJzICsgY3VycmVudExlbmd0aDsKLSAgICAgICAgfQorLy8gTWFrZSAnbGVuZ3RoJyBh
ZGRpdGlvbmFsIGNhcGFjaXR5IGJlIGF2YWlsYWJsZSBpbiBtX2J1ZmZlciwgdXBkYXRlIG1fc3Ry
aW5nICYgbV9sZW5ndGgsCisvLyByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBuZXdseSBhbGxvY2F0
ZWQgc3RvcmFnZS4KK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KK0NoYXJUeXBlKiBTdHJp
bmdCdWlsZGVyOjphcHBlbmRVbmluaXRpYWxpemVkU2xvdyh1bnNpZ25lZCByZXF1aXJlZExlbmd0
aCkKK3sKKyAgICBBU1NFUlQocmVxdWlyZWRMZW5ndGgpOwogCi0gICAgICAgIHJlYWxsb2NhdGVC
dWZmZXIoc3RkOjptYXgocmVxdWlyZWRMZW5ndGgsIHN0ZDo6bWF4KG1pbmltdW1DYXBhY2l0eSwg
bV9idWZmZXItPmxlbmd0aCgpICogMikpKTsKKyAgICBpZiAobV9idWZmZXIpIHsKKyAgICAgICAg
Ly8gSWYgdGhlIGJ1ZmZlciBpcyB2YWxpZCBpdCBtdXN0IGJlIGF0IGxlYXN0IGFzIGxvbmcgYXMg
dGhlIGN1cnJlbnQgYnVpbGRlciBjb250ZW50cyEKKyAgICAgICAgQVNTRVJUKG1fYnVmZmVyLT5s
ZW5ndGgoKSA+PSBtX2xlbmd0aCk7CisgICAgICAgIAorICAgICAgICByZWFsbG9jYXRlQnVmZmVy
PENoYXJUeXBlPihzdGQ6Om1heChyZXF1aXJlZExlbmd0aCwgc3RkOjptYXgobWluaW11bUNhcGFj
aXR5LCBtX2J1ZmZlci0+bGVuZ3RoKCkgKiAyKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFT
U0VSVChtX3N0cmluZy5sZW5ndGgoKSA9PSBtX2xlbmd0aCk7Ci0gICAgICAgIGFsbG9jYXRlQnVm
ZmVyKG1fc3RyaW5nLmNoYXJhY3RlcnMoKSwgc3RkOjptYXgocmVxdWlyZWRMZW5ndGgsIHN0ZDo6
bWF4KG1pbmltdW1DYXBhY2l0eSwgbV9sZW5ndGggKiAyKSkpOworICAgICAgICBhbGxvY2F0ZUJ1
ZmZlcihtX2xlbmd0aCA/IG1fc3RyaW5nLmdldENoYXJhY3RlcnM8Q2hhclR5cGU+KCkgOiAwLCBz
dGQ6Om1heChyZXF1aXJlZExlbmd0aCwgc3RkOjptYXgobWluaW11bUNhcGFjaXR5LCBtX2xlbmd0
aCAqIDIpKSk7CiAgICAgfQotCi0gICAgVUNoYXIqIHJlc3VsdCA9IG1fYnVmZmVyQ2hhcmFjdGVy
cyArIG1fbGVuZ3RoOworICAgIAorICAgIENoYXJUeXBlKiByZXN1bHQgPSBnZXRCdWZmZXJDaGFy
YWN0ZXJzPENoYXJUeXBlPigpICsgbV9sZW5ndGg7CiAgICAgbV9sZW5ndGggPSByZXF1aXJlZExl
bmd0aDsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTUzLDkgKzIzMiwyOSBAQCB2b2lkIFN0
cmluZ0J1aWxkZXI6OmFwcGVuZChjb25zdCBVQ2hhciogCiB7CiAgICAgaWYgKCFsZW5ndGgpCiAg
ICAgICAgIHJldHVybjsKKwogICAgIEFTU0VSVChjaGFyYWN0ZXJzKTsKIAotICAgIG1lbWNweShh
cHBlbmRVbmluaXRpYWxpemVkKGxlbmd0aCksIGNoYXJhY3RlcnMsIHN0YXRpY19jYXN0PHNpemVf
dD4obGVuZ3RoKSAqIDIpOworICAgIGlmIChtX2lzOEJpdCkgeworICAgICAgICAvLyBDYWxjdWxh
dGUgdGhlIG5ldyBzaXplIG9mIHRoZSBidWlsZGVyIGFmdGVyIGFwcGVuZGluZy4KKyAgICAgICAg
dW5zaWduZWQgcmVxdWlyZWRMZW5ndGggPSBsZW5ndGggKyBtX2xlbmd0aDsKKyAgICAgICAgaWYg
KHJlcXVpcmVkTGVuZ3RoIDwgbGVuZ3RoKQorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAg
CisgICAgICAgIGlmIChtX2J1ZmZlcikgeworICAgICAgICAgICAgLy8gSWYgdGhlIGJ1ZmZlciBp
cyB2YWxpZCBpdCBtdXN0IGJlIGF0IGxlYXN0IGFzIGxvbmcgYXMgdGhlIGN1cnJlbnQgYnVpbGRl
ciBjb250ZW50cyEKKyAgICAgICAgICAgIEFTU0VSVChtX2J1ZmZlci0+bGVuZ3RoKCkgPj0gbV9s
ZW5ndGgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlclVwQ29udmVy
dChtX2J1ZmZlci0+Y2hhcmFjdGVyczgoKSwgcmVxdWlyZWRMZW5ndGgpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgQVNTRVJUKG1fc3RyaW5nLmxlbmd0aCgpID09IG1fbGVuZ3RoKTsK
KyAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyVXBDb252ZXJ0KG1fc3RyaW5nLmlzTnVsbCgpID8g
MCA6IG1fc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0ZDo6bWF4KHJlcXVpcmVkTGVuZ3RoLCBzdGQ6
Om1heChtaW5pbXVtQ2FwYWNpdHksIG1fbGVuZ3RoICogMikpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIG1lbWNweShtX2J1ZmZlckNoYXJhY3RlcnMxNiArIG1fbGVuZ3RoLCBjaGFyYWN0ZXJzLCBz
dGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkgKiBzaXplb2YoVUNoYXIpKTsgICAgICAgIAorICAg
ICAgICBtX2xlbmd0aCA9IHJlcXVpcmVkTGVuZ3RoOworICAgIH0gZWxzZQorICAgICAgICBtZW1j
cHkoYXBwZW5kVW5pbml0aWFsaXplZDxVQ2hhcj4obGVuZ3RoKSwgY2hhcmFjdGVycywgc3RhdGlj
X2Nhc3Q8c2l6ZV90PihsZW5ndGgpICogc2l6ZW9mKFVDaGFyKSk7CiB9CiAKIHZvaWQgU3RyaW5n
QnVpbGRlcjo6YXBwZW5kKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgp
CkBAIC0xNjQsMTcgKzI2MywzMSBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZChjb25zdCBM
Q2hhciogCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoY2hhcmFjdGVycyk7CiAKLSAgICBV
Q2hhciogZGVzdCA9IGFwcGVuZFVuaW5pdGlhbGl6ZWQobGVuZ3RoKTsKLSAgICBjb25zdCBMQ2hh
ciogZW5kID0gY2hhcmFjdGVycyArIGxlbmd0aDsKLSAgICB3aGlsZSAoY2hhcmFjdGVycyA8IGVu
ZCkKLSAgICAgICAgKihkZXN0KyspID0gKihjaGFyYWN0ZXJzKyspOworICAgIGlmIChtX2lzOEJp
dCkgeworICAgICAgICBMQ2hhciogZGVzdCA9IGFwcGVuZFVuaW5pdGlhbGl6ZWQ8TENoYXI+KGxl
bmd0aCk7CisgICAgICAgIGlmIChsZW5ndGggPiA4KQorICAgICAgICAgICAgbWVtY3B5KGRlc3Qs
IGNoYXJhY3RlcnMsIHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSAqIHNpemVvZihMQ2hhcikp
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNvbnN0IExDaGFyKiBlbmQgPSBjaGFyYWN0
ZXJzICsgbGVuZ3RoOworICAgICAgICAgICAgd2hpbGUgKGNoYXJhY3RlcnMgPCBlbmQpCisgICAg
ICAgICAgICAgICAgKihkZXN0KyspID0gKihjaGFyYWN0ZXJzKyspOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgVUNoYXIqIGRlc3QgPSBhcHBlbmRVbmluaXRpYWxpemVkPFVDaGFy
PihsZW5ndGgpOworICAgICAgICBjb25zdCBMQ2hhciogZW5kID0gY2hhcmFjdGVycyArIGxlbmd0
aDsKKyAgICAgICAgd2hpbGUgKGNoYXJhY3RlcnMgPCBlbmQpCisgICAgICAgICAgICAqKGRlc3Qr
KykgPSAqKGNoYXJhY3RlcnMrKyk7CisgICAgfQogfQogCiB2b2lkIFN0cmluZ0J1aWxkZXI6OnNo
cmlua1RvRml0KCkKIHsKICAgICAvLyBJZiB0aGUgYnVmZmVyIGlzIGF0IGxlYXN0IDgwJSBmdWxs
LCBkb24ndCBib3RoZXIgY29weWluZy4gTmVlZCB0byB0dW5lIHRoaXMgaGV1cmlzdGljIQogICAg
IGlmIChtX2J1ZmZlciAmJiBtX2J1ZmZlci0+bGVuZ3RoKCkgPiAobV9sZW5ndGggKyAobV9sZW5n
dGggPj4gMikpKSB7Ci0gICAgICAgIHJlYWxsb2NhdGVCdWZmZXIobV9sZW5ndGgpOworICAgICAg
ICBpZiAobV9pczhCaXQpCisgICAgICAgICAgICByZWFsbG9jYXRlQnVmZmVyPExDaGFyPihtX2xl
bmd0aCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlYWxsb2NhdGVCdWZmZXI8VUNoYXI+
KG1fbGVuZ3RoKTsKICAgICAgICAgbV9zdHJpbmcgPSBtX2J1ZmZlcjsKICAgICAgICAgbV9idWZm
ZXIgPSAwOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaAkocmV2aXNpb24gMTAxNzQ2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUs
OCBAQCBjbGFzcyBTdHJpbmdCdWlsZGVyIHsKIHB1YmxpYzoKICAgICBTdHJpbmdCdWlsZGVyKCkK
ICAgICAgICAgOiBtX2xlbmd0aCgwKQorICAgICAgICAsIG1faXM4Qml0KHRydWUpCisgICAgICAg
ICwgbV9idWZmZXJDaGFyYWN0ZXJzOCgwKQogICAgIHsKICAgICB9CiAKQEAgLTQ1LDE1ICs0Nywy
MyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIHN0cmluZykKICAg
ICB7CisgICAgICAgIGlmICghc3RyaW5nLmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuOwor
CiAgICAgICAgIC8vIElmIHdlJ3JlIGFwcGVuZGluZyB0byBhbiBlbXB0eSBzdHJpbmcsIGFuZCB0
aGVyZSBpcyBub3QgYnVmZmVyCiAgICAgICAgIC8vIChpbiBjYXNlIHJlc2VydmVDYXBhY2l0eSBo
YXMgYmVlbiBjYWxsZWQpIHRoZW4ganVzdCByZXRhaW4gdGhlCiAgICAgICAgIC8vIHN0cmluZy4K
ICAgICAgICAgaWYgKCFtX2xlbmd0aCAmJiAhbV9idWZmZXIpIHsKICAgICAgICAgICAgIG1fc3Ry
aW5nID0gc3RyaW5nOwogICAgICAgICAgICAgbV9sZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Cisg
ICAgICAgICAgICBtX2lzOEJpdCA9IG1fc3RyaW5nLmlzOEJpdCgpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgIGFwcGVuZChzdHJpbmcuY2hhcmFjdGVycygpLCBzdHJp
bmcubGVuZ3RoKCkpOworCisgICAgICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCisgICAgICAgICAg
ICBhcHBlbmQoc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGFwcGVuZChzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5s
ZW5ndGgoKSk7CiAgICAgfQogCiAgICAgdm9pZCBhcHBlbmQoY29uc3QgY2hhciogY2hhcmFjdGVy
cykKQEAgLTY0LDE2ICs3NCwyMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFwcGVuZChVQ2hhciBj
KQogICAgIHsKLSAgICAgICAgaWYgKG1fYnVmZmVyICYmIG1fbGVuZ3RoIDwgbV9idWZmZXItPmxl
bmd0aCgpICYmIG1fc3RyaW5nLmlzTnVsbCgpKQotICAgICAgICAgICAgbV9idWZmZXJDaGFyYWN0
ZXJzW21fbGVuZ3RoKytdID0gYzsKKyAgICAgICAgaWYgKG1fYnVmZmVyICYmICFtX2lzOEJpdCAm
JiBtX2xlbmd0aCA8IG1fYnVmZmVyLT5sZW5ndGgoKSAmJiBtX3N0cmluZy5pc051bGwoKSkKKyAg
ICAgICAgICAgIG1fYnVmZmVyQ2hhcmFjdGVyczE2W21fbGVuZ3RoKytdID0gYzsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgYXBwZW5kKCZjLCAxKTsKICAgICB9CiAKICAgICB2b2lkIGFwcGVu
ZChjaGFyIGMpCiAgICAgewotICAgICAgICBpZiAobV9idWZmZXIgJiYgbV9sZW5ndGggPCBtX2J1
ZmZlci0+bGVuZ3RoKCkgJiYgbV9zdHJpbmcuaXNOdWxsKCkpCi0gICAgICAgICAgICBtX2J1ZmZl
ckNoYXJhY3RlcnNbbV9sZW5ndGgrK10gPSAodW5zaWduZWQgY2hhciljOworICAgICAgICBpZiAo
bV9idWZmZXIgJiYgbV9sZW5ndGggPCBtX2J1ZmZlci0+bGVuZ3RoKCkgJiYgbV9zdHJpbmcuaXNO
dWxsKCkpIHsKKyAgICAgICAgICAgIGlmIChtX2lzOEJpdCkKKyAgICAgICAgICAgICAgICBtX2J1
ZmZlckNoYXJhY3RlcnM4W21fbGVuZ3RoKytdID0gKExDaGFyKWM7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgbV9idWZmZXJDaGFyYWN0ZXJzMTZbbV9sZW5ndGgrK10gPSAoTENo
YXIpYzsKKyAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICBhcHBlbmQoJmMsIDEp
OwogICAgIH0KQEAgLTExMCw5ICsxMjQsMzMgQEAgcHVibGljOgogICAgIFVDaGFyIG9wZXJhdG9y
W10odW5zaWduZWQgaSkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpIDwgbV9sZW5ndGgp
OwotICAgICAgICByZXR1cm4gY2hhcmFjdGVycygpW2ldOworICAgICAgICBpZiAobV9pczhCaXQp
CisgICAgICAgICAgICByZXR1cm4gY2hhcmFjdGVyczgoKVtpXTsKKyAgICAgICAgcmV0dXJuIGNo
YXJhY3RlcnMxNigpW2ldOworICAgIH0KKworICAgIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzOCgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9pczhCaXQpOworICAgICAgICBpZiAoIW1f
bGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmICghbV9zdHJpbmcuaXNO
dWxsKCkpCisgICAgICAgICAgICByZXR1cm4gbV9zdHJpbmcuY2hhcmFjdGVyczgoKTsKKyAgICAg
ICAgQVNTRVJUKG1fYnVmZmVyKTsKKyAgICAgICAgcmV0dXJuIG1fYnVmZmVyLT5jaGFyYWN0ZXJz
OCgpOwogICAgIH0KIAorICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzMTYoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKCFtX2lzOEJpdCk7CisgICAgICAgIGlmICghbV9sZW5ndGgpCisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKCFtX3N0cmluZy5pc051bGwoKSkKKyAg
ICAgICAgICAgIHJldHVybiBtX3N0cmluZy5jaGFyYWN0ZXJzMTYoKTsKKyAgICAgICAgQVNTRVJU
KG1fYnVmZmVyKTsKKyAgICAgICAgcmV0dXJuIG1fYnVmZmVyLT5jaGFyYWN0ZXJzMTYoKTsKKyAg
ICB9CisgICAgCiAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMoKSBjb25zdAogICAgIHsKICAg
ICAgICAgaWYgKCFtX2xlbmd0aCkKQEAgLTEyMiw3ICsxNjAsNyBAQCBwdWJsaWM6CiAgICAgICAg
IEFTU0VSVChtX2J1ZmZlcik7CiAgICAgICAgIHJldHVybiBtX2J1ZmZlci0+Y2hhcmFjdGVycygp
OwogICAgIH0KLQorICAgIAogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKICAgICAgICAgbV9sZW5n
dGggPSAwOwpAQCAtMTMxLDE3ICsxNjksNDMgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToK
KyAgICB2b2lkIGFsbG9jYXRlQnVmZmVyKGNvbnN0IExDaGFyKiBjdXJyZW50Q2hhcmFjdGVycywg
dW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpOwogICAgIHZvaWQgYWxsb2NhdGVCdWZmZXIoY29uc3Qg
VUNoYXIqIGN1cnJlbnRDaGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1aXJlZExlbmd0aCk7CisgICAg
dm9pZCBhbGxvY2F0ZUJ1ZmZlclVwQ29udmVydChjb25zdCBMQ2hhciogY3VycmVudENoYXJhY3Rl
cnMsIHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hh
clR5cGU+CiAgICAgdm9pZCByZWFsbG9jYXRlQnVmZmVyKHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3Ro
KTsKLSAgICBVQ2hhciogYXBwZW5kVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KKyAgICBBTFdBWVNfSU5MSU5FIENoYXJUeXBl
KiBhcHBlbmRVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIENoYXJUeXBlPgorICAgIENoYXJUeXBlKiBhcHBlbmRVbmluaXRpYWxpemVkU2xvdyh1
bnNpZ25lZCBsZW5ndGgpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KKyAgICBB
TFdBWVNfSU5MSU5FIENoYXJUeXBlICogZ2V0QnVmZmVyQ2hhcmFjdGVycygpOwogICAgIHZvaWQg
cmVpZnlTdHJpbmcoKTsKIAogICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwogICAgIFN0cmluZyBtX3N0
cmluZzsKICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbV9idWZmZXI7Ci0gICAgVUNoYXIqIG1fYnVm
ZmVyQ2hhcmFjdGVyczsKKyAgICBib29sIG1faXM4Qml0OworICAgIHVuaW9uIHsKKyAgICAgICAg
TENoYXIqIG1fYnVmZmVyQ2hhcmFjdGVyczg7CisgICAgICAgIFVDaGFyKiBtX2J1ZmZlckNoYXJh
Y3RlcnMxNjsKKyAgICB9OwogfTsKIAordGVtcGxhdGUgPD4KK0FMV0FZU19JTkxJTkUgTENoYXIq
IFN0cmluZ0J1aWxkZXI6OmdldEJ1ZmZlckNoYXJhY3RlcnM8TENoYXI+KCkKK3sKKyAgICBBU1NF
UlQobV9pczhCaXQpOworICAgIHJldHVybiBtX2J1ZmZlckNoYXJhY3RlcnM4OworfQorCit0ZW1w
bGF0ZSA8PgorQUxXQVlTX0lOTElORSBVQ2hhciogU3RyaW5nQnVpbGRlcjo6Z2V0QnVmZmVyQ2hh
cmFjdGVyczxVQ2hhcj4oKQoreworICAgIEFTU0VSVCghbV9pczhCaXQpOworICAgIHJldHVybiBt
X2J1ZmZlckNoYXJhY3RlcnMxNjsKK30gICAgCisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2lu
ZyBXVEY6OlN0cmluZ0J1aWxkZXI7Cg==
</data>
<flag name="review"
          id="117223"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>