<?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>101840</bug_id>
          
          <creation_ts>2012-11-10 09:40:09 -0800</creation_ts>
          <short_desc>[GTK] Move CredentialBackingStore usage from GtkAuthenticationDialog to ResourceHandleSoup</short_desc>
          <delta_ts>2012-11-16 08:40:42 -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>WebKitGTK</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>
          
          <blocked>99913</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>danw</cc>
    
    <cc>d-r</cc>
    
    <cc>gustavo</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>763668</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-11-10 09:40:09 -0800</bug_when>
    <thetext>This will allow persistent credential storage to work no matter if the GtkAuthenticationDialog is used or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763669</commentid>
    <comment_count>1</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-11-10 09:40:53 -0800</bug_when>
    <thetext>Part of this work includes smarter interaction with the per-session credential storage and redirect handling as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763682</commentid>
    <comment_count>2</comment_count>
      <attachid>173459</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-11-10 11:09:41 -0800</bug_when>
    <thetext>Created attachment 173459
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763843</commentid>
    <comment_count>3</comment_count>
      <attachid>173459</attachid>
    <who name="Dan Winship">danw</who>
    <bug_when>2012-11-11 07:52:39 -0800</bug_when>
    <thetext>Comment on attachment 173459
Patch

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

i don&apos;t understand everything that&apos;s going on here, but a few comments...

&gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:307
&gt; +    if (message-&gt;status_code != 401 &amp;&amp; message-&gt;status_code &lt; 500 &amp;&amp; !d-&gt;m_credentialDataToSaveInPersistentStore.credential.isEmpty()) {

The 401 here suggests that this code isn&apos;t dealing with proxy authentication. Although the old code also had some explicit 401 references...

I guess if the assumption is that proxy user/pass have to be specified in the proxy configuration, and can&apos;t be provided at runtime, then this is ok.

&gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:347
&gt; +    // We always put the credentials into the URL. In the CFNetwork-port HTTP family credentials are applied in

Hm... I didn&apos;t realize you were going to have to *always* put the credentials into the URL...

as mentioned in https://bugzilla.gnome.org/show_bug.cgi?id=675306, I&apos;m planning to kill off the authenticate signal for SoupRequest-based messages, and just return an error instead, and have the caller to re-send after authenticating. Once we do that, SoupAuthManager would become useless to you, so you could just disable it and then behave like CFNetwork does.

Although then NTLM wouldn&apos;t work... I&apos;ll have to think about that.

&gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:396
&gt; +        // TODO: We are losing any username and password specified in the redirect URL, as this is the 
&gt; +        // same behavior as the CFNet port. We should investigate if this is really what we want.

definitely sounds like the right thing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767043</commentid>
    <comment_count>4</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-11-14 10:44:46 -0800</bug_when>
    <thetext>(In reply to comment #3)

&gt; i don&apos;t understand everything that&apos;s going on here, but a few comments...

Thanks for looking this over.

&gt; 
&gt; &gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:307
&gt; &gt; +    if (message-&gt;status_code != 401 &amp;&amp; message-&gt;status_code &lt; 500 &amp;&amp; !d-&gt;m_credentialDataToSaveInPersistentStore.credential.isEmpty()) {
&gt; 
&gt; The 401 here suggests that this code isn&apos;t dealing with proxy authentication. Although the old code also had some explicit 401 references...

&gt; I guess if the assumption is that proxy user/pass have to be specified in the proxy configuration, and can&apos;t be provided at runtime, then this is ok.

It would be nice to have full-fledged support for proxy authentication here as well -- though perhaps those credentials should be stored in the same way in the keychain. I essentially moved this from the old GtkAuthenticationDialog code. Does proxy authentication currently route through the &quot;authenticate&quot; signal as well? Perhaps we should just should check for success error codes.
 
&gt; &gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:347
&gt; &gt; +    // We always put the credentials into the URL. In the CFNetwork-port HTTP family credentials are applied in
&gt; 
&gt; Hm... I didn&apos;t realize you were going to have to *always* put the credentials into the URL...

Can you think of any alternatives? I think this is only for requests that have credentials specified explicitly.

&gt; as mentioned in https://bugzilla.gnome.org/show_bug.cgi?id=675306, I&apos;m planning to kill off the authenticate signal for SoupRequest-based messages, and just return an error instead, and have the caller to re-send after authenticating. Once we do that, SoupAuthManager would become useless to you, so you could just disable it and then behave like CFNetwork does.
&gt; 
&gt; Although then NTLM wouldn&apos;t work... I&apos;ll have to think about that.

If you keep me up to date with the design, I&apos;m happy to change things around to match it. It&apos;s quite possible that we can support both the &quot;authenticate&quot; signal and the new approach for backwards compatibility.

&gt; &gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:396
&gt; &gt; +        // TODO: We are losing any username and password specified in the redirect URL, as this is the 
&gt; &gt; +        // same behavior as the CFNet port. We should investigate if this is really what we want.
&gt; 
&gt; definitely sounds like the right thing

Great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768868</commentid>
    <comment_count>5</comment_count>
      <attachid>173459</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-11-15 20:03:45 -0800</bug_when>
    <thetext>Comment on attachment 173459
Patch

Makes sense to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769317</commentid>
    <comment_count>6</comment_count>
      <attachid>173459</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-16 08:40:38 -0800</bug_when>
    <thetext>Comment on attachment 173459
Patch

Clearing flags on attachment: 173459

Committed r134955: &lt;http://trac.webkit.org/changeset/134955&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769318</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-16 08:40:42 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173459</attachid>
            <date>2012-11-10 11:09:41 -0800</date>
            <delta_ts>2012-11-16 08:40:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101840-20121110110747.patch</filename>
            <type>text/plain</type>
            <size>34598</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0MTE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2FhNjc0YjhjOWI1MDFi
MDZiMWI2NzI2ODc5MzJkY2NiM2MyNGNmMC4uOThkMzY4ZDZmOGI0NGI0ZTNmNTA3ZGM2NDQ4YjIy
YmNlMWJlN2E2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDEyLTExLTEwICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBNb3Zl
IENyZWRlbnRpYWxCYWNraW5nU3RvcmUgdXNhZ2UgZnJvbSBHdGtBdXRoZW50aWNhdGlvbkRpYWxv
ZyB0byBSZXNvdXJjZUhhbmRsZVNvdXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwMTg0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE1ha2UgUmVzb3VyY2VIYW5kbGVTb3VwIGF3YXJlIG9mIHBlci1zZXNz
aW9uIENyZWRlbnRpYWxTdG9yYWdlIGFuZCBwZXJzaXN0ZW50IENyZWRlbnRpYWxTdG9yYWdlLgor
ICAgICAgICBQZXJzaXN0ZW50IGNyZWRlbnRpYWwgc3RvcmFnZSBpbnRlcmFjdGlvbiBpcyBtb3Zl
ZCBmcm9tIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLCBzbyB0aGF0IGl0IGNhbgorICAgICAgICBi
ZSB1c2VkIHdoZXRoZXIgb3Igbm90IEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nIGlzIHVzZWQgb3Ig
bm90LiBXZSB0cnkgdG8gcHJvcGVybHkgaGFuZGxlIHJlZGlyZWN0cworICAgICAgICBpbiB0aGUg
bWFubmVyIHRoYXQgdGhlIENGTmV0IGJhY2tlbmQgZG9lcy4KKworICAgICAgICBObyBuZXcgdGVz
dHMuIFRoZXJlIGFyZSB0ZXN0cyBmb3IgdGhpcyBiZWhhdmlvciwgYnV0IHRoZXkgY2Fubm90IGJl
IGFjdGl2YXRlZCB1bnRpbCB3ZSBmaW5pc2gKKyAgICAgICAgcGx1bWJpbmcgdGhpcyB0aHJvdWdo
IHRvIHRoZSBBUEkgbGF5ZXIuIE9uY2UgdGhhdCBwYXRjaCBsYW5kcywgdGhlIHRlc3RzIHdpbGwg
YmUgdHVybmVkIG9uLgorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9u
RGlhbG9nLmNwcDogTm8gbG9uZ2VyIHN0b3JlIGNyZWRlbnRpYWxzIGludG8gdGhlIHBlcnNpc3Rl
bnQKKyAgICAgICAgc3RvcmFnZSBtYW51YWxseSwgaW5zdGVhZCByZWx5IG9uIFJlc291cmNlSGFu
ZGxlU291cC4gQWxzbywgd2Ugbm8gbG9uZ2VyIGdldCBwcm9wb3NlZCBjcmVkZW50aWFscworICAg
ICAgICBmcm9tIHRoZSBwZXJzaXN0ZW50IHN0b3JhZ2UgaGVyZSBhcyB3ZWxsLiBUaGV5IGFyZSBw
cmUtbG9hZGVkIGJ5IHRoZSBSZXNvdXJjZUhhbm5kbGUuCisgICAgICAgICogcGxhdGZvcm0vZ3Rr
L0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmg6IFJlbW92ZSBjYWxsYmFja3MgYW5kIG1lbWJlcnMg
YXNzb2NpYXRlZCB3aXRoIHNhdmluZworICAgICAgICBjcmVkZW50aWFscyB0byB0aGUgcGVyc2lz
dGVudCBjcmVkZW50aWFsIHN0b3JlLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3Vy
Y2VIYW5kbGUuaDoKKyAgICAgICAgKFJlc291cmNlSGFuZGxlKTogQWRkIGEgbWV0aG9kIHdoaWNo
IGlzIHVzZWQgdG8gY29udGludWUgYXN5bmNocm9ub3VzbHkgYWZ0ZXIgbG9va2luZyBmb3IKKyAg
ICAgICAgcHJvcG9zZWQgY3JlZGVudGlhbHMgaW4gdGhlIHBlcnNpc3RlbnQgY3JlZGVudGlhbCBz
dG9yZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwu
aDogQWRkIGEgbWVtYmVyIHdoaWNoIHRyYWNrcyBwZXJzaXN0ZW50IGNyZWRlbnRpYWxzIHRvIGJl
IGFkZGVkIG9uY2Ugd2Uga25vdworICAgICAgICBhbiBhdXRoZW50aWNhdGlvbiBzdWNjZWVkZWQu
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9ndGsvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5j
cHA6CisgICAgICAgIChDcmVkZW50aWFsRm9yQ2hhbGxlbmdlQXN5bmNSZWFkeUNhbGxiYWNrRGF0
YSk6IEFkZGVkIHRoaXMgZGF0YSBzdHJ1Y3R1cmUgdXNlZCBmb3IgYXN5bmNocm9ub3VzIGFjY2Vz
cworICAgICAgICBvZiBzdG9yZWQgY3JlZGVudGlhbHMuCisgICAgICAgIChXZWJDb3JlOjpjcmVk
ZW50aWFsRm9yQ2hhbGxlbmdlQXN5bmNSZWFkeUNhbGxiYWNrKTogRGl0dG8gZm9yIHRoaXMgY2Fs
bGJhY2suCisgICAgICAgIChXZWJDb3JlOjpDcmVkZW50aWFsQmFja2luZ1N0b3JlOjpjcmVkZW50
aWFsRm9yQ2hhbGxlbmdlKTogTWFrZSB0aGlzIG1ldGhvZCBhc3luY2hyb25vdXMuCisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9ndGsvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5oOgorICAgICAg
ICAoQ3JlZGVudGlhbEJhY2tpbmdTdG9yZSk6IFVwZGF0ZSBtZXRob2Qgc2lnbmF0dXJlcyBmb3Ig
Zm9yIG1ha2luZyBjcmVkZW50aWFsRm9yQ2hhbGxlbmdlIGFzeW5jaHJvbm91cy4KKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOjpzZXRQcm9wb3NlZENyZWRlbnRp
YWwpOiBBZGRlZCBhIHNldHRlciBzbyB0aGF0IFJlc291cmNlSGFuZGxlU291cAorICAgICAgICBj
YW4gc2V0IHByb3Bvc2VkIGNyZWRlbnRpYWxzIGZyb20gdGhlIHBlcnNpc3RlbnQgY3JlZGVudGlh
bCBzdG9yZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVT
b3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdvdEhlYWRlcnNDYWxsYmFjayk6IEZvciBHVEsr
IHNhdmUgYW55IHBlbmRpbmcgY3JlZGVudGlhbCBpbiB0aGUgcGVyc2lzdGVudCBjcmVkZW50aWFs
IHN0b3JhZ2UKKyAgICAgICAgaWYgdGhlIGF1dGhlbnRpY2F0aW9uIHN1Y2NlZWRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmFwcGx5QXV0aGVudGljYXRpb25Ub1JlcXVlc3QpOiBBZGRlZCB0aGlzIG1l
dGhvZCB3aGljaCBnZW5lcmljYWxseSBlbWJlZHMgc3RvcmVkIGNyZWRlbnRpYWxzCisgICAgICAg
IGluIHRoZSByZXF1ZXN0IFVSSS4gVGhpcyBpcyB0aGUgbWV0aG9kIHRoYXQgU291cCB1c2VzIHRv
IG92ZXJyaWRlIGFueSBzb3VwLXN0b3JlZCBzZXNzaW9uIGNyZWRlbnRpYWwuCisgICAgICAgIChX
ZWJDb3JlOjpyZXN0YXJ0ZWRDYWxsYmFjayk6IFN0cmlwIGNyZWRlbnRpYWxzIGZvciByZXF1ZXN0
cyB0aGF0IHNwYW4gYSBzZWN1cml0eSBvcmlnaW4uIEhhbmRsZQorICAgICAgICBhdXRoZW50aWNh
dGluZyByZXF1ZXN0cyBmcm9tIHRoZSBzZXNzaW9uIHN0b3JlLgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlU291cFJlcXVlc3RBbmRNZXNzYWdlRm9ySGFuZGxlKTogTWFrZSB0aGUgbG9jYWwgcmVx
dWVzdCByZWZlcmVuY2UgbXV0YWJsZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxl
OjpzdGFydCk6IFJlbW92ZSBzb21lIGNvZGUgd2hpY2ggaXMgbm93IHBhcnQgb2YgYXBwbHlBdXRo
ZW50aWNhdGlvblRvUmVxdWVzdC4KKyAgICAgICAgQ2FsbCBhcHBseUF1dGhlbnRpY2F0aW9uVG9S
ZXF1ZXN0IGFuZCBjbGVhciB0aGUgdXNlciBhbmQgcGFzc3dvcmQgbWVtYmVycyBsaWtlIHRoZSBD
Rk5ldCBiYWNrZW5kIGRvZXMuCisgICAgICAgIChXZWJDb3JlOjpnZXRDcmVkZW50aWFsRnJvbVBl
cnNpc3RlbnRTdG9yZUNhbGxiYWNrKTogQWRkZWQgdGhpcyBjYWxsYmFjayBmb3IgZ2V0dGluZyBw
ZXJzaXN0ZW50bHkgc3RvcmVkIGNyZWRlbnRpYWxzLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGU6OmNvbnRpbnVlRGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKTogU3Bs
aXQgb3V0IGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZQorICAgICAgICBpbnRvIHRo
aXMgYXN5bmNocm9ub3VzIGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpk
aWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOiBGb3IgR1RLKyBjb250aW51ZSBoYW5k
bGluZyB0aGlzIHNpdHVhdGlvbiBhZnRlcgorICAgICAgICBmaXJzdCBsb29raW5nIGluIHRoZSBw
ZXJzaXN0ZW50IGNyZWRlbnRpYWwgc3RvcmUuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhh
bmRsZTo6cmVjZWl2ZWRDcmVkZW50aWFsKTogU3RvcmUgc2Vzc2lvbiBjcmVkZW50aWFscyBpbiB0
aGUgc2Vzc2lvbiBzdG9yYWdlLCB3aGljaCBpcworICAgICAgICBhdCB0aGUgbW9tZW50IGEgcmVk
dW5kYW50IHZlcnNpb24gb2YgdGhlIFNvdXAgc2Vzc2lvbiBzdG9yYWdlIGFuZCBhbHNvIHByZXBh
cmUgYW55IHBlcnNpc3RlbnQgY3JlZGVudGlhbHMKKyAgICAgICAgZm9yIHN0b3JhZ2UgbGF0ZXIg
KHNlZSBnb3RIZWFkZXJzQ2FsbGJhY2spLgorCiAyMDEyLTExLTA5ICBNaWNoYWVsIFNhYm9mZiAg
PG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIEhUTUwgQXR0cmlidXRlcyBuYW1lcyBhbmQg
dmFsdWVzIHNob3VsZCBiZSBjcmVhdGVkIGFzIDggYml0IHN0cmluZyB3aGVyZSBwb3NzaWJsZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9n
dGsvQ2hhbmdlTG9nCmluZGV4IGVjMWQwZWZjMWFlZjczM2ZkN2FhMTUxMjZkNDk2N2E0NjcxYzA4
OTYuLjIyMWVmNDViODIwZjk1MjcxM2U5MDZiYjhmOTBjZTA5MGZhODU5YzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0xMS0xMCAgTWFydGluIFJvYmluc29uICA8bXJv
Ymluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gTW92ZSBDcmVkZW50aWFsQmFja2lu
Z1N0b3JlIHVzYWdlIGZyb20gR3RrQXV0aGVudGljYXRpb25EaWFsb2cgdG8gUmVzb3VyY2VIYW5k
bGVTb3VwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDE4NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBF
bmFibGUgdGhlIENyZWRlbnRpYWxTdG9yZSBieSBkZWZhdWx0IGZvciB0aGUgV2ViS2l0MSBHVEsr
IHBvcnQuIEJlZm9yZSB0aGlzIHZhbHVlCisgICAgICAgIGRpZG4ndCBoYXZlIGFuIGJlYXJpbmcg
b24gd2hldGhlciBvciBub3QgdGhlIHBlcnNpc3RlbnQgY3JlZGVudGlhbCBzdG9yYWdlIHdhcyB1
c2VkLgorICAgICAgICBOb3cgaXMgZG9lcy4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGll
bnQ6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKTogRW5hYmxlIGNyZWRlbnRpYWwgc3RvcmFn
ZSBieSBkZWZhdWx0LgorCiAyMDEyLTExLTA1ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBsYXllciBib3JkZXJzIHRvIGNsZWFuaW5nIGFwcGVh
ciBhbmQgZGlzYXBwZWFyIG9uIHN3aXRjaGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5jcHAKaW5kZXggNjUzNWQ4NDk4
MGI1ZjU3NWE0ZjAwODdkMzA0OTA5ZWExNDg3Zjg1Mi4uNTAyMjdjMDA2MjZiNWM0MGRjZjZkNDQ4
MGIyODM2ZmJhY2FkOWZhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwCkBAIC02Niw4ICs2Niw2IEBAIEd0a0F1
dGhlbnRpY2F0aW9uRGlhbG9nOjpHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyhHdGtXaW5kb3cqIHBh
cmVudFdpbmRvdywgY29uc3QKICAgICAsIG1fbG9naW5FbnRyeSgwKQogICAgICwgbV9wYXNzd29y
ZEVudHJ5KDApCiAgICAgLCBtX3JlbWVtYmVyQ2hlY2tCdXR0b24oMCkKLSAgICAsIG1faXNTYXZp
bmdQYXNzd29yZChmYWxzZSkKLSAgICAsIG1fc2F2ZVBhc3N3b3JkSGFuZGxlcigwKQogewogICAg
IEd0a0RpYWxvZyogZGlhbG9nID0gR1RLX0RJQUxPRyhtX2RpYWxvZyk7CiAgICAgZ3RrX2RpYWxv
Z19hZGRfYnV0dG9ucyhkaWFsb2csIEdUS19TVE9DS19DQU5DRUwsIEdUS19SRVNQT05TRV9DQU5D
RUwsIEdUS19TVE9DS19PSywgR1RLX1JFU1BPTlNFX09LLCBOVUxMKTsKQEAgLTE5MCwxMCArMTg4
LDEwIEBAIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyhH
dGtXaW5kb3cqIHBhcmVudFdpbmRvdywgY29uc3QKIAogdm9pZCBHdGtBdXRoZW50aWNhdGlvbkRp
YWxvZzo6c2hvdygpCiB7Ci0gICAgQ3JlZGVudGlhbCBzYXZlZENyZWRlbnRpYWwgPSBjcmVkZW50
aWFsQmFja2luZ1N0b3JlKCkuY3JlZGVudGlhbEZvckNoYWxsZW5nZShtX2NoYWxsZW5nZSk7Ci0g
ICAgaWYgKCFzYXZlZENyZWRlbnRpYWwuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGd0a19lbnRyeV9z
ZXRfdGV4dChHVEtfRU5UUlkobV9sb2dpbkVudHJ5KSwgc2F2ZWRDcmVkZW50aWFsLnVzZXIoKS51
dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgZ3RrX2VudHJ5X3NldF90ZXh0KEdUS19FTlRSWShtX3Bh
c3N3b3JkRW50cnkpLCBzYXZlZENyZWRlbnRpYWwucGFzc3dvcmQoKS51dGY4KCkuZGF0YSgpKTsK
KyAgICBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsRnJvbVBlcnNpc3RlbnRTdG9yYWdlID0g
bV9jaGFsbGVuZ2UucHJvcG9zZWRDcmVkZW50aWFsKCk7CisgICAgaWYgKCFjcmVkZW50aWFsRnJv
bVBlcnNpc3RlbnRTdG9yYWdlLmlzRW1wdHkoKSkgeworICAgICAgICBndGtfZW50cnlfc2V0X3Rl
eHQoR1RLX0VOVFJZKG1fbG9naW5FbnRyeSksIGNyZWRlbnRpYWxGcm9tUGVyc2lzdGVudFN0b3Jh
Z2UudXNlcigpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBndGtfZW50cnlfc2V0X3RleHQoR1RL
X0VOVFJZKG1fcGFzc3dvcmRFbnRyeSksIGNyZWRlbnRpYWxGcm9tUGVyc2lzdGVudFN0b3JhZ2Uu
cGFzc3dvcmQoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgZ3RrX3RvZ2dsZV9idXR0b25fc2V0
X2FjdGl2ZShHVEtfVE9HR0xFX0JVVFRPTihtX3JlbWVtYmVyQ2hlY2tCdXR0b24pLCBUUlVFKTsK
ICAgICB9CiAKQEAgLTIwNCwzOSArMjAyLDYgQEAgdm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxv
Zzo6c2hvdygpCiB2b2lkIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpkZXN0cm95KCkKIHsKICAg
ICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9kaWFsb2cpOwotCi0gICAgLy8gRG8gbm90IGRlbGV0ZSB0
aGUgb2JqZWN0IGlmIGl0J3Mgc3RpbGwgc2F2aW5nIHRoZSBwYXNzd29yZCwKLSAgICAvLyB0aGUg
c2F2ZSBwYXNzd29yZCBjYWxsYmFjayB3aWxsIGRlbGV0ZSBpdC4KLSAgICBpZiAoIW1faXNTYXZp
bmdQYXNzd29yZCkKLSAgICAgICAgZGVsZXRlIHRoaXM7Ci19Ci0KLXZvaWQgR3RrQXV0aGVudGlj
YXRpb25EaWFsb2c6OnNhdmVQYXNzd29yZENhbGxiYWNrKFNvdXBNZXNzYWdlKiwgR3RrQXV0aGVu
dGljYXRpb25EaWFsb2cqIGRpYWxvZykKLXsKLSAgICBkaWFsb2ctPnNhdmVQYXNzd29yZCgpOwot
fQotCi12b2lkIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpzYXZlUGFzc3dvcmQoKQotewotICAg
IEFTU0VSVCghbV91c2VybmFtZS5pc051bGwoKSk7Ci0gICAgQVNTRVJUKCFtX3Bhc3N3b3JkLmlz
TnVsbCgpKTsKLQotICAgIC8vIEFueXRoaW5nIGJ1dCA0MDEgYW5kIDV4eCBtZWFucyB0aGUgcGFz
c3dvcmQgd2FzIGFjY2VwdGVkLgotICAgIFNvdXBNZXNzYWdlKiBtZXNzYWdlID0gbV9jaGFsbGVu
Z2Uuc291cE1lc3NhZ2UoKTsKLSAgICBpZiAobWVzc2FnZS0+c3RhdHVzX2NvZGUgIT0gNDAxICYm
IG1lc3NhZ2UtPnN0YXR1c19jb2RlIDwgNTAwKSB7Ci0gICAgICAgIENyZWRlbnRpYWwgY3JlZGVu
dGlhbFRvU2F2ZSA9IENyZWRlbnRpYWwoCi0gICAgICAgICAgICBTdHJpbmc6OmZyb21VVEY4KG1f
dXNlcm5hbWUuZGF0YSgpKSwKLSAgICAgICAgICAgIFN0cmluZzo6ZnJvbVVURjgobV9wYXNzd29y
ZC5kYXRhKCkpLAotICAgICAgICAgICAgQ3JlZGVudGlhbFBlcnNpc3RlbmNlUGVybWFuZW50KTsK
LSAgICAgICAgY3JlZGVudGlhbEJhY2tpbmdTdG9yZSgpLnN0b3JlQ3JlZGVudGlhbHNGb3JDaGFs
bGVuZ2UobV9jaGFsbGVuZ2UsIGNyZWRlbnRpYWxUb1NhdmUpOwotICAgIH0KLQotICAgIC8vIERp
c2Nvbm5lY3QgdGhlIGNhbGxiYWNrLiBJZiB0aGUgYXV0aGVudGljYXRpb24gc3VjY2VlZGVkIHdl
IGFyZSBkb25lLAotICAgIC8vIGFuZCBpZiBpdCBmYWlsZWQgd2UnbGwgY3JlYXRlIGEgbmV3IEd0
a0F1dGhlbnRpY2F0aW9uRGlhbG9nIGFuZCB3ZSdsbAotICAgIC8vIGNvbm5lY3QgdG8gJ2dvdC1o
ZWFkZXJzJyBhZ2FpbiBpbiBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6YXV0aGVudGljYXRlKCkK
LSAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobWVzc2FnZSwgbV9zYXZlUGFzc3dvcmRI
YW5kbGVyKTsKLQotICAgIC8vIERpYWxvZyBoYXMgYmVlbiBhbHJlYWR5IGRlc3Ryb3llZCwgYWZ0
ZXIgc2F2aW5nIHRoZSBwYXNzd29yZCBpdCBzaG91bGQgYmUgZGVsZXRlZC4KICAgICBkZWxldGUg
dGhpczsKIH0KIApAQCAtMjQ0LDE2ICsyMDksOCBAQCB2b2lkIEd0a0F1dGhlbnRpY2F0aW9uRGlh
bG9nOjphdXRoZW50aWNhdGUoKQogewogICAgIGNvbnN0IGNoYXIgKnVzZXJuYW1lID0gZ3RrX2Vu
dHJ5X2dldF90ZXh0KEdUS19FTlRSWShtX2xvZ2luRW50cnkpKTsKICAgICBjb25zdCBjaGFyICpw
YXNzd29yZCA9IGd0a19lbnRyeV9nZXRfdGV4dChHVEtfRU5UUlkobV9wYXNzd29yZEVudHJ5KSk7
Ci0KLSAgICBib29sIHJlbWVtYmVyQ3JlZGVudGlhbHMgPSBndGtfdG9nZ2xlX2J1dHRvbl9nZXRf
YWN0aXZlKEdUS19UT0dHTEVfQlVUVE9OKG1fcmVtZW1iZXJDaGVja0J1dHRvbikpOwotICAgIGlm
IChtX3JlbWVtYmVyQ2hlY2tCdXR0b24gJiYgZ3RrX3RvZ2dsZV9idXR0b25fZ2V0X2FjdGl2ZShH
VEtfVE9HR0xFX0JVVFRPTihtX3JlbWVtYmVyQ2hlY2tCdXR0b24pKSkgewotICAgICAgICBtX3Vz
ZXJuYW1lID0gdXNlcm5hbWU7Ci0gICAgICAgIG1fcGFzc3dvcmQgPSBwYXNzd29yZDsKLSAgICAg
ICAgbV9pc1NhdmluZ1Bhc3N3b3JkID0gdHJ1ZTsKLSAgICAgICAgbV9zYXZlUGFzc3dvcmRIYW5k
bGVyID0gZ19zaWduYWxfY29ubmVjdChtX2NoYWxsZW5nZS5zb3VwTWVzc2FnZSgpLCAiZ290LWhl
YWRlcnMiLCBHX0NBTExCQUNLKHNhdmVQYXNzd29yZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQot
Ci0gICAgQ3JlZGVudGlhbFBlcnNpc3RlbmNlIHBlcnNpc3RlbmNlID0gcmVtZW1iZXJDcmVkZW50
aWFscyA/IENyZWRlbnRpYWxQZXJzaXN0ZW5jZVBlcm1hbmVudCA6IENyZWRlbnRpYWxQZXJzaXN0
ZW5jZUZvclNlc3Npb247CisgICAgQ3JlZGVudGlhbFBlcnNpc3RlbmNlIHBlcnNpc3RlbmNlID0g
Z3RrX3RvZ2dsZV9idXR0b25fZ2V0X2FjdGl2ZShHVEtfVE9HR0xFX0JVVFRPTihtX3JlbWVtYmVy
Q2hlY2tCdXR0b24pKSA/CisgICAgICAgIENyZWRlbnRpYWxQZXJzaXN0ZW5jZVBlcm1hbmVudCA6
IENyZWRlbnRpYWxQZXJzaXN0ZW5jZUZvclNlc3Npb247CiAgICAgbV9jaGFsbGVuZ2UuYXV0aGVu
dGljYXRpb25DbGllbnQoKS0+cmVjZWl2ZWRDcmVkZW50aWFsKG1fY2hhbGxlbmdlLAogICAgICAg
ICBDcmVkZW50aWFsKFN0cmluZzo6ZnJvbVVURjgodXNlcm5hbWUpLCBTdHJpbmc6OmZyb21VVEY4
KHBhc3N3b3JkKSwgcGVyc2lzdGVuY2UpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgKaW5kZXggMDIxZTBlMmMxNjEz
ZDFjYTJhOWU4YzhkNzQ0NGIzZGIwOGJkNTBjNy4uZDUxMzAxNDZmMTA0NzQ1NzkyNWVlZjcyOGZh
Y2NlYjBmZDZiOWUzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0
a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgKQEAgLTQyLDggKzQyLDYgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICB2b2lkIGRlc3Ryb3koKTsKICAgICB2b2lkIGF1dGhlbnRpY2F0ZSgpOwotICAg
IHZvaWQgc2F2ZVBhc3N3b3JkKCk7Ci0gICAgc3RhdGljIHZvaWQgc2F2ZVBhc3N3b3JkQ2FsbGJh
Y2soU291cE1lc3NhZ2UqLCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyopOwogICAgIHN0YXRpYyB2
b2lkIGF1dGhlbnRpY2F0aW9uRGlhbG9nUmVzcG9uc2VDYWxsYmFjayhHdGtXaWRnZXQqLCBnaW50
IHJlc3BvbnNlSUQsIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKik7CiAKICAgICBBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSBtX2NoYWxsZW5nZTsKQEAgLTUxLDEwICs0OSw2IEBAIHByaXZhdGU6CiAg
ICAgR3RrV2lkZ2V0KiBtX2xvZ2luRW50cnk7CiAgICAgR3RrV2lkZ2V0KiBtX3Bhc3N3b3JkRW50
cnk7CiAgICAgR3RrV2lkZ2V0KiBtX3JlbWVtYmVyQ2hlY2tCdXR0b247Ci0gICAgYm9vbCBtX2lz
U2F2aW5nUGFzc3dvcmQ7Ci0gICAgdW5zaWduZWQgbG9uZyBtX3NhdmVQYXNzd29yZEhhbmRsZXI7
Ci0gICAgQ1N0cmluZyBtX3VzZXJuYW1lOwotICAgIENTdHJpbmcgbV9wYXNzd29yZDsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VIYW5kbGUuaAppbmRleCBlNDUzMmQyM2YxOTgyY2U2N2NjNTc4NzQ2NWVm
ZDQ2NDNjYTYwMmExLi4xNWNiNTQ4YTVmMzNlMDRhODUzZjgwZDgwODNiMWM0N2I2YjAxZThhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5o
CkBAIC0xNjYsNiArMTY2LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBVU0UoU09VUCkKKyAg
ICB2b2lkIGNvbnRpbnVlRGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IENy
ZWRlbnRpYWwmIGNyZWRlbnRpYWxGcm9tUGVyc2lzdGVudFN0b3JhZ2UpOwogICAgIHZvaWQgc2Vu
ZFBlbmRpbmdSZXF1ZXN0KCk7CiAgICAgc3RhdGljIFNvdXBTZXNzaW9uKiBkZWZhdWx0U2Vzc2lv
bigpOwogICAgIHN0YXRpYyB1aW50NjRfdCBnZXRTb3VwUmVxdWVzdEluaXRpYWluZ1BhZ2VJRChT
b3VwUmVxdWVzdCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAppbmRleCA2NjNjZDA0OTQ2NjNiYzZjNDE2ZmUw
YTU4NWYzNmJhNTI4ZDZiY2FlLi4xMzIzMDBjOGFkNGY5MmU0OTBkZGU0Zjk1MGM4M2I5MzQ1MGY2
Nzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
SGFuZGxlSW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlSGFuZGxlSW50ZXJuYWwuaApAQCAtMTk0LDYgKzE5NCwxMiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIFJlZlB0cjxOZXR3b3JraW5nQ29udGV4dD4gbV9jb250ZXh0OwogICAg
ICAgICBTb3VwU2Vzc2lvbiogc291cFNlc3Npb24oKTsKICNlbmRpZgorI2lmIFBMQVRGT1JNKEdU
SykKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIENyZWRlbnRpYWwgY3JlZGVudGlhbDsK
KyAgICAgICAgICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIGNoYWxsZW5nZTsKKyAgICAgICAg
fSBtX2NyZWRlbnRpYWxEYXRhVG9TYXZlSW5QZXJzaXN0ZW50U3RvcmU7CisjZW5kaWYKICNpZiBQ
TEFURk9STShRVCkKICAgICAgICAgUU5ldHdvcmtSZXBseUhhbmRsZXIqIG1fam9iOwogICAgICAg
ICBSZWZQdHI8TmV0d29ya2luZ0NvbnRleHQ+IG1fY29udGV4dDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ3RrL0NyZWRlbnRpYWxCYWNraW5nU3RvcmUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ndGsvQ3JlZGVudGlhbEJhY2tpbmdT
dG9yZS5jcHAKaW5kZXggZTRkMWJhZjIwODZlMTdhNTRlMzg0NTlkNzVjNDNmMjYxNGVlYzMwOC4u
MzQyM2ZhNWRlZDIyNmRlYjk3Y2U3MzNiMTdlZGMxOWJiN2NkNjk0NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ndGsvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ndGsvQ3JlZGVudGlhbEJh
Y2tpbmdTdG9yZS5jcHAKQEAgLTYyLDMwICs2Miw1NiBAQCBzdGF0aWMgR1JlZlB0cjxHSGFzaFRh
YmxlPiBjcmVhdGVBdHRyaWJ1dGVIYXNoVGFibGVGcm9tQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRp
YwogICAgIHJldHVybiBhdHRyaWJ1dGVzOwogfQogCi1DcmVkZW50aWFsIENyZWRlbnRpYWxCYWNr
aW5nU3RvcmU6OmNyZWRlbnRpYWxGb3JDaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UmIGNoYWxsZW5nZSkKK3N0cnVjdCBDcmVkZW50aWFsRm9yQ2hhbGxlbmdlQXN5bmNSZWFk
eUNhbGxiYWNrRGF0YSB7CisgICAgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZTo6Q3JlZGVudGlhbEZv
ckNoYWxsZW5nZUNhbGxiYWNrIGNhbGxiYWNrOworICAgIHZvaWQqIGRhdGE7Cit9OworCitzdGF0
aWMgdm9pZCBjcmVkZW50aWFsRm9yQ2hhbGxlbmdlQXN5bmNSZWFkeUNhbGxiYWNrKFNlY3JldFNl
cnZpY2UqIHNlcnZpY2UsIEdBc3luY1Jlc3VsdCogYXN5bmNSZXN1bHQsIENyZWRlbnRpYWxGb3JD
aGFsbGVuZ2VBc3luY1JlYWR5Q2FsbGJhY2tEYXRhKiBjYWxsYmFja0RhdGEpCiB7Ci0gICAgR093
blB0cjxHTGlzdD4gZWxlbWVudHMoc2VjcmV0X3NlcnZpY2Vfc2VhcmNoX3N5bmMoCi0gICAgICAg
IDAsIC8vIFRoZSBkZWZhdWx0IFNlY3JldFNlcnZpY2UuCi0gICAgICAgIFNFQ1JFVF9TQ0hFTUFf
Q09NUEFUX05FVFdPUkssCi0gICAgICAgIGNyZWF0ZUF0dHJpYnV0ZUhhc2hUYWJsZUZyb21DaGFs
bGVuZ2UoY2hhbGxlbmdlKS5nZXQoKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8U2VjcmV0U2VhcmNo
RmxhZ3M+KFNFQ1JFVF9TRUFSQ0hfVU5MT0NLIHwgU0VDUkVUX1NFQVJDSF9MT0FEX1NFQ1JFVFMp
LCAvLyBUaGUgZGVmYXVsdCBiZWhhdmlvciBpcyB0byBvbmx5IHJldHVybiB0aGUgbW9zdCByZWNl
bnQgaXRlbS4KLSAgICAgICAgMCwgLy8gY2FuY2VsbGFibGUKLSAgICAgICAgMCkpOyAvLyBlcnJv
cgotICAgIGlmICghZWxlbWVudHMgfHwgIWVsZW1lbnRzLT5kYXRhKQotICAgICAgICByZXR1cm4g
Q3JlZGVudGlhbCgpOworICAgIENyZWRlbnRpYWxCYWNraW5nU3RvcmU6OkNyZWRlbnRpYWxGb3JD
aGFsbGVuZ2VDYWxsYmFjayBjYWxsYmFjayA9IGNhbGxiYWNrRGF0YS0+Y2FsbGJhY2s7CisgICAg
dm9pZCogZGF0YSA9IGNhbGxiYWNrRGF0YS0+ZGF0YTsKKyAgICBkZWxldGUgY2FsbGJhY2tEYXRh
OworCisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIEdPd25QdHI8R0xpc3Q+IGVsZW1l
bnRzKHNlY3JldF9zZXJ2aWNlX3NlYXJjaF9maW5pc2goc2VydmljZSwgYXN5bmNSZXN1bHQsICZl
cnJvci5vdXRQdHIoKSkpOworICAgIGlmIChlcnJvciB8fCAhZWxlbWVudHMgfHwgIWVsZW1lbnRz
LT5kYXRhKSB7CisgICAgICAgIGNhbGxiYWNrKENyZWRlbnRpYWwoKSwgZGF0YSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CiAKICAgICBHUmVmUHRyPFNlY3JldEl0ZW0+IHNlY3JldEl0ZW0gPSBh
ZG9wdEdSZWYoc3RhdGljX2Nhc3Q8U2VjcmV0SXRlbSo+KGVsZW1lbnRzLT5kYXRhKSk7CiAgICAg
R1JlZlB0cjxHSGFzaFRhYmxlPiBhdHRyaWJ1dGVzID0gYWRvcHRHUmVmKHNlY3JldF9pdGVtX2dl
dF9hdHRyaWJ1dGVzKHNlY3JldEl0ZW0uZ2V0KCkpKTsKICAgICBTdHJpbmcgdXNlciA9IFN0cmlu
Zzo6ZnJvbVVURjgoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGdfaGFzaF90YWJsZV9sb29rdXAo
YXR0cmlidXRlcy5nZXQoKSwgInVzZXIiKSkpOwotICAgIGlmICh1c2VyLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuIENyZWRlbnRpYWwoKTsKKyAgICBpZiAodXNlci5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgY2FsbGJhY2soQ3JlZGVudGlhbCgpLCBkYXRhKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KIAogICAgIHNpemVfdCBsZW5ndGg7CiAgICAgR1JlZlB0cjxTZWNyZXRWYWx1ZT4gc2VjcmV0
VmFsdWUgPSBhZG9wdEdSZWYoc2VjcmV0X2l0ZW1fZ2V0X3NlY3JldChzZWNyZXRJdGVtLmdldCgp
KSk7CiAgICAgY29uc3QgY2hhciogcGFzc3dvcmREYXRhID0gc2VjcmV0X3ZhbHVlX2dldChzZWNy
ZXRWYWx1ZS5nZXQoKSwgJmxlbmd0aCk7CiAgICAgU3RyaW5nIHBhc3N3b3JkID0gU3RyaW5nOjpm
cm9tVVRGOChwYXNzd29yZERhdGEsIGxlbmd0aCk7CiAKLSAgICByZXR1cm4gQ3JlZGVudGlhbCh1
c2VyLCBwYXNzd29yZCwgQ3JlZGVudGlhbFBlcnNpc3RlbmNlUGVybWFuZW50KTsKKyAgICBjYWxs
YmFjayhDcmVkZW50aWFsKHVzZXIsIHBhc3N3b3JkLCBDcmVkZW50aWFsUGVyc2lzdGVuY2VQZXJt
YW5lbnQpLCBkYXRhKTsKK30KKwordm9pZCBDcmVkZW50aWFsQmFja2luZ1N0b3JlOjpjcmVkZW50
aWFsRm9yQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2Us
IENyZWRlbnRpYWxGb3JDaGFsbGVuZ2VDYWxsYmFjayBjYWxsYmFjaywgdm9pZCogZGF0YSkKK3sK
KyAgICAvLyBUaGUgZGVmYXVsdCBmbGFnIG9ubHkgcmV0dXJucyB0aGUgbW9zdCByZWNlbnQgaXRl
bSwgbm90IGFsbCBvZiB0aGVtLgorICAgIFNlY3JldFNlYXJjaEZsYWdzIHNlYXJjaEZsYWdzID0g
c3RhdGljX2Nhc3Q8U2VjcmV0U2VhcmNoRmxhZ3M+KFNFQ1JFVF9TRUFSQ0hfVU5MT0NLIHwgU0VD
UkVUX1NFQVJDSF9MT0FEX1NFQ1JFVFMpOworICAgIENyZWRlbnRpYWxGb3JDaGFsbGVuZ2VBc3lu
Y1JlYWR5Q2FsbGJhY2tEYXRhKiBjYWxsYmFja0RhdGEgPSBuZXcgQ3JlZGVudGlhbEZvckNoYWxs
ZW5nZUFzeW5jUmVhZHlDYWxsYmFja0RhdGE7CisgICAgY2FsbGJhY2tEYXRhLT5jYWxsYmFjayA9
IGNhbGxiYWNrOworICAgIGNhbGxiYWNrRGF0YS0+ZGF0YSA9IGRhdGE7CisKKyAgICBzZWNyZXRf
c2VydmljZV9zZWFyY2goCisgICAgICAgIDAsIC8vIFRoZSBkZWZhdWx0IFNlY3JldFNlcnZpY2Uu
CisgICAgICAgIFNFQ1JFVF9TQ0hFTUFfQ09NUEFUX05FVFdPUkssCisgICAgICAgIGNyZWF0ZUF0
dHJpYnV0ZUhhc2hUYWJsZUZyb21DaGFsbGVuZ2UoY2hhbGxlbmdlKS5nZXQoKSwKKyAgICAgICAg
c2VhcmNoRmxhZ3MsCisgICAgICAgIDAsIC8vIGNhbmNlbGxhYmxlCisgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oY3JlZGVudGlhbEZvckNoYWxsZW5nZUFzeW5j
UmVhZHlDYWxsYmFjayksCisgICAgICAgIGNhbGxiYWNrRGF0YSk7CiB9CiAKIHZvaWQgQ3JlZGVu
dGlhbEJhY2tpbmdTdG9yZTo6c3RvcmVDcmVkZW50aWFsc0ZvckNoYWxsZW5nZShjb25zdCBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50
aWFsKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ndGsvQ3Jl
ZGVudGlhbEJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9n
dGsvQ3JlZGVudGlhbEJhY2tpbmdTdG9yZS5oCmluZGV4IDM4M2RhZmNmMTI2MjRiNWRjYjY5YWFi
MmZmMzk3YzQyY2I3YjNmYTMuLjIwZGE5YTE1N2ZiYzE5NmU2Mjg3MDQyMmFjZTllZmU4OTc0OGVl
NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ3RrL0NyZWRl
bnRpYWxCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2d0ay9DcmVkZW50aWFsQmFja2luZ1N0b3JlLmgKQEAgLTM4LDkgKzM4LDEwIEBAIHB1YmxpYzoK
ICAgICBmcmllbmQgQ3JlZGVudGlhbEJhY2tpbmdTdG9yZSYgY3JlZGVudGlhbEJhY2tpbmdTdG9y
ZSgpOwogICAgIHZpcnR1YWwgfkNyZWRlbnRpYWxCYWNraW5nU3RvcmUoKSB7IH0KIAotICAgIENy
ZWRlbnRpYWwgY3JlZGVudGlhbEZvckNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYpOwotICAgIHZvaWQgc3RvcmVDcmVkZW50aWFsc0ZvckNoYWxsZW5nZShjb25zdCBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYsIGNvbnN0IENyZWRlbnRpYWwmKTsKKyAgICB0eXBlZGVmIHZv
aWQgKCpDcmVkZW50aWFsRm9yQ2hhbGxlbmdlQ2FsbGJhY2spKGNvbnN0IENyZWRlbnRpYWwmLCB2
b2lkKiBkYXRhKTsKIAorICAgIHZvaWQgY3JlZGVudGlhbEZvckNoYWxsZW5nZShjb25zdCBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYsIENyZWRlbnRpYWxGb3JDaGFsbGVuZ2VDYWxsYmFjaywgdm9p
ZCogZGF0YSk7CisgICAgdm9pZCBzdG9yZUNyZWRlbnRpYWxzRm9yQ2hhbGxlbmdlKGNvbnN0IEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgY29uc3QgQ3JlZGVudGlhbCYpOwogcHJpdmF0ZToKICAg
ICBDcmVkZW50aWFsQmFja2luZ1N0b3JlKCkgeyB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UuaAppbmRleCAxNjc1Yjk2MjEyZTM3ODAzMzY1NjUyNmE2MThlN2E0OWU2MzFjZTlkLi40OGNm
NTkxYmU0OTQ3ZjBhZGViNzVlY2NiY2VjMjA2OTJlOTBkMDY5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UuaApAQCAtNDksNiArNDksNyBAQCBwdWJsaWM6CiAgICAgU291cFNlc3Npb24qIHNv
dXBTZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9zb3VwU2Vzc2lvbi5nZXQoKTsgfQogICAgIFNv
dXBNZXNzYWdlKiBzb3VwTWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cE1lc3NhZ2UuZ2V0
KCk7IH0KICAgICBTb3VwQXV0aCogc291cEF1dGgoKSBjb25zdCB7IHJldHVybiBtX3NvdXBBdXRo
LmdldCgpOyB9CisgICAgdm9pZCBzZXRQcm9wb3NlZENyZWRlbnRpYWwoY29uc3QgQ3JlZGVudGlh
bCYgY3JlZGVudGlhbCkgeyBtX3Byb3Bvc2VkQ3JlZGVudGlhbCA9IGNyZWRlbnRpYWw7IH0KIAog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNl
SGFuZGxlU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVz
b3VyY2VIYW5kbGVTb3VwLmNwcAppbmRleCBhN2Q3YjZkYjJiMTZhYjNmZjE3ZGNiM2NmMDEwZTI4
YzcwZDE4NDRjLi5mODUxNmY4NzQ2YzA0ZDMyNzg2MWJjZGVmNmU3NTcxYzhmNGVmN2M4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5k
bGVTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVz
b3VyY2VIYW5kbGVTb3VwLmNwcApAQCAtMSwxMSArMSwxMiBAQAogLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxwIFRva2VyIDxhbHBA
YXRva2VyLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOCBYYW4gTG9wZXogPHhhbkBnbm9tZS5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTAgQ29sbGFib3JhIEx0ZC4KICAqIENvcHly
aWdodCAoQykgMjAwOSBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgogICogQ29weXJpZ2h0IChD
KSAyMDA5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YSA8Z25zQGdub21lLm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAwOSBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkBpbWVuZGlvLmNvbT4KLSAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChD
KSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyIElnYWxpYSBTLkwuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgSm9obiBLamVsbGJlcmcgPGpvaG4ua2plbGxiZXJnQHBvd2VyLmFsc3RvbS5jb20+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24KICAqCkBAIC0zMSw2ICszMiw3IEBA
CiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJDaHJvbWVDbGll
bnQuaCIKICNpbmNsdWRlICJDb29raWVKYXJTb3VwLmgiCisjaW5jbHVkZSAiQ3JlZGVudGlhbFN0
b3JhZ2UuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJHT3duUHRyU291cC5oIgpAQCAtNjgsNiArNzAsMTAgQEAKICNpbmNsdWRlICJCbG9i
U3RvcmFnZURhdGEuaCIKICNlbmRpZgogCisjaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgIkNy
ZWRlbnRpYWxCYWNraW5nU3RvcmUuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICNkZWZpbmUgUkVBRF9CVUZGRVJfU0laRSA4MTkyCkBAIC0yNzksNyArMjg1LDcgQEAgU291cFNl
c3Npb24qIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6OnNvdXBTZXNzaW9uKCkKICAgICByZXR1cm4g
c2Vzc2lvbjsKIH0KIAotc3RhdGljIHZvaWQgZ290SGVhZGVyc0NhbGxiYWNrKFNvdXBNZXNzYWdl
KiBtc2csIGdwb2ludGVyIGRhdGEpCitzdGF0aWMgdm9pZCBnb3RIZWFkZXJzQ2FsbGJhY2soU291
cE1lc3NhZ2UqIG1lc3NhZ2UsIGdwb2ludGVyIGRhdGEpCiB7CiAgICAgUmVzb3VyY2VIYW5kbGUq
IGhhbmRsZSA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oZGF0YSk7CiAgICAgaWYgKCFo
YW5kbGUpCkBAIC0yOTMsMTggKzI5OSw2NSBAQCBzdGF0aWMgdm9pZCBnb3RIZWFkZXJzQ2FsbGJh
Y2soU291cE1lc3NhZ2UqIG1zZywgZ3BvaW50ZXIgZGF0YSkKICAgICAgICAgZC0+bV9yZXNwb25z
ZS5yZXNvdXJjZUxvYWRUaW1pbmcoKS0+cmVjZWl2ZUhlYWRlcnNFbmQgPSBtaWxpc2Vjb25kc1Np
bmNlUmVxdWVzdChkLT5tX3Jlc3BvbnNlLnJlc291cmNlTG9hZFRpbWluZygpLT5yZXF1ZXN0VGlt
ZSk7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEdUSykKKyAgICAvLyBXZSBhcmUgYSBiaXQgbW9y
ZSBjb25zZXJ2YXRpdmUgd2l0aCB0aGUgcGVyc2lzdGVudCBjcmVkZW50aWFsIHN0b3JhZ2UgdGhh
biB0aGUgc2Vzc2lvbiBzdG9yZSwKKyAgICAvLyBzaW5jZSB3ZSBhcmUgd2FpdGluZyB1bnRpbCB3
ZSBrbm93IHRoYXQgdGhpcyBhdXRoZW50aWNhdGlvbiBzdWNjZWVkZWQgYmVmb3JlIGFjdHVhbGx5
IHN0b3JpbmcuCisgICAgLy8gVGhpcyBpcyBiZWNhdXNlIHdlIHdhbnQgdG8gYXZvaWQgaGl0dGlu
ZyB0aGUgZGlzayB0d2ljZSAob25jZSB0byBhZGQgYW5kIG9uY2UgdG8gcmVtb3ZlKSBmb3IKKyAg
ICAvLyBpbmNvcnJlY3QgY3JlZGVudGlhbHMgb3IgcG9sbHV0aW5nIHRoZSBrZXljaGFpbiB3aXRo
IGludmFsaWQgY3JlZGVudGlhbHMuCisgICAgaWYgKG1lc3NhZ2UtPnN0YXR1c19jb2RlICE9IDQw
MSAmJiBtZXNzYWdlLT5zdGF0dXNfY29kZSA8IDUwMCAmJiAhZC0+bV9jcmVkZW50aWFsRGF0YVRv
U2F2ZUluUGVyc2lzdGVudFN0b3JlLmNyZWRlbnRpYWwuaXNFbXB0eSgpKSB7CisgICAgICAgIGNy
ZWRlbnRpYWxCYWNraW5nU3RvcmUoKS5zdG9yZUNyZWRlbnRpYWxzRm9yQ2hhbGxlbmdlKAorICAg
ICAgICAgICAgZC0+bV9jcmVkZW50aWFsRGF0YVRvU2F2ZUluUGVyc2lzdGVudFN0b3JlLmNoYWxs
ZW5nZSwKKyAgICAgICAgICAgIGQtPm1fY3JlZGVudGlhbERhdGFUb1NhdmVJblBlcnNpc3RlbnRT
dG9yZS5jcmVkZW50aWFsKTsKKyAgICB9CisjZW5kaWYKKwogICAgIC8vIFRoZSBvcmlnaW5hbCBy
ZXNwb25zZSB3aWxsIGJlIG5lZWRlZCBsYXRlciB0byBmZWVkIHRvIHdpbGxTZW5kUmVxdWVzdCBp
bgogICAgIC8vIHJlc3RhcnRlZENhbGxiYWNrKCkgaW4gY2FzZSB3ZSBhcmUgcmVkaXJlY3RlZC4g
Rm9yIHRoaXMgcmVhc29uLCBzbyB3ZSBzdG9yZSBpdAogICAgIC8vIGhlcmUuCiAgICAgUmVzb3Vy
Y2VSZXNwb25zZSByZXNwb25zZTsKLSAgICByZXNwb25zZS51cGRhdGVGcm9tU291cE1lc3NhZ2Uo
bXNnKTsKLQorICAgIHJlc3BvbnNlLnVwZGF0ZUZyb21Tb3VwTWVzc2FnZShtZXNzYWdlKTsKICAg
ICBkLT5tX3Jlc3BvbnNlID0gcmVzcG9uc2U7CiB9CiAKK3N0YXRpYyB2b2lkIGFwcGx5QXV0aGVu
dGljYXRpb25Ub1JlcXVlc3QoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgYm9vbCByZWRpcmVjdCkK
K3sKKyAgICAvLyBtX3VzZXIvbV9wYXNzIGFyZSBjcmVkZW50aWFscyBnaXZlbiBtYW51YWxseSwg
Zm9yIGluc3RhbmNlLCBieSB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byBYTUxIdHRwUmVxdWVzdC5v
cGVuKCkuCisgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJu
YWwoKTsKKyAgICBTdHJpbmcgdXNlciA9IGQtPm1fdXNlcjsKKyAgICBTdHJpbmcgcGFzc3dvcmQg
PSBkLT5tX3Bhc3M7CisKKyAgICBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QgPSBkLT5tX2ZpcnN0
UmVxdWVzdDsKKyAgICBpZiAoIWhhbmRsZS0+Y2xpZW50KCkgfHwgaGFuZGxlLT5jbGllbnQoKS0+
c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoaGFuZGxlKSkgeworICAgICAgICBpZiAoZC0+bV91
c2VyLmlzRW1wdHkoKSAmJiBkLT5tX3Bhc3MuaXNFbXB0eSgpKQorICAgICAgICAgICAgZC0+bV9p
bml0aWFsQ3JlZGVudGlhbCA9IENyZWRlbnRpYWxTdG9yYWdlOjpnZXQocmVxdWVzdC51cmwoKSk7
CisgICAgICAgIGVsc2UgaWYgKCFyZWRpcmVjdCkgeworICAgICAgICAgICAgLy8gSWYgdGhlcmUg
aXMgYWxyZWFkeSBhIHByb3RlY3Rpb24gc3BhY2Uga25vd24gZm9yIHRoZSBVUkwsIHVwZGF0ZSBz
dG9yZWQgY3JlZGVudGlhbHMKKyAgICAgICAgICAgIC8vIGJlZm9yZSBzZW5kaW5nIGEgcmVxdWVz
dC4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBpbXBsZW1lbnQgbG9nb3V0IGJ5IHNlbmRpbmcg
YW4KKyAgICAgICAgICAgIC8vIFhNTEh0dHBSZXF1ZXN0IHdpdGgga25vd24gaW5jb3JyZWN0IGNy
ZWRlbnRpYWxzLCBhbmQgYWJvcnRpbmcgaXQgaW1tZWRpYXRlbHkgKHNvIHRoYXQKKyAgICAgICAg
ICAgIC8vIGFuIGF1dGhlbnRpY2F0aW9uIGRpYWxvZyBkb2Vzbid0IHBvcCB1cCkuCisgICAgICAg
ICAgICBDcmVkZW50aWFsU3RvcmFnZTo6c2V0KENyZWRlbnRpYWwoZC0+bV91c2VyLCBkLT5tX3Bh
c3MsIENyZWRlbnRpYWxQZXJzaXN0ZW5jZU5vbmUpLCByZXF1ZXN0LnVybCgpKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmICghZC0+bV9pbml0aWFsQ3JlZGVudGlhbC5pc0VtcHR5KCkpIHsK
KyAgICAgICAgdXNlciA9IGQtPm1faW5pdGlhbENyZWRlbnRpYWwudXNlcigpOworICAgICAgICBw
YXNzd29yZCA9IGQtPm1faW5pdGlhbENyZWRlbnRpYWwucGFzc3dvcmQoKTsKKyAgICB9CisKKyAg
ICAvLyBXZSBhbHdheXMgcHV0IHRoZSBjcmVkZW50aWFscyBpbnRvIHRoZSBVUkwuIEluIHRoZSBD
Rk5ldHdvcmstcG9ydCBIVFRQIGZhbWlseSBjcmVkZW50aWFscyBhcmUgYXBwbGllZCBpbgorICAg
IC8vIHRoZSBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgY2FsbGJhY2ssIGJ1dCBs
aWJzb3VwIHJlcXVpcmVzIHVzIHRvIHVzZSB0aGlzIG1ldGhvZCB0byBvdmVycmlkZQorICAgIC8v
IGFueSBwcmV2aW91c2x5IHJlbWVtYmVyZWQgY3JlZGVudGlhbHMuIEl0IGhhcyBpdHMgb3duIHBl
ci1zZXNzaW9uIGNyZWRlbnRpYWwgc3RvcmFnZS4KKyAgICBpZiAoIXVzZXIuaXNFbXB0eSgpIHx8
ICFwYXNzd29yZC5pc0VtcHR5KCkpIHsKKyAgICAgICAgS1VSTCB1cmxXaXRoQ3JlZGVudGlhbHMo
cmVxdWVzdC51cmwoKSk7CisgICAgICAgIHVybFdpdGhDcmVkZW50aWFscy5zZXRVc2VyKGQtPm1f
dXNlcik7CisgICAgICAgIHVybFdpdGhDcmVkZW50aWFscy5zZXRQYXNzKGQtPm1fcGFzcyk7Cisg
ICAgICAgIHJlcXVlc3Quc2V0VVJMKHVybFdpdGhDcmVkZW50aWFscyk7CisgICAgfQorfQorCiAv
LyBDYWxsZWQgZWFjaCB0aW1lIHRoZSBtZXNzYWdlIGlzIGdvaW5nIHRvIGJlIHNlbnQgYWdhaW4g
ZXhjZXB0IHRoZSBmaXJzdCB0aW1lLgogLy8gSXQncyB1c2VkIG1vc3RseSB0byBsZXQgd2Via2l0
IGtub3cgYWJvdXQgcmVkaXJlY3RzLgotc3RhdGljIHZvaWQgcmVzdGFydGVkQ2FsbGJhY2soU291
cE1lc3NhZ2UqIG1zZywgZ3BvaW50ZXIgZGF0YSkKK3N0YXRpYyB2b2lkIHJlc3RhcnRlZENhbGxi
YWNrKFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBncG9pbnRlciBkYXRhKQogewogICAgIFJlc291cmNl
SGFuZGxlKiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGRhdGEpOwogICAg
IGlmICghaGFuZGxlKQpAQCAtMzEzLDI5ICszNjYsNTAgQEAgc3RhdGljIHZvaWQgcmVzdGFydGVk
Q2FsbGJhY2soU291cE1lc3NhZ2UqIG1zZywgZ3BvaW50ZXIgZGF0YSkKICAgICBpZiAoZC0+bV9j
YW5jZWxsZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIEdPd25QdHI8Y2hhcj4gdXJpKHNvdXBf
dXJpX3RvX3N0cmluZyhzb3VwX21lc3NhZ2VfZ2V0X3VyaShtc2cpLCBmYWxzZSkpOworICAgIEdP
d25QdHI8Y2hhcj4gdXJpKHNvdXBfdXJpX3RvX3N0cmluZyhzb3VwX21lc3NhZ2VfZ2V0X3VyaSht
ZXNzYWdlKSwgZmFsc2UpKTsKICAgICBTdHJpbmcgbG9jYXRpb24gPSBTdHJpbmc6OmZyb21VVEY4
KHVyaS5nZXQoKSk7CiAgICAgS1VSTCBuZXdVUkwgPSBLVVJMKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0
KCkudXJsKCksIGxvY2F0aW9uKTsKIAogICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0gaGFu
ZGxlLT5maXJzdFJlcXVlc3QoKTsKICAgICByZXF1ZXN0LnNldFVSTChuZXdVUkwpOwotICAgIHJl
cXVlc3Quc2V0SFRUUE1ldGhvZChtc2ctPm1ldGhvZCk7CisgICAgcmVxdWVzdC5zZXRIVFRQTWV0
aG9kKG1lc3NhZ2UtPm1ldGhvZCk7CiAKICAgICAvLyBTaG91bGQgbm90IHNldCBSZWZlcmVyIGFm
dGVyIGEgcmVkaXJlY3QgZnJvbSBhIHNlY3VyZSByZXNvdXJjZSB0byBub24tc2VjdXJlIG9uZS4K
ICAgICBpZiAoIXJlcXVlc3QudXJsKCkucHJvdG9jb2xJcygiaHR0cHMiKSAmJiBwcm90b2NvbElz
KHJlcXVlc3QuaHR0cFJlZmVycmVyKCksICJodHRwcyIpKSB7CiAgICAgICAgIHJlcXVlc3QuY2xl
YXJIVFRQUmVmZXJyZXIoKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfcmVtb3ZlKG1z
Zy0+cmVxdWVzdF9oZWFkZXJzLCAiUmVmZXJlciIpOworICAgICAgICBzb3VwX21lc3NhZ2VfaGVh
ZGVyc19yZW1vdmUobWVzc2FnZS0+cmVxdWVzdF9oZWFkZXJzLCAiUmVmZXJlciIpOwogICAgIH0K
IAorICAgIGNvbnN0IEtVUkwmIHVybCA9IHJlcXVlc3QudXJsKCk7CisgICAgZC0+bV91c2VyID0g
dXJsLnVzZXIoKTsKKyAgICBkLT5tX3Bhc3MgPSB1cmwucGFzcygpOworICAgIHJlcXVlc3QucmVt
b3ZlQ3JlZGVudGlhbHMoKTsKKworICAgIFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9u
c2UgPSBkLT5tX3Jlc3BvbnNlOworICAgIGlmICghcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFs
KHJlcXVlc3QudXJsKCksIHJlZGlyZWN0UmVzcG9uc2UudXJsKCkpKSB7CisgICAgICAgIC8vIElm
IHRoZSBuZXR3b3JrIGxheWVyIGNhcnJpZXMgb3ZlciBhdXRoZW50aWNhdGlvbiBoZWFkZXJzIGZy
b20gdGhlIG9yaWdpbmFsIHJlcXVlc3QKKyAgICAgICAgLy8gaW4gYSBjcm9zcy1vcmlnaW4gcmVk
aXJlY3QsIHdlIHdhbnQgdG8gY2xlYXIgdGhvc2UgaGVhZGVycyBoZXJlLiAKKyAgICAgICAgcmVx
dWVzdC5jbGVhckhUVFBBdXRob3JpemF0aW9uKCk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFk
ZXJzX3JlbW92ZShtZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnMsICJBdXRob3JpemF0aW9uIik7CisK
KyAgICAgICAgLy8gVE9ETzogV2UgYXJlIGxvc2luZyBhbnkgdXNlcm5hbWUgYW5kIHBhc3N3b3Jk
IHNwZWNpZmllZCBpbiB0aGUgcmVkaXJlY3QgVVJMLCBhcyB0aGlzIGlzIHRoZSAKKyAgICAgICAg
Ly8gc2FtZSBiZWhhdmlvciBhcyB0aGUgQ0ZOZXQgcG9ydC4gV2Ugc2hvdWxkIGludmVzdGlnYXRl
IGlmIHRoaXMgaXMgcmVhbGx5IHdoYXQgd2Ugd2FudC4KKyAgICB9IGVsc2UKKyAgICAgICAgYXBw
bHlBdXRoZW50aWNhdGlvblRvUmVxdWVzdChoYW5kbGUsIHRydWUpOworCisgICAgLy8gUGVyLXJl
cXVlc3QgYXV0aGVudGljYXRpb24gaXMgaGFuZGxlZCB2aWEgdGhlIFVSSS1lbWJlZGRlZCB1c2Vy
bmFtZS9wYXNzd29yZC4KKyAgICBHT3duUHRyPFNvdXBVUkk+IG5ld1NvdXBVUkkoc291cF91cmlf
bmV3KHJlcXVlc3QudXJsU3RyaW5nRm9yU291cCgpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBzb3Vw
X21lc3NhZ2Vfc2V0X3VyaShtZXNzYWdlLCBuZXdTb3VwVVJJLmdldCgpKTsKKwogICAgIGlmIChk
LT5jbGllbnQoKSkKLSAgICAgICAgZC0+Y2xpZW50KCktPndpbGxTZW5kUmVxdWVzdChoYW5kbGUs
IHJlcXVlc3QsIGQtPm1fcmVzcG9uc2UpOworICAgICAgICBkLT5jbGllbnQoKS0+d2lsbFNlbmRS
ZXF1ZXN0KGhhbmRsZSwgcmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CiAKICAgICBpZiAoZC0+
bV9jYW5jZWxsZWQpCiAgICAgICAgIHJldHVybjsKIAogI2lmIEVOQUJMRShXRUJfVElNSU5HKQot
ICAgIGQtPm1fcmVzcG9uc2Uuc2V0UmVzb3VyY2VMb2FkVGltaW5nKFJlc291cmNlTG9hZFRpbWlu
Zzo6Y3JlYXRlKCkpOwotICAgIGQtPm1fcmVzcG9uc2UucmVzb3VyY2VMb2FkVGltaW5nKCktPnJl
cXVlc3RUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CisgICAgcmVkaXJlY3RS
ZXNwb25zZS5zZXRSZXNvdXJjZUxvYWRUaW1pbmcoUmVzb3VyY2VMb2FkVGltaW5nOjpjcmVhdGUo
KSk7CisgICAgcmVkaXJlY3RSZXNwb25zZS5yZXNvdXJjZUxvYWRUaW1pbmcoKS0+cmVxdWVzdFRp
bWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKICNlbmRpZgogCiAgICAgLy8gVXBk
YXRlIHRoZSBmaXJzdCBwYXJ0eSBpbiBjYXNlIHRoZSBiYXNlIFVSTCBjaGFuZ2VkIHdpdGggdGhl
IHJlZGlyZWN0CkBAIC03NDksMTQgKzgyMywxNSBAQCBzdGF0aWMgYm9vbCBjcmVhdGVTb3VwUmVx
dWVzdEFuZE1lc3NhZ2VGb3JIYW5kbGUoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgYm9vbCBpcwog
ICAgIFNvdXBSZXF1ZXN0ZXIqIHJlcXVlc3RlciA9IFNPVVBfUkVRVUVTVEVSKHNvdXBfc2Vzc2lv
bl9nZXRfZmVhdHVyZShkLT5zb3VwU2Vzc2lvbigpLCBTT1VQX1RZUEVfUkVRVUVTVEVSKSk7CiAK
ICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0ID0gaGFuZGxlLT5maXJzdFJlcXVlc3QoKTsKKyAgICBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QgPSBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpOworCiAgICAgZC0+bV9zb3VwUmVxdWVzdCA9
IGFkb3B0R1JlZihzb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0KHJlcXVlc3RlciwgcmVxdWVzdC51cmxT
dHJpbmdGb3JTb3VwKCkudXRmOCgpLmRhdGEoKSwgJmVycm9yLm91dFB0cigpKSk7CiAgICAgaWYg
KGVycm9yKSB7CiAgICAgICAgIGQtPm1fc291cFJlcXVlc3QuY2xlYXIoKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIC8vIE5vbi1IVFRQIGZhbWlseSByZXF1ZXN0cyBkbyBu
b3QgbmVlZCBhIHNvdXBNZXNzYWdlLCBhcyBpdCdzIGNhbGxiYWNrcyByZWFsbHkgb25seSBhcHBs
eSB0byBIVFRQLgorICAgIC8vIFNvdXBNZXNzYWdlcyBhcmUgb25seSBhcHBsaWNhYmxlIHRvIEhU
VFAtZmFtaWx5IHJlcXVlc3RzLgogICAgIGlmIChpc0hUVFBGYW1pbHlSZXF1ZXN0ICYmICFjcmVh
dGVTb3VwTWVzc2FnZUZvckhhbmRsZUFuZFJlcXVlc3QoaGFuZGxlLCByZXF1ZXN0KSkgewogICAg
ICAgICBkLT5tX3NvdXBSZXF1ZXN0LmNsZWFyKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTc4MCwxNSArODU1LDYgQEAgYm9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoTmV0d29ya2luZ0Nv
bnRleHQqIGNvbnRleHQpCiAgICAgLy8gVXNlZCB0byBzZXQgdGhlIGtlZXAgdHJhY2sgb2YgY3Vz
dG9tIFNvdXBTZXNzaW9ucyBmb3IgcG9ydHMgdGhhdCBzdXBwb3J0IGl0IChFRkwpLgogICAgIGQt
Pm1fY29udGV4dCA9IGNvbnRleHQ7CiAKLSAgICBpZiAoIShkLT5tX3VzZXIuaXNFbXB0eSgpIHx8
IGQtPm1fcGFzcy5pc0VtcHR5KCkpKSB7Ci0gICAgICAgIC8vIElmIGNyZWRlbnRpYWxzIHdlcmUg
c3BlY2lmaWVkIGZvciB0aGlzIHJlcXVlc3QsIGFkZCB0aGVtIHRvIHRoZSB1cmwsCi0gICAgICAg
IC8vIHNvIHRoYXQgdGhleSB3aWxsIGJlIHBhc3NlZCB0byBOZXR3b3JrUmVxdWVzdC4KLSAgICAg
ICAgS1VSTCB1cmxXaXRoQ3JlZGVudGlhbHMoZmlyc3RSZXF1ZXN0KCkudXJsKCkpOwotICAgICAg
ICB1cmxXaXRoQ3JlZGVudGlhbHMuc2V0VXNlcihkLT5tX3VzZXIpOwotICAgICAgICB1cmxXaXRo
Q3JlZGVudGlhbHMuc2V0UGFzcyhkLT5tX3Bhc3MpOwotICAgICAgICBkLT5tX2ZpcnN0UmVxdWVz
dC5zZXRVUkwodXJsV2l0aENyZWRlbnRpYWxzKTsKLSAgICB9Ci0KICAgICAvLyBPbmx5IGFsbG93
IHRoZSBQT1NUIGFuZCBHRVQgbWV0aG9kcyBmb3Igbm9uLUhUVFAgcmVxdWVzdHMuCiAgICAgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0ID0gZmlyc3RSZXF1ZXN0KCk7CiAgICAgYm9vbCBp
c0hUVFBGYW1pbHlSZXF1ZXN0ID0gcmVxdWVzdC51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5
KCk7CkBAIC03OTcsNiArODYzLDExIEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KE5ldHdv
cmtpbmdDb250ZXh0KiBjb250ZXh0KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAg
ICBhcHBseUF1dGhlbnRpY2F0aW9uVG9SZXF1ZXN0KHRoaXMsIGZhbHNlKTsKKyAgICAvLyBUaGUg
Q0ZOZXQgYmFja2VuZCBjbGVhcnMgdGhlc2UsIHNvIHdlIGRvIGFzIHdlbGwuCisgICAgZC0+bV91
c2VyID0gU3RyaW5nKCk7CisgICAgZC0+bV9wYXNzID0gU3RyaW5nKCk7CisKICAgICBpZiAoIWNy
ZWF0ZVNvdXBSZXF1ZXN0QW5kTWVzc2FnZUZvckhhbmRsZSh0aGlzLCBpc0hUVFBGYW1pbHlSZXF1
ZXN0KSkgewogICAgICAgICB0aGlzLT5zY2hlZHVsZUZhaWx1cmUoSW52YWxpZFVSTEZhaWx1cmUp
OyAvLyBFcnJvciBtdXN0IG5vdCBiZSByZXBvcnRlZCBpbW1lZGlhdGVseQogICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTg1NiwxNyArOTI3LDg3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldEln
bm9yZVNTTEVycm9ycyhib29sIGlnbm9yZVNTTEVycm9ycykKICAgICBnSWdub3JlU1NMRXJyb3Jz
ID0gaWdub3JlU1NMRXJyb3JzOwogfQogCisjaWYgUExBVEZPUk0oR1RLKQordm9pZCBnZXRDcmVk
ZW50aWFsRnJvbVBlcnNpc3RlbnRTdG9yZUNhbGxiYWNrKGNvbnN0IENyZWRlbnRpYWwmIGNyZWRl
bnRpYWwsIHZvaWQqIGRhdGEpCit7CisgICAgc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihk
YXRhKS0+Y29udGludWVEaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY3JlZGVudGlh
bCk7Cit9CisjZW5kaWYKKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6Y29udGludWVEaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbEZyb21Q
ZXJzaXN0ZW50U3RvcmFnZSkKK3sKKyAgICBBU1NFUlQoZC0+bV9jdXJyZW50V2ViQ2hhbGxlbmdl
KTsKKyAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlID0gZC0+bV9jdXJyZW50
V2ViQ2hhbGxlbmdlOworCisgICAgQVNTRVJUKGNoYWxsZW5nZS5zb3VwU2Vzc2lvbigpKTsKKyAg
ICBBU1NFUlQoY2hhbGxlbmdlLnNvdXBNZXNzYWdlKCkpOworICAgIGlmICghY3JlZGVudGlhbEZy
b21QZXJzaXN0ZW50U3RvcmFnZS5pc0VtcHR5KCkpCisgICAgICAgIGNoYWxsZW5nZS5zZXRQcm9w
b3NlZENyZWRlbnRpYWwoY3JlZGVudGlhbEZyb21QZXJzaXN0ZW50U3RvcmFnZSk7CisKKyAgICBp
ZiAoIWNsaWVudCgpKSB7CisgICAgICAgIHNvdXBfc2Vzc2lvbl91bnBhdXNlX21lc3NhZ2UoY2hh
bGxlbmdlLnNvdXBTZXNzaW9uKCksIGNoYWxsZW5nZS5zb3VwTWVzc2FnZSgpKTsKKyAgICAgICAg
Y2xlYXJBdXRoZW50aWNhdGlvbigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNT
RVJUKGNoYWxsZW5nZS5zb3VwU2Vzc2lvbigpKTsKKyAgICBBU1NFUlQoY2hhbGxlbmdlLnNvdXBN
ZXNzYWdlKCkpOworICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UodGhpcywgY2hhbGxlbmdlKTsKK30KKwogdm9pZCBSZXNvdXJjZUhhbmRsZTo6ZGlkUmVjZWl2
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBj
aGFsbGVuZ2UpCiB7CiAgICAgQVNTRVJUKGQtPm1fY3VycmVudFdlYkNoYWxsZW5nZS5pc051bGwo
KSk7Ci0gICAgZC0+bV9jdXJyZW50V2ViQ2hhbGxlbmdlID0gY2hhbGxlbmdlOwogCi0gICAgaWYg
KGNsaWVudCgpKSB7Ci0gICAgICAgIEFTU0VSVChjaGFsbGVuZ2Uuc291cFNlc3Npb24oKSk7Ci0g
ICAgICAgIEFTU0VSVChjaGFsbGVuZ2Uuc291cE1lc3NhZ2UoKSk7Ci0gICAgICAgIHNvdXBfc2Vz
c2lvbl9wYXVzZV9tZXNzYWdlKGNoYWxsZW5nZS5zb3VwU2Vzc2lvbigpLCBjaGFsbGVuZ2Uuc291
cE1lc3NhZ2UoKSk7Ci0gICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UodGhpcywgY2hhbGxlbmdlKTsKKyAgICBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxT
dG9yYWdlID0gIWNsaWVudCgpIHx8IGNsaWVudCgpLT5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFn
ZSh0aGlzKTsKKyAgICBpZiAoIWQtPm1fdXNlci5pc051bGwoKSAmJiAhZC0+bV9wYXNzLmlzTnVs
bCgpKSB7CisgICAgICAgIENyZWRlbnRpYWwgY3JlZGVudGlhbCA9IENyZWRlbnRpYWwoZC0+bV91
c2VyLCBkLT5tX3Bhc3MsIENyZWRlbnRpYWxQZXJzaXN0ZW5jZUZvclNlc3Npb24pOworICAgICAg
ICBpZiAoc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpCisgICAgICAgICAgICBDcmVkZW50aWFs
U3RvcmFnZTo6c2V0KGNyZWRlbnRpYWwsIGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSwgY2hh
bGxlbmdlLmZhaWx1cmVSZXNwb25zZSgpLnVybCgpKTsKKyAgICAgICAgc291cF9hdXRoX2F1dGhl
bnRpY2F0ZShjaGFsbGVuZ2Uuc291cEF1dGgoKSwgY3JlZGVudGlhbC51c2VyKCkudXRmOCgpLmRh
dGEoKSwgY3JlZGVudGlhbC5wYXNzd29yZCgpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgICAgIHJl
dHVybjsKICAgICB9CisKKyAgICAvLyBGSVhNRTogUGVyIHRoZSBzcGVjaWZpY2F0aW9uLCB0aGUg
dXNlciBzaG91bGRuJ3QgYmUgYXNrZWQgZm9yIGNyZWRlbnRpYWxzIGlmIHRoZXJlIHdlcmUgaW5j
b3JyZWN0IG9uZXMgcHJvdmlkZWQgZXhwbGljaXRseS4KKyAgICBpZiAoc2hvdWxkVXNlQ3JlZGVu
dGlhbFN0b3JhZ2UpIHsKKyAgICAgICAgaWYgKCFkLT5tX2luaXRpYWxDcmVkZW50aWFsLmlzRW1w
dHkoKSB8fCBjaGFsbGVuZ2UucHJldmlvdXNGYWlsdXJlQ291bnQoKSkgeworICAgICAgICAgICAg
Ly8gVGhlIHN0b3JlZCBjcmVkZW50aWFsIHdhc24ndCBhY2NlcHRlZCwgc3RvcCB1c2luZyBpdC4g
VGhlcmUgaXMgYSByYWNlIGNvbmRpdGlvbgorICAgICAgICAgICAgLy8gaGVyZSwgc2luY2UgYSBk
aWZmZXJlbnQgY3JlZGVudGlhbCBtaWdodCBoYXZlIGFscmVhZHkgYmVlbiBzdG9yZWQgYnkgYW5v
dGhlcgorICAgICAgICAgICAgLy8gUmVzb3VyY2VIYW5kbGUsIGJ1dCB0aGUgb2JzZXJ2YWJsZSBl
ZmZlY3Qgc2hvdWxkIGJlIHZlcnkgbWlub3IsIGlmIGFueS4KKyAgICAgICAgICAgIENyZWRlbnRp
YWxTdG9yYWdlOjpyZW1vdmUoY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICghY2hhbGxlbmdlLnByZXZpb3VzRmFpbHVyZUNvdW50KCkpIHsKKyAg
ICAgICAgICAgIENyZWRlbnRpYWwgY3JlZGVudGlhbCA9IENyZWRlbnRpYWxTdG9yYWdlOjpnZXQo
Y2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpKTsKKyAgICAgICAgICAgIGlmICghY3JlZGVudGlh
bC5pc0VtcHR5KCkgJiYgY3JlZGVudGlhbCAhPSBkLT5tX2luaXRpYWxDcmVkZW50aWFsKSB7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKGNyZWRlbnRpYWwucGVyc2lzdGVuY2UoKSA9PSBDcmVkZW50
aWFsUGVyc2lzdGVuY2VOb25lKTsKKworICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBjcmVk
ZW50aWFsIGJhY2ssIHBvc3NpYmx5IGFkZGluZyBpdCBhcyBhIGRlZmF1bHQgZm9yIHRoaXMgZGly
ZWN0b3J5LgorICAgICAgICAgICAgICAgIGlmIChjaGFsbGVuZ2UuZmFpbHVyZVJlc3BvbnNlKCku
aHR0cFN0YXR1c0NvZGUoKSA9PSA0MDEpCisgICAgICAgICAgICAgICAgICAgIENyZWRlbnRpYWxT
dG9yYWdlOjpzZXQoY3JlZGVudGlhbCwgY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLCBjaGFs
bGVuZ2UuZmFpbHVyZVJlc3BvbnNlKCkudXJsKCkpOworCisgICAgICAgICAgICAgICAgc291cF9h
dXRoX2F1dGhlbnRpY2F0ZShjaGFsbGVuZ2Uuc291cEF1dGgoKSwgY3JlZGVudGlhbC51c2VyKCku
dXRmOCgpLmRhdGEoKSwgY3JlZGVudGlhbC5wYXNzd29yZCgpLnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGQtPm1fY3VycmVudFdlYkNoYWxsZW5nZSA9IGNoYWxsZW5nZTsKKyAgICBzb3VwX3Nlc3Np
b25fcGF1c2VfbWVzc2FnZShjaGFsbGVuZ2Uuc291cFNlc3Npb24oKSwgY2hhbGxlbmdlLnNvdXBN
ZXNzYWdlKCkpOworCisjaWYgUExBVEZPUk0oR1RLKQorICAgIC8vIFdlIGNvdWxkIGFsc28gZG8g
dGhpcyBiZWZvcmUgd2UgZXZlbiBzdGFydCB0aGUgcmVxdWVzdCwgYnV0IHRoYXQgd291bGQgYmUg
YXQgdGhlIGV4cGVuc2UKKyAgICAvLyBvZiBhbGwgcmVxdWVzdCBsYXRlbmN5LCB2ZXJzdXMgYSBv
bmUtdGltZSBsYXRlbmN5IGZvciB0aGUgc21hbGwgc3Vic2V0IG9mIHJlcXVlc3RzIHRoYXQKKyAg
ICAvLyB1c2UgSFRUUCBhdXRoZW50aWNhdGlvbi4gSW4gdGhlIGVuZCwgdGhpcyBkb2Vzbid0IG1h
dHRlciBtdWNoLCBiZWNhdXNlIHBlcnNpc3RlbnQgY3JlZGVudGlhbHMKKyAgICAvLyB3aWxsIGJl
Y29tZSBzZXNzaW9uIGNyZWRlbnRpYWxzIGFmdGVyIHRoZSBmaXJzdCB1c2UuCisgICAgaWYgKHNo
b3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKSB7CisgICAgICAgIGNyZWRlbnRpYWxCYWNraW5nU3Rv
cmUoKS5jcmVkZW50aWFsRm9yQ2hhbGxlbmdlKGNoYWxsZW5nZSwgZ2V0Q3JlZGVudGlhbEZyb21Q
ZXJzaXN0ZW50U3RvcmVDYWxsYmFjaywgdGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisj
ZW5kaWYKKworICAgIGNvbnRpbnVlRGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKENy
ZWRlbnRpYWwoKSk7CiB9CiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkUmVxdWVzdFRv
Q29udGludWVXaXRob3V0Q3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYg
Y2hhbGxlbmdlKQpAQCAtODg1LDYgKzEwMjYsMjYgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVj
ZWl2ZWRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UK
ICAgICBpZiAoY2hhbGxlbmdlICE9IGQtPm1fY3VycmVudFdlYkNoYWxsZW5nZSkKICAgICAgICAg
cmV0dXJuOwogCisgICAgLy8gRklYTUU6IFN1cHBvcnQgZW1wdHkgY3JlZGVudGlhbHMuIEN1cnJl
bnRseSwgYW4gZW1wdHkgY3JlZGVudGlhbCBjYW5ub3QgYmUgc3RvcmVkIGluIFdlYkNvcmUgY3Jl
ZGVudGlhbCBzdG9yYWdlLCBhcyB0aGF0J3MgZW1wdHkgdmFsdWUgZm9yIGl0cyBtYXAuCisgICAg
aWYgKGNyZWRlbnRpYWwuaXNFbXB0eSgpKSB7CisgICAgICAgIHJlY2VpdmVkUmVxdWVzdFRvQ29u
dGludWVXaXRob3V0Q3JlZGVudGlhbChjaGFsbGVuZ2UpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgLy8gRXZlbnR1YWxseSB3ZSB3aWxsIG1hbmFnZSBwZXItc2Vzc2lvbiBjcmVkZW50
aWFscyBvbmx5IGludGVybmFsbHkgb3IgdXNlIHNvbWUgbmV3bHktZXhwb3NlZCBBUEkgZnJvbSBs
aWJzb3VwLAorICAgIC8vIGJlY2F1c2Ugb25jZSB3ZSBhdXRoZW50aWNhdGUgdmlhIGxpYnNvdXAs
IHRoZXJlIGlzIG5vIHdheSB0byBpZ25vcmUgaXQgZm9yIGEgcGFydGljdWxhciByZXF1ZXN0LiBS
aWdodCBub3csCisgICAgLy8gd2UgcGxhY2UgdGhlIGNyZWRlbnRpYWxzIGluIHRoZSBzdG9yZSBl
dmVuIHRob3VnaCBsaWJzb3VwIHdpbGwgbmV2ZXIgZmlyZSB0aGUgYXV0aGVudGljYXRlIHNpZ25h
bCBhZ2FpbiBmb3IKKyAgICAvLyB0aGlzIHByb3RlY3Rpb24gc3BhY2UuCisgICAgaWYgKGNyZWRl
bnRpYWwucGVyc2lzdGVuY2UoKSA9PSBDcmVkZW50aWFsUGVyc2lzdGVuY2VGb3JTZXNzaW9uIHx8
IGNyZWRlbnRpYWwucGVyc2lzdGVuY2UoKSA9PSBDcmVkZW50aWFsUGVyc2lzdGVuY2VQZXJtYW5l
bnQpCisgICAgICAgIENyZWRlbnRpYWxTdG9yYWdlOjpzZXQoY3JlZGVudGlhbCwgY2hhbGxlbmdl
LnByb3RlY3Rpb25TcGFjZSgpLCBjaGFsbGVuZ2UuZmFpbHVyZVJlc3BvbnNlKCkudXJsKCkpOwor
CisjaWYgUExBVEZPUk0oR1RLKQorICAgIGlmIChjcmVkZW50aWFsLnBlcnNpc3RlbmNlKCkgPT0g
Q3JlZGVudGlhbFBlcnNpc3RlbmNlUGVybWFuZW50KSB7CisgICAgICAgIGQtPm1fY3JlZGVudGlh
bERhdGFUb1NhdmVJblBlcnNpc3RlbnRTdG9yZS5jcmVkZW50aWFsID0gY3JlZGVudGlhbDsKKyAg
ICAgICAgZC0+bV9jcmVkZW50aWFsRGF0YVRvU2F2ZUluUGVyc2lzdGVudFN0b3JlLmNoYWxsZW5n
ZSA9IGNoYWxsZW5nZTsKKyAgICB9CisjZW5kaWYKKwogICAgIEFTU0VSVChjaGFsbGVuZ2Uuc291
cFNlc3Npb24oKSk7CiAgICAgQVNTRVJUKGNoYWxsZW5nZS5zb3VwTWVzc2FnZSgpKTsKICAgICBz
b3VwX2F1dGhfYXV0aGVudGljYXRlKGNoYWxsZW5nZS5zb3VwQXV0aCgpLCBjcmVkZW50aWFsLnVz
ZXIoKS51dGY4KCkuZGF0YSgpLCBjcmVkZW50aWFsLnBhc3N3b3JkKCkudXRmOCgpLmRhdGEoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudEd0ay5jcHAKaW5kZXggZjNjY2ZjMTdmYWE0YTE2M2U0ZjlmZmVjYzE3NDU3ZjFk
NDk0MTVkOS4uNmRjNTM2MzE1NjJmM2I5MTRhYWQ4ZGI4ZGIwMzRjOGJiOWE1YjM5MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRH
dGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50R3RrLmNwcApAQCAtMTkyLDExICsxOTIsOSBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
Ojpjb21taXR0ZWRMb2FkKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IGNo
YQogICAgIH0KIH0KIAotYm9vbAotRnJhbWVMb2FkZXJDbGllbnQ6OnNob3VsZFVzZUNyZWRlbnRp
YWxTdG9yYWdlKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRlbnRp
ZmllcikKK2Jvb2wgRnJhbWVMb2FkZXJDbGllbnQ6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdl
KFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRlbnRpZmllcikKIHsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25n
ICBpZGVudGlmaWVyLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>