<?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>121671</bug_id>
          
          <creation_ts>2013-09-20 03:44:28 -0700</creation_ts>
          <short_desc>Make RenderObject::parent() return RenderElement</short_desc>
          <delta_ts>2013-09-20 05:28:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>webkit-ews</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>931256</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-20 03:44:28 -0700</bug_when>
    <thetext>It always is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931259</commentid>
    <comment_count>1</comment_count>
      <attachid>212147</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-20 03:55:30 -0700</bug_when>
    <thetext>Created attachment 212147
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931261</commentid>
    <comment_count>2</comment_count>
      <attachid>212147</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-09-20 04:02:57 -0700</bug_when>
    <thetext>Comment on attachment 212147
patch

Attachment 212147 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/1820199</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931262</commentid>
    <comment_count>3</comment_count>
      <attachid>212147</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-09-20 04:04:36 -0700</bug_when>
    <thetext>Comment on attachment 212147
patch

Attachment 212147 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/1865109</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931263</commentid>
    <comment_count>4</comment_count>
      <attachid>212147</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-09-20 04:13:10 -0700</bug_when>
    <thetext>Comment on attachment 212147
patch

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

&gt; Source/WebCore/rendering/RenderBlock.cpp:1791
&gt; +    RenderBlock* nextSiblingBlock = toRenderBlock(curr);

Why not make it a RenderBlock&amp;

&gt; Source/WebCore/rendering/RenderElement.cpp:142
&gt; +    RenderObjectChildList* children = this-&gt;children();
&gt; +    ASSERT(children);
&gt; +    if (!children)
&gt; +        return;

Wish &apos;children&apos; would be a RenderObjectChildList&amp; after the null check.

&gt; Source/WebCore/rendering/RenderElement.cpp:196
&gt; +    RenderObjectChildList* children = this-&gt;children();
&gt; +    ASSERT(children);
&gt; +    if (!children)
&gt; +        return;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931266</commentid>
    <comment_count>5</comment_count>
      <attachid>212148</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-20 04:29:35 -0700</bug_when>
    <thetext>Created attachment 212148
another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931269</commentid>
    <comment_count>6</comment_count>
      <attachid>212148</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-09-20 04:35:28 -0700</bug_when>
    <thetext>Comment on attachment 212148
another

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931285</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-20 05:28:59 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/156151</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212147</attachid>
            <date>2013-09-20 03:55:30 -0700</date>
            <delta_ts>2013-09-20 04:29:35 -0700</delta_ts>
            <desc>patch</desc>
            <filename>renderelement-parent-2.patch</filename>
            <type>text/plain</type>
            <size>43808</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjE0NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEzLTA5LTIwICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIFJlbmRlck9iamVjdDo6
