<?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>139987</bug_id>
          
          <creation_ts>2014-12-29 09:34:12 -0800</creation_ts>
          <short_desc>Move Pasteboard code out of WebProcessPool and into its own singleton class</short_desc>
          <delta_ts>2014-12-29 10:23:45 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>mkwst</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1058097</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-12-29 09:34:12 -0800</bug_when>
    <thetext>Move Pasteboard code out of WebProcessPool and into its own singleton class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058099</commentid>
    <comment_count>1</comment_count>
      <attachid>243797</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-12-29 09:37:00 -0800</bug_when>
    <thetext>Created attachment 243797
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058101</commentid>
    <comment_count>2</comment_count>
      <attachid>243797</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-12-29 09:47:38 -0800</bug_when>
    <thetext>Comment on attachment 243797
Patch

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

&gt; Source/WebKit2/Shared/WebPasteboardProxy.cpp:40
&gt; +    static WebPasteboardProxy* proxy;
&gt; +    static dispatch_once_t once;
&gt; +    dispatch_once(&amp;once, ^{
&gt; +        proxy = new WebPasteboardProxy;
&gt; +    });

You can use LazyNeverDestroyed here.

&gt; Source/WebKit2/Shared/WebPasteboardProxy.messages.in:57
&gt; +#if !PLATFORM(COCOA)
&gt; +    // FIXME: This a dummy message, to avoid breaking the build for platforms that don&apos;t require
&gt; +    // any synchronous messages, and should be removed when &lt;rdar://problem/8775115&gt; is fixed.
&gt; +    Dummy() -&gt; (bool dummyReturn)
&gt; +#endif

I don&apos;t think this is needed.

&gt; Source/WebKit2/UIProcess/WebProcessPool.cpp:-1169
&gt; -    if (decoder.messageReceiverName() == Messages::WebProcessPool::messageReceiverName()) {
&gt; -        didReceiveSyncWebProcessPoolMessage(connection, decoder, replyEncoder);
&gt; -        return;
&gt; -    }

I think we stil need this for now since I moved the message handling code to WebProcessPool.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058106</commentid>
    <comment_count>3</comment_count>
      <attachid>243799</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-12-29 10:19:57 -0800</bug_when>
    <thetext>Created attachment 243799
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058107</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-12-29 10:23:45 -0800</bug_when>
    <thetext>Committed r177794: &lt;http://trac.webkit.org/changeset/177794&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243797</attachid>
            <date>2014-12-29 09:37:00 -0800</date>
            <delta_ts>2014-12-29 10:19:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139987-20141229093701.patch</filename>
            <type>text/plain</type>
            <size>60597</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3Nzc5MSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDE0LTEyLTI5ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBQYXN0ZWJvYXJkIGNvZGUgb3V0
