<?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>114000</bug_id>
          
          <creation_ts>2013-04-04 23:26:07 -0700</creation_ts>
          <short_desc>Remove the chromium directories from WebCore/Modules</short_desc>
          <delta_ts>2013-04-05 00:30:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>alecflett</cc>
    
    <cc>dgrogan</cc>
    
    <cc>jsbell</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>869578</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-04-04 23:26:07 -0700</bug_when>
    <thetext>Remove the chromium directories from WebCore/Modules</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869579</commentid>
    <comment_count>1</comment_count>
      <attachid>196582</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-04-04 23:26:45 -0700</bug_when>
    <thetext>Created attachment 196582
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869603</commentid>
    <comment_count>2</comment_count>
      <attachid>196582</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-04-05 00:30:25 -0700</bug_when>
    <thetext>Comment on attachment 196582
Patch

Clearing flags on attachment: 196582

Committed r147718: &lt;http://trac.webkit.org/changeset/147718&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869604</commentid>
    <comment_count>3</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-04-05 00:30:27 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>196582</attachid>
            <date>2013-04-04 23:26:45 -0700</date>
            <delta_ts>2013-04-05 00:30:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-114000-20130404232633.patch</filename>
            <type>text/plain</type>
            <size>49301</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ3NzA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTE4ODI2ZTQ0YmIyYzc1
