<?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>216528</bug_id>
          
          <creation_ts>2020-09-14 22:38:59 -0700</creation_ts>
          <short_desc>MutationObserverRegistration should be ref counted</short_desc>
          <delta_ts>2021-04-05 14:51:43 -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>DOM</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>LATER</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>216507</dependson>
    
    <dependson>217923</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>kangil.han</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1688595</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-09-14 22:38:59 -0700</bug_when>
    <thetext>MutationObserverRegistration should be ref-counted so that both
regular registry and transient registries can reference it using Ref.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1688603</commentid>
    <comment_count>1</comment_count>
      <attachid>408795</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-09-14 23:06:26 -0700</bug_when>
    <thetext>Created attachment 408795
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1688874</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-09-15 15:20:44 -0700</bug_when>
    <thetext>Ping reviewers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689212</commentid>
    <comment_count>3</comment_count>
      <attachid>408795</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-16 14:01:54 -0700</bug_when>
    <thetext>Comment on attachment 408795
Patch

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

I’m sort of surprised by how many RELEASE_ASSERT there are in this patch.

&gt; Source/WebCore/dom/MutationObserver.cpp:127
&gt; +        return std::pair&lt;Ref&lt;Node&gt;, Ref&lt;MutationObserverRegistration&gt;&gt; { node.releaseNonNull(), makeRef(*registration) };

Using two sets of braces would be nicer than having type write out almost the entire return type a second time:

    return { { node.releaseNonNull(), makeRef(*registration) } };

&gt; Source/WebCore/dom/MutationObserver.cpp:136
&gt; +    RELEASE_ASSERT(!m_registrations.contains(&amp;registration));
&gt;      m_registrations.add(&amp;registration);

Since we are doing a RELEASE_ASSERT, please avoid double hashing by asserting based on the return value of add rather than a separate hash table lookup.

&gt; Source/WebCore/dom/MutationObserver.cpp:142
&gt; +    RELEASE_ASSERT(m_registrations.contains(&amp;registration));
&gt;      m_registrations.remove(&amp;registration);

Since we are doing a RELEASE_ASSERT, please avoid double hashing by asserting based on the return value of remove rather than a separate hash table lookup.

&gt; Source/WebCore/dom/NodeRareData.h:278
&gt; +    static constexpr size_t MutationObserverRegistryInlineSize = 4;

I suggest defining a type with this size in it rather than writing out the type every time:

    using RegistryVector = Vector&lt;Ref&lt;MutationObserverRegistration&gt;, 4&gt;;
    using RegistrySet= HashSet&lt;Ref&lt;MutationObserverRegistration&gt;&gt;;

The code will be less repetitive and might even be easier to read.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689284</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-09-16 17:55:43 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #3)
&gt; Comment on attachment 408795 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=408795&amp;action=review
&gt; 
&gt; I’m sort of surprised by how many RELEASE_ASSERT there are in this patch.

Actually, hasRareData() checks in Node.cpp don&apos;t need to be release asserts since we&apos;d crash cleanly these days.

&gt; &gt; Source/WebCore/dom/MutationObserver.cpp:127
&gt; &gt; +        return std::pair&lt;Ref&lt;Node&gt;, Ref&lt;MutationObserverRegistration&gt;&gt; { node.releaseNonNull(), makeRef(*registration) };
&gt; 
&gt; Using two sets of braces would be nicer than having type write out almost
&gt; the entire return type a second time:
&gt; 
&gt;     return { { node.releaseNonNull(), makeRef(*registration) } };

Good point. Fixed.

&gt; &gt; Source/WebCore/dom/MutationObserver.cpp:136
&gt; &gt; +    RELEASE_ASSERT(!m_registrations.contains(&amp;registration));
&gt; &gt;      m_registrations.add(&amp;registration);
&gt; 
&gt; Since we are doing a RELEASE_ASSERT, please avoid double hashing by
&gt; asserting based on the return value of add rather than a separate hash table
&gt; lookup.

Done. RELEASE_ASSERT&apos;ed isNewEntry. These checks are release asserts because m_registrations continues to use a raw pointer to MutationObserverRegistration. I think we can avoid this if we invent a special weak ptr for single-observer pattern we often have in WebKit.

&gt; &gt; Source/WebCore/dom/MutationObserver.cpp:142
&gt; &gt; +    RELEASE_ASSERT(m_registrations.contains(&amp;registration));
&gt; &gt;      m_registrations.remove(&amp;registration);
&gt; 
&gt; Since we are doing a RELEASE_ASSERT, please avoid double hashing by
&gt; asserting based on the return value of remove rather than a separate hash
&gt; table lookup.

Fixed.

&gt; &gt; Source/WebCore/dom/NodeRareData.h:278
&gt; &gt; +    static constexpr size_t MutationObserverRegistryInlineSize = 4;
&gt; 
&gt; I suggest defining a type with this size in it rather than writing out the
&gt; type every time:
&gt; 
&gt;     using RegistryVector = Vector&lt;Ref&lt;MutationObserverRegistration&gt;, 4&gt;;
&gt;     using RegistrySet= HashSet&lt;Ref&lt;MutationObserverRegistration&gt;&gt;;
&gt; 
&gt; The code will be less repetitive and might even be easier to read.

Sure, I&apos;d use MutationObserverRegistryVector though since &quot;RegistryVector&quot; sounds very generic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689289</commentid>
    <comment_count>5</comment_count>
      <attachid>408973</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-09-16 18:07:16 -0700</bug_when>
    <thetext>Created attachment 408973
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689296</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-16 18:53:26 -0700</bug_when>
    <thetext>Committed r267175: &lt;https://trac.webkit.org/changeset/267175&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 408973.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689297</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-16 18:54:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/69031310&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699470</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-10-19 15:08:55 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 217923</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699499</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-19 16:03:42 -0700</bug_when>
    <thetext>I think I&apos;m gonna fix this some other way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701743</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-26 20:37:46 -0700</bug_when>
    <thetext>Turns out that the perf regression on nytimes.com was caused by a crash. Will re-land this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408795</attachid>
            <date>2020-09-14 23:06:26 -0700</date>
            <delta_ts>2020-09-16 18:07:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216528-20200914230625.patch</filename>
            <type>text/plain</type>
            <size>25189</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MDc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTM0NWE4NmYwN2U3YWZj