IG9mIFdlYlByb2Nlc3NQb29sIGFuZCBpbnRvIGl0cyBvd24gc2luZ2xldG9uIGNsYXNzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzk5ODcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIERlcml2ZWRTb3Vy
Y2VzLm1ha2U6CisgICAgICAgICogU2hhcmVkL1dlYlBhc3RlYm9hcmRQcm94eS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OnNoYXJlZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6V2ViUGFzdGVib2FyZFByb3h5KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjphZGRXZWJQcm9jZXNzUHJveHkpOgorICAg
ICAgICAqIFNoYXJlZC9XZWJQYXN0ZWJvYXJkUHJveHkuaDogQWRkZWQuCisgICAgICAgICogU2hh
cmVkL1dlYlBhc3RlYm9hcmRQcm94eS5tZXNzYWdlcy5pbjogQWRkZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL0NvY29hL1dlYlBhc3RlYm9hcmRQcm94eUNvY29hLm1tOiBBZGRlZC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OmR1bW15KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wubWVzc2FnZXMuaW46CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQcm94eTo6V2ViUHJvY2Vzc1Byb3h5KToKKyAgICAgICAgKiBXZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9Q
REZQbHVnaW4ubW06CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6d3JpdGVJdGVtc1RvUGFz
dGVib2FyZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9y
bVN0cmF0ZWdpZXMuY3BwOgorCiAyMDE0LTEyLTI4ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNj
YUBhcHBsZS5jb20+CiAKICAgICAgICAgVHJhbnNmb3JtIG5lc3RlZCBvYmplY3RzIGluc2lkZSBh
cnJheXMKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMubWFrZQkocmV2aXNpb24gMTc3Nzkx
KQorKysgU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpA
QCAtMTI5LDYgKzEyOSw3IEBAIE1FU1NBR0VfUkVDRUlWRVJTID0gXAogICAgIFdlYlBhZ2UgXAog
ICAgIFdlYlBhZ2VHcm91cFByb3h5IFwKICAgICBXZWJQYWdlUHJveHkgXAorICAgIFdlYlBhc3Rl
Ym9hcmRQcm94eSBcCiAgICAgV2ViUHJvY2VzcyBcCiAgICAgV2ViUHJvY2Vzc0Nvbm5lY3Rpb24g
XAogICAgIFdlYlByb2Nlc3NQb29sIFwKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQ
YXN0ZWJvYXJkUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJQYXN0ZWJvYXJkUHJveHkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYlBhc3RlYm9hcmRQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJQYXN0ZWJv
YXJkUHJveHkuaCIKKworI2luY2x1ZGUgIldlYlBhc3RlYm9hcmRQcm94eU1lc3NhZ2VzLmgiCisj
aW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJQ
YXN0ZWJvYXJkUHJveHkmIFdlYlBhc3RlYm9hcmRQcm94eTo6c2hhcmVkKCkKK3sKKyAgICBzdGF0
aWMgV2ViUGFzdGVib2FyZFByb3h5KiBwcm94eTsKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90
IG9uY2U7CisgICAgZGlzcGF0Y2hfb25jZSgmb25jZSwgXnsKKyAgICAgICAgcHJveHkgPSBuZXcg
V2ViUGFzdGVib2FyZFByb3h5OworICAgIH0pOworICAgIHJldHVybiAqcHJveHk7Cit9CisKK1dl
YlBhc3RlYm9hcmRQcm94eTo6V2ViUGFzdGVib2FyZFByb3h5KCkKK3sKK30KKwordm9pZCBXZWJQ
YXN0ZWJvYXJkUHJveHk6OmFkZFdlYlByb2Nlc3NQcm94eShXZWJQcm9jZXNzUHJveHkmIHdlYlBy
b2Nlc3NQcm94eSkKK3sKKyAgICAvLyBGSVhNRTogQ2FuIHdlIGhhbmRsZSBhbGwgb2YgdGhlc2Ug
b24gYSBiYWNrZ3JvdW5kIHF1ZXVlPworICAgIHdlYlByb2Nlc3NQcm94eS5hZGRNZXNzYWdlUmVj
ZWl2ZXIoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
LCAqdGhpcyk7Cit9CisKKy8vIEZJWE1FOiBUaGlzIGEgZHVtbXkgbWVzc2FnZSwgdG8gYXZvaWQg
YnJlYWtpbmcgdGhlIGJ1aWxkIGZvciBwbGF0Zm9ybXMgdGhhdCBkb24ndCByZXF1aXJlCisvLyBh
bnkgc3luY2hyb25vdXMgbWVzc2FnZXMsIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCB3aGVuIDxyZGFy
Oi8vcHJvYmxlbS84Nzc1MTE1PiBpcyBmaXhlZC4KK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojpk
dW1teShib29sJikKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvV2ViUGFzdGVib2FyZFByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvU2hhcmVkL1dlYlBhc3RlYm9hcmRQcm94eS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYlBhc3RlYm9hcmRQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlBhc3RlYm9hcmRQcm94eV9o
CisjZGVmaW5lIFdlYlBhc3RlYm9hcmRQcm94eV9oCisKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2
ZXIuaCIKKyNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3Mg
Q29sb3I7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQcm9jZXNzUHJveHk7
CisKK2NsYXNzIFdlYlBhc3RlYm9hcmRQcm94eSA6IHB1YmxpYyBJUEM6Ok1lc3NhZ2VSZWNlaXZl
ciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViUGFzdGVib2FyZFByb3h5KTsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgV2ViUGFzdGVib2FyZFByb3h5JiBzaGFyZWQoKTsKKworICAgIHZvaWQg
YWRkV2ViUHJvY2Vzc1Byb3h5KFdlYlByb2Nlc3NQcm94eSYpOworCitwcml2YXRlOgorICAgIFdl
YlBhc3RlYm9hcmRQcm94eSgpOworCisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiosIElQQzo6TWVzc2FnZURlY29kZXImKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiosIElQQzo6
TWVzc2FnZURlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpNZXNzYWdlRW5jb2Rlcj4mKSBv
dmVycmlkZTsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICB2b2lkIHdyaXRlV2ViQ29udGVudFRv
UGFzdGVib2FyZChjb25zdCBXZWJDb3JlOjpQYXN0ZWJvYXJkV2ViQ29udGVudCYpOworICAgIHZv
aWQgd3JpdGVJbWFnZVRvUGFzdGVib2FyZChjb25zdCBXZWJDb3JlOjpQYXN0ZWJvYXJkSW1hZ2Um
KTsKKyAgICB2b2lkIHdyaXRlU3RyaW5nVG9QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZFR5cGUsIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgcmVhZFN0cmluZ0Zyb21QYXN0ZWJv
YXJkKHVpbnQ2NF90IGluZGV4LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBXVEY6OlN0
cmluZyYpOworICAgIHZvaWQgcmVhZFVSTEZyb21QYXN0ZWJvYXJkKHVpbnQ2NF90IGluZGV4LCBj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBTdHJpbmcmKTsKKyAgICB2b2lkIHJlYWRCdWZm
ZXJGcm9tUGFzdGVib2FyZCh1aW50NjRfdCBpbmRleCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
VHlwZSwgU2hhcmVkTWVtb3J5OjpIYW5kbGUmLCB1aW50NjRfdCYgc2l6ZSk7CisgICAgdm9pZCBn
ZXRQYXN0ZWJvYXJkSXRlbXNDb3VudCh1aW50NjRfdCYgaXRlbXNDb3VudCk7CisjZW5kaWYKKyNp
ZiBQTEFURk9STShDT0NPQSkKKyAgICB2b2lkIGdldFBhc3RlYm9hcmRUeXBlcyhjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzKTsKKyAg
ICB2b2lkIGdldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIFZlY3RvcjxTdHJpbmc+JiBw
YXRobmFtZXMpOworICAgIHZvaWQgZ2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGUoY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgU3RyaW5n
Jik7CisgICAgdm9pZCBnZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBTaGFyZWRNZW1vcnk6
OkhhbmRsZSYsIHVpbnQ2NF90JiBzaXplKTsKKyAgICB2b2lkIHBhc3RlYm9hcmRDb3B5KGNvbnN0
IFN0cmluZyYgZnJvbVBhc3RlYm9hcmQsIGNvbnN0IFN0cmluZyYgdG9QYXN0ZWJvYXJkLCB1aW50
NjRfdCYgbmV3Q2hhbmdlQ291bnQpOworICAgIHZvaWQgZ2V0UGFzdGVib2FyZENoYW5nZUNvdW50
KGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIHVpbnQ2NF90JiBjaGFuZ2VDb3VudCk7Cisg
ICAgdm9pZCBnZXRQYXN0ZWJvYXJkVW5pcXVlTmFtZShTdHJpbmcmIHBhc3RlYm9hcmROYW1lKTsK
KyAgICB2b2lkIGdldFBhc3RlYm9hcmRDb2xvcihjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
LCBXZWJDb3JlOjpDb2xvciYpOworICAgIHZvaWQgZ2V0UGFzdGVib2FyZFVSTChjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lLCBXVEY6OlN0cmluZyYpOworICAgIHZvaWQgYWRkUGFzdGVib2Fy
ZFR5cGVzKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXN0ZWJvYXJkVHlwZXMsIHVpbnQ2NF90JiBuZXdDaGFuZ2VDb3VudCk7CisgICAgdm9pZCBz
ZXRQYXN0ZWJvYXJkVHlwZXMoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgVmVj
dG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgdWludDY0X3QmIG5ld0NoYW5nZUNvdW50KTsK
KyAgICB2b2lkIHNldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwYXRobmFtZXMsIHVpbnQ2NF90JiBuZXdDaGFuZ2VDb3VudCk7CisgICAgdm9pZCBz
ZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmLCB1aW50NjRfdCYgbmV3
Q2hhbmdlQ291bnQpOworICAgIHZvaWQgc2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUoY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29u
c3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUmLCB1aW50NjRfdCBzaXplLCB1aW50NjRfdCYgbmV3Q2hh
bmdlQ291bnQpOworI2VuZGlmCisKKyAgICAvLyBGSVhNRTogVGhpcyBhIGR1bW15IG1lc3NhZ2Us
IHRvIGF2b2lkIGJyZWFraW5nIHRoZSBidWlsZCBmb3IgcGxhdGZvcm1zIHRoYXQgZG9uJ3QgcmVx
dWlyZQorICAgIC8vIGFueSBzeW5jaHJvbm91cyBtZXNzYWdlcywgYW5kIHNob3VsZCBiZSByZW1v
dmVkIHdoZW4gPHJkYXI6Ly9wcm9ibGVtLzg3NzUxMTU+IGlzIGZpeGVkLgorICAgIHZvaWQgZHVt
bXkoYm9vbCYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJQ
YXN0ZWJvYXJkUHJveHlfaApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlBhc3RlYm9h
cmRQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
V2ViUGFzdGVib2FyZFByb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYlBhc3RlYm9hcmRQcm94eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDU5IEBACisjIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoK
KyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKK21lc3NhZ2VzIC0+IFdlYlBhc3RlYm9hcmRQcm94eSB7CisKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgV3JpdGVXZWJDb250ZW50VG9QYXN0ZWJvYXJkKHN0cnVjdCBXZWJDb3JlOjpQYXN0ZWJv
YXJkV2ViQ29udGVudCBjb250ZW50KQorICAgIFdyaXRlSW1hZ2VUb1Bhc3RlYm9hcmQoc3RydWN0
IFdlYkNvcmU6OlBhc3RlYm9hcmRJbWFnZSBwYXN0ZWJvYXJkSW1hZ2UpCisgICAgV3JpdGVTdHJp
bmdUb1Bhc3RlYm9hcmQoU3RyaW5nIHBhc3RlYm9hcmRUeXBlLCBTdHJpbmcgdGV4dCkgCisgICAg
UmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKHVpbnQ2NF90IGluZGV4LCBTdHJpbmcgcGFzdGVib2Fy
ZFR5cGUpIC0+IChTdHJpbmcgc3RyaW5nKQorICAgIFJlYWRVUkxGcm9tUGFzdGVib2FyZCh1aW50
NjRfdCBpbmRleCwgU3RyaW5nIHBhc3RlYm9hcmRUeXBlKSAtPiAoU3RyaW5nIHN0cmluZykKKyAg
ICBSZWFkQnVmZmVyRnJvbVBhc3RlYm9hcmQodWludDY0X3QgaW5kZXgsIFN0cmluZyBwYXN0ZWJv
YXJkVHlwZSkgLT4gKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlLCB1aW50NjRf
dCBzaXplKQorICAgIEdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCkgLT4gKHVpbnQ2NF90IGl0ZW1z
Q291bnQpCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgICMgUGFzdGVib2FyZCBt
ZXNzYWdlcy4KKyAgICBHZXRQYXN0ZWJvYXJkVHlwZXMoU3RyaW5nIHBhc3RlYm9hcmROYW1lKSAt
PiAoVmVjdG9yPFN0cmluZz4gdHlwZXMpCisgICAgR2V0UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5
cGUoU3RyaW5nIHBhc3RlYm9hcmROYW1lLCBTdHJpbmcgcGFzdGVib2FyZFR5cGUpIC0+IChWZWN0
b3I8U3RyaW5nPiBwYXRobmFtZXMpCisgICAgR2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGUoU3Ry
aW5nIHBhc3RlYm9hcmROYW1lLCBTdHJpbmcgcGFzdGVib2FyZFR5cGUpIC0+IChTdHJpbmcgc3Ry
aW5nKQorICAgIEdldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKFN0cmluZyBwYXN0ZWJvYXJkTmFt
ZSwgU3RyaW5nIHBhc3RlYm9hcmRUeXBlKSAtPiAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRs
ZSBoYW5kbGUsIHVpbnQ2NF90IHNpemUpCisgICAgUGFzdGVib2FyZENvcHkoU3RyaW5nIGZyb21Q
YXN0ZWJvYXJkLCBTdHJpbmcgdG9QYXN0ZWJvYXJkKSAtPiAodWludDY0X3QgY2hhbmdlQ291bnQp
CisgICAgR2V0UGFzdGVib2FyZENoYW5nZUNvdW50KFN0cmluZyBwYXN0ZWJvYXJkTmFtZSkgLT4g
KHVpbnQ2NF90IGNoYW5nZUNvdW50KQorICAgIEdldFBhc3RlYm9hcmRVbmlxdWVOYW1lKCkgLT4g
KFN0cmluZyBwYXN0ZWJvYXJkTmFtZSkKKyAgICBHZXRQYXN0ZWJvYXJkQ29sb3IoU3RyaW5nIHBh
c3RlYm9hcmROYW1lKSAtPiAoV2ViQ29yZTo6Q29sb3IgY29sb3IpCisgICAgR2V0UGFzdGVib2Fy
ZFVSTChTdHJpbmcgcGFzdGVib2FyZE5hbWUpIC0+IChTdHJpbmcgdXJsU3RyaW5nKQorICAgIEFk
ZFBhc3RlYm9hcmRUeXBlcyhTdHJpbmcgcGFzdGVib2FyZE5hbWUsIFZlY3RvcjxTdHJpbmc+IHBh
c3RlYm9hcmRUeXBlcykgLT4gKHVpbnQ2NF90IGNoYW5nZUNvdW50KQorICAgIFNldFBhc3RlYm9h
cmRUeXBlcyhTdHJpbmcgcGFzdGVib2FyZE5hbWUsIFZlY3RvcjxTdHJpbmc+IHBhc3RlYm9hcmRU
eXBlcykgLT4gKHVpbnQ2NF90IGNoYW5nZUNvdW50KQorICAgIFNldFBhc3RlYm9hcmRQYXRobmFt
ZXNGb3JUeXBlKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgU3RyaW5nIHBhc3RlYm9hcmRUeXBlLCBW
ZWN0b3I8U3RyaW5nPiBwYXRobmFtZXMpIC0+ICh1aW50NjRfdCBjaGFuZ2VDb3VudCkKKyAgICBT
ZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShTdHJpbmcgcGFzdGVib2FyZE5hbWUsIFN0cmluZyBw
YXN0ZWJvYXJkVHlwZSwgU3RyaW5nIHN0cmluZykgLT4gKHVpbnQ2NF90IGNoYW5nZUNvdW50KQor
ICAgIFNldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgU3Ry
aW5nIHBhc3RlYm9hcmRUeXBlLCBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZSwg
dWludDY0X3Qgc2l6ZSkgLT4gKHVpbnQ2NF90IGNoYW5nZUNvdW50KQorI2VuZGlmCisKKyNpZiAh
UExBVEZPUk0oQ09DT0EpCisgICAgLy8gRklYTUU6IFRoaXMgYSBkdW1teSBtZXNzYWdlLCB0byBh
dm9pZCBicmVha2luZyB0aGUgYnVpbGQgZm9yIHBsYXRmb3JtcyB0aGF0IGRvbid0IHJlcXVpcmUK
KyAgICAvLyBhbnkgc3luY2hyb25vdXMgbWVzc2FnZXMsIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCB3
aGVuIDxyZGFyOi8vcHJvYmxlbS84Nzc1MTE1PiBpcyBmaXhlZC4KKyAgICBEdW1teSgpIC0+IChi
b29sIGR1bW15UmV0dXJuKQorI2VuZGlmCisKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAkocmV2aXNpb24gMTc3NzkxKQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2
MywxMSArMTE2Myw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmRpZFJlY2VpdmVNZXNzYWdlKEkK
IAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVj
dGlvbiogY29ubmVjdGlvbiwgSVBDOjpNZXNzYWdlRGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlx
dWVfcHRyPElQQzo6TWVzc2FnZUVuY29kZXI+JiByZXBseUVuY29kZXIpCiB7Ci0gICAgaWYgKGRl
Y29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7Ci0gICAgICAgIGRpZFJlY2VpdmVTeW5jV2ViUHJvY2Vz
c1Bvb2xNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkg
PT0gV2ViQ29udGV4dExlZ2FjeU1lc3NhZ2VzOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkKICAgICAg
ICAgJiYgZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IFdlYkNvbnRleHRMZWdhY3lNZXNzYWdlczo6
cG9zdFN5bmNocm9ub3VzTWVzc2FnZU1lc3NhZ2VOYW1lKCkpIHsKICAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBwcm9iYWJseSBlbmNvZGUgc29tZXRoaW5nIGluIHRoZSBjYXNlIHRoYXQgdGhl
IGFyZ3VtZW50cyBkbyBub3QgZGVjb2RlIGNvcnJlY3RseS4KQEAgLTEzODAsMTIgKzEzNzUsNiBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZXF1ZXN0TmV0d29ya2luZ1N0CiAjZW5kaWYKIH0KIAot
I2lmICFQTEFURk9STShDT0NPQSkKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmR1bW15KGJvb2wmKQot
ewotfQotI2VuZGlmCi0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmRpZEdldFN0YXRpc3RpY3MoY29u
c3QgU3RhdGlzdGljc0RhdGEmIHN0YXRpc3RpY3NEYXRhLCB1aW50NjRfdCByZXF1ZXN0SUQpCiB7
CiAgICAgUmVmUHRyPFN0YXRpc3RpY3NSZXF1ZXN0PiByZXF1ZXN0ID0gbV9zdGF0aXN0aWNzUmVx
dWVzdHMudGFrZShyZXF1ZXN0SUQpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQb29sLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQb29sLmgJKHJldmlzaW9uIDE3Nzc5MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUG9vbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zODAsNDMgKzM4MCwxMCBA
QCBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0o
SU9TKQotICAgIHZvaWQgd3JpdGVXZWJDb250ZW50VG9QYXN0ZWJvYXJkKGNvbnN0IFdlYkNvcmU6
OlBhc3RlYm9hcmRXZWJDb250ZW50Jik7Ci0gICAgdm9pZCB3cml0ZUltYWdlVG9QYXN0ZWJvYXJk
KGNvbnN0IFdlYkNvcmU6OlBhc3RlYm9hcmRJbWFnZSYpOwotICAgIHZvaWQgd3JpdGVTdHJpbmdU
b1Bhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJik7
Ci0gICAgdm9pZCByZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQodWludDY0X3QgaW5kZXgsIGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIFdURjo6U3RyaW5nJik7Ci0gICAgdm9pZCByZWFkVVJM
RnJvbVBhc3RlYm9hcmQodWludDY0X3QgaW5kZXgsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5
cGUsIFN0cmluZyYpOwotICAgIHZvaWQgcmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJkKHVpbnQ2NF90
IGluZGV4LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBTaGFyZWRNZW1vcnk6OkhhbmRs
ZSYsIHVpbnQ2NF90JiBzaXplKTsKLSAgICB2b2lkIGdldFBhc3RlYm9hcmRJdGVtc0NvdW50KHVp
bnQ2NF90JiBpdGVtc0NvdW50KTsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHZv
aWQgZ2V0UGFzdGVib2FyZFR5cGVzKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIFZlY3Rv
cjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMpOwotICAgIHZvaWQgZ2V0UGFzdGVib2FyZFBhdGhu
YW1lc0ZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkVHlwZSwgVmVjdG9yPFN0cmluZz4mIHBhdGhuYW1lcyk7Ci0gICAgdm9pZCBnZXRQ
YXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBTdHJpbmcmKTsKLSAgICB2b2lkIGdldFBhc3RlYm9h
cmRCdWZmZXJGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZFR5cGUsIFNoYXJlZE1lbW9yeTo6SGFuZGxlJiwgdWludDY0X3QmIHNpemUp
OwotICAgIHZvaWQgcGFzdGVib2FyZENvcHkoY29uc3QgU3RyaW5nJiBmcm9tUGFzdGVib2FyZCwg
Y29uc3QgU3RyaW5nJiB0b1Bhc3RlYm9hcmQsIHVpbnQ2NF90JiBuZXdDaGFuZ2VDb3VudCk7Ci0g
ICAgdm9pZCBnZXRQYXN0ZWJvYXJkQ2hhbmdlQ291bnQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSwgdWludDY0X3QmIGNoYW5nZUNvdW50KTsKLSAgICB2b2lkIGdldFBhc3RlYm9hcmRVbmlx
dWVOYW1lKFN0cmluZyYgcGFzdGVib2FyZE5hbWUpOwotICAgIHZvaWQgZ2V0UGFzdGVib2FyZENv
bG9yKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIFdlYkNvcmU6OkNvbG9yJik7Ci0gICAg
dm9pZCBnZXRQYXN0ZWJvYXJkVVJMKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIFdURjo6
U3RyaW5nJik7Ci0gICAgdm9pZCBhZGRQYXN0ZWJvYXJkVHlwZXMoY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkTmFtZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgdWludDY0
X3QmIG5ld0NoYW5nZUNvdW50KTsKLSAgICB2b2lkIHNldFBhc3RlYm9hcmRUeXBlcyhjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5
cGVzLCB1aW50NjRfdCYgbmV3Q2hhbmdlQ291bnQpOwotICAgIHZvaWQgc2V0UGFzdGVib2FyZFBh
dGhuYW1lc0ZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhuYW1lcywgdWludDY0
X3QmIG5ld0NoYW5nZUNvdW50KTsKLSAgICB2b2lkIHNldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBl
KGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5
cGUsIGNvbnN0IFN0cmluZyYsIHVpbnQ2NF90JiBuZXdDaGFuZ2VDb3VudCk7Ci0gICAgdm9pZCBz
ZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYs
IHVpbnQ2NF90IHNpemUsIHVpbnQ2NF90JiBuZXdDaGFuZ2VDb3VudCk7Ci0jZW5kaWYKLQotI2lm
ICFQTEFURk9STShDT0NPQSkKLSAgICAvLyBGSVhNRTogVGhpcyBhIGR1bW15IG1lc3NhZ2UsIHRv
IGF2b2lkIGJyZWFraW5nIHRoZSBidWlsZCBmb3IgcGxhdGZvcm1zIHRoYXQgZG9uJ3QgcmVxdWly
ZQotICAgIC8vIGFueSBzeW5jaHJvbm91cyBtZXNzYWdlcywgYW5kIHNob3VsZCBiZSByZW1vdmVk
IHdoZW4gPHJkYXI6Ly9wcm9ibGVtLzg3NzUxMTU+IGlzIGZpeGVkLgotICAgIHZvaWQgZHVtbXko
Ym9vbCYpOwotI2VuZGlmCi0KICAgICB2b2lkIGRpZEdldFN0YXRpc3RpY3MoY29uc3QgU3RhdGlz
dGljc0RhdGEmLCB1aW50NjRfdCBjYWxsYmFja0lEKTsKIAogICAgIC8vIEltcGxlbWVudGVkIGlu
IGdlbmVyYXRlZCBXZWJQcm9jZXNzUG9vbE1lc3NhZ2VSZWNlaXZlci5jcHAKICAgICB2b2lkIGRp
ZFJlY2VpdmVXZWJQcm9jZXNzUG9vbE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uKiwgSVBDOjpNZXNz
YWdlRGVjb2RlciYpOwotICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNXZWJQcm9jZXNzUG9vbE1lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uKiwgSVBDOjpNZXNzYWdlRGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0
cjxJUEM6Ok1lc3NhZ2VFbmNvZGVyPiYpOwogCiAgICAgc3RhdGljIHZvaWQgbGFuZ3VhZ2VDaGFu
Z2VkKHZvaWQqIGNvbnRleHQpOwogICAgIHZvaWQgbGFuZ3VhZ2VDaGFuZ2VkKCk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wubWVzc2FnZXMuaW4KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLm1lc3NhZ2Vz
LmluCShyZXZpc2lvbiAxNzc3OTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Bvb2wubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTI0LDQwICsyNCw2IEBAIG1l
c3NhZ2VzIC0+IFdlYlByb2Nlc3NQb29sIExlZ2FjeVJlY2VpdmUKIAogICAgIERpZEdldFN0YXRp
c3RpY3Moc3RydWN0IFdlYktpdDo6U3RhdGlzdGljc0RhdGEgc3RhdGlzdGljc0RhdGEsIHVpbnQ2
NF90IGNhbGxiYWNrSUQpCiAKLSNpZiBQTEFURk9STShJT1MpCi0gICAgV3JpdGVXZWJDb250ZW50
VG9QYXN0ZWJvYXJkKHN0cnVjdCBXZWJDb3JlOjpQYXN0ZWJvYXJkV2ViQ29udGVudCBjb250ZW50
KQotICAgIFdyaXRlSW1hZ2VUb1Bhc3RlYm9hcmQoc3RydWN0IFdlYkNvcmU6OlBhc3RlYm9hcmRJ
bWFnZSBwYXN0ZWJvYXJkSW1hZ2UpCi0gICAgV3JpdGVTdHJpbmdUb1Bhc3RlYm9hcmQoU3RyaW5n
IHBhc3RlYm9hcmRUeXBlLCBTdHJpbmcgdGV4dCkgCi0gICAgUmVhZFN0cmluZ0Zyb21QYXN0ZWJv
YXJkKHVpbnQ2NF90IGluZGV4LCBTdHJpbmcgcGFzdGVib2FyZFR5cGUpIC0+IChTdHJpbmcgc3Ry
aW5nKQotICAgIFJlYWRVUkxGcm9tUGFzdGVib2FyZCh1aW50NjRfdCBpbmRleCwgU3RyaW5nIHBh
c3RlYm9hcmRUeXBlKSAtPiAoU3RyaW5nIHN0cmluZykKLSAgICBSZWFkQnVmZmVyRnJvbVBhc3Rl
Ym9hcmQodWludDY0X3QgaW5kZXgsIFN0cmluZyBwYXN0ZWJvYXJkVHlwZSkgLT4gKFdlYktpdDo6
U2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlLCB1aW50NjRfdCBzaXplKQotICAgIEdldFBhc3Rl
Ym9hcmRJdGVtc0NvdW50KCkgLT4gKHVpbnQ2NF90IGl0ZW1zQ291bnQpCi0jZW5kaWYKLQotI2lm
IFBMQVRGT1JNKENPQ09BKQotICAgICMgUGFzdGVib2FyZCBtZXNzYWdlcy4KLSAgICBHZXRQYXN0
ZWJvYXJkVHlwZXMoU3RyaW5nIHBhc3RlYm9hcmROYW1lKSAtPiAoVmVjdG9yPFN0cmluZz4gdHlw
ZXMpCi0gICAgR2V0UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5cGUoU3RyaW5nIHBhc3RlYm9hcmRO
YW1lLCBTdHJpbmcgcGFzdGVib2FyZFR5cGUpIC0+IChWZWN0b3I8U3RyaW5nPiBwYXRobmFtZXMp
Ci0gICAgR2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGUoU3RyaW5nIHBhc3RlYm9hcmROYW1lLCBT
dHJpbmcgcGFzdGVib2FyZFR5cGUpIC0+IChTdHJpbmcgc3RyaW5nKQotICAgIEdldFBhc3RlYm9h
cmRCdWZmZXJGb3JUeXBlKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgU3RyaW5nIHBhc3RlYm9hcmRU
eXBlKSAtPiAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGUsIHVpbnQ2NF90IHNp
emUpCi0gICAgUGFzdGVib2FyZENvcHkoU3RyaW5nIGZyb21QYXN0ZWJvYXJkLCBTdHJpbmcgdG9Q
YXN0ZWJvYXJkKSAtPiAodWludDY0X3QgY2hhbmdlQ291bnQpCi0gICAgR2V0UGFzdGVib2FyZENo
YW5nZUNvdW50KFN0cmluZyBwYXN0ZWJvYXJkTmFtZSkgLT4gKHVpbnQ2NF90IGNoYW5nZUNvdW50
KQotICAgIEdldFBhc3RlYm9hcmRVbmlxdWVOYW1lKCkgLT4gKFN0cmluZyBwYXN0ZWJvYXJkTmFt
ZSkKLSAgICBHZXRQYXN0ZWJvYXJkQ29sb3IoU3RyaW5nIHBhc3RlYm9hcmROYW1lKSAtPiAoV2Vi
Q29yZTo6Q29sb3IgY29sb3IpCi0gICAgR2V0UGFzdGVib2FyZFVSTChTdHJpbmcgcGFzdGVib2Fy
ZE5hbWUpIC0+IChTdHJpbmcgdXJsU3RyaW5nKQotICAgIEFkZFBhc3RlYm9hcmRUeXBlcyhTdHJp
bmcgcGFzdGVib2FyZE5hbWUsIFZlY3RvcjxTdHJpbmc+IHBhc3RlYm9hcmRUeXBlcykgLT4gKHVp
bnQ2NF90IGNoYW5nZUNvdW50KQotICAgIFNldFBhc3RlYm9hcmRUeXBlcyhTdHJpbmcgcGFzdGVi
b2FyZE5hbWUsIFZlY3RvcjxTdHJpbmc+IHBhc3RlYm9hcmRUeXBlcykgLT4gKHVpbnQ2NF90IGNo
YW5nZUNvdW50KQotICAgIFNldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlKFN0cmluZyBwYXN0
ZWJvYXJkTmFtZSwgU3RyaW5nIHBhc3RlYm9hcmRUeXBlLCBWZWN0b3I8U3RyaW5nPiBwYXRobmFt
ZXMpIC0+ICh1aW50NjRfdCBjaGFuZ2VDb3VudCkKLSAgICBTZXRQYXN0ZWJvYXJkU3RyaW5nRm9y
VHlwZShTdHJpbmcgcGFzdGVib2FyZE5hbWUsIFN0cmluZyBwYXN0ZWJvYXJkVHlwZSwgU3RyaW5n
IHN0cmluZykgLT4gKHVpbnQ2NF90IGNoYW5nZUNvdW50KQotICAgIFNldFBhc3RlYm9hcmRCdWZm
ZXJGb3JUeXBlKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgU3RyaW5nIHBhc3RlYm9hcmRUeXBlLCBX
ZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZSwgdWludDY0X3Qgc2l6ZSkgLT4gKHVp
bnQ2NF90IGNoYW5nZUNvdW50KQotI2VuZGlmCi0KLSNpZiAhUExBVEZPUk0oQ09DT0EpCi0gICAg
Ly8gRklYTUU6IFRoaXMgYSBkdW1teSBtZXNzYWdlLCB0byBhdm9pZCBicmVha2luZyB0aGUgYnVp
bGQgZm9yIHBsYXRmb3JtcyB0aGF0IGRvbid0IHJlcXVpcmUKLSAgICAvLyBhbnkgc3luY2hyb25v
dXMgbWVzc2FnZXMsIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCB3aGVuIDxyZGFyOi8vcHJvYmxlbS84
Nzc1MTE1PiBpcyBmaXhlZC4KLSAgICBEdW1teSgpIC0+IChib29sIGR1bW15UmV0dXJuKQotI2Vu
ZGlmCi0KICAgICAjIFBsdWctaW4gbWVzc2FnZXMuCiAgICAgdm9pZCBBZGRQbHVnSW5BdXRvU3Rh
cnRPcmlnaW5IYXNoKFN0cmluZyBwYWdlT3JpZ2luLCB1aW50MzJfdCBoYXNoLCBXZWJDb3JlOjpT
ZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIHZvaWQgUGx1Z0luRGlkUmVjZWl2ZVVzZXJJbnRlcmFj
dGlvbih1aW50MzJfdCBoYXNoLCBXZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHJldmlzaW9u
IDE3Nzc5MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNyArMzcsMTggQEAKICNpbmNsdWRlICJUZXh0Q2hlY2tl
ci5oIgogI2luY2x1ZGUgIlRleHRDaGVja2VyU3RhdGUuaCIKICNpbmNsdWRlICJVc2VyRGF0YS5o
IgotI2luY2x1ZGUgIldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmgiCiAjaW5jbHVkZSAi
V2ViQmFja0ZvcndhcmRMaXN0SXRlbS5oIgogI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5Lmgi
CiAjaW5jbHVkZSAiV2ViTmF2aWdhdGlvbkRhdGFTdG9yZS5oIgogI2luY2x1ZGUgIldlYk5vdGlm
aWNhdGlvbk1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgogI2luY2x1
ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlBhc3RlYm9hcmRQcm94eS5oIgogI2lu
Y2x1ZGUgIldlYlBsdWdpblNpdGVEYXRhTWFuYWdlci5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NN
ZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCiAjaW5jbHVkZSAiV2ViUHJv
Y2Vzc1Byb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQ
cm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvU3VkZGVuVGVybWluYXRpb24uaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1VSTC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC05OCw2ICs5OSw4IEBAIFdl
YlByb2Nlc3NQcm94eTo6V2ViUHJvY2Vzc1Byb3h5KFdlYlByb2MKICAgICAsIG1fbnVtYmVyT2ZU
aW1lc1N1ZGRlblRlcm1pbmF0aW9uV2FzRGlzYWJsZWQoMCkKICAgICAsIG1fdGhyb3R0bGVyKHN0
ZDo6bWFrZV91bmlxdWU8UHJvY2Vzc1Rocm90dGxlcj4odGhpcykpCiB7CisgICAgV2ViUGFzdGVi
b2FyZFByb3h5OjpzaGFyZWQoKS5hZGRXZWJQcm9jZXNzUHJveHkoKnRoaXMpOworCiAgICAgY29u
bmVjdCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUGFz
dGVib2FyZFByb3h5Q29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0NvY29hL1dlYlBhc3RlYm9hcmRQcm94eUNvY29hLm1tCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlBhc3RlYm9hcmRQcm94eUNvY29hLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJXZWJQYXN0ZWJvYXJkUHJveHkuaCIKKworI2ltcG9ydCA8V2ViQ29y
ZS9Db2xvci5oPgorI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVBhc3RlYm9hcmQuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1VSTC5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgV2Vi
UGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkVHlwZXMoY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcykKK3sKKyAgICBQbGF0Zm9y
bVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmdldFR5cGVzKHBhc3RlYm9hcmRUeXBlcyk7Cit9
CisKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlw
ZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRU
eXBlLCBWZWN0b3I8U3RyaW5nPiYgcGF0aG5hbWVzKQoreworICAgIFBsYXRmb3JtUGFzdGVib2Fy
ZChwYXN0ZWJvYXJkTmFtZSkuZ2V0UGF0aG5hbWVzRm9yVHlwZShwYXRobmFtZXMsIHBhc3RlYm9h
cmRUeXBlKTsKK30KKwordm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRTdHJp
bmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZFR5cGUsIFN0cmluZyYgc3RyaW5nKQoreworICAgIHN0cmluZyA9IFBsYXRmb3JtUGFz
dGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc3RyaW5nRm9yVHlwZShwYXN0ZWJvYXJkVHlwZSk7Cit9
CisKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBl
LCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgaGFuZGxlLCB1aW50NjRfdCYgc2l6ZSkKK3sKKyAgICBS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2Fy
ZE5hbWUpLmJ1ZmZlckZvclR5cGUocGFzdGVib2FyZFR5cGUpOworICAgIGlmICghYnVmZmVyKQor
ICAgICAgICByZXR1cm47CisgICAgc2l6ZSA9IGJ1ZmZlci0+c2l6ZSgpOworICAgIFJlZlB0cjxT
aGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeUJ1ZmZlciA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKHNp
emUpOworICAgIGlmICghc2hhcmVkTWVtb3J5QnVmZmVyKQorICAgICAgICByZXR1cm47CisgICAg
bWVtY3B5KHNoYXJlZE1lbW9yeUJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPmRhdGEoKSwgc2l6ZSk7
CisgICAgc2hhcmVkTWVtb3J5QnVmZmVyLT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1v
cnk6OlJlYWRPbmx5KTsKK30KKwordm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnBhc3RlYm9hcmRD
b3B5KGNvbnN0IFN0cmluZyYgZnJvbVBhc3RlYm9hcmQsIGNvbnN0IFN0cmluZyYgdG9QYXN0ZWJv
YXJkLCB1aW50NjRfdCYgbmV3Q2hhbmdlQ291bnQpCit7CisgICAgbmV3Q2hhbmdlQ291bnQgPSBQ
bGF0Zm9ybVBhc3RlYm9hcmQodG9QYXN0ZWJvYXJkKS5jb3B5KGZyb21QYXN0ZWJvYXJkKTsKK30K
Kwordm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRDaGFuZ2VDb3VudChjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCB1aW50NjRfdCYgY2hhbmdlQ291bnQpCit7CisgICAg
Y2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNoYW5nZUNv
dW50KCk7Cit9CisKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkVW5pcXVl
TmFtZShTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQoreworICAgIHBhc3RlYm9hcmROYW1lID0gUGxh
dGZvcm1QYXN0ZWJvYXJkOjp1bmlxdWVOYW1lKCk7Cit9CisKK3ZvaWQgV2ViUGFzdGVib2FyZFBy
b3h5OjpnZXRQYXN0ZWJvYXJkQ29sb3IoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgV2Vi
Q29yZTo6Q29sb3ImIGNvbG9yKQoreworICAgIGNvbG9yID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBh
c3RlYm9hcmROYW1lKS5jb2xvcigpOyAgICAKK30KKwordm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6
OmdldFBhc3RlYm9hcmRVUkwoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgV1RGOjpTdHJp
bmcmIHVybFN0cmluZykKK3sKKyAgICB1cmxTdHJpbmcgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFz
dGVib2FyZE5hbWUpLnVybCgpLnN0cmluZygpOworfQorCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94
eTo6YWRkUGFzdGVib2FyZFR5cGVzKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIHVpbnQ2NF90JiBuZXdDaGFuZ2VDb3Vu
dCkKK3sKKyAgICBuZXdDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJk
TmFtZSkuYWRkVHlwZXMocGFzdGVib2FyZFR5cGVzKTsKK30KKwordm9pZCBXZWJQYXN0ZWJvYXJk
UHJveHk6OnNldFBhc3RlYm9hcmRUeXBlcyhjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCB1aW50NjRfdCYgbmV3Q2hhbmdl
Q291bnQpCit7CisgICAgbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVi
b2FyZE5hbWUpLnNldFR5cGVzKHBhc3RlYm9hcmRUeXBlcyk7Cit9CisKK3ZvaWQgV2ViUGFzdGVi
b2FyZFByb3h5OjpzZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZShjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcGF0aG5hbWVzLCB1aW50NjRfdCYgbmV3Q2hhbmdlQ291bnQpCit7CisgICAgbmV3
Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnNldFBhdGhu
YW1lc0ZvclR5cGUocGF0aG5hbWVzLCBwYXN0ZWJvYXJkVHlwZSk7Cit9CisKK3ZvaWQgV2ViUGFz
dGVib2FyZFByb3h5OjpzZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcm
IHN0cmluZywgdWludDY0X3QmIG5ld0NoYW5nZUNvdW50KQoreworICAgIG5ld0NoYW5nZUNvdW50
ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5zZXRTdHJpbmdGb3JUeXBlKHN0
cmluZywgcGFzdGVib2FyZFR5cGUpOworfQorCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6c2V0
UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUmIGhh
bmRsZSwgdWludDY0X3Qgc2l6ZSwgdWludDY0X3QmIG5ld0NoYW5nZUNvdW50KQoreworICAgIGlm
IChoYW5kbGUuaXNOdWxsKCkpIHsKKyAgICAgICAgbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBh
c3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnNldEJ1ZmZlckZvclR5cGUoMCwgcGFzdGVib2FyZFR5
cGUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNo
YXJlZE1lbW9yeUJ1ZmZlciA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKGhhbmRsZSwgU2hhcmVkTWVt
b3J5OjpSZWFkT25seSk7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gU2hhcmVk
QnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhciAqPihzaGFyZWRNZW1vcnlC
dWZmZXItPmRhdGEoKSksIHNpemUpOworICAgIG5ld0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0
ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5zZXRCdWZmZXJGb3JUeXBlKGJ1ZmZlciwgcGFzdGVib2Fy
ZFR5cGUpOworfQorCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6
OndyaXRlV2ViQ29udGVudFRvUGFzdGVib2FyZChjb25zdCBXZWJDb3JlOjpQYXN0ZWJvYXJkV2Vi
Q29udGVudCYgY29udGVudCkKK3sKKyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQoKS53cml0ZShjb250
ZW50KTsKK30KKwordm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OndyaXRlSW1hZ2VUb1Bhc3RlYm9h
cmQoY29uc3QgV2ViQ29yZTo6UGFzdGVib2FyZEltYWdlJiBwYXN0ZWJvYXJkSW1hZ2UpCit7Cisg
ICAgUGxhdGZvcm1QYXN0ZWJvYXJkKCkud3JpdGUocGFzdGVib2FyZEltYWdlKTsKK30KKwordm9p
ZCBXZWJQYXN0ZWJvYXJkUHJveHk6OndyaXRlU3RyaW5nVG9QYXN0ZWJvYXJkKGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICBQbGF0Zm9ybVBh
c3RlYm9hcmQoKS53cml0ZShwYXN0ZWJvYXJkVHlwZSwgdGV4dCk7Cit9CisKK3ZvaWQgV2ViUGFz
dGVib2FyZFByb3h5OjpyZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQodWludDY0X3QgaW5kZXgsIGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIFdURjo6U3RyaW5nJiB2YWx1ZSkKK3sKKyAgICB2
YWx1ZSA9IFBsYXRmb3JtUGFzdGVib2FyZCgpLnJlYWRTdHJpbmcoaW5kZXgsIHBhc3RlYm9hcmRU
eXBlKTsKK30KKwordm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnJlYWRVUkxGcm9tUGFzdGVib2Fy
ZCh1aW50NjRfdCBpbmRleCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgU3RyaW5nJiB1
cmwpCit7CisgICAgdXJsID0gUGxhdGZvcm1QYXN0ZWJvYXJkKCkucmVhZFVSTChpbmRleCwgcGFz
dGVib2FyZFR5cGUpOworfQorCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6cmVhZEJ1ZmZlckZy
b21QYXN0ZWJvYXJkKHVpbnQ2NF90IGluZGV4LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBl
LCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgaGFuZGxlLCB1aW50NjRfdCYgc2l6ZSkKK3sKKyAgICBS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBQbGF0Zm9ybVBhc3RlYm9hcmQoKS5yZWFkQnVm
ZmVyKGluZGV4LCBwYXN0ZWJvYXJkVHlwZSk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJl
dHVybjsKKyAgICBzaXplID0gYnVmZmVyLT5zaXplKCk7CisgICAgUmVmUHRyPFNoYXJlZE1lbW9y
eT4gc2hhcmVkTWVtb3J5QnVmZmVyID0gU2hhcmVkTWVtb3J5OjpjcmVhdGUoc2l6ZSk7CisgICAg
aWYgKCFzaGFyZWRNZW1vcnlCdWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtZW1jcHkoc2hh
cmVkTWVtb3J5QnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+ZGF0YSgpLCBzaXplKTsKKyAgICBzaGFy
ZWRNZW1vcnlCdWZmZXItPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9u
bHkpOworfQorCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZEl0ZW1zQ291
bnQodWludDY0X3QmIGl0ZW1zQ291bnQpCit7CisgICAgaXRlbXNDb3VudCA9IFBsYXRmb3JtUGFz
dGVib2FyZCgpLmNvdW50KCk7Cit9CisKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29h
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9j
ZXNzUG9vbENvY29hLm1tCShyZXZpc2lvbiAxNzc3OTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzgy
LDEzNiArMzgyLDYgQEAgYm9vbCBXZWJQcm9jZXNzUG9vbDo6b21pdFBERlN1cHBvcnQoKQogICAg
IHJldHVybiBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5
OkAiV2ViS2l0T21pdFBERlN1cHBvcnQiXTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0
UGFzdGVib2FyZFR5cGVzKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIFZlY3RvcjxTdHJp
bmc+JiBwYXN0ZWJvYXJkVHlwZXMpCi17Ci0gICAgUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9h
cmROYW1lKS5nZXRUeXBlcyhwYXN0ZWJvYXJkVHlwZXMpOwotfQotCi12b2lkIFdlYlByb2Nlc3NQ
b29sOjpnZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBWZWN0b3I8U3RyaW5nPiYgcGF0
aG5hbWVzKQotewotICAgIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuZ2V0UGF0
aG5hbWVzRm9yVHlwZShwYXRobmFtZXMsIHBhc3RlYm9hcmRUeXBlKTsKLX0KLQotdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6Z2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgU3RyaW5nJiBzdHJpbmcp
Ci17Ci0gICAgc3RyaW5nID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5zdHJp
bmdGb3JUeXBlKHBhc3RlYm9hcmRUeXBlKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0
UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgU2hhcmVkTWVtb3J5OjpIYW5kbGUmIGhhbmRsZSwg
dWludDY0X3QmIHNpemUpCi17Ci0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gUGxh
dGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5idWZmZXJGb3JUeXBlKHBhc3RlYm9hcmRU
eXBlKTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIHNpemUgPSBidWZm
ZXItPnNpemUoKTsKLSAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnlCdWZmZXIg
PSBTaGFyZWRNZW1vcnk6OmNyZWF0ZShzaXplKTsKLSAgICBpZiAoIXNoYXJlZE1lbW9yeUJ1ZmZl
cikKLSAgICAgICAgcmV0dXJuOwotICAgIG1lbWNweShzaGFyZWRNZW1vcnlCdWZmZXItPmRhdGEo
KSwgYnVmZmVyLT5kYXRhKCksIHNpemUpOwotICAgIHNoYXJlZE1lbW9yeUJ1ZmZlci0+Y3JlYXRl
SGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSk7Ci19Ci0KLXZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnBhc3RlYm9hcmRDb3B5KGNvbnN0IFN0cmluZyYgZnJvbVBhc3RlYm9hcmQsIGNv
bnN0IFN0cmluZyYgdG9QYXN0ZWJvYXJkLCB1aW50NjRfdCYgbmV3Q2hhbmdlQ291bnQpCi17Ci0g
ICAgbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQodG9QYXN0ZWJvYXJkKS5jb3B5
KGZyb21QYXN0ZWJvYXJkKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0UGFzdGVib2Fy
ZENoYW5nZUNvdW50KGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIHVpbnQ2NF90JiBjaGFu
Z2VDb3VudCkKLXsKLSAgICBjaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJv
YXJkTmFtZSkuY2hhbmdlQ291bnQoKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0UGFz
dGVib2FyZFVuaXF1ZU5hbWUoU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKLXsKLSAgICBwYXN0ZWJv
YXJkTmFtZSA9IFBsYXRmb3JtUGFzdGVib2FyZDo6dW5pcXVlTmFtZSgpOwotfQotCi12b2lkIFdl
YlByb2Nlc3NQb29sOjpnZXRQYXN0ZWJvYXJkQ29sb3IoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSwgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKQotewotICAgIGNvbG9yID0gUGxhdGZvcm1QYXN0
ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jb2xvcigpOyAgICAKLX0KLQotdm9pZCBXZWJQcm9jZXNz
UG9vbDo6Z2V0UGFzdGVib2FyZFVSTChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBXVEY6
OlN0cmluZyYgdXJsU3RyaW5nKQotewotICAgIHVybFN0cmluZyA9IFBsYXRmb3JtUGFzdGVib2Fy
ZChwYXN0ZWJvYXJkTmFtZSkudXJsKCkuc3RyaW5nKCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OmFkZFBhc3RlYm9hcmRUeXBlcyhjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCB1aW50NjRfdCYgbmV3Q2hhbmdlQ291
bnQpCi17Ci0gICAgbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2Fy
ZE5hbWUpLmFkZFR5cGVzKHBhc3RlYm9hcmRUeXBlcyk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNldFBhc3RlYm9hcmRUeXBlcyhjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCB1aW50NjRfdCYgbmV3Q2hhbmdlQ291
bnQpCi17Ci0gICAgbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2Fy
ZE5hbWUpLnNldFR5cGVzKHBhc3RlYm9hcmRUeXBlcyk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXRobmFtZXMsIHVpbnQ2NF90JiBuZXdDaGFuZ2VDb3VudCkKLXsKLSAgICBuZXdDaGFuZ2VD
b3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc2V0UGF0aG5hbWVzRm9y
VHlwZShwYXRobmFtZXMsIHBhc3RlYm9hcmRUeXBlKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9v
bDo6c2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFt
ZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVp
bnQ2NF90JiBuZXdDaGFuZ2VDb3VudCkKLXsKLSAgICBuZXdDaGFuZ2VDb3VudCA9IFBsYXRmb3Jt
UGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc2V0U3RyaW5nRm9yVHlwZShzdHJpbmcsIHBhc3Rl
Ym9hcmRUeXBlKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0UGFzdGVib2FyZEJ1ZmZl
ckZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkVHlwZSwgY29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUmIGhhbmRsZSwgdWludDY0X3Qg
c2l6ZSwgdWludDY0X3QmIG5ld0NoYW5nZUNvdW50KQotewotICAgIGlmIChoYW5kbGUuaXNOdWxs
KCkpIHsKLSAgICAgICAgbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVi
b2FyZE5hbWUpLnNldEJ1ZmZlckZvclR5cGUoMCwgcGFzdGVib2FyZFR5cGUpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeUJ1ZmZl
ciA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSk7
Ci0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUo
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhciAqPihzaGFyZWRNZW1vcnlCdWZmZXItPmRhdGEoKSks
IHNpemUpOwotICAgIG5ld0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9h
cmROYW1lKS5zZXRCdWZmZXJGb3JUeXBlKGJ1ZmZlciwgcGFzdGVib2FyZFR5cGUpOwotfQotCi0j
aWYgUExBVEZPUk0oSU9TKQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6d3JpdGVXZWJDb250ZW50VG9Q
YXN0ZWJvYXJkKGNvbnN0IFdlYkNvcmU6OlBhc3RlYm9hcmRXZWJDb250ZW50JiBjb250ZW50KQot
ewotICAgIFBsYXRmb3JtUGFzdGVib2FyZCgpLndyaXRlKGNvbnRlbnQpOwotfQotCi12b2lkIFdl
YlByb2Nlc3NQb29sOjp3cml0ZUltYWdlVG9QYXN0ZWJvYXJkKGNvbnN0IFdlYkNvcmU6OlBhc3Rl
Ym9hcmRJbWFnZSYgcGFzdGVib2FyZEltYWdlKQotewotICAgIFBsYXRmb3JtUGFzdGVib2FyZCgp
LndyaXRlKHBhc3RlYm9hcmRJbWFnZSk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OndyaXRl
U3RyaW5nVG9QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0
cmluZyYgdGV4dCkKLXsKLSAgICBQbGF0Zm9ybVBhc3RlYm9hcmQoKS53cml0ZShwYXN0ZWJvYXJk
VHlwZSwgdGV4dCk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlYWRTdHJpbmdGcm9tUGFz
dGVib2FyZCh1aW50NjRfdCBpbmRleCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgV1RG
OjpTdHJpbmcmIHZhbHVlKQotewotICAgIHZhbHVlID0gUGxhdGZvcm1QYXN0ZWJvYXJkKCkucmVh
ZFN0cmluZyhpbmRleCwgcGFzdGVib2FyZFR5cGUpOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29s
OjpyZWFkVVJMRnJvbVBhc3RlYm9hcmQodWludDY0X3QgaW5kZXgsIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZFR5cGUsIFN0cmluZyYgdXJsKQotewotICAgIHVybCA9IFBsYXRmb3JtUGFzdGVib2Fy
ZCgpLnJlYWRVUkwoaW5kZXgsIHBhc3RlYm9hcmRUeXBlKTsKLX0KLQotdm9pZCBXZWJQcm9jZXNz
UG9vbDo6cmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJkKHVpbnQ2NF90IGluZGV4LCBjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmRUeXBlLCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgaGFuZGxlLCB1aW50NjRf
dCYgc2l6ZSkKLXsKLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBQbGF0Zm9ybVBh
c3RlYm9hcmQoKS5yZWFkQnVmZmVyKGluZGV4LCBwYXN0ZWJvYXJkVHlwZSk7Ci0gICAgaWYgKCFi
dWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBzaXplID0gYnVmZmVyLT5zaXplKCk7Ci0gICAg
UmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5QnVmZmVyID0gU2hhcmVkTWVtb3J5Ojpj
cmVhdGUoc2l6ZSk7Ci0gICAgaWYgKCFzaGFyZWRNZW1vcnlCdWZmZXIpCi0gICAgICAgIHJldHVy
bjsKLSAgICBtZW1jcHkoc2hhcmVkTWVtb3J5QnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+ZGF0YSgp
LCBzaXplKTsKLSAgICBzaGFyZWRNZW1vcnlCdWZmZXItPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNo
YXJlZE1lbW9yeTo6UmVhZE9ubHkpOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpnZXRQYXN0
ZWJvYXJkSXRlbXNDb3VudCh1aW50NjRfdCYgaXRlbXNDb3VudCkKLXsKLSAgICBpdGVtc0NvdW50
ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKCkuY291bnQoKTsKLX0KLQotI2VuZGlmCi0KIGJvb2wgV2Vi
UHJvY2Vzc1Bvb2w6OnByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSBjb25zdAogewogICAgIHJl
dHVybiAhbV91c2VyT2JzZXJ2YWJsZVBhZ2VDb3VudGVyLnZhbHVlKCkgJiYgIW1fcHJvY2Vzc1N1
cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlci52YWx1ZSgpOwpJbmRleDogU291cmNlL1dl
YktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTc3NzkxKQorKysgU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUzLDYgKzEwNTMsMTEgQEAKIAkJN0MzODc0MzQxNzJG
NTYxNTAwMUJEODhBIC8qIFBhZ2VCYW5uZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzODc0MzMxNzJGNTYxNTAwMUJEODhBIC8qIFBhZ2VCYW5u
ZXIuY3BwICovOyB9OwogCQk3QzNGOEM5MDE3M0FGNTJEMDA3QjdGMzkgLyogUGx1Z2luSW5mb3Jt
YXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0MzRjhDOEUxNzNBRjUyRDAwN0I3RjM5IC8qIFBsdWdpbkluZm9ybWF0aW9uLmNwcCAqLzsgfTsK
IAkJN0MzRjhDOTExNzNBRjUyRDAwN0I3RjM5IC8qIFBsdWdpbkluZm9ybWF0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzNGOEM4RjE3M0FGNTJE
MDA3QjdGMzkgLyogUGx1Z2luSW5mb3JtYXRpb24uaCAqLzsgfTsKKwkJN0M0Njk0QzMxQTRCNEIw
NDAwQUQ1ODQ1IC8qIFdlYlBhc3RlYm9hcmRQcm94eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzQ2OTRDMTFBNEI0QjA0MDBBRDU4NDUgLyogV2Vi
UGFzdGVib2FyZFByb3h5LmNwcCAqLzsgfTsKKwkJN0M0Njk0QzQxQTRCNEIwNDAwQUQ1ODQ1IC8q
IFdlYlBhc3RlYm9hcmRQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0M0Njk0QzIxQTRCNEIwNDAwQUQ1ODQ1IC8qIFdlYlBhc3RlYm9hcmRQcm94
eS5oICovOyB9OworCQk3QzQ2OTRDOTFBNEI0RUExMDBBRDU4NDUgLyogV2ViUGFzdGVib2FyZFBy
b3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdDNDY5NEM3MUE0QjRFQTAwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OworCQk3QzQ2OTRDQTFBNEI0RUExMDBBRDU4NDUg
LyogV2ViUGFzdGVib2FyZFByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNDY5NEM4MUE0QjRFQTEwMEFENTg0NSAvKiBXZWJQYXN0
ZWJvYXJkUHJveHlNZXNzYWdlcy5oICovOyB9OworCQk3QzQ2OTRDQzFBNEI1MTBBMDBBRDU4NDUg
LyogV2ViUGFzdGVib2FyZFByb3h5Q29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QzQ2OTRDQjFBNEI1MTBBMDBBRDU4NDUgLyogV2ViUGFzdGVi
b2FyZFByb3h5Q29jb2EubW0gKi87IH07CiAJCTdDNEVEMzI5MUEzMTE5RDkwMDc5QkQ0OSAvKiBJ
bmplY3RlZEJ1bmRsZUNTU1N0eWxlRGVjbGFyYXRpb25IYW5kbGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNEVEMzI3MUEzMTE5RDkwMDc5QkQ0OSAv
KiBJbmplY3RlZEJ1bmRsZUNTU1N0eWxlRGVjbGFyYXRpb25IYW5kbGUuaCAqLzsgfTsKIAkJN0M2
RDM3RkMxNzJGNTU1RjAwOUQyODQ3IC8qIFBhZ2VCYW5uZXJNYWMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzZEMzdGQTE3MkY1NTVGMDA5RDI4NDcg
LyogUGFnZUJhbm5lck1hYy5tbSAqLzsgfTsKIAkJN0M2RTcwRkIxOEIyREM3QTAwRjI0RTJFIC8q
IFdlYlByb2Nlc3NDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdDNkU3MEY5MThCMkQ0QTAwMEYyNEUyRSAvKiBXZWJQcm9jZXNzQ29jb2EubW0g
Ki87IH07CkBAIC0zMTQzLDYgKzMxNDgsMTIgQEAKIAkJN0MzODc0MzMxNzJGNTYxNTAwMUJEODhB
IC8qIFBhZ2VCYW5uZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UGFnZUJhbm5lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDM0Y4QzhFMTcz
QUY1MkQwMDdCN0YzOSAvKiBQbHVnaW5JbmZvcm1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQbHVnaW5JbmZvcm1hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDM0Y4QzhGMTczQUY1MkQwMDdCN0YzOSAvKiBQbHVnaW5JbmZvcm1h
dGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbHVnaW5JbmZvcm1hdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzQ2OTRDMTFBNEI0QjA0MDBBRDU4
NDUgLyogV2ViUGFzdGVib2FyZFByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdlYlBhc3RlYm9hcmRQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTdDNDY5NEMyMUE0QjRCMDQwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGFzdGVib2FyZFByb3h5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDNDY5NEM1MUE0QjRCODUwMEFENTg0NSAvKiBX
ZWJQYXN0ZWJvYXJkUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2Vi
UGFzdGVib2FyZFByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3QzQ2OTRDNzFBNEI0RUEwMDBBRDU4NDUgLyogV2ViUGFzdGVib2FyZFByb3h5TWVzc2FnZVJl
Y2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBhc3Rl
Ym9hcmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTdDNDY5NEM4MUE0QjRFQTEwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHlNZXNzYWdl
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQYXN0ZWJvYXJkUHJveHlN
ZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzQ2OTRDQjFBNEI1MTBB
MDBBRDU4NDUgLyogV2ViUGFzdGVib2FyZFByb3h5Q29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQYXN0ZWJvYXJkUHJveHlDb2NvYS5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M0RUQzMjYxQTMxMTlEOTAwNzlCRDQ5IC8qIEluamVj
dGVkQnVuZGxlQ1NTU3R5bGVEZWNsYXJhdGlvbkhhbmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBJbmplY3RlZEJ1bmRsZUNTU1N0eWxlRGVjbGFyYXRpb25IYW5k
bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzRFRDMyNzFBMzExOUQ5MDA3
OUJENDkgLyogSW5qZWN0ZWRCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uSGFuZGxlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluamVjdGVkQnVuZGxlQ1NTU3R5bGVEZWNsYXJh
dGlvbkhhbmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzZEMzdGQTE3MkY1
NTVGMDA5RDI4NDcgLyogUGFnZUJhbm5lck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFBhZ2VCYW5uZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC00NTczLDYgKzQ1ODQsOSBAQAogCQkJCUMwNkM2MDk0MTI0QzE0NDMwMDAxNjgyRiAv
KiBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmggKi8sCiAJCQkJQkM3QjYyNTExMkE0M0M5NjAw
RDE3NEE0IC8qIFdlYlBhZ2VHcm91cERhdGEuY3BwICovLAogCQkJCUJDN0I2MjUwMTJBNDNDOTYw
MEQxNzRBNCAvKiBXZWJQYWdlR3JvdXBEYXRhLmggKi8sCisJCQkJN0M0Njk0QzExQTRCNEIwNDAw
QUQ1ODQ1IC8qIFdlYlBhc3RlYm9hcmRQcm94eS5jcHAgKi8sCisJCQkJN0M0Njk0QzIxQTRCNEIw
NDAwQUQ1ODQ1IC8qIFdlYlBhc3RlYm9hcmRQcm94eS5oICovLAorCQkJCTdDNDY5NEM1MUE0QjRC
ODUwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHkubWVzc2FnZXMuaW4gKi8sCiAJCQkJQzAz
MzdEREMxMjdBNTIxQzAwOEZGNEY0IC8qIFdlYlBsYXRmb3JtVG91Y2hQb2ludC5jcHAgKi8sCiAJ
CQkJQkM1NzQ0RUQxMjYzOEZCMzAwNkYwRjEyIC8qIFdlYlBvcHVwSXRlbS5jcHAgKi8sCiAJCQkJ
QkM1NzQ0RUUxMjYzOEZCMzAwNkYwRjEyIC8qIFdlYlBvcHVwSXRlbS5oICovLApAQCAtNDY4NSw2
ICs0Njk5LDcgQEAKIAkJCQkxQUZFNDM2MzE4QjZDMDgxMDA5QzdBNDggLyogVUlEZWxlZ2F0ZS5t
bSAqLywKIAkJCQkxQUMwMjczRTE5NjYyMkQ2MDBDMTJCNzUgLyogV2ViUGFnZVByb3h5Q29jb2Eu
bW0gKi8sCiAJCQkJN0NFNEQyMTUxQTQ5MTQ4NDAwQzdGMTUyIC8qIFdlYlByb2Nlc3NQb29sQ29j
b2EubW0gKi8sCisJCQkJN0M0Njk0Q0IxQTRCNTEwQTAwQUQ1ODQ1IC8qIFdlYlBhc3RlYm9hcmRQ
cm94eUNvY29hLm1tICovLAogCQkJCTFBMDRGNjE3MUE0QTNBN0EwMEEyMUI2RSAvKiBXZWJQcm9j
ZXNzUHJveHlDb2NvYS5tbSAqLywKIAkJCQkxQUQwMUJDQjE5MDVENTQ5MDBDOUM0NUYgLyogV0tS
ZWxvYWRGcmFtZUVycm9yUmVjb3ZlcnlBdHRlbXB0ZXIuaCAqLywKIAkJCQkxQUQwMUJDQTE5MDVE
NTQ5MDBDOUM0NUYgLyogV0tSZWxvYWRGcmFtZUVycm9yUmVjb3ZlcnlBdHRlbXB0ZXIubW0gKi8s
CkBAIC03MDAxLDYgKzcwMTYsOCBAQAogCQkJCUMwQ0U3MjlGMTI0N0U3MUQwMEJDMEVDNCAvKiBX
ZWJQYWdlTWVzc2FnZXMuaCAqLywKIAkJCQlCQ0JEMzkxMjEyNUJCMUE4MDBEMkMyOUYgLyogV2Vi
UGFnZVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKIAkJCQlCQ0JEMzkxMzEyNUJCMUE4MDBE
MkMyOUYgLyogV2ViUGFnZVByb3h5TWVzc2FnZXMuaCAqLywKKwkJCQk3QzQ2OTRDNzFBNEI0RUEw
MDBBRDU4NDUgLyogV2ViUGFzdGVib2FyZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKKwkJ
CQk3QzQ2OTRDODFBNEI0RUExMDBBRDU4NDUgLyogV2ViUGFzdGVib2FyZFByb3h5TWVzc2FnZXMu
aCAqLywKIAkJCQkxQTA0M0Y2NzEyNTE0RDhCMDBGRkJGQjUgLyogV2ViUHJvY2Vzc0Nvbm5lY3Rp
b25NZXNzYWdlUmVjZWl2ZXIuY3BwICovLAogCQkJCTFBMDQzRjY4MTI1MTREOEIwMEZGQkZCNSAv
KiBXZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmggKi8sCiAJCQkJQkMzMDY2QkMxMjVBNDQy
MTAwRTcxMjc4IC8qIFdlYlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwICovLApAQCAtNzM2MSw2
ICs3Mzc4LDcgQEAKIAkJCQlCQzE0RTEwQTEyMEI5MDVFMDA4MjZDMEMgLyogSW5qZWN0ZWRCdW5k
bGVQYWdlRm9ybUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q1QzY2QTExMzRCOUQzODAw
NEZFMkE4IC8qIEluamVjdGVkQnVuZGxlUGFnZUZ1bGxTY3JlZW5DbGllbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDQThDNkE5MTFFM0JBNUYwMDgxMkZCNyAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VM
b2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDNDY5NENBMUE0QjRFQTEwMEFENTg0
NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4
MTQ3QTkxMkY2NENEQTAwN0IyQzMyIC8qIEluamVjdGVkQnVuZGxlUGFnZVBvbGljeUNsaWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBOEM2QjAxMUUzQzA4NzAwODEyRkI3IC8qIEluamVjdGVk
QnVuZGxlUGFnZVVJQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzMzRTBEMTEyNDA4RTg2
MDAzNjBGM0YgLyogSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCkBA
IC03MzczLDYgKzczOTEsNyBAQAogCQkJCTUxODM1M0RGMTg4NzEyOEIwMEQ5RkU0NCAvKiBLZXll
ZERlY29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTAwRDVEMTgyREFERTEwMDA4N0RENyAv
KiBLZXllZEVuY29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTA5Mzc4MTRGQjEyOEMwMDEx
MzhEOSAvKiBMYXllckhvc3RpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzQ2OTRD
NDFBNEI0QjA0MDBBRDU4NDUgLyogV2ViUGFzdGVib2FyZFByb3h5LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjBDMzY1QTE4QzA1NTU4MDBGNjA3RDcgLyogTGF5ZXJSZXByZXNlbnRhdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUE5MkRDMTExMkY4QkE0NjAwMTdBRjY1IC8qIExheWVyVHJlZUNv
bnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMURDMzQwMTk2MzQ2RDcwMEZGNzA1OSAvKiBM
ZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuaCBpbiBIZWFkZXJzICovLApAQCAtOTA0Myw2ICs5MDYy
LDcgQEAKIAkJCQlFMUVFNTNFNzExRjhDRkZCMDBDQ0JFRTQgLyogSW5qZWN0ZWRCdW5kbGVQYWdl
RWRpdG9yQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMTRFMTA5MTIwQjkwNUUwMDgy
NkMwQyAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VGb3JtQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUNENUM2NkEwMTM0QjlEMzgwMDRGRTJBOCAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VGdWxsU2Ny
ZWVuQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdDNDY5NEMzMUE0QjRCMDQwMEFENTg0
NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBOEM2QTgx
MUUzQkE1RjAwODEyRkI3IC8qIEluamVjdGVkQnVuZGxlUGFnZUxvYWRlckNsaWVudC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCQzgxNDdBQTEyRjY0Q0RBMDA3QjJDMzIgLyogSW5qZWN0ZWRCdW5k
bGVQYWdlUG9saWN5Q2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1OUM1NTFFMTMwMDA2
NDEwMDI1QzBDMiAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VSZXNvdXJjZUxvYWRDbGllbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC05MTI3LDYgKzkxNDcsNyBAQAogCQkJCTFBMjE2MUIxMTFGMzc2NjQw
MDhBRDBGNSAvKiBOUFJ1bnRpbWVPYmplY3RNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEy
MTYyQjAxMUYzODk3MTAwOEFEMEY1IC8qIE5QUnVudGltZVV0aWxpdGllcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQTJEODRBNDEyN0Y2QUQxMDAxRUI5NjIgLyogTlBWYXJpYW50RGF0YS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk3QzQ2OTRDOTFBNEI0RUExMDBBRDU4NDUgLyogV2ViUGFzdGVi
b2FyZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDOEFDQTE0
MTY2NzBEODkwMDRDMTk0MSAvKiBPYmpDT2JqZWN0R3JhcGgubW0gaW4gU291cmNlcyAqLywKIAkJ
CQlCQzhBQ0ExNjE2NjcwRDg5MDA0QzE5NDEgLyogT2JqQ09iamVjdEdyYXBoQ29kZXJzLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkNDRjY3MzMxMkM3RjE1QzAwOEY5QzM1IC8qIE9yaWdpbkFuZERh
dGFiYXNlcy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTkzNTAsNiArOTM3MSw3IEBACiAJCQkJQkMw
RTVGRTYxMkQ2OTcxNjAwMTJBNzJBIC8qIFdlYkdlb2xvY2F0aW9uTWFuYWdlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQzBFNjA2MTEyRDZCQTkxMDAxMkE3MkEgLyogV2ViR2VvbG9jYXRpb25N
YW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNTRDQUNDMTJE
NjQyOTEwMDVDNjdCMCAvKiBXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk3QzQ2OTRDQzFBNEI1MTBBMDBBRDU4NDUgLyogV2ViUGFzdGVib2FyZFByb3h5
Q29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzBFNjE4MjEyRDZDQjFEMDAxMkE3MkEgLyog
V2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkMwRTYwNzQxMkQ2QkMyMDAwMTJBNzJBIC8qIFdlYkdlb2xvY2F0aW9uUG9zaXRp
b24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMxQkUxRjMxMkQ1NERCRDAwMDRBMjI4IC8qIFdl
Ykdlb2xvY2F0aW9uUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQkocmV2aXNp
b24gMTc3NzkxKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQ
bHVnaW4ubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ1LDggKzQ1LDggQEAKICNpbXBvcnQgIldlYkV2
ZW50Q29udmVyc2lvbi5oIgogI2ltcG9ydCAiV2ViUGFnZS5oIgogI2ltcG9ydCAiV2ViUGFnZVBy
b3h5TWVzc2FnZXMuaCIKKyNpbXBvcnQgIldlYlBhc3RlYm9hcmRQcm94eU1lc3NhZ2VzLmgiCiAj
aW1wb3J0ICJXZWJQcm9jZXNzLmgiCi0jaW1wb3J0ICJXZWJQcm9jZXNzUG9vbE1lc3NhZ2VzLmgi
CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYuaD4KICNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmlu
Z1JlZi5oPgpAQCAtMTY2Miw4ICsxNjYyLDggQEAgdm9pZCBQREZQbHVnaW46OndyaXRlSXRlbXNU
b1Bhc3RlYm9hcmQoTgogICAgICAgICBwYXN0ZWJvYXJkVHlwZXMuYXBwZW5kKHR5cGUpOwogCiAg
ICAgdWludDY0X3QgbmV3Q2hhbmdlQ291bnQ7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29s
OjpTZXRQYXN0ZWJvYXJkVHlwZXMocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBlcyksCi0g
ICAgICAgIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6U2V0UGFzdGVib2FyZFR5cGVzOjpSZXBs
eShuZXdDaGFuZ2VDb3VudCksIDApOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6
OlNldFBhc3RlYm9hcmRUeXBlcyhwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGVzKSwKKyAg
ICAgICAgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZFR5cGVzOjpS
ZXBseShuZXdDaGFuZ2VDb3VudCksIDApOwogCiAgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwLCBj
b3VudCA9IGl0ZW1zLmNvdW50OyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICBOU1N0cmluZyAq
dHlwZSA9IFt0eXBlcyBvYmplY3RBdEluZGV4OmldOwpAQCAtMTY3Nyw4ICsxNjc3LDcgQEAgdm9p
ZCBQREZQbHVnaW46OndyaXRlSXRlbXNUb1Bhc3RlYm9hcmQoTgogCiAgICAgICAgIGlmIChbdHlw
ZSBpc0VxdWFsVG9TdHJpbmc6TlNTdHJpbmdQYm9hcmRUeXBlXSB8fCBbdHlwZSBpc0VxdWFsVG9T
dHJpbmc6TlNQYXN0ZWJvYXJkVHlwZVN0cmluZ10pIHsKICAgICAgICAgICAgIFJldGFpblB0cjxO
U1N0cmluZz4gcGxhaW5UZXh0U3RyaW5nID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBpbml0
V2l0aERhdGE6ZGF0YSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10pOwotICAgICAgICAg
ICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5
bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpTZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShw
YXN0ZWJvYXJkTmFtZSwgdHlwZSwgcGxhaW5UZXh0U3RyaW5nLmdldCgpKSwKLSAgICAgICAgICAg
ICAgICBNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6OlNldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBl
OjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDApOworICAgICAgICAgICAgV2ViUHJvY2Vzczo6c2hh
cmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBh
c3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGUocGFzdGVib2FyZE5hbWUs
IHR5cGUsIHBsYWluVGV4dFN0cmluZy5nZXQoKSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJv
eHk6OlNldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlOjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDAp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVm
ZmVyID0gU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKGRhdGEpOwogCkBAIC0xNjg5LDggKzE2ODgs
NyBAQCB2b2lkIFBERlBsdWdpbjo6d3JpdGVJdGVtc1RvUGFzdGVib2FyZChOCiAgICAgICAgICAg
ICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmNyZWF0
ZShidWZmZXItPnNpemUoKSk7CiAgICAgICAgICAgICBtZW1jcHkoc2hhcmVkTWVtb3J5LT5kYXRh
KCksIGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7CiAgICAgICAgICAgICBzaGFyZWRN
ZW1vcnktPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOwotICAg
ICAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpTZXRQYXN0ZWJvYXJkQnVmZmVyRm9y
VHlwZShwYXN0ZWJvYXJkTmFtZSwgdHlwZSwgaGFuZGxlLCBidWZmZXItPnNpemUoKSksCi0gICAg
ICAgICAgICAgICAgTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpTZXRQYXN0ZWJvYXJkQnVmZmVy
Rm9yVHlwZTo6UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKKyAgICAgICAgICAgIFdlYlByb2Nl
c3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2Vz
OjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKHBhc3RlYm9h
cmROYW1lLCB0eXBlLCBoYW5kbGUsIGJ1ZmZlci0+c2l6ZSgpKSwgTWVzc2FnZXM6OldlYlBhc3Rl
Ym9hcmRQcm94eTo6U2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGU6OlJlcGx5KG5ld0NoYW5nZUNv
dW50KSwgMCk7CiAgICAgICAgIH0KICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9y
bVN0cmF0ZWdpZXMuY3BwCShyZXZpc2lvbiAxNzc3OTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDggKzQwLDggQEAKICNpbmNsdWRlICJXZWJJREJGYWN0b3J5QmFja2VuZC5o
IgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlICJXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVz
LmgiCisjaW5jbHVkZSAiV2ViUGFzdGVib2FyZFByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJX
ZWJQcm9jZXNzLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2xNZXNzYWdlcy5oIgogI2luY2x1
ZGUgIldlYlByb2Nlc3NQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaD4KQEAgLTMz
OSw3ICszMzksNyBAQCB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0VHlwZXMoVmVjCiAg
ICAgaWYgKCF0eXBlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdlYlByb2Nl
c3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzUG9vbDo6R2V0UGFzdGVib2FyZFR5cGVzKHBhc3RlYm9hcmROYW1lKSwgTWVz
c2FnZXM6OldlYlByb2Nlc3NQb29sOjpHZXRQYXN0ZWJvYXJkVHlwZXM6OlJlcGx5KHR5cGVzKSwg
MCk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZFR5cGVz
KHBhc3RlYm9hcmROYW1lKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVi
b2FyZFR5cGVzOjpSZXBseSh0eXBlcyksIDApOwogfQogCiBQYXNzUmVmUHRyPFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlcj4gV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpidWZmZXJGb3JUeXBlKGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCkBAIC0z
NTIsNyArMzUyLDcgQEAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IFdlYlBsYQog
ICAgIC8vIEZhbGxiYWNrIHRvIG1lc3NhZ2luZyB0aGUgVUkgcHJvY2VzcyBmb3IgbmF0aXZlIHBh
c3RlYm9hcmQgY29udGVudC4KICAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7CiAgICAg
dWludDY0X3Qgc2l6ZSA9IDA7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpHZXRQYXN0
ZWJvYXJkQnVmZmVyRm9yVHlwZShwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGUpLCBNZXNz
YWdlczo6V2ViUHJvY2Vzc1Bvb2w6OkdldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlOjpSZXBseSho
YW5kbGUsIHNpemUpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQ
YXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGUpLCBN
ZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZTo6
UmVwbHkoaGFuZGxlLCBzaXplKSwgMCk7CiAgICAgaWYgKGhhbmRsZS5pc051bGwoKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5QnVmZmVy
ID0gU2hhcmVkTWVtb3J5OjpjcmVhdGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KTsK
QEAgLTM2MSw2MiArMzYxLDYyIEBAIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBX
ZWJQbGEKIAogdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFBhdGhuYW1lc0ZvclR5cGUo
VmVjdG9yPFN0cmluZz4mIHBhdGhuYW1lcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwg
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQo
KS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vz
c1Bvb2w6OkdldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlKHBhc3RlYm9hcmROYW1lLCBwYXN0
ZWJvYXJkVHlwZSksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6R2V0UGFzdGVib2FyZFBhdGhu
YW1lc0ZvclR5cGU6OlJlcGx5KHBhdGhuYW1lcyksIDApOworICAgIFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0
ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlKHBhc3RlYm9hcmROYW1l
LCBwYXN0ZWJvYXJkVHlwZSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3Rl
Ym9hcmRQYXRobmFtZXNGb3JUeXBlOjpSZXBseShwYXRobmFtZXMpLCAwKTsKIH0KIAogU3RyaW5n
IFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c3RyaW5nRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewogICAgIFN0cmluZyB2
YWx1ZTsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6OkdldFBhc3RlYm9hcmRTdHJpbmdG
b3JUeXBlKHBhc3RlYm9hcmROYW1lLCBwYXN0ZWJvYXJkVHlwZSksIE1lc3NhZ2VzOjpXZWJQcm9j
ZXNzUG9vbDo6R2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGU6OlJlcGx5KHZhbHVlKSwgMCk7Cisg
ICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5
bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5
cGUocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBlKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9h
cmRQcm94eTo6R2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGU6OlJlcGx5KHZhbHVlKSwgMCk7CiAg
ICAgcmV0dXJuIHZhbHVlOwogfQogCiBsb25nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29weShj
b25zdCBTdHJpbmcmIGZyb21QYXN0ZWJvYXJkLCBjb25zdCBTdHJpbmcmIHRvUGFzdGVib2FyZCkK
IHsKICAgICB1aW50NjRfdCBuZXdDaGFuZ2VDb3VudDsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQo
KS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vz
c1Bvb2w6OlBhc3RlYm9hcmRDb3B5KGZyb21QYXN0ZWJvYXJkLCB0b1Bhc3RlYm9hcmQpLCBNZXNz
YWdlczo6V2ViUHJvY2Vzc1Bvb2w6OlBhc3RlYm9hcmRDb3B5OjpSZXBseShuZXdDaGFuZ2VDb3Vu
dCksIDApOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlBhc3RlYm9hcmRDb3B5
KGZyb21QYXN0ZWJvYXJkLCB0b1Bhc3RlYm9hcmQpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFBy
b3h5OjpQYXN0ZWJvYXJkQ29weTo6UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKICAgICByZXR1
cm4gbmV3Q2hhbmdlQ291bnQ7CiB9CiAKIGxvbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjaGFu
Z2VDb3VudChjb25zdCBXVEY6OlN0cmluZyAmcGFzdGVib2FyZE5hbWUpCiB7CiAgICAgdWludDY0
X3QgY2hhbmdlQ291bnQ7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpHZXRQYXN0ZWJv
YXJkQ2hhbmdlQ291bnQocGFzdGVib2FyZE5hbWUpLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6
OkdldFBhc3RlYm9hcmRDaGFuZ2VDb3VudDo6UmVwbHkoY2hhbmdlQ291bnQpLCAwKTsKKyAgICBX
ZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhN
ZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkQ2hhbmdlQ291bnQocGFz
dGVib2FyZE5hbWUpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJk
Q2hhbmdlQ291bnQ6OlJlcGx5KGNoYW5nZUNvdW50KSwgMCk7CiAgICAgcmV0dXJuIGNoYW5nZUNv
dW50OwogfQogCiBTdHJpbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjp1bmlxdWVOYW1lKCkKIHsK
ICAgICBTdHJpbmcgcGFzdGVib2FyZE5hbWU7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29s
OjpHZXRQYXN0ZWJvYXJkVW5pcXVlTmFtZSgpLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6Okdl
dFBhc3RlYm9hcmRVbmlxdWVOYW1lOjpSZXBseShwYXN0ZWJvYXJkTmFtZSksIDApOworICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1l
c3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRVbmlxdWVOYW1lKCksIE1l
c3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRVbmlxdWVOYW1lOjpSZXBs
eShwYXN0ZWJvYXJkTmFtZSksIDApOwogICAgIHJldHVybiBwYXN0ZWJvYXJkTmFtZTsKIH0KIAog
Q29sb3IgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb2xvcihjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lKQogewogICAgIENvbG9yIGNvbG9yOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBh
cmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9v
bDo6R2V0UGFzdGVib2FyZENvbG9yKHBhc3RlYm9hcmROYW1lKSwgTWVzc2FnZXM6OldlYlByb2Nl
c3NQb29sOjpHZXRQYXN0ZWJvYXJkQ29sb3I6OlJlcGx5KGNvbG9yKSwgMCk7CisgICAgV2ViUHJv
Y2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZENvbG9yKHBhc3RlYm9hcmROYW1l
KSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZENvbG9yOjpSZXBs
eShjb2xvciksIDApOwogICAgIHJldHVybiBjb2xvcjsKIH0KIAogVVJMIFdlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6dXJsKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAgICAgU3RyaW5n
IHVybFN0cmluZzsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6OkdldFBhc3RlYm9hcmRV
UkwocGFzdGVib2FyZE5hbWUpLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6OkdldFBhc3RlYm9h
cmRVUkw6OlJlcGx5KHVybFN0cmluZyksIDApOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBh
cmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJk
UHJveHk6OkdldFBhc3RlYm9hcmRVUkwocGFzdGVib2FyZE5hbWUpLCBNZXNzYWdlczo6V2ViUGFz
dGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkVVJMOjpSZXBseSh1cmxTdHJpbmcpLCAwKTsKICAg
ICByZXR1cm4gVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsU3RyaW5nKTsKIH0KIAogbG9uZyBXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OmFkZFR5cGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJv
YXJkVHlwZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAgICAgdWludDY0X3Qg
bmV3Q2hhbmdlQ291bnQ7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpBZGRQYXN0ZWJv
YXJkVHlwZXMocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBlcyksIE1lc3NhZ2VzOjpXZWJQ
cm9jZXNzUG9vbDo6QWRkUGFzdGVib2FyZFR5cGVzOjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDAp
OworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkFkZFBhc3RlYm9hcmRUeXBlcyhw
YXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGVzKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQ
cm94eTo6QWRkUGFzdGVib2FyZFR5cGVzOjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDApOwogICAg
IHJldHVybiBuZXdDaGFuZ2VDb3VudDsKIH0KIAogbG9uZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6
OnNldFR5cGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAgICAgdWludDY0X3QgbmV3Q2hhbmdlQ291bnQ7Ci0g
ICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5
bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpTZXRQYXN0ZWJvYXJkVHlwZXMocGFzdGVib2Fy
ZE5hbWUsIHBhc3RlYm9hcmRUeXBlcyksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6U2V0UGFz
dGVib2FyZFR5cGVzOjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDApOworICAgIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpX
ZWJQYXN0ZWJvYXJkUHJveHk6OlNldFBhc3RlYm9hcmRUeXBlcyhwYXN0ZWJvYXJkTmFtZSwgcGFz
dGVib2FyZFR5cGVzKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2Fy
ZFR5cGVzOjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDApOwogICAgIHJldHVybiBuZXdDaGFuZ2VD
b3VudDsKIH0KIApAQCAtNDMzLDQ0ICs0MzMsNDQgQEAgbG9uZyBXZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXM6OnNldEJ1ZmZlckZvcgogICAgICAgICB9CiAgICAgfQogICAgIHVpbnQ2NF90IG5ld0NoYW5n
ZUNvdW50OwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6U2V0UGFzdGVib2FyZEJ1ZmZl
ckZvclR5cGUocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBlLCBoYW5kbGUsIGJ1ZmZlciA/
IGJ1ZmZlci0+c2l6ZSgpIDogMCksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6U2V0UGFzdGVi
b2FyZEJ1ZmZlckZvclR5cGU6OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CisgICAgV2ViUHJv
Y2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUocGFzdGVi
b2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBlLCBoYW5kbGUsIGJ1ZmZlciA/IGJ1ZmZlci0+c2l6ZSgp
IDogMCksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNldFBhc3RlYm9hcmRCdWZmZXJG
b3JUeXBlOjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDApOwogICAgIHJldHVybiBuZXdDaGFuZ2VD
b3VudDsKIH0KIAogbG9uZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldFBhdGhuYW1lc0ZvclR5
cGUoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhuYW1lcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKICAgICB1aW50NjRfdCBu
ZXdDaGFuZ2VDb3VudDsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6OlNldFBhc3RlYm9h
cmRQYXRobmFtZXNGb3JUeXBlKHBhc3RlYm9hcmROYW1lLCBwYXN0ZWJvYXJkVHlwZSwgcGF0aG5h
bWVzKSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpTZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9y
VHlwZTo6UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQo
KS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVi
b2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZShwYXN0ZWJvYXJkTmFtZSwg
cGFzdGVib2FyZFR5cGUsIHBhdGhuYW1lcyksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6
OlNldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlOjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDAp
OwogICAgIHJldHVybiBuZXdDaGFuZ2VDb3VudDsKIH0KIAogbG9uZyBXZWJQbGF0Zm9ybVN0cmF0
ZWdpZXM6OnNldFN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAgICAg
dWludDY0X3QgbmV3Q2hhbmdlQ291bnQ7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpT
ZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGUs
IHN0cmluZyksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6U2V0UGFzdGVib2FyZFN0cmluZ0Zv
clR5cGU6OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVk
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3Rl
Ym9hcmRQcm94eTo6U2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGUocGFzdGVib2FyZE5hbWUsIHBh
c3RlYm9hcmRUeXBlLCBzdHJpbmcpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQ
YXN0ZWJvYXJkU3RyaW5nRm9yVHlwZTo6UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKICAgICBy
ZXR1cm4gbmV3Q2hhbmdlQ291bnQ7CiB9CiAKICNpZiBQTEFURk9STShJT1MpCiB2b2lkIFdlYlBs
YXRmb3JtU3RyYXRlZ2llczo6d3JpdGVUb1Bhc3RlYm9hcmQoY29uc3QgV2ViQ29yZTo6UGFzdGVi
b2FyZFdlYkNvbnRlbnQmIGNvbnRlbnQpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6Oldy
aXRlV2ViQ29udGVudFRvUGFzdGVib2FyZChjb250ZW50KSwgMCk7CisgICAgV2ViUHJvY2Vzczo6
c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFz
dGVib2FyZFByb3h5OjpXcml0ZVdlYkNvbnRlbnRUb1Bhc3RlYm9hcmQoY29udGVudCksIDApOwog
fQogCiB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6d3JpdGVUb1Bhc3RlYm9hcmQoY29uc3Qg
V2ViQ29yZTo6UGFzdGVib2FyZEltYWdlJiBpbWFnZSkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
UG9vbDo6V3JpdGVJbWFnZVRvUGFzdGVib2FyZChpbWFnZSksIDApOworICAgIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBh
c3RlYm9hcmRQcm94eTo6V3JpdGVJbWFnZVRvUGFzdGVib2FyZChpbWFnZSksIDApOwogfQogCiB2
b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6d3JpdGVUb1Bhc3RlYm9hcmQoY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0KQogewotICAgIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBy
b2Nlc3NQb29sOjpXcml0ZVN0cmluZ1RvUGFzdGVib2FyZChwYXN0ZWJvYXJkVHlwZSwgdGV4dCks
IDApOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6V3JpdGVTdHJpbmdUb1Bhc3RlYm9h
cmQocGFzdGVib2FyZFR5cGUsIHRleHQpLCAwKTsKIH0KIAogaW50IFdlYlBsYXRmb3JtU3RyYXRl
Z2llczo6Z2V0UGFzdGVib2FyZEl0ZW1zQ291bnQoKQogewogICAgIHVpbnQ2NF90IGl0ZW1zQ291
bnQ7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpHZXRQYXN0ZWJvYXJkSXRlbXNDb3Vu
dCgpLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6OkdldFBhc3RlYm9hcmRJdGVtc0NvdW50OjpS
ZXBseShpdGVtc0NvdW50KSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6
R2V0UGFzdGVib2FyZEl0ZW1zQ291bnQoKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6
R2V0UGFzdGVib2FyZEl0ZW1zQ291bnQ6OlJlcGx5KGl0ZW1zQ291bnQpLCAwKTsKICAgICByZXR1
cm4gaXRlbXNDb3VudDsKIH0KIApAQCAtNDc4LDcgKzQ3OCw3IEBAIFBhc3NSZWZQdHI8V2ViQ29y
ZTo6U2hhcmVkQnVmZmVyPiBXZWJQbGEKIHsKICAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5k
bGU7CiAgICAgdWludDY0X3Qgc2l6ZSA9IDA7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29s
OjpSZWFkQnVmZmVyRnJvbVBhc3RlYm9hcmQoaW5kZXgsIHBhc3RlYm9hcmRUeXBlKSwgTWVzc2Fn
ZXM6OldlYlByb2Nlc3NQb29sOjpSZWFkQnVmZmVyRnJvbVBhc3RlYm9hcmQ6OlJlcGx5KGhhbmRs
ZSwgc2l6ZSksIDApOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25u
ZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlJlYWRCdWZm
ZXJGcm9tUGFzdGVib2FyZChpbmRleCwgcGFzdGVib2FyZFR5cGUpLCBNZXNzYWdlczo6V2ViUGFz
dGVib2FyZFByb3h5OjpSZWFkQnVmZmVyRnJvbVBhc3RlYm9hcmQ6OlJlcGx5KGhhbmRsZSwgc2l6
ZSksIDApOwogICAgIGlmIChoYW5kbGUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiAwOwogICAg
IFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeUJ1ZmZlciA9IFNoYXJlZE1lbW9yeTo6
Y3JlYXRlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSk7CkBAIC00ODgsMjEgKzQ4OCwy
MSBAQCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gV2ViUGxhCiBXZWJDb3JlOjpV
UkwgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpyZWFkVVJMRnJvbVBhc3RlYm9hcmQoaW50IGluZGV4
LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKQogewogICAgIFN0cmluZyB1cmxTdHJpbmc7
Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpSZWFkVVJMRnJvbVBhc3RlYm9hcmQoaW5k
ZXgsIHBhc3RlYm9hcmRUeXBlKSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpSZWFkVVJMRnJv
bVBhc3RlYm9hcmQ6OlJlcGx5KHVybFN0cmluZyksIDApOworICAgIFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0
ZWJvYXJkUHJveHk6OlJlYWRVUkxGcm9tUGFzdGVib2FyZChpbmRleCwgcGFzdGVib2FyZFR5cGUp
LCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpSZWFkVVJMRnJvbVBhc3RlYm9hcmQ6OlJl
cGx5KHVybFN0cmluZyksIDApOwogICAgIHJldHVybiBVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmxT
dHJpbmcpOwogfQogCiBTdHJpbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpyZWFkU3RyaW5nRnJv
bVBhc3RlYm9hcmQoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKQogewog
ICAgIFN0cmluZyB2YWx1ZTsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6OlJlYWRTdHJp
bmdGcm9tUGFzdGVib2FyZChpbmRleCwgcGFzdGVib2FyZFR5cGUpLCBNZXNzYWdlczo6V2ViUHJv
Y2Vzc1Bvb2w6OlJlYWRTdHJpbmdGcm9tUGFzdGVib2FyZDo6UmVwbHkodmFsdWUpLCAwKTsKKyAg
ICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3lu
YyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpSZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQo
aW5kZXgsIHBhc3RlYm9hcmRUeXBlKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6UmVh
ZFN0cmluZ0Zyb21QYXN0ZWJvYXJkOjpSZXBseSh2YWx1ZSksIDApOwogICAgIHJldHVybiB2YWx1
ZTsKIH0KIAogbG9uZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNoYW5nZUNvdW50KCkKIHsKICAg
ICB1aW50NjRfdCBjaGFuZ2VDb3VudDsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6Okdl
dFBhc3RlYm9hcmRDaGFuZ2VDb3VudChTdHJpbmcoKSksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9v
bDo6R2V0UGFzdGVib2FyZENoYW5nZUNvdW50OjpSZXBseShjaGFuZ2VDb3VudCksIDApOworICAg
IFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5j
KE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRDaGFuZ2VDb3VudChT
dHJpbmcoKSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRDaGFu
Z2VDb3VudDo6UmVwbHkoY2hhbmdlQ291bnQpLCAwKTsKICAgICByZXR1cm4gY2hhbmdlQ291bnQ7
CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243799</attachid>
            <date>2014-12-29 10:19:57 -0800</date>
            <delta_ts>2014-12-29 10:22:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139987-20141229101958.patch</filename>
            <type>text/plain</type>
            <size>58274</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3Nzc5MikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDE0LTEyLTI5ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBQYXN0ZWJvYXJkIGNvZGUgb3V0