Y2UyM2ExNzdlMTRiNDVlZjM4Y2E1ODlkNS4uYjZkMGIyMzJmNmVkMTEwODU5M2U1YmViNTJhYTFj
NzUxNDY0MGQ1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEzLTA0LTA0ICBCZW5q
YW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhl
IGNocm9taXVtIGRpcmVjdG9yaWVzIGZyb20gV2ViQ29yZS9Nb2R1bGVzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQwMDAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXJzdCBzdGVwIGluIGNsZWFuaW5n
IHRoZSBjb2RlOiByZW1vdmUgdGhlIGNocm9taXVtLXNwZWNpZmljIGZpbGVzLgorCisgICAgICAg
ICogTW9kdWxlcy9maWxlc3lzdGVtL2Nocm9taXVtL0RPTUZpbGVTeXN0ZW1DaHJvbWl1bS5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9maWxlc3lzdGVtL2Nocm9taXVtL0RhdGFUcmFu
c2Zlckl0ZW1GaWxlU3lzdGVtQ2hyb21pdW0uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVs
ZXMvZmlsZXN5c3RlbS9jaHJvbWl1bS9EcmFnZ2VkSXNvbGF0ZWRGaWxlU3lzdGVtLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL2ZpbGVzeXN0ZW0vY2hyb21pdW0vRHJhZ2dlZElzb2xh
dGVkRmlsZVN5c3RlbS5oOiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2No
cm9taXVtL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlQ2hyb21pdW0uY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2Nocm9taXVtL0lEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlQ2hyb21pdW0uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9jaHJv
bWl1bS9TcGVlY2hTeW50aGVzaXNDaHJvbWl1bS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogTW9k
dWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZU9ic2VydmVyLmg6IFJlbW92ZWQuCisg
ICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJv
bWl1bS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1
bS9RdW90YVRyYWNrZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJh
c2UvY2hyb21pdW0vUXVvdGFUcmFja2VyLmg6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy93
ZWJkYXRhYmFzZS9jaHJvbWl1bS9TUUxUcmFuc2FjdGlvbkNsaWVudENocm9taXVtLmNwcDogUmVt
b3ZlZC4KKwogMjAxMy0wNC0wNCAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZW1vdmUgV1RGVVJMIGZyb20gV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vY2hyb21pdW0vRE9NRmlsZVN5c3RlbUNocm9t
aXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9jaHJvbWl1bS9ET01G
aWxlU3lzdGVtQ2hyb21pdW0uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTQx
YjExZWIxNzgzNWE2MDQ2MWRiMTM3NmZhZmNhNDdjNTM1ZTJkLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5
c3RlbS9jaHJvbWl1bS9ET01GaWxlU3lzdGVtQ2hyb21pdW0uY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTA5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAq
IG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRE9NRmlsZVN5c3Rl
bUJhc2UuaCIKLQotI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKLQotI2luY2x1ZGUgIkRPTUZpbGVQ
YXRoLmgiCi0jaW5jbHVkZSAiRmlsZVN5c3RlbVR5cGUuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY29uc3QgY2hhciBleHRlcm5hbFBhdGhQcmVmaXhb
XSA9ICJleHRlcm5hbCI7Ci0KLS8vIHN0YXRpYwotYm9vbCBET01GaWxlU3lzdGVtQmFzZTo6aXNW
YWxpZFR5cGUoRmlsZVN5c3RlbVR5cGUgdHlwZSkKLXsKLSAgICByZXR1cm4gdHlwZSA9PSBGaWxl
U3lzdGVtVHlwZVRlbXBvcmFyeSB8fCB0eXBlID09IEZpbGVTeXN0ZW1UeXBlUGVyc2lzdGVudCB8
fCB0eXBlID09IEZpbGVTeXN0ZW1UeXBlSXNvbGF0ZWQgfHwgdHlwZSA9PSBGaWxlU3lzdGVtVHlw
ZUV4dGVybmFsOwotfQotCi0vLyBzdGF0aWMKLWJvb2wgRE9NRmlsZVN5c3RlbUJhc2U6OmNyYWNr
RmlsZVN5c3RlbVVSTChjb25zdCBLVVJMJiB1cmwsIEZpbGVTeXN0ZW1UeXBlJiB0eXBlLCBTdHJp
bmcmIGZpbGVQYXRoKQotewotICAgIGlmICghdXJsLnByb3RvY29sSXMoImZpbGVzeXN0ZW0iKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCF1cmwuaW5uZXJVUkwoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3RyaW5nIHR5cGVTdHJpbmcgPSB1cmwuaW5uZXJVUkwo
KS0+cGF0aCgpLnN1YnN0cmluZygxKTsKLSAgICBpZiAodHlwZVN0cmluZyA9PSB0ZW1wb3JhcnlQ
YXRoUHJlZml4KQotICAgICAgICB0eXBlID0gRmlsZVN5c3RlbVR5cGVUZW1wb3Jhcnk7Ci0gICAg
ZWxzZSBpZiAodHlwZVN0cmluZyA9PSBwZXJzaXN0ZW50UGF0aFByZWZpeCkKLSAgICAgICAgdHlw
ZSA9IEZpbGVTeXN0ZW1UeXBlUGVyc2lzdGVudDsKLSAgICBlbHNlIGlmICh0eXBlU3RyaW5nID09
IGV4dGVybmFsUGF0aFByZWZpeCkKLSAgICAgICAgdHlwZSA9IEZpbGVTeXN0ZW1UeXBlRXh0ZXJu
YWw7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmaWxlUGF0aCA9IGRl
Y29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1cmwucGF0aCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBET01GaWxlU3lzdGVtQmFzZTo6c3VwcG9ydHNUb1VSTCgpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKGlzVmFsaWRUeXBlKG1fdHlwZSkpOwotICAgIHJldHVybiBtX3R5cGUgIT0gRmlsZVN5
c3RlbVR5cGVJc29sYXRlZDsKLX0KLQotS1VSTCBET01GaWxlU3lzdGVtQmFzZTo6Y3JlYXRlRmls
ZVN5c3RlbVVSTChjb25zdCBTdHJpbmcmIGZ1bGxQYXRoKSBjb25zdAotewotICAgIEFTU0VSVChE
T01GaWxlUGF0aDo6aXNBYnNvbHV0ZShmdWxsUGF0aCkpOwotCi0gICAgaWYgKHR5cGUoKSA9PSBG
aWxlU3lzdGVtVHlwZUV4dGVybmFsKSB7Ci0gICAgICAgIC8vIEZvciBleHRlcm5hbCBmaWxlc3lz
dGVtIG9yaWdpblN0cmluZyBjb3VsZCBiZSBkaWZmZXJlbnQgZnJvbSB3aGF0IHdlIGhhdmUgaW4g
bV9maWxlc3lzdGVtUm9vdFVSTC4KLSAgICAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7Ci0gICAg
ICAgIHJlc3VsdC5hcHBlbmQoImZpbGVzeXN0ZW06Iik7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQo
c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoIi8i
KTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChleHRlcm5hbFBhdGhQcmVmaXgpOwotICAgICAgICBy
ZXN1bHQuYXBwZW5kKG1fZmlsZXN5c3RlbVJvb3RVUkwucGF0aCgpKTsKLSAgICAgICAgLy8gUmVt
b3ZlIHRoZSBleHRyYSBsZWFkaW5nIHNsYXNoLgotICAgICAgICByZXN1bHQuYXBwZW5kKGVuY29k
ZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXMoZnVsbFBhdGguc3Vic3RyaW5nKDEpKSk7Ci0gICAgICAg
IHJldHVybiBLVVJMKFBhcnNlZFVSTFN0cmluZywgcmVzdWx0LnRvU3RyaW5nKCkpOwotICAgIH0K
LQotICAgIC8vIEZvciByZWd1bGFyIHR5cGVzIHdlIGNhbiBqdXN0IGFwcGVuZCB0aGUgZW50cnkn
cyBmdWxsUGF0aCB0byB0aGUgbV9maWxlc3lzdGVtUm9vdFVSTCB0aGF0IHNob3VsZCBsb29rIGxp
a2UgJ2ZpbGVzeXN0ZW06PG9yaWdpbj4vPHR5cGVQcmVmaXg+Jy4KLSAgICBBU1NFUlQoIW1fZmls
ZXN5c3RlbVJvb3RVUkwuaXNFbXB0eSgpKTsKLSAgICBLVVJMIHVybCA9IG1fZmlsZXN5c3RlbVJv
b3RVUkw7Ci0gICAgLy8gUmVtb3ZlIHRoZSBleHRyYSBsZWFkaW5nIHNsYXNoLgotICAgIHVybC5z
ZXRQYXRoKHVybC5wYXRoKCkgKyBlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzKGZ1bGxQYXRo
LnN1YnN0cmluZygxKSkpOwotICAgIHJldHVybiB1cmw7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtRmls
ZVN5c3RlbUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9j
aHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtRmlsZVN5c3RlbUNocm9taXVtLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggN2MzMmZlZjJlZDgxMDcwYzI2ODIxYzkxZjMxOGU5MWI5MDA2
ZWI1OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUZp
bGVTeXN0ZW1DaHJvbWl1bS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRp
c3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW1GaWxlU3lzdGVtLmgiCi0K
LSNpZiBFTkFCTEUoRklMRV9TWVNURU0pCi0KLSNpbmNsdWRlICJBc3luY0ZpbGVTeXN0ZW0uaCIK
LSNpbmNsdWRlICJBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3MuaCIKLSNpbmNsdWRlICJDaHJvbWl1
bURhdGFPYmplY3QuaCIKLSNpbmNsdWRlICJDbGlwYm9hcmRDaHJvbWl1bS5oIgotI2luY2x1ZGUg
IkRPTUZpbGVQYXRoLmgiCi0jaW5jbHVkZSAiRE9NRmlsZVN5c3RlbS5oIgotI2luY2x1ZGUgIkRp
cmVjdG9yeUVudHJ5LmgiCi0jaW5jbHVkZSAiRHJhZ2dlZElzb2xhdGVkRmlsZVN5c3RlbS5oIgot
I2luY2x1ZGUgIkVudHJ5LmgiCi0jaW5jbHVkZSAiRmlsZS5oIgotI2luY2x1ZGUgIkZpbGVFbnRy
eS5oIgotI2luY2x1ZGUgIkZpbGVNZXRhZGF0YS5oIgotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIK
LSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotLy8gc3RhdGljCi1QYXNzUmVmUHRyPEVudHJ5PiBEYXRhVHJhbnNmZXJJdGVtRmlsZVN5
c3RlbTo6d2Via2l0R2V0QXNFbnRyeShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0LCBEYXRhVHJhbnNmZXJJdGVtKiBpdGVtKQotewotICAgIERhdGFUcmFuc2Zl
ckl0ZW1Qb2xpY3lXcmFwcGVyKiBpdGVtUG9saWN5V3JhcHBlciA9IHN0YXRpY19jYXN0PERhdGFU
cmFuc2Zlckl0ZW1Qb2xpY3lXcmFwcGVyKj4oaXRlbSk7Ci0KLSAgICBpZiAoIWl0ZW1Qb2xpY3lX
cmFwcGVyLT5kYXRhT2JqZWN0SXRlbSgpLT5pc0ZpbGVuYW1lKCkpCi0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihzdGF0aWNfY2FzdDxFbnRyeSo+KDApKTsKLQotICAgIC8vIEZvciBkcmFnZ2VkIGZp
bGVzIGdldEFzRmlsZSBtdXN0IGJlIHByZXR0eSBsaWdodHdlaWdodC4KLSAgICBCbG9iKiBmaWxl
ID0gaXRlbVBvbGljeVdyYXBwZXItPmdldEFzRmlsZSgpLmdldCgpOwotICAgIC8vIFRoZSBjbGlw
Ym9hcmQgbWF5IG5vdCBiZSBpbiBhIHJlYWRhYmxlIHN0YXRlLgotICAgIGlmICghZmlsZSkKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PEVudHJ5Kj4oMCkpOwotICAgIEFTU0VS
VChmaWxlLT5pc0ZpbGUoKSk7Ci0KLSAgICBEcmFnZ2VkSXNvbGF0ZWRGaWxlU3lzdGVtKiBmaWxl
c3lzdGVtID0gRHJhZ2dlZElzb2xhdGVkRmlsZVN5c3RlbTo6ZnJvbShpdGVtUG9saWN5V3JhcHBl
ci0+Y2xpcGJvYXJkKCktPmRhdGFPYmplY3QoKS5nZXQoKSk7Ci0gICAgRE9NRmlsZVN5c3RlbSog
ZG9tRmlsZVN5c3RlbSA9IGZpbGVzeXN0ZW0gPyBmaWxlc3lzdGVtLT5nZXRET01GaWxlU3lzdGVt
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpIDogMDsKLSAgICBpZiAoIWZpbGVzeXN0ZW0pIHsKLSAg
ICAgICAgLy8gSXNvbGF0ZWRGaWxlU3lzdGVtIG1heSBub3QgYmUgZW5hYmxlZC4KLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PEVudHJ5Kj4oMCkpOwotICAgIH0KLQotICAgIEFT
U0VSVChkb21GaWxlU3lzdGVtKTsKLQotICAgIC8vIFRoZSBkcm9wcGVkIGVudHJpZXMgYXJlIG1h
cHBlZCBhcyB0b3AtbGV2ZWwgZW50cmllcyBpbiB0aGUgaXNvbGF0ZWQgZmlsZXN5c3RlbS4KLSAg
ICBTdHJpbmcgdmlydHVhbFBhdGggPSBET01GaWxlUGF0aDo6YXBwZW5kKCIvIiwgdG9GaWxlKGZp
bGUpLT5uYW1lKCkpOwotCi0gICAgLy8gRklYTUU6IFRoaXMgaW52b2x2ZXMgc3luY2hyb25vdXMg
ZmlsZSBvcGVyYXRpb24uIENvbnNpZGVyIHBhc3NpbmcgZmlsZSB0eXBlIGRhdGEgd2hlbiB3ZSBk
aXNwYXRjaCBkcmFnIGV2ZW50LgotICAgIEZpbGVNZXRhZGF0YSBtZXRhZGF0YTsKLSAgICBpZiAo
IWdldEZpbGVNZXRhZGF0YSh0b0ZpbGUoZmlsZSktPnBhdGgoKSwgbWV0YWRhdGEpKQotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8RW50cnkqPigwKSk7Ci0KLSAgICBpZiAobWV0
YWRhdGEudHlwZSA9PSBGaWxlTWV0YWRhdGE6OlR5cGVEaXJlY3RvcnkpCi0gICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxFbnRyeSo+KERpcmVjdG9yeUVudHJ5OjpjcmVhdGUoZG9tRmlsZVN5c3Rl
bSwgdmlydHVhbFBhdGgpLmdldCgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RW50cnkqPihG
aWxlRW50cnk6OmNyZWF0ZShkb21GaWxlU3lzdGVtLCB2aXJ0dWFsUGF0aCkuZ2V0KCkpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vY2hyb21pdW0v
RHJhZ2dlZElzb2xhdGVkRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Zp
bGVzeXN0ZW0vY2hyb21pdW0vRHJhZ2dlZElzb2xhdGVkRmlsZVN5c3RlbS5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzNzI2MTU3YzM4MzBjZjlhN2JmYjU2MmI5NTFiYjdkMmI3
MzMzNGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL2Nocm9taXVtL0RyYWdnZWRJc29sYXRlZEZp
bGVTeXN0ZW0uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRp
b24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0g
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJEcmFnZ2VkSXNvbGF0ZWRGaWxlU3lzdGVtLmgiCi0KLSNpZiBFTkFC
TEUoRklMRV9TWVNURU0pCi0KLSNpbmNsdWRlICJET01GaWxlU3lzdGVtLmgiCi0jaW5jbHVkZSAi
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0j
aW5jbHVkZSAiU3VwcGxlbWVudGFibGUuaCIKLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLURyYWdnZWRJc29sYXRlZEZpbGVTeXN0ZW06On5EcmFn
Z2VkSXNvbGF0ZWRGaWxlU3lzdGVtKCkKLXsKLX0KLQotRE9NRmlsZVN5c3RlbSogRHJhZ2dlZElz
b2xhdGVkRmlsZVN5c3RlbTo6Z2V0RE9NRmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KQotewotICAgIEFTU0VSVCghbV9maWxlc3lzdGVtSWQu
aXNFbXB0eSgpKTsKLSAgICBpZiAoIW1fZmlsZXN5c3RlbSkgewotICAgICAgICBBU1NFUlQoc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0gICAgICAgIG1fZmlsZXN5c3RlbSA9IERPTUZpbGVTeXN0
ZW06OmNyZWF0ZUlzb2xhdGVkRmlsZVN5c3RlbShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBtX2Zp
bGVzeXN0ZW1JZCk7Ci0gICAgfQotICAgIHJldHVybiBtX2ZpbGVzeXN0ZW0uZ2V0KCk7Ci19Ci0K
LS8vIHN0YXRpYwotY29uc3QgY2hhciogRHJhZ2dlZElzb2xhdGVkRmlsZVN5c3RlbTo6c3VwcGxl
bWVudE5hbWUoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgcmV0dXJuICJE
cmFnZ2VkSXNvbGF0ZWRGaWxlU3lzdGVtIjsKLX0KLQotRHJhZ2dlZElzb2xhdGVkRmlsZVN5c3Rl
bTo6RHJhZ2dlZElzb2xhdGVkRmlsZVN5c3RlbShjb25zdCBTdHJpbmcmIGZpbGVzeXN0ZW1JZCkK
LSAgICA6IG1fZmlsZXN5c3RlbUlkKGZpbGVzeXN0ZW1JZCkKLXsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEZJTEVfU1lTVEVNKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL2Nocm9taXVtL0RyYWdnZWRJc29sYXRl
ZEZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9jaHJvbWl1
bS9EcmFnZ2VkSXNvbGF0ZWRGaWxlU3lzdGVtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDJkODdkOThjMmY0OTNjNTI5Mjg4ZTlkNDA5M2JmNTA5YmQyYmQ5M2QuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9maWxlc3lzdGVtL2Nocm9taXVtL0RyYWdnZWRJc29sYXRlZEZpbGVTeXN0ZW0uaAorKysgL2Rl
di9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIERyYWdnZWRJc29sYXRlZEZpbGVTeXN0ZW1f
aAotI2RlZmluZSBEcmFnZ2VkSXNvbGF0ZWRGaWxlU3lzdGVtX2gKLQotI2lmIEVOQUJMRShGSUxF
X1NZU1RFTSkKLQotI2luY2x1ZGUgIkNocm9taXVtRGF0YU9iamVjdC5oIgotI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgRE9NRmlsZVN5c3RlbTsKLQotY2xhc3MgRHJhZ2dlZElzb2xh
dGVkRmlsZVN5c3RlbSA6IHB1YmxpYyBTdXBwbGVtZW50PENocm9taXVtRGF0YU9iamVjdD4gewot
cHVibGljOgotICAgIH5EcmFnZ2VkSXNvbGF0ZWRGaWxlU3lzdGVtKCk7Ci0KLSAgICBzdGF0aWMg
UGFzc093blB0cjxEcmFnZ2VkSXNvbGF0ZWRGaWxlU3lzdGVtPiBjcmVhdGUoY29uc3QgU3RyaW5n
JiBmaWxlc3lzdGVtSWQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERyYWdn
ZWRJc29sYXRlZEZpbGVTeXN0ZW0oZmlsZXN5c3RlbUlkKSk7Ci0gICAgfQotCi0gICAgY29uc3Qg
U3RyaW5nJiBmaWxlc3lzdGVtSWQoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVzeXN0ZW1JZDsgfQot
ICAgIERPTUZpbGVTeXN0ZW0qIGdldERPTUZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCopOwotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7Ci0gICAgc3Rh
dGljIERyYWdnZWRJc29sYXRlZEZpbGVTeXN0ZW0qIGZyb20oQ2hyb21pdW1EYXRhT2JqZWN0KiBk
YXRhT2JqZWN0KSB7IHJldHVybiBzdGF0aWNfY2FzdDxEcmFnZ2VkSXNvbGF0ZWRGaWxlU3lzdGVt
Kj4oU3VwcGxlbWVudDxDaHJvbWl1bURhdGFPYmplY3Q+Ojpmcm9tKGRhdGFPYmplY3QsIHN1cHBs
ZW1lbnROYW1lKCkpKTsgfQotCi1wcml2YXRlOgotICAgIERyYWdnZWRJc29sYXRlZEZpbGVTeXN0
ZW0oY29uc3QgU3RyaW5nJiBmaWxlc3lzdGVtSWQpOwotICAgIFJlZlB0cjxET01GaWxlU3lzdGVt
PiBtX2ZpbGVzeXN0ZW07Ci0gICAgU3RyaW5nIG1fZmlsZXN5c3RlbUlkOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEZJTEVfU1lTVEVNKQotCi0jZW5k
aWYgLy8gRHJhZ2dlZElzb2xhdGVkRmlsZVN5c3RlbV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jaHJvbWl1bS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2Nocm9taXVt
L0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlQ2hyb21pdW0uY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAzYjU3MWQ5YzAyZWNhMzI1NzllMjUyMDEwYmVhOTE4Y2NmYWIxMjlkLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2Nocm9taXVtL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNl
Q2hyb21pdW0uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2VDaHJvbWl1bS5oIgot
Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
c3RhdGljIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlQ3JlYXRlKiBzX2lkYkZhY3RvcnlCYWNr
ZW5kSW50ZXJmYWNlQ3JlYXRlRnVuY3Rpb24gPSAwOwotCi12b2lkIHNldElEQkZhY3RvcnlCYWNr
ZW5kSW50ZXJmYWNlQ3JlYXRlRnVuY3Rpb24oSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2VDcmVh
dGUgaWRiRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2VDcmVhdGVGdW5jdGlvbikKLXsKLSAgICBzX2lk
YkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlQ3JlYXRlRnVuY3Rpb24gPSBpZGJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZUNyZWF0ZUZ1bmN0aW9uOwotfQotCi1QYXNzUmVmUHRyPElEQkZhY3RvcnlCYWNr
ZW5kSW50ZXJmYWNlPiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZTo6Y3JlYXRlKCkKLXsKLSAg
ICBBU1NFUlQoc19pZGJGYWN0b3J5QmFja2VuZEludGVyZmFjZUNyZWF0ZUZ1bmN0aW9uKTsKLSAg
ICAvLyBUaGVyZSdzIG5vIHJlYXNvbiB3aHkgd2UgbmVlZCB0byBhbGxvY2F0ZSBhIG5ldyBwcm94
eSBlYWNoIHRpbWUsIGJ1dAotICAgIC8vIHRoZXJlJ3MgYWxzbyBubyBzdHJvbmcgcmVhc29uIG5v
dCB0by4KLSAgICByZXR1cm4gc19pZGJGYWN0b3J5QmFja2VuZEludGVyZmFjZUNyZWF0ZUZ1bmN0
aW9uKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvY2hyb21pdW0vSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2VDaHJvbWl1bS5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2hyb21pdW0vSURCRmFjdG9yeUJhY2tlbmRJ
bnRlcmZhY2VDaHJvbWl1bS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTc0NTk0
YTU0MWVmMjE4N2M1MDEzYjAzNzcwMTE2NGNiOTFlOWQyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2Nocm9taXVtL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlQ2hyb21pdW0uaAorKysgL2Rldi9u
dWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotI2lmbmRlZiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZUNo
cm9taXVtX2gKLSNkZWZpbmUgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2VDaHJvbWl1bV9oCi0K
LSNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIgotCi0jaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdHlwZWRlZiBQYXNzUmVm
UHRyPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZUNyZWF0ZSgpOwotCi12b2lkIHNldElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlQ3JlYXRlRnVu
Y3Rpb24oSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2VDcmVhdGUpOwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0jZW5kaWYgLy8gSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2VDaHJvbWl1bV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9j
aHJvbWl1bS9TcGVlY2hTeW50aGVzaXNDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3NwZWVjaC9jaHJvbWl1bS9TcGVlY2hTeW50aGVzaXNDaHJvbWl1bS5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwYTE0MDRmZTYzNWE0M2M5ZTU4NjkxM2ExODYxMmFhNmNm
Mzk1MzIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvY2hyb21pdW0vU3BlZWNoU3ludGhlc2lzQ2hyb21p
dW0uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNwZWVjaFN5bnRoZXNpcy5o
IgotCi0jaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCi0KLSNpbmNsdWRlICJTcGVlY2hTeW50
aGVzaXNVdHRlcmFuY2UuaCIKLSNpbmNsdWRlICJTcGVlY2hTeW50aGVzaXNWb2ljZS5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi12b2lkIFNwZWVjaFN5bnRoZXNpczo6aW5pdGlhbGl6
ZVZvaWNlTGlzdCgpCi17Ci19Ci0KLWJvb2wgU3BlZWNoU3ludGhlc2lzOjpwZW5kaW5nKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgU3BlZWNoU3ludGhlc2lzOjpzcGVh
a2luZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFNwZWVjaFN5bnRo
ZXNpczo6cGF1c2VkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgU3Bl
ZWNoU3ludGhlc2lzOjpzcGVhayhTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqKQotewotfQotCi12
b2lkIFNwZWVjaFN5bnRoZXNpczo6Y2FuY2VsKCkKLXsKLX0KLQotdm9pZCBTcGVlY2hTeW50aGVz
aXM6OnBhdXNlKCkKLXsKLX0KLQotdm9pZCBTcGVlY2hTeW50aGVzaXM6OnJlc3VtZSgpCi17Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTUEVFQ0hfU1lO
VEhFU0lTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9j
aHJvbWl1bS9EYXRhYmFzZU9ic2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlT2JzZXJ2ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYjRiYzIyYTc2OWQ3NjYzODg1YmJmNmM4Y2Y3NzMyM2ZlMGE0MmU2NC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlT2JzZXJ2ZXIuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIERhdGFiYXNlT2JzZXJ2ZXJfaAotI2RlZmluZSBE
YXRhYmFzZU9ic2VydmVyX2gKLQotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIERhdGFiYXNl
QmFja2VuZEJhc2U7Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwotCi0vLyBUaGUgaW1w
bGVtZW50YXRpb24gb2YgdGhpcyBjbGFzcyBpcyBpbiB0aGUgV2ViS2l0IEFQSSAoQ2hyb21pdW0g
c291cmNlIHRyZWUpCi0vLyBpbiBXZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2ZXIu
Y3BwLgotY2xhc3MgRGF0YWJhc2VPYnNlcnZlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGJvb2wg
Y2FuRXN0YWJsaXNoRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIGxvbmcpOwotICAgIHN0YXRpYyB2b2lkIGRhdGFi
YXNlT3BlbmVkKERhdGFiYXNlQmFja2VuZEJhc2UqKTsKLSAgICBzdGF0aWMgdm9pZCBkYXRhYmFz
ZU1vZGlmaWVkKERhdGFiYXNlQmFja2VuZEJhc2UqKTsKLSAgICBzdGF0aWMgdm9pZCBkYXRhYmFz
ZUNsb3NlZChEYXRhYmFzZUJhY2tlbmRCYXNlKik7Ci0KLSAgICBzdGF0aWMgdm9pZCByZXBvcnRP
cGVuRGF0YWJhc2VSZXN1bHQoRGF0YWJhc2VCYWNrZW5kQmFzZSosIGludCBjYWxsc2l0ZSwgaW50
IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSk7Ci0gICAgc3RhdGljIHZvaWQg
cmVwb3J0Q2hhbmdlVmVyc2lvblJlc3VsdChEYXRhYmFzZUJhY2tlbmRCYXNlKiwgaW50IGNhbGxz
aXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKTsKLSAgICBzdGF0
aWMgdm9pZCByZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KERhdGFiYXNlQmFja2VuZEJhc2Uq
LCBpbnQgY2FsbHNpdGUsIGludCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUp
OwotICAgIHN0YXRpYyB2b2lkIHJlcG9ydENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KERhdGFiYXNl
QmFja2VuZEJhc2UqLCBpbnQgY2FsbHNpdGUsIGludCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxp
dGVFcnJvckNvZGUpOwotICAgIHN0YXRpYyB2b2lkIHJlcG9ydEV4ZWN1dGVTdGF0ZW1lbnRSZXN1
bHQoRGF0YWJhc2VCYWNrZW5kQmFzZSosIGludCBjYWxsc2l0ZSwgaW50IHdlYlNxbEVycm9yQ29k
ZSwgaW50IHNxbGl0ZUVycm9yQ29kZSk7Ci0gICAgc3RhdGljIHZvaWQgcmVwb3J0VmFjdXVtRGF0
YWJhc2VSZXN1bHQoRGF0YWJhc2VCYWNrZW5kQmFzZSosIGludCBzcWxpdGVFcnJvckNvZGUpOwot
fTsKLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKLQotI2VuZGlmIC8vIERh
dGFiYXNlT2JzZXJ2ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0RhdGFiYXNlVHJhY2tlckNocm9taXVt
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGExZDgxMjJlZDY4ZDUzNmYzNTky
YzhjMGI5YTI5MWIyNTUzOTQ2NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL0Rh
dGFiYXNlVHJhY2tlckNocm9taXVtLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI4OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgotCi0jaWYg
RU5BQkxFKFNRTF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIkRhdGFiYXNlQmFja2VuZEJhc2UuaCIK
LSNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRDb250ZXh0LmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VP
YnNlcnZlci5oIgotI2luY2x1ZGUgIlF1b3RhVHJhY2tlci5oIgotI2luY2x1ZGUgIlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luSGFzaC5oIgotI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIKLSNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1EYXRhYmFzZVRyYWNrZXImIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpCi17Ci0gICAgQXRv
bWljYWxseUluaXRpYWxpemVkU3RhdGljKERhdGFiYXNlVHJhY2tlciYsIHRyYWNrZXIgPSAqbmV3
IERhdGFiYXNlVHJhY2tlcigiIikpOwotICAgIHJldHVybiB0cmFja2VyOwotfQotCi1EYXRhYmFz
ZVRyYWNrZXI6OkRhdGFiYXNlVHJhY2tlcihjb25zdCBTdHJpbmcmKQotewotICAgIFNRTGl0ZUZp
bGVTeXN0ZW06OnJlZ2lzdGVyU1FMaXRlVkZTKCk7Ci19Ci0KLWJvb2wgRGF0YWJhc2VUcmFja2Vy
OjpjYW5Fc3RhYmxpc2hEYXRhYmFzZShEYXRhYmFzZUJhY2tlbmRDb250ZXh0KiBkYXRhYmFzZUNv
bnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5z
aWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBEYXRhYmFzZUVycm9yJiBlcnJvcikKLXsKLSAgICBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gZGF0YWJhc2VD
b250ZXh0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgYm9vbCBzdWNjZXNzID0gRGF0
YWJhc2VPYnNlcnZlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhc2Uoc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpOwotICAgIGlmICghc3VjY2VzcykK
LSAgICAgICAgZXJyb3IgPSBEYXRhYmFzZUVycm9yOjpHZW5lcmljU2VjdXJpdHlFcnJvcjsKLSAg
ICByZXR1cm4gc3VjY2VzczsKLX0KLQotYm9vbCBEYXRhYmFzZVRyYWNrZXI6OnJldHJ5Q2FuRXN0
YWJsaXNoRGF0YWJhc2UoRGF0YWJhc2VCYWNrZW5kQ29udGV4dCosIGNvbnN0IFN0cmluZyYsIGNv
bnN0IFN0cmluZyYsIHVuc2lnbmVkIGxvbmcsIERhdGFiYXNlRXJyb3ImKQotewotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBEYXRhYmFzZVRy
YWNrZXI6OnNldERhdGFiYXNlRGV0YWlscyhTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYs
IGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIGxvbmcpCi17Ci0gICAgLy8gQ2hyb21pdW0gc2V0cyB0
aGUgZGF0YWJhc2UgZGV0YWlscyB3aGVuIHRoZSBkYXRhYmFzZSBpcyBvcGVuZWQKLX0KLQotU3Ry
aW5nIERhdGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRhYmFzZShTZWN1cml0eU9yaWdpbiog
b3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wpCi17Ci0gICAgcmV0dXJuIG9yaWdpbi0+
ZGF0YWJhc2VJZGVudGlmaWVyKCkgKyAiLyIgKyBuYW1lICsgIiMiOwotfQotCi12b2lkIERhdGFi
YXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKERhdGFiYXNlQmFja2VuZEJhc2UqIGRhdGFiYXNl
KQotewotICAgIE11dGV4TG9ja2VyIG9wZW5EYXRhYmFzZU1hcExvY2sobV9vcGVuRGF0YWJhc2VN
YXBHdWFyZCk7Ci0gICAgaWYgKCFtX29wZW5EYXRhYmFzZU1hcCkKLSAgICAgICAgbV9vcGVuRGF0
YWJhc2VNYXAgPSBhZG9wdFB0cihuZXcgRGF0YWJhc2VPcmlnaW5NYXApOwotCi0gICAgU3RyaW5n
IG9yaWdpbklkZW50aWZpZXIgPSBkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKS0+ZGF0YWJhc2VJ
ZGVudGlmaWVyKCk7Ci0gICAgRGF0YWJhc2VOYW1lTWFwKiBuYW1lTWFwID0gbV9vcGVuRGF0YWJh
c2VNYXAtPmdldChvcmlnaW5JZGVudGlmaWVyKTsKLSAgICBpZiAoIW5hbWVNYXApIHsKLSAgICAg
ICAgbmFtZU1hcCA9IG5ldyBEYXRhYmFzZU5hbWVNYXAoKTsKLSAgICAgICAgbV9vcGVuRGF0YWJh
c2VNYXAtPnNldChvcmlnaW5JZGVudGlmaWVyLCBuYW1lTWFwKTsKLSAgICB9Ci0KLSAgICBTdHJp
bmcgbmFtZShkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpKTsKLSAgICBEYXRhYmFzZVNldCog
ZGF0YWJhc2VTZXQgPSBuYW1lTWFwLT5nZXQobmFtZSk7Ci0gICAgaWYgKCFkYXRhYmFzZVNldCkg
ewotICAgICAgICBkYXRhYmFzZVNldCA9IG5ldyBEYXRhYmFzZVNldCgpOwotICAgICAgICBuYW1l
TWFwLT5zZXQobmFtZSwgZGF0YWJhc2VTZXQpOwotICAgIH0KLQotICAgIGRhdGFiYXNlU2V0LT5h
ZGQoZGF0YWJhc2UpOwotfQotCi1jbGFzcyBOb3RpZnlEYXRhYmFzZU9ic2VydmVyT25DbG9zZVRh
c2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NPd25QdHI8Tm90aWZ5RGF0YWJhc2VPYnNlcnZlck9uQ2xvc2VUYXNrPiBjcmVh
dGUoUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRCYXNlPiBkYXRhYmFzZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgTm90aWZ5RGF0YWJhc2VPYnNlcnZlck9uQ2xvc2VUYXNr
KGRhdGFiYXNlKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi0gICAgewotICAgICAgICBEYXRhYmFzZU9ic2Vy
dmVyOjpkYXRhYmFzZUNsb3NlZChtX2RhdGFiYXNlLmdldCgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0
dWFsIGJvb2wgaXNDbGVhbnVwVGFzaygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgTm90aWZ5RGF0YWJhc2VPYnNlcnZlck9uQ2xvc2VU
YXNrKFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQmFzZT4gZGF0YWJhc2UpCi0gICAgICAgIDog
bV9kYXRhYmFzZShkYXRhYmFzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPERhdGFiYXNl
QmFja2VuZEJhc2U+IG1fZGF0YWJhc2U7Ci19OwotCi12b2lkIERhdGFiYXNlVHJhY2tlcjo6cmVt
b3ZlT3BlbkRhdGFiYXNlKERhdGFiYXNlQmFja2VuZEJhc2UqIGRhdGFiYXNlKQotewotICAgIFN0
cmluZyBvcmlnaW5JZGVudGlmaWVyID0gZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCktPmRhdGFi
YXNlSWRlbnRpZmllcigpOwotICAgIE11dGV4TG9ja2VyIG9wZW5EYXRhYmFzZU1hcExvY2sobV9v
cGVuRGF0YWJhc2VNYXBHdWFyZCk7Ci0gICAgQVNTRVJUKG1fb3BlbkRhdGFiYXNlTWFwKTsKLSAg
ICBEYXRhYmFzZU5hbWVNYXAqIG5hbWVNYXAgPSBtX29wZW5EYXRhYmFzZU1hcC0+Z2V0KG9yaWdp
bklkZW50aWZpZXIpOwotICAgIGlmICghbmFtZU1hcCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
U3RyaW5nIG5hbWUoZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKSk7Ci0gICAgRGF0YWJhc2VT
ZXQqIGRhdGFiYXNlU2V0ID0gbmFtZU1hcC0+Z2V0KG5hbWUpOwotICAgIGlmICghZGF0YWJhc2VT
ZXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIERhdGFiYXNlU2V0OjppdGVyYXRvciBmb3VuZCA9
IGRhdGFiYXNlU2V0LT5maW5kKGRhdGFiYXNlKTsKLSAgICBpZiAoZm91bmQgPT0gZGF0YWJhc2VT
ZXQtPmVuZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkYXRhYmFzZVNldC0+cmVtb3ZlKGZv
dW5kKTsKLSAgICBpZiAoZGF0YWJhc2VTZXQtPmlzRW1wdHkoKSkgewotICAgICAgICBuYW1lTWFw
LT5yZW1vdmUobmFtZSk7Ci0gICAgICAgIGRlbGV0ZSBkYXRhYmFzZVNldDsKLSAgICAgICAgaWYg
KG5hbWVNYXAtPmlzRW1wdHkoKSkgewotICAgICAgICAgICAgbV9vcGVuRGF0YWJhc2VNYXAtPnJl
bW92ZShvcmlnaW5JZGVudGlmaWVyKTsKLSAgICAgICAgICAgIGRlbGV0ZSBuYW1lTWFwOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCA9IGRhdGFiYXNlLT5kYXRhYmFzZUNvbnRleHQoKS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOwotICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhy
ZWFkKCkpCi0gICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKE5vdGlmeURh
dGFiYXNlT2JzZXJ2ZXJPbkNsb3NlVGFzazo6Y3JlYXRlKGRhdGFiYXNlKSk7Ci0gICAgZWxzZQot
ICAgICAgICBEYXRhYmFzZU9ic2VydmVyOjpkYXRhYmFzZUNsb3NlZChkYXRhYmFzZSk7Ci19Ci0K
LXZvaWQgRGF0YWJhc2VUcmFja2VyOjpwcmVwYXJlVG9PcGVuRGF0YWJhc2UoRGF0YWJhc2VCYWNr
ZW5kQmFzZSogZGF0YWJhc2UpCi17Ci0gICAgQVNTRVJUKGRhdGFiYXNlLT5kYXRhYmFzZUNvbnRl
eHQoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAg
RGF0YWJhc2VPYnNlcnZlcjo6ZGF0YWJhc2VPcGVuZWQoZGF0YWJhc2UpOwotfQotCi12b2lkIERh
dGFiYXNlVHJhY2tlcjo6ZmFpbGVkVG9PcGVuRGF0YWJhc2UoRGF0YWJhc2VCYWNrZW5kQmFzZSog
ZGF0YWJhc2UpCi17Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCA9IGRhdGFiYXNlLT5kYXRhYmFzZUNvbnRleHQoKS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOwotICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFk
KCkpCi0gICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKE5vdGlmeURhdGFi
YXNlT2JzZXJ2ZXJPbkNsb3NlVGFzazo6Y3JlYXRlKGRhdGFiYXNlKSk7Ci0gICAgZWxzZQotICAg
ICAgICBEYXRhYmFzZU9ic2VydmVyOjpkYXRhYmFzZUNsb3NlZChkYXRhYmFzZSk7Ci19Ci0KLXVu
c2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6OmdldE1heFNpemVGb3JEYXRhYmFzZShj
b25zdCBEYXRhYmFzZUJhY2tlbmRCYXNlKiBkYXRhYmFzZSkKLXsKLSAgICB1bnNpZ25lZCBsb25n
IGxvbmcgc3BhY2VBdmFpbGFibGUgPSAwOwotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBkYXRhYmFz
ZVNpemUgPSAwOwotICAgIFF1b3RhVHJhY2tlcjo6aW5zdGFuY2UoKS5nZXREYXRhYmFzZVNpemVB
bmRTcGFjZUF2YWlsYWJsZVRvT3JpZ2luKAotICAgICAgICBkYXRhYmFzZS0+c2VjdXJpdHlPcmln
aW4oKS0+ZGF0YWJhc2VJZGVudGlmaWVyKCksCi0gICAgICAgIGRhdGFiYXNlLT5zdHJpbmdJZGVu
dGlmaWVyKCksICZkYXRhYmFzZVNpemUsICZzcGFjZUF2YWlsYWJsZSk7Ci0gICAgcmV0dXJuIGRh
dGFiYXNlU2l6ZSArIHNwYWNlQXZhaWxhYmxlOwotfQotCi12b2lkIERhdGFiYXNlVHJhY2tlcjo6
aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChjb25zdCBEYXRhYmFzZUJhY2tlbmRDb250
ZXh0KiBjb250ZXh0KQotewotICAgIE11dGV4TG9ja2VyIG9wZW5EYXRhYmFzZU1hcExvY2sobV9v
cGVuRGF0YWJhc2VNYXBHdWFyZCk7Ci0KLSAgICBpZiAoIW1fb3BlbkRhdGFiYXNlTWFwKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBEYXRhYmFzZU5hbWVNYXAqIG5hbWVNYXAgPSBtX29wZW5EYXRh
YmFzZU1hcC0+Z2V0KGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPmRhdGFiYXNlSWRlbnRpZmll
cigpKTsKLSAgICBpZiAoIW5hbWVNYXApCi0gICAgICAgIHJldHVybjsKLQotICAgIERhdGFiYXNl
TmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgZGJOYW1lTWFwRW5kSXQgPSBuYW1lTWFwLT5lbmQoKTsK
LSAgICBmb3IgKERhdGFiYXNlTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgZGJOYW1lTWFwSXQgPSBu
YW1lTWFwLT5iZWdpbigpOyBkYk5hbWVNYXBJdCAhPSBkYk5hbWVNYXBFbmRJdDsgKytkYk5hbWVN
YXBJdCkgewotICAgICAgICBEYXRhYmFzZVNldCogZGF0YWJhc2VTZXQgPSBkYk5hbWVNYXBJdC0+
dmFsdWU7Ci0gICAgICAgIERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBkYXRhYmFz
ZVNldC0+ZW5kKCk7Ci0gICAgICAgIGZvciAoRGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gZGF0YWJhc2VTZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAg
aWYgKCgqaXQpLT5kYXRhYmFzZUNvbnRleHQoKSA9PSBjb250ZXh0KQotICAgICAgICAgICAgICAg
ICgqaXQpLT5pbnRlcnJ1cHQoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotY2xhc3MgRGF0YWJh
c2VUcmFja2VyOjpDbG9zZU9uZURhdGFiYXNlSW1tZWRpYXRlbHlUYXNrIDogcHVibGljIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRy
PENsb3NlT25lRGF0YWJhc2VJbW1lZGlhdGVseVRhc2s+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG9y
aWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSwgRGF0YWJhc2VCYWNrZW5kQmFzZSog
ZGF0YWJhc2UpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENsb3NlT25lRGF0
YWJhc2VJbW1lZGlhdGVseVRhc2sob3JpZ2luSWRlbnRpZmllciwgbmFtZSwgZGF0YWJhc2UpKTsK
LSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCkKLSAgICB7Ci0gICAgICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigp
LmNsb3NlT25lRGF0YWJhc2VJbW1lZGlhdGVseShtX29yaWdpbklkZW50aWZpZXIsIG1fbmFtZSwg
bV9kYXRhYmFzZSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIENsb3NlT25lRGF0YWJhc2VJbW1l
ZGlhdGVseVRhc2soY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IG5hbWUsIERhdGFiYXNlQmFja2VuZEJhc2UqIGRhdGFiYXNlKQotICAgICAgICA6IG1fb3JpZ2lu
SWRlbnRpZmllcihvcmlnaW5JZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpKQotICAgICAgICAsIG1f
bmFtZShuYW1lLmlzb2xhdGVkQ29weSgpKQotICAgICAgICAsIG1fZGF0YWJhc2UoZGF0YWJhc2Up
Ci0gICAgewotICAgIH0KLQotICAgIFN0cmluZyBtX29yaWdpbklkZW50aWZpZXI7Ci0gICAgU3Ry
aW5nIG1fbmFtZTsKLSAgICBEYXRhYmFzZUJhY2tlbmRCYXNlKiBtX2RhdGFiYXNlOyAvLyBJbnRl
bnRpb25hbGx5IGEgcmF3IHBvaW50ZXIuCi19OwotCi12b2lkIERhdGFiYXNlVHJhY2tlcjo6Y2xv
c2VEYXRhYmFzZXNJbW1lZGlhdGVseShjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNv
bnN0IFN0cmluZyYgbmFtZSkgewotICAgIE11dGV4TG9ja2VyIG9wZW5EYXRhYmFzZU1hcExvY2so
bV9vcGVuRGF0YWJhc2VNYXBHdWFyZCk7Ci0gICAgaWYgKCFtX29wZW5EYXRhYmFzZU1hcCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgRGF0YWJhc2VOYW1lTWFwKiBuYW1lTWFwID0gbV9vcGVuRGF0
YWJhc2VNYXAtPmdldChvcmlnaW5JZGVudGlmaWVyKTsKLSAgICBpZiAoIW5hbWVNYXApCi0gICAg
ICAgIHJldHVybjsKLQotICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IG5hbWVNYXAtPmdl
dChuYW1lKTsKLSAgICBpZiAoIWRhdGFiYXNlU2V0KQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBXZSBoYXZlIHRvIGNhbGwgY2xvc2VJbW1lZGlhdGVseSgpIG9uIHRoZSBjb250ZXh0IHRocmVh
ZCBhbmQgd2UgY2Fubm90IHNhZmVseSBhZGQgYSByZWZlcmVuY2UgdG8KLSAgICAvLyB0aGUgZGF0
YWJhc2UgaW4gb3VyIGNvbGxlY3Rpb24gd2hlbiBub3Qgb24gdGhlIGNvbnRleHQgdGhyZWFkICh3
aGljaCBpcyBhbHdheXMgdGhlIGNhc2UgZ2l2ZW4KLSAgICAvLyBjdXJyZW50IHVzYWdlKS4KLSAg
ICBmb3IgKERhdGFiYXNlU2V0OjppdGVyYXRvciBpdCA9IGRhdGFiYXNlU2V0LT5iZWdpbigpOyBp
dCAhPSBkYXRhYmFzZVNldC0+ZW5kKCk7ICsraXQpCi0gICAgICAgICgqaXQpLT5kYXRhYmFzZUNv
bnRleHQoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5wb3N0VGFzayhDbG9zZU9uZURhdGFi
YXNlSW1tZWRpYXRlbHlUYXNrOjpjcmVhdGUob3JpZ2luSWRlbnRpZmllciwgbmFtZSwgKml0KSk7
Ci19Ci0KLXZvaWQgRGF0YWJhc2VUcmFja2VyOjpjbG9zZU9uZURhdGFiYXNlSW1tZWRpYXRlbHko
Y29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5hbWUsIERhdGFi
YXNlQmFja2VuZEJhc2UqIGRhdGFiYXNlKQotewotICAgIC8vIEZpcnN0IHdlIGhhdmUgdG8gY29u
ZmlybSB0aGUgJ2RhdGFiYXNlJyBpcyBzdGlsbCBpbiBvdXIgY29sbGVjdGlvbi4KLSAgICB7Ci0g
ICAgICAgIE11dGV4TG9ja2VyIG9wZW5EYXRhYmFzZU1hcExvY2sobV9vcGVuRGF0YWJhc2VNYXBH
dWFyZCk7Ci0gICAgICAgIGlmICghbV9vcGVuRGF0YWJhc2VNYXApCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgRGF0YWJhc2VOYW1lTWFwKiBuYW1lTWFwID0gbV9vcGVuRGF0YWJhc2VN
YXAtPmdldChvcmlnaW5JZGVudGlmaWVyKTsKLSAgICAgICAgaWYgKCFuYW1lTWFwKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IG5hbWVN
YXAtPmdldChuYW1lKTsKLSAgICAgICAgaWYgKCFkYXRhYmFzZVNldCkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBEYXRhYmFzZVNldDo6aXRlcmF0b3IgZm91bmQgPSBkYXRhYmFzZVNl
dC0+ZmluZChkYXRhYmFzZSk7Ci0gICAgICAgIGlmIChmb3VuZCA9PSBkYXRhYmFzZVNldC0+ZW5k
KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQW5kIHdlIGhhdmUgdG8g
Y2FsbCBjbG9zZUltbWVkaWF0ZWx5KCkgd2l0aG91dCBvdXIgY29sbGVjdGlvbiBsb2NrIGJlaW5n
IGhlbGQuCi0gICAgZGF0YWJhc2UtPmNsb3NlSW1tZWRpYXRlbHkoKTsKLX0KLQotfQotCi0jZW5k
aWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vUXVvdGFUcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vUXVvdGFUcmFja2VyLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzgyYTNmYjhiNTc4NjI1NWNlYmEwZTdmODU5YjE0MmFl
YzFkOTUxOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlF1b3RhVHJhY2tlci5oIgotCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLQotI2lu
Y2x1ZGUgPHB1YmxpYy9QbGF0Zm9ybS5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1RdW90YVRyYWNrZXImIFF1b3RhVHJhY2tlcjo6aW5z
dGFuY2UoKQotewotICAgIEF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyhRdW90YVRyYWNrZXIm
LCB0cmFja2VyID0gKm5ldyBRdW90YVRyYWNrZXIpOwotICAgIHJldHVybiB0cmFja2VyOwotfQot
Ci12b2lkIFF1b3RhVHJhY2tlcjo6Z2V0RGF0YWJhc2VTaXplQW5kU3BhY2VBdmFpbGFibGVUb09y
aWdpbigKLSAgICBjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYg
ZGF0YWJhc2VOYW1lLAotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyogZGF0YWJhc2VTaXplLCB1bnNp
Z25lZCBsb25nIGxvbmcqIHNwYWNlQXZhaWxhYmxlKQotewotICAgIC8vIEV4dHJhIHNjb3BlIHRv
IHVubG9jayBwcmlvciB0byBwb3RlbnRpYWxseSBjYWxsaW5nIFdlYktpdDo6UGxhdGZvcm0uCi0g
ICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrRGF0YShtX2RhdGFHdWFyZCk7Ci0gICAgICAg
IEFTU0VSVChtX2RhdGFiYXNlU2l6ZXMuY29udGFpbnMob3JpZ2luSWRlbnRpZmllcikpOwotICAg
ICAgICBIYXNoTWFwPFN0cmluZywgU2l6ZU1hcD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRh
YmFzZVNpemVzLmZpbmQob3JpZ2luSWRlbnRpZmllcik7Ci0gICAgICAgIEFTU0VSVChpdC0+dmFs
dWUuY29udGFpbnMoZGF0YWJhc2VOYW1lKSk7Ci0gICAgICAgICpkYXRhYmFzZVNpemUgPSBpdC0+
dmFsdWUuZ2V0KGRhdGFiYXNlTmFtZSk7Ci0KLSAgICAgICAgaWYgKG1fc3BhY2VBdmFpbGFibGVU
b09yaWdpbnMuY29udGFpbnMob3JpZ2luSWRlbnRpZmllcikpIHsKLSAgICAgICAgICAgICpzcGFj
ZUF2YWlsYWJsZSA9IG1fc3BhY2VBdmFpbGFibGVUb09yaWdpbnMuZ2V0KG9yaWdpbklkZW50aWZp
ZXIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhl
IGVtYmVkZGVyIGhhc24ndCBwdXNoZWQgdGhpcyB2YWx1ZSB0byB1cywgc28gd2UgcHVsbCBpdCBh
cyBuZWVkZWQuCi0gICAgKnNwYWNlQXZhaWxhYmxlID0gV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVu
dCgpLT5kYXRhYmFzZUdldFNwYWNlQXZhaWxhYmxlRm9yT3JpZ2luKG9yaWdpbklkZW50aWZpZXIp
OwotfQotCi12b2lkIFF1b3RhVHJhY2tlcjo6dXBkYXRlRGF0YWJhc2VTaXplKAotICAgIGNvbnN0
IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsCi0g
ICAgdW5zaWduZWQgbG9uZyBsb25nIGRhdGFiYXNlU2l6ZSkKLXsKLSAgICBNdXRleExvY2tlciBs
b2NrRGF0YShtX2RhdGFHdWFyZCk7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFNpemVNYXA+OjppdGVy
YXRvciBpdCA9IG1fZGF0YWJhc2VTaXplcy5hZGQob3JpZ2luSWRlbnRpZmllciwgU2l6ZU1hcCgp
KS5pdGVyYXRvcjsKLSAgICBpdC0+dmFsdWUuc2V0KGRhdGFiYXNlTmFtZSwgZGF0YWJhc2VTaXpl
KTsKLX0KLQotdm9pZCBRdW90YVRyYWNrZXI6OnVwZGF0ZVNwYWNlQXZhaWxhYmxlVG9PcmlnaW4o
Y29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCB1bnNpZ25lZCBsb25nIGxvbmcgc3BhY2VB
dmFpbGFibGUpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGEobV9kYXRhR3VhcmQpOwotICAg
IG1fc3BhY2VBdmFpbGFibGVUb09yaWdpbnMuc2V0KG9yaWdpbklkZW50aWZpZXIsIHNwYWNlQXZh
aWxhYmxlKTsKLX0KLQotdm9pZCBRdW90YVRyYWNrZXI6OnJlc2V0U3BhY2VBdmFpbGFibGVUb09y
aWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpCi17Ci0gICAgTXV0ZXhMb2NrZXIg
bG9ja0RhdGEobV9kYXRhR3VhcmQpOwotICAgIG1fc3BhY2VBdmFpbGFibGVUb09yaWdpbnMucmVt
b3ZlKG9yaWdpbklkZW50aWZpZXIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9RdW90YVRyYWNrZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vUXVvdGFUcmFja2VyLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzNzBlYjFiN2Y4NzVmNjgyZTg5ODA3YzUzNDEzNDc0N2E5
YmQ3NDYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJvbWl1bS9RdW90YVRyYWNrZXIuaAor
KysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFF1b3RhVHJhY2tlcl9oCi0jZGVm
aW5lIFF1b3RhVHJhY2tlcl9oCi0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotCi0jaW5jbHVk
ZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBRdW90YVRyYWNrZXIgewotcHVibGljOgot
ICAgIHN0YXRpYyBRdW90YVRyYWNrZXImIGluc3RhbmNlKCk7Ci0KLSAgICB2b2lkIGdldERhdGFi
YXNlU2l6ZUFuZFNwYWNlQXZhaWxhYmxlVG9PcmlnaW4oCi0gICAgICAgIGNvbnN0IFN0cmluZyYg
b3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsCi0gICAgICAgIHVu
c2lnbmVkIGxvbmcgbG9uZyogZGF0YWJhc2VTaXplLCB1bnNpZ25lZCBsb25nIGxvbmcqIHNwYWNl
QXZhaWxhYmxlKTsKLSAgICB2b2lkIHVwZGF0ZURhdGFiYXNlU2l6ZSgKLSAgICAgICAgY29uc3Qg
U3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwKLSAg
ICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGRhdGFiYXNlU2l6ZSk7Ci0gICAgdm9pZCB1cGRhdGVT
cGFjZUF2YWlsYWJsZVRvT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgdW5z
aWduZWQgbG9uZyBsb25nIHNwYWNlQXZhaWxhYmxlKTsKLSAgICB2b2lkIHJlc2V0U3BhY2VBdmFp
bGFibGVUb09yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOwotCi1wcml2YXRl
OgotICAgIFF1b3RhVHJhY2tlcigpIHsgfQotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywg
dW5zaWduZWQgbG9uZyBsb25nPiBTaXplTWFwOwotICAgIFNpemVNYXAgbV9zcGFjZUF2YWlsYWJs
ZVRvT3JpZ2luczsKLSAgICBIYXNoTWFwPFN0cmluZywgU2l6ZU1hcD4gbV9kYXRhYmFzZVNpemVz
OwotICAgIE11dGV4IG1fZGF0YUd1YXJkOwotfTsKLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFNR
TF9EQVRBQkFTRSkKLQotI2VuZGlmIC8vIFF1b3RhVHJhY2tlcl9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1NRTFRyYW5zYWN0aW9uQ2xp
ZW50Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9jaHJv
bWl1bS9TUUxUcmFuc2FjdGlvbkNsaWVudENocm9taXVtLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZDIxNmIxNmYxMmJjZmI2NjBiYjY1MjI0YWZiMTc3ZWQ5ZmY2MDg2Mi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1NRTFRyYW5zYWN0aW9uQ2xpZW50Q2hyb21p
dW0uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0g
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkNsaWVudC5oIgotCi0jaWYgRU5BQkxFKFNRTF9EQVRB
QkFTRSkKLQotI2luY2x1ZGUgIkRhdGFiYXNlQmFja2VuZEJhc2UuaCIKLSNpbmNsdWRlICJEYXRh
YmFzZUJhY2tlbmRDb250ZXh0LmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VPYnNlcnZlci5oIgotI2lu
Y2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBOb3RpZnlEYXRhYmFzZUNoYW5nZWRUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OlRhc2sgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPE5vdGlmeURh
dGFiYXNlQ2hhbmdlZFRhc2s+IGNyZWF0ZShEYXRhYmFzZUJhY2tlbmRCYXNlICpkYXRhYmFzZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTm90aWZ5RGF0YWJhc2VDaGFuZ2Vk
VGFzayhkYXRhYmFzZSkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KikKLSAgICB7Ci0gICAgICAgIFdlYkNvcmU6OkRhdGFiYXNl
T2JzZXJ2ZXI6OmRhdGFiYXNlTW9kaWZpZWQobV9kYXRhYmFzZS5nZXQoKSk7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIE5vdGlmeURhdGFiYXNlQ2hhbmdlZFRhc2soUGFzc1JlZlB0cjxEYXRhYmFz
ZUJhY2tlbmRCYXNlPiBkYXRhYmFzZSkKLSAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQmFzZT4gbV9kYXRhYmFz
ZTsKLX07Ci0KLXZvaWQgU1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZENvbW1pdFdyaXRlVHJhbnNh
Y3Rpb24oRGF0YWJhc2VCYWNrZW5kQmFzZSogZGF0YWJhc2UpCi17Ci0gICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGRhdGFiYXNlLT5kYXRhYmFzZUNv
bnRleHQoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIGlmICghc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpIHsKLSAgICAgICAgc2NyaXB0RXhlY3V0aW9u
Q29udGV4dC0+cG9zdFRhc2soTm90aWZ5RGF0YWJhc2VDaGFuZ2VkVGFzazo6Y3JlYXRlKGRhdGFi
YXNlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBXZWJDb3JlOjpEYXRhYmFzZU9i
c2VydmVyOjpkYXRhYmFzZU1vZGlmaWVkKGRhdGFiYXNlKTsKLX0KLQotYm9vbCBTUUxUcmFuc2Fj
dGlvbkNsaWVudDo6ZGlkRXhjZWVkUXVvdGEoRGF0YWJhc2VCYWNrZW5kQmFzZSogZGF0YWJhc2Up
Ci17Ci0gICAgLy8gQ2hyb21pdW0gZG9lcyBub3QgYWxsb3cgdXNlcnMgdG8gbWFudWFsbHkgY2hh
bmdlIHRoZSBxdW90YSBmb3IgYW4gb3JpZ2luIChmb3Igbm93LCBhdCBsZWFzdCkuCi0gICAgLy8g
RG9uJ3QgZG8gYW55dGhpbmcuCi0gICAgQVNTRVJUKGRhdGFiYXNlLT5kYXRhYmFzZUNvbnRleHQo
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>