NzI4MDQ2MzA0NGJiMDNmNDBjN2FhN2U2ZC4uNzMzNjc1NjYzMzNhNTg3OTllNDEzNDFhN2QzNTFj
OTRhYzgxNTUwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDIwLTA5LTE0ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE11dGF0aW9uT2JzZXJ2ZXJS
ZWdpc3RyYXRpb24gc2hvdWxkIGJlIHJlZiBjb3VudGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY1MjgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIE11dGF0aW9uT2JzZXJ2
ZXJSZWdpc3RyYXRpb24gcmVmIGNvdW50ZWQgc28gdGhhdCB0aGUgdHJhbnNpZW50IHJlZ2lzdHJ5
IGNhbiBzdG9yZQorICAgICAgICBSZWY8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbj4gaW5z
dGVhZCBvZiBhIHJhdyBwb2ludGVyLiBJdCBhbHNvIG1lcmdlcyBOb2RlTXV0YXRpb25PYnNlcnZl
ckRhdGEKKyAgICAgICAgaW50byBOb2RlUmFyZURhdGEgbm93IHRoYXQgTm9kZVJhcmVEYXRhIGlz
IGFjdHVhbGx5IHJhcmUgYWZ0ZXIgcjI2NjcxNCBhbmQgcjI2Njc2OS4KKworICAgICAgICBCZWZv
cmUgdGhpcyBwYXRjaCwgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbiBoYWQgdG8gYmUga2Vw
dCBhbGl2ZSBieSB0aGUgb3JpZ2luYWxseSBvYnNlcnZlZCBub2RlCisgICAgICAgIHVzaW5nIG1f
bm9kZUtlcHRBbGl2ZSB3aGVuZXZlciBhIHRyYW5zaWVudCBvYnNlcnZhdGlvbiBvY2N1cnMgKGku
ZS4gb2JzZXJ2YXRpb24gb2YgYSBub2RlIHdoaWNoIHVzZWQKKyAgICAgICAgdG8gYmUgYSBwYXJ0
IG9mIHRoZSBzdWJ0cmVlIG9mIHRoZSBvYnNlcnZlZCBub2RlKS4gV2l0aCB0aGlzIHBhdGNoLCB0
aGlzIGNvbXBsZXhpdHkgaXMgZWxpbWluYXRlZC4KKworICAgICAgICBObyBuZXcgdGVzdHMgc2lu
Y2UgdGhlcmUgc2hvdWxkIGJlIG5vIGJlaGF2aW9yYWwgZGlmZmVyZW5jZS4KKworICAgICAgICAq
IGRvbS9NdXRhdGlvbk9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2Jz
ZXJ2ZXI6OmRpc2Nvbm5lY3QpOiBTa2lwIGFueSBub2RlIGZvciB3aGljaCB0aGUgb2JzZXJ2ZWQg
bm9kZSBoYWQgYmVlbiBkZWxldGVkLgorICAgICAgICBUaGlzIG1lYW5zIHRoYXQgdGhlIHJlZ2lz
dHJhdGlvbiBpcyBhbGl2ZSBmb3IgdHJhbnNpZW50IG5vZGVzIChpLmUuIGEgbm9kZSB3aGljaCB1
c2VkIHRvIGJlIGEgcGFydCBvZgorICAgICAgICB0aGUgc3VidHJlZSBvZiB0aGUgb2JzZXJ2ZWQg
bm9kZSkuCisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyOjpvYnNlcnZhdGlvblN0
YXJ0ZWQpOiBDb252ZXJ0ZWQgZGVidWcgYXNzZXJ0IHRvIGEgcmVsZWFzZSBhc3NlcnQuCisgICAg
ICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyOjpvYnNlcnZhdGlvbkVuZGVkKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyOjpkZWxpdmVyKTogU2ltcGxpZmll
ZCBsb2dpYyBhIGJpdCB1c2luZyBXVEY6Om1hcC4KKyAgICAgICAgKiBkb20vTXV0YXRpb25PYnNl
cnZlclJlZ2lzdHJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVy
UmVnaXN0cmF0aW9uOjpjcmVhdGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9u
T2JzZXJ2ZXJSZWdpc3RyYXRpb246Ok11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24pOiBDcmVh
dGUgYSBXZWFrUHRyIGZvciBtX25vZGUuCisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2Vy
dmVyUmVnaXN0cmF0aW9uOjpvYnNlcnZlZFN1YnRyZWVOb2RlV2lsbERldGFjaCk6IERlbGV0ZWQg
dGhlIGNvZGUgZm9yCisgICAgICAgIG1fbm9kZUtlcHRBbGl2ZSBzaW5jZSB0aGUgb2JzZXJ2ZWQg
bm9kZSBpcyBubyBsb25nZXIgcmVzcG9uc2libGUgZm9yIGtlZXBpbmcgdGhpcworICAgICAgICBN
dXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uIGFsaXZlIHdoaWxlIHRyYW5zaWVudCBvYnNlcnZh
cmlvbiB0YWtlcyBwbGFjZS4KKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXJSZWdp
c3RyYXRpb246OnRha2VUcmFuc2llbnRSZWdpc3RyYXRpb25zKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uOjpzaG91bGRSZWNlaXZlTXV0YXRp
b25Gcm9tIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXJSZWdpc3Ry
YXRpb246OmFkZFJlZ2lzdHJhdGlvbk5vZGVzVG9TZXQgY29uc3QpOiBTa2lwIG1fbm9kZSBpZiBp
dCBoYXMgYmVlbgorICAgICAgICBkZWxldGVkLiBUaGlzIGlzIHBvc3NpYmxlIGR1cmluZyB0cmFu
c2llbnQgb2JzZXJ2YXRpb25zLgorICAgICAgICAqIGRvbS9NdXRhdGlvbk9ic2VydmVyUmVnaXN0
cmF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9u
KTogVGhpcyBjbGFzcyBpcyBub3cgcmVmIGNvdW50ZWQuIEFsc28gbWFkZSBtX25vZGUgV2Vha1B0
ci4KKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246Om5vZGUp
OgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNsZWFy
UmFyZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6bW92ZU5vZGVUb05ld0RvY3VtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Om11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjp0cmFuc2llbnRNdXRhdGlvbk9ic2VydmVy
UmVnaXN0cnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdE1hdGNoaW5nT2Jz
ZXJ2ZXJzRm9yTXV0YXRpb24pOiBOb3cgdGFrZXMgYSByZWZlcmVuY2UgdG8gcmVnaXN0cnkuCisg
ICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6Tm9kZTo6cmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGU6OnVucmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKTogQ29udmVydGVkIGRl
YnVnIGFzc2VydGlvbnMgdG8gcmVsZWFzZSBhc3NlcnRpb25zLiBXaXRoCisgICAgICAgIHNjcmlw
dCBleGVjdXRpb24gZm9yYmlkZGVuIGR1cmluZyB0cmVlIG11dGF0aW9ucywgdGhpcyBzaG91bGQg
bmV2ZXIgaGFwcGVuIG5vdy4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJlZ2lzdGVyVHJhbnNp
ZW50TXV0YXRpb25PYnNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjp1bnJlZ2lzdGVy
VHJhbnNpZW50TXV0YXRpb25PYnNlcnZlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6bm90aWZ5TXV0YXRpb25PYnNlcnZlcnNOb2RlV2lsbERldGFjaCk6CisgICAgICAgICogZG9t
L05vZGUuaDoKKyAgICAgICAgKiBkb20vTm9kZVJhcmVEYXRhLmNwcDoKKyAgICAgICAgKiBkb20v
Tm9kZVJhcmVEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTXV0YXRpb25PYnNlcnZlckRh
dGEpOiBNZXJnZWQgaW50byBOb2RlUmFyZURhdGEuCisgICAgICAgIChXZWJDb3JlOjpOb2RlUmFy
ZURhdGE6Om11dGF0aW9uT2JzZXJ2ZXJEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGVSYXJlRGF0YTo6ZW5zdXJlTXV0YXRpb25PYnNlcnZlckRhdGEpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjptdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6bXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJ5SWZFeGlzdHMpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6
dHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpOb2RlUmFyZURhdGE6OnVzZVR5cGVzIGNvbnN0KToKKwogMjAyMC0wOS0xNCAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBFbGVtZW50IHNob3VsZCBub3Qg
c2V0IGFuIGF0dHJpYnV0ZSBpbnNpZGUgaXRzIGNvbnN0cnVjdG9yCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
TXV0YXRpb25PYnNlcnZlci5jcHAKaW5kZXggYTRhYzBlYjdlNTcxNzdjZjA0MjM3ZTZhOTIzY2M1
MDMwNmUyYmJkNi4uNTZlYzgxNzgyMmFmZDQyOGQyYzMwNzI5NzUxZGFkYzRlNzc1ZDdmNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyLmNwcApAQCAtMTIwLDIwICsxMjAsMjUg
QEAgdm9pZCBNdXRhdGlvbk9ic2VydmVyOjpkaXNjb25uZWN0KCkKIHsKICAgICBtX3BlbmRpbmdU
YXJnZXRzLmNsZWFyKCk7CiAgICAgbV9yZWNvcmRzLmNsZWFyKCk7Ci0gICAgSGFzaFNldDxNdXRh
dGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKj4gcmVnaXN0cmF0aW9ucyhtX3JlZ2lzdHJhdGlvbnMp
OwotICAgIGZvciAoYXV0byogcmVnaXN0cmF0aW9uIDogcmVnaXN0cmF0aW9ucykKLSAgICAgICAg
cmVnaXN0cmF0aW9uLT5ub2RlKCkudW5yZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIoKnJlZ2lzdHJh
dGlvbik7CisgICAgYXV0byByZWdpc3RyYXRpb25BbmROb2RlTGlzdCA9IFdURjo6Y29tcGFjdE1h
cChtX3JlZ2lzdHJhdGlvbnMsIFtdKGF1dG8qIHJlZ2lzdHJhdGlvbikgLT4gT3B0aW9uYWw8c3Rk
OjpwYWlyPFJlZjxOb2RlPiwgUmVmPE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24+Pj4gewor
ICAgICAgICBhdXRvIG5vZGUgPSBtYWtlUmVmUHRyKHJlZ2lzdHJhdGlvbi0+bm9kZSgpKTsKKyAg
ICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6cGFpcjxSZWY8Tm9kZT4sIFJlZjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0
cmF0aW9uPj4geyBub2RlLnJlbGVhc2VOb25OdWxsKCksIG1ha2VSZWYoKnJlZ2lzdHJhdGlvbikg
fTsKKyAgICB9KTsKKyAgICBmb3IgKGF1dG8mIHJlZ2lzdHJhdGlvbkFuZE5vZGUgOiByZWdpc3Ry
YXRpb25BbmROb2RlTGlzdCkKKyAgICAgICAgcmVnaXN0cmF0aW9uQW5kTm9kZS5maXJzdC0+dW5y
ZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIocmVnaXN0cmF0aW9uQW5kTm9kZS5zZWNvbmQuZ2V0KCkp
OwogfQogCiB2b2lkIE11dGF0aW9uT2JzZXJ2ZXI6Om9ic2VydmF0aW9uU3RhcnRlZChNdXRhdGlv
bk9ic2VydmVyUmVnaXN0cmF0aW9uJiByZWdpc3RyYXRpb24pCiB7Ci0gICAgQVNTRVJUKCFtX3Jl
Z2lzdHJhdGlvbnMuY29udGFpbnMoJnJlZ2lzdHJhdGlvbikpOworICAgIFJFTEVBU0VfQVNTRVJU
KCFtX3JlZ2lzdHJhdGlvbnMuY29udGFpbnMoJnJlZ2lzdHJhdGlvbikpOwogICAgIG1fcmVnaXN0
cmF0aW9ucy5hZGQoJnJlZ2lzdHJhdGlvbik7CiB9CiAKIHZvaWQgTXV0YXRpb25PYnNlcnZlcjo6
b2JzZXJ2YXRpb25FbmRlZChNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uJiByZWdpc3RyYXRp
b24pCiB7Ci0gICAgQVNTRVJUKG1fcmVnaXN0cmF0aW9ucy5jb250YWlucygmcmVnaXN0cmF0aW9u
KSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9yZWdpc3RyYXRpb25zLmNvbnRhaW5zKCZyZWdpc3Ry
YXRpb24pKTsKICAgICBtX3JlZ2lzdHJhdGlvbnMucmVtb3ZlKCZyZWdpc3RyYXRpb24pOwogfQog
CkBAIC0xODYsMTggKzE5MSwxNCBAQCB2b2lkIE11dGF0aW9uT2JzZXJ2ZXI6OmRlbGl2ZXIoKQog
ewogICAgIEFTU0VSVChjYW5EZWxpdmVyKCkpOwogCi0gICAgLy8gQ2FsbGluZyB0YWtlVHJhbnNp
ZW50UmVnaXN0cmF0aW9ucygpIGNhbiBtb2RpZnkgbV9yZWdpc3RyYXRpb25zLCBzbyBpdCdzIG5l
Y2Vzc2FyeQotICAgIC8vIHRvIG1ha2UgYSBjb3B5IG9mIHRoZSB0cmFuc2llbnQgcmVnaXN0cmF0
aW9ucyBiZWZvcmUgb3BlcmF0aW5nIG9uIHRoZW0uCi0gICAgVmVjdG9yPE11dGF0aW9uT2JzZXJ2
ZXJSZWdpc3RyYXRpb24qLCAxPiB0cmFuc2llbnRSZWdpc3RyYXRpb25zOwogICAgIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8SGFzaFNldDxHQ1JlYWNoYWJsZVJlZjxOb2RlPj4+LCAxPiBub2Rlc1Rv
S2VlcEFsaXZlOwogICAgIEhhc2hTZXQ8R0NSZWFjaGFibGVSZWY8Tm9kZT4+IHBlbmRpbmdUYXJn
ZXRzOwogICAgIHBlbmRpbmdUYXJnZXRzLnN3YXAobV9wZW5kaW5nVGFyZ2V0cyk7Ci0gICAgZm9y
IChhdXRvKiByZWdpc3RyYXRpb24gOiBtX3JlZ2lzdHJhdGlvbnMpIHsKKyAgICBhdXRvIHJlZ2lz
dHJhdGlvbnMgPSBXVEY6Om1hcChtX3JlZ2lzdHJhdGlvbnMsIFtdKGF1dG8qIHJlZ2lzdHJhdGlv
bikgeyByZXR1cm4gbWFrZVJlZigqcmVnaXN0cmF0aW9uKTsgfSk7CisgICAgZm9yIChhdXRvJiBy
ZWdpc3RyYXRpb24gOiByZWdpc3RyYXRpb25zKSB7CiAgICAgICAgIGlmIChyZWdpc3RyYXRpb24t
Pmhhc1RyYW5zaWVudFJlZ2lzdHJhdGlvbnMoKSkKLSAgICAgICAgICAgIHRyYW5zaWVudFJlZ2lz
dHJhdGlvbnMuYXBwZW5kKHJlZ2lzdHJhdGlvbik7CisgICAgICAgICAgICBub2Rlc1RvS2VlcEFs
aXZlLmFwcGVuZChyZWdpc3RyYXRpb24tPnRha2VUcmFuc2llbnRSZWdpc3RyYXRpb25zKCkpOwog
ICAgIH0KLSAgICBmb3IgKGF1dG8mIHJlZ2lzdHJhdGlvbiA6IHRyYW5zaWVudFJlZ2lzdHJhdGlv
bnMpCi0gICAgICAgIG5vZGVzVG9LZWVwQWxpdmUuYXBwZW5kKHJlZ2lzdHJhdGlvbi0+dGFrZVRy
YW5zaWVudFJlZ2lzdHJhdGlvbnMoKSk7CiAKICAgICBpZiAobV9yZWNvcmRzLmlzRW1wdHkoKSkg
ewogICAgICAgICBBU1NFUlQobV9wZW5kaW5nVGFyZ2V0cy5pc0VtcHR5KCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uY3BwCmluZGV4
IDBlY2IwNWI0ODg2MGM3NzcxNDE4ZDhiZjlkMjYxMjkzYTg4NjVhZTMuLjNhYmFkOTVhZjdjZjk2
NDY1NzkwNTM3NWYyN2I3YmQwN2VlMWMyMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9NdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbi5jcHAKQEAgLTM3LDkgKzM3LDE0IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorUmVmPE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24+
IE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246OmNyZWF0ZShNdXRhdGlvbk9ic2VydmVyJiBv
YnNlcnZlciwgTm9kZSYgbm9kZSwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMgb3B0aW9ucywgY29u
c3QgSGFzaFNldDxBdG9tU3RyaW5nPiYgYXR0cmlidXRlRmlsdGVyKQoreworICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24ob2JzZXJ2ZXIsIG5vZGUs
IG9wdGlvbnMsIGF0dHJpYnV0ZUZpbHRlcikpOworfQorICAgIAogTXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJhdGlvbjo6TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbihNdXRhdGlvbk9ic2VydmVy
JiBvYnNlcnZlciwgTm9kZSYgbm9kZSwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMgb3B0aW9ucywg
Y29uc3QgSGFzaFNldDxBdG9tU3RyaW5nPiYgYXR0cmlidXRlRmlsdGVyKQogICAgIDogbV9vYnNl
cnZlcihvYnNlcnZlcikKLSAgICAsIG1fbm9kZShub2RlKQorICAgICwgbV9ub2RlKG1ha2VXZWFr
UHRyKG5vZGUpKQogICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCiAgICAgLCBtX2F0dHJpYnV0ZUZp
bHRlcihhdHRyaWJ1dGVGaWx0ZXIpCiB7CkBAIC02NywzMSArNzIsMjEgQEAgdm9pZCBNdXRhdGlv
bk9ic2VydmVyUmVnaXN0cmF0aW9uOjpvYnNlcnZlZFN1YnRyZWVOb2RlV2lsbERldGFjaChOb2Rl
JiBub2RlKQogICAgIG5vZGUucmVnaXN0ZXJUcmFuc2llbnRNdXRhdGlvbk9ic2VydmVyKCp0aGlz
KTsKICAgICBtX29ic2VydmVyLT5zZXRIYXNUcmFuc2llbnRSZWdpc3RyYXRpb24obm9kZS5kb2N1
bWVudCgpKTsKIAotICAgIGlmICghbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2RlcykgeworICAg
IGlmICghbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2RlcykKICAgICAgICAgbV90cmFuc2llbnRS
ZWdpc3RyYXRpb25Ob2RlcyA9IG1ha2VVbmlxdWU8SGFzaFNldDxHQ1JlYWNoYWJsZVJlZjxOb2Rl
Pj4+KCk7Ci0KLSAgICAgICAgQVNTRVJUKCFtX25vZGVLZXB0QWxpdmUpOwotICAgICAgICBtX25v
ZGVLZXB0QWxpdmUgPSAmbV9ub2RlOyAvLyBCYWxhbmNlZCBpbiB0YWtlVHJhbnNpZW50UmVnaXN0
cmF0aW9ucy4KLSAgICB9CiAgICAgbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2Rlcy0+YWRkKG5v
ZGUpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8SGFzaFNldDxHQ1JlYWNoYWJsZVJlZjxOb2RlPj4+
IE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246OnRha2VUcmFuc2llbnRSZWdpc3RyYXRpb25z
KCkKIHsKLSAgICBpZiAoIW1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9kZXMpIHsKLSAgICAgICAg
QVNTRVJUKCFtX25vZGVLZXB0QWxpdmUpOworICAgIGlmICghbV90cmFuc2llbnRSZWdpc3RyYXRp
b25Ob2RlcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQogCi0gICAgZm9yIChhdXRv
JiBub2RlIDogKm1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9kZXMpCisgICAgYXV0byB0cmFuc2ll
bnROb2RlcyA9IFdURk1vdmUobV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2Rlcyk7CisgICAgZm9y
IChhdXRvJiBub2RlIDogKnRyYW5zaWVudE5vZGVzKQogICAgICAgICBub2RlLT51bnJlZ2lzdGVy
VHJhbnNpZW50TXV0YXRpb25PYnNlcnZlcigqdGhpcyk7CiAKLSAgICBhdXRvIHJldHVyblZhbHVl
ID0gV1RGTW92ZShtX3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzKTsKLQotICAgIEFTU0VSVCht
X25vZGVLZXB0QWxpdmUpOwotICAgIG1fbm9kZUtlcHRBbGl2ZSA9IG51bGxwdHI7IC8vIEJhbGFu
Y2VkIGluIG9ic2VydmVTdWJ0cmVlTm9kZVdpbGxEZXRhY2guCi0KLSAgICByZXR1cm4gcmV0dXJu
VmFsdWU7CisgICAgcmV0dXJuIHRyYW5zaWVudE5vZGVzOwogfQogCiBib29sIE11dGF0aW9uT2Jz
ZXJ2ZXJSZWdpc3RyYXRpb246OnNob3VsZFJlY2VpdmVNdXRhdGlvbkZyb20oTm9kZSYgbm9kZSwg
TXV0YXRpb25PYnNlcnZlcjo6TXV0YXRpb25UeXBlIHR5cGUsIGNvbnN0IFF1YWxpZmllZE5hbWUq
IGF0dHJpYnV0ZU5hbWUpIGNvbnN0CkBAIC0xMDAsNyArOTUsNyBAQCBib29sIE11dGF0aW9uT2Jz
ZXJ2ZXJSZWdpc3RyYXRpb246OnNob3VsZFJlY2VpdmVNdXRhdGlvbkZyb20oTm9kZSYgbm9kZSwg
TXV0YXRpbwogICAgIGlmICghKG1fb3B0aW9ucyAmIHR5cGUpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAoJm1fbm9kZSAhPSAmbm9kZSAmJiAhaXNTdWJ0cmVlKCkpCisgICAgaWYg
KG1fbm9kZS5nZXQoKSAhPSAmbm9kZSAmJiAhaXNTdWJ0cmVlKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGlmICh0eXBlICE9IE11dGF0aW9uT2JzZXJ2ZXI6OkF0dHJpYnV0ZXMgfHwg
IShtX29wdGlvbnMgJiBNdXRhdGlvbk9ic2VydmVyOjpBdHRyaWJ1dGVGaWx0ZXIpKQpAQCAtMTE0
LDcgKzEwOSw5IEBAIGJvb2wgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6c2hvdWxkUmVj
ZWl2ZU11dGF0aW9uRnJvbShOb2RlJiBub2RlLCBNdXRhdGlvCiAKIHZvaWQgTXV0YXRpb25PYnNl
cnZlclJlZ2lzdHJhdGlvbjo6YWRkUmVnaXN0cmF0aW9uTm9kZXNUb1NldChIYXNoU2V0PE5vZGUq
PiYgbm9kZXMpIGNvbnN0CiB7Ci0gICAgbm9kZXMuYWRkKCZtX25vZGUpOworICAgIEFTU0VSVCht
X25vZGUuZ2V0KCkgfHwgbV90cmFuc2llbnRSZWdpc3RyYXRpb25Ob2Rlcyk7CisgICAgaWYgKGF1
dG8qIG9ic2VydmVkTm9kZSA9IG1fbm9kZS5nZXQoKSkKKyAgICAgICAgbm9kZXMuYWRkKG9ic2Vy
dmVkTm9kZSk7CiAgICAgaWYgKCFtX3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzKQogICAgICAg
ICByZXR1cm47CiAgICAgZm9yIChhdXRvJiBub2RlIDogKm1fdHJhbnNpZW50UmVnaXN0cmF0aW9u
Tm9kZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdpc3Ry
YXRpb24uaAppbmRleCBlNjk0MDQ4M2EzMTNjOGZkMWJkMTZkYzE3Y2I5NmIxM2FjZDIyYTNhLi4x
YTVmN2I3ZmE0YjUxMjY5OGU4YjkyNTRjMGI5NzExOWZlNmRlNDQxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmgKQEAgLTMzLDYgKzMz
LDcgQEAKICNpbmNsdWRlICJHQ1JlYWNoYWJsZVJlZi5oIgogI2luY2x1ZGUgIk11dGF0aW9uT2Jz
ZXJ2ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L0F0b21TdHJpbmdIYXNoLmg+CiAKQEAgLTQwLDEwICs0MSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIFF1YWxpZmllZE5hbWU7CiAKLWNsYXNzIE11dGF0aW9uT2JzZXJ2ZXJSZWdp
c3RyYXRpb24geworY2xhc3MgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbiA6IHB1YmxpYyBS
ZWZDb3VudGVkPE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24+IHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9u
KE11dGF0aW9uT2JzZXJ2ZXImLCBOb2RlJiwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMsIGNvbnN0
IEhhc2hTZXQ8QXRvbVN0cmluZz4mIGF0dHJpYnV0ZUZpbHRlcik7CisgICAgc3RhdGljIFJlZjxN
dXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPiBjcmVhdGUoTXV0YXRpb25PYnNlcnZlciYsIE5v
ZGUmLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucywgY29uc3QgSGFzaFNldDxBdG9tU3RyaW5nPiYg
YXR0cmlidXRlRmlsdGVyKTsKKwogICAgIH5NdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKCk7
CiAKICAgICB2b2lkIHJlc2V0T2JzZXJ2YXRpb24oTXV0YXRpb25PYnNlcnZlck9wdGlvbnMsIGNv
bnN0IEhhc2hTZXQ8QXRvbVN0cmluZz4mIGF0dHJpYnV0ZUZpbHRlcik7CkBAIC01NSwxNiArNTcs
MTcgQEAgcHVibGljOgogICAgIGJvb2wgaXNTdWJ0cmVlKCkgY29uc3QgeyByZXR1cm4gbV9vcHRp
b25zICYgTXV0YXRpb25PYnNlcnZlcjo6U3VidHJlZTsgfQogCiAgICAgTXV0YXRpb25PYnNlcnZl
ciYgb2JzZXJ2ZXIoKSB7IHJldHVybiBtX29ic2VydmVyLmdldCgpOyB9Ci0gICAgTm9kZSYgbm9k
ZSgpIHsgcmV0dXJuIG1fbm9kZTsgfQorICAgIE5vZGUqIG5vZGUoKSB7IHJldHVybiBtX25vZGUu
Z2V0KCk7IH0KICAgICBNdXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0aW9ucyBkZWxpdmVyeU9wdGlv
bnMoKSBjb25zdCB7IHJldHVybiBtX29wdGlvbnMgJiAoTXV0YXRpb25PYnNlcnZlcjo6QXR0cmli
dXRlT2xkVmFsdWUgfCBNdXRhdGlvbk9ic2VydmVyOjpDaGFyYWN0ZXJEYXRhT2xkVmFsdWUpOyB9
CiAgICAgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMgbXV0YXRpb25UeXBlcygpIGNvbnN0IHsgcmV0
dXJuIG1fb3B0aW9ucyAmIE11dGF0aW9uT2JzZXJ2ZXI6OkFsbE11dGF0aW9uVHlwZXM7IH0KIAog
ICAgIHZvaWQgYWRkUmVnaXN0cmF0aW9uTm9kZXNUb1NldChIYXNoU2V0PE5vZGUqPiYpIGNvbnN0
OwogCiBwcml2YXRlOgorICAgIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24oTXV0YXRpb25P
YnNlcnZlciYsIE5vZGUmLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucywgY29uc3QgSGFzaFNldDxB
dG9tU3RyaW5nPiYgYXR0cmlidXRlRmlsdGVyKTsKKwogICAgIFJlZjxNdXRhdGlvbk9ic2VydmVy
PiBtX29ic2VydmVyOwotICAgIE5vZGUmIG1fbm9kZTsKLSAgICBSZWZQdHI8Tm9kZT4gbV9ub2Rl
S2VwdEFsaXZlOworICAgIFdlYWtQdHI8Tm9kZT4gbV9ub2RlOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxIYXNoU2V0PEdDUmVhY2hhYmxlUmVmPE5vZGU+Pj4gbV90cmFuc2llbnRSZWdpc3RyYXRpb25O
b2RlczsKICAgICBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyBtX29wdGlvbnM7CiAgICAgSGFzaFNl
dDxBdG9tU3RyaW5nPiBtX2F0dHJpYnV0ZUZpbHRlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCBlODdi
MDkzODQxOTM3ZDgzNTg4YTE0YTlhMzg1MWIzNjA2MmRlNGFhLi5kZDk3YjlhYmE0MjdhNzk0Njdl
OTY3YjE1ZTg0YzRhMWExMzhhNTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC00MjksOCArNDI5LDcg
QEAgaW5saW5lIHZvaWQgTm9kZTo6Tm9kZVJhcmVEYXRhRGVsZXRlcjo6b3BlcmF0b3IoKShOb2Rl
UmFyZURhdGEqIHJhcmVEYXRhKSBjb25zdAogdm9pZCBOb2RlOjpjbGVhclJhcmVEYXRhKCkKIHsK
ICAgICBBU1NFUlQoaGFzUmFyZURhdGEoKSk7Ci0gICAgQVNTRVJUKCF0cmFuc2llbnRNdXRhdGlv
bk9ic2VydmVyUmVnaXN0cnkoKSB8fCB0cmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnko
KS0+aXNFbXB0eSgpKTsKLQorICAgIEFTU0VSVChyYXJlRGF0YSgpLT50cmFuc2llbnRNdXRhdGlv
bk9ic2VydmVyUmVnaXN0cnkoKS5pc0VtcHR5KCkpOwogICAgIG1fcmFyZURhdGFXaXRoQml0Zmll
bGRzLnNldFBvaW50ZXIobnVsbHB0cik7CiB9CiAKQEAgLTIwMzUsMTkgKzIwMzQsMTUgQEAgdm9p
ZCBOb2RlOjptb3ZlTm9kZVRvTmV3RG9jdW1lbnQoRG9jdW1lbnQmIG9sZERvY3VtZW50LCBEb2N1
bWVudCYgbmV3RG9jdW1lbnQpCiAgICAgb2xkRG9jdW1lbnQuZGVjcmVtZW50UmVmZXJlbmNpbmdO
b2RlQ291bnQoKTsKIAogICAgIGlmIChoYXNSYXJlRGF0YSgpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBub2RlTGlzdHMgPSByYXJlRGF0YSgpLT5ub2RlTGlzdHMoKSkKKyAgICAgICAgYXV0byogcmFy
ZURhdGEgPSB0aGlzLT5yYXJlRGF0YSgpOworICAgICAgICBpZiAoYXV0byogbm9kZUxpc3RzID0g
cmFyZURhdGEtPm5vZGVMaXN0cygpKQogICAgICAgICAgICAgbm9kZUxpc3RzLT5hZG9wdERvY3Vt
ZW50KG9sZERvY3VtZW50LCBuZXdEb2N1bWVudCk7Ci0gICAgICAgIGlmIChhdXRvKiByZWdpc3Ry
eSA9IG11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpKSB7CisgICAgICAgIGlmIChhdXRvKiByZWdp
c3RyeSA9IHJhcmVEYXRhLT5tdXRhdGlvbk9ic2VydmVyUmVnaXN0cnlJZkV4aXN0cygpKSB7CiAg
ICAgICAgICAgICBmb3IgKGF1dG8mIHJlZ2lzdHJhdGlvbiA6ICpyZWdpc3RyeSkKICAgICAgICAg
ICAgICAgICBuZXdEb2N1bWVudC5hZGRNdXRhdGlvbk9ic2VydmVyVHlwZXMocmVnaXN0cmF0aW9u
LT5tdXRhdGlvblR5cGVzKCkpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChhdXRvKiB0cmFuc2ll
bnRSZWdpc3RyeSA9IHRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpKSB7Ci0gICAg
ICAgICAgICBmb3IgKGF1dG8mIHJlZ2lzdHJhdGlvbiA6ICp0cmFuc2llbnRSZWdpc3RyeSkKLSAg
ICAgICAgICAgICAgICBuZXdEb2N1bWVudC5hZGRNdXRhdGlvbk9ic2VydmVyVHlwZXMocmVnaXN0
cmF0aW9uLT5tdXRhdGlvblR5cGVzKCkpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgQVNTRVJUKCFtdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSk7Ci0gICAgICAgIEFTU0VSVCgh
dHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkpOworICAgICAgICBmb3IgKGF1dG8m
IHJlZ2lzdHJhdGlvbiA6IHJhcmVEYXRhLT50cmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0
cnkoKSkKKyAgICAgICAgICAgIG5ld0RvY3VtZW50LmFkZE11dGF0aW9uT2JzZXJ2ZXJUeXBlcyhy
ZWdpc3RyYXRpb24tPm11dGF0aW9uVHlwZXMoKSk7CiAgICAgfQogCiAgICAgb2xkRG9jdW1lbnQu
bW92ZU5vZGVJdGVyYXRvcnNUb05ld0RvY3VtZW50KCp0aGlzLCBuZXdEb2N1bWVudCk7CkBAIC0y
MjQ3LDMyICsyMjQyLDkgQEAgdm9pZCBOb2RlOjpjbGVhckV2ZW50VGFyZ2V0RGF0YSgpCiAgICAg
ZXZlbnRUYXJnZXREYXRhTWFwKCkucmVtb3ZlKHRoaXMpOwogfQogCi1WZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24+PiogTm9kZTo6bXV0YXRpb25PYnNl
cnZlclJlZ2lzdHJ5KCkKLXsKLSAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIGF1dG8qIGRhdGEgPSByYXJlRGF0YSgpLT5tdXRhdGlvbk9ic2VydmVy
RGF0YSgpOwotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0
dXJuICZkYXRhLT5yZWdpc3RyeTsKLX0KLQotSGFzaFNldDxNdXRhdGlvbk9ic2VydmVyUmVnaXN0
cmF0aW9uKj4qIE5vZGU6OnRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBSZWdpc3RyeT4gc3RhdGljIGlubGluZSB2b2lkIGNvbGxlY3RNYXRjaGlu
Z09ic2VydmVyc0Zvck11dGF0aW9uKEhhc2hNYXA8UmVmPE11dGF0aW9uT2JzZXJ2ZXI+LCBNdXRh
dGlvblJlY29yZERlbGl2ZXJ5T3B0aW9ucz4mIG9ic2VydmVycywgUmVnaXN0cnkmIHJlZ2lzdHJ5
LCBOb2RlJiB0YXJnZXQsIE11dGF0aW9uT2JzZXJ2ZXI6Ok11dGF0aW9uVHlwZSB0eXBlLCBjb25z
dCBRdWFsaWZpZWROYW1lKiBhdHRyaWJ1dGVOYW1lKQogewotICAgIGlmICghaGFzUmFyZURhdGEo
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byogZGF0YSA9IHJhcmVEYXRhKCkt
Pm11dGF0aW9uT2JzZXJ2ZXJEYXRhKCk7Ci0gICAgaWYgKCFkYXRhKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICByZXR1cm4gJmRhdGEtPnRyYW5zaWVudFJlZ2lzdHJ5OwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBSZWdpc3RyeT4gc3RhdGljIGlubGluZSB2b2lkIGNvbGxlY3RNYXRjaGlu
Z09ic2VydmVyc0Zvck11dGF0aW9uKEhhc2hNYXA8UmVmPE11dGF0aW9uT2JzZXJ2ZXI+LCBNdXRh
dGlvblJlY29yZERlbGl2ZXJ5T3B0aW9ucz4mIG9ic2VydmVycywgUmVnaXN0cnkqIHJlZ2lzdHJ5
LCBOb2RlJiB0YXJnZXQsIE11dGF0aW9uT2JzZXJ2ZXI6Ok11dGF0aW9uVHlwZSB0eXBlLCBjb25z
dCBRdWFsaWZpZWROYW1lKiBhdHRyaWJ1dGVOYW1lKQotewotICAgIGlmICghcmVnaXN0cnkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGZvciAoYXV0byYgcmVnaXN0cmF0aW9uIDogKnJlZ2lzdHJ5
KSB7CisgICAgZm9yIChhdXRvJiByZWdpc3RyYXRpb24gOiByZWdpc3RyeSkgewogICAgICAgICBp
ZiAocmVnaXN0cmF0aW9uLT5zaG91bGRSZWNlaXZlTXV0YXRpb25Gcm9tKHRhcmdldCwgdHlwZSwg
YXR0cmlidXRlTmFtZSkpIHsKICAgICAgICAgICAgIGF1dG8gZGVsaXZlcnlPcHRpb25zID0gcmVn
aXN0cmF0aW9uLT5kZWxpdmVyeU9wdGlvbnMoKTsKICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0g
b2JzZXJ2ZXJzLmFkZChyZWdpc3RyYXRpb24tPm9ic2VydmVyKCksIGRlbGl2ZXJ5T3B0aW9ucyk7
CkBAIC0yMjg2LDYxICsyMjU4LDUzIEBAIEhhc2hNYXA8UmVmPE11dGF0aW9uT2JzZXJ2ZXI+LCBN
dXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0aW9ucz4gTm9kZTo6cmVnaXN0ZXJlZE11CiB7CiAgICAg
SGFzaE1hcDxSZWY8TXV0YXRpb25PYnNlcnZlcj4sIE11dGF0aW9uUmVjb3JkRGVsaXZlcnlPcHRp
b25zPiByZXN1bHQ7CiAgICAgQVNTRVJUKCh0eXBlID09IE11dGF0aW9uT2JzZXJ2ZXI6OkF0dHJp
YnV0ZXMgJiYgYXR0cmlidXRlTmFtZSkgfHwgIWF0dHJpYnV0ZU5hbWUpOwotICAgIGNvbGxlY3RN
YXRjaGluZ09ic2VydmVyc0Zvck11dGF0aW9uKHJlc3VsdCwgbXV0YXRpb25PYnNlcnZlclJlZ2lz
dHJ5KCksICp0aGlzLCB0eXBlLCBhdHRyaWJ1dGVOYW1lKTsKLSAgICBjb2xsZWN0TWF0Y2hpbmdP
YnNlcnZlcnNGb3JNdXRhdGlvbihyZXN1bHQsIHRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdp
c3RyeSgpLCAqdGhpcywgdHlwZSwgYXR0cmlidXRlTmFtZSk7Ci0gICAgZm9yIChOb2RlKiBub2Rl
ID0gcGFyZW50Tm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAg
ICAgIGNvbGxlY3RNYXRjaGluZ09ic2VydmVyc0Zvck11dGF0aW9uKHJlc3VsdCwgbm9kZS0+bXV0
YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCksICp0aGlzLCB0eXBlLCBhdHRyaWJ1dGVOYW1lKTsKLSAg
ICAgICAgY29sbGVjdE1hdGNoaW5nT2JzZXJ2ZXJzRm9yTXV0YXRpb24ocmVzdWx0LCBub2RlLT50
cmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSwgKnRoaXMsIHR5cGUsIGF0dHJpYnV0
ZU5hbWUpOworICAgIGZvciAoYXV0byBub2RlID0gbWFrZVJlZlB0cih0aGlzKTsgbm9kZTsgbm9k
ZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgeworICAgICAgICBpZiAoIW5vZGUtPmhhc1JhcmVEYXRh
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYXV0byogcmFyZURhdGEgPSBub2Rl
LT5yYXJlRGF0YSgpOworICAgICAgICBpZiAoYXV0byogcmVnaXN0cnkgPSByYXJlRGF0YS0+bXV0
YXRpb25PYnNlcnZlclJlZ2lzdHJ5SWZFeGlzdHMoKSkKKyAgICAgICAgICAgIGNvbGxlY3RNYXRj
aGluZ09ic2VydmVyc0Zvck11dGF0aW9uKHJlc3VsdCwgKnJlZ2lzdHJ5LCAqdGhpcywgdHlwZSwg
YXR0cmlidXRlTmFtZSk7CisgICAgICAgIGNvbGxlY3RNYXRjaGluZ09ic2VydmVyc0Zvck11dGF0
aW9uKHJlc3VsdCwgcmFyZURhdGEtPnRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgp
LCAqdGhpcywgdHlwZSwgYXR0cmlidXRlTmFtZSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKIHZvaWQgTm9kZTo6cmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKE11dGF0aW9uT2JzZXJ2
ZXImIG9ic2VydmVyLCBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyBvcHRpb25zLCBjb25zdCBIYXNo
U2V0PEF0b21TdHJpbmc+JiBhdHRyaWJ1dGVGaWx0ZXIpCiB7Ci0gICAgTXV0YXRpb25PYnNlcnZl
clJlZ2lzdHJhdGlvbiogcmVnaXN0cmF0aW9uID0gbnVsbHB0cjsKLSAgICBhdXRvJiByZWdpc3Ry
eSA9IGVuc3VyZVJhcmVEYXRhKCkuZW5zdXJlTXV0YXRpb25PYnNlcnZlckRhdGEoKS5yZWdpc3Ry
eTsKLQotICAgIGZvciAoYXV0byYgY2FuZGlkYXRlUmVnaXN0cmF0aW9uIDogcmVnaXN0cnkpIHsK
LSAgICAgICAgaWYgKCZjYW5kaWRhdGVSZWdpc3RyYXRpb24tPm9ic2VydmVyKCkgPT0gJm9ic2Vy
dmVyKSB7Ci0gICAgICAgICAgICByZWdpc3RyYXRpb24gPSBjYW5kaWRhdGVSZWdpc3RyYXRpb24u
Z2V0KCk7Ci0gICAgICAgICAgICByZWdpc3RyYXRpb24tPnJlc2V0T2JzZXJ2YXRpb24ob3B0aW9u
cywgYXR0cmlidXRlRmlsdGVyKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghcmVnaXN0
cmF0aW9uKSB7Ci0gICAgICAgIHJlZ2lzdHJ5LmFwcGVuZChtYWtlVW5pcXVlPE11dGF0aW9uT2Jz
ZXJ2ZXJSZWdpc3RyYXRpb24+KG9ic2VydmVyLCAqdGhpcywgb3B0aW9ucywgYXR0cmlidXRlRmls
dGVyKSk7Ci0gICAgICAgIHJlZ2lzdHJhdGlvbiA9IHJlZ2lzdHJ5Lmxhc3QoKS5nZXQoKTsKKyAg
ICBhdXRvJiByZWdpc3RyeSA9IGVuc3VyZVJhcmVEYXRhKCkubXV0YXRpb25PYnNlcnZlclJlZ2lz
dHJ5KCk7CisgICAgYXV0byBpbmRleCA9IHJlZ2lzdHJ5LmZpbmRNYXRjaGluZyhbJm9ic2VydmVy
XShhdXRvJiByZWdpc3RyYXRpb24pIHsgcmV0dXJuICZyZWdpc3RyYXRpb24tPm9ic2VydmVyKCkg
PT0gJm9ic2VydmVyOyB9KTsKKyAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpIHsKKyAgICAgICAg
YXV0byByZWdpc3RyYXRpb24gPSByZWdpc3RyeVtpbmRleF0uY29weVJlZigpOworICAgICAgICBy
ZWdpc3RyYXRpb24tPnJlc2V0T2JzZXJ2YXRpb24ob3B0aW9ucywgYXR0cmlidXRlRmlsdGVyKTsK
KyAgICAgICAgZG9jdW1lbnQoKS5hZGRNdXRhdGlvbk9ic2VydmVyVHlwZXMocmVnaXN0cmF0aW9u
LT5tdXRhdGlvblR5cGVzKCkpOworICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAgZG9jdW1l
bnQoKS5hZGRNdXRhdGlvbk9ic2VydmVyVHlwZXMocmVnaXN0cmF0aW9uLT5tdXRhdGlvblR5cGVz
KCkpOworICAgIGF1dG8gbmV3UmVnaXN0cmF0aW9uID0gTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJh
dGlvbjo6Y3JlYXRlKG9ic2VydmVyLCAqdGhpcywgb3B0aW9ucywgYXR0cmlidXRlRmlsdGVyKTsK
KyAgICBkb2N1bWVudCgpLmFkZE11dGF0aW9uT2JzZXJ2ZXJUeXBlcyhuZXdSZWdpc3RyYXRpb24t
Pm11dGF0aW9uVHlwZXMoKSk7CisgICAgcmVnaXN0cnkuYXBwZW5kKFdURk1vdmUobmV3UmVnaXN0
cmF0aW9uKSk7CiB9CiAKIHZvaWQgTm9kZTo6dW5yZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIoTXV0
YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbiYgcmVnaXN0cmF0aW9uKQogewotICAgIGF1dG8qIHJl
Z2lzdHJ5ID0gbXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCk7Ci0gICAgQVNTRVJUKHJlZ2lzdHJ5
KTsKLSAgICBpZiAoIXJlZ2lzdHJ5KQotICAgICAgICByZXR1cm47Ci0KLSAgICByZWdpc3RyeS0+
cmVtb3ZlRmlyc3RNYXRjaGluZyhbJnJlZ2lzdHJhdGlvbl0gKGF1dG8mIGN1cnJlbnQpIHsKLSAg
ICAgICAgcmV0dXJuIGN1cnJlbnQuZ2V0KCkgPT0gJnJlZ2lzdHJhdGlvbjsKKyAgICBSRUxFQVNF
X0FTU0VSVChoYXNSYXJlRGF0YSgpKTsKKyAgICBhdXRvKiByZWdpc3RyeSA9IHJhcmVEYXRhKCkt
Pm11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeUlmRXhpc3RzKCk7CisgICAgUkVMRUFTRV9BU1NFUlQo
cmVnaXN0cnkpOworICAgIGF1dG8gcmVtb3ZlZCA9IHJlZ2lzdHJ5LT5yZW1vdmVGaXJzdE1hdGNo
aW5nKFsmcmVnaXN0cmF0aW9uXSAoYXV0byYgY3VycmVudCkgeworICAgICAgICByZXR1cm4gY3Vy
cmVudC5wdHIoKSA9PSAmcmVnaXN0cmF0aW9uOwogICAgIH0pOworICAgIFJFTEVBU0VfQVNTRVJU
KHJlbW92ZWQpOwogfQogCiB2b2lkIE5vZGU6OnJlZ2lzdGVyVHJhbnNpZW50TXV0YXRpb25PYnNl
cnZlcihNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uJiByZWdpc3RyYXRpb24pCiB7Ci0gICAg
ZW5zdXJlUmFyZURhdGEoKS5lbnN1cmVNdXRhdGlvbk9ic2VydmVyRGF0YSgpLnRyYW5zaWVudFJl
Z2lzdHJ5LmFkZCgmcmVnaXN0cmF0aW9uKTsKKyAgICBlbnN1cmVSYXJlRGF0YSgpLnRyYW5zaWVu
dE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpLmFkZChyZWdpc3RyYXRpb24pOwogfQogCiB2b2lk
IE5vZGU6OnVucmVnaXN0ZXJUcmFuc2llbnRNdXRhdGlvbk9ic2VydmVyKE11dGF0aW9uT2JzZXJ2
ZXJSZWdpc3RyYXRpb24mIHJlZ2lzdHJhdGlvbikKIHsKLSAgICBhdXRvKiB0cmFuc2llbnRSZWdp
c3RyeSA9IHRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpOwotICAgIEFTU0VSVCh0
cmFuc2llbnRSZWdpc3RyeSk7Ci0gICAgaWYgKCF0cmFuc2llbnRSZWdpc3RyeSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQVNTRVJUKHRyYW5zaWVudFJlZ2lzdHJ5LT5jb250YWlucygmcmVnaXN0
cmF0aW9uKSk7Ci0gICAgdHJhbnNpZW50UmVnaXN0cnktPnJlbW92ZSgmcmVnaXN0cmF0aW9uKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChoYXNSYXJlRGF0YSgpKTsKKyAgICBib29sIHJlbW92ZWQgPSBy
YXJlRGF0YSgpLT50cmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKS5yZW1vdmUoJnJl
Z2lzdHJhdGlvbik7CisgICAgUkVMRUFTRV9BU1NFUlQocmVtb3ZlZCk7CiB9CiAKIHZvaWQgTm9k
ZTo6bm90aWZ5TXV0YXRpb25PYnNlcnZlcnNOb2RlV2lsbERldGFjaCgpCkBAIC0yMzQ5LDE0ICsy
MzEzLDE1IEBAIHZvaWQgTm9kZTo6bm90aWZ5TXV0YXRpb25PYnNlcnZlcnNOb2RlV2lsbERldGFj
aCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAoTm9kZSogbm9kZSA9IHBhcmVudE5vZGUo
KTsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoYXV0byog
cmVnaXN0cnkgPSBub2RlLT5tdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSkgeworICAgICAgICBp
ZiAoIW5vZGUtPmhhc1JhcmVEYXRhKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
YXV0byogcmFyZURhdGEgPSBub2RlLT5yYXJlRGF0YSgpOworICAgICAgICBpZiAoYXV0byogcmVn
aXN0cnkgPSByYXJlRGF0YS0+bXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5SWZFeGlzdHMoKSkgewog
ICAgICAgICAgICAgZm9yIChhdXRvJiByZWdpc3RyYXRpb24gOiAqcmVnaXN0cnkpCiAgICAgICAg
ICAgICAgICAgcmVnaXN0cmF0aW9uLT5vYnNlcnZlZFN1YnRyZWVOb2RlV2lsbERldGFjaCgqdGhp
cyk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGF1dG8qIHRyYW5zaWVudFJlZ2lzdHJ5ID0gbm9k
ZS0+dHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkpIHsKLSAgICAgICAgICAgIGZv
ciAoYXV0byogcmVnaXN0cmF0aW9uIDogKnRyYW5zaWVudFJlZ2lzdHJ5KQotICAgICAgICAgICAg
ICAgIHJlZ2lzdHJhdGlvbi0+b2JzZXJ2ZWRTdWJ0cmVlTm9kZVdpbGxEZXRhY2goKnRoaXMpOwot
ICAgICAgICB9CisgICAgICAgIGZvciAoYXV0byYgcmVnaXN0cmF0aW9uIDogcmFyZURhdGEtPnRy
YW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpKQorICAgICAgICAgICAgcmVnaXN0cmF0
aW9uLT5vYnNlcnZlZFN1YnRyZWVOb2RlV2lsbERldGFjaCgqdGhpcyk7CiAgICAgfQogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9t
L05vZGUuaAppbmRleCBkMDA1NTVkYWRhM2M5NDM3NzEzNzQ3MGY2ODkzZmVkZDczNTY2Y2UyLi5h
ZWIyZjZjZTM1ZTQ2YTM3NjY5OTVkMDgyODA3YmRjZmJiYzVmNGU2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAg
LTY5OSw5ICs2OTksNiBAQCBwcml2YXRlOgogICAgIHZvaWQgdHJhY2tGb3JEZWJ1Z2dpbmcoKTsK
ICAgICB2b2lkIG1hdGVyaWFsaXplUmFyZURhdGEoKTsKIAotICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbj4+KiBtdXRhdGlvbk9ic2VydmVyUmVn
aXN0cnkoKTsKLSAgICBIYXNoU2V0PE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qPiogdHJh
bnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCk7Ci0KICAgICB2b2lkIGFkanVzdFN0eWxl
VmFsaWRpdHkoU3R5bGU6OlZhbGlkaXR5LCBTdHlsZTo6SW52YWxpZGF0aW9uTW9kZSk7CiAKICAg
ICB2b2lkKiBvcGFxdWVSb290U2xvdygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL05vZGVSYXJlRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRh
LmNwcAppbmRleCA5MjhkYTQzNmU3ZjAyZWI2ZTM2NjEwYWUyMjc1OWMxNmEzZWIwZDk4Li40YjUx
OThhZDczZDI1MzQ1NGU4ZDRmMDcxYWJiZDZkOGZjZTg5NDhiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZVJhcmVEYXRhLmNwcApAQCAtMzgsNyArMzgsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3Ry
dWN0IFNhbWVTaXplQXNOb2RlUmFyZURhdGEgewogICAgIHVpbnQzMl90IG1fdGFiSW5kZXg7CiAg
ICAgdWludDMyX3QgbV9jaGlsZEluZGV4QW5kSXNFbGVtZW50UmFyZURhdGFGbGFnOwotICAgIHZv
aWQqIG1fcG9pbnRlclsyXTsKKyAgICB2b2lkKiBtX3BvaW50ZXJbM107CisjaWYgQ0hFQ0tfSEFT
SFRBQkxFX0lURVJBVE9SUworICAgIHZvaWQqIG1faGFzaFRhYmxlSXRlcmF0b3JzQW5kTXV0ZXhb
Ml07CisjZW5kaWYKIH07CiAKIENPTVBJTEVfQVNTRVJUKHNpemVvZihOb2RlUmFyZURhdGEpID09
IHNpemVvZihTYW1lU2l6ZUFzTm9kZVJhcmVEYXRhKSwgTm9kZVJhcmVEYXRhU2hvdWxkU3RheVNt
YWxsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAppbmRleCAwZWZiMzM5ZDE3YjRkMGRkNDE1
OGEyNjhhYmI0MDRlYjcyMGZmNWMxLi4zMWEzMmRjYjUyNDY0OTBkNzg5OTI3NmIzNmEwN2RkZDlm
ODk4YzQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCkBAIC0yMjksMTUgKzIyOSw2IEBA
IHByaXZhdGU6CiAgICAgQ29sbGVjdGlvbkNhY2hlTWFwIG1fY2FjaGVkQ29sbGVjdGlvbnM7CiB9
OwogCi1jbGFzcyBOb2RlTXV0YXRpb25PYnNlcnZlckRhdGEgewotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKE5vZGVNdXRhdGlvbk9ic2VydmVyRGF0YSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwotcHVibGljOgotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJhdGlvbj4+IHJlZ2lzdHJ5OwotICAgIEhhc2hTZXQ8TXV0YXRpb25PYnNlcnZlclJlZ2lz
dHJhdGlvbio+IHRyYW5zaWVudFJlZ2lzdHJ5OwotCi0gICAgTm9kZU11dGF0aW9uT2JzZXJ2ZXJE
YXRhKCkgeyB9Ci19OwotCiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihO
b2RlUmFyZURhdGEpOwogY2xhc3MgTm9kZVJhcmVEYXRhIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShOb2RlUmFyZURhdGEpOwpAQCAtMjg0LDEyICsyNzUsMjEgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gKm1fbm9kZUxpc3RzOwogICAgIH0KIAotICAgIE5vZGVNdXRhdGlvbk9ic2VydmVy
RGF0YSogbXV0YXRpb25PYnNlcnZlckRhdGEoKSB7IHJldHVybiBtX211dGF0aW9uT2JzZXJ2ZXJE
YXRhLmdldCgpOyB9Ci0gICAgTm9kZU11dGF0aW9uT2JzZXJ2ZXJEYXRhJiBlbnN1cmVNdXRhdGlv
bk9ic2VydmVyRGF0YSgpCisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgTXV0YXRpb25PYnNl
cnZlclJlZ2lzdHJ5SW5saW5lU2l6ZSA9IDQ7CisKKyAgICBWZWN0b3I8UmVmPE11dGF0aW9uT2Jz
ZXJ2ZXJSZWdpc3RyYXRpb24+LCBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnlJbmxpbmVTaXplPiYg
bXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkKKyAgICB7CisgICAgICAgIGlmICghbV9tdXRhdGlv
bk9ic2VydmVyUmVnaXN0cnkpCisgICAgICAgICAgICBtX211dGF0aW9uT2JzZXJ2ZXJSZWdpc3Ry
eSA9IG1ha2VVbmlxdWU8VmVjdG9yPFJlZjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPiwg
TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5SW5saW5lU2l6ZT4+KCk7CisgICAgICAgIHJldHVybiAq
bV9tdXRhdGlvbk9ic2VydmVyUmVnaXN0cnk7CisgICAgfQorICAgIFZlY3RvcjxSZWY8TXV0YXRp
b25PYnNlcnZlclJlZ2lzdHJhdGlvbj4sIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeUlubGluZVNp
emU+KiBtdXRhdGlvbk9ic2VydmVyUmVnaXN0cnlJZkV4aXN0cygpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9tdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkuZ2V0KCk7CisgICAgfQorICAgIEhhc2hT
ZXQ8UmVmPE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24+PiYgdHJhbnNpZW50TXV0YXRpb25P
YnNlcnZlclJlZ2lzdHJ5KCkKICAgICB7Ci0gICAgICAgIGlmICghbV9tdXRhdGlvbk9ic2VydmVy
RGF0YSkKLSAgICAgICAgICAgIG1fbXV0YXRpb25PYnNlcnZlckRhdGEgPSBtYWtlVW5pcXVlPE5v
ZGVNdXRhdGlvbk9ic2VydmVyRGF0YT4oKTsKLSAgICAgICAgcmV0dXJuICptX211dGF0aW9uT2Jz
ZXJ2ZXJEYXRhOworICAgICAgICByZXR1cm4gbV90cmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVn
aXN0cnk7CiAgICAgfQogCiAjaWYgRFVNUF9OT0RFX1NUQVRJU1RJQ1MKQEAgLTI5OCw3ICsyOTgs
NyBAQCBwdWJsaWM6CiAgICAgICAgIE9wdGlvblNldDxVc2VUeXBlPiByZXN1bHQ7CiAgICAgICAg
IGlmIChtX25vZGVMaXN0cykKICAgICAgICAgICAgIHJlc3VsdC5hZGQoVXNlVHlwZTo6Tm9kZUxp
c3QpOwotICAgICAgICBpZiAobV9tdXRhdGlvbk9ic2VydmVyRGF0YSkKKyAgICAgICAgaWYgKG1f
bXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5IHx8IG1fdHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJ5LmNhcGFjaXR5KCkpCiAgICAgICAgICAgICByZXN1bHQuYWRkKFVzZVR5cGU6Ok11dGF0
aW9uT2JzZXJ2ZXIpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTMxMyw3ICsz
MTMsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0VsZW1lbnRSYXJlRGF0YTsKIAogICAgIHN0
ZDo6dW5pcXVlX3B0cjxOb2RlTGlzdHNOb2RlRGF0YT4gbV9ub2RlTGlzdHM7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPE5vZGVNdXRhdGlvbk9ic2VydmVyRGF0YT4gbV9tdXRhdGlvbk9ic2VydmVyRGF0
YTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFJlZjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0
cmF0aW9uPiwgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5SW5saW5lU2l6ZT4+IG1fbXV0YXRpb25P
YnNlcnZlclJlZ2lzdHJ5OworICAgIEhhc2hTZXQ8UmVmPE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3Ry
YXRpb24+PiBtX3RyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeTsKIH07CiAKIHRlbXBs
YXRlPD4gc3RydWN0IE5vZGVMaXN0VHlwZUlkZW50aWZpZXI8TmFtZU5vZGVMaXN0PiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408973</attachid>
            <date>2020-09-16 18:07:16 -0700</date>
            <delta_ts>2020-09-16 18:53:27 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-216528-20200916180716.patch</filename>
            <type>text/plain</type>
            <size>25057</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MDc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTM0NWE4NmYwN2U3YWZj