IG9mIFdlYlByb2Nlc3NQb29sIGFuZCBpbnRvIGl0cyBvd24gc2luZ2xldG9uIGNsYXNzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzk5ODcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIERlcml2ZWRTb3Vy
Y2VzLm1ha2U6CisgICAgICAgICogU2hhcmVkL1dlYlBhc3RlYm9hcmRQcm94eS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OnNoYXJlZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6V2ViUGFzdGVib2FyZFByb3h5KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjphZGRXZWJQcm9jZXNzUHJveHkpOgorICAg
ICAgICAqIFNoYXJlZC9XZWJQYXN0ZWJvYXJkUHJveHkuaDogQWRkZWQuCisgICAgICAgICogU2hh
cmVkL1dlYlBhc3RlYm9hcmRQcm94eS5tZXNzYWdlcy5pbjogQWRkZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL0NvY29hL1dlYlBhc3RlYm9hcmRQcm94eUNvY29hLm1tOiBBZGRlZC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bDo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OmR1bW15KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wubWVzc2FnZXMuaW46CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQcm94eTo6V2ViUHJvY2Vzc1Byb3h5KToKKyAgICAgICAgKiBXZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9Q
REZQbHVnaW4ubW06CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6d3JpdGVJdGVtc1RvUGFz
dGVib2FyZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9y
bVN0cmF0ZWdpZXMuY3BwOgorCiAyMDE0LTEyLTI4ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNj
YUBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIFVzZXJEYXRhIHdoZW4gc2VuZGluZyBtZXNzYWdl
cyB0byB0aGUgcHJvY2VzcyBwb29sCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNl
cy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLm1ha2UJ
KHJldmlzaW9uIDE3Nzc5MikKKysrIFNvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLm1ha2UJ
KHdvcmtpbmcgY29weSkKQEAgLTEyOSw2ICsxMjksNyBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwK
ICAgICBXZWJQYWdlIFwKICAgICBXZWJQYWdlR3JvdXBQcm94eSBcCiAgICAgV2ViUGFnZVByb3h5
IFwKKyAgICBXZWJQYXN0ZWJvYXJkUHJveHkgXAogICAgIFdlYlByb2Nlc3MgXAogICAgIFdlYlBy
b2Nlc3NDb25uZWN0aW9uIFwKICAgICBXZWJQcm9jZXNzUG9vbCBcCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViUGFzdGVib2FyZFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvV2ViUGFzdGVib2FyZFByb3h5LmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQYXN0ZWJvYXJkUHJveHkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViUGFzdGVib2FyZFByb3h5LmgiCisKKyNpbmNsdWRlICJXZWJQYXN0ZWJvYXJkUHJv
eHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgPG11
dGV4PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViUGFzdGVib2FyZFByb3h5JiBXZWJQYXN0
ZWJvYXJkUHJveHk6OnNoYXJlZCgpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VG
bGFnOworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8V2ViUGFzdGVib2FyZFByb3h5PiBw
cm94eTsKKworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7CisgICAgICAgIHByb3h5
LmNvbnN0cnVjdCgpOworICAgIH0pOworCisgICAgcmV0dXJuIHByb3h5OworfQorCitXZWJQYXN0
ZWJvYXJkUHJveHk6OldlYlBhc3RlYm9hcmRQcm94eSgpCit7Cit9CisKK3ZvaWQgV2ViUGFzdGVi
b2FyZFByb3h5OjphZGRXZWJQcm9jZXNzUHJveHkoV2ViUHJvY2Vzc1Byb3h5JiB3ZWJQcm9jZXNz
UHJveHkpCit7CisgICAgLy8gRklYTUU6IENhbiB3ZSBoYW5kbGUgYWxsIG9mIHRoZXNlIG9uIGEg
YmFja2dyb3VuZCBxdWV1ZT8KKyAgICB3ZWJQcm9jZXNzUHJveHkuYWRkTWVzc2FnZVJlY2VpdmVy
KE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRo
aXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9XZWJQYXN0ZWJvYXJkUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViUGFzdGVib2FyZFByb3h5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViUGFzdGVib2FyZFByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViUGFzdGVib2FyZFByb3h5X2gKKyNkZWZpbmUg
V2ViUGFzdGVib2FyZFByb3h5X2gKKworI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2lu
Y2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CitjbGFzcyBDb2xvcjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFdlYlByb2Nlc3NQcm94eTsKKworY2xhc3MgV2ViUGFzdGVib2FyZFByb3h5IDogcHVi
bGljIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJQ
YXN0ZWJvYXJkUHJveHkpOworICAgIGZyaWVuZCBjbGFzcyBMYXp5TmV2ZXJEZXN0cm95ZWQ8V2Vi
UGFzdGVib2FyZFByb3h5PjsKK3B1YmxpYzoKKyAgICBzdGF0aWMgV2ViUGFzdGVib2FyZFByb3h5
JiBzaGFyZWQoKTsKKworICAgIHZvaWQgYWRkV2ViUHJvY2Vzc1Byb3h5KFdlYlByb2Nlc3NQcm94
eSYpOworCitwcml2YXRlOgorICAgIFdlYlBhc3RlYm9hcmRQcm94eSgpOworCisgICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiosIElQQzo6TWVzc2FnZURl
Y29kZXImKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVN5bmNNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiosIElQQzo6TWVzc2FnZURlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8
SVBDOjpNZXNzYWdlRW5jb2Rlcj4mKSBvdmVycmlkZTsKKworI2lmIFBMQVRGT1JNKElPUykKKyAg
ICB2b2lkIHdyaXRlV2ViQ29udGVudFRvUGFzdGVib2FyZChjb25zdCBXZWJDb3JlOjpQYXN0ZWJv
YXJkV2ViQ29udGVudCYpOworICAgIHZvaWQgd3JpdGVJbWFnZVRvUGFzdGVib2FyZChjb25zdCBX
ZWJDb3JlOjpQYXN0ZWJvYXJkSW1hZ2UmKTsKKyAgICB2b2lkIHdyaXRlU3RyaW5nVG9QYXN0ZWJv
YXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYpOworICAgIHZv
aWQgcmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKHVpbnQ2NF90IGluZGV4LCBjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmRUeXBlLCBXVEY6OlN0cmluZyYpOworICAgIHZvaWQgcmVhZFVSTEZyb21QYXN0
ZWJvYXJkKHVpbnQ2NF90IGluZGV4LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBTdHJp
bmcmKTsKKyAgICB2b2lkIHJlYWRCdWZmZXJGcm9tUGFzdGVib2FyZCh1aW50NjRfdCBpbmRleCwg
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgU2hhcmVkTWVtb3J5OjpIYW5kbGUmLCB1aW50
NjRfdCYgc2l6ZSk7CisgICAgdm9pZCBnZXRQYXN0ZWJvYXJkSXRlbXNDb3VudCh1aW50NjRfdCYg
aXRlbXNDb3VudCk7CisjZW5kaWYKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICB2b2lkIGdldFBh
c3RlYm9hcmRUeXBlcyhjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBWZWN0b3I8U3RyaW5n
PiYgcGFzdGVib2FyZFR5cGVzKTsKKyAgICB2b2lkIGdldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JU
eXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZFR5cGUsIFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMpOworICAgIHZvaWQgZ2V0UGFzdGVib2Fy
ZFN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkVHlwZSwgU3RyaW5nJik7CisgICAgdm9pZCBnZXRQYXN0ZWJvYXJkQnVmZmVy
Rm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmRUeXBlLCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYsIHVpbnQ2NF90JiBzaXplKTsKKyAgICB2
b2lkIHBhc3RlYm9hcmRDb3B5KGNvbnN0IFN0cmluZyYgZnJvbVBhc3RlYm9hcmQsIGNvbnN0IFN0
cmluZyYgdG9QYXN0ZWJvYXJkLCB1aW50NjRfdCYgbmV3Q2hhbmdlQ291bnQpOworICAgIHZvaWQg
Z2V0UGFzdGVib2FyZENoYW5nZUNvdW50KGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIHVp
bnQ2NF90JiBjaGFuZ2VDb3VudCk7CisgICAgdm9pZCBnZXRQYXN0ZWJvYXJkVW5pcXVlTmFtZShT
dHJpbmcmIHBhc3RlYm9hcmROYW1lKTsKKyAgICB2b2lkIGdldFBhc3RlYm9hcmRDb2xvcihjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBXZWJDb3JlOjpDb2xvciYpOworICAgIHZvaWQgZ2V0
UGFzdGVib2FyZFVSTChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBXVEY6OlN0cmluZyYp
OworICAgIHZvaWQgYWRkUGFzdGVib2FyZFR5cGVzKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5h
bWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIHVpbnQ2NF90JiBuZXdD
aGFuZ2VDb3VudCk7CisgICAgdm9pZCBzZXRQYXN0ZWJvYXJkVHlwZXMoY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkTmFtZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgdWlu
dDY0X3QmIG5ld0NoYW5nZUNvdW50KTsKKyAgICB2b2lkIHNldFBhc3RlYm9hcmRQYXRobmFtZXNG
b3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZFR5cGUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMsIHVpbnQ2NF90JiBuZXdD
aGFuZ2VDb3VudCk7CisgICAgdm9pZCBzZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25z
dCBTdHJpbmcmLCB1aW50NjRfdCYgbmV3Q2hhbmdlQ291bnQpOworICAgIHZvaWQgc2V0UGFzdGVi
b2FyZEJ1ZmZlckZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUmLCB1aW50NjRf
dCBzaXplLCB1aW50NjRfdCYgbmV3Q2hhbmdlQ291bnQpOworI2VuZGlmCit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlBhc3RlYm9hcmRQcm94eV9oCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUGFzdGVib2FyZFByb3h5Lm1lc3NhZ2VzLmluCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQYXN0ZWJvYXJkUHJveHkubWVzc2Fn
ZXMuaW4JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUGFzdGVib2Fy
ZFByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKyMgQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWVzc2FnZXMgLT4gV2ViUGFzdGVi
b2FyZFByb3h5IHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgV3JpdGVXZWJDb250ZW50VG9QYXN0
ZWJvYXJkKHN0cnVjdCBXZWJDb3JlOjpQYXN0ZWJvYXJkV2ViQ29udGVudCBjb250ZW50KQorICAg
IFdyaXRlSW1hZ2VUb1Bhc3RlYm9hcmQoc3RydWN0IFdlYkNvcmU6OlBhc3RlYm9hcmRJbWFnZSBw
YXN0ZWJvYXJkSW1hZ2UpCisgICAgV3JpdGVTdHJpbmdUb1Bhc3RlYm9hcmQoU3RyaW5nIHBhc3Rl
Ym9hcmRUeXBlLCBTdHJpbmcgdGV4dCkgCisgICAgUmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKHVp
bnQ2NF90IGluZGV4LCBTdHJpbmcgcGFzdGVib2FyZFR5cGUpIC0+IChTdHJpbmcgc3RyaW5nKQor
ICAgIFJlYWRVUkxGcm9tUGFzdGVib2FyZCh1aW50NjRfdCBpbmRleCwgU3RyaW5nIHBhc3RlYm9h
cmRUeXBlKSAtPiAoU3RyaW5nIHN0cmluZykKKyAgICBSZWFkQnVmZmVyRnJvbVBhc3RlYm9hcmQo
dWludDY0X3QgaW5kZXgsIFN0cmluZyBwYXN0ZWJvYXJkVHlwZSkgLT4gKFdlYktpdDo6U2hhcmVk
TWVtb3J5OjpIYW5kbGUgaGFuZGxlLCB1aW50NjRfdCBzaXplKQorICAgIEdldFBhc3RlYm9hcmRJ
dGVtc0NvdW50KCkgLT4gKHVpbnQ2NF90IGl0ZW1zQ291bnQpCisjZW5kaWYKKworI2lmIFBMQVRG
T1JNKENPQ09BKQorICAgICMgUGFzdGVib2FyZCBtZXNzYWdlcy4KKyAgICBHZXRQYXN0ZWJvYXJk
VHlwZXMoU3RyaW5nIHBhc3RlYm9hcmROYW1lKSAtPiAoVmVjdG9yPFN0cmluZz4gdHlwZXMpCisg
ICAgR2V0UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5cGUoU3RyaW5nIHBhc3RlYm9hcmROYW1lLCBT
dHJpbmcgcGFzdGVib2FyZFR5cGUpIC0+IChWZWN0b3I8U3RyaW5nPiBwYXRobmFtZXMpCisgICAg
R2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGUoU3RyaW5nIHBhc3RlYm9hcmROYW1lLCBTdHJpbmcg
cGFzdGVib2FyZFR5cGUpIC0+IChTdHJpbmcgc3RyaW5nKQorICAgIEdldFBhc3RlYm9hcmRCdWZm
ZXJGb3JUeXBlKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgU3RyaW5nIHBhc3RlYm9hcmRUeXBlKSAt
PiAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGUsIHVpbnQ2NF90IHNpemUpCisg
ICAgUGFzdGVib2FyZENvcHkoU3RyaW5nIGZyb21QYXN0ZWJvYXJkLCBTdHJpbmcgdG9QYXN0ZWJv
YXJkKSAtPiAodWludDY0X3QgY2hhbmdlQ291bnQpCisgICAgR2V0UGFzdGVib2FyZENoYW5nZUNv
dW50KFN0cmluZyBwYXN0ZWJvYXJkTmFtZSkgLT4gKHVpbnQ2NF90IGNoYW5nZUNvdW50KQorICAg
IEdldFBhc3RlYm9hcmRVbmlxdWVOYW1lKCkgLT4gKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSkKKyAg
ICBHZXRQYXN0ZWJvYXJkQ29sb3IoU3RyaW5nIHBhc3RlYm9hcmROYW1lKSAtPiAoV2ViQ29yZTo6
Q29sb3IgY29sb3IpCisgICAgR2V0UGFzdGVib2FyZFVSTChTdHJpbmcgcGFzdGVib2FyZE5hbWUp
IC0+IChTdHJpbmcgdXJsU3RyaW5nKQorICAgIEFkZFBhc3RlYm9hcmRUeXBlcyhTdHJpbmcgcGFz
dGVib2FyZE5hbWUsIFZlY3RvcjxTdHJpbmc+IHBhc3RlYm9hcmRUeXBlcykgLT4gKHVpbnQ2NF90
IGNoYW5nZUNvdW50KQorICAgIFNldFBhc3RlYm9hcmRUeXBlcyhTdHJpbmcgcGFzdGVib2FyZE5h
bWUsIFZlY3RvcjxTdHJpbmc+IHBhc3RlYm9hcmRUeXBlcykgLT4gKHVpbnQ2NF90IGNoYW5nZUNv
dW50KQorICAgIFNldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlKFN0cmluZyBwYXN0ZWJvYXJk
TmFtZSwgU3RyaW5nIHBhc3RlYm9hcmRUeXBlLCBWZWN0b3I8U3RyaW5nPiBwYXRobmFtZXMpIC0+
ICh1aW50NjRfdCBjaGFuZ2VDb3VudCkKKyAgICBTZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShT
dHJpbmcgcGFzdGVib2FyZE5hbWUsIFN0cmluZyBwYXN0ZWJvYXJkVHlwZSwgU3RyaW5nIHN0cmlu
ZykgLT4gKHVpbnQ2NF90IGNoYW5nZUNvdW50KQorICAgIFNldFBhc3RlYm9hcmRCdWZmZXJGb3JU
eXBlKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgU3RyaW5nIHBhc3RlYm9hcmRUeXBlLCBXZWJLaXQ6
OlNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZSwgdWludDY0X3Qgc2l6ZSkgLT4gKHVpbnQ2NF90
IGNoYW5nZUNvdW50KQorI2VuZGlmCit9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Bvb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Bvb2wuaAkocmV2aXNpb24gMTc3NzkyKQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3NiwzMiArMzc2LDYg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JN
KElPUykKLSAgICB2b2lkIHdyaXRlV2ViQ29udGVudFRvUGFzdGVib2FyZChjb25zdCBXZWJDb3Jl
OjpQYXN0ZWJvYXJkV2ViQ29udGVudCYpOwotICAgIHZvaWQgd3JpdGVJbWFnZVRvUGFzdGVib2Fy
ZChjb25zdCBXZWJDb3JlOjpQYXN0ZWJvYXJkSW1hZ2UmKTsKLSAgICB2b2lkIHdyaXRlU3RyaW5n
VG9QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYp
OwotICAgIHZvaWQgcmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKHVpbnQ2NF90IGluZGV4LCBjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBXVEY6OlN0cmluZyYpOwotICAgIHZvaWQgcmVhZFVS
TEZyb21QYXN0ZWJvYXJkKHVpbnQ2NF90IGluZGV4LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRU
eXBlLCBTdHJpbmcmKTsKLSAgICB2b2lkIHJlYWRCdWZmZXJGcm9tUGFzdGVib2FyZCh1aW50NjRf
dCBpbmRleCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgU2hhcmVkTWVtb3J5OjpIYW5k
bGUmLCB1aW50NjRfdCYgc2l6ZSk7Ci0gICAgdm9pZCBnZXRQYXN0ZWJvYXJkSXRlbXNDb3VudCh1
aW50NjRfdCYgaXRlbXNDb3VudCk7Ci0jZW5kaWYKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICB2
b2lkIGdldFBhc3RlYm9hcmRUeXBlcyhjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBWZWN0
b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzKTsKLSAgICB2b2lkIGdldFBhc3RlYm9hcmRQYXRo
bmFtZXNGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZFR5cGUsIFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMpOwotICAgIHZvaWQgZ2V0
UGFzdGVib2FyZFN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgU3RyaW5nJik7Ci0gICAgdm9pZCBnZXRQYXN0ZWJv
YXJkQnVmZmVyRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmRUeXBlLCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYsIHVpbnQ2NF90JiBzaXpl
KTsKLSAgICB2b2lkIHBhc3RlYm9hcmRDb3B5KGNvbnN0IFN0cmluZyYgZnJvbVBhc3RlYm9hcmQs
IGNvbnN0IFN0cmluZyYgdG9QYXN0ZWJvYXJkLCB1aW50NjRfdCYgbmV3Q2hhbmdlQ291bnQpOwot
ICAgIHZvaWQgZ2V0UGFzdGVib2FyZENoYW5nZUNvdW50KGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUsIHVpbnQ2NF90JiBjaGFuZ2VDb3VudCk7Ci0gICAgdm9pZCBnZXRQYXN0ZWJvYXJkVW5p
cXVlTmFtZShTdHJpbmcmIHBhc3RlYm9hcmROYW1lKTsKLSAgICB2b2lkIGdldFBhc3RlYm9hcmRD
b2xvcihjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBXZWJDb3JlOjpDb2xvciYpOwotICAg
IHZvaWQgZ2V0UGFzdGVib2FyZFVSTChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBXVEY6
OlN0cmluZyYpOwotICAgIHZvaWQgYWRkUGFzdGVib2FyZFR5cGVzKGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIHVpbnQ2
NF90JiBuZXdDaGFuZ2VDb3VudCk7Ci0gICAgdm9pZCBzZXRQYXN0ZWJvYXJkVHlwZXMoY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRU
eXBlcywgdWludDY0X3QmIG5ld0NoYW5nZUNvdW50KTsKLSAgICB2b2lkIHNldFBhc3RlYm9hcmRQ
YXRobmFtZXNGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMsIHVpbnQ2
NF90JiBuZXdDaGFuZ2VDb3VudCk7Ci0gICAgdm9pZCBzZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlw
ZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRU
eXBlLCBjb25zdCBTdHJpbmcmLCB1aW50NjRfdCYgbmV3Q2hhbmdlQ291bnQpOwotICAgIHZvaWQg
c2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwg
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUm
LCB1aW50NjRfdCBzaXplLCB1aW50NjRfdCYgbmV3Q2hhbmdlQ291bnQpOwotI2VuZGlmCi0KICAg
ICB2b2lkIGhhbmRsZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uKiwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlTmFtZSwgY29uc3QgVXNlckRhdGEmIG1lc3NhZ2VCb2R5KTsKICAgICB2b2lkIGhhbmRsZVN5
bmNocm9ub3VzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24qLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VO
YW1lLCBjb25zdCBVc2VyRGF0YSYgbWVzc2FnZUJvZHksIFVzZXJEYXRhJiByZXR1cm5Vc2VyRGF0
YSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5tZXNz
YWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Bvb2wubWVzc2FnZXMuaW4JKHJldmlzaW9uIDE3Nzc5MikKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMjYs
NDAgKzI2LDYgQEAgbWVzc2FnZXMgLT4gV2ViUHJvY2Vzc1Bvb2wgTGVnYWN5UmVjZWl2ZQogCiAg
ICAgRGlkR2V0U3RhdGlzdGljcyhzdHJ1Y3QgV2ViS2l0OjpTdGF0aXN0aWNzRGF0YSBzdGF0aXN0
aWNzRGF0YSwgdWludDY0X3QgY2FsbGJhY2tJRCkKIAotI2lmIFBMQVRGT1JNKElPUykKLSAgICBX
cml0ZVdlYkNvbnRlbnRUb1Bhc3RlYm9hcmQoc3RydWN0IFdlYkNvcmU6OlBhc3RlYm9hcmRXZWJD
b250ZW50IGNvbnRlbnQpCi0gICAgV3JpdGVJbWFnZVRvUGFzdGVib2FyZChzdHJ1Y3QgV2ViQ29y
ZTo6UGFzdGVib2FyZEltYWdlIHBhc3RlYm9hcmRJbWFnZSkKLSAgICBXcml0ZVN0cmluZ1RvUGFz
dGVib2FyZChTdHJpbmcgcGFzdGVib2FyZFR5cGUsIFN0cmluZyB0ZXh0KSAKLSAgICBSZWFkU3Ry
aW5nRnJvbVBhc3RlYm9hcmQodWludDY0X3QgaW5kZXgsIFN0cmluZyBwYXN0ZWJvYXJkVHlwZSkg
LT4gKFN0cmluZyBzdHJpbmcpCi0gICAgUmVhZFVSTEZyb21QYXN0ZWJvYXJkKHVpbnQ2NF90IGlu
ZGV4LCBTdHJpbmcgcGFzdGVib2FyZFR5cGUpIC0+IChTdHJpbmcgc3RyaW5nKQotICAgIFJlYWRC
dWZmZXJGcm9tUGFzdGVib2FyZCh1aW50NjRfdCBpbmRleCwgU3RyaW5nIHBhc3RlYm9hcmRUeXBl
KSAtPiAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGUsIHVpbnQ2NF90IHNpemUp
Ci0gICAgR2V0UGFzdGVib2FyZEl0ZW1zQ291bnQoKSAtPiAodWludDY0X3QgaXRlbXNDb3VudCkK
LSNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgIyBQYXN0ZWJvYXJkIG1lc3NhZ2Vz
LgotICAgIEdldFBhc3RlYm9hcmRUeXBlcyhTdHJpbmcgcGFzdGVib2FyZE5hbWUpIC0+IChWZWN0
b3I8U3RyaW5nPiB0eXBlcykKLSAgICBHZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZShTdHJp
bmcgcGFzdGVib2FyZE5hbWUsIFN0cmluZyBwYXN0ZWJvYXJkVHlwZSkgLT4gKFZlY3RvcjxTdHJp
bmc+IHBhdGhuYW1lcykKLSAgICBHZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShTdHJpbmcgcGFz
dGVib2FyZE5hbWUsIFN0cmluZyBwYXN0ZWJvYXJkVHlwZSkgLT4gKFN0cmluZyBzdHJpbmcpCi0g
ICAgR2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUoU3RyaW5nIHBhc3RlYm9hcmROYW1lLCBTdHJp
bmcgcGFzdGVib2FyZFR5cGUpIC0+IChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRs
ZSwgdWludDY0X3Qgc2l6ZSkKLSAgICBQYXN0ZWJvYXJkQ29weShTdHJpbmcgZnJvbVBhc3RlYm9h
cmQsIFN0cmluZyB0b1Bhc3RlYm9hcmQpIC0+ICh1aW50NjRfdCBjaGFuZ2VDb3VudCkKLSAgICBH
ZXRQYXN0ZWJvYXJkQ2hhbmdlQ291bnQoU3RyaW5nIHBhc3RlYm9hcmROYW1lKSAtPiAodWludDY0
X3QgY2hhbmdlQ291bnQpCi0gICAgR2V0UGFzdGVib2FyZFVuaXF1ZU5hbWUoKSAtPiAoU3RyaW5n
IHBhc3RlYm9hcmROYW1lKQotICAgIEdldFBhc3RlYm9hcmRDb2xvcihTdHJpbmcgcGFzdGVib2Fy
ZE5hbWUpIC0+IChXZWJDb3JlOjpDb2xvciBjb2xvcikKLSAgICBHZXRQYXN0ZWJvYXJkVVJMKFN0
cmluZyBwYXN0ZWJvYXJkTmFtZSkgLT4gKFN0cmluZyB1cmxTdHJpbmcpCi0gICAgQWRkUGFzdGVi
b2FyZFR5cGVzKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgVmVjdG9yPFN0cmluZz4gcGFzdGVib2Fy
ZFR5cGVzKSAtPiAodWludDY0X3QgY2hhbmdlQ291bnQpCi0gICAgU2V0UGFzdGVib2FyZFR5cGVz
KFN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgVmVjdG9yPFN0cmluZz4gcGFzdGVib2FyZFR5cGVzKSAt
PiAodWludDY0X3QgY2hhbmdlQ291bnQpCi0gICAgU2V0UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5
cGUoU3RyaW5nIHBhc3RlYm9hcmROYW1lLCBTdHJpbmcgcGFzdGVib2FyZFR5cGUsIFZlY3RvcjxT
dHJpbmc+IHBhdGhuYW1lcykgLT4gKHVpbnQ2NF90IGNoYW5nZUNvdW50KQotICAgIFNldFBhc3Rl
Ym9hcmRTdHJpbmdGb3JUeXBlKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgU3RyaW5nIHBhc3RlYm9h
cmRUeXBlLCBTdHJpbmcgc3RyaW5nKSAtPiAodWludDY0X3QgY2hhbmdlQ291bnQpCi0gICAgU2V0
UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUoU3RyaW5nIHBhc3RlYm9hcmROYW1lLCBTdHJpbmcgcGFz
dGVib2FyZFR5cGUsIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlLCB1aW50NjRf
dCBzaXplKSAtPiAodWludDY0X3QgY2hhbmdlQ291bnQpCi0jZW5kaWYKLQotI2lmICFQTEFURk9S
TShDT0NPQSkKLSAgICAvLyBGSVhNRTogVGhpcyBhIGR1bW15IG1lc3NhZ2UsIHRvIGF2b2lkIGJy
ZWFraW5nIHRoZSBidWlsZCBmb3IgcGxhdGZvcm1zIHRoYXQgZG9uJ3QgcmVxdWlyZQotICAgIC8v
IGFueSBzeW5jaHJvbm91cyBtZXNzYWdlcywgYW5kIHNob3VsZCBiZSByZW1vdmVkIHdoZW4gPHJk
YXI6Ly9wcm9ibGVtLzg3NzUxMTU+IGlzIGZpeGVkLgotICAgIER1bW15KCkgLT4gKGJvb2wgZHVt
bXlSZXR1cm4pCi0jZW5kaWYKLQogICAgICMgUGx1Zy1pbiBtZXNzYWdlcy4KICAgICB2b2lkIEFk
ZFBsdWdJbkF1dG9TdGFydE9yaWdpbkhhc2goU3RyaW5nIHBhZ2VPcmlnaW4sIHVpbnQzMl90IGhh
c2gsIFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAgICAgdm9pZCBQbHVnSW5EaWRSZWNl
aXZlVXNlckludGVyYWN0aW9uKHVpbnQzMl90IGhhc2gsIFdlYkNvcmU6OlNlc3Npb25JRCBzZXNz
aW9uSUQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5
LmNwcAkocmV2aXNpb24gMTc3NzkyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE3ICszNywxOCBAQAogI2luY2x1
ZGUgIlRleHRDaGVja2VyLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNrZXJTdGF0ZS5oIgogI2luY2x1
ZGUgIlVzZXJEYXRhLmgiCi0jaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHku
aCIKICNpbmNsdWRlICJXZWJCYWNrRm9yd2FyZExpc3RJdGVtLmgiCiAjaW5jbHVkZSAiV2ViSW5z
cGVjdG9yUHJveHkuaCIKICNpbmNsdWRlICJXZWJOYXZpZ2F0aW9uRGF0YVN0b3JlLmgiCiAjaW5j
bHVkZSAiV2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUGFnZUdy
b3VwLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUGFzdGVib2Fy
ZFByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUGx1Z2luU2l0ZURhdGFNYW5hZ2VyLmgiCiAjaW5jbHVk
ZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKICNp
bmNsdWRlICJXZWJQcm9jZXNzUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYlVzZXJDb250
ZW50Q29udHJvbGxlclByb3h5LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9TdWRkZW5UZXJtaW5hdGlv
bi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVVJMLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTk4
LDYgKzk5LDggQEAgV2ViUHJvY2Vzc1Byb3h5OjpXZWJQcm9jZXNzUHJveHkoV2ViUHJvYwogICAg
ICwgbV9udW1iZXJPZlRpbWVzU3VkZGVuVGVybWluYXRpb25XYXNEaXNhYmxlZCgwKQogICAgICwg
bV90aHJvdHRsZXIoc3RkOjptYWtlX3VuaXF1ZTxQcm9jZXNzVGhyb3R0bGVyPih0aGlzKSkKIHsK
KyAgICBXZWJQYXN0ZWJvYXJkUHJveHk6OnNoYXJlZCgpLmFkZFdlYlByb2Nlc3NQcm94eSgqdGhp
cyk7CisKICAgICBjb25uZWN0KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Db2NvYS9XZWJQYXN0ZWJvYXJkUHJveHlDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUGFzdGVib2FyZFByb3h5Q29jb2EubW0JKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUGFzdGVib2FyZFBy
b3h5Q29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldlYlBhc3RlYm9hcmRQcm94eS5oIgorCisj
aW1wb3J0IDxXZWJDb3JlL0NvbG9yLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtUGFzdGVi
b2FyZC5oPgorI2ltcG9ydCA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvVVJMLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0
IHsKKwordm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRUeXBlcyhjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzKQor
eworICAgIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuZ2V0VHlwZXMocGFzdGVi
b2FyZFR5cGVzKTsKK30KKwordm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRQ
YXRobmFtZXNGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZFR5cGUsIFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMpCit7CisgICAgUGxh
dGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5nZXRQYXRobmFtZXNGb3JUeXBlKHBhdGhu
YW1lcywgcGFzdGVib2FyZFR5cGUpOworfQorCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0
UGFzdGVib2FyZFN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgc3RyaW5n
ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5zdHJpbmdGb3JUeXBlKHBhc3Rl
Ym9hcmRUeXBlKTsKK30KKwordm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRC
dWZmZXJGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZFR5cGUsIFNoYXJlZE1lbW9yeTo6SGFuZGxlJiBoYW5kbGUsIHVpbnQ2NF90JiBz
aXplKQoreworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IFBsYXRmb3JtUGFzdGVi
b2FyZChwYXN0ZWJvYXJkTmFtZSkuYnVmZmVyRm9yVHlwZShwYXN0ZWJvYXJkVHlwZSk7CisgICAg
aWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBzaXplID0gYnVmZmVyLT5zaXplKCk7
CisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5QnVmZmVyID0gU2hhcmVkTWVt
b3J5OjpjcmVhdGUoc2l6ZSk7CisgICAgaWYgKCFzaGFyZWRNZW1vcnlCdWZmZXIpCisgICAgICAg
IHJldHVybjsKKyAgICBtZW1jcHkoc2hhcmVkTWVtb3J5QnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+
ZGF0YSgpLCBzaXplKTsKKyAgICBzaGFyZWRNZW1vcnlCdWZmZXItPmNyZWF0ZUhhbmRsZShoYW5k
bGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOworfQorCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94
eTo6cGFzdGVib2FyZENvcHkoY29uc3QgU3RyaW5nJiBmcm9tUGFzdGVib2FyZCwgY29uc3QgU3Ry
aW5nJiB0b1Bhc3RlYm9hcmQsIHVpbnQ2NF90JiBuZXdDaGFuZ2VDb3VudCkKK3sKKyAgICBuZXdD
aGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZCh0b1Bhc3RlYm9hcmQpLmNvcHkoZnJvbVBh
c3RlYm9hcmQpOworfQorCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZENo
YW5nZUNvdW50KGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIHVpbnQ2NF90JiBjaGFuZ2VD
b3VudCkKK3sKKyAgICBjaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJk
TmFtZSkuY2hhbmdlQ291bnQoKTsKK30KKwordm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBh
c3RlYm9hcmRVbmlxdWVOYW1lKFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCit7CisgICAgcGFzdGVi
b2FyZE5hbWUgPSBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnVuaXF1ZU5hbWUoKTsKK30KKwordm9pZCBX
ZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRDb2xvcihjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmROYW1lLCBXZWJDb3JlOjpDb2xvciYgY29sb3IpCit7CisgICAgY29sb3IgPSBQbGF0Zm9y
bVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNvbG9yKCk7ICAgIAorfQorCit2b2lkIFdlYlBh
c3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZFVSTChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRO
YW1lLCBXVEY6OlN0cmluZyYgdXJsU3RyaW5nKQoreworICAgIHVybFN0cmluZyA9IFBsYXRmb3Jt
UGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkudXJsKCkuc3RyaW5nKCk7Cit9CisKK3ZvaWQgV2Vi
UGFzdGVib2FyZFByb3h5OjphZGRQYXN0ZWJvYXJkVHlwZXMoY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgdWludDY0X3Qm
IG5ld0NoYW5nZUNvdW50KQoreworICAgIG5ld0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJv
YXJkKHBhc3RlYm9hcmROYW1lKS5hZGRUeXBlcyhwYXN0ZWJvYXJkVHlwZXMpOworfQorCit2b2lk
IFdlYlBhc3RlYm9hcmRQcm94eTo6c2V0UGFzdGVib2FyZFR5cGVzKGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIHVpbnQ2
NF90JiBuZXdDaGFuZ2VDb3VudCkKK3sKKyAgICBuZXdDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFz
dGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc2V0VHlwZXMocGFzdGVib2FyZFR5cGVzKTsKK30KKwor
dm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnNldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlKGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMsIHVpbnQ2NF90JiBuZXdDaGFuZ2VDb3Vu
dCkKK3sKKyAgICBuZXdDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJk
TmFtZSkuc2V0UGF0aG5hbWVzRm9yVHlwZShwYXRobmFtZXMsIHBhc3RlYm9hcmRUeXBlKTsKK30K
Kwordm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnNldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlKGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUs
IGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1aW50NjRfdCYgbmV3Q2hhbmdlQ291bnQpCit7CisgICAg
bmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnNldFN0
cmluZ0ZvclR5cGUoc3RyaW5nLCBwYXN0ZWJvYXJkVHlwZSk7Cit9CisKK3ZvaWQgV2ViUGFzdGVi
b2FyZFByb3h5OjpzZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTaGFyZWRNZW1v
cnk6OkhhbmRsZSYgaGFuZGxlLCB1aW50NjRfdCBzaXplLCB1aW50NjRfdCYgbmV3Q2hhbmdlQ291
bnQpCit7CisgICAgaWYgKGhhbmRsZS5pc051bGwoKSkgeworICAgICAgICBuZXdDaGFuZ2VDb3Vu
dCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc2V0QnVmZmVyRm9yVHlwZSgw
LCBwYXN0ZWJvYXJkVHlwZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUmVmUHRyPFNo
YXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5QnVmZmVyID0gU2hhcmVkTWVtb3J5OjpjcmVhdGUoaGFu
ZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KTsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBi
dWZmZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyICo+
KHNoYXJlZE1lbW9yeUJ1ZmZlci0+ZGF0YSgpKSwgc2l6ZSk7CisgICAgbmV3Q2hhbmdlQ291bnQg
PSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnNldEJ1ZmZlckZvclR5cGUoYnVm
ZmVyLCBwYXN0ZWJvYXJkVHlwZSk7Cit9CisKKyNpZiBQTEFURk9STShJT1MpCit2b2lkIFdlYlBh
c3RlYm9hcmRQcm94eTo6d3JpdGVXZWJDb250ZW50VG9QYXN0ZWJvYXJkKGNvbnN0IFdlYkNvcmU6
OlBhc3RlYm9hcmRXZWJDb250ZW50JiBjb250ZW50KQoreworICAgIFBsYXRmb3JtUGFzdGVib2Fy
ZCgpLndyaXRlKGNvbnRlbnQpOworfQorCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6d3JpdGVJ
bWFnZVRvUGFzdGVib2FyZChjb25zdCBXZWJDb3JlOjpQYXN0ZWJvYXJkSW1hZ2UmIHBhc3RlYm9h
cmRJbWFnZSkKK3sKKyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQoKS53cml0ZShwYXN0ZWJvYXJkSW1h
Z2UpOworfQorCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6d3JpdGVTdHJpbmdUb1Bhc3RlYm9h
cmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0KQorewor
ICAgIFBsYXRmb3JtUGFzdGVib2FyZCgpLndyaXRlKHBhc3RlYm9hcmRUeXBlLCB0ZXh0KTsKK30K
Kwordm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnJlYWRTdHJpbmdGcm9tUGFzdGVib2FyZCh1aW50
NjRfdCBpbmRleCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgV1RGOjpTdHJpbmcmIHZh
bHVlKQoreworICAgIHZhbHVlID0gUGxhdGZvcm1QYXN0ZWJvYXJkKCkucmVhZFN0cmluZyhpbmRl
eCwgcGFzdGVib2FyZFR5cGUpOworfQorCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6cmVhZFVS
TEZyb21QYXN0ZWJvYXJkKHVpbnQ2NF90IGluZGV4LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRU
eXBlLCBTdHJpbmcmIHVybCkKK3sKKyAgICB1cmwgPSBQbGF0Zm9ybVBhc3RlYm9hcmQoKS5yZWFk
VVJMKGluZGV4LCBwYXN0ZWJvYXJkVHlwZSk7Cit9CisKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5
OjpyZWFkQnVmZmVyRnJvbVBhc3RlYm9hcmQodWludDY0X3QgaW5kZXgsIGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZFR5cGUsIFNoYXJlZE1lbW9yeTo6SGFuZGxlJiBoYW5kbGUsIHVpbnQ2NF90JiBz
aXplKQoreworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IFBsYXRmb3JtUGFzdGVi
b2FyZCgpLnJlYWRCdWZmZXIoaW5kZXgsIHBhc3RlYm9hcmRUeXBlKTsKKyAgICBpZiAoIWJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuOworICAgIHNpemUgPSBidWZmZXItPnNpemUoKTsKKyAgICBSZWZQ
dHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnlCdWZmZXIgPSBTaGFyZWRNZW1vcnk6OmNyZWF0
ZShzaXplKTsKKyAgICBpZiAoIXNoYXJlZE1lbW9yeUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1lbWNweShzaGFyZWRNZW1vcnlCdWZmZXItPmRhdGEoKSwgYnVmZmVyLT5kYXRhKCksIHNp
emUpOworICAgIHNoYXJlZE1lbW9yeUJ1ZmZlci0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVk
TWVtb3J5OjpSZWFkT25seSk7Cit9CisKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0
ZWJvYXJkSXRlbXNDb3VudCh1aW50NjRfdCYgaXRlbXNDb3VudCkKK3sKKyAgICBpdGVtc0NvdW50
ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKCkuY291bnQoKTsKK30KKworI2VuZGlmCisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlBy
b2Nlc3NQb29sQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0JKHJldmlzaW9uIDE3Nzc5MikKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zODIsMTM2ICszODIsNiBAQCBib29sIFdlYlByb2Nlc3NQb29sOjpvbWl0UERG
U3VwcG9ydCgpCiAgICAgcmV0dXJuIFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVs
dHNdIGJvb2xGb3JLZXk6QCJXZWJLaXRPbWl0UERGU3VwcG9ydCJdOwogfQogCi12b2lkIFdlYlBy
b2Nlc3NQb29sOjpnZXRQYXN0ZWJvYXJkVHlwZXMoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFt
ZSwgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcykKLXsKLSAgICBQbGF0Zm9ybVBhc3Rl
Ym9hcmQocGFzdGVib2FyZE5hbWUpLmdldFR5cGVzKHBhc3RlYm9hcmRUeXBlcyk7Ci19Ci0KLXZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OmdldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlKGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIFZlY3Rv
cjxTdHJpbmc+JiBwYXRobmFtZXMpCi17Ci0gICAgUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9h
cmROYW1lKS5nZXRQYXRobmFtZXNGb3JUeXBlKHBhdGhuYW1lcywgcGFzdGVib2FyZFR5cGUpOwot
fQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpnZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBT
dHJpbmcmIHN0cmluZykKLXsKLSAgICBzdHJpbmcgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVi
b2FyZE5hbWUpLnN0cmluZ0ZvclR5cGUocGFzdGVib2FyZFR5cGUpOwotfQotCi12b2lkIFdlYlBy
b2Nlc3NQb29sOjpnZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBTaGFyZWRNZW1vcnk6Okhh
bmRsZSYgaGFuZGxlLCB1aW50NjRfdCYgc2l6ZSkKLXsKLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVy
PiBidWZmZXIgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmJ1ZmZlckZvclR5
cGUocGFzdGVib2FyZFR5cGUpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm47Ci0g
ICAgc2l6ZSA9IGJ1ZmZlci0+c2l6ZSgpOwotICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJl
ZE1lbW9yeUJ1ZmZlciA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKHNpemUpOwotICAgIGlmICghc2hh
cmVkTWVtb3J5QnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAgbWVtY3B5KHNoYXJlZE1lbW9y
eUJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPmRhdGEoKSwgc2l6ZSk7Ci0gICAgc2hhcmVkTWVtb3J5
QnVmZmVyLT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KTsKLX0K
LQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGFzdGVib2FyZENvcHkoY29uc3QgU3RyaW5nJiBmcm9t
UGFzdGVib2FyZCwgY29uc3QgU3RyaW5nJiB0b1Bhc3RlYm9hcmQsIHVpbnQ2NF90JiBuZXdDaGFu
Z2VDb3VudCkKLXsKLSAgICBuZXdDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZCh0b1Bh
c3RlYm9hcmQpLmNvcHkoZnJvbVBhc3RlYm9hcmQpOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29s
OjpnZXRQYXN0ZWJvYXJkQ2hhbmdlQ291bnQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwg
dWludDY0X3QmIGNoYW5nZUNvdW50KQotewotICAgIGNoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0
ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jaGFuZ2VDb3VudCgpOwotfQotCi12b2lkIFdlYlByb2Nl
c3NQb29sOjpnZXRQYXN0ZWJvYXJkVW5pcXVlTmFtZShTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQot
ewotICAgIHBhc3RlYm9hcmROYW1lID0gUGxhdGZvcm1QYXN0ZWJvYXJkOjp1bmlxdWVOYW1lKCk7
Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmdldFBhc3RlYm9hcmRDb2xvcihjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lLCBXZWJDb3JlOjpDb2xvciYgY29sb3IpCi17Ci0gICAgY29sb3Ig
PSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLmNvbG9yKCk7ICAgIAotfQotCi12
b2lkIFdlYlByb2Nlc3NQb29sOjpnZXRQYXN0ZWJvYXJkVVJMKGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZE5hbWUsIFdURjo6U3RyaW5nJiB1cmxTdHJpbmcpCi17Ci0gICAgdXJsU3RyaW5nID0gUGxh
dGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS51cmwoKS5zdHJpbmcoKTsKLX0KLQotdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6YWRkUGFzdGVib2FyZFR5cGVzKGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZE5hbWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIHVpbnQ2NF90
JiBuZXdDaGFuZ2VDb3VudCkKLXsKLSAgICBuZXdDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVi
b2FyZChwYXN0ZWJvYXJkTmFtZSkuYWRkVHlwZXMocGFzdGVib2FyZFR5cGVzKTsKLX0KLQotdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2V0UGFzdGVib2FyZFR5cGVzKGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZE5hbWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIHVpbnQ2NF90
JiBuZXdDaGFuZ2VDb3VudCkKLXsKLSAgICBuZXdDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVi
b2FyZChwYXN0ZWJvYXJkTmFtZSkuc2V0VHlwZXMocGFzdGVib2FyZFR5cGVzKTsKLX0KLQotdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2V0UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5cGUoY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhdGhuYW1lcywgdWludDY0X3QmIG5ld0NoYW5nZUNvdW50KQotewot
ICAgIG5ld0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5z
ZXRQYXRobmFtZXNGb3JUeXBlKHBhdGhuYW1lcywgcGFzdGVib2FyZFR5cGUpOwotfQotCi12b2lk
IFdlYlByb2Nlc3NQb29sOjpzZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJp
bmcmIHN0cmluZywgdWludDY0X3QmIG5ld0NoYW5nZUNvdW50KQotewotICAgIG5ld0NoYW5nZUNv
dW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5zZXRTdHJpbmdGb3JUeXBl
KHN0cmluZywgcGFzdGVib2FyZFR5cGUpOwotfQotCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRQ
YXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgaGFu
ZGxlLCB1aW50NjRfdCBzaXplLCB1aW50NjRfdCYgbmV3Q2hhbmdlQ291bnQpCi17Ci0gICAgaWYg
KGhhbmRsZS5pc051bGwoKSkgewotICAgICAgICBuZXdDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFz
dGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc2V0QnVmZmVyRm9yVHlwZSgwLCBwYXN0ZWJvYXJkVHlw
ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hh
cmVkTWVtb3J5QnVmZmVyID0gU2hhcmVkTWVtb3J5OjpjcmVhdGUoaGFuZGxlLCBTaGFyZWRNZW1v
cnk6OlJlYWRPbmx5KTsKLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBTaGFyZWRC
dWZmZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyICo+KHNoYXJlZE1lbW9yeUJ1
ZmZlci0+ZGF0YSgpKSwgc2l6ZSk7Ci0gICAgbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3Rl
Ym9hcmQocGFzdGVib2FyZE5hbWUpLnNldEJ1ZmZlckZvclR5cGUoYnVmZmVyLCBwYXN0ZWJvYXJk
VHlwZSk7Ci19Ci0KLSNpZiBQTEFURk9STShJT1MpCi12b2lkIFdlYlByb2Nlc3NQb29sOjp3cml0
ZVdlYkNvbnRlbnRUb1Bhc3RlYm9hcmQoY29uc3QgV2ViQ29yZTo6UGFzdGVib2FyZFdlYkNvbnRl
bnQmIGNvbnRlbnQpCi17Ci0gICAgUGxhdGZvcm1QYXN0ZWJvYXJkKCkud3JpdGUoY29udGVudCk7
Ci19Ci0KLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OndyaXRlSW1hZ2VUb1Bhc3RlYm9hcmQoY29uc3Qg
V2ViQ29yZTo6UGFzdGVib2FyZEltYWdlJiBwYXN0ZWJvYXJkSW1hZ2UpCi17Ci0gICAgUGxhdGZv
cm1QYXN0ZWJvYXJkKCkud3JpdGUocGFzdGVib2FyZEltYWdlKTsKLX0KLQotdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6d3JpdGVTdHJpbmdUb1Bhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
VHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0KQotewotICAgIFBsYXRmb3JtUGFzdGVib2FyZCgpLndy
aXRlKHBhc3RlYm9hcmRUeXBlLCB0ZXh0KTsKLX0KLQotdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVh
ZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKHVpbnQ2NF90IGluZGV4LCBjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmRUeXBlLCBXVEY6OlN0cmluZyYgdmFsdWUpCi17Ci0gICAgdmFsdWUgPSBQbGF0Zm9ybVBh
c3RlYm9hcmQoKS5yZWFkU3RyaW5nKGluZGV4LCBwYXN0ZWJvYXJkVHlwZSk7Ci19Ci0KLXZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnJlYWRVUkxGcm9tUGFzdGVib2FyZCh1aW50NjRfdCBpbmRleCwgY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgU3RyaW5nJiB1cmwpCi17Ci0gICAgdXJsID0gUGxh
dGZvcm1QYXN0ZWJvYXJkKCkucmVhZFVSTChpbmRleCwgcGFzdGVib2FyZFR5cGUpOwotfQotCi12
b2lkIFdlYlByb2Nlc3NQb29sOjpyZWFkQnVmZmVyRnJvbVBhc3RlYm9hcmQodWludDY0X3QgaW5k
ZXgsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIFNoYXJlZE1lbW9yeTo6SGFuZGxlJiBo
YW5kbGUsIHVpbnQ2NF90JiBzaXplKQotewotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZl
ciA9IFBsYXRmb3JtUGFzdGVib2FyZCgpLnJlYWRCdWZmZXIoaW5kZXgsIHBhc3RlYm9hcmRUeXBl
KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIHNpemUgPSBidWZmZXIt
PnNpemUoKTsKLSAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnlCdWZmZXIgPSBT
aGFyZWRNZW1vcnk6OmNyZWF0ZShzaXplKTsKLSAgICBpZiAoIXNoYXJlZE1lbW9yeUJ1ZmZlcikK
LSAgICAgICAgcmV0dXJuOwotICAgIG1lbWNweShzaGFyZWRNZW1vcnlCdWZmZXItPmRhdGEoKSwg
YnVmZmVyLT5kYXRhKCksIHNpemUpOwotICAgIHNoYXJlZE1lbW9yeUJ1ZmZlci0+Y3JlYXRlSGFu
ZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSk7Ci19Ci0KLXZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OmdldFBhc3RlYm9hcmRJdGVtc0NvdW50KHVpbnQ2NF90JiBpdGVtc0NvdW50KQotewot
ICAgIGl0ZW1zQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQoKS5jb3VudCgpOwotfQotCi0jZW5k
aWYKLQogYm9vbCBXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuICFtX3VzZXJPYnNlcnZhYmxlUGFnZUNvdW50ZXIudmFsdWUoKSAm
JiAhbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyLnZhbHVlKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxNzc3OTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEwNTMsNiArMTA1MywxMSBAQAog
CQk3QzM4NzQzNDE3MkY1NjE1MDAxQkQ4OEEgLyogUGFnZUJhbm5lci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzM4NzQzMzE3MkY1NjE1MDAxQkQ4
OEEgLyogUGFnZUJhbm5lci5jcHAgKi87IH07CiAJCTdDM0Y4QzkwMTczQUY1MkQwMDdCN0YzOSAv
KiBQbHVnaW5JbmZvcm1hdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3QzNGOEM4RTE3M0FGNTJEMDA3QjdGMzkgLyogUGx1Z2luSW5mb3JtYXRp
b24uY3BwICovOyB9OwogCQk3QzNGOEM5MTE3M0FGNTJEMDA3QjdGMzkgLyogUGx1Z2luSW5mb3Jt
YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdD
M0Y4QzhGMTczQUY1MkQwMDdCN0YzOSAvKiBQbHVnaW5JbmZvcm1hdGlvbi5oICovOyB9OworCQk3
QzQ2OTRDMzFBNEI0QjA0MDBBRDU4NDUgLyogV2ViUGFzdGVib2FyZFByb3h5LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNDY5NEMxMUE0QjRCMDQw
MEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHkuY3BwICovOyB9OworCQk3QzQ2OTRDNDFBNEI0
QjA0MDBBRDU4NDUgLyogV2ViUGFzdGVib2FyZFByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzQ2OTRDMjFBNEI0QjA0MDBBRDU4NDUgLyogV2Vi
UGFzdGVib2FyZFByb3h5LmggKi87IH07CisJCTdDNDY5NEM5MUE0QjRFQTEwMEFENTg0NSAvKiBX
ZWJQYXN0ZWJvYXJkUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0Njk0QzcxQTRCNEVBMDAwQUQ1ODQ1IC8qIFdl
YlBhc3RlYm9hcmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CisJCTdDNDY5NENBMUE0
QjRFQTEwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0Njk0QzgxQTRCNEVBMTAwQUQ1
ODQ1IC8qIFdlYlBhc3RlYm9hcmRQcm94eU1lc3NhZ2VzLmggKi87IH07CisJCTdDNDY5NENDMUE0
QjUxMEEwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHlDb2NvYS5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNDY5NENCMUE0QjUxMEEwMEFENTg0
NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHlDb2NvYS5tbSAqLzsgfTsKIAkJN0M0RUQzMjkxQTMxMTlE
OTAwNzlCRDQ5IC8qIEluamVjdGVkQnVuZGxlQ1NTU3R5bGVEZWNsYXJhdGlvbkhhbmRsZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0RUQzMjcxQTMx
MTlEOTAwNzlCRDQ5IC8qIEluamVjdGVkQnVuZGxlQ1NTU3R5bGVEZWNsYXJhdGlvbkhhbmRsZS5o
ICovOyB9OwogCQk3QzZEMzdGQzE3MkY1NTVGMDA5RDI4NDcgLyogUGFnZUJhbm5lck1hYy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNkQzN0ZBMTcy
RjU1NUYwMDlEMjg0NyAvKiBQYWdlQmFubmVyTWFjLm1tICovOyB9OwogCQk3QzZFNzBGQjE4QjJE
QzdBMDBGMjRFMkUgLyogV2ViUHJvY2Vzc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M2RTcwRjkxOEIyRDRBMDAwRjI0RTJFIC8qIFdlYlBy
b2Nlc3NDb2NvYS5tbSAqLzsgfTsKQEAgLTMxNDIsNiArMzE0NywxMiBAQAogCQk3QzM4NzQzMzE3
MkY1NjE1MDAxQkQ4OEEgLyogUGFnZUJhbm5lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQYWdlQmFubmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0MzRjhDOEUxNzNBRjUyRDAwN0I3RjM5IC8qIFBsdWdpbkluZm9ybWF0aW9uLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsdWdpbkluZm9ybWF0aW9uLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MzRjhDOEYxNzNBRjUyRDAwN0I3RjM5IC8q
IFBsdWdpbkluZm9ybWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBs
dWdpbkluZm9ybWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDNDY5NEMx
MUE0QjRCMDQwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUGFzdGVib2FyZFByb3h5LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M0Njk0QzIxQTRCNEIwNDAwQUQ1ODQ1IC8qIFdlYlBhc3Rl
Ym9hcmRQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQYXN0ZWJv
YXJkUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M0Njk0QzUxQTRCNEI4
NTAwQUQ1ODQ1IC8qIFdlYlBhc3RlYm9hcmRQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBXZWJQYXN0ZWJvYXJkUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTdDNDY5NEM3MUE0QjRFQTAwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJk
UHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV2ViUGFzdGVib2FyZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJN0M0Njk0QzgxQTRCNEVBMTAwQUQ1ODQ1IC8qIFdlYlBhc3RlYm9h
cmRQcm94eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBh
c3RlYm9hcmRQcm94eU1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdD
NDY5NENCMUE0QjUxMEEwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHlDb2NvYS5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlBhc3RlYm9hcmRQcm94eUNv
Y29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzRFRDMyNjFBMzExOUQ5MDA3
OUJENDkgLyogSW5qZWN0ZWRCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uSGFuZGxlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVkQnVuZGxlQ1NTU3R5bGVE
ZWNsYXJhdGlvbkhhbmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDNEVE
MzI3MUEzMTE5RDkwMDc5QkQ0OSAvKiBJbmplY3RlZEJ1bmRsZUNTU1N0eWxlRGVjbGFyYXRpb25I
YW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVD
U1NTdHlsZURlY2xhcmF0aW9uSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdDNkQzN0ZBMTcyRjU1NUYwMDlEMjg0NyAvKiBQYWdlQmFubmVyTWFjLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGFnZUJhbm5lck1hYy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ1NzEsNiArNDU4Miw5IEBACiAJCQkJQzA2QzYwOTQxMjRD
MTQ0MzAwMDE2ODJGIC8qIFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuaCAqLywKIAkJCQlCQzdC
NjI1MTEyQTQzQzk2MDBEMTc0QTQgLyogV2ViUGFnZUdyb3VwRGF0YS5jcHAgKi8sCiAJCQkJQkM3
QjYyNTAxMkE0M0M5NjAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cERhdGEuaCAqLywKKwkJCQk3QzQ2
OTRDMTFBNEI0QjA0MDBBRDU4NDUgLyogV2ViUGFzdGVib2FyZFByb3h5LmNwcCAqLywKKwkJCQk3
QzQ2OTRDMjFBNEI0QjA0MDBBRDU4NDUgLyogV2ViUGFzdGVib2FyZFByb3h5LmggKi8sCisJCQkJ
N0M0Njk0QzUxQTRCNEI4NTAwQUQ1ODQ1IC8qIFdlYlBhc3RlYm9hcmRQcm94eS5tZXNzYWdlcy5p
biAqLywKIAkJCQlDMDMzN0REQzEyN0E1MjFDMDA4RkY0RjQgLyogV2ViUGxhdGZvcm1Ub3VjaFBv
aW50LmNwcCAqLywKIAkJCQlCQzU3NDRFRDEyNjM4RkIzMDA2RjBGMTIgLyogV2ViUG9wdXBJdGVt
LmNwcCAqLywKIAkJCQlCQzU3NDRFRTEyNjM4RkIzMDA2RjBGMTIgLyogV2ViUG9wdXBJdGVtLmgg
Ki8sCkBAIC00NjgzLDYgKzQ2OTcsNyBAQAogCQkJCTFBRkU0MzYzMThCNkMwODEwMDlDN0E0OCAv
KiBVSURlbGVnYXRlLm1tICovLAogCQkJCTFBQzAyNzNFMTk2NjIyRDYwMEMxMkI3NSAvKiBXZWJQ
YWdlUHJveHlDb2NvYS5tbSAqLywKIAkJCQk3Q0U0RDIxNTFBNDkxNDg0MDBDN0YxNTIgLyogV2Vi
UHJvY2Vzc1Bvb2xDb2NvYS5tbSAqLywKKwkJCQk3QzQ2OTRDQjFBNEI1MTBBMDBBRDU4NDUgLyog
V2ViUGFzdGVib2FyZFByb3h5Q29jb2EubW0gKi8sCiAJCQkJMUEwNEY2MTcxQTRBM0E3QTAwQTIx
QjZFIC8qIFdlYlByb2Nlc3NQcm94eUNvY29hLm1tICovLAogCQkJCTFBRDAxQkNCMTkwNUQ1NDkw
MEM5QzQ1RiAvKiBXS1JlbG9hZEZyYW1lRXJyb3JSZWNvdmVyeUF0dGVtcHRlci5oICovLAogCQkJ
CTFBRDAxQkNBMTkwNUQ1NDkwMEM5QzQ1RiAvKiBXS1JlbG9hZEZyYW1lRXJyb3JSZWNvdmVyeUF0
dGVtcHRlci5tbSAqLywKQEAgLTY5OTgsNiArNzAxMyw4IEBACiAJCQkJQzBDRTcyOUYxMjQ3RTcx
RDAwQkMwRUM0IC8qIFdlYlBhZ2VNZXNzYWdlcy5oICovLAogCQkJCUJDQkQzOTEyMTI1QkIxQTgw
MEQyQzI5RiAvKiBXZWJQYWdlUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAogCQkJCUJDQkQz
OTEzMTI1QkIxQTgwMEQyQzI5RiAvKiBXZWJQYWdlUHJveHlNZXNzYWdlcy5oICovLAorCQkJCTdD
NDY5NEM3MUE0QjRFQTAwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwICovLAorCQkJCTdDNDY5NEM4MUE0QjRFQTEwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJk
UHJveHlNZXNzYWdlcy5oICovLAogCQkJCTFBMDQzRjY3MTI1MTREOEIwMEZGQkZCNSAvKiBXZWJQ
cm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCiAJCQkJMUEwNDNGNjgxMjUx
NEQ4QjAwRkZCRkI1IC8qIFdlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCAqLywKIAkJCQlC
QzMwNjZCQzEyNUE0NDIxMDBFNzEyNzggLyogV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAg
Ki8sCkBAIC03MzU4LDYgKzczNzUsNyBAQAogCQkJCUJDMTRFMTBBMTIwQjkwNUUwMDgyNkMwQyAv
KiBJbmplY3RlZEJ1bmRsZVBhZ2VGb3JtQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDVD
NjZBMTEzNEI5RDM4MDA0RkUyQTggLyogSW5qZWN0ZWRCdW5kbGVQYWdlRnVsbFNjcmVlbkNsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBOEM2QTkxMUUzQkE1RjAwODEyRkI3IC8qIEluamVj
dGVkQnVuZGxlUGFnZUxvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0M0Njk0Q0Ex
QTRCNEVBMTAwQUQ1ODQ1IC8qIFdlYlBhc3RlYm9hcmRQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzgxNDdBOTEyRjY0Q0RBMDA3QjJDMzIgLyogSW5qZWN0ZWRCdW5kbGVQYWdl
UG9saWN5Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0E4QzZCMDExRTNDMDg3MDA4MTJG
QjcgLyogSW5qZWN0ZWRCdW5kbGVQYWdlVUlDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MzNFMEQxMTI0MDhFODYwMDM2MEYzRiAvKiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmggaW4g
SGVhZGVycyAqLywKQEAgLTczNzAsNiArNzM4OCw3IEBACiAJCQkJNTE4MzUzREYxODg3MTI4QjAw
RDlGRTQ0IC8qIEtleWVkRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFMDBENUQxODJE
QURFMTAwMDg3REQ3IC8qIEtleWVkRW5jb2Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFMDkz
NzgxNEZCMTI4QzAwMTEzOEQ5IC8qIExheWVySG9zdGluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTdDNDY5NEM0MUE0QjRCMDQwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHkuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMEMzNjVBMThDMDU1NTgwMEY2MDdENyAvKiBMYXllclJlcHJl
c2VudGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTkyREMxMTEyRjhCQTQ2MDAxN0FGNjUg
LyogTGF5ZXJUcmVlQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUExREMzNDAxOTYzNDZE
NzAwRkY3MDU5IC8qIExlZ2FjeVNlc3Npb25TdGF0ZUNvZGluZy5oIGluIEhlYWRlcnMgKi8sCkBA
IC05MDM5LDYgKzkwNTgsNyBAQAogCQkJCUUxRUU1M0U3MTFGOENGRkIwMENDQkVFNCAvKiBJbmpl
Y3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMxNEUx
MDkxMjBCOTA1RTAwODI2QzBDIC8qIEluamVjdGVkQnVuZGxlUGFnZUZvcm1DbGllbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQ0Q1QzY2QTAxMzRCOUQzODAwNEZFMkE4IC8qIEluamVjdGVkQnVu
ZGxlUGFnZUZ1bGxTY3JlZW5DbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0M0Njk0QzMx
QTRCNEIwNDAwQUQ1ODQ1IC8qIFdlYlBhc3RlYm9hcmRQcm94eS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQ0E4QzZBODExRTNCQTVGMDA4MTJGQjcgLyogSW5qZWN0ZWRCdW5kbGVQYWdlTG9hZGVy
Q2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDODE0N0FBMTJGNjRDREEwMDdCMkMzMiAv
KiBJbmplY3RlZEJ1bmRsZVBhZ2VQb2xpY3lDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NjU5QzU1MUUxMzAwMDY0MTAwMjVDMEMyIC8qIEluamVjdGVkQnVuZGxlUGFnZVJlc291cmNlTG9h
ZENsaWVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTkxMjMsNiArOTE0Myw3IEBACiAJCQkJMUEy
MTYxQjExMUYzNzY2NDAwOEFEMEY1IC8qIE5QUnVudGltZU9iamVjdE1hcC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQTIxNjJCMDExRjM4OTcxMDA4QUQwRjUgLyogTlBSdW50aW1lVXRpbGl0aWVz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMkQ4NEE0MTI3RjZBRDEwMDFFQjk2MiAvKiBOUFZh
cmlhbnREYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdDNDY5NEM5MUE0QjRFQTEwMEFENTg0
NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkM4QUNBMTQxNjY3MEQ4OTAwNEMxOTQxIC8qIE9iakNPYmplY3RHcmFwaC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUJDOEFDQTE2MTY2NzBEODkwMDRDMTk0MSAvKiBPYmpDT2JqZWN0R3Jh
cGhDb2RlcnMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0NGNjczMzEyQzdGMTVDMDA4RjlDMzUg
LyogT3JpZ2luQW5kRGF0YWJhc2VzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTM0Niw2ICs5MzY3
LDcgQEAKIAkJCQlCQzBFNUZFNjEyRDY5NzE2MDAxMkE3MkEgLyogV2ViR2VvbG9jYXRpb25NYW5h
Z2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMEU2MDYxMTJENkJBOTEwMDEyQTcyQSAvKiBX
ZWJHZW9sb2NhdGlvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkM1NENBQ0MxMkQ2NDI5MTAwNUM2N0IwIC8qIFdlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdDNDY5NENDMUE0QjUxMEEwMEFENTg0NSAvKiBXZWJQ
YXN0ZWJvYXJkUHJveHlDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDMEU2MTgyMTJENkNC
MUQwMDEyQTcyQSAvKiBXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzBFNjA3NDEyRDZCQzIwMDAxMkE3MkEgLyogV2ViR2Vv
bG9jYXRpb25Qb3NpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzFCRTFGMzEyRDU0REJE
MDAwNEEyMjggLyogV2ViR2VvbG9jYXRpb25Qcm92aWRlci5jcHAgaW4gU291cmNlcyAqLywKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1
Z2luLm1tCShyZXZpc2lvbiAxNzc3OTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvUERGL1BERlBsdWdpbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNDUsOCArNDUsOCBAQAog
I2ltcG9ydCAiV2ViRXZlbnRDb252ZXJzaW9uLmgiCiAjaW1wb3J0ICJXZWJQYWdlLmgiCiAjaW1w
b3J0ICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgorI2ltcG9ydCAiV2ViUGFzdGVib2FyZFByb3h5
TWVzc2FnZXMuaCIKICNpbXBvcnQgIldlYlByb2Nlc3MuaCIKLSNpbXBvcnQgIldlYlByb2Nlc3NQ
b29sTWVzc2FnZXMuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgog
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KICNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0pTU3RyaW5nUmVmLmg+CkBAIC0xNjYyLDggKzE2NjIsOCBAQCB2b2lkIFBERlBsdWdp
bjo6d3JpdGVJdGVtc1RvUGFzdGVib2FyZChOCiAgICAgICAgIHBhc3RlYm9hcmRUeXBlcy5hcHBl
bmQodHlwZSk7CiAKICAgICB1aW50NjRfdCBuZXdDaGFuZ2VDb3VudDsKLSAgICBXZWJQcm9jZXNz
OjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6
V2ViUHJvY2Vzc1Bvb2w6OlNldFBhc3RlYm9hcmRUeXBlcyhwYXN0ZWJvYXJkTmFtZSwgcGFzdGVi
b2FyZFR5cGVzKSwKLSAgICAgICAgTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpTZXRQYXN0ZWJv
YXJkVHlwZXM6OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2hh
cmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBh
c3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZFR5cGVzKHBhc3RlYm9hcmROYW1lLCBwYXN0ZWJv
YXJkVHlwZXMpLAorICAgICAgICBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0
ZWJvYXJkVHlwZXM6OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CiAKICAgICBmb3IgKE5TVUlu
dGVnZXIgaSA9IDAsIGNvdW50ID0gaXRlbXMuY291bnQ7IGkgPCBjb3VudDsgKytpKSB7CiAgICAg
ICAgIE5TU3RyaW5nICp0eXBlID0gW3R5cGVzIG9iamVjdEF0SW5kZXg6aV07CkBAIC0xNjc3LDgg
KzE2NzcsNyBAQCB2b2lkIFBERlBsdWdpbjo6d3JpdGVJdGVtc1RvUGFzdGVib2FyZChOCiAKICAg
ICAgICAgaWYgKFt0eXBlIGlzRXF1YWxUb1N0cmluZzpOU1N0cmluZ1Bib2FyZFR5cGVdIHx8IFt0
eXBlIGlzRXF1YWxUb1N0cmluZzpOU1Bhc3RlYm9hcmRUeXBlU3RyaW5nXSkgewogICAgICAgICAg
ICAgUmV0YWluUHRyPE5TU3RyaW5nPiBwbGFpblRleHRTdHJpbmcgPSBhZG9wdE5TKFtbTlNTdHJp
bmcgYWxsb2NdIGluaXRXaXRoRGF0YTpkYXRhIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5n
XSk7Ci0gICAgICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6OlNldFBhc3RlYm9hcmRT
dHJpbmdGb3JUeXBlKHBhc3RlYm9hcmROYW1lLCB0eXBlLCBwbGFpblRleHRTdHJpbmcuZ2V0KCkp
LAotICAgICAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6U2V0UGFzdGVib2Fy
ZFN0cmluZ0ZvclR5cGU6OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CisgICAgICAgICAgICBX
ZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhN
ZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShw
YXN0ZWJvYXJkTmFtZSwgdHlwZSwgcGxhaW5UZXh0U3RyaW5nLmdldCgpKSwgTWVzc2FnZXM6Oldl
YlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGU6OlJlcGx5KG5ld0No
YW5nZUNvdW50KSwgMCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBSZWZQdHI8U2hh
cmVkQnVmZmVyPiBidWZmZXIgPSBTaGFyZWRCdWZmZXI6OndyYXBOU0RhdGEoZGF0YSk7CiAKQEAg
LTE2ODksOCArMTY4OCw3IEBAIHZvaWQgUERGUGx1Z2luOjp3cml0ZUl0ZW1zVG9QYXN0ZWJvYXJk
KE4KICAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeSA9IFNoYXJl
ZE1lbW9yeTo6Y3JlYXRlKGJ1ZmZlci0+c2l6ZSgpKTsKICAgICAgICAgICAgIG1lbWNweShzaGFy
ZWRNZW1vcnktPmRhdGEoKSwgYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsKICAgICAg
ICAgICAgIHNoYXJlZE1lbW9yeS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpS
ZWFkT25seSk7Ci0gICAgICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6OlNldFBhc3Rl
Ym9hcmRCdWZmZXJGb3JUeXBlKHBhc3RlYm9hcmROYW1lLCB0eXBlLCBoYW5kbGUsIGJ1ZmZlci0+
c2l6ZSgpKSwKLSAgICAgICAgICAgICAgICBNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6OlNldFBh
c3RlYm9hcmRCdWZmZXJGb3JUeXBlOjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDApOworICAgICAg
ICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZEJ1ZmZlckZv
clR5cGUocGFzdGVib2FyZE5hbWUsIHR5cGUsIGhhbmRsZSwgYnVmZmVyLT5zaXplKCkpLCBNZXNz
YWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZTo6UmVw
bHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKICAgICAgICAgfQogICAgIH0KIH0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAJKHJldmlzaW9uIDE3Nzc5MikKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsOCArNDAsOCBAQAogI2luY2x1ZGUgIldlYklEQkZh
Y3RvcnlCYWNrZW5kLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2luY2x1ZGUgIldlYlBhc3Rl
Ym9hcmRPdmVycmlkZXMuaCIKKyNpbmNsdWRlICJXZWJQYXN0ZWJvYXJkUHJveHlNZXNzYWdlcy5o
IgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbE1lc3Nh
Z2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlIDxX
ZWJDb3JlL0NvbG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZS5oPgpAQCAtMzM5LDcgKzMzOSw3IEBAIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpn
ZXRUeXBlcyhWZWMKICAgICBpZiAoIXR5cGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpHZXRQYXN0ZWJvYXJkVHlwZXMocGFzdGVi
b2FyZE5hbWUpLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6OkdldFBhc3RlYm9hcmRUeXBlczo6
UmVwbHkodHlwZXMpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQ
YXN0ZWJvYXJkVHlwZXMocGFzdGVib2FyZE5hbWUpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFBy
b3h5OjpHZXRQYXN0ZWJvYXJkVHlwZXM6OlJlcGx5KHR5cGVzKSwgMCk7CiB9CiAKIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmJ1ZmZlckZv
clR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSkKQEAgLTM1Miw3ICszNTIsNyBAQCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1
ZmZlcj4gV2ViUGxhCiAgICAgLy8gRmFsbGJhY2sgdG8gbWVzc2FnaW5nIHRoZSBVSSBwcm9jZXNz
IGZvciBuYXRpdmUgcGFzdGVib2FyZCBjb250ZW50LgogICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxl
IGhhbmRsZTsKICAgICB1aW50NjRfdCBzaXplID0gMDsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQo
KS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vz
c1Bvb2w6OkdldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKHBhc3RlYm9hcmROYW1lLCBwYXN0ZWJv
YXJkVHlwZSksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6R2V0UGFzdGVib2FyZEJ1ZmZlckZv
clR5cGU6OlJlcGx5KGhhbmRsZSwgc2l6ZSksIDApOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJv
YXJkUHJveHk6OkdldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKHBhc3RlYm9hcmROYW1lLCBwYXN0
ZWJvYXJkVHlwZSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRC
dWZmZXJGb3JUeXBlOjpSZXBseShoYW5kbGUsIHNpemUpLCAwKTsKICAgICBpZiAoaGFuZGxlLmlz
TnVsbCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFy
ZWRNZW1vcnlCdWZmZXIgPSBTaGFyZWRNZW1vcnk6OmNyZWF0ZShoYW5kbGUsIFNoYXJlZE1lbW9y
eTo6UmVhZE9ubHkpOwpAQCAtMzYxLDYyICszNjEsNjIgQEAgUGFzc1JlZlB0cjxXZWJDb3JlOjpT
aGFyZWRCdWZmZXI+IFdlYlBsYQogCiB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0UGF0
aG5hbWVzRm9yVHlwZShWZWN0b3I8U3RyaW5nPiYgcGF0aG5hbWVzLCBjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewotICAgIFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzUG9vbDo6R2V0UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5cGUocGFzdGVi
b2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBlKSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpHZXRQ
YXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZTo6UmVwbHkocGF0aG5hbWVzKSwgMCk7CisgICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVz
c2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5cGUo
cGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBlKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQ
cm94eTo6R2V0UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5cGU6OlJlcGx5KHBhdGhuYW1lcyksIDAp
OwogfQogCiBTdHJpbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzdHJpbmdGb3JUeXBlKGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7
CiAgICAgU3RyaW5nIHZhbHVlOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6R2V0UGFz
dGVib2FyZFN0cmluZ0ZvclR5cGUocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBlKSwgTWVz
c2FnZXM6OldlYlByb2Nlc3NQb29sOjpHZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZTo6UmVwbHko
dmFsdWUpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJv
YXJkU3RyaW5nRm9yVHlwZShwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGUpLCBNZXNzYWdl
czo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZTo6UmVwbHko
dmFsdWUpLCAwKTsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKIGxvbmcgV2ViUGxhdGZvcm1TdHJh
dGVnaWVzOjpjb3B5KGNvbnN0IFN0cmluZyYgZnJvbVBhc3RlYm9hcmQsIGNvbnN0IFN0cmluZyYg
dG9QYXN0ZWJvYXJkKQogewogICAgIHVpbnQ2NF90IG5ld0NoYW5nZUNvdW50OwotICAgIFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzUG9vbDo6UGFzdGVib2FyZENvcHkoZnJvbVBhc3RlYm9hcmQsIHRvUGFz
dGVib2FyZCksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6UGFzdGVib2FyZENvcHk6OlJlcGx5
KG5ld0NoYW5nZUNvdW50KSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6
UGFzdGVib2FyZENvcHkoZnJvbVBhc3RlYm9hcmQsIHRvUGFzdGVib2FyZCksIE1lc3NhZ2VzOjpX
ZWJQYXN0ZWJvYXJkUHJveHk6OlBhc3RlYm9hcmRDb3B5OjpSZXBseShuZXdDaGFuZ2VDb3VudCks
IDApOwogICAgIHJldHVybiBuZXdDaGFuZ2VDb3VudDsKIH0KIAogbG9uZyBXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OmNoYW5nZUNvdW50KGNvbnN0IFdURjo6U3RyaW5nICZwYXN0ZWJvYXJkTmFtZSkK
IHsKICAgICB1aW50NjRfdCBjaGFuZ2VDb3VudDsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vzc1Bv
b2w6OkdldFBhc3RlYm9hcmRDaGFuZ2VDb3VudChwYXN0ZWJvYXJkTmFtZSksIE1lc3NhZ2VzOjpX
ZWJQcm9jZXNzUG9vbDo6R2V0UGFzdGVib2FyZENoYW5nZUNvdW50OjpSZXBseShjaGFuZ2VDb3Vu
dCksIDApOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRD
aGFuZ2VDb3VudChwYXN0ZWJvYXJkTmFtZSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6
OkdldFBhc3RlYm9hcmRDaGFuZ2VDb3VudDo6UmVwbHkoY2hhbmdlQ291bnQpLCAwKTsKICAgICBy
ZXR1cm4gY2hhbmdlQ291bnQ7CiB9CiAKIFN0cmluZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnVu
aXF1ZU5hbWUoKQogewogICAgIFN0cmluZyBwYXN0ZWJvYXJkTmFtZTsKLSAgICBXZWJQcm9jZXNz
OjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6
V2ViUHJvY2Vzc1Bvb2w6OkdldFBhc3RlYm9hcmRVbmlxdWVOYW1lKCksIE1lc3NhZ2VzOjpXZWJQ
cm9jZXNzUG9vbDo6R2V0UGFzdGVib2FyZFVuaXF1ZU5hbWU6OlJlcGx5KHBhc3RlYm9hcmROYW1l
KSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZFVu
aXF1ZU5hbWUoKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZFVu
aXF1ZU5hbWU6OlJlcGx5KHBhc3RlYm9hcmROYW1lKSwgMCk7CiAgICAgcmV0dXJuIHBhc3RlYm9h
cmROYW1lOwogfQogCiBDb2xvciBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvbG9yKGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAgICAgQ29sb3IgY29sb3I7Ci0gICAgV2ViUHJvY2Vz
czo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6
OldlYlByb2Nlc3NQb29sOjpHZXRQYXN0ZWJvYXJkQ29sb3IocGFzdGVib2FyZE5hbWUpLCBNZXNz
YWdlczo6V2ViUHJvY2Vzc1Bvb2w6OkdldFBhc3RlYm9hcmRDb2xvcjo6UmVwbHkoY29sb3IpLCAw
KTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkQ29sb3Io
cGFzdGVib2FyZE5hbWUpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJv
YXJkQ29sb3I6OlJlcGx5KGNvbG9yKSwgMCk7CiAgICAgcmV0dXJuIGNvbG9yOwogfQogCiBVUkwg
V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjp1cmwoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkK
IHsKICAgICBTdHJpbmcgdXJsU3RyaW5nOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6
R2V0UGFzdGVib2FyZFVSTChwYXN0ZWJvYXJkTmFtZSksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9v
bDo6R2V0UGFzdGVib2FyZFVSTDo6UmVwbHkodXJsU3RyaW5nKSwgMCk7CisgICAgV2ViUHJvY2Vz
czo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6
OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZFVSTChwYXN0ZWJvYXJkTmFtZSksIE1l
c3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRVUkw6OlJlcGx5KHVybFN0
cmluZyksIDApOwogICAgIHJldHVybiBVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmxTdHJpbmcpOwog
fQogCiBsb25nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6YWRkVHlwZXMoY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsK
ICAgICB1aW50NjRfdCBuZXdDaGFuZ2VDb3VudDsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vzc1Bv
b2w6OkFkZFBhc3RlYm9hcmRUeXBlcyhwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGVzKSwg
TWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpBZGRQYXN0ZWJvYXJkVHlwZXM6OlJlcGx5KG5ld0No
YW5nZUNvdW50KSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6QWRkUGFz
dGVib2FyZFR5cGVzKHBhc3RlYm9hcmROYW1lLCBwYXN0ZWJvYXJkVHlwZXMpLCBNZXNzYWdlczo6
V2ViUGFzdGVib2FyZFByb3h5OjpBZGRQYXN0ZWJvYXJkVHlwZXM6OlJlcGx5KG5ld0NoYW5nZUNv
dW50KSwgMCk7CiAgICAgcmV0dXJuIG5ld0NoYW5nZUNvdW50OwogfQogCiBsb25nIFdlYlBsYXRm
b3JtU3RyYXRlZ2llczo6c2V0VHlwZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRU
eXBlcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKICAgICB1aW50NjRfdCBuZXdD
aGFuZ2VDb3VudDsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6OlNldFBhc3RlYm9hcmRU
eXBlcyhwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGVzKSwgTWVzc2FnZXM6OldlYlByb2Nl
c3NQb29sOjpTZXRQYXN0ZWJvYXJkVHlwZXM6OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7Cisg
ICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5
bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZFR5cGVzKHBhc3Rl
Ym9hcmROYW1lLCBwYXN0ZWJvYXJkVHlwZXMpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5
OjpTZXRQYXN0ZWJvYXJkVHlwZXM6OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CiAgICAgcmV0
dXJuIG5ld0NoYW5nZUNvdW50OwogfQogCkBAIC00MzMsNDQgKzQzMyw0NCBAQCBsb25nIFdlYlBs
YXRmb3JtU3RyYXRlZ2llczo6c2V0QnVmZmVyRm9yCiAgICAgICAgIH0KICAgICB9CiAgICAgdWlu
dDY0X3QgbmV3Q2hhbmdlQ291bnQ7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpTZXRQ
YXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGUsIGhh
bmRsZSwgYnVmZmVyID8gYnVmZmVyLT5zaXplKCkgOiAwKSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQ
b29sOjpTZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZTo6UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAw
KTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkQnVmZmVy
Rm9yVHlwZShwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGUsIGhhbmRsZSwgYnVmZmVyID8g
YnVmZmVyLT5zaXplKCkgOiAwKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFz
dGVib2FyZEJ1ZmZlckZvclR5cGU6OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CiAgICAgcmV0
dXJuIG5ld0NoYW5nZUNvdW50OwogfQogCiBsb25nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0
UGF0aG5hbWVzRm9yVHlwZShjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aG5hbWVzLCBjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewog
ICAgIHVpbnQ2NF90IG5ld0NoYW5nZUNvdW50OwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBh
cmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9v
bDo6U2V0UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5cGUocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9h
cmRUeXBlLCBwYXRobmFtZXMpLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6OlNldFBhc3RlYm9h
cmRQYXRobmFtZXNGb3JUeXBlOjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDApOworICAgIFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3Nh
Z2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlKHBh
c3RlYm9hcmROYW1lLCBwYXN0ZWJvYXJkVHlwZSwgcGF0aG5hbWVzKSwgTWVzc2FnZXM6OldlYlBh
c3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5cGU6OlJlcGx5KG5ld0No
YW5nZUNvdW50KSwgMCk7CiAgICAgcmV0dXJuIG5ld0NoYW5nZUNvdW50OwogfQogCiBsb25nIFdl
YlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0U3RyaW5nRm9yVHlwZShjb25zdCBTdHJpbmcmIHN0cmlu
ZywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSkKIHsKICAgICB1aW50NjRfdCBuZXdDaGFuZ2VDb3VudDsKLSAgICBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2Vi
UHJvY2Vzc1Bvb2w6OlNldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlKHBhc3RlYm9hcmROYW1lLCBw
YXN0ZWJvYXJkVHlwZSwgc3RyaW5nKSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpTZXRQYXN0
ZWJvYXJkU3RyaW5nRm9yVHlwZTo6UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKKyAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNz
YWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShwYXN0
ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGUsIHN0cmluZyksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJv
YXJkUHJveHk6OlNldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlOjpSZXBseShuZXdDaGFuZ2VDb3Vu
dCksIDApOwogICAgIHJldHVybiBuZXdDaGFuZ2VDb3VudDsKIH0KIAogI2lmIFBMQVRGT1JNKElP
UykKIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjp3cml0ZVRvUGFzdGVib2FyZChjb25zdCBX
ZWJDb3JlOjpQYXN0ZWJvYXJkV2ViQ29udGVudCYgY29udGVudCkKIHsKLSAgICBXZWJQcm9jZXNz
OjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
cm9jZXNzUG9vbDo6V3JpdGVXZWJDb250ZW50VG9QYXN0ZWJvYXJkKGNvbnRlbnQpLCAwKTsKKyAg
ICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OldyaXRlV2ViQ29udGVudFRvUGFzdGVib2FyZChj
b250ZW50KSwgMCk7CiB9CiAKIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjp3cml0ZVRvUGFz
dGVib2FyZChjb25zdCBXZWJDb3JlOjpQYXN0ZWJvYXJkSW1hZ2UmIGltYWdlKQogewotICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYlByb2Nlc3NQb29sOjpXcml0ZUltYWdlVG9QYXN0ZWJvYXJkKGltYWdlKSwgMCk7Cisg
ICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpXcml0ZUltYWdlVG9QYXN0ZWJvYXJkKGltYWdl
KSwgMCk7CiB9CiAKIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjp3cml0ZVRvUGFzdGVib2Fy
ZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0g
ICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6OldyaXRlU3RyaW5nVG9QYXN0ZWJvYXJkKHBhc3RlYm9h
cmRUeXBlLCB0ZXh0KSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpXcml0ZVN0
cmluZ1RvUGFzdGVib2FyZChwYXN0ZWJvYXJkVHlwZSwgdGV4dCksIDApOwogfQogCiBpbnQgV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRQYXN0ZWJvYXJkSXRlbXNDb3VudCgpCiB7CiAgICAgdWlu
dDY0X3QgaXRlbXNDb3VudDsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6OkdldFBhc3Rl
Ym9hcmRJdGVtc0NvdW50KCksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6R2V0UGFzdGVib2Fy
ZEl0ZW1zQ291bnQ6OlJlcGx5KGl0ZW1zQ291bnQpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFz
dGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkSXRlbXNDb3VudCgpLCBNZXNzYWdlczo6V2ViUGFz
dGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkSXRlbXNDb3VudDo6UmVwbHkoaXRlbXNDb3VudCks
IDApOwogICAgIHJldHVybiBpdGVtc0NvdW50OwogfQogCkBAIC00NzgsNyArNDc4LDcgQEAgUGFz
c1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IFdlYlBsYQogewogICAgIFNoYXJlZE1lbW9y
eTo6SGFuZGxlIGhhbmRsZTsKICAgICB1aW50NjRfdCBzaXplID0gMDsKLSAgICBXZWJQcm9jZXNz
OjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6
V2ViUHJvY2Vzc1Bvb2w6OlJlYWRCdWZmZXJGcm9tUGFzdGVib2FyZChpbmRleCwgcGFzdGVib2Fy
ZFR5cGUpLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6OlJlYWRCdWZmZXJGcm9tUGFzdGVib2Fy
ZDo6UmVwbHkoaGFuZGxlLCBzaXplKSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQ
cm94eTo6UmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJkKGluZGV4LCBwYXN0ZWJvYXJkVHlwZSksIE1l
c3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlJlYWRCdWZmZXJGcm9tUGFzdGVib2FyZDo6UmVw
bHkoaGFuZGxlLCBzaXplKSwgMCk7CiAgICAgaWYgKGhhbmRsZS5pc051bGwoKSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5QnVmZmVyID0g
U2hhcmVkTWVtb3J5OjpjcmVhdGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KTsKQEAg
LTQ4OCwyMSArNDg4LDIxIEBAIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBXZWJQ
bGEKIFdlYkNvcmU6OlVSTCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnJlYWRVUkxGcm9tUGFzdGVi
b2FyZChpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpCiB7CiAgICAgU3Ry
aW5nIHVybFN0cmluZzsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6OlJlYWRVUkxGcm9t
UGFzdGVib2FyZChpbmRleCwgcGFzdGVib2FyZFR5cGUpLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Bv
b2w6OlJlYWRVUkxGcm9tUGFzdGVib2FyZDo6UmVwbHkodXJsU3RyaW5nKSwgMCk7CisgICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVz
c2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6UmVhZFVSTEZyb21QYXN0ZWJvYXJkKGluZGV4LCBw
YXN0ZWJvYXJkVHlwZSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlJlYWRVUkxGcm9t
UGFzdGVib2FyZDo6UmVwbHkodXJsU3RyaW5nKSwgMCk7CiAgICAgcmV0dXJuIFVSTChQYXJzZWRV
UkxTdHJpbmcsIHVybFN0cmluZyk7CiB9CiAKIFN0cmluZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6
OnJlYWRTdHJpbmdGcm9tUGFzdGVib2FyZChpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZFR5cGUpCiB7CiAgICAgU3RyaW5nIHZhbHVlOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
UG9vbDo6UmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKGluZGV4LCBwYXN0ZWJvYXJkVHlwZSksIE1l
c3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6UmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkOjpSZXBseSh2
YWx1ZSksIDApOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlJlYWRTdHJpbmdG
cm9tUGFzdGVib2FyZChpbmRleCwgcGFzdGVib2FyZFR5cGUpLCBNZXNzYWdlczo6V2ViUGFzdGVi
b2FyZFByb3h5OjpSZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQ6OlJlcGx5KHZhbHVlKSwgMCk7CiAg
ICAgcmV0dXJuIHZhbHVlOwogfQogCiBsb25nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y2hhbmdl
Q291bnQoKQogewogICAgIHVpbnQ2NF90IGNoYW5nZUNvdW50OwotICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQ
cm9jZXNzUG9vbDo6R2V0UGFzdGVib2FyZENoYW5nZUNvdW50KFN0cmluZygpKSwgTWVzc2FnZXM6
OldlYlByb2Nlc3NQb29sOjpHZXRQYXN0ZWJvYXJkQ2hhbmdlQ291bnQ6OlJlcGx5KGNoYW5nZUNv
dW50KSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2Fy
ZENoYW5nZUNvdW50KFN0cmluZygpKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0
UGFzdGVib2FyZENoYW5nZUNvdW50OjpSZXBseShjaGFuZ2VDb3VudCksIDApOwogICAgIHJldHVy
biBjaGFuZ2VDb3VudDsKIH0KIAo=
</data>
<flag name="review"
          id="268712"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>