<?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>70139</bug_id>
          
          <creation_ts>2011-10-14 14:02:32 -0700</creation_ts>
          <short_desc>Follow up the recent HTMLSelectElement improvements with a little bit more</short_desc>
          <delta_ts>2011-10-16 14:40: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>Forms</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>
          <dependson>70173</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>luiz</cc>
    
    <cc>ossy</cc>
    
    <cc>rniwa</cc>
    
    <cc>tkent</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>484266</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-14 14:02:32 -0700</bug_when>
    <thetext>Follow up the recent HTMLSelectElement improvements with a little bit more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484293</commentid>
    <comment_count>1</comment_count>
      <attachid>111075</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-14 14:22:40 -0700</bug_when>
    <thetext>Created attachment 111075
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484392</commentid>
    <comment_count>2</comment_count>
      <attachid>111075</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-14 16:19:01 -0700</bug_when>
    <thetext>Comment on attachment 111075
Patch

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

The code looks much better after this patch. r=me provided assertions in toHTMLSelectElement are fixed.

&gt; Source/WebCore/html/HTMLSelectElement.cpp:471
&gt;      const Vector&lt;HTMLElement*&gt;&amp; items = listItems();

This local variable seems unnecessary.

&gt; Source/WebCore/html/HTMLSelectElement.h:168
&gt; +    mutable Vector&lt;HTMLElement*&gt; m_listItems;

I&apos;m not sure making this mutable is necessarily cleaner.

&gt; Source/WebCore/html/HTMLSelectElement.h:181
&gt; +    mutable bool m_shouldRecalcListItems;

Ditto.

&gt; Source/WebCore/html/HTMLSelectElement.h:200
&gt; +    ASSERT(!node || node-&gt;isHTMLElement());

This should be isHTMLSelectElement.

&gt; Source/WebCore/html/HTMLSelectElement.h:206
&gt; +    ASSERT(!node || node-&gt;isHTMLElement());

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484394</commentid>
    <comment_count>3</comment_count>
      <attachid>111075</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-14 16:24:15 -0700</bug_when>
    <thetext>Comment on attachment 111075
Patch

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

&gt;&gt; Source/WebCore/html/HTMLSelectElement.h:168
&gt;&gt; +    mutable Vector&lt;HTMLElement*&gt; m_listItems;
&gt; 
&gt; I&apos;m not sure making this mutable is necessarily cleaner.

How so? This is exactly what mutable is for.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484433</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-14 17:29:40 -0700</bug_when>
    <thetext>Committed r97533: &lt;http://trac.webkit.org/changeset/97533&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484439</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-14 17:47:19 -0700</bug_when>
    <thetext>Windows build fix attempt committed in http://trac.webkit.org/changeset/97534.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484446</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-14 18:01:01 -0700</bug_when>
    <thetext>Thanks for fixing the chromium windows build in http://trac.webkit.org/changeset/97535.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484504</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-14 23:56:51 -0700</bug_when>
    <thetext>GTK build fix landed in http://trac.webkit.org/changeset/97539.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484825</commentid>
    <comment_count>8</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-10-16 14:39:03 -0700</bug_when>
    <thetext>Windows build is still broken ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484826</commentid>
    <comment_count>9</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-10-16 14:40:59 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Windows build is still broken ...

Sorry for blaming you, http://trac.webkit.org/changeset/97536 is the culprit.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111075</attachid>
            <date>2011-10-14 14:22:40 -0700</date>
            <delta_ts>2011-10-14 16:24:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70139-20111014142238.patch</filename>
            <type>text/plain</type>
            <size>55965</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3NTAzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQ4IEBACisyMDExLTEwLTE0ICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBGb2xsb3cgdXAgdGhlIHJlY2VudCBI