NzI4MDQ2MzA0NGJiMDNmNDBjN2FhN2U2ZC4uZDQ4MzJhNGE3MDFiZDhhZDQ2MTdmYWYyNzI3MTk2
YTRkYTNlODhlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDIwLTA5LTE0ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE11dGF0aW9uT2JzZXJ2ZXJS
ZWdpc3RyYXRpb24gc2hvdWxkIGJlIHJlZiBjb3VudGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY1MjgKKworICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbiBBZGxlci4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIE11dGF0aW9uT2JzZXJ2ZXJS
ZWdpc3RyYXRpb24gcmVmIGNvdW50ZWQgc28gdGhhdCB0aGUgdHJhbnNpZW50IHJlZ2lzdHJ5IGNh
biBzdG9yZQorICAgICAgICBSZWY8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbj4gaW5zdGVh
ZCBvZiBhIHJhdyBwb2ludGVyLiBJdCBhbHNvIG1lcmdlcyBOb2RlTXV0YXRpb25PYnNlcnZlckRh
dGEKKyAgICAgICAgaW50byBOb2RlUmFyZURhdGEgbm93IHRoYXQgTm9kZVJhcmVEYXRhIGlzIGFj
dHVhbGx5IHJhcmUgYWZ0ZXIgcjI2NjcxNCBhbmQgcjI2Njc2OS4KKworICAgICAgICBCZWZvcmUg
dGhpcyBwYXRjaCwgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbiBoYWQgdG8gYmUga2VwdCBh
bGl2ZSBieSB0aGUgb3JpZ2luYWxseSBvYnNlcnZlZCBub2RlCisgICAgICAgIHVzaW5nIG1fbm9k
ZUtlcHRBbGl2ZSB3aGVuZXZlciBhIHRyYW5zaWVudCBvYnNlcnZhdGlvbiBvY2N1cnMgKGkuZS4g
b2JzZXJ2YXRpb24gb2YgYSBub2RlIHdoaWNoIHVzZWQKKyAgICAgICAgdG8gYmUgYSBwYXJ0IG9m
IHRoZSBzdWJ0cmVlIG9mIHRoZSBvYnNlcnZlZCBub2RlKS4gV2l0aCB0aGlzIHBhdGNoLCB0aGlz
IGNvbXBsZXhpdHkgaXMgZWxpbWluYXRlZC4KKworICAgICAgICBObyBuZXcgdGVzdHMgc2luY2Ug
dGhlcmUgc2hvdWxkIGJlIG5vIGJlaGF2aW9yYWwgZGlmZmVyZW5jZS4KKworICAgICAgICAqIGRv
bS9NdXRhdGlvbk9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2
ZXI6OmRpc2Nvbm5lY3QpOiBTa2lwIGFueSBub2RlIGZvciB3aGljaCB0aGUgb2JzZXJ2ZWQgbm9k
ZSBoYWQgYmVlbiBkZWxldGVkLgorICAgICAgICBUaGlzIG1lYW5zIHRoYXQgdGhlIHJlZ2lzdHJh
dGlvbiBpcyBhbGl2ZSBmb3IgdHJhbnNpZW50IG5vZGVzIChpLmUuIGEgbm9kZSB3aGljaCB1c2Vk
IHRvIGJlIGEgcGFydCBvZgorICAgICAgICB0aGUgc3VidHJlZSBvZiB0aGUgb2JzZXJ2ZWQgbm9k
ZSkuCisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyOjpvYnNlcnZhdGlvblN0YXJ0
ZWQpOiBDb252ZXJ0ZWQgZGVidWcgYXNzZXJ0IHRvIGEgcmVsZWFzZSBhc3NlcnQuCisgICAgICAg
IChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyOjpvYnNlcnZhdGlvbkVuZGVkKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyOjpkZWxpdmVyKTogU2ltcGxpZmllZCBs
b2dpYyBhIGJpdCB1c2luZyBXVEY6Om1hcC4KKyAgICAgICAgKiBkb20vTXV0YXRpb25PYnNlcnZl
clJlZ2lzdHJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyUmVn
aXN0cmF0aW9uOjpjcmVhdGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2Jz
ZXJ2ZXJSZWdpc3RyYXRpb246Ok11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24pOiBDcmVhdGUg
YSBXZWFrUHRyIGZvciBtX25vZGUuCisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVy
UmVnaXN0cmF0aW9uOjpvYnNlcnZlZFN1YnRyZWVOb2RlV2lsbERldGFjaCk6IERlbGV0ZWQgdGhl
IGNvZGUgZm9yCisgICAgICAgIG1fbm9kZUtlcHRBbGl2ZSBzaW5jZSB0aGUgb2JzZXJ2ZWQgbm9k
ZSBpcyBubyBsb25nZXIgcmVzcG9uc2libGUgZm9yIGtlZXBpbmcgdGhpcworICAgICAgICBNdXRh
dGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uIGFsaXZlIHdoaWxlIHRyYW5zaWVudCBvYnNlcnZhcmlv
biB0YWtlcyBwbGFjZS4KKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXJSZWdpc3Ry
YXRpb246OnRha2VUcmFuc2llbnRSZWdpc3RyYXRpb25zKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uOjpzaG91bGRSZWNlaXZlTXV0YXRpb25G
cm9tIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRp
b246OmFkZFJlZ2lzdHJhdGlvbk5vZGVzVG9TZXQgY29uc3QpOiBTa2lwIG1fbm9kZSBpZiBpdCBo
YXMgYmVlbgorICAgICAgICBkZWxldGVkLiBUaGlzIGlzIHBvc3NpYmxlIGR1cmluZyB0cmFuc2ll
bnQgb2JzZXJ2YXRpb25zLgorICAgICAgICAqIGRvbS9NdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0
aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKTog
VGhpcyBjbGFzcyBpcyBub3cgcmVmIGNvdW50ZWQuIEFsc28gbWFkZSBtX25vZGUgV2Vha1B0ci4K
KyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246Om5vZGUpOgor
ICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNsZWFyUmFy
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6bW92ZU5vZGVUb05ld0RvY3VtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Om11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjp0cmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVn
aXN0cnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdE1hdGNoaW5nT2JzZXJ2
ZXJzRm9yTXV0YXRpb24pOiBOb3cgdGFrZXMgYSByZWZlcmVuY2UgdG8gcmVnaXN0cnkuCisgICAg
ICAgIChXZWJDb3JlOjpOb2RlOjpyZWdpc3RlcmVkTXV0YXRpb25PYnNlcnZlcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6cmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OnVucmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVyKTogQ29udmVydGVkIGRlYnVn
IGFzc2VydGlvbnMgdG8gcmVsZWFzZSBhc3NlcnRpb25zLiBXaXRoCisgICAgICAgIHNjcmlwdCBl
eGVjdXRpb24gZm9yYmlkZGVuIGR1cmluZyB0cmVlIG11dGF0aW9ucywgdGhpcyBzaG91bGQgbmV2
ZXIgaGFwcGVuIG5vdy4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJlZ2lzdGVyVHJhbnNpZW50
TXV0YXRpb25PYnNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjp1bnJlZ2lzdGVyVHJh
bnNpZW50TXV0YXRpb25PYnNlcnZlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6
bm90aWZ5TXV0YXRpb25PYnNlcnZlcnNOb2RlV2lsbERldGFjaCk6CisgICAgICAgICogZG9tL05v
ZGUuaDoKKyAgICAgICAgKiBkb20vTm9kZVJhcmVEYXRhLmNwcDoKKyAgICAgICAgKiBkb20vTm9k
ZVJhcmVEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTXV0YXRpb25PYnNlcnZlckRhdGEp
OiBNZXJnZWQgaW50byBOb2RlUmFyZURhdGEuCisgICAgICAgIChXZWJDb3JlOjpOb2RlUmFyZURh
dGE6Om11dGF0aW9uT2JzZXJ2ZXJEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGVSYXJlRGF0YTo6ZW5zdXJlTXV0YXRpb25PYnNlcnZlckRhdGEpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjptdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6bXV0YXRpb25PYnNlcnZlclJlZ2lz
dHJ5SWZFeGlzdHMpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6dHJh
bnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KTogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpOb2RlUmFyZURhdGE6OnVzZVR5cGVzIGNvbnN0KToKKwogMjAyMC0wOS0xNCAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBFbGVtZW50IHNob3VsZCBub3Qgc2V0
IGFuIGF0dHJpYnV0ZSBpbnNpZGUgaXRzIGNvbnN0cnVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0
YXRpb25PYnNlcnZlci5jcHAKaW5kZXggYTRhYzBlYjdlNTcxNzdjZjA0MjM3ZTZhOTIzY2M1MDMw
NmUyYmJkNi4uZTMxYTNiODJmZDI4OTRhZWRmNzZiMmY3N2ViMWY2NzE2ZjE0ZmI3YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2VydmVyLmNwcApAQCAtMTIwLDIxICsxMjAsMjYgQEAg
dm9pZCBNdXRhdGlvbk9ic2VydmVyOjpkaXNjb25uZWN0KCkKIHsKICAgICBtX3BlbmRpbmdUYXJn
ZXRzLmNsZWFyKCk7CiAgICAgbV9yZWNvcmRzLmNsZWFyKCk7Ci0gICAgSGFzaFNldDxNdXRhdGlv
bk9ic2VydmVyUmVnaXN0cmF0aW9uKj4gcmVnaXN0cmF0aW9ucyhtX3JlZ2lzdHJhdGlvbnMpOwot
ICAgIGZvciAoYXV0byogcmVnaXN0cmF0aW9uIDogcmVnaXN0cmF0aW9ucykKLSAgICAgICAgcmVn
aXN0cmF0aW9uLT5ub2RlKCkudW5yZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIoKnJlZ2lzdHJhdGlv
bik7CisgICAgYXV0byByZWdpc3RyYXRpb25BbmROb2RlTGlzdCA9IFdURjo6Y29tcGFjdE1hcCht
X3JlZ2lzdHJhdGlvbnMsIFtdKGF1dG8qIHJlZ2lzdHJhdGlvbikgLT4gT3B0aW9uYWw8c3RkOjpw
YWlyPFJlZjxOb2RlPiwgUmVmPE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24+Pj4geworICAg
ICAgICBhdXRvIG5vZGUgPSBtYWtlUmVmUHRyKHJlZ2lzdHJhdGlvbi0+bm9kZSgpKTsKKyAgICAg
ICAgaWYgKCFub2RlKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAg
cmV0dXJuIHsgeyBub2RlLnJlbGVhc2VOb25OdWxsKCksIG1ha2VSZWYoKnJlZ2lzdHJhdGlvbikg
fSB9OworICAgIH0pOworICAgIGZvciAoYXV0byYgcmVnaXN0cmF0aW9uQW5kTm9kZSA6IHJlZ2lz
dHJhdGlvbkFuZE5vZGVMaXN0KQorICAgICAgICByZWdpc3RyYXRpb25BbmROb2RlLmZpcnN0LT51
bnJlZ2lzdGVyTXV0YXRpb25PYnNlcnZlcihyZWdpc3RyYXRpb25BbmROb2RlLnNlY29uZC5nZXQo
KSk7CiB9CiAKIHZvaWQgTXV0YXRpb25PYnNlcnZlcjo6b2JzZXJ2YXRpb25TdGFydGVkKE11dGF0
aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24mIHJlZ2lzdHJhdGlvbikKIHsKLSAgICBBU1NFUlQoIW1f
cmVnaXN0cmF0aW9ucy5jb250YWlucygmcmVnaXN0cmF0aW9uKSk7Ci0gICAgbV9yZWdpc3RyYXRp
b25zLmFkZCgmcmVnaXN0cmF0aW9uKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fcmVnaXN0cmF0aW9u
cy5hZGQoJnJlZ2lzdHJhdGlvbik7CisgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmlzTmV3RW50
cnkpOwogfQogCiB2b2lkIE11dGF0aW9uT2JzZXJ2ZXI6Om9ic2VydmF0aW9uRW5kZWQoTXV0YXRp
b25PYnNlcnZlclJlZ2lzdHJhdGlvbiYgcmVnaXN0cmF0aW9uKQogewotICAgIEFTU0VSVChtX3Jl
Z2lzdHJhdGlvbnMuY29udGFpbnMoJnJlZ2lzdHJhdGlvbikpOwotICAgIG1fcmVnaXN0cmF0aW9u
cy5yZW1vdmUoJnJlZ2lzdHJhdGlvbik7CisgICAgYXV0byByZW1vdmVkID0gbV9yZWdpc3RyYXRp
b25zLnJlbW92ZSgmcmVnaXN0cmF0aW9uKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZW1vdmVkKTsK
IH0KIAogdm9pZCBNdXRhdGlvbk9ic2VydmVyOjplbnF1ZXVlTXV0YXRpb25SZWNvcmQoUmVmPE11
dGF0aW9uUmVjb3JkPiYmIG11dGF0aW9uKQpAQCAtMTg2LDE4ICsxOTEsMTQgQEAgdm9pZCBNdXRh
dGlvbk9ic2VydmVyOjpkZWxpdmVyKCkKIHsKICAgICBBU1NFUlQoY2FuRGVsaXZlcigpKTsKIAot
ICAgIC8vIENhbGxpbmcgdGFrZVRyYW5zaWVudFJlZ2lzdHJhdGlvbnMoKSBjYW4gbW9kaWZ5IG1f
cmVnaXN0cmF0aW9ucywgc28gaXQncyBuZWNlc3NhcnkKLSAgICAvLyB0byBtYWtlIGEgY29weSBv
ZiB0aGUgdHJhbnNpZW50IHJlZ2lzdHJhdGlvbnMgYmVmb3JlIG9wZXJhdGluZyBvbiB0aGVtLgot
ICAgIFZlY3RvcjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKiwgMT4gdHJhbnNpZW50UmVn
aXN0cmF0aW9uczsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEhhc2hTZXQ8R0NSZWFjaGFi
bGVSZWY8Tm9kZT4+PiwgMT4gbm9kZXNUb0tlZXBBbGl2ZTsKICAgICBIYXNoU2V0PEdDUmVhY2hh
YmxlUmVmPE5vZGU+PiBwZW5kaW5nVGFyZ2V0czsKICAgICBwZW5kaW5nVGFyZ2V0cy5zd2FwKG1f
cGVuZGluZ1RhcmdldHMpOwotICAgIGZvciAoYXV0byogcmVnaXN0cmF0aW9uIDogbV9yZWdpc3Ry
YXRpb25zKSB7CisgICAgYXV0byByZWdpc3RyYXRpb25zID0gV1RGOjptYXAobV9yZWdpc3RyYXRp
b25zLCBbXShhdXRvKiByZWdpc3RyYXRpb24pIHsgcmV0dXJuIG1ha2VSZWYoKnJlZ2lzdHJhdGlv
bik7IH0pOworICAgIGZvciAoYXV0byYgcmVnaXN0cmF0aW9uIDogcmVnaXN0cmF0aW9ucykgewog
ICAgICAgICBpZiAocmVnaXN0cmF0aW9uLT5oYXNUcmFuc2llbnRSZWdpc3RyYXRpb25zKCkpCi0g
ICAgICAgICAgICB0cmFuc2llbnRSZWdpc3RyYXRpb25zLmFwcGVuZChyZWdpc3RyYXRpb24pOwor
ICAgICAgICAgICAgbm9kZXNUb0tlZXBBbGl2ZS5hcHBlbmQocmVnaXN0cmF0aW9uLT50YWtlVHJh
bnNpZW50UmVnaXN0cmF0aW9ucygpKTsKICAgICB9Ci0gICAgZm9yIChhdXRvJiByZWdpc3RyYXRp
b24gOiB0cmFuc2llbnRSZWdpc3RyYXRpb25zKQotICAgICAgICBub2Rlc1RvS2VlcEFsaXZlLmFw
cGVuZChyZWdpc3RyYXRpb24tPnRha2VUcmFuc2llbnRSZWdpc3RyYXRpb25zKCkpOwogCiAgICAg
aWYgKG1fcmVjb3Jkcy5pc0VtcHR5KCkpIHsKICAgICAgICAgQVNTRVJUKG1fcGVuZGluZ1Rhcmdl
dHMuaXNFbXB0eSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9i
c2VydmVyUmVnaXN0cmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbk9ic2Vy
dmVyUmVnaXN0cmF0aW9uLmNwcAppbmRleCAwZWNiMDViNDg4NjBjNzc3MTQxOGQ4YmY5ZDI2MTI5
M2E4ODY1YWUzLi4zYWJhZDk1YWY3Y2Y5NjQ2NTc5MDUzNzVmMjdiN2JkMDdlZTFjMjFlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24u
Y3BwCkBAIC0zNyw5ICszNywxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK1JlZjxNdXRh
dGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPiBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uOjpj
cmVhdGUoTXV0YXRpb25PYnNlcnZlciYgb2JzZXJ2ZXIsIE5vZGUmIG5vZGUsIE11dGF0aW9uT2Jz
ZXJ2ZXJPcHRpb25zIG9wdGlvbnMsIGNvbnN0IEhhc2hTZXQ8QXRvbVN0cmluZz4mIGF0dHJpYnV0
ZUZpbHRlcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNdXRhdGlvbk9ic2VydmVyUmVn
aXN0cmF0aW9uKG9ic2VydmVyLCBub2RlLCBvcHRpb25zLCBhdHRyaWJ1dGVGaWx0ZXIpKTsKK30K
KyAgICAKIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246Ok11dGF0aW9uT2JzZXJ2ZXJSZWdp
c3RyYXRpb24oTXV0YXRpb25PYnNlcnZlciYgb2JzZXJ2ZXIsIE5vZGUmIG5vZGUsIE11dGF0aW9u
T2JzZXJ2ZXJPcHRpb25zIG9wdGlvbnMsIGNvbnN0IEhhc2hTZXQ8QXRvbVN0cmluZz4mIGF0dHJp
YnV0ZUZpbHRlcikKICAgICA6IG1fb2JzZXJ2ZXIob2JzZXJ2ZXIpCi0gICAgLCBtX25vZGUobm9k
ZSkKKyAgICAsIG1fbm9kZShtYWtlV2Vha1B0cihub2RlKSkKICAgICAsIG1fb3B0aW9ucyhvcHRp
b25zKQogICAgICwgbV9hdHRyaWJ1dGVGaWx0ZXIoYXR0cmlidXRlRmlsdGVyKQogewpAQCAtNjcs
MzEgKzcyLDIxIEBAIHZvaWQgTXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbjo6b2JzZXJ2ZWRT
dWJ0cmVlTm9kZVdpbGxEZXRhY2goTm9kZSYgbm9kZSkKICAgICBub2RlLnJlZ2lzdGVyVHJhbnNp
ZW50TXV0YXRpb25PYnNlcnZlcigqdGhpcyk7CiAgICAgbV9vYnNlcnZlci0+c2V0SGFzVHJhbnNp
ZW50UmVnaXN0cmF0aW9uKG5vZGUuZG9jdW1lbnQoKSk7CiAKLSAgICBpZiAoIW1fdHJhbnNpZW50
UmVnaXN0cmF0aW9uTm9kZXMpIHsKKyAgICBpZiAoIW1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9k
ZXMpCiAgICAgICAgIG1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9kZXMgPSBtYWtlVW5pcXVlPEhh
c2hTZXQ8R0NSZWFjaGFibGVSZWY8Tm9kZT4+PigpOwotCi0gICAgICAgIEFTU0VSVCghbV9ub2Rl
S2VwdEFsaXZlKTsKLSAgICAgICAgbV9ub2RlS2VwdEFsaXZlID0gJm1fbm9kZTsgLy8gQmFsYW5j
ZWQgaW4gdGFrZVRyYW5zaWVudFJlZ2lzdHJhdGlvbnMuCi0gICAgfQogICAgIG1fdHJhbnNpZW50
UmVnaXN0cmF0aW9uTm9kZXMtPmFkZChub2RlKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEhhc2hT
ZXQ8R0NSZWFjaGFibGVSZWY8Tm9kZT4+PiBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uOjp0
YWtlVHJhbnNpZW50UmVnaXN0cmF0aW9ucygpCiB7Ci0gICAgaWYgKCFtX3RyYW5zaWVudFJlZ2lz
dHJhdGlvbk5vZGVzKSB7Ci0gICAgICAgIEFTU0VSVCghbV9ub2RlS2VwdEFsaXZlKTsKKyAgICBp
ZiAoIW1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9kZXMpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIH0KIAotICAgIGZvciAoYXV0byYgbm9kZSA6ICptX3RyYW5zaWVudFJlZ2lzdHJhdGlv
bk5vZGVzKQorICAgIGF1dG8gdHJhbnNpZW50Tm9kZXMgPSBXVEZNb3ZlKG1fdHJhbnNpZW50UmVn
aXN0cmF0aW9uTm9kZXMpOworICAgIGZvciAoYXV0byYgbm9kZSA6ICp0cmFuc2llbnROb2RlcykK
ICAgICAgICAgbm9kZS0+dW5yZWdpc3RlclRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXIoKnRoaXMp
OwogCi0gICAgYXV0byByZXR1cm5WYWx1ZSA9IFdURk1vdmUobV90cmFuc2llbnRSZWdpc3RyYXRp
b25Ob2Rlcyk7Ci0KLSAgICBBU1NFUlQobV9ub2RlS2VwdEFsaXZlKTsKLSAgICBtX25vZGVLZXB0
QWxpdmUgPSBudWxscHRyOyAvLyBCYWxhbmNlZCBpbiBvYnNlcnZlU3VidHJlZU5vZGVXaWxsRGV0
YWNoLgotCi0gICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIHJldHVybiB0cmFuc2llbnROb2Rl
czsKIH0KIAogYm9vbCBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uOjpzaG91bGRSZWNlaXZl
TXV0YXRpb25Gcm9tKE5vZGUmIG5vZGUsIE11dGF0aW9uT2JzZXJ2ZXI6Ok11dGF0aW9uVHlwZSB0
eXBlLCBjb25zdCBRdWFsaWZpZWROYW1lKiBhdHRyaWJ1dGVOYW1lKSBjb25zdApAQCAtMTAwLDcg
Kzk1LDcgQEAgYm9vbCBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uOjpzaG91bGRSZWNlaXZl
TXV0YXRpb25Gcm9tKE5vZGUmIG5vZGUsIE11dGF0aW8KICAgICBpZiAoIShtX29wdGlvbnMgJiB0
eXBlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCZtX25vZGUgIT0gJm5vZGUg
JiYgIWlzU3VidHJlZSgpKQorICAgIGlmIChtX25vZGUuZ2V0KCkgIT0gJm5vZGUgJiYgIWlzU3Vi
dHJlZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAodHlwZSAhPSBNdXRhdGlv
bk9ic2VydmVyOjpBdHRyaWJ1dGVzIHx8ICEobV9vcHRpb25zICYgTXV0YXRpb25PYnNlcnZlcjo6
QXR0cmlidXRlRmlsdGVyKSkKQEAgLTExNCw3ICsxMDksOSBAQCBib29sIE11dGF0aW9uT2JzZXJ2
ZXJSZWdpc3RyYXRpb246OnNob3VsZFJlY2VpdmVNdXRhdGlvbkZyb20oTm9kZSYgbm9kZSwgTXV0
YXRpbwogCiB2b2lkIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246OmFkZFJlZ2lzdHJhdGlv
bk5vZGVzVG9TZXQoSGFzaFNldDxOb2RlKj4mIG5vZGVzKSBjb25zdAogewotICAgIG5vZGVzLmFk
ZCgmbV9ub2RlKTsKKyAgICBBU1NFUlQobV9ub2RlLmdldCgpIHx8IG1fdHJhbnNpZW50UmVnaXN0
cmF0aW9uTm9kZXMpOworICAgIGlmIChhdXRvKiBvYnNlcnZlZE5vZGUgPSBtX25vZGUuZ2V0KCkp
CisgICAgICAgIG5vZGVzLmFkZChvYnNlcnZlZE5vZGUpOwogICAgIGlmICghbV90cmFuc2llbnRS
ZWdpc3RyYXRpb25Ob2RlcykKICAgICAgICAgcmV0dXJuOwogICAgIGZvciAoYXV0byYgbm9kZSA6
ICptX3RyYW5zaWVudFJlZ2lzdHJhdGlvbk5vZGVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9NdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uLmgKaW5kZXggZTY5NDA0ODNhMzEzYzhmZDFi
ZDE2ZGMxN2NiOTZiMTNhY2QyMmEzYS4uMWE1ZjdiN2ZhNGI1MTI2OThlOGI5MjU0YzBiOTcxMTlm
ZTZkZTQ0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uT2JzZXJ2ZXJS
ZWdpc3RyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJhdGlvbi5oCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiR0NSZWFjaGFibGVSZWYu
aCIKICNpbmNsdWRlICJNdXRhdGlvbk9ic2VydmVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJp
bmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgogCkBAIC00MCwxMCAr
NDEsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBRdWFsaWZpZWROYW1lOwogCi1j
bGFzcyBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uIHsKK2NsYXNzIE11dGF0aW9uT2JzZXJ2
ZXJSZWdpc3RyYXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxNdXRhdGlvbk9ic2VydmVyUmVnaXN0
cmF0aW9uPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgTXV0
YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbihNdXRhdGlvbk9ic2VydmVyJiwgTm9kZSYsIE11dGF0
aW9uT2JzZXJ2ZXJPcHRpb25zLCBjb25zdCBIYXNoU2V0PEF0b21TdHJpbmc+JiBhdHRyaWJ1dGVG
aWx0ZXIpOworICAgIHN0YXRpYyBSZWY8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbj4gY3Jl
YXRlKE11dGF0aW9uT2JzZXJ2ZXImLCBOb2RlJiwgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMsIGNv
bnN0IEhhc2hTZXQ8QXRvbVN0cmluZz4mIGF0dHJpYnV0ZUZpbHRlcik7CisKICAgICB+TXV0YXRp
b25PYnNlcnZlclJlZ2lzdHJhdGlvbigpOwogCiAgICAgdm9pZCByZXNldE9ic2VydmF0aW9uKE11
dGF0aW9uT2JzZXJ2ZXJPcHRpb25zLCBjb25zdCBIYXNoU2V0PEF0b21TdHJpbmc+JiBhdHRyaWJ1
dGVGaWx0ZXIpOwpAQCAtNTUsMTYgKzU3LDE3IEBAIHB1YmxpYzoKICAgICBib29sIGlzU3VidHJl
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW9ucyAmIE11dGF0aW9uT2JzZXJ2ZXI6OlN1YnRyZWU7
IH0KIAogICAgIE11dGF0aW9uT2JzZXJ2ZXImIG9ic2VydmVyKCkgeyByZXR1cm4gbV9vYnNlcnZl
ci5nZXQoKTsgfQotICAgIE5vZGUmIG5vZGUoKSB7IHJldHVybiBtX25vZGU7IH0KKyAgICBOb2Rl
KiBub2RlKCkgeyByZXR1cm4gbV9ub2RlLmdldCgpOyB9CiAgICAgTXV0YXRpb25SZWNvcmREZWxp
dmVyeU9wdGlvbnMgZGVsaXZlcnlPcHRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9vcHRpb25zICYg
KE11dGF0aW9uT2JzZXJ2ZXI6OkF0dHJpYnV0ZU9sZFZhbHVlIHwgTXV0YXRpb25PYnNlcnZlcjo6
Q2hhcmFjdGVyRGF0YU9sZFZhbHVlKTsgfQogICAgIE11dGF0aW9uT2JzZXJ2ZXJPcHRpb25zIG11
dGF0aW9uVHlwZXMoKSBjb25zdCB7IHJldHVybiBtX29wdGlvbnMgJiBNdXRhdGlvbk9ic2VydmVy
OjpBbGxNdXRhdGlvblR5cGVzOyB9CiAKICAgICB2b2lkIGFkZFJlZ2lzdHJhdGlvbk5vZGVzVG9T
ZXQoSGFzaFNldDxOb2RlKj4mKSBjb25zdDsKIAogcHJpdmF0ZToKKyAgICBNdXRhdGlvbk9ic2Vy
dmVyUmVnaXN0cmF0aW9uKE11dGF0aW9uT2JzZXJ2ZXImLCBOb2RlJiwgTXV0YXRpb25PYnNlcnZl
ck9wdGlvbnMsIGNvbnN0IEhhc2hTZXQ8QXRvbVN0cmluZz4mIGF0dHJpYnV0ZUZpbHRlcik7CisK
ICAgICBSZWY8TXV0YXRpb25PYnNlcnZlcj4gbV9vYnNlcnZlcjsKLSAgICBOb2RlJiBtX25vZGU7
Ci0gICAgUmVmUHRyPE5vZGU+IG1fbm9kZUtlcHRBbGl2ZTsKKyAgICBXZWFrUHRyPE5vZGU+IG1f
bm9kZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SGFzaFNldDxHQ1JlYWNoYWJsZVJlZjxOb2RlPj4+
IG1fdHJhbnNpZW50UmVnaXN0cmF0aW9uTm9kZXM7CiAgICAgTXV0YXRpb25PYnNlcnZlck9wdGlv
bnMgbV9vcHRpb25zOwogICAgIEhhc2hTZXQ8QXRvbVN0cmluZz4gbV9hdHRyaWJ1dGVGaWx0ZXI7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5jcHAKaW5kZXggZTg3YjA5Mzg0MTkzN2Q4MzU4OGExNGE5YTM4NTFiMzYwNjJk
ZTRhYS4uZDFhYjgyOGJhYWQ2MGE2YjNkYzBjNTVlZWE5OWQxNjAwMTg4ZGU5MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmNwcApAQCAtNDI5LDggKzQyOSw3IEBAIGlubGluZSB2b2lkIE5vZGU6Ok5vZGVSYXJlRGF0
YURlbGV0ZXI6Om9wZXJhdG9yKCkoTm9kZVJhcmVEYXRhKiByYXJlRGF0YSkgY29uc3QKIHZvaWQg
Tm9kZTo6Y2xlYXJSYXJlRGF0YSgpCiB7CiAgICAgQVNTRVJUKGhhc1JhcmVEYXRhKCkpOwotICAg
IEFTU0VSVCghdHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkgfHwgdHJhbnNpZW50
TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCktPmlzRW1wdHkoKSk7Ci0KKyAgICBBU1NFUlQocmFy
ZURhdGEoKS0+dHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkuaXNFbXB0eSgpKTsK
ICAgICBtX3JhcmVEYXRhV2l0aEJpdGZpZWxkcy5zZXRQb2ludGVyKG51bGxwdHIpOwogfQogCkBA
IC0yMDM1LDE5ICsyMDM0LDE1IEBAIHZvaWQgTm9kZTo6bW92ZU5vZGVUb05ld0RvY3VtZW50KERv
Y3VtZW50JiBvbGREb2N1bWVudCwgRG9jdW1lbnQmIG5ld0RvY3VtZW50KQogICAgIG9sZERvY3Vt
ZW50LmRlY3JlbWVudFJlZmVyZW5jaW5nTm9kZUNvdW50KCk7CiAKICAgICBpZiAoaGFzUmFyZURh
dGEoKSkgewotICAgICAgICBpZiAoYXV0byogbm9kZUxpc3RzID0gcmFyZURhdGEoKS0+bm9kZUxp
c3RzKCkpCisgICAgICAgIGF1dG8qIHJhcmVEYXRhID0gdGhpcy0+cmFyZURhdGEoKTsKKyAgICAg
ICAgaWYgKGF1dG8qIG5vZGVMaXN0cyA9IHJhcmVEYXRhLT5ub2RlTGlzdHMoKSkKICAgICAgICAg
ICAgIG5vZGVMaXN0cy0+YWRvcHREb2N1bWVudChvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOwot
ICAgICAgICBpZiAoYXV0byogcmVnaXN0cnkgPSBtdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSkg
eworICAgICAgICBpZiAoYXV0byogcmVnaXN0cnkgPSByYXJlRGF0YS0+bXV0YXRpb25PYnNlcnZl
clJlZ2lzdHJ5SWZFeGlzdHMoKSkgewogICAgICAgICAgICAgZm9yIChhdXRvJiByZWdpc3RyYXRp
b24gOiAqcmVnaXN0cnkpCiAgICAgICAgICAgICAgICAgbmV3RG9jdW1lbnQuYWRkTXV0YXRpb25P
YnNlcnZlclR5cGVzKHJlZ2lzdHJhdGlvbi0+bXV0YXRpb25UeXBlcygpKTsKICAgICAgICAgfQot
ICAgICAgICBpZiAoYXV0byogdHJhbnNpZW50UmVnaXN0cnkgPSB0cmFuc2llbnRNdXRhdGlvbk9i
c2VydmVyUmVnaXN0cnkoKSkgewotICAgICAgICAgICAgZm9yIChhdXRvJiByZWdpc3RyYXRpb24g
OiAqdHJhbnNpZW50UmVnaXN0cnkpCi0gICAgICAgICAgICAgICAgbmV3RG9jdW1lbnQuYWRkTXV0
YXRpb25PYnNlcnZlclR5cGVzKHJlZ2lzdHJhdGlvbi0+bXV0YXRpb25UeXBlcygpKTsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVCghbXV0YXRpb25PYnNlcnZlclJlZ2lz
dHJ5KCkpOwotICAgICAgICBBU1NFUlQoIXRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3Ry
eSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiByZWdpc3RyYXRpb24gOiByYXJlRGF0YS0+dHJhbnNp
ZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkpCisgICAgICAgICAgICBuZXdEb2N1bWVudC5h
ZGRNdXRhdGlvbk9ic2VydmVyVHlwZXMocmVnaXN0cmF0aW9uLT5tdXRhdGlvblR5cGVzKCkpOwog
ICAgIH0KIAogICAgIG9sZERvY3VtZW50Lm1vdmVOb2RlSXRlcmF0b3JzVG9OZXdEb2N1bWVudCgq
dGhpcywgbmV3RG9jdW1lbnQpOwpAQCAtMjI0NywzMiArMjI0Miw5IEBAIHZvaWQgTm9kZTo6Y2xl
YXJFdmVudFRhcmdldERhdGEoKQogICAgIGV2ZW50VGFyZ2V0RGF0YU1hcCgpLnJlbW92ZSh0aGlz
KTsKIH0KIAotVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0
aW9uPj4qIE5vZGU6Om11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpCi17Ci0gICAgaWYgKCFoYXNS
YXJlRGF0YSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvKiBkYXRhID0gcmFy
ZURhdGEoKS0+bXV0YXRpb25PYnNlcnZlckRhdGEoKTsKLSAgICBpZiAoIWRhdGEpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIHJldHVybiAmZGF0YS0+cmVnaXN0cnk7Ci19Ci0KLUhhc2hT
ZXQ8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbio+KiBOb2RlOjp0cmFuc2llbnRNdXRhdGlv
bk9ic2VydmVyUmVnaXN0cnkoKQordGVtcGxhdGU8dHlwZW5hbWUgUmVnaXN0cnk+IHN0YXRpYyBp
bmxpbmUgdm9pZCBjb2xsZWN0TWF0Y2hpbmdPYnNlcnZlcnNGb3JNdXRhdGlvbihIYXNoTWFwPFJl
ZjxNdXRhdGlvbk9ic2VydmVyPiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+JiBvYnNl
cnZlcnMsIFJlZ2lzdHJ5JiByZWdpc3RyeSwgTm9kZSYgdGFyZ2V0LCBNdXRhdGlvbk9ic2VydmVy
OjpNdXRhdGlvblR5cGUgdHlwZSwgY29uc3QgUXVhbGlmaWVkTmFtZSogYXR0cmlidXRlTmFtZSkK
IHsKLSAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IGF1dG8qIGRhdGEgPSByYXJlRGF0YSgpLT5tdXRhdGlvbk9ic2VydmVyRGF0YSgpOwotICAgIGlm
ICghZGF0YSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuICZkYXRhLT50cmFu
c2llbnRSZWdpc3RyeTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgUmVnaXN0cnk+IHN0YXRpYyBp
bmxpbmUgdm9pZCBjb2xsZWN0TWF0Y2hpbmdPYnNlcnZlcnNGb3JNdXRhdGlvbihIYXNoTWFwPFJl
ZjxNdXRhdGlvbk9ic2VydmVyPiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+JiBvYnNl
cnZlcnMsIFJlZ2lzdHJ5KiByZWdpc3RyeSwgTm9kZSYgdGFyZ2V0LCBNdXRhdGlvbk9ic2VydmVy
OjpNdXRhdGlvblR5cGUgdHlwZSwgY29uc3QgUXVhbGlmaWVkTmFtZSogYXR0cmlidXRlTmFtZSkK
LXsKLSAgICBpZiAoIXJlZ2lzdHJ5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGF1dG8m
IHJlZ2lzdHJhdGlvbiA6ICpyZWdpc3RyeSkgeworICAgIGZvciAoYXV0byYgcmVnaXN0cmF0aW9u
IDogcmVnaXN0cnkpIHsKICAgICAgICAgaWYgKHJlZ2lzdHJhdGlvbi0+c2hvdWxkUmVjZWl2ZU11
dGF0aW9uRnJvbSh0YXJnZXQsIHR5cGUsIGF0dHJpYnV0ZU5hbWUpKSB7CiAgICAgICAgICAgICBh
dXRvIGRlbGl2ZXJ5T3B0aW9ucyA9IHJlZ2lzdHJhdGlvbi0+ZGVsaXZlcnlPcHRpb25zKCk7CiAg
ICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG9ic2VydmVycy5hZGQocmVnaXN0cmF0aW9uLT5vYnNl
cnZlcigpLCBkZWxpdmVyeU9wdGlvbnMpOwpAQCAtMjI4Niw2MSArMjI1OCw1MyBAQCBIYXNoTWFw
PFJlZjxNdXRhdGlvbk9ic2VydmVyPiwgTXV0YXRpb25SZWNvcmREZWxpdmVyeU9wdGlvbnM+IE5v
ZGU6OnJlZ2lzdGVyZWRNdQogewogICAgIEhhc2hNYXA8UmVmPE11dGF0aW9uT2JzZXJ2ZXI+LCBN
dXRhdGlvblJlY29yZERlbGl2ZXJ5T3B0aW9ucz4gcmVzdWx0OwogICAgIEFTU0VSVCgodHlwZSA9
PSBNdXRhdGlvbk9ic2VydmVyOjpBdHRyaWJ1dGVzICYmIGF0dHJpYnV0ZU5hbWUpIHx8ICFhdHRy
aWJ1dGVOYW1lKTsKLSAgICBjb2xsZWN0TWF0Y2hpbmdPYnNlcnZlcnNGb3JNdXRhdGlvbihyZXN1
bHQsIG11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpLCAqdGhpcywgdHlwZSwgYXR0cmlidXRlTmFt
ZSk7Ci0gICAgY29sbGVjdE1hdGNoaW5nT2JzZXJ2ZXJzRm9yTXV0YXRpb24ocmVzdWx0LCB0cmFu
c2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSwgKnRoaXMsIHR5cGUsIGF0dHJpYnV0ZU5h
bWUpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IHBhcmVudE5vZGUoKTsgbm9kZTsgbm9kZSA9IG5v
ZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBjb2xsZWN0TWF0Y2hpbmdPYnNlcnZlcnNGb3JN
dXRhdGlvbihyZXN1bHQsIG5vZGUtPm11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpLCAqdGhpcywg
dHlwZSwgYXR0cmlidXRlTmFtZSk7Ci0gICAgICAgIGNvbGxlY3RNYXRjaGluZ09ic2VydmVyc0Zv
ck11dGF0aW9uKHJlc3VsdCwgbm9kZS0+dHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5
KCksICp0aGlzLCB0eXBlLCBhdHRyaWJ1dGVOYW1lKTsKKyAgICBmb3IgKGF1dG8gbm9kZSA9IG1h
a2VSZWZQdHIodGhpcyk7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKKyAgICAg
ICAgaWYgKCFub2RlLT5oYXNSYXJlRGF0YSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGF1dG8qIHJhcmVEYXRhID0gbm9kZS0+cmFyZURhdGEoKTsKKyAgICAgICAgaWYgKGF1dG8q
IHJlZ2lzdHJ5ID0gcmFyZURhdGEtPm11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeUlmRXhpc3RzKCkp
CisgICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdPYnNlcnZlcnNGb3JNdXRhdGlvbihyZXN1bHQs
ICpyZWdpc3RyeSwgKnRoaXMsIHR5cGUsIGF0dHJpYnV0ZU5hbWUpOworICAgICAgICBjb2xsZWN0
TWF0Y2hpbmdPYnNlcnZlcnNGb3JNdXRhdGlvbihyZXN1bHQsIHJhcmVEYXRhLT50cmFuc2llbnRN
dXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSwgKnRoaXMsIHR5cGUsIGF0dHJpYnV0ZU5hbWUpOwog
ICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIE5vZGU6OnJlZ2lzdGVyTXV0YXRp
b25PYnNlcnZlcihNdXRhdGlvbk9ic2VydmVyJiBvYnNlcnZlciwgTXV0YXRpb25PYnNlcnZlck9w
dGlvbnMgb3B0aW9ucywgY29uc3QgSGFzaFNldDxBdG9tU3RyaW5nPiYgYXR0cmlidXRlRmlsdGVy
KQogewotICAgIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qIHJlZ2lzdHJhdGlvbiA9IG51
bGxwdHI7Ci0gICAgYXV0byYgcmVnaXN0cnkgPSBlbnN1cmVSYXJlRGF0YSgpLmVuc3VyZU11dGF0
aW9uT2JzZXJ2ZXJEYXRhKCkucmVnaXN0cnk7Ci0KLSAgICBmb3IgKGF1dG8mIGNhbmRpZGF0ZVJl
Z2lzdHJhdGlvbiA6IHJlZ2lzdHJ5KSB7Ci0gICAgICAgIGlmICgmY2FuZGlkYXRlUmVnaXN0cmF0
aW9uLT5vYnNlcnZlcigpID09ICZvYnNlcnZlcikgewotICAgICAgICAgICAgcmVnaXN0cmF0aW9u
ID0gY2FuZGlkYXRlUmVnaXN0cmF0aW9uLmdldCgpOwotICAgICAgICAgICAgcmVnaXN0cmF0aW9u
LT5yZXNldE9ic2VydmF0aW9uKG9wdGlvbnMsIGF0dHJpYnV0ZUZpbHRlcik7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAoIXJlZ2lzdHJhdGlvbikgewotICAgICAgICByZWdpc3RyeS5hcHBl
bmQobWFrZVVuaXF1ZTxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPihvYnNlcnZlciwgKnRo
aXMsIG9wdGlvbnMsIGF0dHJpYnV0ZUZpbHRlcikpOwotICAgICAgICByZWdpc3RyYXRpb24gPSBy
ZWdpc3RyeS5sYXN0KCkuZ2V0KCk7CisgICAgYXV0byYgcmVnaXN0cnkgPSBlbnN1cmVSYXJlRGF0
YSgpLm11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpOworICAgIGF1dG8gaW5kZXggPSByZWdpc3Ry
eS5maW5kTWF0Y2hpbmcoWyZvYnNlcnZlcl0oYXV0byYgcmVnaXN0cmF0aW9uKSB7IHJldHVybiAm
cmVnaXN0cmF0aW9uLT5vYnNlcnZlcigpID09ICZvYnNlcnZlcjsgfSk7CisgICAgaWYgKGluZGV4
ICE9IG5vdEZvdW5kKSB7CisgICAgICAgIGF1dG8gcmVnaXN0cmF0aW9uID0gcmVnaXN0cnlbaW5k
ZXhdLmNvcHlSZWYoKTsKKyAgICAgICAgcmVnaXN0cmF0aW9uLT5yZXNldE9ic2VydmF0aW9uKG9w
dGlvbnMsIGF0dHJpYnV0ZUZpbHRlcik7CisgICAgICAgIGRvY3VtZW50KCkuYWRkTXV0YXRpb25P
YnNlcnZlclR5cGVzKHJlZ2lzdHJhdGlvbi0+bXV0YXRpb25UeXBlcygpKTsKKyAgICAgICAgcmV0
dXJuOwogICAgIH0KLQotICAgIGRvY3VtZW50KCkuYWRkTXV0YXRpb25PYnNlcnZlclR5cGVzKHJl
Z2lzdHJhdGlvbi0+bXV0YXRpb25UeXBlcygpKTsKKyAgICBhdXRvIG5ld1JlZ2lzdHJhdGlvbiA9
IE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb246OmNyZWF0ZShvYnNlcnZlciwgKnRoaXMsIG9w
dGlvbnMsIGF0dHJpYnV0ZUZpbHRlcik7CisgICAgZG9jdW1lbnQoKS5hZGRNdXRhdGlvbk9ic2Vy
dmVyVHlwZXMobmV3UmVnaXN0cmF0aW9uLT5tdXRhdGlvblR5cGVzKCkpOworICAgIHJlZ2lzdHJ5
LmFwcGVuZChXVEZNb3ZlKG5ld1JlZ2lzdHJhdGlvbikpOwogfQogCiB2b2lkIE5vZGU6OnVucmVn
aXN0ZXJNdXRhdGlvbk9ic2VydmVyKE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24mIHJlZ2lz
dHJhdGlvbikKIHsKLSAgICBhdXRvKiByZWdpc3RyeSA9IG11dGF0aW9uT2JzZXJ2ZXJSZWdpc3Ry
eSgpOworICAgIEFTU0VSVChoYXNSYXJlRGF0YSgpKTsKKyAgICBhdXRvKiByZWdpc3RyeSA9IHJh
cmVEYXRhKCktPm11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeUlmRXhpc3RzKCk7CiAgICAgQVNTRVJU
KHJlZ2lzdHJ5KTsKLSAgICBpZiAoIXJlZ2lzdHJ5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBy
ZWdpc3RyeS0+cmVtb3ZlRmlyc3RNYXRjaGluZyhbJnJlZ2lzdHJhdGlvbl0gKGF1dG8mIGN1cnJl
bnQpIHsKLSAgICAgICAgcmV0dXJuIGN1cnJlbnQuZ2V0KCkgPT0gJnJlZ2lzdHJhdGlvbjsKKyAg
ICBhdXRvIHJlbW92ZWQgPSByZWdpc3RyeS0+cmVtb3ZlRmlyc3RNYXRjaGluZyhbJnJlZ2lzdHJh
dGlvbl0gKGF1dG8mIGN1cnJlbnQpIHsKKyAgICAgICAgcmV0dXJuIGN1cnJlbnQucHRyKCkgPT0g
JnJlZ2lzdHJhdGlvbjsKICAgICB9KTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZW1vdmVkKTsKIH0K
IAogdm9pZCBOb2RlOjpyZWdpc3RlclRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXIoTXV0YXRpb25P
YnNlcnZlclJlZ2lzdHJhdGlvbiYgcmVnaXN0cmF0aW9uKQogewotICAgIGVuc3VyZVJhcmVEYXRh
KCkuZW5zdXJlTXV0YXRpb25PYnNlcnZlckRhdGEoKS50cmFuc2llbnRSZWdpc3RyeS5hZGQoJnJl
Z2lzdHJhdGlvbik7CisgICAgZW5zdXJlUmFyZURhdGEoKS50cmFuc2llbnRNdXRhdGlvbk9ic2Vy
dmVyUmVnaXN0cnkoKS5hZGQocmVnaXN0cmF0aW9uKTsKIH0KIAogdm9pZCBOb2RlOjp1bnJlZ2lz
dGVyVHJhbnNpZW50TXV0YXRpb25PYnNlcnZlcihNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9u
JiByZWdpc3RyYXRpb24pCiB7Ci0gICAgYXV0byogdHJhbnNpZW50UmVnaXN0cnkgPSB0cmFuc2ll
bnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKTsKLSAgICBBU1NFUlQodHJhbnNpZW50UmVnaXN0
cnkpOwotICAgIGlmICghdHJhbnNpZW50UmVnaXN0cnkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEFTU0VSVCh0cmFuc2llbnRSZWdpc3RyeS0+Y29udGFpbnMoJnJlZ2lzdHJhdGlvbikpOwotICAg
IHRyYW5zaWVudFJlZ2lzdHJ5LT5yZW1vdmUoJnJlZ2lzdHJhdGlvbik7CisgICAgQVNTRVJUKGhh
c1JhcmVEYXRhKCkpOworICAgIGJvb2wgcmVtb3ZlZCA9IHJhcmVEYXRhKCktPnRyYW5zaWVudE11
dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpLnJlbW92ZSgmcmVnaXN0cmF0aW9uKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChyZW1vdmVkKTsKIH0KIAogdm9pZCBOb2RlOjpub3RpZnlNdXRhdGlvbk9ic2Vy
dmVyc05vZGVXaWxsRGV0YWNoKCkKQEAgLTIzNDksMTQgKzIzMTMsMTUgQEAgdm9pZCBOb2RlOjpu
b3RpZnlNdXRhdGlvbk9ic2VydmVyc05vZGVXaWxsRGV0YWNoKCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgZm9yIChOb2RlKiBub2RlID0gcGFyZW50Tm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+
cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChhdXRvKiByZWdpc3RyeSA9IG5vZGUtPm11dGF0
aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpKSB7CisgICAgICAgIGlmICghbm9kZS0+aGFzUmFyZURhdGEo
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBhdXRvKiByYXJlRGF0YSA9IG5vZGUt
PnJhcmVEYXRhKCk7CisgICAgICAgIGlmIChhdXRvKiByZWdpc3RyeSA9IHJhcmVEYXRhLT5tdXRh
dGlvbk9ic2VydmVyUmVnaXN0cnlJZkV4aXN0cygpKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8m
IHJlZ2lzdHJhdGlvbiA6ICpyZWdpc3RyeSkKICAgICAgICAgICAgICAgICByZWdpc3RyYXRpb24t
Pm9ic2VydmVkU3VidHJlZU5vZGVXaWxsRGV0YWNoKCp0aGlzKTsKICAgICAgICAgfQotICAgICAg
ICBpZiAoYXV0byogdHJhbnNpZW50UmVnaXN0cnkgPSBub2RlLT50cmFuc2llbnRNdXRhdGlvbk9i
c2VydmVyUmVnaXN0cnkoKSkgewotICAgICAgICAgICAgZm9yIChhdXRvKiByZWdpc3RyYXRpb24g
OiAqdHJhbnNpZW50UmVnaXN0cnkpCi0gICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uLT5vYnNl
cnZlZFN1YnRyZWVOb2RlV2lsbERldGFjaCgqdGhpcyk7Ci0gICAgICAgIH0KKyAgICAgICAgZm9y
IChhdXRvJiByZWdpc3RyYXRpb24gOiByYXJlRGF0YS0+dHJhbnNpZW50TXV0YXRpb25PYnNlcnZl
clJlZ2lzdHJ5KCkpCisgICAgICAgICAgICByZWdpc3RyYXRpb24tPm9ic2VydmVkU3VidHJlZU5v
ZGVXaWxsRGV0YWNoKCp0aGlzKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCmluZGV4IGQwMDU1NWRh
ZGEzYzk0Mzc3MTM3NDcwZjY4OTNmZWRkNzM1NjZjZTIuLmFlYjJmNmNlMzVlNDZhMzc2Njk5NWQw
ODI4MDdiZGNmYmJjNWY0ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaApAQCAtNjk5LDkgKzY5OSw2IEBAIHByaXZh
dGU6CiAgICAgdm9pZCB0cmFja0ZvckRlYnVnZ2luZygpOwogICAgIHZvaWQgbWF0ZXJpYWxpemVS
YXJlRGF0YSgpOwogCi0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxNdXRhdGlvbk9ic2VydmVy
UmVnaXN0cmF0aW9uPj4qIG11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpOwotICAgIEhhc2hTZXQ8
TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbio+KiB0cmFuc2llbnRNdXRhdGlvbk9ic2VydmVy
UmVnaXN0cnkoKTsKLQogICAgIHZvaWQgYWRqdXN0U3R5bGVWYWxpZGl0eShTdHlsZTo6VmFsaWRp
dHksIFN0eWxlOjpJbnZhbGlkYXRpb25Nb2RlKTsKIAogICAgIHZvaWQqIG9wYXF1ZVJvb3RTbG93
KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuY3BwCmluZGV4IDkyOGRhNDM2ZTdm
MDJlYjZlMzY2MTBhZTIyNzU5YzE2YTNlYjBkOTguLjRiNTE5OGFkNzNkMjUzNDU0ZThkNGYwNzFh
YmJkNmQ4ZmNlODk0OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURh
dGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuY3BwCkBAIC0zOCw3
ICszOCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdHJ1Y3QgU2FtZVNpemVBc05vZGVSYXJl
RGF0YSB7CiAgICAgdWludDMyX3QgbV90YWJJbmRleDsKICAgICB1aW50MzJfdCBtX2NoaWxkSW5k
ZXhBbmRJc0VsZW1lbnRSYXJlRGF0YUZsYWc7Ci0gICAgdm9pZCogbV9wb2ludGVyWzJdOworICAg
IHZvaWQqIG1fcG9pbnRlclszXTsKKyNpZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCisgICAg
dm9pZCogbV9oYXNoVGFibGVJdGVyYXRvcnNBbmRNdXRleFsyXTsKKyNlbmRpZgogfTsKIAogQ09N
UElMRV9BU1NFUlQoc2l6ZW9mKE5vZGVSYXJlRGF0YSkgPT0gc2l6ZW9mKFNhbWVTaXplQXNOb2Rl
UmFyZURhdGEpLCBOb2RlUmFyZURhdGFTaG91bGRTdGF5U21hbGwpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVS
YXJlRGF0YS5oCmluZGV4IDBlZmIzMzlkMTdiNGQwZGQ0MTU4YTI2OGFiYjQwNGViNzIwZmY1YzEu
LmE0MDYxY2M4YTVlNDBmOTQ1ZmRkNzYyMGRjYTY3NTVlY2VkYmFlZGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZVJhcmVEYXRhLmgKQEAgLTIyOSwxNSArMjI5LDYgQEAgcHJpdmF0ZToKICAgICBDb2xsZWN0
aW9uQ2FjaGVNYXAgbV9jYWNoZWRDb2xsZWN0aW9uczsKIH07CiAKLWNsYXNzIE5vZGVNdXRhdGlv
bk9ic2VydmVyRGF0YSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTm9kZU11dGF0aW9uT2Jz
ZXJ2ZXJEYXRhKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPj4gcmVnaXN0cnk7
Ci0gICAgSGFzaFNldDxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKj4gdHJhbnNpZW50UmVn
aXN0cnk7Ci0KLSAgICBOb2RlTXV0YXRpb25PYnNlcnZlckRhdGEoKSB7IH0KLX07Ci0KIERFQ0xB
UkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKE5vZGVSYXJlRGF0YSk7CiBjbGFzcyBO
b2RlUmFyZURhdGEgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE5vZGVSYXJlRGF0YSk7CkBA
IC0yODQsMTIgKzI3NSwyMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAqbV9ub2RlTGlzdHM7
CiAgICAgfQogCi0gICAgTm9kZU11dGF0aW9uT2JzZXJ2ZXJEYXRhKiBtdXRhdGlvbk9ic2VydmVy
RGF0YSgpIHsgcmV0dXJuIG1fbXV0YXRpb25PYnNlcnZlckRhdGEuZ2V0KCk7IH0KLSAgICBOb2Rl
TXV0YXRpb25PYnNlcnZlckRhdGEmIGVuc3VyZU11dGF0aW9uT2JzZXJ2ZXJEYXRhKCkKKyAgICB1
c2luZyBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnlWZWN0b3IgPSBWZWN0b3I8UmVmPE11dGF0aW9u
T2JzZXJ2ZXJSZWdpc3RyYXRpb24+LCA0PjsKKworICAgIE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3Ry
eVZlY3RvciYgbXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkKKyAgICB7CisgICAgICAgIGlmICgh
bV9tdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkpCisgICAgICAgICAgICBtX211dGF0aW9uT2JzZXJ2
ZXJSZWdpc3RyeSA9IG1ha2VVbmlxdWU8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5VmVjdG9yPigp
OworICAgICAgICByZXR1cm4gKm1fbXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5OworICAgIH0KKyAg
ICBNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnlWZWN0b3IqIG11dGF0aW9uT2JzZXJ2ZXJSZWdpc3Ry
eUlmRXhpc3RzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX211dGF0aW9uT2JzZXJ2ZXJSZWdp
c3RyeS5nZXQoKTsKKyAgICB9CisgICAgSGFzaFNldDxSZWY8TXV0YXRpb25PYnNlcnZlclJlZ2lz
dHJhdGlvbj4+JiB0cmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKQogICAgIHsKLSAg
ICAgICAgaWYgKCFtX211dGF0aW9uT2JzZXJ2ZXJEYXRhKQotICAgICAgICAgICAgbV9tdXRhdGlv
bk9ic2VydmVyRGF0YSA9IG1ha2VVbmlxdWU8Tm9kZU11dGF0aW9uT2JzZXJ2ZXJEYXRhPigpOwot
ICAgICAgICByZXR1cm4gKm1fbXV0YXRpb25PYnNlcnZlckRhdGE7CisgICAgICAgIHJldHVybiBt
X3RyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeTsKICAgICB9CiAKICNpZiBEVU1QX05P
REVfU1RBVElTVElDUwpAQCAtMjk4LDcgKzI5OCw3IEBAIHB1YmxpYzoKICAgICAgICAgT3B0aW9u
U2V0PFVzZVR5cGU+IHJlc3VsdDsKICAgICAgICAgaWYgKG1fbm9kZUxpc3RzKQogICAgICAgICAg
ICAgcmVzdWx0LmFkZChVc2VUeXBlOjpOb2RlTGlzdCk7Ci0gICAgICAgIGlmIChtX211dGF0aW9u
T2JzZXJ2ZXJEYXRhKQorICAgICAgICBpZiAobV9tdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkgfHwg
bV90cmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkuY2FwYWNpdHkoKSkKICAgICAgICAg
ICAgIHJlc3VsdC5hZGQoVXNlVHlwZTo6TXV0YXRpb25PYnNlcnZlcik7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQpAQCAtMzEzLDcgKzMxMyw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X2lzRWxlbWVudFJhcmVEYXRhOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPE5vZGVMaXN0c05vZGVE
YXRhPiBtX25vZGVMaXN0czsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Tm9kZU11dGF0aW9uT2JzZXJ2
ZXJEYXRhPiBtX211dGF0aW9uT2JzZXJ2ZXJEYXRhOworICAgIHN0ZDo6dW5pcXVlX3B0cjxNdXRh
dGlvbk9ic2VydmVyUmVnaXN0cnlWZWN0b3I+IG1fbXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5Owor
ICAgIEhhc2hTZXQ8UmVmPE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24+PiBtX3RyYW5zaWVu
dE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IE5vZGVM
aXN0VHlwZUlkZW50aWZpZXI8TmFtZU5vZGVMaXN0PiB7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>