<?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>42201</bug_id>
          
          <creation_ts>2010-07-13 14:30:48 -0700</creation_ts>
          <short_desc>Use ResourceHandle object for synchronous loading</short_desc>
          <delta_ts>2010-07-14 17:20:44 -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>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>42216</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>abarth</cc>
    
    <cc>beidson</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>250745</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-07-13 14:30:48 -0700</bug_when>
    <thetext>Improve code sharing, pave the way to eventually making callbacks into frame loader client.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250757</commentid>
    <comment_count>1</comment_count>
      <attachid>61418</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-07-13 14:45:25 -0700</bug_when>
    <thetext>Created attachment 61418
Part 1: Mac</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250760</commentid>
    <comment_count>2</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-07-13 14:52:28 -0700</bug_when>
    <thetext>Attachment 61418 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/3531081</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250771</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-13 15:03:21 -0700</bug_when>
    <thetext>Attachment 61418 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3508225</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250775</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-07-13 15:23:05 -0700</bug_when>
    <thetext>I have these fixed locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250813</commentid>
    <comment_count>5</comment_count>
      <attachid>61431</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-07-13 16:38:03 -0700</bug_when>
    <thetext>Created attachment 61431
Now with CFNetwork</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250818</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-13 16:44:32 -0700</bug_when>
    <thetext>Attachment 61418 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/3446249</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250832</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-13 17:07:23 -0700</bug_when>
    <thetext>Attachment 61431 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3455252</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250846</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-13 17:23:47 -0700</bug_when>
    <thetext>Attachment 61431 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/3513240</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250856</commentid>
    <comment_count>9</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-07-13 17:36:35 -0700</bug_when>
    <thetext>I&apos;m still reviewing, but I don&apos;t like the name &quot;firstRequest&quot;.  &quot;initialRequest&quot; sounds much better to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250905</commentid>
    <comment_count>10</comment_count>
      <attachid>61452</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-07-13 18:42:56 -0700</bug_when>
    <thetext>Created attachment 61452
updated patch

More build fixes, plus a fix for an issue found by Windows tests - do set ResourceHandleInternal::m_connection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250906</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-07-13 18:47:29 -0700</bug_when>
    <thetext>&gt; &quot;initialRequest&quot; sounds much better to me.

As discussed on IRC, that&apos;s less precise. ResourceHandle changes the initial request in many ways before sending if (removing credentials, setting various properties). So, it&apos;s the first request that&apos;s being actually sent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250921</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-13 19:41:52 -0700</bug_when>
    <thetext>Attachment 61452 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/3438264</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251279</commentid>
    <comment_count>13</comment_count>
      <attachid>61452</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-14 10:44:24 -0700</bug_when>
    <thetext>Comment on attachment 61452
updated patch

In some other code we use originalRequest rather than firstRequest. Is this the same concept?

&gt; +    void setAllowStoredCredentials(bool allow) { m_allowStoredCredentials = allow; }
&gt; +    bool isDone() { return m_isDone; }
&gt; +
&gt; +    CFMutableDataRef data() { return m_data.get(); }
&gt; +
&gt; +    virtual void willSendRequest(ResourceHandle*, ResourceRequest&amp;, const ResourceResponse&amp; /*redirectResponse*/);
&gt; +    virtual bool shouldUseCredentialStorage(ResourceHandle*);
&gt; +    virtual void didReceiveAuthenticationChallenge(ResourceHandle*, const AuthenticationChallenge&amp;);
&gt; +    virtual void didReceiveResponse(ResourceHandle*, const ResourceResponse&amp;);
&gt; +    virtual void didReceiveData(ResourceHandle*, const char*, int, int /*lengthReceived*/);
&gt; +    virtual void didFinishLoading(ResourceHandle*);
&gt; +    virtual void didFail(ResourceHandle*, const ResourceError&amp;);
&gt; +#if USE(PROTECTION_SPACE_AUTH_CALLBACK)
&gt; +    virtual bool canAuthenticateAgainstProtectionSpace(ResourceHandle*, const ProtectionSpace&amp;);
&gt; +#endif

Can any of these be private?

Looks like a compile failure on GTK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251296</commentid>
    <comment_count>14</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-07-14 11:10:38 -0700</bug_when>
    <thetext>&gt; In some other code we use originalRequest rather than firstRequest. Is this the same concept?

I think that originalRequest is used for the request that hasn&apos;t been modified by network loader level yet (and we also have originalRequestCopy for the one that hasn&apos;t been modified by someone else, maybe a client). It&apos;s not quite the same.

&gt; Can any of these be private?
&gt; Looks like a compile failure on GTK.

Addressed those.

Committed &lt;http://trac.webkit.org/changeset/63332&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251339</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-07-14 11:57:15 -0700</bug_when>
    <thetext>More build fixes in r63340.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251380</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-14 13:09:30 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/63340 might have broken Chromium Mac Release
The following changes are on the blame list:
http://trac.webkit.org/changeset/63339
http://trac.webkit.org/changeset/63340
http://trac.webkit.org/changeset/63341
http://trac.webkit.org/changeset/63342</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251531</commentid>
    <comment_count>17</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-07-14 17:17:53 -0700</bug_when>
    <thetext>Tiger behavior fix in r63376.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251534</commentid>
    <comment_count>18</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-07-14 17:20:44 -0700</bug_when>
    <thetext>And r63380.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61418</attachid>
            <date>2010-07-13 14:45:25 -0700</date>
            <delta_ts>2010-07-13 16:38:03 -0700</delta_ts>
            <desc>Part 1: Mac</desc>
            <filename>ResourceHandleSync.txt</filename>
            <type>text/plain</type>
            <size>57926</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzI0OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjggQEAKKzIwMTAtMDctMTMgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyMjAxCisgICAgICAgIFVz
ZSBSZXNvdXJjZUhhbmRsZSBvYmplY3QgZm9yIHN5bmNocm9ub3VzIGxvYWRpbmcKKworICAgICAg
ICBQYXJ0IDE6IEdldCByaWQgb2YgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyIG9uIE1hYy4KKwor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OlJlc291cmNlSGFuZGxlKTogTW92ZWQgY29tbW9uIHRh
c2tzIGZyb20gY3JlYXRlKCkgdG8gY29uc3RydWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZTo6Zmlyc3RSZXF1ZXN0KTogUmVuYW1lZCBmcm9tIHJlcXVlc3QoKS4gVGhpcyBp
cyBub3QgY2hhbmdlZCB3aXRoCisgICAgICAgIHJlZGlyZWN0LCBzbyB0aGUgb2xkIG5hbWUgd2Fz
IHF1aXRlIGNvbmZ1c2luZy4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VI
YW5kbGUuaDogTWFkZSBjcmVhdGVOU1VSTENvbm5lY3Rpb24oKSBhIG1lbWJlZCBmdW5jaXRvbiwg
c2luY2UKKyAgICAgICAgaXQgbm93IG5lZWRzIGFjY2VzcyB0byBib3RoIFJlc291cmNlSGFuZGxl
IGFuZCBSZXNvdXJjZUhhbmRsZUludGVybmFsLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhh
bmRsZUludGVybmFsOjpSZXNvdXJjZUhhbmRsZUludGVybmFsKTogUmVuYW1lZCBtX3JlcXVlc3Qg
dG8gbV9maXJzdFJlcXVlc3QuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNv
dXJjZUhhbmRsZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVu
dCk6IFJlcGxhY2VkIGFuIE9iamVjdGl2ZSBDIGRlbGVnYXRlIGNsYXNzIHdpdGggYSBSZXNvdXJj
ZUhhbmRsZUNsaWVudAorICAgICAgICBzdWJjbGFzcy4gVGhpcyBhbGxvd3MgZm9yIG11Y2ggYmV0
dGVyIGNvZGUgc2hhcmluZywgd2l0aCBjb21tb24gbG9naWMgaXMgaW4gUmVzb3VyY2VIYW5kbGUu
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlTlNVUkxDb25uZWN0aW9u
KTogRmFjdG9yZWQgb3V0IG1vcmUgY29kZSB0aGF0IGlzIGNvbW1vbgorICAgICAgICBiZXR3ZWVu
IHN5bmMgYW5kIGFzeW5jIHBhcnRzLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OnN0YXJ0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y2FuY2Vs
KTogVXBkYXRlZCBmb3IgZmlyc3RSZXF1ZXN0KCkgcmVuYW1pbmcuCisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6IFVzZSBSZXNvdXJj
ZUhhbmRsZSBhbmQgUmVzb3VyY2VIYW5kbGVDbGllbnQsCisgICAgICAgIGxpa2UgYSBnb29kIGxv
YWRlci4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpkaWRSZWNlaXZlQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UpOiBVcGRhdGVkIGZvciBmaXJzdFJlcXVlc3QoKSByZW5hbWluZy4K
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENyZWRlbnRpYWwpOiBE
aXR0by4KKyAgICAgICAgKC1bV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZSBjb25uZWN0
aW9uOndpbGxTZW5kUmVxdWVzdDpyZWRpcmVjdFJlc3BvbnNlOl0pOiBEaXR0by4KKyAgICAgICAg
KC1bV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZSBjb25uZWN0aW9uOmRpZFJlY2VpdmVS
ZXNwb25zZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVs
ZWdhdGUgY29ubmVjdGlvbkRpZEZpbmlzaExvYWRpbmc6XSk6IERpdHRvLgorICAgICAgICAoLVtX
ZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlIGNvbm5lY3Rpb246ZGlkRmFpbFdpdGhFcnJv
cjpdKTogRGl0dG8uCisKKyAgICAgICAgKiBsb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1haW5SZXNvdXJjZUxvYWRlcjo6Y29udGludWVBZnRlckNvbnRl
bnRQb2xpY3kpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3Jv
dXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjpjcmVhdGVS
ZXNvdXJjZUhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6
OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hl
R3JvdXA6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25D
YWNoZUdyb3VwOjpkaWRGYWlsKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVH
cm91cDo6ZGlkUmVjZWl2ZU1hbmlmZXN0UmVzcG9uc2UpOgorICAgICAgICAqIGxvYWRlci9pY29u
L0ljb25Mb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkxvYWRlcjo6ZGlkUmVjZWl2
ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6Okljb25Mb2FkZXI6OmRpZEZhaWwpOgorICAg
ICAgICAoV2ViQ29yZTo6SWNvbkxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhhbmRsZUludGVybmFsKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjp+UmVzb3VyY2VIYW5kbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkQ3JlZGVudGlhbCk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpoZWFkZXJDYWxsYmFjayk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9xdC9RTmV0d29ya1JlcGx5SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpRTmV0
d29ya1JlcGx5SGFuZGxlcjo6c3RhcnQpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvcXQv
UmVzb3VyY2VIYW5kbGVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6
c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5
bmNocm9ub3VzbHkpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhh
bmRsZVNvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3RhcnRIdHRwKToKKyAgICAgICAgVXBk
YXRlZCBmb3IgcmVxdWVzdCgpIC0+IGZpcnN0UmVxdWVzdCByZW5hbWluZy4KKwogMjAxMC0wNy0x
MyAgQWFyb24gQm9vZG1hbiAgPGFhQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBUaW1vdGh5IEhhdGNoZXIuCkluZGV4OiBXZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2Fk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5j
cHAJKHJldmlzaW9uIDYzMTA4KQorKysgV2ViQ29yZS9sb2FkZXIvTWFpblJlc291cmNlTG9hZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIzLDcgKzIyMyw3IEBAIHZvaWQgTWFpblJlc291cmNl
TG9hZGVyOjpjb250aW51ZUFmdGVyQ28KICAgICAgICAgICAgIHJlY2VpdmVkRXJyb3IoY2Fubm90
U2hvd1VSTEVycm9yKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAg
IGZyYW1lTG9hZGVyKCktPmNsaWVudCgpLT5kb3dubG9hZChtX2hhbmRsZS5nZXQoKSwgcmVxdWVz
dCgpLCBtX2hhbmRsZS5nZXQoKS0+cmVxdWVzdCgpLCByKTsKKyAgICAgICAgZnJhbWVMb2FkZXIo
KS0+Y2xpZW50KCktPmRvd25sb2FkKG1faGFuZGxlLmdldCgpLCByZXF1ZXN0KCksIG1faGFuZGxl
LmdldCgpLT5maXJzdFJlcXVlc3QoKSwgcik7CiAgICAgICAgIC8vIEl0IG1pZ2h0IGhhdmUgZ29u
ZSBtaXNzaW5nCiAgICAgICAgIGlmIChmcmFtZUxvYWRlcigpKQogICAgICAgICAgICAgcmVjZWl2
ZWRFcnJvcihpbnRlcnJ1cHRpb25Gb3JQb2xpY3lDaGFuZ2VFcnJvcigpKTsKSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAkocmV2
aXNpb24gNjMxMDgpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
R3JvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzksNyArNDc5LDcgQEAgUGFzc1JlZlB0cjxS
ZXNvdXJjZUhhbmRsZT4gQXBwbGljYXRpb25DYQogICAgIG1fY3VycmVudFJlc291cmNlSWRlbnRp
ZmllciA9IG1fZnJhbWUtPnBhZ2UoKS0+cHJvZ3Jlc3MoKS0+Y3JlYXRlVW5pcXVlSWRlbnRpZmll
cigpOwogICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKSB7CiAgICAgICAgIElu
c3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBwYWdlLT5pbnNwZWN0b3JD
b250cm9sbGVyKCk7Ci0gICAgICAgIGluc3BlY3RvckNvbnRyb2xsZXItPmlkZW50aWZpZXJGb3JJ
bml0aWFsUmVxdWVzdChtX2N1cnJlbnRSZXNvdXJjZUlkZW50aWZpZXIsIG1fZnJhbWUtPmxvYWRl
cigpLT5kb2N1bWVudExvYWRlcigpLCBoYW5kbGUtPnJlcXVlc3QoKSk7CisgICAgICAgIGluc3Bl
Y3RvckNvbnRyb2xsZXItPmlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVzdChtX2N1cnJlbnRSZXNv
dXJjZUlkZW50aWZpZXIsIG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLCBoYW5k
bGUtPmZpcnN0UmVxdWVzdCgpKTsKICAgICAgICAgUmVzb3VyY2VSZXNwb25zZSByZWRpcmVjdFJl
c3BvbnNlID0gUmVzb3VyY2VSZXNwb25zZSgpOwogICAgICAgICBpbnNwZWN0b3JDb250cm9sbGVy
LT53aWxsU2VuZFJlcXVlc3QobV9jdXJyZW50UmVzb3VyY2VJZGVudGlmaWVyLCByZXF1ZXN0LCBy
ZWRpcmVjdFJlc3BvbnNlKTsKICAgICB9CkBAIC01MTUsNyArNTE1LDcgQEAgdm9pZCBBcHBsaWNh
dGlvbkNhY2hlR3JvdXA6OmRpZFJlY2VpdmVSZQogICAgIAogICAgIEFTU0VSVChoYW5kbGUgPT0g
bV9jdXJyZW50SGFuZGxlKTsKIAotICAgIEtVUkwgdXJsKGhhbmRsZS0+cmVxdWVzdCgpLnVybCgp
KTsKKyAgICBLVVJMIHVybChoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpKTsKICAgICBpZiAo
dXJsLmhhc0ZyYWdtZW50SWRlbnRpZmllcigpKQogICAgICAgICB1cmwucmVtb3ZlRnJhZ21lbnRJ
ZGVudGlmaWVyKCk7CiAgICAgCkBAIC01MzIsNyArNTMyLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNh
Y2hlR3JvdXA6OmRpZFJlY2VpdmVSZQogICAgICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2Uq
IG5ld2VzdENhY2hlZFJlc291cmNlID0gbV9uZXdlc3RDYWNoZS0+cmVzb3VyY2VGb3JVUkwodXJs
KTsKICAgICAgICAgaWYgKG5ld2VzdENhY2hlZFJlc291cmNlKSB7CiAgICAgICAgICAgICBtX2Nh
Y2hlQmVpbmdVcGRhdGVkLT5hZGRSZXNvdXJjZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNy
ZWF0ZSh1cmwsIG5ld2VzdENhY2hlZFJlc291cmNlLT5yZXNwb25zZSgpLCB0eXBlLCBuZXdlc3RD
YWNoZWRSZXNvdXJjZS0+ZGF0YSgpKSk7Ci0gICAgICAgICAgICBtX3BlbmRpbmdFbnRyaWVzLnJl
bW92ZShtX2N1cnJlbnRIYW5kbGUtPnJlcXVlc3QoKS51cmwoKSk7CisgICAgICAgICAgICBtX3Bl
bmRpbmdFbnRyaWVzLnJlbW92ZShtX2N1cnJlbnRIYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgp
KTsKICAgICAgICAgICAgIG1fY3VycmVudEhhbmRsZS0+Y2FuY2VsKCk7CiAgICAgICAgICAgICBt
X2N1cnJlbnRIYW5kbGUgPSAwOwogICAgICAgICAgICAgLy8gTG9hZCB0aGUgbmV4dCByZXNvdXJj
ZSwgaWYgYW55LgpAQCAtNTQyLDcgKzU0Miw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3Vw
OjpkaWRSZWNlaXZlUmUKICAgICAgICAgLy8gVGhlIHNlcnZlciBjb3VsZCByZXR1cm4gMzA0IGZv
ciBhbiB1bmNvbmRpdGlvbmFsIHJlcXVlc3QgLSBpbiB0aGlzIGNhc2UsIHdlIGhhbmRsZSB0aGUg
cmVzcG9uc2UgYXMgYSBub3JtYWwgZXJyb3IuCiAgICAgfQogCi0gICAgaWYgKHJlc3BvbnNlLmh0
dHBTdGF0dXNDb2RlKCkgLyAxMDAgIT0gMiB8fCByZXNwb25zZS51cmwoKSAhPSBtX2N1cnJlbnRI
YW5kbGUtPnJlcXVlc3QoKS51cmwoKSkgeworICAgIGlmIChyZXNwb25zZS5odHRwU3RhdHVzQ29k
ZSgpIC8gMTAwICE9IDIgfHwgcmVzcG9uc2UudXJsKCkgIT0gbV9jdXJyZW50SGFuZGxlLT5maXJz
dFJlcXVlc3QoKS51cmwoKSkgewogICAgICAgICBpZiAoKHR5cGUgJiBBcHBsaWNhdGlvbkNhY2hl
UmVzb3VyY2U6OkV4cGxpY2l0KSB8fCAodHlwZSAmIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6
RmFsbGJhY2spKSB7CiAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgY2FjaGVVcGRhdGVGYWlsZWQo
KSBjYW4gY2F1c2UgdGhlIGNhY2hlIGdyb3VwIHRvIGJlIGRlbGV0ZWQuCiAgICAgICAgICAgICBj
YWNoZVVwZGF0ZUZhaWxlZCgpOwpAQCAtNTU3LDEwICs1NTcsMTAgQEAgdm9pZCBBcHBsaWNhdGlv
bkNhY2hlR3JvdXA6OmRpZFJlY2VpdmVSZQogICAgICAgICAgICAgLy8gQ29weSB0aGUgcmVzb3Vy
Y2UgYW5kIGl0cyBtZXRhZGF0YSBmcm9tIHRoZSBuZXdlc3QgYXBwbGljYXRpb24gY2FjaGUgaW4g
Y2FjaGUgZ3JvdXAgd2hvc2UgY29tcGxldGVuZXNzIGZsYWcgaXMgY29tcGxldGUsIGFuZCBhY3QK
ICAgICAgICAgICAgIC8vIGFzIGlmIHRoYXQgd2FzIHRoZSBmZXRjaGVkIHJlc291cmNlLCBpZ25v
cmluZyB0aGUgcmVzb3VyY2Ugb2J0YWluZWQgZnJvbSB0aGUgbmV0d29yay4KICAgICAgICAgICAg
IEFTU0VSVChtX25ld2VzdENhY2hlKTsKLSAgICAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZSogbmV3ZXN0Q2FjaGVkUmVzb3VyY2UgPSBtX25ld2VzdENhY2hlLT5yZXNvdXJjZUZvclVS
TChoYW5kbGUtPnJlcXVlc3QoKS51cmwoKSk7CisgICAgICAgICAgICBBcHBsaWNhdGlvbkNhY2hl
UmVzb3VyY2UqIG5ld2VzdENhY2hlZFJlc291cmNlID0gbV9uZXdlc3RDYWNoZS0+cmVzb3VyY2VG
b3JVUkwoaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKSk7CiAgICAgICAgICAgICBBU1NFUlQo
bmV3ZXN0Q2FjaGVkUmVzb3VyY2UpOwogICAgICAgICAgICAgbV9jYWNoZUJlaW5nVXBkYXRlZC0+
YWRkUmVzb3VyY2UoQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUodXJsLCBuZXdlc3RD
YWNoZWRSZXNvdXJjZS0+cmVzcG9uc2UoKSwgdHlwZSwgbmV3ZXN0Q2FjaGVkUmVzb3VyY2UtPmRh
dGEoKSkpOwotICAgICAgICAgICAgbV9wZW5kaW5nRW50cmllcy5yZW1vdmUobV9jdXJyZW50SGFu
ZGxlLT5yZXF1ZXN0KCkudXJsKCkpOworICAgICAgICAgICAgbV9wZW5kaW5nRW50cmllcy5yZW1v
dmUobV9jdXJyZW50SGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKSk7CiAgICAgICAgICAgICBt
X2N1cnJlbnRIYW5kbGUtPmNhbmNlbCgpOwogICAgICAgICAgICAgbV9jdXJyZW50SGFuZGxlID0g
MDsKICAgICAgICAgICAgIC8vIExvYWQgdGhlIG5leHQgcmVzb3VyY2UsIGlmIGFueS4KQEAgLTYw
NSw5ICs2MDUsOSBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGlkRmluaXNoTG9hCiAg
ICAgfQogIAogICAgIEFTU0VSVChtX2N1cnJlbnRIYW5kbGUgPT0gaGFuZGxlKTsKLSAgICBBU1NF
UlQobV9wZW5kaW5nRW50cmllcy5jb250YWlucyhoYW5kbGUtPnJlcXVlc3QoKS51cmwoKSkpOwor
ICAgIEFTU0VSVChtX3BlbmRpbmdFbnRyaWVzLmNvbnRhaW5zKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0
KCkudXJsKCkpKTsKICAgICAKLSAgICBtX3BlbmRpbmdFbnRyaWVzLnJlbW92ZShoYW5kbGUtPnJl
cXVlc3QoKS51cmwoKSk7CisgICAgbV9wZW5kaW5nRW50cmllcy5yZW1vdmUoaGFuZGxlLT5maXJz
dFJlcXVlc3QoKS51cmwoKSk7CiAgICAgCiAgICAgQVNTRVJUKG1fY2FjaGVCZWluZ1VwZGF0ZWQp
OwogCkBAIC02MzIsOCArNjMyLDggQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmRpZEZh
aWwoUmVzbwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgdW5zaWduZWQgdHlwZSA9IG1f
Y3VycmVudFJlc291cmNlID8gbV9jdXJyZW50UmVzb3VyY2UtPnR5cGUoKSA6IG1fcGVuZGluZ0Vu
dHJpZXMuZ2V0KGhhbmRsZS0+cmVxdWVzdCgpLnVybCgpKTsKLSAgICBLVVJMIHVybChoYW5kbGUt
PnJlcXVlc3QoKS51cmwoKSk7CisgICAgdW5zaWduZWQgdHlwZSA9IG1fY3VycmVudFJlc291cmNl
ID8gbV9jdXJyZW50UmVzb3VyY2UtPnR5cGUoKSA6IG1fcGVuZGluZ0VudHJpZXMuZ2V0KGhhbmRs
ZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkpOworICAgIEtVUkwgdXJsKGhhbmRsZS0+Zmlyc3RSZXF1
ZXN0KCkudXJsKCkpOwogICAgIGlmICh1cmwuaGFzRnJhZ21lbnRJZGVudGlmaWVyKCkpCiAgICAg
ICAgIHVybC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKIApAQCAtNjY5LDEzICs2NjksMTIg
QEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmRpZFJlY2VpdmVNYQogICAgIGlmIChyZXNw
b25zZS5odHRwU3RhdHVzQ29kZSgpID09IDMwNCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgLyAxMDAgIT0gMiB8fCByZXNwb25zZS51cmwoKSAh
PSBtX21hbmlmZXN0SGFuZGxlLT5yZXF1ZXN0KCkudXJsKCkgfHwgIWVxdWFsSWdub3JpbmdDYXNl
KHJlc3BvbnNlLm1pbWVUeXBlKCksICJ0ZXh0L2NhY2hlLW1hbmlmZXN0IikpIHsKKyAgICBpZiAo
cmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAvIDEwMCAhPSAyIHx8IHJlc3BvbnNlLnVybCgpICE9
IG1fbWFuaWZlc3RIYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpIHx8ICFlcXVhbElnbm9yaW5n
Q2FzZShyZXNwb25zZS5taW1lVHlwZSgpLCAidGV4dC9jYWNoZS1tYW5pZmVzdCIpKSB7CiAgICAg
ICAgIGNhY2hlVXBkYXRlRmFpbGVkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBt
X21hbmlmZXN0UmVzb3VyY2UgPSBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZShtX21h
bmlmZXN0SGFuZGxlLT5yZXF1ZXN0KCkudXJsKCksIHJlc3BvbnNlLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvbkNh
Y2hlUmVzb3VyY2U6Ok1hbmlmZXN0KTsKKyAgICBtX21hbmlmZXN0UmVzb3VyY2UgPSBBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZShtX21hbmlmZXN0SGFuZGxlLT5maXJzdFJlcXVlc3Qo
KS51cmwoKSwgcmVzcG9uc2UsIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6TWFuaWZlc3QpOwog
fQogCiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGlkUmVjZWl2ZU1hbmlmZXN0RGF0YShj
b25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQpJbmRleDogV2ViQ29yZS9sb2FkZXIvaWNvbi9J
Y29uTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9pY29uL0ljb25Mb2Fk
ZXIuY3BwCShyZXZpc2lvbiA2MzEwOCkKKysrIFdlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkxvYWRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBJY29uTG9hZGVyOjpk
aWRSZWNlaXZlUmVzcG9uc2UoU3VicgogCiAgICAgaWYgKHN0YXR1cyAmJiAoc3RhdHVzIDwgMjAw
IHx8IHN0YXR1cyA+IDI5OSkpIHsKICAgICAgICAgUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSA9IHJl
c291cmNlTG9hZGVyLT5oYW5kbGUoKTsKLSAgICAgICAgZmluaXNoTG9hZGluZyhoYW5kbGUgPyBo
YW5kbGUtPnJlcXVlc3QoKS51cmwoKSA6IEtVUkwoKSwgMCk7CisgICAgICAgIGZpbmlzaExvYWRp
bmcoaGFuZGxlID8gaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKSA6IEtVUkwoKSwgMCk7CiAg
ICAgfQogfQogCkBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZCBJY29uTG9hZGVyOjpkaWRGYWlsKFN1
YnJlc291cmNlTG9hZAogICAgIGlmIChtX2xvYWRJc0luUHJvZ3Jlc3MpIHsKICAgICAgICAgQVNT
RVJUKHJlc291cmNlTG9hZGVyID09IG1fcmVzb3VyY2VMb2FkZXIpOwogICAgICAgICBSZXNvdXJj
ZUhhbmRsZSogaGFuZGxlID0gcmVzb3VyY2VMb2FkZXItPmhhbmRsZSgpOwotICAgICAgICBmaW5p
c2hMb2FkaW5nKGhhbmRsZSA/IGhhbmRsZS0+cmVxdWVzdCgpLnVybCgpIDogS1VSTCgpLCAwKTsK
KyAgICAgICAgZmluaXNoTG9hZGluZyhoYW5kbGUgPyBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVy
bCgpIDogS1VSTCgpLCAwKTsKICAgICB9CiB9CiAKQEAgLTEzNyw3ICsxMzcsNyBAQCB2b2lkIElj
b25Mb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoU3VicmVzCiAgICAgaWYgKG1fbG9hZElzSW5Qcm9n
cmVzcykgewogICAgICAgICBBU1NFUlQocmVzb3VyY2VMb2FkZXIgPT0gbV9yZXNvdXJjZUxvYWRl
cik7CiAgICAgICAgIFJlc291cmNlSGFuZGxlKiBoYW5kbGUgPSByZXNvdXJjZUxvYWRlci0+aGFu
ZGxlKCk7Ci0gICAgICAgIGZpbmlzaExvYWRpbmcoaGFuZGxlID8gaGFuZGxlLT5yZXF1ZXN0KCku
dXJsKCkgOiBLVVJMKCksIG1fcmVzb3VyY2VMb2FkZXItPnJlc291cmNlRGF0YSgpKTsKKyAgICAg
ICAgZmluaXNoTG9hZGluZyhoYW5kbGUgPyBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpIDog
S1VSTCgpLCBtX3Jlc291cmNlTG9hZGVyLT5yZXNvdXJjZURhdGEoKSk7CiAgICAgfQogfQogCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAJKHJldmlz
aW9uIDYzMTA4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzcsMzAgKzM3LDI4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGJvb2wgc2hv
dWxkRm9yY2VDb250ZW50U25pZmZpbmc7CiAKLVJlc291cmNlSGFuZGxlOjpSZXNvdXJjZUhhbmRs
ZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlSGFuZGxlQ2xpZW50KiBj
bGllbnQsIGJvb2wgZGVmZXJzTG9hZGluZywKLSAgICAgICAgIGJvb2wgc2hvdWxkQ29udGVudFNu
aWZmKQotICAgIDogZChuZXcgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCh0aGlzLCByZXF1ZXN0LCBj
bGllbnQsIGRlZmVyc0xvYWRpbmcsIHNob3VsZENvbnRlbnRTbmlmZikpCitSZXNvdXJjZUhhbmRs
ZTo6UmVzb3VyY2VIYW5kbGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJj
ZUhhbmRsZUNsaWVudCogY2xpZW50LCBib29sIGRlZmVyc0xvYWRpbmcsIGJvb2wgc2hvdWxkQ29u
dGVudFNuaWZmKQorICAgIDogZChuZXcgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCh0aGlzLCByZXF1
ZXN0LCBjbGllbnQsIGRlZmVyc0xvYWRpbmcsIHNob3VsZENvbnRlbnRTbmlmZiAmJiBzaG91bGRD
b250ZW50U25pZmZVUkwocmVxdWVzdC51cmwoKSkpKQogeworICAgIGlmICghcmVxdWVzdC51cmwo
KS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgc2NoZWR1bGVGYWlsdXJlKEludmFsaWRVUkxGYWlsdXJl
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghcG9ydEFsbG93ZWQocmVxdWVz
dC51cmwoKSkpIHsKKyAgICAgICAgc2NoZWR1bGVGYWlsdXJlKEJsb2NrZWRGYWlsdXJlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KIH0KIAogUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gUmVz
b3VyY2VIYW5kbGU6OmNyZWF0ZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291
cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQsCiAgICAgRnJhbWUqIGZyYW1lLCBib29sIGRlZmVyc0xv
YWRpbmcsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmKQogewotICAgIGlmIChzaG91bGRDb250ZW50
U25pZmYpCi0gICAgICAgIHNob3VsZENvbnRlbnRTbmlmZiA9IHNob3VsZENvbnRlbnRTbmlmZlVS
TChyZXF1ZXN0LnVybCgpKTsKLQogICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gbmV3SGFuZGxl
KGFkb3B0UmVmKG5ldyBSZXNvdXJjZUhhbmRsZShyZXF1ZXN0LCBjbGllbnQsIGRlZmVyc0xvYWRp
bmcsIHNob3VsZENvbnRlbnRTbmlmZikpKTsKIAotICAgIGlmICghcmVxdWVzdC51cmwoKS5pc1Zh
bGlkKCkpIHsKLSAgICAgICAgbmV3SGFuZGxlLT5zY2hlZHVsZUZhaWx1cmUoSW52YWxpZFVSTEZh
aWx1cmUpOwotICAgICAgICByZXR1cm4gbmV3SGFuZGxlLnJlbGVhc2UoKTsKLSAgICB9CisgICAg
aWYgKG5ld0hhbmRsZS0+ZC0+bV9zY2hlZHVsZWRGYWlsdXJlVHlwZSAhPSBOb0ZhaWx1cmUpCisg
ICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKCFwb3J0QWxsb3dlZChyZXF1ZXN0LnVybCgpKSkg
ewotICAgICAgICBuZXdIYW5kbGUtPnNjaGVkdWxlRmFpbHVyZShCbG9ja2VkRmFpbHVyZSk7Ci0g
ICAgICAgIHJldHVybiBuZXdIYW5kbGUucmVsZWFzZSgpOwotICAgIH0KLSAgICAgICAgCiAgICAg
aWYgKG5ld0hhbmRsZS0+c3RhcnQoZnJhbWUpKQogICAgICAgICByZXR1cm4gbmV3SGFuZGxlLnJl
bGVhc2UoKTsKIApAQCAtMTA1LDkgKzEwMyw5IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldENs
aWVudChSZXNvdXJjZUgKICAgICBkLT5tX2NsaWVudCA9IGNsaWVudDsKIH0KIAotY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiBSZXNvdXJjZUhhbmRsZTo6cmVxdWVzdCgpIGNvbnN0CitSZXNvdXJjZVJl
cXVlc3QmIFJlc291cmNlSGFuZGxlOjpmaXJzdFJlcXVlc3QoKQogewotICAgIHJldHVybiBkLT5t
X3JlcXVlc3Q7CisgICAgcmV0dXJuIGQtPm1fZmlyc3RSZXF1ZXN0OwogfQogCiBjb25zdCBTdHJp
bmcmIFJlc291cmNlSGFuZGxlOjpsYXN0SFRUUE1ldGhvZCgpIGNvbnN0CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAkocmV2aXNpb24gNjMxMDgpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMTEwLDggKzExMCw4IEBAIHByaXZhdGU6CiBwdWJsaWM6CiAgICAgLy8gRklYTUU6IHNob3Vs
ZCBub3QgbmVlZCB0aGUgRnJhbWUKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRs
ZT4gY3JlYXRlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlSGFuZGxlQ2xpZW50Kiwg
RnJhbWUqLCBib29sIGRlZmVyc0xvYWRpbmcsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmKTsKLQog
ICAgIHN0YXRpYyB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3Bv
bnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhLCBGcmFtZSogZnJhbWUpOworCiAgICAgc3RhdGljIHZv
aWQgcHJlcGFyZUZvclVSTChjb25zdCBLVVJMJik7CiAgICAgc3RhdGljIGJvb2wgd2lsbExvYWRG
cm9tQ2FjaGUoUmVzb3VyY2VSZXF1ZXN0JiwgRnJhbWUqKTsKICAgICBzdGF0aWMgdm9pZCBjYWNo
ZU1ldGFkYXRhKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBWZWN0b3I8Y2hhcj4mKTsK
QEAgLTE5Nyw3ICsxOTcsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldERlZmVyc0xvYWRpbmco
Ym9vbCk7CiAgICAgICAKLSAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QoKSBjb25z
dDsKKyAgICBSZXNvdXJjZVJlcXVlc3QmIGZpcnN0UmVxdWVzdCgpOwogICAgIGNvbnN0IFN0cmlu
ZyYgbGFzdEhUVFBNZXRob2QoKSBjb25zdDsKIAogICAgIHZvaWQgZmlyZUZhaWx1cmUoVGltZXI8
UmVzb3VyY2VIYW5kbGU+Kik7CkBAIC0yMTUsNiArMjE1LDEwIEBAIHByaXZhdGU6CiAgICAgdmly
dHVhbCB2b2lkIHJlZkF1dGhlbnRpY2F0aW9uQ2xpZW50KCkgeyByZWYoKTsgfQogICAgIHZpcnR1
YWwgdm9pZCBkZXJlZkF1dGhlbnRpY2F0aW9uQ2xpZW50KCkgeyBkZXJlZigpOyB9CiAKKyNpZiBQ
TEFURk9STShNQUMpCisgICAgTlNVUkxDb25uZWN0aW9uICpjcmVhdGVOU1VSTENvbm5lY3Rpb24o
aWQgZGVsZWdhdGUsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UsIGJvb2wgc2hvdWxk
Q29udGVudFNuaWZmKTsKKyNlbmRpZgorCiAgICAgZnJpZW5kIGNsYXNzIFJlc291cmNlSGFuZGxl
SW50ZXJuYWw7CiAgICAgT3duUHRyPFJlc291cmNlSGFuZGxlSW50ZXJuYWw+IGQ7CiB9OwpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5h
bC5oCShyZXZpc2lvbiA2MzEwOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZUhhbmRsZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIHB1YmxpYzoKICAgICAgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5h
bChSZXNvdXJjZUhhbmRsZSogbG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IFJlc291cmNlSGFuZGxlQ2xpZW50KiBjLCBib29sIGRlZmVyc0xvYWRpbmcsIGJvb2wgc2hvdWxk
Q29udGVudFNuaWZmKQogICAgICAgICAgICAgOiBtX2NsaWVudChjKQotICAgICAgICAgICAgLCBt
X3JlcXVlc3QocmVxdWVzdCkKKyAgICAgICAgICAgICwgbV9maXJzdFJlcXVlc3QocmVxdWVzdCkK
ICAgICAgICAgICAgICwgbV9sYXN0SFRUUE1ldGhvZChyZXF1ZXN0Lmh0dHBNZXRob2QoKSkKICAg
ICAgICAgICAgICwgc3RhdHVzKDApCiAgICAgICAgICAgICAsIG1fZGVmZXJzTG9hZGluZyhkZWZl
cnNMb2FkaW5nKQpAQCAtMTM2LDEwICsxMzYsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAgICAgLCBtX3NjaGVkdWxlZEZhaWx1cmVUeXBlKFJlc291cmNlSGFuZGxlOjpOb0ZhaWx1
cmUpCiAgICAgICAgICAgICAsIG1fZmFpbHVyZVRpbWVyKGxvYWRlciwgJlJlc291cmNlSGFuZGxl
OjpmaXJlRmFpbHVyZSkKICAgICAgICAgewotICAgICAgICAgICAgY29uc3QgS1VSTCYgdXJsID0g
bV9yZXF1ZXN0LnVybCgpOworICAgICAgICAgICAgY29uc3QgS1VSTCYgdXJsID0gbV9maXJzdFJl
cXVlc3QudXJsKCk7CiAgICAgICAgICAgICBtX3VzZXIgPSB1cmwudXNlcigpOwogICAgICAgICAg
ICAgbV9wYXNzID0gdXJsLnBhc3MoKTsKLSAgICAgICAgICAgIG1fcmVxdWVzdC5yZW1vdmVDcmVk
ZW50aWFscygpOworICAgICAgICAgICAgbV9maXJzdFJlcXVlc3QucmVtb3ZlQ3JlZGVudGlhbHMo
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgflJlc291cmNlSGFuZGxlSW50ZXJuYWwo
KTsKQEAgLTE0Nyw3ICsxNDcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFJlc291
cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogICAgICAgICBS
ZXNvdXJjZUhhbmRsZUNsaWVudCogbV9jbGllbnQ7CiAgICAgICAgIAotICAgICAgICBSZXNvdXJj
ZVJlcXVlc3QgbV9yZXF1ZXN0OworICAgICAgICBSZXNvdXJjZVJlcXVlc3QgbV9maXJzdFJlcXVl
c3Q7CiAgICAgICAgIFN0cmluZyBtX2xhc3RIVFRQTWV0aG9kOwogCiAgICAgICAgIC8vIFN1Z2dl
c3RlZCBjcmVkZW50aWFscyBmb3IgdGhlIGN1cnJlbnQgcmVkaXJlY3Rpb24gc3RlcC4KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5l
dC5jcHAJKHJldmlzaW9uIDYzMTA4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jl
c291cmNlSGFuZGxlQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDAsMTQgKzMwMCwxNCBA
QCB2b2lkIGFkZEhlYWRlcnNGcm9tSGFzaE1hcChDRk11dGFibGVVUkxSCiBSZXNvdXJjZUhhbmRs
ZUludGVybmFsOjp+UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCgpCiB7CiAgICAgaWYgKG1fY29ubmVj
dGlvbikgewotICAgICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gQ2FuY2VsbGluZyBjb25uZWN0
aW9uICVwICglcykiLCBtX2Nvbm5lY3Rpb24sIG1fcmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpKTsKKyAgICAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIENhbmNlbGxpbmcgY29u
bmVjdGlvbiAlcCAoJXMpIiwgbV9jb25uZWN0aW9uLCBtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgQ0ZVUkxDb25uZWN0aW9uQ2FuY2VsKG1fY29u
bmVjdGlvbi5nZXQoKSk7CiAgICAgfQogfQogCiBSZXNvdXJjZUhhbmRsZTo6flJlc291cmNlSGFu
ZGxlKCkKIHsKLSAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gRGVzdHJveWluZyBqb2IgJXAgKCVz
KSIsIHRoaXMsIGQtPm1fcmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICBMT0coTmV0d29yaywgIkNGTmV0IC0gRGVzdHJveWluZyBqb2IgJXAgKCVzKSIsIHRoaXMsIGQt
Pm1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogfQogCiBDRkFy
cmF5UmVmIGFycmF5RnJvbUZvcm1EYXRhKGNvbnN0IEZvcm1EYXRhJiBkKQpAQCAtMzk3LDM3ICsz
OTcsMzcgQEAgYm9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoRnJhbWUqIGZyYW1lKQogICAgIGlm
ICghZnJhbWUtPnBhZ2UoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCghZC0+
bV91c2VyLmlzRW1wdHkoKSB8fCAhZC0+bV9wYXNzLmlzRW1wdHkoKSkgJiYgIWQtPm1fcmVxdWVz
dC51cmwoKS5wcm90b2NvbEluSFRUUEZhbWlseSgpKSB7CisgICAgaWYgKCghZC0+bV91c2VyLmlz
RW1wdHkoKSB8fCAhZC0+bV9wYXNzLmlzRW1wdHkoKSkgJiYgIWZpcnN0UmVxdWVzdCgpLnVybCgp
LnByb3RvY29sSW5IVFRQRmFtaWx5KCkpIHsKICAgICAgICAgLy8gQ3JlZGVudGlhbHMgZm9yIGZ0
cCBjYW4gb25seSBiZSBwYXNzZWQgaW4gVVJMLCB0aGUgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlIGRlbGVnYXRlIGNhbGwgd29uJ3QgYmUgbWFkZS4KLSAgICAgICAgS1VSTCB1cmxX
aXRoQ3JlZGVudGlhbHMoZC0+bV9yZXF1ZXN0LnVybCgpKTsKKyAgICAgICAgS1VSTCB1cmxXaXRo
Q3JlZGVudGlhbHMoZmlyc3RSZXF1ZXN0KCkudXJsKCkpOwogICAgICAgICB1cmxXaXRoQ3JlZGVu
dGlhbHMuc2V0VXNlcihkLT5tX3VzZXIpOwogICAgICAgICB1cmxXaXRoQ3JlZGVudGlhbHMuc2V0
UGFzcyhkLT5tX3Bhc3MpOwotICAgICAgICBkLT5tX3JlcXVlc3Quc2V0VVJMKHVybFdpdGhDcmVk
ZW50aWFscyk7CisgICAgICAgIGZpcnN0UmVxdWVzdCgpLnNldFVSTCh1cmxXaXRoQ3JlZGVudGlh
bHMpOwogICAgIH0KIAogICAgIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UgPSAhY2xp
ZW50KCkgfHwgY2xpZW50KCktPnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKHRoaXMpOwogCiAg
ICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzcxNzQwNTA+IC0gRm9yIFVSTHMgdGhhdCBtYXRjaCB0aGUg
cGF0aHMgb2YgdGhvc2UgcHJldmlvdXNseSBjaGFsbGVuZ2VkIGZvciBIVFRQIEJhc2ljIGF1dGhl
bnRpY2F0aW9uLCAKICAgICAvLyB0cnkgYW5kIHJldXNlIHRoZSBjcmVkZW50aWFsIHByZWVtcHRp
dmVseSwgYXMgYWxsb3dlZCBieSBSRkMgMjYxNy4KLSAgICBpZiAoc2hvdWxkVXNlQ3JlZGVudGlh
bFN0b3JhZ2UgJiYgZC0+bV9yZXF1ZXN0LnVybCgpLnByb3RvY29sSW5IVFRQRmFtaWx5KCkpIHsK
KyAgICBpZiAoc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UgJiYgZmlyc3RSZXF1ZXN0KCkudXJs
KCkucHJvdG9jb2xJbkhUVFBGYW1pbHkoKSkgewogICAgICAgICBpZiAoZC0+bV91c2VyLmlzRW1w
dHkoKSAmJiBkLT5tX3Bhc3MuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAvLyA8cmRhcjovL3By
b2JsZW0vNzE3NDA1MD4gLSBGb3IgVVJMcyB0aGF0IG1hdGNoIHRoZSBwYXRocyBvZiB0aG9zZSBw
cmV2aW91c2x5IGNoYWxsZW5nZWQgZm9yIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24sIAogICAg
ICAgICAgICAgLy8gdHJ5IGFuZCByZXVzZSB0aGUgY3JlZGVudGlhbCBwcmVlbXB0aXZlbHksIGFz
IGFsbG93ZWQgYnkgUkZDIDI2MTcuCi0gICAgICAgICAgICBkLT5tX2luaXRpYWxDcmVkZW50aWFs
ID0gQ3JlZGVudGlhbFN0b3JhZ2U6OmdldChkLT5tX3JlcXVlc3QudXJsKCkpOworICAgICAgICAg
ICAgZC0+bV9pbml0aWFsQ3JlZGVudGlhbCA9IENyZWRlbnRpYWxTdG9yYWdlOjpnZXQoZmlyc3RS
ZXF1ZXN0KCkudXJsKCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gSWYgdGhl
cmUgaXMgYWxyZWFkeSBhIHByb3RlY3Rpb24gc3BhY2Uga25vd24gZm9yIHRoZSBVUkwsIHVwZGF0
ZSBzdG9yZWQgY3JlZGVudGlhbHMgYmVmb3JlIHNlbmRpbmcgYSByZXF1ZXN0LgogICAgICAgICAg
ICAgLy8gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBpbXBsZW1lbnQgbG9nb3V0IGJ5IHNlbmRp
bmcgYW4gWE1MSHR0cFJlcXVlc3Qgd2l0aCBrbm93biBpbmNvcnJlY3QgY3JlZGVudGlhbHMsIGFu
ZCBhYm9ydGluZyBpdCBpbW1lZGlhdGVseQogICAgICAgICAgICAgLy8gKHNvIHRoYXQgYW4gYXV0
aGVudGljYXRpb24gZGlhbG9nIGRvZXNuJ3QgcG9wIHVwKS4KLSAgICAgICAgICAgIENyZWRlbnRp
YWxTdG9yYWdlOjpzZXQoQ3JlZGVudGlhbChkLT5tX3VzZXIsIGQtPm1fcGFzcywgQ3JlZGVudGlh
bFBlcnNpc3RlbmNlTm9uZSksIGQtPm1fcmVxdWVzdC51cmwoKSk7CisgICAgICAgICAgICBDcmVk
ZW50aWFsU3RvcmFnZTo6c2V0KENyZWRlbnRpYWwoZC0+bV91c2VyLCBkLT5tX3Bhc3MsIENyZWRl
bnRpYWxQZXJzaXN0ZW5jZU5vbmUpLCBmaXJzdFJlcXVlc3QoKS51cmwoKSk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgICAgIAogICAgIGlmICghZC0+bV9pbml0aWFsQ3JlZGVudGlhbC5pc0VtcHR5
KCkpIHsKICAgICAgICAgU3RyaW5nIGF1dGhIZWFkZXIgPSAiQmFzaWMgIiArIGVuY29kZUJhc2lj
QXV0aG9yaXphdGlvbihkLT5tX2luaXRpYWxDcmVkZW50aWFsLnVzZXIoKSwgZC0+bV9pbml0aWFs
Q3JlZGVudGlhbC5wYXNzd29yZCgpKTsKLSAgICAgICAgZC0+bV9yZXF1ZXN0LmFkZEhUVFBIZWFk
ZXJGaWVsZCgiQXV0aG9yaXphdGlvbiIsIGF1dGhIZWFkZXIpOworICAgICAgICBmaXJzdFJlcXVl
c3QoKS5hZGRIVFRQSGVhZGVyRmllbGQoIkF1dGhvcml6YXRpb24iLCBhdXRoSGVhZGVyKTsKICAg
ICB9CiAKLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZXF1ZXN0UmVmPiByZXF1ZXN0KEFkb3B0Q0YsIG1h
a2VGaW5hbFJlcXVlc3QoZC0+bV9yZXF1ZXN0LCBkLT5tX3Nob3VsZENvbnRlbnRTbmlmZikpOwor
ICAgIFJldGFpblB0cjxDRlVSTFJlcXVlc3RSZWY+IHJlcXVlc3QoQWRvcHRDRiwgbWFrZUZpbmFs
UmVxdWVzdChmaXJzdFJlcXVlc3QoKSwgZC0+bV9zaG91bGRDb250ZW50U25pZmYpKTsKIAogICAg
IENGVVJMQ29ubmVjdGlvbkNsaWVudF9WMyBjbGllbnQgPSB7IDMsIHRoaXMsIDAsIDAsIDAsIFdl
YkNvcmU6OndpbGxTZW5kUmVxdWVzdCwgZGlkUmVjZWl2ZVJlc3BvbnNlLCBkaWRSZWNlaXZlRGF0
YSwgTlVMTCwgZGlkRmluaXNoTG9hZGluZywgZGlkRmFpbCwgd2lsbENhY2hlUmVzcG9uc2UsIGRp
ZFJlY2VpdmVDaGFsbGVuZ2UsIGRpZFNlbmRCb2R5RGF0YSwgc2hvdWxkVXNlQ3JlZGVudGlhbFN0
b3JhZ2VDYWxsYmFjaywgMH07CiAKQEAgLTQzOSw3ICs0MzksNyBAQCBib29sIFJlc291cmNlSGFu
ZGxlOjpzdGFydChGcmFtZSogZnJhbWUpCiAgICAgQ0ZVUkxDb25uZWN0aW9uU2NoZWR1bGVEb3du
bG9hZFdpdGhSdW5Mb29wKGQtPm1fY29ubmVjdGlvbi5nZXQoKSwgbG9hZGVyUnVuTG9vcCgpLCBr
Q0ZSdW5Mb29wRGVmYXVsdE1vZGUpOwogICAgIENGVVJMQ29ubmVjdGlvblN0YXJ0KGQtPm1fY29u
bmVjdGlvbi5nZXQoKSk7CiAKLSAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gU3RhcnRpbmcgVVJM
ICVzIChoYW5kbGU9JXAsIGNvbm49JXApIiwgZC0+bV9yZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCksIHRoaXMsIGQtPm1fY29ubmVjdGlvbik7CisgICAgTE9HKE5ldHdvcmssICJD
Rk5ldCAtIFN0YXJ0aW5nIFVSTCAlcyAoaGFuZGxlPSVwLCBjb25uPSVwKSIsIGZpcnN0UmVxdWVz
dCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRoaXMsIGQtPm1fY29ubmVjdGlvbik7
CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTUwMCw3ICs1MDAsNyBAQCB2b2lkIFJlc291cmNl
SGFuZGxlOjpkaWRSZWNlaXZlQXV0aGVudGljCiAgICAgICAgIAogICAgICAgICBLVVJMIHVybFRv
U3RvcmU7CiAgICAgICAgIGlmIChjaGFsbGVuZ2UuZmFpbHVyZVJlc3BvbnNlKCkuaHR0cFN0YXR1
c0NvZGUoKSA9PSA0MDEpCi0gICAgICAgICAgICB1cmxUb1N0b3JlID0gZC0+bV9yZXF1ZXN0LnVy
bCgpOworICAgICAgICAgICAgdXJsVG9TdG9yZSA9IGZpcnN0UmVxdWVzdCgpLnVybCgpOwogICAg
ICAgICBDcmVkZW50aWFsU3RvcmFnZTo6c2V0KGNvcmUoY3JlZGVudGlhbC5nZXQoKSksIGNoYWxs
ZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSwgdXJsVG9TdG9yZSk7CiAgICAgICAgIAogICAgICAgICBD
RlVSTENvbm5lY3Rpb25Vc2VDcmVkZW50aWFsKGQtPm1fY29ubmVjdGlvbi5nZXQoKSwgY3JlZGVu
dGlhbC5nZXQoKSwgY2hhbGxlbmdlLmNmVVJMQXV0aENoYWxsZW5nZVJlZigpKTsKQEAgLTUxNiw3
ICs1MTYsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpkaWRSZWNlaXZlQXV0aGVudGljCiAgICAg
ICAgICAgICBBU1NFUlQoY3JlZGVudGlhbC5wZXJzaXN0ZW5jZSgpID09IENyZWRlbnRpYWxQZXJz
aXN0ZW5jZU5vbmUpOwogICAgICAgICAgICAgaWYgKGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9uc2Uo
KS5odHRwU3RhdHVzQ29kZSgpID09IDQwMSkgewogICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRo
ZSBjcmVkZW50aWFsIGJhY2ssIHBvc3NpYmx5IGFkZGluZyBpdCBhcyBhIGRlZmF1bHQgZm9yIHRo
aXMgZGlyZWN0b3J5LgotICAgICAgICAgICAgICAgIENyZWRlbnRpYWxTdG9yYWdlOjpzZXQoY3Jl
ZGVudGlhbCwgY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLCBkLT5tX3JlcXVlc3QudXJsKCkp
OworICAgICAgICAgICAgICAgIENyZWRlbnRpYWxTdG9yYWdlOjpzZXQoY3JlZGVudGlhbCwgY2hh
bGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLCBmaXJzdFJlcXVlc3QoKS51cmwoKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZVUkxDcmVkZW50aWFsUmVmPiBjZkNyZWRl
bnRpYWwoQWRvcHRDRiwgY3JlYXRlQ0YoY3JlZGVudGlhbCkpOwogICAgICAgICAgICAgQ0ZVUkxD
b25uZWN0aW9uVXNlQ3JlZGVudGlhbChkLT5tX2Nvbm5lY3Rpb24uZ2V0KCksIGNmQ3JlZGVudGlh
bC5nZXQoKSwgY2hhbGxlbmdlLmNmVVJMQXV0aENoYWxsZW5nZVJlZigpKTsKQEAgLTU1Miw3ICs1
NTIsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENyZWRlbnRpYWwoCiAgICAgICAg
IAogICAgICAgICBLVVJMIHVybFRvU3RvcmU7CiAgICAgICAgIGlmIChjaGFsbGVuZ2UuZmFpbHVy
ZVJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSA9PSA0MDEpCi0gICAgICAgICAgICB1cmxUb1N0
b3JlID0gZC0+bV9yZXF1ZXN0LnVybCgpOyAgICAgIAorICAgICAgICAgICAgdXJsVG9TdG9yZSA9
IGZpcnN0UmVxdWVzdCgpLnVybCgpOyAgICAgIAogICAgICAgICBDcmVkZW50aWFsU3RvcmFnZTo6
c2V0KHdlYkNyZWRlbnRpYWwsIGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSwgdXJsVG9TdG9y
ZSk7CiAKICAgICAgICAgQ0ZVUkxDb25uZWN0aW9uVXNlQ3JlZGVudGlhbChkLT5tX2Nvbm5lY3Rp
b24uZ2V0KCksIGNmQ3JlZGVudGlhbC5nZXQoKSwgY2hhbGxlbmdlLmNmVVJMQXV0aENoYWxsZW5n
ZVJlZigpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFu
ZGxlTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAkocmV2aXNpb24gNjMxMDgpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNzEsNyArMjcxLDcgQEAgc3RhdGljIHNpemVfdCBoZWFkZXJDYWxsYmFjayhj
aGFyKiBwdHIsIAogICAgICAgICAgICAgICAgIGlmIChjbGllbnQpCiAgICAgICAgICAgICAgICAg
ICAgIGNsaWVudC0+d2lsbFNlbmRSZXF1ZXN0KGpvYiwgcmVkaXJlY3RlZFJlcXVlc3QsIGQtPm1f
cmVzcG9uc2UpOwogCi0gICAgICAgICAgICAgICAgZC0+bV9yZXF1ZXN0LnNldFVSTChuZXdVUkwp
OworICAgICAgICAgICAgICAgIGQtPm1fZmlyc3RSZXF1ZXN0LnNldFVSTChuZXdVUkwpOwogCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsU2l6ZTsKICAgICAgICAgICAgIH0KSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbQko
cmV2aXNpb24gNjMxMDgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNl
SGFuZGxlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNi0yMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTU2LDggKzU2LDcgQEAgdHlwZWRlZiBpbnQgTlNJbnRlZ2VyOwogCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAotQGludGVyZmFjZSBXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVn
YXRlIDogTlNPYmplY3QgPE5TVVJMQ29ubmVjdGlvbkRlbGVnYXRlPgoteworQGludGVyZmFjZSBX
ZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlIDogTlNPYmplY3QgPE5TVVJMQ29ubmVjdGlv
bkRlbGVnYXRlPiB7CiAgICAgUmVzb3VyY2VIYW5kbGUqIG1faGFuZGxlOwogfQogLSAoaWQpaW5p
dFdpdGhIYW5kbGU6KFJlc291cmNlSGFuZGxlKiloYW5kbGU7CkBAIC04NSwyMCArODQsNDggQEAg
LSAoaWQpX3Byb3BlcnR5Rm9yS2V5OihOU1N0cmluZyAqKWtleTsKIAogI2lmbmRlZiBCVUlMRElO
R19PTl9USUdFUgogCi1AaW50ZXJmYWNlIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlciA6IE5TT2Jq
ZWN0IDxOU1VSTENvbm5lY3Rpb25EZWxlZ2F0ZT4gewotICAgIE5TVVJMICptX3VybDsKLSAgICBO
U1N0cmluZyAqbV91c2VyOwotICAgIE5TU3RyaW5nICptX3Bhc3M7Ci0gICAgLy8gU3RvcmUgdGhl
IHByZWVtcHRpdmVseSB1c2VkIGluaXRpYWwgY3JlZGVudGlhbCBzbyB0aGF0IGlmIHdlIGdldCBh
biBhdXRoZW50aWNhdGlvbiBjaGFsbGVuZ2UsIHdlIHdvbid0IHVzZSB0aGUgc2FtZSBvbmUgYWdh
aW4uCi0gICAgQ3JlZGVudGlhbCBtX2luaXRpYWxDcmVkZW50aWFsOwotICAgIEJPT0wgbV9hbGxv
d1N0b3JlZENyZWRlbnRpYWxzOworY2xhc3MgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50
IDogcHVibGljIFJlc291cmNlSGFuZGxlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c093blB0cjxXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQ+IGNyZWF0ZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVu
dCk7CisgICAgfQorCisgICAgdmlydHVhbCB+V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50
KCk7CisKKyAgICB2b2lkIHNldEFsbG93U3RvcmVkQ3JlZGVudGlhbHMoYm9vbCBhbGxvdykgeyBt
X2FsbG93U3RvcmVkQ3JlZGVudGlhbHMgPSBhbGxvdzsgfQorICAgIE5TVVJMUmVzcG9uc2UgKnJl
c3BvbnNlKCkgeyByZXR1cm4gbV9yZXNwb25zZTsgfQorICAgIE5TTXV0YWJsZURhdGEgKmRhdGEo
KSB7IHJldHVybiBtX2RhdGE7IH0KKyAgICBOU0Vycm9yICplcnJvcigpIHsgcmV0dXJuIG1fZXJy
b3I7IH0KKyAgICBib29sIGlzRG9uZSgpIHsgcmV0dXJuIG1faXNEb25lOyB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlSGFuZGxlKiwgUmVzb3VyY2VSZXF1ZXN0
JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgLypyZWRpcmVjdFJlc3BvbnNlKi8pOworICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShSZXNvdXJjZUhhbmRsZSopOwor
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUmVzb3Vy
Y2VIYW5kbGUqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOworICAgIHZpcnR1YWwg
dm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJik7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxl
KiwgY29uc3QgY2hhciosIGludCwgaW50IC8qbGVuZ3RoUmVjZWl2ZWQqLyk7CisgICAgdmlydHVh
bCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyNpZiBV
U0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQorICAgIHZpcnR1YWwgYm9vbCBjYW5B
dXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKFJlc291cmNlSGFuZGxlKiwgY29uc3Qg
UHJvdGVjdGlvblNwYWNlJik7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBXZWJDb3JlU3luY2hy
b25vdXNMb2FkZXJDbGllbnQoKQorICAgICAgICA6IG1fYWxsb3dTdG9yZWRDcmVkZW50aWFscyhm
YWxzZSkKKyAgICAgICAgLCBtX3Jlc3BvbnNlKDApCisgICAgICAgICwgbV9kYXRhKDApCisgICAg
ICAgICwgbV9lcnJvcigwKQorICAgICAgICAsIG1faXNEb25lKGZhbHNlKQorICAgIHsKKyAgICB9
CisKKyAgICBib29sIG1fYWxsb3dTdG9yZWRDcmVkZW50aWFsczsKICAgICBOU1VSTFJlc3BvbnNl
ICptX3Jlc3BvbnNlOwogICAgIE5TTXV0YWJsZURhdGEgKm1fZGF0YTsKICAgICBOU0Vycm9yICpt
X2Vycm9yOwotICAgIEJPT0wgbV9pc0RvbmU7Ci19Ci0rIChOU0RhdGEgKilsb2FkUmVxdWVzdDoo
TlNVUkxSZXF1ZXN0ICopcmVxdWVzdCBhbGxvd1N0b3JlZENyZWRlbnRpYWxzOihCT09MKWFsbG93
U3RvcmVkQ3JlZGVudGlhbHMgcmV0dXJuaW5nUmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKiopcmVz
cG9uc2UgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7Ci1AZW5kCisgICAgYm9vbCBtX2lzRG9uZTsK
K307CiAKIHN0YXRpYyBOU1N0cmluZyAqV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyUnVuTG9vcE1v
ZGUgPSBAIldlYkNvcmVTeW5jaHJvbm91c0xvYWRlclJ1bkxvb3BNb2RlIjsKIApAQCAtMTYxLDEy
ICsxODgsNTEgQEAgYm9vbCBSZXNvdXJjZUhhbmRsZTo6ZGlkU2VuZEJvZHlEYXRhRGVsZQogICAg
IHJldHVybiBOU0ZvdW5kYXRpb25WZXJzaW9uTnVtYmVyID4gTWF4Rm91bmRhdGlvblZlcnNpb25X
aXRob3V0ZGlkU2VuZEJvZHlEYXRhRGVsZWdhdGU7CiB9CiAKLXN0YXRpYyBOU1VSTENvbm5lY3Rp
b24gKmNyZWF0ZU5TVVJMQ29ubmVjdGlvbihOU1VSTFJlcXVlc3QgKnJlcXVlc3QsIGlkIGRlbGVn
YXRlLCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKQorTlNVUkxDb25uZWN0aW9uICpS
ZXNvdXJjZUhhbmRsZTo6Y3JlYXRlTlNVUkxDb25uZWN0aW9uKGlkIGRlbGVnYXRlLCBib29sIHNo
b3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlLCBib29sIHNob3VsZENvbnRlbnRTbmlmZikKIHsKLSNp
ZiBkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKQotICAgIFVOVVNFRF9QQVJBTShzaG91bGRVc2VD
cmVkZW50aWFsU3RvcmFnZSk7Ci0gICAgcmV0dXJuIFtbTlNVUkxDb25uZWN0aW9uIGFsbG9jXSBp
bml0V2l0aFJlcXVlc3Q6cmVxdWVzdCBkZWxlZ2F0ZTpkZWxlZ2F0ZV07Ci0jZWxzZQorICAgIC8v
IENyZWRlbnRpYWxzIGZvciBmdHAgY2FuIG9ubHkgYmUgcGFzc2VkIGluIFVSTCwgdGhlIGNvbm5l
Y3Rpb246ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOiBkZWxlZ2F0ZSBjYWxsIHdv
bid0IGJlIG1hZGUuCisgICAgaWYgKCghZC0+bV91c2VyLmlzRW1wdHkoKSB8fCAhZC0+bV9wYXNz
LmlzRW1wdHkoKSkKKyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICAgJiYgIWZpcnN0UmVx
dWVzdCgpLnVybCgpLnByb3RvY29sSW5IVFRQRmFtaWx5KCkgLy8gT24gVGlnZXIsIGFsd2F5cyBw
YXNzIGNyZWRlbnRpYWxzIGluIFVSTCwgc28gdGhhdCB0aGV5IGdldCBzdG9yZWQgZXZlbiBpZiB0
aGUgcmVxdWVzdCBnZXRzIGNhbmNlbGxlZCByaWdodCBhd2F5LgorI2VuZGlmCisgICAgKSB7Cisg
ICAgICAgIEtVUkwgdXJsV2l0aENyZWRlbnRpYWxzKGZpcnN0UmVxdWVzdCgpLnVybCgpKTsKKyAg
ICAgICAgdXJsV2l0aENyZWRlbnRpYWxzLnNldFVzZXIoZC0+bV91c2VyKTsKKyAgICAgICAgdXJs
V2l0aENyZWRlbnRpYWxzLnNldFBhc3MoZC0+bV9wYXNzKTsKKyAgICAgICAgZmlyc3RSZXF1ZXN0
KCkuc2V0VVJMKHVybFdpdGhDcmVkZW50aWFscyk7CisgICAgfQorCisgICAgLy8gSWYgYSBVUkwg
YWxyZWFkeSBoYXMgY29va2llcywgdGhlbiB3ZSdsbCByZWxheCB0aGUgM3JkIHBhcnR5IGNvb2tp
ZSBwb2xpY3kgYW5kIGFjY2VwdCBuZXcgY29va2llcy4KKyAgICBOU0hUVFBDb29raWVTdG9yYWdl
ICpzaGFyZWRTdG9yYWdlID0gW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0
b3JhZ2VdOworICAgIGlmIChbc2hhcmVkU3RvcmFnZSBjb29raWVBY2NlcHRQb2xpY3ldID09IE5T
SFRUUENvb2tpZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluICYmIFtbc2hh
cmVkU3RvcmFnZSBjb29raWVzRm9yVVJMOmZpcnN0UmVxdWVzdCgpLnVybCgpXSBjb3VudF0pCisg
ICAgICAgIGZpcnN0UmVxdWVzdCgpLnNldEZpcnN0UGFydHlGb3JDb29raWVzKGZpcnN0UmVxdWVz
dCgpLnVybCgpKTsKKworI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKQorICAgIGlmIChz
aG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSAmJiBmaXJzdFJlcXVlc3QoKS51cmwoKS5wcm90b2Nv
bEluSFRUUEZhbWlseSgpKSB7CisgICAgICAgIGlmIChkLT5tX3VzZXIuaXNFbXB0eSgpICYmIGQt
Pm1fcGFzcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS83MTc0
MDUwPiAtIEZvciBVUkxzIHRoYXQgbWF0Y2ggdGhlIHBhdGhzIG9mIHRob3NlIHByZXZpb3VzbHkg
Y2hhbGxlbmdlZCBmb3IgSFRUUCBCYXNpYyBhdXRoZW50aWNhdGlvbiwgCisgICAgICAgICAgICAv
LyB0cnkgYW5kIHJldXNlIHRoZSBjcmVkZW50aWFsIHByZWVtcHRpdmVseSwgYXMgYWxsb3dlZCBi
eSBSRkMgMjYxNy4KKyAgICAgICAgICAgIGQtPm1faW5pdGlhbENyZWRlbnRpYWwgPSBDcmVkZW50
aWFsU3RvcmFnZTo6Z2V0KGZpcnN0UmVxdWVzdCgpLnVybCgpKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkgYSBwcm90ZWN0aW9uIHNwYWNlIGtu
b3duIGZvciB0aGUgVVJMLCB1cGRhdGUgc3RvcmVkIGNyZWRlbnRpYWxzIGJlZm9yZSBzZW5kaW5n
IGEgcmVxdWVzdC4KKyAgICAgICAgICAgIC8vIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gaW1w
bGVtZW50IGxvZ291dCBieSBzZW5kaW5nIGFuIFhNTEh0dHBSZXF1ZXN0IHdpdGgga25vd24gaW5j
b3JyZWN0IGNyZWRlbnRpYWxzLCBhbmQgYWJvcnRpbmcgaXQgaW1tZWRpYXRlbHkKKyAgICAgICAg
ICAgIC8vIChzbyB0aGF0IGFuIGF1dGhlbnRpY2F0aW9uIGRpYWxvZyBkb2Vzbid0IHBvcCB1cCku
CisgICAgICAgICAgICBDcmVkZW50aWFsU3RvcmFnZTo6c2V0KENyZWRlbnRpYWwoZC0+bV91c2Vy
LCBkLT5tX3Bhc3MsIENyZWRlbnRpYWxQZXJzaXN0ZW5jZU5vbmUpLCBmaXJzdFJlcXVlc3QoKS51
cmwoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIAorICAgIGlmICghZC0+bV9pbml0aWFs
Q3JlZGVudGlhbC5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgRGlnZXN0
IGF1dGhlbnRpY2F0aW9uLCBhbmQgUHJveHktQXV0aG9yaXphdGlvbi4KKyAgICAgICAgU3RyaW5n
IGF1dGhIZWFkZXIgPSAiQmFzaWMgIiArIGVuY29kZUJhc2ljQXV0aG9yaXphdGlvbihkLT5tX2lu
aXRpYWxDcmVkZW50aWFsLnVzZXIoKSwgZC0+bV9pbml0aWFsQ3JlZGVudGlhbC5wYXNzd29yZCgp
KTsKKyAgICAgICAgZmlyc3RSZXF1ZXN0KCkuYWRkSFRUUEhlYWRlckZpZWxkKCJBdXRob3JpemF0
aW9uIiwgYXV0aEhlYWRlcik7CisgICAgfQorCisgICAgTlNVUkxSZXF1ZXN0ICpuc1JlcXVlc3Qg
PSBmaXJzdFJlcXVlc3QoKS5uc1VSTFJlcXVlc3QoKTsKKyAgICBpZiAoIXNob3VsZENvbnRlbnRT
bmlmZikgeworICAgICAgICBOU011dGFibGVVUkxSZXF1ZXN0ICptdXRhYmxlUmVxdWVzdCA9IFtb
bnNSZXF1ZXN0IGNvcHldIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgd2tTZXROU1VSTFJlcXVlc3RT
aG91bGRDb250ZW50U25pZmYobXV0YWJsZVJlcXVlc3QsIE5PKTsKKyAgICAgICAgbnNSZXF1ZXN0
ID0gbXV0YWJsZVJlcXVlc3Q7CisgICAgfQogCiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVP
UEFSRCkKICAgICBBU1NFUlQoW05TVVJMQ29ubmVjdGlvbiBpbnN0YW5jZXNSZXNwb25kVG9TZWxl
Y3RvcjpAc2VsZWN0b3IoX2luaXRXaXRoUmVxdWVzdDpkZWxlZ2F0ZTp1c2VzQ2FjaGU6bWF4Q29u
dGVudExlbmd0aDpzdGFydEltbWVkaWF0ZWx5OmNvbm5lY3Rpb25Qcm9wZXJ0aWVzOildKTsKQEAg
LTE3OCwxMCArMjQ0LDE1IEBAIHN0YXRpYyBOU1VSTENvbm5lY3Rpb24gKmNyZWF0ZU5TVVJMQ29u
bmUKICAgICBpZiAoc3VwcG9ydHNTZXR0aW5nQ29ubmVjdGlvblByb3BlcnRpZXMpIHsKICAgICAg
ICAgTlNEaWN0aW9uYXJ5ICpzZXNzaW9uSUQgPSBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSA/
IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeV0gOiBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRo
T2JqZWN0OkAiV2ViS2l0UHJpdmF0ZVNlc3Npb24iIGZvcktleTpAIl9rQ0ZVUkxDb25uZWN0aW9u
U2Vzc2lvbklEIl07CiAgICAgICAgIE5TRGljdGlvbmFyeSAqcHJvcGVydHlEaWN0aW9uYXJ5ID0g
W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdDpzZXNzaW9uSUQgZm9yS2V5OkAia0NG
VVJMQ29ubmVjdGlvblNvY2tldFN0cmVhbVByb3BlcnRpZXMiXTsKLSAgICAgICAgcmV0dXJuIFtb
TlNVUkxDb25uZWN0aW9uIGFsbG9jXSBfaW5pdFdpdGhSZXF1ZXN0OnJlcXVlc3QgZGVsZWdhdGU6
ZGVsZWdhdGUgdXNlc0NhY2hlOllFUyBtYXhDb250ZW50TGVuZ3RoOjAgc3RhcnRJbW1lZGlhdGVs
eTpOTyBjb25uZWN0aW9uUHJvcGVydGllczpwcm9wZXJ0eURpY3Rpb25hcnldOworICAgICAgICBy
ZXR1cm4gW1tOU1VSTENvbm5lY3Rpb24gYWxsb2NdIF9pbml0V2l0aFJlcXVlc3Q6bnNSZXF1ZXN0
IGRlbGVnYXRlOmRlbGVnYXRlIHVzZXNDYWNoZTpZRVMgbWF4Q29udGVudExlbmd0aDowIHN0YXJ0
SW1tZWRpYXRlbHk6Tk8gY29ubmVjdGlvblByb3BlcnRpZXM6cHJvcGVydHlEaWN0aW9uYXJ5XTsK
ICAgICB9CiAKLSAgICByZXR1cm4gW1tOU1VSTENvbm5lY3Rpb24gYWxsb2NdIGluaXRXaXRoUmVx
dWVzdDpyZXF1ZXN0IGRlbGVnYXRlOmRlbGVnYXRlIHN0YXJ0SW1tZWRpYXRlbHk6Tk9dOworICAg
IHJldHVybiBbW05TVVJMQ29ubmVjdGlvbiBhbGxvY10gaW5pdFdpdGhSZXF1ZXN0Om5zUmVxdWVz
dCBkZWxlZ2F0ZTpkZWxlZ2F0ZSBzdGFydEltbWVkaWF0ZWx5Ok5PXTsKKworI2Vsc2UKKyAgICAv
LyBCdWlsZGluZyBvbiBUaWdlci4gRG9uJ3QgdXNlIFdlYkNvcmUgY3JlZGVudGlhbCBzdG9yYWdl
LCBkb24ndCB0cnkgdG8gZGlzYWJsZSBjb250ZW50IHNuaWZmaW5nLgorICAgIFVOVVNFRF9QQVJB
TShzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSk7CisgICAgcmV0dXJuIFtbTlNVUkxDb25uZWN0
aW9uIGFsbG9jXSBpbml0V2l0aFJlcXVlc3Q6Zmlyc3RSZXF1ZXN0KCkubnNVUkxSZXF1ZXN0KCkg
ZGVsZWdhdGU6ZGVsZWdhdGVdOwogI2VuZGlmCiB9CiAKQEAgLTIwNiw2OSArMjc3LDI0IEBAIGJv
b2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KEZyYW1lKiBmcmFtZSkKICAgICBkLT5tX3Byb3h5LmFk
b3B0TlMod2tDcmVhdGVOU1VSTENvbm5lY3Rpb25EZWxlZ2F0ZVByb3h5KCkpOwogICAgIFtzdGF0
aWNfY2FzdDxXZWJDb3JlTlNVUkxDb25uZWN0aW9uRGVsZWdhdGVQcm94eSo+KGQtPm1fcHJveHku
Z2V0KCkpIHNldERlbGVnYXRlOlJlc291cmNlSGFuZGxlOjpkZWxlZ2F0ZSgpXTsKIAotICAgIGlm
ICgoIWQtPm1fdXNlci5pc0VtcHR5KCkgfHwgIWQtPm1fcGFzcy5pc0VtcHR5KCkpCi0jaWZuZGVm
IEJVSUxESU5HX09OX1RJR0VSCi0gICAgICYmICFkLT5tX3JlcXVlc3QudXJsKCkucHJvdG9jb2xJ
bkhUVFBGYW1pbHkoKSAvLyBPbiBUaWdlciwgYWx3YXlzIHBhc3MgY3JlZGVudGlhbHMgaW4gVVJM
LCBzbyB0aGF0IHRoZXkgZ2V0IHN0b3JlZCBldmVuIGlmIHRoZSByZXF1ZXN0IGdldHMgY2FuY2Vs
bGVkIHJpZ2h0IGF3YXkuCi0jZW5kaWYKLSAgICApIHsKLSAgICAgICAgLy8gQ3JlZGVudGlhbHMg
Zm9yIGZ0cCBjYW4gb25seSBiZSBwYXNzZWQgaW4gVVJMLCB0aGUgY29ubmVjdGlvbjpkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6IGRlbGVnYXRlIGNhbGwgd29uJ3QgYmUgbWFkZS4K
LSAgICAgICAgS1VSTCB1cmxXaXRoQ3JlZGVudGlhbHMoZC0+bV9yZXF1ZXN0LnVybCgpKTsKLSAg
ICAgICAgdXJsV2l0aENyZWRlbnRpYWxzLnNldFVzZXIoZC0+bV91c2VyKTsKLSAgICAgICAgdXJs
V2l0aENyZWRlbnRpYWxzLnNldFBhc3MoZC0+bV9wYXNzKTsKLSAgICAgICAgZC0+bV9yZXF1ZXN0
LnNldFVSTCh1cmxXaXRoQ3JlZGVudGlhbHMpOwotICAgIH0KLQogICAgIGJvb2wgc2hvdWxkVXNl
Q3JlZGVudGlhbFN0b3JhZ2UgPSAhY2xpZW50KCkgfHwgY2xpZW50KCktPnNob3VsZFVzZUNyZWRl
bnRpYWxTdG9yYWdlKHRoaXMpOwogCi0jaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCi0gICAgaWYg
KHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlICYmIGQtPm1fcmVxdWVzdC51cmwoKS5wcm90b2Nv
bEluSFRUUEZhbWlseSgpKSB7Ci0gICAgICAgIGlmIChkLT5tX3VzZXIuaXNFbXB0eSgpICYmIGQt
Pm1fcGFzcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS83MTc0
MDUwPiAtIEZvciBVUkxzIHRoYXQgbWF0Y2ggdGhlIHBhdGhzIG9mIHRob3NlIHByZXZpb3VzbHkg
Y2hhbGxlbmdlZCBmb3IgSFRUUCBCYXNpYyBhdXRoZW50aWNhdGlvbiwgCi0gICAgICAgICAgICAv
LyB0cnkgYW5kIHJldXNlIHRoZSBjcmVkZW50aWFsIHByZWVtcHRpdmVseSwgYXMgYWxsb3dlZCBi
eSBSRkMgMjYxNy4KLSAgICAgICAgICAgIGQtPm1faW5pdGlhbENyZWRlbnRpYWwgPSBDcmVkZW50
aWFsU3RvcmFnZTo6Z2V0KGQtPm1fcmVxdWVzdC51cmwoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgcHJvdGVjdGlvbiBzcGFjZSBrbm93
biBmb3IgdGhlIFVSTCwgdXBkYXRlIHN0b3JlZCBjcmVkZW50aWFscyBiZWZvcmUgc2VuZGluZyBh
IHJlcXVlc3QuCi0gICAgICAgICAgICAvLyBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGltcGxl
bWVudCBsb2dvdXQgYnkgc2VuZGluZyBhbiBYTUxIdHRwUmVxdWVzdCB3aXRoIGtub3duIGluY29y
cmVjdCBjcmVkZW50aWFscywgYW5kIGFib3J0aW5nIGl0IGltbWVkaWF0ZWx5Ci0gICAgICAgICAg
ICAvLyAoc28gdGhhdCBhbiBhdXRoZW50aWNhdGlvbiBkaWFsb2cgZG9lc24ndCBwb3AgdXApLgot
ICAgICAgICAgICAgQ3JlZGVudGlhbFN0b3JhZ2U6OnNldChDcmVkZW50aWFsKGQtPm1fdXNlciwg
ZC0+bV9wYXNzLCBDcmVkZW50aWFsUGVyc2lzdGVuY2VOb25lKSwgZC0+bV9yZXF1ZXN0LnVybCgp
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICAgICAgCi0gICAgaWYgKCFkLT5tX2luaXRpYWxDcmVk
ZW50aWFsLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBEaWdlc3QgYXV0
aGVudGljYXRpb24sIGFuZCBQcm94eS1BdXRob3JpemF0aW9uLgotICAgICAgICBTdHJpbmcgYXV0
aEhlYWRlciA9ICJCYXNpYyAiICsgZW5jb2RlQmFzaWNBdXRob3JpemF0aW9uKGQtPm1faW5pdGlh
bENyZWRlbnRpYWwudXNlcigpLCBkLT5tX2luaXRpYWxDcmVkZW50aWFsLnBhc3N3b3JkKCkpOwot
ICAgICAgICBkLT5tX3JlcXVlc3QuYWRkSFRUUEhlYWRlckZpZWxkKCJBdXRob3JpemF0aW9uIiwg
YXV0aEhlYWRlcik7Ci0gICAgfQotI2VuZGlmCi0KICAgICBpZiAoIVJlc291cmNlSGFuZGxlOjpk
aWRTZW5kQm9keURhdGFEZWxlZ2F0ZUV4aXN0cygpKQotICAgICAgICBhc3NvY2lhdGVTdHJlYW1X
aXRoUmVzb3VyY2VIYW5kbGUoW2QtPm1fcmVxdWVzdC5uc1VSTFJlcXVlc3QoKSBIVFRQQm9keVN0
cmVhbV0sIHRoaXMpOworICAgICAgICBhc3NvY2lhdGVTdHJlYW1XaXRoUmVzb3VyY2VIYW5kbGUo
W2ZpcnN0UmVxdWVzdCgpLm5zVVJMUmVxdWVzdCgpIEhUVFBCb2R5U3RyZWFtXSwgdGhpcyk7CiAK
ICNpZmRlZiBCVUlMRElOR19PTl9USUdFUgogICAgIC8vIEEgY29uZGl0aW9uYWwgcmVxdWVzdCBz
ZW50IGJ5IFdlYkNvcmUgKGUuZy4gdG8gdXBkYXRlIGFwcGNhY2hlKSBjYW4gYmUgZm9yIGEgcmVz
b3VyY2UgdGhhdCBpcyBub3QgY2FjaGVhYmxlIGJ5IE5TVVJMQ29ubmVjdGlvbiwKICAgICAvLyB3
aGljaCBjYW4gZ2V0IGNvbmZ1c2VkIGFuZCBmYWlsIHRvIGxvYWQgaXQgaW4gdGhpcyBjYXNlLgot
ICAgIGlmIChkLT5tX3JlcXVlc3QuaXNDb25kaXRpb25hbCgpKQotICAgICAgICBkLT5tX3JlcXVl
c3Quc2V0Q2FjaGVQb2xpY3koUmVsb2FkSWdub3JpbmdDYWNoZURhdGEpOworICAgIGlmIChmaXJz
dFJlcXVlc3QoKS5pc0NvbmRpdGlvbmFsKCkpCisgICAgICAgIGZpcnN0UmVxdWVzdCgpLnNldENh
Y2hlUG9saWN5KFJlbG9hZElnbm9yaW5nQ2FjaGVEYXRhKTsKICNlbmRpZgogCiAgICAgZC0+bV9u
ZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyA9IGZyYW1lLT5zZXR0aW5ncygpICYmIGZyYW1lLT5zZXR0
aW5ncygpLT5uZWVkc1NpdGVTcGVjaWZpY1F1aXJrcygpOwogCi0gICAgLy8gSWYgYSBVUkwgYWxy
ZWFkeSBoYXMgY29va2llcywgdGhlbiB3ZSdsbCByZWxheCB0aGUgM3JkIHBhcnR5IGNvb2tpZSBw
b2xpY3kgYW5kIGFjY2VwdCBuZXcgY29va2llcy4KLSAgICBOU0hUVFBDb29raWVTdG9yYWdlICpz
aGFyZWRTdG9yYWdlID0gW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3Jh
Z2VdOwotICAgIGlmIChbc2hhcmVkU3RvcmFnZSBjb29raWVBY2NlcHRQb2xpY3ldID09IE5TSFRU
UENvb2tpZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluCi0gICAgICAgICYm
IFtbc2hhcmVkU3RvcmFnZSBjb29raWVzRm9yVVJMOmQtPm1fcmVxdWVzdC51cmwoKV0gY291bnRd
KQotICAgICAgICBkLT5tX3JlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoZC0+bV9yZXF1
ZXN0LnVybCgpKTsKLQotICAgIE5TVVJMQ29ubmVjdGlvbiAqY29ubmVjdGlvbjsKLSAgICAKLSAg
ICBpZiAoZC0+bV9zaG91bGRDb250ZW50U25pZmYgfHwgZnJhbWUtPnNldHRpbmdzKCktPmxvY2Fs
RmlsZUNvbnRlbnRTbmlmZmluZ0VuYWJsZWQoKSkKLSAgICAgICAgY29ubmVjdGlvbiA9IGNyZWF0
ZU5TVVJMQ29ubmVjdGlvbihkLT5tX3JlcXVlc3QubnNVUkxSZXF1ZXN0KCksIGQtPm1fcHJveHku
Z2V0KCksIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
TlNNdXRhYmxlVVJMUmVxdWVzdCAqcmVxdWVzdCA9IFtkLT5tX3JlcXVlc3QubnNVUkxSZXF1ZXN0
KCkgbXV0YWJsZUNvcHldOwotICAgICAgICB3a1NldE5TVVJMUmVxdWVzdFNob3VsZENvbnRlbnRT
bmlmZihyZXF1ZXN0LCBOTyk7Ci0gICAgICAgIGNvbm5lY3Rpb24gPSBjcmVhdGVOU1VSTENvbm5l
Y3Rpb24ocmVxdWVzdCwgZC0+bV9wcm94eS5nZXQoKSwgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3Jh
Z2UpOwotICAgICAgICBbcmVxdWVzdCByZWxlYXNlXTsKLSAgICB9CisgICAgTlNVUkxDb25uZWN0
aW9uICpjb25uZWN0aW9uID0gY3JlYXRlTlNVUkxDb25uZWN0aW9uKAorICAgICAgICBkLT5tX3By
b3h5LmdldCgpLAorICAgICAgICBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwKKyAgICAgICAg
ZC0+bV9zaG91bGRDb250ZW50U25pZmYgfHwgZnJhbWUtPnNldHRpbmdzKCktPmxvY2FsRmlsZUNv
bnRlbnRTbmlmZmluZ0VuYWJsZWQoKSk7CiAKICNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKICAg
ICBib29sIHNjaGVkdWxlZCA9IGZhbHNlOwpAQCAtMjk0LDcgKzMyMCw3IEBAIGJvb2wgUmVzb3Vy
Y2VIYW5kbGU6OnN0YXJ0KEZyYW1lKiBmcmFtZSkKICAgICBpc0luaXRpYWxpemluZ0Nvbm5lY3Rp
b24gPSBOTzsKICNlbmRpZgogCi0gICAgTE9HKE5ldHdvcmssICJIYW5kbGUgJXAgc3RhcnRpbmcg
Y29ubmVjdGlvbiAlcCBmb3IgJUAiLCB0aGlzLCBjb25uZWN0aW9uLCBkLT5tX3JlcXVlc3QubnNV
UkxSZXF1ZXN0KCkpOworICAgIExPRyhOZXR3b3JrLCAiSGFuZGxlICVwIHN0YXJ0aW5nIGNvbm5l
Y3Rpb24gJXAgZm9yICVAIiwgdGhpcywgY29ubmVjdGlvbiwgZmlyc3RSZXF1ZXN0KCkubnNVUkxS
ZXF1ZXN0KCkpOwogICAgIAogICAgIGQtPm1fY29ubmVjdGlvbiA9IGNvbm5lY3Rpb247CiAKQEAg
LTMyMSw3ICszNDcsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpjYW5jZWwoKQogICAgICAgICBb
W2QtPm1fY3VycmVudE1hY0NoYWxsZW5nZSBzZW5kZXJdIGNhbmNlbEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlOmQtPm1fY3VycmVudE1hY0NoYWxsZW5nZV07CiAKICAgICBpZiAoIVJlc291cmNlSGFu
ZGxlOjpkaWRTZW5kQm9keURhdGFEZWxlZ2F0ZUV4aXN0cygpKQotICAgICAgICBkaXNhc3NvY2lh
dGVTdHJlYW1XaXRoUmVzb3VyY2VIYW5kbGUoW2QtPm1fcmVxdWVzdC5uc1VSTFJlcXVlc3QoKSBI
VFRQQm9keVN0cmVhbV0pOworICAgICAgICBkaXNhc3NvY2lhdGVTdHJlYW1XaXRoUmVzb3VyY2VI
YW5kbGUoW2ZpcnN0UmVxdWVzdCgpLm5zVVJMUmVxdWVzdCgpIEhUVFBCb2R5U3RyZWFtXSk7CiAg
ICAgW2QtPm1fY29ubmVjdGlvbi5nZXQoKSBjYW5jZWxdOwogfQogCkBAIC00MzUsNDMgKzQ2MSw1
NSBAQCBib29sIFJlc291cmNlSGFuZGxlOjp3aWxsTG9hZEZyb21DYWNoZShSCiAjZW5kaWYKIH0K
IAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRp
YWxzLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZl
Y3RvcjxjaGFyPiYgZGF0YSwgRnJhbWUqKQordm9pZCBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291
cmNlU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENy
ZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSwgRnJhbWUqIGZyYW1lKQog
eworICAgIExPRyhOZXR3b3JrLCAiUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9u
b3VzbHk6JUAgYWxsb3dTdG9yZWRDcmVkZW50aWFsczoldSIsIHJlcXVlc3QubnNVUkxSZXF1ZXN0
KCksIHN0b3JlZENyZWRlbnRpYWxzKTsKKwogICAgIE5TRXJyb3IgKm5zRXJyb3IgPSBuaWw7Ci0g
ICAgCiAgICAgTlNVUkxSZXNwb25zZSAqbnNVUkxSZXNwb25zZSA9IG5pbDsKICAgICBOU0RhdGEg
KnJlc3VsdCA9IG5pbDsKIAogICAgIEFTU0VSVCghcmVxdWVzdC5pc0VtcHR5KCkpOwogICAgIAot
ICAgIE5TTXV0YWJsZVVSTFJlcXVlc3QgKm11dGFibGVSZXF1ZXN0ID0gbmlsOwotICAgIGlmICgh
c2hvdWxkQ29udGVudFNuaWZmVVJMKHJlcXVlc3QudXJsKCkpKSB7Ci0gICAgICAgIG11dGFibGVS
ZXF1ZXN0ID0gW1tyZXF1ZXN0Lm5zVVJMUmVxdWVzdCgpIG11dGFibGVDb3B5XSBhdXRvcmVsZWFz
ZV07Ci0gICAgICAgIHdrU2V0TlNVUkxSZXF1ZXN0U2hvdWxkQ29udGVudFNuaWZmKG11dGFibGVS
ZXF1ZXN0LCBOTyk7Ci0gICAgfSAKKyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICBPd25Q
dHI8V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50PiBjbGllbnQgPSBXZWJDb3JlU3luY2hy
b25vdXNMb2FkZXJDbGllbnQ6OmNyZWF0ZSgpOworICAgIGNsaWVudC0+c2V0QWxsb3dTdG9yZWRD
cmVkZW50aWFscyhzdG9yZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzKTsK
IAotICAgIC8vIElmIGEgVVJMIGFscmVhZHkgaGFzIGNvb2tpZXMsIHRoZW4gd2UnbGwgaWdub3Jl
IHRoZSAzcmQgcGFydHkgY29va2llIHBvbGljeSBhbmQgYWNjZXB0IG5ldyBjb29raWVzLgotICAg
IE5TSFRUUENvb2tpZVN0b3JhZ2UgKnNoYXJlZFN0b3JhZ2UgPSBbTlNIVFRQQ29va2llU3RvcmFn
ZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV07Ci0gICAgaWYgKFtzaGFyZWRTdG9yYWdlIGNvb2tp
ZUFjY2VwdFBvbGljeV0gPT0gTlNIVFRQQ29va2llQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9j
dW1lbnREb21haW4KLSAgICAgICAgJiYgW1tzaGFyZWRTdG9yYWdlIGNvb2tpZXNGb3JVUkw6cmVx
dWVzdC51cmwoKV0gY291bnRdKSB7Ci0gICAgICAgIGlmICghbXV0YWJsZVJlcXVlc3QpCi0gICAg
ICAgICAgICBtdXRhYmxlUmVxdWVzdCA9IFtbcmVxdWVzdC5uc1VSTFJlcXVlc3QoKSBtdXRhYmxl
Q29weV0gYXV0b3JlbGVhc2VdOwotICAgICAgICBbbXV0YWJsZVJlcXVlc3Qgc2V0TWFpbkRvY3Vt
ZW50VVJMOlttdXRhYmxlUmVxdWVzdCBVUkxdXTsKKyAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+
IGhhbmRsZSA9IGFkb3B0UmVmKG5ldyBSZXNvdXJjZUhhbmRsZShyZXF1ZXN0LCBjbGllbnQuZ2V0
KCksIGZhbHNlIC8qZGVmZXJzTG9hZGluZyovLCB0cnVlIC8qc2hvdWxkQ29udGVudFNuaWZmKi8p
KTsKKworICAgIGlmIChoYW5kbGUtPmQtPm1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgIT0gTm9GYWls
dXJlKSB7CisgICAgICAgIGVycm9yID0gZnJhbWUtPmxvYWRlcigpLT5ibG9ja2VkRXJyb3IocmVx
dWVzdCk7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBOU1VSTENvbm5lY3Rpb24gKmNv
bm5lY3Rpb24gPSBoYW5kbGUtPmNyZWF0ZU5TVVJMQ29ubmVjdGlvbigKKyAgICAgICAgaGFuZGxl
LT5kZWxlZ2F0ZSgpLCAvLyBBIHN5bmNocm9ub3VzIHJlcXVlc3QgY2Fubm90IHR1cm4gaW50byBh
IGRvd25sb2FkLCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHByb3h5IHRoZSBkZWxlZ2F0ZS4KKyAg
ICAgICAgc3RvcmVkQ3JlZGVudGlhbHMgPT0gQWxsb3dTdG9yZWRDcmVkZW50aWFscywKKyAgICAg
ICAgaGFuZGxlLT5zaG91bGRDb250ZW50U25pZmYoKSB8fCBmcmFtZS0+c2V0dGluZ3MoKS0+bG9j
YWxGaWxlQ29udGVudFNuaWZmaW5nRW5hYmxlZCgpKTsKKworICAgIFtjb25uZWN0aW9uIHNjaGVk
dWxlSW5SdW5Mb29wOltOU1J1bkxvb3AgY3VycmVudFJ1bkxvb3BdIGZvck1vZGU6V2ViQ29yZVN5
bmNocm9ub3VzTG9hZGVyUnVuTG9vcE1vZGVdOworICAgIFtjb25uZWN0aW9uIHN0YXJ0XTsKICAg
ICAKLSAgICBOU1VSTFJlcXVlc3QgKm5zUmVxdWVzdCA9IG11dGFibGVSZXF1ZXN0ID8gbXV0YWJs
ZVJlcXVlc3QgOiByZXF1ZXN0Lm5zVVJMUmVxdWVzdCgpOwotICAgICAgICAgICAgCi0gICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIHdoaWxlICghY2xpZW50LT5pc0RvbmUoKSkK
KyAgICAgICAgW1tOU1J1bkxvb3AgY3VycmVudFJ1bkxvb3BdIHJ1bk1vZGU6V2ViQ29yZVN5bmNo
cm9ub3VzTG9hZGVyUnVuTG9vcE1vZGUgYmVmb3JlRGF0ZTpbTlNEYXRlIGRpc3RhbnRGdXR1cmVd
XTsKKworICAgIHJlc3VsdCA9IGNsaWVudC0+ZGF0YSgpOworICAgIG5zVVJMUmVzcG9uc2UgPSBj
bGllbnQtPnJlc3BvbnNlKCk7CisgICAgbnNFcnJvciA9IGNsaWVudC0+ZXJyb3IoKTsKICAgICAK
LSNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKLSAgICByZXN1bHQgPSBbV2ViQ29yZVN5bmNocm9u
b3VzTG9hZGVyIGxvYWRSZXF1ZXN0Om5zUmVxdWVzdCBhbGxvd1N0b3JlZENyZWRlbnRpYWxzOihz
dG9yZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzKSByZXR1cm5pbmdSZXNw
b25zZTombnNVUkxSZXNwb25zZSBlcnJvcjombnNFcnJvcl07CisgICAgW2Nvbm5lY3Rpb24gY2Fu
Y2VsXTsKKyAgICBbY29ubmVjdGlvbiByZWxlYXNlXTsKKwogI2Vsc2UKICAgICBVTlVTRURfUEFS
QU0oc3RvcmVkQ3JlZGVudGlhbHMpOworICAgIE5TVVJMUmVxdWVzdCAqbnNSZXF1ZXN0ID0gbXV0
YWJsZVJlcXVlc3QgPyBtdXRhYmxlUmVxdWVzdCA6IHJlcXVlc3QubnNVUkxSZXF1ZXN0KCk7CisK
KyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgcmVzdWx0ID0gW05TVVJMQ29u
bmVjdGlvbiBzZW5kU3luY2hyb25vdXNSZXF1ZXN0Om5zUmVxdWVzdCByZXR1cm5pbmdSZXNwb25z
ZTombnNVUkxSZXNwb25zZSBlcnJvcjombnNFcnJvcl07Ci0jZW5kaWYKICAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TOworI2VuZGlmCiAKLSAgICBpZiAobnNFcnJvciA9PSBuaWwpCisgICAg
aWYgKCFuc0Vycm9yKQogICAgICAgICByZXNwb25zZSA9IG5zVVJMUmVzcG9uc2U7CiAgICAgZWxz
ZSB7CiAgICAgICAgIHJlc3BvbnNlID0gUmVzb3VyY2VSZXNwb25zZShyZXF1ZXN0LnVybCgpLCBT
dHJpbmcoKSwgMCwgU3RyaW5nKCksIFN0cmluZygpKTsKQEAgLTU0Miw3ICs1ODAsNyBAQCB2b2lk
IFJlc291cmNlSGFuZGxlOjpkaWRSZWNlaXZlQXV0aGVudGljCiAgICAgICAgICAgICBBU1NFUlQo
Y3JlZGVudGlhbC5wZXJzaXN0ZW5jZSgpID09IENyZWRlbnRpYWxQZXJzaXN0ZW5jZU5vbmUpOwog
ICAgICAgICAgICAgaWYgKGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9uc2UoKS5odHRwU3RhdHVzQ29k
ZSgpID09IDQwMSkgewogICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBjcmVkZW50aWFsIGJh
Y2ssIHBvc3NpYmx5IGFkZGluZyBpdCBhcyBhIGRlZmF1bHQgZm9yIHRoaXMgZGlyZWN0b3J5Lgot
ICAgICAgICAgICAgICAgIENyZWRlbnRpYWxTdG9yYWdlOjpzZXQoY3JlZGVudGlhbCwgY2hhbGxl
bmdlLnByb3RlY3Rpb25TcGFjZSgpLCBkLT5tX3JlcXVlc3QudXJsKCkpOworICAgICAgICAgICAg
ICAgIENyZWRlbnRpYWxTdG9yYWdlOjpzZXQoY3JlZGVudGlhbCwgY2hhbGxlbmdlLnByb3RlY3Rp
b25TcGFjZSgpLCBmaXJzdFJlcXVlc3QoKS51cmwoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBbY2hhbGxlbmdlLnNlbmRlcigpIHVzZUNyZWRlbnRpYWw6bWFjKGNyZWRlbnRpYWwpIGZv
ckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOm1hYyhjaGFsbGVuZ2UpXTsKICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTYwNCw3ICs2NDIsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENy
ZWRlbnRpYWwoCiAgICAgICAgIENyZWRlbnRpYWwgd2ViQ3JlZGVudGlhbChjcmVkZW50aWFsLCBD
cmVkZW50aWFsUGVyc2lzdGVuY2VOb25lKTsKICAgICAgICAgS1VSTCB1cmxUb1N0b3JlOwogICAg
ICAgICBpZiAoY2hhbGxlbmdlLmZhaWx1cmVSZXNwb25zZSgpLmh0dHBTdGF0dXNDb2RlKCkgPT0g
NDAxKQotICAgICAgICAgICAgdXJsVG9TdG9yZSA9IGQtPm1fcmVxdWVzdC51cmwoKTsKKyAgICAg
ICAgICAgIHVybFRvU3RvcmUgPSBmaXJzdFJlcXVlc3QoKS51cmwoKTsKICAgICAgICAgQ3JlZGVu
dGlhbFN0b3JhZ2U6OnNldCh3ZWJDcmVkZW50aWFsLCBjb3JlKFtkLT5tX2N1cnJlbnRNYWNDaGFs
bGVuZ2UgcHJvdGVjdGlvblNwYWNlXSksIHVybFRvU3RvcmUpOwogICAgICAgICBbW2QtPm1fY3Vy
cmVudE1hY0NoYWxsZW5nZSBzZW5kZXJdIHVzZUNyZWRlbnRpYWw6bWFjKHdlYkNyZWRlbnRpYWwp
IGZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOmQtPm1fY3VycmVudE1hY0NoYWxsZW5nZV07CiAg
ICAgfSBlbHNlCkBAIC02NzksMTEgKzcxNywxMSBAQCAtIChOU1VSTFJlcXVlc3QgKiljb25uZWN0
aW9uOihOU1VSTENvbm5lCiAgICAgICAgICAgICBOU011dGFibGVVUkxSZXF1ZXN0ICptdXRhYmxl
UmVxdWVzdCA9IFtuZXdSZXF1ZXN0IG11dGFibGVDb3B5XTsKICAgICAgICAgICAgIFttdXRhYmxl
UmVxdWVzdCBzZXRIVFRQTWV0aG9kOmxhc3RIVFRQTWV0aG9kXTsKICAgICAKLSAgICAgICAgICAg
IEZvcm1EYXRhKiBib2R5ID0gbV9oYW5kbGUtPnJlcXVlc3QoKS5odHRwQm9keSgpOworICAgICAg
ICAgICAgRm9ybURhdGEqIGJvZHkgPSBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkuaHR0cEJvZHko
KTsKICAgICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UobGFzdEhUVFBNZXRob2QsICJH
RVQiKSAmJiBib2R5ICYmICFib2R5LT5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgV2ViQ29y
ZTo6c2V0SFRUUEJvZHkobXV0YWJsZVJlcXVlc3QsIGJvZHkpOwogCi0gICAgICAgICAgICBTdHJp
bmcgb3JpZ2luYWxDb250ZW50VHlwZSA9IG1faGFuZGxlLT5yZXF1ZXN0KCkuaHR0cENvbnRlbnRU
eXBlKCk7CisgICAgICAgICAgICBTdHJpbmcgb3JpZ2luYWxDb250ZW50VHlwZSA9IG1faGFuZGxl
LT5maXJzdFJlcXVlc3QoKS5odHRwQ29udGVudFR5cGUoKTsKICAgICAgICAgICAgIGlmICghb3Jp
Z2luYWxDb250ZW50VHlwZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgW211dGFibGVSZXF1
ZXN0IHNldFZhbHVlOm9yaWdpbmFsQ29udGVudFR5cGUgZm9ySFRUUEhlYWRlckZpZWxkOkAiQ29u
dGVudC1UeXBlIl07CiAKQEAgLTc3OSw3ICs4MTcsNyBAQCAtICh2b2lkKWNvbm5lY3Rpb246KE5T
VVJMQ29ubmVjdGlvbiAqKWNvCiAgICAgaWYgKHN0YXR1c0NvZGUgIT0gMzA0KQogICAgICAgICBb
ciBhZGp1c3RNSU1FVHlwZUlmTmVjZXNzYXJ5XTsKIAotICAgIGlmIChbbV9oYW5kbGUtPnJlcXVl
c3QoKS5uc1VSTFJlcXVlc3QoKSBfcHJvcGVydHlGb3JLZXk6QCJGb3JjZUhUTUxNSU1FVHlwZSJd
KQorICAgIGlmIChbbV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLm5zVVJMUmVxdWVzdCgpIF9wcm9w
ZXJ0eUZvcktleTpAIkZvcmNlSFRNTE1JTUVUeXBlIl0pCiAgICAgICAgIFtyIF9zZXRNSU1FVHlw
ZTpAInRleHQvaHRtbCJdOwogCiAjaWYgRU5BQkxFKFdNTCkKQEAgLTg1NSw3ICs4OTMsNyBAQCAt
ICh2b2lkKWNvbm5lY3Rpb25EaWRGaW5pc2hMb2FkaW5nOihOU1VSCiAgICAgQ2FsbGJhY2tHdWFy
ZCBndWFyZDsKIAogICAgIGlmICghUmVzb3VyY2VIYW5kbGU6OmRpZFNlbmRCb2R5RGF0YURlbGVn
YXRlRXhpc3RzKCkpCi0gICAgICAgIGRpc2Fzc29jaWF0ZVN0cmVhbVdpdGhSZXNvdXJjZUhhbmRs
ZShbbV9oYW5kbGUtPnJlcXVlc3QoKS5uc1VSTFJlcXVlc3QoKSBIVFRQQm9keVN0cmVhbV0pOwor
ICAgICAgICBkaXNhc3NvY2lhdGVTdHJlYW1XaXRoUmVzb3VyY2VIYW5kbGUoW21faGFuZGxlLT5m
aXJzdFJlcXVlc3QoKS5uc1VSTFJlcXVlc3QoKSBIVFRQQm9keVN0cmVhbV0pOwogCiAgICAgbV9o
YW5kbGUtPmNsaWVudCgpLT5kaWRGaW5pc2hMb2FkaW5nKG1faGFuZGxlKTsKIH0KQEAgLTg3MSw3
ICs5MDksNyBAQCAtICh2b2lkKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvCiAgICAg
Q2FsbGJhY2tHdWFyZCBndWFyZDsKIAogICAgIGlmICghUmVzb3VyY2VIYW5kbGU6OmRpZFNlbmRC
b2R5RGF0YURlbGVnYXRlRXhpc3RzKCkpCi0gICAgICAgIGRpc2Fzc29jaWF0ZVN0cmVhbVdpdGhS
ZXNvdXJjZUhhbmRsZShbbV9oYW5kbGUtPnJlcXVlc3QoKS5uc1VSTFJlcXVlc3QoKSBIVFRQQm9k
eVN0cmVhbV0pOworICAgICAgICBkaXNhc3NvY2lhdGVTdHJlYW1XaXRoUmVzb3VyY2VIYW5kbGUo
W21faGFuZGxlLT5maXJzdFJlcXVlc3QoKS5uc1VSTFJlcXVlc3QoKSBIVFRQQm9keVN0cmVhbV0p
OwogCiAgICAgbV9oYW5kbGUtPmNsaWVudCgpLT5kaWRGYWlsKG1faGFuZGxlLCBlcnJvcik7CiB9
CkBAIC05NDcsMjIwICs5ODUsNjkgQEAgLSAoTlNDYWNoZWRVUkxSZXNwb25zZSAqKWNvbm5lY3Rp
b246KE5TVQogCiAjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCiAKLUBpbXBsZW1lbnRhdGlvbiBX
ZWJDb3JlU3luY2hyb25vdXNMb2FkZXIKLQotLSAoQk9PTClfaXNEb25lCi17Ci0gICAgcmV0dXJu
IG1faXNEb25lOwotfQotCi0tICh2b2lkKWRlYWxsb2MKK1dlYkNvcmVTeW5jaHJvbm91c0xvYWRl
ckNsaWVudDo6fldlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudCgpCiB7Ci0gICAgW21fdXJs
IHJlbGVhc2VdOwotICAgIFttX3VzZXIgcmVsZWFzZV07Ci0gICAgW21fcGFzcyByZWxlYXNlXTsK
ICAgICBbbV9yZXNwb25zZSByZWxlYXNlXTsKICAgICBbbV9kYXRhIHJlbGVhc2VdOwogICAgIFtt
X2Vycm9yIHJlbGVhc2VdOwotICAgIAotICAgIFtzdXBlciBkZWFsbG9jXTsKIH0KIAotLSAoTlNV
UkxSZXF1ZXN0ICopY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlvbiB3aWxs
U2VuZFJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKW5ld1JlcXVlc3QgcmVkaXJlY3RSZXNwb25zZToo
TlNVUkxSZXNwb25zZSAqKXJlZGlyZWN0UmVzcG9uc2UKK3ZvaWQgV2ViQ29yZVN5bmNocm9ub3Vz
TG9hZGVyQ2xpZW50Ojp3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiAvKnJlZGlyZWN0
UmVzcG9uc2UqLykKIHsKLSAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7Ci0KLSAgICBMT0co
TmV0d29yaywgIldlYkNvcmVTeW5jaHJvbm91c0xvYWRlciBkZWxlZ2F0ZSBjb25uZWN0aW9uOiVw
IHdpbGxTZW5kUmVxdWVzdDolQCByZWRpcmVjdFJlc3BvbnNlOiVwIiwgY29ubmVjdGlvbiwgW25l
d1JlcXVlc3QgZGVzY3JpcHRpb25dLCByZWRpcmVjdFJlc3BvbnNlKTsKLQogICAgIC8vIEZJWE1F
OiBUaGlzIG5lZWRzIHRvIGJlIGZpeGVkIHRvIGZvbGxvdyB0aGUgcmVkaXJlY3QgY29ycmVjdGx5
IGV2ZW4gZm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cy4KLSAgICBpZiAobV91cmwgJiYgIXByb3Rv
Y29sSG9zdEFuZFBvcnRBcmVFcXVhbChtX3VybCwgW25ld1JlcXVlc3QgVVJMXSkpIHsKKyAgICBp
ZiAoIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVy
bCgpLCByZXF1ZXN0LnVybCgpKSkgeworICAgICAgICBBU1NFUlQoIW1fZXJyb3IpOwogICAgICAg
ICBtX2Vycm9yID0gW1tOU0Vycm9yIGFsbG9jXSBpbml0V2l0aERvbWFpbjpOU1VSTEVycm9yRG9t
YWluIGNvZGU6TlNVUkxFcnJvckJhZFNlcnZlclJlc3BvbnNlIHVzZXJJbmZvOm5pbF07Ci0gICAg
ICAgIG1faXNEb25lID0gWUVTOwotICAgICAgICByZXR1cm4gbmlsOwotICAgIH0KLQotICAgIE5T
VVJMICpjb3B5ID0gW1tuZXdSZXF1ZXN0IFVSTF0gY29weV07Ci0gICAgW21fdXJsIHJlbGVhc2Vd
OwotICAgIG1fdXJsID0gY29weTsKLQotICAgIGlmIChyZWRpcmVjdFJlc3BvbnNlKSB7Ci0gICAg
ICAgIC8vIFRha2UgdXNlci9wYXNzIG91dCBvZiB0aGUgVVJMLgotICAgICAgICBbbV91c2VyIHJl
bGVhc2VdOwotICAgICAgICBbbV9wYXNzIHJlbGVhc2VdOwotICAgICAgICBtX3VzZXIgPSBbW21f
dXJsIHVzZXJdIGNvcHldOwotICAgICAgICBtX3Bhc3MgPSBbW21fdXJsIHBhc3N3b3JkXSBjb3B5
XTsKLSAgICAgICAgaWYgKG1fdXNlciB8fCBtX3Bhc3MpIHsKLSAgICAgICAgICAgIFJlc291cmNl
UmVxdWVzdCByZXF1ZXN0V2l0aG91dENyZWRlbnRpYWxzID0gbmV3UmVxdWVzdDsKLSAgICAgICAg
ICAgIHJlcXVlc3RXaXRob3V0Q3JlZGVudGlhbHMucmVtb3ZlQ3JlZGVudGlhbHMoKTsKLSAgICAg
ICAgICAgIHJldHVybiByZXF1ZXN0V2l0aG91dENyZWRlbnRpYWxzLm5zVVJMUmVxdWVzdCgpOwot
ICAgICAgICB9CisgICAgICAgIG1faXNEb25lID0gdHJ1ZTsKKyAgICAgICAgcmVxdWVzdCA9IDA7
CisgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICByZXR1cm4gbmV3UmVxdWVzdDsKIH0KIAot
LSAoQk9PTCljb25uZWN0aW9uU2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2U6KE5TVVJMQ29ubmVj
dGlvbiAqKWNvbm5lY3Rpb24KK2Jvb2wgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50Ojpz
aG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShSZXNvdXJjZUhhbmRsZSopCiB7Ci0gICAgVU5VU0VE
X1BBUkFNKGNvbm5lY3Rpb24pOwotCi0gICAgTE9HKE5ldHdvcmssICJXZWJDb3JlU3luY2hyb25v
dXNMb2FkZXIgZGVsZWdhdGUgY29ubmVjdGlvblNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlOiVw
IiwgY29ubmVjdGlvbik7Ci0KICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFzayBGcmFtZUxvYWRl
ckNsaWVudCB3aGV0aGVyIHVzaW5nIGNyZWRlbnRpYWwgc3RvcmFnZSBpcyBnbG9iYWxseSBmb3Ji
aWRkZW4uCiAgICAgcmV0dXJuIG1fYWxsb3dTdG9yZWRDcmVkZW50aWFsczsKIH0KIAotLSAodm9p
ZCljb25uZWN0aW9uOihOU1VSTENvbm5lY3Rpb24gKiljb25uZWN0aW9uIGRpZFJlY2VpdmVBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZTooTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqKWNoYWxs
ZW5nZQorI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCitib29sIFdlYkNv
cmVTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rp
b25TcGFjZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFByb3RlY3Rpb25TcGFjZSYpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pOwotCi0gICAgTE9HKE5ldHdvcmssICJXZWJDb3JlU3lu
Y2hyb25vdXNMb2FkZXIgZGVsZWdhdGUgY29ubmVjdGlvbjolcCBkaWRSZWNlaXZlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2U6JXAiLCBjb25uZWN0aW9uLCBjaGFsbGVuZ2UpOworICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgYXNrIEZyYW1lTG9hZGVyQ2xpZW50LgorICAgIHJldHVybiB0cnVlOworfQor
I2VuZGlmCiAKLSAgICBpZiAobV91c2VyICYmIG1fcGFzcykgewotICAgICAgICBOU1VSTENyZWRl
bnRpYWwgKmNyZWRlbnRpYWwgPSBbW05TVVJMQ3JlZGVudGlhbCBhbGxvY10gaW5pdFdpdGhVc2Vy
Om1fdXNlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkOm1fcGFzcwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNpc3RlbmNlOk5T
VVJMQ3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZV07Ci0gICAgICAgIEtVUkwgdXJsVG9TdG9yZTsK
LSAgICAgICAgaWYgKFtbY2hhbGxlbmdlIGZhaWx1cmVSZXNwb25zZV0gaXNLaW5kT2ZDbGFzczpb
TlNIVFRQVVJMUmVzcG9uc2UgY2xhc3NdXSAmJiBbKE5TSFRUUFVSTFJlc3BvbnNlKilbY2hhbGxl
bmdlIGZhaWx1cmVSZXNwb25zZV0gc3RhdHVzQ29kZV0gPT0gNDAxKQotICAgICAgICAgICAgdXJs
VG9TdG9yZSA9IG1fdXJsOwotICAgICAgICBDcmVkZW50aWFsU3RvcmFnZTo6c2V0KGNvcmUoY3Jl
ZGVudGlhbCksIGNvcmUoW2NoYWxsZW5nZSBwcm90ZWN0aW9uU3BhY2VdKSwgdXJsVG9TdG9yZSk7
Ci0gICAgICAgIAotICAgICAgICBbW2NoYWxsZW5nZSBzZW5kZXJdIHVzZUNyZWRlbnRpYWw6Y3Jl
ZGVudGlhbCBmb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTpjaGFsbGVuZ2VdOwotICAgICAgICBb
Y3JlZGVudGlhbCByZWxlYXNlXTsKLSAgICAgICAgW21fdXNlciByZWxlYXNlXTsKLSAgICAgICAg
W21fcGFzcyByZWxlYXNlXTsKLSAgICAgICAgbV91c2VyID0gMDsKLSAgICAgICAgbV9wYXNzID0g
MDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoW2NoYWxsZW5nZSBwcmV2aW91c0Zh
aWx1cmVDb3VudF0gPT0gMCAmJiBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHMpIHsKLSAgICAgICAg
Q3JlZGVudGlhbCBjcmVkZW50aWFsID0gQ3JlZGVudGlhbFN0b3JhZ2U6OmdldChjb3JlKFtjaGFs
bGVuZ2UgcHJvdGVjdGlvblNwYWNlXSkpOwotICAgICAgICBpZiAoIWNyZWRlbnRpYWwuaXNFbXB0
eSgpICYmIGNyZWRlbnRpYWwgIT0gbV9pbml0aWFsQ3JlZGVudGlhbCkgewotICAgICAgICAgICAg
QVNTRVJUKGNyZWRlbnRpYWwucGVyc2lzdGVuY2UoKSA9PSBDcmVkZW50aWFsUGVyc2lzdGVuY2VO
b25lKTsKLSAgICAgICAgICAgIGlmIChbW2NoYWxsZW5nZSBmYWlsdXJlUmVzcG9uc2VdIGlzS2lu
ZE9mQ2xhc3M6W05TSFRUUFVSTFJlc3BvbnNlIGNsYXNzXV0gJiYgWyhOU0hUVFBVUkxSZXNwb25z
ZSAqKVtjaGFsbGVuZ2UgZmFpbHVyZVJlc3BvbnNlXSBzdGF0dXNDb2RlXSA9PSA0MDEpIHsKLSAg
ICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgY3JlZGVudGlhbCBiYWNrLCBwb3NzaWJseSBhZGRp
bmcgaXQgYXMgYSBkZWZhdWx0IGZvciB0aGlzIGRpcmVjdG9yeS4KLSAgICAgICAgICAgICAgICBD
cmVkZW50aWFsU3RvcmFnZTo6c2V0KGNyZWRlbnRpYWwsIGNvcmUoW2NoYWxsZW5nZSBwcm90ZWN0
aW9uU3BhY2VdKSwgbV91cmwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgW1tjaGFsbGVu
Z2Ugc2VuZGVyXSB1c2VDcmVkZW50aWFsOm1hYyhjcmVkZW50aWFsKSBmb3JBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZTpjaGFsbGVuZ2VdOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgfQordm9pZCBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmRpZFJlY2VpdmVBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJiBjaGFsbGVuZ2UpCit7CiAgICAgLy8gRklYTUU6IFRoZSB1c2VyIHNob3VsZCBi
ZSBhc2tlZCBmb3IgY3JlZGVudGlhbHMsIGFzIGluIGFzeW5jIGNhc2UuCi0gICAgW1tjaGFsbGVu
Z2Ugc2VuZGVyXSBjb250aW51ZVdpdGhvdXRDcmVkZW50aWFsRm9yQXV0aGVudGljYXRpb25DaGFs
bGVuZ2U6Y2hhbGxlbmdlXTsKKyAgICBbY2hhbGxlbmdlLnNlbmRlcigpIGNvbnRpbnVlV2l0aG91
dENyZWRlbnRpYWxGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTpjaGFsbGVuZ2UubnNVUkxBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSgpXTsKIH0KIAotLSAodm9pZCljb25uZWN0aW9uOihOU1VSTENv
bm5lY3Rpb24gKiljb25uZWN0aW9uIGRpZFJlY2VpdmVSZXNwb25zZTooTlNVUkxSZXNwb25zZSAq
KXJlc3BvbnNlCit2b2lkIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6ZGlkUmVjZWl2
ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pOwotCi0gICAgTE9HKE5ldHdvcmss
ICJXZWJDb3JlU3luY2hyb25vdXNMb2FkZXIgZGVsZWdhdGUgY29ubmVjdGlvbjolcCBkaWRSZWNl
aXZlUmVzcG9uc2U6JXAgKEhUVFAgc3RhdHVzICVkLCByZXBvcnRlZCBNSU1FVHlwZSAnJXMnKSIs
IGNvbm5lY3Rpb24sIHJlc3BvbnNlLCBbcmVzcG9uc2UgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3RvcihzdGF0dXNDb2RlKV0gPyBbKGlkKXJlc3BvbnNlIHN0YXR1c0NvZGVdIDogMCwgW1tyZXNw
b25zZSBNSU1FVHlwZV0gVVRGOFN0cmluZ10pOwotCi0gICAgTlNVUkxSZXNwb25zZSAqciA9IFty
ZXNwb25zZSBjb3B5XTsKLSAgICAKICAgICBbbV9yZXNwb25zZSByZWxlYXNlXTsKLSAgICBtX3Jl
c3BvbnNlID0gcjsKKyAgICBtX3Jlc3BvbnNlID0gW3Jlc3BvbnNlLm5zVVJMUmVzcG9uc2UoKSBj
b3B5XTsKIH0KIAotLSAodm9pZCljb25uZWN0aW9uOihOU1VSTENvbm5lY3Rpb24gKiljb25uZWN0
aW9uIGRpZFJlY2VpdmVEYXRhOihOU0RhdGEgKilkYXRhCit2b2lkIFdlYkNvcmVTeW5jaHJvbm91
c0xvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFy
KiBkYXRhLCBpbnQgbGVuZ3RoLCBpbnQgLypsZW5ndGhSZWNlaXZlZCovKQogewotICAgIFVOVVNF
RF9QQVJBTShjb25uZWN0aW9uKTsKLQotICAgIExPRyhOZXR3b3JrLCAiV2ViQ29yZVN5bmNocm9u
b3VzTG9hZGVyIGRlbGVnYXRlIGNvbm5lY3Rpb246JXAgZGlkUmVjZWl2ZURhdGE6JXAiLCBjb25u
ZWN0aW9uLCBkYXRhKTsKLQogICAgIGlmICghbV9kYXRhKQogICAgICAgICBtX2RhdGEgPSBbW05T
TXV0YWJsZURhdGEgYWxsb2NdIGluaXRdOwotICAgIAotICAgIFttX2RhdGEgYXBwZW5kRGF0YTpk
YXRhXTsKKyAgICBbbV9kYXRhIGFwcGVuZEJ5dGVzOmRhdGEgbGVuZ3RoOmxlbmd0aF07CiB9CiAK
LS0gKHZvaWQpY29ubmVjdGlvbkRpZEZpbmlzaExvYWRpbmc6KE5TVVJMQ29ubmVjdGlvbiAqKWNv
bm5lY3Rpb24KK3ZvaWQgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpkaWRGaW5pc2hM
b2FkaW5nKFJlc291cmNlSGFuZGxlKikKIHsKLSAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7
Ci0KLSAgICBMT0coTmV0d29yaywgIldlYkNvcmVTeW5jaHJvbm91c0xvYWRlciBkZWxlZ2F0ZSBj
b25uZWN0aW9uRGlkRmluaXNoTG9hZGluZzolcCIsIGNvbm5lY3Rpb24pOwotCi0gICAgbV9pc0Rv
bmUgPSBZRVM7CisgICAgbV9pc0RvbmUgPSB0cnVlOwogfQogCi0tICh2b2lkKWNvbm5lY3Rpb246
KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24gZGlkRmFpbFdpdGhFcnJvcjooTlNFcnJvciAq
KWVycm9yCit2b2lkIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6ZGlkRmFpbChSZXNv
dXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogewotICAgIFVOVVNFRF9Q
QVJBTShjb25uZWN0aW9uKTsKLQotICAgIExPRyhOZXR3b3JrLCAiV2ViQ29yZVN5bmNocm9ub3Vz
TG9hZGVyIGRlbGVnYXRlIGNvbm5lY3Rpb246JXAgZGlkRmFpbFdpdGhFcnJvcjolQCIsIGNvbm5l
Y3Rpb24sIGVycm9yKTsKLQogICAgIEFTU0VSVCghbV9lcnJvcik7Ci0gICAgCi0gICAgbV9lcnJv
ciA9IFtlcnJvciByZXRhaW5dOwotICAgIG1faXNEb25lID0gWUVTOwotfQotCi0tIChOU0RhdGEg
KilfZGF0YQotewotICAgIHJldHVybiBbW21fZGF0YSByZXRhaW5dIGF1dG9yZWxlYXNlXTsKLX0K
LQotLSAoTlNVUkxSZXNwb25zZSAqKV9yZXNwb25zZQotewotICAgIHJldHVybiBbW21fcmVzcG9u
c2UgcmV0YWluXSBhdXRvcmVsZWFzZV07Ci19CiAKLS0gKE5TRXJyb3IgKilfZXJyb3IKLXsKLSAg
ICByZXR1cm4gW1ttX2Vycm9yIHJldGFpbl0gYXV0b3JlbGVhc2VdOworICAgIG1fZXJyb3IgPSBb
ZXJyb3IgY29weV07CisgICAgbV9pc0RvbmUgPSB0cnVlOwogfQogCi0rIChOU0RhdGEgKilsb2Fk
UmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdCBhbGxvd1N0b3JlZENyZWRlbnRpYWxzOihC
T09MKWFsbG93U3RvcmVkQ3JlZGVudGlhbHMgcmV0dXJuaW5nUmVzcG9uc2U6KE5TVVJMUmVzcG9u
c2UgKiopcmVzcG9uc2UgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3IKLXsKLSAgICBMT0coTmV0d29y
aywgIldlYkNvcmVTeW5jaHJvbm91c0xvYWRlciBsb2FkUmVxdWVzdDolQCBhbGxvd1N0b3JlZENy
ZWRlbnRpYWxzOiV1IiwgcmVxdWVzdCwgYWxsb3dTdG9yZWRDcmVkZW50aWFscyk7Ci0KLSAgICBX
ZWJDb3JlU3luY2hyb25vdXNMb2FkZXIgKmRlbGVnYXRlID0gW1tXZWJDb3JlU3luY2hyb25vdXNM
b2FkZXIgYWxsb2NdIGluaXRdOwotCi0gICAgS1VSTCB1cmwoW3JlcXVlc3QgVVJMXSk7Ci0gICAg
ZGVsZWdhdGUtPm1fdXNlciA9IFtuc1N0cmluZ05pbElmRW1wdHkodXJsLnVzZXIoKSkgcmV0YWlu
XTsKLSAgICBkZWxlZ2F0ZS0+bV9wYXNzID0gW25zU3RyaW5nTmlsSWZFbXB0eSh1cmwucGFzcygp
KSByZXRhaW5dOwotICAgIGRlbGVnYXRlLT5tX2FsbG93U3RvcmVkQ3JlZGVudGlhbHMgPSBhbGxv
d1N0b3JlZENyZWRlbnRpYWxzOwotCi0gICAgTlNVUkxDb25uZWN0aW9uICpjb25uZWN0aW9uOwot
Ci0gICAgLy8gVGFrZSB1c2VyL3Bhc3Mgb3V0IG9mIHRoZSBVUkwuCi0gICAgLy8gQ3JlZGVudGlh
bHMgZm9yIGZ0cCBjYW4gb25seSBiZSBwYXNzZWQgaW4gVVJMLCB0aGUgY29ubmVjdGlvbjpkaWRS
ZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6IGRlbGVnYXRlIGNhbGwgd29uJ3QgYmUgbWFk
ZS4KLSAgICBpZiAoKGRlbGVnYXRlLT5tX3VzZXIgfHwgZGVsZWdhdGUtPm1fcGFzcykgJiYgdXJs
LnByb3RvY29sSW5IVFRQRmFtaWx5KCkpIHsKLSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVl
c3RXaXRob3V0Q3JlZGVudGlhbHMgPSByZXF1ZXN0OwotICAgICAgICByZXF1ZXN0V2l0aG91dENy
ZWRlbnRpYWxzLnJlbW92ZUNyZWRlbnRpYWxzKCk7Ci0gICAgICAgIGNvbm5lY3Rpb24gPSBjcmVh
dGVOU1VSTENvbm5lY3Rpb24ocmVxdWVzdFdpdGhvdXRDcmVkZW50aWFscy5uc1VSTFJlcXVlc3Qo
KSwgZGVsZWdhdGUsIGFsbG93U3RvcmVkQ3JlZGVudGlhbHMpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIC8vIDxyZGFyOi8vcHJvYmxlbS83MTc0MDUwPiAtIEZvciBVUkxzIHRoYXQgbWF0Y2ggdGhl
IHBhdGhzIG9mIHRob3NlIHByZXZpb3VzbHkgY2hhbGxlbmdlZCBmb3IgSFRUUCBCYXNpYyBhdXRo
ZW50aWNhdGlvbiwgCi0gICAgICAgIC8vIHRyeSBhbmQgcmV1c2UgdGhlIGNyZWRlbnRpYWwgcHJl
ZW1wdGl2ZWx5LCBhcyBhbGxvd2VkIGJ5IFJGQyAyNjE3LgotICAgICAgICBSZXNvdXJjZVJlcXVl
c3QgcmVxdWVzdFdpdGhJbml0aWFsQ3JlZGVudGlhbHMgPSByZXF1ZXN0OwotICAgICAgICBpZiAo
YWxsb3dTdG9yZWRDcmVkZW50aWFscyAmJiB1cmwucHJvdG9jb2xJbkhUVFBGYW1pbHkoKSkKLSAg
ICAgICAgICAgIGRlbGVnYXRlLT5tX2luaXRpYWxDcmVkZW50aWFsID0gQ3JlZGVudGlhbFN0b3Jh
Z2U6OmdldCh1cmwpOwotICAgICAgICAgICAgCi0gICAgICAgIGlmICghZGVsZWdhdGUtPm1faW5p
dGlhbENyZWRlbnRpYWwuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgYXV0aEhlYWRl
ciA9ICJCYXNpYyAiICsgZW5jb2RlQmFzaWNBdXRob3JpemF0aW9uKGRlbGVnYXRlLT5tX2luaXRp
YWxDcmVkZW50aWFsLnVzZXIoKSwgZGVsZWdhdGUtPm1faW5pdGlhbENyZWRlbnRpYWwucGFzc3dv
cmQoKSk7Ci0gICAgICAgICAgICByZXF1ZXN0V2l0aEluaXRpYWxDcmVkZW50aWFscy5hZGRIVFRQ
SGVhZGVyRmllbGQoIkF1dGhvcml6YXRpb24iLCBhdXRoSGVhZGVyKTsKLSAgICAgICAgfQotICAg
ICAgICBjb25uZWN0aW9uID0gY3JlYXRlTlNVUkxDb25uZWN0aW9uKHJlcXVlc3RXaXRoSW5pdGlh
bENyZWRlbnRpYWxzLm5zVVJMUmVxdWVzdCgpLCBkZWxlZ2F0ZSwgYWxsb3dTdG9yZWRDcmVkZW50
aWFscyk7Ci0gICAgfQotCi0gICAgW2Nvbm5lY3Rpb24gc2NoZWR1bGVJblJ1bkxvb3A6W05TUnVu
TG9vcCBjdXJyZW50UnVuTG9vcF0gZm9yTW9kZTpXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJSdW5M
b29wTW9kZV07Ci0gICAgW2Nvbm5lY3Rpb24gc3RhcnRdOwotICAgIAotICAgIHdoaWxlICghW2Rl
bGVnYXRlIF9pc0RvbmVdKQotICAgICAgICBbW05TUnVuTG9vcCBjdXJyZW50UnVuTG9vcF0gcnVu
TW9kZTpXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJSdW5Mb29wTW9kZSBiZWZvcmVEYXRlOltOU0Rh
dGUgZGlzdGFudEZ1dHVyZV1dOwotCi0gICAgTlNEYXRhICpkYXRhID0gW2RlbGVnYXRlIF9kYXRh
XTsKLSAgICAqcmVzcG9uc2UgPSBbZGVsZWdhdGUgX3Jlc3BvbnNlXTsKLSAgICAqZXJyb3IgPSBb
ZGVsZWdhdGUgX2Vycm9yXTsKLSAgICAKLSAgICBbY29ubmVjdGlvbiBjYW5jZWxdOwotICAgIAot
ICAgIFtjb25uZWN0aW9uIHJlbGVhc2VdOwotICAgIFtkZWxlZ2F0ZSByZWxlYXNlXTsKLQotICAg
IExPRyhOZXR3b3JrLCAiV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyIGRvbmUiKTsKLQotICAgIHJl
dHVybiBkYXRhOwotfQotCi1AZW5kCi0KICNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3F0L1FOZXR3b3JrUmVwbHlIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvcXQvUU5ldHdvcmtSZXBseUhhbmRsZXIuY3BwCShyZXZpc2lvbiA2
MzEwOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9RTmV0d29ya1JlcGx5SGFuZGxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0Miw3ICs0NDIsNyBAQCB2b2lkIFFOZXR3b3JrUmVw
bHlIYW5kbGVyOjpzdGFydCgpCiAgICAgICAgICAgICBtX3JlcGx5ID0gbWFuYWdlci0+Z2V0KG1f
cmVxdWVzdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBRTmV0d29ya0FjY2Vz
c01hbmFnZXI6OlBvc3RPcGVyYXRpb246IHsKLSAgICAgICAgICAgIEZvcm1EYXRhSU9EZXZpY2Uq
IHBvc3REZXZpY2UgPSBuZXcgRm9ybURhdGFJT0RldmljZShkLT5tX3JlcXVlc3QuaHR0cEJvZHko
KSk7IAorICAgICAgICAgICAgRm9ybURhdGFJT0RldmljZSogcG9zdERldmljZSA9IG5ldyBGb3Jt
RGF0YUlPRGV2aWNlKGQtPm1fZmlyc3RSZXF1ZXN0Lmh0dHBCb2R5KCkpOyAKICAgICAgICAgICAg
IG1fcmVwbHkgPSBtYW5hZ2VyLT5wb3N0KG1fcmVxdWVzdCwgcG9zdERldmljZSk7CiAgICAgICAg
ICAgICBwb3N0RGV2aWNlLT5zZXRQYXJlbnQobV9yZXBseSk7CiAgICAgICAgICAgICBicmVhazsK
QEAgLTQ1MSw3ICs0NTEsNyBAQCB2b2lkIFFOZXR3b3JrUmVwbHlIYW5kbGVyOjpzdGFydCgpCiAg
ICAgICAgICAgICBtX3JlcGx5ID0gbWFuYWdlci0+aGVhZChtX3JlcXVlc3QpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpQdXRPcGVyYXRp
b246IHsKLSAgICAgICAgICAgIEZvcm1EYXRhSU9EZXZpY2UqIHB1dERldmljZSA9IG5ldyBGb3Jt
RGF0YUlPRGV2aWNlKGQtPm1fcmVxdWVzdC5odHRwQm9keSgpKTsgCisgICAgICAgICAgICBGb3Jt
RGF0YUlPRGV2aWNlKiBwdXREZXZpY2UgPSBuZXcgRm9ybURhdGFJT0RldmljZShkLT5tX2ZpcnN0
UmVxdWVzdC5odHRwQm9keSgpKTsgCiAgICAgICAgICAgICBtX3JlcGx5ID0gbWFuYWdlci0+cHV0
KG1fcmVxdWVzdCwgcHV0RGV2aWNlKTsKICAgICAgICAgICAgIHB1dERldmljZS0+c2V0UGFyZW50
KG1fcmVwbHkpOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvcXQvUmVzb3VyY2VIYW5kbGVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNlSGFuZGxlUXQuY3BwCShyZXZpc2lvbiA2MzEwOCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9SZXNvdXJjZUhhbmRsZVF0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMwLDEwICsxMzAsMTAgQEAgYm9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQo
RnJhbWUqIGZyYW1lKQogICAgIGlmICghKGQtPm1fdXNlci5pc0VtcHR5KCkgfHwgZC0+bV9wYXNz
LmlzRW1wdHkoKSkpIHsKICAgICAgICAgLy8gSWYgY3JlZGVudGlhbHMgd2VyZSBzcGVjaWZpZWQg
Zm9yIHRoaXMgcmVxdWVzdCwgYWRkIHRoZW0gdG8gdGhlIHVybCwKICAgICAgICAgLy8gc28gdGhh
dCB0aGV5IHdpbGwgYmUgcGFzc2VkIHRvIFFOZXR3b3JrUmVxdWVzdC4KLSAgICAgICAgS1VSTCB1
cmxXaXRoQ3JlZGVudGlhbHMoZC0+bV9yZXF1ZXN0LnVybCgpKTsKKyAgICAgICAgS1VSTCB1cmxX
aXRoQ3JlZGVudGlhbHMoZmlyc3RSZXF1ZXN0KCkudXJsKCkpOwogICAgICAgICB1cmxXaXRoQ3Jl
ZGVudGlhbHMuc2V0VXNlcihkLT5tX3VzZXIpOwogICAgICAgICB1cmxXaXRoQ3JlZGVudGlhbHMu
c2V0UGFzcyhkLT5tX3Bhc3MpOwotICAgICAgICBkLT5tX3JlcXVlc3Quc2V0VVJMKHVybFdpdGhD
cmVkZW50aWFscyk7CisgICAgICAgIGQtPmZpcnN0UmVxdWVzdCgpLnNldFVSTCh1cmxXaXRoQ3Jl
ZGVudGlhbHMpOwogICAgIH0KIAogICAgIGdldEludGVybmFsKCktPm1fZnJhbWUgPSBzdGF0aWNf
Y2FzdDxGcmFtZUxvYWRlckNsaWVudFF0Kj4oZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSktPndl
YkZyYW1lKCk7CkBAIC0xOTUsMTAgKzE5NSwxMCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpsb2Fk
UmVzb3VyY2VTeW5jaHJvCiAgICAgaWYgKCEoZC0+bV91c2VyLmlzRW1wdHkoKSB8fCBkLT5tX3Bh
c3MuaXNFbXB0eSgpKSkgewogICAgICAgICAvLyBJZiBjcmVkZW50aWFscyB3ZXJlIHNwZWNpZmll
ZCBmb3IgdGhpcyByZXF1ZXN0LCBhZGQgdGhlbSB0byB0aGUgdXJsLAogICAgICAgICAvLyBzbyB0
aGF0IHRoZXkgd2lsbCBiZSBwYXNzZWQgdG8gUU5ldHdvcmtSZXF1ZXN0LgotICAgICAgICBLVVJM
IHVybFdpdGhDcmVkZW50aWFscyhkLT5tX3JlcXVlc3QudXJsKCkpOworICAgICAgICBLVVJMIHVy
bFdpdGhDcmVkZW50aWFscyhkLT5maXJzdFJlcXVlc3QoKS51cmwoKSk7CiAgICAgICAgIHVybFdp
dGhDcmVkZW50aWFscy5zZXRVc2VyKGQtPm1fdXNlcik7CiAgICAgICAgIHVybFdpdGhDcmVkZW50
aWFscy5zZXRQYXNzKGQtPm1fcGFzcyk7Ci0gICAgICAgIGQtPm1fcmVxdWVzdC5zZXRVUkwodXJs
V2l0aENyZWRlbnRpYWxzKTsKKyAgICAgICAgZC0+Zmlyc3RSZXF1ZXN0KCkuc2V0VVJMKHVybFdp
dGhDcmVkZW50aWFscyk7CiAgICAgfQogICAgIGQtPm1fZnJhbWUgPSBzdGF0aWNfY2FzdDxGcmFt
ZUxvYWRlckNsaWVudFF0Kj4oZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSktPndlYkZyYW1lKCk7
CiAgICAgZC0+bV9qb2IgPSBuZXcgUU5ldHdvcmtSZXBseUhhbmRsZXIoaGFuZGxlLmdldCgpLCBR
TmV0d29ya1JlcGx5SGFuZGxlcjo6TG9hZE5vcm1hbCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAJKHJldmlzaW9u
IDYzMTA4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVT
b3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA0LDcgKzUwNCw3IEBAIHN0YXRpYyBib29sIHN0
YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGEKICNlbmRpZgogICAgIGdfb2JqZWN0X3NldF9kYXRh
KEdfT0JKRUNUKGQtPm1fbXNnKSwgInJlc291cmNlSGFuZGxlIiwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oaGFuZGxlKSk7CiAKLSAgICBGb3JtRGF0YSogaHR0cEJvZHkgPSBkLT5tX3JlcXVlc3Qu
aHR0cEJvZHkoKTsKKyAgICBGb3JtRGF0YSogaHR0cEJvZHkgPSBmaXJzdFJlcXVlc3QoKS5odHRw
Qm9keSgpOwogICAgIGlmIChodHRwQm9keSAmJiAhaHR0cEJvZHktPmlzRW1wdHkoKSkgewogICAg
ICAgICBzaXplX3QgbnVtRWxlbWVudHMgPSBodHRwQm9keS0+ZWxlbWVudHMoKS5zaXplKCk7CiAK
QEAgLTUxMiw3ICs1MTIsNyBAQCBzdGF0aWMgYm9vbCBzdGFydEh0dHAoUmVzb3VyY2VIYW5kbGUq
IGhhCiAgICAgICAgIGlmIChudW1FbGVtZW50cyA8IDIpIHsKICAgICAgICAgICAgIFZlY3Rvcjxj
aGFyPiBib2R5OwogICAgICAgICAgICAgaHR0cEJvZHktPmZsYXR0ZW4oYm9keSk7Ci0gICAgICAg
ICAgICBzb3VwX21lc3NhZ2Vfc2V0X3JlcXVlc3QoZC0+bV9tc2csIGQtPm1fcmVxdWVzdC5odHRw
Q29udGVudFR5cGUoKS51dGY4KCkuZGF0YSgpLAorICAgICAgICAgICAgc291cF9tZXNzYWdlX3Nl
dF9yZXF1ZXN0KGQtPm1fbXNnLCBmaXJzdFJlcXVlc3QoKS5odHRwQ29udGVudFR5cGUoKS51dGY4
KCkuZGF0YSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPVVBfTUVN
T1JZX0NPUFksIGJvZHkuZGF0YSgpLCBib2R5LnNpemUoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAvKgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61431</attachid>
            <date>2010-07-13 16:38:03 -0700</date>
            <delta_ts>2010-07-13 18:42:56 -0700</delta_ts>
            <desc>Now with CFNetwork</desc>
            <filename>ResourceHandleSync2.txt</filename>
            <type>text/plain</type>
            <size>83822</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzI1OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTAgQEAKKzIwMTAtMDctMTMgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyMjAxCisgICAgICAgIFVz
ZSBSZXNvdXJjZUhhbmRsZSBvYmplY3QgZm9yIHN5bmNocm9ub3VzIGxvYWRpbmcKKworICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGU6OlJlc291cmNlSGFuZGxlKTogTW92ZWQgY29tbW9uIHRhc2tzIGZy
b20gY3JlYXRlKCkgdG8gY29uc3RydWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhh
bmRsZTo6Zmlyc3RSZXF1ZXN0KTogUmVuYW1lZCBmcm9tIHJlcXVlc3QoKS4gVGhpcyBpcyBub3Qg
Y2hhbmdlZCB3aXRoCisgICAgICAgIHJlZGlyZWN0LCBzbyB0aGUgb2xkIG5hbWUgd2FzIHF1aXRl
IGNvbmZ1c2luZy4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUu
aDogTWFkZSBjcmVhdGVOU1VSTENvbm5lY3Rpb24oKSBhIG1lbWJlciBmdW5jdGlvbiwgc2luY2UK
KyAgICAgICAgaXQgbm93IG5lZWRzIGFjY2VzcyB0byBib3RoIFJlc291cmNlSGFuZGxlIGFuZCBS
ZXNvdXJjZUhhbmRsZUludGVybmFsLiBBZGRlZCBjcmVhdGVDRlVSTENvbm5lY3Rpb24oKS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6UmVzb3VyY2VIYW5kbGVJbnRl
cm5hbCk6IFJlbmFtZWQgbV9yZXF1ZXN0IHRvIG1fZmlyc3RSZXF1ZXN0LgorCisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW06CisgICAgICAgIChXZWJD
b3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQpOiBSZXBsYWNlZCBhbiBPYmplY3RpdmUgQyBkZWxl
Z2F0ZSBjbGFzcyB3aXRoIGEgUmVzb3VyY2VIYW5kbGVDbGllbnQKKyAgICAgICAgc3ViY2xhc3Mu
IFRoaXMgYWxsb3dzIGZvciBtdWNoIGJldHRlciBjb2RlIHNoYXJpbmcsIHdpdGggY29tbW9uIGxv
Z2ljIGlzIGluIFJlc291cmNlSGFuZGxlLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGU6OmNyZWF0ZU5TVVJMQ29ubmVjdGlvbik6IEZhY3RvcmVkIG91dCBtb3JlIGNvZGUgdGhhdCBp
cyBjb21tb24KKyAgICAgICAgYmV0d2VlbiBzeW5jIGFuZCBhc3luYyBwYXJ0cy4KKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzdGFydCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGU6OmNhbmNlbCk6IFVwZGF0ZWQgZm9yIGZpcnN0UmVxdWVzdCgpIHJl
bmFtaW5nLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5
bmNocm9ub3VzbHkpOiBVc2UgUmVzb3VyY2VIYW5kbGUgYW5kIFJlc291cmNlSGFuZGxlQ2xpZW50
LAorICAgICAgICBsaWtlIGEgZ29vZCBsb2FkZXIuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKTogVXBkYXRlZCBmb3Ig
Zmlyc3RSZXF1ZXN0KCkgcmVuYW1pbmcuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRs
ZTo6cmVjZWl2ZWRDcmVkZW50aWFsKTogRGl0dG8uCisgICAgICAgICgtW1dlYkNvcmVSZXNvdXJj
ZUhhbmRsZUFzRGVsZWdhdGUgY29ubmVjdGlvbjp3aWxsU2VuZFJlcXVlc3Q6cmVkaXJlY3RSZXNw
b25zZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdh
dGUgY29ubmVjdGlvbjpkaWRSZWNlaXZlUmVzcG9uc2U6XSk6IERpdHRvLgorICAgICAgICAoLVtX
ZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlIGNvbm5lY3Rpb25EaWRGaW5pc2hMb2FkaW5n
Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZSBj
b25uZWN0aW9uOmRpZEZhaWxXaXRoRXJyb3I6XSk6IERpdHRvLgorCisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6c2V0QWxsb3dTdG9yZWRDcmVkZW50
aWFscyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6
OmlzRG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGll
bnQ6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyQ2xp
ZW50OjpXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmRpZFJlY2VpdmVSZXNwb25zZSk6
CisgICAgICAgIChXZWJDb3JlOjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpz
aG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmRp
ZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6ZGlkRmFpbCk6CisgICAgICAgIChX
ZWJDb3JlOjpkaWRSZWNlaXZlQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
SGFuZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhhbmRsZUludGVybmFsKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlOjp+UmVzb3VyY2VIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGU6OmNyZWF0ZUNGVVJMQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUhhbmRsZTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGU6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDcmVkZW50aWFsKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6d2lsbFNlbmRSZXF1ZXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6ZGlkUmVj
ZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVTeW5jaHJvbm91c0xvYWRl
ckNsaWVudDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29yZVN5bmNo
cm9ub3VzTG9hZGVyQ2xpZW50OjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlU3luY2hyb25vdXNMb2Fk
ZXJDbGllbnQ6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKToKKyAgICAgICAgU2FtZSBjaGFu
Z2VzIGZvciBDRk5ldHdvcmsgdmVyc2lvbi4gTm93IGl0J3MgYSBtb3JlIGRpcmVjdCBjb3B5L3Bh
c3RlIHRoYW4gYmVmb3JlLCBzb21lCisgICAgICAgIGRheSB3ZSdsbCBzaGFyZSB0aGUgY29kZS4K
KworICAgICAgICAqIGxvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWFpblJlc291cmNlTG9hZGVyOjpjb250aW51ZUFmdGVyQ29udGVudFBvbGljeSk6Cisg
ICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmNyZWF0ZVJlc291cmNlSGFuZGxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGlkUmVjZWl2ZVJl
c3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGlkRmlu
aXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmRp
ZEZhaWwpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjpkaWRSZWNl
aXZlTWFuaWZlc3RSZXNwb25zZSk6CisgICAgICAgICogbG9hZGVyL2ljb24vSWNvbkxvYWRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJY29uTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SWNvbkxvYWRlcjo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJDb3Jl
OjpJY29uTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omhl
YWRlckNhbGxiYWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3F0L1FOZXR3b3JrUmVw
bHlIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlIYW5kbGVyOjpz
dGFydCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9xdC9SZXNvdXJjZUhhbmRsZVF0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzdGFydCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpzdGFydEh0dHApOgorICAgICAgICBVcGRhdGVkIGZvciByZXF1ZXN0KCkg
LT4gZmlyc3RSZXF1ZXN0IHJlbmFtaW5nLgorCiAyMDEwLTA3LTEyICBUb255IEdlbnRpbGNvcmUg
IDx0b255Z0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVy
LgpJbmRleDogV2ViQ29yZS9sb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiA2MzEw
OCkKKysrIFdlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyMyw3ICsyMjMsNyBAQCB2b2lkIE1haW5SZXNvdXJjZUxvYWRlcjo6Y29udGludWVB
ZnRlckNvCiAgICAgICAgICAgICByZWNlaXZlZEVycm9yKGNhbm5vdFNob3dVUkxFcnJvcigpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBmcmFtZUxvYWRlcigpLT5j
bGllbnQoKS0+ZG93bmxvYWQobV9oYW5kbGUuZ2V0KCksIHJlcXVlc3QoKSwgbV9oYW5kbGUuZ2V0
KCktPnJlcXVlc3QoKSwgcik7CisgICAgICAgIGZyYW1lTG9hZGVyKCktPmNsaWVudCgpLT5kb3du
bG9hZChtX2hhbmRsZS5nZXQoKSwgcmVxdWVzdCgpLCBtX2hhbmRsZS5nZXQoKS0+Zmlyc3RSZXF1
ZXN0KCksIHIpOwogICAgICAgICAvLyBJdCBtaWdodCBoYXZlIGdvbmUgbWlzc2luZwogICAgICAg
ICBpZiAoZnJhbWVMb2FkZXIoKSkKICAgICAgICAgICAgIHJlY2VpdmVkRXJyb3IoaW50ZXJydXB0
aW9uRm9yUG9saWN5Q2hhbmdlRXJyb3IoKSk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAJKHJldmlzaW9uIDYzMTA4KQorKysg
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDc5LDcgKzQ3OSw3IEBAIFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IEFw
cGxpY2F0aW9uQ2EKICAgICBtX2N1cnJlbnRSZXNvdXJjZUlkZW50aWZpZXIgPSBtX2ZyYW1lLT5w
YWdlKCktPnByb2dyZXNzKCktPmNyZWF0ZVVuaXF1ZUlkZW50aWZpZXIoKTsKICAgICBpZiAoUGFn
ZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkgewogICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVy
KiBpbnNwZWN0b3JDb250cm9sbGVyID0gcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpOwotICAg
ICAgICBpbnNwZWN0b3JDb250cm9sbGVyLT5pZGVudGlmaWVyRm9ySW5pdGlhbFJlcXVlc3QobV9j
dXJyZW50UmVzb3VyY2VJZGVudGlmaWVyLCBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2Fk
ZXIoKSwgaGFuZGxlLT5yZXF1ZXN0KCkpOworICAgICAgICBpbnNwZWN0b3JDb250cm9sbGVyLT5p
ZGVudGlmaWVyRm9ySW5pdGlhbFJlcXVlc3QobV9jdXJyZW50UmVzb3VyY2VJZGVudGlmaWVyLCBt
X2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSwgaGFuZGxlLT5maXJzdFJlcXVlc3Qo
KSk7CiAgICAgICAgIFJlc291cmNlUmVzcG9uc2UgcmVkaXJlY3RSZXNwb25zZSA9IFJlc291cmNl
UmVzcG9uc2UoKTsKICAgICAgICAgaW5zcGVjdG9yQ29udHJvbGxlci0+d2lsbFNlbmRSZXF1ZXN0
KG1fY3VycmVudFJlc291cmNlSWRlbnRpZmllciwgcmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7
CiAgICAgfQpAQCAtNTE1LDcgKzUxNSw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpk
aWRSZWNlaXZlUmUKICAgICAKICAgICBBU1NFUlQoaGFuZGxlID09IG1fY3VycmVudEhhbmRsZSk7
CiAKLSAgICBLVVJMIHVybChoYW5kbGUtPnJlcXVlc3QoKS51cmwoKSk7CisgICAgS1VSTCB1cmwo
aGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKSk7CiAgICAgaWYgKHVybC5oYXNGcmFnbWVudElk
ZW50aWZpZXIoKSkKICAgICAgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwogICAg
IApAQCAtNTMyLDcgKzUzMiw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpkaWRSZWNl
aXZlUmUKICAgICAgICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiBuZXdlc3RDYWNoZWRSZXNv
dXJjZSA9IG1fbmV3ZXN0Q2FjaGUtPnJlc291cmNlRm9yVVJMKHVybCk7CiAgICAgICAgIGlmIChu
ZXdlc3RDYWNoZWRSZXNvdXJjZSkgewogICAgICAgICAgICAgbV9jYWNoZUJlaW5nVXBkYXRlZC0+
YWRkUmVzb3VyY2UoQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUodXJsLCBuZXdlc3RD
YWNoZWRSZXNvdXJjZS0+cmVzcG9uc2UoKSwgdHlwZSwgbmV3ZXN0Q2FjaGVkUmVzb3VyY2UtPmRh
dGEoKSkpOwotICAgICAgICAgICAgbV9wZW5kaW5nRW50cmllcy5yZW1vdmUobV9jdXJyZW50SGFu
ZGxlLT5yZXF1ZXN0KCkudXJsKCkpOworICAgICAgICAgICAgbV9wZW5kaW5nRW50cmllcy5yZW1v
dmUobV9jdXJyZW50SGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKSk7CiAgICAgICAgICAgICBt
X2N1cnJlbnRIYW5kbGUtPmNhbmNlbCgpOwogICAgICAgICAgICAgbV9jdXJyZW50SGFuZGxlID0g
MDsKICAgICAgICAgICAgIC8vIExvYWQgdGhlIG5leHQgcmVzb3VyY2UsIGlmIGFueS4KQEAgLTU0
Miw3ICs1NDIsNyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGlkUmVjZWl2ZVJlCiAg
ICAgICAgIC8vIFRoZSBzZXJ2ZXIgY291bGQgcmV0dXJuIDMwNCBmb3IgYW4gdW5jb25kaXRpb25h
bCByZXF1ZXN0IC0gaW4gdGhpcyBjYXNlLCB3ZSBoYW5kbGUgdGhlIHJlc3BvbnNlIGFzIGEgbm9y
bWFsIGVycm9yLgogICAgIH0KIAotICAgIGlmIChyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpIC8g
MTAwICE9IDIgfHwgcmVzcG9uc2UudXJsKCkgIT0gbV9jdXJyZW50SGFuZGxlLT5yZXF1ZXN0KCku
dXJsKCkpIHsKKyAgICBpZiAocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAvIDEwMCAhPSAyIHx8
IHJlc3BvbnNlLnVybCgpICE9IG1fY3VycmVudEhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkp
IHsKICAgICAgICAgaWYgKCh0eXBlICYgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpFeHBsaWNp
dCkgfHwgKHR5cGUgJiBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OkZhbGxiYWNrKSkgewogICAg
ICAgICAgICAgLy8gTm90ZSB0aGF0IGNhY2hlVXBkYXRlRmFpbGVkKCkgY2FuIGNhdXNlIHRoZSBj
YWNoZSBncm91cCB0byBiZSBkZWxldGVkLgogICAgICAgICAgICAgY2FjaGVVcGRhdGVGYWlsZWQo
KTsKQEAgLTU1NywxMCArNTU3LDEwIEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpkaWRS
ZWNlaXZlUmUKICAgICAgICAgICAgIC8vIENvcHkgdGhlIHJlc291cmNlIGFuZCBpdHMgbWV0YWRh
dGEgZnJvbSB0aGUgbmV3ZXN0IGFwcGxpY2F0aW9uIGNhY2hlIGluIGNhY2hlIGdyb3VwIHdob3Nl
IGNvbXBsZXRlbmVzcyBmbGFnIGlzIGNvbXBsZXRlLCBhbmQgYWN0CiAgICAgICAgICAgICAvLyBh
cyBpZiB0aGF0IHdhcyB0aGUgZmV0Y2hlZCByZXNvdXJjZSwgaWdub3JpbmcgdGhlIHJlc291cmNl
IG9idGFpbmVkIGZyb20gdGhlIG5ldHdvcmsuCiAgICAgICAgICAgICBBU1NFUlQobV9uZXdlc3RD
YWNoZSk7Ci0gICAgICAgICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIG5ld2VzdENhY2hl
ZFJlc291cmNlID0gbV9uZXdlc3RDYWNoZS0+cmVzb3VyY2VGb3JVUkwoaGFuZGxlLT5yZXF1ZXN0
KCkudXJsKCkpOworICAgICAgICAgICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiBuZXdlc3RD
YWNoZWRSZXNvdXJjZSA9IG1fbmV3ZXN0Q2FjaGUtPnJlc291cmNlRm9yVVJMKGhhbmRsZS0+Zmly
c3RSZXF1ZXN0KCkudXJsKCkpOwogICAgICAgICAgICAgQVNTRVJUKG5ld2VzdENhY2hlZFJlc291
cmNlKTsKICAgICAgICAgICAgIG1fY2FjaGVCZWluZ1VwZGF0ZWQtPmFkZFJlc291cmNlKEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRlKHVybCwgbmV3ZXN0Q2FjaGVkUmVzb3VyY2UtPnJl
c3BvbnNlKCksIHR5cGUsIG5ld2VzdENhY2hlZFJlc291cmNlLT5kYXRhKCkpKTsKLSAgICAgICAg
ICAgIG1fcGVuZGluZ0VudHJpZXMucmVtb3ZlKG1fY3VycmVudEhhbmRsZS0+cmVxdWVzdCgpLnVy
bCgpKTsKKyAgICAgICAgICAgIG1fcGVuZGluZ0VudHJpZXMucmVtb3ZlKG1fY3VycmVudEhhbmRs
ZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkpOwogICAgICAgICAgICAgbV9jdXJyZW50SGFuZGxlLT5j
YW5jZWwoKTsKICAgICAgICAgICAgIG1fY3VycmVudEhhbmRsZSA9IDA7CiAgICAgICAgICAgICAv
LyBMb2FkIHRoZSBuZXh0IHJlc291cmNlLCBpZiBhbnkuCkBAIC02MDUsOSArNjA1LDkgQEAgdm9p
ZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmRpZEZpbmlzaExvYQogICAgIH0KICAKICAgICBBU1NF
UlQobV9jdXJyZW50SGFuZGxlID09IGhhbmRsZSk7Ci0gICAgQVNTRVJUKG1fcGVuZGluZ0VudHJp
ZXMuY29udGFpbnMoaGFuZGxlLT5yZXF1ZXN0KCkudXJsKCkpKTsKKyAgICBBU1NFUlQobV9wZW5k
aW5nRW50cmllcy5jb250YWlucyhoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpKSk7CiAgICAg
Ci0gICAgbV9wZW5kaW5nRW50cmllcy5yZW1vdmUoaGFuZGxlLT5yZXF1ZXN0KCkudXJsKCkpOwor
ICAgIG1fcGVuZGluZ0VudHJpZXMucmVtb3ZlKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkp
OwogICAgIAogICAgIEFTU0VSVChtX2NhY2hlQmVpbmdVcGRhdGVkKTsKIApAQCAtNjMyLDggKzYz
Miw4IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpkaWRGYWlsKFJlc28KICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIHVuc2lnbmVkIHR5cGUgPSBtX2N1cnJlbnRSZXNvdXJjZSA/
IG1fY3VycmVudFJlc291cmNlLT50eXBlKCkgOiBtX3BlbmRpbmdFbnRyaWVzLmdldChoYW5kbGUt
PnJlcXVlc3QoKS51cmwoKSk7Ci0gICAgS1VSTCB1cmwoaGFuZGxlLT5yZXF1ZXN0KCkudXJsKCkp
OworICAgIHVuc2lnbmVkIHR5cGUgPSBtX2N1cnJlbnRSZXNvdXJjZSA/IG1fY3VycmVudFJlc291
cmNlLT50eXBlKCkgOiBtX3BlbmRpbmdFbnRyaWVzLmdldChoYW5kbGUtPmZpcnN0UmVxdWVzdCgp
LnVybCgpKTsKKyAgICBLVVJMIHVybChoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpKTsKICAg
ICBpZiAodXJsLmhhc0ZyYWdtZW50SWRlbnRpZmllcigpKQogICAgICAgICB1cmwucmVtb3ZlRnJh
Z21lbnRJZGVudGlmaWVyKCk7CiAKQEAgLTY2OSwxMyArNjY5LDEyIEBAIHZvaWQgQXBwbGljYXRp
b25DYWNoZUdyb3VwOjpkaWRSZWNlaXZlTWEKICAgICBpZiAocmVzcG9uc2UuaHR0cFN0YXR1c0Nv
ZGUoKSA9PSAzMDQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChyZXNwb25zZS5odHRwU3Rh
dHVzQ29kZSgpIC8gMTAwICE9IDIgfHwgcmVzcG9uc2UudXJsKCkgIT0gbV9tYW5pZmVzdEhhbmRs
ZS0+cmVxdWVzdCgpLnVybCgpIHx8ICFlcXVhbElnbm9yaW5nQ2FzZShyZXNwb25zZS5taW1lVHlw
ZSgpLCAidGV4dC9jYWNoZS1tYW5pZmVzdCIpKSB7CisgICAgaWYgKHJlc3BvbnNlLmh0dHBTdGF0
dXNDb2RlKCkgLyAxMDAgIT0gMiB8fCByZXNwb25zZS51cmwoKSAhPSBtX21hbmlmZXN0SGFuZGxl
LT5maXJzdFJlcXVlc3QoKS51cmwoKSB8fCAhZXF1YWxJZ25vcmluZ0Nhc2UocmVzcG9uc2UubWlt
ZVR5cGUoKSwgInRleHQvY2FjaGUtbWFuaWZlc3QiKSkgewogICAgICAgICBjYWNoZVVwZGF0ZUZh
aWxlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9tYW5pZmVzdFJlc291cmNl
ID0gQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUobV9tYW5pZmVzdEhhbmRsZS0+cmVx
dWVzdCgpLnVybCgpLCByZXNwb25zZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpNYW5p
ZmVzdCk7CisgICAgbV9tYW5pZmVzdFJlc291cmNlID0gQXBwbGljYXRpb25DYWNoZVJlc291cmNl
OjpjcmVhdGUobV9tYW5pZmVzdEhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCksIHJlc3BvbnNl
LCBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6Ok1hbmlmZXN0KTsKIH0KIAogdm9pZCBBcHBsaWNh
dGlvbkNhY2hlR3JvdXA6OmRpZFJlY2VpdmVNYW5pZmVzdERhdGEoY29uc3QgY2hhciogZGF0YSwg
aW50IGxlbmd0aCkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkxvYWRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAkocmV2aXNpb24g
NjMxMDgpCisrKyBXZWJDb3JlL2xvYWRlci9pY29uL0ljb25Mb2FkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgSWNvbkxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNl
KFN1YnIKIAogICAgIGlmIChzdGF0dXMgJiYgKHN0YXR1cyA8IDIwMCB8fCBzdGF0dXMgPiAyOTkp
KSB7CiAgICAgICAgIFJlc291cmNlSGFuZGxlKiBoYW5kbGUgPSByZXNvdXJjZUxvYWRlci0+aGFu
ZGxlKCk7Ci0gICAgICAgIGZpbmlzaExvYWRpbmcoaGFuZGxlID8gaGFuZGxlLT5yZXF1ZXN0KCku
dXJsKCkgOiBLVVJMKCksIDApOworICAgICAgICBmaW5pc2hMb2FkaW5nKGhhbmRsZSA/IGhhbmRs
ZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkgOiBLVVJMKCksIDApOwogICAgIH0KIH0KIApAQCAtMTE1
LDcgKzExNSw3IEBAIHZvaWQgSWNvbkxvYWRlcjo6ZGlkRmFpbChTdWJyZXNvdXJjZUxvYWQKICAg
ICBpZiAobV9sb2FkSXNJblByb2dyZXNzKSB7CiAgICAgICAgIEFTU0VSVChyZXNvdXJjZUxvYWRl
ciA9PSBtX3Jlc291cmNlTG9hZGVyKTsKICAgICAgICAgUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSA9
IHJlc291cmNlTG9hZGVyLT5oYW5kbGUoKTsKLSAgICAgICAgZmluaXNoTG9hZGluZyhoYW5kbGUg
PyBoYW5kbGUtPnJlcXVlc3QoKS51cmwoKSA6IEtVUkwoKSwgMCk7CisgICAgICAgIGZpbmlzaExv
YWRpbmcoaGFuZGxlID8gaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKSA6IEtVUkwoKSwgMCk7
CiAgICAgfQogfQogCkBAIC0xMzcsNyArMTM3LDcgQEAgdm9pZCBJY29uTG9hZGVyOjpkaWRGaW5p
c2hMb2FkaW5nKFN1YnJlcwogICAgIGlmIChtX2xvYWRJc0luUHJvZ3Jlc3MpIHsKICAgICAgICAg
QVNTRVJUKHJlc291cmNlTG9hZGVyID09IG1fcmVzb3VyY2VMb2FkZXIpOwogICAgICAgICBSZXNv
dXJjZUhhbmRsZSogaGFuZGxlID0gcmVzb3VyY2VMb2FkZXItPmhhbmRsZSgpOwotICAgICAgICBm
aW5pc2hMb2FkaW5nKGhhbmRsZSA/IGhhbmRsZS0+cmVxdWVzdCgpLnVybCgpIDogS1VSTCgpLCBt
X3Jlc291cmNlTG9hZGVyLT5yZXNvdXJjZURhdGEoKSk7CisgICAgICAgIGZpbmlzaExvYWRpbmco
aGFuZGxlID8gaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKSA6IEtVUkwoKSwgbV9yZXNvdXJj
ZUxvYWRlci0+cmVzb3VyY2VEYXRhKCkpOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCShyZXZpc2lvbiA2MzEwOCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAy
MDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDMwICszNywyOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBib29sIHNob3VsZEZvcmNlQ29udGVudFNu
aWZmaW5nOwogCi1SZXNvdXJjZUhhbmRsZTo6UmVzb3VyY2VIYW5kbGUoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50LCBib29sIGRlZmVy
c0xvYWRpbmcsCi0gICAgICAgICBib29sIHNob3VsZENvbnRlbnRTbmlmZikKLSAgICA6IGQobmV3
IFJlc291cmNlSGFuZGxlSW50ZXJuYWwodGhpcywgcmVxdWVzdCwgY2xpZW50LCBkZWZlcnNMb2Fk
aW5nLCBzaG91bGRDb250ZW50U25pZmYpKQorUmVzb3VyY2VIYW5kbGU6OlJlc291cmNlSGFuZGxl
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNs
aWVudCwgYm9vbCBkZWZlcnNMb2FkaW5nLCBib29sIHNob3VsZENvbnRlbnRTbmlmZikKKyAgICA6
IGQobmV3IFJlc291cmNlSGFuZGxlSW50ZXJuYWwodGhpcywgcmVxdWVzdCwgY2xpZW50LCBkZWZl
cnNMb2FkaW5nLCBzaG91bGRDb250ZW50U25pZmYgJiYgc2hvdWxkQ29udGVudFNuaWZmVVJMKHJl
cXVlc3QudXJsKCkpKSkKIHsKKyAgICBpZiAoIXJlcXVlc3QudXJsKCkuaXNWYWxpZCgpKSB7Cisg
ICAgICAgIHNjaGVkdWxlRmFpbHVyZShJbnZhbGlkVVJMRmFpbHVyZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoIXBvcnRBbGxvd2VkKHJlcXVlc3QudXJsKCkpKSB7CisgICAg
ICAgIHNjaGVkdWxlRmFpbHVyZShCbG9ja2VkRmFpbHVyZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiB9CiAKIFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IFJlc291cmNlSGFuZGxlOjpjcmVh
dGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUhhbmRsZUNsaWVudCog
Y2xpZW50LAogICAgIEZyYW1lKiBmcmFtZSwgYm9vbCBkZWZlcnNMb2FkaW5nLCBib29sIHNob3Vs
ZENvbnRlbnRTbmlmZikKIHsKLSAgICBpZiAoc2hvdWxkQ29udGVudFNuaWZmKQotICAgICAgICBz
aG91bGRDb250ZW50U25pZmYgPSBzaG91bGRDb250ZW50U25pZmZVUkwocmVxdWVzdC51cmwoKSk7
Ci0KICAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IG5ld0hhbmRsZShhZG9wdFJlZihuZXcgUmVz
b3VyY2VIYW5kbGUocmVxdWVzdCwgY2xpZW50LCBkZWZlcnNMb2FkaW5nLCBzaG91bGRDb250ZW50
U25pZmYpKSk7CiAKLSAgICBpZiAoIXJlcXVlc3QudXJsKCkuaXNWYWxpZCgpKSB7Ci0gICAgICAg
IG5ld0hhbmRsZS0+c2NoZWR1bGVGYWlsdXJlKEludmFsaWRVUkxGYWlsdXJlKTsKLSAgICAgICAg
cmV0dXJuIG5ld0hhbmRsZS5yZWxlYXNlKCk7Ci0gICAgfQorICAgIGlmIChuZXdIYW5kbGUtPmQt
Pm1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgIT0gTm9GYWlsdXJlKQorICAgICAgICByZXR1cm4gMDsK
IAotICAgIGlmICghcG9ydEFsbG93ZWQocmVxdWVzdC51cmwoKSkpIHsKLSAgICAgICAgbmV3SGFu
ZGxlLT5zY2hlZHVsZUZhaWx1cmUoQmxvY2tlZEZhaWx1cmUpOwotICAgICAgICByZXR1cm4gbmV3
SGFuZGxlLnJlbGVhc2UoKTsKLSAgICB9Ci0gICAgICAgIAogICAgIGlmIChuZXdIYW5kbGUtPnN0
YXJ0KGZyYW1lKSkKICAgICAgICAgcmV0dXJuIG5ld0hhbmRsZS5yZWxlYXNlKCk7CiAKQEAgLTEw
NSw5ICsxMDMsOSBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRDbGllbnQoUmVzb3VyY2VICiAg
ICAgZC0+bV9jbGllbnQgPSBjbGllbnQ7CiB9CiAKLWNvbnN0IFJlc291cmNlUmVxdWVzdCYgUmVz
b3VyY2VIYW5kbGU6OnJlcXVlc3QoKSBjb25zdAorUmVzb3VyY2VSZXF1ZXN0JiBSZXNvdXJjZUhh
bmRsZTo6Zmlyc3RSZXF1ZXN0KCkKIHsKLSAgICByZXR1cm4gZC0+bV9yZXF1ZXN0OworICAgIHJl
dHVybiBkLT5tX2ZpcnN0UmVxdWVzdDsKIH0KIAogY29uc3QgU3RyaW5nJiBSZXNvdXJjZUhhbmRs
ZTo6bGFzdEhUVFBNZXRob2QoKSBjb25zdApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlLmgJKHJldmlzaW9uIDYzMTA4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCw4ICsxMTAsOCBA
QCBwcml2YXRlOgogcHVibGljOgogICAgIC8vIEZJWE1FOiBzaG91bGQgbm90IG5lZWQgdGhlIEZy
YW1lCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGNyZWF0ZShjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUhhbmRsZUNsaWVudCosIEZyYW1lKiwgYm9vbCBkZWZl
cnNMb2FkaW5nLCBib29sIHNob3VsZENvbnRlbnRTbmlmZik7Ci0KICAgICBzdGF0aWMgdm9pZCBs
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENy
ZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFy
PiYgZGF0YSwgRnJhbWUqIGZyYW1lKTsKKwogICAgIHN0YXRpYyB2b2lkIHByZXBhcmVGb3JVUkwo
Y29uc3QgS1VSTCYpOwogICAgIHN0YXRpYyBib29sIHdpbGxMb2FkRnJvbUNhY2hlKFJlc291cmNl
UmVxdWVzdCYsIEZyYW1lKik7CiAgICAgc3RhdGljIHZvaWQgY2FjaGVNZXRhZGF0YShjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgVmVjdG9yPGNoYXI+Jik7CkBAIC0xOTcsNyArMTk3LDcg
QEAgcHVibGljOgogCiAgICAgdm9pZCBzZXREZWZlcnNMb2FkaW5nKGJvb2wpOwogICAgICAgCi0g
ICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KCkgY29uc3Q7CisgICAgUmVzb3VyY2VS
ZXF1ZXN0JiBmaXJzdFJlcXVlc3QoKTsKICAgICBjb25zdCBTdHJpbmcmIGxhc3RIVFRQTWV0aG9k
KCkgY29uc3Q7CiAKICAgICB2b2lkIGZpcmVGYWlsdXJlKFRpbWVyPFJlc291cmNlSGFuZGxlPiop
OwpAQCAtMjE1LDYgKzIxNSwxMiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCByZWZBdXRo
ZW50aWNhdGlvbkNsaWVudCgpIHsgcmVmKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZBdXRo
ZW50aWNhdGlvbkNsaWVudCgpIHsgZGVyZWYoKTsgfQogCisjaWYgUExBVEZPUk0oTUFDKQorICAg
IE5TVVJMQ29ubmVjdGlvbiAqY3JlYXRlTlNVUkxDb25uZWN0aW9uKGlkIGRlbGVnYXRlLCBib29s
IHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlLCBib29sIHNob3VsZENvbnRlbnRTbmlmZik7Cisj
ZWxpZiBQTEFURk9STShDRikKKyAgICBDRlVSTENvbm5lY3Rpb25SZWYgY3JlYXRlQ0ZVUkxDb25u
ZWN0aW9uKGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UsIGJvb2wgc2hvdWxkQ29udGVu
dFNuaWZmKTsKKyNlbmRpZgorCiAgICAgZnJpZW5kIGNsYXNzIFJlc291cmNlSGFuZGxlSW50ZXJu
YWw7CiAgICAgT3duUHRyPFJlc291cmNlSGFuZGxlSW50ZXJuYWw+IGQ7CiB9OwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCShy
ZXZpc2lvbiA2MzEwOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRs
ZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIHB1YmxpYzoKICAgICAgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbChSZXNv
dXJjZUhhbmRsZSogbG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291
cmNlSGFuZGxlQ2xpZW50KiBjLCBib29sIGRlZmVyc0xvYWRpbmcsIGJvb2wgc2hvdWxkQ29udGVu
dFNuaWZmKQogICAgICAgICAgICAgOiBtX2NsaWVudChjKQotICAgICAgICAgICAgLCBtX3JlcXVl
c3QocmVxdWVzdCkKKyAgICAgICAgICAgICwgbV9maXJzdFJlcXVlc3QocmVxdWVzdCkKICAgICAg
ICAgICAgICwgbV9sYXN0SFRUUE1ldGhvZChyZXF1ZXN0Lmh0dHBNZXRob2QoKSkKICAgICAgICAg
ICAgICwgc3RhdHVzKDApCiAgICAgICAgICAgICAsIG1fZGVmZXJzTG9hZGluZyhkZWZlcnNMb2Fk
aW5nKQpAQCAtMTM2LDEwICsxMzYsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAg
ICAgLCBtX3NjaGVkdWxlZEZhaWx1cmVUeXBlKFJlc291cmNlSGFuZGxlOjpOb0ZhaWx1cmUpCiAg
ICAgICAgICAgICAsIG1fZmFpbHVyZVRpbWVyKGxvYWRlciwgJlJlc291cmNlSGFuZGxlOjpmaXJl
RmFpbHVyZSkKICAgICAgICAgewotICAgICAgICAgICAgY29uc3QgS1VSTCYgdXJsID0gbV9yZXF1
ZXN0LnVybCgpOworICAgICAgICAgICAgY29uc3QgS1VSTCYgdXJsID0gbV9maXJzdFJlcXVlc3Qu
dXJsKCk7CiAgICAgICAgICAgICBtX3VzZXIgPSB1cmwudXNlcigpOwogICAgICAgICAgICAgbV9w
YXNzID0gdXJsLnBhc3MoKTsKLSAgICAgICAgICAgIG1fcmVxdWVzdC5yZW1vdmVDcmVkZW50aWFs
cygpOworICAgICAgICAgICAgbV9maXJzdFJlcXVlc3QucmVtb3ZlQ3JlZGVudGlhbHMoKTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgflJlc291cmNlSGFuZGxlSW50ZXJuYWwoKTsKQEAg
LTE0Nyw3ICsxNDcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFJlc291cmNlSGFu
ZGxlQ2xpZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogICAgICAgICBSZXNvdXJj
ZUhhbmRsZUNsaWVudCogbV9jbGllbnQ7CiAgICAgICAgIAotICAgICAgICBSZXNvdXJjZVJlcXVl
c3QgbV9yZXF1ZXN0OworICAgICAgICBSZXNvdXJjZVJlcXVlc3QgbV9maXJzdFJlcXVlc3Q7CiAg
ICAgICAgIFN0cmluZyBtX2xhc3RIVFRQTWV0aG9kOwogCiAgICAgICAgIC8vIFN1Z2dlc3RlZCBj
cmVkZW50aWFscyBmb3IgdGhlIGN1cnJlbnQgcmVkaXJlY3Rpb24gc3RlcC4KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAJ
KHJldmlzaW9uIDYzMTA4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNl
SGFuZGxlQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NiwzNiArNjYsNDMgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBzdGF0aWMgQ0ZTdHJpbmdSZWYgV2ViQ29yZVN5bmNocm9ub3VzTG9h
ZGVyUnVuTG9vcE1vZGUgPSBDRlNUUigiV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyUnVuTG9vcE1v
ZGUiKTsKIAotY2xhc3MgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyIHsKK2NsYXNzIFdlYkNvcmVT
eW5jaHJvbm91c0xvYWRlckNsaWVudCA6IHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNsaWVudCB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGxvYWQoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNlUmVzcG9uc2UmLCBSZXNvdXJj
ZUVycm9yJik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVy
Q2xpZW50PiBjcmVhdGUoUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFJlc291cmNlRXJyb3Im
IGVycm9yKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBXZWJDb3JlU3luY2hy
b25vdXNMb2FkZXJDbGllbnQocmVzcG9uc2UsIGVycm9yKSk7CisgICAgfQorCisgICAgdm9pZCBz
ZXRBbGxvd1N0b3JlZENyZWRlbnRpYWxzKGJvb2wgYWxsb3cpIHsgbV9hbGxvd1N0b3JlZENyZWRl
bnRpYWxzID0gYWxsb3c7IH0KKyAgICBib29sIGlzRG9uZSgpIHsgcmV0dXJuIG1faXNEb25lOyB9
CisKKyAgICBDRk11dGFibGVEYXRhUmVmIGRhdGEoKSB7IHJldHVybiBtX2RhdGEuZ2V0KCk7IH0K
KworICAgIHZpcnR1YWwgdm9pZCB3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VIYW5kbGUqLCBSZXNv
dXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiAvKnJlZGlyZWN0UmVzcG9uc2Uq
Lyk7CisgICAgdmlydHVhbCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFJlc291cmNl
SGFuZGxlKik7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVz
b3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50LCBpbnQgLypsZW5ndGhSZWNlaXZlZCovKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSopOworICAg
IHZpcnR1YWwgdm9pZCBkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJv
ciYpOworI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCisgICAgdmlydHVh
bCBib29sIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoUmVzb3VyY2VIYW5k
bGUqLCBjb25zdCBQcm90ZWN0aW9uU3BhY2UmKTsKKyNlbmRpZgogCiBwcml2YXRlOgotICAgIFdl
YkNvcmVTeW5jaHJvbm91c0xvYWRlcihSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgUmVzb3Vy
Y2VFcnJvciYgZXJyb3IpCi0gICAgICAgIDogbV9pc0RvbmUoZmFsc2UpCisgICAgV2ViQ29yZVN5
bmNocm9ub3VzTG9hZGVyQ2xpZW50KFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBSZXNvdXJj
ZUVycm9yJiBlcnJvcikKKyAgICAgICAgOiBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHMoZmFsc2Up
CiAgICAgICAgICwgbV9yZXNwb25zZShyZXNwb25zZSkKICAgICAgICAgLCBtX2Vycm9yKGVycm9y
KQorICAgICAgICAsIG1faXNEb25lKGZhbHNlKQogICAgIHsKICAgICB9CiAKLSAgICBzdGF0aWMg
Q0ZVUkxSZXF1ZXN0UmVmIHdpbGxTZW5kUmVxdWVzdChDRlVSTENvbm5lY3Rpb25SZWYsIENGVVJM
UmVxdWVzdFJlZiwgQ0ZVUkxSZXNwb25zZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Ci0g
ICAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKENGVVJMQ29ubmVjdGlvblJlZiwgQ0ZV
UkxSZXNwb25zZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Ci0gICAgc3RhdGljIHZvaWQg
ZGlkUmVjZWl2ZURhdGEoQ0ZVUkxDb25uZWN0aW9uUmVmLCBDRkRhdGFSZWYsIENGSW5kZXgsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pOwotICAgIHN0YXRpYyB2b2lkIGRpZEZpbmlzaExvYWRpbmco
Q0ZVUkxDb25uZWN0aW9uUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKLSAgICBzdGF0aWMg
dm9pZCBkaWRGYWlsKENGVVJMQ29ubmVjdGlvblJlZiwgQ0ZFcnJvclJlZiwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbyk7Ci0gICAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZUNoYWxsZW5nZShDRlVSTENv
bm5lY3Rpb25SZWYsIENGVVJMQXV0aENoYWxsZW5nZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5m
byk7Ci0gICAgc3RhdGljIEJvb2xlYW4gc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoQ0ZVUkxD
b25uZWN0aW9uUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKLQotICAgIGJvb2wgbV9pc0Rv
bmU7Ci0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBtX3VybDsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJp
bmdSZWY+IG1fdXNlcjsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IG1fcGFzczsKLSAgICAv
LyBTdG9yZSB0aGUgcHJlZW1wdGl2ZWx5IHVzZWQgaW5pdGlhbCBjcmVkZW50aWFsIHNvIHRoYXQg
aWYgd2UgZ2V0IGFuIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZSwgd2Ugd29uJ3QgdXNlIHRoZSBz
YW1lIG9uZSBhZ2Fpbi4KLSAgICBDcmVkZW50aWFsIG1faW5pdGlhbENyZWRlbnRpYWw7CiAgICAg
Ym9vbCBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHM7CiAgICAgUmVzb3VyY2VSZXNwb25zZSYgbV9y
ZXNwb25zZTsKICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4gbV9kYXRhOwogICAgIFJl
c291cmNlRXJyb3ImIG1fZXJyb3I7CisgICAgYm9vbCBtX2lzRG9uZTsKIH07CiAKIHN0YXRpYyBI
YXNoU2V0PFN0cmluZz4mIGFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGVIb3N0cygpCkBAIC0xMzcs
NyArMTQ0LDcgQEAgQ0ZVUkxSZXF1ZXN0UmVmIHdpbGxTZW5kUmVxdWVzdChDRlVSTENvbgogICAg
ICAgICByZXR1cm4gY2ZSZXF1ZXN0OwogICAgIH0KIAotICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQg
LSB3aWxsU2VuZFJlcXVlc3QoY29ubj0lcCwgaGFuZGxlPSVwKSAoJXMpIiwgY29ubiwgaGFuZGxl
LCBoYW5kbGUtPnJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBM
T0coTmV0d29yaywgIkNGTmV0IC0gd2lsbFNlbmRSZXF1ZXN0KGNvbm49JXAsIGhhbmRsZT0lcCkg
KCVzKSIsIGNvbm4sIGhhbmRsZSwgaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKIAogICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0OwogICAgIGlm
IChjZlJlZGlyZWN0UmVzcG9uc2UpIHsKQEAgLTE0OSwxMSArMTU2LDExIEBAIENGVVJMUmVxdWVz
dFJlZiB3aWxsU2VuZFJlcXVlc3QoQ0ZVUkxDb24KICAgICAgICAgICAgICAgICBSZXRhaW5QdHI8
Q0ZNdXRhYmxlVVJMUmVxdWVzdFJlZj4gbXV0YWJsZVJlcXVlc3QoQWRvcHRDRiwgQ0ZVUkxSZXF1
ZXN0Q3JlYXRlTXV0YWJsZUNvcHkoMCwgY2ZSZXF1ZXN0KSk7CiAgICAgICAgICAgICAgICAgQ0ZV
UkxSZXF1ZXN0U2V0SFRUUFJlcXVlc3RNZXRob2QobXV0YWJsZVJlcXVlc3QuZ2V0KCksIGxhc3RI
VFRQTWV0aG9kLmdldCgpKTsKIAotICAgICAgICAgICAgICAgIEZvcm1EYXRhKiBib2R5ID0gaGFu
ZGxlLT5yZXF1ZXN0KCkuaHR0cEJvZHkoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWVxdWFsSWdu
b3JpbmdDYXNlKGhhbmRsZS0+cmVxdWVzdCgpLmh0dHBNZXRob2QoKSwgIkdFVCIpICYmIGJvZHkg
JiYgIWJvZHktPmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBGb3JtRGF0YSogYm9keSA9IGhh
bmRsZS0+Zmlyc3RSZXF1ZXN0KCkuaHR0cEJvZHkoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWVx
dWFsSWdub3JpbmdDYXNlKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkuaHR0cE1ldGhvZCgpLCAiR0VU
IikgJiYgYm9keSAmJiAhYm9keS0+aXNFbXB0eSgpKQogICAgICAgICAgICAgICAgICAgICBXZWJD
b3JlOjpzZXRIVFRQQm9keShtdXRhYmxlUmVxdWVzdC5nZXQoKSwgYm9keSk7CiAKLSAgICAgICAg
ICAgICAgICBTdHJpbmcgb3JpZ2luYWxDb250ZW50VHlwZSA9IGhhbmRsZS0+cmVxdWVzdCgpLmh0
dHBDb250ZW50VHlwZSgpOworICAgICAgICAgICAgICAgIFN0cmluZyBvcmlnaW5hbENvbnRlbnRU
eXBlID0gaGFuZGxlLT5maXJzdFJlcXVlc3QoKS5odHRwQ29udGVudFR5cGUoKTsKICAgICAgICAg
ICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IG9yaWdpbmFsQ29udGVudFR5cGVDRihBZG9w
dENGLCBvcmlnaW5hbENvbnRlbnRUeXBlLmNyZWF0ZUNGU3RyaW5nKCkpOwogICAgICAgICAgICAg
ICAgIGlmICghb3JpZ2luYWxDb250ZW50VHlwZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAg
ICAgIENGVVJMUmVxdWVzdFNldEhUVFBIZWFkZXJGaWVsZFZhbHVlKG11dGFibGVSZXF1ZXN0Lmdl
dCgpLCBDRlNUUigiQ29udGVudC1UeXBlIiksIG9yaWdpbmFsQ29udGVudFR5cGVDRi5nZXQoKSk7
CkBAIC0xODQsNyArMTkxLDcgQEAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoQ0ZVUkxDb25uZWN0
aW9uUgogewogICAgIFJlc291cmNlSGFuZGxlKiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJj
ZUhhbmRsZSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKIAotICAgIExPRyhOZXR3
b3JrLCAiQ0ZOZXQgLSBkaWRSZWNlaXZlUmVzcG9uc2UoY29ubj0lcCwgaGFuZGxlPSVwKSAoJXMp
IiwgY29ubiwgaGFuZGxlLCBoYW5kbGUtPnJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKKyAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gZGlkUmVjZWl2ZVJlc3BvbnNlKGNv
bm49JXAsIGhhbmRsZT0lcCkgKCVzKSIsIGNvbm4sIGhhbmRsZSwgaGFuZGxlLT5maXJzdFJlcXVl
c3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAogICAgIGlmICghaGFuZGxlLT5j
bGllbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjA0LDcgKzIxMSw3IEBAIHZvaWQgZGlkUmVj
ZWl2ZURhdGEoQ0ZVUkxDb25uZWN0aW9uUmVmIGMKICAgICBjb25zdCBVSW50OCogYnl0ZXMgPSBD
RkRhdGFHZXRCeXRlUHRyKGRhdGEpOwogICAgIENGSW5kZXggbGVuZ3RoID0gQ0ZEYXRhR2V0TGVu
Z3RoKGRhdGEpOwogCi0gICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIGRpZFJlY2VpdmVEYXRhKGNv
bm49JXAsIGhhbmRsZT0lcCwgYnl0ZXM9JWQpICglcykiLCBjb25uLCBoYW5kbGUsIGxlbmd0aCwg
aGFuZGxlLT5yZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgTE9H
KE5ldHdvcmssICJDRk5ldCAtIGRpZFJlY2VpdmVEYXRhKGNvbm49JXAsIGhhbmRsZT0lcCwgYnl0
ZXM9JWQpICglcykiLCBjb25uLCBoYW5kbGUsIGxlbmd0aCwgaGFuZGxlLT5maXJzdFJlcXVlc3Qo
KS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAogICAgIGlmIChoYW5kbGUtPmNsaWVu
dCgpKQogICAgICAgICBoYW5kbGUtPmNsaWVudCgpLT5kaWRSZWNlaXZlRGF0YShoYW5kbGUsIChj
b25zdCBjaGFyKilieXRlcywgbGVuZ3RoLCBvcmlnaW5hbExlbmd0aCk7CkBAIC0yMjIsNyArMjI5
LDcgQEAgc3RhdGljIEJvb2xlYW4gc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZwogewogICAgIFJl
c291cmNlSGFuZGxlKiBoYW5kbGUgPSBjb25zdF9jYXN0PFJlc291cmNlSGFuZGxlKj4oc3RhdGlj
X2Nhc3Q8Y29uc3QgUmVzb3VyY2VIYW5kbGUqPihjbGllbnRJbmZvKSk7CiAKLSAgICBMT0coTmV0
d29yaywgIkNGTmV0IC0gc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoY29ubj0lcCwgaGFuZGxl
PSVwKSAoJXMpIiwgY29ubiwgaGFuZGxlLCBoYW5kbGUtPnJlcXVlc3QoKS51cmwoKS5zdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKKyAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gc2hvdWxkVXNlQ3Jl
ZGVudGlhbFN0b3JhZ2UoY29ubj0lcCwgaGFuZGxlPSVwKSAoJXMpIiwgY29ubiwgaGFuZGxlLCBo
YW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCiAg
ICAgaWYgKCFoYW5kbGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIzNCw3ICsyNDEsNyBA
QCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoQ0ZVUkxDb25uZWN0aW9uUmVmCiB7CiAgICAgUmVzb3Vy
Y2VIYW5kbGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oY29uc3RfY2Fz
dDx2b2lkKj4oY2xpZW50SW5mbykpOwogCi0gICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIGRpZEZp
bmlzaExvYWRpbmcoY29ubj0lcCwgaGFuZGxlPSVwKSAoJXMpIiwgY29ubiwgaGFuZGxlLCBoYW5k
bGUtPnJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBMT0coTmV0
d29yaywgIkNGTmV0IC0gZGlkRmluaXNoTG9hZGluZyhjb25uPSVwLCBoYW5kbGU9JXApICglcyki
LCBjb25uLCBoYW5kbGUsIGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7CiAKICAgICBpZiAoaGFuZGxlLT5jbGllbnQoKSkKICAgICAgICAgaGFuZGxl
LT5jbGllbnQoKS0+ZGlkRmluaXNoTG9hZGluZyhoYW5kbGUpOwpAQCAtMjQ0LDcgKzI1MSw3IEBA
IHZvaWQgZGlkRmFpbChDRlVSTENvbm5lY3Rpb25SZWYgY29ubiwgQ0YKIHsKICAgICBSZXNvdXJj
ZUhhbmRsZSogaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihjb25zdF9jYXN0
PHZvaWQqPihjbGllbnRJbmZvKSk7CiAKLSAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gZGlkRmFp
bChjb25uPSVwLCBoYW5kbGU9JXAsIGVycm9yID0gJXApICglcykiLCBjb25uLCBoYW5kbGUsIGVy
cm9yLCBoYW5kbGUtPnJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICBMT0coTmV0d29yaywgIkNGTmV0IC0gZGlkRmFpbChjb25uPSVwLCBoYW5kbGU9JXAsIGVycm9y
ID0gJXApICglcykiLCBjb25uLCBoYW5kbGUsIGVycm9yLCBoYW5kbGUtPmZpcnN0UmVxdWVzdCgp
LnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgaWYgKGhhbmRsZS0+Y2xpZW50
KCkpCiAgICAgICAgIGhhbmRsZS0+Y2xpZW50KCktPmRpZEZhaWwoaGFuZGxlLCBSZXNvdXJjZUVy
cm9yKGVycm9yKSk7CkBAIC0yNzcsNyArMjg0LDcgQEAgdm9pZCBkaWRSZWNlaXZlQ2hhbGxlbmdl
KENGVVJMQ29ubmVjdGlvbgogewogICAgIFJlc291cmNlSGFuZGxlKiBoYW5kbGUgPSBzdGF0aWNf
Y2FzdDxSZXNvdXJjZUhhbmRsZSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKICAg
ICBBU1NFUlQoaGFuZGxlKTsKLSAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gZGlkUmVjZWl2ZUNo
YWxsZW5nZShjb25uPSVwLCBoYW5kbGU9JXAgKCVzKSIsIGNvbm4sIGhhbmRsZSwgaGFuZGxlLT5y
ZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgTE9HKE5ldHdvcmss
ICJDRk5ldCAtIGRpZFJlY2VpdmVDaGFsbGVuZ2UoY29ubj0lcCwgaGFuZGxlPSVwICglcykiLCBj
b25uLCBoYW5kbGUsIGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CiAKICAgICBoYW5kbGUtPmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjaGFsbGVuZ2UsIGhhbmRsZSkpOwogfQpAQCAtMzAw
LDE0ICszMDcsMTQgQEAgdm9pZCBhZGRIZWFkZXJzRnJvbUhhc2hNYXAoQ0ZNdXRhYmxlVVJMUgog
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwoKQogewogICAg
IGlmIChtX2Nvbm5lY3Rpb24pIHsKLSAgICAgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIENhbmNl
bGxpbmcgY29ubmVjdGlvbiAlcCAoJXMpIiwgbV9jb25uZWN0aW9uLCBtX3JlcXVlc3QudXJsKCku
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBD
YW5jZWxsaW5nIGNvbm5lY3Rpb24gJXAgKCVzKSIsIG1fY29ubmVjdGlvbiwgbV9maXJzdFJlcXVl
c3QudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIENGVVJMQ29ubmVjdGlv
bkNhbmNlbChtX2Nvbm5lY3Rpb24uZ2V0KCkpOwogICAgIH0KIH0KIAogUmVzb3VyY2VIYW5kbGU6
On5SZXNvdXJjZUhhbmRsZSgpCiB7Ci0gICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIERlc3Ryb3lp
bmcgam9iICVwICglcykiLCB0aGlzLCBkLT5tX3JlcXVlc3QudXJsKCkuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CisgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIERlc3Ryb3lpbmcgam9iICVwICgl
cykiLCB0aGlzLCBkLT5tX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKIH0KIAogQ0ZBcnJheVJlZiBhcnJheUZyb21Gb3JtRGF0YShjb25zdCBGb3JtRGF0YSYgZCkK
QEAgLTM5MCw1NiArMzk3LDYwIEBAIHN0YXRpYyBDRkRpY3Rpb25hcnlSZWYgY3JlYXRlQ29ubmVj
dGlvblAKICAgICByZXR1cm4gcHJvcGVydGllc0RpY3Rpb25hcnk7CiB9CiAKLWJvb2wgUmVzb3Vy
Y2VIYW5kbGU6OnN0YXJ0KEZyYW1lKiBmcmFtZSkKK0NGVVJMQ29ubmVjdGlvblJlZiBSZXNvdXJj
ZUhhbmRsZTo6Y3JlYXRlQ0ZVUkxDb25uZWN0aW9uKGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0
b3JhZ2UsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmKQogewotICAgIC8vIElmIHdlIGFyZSBubyBs
b25nZXIgYXR0YWNoZWQgdG8gYSBQYWdlLCB0aGlzIG11c3QgYmUgYW4gYXR0ZW1wdGVkIGxvYWQg
ZnJvbSBhbgotICAgIC8vIG9uVW5sb2FkIGhhbmRsZXIsIHNvIGxldCdzIGp1c3QgYmxvY2sgaXQu
Ci0gICAgaWYgKCFmcmFtZS0+cGFnZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoKCFkLT5tX3VzZXIuaXNFbXB0eSgpIHx8ICFkLT5tX3Bhc3MuaXNFbXB0eSgpKSAmJiAhZC0+
bV9yZXF1ZXN0LnVybCgpLnByb3RvY29sSW5IVFRQRmFtaWx5KCkpIHsKKyAgICBpZiAoKCFkLT5t
X3VzZXIuaXNFbXB0eSgpIHx8ICFkLT5tX3Bhc3MuaXNFbXB0eSgpKSAmJiAhZmlyc3RSZXF1ZXN0
KCkudXJsKCkucHJvdG9jb2xJbkhUVFBGYW1pbHkoKSkgewogICAgICAgICAvLyBDcmVkZW50aWFs
cyBmb3IgZnRwIGNhbiBvbmx5IGJlIHBhc3NlZCBpbiBVUkwsIHRoZSBkaWRSZWNlaXZlQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UgZGVsZWdhdGUgY2FsbCB3b24ndCBiZSBtYWRlLgotICAgICAgICBL
VVJMIHVybFdpdGhDcmVkZW50aWFscyhkLT5tX3JlcXVlc3QudXJsKCkpOworICAgICAgICBLVVJM
IHVybFdpdGhDcmVkZW50aWFscyhmaXJzdFJlcXVlc3QoKS51cmwoKSk7CiAgICAgICAgIHVybFdp
dGhDcmVkZW50aWFscy5zZXRVc2VyKGQtPm1fdXNlcik7CiAgICAgICAgIHVybFdpdGhDcmVkZW50
aWFscy5zZXRQYXNzKGQtPm1fcGFzcyk7Ci0gICAgICAgIGQtPm1fcmVxdWVzdC5zZXRVUkwodXJs
V2l0aENyZWRlbnRpYWxzKTsKKyAgICAgICAgZmlyc3RSZXF1ZXN0KCkuc2V0VVJMKHVybFdpdGhD
cmVkZW50aWFscyk7CiAgICAgfQogCi0gICAgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFn
ZSA9ICFjbGllbnQoKSB8fCBjbGllbnQoKS0+c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UodGhp
cyk7Ci0KICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNzE3NDA1MD4gLSBGb3IgVVJMcyB0aGF0IG1h
dGNoIHRoZSBwYXRocyBvZiB0aG9zZSBwcmV2aW91c2x5IGNoYWxsZW5nZWQgZm9yIEhUVFAgQmFz
aWMgYXV0aGVudGljYXRpb24sIAogICAgIC8vIHRyeSBhbmQgcmV1c2UgdGhlIGNyZWRlbnRpYWwg
cHJlZW1wdGl2ZWx5LCBhcyBhbGxvd2VkIGJ5IFJGQyAyNjE3LgotICAgIGlmIChzaG91bGRVc2VD
cmVkZW50aWFsU3RvcmFnZSAmJiBkLT5tX3JlcXVlc3QudXJsKCkucHJvdG9jb2xJbkhUVFBGYW1p
bHkoKSkgeworICAgIGlmIChzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSAmJiBmaXJzdFJlcXVl
c3QoKS51cmwoKS5wcm90b2NvbEluSFRUUEZhbWlseSgpKSB7CiAgICAgICAgIGlmIChkLT5tX3Vz
ZXIuaXNFbXB0eSgpICYmIGQtPm1fcGFzcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8vIDxy
ZGFyOi8vcHJvYmxlbS83MTc0MDUwPiAtIEZvciBVUkxzIHRoYXQgbWF0Y2ggdGhlIHBhdGhzIG9m
IHRob3NlIHByZXZpb3VzbHkgY2hhbGxlbmdlZCBmb3IgSFRUUCBCYXNpYyBhdXRoZW50aWNhdGlv
biwgCiAgICAgICAgICAgICAvLyB0cnkgYW5kIHJldXNlIHRoZSBjcmVkZW50aWFsIHByZWVtcHRp
dmVseSwgYXMgYWxsb3dlZCBieSBSRkMgMjYxNy4KLSAgICAgICAgICAgIGQtPm1faW5pdGlhbENy
ZWRlbnRpYWwgPSBDcmVkZW50aWFsU3RvcmFnZTo6Z2V0KGQtPm1fcmVxdWVzdC51cmwoKSk7Cisg
ICAgICAgICAgICBkLT5tX2luaXRpYWxDcmVkZW50aWFsID0gQ3JlZGVudGlhbFN0b3JhZ2U6Omdl
dChmaXJzdFJlcXVlc3QoKS51cmwoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAv
LyBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgcHJvdGVjdGlvbiBzcGFjZSBrbm93biBmb3IgdGhlIFVS
TCwgdXBkYXRlIHN0b3JlZCBjcmVkZW50aWFscyBiZWZvcmUgc2VuZGluZyBhIHJlcXVlc3QuCiAg
ICAgICAgICAgICAvLyBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGltcGxlbWVudCBsb2dvdXQg
Ynkgc2VuZGluZyBhbiBYTUxIdHRwUmVxdWVzdCB3aXRoIGtub3duIGluY29ycmVjdCBjcmVkZW50
aWFscywgYW5kIGFib3J0aW5nIGl0IGltbWVkaWF0ZWx5CiAgICAgICAgICAgICAvLyAoc28gdGhh
dCBhbiBhdXRoZW50aWNhdGlvbiBkaWFsb2cgZG9lc24ndCBwb3AgdXApLgotICAgICAgICAgICAg
Q3JlZGVudGlhbFN0b3JhZ2U6OnNldChDcmVkZW50aWFsKGQtPm1fdXNlciwgZC0+bV9wYXNzLCBD
cmVkZW50aWFsUGVyc2lzdGVuY2VOb25lKSwgZC0+bV9yZXF1ZXN0LnVybCgpKTsKKyAgICAgICAg
ICAgIENyZWRlbnRpYWxTdG9yYWdlOjpzZXQoQ3JlZGVudGlhbChkLT5tX3VzZXIsIGQtPm1fcGFz
cywgQ3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZSksIGZpcnN0UmVxdWVzdCgpLnVybCgpKTsKICAg
ICAgICAgfQogICAgIH0KICAgICAgICAgCiAgICAgaWYgKCFkLT5tX2luaXRpYWxDcmVkZW50aWFs
LmlzRW1wdHkoKSkgewogICAgICAgICBTdHJpbmcgYXV0aEhlYWRlciA9ICJCYXNpYyAiICsgZW5j
b2RlQmFzaWNBdXRob3JpemF0aW9uKGQtPm1faW5pdGlhbENyZWRlbnRpYWwudXNlcigpLCBkLT5t
X2luaXRpYWxDcmVkZW50aWFsLnBhc3N3b3JkKCkpOwotICAgICAgICBkLT5tX3JlcXVlc3QuYWRk
SFRUUEhlYWRlckZpZWxkKCJBdXRob3JpemF0aW9uIiwgYXV0aEhlYWRlcik7CisgICAgICAgIGZp
cnN0UmVxdWVzdCgpLmFkZEhUVFBIZWFkZXJGaWVsZCgiQXV0aG9yaXphdGlvbiIsIGF1dGhIZWFk
ZXIpOwogICAgIH0KIAotICAgIFJldGFpblB0cjxDRlVSTFJlcXVlc3RSZWY+IHJlcXVlc3QoQWRv
cHRDRiwgbWFrZUZpbmFsUmVxdWVzdChkLT5tX3JlcXVlc3QsIGQtPm1fc2hvdWxkQ29udGVudFNu
aWZmKSk7Ci0KLSAgICBDRlVSTENvbm5lY3Rpb25DbGllbnRfVjMgY2xpZW50ID0geyAzLCB0aGlz
LCAwLCAwLCAwLCBXZWJDb3JlOjp3aWxsU2VuZFJlcXVlc3QsIGRpZFJlY2VpdmVSZXNwb25zZSwg
ZGlkUmVjZWl2ZURhdGEsIE5VTEwsIGRpZEZpbmlzaExvYWRpbmcsIGRpZEZhaWwsIHdpbGxDYWNo
ZVJlc3BvbnNlLCBkaWRSZWNlaXZlQ2hhbGxlbmdlLCBkaWRTZW5kQm9keURhdGEsIHNob3VsZFVz
ZUNyZWRlbnRpYWxTdG9yYWdlQ2FsbGJhY2ssIDB9OworICAgIFJldGFpblB0cjxDRlVSTFJlcXVl
c3RSZWY+IHJlcXVlc3QoQWRvcHRDRiwgbWFrZUZpbmFsUmVxdWVzdChmaXJzdFJlcXVlc3QoKSwg
c2hvdWxkQ29udGVudFNuaWZmKSk7CiAKKyAgICBDRlVSTENvbm5lY3Rpb25DbGllbnRfVjMgY2xp
ZW50ID0geyAzLCB0aGlzLCAwLCAwLCAwLCBXZWJDb3JlOjp3aWxsU2VuZFJlcXVlc3QsIGRpZFJl
Y2VpdmVSZXNwb25zZSwgZGlkUmVjZWl2ZURhdGEsIDAsIGRpZEZpbmlzaExvYWRpbmcsIGRpZEZh
aWwsIHdpbGxDYWNoZVJlc3BvbnNlLCBkaWRSZWNlaXZlQ2hhbGxlbmdlLCBkaWRTZW5kQm9keURh
dGEsIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlQ2FsbGJhY2ssIDB9OwogICAgIFJldGFpblB0
cjxDRkRpY3Rpb25hcnlSZWY+IGNvbm5lY3Rpb25Qcm9wZXJ0aWVzKEFkb3B0Q0YsIGNyZWF0ZUNv
bm5lY3Rpb25Qcm9wZXJ0aWVzKHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKSk7CiAKLSAgICBk
LT5tX2Nvbm5lY3Rpb24uYWRvcHRDRihDRlVSTENvbm5lY3Rpb25DcmVhdGVXaXRoUHJvcGVydGll
cygwLCByZXF1ZXN0LmdldCgpLCByZWludGVycHJldF9jYXN0PENGVVJMQ29ubmVjdGlvbkNsaWVu
dCo+KCZjbGllbnQpLCBjb25uZWN0aW9uUHJvcGVydGllcy5nZXQoKSkpOworICAgIHJldHVybiBD
RlVSTENvbm5lY3Rpb25DcmVhdGVXaXRoUHJvcGVydGllcygwLCByZXF1ZXN0LmdldCgpLCByZWlu
dGVycHJldF9jYXN0PENGVVJMQ29ubmVjdGlvbkNsaWVudCo+KCZjbGllbnQpLCBjb25uZWN0aW9u
UHJvcGVydGllcy5nZXQoKSk7Cit9CisKK2Jvb2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KEZyYW1l
KiBmcmFtZSkKK3sKKyAgICAvLyBJZiB3ZSBhcmUgbm8gbG9uZ2VyIGF0dGFjaGVkIHRvIGEgUGFn
ZSwgdGhpcyBtdXN0IGJlIGFuIGF0dGVtcHRlZCBsb2FkIGZyb20gYW4KKyAgICAvLyBvblVubG9h
ZCBoYW5kbGVyLCBzbyBsZXQncyBqdXN0IGJsb2NrIGl0LgorICAgIGlmICghZnJhbWUtPnBhZ2Uo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFs
U3RvcmFnZSA9ICFjbGllbnQoKSB8fCBjbGllbnQoKS0+c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3Jh
Z2UodGhpcyk7CisKKyAgICBkLT5tX2Nvbm5lY3Rpb24uYWRvcHRDRihjcmVhdGVDRlVSTENvbm5l
Y3Rpb24oc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UsIGQtPm1fc2hvdWxkQ29udGVudFNuaWZm
KSk7CiAKICAgICBDRlVSTENvbm5lY3Rpb25TY2hlZHVsZVdpdGhDdXJyZW50TWVzc2FnZVF1ZXVl
KGQtPm1fY29ubmVjdGlvbi5nZXQoKSk7CiAgICAgQ0ZVUkxDb25uZWN0aW9uU2NoZWR1bGVEb3du
bG9hZFdpdGhSdW5Mb29wKGQtPm1fY29ubmVjdGlvbi5nZXQoKSwgbG9hZGVyUnVuTG9vcCgpLCBr
Q0ZSdW5Mb29wRGVmYXVsdE1vZGUpOwogICAgIENGVVJMQ29ubmVjdGlvblN0YXJ0KGQtPm1fY29u
bmVjdGlvbi5nZXQoKSk7CiAKLSAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gU3RhcnRpbmcgVVJM
ICVzIChoYW5kbGU9JXAsIGNvbm49JXApIiwgZC0+bV9yZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCksIHRoaXMsIGQtPm1fY29ubmVjdGlvbik7CisgICAgTE9HKE5ldHdvcmssICJD
Rk5ldCAtIFN0YXJ0aW5nIFVSTCAlcyAoaGFuZGxlPSVwLCBjb25uPSVwKSIsIGZpcnN0UmVxdWVz
dCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRoaXMsIGQtPm1fY29ubmVjdGlvbik7
CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTUwMCw3ICs1MTEsNyBAQCB2b2lkIFJlc291cmNl
SGFuZGxlOjpkaWRSZWNlaXZlQXV0aGVudGljCiAgICAgICAgIAogICAgICAgICBLVVJMIHVybFRv
U3RvcmU7CiAgICAgICAgIGlmIChjaGFsbGVuZ2UuZmFpbHVyZVJlc3BvbnNlKCkuaHR0cFN0YXR1
c0NvZGUoKSA9PSA0MDEpCi0gICAgICAgICAgICB1cmxUb1N0b3JlID0gZC0+bV9yZXF1ZXN0LnVy
bCgpOworICAgICAgICAgICAgdXJsVG9TdG9yZSA9IGZpcnN0UmVxdWVzdCgpLnVybCgpOwogICAg
ICAgICBDcmVkZW50aWFsU3RvcmFnZTo6c2V0KGNvcmUoY3JlZGVudGlhbC5nZXQoKSksIGNoYWxs
ZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSwgdXJsVG9TdG9yZSk7CiAgICAgICAgIAogICAgICAgICBD
RlVSTENvbm5lY3Rpb25Vc2VDcmVkZW50aWFsKGQtPm1fY29ubmVjdGlvbi5nZXQoKSwgY3JlZGVu
dGlhbC5nZXQoKSwgY2hhbGxlbmdlLmNmVVJMQXV0aENoYWxsZW5nZVJlZigpKTsKQEAgLTUxNiw3
ICs1MjcsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpkaWRSZWNlaXZlQXV0aGVudGljCiAgICAg
ICAgICAgICBBU1NFUlQoY3JlZGVudGlhbC5wZXJzaXN0ZW5jZSgpID09IENyZWRlbnRpYWxQZXJz
aXN0ZW5jZU5vbmUpOwogICAgICAgICAgICAgaWYgKGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9uc2Uo
KS5odHRwU3RhdHVzQ29kZSgpID09IDQwMSkgewogICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRo
ZSBjcmVkZW50aWFsIGJhY2ssIHBvc3NpYmx5IGFkZGluZyBpdCBhcyBhIGRlZmF1bHQgZm9yIHRo
aXMgZGlyZWN0b3J5LgotICAgICAgICAgICAgICAgIENyZWRlbnRpYWxTdG9yYWdlOjpzZXQoY3Jl
ZGVudGlhbCwgY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLCBkLT5tX3JlcXVlc3QudXJsKCkp
OworICAgICAgICAgICAgICAgIENyZWRlbnRpYWxTdG9yYWdlOjpzZXQoY3JlZGVudGlhbCwgY2hh
bGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLCBmaXJzdFJlcXVlc3QoKS51cmwoKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZVUkxDcmVkZW50aWFsUmVmPiBjZkNyZWRl
bnRpYWwoQWRvcHRDRiwgY3JlYXRlQ0YoY3JlZGVudGlhbCkpOwogICAgICAgICAgICAgQ0ZVUkxD
b25uZWN0aW9uVXNlQ3JlZGVudGlhbChkLT5tX2Nvbm5lY3Rpb24uZ2V0KCksIGNmQ3JlZGVudGlh
bC5nZXQoKSwgY2hhbGxlbmdlLmNmVVJMQXV0aENoYWxsZW5nZVJlZigpKTsKQEAgLTU1Miw3ICs1
NjMsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENyZWRlbnRpYWwoCiAgICAgICAg
IAogICAgICAgICBLVVJMIHVybFRvU3RvcmU7CiAgICAgICAgIGlmIChjaGFsbGVuZ2UuZmFpbHVy
ZVJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSA9PSA0MDEpCi0gICAgICAgICAgICB1cmxUb1N0
b3JlID0gZC0+bV9yZXF1ZXN0LnVybCgpOyAgICAgIAorICAgICAgICAgICAgdXJsVG9TdG9yZSA9
IGZpcnN0UmVxdWVzdCgpLnVybCgpOyAgICAgIAogICAgICAgICBDcmVkZW50aWFsU3RvcmFnZTo6
c2V0KHdlYkNyZWRlbnRpYWwsIGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSwgdXJsVG9TdG9y
ZSk7CiAKICAgICAgICAgQ0ZVUkxDb25uZWN0aW9uVXNlQ3JlZGVudGlhbChkLT5tX2Nvbm5lY3Rp
b24uZ2V0KCksIGNmQ3JlZGVudGlhbC5nZXQoKSwgY2hhbGxlbmdlLmNmVVJMQXV0aENoYWxsZW5n
ZVJlZigpKTsKQEAgLTU5OCwxMiArNjA5LDQzIEBAIENGVVJMQ29ubmVjdGlvblJlZiBSZXNvdXJj
ZUhhbmRsZTo6cmVsZWEKICAgICByZXR1cm4gZC0+bV9jb25uZWN0aW9uLnJlbGVhc2VSZWYoKTsK
IH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRl
bnRpYWxzLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Us
IFZlY3RvcjxjaGFyPiYgdmVjdG9yLCBGcmFtZSopCit2b2lkIFJlc291cmNlSGFuZGxlOjpsb2Fk
UmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3Rv
cmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNlRXJyb3ImIGVycm9yLCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiB2ZWN0b3IsIEZyYW1lKiBm
cmFtZSkKIHsKKyAgICBMT0coTmV0d29yaywgIlJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VT
eW5jaHJvbm91c2x5OiVzIGFsbG93U3RvcmVkQ3JlZGVudGlhbHM6JXUiLCByZXF1ZXN0LnVybCgp
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHN0b3JlZENyZWRlbnRpYWxzKTsKKwogICAgIEFTU0VS
VCghcmVxdWVzdC5pc0VtcHR5KCkpOwogCi0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YSA9
IFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlcjo6bG9hZChyZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFs
cywgcmVzcG9uc2UsIGVycm9yKTsKKyAgICBBU1NFUlQocmVzcG9uc2UuaXNOdWxsKCkpOworICAg
IEFTU0VSVChlcnJvci5pc051bGwoKSk7CisKKyAgICBPd25QdHI8V2ViQ29yZVN5bmNocm9ub3Vz
TG9hZGVyQ2xpZW50PiBjbGllbnQgPSBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmNy
ZWF0ZShyZXNwb25zZSwgZXJyb3IpOworICAgIGNsaWVudC0+c2V0QWxsb3dTdG9yZWRDcmVkZW50
aWFscyhzdG9yZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzKTsKKworICAg
IFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gYWRvcHRSZWYobmV3IFJlc291cmNlSGFu
ZGxlKHJlcXVlc3QsIGNsaWVudC5nZXQoKSwgZmFsc2UgLypkZWZlcnNMb2FkaW5nKi8sIHRydWUg
LypzaG91bGRDb250ZW50U25pZmYqLykpOworCisgICAgaWYgKGhhbmRsZS0+ZC0+bV9zY2hlZHVs
ZWRGYWlsdXJlVHlwZSAhPSBOb0ZhaWx1cmUpIHsKKyAgICAgICAgZXJyb3IgPSBmcmFtZS0+bG9h
ZGVyKCktPmJsb2NrZWRFcnJvcihyZXF1ZXN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNvbm5lY3Rpb25Qcm9wZXJ0aWVzKEFkb3B0
Q0YsIGNyZWF0ZUNvbm5lY3Rpb25Qcm9wZXJ0aWVzKHN0b3JlZENyZWRlbnRpYWxzID09IEFsbG93
U3RvcmVkQ3JlZGVudGlhbHMpKTsKKworICAgIFJldGFpblB0cjxDRlVSTENvbm5lY3Rpb25SZWY+
IGNvbm5lY3Rpb24oQWRvcHRDRiwgaGFuZGxlLT5jcmVhdGVDRlVSTENvbm5lY3Rpb24oc3RvcmVk
Q3JlZGVudGlhbHMgPT0gQWxsb3dTdG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VIYW5kbGU6OnNo
b3VsZENvbnRlbnRTbmlmZlVSTChyZXF1ZXN0LnVybCgpKSkpOworCisgICAgQ0ZVUkxDb25uZWN0
aW9uU2NoZWR1bGVXaXRoUnVuTG9vcChjb25uZWN0aW9uLmdldCgpLCBDRlJ1bkxvb3BHZXRDdXJy
ZW50KCksIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlclJ1bkxvb3BNb2RlKTsKKyAgICBDRlVSTENv
bm5lY3Rpb25TY2hlZHVsZURvd25sb2FkV2l0aFJ1bkxvb3AoY29ubmVjdGlvbi5nZXQoKSwgQ0ZS
dW5Mb29wR2V0Q3VycmVudCgpLCBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJSdW5Mb29wTW9kZSk7
CisgICAgQ0ZVUkxDb25uZWN0aW9uU3RhcnQoY29ubmVjdGlvbi5nZXQoKSk7CiAKKyAgICB3aGls
ZSAoIWNsaWVudC0+aXNEb25lKCkpCisgICAgICAgIENGUnVuTG9vcFJ1bkluTW9kZShXZWJDb3Jl
U3luY2hyb25vdXNMb2FkZXJSdW5Mb29wTW9kZSwgVUlOVF9NQVgsIHRydWUpOworCisgICAgQ0ZV
UkxDb25uZWN0aW9uQ2FuY2VsKGNvbm5lY3Rpb24uZ2V0KCkpOworICAgIAorICAgIGlmIChlcnJv
ci5pc051bGwoKSAmJiByZXNwb25zZS5taW1lVHlwZSgpLmlzTnVsbCgpKQorICAgICAgICBzZXRE
ZWZhdWx0TUlNRVR5cGUocmVzcG9uc2UuY2ZVUkxSZXNwb25zZSgpKTsKKworICAgIFJldGFpblB0
cjxDRkRhdGFSZWY+IGRhdGEgPSBjbGllbnQtPmRhdGEoKTsKKyAgICAKICAgICBpZiAoIWVycm9y
LmlzTnVsbCgpKSB7CiAgICAgICAgIHJlc3BvbnNlID0gUmVzb3VyY2VSZXNwb25zZShyZXF1ZXN0
LnVybCgpLCBTdHJpbmcoKSwgMCwgU3RyaW5nKCksIFN0cmluZygpKTsKIApAQCAtNjY2LDE3MyAr
NzA4LDUxIEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OndpbGxMb2FkRnJvbUNhY2hlKFIKICAgICBy
ZXR1cm4gY2FjaGVkOwogfQogCi1DRlVSTFJlcXVlc3RSZWYgV2ViQ29yZVN5bmNocm9ub3VzTG9h
ZGVyOjp3aWxsU2VuZFJlcXVlc3QoQ0ZVUkxDb25uZWN0aW9uUmVmLCBDRlVSTFJlcXVlc3RSZWYg
Y2ZSZXF1ZXN0LCBDRlVSTFJlc3BvbnNlUmVmIGNmUmVkaXJlY3RSZXNwb25zZSwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKK3ZvaWQgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50Ojp3aWxs
U2VuZFJlcXVlc3QoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiAvKnJlZGlyZWN0UmVzcG9uc2UqLykKIHsKLSAg
ICBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXIqIGxvYWRlciA9IHN0YXRpY19jYXN0PFdlYkNvcmVT
eW5jaHJvbm91c0xvYWRlcio+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKLQogICAg
IC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGJlIGZpeGVkIHRvIGZvbGxvdyB0aGUgcmVkaXJlY3Qg
Y29ycmVjdGx5IGV2ZW4gZm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cy4KLSAgICBpZiAobG9hZGVy
LT5tX3VybCAmJiAhcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKGxvYWRlci0+bV91cmwuZ2V0
KCksIENGVVJMUmVxdWVzdEdldFVSTChjZlJlcXVlc3QpKSkgeworICAgIGlmICghcHJvdG9jb2xI
b3N0QW5kUG9ydEFyZUVxdWFsKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCksIHJlcXVlc3Qu
dXJsKCkpKSB7CisgICAgICAgIEFTU0VSVCghbV9lcnJvcik7CiAgICAgICAgIFJldGFpblB0cjxD
RkVycm9yUmVmPiBjZkVycm9yKEFkb3B0Q0YsIENGRXJyb3JDcmVhdGUoa0NGQWxsb2NhdG9yRGVm
YXVsdCwga0NGRXJyb3JEb21haW5DRk5ldHdvcmssIGtDRlVSTEVycm9yQmFkU2VydmVyUmVzcG9u
c2UsIDApKTsKLSAgICAgICAgbG9hZGVyLT5tX2Vycm9yID0gY2ZFcnJvci5nZXQoKTsKLSAgICAg
ICAgbG9hZGVyLT5tX2lzRG9uZSA9IHRydWU7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQot
ICAgIGxvYWRlci0+bV91cmwgPSBDRlVSTFJlcXVlc3RHZXRVUkwoY2ZSZXF1ZXN0KTsKLQotICAg
IGlmIChjZlJlZGlyZWN0UmVzcG9uc2UpIHsKLSAgICAgICAgLy8gVGFrZSB1c2VyL3Bhc3Mgb3V0
IG9mIHRoZSBVUkwuCi0gICAgICAgIGxvYWRlci0+bV91c2VyLmFkb3B0Q0YoQ0ZVUkxDb3B5VXNl
ck5hbWUobG9hZGVyLT5tX3VybC5nZXQoKSkpOwotICAgICAgICBsb2FkZXItPm1fcGFzcy5hZG9w
dENGKENGVVJMQ29weVBhc3N3b3JkKGxvYWRlci0+bV91cmwuZ2V0KCkpKTsKLSAgICAgICAgaWYg
KGxvYWRlci0+bV91c2VyIHx8IGxvYWRlci0+bV9wYXNzKSB7Ci0gICAgICAgICAgICBSZXNvdXJj
ZVJlcXVlc3QgcmVxdWVzdFdpdGhvdXRDcmVkZW50aWFscyA9IGNmUmVxdWVzdDsKLSAgICAgICAg
ICAgIHJlcXVlc3RXaXRob3V0Q3JlZGVudGlhbHMucmVtb3ZlQ3JlZGVudGlhbHMoKTsKLSAgICAg
ICAgICAgIGNmUmVxdWVzdCA9IHJlcXVlc3RXaXRob3V0Q3JlZGVudGlhbHMuY2ZVUkxSZXF1ZXN0
KCk7Ci0gICAgICAgIH0KKyAgICAgICAgbV9lcnJvciA9IGNmRXJyb3IuZ2V0KCk7CisgICAgICAg
IG1faXNEb25lID0gdHJ1ZTsKKyAgICAgICAgcmVxdWVzdCA9IDA7CisgICAgICAgIHJldHVybjsK
ICAgICB9Ci0KLSAgICBDRlJldGFpbihjZlJlcXVlc3QpOwotICAgIHJldHVybiBjZlJlcXVlc3Q7
CiB9Ci0KLXZvaWQgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2Uo
Q0ZVUkxDb25uZWN0aW9uUmVmLCBDRlVSTFJlc3BvbnNlUmVmIGNmUmVzcG9uc2UsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pIAordm9pZCBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmRp
ZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlKQogewotICAgIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlciogbG9hZGVyID0gc3Rh
dGljX2Nhc3Q8V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xp
ZW50SW5mbykpOwotCi0gICAgbG9hZGVyLT5tX3Jlc3BvbnNlID0gY2ZSZXNwb25zZTsKKyAgICBt
X3Jlc3BvbnNlID0gcmVzcG9uc2U7CiB9CiAKLXZvaWQgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVy
OjpkaWRSZWNlaXZlRGF0YShDRlVSTENvbm5lY3Rpb25SZWYsIENGRGF0YVJlZiBkYXRhLCBDRklu
ZGV4IG9yaWdpbmFsTGVuZ3RoLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQordm9pZCBXZWJDb3Jl
U3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwg
Y29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCwgaW50IC8qbGVuZ3RoUmVjZWl2ZWQqLykKIHsK
LSAgICBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXIqIGxvYWRlciA9IHN0YXRpY19jYXN0PFdlYkNv
cmVTeW5jaHJvbm91c0xvYWRlcio+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKLQot
ICAgIGlmICghbG9hZGVyLT5tX2RhdGEpCi0gICAgICAgIGxvYWRlci0+bV9kYXRhLmFkb3B0Q0Yo
Q0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7Ci0KLSAgICBjb25z
dCBVSW50OCogYnl0ZXMgPSBDRkRhdGFHZXRCeXRlUHRyKGRhdGEpOwotICAgIENGSW5kZXggbGVu
Z3RoID0gQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpOwotCi0gICAgQ0ZEYXRhQXBwZW5kQnl0ZXMobG9h
ZGVyLT5tX2RhdGEuZ2V0KCksIGJ5dGVzLCBsZW5ndGgpOworICAgIGlmICghbV9kYXRhKQorICAg
ICAgICBtX2RhdGEuYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1
bHQsIDApKTsKKyAgICBDRkRhdGFBcHBlbmRCeXRlcyhtX2RhdGEuZ2V0KCksIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgVUludDgqPihkYXRhKSwgbGVuZ3RoKTsKIH0KIAotdm9pZCBXZWJDb3JlU3lu
Y2hyb25vdXNMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoQ0ZVUkxDb25uZWN0aW9uUmVmLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKQordm9pZCBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6
OmRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqKQogewotICAgIFdlYkNvcmVTeW5jaHJv
bm91c0xvYWRlciogbG9hZGVyID0gc3RhdGljX2Nhc3Q8V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVy
Kj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOwotCi0gICAgbG9hZGVyLT5tX2lzRG9u
ZSA9IHRydWU7CisgICAgbV9pc0RvbmUgPSB0cnVlOwogfQogCi12b2lkIFdlYkNvcmVTeW5jaHJv
bm91c0xvYWRlcjo6ZGlkRmFpbChDRlVSTENvbm5lY3Rpb25SZWYsIENGRXJyb3JSZWYgZXJyb3Is
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit2b2lkIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNs
aWVudDo6ZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9y
KQogewotICAgIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlciogbG9hZGVyID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykp
OwotCi0gICAgbG9hZGVyLT5tX2Vycm9yID0gZXJyb3I7Ci0gICAgbG9hZGVyLT5tX2lzRG9uZSA9
IHRydWU7CisgICAgbV9lcnJvciA9IGVycm9yOworICAgIG1faXNEb25lID0gdHJ1ZTsKIH0KIAot
dm9pZCBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXI6OmRpZFJlY2VpdmVDaGFsbGVuZ2UoQ0ZVUkxD
b25uZWN0aW9uUmVmIGNvbm4sIENGVVJMQXV0aENoYWxsZW5nZVJlZiBjaGFsbGVuZ2UsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCit2b2lkIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6
ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUs
IGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCiB7Ci0gICAgV2ViQ29y
ZVN5bmNocm9ub3VzTG9hZGVyKiBsb2FkZXIgPSBzdGF0aWNfY2FzdDxXZWJDb3JlU3luY2hyb25v
dXNMb2FkZXIqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7Ci0KLSAgICBDRlVSTFJl
c3BvbnNlUmVmIHVybFJlc3BvbnNlID0gKENGVVJMUmVzcG9uc2VSZWYpQ0ZVUkxBdXRoQ2hhbGxl
bmdlR2V0RmFpbHVyZVJlc3BvbnNlKGNoYWxsZW5nZSk7Ci0gICAgQ0ZIVFRQTWVzc2FnZVJlZiBo
dHRwUmVzcG9uc2UgPSB1cmxSZXNwb25zZSA/IENGVVJMUmVzcG9uc2VHZXRIVFRQUmVzcG9uc2Uo
dXJsUmVzcG9uc2UpIDogMDsKLQotICAgIGlmIChsb2FkZXItPm1fdXNlciAmJiBsb2FkZXItPm1f
cGFzcykgewotICAgICAgICBDcmVkZW50aWFsIGNyZWRlbnRpYWwobG9hZGVyLT5tX3VzZXIuZ2V0
KCksIGxvYWRlci0+bV9wYXNzLmdldCgpLCBDcmVkZW50aWFsUGVyc2lzdGVuY2VOb25lKTsKLSAg
ICAgICAgUmV0YWluUHRyPENGVVJMQ3JlZGVudGlhbFJlZj4gY2ZDcmVkZW50aWFsKEFkb3B0Q0Ys
IGNyZWF0ZUNGKGNyZWRlbnRpYWwpKTsKLSAgICAgICAgCi0gICAgICAgIEtVUkwgdXJsVG9TdG9y
ZTsKLSAgICAgICAgaWYgKGh0dHBSZXNwb25zZSAmJiBDRkhUVFBNZXNzYWdlR2V0UmVzcG9uc2VT
dGF0dXNDb2RlKGh0dHBSZXNwb25zZSkgPT0gNDAxKQotICAgICAgICAgICAgdXJsVG9TdG9yZSA9
IGxvYWRlci0+bV91cmwuZ2V0KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgQ3JlZGVudGlhbFN0
b3JhZ2U6OnNldChjcmVkZW50aWFsLCBjb3JlKENGVVJMQXV0aENoYWxsZW5nZUdldFByb3RlY3Rp
b25TcGFjZShjaGFsbGVuZ2UpKSwgdXJsVG9TdG9yZSk7Ci0gICAgICAgIAotICAgICAgICBDRlVS
TENvbm5lY3Rpb25Vc2VDcmVkZW50aWFsKGNvbm4sIGNmQ3JlZGVudGlhbC5nZXQoKSwgY2hhbGxl
bmdlKTsKLSAgICAgICAgbG9hZGVyLT5tX3VzZXIgPSAwOwotICAgICAgICBsb2FkZXItPm1fcGFz
cyA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFDRlVSTEF1dGhDaGFsbGVu
Z2VHZXRQcmV2aW91c0ZhaWx1cmVDb3VudChjaGFsbGVuZ2UpICYmIGxvYWRlci0+bV9hbGxvd1N0
b3JlZENyZWRlbnRpYWxzKSB7Ci0gICAgICAgIENyZWRlbnRpYWwgY3JlZGVudGlhbCA9IENyZWRl
bnRpYWxTdG9yYWdlOjpnZXQoY29yZShDRlVSTEF1dGhDaGFsbGVuZ2VHZXRQcm90ZWN0aW9uU3Bh
Y2UoY2hhbGxlbmdlKSkpOwotICAgICAgICBpZiAoIWNyZWRlbnRpYWwuaXNFbXB0eSgpICYmIGNy
ZWRlbnRpYWwgIT0gbG9hZGVyLT5tX2luaXRpYWxDcmVkZW50aWFsKSB7Ci0gICAgICAgICAgICBB
U1NFUlQoY3JlZGVudGlhbC5wZXJzaXN0ZW5jZSgpID09IENyZWRlbnRpYWxQZXJzaXN0ZW5jZU5v
bmUpOwotICAgICAgICAgICAgaWYgKGh0dHBSZXNwb25zZSAmJiBDRkhUVFBNZXNzYWdlR2V0UmVz
cG9uc2VTdGF0dXNDb2RlKGh0dHBSZXNwb25zZSkgPT0gNDAxKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gU3RvcmUgdGhlIGNyZWRlbnRpYWwgYmFjaywgcG9zc2libHkgYWRkaW5nIGl0IGFzIGEgZGVm
YXVsdCBmb3IgdGhpcyBkaXJlY3RvcnkuCi0gICAgICAgICAgICAgICAgQ3JlZGVudGlhbFN0b3Jh
Z2U6OnNldChjcmVkZW50aWFsLCBjb3JlKENGVVJMQXV0aENoYWxsZW5nZUdldFByb3RlY3Rpb25T
cGFjZShjaGFsbGVuZ2UpKSwgbG9hZGVyLT5tX3VybC5nZXQoKSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBSZXRhaW5QdHI8Q0ZVUkxDcmVkZW50aWFsUmVmPiBjZkNyZWRlbnRpYWwoQWRv
cHRDRiwgY3JlYXRlQ0YoY3JlZGVudGlhbCkpOwotICAgICAgICAgICAgQ0ZVUkxDb25uZWN0aW9u
VXNlQ3JlZGVudGlhbChjb25uLCBjZkNyZWRlbnRpYWwuZ2V0KCksIGNoYWxsZW5nZSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9CiAgICAgLy8gRklYTUU6IFRoZSB1c2Vy
IHNob3VsZCBiZSBhc2tlZCBmb3IgY3JlZGVudGlhbHMsIGFzIGluIGFzeW5jIGNhc2UuCi0gICAg
Q0ZVUkxDb25uZWN0aW9uVXNlQ3JlZGVudGlhbChjb25uLCAwLCBjaGFsbGVuZ2UpOworICAgIENG
VVJMQ29ubmVjdGlvblVzZUNyZWRlbnRpYWwoaGFuZGxlLT5jb25uZWN0aW9uKCksIDAsIGNoYWxs
ZW5nZS5jZlVSTEF1dGhDaGFsbGVuZ2VSZWYoKSk7CiB9CiAKLUJvb2xlYW4gV2ViQ29yZVN5bmNo
cm9ub3VzTG9hZGVyOjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShDRlVSTENvbm5lY3Rpb25S
ZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCitib29sIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRl
ckNsaWVudDo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoUmVzb3VyY2VIYW5kbGUqKQogewot
ICAgIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlciogbG9hZGVyID0gc3RhdGljX2Nhc3Q8V2ViQ29y
ZVN5bmNocm9ub3VzTG9hZGVyKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOwotCiAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc2sgRnJhbWVMb2FkZXJDbGllbnQgd2hldGhlciB1c2lu
ZyBjcmVkZW50aWFsIHN0b3JhZ2UgaXMgZ2xvYmFsbHkgZm9yYmlkZGVuLgotICAgIHJldHVybiBs
b2FkZXItPm1fYWxsb3dTdG9yZWRDcmVkZW50aWFsczsKLX0KLQotUmV0YWluUHRyPENGRGF0YVJl
Zj4gV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyOjpsb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlLCBSZXNvdXJjZUVycm9yJiBlcnJvcikKLXsKLSAgICBBU1NFUlQocmVz
cG9uc2UuaXNOdWxsKCkpOwotICAgIEFTU0VSVChlcnJvci5pc051bGwoKSk7Ci0KLSAgICBXZWJD
b3JlU3luY2hyb25vdXNMb2FkZXIgbG9hZGVyKHJlc3BvbnNlLCBlcnJvcik7Ci0KLSAgICBLVVJM
IHVybCA9IHJlcXVlc3QudXJsKCk7Ci0KLSAgICBpZiAodXJsLnVzZXIoKS5sZW5ndGgoKSkKLSAg
ICAgICAgbG9hZGVyLm1fdXNlci5hZG9wdENGKHVybC51c2VyKCkuY3JlYXRlQ0ZTdHJpbmcoKSk7
Ci0gICAgaWYgKHVybC5wYXNzKCkubGVuZ3RoKCkpCi0gICAgICAgIGxvYWRlci5tX3Bhc3MuYWRv
cHRDRih1cmwucGFzcygpLmNyZWF0ZUNGU3RyaW5nKCkpOwotICAgIGxvYWRlci5tX2FsbG93U3Rv
cmVkQ3JlZGVudGlhbHMgPSAoc3RvcmVkQ3JlZGVudGlhbHMgPT0gQWxsb3dTdG9yZWRDcmVkZW50
aWFscyk7Ci0KLSAgICAvLyBUYWtlIHVzZXIvcGFzcyBvdXQgb2YgdGhlIFVSTC4KLSAgICAvLyBD
cmVkZW50aWFscyBmb3IgZnRwIGNhbiBvbmx5IGJlIHBhc3NlZCBpbiBVUkwsIHRoZSBkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgZGVsZWdhdGUgY2FsbCB3b24ndCBiZSBtYWRlLgot
ICAgIFJldGFpblB0cjxDRlVSTFJlcXVlc3RSZWY+IGNmUmVxdWVzdDsKLSAgICBpZiAoKGxvYWRl
ci5tX3VzZXIgfHwgbG9hZGVyLm1fcGFzcykgJiYgdXJsLnByb3RvY29sSW5IVFRQRmFtaWx5KCkp
IHsKLSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3RXaXRob3V0Q3JlZGVudGlhbHMocmVx
dWVzdCk7Ci0gICAgICAgIHJlcXVlc3RXaXRob3V0Q3JlZGVudGlhbHMucmVtb3ZlQ3JlZGVudGlh
bHMoKTsKLSAgICAgICAgY2ZSZXF1ZXN0LmFkb3B0Q0YobWFrZUZpbmFsUmVxdWVzdChyZXF1ZXN0
V2l0aG91dENyZWRlbnRpYWxzLCBSZXNvdXJjZUhhbmRsZTo6c2hvdWxkQ29udGVudFNuaWZmVVJM
KHJlcXVlc3RXaXRob3V0Q3JlZGVudGlhbHMudXJsKCkpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzcxNzQwNTA+IC0gRm9yIFVSTHMgdGhhdCBtYXRjaCB0aGUg
cGF0aHMgb2YgdGhvc2UgcHJldmlvdXNseSBjaGFsbGVuZ2VkIGZvciBIVFRQIEJhc2ljIGF1dGhl
bnRpY2F0aW9uLCAKLSAgICAgICAgLy8gdHJ5IGFuZCByZXVzZSB0aGUgY3JlZGVudGlhbCBwcmVl
bXB0aXZlbHksIGFzIGFsbG93ZWQgYnkgUkZDIDI2MTcuCi0gICAgICAgIFJlc291cmNlUmVxdWVz
dCByZXF1ZXN0V2l0aEluaXRpYWxDcmVkZW50aWFsKHJlcXVlc3QpOwotICAgICAgICBpZiAobG9h
ZGVyLm1fYWxsb3dTdG9yZWRDcmVkZW50aWFscyAmJiB1cmwucHJvdG9jb2xJbkhUVFBGYW1pbHko
KSkKLSAgICAgICAgICAgIGxvYWRlci5tX2luaXRpYWxDcmVkZW50aWFsID0gQ3JlZGVudGlhbFN0
b3JhZ2U6OmdldCh1cmwpOwotCi0gICAgICAgIGlmICghbG9hZGVyLm1faW5pdGlhbENyZWRlbnRp
YWwuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgYXV0aEhlYWRlciA9ICJCYXNpYyAi
ICsgZW5jb2RlQmFzaWNBdXRob3JpemF0aW9uKGxvYWRlci5tX2luaXRpYWxDcmVkZW50aWFsLnVz
ZXIoKSwgbG9hZGVyLm1faW5pdGlhbENyZWRlbnRpYWwucGFzc3dvcmQoKSk7Ci0gICAgICAgICAg
ICByZXF1ZXN0V2l0aEluaXRpYWxDcmVkZW50aWFsLmFkZEhUVFBIZWFkZXJGaWVsZCgiQXV0aG9y
aXphdGlvbiIsIGF1dGhIZWFkZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgY2ZSZXF1ZXN0LmFk
b3B0Q0YobWFrZUZpbmFsUmVxdWVzdChyZXF1ZXN0V2l0aEluaXRpYWxDcmVkZW50aWFsLCBSZXNv
dXJjZUhhbmRsZTo6c2hvdWxkQ29udGVudFNuaWZmVVJMKHJlcXVlc3RXaXRoSW5pdGlhbENyZWRl
bnRpYWwudXJsKCkpKSk7Ci0gICAgfQotCi0gICAgQ0ZVUkxDb25uZWN0aW9uQ2xpZW50X1YzIGNs
aWVudCA9IHsgMywgJmxvYWRlciwgMCwgMCwgMCwgd2lsbFNlbmRSZXF1ZXN0LCBkaWRSZWNlaXZl
UmVzcG9uc2UsIGRpZFJlY2VpdmVEYXRhLCAwLCBkaWRGaW5pc2hMb2FkaW5nLCBkaWRGYWlsLCAw
LCBkaWRSZWNlaXZlQ2hhbGxlbmdlLCAwLCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwgMCB9
OwotCi0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY29ubmVjdGlvblByb3BlcnRpZXMo
QWRvcHRDRiwgY3JlYXRlQ29ubmVjdGlvblByb3BlcnRpZXMobG9hZGVyLm1fYWxsb3dTdG9yZWRD
cmVkZW50aWFscykpOwotCi0gICAgUmV0YWluUHRyPENGVVJMQ29ubmVjdGlvblJlZj4gY29ubmVj
dGlvbihBZG9wdENGLCBDRlVSTENvbm5lY3Rpb25DcmVhdGVXaXRoUHJvcGVydGllcyhrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBjZlJlcXVlc3QuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZVUkxDb25u
ZWN0aW9uQ2xpZW50Kj4oJmNsaWVudCksIGNvbm5lY3Rpb25Qcm9wZXJ0aWVzLmdldCgpKSk7Ci0K
LSAgICBDRlVSTENvbm5lY3Rpb25TY2hlZHVsZVdpdGhSdW5Mb29wKGNvbm5lY3Rpb24uZ2V0KCks
IENGUnVuTG9vcEdldEN1cnJlbnQoKSwgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyUnVuTG9vcE1v
ZGUpOwotICAgIENGVVJMQ29ubmVjdGlvblNjaGVkdWxlRG93bmxvYWRXaXRoUnVuTG9vcChjb25u
ZWN0aW9uLmdldCgpLCBDRlJ1bkxvb3BHZXRDdXJyZW50KCksIFdlYkNvcmVTeW5jaHJvbm91c0xv
YWRlclJ1bkxvb3BNb2RlKTsKLSAgICBDRlVSTENvbm5lY3Rpb25TdGFydChjb25uZWN0aW9uLmdl
dCgpKTsKLQotICAgIHdoaWxlICghbG9hZGVyLm1faXNEb25lKQotICAgICAgICBDRlJ1bkxvb3BS
dW5Jbk1vZGUoV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyUnVuTG9vcE1vZGUsIFVJTlRfTUFYLCB0
cnVlKTsKLQotICAgIENGVVJMQ29ubmVjdGlvbkNhbmNlbChjb25uZWN0aW9uLmdldCgpKTsKLSAg
ICAKLSAgICBpZiAoZXJyb3IuaXNOdWxsKCkgJiYgbG9hZGVyLm1fcmVzcG9uc2UubWltZVR5cGUo
KS5pc051bGwoKSkKLSAgICAgICAgc2V0RGVmYXVsdE1JTUVUeXBlKGxvYWRlci5tX3Jlc3BvbnNl
LmNmVVJMUmVzcG9uc2UoKSk7Ci0KLSAgICByZXR1cm4gbG9hZGVyLm1fZGF0YTsKKyAgICByZXR1
cm4gbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFn
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291
cmNlSGFuZGxlTWFuYWdlci5jcHAJKHJldmlzaW9uIDYzMTA4KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjcxLDcgKzI3MSw3IEBAIHN0YXRpYyBzaXplX3QgaGVhZGVyQ2FsbGJhY2soY2hhciogcHRy
LCAKICAgICAgICAgICAgICAgICBpZiAoY2xpZW50KQogICAgICAgICAgICAgICAgICAgICBjbGll
bnQtPndpbGxTZW5kUmVxdWVzdChqb2IsIHJlZGlyZWN0ZWRSZXF1ZXN0LCBkLT5tX3Jlc3BvbnNl
KTsKIAotICAgICAgICAgICAgICAgIGQtPm1fcmVxdWVzdC5zZXRVUkwobmV3VVJMKTsKKyAgICAg
ICAgICAgICAgICBkLT5tX2ZpcnN0UmVxdWVzdC5zZXRVUkwobmV3VVJMKTsKIAogICAgICAgICAg
ICAgICAgIHJldHVybiB0b3RhbFNpemU7CiAgICAgICAgICAgICB9CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW0JKHJldmlzaW9u
IDYzMTA4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDYtMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
Niw4ICs1Niw3IEBAIHR5cGVkZWYgaW50IE5TSW50ZWdlcjsKIAogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKLUBpbnRlcmZhY2UgV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZSA6IE5T
T2JqZWN0IDxOU1VSTENvbm5lY3Rpb25EZWxlZ2F0ZT4KLXsKK0BpbnRlcmZhY2UgV2ViQ29yZVJl
c291cmNlSGFuZGxlQXNEZWxlZ2F0ZSA6IE5TT2JqZWN0IDxOU1VSTENvbm5lY3Rpb25EZWxlZ2F0
ZT4gewogICAgIFJlc291cmNlSGFuZGxlKiBtX2hhbmRsZTsKIH0KIC0gKGlkKWluaXRXaXRoSGFu
ZGxlOihSZXNvdXJjZUhhbmRsZSopaGFuZGxlOwpAQCAtODUsMjAgKzg0LDQ4IEBAIC0gKGlkKV9w
cm9wZXJ0eUZvcktleTooTlNTdHJpbmcgKilrZXk7CiAKICNpZm5kZWYgQlVJTERJTkdfT05fVElH
RVIKIAotQGludGVyZmFjZSBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXIgOiBOU09iamVjdCA8TlNV
UkxDb25uZWN0aW9uRGVsZWdhdGU+IHsKLSAgICBOU1VSTCAqbV91cmw7Ci0gICAgTlNTdHJpbmcg
Km1fdXNlcjsKLSAgICBOU1N0cmluZyAqbV9wYXNzOwotICAgIC8vIFN0b3JlIHRoZSBwcmVlbXB0
aXZlbHkgdXNlZCBpbml0aWFsIGNyZWRlbnRpYWwgc28gdGhhdCBpZiB3ZSBnZXQgYW4gYXV0aGVu
dGljYXRpb24gY2hhbGxlbmdlLCB3ZSB3b24ndCB1c2UgdGhlIHNhbWUgb25lIGFnYWluLgotICAg
IENyZWRlbnRpYWwgbV9pbml0aWFsQ3JlZGVudGlhbDsKLSAgICBCT09MIG1fYWxsb3dTdG9yZWRD
cmVkZW50aWFsczsKK2NsYXNzIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudCA6IHB1Ymxp
YyBSZXNvdXJjZUhhbmRsZUNsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8
V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQpOworICAg
IH0KKworICAgIHZpcnR1YWwgfldlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudCgpOworCisg
ICAgdm9pZCBzZXRBbGxvd1N0b3JlZENyZWRlbnRpYWxzKGJvb2wgYWxsb3cpIHsgbV9hbGxvd1N0
b3JlZENyZWRlbnRpYWxzID0gYWxsb3c7IH0KKyAgICBOU1VSTFJlc3BvbnNlICpyZXNwb25zZSgp
IHsgcmV0dXJuIG1fcmVzcG9uc2U7IH0KKyAgICBOU011dGFibGVEYXRhICpkYXRhKCkgeyByZXR1
cm4gbV9kYXRhOyB9CisgICAgTlNFcnJvciAqZXJyb3IoKSB7IHJldHVybiBtX2Vycm9yOyB9Cisg
ICAgYm9vbCBpc0RvbmUoKSB7IHJldHVybiBtX2lzRG9uZTsgfQorCisgICAgdmlydHVhbCB2b2lk
IHdpbGxTZW5kUmVxdWVzdChSZXNvdXJjZUhhbmRsZSosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIC8qcmVkaXJlY3RSZXNwb25zZSovKTsKKyAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoUmVzb3VyY2VIYW5kbGUqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFJlc291cmNlSGFuZGxl
KiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYp
OworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0
IGNoYXIqLCBpbnQsIGludCAvKmxlbmd0aFJlY2VpdmVkKi8pOworICAgIHZpcnR1YWwgdm9pZCBk
aWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKik7CisgICAgdmlydHVhbCB2b2lkIGRpZEZh
aWwoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CisjaWYgVVNFKFBST1RF
Q1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKKyAgICB2aXJ0dWFsIGJvb2wgY2FuQXV0aGVudGlj
YXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFByb3RlY3Rp
b25TcGFjZSYpOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgV2ViQ29yZVN5bmNocm9ub3VzTG9h
ZGVyQ2xpZW50KCkKKyAgICAgICAgOiBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHMoZmFsc2UpCisg
ICAgICAgICwgbV9yZXNwb25zZSgwKQorICAgICAgICAsIG1fZGF0YSgwKQorICAgICAgICAsIG1f
ZXJyb3IoMCkKKyAgICAgICAgLCBtX2lzRG9uZShmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAg
Ym9vbCBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHM7CiAgICAgTlNVUkxSZXNwb25zZSAqbV9yZXNw
b25zZTsKICAgICBOU011dGFibGVEYXRhICptX2RhdGE7CiAgICAgTlNFcnJvciAqbV9lcnJvcjsK
LSAgICBCT09MIG1faXNEb25lOwotfQotKyAoTlNEYXRhICopbG9hZFJlcXVlc3Q6KE5TVVJMUmVx
dWVzdCAqKXJlcXVlc3QgYWxsb3dTdG9yZWRDcmVkZW50aWFsczooQk9PTClhbGxvd1N0b3JlZENy
ZWRlbnRpYWxzIHJldHVybmluZ1Jlc3BvbnNlOihOU1VSTFJlc3BvbnNlICoqKXJlc3BvbnNlIGVy
cm9yOihOU0Vycm9yICoqKWVycm9yOwotQGVuZAorICAgIGJvb2wgbV9pc0RvbmU7Cit9OwogCiBz
dGF0aWMgTlNTdHJpbmcgKldlYkNvcmVTeW5jaHJvbm91c0xvYWRlclJ1bkxvb3BNb2RlID0gQCJX
ZWJDb3JlU3luY2hyb25vdXNMb2FkZXJSdW5Mb29wTW9kZSI7CiAKQEAgLTE2MSwxMiArMTg4LDUx
IEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OmRpZFNlbmRCb2R5RGF0YURlbGUKICAgICByZXR1cm4g
TlNGb3VuZGF0aW9uVmVyc2lvbk51bWJlciA+IE1heEZvdW5kYXRpb25WZXJzaW9uV2l0aG91dGRp
ZFNlbmRCb2R5RGF0YURlbGVnYXRlOwogfQogCi1zdGF0aWMgTlNVUkxDb25uZWN0aW9uICpjcmVh
dGVOU1VSTENvbm5lY3Rpb24oTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0LCBpZCBkZWxlZ2F0ZSwgYm9v
bCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSkKK05TVVJMQ29ubmVjdGlvbiAqUmVzb3VyY2VI
YW5kbGU6OmNyZWF0ZU5TVVJMQ29ubmVjdGlvbihpZCBkZWxlZ2F0ZSwgYm9vbCBzaG91bGRVc2VD
cmVkZW50aWFsU3RvcmFnZSwgYm9vbCBzaG91bGRDb250ZW50U25pZmYpCiB7Ci0jaWYgZGVmaW5l
ZChCVUlMRElOR19PTl9USUdFUikKLSAgICBVTlVTRURfUEFSQU0oc2hvdWxkVXNlQ3JlZGVudGlh
bFN0b3JhZ2UpOwotICAgIHJldHVybiBbW05TVVJMQ29ubmVjdGlvbiBhbGxvY10gaW5pdFdpdGhS
ZXF1ZXN0OnJlcXVlc3QgZGVsZWdhdGU6ZGVsZWdhdGVdOwotI2Vsc2UKKyAgICAvLyBDcmVkZW50
aWFscyBmb3IgZnRwIGNhbiBvbmx5IGJlIHBhc3NlZCBpbiBVUkwsIHRoZSBjb25uZWN0aW9uOmRp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTogZGVsZWdhdGUgY2FsbCB3b24ndCBiZSBt
YWRlLgorICAgIGlmICgoIWQtPm1fdXNlci5pc0VtcHR5KCkgfHwgIWQtPm1fcGFzcy5pc0VtcHR5
KCkpCisjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgICYmICFmaXJzdFJlcXVlc3QoKS51
cmwoKS5wcm90b2NvbEluSFRUUEZhbWlseSgpIC8vIE9uIFRpZ2VyLCBhbHdheXMgcGFzcyBjcmVk
ZW50aWFscyBpbiBVUkwsIHNvIHRoYXQgdGhleSBnZXQgc3RvcmVkIGV2ZW4gaWYgdGhlIHJlcXVl
c3QgZ2V0cyBjYW5jZWxsZWQgcmlnaHQgYXdheS4KKyNlbmRpZgorICAgICkgeworICAgICAgICBL
VVJMIHVybFdpdGhDcmVkZW50aWFscyhmaXJzdFJlcXVlc3QoKS51cmwoKSk7CisgICAgICAgIHVy
bFdpdGhDcmVkZW50aWFscy5zZXRVc2VyKGQtPm1fdXNlcik7CisgICAgICAgIHVybFdpdGhDcmVk
ZW50aWFscy5zZXRQYXNzKGQtPm1fcGFzcyk7CisgICAgICAgIGZpcnN0UmVxdWVzdCgpLnNldFVS
TCh1cmxXaXRoQ3JlZGVudGlhbHMpOworICAgIH0KKworICAgIC8vIElmIGEgVVJMIGFscmVhZHkg
aGFzIGNvb2tpZXMsIHRoZW4gd2UnbGwgcmVsYXggdGhlIDNyZCBwYXJ0eSBjb29raWUgcG9saWN5
IGFuZCBhY2NlcHQgbmV3IGNvb2tpZXMuCisgICAgTlNIVFRQQ29va2llU3RvcmFnZSAqc2hhcmVk
U3RvcmFnZSA9IFtOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXTsK
KyAgICBpZiAoW3NoYXJlZFN0b3JhZ2UgY29va2llQWNjZXB0UG9saWN5XSA9PSBOU0hUVFBDb29r
aWVBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbiAmJiBbW3NoYXJlZFN0b3Jh
Z2UgY29va2llc0ZvclVSTDpmaXJzdFJlcXVlc3QoKS51cmwoKV0gY291bnRdKQorICAgICAgICBm
aXJzdFJlcXVlc3QoKS5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhmaXJzdFJlcXVlc3QoKS51cmwo
KSk7CisKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikKKyAgICBpZiAoc2hvdWxkVXNl
Q3JlZGVudGlhbFN0b3JhZ2UgJiYgZmlyc3RSZXF1ZXN0KCkudXJsKCkucHJvdG9jb2xJbkhUVFBG
YW1pbHkoKSkgeworICAgICAgICBpZiAoZC0+bV91c2VyLmlzRW1wdHkoKSAmJiBkLT5tX3Bhc3Mu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNzE3NDA1MD4gLSBG
b3IgVVJMcyB0aGF0IG1hdGNoIHRoZSBwYXRocyBvZiB0aG9zZSBwcmV2aW91c2x5IGNoYWxsZW5n
ZWQgZm9yIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24sIAorICAgICAgICAgICAgLy8gdHJ5IGFu
ZCByZXVzZSB0aGUgY3JlZGVudGlhbCBwcmVlbXB0aXZlbHksIGFzIGFsbG93ZWQgYnkgUkZDIDI2
MTcuCisgICAgICAgICAgICBkLT5tX2luaXRpYWxDcmVkZW50aWFsID0gQ3JlZGVudGlhbFN0b3Jh
Z2U6OmdldChmaXJzdFJlcXVlc3QoKS51cmwoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAvLyBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgcHJvdGVjdGlvbiBzcGFjZSBrbm93biBmb3Ig
dGhlIFVSTCwgdXBkYXRlIHN0b3JlZCBjcmVkZW50aWFscyBiZWZvcmUgc2VuZGluZyBhIHJlcXVl
c3QuCisgICAgICAgICAgICAvLyBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGltcGxlbWVudCBs
b2dvdXQgYnkgc2VuZGluZyBhbiBYTUxIdHRwUmVxdWVzdCB3aXRoIGtub3duIGluY29ycmVjdCBj
cmVkZW50aWFscywgYW5kIGFib3J0aW5nIGl0IGltbWVkaWF0ZWx5CisgICAgICAgICAgICAvLyAo
c28gdGhhdCBhbiBhdXRoZW50aWNhdGlvbiBkaWFsb2cgZG9lc24ndCBwb3AgdXApLgorICAgICAg
ICAgICAgQ3JlZGVudGlhbFN0b3JhZ2U6OnNldChDcmVkZW50aWFsKGQtPm1fdXNlciwgZC0+bV9w
YXNzLCBDcmVkZW50aWFsUGVyc2lzdGVuY2VOb25lKSwgZmlyc3RSZXF1ZXN0KCkudXJsKCkpOwor
ICAgICAgICB9CisgICAgfQorICAgICAgICAKKyAgICBpZiAoIWQtPm1faW5pdGlhbENyZWRlbnRp
YWwuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IERpZ2VzdCBhdXRoZW50
aWNhdGlvbiwgYW5kIFByb3h5LUF1dGhvcml6YXRpb24uCisgICAgICAgIFN0cmluZyBhdXRoSGVh
ZGVyID0gIkJhc2ljICIgKyBlbmNvZGVCYXNpY0F1dGhvcml6YXRpb24oZC0+bV9pbml0aWFsQ3Jl
ZGVudGlhbC51c2VyKCksIGQtPm1faW5pdGlhbENyZWRlbnRpYWwucGFzc3dvcmQoKSk7CisgICAg
ICAgIGZpcnN0UmVxdWVzdCgpLmFkZEhUVFBIZWFkZXJGaWVsZCgiQXV0aG9yaXphdGlvbiIsIGF1
dGhIZWFkZXIpOworICAgIH0KKworICAgIE5TVVJMUmVxdWVzdCAqbnNSZXF1ZXN0ID0gZmlyc3RS
ZXF1ZXN0KCkubnNVUkxSZXF1ZXN0KCk7CisgICAgaWYgKCFzaG91bGRDb250ZW50U25pZmYpIHsK
KyAgICAgICAgTlNNdXRhYmxlVVJMUmVxdWVzdCAqbXV0YWJsZVJlcXVlc3QgPSBbW25zUmVxdWVz
dCBjb3B5XSBhdXRvcmVsZWFzZV07CisgICAgICAgIHdrU2V0TlNVUkxSZXF1ZXN0U2hvdWxkQ29u
dGVudFNuaWZmKG11dGFibGVSZXF1ZXN0LCBOTyk7CisgICAgICAgIG5zUmVxdWVzdCA9IG11dGFi
bGVSZXF1ZXN0OworICAgIH0KIAogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCiAg
ICAgQVNTRVJUKFtOU1VSTENvbm5lY3Rpb24gaW5zdGFuY2VzUmVzcG9uZFRvU2VsZWN0b3I6QHNl
bGVjdG9yKF9pbml0V2l0aFJlcXVlc3Q6ZGVsZWdhdGU6dXNlc0NhY2hlOm1heENvbnRlbnRMZW5n
dGg6c3RhcnRJbW1lZGlhdGVseTpjb25uZWN0aW9uUHJvcGVydGllczopXSk7CkBAIC0xNzgsMTAg
KzI0NCwxNSBAQCBzdGF0aWMgTlNVUkxDb25uZWN0aW9uICpjcmVhdGVOU1VSTENvbm5lCiAgICAg
aWYgKHN1cHBvcnRzU2V0dGluZ0Nvbm5lY3Rpb25Qcm9wZXJ0aWVzKSB7CiAgICAgICAgIE5TRGlj
dGlvbmFyeSAqc2Vzc2lvbklEID0gc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UgPyBbTlNEaWN0
aW9uYXJ5IGRpY3Rpb25hcnldIDogW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdDpA
IldlYktpdFByaXZhdGVTZXNzaW9uIiBmb3JLZXk6QCJfa0NGVVJMQ29ubmVjdGlvblNlc3Npb25J
RCJdOwogICAgICAgICBOU0RpY3Rpb25hcnkgKnByb3BlcnR5RGljdGlvbmFyeSA9IFtOU0RpY3Rp
b25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Q6c2Vzc2lvbklEIGZvcktleTpAImtDRlVSTENvbm5l
Y3Rpb25Tb2NrZXRTdHJlYW1Qcm9wZXJ0aWVzIl07Ci0gICAgICAgIHJldHVybiBbW05TVVJMQ29u
bmVjdGlvbiBhbGxvY10gX2luaXRXaXRoUmVxdWVzdDpyZXF1ZXN0IGRlbGVnYXRlOmRlbGVnYXRl
IHVzZXNDYWNoZTpZRVMgbWF4Q29udGVudExlbmd0aDowIHN0YXJ0SW1tZWRpYXRlbHk6Tk8gY29u
bmVjdGlvblByb3BlcnRpZXM6cHJvcGVydHlEaWN0aW9uYXJ5XTsKKyAgICAgICAgcmV0dXJuIFtb
TlNVUkxDb25uZWN0aW9uIGFsbG9jXSBfaW5pdFdpdGhSZXF1ZXN0Om5zUmVxdWVzdCBkZWxlZ2F0
ZTpkZWxlZ2F0ZSB1c2VzQ2FjaGU6WUVTIG1heENvbnRlbnRMZW5ndGg6MCBzdGFydEltbWVkaWF0
ZWx5Ok5PIGNvbm5lY3Rpb25Qcm9wZXJ0aWVzOnByb3BlcnR5RGljdGlvbmFyeV07CiAgICAgfQog
Ci0gICAgcmV0dXJuIFtbTlNVUkxDb25uZWN0aW9uIGFsbG9jXSBpbml0V2l0aFJlcXVlc3Q6cmVx
dWVzdCBkZWxlZ2F0ZTpkZWxlZ2F0ZSBzdGFydEltbWVkaWF0ZWx5Ok5PXTsKKyAgICByZXR1cm4g
W1tOU1VSTENvbm5lY3Rpb24gYWxsb2NdIGluaXRXaXRoUmVxdWVzdDpuc1JlcXVlc3QgZGVsZWdh
dGU6ZGVsZWdhdGUgc3RhcnRJbW1lZGlhdGVseTpOT107CisKKyNlbHNlCisgICAgLy8gQnVpbGRp
bmcgb24gVGlnZXIuIERvbid0IHVzZSBXZWJDb3JlIGNyZWRlbnRpYWwgc3RvcmFnZSwgZG9uJ3Qg
dHJ5IHRvIGRpc2FibGUgY29udGVudCBzbmlmZmluZy4KKyAgICBVTlVTRURfUEFSQU0oc2hvdWxk
VXNlQ3JlZGVudGlhbFN0b3JhZ2UpOworICAgIHJldHVybiBbW05TVVJMQ29ubmVjdGlvbiBhbGxv
Y10gaW5pdFdpdGhSZXF1ZXN0OmZpcnN0UmVxdWVzdCgpLm5zVVJMUmVxdWVzdCgpIGRlbGVnYXRl
OmRlbGVnYXRlXTsKICNlbmRpZgogfQogCkBAIC0yMDYsNjkgKzI3NywyNCBAQCBib29sIFJlc291
cmNlSGFuZGxlOjpzdGFydChGcmFtZSogZnJhbWUpCiAgICAgZC0+bV9wcm94eS5hZG9wdE5TKHdr
Q3JlYXRlTlNVUkxDb25uZWN0aW9uRGVsZWdhdGVQcm94eSgpKTsKICAgICBbc3RhdGljX2Nhc3Q8
V2ViQ29yZU5TVVJMQ29ubmVjdGlvbkRlbGVnYXRlUHJveHkqPihkLT5tX3Byb3h5LmdldCgpKSBz
ZXREZWxlZ2F0ZTpSZXNvdXJjZUhhbmRsZTo6ZGVsZWdhdGUoKV07CiAKLSAgICBpZiAoKCFkLT5t
X3VzZXIuaXNFbXB0eSgpIHx8ICFkLT5tX3Bhc3MuaXNFbXB0eSgpKQotI2lmbmRlZiBCVUlMRElO
R19PTl9USUdFUgotICAgICAmJiAhZC0+bV9yZXF1ZXN0LnVybCgpLnByb3RvY29sSW5IVFRQRmFt
aWx5KCkgLy8gT24gVGlnZXIsIGFsd2F5cyBwYXNzIGNyZWRlbnRpYWxzIGluIFVSTCwgc28gdGhh
dCB0aGV5IGdldCBzdG9yZWQgZXZlbiBpZiB0aGUgcmVxdWVzdCBnZXRzIGNhbmNlbGxlZCByaWdo
dCBhd2F5LgotI2VuZGlmCi0gICAgKSB7Ci0gICAgICAgIC8vIENyZWRlbnRpYWxzIGZvciBmdHAg
Y2FuIG9ubHkgYmUgcGFzc2VkIGluIFVSTCwgdGhlIGNvbm5lY3Rpb246ZGlkUmVjZWl2ZUF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlOiBkZWxlZ2F0ZSBjYWxsIHdvbid0IGJlIG1hZGUuCi0gICAgICAg
IEtVUkwgdXJsV2l0aENyZWRlbnRpYWxzKGQtPm1fcmVxdWVzdC51cmwoKSk7Ci0gICAgICAgIHVy
bFdpdGhDcmVkZW50aWFscy5zZXRVc2VyKGQtPm1fdXNlcik7Ci0gICAgICAgIHVybFdpdGhDcmVk
ZW50aWFscy5zZXRQYXNzKGQtPm1fcGFzcyk7Ci0gICAgICAgIGQtPm1fcmVxdWVzdC5zZXRVUkwo
dXJsV2l0aENyZWRlbnRpYWxzKTsKLSAgICB9Ci0KICAgICBib29sIHNob3VsZFVzZUNyZWRlbnRp
YWxTdG9yYWdlID0gIWNsaWVudCgpIHx8IGNsaWVudCgpLT5zaG91bGRVc2VDcmVkZW50aWFsU3Rv
cmFnZSh0aGlzKTsKIAotI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgotICAgIGlmIChzaG91bGRV
c2VDcmVkZW50aWFsU3RvcmFnZSAmJiBkLT5tX3JlcXVlc3QudXJsKCkucHJvdG9jb2xJbkhUVFBG
YW1pbHkoKSkgewotICAgICAgICBpZiAoZC0+bV91c2VyLmlzRW1wdHkoKSAmJiBkLT5tX3Bhc3Mu
aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNzE3NDA1MD4gLSBG
b3IgVVJMcyB0aGF0IG1hdGNoIHRoZSBwYXRocyBvZiB0aG9zZSBwcmV2aW91c2x5IGNoYWxsZW5n
ZWQgZm9yIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24sIAotICAgICAgICAgICAgLy8gdHJ5IGFu
ZCByZXVzZSB0aGUgY3JlZGVudGlhbCBwcmVlbXB0aXZlbHksIGFzIGFsbG93ZWQgYnkgUkZDIDI2
MTcuCi0gICAgICAgICAgICBkLT5tX2luaXRpYWxDcmVkZW50aWFsID0gQ3JlZGVudGlhbFN0b3Jh
Z2U6OmdldChkLT5tX3JlcXVlc3QudXJsKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHByb3RlY3Rpb24gc3BhY2Uga25vd24gZm9yIHRo
ZSBVUkwsIHVwZGF0ZSBzdG9yZWQgY3JlZGVudGlhbHMgYmVmb3JlIHNlbmRpbmcgYSByZXF1ZXN0
LgotICAgICAgICAgICAgLy8gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBpbXBsZW1lbnQgbG9n
b3V0IGJ5IHNlbmRpbmcgYW4gWE1MSHR0cFJlcXVlc3Qgd2l0aCBrbm93biBpbmNvcnJlY3QgY3Jl
ZGVudGlhbHMsIGFuZCBhYm9ydGluZyBpdCBpbW1lZGlhdGVseQotICAgICAgICAgICAgLy8gKHNv
IHRoYXQgYW4gYXV0aGVudGljYXRpb24gZGlhbG9nIGRvZXNuJ3QgcG9wIHVwKS4KLSAgICAgICAg
ICAgIENyZWRlbnRpYWxTdG9yYWdlOjpzZXQoQ3JlZGVudGlhbChkLT5tX3VzZXIsIGQtPm1fcGFz
cywgQ3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZSksIGQtPm1fcmVxdWVzdC51cmwoKSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgICAgIAotICAgIGlmICghZC0+bV9pbml0aWFsQ3JlZGVudGlhbC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgRGlnZXN0IGF1dGhlbnRpY2F0
aW9uLCBhbmQgUHJveHktQXV0aG9yaXphdGlvbi4KLSAgICAgICAgU3RyaW5nIGF1dGhIZWFkZXIg
PSAiQmFzaWMgIiArIGVuY29kZUJhc2ljQXV0aG9yaXphdGlvbihkLT5tX2luaXRpYWxDcmVkZW50
aWFsLnVzZXIoKSwgZC0+bV9pbml0aWFsQ3JlZGVudGlhbC5wYXNzd29yZCgpKTsKLSAgICAgICAg
ZC0+bV9yZXF1ZXN0LmFkZEhUVFBIZWFkZXJGaWVsZCgiQXV0aG9yaXphdGlvbiIsIGF1dGhIZWFk
ZXIpOwotICAgIH0KLSNlbmRpZgotCiAgICAgaWYgKCFSZXNvdXJjZUhhbmRsZTo6ZGlkU2VuZEJv
ZHlEYXRhRGVsZWdhdGVFeGlzdHMoKSkKLSAgICAgICAgYXNzb2NpYXRlU3RyZWFtV2l0aFJlc291
cmNlSGFuZGxlKFtkLT5tX3JlcXVlc3QubnNVUkxSZXF1ZXN0KCkgSFRUUEJvZHlTdHJlYW1dLCB0
aGlzKTsKKyAgICAgICAgYXNzb2NpYXRlU3RyZWFtV2l0aFJlc291cmNlSGFuZGxlKFtmaXJzdFJl
cXVlc3QoKS5uc1VSTFJlcXVlc3QoKSBIVFRQQm9keVN0cmVhbV0sIHRoaXMpOwogCiAjaWZkZWYg
QlVJTERJTkdfT05fVElHRVIKICAgICAvLyBBIGNvbmRpdGlvbmFsIHJlcXVlc3Qgc2VudCBieSBX
ZWJDb3JlIChlLmcuIHRvIHVwZGF0ZSBhcHBjYWNoZSkgY2FuIGJlIGZvciBhIHJlc291cmNlIHRo
YXQgaXMgbm90IGNhY2hlYWJsZSBieSBOU1VSTENvbm5lY3Rpb24sCiAgICAgLy8gd2hpY2ggY2Fu
IGdldCBjb25mdXNlZCBhbmQgZmFpbCB0byBsb2FkIGl0IGluIHRoaXMgY2FzZS4KLSAgICBpZiAo
ZC0+bV9yZXF1ZXN0LmlzQ29uZGl0aW9uYWwoKSkKLSAgICAgICAgZC0+bV9yZXF1ZXN0LnNldENh
Y2hlUG9saWN5KFJlbG9hZElnbm9yaW5nQ2FjaGVEYXRhKTsKKyAgICBpZiAoZmlyc3RSZXF1ZXN0
KCkuaXNDb25kaXRpb25hbCgpKQorICAgICAgICBmaXJzdFJlcXVlc3QoKS5zZXRDYWNoZVBvbGlj
eShSZWxvYWRJZ25vcmluZ0NhY2hlRGF0YSk7CiAjZW5kaWYKIAogICAgIGQtPm1fbmVlZHNTaXRl
U3BlY2lmaWNRdWlya3MgPSBmcmFtZS0+c2V0dGluZ3MoKSAmJiBmcmFtZS0+c2V0dGluZ3MoKS0+
bmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoKTsKIAotICAgIC8vIElmIGEgVVJMIGFscmVhZHkgaGFz
IGNvb2tpZXMsIHRoZW4gd2UnbGwgcmVsYXggdGhlIDNyZCBwYXJ0eSBjb29raWUgcG9saWN5IGFu
ZCBhY2NlcHQgbmV3IGNvb2tpZXMuCi0gICAgTlNIVFRQQ29va2llU3RvcmFnZSAqc2hhcmVkU3Rv
cmFnZSA9IFtOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXTsKLSAg
ICBpZiAoW3NoYXJlZFN0b3JhZ2UgY29va2llQWNjZXB0UG9saWN5XSA9PSBOU0hUVFBDb29raWVB
Y2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbgotICAgICAgICAmJiBbW3NoYXJl
ZFN0b3JhZ2UgY29va2llc0ZvclVSTDpkLT5tX3JlcXVlc3QudXJsKCldIGNvdW50XSkKLSAgICAg
ICAgZC0+bV9yZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKGQtPm1fcmVxdWVzdC51cmwo
KSk7Ci0KLSAgICBOU1VSTENvbm5lY3Rpb24gKmNvbm5lY3Rpb247Ci0gICAgCi0gICAgaWYgKGQt
Pm1fc2hvdWxkQ29udGVudFNuaWZmIHx8IGZyYW1lLT5zZXR0aW5ncygpLT5sb2NhbEZpbGVDb250
ZW50U25pZmZpbmdFbmFibGVkKCkpCi0gICAgICAgIGNvbm5lY3Rpb24gPSBjcmVhdGVOU1VSTENv
bm5lY3Rpb24oZC0+bV9yZXF1ZXN0Lm5zVVJMUmVxdWVzdCgpLCBkLT5tX3Byb3h5LmdldCgpLCBz
aG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIE5TTXV0YWJs
ZVVSTFJlcXVlc3QgKnJlcXVlc3QgPSBbZC0+bV9yZXF1ZXN0Lm5zVVJMUmVxdWVzdCgpIG11dGFi
bGVDb3B5XTsKLSAgICAgICAgd2tTZXROU1VSTFJlcXVlc3RTaG91bGRDb250ZW50U25pZmYocmVx
dWVzdCwgTk8pOwotICAgICAgICBjb25uZWN0aW9uID0gY3JlYXRlTlNVUkxDb25uZWN0aW9uKHJl
cXVlc3QsIGQtPm1fcHJveHkuZ2V0KCksIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKTsKLSAg
ICAgICAgW3JlcXVlc3QgcmVsZWFzZV07Ci0gICAgfQorICAgIE5TVVJMQ29ubmVjdGlvbiAqY29u
bmVjdGlvbiA9IGNyZWF0ZU5TVVJMQ29ubmVjdGlvbigKKyAgICAgICAgZC0+bV9wcm94eS5nZXQo
KSwKKyAgICAgICAgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UsCisgICAgICAgIGQtPm1fc2hv
dWxkQ29udGVudFNuaWZmIHx8IGZyYW1lLT5zZXR0aW5ncygpLT5sb2NhbEZpbGVDb250ZW50U25p
ZmZpbmdFbmFibGVkKCkpOwogCiAjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCiAgICAgYm9vbCBz
Y2hlZHVsZWQgPSBmYWxzZTsKQEAgLTI5NCw3ICszMjAsNyBAQCBib29sIFJlc291cmNlSGFuZGxl
OjpzdGFydChGcmFtZSogZnJhbWUpCiAgICAgaXNJbml0aWFsaXppbmdDb25uZWN0aW9uID0gTk87
CiAjZW5kaWYKIAotICAgIExPRyhOZXR3b3JrLCAiSGFuZGxlICVwIHN0YXJ0aW5nIGNvbm5lY3Rp
b24gJXAgZm9yICVAIiwgdGhpcywgY29ubmVjdGlvbiwgZC0+bV9yZXF1ZXN0Lm5zVVJMUmVxdWVz
dCgpKTsKKyAgICBMT0coTmV0d29yaywgIkhhbmRsZSAlcCBzdGFydGluZyBjb25uZWN0aW9uICVw
IGZvciAlQCIsIHRoaXMsIGNvbm5lY3Rpb24sIGZpcnN0UmVxdWVzdCgpLm5zVVJMUmVxdWVzdCgp
KTsKICAgICAKICAgICBkLT5tX2Nvbm5lY3Rpb24gPSBjb25uZWN0aW9uOwogCkBAIC0zMjEsNyAr
MzQ3LDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y2FuY2VsKCkKICAgICAgICAgW1tkLT5tX2N1
cnJlbnRNYWNDaGFsbGVuZ2Ugc2VuZGVyXSBjYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTpk
LT5tX2N1cnJlbnRNYWNDaGFsbGVuZ2VdOwogCiAgICAgaWYgKCFSZXNvdXJjZUhhbmRsZTo6ZGlk
U2VuZEJvZHlEYXRhRGVsZWdhdGVFeGlzdHMoKSkKLSAgICAgICAgZGlzYXNzb2NpYXRlU3RyZWFt
V2l0aFJlc291cmNlSGFuZGxlKFtkLT5tX3JlcXVlc3QubnNVUkxSZXF1ZXN0KCkgSFRUUEJvZHlT
dHJlYW1dKTsKKyAgICAgICAgZGlzYXNzb2NpYXRlU3RyZWFtV2l0aFJlc291cmNlSGFuZGxlKFtm
aXJzdFJlcXVlc3QoKS5uc1VSTFJlcXVlc3QoKSBIVFRQQm9keVN0cmVhbV0pOwogICAgIFtkLT5t
X2Nvbm5lY3Rpb24uZ2V0KCkgY2FuY2VsXTsKIH0KIApAQCAtNDM1LDQzICs0NjEsNTUgQEAgYm9v
bCBSZXNvdXJjZUhhbmRsZTo6d2lsbExvYWRGcm9tQ2FjaGUoUgogI2VuZGlmCiB9CiAKLXZvaWQg
UmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgUmVz
b3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hh
cj4mIGRhdGEsIEZyYW1lKikKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFs
cyBzdG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEsIEZyYW1lKiBmcmFtZSkKIHsKKyAgICBM
T0coTmV0d29yaywgIlJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5OiVA
IGFsbG93U3RvcmVkQ3JlZGVudGlhbHM6JXUiLCByZXF1ZXN0Lm5zVVJMUmVxdWVzdCgpLCBzdG9y
ZWRDcmVkZW50aWFscyk7CisKICAgICBOU0Vycm9yICpuc0Vycm9yID0gbmlsOwotICAgIAogICAg
IE5TVVJMUmVzcG9uc2UgKm5zVVJMUmVzcG9uc2UgPSBuaWw7CiAgICAgTlNEYXRhICpyZXN1bHQg
PSBuaWw7CiAKICAgICBBU1NFUlQoIXJlcXVlc3QuaXNFbXB0eSgpKTsKICAgICAKLSAgICBOU011
dGFibGVVUkxSZXF1ZXN0ICptdXRhYmxlUmVxdWVzdCA9IG5pbDsKLSAgICBpZiAoIXNob3VsZENv
bnRlbnRTbmlmZlVSTChyZXF1ZXN0LnVybCgpKSkgewotICAgICAgICBtdXRhYmxlUmVxdWVzdCA9
IFtbcmVxdWVzdC5uc1VSTFJlcXVlc3QoKSBtdXRhYmxlQ29weV0gYXV0b3JlbGVhc2VdOwotICAg
ICAgICB3a1NldE5TVVJMUmVxdWVzdFNob3VsZENvbnRlbnRTbmlmZihtdXRhYmxlUmVxdWVzdCwg
Tk8pOwotICAgIH0gCisjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgT3duUHRyPFdlYkNv
cmVTeW5jaHJvbm91c0xvYWRlckNsaWVudD4gY2xpZW50ID0gV2ViQ29yZVN5bmNocm9ub3VzTG9h
ZGVyQ2xpZW50OjpjcmVhdGUoKTsKKyAgICBjbGllbnQtPnNldEFsbG93U3RvcmVkQ3JlZGVudGlh
bHMoc3RvcmVkQ3JlZGVudGlhbHMgPT0gQWxsb3dTdG9yZWRDcmVkZW50aWFscyk7CiAKLSAgICAv
LyBJZiBhIFVSTCBhbHJlYWR5IGhhcyBjb29raWVzLCB0aGVuIHdlJ2xsIGlnbm9yZSB0aGUgM3Jk
IHBhcnR5IGNvb2tpZSBwb2xpY3kgYW5kIGFjY2VwdCBuZXcgY29va2llcy4KLSAgICBOU0hUVFBD
b29raWVTdG9yYWdlICpzaGFyZWRTdG9yYWdlID0gW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVk
SFRUUENvb2tpZVN0b3JhZ2VdOwotICAgIGlmIChbc2hhcmVkU3RvcmFnZSBjb29raWVBY2NlcHRQ
b2xpY3ldID09IE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9t
YWluCi0gICAgICAgICYmIFtbc2hhcmVkU3RvcmFnZSBjb29raWVzRm9yVVJMOnJlcXVlc3QudXJs
KCldIGNvdW50XSkgewotICAgICAgICBpZiAoIW11dGFibGVSZXF1ZXN0KQotICAgICAgICAgICAg
bXV0YWJsZVJlcXVlc3QgPSBbW3JlcXVlc3QubnNVUkxSZXF1ZXN0KCkgbXV0YWJsZUNvcHldIGF1
dG9yZWxlYXNlXTsKLSAgICAgICAgW211dGFibGVSZXF1ZXN0IHNldE1haW5Eb2N1bWVudFVSTDpb
bXV0YWJsZVJlcXVlc3QgVVJMXV07CisgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUg
PSBhZG9wdFJlZihuZXcgUmVzb3VyY2VIYW5kbGUocmVxdWVzdCwgY2xpZW50LmdldCgpLCBmYWxz
ZSAvKmRlZmVyc0xvYWRpbmcqLywgdHJ1ZSAvKnNob3VsZENvbnRlbnRTbmlmZiovKSk7CisKKyAg
ICBpZiAoaGFuZGxlLT5kLT5tX3NjaGVkdWxlZEZhaWx1cmVUeXBlICE9IE5vRmFpbHVyZSkgewor
ICAgICAgICBlcnJvciA9IGZyYW1lLT5sb2FkZXIoKS0+YmxvY2tlZEVycm9yKHJlcXVlc3QpOwor
ICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgTlNVUkxDb25uZWN0aW9uICpjb25uZWN0aW9u
ID0gaGFuZGxlLT5jcmVhdGVOU1VSTENvbm5lY3Rpb24oCisgICAgICAgIGhhbmRsZS0+ZGVsZWdh
dGUoKSwgLy8gQSBzeW5jaHJvbm91cyByZXF1ZXN0IGNhbm5vdCB0dXJuIGludG8gYSBkb3dubG9h
ZCwgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBwcm94eSB0aGUgZGVsZWdhdGUuCisgICAgICAgIHN0
b3JlZENyZWRlbnRpYWxzID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsCisgICAgICAgIGhhbmRs
ZS0+c2hvdWxkQ29udGVudFNuaWZmKCkgfHwgZnJhbWUtPnNldHRpbmdzKCktPmxvY2FsRmlsZUNv
bnRlbnRTbmlmZmluZ0VuYWJsZWQoKSk7CisKKyAgICBbY29ubmVjdGlvbiBzY2hlZHVsZUluUnVu
TG9vcDpbTlNSdW5Mb29wIGN1cnJlbnRSdW5Mb29wXSBmb3JNb2RlOldlYkNvcmVTeW5jaHJvbm91
c0xvYWRlclJ1bkxvb3BNb2RlXTsKKyAgICBbY29ubmVjdGlvbiBzdGFydF07CiAgICAgCi0gICAg
TlNVUkxSZXF1ZXN0ICpuc1JlcXVlc3QgPSBtdXRhYmxlUmVxdWVzdCA/IG11dGFibGVSZXF1ZXN0
IDogcmVxdWVzdC5uc1VSTFJlcXVlc3QoKTsKLSAgICAgICAgICAgIAotICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKKyAgICB3aGlsZSAoIWNsaWVudC0+aXNEb25lKCkpCisgICAgICAg
IFtbTlNSdW5Mb29wIGN1cnJlbnRSdW5Mb29wXSBydW5Nb2RlOldlYkNvcmVTeW5jaHJvbm91c0xv
YWRlclJ1bkxvb3BNb2RlIGJlZm9yZURhdGU6W05TRGF0ZSBkaXN0YW50RnV0dXJlXV07CisKKyAg
ICByZXN1bHQgPSBjbGllbnQtPmRhdGEoKTsKKyAgICBuc1VSTFJlc3BvbnNlID0gY2xpZW50LT5y
ZXNwb25zZSgpOworICAgIG5zRXJyb3IgPSBjbGllbnQtPmVycm9yKCk7CiAgICAgCi0jaWZuZGVm
IEJVSUxESU5HX09OX1RJR0VSCi0gICAgcmVzdWx0ID0gW1dlYkNvcmVTeW5jaHJvbm91c0xvYWRl
ciBsb2FkUmVxdWVzdDpuc1JlcXVlc3QgYWxsb3dTdG9yZWRDcmVkZW50aWFsczooc3RvcmVkQ3Jl
ZGVudGlhbHMgPT0gQWxsb3dTdG9yZWRDcmVkZW50aWFscykgcmV0dXJuaW5nUmVzcG9uc2U6Jm5z
VVJMUmVzcG9uc2UgZXJyb3I6Jm5zRXJyb3JdOworICAgIFtjb25uZWN0aW9uIGNhbmNlbF07Cisg
ICAgW2Nvbm5lY3Rpb24gcmVsZWFzZV07CisKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHN0b3Jl
ZENyZWRlbnRpYWxzKTsKKyAgICBOU1VSTFJlcXVlc3QgKm5zUmVxdWVzdCA9IG11dGFibGVSZXF1
ZXN0ID8gbXV0YWJsZVJlcXVlc3QgOiByZXF1ZXN0Lm5zVVJMUmVxdWVzdCgpOworCisgICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAgIHJlc3VsdCA9IFtOU1VSTENvbm5lY3Rpb24g
c2VuZFN5bmNocm9ub3VzUmVxdWVzdDpuc1JlcXVlc3QgcmV0dXJuaW5nUmVzcG9uc2U6Jm5zVVJM
UmVzcG9uc2UgZXJyb3I6Jm5zRXJyb3JdOwotI2VuZGlmCiAgICAgRU5EX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKKyNlbmRpZgogCi0gICAgaWYgKG5zRXJyb3IgPT0gbmlsKQorICAgIGlmICghbnNF
cnJvcikKICAgICAgICAgcmVzcG9uc2UgPSBuc1VSTFJlc3BvbnNlOwogICAgIGVsc2UgewogICAg
ICAgICByZXNwb25zZSA9IFJlc291cmNlUmVzcG9uc2UocmVxdWVzdC51cmwoKSwgU3RyaW5nKCks
IDAsIFN0cmluZygpLCBTdHJpbmcoKSk7CkBAIC01NDIsNyArNTgwLDcgQEAgdm9pZCBSZXNvdXJj
ZUhhbmRsZTo6ZGlkUmVjZWl2ZUF1dGhlbnRpYwogICAgICAgICAgICAgQVNTRVJUKGNyZWRlbnRp
YWwucGVyc2lzdGVuY2UoKSA9PSBDcmVkZW50aWFsUGVyc2lzdGVuY2VOb25lKTsKICAgICAgICAg
ICAgIGlmIChjaGFsbGVuZ2UuZmFpbHVyZVJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSA9PSA0
MDEpIHsKICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgY3JlZGVudGlhbCBiYWNrLCBwb3Nz
aWJseSBhZGRpbmcgaXQgYXMgYSBkZWZhdWx0IGZvciB0aGlzIGRpcmVjdG9yeS4KLSAgICAgICAg
ICAgICAgICBDcmVkZW50aWFsU3RvcmFnZTo6c2V0KGNyZWRlbnRpYWwsIGNoYWxsZW5nZS5wcm90
ZWN0aW9uU3BhY2UoKSwgZC0+bV9yZXF1ZXN0LnVybCgpKTsKKyAgICAgICAgICAgICAgICBDcmVk
ZW50aWFsU3RvcmFnZTo6c2V0KGNyZWRlbnRpYWwsIGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2Uo
KSwgZmlyc3RSZXF1ZXN0KCkudXJsKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgW2No
YWxsZW5nZS5zZW5kZXIoKSB1c2VDcmVkZW50aWFsOm1hYyhjcmVkZW50aWFsKSBmb3JBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZTptYWMoY2hhbGxlbmdlKV07CiAgICAgICAgICAgICByZXR1cm47CkBA
IC02MDQsNyArNjQyLDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDcmVkZW50aWFs
KAogICAgICAgICBDcmVkZW50aWFsIHdlYkNyZWRlbnRpYWwoY3JlZGVudGlhbCwgQ3JlZGVudGlh
bFBlcnNpc3RlbmNlTm9uZSk7CiAgICAgICAgIEtVUkwgdXJsVG9TdG9yZTsKICAgICAgICAgaWYg
KGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9uc2UoKS5odHRwU3RhdHVzQ29kZSgpID09IDQwMSkKLSAg
ICAgICAgICAgIHVybFRvU3RvcmUgPSBkLT5tX3JlcXVlc3QudXJsKCk7CisgICAgICAgICAgICB1
cmxUb1N0b3JlID0gZmlyc3RSZXF1ZXN0KCkudXJsKCk7CiAgICAgICAgIENyZWRlbnRpYWxTdG9y
YWdlOjpzZXQod2ViQ3JlZGVudGlhbCwgY29yZShbZC0+bV9jdXJyZW50TWFjQ2hhbGxlbmdlIHBy
b3RlY3Rpb25TcGFjZV0pLCB1cmxUb1N0b3JlKTsKICAgICAgICAgW1tkLT5tX2N1cnJlbnRNYWND
aGFsbGVuZ2Ugc2VuZGVyXSB1c2VDcmVkZW50aWFsOm1hYyh3ZWJDcmVkZW50aWFsKSBmb3JBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZTpkLT5tX2N1cnJlbnRNYWNDaGFsbGVuZ2VdOwogICAgIH0gZWxz
ZQpAQCAtNjc5LDExICs3MTcsMTEgQEAgLSAoTlNVUkxSZXF1ZXN0ICopY29ubmVjdGlvbjooTlNV
UkxDb25uZQogICAgICAgICAgICAgTlNNdXRhYmxlVVJMUmVxdWVzdCAqbXV0YWJsZVJlcXVlc3Qg
PSBbbmV3UmVxdWVzdCBtdXRhYmxlQ29weV07CiAgICAgICAgICAgICBbbXV0YWJsZVJlcXVlc3Qg
c2V0SFRUUE1ldGhvZDpsYXN0SFRUUE1ldGhvZF07CiAgICAgCi0gICAgICAgICAgICBGb3JtRGF0
YSogYm9keSA9IG1faGFuZGxlLT5yZXF1ZXN0KCkuaHR0cEJvZHkoKTsKKyAgICAgICAgICAgIEZv
cm1EYXRhKiBib2R5ID0gbV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBCb2R5KCk7CiAgICAg
ICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKGxhc3RIVFRQTWV0aG9kLCAiR0VUIikgJiYg
Ym9keSAmJiAhYm9keS0+aXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIFdlYkNvcmU6OnNldEhU
VFBCb2R5KG11dGFibGVSZXF1ZXN0LCBib2R5KTsKIAotICAgICAgICAgICAgU3RyaW5nIG9yaWdp
bmFsQ29udGVudFR5cGUgPSBtX2hhbmRsZS0+cmVxdWVzdCgpLmh0dHBDb250ZW50VHlwZSgpOwor
ICAgICAgICAgICAgU3RyaW5nIG9yaWdpbmFsQ29udGVudFR5cGUgPSBtX2hhbmRsZS0+Zmlyc3RS
ZXF1ZXN0KCkuaHR0cENvbnRlbnRUeXBlKCk7CiAgICAgICAgICAgICBpZiAoIW9yaWdpbmFsQ29u
dGVudFR5cGUuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIFttdXRhYmxlUmVxdWVzdCBzZXRW
YWx1ZTpvcmlnaW5hbENvbnRlbnRUeXBlIGZvckhUVFBIZWFkZXJGaWVsZDpAIkNvbnRlbnQtVHlw
ZSJdOwogCkBAIC03NzksNyArODE3LDcgQEAgLSAodm9pZCljb25uZWN0aW9uOihOU1VSTENvbm5l
Y3Rpb24gKiljbwogICAgIGlmIChzdGF0dXNDb2RlICE9IDMwNCkKICAgICAgICAgW3IgYWRqdXN0
TUlNRVR5cGVJZk5lY2Vzc2FyeV07CiAKLSAgICBpZiAoW21faGFuZGxlLT5yZXF1ZXN0KCkubnNV
UkxSZXF1ZXN0KCkgX3Byb3BlcnR5Rm9yS2V5OkAiRm9yY2VIVE1MTUlNRVR5cGUiXSkKKyAgICBp
ZiAoW21faGFuZGxlLT5maXJzdFJlcXVlc3QoKS5uc1VSTFJlcXVlc3QoKSBfcHJvcGVydHlGb3JL
ZXk6QCJGb3JjZUhUTUxNSU1FVHlwZSJdKQogICAgICAgICBbciBfc2V0TUlNRVR5cGU6QCJ0ZXh0
L2h0bWwiXTsKIAogI2lmIEVOQUJMRShXTUwpCkBAIC04NTUsNyArODkzLDcgQEAgLSAodm9pZClj
b25uZWN0aW9uRGlkRmluaXNoTG9hZGluZzooTlNVUgogICAgIENhbGxiYWNrR3VhcmQgZ3VhcmQ7
CiAKICAgICBpZiAoIVJlc291cmNlSGFuZGxlOjpkaWRTZW5kQm9keURhdGFEZWxlZ2F0ZUV4aXN0
cygpKQotICAgICAgICBkaXNhc3NvY2lhdGVTdHJlYW1XaXRoUmVzb3VyY2VIYW5kbGUoW21faGFu
ZGxlLT5yZXF1ZXN0KCkubnNVUkxSZXF1ZXN0KCkgSFRUUEJvZHlTdHJlYW1dKTsKKyAgICAgICAg
ZGlzYXNzb2NpYXRlU3RyZWFtV2l0aFJlc291cmNlSGFuZGxlKFttX2hhbmRsZS0+Zmlyc3RSZXF1
ZXN0KCkubnNVUkxSZXF1ZXN0KCkgSFRUUEJvZHlTdHJlYW1dKTsKIAogICAgIG1faGFuZGxlLT5j
bGllbnQoKS0+ZGlkRmluaXNoTG9hZGluZyhtX2hhbmRsZSk7CiB9CkBAIC04NzEsNyArOTA5LDcg
QEAgLSAodm9pZCljb25uZWN0aW9uOihOU1VSTENvbm5lY3Rpb24gKiljbwogICAgIENhbGxiYWNr
R3VhcmQgZ3VhcmQ7CiAKICAgICBpZiAoIVJlc291cmNlSGFuZGxlOjpkaWRTZW5kQm9keURhdGFE
ZWxlZ2F0ZUV4aXN0cygpKQotICAgICAgICBkaXNhc3NvY2lhdGVTdHJlYW1XaXRoUmVzb3VyY2VI
YW5kbGUoW21faGFuZGxlLT5yZXF1ZXN0KCkubnNVUkxSZXF1ZXN0KCkgSFRUUEJvZHlTdHJlYW1d
KTsKKyAgICAgICAgZGlzYXNzb2NpYXRlU3RyZWFtV2l0aFJlc291cmNlSGFuZGxlKFttX2hhbmRs
ZS0+Zmlyc3RSZXF1ZXN0KCkubnNVUkxSZXF1ZXN0KCkgSFRUUEJvZHlTdHJlYW1dKTsKIAogICAg
IG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkRmFpbChtX2hhbmRsZSwgZXJyb3IpOwogfQpAQCAtOTQ3
LDIyMCArOTg1LDY5IEBAIC0gKE5TQ2FjaGVkVVJMUmVzcG9uc2UgKiljb25uZWN0aW9uOihOU1UK
IAogI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgogCi1AaW1wbGVtZW50YXRpb24gV2ViQ29yZVN5
bmNocm9ub3VzTG9hZGVyCi0KLS0gKEJPT0wpX2lzRG9uZQotewotICAgIHJldHVybiBtX2lzRG9u
ZTsKLX0KLQotLSAodm9pZClkZWFsbG9jCitXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6
On5XZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQoKQogewotICAgIFttX3VybCByZWxlYXNl
XTsKLSAgICBbbV91c2VyIHJlbGVhc2VdOwotICAgIFttX3Bhc3MgcmVsZWFzZV07CiAgICAgW21f
cmVzcG9uc2UgcmVsZWFzZV07CiAgICAgW21fZGF0YSByZWxlYXNlXTsKICAgICBbbV9lcnJvciBy
ZWxlYXNlXTsKLSAgICAKLSAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKLS0gKE5TVVJMUmVxdWVz
dCAqKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24gd2lsbFNlbmRSZXF1
ZXN0OihOU1VSTFJlcXVlc3QgKiluZXdSZXF1ZXN0IHJlZGlyZWN0UmVzcG9uc2U6KE5TVVJMUmVz
cG9uc2UgKilyZWRpcmVjdFJlc3BvbnNlCit2b2lkIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNs
aWVudDo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgLypyZWRpcmVjdFJlc3BvbnNl
Ki8pCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pOwotCi0gICAgTE9HKE5ldHdvcmss
ICJXZWJDb3JlU3luY2hyb25vdXNMb2FkZXIgZGVsZWdhdGUgY29ubmVjdGlvbjolcCB3aWxsU2Vu
ZFJlcXVlc3Q6JUAgcmVkaXJlY3RSZXNwb25zZTolcCIsIGNvbm5lY3Rpb24sIFtuZXdSZXF1ZXN0
IGRlc2NyaXB0aW9uXSwgcmVkaXJlY3RSZXNwb25zZSk7Ci0KICAgICAvLyBGSVhNRTogVGhpcyBu
ZWVkcyB0byBiZSBmaXhlZCB0byBmb2xsb3cgdGhlIHJlZGlyZWN0IGNvcnJlY3RseSBldmVuIGZv
ciBjcm9zcy1kb21haW4gcmVxdWVzdHMuCi0gICAgaWYgKG1fdXJsICYmICFwcm90b2NvbEhvc3RB
bmRQb3J0QXJlRXF1YWwobV91cmwsIFtuZXdSZXF1ZXN0IFVSTF0pKSB7CisgICAgaWYgKCFwcm90
b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwoaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKSwgcmVx
dWVzdC51cmwoKSkpIHsKKyAgICAgICAgQVNTRVJUKCFtX2Vycm9yKTsKICAgICAgICAgbV9lcnJv
ciA9IFtbTlNFcnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46TlNVUkxFcnJvckRvbWFpbiBjb2Rl
Ok5TVVJMRXJyb3JCYWRTZXJ2ZXJSZXNwb25zZSB1c2VySW5mbzpuaWxdOwotICAgICAgICBtX2lz
RG9uZSA9IFlFUzsKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0KLSAgICBOU1VSTCAqY29w
eSA9IFtbbmV3UmVxdWVzdCBVUkxdIGNvcHldOwotICAgIFttX3VybCByZWxlYXNlXTsKLSAgICBt
X3VybCA9IGNvcHk7Ci0KLSAgICBpZiAocmVkaXJlY3RSZXNwb25zZSkgewotICAgICAgICAvLyBU
YWtlIHVzZXIvcGFzcyBvdXQgb2YgdGhlIFVSTC4KLSAgICAgICAgW21fdXNlciByZWxlYXNlXTsK
LSAgICAgICAgW21fcGFzcyByZWxlYXNlXTsKLSAgICAgICAgbV91c2VyID0gW1ttX3VybCB1c2Vy
XSBjb3B5XTsKLSAgICAgICAgbV9wYXNzID0gW1ttX3VybCBwYXNzd29yZF0gY29weV07Ci0gICAg
ICAgIGlmIChtX3VzZXIgfHwgbV9wYXNzKSB7Ci0gICAgICAgICAgICBSZXNvdXJjZVJlcXVlc3Qg
cmVxdWVzdFdpdGhvdXRDcmVkZW50aWFscyA9IG5ld1JlcXVlc3Q7Ci0gICAgICAgICAgICByZXF1
ZXN0V2l0aG91dENyZWRlbnRpYWxzLnJlbW92ZUNyZWRlbnRpYWxzKCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gcmVxdWVzdFdpdGhvdXRDcmVkZW50aWFscy5uc1VSTFJlcXVlc3QoKTsKLSAgICAgICAg
fQorICAgICAgICBtX2lzRG9uZSA9IHRydWU7CisgICAgICAgIHJlcXVlc3QgPSAwOworICAgICAg
ICByZXR1cm47CiAgICAgfQotCi0gICAgcmV0dXJuIG5ld1JlcXVlc3Q7CiB9CiAKLS0gKEJPT0wp
Y29ubmVjdGlvblNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlOihOU1VSTENvbm5lY3Rpb24gKilj
b25uZWN0aW9uCitib29sIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6c2hvdWxkVXNl
Q3JlZGVudGlhbFN0b3JhZ2UoUmVzb3VyY2VIYW5kbGUqKQogewotICAgIFVOVVNFRF9QQVJBTShj
b25uZWN0aW9uKTsKLQotICAgIExPRyhOZXR3b3JrLCAiV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVy
IGRlbGVnYXRlIGNvbm5lY3Rpb25TaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZTolcCIsIGNvbm5l
Y3Rpb24pOwotCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc2sgRnJhbWVMb2FkZXJDbGllbnQg
d2hldGhlciB1c2luZyBjcmVkZW50aWFsIHN0b3JhZ2UgaXMgZ2xvYmFsbHkgZm9yYmlkZGVuLgog
ICAgIHJldHVybiBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHM7CiB9CiAKLS0gKHZvaWQpY29ubmVj
dGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlvbiBkaWRSZWNlaXZlQXV0aGVudGljYXRp
b25DaGFsbGVuZ2U6KE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKiljaGFsbGVuZ2UKKyNp
ZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQorYm9vbCBXZWJDb3JlU3luY2hy
b25vdXNMb2FkZXJDbGllbnQ6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2Uo
UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBQcm90ZWN0aW9uU3BhY2UmKQogewotICAgIFVOVVNFRF9Q
QVJBTShjb25uZWN0aW9uKTsKLQotICAgIExPRyhOZXR3b3JrLCAiV2ViQ29yZVN5bmNocm9ub3Vz
TG9hZGVyIGRlbGVnYXRlIGNvbm5lY3Rpb246JXAgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlOiVwIiwgY29ubmVjdGlvbiwgY2hhbGxlbmdlKTsKKyAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGFzayBGcmFtZUxvYWRlckNsaWVudC4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgog
Ci0gICAgaWYgKG1fdXNlciAmJiBtX3Bhc3MpIHsKLSAgICAgICAgTlNVUkxDcmVkZW50aWFsICpj
cmVkZW50aWFsID0gW1tOU1VSTENyZWRlbnRpYWwgYWxsb2NdIGluaXRXaXRoVXNlcjptX3VzZXIK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXNzd29yZDptX3Bhc3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJzaXN0ZW5jZTpOU1VSTENyZWRl
bnRpYWxQZXJzaXN0ZW5jZU5vbmVdOwotICAgICAgICBLVVJMIHVybFRvU3RvcmU7Ci0gICAgICAg
IGlmIChbW2NoYWxsZW5nZSBmYWlsdXJlUmVzcG9uc2VdIGlzS2luZE9mQ2xhc3M6W05TSFRUUFVS
TFJlc3BvbnNlIGNsYXNzXV0gJiYgWyhOU0hUVFBVUkxSZXNwb25zZSopW2NoYWxsZW5nZSBmYWls
dXJlUmVzcG9uc2VdIHN0YXR1c0NvZGVdID09IDQwMSkKLSAgICAgICAgICAgIHVybFRvU3RvcmUg
PSBtX3VybDsKLSAgICAgICAgQ3JlZGVudGlhbFN0b3JhZ2U6OnNldChjb3JlKGNyZWRlbnRpYWwp
LCBjb3JlKFtjaGFsbGVuZ2UgcHJvdGVjdGlvblNwYWNlXSksIHVybFRvU3RvcmUpOwotICAgICAg
ICAKLSAgICAgICAgW1tjaGFsbGVuZ2Ugc2VuZGVyXSB1c2VDcmVkZW50aWFsOmNyZWRlbnRpYWwg
Zm9yQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6Y2hhbGxlbmdlXTsKLSAgICAgICAgW2NyZWRlbnRp
YWwgcmVsZWFzZV07Ci0gICAgICAgIFttX3VzZXIgcmVsZWFzZV07Ci0gICAgICAgIFttX3Bhc3Mg
cmVsZWFzZV07Ci0gICAgICAgIG1fdXNlciA9IDA7Ci0gICAgICAgIG1fcGFzcyA9IDA7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKFtjaGFsbGVuZ2UgcHJldmlvdXNGYWlsdXJlQ291
bnRdID09IDAgJiYgbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzKSB7Ci0gICAgICAgIENyZWRlbnRp
YWwgY3JlZGVudGlhbCA9IENyZWRlbnRpYWxTdG9yYWdlOjpnZXQoY29yZShbY2hhbGxlbmdlIHBy
b3RlY3Rpb25TcGFjZV0pKTsKLSAgICAgICAgaWYgKCFjcmVkZW50aWFsLmlzRW1wdHkoKSAmJiBj
cmVkZW50aWFsICE9IG1faW5pdGlhbENyZWRlbnRpYWwpIHsKLSAgICAgICAgICAgIEFTU0VSVChj
cmVkZW50aWFsLnBlcnNpc3RlbmNlKCkgPT0gQ3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZSk7Ci0g
ICAgICAgICAgICBpZiAoW1tjaGFsbGVuZ2UgZmFpbHVyZVJlc3BvbnNlXSBpc0tpbmRPZkNsYXNz
OltOU0hUVFBVUkxSZXNwb25zZSBjbGFzc11dICYmIFsoTlNIVFRQVVJMUmVzcG9uc2UgKilbY2hh
bGxlbmdlIGZhaWx1cmVSZXNwb25zZV0gc3RhdHVzQ29kZV0gPT0gNDAxKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gU3RvcmUgdGhlIGNyZWRlbnRpYWwgYmFjaywgcG9zc2libHkgYWRkaW5nIGl0IGFz
IGEgZGVmYXVsdCBmb3IgdGhpcyBkaXJlY3RvcnkuCi0gICAgICAgICAgICAgICAgQ3JlZGVudGlh
bFN0b3JhZ2U6OnNldChjcmVkZW50aWFsLCBjb3JlKFtjaGFsbGVuZ2UgcHJvdGVjdGlvblNwYWNl
XSksIG1fdXJsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFtbY2hhbGxlbmdlIHNlbmRl
cl0gdXNlQ3JlZGVudGlhbDptYWMoY3JlZGVudGlhbCkgZm9yQXV0aGVudGljYXRpb25DaGFsbGVu
Z2U6Y2hhbGxlbmdlXTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KK3Zv
aWQgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSYgY2hhbGxlbmdlKQorewogICAgIC8vIEZJWE1FOiBUaGUgdXNlciBzaG91bGQgYmUgYXNrZWQg
Zm9yIGNyZWRlbnRpYWxzLCBhcyBpbiBhc3luYyBjYXNlLgotICAgIFtbY2hhbGxlbmdlIHNlbmRl
cl0gY29udGludWVXaXRob3V0Q3JlZGVudGlhbEZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOmNo
YWxsZW5nZV07CisgICAgW2NoYWxsZW5nZS5zZW5kZXIoKSBjb250aW51ZVdpdGhvdXRDcmVkZW50
aWFsRm9yQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6Y2hhbGxlbmdlLm5zVVJMQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UoKV07CiB9CiAKLS0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9u
ICopY29ubmVjdGlvbiBkaWRSZWNlaXZlUmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKilyZXNwb25z
ZQordm9pZCBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmRpZFJlY2VpdmVSZXNwb25z
ZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewot
ICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTsKLQotICAgIExPRyhOZXR3b3JrLCAiV2ViQ29y
ZVN5bmNocm9ub3VzTG9hZGVyIGRlbGVnYXRlIGNvbm5lY3Rpb246JXAgZGlkUmVjZWl2ZVJlc3Bv
bnNlOiVwIChIVFRQIHN0YXR1cyAlZCwgcmVwb3J0ZWQgTUlNRVR5cGUgJyVzJykiLCBjb25uZWN0
aW9uLCByZXNwb25zZSwgW3Jlc3BvbnNlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc3Rh
dHVzQ29kZSldID8gWyhpZClyZXNwb25zZSBzdGF0dXNDb2RlXSA6IDAsIFtbcmVzcG9uc2UgTUlN
RVR5cGVdIFVURjhTdHJpbmddKTsKLQotICAgIE5TVVJMUmVzcG9uc2UgKnIgPSBbcmVzcG9uc2Ug
Y29weV07Ci0gICAgCiAgICAgW21fcmVzcG9uc2UgcmVsZWFzZV07Ci0gICAgbV9yZXNwb25zZSA9
IHI7CisgICAgbV9yZXNwb25zZSA9IFtyZXNwb25zZS5uc1VSTFJlc3BvbnNlKCkgY29weV07CiB9
CiAKLS0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlvbiBkaWRS
ZWNlaXZlRGF0YTooTlNEYXRhICopZGF0YQordm9pZCBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJD
bGllbnQ6OmRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciogZGF0YSwg
aW50IGxlbmd0aCwgaW50IC8qbGVuZ3RoUmVjZWl2ZWQqLykKIHsKLSAgICBVTlVTRURfUEFSQU0o
Y29ubmVjdGlvbik7Ci0KLSAgICBMT0coTmV0d29yaywgIldlYkNvcmVTeW5jaHJvbm91c0xvYWRl
ciBkZWxlZ2F0ZSBjb25uZWN0aW9uOiVwIGRpZFJlY2VpdmVEYXRhOiVwIiwgY29ubmVjdGlvbiwg
ZGF0YSk7Ci0KICAgICBpZiAoIW1fZGF0YSkKICAgICAgICAgbV9kYXRhID0gW1tOU011dGFibGVE
YXRhIGFsbG9jXSBpbml0XTsKLSAgICAKLSAgICBbbV9kYXRhIGFwcGVuZERhdGE6ZGF0YV07Cisg
ICAgW21fZGF0YSBhcHBlbmRCeXRlczpkYXRhIGxlbmd0aDpsZW5ndGhdOwogfQogCi0tICh2b2lk
KWNvbm5lY3Rpb25EaWRGaW5pc2hMb2FkaW5nOihOU1VSTENvbm5lY3Rpb24gKiljb25uZWN0aW9u
Cit2b2lkIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6ZGlkRmluaXNoTG9hZGluZyhS
ZXNvdXJjZUhhbmRsZSopCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pOwotCi0gICAg
TE9HKE5ldHdvcmssICJXZWJDb3JlU3luY2hyb25vdXNMb2FkZXIgZGVsZWdhdGUgY29ubmVjdGlv
bkRpZEZpbmlzaExvYWRpbmc6JXAiLCBjb25uZWN0aW9uKTsKLQotICAgIG1faXNEb25lID0gWUVT
OworICAgIG1faXNEb25lID0gdHJ1ZTsKIH0KIAotLSAodm9pZCljb25uZWN0aW9uOihOU1VSTENv
bm5lY3Rpb24gKiljb25uZWN0aW9uIGRpZEZhaWxXaXRoRXJyb3I6KE5TRXJyb3IgKillcnJvcgor
dm9pZCBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmRpZEZhaWwoUmVzb3VyY2VIYW5k
bGUqLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKLSAgICBVTlVTRURfUEFSQU0oY29u
bmVjdGlvbik7Ci0KLSAgICBMT0coTmV0d29yaywgIldlYkNvcmVTeW5jaHJvbm91c0xvYWRlciBk
ZWxlZ2F0ZSBjb25uZWN0aW9uOiVwIGRpZEZhaWxXaXRoRXJyb3I6JUAiLCBjb25uZWN0aW9uLCBl
cnJvcik7Ci0KICAgICBBU1NFUlQoIW1fZXJyb3IpOwotICAgIAotICAgIG1fZXJyb3IgPSBbZXJy
b3IgcmV0YWluXTsKLSAgICBtX2lzRG9uZSA9IFlFUzsKLX0KLQotLSAoTlNEYXRhICopX2RhdGEK
LXsKLSAgICByZXR1cm4gW1ttX2RhdGEgcmV0YWluXSBhdXRvcmVsZWFzZV07Ci19Ci0KLS0gKE5T
VVJMUmVzcG9uc2UgKilfcmVzcG9uc2UKLXsKLSAgICByZXR1cm4gW1ttX3Jlc3BvbnNlIHJldGFp
bl0gYXV0b3JlbGVhc2VdOwotfQogCi0tIChOU0Vycm9yICopX2Vycm9yCi17Ci0gICAgcmV0dXJu
IFtbbV9lcnJvciByZXRhaW5dIGF1dG9yZWxlYXNlXTsKKyAgICBtX2Vycm9yID0gW2Vycm9yIGNv
cHldOworICAgIG1faXNEb25lID0gdHJ1ZTsKIH0KIAotKyAoTlNEYXRhICopbG9hZFJlcXVlc3Q6
KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3QgYWxsb3dTdG9yZWRDcmVkZW50aWFsczooQk9PTClhbGxv
d1N0b3JlZENyZWRlbnRpYWxzIHJldHVybmluZ1Jlc3BvbnNlOihOU1VSTFJlc3BvbnNlICoqKXJl
c3BvbnNlIGVycm9yOihOU0Vycm9yICoqKWVycm9yCi17Ci0gICAgTE9HKE5ldHdvcmssICJXZWJD
b3JlU3luY2hyb25vdXNMb2FkZXIgbG9hZFJlcXVlc3Q6JUAgYWxsb3dTdG9yZWRDcmVkZW50aWFs
czoldSIsIHJlcXVlc3QsIGFsbG93U3RvcmVkQ3JlZGVudGlhbHMpOwotCi0gICAgV2ViQ29yZVN5
bmNocm9ub3VzTG9hZGVyICpkZWxlZ2F0ZSA9IFtbV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyIGFs
bG9jXSBpbml0XTsKLQotICAgIEtVUkwgdXJsKFtyZXF1ZXN0IFVSTF0pOwotICAgIGRlbGVnYXRl
LT5tX3VzZXIgPSBbbnNTdHJpbmdOaWxJZkVtcHR5KHVybC51c2VyKCkpIHJldGFpbl07Ci0gICAg
ZGVsZWdhdGUtPm1fcGFzcyA9IFtuc1N0cmluZ05pbElmRW1wdHkodXJsLnBhc3MoKSkgcmV0YWlu
XTsKLSAgICBkZWxlZ2F0ZS0+bV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzID0gYWxsb3dTdG9yZWRD
cmVkZW50aWFsczsKLQotICAgIE5TVVJMQ29ubmVjdGlvbiAqY29ubmVjdGlvbjsKLQotICAgIC8v
IFRha2UgdXNlci9wYXNzIG91dCBvZiB0aGUgVVJMLgotICAgIC8vIENyZWRlbnRpYWxzIGZvciBm
dHAgY2FuIG9ubHkgYmUgcGFzc2VkIGluIFVSTCwgdGhlIGNvbm5lY3Rpb246ZGlkUmVjZWl2ZUF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOiBkZWxlZ2F0ZSBjYWxsIHdvbid0IGJlIG1hZGUuCi0gICAg
aWYgKChkZWxlZ2F0ZS0+bV91c2VyIHx8IGRlbGVnYXRlLT5tX3Bhc3MpICYmIHVybC5wcm90b2Nv
bEluSFRUUEZhbWlseSgpKSB7Ci0gICAgICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0V2l0aG91
dENyZWRlbnRpYWxzID0gcmVxdWVzdDsKLSAgICAgICAgcmVxdWVzdFdpdGhvdXRDcmVkZW50aWFs
cy5yZW1vdmVDcmVkZW50aWFscygpOwotICAgICAgICBjb25uZWN0aW9uID0gY3JlYXRlTlNVUkxD
b25uZWN0aW9uKHJlcXVlc3RXaXRob3V0Q3JlZGVudGlhbHMubnNVUkxSZXF1ZXN0KCksIGRlbGVn
YXRlLCBhbGxvd1N0b3JlZENyZWRlbnRpYWxzKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyA8
cmRhcjovL3Byb2JsZW0vNzE3NDA1MD4gLSBGb3IgVVJMcyB0aGF0IG1hdGNoIHRoZSBwYXRocyBv
ZiB0aG9zZSBwcmV2aW91c2x5IGNoYWxsZW5nZWQgZm9yIEhUVFAgQmFzaWMgYXV0aGVudGljYXRp
b24sIAotICAgICAgICAvLyB0cnkgYW5kIHJldXNlIHRoZSBjcmVkZW50aWFsIHByZWVtcHRpdmVs
eSwgYXMgYWxsb3dlZCBieSBSRkMgMjYxNy4KLSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVl
c3RXaXRoSW5pdGlhbENyZWRlbnRpYWxzID0gcmVxdWVzdDsKLSAgICAgICAgaWYgKGFsbG93U3Rv
cmVkQ3JlZGVudGlhbHMgJiYgdXJsLnByb3RvY29sSW5IVFRQRmFtaWx5KCkpCi0gICAgICAgICAg
ICBkZWxlZ2F0ZS0+bV9pbml0aWFsQ3JlZGVudGlhbCA9IENyZWRlbnRpYWxTdG9yYWdlOjpnZXQo
dXJsKTsKLSAgICAgICAgICAgIAotICAgICAgICBpZiAoIWRlbGVnYXRlLT5tX2luaXRpYWxDcmVk
ZW50aWFsLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgU3RyaW5nIGF1dGhIZWFkZXIgPSAiQmFz
aWMgIiArIGVuY29kZUJhc2ljQXV0aG9yaXphdGlvbihkZWxlZ2F0ZS0+bV9pbml0aWFsQ3JlZGVu
dGlhbC51c2VyKCksIGRlbGVnYXRlLT5tX2luaXRpYWxDcmVkZW50aWFsLnBhc3N3b3JkKCkpOwot
ICAgICAgICAgICAgcmVxdWVzdFdpdGhJbml0aWFsQ3JlZGVudGlhbHMuYWRkSFRUUEhlYWRlckZp
ZWxkKCJBdXRob3JpemF0aW9uIiwgYXV0aEhlYWRlcik7Ci0gICAgICAgIH0KLSAgICAgICAgY29u
bmVjdGlvbiA9IGNyZWF0ZU5TVVJMQ29ubmVjdGlvbihyZXF1ZXN0V2l0aEluaXRpYWxDcmVkZW50
aWFscy5uc1VSTFJlcXVlc3QoKSwgZGVsZWdhdGUsIGFsbG93U3RvcmVkQ3JlZGVudGlhbHMpOwot
ICAgIH0KLQotICAgIFtjb25uZWN0aW9uIHNjaGVkdWxlSW5SdW5Mb29wOltOU1J1bkxvb3AgY3Vy
cmVudFJ1bkxvb3BdIGZvck1vZGU6V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyUnVuTG9vcE1vZGVd
OwotICAgIFtjb25uZWN0aW9uIHN0YXJ0XTsKLSAgICAKLSAgICB3aGlsZSAoIVtkZWxlZ2F0ZSBf
aXNEb25lXSkKLSAgICAgICAgW1tOU1J1bkxvb3AgY3VycmVudFJ1bkxvb3BdIHJ1bk1vZGU6V2Vi
Q29yZVN5bmNocm9ub3VzTG9hZGVyUnVuTG9vcE1vZGUgYmVmb3JlRGF0ZTpbTlNEYXRlIGRpc3Rh
bnRGdXR1cmVdXTsKLQotICAgIE5TRGF0YSAqZGF0YSA9IFtkZWxlZ2F0ZSBfZGF0YV07Ci0gICAg
KnJlc3BvbnNlID0gW2RlbGVnYXRlIF9yZXNwb25zZV07Ci0gICAgKmVycm9yID0gW2RlbGVnYXRl
IF9lcnJvcl07Ci0gICAgCi0gICAgW2Nvbm5lY3Rpb24gY2FuY2VsXTsKLSAgICAKLSAgICBbY29u
bmVjdGlvbiByZWxlYXNlXTsKLSAgICBbZGVsZWdhdGUgcmVsZWFzZV07Ci0KLSAgICBMT0coTmV0
d29yaywgIldlYkNvcmVTeW5jaHJvbm91c0xvYWRlciBkb25lIik7Ci0KLSAgICByZXR1cm4gZGF0
YTsKLX0KLQotQGVuZAotCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9x
dC9RTmV0d29ya1JlcGx5SGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3F0L1FOZXR3b3JrUmVwbHlIYW5kbGVyLmNwcAkocmV2aXNpb24gNjMxMDgpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUU5ldHdvcmtSZXBseUhhbmRsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTAsNyArMTUwLDcgQEAgUU5ldHdvcmtSZXBseUhhbmRsZXI6OlFO
ZXR3b3JrUmVwbHlIYW5kbAogICAgICwgbV9zaG91bGRGb3J3YXJkRGF0YShmYWxzZSkKICAgICAs
IG1fcmVkaXJlY3Rpb25UcmllcyhnTWF4UmVjdXJzaW9uTGltaXQpCiB7Ci0gICAgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0ICZyID0gbV9yZXNvdXJjZUhhbmRsZS0+cmVxdWVzdCgpOworICAgIGNvbnN0
IFJlc291cmNlUmVxdWVzdCAmciA9IG1fcmVzb3VyY2VIYW5kbGUtPmZpcnN0UmVxdWVzdCgpOwog
CiAgICAgaWYgKHIuaHR0cE1ldGhvZCgpID09ICJHRVQiKQogICAgICAgICBtX21ldGhvZCA9IFFO
ZXR3b3JrQWNjZXNzTWFuYWdlcjo6R2V0T3BlcmF0aW9uOwpAQCAtMzU4LDcgKzM1OCw3IEBAIHZv
aWQgUU5ldHdvcmtSZXBseUhhbmRsZXI6OnNlbmRSZXNwb25zZUkKICAgICAgICAgfQogICAgICAg
ICBtX3JlZGlyZWN0ZWQgPSB0cnVlOwogCi0gICAgICAgIFJlc291cmNlUmVxdWVzdCBuZXdSZXF1
ZXN0ID0gbV9yZXNvdXJjZUhhbmRsZS0+cmVxdWVzdCgpOworICAgICAgICBSZXNvdXJjZVJlcXVl
c3QgbmV3UmVxdWVzdCA9IG1fcmVzb3VyY2VIYW5kbGUtPmZpcnN0UmVxdWVzdCgpOwogICAgICAg
ICBuZXdSZXF1ZXN0LnNldFVSTChuZXdVcmwpOwogCiAgICAgICAgIGlmICgoKHN0YXR1c0NvZGUg
Pj0gMzAxICYmIHN0YXR1c0NvZGUgPD0gMzAzKSB8fCBzdGF0dXNDb2RlID09IDMwNykgJiYgbmV3
UmVxdWVzdC5odHRwTWV0aG9kKCkgPT0gIlBPU1QiKSB7CkBAIC00NDIsNyArNDQyLDcgQEAgdm9p
ZCBRTmV0d29ya1JlcGx5SGFuZGxlcjo6c3RhcnQoKQogICAgICAgICAgICAgbV9yZXBseSA9IG1h
bmFnZXItPmdldChtX3JlcXVlc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpQb3N0T3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICBGb3Jt
RGF0YUlPRGV2aWNlKiBwb3N0RGV2aWNlID0gbmV3IEZvcm1EYXRhSU9EZXZpY2UoZC0+bV9yZXF1
ZXN0Lmh0dHBCb2R5KCkpOyAKKyAgICAgICAgICAgIEZvcm1EYXRhSU9EZXZpY2UqIHBvc3REZXZp
Y2UgPSBuZXcgRm9ybURhdGFJT0RldmljZShkLT5tX2ZpcnN0UmVxdWVzdC5odHRwQm9keSgpKTsg
CiAgICAgICAgICAgICBtX3JlcGx5ID0gbWFuYWdlci0+cG9zdChtX3JlcXVlc3QsIHBvc3REZXZp
Y2UpOwogICAgICAgICAgICAgcG9zdERldmljZS0+c2V0UGFyZW50KG1fcmVwbHkpOwogICAgICAg
ICAgICAgYnJlYWs7CkBAIC00NTEsNyArNDUxLDcgQEAgdm9pZCBRTmV0d29ya1JlcGx5SGFuZGxl
cjo6c3RhcnQoKQogICAgICAgICAgICAgbV9yZXBseSA9IG1hbmFnZXItPmhlYWQobV9yZXF1ZXN0
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFFOZXR3b3JrQWNjZXNzTWFuYWdl
cjo6UHV0T3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICBGb3JtRGF0YUlPRGV2aWNlKiBwdXREZXZp
Y2UgPSBuZXcgRm9ybURhdGFJT0RldmljZShkLT5tX3JlcXVlc3QuaHR0cEJvZHkoKSk7IAorICAg
ICAgICAgICAgRm9ybURhdGFJT0RldmljZSogcHV0RGV2aWNlID0gbmV3IEZvcm1EYXRhSU9EZXZp
Y2UoZC0+bV9maXJzdFJlcXVlc3QuaHR0cEJvZHkoKSk7IAogICAgICAgICAgICAgbV9yZXBseSA9
IG1hbmFnZXItPnB1dChtX3JlcXVlc3QsIHB1dERldmljZSk7CiAgICAgICAgICAgICBwdXREZXZp
Y2UtPnNldFBhcmVudChtX3JlcGx5KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDY0LDcgKzQ2
NCw3IEBAIHZvaWQgUU5ldHdvcmtSZXBseUhhbmRsZXI6OnN0YXJ0KCkKICNlbmRpZgogI2lmIFFU
X1ZFUlNJT04gPj0gMHgwNDA3MDAKICAgICAgICAgY2FzZSBRTmV0d29ya0FjY2Vzc01hbmFnZXI6
OkN1c3RvbU9wZXJhdGlvbjoKLSAgICAgICAgICAgIG1fcmVwbHkgPSBtYW5hZ2VyLT5zZW5kQ3Vz
dG9tUmVxdWVzdChtX3JlcXVlc3QsIG1fcmVzb3VyY2VIYW5kbGUtPnJlcXVlc3QoKS5odHRwTWV0
aG9kKCkubGF0aW4xKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIG1fcmVwbHkgPSBtYW5hZ2VyLT5z
ZW5kQ3VzdG9tUmVxdWVzdChtX3JlcXVlc3QsIG1fcmVzb3VyY2VIYW5kbGUtPmZpcnN0UmVxdWVz
dCgpLmh0dHBNZXRob2QoKS5sYXRpbjEoKS5kYXRhKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAj
ZW5kaWYKICAgICAgICAgY2FzZSBRTmV0d29ya0FjY2Vzc01hbmFnZXI6OlVua25vd25PcGVyYXRp
b246IHsKQEAgLTQ5NCw3ICs0OTQsNyBAQCB2b2lkIFFOZXR3b3JrUmVwbHlIYW5kbGVyOjpzdGFy
dCgpCiAgICAgY29ubmVjdChtX3JlcGx5LCBTSUdOQUwocmVhZHlSZWFkKCkpLAogICAgICAgICAg
ICAgdGhpcywgU0xPVChmb3J3YXJkRGF0YSgpKSwgU0lHTkFMX0NPTk4pOwogCi0gICAgaWYgKG1f
cmVzb3VyY2VIYW5kbGUtPnJlcXVlc3QoKS5yZXBvcnRVcGxvYWRQcm9ncmVzcygpKSB7CisgICAg
aWYgKG1fcmVzb3VyY2VIYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnJlcG9ydFVwbG9hZFByb2dyZXNz
KCkpIHsKICAgICAgICAgY29ubmVjdChtX3JlcGx5LCBTSUdOQUwodXBsb2FkUHJvZ3Jlc3MocWlu
dDY0LCBxaW50NjQpKSwKICAgICAgICAgICAgICAgICB0aGlzLCBTTE9UKHVwbG9hZFByb2dyZXNz
KHFpbnQ2NCwgcWludDY0KSksIFNJR05BTF9DT05OKTsKICAgICB9CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VIYW5kbGVRdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNlSGFuZGxlUXQuY3BwCShyZXZpc2lvbiA2
MzEwOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9SZXNvdXJjZUhhbmRsZVF0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDEwICsxMzAsMTAgQEAgYm9vbCBSZXNvdXJjZUhhbmRs
ZTo6c3RhcnQoRnJhbWUqIGZyYW1lKQogICAgIGlmICghKGQtPm1fdXNlci5pc0VtcHR5KCkgfHwg
ZC0+bV9wYXNzLmlzRW1wdHkoKSkpIHsKICAgICAgICAgLy8gSWYgY3JlZGVudGlhbHMgd2VyZSBz
cGVjaWZpZWQgZm9yIHRoaXMgcmVxdWVzdCwgYWRkIHRoZW0gdG8gdGhlIHVybCwKICAgICAgICAg
Ly8gc28gdGhhdCB0aGV5IHdpbGwgYmUgcGFzc2VkIHRvIFFOZXR3b3JrUmVxdWVzdC4KLSAgICAg
ICAgS1VSTCB1cmxXaXRoQ3JlZGVudGlhbHMoZC0+bV9yZXF1ZXN0LnVybCgpKTsKKyAgICAgICAg
S1VSTCB1cmxXaXRoQ3JlZGVudGlhbHMoZmlyc3RSZXF1ZXN0KCkudXJsKCkpOwogICAgICAgICB1
cmxXaXRoQ3JlZGVudGlhbHMuc2V0VXNlcihkLT5tX3VzZXIpOwogICAgICAgICB1cmxXaXRoQ3Jl
ZGVudGlhbHMuc2V0UGFzcyhkLT5tX3Bhc3MpOwotICAgICAgICBkLT5tX3JlcXVlc3Quc2V0VVJM
KHVybFdpdGhDcmVkZW50aWFscyk7CisgICAgICAgIGQtPm1fZmlyc3RSZXF1ZXN0LnNldFVSTCh1
cmxXaXRoQ3JlZGVudGlhbHMpOwogICAgIH0KIAogICAgIGdldEludGVybmFsKCktPm1fZnJhbWUg
PSBzdGF0aWNfY2FzdDxGcmFtZUxvYWRlckNsaWVudFF0Kj4oZnJhbWUtPmxvYWRlcigpLT5jbGll
bnQoKSktPndlYkZyYW1lKCk7CkBAIC0xOTUsMTAgKzE5NSwxMCBAQCB2b2lkIFJlc291cmNlSGFu
ZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvCiAgICAgaWYgKCEoZC0+bV91c2VyLmlzRW1wdHkoKSB8
fCBkLT5tX3Bhc3MuaXNFbXB0eSgpKSkgewogICAgICAgICAvLyBJZiBjcmVkZW50aWFscyB3ZXJl
IHNwZWNpZmllZCBmb3IgdGhpcyByZXF1ZXN0LCBhZGQgdGhlbSB0byB0aGUgdXJsLAogICAgICAg
ICAvLyBzbyB0aGF0IHRoZXkgd2lsbCBiZSBwYXNzZWQgdG8gUU5ldHdvcmtSZXF1ZXN0LgotICAg
ICAgICBLVVJMIHVybFdpdGhDcmVkZW50aWFscyhkLT5tX3JlcXVlc3QudXJsKCkpOworICAgICAg
ICBLVVJMIHVybFdpdGhDcmVkZW50aWFscyhkLT5tX2ZpcnN0UmVxdWVzdC51cmwoKSk7CiAgICAg
ICAgIHVybFdpdGhDcmVkZW50aWFscy5zZXRVc2VyKGQtPm1fdXNlcik7CiAgICAgICAgIHVybFdp
dGhDcmVkZW50aWFscy5zZXRQYXNzKGQtPm1fcGFzcyk7Ci0gICAgICAgIGQtPm1fcmVxdWVzdC5z
ZXRVUkwodXJsV2l0aENyZWRlbnRpYWxzKTsKKyAgICAgICAgZC0+bV9maXJzdFJlcXVlc3Quc2V0
VVJMKHVybFdpdGhDcmVkZW50aWFscyk7CiAgICAgfQogICAgIGQtPm1fZnJhbWUgPSBzdGF0aWNf
Y2FzdDxGcmFtZUxvYWRlckNsaWVudFF0Kj4oZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSktPndl
YkZyYW1lKCk7CiAgICAgZC0+bV9qb2IgPSBuZXcgUU5ldHdvcmtSZXBseUhhbmRsZXIoaGFuZGxl
LmdldCgpLCBRTmV0d29ya1JlcGx5SGFuZGxlcjo6TG9hZE5vcm1hbCk7CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAJ
KHJldmlzaW9uIDYzMTA4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3Vy
Y2VIYW5kbGVTb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA0LDcgKzUwNCw3IEBAIHN0YXRp
YyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGEKICNlbmRpZgogICAgIGdfb2JqZWN0
X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1fbXNnKSwgInJlc291cmNlSGFuZGxlIiwgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oaGFuZGxlKSk7CiAKLSAgICBGb3JtRGF0YSogaHR0cEJvZHkgPSBkLT5t
X3JlcXVlc3QuaHR0cEJvZHkoKTsKKyAgICBGb3JtRGF0YSogaHR0cEJvZHkgPSBmaXJzdFJlcXVl
c3QoKS5odHRwQm9keSgpOwogICAgIGlmIChodHRwQm9keSAmJiAhaHR0cEJvZHktPmlzRW1wdHko
KSkgewogICAgICAgICBzaXplX3QgbnVtRWxlbWVudHMgPSBodHRwQm9keS0+ZWxlbWVudHMoKS5z
aXplKCk7CiAKQEAgLTUxMiw3ICs1MTIsNyBAQCBzdGF0aWMgYm9vbCBzdGFydEh0dHAoUmVzb3Vy
Y2VIYW5kbGUqIGhhCiAgICAgICAgIGlmIChudW1FbGVtZW50cyA8IDIpIHsKICAgICAgICAgICAg
IFZlY3RvcjxjaGFyPiBib2R5OwogICAgICAgICAgICAgaHR0cEJvZHktPmZsYXR0ZW4oYm9keSk7
Ci0gICAgICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3JlcXVlc3QoZC0+bV9tc2csIGQtPm1fcmVx
dWVzdC5odHRwQ29udGVudFR5cGUoKS51dGY4KCkuZGF0YSgpLAorICAgICAgICAgICAgc291cF9t
ZXNzYWdlX3NldF9yZXF1ZXN0KGQtPm1fbXNnLCBmaXJzdFJlcXVlc3QoKS5odHRwQ29udGVudFR5
cGUoKS51dGY4KCkuZGF0YSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNPVVBfTUVNT1JZX0NPUFksIGJvZHkuZGF0YSgpLCBib2R5LnNpemUoKSk7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAvKgpJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA2MzI1MSkK
KysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NCBAQAorMjAxMC0wNy0xMyAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDIyMDEKKyAgICAgICAgVXNlIFJlc291cmNl
SGFuZGxlIG9iamVjdCBmb3Igc3luY2hyb25vdXMgbG9hZGluZworCisgICAgICAgICogc3JjL1Jl
c291cmNlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpyZXF1
ZXN0KToKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgbm8gbG9uZ2VyIGNvbnN0IGluIGNyb3NzLXBs
YXRmb3JtIGNvZGUuCisKIDIwMTAtMDctMTMgIEFsYmVydCBKLiBXb25nICA8YWp3b25nQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCBidWlsZCBmaXguCkluZGV4OiBXZWJLaXQv
Y2hyb21pdW0vc3JjL1Jlc291cmNlSGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hy
b21pdW0vc3JjL1Jlc291cmNlSGFuZGxlLmNwcAkocmV2aXNpb24gNjMxMDgpCisrKyBXZWJLaXQv
Y2hyb21pdW0vc3JjL1Jlc291cmNlSGFuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI2LDcg
KzIyNiw3IEBAIFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IFJlc291cmNlSGFuZGwKICAgICBy
ZXR1cm4gMDsKIH0KIAotY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBSZXNvdXJjZUhhbmRsZTo6cmVx
dWVzdCgpIGNvbnN0CitSZXNvdXJjZVJlcXVlc3QmIFJlc291cmNlSGFuZGxlOjpyZXF1ZXN0KCkK
IHsKICAgICByZXR1cm4gZC0+bV9yZXF1ZXN0OwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61452</attachid>
            <date>2010-07-13 18:42:56 -0700</date>
            <delta_ts>2010-07-14 10:44:24 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>ResourceHandleSync2.txt</filename>
            <type>text/plain</type>
            <size>86889</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzI1OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTAgQEAKKzIwMTAtMDctMTMgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyMjAxCisgICAgICAgIFVz
ZSBSZXNvdXJjZUhhbmRsZSBvYmplY3QgZm9yIHN5bmNocm9ub3VzIGxvYWRpbmcKKworICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGU6OlJlc291cmNlSGFuZGxlKTogTW92ZWQgY29tbW9uIHRhc2tzIGZy
b20gY3JlYXRlKCkgdG8gY29uc3RydWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhh
bmRsZTo6Zmlyc3RSZXF1ZXN0KTogUmVuYW1lZCBmcm9tIHJlcXVlc3QoKS4gVGhpcyBpcyBub3Qg
Y2hhbmdlZCB3aXRoCisgICAgICAgIHJlZGlyZWN0LCBzbyB0aGUgb2xkIG5hbWUgd2FzIHF1aXRl
IGNvbmZ1c2luZy4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUu
aDogTWFkZSBjcmVhdGVOU1VSTENvbm5lY3Rpb24oKSBhIG1lbWJlciBmdW5jdGlvbiwgc2luY2UK
KyAgICAgICAgaXQgbm93IG5lZWRzIGFjY2VzcyB0byBib3RoIFJlc291cmNlSGFuZGxlIGFuZCBS
ZXNvdXJjZUhhbmRsZUludGVybmFsLiBBZGRlZCBjcmVhdGVDRlVSTENvbm5lY3Rpb24oKS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6UmVzb3VyY2VIYW5kbGVJbnRl
cm5hbCk6IFJlbmFtZWQgbV9yZXF1ZXN0IHRvIG1fZmlyc3RSZXF1ZXN0LgorCisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW06CisgICAgICAgIChXZWJD
b3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQpOiBSZXBsYWNlZCBhbiBPYmplY3RpdmUgQyBkZWxl
Z2F0ZSBjbGFzcyB3aXRoIGEgUmVzb3VyY2VIYW5kbGVDbGllbnQKKyAgICAgICAgc3ViY2xhc3Mu
IFRoaXMgYWxsb3dzIGZvciBtdWNoIGJldHRlciBjb2RlIHNoYXJpbmcsIHdpdGggY29tbW9uIGxv
Z2ljIGlzIGluIFJlc291cmNlSGFuZGxlLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGU6OmNyZWF0ZU5TVVJMQ29ubmVjdGlvbik6IEZhY3RvcmVkIG91dCBtb3JlIGNvZGUgdGhhdCBp
cyBjb21tb24KKyAgICAgICAgYmV0d2VlbiBzeW5jIGFuZCBhc3luYyBwYXJ0cy4KKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzdGFydCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGU6OmNhbmNlbCk6IFVwZGF0ZWQgZm9yIGZpcnN0UmVxdWVzdCgpIHJl
bmFtaW5nLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5
bmNocm9ub3VzbHkpOiBVc2UgUmVzb3VyY2VIYW5kbGUgYW5kIFJlc291cmNlSGFuZGxlQ2xpZW50
LAorICAgICAgICBsaWtlIGEgZ29vZCBsb2FkZXIuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKTogVXBkYXRlZCBmb3Ig
Zmlyc3RSZXF1ZXN0KCkgcmVuYW1pbmcuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRs
ZTo6cmVjZWl2ZWRDcmVkZW50aWFsKTogRGl0dG8uCisgICAgICAgICgtW1dlYkNvcmVSZXNvdXJj
ZUhhbmRsZUFzRGVsZWdhdGUgY29ubmVjdGlvbjp3aWxsU2VuZFJlcXVlc3Q6cmVkaXJlY3RSZXNw
b25zZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdh
dGUgY29ubmVjdGlvbjpkaWRSZWNlaXZlUmVzcG9uc2U6XSk6IERpdHRvLgorICAgICAgICAoLVtX
ZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlIGNvbm5lY3Rpb25EaWRGaW5pc2hMb2FkaW5n
Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZSBj
b25uZWN0aW9uOmRpZEZhaWxXaXRoRXJyb3I6XSk6IERpdHRvLgorCisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6c2V0QWxsb3dTdG9yZWRDcmVkZW50
aWFscyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6
OmlzRG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGll
bnQ6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyQ2xp
ZW50OjpXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmRpZFJlY2VpdmVSZXNwb25zZSk6
CisgICAgICAgIChXZWJDb3JlOjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpz
aG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmRp
ZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6ZGlkRmFpbCk6CisgICAgICAgIChX
ZWJDb3JlOjpkaWRSZWNlaXZlQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
SGFuZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhhbmRsZUludGVybmFsKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlOjp+UmVzb3VyY2VIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGU6OmNyZWF0ZUNGVVJMQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUhhbmRsZTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGU6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDcmVkZW50aWFsKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6d2lsbFNlbmRSZXF1ZXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6ZGlkUmVj
ZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVTeW5jaHJvbm91c0xvYWRl
ckNsaWVudDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29yZVN5bmNo
cm9ub3VzTG9hZGVyQ2xpZW50OjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlU3luY2hyb25vdXNMb2Fk
ZXJDbGllbnQ6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKToKKyAgICAgICAgU2FtZSBjaGFu
Z2VzIGZvciBDRk5ldHdvcmsgdmVyc2lvbi4gTm93IGl0J3MgYSBtb3JlIGRpcmVjdCBjb3B5L3Bh
c3RlIHRoYW4gYmVmb3JlLCBzb21lCisgICAgICAgIGRheSB3ZSdsbCBzaGFyZSB0aGUgY29kZS4K
KworICAgICAgICAqIGxvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWFpblJlc291cmNlTG9hZGVyOjpjb250aW51ZUFmdGVyQ29udGVudFBvbGljeSk6Cisg
ICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmNyZWF0ZVJlc291cmNlSGFuZGxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGlkUmVjZWl2ZVJl
c3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGlkRmlu
aXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmRp
ZEZhaWwpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjpkaWRSZWNl
aXZlTWFuaWZlc3RSZXNwb25zZSk6CisgICAgICAgICogbG9hZGVyL2ljb24vSWNvbkxvYWRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJY29uTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SWNvbkxvYWRlcjo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJDb3Jl
OjpJY29uTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omhl
YWRlckNhbGxiYWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3F0L1FOZXR3b3JrUmVw
bHlIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlIYW5kbGVyOjpz
dGFydCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9xdC9SZXNvdXJjZUhhbmRsZVF0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzdGFydCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpzdGFydEh0dHApOgorICAgICAgICBVcGRhdGVkIGZvciByZXF1ZXN0KCkg
LT4gZmlyc3RSZXF1ZXN0IHJlbmFtaW5nLgorCiAyMDEwLTA3LTEyICBUb255IEdlbnRpbGNvcmUg
IDx0b255Z0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVy
LgpJbmRleDogV2ViQ29yZS9sb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiA2MzEw
OCkKKysrIFdlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyMyw3ICsyMjMsNyBAQCB2b2lkIE1haW5SZXNvdXJjZUxvYWRlcjo6Y29udGludWVB
ZnRlckNvCiAgICAgICAgICAgICByZWNlaXZlZEVycm9yKGNhbm5vdFNob3dVUkxFcnJvcigpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBmcmFtZUxvYWRlcigpLT5j
bGllbnQoKS0+ZG93bmxvYWQobV9oYW5kbGUuZ2V0KCksIHJlcXVlc3QoKSwgbV9oYW5kbGUuZ2V0
KCktPnJlcXVlc3QoKSwgcik7CisgICAgICAgIGZyYW1lTG9hZGVyKCktPmNsaWVudCgpLT5kb3du
bG9hZChtX2hhbmRsZS5nZXQoKSwgcmVxdWVzdCgpLCBtX2hhbmRsZS5nZXQoKS0+Zmlyc3RSZXF1
ZXN0KCksIHIpOwogICAgICAgICAvLyBJdCBtaWdodCBoYXZlIGdvbmUgbWlzc2luZwogICAgICAg
ICBpZiAoZnJhbWVMb2FkZXIoKSkKICAgICAgICAgICAgIHJlY2VpdmVkRXJyb3IoaW50ZXJydXB0
aW9uRm9yUG9saWN5Q2hhbmdlRXJyb3IoKSk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAJKHJldmlzaW9uIDYzMTA4KQorKysg
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDc5LDcgKzQ3OSw3IEBAIFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IEFw
cGxpY2F0aW9uQ2EKICAgICBtX2N1cnJlbnRSZXNvdXJjZUlkZW50aWZpZXIgPSBtX2ZyYW1lLT5w
YWdlKCktPnByb2dyZXNzKCktPmNyZWF0ZVVuaXF1ZUlkZW50aWZpZXIoKTsKICAgICBpZiAoUGFn
ZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkgewogICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVy
KiBpbnNwZWN0b3JDb250cm9sbGVyID0gcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpOwotICAg
ICAgICBpbnNwZWN0b3JDb250cm9sbGVyLT5pZGVudGlmaWVyRm9ySW5pdGlhbFJlcXVlc3QobV9j
dXJyZW50UmVzb3VyY2VJZGVudGlmaWVyLCBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2Fk
ZXIoKSwgaGFuZGxlLT5yZXF1ZXN0KCkpOworICAgICAgICBpbnNwZWN0b3JDb250cm9sbGVyLT5p
ZGVudGlmaWVyRm9ySW5pdGlhbFJlcXVlc3QobV9jdXJyZW50UmVzb3VyY2VJZGVudGlmaWVyLCBt
X2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSwgaGFuZGxlLT5maXJzdFJlcXVlc3Qo
KSk7CiAgICAgICAgIFJlc291cmNlUmVzcG9uc2UgcmVkaXJlY3RSZXNwb25zZSA9IFJlc291cmNl
UmVzcG9uc2UoKTsKICAgICAgICAgaW5zcGVjdG9yQ29udHJvbGxlci0+d2lsbFNlbmRSZXF1ZXN0
KG1fY3VycmVudFJlc291cmNlSWRlbnRpZmllciwgcmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7
CiAgICAgfQpAQCAtNTE1LDcgKzUxNSw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpk
aWRSZWNlaXZlUmUKICAgICAKICAgICBBU1NFUlQoaGFuZGxlID09IG1fY3VycmVudEhhbmRsZSk7
CiAKLSAgICBLVVJMIHVybChoYW5kbGUtPnJlcXVlc3QoKS51cmwoKSk7CisgICAgS1VSTCB1cmwo
aGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKSk7CiAgICAgaWYgKHVybC5oYXNGcmFnbWVudElk
ZW50aWZpZXIoKSkKICAgICAgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwogICAg
IApAQCAtNTMyLDcgKzUzMiw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpkaWRSZWNl
aXZlUmUKICAgICAgICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiBuZXdlc3RDYWNoZWRSZXNv
dXJjZSA9IG1fbmV3ZXN0Q2FjaGUtPnJlc291cmNlRm9yVVJMKHVybCk7CiAgICAgICAgIGlmIChu
ZXdlc3RDYWNoZWRSZXNvdXJjZSkgewogICAgICAgICAgICAgbV9jYWNoZUJlaW5nVXBkYXRlZC0+
YWRkUmVzb3VyY2UoQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUodXJsLCBuZXdlc3RD
YWNoZWRSZXNvdXJjZS0+cmVzcG9uc2UoKSwgdHlwZSwgbmV3ZXN0Q2FjaGVkUmVzb3VyY2UtPmRh
dGEoKSkpOwotICAgICAgICAgICAgbV9wZW5kaW5nRW50cmllcy5yZW1vdmUobV9jdXJyZW50SGFu
ZGxlLT5yZXF1ZXN0KCkudXJsKCkpOworICAgICAgICAgICAgbV9wZW5kaW5nRW50cmllcy5yZW1v
dmUobV9jdXJyZW50SGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKSk7CiAgICAgICAgICAgICBt
X2N1cnJlbnRIYW5kbGUtPmNhbmNlbCgpOwogICAgICAgICAgICAgbV9jdXJyZW50SGFuZGxlID0g
MDsKICAgICAgICAgICAgIC8vIExvYWQgdGhlIG5leHQgcmVzb3VyY2UsIGlmIGFueS4KQEAgLTU0
Miw3ICs1NDIsNyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGlkUmVjZWl2ZVJlCiAg
ICAgICAgIC8vIFRoZSBzZXJ2ZXIgY291bGQgcmV0dXJuIDMwNCBmb3IgYW4gdW5jb25kaXRpb25h
bCByZXF1ZXN0IC0gaW4gdGhpcyBjYXNlLCB3ZSBoYW5kbGUgdGhlIHJlc3BvbnNlIGFzIGEgbm9y
bWFsIGVycm9yLgogICAgIH0KIAotICAgIGlmIChyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpIC8g
MTAwICE9IDIgfHwgcmVzcG9uc2UudXJsKCkgIT0gbV9jdXJyZW50SGFuZGxlLT5yZXF1ZXN0KCku
dXJsKCkpIHsKKyAgICBpZiAocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAvIDEwMCAhPSAyIHx8
IHJlc3BvbnNlLnVybCgpICE9IG1fY3VycmVudEhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkp
IHsKICAgICAgICAgaWYgKCh0eXBlICYgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpFeHBsaWNp
dCkgfHwgKHR5cGUgJiBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OkZhbGxiYWNrKSkgewogICAg
ICAgICAgICAgLy8gTm90ZSB0aGF0IGNhY2hlVXBkYXRlRmFpbGVkKCkgY2FuIGNhdXNlIHRoZSBj
YWNoZSBncm91cCB0byBiZSBkZWxldGVkLgogICAgICAgICAgICAgY2FjaGVVcGRhdGVGYWlsZWQo
KTsKQEAgLTU1NywxMCArNTU3LDEwIEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpkaWRS
ZWNlaXZlUmUKICAgICAgICAgICAgIC8vIENvcHkgdGhlIHJlc291cmNlIGFuZCBpdHMgbWV0YWRh
dGEgZnJvbSB0aGUgbmV3ZXN0IGFwcGxpY2F0aW9uIGNhY2hlIGluIGNhY2hlIGdyb3VwIHdob3Nl
IGNvbXBsZXRlbmVzcyBmbGFnIGlzIGNvbXBsZXRlLCBhbmQgYWN0CiAgICAgICAgICAgICAvLyBh
cyBpZiB0aGF0IHdhcyB0aGUgZmV0Y2hlZCByZXNvdXJjZSwgaWdub3JpbmcgdGhlIHJlc291cmNl
IG9idGFpbmVkIGZyb20gdGhlIG5ldHdvcmsuCiAgICAgICAgICAgICBBU1NFUlQobV9uZXdlc3RD
YWNoZSk7Ci0gICAgICAgICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIG5ld2VzdENhY2hl
ZFJlc291cmNlID0gbV9uZXdlc3RDYWNoZS0+cmVzb3VyY2VGb3JVUkwoaGFuZGxlLT5yZXF1ZXN0
KCkudXJsKCkpOworICAgICAgICAgICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiBuZXdlc3RD
YWNoZWRSZXNvdXJjZSA9IG1fbmV3ZXN0Q2FjaGUtPnJlc291cmNlRm9yVVJMKGhhbmRsZS0+Zmly
c3RSZXF1ZXN0KCkudXJsKCkpOwogICAgICAgICAgICAgQVNTRVJUKG5ld2VzdENhY2hlZFJlc291
cmNlKTsKICAgICAgICAgICAgIG1fY2FjaGVCZWluZ1VwZGF0ZWQtPmFkZFJlc291cmNlKEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRlKHVybCwgbmV3ZXN0Q2FjaGVkUmVzb3VyY2UtPnJl
c3BvbnNlKCksIHR5cGUsIG5ld2VzdENhY2hlZFJlc291cmNlLT5kYXRhKCkpKTsKLSAgICAgICAg
ICAgIG1fcGVuZGluZ0VudHJpZXMucmVtb3ZlKG1fY3VycmVudEhhbmRsZS0+cmVxdWVzdCgpLnVy
bCgpKTsKKyAgICAgICAgICAgIG1fcGVuZGluZ0VudHJpZXMucmVtb3ZlKG1fY3VycmVudEhhbmRs
ZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkpOwogICAgICAgICAgICAgbV9jdXJyZW50SGFuZGxlLT5j
YW5jZWwoKTsKICAgICAgICAgICAgIG1fY3VycmVudEhhbmRsZSA9IDA7CiAgICAgICAgICAgICAv
LyBMb2FkIHRoZSBuZXh0IHJlc291cmNlLCBpZiBhbnkuCkBAIC02MDUsOSArNjA1LDkgQEAgdm9p
ZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmRpZEZpbmlzaExvYQogICAgIH0KICAKICAgICBBU1NF
UlQobV9jdXJyZW50SGFuZGxlID09IGhhbmRsZSk7Ci0gICAgQVNTRVJUKG1fcGVuZGluZ0VudHJp
ZXMuY29udGFpbnMoaGFuZGxlLT5yZXF1ZXN0KCkudXJsKCkpKTsKKyAgICBBU1NFUlQobV9wZW5k
aW5nRW50cmllcy5jb250YWlucyhoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpKSk7CiAgICAg
Ci0gICAgbV9wZW5kaW5nRW50cmllcy5yZW1vdmUoaGFuZGxlLT5yZXF1ZXN0KCkudXJsKCkpOwor
ICAgIG1fcGVuZGluZ0VudHJpZXMucmVtb3ZlKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkp
OwogICAgIAogICAgIEFTU0VSVChtX2NhY2hlQmVpbmdVcGRhdGVkKTsKIApAQCAtNjMyLDggKzYz
Miw4IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpkaWRGYWlsKFJlc28KICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIHVuc2lnbmVkIHR5cGUgPSBtX2N1cnJlbnRSZXNvdXJjZSA/
IG1fY3VycmVudFJlc291cmNlLT50eXBlKCkgOiBtX3BlbmRpbmdFbnRyaWVzLmdldChoYW5kbGUt
PnJlcXVlc3QoKS51cmwoKSk7Ci0gICAgS1VSTCB1cmwoaGFuZGxlLT5yZXF1ZXN0KCkudXJsKCkp
OworICAgIHVuc2lnbmVkIHR5cGUgPSBtX2N1cnJlbnRSZXNvdXJjZSA/IG1fY3VycmVudFJlc291
cmNlLT50eXBlKCkgOiBtX3BlbmRpbmdFbnRyaWVzLmdldChoYW5kbGUtPmZpcnN0UmVxdWVzdCgp
LnVybCgpKTsKKyAgICBLVVJMIHVybChoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpKTsKICAg
ICBpZiAodXJsLmhhc0ZyYWdtZW50SWRlbnRpZmllcigpKQogICAgICAgICB1cmwucmVtb3ZlRnJh
Z21lbnRJZGVudGlmaWVyKCk7CiAKQEAgLTY2OSwxMyArNjY5LDEyIEBAIHZvaWQgQXBwbGljYXRp
b25DYWNoZUdyb3VwOjpkaWRSZWNlaXZlTWEKICAgICBpZiAocmVzcG9uc2UuaHR0cFN0YXR1c0Nv
ZGUoKSA9PSAzMDQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChyZXNwb25zZS5odHRwU3Rh
dHVzQ29kZSgpIC8gMTAwICE9IDIgfHwgcmVzcG9uc2UudXJsKCkgIT0gbV9tYW5pZmVzdEhhbmRs
ZS0+cmVxdWVzdCgpLnVybCgpIHx8ICFlcXVhbElnbm9yaW5nQ2FzZShyZXNwb25zZS5taW1lVHlw
ZSgpLCAidGV4dC9jYWNoZS1tYW5pZmVzdCIpKSB7CisgICAgaWYgKHJlc3BvbnNlLmh0dHBTdGF0
dXNDb2RlKCkgLyAxMDAgIT0gMiB8fCByZXNwb25zZS51cmwoKSAhPSBtX21hbmlmZXN0SGFuZGxl
LT5maXJzdFJlcXVlc3QoKS51cmwoKSB8fCAhZXF1YWxJZ25vcmluZ0Nhc2UocmVzcG9uc2UubWlt
ZVR5cGUoKSwgInRleHQvY2FjaGUtbWFuaWZlc3QiKSkgewogICAgICAgICBjYWNoZVVwZGF0ZUZh
aWxlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9tYW5pZmVzdFJlc291cmNl
ID0gQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUobV9tYW5pZmVzdEhhbmRsZS0+cmVx
dWVzdCgpLnVybCgpLCByZXNwb25zZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpNYW5p
ZmVzdCk7CisgICAgbV9tYW5pZmVzdFJlc291cmNlID0gQXBwbGljYXRpb25DYWNoZVJlc291cmNl
OjpjcmVhdGUobV9tYW5pZmVzdEhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCksIHJlc3BvbnNl
LCBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6Ok1hbmlmZXN0KTsKIH0KIAogdm9pZCBBcHBsaWNh
dGlvbkNhY2hlR3JvdXA6OmRpZFJlY2VpdmVNYW5pZmVzdERhdGEoY29uc3QgY2hhciogZGF0YSwg
aW50IGxlbmd0aCkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkxvYWRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNwcAkocmV2aXNpb24g
NjMxMDgpCisrKyBXZWJDb3JlL2xvYWRlci9pY29uL0ljb25Mb2FkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgSWNvbkxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNl
KFN1YnIKIAogICAgIGlmIChzdGF0dXMgJiYgKHN0YXR1cyA8IDIwMCB8fCBzdGF0dXMgPiAyOTkp
KSB7CiAgICAgICAgIFJlc291cmNlSGFuZGxlKiBoYW5kbGUgPSByZXNvdXJjZUxvYWRlci0+aGFu
ZGxlKCk7Ci0gICAgICAgIGZpbmlzaExvYWRpbmcoaGFuZGxlID8gaGFuZGxlLT5yZXF1ZXN0KCku
dXJsKCkgOiBLVVJMKCksIDApOworICAgICAgICBmaW5pc2hMb2FkaW5nKGhhbmRsZSA/IGhhbmRs
ZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkgOiBLVVJMKCksIDApOwogICAgIH0KIH0KIApAQCAtMTE1
LDcgKzExNSw3IEBAIHZvaWQgSWNvbkxvYWRlcjo6ZGlkRmFpbChTdWJyZXNvdXJjZUxvYWQKICAg
ICBpZiAobV9sb2FkSXNJblByb2dyZXNzKSB7CiAgICAgICAgIEFTU0VSVChyZXNvdXJjZUxvYWRl
ciA9PSBtX3Jlc291cmNlTG9hZGVyKTsKICAgICAgICAgUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSA9
IHJlc291cmNlTG9hZGVyLT5oYW5kbGUoKTsKLSAgICAgICAgZmluaXNoTG9hZGluZyhoYW5kbGUg
PyBoYW5kbGUtPnJlcXVlc3QoKS51cmwoKSA6IEtVUkwoKSwgMCk7CisgICAgICAgIGZpbmlzaExv
YWRpbmcoaGFuZGxlID8gaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKSA6IEtVUkwoKSwgMCk7
CiAgICAgfQogfQogCkBAIC0xMzcsNyArMTM3LDcgQEAgdm9pZCBJY29uTG9hZGVyOjpkaWRGaW5p
c2hMb2FkaW5nKFN1YnJlcwogICAgIGlmIChtX2xvYWRJc0luUHJvZ3Jlc3MpIHsKICAgICAgICAg
QVNTRVJUKHJlc291cmNlTG9hZGVyID09IG1fcmVzb3VyY2VMb2FkZXIpOwogICAgICAgICBSZXNv
dXJjZUhhbmRsZSogaGFuZGxlID0gcmVzb3VyY2VMb2FkZXItPmhhbmRsZSgpOwotICAgICAgICBm
aW5pc2hMb2FkaW5nKGhhbmRsZSA/IGhhbmRsZS0+cmVxdWVzdCgpLnVybCgpIDogS1VSTCgpLCBt
X3Jlc291cmNlTG9hZGVyLT5yZXNvdXJjZURhdGEoKSk7CisgICAgICAgIGZpbmlzaExvYWRpbmco
aGFuZGxlID8gaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKSA6IEtVUkwoKSwgbV9yZXNvdXJj
ZUxvYWRlci0+cmVzb3VyY2VEYXRhKCkpOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCShyZXZpc2lvbiA2MzEwOCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAy
MDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDMwICszNywyOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBib29sIHNob3VsZEZvcmNlQ29udGVudFNu
aWZmaW5nOwogCi1SZXNvdXJjZUhhbmRsZTo6UmVzb3VyY2VIYW5kbGUoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50LCBib29sIGRlZmVy
c0xvYWRpbmcsCi0gICAgICAgICBib29sIHNob3VsZENvbnRlbnRTbmlmZikKLSAgICA6IGQobmV3
IFJlc291cmNlSGFuZGxlSW50ZXJuYWwodGhpcywgcmVxdWVzdCwgY2xpZW50LCBkZWZlcnNMb2Fk
aW5nLCBzaG91bGRDb250ZW50U25pZmYpKQorUmVzb3VyY2VIYW5kbGU6OlJlc291cmNlSGFuZGxl
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNs
aWVudCwgYm9vbCBkZWZlcnNMb2FkaW5nLCBib29sIHNob3VsZENvbnRlbnRTbmlmZikKKyAgICA6
IGQobmV3IFJlc291cmNlSGFuZGxlSW50ZXJuYWwodGhpcywgcmVxdWVzdCwgY2xpZW50LCBkZWZl
cnNMb2FkaW5nLCBzaG91bGRDb250ZW50U25pZmYgJiYgc2hvdWxkQ29udGVudFNuaWZmVVJMKHJl
cXVlc3QudXJsKCkpKSkKIHsKKyAgICBpZiAoIXJlcXVlc3QudXJsKCkuaXNWYWxpZCgpKSB7Cisg
ICAgICAgIHNjaGVkdWxlRmFpbHVyZShJbnZhbGlkVVJMRmFpbHVyZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoIXBvcnRBbGxvd2VkKHJlcXVlc3QudXJsKCkpKSB7CisgICAg
ICAgIHNjaGVkdWxlRmFpbHVyZShCbG9ja2VkRmFpbHVyZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiB9CiAKIFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IFJlc291cmNlSGFuZGxlOjpjcmVh
dGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUhhbmRsZUNsaWVudCog
Y2xpZW50LAogICAgIEZyYW1lKiBmcmFtZSwgYm9vbCBkZWZlcnNMb2FkaW5nLCBib29sIHNob3Vs
ZENvbnRlbnRTbmlmZikKIHsKLSAgICBpZiAoc2hvdWxkQ29udGVudFNuaWZmKQotICAgICAgICBz
aG91bGRDb250ZW50U25pZmYgPSBzaG91bGRDb250ZW50U25pZmZVUkwocmVxdWVzdC51cmwoKSk7
Ci0KICAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IG5ld0hhbmRsZShhZG9wdFJlZihuZXcgUmVz
b3VyY2VIYW5kbGUocmVxdWVzdCwgY2xpZW50LCBkZWZlcnNMb2FkaW5nLCBzaG91bGRDb250ZW50
U25pZmYpKSk7CiAKLSAgICBpZiAoIXJlcXVlc3QudXJsKCkuaXNWYWxpZCgpKSB7Ci0gICAgICAg
IG5ld0hhbmRsZS0+c2NoZWR1bGVGYWlsdXJlKEludmFsaWRVUkxGYWlsdXJlKTsKKyAgICBpZiAo
bmV3SGFuZGxlLT5kLT5tX3NjaGVkdWxlZEZhaWx1cmVUeXBlICE9IE5vRmFpbHVyZSkKICAgICAg
ICAgcmV0dXJuIG5ld0hhbmRsZS5yZWxlYXNlKCk7Ci0gICAgfQogCi0gICAgaWYgKCFwb3J0QWxs
b3dlZChyZXF1ZXN0LnVybCgpKSkgewotICAgICAgICBuZXdIYW5kbGUtPnNjaGVkdWxlRmFpbHVy
ZShCbG9ja2VkRmFpbHVyZSk7Ci0gICAgICAgIHJldHVybiBuZXdIYW5kbGUucmVsZWFzZSgpOwot
ICAgIH0KLSAgICAgICAgCiAgICAgaWYgKG5ld0hhbmRsZS0+c3RhcnQoZnJhbWUpKQogICAgICAg
ICByZXR1cm4gbmV3SGFuZGxlLnJlbGVhc2UoKTsKIApAQCAtMTA1LDkgKzEwMyw5IEBAIHZvaWQg
UmVzb3VyY2VIYW5kbGU6OnNldENsaWVudChSZXNvdXJjZUgKICAgICBkLT5tX2NsaWVudCA9IGNs
aWVudDsKIH0KIAotY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBSZXNvdXJjZUhhbmRsZTo6cmVxdWVz
dCgpIGNvbnN0CitSZXNvdXJjZVJlcXVlc3QmIFJlc291cmNlSGFuZGxlOjpmaXJzdFJlcXVlc3Qo
KQogewotICAgIHJldHVybiBkLT5tX3JlcXVlc3Q7CisgICAgcmV0dXJuIGQtPm1fZmlyc3RSZXF1
ZXN0OwogfQogCiBjb25zdCBTdHJpbmcmIFJlc291cmNlSGFuZGxlOjpsYXN0SFRUUE1ldGhvZCgp
IGNvbnN0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAko
cmV2aXNpb24gNjMxMDgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5k
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDggKzExMCw4IEBAIHByaXZhdGU6CiBwdWJsaWM6
CiAgICAgLy8gRklYTUU6IHNob3VsZCBub3QgbmVlZCB0aGUgRnJhbWUKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gY3JlYXRlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJl
c291cmNlSGFuZGxlQ2xpZW50KiwgRnJhbWUqLCBib29sIGRlZmVyc0xvYWRpbmcsIGJvb2wgc2hv
dWxkQ29udGVudFNuaWZmKTsKLQogICAgIHN0YXRpYyB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9u
b3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNl
RXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhLCBGcmFtZSogZnJh
bWUpOworCiAgICAgc3RhdGljIHZvaWQgcHJlcGFyZUZvclVSTChjb25zdCBLVVJMJik7CiAgICAg
c3RhdGljIGJvb2wgd2lsbExvYWRGcm9tQ2FjaGUoUmVzb3VyY2VSZXF1ZXN0JiwgRnJhbWUqKTsK
ICAgICBzdGF0aWMgdm9pZCBjYWNoZU1ldGFkYXRhKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBj
b25zdCBWZWN0b3I8Y2hhcj4mKTsKQEAgLTE5Nyw3ICsxOTcsNyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7CiAgICAgICAKLSAgICBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QoKSBjb25zdDsKKyAgICBSZXNvdXJjZVJlcXVlc3QmIGZpcnN0UmVxdWVz
dCgpOwogICAgIGNvbnN0IFN0cmluZyYgbGFzdEhUVFBNZXRob2QoKSBjb25zdDsKIAogICAgIHZv
aWQgZmlyZUZhaWx1cmUoVGltZXI8UmVzb3VyY2VIYW5kbGU+Kik7CkBAIC0yMTUsNiArMjE1LDEy
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHJlZkF1dGhlbnRpY2F0aW9uQ2xpZW50KCkg
eyByZWYoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBkZXJlZkF1dGhlbnRpY2F0aW9uQ2xpZW50KCkg
eyBkZXJlZigpOyB9CiAKKyNpZiBQTEFURk9STShNQUMpCisgICAgdm9pZCBjcmVhdGVOU1VSTENv
bm5lY3Rpb24oaWQgZGVsZWdhdGUsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UsIGJv
b2wgc2hvdWxkQ29udGVudFNuaWZmKTsKKyNlbGlmIFBMQVRGT1JNKENGKQorICAgIHZvaWQgY3Jl
YXRlQ0ZVUkxDb25uZWN0aW9uKGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UsIGJvb2wg
c2hvdWxkQ29udGVudFNuaWZmKTsKKyNlbmRpZgorCiAgICAgZnJpZW5kIGNsYXNzIFJlc291cmNl
SGFuZGxlSW50ZXJuYWw7CiAgICAgT3duUHRyPFJlc291cmNlSGFuZGxlSW50ZXJuYWw+IGQ7CiB9
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJ
bnRlcm5hbC5oCShyZXZpc2lvbiA2MzEwOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHB1YmxpYzoKICAgICAgICAgUmVzb3VyY2VIYW5kbGVJ
bnRlcm5hbChSZXNvdXJjZUhhbmRsZSogbG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjLCBib29sIGRlZmVyc0xvYWRpbmcsIGJvb2wg
c2hvdWxkQ29udGVudFNuaWZmKQogICAgICAgICAgICAgOiBtX2NsaWVudChjKQotICAgICAgICAg
ICAgLCBtX3JlcXVlc3QocmVxdWVzdCkKKyAgICAgICAgICAgICwgbV9maXJzdFJlcXVlc3QocmVx
dWVzdCkKICAgICAgICAgICAgICwgbV9sYXN0SFRUUE1ldGhvZChyZXF1ZXN0Lmh0dHBNZXRob2Qo
KSkKICAgICAgICAgICAgICwgc3RhdHVzKDApCiAgICAgICAgICAgICAsIG1fZGVmZXJzTG9hZGlu
ZyhkZWZlcnNMb2FkaW5nKQpAQCAtMTM2LDEwICsxMzYsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICAgICAgLCBtX3NjaGVkdWxlZEZhaWx1cmVUeXBlKFJlc291cmNlSGFuZGxlOjpO
b0ZhaWx1cmUpCiAgICAgICAgICAgICAsIG1fZmFpbHVyZVRpbWVyKGxvYWRlciwgJlJlc291cmNl
SGFuZGxlOjpmaXJlRmFpbHVyZSkKICAgICAgICAgewotICAgICAgICAgICAgY29uc3QgS1VSTCYg
dXJsID0gbV9yZXF1ZXN0LnVybCgpOworICAgICAgICAgICAgY29uc3QgS1VSTCYgdXJsID0gbV9m
aXJzdFJlcXVlc3QudXJsKCk7CiAgICAgICAgICAgICBtX3VzZXIgPSB1cmwudXNlcigpOwogICAg
ICAgICAgICAgbV9wYXNzID0gdXJsLnBhc3MoKTsKLSAgICAgICAgICAgIG1fcmVxdWVzdC5yZW1v
dmVDcmVkZW50aWFscygpOworICAgICAgICAgICAgbV9maXJzdFJlcXVlc3QucmVtb3ZlQ3JlZGVu
dGlhbHMoKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgflJlc291cmNlSGFuZGxlSW50
ZXJuYWwoKTsKQEAgLTE0Nyw3ICsxNDcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogICAg
ICAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogbV9jbGllbnQ7CiAgICAgICAgIAotICAgICAgICBS
ZXNvdXJjZVJlcXVlc3QgbV9yZXF1ZXN0OworICAgICAgICBSZXNvdXJjZVJlcXVlc3QgbV9maXJz
dFJlcXVlc3Q7CiAgICAgICAgIFN0cmluZyBtX2xhc3RIVFRQTWV0aG9kOwogCiAgICAgICAgIC8v
IFN1Z2dlc3RlZCBjcmVkZW50aWFscyBmb3IgdGhlIGN1cnJlbnQgcmVkaXJlY3Rpb24gc3RlcC4K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5k
bGVDRk5ldC5jcHAJKHJldmlzaW9uIDYzMTA4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NiwzNiArNjYs
NDMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgQ0ZTdHJpbmdSZWYgV2ViQ29yZVN5
bmNocm9ub3VzTG9hZGVyUnVuTG9vcE1vZGUgPSBDRlNUUigiV2ViQ29yZVN5bmNocm9ub3VzTG9h
ZGVyUnVuTG9vcE1vZGUiKTsKIAotY2xhc3MgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyIHsKK2Ns
YXNzIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudCA6IHB1YmxpYyBSZXNvdXJjZUhhbmRs
ZUNsaWVudCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGxvYWQo
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNlUmVzcG9u
c2UmLCBSZXNvdXJjZUVycm9yJik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8V2ViQ29yZVN5bmNo
cm9ub3VzTG9hZGVyQ2xpZW50PiBjcmVhdGUoUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFJl
c291cmNlRXJyb3ImIGVycm9yKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBX
ZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQocmVzcG9uc2UsIGVycm9yKSk7CisgICAgfQor
CisgICAgdm9pZCBzZXRBbGxvd1N0b3JlZENyZWRlbnRpYWxzKGJvb2wgYWxsb3cpIHsgbV9hbGxv
d1N0b3JlZENyZWRlbnRpYWxzID0gYWxsb3c7IH0KKyAgICBib29sIGlzRG9uZSgpIHsgcmV0dXJu
IG1faXNEb25lOyB9CisKKyAgICBDRk11dGFibGVEYXRhUmVmIGRhdGEoKSB7IHJldHVybiBtX2Rh
dGEuZ2V0KCk7IH0KKworICAgIHZpcnR1YWwgdm9pZCB3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VI
YW5kbGUqLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiAvKnJlZGly
ZWN0UmVzcG9uc2UqLyk7CisgICAgdmlydHVhbCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9y
YWdlKFJlc291cmNlSGFuZGxlKik7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlJik7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhh
bmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50LCBpbnQgLypsZW5ndGhS
ZWNlaXZlZCovKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhh
bmRsZSopOworICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3Qg
UmVzb3VyY2VFcnJvciYpOworI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0sp
CisgICAgdmlydHVhbCBib29sIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2Uo
UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBQcm90ZWN0aW9uU3BhY2UmKTsKKyNlbmRpZgogCiBwcml2
YXRlOgotICAgIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlcihSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSwgUmVzb3VyY2VFcnJvciYgZXJyb3IpCi0gICAgICAgIDogbV9pc0RvbmUoZmFsc2UpCisg
ICAgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50KFJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlLCBSZXNvdXJjZUVycm9yJiBlcnJvcikKKyAgICAgICAgOiBtX2FsbG93U3RvcmVkQ3JlZGVu
dGlhbHMoZmFsc2UpCiAgICAgICAgICwgbV9yZXNwb25zZShyZXNwb25zZSkKICAgICAgICAgLCBt
X2Vycm9yKGVycm9yKQorICAgICAgICAsIG1faXNEb25lKGZhbHNlKQogICAgIHsKICAgICB9CiAK
LSAgICBzdGF0aWMgQ0ZVUkxSZXF1ZXN0UmVmIHdpbGxTZW5kUmVxdWVzdChDRlVSTENvbm5lY3Rp
b25SZWYsIENGVVJMUmVxdWVzdFJlZiwgQ0ZVUkxSZXNwb25zZVJlZiwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbyk7Ci0gICAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKENGVVJMQ29ubmVj
dGlvblJlZiwgQ0ZVUkxSZXNwb25zZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Ci0gICAg
c3RhdGljIHZvaWQgZGlkUmVjZWl2ZURhdGEoQ0ZVUkxDb25uZWN0aW9uUmVmLCBDRkRhdGFSZWYs
IENGSW5kZXgsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwotICAgIHN0YXRpYyB2b2lkIGRpZEZp
bmlzaExvYWRpbmcoQ0ZVUkxDb25uZWN0aW9uUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsK
LSAgICBzdGF0aWMgdm9pZCBkaWRGYWlsKENGVVJMQ29ubmVjdGlvblJlZiwgQ0ZFcnJvclJlZiwg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Ci0gICAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZUNoYWxs
ZW5nZShDRlVSTENvbm5lY3Rpb25SZWYsIENGVVJMQXV0aENoYWxsZW5nZVJlZiwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbyk7Ci0gICAgc3RhdGljIEJvb2xlYW4gc2hvdWxkVXNlQ3JlZGVudGlhbFN0
b3JhZ2UoQ0ZVUkxDb25uZWN0aW9uUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKLQotICAg
IGJvb2wgbV9pc0RvbmU7Ci0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBtX3VybDsKLSAgICBSZXRh
aW5QdHI8Q0ZTdHJpbmdSZWY+IG1fdXNlcjsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IG1f
cGFzczsKLSAgICAvLyBTdG9yZSB0aGUgcHJlZW1wdGl2ZWx5IHVzZWQgaW5pdGlhbCBjcmVkZW50
aWFsIHNvIHRoYXQgaWYgd2UgZ2V0IGFuIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZSwgd2Ugd29u
J3QgdXNlIHRoZSBzYW1lIG9uZSBhZ2Fpbi4KLSAgICBDcmVkZW50aWFsIG1faW5pdGlhbENyZWRl
bnRpYWw7CiAgICAgYm9vbCBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHM7CiAgICAgUmVzb3VyY2VS
ZXNwb25zZSYgbV9yZXNwb25zZTsKICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4gbV9k
YXRhOwogICAgIFJlc291cmNlRXJyb3ImIG1fZXJyb3I7CisgICAgYm9vbCBtX2lzRG9uZTsKIH07
CiAKIHN0YXRpYyBIYXNoU2V0PFN0cmluZz4mIGFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGVIb3N0
cygpCkBAIC0xMzcsNyArMTQ0LDcgQEAgQ0ZVUkxSZXF1ZXN0UmVmIHdpbGxTZW5kUmVxdWVzdChD
RlVSTENvbgogICAgICAgICByZXR1cm4gY2ZSZXF1ZXN0OwogICAgIH0KIAotICAgIExPRyhOZXR3
b3JrLCAiQ0ZOZXQgLSB3aWxsU2VuZFJlcXVlc3QoY29ubj0lcCwgaGFuZGxlPSVwKSAoJXMpIiwg
Y29ubiwgaGFuZGxlLCBoYW5kbGUtPnJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0
YSgpKTsKKyAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gd2lsbFNlbmRSZXF1ZXN0KGNvbm49JXAs
IGhhbmRsZT0lcCkgKCVzKSIsIGNvbm4sIGhhbmRsZSwgaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51
cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAogICAgIFJlc291cmNlUmVxdWVzdCByZXF1
ZXN0OwogICAgIGlmIChjZlJlZGlyZWN0UmVzcG9uc2UpIHsKQEAgLTE0OSwxMSArMTU2LDExIEBA
IENGVVJMUmVxdWVzdFJlZiB3aWxsU2VuZFJlcXVlc3QoQ0ZVUkxDb24KICAgICAgICAgICAgICAg
ICBSZXRhaW5QdHI8Q0ZNdXRhYmxlVVJMUmVxdWVzdFJlZj4gbXV0YWJsZVJlcXVlc3QoQWRvcHRD
RiwgQ0ZVUkxSZXF1ZXN0Q3JlYXRlTXV0YWJsZUNvcHkoMCwgY2ZSZXF1ZXN0KSk7CiAgICAgICAg
ICAgICAgICAgQ0ZVUkxSZXF1ZXN0U2V0SFRUUFJlcXVlc3RNZXRob2QobXV0YWJsZVJlcXVlc3Qu
Z2V0KCksIGxhc3RIVFRQTWV0aG9kLmdldCgpKTsKIAotICAgICAgICAgICAgICAgIEZvcm1EYXRh
KiBib2R5ID0gaGFuZGxlLT5yZXF1ZXN0KCkuaHR0cEJvZHkoKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIWVxdWFsSWdub3JpbmdDYXNlKGhhbmRsZS0+cmVxdWVzdCgpLmh0dHBNZXRob2QoKSwgIkdF
VCIpICYmIGJvZHkgJiYgIWJvZHktPmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBGb3JtRGF0
YSogYm9keSA9IGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkuaHR0cEJvZHkoKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkuaHR0cE1l
dGhvZCgpLCAiR0VUIikgJiYgYm9keSAmJiAhYm9keS0+aXNFbXB0eSgpKQogICAgICAgICAgICAg
ICAgICAgICBXZWJDb3JlOjpzZXRIVFRQQm9keShtdXRhYmxlUmVxdWVzdC5nZXQoKSwgYm9keSk7
CiAKLSAgICAgICAgICAgICAgICBTdHJpbmcgb3JpZ2luYWxDb250ZW50VHlwZSA9IGhhbmRsZS0+
cmVxdWVzdCgpLmh0dHBDb250ZW50VHlwZSgpOworICAgICAgICAgICAgICAgIFN0cmluZyBvcmln
aW5hbENvbnRlbnRUeXBlID0gaGFuZGxlLT5maXJzdFJlcXVlc3QoKS5odHRwQ29udGVudFR5cGUo
KTsKICAgICAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IG9yaWdpbmFsQ29udGVu
dFR5cGVDRihBZG9wdENGLCBvcmlnaW5hbENvbnRlbnRUeXBlLmNyZWF0ZUNGU3RyaW5nKCkpOwog
ICAgICAgICAgICAgICAgIGlmICghb3JpZ2luYWxDb250ZW50VHlwZS5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICAgICAgICAgIENGVVJMUmVxdWVzdFNldEhUVFBIZWFkZXJGaWVsZFZhbHVlKG11dGFi
bGVSZXF1ZXN0LmdldCgpLCBDRlNUUigiQ29udGVudC1UeXBlIiksIG9yaWdpbmFsQ29udGVudFR5
cGVDRi5nZXQoKSk7CkBAIC0xODQsNyArMTkxLDcgQEAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2Uo
Q0ZVUkxDb25uZWN0aW9uUgogewogICAgIFJlc291cmNlSGFuZGxlKiBoYW5kbGUgPSBzdGF0aWNf
Y2FzdDxSZXNvdXJjZUhhbmRsZSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKIAot
ICAgIExPRyhOZXR3b3JrLCAiQ0ZOZXQgLSBkaWRSZWNlaXZlUmVzcG9uc2UoY29ubj0lcCwgaGFu
ZGxlPSVwKSAoJXMpIiwgY29ubiwgaGFuZGxlLCBoYW5kbGUtPnJlcXVlc3QoKS51cmwoKS5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gZGlkUmVjZWl2
ZVJlc3BvbnNlKGNvbm49JXAsIGhhbmRsZT0lcCkgKCVzKSIsIGNvbm4sIGhhbmRsZSwgaGFuZGxl
LT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAogICAgIGlm
ICghaGFuZGxlLT5jbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjA0LDcgKzIxMSw3IEBA
IHZvaWQgZGlkUmVjZWl2ZURhdGEoQ0ZVUkxDb25uZWN0aW9uUmVmIGMKICAgICBjb25zdCBVSW50
OCogYnl0ZXMgPSBDRkRhdGFHZXRCeXRlUHRyKGRhdGEpOwogICAgIENGSW5kZXggbGVuZ3RoID0g
Q0ZEYXRhR2V0TGVuZ3RoKGRhdGEpOwogCi0gICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIGRpZFJl
Y2VpdmVEYXRhKGNvbm49JXAsIGhhbmRsZT0lcCwgYnl0ZXM9JWQpICglcykiLCBjb25uLCBoYW5k
bGUsIGxlbmd0aCwgaGFuZGxlLT5yZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7CisgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIGRpZFJlY2VpdmVEYXRhKGNvbm49JXAsIGhh
bmRsZT0lcCwgYnl0ZXM9JWQpICglcykiLCBjb25uLCBoYW5kbGUsIGxlbmd0aCwgaGFuZGxlLT5m
aXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAogICAgIGlmICho
YW5kbGUtPmNsaWVudCgpKQogICAgICAgICBoYW5kbGUtPmNsaWVudCgpLT5kaWRSZWNlaXZlRGF0
YShoYW5kbGUsIChjb25zdCBjaGFyKilieXRlcywgbGVuZ3RoLCBvcmlnaW5hbExlbmd0aCk7CkBA
IC0yMjIsNyArMjI5LDcgQEAgc3RhdGljIEJvb2xlYW4gc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3Jh
ZwogewogICAgIFJlc291cmNlSGFuZGxlKiBoYW5kbGUgPSBjb25zdF9jYXN0PFJlc291cmNlSGFu
ZGxlKj4oc3RhdGljX2Nhc3Q8Y29uc3QgUmVzb3VyY2VIYW5kbGUqPihjbGllbnRJbmZvKSk7CiAK
LSAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoY29u
bj0lcCwgaGFuZGxlPSVwKSAoJXMpIiwgY29ubiwgaGFuZGxlLCBoYW5kbGUtPnJlcXVlc3QoKS51
cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBMT0coTmV0d29yaywgIkNGTmV0IC0g
c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoY29ubj0lcCwgaGFuZGxlPSVwKSAoJXMpIiwgY29u
biwgaGFuZGxlLCBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCkpOwogCiAgICAgaWYgKCFoYW5kbGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIz
NCw3ICsyNDEsNyBAQCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoQ0ZVUkxDb25uZWN0aW9uUmVmCiB7
CiAgICAgUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxl
Kj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOwogCi0gICAgTE9HKE5ldHdvcmssICJD
Rk5ldCAtIGRpZEZpbmlzaExvYWRpbmcoY29ubj0lcCwgaGFuZGxlPSVwKSAoJXMpIiwgY29ubiwg
aGFuZGxlLCBoYW5kbGUtPnJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsK
KyAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gZGlkRmluaXNoTG9hZGluZyhjb25uPSVwLCBoYW5k
bGU9JXApICglcykiLCBjb25uLCBoYW5kbGUsIGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCku
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBpZiAoaGFuZGxlLT5jbGllbnQoKSkKICAg
ICAgICAgaGFuZGxlLT5jbGllbnQoKS0+ZGlkRmluaXNoTG9hZGluZyhoYW5kbGUpOwpAQCAtMjQ0
LDcgKzI1MSw3IEBAIHZvaWQgZGlkRmFpbChDRlVSTENvbm5lY3Rpb25SZWYgY29ubiwgQ0YKIHsK
ICAgICBSZXNvdXJjZUhhbmRsZSogaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUq
Pihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7CiAKLSAgICBMT0coTmV0d29yaywgIkNG
TmV0IC0gZGlkRmFpbChjb25uPSVwLCBoYW5kbGU9JXAsIGVycm9yID0gJXApICglcykiLCBjb25u
LCBoYW5kbGUsIGVycm9yLCBoYW5kbGUtPnJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKKyAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gZGlkRmFpbChjb25uPSVwLCBoYW5k
bGU9JXAsIGVycm9yID0gJXApICglcykiLCBjb25uLCBoYW5kbGUsIGVycm9yLCBoYW5kbGUtPmZp
cnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgaWYgKGhh
bmRsZS0+Y2xpZW50KCkpCiAgICAgICAgIGhhbmRsZS0+Y2xpZW50KCktPmRpZEZhaWwoaGFuZGxl
LCBSZXNvdXJjZUVycm9yKGVycm9yKSk7CkBAIC0yNzcsNyArMjg0LDcgQEAgdm9pZCBkaWRSZWNl
aXZlQ2hhbGxlbmdlKENGVVJMQ29ubmVjdGlvbgogewogICAgIFJlc291cmNlSGFuZGxlKiBoYW5k
bGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVu
dEluZm8pKTsKICAgICBBU1NFUlQoaGFuZGxlKTsKLSAgICBMT0coTmV0d29yaywgIkNGTmV0IC0g
ZGlkUmVjZWl2ZUNoYWxsZW5nZShjb25uPSVwLCBoYW5kbGU9JXAgKCVzKSIsIGNvbm4sIGhhbmRs
ZSwgaGFuZGxlLT5yZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAg
TE9HKE5ldHdvcmssICJDRk5ldCAtIGRpZFJlY2VpdmVDaGFsbGVuZ2UoY29ubj0lcCwgaGFuZGxl
PSVwICglcykiLCBjb25uLCBoYW5kbGUsIGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBoYW5kbGUtPmRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjaGFsbGVuZ2UsIGhhbmRsZSkp
OwogfQpAQCAtMzAwLDE0ICszMDcsMTQgQEAgdm9pZCBhZGRIZWFkZXJzRnJvbUhhc2hNYXAoQ0ZN
dXRhYmxlVVJMUgogUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJu
YWwoKQogewogICAgIGlmIChtX2Nvbm5lY3Rpb24pIHsKLSAgICAgICAgTE9HKE5ldHdvcmssICJD
Rk5ldCAtIENhbmNlbGxpbmcgY29ubmVjdGlvbiAlcCAoJXMpIiwgbV9jb25uZWN0aW9uLCBtX3Jl
cXVlc3QudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIExPRyhOZXR3b3Jr
LCAiQ0ZOZXQgLSBDYW5jZWxsaW5nIGNvbm5lY3Rpb24gJXAgKCVzKSIsIG1fY29ubmVjdGlvbiwg
bV9maXJzdFJlcXVlc3QudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIENG
VVJMQ29ubmVjdGlvbkNhbmNlbChtX2Nvbm5lY3Rpb24uZ2V0KCkpOwogICAgIH0KIH0KIAogUmVz
b3VyY2VIYW5kbGU6On5SZXNvdXJjZUhhbmRsZSgpCiB7Ci0gICAgTE9HKE5ldHdvcmssICJDRk5l
dCAtIERlc3Ryb3lpbmcgam9iICVwICglcykiLCB0aGlzLCBkLT5tX3JlcXVlc3QudXJsKCkuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIERlc3Ryb3lp
bmcgam9iICVwICglcykiLCB0aGlzLCBkLT5tX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKS51
dGY4KCkuZGF0YSgpKTsKIH0KIAogQ0ZBcnJheVJlZiBhcnJheUZyb21Gb3JtRGF0YShjb25zdCBG
b3JtRGF0YSYgZCkKQEAgLTM5MCw1NiArMzk3LDYwIEBAIHN0YXRpYyBDRkRpY3Rpb25hcnlSZWYg
Y3JlYXRlQ29ubmVjdGlvblAKICAgICByZXR1cm4gcHJvcGVydGllc0RpY3Rpb25hcnk7CiB9CiAK
LWJvb2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KEZyYW1lKiBmcmFtZSkKK3ZvaWQgUmVzb3VyY2VI
YW5kbGU6OmNyZWF0ZUNGVVJMQ29ubmVjdGlvbihib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9y
YWdlLCBib29sIHNob3VsZENvbnRlbnRTbmlmZikKIHsKLSAgICAvLyBJZiB3ZSBhcmUgbm8gbG9u
Z2VyIGF0dGFjaGVkIHRvIGEgUGFnZSwgdGhpcyBtdXN0IGJlIGFuIGF0dGVtcHRlZCBsb2FkIGZy
b20gYW4KLSAgICAvLyBvblVubG9hZCBoYW5kbGVyLCBzbyBsZXQncyBqdXN0IGJsb2NrIGl0Lgot
ICAgIGlmICghZnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KCghZC0+bV91c2VyLmlzRW1wdHkoKSB8fCAhZC0+bV9wYXNzLmlzRW1wdHkoKSkgJiYgIWQtPm1f
cmVxdWVzdC51cmwoKS5wcm90b2NvbEluSFRUUEZhbWlseSgpKSB7CisgICAgaWYgKCghZC0+bV91
c2VyLmlzRW1wdHkoKSB8fCAhZC0+bV9wYXNzLmlzRW1wdHkoKSkgJiYgIWZpcnN0UmVxdWVzdCgp
LnVybCgpLnByb3RvY29sSW5IVFRQRmFtaWx5KCkpIHsKICAgICAgICAgLy8gQ3JlZGVudGlhbHMg
Zm9yIGZ0cCBjYW4gb25seSBiZSBwYXNzZWQgaW4gVVJMLCB0aGUgZGlkUmVjZWl2ZUF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlIGRlbGVnYXRlIGNhbGwgd29uJ3QgYmUgbWFkZS4KLSAgICAgICAgS1VS
TCB1cmxXaXRoQ3JlZGVudGlhbHMoZC0+bV9yZXF1ZXN0LnVybCgpKTsKKyAgICAgICAgS1VSTCB1
cmxXaXRoQ3JlZGVudGlhbHMoZmlyc3RSZXF1ZXN0KCkudXJsKCkpOwogICAgICAgICB1cmxXaXRo
Q3JlZGVudGlhbHMuc2V0VXNlcihkLT5tX3VzZXIpOwogICAgICAgICB1cmxXaXRoQ3JlZGVudGlh
bHMuc2V0UGFzcyhkLT5tX3Bhc3MpOwotICAgICAgICBkLT5tX3JlcXVlc3Quc2V0VVJMKHVybFdp
dGhDcmVkZW50aWFscyk7CisgICAgICAgIGZpcnN0UmVxdWVzdCgpLnNldFVSTCh1cmxXaXRoQ3Jl
ZGVudGlhbHMpOwogICAgIH0KIAotICAgIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2Ug
PSAhY2xpZW50KCkgfHwgY2xpZW50KCktPnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKHRoaXMp
OwotCiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzcxNzQwNTA+IC0gRm9yIFVSTHMgdGhhdCBtYXRj
aCB0aGUgcGF0aHMgb2YgdGhvc2UgcHJldmlvdXNseSBjaGFsbGVuZ2VkIGZvciBIVFRQIEJhc2lj
IGF1dGhlbnRpY2F0aW9uLCAKICAgICAvLyB0cnkgYW5kIHJldXNlIHRoZSBjcmVkZW50aWFsIHBy
ZWVtcHRpdmVseSwgYXMgYWxsb3dlZCBieSBSRkMgMjYxNy4KLSAgICBpZiAoc2hvdWxkVXNlQ3Jl
ZGVudGlhbFN0b3JhZ2UgJiYgZC0+bV9yZXF1ZXN0LnVybCgpLnByb3RvY29sSW5IVFRQRmFtaWx5
KCkpIHsKKyAgICBpZiAoc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UgJiYgZmlyc3RSZXF1ZXN0
KCkudXJsKCkucHJvdG9jb2xJbkhUVFBGYW1pbHkoKSkgewogICAgICAgICBpZiAoZC0+bV91c2Vy
LmlzRW1wdHkoKSAmJiBkLT5tX3Bhc3MuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAvLyA8cmRh
cjovL3Byb2JsZW0vNzE3NDA1MD4gLSBGb3IgVVJMcyB0aGF0IG1hdGNoIHRoZSBwYXRocyBvZiB0
aG9zZSBwcmV2aW91c2x5IGNoYWxsZW5nZWQgZm9yIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24s
IAogICAgICAgICAgICAgLy8gdHJ5IGFuZCByZXVzZSB0aGUgY3JlZGVudGlhbCBwcmVlbXB0aXZl
bHksIGFzIGFsbG93ZWQgYnkgUkZDIDI2MTcuCi0gICAgICAgICAgICBkLT5tX2luaXRpYWxDcmVk
ZW50aWFsID0gQ3JlZGVudGlhbFN0b3JhZ2U6OmdldChkLT5tX3JlcXVlc3QudXJsKCkpOworICAg
ICAgICAgICAgZC0+bV9pbml0aWFsQ3JlZGVudGlhbCA9IENyZWRlbnRpYWxTdG9yYWdlOjpnZXQo
Zmlyc3RSZXF1ZXN0KCkudXJsKCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8g
SWYgdGhlcmUgaXMgYWxyZWFkeSBhIHByb3RlY3Rpb24gc3BhY2Uga25vd24gZm9yIHRoZSBVUkws
IHVwZGF0ZSBzdG9yZWQgY3JlZGVudGlhbHMgYmVmb3JlIHNlbmRpbmcgYSByZXF1ZXN0LgogICAg
ICAgICAgICAgLy8gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBpbXBsZW1lbnQgbG9nb3V0IGJ5
IHNlbmRpbmcgYW4gWE1MSHR0cFJlcXVlc3Qgd2l0aCBrbm93biBpbmNvcnJlY3QgY3JlZGVudGlh
bHMsIGFuZCBhYm9ydGluZyBpdCBpbW1lZGlhdGVseQogICAgICAgICAgICAgLy8gKHNvIHRoYXQg
YW4gYXV0aGVudGljYXRpb24gZGlhbG9nIGRvZXNuJ3QgcG9wIHVwKS4KLSAgICAgICAgICAgIENy
ZWRlbnRpYWxTdG9yYWdlOjpzZXQoQ3JlZGVudGlhbChkLT5tX3VzZXIsIGQtPm1fcGFzcywgQ3Jl
ZGVudGlhbFBlcnNpc3RlbmNlTm9uZSksIGQtPm1fcmVxdWVzdC51cmwoKSk7CisgICAgICAgICAg
ICBDcmVkZW50aWFsU3RvcmFnZTo6c2V0KENyZWRlbnRpYWwoZC0+bV91c2VyLCBkLT5tX3Bhc3Ms
IENyZWRlbnRpYWxQZXJzaXN0ZW5jZU5vbmUpLCBmaXJzdFJlcXVlc3QoKS51cmwoKSk7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgICAgIAogICAgIGlmICghZC0+bV9pbml0aWFsQ3JlZGVudGlhbC5p
c0VtcHR5KCkpIHsKICAgICAgICAgU3RyaW5nIGF1dGhIZWFkZXIgPSAiQmFzaWMgIiArIGVuY29k
ZUJhc2ljQXV0aG9yaXphdGlvbihkLT5tX2luaXRpYWxDcmVkZW50aWFsLnVzZXIoKSwgZC0+bV9p
bml0aWFsQ3JlZGVudGlhbC5wYXNzd29yZCgpKTsKLSAgICAgICAgZC0+bV9yZXF1ZXN0LmFkZEhU
VFBIZWFkZXJGaWVsZCgiQXV0aG9yaXphdGlvbiIsIGF1dGhIZWFkZXIpOworICAgICAgICBmaXJz
dFJlcXVlc3QoKS5hZGRIVFRQSGVhZGVyRmllbGQoIkF1dGhvcml6YXRpb24iLCBhdXRoSGVhZGVy
KTsKICAgICB9CiAKLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZXF1ZXN0UmVmPiByZXF1ZXN0KEFkb3B0
Q0YsIG1ha2VGaW5hbFJlcXVlc3QoZC0+bV9yZXF1ZXN0LCBkLT5tX3Nob3VsZENvbnRlbnRTbmlm
ZikpOwotCi0gICAgQ0ZVUkxDb25uZWN0aW9uQ2xpZW50X1YzIGNsaWVudCA9IHsgMywgdGhpcywg
MCwgMCwgMCwgV2ViQ29yZTo6d2lsbFNlbmRSZXF1ZXN0LCBkaWRSZWNlaXZlUmVzcG9uc2UsIGRp
ZFJlY2VpdmVEYXRhLCBOVUxMLCBkaWRGaW5pc2hMb2FkaW5nLCBkaWRGYWlsLCB3aWxsQ2FjaGVS
ZXNwb25zZSwgZGlkUmVjZWl2ZUNoYWxsZW5nZSwgZGlkU2VuZEJvZHlEYXRhLCBzaG91bGRVc2VD
cmVkZW50aWFsU3RvcmFnZUNhbGxiYWNrLCAwfTsKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZXF1ZXN0
UmVmPiByZXF1ZXN0KEFkb3B0Q0YsIG1ha2VGaW5hbFJlcXVlc3QoZmlyc3RSZXF1ZXN0KCksIHNo
b3VsZENvbnRlbnRTbmlmZikpOwogCisgICAgQ0ZVUkxDb25uZWN0aW9uQ2xpZW50X1YzIGNsaWVu
dCA9IHsgMywgdGhpcywgMCwgMCwgMCwgV2ViQ29yZTo6d2lsbFNlbmRSZXF1ZXN0LCBkaWRSZWNl
aXZlUmVzcG9uc2UsIGRpZFJlY2VpdmVEYXRhLCAwLCBkaWRGaW5pc2hMb2FkaW5nLCBkaWRGYWls
LCB3aWxsQ2FjaGVSZXNwb25zZSwgZGlkUmVjZWl2ZUNoYWxsZW5nZSwgZGlkU2VuZEJvZHlEYXRh
LCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZUNhbGxiYWNrLCAwfTsKICAgICBSZXRhaW5QdHI8
Q0ZEaWN0aW9uYXJ5UmVmPiBjb25uZWN0aW9uUHJvcGVydGllcyhBZG9wdENGLCBjcmVhdGVDb25u
ZWN0aW9uUHJvcGVydGllcyhzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSkpOwogCiAgICAgZC0+
bV9jb25uZWN0aW9uLmFkb3B0Q0YoQ0ZVUkxDb25uZWN0aW9uQ3JlYXRlV2l0aFByb3BlcnRpZXMo
MCwgcmVxdWVzdC5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxDRlVSTENvbm5lY3Rpb25DbGllbnQq
PigmY2xpZW50KSwgY29ubmVjdGlvblByb3BlcnRpZXMuZ2V0KCkpKTsKK30KKworYm9vbCBSZXNv
dXJjZUhhbmRsZTo6c3RhcnQoRnJhbWUqIGZyYW1lKQoreworICAgIC8vIElmIHdlIGFyZSBubyBs
b25nZXIgYXR0YWNoZWQgdG8gYSBQYWdlLCB0aGlzIG11c3QgYmUgYW4gYXR0ZW1wdGVkIGxvYWQg
ZnJvbSBhbgorICAgIC8vIG9uVW5sb2FkIGhhbmRsZXIsIHNvIGxldCdzIGp1c3QgYmxvY2sgaXQu
CisgICAgaWYgKCFmcmFtZS0+cGFnZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBi
b29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlID0gIWNsaWVudCgpIHx8IGNsaWVudCgpLT5z
aG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSh0aGlzKTsKKworICAgIGNyZWF0ZUNGVVJMQ29ubmVj
dGlvbihzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwgZC0+bV9zaG91bGRDb250ZW50U25pZmYp
OwogCiAgICAgQ0ZVUkxDb25uZWN0aW9uU2NoZWR1bGVXaXRoQ3VycmVudE1lc3NhZ2VRdWV1ZShk
LT5tX2Nvbm5lY3Rpb24uZ2V0KCkpOwogICAgIENGVVJMQ29ubmVjdGlvblNjaGVkdWxlRG93bmxv
YWRXaXRoUnVuTG9vcChkLT5tX2Nvbm5lY3Rpb24uZ2V0KCksIGxvYWRlclJ1bkxvb3AoKSwga0NG
UnVuTG9vcERlZmF1bHRNb2RlKTsKICAgICBDRlVSTENvbm5lY3Rpb25TdGFydChkLT5tX2Nvbm5l
Y3Rpb24uZ2V0KCkpOwogCi0gICAgTE9HKE5ldHdvcmssICJDRk5ldCAtIFN0YXJ0aW5nIFVSTCAl
cyAoaGFuZGxlPSVwLCBjb25uPSVwKSIsIGQtPm1fcmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpLCB0aGlzLCBkLT5tX2Nvbm5lY3Rpb24pOworICAgIExPRyhOZXR3b3JrLCAiQ0ZO
ZXQgLSBTdGFydGluZyBVUkwgJXMgKGhhbmRsZT0lcCwgY29ubj0lcCkiLCBmaXJzdFJlcXVlc3Qo
KS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCB0aGlzLCBkLT5tX2Nvbm5lY3Rpb24pOwog
CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC01MDAsNyArNTExLDcgQEAgdm9pZCBSZXNvdXJjZUhh
bmRsZTo6ZGlkUmVjZWl2ZUF1dGhlbnRpYwogICAgICAgICAKICAgICAgICAgS1VSTCB1cmxUb1N0
b3JlOwogICAgICAgICBpZiAoY2hhbGxlbmdlLmZhaWx1cmVSZXNwb25zZSgpLmh0dHBTdGF0dXND
b2RlKCkgPT0gNDAxKQotICAgICAgICAgICAgdXJsVG9TdG9yZSA9IGQtPm1fcmVxdWVzdC51cmwo
KTsKKyAgICAgICAgICAgIHVybFRvU3RvcmUgPSBmaXJzdFJlcXVlc3QoKS51cmwoKTsKICAgICAg
ICAgQ3JlZGVudGlhbFN0b3JhZ2U6OnNldChjb3JlKGNyZWRlbnRpYWwuZ2V0KCkpLCBjaGFsbGVu
Z2UucHJvdGVjdGlvblNwYWNlKCksIHVybFRvU3RvcmUpOwogICAgICAgICAKICAgICAgICAgQ0ZV
UkxDb25uZWN0aW9uVXNlQ3JlZGVudGlhbChkLT5tX2Nvbm5lY3Rpb24uZ2V0KCksIGNyZWRlbnRp
YWwuZ2V0KCksIGNoYWxsZW5nZS5jZlVSTEF1dGhDaGFsbGVuZ2VSZWYoKSk7CkBAIC01MTYsNyAr
NTI3LDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6ZGlkUmVjZWl2ZUF1dGhlbnRpYwogICAgICAg
ICAgICAgQVNTRVJUKGNyZWRlbnRpYWwucGVyc2lzdGVuY2UoKSA9PSBDcmVkZW50aWFsUGVyc2lz
dGVuY2VOb25lKTsKICAgICAgICAgICAgIGlmIChjaGFsbGVuZ2UuZmFpbHVyZVJlc3BvbnNlKCku
aHR0cFN0YXR1c0NvZGUoKSA9PSA0MDEpIHsKICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUg
Y3JlZGVudGlhbCBiYWNrLCBwb3NzaWJseSBhZGRpbmcgaXQgYXMgYSBkZWZhdWx0IGZvciB0aGlz
IGRpcmVjdG9yeS4KLSAgICAgICAgICAgICAgICBDcmVkZW50aWFsU3RvcmFnZTo6c2V0KGNyZWRl
bnRpYWwsIGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSwgZC0+bV9yZXF1ZXN0LnVybCgpKTsK
KyAgICAgICAgICAgICAgICBDcmVkZW50aWFsU3RvcmFnZTo6c2V0KGNyZWRlbnRpYWwsIGNoYWxs
ZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSwgZmlyc3RSZXF1ZXN0KCkudXJsKCkpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgUmV0YWluUHRyPENGVVJMQ3JlZGVudGlhbFJlZj4gY2ZDcmVkZW50
aWFsKEFkb3B0Q0YsIGNyZWF0ZUNGKGNyZWRlbnRpYWwpKTsKICAgICAgICAgICAgIENGVVJMQ29u
bmVjdGlvblVzZUNyZWRlbnRpYWwoZC0+bV9jb25uZWN0aW9uLmdldCgpLCBjZkNyZWRlbnRpYWwu
Z2V0KCksIGNoYWxsZW5nZS5jZlVSTEF1dGhDaGFsbGVuZ2VSZWYoKSk7CkBAIC01NTIsNyArNTYz
LDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDcmVkZW50aWFsKAogICAgICAgICAK
ICAgICAgICAgS1VSTCB1cmxUb1N0b3JlOwogICAgICAgICBpZiAoY2hhbGxlbmdlLmZhaWx1cmVS
ZXNwb25zZSgpLmh0dHBTdGF0dXNDb2RlKCkgPT0gNDAxKQotICAgICAgICAgICAgdXJsVG9TdG9y
ZSA9IGQtPm1fcmVxdWVzdC51cmwoKTsgICAgICAKKyAgICAgICAgICAgIHVybFRvU3RvcmUgPSBm
aXJzdFJlcXVlc3QoKS51cmwoKTsgICAgICAKICAgICAgICAgQ3JlZGVudGlhbFN0b3JhZ2U6OnNl
dCh3ZWJDcmVkZW50aWFsLCBjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCksIHVybFRvU3RvcmUp
OwogCiAgICAgICAgIENGVVJMQ29ubmVjdGlvblVzZUNyZWRlbnRpYWwoZC0+bV9jb25uZWN0aW9u
LmdldCgpLCBjZkNyZWRlbnRpYWwuZ2V0KCksIGNoYWxsZW5nZS5jZlVSTEF1dGhDaGFsbGVuZ2VS
ZWYoKSk7CkBAIC01OTgsMTIgKzYwOSw0MyBAQCBDRlVSTENvbm5lY3Rpb25SZWYgUmVzb3VyY2VI
YW5kbGU6OnJlbGVhCiAgICAgcmV0dXJuIGQtPm1fY29ubmVjdGlvbi5yZWxlYXNlUmVmKCk7CiB9
CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50
aWFscywgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBW
ZWN0b3I8Y2hhcj4mIHZlY3RvciwgRnJhbWUqKQordm9pZCBSZXNvdXJjZUhhbmRsZTo6bG9hZFJl
c291cmNlU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3Jl
ZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgdmVjdG9yLCBGcmFtZSogZnJh
bWUpCiB7CisgICAgTE9HKE5ldHdvcmssICJSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseTolcyBhbGxvd1N0b3JlZENyZWRlbnRpYWxzOiV1IiwgcmVxdWVzdC51cmwoKS5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpLCBzdG9yZWRDcmVkZW50aWFscyk7CisKICAgICBBU1NFUlQo
IXJlcXVlc3QuaXNFbXB0eSgpKTsKIAotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGEgPSBX
ZWJDb3JlU3luY2hyb25vdXNMb2FkZXI6OmxvYWQocmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlhbHMs
IHJlc3BvbnNlLCBlcnJvcik7CisgICAgQVNTRVJUKHJlc3BvbnNlLmlzTnVsbCgpKTsKKyAgICBB
U1NFUlQoZXJyb3IuaXNOdWxsKCkpOworCisgICAgT3duUHRyPFdlYkNvcmVTeW5jaHJvbm91c0xv
YWRlckNsaWVudD4gY2xpZW50ID0gV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpjcmVh
dGUocmVzcG9uc2UsIGVycm9yKTsKKyAgICBjbGllbnQtPnNldEFsbG93U3RvcmVkQ3JlZGVudGlh
bHMoc3RvcmVkQ3JlZGVudGlhbHMgPT0gQWxsb3dTdG9yZWRDcmVkZW50aWFscyk7CisKKyAgICBS
ZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IGFkb3B0UmVmKG5ldyBSZXNvdXJjZUhhbmRs
ZShyZXF1ZXN0LCBjbGllbnQuZ2V0KCksIGZhbHNlIC8qZGVmZXJzTG9hZGluZyovLCB0cnVlIC8q
c2hvdWxkQ29udGVudFNuaWZmKi8pKTsKKworICAgIGlmIChoYW5kbGUtPmQtPm1fc2NoZWR1bGVk
RmFpbHVyZVR5cGUgIT0gTm9GYWlsdXJlKSB7CisgICAgICAgIGVycm9yID0gZnJhbWUtPmxvYWRl
cigpLT5ibG9ja2VkRXJyb3IocmVxdWVzdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBjb25uZWN0aW9uUHJvcGVydGllcyhBZG9wdENG
LCBjcmVhdGVDb25uZWN0aW9uUHJvcGVydGllcyhzdG9yZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0
b3JlZENyZWRlbnRpYWxzKSk7CisKKyAgICBoYW5kbGUtPmNyZWF0ZUNGVVJMQ29ubmVjdGlvbihz
dG9yZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJjZUhhbmRs
ZTo6c2hvdWxkQ29udGVudFNuaWZmVVJMKHJlcXVlc3QudXJsKCkpKTsKKworICAgIENGVVJMQ29u
bmVjdGlvblNjaGVkdWxlV2l0aFJ1bkxvb3AoaGFuZGxlLT5jb25uZWN0aW9uKCksIENGUnVuTG9v
cEdldEN1cnJlbnQoKSwgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyUnVuTG9vcE1vZGUpOworICAg
IENGVVJMQ29ubmVjdGlvblNjaGVkdWxlRG93bmxvYWRXaXRoUnVuTG9vcChoYW5kbGUtPmNvbm5l
Y3Rpb24oKSwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpLCBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJS
dW5Mb29wTW9kZSk7CisgICAgQ0ZVUkxDb25uZWN0aW9uU3RhcnQoaGFuZGxlLT5jb25uZWN0aW9u
KCkpOwogCisgICAgd2hpbGUgKCFjbGllbnQtPmlzRG9uZSgpKQorICAgICAgICBDRlJ1bkxvb3BS
dW5Jbk1vZGUoV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyUnVuTG9vcE1vZGUsIFVJTlRfTUFYLCB0
cnVlKTsKKworICAgIENGVVJMQ29ubmVjdGlvbkNhbmNlbChoYW5kbGUtPmNvbm5lY3Rpb24oKSk7
CisgICAgCisgICAgaWYgKGVycm9yLmlzTnVsbCgpICYmIHJlc3BvbnNlLm1pbWVUeXBlKCkuaXNO
dWxsKCkpCisgICAgICAgIHNldERlZmF1bHRNSU1FVHlwZShyZXNwb25zZS5jZlVSTFJlc3BvbnNl
KCkpOworCisgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YSA9IGNsaWVudC0+ZGF0YSgpOwor
ICAgIAogICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKICAgICAgICAgcmVzcG9uc2UgPSBSZXNv
dXJjZVJlc3BvbnNlKHJlcXVlc3QudXJsKCksIFN0cmluZygpLCAwLCBTdHJpbmcoKSwgU3RyaW5n
KCkpOwogCkBAIC02NjYsMTczICs3MDgsNTEgQEAgYm9vbCBSZXNvdXJjZUhhbmRsZTo6d2lsbExv
YWRGcm9tQ2FjaGUoUgogICAgIHJldHVybiBjYWNoZWQ7CiB9CiAKLUNGVVJMUmVxdWVzdFJlZiBX
ZWJDb3JlU3luY2hyb25vdXNMb2FkZXI6OndpbGxTZW5kUmVxdWVzdChDRlVSTENvbm5lY3Rpb25S
ZWYsIENGVVJMUmVxdWVzdFJlZiBjZlJlcXVlc3QsIENGVVJMUmVzcG9uc2VSZWYgY2ZSZWRpcmVj
dFJlc3BvbnNlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQordm9pZCBXZWJDb3JlU3luY2hyb25v
dXNMb2FkZXJDbGllbnQ6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIC8qcmVkaXJl
Y3RSZXNwb25zZSovKQogewotICAgIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlciogbG9hZGVyID0g
c3RhdGljX2Nhc3Q8V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyKj4oY29uc3RfY2FzdDx2b2lkKj4o
Y2xpZW50SW5mbykpOwotCiAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgdG8g
Zm9sbG93IHRoZSByZWRpcmVjdCBjb3JyZWN0bHkgZXZlbiBmb3IgY3Jvc3MtZG9tYWluIHJlcXVl
c3RzLgotICAgIGlmIChsb2FkZXItPm1fdXJsICYmICFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1
YWwobG9hZGVyLT5tX3VybC5nZXQoKSwgQ0ZVUkxSZXF1ZXN0R2V0VVJMKGNmUmVxdWVzdCkpKSB7
CisgICAgaWYgKCFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwoaGFuZGxlLT5maXJzdFJlcXVl
c3QoKS51cmwoKSwgcmVxdWVzdC51cmwoKSkpIHsKKyAgICAgICAgQVNTRVJUKCFtX2Vycm9yKTsK
ICAgICAgICAgUmV0YWluUHRyPENGRXJyb3JSZWY+IGNmRXJyb3IoQWRvcHRDRiwgQ0ZFcnJvckNy
ZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZFcnJvckRvbWFpbkNGTmV0d29yaywga0NGVVJM
RXJyb3JCYWRTZXJ2ZXJSZXNwb25zZSwgMCkpOwotICAgICAgICBsb2FkZXItPm1fZXJyb3IgPSBj
ZkVycm9yLmdldCgpOwotICAgICAgICBsb2FkZXItPm1faXNEb25lID0gdHJ1ZTsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotCi0gICAgbG9hZGVyLT5tX3VybCA9IENGVVJMUmVxdWVzdEdldFVS
TChjZlJlcXVlc3QpOwotCi0gICAgaWYgKGNmUmVkaXJlY3RSZXNwb25zZSkgewotICAgICAgICAv
LyBUYWtlIHVzZXIvcGFzcyBvdXQgb2YgdGhlIFVSTC4KLSAgICAgICAgbG9hZGVyLT5tX3VzZXIu
YWRvcHRDRihDRlVSTENvcHlVc2VyTmFtZShsb2FkZXItPm1fdXJsLmdldCgpKSk7Ci0gICAgICAg
IGxvYWRlci0+bV9wYXNzLmFkb3B0Q0YoQ0ZVUkxDb3B5UGFzc3dvcmQobG9hZGVyLT5tX3VybC5n
ZXQoKSkpOwotICAgICAgICBpZiAobG9hZGVyLT5tX3VzZXIgfHwgbG9hZGVyLT5tX3Bhc3MpIHsK
LSAgICAgICAgICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0V2l0aG91dENyZWRlbnRpYWxzID0g
Y2ZSZXF1ZXN0OwotICAgICAgICAgICAgcmVxdWVzdFdpdGhvdXRDcmVkZW50aWFscy5yZW1vdmVD
cmVkZW50aWFscygpOwotICAgICAgICAgICAgY2ZSZXF1ZXN0ID0gcmVxdWVzdFdpdGhvdXRDcmVk
ZW50aWFscy5jZlVSTFJlcXVlc3QoKTsKLSAgICAgICAgfQorICAgICAgICBtX2Vycm9yID0gY2ZF
cnJvci5nZXQoKTsKKyAgICAgICAgbV9pc0RvbmUgPSB0cnVlOworICAgICAgICByZXF1ZXN0ID0g
MDsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIENGUmV0YWluKGNmUmVxdWVzdCk7Ci0g
ICAgcmV0dXJuIGNmUmVxdWVzdDsKIH0KLQotdm9pZCBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXI6
OmRpZFJlY2VpdmVSZXNwb25zZShDRlVSTENvbm5lY3Rpb25SZWYsIENGVVJMUmVzcG9uc2VSZWYg
Y2ZSZXNwb25zZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykgCit2b2lkIFdlYkNvcmVTeW5jaHJv
bm91c0xvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0gICAgV2ViQ29yZVN5bmNocm9ub3Vz
TG9hZGVyKiBsb2FkZXIgPSBzdGF0aWNfY2FzdDxXZWJDb3JlU3luY2hyb25vdXNMb2FkZXIqPihj
b25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7Ci0KLSAgICBsb2FkZXItPm1fcmVzcG9uc2Ug
PSBjZlJlc3BvbnNlOworICAgIG1fcmVzcG9uc2UgPSByZXNwb25zZTsKIH0KIAotdm9pZCBXZWJD
b3JlU3luY2hyb25vdXNMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKENGVVJMQ29ubmVjdGlvblJlZiwg
Q0ZEYXRhUmVmIGRhdGEsIENGSW5kZXggb3JpZ2luYWxMZW5ndGgsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCit2b2lkIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZURh
dGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoLCBpbnQgLyps
ZW5ndGhSZWNlaXZlZCovKQogewotICAgIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlciogbG9hZGVy
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyKj4oY29uc3RfY2FzdDx2b2lk
Kj4oY2xpZW50SW5mbykpOwotCi0gICAgaWYgKCFsb2FkZXItPm1fZGF0YSkKLSAgICAgICAgbG9h
ZGVyLT5tX2RhdGEuYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1
bHQsIDApKTsKLQotICAgIGNvbnN0IFVJbnQ4KiBieXRlcyA9IENGRGF0YUdldEJ5dGVQdHIoZGF0
YSk7Ci0gICAgQ0ZJbmRleCBsZW5ndGggPSBDRkRhdGFHZXRMZW5ndGgoZGF0YSk7Ci0KLSAgICBD
RkRhdGFBcHBlbmRCeXRlcyhsb2FkZXItPm1fZGF0YS5nZXQoKSwgYnl0ZXMsIGxlbmd0aCk7Cisg
ICAgaWYgKCFtX2RhdGEpCisgICAgICAgIG1fZGF0YS5hZG9wdENGKENGRGF0YUNyZWF0ZU11dGFi
bGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOworICAgIENGRGF0YUFwcGVuZEJ5dGVzKG1fZGF0
YS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGRhdGEpLCBsZW5ndGgpOwog
fQogCi12b2lkIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhDRlVS
TENvbm5lY3Rpb25SZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit2b2lkIFdlYkNvcmVTeW5j
aHJvbm91c0xvYWRlckNsaWVudDo6ZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSopCiB7
Ci0gICAgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyKiBsb2FkZXIgPSBzdGF0aWNfY2FzdDxXZWJD
b3JlU3luY2hyb25vdXNMb2FkZXIqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7Ci0K
LSAgICBsb2FkZXItPm1faXNEb25lID0gdHJ1ZTsKKyAgICBtX2lzRG9uZSA9IHRydWU7CiB9CiAK
LXZvaWQgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyOjpkaWRGYWlsKENGVVJMQ29ubmVjdGlvblJl
ZiwgQ0ZFcnJvclJlZiBlcnJvciwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3ZvaWQgV2ViQ29y
ZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3Qg
UmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7Ci0gICAgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyKiBs
b2FkZXIgPSBzdGF0aWNfY2FzdDxXZWJDb3JlU3luY2hyb25vdXNMb2FkZXIqPihjb25zdF9jYXN0
PHZvaWQqPihjbGllbnRJbmZvKSk7Ci0KLSAgICBsb2FkZXItPm1fZXJyb3IgPSBlcnJvcjsKLSAg
ICBsb2FkZXItPm1faXNEb25lID0gdHJ1ZTsKKyAgICBtX2Vycm9yID0gZXJyb3I7CisgICAgbV9p
c0RvbmUgPSB0cnVlOwogfQogCi12b2lkIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlcjo6ZGlkUmVj
ZWl2ZUNoYWxsZW5nZShDRlVSTENvbm5lY3Rpb25SZWYgY29ubiwgQ0ZVUkxBdXRoQ2hhbGxlbmdl
UmVmIGNoYWxsZW5nZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3ZvaWQgV2ViQ29yZVN5bmNo
cm9ub3VzTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUmVz
b3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxs
ZW5nZSkKIHsKLSAgICBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXIqIGxvYWRlciA9IHN0YXRpY19j
YXN0PFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlcio+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudElu
Zm8pKTsKLQotICAgIENGVVJMUmVzcG9uc2VSZWYgdXJsUmVzcG9uc2UgPSAoQ0ZVUkxSZXNwb25z
ZVJlZilDRlVSTEF1dGhDaGFsbGVuZ2VHZXRGYWlsdXJlUmVzcG9uc2UoY2hhbGxlbmdlKTsKLSAg
ICBDRkhUVFBNZXNzYWdlUmVmIGh0dHBSZXNwb25zZSA9IHVybFJlc3BvbnNlID8gQ0ZVUkxSZXNw
b25zZUdldEhUVFBSZXNwb25zZSh1cmxSZXNwb25zZSkgOiAwOwotCi0gICAgaWYgKGxvYWRlci0+
bV91c2VyICYmIGxvYWRlci0+bV9wYXNzKSB7Ci0gICAgICAgIENyZWRlbnRpYWwgY3JlZGVudGlh
bChsb2FkZXItPm1fdXNlci5nZXQoKSwgbG9hZGVyLT5tX3Bhc3MuZ2V0KCksIENyZWRlbnRpYWxQ
ZXJzaXN0ZW5jZU5vbmUpOwotICAgICAgICBSZXRhaW5QdHI8Q0ZVUkxDcmVkZW50aWFsUmVmPiBj
ZkNyZWRlbnRpYWwoQWRvcHRDRiwgY3JlYXRlQ0YoY3JlZGVudGlhbCkpOwotICAgICAgICAKLSAg
ICAgICAgS1VSTCB1cmxUb1N0b3JlOwotICAgICAgICBpZiAoaHR0cFJlc3BvbnNlICYmIENGSFRU
UE1lc3NhZ2VHZXRSZXNwb25zZVN0YXR1c0NvZGUoaHR0cFJlc3BvbnNlKSA9PSA0MDEpCi0gICAg
ICAgICAgICB1cmxUb1N0b3JlID0gbG9hZGVyLT5tX3VybC5nZXQoKTsKLSAgICAgICAgICAgIAot
ICAgICAgICBDcmVkZW50aWFsU3RvcmFnZTo6c2V0KGNyZWRlbnRpYWwsIGNvcmUoQ0ZVUkxBdXRo
Q2hhbGxlbmdlR2V0UHJvdGVjdGlvblNwYWNlKGNoYWxsZW5nZSkpLCB1cmxUb1N0b3JlKTsKLSAg
ICAgICAgCi0gICAgICAgIENGVVJMQ29ubmVjdGlvblVzZUNyZWRlbnRpYWwoY29ubiwgY2ZDcmVk
ZW50aWFsLmdldCgpLCBjaGFsbGVuZ2UpOwotICAgICAgICBsb2FkZXItPm1fdXNlciA9IDA7Ci0g
ICAgICAgIGxvYWRlci0+bV9wYXNzID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBp
ZiAoIUNGVVJMQXV0aENoYWxsZW5nZUdldFByZXZpb3VzRmFpbHVyZUNvdW50KGNoYWxsZW5nZSkg
JiYgbG9hZGVyLT5tX2FsbG93U3RvcmVkQ3JlZGVudGlhbHMpIHsKLSAgICAgICAgQ3JlZGVudGlh
bCBjcmVkZW50aWFsID0gQ3JlZGVudGlhbFN0b3JhZ2U6OmdldChjb3JlKENGVVJMQXV0aENoYWxs
ZW5nZUdldFByb3RlY3Rpb25TcGFjZShjaGFsbGVuZ2UpKSk7Ci0gICAgICAgIGlmICghY3JlZGVu
dGlhbC5pc0VtcHR5KCkgJiYgY3JlZGVudGlhbCAhPSBsb2FkZXItPm1faW5pdGlhbENyZWRlbnRp
YWwpIHsKLSAgICAgICAgICAgIEFTU0VSVChjcmVkZW50aWFsLnBlcnNpc3RlbmNlKCkgPT0gQ3Jl
ZGVudGlhbFBlcnNpc3RlbmNlTm9uZSk7Ci0gICAgICAgICAgICBpZiAoaHR0cFJlc3BvbnNlICYm
IENGSFRUUE1lc3NhZ2VHZXRSZXNwb25zZVN0YXR1c0NvZGUoaHR0cFJlc3BvbnNlKSA9PSA0MDEp
IHsKLSAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgY3JlZGVudGlhbCBiYWNrLCBwb3NzaWJs
eSBhZGRpbmcgaXQgYXMgYSBkZWZhdWx0IGZvciB0aGlzIGRpcmVjdG9yeS4KLSAgICAgICAgICAg
ICAgICBDcmVkZW50aWFsU3RvcmFnZTo6c2V0KGNyZWRlbnRpYWwsIGNvcmUoQ0ZVUkxBdXRoQ2hh
bGxlbmdlR2V0UHJvdGVjdGlvblNwYWNlKGNoYWxsZW5nZSkpLCBsb2FkZXItPm1fdXJsLmdldCgp
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJldGFpblB0cjxDRlVSTENyZWRlbnRpYWxS
ZWY+IGNmQ3JlZGVudGlhbChBZG9wdENGLCBjcmVhdGVDRihjcmVkZW50aWFsKSk7Ci0gICAgICAg
ICAgICBDRlVSTENvbm5lY3Rpb25Vc2VDcmVkZW50aWFsKGNvbm4sIGNmQ3JlZGVudGlhbC5nZXQo
KSwgY2hhbGxlbmdlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KICAg
ICAvLyBGSVhNRTogVGhlIHVzZXIgc2hvdWxkIGJlIGFza2VkIGZvciBjcmVkZW50aWFscywgYXMg
aW4gYXN5bmMgY2FzZS4KLSAgICBDRlVSTENvbm5lY3Rpb25Vc2VDcmVkZW50aWFsKGNvbm4sIDAs
IGNoYWxsZW5nZSk7CisgICAgQ0ZVUkxDb25uZWN0aW9uVXNlQ3JlZGVudGlhbChoYW5kbGUtPmNv
bm5lY3Rpb24oKSwgMCwgY2hhbGxlbmdlLmNmVVJMQXV0aENoYWxsZW5nZVJlZigpKTsKIH0KIAot
Qm9vbGVhbiBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXI6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9y
YWdlKENGVVJMQ29ubmVjdGlvblJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK2Jvb2wgV2Vi
Q29yZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShS
ZXNvdXJjZUhhbmRsZSopCiB7Ci0gICAgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyKiBsb2FkZXIg
PSBzdGF0aWNfY2FzdDxXZWJDb3JlU3luY2hyb25vdXNMb2FkZXIqPihjb25zdF9jYXN0PHZvaWQq
PihjbGllbnRJbmZvKSk7Ci0KICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFzayBGcmFtZUxvYWRl
ckNsaWVudCB3aGV0aGVyIHVzaW5nIGNyZWRlbnRpYWwgc3RvcmFnZSBpcyBnbG9iYWxseSBmb3Ji
aWRkZW4uCi0gICAgcmV0dXJuIGxvYWRlci0+bV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzOwotfQot
Ci1SZXRhaW5QdHI8Q0ZEYXRhUmVmPiBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXI6OmxvYWQoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVk
ZW50aWFscywgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFJlc291cmNlRXJyb3ImIGVycm9y
KQotewotICAgIEFTU0VSVChyZXNwb25zZS5pc051bGwoKSk7Ci0gICAgQVNTRVJUKGVycm9yLmlz
TnVsbCgpKTsKLQotICAgIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlciBsb2FkZXIocmVzcG9uc2Us
IGVycm9yKTsKLQotICAgIEtVUkwgdXJsID0gcmVxdWVzdC51cmwoKTsKLQotICAgIGlmICh1cmwu
dXNlcigpLmxlbmd0aCgpKQotICAgICAgICBsb2FkZXIubV91c2VyLmFkb3B0Q0YodXJsLnVzZXIo
KS5jcmVhdGVDRlN0cmluZygpKTsKLSAgICBpZiAodXJsLnBhc3MoKS5sZW5ndGgoKSkKLSAgICAg
ICAgbG9hZGVyLm1fcGFzcy5hZG9wdENGKHVybC5wYXNzKCkuY3JlYXRlQ0ZTdHJpbmcoKSk7Ci0g
ICAgbG9hZGVyLm1fYWxsb3dTdG9yZWRDcmVkZW50aWFscyA9IChzdG9yZWRDcmVkZW50aWFscyA9
PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzKTsKLQotICAgIC8vIFRha2UgdXNlci9wYXNzIG91dCBv
ZiB0aGUgVVJMLgotICAgIC8vIENyZWRlbnRpYWxzIGZvciBmdHAgY2FuIG9ubHkgYmUgcGFzc2Vk
IGluIFVSTCwgdGhlIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBkZWxlZ2F0ZSBj
YWxsIHdvbid0IGJlIG1hZGUuCi0gICAgUmV0YWluUHRyPENGVVJMUmVxdWVzdFJlZj4gY2ZSZXF1
ZXN0OwotICAgIGlmICgobG9hZGVyLm1fdXNlciB8fCBsb2FkZXIubV9wYXNzKSAmJiB1cmwucHJv
dG9jb2xJbkhUVFBGYW1pbHkoKSkgewotICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdFdp
dGhvdXRDcmVkZW50aWFscyhyZXF1ZXN0KTsKLSAgICAgICAgcmVxdWVzdFdpdGhvdXRDcmVkZW50
aWFscy5yZW1vdmVDcmVkZW50aWFscygpOwotICAgICAgICBjZlJlcXVlc3QuYWRvcHRDRihtYWtl
RmluYWxSZXF1ZXN0KHJlcXVlc3RXaXRob3V0Q3JlZGVudGlhbHMsIFJlc291cmNlSGFuZGxlOjpz
aG91bGRDb250ZW50U25pZmZVUkwocmVxdWVzdFdpdGhvdXRDcmVkZW50aWFscy51cmwoKSkpKTsK
LSAgICB9IGVsc2UgewotICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNzE3NDA1MD4gLSBGb3Ig
VVJMcyB0aGF0IG1hdGNoIHRoZSBwYXRocyBvZiB0aG9zZSBwcmV2aW91c2x5IGNoYWxsZW5nZWQg
Zm9yIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24sIAotICAgICAgICAvLyB0cnkgYW5kIHJldXNl
IHRoZSBjcmVkZW50aWFsIHByZWVtcHRpdmVseSwgYXMgYWxsb3dlZCBieSBSRkMgMjYxNy4KLSAg
ICAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3RXaXRoSW5pdGlhbENyZWRlbnRpYWwocmVxdWVz
dCk7Ci0gICAgICAgIGlmIChsb2FkZXIubV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzICYmIHVybC5w
cm90b2NvbEluSFRUUEZhbWlseSgpKQotICAgICAgICAgICAgbG9hZGVyLm1faW5pdGlhbENyZWRl
bnRpYWwgPSBDcmVkZW50aWFsU3RvcmFnZTo6Z2V0KHVybCk7Ci0KLSAgICAgICAgaWYgKCFsb2Fk
ZXIubV9pbml0aWFsQ3JlZGVudGlhbC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIFN0cmluZyBh
dXRoSGVhZGVyID0gIkJhc2ljICIgKyBlbmNvZGVCYXNpY0F1dGhvcml6YXRpb24obG9hZGVyLm1f
aW5pdGlhbENyZWRlbnRpYWwudXNlcigpLCBsb2FkZXIubV9pbml0aWFsQ3JlZGVudGlhbC5wYXNz
d29yZCgpKTsKLSAgICAgICAgICAgIHJlcXVlc3RXaXRoSW5pdGlhbENyZWRlbnRpYWwuYWRkSFRU
UEhlYWRlckZpZWxkKCJBdXRob3JpemF0aW9uIiwgYXV0aEhlYWRlcik7Ci0gICAgICAgIH0KLQot
ICAgICAgICBjZlJlcXVlc3QuYWRvcHRDRihtYWtlRmluYWxSZXF1ZXN0KHJlcXVlc3RXaXRoSW5p
dGlhbENyZWRlbnRpYWwsIFJlc291cmNlSGFuZGxlOjpzaG91bGRDb250ZW50U25pZmZVUkwocmVx
dWVzdFdpdGhJbml0aWFsQ3JlZGVudGlhbC51cmwoKSkpKTsKLSAgICB9Ci0KLSAgICBDRlVSTENv
bm5lY3Rpb25DbGllbnRfVjMgY2xpZW50ID0geyAzLCAmbG9hZGVyLCAwLCAwLCAwLCB3aWxsU2Vu
ZFJlcXVlc3QsIGRpZFJlY2VpdmVSZXNwb25zZSwgZGlkUmVjZWl2ZURhdGEsIDAsIGRpZEZpbmlz
aExvYWRpbmcsIGRpZEZhaWwsIDAsIGRpZFJlY2VpdmVDaGFsbGVuZ2UsIDAsIHNob3VsZFVzZUNy
ZWRlbnRpYWxTdG9yYWdlLCAwIH07Ci0KLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBj
b25uZWN0aW9uUHJvcGVydGllcyhBZG9wdENGLCBjcmVhdGVDb25uZWN0aW9uUHJvcGVydGllcyhs
b2FkZXIubV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzKSk7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZVUkxD
b25uZWN0aW9uUmVmPiBjb25uZWN0aW9uKEFkb3B0Q0YsIENGVVJMQ29ubmVjdGlvbkNyZWF0ZVdp
dGhQcm9wZXJ0aWVzKGtDRkFsbG9jYXRvckRlZmF1bHQsIGNmUmVxdWVzdC5nZXQoKSwgcmVpbnRl
cnByZXRfY2FzdDxDRlVSTENvbm5lY3Rpb25DbGllbnQqPigmY2xpZW50KSwgY29ubmVjdGlvblBy
b3BlcnRpZXMuZ2V0KCkpKTsKLQotICAgIENGVVJMQ29ubmVjdGlvblNjaGVkdWxlV2l0aFJ1bkxv
b3AoY29ubmVjdGlvbi5nZXQoKSwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpLCBXZWJDb3JlU3luY2hy
b25vdXNMb2FkZXJSdW5Mb29wTW9kZSk7Ci0gICAgQ0ZVUkxDb25uZWN0aW9uU2NoZWR1bGVEb3du
bG9hZFdpdGhSdW5Mb29wKGNvbm5lY3Rpb24uZ2V0KCksIENGUnVuTG9vcEdldEN1cnJlbnQoKSwg
V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyUnVuTG9vcE1vZGUpOwotICAgIENGVVJMQ29ubmVjdGlv
blN0YXJ0KGNvbm5lY3Rpb24uZ2V0KCkpOwotCi0gICAgd2hpbGUgKCFsb2FkZXIubV9pc0RvbmUp
Ci0gICAgICAgIENGUnVuTG9vcFJ1bkluTW9kZShXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJSdW5M
b29wTW9kZSwgVUlOVF9NQVgsIHRydWUpOwotCi0gICAgQ0ZVUkxDb25uZWN0aW9uQ2FuY2VsKGNv
bm5lY3Rpb24uZ2V0KCkpOwotICAgIAotICAgIGlmIChlcnJvci5pc051bGwoKSAmJiBsb2FkZXIu
bV9yZXNwb25zZS5taW1lVHlwZSgpLmlzTnVsbCgpKQotICAgICAgICBzZXREZWZhdWx0TUlNRVR5
cGUobG9hZGVyLm1fcmVzcG9uc2UuY2ZVUkxSZXNwb25zZSgpKTsKLQotICAgIHJldHVybiBsb2Fk
ZXIubV9kYXRhOworICAgIHJldHVybiBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHM7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAkocmV2aXNpb24gNjMxMDgp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzEsNyArMjcxLDcgQEAgc3RhdGljIHNpemVfdCBoZWFk
ZXJDYWxsYmFjayhjaGFyKiBwdHIsIAogICAgICAgICAgICAgICAgIGlmIChjbGllbnQpCiAgICAg
ICAgICAgICAgICAgICAgIGNsaWVudC0+d2lsbFNlbmRSZXF1ZXN0KGpvYiwgcmVkaXJlY3RlZFJl
cXVlc3QsIGQtPm1fcmVzcG9uc2UpOwogCi0gICAgICAgICAgICAgICAgZC0+bV9yZXF1ZXN0LnNl
dFVSTChuZXdVUkwpOworICAgICAgICAgICAgICAgIGQtPm1fZmlyc3RSZXF1ZXN0LnNldFVSTChu
ZXdVUkwpOwogCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsU2l6ZTsKICAgICAgICAgICAg
IH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhh
bmRsZU1hYy5tbQkocmV2aXNpb24gNjMxMDgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
bWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNi0yMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCwgMjAw
OSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDggKzU2LDcgQEAgdHlwZWRlZiBpbnQgTlNJbnRlZ2VyOwog
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotQGludGVyZmFjZSBXZWJDb3JlUmVzb3VyY2VI
YW5kbGVBc0RlbGVnYXRlIDogTlNPYmplY3QgPE5TVVJMQ29ubmVjdGlvbkRlbGVnYXRlPgotewor
QGludGVyZmFjZSBXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlIDogTlNPYmplY3QgPE5T
VVJMQ29ubmVjdGlvbkRlbGVnYXRlPiB7CiAgICAgUmVzb3VyY2VIYW5kbGUqIG1faGFuZGxlOwog
fQogLSAoaWQpaW5pdFdpdGhIYW5kbGU6KFJlc291cmNlSGFuZGxlKiloYW5kbGU7CkBAIC04NSwy
MCArODQsNDggQEAgLSAoaWQpX3Byb3BlcnR5Rm9yS2V5OihOU1N0cmluZyAqKWtleTsKIAogI2lm
bmRlZiBCVUlMRElOR19PTl9USUdFUgogCi1AaW50ZXJmYWNlIFdlYkNvcmVTeW5jaHJvbm91c0xv
YWRlciA6IE5TT2JqZWN0IDxOU1VSTENvbm5lY3Rpb25EZWxlZ2F0ZT4gewotICAgIE5TVVJMICpt
X3VybDsKLSAgICBOU1N0cmluZyAqbV91c2VyOwotICAgIE5TU3RyaW5nICptX3Bhc3M7Ci0gICAg
Ly8gU3RvcmUgdGhlIHByZWVtcHRpdmVseSB1c2VkIGluaXRpYWwgY3JlZGVudGlhbCBzbyB0aGF0
IGlmIHdlIGdldCBhbiBhdXRoZW50aWNhdGlvbiBjaGFsbGVuZ2UsIHdlIHdvbid0IHVzZSB0aGUg
c2FtZSBvbmUgYWdhaW4uCi0gICAgQ3JlZGVudGlhbCBtX2luaXRpYWxDcmVkZW50aWFsOwotICAg
IEJPT0wgbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzOworY2xhc3MgV2ViQ29yZVN5bmNocm9ub3Vz
TG9hZGVyQ2xpZW50IDogcHVibGljIFJlc291cmNlSGFuZGxlQ2xpZW50IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQ+IGNyZWF0
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdlYkNvcmVTeW5jaHJvbm91
c0xvYWRlckNsaWVudCk7CisgICAgfQorCisgICAgdmlydHVhbCB+V2ViQ29yZVN5bmNocm9ub3Vz
TG9hZGVyQ2xpZW50KCk7CisKKyAgICB2b2lkIHNldEFsbG93U3RvcmVkQ3JlZGVudGlhbHMoYm9v
bCBhbGxvdykgeyBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHMgPSBhbGxvdzsgfQorICAgIE5TVVJM
UmVzcG9uc2UgKnJlc3BvbnNlKCkgeyByZXR1cm4gbV9yZXNwb25zZTsgfQorICAgIE5TTXV0YWJs
ZURhdGEgKmRhdGEoKSB7IHJldHVybiBtX2RhdGE7IH0KKyAgICBOU0Vycm9yICplcnJvcigpIHsg
cmV0dXJuIG1fZXJyb3I7IH0KKyAgICBib29sIGlzRG9uZSgpIHsgcmV0dXJuIG1faXNEb25lOyB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlSGFuZGxlKiwgUmVz
b3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgLypyZWRpcmVjdFJlc3BvbnNl
Ki8pOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShSZXNvdXJj
ZUhhbmRsZSopOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwor
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFJl
c291cmNlSGFuZGxlKiwgY29uc3QgY2hhciosIGludCwgaW50IC8qbGVuZ3RoUmVjZWl2ZWQqLyk7
CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJy
b3ImKTsKKyNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQorICAgIHZpcnR1
YWwgYm9vbCBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKFJlc291cmNlSGFu
ZGxlKiwgY29uc3QgUHJvdGVjdGlvblNwYWNlJik7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBX
ZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQoKQorICAgICAgICA6IG1fYWxsb3dTdG9yZWRD
cmVkZW50aWFscyhmYWxzZSkKKyAgICAgICAgLCBtX3Jlc3BvbnNlKDApCisgICAgICAgICwgbV9k
YXRhKDApCisgICAgICAgICwgbV9lcnJvcigwKQorICAgICAgICAsIG1faXNEb25lKGZhbHNlKQor
ICAgIHsKKyAgICB9CisKKyAgICBib29sIG1fYWxsb3dTdG9yZWRDcmVkZW50aWFsczsKICAgICBO
U1VSTFJlc3BvbnNlICptX3Jlc3BvbnNlOwogICAgIE5TTXV0YWJsZURhdGEgKm1fZGF0YTsKICAg
ICBOU0Vycm9yICptX2Vycm9yOwotICAgIEJPT0wgbV9pc0RvbmU7Ci19Ci0rIChOU0RhdGEgKils
b2FkUmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdCBhbGxvd1N0b3JlZENyZWRlbnRpYWxz
OihCT09MKWFsbG93U3RvcmVkQ3JlZGVudGlhbHMgcmV0dXJuaW5nUmVzcG9uc2U6KE5TVVJMUmVz
cG9uc2UgKiopcmVzcG9uc2UgZXJyb3I6KE5TRXJyb3IgKiopZXJyb3I7Ci1AZW5kCisgICAgYm9v
bCBtX2lzRG9uZTsKK307CiAKIHN0YXRpYyBOU1N0cmluZyAqV2ViQ29yZVN5bmNocm9ub3VzTG9h
ZGVyUnVuTG9vcE1vZGUgPSBAIldlYkNvcmVTeW5jaHJvbm91c0xvYWRlclJ1bkxvb3BNb2RlIjsK
IApAQCAtMTYxLDEyICsxODgsNTEgQEAgYm9vbCBSZXNvdXJjZUhhbmRsZTo6ZGlkU2VuZEJvZHlE
YXRhRGVsZQogICAgIHJldHVybiBOU0ZvdW5kYXRpb25WZXJzaW9uTnVtYmVyID4gTWF4Rm91bmRh
dGlvblZlcnNpb25XaXRob3V0ZGlkU2VuZEJvZHlEYXRhRGVsZWdhdGU7CiB9CiAKLXN0YXRpYyBO
U1VSTENvbm5lY3Rpb24gKmNyZWF0ZU5TVVJMQ29ubmVjdGlvbihOU1VSTFJlcXVlc3QgKnJlcXVl
c3QsIGlkIGRlbGVnYXRlLCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKQordm9pZCBS
ZXNvdXJjZUhhbmRsZTo6Y3JlYXRlTlNVUkxDb25uZWN0aW9uKGlkIGRlbGVnYXRlLCBib29sIHNo
b3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlLCBib29sIHNob3VsZENvbnRlbnRTbmlmZikKIHsKLSNp
ZiBkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKQotICAgIFVOVVNFRF9QQVJBTShzaG91bGRVc2VD
cmVkZW50aWFsU3RvcmFnZSk7Ci0gICAgcmV0dXJuIFtbTlNVUkxDb25uZWN0aW9uIGFsbG9jXSBp
bml0V2l0aFJlcXVlc3Q6cmVxdWVzdCBkZWxlZ2F0ZTpkZWxlZ2F0ZV07Ci0jZWxzZQorICAgIC8v
IENyZWRlbnRpYWxzIGZvciBmdHAgY2FuIG9ubHkgYmUgcGFzc2VkIGluIFVSTCwgdGhlIGNvbm5l
Y3Rpb246ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOiBkZWxlZ2F0ZSBjYWxsIHdv
bid0IGJlIG1hZGUuCisgICAgaWYgKCghZC0+bV91c2VyLmlzRW1wdHkoKSB8fCAhZC0+bV9wYXNz
LmlzRW1wdHkoKSkKKyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICAgJiYgIWZpcnN0UmVx
dWVzdCgpLnVybCgpLnByb3RvY29sSW5IVFRQRmFtaWx5KCkgLy8gT24gVGlnZXIsIGFsd2F5cyBw
YXNzIGNyZWRlbnRpYWxzIGluIFVSTCwgc28gdGhhdCB0aGV5IGdldCBzdG9yZWQgZXZlbiBpZiB0
aGUgcmVxdWVzdCBnZXRzIGNhbmNlbGxlZCByaWdodCBhd2F5LgorI2VuZGlmCisgICAgKSB7Cisg
ICAgICAgIEtVUkwgdXJsV2l0aENyZWRlbnRpYWxzKGZpcnN0UmVxdWVzdCgpLnVybCgpKTsKKyAg
ICAgICAgdXJsV2l0aENyZWRlbnRpYWxzLnNldFVzZXIoZC0+bV91c2VyKTsKKyAgICAgICAgdXJs
V2l0aENyZWRlbnRpYWxzLnNldFBhc3MoZC0+bV9wYXNzKTsKKyAgICAgICAgZmlyc3RSZXF1ZXN0
KCkuc2V0VVJMKHVybFdpdGhDcmVkZW50aWFscyk7CisgICAgfQorCisgICAgLy8gSWYgYSBVUkwg
YWxyZWFkeSBoYXMgY29va2llcywgdGhlbiB3ZSdsbCByZWxheCB0aGUgM3JkIHBhcnR5IGNvb2tp
ZSBwb2xpY3kgYW5kIGFjY2VwdCBuZXcgY29va2llcy4KKyAgICBOU0hUVFBDb29raWVTdG9yYWdl
ICpzaGFyZWRTdG9yYWdlID0gW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0
b3JhZ2VdOworICAgIGlmIChbc2hhcmVkU3RvcmFnZSBjb29raWVBY2NlcHRQb2xpY3ldID09IE5T
SFRUUENvb2tpZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluICYmIFtbc2hh
cmVkU3RvcmFnZSBjb29raWVzRm9yVVJMOmZpcnN0UmVxdWVzdCgpLnVybCgpXSBjb3VudF0pCisg
ICAgICAgIGZpcnN0UmVxdWVzdCgpLnNldEZpcnN0UGFydHlGb3JDb29raWVzKGZpcnN0UmVxdWVz
dCgpLnVybCgpKTsKKworI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKQorICAgIGlmIChz
aG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSAmJiBmaXJzdFJlcXVlc3QoKS51cmwoKS5wcm90b2Nv
bEluSFRUUEZhbWlseSgpKSB7CisgICAgICAgIGlmIChkLT5tX3VzZXIuaXNFbXB0eSgpICYmIGQt
Pm1fcGFzcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS83MTc0
MDUwPiAtIEZvciBVUkxzIHRoYXQgbWF0Y2ggdGhlIHBhdGhzIG9mIHRob3NlIHByZXZpb3VzbHkg
Y2hhbGxlbmdlZCBmb3IgSFRUUCBCYXNpYyBhdXRoZW50aWNhdGlvbiwgCisgICAgICAgICAgICAv
LyB0cnkgYW5kIHJldXNlIHRoZSBjcmVkZW50aWFsIHByZWVtcHRpdmVseSwgYXMgYWxsb3dlZCBi
eSBSRkMgMjYxNy4KKyAgICAgICAgICAgIGQtPm1faW5pdGlhbENyZWRlbnRpYWwgPSBDcmVkZW50
aWFsU3RvcmFnZTo6Z2V0KGZpcnN0UmVxdWVzdCgpLnVybCgpKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkgYSBwcm90ZWN0aW9uIHNwYWNlIGtu
b3duIGZvciB0aGUgVVJMLCB1cGRhdGUgc3RvcmVkIGNyZWRlbnRpYWxzIGJlZm9yZSBzZW5kaW5n
IGEgcmVxdWVzdC4KKyAgICAgICAgICAgIC8vIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gaW1w
bGVtZW50IGxvZ291dCBieSBzZW5kaW5nIGFuIFhNTEh0dHBSZXF1ZXN0IHdpdGgga25vd24gaW5j
b3JyZWN0IGNyZWRlbnRpYWxzLCBhbmQgYWJvcnRpbmcgaXQgaW1tZWRpYXRlbHkKKyAgICAgICAg
ICAgIC8vIChzbyB0aGF0IGFuIGF1dGhlbnRpY2F0aW9uIGRpYWxvZyBkb2Vzbid0IHBvcCB1cCku
CisgICAgICAgICAgICBDcmVkZW50aWFsU3RvcmFnZTo6c2V0KENyZWRlbnRpYWwoZC0+bV91c2Vy
LCBkLT5tX3Bhc3MsIENyZWRlbnRpYWxQZXJzaXN0ZW5jZU5vbmUpLCBmaXJzdFJlcXVlc3QoKS51
cmwoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIAorICAgIGlmICghZC0+bV9pbml0aWFs
Q3JlZGVudGlhbC5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgRGlnZXN0
IGF1dGhlbnRpY2F0aW9uLCBhbmQgUHJveHktQXV0aG9yaXphdGlvbi4KKyAgICAgICAgU3RyaW5n
IGF1dGhIZWFkZXIgPSAiQmFzaWMgIiArIGVuY29kZUJhc2ljQXV0aG9yaXphdGlvbihkLT5tX2lu
aXRpYWxDcmVkZW50aWFsLnVzZXIoKSwgZC0+bV9pbml0aWFsQ3JlZGVudGlhbC5wYXNzd29yZCgp
KTsKKyAgICAgICAgZmlyc3RSZXF1ZXN0KCkuYWRkSFRUUEhlYWRlckZpZWxkKCJBdXRob3JpemF0
aW9uIiwgYXV0aEhlYWRlcik7CisgICAgfQorCisgICAgTlNVUkxSZXF1ZXN0ICpuc1JlcXVlc3Qg
PSBmaXJzdFJlcXVlc3QoKS5uc1VSTFJlcXVlc3QoKTsKKyAgICBpZiAoIXNob3VsZENvbnRlbnRT
bmlmZikgeworICAgICAgICBOU011dGFibGVVUkxSZXF1ZXN0ICptdXRhYmxlUmVxdWVzdCA9IFtb
bnNSZXF1ZXN0IGNvcHldIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgd2tTZXROU1VSTFJlcXVlc3RT
aG91bGRDb250ZW50U25pZmYobXV0YWJsZVJlcXVlc3QsIE5PKTsKKyAgICAgICAgbnNSZXF1ZXN0
ID0gbXV0YWJsZVJlcXVlc3Q7CisgICAgfQogCiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVP
UEFSRCkKICAgICBBU1NFUlQoW05TVVJMQ29ubmVjdGlvbiBpbnN0YW5jZXNSZXNwb25kVG9TZWxl
Y3RvcjpAc2VsZWN0b3IoX2luaXRXaXRoUmVxdWVzdDpkZWxlZ2F0ZTp1c2VzQ2FjaGU6bWF4Q29u
dGVudExlbmd0aDpzdGFydEltbWVkaWF0ZWx5OmNvbm5lY3Rpb25Qcm9wZXJ0aWVzOildKTsKQEAg
LTE3OCwxMCArMjQ0LDE3IEBAIHN0YXRpYyBOU1VSTENvbm5lY3Rpb24gKmNyZWF0ZU5TVVJMQ29u
bmUKICAgICBpZiAoc3VwcG9ydHNTZXR0aW5nQ29ubmVjdGlvblByb3BlcnRpZXMpIHsKICAgICAg
ICAgTlNEaWN0aW9uYXJ5ICpzZXNzaW9uSUQgPSBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSA/
IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeV0gOiBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRo
T2JqZWN0OkAiV2ViS2l0UHJpdmF0ZVNlc3Npb24iIGZvcktleTpAIl9rQ0ZVUkxDb25uZWN0aW9u
U2Vzc2lvbklEIl07CiAgICAgICAgIE5TRGljdGlvbmFyeSAqcHJvcGVydHlEaWN0aW9uYXJ5ID0g
W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdDpzZXNzaW9uSUQgZm9yS2V5OkAia0NG
VVJMQ29ubmVjdGlvblNvY2tldFN0cmVhbVByb3BlcnRpZXMiXTsKLSAgICAgICAgcmV0dXJuIFtb
TlNVUkxDb25uZWN0aW9uIGFsbG9jXSBfaW5pdFdpdGhSZXF1ZXN0OnJlcXVlc3QgZGVsZWdhdGU6
ZGVsZWdhdGUgdXNlc0NhY2hlOllFUyBtYXhDb250ZW50TGVuZ3RoOjAgc3RhcnRJbW1lZGlhdGVs
eTpOTyBjb25uZWN0aW9uUHJvcGVydGllczpwcm9wZXJ0eURpY3Rpb25hcnldOworICAgICAgICBk
LT5tX2Nvbm5lY3Rpb24uYWRvcHROUyhbW05TVVJMQ29ubmVjdGlvbiBhbGxvY10gX2luaXRXaXRo
UmVxdWVzdDpuc1JlcXVlc3QgZGVsZWdhdGU6ZGVsZWdhdGUgdXNlc0NhY2hlOllFUyBtYXhDb250
ZW50TGVuZ3RoOjAgc3RhcnRJbW1lZGlhdGVseTpOTyBjb25uZWN0aW9uUHJvcGVydGllczpwcm9w
ZXJ0eURpY3Rpb25hcnldKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHJldHVybiBb
W05TVVJMQ29ubmVjdGlvbiBhbGxvY10gaW5pdFdpdGhSZXF1ZXN0OnJlcXVlc3QgZGVsZWdhdGU6
ZGVsZWdhdGUgc3RhcnRJbW1lZGlhdGVseTpOT107CisgICAgZC0+bV9jb25uZWN0aW9uLmFkb3B0
TlMoW1tOU1VSTENvbm5lY3Rpb24gYWxsb2NdIGluaXRXaXRoUmVxdWVzdDpuc1JlcXVlc3QgZGVs
ZWdhdGU6ZGVsZWdhdGUgc3RhcnRJbW1lZGlhdGVseTpOT10pOworICAgIHJldHVybjsKKworI2Vs
c2UKKyAgICAvLyBCdWlsZGluZyBvbiBUaWdlci4gRG9uJ3QgdXNlIFdlYkNvcmUgY3JlZGVudGlh
bCBzdG9yYWdlLCBkb24ndCB0cnkgdG8gZGlzYWJsZSBjb250ZW50IHNuaWZmaW5nLgorICAgIFVO
VVNFRF9QQVJBTShzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSk7CisgICAgZC0+bV9jb25uZWN0
aW9uLmFkb3B0TlMoW1tOU1VSTENvbm5lY3Rpb24gYWxsb2NdIGluaXRXaXRoUmVxdWVzdDpmaXJz
dFJlcXVlc3QoKS5uc1VSTFJlcXVlc3QoKSBkZWxlZ2F0ZTpkZWxlZ2F0ZV0pOwogI2VuZGlmCiB9
CiAKQEAgLTIwNiw2OSArMjc5LDI0IEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KEZyYW1l
KiBmcmFtZSkKICAgICBkLT5tX3Byb3h5LmFkb3B0TlMod2tDcmVhdGVOU1VSTENvbm5lY3Rpb25E
ZWxlZ2F0ZVByb3h5KCkpOwogICAgIFtzdGF0aWNfY2FzdDxXZWJDb3JlTlNVUkxDb25uZWN0aW9u
RGVsZWdhdGVQcm94eSo+KGQtPm1fcHJveHkuZ2V0KCkpIHNldERlbGVnYXRlOlJlc291cmNlSGFu
ZGxlOjpkZWxlZ2F0ZSgpXTsKIAotICAgIGlmICgoIWQtPm1fdXNlci5pc0VtcHR5KCkgfHwgIWQt
Pm1fcGFzcy5pc0VtcHR5KCkpCi0jaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCi0gICAgICYmICFk
LT5tX3JlcXVlc3QudXJsKCkucHJvdG9jb2xJbkhUVFBGYW1pbHkoKSAvLyBPbiBUaWdlciwgYWx3
YXlzIHBhc3MgY3JlZGVudGlhbHMgaW4gVVJMLCBzbyB0aGF0IHRoZXkgZ2V0IHN0b3JlZCBldmVu
IGlmIHRoZSByZXF1ZXN0IGdldHMgY2FuY2VsbGVkIHJpZ2h0IGF3YXkuCi0jZW5kaWYKLSAgICAp
IHsKLSAgICAgICAgLy8gQ3JlZGVudGlhbHMgZm9yIGZ0cCBjYW4gb25seSBiZSBwYXNzZWQgaW4g
VVJMLCB0aGUgY29ubmVjdGlvbjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6IGRl
bGVnYXRlIGNhbGwgd29uJ3QgYmUgbWFkZS4KLSAgICAgICAgS1VSTCB1cmxXaXRoQ3JlZGVudGlh
bHMoZC0+bV9yZXF1ZXN0LnVybCgpKTsKLSAgICAgICAgdXJsV2l0aENyZWRlbnRpYWxzLnNldFVz
ZXIoZC0+bV91c2VyKTsKLSAgICAgICAgdXJsV2l0aENyZWRlbnRpYWxzLnNldFBhc3MoZC0+bV9w
YXNzKTsKLSAgICAgICAgZC0+bV9yZXF1ZXN0LnNldFVSTCh1cmxXaXRoQ3JlZGVudGlhbHMpOwot
ICAgIH0KLQogICAgIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UgPSAhY2xpZW50KCkg
fHwgY2xpZW50KCktPnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKHRoaXMpOwogCi0jaWZuZGVm
IEJVSUxESU5HX09OX1RJR0VSCi0gICAgaWYgKHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlICYm
IGQtPm1fcmVxdWVzdC51cmwoKS5wcm90b2NvbEluSFRUUEZhbWlseSgpKSB7Ci0gICAgICAgIGlm
IChkLT5tX3VzZXIuaXNFbXB0eSgpICYmIGQtPm1fcGFzcy5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgIC8vIDxyZGFyOi8vcHJvYmxlbS83MTc0MDUwPiAtIEZvciBVUkxzIHRoYXQgbWF0Y2ggdGhl
IHBhdGhzIG9mIHRob3NlIHByZXZpb3VzbHkgY2hhbGxlbmdlZCBmb3IgSFRUUCBCYXNpYyBhdXRo
ZW50aWNhdGlvbiwgCi0gICAgICAgICAgICAvLyB0cnkgYW5kIHJldXNlIHRoZSBjcmVkZW50aWFs
IHByZWVtcHRpdmVseSwgYXMgYWxsb3dlZCBieSBSRkMgMjYxNy4KLSAgICAgICAgICAgIGQtPm1f
aW5pdGlhbENyZWRlbnRpYWwgPSBDcmVkZW50aWFsU3RvcmFnZTo6Z2V0KGQtPm1fcmVxdWVzdC51
cmwoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhbHJl
YWR5IGEgcHJvdGVjdGlvbiBzcGFjZSBrbm93biBmb3IgdGhlIFVSTCwgdXBkYXRlIHN0b3JlZCBj
cmVkZW50aWFscyBiZWZvcmUgc2VuZGluZyBhIHJlcXVlc3QuCi0gICAgICAgICAgICAvLyBUaGlz
IG1ha2VzIGl0IHBvc3NpYmxlIHRvIGltcGxlbWVudCBsb2dvdXQgYnkgc2VuZGluZyBhbiBYTUxI
dHRwUmVxdWVzdCB3aXRoIGtub3duIGluY29ycmVjdCBjcmVkZW50aWFscywgYW5kIGFib3J0aW5n
IGl0IGltbWVkaWF0ZWx5Ci0gICAgICAgICAgICAvLyAoc28gdGhhdCBhbiBhdXRoZW50aWNhdGlv
biBkaWFsb2cgZG9lc24ndCBwb3AgdXApLgotICAgICAgICAgICAgQ3JlZGVudGlhbFN0b3JhZ2U6
OnNldChDcmVkZW50aWFsKGQtPm1fdXNlciwgZC0+bV9wYXNzLCBDcmVkZW50aWFsUGVyc2lzdGVu
Y2VOb25lKSwgZC0+bV9yZXF1ZXN0LnVybCgpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAgICAg
Ci0gICAgaWYgKCFkLT5tX2luaXRpYWxDcmVkZW50aWFsLmlzRW1wdHkoKSkgewotICAgICAgICAv
LyBGSVhNRTogU3VwcG9ydCBEaWdlc3QgYXV0aGVudGljYXRpb24sIGFuZCBQcm94eS1BdXRob3Jp
emF0aW9uLgotICAgICAgICBTdHJpbmcgYXV0aEhlYWRlciA9ICJCYXNpYyAiICsgZW5jb2RlQmFz
aWNBdXRob3JpemF0aW9uKGQtPm1faW5pdGlhbENyZWRlbnRpYWwudXNlcigpLCBkLT5tX2luaXRp
YWxDcmVkZW50aWFsLnBhc3N3b3JkKCkpOwotICAgICAgICBkLT5tX3JlcXVlc3QuYWRkSFRUUEhl
YWRlckZpZWxkKCJBdXRob3JpemF0aW9uIiwgYXV0aEhlYWRlcik7Ci0gICAgfQotI2VuZGlmCi0K
ICAgICBpZiAoIVJlc291cmNlSGFuZGxlOjpkaWRTZW5kQm9keURhdGFEZWxlZ2F0ZUV4aXN0cygp
KQotICAgICAgICBhc3NvY2lhdGVTdHJlYW1XaXRoUmVzb3VyY2VIYW5kbGUoW2QtPm1fcmVxdWVz
dC5uc1VSTFJlcXVlc3QoKSBIVFRQQm9keVN0cmVhbV0sIHRoaXMpOworICAgICAgICBhc3NvY2lh
dGVTdHJlYW1XaXRoUmVzb3VyY2VIYW5kbGUoW2ZpcnN0UmVxdWVzdCgpLm5zVVJMUmVxdWVzdCgp
IEhUVFBCb2R5U3RyZWFtXSwgdGhpcyk7CiAKICNpZmRlZiBCVUlMRElOR19PTl9USUdFUgogICAg
IC8vIEEgY29uZGl0aW9uYWwgcmVxdWVzdCBzZW50IGJ5IFdlYkNvcmUgKGUuZy4gdG8gdXBkYXRl
IGFwcGNhY2hlKSBjYW4gYmUgZm9yIGEgcmVzb3VyY2UgdGhhdCBpcyBub3QgY2FjaGVhYmxlIGJ5
IE5TVVJMQ29ubmVjdGlvbiwKICAgICAvLyB3aGljaCBjYW4gZ2V0IGNvbmZ1c2VkIGFuZCBmYWls
IHRvIGxvYWQgaXQgaW4gdGhpcyBjYXNlLgotICAgIGlmIChkLT5tX3JlcXVlc3QuaXNDb25kaXRp
b25hbCgpKQotICAgICAgICBkLT5tX3JlcXVlc3Quc2V0Q2FjaGVQb2xpY3koUmVsb2FkSWdub3Jp
bmdDYWNoZURhdGEpOworICAgIGlmIChmaXJzdFJlcXVlc3QoKS5pc0NvbmRpdGlvbmFsKCkpCisg
ICAgICAgIGZpcnN0UmVxdWVzdCgpLnNldENhY2hlUG9saWN5KFJlbG9hZElnbm9yaW5nQ2FjaGVE
YXRhKTsKICNlbmRpZgogCiAgICAgZC0+bV9uZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyA9IGZyYW1l
LT5zZXR0aW5ncygpICYmIGZyYW1lLT5zZXR0aW5ncygpLT5uZWVkc1NpdGVTcGVjaWZpY1F1aXJr
cygpOwogCi0gICAgLy8gSWYgYSBVUkwgYWxyZWFkeSBoYXMgY29va2llcywgdGhlbiB3ZSdsbCBy
ZWxheCB0aGUgM3JkIHBhcnR5IGNvb2tpZSBwb2xpY3kgYW5kIGFjY2VwdCBuZXcgY29va2llcy4K
LSAgICBOU0hUVFBDb29raWVTdG9yYWdlICpzaGFyZWRTdG9yYWdlID0gW05TSFRUUENvb2tpZVN0
b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdOwotICAgIGlmIChbc2hhcmVkU3RvcmFnZSBj
b29raWVBY2NlcHRQb2xpY3ldID09IE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFp
bkRvY3VtZW50RG9tYWluCi0gICAgICAgICYmIFtbc2hhcmVkU3RvcmFnZSBjb29raWVzRm9yVVJM
OmQtPm1fcmVxdWVzdC51cmwoKV0gY291bnRdKQotICAgICAgICBkLT5tX3JlcXVlc3Quc2V0Rmly
c3RQYXJ0eUZvckNvb2tpZXMoZC0+bV9yZXF1ZXN0LnVybCgpKTsKLQotICAgIE5TVVJMQ29ubmVj
dGlvbiAqY29ubmVjdGlvbjsKLSAgICAKLSAgICBpZiAoZC0+bV9zaG91bGRDb250ZW50U25pZmYg
fHwgZnJhbWUtPnNldHRpbmdzKCktPmxvY2FsRmlsZUNvbnRlbnRTbmlmZmluZ0VuYWJsZWQoKSkK
LSAgICAgICAgY29ubmVjdGlvbiA9IGNyZWF0ZU5TVVJMQ29ubmVjdGlvbihkLT5tX3JlcXVlc3Qu
bnNVUkxSZXF1ZXN0KCksIGQtPm1fcHJveHkuZ2V0KCksIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9y
YWdlKTsKLSAgICBlbHNlIHsKLSAgICAgICAgTlNNdXRhYmxlVVJMUmVxdWVzdCAqcmVxdWVzdCA9
IFtkLT5tX3JlcXVlc3QubnNVUkxSZXF1ZXN0KCkgbXV0YWJsZUNvcHldOwotICAgICAgICB3a1Nl
dE5TVVJMUmVxdWVzdFNob3VsZENvbnRlbnRTbmlmZihyZXF1ZXN0LCBOTyk7Ci0gICAgICAgIGNv
bm5lY3Rpb24gPSBjcmVhdGVOU1VSTENvbm5lY3Rpb24ocmVxdWVzdCwgZC0+bV9wcm94eS5nZXQo
KSwgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpOwotICAgICAgICBbcmVxdWVzdCByZWxlYXNl
XTsKLSAgICB9CisgICAgY3JlYXRlTlNVUkxDb25uZWN0aW9uKAorICAgICAgICBkLT5tX3Byb3h5
LmdldCgpLAorICAgICAgICBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwKKyAgICAgICAgZC0+
bV9zaG91bGRDb250ZW50U25pZmYgfHwgZnJhbWUtPnNldHRpbmdzKCktPmxvY2FsRmlsZUNvbnRl
bnRTbmlmZmluZ0VuYWJsZWQoKSk7CiAKICNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKICAgICBi
b29sIHNjaGVkdWxlZCA9IGZhbHNlOwpAQCAtMjc2LDcgKzMwNCw3IEBAIGJvb2wgUmVzb3VyY2VI
YW5kbGU6OnN0YXJ0KEZyYW1lKiBmcmFtZSkKICAgICAgICAgU2NoZWR1bGVQYWlySGFzaFNldDo6
aXRlcmF0b3IgZW5kID0gc2NoZWR1bGVkUGFpcnMtPmVuZCgpOwogICAgICAgICBmb3IgKFNjaGVk
dWxlUGFpckhhc2hTZXQ6Oml0ZXJhdG9yIGl0ID0gc2NoZWR1bGVkUGFpcnMtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgaWYgKE5TUnVuTG9vcCAqcnVuTG9vcCA9ICgq
aXQpLT5uc1J1bkxvb3AoKSkgewotICAgICAgICAgICAgICAgIFtjb25uZWN0aW9uIHNjaGVkdWxl
SW5SdW5Mb29wOnJ1bkxvb3AgZm9yTW9kZTooTlNTdHJpbmcgKikoKml0KS0+bW9kZSgpXTsKKyAg
ICAgICAgICAgICAgICBbY29ubmVjdGlvbigpIHNjaGVkdWxlSW5SdW5Mb29wOnJ1bkxvb3AgZm9y
TW9kZTooTlNTdHJpbmcgKikoKml0KS0+bW9kZSgpXTsKICAgICAgICAgICAgICAgICBzY2hlZHVs
ZWQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yODUsNyArMzEzLDcgQEAg
Ym9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoRnJhbWUqIGZyYW1lKQogICAgIC8vIFN0YXJ0IHRo
ZSBjb25uZWN0aW9uIGlmIHdlIGRpZCBzY2hlZHVsZSB3aXRoIGF0IGxlYXN0IG9uZSBydW5sb29w
LgogICAgIC8vIFdlIGNhbid0IHN0YXJ0IHRoZSBjb25uZWN0aW9uIHVudGlsIHdlIGhhdmUgb25l
IHJ1bmxvb3Agc2NoZWR1bGVkLgogICAgIGlmIChzY2hlZHVsZWQpCi0gICAgICAgIFtjb25uZWN0
aW9uIHN0YXJ0XTsKKyAgICAgICAgW2Nvbm5lY3Rpb24oKSBzdGFydF07CiAgICAgZWxzZQogICAg
ICAgICBkLT5tX3N0YXJ0V2hlblNjaGVkdWxlZCA9IHRydWU7CiAjZW5kaWYKQEAgLTI5NCwxNSAr
MzIyLDExIEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KEZyYW1lKiBmcmFtZSkKICAgICBp
c0luaXRpYWxpemluZ0Nvbm5lY3Rpb24gPSBOTzsKICNlbmRpZgogCi0gICAgTE9HKE5ldHdvcmss
ICJIYW5kbGUgJXAgc3RhcnRpbmcgY29ubmVjdGlvbiAlcCBmb3IgJUAiLCB0aGlzLCBjb25uZWN0
aW9uLCBkLT5tX3JlcXVlc3QubnNVUkxSZXF1ZXN0KCkpOworICAgIExPRyhOZXR3b3JrLCAiSGFu
ZGxlICVwIHN0YXJ0aW5nIGNvbm5lY3Rpb24gJXAgZm9yICVAIiwgdGhpcywgY29ubmVjdGlvbigp
LCBmaXJzdFJlcXVlc3QoKS5uc1VSTFJlcXVlc3QoKSk7CiAgICAgCi0gICAgZC0+bV9jb25uZWN0
aW9uID0gY29ubmVjdGlvbjsKLQogICAgIGlmIChkLT5tX2Nvbm5lY3Rpb24pIHsKLSAgICAgICAg
W2Nvbm5lY3Rpb24gcmVsZWFzZV07Ci0KICAgICAgICAgaWYgKGQtPm1fZGVmZXJzTG9hZGluZykK
LSAgICAgICAgICAgIHdrU2V0TlNVUkxDb25uZWN0aW9uRGVmZXJzQ2FsbGJhY2tzKGQtPm1fY29u
bmVjdGlvbi5nZXQoKSwgWUVTKTsKKyAgICAgICAgICAgIHdrU2V0TlNVUkxDb25uZWN0aW9uRGVm
ZXJzQ2FsbGJhY2tzKGNvbm5lY3Rpb24oKSwgWUVTKTsKIAogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CkBAIC0zMjEsNyArMzQ1LDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y2FuY2VsKCkK
ICAgICAgICAgW1tkLT5tX2N1cnJlbnRNYWNDaGFsbGVuZ2Ugc2VuZGVyXSBjYW5jZWxBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZTpkLT5tX2N1cnJlbnRNYWNDaGFsbGVuZ2VdOwogCiAgICAgaWYgKCFS
ZXNvdXJjZUhhbmRsZTo6ZGlkU2VuZEJvZHlEYXRhRGVsZWdhdGVFeGlzdHMoKSkKLSAgICAgICAg
ZGlzYXNzb2NpYXRlU3RyZWFtV2l0aFJlc291cmNlSGFuZGxlKFtkLT5tX3JlcXVlc3QubnNVUkxS
ZXF1ZXN0KCkgSFRUUEJvZHlTdHJlYW1dKTsKKyAgICAgICAgZGlzYXNzb2NpYXRlU3RyZWFtV2l0
aFJlc291cmNlSGFuZGxlKFtmaXJzdFJlcXVlc3QoKS5uc1VSTFJlcXVlc3QoKSBIVFRQQm9keVN0
cmVhbV0pOwogICAgIFtkLT5tX2Nvbm5lY3Rpb24uZ2V0KCkgY2FuY2VsXTsKIH0KIApAQCAtNDM1
LDQzICs0NTksNTQgQEAgYm9vbCBSZXNvdXJjZUhhbmRsZTo6d2lsbExvYWRGcm9tQ2FjaGUoUgog
I2VuZGlmCiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFscyBzdG9y
ZWRDcmVkZW50aWFscywgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEsIEZyYW1lKikKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6
OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VFcnJvciYgZXJy
b3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEsIEZyYW1l
KiBmcmFtZSkKIHsKKyAgICBMT0coTmV0d29yaywgIlJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5OiVAIGFsbG93U3RvcmVkQ3JlZGVudGlhbHM6JXUiLCByZXF1ZXN0Lm5z
VVJMUmVxdWVzdCgpLCBzdG9yZWRDcmVkZW50aWFscyk7CisKICAgICBOU0Vycm9yICpuc0Vycm9y
ID0gbmlsOwotICAgIAogICAgIE5TVVJMUmVzcG9uc2UgKm5zVVJMUmVzcG9uc2UgPSBuaWw7CiAg
ICAgTlNEYXRhICpyZXN1bHQgPSBuaWw7CiAKICAgICBBU1NFUlQoIXJlcXVlc3QuaXNFbXB0eSgp
KTsKICAgICAKLSAgICBOU011dGFibGVVUkxSZXF1ZXN0ICptdXRhYmxlUmVxdWVzdCA9IG5pbDsK
LSAgICBpZiAoIXNob3VsZENvbnRlbnRTbmlmZlVSTChyZXF1ZXN0LnVybCgpKSkgewotICAgICAg
ICBtdXRhYmxlUmVxdWVzdCA9IFtbcmVxdWVzdC5uc1VSTFJlcXVlc3QoKSBtdXRhYmxlQ29weV0g
YXV0b3JlbGVhc2VdOwotICAgICAgICB3a1NldE5TVVJMUmVxdWVzdFNob3VsZENvbnRlbnRTbmlm
ZihtdXRhYmxlUmVxdWVzdCwgTk8pOwotICAgIH0gCisjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VS
CisgICAgT3duUHRyPFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudD4gY2xpZW50ID0gV2Vi
Q29yZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpjcmVhdGUoKTsKKyAgICBjbGllbnQtPnNldEFs
bG93U3RvcmVkQ3JlZGVudGlhbHMoc3RvcmVkQ3JlZGVudGlhbHMgPT0gQWxsb3dTdG9yZWRDcmVk
ZW50aWFscyk7CiAKLSAgICAvLyBJZiBhIFVSTCBhbHJlYWR5IGhhcyBjb29raWVzLCB0aGVuIHdl
J2xsIGlnbm9yZSB0aGUgM3JkIHBhcnR5IGNvb2tpZSBwb2xpY3kgYW5kIGFjY2VwdCBuZXcgY29v
a2llcy4KLSAgICBOU0hUVFBDb29raWVTdG9yYWdlICpzaGFyZWRTdG9yYWdlID0gW05TSFRUUENv
b2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdOwotICAgIGlmIChbc2hhcmVkU3Rv
cmFnZSBjb29raWVBY2NlcHRQb2xpY3ldID09IE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeU9ubHlG
cm9tTWFpbkRvY3VtZW50RG9tYWluCi0gICAgICAgICYmIFtbc2hhcmVkU3RvcmFnZSBjb29raWVz
Rm9yVVJMOnJlcXVlc3QudXJsKCldIGNvdW50XSkgewotICAgICAgICBpZiAoIW11dGFibGVSZXF1
ZXN0KQotICAgICAgICAgICAgbXV0YWJsZVJlcXVlc3QgPSBbW3JlcXVlc3QubnNVUkxSZXF1ZXN0
KCkgbXV0YWJsZUNvcHldIGF1dG9yZWxlYXNlXTsKLSAgICAgICAgW211dGFibGVSZXF1ZXN0IHNl
dE1haW5Eb2N1bWVudFVSTDpbbXV0YWJsZVJlcXVlc3QgVVJMXV07CisgICAgUmVmUHRyPFJlc291
cmNlSGFuZGxlPiBoYW5kbGUgPSBhZG9wdFJlZihuZXcgUmVzb3VyY2VIYW5kbGUocmVxdWVzdCwg
Y2xpZW50LmdldCgpLCBmYWxzZSAvKmRlZmVyc0xvYWRpbmcqLywgdHJ1ZSAvKnNob3VsZENvbnRl
bnRTbmlmZiovKSk7CisKKyAgICBpZiAoaGFuZGxlLT5kLT5tX3NjaGVkdWxlZEZhaWx1cmVUeXBl
ICE9IE5vRmFpbHVyZSkgeworICAgICAgICBlcnJvciA9IGZyYW1lLT5sb2FkZXIoKS0+YmxvY2tl
ZEVycm9yKHJlcXVlc3QpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaGFuZGxlLT5j
cmVhdGVOU1VSTENvbm5lY3Rpb24oCisgICAgICAgIGhhbmRsZS0+ZGVsZWdhdGUoKSwgLy8gQSBz
eW5jaHJvbm91cyByZXF1ZXN0IGNhbm5vdCB0dXJuIGludG8gYSBkb3dubG9hZCwgc28gdGhlcmUg
aXMgbm8gbmVlZCB0byBwcm94eSB0aGUgZGVsZWdhdGUuCisgICAgICAgIHN0b3JlZENyZWRlbnRp
YWxzID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsCisgICAgICAgIGhhbmRsZS0+c2hvdWxkQ29u
dGVudFNuaWZmKCkgfHwgZnJhbWUtPnNldHRpbmdzKCktPmxvY2FsRmlsZUNvbnRlbnRTbmlmZmlu
Z0VuYWJsZWQoKSk7CisKKyAgICBbaGFuZGxlLT5jb25uZWN0aW9uKCkgc2NoZWR1bGVJblJ1bkxv
b3A6W05TUnVuTG9vcCBjdXJyZW50UnVuTG9vcF0gZm9yTW9kZTpXZWJDb3JlU3luY2hyb25vdXNM
b2FkZXJSdW5Mb29wTW9kZV07CisgICAgW2hhbmRsZS0+Y29ubmVjdGlvbigpIHN0YXJ0XTsKICAg
ICAKLSAgICBOU1VSTFJlcXVlc3QgKm5zUmVxdWVzdCA9IG11dGFibGVSZXF1ZXN0ID8gbXV0YWJs
ZVJlcXVlc3QgOiByZXF1ZXN0Lm5zVVJMUmVxdWVzdCgpOwotICAgICAgICAgICAgCi0gICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIHdoaWxlICghY2xpZW50LT5pc0RvbmUoKSkK
KyAgICAgICAgW1tOU1J1bkxvb3AgY3VycmVudFJ1bkxvb3BdIHJ1bk1vZGU6V2ViQ29yZVN5bmNo
cm9ub3VzTG9hZGVyUnVuTG9vcE1vZGUgYmVmb3JlRGF0ZTpbTlNEYXRlIGRpc3RhbnRGdXR1cmVd
XTsKKworICAgIHJlc3VsdCA9IGNsaWVudC0+ZGF0YSgpOworICAgIG5zVVJMUmVzcG9uc2UgPSBj
bGllbnQtPnJlc3BvbnNlKCk7CisgICAgbnNFcnJvciA9IGNsaWVudC0+ZXJyb3IoKTsKICAgICAK
LSNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKLSAgICByZXN1bHQgPSBbV2ViQ29yZVN5bmNocm9u
b3VzTG9hZGVyIGxvYWRSZXF1ZXN0Om5zUmVxdWVzdCBhbGxvd1N0b3JlZENyZWRlbnRpYWxzOihz
dG9yZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzKSByZXR1cm5pbmdSZXNw
b25zZTombnNVUkxSZXNwb25zZSBlcnJvcjombnNFcnJvcl07CisgICAgW2hhbmRsZS0+Y29ubmVj
dGlvbigpIGNhbmNlbF07CisKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHN0b3JlZENyZWRlbnRp
YWxzKTsKKyAgICBOU1VSTFJlcXVlc3QgKm5zUmVxdWVzdCA9IG11dGFibGVSZXF1ZXN0ID8gbXV0
YWJsZVJlcXVlc3QgOiByZXF1ZXN0Lm5zVVJMUmVxdWVzdCgpOworCisgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwogICAgIHJlc3VsdCA9IFtOU1VSTENvbm5lY3Rpb24gc2VuZFN5bmNo
cm9ub3VzUmVxdWVzdDpuc1JlcXVlc3QgcmV0dXJuaW5nUmVzcG9uc2U6Jm5zVVJMUmVzcG9uc2Ug
ZXJyb3I6Jm5zRXJyb3JdOwotI2VuZGlmCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
KyNlbmRpZgogCi0gICAgaWYgKG5zRXJyb3IgPT0gbmlsKQorICAgIGlmICghbnNFcnJvcikKICAg
ICAgICAgcmVzcG9uc2UgPSBuc1VSTFJlc3BvbnNlOwogICAgIGVsc2UgewogICAgICAgICByZXNw
b25zZSA9IFJlc291cmNlUmVzcG9uc2UocmVxdWVzdC51cmwoKSwgU3RyaW5nKCksIDAsIFN0cmlu
ZygpLCBTdHJpbmcoKSk7CkBAIC01NDIsNyArNTc3LDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6
ZGlkUmVjZWl2ZUF1dGhlbnRpYwogICAgICAgICAgICAgQVNTRVJUKGNyZWRlbnRpYWwucGVyc2lz
dGVuY2UoKSA9PSBDcmVkZW50aWFsUGVyc2lzdGVuY2VOb25lKTsKICAgICAgICAgICAgIGlmIChj
aGFsbGVuZ2UuZmFpbHVyZVJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSA9PSA0MDEpIHsKICAg
ICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgY3JlZGVudGlhbCBiYWNrLCBwb3NzaWJseSBhZGRp
bmcgaXQgYXMgYSBkZWZhdWx0IGZvciB0aGlzIGRpcmVjdG9yeS4KLSAgICAgICAgICAgICAgICBD
cmVkZW50aWFsU3RvcmFnZTo6c2V0KGNyZWRlbnRpYWwsIGNoYWxsZW5nZS5wcm90ZWN0aW9uU3Bh
Y2UoKSwgZC0+bV9yZXF1ZXN0LnVybCgpKTsKKyAgICAgICAgICAgICAgICBDcmVkZW50aWFsU3Rv
cmFnZTo6c2V0KGNyZWRlbnRpYWwsIGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSwgZmlyc3RS
ZXF1ZXN0KCkudXJsKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgW2NoYWxsZW5nZS5z
ZW5kZXIoKSB1c2VDcmVkZW50aWFsOm1hYyhjcmVkZW50aWFsKSBmb3JBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZTptYWMoY2hhbGxlbmdlKV07CiAgICAgICAgICAgICByZXR1cm47CkBAIC02MDQsNyAr
NjM5LDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDcmVkZW50aWFsKAogICAgICAg
ICBDcmVkZW50aWFsIHdlYkNyZWRlbnRpYWwoY3JlZGVudGlhbCwgQ3JlZGVudGlhbFBlcnNpc3Rl
bmNlTm9uZSk7CiAgICAgICAgIEtVUkwgdXJsVG9TdG9yZTsKICAgICAgICAgaWYgKGNoYWxsZW5n
ZS5mYWlsdXJlUmVzcG9uc2UoKS5odHRwU3RhdHVzQ29kZSgpID09IDQwMSkKLSAgICAgICAgICAg
IHVybFRvU3RvcmUgPSBkLT5tX3JlcXVlc3QudXJsKCk7CisgICAgICAgICAgICB1cmxUb1N0b3Jl
ID0gZmlyc3RSZXF1ZXN0KCkudXJsKCk7CiAgICAgICAgIENyZWRlbnRpYWxTdG9yYWdlOjpzZXQo
d2ViQ3JlZGVudGlhbCwgY29yZShbZC0+bV9jdXJyZW50TWFjQ2hhbGxlbmdlIHByb3RlY3Rpb25T
cGFjZV0pLCB1cmxUb1N0b3JlKTsKICAgICAgICAgW1tkLT5tX2N1cnJlbnRNYWNDaGFsbGVuZ2Ug
c2VuZGVyXSB1c2VDcmVkZW50aWFsOm1hYyh3ZWJDcmVkZW50aWFsKSBmb3JBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZTpkLT5tX2N1cnJlbnRNYWNDaGFsbGVuZ2VdOwogICAgIH0gZWxzZQpAQCAtNjc5
LDExICs3MTQsMTEgQEAgLSAoTlNVUkxSZXF1ZXN0ICopY29ubmVjdGlvbjooTlNVUkxDb25uZQog
ICAgICAgICAgICAgTlNNdXRhYmxlVVJMUmVxdWVzdCAqbXV0YWJsZVJlcXVlc3QgPSBbbmV3UmVx
dWVzdCBtdXRhYmxlQ29weV07CiAgICAgICAgICAgICBbbXV0YWJsZVJlcXVlc3Qgc2V0SFRUUE1l
dGhvZDpsYXN0SFRUUE1ldGhvZF07CiAgICAgCi0gICAgICAgICAgICBGb3JtRGF0YSogYm9keSA9
IG1faGFuZGxlLT5yZXF1ZXN0KCkuaHR0cEJvZHkoKTsKKyAgICAgICAgICAgIEZvcm1EYXRhKiBi
b2R5ID0gbV9oYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBCb2R5KCk7CiAgICAgICAgICAgICBp
ZiAoIWVxdWFsSWdub3JpbmdDYXNlKGxhc3RIVFRQTWV0aG9kLCAiR0VUIikgJiYgYm9keSAmJiAh
Ym9keS0+aXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIFdlYkNvcmU6OnNldEhUVFBCb2R5KG11
dGFibGVSZXF1ZXN0LCBib2R5KTsKIAotICAgICAgICAgICAgU3RyaW5nIG9yaWdpbmFsQ29udGVu
dFR5cGUgPSBtX2hhbmRsZS0+cmVxdWVzdCgpLmh0dHBDb250ZW50VHlwZSgpOworICAgICAgICAg
ICAgU3RyaW5nIG9yaWdpbmFsQ29udGVudFR5cGUgPSBtX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCku
aHR0cENvbnRlbnRUeXBlKCk7CiAgICAgICAgICAgICBpZiAoIW9yaWdpbmFsQ29udGVudFR5cGUu
aXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIFttdXRhYmxlUmVxdWVzdCBzZXRWYWx1ZTpvcmln
aW5hbENvbnRlbnRUeXBlIGZvckhUVFBIZWFkZXJGaWVsZDpAIkNvbnRlbnQtVHlwZSJdOwogCkBA
IC03NzksNyArODE0LDcgQEAgLSAodm9pZCljb25uZWN0aW9uOihOU1VSTENvbm5lY3Rpb24gKilj
bwogICAgIGlmIChzdGF0dXNDb2RlICE9IDMwNCkKICAgICAgICAgW3IgYWRqdXN0TUlNRVR5cGVJ
Zk5lY2Vzc2FyeV07CiAKLSAgICBpZiAoW21faGFuZGxlLT5yZXF1ZXN0KCkubnNVUkxSZXF1ZXN0
KCkgX3Byb3BlcnR5Rm9yS2V5OkAiRm9yY2VIVE1MTUlNRVR5cGUiXSkKKyAgICBpZiAoW21faGFu
ZGxlLT5maXJzdFJlcXVlc3QoKS5uc1VSTFJlcXVlc3QoKSBfcHJvcGVydHlGb3JLZXk6QCJGb3Jj
ZUhUTUxNSU1FVHlwZSJdKQogICAgICAgICBbciBfc2V0TUlNRVR5cGU6QCJ0ZXh0L2h0bWwiXTsK
IAogI2lmIEVOQUJMRShXTUwpCkBAIC04NTUsNyArODkwLDcgQEAgLSAodm9pZCljb25uZWN0aW9u
RGlkRmluaXNoTG9hZGluZzooTlNVUgogICAgIENhbGxiYWNrR3VhcmQgZ3VhcmQ7CiAKICAgICBp
ZiAoIVJlc291cmNlSGFuZGxlOjpkaWRTZW5kQm9keURhdGFEZWxlZ2F0ZUV4aXN0cygpKQotICAg
ICAgICBkaXNhc3NvY2lhdGVTdHJlYW1XaXRoUmVzb3VyY2VIYW5kbGUoW21faGFuZGxlLT5yZXF1
ZXN0KCkubnNVUkxSZXF1ZXN0KCkgSFRUUEJvZHlTdHJlYW1dKTsKKyAgICAgICAgZGlzYXNzb2Np
YXRlU3RyZWFtV2l0aFJlc291cmNlSGFuZGxlKFttX2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkubnNV
UkxSZXF1ZXN0KCkgSFRUUEJvZHlTdHJlYW1dKTsKIAogICAgIG1faGFuZGxlLT5jbGllbnQoKS0+
ZGlkRmluaXNoTG9hZGluZyhtX2hhbmRsZSk7CiB9CkBAIC04NzEsNyArOTA2LDcgQEAgLSAodm9p
ZCljb25uZWN0aW9uOihOU1VSTENvbm5lY3Rpb24gKiljbwogICAgIENhbGxiYWNrR3VhcmQgZ3Vh
cmQ7CiAKICAgICBpZiAoIVJlc291cmNlSGFuZGxlOjpkaWRTZW5kQm9keURhdGFEZWxlZ2F0ZUV4
aXN0cygpKQotICAgICAgICBkaXNhc3NvY2lhdGVTdHJlYW1XaXRoUmVzb3VyY2VIYW5kbGUoW21f
aGFuZGxlLT5yZXF1ZXN0KCkubnNVUkxSZXF1ZXN0KCkgSFRUUEJvZHlTdHJlYW1dKTsKKyAgICAg
ICAgZGlzYXNzb2NpYXRlU3RyZWFtV2l0aFJlc291cmNlSGFuZGxlKFttX2hhbmRsZS0+Zmlyc3RS
ZXF1ZXN0KCkubnNVUkxSZXF1ZXN0KCkgSFRUUEJvZHlTdHJlYW1dKTsKIAogICAgIG1faGFuZGxl
LT5jbGllbnQoKS0+ZGlkRmFpbChtX2hhbmRsZSwgZXJyb3IpOwogfQpAQCAtOTQ3LDIyMCArOTgy
LDY5IEBAIC0gKE5TQ2FjaGVkVVJMUmVzcG9uc2UgKiljb25uZWN0aW9uOihOU1UKIAogI2lmbmRl
ZiBCVUlMRElOR19PTl9USUdFUgogCi1AaW1wbGVtZW50YXRpb24gV2ViQ29yZVN5bmNocm9ub3Vz
TG9hZGVyCi0KLS0gKEJPT0wpX2lzRG9uZQorV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50
Ojp+V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50KCkKIHsKLSAgICByZXR1cm4gbV9pc0Rv
bmU7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFttX3VybCByZWxlYXNlXTsKLSAgICBb
bV91c2VyIHJlbGVhc2VdOwotICAgIFttX3Bhc3MgcmVsZWFzZV07CiAgICAgW21fcmVzcG9uc2Ug
cmVsZWFzZV07CiAgICAgW21fZGF0YSByZWxlYXNlXTsKICAgICBbbV9lcnJvciByZWxlYXNlXTsK
LSAgICAKLSAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKLS0gKE5TVVJMUmVxdWVzdCAqKWNvbm5l
Y3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKWNvbm5lY3Rpb24gd2lsbFNlbmRSZXF1ZXN0OihOU1VS
TFJlcXVlc3QgKiluZXdSZXF1ZXN0IHJlZGlyZWN0UmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKily
ZWRpcmVjdFJlc3BvbnNlCit2b2lkIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6d2ls
bFNlbmRSZXF1ZXN0KFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgLypyZWRpcmVjdFJlc3BvbnNlKi8pCiB7Ci0g
ICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pOwotCi0gICAgTE9HKE5ldHdvcmssICJXZWJDb3Jl
U3luY2hyb25vdXNMb2FkZXIgZGVsZWdhdGUgY29ubmVjdGlvbjolcCB3aWxsU2VuZFJlcXVlc3Q6
JUAgcmVkaXJlY3RSZXNwb25zZTolcCIsIGNvbm5lY3Rpb24sIFtuZXdSZXF1ZXN0IGRlc2NyaXB0
aW9uXSwgcmVkaXJlY3RSZXNwb25zZSk7Ci0KICAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBi
ZSBmaXhlZCB0byBmb2xsb3cgdGhlIHJlZGlyZWN0IGNvcnJlY3RseSBldmVuIGZvciBjcm9zcy1k
b21haW4gcmVxdWVzdHMuCi0gICAgaWYgKG1fdXJsICYmICFwcm90b2NvbEhvc3RBbmRQb3J0QXJl
RXF1YWwobV91cmwsIFtuZXdSZXF1ZXN0IFVSTF0pKSB7CisgICAgaWYgKCFwcm90b2NvbEhvc3RB
bmRQb3J0QXJlRXF1YWwoaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKSwgcmVxdWVzdC51cmwo
KSkpIHsKKyAgICAgICAgQVNTRVJUKCFtX2Vycm9yKTsKICAgICAgICAgbV9lcnJvciA9IFtbTlNF
cnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46TlNVUkxFcnJvckRvbWFpbiBjb2RlOk5TVVJMRXJy
b3JCYWRTZXJ2ZXJSZXNwb25zZSB1c2VySW5mbzpuaWxdOwotICAgICAgICBtX2lzRG9uZSA9IFlF
UzsKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0KLSAgICBOU1VSTCAqY29weSA9IFtbbmV3
UmVxdWVzdCBVUkxdIGNvcHldOwotICAgIFttX3VybCByZWxlYXNlXTsKLSAgICBtX3VybCA9IGNv
cHk7Ci0KLSAgICBpZiAocmVkaXJlY3RSZXNwb25zZSkgewotICAgICAgICAvLyBUYWtlIHVzZXIv
cGFzcyBvdXQgb2YgdGhlIFVSTC4KLSAgICAgICAgW21fdXNlciByZWxlYXNlXTsKLSAgICAgICAg
W21fcGFzcyByZWxlYXNlXTsKLSAgICAgICAgbV91c2VyID0gW1ttX3VybCB1c2VyXSBjb3B5XTsK
LSAgICAgICAgbV9wYXNzID0gW1ttX3VybCBwYXNzd29yZF0gY29weV07Ci0gICAgICAgIGlmICht
X3VzZXIgfHwgbV9wYXNzKSB7Ci0gICAgICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdFdp
dGhvdXRDcmVkZW50aWFscyA9IG5ld1JlcXVlc3Q7Ci0gICAgICAgICAgICByZXF1ZXN0V2l0aG91
dENyZWRlbnRpYWxzLnJlbW92ZUNyZWRlbnRpYWxzKCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVx
dWVzdFdpdGhvdXRDcmVkZW50aWFscy5uc1VSTFJlcXVlc3QoKTsKLSAgICAgICAgfQorICAgICAg
ICBtX2lzRG9uZSA9IHRydWU7CisgICAgICAgIHJlcXVlc3QgPSAwOworICAgICAgICByZXR1cm47
CiAgICAgfQotCi0gICAgcmV0dXJuIG5ld1JlcXVlc3Q7CiB9CiAKLS0gKEJPT0wpY29ubmVjdGlv
blNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlOihOU1VSTENvbm5lY3Rpb24gKiljb25uZWN0aW9u
Citib29sIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6c2hvdWxkVXNlQ3JlZGVudGlh
bFN0b3JhZ2UoUmVzb3VyY2VIYW5kbGUqKQogewotICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9u
KTsKLQotICAgIExPRyhOZXR3b3JrLCAiV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyIGRlbGVnYXRl
IGNvbm5lY3Rpb25TaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZTolcCIsIGNvbm5lY3Rpb24pOwot
CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc2sgRnJhbWVMb2FkZXJDbGllbnQgd2hldGhlciB1
c2luZyBjcmVkZW50aWFsIHN0b3JhZ2UgaXMgZ2xvYmFsbHkgZm9yYmlkZGVuLgogICAgIHJldHVy
biBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHM7CiB9CiAKLS0gKHZvaWQpY29ubmVjdGlvbjooTlNV
UkxDb25uZWN0aW9uICopY29ubmVjdGlvbiBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVu
Z2U6KE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKiljaGFsbGVuZ2UKKyNpZiBVU0UoUFJP
VEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQorYm9vbCBXZWJDb3JlU3luY2hyb25vdXNMb2Fk
ZXJDbGllbnQ6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoUmVzb3VyY2VI
YW5kbGUqLCBjb25zdCBQcm90ZWN0aW9uU3BhY2UmKQogewotICAgIFVOVVNFRF9QQVJBTShjb25u
ZWN0aW9uKTsKLQotICAgIExPRyhOZXR3b3JrLCAiV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyIGRl
bGVnYXRlIGNvbm5lY3Rpb246JXAgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOiVw
IiwgY29ubmVjdGlvbiwgY2hhbGxlbmdlKTsKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFzayBG
cmFtZUxvYWRlckNsaWVudC4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgogCi0gICAgaWYg
KG1fdXNlciAmJiBtX3Bhc3MpIHsKLSAgICAgICAgTlNVUkxDcmVkZW50aWFsICpjcmVkZW50aWFs
ID0gW1tOU1VSTENyZWRlbnRpYWwgYWxsb2NdIGluaXRXaXRoVXNlcjptX3VzZXIKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXNzd29yZDptX3Bhc3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJzaXN0ZW5jZTpOU1VSTENyZWRlbnRpYWxQZXJz
aXN0ZW5jZU5vbmVdOwotICAgICAgICBLVVJMIHVybFRvU3RvcmU7Ci0gICAgICAgIGlmIChbW2No
YWxsZW5nZSBmYWlsdXJlUmVzcG9uc2VdIGlzS2luZE9mQ2xhc3M6W05TSFRUUFVSTFJlc3BvbnNl
IGNsYXNzXV0gJiYgWyhOU0hUVFBVUkxSZXNwb25zZSopW2NoYWxsZW5nZSBmYWlsdXJlUmVzcG9u
c2VdIHN0YXR1c0NvZGVdID09IDQwMSkKLSAgICAgICAgICAgIHVybFRvU3RvcmUgPSBtX3VybDsK
LSAgICAgICAgQ3JlZGVudGlhbFN0b3JhZ2U6OnNldChjb3JlKGNyZWRlbnRpYWwpLCBjb3JlKFtj
aGFsbGVuZ2UgcHJvdGVjdGlvblNwYWNlXSksIHVybFRvU3RvcmUpOwotICAgICAgICAKLSAgICAg
ICAgW1tjaGFsbGVuZ2Ugc2VuZGVyXSB1c2VDcmVkZW50aWFsOmNyZWRlbnRpYWwgZm9yQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2U6Y2hhbGxlbmdlXTsKLSAgICAgICAgW2NyZWRlbnRpYWwgcmVsZWFz
ZV07Ci0gICAgICAgIFttX3VzZXIgcmVsZWFzZV07Ci0gICAgICAgIFttX3Bhc3MgcmVsZWFzZV07
Ci0gICAgICAgIG1fdXNlciA9IDA7Ci0gICAgICAgIG1fcGFzcyA9IDA7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgaWYgKFtjaGFsbGVuZ2UgcHJldmlvdXNGYWlsdXJlQ291bnRdID09IDAg
JiYgbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzKSB7Ci0gICAgICAgIENyZWRlbnRpYWwgY3JlZGVu
dGlhbCA9IENyZWRlbnRpYWxTdG9yYWdlOjpnZXQoY29yZShbY2hhbGxlbmdlIHByb3RlY3Rpb25T
cGFjZV0pKTsKLSAgICAgICAgaWYgKCFjcmVkZW50aWFsLmlzRW1wdHkoKSAmJiBjcmVkZW50aWFs
ICE9IG1faW5pdGlhbENyZWRlbnRpYWwpIHsKLSAgICAgICAgICAgIEFTU0VSVChjcmVkZW50aWFs
LnBlcnNpc3RlbmNlKCkgPT0gQ3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZSk7Ci0gICAgICAgICAg
ICBpZiAoW1tjaGFsbGVuZ2UgZmFpbHVyZVJlc3BvbnNlXSBpc0tpbmRPZkNsYXNzOltOU0hUVFBV
UkxSZXNwb25zZSBjbGFzc11dICYmIFsoTlNIVFRQVVJMUmVzcG9uc2UgKilbY2hhbGxlbmdlIGZh
aWx1cmVSZXNwb25zZV0gc3RhdHVzQ29kZV0gPT0gNDAxKSB7Ci0gICAgICAgICAgICAgICAgLy8g
U3RvcmUgdGhlIGNyZWRlbnRpYWwgYmFjaywgcG9zc2libHkgYWRkaW5nIGl0IGFzIGEgZGVmYXVs
dCBmb3IgdGhpcyBkaXJlY3RvcnkuCi0gICAgICAgICAgICAgICAgQ3JlZGVudGlhbFN0b3JhZ2U6
OnNldChjcmVkZW50aWFsLCBjb3JlKFtjaGFsbGVuZ2UgcHJvdGVjdGlvblNwYWNlXSksIG1fdXJs
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFtbY2hhbGxlbmdlIHNlbmRlcl0gdXNlQ3Jl
ZGVudGlhbDptYWMoY3JlZGVudGlhbCkgZm9yQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6Y2hhbGxl
bmdlXTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KK3ZvaWQgV2ViQ29y
ZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxl
bmdlKQorewogICAgIC8vIEZJWE1FOiBUaGUgdXNlciBzaG91bGQgYmUgYXNrZWQgZm9yIGNyZWRl
bnRpYWxzLCBhcyBpbiBhc3luYyBjYXNlLgotICAgIFtbY2hhbGxlbmdlIHNlbmRlcl0gY29udGlu
dWVXaXRob3V0Q3JlZGVudGlhbEZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOmNoYWxsZW5nZV07
CisgICAgW2NoYWxsZW5nZS5zZW5kZXIoKSBjb250aW51ZVdpdGhvdXRDcmVkZW50aWFsRm9yQXV0
aGVudGljYXRpb25DaGFsbGVuZ2U6Y2hhbGxlbmdlLm5zVVJMQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UoKV07CiB9CiAKLS0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVj
dGlvbiBkaWRSZWNlaXZlUmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKilyZXNwb25zZQordm9pZCBX
ZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJj
ZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewotICAgIFVOVVNF
RF9QQVJBTShjb25uZWN0aW9uKTsKLQotICAgIExPRyhOZXR3b3JrLCAiV2ViQ29yZVN5bmNocm9u
b3VzTG9hZGVyIGRlbGVnYXRlIGNvbm5lY3Rpb246JXAgZGlkUmVjZWl2ZVJlc3BvbnNlOiVwIChI
VFRQIHN0YXR1cyAlZCwgcmVwb3J0ZWQgTUlNRVR5cGUgJyVzJykiLCBjb25uZWN0aW9uLCByZXNw
b25zZSwgW3Jlc3BvbnNlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc3RhdHVzQ29kZSld
ID8gWyhpZClyZXNwb25zZSBzdGF0dXNDb2RlXSA6IDAsIFtbcmVzcG9uc2UgTUlNRVR5cGVdIFVU
RjhTdHJpbmddKTsKLQotICAgIE5TVVJMUmVzcG9uc2UgKnIgPSBbcmVzcG9uc2UgY29weV07Ci0g
ICAgCiAgICAgW21fcmVzcG9uc2UgcmVsZWFzZV07Ci0gICAgbV9yZXNwb25zZSA9IHI7CisgICAg
bV9yZXNwb25zZSA9IFtyZXNwb25zZS5uc1VSTFJlc3BvbnNlKCkgY29weV07CiB9CiAKLS0gKHZv
aWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlvbiBkaWRSZWNlaXZlRGF0
YTooTlNEYXRhICopZGF0YQordm9pZCBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmRp
ZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0
aCwgaW50IC8qbGVuZ3RoUmVjZWl2ZWQqLykKIHsKLSAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlv
bik7Ci0KLSAgICBMT0coTmV0d29yaywgIldlYkNvcmVTeW5jaHJvbm91c0xvYWRlciBkZWxlZ2F0
ZSBjb25uZWN0aW9uOiVwIGRpZFJlY2VpdmVEYXRhOiVwIiwgY29ubmVjdGlvbiwgZGF0YSk7Ci0K
ICAgICBpZiAoIW1fZGF0YSkKICAgICAgICAgbV9kYXRhID0gW1tOU011dGFibGVEYXRhIGFsbG9j
XSBpbml0XTsKLSAgICAKLSAgICBbbV9kYXRhIGFwcGVuZERhdGE6ZGF0YV07CisgICAgW21fZGF0
YSBhcHBlbmRCeXRlczpkYXRhIGxlbmd0aDpsZW5ndGhdOwogfQogCi0tICh2b2lkKWNvbm5lY3Rp
b25EaWRGaW5pc2hMb2FkaW5nOihOU1VSTENvbm5lY3Rpb24gKiljb25uZWN0aW9uCit2b2lkIFdl
YkNvcmVTeW5jaHJvbm91c0xvYWRlckNsaWVudDo6ZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhh
bmRsZSopCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pOwotCi0gICAgTE9HKE5ldHdv
cmssICJXZWJDb3JlU3luY2hyb25vdXNMb2FkZXIgZGVsZWdhdGUgY29ubmVjdGlvbkRpZEZpbmlz
aExvYWRpbmc6JXAiLCBjb25uZWN0aW9uKTsKLQotICAgIG1faXNEb25lID0gWUVTOworICAgIG1f
aXNEb25lID0gdHJ1ZTsKIH0KIAotLSAodm9pZCljb25uZWN0aW9uOihOU1VSTENvbm5lY3Rpb24g
Kiljb25uZWN0aW9uIGRpZEZhaWxXaXRoRXJyb3I6KE5TRXJyb3IgKillcnJvcgordm9pZCBXZWJD
b3JlU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OmRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqLCBjb25z
dCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKLSAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7
Ci0KLSAgICBMT0coTmV0d29yaywgIldlYkNvcmVTeW5jaHJvbm91c0xvYWRlciBkZWxlZ2F0ZSBj
b25uZWN0aW9uOiVwIGRpZEZhaWxXaXRoRXJyb3I6JUAiLCBjb25uZWN0aW9uLCBlcnJvcik7Ci0K
ICAgICBBU1NFUlQoIW1fZXJyb3IpOwotICAgIAotICAgIG1fZXJyb3IgPSBbZXJyb3IgcmV0YWlu
XTsKLSAgICBtX2lzRG9uZSA9IFlFUzsKLX0KLQotLSAoTlNEYXRhICopX2RhdGEKLXsKLSAgICBy
ZXR1cm4gW1ttX2RhdGEgcmV0YWluXSBhdXRvcmVsZWFzZV07Ci19Ci0KLS0gKE5TVVJMUmVzcG9u
c2UgKilfcmVzcG9uc2UKLXsKLSAgICByZXR1cm4gW1ttX3Jlc3BvbnNlIHJldGFpbl0gYXV0b3Jl
bGVhc2VdOwotfQogCi0tIChOU0Vycm9yICopX2Vycm9yCi17Ci0gICAgcmV0dXJuIFtbbV9lcnJv
ciByZXRhaW5dIGF1dG9yZWxlYXNlXTsKKyAgICBtX2Vycm9yID0gW2Vycm9yIGNvcHldOworICAg
IG1faXNEb25lID0gdHJ1ZTsKIH0KIAotKyAoTlNEYXRhICopbG9hZFJlcXVlc3Q6KE5TVVJMUmVx
dWVzdCAqKXJlcXVlc3QgYWxsb3dTdG9yZWRDcmVkZW50aWFsczooQk9PTClhbGxvd1N0b3JlZENy
ZWRlbnRpYWxzIHJldHVybmluZ1Jlc3BvbnNlOihOU1VSTFJlc3BvbnNlICoqKXJlc3BvbnNlIGVy
cm9yOihOU0Vycm9yICoqKWVycm9yCi17Ci0gICAgTE9HKE5ldHdvcmssICJXZWJDb3JlU3luY2hy
b25vdXNMb2FkZXIgbG9hZFJlcXVlc3Q6JUAgYWxsb3dTdG9yZWRDcmVkZW50aWFsczoldSIsIHJl
cXVlc3QsIGFsbG93U3RvcmVkQ3JlZGVudGlhbHMpOwotCi0gICAgV2ViQ29yZVN5bmNocm9ub3Vz
TG9hZGVyICpkZWxlZ2F0ZSA9IFtbV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyIGFsbG9jXSBpbml0
XTsKLQotICAgIEtVUkwgdXJsKFtyZXF1ZXN0IFVSTF0pOwotICAgIGRlbGVnYXRlLT5tX3VzZXIg
PSBbbnNTdHJpbmdOaWxJZkVtcHR5KHVybC51c2VyKCkpIHJldGFpbl07Ci0gICAgZGVsZWdhdGUt
Pm1fcGFzcyA9IFtuc1N0cmluZ05pbElmRW1wdHkodXJsLnBhc3MoKSkgcmV0YWluXTsKLSAgICBk
ZWxlZ2F0ZS0+bV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzID0gYWxsb3dTdG9yZWRDcmVkZW50aWFs
czsKLQotICAgIE5TVVJMQ29ubmVjdGlvbiAqY29ubmVjdGlvbjsKLQotICAgIC8vIFRha2UgdXNl
ci9wYXNzIG91dCBvZiB0aGUgVVJMLgotICAgIC8vIENyZWRlbnRpYWxzIGZvciBmdHAgY2FuIG9u
bHkgYmUgcGFzc2VkIGluIFVSTCwgdGhlIGNvbm5lY3Rpb246ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlOiBkZWxlZ2F0ZSBjYWxsIHdvbid0IGJlIG1hZGUuCi0gICAgaWYgKChkZWxl
Z2F0ZS0+bV91c2VyIHx8IGRlbGVnYXRlLT5tX3Bhc3MpICYmIHVybC5wcm90b2NvbEluSFRUUEZh
bWlseSgpKSB7Ci0gICAgICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0V2l0aG91dENyZWRlbnRp
YWxzID0gcmVxdWVzdDsKLSAgICAgICAgcmVxdWVzdFdpdGhvdXRDcmVkZW50aWFscy5yZW1vdmVD
cmVkZW50aWFscygpOwotICAgICAgICBjb25uZWN0aW9uID0gY3JlYXRlTlNVUkxDb25uZWN0aW9u
KHJlcXVlc3RXaXRob3V0Q3JlZGVudGlhbHMubnNVUkxSZXF1ZXN0KCksIGRlbGVnYXRlLCBhbGxv
d1N0b3JlZENyZWRlbnRpYWxzKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyA8cmRhcjovL3By
b2JsZW0vNzE3NDA1MD4gLSBGb3IgVVJMcyB0aGF0IG1hdGNoIHRoZSBwYXRocyBvZiB0aG9zZSBw
cmV2aW91c2x5IGNoYWxsZW5nZWQgZm9yIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24sIAotICAg
ICAgICAvLyB0cnkgYW5kIHJldXNlIHRoZSBjcmVkZW50aWFsIHByZWVtcHRpdmVseSwgYXMgYWxs
b3dlZCBieSBSRkMgMjYxNy4KLSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3RXaXRoSW5p
dGlhbENyZWRlbnRpYWxzID0gcmVxdWVzdDsKLSAgICAgICAgaWYgKGFsbG93U3RvcmVkQ3JlZGVu
dGlhbHMgJiYgdXJsLnByb3RvY29sSW5IVFRQRmFtaWx5KCkpCi0gICAgICAgICAgICBkZWxlZ2F0
ZS0+bV9pbml0aWFsQ3JlZGVudGlhbCA9IENyZWRlbnRpYWxTdG9yYWdlOjpnZXQodXJsKTsKLSAg
ICAgICAgICAgIAotICAgICAgICBpZiAoIWRlbGVnYXRlLT5tX2luaXRpYWxDcmVkZW50aWFsLmlz
RW1wdHkoKSkgewotICAgICAgICAgICAgU3RyaW5nIGF1dGhIZWFkZXIgPSAiQmFzaWMgIiArIGVu
Y29kZUJhc2ljQXV0aG9yaXphdGlvbihkZWxlZ2F0ZS0+bV9pbml0aWFsQ3JlZGVudGlhbC51c2Vy
KCksIGRlbGVnYXRlLT5tX2luaXRpYWxDcmVkZW50aWFsLnBhc3N3b3JkKCkpOwotICAgICAgICAg
ICAgcmVxdWVzdFdpdGhJbml0aWFsQ3JlZGVudGlhbHMuYWRkSFRUUEhlYWRlckZpZWxkKCJBdXRo
b3JpemF0aW9uIiwgYXV0aEhlYWRlcik7Ci0gICAgICAgIH0KLSAgICAgICAgY29ubmVjdGlvbiA9
IGNyZWF0ZU5TVVJMQ29ubmVjdGlvbihyZXF1ZXN0V2l0aEluaXRpYWxDcmVkZW50aWFscy5uc1VS
TFJlcXVlc3QoKSwgZGVsZWdhdGUsIGFsbG93U3RvcmVkQ3JlZGVudGlhbHMpOwotICAgIH0KLQot
ICAgIFtjb25uZWN0aW9uIHNjaGVkdWxlSW5SdW5Mb29wOltOU1J1bkxvb3AgY3VycmVudFJ1bkxv
b3BdIGZvck1vZGU6V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyUnVuTG9vcE1vZGVdOwotICAgIFtj
b25uZWN0aW9uIHN0YXJ0XTsKLSAgICAKLSAgICB3aGlsZSAoIVtkZWxlZ2F0ZSBfaXNEb25lXSkK
LSAgICAgICAgW1tOU1J1bkxvb3AgY3VycmVudFJ1bkxvb3BdIHJ1bk1vZGU6V2ViQ29yZVN5bmNo
cm9ub3VzTG9hZGVyUnVuTG9vcE1vZGUgYmVmb3JlRGF0ZTpbTlNEYXRlIGRpc3RhbnRGdXR1cmVd
XTsKLQotICAgIE5TRGF0YSAqZGF0YSA9IFtkZWxlZ2F0ZSBfZGF0YV07Ci0gICAgKnJlc3BvbnNl
ID0gW2RlbGVnYXRlIF9yZXNwb25zZV07Ci0gICAgKmVycm9yID0gW2RlbGVnYXRlIF9lcnJvcl07
Ci0gICAgCi0gICAgW2Nvbm5lY3Rpb24gY2FuY2VsXTsKLSAgICAKLSAgICBbY29ubmVjdGlvbiBy
ZWxlYXNlXTsKLSAgICBbZGVsZWdhdGUgcmVsZWFzZV07Ci0KLSAgICBMT0coTmV0d29yaywgIldl
YkNvcmVTeW5jaHJvbm91c0xvYWRlciBkb25lIik7Ci0KLSAgICByZXR1cm4gZGF0YTsKLX0KLQot
QGVuZAotCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9RTmV0d29y
a1JlcGx5SGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3F0L1FOZXR3b3JrUmVwbHlIYW5kbGVyLmNwcAkocmV2aXNpb24gNjMxMDgpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvcXQvUU5ldHdvcmtSZXBseUhhbmRsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTAsNyArMTUwLDcgQEAgUU5ldHdvcmtSZXBseUhhbmRsZXI6OlFOZXR3b3JrUmVw
bHlIYW5kbAogICAgICwgbV9zaG91bGRGb3J3YXJkRGF0YShmYWxzZSkKICAgICAsIG1fcmVkaXJl
Y3Rpb25UcmllcyhnTWF4UmVjdXJzaW9uTGltaXQpCiB7Ci0gICAgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0ICZyID0gbV9yZXNvdXJjZUhhbmRsZS0+cmVxdWVzdCgpOworICAgIGNvbnN0IFJlc291cmNl
UmVxdWVzdCAmciA9IG1fcmVzb3VyY2VIYW5kbGUtPmZpcnN0UmVxdWVzdCgpOwogCiAgICAgaWYg
KHIuaHR0cE1ldGhvZCgpID09ICJHRVQiKQogICAgICAgICBtX21ldGhvZCA9IFFOZXR3b3JrQWNj
ZXNzTWFuYWdlcjo6R2V0T3BlcmF0aW9uOwpAQCAtMzU4LDcgKzM1OCw3IEBAIHZvaWQgUU5ldHdv
cmtSZXBseUhhbmRsZXI6OnNlbmRSZXNwb25zZUkKICAgICAgICAgfQogICAgICAgICBtX3JlZGly
ZWN0ZWQgPSB0cnVlOwogCi0gICAgICAgIFJlc291cmNlUmVxdWVzdCBuZXdSZXF1ZXN0ID0gbV9y
ZXNvdXJjZUhhbmRsZS0+cmVxdWVzdCgpOworICAgICAgICBSZXNvdXJjZVJlcXVlc3QgbmV3UmVx
dWVzdCA9IG1fcmVzb3VyY2VIYW5kbGUtPmZpcnN0UmVxdWVzdCgpOwogICAgICAgICBuZXdSZXF1
ZXN0LnNldFVSTChuZXdVcmwpOwogCiAgICAgICAgIGlmICgoKHN0YXR1c0NvZGUgPj0gMzAxICYm
IHN0YXR1c0NvZGUgPD0gMzAzKSB8fCBzdGF0dXNDb2RlID09IDMwNykgJiYgbmV3UmVxdWVzdC5o
dHRwTWV0aG9kKCkgPT0gIlBPU1QiKSB7CkBAIC00NDIsNyArNDQyLDcgQEAgdm9pZCBRTmV0d29y
a1JlcGx5SGFuZGxlcjo6c3RhcnQoKQogICAgICAgICAgICAgbV9yZXBseSA9IG1hbmFnZXItPmdl
dChtX3JlcXVlc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUU5ldHdvcmtB
Y2Nlc3NNYW5hZ2VyOjpQb3N0T3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICBGb3JtRGF0YUlPRGV2
aWNlKiBwb3N0RGV2aWNlID0gbmV3IEZvcm1EYXRhSU9EZXZpY2UoZC0+bV9yZXF1ZXN0Lmh0dHBC
b2R5KCkpOyAKKyAgICAgICAgICAgIEZvcm1EYXRhSU9EZXZpY2UqIHBvc3REZXZpY2UgPSBuZXcg
Rm9ybURhdGFJT0RldmljZShkLT5tX2ZpcnN0UmVxdWVzdC5odHRwQm9keSgpKTsgCiAgICAgICAg
ICAgICBtX3JlcGx5ID0gbWFuYWdlci0+cG9zdChtX3JlcXVlc3QsIHBvc3REZXZpY2UpOwogICAg
ICAgICAgICAgcG9zdERldmljZS0+c2V0UGFyZW50KG1fcmVwbHkpOwogICAgICAgICAgICAgYnJl
YWs7CkBAIC00NTEsNyArNDUxLDcgQEAgdm9pZCBRTmV0d29ya1JlcGx5SGFuZGxlcjo6c3RhcnQo
KQogICAgICAgICAgICAgbV9yZXBseSA9IG1hbmFnZXItPmhlYWQobV9yZXF1ZXN0KTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6UHV0T3Bl
cmF0aW9uOiB7Ci0gICAgICAgICAgICBGb3JtRGF0YUlPRGV2aWNlKiBwdXREZXZpY2UgPSBuZXcg
Rm9ybURhdGFJT0RldmljZShkLT5tX3JlcXVlc3QuaHR0cEJvZHkoKSk7IAorICAgICAgICAgICAg
Rm9ybURhdGFJT0RldmljZSogcHV0RGV2aWNlID0gbmV3IEZvcm1EYXRhSU9EZXZpY2UoZC0+bV9m
aXJzdFJlcXVlc3QuaHR0cEJvZHkoKSk7IAogICAgICAgICAgICAgbV9yZXBseSA9IG1hbmFnZXIt
PnB1dChtX3JlcXVlc3QsIHB1dERldmljZSk7CiAgICAgICAgICAgICBwdXREZXZpY2UtPnNldFBh
cmVudChtX3JlcGx5KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDY0LDcgKzQ2NCw3IEBAIHZv
aWQgUU5ldHdvcmtSZXBseUhhbmRsZXI6OnN0YXJ0KCkKICNlbmRpZgogI2lmIFFUX1ZFUlNJT04g
Pj0gMHgwNDA3MDAKICAgICAgICAgY2FzZSBRTmV0d29ya0FjY2Vzc01hbmFnZXI6OkN1c3RvbU9w
ZXJhdGlvbjoKLSAgICAgICAgICAgIG1fcmVwbHkgPSBtYW5hZ2VyLT5zZW5kQ3VzdG9tUmVxdWVz
dChtX3JlcXVlc3QsIG1fcmVzb3VyY2VIYW5kbGUtPnJlcXVlc3QoKS5odHRwTWV0aG9kKCkubGF0
aW4xKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIG1fcmVwbHkgPSBtYW5hZ2VyLT5zZW5kQ3VzdG9t
UmVxdWVzdChtX3JlcXVlc3QsIG1fcmVzb3VyY2VIYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBN
ZXRob2QoKS5sYXRpbjEoKS5kYXRhKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAg
ICAgICAgY2FzZSBRTmV0d29ya0FjY2Vzc01hbmFnZXI6OlVua25vd25PcGVyYXRpb246IHsKQEAg
LTQ5NCw3ICs0OTQsNyBAQCB2b2lkIFFOZXR3b3JrUmVwbHlIYW5kbGVyOjpzdGFydCgpCiAgICAg
Y29ubmVjdChtX3JlcGx5LCBTSUdOQUwocmVhZHlSZWFkKCkpLAogICAgICAgICAgICAgdGhpcywg
U0xPVChmb3J3YXJkRGF0YSgpKSwgU0lHTkFMX0NPTk4pOwogCi0gICAgaWYgKG1fcmVzb3VyY2VI
YW5kbGUtPnJlcXVlc3QoKS5yZXBvcnRVcGxvYWRQcm9ncmVzcygpKSB7CisgICAgaWYgKG1fcmVz
b3VyY2VIYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnJlcG9ydFVwbG9hZFByb2dyZXNzKCkpIHsKICAg
ICAgICAgY29ubmVjdChtX3JlcGx5LCBTSUdOQUwodXBsb2FkUHJvZ3Jlc3MocWludDY0LCBxaW50
NjQpKSwKICAgICAgICAgICAgICAgICB0aGlzLCBTTE9UKHVwbG9hZFByb2dyZXNzKHFpbnQ2NCwg
cWludDY0KSksIFNJR05BTF9DT05OKTsKICAgICB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvcXQvUmVzb3VyY2VIYW5kbGVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNlSGFuZGxlUXQuY3BwCShyZXZpc2lvbiA2MzEwOCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9SZXNvdXJjZUhhbmRsZVF0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMwLDEwICsxMzAsMTAgQEAgYm9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQo
RnJhbWUqIGZyYW1lKQogICAgIGlmICghKGQtPm1fdXNlci5pc0VtcHR5KCkgfHwgZC0+bV9wYXNz
LmlzRW1wdHkoKSkpIHsKICAgICAgICAgLy8gSWYgY3JlZGVudGlhbHMgd2VyZSBzcGVjaWZpZWQg
Zm9yIHRoaXMgcmVxdWVzdCwgYWRkIHRoZW0gdG8gdGhlIHVybCwKICAgICAgICAgLy8gc28gdGhh
dCB0aGV5IHdpbGwgYmUgcGFzc2VkIHRvIFFOZXR3b3JrUmVxdWVzdC4KLSAgICAgICAgS1VSTCB1
cmxXaXRoQ3JlZGVudGlhbHMoZC0+bV9yZXF1ZXN0LnVybCgpKTsKKyAgICAgICAgS1VSTCB1cmxX
aXRoQ3JlZGVudGlhbHMoZmlyc3RSZXF1ZXN0KCkudXJsKCkpOwogICAgICAgICB1cmxXaXRoQ3Jl
ZGVudGlhbHMuc2V0VXNlcihkLT5tX3VzZXIpOwogICAgICAgICB1cmxXaXRoQ3JlZGVudGlhbHMu
c2V0UGFzcyhkLT5tX3Bhc3MpOwotICAgICAgICBkLT5tX3JlcXVlc3Quc2V0VVJMKHVybFdpdGhD
cmVkZW50aWFscyk7CisgICAgICAgIGQtPm1fZmlyc3RSZXF1ZXN0LnNldFVSTCh1cmxXaXRoQ3Jl
ZGVudGlhbHMpOwogICAgIH0KIAogICAgIGdldEludGVybmFsKCktPm1fZnJhbWUgPSBzdGF0aWNf
Y2FzdDxGcmFtZUxvYWRlckNsaWVudFF0Kj4oZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSktPndl
YkZyYW1lKCk7CkBAIC0xOTUsMTAgKzE5NSwxMCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpsb2Fk
UmVzb3VyY2VTeW5jaHJvCiAgICAgaWYgKCEoZC0+bV91c2VyLmlzRW1wdHkoKSB8fCBkLT5tX3Bh
c3MuaXNFbXB0eSgpKSkgewogICAgICAgICAvLyBJZiBjcmVkZW50aWFscyB3ZXJlIHNwZWNpZmll
ZCBmb3IgdGhpcyByZXF1ZXN0LCBhZGQgdGhlbSB0byB0aGUgdXJsLAogICAgICAgICAvLyBzbyB0
aGF0IHRoZXkgd2lsbCBiZSBwYXNzZWQgdG8gUU5ldHdvcmtSZXF1ZXN0LgotICAgICAgICBLVVJM
IHVybFdpdGhDcmVkZW50aWFscyhkLT5tX3JlcXVlc3QudXJsKCkpOworICAgICAgICBLVVJMIHVy
bFdpdGhDcmVkZW50aWFscyhkLT5tX2ZpcnN0UmVxdWVzdC51cmwoKSk7CiAgICAgICAgIHVybFdp
dGhDcmVkZW50aWFscy5zZXRVc2VyKGQtPm1fdXNlcik7CiAgICAgICAgIHVybFdpdGhDcmVkZW50
aWFscy5zZXRQYXNzKGQtPm1fcGFzcyk7Ci0gICAgICAgIGQtPm1fcmVxdWVzdC5zZXRVUkwodXJs
V2l0aENyZWRlbnRpYWxzKTsKKyAgICAgICAgZC0+bV9maXJzdFJlcXVlc3Quc2V0VVJMKHVybFdp
dGhDcmVkZW50aWFscyk7CiAgICAgfQogICAgIGQtPm1fZnJhbWUgPSBzdGF0aWNfY2FzdDxGcmFt
ZUxvYWRlckNsaWVudFF0Kj4oZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSktPndlYkZyYW1lKCk7
CiAgICAgZC0+bV9qb2IgPSBuZXcgUU5ldHdvcmtSZXBseUhhbmRsZXIoaGFuZGxlLmdldCgpLCBR
TmV0d29ya1JlcGx5SGFuZGxlcjo6TG9hZE5vcm1hbCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAJKHJldmlzaW9u
IDYzMTA4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVT
b3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDkgKzE4OCw5IEBAIHN0YXRpYyB2b2lkIHJl
c3RhcnRlZENhbGxiYWNrKFNvdXBNZXNzYWcKICAgICBjaGFyKiB1cmkgPSBzb3VwX3VyaV90b19z
dHJpbmcoc291cF9tZXNzYWdlX2dldF91cmkobXNnKSwgZmFsc2UpOwogICAgIFN0cmluZyBsb2Nh
dGlvbiA9IFN0cmluZyh1cmkpOwogICAgIGdfZnJlZSh1cmkpOwotICAgIEtVUkwgbmV3VVJMID0g
S1VSTChoYW5kbGUtPnJlcXVlc3QoKS51cmwoKSwgbG9jYXRpb24pOworICAgIEtVUkwgbmV3VVJM
ID0gS1VSTChoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLCBsb2NhdGlvbik7CiAKLSAgICBS
ZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCA9IGhhbmRsZS0+cmVxdWVzdCgpOworICAgIFJlc291cmNl
UmVxdWVzdCByZXF1ZXN0ID0gaGFuZGxlLT5maXJzdFJlcXVlc3QoKTsKICAgICBSZXNvdXJjZVJl
c3BvbnNlIHJlc3BvbnNlOwogICAgIHJlcXVlc3Quc2V0VVJMKG5ld1VSTCk7CiAgICAgcmVxdWVz
dC5zZXRIVFRQTWV0aG9kKG1zZy0+bWV0aG9kKTsKQEAgLTM1NCw3ICszNTQsNyBAQCBzdGF0aWMg
Z2Jvb2xlYW4gcGFyc2VEYXRhVXJsKGdwb2ludGVyIGNhCiAgICAgaWYgKCFjbGllbnQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIFN0cmluZyB1cmwgPSBoYW5kbGUtPnJlcXVlc3QoKS51
cmwoKS5zdHJpbmcoKTsKKyAgICBTdHJpbmcgdXJsID0gaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51
cmwoKS5zdHJpbmcoKTsKICAgICBBU1NFUlQodXJsLnN0YXJ0c1dpdGgoImRhdGE6IiwgZmFsc2Up
KTsKIAogICAgIGludCBpbmRleCA9IHVybC5maW5kKCcsJyk7CkBAIC0zNzcsNyArMzc3LDcgQEAg
c3RhdGljIGdib29sZWFuIHBhcnNlRGF0YVVybChncG9pbnRlciBjYQogICAgIFN0cmluZyBjaGFy
c2V0ID0gZXh0cmFjdENoYXJzZXRGcm9tTWVkaWFUeXBlKG1lZGlhVHlwZSk7CiAKICAgICBSZXNv
dXJjZVJlc3BvbnNlIHJlc3BvbnNlOwotICAgIHJlc3BvbnNlLnNldFVSTChoYW5kbGUtPnJlcXVl
c3QoKS51cmwoKSk7CisgICAgcmVzcG9uc2Uuc2V0VVJMKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCku
dXJsKCkpOwogICAgIHJlc3BvbnNlLnNldE1pbWVUeXBlKG1pbWVUeXBlKTsKIAogICAgIGlmIChp
c0Jhc2U2NCkgewpAQCAtNDc4LDcgKzQ3OCw3IEBAIHN0YXRpYyBib29sIHN0YXJ0SHR0cChSZXNv
dXJjZUhhbmRsZSogaGEKIAogICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUt
PmdldEludGVybmFsKCk7CiAKLSAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChoYW5kbGUtPnJl
cXVlc3QoKSk7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoaGFuZGxlLT5maXJzdFJlcXVl
c3QoKSk7CiAgICAgS1VSTCB1cmwocmVxdWVzdC51cmwoKSk7CiAgICAgdXJsLnJlbW92ZUZyYWdt
ZW50SWRlbnRpZmllcigpOwogICAgIHJlcXVlc3Quc2V0VVJMKHVybCk7CkBAIC01MDQsNyArNTA0
LDcgQEAgc3RhdGljIGJvb2wgc3RhcnRIdHRwKFJlc291cmNlSGFuZGxlKiBoYQogI2VuZGlmCiAg
ICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9tc2cpLCAicmVzb3VyY2VIYW5kbGUi
LCByZWludGVycHJldF9jYXN0PHZvaWQqPihoYW5kbGUpKTsKIAotICAgIEZvcm1EYXRhKiBodHRw
Qm9keSA9IGQtPm1fcmVxdWVzdC5odHRwQm9keSgpOworICAgIEZvcm1EYXRhKiBodHRwQm9keSA9
IGZpcnN0UmVxdWVzdCgpLmh0dHBCb2R5KCk7CiAgICAgaWYgKGh0dHBCb2R5ICYmICFodHRwQm9k
eS0+aXNFbXB0eSgpKSB7CiAgICAgICAgIHNpemVfdCBudW1FbGVtZW50cyA9IGh0dHBCb2R5LT5l
bGVtZW50cygpLnNpemUoKTsKIApAQCAtNTEyLDcgKzUxMiw3IEBAIHN0YXRpYyBib29sIHN0YXJ0
SHR0cChSZXNvdXJjZUhhbmRsZSogaGEKICAgICAgICAgaWYgKG51bUVsZW1lbnRzIDwgMikgewog
ICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJvZHk7CiAgICAgICAgICAgICBodHRwQm9keS0+Zmxh
dHRlbihib2R5KTsKLSAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfcmVxdWVzdChkLT5tX21z
ZywgZC0+bV9yZXF1ZXN0Lmh0dHBDb250ZW50VHlwZSgpLnV0ZjgoKS5kYXRhKCksCisgICAgICAg
ICAgICBzb3VwX21lc3NhZ2Vfc2V0X3JlcXVlc3QoZC0+bV9tc2csIGZpcnN0UmVxdWVzdCgpLmh0
dHBDb250ZW50VHlwZSgpLnV0ZjgoKS5kYXRhKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU09VUF9NRU1PUllfQ09QWSwgYm9keS5kYXRhKCksIGJvZHkuc2l6ZSgpKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8qCkBAIC01OTAsNyArNTkwLDcgQEAgYm9v
bCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoRnJhbWUqIGZyYW1lKQogICAgIGlmIChmcmFtZSAmJiAh
ZnJhbWUtPnBhZ2UoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgS1VSTCB1cmwgPSBy
ZXF1ZXN0KCkudXJsKCk7CisgICAgS1VSTCB1cmwgPSBmaXJzdFJlcXVlc3QoKS51cmwoKTsKICAg
ICBTdHJpbmcgdXJsU3RyaW5nID0gdXJsLnN0cmluZygpOwogICAgIFN0cmluZyBwcm90b2NvbCA9
IHVybC5wcm90b2NvbCgpOwogCkBAIC04ODksNyArODg5LDcgQEAgc3RhdGljIGJvb2wgc3RhcnRH
aW8oUmVzb3VyY2VIYW5kbGUqIGhhbgogCiAgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9
IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKIAotICAgIGlmIChoYW5kbGUtPnJlcXVlc3QoKS5odHRw
TWV0aG9kKCkgIT0gIkdFVCIgJiYgaGFuZGxlLT5yZXF1ZXN0KCkuaHR0cE1ldGhvZCgpICE9ICJQ
T1NUIikKKyAgICBpZiAoaGFuZGxlLT5maXJzdFJlcXVlc3QoKS5odHRwTWV0aG9kKCkgIT0gIkdF
VCIgJiYgaGFuZGxlLT5maXJzdFJlcXVlc3QoKS5odHRwTWV0aG9kKCkgIT0gIlBPU1QiKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBHSU8gZG9lc24ndCBrbm93IGhvdyB0byBoYW5k
bGUgcmVmcyBhbmQgcXVlcmllcywgc28gcmVtb3ZlIHRoZW0KSW5kZXg6IFdlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2
aXNpb24gNjMyNTEpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDctMTMgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBh
cHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyMjAxCisgICAgICAg
IFVzZSBSZXNvdXJjZUhhbmRsZSBvYmplY3QgZm9yIHN5bmNocm9ub3VzIGxvYWRpbmcKKworICAg
ICAgICAqIHNyYy9SZXNvdXJjZUhhbmRsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6cmVxdWVzdCk6CisgICAgICAgIFRoaXMgbWV0aG9kIGlzIG5vIGxvbmdlciBjb25z
dCBpbiBjcm9zcy1wbGF0Zm9ybSBjb2RlLCBhbmQgaXMgY2FsbGVkIGZpcnN0UmVxdWVzdC4KKwog
MjAxMC0wNy0xMyAgQWxiZXJ0IEouIFdvbmcgIDxhandvbmdAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIGJ1aWxkIGZpeC4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvUmVz
b3VyY2VIYW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvUmVzb3Vy
Y2VIYW5kbGUuY3BwCShyZXZpc2lvbiA2MzEwOCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvUmVz
b3VyY2VIYW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjYsNyArMjI2LDcgQEAgUGFzc1Jl
ZlB0cjxSZXNvdXJjZUhhbmRsZT4gUmVzb3VyY2VIYW5kbAogICAgIHJldHVybiAwOwogfQogCi1j
b25zdCBSZXNvdXJjZVJlcXVlc3QmIFJlc291cmNlSGFuZGxlOjpyZXF1ZXN0KCkgY29uc3QKK1Jl
c291cmNlUmVxdWVzdCYgUmVzb3VyY2VIYW5kbGU6OmZpcnN0UmVxdWVzdCgpCiB7CiAgICAgcmV0
dXJuIGQtPm1fcmVxdWVzdDsKIH0K
</data>
<flag name="review"
          id="49490"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>