<?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>138556</bug_id>
          
          <creation_ts>2014-11-09 22:07:57 -0800</creation_ts>
          <short_desc>Minor tweaks to HTMLCollection</short_desc>
          <delta_ts>2014-11-11 12:13:14 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</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>138620</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>cdumez</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1047469</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-09 22:07:57 -0800</bug_when>
    <thetext>Minor tweaks to HTMLCollection</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047474</commentid>
    <comment_count>1</comment_count>
      <attachid>241278</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-09 22:28:48 -0800</bug_when>
    <thetext>Created attachment 241278
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047480</commentid>
    <comment_count>2</comment_count>
      <attachid>241278</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-09 23:18:19 -0800</bug_when>
    <thetext>Comment on attachment 241278
Patch

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

nice, r=me

&gt; Source/WebCore/html/HTMLCollection.cpp:451
&gt;      for (unsigned i = 0; i &lt; size; i++) {

nit: ++i

&gt; Source/WebCore/html/HTMLFormControlsCollection.cpp:124
&gt; +Element* HTMLFormControlsCollection::namedItem(const AtomicString&amp; name) const

This could probably return an HTMLElement* even.

&gt; Source/WebCore/html/HTMLFormControlsCollection.h:44
&gt; +    virtual Element* namedItem(const AtomicString&amp; name) const override;

Could likely return an HTMLElement* even.

&gt; Source/WebCore/html/HTMLSelectElement.h:90
&gt; +    Element* namedItem(const AtomicString&amp; name);

Could likely return a HTMLOptionElement*

&gt; Source/WebCore/html/HTMLSelectElement.h:91
&gt; +    Element* item(unsigned index);

Ditto.

&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:42
&gt; +    for (Element* child = parent.firstElementChild(); child; child = child-&gt;nextElementSibling()) {

for (auto&amp; child : childrenOfType&lt;Element&gt;(parent)) { ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047869</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-11 09:35:28 -0800</bug_when>
    <thetext>Committed r175947: &lt;http://trac.webkit.org/changeset/175947&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047921</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-11 12:00:47 -0800</bug_when>
    <thetext>Seems to have caused assertions in debug builds:
https://build.webkit.org/results/Apple%20Mavericks%20Debug%20WK1%20(Tests)/r175947%20(8835)/results.html

I am looking now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047922</commentid>
    <comment_count>5</comment_count>
      <attachid>241278</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-11 12:04:58 -0800</bug_when>
    <thetext>Comment on attachment 241278
Patch

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

&gt; Source/WebCore/html/HTMLCollection.cpp:335
&gt; +        for (traversedCount = 0; element &amp;&amp; traversedCount &lt; count; ++traversedCount)

I think the issue is that traversedCount gets incremented 1 time less than it used to be, in the case where it hits the end of the list (element is null).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047923</commentid>
    <comment_count>6</comment_count>
      <attachid>241278</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-11 12:11:17 -0800</bug_when>
    <thetext>Comment on attachment 241278
Patch

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

&gt;&gt; Source/WebCore/html/HTMLCollection.cpp:335
&gt;&gt; +        for (traversedCount = 0; element &amp;&amp; traversedCount &lt; count; ++traversedCount)
&gt; 
&gt; I think the issue is that traversedCount gets incremented 1 time less than it used to be, in the case where it hits the end of the list (element is null).

Sorry, I meant it gets incremented 1 time more (not less) than before when element is null.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241278</attachid>
            <date>2014-11-09 22:28:48 -0800</date>
            <delta_ts>2014-11-09 23:18:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138556-20141109222850.patch</filename>
            <type>text/plain</type>
            <size>54324</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1Nzk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzY2ZTM1NzA5N2VjYTlm
NzYxZGI3MGJkYTQ2MWY3ZTZmMTc5YjYwMS4uZjBkMzg5YjhiNmYyYWQ3MWNlYmVjZDlmMTVhZDlh
NjBkNWIwOWY5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMyBAQAorMjAxNC0xMS0wOSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTWlub3IgdHdlYWtzIHRvIEhU
TUxDb2xsZWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzg1NTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphZGRSYWRpb0J1dHRvbkdy
b3VwTWVtYmVycyk6CisgICAgICAgIFVwZGF0ZSBmb3IgbmFtZWRFbGVtZW50cyBmdW5jdGlvbiB0
aGF0IG5vdyByZXR1cm5zIGEgVmVjdG9yOyBhbHNvIHVzZQorICAgICAgICBhIG5ldyBzdHlsZSBm
b3IgbG9vcCB0byBpdGVyYXRlIGl0LgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MQWxs
Q29sbGVjdGlvbkN1c3RvbS5jcHA6IFJlbW92ZWQgc29tZSB1bm5lZWRlZCBpbmNsdWRlcy4KKyAg
ICAgICAgKFdlYkNvcmU6Om5hbWVkSXRlbXMpOiBVcGRhdGVkIG5hbWUgdG8gbWF0Y2ggV2ViS2l0
IGNvZGluZyBzdHlsZSwgYW5kIGFsc28KKyAgICAgICAgdXBkYXRlZCB0byB1c2UgdGhlIHJldHVy
biB2YWx1ZSBmcm9tIG5hbWVkSXRlbXMsIHdoaWNoIG5vdyByZXR1cm5zIGEgVmVjdG9yLgorICAg
ICAgICAoV2ViQ29yZTo6Y2FsbEhUTUxBbGxDb2xsZWN0aW9uKTogVXBkYXRlZCBmb3IgbmFtZWRJ
dGVtcyBuYW1lIGNoYW5nZS4KKyAgICAgICAgQWxzbyByZW1vdmVkIGV4cGxpY2l0IE5vZGUqIHR5
cGUgZnJvbSByZXN1bHQgb2YgbmFtZWRJdGVtV2l0aEluZGV4LCBzaW5jZSB0aGF0CisgICAgICAg
IGZ1bmN0aW9uIG5vdyByZXR1cm5zIGEgbW9yZSBzcGVjaWZpYyB0eXBlLgorICAgICAgICAoV2Vi
Q29yZTo6SlNIVE1MQWxsQ29sbGVjdGlvbjo6bmFtZUdldHRlcik6IFVwZGF0ZSBmb3IgbmFtZWRJ
dGVtcyBuYW1lIGNoYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTEFsbENvbGxlY3Rpb246
Oml0ZW0pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTEFsbENvbGxlY3Rpb246Om5h
bWVkSXRlbSk6IERpdHRvLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MRm9ybUNvbnRy
b2xzQ29sbGVjdGlvbkN1c3RvbS5jcHA6IFJlbW92ZWQgc29tZSB1bm5lZWRlZCBpbmNsdWRlcy4K
KyAgICAgICAgKFdlYkNvcmU6Om5hbWVkSXRlbXMpOiBVcGRhdGVkIG5hbWUgdG8gbWF0Y2ggV2Vi
S2l0IGNvZGluZyBzdHlsZSwgYW5kIGFsc28KKyAgICAgICAgdXBkYXRlZCB0byB1c2UgdGhlIHJl
dHVybiB2YWx1ZSBmcm9tIG5hbWVkSXRlbXMsIHdoaWNoIG5vdyByZXR1cm5zIGEgVmVjdG9yLgor
ICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjo6bmFtZUdldHRl
cik6IFVwZGF0ZSBmb3IgbmFtZWRJdGVtcyBuYW1lIGNoYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6
OkpTSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb246Om5hbWVkSXRlbSk6IERpdHRvLgorCisgICAg
ICAgICogYmluZGluZ3MvanMvSlNIVE1MRm9ybUVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNIVE1MRm9ybUVsZW1lbnQ6Om5hbWVHZXR0ZXIpOiBVcGRhdGVkIHRvIHVzZSB0
aGUgcmV0dXJuIHZhbHVlIGZyb20KKyAgICAgICAgbmFtZWRJdGVtcywgd2hpY2ggbm93IHJldHVy
bnMgYSBWZWN0b3IuCisKKyAgICAgICAgKiBodG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxBbGxDb2xsZWN0aW9uOjpIVE1MQWxsQ29sbGVjdGlvbik6IE1h
cmtlZCB0aGUgY29uc3RydWN0b3IgaW5saW5lLAorICAgICAgICBzaW5jZSBpdCdzIG9ubHkgdXNl
ZCBpbiBvbmUgcGxhY2UsIHRoZSBjcmVhdGUgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpI
VE1MQWxsQ29sbGVjdGlvbjo6fkhUTUxBbGxDb2xsZWN0aW9uKTogRGVsZXRlZC4gTm8gbmVlZCB0
byBoYXZlIGFuCisgICAgICAgIGV4cGxpY2l0IGRlc3RydWN0b3Igc2luY2UgdGhlcmUncyBub3Ro
aW5nIHNwZWNpYWwgdG8gaW1wbGVtZW50LCBhbmQgaW5jbHVkZXJzIG9mCisgICAgICAgIHRoZSBo
ZWFkZXIgZmlsZSBoYXZlIGV2ZXJ5dGhpbmcgdGhleSBlbmVkIHRvIGNvbXBpbGUgdGhlIGNvbXBp
bGVyLWdlbmVyYXRlZCBvbmUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MQWxsQ29sbGVjdGlvbjo6
bmFtZWRJdGVtV2l0aEluZGV4KTogQ2hhbmdlZCByZXR1cm4gdHlwZSB0byBFbGVtZW50LgorCisg
ICAgICAgICogaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5oOiBSZW1vdmVkIHVubmVlZGVkIGV4cGxp
Y2l0IGRlY2xhcmF0aW9uIG9mIGRlc3RydWN0b3IuCisgICAgICAgIENoYWduZWQgcmV0dXJuIHR5
cGUgb2YgbmFtZWRJdGVtV2l0aEluZGV4IHRvIEVsZW1lbnQuCisKKyAgICAgICAgKiBodG1sL0hU
TUxDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjpyb290
VHlwZUZyb21Db2xsZWN0aW9uVHlwZSk6IE1hcmtlZCB0aGlzIGlubGluZS4gQWxzbworICAgICAg
ICBjaGFuZ2VkIHRoaXMgdG8gYmUgYSBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9uIHNvIGl0IGNhbiB1
c2UgdGhlIFJvb3RUeXBlIGVudW0sIHdoaWNoCisgICAgICAgIGlzIG5vdyBwcml2YXRlIHRvIHRo
ZSBjbGFzcy4KKyAgICAgICAgKFdlYkNvcmU6OmlzTWF0Y2hpbmdIVE1MRWxlbWVudCk6IE1hcmtl
ZCB0aGlzIGZ1bmN0aW9uIHN0YXRpYyBzbyBpdCB3aWxsIGdldAorICAgICAgICBpbnRlcm5hbCBs
aW5rYWdlLgorICAgICAgICAoV2ViQ29yZTo6aXNNYXRjaGluZ0VsZW1lbnQpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OnByZXZpb3VzRWxlbWVudCk6IE1hcmtlZCB0aGlzIGZ1bmN0aW9uIGlu
bGluZSBzaW5jZSBpdCdzIGNhbGxlZCBpbiBvbmx5CisgICAgICAgIG9uZSBwbGFjZS4gQ2hhbmdl
ZCBhcmd1bWVudCB0eXBlIHRvIGEgcmVmZXJlbmNlIHNpbmNlIGl0IGNhbiBuZXZlciBiZSBudWxs
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246Oml0ZXJhdGVGb3JQcmV2aW91c0Vs
ZW1lbnQpOiBDaGFuZ2VkIGFyZ3VtZW50IG5hbWUgYW5kCisgICAgICAgIGFsc28gdXBkYXRlZCBm
b3IgYWJvdmUgY2hhbmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OmZpcnN0TWF0Y2hpbmdFbGVtZW50
KTogTWFya2VkIHRoaXMgZnVuY3Rpb24gc3RhdGljIHNvIGl0IHdpbGwgZ2V0CisgICAgICAgIGlu
dGVybmFsIGxpbmthZ2UuCisgICAgICAgIChXZWJDb3JlOjpuZXh0TWF0Y2hpbmdFbGVtZW50KTog
RGl0dG8uIENoYW5nZWQgYXJndW1lbnQgdHlwZSB0byBhIHJlZmVyZW5jZQorICAgICAgICBzaW5j
ZSBpdCBjYW4gbmV2ZXIgYmUgbnVsbC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9u
OjppdGVtKTogQ2hhbmdlZCByZXR1cm4gdHlwZSB0byBFbGVtZW50LgorICAgICAgICAoV2ViQ29y
ZTo6bmFtZVNob3VsZEJlVmlzaWJsZUluRG9jdW1lbnRBbGwpOiBBZGRlZCBhbiBvdmVybG9hZCB0
aGF0IHRha2VzIGFuCisgICAgICAgIEVsZW1lbnQuIFRoaXMgc3RyZWFtbGluZXMgdGhlIGNvZGUg
YmVsb3cgdGhhdCBjYWxscyBpdCBzbyBpdCBmaXRzIG9uIG9uZSBsaW5lLgorICAgICAgICAoV2Vi
Q29yZTo6Zmlyc3RNYXRjaGluZ0NoaWxkRWxlbWVudCk6IE1hcmtlZCB0aGlzIGZ1bmN0aW9uIHN0
YXRpYyBzbyBpdCB3aWxsIGdldAorICAgICAgICBpbnRlcm5hbCBsaW5rYWdlLgorICAgICAgICAo
V2ViQ29yZTo6bmV4dE1hdGNoaW5nU2libGluZ0VsZW1lbnQpOiBEaXR0by4gQ2hhbmdlZCBhcmd1
bWVudCB0eXBlIHRvIGEgcmVmZXJlbmNlCisgICAgICAgIHNpbmNlIGl0IGNhbiBuZXZlciBiZSBu
dWxsLgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OnVzZXNDdXN0b21Gb3J3YXJk
T25seVRyYXZlcnNhbCk6IE1vdmVkIGhlcmUgZnJvbSB0aGUKKyAgICAgICAgaGVhZGVyIHNpbmNl
LCBhbHRob3VnaCBpdCdzIG1hcmtlZCBpbmxpbmUsIGl0J3Mgb25seSB1c2VkIGluc2lkZSB0aGlz
IGZpbGUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6dHJhdmVyc2VGb3J3YXJk
KTogUmVzdHJ1Y3R1cmVkIHRoZSBjb2RlIGEgbGl0dGxlIGJpdAorICAgICAgICB0byBtYWtlIHRo
ZSBmdW5jdGlvbiBzbWFsbGVyIGFuZCBwb3NzaWJseSBlYXNpZXIgdG8gcmVhZC4gVGhpcyBkb2Vz
IGFkZCBvbmUKKyAgICAgICAgcmVkdW5kYW50IG51bGwgY2hlY2ssIGJ1dCBpdCBzZWVtcyBPSyB0
byBkbyB0aGF0LgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OmNvbGxlY3Rpb25U
cmF2ZXJzZUJhY2t3YXJkKTogVHdlYWtlZCBmb3JhbXR0aW5nIGEgYml0LgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTENvbGxlY3Rpb246Om5hbWVkSXRlbSk6IENoYW5nZWQgcmV0dXJuIHR5cGUgdG8g
RWxlbWVudC4gVGlnaHRlbmVkCisgICAgICAgIHRoZSBjb2RlIHRoYXQgY2FsbHMgbmFtZVNob3Vs
ZEJlVmlzaWJsZUluRG9jdW1lbnRBbGwgc28gaXQgZml0cyBiZXR0ZXIgb24gb25lIGxpbmUuCisg
ICAgICAgIENoYW5nZWQgY29kZSB0aGF0IGhhbmRsZXMgbV9zaG91bGRPbmx5SW5jbHVkZURpcmVj
dENoaWxkcmVuIHRvIHVzZSBhIG5lc3RlZCBpZgorICAgICAgICBpbnN0ZWFkIG9mIGFuICYmIHNp
bmNlIGl0IG1ha2VzIHRoZSBjb2RlIGEgbGl0dGxlIGVhc2llciB0byByZWFkLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OnVwZGF0ZU5hbWVkRWxlbWVudENhY2hlKTogVHdlYWtl
ZCBjb2RlIGEgbGl0dGxlIGJpdCwKKyAgICAgICAgdXNpbmcgc2hvcnRlciB2YXJpYWJsZSBuYW1l
cywgYW5kIHVzaW5nIHJlZmVyZW5jZXMgaW5zdGVhZCBvZiBwb2ludGVycy4gQWxzbyByZW1vdmVk
CisgICAgICAgIHRoZSBjYWxsIHRvIGRpZFBvcHVsYXRlLCBzaW5jZSBzZXROYW1lZEl0ZW1DYWNo
ZSBub3cgdGFrZXMgY2FyZSBvZiB0aGF0LgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rp
b246Om5hbWVkSXRlbXMpOiBDaGFuZ2VkIHRvIHJldHVybiBhIFZlY3RvciBpbnN0ZWFkIG9mCisg
ICAgICAgIGFwcGVuZGluZyB0byBhbiBleGlzdGluZyBvbmUuIEFsc28gdXNlIHJlc2VydmVJbml0
aWFsQ2FwYWNpdHkgYW5kIHVuY2hlY2tlZEFwcGVuZAorICAgICAgICBmb3IgYmV0dGVyIHBlcmZv
cm1hbmNlLiBBZGRlZCBhIEZJWE1FLCBiZWNhdXNlIHRoZXJlIHNlZW1zIHRvIGJlIHNvbWV0aGlu
ZyB3cm9uZworICAgICAgICBoZXJlIGFib3V0IHRoaXMgYmVpbmcgbm9uLXZpcnR1YWwuIE1hZGUg
b3RoZXIgc21hbGwgdHdlYWtzIHRvIHN0cmVhbWxpbmUgdGhlIGNvZGUuCisgICAgICAgIChXZWJD
b3JlOjpIVE1MQ29sbGVjdGlvbjo6Y3VzdG9tRWxlbWVudEFmdGVyKTogTW92ZWQgdGhpcyBoZXJl
IGZyb20gdGhlIGhlYWRlci4KKyAgICAgICAgVGhlcmUgaXMgbm8gcmVhc29uIHRvIG5lZWQgdG8g
aW5saW5lIHRoaXMuCisKKyAgICAgICAgKiBodG1sL0hUTUxDb2xsZWN0aW9uLmg6IFJlbW92ZWQg
dW5uZWVkZWQgaW5jbHVkZXMuIE1vdmVkIGZ1bmN0aW9uIGJvZGllcyBvdXQKKyAgICAgICAgb2Yg
dGhlIGNsYXNzIGRlZmluaXRpb25zIHNvIHRoZSBjbGFzcyBkZWZpbml0aW9ucyBhcmUgZWFzaWVy
IHRvIHJlYWQuIE1hZGUgc29tZQorICAgICAgICBmdW5jdGlvbnMgdGhhdCB3ZXJlIGZvcm1lcmx5
IHB1YmxpYyBvciBwcm90ZWN0ZWQgYmUgcHJpdmF0ZSBpbnN0ZWFkLiBBZGRlZCBhIGNhbGwKKyAg
ICAgICAgdG8gZGlkUG9wdWxhdGUgdG8gc2V0TmFtZWRJdGVtQ2FjaGUgc28gdGhlIGNhbGxlcnMg
ZG9uJ3QgaGF2ZSB0byBkbyBpdC4KKworICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sc0Nv
bGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rp
b246Om5hbWVkSXRlbSk6IENoYW5nZWQgcmV0dXJuIHZhbHVlIHRvIEVsZW1lbnQuCisgICAgICAg
IFR3ZWFrZWQgY29kaW5nIHN0eWxlIGEgbGl0dGxlIGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uOjp1cGRhdGVOYW1lZEVsZW1lbnRDYWNoZSk6IFJlYXJy
YW5nZWQgdG8KKyAgICAgICAgc2ltcGxpZnkgYSBiaXQuIERvbid0IGJ1aWxkIHRoZSBmb3VuZElu
cHV0RWxlbWVudHMgc2V0IHdoZW4gdGhlIG93bmVyIGlzIG5vdCBhCisgICAgICAgIGZvcm0gZWxl
bWVudCwgc2luY2Ugd2UgZG9uJ3QgdXNlIHRoZSBzZXQgaW4gdGhhdCBjYXNlLiBVc2Ugc2hvcnRl
ciB2YXJpYWJsZSBuYW1lcywKKyAgICAgICAgYW5kIG1vZGVybiBmb3IgbG9vcHMuIEFsc28gcmVt
b3ZlZCB0aGUgY2FsbCB0byBkaWRQb3B1bGF0ZSwgc2luY2Ugc2V0TmFtZWRJdGVtQ2FjaGUKKyAg
ICAgICAgbm93IHRha2VzIGNhcmUgb2YgdGhhdC4KKworICAgICAgICAqIGh0bWwvSFRNTEZvcm1D
b250cm9sc0NvbGxlY3Rpb24uaDogUmVtb3ZlZCBzb21lIHVuZWVkZWQgZm9yd2FyZCBkZWNsYXJh
dGlvbnMuCisgICAgICAgIFVwZGF0ZWQgcmV0dXJuIHR5cGUgZm9yIG5hbWVkSXRlbSwgYW5kIGFs
c28gbWFkZSB0aGUgb3ZlcnJpZGUgcHJpdmF0ZS4KKworICAgICAgICAqIGh0bWwvSFRNTEZvcm1F
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6bmFtZWRFbGVt
ZW50cyk6IENoYW5nZWQgdG8gcmV0dXJuIGEgVmVjdG9yIGFuZCB1cGRhdGVkCisgICAgICAgIGZ1
bmN0aW9uIG5hbWUgYWNjb3JkaW5nbHkuCisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQu
aDogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5oOiBSZW1vdmVk
IGEgc3RyYXkgYmxhbmsgbGluZS4KKworICAgICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Om5hbWVkSXRlbSk6IENo
YW5nZWQgcmV0dXJuIHZhbHVlIHRvIEVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2Vs
ZWN0RWxlbWVudDo6aXRlbSk6IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1l
bnQuaDogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25hcE9m
ZnNldHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kQ2hpbGRTbmFwT2Zmc2V0cyk6IFJl
d3JvdGUgbG9vcCBhcyBhIGZvciBsb29wIHJhdGhlciB0aGFuIGEgd2hpbGUKKyAgICAgICAgbG9v
cC4gUmVtb3ZlZCB1bndhbnRlZCB1c2Ugb2YgY2hpbGRyZW4oKS0+Y29sbGVjdGlvbkJlZ2luKCkg
dG8gZ2V0IHRoZSBmaXJzdCBlbGVtZW50CisgICAgICAgIGNoaWxkIG9mIGFuIEhUTUxFbGVtZW50
LiBUaGlzIGZ1bmN0aW9uIHVzZXMgYSBtaXggb2YgRE9NIGFuZCByZW5kZXJpbmcgZnVuY3Rpb25z
IHRoYXQKKyAgICAgICAgaXMgcHJvYmFibHkgaW5jb3JyZWN0LCBidXQgSSBkaWQgbm90IHRhY2ts
ZSBmaXhpbmcgdGhhdCBhdCB0aGlzIHRpbWUuCisKIDIwMTQtMTEtMDkgIENocmlzIER1bWV6ICA8
Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBtb3JlIGNvcnJlY3Qgd2F5IHRvIGNv
bXBhcmUgZmxvYXRpbmcgcG9pbnQgbnVtYmVycyBhbmQgdXNlIGl0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cAppbmRleCA4NWY4NTZhYTA1NmNhZDU1NjE2NmY0NWIwNjRmOGRmMjU3Yjk5NGZjLi5mMWY5MDY3
NWQ2ZmMzMDNjYzExNTY5NDZmMGRmNDc3OWE5NDYwNmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAK
QEAgLTk0OSwxMCArOTQ5LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphZGRS
YWRpb0J1dHRvbkdyb3VwTWVtYmVycyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW4KICAgICBIVE1MSW5w
dXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKTsKICAg
ICAvLyBpZiB0aGVyZSdzIGEgZm9ybSwgdGhlbiB0aGlzIGlzIGVhc3kKICAgICBpZiAoaW5wdXQu
Zm9ybSgpKSB7Ci0gICAgICAgIFZlY3RvcjxSZWY8RWxlbWVudD4+IGZvcm1FbGVtZW50czsKLSAg
ICAgICAgaW5wdXQuZm9ybSgpLT5nZXROYW1lZEVsZW1lbnRzKGlucHV0Lm5hbWUoKSwgZm9ybUVs
ZW1lbnRzKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoYXV0byYgYXNzb2NpYXRlRWxlbWVudCA6
IGZvcm1FbGVtZW50cykgeworICAgICAgICBmb3IgKGF1dG8mIGFzc29jaWF0ZUVsZW1lbnQgOiBp
bnB1dC5mb3JtKCktPm5hbWVkRWxlbWVudHMoaW5wdXQubmFtZSgpKSkgewogICAgICAgICAgICAg
aWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9IGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JD
cmVhdGUoJmFzc29jaWF0ZUVsZW1lbnQuZ2V0KCkpKQogICAgICAgICAgICAgICAgIGxpbmtlZFVJ
RWxlbWVudHMuYXBwZW5kKG9iamVjdCk7ICAgICAgICAKICAgICAgICAgfSAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVjdGlvbkN1c3RvbS5j
cHAKaW5kZXggMjE5MzVlMWFmOWNlZTllYjc0ZTliNGJhZTdmZjM0NjYzMjk5MDJhYS4uODEyMjUw
N2I0ZmJjNjhlMTIzZjY3MmZhMzEwODhhNTJjYTcwZTk2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVjdGlvbkN1c3RvbS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVjdGlvbkN1c3RvbS5jcHAKQEAg
LTI3LDI0ICsyNywxOCBAQAogI2luY2x1ZGUgIkpTSFRNTEFsbENvbGxlY3Rpb24uaCIKIAogI2lu
Y2x1ZGUgIkhUTUxBbGxDb2xsZWN0aW9uLmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAj
aW5jbHVkZSAiSlNOb2RlLmgiCiAjaW5jbHVkZSAiSlNOb2RlTGlzdC5oIgotI2luY2x1ZGUgIk5v
ZGUuaCIKICNpbmNsdWRlICJTdGF0aWNOb2RlTGlzdC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSWRl
bnRpZmllcklubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWUuaD4KLSNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAK
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIEpT
VmFsdWUgZ2V0TmFtZWRJdGVtcyhFeGVjU3RhdGUqIGV4ZWMsIEpTSFRNTEFsbENvbGxlY3Rpb24q
IGNvbGxlY3Rpb24sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitzdGF0aWMgSlNWYWx1ZSBu
YW1lZEl0ZW1zKEV4ZWNTdGF0ZSogZXhlYywgSlNIVE1MQWxsQ29sbGVjdGlvbiogY29sbGVjdGlv
biwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAgICBWZWN0b3I8UmVmPEVsZW1lbnQ+
PiBuYW1lZEl0ZW1zOwotICAgIGNvbGxlY3Rpb24tPmltcGwoKS5uYW1lZEl0ZW1zKHByb3BlcnR5
TmFtZVRvQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSksIG5hbWVkSXRlbXMpOworICAgIFZlY3Rv
cjxSZWY8RWxlbWVudD4+IG5hbWVkSXRlbXMgPSBjb2xsZWN0aW9uLT5pbXBsKCkubmFtZWRJdGVt
cyhwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsKIAogICAgIGlmIChu
YW1lZEl0ZW1zLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC03
NiwxNSArNzAsMTUgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEhU
TUxBbGxDb2xsZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodG9KUyhleGVjLCBqc0NvbGxlY3Rpb24tPmdsb2JhbE9iamVjdCgpLCBjb2xs
ZWN0aW9uLml0ZW0oaW5kZXgpKSk7CiAKICAgICAgICAgLy8gU3VwcG9ydCBmb3IgZG9jdW1lbnQu
aW1hZ2VzKCc8bmFtZT4nKSBldGMuCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZ2V0
TmFtZWRJdGVtcyhleGVjLCBqc0NvbGxlY3Rpb24sIElkZW50aWZpZXIoZXhlYywgc3RyaW5nKSkp
OworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG5hbWVkSXRlbXMoZXhlYywganNDb2xs
ZWN0aW9uLCBJZGVudGlmaWVyKGV4ZWMsIHN0cmluZykpKTsKICAgICB9CiAKICAgICAvLyBUaGUg
c2Vjb25kIGFyZywgaWYgc2V0LCBpcyB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gd2Ugd2FudAogICAg
IFN0cmluZyBzdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYyk7CiAgICAgdW5zaWduZWQgaW5kZXggPSB0b1VJbnQzMkZyb21TdHJpbmdJbXBsKGV4ZWMt
PmFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKGV4ZWMpLmltcGwoKSk7CiAgICAgaWYgKGluZGV4ICE9
IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgewotICAgICAgICBpZiAoTm9kZSogbm9kZSA9IGNv
bGxlY3Rpb24ubmFtZWRJdGVtV2l0aEluZGV4KHN0cmluZywgaW5kZXgpKQotICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTKGV4ZWMsIGpzQ29sbGVjdGlvbi0+Z2xvYmFsT2Jq
ZWN0KCksIG5vZGUpKTsKKyAgICAgICAgaWYgKGF1dG8qIGl0ZW0gPSBjb2xsZWN0aW9uLm5hbWVk
SXRlbVdpdGhJbmRleChzdHJpbmcsIGluZGV4KSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodG9KUyhleGVjLCBqc0NvbGxlY3Rpb24tPmdsb2JhbE9iamVjdCgpLCBpdGVtKSk7
CiAgICAgfQogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAg
LTEwNCw3ICs5OCw3IEBAIGJvb2wgSlNIVE1MQWxsQ29sbGVjdGlvbjo6Y2FuR2V0SXRlbXNGb3JO
YW1lKEV4ZWNTdGF0ZSosIEhUTUxBbGxDb2xsZWN0aW9uKiBjb2xsCiBFbmNvZGVkSlNWYWx1ZSBK
U0hUTUxBbGxDb2xsZWN0aW9uOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IHNsb3RCYXNlLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsK
ICAgICBKU0hUTUxBbGxDb2xsZWN0aW9uKiB0aGlzT2JqID0ganNDYXN0PEpTSFRNTEFsbENvbGxl
Y3Rpb24qPihzbG90QmFzZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShnZXROYW1lZEl0
ZW1zKGV4ZWMsIHRoaXNPYmosIHByb3BlcnR5TmFtZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUobmFtZWRJdGVtcyhleGVjLCB0aGlzT2JqLCBwcm9wZXJ0eU5hbWUpKTsKIH0KIAogSlNW
YWx1ZSBKU0hUTUxBbGxDb2xsZWN0aW9uOjppdGVtKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTExMiwx
MiArMTA2LDEyIEBAIEpTVmFsdWUgSlNIVE1MQWxsQ29sbGVjdGlvbjo6aXRlbShFeGVjU3RhdGUq
IGV4ZWMpCiAgICAgdWludDMyX3QgaW5kZXggPSB0b1VJbnQzMkZyb21TdHJpbmdJbXBsKGV4ZWMt
PmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKS5pbXBsKCkpOwogICAgIGlm
IChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCiAgICAgICAgIHJldHVybiB0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbXBsKCkuaXRlbShpbmRleCkpOwotICAgIHJldHVybiBn
ZXROYW1lZEl0ZW1zKGV4ZWMsIHRoaXMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQo
MCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CisgICAgcmV0dXJuIG5hbWVkSXRlbXMo
ZXhlYywgdGhpcywgSWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYykpKTsKIH0KIAogSlNWYWx1ZSBKU0hUTUxBbGxDb2xsZWN0aW9uOjpu
YW1lZEl0ZW0oRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTVmFsdWUgdmFsdWUgPSBnZXROYW1l
ZEl0ZW1zKGV4ZWMsIHRoaXMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IG5hbWVkSXRl
bXMoZXhlYywgdGhpcywgSWRlbnRpZmllcihleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYykpKTsKICAgICByZXR1cm4gdmFsdWUuaXNVbmRlZmluZWQoKSA/
IGpzTnVsbCgpIDogdmFsdWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb25DdXN0b20uY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbkN1c3RvbS5jcHAK
aW5kZXggNDFlYTYzZDcxNTA5MzFhMjc0ZGUwM2Y1NTIyN2RkZmM2MWE2MTc2Yy4uMjg2N2Q2MGYy
YTAyNjI3ZjA3Y2QwMGEzNDBlNTljNzgxMTI0ZDk4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbkN1c3RvbS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlv
bkN1c3RvbS5jcHAKQEAgLTE4LDMxICsxOCwyMiBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5oIgotCi0KLSNpbmNsdWRl
ICJIVE1MQWxsQ29sbGVjdGlvbi5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1
ZGUgIkpTSFRNTENvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJKU0hUTUxGb3JtQ29udHJvbHNDb2xs
ZWN0aW9uLmgiCisKKyNpbmNsdWRlICJIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5oIgogI2lu
Y2x1ZGUgIkpTTm9kZS5oIgotI2luY2x1ZGUgIkpTTm9kZUxpc3QuaCIKICNpbmNsdWRlICJKU1Jh
ZGlvTm9kZUxpc3QuaCIKLSNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiUmFkaW9Ob2RlTGlz
dC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSWRlbnRpZmllcklubGluZXMuaD4KLSNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIEpTVmFsdWUg
Z2V0TmFtZWRJdGVtcyhFeGVjU3RhdGUqIGV4ZWMsIEpTSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rp
b24qIGNvbGxlY3Rpb24sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitzdGF0aWMgSlNWYWx1
ZSBuYW1lZEl0ZW1zKEV4ZWNTdGF0ZSogZXhlYywgSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlv
biogY29sbGVjdGlvbiwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAgICBWZWN0b3I8
UmVmPEVsZW1lbnQ+PiBuYW1lZEl0ZW1zOwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9
IHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSk7Ci0gICAgY29sbGVjdGlv
bi0+aW1wbCgpLm5hbWVkSXRlbXMobmFtZSwgbmFtZWRJdGVtcyk7CisgICAgVmVjdG9yPFJlZjxF
bGVtZW50Pj4gbmFtZWRJdGVtcyA9IGNvbGxlY3Rpb24tPmltcGwoKS5uYW1lZEl0ZW1zKG5hbWUp
OwogCiAgICAgaWYgKG5hbWVkSXRlbXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKQEAgLTYxLDEyICs1MiwxMiBAQCBib29sIEpTSFRNTEZvcm1Db250cm9sc0NvbGxl
Y3Rpb246OmNhbkdldEl0ZW1zRm9yTmFtZShFeGVjU3RhdGUqLCBIVE1MRm9ybUNvbnRybwogRW5j
b2RlZEpTVmFsdWUgSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjo6bmFtZUdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZSwgRW5jb2RlZEpTVmFsdWUsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbiog
dGhpc09iaiA9IGpzQ2FzdDxKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uKj4oc2xvdEJhc2Up
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZ2V0TmFtZWRJdGVtcyhleGVjLCB0aGlzT2Jq
LCBwcm9wZXJ0eU5hbWUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG5hbWVkSXRlbXMo
ZXhlYywgdGhpc09iaiwgcHJvcGVydHlOYW1lKSk7CiB9CiAKIEpTVmFsdWUgSlNIVE1MRm9ybUNv
bnRyb2xzQ29sbGVjdGlvbjo6bmFtZWRJdGVtKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU1Zh
bHVlIHZhbHVlID0gZ2V0TmFtZWRJdGVtcyhleGVjLCB0aGlzLCBJZGVudGlmaWVyKGV4ZWMsIGV4
ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOworICAgIEpTVmFs
dWUgdmFsdWUgPSBuYW1lZEl0ZW1zKGV4ZWMsIHRoaXMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+
YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiAgICAgcmV0dXJuIHZh
bHVlLmlzVW5kZWZpbmVkKCkgPyBqc051bGwoKSA6IHZhbHVlOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHAKaW5k
ZXggOTVjYmM3MGUyMzRiNzY1NThlZWYxMzM5YWJmNmJkZmYxNzRmYTM1Mi4uM2QzOWJkMTUzYWU4
YjMzZTAxOTY5ZWI4OTBhY2VhYmQ0YTA0ZjNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNIVE1MRm9ybUVsZW1lbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZvcm1FbGVtZW50Q3VzdG9tLmNwcApAQCAtNDcsOCArNDcs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0hUTUxGb3JtRWxlbWVudDo6bmFtZUdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBzbG90QmFzZQogICAgIEpTSFRNTEZvcm1FbGVtZW50KiBqc0Zv
cm0gPSBqc0Nhc3Q8SlNIVE1MRm9ybUVsZW1lbnQqPihzbG90QmFzZSk7CiAgICAgSFRNTEZvcm1F
bGVtZW50JiBmb3JtID0ganNGb3JtLT5pbXBsKCk7CiAKLSAgICBWZWN0b3I8UmVmPEVsZW1lbnQ+
PiBuYW1lZEl0ZW1zOwotICAgIGZvcm0uZ2V0TmFtZWRFbGVtZW50cyhwcm9wZXJ0eU5hbWVUb0F0
b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBuYW1lZEl0ZW1zKTsKKyAgICBWZWN0b3I8UmVmPEVs
ZW1lbnQ+PiBuYW1lZEl0ZW1zID0gZm9ybS5uYW1lZEVsZW1lbnRzKHByb3BlcnR5TmFtZVRvQXRv
bWljU3RyaW5nKHByb3BlcnR5TmFtZSkpOwogICAgIAogICAgIGlmIChuYW1lZEl0ZW1zLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFsbENvbGxlY3Rpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5jcHAKaW5kZXggZjJhZmJhYjNlYThl
Yzg4MjYxMmNjNGNhNzI5ZTMyZTFhNzMwYmIyYS4uODJkNjcwZDVhYmFjY2VkNzZmYjBkNTI1NWQx
ZjdmZWUyOThhZTY1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQWxsQ29s
bGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5j
cHAKQEAgLTM1LDE2ICszNSwxMiBAQCBQYXNzUmVmPEhUTUxBbGxDb2xsZWN0aW9uPiBIVE1MQWxs
Q29sbGVjdGlvbjo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCwgQ29sbGVjdAogICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEhUTUxBbGxDb2xsZWN0aW9uKGRvY3VtZW50LCB0eXBlKSk7CiB9CiAK
LUhUTUxBbGxDb2xsZWN0aW9uOjpIVE1MQWxsQ29sbGVjdGlvbihEb2N1bWVudCYgZG9jdW1lbnQs
IENvbGxlY3Rpb25UeXBlIHR5cGUpCitpbmxpbmUgSFRNTEFsbENvbGxlY3Rpb246OkhUTUxBbGxD
b2xsZWN0aW9uKERvY3VtZW50JiBkb2N1bWVudCwgQ29sbGVjdGlvblR5cGUgdHlwZSkKICAgICA6
IEhUTUxDb2xsZWN0aW9uKGRvY3VtZW50LCB0eXBlKQogewogfQogCi1IVE1MQWxsQ29sbGVjdGlv
bjo6fkhUTUxBbGxDb2xsZWN0aW9uKCkKLXsKLX0KLQotTm9kZSogSFRNTEFsbENvbGxlY3Rpb246
Om5hbWVkSXRlbVdpdGhJbmRleChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIHVuc2lnbmVkIGlu
ZGV4KSBjb25zdAorRWxlbWVudCogSFRNTEFsbENvbGxlY3Rpb246Om5hbWVkSXRlbVdpdGhJbmRl
eChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIHVuc2lnbmVkIGluZGV4KSBjb25zdAogewogICAg
IHVwZGF0ZU5hbWVkRWxlbWVudENhY2hlKCk7CiAgICAgY29uc3QgQ29sbGVjdGlvbk5hbWVkRWxl
bWVudENhY2hlJiBjYWNoZSA9IG5hbWVkSXRlbUNhY2hlcygpOwpAQCAtNjAsNyArNTYsNyBAQCBO
b2RlKiBIVE1MQWxsQ29sbGVjdGlvbjo6bmFtZWRJdGVtV2l0aEluZGV4KGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSwgdW5zaWduZWQgaQogICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzLT5hdChp
bmRleCk7CiAgICAgfQogCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEFsbENvbGxlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFsbENvbGxlY3Rp
b24uaAppbmRleCAyNGJiZjNkMDYyNzQwOTQ5ZDczNDA4YTU5MGJiMTkwYmI1NTY2NWFkLi5iZGY0
ZmYxMjcwZjcwZThmYjEyYWZiZGQzMjhlODVmNTk2MmUyODc2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxBbGxDb2xsZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQWxsQ29sbGVjdGlvbi5oCkBAIC0zMyw5ICszMyw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIEhUTUxBbGxDb2xsZWN0aW9uIGZpbmFsIDogcHVibGljIEhUTUxDb2xsZWN0aW9u
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZjxIVE1MQWxsQ29sbGVjdGlvbj4gY3JlYXRl
KERvY3VtZW50JiwgQ29sbGVjdGlvblR5cGUpOwotICAgIHZpcnR1YWwgfkhUTUxBbGxDb2xsZWN0
aW9uKCk7CiAKLSAgICBOb2RlKiBuYW1lZEl0ZW1XaXRoSW5kZXgoY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lLCB1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisgICAgRWxlbWVudCogbmFtZWRJdGVtV2l0
aEluZGV4KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgdW5zaWduZWQgaW5kZXgpIGNvbnN0Owog
CiBwcml2YXRlOgogICAgIEhUTUxBbGxDb2xsZWN0aW9uKERvY3VtZW50JiwgQ29sbGVjdGlvblR5
cGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAppbmRleCBhMjkwMDU0ODc3
NjI1MDJmMTYyMjgwYjIzYTJmN2QxZjc2MTQ2MWM3Li5lZDZkMDQ2NTg5NzEwY2JhMzExMDY4ZDhh
ODc2ZGQ2M2Y4MDI5YzQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xs
ZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcApA
QCAtNjUsNyArNjUsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRPbmx5SW5jbHVkZURpcmVjdENoaWxk
cmVuKENvbGxlY3Rpb25UeXBlIHR5cGUpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMg
SFRNTENvbGxlY3Rpb246OlJvb3RUeXBlIHJvb3RUeXBlRnJvbUNvbGxlY3Rpb25UeXBlKENvbGxl
Y3Rpb25UeXBlIHR5cGUpCitpbmxpbmUgYXV0byBIVE1MQ29sbGVjdGlvbjo6cm9vdFR5cGVGcm9t
Q29sbGVjdGlvblR5cGUoQ29sbGVjdGlvblR5cGUgdHlwZSkgLT4gUm9vdFR5cGUKIHsKICAgICBz
d2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIERvY0ltYWdlczoKQEAgLTE2OSw3ICsxNjksNyBAQCBD
b250YWluZXJOb2RlJiBIVE1MQ29sbGVjdGlvbjo6cm9vdE5vZGUoKSBjb25zdAogICAgIHJldHVy
biBvd25lck5vZGUoKTsKIH0KIAotaW5saW5lIGJvb2wgaXNNYXRjaGluZ0hUTUxFbGVtZW50KGNv
bnN0IEhUTUxDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLCBIVE1MRWxlbWVudCYgZWxlbWVudCkKK3N0
YXRpYyBpbmxpbmUgYm9vbCBpc01hdGNoaW5nSFRNTEVsZW1lbnQoY29uc3QgSFRNTENvbGxlY3Rp
b24mIGNvbGxlY3Rpb24sIEhUTUxFbGVtZW50JiBlbGVtZW50KQogewogICAgIHN3aXRjaCAoY29s
bGVjdGlvbi50eXBlKCkpIHsKICAgICBjYXNlIERvY0ltYWdlczoKQEAgLTIxOCw3ICsyMTgsNyBA
QCBpbmxpbmUgYm9vbCBpc01hdGNoaW5nSFRNTEVsZW1lbnQoY29uc3QgSFRNTENvbGxlY3Rpb24m
IGNvbGxlY3Rpb24sIEhUTUxFbGVtZW50JgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotaW5saW5l
IGJvb2wgaXNNYXRjaGluZ0VsZW1lbnQoY29uc3QgSFRNTENvbGxlY3Rpb24mIGNvbGxlY3Rpb24s
IEVsZW1lbnQmIGVsZW1lbnQpCitzdGF0aWMgaW5saW5lIGJvb2wgaXNNYXRjaGluZ0VsZW1lbnQo
Y29uc3QgSFRNTENvbGxlY3Rpb24mIGNvbGxlY3Rpb24sIEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAg
ICAgLy8gQ29sbGVjdGlvbiB0eXBlcyB0aGF0IGRlYWwgd2l0aCBhbnkgdHlwZSBvZiBFbGVtZW50
cywgbm90IGp1c3QgSFRNTEVsZW1lbnRzLgogICAgIHN3aXRjaCAoY29sbGVjdGlvbi50eXBlKCkp
IHsKQEAgLTIzMywyMyArMjMzLDIzIEBAIGlubGluZSBib29sIGlzTWF0Y2hpbmdFbGVtZW50KGNv
bnN0IEhUTUxDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLCBFbGVtZW50JiBlbGVtZW50CiAgICAgfQog
fQogCi1zdGF0aWMgRWxlbWVudCogcHJldmlvdXNFbGVtZW50KENvbnRhaW5lck5vZGUmIGJhc2Us
IEVsZW1lbnQqIHByZXZpb3VzLCBib29sIG9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRyZW4pCitzdGF0
aWMgaW5saW5lIEVsZW1lbnQqIHByZXZpb3VzRWxlbWVudChDb250YWluZXJOb2RlJiBiYXNlLCBF
bGVtZW50JiBlbGVtZW50LCBib29sIG9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRyZW4pCiB7Ci0gICAg
cmV0dXJuIG9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRyZW4gPyBFbGVtZW50VHJhdmVyc2FsOjpwcmV2
aW91c1NpYmxpbmcocHJldmlvdXMpIDogRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXMocHJldmlv
dXMsICZiYXNlKTsKKyAgICByZXR1cm4gb25seUluY2x1ZGVEaXJlY3RDaGlsZHJlbiA/IEVsZW1l
bnRUcmF2ZXJzYWw6OnByZXZpb3VzU2libGluZygmZWxlbWVudCkgOiBFbGVtZW50VHJhdmVyc2Fs
OjpwcmV2aW91cygmZWxlbWVudCwgJmJhc2UpOwogfQogCi1BTFdBWVNfSU5MSU5FIEVsZW1lbnQq
IEhUTUxDb2xsZWN0aW9uOjppdGVyYXRlRm9yUHJldmlvdXNFbGVtZW50KEVsZW1lbnQqIGN1cnJl
bnQpIGNvbnN0CitBTFdBWVNfSU5MSU5FIEVsZW1lbnQqIEhUTUxDb2xsZWN0aW9uOjppdGVyYXRl
Rm9yUHJldmlvdXNFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgYm9vbCBv
bmx5SW5jbHVkZURpcmVjdENoaWxkcmVuID0gbV9zaG91bGRPbmx5SW5jbHVkZURpcmVjdENoaWxk
cmVuOwogICAgIENvbnRhaW5lck5vZGUmIHJvb3ROb2RlID0gdGhpcy0+cm9vdE5vZGUoKTsKLSAg
ICBmb3IgKDsgY3VycmVudDsgY3VycmVudCA9IHByZXZpb3VzRWxlbWVudChyb290Tm9kZSwgY3Vy
cmVudCwgb25seUluY2x1ZGVEaXJlY3RDaGlsZHJlbikpIHsKLSAgICAgICAgaWYgKGlzTWF0Y2hp
bmdFbGVtZW50KCp0aGlzLCAqY3VycmVudCkpCi0gICAgICAgICAgICByZXR1cm4gY3VycmVudDsK
KyAgICBmb3IgKDsgZWxlbWVudDsgZWxlbWVudCA9IHByZXZpb3VzRWxlbWVudChyb290Tm9kZSwg
KmVsZW1lbnQsIG9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRyZW4pKSB7CisgICAgICAgIGlmIChpc01h
dGNoaW5nRWxlbWVudCgqdGhpcywgKmVsZW1lbnQpKQorICAgICAgICAgICAgcmV0dXJuIGVsZW1l
bnQ7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1pbmxpbmUgRWxlbWVudCogZmly
c3RNYXRjaGluZ0VsZW1lbnQoY29uc3QgSFRNTENvbGxlY3Rpb24mIGNvbGxlY3Rpb24sIENvbnRh
aW5lck5vZGUmIHJvb3QpCitzdGF0aWMgaW5saW5lIEVsZW1lbnQqIGZpcnN0TWF0Y2hpbmdFbGVt
ZW50KGNvbnN0IEhUTUxDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLCBDb250YWluZXJOb2RlJiByb290
KQogewogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpmaXJzdFdpdGhp
bigmcm9vdCk7CiAgICAgd2hpbGUgKGVsZW1lbnQgJiYgIWlzTWF0Y2hpbmdFbGVtZW50KGNvbGxl
Y3Rpb24sICplbGVtZW50KSkKQEAgLTI1NywxMiArMjU3LDEzIEBAIGlubGluZSBFbGVtZW50KiBm
aXJzdE1hdGNoaW5nRWxlbWVudChjb25zdCBIVE1MQ29sbGVjdGlvbiYgY29sbGVjdGlvbiwgQ29u
dGFpbmVyCiAgICAgcmV0dXJuIGVsZW1lbnQ7CiB9CiAKLWlubGluZSBFbGVtZW50KiBuZXh0TWF0
Y2hpbmdFbGVtZW50KGNvbnN0IEhUTUxDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLCBFbGVtZW50KiBj
dXJyZW50LCBDb250YWluZXJOb2RlJiByb290KQorc3RhdGljIGlubGluZSBFbGVtZW50KiBuZXh0
TWF0Y2hpbmdFbGVtZW50KGNvbnN0IEhUTUxDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLCBFbGVtZW50
JiBlbGVtZW50LCBDb250YWluZXJOb2RlJiByb290KQogeworICAgIEVsZW1lbnQqIG5leHQgPSAm
ZWxlbWVudDsKICAgICBkbyB7Ci0gICAgICAgIGN1cnJlbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpu
ZXh0KGN1cnJlbnQsICZyb290KTsKLSAgICB9IHdoaWxlIChjdXJyZW50ICYmICFpc01hdGNoaW5n
RWxlbWVudChjb2xsZWN0aW9uLCAqY3VycmVudCkpOwotICAgIHJldHVybiBjdXJyZW50OworICAg
ICAgICBuZXh0ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dChuZXh0LCAmcm9vdCk7CisgICAgfSB3
aGlsZSAobmV4dCAmJiAhaXNNYXRjaGluZ0VsZW1lbnQoY29sbGVjdGlvbiwgKm5leHQpKTsKKyAg
ICByZXR1cm4gbmV4dDsKIH0KIAogdW5zaWduZWQgSFRNTENvbGxlY3Rpb246Omxlbmd0aCgpIGNv
bnN0CkBAIC0yNzAsNyArMjcxLDcgQEAgdW5zaWduZWQgSFRNTENvbGxlY3Rpb246Omxlbmd0aCgp
IGNvbnN0CiAgICAgcmV0dXJuIG1faW5kZXhDYWNoZS5ub2RlQ291bnQoKnRoaXMpOwogfQogCi1O
b2RlKiBIVE1MQ29sbGVjdGlvbjo6aXRlbSh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CitFbGVtZW50
KiBIVE1MQ29sbGVjdGlvbjo6aXRlbSh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1faW5kZXhDYWNoZS5ub2RlQXQoKnRoaXMsIG9mZnNldCk7CiB9CkBAIC0yODgsNyArMjg5
LDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuYW1lU2hvdWxkQmVWaXNpYmxlSW5Eb2N1bWVudEFs
bChIVE1MRWxlbWVudCYgZWxlbWVudCkKICAgICAgICAgfHwgZWxlbWVudC5oYXNUYWdOYW1lKHNl
bGVjdFRhZyk7CiB9CiAKLWlubGluZSBFbGVtZW50KiBmaXJzdE1hdGNoaW5nQ2hpbGRFbGVtZW50
KGNvbnN0IEhUTUxDb2xsZWN0aW9uJiBub2RlTGlzdCwgQ29udGFpbmVyTm9kZSYgcm9vdCkKK3N0
YXRpYyBpbmxpbmUgYm9vbCBuYW1lU2hvdWxkQmVWaXNpYmxlSW5Eb2N1bWVudEFsbChFbGVtZW50
JiBlbGVtZW50KQoreworICAgIHJldHVybiBpczxIVE1MRWxlbWVudD4oZWxlbWVudCkgJiYgbmFt
ZVNob3VsZEJlVmlzaWJsZUluRG9jdW1lbnRBbGwoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KGVsZW1l
bnQpKTsKK30KKworc3RhdGljIGlubGluZSBFbGVtZW50KiBmaXJzdE1hdGNoaW5nQ2hpbGRFbGVt
ZW50KGNvbnN0IEhUTUxDb2xsZWN0aW9uJiBub2RlTGlzdCwgQ29udGFpbmVyTm9kZSYgcm9vdCkK
IHsKICAgICBFbGVtZW50KiBlbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4o
JnJvb3QpOwogICAgIHdoaWxlIChlbGVtZW50ICYmICFpc01hdGNoaW5nRWxlbWVudChub2RlTGlz
dCwgKmVsZW1lbnQpKQpAQCAtMjk2LDEyICszMDIsMTggQEAgaW5saW5lIEVsZW1lbnQqIGZpcnN0
TWF0Y2hpbmdDaGlsZEVsZW1lbnQoY29uc3QgSFRNTENvbGxlY3Rpb24mIG5vZGVMaXN0LCBDb250
YWkKICAgICByZXR1cm4gZWxlbWVudDsKIH0KIAotaW5saW5lIEVsZW1lbnQqIG5leHRNYXRjaGlu
Z1NpYmxpbmdFbGVtZW50KGNvbnN0IEhUTUxDb2xsZWN0aW9uJiBub2RlTGlzdCwgRWxlbWVudCog
Y3VycmVudCkKK3N0YXRpYyBpbmxpbmUgRWxlbWVudCogbmV4dE1hdGNoaW5nU2libGluZ0VsZW1l
bnQoY29uc3QgSFRNTENvbGxlY3Rpb24mIG5vZGVMaXN0LCBFbGVtZW50JiBlbGVtZW50KQogewor
ICAgIEVsZW1lbnQqIG5leHQgPSAmZWxlbWVudDsKICAgICBkbyB7Ci0gICAgICAgIGN1cnJlbnQg
PSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2libGluZyhjdXJyZW50KTsKLSAgICB9IHdoaWxlIChj
dXJyZW50ICYmICFpc01hdGNoaW5nRWxlbWVudChub2RlTGlzdCwgKmN1cnJlbnQpKTsKLSAgICBy
ZXR1cm4gY3VycmVudDsKKyAgICAgICAgbmV4dCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTaWJs
aW5nKG5leHQpOworICAgIH0gd2hpbGUgKG5leHQgJiYgIWlzTWF0Y2hpbmdFbGVtZW50KG5vZGVM
aXN0LCAqbmV4dCkpOworICAgIHJldHVybiBuZXh0OworfQorCitpbmxpbmUgYm9vbCBIVE1MQ29s
bGVjdGlvbjo6dXNlc0N1c3RvbUZvcndhcmRPbmx5VHJhdmVyc2FsKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV91c2VzQ3VzdG9tRm9yd2FyZE9ubHlUcmF2ZXJzYWw7CiB9CiAKIGlubGluZSBFbGVt
ZW50KiBIVE1MQ29sbGVjdGlvbjo6Zmlyc3RFbGVtZW50KENvbnRhaW5lck5vZGUmIHJvb3QpIGNv
bnN0CkBAIC0zMTcsMjUgKzMyOSwxNCBAQCBpbmxpbmUgRWxlbWVudCogSFRNTENvbGxlY3Rpb246
OnRyYXZlcnNlRm9yd2FyZChFbGVtZW50JiBjdXJyZW50LCB1bnNpZ25lZCBjb3VudAogewogICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSAmY3VycmVudDsKICAgICBpZiAodXNlc0N1c3RvbUZvcndhcmRP
bmx5VHJhdmVyc2FsKCkpIHsKLSAgICAgICAgZm9yICh0cmF2ZXJzZWRDb3VudCA9IDA7IHRyYXZl
cnNlZENvdW50IDwgY291bnQ7ICsrdHJhdmVyc2VkQ291bnQpIHsKKyAgICAgICAgZm9yICh0cmF2
ZXJzZWRDb3VudCA9IDA7IGVsZW1lbnQgJiYgdHJhdmVyc2VkQ291bnQgPCBjb3VudDsgKyt0cmF2
ZXJzZWRDb3VudCkKICAgICAgICAgICAgIGVsZW1lbnQgPSBjdXN0b21FbGVtZW50QWZ0ZXIoZWxl
bWVudCk7Ci0gICAgICAgICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAgfQotICAg
IGlmIChtX3Nob3VsZE9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRyZW4pIHsKLSAgICAgICAgZm9yICh0
cmF2ZXJzZWRDb3VudCA9IDA7IHRyYXZlcnNlZENvdW50IDwgY291bnQ7ICsrdHJhdmVyc2VkQ291
bnQpIHsKLSAgICAgICAgICAgIGVsZW1lbnQgPSBuZXh0TWF0Y2hpbmdTaWJsaW5nRWxlbWVudCgq
dGhpcywgZWxlbWVudCk7Ci0gICAgICAgICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0g
ICAgfQotICAgIGZvciAodHJhdmVyc2VkQ291bnQgPSAwOyB0cmF2ZXJzZWRDb3VudCA8IGNvdW50
OyArK3RyYXZlcnNlZENvdW50KSB7Ci0gICAgICAgIGVsZW1lbnQgPSBuZXh0TWF0Y2hpbmdFbGVt
ZW50KCp0aGlzLCBlbGVtZW50LCByb290KTsKLSAgICAgICAgaWYgKCFlbGVtZW50KQotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfSBlbHNlIGlmIChtX3Nob3VsZE9ubHlJbmNsdWRl
RGlyZWN0Q2hpbGRyZW4pIHsKKyAgICAgICAgZm9yICh0cmF2ZXJzZWRDb3VudCA9IDA7IGVsZW1l
bnQgJiYgdHJhdmVyc2VkQ291bnQgPCBjb3VudDsgKyt0cmF2ZXJzZWRDb3VudCkKKyAgICAgICAg
ICAgIGVsZW1lbnQgPSBuZXh0TWF0Y2hpbmdTaWJsaW5nRWxlbWVudCgqdGhpcywgKmVsZW1lbnQp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAodHJhdmVyc2VkQ291bnQgPSAwOyBlbGVtZW50
ICYmIHRyYXZlcnNlZENvdW50IDwgY291bnQ7ICsrdHJhdmVyc2VkQ291bnQpCisgICAgICAgICAg
ICBlbGVtZW50ID0gbmV4dE1hdGNoaW5nRWxlbWVudCgqdGhpcywgKmVsZW1lbnQsIHJvb3QpOwog
ICAgIH0KICAgICByZXR1cm4gZWxlbWVudDsKIH0KQEAgLTM2MSwxMyArMzYyLDEzIEBAIHZvaWQg
SFRNTENvbGxlY3Rpb246OmNvbGxlY3Rpb25UcmF2ZXJzZUZvcndhcmQoRWxlbWVudComIGN1cnJl
bnQsIHVuc2lnbmVkIGNvdW50CiB2b2lkIEhUTUxDb2xsZWN0aW9uOjpjb2xsZWN0aW9uVHJhdmVy
c2VCYWNrd2FyZChFbGVtZW50KiYgY3VycmVudCwgdW5zaWduZWQgY291bnQpIGNvbnN0CiB7CiAg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIG9wdGltaXplZCBzaW1pbGFybHkgdG8gdGhlIGZv
cndhcmQgY2FzZS4KLSAgICBhdXRvJiByb290ID0gcm9vdE5vZGUoKTsKICAgICBpZiAobV9zaG91
bGRPbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuKSB7Ci0gICAgICAgIGZvciAoOyBjb3VudCAmJiBj
dXJyZW50IDsgLS1jb3VudCkKKyAgICAgICAgZm9yICg7IGNvdW50ICYmIGN1cnJlbnQ7IC0tY291
bnQpCiAgICAgICAgICAgICBjdXJyZW50ID0gaXRlcmF0ZUZvclByZXZpb3VzRWxlbWVudChFbGVt
ZW50VHJhdmVyc2FsOjpwcmV2aW91c1NpYmxpbmcoY3VycmVudCkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQotICAgIGZvciAoOyBjb3VudCAmJiBjdXJyZW50IDsgLS1jb3VudCkKKyAgICBhdXRv
JiByb290ID0gcm9vdE5vZGUoKTsKKyAgICBmb3IgKDsgY291bnQgJiYgY3VycmVudDsgLS1jb3Vu
dCkKICAgICAgICAgY3VycmVudCA9IGl0ZXJhdGVGb3JQcmV2aW91c0VsZW1lbnQoRWxlbWVudFRy
YXZlcnNhbDo6cHJldmlvdXMoY3VycmVudCwgJnJvb3QpKTsKIH0KIApAQCAtMzg4LDcgKzM4OSw3
IEBAIHZvaWQgSFRNTENvbGxlY3Rpb246OmludmFsaWRhdGVOYW1lZEVsZW1lbnRDYWNoZShEb2N1
bWVudCYgZG9jdW1lbnQpIGNvbnN0CiAgICAgbV9uYW1lZEVsZW1lbnRDYWNoZSA9IG51bGxwdHI7
CiB9CiAKLU5vZGUqIEhUTUxDb2xsZWN0aW9uOjpuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lKSBjb25zdAorRWxlbWVudCogSFRNTENvbGxlY3Rpb246Om5hbWVkSXRlbShjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0CiB7CiAgICAgLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0
LmNvbS93b3Jrc2hvcC9hdXRob3IvZGh0bWwvcmVmZXJlbmNlL21ldGhvZHMvbmFtZWRpdGVtLmFz
cAogICAgIC8vIFRoaXMgbWV0aG9kIGZpcnN0IHNlYXJjaGVzIGZvciBhbiBvYmplY3Qgd2l0aCBh
IG1hdGNoaW5nIGlkCkBAIC00MDEsMjMgKzQwMiwyNSBAQCBOb2RlKiBIVE1MQ29sbGVjdGlvbjo6
bmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKIAogICAgIENvbnRhaW5l
ck5vZGUmIHJvb3QgPSByb290Tm9kZSgpOwogICAgIGlmICghdXNlc0N1c3RvbUZvcndhcmRPbmx5
VHJhdmVyc2FsKCkgJiYgcm9vdC5pc0luVHJlZVNjb3BlKCkpIHsKLSAgICAgICAgVHJlZVNjb3Bl
JiB0cmVlU2NvcGUgPSByb290LnRyZWVTY29wZSgpOwogICAgICAgICBFbGVtZW50KiBjYW5kaWRh
dGUgPSBudWxscHRyOworCisgICAgICAgIFRyZWVTY29wZSYgdHJlZVNjb3BlID0gcm9vdC50cmVl
U2NvcGUoKTsKICAgICAgICAgaWYgKHRyZWVTY29wZS5oYXNFbGVtZW50V2l0aElkKCpuYW1lLmlt
cGwoKSkpIHsKICAgICAgICAgICAgIGlmICghdHJlZVNjb3BlLmNvbnRhaW5zTXVsdGlwbGVFbGVt
ZW50c1dpdGhJZChuYW1lKSkKICAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPSB0cmVlU2NvcGUu
Z2V0RWxlbWVudEJ5SWQobmFtZSk7CiAgICAgICAgIH0gZWxzZSBpZiAodHJlZVNjb3BlLmhhc0Vs
ZW1lbnRXaXRoTmFtZSgqbmFtZS5pbXBsKCkpKSB7CiAgICAgICAgICAgICBpZiAoIXRyZWVTY29w
ZS5jb250YWluc011bHRpcGxlRWxlbWVudHNXaXRoTmFtZShuYW1lKSkgewogICAgICAgICAgICAg
ICAgIGNhbmRpZGF0ZSA9IHRyZWVTY29wZS5nZXRFbGVtZW50QnlOYW1lKG5hbWUpOwotICAgICAg
ICAgICAgICAgIGlmIChjYW5kaWRhdGUgJiYgdHlwZSgpID09IERvY0FsbCAmJiAoIWlzPEhUTUxF
bGVtZW50PigqY2FuZGlkYXRlKSB8fCAhbmFtZVNob3VsZEJlVmlzaWJsZUluRG9jdW1lbnRBbGwo
ZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCpjYW5kaWRhdGUpKSkpCisgICAgICAgICAgICAgICAgaWYg
KGNhbmRpZGF0ZSAmJiB0eXBlKCkgPT0gRG9jQWxsICYmICFuYW1lU2hvdWxkQmVWaXNpYmxlSW5E
b2N1bWVudEFsbCgqY2FuZGlkYXRlKSkKICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlID0g
bnVsbHB0cjsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgICAgICBpZiAoY2FuZGlkYXRlICYmIGlzTWF0Y2hpbmdFbGVtZW50
KCp0aGlzLCAqY2FuZGlkYXRlKQotICAgICAgICAgICAgJiYgKG1fc2hvdWxkT25seUluY2x1ZGVE
aXJlY3RDaGlsZHJlbiA/IGNhbmRpZGF0ZS0+cGFyZW50Tm9kZSgpID09ICZyb290IDogY2FuZGlk
YXRlLT5pc0Rlc2NlbmRhbnRPZigmcm9vdCkpKQotICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0
ZTsKKyAgICAgICAgaWYgKGNhbmRpZGF0ZSAmJiBpc01hdGNoaW5nRWxlbWVudCgqdGhpcywgKmNh
bmRpZGF0ZSkpIHsKKyAgICAgICAgICAgIGlmIChtX3Nob3VsZE9ubHlJbmNsdWRlRGlyZWN0Q2hp
bGRyZW4gPyBjYW5kaWRhdGUtPnBhcmVudE5vZGUoKSA9PSAmcm9vdCA6IGNhbmRpZGF0ZS0+aXNE
ZXNjZW5kYW50T2YoJnJvb3QpKQorICAgICAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGU7Cisg
ICAgICAgIH0KICAgICB9CiAKICAgICAvLyBUaGUgcGF0aG9sb2dpY2FsIGNhc2UuIFdlIG5lZWQg
dG8gd2FsayB0aGUgZW50aXJlIHN1YnRyZWUuCkBAIC00NDIsMjUgKzQ0NSwyMiBAQCB2b2lkIEhU
TUxDb2xsZWN0aW9uOjp1cGRhdGVOYW1lZEVsZW1lbnRDYWNoZSgpIGNvbnN0CiAgICAgaWYgKGhh
c05hbWVkRWxlbWVudENhY2hlKCkpCiAgICAgICAgIHJldHVybjsKIAotCiAgICAgYXV0byBjYWNo
ZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q29sbGVjdGlvbk5hbWVkRWxlbWVudENhY2hlPigpOwogCiAg
ICAgdW5zaWduZWQgc2l6ZSA9IG1faW5kZXhDYWNoZS5ub2RlQ291bnQoKnRoaXMpOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgRWxlbWVudCogZWxl
bWVudCA9IG1faW5kZXhDYWNoZS5ub2RlQXQoKnRoaXMsIGkpOwotICAgICAgICBBU1NFUlQoZWxl
bWVudCk7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRBdHRyVmFsID0gZWxlbWVudC0+
Z2V0SWRBdHRyaWJ1dGUoKTsKLSAgICAgICAgaWYgKCFpZEF0dHJWYWwuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgY2FjaGUtPmFwcGVuZElkQ2FjaGUoaWRBdHRyVmFsLCBlbGVtZW50KTsKLSAgICAg
ICAgaWYgKCFpczxIVE1MRWxlbWVudD4oKmVsZW1lbnQpKQorICAgICAgICBFbGVtZW50JiBlbGVt
ZW50ID0gKm1faW5kZXhDYWNoZS5ub2RlQXQoKnRoaXMsIGkpOworICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIGlkID0gZWxlbWVudC5nZXRJZEF0dHJpYnV0ZSgpOworICAgICAgICBpZiAoIWlk
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNhY2hlLT5hcHBlbmRUb0lkQ2FjaGUoaWQsIGVsZW1l
bnQpOworICAgICAgICBpZiAoIWlzPEhUTUxFbGVtZW50PihlbGVtZW50KSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVBdHRyVmFsID0gZWxl
bWVudC0+Z2V0TmFtZUF0dHJpYnV0ZSgpOwotICAgICAgICBpZiAoIW5hbWVBdHRyVmFsLmlzRW1w
dHkoKSAmJiBpZEF0dHJWYWwgIT0gbmFtZUF0dHJWYWwgJiYgKHR5cGUoKSAhPSBEb2NBbGwgfHwg
bmFtZVNob3VsZEJlVmlzaWJsZUluRG9jdW1lbnRBbGwoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCpl
bGVtZW50KSkpKQotICAgICAgICAgICAgY2FjaGUtPmFwcGVuZE5hbWVDYWNoZShuYW1lQXR0clZh
bCwgZWxlbWVudCk7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IGVsZW1lbnQu
Z2V0TmFtZUF0dHJpYnV0ZSgpOworICAgICAgICBpZiAoIW5hbWUuaXNFbXB0eSgpICYmIGlkICE9
IG5hbWUgJiYgKHR5cGUoKSAhPSBEb2NBbGwgfHwgbmFtZVNob3VsZEJlVmlzaWJsZUluRG9jdW1l
bnRBbGwoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KGVsZW1lbnQpKSkpCisgICAgICAgICAgICBjYWNo
ZS0+YXBwZW5kVG9OYW1lQ2FjaGUobmFtZSwgZWxlbWVudCk7CiAgICAgfQogCi0gICAgY2FjaGUt
PmRpZFBvcHVsYXRlKCk7Ci0gICAgc2V0TmFtZUl0ZW1DYWNoZShXVEY6Om1vdmUoY2FjaGUpKTsK
KyAgICBzZXROYW1lZEl0ZW1DYWNoZShXVEY6Om1vdmUoY2FjaGUpKTsKIH0KIAogYm9vbCBIVE1M
Q29sbGVjdGlvbjo6aGFzTmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QK
QEAgLTQ2OSwyMyArNDY5LDM0IEBAIGJvb2wgSFRNTENvbGxlY3Rpb246Omhhc05hbWVkSXRlbShj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0CiAgICAgcmV0dXJuIG5hbWVkSXRlbShuYW1l
KTsKIH0KIAotdm9pZCBIVE1MQ29sbGVjdGlvbjo6bmFtZWRJdGVtcyhjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWUsIFZlY3RvcjxSZWY8RWxlbWVudD4+JiByZXN1bHQpIGNvbnN0CitWZWN0b3I8UmVm
PEVsZW1lbnQ+PiBIVE1MQ29sbGVjdGlvbjo6bmFtZWRJdGVtcyhjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHJlc3VsdC5pc0VtcHR5KCkpOworICAgIC8vIEZJ
WE1FOiBUaGlzIG5vbi12aXJ0dWFsIGZ1bmN0aW9uIGNhbid0IHBvc3NpYmx5IGJlIGRvaW5nIHRo
ZSBjb3JyZWN0IHRoaW5nIGZvcgorICAgIC8vIGFueSBkZXJpdmVkIGNsYXNzIHRoYXQgb3ZlcnJp
ZGVzIHRoZSB2aXJ0dWFsIG5hbWVkSXRlbSBmdW5jdGlvbi4KKworICAgIFZlY3RvcjxSZWY8RWxl
bWVudD4+IGVsZW1lbnRzOworCiAgICAgaWYgKG5hbWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiBlbGVtZW50czsKIAogICAgIHVwZGF0ZU5hbWVkRWxlbWVudENh
Y2hlKCk7CiAgICAgQVNTRVJUKG1fbmFtZWRFbGVtZW50Q2FjaGUpOwogCi0gICAgY29uc3QgVmVj
dG9yPEVsZW1lbnQqPiogaWRSZXN1bHRzID0gbV9uYW1lZEVsZW1lbnRDYWNoZS0+ZmluZEVsZW1l
bnRzV2l0aElkKG5hbWUpOwotICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4qIG5hbWVSZXN1bHRz
ID0gbV9uYW1lZEVsZW1lbnRDYWNoZS0+ZmluZEVsZW1lbnRzV2l0aE5hbWUobmFtZSk7CisgICAg
YXV0byogZWxlbWVudHNXaXRoSWQgPSBtX25hbWVkRWxlbWVudENhY2hlLT5maW5kRWxlbWVudHNX
aXRoSWQobmFtZSk7CisgICAgYXV0byogZWxlbWVudHNXaXRoTmFtZSA9IG1fbmFtZWRFbGVtZW50
Q2FjaGUtPmZpbmRFbGVtZW50c1dpdGhOYW1lKG5hbWUpOwogCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaWRSZXN1bHRzICYmIGkgPCBpZFJlc3VsdHMtPnNpemUoKTsgKytpKQotICAgICAgICBy
ZXN1bHQuYXBwZW5kKCppZFJlc3VsdHMtPmF0KGkpKTsKKyAgICBlbGVtZW50cy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KChlbGVtZW50c1dpdGhJZCA/IGVsZW1lbnRzV2l0aElkLT5zaXplKCkgOiAw
KSArIChlbGVtZW50c1dpdGhOYW1lID8gZWxlbWVudHNXaXRoTmFtZS0+c2l6ZSgpIDogMCkpOwog
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgbmFtZVJlc3VsdHMgJiYgaSA8IG5hbWVSZXN1bHRz
LT5zaXplKCk7ICsraSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgqbmFtZVJlc3VsdHMtPmF0KGkp
KTsKKyAgICBpZiAoZWxlbWVudHNXaXRoSWQpIHsKKyAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50
IDogKmVsZW1lbnRzV2l0aElkKQorICAgICAgICAgICAgZWxlbWVudHMudW5jaGVja2VkQXBwZW5k
KCplbGVtZW50KTsKKyAgICB9CisgICAgaWYgKGVsZW1lbnRzV2l0aE5hbWUpIHsKKyAgICAgICAg
Zm9yIChhdXRvJiBlbGVtZW50IDogKmVsZW1lbnRzV2l0aE5hbWUpCisgICAgICAgICAgICBlbGVt
ZW50cy51bmNoZWNrZWRBcHBlbmQoKmVsZW1lbnQpOworICAgIH0KKworICAgIHJldHVybiBlbGVt
ZW50czsKIH0KIAogUGFzc1JlZlB0cjxOb2RlTGlzdD4gSFRNTENvbGxlY3Rpb246OnRhZ3MoY29u
c3QgU3RyaW5nJiBuYW1lKQpAQCAtNDkzLDQgKzUwNCwxMCBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0
PiBIVE1MQ29sbGVjdGlvbjo6dGFncyhjb25zdCBTdHJpbmcmIG5hbWUpCiAgICAgcmV0dXJuIG93
bmVyTm9kZSgpLmdldEVsZW1lbnRzQnlUYWdOYW1lKG5hbWUpOwogfQogCitFbGVtZW50KiBIVE1M
Q29sbGVjdGlvbjo6Y3VzdG9tRWxlbWVudEFmdGVyKEVsZW1lbnQqKSBjb25zdAoreworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0
aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmgKaW5kZXggZjQwNDE3
ZWE4ZmQ1YjY5MzRhNzAwOTg0YWQzZTc4M2QzZThkOTI0My4uMDhmMTIzYmI5NjZiNjcyYTI4ZmQ5
ZWE1NWJkMTliMjBmNjQ2ZDdhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Q29sbGVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uaApA
QCAtMjQsMTcgKzI0LDEwIEBACiAjZGVmaW5lIEhUTUxDb2xsZWN0aW9uX2gKIAogI2luY2x1ZGUg
IkNvbGxlY3Rpb25JbmRleENhY2hlLmgiCi0jaW5jbHVkZSAiQ29sbGVjdGlvblR5cGUuaCIKLSNp
bmNsdWRlICJDb250YWluZXJOb2RlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJMaXZlTm9kZUxpc3QuaCIKICNpbmNsdWRlICJTY3Jp
cHRXcmFwcGFibGUuaCIKLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4K
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDIs
NDcgKzM1LDI2IEBAIGNsYXNzIEVsZW1lbnQ7CiAKIGNsYXNzIENvbGxlY3Rpb25OYW1lZEVsZW1l
bnRDYWNoZSB7CiBwdWJsaWM6Ci0jaWZuZGVmIEFTU0VSVF9ESVNBQkxFRAotICAgIENvbGxlY3Rp
b25OYW1lZEVsZW1lbnRDYWNoZSA6IG1fZGlkUG9wdWxhdGVDYWxsZWQoZmFsc2UpIHsgfQotI2Vu
ZGlmCi0KLSAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+KiBmaW5kRWxlbWVudHNXaXRoSWQoY29u
c3QgQXRvbWljU3RyaW5nJiBpZCkgY29uc3QgeyByZXR1cm4gZmluZChtX2lkVG9FbGVtZW50c01h
cCwgaWQpOyB9Ci0gICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiogZmluZEVsZW1lbnRzV2l0aE5h
bWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdCB7IHJldHVybiBmaW5kKG1fbmFtZVRv
RWxlbWVudHNNYXAsIG5hbWUpOyB9CisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiogZmluZEVs
ZW1lbnRzV2l0aElkKGNvbnN0IEF0b21pY1N0cmluZyYgaWQpIGNvbnN0OworICAgIGNvbnN0IFZl
Y3RvcjxFbGVtZW50Kj4qIGZpbmRFbGVtZW50c1dpdGhOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZSkgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGVuZElkQ2FjaGUoY29uc3QgQXRvbWljU3RyaW5n
JiBpZCwgRWxlbWVudCogZWxlbWVudCkgeyByZXR1cm4gYXBwZW5kKG1faWRUb0VsZW1lbnRzTWFw
LCBpZCwgZWxlbWVudCk7IH0KLSAgICB2b2lkIGFwcGVuZE5hbWVDYWNoZShjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUsIEVsZW1lbnQqIGVsZW1lbnQpICB7IHJldHVybiBhcHBlbmQobV9uYW1lVG9F
bGVtZW50c01hcCwgbmFtZSwgZWxlbWVudCk7IH0KKyAgICB2b2lkIGFwcGVuZFRvSWRDYWNoZShj
b25zdCBBdG9taWNTdHJpbmcmIGlkLCBFbGVtZW50Jik7CisgICAgdm9pZCBhcHBlbmRUb05hbWVD
YWNoZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIEVsZW1lbnQmKTsKKyAgICB2b2lkIGRpZFBv
cHVsYXRlKCk7CiAKLSAgICB2b2lkIGRpZFBvcHVsYXRlKCkKLSAgICB7Ci0jaWZuZGVmIEFTU0VS
VF9ESVNBQkxFRAotICAgICAgICBtX2RpZFBvcHVsYXRlQ2FsbGVkID0gdHJ1ZTsKLSNlbmRpZgot
ICAgICAgICBpZiAoc2l6ZV90IGNvc3QgPSBtZW1vcnlDb3N0KCkpCi0gICAgICAgICAgICByZXBv
cnRFeHRyYU1lbW9yeUNvc3RGb3JDb2xsZWN0aW9uSW5kZXhDYWNoZShjb3N0KTsKLSAgICB9Ci0g
ICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiAobV9pZFRvRWxlbWVudHNNYXAu
c2l6ZSgpICsgbV9uYW1lVG9FbGVtZW50c01hcC5zaXplKCkpICogc2l6ZW9mKEVsZW1lbnQqKTsg
fQorICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgdHlwZWRl
ZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBWZWN0b3I8RWxlbWVudCo+PiBTdHJpbmdUb0Vs
ZW1lbnRzTWFwOwogCi0gICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiogZmluZChjb25zdCBTdHJp
bmdUb0VsZW1lbnRzTWFwJiBtYXAsIGNvbnN0IEF0b21pY1N0cmluZyYga2V5KSBjb25zdAotICAg
IHsKLSNpZm5kZWYgQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIEFTU0VSVChtX2RpZFBvcHVsYXRl
Q2FsbGVkKTsKLSNlbmRpZgotICAgICAgICBhdXRvIGl0ID0gbWFwLmZpbmQoa2V5LmltcGwoKSk7
Ci0gICAgICAgIHJldHVybiBpdCAhPSBtYXAuZW5kKCkgPyAmaXQtPnZhbHVlIDogbnVsbHB0cjsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBlbmQoU3RyaW5nVG9FbGVtZW50c01hcCYgbWFw
LCBjb25zdCBBdG9taWNTdHJpbmcmIGtleSwgRWxlbWVudCogZWxlbWVudCkKLSAgICB7Ci0gICAg
ICAgIG1hcC5hZGQoa2V5LmltcGwoKSwgVmVjdG9yPEVsZW1lbnQqPigpKS5pdGVyYXRvci0+dmFs
dWUuYXBwZW5kKGVsZW1lbnQpOwotICAgIH0KLQotICAgIFN0cmluZ1RvRWxlbWVudHNNYXAgbV9p
ZFRvRWxlbWVudHNNYXA7Ci0gICAgU3RyaW5nVG9FbGVtZW50c01hcCBtX25hbWVUb0VsZW1lbnRz
TWFwOwotI2lmbmRlZiBBU1NFUlRfRElTQUJMRUQKLSAgICBib29sIG1fZGlkUG9wdWxhdGVDYWxs
ZWQ7CisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiogZmluZChjb25zdCBTdHJpbmdUb0VsZW1l
bnRzTWFwJiwgY29uc3QgQXRvbWljU3RyaW5nJiBrZXkpIGNvbnN0OworICAgIHN0YXRpYyB2b2lk
IGFwcGVuZChTdHJpbmdUb0VsZW1lbnRzTWFwJiwgY29uc3QgQXRvbWljU3RyaW5nJiBrZXksIEVs
ZW1lbnQmKTsKKworICAgIFN0cmluZ1RvRWxlbWVudHNNYXAgbV9pZE1hcDsKKyAgICBTdHJpbmdU
b0VsZW1lbnRzTWFwIG1fbmFtZU1hcDsKKworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBib29s
IG1fZGlkUG9wdWxhdGUgeyBmYWxzZSB9OwogI2VuZGlmCiB9OwogCkBAIC05Myw0MiArNjUsMzIg
QEAgcHVibGljOgogCiAgICAgLy8gRE9NIEFQSQogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0
OwotICAgIE5vZGUqIGl0ZW0odW5zaWduZWQgb2Zmc2V0KSBjb25zdDsKLSAgICB2aXJ0dWFsIE5v
ZGUqIG5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0OworICAgIEVsZW1l
bnQqIGl0ZW0odW5zaWduZWQgb2Zmc2V0KSBjb25zdDsKKyAgICB2aXJ0dWFsIEVsZW1lbnQqIG5h
bWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8
Tm9kZUxpc3Q+IHRhZ3MoY29uc3QgU3RyaW5nJik7CiAKICAgICAvLyBOb24tRE9NIEFQSQogICAg
IGJvb2wgaGFzTmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3Q7Ci0gICAg
dm9pZCBuYW1lZEl0ZW1zKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgVmVjdG9yPFJlZjxFbGVt
ZW50Pj4mKSBjb25zdDsKLSAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5kZXhDYWNoZS5tZW1vcnlDb3N0KCkgKyAobV9uYW1lZEVsZW1lbnRDYWNoZSA/IG1fbmFtZWRF
bGVtZW50Q2FjaGUtPm1lbW9yeUNvc3QoKSA6IDApOyB9Ci0KLSAgICBlbnVtIFJvb3RUeXBlIHsK
LSAgICAgICAgSXNSb290ZWRBdE5vZGUsCi0gICAgICAgIElzUm9vdGVkQXREb2N1bWVudAotICAg
IH07Ci0gICAgYm9vbCBpc1Jvb3RlZEF0RG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RU
eXBlID09IElzUm9vdGVkQXREb2N1bWVudDsgfQotICAgIE5vZGVMaXN0SW52YWxpZGF0aW9uVHlw
ZSBpbnZhbGlkYXRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Tm9kZUxpc3RJ
bnZhbGlkYXRpb25UeXBlPihtX2ludmFsaWRhdGlvblR5cGUpOyB9Ci0gICAgQ29sbGVjdGlvblR5
cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvbGxlY3Rpb25UeXBlPihtX2Nv
bGxlY3Rpb25UeXBlKTsgfQotICAgIENvbnRhaW5lck5vZGUmIG93bmVyTm9kZSgpIGNvbnN0IHsg
cmV0dXJuIGNvbnN0X2Nhc3Q8Q29udGFpbmVyTm9kZSY+KG1fb3duZXJOb2RlLmdldCgpKTsgfQot
ICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlKGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0dHJOYW1lKSBj
b25zdAotICAgIHsKLSAgICAgICAgaWYgKCFhdHRyTmFtZSB8fCBzaG91bGRJbnZhbGlkYXRlVHlw
ZU9uQXR0cmlidXRlQ2hhbmdlKGludmFsaWRhdGlvblR5cGUoKSwgKmF0dHJOYW1lKSkKLSAgICAg
ICAgICAgIGludmFsaWRhdGVDYWNoZShkb2N1bWVudCgpKTsKLSAgICAgICAgZWxzZSBpZiAoaGFz
TmFtZWRFbGVtZW50Q2FjaGUoKSAmJiAoKmF0dHJOYW1lID09IEhUTUxOYW1lczo6aWRBdHRyIHx8
ICphdHRyTmFtZSA9PSBIVE1MTmFtZXM6Om5hbWVBdHRyKSkKLSAgICAgICAgICAgIGludmFsaWRh
dGVOYW1lZEVsZW1lbnRDYWNoZShkb2N1bWVudCgpKTsKLSAgICB9CisgICAgVmVjdG9yPFJlZjxF
bGVtZW50Pj4gbmFtZWRJdGVtcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0OworICAg
IHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Q7CisKKyAgICBib29sIGlzUm9vdGVkQXREb2N1bWVu
dCgpIGNvbnN0OworICAgIE5vZGVMaXN0SW52YWxpZGF0aW9uVHlwZSBpbnZhbGlkYXRpb25UeXBl
KCkgY29uc3Q7CisgICAgQ29sbGVjdGlvblR5cGUgdHlwZSgpIGNvbnN0OworICAgIENvbnRhaW5l
ck5vZGUmIG93bmVyTm9kZSgpIGNvbnN0OworICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlKGNvbnN0
IFF1YWxpZmllZE5hbWUqIGF0dHJpYnV0ZU5hbWUpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBp
bnZhbGlkYXRlQ2FjaGUoRG9jdW1lbnQmKSBjb25zdDsKIAotICAgIC8vIEZvciBDb2xsZWN0aW9u
SW5kZXhDYWNoZQorICAgIC8vIEZvciBDb2xsZWN0aW9uSW5kZXhDYWNoZTsgZG8gbm90IHVzZSBl
bHNld2hlcmUuCiAgICAgRWxlbWVudCogY29sbGVjdGlvbkJlZ2luKCkgY29uc3Q7CiAgICAgRWxl
bWVudCogY29sbGVjdGlvbkxhc3QoKSBjb25zdDsKLSAgICBFbGVtZW50KiBjb2xsZWN0aW9uRW5k
KCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIEVsZW1lbnQqIGNvbGxlY3Rpb25FbmQo
KSBjb25zdDsKICAgICB2b2lkIGNvbGxlY3Rpb25UcmF2ZXJzZUZvcndhcmQoRWxlbWVudComLCB1
bnNpZ25lZCBjb3VudCwgdW5zaWduZWQmIHRyYXZlcnNlZENvdW50KSBjb25zdDsKICAgICB2b2lk
IGNvbGxlY3Rpb25UcmF2ZXJzZUJhY2t3YXJkKEVsZW1lbnQqJiwgdW5zaWduZWQgY291bnQpIGNv
bnN0OwotICAgIGJvb2wgY29sbGVjdGlvbkNhblRyYXZlcnNlQmFja3dhcmQoKSBjb25zdCB7IHJl
dHVybiAhbV91c2VzQ3VzdG9tRm9yd2FyZE9ubHlUcmF2ZXJzYWw7IH0KLSAgICB2b2lkIHdpbGxW
YWxpZGF0ZUluZGV4Q2FjaGUoKSBjb25zdCB7IGRvY3VtZW50KCkucmVnaXN0ZXJDb2xsZWN0aW9u
KGNvbnN0X2Nhc3Q8SFRNTENvbGxlY3Rpb24mPigqdGhpcykpOyB9CisgICAgYm9vbCBjb2xsZWN0
aW9uQ2FuVHJhdmVyc2VCYWNrd2FyZCgpIGNvbnN0OworICAgIHZvaWQgd2lsbFZhbGlkYXRlSW5k
ZXhDYWNoZSgpIGNvbnN0OwogCi0gICAgYm9vbCBoYXNOYW1lZEVsZW1lbnRDYWNoZSgpIGNvbnN0
IHsgcmV0dXJuICEhbV9uYW1lZEVsZW1lbnRDYWNoZTsgfQorICAgIGJvb2wgaGFzTmFtZWRFbGVt
ZW50Q2FjaGUoKSBjb25zdDsKIAogcHJvdGVjdGVkOgogICAgIGVudW0gRWxlbWVudFRyYXZlcnNh
bFR5cGUgeyBOb3JtYWxUcmF2ZXJzYWwsIEN1c3RvbUZvcndhcmRPbmx5VHJhdmVyc2FsIH07CkBA
IC0xMzYsMzQgKzk4LDI1IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVO
YW1lZEVsZW1lbnRDYWNoZSgpIGNvbnN0OwogCi0gICAgRG9jdW1lbnQmIGRvY3VtZW50KCkgY29u
c3QgeyByZXR1cm4gbV9vd25lck5vZGUtPmRvY3VtZW50KCk7IH0KLSAgICBDb250YWluZXJOb2Rl
JiByb290Tm9kZSgpIGNvbnN0OwotICAgIGJvb2wgdXNlc0N1c3RvbUZvcndhcmRPbmx5VHJhdmVy
c2FsKCkgY29uc3QgeyByZXR1cm4gbV91c2VzQ3VzdG9tRm9yd2FyZE9ubHlUcmF2ZXJzYWw7IH0K
LQotICAgIFJvb3RUeXBlIHJvb3RUeXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Um9v
dFR5cGU+KG1fcm9vdFR5cGUpOyB9Ci0KLSAgICB2b2lkIHNldE5hbWVJdGVtQ2FjaGUoc3RkOjp1
bmlxdWVfcHRyPENvbGxlY3Rpb25OYW1lZEVsZW1lbnRDYWNoZT4gY2FjaGUpIGNvbnN0Ci0gICAg
ewotICAgICAgICBBU1NFUlQoIW1fbmFtZWRFbGVtZW50Q2FjaGUpOwotICAgICAgICBtX25hbWVk
RWxlbWVudENhY2hlID0gV1RGOjptb3ZlKGNhY2hlKTsKLSAgICAgICAgZG9jdW1lbnQoKS5jb2xs
ZWN0aW9uQ2FjaGVkSWROYW1lTWFwKCp0aGlzKTsKLSAgICB9Ci0KLSAgICBjb25zdCBDb2xsZWN0
aW9uTmFtZWRFbGVtZW50Q2FjaGUmIG5hbWVkSXRlbUNhY2hlcygpIGNvbnN0Ci0gICAgewotICAg
ICAgICBBU1NFUlQoISFtX25hbWVkRWxlbWVudENhY2hlKTsKLSAgICAgICAgcmV0dXJuICptX25h
bWVkRWxlbWVudENhY2hlOwotICAgIH0KKyAgICB2b2lkIHNldE5hbWVkSXRlbUNhY2hlKHN0ZDo6
dW5pcXVlX3B0cjxDb2xsZWN0aW9uTmFtZWRFbGVtZW50Q2FjaGU+KSBjb25zdDsKKyAgICBjb25z
dCBDb2xsZWN0aW9uTmFtZWRFbGVtZW50Q2FjaGUmIG5hbWVkSXRlbUNhY2hlcygpIGNvbnN0Owog
CiBwcml2YXRlOgotICAgIEVsZW1lbnQqIGl0ZXJhdGVGb3JQcmV2aW91c0VsZW1lbnQoRWxlbWVu
dCogY3VycmVudCkgY29uc3Q7CisgICAgRG9jdW1lbnQmIGRvY3VtZW50KCkgY29uc3Q7CisgICAg
Q29udGFpbmVyTm9kZSYgcm9vdE5vZGUoKSBjb25zdDsKKyAgICBib29sIHVzZXNDdXN0b21Gb3J3
YXJkT25seVRyYXZlcnNhbCgpIGNvbnN0OworCisgICAgRWxlbWVudCogaXRlcmF0ZUZvclByZXZp
b3VzRWxlbWVudChFbGVtZW50KikgY29uc3Q7CiAgICAgRWxlbWVudCogZmlyc3RFbGVtZW50KENv
bnRhaW5lck5vZGUmIHJvb3QpIGNvbnN0OwotICAgIEVsZW1lbnQqIHRyYXZlcnNlRm9yd2FyZChF
bGVtZW50JiBjdXJyZW50LCB1bnNpZ25lZCBjb3VudCwgdW5zaWduZWQmIHRyYXZlcnNlZENvdW50
LCBDb250YWluZXJOb2RlJiByb290KSBjb25zdDsKKyAgICBFbGVtZW50KiB0cmF2ZXJzZUZvcndh
cmQoRWxlbWVudCYsIHVuc2lnbmVkIGNvdW50LCB1bnNpZ25lZCYgdHJhdmVyc2VkQ291bnQsIENv
bnRhaW5lck5vZGUmIHJvb3QpIGNvbnN0OworCisgICAgdmlydHVhbCBFbGVtZW50KiBjdXN0b21F
bGVtZW50QWZ0ZXIoRWxlbWVudCopIGNvbnN0OwogCi0gICAgdmlydHVhbCBFbGVtZW50KiBjdXN0
b21FbGVtZW50QWZ0ZXIoRWxlbWVudCopIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJl
dHVybiBudWxscHRyOyB9Ci0gICAgCiAgICAgdm9pZCBpbnZhbGlkYXRlTmFtZWRFbGVtZW50Q2Fj
aGUoRG9jdW1lbnQmKSBjb25zdDsKIAorICAgIGVudW0gUm9vdFR5cGUgeyBJc1Jvb3RlZEF0Tm9k
ZSwgSXNSb290ZWRBdERvY3VtZW50IH07CisgICAgc3RhdGljIFJvb3RUeXBlIHJvb3RUeXBlRnJv
bUNvbGxlY3Rpb25UeXBlKENvbGxlY3Rpb25UeXBlKTsKKwogICAgIFJlZjxDb250YWluZXJOb2Rl
PiBtX293bmVyTm9kZTsKIAogICAgIG11dGFibGUgQ29sbGVjdGlvbkluZGV4Q2FjaGU8SFRNTENv
bGxlY3Rpb24sIEVsZW1lbnQqPiBtX2luZGV4Q2FjaGU7CkBAIC0xNzYsNiArMTI5LDEyNSBAQCBw
cml2YXRlOgogICAgIGNvbnN0IHVuc2lnbmVkIG1fdXNlc0N1c3RvbUZvcndhcmRPbmx5VHJhdmVy
c2FsIDogMTsKIH07CiAKK2lubGluZSBjb25zdCBWZWN0b3I8RWxlbWVudCo+KiBDb2xsZWN0aW9u
TmFtZWRFbGVtZW50Q2FjaGU6OmZpbmRFbGVtZW50c1dpdGhJZChjb25zdCBBdG9taWNTdHJpbmcm
IGlkKSBjb25zdAoreworICAgIHJldHVybiBmaW5kKG1faWRNYXAsIGlkKTsKK30KKworaW5saW5l
IGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4qIENvbGxlY3Rpb25OYW1lZEVsZW1lbnRDYWNoZTo6Zmlu
ZEVsZW1lbnRzV2l0aE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdAoreworICAg
IHJldHVybiBmaW5kKG1fbmFtZU1hcCwgbmFtZSk7Cit9CisKK2lubGluZSB2b2lkIENvbGxlY3Rp
b25OYW1lZEVsZW1lbnRDYWNoZTo6YXBwZW5kVG9JZENhY2hlKGNvbnN0IEF0b21pY1N0cmluZyYg
aWQsIEVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgcmV0dXJuIGFwcGVuZChtX2lkTWFwLCBpZCwg
ZWxlbWVudCk7Cit9CisKK2lubGluZSB2b2lkIENvbGxlY3Rpb25OYW1lZEVsZW1lbnRDYWNoZTo6
YXBwZW5kVG9OYW1lQ2FjaGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBFbGVtZW50JiBlbGVt
ZW50KQoreworICAgIHJldHVybiBhcHBlbmQobV9uYW1lTWFwLCBuYW1lLCBlbGVtZW50KTsKK30K
KworaW5saW5lIHNpemVfdCBDb2xsZWN0aW9uTmFtZWRFbGVtZW50Q2FjaGU6Om1lbW9yeUNvc3Qo
KSBjb25zdAoreworICAgIHJldHVybiAobV9pZE1hcC5zaXplKCkgKyBtX25hbWVNYXAuc2l6ZSgp
KSAqIHNpemVvZihFbGVtZW50Kik7Cit9CisKK2lubGluZSB2b2lkIENvbGxlY3Rpb25OYW1lZEVs
ZW1lbnRDYWNoZTo6ZGlkUG9wdWxhdGUoKQoreworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBt
X2RpZFBvcHVsYXRlID0gdHJ1ZTsKKyNlbmRpZgorICAgIGlmIChzaXplX3QgY29zdCA9IG1lbW9y
eUNvc3QoKSkKKyAgICAgICAgcmVwb3J0RXh0cmFNZW1vcnlDb3N0Rm9yQ29sbGVjdGlvbkluZGV4
Q2FjaGUoY29zdCk7Cit9CisKK2lubGluZSBjb25zdCBWZWN0b3I8RWxlbWVudCo+KiBDb2xsZWN0
aW9uTmFtZWRFbGVtZW50Q2FjaGU6OmZpbmQoY29uc3QgU3RyaW5nVG9FbGVtZW50c01hcCYgbWFw
LCBjb25zdCBBdG9taWNTdHJpbmcmIGtleSkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9kaWRQb3B1
bGF0ZSk7CisgICAgYXV0byBpdCA9IG1hcC5maW5kKGtleS5pbXBsKCkpOworICAgIHJldHVybiBp
dCAhPSBtYXAuZW5kKCkgPyAmaXQtPnZhbHVlIDogbnVsbHB0cjsKK30KKworaW5saW5lIHZvaWQg
Q29sbGVjdGlvbk5hbWVkRWxlbWVudENhY2hlOjphcHBlbmQoU3RyaW5nVG9FbGVtZW50c01hcCYg
bWFwLCBjb25zdCBBdG9taWNTdHJpbmcmIGtleSwgRWxlbWVudCYgZWxlbWVudCkKK3sKKyAgICBt
YXAuYWRkKGtleS5pbXBsKCksIFZlY3RvcjxFbGVtZW50Kj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFw
cGVuZCgmZWxlbWVudCk7Cit9CisKK2lubGluZSBzaXplX3QgSFRNTENvbGxlY3Rpb246Om1lbW9y
eUNvc3QoKSBjb25zdAoreworICAgIHJldHVybiBtX2luZGV4Q2FjaGUubWVtb3J5Q29zdCgpICsg
KG1fbmFtZWRFbGVtZW50Q2FjaGUgPyBtX25hbWVkRWxlbWVudENhY2hlLT5tZW1vcnlDb3N0KCkg
OiAwKTsKK30KKworaW5saW5lIGJvb2wgSFRNTENvbGxlY3Rpb246OmlzUm9vdGVkQXREb2N1bWVu
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcm9vdFR5cGUgPT0gSXNSb290ZWRBdERvY3VtZW50
OworfQorCitpbmxpbmUgTm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlIEhUTUxDb2xsZWN0aW9uOjpp
bnZhbGlkYXRpb25UeXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Tm9kZUxp
c3RJbnZhbGlkYXRpb25UeXBlPihtX2ludmFsaWRhdGlvblR5cGUpOworfQorCitpbmxpbmUgQ29s
bGVjdGlvblR5cGUgSFRNTENvbGxlY3Rpb246OnR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxDb2xsZWN0aW9uVHlwZT4obV9jb2xsZWN0aW9uVHlwZSk7Cit9CisKK2lubGlu
ZSBDb250YWluZXJOb2RlJiBIVE1MQ29sbGVjdGlvbjo6b3duZXJOb2RlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gY29uc3RfY2FzdDxDb250YWluZXJOb2RlJj4obV9vd25lck5vZGUuZ2V0KCkpOwor
fQorCitpbmxpbmUgRG9jdW1lbnQmIEhUTUxDb2xsZWN0aW9uOjpkb2N1bWVudCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fb3duZXJOb2RlLT5kb2N1bWVudCgpOworfQorCitpbmxpbmUgdm9pZCBI
VE1MQ29sbGVjdGlvbjo6aW52YWxpZGF0ZUNhY2hlKGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0dHJp
YnV0ZU5hbWUpIGNvbnN0Cit7CisgICAgaWYgKCFhdHRyaWJ1dGVOYW1lIHx8IHNob3VsZEludmFs
aWRhdGVUeXBlT25BdHRyaWJ1dGVDaGFuZ2UoaW52YWxpZGF0aW9uVHlwZSgpLCAqYXR0cmlidXRl
TmFtZSkpCisgICAgICAgIGludmFsaWRhdGVDYWNoZShkb2N1bWVudCgpKTsKKyAgICBlbHNlIGlm
IChoYXNOYW1lZEVsZW1lbnRDYWNoZSgpICYmICgqYXR0cmlidXRlTmFtZSA9PSBIVE1MTmFtZXM6
OmlkQXR0ciB8fCAqYXR0cmlidXRlTmFtZSA9PSBIVE1MTmFtZXM6Om5hbWVBdHRyKSkKKyAgICAg
ICAgaW52YWxpZGF0ZU5hbWVkRWxlbWVudENhY2hlKGRvY3VtZW50KCkpOworfQorCitpbmxpbmUg
RWxlbWVudCogSFRNTENvbGxlY3Rpb246OmNvbGxlY3Rpb25FbmQoKSBjb25zdAoreworICAgIHJl
dHVybiBudWxscHRyOworfQorCitpbmxpbmUgYm9vbCBIVE1MQ29sbGVjdGlvbjo6Y29sbGVjdGlv
bkNhblRyYXZlcnNlQmFja3dhcmQoKSBjb25zdAoreworICAgIHJldHVybiAhbV91c2VzQ3VzdG9t
Rm9yd2FyZE9ubHlUcmF2ZXJzYWw7Cit9CisKK2lubGluZSB2b2lkIEhUTUxDb2xsZWN0aW9uOjp3
aWxsVmFsaWRhdGVJbmRleENhY2hlKCkgY29uc3QKK3sKKyAgICBkb2N1bWVudCgpLnJlZ2lzdGVy
Q29sbGVjdGlvbihjb25zdF9jYXN0PEhUTUxDb2xsZWN0aW9uJj4oKnRoaXMpKTsKK30KKworaW5s
aW5lIGJvb2wgSFRNTENvbGxlY3Rpb246Omhhc05hbWVkRWxlbWVudENhY2hlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gISFtX25hbWVkRWxlbWVudENhY2hlOworfQorCitpbmxpbmUgdm9pZCBIVE1M
Q29sbGVjdGlvbjo6c2V0TmFtZWRJdGVtQ2FjaGUoc3RkOjp1bmlxdWVfcHRyPENvbGxlY3Rpb25O
YW1lZEVsZW1lbnRDYWNoZT4gY2FjaGUpIGNvbnN0Cit7CisgICAgQVNTRVJUKGNhY2hlKTsKKyAg
ICBBU1NFUlQoIW1fbmFtZWRFbGVtZW50Q2FjaGUpOworICAgIGNhY2hlLT5kaWRQb3B1bGF0ZSgp
OworICAgIG1fbmFtZWRFbGVtZW50Q2FjaGUgPSBXVEY6Om1vdmUoY2FjaGUpOworICAgIGRvY3Vt
ZW50KCkuY29sbGVjdGlvbkNhY2hlZElkTmFtZU1hcCgqdGhpcyk7Cit9CisKK2lubGluZSBjb25z
dCBDb2xsZWN0aW9uTmFtZWRFbGVtZW50Q2FjaGUmIEhUTUxDb2xsZWN0aW9uOjpuYW1lZEl0ZW1D
YWNoZXMoKSBjb25zdAoreworICAgIEFTU0VSVCghIW1fbmFtZWRFbGVtZW50Q2FjaGUpOworICAg
IHJldHVybiAqbV9uYW1lZEVsZW1lbnRDYWNoZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfSFRNTENPTExFQ1RJT04oQ2xhc3NO
YW1lLCBUeXBlKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29u
dHJvbHNDb2xsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9s
c0NvbGxlY3Rpb24uY3BwCmluZGV4IDA1MjQ4YWNkMTc4NmIyODFmNmIxZTY0ODkxYjlmZWRmODcw
ZDY5MjIuLmQwZGZiZjk3MGM3MWQ1NWE2NmY3MGE5YjJkZTU4M2ZkZWNhOWFkYzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwCkBA
IC0xMjEsMTggKzEyMSwxNyBAQCBzdGF0aWMgSFRNTEVsZW1lbnQqIGZpcnN0TmFtZWRJdGVtKGNv
bnN0IFZlY3RvcjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQqPiYgZWxlbWVudAogICAgIHJldHVybiBu
dWxscHRyOwogfQogCi1Ob2RlKiBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjo6bmFtZWRJdGVt
KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKK0VsZW1lbnQqIEhUTUxGb3JtQ29udHJv
bHNDb2xsZWN0aW9uOjpuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdAog
ewogICAgIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vd29ya3Nob3AvYXV0aG9yL2RodG1s
L3JlZmVyZW5jZS9tZXRob2RzL25hbWVkaXRlbS5hc3AKICAgICAvLyBUaGlzIG1ldGhvZCBmaXJz
dCBzZWFyY2hlcyBmb3IgYW4gb2JqZWN0IHdpdGggYSBtYXRjaGluZyBpZAogICAgIC8vIGF0dHJp
YnV0ZS4gSWYgYSBtYXRjaCBpcyBub3QgZm91bmQsIHRoZSBtZXRob2QgdGhlbiBzZWFyY2hlcyBm
b3IgYW4KICAgICAvLyBvYmplY3Qgd2l0aCBhIG1hdGNoaW5nIG5hbWUgYXR0cmlidXRlLCBidXQg
b25seSBvbiB0aG9zZSBlbGVtZW50cwogICAgIC8vIHRoYXQgYXJlIGFsbG93ZWQgYSBuYW1lIGF0
dHJpYnV0ZS4KLSAgICBjb25zdCBWZWN0b3I8SFRNTEltYWdlRWxlbWVudCo+KiBpbWFnZXNFbGVt
ZW50cyA9IGlzPEhUTUxGaWVsZFNldEVsZW1lbnQ+KG93bmVyTm9kZSgpKSA/IG51bGxwdHIgOiAm
Zm9ybUltYWdlRWxlbWVudHMoKTsKLSAgICBpZiAoSFRNTEVsZW1lbnQqIGl0ZW0gPSBmaXJzdE5h
bWVkSXRlbShmb3JtQ29udHJvbEVsZW1lbnRzKCksIGltYWdlc0VsZW1lbnRzLCBpZEF0dHIsIG5h
bWUpKQorICAgIGF1dG8qIGltYWdlRWxlbWVudHMgPSBpczxIVE1MRmllbGRTZXRFbGVtZW50Pihv
d25lck5vZGUoKSkgPyBudWxscHRyIDogJmZvcm1JbWFnZUVsZW1lbnRzKCk7CisgICAgaWYgKEhU
TUxFbGVtZW50KiBpdGVtID0gZmlyc3ROYW1lZEl0ZW0oZm9ybUNvbnRyb2xFbGVtZW50cygpLCBp
bWFnZUVsZW1lbnRzLCBpZEF0dHIsIG5hbWUpKQogICAgICAgICByZXR1cm4gaXRlbTsKLQotICAg
IHJldHVybiBmaXJzdE5hbWVkSXRlbShmb3JtQ29udHJvbEVsZW1lbnRzKCksIGltYWdlc0VsZW1l
bnRzLCBuYW1lQXR0ciwgbmFtZSk7CisgICAgcmV0dXJuIGZpcnN0TmFtZWRJdGVtKGZvcm1Db250
cm9sRWxlbWVudHMoKSwgaW1hZ2VFbGVtZW50cywgbmFtZUF0dHIsIG5hbWUpOwogfQogCiB2b2lk
IEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uOjp1cGRhdGVOYW1lZEVsZW1lbnRDYWNoZSgpIGNv
bnN0CkBAIC0xNDEsNDEgKzE0MCw0MSBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9u
Ojp1cGRhdGVOYW1lZEVsZW1lbnRDYWNoZSgpIGNvbnN0CiAgICAgICAgIHJldHVybjsKIAogICAg
IGF1dG8gY2FjaGUgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbGxlY3Rpb25OYW1lZEVsZW1lbnRDYWNo
ZT4oKTsKKworICAgIGJvb2wgb3duZXJJc0Zvcm1FbGVtZW50ID0gaXM8SFRNTEZvcm1FbGVtZW50
Pihvd25lck5vZGUoKSk7CiAgICAgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4gZm91bmRJbnB1
dEVsZW1lbnRzOwotICAgIGNvbnN0IFZlY3RvcjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQqPiYgZWxl
bWVudHNBcnJheSA9IGZvcm1Db250cm9sRWxlbWVudHMoKTsKIAotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBlbGVtZW50c0FycmF5LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEZvcm1Bc3Nv
Y2lhdGVkRWxlbWVudCYgYXNzb2NpYXRlZEVsZW1lbnQgPSAqZWxlbWVudHNBcnJheVtpXTsKKyAg
ICBmb3IgKGF1dG8mIGVsZW1lbnRQdHIgOiBmb3JtQ29udHJvbEVsZW1lbnRzKCkpIHsKKyAgICAg
ICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50JiBhc3NvY2lhdGVkRWxlbWVudCA9ICplbGVtZW50UHRy
OwogICAgICAgICBpZiAoYXNzb2NpYXRlZEVsZW1lbnQuaXNFbnVtZXJhdGFibGUoKSkgewogICAg
ICAgICAgICAgSFRNTEVsZW1lbnQmIGVsZW1lbnQgPSBhc3NvY2lhdGVkRWxlbWVudC5hc0hUTUxF
bGVtZW50KCk7Ci0gICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkQXR0clZhbCA9IGVs
ZW1lbnQuZ2V0SWRBdHRyaWJ1dGUoKTsKLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZUF0dHJWYWwgPSBlbGVtZW50LmdldE5hbWVBdHRyaWJ1dGUoKTsKLSAgICAgICAgICAgIGlm
ICghaWRBdHRyVmFsLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGNhY2hlLT5hcHBlbmRJ
ZENhY2hlKGlkQXR0clZhbCwgJmVsZW1lbnQpOwotICAgICAgICAgICAgICAgIGZvdW5kSW5wdXRF
bGVtZW50cy5hZGQoaWRBdHRyVmFsLmltcGwoKSk7CisgICAgICAgICAgICBjb25zdCBBdG9taWNT
dHJpbmcmIGlkID0gZWxlbWVudC5nZXRJZEF0dHJpYnV0ZSgpOworICAgICAgICAgICAgaWYgKCFp
ZC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBjYWNoZS0+YXBwZW5kVG9JZENhY2hlKGlk
LCBlbGVtZW50KTsKKyAgICAgICAgICAgICAgICBpZiAob3duZXJJc0Zvcm1FbGVtZW50KQorICAg
ICAgICAgICAgICAgICAgICBmb3VuZElucHV0RWxlbWVudHMuYWRkKGlkLmltcGwoKSk7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIW5hbWVBdHRyVmFsLmlzRW1wdHkoKSAmJiBpZEF0
dHJWYWwgIT0gbmFtZUF0dHJWYWwpIHsKLSAgICAgICAgICAgICAgICBjYWNoZS0+YXBwZW5kTmFt
ZUNhY2hlKG5hbWVBdHRyVmFsLCAmZWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgZm91bmRJbnB1
dEVsZW1lbnRzLmFkZChuYW1lQXR0clZhbC5pbXBsKCkpOworICAgICAgICAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lID0gZWxlbWVudC5nZXROYW1lQXR0cmlidXRlKCk7CisgICAgICAgICAg
ICBpZiAoIW5hbWUuaXNFbXB0eSgpICYmIGlkICE9IG5hbWUpIHsKKyAgICAgICAgICAgICAgICBj
YWNoZS0+YXBwZW5kVG9OYW1lQ2FjaGUobmFtZSwgZWxlbWVudCk7CisgICAgICAgICAgICAgICAg
aWYgKG93bmVySXNGb3JtRWxlbWVudCkKKyAgICAgICAgICAgICAgICAgICAgZm91bmRJbnB1dEVs
ZW1lbnRzLmFkZChuYW1lLmltcGwoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
Ci0KLSAgICBpZiAoaXM8SFRNTEZvcm1FbGVtZW50Pihvd25lck5vZGUoKSkpIHsKLSAgICAgICAg
Y29uc3QgVmVjdG9yPEhUTUxJbWFnZUVsZW1lbnQqPiYgaW1hZ2VFbGVtZW50c0FycmF5ID0gZm9y
bUltYWdlRWxlbWVudHMoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGltYWdl
RWxlbWVudHNBcnJheS5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgSFRNTEltYWdlRWxlbWVu
dCYgZWxlbWVudCA9ICppbWFnZUVsZW1lbnRzQXJyYXlbaV07Ci0gICAgICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIGlkQXR0clZhbCA9IGVsZW1lbnQuZ2V0SWRBdHRyaWJ1dGUoKTsKLSAgICAg
ICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZUF0dHJWYWwgPSBlbGVtZW50LmdldE5hbWVB
dHRyaWJ1dGUoKTsKLSAgICAgICAgICAgIGlmICghaWRBdHRyVmFsLmlzRW1wdHkoKSAmJiAhZm91
bmRJbnB1dEVsZW1lbnRzLmNvbnRhaW5zKGlkQXR0clZhbC5pbXBsKCkpKQotICAgICAgICAgICAg
ICAgIGNhY2hlLT5hcHBlbmRJZENhY2hlKGlkQXR0clZhbCwgJmVsZW1lbnQpOwotICAgICAgICAg
ICAgaWYgKCFuYW1lQXR0clZhbC5pc0VtcHR5KCkgJiYgaWRBdHRyVmFsICE9IG5hbWVBdHRyVmFs
ICYmICFmb3VuZElucHV0RWxlbWVudHMuY29udGFpbnMobmFtZUF0dHJWYWwuaW1wbCgpKSkKLSAg
ICAgICAgICAgICAgICBjYWNoZS0+YXBwZW5kTmFtZUNhY2hlKG5hbWVBdHRyVmFsLCAmZWxlbWVu
dCk7CisgICAgaWYgKG93bmVySXNGb3JtRWxlbWVudCkgeworICAgICAgICBmb3IgKGF1dG8qIGVs
ZW1lbnRQdHIgOiBmb3JtSW1hZ2VFbGVtZW50cygpKSB7CisgICAgICAgICAgICBIVE1MSW1hZ2VF
bGVtZW50JiBlbGVtZW50ID0gKmVsZW1lbnRQdHI7CisgICAgICAgICAgICBjb25zdCBBdG9taWNT
dHJpbmcmIGlkID0gZWxlbWVudC5nZXRJZEF0dHJpYnV0ZSgpOworICAgICAgICAgICAgaWYgKCFp
ZC5pc0VtcHR5KCkgJiYgIWZvdW5kSW5wdXRFbGVtZW50cy5jb250YWlucyhpZC5pbXBsKCkpKQor
ICAgICAgICAgICAgICAgIGNhY2hlLT5hcHBlbmRUb0lkQ2FjaGUoaWQsIGVsZW1lbnQpOworICAg
ICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lID0gZWxlbWVudC5nZXROYW1lQXR0cmli
dXRlKCk7CisgICAgICAgICAgICBpZiAoIW5hbWUuaXNFbXB0eSgpICYmIGlkICE9IG5hbWUgJiYg
IWZvdW5kSW5wdXRFbGVtZW50cy5jb250YWlucyhuYW1lLmltcGwoKSkpCisgICAgICAgICAgICAg
ICAgY2FjaGUtPmFwcGVuZFRvTmFtZUNhY2hlKG5hbWUsIGVsZW1lbnQpOwogICAgICAgICB9CiAg
ICAgfQogCi0gICAgY2FjaGUtPmRpZFBvcHVsYXRlKCk7Ci0gICAgc2V0TmFtZUl0ZW1DYWNoZShX
VEY6Om1vdmUoY2FjaGUpKTsKKyAgICBzZXROYW1lZEl0ZW1DYWNoZShXVEY6Om1vdmUoY2FjaGUp
KTsKIH0KIAogdm9pZCBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjo6aW52YWxpZGF0ZUNhY2hl
KERvY3VtZW50JiBkb2N1bWVudCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEZvcm1Db250cm9sc0NvbGxlY3Rpb24uaAppbmRleCBjYWE2YTBkNzM1ZTc4OTJmOTc2NzI2YzZi
MGExNzY0MjViY2M4NzE4Li45YzY0OGQxZjIwNjJlYjk3NjgxODdlYTc5NjNjNGY4NGZmMDUxYzMy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0
aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlv
bi5oCkBAIC0yOCw5ICsyOCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZvcm1B
c3NvY2lhdGVkRWxlbWVudDsKLWNsYXNzIEhUTUxFbGVtZW50OwogY2xhc3MgSFRNTEltYWdlRWxl
bWVudDsKLWNsYXNzIFF1YWxpZmllZE5hbWU7CiAKIC8vIFRoaXMgY2xhc3MgaXMganVzdCBhIGJp
ZyBoYWNrIHRvIGZpbmQgZm9ybSBlbGVtZW50cyBldmVuIGluIG1hbGZvcm1lZCBIVE1MIGVsZW1l
bnRzLgogLy8gVGhlIGZhbW91cyA8dGFibGU+PHRyPjxmb3JtPjx0ZD4gcHJvYmxlbS4KQEAgLTM4
LDE0ICszNiwxMiBAQCBjbGFzcyBRdWFsaWZpZWROYW1lOwogY2xhc3MgSFRNTEZvcm1Db250cm9s
c0NvbGxlY3Rpb24gZmluYWwgOiBwdWJsaWMgSFRNTENvbGxlY3Rpb24gewogcHVibGljOgogICAg
IHN0YXRpYyBQYXNzUmVmPEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uPiBjcmVhdGUoQ29udGFp
bmVyTm9kZSYsIENvbGxlY3Rpb25UeXBlKTsKLQogICAgIHZpcnR1YWwgfkhUTUxGb3JtQ29udHJv
bHNDb2xsZWN0aW9uKCk7CiAKLSAgICB2aXJ0dWFsIE5vZGUqIG5hbWVkSXRlbShjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWUpIGNvbnN0IG92ZXJyaWRlOwotCiBwcml2YXRlOgogICAgIGV4cGxpY2l0
IEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uKENvbnRhaW5lck5vZGUmKTsKIAorICAgIHZpcnR1
YWwgRWxlbWVudCogbmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVDYWNoZShEb2N1bWVudCYpIGNvbnN0
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVOYW1lZEVsZW1lbnRDYWNoZSgpIGNv
bnN0IG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3Jt
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKaW5k
ZXggOTI2MDA3NjdmYTIwZTExMjQxYTEzOGM0ZjcyODZkOTg3N2M3NWUwYi4uNGVkYTU4YzZhYjkw
MGNlZTBhMmE4ZWY2M2RlYTI2ZTUyYjE4NWYxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1FbGVtZW50LmNwcApAQCAtNzkyLDE3ICs3OTIsMTkgQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnQ6
Omhhc05hbWVkRWxlbWVudChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiAgICAgcmV0dXJuIGVs
ZW1lbnRzKCktPmhhc05hbWVkSXRlbShuYW1lKSB8fCBlbGVtZW50RnJvbVBhc3ROYW1lc01hcChu
YW1lKTsKIH0KIAotLy8gRklYTUU6IFVzZSBSZWZQdHI8SFRNTEVsZW1lbnQ+IGZvciBuYW1lZEl0
ZW1zLiBlbGVtZW50cygpLT5uYW1lZEl0ZW1zIG5ldmVyIHJldHVybiBub24tSFRNTEVsZW1lbnQg
bm9kZXMuCi12b2lkIEhUTUxGb3JtRWxlbWVudDo6Z2V0TmFtZWRFbGVtZW50cyhjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWUsIFZlY3RvcjxSZWY8RWxlbWVudD4+JiBuYW1lZEl0ZW1zKQorLy8gRklY
TUU6IFVzZSBSZWY8SFRNTEVsZW1lbnQ+IGZvciB0aGUgZnVuY3Rpb24gcmVzdWx0IHNpbmNlIHRo
ZXJlIGFyZSBubyBub24tSFRNTCBlbGVtZW50cyByZXR1cm5lZCBoZXJlLgorVmVjdG9yPFJlZjxF
bGVtZW50Pj4gSFRNTEZvcm1FbGVtZW50OjpuYW1lZEVsZW1lbnRzKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSkKIHsKICAgICAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMv
Y3VycmVudC13b3JrL211bHRpcGFnZS9mb3Jtcy5odG1sI2RvbS1mb3JtLW5hbWVkaXRlbQotICAg
IGVsZW1lbnRzKCktPm5hbWVkSXRlbXMobmFtZSwgbmFtZWRJdGVtcyk7CisgICAgVmVjdG9yPFJl
ZjxFbGVtZW50Pj4gbmFtZWRJdGVtcyA9IGVsZW1lbnRzKCktPm5hbWVkSXRlbXMobmFtZSk7CiAK
ICAgICBIVE1MRWxlbWVudCogZWxlbWVudEZyb21QYXN0ID0gZWxlbWVudEZyb21QYXN0TmFtZXNN
YXAobmFtZSk7CiAgICAgaWYgKG5hbWVkSXRlbXMuc2l6ZSgpID09IDEgJiYgbmFtZWRJdGVtcy5m
aXJzdCgpLnB0cigpICE9IGVsZW1lbnRGcm9tUGFzdCkKICAgICAgICAgYWRkVG9QYXN0TmFtZXNN
YXAoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KG5hbWVkSXRlbXMuZmlyc3QoKS5nZXQoKSkuYXNGb3Jt
TmFtZWRJdGVtKCksIG5hbWUpOwogICAgIGVsc2UgaWYgKGVsZW1lbnRGcm9tUGFzdCAmJiBuYW1l
ZEl0ZW1zLmlzRW1wdHkoKSkKICAgICAgICAgbmFtZWRJdGVtcy5hcHBlbmQoKmVsZW1lbnRGcm9t
UGFzdCk7CisKKyAgICByZXR1cm4gbmFtZWRJdGVtczsKIH0KIAogdm9pZCBIVE1MRm9ybUVsZW1l
bnQ6OmRvY3VtZW50RGlkUmVzdW1lRnJvbVBhZ2VDYWNoZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Rm9ybUVsZW1lbnQuaAppbmRleCBiNGQ2ODY2NDhmZmM0Y2Q3YjM3ZmRkYWVjYmJmY2YyZTc0Nzll
YTBlLi5lNTQ1Yzc3NDI1MzBmZjY4NTE4MWZiZmJjNzRjYzcxZmIxOTg4ZDZlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogCiAg
ICAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gZWxlbWVudHMoKTsKICAgICBib29sIGhhc05h
bWVkRWxlbWVudChjb25zdCBBdG9taWNTdHJpbmcmKTsKLSAgICB2b2lkIGdldE5hbWVkRWxlbWVu
dHMoY29uc3QgQXRvbWljU3RyaW5nJiwgVmVjdG9yPFJlZjxFbGVtZW50Pj4mKTsKKyAgICBWZWN0
b3I8UmVmPEVsZW1lbnQ+PiBuYW1lZEVsZW1lbnRzKGNvbnN0IEF0b21pY1N0cmluZyYpOwogCiAg
ICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgTm9kZSogaXRlbSh1bnNpZ25lZCBpbmRl
eCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5o
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uaAppbmRleCAwMjJlYTMw
NmU0NjNiMGRlYzk4ODgyNmY1ZDA4NWEzNTYyYWI2NzlmLi5hMGY0YmI1YmIzODMxMjM4N2ZjZmIy
ZDMyZjExZTQ3YzZlZTQ1OWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxO
YW1lQ29sbGVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5hbWVDb2xsZWN0
aW9uLmgKQEAgLTI0LDcgKzI0LDYgQEAKICNkZWZpbmUgSFRNTE5hbWVDb2xsZWN0aW9uX2gKIAog
I2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uLmgiCi0KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNT
dHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxT
ZWxlY3RFbGVtZW50LmNwcAppbmRleCBlYTMwNDNlOWJhMmU1MzRjNTI0Y2Q3NjEwMGQ1NDA3NTVi
YTRmMDAxLi5hYTdlZWYwMjA2Yzg2MDA0NmFhMGRlYWQ3MjM5YTM5NGM0Njk0OTk0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcApAQCAtNDI3LDEyICs0MjcsMTIg
QEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0U2l6ZShpbnQgc2l6ZSkKICAgICBzZXRJbnRl
Z3JhbEF0dHJpYnV0ZShzaXplQXR0ciwgc2l6ZSk7CiB9CiAKLU5vZGUqIEhUTUxTZWxlY3RFbGVt
ZW50OjpuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQorRWxlbWVudCogSFRNTFNl
bGVjdEVsZW1lbnQ6Om5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiB7CiAgICAg
cmV0dXJuIG9wdGlvbnMoKS0+bmFtZWRJdGVtKG5hbWUpOwogfQogCi1Ob2RlKiBIVE1MU2VsZWN0
RWxlbWVudDo6aXRlbSh1bnNpZ25lZCBpbmRleCkKK0VsZW1lbnQqIEhUTUxTZWxlY3RFbGVtZW50
OjppdGVtKHVuc2lnbmVkIGluZGV4KQogewogICAgIHJldHVybiBvcHRpb25zKCktPml0ZW0oaW5k
ZXgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCmluZGV4IGRhN2Yx
NWE4OWEwNWNkNzI4YzMyYTY1NTkyYTA1ZGU0YTJjYzBiMjkuLmY4ZjE2NWM0NTkwNzhkMTMzYWI4
MTg5NzZjOTEyNTViMTUwYWZlYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFNlbGVjdEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVt
ZW50LmgKQEAgLTg3LDggKzg3LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0T3B0aW9uKHVuc2ln
bmVkIGluZGV4LCBIVE1MT3B0aW9uRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lk
IHNldExlbmd0aCh1bnNpZ25lZCwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgTm9kZSogbmFtZWRJ
dGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSk7Ci0gICAgTm9kZSogaXRlbSh1bnNpZ25lZCBp
bmRleCk7CisgICAgRWxlbWVudCogbmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSk7
CisgICAgRWxlbWVudCogaXRlbSh1bnNpZ25lZCBpbmRleCk7CiAKICAgICB2b2lkIHNjcm9sbFRv
U2VsZWN0aW9uKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuY3BwCmluZGV4IGQxMzlmZTRlMzgwNzY2NTU4ODJlZDVj
NjEwZjNmNTZmZGNlNGM2ZTguLmUxNDE1NjhjZGM0ZmNiZWM4ZjJmNGY1MTQ2ODc1ZGQwNjgzNGEw
OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxT
bmFwT2Zmc2V0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXhpc1Nj
cm9sbFNuYXBPZmZzZXRzLmNwcApAQCAtMzgsMTQgKzM4LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogc3RhdGljIHZvaWQgYXBwZW5kQ2hpbGRTbmFwT2Zmc2V0cyhIVE1MRWxlbWVudCYgcGFy
ZW50LCBib29sIHNob3VsZEFkZEhvcml6b250YWxDaGlsZE9mZnNldHMsIFZlY3RvcjxMYXlvdXRV
bml0PiYgaG9yaXpvbnRhbFNuYXBPZmZzZXRTdWJzZXF1ZW5jZSwgYm9vbCBzaG91bGRBZGRWZXJ0
aWNhbENoaWxkT2Zmc2V0cywgVmVjdG9yPExheW91dFVuaXQ+JiB2ZXJ0aWNhbFNuYXBPZmZzZXRT
dWJzZXF1ZW5jZSkKIHsKLSAgICBFbGVtZW50KiBjaGlsZCA9IHBhcmVudC5jaGlsZHJlbigpLT5j
b2xsZWN0aW9uQmVnaW4oKTsKICAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiB0cmF2ZXJzaW5nIGFs
bCBjaGlsZHJlbiwgcmVnaXN0ZXIgY2hpbGRyZW4gd2l0aCBzbmFwIGNvb3JkaW5hdGVzIGJlZm9y
ZSBhcHBlbmRpbmcgdG8gc25hcE9mZnNldFN1YnNlcXVlbmNlLgotICAgIHdoaWxlIChjaGlsZCkg
eworICAgIGZvciAoRWxlbWVudCogY2hpbGQgPSBwYXJlbnQuZmlyc3RFbGVtZW50Q2hpbGQoKTsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRFbGVtZW50U2libGluZygpKSB7CiAgICAgICAgIGlm
IChSZW5kZXJCb3gqIGJveCA9IGNoaWxkLT5yZW5kZXJCb3goKSkgewogICAgICAgICAgICAgTGF5
b3V0VW5pdCB2aWV3V2lkdGggPSBib3gtPndpZHRoKCk7CiAgICAgICAgICAgICBMYXlvdXRVbml0
IHZpZXdIZWlnaHQgPSBib3gtPmhlaWdodCgpOwogI2lmIFBMQVRGT1JNKElPUykKLSAgICAgICAg
ICAgIC8vIEZJWE1FOiBJbnZlc3RpZ2F0ZSB3aHkgdXNpbmcgbG9jYWxUb0NvbnRhaW5lclBvaW50
IGdpdmVzIHRoZSB3cm9uZyBvZmZzZXRzIGZvciBpT1MgbWFpbmZyYW1lLiBBbHNvLCB0aGVzZSBv
ZmZzZXRzIHdvbid0IHRha2UgdHJhbnNmb3JtcyBpbnRvIGFjY291bnQgKG1ha2Ugc3VyZSB0byB0
ZXN0IHRoaXMhKQorICAgICAgICAgICAgLy8gRklYTUU6IEludmVzdGlnYXRlIHdoeSB1c2luZyBs
b2NhbFRvQ29udGFpbmVyUG9pbnQgZ2l2ZXMgdGhlIHdyb25nIG9mZnNldHMgZm9yIGlPUyBtYWlu
IGZyYW1lLiBBbHNvLCB0aGVzZSBvZmZzZXRzIHdvbid0IHRha2UgdHJhbnNmb3JtcyBpbnRvIGFj
Y291bnQgKG1ha2Ugc3VyZSB0byB0ZXN0IHRoaXMhKS4KICAgICAgICAgICAgIGZsb2F0IGxlZnQg
PSBjaGlsZC0+b2Zmc2V0TGVmdCgpOwogICAgICAgICAgICAgZmxvYXQgdG9wID0gY2hpbGQtPm9m
ZnNldFRvcCgpOwogI2Vsc2UKQEAgLTY0LDcgKzYzLDYgQEAgc3RhdGljIHZvaWQgYXBwZW5kQ2hp
bGRTbmFwT2Zmc2V0cyhIVE1MRWxlbWVudCYgcGFyZW50LCBib29sIHNob3VsZEFkZEhvcml6b250
YWwKICAgICAgICAgICAgICAgICAgICAgdmVydGljYWxTbmFwT2Zmc2V0U3Vic2VxdWVuY2UuYXBw
ZW5kKGxhc3RQb3RlbnRpYWxTbmFwUG9zaXRpb25ZKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQotICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0RWxlbWVudFNpYmxpbmcoKTsKICAgICB9CiB9
CiAK
</data>
<flag name="review"
          id="266113"
          type_id="1"
          status="+"
          setter="cdumez"
    />
          </attachment>
      

    </bug>

</bugzilla>