VE1MU2VsZWN0RWxlbWVudCBpbXByb3ZlbWVudHMgd2l0aCBhIGxpdHRsZSBiaXQgbW9yZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAxMzkKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvcmluZywg
Y292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICBNb3N0bHksIHRoaXMgYWRkcyBh
IHRvSFRNTFNlbGVjdEVsZW1lbnQgYW5kIHVzZXMgaXQgd2hlcmV2ZXIgcG9zc2libGUuCisKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlMaXN0Qm94OjpjYW5TZXRTZWxlY3RlZENoaWxkcmVuQXR0
cmlidXRlKTogVXNlIHRvSFRNTFNlbGVjdEVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5TGlzdEJveDo6YWRkQ2hpbGRyZW4pOiBEaXR0by4gQWxzbyByZW1vdmVkIHVubmVl
ZGVkIHRvSFRNTEVsZW1lbnQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TWVudUxpc3RQb3B1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVudUxp
c3RQb3B1cDo6YWRkQ2hpbGRyZW4pOiBEaXR0by4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6aXNNdWx0aVNlbGVjdGFibGUpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnN0cmluZ1ZhbHVlKTogUmVtb3ZlZCBj
aGVja3Mgb24gdGhlIHR5cGUgb2YgdGhlCisgICAgICAgIHVuZGVybHlpbmcgbm9kZSwgc2luY2Ug
b3RoZXIgY29kZSBhbHJlYWR5IGFzc3VtZXMgdGhhdCBhIG1lbnUgbGlzdCByZW5kZXJlciBpcyBv
bmx5CisgICAgICAgIGNyZWF0ZWQgZm9yIGEgc2VsZWN0IGVsZW1lbnQuIFN0cmVhbWxpbmVkIHRo
ZSBjb2RlIGEgYml0IGFuZCByZW1vdmVkIHNvbWUgdW5uZWVkZWQKKyAgICAgICAgbG9jYWwgdmFy
aWFibGVzLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uOjppbmRl
eFNldHRlcik6IFVzZSB0b0hUTUxTZWxlY3RFbGVtZW50LgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTSFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1M
U2VsZWN0RWxlbWVudDo6cmVtb3ZlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxT
ZWxlY3RFbGVtZW50OjppbmRleFNldHRlcik6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNlbGVj
dEFsbCk6IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTEtleWdlbkVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEtleWdlbkVsZW1lbnQ6OnNoYWRvd1NlbGVjdCk6IERpdHRvLgor
ICAgICAgICAqIGh0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MT3B0R3JvdXBFbGVtZW50OjpyZWNhbGNTZWxlY3RPcHRpb25zKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MT3B0R3JvdXBFbGVtZW50Ojpvd25lclNlbGVjdEVsZW1lbnQpOiBE
aXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxPcHRpb25FbGVtZW50OjpzZWxlY3RlZCk6IENoYW5nZWQgY29kZSB0byBjYWxs
IHJlbmFtZWQKKyAgICAgICAgdXBkYXRlTGlzdEl0ZW1TZWxlY3RlZFN0YXRlcyByYXRoZXIgdGhh
biB0aGUgY29uZnVzaW5nIG9sZCBuYW1lCisgICAgICAgIHJlY2FsY0xpc3RJdGVtc0lmTmVlZGVk
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCk6
IENoYW5nZWQgdG8gY2FsbAorICAgICAgICBvcHRpb25FbGVtZW50Q2hpbGRyZW5DaGFuZ2VkIHJh
dGhlciB0aGFuIGNhbGxpbmcgY2hpbGRyZW5DaGFuZ2VkLAorICAgICAgICBiZWNhdXNlIHRoZSBj
aGlsZHJlbiBvZiB0aGUgc2VsZWN0IGVsZW1lbnQgZGlkIG5vdCBjaGFuZ2UhCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6b3duZXJTZWxlY3RFbGVtZW50KTogVXNlIHRvSFRN
TFNlbGVjdEVsZW1lbnQuCisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbnNDb2xsZWN0aW9uOjphZGQpOiBVc2UgdG9I
VE1MU2VsZWN0RWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25zQ29sbGVjdGlv
bjo6cmVtb3ZlKTogVXNlIHRvSFRNTFNlbGVjdEVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpI
VE1MT3B0aW9uc0NvbGxlY3Rpb246OnNlbGVjdGVkSW5kZXgpOiBVc2UgdG9IVE1MU2VsZWN0RWxl
bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25zQ29sbGVjdGlvbjo6c2V0U2VsZWN0
ZWRJbmRleCk6IFVzZSB0b0hUTUxTZWxlY3RFbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE9wdGlvbnNDb2xsZWN0aW9uOjpzZXRMZW5ndGgpOiBVc2UgdG9IVE1MU2VsZWN0RWxlbWVudC4K
KyAgICAgICAgKiBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxTZWxlY3RFbGVtZW50OjpzZXRTZWxlY3RlZEluZGV4QnlVc2VyKTogQ2FsbCBzZXRTZWxl
Y3RlZEluZGV4CisgICAgICAgIHdpdGhvdXQgdGhlIG5vdy11bm5lZWRlZCBpbnRlcm5hbCBzdWZm
aXguCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUpOiBXaGVuIHRoZSBjb2RlIHNheXMgdGhhdAorICAgICAgICB3ZSBzaG91bGQgImRldGVy
bWluZSBzZWxlY3RlZG5lc3Mgb2YgdGhlIGl0ZW1zIiwgY2FsbCB1cGRhdGVMaXN0SXRlbVNlbGVj
dGVkU3RhdGVzCisgICAgICAgIHJhdGhlciB0aGFuIHRoZSBjb25mdXNpbmdseSBuYW1lZCByZWNh
bGNMaXN0SXRlbXNJZk5lZWRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50
Ojp1cGRhdGVMaXN0SXRlbVNlbGVjdGVkU3RhdGVzKTogUmVuYW1lZAorICAgICAgICByZWNhbGNM
aXN0SXRlbXNJZk5lZWRlZCB0byB0aGlzLCBzaW5jZSB0aGF0J3Mgd2hhdCB0aGlzIGZ1bmN0aW9u
IGlzIGZvci4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpvcHRpb25FbGVt
ZW50Q2hpbGRyZW5DaGFuZ2VkKTogQWRkZWQuIERvZXMKKyAgICAgICAgdGhlIHNhbWUgd29yayBh
cyBjaGlsZHJlbkNoYW5nZWQsIGFsdGhvdWdoIGl0IGRvZXMgbm90IGNhbGwgdXAgdG8gdGhlCisg
ICAgICAgIGJhc2UgY2xhc3MgY2hpbGRyZW5DaGFuZ2VkIGZ1bmN0aW9uLiBMYXRlciB3ZSBtaWdo
dCBmaW5kIHdlIGNhbiByZW1vdmUKKyAgICAgICAgc29tZSBvZiB0aGUgd29yayBoZXJlLCBmb3Ig
ZXhhbXBsZSBpdCdzIG5vdCBjbGVhciB3ZSBzaG91bGQgY2FsbCB0aGUKKyAgICAgICAgYWNjZXNz
aWJpbGl0eSBjaGlsZHJlbkNoYW5nZWQgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpIVE1M
U2VsZWN0RWxlbWVudDo6bmV4dFZhbGlkSW5kZXgpOiBDaGFuZ2VkIHRoaXMgdG8gYSBtZW1iZXIg
ZnVuY3Rpb24KKyAgICAgICAgYW5kIG1hZGUgaXQgZ2V0IHRoZSBsaXN0IGl0ZW1zIGl0c2VsZiBy
YXRoZXIgdGhhbiByZXF1aXJpbmcgdGhleSBiZSBwYXNzZWQgaW4uCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU2VsZWN0RWxlbWVudDo6bmV4dFNlbGVjdGFibGVMaXN0SW5kZXgpOiBVcGRhdGVkIGZv
ciBjaGFuZ2UgdG8KKyAgICAgICAgbmV4dFZhbGlkSW5kZXguCisgICAgICAgIChXZWJDb3JlOjpI
VE1MU2VsZWN0RWxlbWVudDo6cHJldmlvdXNTZWxlY3RhYmxlTGlzdEluZGV4KTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6Zmlyc3RTZWxlY3RhYmxlTGlzdElu
ZGV4KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6bGFzdFNl
bGVjdGFibGVMaXN0SW5kZXgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RF
bGVtZW50OjpuZXh0U2VsZWN0YWJsZUxpc3RJbmRleFBhZ2VBd2F5KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6bGlzdEl0ZW1zKTogUmVtb3ZlZCB1bm5lZWRl
ZCBjb25zdF9jYXN0LCBzaW5jZQorICAgICAgICByZWNhbGNMaXN0SXRlbXMgaXMgbm93IGEgY29u
c3QgbWVtYmVyIGZ1bmN0aW9uLiBDYWxsIHJlY2FsY0xpc3RJdGVtcyBieSB0aGF0CisgICAgICAg
IG5hbWUgaW5zdGVhZCBvZiByZWNhbGNMaXN0SXRlbXNJbnRlcm5hbC4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxTZWxlY3RFbGVtZW50OjpyZWNhbGNMaXN0SXRlbXMpOiBSZW5hbWVkIGZyb20gcmVj
YWxjTGlzdEl0ZW1zSW50ZXJuYWwKKyAgICAgICAgYW5kIG1hZGUgdGhpcyBhIGNvbnN0IG1lbWJl
ciBmdW5jdGlvbi4gVGhlIGRhdGEgbWVtYmVycyB0aGF0IHRoaXMgbmVlZHMgdG8gbW9kaWZ5Cisg
ICAgICAgIGFyZSBub3cgbXV0YWJsZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVt
ZW50OjpzZXRTZWxlY3RlZEluZGV4KTogUmVuYW1lZCBmcm9tIHNldFNlbGVjdGVkSW5kZXhJbnRl
cm5hbC4KKyAgICAgICAgQ2hhbmdlZCBjYWxsIHRvIHVwZGF0ZVZhbGlkaXR5IHRvIGluc3RlYWQg
Y2FsbCBzZXROZWVkc1ZhbGlkaXR5Q2hlY2ssIHNpbmNlIGJvdGgKKyAgICAgICAgZG8gdGhlIHNh
bWUgdGhpbmcuCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6cGFyc2VNdWx0
aXBsZUF0dHJpYnV0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1l
bnQ6Om1lbnVMaXN0RGVmYXVsdEV2ZW50SGFuZGxlcik6IFVwZGF0ZWQgZm9yIGNoYW5nZSB0bwor
ICAgICAgICBuZXh0VmFsaWRJbmRleCwgcmVtb3ZlZCB1bm5lZWRlZCBjb21wYXJpc29uIHdpdGgg
emVybyB0aGF0J3MgYWxyZWFkeSBoYW5kbGVkIGJ5CisgICAgICAgIGNhc3RpbmcgdG8gYW4gdW5z
aWduZWQgdHlwZSwgYW5kIHVzZSBzZXRTZWxlY3RlZEluZGV4IGluc3RlYWQgb2YgdXNpbmcKKyAg
ICAgICAgc2V0U2VsZWN0ZWRJbmRleEludGVybmFsIHNpbmNlIHRoZXkgYXJlIGJvdGggdGhlIHNh
bWUgdGhpbmcuCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6bGlzdEJveERl
ZmF1bHRFdmVudEhhbmRsZXIpOiBSZW1vdmVkIGFub3RoZXIgdW5uZWVkZWQKKyAgICAgICAgY29t
cGFyaXNpb24gd2l0aCB6ZXJvIHRoYXQncyBoYW5kbGVkIGJ5IGNhc3RpbmcgdG8gYW4gdW5zaWdu
ZWQgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpsYXN0U2VsZWN0
ZWRMaXN0SW5kZXgpOiBVc2Ugc2l6ZV90IGluc3RlYWQgb2YgdW5zaWduZWQKKyAgICAgICAgZm9y
IGEgdmVjdG9yIGluZGV4LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnR5
cGVBaGVhZEZpbmQpOiBVc2Ugc2V0U2VsZWN0ZWRJbmRleCBpbnN0ZWFkIG9mCisgICAgICAgIHNl
dFNlbGVjdGVkSW5kZXhJbnRlcm5hbC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVt
ZW50OjppbnNlcnRlZEludG9UcmVlKTogUmVtb3ZlZCB1bm5lZWRlZCBleHBsaWNpdCBib29sZWFu
CisgICAgICAgIHdoZW4gY2FsbGluZyBhIGZ1bmN0aW9uIHRoYXQgYWxyZWFkeSBoYXMgYSBkZWZh
dWx0IHZhbHVlIG9mIHRydWUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6
YWNjZXNzS2V5U2V0U2VsZWN0ZWRJbmRleCk6IFVzZSBzZXRTZWxlY3RlZEluZGV4CisgICAgICAg
IGluc3RlYWQgb2Ygc2V0U2VsZWN0ZWRJbmRleEludGVybmFsLgorCisgICAgICAgICogaHRtbC9I
VE1MU2VsZWN0RWxlbWVudC5oOiBNYWRlIGNoaWxkcmVuQ2hhbmdlZCBwcml2YXRlLiBBZGRlZAor
ICAgICAgICBvcHRpb25FbGVtZW50Q2hpbGRyZW5DaGFuZ2VkLiBSZW5hbWVkIHJlY2FsY0xpc3RJ
dGVtc0lmTmVlZGVkIHRvIHRoZSBjbGVhcmVyCisgICAgICAgIHVwZGF0ZUxpc3RJdGVtU2VsZWN0
ZWRTdGF0ZXMuIFJlbW92ZWQgdW51c2VkIGxpc3RCb3hTZWxlY3RJdGVtLiBSZW1vdmVkCisgICAg
ICAgIHVwZGF0ZVZhbGlkaXR5IGFmdGVyIGNoYW5naW5nIGFsbCBjYWxsZXJzIHRvIGluc3RlYWQg
Y2FsbCBzZXROZWVkc1ZhbGlkaXR5Q2hlY2suCisgICAgICAgIE1hZGUgY2FuU2VsZWN0QWxsIGFu
ZCBzZWxlY3RBbGwgbm9uLXZpcnR1YWwuIFJlbW92ZWQgcmVjYWxjTGlzdEl0ZW1zSW50ZXJuYWwK
KyAgICAgICAgc2luY2UgaXQncyB0aGUgc2FtZSB0aGluZyBhcyByZWNhbGNMaXN0SXRlbXMgbm93
LiBSZW5hbWVkIHNldFNlbGVjdGVkSW5kZXhJbnRlcm5hbAorICAgICAgICB0byBzZXRTZWxlY3Rl
ZEluZGV4IHNpbmNlIGl0J3MgdGhlIHNhbWUgZnVuY3Rpb24sIGp1c3Qgd2l0aCBhIGZldyBhcmd1
bWVudHMgd2UKKyAgICAgICAgZG9uJ3Qgd2FudCB0byBhbGxvdyBvdXRzaWRlIGNhbGxlcnMgdG8g
cGFzcy4gQ2hhbmdlZCBuZXh0VmFsaWRJbmRleCBpbnRvIGEKKyAgICAgICAgbm9uLXN0YXRpYyBt
ZW1iZXIgZnVuY3Rpb24uIE1hZGUgbV9saXN0SXRlbXMgYW5kIG1fc2hvdWxkUmVjYWxjTGlzdEl0
ZW1zIG11dGFibGUuCisgICAgICAgIEFkZGVkIGEgdG9IVE1MU2VsZWN0RWxlbWVudCBmdW5jdGlv
biwgbW9kZWxlZCBvbiB0aGUgdG9FbGVtZW50IGZ1bmN0aW9uLgorCisgICAgICAgICogaHRtbC9W
YWxpZGl0eVN0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZhbGlkaXR5U3RhdGU6OnZhbHVl
TWlzc2luZyk6IFVzZSB0b0hUTUxTZWxlY3RFbGVtZW50LgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnVwZGF0
ZUZyb21FbGVtZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojpz
Y3JvbGxUb1JldmVhbFNlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGlzdEJveDo6c2l6ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6
bnVtSXRlbXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmFkZEZv
Y3VzUmluZ1JlY3RzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojpw
YWludEl0ZW1Gb3JlZ3JvdW5kKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0
Qm94OjpwYWludEl0ZW1CYWNrZ3JvdW5kKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMaXN0Qm94OjpwYW5TY3JvbGwpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxp
c3RCb3g6OmF1dG9zY3JvbGwpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RC
b3g6OnN0b3BBdXRvc2Nyb2xsKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0
Qm94Ojp2YWx1ZUNoYW5nZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RC
b3g6Om5vZGVBdFBvaW50KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lbnVM
aXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0Ojp1cGRhdGVPcHRpb25z
V2lkdGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0Ojp1cGRhdGVG
cm9tRWxlbWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6OnNl
dFRleHRGcm9tT3B0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlz
dDo6c2hvd1BvcHVwKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6
dmFsdWVDaGFuZ2VkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6
bGlzdEJveFNlbGVjdEl0ZW0pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lbnVM
aXN0OjptdWx0aXBsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6
OmRpZFNldFNlbGVjdGVkSW5kZXgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1l
bnVMaXN0OjpkaWRVcGRhdGVBY3RpdmVPcHRpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck1lbnVMaXN0OjppdGVtVGV4dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTWVudUxpc3Q6Oml0ZW1BY2Nlc3NpYmlsaXR5VGV4dCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWVudUxpc3Q6Oml0ZW1Ub29sVGlwKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNZW51TGlzdDo6aXRlbUlzRW5hYmxlZCk6IERpdHRvLiBBbHNvIHVzZSB0aGUK
KyAgICAgICAgZGlzYWJsZWQgZnVuY3Rpb24gaW5zdGVhZCBvZiB0aGUgdmlydHVhbCBpc0VuYWJs
ZWRGb3JtQ29udHJvbAorICAgICAgICBmdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgb3B0Z3JvdXAg
aXMgZW5hYmxlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0OjppdGVtU3R5bGUp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0OjppdGVtQmFja2dyb3Vu
ZENvbG9yKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6bGlzdFNp
emUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0OjpzZWxlY3RlZElu
ZGV4KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6aXRlbUlzU2Vw
YXJhdG9yKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6aXRlbUlz
TGFiZWwpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0OjppdGVtSXNT
ZWxlY3RlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6OnNldFRl
eHRGcm9tSXRlbSk6IERpdHRvLgorCiAyMDExLTEwLTE0ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5m
cmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFdlYlByb2Nlc3MgY3Jh
c2hlcyBoYXJkIHdoZW4gaW5zcGVjdGluZyBlbGVtZW50cyB3aXRoIGJvcmRlci1pbWFnZXMgYXBw
bGllZApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlz
dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5TGlzdEJveC5jcHAJKHJldmlzaW9uIDk3NDkwKQorKysgU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYzLDcgKzYzLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5TGlzdEJveDo6Y2FuU2V0U2VsZWN0ZQog
ICAgIGlmICghc2VsZWN0Tm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIHJl
dHVybiAhc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihzZWxlY3ROb2RlKS0+ZGlzYWJs
ZWQoKTsKKyAgICByZXR1cm4gIXRvSFRNTFNlbGVjdEVsZW1lbnQoc2VsZWN0Tm9kZSktPmRpc2Fi
bGVkKCk7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eUxpc3RCb3g6OmFkZENoaWxkcmVuKCkKQEAg
LTc0LDEyICs3NCwxMiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlMaXN0Qm94OjphZGRDaGlsZHJlbigp
CiAgICAgCiAgICAgbV9oYXZlQ2hpbGRyZW4gPSB0cnVlOwogICAgIAotICAgIGNvbnN0IFZlY3Rv
cjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVu
dCo+KHNlbGVjdE5vZGUpLT5saXN0SXRlbXMoKTsKKyAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1l
bnQqPiYgbGlzdEl0ZW1zID0gdG9IVE1MU2VsZWN0RWxlbWVudChzZWxlY3ROb2RlKS0+bGlzdEl0
ZW1zKCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gbGlzdEl0ZW1zLnNpemUoKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgLy8gVGhlIGNhc3Qg
dG8gSFRNTEVsZW1lbnQgYmVsb3cgaXMgc2FmZSBiZWNhdXNlIHRoZSBvbmx5IG90aGVyIHBvc3Np
YmxlIGxpc3RJdGVtIHR5cGUKICAgICAgICAgLy8gd291bGQgYmUgYSBXTUxFbGVtZW50LCBidXQg
V01MIGJ1aWxkcyBkb24ndCB1c2UgYWNjZXNzaWJpbGl0eSBmZWF0dXJlcyBhdCBhbGwuCi0gICAg
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGxpc3RPcHRpb24gPSBsaXN0Qm94T3B0aW9uQWNjZXNz
aWJpbGl0eU9iamVjdCh0b0hUTUxFbGVtZW50KGxpc3RJdGVtc1tpXSkpOworICAgICAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBsaXN0T3B0aW9uID0gbGlzdEJveE9wdGlvbkFjY2Vzc2liaWxpdHlP
YmplY3QobGlzdEl0ZW1zW2ldKTsKICAgICAgICAgaWYgKGxpc3RPcHRpb24gJiYgIWxpc3RPcHRp
b24tPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKICAgICAgICAgICAgIG1fY2hpbGRyZW4uYXBw
ZW5kKGxpc3RPcHRpb24pOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXAuY3BwCShyZXZp
c2lvbiA5NzQ5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU1lbnVMaXN0UG9wdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NiwxMiArOTYsMTAgQEAgdm9p
ZCBBY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cDo6YWRkQ2hpbAogCiAgICAgbV9oYXZlQ2hpbGRy
ZW4gPSB0cnVlOwogCi0gICAgQVNTRVJUKHNlbGVjdE5vZGUtPmhhc1RhZ05hbWUoc2VsZWN0VGFn
KSk7Ci0KLSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc3RhdGlj
X2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihzZWxlY3ROb2RlKS0+bGlzdEl0ZW1zKCk7CisgICAg
Y29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHRvSFRNTFNlbGVjdEVsZW1l
bnQoc2VsZWN0Tm9kZSktPmxpc3RJdGVtcygpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGxpc3RJ
dGVtcy5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbiogb3B0aW9uID0gbWVudUxpc3RP
cHRpb25BY2Nlc3NpYmlsaXR5T2JqZWN0KHRvSFRNTEVsZW1lbnQobGlzdEl0ZW1zW2ldKSk7Cisg
ICAgICAgIEFjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbiogb3B0aW9uID0gbWVudUxpc3RPcHRp
b25BY2Nlc3NpYmlsaXR5T2JqZWN0KGxpc3RJdGVtc1tpXSk7CiAgICAgICAgIGlmIChvcHRpb24p
IHsKICAgICAgICAgICAgIG9wdGlvbi0+c2V0UGFyZW50KHRoaXMpOwogICAgICAgICAgICAgbV9j
aGlsZHJlbi5hcHBlbmQob3B0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNp
b24gOTc0OTApCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjMsNyArNjYzLDcgQEAgYm9vbCBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc011bHRpUwogICAgIAogICAgIGlmICghbV9yZW5k
ZXJlci0+aXNCb3hNb2RlbE9iamVjdCgpIHx8ICF0b1JlbmRlckJveE1vZGVsT2JqZWN0KG1fcmVu
ZGVyZXIpLT5pc0xpc3RCb3goKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBt
X3JlbmRlcmVyLT5ub2RlKCkgJiYgc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihtX3Jl
bmRlcmVyLT5ub2RlKCkpLT5tdWx0aXBsZSgpOworICAgIHJldHVybiBtX3JlbmRlcmVyLT5ub2Rl
KCkgJiYgdG9IVE1MU2VsZWN0RWxlbWVudChtX3JlbmRlcmVyLT5ub2RlKCkpLT5tdWx0aXBsZSgp
OwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzUmVhZE9ubHkoKSBjb25z
dApAQCAtMTE0NSwyMSArMTE0NSwxNCBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6c3RyaW5nCiAgICAgCiAgICAgaWYgKGNzc0JveCAmJiBjc3NCb3gtPmlzTWVudUxpc3QoKSkg
ewogICAgICAgICAvLyBSZW5kZXJNZW51TGlzdCB3aWxsIGdvIHN0cmFpZ2h0IHRvIHRoZSB0ZXh0
KCkgb2YgaXRzIHNlbGVjdGVkIGl0ZW0uCi0gICAgICAgIC8vIFRoaXMgaGFzIHRvIGJlIG92ZXJy
aWRlbiBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgc2VsZWN0ZWQgaXRlbSBoYXMgYW4gYXJpYSBsYWJl
bAotICAgICAgICBOb2RlKiBub2RlID0gbV9yZW5kZXJlci0+bm9kZSgpOwotICAgICAgICBpZiAo
bm9kZSAmJiBub2RlLT5pc0hUTUxFbGVtZW50KCkgJiYgbm9kZS0+aGFzVGFnTmFtZShzZWxlY3RU
YWcpKSB7Ci0gICAgICAgICAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0Tm9kZSA9IHN0YXRp
Y19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4obm9kZSk7Ci0gICAgICAgICAgICBpbnQgc2VsZWN0
ZWRJbmRleCA9IHNlbGVjdE5vZGUtPnNlbGVjdGVkSW5kZXgoKTsKLSAgICAgICAgICAgIGNvbnN0
IFZlY3RvcjxIVE1MRWxlbWVudCo+IGxpc3RJdGVtcyA9IHNlbGVjdE5vZGUtPmxpc3RJdGVtcygp
OwotICAgICAgICAKLSAgICAgICAgICAgIEVsZW1lbnQqIHNlbGVjdGVkT3B0aW9uID0gMDsKLSAg
ICAgICAgICAgIGlmIChzZWxlY3RlZEluZGV4ID49IDAgJiYgc2VsZWN0ZWRJbmRleCA8IChpbnQp
bGlzdEl0ZW1zLnNpemUoKSkgCi0gICAgICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb24gPSBsaXN0
SXRlbXNbc2VsZWN0ZWRJbmRleF07Ci0gICAgICAgICAgICBpZiAoc2VsZWN0ZWRPcHRpb24pIHsK
LSAgICAgICAgICAgICAgICBTdHJpbmcgb3ZlcnJpZGVuRGVzY3JpcHRpb24gPSBzZWxlY3RlZE9w
dGlvbi0+Z2V0QXR0cmlidXRlKGFyaWFfbGFiZWxBdHRyKTsKLSAgICAgICAgICAgICAgICBpZiAo
IW92ZXJyaWRlbkRlc2NyaXB0aW9uLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gb3ZlcnJpZGVuRGVzY3JpcHRpb247Ci0gICAgICAgICAgICB9CisgICAgICAgIC8vIFRoaXMg
aGFzIHRvIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHNlbGVjdGVkIGl0ZW0g
aGFzIGFuIEFSSUEgbGFiZWwuCisgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3RFbGVt
ZW50ID0gdG9IVE1MU2VsZWN0RWxlbWVudChtX3JlbmRlcmVyLT5ub2RlKCkpOworICAgICAgICBp
bnQgc2VsZWN0ZWRJbmRleCA9IHNlbGVjdEVsZW1lbnQtPnNlbGVjdGVkSW5kZXgoKTsKKyAgICAg
ICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4gbGlzdEl0ZW1zID0gc2VsZWN0RWxlbWVudC0+
bGlzdEl0ZW1zKCk7CisgICAgICAgIGlmIChzZWxlY3RlZEluZGV4ID49IDAgJiYgc3RhdGljX2Nh
c3Q8c2l6ZV90PihzZWxlY3RlZEluZGV4KSA8IGxpc3RJdGVtcy5zaXplKCkpIHsKKyAgICAgICAg
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgb3ZlcnJpZGRlbkRlc2NyaXB0aW9uID0gbGlzdEl0ZW1z
W3NlbGVjdGVkSW5kZXhdLT5mYXN0R2V0QXR0cmlidXRlKGFyaWFfbGFiZWxBdHRyKTsKKyAgICAg
ICAgICAgIGlmICghb3ZlcnJpZGRlbkRlc2NyaXB0aW9uLmlzTnVsbCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBvdmVycmlkZGVuRGVzY3JpcHRpb247CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIHRvUmVuZGVyTWVudUxpc3QobV9yZW5kZXJlciktPnRleHQoKTsKICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MT3B0aW9u
c0NvbGxlY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiA5NzQ5MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjMsNyArNjMsNyBAQCB2b2lkIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uOjpzZXRM
ZW5ndGgoCiB2b2lkIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uOjppbmRleFNldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIEhUTUxPcHRp
b25zQ29sbGVjdGlvbiogaW1wID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbnNDb2xsZWN0aW9uKj4o
aW1wbCgpKTsKLSAgICBIVE1MU2VsZWN0RWxlbWVudCogYmFzZSA9IHN0YXRpY19jYXN0PEhUTUxT
ZWxlY3RFbGVtZW50Kj4oaW1wLT5iYXNlKCkpOworICAgIEhUTUxTZWxlY3RFbGVtZW50KiBiYXNl
ID0gdG9IVE1MU2VsZWN0RWxlbWVudChpbXAtPmJhc2UoKSk7CiAgICAgc2VsZWN0SW5kZXhTZXR0
ZXIoYmFzZSwgZXhlYywgaW5kZXgsIHZhbHVlKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDk3NDkwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MU2Vs
ZWN0RWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgdXNp
bmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogSlNWYWx1ZSBKU0hUTUxTZWxlY3RFbGVtZW50Ojpy
ZW1vdmUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEhUTUxTZWxlY3RFbGVtZW50JiBzZWxlY3Qg
PSAqc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihpbXBsKCkpOworICAgIEhUTUxTZWxl
Y3RFbGVtZW50JiBzZWxlY3QgPSAqdG9IVE1MU2VsZWN0RWxlbWVudChpbXBsKCkpOwogCiAgICAg
Ly8gVGhlIHJlbW92ZSBmdW5jdGlvbiBjYW4gdGFrZSBlaXRoZXIgYW4gb3B0aW9uIG9iamVjdCBv
ciB0aGUgaW5kZXggb2YgYW4gb3B0aW9uLgogICAgIGlmIChIVE1MT3B0aW9uRWxlbWVudCogb3B0
aW9uID0gdG9IVE1MT3B0aW9uRWxlbWVudChleGVjLT5hcmd1bWVudCgwKSkpCkBAIC02Miw3ICs2
Miw3IEBAIHZvaWQgc2VsZWN0SW5kZXhTZXR0ZXIoSFRNTFNlbGVjdEVsZW1lbnQKIAogdm9pZCBK
U0hUTUxTZWxlY3RFbGVtZW50OjppbmRleFNldHRlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBzZWxlY3RJbmRleFNldHRl
cihzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KGltcGwoKSksIGV4ZWMsIGluZGV4LCB2
YWx1ZSk7CisgICAgc2VsZWN0SW5kZXhTZXR0ZXIodG9IVE1MU2VsZWN0RWxlbWVudChpbXBsKCkp
LCBleGVjLCBpbmRleCwgdmFsdWUpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAkocmV2aXNpb24gOTc0OTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyMCw3ICsx
NTIwLDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0QWxsKCkKICAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwogCiAgICAgaWYgKGRvY3VtZW50LT5mb2N1
c2VkTm9kZSgpICYmIGRvY3VtZW50LT5mb2N1c2VkTm9kZSgpLT5oYXNUYWdOYW1lKHNlbGVjdFRh
ZykpIHsKLSAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdEVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KGRvY3VtZW50LT5mb2N1c2VkTm9kZSgpKTsKKyAgICAg
ICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdEVsZW1lbnQgPSB0b0hUTUxTZWxlY3RFbGVtZW50
KGRvY3VtZW50LT5mb2N1c2VkTm9kZSgpKTsKICAgICAgICAgaWYgKHNlbGVjdEVsZW1lbnQtPmNh
blNlbGVjdEFsbCgpKSB7CiAgICAgICAgICAgICBzZWxlY3RFbGVtZW50LT5zZWxlY3RBbGwoKTsK
ICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEtleWdl
bkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEtleWdl
bkVsZW1lbnQuY3BwCShyZXZpc2lvbiA5NzQ5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEtleWdlbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0LDcgQEAgSFRN
TFNlbGVjdEVsZW1lbnQqIEhUTUxLZXlnZW5FbGVtZW50OjpzaAogewogICAgIFNoYWRvd1Jvb3Qq
IHNoYWRvdyA9IHNoYWRvd1Jvb3QoKTsKICAgICBBU1NFUlQoc2hhZG93KTsKLSAgICByZXR1cm4g
c2hhZG93ID8gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihzaGFkb3ctPmZpcnN0Q2hp
bGQoKSkgOiAwOworICAgIHJldHVybiBzaGFkb3cgPyB0b0hUTUxTZWxlY3RFbGVtZW50KHNoYWRv
dy0+Zmlyc3RDaGlsZCgpKSA6IDA7CiB9CiAKIH0gLy8gbmFtZXNwYWNlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAJKHJldmlzaW9uIDk3NDkwKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODQsNyArODQsNyBAQCB2b2lkIEhUTUxPcHRHcm91cEVsZW1lbnQ6OnJlY2FsY1Nl
bGVjdE9wCiAgICAgd2hpbGUgKHNlbGVjdCAmJiAhc2VsZWN0LT5oYXNUYWdOYW1lKHNlbGVjdFRh
ZykpCiAgICAgICAgIHNlbGVjdCA9IHNlbGVjdC0+cGFyZW50Tm9kZSgpOwogICAgIGlmIChzZWxl
Y3QpCi0gICAgICAgIHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4oc2VsZWN0KS0+c2V0
UmVjYWxjTGlzdEl0ZW1zKCk7CisgICAgICAgIHRvSFRNTFNlbGVjdEVsZW1lbnQoc2VsZWN0KS0+
c2V0UmVjYWxjTGlzdEl0ZW1zKCk7CiB9CiAKIHZvaWQgSFRNTE9wdEdyb3VwRWxlbWVudDo6YXR0
YWNoKCkKQEAgLTEzMSw3ICsxMzEsNyBAQCBIVE1MU2VsZWN0RWxlbWVudCogSFRNTE9wdEdyb3Vw
RWxlbWVudDo6CiAgICAgaWYgKCFzZWxlY3QpCiAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4oc2VsZWN0KTsKKyAgICByZXR1
cm4gdG9IVE1MU2VsZWN0RWxlbWVudChzZWxlY3QpOwogfQogCiB2b2lkIEhUTUxPcHRHcm91cEVs
ZW1lbnQ6OmFjY2Vzc0tleUFjdGlvbihib29sKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MT3B0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MT3B0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDk3NDkwKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw3ICsxNjYs
NyBAQCB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjpzZXRWYWx1ZShjb25zdCBTCiBib29sIEhUTUxP
cHRpb25FbGVtZW50OjpzZWxlY3RlZCgpCiB7CiAgICAgaWYgKEhUTUxTZWxlY3RFbGVtZW50KiBz
ZWxlY3QgPSBvd25lclNlbGVjdEVsZW1lbnQoKSkKLSAgICAgICAgc2VsZWN0LT5yZWNhbGNMaXN0
SXRlbXNJZk5lZWRlZCgpOworICAgICAgICBzZWxlY3QtPnVwZGF0ZUxpc3RJdGVtU2VsZWN0ZWRT
dGF0ZXMoKTsKICAgICByZXR1cm4gbV9kYXRhLnNlbGVjdGVkKCk7CiB9CiAKQEAgLTE4OCw5ICsx
ODgsOCBAQCB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjpzZXRTZWxlY3RlZFN0YXRlCiAKIHZvaWQg
SFRNTE9wdGlvbkVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciwg
Tm9kZSogYmVmb3JlQ2hhbmdlLCBOb2RlKiBhZnRlckNoYW5nZSwgaW50IGNoaWxkQ291bnREZWx0
YSkKIHsKLSAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gb3duZXJTZWxlY3RFbGVtZW50
KCk7Ci0gICAgaWYgKHNlbGVjdCkKLSAgICAgICAgc2VsZWN0LT5jaGlsZHJlbkNoYW5nZWQoY2hh
bmdlZEJ5UGFyc2VyKTsKKyAgICBpZiAoSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IG93bmVy
U2VsZWN0RWxlbWVudCgpKQorICAgICAgICBzZWxlY3QtPm9wdGlvbkVsZW1lbnRDaGlsZHJlbkNo
YW5nZWQoKTsKICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoY2hh
bmdlZEJ5UGFyc2VyLCBiZWZvcmVDaGFuZ2UsIGFmdGVyQ2hhbmdlLCBjaGlsZENvdW50RGVsdGEp
OwogfQogCkBAIC0yMDMsNyArMjAyLDcgQEAgSFRNTFNlbGVjdEVsZW1lbnQqIEhUTUxPcHRpb25F
bGVtZW50OjpvdwogICAgIGlmICghc2VsZWN0KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KHNlbGVjdCk7CisgICAgcmV0dXJu
IHRvSFRNTFNlbGVjdEVsZW1lbnQoc2VsZWN0KTsKIH0KIAogYm9vbCBIVE1MT3B0aW9uRWxlbWVu
dDo6ZGVmYXVsdFNlbGVjdGVkKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE9wdGlvbnNDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDk3NDkwKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Nyw3ICs1Nyw3IEBAIHZvaWQgSFRNTE9wdGlvbnNDb2xsZWN0aW9uOjphZGQoUGFzc1JlZlAKICAg
ICB9CiAKICAgICBlYyA9IDA7Ci0gICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHN0YXRp
Y19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4oYmFzZSgpKTsKKyAgICBIVE1MU2VsZWN0RWxlbWVu
dCogc2VsZWN0ID0gdG9IVE1MU2VsZWN0RWxlbWVudChiYXNlKCkpOwogCiAgICAgaWYgKGluZGV4
ID09IC0xIHx8IHVuc2lnbmVkKGluZGV4KSA+PSBsZW5ndGgoKSkKICAgICAgICAgc2VsZWN0LT5h
ZGQobmV3T3B0aW9uLCAwLCBlYyk7CkBAIC02OSwyMiArNjksMjIgQEAgdm9pZCBIVE1MT3B0aW9u
c0NvbGxlY3Rpb246OmFkZChQYXNzUmVmUAogCiB2b2lkIEhUTUxPcHRpb25zQ29sbGVjdGlvbjo6
cmVtb3ZlKGludCBpbmRleCkKIHsKLSAgICBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+
KGJhc2UoKSktPnJlbW92ZShpbmRleCk7CisgICAgdG9IVE1MU2VsZWN0RWxlbWVudChiYXNlKCkp
LT5yZW1vdmUoaW5kZXgpOwogfQogCiBpbnQgSFRNTE9wdGlvbnNDb2xsZWN0aW9uOjpzZWxlY3Rl
ZEluZGV4KCkgY29uc3QKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1l
bnQqPihiYXNlKCkpLT5zZWxlY3RlZEluZGV4KCk7CisgICAgcmV0dXJuIHRvSFRNTFNlbGVjdEVs
ZW1lbnQoYmFzZSgpKS0+c2VsZWN0ZWRJbmRleCgpOwogfQogCiB2b2lkIEhUTUxPcHRpb25zQ29s
bGVjdGlvbjo6c2V0U2VsZWN0ZWRJbmRleChpbnQgaW5kZXgpCiB7Ci0gICAgc3RhdGljX2Nhc3Q8
SFRNTFNlbGVjdEVsZW1lbnQqPihiYXNlKCkpLT5zZXRTZWxlY3RlZEluZGV4KGluZGV4KTsKKyAg
ICB0b0hUTUxTZWxlY3RFbGVtZW50KGJhc2UoKSktPnNldFNlbGVjdGVkSW5kZXgoaW5kZXgpOwog
fQogCiB2b2lkIEhUTUxPcHRpb25zQ29sbGVjdGlvbjo6c2V0TGVuZ3RoKHVuc2lnbmVkIGxlbmd0
aCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1l
bnQqPihiYXNlKCkpLT5zZXRMZW5ndGgobGVuZ3RoLCBlYyk7CisgICAgdG9IVE1MU2VsZWN0RWxl
bWVudChiYXNlKCkpLT5zZXRMZW5ndGgobGVuZ3RoLCBlYyk7CiB9CiAKIH0gLy9uYW1lc3BhY2UK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCShyZXZpc2lv
biA5NzQ5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTAsMTEgKzExMCw2IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6
OmRlc2VsZWN0SXRlbXMoSFQKICAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKIH0KIAotdm9p
ZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0U2VsZWN0ZWRJbmRleChpbnQgb3B0aW9uSW5kZXgsIGJv
b2wgZGVzZWxlY3QpCi17Ci0gICAgc2V0U2VsZWN0ZWRJbmRleEludGVybmFsKG9wdGlvbkluZGV4
LCBkZXNlbGVjdCwgZmFsc2UsIGZhbHNlKTsKLX0KLQogdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6
c2V0U2VsZWN0ZWRJbmRleEJ5VXNlcihpbnQgb3B0aW9uSW5kZXgsIGJvb2wgZGVzZWxlY3QsIGJv
b2wgZmlyZU9uQ2hhbmdlTm93LCBib29sIGFsbG93TXVsdGlwbGVTZWxlY3Rpb24pCiB7CiAgICAg
Ly8gTGlzdCBib3ggc2VsZWN0cyBjYW4gZmlyZSBvbmNoYW5nZSBldmVudHMgdGhyb3VnaCB1c2Vy
IGludGVyYWN0aW9uLCBzdWNoIGFzCkBAIC0xMzQsNyArMTI5LDcgQEAgdm9pZCBIVE1MU2VsZWN0
RWxlbWVudDo6c2V0U2VsZWN0ZWRJbmRleAogICAgIGlmIChvcHRpb25JbmRleCA9PSBzZWxlY3Rl
ZEluZGV4KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBzZXRTZWxlY3RlZEluZGV4SW50
ZXJuYWwob3B0aW9uSW5kZXgsIGRlc2VsZWN0LCBmaXJlT25DaGFuZ2VOb3csIHRydWUpOworICAg
IHNldFNlbGVjdGVkSW5kZXgob3B0aW9uSW5kZXgsIGRlc2VsZWN0LCBmaXJlT25DaGFuZ2VOb3cs
IHRydWUpOwogfQogCiBib29sIEhUTUxTZWxlY3RFbGVtZW50OjpoYXNQbGFjZWhvbGRlckxhYmVs
T3B0aW9uKCkgY29uc3QKQEAgLTE3MiwxOCArMTY3LDYgQEAgYm9vbCBIVE1MU2VsZWN0RWxlbWVu
dDo6dmFsdWVNaXNzaW5nKCkgYwogICAgIHJldHVybiBmaXJzdFNlbGVjdGlvbkluZGV4IDwgMCB8
fCAoIWZpcnN0U2VsZWN0aW9uSW5kZXggJiYgaGFzUGxhY2Vob2xkZXJMYWJlbE9wdGlvbigpKTsK
IH0KIAotdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bGlzdEJveFNlbGVjdEl0ZW0oaW50IGxpc3RJ
bmRleCwgYm9vbCBhbGxvd011bHRpcGx5U2VsZWN0aW9ucywgYm9vbCBzaGlmdCwgYm9vbCBmaXJl
T25DaGFuZ2VOb3cpCi17Ci0gICAgaWYgKCFtdWx0aXBsZSgpKQotICAgICAgICBzZXRTZWxlY3Rl
ZEluZGV4QnlVc2VyKGxpc3RUb09wdGlvbkluZGV4KGxpc3RJbmRleCksIHRydWUsIGZpcmVPbkNo
YW5nZU5vdyk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHVwZGF0ZVNlbGVjdGVkU3RhdGUobGlzdElu
ZGV4LCBhbGxvd011bHRpcGx5U2VsZWN0aW9ucywgc2hpZnQpOwotICAgICAgICBzZXROZWVkc1Zh
bGlkaXR5Q2hlY2soKTsKLSAgICAgICAgaWYgKGZpcmVPbkNoYW5nZU5vdykKLSAgICAgICAgICAg
IGxpc3RCb3hPbkNoYW5nZSgpOwotICAgIH0KLX0KLQogaW50IEhUTUxTZWxlY3RFbGVtZW50Ojph
Y3RpdmVTZWxlY3Rpb25TdGFydExpc3RJbmRleCgpIGNvbnN0CiB7CiAgICAgaWYgKG1fYWN0aXZl
U2VsZWN0aW9uQW5jaG9ySW5kZXggPj0gMCkKQEAgLTI3Miw3ICsyNTUsNyBAQCB2b2lkIEhUTUxT
ZWxlY3RFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpCiAKICAgICAgICAgLy8gRW5zdXJlIHRoYXQg
d2UndmUgZGV0ZXJtaW5lZCBzZWxlY3RlZG5lc3Mgb2YgdGhlIGl0ZW1zIGF0IGxlYXN0IG9uY2Ug
cHJpb3IgdG8gY2hhbmdpbmcgdGhlIHNpemUuCiAgICAgICAgIGlmIChvbGRTaXplICE9IHNpemUp
Ci0gICAgICAgICAgICByZWNhbGNMaXN0SXRlbXNJZk5lZWRlZCgpOworICAgICAgICAgICAgdXBk
YXRlTGlzdEl0ZW1TZWxlY3RlZFN0YXRlcygpOwogCiAgICAgICAgIG1fc2l6ZSA9IHNpemU7CiAg
ICAgICAgIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwpAQCAtMzI0LDEyICszMDcsNyBAQCBQYXNz
UmVmUHRyPEhUTUxPcHRpb25zQ29sbGVjdGlvbj4gSFRNTFNlCiAgICAgcmV0dXJuIEhUTUxPcHRp
b25zQ29sbGVjdGlvbjo6Y3JlYXRlKHRoaXMpOwogfQogCi12b2lkIEhUTUxTZWxlY3RFbGVtZW50
OjpyZWNhbGNMaXN0SXRlbXMoYm9vbCB1cGRhdGVTZWxlY3RlZFN0YXRlcykgY29uc3QKLXsKLSAg
ICBjb25zdF9jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4odGhpcyktPnJlY2FsY0xpc3RJdGVtc0lu
dGVybmFsKHVwZGF0ZVNlbGVjdGVkU3RhdGVzKTsKLX0KLQotdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dDo6cmVjYWxjTGlzdEl0ZW1zSWZOZWVkZWQoKQordm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6dXBk
YXRlTGlzdEl0ZW1TZWxlY3RlZFN0YXRlcygpCiB7CiAgICAgaWYgKG1fc2hvdWxkUmVjYWxjTGlz
dEl0ZW1zKQogICAgICAgICByZWNhbGNMaXN0SXRlbXMoKTsKQEAgLTMzOSwxMiArMzE3LDIyIEBA
IHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCgKIHsKICAgICBzZXRSZWNh
bGNMaXN0SXRlbXMoKTsKICAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKKwogICAgIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OmNoaWxkcmVuQ2hhbmdlZChjaGFuZ2VkQnlQYXJz
ZXIsIGJlZm9yZUNoYW5nZSwgYWZ0ZXJDaGFuZ2UsIGNoaWxkQ291bnREZWx0YSk7CiAgICAgCiAg
ICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkgJiYgcmVuZGVyZXIo
KSkKICAgICAgICAgcmVuZGVyZXIoKS0+ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5jaGls
ZHJlbkNoYW5nZWQocmVuZGVyZXIoKSk7CiB9CiAKK3ZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Om9w
dGlvbkVsZW1lbnRDaGlsZHJlbkNoYW5nZWQoKQoreworICAgIHNldFJlY2FsY0xpc3RJdGVtcygp
OworICAgIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOworCisgICAgaWYgKEFYT2JqZWN0Q2FjaGU6
OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkgJiYgcmVuZGVyZXIoKSkKKyAgICAgICAgcmVuZGVyZXIo
KS0+ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5jaGlsZHJlbkNoYW5nZWQocmVuZGVyZXIo
KSk7Cit9CisKIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OmFjY2Vzc0tleUFjdGlvbihib29sIHNl
bmRUb0FueUVsZW1lbnQpCiB7CiAgICAgZm9jdXMoKTsKQEAgLTQ0OSw5ICs0MzcsMTAgQEAgYm9v
bCBIVE1MU2VsZWN0RWxlbWVudDo6aXNSZXF1aXJlZEZvcm1DbwogLy8gT3RoZXJ3aXNlLCBpdCBy
ZXR1cm5zIHRoZSB2YWxpZCBpdGVtIGNsb3Nlc3QgdG8gdGhhdCBib3VuZGFyeSB3aGljaCBpcyBw
YXN0IHxsaXN0SW5kZXh8IGlmIHRoZXJlIGlzIG9uZS4KIC8vIE90aGVyd2lzZSwgaXQgcmV0dXJu
cyB8bGlzdEluZGV4fC4KIC8vIFZhbGlkIG1lYW5zIHRoYXQgaXQgaXMgZW5hYmxlZCBhbmQgYW4g
b3B0aW9uIGVsZW1lbnQuCi1pbnQgSFRNTFNlbGVjdEVsZW1lbnQ6Om5leHRWYWxpZEluZGV4KGNv
bnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMsIGludCBsaXN0SW5kZXgsIFNraXBE
aXJlY3Rpb24gZGlyZWN0aW9uLCBpbnQgc2tpcCkKK2ludCBIVE1MU2VsZWN0RWxlbWVudDo6bmV4
dFZhbGlkSW5kZXgoaW50IGxpc3RJbmRleCwgU2tpcERpcmVjdGlvbiBkaXJlY3Rpb24sIGludCBz
a2lwKSBjb25zdAogewogICAgIEFTU0VSVChkaXJlY3Rpb24gPT0gLTEgfHwgZGlyZWN0aW9uID09
IDEpOworICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSB0aGlzLT5s
aXN0SXRlbXMoKTsKICAgICBpbnQgbGFzdEdvb2RJbmRleCA9IGxpc3RJbmRleDsKICAgICBpbnQg
c2l6ZSA9IGxpc3RJdGVtcy5zaXplKCk7CiAgICAgZm9yIChsaXN0SW5kZXggKz0gZGlyZWN0aW9u
OyBsaXN0SW5kZXggPj0gMCAmJiBsaXN0SW5kZXggPCBzaXplOyBsaXN0SW5kZXggKz0gZGlyZWN0
aW9uKSB7CkBAIC00NjcsMjggKzQ1NiwyOCBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6Om5leHRW
YWxpZEluZGV4KGNvCiAKIGludCBIVE1MU2VsZWN0RWxlbWVudDo6bmV4dFNlbGVjdGFibGVMaXN0
SW5kZXgoaW50IHN0YXJ0SW5kZXgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG5leHRWYWxpZEluZGV4
KGxpc3RJdGVtcygpLCBzdGFydEluZGV4LCBTa2lwRm9yd2FyZHMsIDEpOworICAgIHJldHVybiBu
ZXh0VmFsaWRJbmRleChzdGFydEluZGV4LCBTa2lwRm9yd2FyZHMsIDEpOwogfQogCiBpbnQgSFRN
TFNlbGVjdEVsZW1lbnQ6OnByZXZpb3VzU2VsZWN0YWJsZUxpc3RJbmRleChpbnQgc3RhcnRJbmRl
eCkgY29uc3QKIHsKICAgICBpZiAoc3RhcnRJbmRleCA9PSAtMSkKICAgICAgICAgc3RhcnRJbmRl
eCA9IGxpc3RJdGVtcygpLnNpemUoKTsKLSAgICByZXR1cm4gbmV4dFZhbGlkSW5kZXgobGlzdEl0
ZW1zKCksIHN0YXJ0SW5kZXgsIFNraXBCYWNrd2FyZHMsIDEpOworICAgIHJldHVybiBuZXh0VmFs
aWRJbmRleChzdGFydEluZGV4LCBTa2lwQmFja3dhcmRzLCAxKTsKIH0KIAogaW50IEhUTUxTZWxl
Y3RFbGVtZW50OjpmaXJzdFNlbGVjdGFibGVMaXN0SW5kZXgoKSBjb25zdAogewogICAgIGNvbnN0
IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwotICAgIGludCBpbmRl
eCA9IG5leHRWYWxpZEluZGV4KGl0ZW1zLCBpdGVtcy5zaXplKCksIFNraXBCYWNrd2FyZHMsIElO
VF9NQVgpOwotICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpID09IGl0ZW1zLnNp
emUoKSkKKyAgICBpbnQgaW5kZXggPSBuZXh0VmFsaWRJbmRleChpdGVtcy5zaXplKCksIFNraXBC
YWNrd2FyZHMsIElOVF9NQVgpOworICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4KSA9
PSBpdGVtcy5zaXplKCkpCiAgICAgICAgIHJldHVybiAtMTsKICAgICByZXR1cm4gaW5kZXg7CiB9
CiAKIGludCBIVE1MU2VsZWN0RWxlbWVudDo6bGFzdFNlbGVjdGFibGVMaXN0SW5kZXgoKSBjb25z
dAogewotICAgIHJldHVybiBuZXh0VmFsaWRJbmRleChsaXN0SXRlbXMoKSwgLTEsIFNraXBGb3J3
YXJkcywgSU5UX01BWCk7CisgICAgcmV0dXJuIG5leHRWYWxpZEluZGV4KC0xLCBTa2lwRm9yd2Fy
ZHMsIElOVF9NQVgpOwogfQogCiAvLyBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbmV4dCB2YWxp
ZCBpdGVtIG9uZSBwYWdlIGF3YXkgZnJvbSB8c3RhcnRJbmRleHwgaW4gZGlyZWN0aW9uIHxkaXJl
Y3Rpb258LgpAQCAtNTA1LDcgKzQ5NCw3IEBAIGludCBIVE1MU2VsZWN0RWxlbWVudDo6bmV4dFNl
bGVjdGFibGVMaXMKICAgICAvLyBJZiB0aGVyZSBpcyBubyBleGFjdCBvbmUgcGFnZSBhd2F5IHZh
bGlkIG9wdGlvbiwgcmV0dXJucyBzdGFydEluZGV4IG9yIHRoZSBtb3N0IGZhciBpbmRleC4KICAg
ICBpbnQgZWRnZUluZGV4ID0gKGRpcmVjdGlvbiA9PSBTa2lwRm9yd2FyZHMpID8gMCA6IChpdGVt
cy5zaXplKCkgLSAxKTsKICAgICBpbnQgc2tpcEFtb3VudCA9IHBhZ2VTaXplICsgKChkaXJlY3Rp
b24gPT0gU2tpcEZvcndhcmRzKSA/IHN0YXJ0SW5kZXggOiAoZWRnZUluZGV4IC0gc3RhcnRJbmRl
eCkpOwotICAgIHJldHVybiBuZXh0VmFsaWRJbmRleChpdGVtcywgZWRnZUluZGV4LCBkaXJlY3Rp
b24sIHNraXBBbW91bnQpOworICAgIHJldHVybiBuZXh0VmFsaWRJbmRleChlZGdlSW5kZXgsIGRp
cmVjdGlvbiwgc2tpcEFtb3VudCk7CiB9CiAKIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNlbGVj
dEFsbCgpCkBAIC02MDEsNyArNTkwLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bGlzdEJv
eE9uQ2hhbmdlKAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gVXBkYXRlIGxhc3RP
bkNoYW5nZVNlbGVjdGlvbiBhbmQgZmlyZSBkaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQu
CisgICAgLy8gVXBkYXRlIG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9uIGFuZCBmaXJlIGRpc3BhdGNo
Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudC4KICAgICBib29sIGZpcmVPbkNoYW5nZSA9IGZhbHNlOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7ICsraSkgewogICAgICAg
ICBPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGl0ZW1zW2ld
KTsKQEAgLTY0OSwxNCArNjM4LDE1IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldE9wdGlv
bnNDaGFuZ2UKIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBIVE1MU2VsZWN0RWxlbWVudDo6
bGlzdEl0ZW1zKCkgY29uc3QKIHsKICAgICBpZiAobV9zaG91bGRSZWNhbGNMaXN0SXRlbXMpCi0g
ICAgICAgIGNvbnN0X2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPih0aGlzKS0+cmVjYWxjTGlzdEl0
ZW1zSW50ZXJuYWwoKTsKKyAgICAgICAgcmVjYWxjTGlzdEl0ZW1zKCk7CiAgICAgZWxzZSB7CiAj
aWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICBWZWN0b3I8SFRNTEVsZW1lbnQqPiBpdGVtcyA9
IG1fbGlzdEl0ZW1zOwotICAgICAgICBjb25zdF9jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4odGhp
cyktPnJlY2FsY0xpc3RJdGVtc0ludGVybmFsKGZhbHNlKTsKKyAgICAgICAgcmVjYWxjTGlzdEl0
ZW1zKGZhbHNlKTsKICAgICAgICAgQVNTRVJUKGl0ZW1zID09IG1fbGlzdEl0ZW1zKTsKICNlbmRp
ZgogICAgIH0KKwogICAgIHJldHVybiBtX2xpc3RJdGVtczsKIH0KIApAQCAtNjcxLDcgKzY2MSw3
IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldFJlY2FsY0xpc3RJdGUKICAgICAgICAgbV9j
b2xsZWN0aW9uSW5mby5yZXNldCgpOwogfQogCi12b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZWNh
bGNMaXN0SXRlbXNJbnRlcm5hbChib29sIHVwZGF0ZVNlbGVjdGVkU3RhdGVzKQordm9pZCBIVE1M
U2VsZWN0RWxlbWVudDo6cmVjYWxjTGlzdEl0ZW1zKGJvb2wgdXBkYXRlU2VsZWN0ZWRTdGF0ZXMp
IGNvbnN0CiB7CiAgICAgbV9saXN0SXRlbXMuY2xlYXIoKTsKIApAQCAtNzQxLDcgKzczMSw3IEBA
IGludCBIVE1MU2VsZWN0RWxlbWVudDo6c2VsZWN0ZWRJbmRleCgpIGMKICAgICByZXR1cm4gLTE7
CiB9CiAKLXZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldFNlbGVjdGVkSW5kZXhJbnRlcm5hbChp
bnQgb3B0aW9uSW5kZXgsIGJvb2wgZGVzZWxlY3QsIGJvb2wgZmlyZU9uQ2hhbmdlTm93LCBib29s
IHVzZXJEcml2ZW5DaGFuZ2UpCit2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRTZWxlY3RlZElu
ZGV4KGludCBvcHRpb25JbmRleCwgYm9vbCBkZXNlbGVjdCwgYm9vbCBmaXJlT25DaGFuZ2VOb3cs
IGJvb2wgdXNlckRyaXZlbkNoYW5nZSkKIHsKICAgICBpZiAob3B0aW9uSW5kZXggPT0gLTEgJiYg
IWRlc2VsZWN0ICYmICFtX211bHRpcGxlKQogICAgICAgICBvcHRpb25JbmRleCA9IG5leHRTZWxl
Y3RhYmxlTGlzdEluZGV4KC0xKTsKQEAgLTc4NCw3ICs3NzQsNyBAQCB2b2lkIEhUTUxTZWxlY3RF
bGVtZW50OjpzZXRTZWxlY3RlZEluZGV4CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB1cGRhdGVW
YWxpZGl0eSgpOworICAgIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwogICAgIGlmIChGcmFtZSog
ZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKQogICAgICAgICBmcmFtZS0+cGFnZSgpLT5jaHJv
bWUoKS0+Y2xpZW50KCktPmZvcm1TdGF0ZURpZENoYW5nZSh0aGlzKTsKIH0KQEAgLTgyNyw3ICs4
MTcsNyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RUb09wdGlvbkluZGV4CiB2b2lkIEhU
TUxTZWxlY3RFbGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQoUGFzc1JlZlB0cjxOb2RlPiBvbGRG
b2N1c2VkTm9kZSkKIHsKICAgICAvLyBTYXZlIHRoZSBzZWxlY3Rpb24gc28gaXQgY2FuIGJlIGNv
bXBhcmVkIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHdoZW4KLSAgICAvLyBkaXNwYXRjaGluZyBjaGFu
Z2UgZXZlbnRzIGR1cmluZyBibHVyIGV2ZW50IGRpc3BhdGNoYWwuCisgICAgLy8gZGlzcGF0Y2hp
bmcgY2hhbmdlIGV2ZW50cyBkdXJpbmcgYmx1ciBldmVudCBkaXNwYXRjaC4KICAgICBpZiAodXNl
c01lbnVMaXN0KCkpCiAgICAgICAgIHNhdmVMYXN0U2VsZWN0aW9uKCk7CiAgICAgSFRNTEZvcm1D
b250cm9sRWxlbWVudFdpdGhTdGF0ZTo6ZGlzcGF0Y2hGb2N1c0V2ZW50KG9sZEZvY3VzZWROb2Rl
KTsKQEAgLTg5MCw3ICs4ODAsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpwYXJzZU11bHRp
cGxlQXR0CiB7CiAgICAgYm9vbCBvbGRVc2VzTWVudUxpc3QgPSB1c2VzTWVudUxpc3QoKTsKICAg
ICBtX211bHRpcGxlID0gIWF0dHJpYnV0ZS0+aXNOdWxsKCk7Ci0gICAgdXBkYXRlVmFsaWRpdHko
KTsKKyAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKICAgICBpZiAob2xkVXNlc01lbnVMaXN0
ICE9IHVzZXNNZW51TGlzdCgpKQogICAgICAgICByZWF0dGFjaElmQXR0YWNoZWQoKTsKIH0KQEAg
LTEwMDEsMjIgKzk5MSwyMiBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjptZW51TGlzdERlZmF1
bHRFCiAgICAgICAgIGludCBsaXN0SW5kZXggPSBvcHRpb25Ub0xpc3RJbmRleChzZWxlY3RlZElu
ZGV4KCkpOwogCiAgICAgICAgIGlmIChrZXlJZGVudGlmaWVyID09ICJEb3duIiB8fCBrZXlJZGVu
dGlmaWVyID09ICJSaWdodCIpCi0gICAgICAgICAgICBsaXN0SW5kZXggPSBuZXh0VmFsaWRJbmRl
eChsaXN0SXRlbXMsIGxpc3RJbmRleCwgU2tpcEZvcndhcmRzLCAxKTsKKyAgICAgICAgICAgIGxp
c3RJbmRleCA9IG5leHRWYWxpZEluZGV4KGxpc3RJbmRleCwgU2tpcEZvcndhcmRzLCAxKTsKICAg
ICAgICAgZWxzZSBpZiAoa2V5SWRlbnRpZmllciA9PSAiVXAiIHx8IGtleUlkZW50aWZpZXIgPT0g
IkxlZnQiKQotICAgICAgICAgICAgbGlzdEluZGV4ID0gbmV4dFZhbGlkSW5kZXgobGlzdEl0ZW1z
LCBsaXN0SW5kZXgsIFNraXBCYWNrd2FyZHMsIDEpOworICAgICAgICAgICAgbGlzdEluZGV4ID0g
bmV4dFZhbGlkSW5kZXgobGlzdEluZGV4LCBTa2lwQmFja3dhcmRzLCAxKTsKICAgICAgICAgZWxz
ZSBpZiAoa2V5SWRlbnRpZmllciA9PSAiUGFnZURvd24iKQotICAgICAgICAgICAgbGlzdEluZGV4
ID0gbmV4dFZhbGlkSW5kZXgobGlzdEl0ZW1zLCBsaXN0SW5kZXgsIFNraXBGb3J3YXJkcywgMyk7
CisgICAgICAgICAgICBsaXN0SW5kZXggPSBuZXh0VmFsaWRJbmRleChsaXN0SW5kZXgsIFNraXBG
b3J3YXJkcywgMyk7CiAgICAgICAgIGVsc2UgaWYgKGtleUlkZW50aWZpZXIgPT0gIlBhZ2VVcCIp
Ci0gICAgICAgICAgICBsaXN0SW5kZXggPSBuZXh0VmFsaWRJbmRleChsaXN0SXRlbXMsIGxpc3RJ
bmRleCwgU2tpcEJhY2t3YXJkcywgMyk7CisgICAgICAgICAgICBsaXN0SW5kZXggPSBuZXh0VmFs
aWRJbmRleChsaXN0SW5kZXgsIFNraXBCYWNrd2FyZHMsIDMpOwogICAgICAgICBlbHNlIGlmIChr
ZXlJZGVudGlmaWVyID09ICJIb21lIikKLSAgICAgICAgICAgIGxpc3RJbmRleCA9IG5leHRWYWxp
ZEluZGV4KGxpc3RJdGVtcywgLTEsIFNraXBGb3J3YXJkcywgMSk7CisgICAgICAgICAgICBsaXN0
SW5kZXggPSBuZXh0VmFsaWRJbmRleCgtMSwgU2tpcEZvcndhcmRzLCAxKTsKICAgICAgICAgZWxz
ZSBpZiAoa2V5SWRlbnRpZmllciA9PSAiRW5kIikKLSAgICAgICAgICAgIGxpc3RJbmRleCA9IG5l
eHRWYWxpZEluZGV4KGxpc3RJdGVtcywgbGlzdEl0ZW1zLnNpemUoKSwgU2tpcEJhY2t3YXJkcywg
MSk7CisgICAgICAgICAgICBsaXN0SW5kZXggPSBuZXh0VmFsaWRJbmRleChsaXN0SXRlbXMuc2l6
ZSgpLCBTa2lwQmFja3dhcmRzLCAxKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgaGFuZGxl
ZCA9IGZhbHNlOwogCi0gICAgICAgIGlmIChoYW5kbGVkICYmIGxpc3RJbmRleCA+PSAwICYmIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihsaXN0SW5kZXgpIDwgbGlzdEl0ZW1zLnNpemUoKSkKLSAgICAg
ICAgICAgIHNldFNlbGVjdGVkSW5kZXhJbnRlcm5hbChsaXN0VG9PcHRpb25JbmRleChsaXN0SW5k
ZXgpKTsKKyAgICAgICAgaWYgKGhhbmRsZWQgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihsaXN0SW5k
ZXgpIDwgbGlzdEl0ZW1zLnNpemUoKSkKKyAgICAgICAgICAgIHNldFNlbGVjdGVkSW5kZXgobGlz
dFRvT3B0aW9uSW5kZXgobGlzdEluZGV4KSk7CiAKICAgICAgICAgaWYgKGhhbmRsZWQpCiAgICAg
ICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKQEAgLTEwODMsNyArMTA3Myw3IEBA
IHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Om1lbnVMaXN0RGVmYXVsdEUKICAgICAgICAgaW50IGxp
c3RJbmRleCA9IG9wdGlvblRvTGlzdEluZGV4KHNlbGVjdGVkSW5kZXgoKSk7CiAgICAgICAgIGlm
IChrZXlDb2RlID09ICdccicpIHsKICAgICAgICAgICAgIC8vIGxpc3RJbmRleCBzaG91bGQgYWxy
ZWFkeSBiZSBzZWxlY3RlZCwgYnV0IHRoaXMgd2lsbCBmaXJlIHRoZSBvbmNoYW5nZSBoYW5kbGVy
LgotICAgICAgICAgICAgc2V0U2VsZWN0ZWRJbmRleEludGVybmFsKGxpc3RUb09wdGlvbkluZGV4
KGxpc3RJbmRleCksIHRydWUsIHRydWUpOworICAgICAgICAgICAgc2V0U2VsZWN0ZWRJbmRleChs
aXN0VG9PcHRpb25JbmRleChsaXN0SW5kZXgpLCB0cnVlLCB0cnVlKTsKICAgICAgICAgICAgIGhh
bmRsZWQgPSB0cnVlOwogICAgICAgICB9CiAjZW5kaWYKQEAgLTEyNTIsNyArMTI0Miw3IEBAIHZv
aWQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hEZWZhdWx0RXYKICAgICAgICAgICAgIC8vIHNl
bGVjdGlvbi4KICAgICAgICAgICAgIHNhdmVMYXN0U2VsZWN0aW9uKCk7CiAKLSAgICAgICAgICAg
IEFTU0VSVF9VTlVTRUQobGlzdEl0ZW1zLCAhbGlzdEl0ZW1zLnNpemUoKSB8fCAoZW5kSW5kZXgg
Pj0gMCAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZW5kSW5kZXgpIDwgbGlzdEl0ZW1zLnNpemUo
KSkpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChsaXN0SXRlbXMsICFsaXN0SXRlbXMuc2l6
ZSgpIHx8IHN0YXRpY19jYXN0PHNpemVfdD4oZW5kSW5kZXgpIDwgbGlzdEl0ZW1zLnNpemUoKSk7
CiAgICAgICAgICAgICBzZXRBY3RpdmVTZWxlY3Rpb25FbmRJbmRleChlbmRJbmRleCk7CiAKICAg
ICAgICAgICAgIGJvb2wgc2VsZWN0TmV3SXRlbSA9ICFtX211bHRpcGxlIHx8IHN0YXRpY19jYXN0
PEtleWJvYXJkRXZlbnQqPihldmVudCktPnNoaWZ0S2V5KCkgfHwgIWlzU3BhdGlhbE5hdmlnYXRp
b25FbmFibGVkKGRvY3VtZW50KCktPmZyYW1lKCkpOwpAQCAtMTMyMSw3ICsxMzExLDcgQEAgdm9p
ZCBIVE1MU2VsZWN0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZAogaW50IEhUTUxTZWxlY3RFbGVt
ZW50OjpsYXN0U2VsZWN0ZWRMaXN0SW5kZXgoKSBjb25zdAogewogICAgIGNvbnN0IFZlY3RvcjxI
VE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IGl0ZW1zLnNpemUoKTsgaTspIHsKKyAgICBmb3IgKHNpemVfdCBpID0gaXRlbXMuc2l6ZSgpOyBp
OykgewogICAgICAgICBpZiAoT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9u
RWxlbWVudChpdGVtc1stLWldKSkgewogICAgICAgICAgICAgaWYgKG9wdGlvbkVsZW1lbnQtPnNl
bGVjdGVkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGk7CkBAIC0xMzk1LDcgKzEzODUsNyBA
QCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojp0eXBlQWhlYWRGaW5kKEtlCiAgICAgICAgIC8vIEZv
bGQgdGhlIG9wdGlvbiBzdHJpbmcgYW5kIGNoZWNrIGlmIGl0cyBwcmVmaXggaXMgZXF1YWwgdG8g
dGhlIGZvbGRlZCBwcmVmaXguCiAgICAgICAgIFN0cmluZyB0ZXh0ID0gb3B0aW9uRWxlbWVudC0+
dGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpOwogICAgICAgICBpZiAoc3RyaXBMZWFk
aW5nV2hpdGVTcGFjZSh0ZXh0KS5mb2xkQ2FzZSgpLnN0YXJ0c1dpdGgocHJlZml4V2l0aENhc2VG
b2xkZWQpKSB7Ci0gICAgICAgICAgICBzZXRTZWxlY3RlZEluZGV4SW50ZXJuYWwobGlzdFRvT3B0
aW9uSW5kZXgoaW5kZXgpKTsKKyAgICAgICAgICAgIHNldFNlbGVjdGVkSW5kZXgobGlzdFRvT3B0
aW9uSW5kZXgoaW5kZXgpKTsKICAgICAgICAgICAgIGlmICghdXNlc01lbnVMaXN0KCkpCiAgICAg
ICAgICAgICAgICAgbGlzdEJveE9uQ2hhbmdlKCk7CiAKQEAgLTE0MTEsNyArMTQwMSw3IEBAIHZv
aWQgSFRNTFNlbGVjdEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUKICAgICAvLyBXaGVuIHRoZSBl
bGVtZW50IGlzIGNyZWF0ZWQgZHVyaW5nIGRvY3VtZW50IHBhcnNpbmcsIGl0IHdvbid0IGhhdmUg
YW55CiAgICAgLy8gaXRlbXMgeWV0IC0gYnV0IGZvciBpbm5lckhUTUwgYW5kIHJlbGF0ZWQgbWV0
aG9kcywgdGhpcyBtZXRob2QgaXMgY2FsbGVkCiAgICAgLy8gYWZ0ZXIgdGhlIHdob2xlIHN1YnRy
ZWUgaXMgY29uc3RydWN0ZWQuCi0gICAgcmVjYWxjTGlzdEl0ZW1zKHRydWUpOworICAgIHJlY2Fs
Y0xpc3RJdGVtcygpOwogICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6Omluc2Vy
dGVkSW50b1RyZWUoZGVlcCk7CiB9CiAKQEAgLTE0MjgsNyArMTQxOCw3IEBAIHZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6OmFjY2Vzc0tleVNldFNlbGUKICAgICAgICAgaWYgKG9wdGlvbkVsZW1lbnQt
PnNlbGVjdGVkKCkpCiAgICAgICAgICAgICBvcHRpb25FbGVtZW50LT5zZXRTZWxlY3RlZFN0YXRl
KGZhbHNlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0U2VsZWN0ZWRJbmRleEludGVy
bmFsKGluZGV4LCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgICAgICBzZXRTZWxlY3RlZEluZGV4KGlu
ZGV4LCBmYWxzZSwgdHJ1ZSk7CiAgICAgfQogCiAgICAgaWYgKHVzZXNNZW51TGlzdCgpKQpAQCAt
MTQ1MiwxMiArMTQ0Miw0IEBAIHVuc2lnbmVkIEhUTUxTZWxlY3RFbGVtZW50OjpsZW5ndGgoKSBj
b24KICAgICByZXR1cm4gb3B0aW9uczsKIH0KIAotSFRNTFNlbGVjdEVsZW1lbnQqIHRvU2VsZWN0
RWxlbWVudChFbGVtZW50KiBlbGVtZW50KQotewotICAgIGlmIChlbGVtZW50LT5pc0hUTUxFbGVt
ZW50KCkgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShzZWxlY3RUYWcpKQotICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihlbGVtZW50KTsKLSAgICAvLyBGSVhNRTog
dG9Gb29DbGFzcygpIGZ1bmN0aW9uIHNob3VsZCBub3QgcmV0dXJuIDAuCi0gICAgcmV0dXJuIDA7
Ci19Ci0KIH0gLy8gbmFtZXNwYWNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxl
Y3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0
RWxlbWVudC5oCShyZXZpc2lvbiA5NzQ5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNl
bGVjdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICAqIENvcHlyaWdo
dCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAx
OTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAy
MDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOSwgMjAx
MCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC02
MSwxMCArNjEsMTAgQEAgcHVibGljOgogCiAgICAgUGFzc1JlZlB0cjxIVE1MT3B0aW9uc0NvbGxl
Y3Rpb24+IG9wdGlvbnMoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoYm9v
bCBjaGFuZ2VkQnlQYXJzZXIgPSBmYWxzZSwgTm9kZSogYmVmb3JlQ2hhbmdlID0gMCwgTm9kZSog
YWZ0ZXJDaGFuZ2UgPSAwLCBpbnQgY2hpbGRDb3VudERlbHRhID0gMCk7CisgICAgdm9pZCBvcHRp
b25FbGVtZW50Q2hpbGRyZW5DaGFuZ2VkKCk7CiAKICAgICB2b2lkIHNldFJlY2FsY0xpc3RJdGVt
cygpOwotICAgIHZvaWQgcmVjYWxjTGlzdEl0ZW1zSWZOZWVkZWQoKTsKKyAgICB2b2lkIHVwZGF0
ZUxpc3RJdGVtU2VsZWN0ZWRTdGF0ZXMoKTsKIAogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVu
dCo+JiBsaXN0SXRlbXMoKSBjb25zdDsKIApAQCAtODUsMTIgKzg1LDggQEAgcHVibGljOgogCiAg
ICAgdm9pZCBzY3JvbGxUb1NlbGVjdGlvbigpOwogCi0gICAgdm9pZCBsaXN0Qm94U2VsZWN0SXRl
bShpbnQgbGlzdEluZGV4LCBib29sIGFsbG93TXVsdGlwbHlTZWxlY3Rpb25zLCBib29sIHNoaWZ0
LCBib29sIGZpcmVPbkNoYW5nZU5vdyA9IHRydWUpOwotCi0gICAgdm9pZCB1cGRhdGVWYWxpZGl0
eSgpIHsgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBjYW5T
ZWxlY3RBbGwoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0QWxsKCk7CisgICAgYm9v
bCBjYW5TZWxlY3RBbGwoKSBjb25zdDsKKyAgICB2b2lkIHNlbGVjdEFsbCgpOwogICAgIGludCBs
aXN0VG9PcHRpb25JbmRleChpbnQgbGlzdEluZGV4KSBjb25zdDsKICAgICB2b2lkIGxpc3RCb3hP
bkNoYW5nZSgpOwogICAgIGludCBvcHRpb25Ub0xpc3RJbmRleChpbnQgb3B0aW9uSW5kZXgpIGNv
bnN0OwpAQCAtMTQzLDggKzEzOSw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIGhhc1BsYWNlaG9s
ZGVyTGFiZWxPcHRpb24oKSBjb25zdDsKIAotICAgIHZvaWQgcmVjYWxjTGlzdEl0ZW1zSW50ZXJu
YWwoYm9vbCB1cGRhdGVTZWxlY3RlZFN0YXRlcyA9IHRydWUpOwotICAgIHZvaWQgc2V0U2VsZWN0
ZWRJbmRleEludGVybmFsKGludCBvcHRpb25JbmRleCwgYm9vbCBkZXNlbGVjdCA9IHRydWUsIGJv
b2wgZmlyZU9uQ2hhbmdlTm93ID0gZmFsc2UsIGJvb2wgdXNlckRyaXZlbkNoYW5nZSA9IHRydWUp
OworICAgIHZvaWQgc2V0U2VsZWN0ZWRJbmRleChpbnQgb3B0aW9uSW5kZXgsIGJvb2wgZGVzZWxl
Y3QsIGJvb2wgZmlyZU9uQ2hhbmdlTm93LCBib29sIHVzZXJEcml2ZW5DaGFuZ2UgPSB0cnVlKTsK
ICAgICB2b2lkIGRlc2VsZWN0SXRlbXNXaXRob3V0VmFsaWRhdGlvbihFbGVtZW50KiBleGNsdWRl
RWxlbWVudCA9IDApOwogICAgIHZvaWQgcGFyc2VNdWx0aXBsZUF0dHJpYnV0ZShjb25zdCBBdHRy
aWJ1dGUqKTsKICAgICBpbnQgbGFzdFNlbGVjdGVkTGlzdEluZGV4KCkgY29uc3Q7CkBAIC0xNTks
MTYgKzE1NCwxOCBAQCBwcml2YXRlOgogICAgICAgICBTa2lwQmFja3dhcmRzID0gLTEsCiAgICAg
ICAgIFNraXBGb3J3YXJkcyA9IDEKICAgICB9OwotICAgIHN0YXRpYyBpbnQgbmV4dFZhbGlkSW5k
ZXgoY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcywgaW50IGxpc3RJbmRleCwg
U2tpcERpcmVjdGlvbiwgaW50IHNraXApOworICAgIGludCBuZXh0VmFsaWRJbmRleChpbnQgbGlz
dEluZGV4LCBTa2lwRGlyZWN0aW9uLCBpbnQgc2tpcCkgY29uc3Q7CiAgICAgaW50IG5leHRTZWxl
Y3RhYmxlTGlzdEluZGV4KGludCBzdGFydEluZGV4KSBjb25zdDsKICAgICBpbnQgcHJldmlvdXNT
ZWxlY3RhYmxlTGlzdEluZGV4KGludCBzdGFydEluZGV4KSBjb25zdDsKICAgICBpbnQgZmlyc3RT
ZWxlY3RhYmxlTGlzdEluZGV4KCkgY29uc3Q7CiAgICAgaW50IGxhc3RTZWxlY3RhYmxlTGlzdElu
ZGV4KCkgY29uc3Q7CiAgICAgaW50IG5leHRTZWxlY3RhYmxlTGlzdEluZGV4UGFnZUF3YXkoaW50
IHN0YXJ0SW5kZXgsIFNraXBEaXJlY3Rpb24pIGNvbnN0OwogCisgICAgdmlydHVhbCB2b2lkIGNo
aWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciA9IGZhbHNlLCBOb2RlKiBiZWZvcmVD
aGFuZ2UgPSAwLCBOb2RlKiBhZnRlckNoYW5nZSA9IDAsIGludCBjaGlsZENvdW50RGVsdGEgPSAw
KTsKKwogICAgIENvbGxlY3Rpb25DYWNoZSBtX2NvbGxlY3Rpb25JbmZvOwotICAgIC8vIG1fbGlz
dEl0ZW1zIGNvbnRhaW5zIEhUTUxPcHRpb25FbGVtZW50LCBIVE1MT3B0R3JvdXBFbGVtZW50LCBv
ciBIVE1MSFJFbGVtZW50LgotICAgIFZlY3RvcjxIVE1MRWxlbWVudCo+IG1fbGlzdEl0ZW1zOwor
ICAgIC8vIG1fbGlzdEl0ZW1zIGNvbnRhaW5zIEhUTUxPcHRpb25FbGVtZW50LCBIVE1MT3B0R3Jv
dXBFbGVtZW50LCBhbmQgSFRNTEhSRWxlbWVudCBvYmplY3RzLgorICAgIG11dGFibGUgVmVjdG9y
PEhUTUxFbGVtZW50Kj4gbV9saXN0SXRlbXM7CiAgICAgVmVjdG9yPGJvb2w+IG1fbGFzdE9uQ2hh
bmdlU2VsZWN0aW9uOwogICAgIFZlY3Rvcjxib29sPiBtX2NhY2hlZFN0YXRlRm9yQWN0aXZlU2Vs
ZWN0aW9uOwogICAgIERPTVRpbWVTdGFtcCBtX2xhc3RDaGFyVGltZTsKQEAgLTE4MSwxMCArMTc4
LDEzIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3VzZXJEcml2ZW5DaGFuZ2U7CiAgICAgYm9vbCBt
X211bHRpcGxlOwogICAgIGJvb2wgbV9hY3RpdmVTZWxlY3Rpb25TdGF0ZTsKLSAgICBib29sIG1f
c2hvdWxkUmVjYWxjTGlzdEl0ZW1zOworICAgIG11dGFibGUgYm9vbCBtX3Nob3VsZFJlY2FsY0xp
c3RJdGVtczsKIH07CiAKLUhUTUxTZWxlY3RFbGVtZW50KiB0b1NlbGVjdEVsZW1lbnQoRWxlbWVu
dCopOworaW5saW5lIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldFNlbGVjdGVkSW5kZXgoaW50
IGluZGV4LCBib29sIGRlc2VsZWN0KQoreworICAgIHNldFNlbGVjdGVkSW5kZXgoaW5kZXgsIGRl
c2VsZWN0LCBmYWxzZSk7Cit9CiAKIGlubGluZSBib29sIEhUTUxTZWxlY3RFbGVtZW50Ojp1c2Vz
TWVudUxpc3QoKSBjb25zdAogewpAQCAtMTk1LDYgKzE5NSwyMSBAQCBpbmxpbmUgYm9vbCBIVE1M
U2VsZWN0RWxlbWVudDo6dXNlc01lbnVMCiAjZW5kaWYKIH0KIAoraW5saW5lIEhUTUxTZWxlY3RF
bGVtZW50KiB0b0hUTUxTZWxlY3RFbGVtZW50KE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKCFu
b2RlIHx8IG5vZGUtPmlzSFRNTEVsZW1lbnQoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhU
TUxTZWxlY3RFbGVtZW50Kj4obm9kZSk7Cit9CisKK2lubGluZSBjb25zdCBIVE1MU2VsZWN0RWxl
bWVudCogdG9IVE1MU2VsZWN0RWxlbWVudChjb25zdCBOb2RlKiBub2RlKQoreworICAgIEFTU0VS
VCghbm9kZSB8fCBub2RlLT5pc0hUTUxFbGVtZW50KCkpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjb25zdCBIVE1MU2VsZWN0RWxlbWVudCo+KG5vZGUpOworfQorCisvLyBUaGlzIHdpbGwgY2F0
Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCit2b2lkIHRvSFRNTFNlbGVjdEVs
ZW1lbnQoY29uc3QgSFRNTFNlbGVjdEVsZW1lbnQqKTsKKwogfSAvLyBuYW1lc3BhY2UKIAogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL1ZhbGlkaXR5U3RhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvVmFsaWRpdHlTdGF0ZS5jcHAJKHJldmlzaW9uIDk3
NDkwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9WYWxpZGl0eVN0YXRlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE3LDEwICsxMTcsOCBAQCBib29sIFZhbGlkaXR5U3RhdGU6OnZhbHVlTWlzc2lu
ZygpIGNvbnN0CiAgICAgICAgIEhUTUxUZXh0QXJlYUVsZW1lbnQqIHRleHRBcmVhID0gc3RhdGlj
X2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudCo+KGVsZW1lbnQpOwogICAgICAgICByZXR1cm4gdGV4
dEFyZWEtPnZhbHVlTWlzc2luZyh0ZXh0QXJlYS0+dmFsdWUoKSk7CiAgICAgfQotICAgIGlmIChl
bGVtZW50LT5oYXNUYWdOYW1lKHNlbGVjdFRhZykpIHsKLSAgICAgICAgSFRNTFNlbGVjdEVsZW1l
bnQqIHNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4oZWxlbWVudCk7Ci0g
ICAgICAgIHJldHVybiBzZWxlY3QtPnZhbHVlTWlzc2luZygpOwotICAgIH0KKyAgICBpZiAoZWxl
bWVudC0+aGFzVGFnTmFtZShzZWxlY3RUYWcpKQorICAgICAgICByZXR1cm4gdG9IVE1MU2VsZWN0
RWxlbWVudChlbGVtZW50KS0+dmFsdWVNaXNzaW5nKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZp
c2lvbiA5NzQ5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6
dXBkYXRlRnJvbUVsZW1lbnQoKQogICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIGZvbnRDYWNo
ZVB1cmdlUHJldmVudGVyOwogCiAgICAgaWYgKG1fb3B0aW9uc0NoYW5nZWQpIHsKLSAgICAgICAg
Y29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHRvU2VsZWN0RWxlbWVudChz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSktPmxpc3RJdGVtcygpOworICAgICAgICBjb25z
dCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gdG9IVE1MU2VsZWN0RWxlbWVudChu
b2RlKCkpLT5saXN0SXRlbXMoKTsKICAgICAgICAgaW50IHNpemUgPSBudW1JdGVtcygpOwogICAg
ICAgICAKICAgICAgICAgZmxvYXQgd2lkdGggPSAwOwpAQCAtMTY3LDcgKzE2Nyw3IEBAIHZvaWQg
UmVuZGVyTGlzdEJveDo6bGF5b3V0KCkKIAogdm9pZCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxUb1Jl
dmVhbFNlbGVjdGlvbigpCiB7ICAgIAotICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSB0
b1NlbGVjdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpOworICAgIEhUTUxT
ZWxlY3RFbGVtZW50KiBzZWxlY3QgPSB0b0hUTUxTZWxlY3RFbGVtZW50KG5vZGUoKSk7CiAKICAg
ICBtX3Njcm9sbFRvUmV2ZWFsU2VsZWN0aW9uQWZ0ZXJMYXlvdXQgPSBmYWxzZTsKIApAQCAtMjEz
LDcgKzIxMyw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6Y29tcHV0ZVByZWZlcnJlZExvZ2kKIAog
aW50IFJlbmRlckxpc3RCb3g6OnNpemUoKSBjb25zdAogewotICAgIGludCBzcGVjaWZpZWRTaXpl
ID0gdG9TZWxlY3RFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpKS0+c2l6ZSgp
OworICAgIGludCBzcGVjaWZpZWRTaXplID0gdG9IVE1MU2VsZWN0RWxlbWVudChub2RlKCkpLT5z
aXplKCk7CiAgICAgaWYgKHNwZWNpZmllZFNpemUgPiAxKQogICAgICAgICByZXR1cm4gbWF4KG1p
blNpemUsIHNwZWNpZmllZFNpemUpOwogICAgIHJldHVybiBtaW4obWF4KG1pblNpemUsIG51bUl0
ZW1zKCkpLCBtYXhEZWZhdWx0U2l6ZSk7CkBAIC0yMjcsNyArMjI3LDcgQEAgaW50IFJlbmRlckxp
c3RCb3g6Om51bVZpc2libGVJdGVtcygpIGNvbgogCiBpbnQgUmVuZGVyTGlzdEJveDo6bnVtSXRl
bXMoKSBjb25zdAogewotICAgIHJldHVybiB0b1NlbGVjdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxl
bWVudCo+KG5vZGUoKSkpLT5saXN0SXRlbXMoKS5zaXplKCk7CisgICAgcmV0dXJuIHRvSFRNTFNl
bGVjdEVsZW1lbnQobm9kZSgpKS0+bGlzdEl0ZW1zKCkuc2l6ZSgpOwogfQogCiBMYXlvdXRVbml0
IFJlbmRlckxpc3RCb3g6Omxpc3RIZWlnaHQoKSBjb25zdApAQCAtMzE0LDcgKzMxNCw3IEBAIHZv
aWQgUmVuZGVyTGlzdEJveDo6YWRkRm9jdXNSaW5nUmVjdHMoVmUKICAgICBpZiAoIWlzU3BhdGlh
bE5hdmlnYXRpb25FbmFibGVkKGZyYW1lKCkpKQogICAgICAgICByZXR1cm4gUmVuZGVyQmxvY2s6
OmFkZEZvY3VzUmluZ1JlY3RzKHJlY3RzLCBhZGRpdGlvbmFsT2Zmc2V0KTsKIAotICAgIEhUTUxT
ZWxlY3RFbGVtZW50KiBzZWxlY3QgPSB0b1NlbGVjdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVu
dCo+KG5vZGUoKSkpOworICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSB0b0hUTUxTZWxl
Y3RFbGVtZW50KG5vZGUoKSk7CiAKICAgICAvLyBGb2N1cyB0aGUgbGFzdCBzZWxlY3RlZCBpdGVt
LgogICAgIGludCBzZWxlY3RlZEl0ZW0gPSBzZWxlY3QtPmFjdGl2ZVNlbGVjdGlvbkVuZExpc3RJ
bmRleCgpOwpAQCAtMzcwLDggKzM3MCw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVt
Rm9yZWdyb3VuZCgKIHsKICAgICBGb250Q2FjaGVQdXJnZVByZXZlbnRlciBmb250Q2FjaGVQdXJn
ZVByZXZlbnRlcjsKIAotICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSB0b1NlbGVjdEVs
ZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpOwotICAgIGNvbnN0IFZlY3RvcjxI
VE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3QtPmxpc3RJdGVtcygpOworICAgIGNvbnN0
IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSB0b0hUTUxTZWxlY3RFbGVtZW50KG5v
ZGUoKSktPmxpc3RJdGVtcygpOwogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbbGlz
dEluZGV4XTsKICAgICBPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVt
ZW50KGVsZW1lbnQpOwogCkBAIC00MjIsOCArNDIxLDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94Ojpw
YWludEl0ZW1Gb3JlZ3JvdW5kKAogCiB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUJhY2tn
cm91bmQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNl
dCwgaW50IGxpc3RJbmRleCkKIHsKLSAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gdG9T
ZWxlY3RFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpKTsKLSAgICBjb25zdCBW
ZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc2VsZWN0LT5saXN0SXRlbXMoKTsKKyAg
ICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gdG9IVE1MU2VsZWN0RWxl
bWVudChub2RlKCkpLT5saXN0SXRlbXMoKTsKICAgICBFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0
ZW1zW2xpc3RJbmRleF07CiAgICAgT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0
aW9uRWxlbWVudChlbGVtZW50KTsKIApAQCAtNTE5LDcgKzUxNyw3IEBAIHZvaWQgUmVuZGVyTGlz
dEJveDo6cGFuU2Nyb2xsKGNvbnN0IEludFAKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9pbkF1
dG9zY3JvbGwgPSB0cnVlOwotICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSB0b1NlbGVj
dEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpOworICAgIEhUTUxTZWxlY3RF
bGVtZW50KiBzZWxlY3QgPSB0b0hUTUxTZWxlY3RFbGVtZW50KG5vZGUoKSk7CiAgICAgc2VsZWN0
LT51cGRhdGVMaXN0Qm94U2VsZWN0aW9uKCFzZWxlY3QtPm11bHRpcGxlKCkpOwogICAgIG1faW5B
dXRvc2Nyb2xsID0gZmFsc2U7CiB9CkBAIC01NDgsNyArNTQ2LDcgQEAgdm9pZCBSZW5kZXJMaXN0
Qm94OjphdXRvc2Nyb2xsKCkKIAogICAgIGludCBlbmRJbmRleCA9IHNjcm9sbFRvd2FyZChwb3Mp
OwogICAgIGlmIChlbmRJbmRleCA+PSAwKSB7Ci0gICAgICAgIEhUTUxTZWxlY3RFbGVtZW50KiBz
ZWxlY3QgPSB0b1NlbGVjdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpOwor
ICAgICAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gdG9IVE1MU2VsZWN0RWxlbWVudChu
b2RlKCkpOwogICAgICAgICBtX2luQXV0b3Njcm9sbCA9IHRydWU7CiAKICAgICAgICAgaWYgKCFz
ZWxlY3QtPm11bHRpcGxlKCkpCkBAIC01NjIsNyArNTYwLDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94
OjphdXRvc2Nyb2xsKCkKIAogdm9pZCBSZW5kZXJMaXN0Qm94OjpzdG9wQXV0b3Njcm9sbCgpCiB7
Ci0gICAgdG9TZWxlY3RFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpKS0+bGlz
dEJveE9uQ2hhbmdlKCk7CisgICAgdG9IVE1MU2VsZWN0RWxlbWVudChub2RlKCkpLT5saXN0Qm94
T25DaGFuZ2UoKTsKIH0KIAogYm9vbCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxUb1JldmVhbEVsZW1l
bnRBdExpc3RJbmRleChpbnQgaW5kZXgpCkBAIC01OTgsOSArNTk2LDggQEAgYm9vbCBSZW5kZXJM
aXN0Qm94Ojpsb2dpY2FsU2Nyb2xsKFNjcm9sbAogCiB2b2lkIFJlbmRlckxpc3RCb3g6OnZhbHVl
Q2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgpCiB7Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IHN0
YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpOwotICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxl
Y3QgPSB0b1NlbGVjdEVsZW1lbnQoZWxlbWVudCk7Ci0gICAgc2VsZWN0LT5zZXRTZWxlY3RlZElu
ZGV4KHNlbGVjdC0+bGlzdFRvT3B0aW9uSW5kZXgobGlzdEluZGV4KSk7CisgICAgSFRNTFNlbGVj
dEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxTZWxlY3RFbGVtZW50KG5vZGUoKSk7CisgICAgZWxl
bWVudC0+c2V0U2VsZWN0ZWRJbmRleChlbGVtZW50LT5saXN0VG9PcHRpb25JbmRleChsaXN0SW5k
ZXgpKTsKICAgICBlbGVtZW50LT5kaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKIH0K
IApAQCAtNjgwLDcgKzY3Nyw3IEBAIGJvb2wgUmVuZGVyTGlzdEJveDo6bm9kZUF0UG9pbnQoY29u
c3QgSGkKIHsKICAgICBpZiAoIVJlbmRlckJsb2NrOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1
bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBs
aXN0SXRlbXMgPSB0b1NlbGVjdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkp
LT5saXN0SXRlbXMoKTsKKyAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1z
ID0gdG9IVE1MU2VsZWN0RWxlbWVudChub2RlKCkpLT5saXN0SXRlbXMoKTsKICAgICBpbnQgc2l6
ZSA9IG51bUl0ZW1zKCk7CiAgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3Vt
dWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24oKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck1lbnVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCShyZXZpc2lvbiA5NzQ5MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEw
ICszNCwxMCBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTE9wdEdyb3VwRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxl
LmgiCiAjaW5jbHVkZSAiT3B0aW9uRWxlbWVudC5oIgotI2luY2x1ZGUgIk9wdGlvbkdyb3VwRWxl
bWVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQb3B1cE1lbnUuaCIKICNpbmNs
dWRlICJSZW5kZXJCUi5oIgpAQCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6
OnN0eWxlRGlkQ2hhbmdlKFN0eWwKIHZvaWQgUmVuZGVyTWVudUxpc3Q6OnVwZGF0ZU9wdGlvbnNX
aWR0aCgpCiB7CiAgICAgZmxvYXQgbWF4T3B0aW9uV2lkdGggPSAwOwotICAgIGNvbnN0IFZlY3Rv
cjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSB0b1NlbGVjdEVsZW1lbnQoc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KG5vZGUoKSkpLT5saXN0SXRlbXMoKTsKKyAgICBjb25zdCBWZWN0b3I8SFRNTEVs
ZW1lbnQqPiYgbGlzdEl0ZW1zID0gdG9IVE1MU2VsZWN0RWxlbWVudChub2RlKCkpLT5saXN0SXRl
bXMoKTsKICAgICBpbnQgc2l6ZSA9IGxpc3RJdGVtcy5zaXplKCk7ICAgIAogICAgIEZvbnRDYWNo
ZVB1cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1cmdlUHJldmVudGVyOwogCkBAIC0xODksMTIgKzE4
OSwxMiBAQCB2b2lkIFJlbmRlck1lbnVMaXN0Ojp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgaWYg
KG1fcG9wdXBJc1Zpc2libGUpCiAgICAgICAgIG1fcG9wdXAtPnVwZGF0ZUZyb21FbGVtZW50KCk7
CiAgICAgZWxzZQotICAgICAgICBzZXRUZXh0RnJvbU9wdGlvbih0b1NlbGVjdEVsZW1lbnQoc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpLT5zZWxlY3RlZEluZGV4KCkpOworICAgICAgICBz
ZXRUZXh0RnJvbU9wdGlvbih0b0hUTUxTZWxlY3RFbGVtZW50KG5vZGUoKSktPnNlbGVjdGVkSW5k
ZXgoKSk7CiB9CiAKIHZvaWQgUmVuZGVyTWVudUxpc3Q6OnNldFRleHRGcm9tT3B0aW9uKGludCBv
cHRpb25JbmRleCkKIHsKLSAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gdG9TZWxlY3RF
bGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpKTsKKyAgICBIVE1MU2VsZWN0RWxl
bWVudCogc2VsZWN0ID0gdG9IVE1MU2VsZWN0RWxlbWVudChub2RlKCkpOwogICAgIGNvbnN0IFZl
Y3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3QtPmxpc3RJdGVtcygpOwogICAg
IGludCBzaXplID0gbGlzdEl0ZW1zLnNpemUoKTsKIApAQCAtMzAwLDcgKzMwMCw2IEBAIHZvaWQg
UmVuZGVyTWVudUxpc3Q6OnNob3dQb3B1cCgpCiAgICAgY3JlYXRlSW5uZXJCbG9jaygpOwogICAg
IGlmICghbV9wb3B1cCkKICAgICAgICAgbV9wb3B1cCA9IGRvY3VtZW50KCktPnBhZ2UoKS0+Y2hy
b21lKCktPmNyZWF0ZVBvcHVwTWVudSh0aGlzKTsKLSAgICBIVE1MU2VsZWN0RWxlbWVudCogc2Vs
ZWN0ID0gdG9TZWxlY3RFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpKTsKICAg
ICBtX3BvcHVwSXNWaXNpYmxlID0gdHJ1ZTsKIAogICAgIC8vIENvbXB1dGUgdGhlIHRvcCBsZWZ0
IHRha2luZyB0cmFuc2Zvcm1zIGludG8gYWNjb3VudCwgYnV0IHVzZQpAQCAtMzA4LDggKzMwNyw4
IEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OnNob3dQb3B1cCgpCiAgICAgRmxvYXRQb2ludCBhYnNU
b3BMZWZ0ID0gbG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSwgZmFsc2UsIHRydWUpOwogICAg
IExheW91dFJlY3QgYWJzQm91bmRzID0gYWJzb2x1dGVCb3VuZGluZ0JveFJlY3RJZ25vcmluZ1Ry
YW5zZm9ybXMoKTsKICAgICBhYnNCb3VuZHMuc2V0TG9jYXRpb24ocm91bmRlZEludFBvaW50KGFi
c1RvcExlZnQpKTsKLSAgICBtX3BvcHVwLT5zaG93KGFic0JvdW5kcywgZG9jdW1lbnQoKS0+dmll
dygpLAotICAgICAgICBzZWxlY3QtPm9wdGlvblRvTGlzdEluZGV4KHNlbGVjdC0+c2VsZWN0ZWRJ
bmRleCgpKSk7CisgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHRvSFRNTFNlbGVjdEVs
ZW1lbnQobm9kZSgpKTsKKyAgICBtX3BvcHVwLT5zaG93KGFic0JvdW5kcywgZG9jdW1lbnQoKS0+
dmlldygpLCBzZWxlY3QtPm9wdGlvblRvTGlzdEluZGV4KHNlbGVjdC0+c2VsZWN0ZWRJbmRleCgp
KSk7CiB9CiAKIHZvaWQgUmVuZGVyTWVudUxpc3Q6OmhpZGVQb3B1cCgpCkBAIC0zMjYsMjggKzMy
NSwyNSBAQCB2b2lkIFJlbmRlck1lbnVMaXN0Ojp2YWx1ZUNoYW5nZWQodW5zaWduCiAgICAgaWYg
KCFkb2MgfHwgZG9jICE9IGRvYy0+ZnJhbWUoKS0+ZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSB0b1NlbGVjdEVsZW1lbnQo
c3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpOworICAgIEhUTUxTZWxlY3RFbGVtZW50KiBz
ZWxlY3QgPSB0b0hUTUxTZWxlY3RFbGVtZW50KG5vZGUoKSk7CiAgICAgc2VsZWN0LT5zZXRTZWxl
Y3RlZEluZGV4QnlVc2VyKHNlbGVjdC0+bGlzdFRvT3B0aW9uSW5kZXgobGlzdEluZGV4KSwgdHJ1
ZSwgZmlyZU9uQ2hhbmdlKTsKIH0KIAogI2lmIEVOQUJMRShOT19MSVNUQk9YX1JFTkRFUklORykK
IHZvaWQgUmVuZGVyTWVudUxpc3Q6Omxpc3RCb3hTZWxlY3RJdGVtKGludCBsaXN0SW5kZXgsIGJv
b2wgYWxsb3dNdWx0aXBseVNlbGVjdGlvbnMsIGJvb2wgc2hpZnQsIGJvb2wgZmlyZU9uQ2hhbmdl
Tm93KQogewotICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSB0b1NlbGVjdEVsZW1lbnQo
c3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpOwotICAgIHNlbGVjdC0+bGlzdEJveFNlbGVj
dEl0ZW0obGlzdEluZGV4LCBhbGxvd011bHRpcGx5U2VsZWN0aW9ucywgc2hpZnQsIGZpcmVPbkNo
YW5nZU5vdyk7CisgICAgdG9IVE1MU2VsZWN0RWxlbWVudChub2RlKCkpLT5saXN0Qm94U2VsZWN0
SXRlbShsaXN0SW5kZXgsIGFsbG93TXVsdGlwbHlTZWxlY3Rpb25zLCBzaGlmdCwgZmlyZU9uQ2hh
bmdlTm93KTsKIH0KIAogYm9vbCBSZW5kZXJNZW51TGlzdDo6bXVsdGlwbGUoKQogewotICAgIEhU
TUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSB0b1NlbGVjdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxl
bWVudCo+KG5vZGUoKSkpOwotICAgIHJldHVybiBzZWxlY3QtPm11bHRpcGxlKCk7CisgICAgcmV0
dXJuIHRvSFRNTFNlbGVjdEVsZW1lbnQobm9kZSgpKS0+bXVsdGlwbGUoKTsKIH0KICNlbmRpZgog
CiB2b2lkIFJlbmRlck1lbnVMaXN0OjpkaWRTZXRTZWxlY3RlZEluZGV4KGludCBsaXN0SW5kZXgp
CiB7Ci0gICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHRvU2VsZWN0RWxlbWVudChzdGF0
aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSk7Ci0gICAgZGlkVXBkYXRlQWN0aXZlT3B0aW9uKHNl
bGVjdC0+bGlzdFRvT3B0aW9uSW5kZXgobGlzdEluZGV4KSk7CisgICAgZGlkVXBkYXRlQWN0aXZl
T3B0aW9uKHRvSFRNTFNlbGVjdEVsZW1lbnQobm9kZSgpKS0+bGlzdFRvT3B0aW9uSW5kZXgobGlz
dEluZGV4KSk7CiB9CiAKIHZvaWQgUmVuZGVyTWVudUxpc3Q6OmRpZFVwZGF0ZUFjdGl2ZU9wdGlv
bihpbnQgb3B0aW9uSW5kZXgpCkBAIC0zNTksMTIgKzM1NSwxMiBAQCB2b2lkIFJlbmRlck1lbnVM
aXN0OjpkaWRVcGRhdGVBY3RpdmVPcHRpCiAgICAgICAgIHJldHVybjsKICAgICBtX2xhc3RBY3Rp
dmVJbmRleCA9IG9wdGlvbkluZGV4OwogCi0gICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9
IHRvU2VsZWN0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSk7CisgICAgSFRN
TFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHRvSFRNTFNlbGVjdEVsZW1lbnQobm9kZSgpKTsKICAg
ICBpbnQgbGlzdEluZGV4ID0gc2VsZWN0LT5vcHRpb25Ub0xpc3RJbmRleChvcHRpb25JbmRleCk7
CiAgICAgaWYgKGxpc3RJbmRleCA8IDAgfHwgbGlzdEluZGV4ID49IHN0YXRpY19jYXN0PGludD4o
c2VsZWN0LT5saXN0SXRlbXMoKS5zaXplKCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NF
UlQodG9PcHRpb25FbGVtZW50KHNlbGVjdC0+bGlzdEl0ZW1zKClbbGlzdEluZGV4XSkpOworICAg
IEFTU0VSVChzZWxlY3QtPmxpc3RJdGVtcygpW2xpc3RJbmRleF0pOwogCiAgICAgaWYgKEFjY2Vz
c2liaWxpdHlNZW51TGlzdCogbWVudUxpc3QgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5TWVu
dUxpc3QqPihkb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPmdldCh0aGlzKSkpCiAgICAgICAg
IG1lbnVMaXN0LT5kaWRVcGRhdGVBY3RpdmVPcHRpb24ob3B0aW9uSW5kZXgpOwpAQCAtMzcyLDcg
KzM2OCw3IEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OmRpZFVwZGF0ZUFjdGl2ZU9wdGkKIAogU3Ry
aW5nIFJlbmRlck1lbnVMaXN0OjppdGVtVGV4dCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0CiB7
Ci0gICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHRvU2VsZWN0RWxlbWVudChzdGF0aWNf
Y2FzdDxFbGVtZW50Kj4obm9kZSgpKSk7CisgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9
IHRvSFRNTFNlbGVjdEVsZW1lbnQobm9kZSgpKTsKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1l
bnQqPiYgbGlzdEl0ZW1zID0gc2VsZWN0LT5saXN0SXRlbXMoKTsKICAgICBpZiAobGlzdEluZGV4
ID49IGxpc3RJdGVtcy5zaXplKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKQEAgLTQwMSwz
OCArMzk3LDMxIEBAIFN0cmluZyBSZW5kZXJNZW51TGlzdDo6aXRlbUljb24odW5zaWduZWQKIFN0
cmluZyBSZW5kZXJNZW51TGlzdDo6aXRlbUFjY2Vzc2liaWxpdHlUZXh0KHVuc2lnbmVkIGxpc3RJ
bmRleCkgY29uc3QKIHsKICAgICAvLyBBbGxvdyB0aGUgYWNjZXNzaWJsZSBuYW1lIGJlIGNoYW5n
ZWQgaWYgbmVjZXNzYXJ5LgotICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSB0b1NlbGVj
dEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpOwotICAgIGNvbnN0IFZlY3Rv
cjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3QtPmxpc3RJdGVtcygpOworICAgIGNv
bnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSB0b0hUTUxTZWxlY3RFbGVtZW50
KG5vZGUoKSktPmxpc3RJdGVtcygpOwogICAgIGlmIChsaXN0SW5kZXggPj0gbGlzdEl0ZW1zLnNp
emUoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgcmV0dXJuIGxpc3RJdGVtc1ts
aXN0SW5kZXhdLT5nZXRBdHRyaWJ1dGUoYXJpYV9sYWJlbEF0dHIpOworICAgIHJldHVybiBsaXN0
SXRlbXNbbGlzdEluZGV4XS0+ZmFzdEdldEF0dHJpYnV0ZShhcmlhX2xhYmVsQXR0cik7CiB9CiAg
ICAgCiBTdHJpbmcgUmVuZGVyTWVudUxpc3Q6Oml0ZW1Ub29sVGlwKHVuc2lnbmVkIGxpc3RJbmRl
eCkgY29uc3QKIHsKLSAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gdG9TZWxlY3RFbGVt
ZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpKTsKLSAgICBjb25zdCBWZWN0b3I8SFRN
TEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc2VsZWN0LT5saXN0SXRlbXMoKTsKKyAgICBjb25zdCBW
ZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gdG9IVE1MU2VsZWN0RWxlbWVudChub2Rl
KCkpLT5saXN0SXRlbXMoKTsKICAgICBpZiAobGlzdEluZGV4ID49IGxpc3RJdGVtcy5zaXplKCkp
CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0
ZW1zW2xpc3RJbmRleF07Ci0gICAgcmV0dXJuIGVsZW1lbnQtPnRpdGxlKCk7CisgICAgcmV0dXJu
IGxpc3RJdGVtc1tsaXN0SW5kZXhdLT50aXRsZSgpOwogfQogCiBib29sIFJlbmRlck1lbnVMaXN0
OjppdGVtSXNFbmFibGVkKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKIHsKLSAgICBIVE1MU2Vs
ZWN0RWxlbWVudCogc2VsZWN0ID0gdG9TZWxlY3RFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQq
Pihub2RlKCkpKTsKLSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0g
c2VsZWN0LT5saXN0SXRlbXMoKTsKKyAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlz
dEl0ZW1zID0gdG9IVE1MU2VsZWN0RWxlbWVudChub2RlKCkpLT5saXN0SXRlbXMoKTsKICAgICBp
ZiAobGlzdEluZGV4ID49IGxpc3RJdGVtcy5zaXplKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2xpc3RJbmRleF07Ci0gICAgaWYgKCFp
c09wdGlvbkVsZW1lbnQoZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBIVE1M
RWxlbWVudCogZWxlbWVudCA9IGxpc3RJdGVtc1tsaXN0SW5kZXhdOwogCiAgICAgYm9vbCBncm91
cEVuYWJsZWQgPSB0cnVlOwogICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVu
dC0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAgIGlmIChpc09wdGlvbkdyb3VwRWxlbWVudChw
YXJlbnRFbGVtZW50KSkKLSAgICAgICAgICAgIGdyb3VwRW5hYmxlZCA9IHBhcmVudEVsZW1lbnQt
PmlzRW5hYmxlZEZvcm1Db250cm9sKCk7CisgICAgICAgICAgICBncm91cEVuYWJsZWQgPSAhc3Rh
dGljX2Nhc3Q8SFRNTE9wdEdyb3VwRWxlbWVudCo+KHBhcmVudEVsZW1lbnQpLT5kaXNhYmxlZCgp
OwogICAgIH0KICAgICBpZiAoIWdyb3VwRW5hYmxlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtNDQyLDggKzQzMSw3IEBAIGJvb2wgUmVuZGVyTWVudUxpc3Q6Oml0ZW1Jc0VuYWJsZWQodW5z
aWcKIAogUG9wdXBNZW51U3R5bGUgUmVuZGVyTWVudUxpc3Q6Oml0ZW1TdHlsZSh1bnNpZ25lZCBs
aXN0SW5kZXgpIGNvbnN0CiB7Ci0gICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHRvU2Vs
ZWN0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSk7Ci0gICAgY29uc3QgVmVj
dG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHNlbGVjdC0+bGlzdEl0ZW1zKCk7CisgICAg
Y29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHRvSFRNTFNlbGVjdEVsZW1l
bnQobm9kZSgpKS0+bGlzdEl0ZW1zKCk7CiAgICAgaWYgKGxpc3RJbmRleCA+PSBsaXN0SXRlbXMu
c2l6ZSgpKSB7CiAgICAgICAgIC8vIElmIHdlIGFyZSBtYWtpbmcgYW4gb3V0IG9mIGJvdW5kcyBh
Y2Nlc3MsIHRoZW4gd2Ugd2FudCB0byB1c2UgdGhlIHN0eWxlCiAgICAgICAgIC8vIG9mIGEgZGlm
ZmVyZW50IG9wdGlvbiBlbGVtZW50IChpbmRleCAwKS4gSG93ZXZlciwgaWYgdGhlcmUgaXNuJ3Qg
YW4gb3B0aW9uIGVsZW1lbnQKQEAgLTQ1NCw3ICs0NDIsNyBAQCBQb3B1cE1lbnVTdHlsZSBSZW5k
ZXJNZW51TGlzdDo6aXRlbVN0eWxlCiAgICAgICAgIC8vIFRyeSB0byByZXRyaWV2ZSB0aGUgc3R5
bGUgb2YgYW4gb3B0aW9uIGVsZW1lbnQgd2Uga25vdyBleGlzdHMgKGluZGV4IDApLgogICAgICAg
ICBsaXN0SW5kZXggPSAwOwogICAgIH0KLSAgICBFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1z
W2xpc3RJbmRleF07CisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbbGlzdElu
ZGV4XTsKICAgICAKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBlbGVtZW50LT5yZW5kZXJTdHls
ZSgpID8gZWxlbWVudC0+cmVuZGVyU3R5bGUoKSA6IGVsZW1lbnQtPmNvbXB1dGVkU3R5bGUoKTsK
ICAgICByZXR1cm4gc3R5bGUgPyBQb3B1cE1lbnVTdHlsZShzdHlsZS0+dmlzaXRlZERlcGVuZGVu
dENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBpdGVtQmFja2dyb3VuZENvbG9yKGxpc3RJbmRleCks
IHN0eWxlLT5mb250KCksIHN0eWxlLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSwgc3R5bGUtPmRp
c3BsYXkoKSA9PSBOT05FLCBzdHlsZS0+dGV4dEluZGVudCgpLCBzdHlsZS0+ZGlyZWN0aW9uKCks
IHN0eWxlLT51bmljb2RlQmlkaSgpID09IE92ZXJyaWRlKSA6IG1lbnVTdHlsZSgpOwpAQCAtNDYy
LDExICs0NTAsMTAgQEAgUG9wdXBNZW51U3R5bGUgUmVuZGVyTWVudUxpc3Q6Oml0ZW1TdHlsZQog
CiBDb2xvciBSZW5kZXJNZW51TGlzdDo6aXRlbUJhY2tncm91bmRDb2xvcih1bnNpZ25lZCBsaXN0
SW5kZXgpIGNvbnN0CiB7Ci0gICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHRvU2VsZWN0
RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSk7Ci0gICAgY29uc3QgVmVjdG9y
PEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHNlbGVjdC0+bGlzdEl0ZW1zKCk7CisgICAgY29u
c3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHRvSFRNTFNlbGVjdEVsZW1lbnQo
bm9kZSgpKS0+bGlzdEl0ZW1zKCk7CiAgICAgaWYgKGxpc3RJbmRleCA+PSBsaXN0SXRlbXMuc2l6
ZSgpKQogICAgICAgICByZXR1cm4gc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1By
b3BlcnR5QmFja2dyb3VuZENvbG9yKTsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1z
W2xpc3RJbmRleF07CisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbbGlzdElu
ZGV4XTsKIAogICAgIENvbG9yIGJhY2tncm91bmRDb2xvcjsKICAgICBpZiAoZWxlbWVudC0+cmVu
ZGVyU3R5bGUoKSkKQEAgLTUzOSwxMyArNTI2LDEyIEBAIGludCBSZW5kZXJNZW51TGlzdDo6Y2xp
ZW50UGFkZGluZ1JpZ2h0KCkKIAogaW50IFJlbmRlck1lbnVMaXN0OjpsaXN0U2l6ZSgpIGNvbnN0
CiB7Ci0gICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHRvU2VsZWN0RWxlbWVudChzdGF0
aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSk7Ci0gICAgcmV0dXJuIHNlbGVjdC0+bGlzdEl0ZW1z
KCkuc2l6ZSgpOworICAgIHJldHVybiB0b0hUTUxTZWxlY3RFbGVtZW50KG5vZGUoKSktPmxpc3RJ
dGVtcygpLnNpemUoKTsKIH0KIAogaW50IFJlbmRlck1lbnVMaXN0OjpzZWxlY3RlZEluZGV4KCkg
Y29uc3QKIHsKLSAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gdG9TZWxlY3RFbGVtZW50
KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpKTsKKyAgICBIVE1MU2VsZWN0RWxlbWVudCog
c2VsZWN0ID0gdG9IVE1MU2VsZWN0RWxlbWVudChub2RlKCkpOwogICAgIHJldHVybiBzZWxlY3Qt
Pm9wdGlvblRvTGlzdEluZGV4KHNlbGVjdC0+c2VsZWN0ZWRJbmRleCgpKTsKIH0KIApAQCAtNTU2
LDQwICs1NDIsMjkgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6cG9wdXBEaWRIaWRlKCkKIAogYm9v
bCBSZW5kZXJNZW51TGlzdDo6aXRlbUlzU2VwYXJhdG9yKHVuc2lnbmVkIGxpc3RJbmRleCkgY29u
c3QKIHsKLSAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gdG9TZWxlY3RFbGVtZW50KHN0
YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpKTsKLSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1l
bnQqPiYgbGlzdEl0ZW1zID0gc2VsZWN0LT5saXN0SXRlbXMoKTsKLSAgICBpZiAobGlzdEluZGV4
ID49IGxpc3RJdGVtcy5zaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBFbGVtZW50
KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2xpc3RJbmRleF07Ci0gICAgcmV0dXJuIGVsZW1lbnQtPmhh
c1RhZ05hbWUoaHJUYWcpOworICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRl
bXMgPSB0b0hUTUxTZWxlY3RFbGVtZW50KG5vZGUoKSktPmxpc3RJdGVtcygpOworICAgIHJldHVy
biBsaXN0SW5kZXggPCBsaXN0SXRlbXMuc2l6ZSgpICYmIGxpc3RJdGVtc1tsaXN0SW5kZXhdLT5o
YXNUYWdOYW1lKGhyVGFnKTsKIH0KIAogYm9vbCBSZW5kZXJNZW51TGlzdDo6aXRlbUlzTGFiZWwo
dW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAogewotICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxl
Y3QgPSB0b1NlbGVjdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpOwotICAg
IGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3QtPmxpc3RJdGVt
cygpOwotICAgIGlmIChsaXN0SW5kZXggPj0gbGlzdEl0ZW1zLnNpemUoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBsaXN0SXRlbXNbbGlzdEluZGV4XTsK
LSAgICByZXR1cm4gaXNPcHRpb25Hcm91cEVsZW1lbnQoZWxlbWVudCk7CisgICAgY29uc3QgVmVj
dG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHRvSFRNTFNlbGVjdEVsZW1lbnQobm9kZSgp
KS0+bGlzdEl0ZW1zKCk7CisgICAgcmV0dXJuIGxpc3RJbmRleCA8IGxpc3RJdGVtcy5zaXplKCkg
JiYgaXNPcHRpb25Hcm91cEVsZW1lbnQobGlzdEl0ZW1zW2xpc3RJbmRleF0pOwogfQogCiBib29s
IFJlbmRlck1lbnVMaXN0OjppdGVtSXNTZWxlY3RlZCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0
CiB7Ci0gICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHRvU2VsZWN0RWxlbWVudChzdGF0
aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSk7Ci0gICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50
Kj4mIGxpc3RJdGVtcyA9IHNlbGVjdC0+bGlzdEl0ZW1zKCk7CisgICAgY29uc3QgVmVjdG9yPEhU
TUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHRvSFRNTFNlbGVjdEVsZW1lbnQobm9kZSgpKS0+bGlz
dEl0ZW1zKCk7CiAgICAgaWYgKGxpc3RJbmRleCA+PSBsaXN0SXRlbXMuc2l6ZSgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IGxpc3RJdGVtc1tsaXN0SW5k
ZXhdOwotICAgIGlmIChPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVt
ZW50KGVsZW1lbnQpKQorICAgIGlmIChPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9P
cHRpb25FbGVtZW50KGxpc3RJdGVtc1tsaXN0SW5kZXhdKSkKICAgICAgICAgcmV0dXJuIG9wdGlv
bkVsZW1lbnQtPnNlbGVjdGVkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIFJlbmRl
ck1lbnVMaXN0OjpzZXRUZXh0RnJvbUl0ZW0odW5zaWduZWQgbGlzdEluZGV4KQogewotICAgIEhU
TUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSB0b1NlbGVjdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxl
bWVudCo+KG5vZGUoKSkpOwotICAgIHNldFRleHRGcm9tT3B0aW9uKHNlbGVjdC0+bGlzdFRvT3B0
aW9uSW5kZXgobGlzdEluZGV4KSk7CisgICAgc2V0VGV4dEZyb21PcHRpb24odG9IVE1MU2VsZWN0
RWxlbWVudChub2RlKCkpLT5saXN0VG9PcHRpb25JbmRleChsaXN0SW5kZXgpKTsKIH0KIAogRm9u
dFNlbGVjdG9yKiBSZW5kZXJNZW51TGlzdDo6Zm9udFNlbGVjdG9yKCkgY29uc3QK
</data>
<flag name="review"
          id="108782"
          type_id="1"
          status="+"
          setter="rniwa"
    />
    <flag name="commit-queue"
          id="108795"
          type_id="3"
          status="-"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>