cGFyZW50KCkgcmV0dXJuIFJlbmRlckVsZW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTY3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgUmVuZGVyT2JqZWN0OjpwYXJlbnQoKSByZXR1cm4g
UmVuZGVyRWxlbWVudCBhbmQgYWRvcHQgZXZlcnl3aGVyZS4KKyAgICAgICAgTW92ZWQgYWRkQ2hp
bGQvcmVtb3ZlQ2hpbGQgZnJvbSBSZW5kZXJPYmplY3QgdG8gcmVuZGVyRWxlbWVudC4KKyAgICAg
ICAgVW5pbmxpbmVkIGEgZmV3IGJpZyBSZW5kZXJPYmplY3QgZnVuY3Rpb25zLgorICAgICAgICBS
ZW5hbWVkIFJlbmRlck9iamVjdDo6cmVtb3ZlKCkgLT4gUmVuZGVyT2JqZWN0OjpyZW1vdmVGcm9t
UGFyZW50KCkKKwogMjAxMy0wOS0yMCAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+
CiAKICAgICAgICAgTWFrZSBjcmVhdGVSZW5kZXJlcigpIHJldHVybiBSZW5kZXJFbGVtZW50Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkocmV2aXNpb24gMTU2MTQz
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDcgKzQ2LDcgQEAKICNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVk
ZSAiUG9zaXRpb25JdGVyYXRvci5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgogI2luY2x1ZGUgIlNoYWRv
d1Jvb3QuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JMYXllclRy
ZWVBZ2VudC5jcHAJKHJldmlzaW9uIDE1NjE0MykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MCwxMSAr
MTcwLDExIEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkxheWVyVHJlZTo6TGF5ZXIKICAgICBp
ZiAocmVuZGVyZXItPmlzUmVuZGVyVmlldygpKQogICAgICAgICBub2RlID0gJnJlbmRlcmVyLT5k
b2N1bWVudCgpOwogICAgIGVsc2UgaWYgKGlzUmVmbGVjdGlvbiAmJiBpc0dlbmVyYXRlZCkKLSAg
ICAgICAgbm9kZSA9IHJlbmRlcmVyLT5wYXJlbnQoKS0+Z2VuZXJhdGluZ05vZGUoKTsKKyAgICAg
ICAgbm9kZSA9IHJlbmRlcmVyLT5wYXJlbnQoKS0+Z2VuZXJhdGluZ0VsZW1lbnQoKTsKICAgICBl
bHNlIGlmIChpc0dlbmVyYXRlZCkKICAgICAgICAgbm9kZSA9IHJlbmRlcmVyLT5nZW5lcmF0aW5n
Tm9kZSgpOwogICAgIGVsc2UgaWYgKGlzUmVmbGVjdGlvbiB8fCBpc0Fub255bW91cykKLSAgICAg
ICAgbm9kZSA9IHJlbmRlcmVyLT5wYXJlbnQoKS0+bm9kZSgpOworICAgICAgICBub2RlID0gcmVu
ZGVyZXItPnBhcmVudCgpLT5lbGVtZW50KCk7CiAKICAgICAvLyBCYXNpYyBzZXQgb2YgcHJvcGVy
dGllcy4KICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkxheWVyVHJlZTo6TGF5ZXI+IGxheWVyT2Jq
ZWN0ID0gVHlwZUJ1aWxkZXI6OkxheWVyVHJlZTo6TGF5ZXI6OmNyZWF0ZSgpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDE1NjE0MykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc1Niw3ICs3NTYsNyBAQCBSZW5kZXJCbG9jayogUmVuZGVyQmxvY2s6OmNvbHVtbnNCbG9j
a0ZvCiB2b2lkIFJlbmRlckJsb2NrOjphZGRDaGlsZElnbm9yaW5nQW5vbnltb3VzQ29sdW1uQmxv
Y2tzKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7
CiAgICAgaWYgKGJlZm9yZUNoaWxkICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSAhPSB0aGlzKSB7
Ci0gICAgICAgIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGRDb250YWluZXIgPSBiZWZvcmVDaGls
ZC0+cGFyZW50KCk7CisgICAgICAgIFJlbmRlckVsZW1lbnQqIGJlZm9yZUNoaWxkQ29udGFpbmVy
ID0gYmVmb3JlQ2hpbGQtPnBhcmVudCgpOwogICAgICAgICB3aGlsZSAoYmVmb3JlQ2hpbGRDb250
YWluZXItPnBhcmVudCgpICE9IHRoaXMpCiAgICAgICAgICAgICBiZWZvcmVDaGlsZENvbnRhaW5l
ciA9IGJlZm9yZUNoaWxkQ29udGFpbmVyLT5wYXJlbnQoKTsKICAgICAgICAgQVNTRVJUKGJlZm9y
ZUNoaWxkQ29udGFpbmVyKTsKQEAgLTc2NCw3ICs3NjQsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjph
ZGRDaGlsZElnbm9yaW5nQW5vbnltCiAgICAgICAgIGlmIChiZWZvcmVDaGlsZENvbnRhaW5lci0+
aXNBbm9ueW1vdXMoKSkgewogICAgICAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3RlZCBiZWZvcmVD
aGlsZCBpcyBub3Qgb25lIG9mIG91ciBjaGlsZHJlbiwgdGhlbiB0aGlzIGlzIGJlY2F1c2UKICAg
ICAgICAgICAgIC8vIHRoZXJlIGlzIGFuIGFub255bW91cyBjb250YWluZXIgd2l0aGluIHRoaXMg
b2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGJlZm9yZUNoaWxkLgotICAgICAgICAgICAgUmVuZGVy
T2JqZWN0KiBiZWZvcmVDaGlsZEFub255bW91c0NvbnRhaW5lciA9IGJlZm9yZUNoaWxkQ29udGFp
bmVyOworICAgICAgICAgICAgUmVuZGVyRWxlbWVudCogYmVmb3JlQ2hpbGRBbm9ueW1vdXNDb250
YWluZXIgPSBiZWZvcmVDaGlsZENvbnRhaW5lcjsKICAgICAgICAgICAgIGlmIChiZWZvcmVDaGls
ZEFub255bW91c0NvbnRhaW5lci0+aXNBbm9ueW1vdXNCbG9jaygpCiAjaWYgRU5BQkxFKEZVTExT
Q1JFRU5fQVBJKQogICAgICAgICAgICAgICAgIC8vIEZ1bGwgc2NyZWVuIHJlbmRlcmVycyBhbmQg
ZnVsbCBzY3JlZW4gcGxhY2Vob2xkZXJzIGFjdCBhcyBhbm9ueW1vdXMgYmxvY2tzLCBub3QgdGFi
bGVzOgpAQCAtODYxLDcgKzg2MSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZENoaWxkSWdub3Jp
bmdBbm9ueW0KICAgICAgICAgUmVuZGVyT2JqZWN0KiBhZnRlckNoaWxkID0gYmVmb3JlQ2hpbGQg
PyBiZWZvcmVDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgOiBsYXN0Q2hpbGQoKTsKIAogICAgICAg
ICBpZiAoYWZ0ZXJDaGlsZCAmJiBhZnRlckNoaWxkLT5pc0Fub255bW91c0Jsb2NrKCkpIHsKLSAg
ICAgICAgICAgIGFmdGVyQ2hpbGQtPmFkZENoaWxkKG5ld0NoaWxkKTsKKyAgICAgICAgICAgIHRv
UmVuZGVyQmxvY2soYWZ0ZXJDaGlsZCktPmFkZENoaWxkKG5ld0NoaWxkKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogCkBAIC0xNzg4LDE1ICsxNzg4LDE2IEBAIHZvaWQgUmVuZGVy
QmxvY2s6Om1vdmVSdW5JblVuZGVyU2libGluZ0IKICAgICBpZiAoIWN1cnIgfHwgIWN1cnItPmlz
UmVuZGVyQmxvY2soKSB8fCAhY3Vyci0+Y2hpbGRyZW5JbmxpbmUoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKHRvUmVuZGVyQmxvY2soY3VyciktPmJlaW5nRGVzdHJveWVkKCkpCisgICAg
UmVuZGVyQmxvY2sqIG5leHRTaWJsaW5nQmxvY2sgPSB0b1JlbmRlckJsb2NrKGN1cnIpOworICAg
IGlmIChuZXh0U2libGluZ0Jsb2NrLT5iZWluZ0Rlc3Ryb3llZCgpKQogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBQZXIgQ1NTMywgIkEgcnVuLWluIGNhbm5vdCBydW4gaW4gdG8gYSBibG9jayB0
aGF0IGFscmVhZHkgc3RhcnRzIHdpdGggYQogICAgIC8vIHJ1bi1pbiBvciB0aGF0IGl0c2VsZiBp
cyBhIHJ1bi1pbiIuCi0gICAgaWYgKGN1cnItPmlzUnVuSW4oKSB8fCAoY3Vyci0+Zmlyc3RDaGls
ZCgpICYmIGN1cnItPmZpcnN0Q2hpbGQoKS0+aXNSdW5JbigpKSkKKyAgICBpZiAobmV4dFNpYmxp
bmdCbG9jay0+aXNSdW5JbigpIHx8IChuZXh0U2libGluZ0Jsb2NrLT5maXJzdENoaWxkKCkgJiYg
bmV4dFNpYmxpbmdCbG9jay0+Zmlyc3RDaGlsZCgpLT5pc1J1bkluKCkpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAoY3Vyci0+aXNBbm9ueW1vdXMoKSB8fCBjdXJyLT5pc0Zsb2F0aW5nT3JP
dXRPZkZsb3dQb3NpdGlvbmVkKCkpCisgICAgaWYgKG5leHRTaWJsaW5nQmxvY2stPmlzQW5vbnlt
b3VzKCkgfHwgbmV4dFNpYmxpbmdCbG9jay0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25l
ZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogb2xkUnVu
SW4gPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHJ1bkluKTsKQEAgLTE4MDYsMTAgKzE4MDcsMTAg
QEAgdm9pZCBSZW5kZXJCbG9jazo6bW92ZVJ1bkluVW5kZXJTaWJsaW5nQgogICAgIC8vIE5vdyBp
bnNlcnQgdGhlIG5ldyBjaGlsZCB1bmRlciB8Y3VycnwgYmxvY2suIFVzZSBhZGRDaGlsZCBpbnN0
ZWFkIG9mIGluc2VydENoaWxkTm9kZQogICAgIC8vIHNpbmNlIGl0IGhhbmRsZXMgY29ycmVjdCBw
bGFjZW1lbnQgb2YgdGhlIGNoaWxkcmVuLCBlc3BlY2lhbGx5IHdoZXJlIHdlIGNhbm5vdCBpbnNl
cnQKICAgICAvLyBhbnl0aGluZyBiZWZvcmUgdGhlIGZpcnN0IGNoaWxkLiBlLmcuIGRldGFpbHMg
dGFnLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4MjI4Lgot
ICAgIGN1cnItPmFkZENoaWxkKG5ld1J1bkluLCBjdXJyLT5maXJzdENoaWxkKCkpOworICAgIG5l
eHRTaWJsaW5nQmxvY2stPmFkZENoaWxkKG5ld1J1bkluLCBuZXh0U2libGluZ0Jsb2NrLT5maXJz
dENoaWxkKCkpOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgfHRoaXN8IGdldCBhIGxheW91dCBz
aW5jZSBpdHMgcnVuLWluIGNoaWxkIG1vdmVkLgotICAgIGN1cnItPnNldE5lZWRzTGF5b3V0QW5k
UHJlZldpZHRoc1JlY2FsYygpOworICAgIG5leHRTaWJsaW5nQmxvY2stPnNldE5lZWRzTGF5b3V0
QW5kUHJlZldpZHRoc1JlY2FsYygpOwogfQogCiBib29sIFJlbmRlckJsb2NrOjpydW5JbklzUGxh
Y2VkSW50b1NpYmxpbmdCbG9jayhSZW5kZXJPYmplY3QqIHJ1bkluKQpAQCAtNTgwNCw4ICs1ODA1
LDggQEAgc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGZpbmRGaXJzdExldAogCiB2b2lkIFJl
bmRlckJsb2NrOjp1cGRhdGVGaXJzdExldHRlclN0eWxlKFJlbmRlck9iamVjdCogZmlyc3RMZXR0
ZXJCbG9jaywgUmVuZGVyT2JqZWN0KiBjdXJyZW50Q2hpbGQpCiB7Ci0gICAgUmVuZGVyT2JqZWN0
KiBmaXJzdExldHRlciA9IGN1cnJlbnRDaGlsZC0+cGFyZW50KCk7Ci0gICAgUmVuZGVyT2JqZWN0
KiBmaXJzdExldHRlckNvbnRhaW5lciA9IGZpcnN0TGV0dGVyLT5wYXJlbnQoKTsKKyAgICBSZW5k
ZXJFbGVtZW50KiBmaXJzdExldHRlciA9IGN1cnJlbnRDaGlsZC0+cGFyZW50KCk7CisgICAgUmVu
ZGVyRWxlbWVudCogZmlyc3RMZXR0ZXJDb250YWluZXIgPSBmaXJzdExldHRlci0+cGFyZW50KCk7
CiAgICAgUmVuZGVyU3R5bGUqIHBzZXVkb1N0eWxlID0gc3R5bGVGb3JGaXJzdExldHRlcihmaXJz
dExldHRlckJsb2NrLCBmaXJzdExldHRlckNvbnRhaW5lcik7CiAgICAgQVNTRVJUKGZpcnN0TGV0
dGVyLT5pc0Zsb2F0aW5nKCkgfHwgZmlyc3RMZXR0ZXItPmlzSW5saW5lKCkpOwogCkBAIC01ODUx
LDkgKzU4NTIsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVGaXJzdExldHRlclN0eWxlCiAK
IHZvaWQgUmVuZGVyQmxvY2s6OmNyZWF0ZUZpcnN0TGV0dGVyUmVuZGVyZXIoUmVuZGVyT2JqZWN0
KiBmaXJzdExldHRlckJsb2NrLCBSZW5kZXJUZXh0KiBjdXJyZW50VGV4dENoaWxkKQogewotICAg
IFJlbmRlck9iamVjdCogZmlyc3RMZXR0ZXJDb250YWluZXIgPSBjdXJyZW50VGV4dENoaWxkLT5w
YXJlbnQoKTsKKyAgICBSZW5kZXJFbGVtZW50KiBmaXJzdExldHRlckNvbnRhaW5lciA9IGN1cnJl
bnRUZXh0Q2hpbGQtPnBhcmVudCgpOwogICAgIFJlbmRlclN0eWxlKiBwc2V1ZG9TdHlsZSA9IHN0
eWxlRm9yRmlyc3RMZXR0ZXIoZmlyc3RMZXR0ZXJCbG9jaywgZmlyc3RMZXR0ZXJDb250YWluZXIp
OwotICAgIFJlbmRlck9iamVjdCogZmlyc3RMZXR0ZXIgPSAwOworICAgIFJlbmRlckJveE1vZGVs
T2JqZWN0KiBmaXJzdExldHRlciA9IDA7CiAgICAgaWYgKHBzZXVkb1N0eWxlLT5kaXNwbGF5KCkg
PT0gSU5MSU5FKQogICAgICAgICBmaXJzdExldHRlciA9IFJlbmRlcklubGluZTo6Y3JlYXRlQW5v
bnltb3VzKGRvY3VtZW50KCkpOwogICAgIGVsc2UKQEAgLTU5MDQsNyArNTkwNSw3IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmNyZWF0ZUZpcnN0TGV0dGVyUmVuZGUKICAgICAgICAgZmlyc3RMZXR0ZXJD
b250YWluZXItPmFkZENoaWxkKHJlbWFpbmluZ1RleHQsIGN1cnJlbnRUZXh0Q2hpbGQpOwogICAg
ICAgICBmaXJzdExldHRlckNvbnRhaW5lci0+cmVtb3ZlQ2hpbGQoY3VycmVudFRleHRDaGlsZCk7
CiAgICAgICAgIHJlbWFpbmluZ1RleHQtPnNldEZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyKTsKLSAg
ICAgICAgdG9SZW5kZXJCb3hNb2RlbE9iamVjdChmaXJzdExldHRlciktPnNldEZpcnN0TGV0dGVy
UmVtYWluaW5nVGV4dChyZW1haW5pbmdUZXh0KTsKKyAgICAgICAgZmlyc3RMZXR0ZXItPnNldEZp
cnN0TGV0dGVyUmVtYWluaW5nVGV4dChyZW1haW5pbmdUZXh0KTsKICAgICAgICAgCiAgICAgICAg
IC8vIGNvbnN0cnVjdCB0ZXh0IGZyYWdtZW50IGZvciB0aGUgZmlyc3QgbGV0dGVyCiAgICAgICAg
IFJlbmRlclRleHRGcmFnbWVudCogbGV0dGVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckNvbWJpbmVUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmgJKHJldmlzaW9uIDE1NjE0MykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Miw2ICsyMiw3IEBACiAjZGVmaW5lIFJlbmRlckNvbWJpbmVUZXh0X2gKIAogI2luY2x1ZGUgIkZv
bnQuaCIKKyNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5o
IgogI2luY2x1ZGUgIlRleHQuaCIKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJFbGVtZW50LmNwcAkocmV2aXNpb24gMTU2MTQzKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBA
CiAjaW5jbHVkZSAiUmVuZGVyR3JpZC5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5j
bHVkZSAiUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJM
YXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVs
dGlDb2x1bW5CbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgpAQCAtNDAsNiArNDEs
OCBAQAogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxl
Q29sLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVSb3cuaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0
LmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTEyNyw4ICsxMzAsNzMgQEAgUmVuZGVyRWxlbWVudCogUmVuZGVyRWxlbWVudDo6Y3Jl
YXRlRm9yKAogICAgIGNhc2UgSU5MSU5FX0dSSUQ6CiAgICAgICAgIHJldHVybiBuZXcgKGFyZW5h
KSBSZW5kZXJHcmlkKGVsZW1lbnQpOwogICAgIH0KLQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIHJldHVybiBudWxscHRyOwogfQogCit2b2lkIFJlbmRlckVsZW1lbnQ6OmFkZENoaWxk
KFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCit7Cisg
ICAgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7Cisg
ICAgQVNTRVJUKGNoaWxkcmVuKTsKKyAgICBpZiAoIWNoaWxkcmVuKQorICAgICAgICByZXR1cm47
CisKKyAgICBib29sIG5lZWRzVGFibGUgPSBmYWxzZTsKKworICAgIGlmIChuZXdDaGlsZC0+aXNS
ZW5kZXJUYWJsZUNvbCgpKSB7CisgICAgICAgIFJlbmRlclRhYmxlQ29sKiBuZXdUYWJsZUNvbHVt
biA9IHRvUmVuZGVyVGFibGVDb2wobmV3Q2hpbGQpOworICAgICAgICBib29sIGlzQ29sdW1uSW5D
b2x1bW5Hcm91cCA9IG5ld1RhYmxlQ29sdW1uLT5pc1RhYmxlQ29sdW1uKCkgJiYgaXNSZW5kZXJU
YWJsZUNvbCgpOworICAgICAgICBuZWVkc1RhYmxlID0gIWlzVGFibGUoKSAmJiAhaXNDb2x1bW5J
bkNvbHVtbkdyb3VwOworICAgIH0gZWxzZSBpZiAobmV3Q2hpbGQtPmlzVGFibGVDYXB0aW9uKCkp
CisgICAgICAgIG5lZWRzVGFibGUgPSAhaXNUYWJsZSgpOworICAgIGVsc2UgaWYgKG5ld0NoaWxk
LT5pc1RhYmxlU2VjdGlvbigpKQorICAgICAgICBuZWVkc1RhYmxlID0gIWlzVGFibGUoKTsKKyAg
ICBlbHNlIGlmIChuZXdDaGlsZC0+aXNUYWJsZVJvdygpKQorICAgICAgICBuZWVkc1RhYmxlID0g
IWlzVGFibGVTZWN0aW9uKCk7CisgICAgZWxzZSBpZiAobmV3Q2hpbGQtPmlzVGFibGVDZWxsKCkp
CisgICAgICAgIG5lZWRzVGFibGUgPSAhaXNUYWJsZVJvdygpOworCisgICAgaWYgKG5lZWRzVGFi
bGUpIHsKKyAgICAgICAgUmVuZGVyVGFibGUqIHRhYmxlOworICAgICAgICBSZW5kZXJPYmplY3Qq
IGFmdGVyQ2hpbGQgPSBiZWZvcmVDaGlsZCA/IGJlZm9yZUNoaWxkLT5wcmV2aW91c1NpYmxpbmco
KSA6IGNoaWxkcmVuLT5sYXN0Q2hpbGQoKTsKKyAgICAgICAgaWYgKGFmdGVyQ2hpbGQgJiYgYWZ0
ZXJDaGlsZC0+aXNBbm9ueW1vdXMoKSAmJiBhZnRlckNoaWxkLT5pc1RhYmxlKCkgJiYgIWFmdGVy
Q2hpbGQtPmlzQmVmb3JlQ29udGVudCgpKQorICAgICAgICAgICAgdGFibGUgPSB0b1JlbmRlclRh
YmxlKGFmdGVyQ2hpbGQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRhYmxlID0gUmVu
ZGVyVGFibGU6OmNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcih0aGlzKTsKKyAgICAg
ICAgICAgIGFkZENoaWxkKHRhYmxlLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIH0KKyAgICAgICAg
dGFibGUtPmFkZENoaWxkKG5ld0NoaWxkKTsKKyAgICB9IGVsc2UKKyAgICAgICAgY2hpbGRyZW4t
Pmluc2VydENoaWxkTm9kZSh0aGlzLCBuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOworCisgICAgaWYg
KG5ld0NoaWxkLT5pc1RleHQoKSAmJiBuZXdDaGlsZC0+c3R5bGUoKS0+dGV4dFRyYW5zZm9ybSgp
ID09IENBUElUQUxJWkUpCisgICAgICAgIHRvUmVuZGVyVGV4dChuZXdDaGlsZCktPnRyYW5zZm9y
bVRleHQoKTsKKworICAgIC8vIFNWRyBjcmVhdGVzIHJlbmRlcmVycyBmb3IgPGcgZGlzcGxheT0i
bm9uZSI+LCBhcyBTVkcgcmVxdWlyZXMgY2hpbGRyZW4gb2YgaGlkZGVuCisgICAgLy8gPGc+cyB0
byBoYXZlIHJlbmRlcmVycyAtIGF0IGxlYXN0IHRoYXQncyBob3cgb3VyIGltcGxlbWVudGF0aW9u
IHdvcmtzLiBDb25zaWRlcjoKKyAgICAvLyA8ZyBkaXNwbGF5PSJub25lIj48Zm9yZWlnbk9iamVj
dD48Ym9keSBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZlIj5GT08uLi4KKyAgICAvLyAtIHJlcXVp
cmVzTGF5ZXIoKSB3b3VsZCByZXR1cm4gdHJ1ZSBmb3IgdGhlIDxib2R5PiwgY3JlYXRpbmcgYSBu
ZXcgUmVuZGVyTGF5ZXIKKyAgICAvLyAtIHdoZW4gdGhlIGRvY3VtZW50IGlzIHBhaW50ZWQsIGJv
dGggbGF5ZXJzIGFyZSBwYWludGVkLiBUaGUgPGJvZHk+IGxheWVyIGRvZXNuJ3QKKyAgICAvLyAg
IGtub3cgdGhhdCBpdCdzIGluc2lkZSBhICJoaWRkZW4gU1ZHIHN1YnRyZWUiLCBhbmQgdGh1cyBw
YWludHMsIGV2ZW4gaWYgaXQgc2hvdWxkbid0LgorICAgIC8vIFRvIGF2b2lkIHRoZSBwcm9ibGVt
IGFsbHRvZ2V0aGVyLCBkZXRlY3QgZWFybHkgaWYgd2UncmUgaW5zaWRlIGEgaGlkZGVuIFNWRyBz
dWJ0cmVlCisgICAgLy8gYW5kIHN0b3AgY3JlYXRpbmcgbGF5ZXJzIGF0IGFsbCBmb3IgdGhlc2Ug
Y2FzZXMgLSB0aGV5J3JlIG5vdCB1c2VkIGFueXdheXMuCisgICAgaWYgKG5ld0NoaWxkLT5oYXNM
YXllcigpICYmICFsYXllckNyZWF0aW9uQWxsb3dlZEZvclN1YnRyZWUoKSkKKyAgICAgICAgdG9S
ZW5kZXJMYXllck1vZGVsT2JqZWN0KG5ld0NoaWxkKS0+bGF5ZXIoKS0+cmVtb3ZlT25seVRoaXNM
YXllcigpOworCisjaWYgRU5BQkxFKFNWRykKKyAgICBTVkdSZW5kZXJTdXBwb3J0OjpjaGlsZEFk
ZGVkKHRoaXMsIG5ld0NoaWxkKTsKKyNlbmRpZgorfQorCit2b2lkIFJlbmRlckVsZW1lbnQ6OnJl
bW92ZUNoaWxkKFJlbmRlck9iamVjdCogb2xkQ2hpbGQpCit7CisgICAgUmVuZGVyT2JqZWN0Q2hp
bGRMaXN0KiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7CisgICAgQVNTRVJUKGNoaWxkcmVu
KTsKKyAgICBpZiAoIWNoaWxkcmVuKQorICAgICAgICByZXR1cm47CisKKyAgICBjaGlsZHJlbi0+
cmVtb3ZlQ2hpbGROb2RlKHRoaXMsIG9sZENoaWxkKTsKK30KKworCiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgJKHJldmlzaW9uIDE1NjE0NCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM4LDYgKzM4LDExIEBAIHB1YmxpYzoKICAgICBFbGVtZW50KiBub25Qc2V1ZG9FbGVtZW50KCkg
Y29uc3QgeyByZXR1cm4gdG9FbGVtZW50KFJlbmRlck9iamVjdDo6bm9uUHNldWRvTm9kZSgpKTsg
fQogICAgIEVsZW1lbnQqIGdlbmVyYXRpbmdFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdG9FbGVt
ZW50KFJlbmRlck9iamVjdDo6Z2VuZXJhdGluZ05vZGUoKSk7IH0KIAorICAgIHZpcnR1YWwgYm9v
bCBpc0NoaWxkQWxsb3dlZChSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSopIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdD
aGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApOworICAgIHZpcnR1YWwgdm9pZCBh
ZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRl
ck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKSB7IHJldHVybiBhZGRDaGlsZChuZXdDaGlsZCwgYmVm
b3JlQ2hpbGQpOyB9CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCop
OworCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgUmVuZGVyRWxlbWVudChFbGVtZW50Kik7CiAK
QEAgLTQ1LDYgKzUwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIG5vZGUoKSBjb25zdCBXVEZfREVM
RVRFRF9GVU5DVElPTjsKICAgICB2b2lkIG5vblBzZXVkb05vZGUoKSBjb25zdCBXVEZfREVMRVRF
RF9GVU5DVElPTjsKICAgICB2b2lkIGdlbmVyYXRpbmdOb2RlKCkgY29uc3QgV1RGX0RFTEVURURf
RlVOQ1RJT047CisgICAgdm9pZCBpc1RleHQoKSBjb25zdCBXVEZfREVMRVRFRF9GVU5DVElPTjsK
IH07CiAKIGlubGluZSBSZW5kZXJFbGVtZW50JiB0b1JlbmRlckVsZW1lbnQoUmVuZGVyT2JqZWN0
JiBvYmplY3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVl
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxT
Y3JlZW4uY3BwCShyZXZpc2lvbiAxNTYxNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRnVsbFNjcmVlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgUmVu
ZGVyRnVsbFNjcmVlbiogUmVuZGVyRnVsbFNjcmVlbjo6Y3JlYQogdm9pZCBSZW5kZXJGdWxsU2Ny
ZWVuOjp3aWxsQmVEZXN0cm95ZWQoKQogewogICAgIGlmIChtX3BsYWNlaG9sZGVyKSB7Ci0gICAg
ICAgIHJlbW92ZSgpOworICAgICAgICByZW1vdmVGcm9tUGFyZW50KCk7CiAgICAgICAgIGlmICgh
bV9wbGFjZWhvbGRlci0+YmVpbmdEZXN0cm95ZWQoKSkKICAgICAgICAgICAgIG1fcGxhY2Vob2xk
ZXItPmRlc3Ryb3koKTsKICAgICAgICAgQVNTRVJUKCFtX3BsYWNlaG9sZGVyKTsKQEAgLTExNCw3
ICsxMTQsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gY3JlYXRlRnVsCiAgICAg
cmV0dXJuIGZ1bGxzY3JlZW5TdHlsZS5yZWxlYXNlKCk7CiB9CiAKLVJlbmRlck9iamVjdCogUmVu
ZGVyRnVsbFNjcmVlbjo6d3JhcFJlbmRlcmVyKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJP
YmplY3QqIHBhcmVudCwgRG9jdW1lbnQqIGRvY3VtZW50KQorUmVuZGVyRnVsbFNjcmVlbiogUmVu
ZGVyRnVsbFNjcmVlbjo6d3JhcFJlbmRlcmVyKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJF
bGVtZW50KiBwYXJlbnQsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAgICBSZW5kZXJGdWxsU2Ny
ZWVuKiBmdWxsc2NyZWVuUmVuZGVyZXIgPSBSZW5kZXJGdWxsU2NyZWVuOjpjcmVhdGVBbm9ueW1v
dXMoKmRvY3VtZW50KTsKICAgICBmdWxsc2NyZWVuUmVuZGVyZXItPnNldFN0eWxlKGNyZWF0ZUZ1
bGxTY3JlZW5TdHlsZSgpKTsKQEAgLTEyNSw3ICsxMjUsNyBAQCBSZW5kZXJPYmplY3QqIFJlbmRl
ckZ1bGxTY3JlZW46OndyYXBSZW5kCiAgICAgaWYgKG9iamVjdCkgewogICAgICAgICAvLyB8b2Jq
ZWN0LT5wYXJlbnQoKXwgY2FuIGJlIG51bGwgaWYgdGhlIG9iamVjdCBpcyBub3QgeWV0IGF0dGFj
aGVkCiAgICAgICAgIC8vIHRvIHxwYXJlbnR8LgotICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiBw
YXJlbnQgPSBvYmplY3QtPnBhcmVudCgpKSB7CisgICAgICAgIGlmIChSZW5kZXJFbGVtZW50KiBw
YXJlbnQgPSBvYmplY3QtPnBhcmVudCgpKSB7CiAgICAgICAgICAgICBSZW5kZXJCbG9jayogY29u
dGFpbmluZ0Jsb2NrID0gb2JqZWN0LT5jb250YWluaW5nQmxvY2soKTsKICAgICAgICAgICAgIEFT
U0VSVChjb250YWluaW5nQmxvY2spOwogICAgICAgICAgICAgLy8gU2luY2Ugd2UgYXJlIG1vdmlu
ZyB0aGUgfG9iamVjdHwgdG8gYSBuZXcgcGFyZW50IHxmdWxsc2NyZWVuUmVuZGVyZXJ8LApAQCAt
MTMzLDcgKzEzMyw3IEBAIFJlbmRlck9iamVjdCogUmVuZGVyRnVsbFNjcmVlbjo6d3JhcFJlbmQK
ICAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9jay0+ZGVsZXRlTGluZUJveFRyZWUoKTsKIAogICAg
ICAgICAgICAgcGFyZW50LT5hZGRDaGlsZChmdWxsc2NyZWVuUmVuZGVyZXIsIG9iamVjdCk7Ci0g
ICAgICAgICAgICBvYmplY3QtPnJlbW92ZSgpOworICAgICAgICAgICAgb2JqZWN0LT5yZW1vdmVG
cm9tUGFyZW50KCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEFsd2F5cyBqdXN0IGRv
IGEgZnVsbCBsYXlvdXQgdG8gZW5zdXJlIHRoYXQgbGluZSBib3hlcyBnZXQgZGVsZXRlZCBwcm9w
ZXJseS4KICAgICAgICAgICAgIC8vIEJlY2F1c2Ugb2JqZWN0cyBtb3ZlZCBmcm9tIHxwYXJlbnR8
IHRvIHxmdWxsc2NyZWVuUmVuZGVyZXJ8LCB3ZSB3YW50IHRvCkBAIC0xNTgsMTQgKzE1OCwxNCBA
QCB2b2lkIFJlbmRlckZ1bGxTY3JlZW46OnVud3JhcFJlbmRlcmVyKCkKICAgICAgICAgICAgIC8v
IGx5aW5nIGFyb3VuZCBvbiB0aGUgY2hpbGQuCiAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzQm94
KCkpCiAgICAgICAgICAgICAgICAgdG9SZW5kZXJCb3goY2hpbGQpLT5jbGVhck92ZXJyaWRlU2l6
ZSgpOwotICAgICAgICAgICAgY2hpbGQtPnJlbW92ZSgpOworICAgICAgICAgICAgY2hpbGQtPnJl
bW92ZUZyb21QYXJlbnQoKTsKICAgICAgICAgICAgIHBhcmVudCgpLT5hZGRDaGlsZChjaGlsZCwg
dGhpcyk7CiAgICAgICAgICAgICBwYXJlbnQoKS0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhz
UmVjYWxjKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKHBsYWNlaG9sZGVyKCkpCi0gICAg
ICAgIHBsYWNlaG9sZGVyKCktPnJlbW92ZSgpOwotICAgIHJlbW92ZSgpOworICAgICAgICBwbGFj
ZWhvbGRlcigpLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgcmVtb3ZlRnJvbVBhcmVudCgpOwog
ICAgIGRvY3VtZW50KCkuc2V0RnVsbFNjcmVlblJlbmRlcmVyKDApOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmgJKHJldmlzaW9uIDE1NjE0
MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIHZvaWQgY3JlYXRlUGxhY2Vo
b2xkZXIoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4sIGNvbnN0IExheW91dFJlY3QmIGZyYW1lUmVj
dCk7CiAKIAotICAgIHN0YXRpYyBSZW5kZXJPYmplY3QqIHdyYXBSZW5kZXJlcihSZW5kZXJPYmpl
Y3QqLCBSZW5kZXJPYmplY3QqLCBEb2N1bWVudCopOworICAgIHN0YXRpYyBSZW5kZXJGdWxsU2Ny
ZWVuKiB3cmFwUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiwgUmVuZGVyRWxlbWVudCosIERvY3VtZW50
Kik7CiAgICAgdm9pZCB1bndyYXBSZW5kZXJlcigpOwogCiBwcml2YXRlOgpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCShyZXZpc2lvbiAxNTYxNDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTksNyArMjE5LDcgQEAgYm9vbCBSZW5kZXJMaXN0SXRlbTo6aXNFbXB0eSgp
IGNvbnN0CiAgICAgcmV0dXJuIGxhc3RDaGlsZCgpID09IG1fbWFya2VyOwogfQogCi1zdGF0aWMg
UmVuZGVyT2JqZWN0KiBnZXRQYXJlbnRPZkZpcnN0TGluZUJveChSZW5kZXJCbG9jayogY3Vyciwg
UmVuZGVyT2JqZWN0KiBtYXJrZXIpCitzdGF0aWMgUmVuZGVyQmxvY2sqIGdldFBhcmVudE9mRmly
c3RMaW5lQm94KFJlbmRlckJsb2NrKiBjdXJyLCBSZW5kZXJPYmplY3QqIG1hcmtlcikKIHsKICAg
ICBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGQgPSBjdXJyLT5maXJzdENoaWxkKCk7CiAgICAgaWYg
KCFmaXJzdENoaWxkKQpAQCAtMjQzLDcgKzI0Myw3IEBAIHN0YXRpYyBSZW5kZXJPYmplY3QqIGdl
dFBhcmVudE9mRmlyc3RMaW4KICAgICAgICAgICAgIChjdXJyQ2hpbGQtPm5vZGUoKS0+aGFzVGFn
TmFtZSh1bFRhZyl8fCBjdXJyQ2hpbGQtPm5vZGUoKS0+aGFzVGFnTmFtZShvbFRhZykpKQogICAg
ICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBsaW5lQm94ID0gZ2V0UGFy
ZW50T2ZGaXJzdExpbmVCb3godG9SZW5kZXJCbG9jayhjdXJyQ2hpbGQpLCBtYXJrZXIpOworICAg
ICAgICBSZW5kZXJCbG9jayogbGluZUJveCA9IGdldFBhcmVudE9mRmlyc3RMaW5lQm94KHRvUmVu
ZGVyQmxvY2soY3VyckNoaWxkKSwgbWFya2VyKTsKICAgICAgICAgaWYgKGxpbmVCb3gpCiAgICAg
ICAgICAgICByZXR1cm4gbGluZUJveDsKICAgICB9CkBAIC0yNzQsOCArMjc0LDggQEAgdm9pZCBS
ZW5kZXJMaXN0SXRlbTo6aW5zZXJ0T3JNb3ZlTWFya2VyUgogICAgIGlmICghbV9tYXJrZXIpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlck9iamVjdCogY3VycmVudFBhcmVudCA9IG1fbWFy
a2VyLT5wYXJlbnQoKTsKLSAgICBSZW5kZXJPYmplY3QqIG5ld1BhcmVudCA9IGdldFBhcmVudE9m
Rmlyc3RMaW5lQm94KHRoaXMsIG1fbWFya2VyKTsKKyAgICBSZW5kZXJFbGVtZW50KiBjdXJyZW50
UGFyZW50ID0gbV9tYXJrZXItPnBhcmVudCgpOworICAgIFJlbmRlckJsb2NrKiBuZXdQYXJlbnQg
PSBnZXRQYXJlbnRPZkZpcnN0TGluZUJveCh0aGlzLCBtX21hcmtlcik7CiAgICAgaWYgKCFuZXdQ
YXJlbnQpIHsKICAgICAgICAgLy8gSWYgdGhlIG1hcmtlciBpcyBjdXJyZW50bHkgY29udGFpbmVk
IGluc2lkZSBhbiBhbm9ueW1vdXMgYm94LAogICAgICAgICAvLyB0aGVuIHdlIGFyZSB0aGUgb25s
eSBpdGVtIGluIHRoYXQgYW5vbnltb3VzIGJveCAoc2luY2Ugbm8gbGluZSBib3gKQEAgLTI5MCw3
ICsyOTAsNyBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjppbnNlcnRPck1vdmVNYXJrZXJSCiAgICAg
ICAgIC8vIFJlbW92aW5nIGFuZCBhZGRpbmcgdGhlIG1hcmtlciBjYW4gdHJpZ2dlciByZXBhaW50
aW5nIGluCiAgICAgICAgIC8vIGNvbnRhaW5lcnMgb3RoZXIgdGhhbiBvdXJzZWx2ZXMsIHNvIHdl
IG5lZWQgdG8gZGlzYWJsZSBMYXlvdXRTdGF0ZS4KICAgICAgICAgTGF5b3V0U3RhdGVEaXNhYmxl
ciBsYXlvdXRTdGF0ZURpc2FibGVyKCZ2aWV3KCkpOwotICAgICAgICBtX21hcmtlci0+cmVtb3Zl
KCk7CisgICAgICAgIG1fbWFya2VyLT5yZW1vdmVGcm9tUGFyZW50KCk7CiAgICAgICAgIG5ld1Bh
cmVudC0+YWRkQ2hpbGQobV9tYXJrZXIsIGZpcnN0Tm9uTWFya2VyQ2hpbGQobmV3UGFyZW50KSk7
CiAgICAgICAgIG1fbWFya2VyLT51cGRhdGVNYXJnaW5zQW5kQ29udGVudCgpOwogICAgICAgICAv
LyBJZiBjdXJyZW50IHBhcmVudCBpcyBhbiBhbm9ueW1vdXMgYmxvY2sgdGhhdCBoYXMgbG9zdCBh
bGwgaXRzIGNoaWxkcmVuLCBkZXN0cm95IGl0LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAJKHJldmlzaW9uIDE1NjE0MykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00ODUsNyArNDg1LDcgQEAgYm9vbCBSZW5kZXJOYW1lZEZsb3dUaHJl
YWQ6OmlzQ2hpbGRBbGxvdwogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIEFTU0VSVChjaGls
ZC0+bm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpOwotICAgIE5vZGUqIG9yaWdpbmFsUGFyZW50ID0g
Tm9kZVJlbmRlcmluZ1RyYXZlcnNhbDo6cGFyZW50KGNoaWxkLT5ub2RlKCkpOworICAgIEVsZW1l
bnQqIG9yaWdpbmFsUGFyZW50ID0gdG9FbGVtZW50KE5vZGVSZW5kZXJpbmdUcmF2ZXJzYWw6OnBh
cmVudChjaGlsZC0+bm9kZSgpKSk7CiAKICAgICBpZiAoIW9yaWdpbmFsUGFyZW50IHx8ICFvcmln
aW5hbFBhcmVudC0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMTU2MTQzKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyNiw2OCArMjI2LDIyIEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXRGbG93VGhyZWFk
U3RhdGVJbmMKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyT2JqZWN0OjphZGRDaGlsZChSZW5kZXJP
YmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJP
YmplY3Q6OnNldFBhcmVudChSZW5kZXJFbGVtZW50KiBwYXJlbnQpCiB7Ci0gICAgUmVuZGVyT2Jq
ZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7Ci0gICAgQVNTRVJUKGNo
aWxkcmVuKTsKLSAgICBpZiAoIWNoaWxkcmVuKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29s
IG5lZWRzVGFibGUgPSBmYWxzZTsKKyAgICBtX3BhcmVudCA9IHBhcmVudDsKIAotICAgIGlmIChu
ZXdDaGlsZC0+aXNSZW5kZXJUYWJsZUNvbCgpKSB7Ci0gICAgICAgIFJlbmRlclRhYmxlQ29sKiBu
ZXdUYWJsZUNvbHVtbiA9IHRvUmVuZGVyVGFibGVDb2wobmV3Q2hpbGQpOwotICAgICAgICBib29s
IGlzQ29sdW1uSW5Db2x1bW5Hcm91cCA9IG5ld1RhYmxlQ29sdW1uLT5pc1RhYmxlQ29sdW1uKCkg
JiYgaXNSZW5kZXJUYWJsZUNvbCgpOwotICAgICAgICBuZWVkc1RhYmxlID0gIWlzVGFibGUoKSAm
JiAhaXNDb2x1bW5JbkNvbHVtbkdyb3VwOwotICAgIH0gZWxzZSBpZiAobmV3Q2hpbGQtPmlzVGFi
bGVDYXB0aW9uKCkpCi0gICAgICAgIG5lZWRzVGFibGUgPSAhaXNUYWJsZSgpOwotICAgIGVsc2Ug
aWYgKG5ld0NoaWxkLT5pc1RhYmxlU2VjdGlvbigpKQotICAgICAgICBuZWVkc1RhYmxlID0gIWlz
VGFibGUoKTsKLSAgICBlbHNlIGlmIChuZXdDaGlsZC0+aXNUYWJsZVJvdygpKQotICAgICAgICBu
ZWVkc1RhYmxlID0gIWlzVGFibGVTZWN0aW9uKCk7Ci0gICAgZWxzZSBpZiAobmV3Q2hpbGQtPmlz
VGFibGVDZWxsKCkpCi0gICAgICAgIG5lZWRzVGFibGUgPSAhaXNUYWJsZVJvdygpOwotCi0gICAg
aWYgKG5lZWRzVGFibGUpIHsKLSAgICAgICAgUmVuZGVyVGFibGUqIHRhYmxlOwotICAgICAgICBS
ZW5kZXJPYmplY3QqIGFmdGVyQ2hpbGQgPSBiZWZvcmVDaGlsZCA/IGJlZm9yZUNoaWxkLT5wcmV2
aW91c1NpYmxpbmcoKSA6IGNoaWxkcmVuLT5sYXN0Q2hpbGQoKTsKLSAgICAgICAgaWYgKGFmdGVy
Q2hpbGQgJiYgYWZ0ZXJDaGlsZC0+aXNBbm9ueW1vdXMoKSAmJiBhZnRlckNoaWxkLT5pc1RhYmxl
KCkgJiYgIWFmdGVyQ2hpbGQtPmlzQmVmb3JlQ29udGVudCgpKQotICAgICAgICAgICAgdGFibGUg
PSB0b1JlbmRlclRhYmxlKGFmdGVyQ2hpbGQpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IHRhYmxlID0gUmVuZGVyVGFibGU6OmNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcih0
aGlzKTsKLSAgICAgICAgICAgIGFkZENoaWxkKHRhYmxlLCBiZWZvcmVDaGlsZCk7Ci0gICAgICAg
IH0KLSAgICAgICAgdGFibGUtPmFkZENoaWxkKG5ld0NoaWxkKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgY2hpbGRyZW4tPmluc2VydENoaWxkTm9kZSh0aGlzLCBuZXdDaGlsZCwgYmVmb3JlQ2hpbGQp
OwotCi0gICAgaWYgKG5ld0NoaWxkLT5pc1RleHQoKSAmJiBuZXdDaGlsZC0+c3R5bGUoKS0+dGV4
dFRyYW5zZm9ybSgpID09IENBUElUQUxJWkUpCi0gICAgICAgIHRvUmVuZGVyVGV4dChuZXdDaGls
ZCktPnRyYW5zZm9ybVRleHQoKTsKLQotICAgIC8vIFNWRyBjcmVhdGVzIHJlbmRlcmVycyBmb3Ig
PGcgZGlzcGxheT0ibm9uZSI+LCBhcyBTVkcgcmVxdWlyZXMgY2hpbGRyZW4gb2YgaGlkZGVuCi0g
ICAgLy8gPGc+cyB0byBoYXZlIHJlbmRlcmVycyAtIGF0IGxlYXN0IHRoYXQncyBob3cgb3VyIGlt
cGxlbWVudGF0aW9uIHdvcmtzLiBDb25zaWRlcjoKLSAgICAvLyA8ZyBkaXNwbGF5PSJub25lIj48
Zm9yZWlnbk9iamVjdD48Ym9keSBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZlIj5GT08uLi4KLSAg
ICAvLyAtIHJlcXVpcmVzTGF5ZXIoKSB3b3VsZCByZXR1cm4gdHJ1ZSBmb3IgdGhlIDxib2R5Piwg
Y3JlYXRpbmcgYSBuZXcgUmVuZGVyTGF5ZXIKLSAgICAvLyAtIHdoZW4gdGhlIGRvY3VtZW50IGlz
IHBhaW50ZWQsIGJvdGggbGF5ZXJzIGFyZSBwYWludGVkLiBUaGUgPGJvZHk+IGxheWVyIGRvZXNu
J3QKLSAgICAvLyAgIGtub3cgdGhhdCBpdCdzIGluc2lkZSBhICJoaWRkZW4gU1ZHIHN1YnRyZWUi
LCBhbmQgdGh1cyBwYWludHMsIGV2ZW4gaWYgaXQgc2hvdWxkbid0LgotICAgIC8vIFRvIGF2b2lk
IHRoZSBwcm9ibGVtIGFsbHRvZ2V0aGVyLCBkZXRlY3QgZWFybHkgaWYgd2UncmUgaW5zaWRlIGEg
aGlkZGVuIFNWRyBzdWJ0cmVlCi0gICAgLy8gYW5kIHN0b3AgY3JlYXRpbmcgbGF5ZXJzIGF0IGFs
bCBmb3IgdGhlc2UgY2FzZXMgLSB0aGV5J3JlIG5vdCB1c2VkIGFueXdheXMuCi0gICAgaWYgKG5l
d0NoaWxkLT5oYXNMYXllcigpICYmICFsYXllckNyZWF0aW9uQWxsb3dlZEZvclN1YnRyZWUoKSkK
LSAgICAgICAgdG9SZW5kZXJMYXllck1vZGVsT2JqZWN0KG5ld0NoaWxkKS0+bGF5ZXIoKS0+cmVt
b3ZlT25seVRoaXNMYXllcigpOwotCi0jaWYgRU5BQkxFKFNWRykKLSAgICBTVkdSZW5kZXJTdXBw
b3J0OjpjaGlsZEFkZGVkKHRoaXMsIG5ld0NoaWxkKTsKLSNlbmRpZgorICAgIC8vIE9ubHkgdXBk
YXRlIGlmIG91ciBmbG93IHRocmVhZCBzdGF0ZSBpcyBkaWZmZXJlbnQgZnJvbSBvdXIgbmV3IHBh
cmVudCBhbmQgaWYgd2UncmUgbm90IGEgUmVuZGVyRmxvd1RocmVhZC4KKyAgICAvLyBBIFJlbmRl
ckZsb3dUaHJlYWQgaXMgYWx3YXlzIGNvbnNpZGVyZWQgdG8gYmUgaW5zaWRlIGl0c2VsZiwgc28g
aXQgbmV2ZXIgaGFzIHRvIGNoYW5nZSBpdHMgc3RhdGUKKyAgICAvLyBpbiByZXNwb25zZSB0byBw
YXJlbnQgY2hhbmdlcy4KKyAgICBGbG93VGhyZWFkU3RhdGUgbmV3U3RhdGUgPSBwYXJlbnQgPyBw
YXJlbnQtPmZsb3dUaHJlYWRTdGF0ZSgpIDogTm90SW5zaWRlRmxvd1RocmVhZDsKKyAgICBpZiAo
bmV3U3RhdGUgIT0gZmxvd1RocmVhZFN0YXRlKCkgJiYgIWlzUmVuZGVyRmxvd1RocmVhZCgpKQor
ICAgICAgICBzZXRGbG93VGhyZWFkU3RhdGVJbmNsdWRpbmdEZXNjZW5kYW50cyhuZXdTdGF0ZSk7
CiB9CiAKLXZvaWQgUmVuZGVyT2JqZWN0OjpyZW1vdmVDaGlsZChSZW5kZXJPYmplY3QqIG9sZENo
aWxkKQordm9pZCBSZW5kZXJPYmplY3Q6OnJlbW92ZUZyb21QYXJlbnQoKQogewotICAgIFJlbmRl
ck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJlbigpOwotICAgIEFTU0VS
VChjaGlsZHJlbik7Ci0gICAgaWYgKCFjaGlsZHJlbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Y2hpbGRyZW4tPnJlbW92ZUNoaWxkTm9kZSh0aGlzLCBvbGRDaGlsZCk7CisgICAgaWYgKHBhcmVu
dCgpKQorICAgICAgICBwYXJlbnQoKS0+cmVtb3ZlQ2hpbGQodGhpcyk7CiB9CiAKIFJlbmRlck9i
amVjdCogUmVuZGVyT2JqZWN0OjpuZXh0SW5QcmVPcmRlcigpIGNvbnN0CkBAIC02ODMsNiArNjM3
LDIwIEBAIFJlbmRlckxheWVyKiBSZW5kZXJPYmplY3Q6OmVuY2xvc2luZ0xheWUKICAgICByZXR1
cm4gMDsKIH0KIAorYm9vbCBSZW5kZXJPYmplY3Q6OmxheWVyQ3JlYXRpb25BbGxvd2VkRm9yU3Vi
dHJlZSgpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFNWRykKKyAgICBSZW5kZXJFbGVtZW50KiBwYXJl
bnRSZW5kZXJlciA9IHBhcmVudCgpOworICAgIHdoaWxlIChwYXJlbnRSZW5kZXJlcikgeworICAg
ICAgICBpZiAocGFyZW50UmVuZGVyZXItPmlzU1ZHSGlkZGVuQ29udGFpbmVyKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHBhcmVudFJlbmRlcmVyID0gcGFyZW50UmVuZGVy
ZXItPnBhcmVudCgpOworICAgIH0KKyNlbmRpZgorICAgIAorICAgIHJldHVybiB0cnVlOworfQor
CiBib29sIFJlbmRlck9iamVjdDo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0
JiByZWN0LCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWCwgY29uc3QgU2Nyb2xsQWxpZ25t
ZW50JiBhbGlnblkpCiB7CiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0xheWVyID0gdGhpcy0+
ZW5jbG9zaW5nTGF5ZXIoKTsKQEAgLTI1NzUsNyArMjU0Myw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0
Ojp3aWxsQmVEZXN0cm95ZWQoKQogICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3Vt
ZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCiAgICAgICAgIGNhY2hlLT5jaGlsZHJlbkNo
YW5nZWQodGhpcy0+cGFyZW50KCkpOwogCi0gICAgcmVtb3ZlKCk7CisgICAgcmVtb3ZlRnJvbVBh
cmVudCgpOwogCiAgICAgQVNTRVJUKGRvY3VtZW50QmVpbmdEZXN0cm95ZWQoKSB8fCAhdmlldygp
LmZyYW1lVmlldygpLmhhc1Nsb3dSZXBhaW50T2JqZWN0KHRoaXMpKTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkocmV2aXNpb24gMTU2MTQ0KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
NCw2ICs1NCw3IEBAIGNsYXNzIFBzZXVkb1N0eWxlUmVxdWVzdDsKIGNsYXNzIFJlbmRlckJveE1v
ZGVsT2JqZWN0OwogY2xhc3MgUmVuZGVySW5saW5lOwogY2xhc3MgUmVuZGVyQmxvY2s7CitjbGFz
cyBSZW5kZXJFbGVtZW50OwogY2xhc3MgUmVuZGVyRmxvd1RocmVhZDsKIGNsYXNzIFJlbmRlckdl
b21ldHJ5TWFwOwogY2xhc3MgUmVuZGVyTGF5ZXI7CkBAIC0xNTgsNyArMTU5LDcgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgPSAwOwogCi0g
ICAgUmVuZGVyT2JqZWN0KiBwYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudDsgfQorICAg
IFJlbmRlckVsZW1lbnQqIHBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50OyB9CiAgICAg
Ym9vbCBpc0Rlc2NlbmRhbnRPZihjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKIAogICAgIFJl
bmRlck9iamVjdCogcHJldmlvdXNTaWJsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9wcmV2aW91czsg
fQpAQCAtMjc4LDEwICsyNzksNiBAQCBwdWJsaWM6CiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigp
IGNvbnN0IHsgcmV0dXJuIGNoaWxkcmVuKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUdl
bmVyYXRlZENoaWxkcmVuKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzQ2hpbGRBbGxvd2Vk
KFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAg
IHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkID0gMCk7Ci0gICAgdmlydHVhbCB2b2lkIGFkZENoaWxkSWdub3JpbmdD
b250aW51YXRpb24oUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVD
aGlsZCA9IDApIHsgcmV0dXJuIGFkZENoaWxkKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0Kik7CiAgICAgdmlydHVhbCBi
b29sIGNyZWF0ZXNBbm9ueW1vdXNXcmFwcGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIApAQCAtMjkwLDE4
ICsyODcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gSGVscGVyIGZ1bmN0aW9ucy4gRGFuZ2Vyb3Vz
IHRvIHVzZSEKICAgICB2b2lkIHNldFByZXZpb3VzU2libGluZyhSZW5kZXJPYmplY3QqIHByZXZp
b3VzKSB7IG1fcHJldmlvdXMgPSBwcmV2aW91czsgfQogICAgIHZvaWQgc2V0TmV4dFNpYmxpbmco
UmVuZGVyT2JqZWN0KiBuZXh0KSB7IG1fbmV4dCA9IG5leHQ7IH0KLSAgICB2b2lkIHNldFBhcmVu
dChSZW5kZXJPYmplY3QqIHBhcmVudCkKLSAgICB7Ci0gICAgICAgIG1fcGFyZW50ID0gcGFyZW50
OwotICAgICAgICAKLSAgICAgICAgLy8gT25seSB1cGRhdGUgaWYgb3VyIGZsb3cgdGhyZWFkIHN0
YXRlIGlzIGRpZmZlcmVudCBmcm9tIG91ciBuZXcgcGFyZW50IGFuZCBpZiB3ZSdyZSBub3QgYSBS
ZW5kZXJGbG93VGhyZWFkLgotICAgICAgICAvLyBBIFJlbmRlckZsb3dUaHJlYWQgaXMgYWx3YXlz
IGNvbnNpZGVyZWQgdG8gYmUgaW5zaWRlIGl0c2VsZiwgc28gaXQgbmV2ZXIgaGFzIHRvIGNoYW5n
ZSBpdHMgc3RhdGUKLSAgICAgICAgLy8gaW4gcmVzcG9uc2UgdG8gcGFyZW50IGNoYW5nZXMuCi0g
ICAgICAgIEZsb3dUaHJlYWRTdGF0ZSBuZXdTdGF0ZSA9IHBhcmVudCA/IHBhcmVudC0+Zmxvd1Ro
cmVhZFN0YXRlKCkgOiBOb3RJbnNpZGVGbG93VGhyZWFkOwotICAgICAgICBpZiAobmV3U3RhdGUg
IT0gZmxvd1RocmVhZFN0YXRlKCkgJiYgIWlzUmVuZGVyRmxvd1RocmVhZCgpKQotICAgICAgICAg
ICAgc2V0Rmxvd1RocmVhZFN0YXRlSW5jbHVkaW5nRGVzY2VuZGFudHMobmV3U3RhdGUpOwotICAg
IH0KLQorICAgIHZvaWQgc2V0UGFyZW50KFJlbmRlckVsZW1lbnQqKTsKICAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIHByaXZhdGU6CiAjaWZuZGVmIE5ERUJV
RwpAQCAtOTcyLDcgKzk1OCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2VsZWN0aW9uU3RhcnRF
bmQoaW50JiBzcG9zLCBpbnQmIGVwb3MpIGNvbnN0OwogICAgIAotICAgIHZvaWQgcmVtb3ZlKCkg
eyBpZiAocGFyZW50KCkpIHBhcmVudCgpLT5yZW1vdmVDaGlsZCh0aGlzKTsgfQorICAgIHZvaWQg
cmVtb3ZlRnJvbVBhcmVudCgpOwogCiAgICAgQW5pbWF0aW9uQ29udHJvbGxlciYgYW5pbWF0aW9u
KCkgY29uc3Q7CiAKQEAgLTEwMDYsNyArOTkyLDcgQEAgcHVibGljOgogICAgIFJlc3BlY3RJbWFn
ZU9yaWVudGF0aW9uRW51bSBzaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpIGNvbnN0Owog
CiBwcm90ZWN0ZWQ6Ci0gICAgaW5saW5lIGJvb2wgbGF5ZXJDcmVhdGlvbkFsbG93ZWRGb3JTdWJ0
cmVlKCkgY29uc3Q7CisgICAgYm9vbCBsYXllckNyZWF0aW9uQWxsb3dlZEZvclN1YnRyZWUoKSBj
b25zdDsKIAogICAgIC8vIE92ZXJyaWRlcyBzaG91bGQgY2FsbCB0aGUgc3VwZXJjbGFzcyBhdCB0
aGUgZW5kCiAgICAgdmlydHVhbCB2b2lkIHN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2Us
IGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7CkBAIC0xMDY1LDcgKzEwNTEsNyBAQCBwcml2
YXRlOgogCiAgICAgTm9kZSogbV9ub2RlOwogCi0gICAgUmVuZGVyT2JqZWN0KiBtX3BhcmVudDsK
KyAgICBSZW5kZXJFbGVtZW50KiBtX3BhcmVudDsKICAgICBSZW5kZXJPYmplY3QqIG1fcHJldmlv
dXM7CiAgICAgUmVuZGVyT2JqZWN0KiBtX25leHQ7CiAKQEAgLTEzMDgsMjAgKzEyOTQsNiBAQCBp
bmxpbmUgYm9vbCBSZW5kZXJPYmplY3Q6OnByZXNlcnZlc05ld2xpCiAgICAgcmV0dXJuIHN0eWxl
KCktPnByZXNlcnZlTmV3bGluZSgpOwogfQogCi1pbmxpbmUgYm9vbCBSZW5kZXJPYmplY3Q6Omxh
eWVyQ3JlYXRpb25BbGxvd2VkRm9yU3VidHJlZSgpIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKFNWRykK
LSAgICBSZW5kZXJPYmplY3QqIHBhcmVudFJlbmRlcmVyID0gcGFyZW50KCk7Ci0gICAgd2hpbGUg
KHBhcmVudFJlbmRlcmVyKSB7Ci0gICAgICAgIGlmIChwYXJlbnRSZW5kZXJlci0+aXNTVkdIaWRk
ZW5Db250YWluZXIoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcGFyZW50
UmVuZGVyZXIgPSBwYXJlbnRSZW5kZXJlci0+cGFyZW50KCk7Ci0gICAgfQotI2VuZGlmCi0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQogaW5saW5lIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXRTZWxlY3Rp
b25TdGF0ZUlmTmVlZGVkKFNlbGVjdGlvblN0YXRlIHN0YXRlKQogewogICAgIGlmIChzZWxlY3Rp
b25TdGF0ZSgpID09IHN0YXRlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdENoaWxkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdENoaWxkTGlzdC5jcHAJKHJldmlzaW9uIDE1NjE0MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3RDaGlsZExpc3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw4ICsyOSw4IEBACiAKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyQ291bnRlci5oIgorI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKICNpbmNs
dWRlICJSZW5kZXJMaW5lQnJlYWsuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNs
dWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKIApAQCAtNDAsNyAr
NDAsNyBAQCB2b2lkIFJlbmRlck9iamVjdENoaWxkTGlzdDo6ZGVzdHJveUxlZnRvCiB7CiAgICAg
d2hpbGUgKGZpcnN0Q2hpbGQoKSkgewogICAgICAgICBpZiAoZmlyc3RDaGlsZCgpLT5pc0xpc3RN
YXJrZXIoKSB8fCAoZmlyc3RDaGlsZCgpLT5zdHlsZSgpLT5zdHlsZVR5cGUoKSA9PSBGSVJTVF9M
RVRURVIgJiYgIWZpcnN0Q2hpbGQoKS0+aXNUZXh0KCkpKQotICAgICAgICAgICAgZmlyc3RDaGls
ZCgpLT5yZW1vdmUoKTsgIC8vIExpc3QgbWFya2VycyBhcmUgb3duZWQgYnkgdGhlaXIgZW5jbG9z
aW5nIGxpc3QgYW5kIHNvIGRvbid0IGdldCBkZXN0cm95ZWQgYnkgdGhpcyBjb250YWluZXIuIFNp
bWlsYXJseSwgZmlyc3QgbGV0dGVycyBhcmUgZGVzdHJveWVkIGJ5IHRoZWlyIHJlbWFpbmluZyB0
ZXh0IGZyYWdtZW50LgorICAgICAgICAgICAgZmlyc3RDaGlsZCgpLT5yZW1vdmVGcm9tUGFyZW50
KCk7IC8vIExpc3QgbWFya2VycyBhcmUgb3duZWQgYnkgdGhlaXIgZW5jbG9zaW5nIGxpc3QgYW5k
IHNvIGRvbid0IGdldCBkZXN0cm95ZWQgYnkgdGhpcyBjb250YWluZXIuIFNpbWlsYXJseSwgZmly
c3QgbGV0dGVycyBhcmUgZGVzdHJveWVkIGJ5IHRoZWlyIHJlbWFpbmluZyB0ZXh0IGZyYWdtZW50
LgogICAgICAgICBlbHNlIGlmIChmaXJzdENoaWxkKCktPmlzUnVuSW4oKSAmJiBmaXJzdENoaWxk
KCktPm5vZGUoKSkgewogICAgICAgICAgICAgZmlyc3RDaGlsZCgpLT5ub2RlKCktPnNldFJlbmRl
cmVyKDApOwogICAgICAgICAgICAgZmlyc3RDaGlsZCgpLT5ub2RlKCktPnNldE5lZWRzU3R5bGVS
ZWNhbGMoKTsKQEAgLTU0LDcgKzU0LDcgQEAgdm9pZCBSZW5kZXJPYmplY3RDaGlsZExpc3Q6OmRl
c3Ryb3lMZWZ0bwogICAgIH0KIH0KIAotUmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3RDaGlsZExp
c3Q6OnJlbW92ZUNoaWxkTm9kZShSZW5kZXJPYmplY3QqIG93bmVyLCBSZW5kZXJPYmplY3QqIG9s
ZENoaWxkLCBib29sIG5vdGlmeVJlbmRlcmVyKQorUmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3RD
aGlsZExpc3Q6OnJlbW92ZUNoaWxkTm9kZShSZW5kZXJFbGVtZW50KiBvd25lciwgUmVuZGVyT2Jq
ZWN0KiBvbGRDaGlsZCwgYm9vbCBub3RpZnlSZW5kZXJlcikKIHsKICAgICBBU1NFUlQob2xkQ2hp
bGQtPnBhcmVudCgpID09IG93bmVyKTsKIApAQCAtMTE4LDcgKzExOCw3IEBAIFJlbmRlck9iamVj
dCogUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjpyZW0KICAgICByZXR1cm4gb2xkQ2hpbGQ7CiB9CiAK
LXZvaWQgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjppbnNlcnRDaGlsZE5vZGUoUmVuZGVyT2JqZWN0
KiBvd25lciwgUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGls
ZCwgYm9vbCBub3RpZnlSZW5kZXJlcikKK3ZvaWQgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjppbnNl
cnRDaGlsZE5vZGUoUmVuZGVyRWxlbWVudCogb3duZXIsIFJlbmRlck9iamVjdCogbmV3Q2hpbGQs
IFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIGJvb2wgbm90aWZ5UmVuZGVyZXIpCiB7CiAgICAg
QVNTRVJUKCFuZXdDaGlsZC0+cGFyZW50KCkpOwogICAgIEFTU0VSVCghb3duZXItPmlzUmVuZGVy
QmxvY2tGbG93KCkgfHwgKCFuZXdDaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSAmJiAhbmV3Q2hpbGQt
PmlzVGFibGVSb3coKSAmJiAhbmV3Q2hpbGQtPmlzVGFibGVDZWxsKCkpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3RDaGlsZExpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmgJKHJldmlz
aW9uIDE1NjE0MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3RDaGls
ZExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK2NsYXNzIFJlbmRlckVsZW1lbnQ7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiAKIGNs
YXNzIFJlbmRlck9iamVjdENoaWxkTGlzdCB7CkBAIC01MCw5ICs1MSw5IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgZGVzdHJveUxlZnRvdmVyQ2hpbGRyZW4oKTsKIAotICAgIFJlbmRlck9iamVjdCog
cmVtb3ZlQ2hpbGROb2RlKFJlbmRlck9iamVjdCogb3duZXIsIFJlbmRlck9iamVjdCosIGJvb2wg
bm90aWZ5UmVuZGVyZXIgPSB0cnVlKTsKLSAgICB2b2lkIGluc2VydENoaWxkTm9kZShSZW5kZXJP
YmplY3QqIG93bmVyLCBSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9y
ZUNoaWxkLCBib29sIG5vdGlmeVJlbmRlcmVyID0gdHJ1ZSk7Ci0gICAgdm9pZCBhcHBlbmRDaGls
ZE5vZGUoUmVuZGVyT2JqZWN0KiBvd25lciwgUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgYm9vbCBu
b3RpZnlSZW5kZXJlciA9IHRydWUpCisgICAgUmVuZGVyT2JqZWN0KiByZW1vdmVDaGlsZE5vZGUo
UmVuZGVyRWxlbWVudCogb3duZXIsIFJlbmRlck9iamVjdCosIGJvb2wgbm90aWZ5UmVuZGVyZXIg
PSB0cnVlKTsKKyAgICB2b2lkIGluc2VydENoaWxkTm9kZShSZW5kZXJFbGVtZW50KiBvd25lciwg
UmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgYm9vbCBu
b3RpZnlSZW5kZXJlciA9IHRydWUpOworICAgIHZvaWQgYXBwZW5kQ2hpbGROb2RlKFJlbmRlckVs
ZW1lbnQqIG93bmVyLCBSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBib29sIG5vdGlmeVJlbmRlcmVy
ID0gdHJ1ZSkKICAgICB7CiAgICAgICAgIGluc2VydENoaWxkTm9kZShvd25lciwgbmV3Q2hpbGQs
IDAsIG5vdGlmeVJlbmRlcmVyKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUnVieS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclJ1YnkuY3BwCShyZXZpc2lvbiAxNTYxNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyUnVieS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw3ICsxNjcsNyBAQCB2
b2lkIFJlbmRlclJ1YnlBc0lubGluZTo6YWRkQ2hpbGQoUmVuZGVyCiAgICAgaWYgKGJlZm9yZUNo
aWxkICYmICFpc0FmdGVyQ29udGVudChiZWZvcmVDaGlsZCkpIHsKICAgICAgICAgLy8gaW5zZXJ0
IGNoaWxkIGludG8gcnVuCiAgICAgICAgIEFTU0VSVCghYmVmb3JlQ2hpbGQtPmlzUnVieVJ1bigp
KTsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBydW4gPSBiZWZvcmVDaGlsZDsKKyAgICAgICAgUmVu
ZGVyRWxlbWVudCogcnVuID0gYmVmb3JlQ2hpbGQtPnBhcmVudCgpOwogICAgICAgICB3aGlsZSAo
cnVuICYmICFydW4tPmlzUnVieVJ1bigpKQogICAgICAgICAgICAgcnVuID0gcnVuLT5wYXJlbnQo
KTsKICAgICAgICAgaWYgKHJ1bikgewpAQCAtMjczLDcgKzI3Myw3IEBAIHZvaWQgUmVuZGVyUnVi
eUFzQmxvY2s6OmFkZENoaWxkKFJlbmRlck8KICAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgIWlzQWZ0
ZXJDb250ZW50KGJlZm9yZUNoaWxkKSkgewogICAgICAgICAvLyBpbnNlcnQgY2hpbGQgaW50byBy
dW4KICAgICAgICAgQVNTRVJUKCFiZWZvcmVDaGlsZC0+aXNSdWJ5UnVuKCkpOwotICAgICAgICBS
ZW5kZXJPYmplY3QqIHJ1biA9IGJlZm9yZUNoaWxkOworICAgICAgICBSZW5kZXJFbGVtZW50KiBy
dW4gPSBiZWZvcmVDaGlsZC0+cGFyZW50KCk7CiAgICAgICAgIHdoaWxlIChydW4gJiYgIXJ1bi0+
aXNSdWJ5UnVuKCkpCiAgICAgICAgICAgICBydW4gPSBydW4tPnBhcmVudCgpOwogICAgICAgICBp
ZiAocnVuKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4u
Y3BwCShyZXZpc2lvbiAxNTYxNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UnVieVJ1bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIFJlbmRl
clJ1YnlSdW46OmFkZENoaWxkKFJlbmRlck9iamVjCiAgICAgICAgICAgICAvLyBJbiB0aGlzIGNh
c2UgdGhlIG5ldyB0ZXh0IHRha2VzIHRoZSBwbGFjZSBvZiB0aGUgb2xkIG9uZSwgYW5kCiAgICAg
ICAgICAgICAvLyB0aGUgb2xkIHRleHQgZ29lcyBpbnRvIGEgbmV3IHJ1biB0aGF0IGlzIGluc2Vy
dGVkIGFzIG5leHQgc2libGluZy4KICAgICAgICAgICAgIEFTU0VSVChiZWZvcmVDaGlsZC0+cGFy
ZW50KCkgPT0gdGhpcyk7Ci0gICAgICAgICAgICBSZW5kZXJPYmplY3QqIHJ1YnkgPSBwYXJlbnQo
KTsKKyAgICAgICAgICAgIFJlbmRlckVsZW1lbnQqIHJ1YnkgPSBwYXJlbnQoKTsKICAgICAgICAg
ICAgIEFTU0VSVChydWJ5LT5pc1J1YnkoKSk7CiAgICAgICAgICAgICBSZW5kZXJCbG9jayogbmV3
UnVuID0gc3RhdGljQ3JlYXRlUnVieVJ1bihydWJ5KTsKICAgICAgICAgICAgIHJ1YnktPmFkZENo
aWxkKG5ld1J1biwgbmV4dFNpYmxpbmcoKSk7CkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBSZW5k
ZXJSdWJ5UnVuOjphZGRDaGlsZChSZW5kZXJPYmplYwogICAgICAgICB9IGVsc2UgaWYgKGhhc1J1
YnlCYXNlKCkpIHsKICAgICAgICAgICAgIC8vIEluc2VydGlvbiBiZWZvcmUgYSBydWJ5IGJhc2Ug
b2JqZWN0LgogICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIG5lZWQgaW5zZXJ0IGEgbmV3
IHJ1biBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIGFuZCBzcGxpdCB0aGUgYmFzZS4KLSAgICAgICAg
ICAgIFJlbmRlck9iamVjdCogcnVieSA9IHBhcmVudCgpOworICAgICAgICAgICAgUmVuZGVyRWxl
bWVudCogcnVieSA9IHBhcmVudCgpOwogICAgICAgICAgICAgUmVuZGVyUnVieVJ1biogbmV3UnVu
ID0gc3RhdGljQ3JlYXRlUnVieVJ1bihydWJ5KTsKICAgICAgICAgICAgIHJ1YnktPmFkZENoaWxk
KG5ld1J1biwgdGhpcyk7CiAgICAgICAgICAgICBuZXdSdW4tPmFkZENoaWxkKGNoaWxkKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkocmV2aXNpb24gMTU2
MTQzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTY4LDE0ICsxNjgsMTQgQEAgdm9pZCBSZW5kZXJUYWJsZTo6YWRkQ2hpbGQo
UmVuZGVyT2JqZWN0KgogICAgIH0KIAogICAgIGlmICghYmVmb3JlQ2hpbGQgJiYgbGFzdENoaWxk
KCkgJiYgbGFzdENoaWxkKCktPmlzVGFibGVTZWN0aW9uKCkgJiYgbGFzdENoaWxkKCktPmlzQW5v
bnltb3VzKCkgJiYgIWxhc3RDaGlsZCgpLT5pc0JlZm9yZUNvbnRlbnQoKSkgewotICAgICAgICBs
YXN0Q2hpbGQoKS0+YWRkQ2hpbGQoY2hpbGQpOworICAgICAgICB0b1JlbmRlclRhYmxlU2VjdGlv
bihsYXN0Q2hpbGQoKSktPmFkZENoaWxkKGNoaWxkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIGlmIChiZWZvcmVDaGlsZCAmJiAhYmVmb3JlQ2hpbGQtPmlzQW5vbnltb3VzKCkgJiYg
YmVmb3JlQ2hpbGQtPnBhcmVudCgpID09IHRoaXMpIHsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBz
ZWN0aW9uID0gYmVmb3JlQ2hpbGQtPnByZXZpb3VzU2libGluZygpOwogICAgICAgICBpZiAoc2Vj
dGlvbiAmJiBzZWN0aW9uLT5pc1RhYmxlU2VjdGlvbigpICYmIHNlY3Rpb24tPmlzQW5vbnltb3Vz
KCkpIHsKLSAgICAgICAgICAgIHNlY3Rpb24tPmFkZENoaWxkKGNoaWxkKTsKKyAgICAgICAgICAg
IHRvUmVuZGVyVGFibGVTZWN0aW9uKHNlY3Rpb24pLT5hZGRDaGlsZChjaGlsZCk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBS
ZW5kZXJUYWJsZTo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KgogICAgIGlmIChsYXN0Qm94ICYmIGxh
c3RCb3gtPmlzQW5vbnltb3VzKCkgJiYgIWlzQWZ0ZXJDb250ZW50KGxhc3RCb3gpKSB7CiAgICAg
ICAgIGlmIChiZWZvcmVDaGlsZCA9PSBsYXN0Qm94KQogICAgICAgICAgICAgYmVmb3JlQ2hpbGQg
PSBsYXN0Qm94LT5maXJzdENoaWxkKCk7Ci0gICAgICAgIGxhc3RCb3gtPmFkZENoaWxkKGNoaWxk
LCBiZWZvcmVDaGlsZCk7CisgICAgICAgIHRvUmVuZGVyVGFibGVTZWN0aW9uKGxhc3RCb3gpLT5h
ZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAJKHJldmlz
aW9uIDE1NjE0MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExMywxNCArMTEzLDE0IEBAIHZvaWQgUmVuZGVyVGFibGVS
b3c6OmFkZENoaWxkKFJlbmRlck9iamUKICAgICAgICAgaWYgKGxhc3QgJiYgbGFzdC0+aXNBbm9u
eW1vdXMoKSAmJiBsYXN0LT5pc1RhYmxlQ2VsbCgpICYmICFsYXN0LT5pc0JlZm9yZU9yQWZ0ZXJD
b250ZW50KCkpIHsKICAgICAgICAgICAgIGlmIChiZWZvcmVDaGlsZCA9PSBsYXN0KQogICAgICAg
ICAgICAgICAgIGJlZm9yZUNoaWxkID0gbGFzdC0+Zmlyc3RDaGlsZCgpOwotICAgICAgICAgICAg
bGFzdC0+YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgICAgIHRvUmVuZGVy
VGFibGVDZWxsKGxhc3QpLT5hZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGJlZm9yZUNoaWxkICYmICFiZWZv
cmVDaGlsZC0+aXNBbm9ueW1vdXMoKSAmJiBiZWZvcmVDaGlsZC0+cGFyZW50KCkgPT0gdGhpcykg
ewogICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBjZWxsID0gYmVmb3JlQ2hpbGQtPnByZXZpb3Vz
U2libGluZygpOwogICAgICAgICAgICAgaWYgKGNlbGwgJiYgY2VsbC0+aXNUYWJsZUNlbGwoKSAm
JiBjZWxsLT5pc0Fub255bW91cygpKSB7Ci0gICAgICAgICAgICAgICAgY2VsbC0+YWRkQ2hpbGQo
Y2hpbGQpOworICAgICAgICAgICAgICAgIHRvUmVuZGVyVGFibGVDZWxsKGNlbGwpLT5hZGRDaGls
ZChjaGlsZCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAkocmV2
aXNpb24gMTU2MTQzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93
LmgJKHdvcmtpbmcgY29weSkKQEAgLTg4LDYgKzg4LDggQEAgcHVibGljOgogICAgIGNvbnN0IEJv
cmRlclZhbHVlJiBib3JkZXJBZGpvaW5pbmdTdGFydENlbGwoY29uc3QgUmVuZGVyVGFibGVDZWxs
KikgY29uc3Q7CiAgICAgY29uc3QgQm9yZGVyVmFsdWUmIGJvcmRlckFkam9pbmluZ0VuZENlbGwo
Y29uc3QgUmVuZGVyVGFibGVDZWxsKikgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hp
bGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIE9W
RVJSSURFOworCiBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIChpc0Fub255bW91cygpIHx8IGlzUHNldWRvRWxlbWVu
dCgpKSA/ICJSZW5kZXJUYWJsZVJvdyAoYW5vbnltb3VzKSIgOiAiUmVuZGVyVGFibGVSb3ciOyB9
CiAKQEAgLTk1LDcgKzk3LDYgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVS
ZW1vdmVkRnJvbVRyZWUoKSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChS
ZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCkgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgTGF5
b3V0UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1v
ZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFs
IGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQ
b2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURFOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHJl
dmlzaW9uIDE1NjE0MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNl
Y3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsMTQgKzEzMiwxNCBAQCB2b2lkIFJlbmRl
clRhYmxlU2VjdGlvbjo6YWRkQ2hpbGQoUmVuZGVyCiAgICAgICAgIGlmIChsYXN0ICYmIGxhc3Qt
PmlzQW5vbnltb3VzKCkgJiYgIWxhc3QtPmlzQmVmb3JlT3JBZnRlckNvbnRlbnQoKSkgewogICAg
ICAgICAgICAgaWYgKGJlZm9yZUNoaWxkID09IGxhc3QpCiAgICAgICAgICAgICAgICAgYmVmb3Jl
Q2hpbGQgPSBsYXN0LT5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICBsYXN0LT5hZGRDaGlsZChj
aGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICAgICAgdG9SZW5kZXJUYWJsZVJvdyhsYXN0KS0+
YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCiAgICAgICAgIGlmIChiZWZvcmVDaGlsZCAmJiAhYmVmb3JlQ2hpbGQtPmlzQW5vbnlt
b3VzKCkgJiYgYmVmb3JlQ2hpbGQtPnBhcmVudCgpID09IHRoaXMpIHsKICAgICAgICAgICAgIFJl
bmRlck9iamVjdCogcm93ID0gYmVmb3JlQ2hpbGQtPnByZXZpb3VzU2libGluZygpOwogICAgICAg
ICAgICAgaWYgKHJvdyAmJiByb3ctPmlzVGFibGVSb3coKSAmJiByb3ctPmlzQW5vbnltb3VzKCkp
IHsKLSAgICAgICAgICAgICAgICByb3ctPmFkZENoaWxkKGNoaWxkKTsKKyAgICAgICAgICAgICAg
ICB0b1JlbmRlclRhYmxlUm93KHJvdyktPmFkZENoaWxkKGNoaWxkKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE1MCwxMSArMTUwLDExIEBA
IHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjphZGRDaGlsZChSZW5kZXIKICAgICAgICAgd2hpbGUg
KGxhc3RCb3ggJiYgbGFzdEJveC0+cGFyZW50KCktPmlzQW5vbnltb3VzKCkgJiYgIWxhc3RCb3gt
PmlzVGFibGVSb3coKSkKICAgICAgICAgICAgIGxhc3RCb3ggPSBsYXN0Qm94LT5wYXJlbnQoKTsK
ICAgICAgICAgaWYgKGxhc3RCb3ggJiYgbGFzdEJveC0+aXNBbm9ueW1vdXMoKSAmJiAhbGFzdEJv
eC0+aXNCZWZvcmVPckFmdGVyQ29udGVudCgpKSB7Ci0gICAgICAgICAgICBsYXN0Qm94LT5hZGRD
aGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICAgICAgdG9SZW5kZXJUYWJsZVJvdyhs
YXN0Qm94KS0+YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCi0gICAgICAgIFJlbmRlck9iamVjdCogcm93ID0gUmVuZGVyVGFibGVS
b3c6OmNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcih0aGlzKTsKKyAgICAgICAgUmVu
ZGVyVGFibGVSb3cqIHJvdyA9IFJlbmRlclRhYmxlUm93OjpjcmVhdGVBbm9ueW1vdXNXaXRoUGFy
ZW50UmVuZGVyZXIodGhpcyk7CiAgICAgICAgIGFkZENoaWxkKHJvdywgYmVmb3JlQ2hpbGQpOwog
ICAgICAgICByb3ctPmFkZENoaWxkKGNoaWxkKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxG
cmFjdGlvbi5jcHAJKHJldmlzaW9uIDE1NjE0MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIs
OSArMTAyLDkgQEAgdm9pZCBSZW5kZXJNYXRoTUxGcmFjdGlvbjo6YWRkQ2hpbGQoUmVuZAogICAg
IH0KICAgICAKICAgICBpZiAoZmlyc3RDaGlsZCgpLT5pc0VtcHR5KCkpCi0gICAgICAgIGZpcnN0
Q2hpbGQoKS0+YWRkQ2hpbGQoY2hpbGQpOworICAgICAgICB0b1JlbmRlckVsZW1lbnQoZmlyc3RD
aGlsZCgpKS0+YWRkQ2hpbGQoY2hpbGQpOwogICAgIGVsc2UKLSAgICAgICAgbGFzdENoaWxkKCkt
PmFkZENoaWxkKGNoaWxkKTsKKyAgICAgICAgdG9SZW5kZXJFbGVtZW50KGxhc3RDaGlsZCgpKS0+
YWRkQ2hpbGQoY2hpbGQpOwogICAgIAogICAgIHVwZGF0ZUZyb21FbGVtZW50KCk7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
Um9vdC5jcHAJKHJldmlzaW9uIDE1NjE0MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw3ICsxNzAs
NyBAQCB2b2lkIFJlbmRlck1hdGhNTFJvb3Q6OmFkZENoaWxkKFJlbmRlck9iCiAgICAgaWYgKG5l
d0NoaWxkLT5zdHlsZSgpLT5wb3NpdGlvbigpID09IEFic29sdXRlUG9zaXRpb24pCiAgICAgICAg
IFJlbmRlck1hdGhNTEJsb2NrOjphZGRDaGlsZChuZXdDaGlsZCk7CiAgICAgZWxzZQotICAgICAg
ICBmaXJzdENoaWxkKCktPmFkZENoaWxkKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCAmJiBiZWZvcmVD
aGlsZC0+cGFyZW50KCkgPT0gZmlyc3RDaGlsZCgpID8gYmVmb3JlQ2hpbGQgOiAwKTsKKyAgICAg
ICAgdG9SZW5kZXJFbGVtZW50KGZpcnN0Q2hpbGQoKSktPmFkZENoaWxkKG5ld0NoaWxkLCBiZWZv
cmVDaGlsZCAmJiBiZWZvcmVDaGlsZC0+cGFyZW50KCkgPT0gZmlyc3RDaGlsZCgpID8gYmVmb3Jl
Q2hpbGQgOiAwKTsKIH0KIAogUmVuZGVyQm94TW9kZWxPYmplY3QqIFJlbmRlck1hdGhNTFJvb3Q6
OmluZGV4KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4
dExheW91dEVuZ2luZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcAkocmV2aXNpb24gMTU2MTQzKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjM3LDggKzIzNyw4IEBAIHZvaWQgU1ZHVGV4dExheW91dEVuZ2luZTo6bGF5b3V0
SW5saW5lVGUKIAogICAgIFJlbmRlclNWR0lubGluZVRleHQmIHRleHQgPSB0ZXh0Qm94LT5yZW5k
ZXJlcigpOwogICAgIEFTU0VSVCh0ZXh0LnBhcmVudCgpKTsKLSAgICBBU1NFUlQodGV4dC5wYXJl
bnQoKS0+bm9kZSgpKTsKLSAgICBBU1NFUlQodGV4dC5wYXJlbnQoKS0+bm9kZSgpLT5pc1NWR0Vs
ZW1lbnQoKSk7CisgICAgQVNTRVJUKHRleHQucGFyZW50KCktPmVsZW1lbnQoKSk7CisgICAgQVNT
RVJUKHRleHQucGFyZW50KCktPmVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCkpOwogCiAgICAgY29u
c3QgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dC5zdHlsZSgpOwogICAgIEFTU0VSVChzdHlsZSk7
CkBAIC00MjcsNyArNDI3LDcgQEAgdm9pZCBTVkdUZXh0TGF5b3V0RW5naW5lOjpsYXlvdXRUZXh0
T25MaQogICAgIGlmIChtX2luUGF0aExheW91dCAmJiBtX3RleHRQYXRoLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgU1ZHRWxlbWVudCogbGVuZ3RoQ29udGV4dCA9IHRvU1ZHRWxl
bWVudCh0ZXh0LT5wYXJlbnQoKS0+bm9kZSgpKTsKKyAgICBTVkdFbGVtZW50KiBsZW5ndGhDb250
ZXh0ID0gdG9TVkdFbGVtZW50KHRleHQtPnBhcmVudCgpLT5lbGVtZW50KCkpOwogICAgIAogICAg
IFJlbmRlck9iamVjdCogdGV4dFBhcmVudCA9IHRleHQtPnBhcmVudCgpOwogICAgIGJvb2wgZGVm
aW5lc1RleHRMZW5ndGggPSB0ZXh0UGFyZW50ID8gcGFyZW50RGVmaW5lc1RleHRMZW5ndGgodGV4
dFBhcmVudCkgOiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2
ZVRyZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2
ZVRyZWUuY3BwCShyZXZpc2lvbiAxNTYxNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHls
ZVJlc29sdmVUcmVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUsOSBAQAogI2luY2x1
ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJpbmdUcmF2ZXJzYWwu
aCIKICNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCisjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5o
IgogI2luY2x1ZGUgIlJlbmRlckZ1bGxTY3JlZW4uaCIKICNpbmNsdWRlICJSZW5kZXJOYW1lZEZs
b3dUaHJlYWQuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJU
ZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5o
IgpAQCAtMjIwLDE3ICsyMjAsMTggQEAgc3RhdGljIHZvaWQgY3JlYXRlUmVuZGVyZXJJZk5lZWRl
ZChFbGVtZQogICAgIGlmICghZWxlbWVudC5yZW5kZXJlcklzTmVlZGVkKCpzdHlsZSkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFJlbmRlck9iamVjdCogcGFyZW50UmVuZGVyZXI7CisgICAgUmVu
ZGVyRWxlbWVudCogcGFyZW50UmVuZGVyZXI7CiAgICAgUmVuZGVyT2JqZWN0KiBuZXh0UmVuZGVy
ZXI7CiAgICAgaWYgKHBhcmVudEZsb3dSZW5kZXJlcikgewogICAgICAgICBwYXJlbnRSZW5kZXJl
ciA9IHBhcmVudEZsb3dSZW5kZXJlcjsKICAgICAgICAgbmV4dFJlbmRlcmVyID0gcGFyZW50Rmxv
d1JlbmRlcmVyLT5uZXh0UmVuZGVyZXJGb3JOb2RlKCZlbGVtZW50KTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBwYXJlbnRSZW5kZXJlciA9IHJlbmRlcmluZ1BhcmVudE5vZGUtPnJlbmRlcmVyKCk7
CisgICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgcGF0aCBFbGVtZW50IG9ubHksIGhhbmRsZSB0
aGUgcm9vdCBzcGVjaWFsIGNhc2Ugc2VwYXJhdGVseS4KKyAgICAgICAgcGFyZW50UmVuZGVyZXIg
PSB0b1JlbmRlckVsZW1lbnQocmVuZGVyaW5nUGFyZW50Tm9kZS0+cmVuZGVyZXIoKSk7CiAgICAg
ICAgIG5leHRSZW5kZXJlciA9IG5leHRTaWJsaW5nUmVuZGVyZXIoZWxlbWVudCwgcmVuZGVyaW5n
UGFyZW50Tm9kZSk7CiAgICAgfQogCi0gICAgUmVuZGVyT2JqZWN0KiBuZXdSZW5kZXJlciA9IGVs
ZW1lbnQuY3JlYXRlUmVuZGVyZXIoKmRvY3VtZW50LnJlbmRlckFyZW5hKCksICpzdHlsZSk7Cisg
ICAgUmVuZGVyRWxlbWVudCogbmV3UmVuZGVyZXIgPSBlbGVtZW50LmNyZWF0ZVJlbmRlcmVyKCpk
b2N1bWVudC5yZW5kZXJBcmVuYSgpLCAqc3R5bGUpOwogICAgIGlmICghbmV3UmVuZGVyZXIpCiAg
ICAgICAgIHJldHVybjsKICAgICBpZiAoIXBhcmVudFJlbmRlcmVyLT5pc0NoaWxkQWxsb3dlZChu
ZXdSZW5kZXJlciwgc3R5bGUuZ2V0KCkpKSB7CkBAIC0zNTgsNyArMzU5LDcgQEAgc3RhdGljIHZv
aWQgY3JlYXRlVGV4dFJlbmRlcmVySWZOZWVkZWQoVAogICAgIENvbnRhaW5lck5vZGUqIHJlbmRl
cmluZ1BhcmVudE5vZGUgPSBOb2RlUmVuZGVyaW5nVHJhdmVyc2FsOjpwYXJlbnQoJnRleHROb2Rl
KTsKICAgICBpZiAoIXJlbmRlcmluZ1BhcmVudE5vZGUpCiAgICAgICAgIHJldHVybjsKLSAgICBS
ZW5kZXJPYmplY3QqIHBhcmVudFJlbmRlcmVyID0gcmVuZGVyaW5nUGFyZW50Tm9kZS0+cmVuZGVy
ZXIoKTsKKyAgICBSZW5kZXJFbGVtZW50KiBwYXJlbnRSZW5kZXJlciA9IHRvUmVuZGVyRWxlbWVu
dChyZW5kZXJpbmdQYXJlbnROb2RlLT5yZW5kZXJlcigpKTsKICAgICBpZiAoIXBhcmVudFJlbmRl
cmVyIHx8ICFwYXJlbnRSZW5kZXJlci0+Y2FuSGF2ZUNoaWxkcmVuKCkpCiAgICAgICAgIHJldHVy
bjsKICAgICBpZiAoIXJlbmRlcmluZ1BhcmVudE5vZGUtPmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVy
ZXIoJnRleHROb2RlKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcAkocmV2aXNp
b24gMTU2MTQzKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAjaW5jbHVk
ZSAiU1ZHRm9udERhdGEuaCIKIAotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUg
IlJlbmRlckVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdBbHRHbHlwaEVsZW1lbnQuaCIKICNpbmNs
dWRlICJTVkdGb250RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0ZvbnRGYWNlRWxlbWVudC5oIgpA
QCAtMTY2LDE1ICsxNjYsMTUgQEAgYm9vbCBTVkdGb250RGF0YTo6YXBwbHlTVkdHbHlwaFNlbGVj
dGlvbgogICAgIFZlY3RvcjxTdHJpbmc+IGFsdEdseXBoTmFtZXM7CiAKICAgICBpZiAocmVuZGVy
T2JqZWN0KSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50UmVuZGVyT2JqZWN0ID0gcmVu
ZGVyT2JqZWN0LT5pc1RleHQoKSA/IHJlbmRlck9iamVjdC0+cGFyZW50KCkgOiByZW5kZXJPYmpl
Y3Q7Ci0gICAgICAgIEFTU0VSVChwYXJlbnRSZW5kZXJPYmplY3QpOworICAgICAgICBSZW5kZXJF
bGVtZW50KiBwYXJlbnRSZW5kZXJlciA9IHJlbmRlck9iamVjdC0+aXNSZW5kZXJFbGVtZW50KCkg
PyB0b1JlbmRlckVsZW1lbnQocmVuZGVyT2JqZWN0KSA6IHJlbmRlck9iamVjdC0+cGFyZW50KCk7
CisgICAgICAgIEFTU0VSVChwYXJlbnRSZW5kZXJlcik7CiAKLSAgICAgICAgaXNWZXJ0aWNhbFRl
eHQgPSBwYXJlbnRSZW5kZXJPYmplY3QtPnN0eWxlKCktPnN2Z1N0eWxlKCktPmlzVmVydGljYWxX
cml0aW5nTW9kZSgpOwotICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50UmVuZGVyT2JqZWN0RWxl
bWVudCA9IHRvRWxlbWVudChwYXJlbnRSZW5kZXJPYmplY3QtPm5vZGUoKSkpIHsKLSAgICAgICAg
ICAgIGxhbmd1YWdlID0gcGFyZW50UmVuZGVyT2JqZWN0RWxlbWVudC0+Z2V0QXR0cmlidXRlKFhN
TE5hbWVzOjpsYW5nQXR0cik7CisgICAgICAgIGlzVmVydGljYWxUZXh0ID0gcGFyZW50UmVuZGVy
ZXItPnN0eWxlKCktPnN2Z1N0eWxlKCktPmlzVmVydGljYWxXcml0aW5nTW9kZSgpOworICAgICAg
ICBpZiAoRWxlbWVudCogcGFyZW50UmVuZGVyZXJFbGVtZW50ID0gcGFyZW50UmVuZGVyZXItPmVs
ZW1lbnQoKSkgeworICAgICAgICAgICAgbGFuZ3VhZ2UgPSBwYXJlbnRSZW5kZXJlckVsZW1lbnQt
PmdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpOwogCi0gICAgICAgICAgICBpZiAoaXNT
VkdBbHRHbHlwaEVsZW1lbnQocGFyZW50UmVuZGVyT2JqZWN0RWxlbWVudCkpIHsKLSAgICAgICAg
ICAgICAgICBTVkdBbHRHbHlwaEVsZW1lbnQqIGFsdEdseXBoID0gdG9TVkdBbHRHbHlwaEVsZW1l
bnQocGFyZW50UmVuZGVyT2JqZWN0RWxlbWVudCk7CisgICAgICAgICAgICBpZiAoaXNTVkdBbHRH
bHlwaEVsZW1lbnQocGFyZW50UmVuZGVyZXJFbGVtZW50KSkgeworICAgICAgICAgICAgICAgIFNW
R0FsdEdseXBoRWxlbWVudCogYWx0R2x5cGggPSB0b1NWR0FsdEdseXBoRWxlbWVudChwYXJlbnRS
ZW5kZXJlckVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGlmICghYWx0R2x5cGgtPmhhc1ZhbGlk
R2x5cGhFbGVtZW50cyhhbHRHbHlwaE5hbWVzKSkKICAgICAgICAgICAgICAgICAgICAgYWx0R2x5
cGhOYW1lcy5jbGVhcigpOwogICAgICAgICAgICAgfQo=
</data>
<flag name="commit-queue"
          id="234306"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212148</attachid>
            <date>2013-09-20 04:29:35 -0700</date>
            <delta_ts>2013-09-20 04:35:27 -0700</delta_ts>
            <desc>another</desc>
            <filename>renderelement-parent-3.patch</filename>
            <type>text/plain</type>
            <size>44446</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjE0NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEzLTA5LTIwICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIFJlbmRlck9iamVjdDo6
cGFyZW50KCkgcmV0dXJuIFJlbmRlckVsZW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTY3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgUmVuZGVyT2JqZWN0OjpwYXJlbnQoKSByZXR1cm4g
UmVuZGVyRWxlbWVudCBhbmQgYWRvcHQgZXZlcnl3aGVyZS4KKyAgICAgICAgTW92ZWQgYWRkQ2hp
bGQvcmVtb3ZlQ2hpbGQgZnJvbSBSZW5kZXJPYmplY3QgdG8gUmVuZGVyRWxlbWVudC4KKyAgICAg
ICAgVW5pbmxpbmVkIGEgZmV3IGJpZyBSZW5kZXJPYmplY3QgZnVuY3Rpb25zLgorICAgICAgICBS
ZW5hbWVkIFJlbmRlck9iamVjdDo6cmVtb3ZlKCkgLT4gUmVuZGVyT2JqZWN0OjpyZW1vdmVGcm9t
UGFyZW50KCkKKwogMjAxMy0wOS0yMCAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+
CiAKICAgICAgICAgTWFrZSBjcmVhdGVSZW5kZXJlcigpIHJldHVybiBSZW5kZXJFbGVtZW50Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkocmV2aXNpb24gMTU2MTQz
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDcgKzQ2LDcgQEAKICNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVk
ZSAiUG9zaXRpb25JdGVyYXRvci5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgogI2luY2x1ZGUgIlNoYWRv
d1Jvb3QuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JMYXllclRy
ZWVBZ2VudC5jcHAJKHJldmlzaW9uIDE1NjE0MykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MCwxMSAr
MTcwLDExIEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkxheWVyVHJlZTo6TGF5ZXIKICAgICBp
ZiAocmVuZGVyZXItPmlzUmVuZGVyVmlldygpKQogICAgICAgICBub2RlID0gJnJlbmRlcmVyLT5k
b2N1bWVudCgpOwogICAgIGVsc2UgaWYgKGlzUmVmbGVjdGlvbiAmJiBpc0dlbmVyYXRlZCkKLSAg
ICAgICAgbm9kZSA9IHJlbmRlcmVyLT5wYXJlbnQoKS0+Z2VuZXJhdGluZ05vZGUoKTsKKyAgICAg
ICAgbm9kZSA9IHJlbmRlcmVyLT5wYXJlbnQoKS0+Z2VuZXJhdGluZ0VsZW1lbnQoKTsKICAgICBl
bHNlIGlmIChpc0dlbmVyYXRlZCkKICAgICAgICAgbm9kZSA9IHJlbmRlcmVyLT5nZW5lcmF0aW5n
Tm9kZSgpOwogICAgIGVsc2UgaWYgKGlzUmVmbGVjdGlvbiB8fCBpc0Fub255bW91cykKLSAgICAg
ICAgbm9kZSA9IHJlbmRlcmVyLT5wYXJlbnQoKS0+bm9kZSgpOworICAgICAgICBub2RlID0gcmVu
ZGVyZXItPnBhcmVudCgpLT5lbGVtZW50KCk7CiAKICAgICAvLyBCYXNpYyBzZXQgb2YgcHJvcGVy
dGllcy4KICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkxheWVyVHJlZTo6TGF5ZXI+IGxheWVyT2Jq
ZWN0ID0gVHlwZUJ1aWxkZXI6OkxheWVyVHJlZTo6TGF5ZXI6OmNyZWF0ZSgpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDE1NjE0MykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc1Niw3ICs3NTYsNyBAQCBSZW5kZXJCbG9jayogUmVuZGVyQmxvY2s6OmNvbHVtbnNCbG9j
a0ZvCiB2b2lkIFJlbmRlckJsb2NrOjphZGRDaGlsZElnbm9yaW5nQW5vbnltb3VzQ29sdW1uQmxv
Y2tzKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7
CiAgICAgaWYgKGJlZm9yZUNoaWxkICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSAhPSB0aGlzKSB7
Ci0gICAgICAgIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGRDb250YWluZXIgPSBiZWZvcmVDaGls
ZC0+cGFyZW50KCk7CisgICAgICAgIFJlbmRlckVsZW1lbnQqIGJlZm9yZUNoaWxkQ29udGFpbmVy
ID0gYmVmb3JlQ2hpbGQtPnBhcmVudCgpOwogICAgICAgICB3aGlsZSAoYmVmb3JlQ2hpbGRDb250
YWluZXItPnBhcmVudCgpICE9IHRoaXMpCiAgICAgICAgICAgICBiZWZvcmVDaGlsZENvbnRhaW5l
ciA9IGJlZm9yZUNoaWxkQ29udGFpbmVyLT5wYXJlbnQoKTsKICAgICAgICAgQVNTRVJUKGJlZm9y
ZUNoaWxkQ29udGFpbmVyKTsKQEAgLTc2NCw3ICs3NjQsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjph
ZGRDaGlsZElnbm9yaW5nQW5vbnltCiAgICAgICAgIGlmIChiZWZvcmVDaGlsZENvbnRhaW5lci0+
aXNBbm9ueW1vdXMoKSkgewogICAgICAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3RlZCBiZWZvcmVD
aGlsZCBpcyBub3Qgb25lIG9mIG91ciBjaGlsZHJlbiwgdGhlbiB0aGlzIGlzIGJlY2F1c2UKICAg
ICAgICAgICAgIC8vIHRoZXJlIGlzIGFuIGFub255bW91cyBjb250YWluZXIgd2l0aGluIHRoaXMg
b2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGJlZm9yZUNoaWxkLgotICAgICAgICAgICAgUmVuZGVy
T2JqZWN0KiBiZWZvcmVDaGlsZEFub255bW91c0NvbnRhaW5lciA9IGJlZm9yZUNoaWxkQ29udGFp
bmVyOworICAgICAgICAgICAgUmVuZGVyRWxlbWVudCogYmVmb3JlQ2hpbGRBbm9ueW1vdXNDb250
YWluZXIgPSBiZWZvcmVDaGlsZENvbnRhaW5lcjsKICAgICAgICAgICAgIGlmIChiZWZvcmVDaGls
ZEFub255bW91c0NvbnRhaW5lci0+aXNBbm9ueW1vdXNCbG9jaygpCiAjaWYgRU5BQkxFKEZVTExT
Q1JFRU5fQVBJKQogICAgICAgICAgICAgICAgIC8vIEZ1bGwgc2NyZWVuIHJlbmRlcmVycyBhbmQg
ZnVsbCBzY3JlZW4gcGxhY2Vob2xkZXJzIGFjdCBhcyBhbm9ueW1vdXMgYmxvY2tzLCBub3QgdGFi
bGVzOgpAQCAtODYxLDcgKzg2MSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZENoaWxkSWdub3Jp
bmdBbm9ueW0KICAgICAgICAgUmVuZGVyT2JqZWN0KiBhZnRlckNoaWxkID0gYmVmb3JlQ2hpbGQg
PyBiZWZvcmVDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgOiBsYXN0Q2hpbGQoKTsKIAogICAgICAg
ICBpZiAoYWZ0ZXJDaGlsZCAmJiBhZnRlckNoaWxkLT5pc0Fub255bW91c0Jsb2NrKCkpIHsKLSAg
ICAgICAgICAgIGFmdGVyQ2hpbGQtPmFkZENoaWxkKG5ld0NoaWxkKTsKKyAgICAgICAgICAgIHRv
UmVuZGVyQmxvY2soYWZ0ZXJDaGlsZCktPmFkZENoaWxkKG5ld0NoaWxkKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogCkBAIC0xNzg4LDE1ICsxNzg4LDE2IEBAIHZvaWQgUmVuZGVy
QmxvY2s6Om1vdmVSdW5JblVuZGVyU2libGluZ0IKICAgICBpZiAoIWN1cnIgfHwgIWN1cnItPmlz
UmVuZGVyQmxvY2soKSB8fCAhY3Vyci0+Y2hpbGRyZW5JbmxpbmUoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKHRvUmVuZGVyQmxvY2soY3VyciktPmJlaW5nRGVzdHJveWVkKCkpCisgICAg
UmVuZGVyQmxvY2smIG5leHRTaWJsaW5nQmxvY2sgPSB0b1JlbmRlckJsb2NrKCpjdXJyKTsKKyAg
ICBpZiAobmV4dFNpYmxpbmdCbG9jay5iZWluZ0Rlc3Ryb3llZCgpKQogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBQZXIgQ1NTMywgIkEgcnVuLWluIGNhbm5vdCBydW4gaW4gdG8gYSBibG9jayB0
aGF0IGFscmVhZHkgc3RhcnRzIHdpdGggYQogICAgIC8vIHJ1bi1pbiBvciB0aGF0IGl0c2VsZiBp
cyBhIHJ1bi1pbiIuCi0gICAgaWYgKGN1cnItPmlzUnVuSW4oKSB8fCAoY3Vyci0+Zmlyc3RDaGls
ZCgpICYmIGN1cnItPmZpcnN0Q2hpbGQoKS0+aXNSdW5JbigpKSkKKyAgICBpZiAobmV4dFNpYmxp
bmdCbG9jay5pc1J1bkluKCkgfHwgKG5leHRTaWJsaW5nQmxvY2suZmlyc3RDaGlsZCgpICYmIG5l
eHRTaWJsaW5nQmxvY2suZmlyc3RDaGlsZCgpLT5pc1J1bkluKCkpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAoY3Vyci0+aXNBbm9ueW1vdXMoKSB8fCBjdXJyLT5pc0Zsb2F0aW5nT3JPdXRP
ZkZsb3dQb3NpdGlvbmVkKCkpCisgICAgaWYgKG5leHRTaWJsaW5nQmxvY2suaXNBbm9ueW1vdXMo
KSB8fCBuZXh0U2libGluZ0Jsb2NrLmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIG9sZFJ1bkluID0g
dG9SZW5kZXJCb3hNb2RlbE9iamVjdChydW5Jbik7CkBAIC0xODA2LDEwICsxODA3LDEwIEBAIHZv
aWQgUmVuZGVyQmxvY2s6Om1vdmVSdW5JblVuZGVyU2libGluZ0IKICAgICAvLyBOb3cgaW5zZXJ0
IHRoZSBuZXcgY2hpbGQgdW5kZXIgfGN1cnJ8IGJsb2NrLiBVc2UgYWRkQ2hpbGQgaW5zdGVhZCBv
ZiBpbnNlcnRDaGlsZE5vZGUKICAgICAvLyBzaW5jZSBpdCBoYW5kbGVzIGNvcnJlY3QgcGxhY2Vt
ZW50IG9mIHRoZSBjaGlsZHJlbiwgZXNwZWNpYWxseSB3aGVyZSB3ZSBjYW5ub3QgaW5zZXJ0CiAg
ICAgLy8gYW55dGhpbmcgYmVmb3JlIHRoZSBmaXJzdCBjaGlsZC4gZS5nLiBkZXRhaWxzIHRhZy4g
U2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODIyOC4KLSAgICBj
dXJyLT5hZGRDaGlsZChuZXdSdW5JbiwgY3Vyci0+Zmlyc3RDaGlsZCgpKTsKKyAgICBuZXh0U2li
bGluZ0Jsb2NrLmFkZENoaWxkKG5ld1J1bkluLCBuZXh0U2libGluZ0Jsb2NrLmZpcnN0Q2hpbGQo
KSk7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCB8dGhpc3wgZ2V0IGEgbGF5b3V0IHNpbmNlIGl0
cyBydW4taW4gY2hpbGQgbW92ZWQuCi0gICAgY3Vyci0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lk
dGhzUmVjYWxjKCk7CisgICAgbmV4dFNpYmxpbmdCbG9jay5zZXROZWVkc0xheW91dEFuZFByZWZX
aWR0aHNSZWNhbGMoKTsKIH0KIAogYm9vbCBSZW5kZXJCbG9jazo6cnVuSW5Jc1BsYWNlZEludG9T
aWJsaW5nQmxvY2soUmVuZGVyT2JqZWN0KiBydW5JbikKQEAgLTU4MDQsOCArNTgwNSw4IEBAIHN0
YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBmaW5kRmlyc3RMZXQKIAogdm9pZCBSZW5kZXJCbG9j
azo6dXBkYXRlRmlyc3RMZXR0ZXJTdHlsZShSZW5kZXJPYmplY3QqIGZpcnN0TGV0dGVyQmxvY2ss
IFJlbmRlck9iamVjdCogY3VycmVudENoaWxkKQogewotICAgIFJlbmRlck9iamVjdCogZmlyc3RM
ZXR0ZXIgPSBjdXJyZW50Q2hpbGQtPnBhcmVudCgpOwotICAgIFJlbmRlck9iamVjdCogZmlyc3RM
ZXR0ZXJDb250YWluZXIgPSBmaXJzdExldHRlci0+cGFyZW50KCk7CisgICAgUmVuZGVyRWxlbWVu
dCogZmlyc3RMZXR0ZXIgPSBjdXJyZW50Q2hpbGQtPnBhcmVudCgpOworICAgIFJlbmRlckVsZW1l
bnQqIGZpcnN0TGV0dGVyQ29udGFpbmVyID0gZmlyc3RMZXR0ZXItPnBhcmVudCgpOwogICAgIFJl
bmRlclN0eWxlKiBwc2V1ZG9TdHlsZSA9IHN0eWxlRm9yRmlyc3RMZXR0ZXIoZmlyc3RMZXR0ZXJC
bG9jaywgZmlyc3RMZXR0ZXJDb250YWluZXIpOwogICAgIEFTU0VSVChmaXJzdExldHRlci0+aXNG
bG9hdGluZygpIHx8IGZpcnN0TGV0dGVyLT5pc0lubGluZSgpKTsKIApAQCAtNTg1MSw5ICs1ODUy
LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlRmlyc3RMZXR0ZXJTdHlsZQogCiB2b2lkIFJl
bmRlckJsb2NrOjpjcmVhdGVGaXJzdExldHRlclJlbmRlcmVyKFJlbmRlck9iamVjdCogZmlyc3RM
ZXR0ZXJCbG9jaywgUmVuZGVyVGV4dCogY3VycmVudFRleHRDaGlsZCkKIHsKLSAgICBSZW5kZXJP
YmplY3QqIGZpcnN0TGV0dGVyQ29udGFpbmVyID0gY3VycmVudFRleHRDaGlsZC0+cGFyZW50KCk7
CisgICAgUmVuZGVyRWxlbWVudCogZmlyc3RMZXR0ZXJDb250YWluZXIgPSBjdXJyZW50VGV4dENo
aWxkLT5wYXJlbnQoKTsKICAgICBSZW5kZXJTdHlsZSogcHNldWRvU3R5bGUgPSBzdHlsZUZvckZp
cnN0TGV0dGVyKGZpcnN0TGV0dGVyQmxvY2ssIGZpcnN0TGV0dGVyQ29udGFpbmVyKTsKLSAgICBS
ZW5kZXJPYmplY3QqIGZpcnN0TGV0dGVyID0gMDsKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCog
Zmlyc3RMZXR0ZXIgPSAwOwogICAgIGlmIChwc2V1ZG9TdHlsZS0+ZGlzcGxheSgpID09IElOTElO
RSkKICAgICAgICAgZmlyc3RMZXR0ZXIgPSBSZW5kZXJJbmxpbmU6OmNyZWF0ZUFub255bW91cyhk
b2N1bWVudCgpKTsKICAgICBlbHNlCkBAIC01OTA0LDcgKzU5MDUsNyBAQCB2b2lkIFJlbmRlckJs
b2NrOjpjcmVhdGVGaXJzdExldHRlclJlbmRlCiAgICAgICAgIGZpcnN0TGV0dGVyQ29udGFpbmVy
LT5hZGRDaGlsZChyZW1haW5pbmdUZXh0LCBjdXJyZW50VGV4dENoaWxkKTsKICAgICAgICAgZmly
c3RMZXR0ZXJDb250YWluZXItPnJlbW92ZUNoaWxkKGN1cnJlbnRUZXh0Q2hpbGQpOwogICAgICAg
ICByZW1haW5pbmdUZXh0LT5zZXRGaXJzdExldHRlcihmaXJzdExldHRlcik7Ci0gICAgICAgIHRv
UmVuZGVyQm94TW9kZWxPYmplY3QoZmlyc3RMZXR0ZXIpLT5zZXRGaXJzdExldHRlclJlbWFpbmlu
Z1RleHQocmVtYWluaW5nVGV4dCk7CisgICAgICAgIGZpcnN0TGV0dGVyLT5zZXRGaXJzdExldHRl
clJlbWFpbmluZ1RleHQocmVtYWluaW5nVGV4dCk7CiAgICAgICAgIAogICAgICAgICAvLyBjb25z
dHJ1Y3QgdGV4dCBmcmFnbWVudCBmb3IgdGhlIGZpcnN0IGxldHRlcgogICAgICAgICBSZW5kZXJU
ZXh0RnJhZ21lbnQqIGxldHRlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJDb21iaW5lVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJDb21iaW5lVGV4dC5oCShyZXZpc2lvbiAxNTYxNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIs
NyBAQAogI2RlZmluZSBSZW5kZXJDb21iaW5lVGV4dF9oCiAKICNpbmNsdWRlICJGb250LmgiCisj
aW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKICNpbmNs
dWRlICJUZXh0LmgiCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxl
bWVudC5jcHAJKHJldmlzaW9uIDE1NjE0MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1
ZGUgIlJlbmRlckdyaWQuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJl
bmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1u
QmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKQEAgLTQwLDYgKzQxLDggQEAKICNp
bmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNvbC5oIgog
I2luY2x1ZGUgIlJlbmRlclRhYmxlUm93LmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgorI2lu
Y2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0x
MjcsOCArMTMwLDY3IEBAIFJlbmRlckVsZW1lbnQqIFJlbmRlckVsZW1lbnQ6OmNyZWF0ZUZvcigK
ICAgICBjYXNlIElOTElORV9HUklEOgogICAgICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVy
R3JpZChlbGVtZW50KTsKICAgICB9Ci0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAordm9pZCBSZW5kZXJFbGVtZW50OjphZGRDaGlsZChSZW5kZXJP
YmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQoreworICAgIEFTU0VS
VChjaGlsZHJlbigpKTsKKyAgICBSZW5kZXJPYmplY3RDaGlsZExpc3QmIGNoaWxkcmVuID0gKnRo
aXMtPmNoaWxkcmVuKCk7CisKKyAgICBib29sIG5lZWRzVGFibGUgPSBmYWxzZTsKKworICAgIGlm
IChuZXdDaGlsZC0+aXNSZW5kZXJUYWJsZUNvbCgpKSB7CisgICAgICAgIFJlbmRlclRhYmxlQ29s
KiBuZXdUYWJsZUNvbHVtbiA9IHRvUmVuZGVyVGFibGVDb2wobmV3Q2hpbGQpOworICAgICAgICBi
b29sIGlzQ29sdW1uSW5Db2x1bW5Hcm91cCA9IG5ld1RhYmxlQ29sdW1uLT5pc1RhYmxlQ29sdW1u
KCkgJiYgaXNSZW5kZXJUYWJsZUNvbCgpOworICAgICAgICBuZWVkc1RhYmxlID0gIWlzVGFibGUo
KSAmJiAhaXNDb2x1bW5JbkNvbHVtbkdyb3VwOworICAgIH0gZWxzZSBpZiAobmV3Q2hpbGQtPmlz
VGFibGVDYXB0aW9uKCkpCisgICAgICAgIG5lZWRzVGFibGUgPSAhaXNUYWJsZSgpOworICAgIGVs
c2UgaWYgKG5ld0NoaWxkLT5pc1RhYmxlU2VjdGlvbigpKQorICAgICAgICBuZWVkc1RhYmxlID0g
IWlzVGFibGUoKTsKKyAgICBlbHNlIGlmIChuZXdDaGlsZC0+aXNUYWJsZVJvdygpKQorICAgICAg
ICBuZWVkc1RhYmxlID0gIWlzVGFibGVTZWN0aW9uKCk7CisgICAgZWxzZSBpZiAobmV3Q2hpbGQt
PmlzVGFibGVDZWxsKCkpCisgICAgICAgIG5lZWRzVGFibGUgPSAhaXNUYWJsZVJvdygpOworCisg
ICAgaWYgKG5lZWRzVGFibGUpIHsKKyAgICAgICAgUmVuZGVyVGFibGUqIHRhYmxlOworICAgICAg
ICBSZW5kZXJPYmplY3QqIGFmdGVyQ2hpbGQgPSBiZWZvcmVDaGlsZCA/IGJlZm9yZUNoaWxkLT5w
cmV2aW91c1NpYmxpbmcoKSA6IGNoaWxkcmVuLmxhc3RDaGlsZCgpOworICAgICAgICBpZiAoYWZ0
ZXJDaGlsZCAmJiBhZnRlckNoaWxkLT5pc0Fub255bW91cygpICYmIGFmdGVyQ2hpbGQtPmlzVGFi
bGUoKSAmJiAhYWZ0ZXJDaGlsZC0+aXNCZWZvcmVDb250ZW50KCkpCisgICAgICAgICAgICB0YWJs
ZSA9IHRvUmVuZGVyVGFibGUoYWZ0ZXJDaGlsZCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgdGFibGUgPSBSZW5kZXJUYWJsZTo6Y3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVy
KHRoaXMpOworICAgICAgICAgICAgYWRkQ2hpbGQodGFibGUsIGJlZm9yZUNoaWxkKTsKKyAgICAg
ICAgfQorICAgICAgICB0YWJsZS0+YWRkQ2hpbGQobmV3Q2hpbGQpOworICAgIH0gZWxzZQorICAg
ICAgICBjaGlsZHJlbi5pbnNlcnRDaGlsZE5vZGUodGhpcywgbmV3Q2hpbGQsIGJlZm9yZUNoaWxk
KTsKKworICAgIGlmIChuZXdDaGlsZC0+aXNUZXh0KCkgJiYgbmV3Q2hpbGQtPnN0eWxlKCktPnRl
eHRUcmFuc2Zvcm0oKSA9PSBDQVBJVEFMSVpFKQorICAgICAgICB0b1JlbmRlclRleHQobmV3Q2hp
bGQpLT50cmFuc2Zvcm1UZXh0KCk7CisKKyAgICAvLyBTVkcgY3JlYXRlcyByZW5kZXJlcnMgZm9y
IDxnIGRpc3BsYXk9Im5vbmUiPiwgYXMgU1ZHIHJlcXVpcmVzIGNoaWxkcmVuIG9mIGhpZGRlbgor
ICAgIC8vIDxnPnMgdG8gaGF2ZSByZW5kZXJlcnMgLSBhdCBsZWFzdCB0aGF0J3MgaG93IG91ciBp
bXBsZW1lbnRhdGlvbiB3b3Jrcy4gQ29uc2lkZXI6CisgICAgLy8gPGcgZGlzcGxheT0ibm9uZSI+
PGZvcmVpZ25PYmplY3Q+PGJvZHkgc3R5bGU9InBvc2l0aW9uOiByZWxhdGl2ZSI+Rk9PLi4uCisg
ICAgLy8gLSByZXF1aXJlc0xheWVyKCkgd291bGQgcmV0dXJuIHRydWUgZm9yIHRoZSA8Ym9keT4s
IGNyZWF0aW5nIGEgbmV3IFJlbmRlckxheWVyCisgICAgLy8gLSB3aGVuIHRoZSBkb2N1bWVudCBp
cyBwYWludGVkLCBib3RoIGxheWVycyBhcmUgcGFpbnRlZC4gVGhlIDxib2R5PiBsYXllciBkb2Vz
bid0CisgICAgLy8gICBrbm93IHRoYXQgaXQncyBpbnNpZGUgYSAiaGlkZGVuIFNWRyBzdWJ0cmVl
IiwgYW5kIHRodXMgcGFpbnRzLCBldmVuIGlmIGl0IHNob3VsZG4ndC4KKyAgICAvLyBUbyBhdm9p
ZCB0aGUgcHJvYmxlbSBhbGx0b2dldGhlciwgZGV0ZWN0IGVhcmx5IGlmIHdlJ3JlIGluc2lkZSBh
IGhpZGRlbiBTVkcgc3VidHJlZQorICAgIC8vIGFuZCBzdG9wIGNyZWF0aW5nIGxheWVycyBhdCBh
bGwgZm9yIHRoZXNlIGNhc2VzIC0gdGhleSdyZSBub3QgdXNlZCBhbnl3YXlzLgorICAgIGlmIChu
ZXdDaGlsZC0+aGFzTGF5ZXIoKSAmJiAhbGF5ZXJDcmVhdGlvbkFsbG93ZWRGb3JTdWJ0cmVlKCkp
CisgICAgICAgIHRvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdChuZXdDaGlsZCktPmxheWVyKCktPnJl
bW92ZU9ubHlUaGlzTGF5ZXIoKTsKKworI2lmIEVOQUJMRShTVkcpCisgICAgU1ZHUmVuZGVyU3Vw
cG9ydDo6Y2hpbGRBZGRlZCh0aGlzLCBuZXdDaGlsZCk7CisjZW5kaWYKK30KKwordm9pZCBSZW5k
ZXJFbGVtZW50OjpyZW1vdmVDaGlsZChSZW5kZXJPYmplY3QqIG9sZENoaWxkKQoreworICAgIEFT
U0VSVChjaGlsZHJlbigpKTsKKyAgICBjaGlsZHJlbigpLT5yZW1vdmVDaGlsZE5vZGUodGhpcywg
b2xkQ2hpbGQpOworfQorCisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckVsZW1lbnQuaAkocmV2aXNpb24gMTU2MTQ0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsMTEgQEAgcHVibGlj
OgogICAgIEVsZW1lbnQqIG5vblBzZXVkb0VsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0b0VsZW1l
bnQoUmVuZGVyT2JqZWN0Ojpub25Qc2V1ZG9Ob2RlKCkpOyB9CiAgICAgRWxlbWVudCogZ2VuZXJh
dGluZ0VsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0b0VsZW1lbnQoUmVuZGVyT2JqZWN0OjpnZW5l
cmF0aW5nTm9kZSgpKTsgfQogCisgICAgdmlydHVhbCBib29sIGlzQ2hpbGRBbGxvd2VkKFJlbmRl
ck9iamVjdCosIFJlbmRlclN0eWxlKikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1
YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkID0gMCk7CisgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkSWdub3JpbmdDb250aW51
YXRpb24oUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9
IDApIHsgcmV0dXJuIGFkZENoaWxkKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0Kik7CisKIHByb3RlY3RlZDoKICAgICBl
eHBsaWNpdCBSZW5kZXJFbGVtZW50KEVsZW1lbnQqKTsKIApAQCAtNDUsNiArNTAsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgbm9kZSgpIGNvbnN0IFdURl9ERUxFVEVEX0ZVTkNUSU9OOwogICAgIHZv
aWQgbm9uUHNldWRvTm9kZSgpIGNvbnN0IFdURl9ERUxFVEVEX0ZVTkNUSU9OOwogICAgIHZvaWQg
Z2VuZXJhdGluZ05vZGUoKSBjb25zdCBXVEZfREVMRVRFRF9GVU5DVElPTjsKKyAgICB2b2lkIGlz
VGV4dCgpIGNvbnN0IFdURl9ERUxFVEVEX0ZVTkNUSU9OOwogfTsKIAogaW5saW5lIFJlbmRlckVs
ZW1lbnQmIHRvUmVuZGVyRWxlbWVudChSZW5kZXJPYmplY3QmIG9iamVjdCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5jcHAJKHJldmlzaW9uIDE1
NjE0MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNyBAQCBSZW5kZXJGdWxsU2NyZWVuKiBSZW5kZXJG
dWxsU2NyZWVuOjpjcmVhCiB2b2lkIFJlbmRlckZ1bGxTY3JlZW46OndpbGxCZURlc3Ryb3llZCgp
CiB7CiAgICAgaWYgKG1fcGxhY2Vob2xkZXIpIHsKLSAgICAgICAgcmVtb3ZlKCk7CisgICAgICAg
IHJlbW92ZUZyb21QYXJlbnQoKTsKICAgICAgICAgaWYgKCFtX3BsYWNlaG9sZGVyLT5iZWluZ0Rl
c3Ryb3llZCgpKQogICAgICAgICAgICAgbV9wbGFjZWhvbGRlci0+ZGVzdHJveSgpOwogICAgICAg
ICBBU1NFUlQoIW1fcGxhY2Vob2xkZXIpOwpAQCAtMTE0LDcgKzExNCw3IEBAIHN0YXRpYyBQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBjcmVhdGVGdWwKICAgICByZXR1cm4gZnVsbHNjcmVlblN0eWxl
LnJlbGVhc2UoKTsKIH0KIAotUmVuZGVyT2JqZWN0KiBSZW5kZXJGdWxsU2NyZWVuOjp3cmFwUmVu
ZGVyZXIoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlck9iamVjdCogcGFyZW50LCBEb2N1bWVu
dCogZG9jdW1lbnQpCitSZW5kZXJGdWxsU2NyZWVuKiBSZW5kZXJGdWxsU2NyZWVuOjp3cmFwUmVu
ZGVyZXIoUmVuZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlckVsZW1lbnQqIHBhcmVudCwgRG9jdW1l
bnQqIGRvY3VtZW50KQogewogICAgIFJlbmRlckZ1bGxTY3JlZW4qIGZ1bGxzY3JlZW5SZW5kZXJl
ciA9IFJlbmRlckZ1bGxTY3JlZW46OmNyZWF0ZUFub255bW91cygqZG9jdW1lbnQpOwogICAgIGZ1
bGxzY3JlZW5SZW5kZXJlci0+c2V0U3R5bGUoY3JlYXRlRnVsbFNjcmVlblN0eWxlKCkpOwpAQCAt
MTI1LDcgKzEyNSw3IEBAIFJlbmRlck9iamVjdCogUmVuZGVyRnVsbFNjcmVlbjo6d3JhcFJlbmQK
ICAgICBpZiAob2JqZWN0KSB7CiAgICAgICAgIC8vIHxvYmplY3QtPnBhcmVudCgpfCBjYW4gYmUg
bnVsbCBpZiB0aGUgb2JqZWN0IGlzIG5vdCB5ZXQgYXR0YWNoZWQKICAgICAgICAgLy8gdG8gfHBh
cmVudHwuCi0gICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHBhcmVudCA9IG9iamVjdC0+cGFyZW50
KCkpIHsKKyAgICAgICAgaWYgKFJlbmRlckVsZW1lbnQqIHBhcmVudCA9IG9iamVjdC0+cGFyZW50
KCkpIHsKICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxvY2sgPSBvYmplY3Qt
PmNvbnRhaW5pbmdCbG9jaygpOwogICAgICAgICAgICAgQVNTRVJUKGNvbnRhaW5pbmdCbG9jayk7
CiAgICAgICAgICAgICAvLyBTaW5jZSB3ZSBhcmUgbW92aW5nIHRoZSB8b2JqZWN0fCB0byBhIG5l
dyBwYXJlbnQgfGZ1bGxzY3JlZW5SZW5kZXJlcnwsCkBAIC0xMzMsNyArMTMzLDcgQEAgUmVuZGVy
T2JqZWN0KiBSZW5kZXJGdWxsU2NyZWVuOjp3cmFwUmVuZAogICAgICAgICAgICAgY29udGFpbmlu
Z0Jsb2NrLT5kZWxldGVMaW5lQm94VHJlZSgpOwogCiAgICAgICAgICAgICBwYXJlbnQtPmFkZENo
aWxkKGZ1bGxzY3JlZW5SZW5kZXJlciwgb2JqZWN0KTsKLSAgICAgICAgICAgIG9iamVjdC0+cmVt
b3ZlKCk7CisgICAgICAgICAgICBvYmplY3QtPnJlbW92ZUZyb21QYXJlbnQoKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgLy8gQWx3YXlzIGp1c3QgZG8gYSBmdWxsIGxheW91dCB0byBlbnN1
cmUgdGhhdCBsaW5lIGJveGVzIGdldCBkZWxldGVkIHByb3Blcmx5LgogICAgICAgICAgICAgLy8g
QmVjYXVzZSBvYmplY3RzIG1vdmVkIGZyb20gfHBhcmVudHwgdG8gfGZ1bGxzY3JlZW5SZW5kZXJl
cnwsIHdlIHdhbnQgdG8KQEAgLTE1OCwxNCArMTU4LDE0IEBAIHZvaWQgUmVuZGVyRnVsbFNjcmVl
bjo6dW53cmFwUmVuZGVyZXIoKQogICAgICAgICAgICAgLy8gbHlpbmcgYXJvdW5kIG9uIHRoZSBj
aGlsZC4KICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNCb3goKSkKICAgICAgICAgICAgICAgICB0
b1JlbmRlckJveChjaGlsZCktPmNsZWFyT3ZlcnJpZGVTaXplKCk7Ci0gICAgICAgICAgICBjaGls
ZC0+cmVtb3ZlKCk7CisgICAgICAgICAgICBjaGlsZC0+cmVtb3ZlRnJvbVBhcmVudCgpOwogICAg
ICAgICAgICAgcGFyZW50KCktPmFkZENoaWxkKGNoaWxkLCB0aGlzKTsKICAgICAgICAgICAgIHBh
cmVudCgpLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICAgICAgfQog
ICAgIH0KICAgICBpZiAocGxhY2Vob2xkZXIoKSkKLSAgICAgICAgcGxhY2Vob2xkZXIoKS0+cmVt
b3ZlKCk7Ci0gICAgcmVtb3ZlKCk7CisgICAgICAgIHBsYWNlaG9sZGVyKCktPnJlbW92ZUZyb21Q
YXJlbnQoKTsKKyAgICByZW1vdmVGcm9tUGFyZW50KCk7CiAgICAgZG9jdW1lbnQoKS5zZXRGdWxs
U2NyZWVuUmVuZGVyZXIoMCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGdWxsU2NyZWVuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZ1bGxTY3JlZW4uaAkocmV2aXNpb24gMTU2MTQzKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjcmVhdGVQbGFjZWhvbGRlcihQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiwgY29uc3QgTGF5b3V0UmVjdCYgZnJhbWVSZWN0KTsKIAogCi0gICAgc3RhdGljIFJl
bmRlck9iamVjdCogd3JhcFJlbmRlcmVyKFJlbmRlck9iamVjdCosIFJlbmRlck9iamVjdCosIERv
Y3VtZW50Kik7CisgICAgc3RhdGljIFJlbmRlckZ1bGxTY3JlZW4qIHdyYXBSZW5kZXJlcihSZW5k
ZXJPYmplY3QqLCBSZW5kZXJFbGVtZW50KiwgRG9jdW1lbnQqKTsKICAgICB2b2lkIHVud3JhcFJl
bmRlcmVyKCk7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdEl0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaXN0SXRlbS5jcHAJKHJldmlzaW9uIDE1NjE0MykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxOSw3ICsyMTks
NyBAQCBib29sIFJlbmRlckxpc3RJdGVtOjppc0VtcHR5KCkgY29uc3QKICAgICByZXR1cm4gbGFz
dENoaWxkKCkgPT0gbV9tYXJrZXI7CiB9CiAKLXN0YXRpYyBSZW5kZXJPYmplY3QqIGdldFBhcmVu
dE9mRmlyc3RMaW5lQm94KFJlbmRlckJsb2NrKiBjdXJyLCBSZW5kZXJPYmplY3QqIG1hcmtlcikK
K3N0YXRpYyBSZW5kZXJCbG9jayogZ2V0UGFyZW50T2ZGaXJzdExpbmVCb3goUmVuZGVyQmxvY2sq
IGN1cnIsIFJlbmRlck9iamVjdCogbWFya2VyKQogewogICAgIFJlbmRlck9iamVjdCogZmlyc3RD
aGlsZCA9IGN1cnItPmZpcnN0Q2hpbGQoKTsKICAgICBpZiAoIWZpcnN0Q2hpbGQpCkBAIC0yNDMs
NyArMjQzLDcgQEAgc3RhdGljIFJlbmRlck9iamVjdCogZ2V0UGFyZW50T2ZGaXJzdExpbgogICAg
ICAgICAgICAgKGN1cnJDaGlsZC0+bm9kZSgpLT5oYXNUYWdOYW1lKHVsVGFnKXx8IGN1cnJDaGls
ZC0+bm9kZSgpLT5oYXNUYWdOYW1lKG9sVGFnKSkpCiAgICAgICAgICAgICBicmVhazsKIAotICAg
ICAgICBSZW5kZXJPYmplY3QqIGxpbmVCb3ggPSBnZXRQYXJlbnRPZkZpcnN0TGluZUJveCh0b1Jl
bmRlckJsb2NrKGN1cnJDaGlsZCksIG1hcmtlcik7CisgICAgICAgIFJlbmRlckJsb2NrKiBsaW5l
Qm94ID0gZ2V0UGFyZW50T2ZGaXJzdExpbmVCb3godG9SZW5kZXJCbG9jayhjdXJyQ2hpbGQpLCBt
YXJrZXIpOwogICAgICAgICBpZiAobGluZUJveCkKICAgICAgICAgICAgIHJldHVybiBsaW5lQm94
OwogICAgIH0KQEAgLTI3NCw4ICsyNzQsOCBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjppbnNlcnRP
ck1vdmVNYXJrZXJSCiAgICAgaWYgKCFtX21hcmtlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAg
UmVuZGVyT2JqZWN0KiBjdXJyZW50UGFyZW50ID0gbV9tYXJrZXItPnBhcmVudCgpOwotICAgIFJl
bmRlck9iamVjdCogbmV3UGFyZW50ID0gZ2V0UGFyZW50T2ZGaXJzdExpbmVCb3godGhpcywgbV9t
YXJrZXIpOworICAgIFJlbmRlckVsZW1lbnQqIGN1cnJlbnRQYXJlbnQgPSBtX21hcmtlci0+cGFy
ZW50KCk7CisgICAgUmVuZGVyQmxvY2sqIG5ld1BhcmVudCA9IGdldFBhcmVudE9mRmlyc3RMaW5l
Qm94KHRoaXMsIG1fbWFya2VyKTsKICAgICBpZiAoIW5ld1BhcmVudCkgewogICAgICAgICAvLyBJ
ZiB0aGUgbWFya2VyIGlzIGN1cnJlbnRseSBjb250YWluZWQgaW5zaWRlIGFuIGFub255bW91cyBi
b3gsCiAgICAgICAgIC8vIHRoZW4gd2UgYXJlIHRoZSBvbmx5IGl0ZW0gaW4gdGhhdCBhbm9ueW1v
dXMgYm94IChzaW5jZSBubyBsaW5lIGJveApAQCAtMjkwLDcgKzI5MCw3IEBAIHZvaWQgUmVuZGVy
TGlzdEl0ZW06Omluc2VydE9yTW92ZU1hcmtlclIKICAgICAgICAgLy8gUmVtb3ZpbmcgYW5kIGFk
ZGluZyB0aGUgbWFya2VyIGNhbiB0cmlnZ2VyIHJlcGFpbnRpbmcgaW4KICAgICAgICAgLy8gY29u
dGFpbmVycyBvdGhlciB0aGFuIG91cnNlbHZlcywgc28gd2UgbmVlZCB0byBkaXNhYmxlIExheW91
dFN0YXRlLgogICAgICAgICBMYXlvdXRTdGF0ZURpc2FibGVyIGxheW91dFN0YXRlRGlzYWJsZXIo
JnZpZXcoKSk7Ci0gICAgICAgIG1fbWFya2VyLT5yZW1vdmUoKTsKKyAgICAgICAgbV9tYXJrZXIt
PnJlbW92ZUZyb21QYXJlbnQoKTsKICAgICAgICAgbmV3UGFyZW50LT5hZGRDaGlsZChtX21hcmtl
ciwgZmlyc3ROb25NYXJrZXJDaGlsZChuZXdQYXJlbnQpKTsKICAgICAgICAgbV9tYXJrZXItPnVw
ZGF0ZU1hcmdpbnNBbmRDb250ZW50KCk7CiAgICAgICAgIC8vIElmIGN1cnJlbnQgcGFyZW50IGlz
IGFuIGFub255bW91cyBibG9jayB0aGF0IGhhcyBsb3N0IGFsbCBpdHMgY2hpbGRyZW4sIGRlc3Ry
b3kgaXQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhy
ZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFt
ZWRGbG93VGhyZWFkLmNwcAkocmV2aXNpb24gMTU2MTQzKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4NSw3
ICs0ODUsNyBAQCBib29sIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6aXNDaGlsZEFsbG93CiAgICAg
ICAgIHJldHVybiB0cnVlOwogCiAgICAgQVNTRVJUKGNoaWxkLT5ub2RlKCktPmlzRWxlbWVudE5v
ZGUoKSk7Ci0gICAgTm9kZSogb3JpZ2luYWxQYXJlbnQgPSBOb2RlUmVuZGVyaW5nVHJhdmVyc2Fs
OjpwYXJlbnQoY2hpbGQtPm5vZGUoKSk7CisgICAgRWxlbWVudCogb3JpZ2luYWxQYXJlbnQgPSB0
b0VsZW1lbnQoTm9kZVJlbmRlcmluZ1RyYXZlcnNhbDo6cGFyZW50KGNoaWxkLT5ub2RlKCkpKTsK
IAogICAgIGlmICghb3JpZ2luYWxQYXJlbnQgfHwgIW9yaWdpbmFsUGFyZW50LT5yZW5kZXJlcigp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAxNTYxNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsOCArNTUsNiBAQAog
I2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlck5hbWVkRmxv
d1RocmVhZC5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhclBhcnQuaCIKLSNpbmNsdWRlICJS
ZW5kZXJUYWJsZS5oIgotI2luY2x1ZGUgIlJlbmRlclRhYmxlQ29sLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKQEAgLTIyNiw2OCArMjI0LDIyIEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXRGbG93VGhyZWFk
U3RhdGVJbmMKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyT2JqZWN0OjphZGRDaGlsZChSZW5kZXJP
YmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJP
YmplY3Q6OnNldFBhcmVudChSZW5kZXJFbGVtZW50KiBwYXJlbnQpCiB7Ci0gICAgUmVuZGVyT2Jq
ZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7Ci0gICAgQVNTRVJUKGNo
aWxkcmVuKTsKLSAgICBpZiAoIWNoaWxkcmVuKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29s
IG5lZWRzVGFibGUgPSBmYWxzZTsKKyAgICBtX3BhcmVudCA9IHBhcmVudDsKIAotICAgIGlmIChu
ZXdDaGlsZC0+aXNSZW5kZXJUYWJsZUNvbCgpKSB7Ci0gICAgICAgIFJlbmRlclRhYmxlQ29sKiBu
ZXdUYWJsZUNvbHVtbiA9IHRvUmVuZGVyVGFibGVDb2wobmV3Q2hpbGQpOwotICAgICAgICBib29s
IGlzQ29sdW1uSW5Db2x1bW5Hcm91cCA9IG5ld1RhYmxlQ29sdW1uLT5pc1RhYmxlQ29sdW1uKCkg
JiYgaXNSZW5kZXJUYWJsZUNvbCgpOwotICAgICAgICBuZWVkc1RhYmxlID0gIWlzVGFibGUoKSAm
JiAhaXNDb2x1bW5JbkNvbHVtbkdyb3VwOwotICAgIH0gZWxzZSBpZiAobmV3Q2hpbGQtPmlzVGFi
bGVDYXB0aW9uKCkpCi0gICAgICAgIG5lZWRzVGFibGUgPSAhaXNUYWJsZSgpOwotICAgIGVsc2Ug
aWYgKG5ld0NoaWxkLT5pc1RhYmxlU2VjdGlvbigpKQotICAgICAgICBuZWVkc1RhYmxlID0gIWlz
VGFibGUoKTsKLSAgICBlbHNlIGlmIChuZXdDaGlsZC0+aXNUYWJsZVJvdygpKQotICAgICAgICBu
ZWVkc1RhYmxlID0gIWlzVGFibGVTZWN0aW9uKCk7Ci0gICAgZWxzZSBpZiAobmV3Q2hpbGQtPmlz
VGFibGVDZWxsKCkpCi0gICAgICAgIG5lZWRzVGFibGUgPSAhaXNUYWJsZVJvdygpOwotCi0gICAg
aWYgKG5lZWRzVGFibGUpIHsKLSAgICAgICAgUmVuZGVyVGFibGUqIHRhYmxlOwotICAgICAgICBS
ZW5kZXJPYmplY3QqIGFmdGVyQ2hpbGQgPSBiZWZvcmVDaGlsZCA/IGJlZm9yZUNoaWxkLT5wcmV2
aW91c1NpYmxpbmcoKSA6IGNoaWxkcmVuLT5sYXN0Q2hpbGQoKTsKLSAgICAgICAgaWYgKGFmdGVy
Q2hpbGQgJiYgYWZ0ZXJDaGlsZC0+aXNBbm9ueW1vdXMoKSAmJiBhZnRlckNoaWxkLT5pc1RhYmxl
KCkgJiYgIWFmdGVyQ2hpbGQtPmlzQmVmb3JlQ29udGVudCgpKQotICAgICAgICAgICAgdGFibGUg
PSB0b1JlbmRlclRhYmxlKGFmdGVyQ2hpbGQpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IHRhYmxlID0gUmVuZGVyVGFibGU6OmNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcih0
aGlzKTsKLSAgICAgICAgICAgIGFkZENoaWxkKHRhYmxlLCBiZWZvcmVDaGlsZCk7Ci0gICAgICAg
IH0KLSAgICAgICAgdGFibGUtPmFkZENoaWxkKG5ld0NoaWxkKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgY2hpbGRyZW4tPmluc2VydENoaWxkTm9kZSh0aGlzLCBuZXdDaGlsZCwgYmVmb3JlQ2hpbGQp
OwotCi0gICAgaWYgKG5ld0NoaWxkLT5pc1RleHQoKSAmJiBuZXdDaGlsZC0+c3R5bGUoKS0+dGV4
dFRyYW5zZm9ybSgpID09IENBUElUQUxJWkUpCi0gICAgICAgIHRvUmVuZGVyVGV4dChuZXdDaGls
ZCktPnRyYW5zZm9ybVRleHQoKTsKLQotICAgIC8vIFNWRyBjcmVhdGVzIHJlbmRlcmVycyBmb3Ig
PGcgZGlzcGxheT0ibm9uZSI+LCBhcyBTVkcgcmVxdWlyZXMgY2hpbGRyZW4gb2YgaGlkZGVuCi0g
ICAgLy8gPGc+cyB0byBoYXZlIHJlbmRlcmVycyAtIGF0IGxlYXN0IHRoYXQncyBob3cgb3VyIGlt
cGxlbWVudGF0aW9uIHdvcmtzLiBDb25zaWRlcjoKLSAgICAvLyA8ZyBkaXNwbGF5PSJub25lIj48
Zm9yZWlnbk9iamVjdD48Ym9keSBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZlIj5GT08uLi4KLSAg
ICAvLyAtIHJlcXVpcmVzTGF5ZXIoKSB3b3VsZCByZXR1cm4gdHJ1ZSBmb3IgdGhlIDxib2R5Piwg
Y3JlYXRpbmcgYSBuZXcgUmVuZGVyTGF5ZXIKLSAgICAvLyAtIHdoZW4gdGhlIGRvY3VtZW50IGlz
IHBhaW50ZWQsIGJvdGggbGF5ZXJzIGFyZSBwYWludGVkLiBUaGUgPGJvZHk+IGxheWVyIGRvZXNu
J3QKLSAgICAvLyAgIGtub3cgdGhhdCBpdCdzIGluc2lkZSBhICJoaWRkZW4gU1ZHIHN1YnRyZWUi
LCBhbmQgdGh1cyBwYWludHMsIGV2ZW4gaWYgaXQgc2hvdWxkbid0LgotICAgIC8vIFRvIGF2b2lk
IHRoZSBwcm9ibGVtIGFsbHRvZ2V0aGVyLCBkZXRlY3QgZWFybHkgaWYgd2UncmUgaW5zaWRlIGEg
aGlkZGVuIFNWRyBzdWJ0cmVlCi0gICAgLy8gYW5kIHN0b3AgY3JlYXRpbmcgbGF5ZXJzIGF0IGFs
bCBmb3IgdGhlc2UgY2FzZXMgLSB0aGV5J3JlIG5vdCB1c2VkIGFueXdheXMuCi0gICAgaWYgKG5l
d0NoaWxkLT5oYXNMYXllcigpICYmICFsYXllckNyZWF0aW9uQWxsb3dlZEZvclN1YnRyZWUoKSkK
LSAgICAgICAgdG9SZW5kZXJMYXllck1vZGVsT2JqZWN0KG5ld0NoaWxkKS0+bGF5ZXIoKS0+cmVt
b3ZlT25seVRoaXNMYXllcigpOwotCi0jaWYgRU5BQkxFKFNWRykKLSAgICBTVkdSZW5kZXJTdXBw
b3J0OjpjaGlsZEFkZGVkKHRoaXMsIG5ld0NoaWxkKTsKLSNlbmRpZgorICAgIC8vIE9ubHkgdXBk
YXRlIGlmIG91ciBmbG93IHRocmVhZCBzdGF0ZSBpcyBkaWZmZXJlbnQgZnJvbSBvdXIgbmV3IHBh
cmVudCBhbmQgaWYgd2UncmUgbm90IGEgUmVuZGVyRmxvd1RocmVhZC4KKyAgICAvLyBBIFJlbmRl
ckZsb3dUaHJlYWQgaXMgYWx3YXlzIGNvbnNpZGVyZWQgdG8gYmUgaW5zaWRlIGl0c2VsZiwgc28g
aXQgbmV2ZXIgaGFzIHRvIGNoYW5nZSBpdHMgc3RhdGUKKyAgICAvLyBpbiByZXNwb25zZSB0byBw
YXJlbnQgY2hhbmdlcy4KKyAgICBGbG93VGhyZWFkU3RhdGUgbmV3U3RhdGUgPSBwYXJlbnQgPyBw
YXJlbnQtPmZsb3dUaHJlYWRTdGF0ZSgpIDogTm90SW5zaWRlRmxvd1RocmVhZDsKKyAgICBpZiAo
bmV3U3RhdGUgIT0gZmxvd1RocmVhZFN0YXRlKCkgJiYgIWlzUmVuZGVyRmxvd1RocmVhZCgpKQor
ICAgICAgICBzZXRGbG93VGhyZWFkU3RhdGVJbmNsdWRpbmdEZXNjZW5kYW50cyhuZXdTdGF0ZSk7
CiB9CiAKLXZvaWQgUmVuZGVyT2JqZWN0OjpyZW1vdmVDaGlsZChSZW5kZXJPYmplY3QqIG9sZENo
aWxkKQordm9pZCBSZW5kZXJPYmplY3Q6OnJlbW92ZUZyb21QYXJlbnQoKQogewotICAgIFJlbmRl
ck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJlbigpOwotICAgIEFTU0VS
VChjaGlsZHJlbik7Ci0gICAgaWYgKCFjaGlsZHJlbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Y2hpbGRyZW4tPnJlbW92ZUNoaWxkTm9kZSh0aGlzLCBvbGRDaGlsZCk7CisgICAgaWYgKHBhcmVu
dCgpKQorICAgICAgICBwYXJlbnQoKS0+cmVtb3ZlQ2hpbGQodGhpcyk7CiB9CiAKIFJlbmRlck9i
amVjdCogUmVuZGVyT2JqZWN0OjpuZXh0SW5QcmVPcmRlcigpIGNvbnN0CkBAIC02ODMsNiArNjM1
LDIwIEBAIFJlbmRlckxheWVyKiBSZW5kZXJPYmplY3Q6OmVuY2xvc2luZ0xheWUKICAgICByZXR1
cm4gMDsKIH0KIAorYm9vbCBSZW5kZXJPYmplY3Q6OmxheWVyQ3JlYXRpb25BbGxvd2VkRm9yU3Vi
dHJlZSgpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFNWRykKKyAgICBSZW5kZXJFbGVtZW50KiBwYXJl
bnRSZW5kZXJlciA9IHBhcmVudCgpOworICAgIHdoaWxlIChwYXJlbnRSZW5kZXJlcikgeworICAg
ICAgICBpZiAocGFyZW50UmVuZGVyZXItPmlzU1ZHSGlkZGVuQ29udGFpbmVyKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHBhcmVudFJlbmRlcmVyID0gcGFyZW50UmVuZGVy
ZXItPnBhcmVudCgpOworICAgIH0KKyNlbmRpZgorICAgIAorICAgIHJldHVybiB0cnVlOworfQor
CiBib29sIFJlbmRlck9iamVjdDo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0
JiByZWN0LCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWCwgY29uc3QgU2Nyb2xsQWxpZ25t
ZW50JiBhbGlnblkpCiB7CiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0xheWVyID0gdGhpcy0+
ZW5jbG9zaW5nTGF5ZXIoKTsKQEAgLTI1NzUsNyArMjU0MSw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0
Ojp3aWxsQmVEZXN0cm95ZWQoKQogICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3Vt
ZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCiAgICAgICAgIGNhY2hlLT5jaGlsZHJlbkNo
YW5nZWQodGhpcy0+cGFyZW50KCkpOwogCi0gICAgcmVtb3ZlKCk7CisgICAgcmVtb3ZlRnJvbVBh
cmVudCgpOwogCiAgICAgQVNTRVJUKGRvY3VtZW50QmVpbmdEZXN0cm95ZWQoKSB8fCAhdmlldygp
LmZyYW1lVmlldygpLmhhc1Nsb3dSZXBhaW50T2JqZWN0KHRoaXMpKTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkocmV2aXNpb24gMTU2MTQ0KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
NCw2ICs1NCw3IEBAIGNsYXNzIFBzZXVkb1N0eWxlUmVxdWVzdDsKIGNsYXNzIFJlbmRlckJveE1v
ZGVsT2JqZWN0OwogY2xhc3MgUmVuZGVySW5saW5lOwogY2xhc3MgUmVuZGVyQmxvY2s7CitjbGFz
cyBSZW5kZXJFbGVtZW50OwogY2xhc3MgUmVuZGVyRmxvd1RocmVhZDsKIGNsYXNzIFJlbmRlckdl
b21ldHJ5TWFwOwogY2xhc3MgUmVuZGVyTGF5ZXI7CkBAIC0xNTgsNyArMTU5LDcgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgPSAwOwogCi0g
ICAgUmVuZGVyT2JqZWN0KiBwYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudDsgfQorICAg
IFJlbmRlckVsZW1lbnQqIHBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50OyB9CiAgICAg
Ym9vbCBpc0Rlc2NlbmRhbnRPZihjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKIAogICAgIFJl
bmRlck9iamVjdCogcHJldmlvdXNTaWJsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9wcmV2aW91czsg
fQpAQCAtMjc4LDEwICsyNzksNiBAQCBwdWJsaWM6CiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigp
IGNvbnN0IHsgcmV0dXJuIGNoaWxkcmVuKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUdl
bmVyYXRlZENoaWxkcmVuKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzQ2hpbGRBbGxvd2Vk
KFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAg
IHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkID0gMCk7Ci0gICAgdmlydHVhbCB2b2lkIGFkZENoaWxkSWdub3JpbmdD
b250aW51YXRpb24oUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVD
aGlsZCA9IDApIHsgcmV0dXJuIGFkZENoaWxkKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0Kik7CiAgICAgdmlydHVhbCBi
b29sIGNyZWF0ZXNBbm9ueW1vdXNXcmFwcGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIApAQCAtMjkwLDE4
ICsyODcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gSGVscGVyIGZ1bmN0aW9ucy4gRGFuZ2Vyb3Vz
IHRvIHVzZSEKICAgICB2b2lkIHNldFByZXZpb3VzU2libGluZyhSZW5kZXJPYmplY3QqIHByZXZp
b3VzKSB7IG1fcHJldmlvdXMgPSBwcmV2aW91czsgfQogICAgIHZvaWQgc2V0TmV4dFNpYmxpbmco
UmVuZGVyT2JqZWN0KiBuZXh0KSB7IG1fbmV4dCA9IG5leHQ7IH0KLSAgICB2b2lkIHNldFBhcmVu
dChSZW5kZXJPYmplY3QqIHBhcmVudCkKLSAgICB7Ci0gICAgICAgIG1fcGFyZW50ID0gcGFyZW50
OwotICAgICAgICAKLSAgICAgICAgLy8gT25seSB1cGRhdGUgaWYgb3VyIGZsb3cgdGhyZWFkIHN0
YXRlIGlzIGRpZmZlcmVudCBmcm9tIG91ciBuZXcgcGFyZW50IGFuZCBpZiB3ZSdyZSBub3QgYSBS
ZW5kZXJGbG93VGhyZWFkLgotICAgICAgICAvLyBBIFJlbmRlckZsb3dUaHJlYWQgaXMgYWx3YXlz
IGNvbnNpZGVyZWQgdG8gYmUgaW5zaWRlIGl0c2VsZiwgc28gaXQgbmV2ZXIgaGFzIHRvIGNoYW5n
ZSBpdHMgc3RhdGUKLSAgICAgICAgLy8gaW4gcmVzcG9uc2UgdG8gcGFyZW50IGNoYW5nZXMuCi0g
ICAgICAgIEZsb3dUaHJlYWRTdGF0ZSBuZXdTdGF0ZSA9IHBhcmVudCA/IHBhcmVudC0+Zmxvd1Ro
cmVhZFN0YXRlKCkgOiBOb3RJbnNpZGVGbG93VGhyZWFkOwotICAgICAgICBpZiAobmV3U3RhdGUg
IT0gZmxvd1RocmVhZFN0YXRlKCkgJiYgIWlzUmVuZGVyRmxvd1RocmVhZCgpKQotICAgICAgICAg
ICAgc2V0Rmxvd1RocmVhZFN0YXRlSW5jbHVkaW5nRGVzY2VuZGFudHMobmV3U3RhdGUpOwotICAg
IH0KLQorICAgIHZvaWQgc2V0UGFyZW50KFJlbmRlckVsZW1lbnQqKTsKICAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIHByaXZhdGU6CiAjaWZuZGVmIE5ERUJV
RwpAQCAtOTcyLDcgKzk1OCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2VsZWN0aW9uU3RhcnRF
bmQoaW50JiBzcG9zLCBpbnQmIGVwb3MpIGNvbnN0OwogICAgIAotICAgIHZvaWQgcmVtb3ZlKCkg
eyBpZiAocGFyZW50KCkpIHBhcmVudCgpLT5yZW1vdmVDaGlsZCh0aGlzKTsgfQorICAgIHZvaWQg
cmVtb3ZlRnJvbVBhcmVudCgpOwogCiAgICAgQW5pbWF0aW9uQ29udHJvbGxlciYgYW5pbWF0aW9u
KCkgY29uc3Q7CiAKQEAgLTEwMDYsNyArOTkyLDcgQEAgcHVibGljOgogICAgIFJlc3BlY3RJbWFn
ZU9yaWVudGF0aW9uRW51bSBzaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpIGNvbnN0Owog
CiBwcm90ZWN0ZWQ6Ci0gICAgaW5saW5lIGJvb2wgbGF5ZXJDcmVhdGlvbkFsbG93ZWRGb3JTdWJ0
cmVlKCkgY29uc3Q7CisgICAgYm9vbCBsYXllckNyZWF0aW9uQWxsb3dlZEZvclN1YnRyZWUoKSBj
b25zdDsKIAogICAgIC8vIE92ZXJyaWRlcyBzaG91bGQgY2FsbCB0aGUgc3VwZXJjbGFzcyBhdCB0
aGUgZW5kCiAgICAgdmlydHVhbCB2b2lkIHN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2Us
IGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7CkBAIC0xMDY1LDcgKzEwNTEsNyBAQCBwcml2
YXRlOgogCiAgICAgTm9kZSogbV9ub2RlOwogCi0gICAgUmVuZGVyT2JqZWN0KiBtX3BhcmVudDsK
KyAgICBSZW5kZXJFbGVtZW50KiBtX3BhcmVudDsKICAgICBSZW5kZXJPYmplY3QqIG1fcHJldmlv
dXM7CiAgICAgUmVuZGVyT2JqZWN0KiBtX25leHQ7CiAKQEAgLTEzMDgsMjAgKzEyOTQsNiBAQCBp
bmxpbmUgYm9vbCBSZW5kZXJPYmplY3Q6OnByZXNlcnZlc05ld2xpCiAgICAgcmV0dXJuIHN0eWxl
KCktPnByZXNlcnZlTmV3bGluZSgpOwogfQogCi1pbmxpbmUgYm9vbCBSZW5kZXJPYmplY3Q6Omxh
eWVyQ3JlYXRpb25BbGxvd2VkRm9yU3VidHJlZSgpIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKFNWRykK
LSAgICBSZW5kZXJPYmplY3QqIHBhcmVudFJlbmRlcmVyID0gcGFyZW50KCk7Ci0gICAgd2hpbGUg
KHBhcmVudFJlbmRlcmVyKSB7Ci0gICAgICAgIGlmIChwYXJlbnRSZW5kZXJlci0+aXNTVkdIaWRk
ZW5Db250YWluZXIoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcGFyZW50
UmVuZGVyZXIgPSBwYXJlbnRSZW5kZXJlci0+cGFyZW50KCk7Ci0gICAgfQotI2VuZGlmCi0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQogaW5saW5lIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXRTZWxlY3Rp
b25TdGF0ZUlmTmVlZGVkKFNlbGVjdGlvblN0YXRlIHN0YXRlKQogewogICAgIGlmIChzZWxlY3Rp
b25TdGF0ZSgpID09IHN0YXRlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdENoaWxkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdENoaWxkTGlzdC5jcHAJKHJldmlzaW9uIDE1NjE0MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3RDaGlsZExpc3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw4ICsyOSw4IEBACiAKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyQ291bnRlci5oIgorI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKICNpbmNs
dWRlICJSZW5kZXJMaW5lQnJlYWsuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNs
dWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKIApAQCAtNDAsNyAr
NDAsNyBAQCB2b2lkIFJlbmRlck9iamVjdENoaWxkTGlzdDo6ZGVzdHJveUxlZnRvCiB7CiAgICAg
d2hpbGUgKGZpcnN0Q2hpbGQoKSkgewogICAgICAgICBpZiAoZmlyc3RDaGlsZCgpLT5pc0xpc3RN
YXJrZXIoKSB8fCAoZmlyc3RDaGlsZCgpLT5zdHlsZSgpLT5zdHlsZVR5cGUoKSA9PSBGSVJTVF9M
RVRURVIgJiYgIWZpcnN0Q2hpbGQoKS0+aXNUZXh0KCkpKQotICAgICAgICAgICAgZmlyc3RDaGls
ZCgpLT5yZW1vdmUoKTsgIC8vIExpc3QgbWFya2VycyBhcmUgb3duZWQgYnkgdGhlaXIgZW5jbG9z
aW5nIGxpc3QgYW5kIHNvIGRvbid0IGdldCBkZXN0cm95ZWQgYnkgdGhpcyBjb250YWluZXIuIFNp
bWlsYXJseSwgZmlyc3QgbGV0dGVycyBhcmUgZGVzdHJveWVkIGJ5IHRoZWlyIHJlbWFpbmluZyB0
ZXh0IGZyYWdtZW50LgorICAgICAgICAgICAgZmlyc3RDaGlsZCgpLT5yZW1vdmVGcm9tUGFyZW50
KCk7IC8vIExpc3QgbWFya2VycyBhcmUgb3duZWQgYnkgdGhlaXIgZW5jbG9zaW5nIGxpc3QgYW5k
IHNvIGRvbid0IGdldCBkZXN0cm95ZWQgYnkgdGhpcyBjb250YWluZXIuIFNpbWlsYXJseSwgZmly
c3QgbGV0dGVycyBhcmUgZGVzdHJveWVkIGJ5IHRoZWlyIHJlbWFpbmluZyB0ZXh0IGZyYWdtZW50
LgogICAgICAgICBlbHNlIGlmIChmaXJzdENoaWxkKCktPmlzUnVuSW4oKSAmJiBmaXJzdENoaWxk
KCktPm5vZGUoKSkgewogICAgICAgICAgICAgZmlyc3RDaGlsZCgpLT5ub2RlKCktPnNldFJlbmRl
cmVyKDApOwogICAgICAgICAgICAgZmlyc3RDaGlsZCgpLT5ub2RlKCktPnNldE5lZWRzU3R5bGVS
ZWNhbGMoKTsKQEAgLTU0LDcgKzU0LDcgQEAgdm9pZCBSZW5kZXJPYmplY3RDaGlsZExpc3Q6OmRl
c3Ryb3lMZWZ0bwogICAgIH0KIH0KIAotUmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3RDaGlsZExp
c3Q6OnJlbW92ZUNoaWxkTm9kZShSZW5kZXJPYmplY3QqIG93bmVyLCBSZW5kZXJPYmplY3QqIG9s
ZENoaWxkLCBib29sIG5vdGlmeVJlbmRlcmVyKQorUmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3RD
aGlsZExpc3Q6OnJlbW92ZUNoaWxkTm9kZShSZW5kZXJFbGVtZW50KiBvd25lciwgUmVuZGVyT2Jq
ZWN0KiBvbGRDaGlsZCwgYm9vbCBub3RpZnlSZW5kZXJlcikKIHsKICAgICBBU1NFUlQob2xkQ2hp
bGQtPnBhcmVudCgpID09IG93bmVyKTsKIApAQCAtMTE4LDcgKzExOCw3IEBAIFJlbmRlck9iamVj
dCogUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjpyZW0KICAgICByZXR1cm4gb2xkQ2hpbGQ7CiB9CiAK
LXZvaWQgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjppbnNlcnRDaGlsZE5vZGUoUmVuZGVyT2JqZWN0
KiBvd25lciwgUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGls
ZCwgYm9vbCBub3RpZnlSZW5kZXJlcikKK3ZvaWQgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjppbnNl
cnRDaGlsZE5vZGUoUmVuZGVyRWxlbWVudCogb3duZXIsIFJlbmRlck9iamVjdCogbmV3Q2hpbGQs
IFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIGJvb2wgbm90aWZ5UmVuZGVyZXIpCiB7CiAgICAg
QVNTRVJUKCFuZXdDaGlsZC0+cGFyZW50KCkpOwogICAgIEFTU0VSVCghb3duZXItPmlzUmVuZGVy
QmxvY2tGbG93KCkgfHwgKCFuZXdDaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSAmJiAhbmV3Q2hpbGQt
PmlzVGFibGVSb3coKSAmJiAhbmV3Q2hpbGQtPmlzVGFibGVDZWxsKCkpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3RDaGlsZExpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmgJKHJldmlz
aW9uIDE1NjE0MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3RDaGls
ZExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK2NsYXNzIFJlbmRlckVsZW1lbnQ7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiAKIGNs
YXNzIFJlbmRlck9iamVjdENoaWxkTGlzdCB7CkBAIC01MCw5ICs1MSw5IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgZGVzdHJveUxlZnRvdmVyQ2hpbGRyZW4oKTsKIAotICAgIFJlbmRlck9iamVjdCog
cmVtb3ZlQ2hpbGROb2RlKFJlbmRlck9iamVjdCogb3duZXIsIFJlbmRlck9iamVjdCosIGJvb2wg
bm90aWZ5UmVuZGVyZXIgPSB0cnVlKTsKLSAgICB2b2lkIGluc2VydENoaWxkTm9kZShSZW5kZXJP
YmplY3QqIG93bmVyLCBSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9y
ZUNoaWxkLCBib29sIG5vdGlmeVJlbmRlcmVyID0gdHJ1ZSk7Ci0gICAgdm9pZCBhcHBlbmRDaGls
ZE5vZGUoUmVuZGVyT2JqZWN0KiBvd25lciwgUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgYm9vbCBu
b3RpZnlSZW5kZXJlciA9IHRydWUpCisgICAgUmVuZGVyT2JqZWN0KiByZW1vdmVDaGlsZE5vZGUo
UmVuZGVyRWxlbWVudCogb3duZXIsIFJlbmRlck9iamVjdCosIGJvb2wgbm90aWZ5UmVuZGVyZXIg
PSB0cnVlKTsKKyAgICB2b2lkIGluc2VydENoaWxkTm9kZShSZW5kZXJFbGVtZW50KiBvd25lciwg
UmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgYm9vbCBu
b3RpZnlSZW5kZXJlciA9IHRydWUpOworICAgIHZvaWQgYXBwZW5kQ2hpbGROb2RlKFJlbmRlckVs
ZW1lbnQqIG93bmVyLCBSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBib29sIG5vdGlmeVJlbmRlcmVy
ID0gdHJ1ZSkKICAgICB7CiAgICAgICAgIGluc2VydENoaWxkTm9kZShvd25lciwgbmV3Q2hpbGQs
IDAsIG5vdGlmeVJlbmRlcmVyKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUnVieS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclJ1YnkuY3BwCShyZXZpc2lvbiAxNTYxNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyUnVieS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw3ICsxNjcsNyBAQCB2
b2lkIFJlbmRlclJ1YnlBc0lubGluZTo6YWRkQ2hpbGQoUmVuZGVyCiAgICAgaWYgKGJlZm9yZUNo
aWxkICYmICFpc0FmdGVyQ29udGVudChiZWZvcmVDaGlsZCkpIHsKICAgICAgICAgLy8gaW5zZXJ0
IGNoaWxkIGludG8gcnVuCiAgICAgICAgIEFTU0VSVCghYmVmb3JlQ2hpbGQtPmlzUnVieVJ1bigp
KTsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBydW4gPSBiZWZvcmVDaGlsZDsKKyAgICAgICAgUmVu
ZGVyRWxlbWVudCogcnVuID0gYmVmb3JlQ2hpbGQtPnBhcmVudCgpOwogICAgICAgICB3aGlsZSAo
cnVuICYmICFydW4tPmlzUnVieVJ1bigpKQogICAgICAgICAgICAgcnVuID0gcnVuLT5wYXJlbnQo
KTsKICAgICAgICAgaWYgKHJ1bikgewpAQCAtMjczLDcgKzI3Myw3IEBAIHZvaWQgUmVuZGVyUnVi
eUFzQmxvY2s6OmFkZENoaWxkKFJlbmRlck8KICAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgIWlzQWZ0
ZXJDb250ZW50KGJlZm9yZUNoaWxkKSkgewogICAgICAgICAvLyBpbnNlcnQgY2hpbGQgaW50byBy
dW4KICAgICAgICAgQVNTRVJUKCFiZWZvcmVDaGlsZC0+aXNSdWJ5UnVuKCkpOwotICAgICAgICBS
ZW5kZXJPYmplY3QqIHJ1biA9IGJlZm9yZUNoaWxkOworICAgICAgICBSZW5kZXJFbGVtZW50KiBy
dW4gPSBiZWZvcmVDaGlsZC0+cGFyZW50KCk7CiAgICAgICAgIHdoaWxlIChydW4gJiYgIXJ1bi0+
aXNSdWJ5UnVuKCkpCiAgICAgICAgICAgICBydW4gPSBydW4tPnBhcmVudCgpOwogICAgICAgICBp
ZiAocnVuKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4u
Y3BwCShyZXZpc2lvbiAxNTYxNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UnVieVJ1bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIFJlbmRl
clJ1YnlSdW46OmFkZENoaWxkKFJlbmRlck9iamVjCiAgICAgICAgICAgICAvLyBJbiB0aGlzIGNh
c2UgdGhlIG5ldyB0ZXh0IHRha2VzIHRoZSBwbGFjZSBvZiB0aGUgb2xkIG9uZSwgYW5kCiAgICAg
ICAgICAgICAvLyB0aGUgb2xkIHRleHQgZ29lcyBpbnRvIGEgbmV3IHJ1biB0aGF0IGlzIGluc2Vy
dGVkIGFzIG5leHQgc2libGluZy4KICAgICAgICAgICAgIEFTU0VSVChiZWZvcmVDaGlsZC0+cGFy
ZW50KCkgPT0gdGhpcyk7Ci0gICAgICAgICAgICBSZW5kZXJPYmplY3QqIHJ1YnkgPSBwYXJlbnQo
KTsKKyAgICAgICAgICAgIFJlbmRlckVsZW1lbnQqIHJ1YnkgPSBwYXJlbnQoKTsKICAgICAgICAg
ICAgIEFTU0VSVChydWJ5LT5pc1J1YnkoKSk7CiAgICAgICAgICAgICBSZW5kZXJCbG9jayogbmV3
UnVuID0gc3RhdGljQ3JlYXRlUnVieVJ1bihydWJ5KTsKICAgICAgICAgICAgIHJ1YnktPmFkZENo
aWxkKG5ld1J1biwgbmV4dFNpYmxpbmcoKSk7CkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBSZW5k
ZXJSdWJ5UnVuOjphZGRDaGlsZChSZW5kZXJPYmplYwogICAgICAgICB9IGVsc2UgaWYgKGhhc1J1
YnlCYXNlKCkpIHsKICAgICAgICAgICAgIC8vIEluc2VydGlvbiBiZWZvcmUgYSBydWJ5IGJhc2Ug
b2JqZWN0LgogICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIG5lZWQgaW5zZXJ0IGEgbmV3
IHJ1biBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIGFuZCBzcGxpdCB0aGUgYmFzZS4KLSAgICAgICAg
ICAgIFJlbmRlck9iamVjdCogcnVieSA9IHBhcmVudCgpOworICAgICAgICAgICAgUmVuZGVyRWxl
bWVudCogcnVieSA9IHBhcmVudCgpOwogICAgICAgICAgICAgUmVuZGVyUnVieVJ1biogbmV3UnVu
ID0gc3RhdGljQ3JlYXRlUnVieVJ1bihydWJ5KTsKICAgICAgICAgICAgIHJ1YnktPmFkZENoaWxk
KG5ld1J1biwgdGhpcyk7CiAgICAgICAgICAgICBuZXdSdW4tPmFkZENoaWxkKGNoaWxkKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkocmV2aXNpb24gMTU2
MTQzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTY4LDE0ICsxNjgsMTQgQEAgdm9pZCBSZW5kZXJUYWJsZTo6YWRkQ2hpbGQo
UmVuZGVyT2JqZWN0KgogICAgIH0KIAogICAgIGlmICghYmVmb3JlQ2hpbGQgJiYgbGFzdENoaWxk
KCkgJiYgbGFzdENoaWxkKCktPmlzVGFibGVTZWN0aW9uKCkgJiYgbGFzdENoaWxkKCktPmlzQW5v
bnltb3VzKCkgJiYgIWxhc3RDaGlsZCgpLT5pc0JlZm9yZUNvbnRlbnQoKSkgewotICAgICAgICBs
YXN0Q2hpbGQoKS0+YWRkQ2hpbGQoY2hpbGQpOworICAgICAgICB0b1JlbmRlclRhYmxlU2VjdGlv
bihsYXN0Q2hpbGQoKSktPmFkZENoaWxkKGNoaWxkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIGlmIChiZWZvcmVDaGlsZCAmJiAhYmVmb3JlQ2hpbGQtPmlzQW5vbnltb3VzKCkgJiYg
YmVmb3JlQ2hpbGQtPnBhcmVudCgpID09IHRoaXMpIHsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBz
ZWN0aW9uID0gYmVmb3JlQ2hpbGQtPnByZXZpb3VzU2libGluZygpOwogICAgICAgICBpZiAoc2Vj
dGlvbiAmJiBzZWN0aW9uLT5pc1RhYmxlU2VjdGlvbigpICYmIHNlY3Rpb24tPmlzQW5vbnltb3Vz
KCkpIHsKLSAgICAgICAgICAgIHNlY3Rpb24tPmFkZENoaWxkKGNoaWxkKTsKKyAgICAgICAgICAg
IHRvUmVuZGVyVGFibGVTZWN0aW9uKHNlY3Rpb24pLT5hZGRDaGlsZChjaGlsZCk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBS
ZW5kZXJUYWJsZTo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KgogICAgIGlmIChsYXN0Qm94ICYmIGxh
c3RCb3gtPmlzQW5vbnltb3VzKCkgJiYgIWlzQWZ0ZXJDb250ZW50KGxhc3RCb3gpKSB7CiAgICAg
ICAgIGlmIChiZWZvcmVDaGlsZCA9PSBsYXN0Qm94KQogICAgICAgICAgICAgYmVmb3JlQ2hpbGQg
PSBsYXN0Qm94LT5maXJzdENoaWxkKCk7Ci0gICAgICAgIGxhc3RCb3gtPmFkZENoaWxkKGNoaWxk
LCBiZWZvcmVDaGlsZCk7CisgICAgICAgIHRvUmVuZGVyVGFibGVTZWN0aW9uKGxhc3RCb3gpLT5h
ZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAJKHJldmlz
aW9uIDE1NjE0MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExMywxNCArMTEzLDE0IEBAIHZvaWQgUmVuZGVyVGFibGVS
b3c6OmFkZENoaWxkKFJlbmRlck9iamUKICAgICAgICAgaWYgKGxhc3QgJiYgbGFzdC0+aXNBbm9u
eW1vdXMoKSAmJiBsYXN0LT5pc1RhYmxlQ2VsbCgpICYmICFsYXN0LT5pc0JlZm9yZU9yQWZ0ZXJD
b250ZW50KCkpIHsKICAgICAgICAgICAgIGlmIChiZWZvcmVDaGlsZCA9PSBsYXN0KQogICAgICAg
ICAgICAgICAgIGJlZm9yZUNoaWxkID0gbGFzdC0+Zmlyc3RDaGlsZCgpOwotICAgICAgICAgICAg
bGFzdC0+YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgICAgIHRvUmVuZGVy
VGFibGVDZWxsKGxhc3QpLT5hZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGJlZm9yZUNoaWxkICYmICFiZWZv
cmVDaGlsZC0+aXNBbm9ueW1vdXMoKSAmJiBiZWZvcmVDaGlsZC0+cGFyZW50KCkgPT0gdGhpcykg
ewogICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBjZWxsID0gYmVmb3JlQ2hpbGQtPnByZXZpb3Vz
U2libGluZygpOwogICAgICAgICAgICAgaWYgKGNlbGwgJiYgY2VsbC0+aXNUYWJsZUNlbGwoKSAm
JiBjZWxsLT5pc0Fub255bW91cygpKSB7Ci0gICAgICAgICAgICAgICAgY2VsbC0+YWRkQ2hpbGQo
Y2hpbGQpOworICAgICAgICAgICAgICAgIHRvUmVuZGVyVGFibGVDZWxsKGNlbGwpLT5hZGRDaGls
ZChjaGlsZCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAkocmV2
aXNpb24gMTU2MTQzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93
LmgJKHdvcmtpbmcgY29weSkKQEAgLTg4LDYgKzg4LDggQEAgcHVibGljOgogICAgIGNvbnN0IEJv
cmRlclZhbHVlJiBib3JkZXJBZGpvaW5pbmdTdGFydENlbGwoY29uc3QgUmVuZGVyVGFibGVDZWxs
KikgY29uc3Q7CiAgICAgY29uc3QgQm9yZGVyVmFsdWUmIGJvcmRlckFkam9pbmluZ0VuZENlbGwo
Y29uc3QgUmVuZGVyVGFibGVDZWxsKikgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hp
bGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIE9W
RVJSSURFOworCiBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIChpc0Fub255bW91cygpIHx8IGlzUHNldWRvRWxlbWVu
dCgpKSA/ICJSZW5kZXJUYWJsZVJvdyAoYW5vbnltb3VzKSIgOiAiUmVuZGVyVGFibGVSb3ciOyB9
CiAKQEAgLTk1LDcgKzk3LDYgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVS
ZW1vdmVkRnJvbVRyZWUoKSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChS
ZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCkgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgTGF5
b3V0UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1v
ZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFs
IGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQ
b2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURFOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHJl
dmlzaW9uIDE1NjE0MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNl
Y3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsMTQgKzEzMiwxNCBAQCB2b2lkIFJlbmRl
clRhYmxlU2VjdGlvbjo6YWRkQ2hpbGQoUmVuZGVyCiAgICAgICAgIGlmIChsYXN0ICYmIGxhc3Qt
PmlzQW5vbnltb3VzKCkgJiYgIWxhc3QtPmlzQmVmb3JlT3JBZnRlckNvbnRlbnQoKSkgewogICAg
ICAgICAgICAgaWYgKGJlZm9yZUNoaWxkID09IGxhc3QpCiAgICAgICAgICAgICAgICAgYmVmb3Jl
Q2hpbGQgPSBsYXN0LT5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICBsYXN0LT5hZGRDaGlsZChj
aGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICAgICAgdG9SZW5kZXJUYWJsZVJvdyhsYXN0KS0+
YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCiAgICAgICAgIGlmIChiZWZvcmVDaGlsZCAmJiAhYmVmb3JlQ2hpbGQtPmlzQW5vbnlt
b3VzKCkgJiYgYmVmb3JlQ2hpbGQtPnBhcmVudCgpID09IHRoaXMpIHsKICAgICAgICAgICAgIFJl
bmRlck9iamVjdCogcm93ID0gYmVmb3JlQ2hpbGQtPnByZXZpb3VzU2libGluZygpOwogICAgICAg
ICAgICAgaWYgKHJvdyAmJiByb3ctPmlzVGFibGVSb3coKSAmJiByb3ctPmlzQW5vbnltb3VzKCkp
IHsKLSAgICAgICAgICAgICAgICByb3ctPmFkZENoaWxkKGNoaWxkKTsKKyAgICAgICAgICAgICAg
ICB0b1JlbmRlclRhYmxlUm93KHJvdyktPmFkZENoaWxkKGNoaWxkKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE1MCwxMSArMTUwLDExIEBA
IHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjphZGRDaGlsZChSZW5kZXIKICAgICAgICAgd2hpbGUg
KGxhc3RCb3ggJiYgbGFzdEJveC0+cGFyZW50KCktPmlzQW5vbnltb3VzKCkgJiYgIWxhc3RCb3gt
PmlzVGFibGVSb3coKSkKICAgICAgICAgICAgIGxhc3RCb3ggPSBsYXN0Qm94LT5wYXJlbnQoKTsK
ICAgICAgICAgaWYgKGxhc3RCb3ggJiYgbGFzdEJveC0+aXNBbm9ueW1vdXMoKSAmJiAhbGFzdEJv
eC0+aXNCZWZvcmVPckFmdGVyQ29udGVudCgpKSB7Ci0gICAgICAgICAgICBsYXN0Qm94LT5hZGRD
aGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICAgICAgdG9SZW5kZXJUYWJsZVJvdyhs
YXN0Qm94KS0+YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCi0gICAgICAgIFJlbmRlck9iamVjdCogcm93ID0gUmVuZGVyVGFibGVS
b3c6OmNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcih0aGlzKTsKKyAgICAgICAgUmVu
ZGVyVGFibGVSb3cqIHJvdyA9IFJlbmRlclRhYmxlUm93OjpjcmVhdGVBbm9ueW1vdXNXaXRoUGFy
ZW50UmVuZGVyZXIodGhpcyk7CiAgICAgICAgIGFkZENoaWxkKHJvdywgYmVmb3JlQ2hpbGQpOwog
ICAgICAgICByb3ctPmFkZENoaWxkKGNoaWxkKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxG
cmFjdGlvbi5jcHAJKHJldmlzaW9uIDE1NjE0MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIs
OSArMTAyLDkgQEAgdm9pZCBSZW5kZXJNYXRoTUxGcmFjdGlvbjo6YWRkQ2hpbGQoUmVuZAogICAg
IH0KICAgICAKICAgICBpZiAoZmlyc3RDaGlsZCgpLT5pc0VtcHR5KCkpCi0gICAgICAgIGZpcnN0
Q2hpbGQoKS0+YWRkQ2hpbGQoY2hpbGQpOworICAgICAgICB0b1JlbmRlckVsZW1lbnQoZmlyc3RD
aGlsZCgpKS0+YWRkQ2hpbGQoY2hpbGQpOwogICAgIGVsc2UKLSAgICAgICAgbGFzdENoaWxkKCkt
PmFkZENoaWxkKGNoaWxkKTsKKyAgICAgICAgdG9SZW5kZXJFbGVtZW50KGxhc3RDaGlsZCgpKS0+
YWRkQ2hpbGQoY2hpbGQpOwogICAgIAogICAgIHVwZGF0ZUZyb21FbGVtZW50KCk7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
Um9vdC5jcHAJKHJldmlzaW9uIDE1NjE0MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw3ICsxNzAs
NyBAQCB2b2lkIFJlbmRlck1hdGhNTFJvb3Q6OmFkZENoaWxkKFJlbmRlck9iCiAgICAgaWYgKG5l
d0NoaWxkLT5zdHlsZSgpLT5wb3NpdGlvbigpID09IEFic29sdXRlUG9zaXRpb24pCiAgICAgICAg
IFJlbmRlck1hdGhNTEJsb2NrOjphZGRDaGlsZChuZXdDaGlsZCk7CiAgICAgZWxzZQotICAgICAg
ICBmaXJzdENoaWxkKCktPmFkZENoaWxkKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCAmJiBiZWZvcmVD
aGlsZC0+cGFyZW50KCkgPT0gZmlyc3RDaGlsZCgpID8gYmVmb3JlQ2hpbGQgOiAwKTsKKyAgICAg
ICAgdG9SZW5kZXJFbGVtZW50KGZpcnN0Q2hpbGQoKSktPmFkZENoaWxkKG5ld0NoaWxkLCBiZWZv
cmVDaGlsZCAmJiBiZWZvcmVDaGlsZC0+cGFyZW50KCkgPT0gZmlyc3RDaGlsZCgpID8gYmVmb3Jl
Q2hpbGQgOiAwKTsKIH0KIAogUmVuZGVyQm94TW9kZWxPYmplY3QqIFJlbmRlck1hdGhNTFJvb3Q6
OmluZGV4KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4
dExheW91dEVuZ2luZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcAkocmV2aXNpb24gMTU2MTQzKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjM3LDggKzIzNyw4IEBAIHZvaWQgU1ZHVGV4dExheW91dEVuZ2luZTo6bGF5b3V0
SW5saW5lVGUKIAogICAgIFJlbmRlclNWR0lubGluZVRleHQmIHRleHQgPSB0ZXh0Qm94LT5yZW5k
ZXJlcigpOwogICAgIEFTU0VSVCh0ZXh0LnBhcmVudCgpKTsKLSAgICBBU1NFUlQodGV4dC5wYXJl
bnQoKS0+bm9kZSgpKTsKLSAgICBBU1NFUlQodGV4dC5wYXJlbnQoKS0+bm9kZSgpLT5pc1NWR0Vs
ZW1lbnQoKSk7CisgICAgQVNTRVJUKHRleHQucGFyZW50KCktPmVsZW1lbnQoKSk7CisgICAgQVNT
RVJUKHRleHQucGFyZW50KCktPmVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCkpOwogCiAgICAgY29u
c3QgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dC5zdHlsZSgpOwogICAgIEFTU0VSVChzdHlsZSk7
CkBAIC00MjcsNyArNDI3LDcgQEAgdm9pZCBTVkdUZXh0TGF5b3V0RW5naW5lOjpsYXlvdXRUZXh0
T25MaQogICAgIGlmIChtX2luUGF0aExheW91dCAmJiBtX3RleHRQYXRoLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgU1ZHRWxlbWVudCogbGVuZ3RoQ29udGV4dCA9IHRvU1ZHRWxl
bWVudCh0ZXh0LT5wYXJlbnQoKS0+bm9kZSgpKTsKKyAgICBTVkdFbGVtZW50KiBsZW5ndGhDb250
ZXh0ID0gdG9TVkdFbGVtZW50KHRleHQtPnBhcmVudCgpLT5lbGVtZW50KCkpOwogICAgIAogICAg
IFJlbmRlck9iamVjdCogdGV4dFBhcmVudCA9IHRleHQtPnBhcmVudCgpOwogICAgIGJvb2wgZGVm
aW5lc1RleHRMZW5ndGggPSB0ZXh0UGFyZW50ID8gcGFyZW50RGVmaW5lc1RleHRMZW5ndGgodGV4
dFBhcmVudCkgOiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5jcHAJKHJldmlzaW9u
IDE1NjE0MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVu
Z2luZUJhc2VsaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1
ZGUgIlNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5oIgogCiAjaW5jbHVkZSAiRm9udC5oIgot
I2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKICNp
bmNsdWRlICJTVkdMZW5ndGhDb250ZXh0LmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIK
ICNpbmNsdWRlICJTVkdUZXh0TWV0cmljcy5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUv
U3R5bGVSZXNvbHZlVHJlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUv
U3R5bGVSZXNvbHZlVHJlZS5jcHAJKHJldmlzaW9uIDE1NjE0MykKKysrIFNvdXJjZS9XZWJDb3Jl
L3N0eWxlL1N0eWxlUmVzb2x2ZVRyZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5ICszNSw5
IEBACiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlcmlu
Z1RyYXZlcnNhbC5oIgogI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKKyNpbmNsdWRlICJSZW5k
ZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyRnVsbFNjcmVlbi5oIgogI2luY2x1ZGUgIlJl
bmRlck5hbWVkRmxvd1RocmVhZC5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1
ZGUgIlJlbmRlclRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyV2lkZ2V0LmgiCkBAIC0yMjAsMTcgKzIyMCwxOCBAQCBzdGF0aWMgdm9pZCBjcmVhdGVSZW5k
ZXJlcklmTmVlZGVkKEVsZW1lCiAgICAgaWYgKCFlbGVtZW50LnJlbmRlcmVySXNOZWVkZWQoKnN0
eWxlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJl
cjsKKyAgICBSZW5kZXJFbGVtZW50KiBwYXJlbnRSZW5kZXJlcjsKICAgICBSZW5kZXJPYmplY3Qq
IG5leHRSZW5kZXJlcjsKICAgICBpZiAocGFyZW50Rmxvd1JlbmRlcmVyKSB7CiAgICAgICAgIHBh
cmVudFJlbmRlcmVyID0gcGFyZW50Rmxvd1JlbmRlcmVyOwogICAgICAgICBuZXh0UmVuZGVyZXIg
PSBwYXJlbnRGbG93UmVuZGVyZXItPm5leHRSZW5kZXJlckZvck5vZGUoJmVsZW1lbnQpOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIHBhcmVudFJlbmRlcmVyID0gcmVuZGVyaW5nUGFyZW50Tm9kZS0+
cmVuZGVyZXIoKTsKKyAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBwYXRoIEVsZW1lbnQgb25s
eSwgaGFuZGxlIHRoZSByb290IHNwZWNpYWwgY2FzZSBzZXBhcmF0ZWx5LgorICAgICAgICBwYXJl
bnRSZW5kZXJlciA9IHRvUmVuZGVyRWxlbWVudChyZW5kZXJpbmdQYXJlbnROb2RlLT5yZW5kZXJl
cigpKTsKICAgICAgICAgbmV4dFJlbmRlcmVyID0gbmV4dFNpYmxpbmdSZW5kZXJlcihlbGVtZW50
LCByZW5kZXJpbmdQYXJlbnROb2RlKTsKICAgICB9CiAKLSAgICBSZW5kZXJPYmplY3QqIG5ld1Jl
bmRlcmVyID0gZWxlbWVudC5jcmVhdGVSZW5kZXJlcigqZG9jdW1lbnQucmVuZGVyQXJlbmEoKSwg
KnN0eWxlKTsKKyAgICBSZW5kZXJFbGVtZW50KiBuZXdSZW5kZXJlciA9IGVsZW1lbnQuY3JlYXRl
UmVuZGVyZXIoKmRvY3VtZW50LnJlbmRlckFyZW5hKCksICpzdHlsZSk7CiAgICAgaWYgKCFuZXdS
ZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghcGFyZW50UmVuZGVyZXItPmlzQ2hp
bGRBbGxvd2VkKG5ld1JlbmRlcmVyLCBzdHlsZS5nZXQoKSkpIHsKQEAgLTM1OCw3ICszNTksNyBA
QCBzdGF0aWMgdm9pZCBjcmVhdGVUZXh0UmVuZGVyZXJJZk5lZWRlZChUCiAgICAgQ29udGFpbmVy
Tm9kZSogcmVuZGVyaW5nUGFyZW50Tm9kZSA9IE5vZGVSZW5kZXJpbmdUcmF2ZXJzYWw6OnBhcmVu
dCgmdGV4dE5vZGUpOwogICAgIGlmICghcmVuZGVyaW5nUGFyZW50Tm9kZSkKICAgICAgICAgcmV0
dXJuOwotICAgIFJlbmRlck9iamVjdCogcGFyZW50UmVuZGVyZXIgPSByZW5kZXJpbmdQYXJlbnRO
b2RlLT5yZW5kZXJlcigpOworICAgIFJlbmRlckVsZW1lbnQqIHBhcmVudFJlbmRlcmVyID0gdG9S
ZW5kZXJFbGVtZW50KHJlbmRlcmluZ1BhcmVudE5vZGUtPnJlbmRlcmVyKCkpOwogICAgIGlmICgh
cGFyZW50UmVuZGVyZXIgfHwgIXBhcmVudFJlbmRlcmVyLT5jYW5IYXZlQ2hpbGRyZW4oKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIGlmICghcmVuZGVyaW5nUGFyZW50Tm9kZS0+Y2hpbGRTaG91bGRD
cmVhdGVSZW5kZXJlcigmdGV4dE5vZGUpKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Zv
bnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEu
Y3BwCShyZXZpc2lvbiAxNTYxNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAjaWYgRU5BQkxFKFNWR19GT05U
UykKICNpbmNsdWRlICJTVkdGb250RGF0YS5oIgogCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0Lmgi
CisjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0FsdEdseXBoRWxlbWVu
dC5oIgogI2luY2x1ZGUgIlNWR0ZvbnRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRm9udEZhY2VF
bGVtZW50LmgiCkBAIC0xNjYsMTUgKzE2NiwxNSBAQCBib29sIFNWR0ZvbnREYXRhOjphcHBseVNW
R0dseXBoU2VsZWN0aW9uCiAgICAgVmVjdG9yPFN0cmluZz4gYWx0R2x5cGhOYW1lczsKIAogICAg
IGlmIChyZW5kZXJPYmplY3QpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJP
YmplY3QgPSByZW5kZXJPYmplY3QtPmlzVGV4dCgpID8gcmVuZGVyT2JqZWN0LT5wYXJlbnQoKSA6
IHJlbmRlck9iamVjdDsKLSAgICAgICAgQVNTRVJUKHBhcmVudFJlbmRlck9iamVjdCk7CisgICAg
ICAgIFJlbmRlckVsZW1lbnQqIHBhcmVudFJlbmRlcmVyID0gcmVuZGVyT2JqZWN0LT5pc1JlbmRl
ckVsZW1lbnQoKSA/IHRvUmVuZGVyRWxlbWVudChyZW5kZXJPYmplY3QpIDogcmVuZGVyT2JqZWN0
LT5wYXJlbnQoKTsKKyAgICAgICAgQVNTRVJUKHBhcmVudFJlbmRlcmVyKTsKIAotICAgICAgICBp
c1ZlcnRpY2FsVGV4dCA9IHBhcmVudFJlbmRlck9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKS0+
aXNWZXJ0aWNhbFdyaXRpbmdNb2RlKCk7Ci0gICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRSZW5k
ZXJPYmplY3RFbGVtZW50ID0gdG9FbGVtZW50KHBhcmVudFJlbmRlck9iamVjdC0+bm9kZSgpKSkg
ewotICAgICAgICAgICAgbGFuZ3VhZ2UgPSBwYXJlbnRSZW5kZXJPYmplY3RFbGVtZW50LT5nZXRB
dHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKTsKKyAgICAgICAgaXNWZXJ0aWNhbFRleHQgPSBw
YXJlbnRSZW5kZXJlci0+c3R5bGUoKS0+c3ZnU3R5bGUoKS0+aXNWZXJ0aWNhbFdyaXRpbmdNb2Rl
KCk7CisgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRSZW5kZXJlckVsZW1lbnQgPSBwYXJlbnRS
ZW5kZXJlci0+ZWxlbWVudCgpKSB7CisgICAgICAgICAgICBsYW5ndWFnZSA9IHBhcmVudFJlbmRl
cmVyRWxlbWVudC0+Z2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cik7CiAKLSAgICAgICAg
ICAgIGlmIChpc1NWR0FsdEdseXBoRWxlbWVudChwYXJlbnRSZW5kZXJPYmplY3RFbGVtZW50KSkg
ewotICAgICAgICAgICAgICAgIFNWR0FsdEdseXBoRWxlbWVudCogYWx0R2x5cGggPSB0b1NWR0Fs
dEdseXBoRWxlbWVudChwYXJlbnRSZW5kZXJPYmplY3RFbGVtZW50KTsKKyAgICAgICAgICAgIGlm
IChpc1NWR0FsdEdseXBoRWxlbWVudChwYXJlbnRSZW5kZXJlckVsZW1lbnQpKSB7CisgICAgICAg
ICAgICAgICAgU1ZHQWx0R2x5cGhFbGVtZW50KiBhbHRHbHlwaCA9IHRvU1ZHQWx0R2x5cGhFbGVt
ZW50KHBhcmVudFJlbmRlcmVyRWxlbWVudCk7CiAgICAgICAgICAgICAgICAgaWYgKCFhbHRHbHlw
aC0+aGFzVmFsaWRHbHlwaEVsZW1lbnRzKGFsdEdseXBoTmFtZXMpKQogICAgICAgICAgICAgICAg
ICAgICBhbHRHbHlwaE5hbWVzLmNsZWFyKCk7CiAgICAgICAgICAgICB9Cg==
</data>
<flag name="review"
          id="234308"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>