<?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>132782</bug_id>
          
          <creation_ts>2014-05-10 13:42:30 -0700</creation_ts>
          <short_desc>Simplify createDataAvailableSource</short_desc>
          <delta_ts>2014-05-10 13:51:46 -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="Anders Carlsson">andersca</reporter>
          <assigned_to name="Anders Carlsson">andersca</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1008294</commentid>
    <comment_count>0</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-05-10 13:42:30 -0700</bug_when>
    <thetext>Simplify createDataAvailableSource</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1008295</commentid>
    <comment_count>1</comment_count>
      <attachid>231232</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-05-10 13:45:21 -0700</bug_when>
    <thetext>Created attachment 231232
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1008297</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-05-10 13:48:09 -0700</bug_when>
    <thetext>Attachment 231232 did not pass style-queue:


ERROR: Source/WebKit2/Platform/IPC/mac/ConnectionMac.mm:303:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 1 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1008298</commentid>
    <comment_count>3</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-05-10 13:51:46 -0700</bug_when>
    <thetext>Committed r168583: &lt;http://trac.webkit.org/changeset/168583&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231232</attachid>
            <date>2014-05-10 13:45:21 -0700</date>
            <delta_ts>2014-05-10 13:50:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-132782-20140510204458.patch</filename>
            <type>text/plain</type>
            <size>43890</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY4NTgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYzk4YWI3NzZlMjAyOTFm
MzQ4M2NiMjg3OGE5MDUyNjJhNzYyNTE3Yy4uMGNkZWRlODY0NjM2ZWVhYTYyNjI4MTdlZDllNzJm
MjZmOTFlZTM0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI1IEBACiAyMDE0LTA1LTEwICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKKyAgICAgICAgU2ltcGxpZnkgY3Jl
YXRlRGF0YUF2YWlsYWJsZVNvdXJjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTMyNzgyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNjgxNTIwMj4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRm
b3JtL0lQQy9tYWMvQ29ubmVjdGlvbk1hYy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL0lQQy9tYWMvQ29ubmVjdGlvbk1hYy5jcHAuCisgICAgICAgIFJlbmFtZSB0byBt
YWtlIHRoaXMgT2JqZWN0aXZlLUMrKyBzbyB3ZSBnZXQgdGhlIGxhbWJkYS10by1ibG9jayBjb252
ZXJzaW9uLgorICAgICAgICAKKyAgICAgICAgKElQQzo6Y3JlYXRlRGF0YUF2YWlsYWJsZVNvdXJj
ZSk6CisgICAgICAgIE1ha2UgdGhpcyBhIGZ1bmN0aW9uIHRlbXBsYXRlIGFuZCBqdXN0IHBhc3Mg
dGhlIGZ1bmN0aW9uIGRpcmVjdGx5IHRvIGRpc3BhdGNoX3NvdXJjZV9zZXRfZXZlbnRfaGFuZGxl
ci4KKworICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjpvcGVuKToKKyAgICAgICAgVXNlIGxhbWJk
YXMgaW5zdGVhZCBvZiBXVEY6OmJpbmQsIHNvIHdlJ2xsIG1ha2Ugc3VyZSB0aGUgY29ubmVjdGlv
biBpcyBrZXB0IGFsaXZlLgorCisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICBVcGRhdGUgZm9yIENvbm5lY3Rpb25NYWMuY3BwIHRvIENvbm5lY3Rp
b25NYWMubW0gcmVuYW1lLgorCisyMDE0LTA1LTEwICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNj
YUBhcHBsZS5jb20+CisKICAgICAgICAgRm9sbG93LXVwIGZpeC4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQ
Qy9tYWMvQ29ubmVjdGlvbk1hYy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvbWFj
L0Nvbm5lY3Rpb25NYWMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDdkNGFk
MWUxMzNmZTFkYTllZGM2NDNkZWZjMTlhYzE2ODUzMmU1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9tYWMv
Q29ubmVjdGlvbk1hYy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MjkgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0KLSNp
bmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiSW1wb3J0YW5jZUFzc2VydGlvbi5o
IgotI2luY2x1ZGUgIk1hY2hQb3J0LmgiCi0jaW5jbHVkZSAiTWFjaFV0aWxpdGllcy5oIgotI2lu
Y2x1ZGUgPG1hY2gvbWFjaF9lcnJvci5oPgotI2luY2x1ZGUgPG1hY2gvdm1fbWFwLmg+Ci0jaW5j
bHVkZSA8d3RmL1J1bkxvb3AuaD4KLSNpbmNsdWRlIDx4cGMveHBjLmg+Ci0KLSNpZiBfX2hhc19p
bmNsdWRlKDx4cGMvcHJpdmF0ZS5oPikKLSNpbmNsdWRlIDx4cGMvcHJpdmF0ZS5oPgotI2VuZGlm
Ci0KLWV4dGVybiAiQyIgdm9pZCB4cGNfY29ubmVjdGlvbl9nZXRfYXVkaXRfdG9rZW4oeHBjX2Nv
bm5lY3Rpb25fdCwgYXVkaXRfdG9rZW5fdCopOwotCi1uYW1lc3BhY2UgSVBDIHsKLQotc3RhdGlj
IGNvbnN0IHNpemVfdCBpbmxpbmVNZXNzYWdlTWF4U2l6ZSA9IDQwOTY7Ci0KLS8vIE1lc3NhZ2Ug
ZmxhZ3MuCi1lbnVtIHsKLSAgICBNZXNzYWdlQm9keUlzT3V0T2ZMaW5lID0gMSA8PCAwCi19Owot
ICAgIAotdm9pZCBDb25uZWN0aW9uOjpwbGF0Zm9ybUludmFsaWRhdGUoKQotewotICAgIGlmICgh
bV9pc0Nvbm5lY3RlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pc0Nvbm5lY3RlZCA9IGZh
bHNlOwotCi0gICAgQVNTRVJUKG1fc2VuZFBvcnQpOwotICAgIEFTU0VSVChtX3JlY2VpdmVQb3J0
KTsKLQotICAgIC8vIFVucmVnaXN0ZXIgb3VyIHBvcnRzLgotICAgIGRpc3BhdGNoX3NvdXJjZV9j
YW5jZWwobV9kZWFkTmFtZVNvdXJjZSk7Ci0gICAgZGlzcGF0Y2hfcmVsZWFzZShtX2RlYWROYW1l
U291cmNlKTsKLSAgICBtX2RlYWROYW1lU291cmNlID0gMDsKLSAgICBtX3NlbmRQb3J0ID0gTUFD
SF9QT1JUX05VTEw7Ci0KLSAgICBkaXNwYXRjaF9zb3VyY2VfY2FuY2VsKG1fcmVjZWl2ZVBvcnRE
YXRhQXZhaWxhYmxlU291cmNlKTsKLSAgICBkaXNwYXRjaF9yZWxlYXNlKG1fcmVjZWl2ZVBvcnRE
YXRhQXZhaWxhYmxlU291cmNlKTsKLSAgICBtX3JlY2VpdmVQb3J0RGF0YUF2YWlsYWJsZVNvdXJj
ZSA9IDA7Ci0gICAgbV9yZWNlaXZlUG9ydCA9IE1BQ0hfUE9SVF9OVUxMOwotCi0jaWYgIVBMQVRG
T1JNKElPUykKLSAgICBpZiAobV9leGNlcHRpb25Qb3J0KSB7Ci0gICAgICAgIGRpc3BhdGNoX3Nv
dXJjZV9jYW5jZWwobV9leGNlcHRpb25Qb3J0RGF0YUF2YWlsYWJsZVNvdXJjZSk7Ci0gICAgICAg
IGRpc3BhdGNoX3JlbGVhc2UobV9leGNlcHRpb25Qb3J0RGF0YUF2YWlsYWJsZVNvdXJjZSk7Ci0g
ICAgICAgIG1fZXhjZXB0aW9uUG9ydERhdGFBdmFpbGFibGVTb3VyY2UgPSAwOwotICAgICAgICBt
X2V4Y2VwdGlvblBvcnQgPSBNQUNIX1BPUlRfTlVMTDsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGlm
IChtX3hwY0Nvbm5lY3Rpb24pIHsKLSAgICAgICAgeHBjX3JlbGVhc2UobV94cGNDb25uZWN0aW9u
KTsKLSAgICAgICAgbV94cGNDb25uZWN0aW9uID0gMDsKLSAgICB9Ci19Ci0KLXZvaWQgQ29ubmVj
dGlvbjo6cGxhdGZvcm1Jbml0aWFsaXplKElkZW50aWZpZXIgaWRlbnRpZmllcikKLXsKLSNpZiAh
UExBVEZPUk0oSU9TKQotICAgIG1fZXhjZXB0aW9uUG9ydCA9IE1BQ0hfUE9SVF9OVUxMOwotICAg
IG1fZXhjZXB0aW9uUG9ydERhdGFBdmFpbGFibGVTb3VyY2UgPSBudWxscHRyOwotI2VuZGlmCi0K
LSAgICBpZiAobV9pc1NlcnZlcikgewotICAgICAgICBtX3JlY2VpdmVQb3J0ID0gaWRlbnRpZmll
ci5wb3J0OwotICAgICAgICBtX3NlbmRQb3J0ID0gTUFDSF9QT1JUX05VTEw7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgbV9yZWNlaXZlUG9ydCA9IE1BQ0hfUE9SVF9OVUxMOwotICAgICAgICBtX3Nl
bmRQb3J0ID0gaWRlbnRpZmllci5wb3J0OwotICAgIH0KLQotICAgIG1fZGVhZE5hbWVTb3VyY2Ug
PSBudWxscHRyOwotICAgIG1fcmVjZWl2ZVBvcnREYXRhQXZhaWxhYmxlU291cmNlID0gbnVsbHB0
cjsKLQotICAgIG1feHBjQ29ubmVjdGlvbiA9IGlkZW50aWZpZXIueHBjQ29ubmVjdGlvbjsKLSAg
ICAvLyBGSVhNRTogSW5zdGVhZCBvZiBleHBsaWNpdGx5IHJldGFpbmluZyB0aGUgY29ubmVjdGlv
biBoZXJlLCBJZGVudGlmaWVyOjp4cGNDb25uZWN0aW9uCi0gICAgLy8gc2hvdWxkIGp1c3QgYmUg
YSBzbWFydCBwb2ludGVyLgotICAgIGlmIChtX3hwY0Nvbm5lY3Rpb24pCi0gICAgICAgIHhwY19y
ZXRhaW4obV94cGNDb25uZWN0aW9uKTsKLX0KLQotc3RhdGljIGRpc3BhdGNoX3NvdXJjZV90IGNy
ZWF0ZURhdGFBdmFpbGFibGVTb3VyY2UobWFjaF9wb3J0X3QgcmVjZWl2ZVBvcnQsIFdvcmtRdWV1
ZSogd29ya1F1ZXVlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uKQotewotICAgIGRp
c3BhdGNoX3NvdXJjZV90IHNvdXJjZSA9IGRpc3BhdGNoX3NvdXJjZV9jcmVhdGUoRElTUEFUQ0hf
U09VUkNFX1RZUEVfTUFDSF9SRUNWLCByZWNlaXZlUG9ydCwgMCwgd29ya1F1ZXVlLT5kaXNwYXRj
aFF1ZXVlKCkpOwotICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRfZXZlbnRfaGFuZGxlcihzb3VyY2Us
IF57Ci0gICAgICAgIGZ1bmN0aW9uKCk7Ci0gICAgfSk7Ci0KLSAgICBkaXNwYXRjaF9zb3VyY2Vf
c2V0X2NhbmNlbF9oYW5kbGVyKHNvdXJjZSwgXnsKLSAgICAgICAgbWFjaF9wb3J0X21vZF9yZWZz
KG1hY2hfdGFza19zZWxmKCksIHJlY2VpdmVQb3J0LCBNQUNIX1BPUlRfUklHSFRfUkVDRUlWRSwg
LTEpOwotICAgIH0pOwotCi0gICAgcmV0dXJuIHNvdXJjZTsKLX0KLQotYm9vbCBDb25uZWN0aW9u
OjpvcGVuKCkKLXsKLSAgICBpZiAobV9pc1NlcnZlcikgewotICAgICAgICBBU1NFUlQobV9yZWNl
aXZlUG9ydCk7Ci0gICAgICAgIEFTU0VSVCghbV9zZW5kUG9ydCk7Ci0gICAgICAgIAotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIEFTU0VSVCghbV9yZWNlaXZlUG9ydCk7Ci0gICAgICAgIEFTU0VSVCht
X3NlbmRQb3J0KTsKLQotICAgICAgICAvLyBDcmVhdGUgdGhlIHJlY2VpdmUgcG9ydC4KLSAgICAg
ICAgbWFjaF9wb3J0X2FsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksIE1BQ0hfUE9SVF9SSUdIVF9S
RUNFSVZFLCAmbV9yZWNlaXZlUG9ydCk7Ci0KLSNpZiBQTEFURk9STShJT1MpIHx8IF9fTUFDX09T
X1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAotICAgICAgICBtYWNoX3BvcnRfc2V0X2F0
dHJpYnV0ZXMobWFjaF90YXNrX3NlbGYoKSwgbV9yZWNlaXZlUG9ydCwgTUFDSF9QT1JUX0lNUE9S
VEFOQ0VfUkVDRUlWRVIsIChtYWNoX3BvcnRfaW5mb190KTAsIDApOwotI2VuZGlmCi0KLSAgICAg
ICAgbV9pc0Nvbm5lY3RlZCA9IHRydWU7Ci0gICAgICAgIAotICAgICAgICAvLyBTZW5kIHRoZSBp
bml0aWFsaXplIG1lc3NhZ2UsIHdoaWNoIGNvbnRhaW5zIGEgc2VuZCByaWdodCBmb3IgdGhlIHNl
cnZlciB0byB1c2UuCi0gICAgICAgIGF1dG8gZW5jb2RlciA9IHN0ZDo6bWFrZV91bmlxdWU8TWVz
c2FnZUVuY29kZXI+KCJJUEMiLCAiSW5pdGlhbGl6ZUNvbm5lY3Rpb24iLCAwKTsKLSAgICAgICAg
ZW5jb2Rlci0+ZW5jb2RlKE1hY2hQb3J0KG1fcmVjZWl2ZVBvcnQsIE1BQ0hfTVNHX1RZUEVfTUFL
RV9TRU5EKSk7Ci0KLSAgICAgICAgc2VuZE1lc3NhZ2Uoc3RkOjptb3ZlKGVuY29kZXIpKTsKLQot
ICAgICAgICBpbml0aWFsaXplRGVhZE5hbWVTb3VyY2UoKTsKLSAgICB9Ci0KLSAgICAvLyBDaGFu
Z2UgdGhlIG1lc3NhZ2UgcXVldWUgbGVuZ3RoIGZvciB0aGUgcmVjZWl2ZSBwb3J0LgotICAgIHNl
dE1hY2hQb3J0UXVldWVMZW5ndGgobV9yZWNlaXZlUG9ydCwgTUFDSF9QT1JUX1FMSU1JVF9MQVJH
RSk7Ci0KLSAgICAvLyBSZWdpc3RlciB0aGUgZGF0YSBhdmFpbGFibGUgaGFuZGxlci4KLSAgICBt
X3JlY2VpdmVQb3J0RGF0YUF2YWlsYWJsZVNvdXJjZSA9IGNyZWF0ZURhdGFBdmFpbGFibGVTb3Vy
Y2UobV9yZWNlaXZlUG9ydCwgbV9jb25uZWN0aW9uUXVldWUuZ2V0KCksIGJpbmQoJkNvbm5lY3Rp
b246OnJlY2VpdmVTb3VyY2VFdmVudEhhbmRsZXIsIHRoaXMpKTsKLQotI2lmICFQTEFURk9STShJ
T1MpCi0gICAgLy8gSWYgd2UgaGF2ZSBhbiBleGNlcHRpb24gcG9ydCwgcmVnaXN0ZXIgdGhlIGRh
dGEgYXZhaWxhYmxlIGhhbmRsZXIgYW5kIHNlbmQgb3ZlciB0aGUgcG9ydCB0byB0aGUgb3RoZXIg
ZW5kLgotICAgIGlmIChtX2V4Y2VwdGlvblBvcnQpIHsKLSAgICAgICAgbV9leGNlcHRpb25Qb3J0
RGF0YUF2YWlsYWJsZVNvdXJjZSA9IGNyZWF0ZURhdGFBdmFpbGFibGVTb3VyY2UobV9leGNlcHRp
b25Qb3J0LCBtX2Nvbm5lY3Rpb25RdWV1ZS5nZXQoKSwgYmluZCgmQ29ubmVjdGlvbjo6ZXhjZXB0
aW9uU291cmNlRXZlbnRIYW5kbGVyLCB0aGlzKSk7Ci0KLSAgICAgICAgYXV0byBlbmNvZGVyID0g
c3RkOjptYWtlX3VuaXF1ZTxNZXNzYWdlRW5jb2Rlcj4oIklQQyIsICJTZXRFeGNlcHRpb25Qb3J0
IiwgMCk7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZShNYWNoUG9ydChtX2V4Y2VwdGlvblBvcnQs
IE1BQ0hfTVNHX1RZUEVfTUFLRV9TRU5EKSk7Ci0KLSAgICAgICAgc2VuZE1lc3NhZ2Uoc3RkOjpt
b3ZlKGVuY29kZXIpKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHJlZigpOwotICAgIGRpc3BhdGNo
X2FzeW5jKG1fY29ubmVjdGlvblF1ZXVlLT5kaXNwYXRjaFF1ZXVlKCksIF57Ci0gICAgICAgIGRp
c3BhdGNoX3Jlc3VtZShtX3JlY2VpdmVQb3J0RGF0YUF2YWlsYWJsZVNvdXJjZSk7Ci0KLSAgICAg
ICAgaWYgKG1fZGVhZE5hbWVTb3VyY2UpCi0gICAgICAgICAgICBkaXNwYXRjaF9yZXN1bWUobV9k
ZWFkTmFtZVNvdXJjZSk7Ci0jaWYgIVBMQVRGT1JNKElPUykKLSAgICAgICAgaWYgKG1fZXhjZXB0
aW9uUG9ydERhdGFBdmFpbGFibGVTb3VyY2UpCi0gICAgICAgICAgICBkaXNwYXRjaF9yZXN1bWUo
bV9leGNlcHRpb25Qb3J0RGF0YUF2YWlsYWJsZVNvdXJjZSk7Ci0jZW5kaWYKLQotICAgICAgICBk
ZXJlZigpOwotICAgIH0pOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
c2l6ZV90IG1hY2hNZXNzYWdlU2l6ZShzaXplX3QgYm9keVNpemUsIHNpemVfdCBudW1iZXJPZlBv
cnREZXNjcmlwdG9ycyA9IDAsIHNpemVfdCBudW1iZXJPZk9PTE1lbW9yeURlc2NyaXB0b3JzID0g
MCkKLXsKLSAgICBzaXplX3Qgc2l6ZSA9IHNpemVvZihtYWNoX21zZ19oZWFkZXJfdCkgKyBib2R5
U2l6ZTsKLSAgICBpZiAobnVtYmVyT2ZQb3J0RGVzY3JpcHRvcnMgfHwgbnVtYmVyT2ZPT0xNZW1v
cnlEZXNjcmlwdG9ycykgewotICAgICAgICBzaXplICs9IHNpemVvZihtYWNoX21zZ19ib2R5X3Qp
OwotICAgICAgICBpZiAobnVtYmVyT2ZQb3J0RGVzY3JpcHRvcnMpCi0gICAgICAgICAgICBzaXpl
ICs9IChudW1iZXJPZlBvcnREZXNjcmlwdG9ycyAqIHNpemVvZihtYWNoX21zZ19wb3J0X2Rlc2Ny
aXB0b3JfdCkpOwotICAgICAgICBpZiAobnVtYmVyT2ZPT0xNZW1vcnlEZXNjcmlwdG9ycykKLSAg
ICAgICAgICAgIHNpemUgKz0gKG51bWJlck9mT09MTWVtb3J5RGVzY3JpcHRvcnMgKiBzaXplb2Yo
bWFjaF9tc2dfb29sX2Rlc2NyaXB0b3JfdCkpOwotICAgIH0KLSAgICByZXR1cm4gcm91bmRfbXNn
KHNpemUpOwotfQotCi1ib29sIENvbm5lY3Rpb246OnBsYXRmb3JtQ2FuU2VuZE91dGdvaW5nTWVz
c2FnZXMoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENvbm5lY3Rpb246
OnNlbmRPdXRnb2luZ01lc3NhZ2Uoc3RkOjp1bmlxdWVfcHRyPE1lc3NhZ2VFbmNvZGVyPiBlbmNv
ZGVyKQotewotICAgIFZlY3RvcjxBdHRhY2htZW50PiBhdHRhY2htZW50cyA9IGVuY29kZXItPnJl
bGVhc2VBdHRhY2htZW50cygpOwotICAgIAotICAgIHNpemVfdCBudW1iZXJPZlBvcnREZXNjcmlw
dG9ycyA9IDA7Ci0gICAgc2l6ZV90IG51bWJlck9mT09MTWVtb3J5RGVzY3JpcHRvcnMgPSAwOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXR0YWNobWVudHMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgQXR0YWNobWVudDo6VHlwZSB0eXBlID0gYXR0YWNobWVudHNbaV0udHlwZSgpOwotICAg
ICAgICBpZiAodHlwZSA9PSBBdHRhY2htZW50OjpNYWNoUG9ydFR5cGUpCi0gICAgICAgICAgICBu
dW1iZXJPZlBvcnREZXNjcmlwdG9ycysrOwotICAgIH0KLSAgICAKLSAgICBzaXplX3QgbWVzc2Fn
ZVNpemUgPSBtYWNoTWVzc2FnZVNpemUoZW5jb2Rlci0+YnVmZmVyU2l6ZSgpLCBudW1iZXJPZlBv
cnREZXNjcmlwdG9ycywgbnVtYmVyT2ZPT0xNZW1vcnlEZXNjcmlwdG9ycyk7Ci0KLSAgICBib29s
IG1lc3NhZ2VCb2R5SXNPT0wgPSBmYWxzZTsKLSAgICBpZiAobWVzc2FnZVNpemUgPiBpbmxpbmVN
ZXNzYWdlTWF4U2l6ZSkgewotICAgICAgICBtZXNzYWdlQm9keUlzT09MID0gdHJ1ZTsKLQotICAg
ICAgICBudW1iZXJPZk9PTE1lbW9yeURlc2NyaXB0b3JzKys7Ci0gICAgICAgIG1lc3NhZ2VTaXpl
ID0gbWFjaE1lc3NhZ2VTaXplKDAsIG51bWJlck9mUG9ydERlc2NyaXB0b3JzLCBudW1iZXJPZk9P
TE1lbW9yeURlc2NyaXB0b3JzKTsKLSAgICB9Ci0KLSAgICBjaGFyIHN0YWNrQnVmZmVyW2lubGlu
ZU1lc3NhZ2VNYXhTaXplXTsKLSAgICBjaGFyKiBidWZmZXIgPSAmc3RhY2tCdWZmZXJbMF07Ci0g
ICAgaWYgKG1lc3NhZ2VTaXplID4gaW5saW5lTWVzc2FnZU1heFNpemUpCi0gICAgICAgIGJ1ZmZl
ciA9IChjaGFyKiltbWFwKDAsIG1lc3NhZ2VTaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBN
QVBfQU5PTiB8IE1BUF9QUklWQVRFLCAtMSwgMCk7Ci0KLSAgICBib29sIGlzQ29tcGxleCA9IChu
dW1iZXJPZlBvcnREZXNjcmlwdG9ycyArIG51bWJlck9mT09MTWVtb3J5RGVzY3JpcHRvcnMgPiAw
KTsKLQotICAgIG1hY2hfbXNnX2hlYWRlcl90KiBoZWFkZXIgPSByZWludGVycHJldF9jYXN0PG1h
Y2hfbXNnX2hlYWRlcl90Kj4oYnVmZmVyKTsKLSAgICBoZWFkZXItPm1zZ2hfYml0cyA9IE1BQ0hf
TVNHSF9CSVRTKE1BQ0hfTVNHX1RZUEVfQ09QWV9TRU5ELCAwKTsKLSAgICBoZWFkZXItPm1zZ2hf
c2l6ZSA9IG1lc3NhZ2VTaXplOwotICAgIGhlYWRlci0+bXNnaF9yZW1vdGVfcG9ydCA9IG1fc2Vu
ZFBvcnQ7Ci0gICAgaGVhZGVyLT5tc2doX2xvY2FsX3BvcnQgPSBNQUNIX1BPUlRfTlVMTDsKLSAg
ICBoZWFkZXItPm1zZ2hfaWQgPSAwOwotICAgIGlmIChtZXNzYWdlQm9keUlzT09MKQotICAgICAg
ICBoZWFkZXItPm1zZ2hfaWQgfD0gTWVzc2FnZUJvZHlJc091dE9mTGluZTsKLQotICAgIHVpbnQ4
X3QqIG1lc3NhZ2VEYXRhOwotCi0gICAgaWYgKGlzQ29tcGxleCkgewotICAgICAgICBoZWFkZXIt
Pm1zZ2hfYml0cyB8PSBNQUNIX01TR0hfQklUU19DT01QTEVYOwotCi0gICAgICAgIG1hY2hfbXNn
X2JvZHlfdCogYm9keSA9IHJlaW50ZXJwcmV0X2Nhc3Q8bWFjaF9tc2dfYm9keV90Kj4oaGVhZGVy
ICsgMSk7Ci0gICAgICAgIGJvZHktPm1zZ2hfZGVzY3JpcHRvcl9jb3VudCA9IG51bWJlck9mUG9y
dERlc2NyaXB0b3JzICsgbnVtYmVyT2ZPT0xNZW1vcnlEZXNjcmlwdG9yczsKLSAgICAgICAgdWlu
dDhfdCogZGVzY3JpcHRvckRhdGEgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihib2R5ICsg
MSk7Ci0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdHRhY2htZW50cy5zaXplKCk7
ICsraSkgewotICAgICAgICAgICAgQXR0YWNobWVudCBhdHRhY2htZW50ID0gYXR0YWNobWVudHNb
aV07Ci0KLSAgICAgICAgICAgIG1hY2hfbXNnX2Rlc2NyaXB0b3JfdCogZGVzY3JpcHRvciA9IHJl
aW50ZXJwcmV0X2Nhc3Q8bWFjaF9tc2dfZGVzY3JpcHRvcl90Kj4oZGVzY3JpcHRvckRhdGEpOwot
ICAgICAgICAgICAgc3dpdGNoIChhdHRhY2htZW50LnR5cGUoKSkgewotICAgICAgICAgICAgY2Fz
ZSBBdHRhY2htZW50OjpNYWNoUG9ydFR5cGU6Ci0gICAgICAgICAgICAgICAgZGVzY3JpcHRvci0+
cG9ydC5uYW1lID0gYXR0YWNobWVudC5wb3J0KCk7Ci0gICAgICAgICAgICAgICAgZGVzY3JpcHRv
ci0+cG9ydC5kaXNwb3NpdGlvbiA9IGF0dGFjaG1lbnQuZGlzcG9zaXRpb24oKTsKLSAgICAgICAg
ICAgICAgICBkZXNjcmlwdG9yLT5wb3J0LnR5cGUgPSBNQUNIX01TR19QT1JUX0RFU0NSSVBUT1I7
ICAgICAgICAgICAgCi0KLSAgICAgICAgICAgICAgICBkZXNjcmlwdG9yRGF0YSArPSBzaXplb2Yo
bWFjaF9tc2dfcG9ydF9kZXNjcmlwdG9yX3QpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtZXNzYWdlQm9keUlzT09M
KSB7Ci0gICAgICAgICAgICBtYWNoX21zZ19kZXNjcmlwdG9yX3QqIGRlc2NyaXB0b3IgPSByZWlu
dGVycHJldF9jYXN0PG1hY2hfbXNnX2Rlc2NyaXB0b3JfdCo+KGRlc2NyaXB0b3JEYXRhKTsKLQot
ICAgICAgICAgICAgZGVzY3JpcHRvci0+b3V0X29mX2xpbmUuYWRkcmVzcyA9IGVuY29kZXItPmJ1
ZmZlcigpOwotICAgICAgICAgICAgZGVzY3JpcHRvci0+b3V0X29mX2xpbmUuc2l6ZSA9IGVuY29k
ZXItPmJ1ZmZlclNpemUoKTsKLSAgICAgICAgICAgIGRlc2NyaXB0b3ItPm91dF9vZl9saW5lLmNv
cHkgPSBNQUNIX01TR19WSVJUVUFMX0NPUFk7Ci0gICAgICAgICAgICBkZXNjcmlwdG9yLT5vdXRf
b2ZfbGluZS5kZWFsbG9jYXRlID0gZmFsc2U7Ci0gICAgICAgICAgICBkZXNjcmlwdG9yLT5vdXRf
b2ZfbGluZS50eXBlID0gTUFDSF9NU0dfT09MX0RFU0NSSVBUT1I7Ci0KLSAgICAgICAgICAgIGRl
c2NyaXB0b3JEYXRhICs9IHNpemVvZihtYWNoX21zZ19vb2xfZGVzY3JpcHRvcl90KTsKLSAgICAg
ICAgfQotCi0gICAgICAgIG1lc3NhZ2VEYXRhID0gZGVzY3JpcHRvckRhdGE7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIG1lc3NhZ2VEYXRhID0gKHVpbnQ4X3QqKShoZWFkZXIgKyAxKTsKLQotICAgIC8v
IENvcHkgdGhlIGRhdGEgaWYgaXQgaXMgbm90IGJlaW5nIHNlbnQgb3V0LW9mLWxpbmUuCi0gICAg
aWYgKCFtZXNzYWdlQm9keUlzT09MKQotICAgICAgICBtZW1jcHkobWVzc2FnZURhdGEsIGVuY29k
ZXItPmJ1ZmZlcigpLCBlbmNvZGVyLT5idWZmZXJTaXplKCkpOwotCi0gICAgQVNTRVJUKG1fc2Vu
ZFBvcnQpOwotCi0gICAgLy8gU2VuZCB0aGUgbWVzc2FnZS4KLSAgICBrZXJuX3JldHVybl90IGty
ID0gbWFjaF9tc2coaGVhZGVyLCBNQUNIX1NFTkRfTVNHLCBtZXNzYWdlU2l6ZSwgMCwgTUFDSF9Q
T1JUX05VTEwsIE1BQ0hfTVNHX1RJTUVPVVRfTk9ORSwgTUFDSF9QT1JUX05VTEwpOwotICAgIGlm
IChrciAhPSBLRVJOX1NVQ0NFU1MpIHsKLSAgICAgICAgLy8gRklYTUU6IFdoYXQgc2hvdWxkIHdl
IGRvIGhlcmU/Ci0gICAgfQotCi0gICAgaWYgKGJ1ZmZlciAhPSAmc3RhY2tCdWZmZXJbMF0pCi0g
ICAgICAgIG11bm1hcChidWZmZXIsIG1lc3NhZ2VTaXplKTsKLQotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIENvbm5lY3Rpb246OmluaXRpYWxpemVEZWFkTmFtZVNvdXJjZSgpCi17Ci0gICAg
bV9kZWFkTmFtZVNvdXJjZSA9IGRpc3BhdGNoX3NvdXJjZV9jcmVhdGUoRElTUEFUQ0hfU09VUkNF
X1RZUEVfTUFDSF9TRU5ELCBtX3NlbmRQb3J0LCAwLCBtX2Nvbm5lY3Rpb25RdWV1ZS0+ZGlzcGF0
Y2hRdWV1ZSgpKTsKLSAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2V2ZW50X2hhbmRsZXIobV9kZWFk
TmFtZVNvdXJjZSwgYmluZCgmQ29ubmVjdGlvbjo6Y29ubmVjdGlvbkRpZENsb3NlLCB0aGlzKSk7
Ci0KLSAgICBtYWNoX3BvcnRfdCBzZW5kUG9ydCA9IG1fc2VuZFBvcnQ7Ci0gICAgZGlzcGF0Y2hf
c291cmNlX3NldF9jYW5jZWxfaGFuZGxlcihtX2RlYWROYW1lU291cmNlLCBeewotICAgICAgICAv
LyBSZWxlYXNlIG91ciBzZW5kIHJpZ2h0LgotICAgICAgICBtYWNoX3BvcnRfZGVhbGxvY2F0ZSht
YWNoX3Rhc2tfc2VsZigpLCBzZW5kUG9ydCk7Ci0gICAgfSk7Ci19Ci0KLXN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8TWVzc2FnZURlY29kZXI+IGNyZWF0ZU1lc3NhZ2VEZWNvZGVyKG1hY2hfbXNnX2hl
YWRlcl90KiBoZWFkZXIpCi17Ci0gICAgaWYgKCEoaGVhZGVyLT5tc2doX2JpdHMgJiBNQUNIX01T
R0hfQklUU19DT01QTEVYKSkgewotICAgICAgICAvLyBXZSBoYXZlIGEgc2ltcGxlIG1lc3NhZ2Uu
Ci0gICAgICAgIHVpbnQ4X3QqIGJvZHkgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihoZWFk
ZXIgKyAxKTsKLSAgICAgICAgc2l6ZV90IGJvZHlTaXplID0gaGVhZGVyLT5tc2doX3NpemUgLSBz
aXplb2YobWFjaF9tc2dfaGVhZGVyX3QpOwotCi0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPE1lc3NhZ2VEZWNvZGVyPihEYXRhUmVmZXJlbmNlKGJvZHksIGJvZHlTaXplKSwgVmVjdG9y
PEF0dGFjaG1lbnQ+KCkpOwotICAgIH0KLQotICAgIGJvb2wgbWVzc2FnZUJvZHlJc09PTCA9IGhl
YWRlci0+bXNnaF9pZCAmIE1lc3NhZ2VCb2R5SXNPdXRPZkxpbmU7Ci0KLSAgICBtYWNoX21zZ19i
b2R5X3QqIGJvZHkgPSByZWludGVycHJldF9jYXN0PG1hY2hfbXNnX2JvZHlfdCo+KGhlYWRlciAr
IDEpOwotICAgIG1hY2hfbXNnX3NpemVfdCBudW1EZXNjcmlwdG9ycyA9IGJvZHktPm1zZ2hfZGVz
Y3JpcHRvcl9jb3VudDsKLSAgICBBU1NFUlQobnVtRGVzY3JpcHRvcnMpOwotCi0gICAgdWludDhf
dCogZGVzY3JpcHRvckRhdGEgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihib2R5ICsgMSk7
Ci0KLSAgICAvLyBJZiB0aGUgbWVzc2FnZSBib2R5IHdhcyBzZW50IG91dC1vZi1saW5lLCBkb24n
dCB0cmVhdCB0aGUgbGFzdCBkZXNjcmlwdG9yCi0gICAgLy8gYXMgYW4gYXR0YWNobWVudCwgc2lu
Y2UgaXQgaXMgcmVhbGx5IHRoZSBtZXNzYWdlIGJvZHkuCi0gICAgaWYgKG1lc3NhZ2VCb2R5SXNP
T0wpCi0gICAgICAgIC0tbnVtRGVzY3JpcHRvcnM7Ci0KLSAgICAvLyBCdWlsZCBhdHRhY2htZW50
IGxpc3QKLSAgICBWZWN0b3I8QXR0YWNobWVudD4gYXR0YWNobWVudHMobnVtRGVzY3JpcHRvcnMp
OwotCi0gICAgZm9yIChtYWNoX21zZ19zaXplX3QgaSA9IDA7IGkgPCBudW1EZXNjcmlwdG9yczsg
KytpKSB7Ci0gICAgICAgIG1hY2hfbXNnX2Rlc2NyaXB0b3JfdCogZGVzY3JpcHRvciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8bWFjaF9tc2dfZGVzY3JpcHRvcl90Kj4oZGVzY3JpcHRvckRhdGEpOwotCi0g
ICAgICAgIHN3aXRjaCAoZGVzY3JpcHRvci0+dHlwZS50eXBlKSB7Ci0gICAgICAgIGNhc2UgTUFD
SF9NU0dfUE9SVF9ERVNDUklQVE9SOgotICAgICAgICAgICAgYXR0YWNobWVudHNbbnVtRGVzY3Jp
cHRvcnMgLSBpIC0gMV0gPSBBdHRhY2htZW50KGRlc2NyaXB0b3ItPnBvcnQubmFtZSwgZGVzY3Jp
cHRvci0+cG9ydC5kaXNwb3NpdGlvbik7Ci0gICAgICAgICAgICBkZXNjcmlwdG9yRGF0YSArPSBz
aXplb2YobWFjaF9tc2dfcG9ydF9kZXNjcmlwdG9yX3QpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlQoZmFsc2UgJiYgIlVuaGFuZGxlZCBk
ZXNjcmlwdG9yIHR5cGUiKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtZXNzYWdlQm9k
eUlzT09MKSB7Ci0gICAgICAgIG1hY2hfbXNnX2Rlc2NyaXB0b3JfdCogZGVzY3JpcHRvciA9IHJl
aW50ZXJwcmV0X2Nhc3Q8bWFjaF9tc2dfZGVzY3JpcHRvcl90Kj4oZGVzY3JpcHRvckRhdGEpOwot
ICAgICAgICBBU1NFUlQoZGVzY3JpcHRvci0+dHlwZS50eXBlID09IE1BQ0hfTVNHX09PTF9ERVND
UklQVE9SKTsKLQotICAgICAgICB1aW50OF90KiBtZXNzYWdlQm9keSA9IHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihkZXNjcmlwdG9yLT5vdXRfb2ZfbGluZS5hZGRyZXNzKTsKLSAgICAgICAgc2l6ZV90
IG1lc3NhZ2VCb2R5U2l6ZSA9IGRlc2NyaXB0b3ItPm91dF9vZl9saW5lLnNpemU7Ci0KLSAgICAg
ICAgYXV0byBkZWNvZGVyID0gc3RkOjptYWtlX3VuaXF1ZTxNZXNzYWdlRGVjb2Rlcj4oRGF0YVJl
ZmVyZW5jZShtZXNzYWdlQm9keSwgbWVzc2FnZUJvZHlTaXplKSwgc3RkOjptb3ZlKGF0dGFjaG1l
bnRzKSk7Ci0KLSAgICAgICAgdm1fZGVhbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCByZWludGVy
cHJldF9jYXN0PHZtX2FkZHJlc3NfdD4oZGVzY3JpcHRvci0+b3V0X29mX2xpbmUuYWRkcmVzcyks
IGRlc2NyaXB0b3ItPm91dF9vZl9saW5lLnNpemUpOwotCi0gICAgICAgIHJldHVybiBkZWNvZGVy
OwotICAgIH0KLQotICAgIHVpbnQ4X3QqIG1lc3NhZ2VCb2R5ID0gZGVzY3JpcHRvckRhdGE7Ci0g
ICAgc2l6ZV90IG1lc3NhZ2VCb2R5U2l6ZSA9IGhlYWRlci0+bXNnaF9zaXplIC0gKGRlc2NyaXB0
b3JEYXRhIC0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oaGVhZGVyKSk7Ci0KLSAgICByZXR1
cm4gc3RkOjptYWtlX3VuaXF1ZTxNZXNzYWdlRGVjb2Rlcj4oRGF0YVJlZmVyZW5jZShtZXNzYWdl
Qm9keSwgbWVzc2FnZUJvZHlTaXplKSwgYXR0YWNobWVudHMpOwotfQotCi0vLyBUaGUgcmVjZWl2
ZSBidWZmZXIgc2l6ZSBzaG91bGQgYWx3YXlzIGluY2x1ZGUgdGhlIG1heGltdW0gdHJhaWxlciBz
aXplLgotc3RhdGljIGNvbnN0IHNpemVfdCByZWNlaXZlQnVmZmVyU2l6ZSA9IGlubGluZU1lc3Nh
Z2VNYXhTaXplICsgTUFYX1RSQUlMRVJfU0laRTsKLXR5cGVkZWYgVmVjdG9yPGNoYXIsIHJlY2Vp
dmVCdWZmZXJTaXplPiBSZWNlaXZlQnVmZmVyOwotCi1zdGF0aWMgbWFjaF9tc2dfaGVhZGVyX3Qq
IHJlYWRGcm9tTWFjaFBvcnQobWFjaF9wb3J0X3QgbWFjaFBvcnQsIFJlY2VpdmVCdWZmZXImIGJ1
ZmZlcikKLXsKLSAgICBidWZmZXIucmVzaXplKHJlY2VpdmVCdWZmZXJTaXplKTsKLQotICAgIG1h
Y2hfbXNnX2hlYWRlcl90KiBoZWFkZXIgPSByZWludGVycHJldF9jYXN0PG1hY2hfbXNnX2hlYWRl
cl90Kj4oYnVmZmVyLmRhdGEoKSk7Ci0gICAga2Vybl9yZXR1cm5fdCBrciA9IG1hY2hfbXNnKGhl
YWRlciwgTUFDSF9SQ1ZfTVNHIHwgTUFDSF9SQ1ZfTEFSR0UgfCBNQUNIX1JDVl9USU1FT1VULCAw
LCBidWZmZXIuc2l6ZSgpLCBtYWNoUG9ydCwgMCwgTUFDSF9QT1JUX05VTEwpOwotICAgIGlmIChr
ciA9PSBNQUNIX1JDVl9USU1FRF9PVVQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGty
ID09IE1BQ0hfUkNWX1RPT19MQVJHRSkgewotICAgICAgICAvLyBUaGUgbWVzc2FnZSB3YXMgdG9v
IGxhcmdlLCByZXNpemUgdGhlIGJ1ZmZlciBhbmQgdHJ5IGFnYWluLgotICAgICAgICBidWZmZXIu
cmVzaXplKGhlYWRlci0+bXNnaF9zaXplICsgTUFYX1RSQUlMRVJfU0laRSk7Ci0gICAgICAgIGhl
YWRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8bWFjaF9tc2dfaGVhZGVyX3QqPihidWZmZXIuZGF0YSgp
KTsKLSAgICAgICAgCi0gICAgICAgIGtyID0gbWFjaF9tc2coaGVhZGVyLCBNQUNIX1JDVl9NU0cg
fCBNQUNIX1JDVl9MQVJHRSB8IE1BQ0hfUkNWX1RJTUVPVVQsIDAsIGJ1ZmZlci5zaXplKCksIG1h
Y2hQb3J0LCAwLCBNQUNIX1BPUlRfTlVMTCk7Ci0gICAgICAgIEFTU0VSVChrciAhPSBNQUNIX1JD
Vl9UT09fTEFSR0UpOwotICAgIH0KLQotICAgIGlmIChrciAhPSBNQUNIX01TR19TVUNDRVNTKSB7
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0KLSAgICByZXR1cm4gaGVhZGVyOwotfQotCi12b2lkIENvbm5lY3Rpb246OnJlY2VpdmVTb3Vy
Y2VFdmVudEhhbmRsZXIoKQotewotICAgIFJlY2VpdmVCdWZmZXIgYnVmZmVyOwotCi0gICAgbWFj
aF9tc2dfaGVhZGVyX3QqIGhlYWRlciA9IHJlYWRGcm9tTWFjaFBvcnQobV9yZWNlaXZlUG9ydCwg
YnVmZmVyKTsKLSAgICBpZiAoIWhlYWRlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3RkOjp1
bmlxdWVfcHRyPE1lc3NhZ2VEZWNvZGVyPiBkZWNvZGVyID0gY3JlYXRlTWVzc2FnZURlY29kZXIo
aGVhZGVyKTsKLSAgICBBU1NFUlQoZGVjb2Rlcik7Ci0KLSNpZiBQTEFURk9STShNQUMpICYmIF9f
TUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAotICAgIGRlY29kZXItPnNldElt
cG9ydGFuY2VBc3NlcnRpb24oc3RkOjptYWtlX3VuaXF1ZTxJbXBvcnRhbmNlQXNzZXJ0aW9uPiho
ZWFkZXIpKTsKLSNlbmRpZgotCi0gICAgaWYgKGRlY29kZXItPm1lc3NhZ2VSZWNlaXZlck5hbWUo
KSA9PSAiSVBDIiAmJiBkZWNvZGVyLT5tZXNzYWdlTmFtZSgpID09ICJJbml0aWFsaXplQ29ubmVj
dGlvbiIpIHsKLSAgICAgICAgQVNTRVJUKG1faXNTZXJ2ZXIpOwotICAgICAgICBBU1NFUlQoIW1f
aXNDb25uZWN0ZWQpOwotICAgICAgICBBU1NFUlQoIW1fc2VuZFBvcnQpOwotCi0gICAgICAgIE1h
Y2hQb3J0IHBvcnQ7Ci0gICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHBvcnQpKSB7Ci0gICAg
ICAgICAgICAvLyBGSVhNRTogRGlzY29ubmVjdC4KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIG1fc2VuZFBvcnQgPSBwb3J0LnBvcnQoKTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChtX3NlbmRQb3J0KSB7Ci0gICAgICAgICAgICBpbml0aWFsaXplRGVhZE5hbWVTb3Vy
Y2UoKTsKLSAgICAgICAgICAgIGRpc3BhdGNoX3Jlc3VtZShtX2RlYWROYW1lU291cmNlKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIG1faXNDb25uZWN0ZWQgPSB0cnVlOwotCi0gICAgICAgIC8vIFNl
bmQgYW55IHBlbmRpbmcgb3V0Z29pbmcgbWVzc2FnZXMuCi0gICAgICAgIHNlbmRPdXRnb2luZ01l
c3NhZ2VzKCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgIVBMQVRG
T1JNKElPUykKLSAgICBpZiAoZGVjb2Rlci0+bWVzc2FnZVJlY2VpdmVyTmFtZSgpID09ICJJUEMi
ICYmIGRlY29kZXItPm1lc3NhZ2VOYW1lKCkgPT0gIlNldEV4Y2VwdGlvblBvcnQiKSB7Ci0gICAg
ICAgIGlmIChtX2lzU2VydmVyKSB7Ci0gICAgICAgICAgICAvLyBTZXJ2ZXIgY29ubmVjdGlvbnMg
YXJlbid0IHN1cHBvc2VkIHRvIGhhdmUgdGhlaXIgZXhjZXB0aW9uIHBvcnRzIG92ZXJyaWRlbi4g
VHJlYXQgdGhpcyBhcyBhbiBpbnZhbGlkIG1lc3NhZ2UuCi0gICAgICAgICAgICBtX2NsaWVudFJ1
bkxvb3AuZGlzcGF0Y2goYmluZCgmQ29ubmVjdGlvbjo6ZGlzcGF0Y2hEaWRSZWNlaXZlSW52YWxp
ZE1lc3NhZ2UsIHRoaXMsIGRlY29kZXItPm1lc3NhZ2VSZWNlaXZlck5hbWUoKS50b1N0cmluZygp
LCBkZWNvZGVyLT5tZXNzYWdlTmFtZSgpLnRvU3RyaW5nKCkpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICBNYWNoUG9ydCBleGNlcHRpb25Qb3J0OwotICAgICAgICBp
ZiAoIWRlY29kZXItPmRlY29kZShleGNlcHRpb25Qb3J0KSkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICBzZXRNYWNoRXhjZXB0aW9uUG9ydChleGNlcHRpb25Qb3J0LnBvcnQoKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHByb2Nlc3NJbmNvbWluZ01lc3Nh
Z2Uoc3RkOjptb3ZlKGRlY29kZXIpKTsKLX0gICAgCi0KLSNpZiAhUExBVEZPUk0oSU9TKQotdm9p
ZCBDb25uZWN0aW9uOjpleGNlcHRpb25Tb3VyY2VFdmVudEhhbmRsZXIoKQotewotICAgIFJlY2Vp
dmVCdWZmZXIgYnVmZmVyOwotCi0gICAgbWFjaF9tc2dfaGVhZGVyX3QqIGhlYWRlciA9IHJlYWRG
cm9tTWFjaFBvcnQobV9leGNlcHRpb25Qb3J0LCBidWZmZXIpOwotICAgIGlmICghaGVhZGVyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXZSd2ZSByZWFkIHRoZSBleGNlcHRpb24gbWVzc2Fn
ZS4gTm93IHNlbmQgaXQgb24gdG8gdGhlIHJlYWwgZXhjZXB0aW9uIHBvcnQuCi0KLSAgICAvLyBU
aGUgcmVtb3RlIHBvcnQgc2hvdWxkIGhhdmUgYSBzZW5kIG9uY2UgcmlnaHQuCi0gICAgQVNTRVJU
KE1BQ0hfTVNHSF9CSVRTX1JFTU9URShoZWFkZXItPm1zZ2hfYml0cykgPT0gTUFDSF9NU0dfVFlQ
RV9NT1ZFX1NFTkRfT05DRSk7Ci0KLSAgICAvLyBOb3cgZ2V0IHRoZSByZWFsIGV4Y2VwdGlvbiBw
b3J0LgotICAgIG1hY2hfcG9ydF90IGV4Y2VwdGlvblBvcnQgPSBtYWNoRXhjZXB0aW9uUG9ydCgp
OwotCi0gICAgLy8gRmlyc3QsIGdldCB0aGUgY29tcGxleCBiaXQgZnJvbSB0aGUgc291cmNlIG1l
c3NhZ2UuCi0gICAgbWFjaF9tc2dfYml0c190IG1lc3NhZ2VCaXRzID0gaGVhZGVyLT5tc2doX2Jp
dHMgJiBNQUNIX01TR0hfQklUU19DT01QTEVYOwotICAgIG1lc3NhZ2VCaXRzIHw9IE1BQ0hfTVNH
SF9CSVRTKE1BQ0hfTVNHX1RZUEVfQ09QWV9TRU5ELCBNQUNIX01TR19UWVBFX01PVkVfU0VORF9P
TkNFKTsKLQotICAgIGhlYWRlci0+bXNnaF9iaXRzID0gbWVzc2FnZUJpdHM7Ci0gICAgaGVhZGVy
LT5tc2doX2xvY2FsX3BvcnQgPSBoZWFkZXItPm1zZ2hfcmVtb3RlX3BvcnQ7Ci0gICAgaGVhZGVy
LT5tc2doX3JlbW90ZV9wb3J0ID0gZXhjZXB0aW9uUG9ydDsKLQotICAgIC8vIE5vdyBzZW5kIGFs
b25nIHRoZSBtZXNzYWdlLgotICAgIGtlcm5fcmV0dXJuX3Qga3IgPSBtYWNoX21zZyhoZWFkZXIs
IE1BQ0hfU0VORF9NU0csIGhlYWRlci0+bXNnaF9zaXplLCAwLCBNQUNIX1BPUlRfTlVMTCwgTUFD
SF9NU0dfVElNRU9VVF9OT05FLCBNQUNIX1BPUlRfTlVMTCk7Ci0gICAgaWYgKGtyICE9IEtFUk5f
U1VDQ0VTUykgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzZW5kIG1lc3NhZ2UgdG8g
cmVhbCBleGNlcHRpb24gcG9ydC4gJXMgKCV4KSIsIG1hY2hfZXJyb3Jfc3RyaW5nKGtyKSwga3Ip
OwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBjb25uZWN0aW9u
RGlkQ2xvc2UoKTsKLX0KLQotdm9pZCBDb25uZWN0aW9uOjpzZXRTaG91bGRDbG9zZUNvbm5lY3Rp
b25Pbk1hY2hFeGNlcHRpb25zKCkKLXsKLSAgICBBU1NFUlQobV9leGNlcHRpb25Qb3J0ID09IE1B
Q0hfUE9SVF9OVUxMKTsKLQotICAgIGlmIChtYWNoX3BvcnRfYWxsb2NhdGUobWFjaF90YXNrX3Nl
bGYoKSwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsICZtX2V4Y2VwdGlvblBvcnQpICE9IEtFUk5f
U1VDQ0VTUykKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAgICBpZiAobWFjaF9w
b3J0X2luc2VydF9yaWdodChtYWNoX3Rhc2tfc2VsZigpLCBtX2V4Y2VwdGlvblBvcnQsIG1fZXhj
ZXB0aW9uUG9ydCwgTUFDSF9NU0dfVFlQRV9NQUtFX1NFTkQpICE9IEtFUk5fU1VDQ0VTUykKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0jZW5kaWYKLQotSVBDOjpDb25uZWN0aW9u
OjpJZGVudGlmaWVyIENvbm5lY3Rpb246OmlkZW50aWZpZXIoKSBjb25zdAotewotICAgIHJldHVy
biBJZGVudGlmaWVyKG1faXNTZXJ2ZXIgPyBtX3JlY2VpdmVQb3J0IDogbV9zZW5kUG9ydCwgbV94
cGNDb25uZWN0aW9uKTsKLX0KLSAgICAKLWJvb2wgQ29ubmVjdGlvbjo6Z2V0QXVkaXRUb2tlbihh
dWRpdF90b2tlbl90JiBhdWRpdFRva2VuKQotewotICAgIGlmICghbV94cGNDb25uZWN0aW9uKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgeHBjX2Nvbm5lY3Rpb25fZ2V0X2F1ZGl0
X3Rva2VuKG1feHBjQ29ubmVjdGlvbiwgJmF1ZGl0VG9rZW4pOwotICAgIHJldHVybiB0cnVlOwot
fQotICAgIAotfSAvLyBuYW1lc3BhY2UgSVBDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9JUEMvbWFjL0Nvbm5lY3Rpb25NYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9JUEMvbWFjL0Nvbm5lY3Rpb25NYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGRlOWRiODBmNmIzYzc0ZjBi
YmUyOTkwMTEzODZjYzg4YjFmN2ZhMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL0lQQy9tYWMvQ29ubmVjdGlvbk1hYy5tbQpAQCAtMCwwICsxLDUzMyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisK
KyNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiSW1wb3J0YW5jZUFzc2VydGlv
bi5oIgorI2luY2x1ZGUgIk1hY2hQb3J0LmgiCisjaW5jbHVkZSAiTWFjaFV0aWxpdGllcy5oIgor
I2luY2x1ZGUgPG1hY2gvbWFjaF9lcnJvci5oPgorI2luY2x1ZGUgPG1hY2gvdm1fbWFwLmg+Cisj
aW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDx4cGMveHBjLmg+CisKKyNpZiBfX2hh
c19pbmNsdWRlKDx4cGMvcHJpdmF0ZS5oPikKKyNpbmNsdWRlIDx4cGMvcHJpdmF0ZS5oPgorI2Vu
ZGlmCisKK2V4dGVybiAiQyIgdm9pZCB4cGNfY29ubmVjdGlvbl9nZXRfYXVkaXRfdG9rZW4oeHBj
X2Nvbm5lY3Rpb25fdCwgYXVkaXRfdG9rZW5fdCopOworCituYW1lc3BhY2UgSVBDIHsKKworc3Rh
dGljIGNvbnN0IHNpemVfdCBpbmxpbmVNZXNzYWdlTWF4U2l6ZSA9IDQwOTY7CisKKy8vIE1lc3Nh
Z2UgZmxhZ3MuCitlbnVtIHsKKyAgICBNZXNzYWdlQm9keUlzT3V0T2ZMaW5lID0gMSA8PCAwCit9
OworICAgIAordm9pZCBDb25uZWN0aW9uOjpwbGF0Zm9ybUludmFsaWRhdGUoKQoreworICAgIGlm
ICghbV9pc0Nvbm5lY3RlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pc0Nvbm5lY3RlZCA9
IGZhbHNlOworCisgICAgQVNTRVJUKG1fc2VuZFBvcnQpOworICAgIEFTU0VSVChtX3JlY2VpdmVQ
b3J0KTsKKworICAgIC8vIFVucmVnaXN0ZXIgb3VyIHBvcnRzLgorICAgIGRpc3BhdGNoX3NvdXJj
ZV9jYW5jZWwobV9kZWFkTmFtZVNvdXJjZSk7CisgICAgZGlzcGF0Y2hfcmVsZWFzZShtX2RlYWRO
YW1lU291cmNlKTsKKyAgICBtX2RlYWROYW1lU291cmNlID0gMDsKKyAgICBtX3NlbmRQb3J0ID0g
TUFDSF9QT1JUX05VTEw7CisKKyAgICBkaXNwYXRjaF9zb3VyY2VfY2FuY2VsKG1fcmVjZWl2ZVBv
cnREYXRhQXZhaWxhYmxlU291cmNlKTsKKyAgICBkaXNwYXRjaF9yZWxlYXNlKG1fcmVjZWl2ZVBv
cnREYXRhQXZhaWxhYmxlU291cmNlKTsKKyAgICBtX3JlY2VpdmVQb3J0RGF0YUF2YWlsYWJsZVNv
dXJjZSA9IDA7CisgICAgbV9yZWNlaXZlUG9ydCA9IE1BQ0hfUE9SVF9OVUxMOworCisjaWYgIVBM
QVRGT1JNKElPUykKKyAgICBpZiAobV9leGNlcHRpb25Qb3J0KSB7CisgICAgICAgIGRpc3BhdGNo
X3NvdXJjZV9jYW5jZWwobV9leGNlcHRpb25Qb3J0RGF0YUF2YWlsYWJsZVNvdXJjZSk7CisgICAg
ICAgIGRpc3BhdGNoX3JlbGVhc2UobV9leGNlcHRpb25Qb3J0RGF0YUF2YWlsYWJsZVNvdXJjZSk7
CisgICAgICAgIG1fZXhjZXB0aW9uUG9ydERhdGFBdmFpbGFibGVTb3VyY2UgPSAwOworICAgICAg
ICBtX2V4Y2VwdGlvblBvcnQgPSBNQUNIX1BPUlRfTlVMTDsKKyAgICB9CisjZW5kaWYKKworICAg
IGlmIChtX3hwY0Nvbm5lY3Rpb24pIHsKKyAgICAgICAgeHBjX3JlbGVhc2UobV94cGNDb25uZWN0
aW9uKTsKKyAgICAgICAgbV94cGNDb25uZWN0aW9uID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgQ29u
bmVjdGlvbjo6cGxhdGZvcm1Jbml0aWFsaXplKElkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyNp
ZiAhUExBVEZPUk0oSU9TKQorICAgIG1fZXhjZXB0aW9uUG9ydCA9IE1BQ0hfUE9SVF9OVUxMOwor
ICAgIG1fZXhjZXB0aW9uUG9ydERhdGFBdmFpbGFibGVTb3VyY2UgPSBudWxscHRyOworI2VuZGlm
CisKKyAgICBpZiAobV9pc1NlcnZlcikgeworICAgICAgICBtX3JlY2VpdmVQb3J0ID0gaWRlbnRp
Zmllci5wb3J0OworICAgICAgICBtX3NlbmRQb3J0ID0gTUFDSF9QT1JUX05VTEw7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgbV9yZWNlaXZlUG9ydCA9IE1BQ0hfUE9SVF9OVUxMOworICAgICAgICBt
X3NlbmRQb3J0ID0gaWRlbnRpZmllci5wb3J0OworICAgIH0KKworICAgIG1fZGVhZE5hbWVTb3Vy
Y2UgPSBudWxscHRyOworICAgIG1fcmVjZWl2ZVBvcnREYXRhQXZhaWxhYmxlU291cmNlID0gbnVs
bHB0cjsKKworICAgIG1feHBjQ29ubmVjdGlvbiA9IGlkZW50aWZpZXIueHBjQ29ubmVjdGlvbjsK
KyAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiBleHBsaWNpdGx5IHJldGFpbmluZyB0aGUgY29ubmVj
dGlvbiBoZXJlLCBJZGVudGlmaWVyOjp4cGNDb25uZWN0aW9uCisgICAgLy8gc2hvdWxkIGp1c3Qg
YmUgYSBzbWFydCBwb2ludGVyLgorICAgIGlmIChtX3hwY0Nvbm5lY3Rpb24pCisgICAgICAgIHhw
Y19yZXRhaW4obV94cGNDb25uZWN0aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rp
b24+CitzdGF0aWMgZGlzcGF0Y2hfc291cmNlX3QgY3JlYXRlRGF0YUF2YWlsYWJsZVNvdXJjZSht
YWNoX3BvcnRfdCByZWNlaXZlUG9ydCwgV29ya1F1ZXVlJiB3b3JrUXVldWUsIEZ1bmN0aW9uJiYg
ZnVuY3Rpb24pCit7CisgICAgZGlzcGF0Y2hfc291cmNlX3Qgc291cmNlID0gZGlzcGF0Y2hfc291
cmNlX2NyZWF0ZShESVNQQVRDSF9TT1VSQ0VfVFlQRV9NQUNIX1JFQ1YsIHJlY2VpdmVQb3J0LCAw
LCB3b3JrUXVldWUuZGlzcGF0Y2hRdWV1ZSgpKTsKKyAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2V2
ZW50X2hhbmRsZXIoc291cmNlLCBmdW5jdGlvbik7CisKKyAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0
X2NhbmNlbF9oYW5kbGVyKHNvdXJjZSwgXnsKKyAgICAgICAgbWFjaF9wb3J0X21vZF9yZWZzKG1h
Y2hfdGFza19zZWxmKCksIHJlY2VpdmVQb3J0LCBNQUNIX1BPUlRfUklHSFRfUkVDRUlWRSwgLTEp
OworICAgIH0pOworCisgICAgcmV0dXJuIHNvdXJjZTsKK30KKworYm9vbCBDb25uZWN0aW9uOjpv
cGVuKCkKK3sKKyAgICBpZiAobV9pc1NlcnZlcikgeworICAgICAgICBBU1NFUlQobV9yZWNlaXZl
UG9ydCk7CisgICAgICAgIEFTU0VSVCghbV9zZW5kUG9ydCk7CisgICAgICAgIAorICAgIH0gZWxz
ZSB7CisgICAgICAgIEFTU0VSVCghbV9yZWNlaXZlUG9ydCk7CisgICAgICAgIEFTU0VSVChtX3Nl
bmRQb3J0KTsKKworICAgICAgICAvLyBDcmVhdGUgdGhlIHJlY2VpdmUgcG9ydC4KKyAgICAgICAg
bWFjaF9wb3J0X2FsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksIE1BQ0hfUE9SVF9SSUdIVF9SRUNF
SVZFLCAmbV9yZWNlaXZlUG9ydCk7CisKKyNpZiBQTEFURk9STShJT1MpIHx8IF9fTUFDX09TX1hf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorICAgICAgICBtYWNoX3BvcnRfc2V0X2F0dHJp
YnV0ZXMobWFjaF90YXNrX3NlbGYoKSwgbV9yZWNlaXZlUG9ydCwgTUFDSF9QT1JUX0lNUE9SVEFO
Q0VfUkVDRUlWRVIsIChtYWNoX3BvcnRfaW5mb190KTAsIDApOworI2VuZGlmCisKKyAgICAgICAg
bV9pc0Nvbm5lY3RlZCA9IHRydWU7CisgICAgICAgIAorICAgICAgICAvLyBTZW5kIHRoZSBpbml0
aWFsaXplIG1lc3NhZ2UsIHdoaWNoIGNvbnRhaW5zIGEgc2VuZCByaWdodCBmb3IgdGhlIHNlcnZl
ciB0byB1c2UuCisgICAgICAgIGF1dG8gZW5jb2RlciA9IHN0ZDo6bWFrZV91bmlxdWU8TWVzc2Fn
ZUVuY29kZXI+KCJJUEMiLCAiSW5pdGlhbGl6ZUNvbm5lY3Rpb24iLCAwKTsKKyAgICAgICAgZW5j
b2Rlci0+ZW5jb2RlKE1hY2hQb3J0KG1fcmVjZWl2ZVBvcnQsIE1BQ0hfTVNHX1RZUEVfTUFLRV9T
RU5EKSk7CisKKyAgICAgICAgc2VuZE1lc3NhZ2Uoc3RkOjptb3ZlKGVuY29kZXIpKTsKKworICAg
ICAgICBpbml0aWFsaXplRGVhZE5hbWVTb3VyY2UoKTsKKyAgICB9CisKKyAgICAvLyBDaGFuZ2Ug
dGhlIG1lc3NhZ2UgcXVldWUgbGVuZ3RoIGZvciB0aGUgcmVjZWl2ZSBwb3J0LgorICAgIHNldE1h
Y2hQb3J0UXVldWVMZW5ndGgobV9yZWNlaXZlUG9ydCwgTUFDSF9QT1JUX1FMSU1JVF9MQVJHRSk7
CisKKyAgICAvLyBSZWdpc3RlciB0aGUgZGF0YSBhdmFpbGFibGUgaGFuZGxlci4KKyAgICBSZWZQ
dHI8Q29ubmVjdGlvbj4gY29ubmVjdGlvbih0aGlzKTsKKyAgICBtX3JlY2VpdmVQb3J0RGF0YUF2
YWlsYWJsZVNvdXJjZSA9IGNyZWF0ZURhdGFBdmFpbGFibGVTb3VyY2UobV9yZWNlaXZlUG9ydCwg
Km1fY29ubmVjdGlvblF1ZXVlLCBbY29ubmVjdGlvbl0geworICAgICAgICBjb25uZWN0aW9uLT5y
ZWNlaXZlU291cmNlRXZlbnRIYW5kbGVyKCk7CisgICAgfSk7CisKKyNpZiAhUExBVEZPUk0oSU9T
KQorICAgIC8vIElmIHdlIGhhdmUgYW4gZXhjZXB0aW9uIHBvcnQsIHJlZ2lzdGVyIHRoZSBkYXRh
IGF2YWlsYWJsZSBoYW5kbGVyIGFuZCBzZW5kIG92ZXIgdGhlIHBvcnQgdG8gdGhlIG90aGVyIGVu
ZC4KKyAgICBpZiAobV9leGNlcHRpb25Qb3J0KSB7CisgICAgICAgIG1fZXhjZXB0aW9uUG9ydERh
dGFBdmFpbGFibGVTb3VyY2UgPSBjcmVhdGVEYXRhQXZhaWxhYmxlU291cmNlKG1fZXhjZXB0aW9u
UG9ydCwgKm1fY29ubmVjdGlvblF1ZXVlLCBbY29ubmVjdGlvbl0geworICAgICAgICAgICAgY29u
bmVjdGlvbi0+ZXhjZXB0aW9uU291cmNlRXZlbnRIYW5kbGVyKCk7CisgICAgICAgIH0pOworCisg
ICAgICAgIGF1dG8gZW5jb2RlciA9IHN0ZDo6bWFrZV91bmlxdWU8TWVzc2FnZUVuY29kZXI+KCJJ
UEMiLCAiU2V0RXhjZXB0aW9uUG9ydCIsIDApOworICAgICAgICBlbmNvZGVyLT5lbmNvZGUoTWFj
aFBvcnQobV9leGNlcHRpb25Qb3J0LCBNQUNIX01TR19UWVBFX01BS0VfU0VORCkpOworCisgICAg
ICAgIHNlbmRNZXNzYWdlKHN0ZDo6bW92ZShlbmNvZGVyKSk7CisgICAgfQorI2VuZGlmCisKKyAg
ICByZWYoKTsKKyAgICBkaXNwYXRjaF9hc3luYyhtX2Nvbm5lY3Rpb25RdWV1ZS0+ZGlzcGF0Y2hR
dWV1ZSgpLCBeeworICAgICAgICBkaXNwYXRjaF9yZXN1bWUobV9yZWNlaXZlUG9ydERhdGFBdmFp
bGFibGVTb3VyY2UpOworCisgICAgICAgIGlmIChtX2RlYWROYW1lU291cmNlKQorICAgICAgICAg
ICAgZGlzcGF0Y2hfcmVzdW1lKG1fZGVhZE5hbWVTb3VyY2UpOworI2lmICFQTEFURk9STShJT1Mp
CisgICAgICAgIGlmIChtX2V4Y2VwdGlvblBvcnREYXRhQXZhaWxhYmxlU291cmNlKQorICAgICAg
ICAgICAgZGlzcGF0Y2hfcmVzdW1lKG1fZXhjZXB0aW9uUG9ydERhdGFBdmFpbGFibGVTb3VyY2Up
OworI2VuZGlmCisKKyAgICAgICAgZGVyZWYoKTsKKyAgICB9KTsKKworICAgIHJldHVybiB0cnVl
OworfQorCitzdGF0aWMgaW5saW5lIHNpemVfdCBtYWNoTWVzc2FnZVNpemUoc2l6ZV90IGJvZHlT
aXplLCBzaXplX3QgbnVtYmVyT2ZQb3J0RGVzY3JpcHRvcnMgPSAwLCBzaXplX3QgbnVtYmVyT2ZP
T0xNZW1vcnlEZXNjcmlwdG9ycyA9IDApCit7CisgICAgc2l6ZV90IHNpemUgPSBzaXplb2YobWFj
aF9tc2dfaGVhZGVyX3QpICsgYm9keVNpemU7CisgICAgaWYgKG51bWJlck9mUG9ydERlc2NyaXB0
b3JzIHx8IG51bWJlck9mT09MTWVtb3J5RGVzY3JpcHRvcnMpIHsKKyAgICAgICAgc2l6ZSArPSBz
aXplb2YobWFjaF9tc2dfYm9keV90KTsKKyAgICAgICAgaWYgKG51bWJlck9mUG9ydERlc2NyaXB0
b3JzKQorICAgICAgICAgICAgc2l6ZSArPSAobnVtYmVyT2ZQb3J0RGVzY3JpcHRvcnMgKiBzaXpl
b2YobWFjaF9tc2dfcG9ydF9kZXNjcmlwdG9yX3QpKTsKKyAgICAgICAgaWYgKG51bWJlck9mT09M
TWVtb3J5RGVzY3JpcHRvcnMpCisgICAgICAgICAgICBzaXplICs9IChudW1iZXJPZk9PTE1lbW9y
eURlc2NyaXB0b3JzICogc2l6ZW9mKG1hY2hfbXNnX29vbF9kZXNjcmlwdG9yX3QpKTsKKyAgICB9
CisgICAgcmV0dXJuIHJvdW5kX21zZyhzaXplKTsKK30KKworYm9vbCBDb25uZWN0aW9uOjpwbGF0
Zm9ybUNhblNlbmRPdXRnb2luZ01lc3NhZ2VzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBDb25uZWN0aW9uOjpzZW5kT3V0Z29pbmdNZXNzYWdlKHN0ZDo6dW5pcXVlX3B0
cjxNZXNzYWdlRW5jb2Rlcj4gZW5jb2RlcikKK3sKKyAgICBWZWN0b3I8QXR0YWNobWVudD4gYXR0
YWNobWVudHMgPSBlbmNvZGVyLT5yZWxlYXNlQXR0YWNobWVudHMoKTsKKyAgICAKKyAgICBzaXpl
X3QgbnVtYmVyT2ZQb3J0RGVzY3JpcHRvcnMgPSAwOworICAgIHNpemVfdCBudW1iZXJPZk9PTE1l
bW9yeURlc2NyaXB0b3JzID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF0dGFjaG1l
bnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEF0dGFjaG1lbnQ6OlR5cGUgdHlwZSA9IGF0dGFj
aG1lbnRzW2ldLnR5cGUoKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQXR0YWNobWVudDo6TWFjaFBv
cnRUeXBlKQorICAgICAgICAgICAgbnVtYmVyT2ZQb3J0RGVzY3JpcHRvcnMrKzsKKyAgICB9Cisg
ICAgCisgICAgc2l6ZV90IG1lc3NhZ2VTaXplID0gbWFjaE1lc3NhZ2VTaXplKGVuY29kZXItPmJ1
ZmZlclNpemUoKSwgbnVtYmVyT2ZQb3J0RGVzY3JpcHRvcnMsIG51bWJlck9mT09MTWVtb3J5RGVz
Y3JpcHRvcnMpOworCisgICAgYm9vbCBtZXNzYWdlQm9keUlzT09MID0gZmFsc2U7CisgICAgaWYg
KG1lc3NhZ2VTaXplID4gaW5saW5lTWVzc2FnZU1heFNpemUpIHsKKyAgICAgICAgbWVzc2FnZUJv
ZHlJc09PTCA9IHRydWU7CisKKyAgICAgICAgbnVtYmVyT2ZPT0xNZW1vcnlEZXNjcmlwdG9ycysr
OworICAgICAgICBtZXNzYWdlU2l6ZSA9IG1hY2hNZXNzYWdlU2l6ZSgwLCBudW1iZXJPZlBvcnRE
ZXNjcmlwdG9ycywgbnVtYmVyT2ZPT0xNZW1vcnlEZXNjcmlwdG9ycyk7CisgICAgfQorCisgICAg
Y2hhciBzdGFja0J1ZmZlcltpbmxpbmVNZXNzYWdlTWF4U2l6ZV07CisgICAgY2hhciogYnVmZmVy
ID0gJnN0YWNrQnVmZmVyWzBdOworICAgIGlmIChtZXNzYWdlU2l6ZSA+IGlubGluZU1lc3NhZ2VN
YXhTaXplKQorICAgICAgICBidWZmZXIgPSAoY2hhciopbW1hcCgwLCBtZXNzYWdlU2l6ZSwgUFJP
VF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX0FOT04gfCBNQVBfUFJJVkFURSwgLTEsIDApOworCisg
ICAgYm9vbCBpc0NvbXBsZXggPSAobnVtYmVyT2ZQb3J0RGVzY3JpcHRvcnMgKyBudW1iZXJPZk9P
TE1lbW9yeURlc2NyaXB0b3JzID4gMCk7CisKKyAgICBtYWNoX21zZ19oZWFkZXJfdCogaGVhZGVy
ID0gcmVpbnRlcnByZXRfY2FzdDxtYWNoX21zZ19oZWFkZXJfdCo+KGJ1ZmZlcik7CisgICAgaGVh
ZGVyLT5tc2doX2JpdHMgPSBNQUNIX01TR0hfQklUUyhNQUNIX01TR19UWVBFX0NPUFlfU0VORCwg
MCk7CisgICAgaGVhZGVyLT5tc2doX3NpemUgPSBtZXNzYWdlU2l6ZTsKKyAgICBoZWFkZXItPm1z
Z2hfcmVtb3RlX3BvcnQgPSBtX3NlbmRQb3J0OworICAgIGhlYWRlci0+bXNnaF9sb2NhbF9wb3J0
ID0gTUFDSF9QT1JUX05VTEw7CisgICAgaGVhZGVyLT5tc2doX2lkID0gMDsKKyAgICBpZiAobWVz
c2FnZUJvZHlJc09PTCkKKyAgICAgICAgaGVhZGVyLT5tc2doX2lkIHw9IE1lc3NhZ2VCb2R5SXNP
dXRPZkxpbmU7CisKKyAgICB1aW50OF90KiBtZXNzYWdlRGF0YTsKKworICAgIGlmIChpc0NvbXBs
ZXgpIHsKKyAgICAgICAgaGVhZGVyLT5tc2doX2JpdHMgfD0gTUFDSF9NU0dIX0JJVFNfQ09NUExF
WDsKKworICAgICAgICBtYWNoX21zZ19ib2R5X3QqIGJvZHkgPSByZWludGVycHJldF9jYXN0PG1h
Y2hfbXNnX2JvZHlfdCo+KGhlYWRlciArIDEpOworICAgICAgICBib2R5LT5tc2doX2Rlc2NyaXB0
b3JfY291bnQgPSBudW1iZXJPZlBvcnREZXNjcmlwdG9ycyArIG51bWJlck9mT09MTWVtb3J5RGVz
Y3JpcHRvcnM7CisgICAgICAgIHVpbnQ4X3QqIGRlc2NyaXB0b3JEYXRhID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oYm9keSArIDEpOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYXR0YWNobWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIEF0dGFjaG1lbnQgYXR0
YWNobWVudCA9IGF0dGFjaG1lbnRzW2ldOworCisgICAgICAgICAgICBtYWNoX21zZ19kZXNjcmlw
dG9yX3QqIGRlc2NyaXB0b3IgPSByZWludGVycHJldF9jYXN0PG1hY2hfbXNnX2Rlc2NyaXB0b3Jf
dCo+KGRlc2NyaXB0b3JEYXRhKTsKKyAgICAgICAgICAgIHN3aXRjaCAoYXR0YWNobWVudC50eXBl
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXR0YWNobWVudDo6TWFjaFBvcnRUeXBlOgorICAgICAg
ICAgICAgICAgIGRlc2NyaXB0b3ItPnBvcnQubmFtZSA9IGF0dGFjaG1lbnQucG9ydCgpOworICAg
ICAgICAgICAgICAgIGRlc2NyaXB0b3ItPnBvcnQuZGlzcG9zaXRpb24gPSBhdHRhY2htZW50LmRp
c3Bvc2l0aW9uKCk7CisgICAgICAgICAgICAgICAgZGVzY3JpcHRvci0+cG9ydC50eXBlID0gTUFD
SF9NU0dfUE9SVF9ERVNDUklQVE9SOyAgICAgICAgICAgIAorCisgICAgICAgICAgICAgICAgZGVz
Y3JpcHRvckRhdGEgKz0gc2l6ZW9mKG1hY2hfbXNnX3BvcnRfZGVzY3JpcHRvcl90KTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobWVzc2FnZUJvZHlJc09PTCkgeworICAgICAgICAgICAgbWFjaF9tc2dfZGVzY3JpcHRv
cl90KiBkZXNjcmlwdG9yID0gcmVpbnRlcnByZXRfY2FzdDxtYWNoX21zZ19kZXNjcmlwdG9yX3Qq
PihkZXNjcmlwdG9yRGF0YSk7CisKKyAgICAgICAgICAgIGRlc2NyaXB0b3ItPm91dF9vZl9saW5l
LmFkZHJlc3MgPSBlbmNvZGVyLT5idWZmZXIoKTsKKyAgICAgICAgICAgIGRlc2NyaXB0b3ItPm91
dF9vZl9saW5lLnNpemUgPSBlbmNvZGVyLT5idWZmZXJTaXplKCk7CisgICAgICAgICAgICBkZXNj
cmlwdG9yLT5vdXRfb2ZfbGluZS5jb3B5ID0gTUFDSF9NU0dfVklSVFVBTF9DT1BZOworICAgICAg
ICAgICAgZGVzY3JpcHRvci0+b3V0X29mX2xpbmUuZGVhbGxvY2F0ZSA9IGZhbHNlOworICAgICAg
ICAgICAgZGVzY3JpcHRvci0+b3V0X29mX2xpbmUudHlwZSA9IE1BQ0hfTVNHX09PTF9ERVNDUklQ
VE9SOworCisgICAgICAgICAgICBkZXNjcmlwdG9yRGF0YSArPSBzaXplb2YobWFjaF9tc2dfb29s
X2Rlc2NyaXB0b3JfdCk7CisgICAgICAgIH0KKworICAgICAgICBtZXNzYWdlRGF0YSA9IGRlc2Ny
aXB0b3JEYXRhOworICAgIH0gZWxzZQorICAgICAgICBtZXNzYWdlRGF0YSA9ICh1aW50OF90Kiko
aGVhZGVyICsgMSk7CisKKyAgICAvLyBDb3B5IHRoZSBkYXRhIGlmIGl0IGlzIG5vdCBiZWluZyBz
ZW50IG91dC1vZi1saW5lLgorICAgIGlmICghbWVzc2FnZUJvZHlJc09PTCkKKyAgICAgICAgbWVt
Y3B5KG1lc3NhZ2VEYXRhLCBlbmNvZGVyLT5idWZmZXIoKSwgZW5jb2Rlci0+YnVmZmVyU2l6ZSgp
KTsKKworICAgIEFTU0VSVChtX3NlbmRQb3J0KTsKKworICAgIC8vIFNlbmQgdGhlIG1lc3NhZ2Uu
CisgICAga2Vybl9yZXR1cm5fdCBrciA9IG1hY2hfbXNnKGhlYWRlciwgTUFDSF9TRU5EX01TRywg
bWVzc2FnZVNpemUsIDAsIE1BQ0hfUE9SVF9OVUxMLCBNQUNIX01TR19USU1FT1VUX05PTkUsIE1B
Q0hfUE9SVF9OVUxMKTsKKyAgICBpZiAoa3IgIT0gS0VSTl9TVUNDRVNTKSB7CisgICAgICAgIC8v
IEZJWE1FOiBXaGF0IHNob3VsZCB3ZSBkbyBoZXJlPworICAgIH0KKworICAgIGlmIChidWZmZXIg
IT0gJnN0YWNrQnVmZmVyWzBdKQorICAgICAgICBtdW5tYXAoYnVmZmVyLCBtZXNzYWdlU2l6ZSk7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDb25uZWN0aW9uOjppbml0aWFsaXplRGVh
ZE5hbWVTb3VyY2UoKQoreworICAgIG1fZGVhZE5hbWVTb3VyY2UgPSBkaXNwYXRjaF9zb3VyY2Vf
Y3JlYXRlKERJU1BBVENIX1NPVVJDRV9UWVBFX01BQ0hfU0VORCwgbV9zZW5kUG9ydCwgMCwgbV9j
b25uZWN0aW9uUXVldWUtPmRpc3BhdGNoUXVldWUoKSk7CisgICAgZGlzcGF0Y2hfc291cmNlX3Nl
dF9ldmVudF9oYW5kbGVyKG1fZGVhZE5hbWVTb3VyY2UsIGJpbmQoJkNvbm5lY3Rpb246OmNvbm5l
Y3Rpb25EaWRDbG9zZSwgdGhpcykpOworCisgICAgbWFjaF9wb3J0X3Qgc2VuZFBvcnQgPSBtX3Nl
bmRQb3J0OworICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRfY2FuY2VsX2hhbmRsZXIobV9kZWFkTmFt
ZVNvdXJjZSwgXnsKKyAgICAgICAgLy8gUmVsZWFzZSBvdXIgc2VuZCByaWdodC4KKyAgICAgICAg
bWFjaF9wb3J0X2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgc2VuZFBvcnQpOworICAgIH0p
OworfQorCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE1lc3NhZ2VEZWNvZGVyPiBjcmVhdGVNZXNz
YWdlRGVjb2RlcihtYWNoX21zZ19oZWFkZXJfdCogaGVhZGVyKQoreworICAgIGlmICghKGhlYWRl
ci0+bXNnaF9iaXRzICYgTUFDSF9NU0dIX0JJVFNfQ09NUExFWCkpIHsKKyAgICAgICAgLy8gV2Ug
aGF2ZSBhIHNpbXBsZSBtZXNzYWdlLgorICAgICAgICB1aW50OF90KiBib2R5ID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oaGVhZGVyICsgMSk7CisgICAgICAgIHNpemVfdCBib2R5U2l6ZSA9
IGhlYWRlci0+bXNnaF9zaXplIC0gc2l6ZW9mKG1hY2hfbXNnX2hlYWRlcl90KTsKKworICAgICAg
ICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxNZXNzYWdlRGVjb2Rlcj4oRGF0YVJlZmVyZW5jZShi
b2R5LCBib2R5U2l6ZSksIFZlY3RvcjxBdHRhY2htZW50PigpKTsKKyAgICB9CisKKyAgICBib29s
IG1lc3NhZ2VCb2R5SXNPT0wgPSBoZWFkZXItPm1zZ2hfaWQgJiBNZXNzYWdlQm9keUlzT3V0T2ZM
aW5lOworCisgICAgbWFjaF9tc2dfYm9keV90KiBib2R5ID0gcmVpbnRlcnByZXRfY2FzdDxtYWNo
X21zZ19ib2R5X3QqPihoZWFkZXIgKyAxKTsKKyAgICBtYWNoX21zZ19zaXplX3QgbnVtRGVzY3Jp
cHRvcnMgPSBib2R5LT5tc2doX2Rlc2NyaXB0b3JfY291bnQ7CisgICAgQVNTRVJUKG51bURlc2Ny
aXB0b3JzKTsKKworICAgIHVpbnQ4X3QqIGRlc2NyaXB0b3JEYXRhID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50OF90Kj4oYm9keSArIDEpOworCisgICAgLy8gSWYgdGhlIG1lc3NhZ2UgYm9keSB3YXMg
c2VudCBvdXQtb2YtbGluZSwgZG9uJ3QgdHJlYXQgdGhlIGxhc3QgZGVzY3JpcHRvcgorICAgIC8v
IGFzIGFuIGF0dGFjaG1lbnQsIHNpbmNlIGl0IGlzIHJlYWxseSB0aGUgbWVzc2FnZSBib2R5Lgor
ICAgIGlmIChtZXNzYWdlQm9keUlzT09MKQorICAgICAgICAtLW51bURlc2NyaXB0b3JzOworCisg
ICAgLy8gQnVpbGQgYXR0YWNobWVudCBsaXN0CisgICAgVmVjdG9yPEF0dGFjaG1lbnQ+IGF0dGFj
aG1lbnRzKG51bURlc2NyaXB0b3JzKTsKKworICAgIGZvciAobWFjaF9tc2dfc2l6ZV90IGkgPSAw
OyBpIDwgbnVtRGVzY3JpcHRvcnM7ICsraSkgeworICAgICAgICBtYWNoX21zZ19kZXNjcmlwdG9y
X3QqIGRlc2NyaXB0b3IgPSByZWludGVycHJldF9jYXN0PG1hY2hfbXNnX2Rlc2NyaXB0b3JfdCo+
KGRlc2NyaXB0b3JEYXRhKTsKKworICAgICAgICBzd2l0Y2ggKGRlc2NyaXB0b3ItPnR5cGUudHlw
ZSkgeworICAgICAgICBjYXNlIE1BQ0hfTVNHX1BPUlRfREVTQ1JJUFRPUjoKKyAgICAgICAgICAg
IGF0dGFjaG1lbnRzW251bURlc2NyaXB0b3JzIC0gaSAtIDFdID0gQXR0YWNobWVudChkZXNjcmlw
dG9yLT5wb3J0Lm5hbWUsIGRlc2NyaXB0b3ItPnBvcnQuZGlzcG9zaXRpb24pOworICAgICAgICAg
ICAgZGVzY3JpcHRvckRhdGEgKz0gc2l6ZW9mKG1hY2hfbXNnX3BvcnRfZGVzY3JpcHRvcl90KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJU
KGZhbHNlICYmICJVbmhhbmRsZWQgZGVzY3JpcHRvciB0eXBlIik7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAobWVzc2FnZUJvZHlJc09PTCkgeworICAgICAgICBtYWNoX21zZ19kZXNjcmlw
dG9yX3QqIGRlc2NyaXB0b3IgPSByZWludGVycHJldF9jYXN0PG1hY2hfbXNnX2Rlc2NyaXB0b3Jf
dCo+KGRlc2NyaXB0b3JEYXRhKTsKKyAgICAgICAgQVNTRVJUKGRlc2NyaXB0b3ItPnR5cGUudHlw
ZSA9PSBNQUNIX01TR19PT0xfREVTQ1JJUFRPUik7CisKKyAgICAgICAgdWludDhfdCogbWVzc2Fn
ZUJvZHkgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGVzY3JpcHRvci0+b3V0X29mX2xpbmUuYWRk
cmVzcyk7CisgICAgICAgIHNpemVfdCBtZXNzYWdlQm9keVNpemUgPSBkZXNjcmlwdG9yLT5vdXRf
b2ZfbGluZS5zaXplOworCisgICAgICAgIGF1dG8gZGVjb2RlciA9IHN0ZDo6bWFrZV91bmlxdWU8
TWVzc2FnZURlY29kZXI+KERhdGFSZWZlcmVuY2UobWVzc2FnZUJvZHksIG1lc3NhZ2VCb2R5U2l6
ZSksIHN0ZDo6bW92ZShhdHRhY2htZW50cykpOworCisgICAgICAgIHZtX2RlYWxsb2NhdGUobWFj
aF90YXNrX3NlbGYoKSwgcmVpbnRlcnByZXRfY2FzdDx2bV9hZGRyZXNzX3Q+KGRlc2NyaXB0b3It
Pm91dF9vZl9saW5lLmFkZHJlc3MpLCBkZXNjcmlwdG9yLT5vdXRfb2ZfbGluZS5zaXplKTsKKwor
ICAgICAgICByZXR1cm4gZGVjb2RlcjsKKyAgICB9CisKKyAgICB1aW50OF90KiBtZXNzYWdlQm9k
eSA9IGRlc2NyaXB0b3JEYXRhOworICAgIHNpemVfdCBtZXNzYWdlQm9keVNpemUgPSBoZWFkZXIt
Pm1zZ2hfc2l6ZSAtIChkZXNjcmlwdG9yRGF0YSAtIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+
KGhlYWRlcikpOworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8TWVzc2FnZURlY29kZXI+
KERhdGFSZWZlcmVuY2UobWVzc2FnZUJvZHksIG1lc3NhZ2VCb2R5U2l6ZSksIGF0dGFjaG1lbnRz
KTsKK30KKworLy8gVGhlIHJlY2VpdmUgYnVmZmVyIHNpemUgc2hvdWxkIGFsd2F5cyBpbmNsdWRl
IHRoZSBtYXhpbXVtIHRyYWlsZXIgc2l6ZS4KK3N0YXRpYyBjb25zdCBzaXplX3QgcmVjZWl2ZUJ1
ZmZlclNpemUgPSBpbmxpbmVNZXNzYWdlTWF4U2l6ZSArIE1BWF9UUkFJTEVSX1NJWkU7Cit0eXBl
ZGVmIFZlY3RvcjxjaGFyLCByZWNlaXZlQnVmZmVyU2l6ZT4gUmVjZWl2ZUJ1ZmZlcjsKKworc3Rh
dGljIG1hY2hfbXNnX2hlYWRlcl90KiByZWFkRnJvbU1hY2hQb3J0KG1hY2hfcG9ydF90IG1hY2hQ
b3J0LCBSZWNlaXZlQnVmZmVyJiBidWZmZXIpCit7CisgICAgYnVmZmVyLnJlc2l6ZShyZWNlaXZl
QnVmZmVyU2l6ZSk7CisKKyAgICBtYWNoX21zZ19oZWFkZXJfdCogaGVhZGVyID0gcmVpbnRlcnBy
ZXRfY2FzdDxtYWNoX21zZ19oZWFkZXJfdCo+KGJ1ZmZlci5kYXRhKCkpOworICAgIGtlcm5fcmV0
dXJuX3Qga3IgPSBtYWNoX21zZyhoZWFkZXIsIE1BQ0hfUkNWX01TRyB8IE1BQ0hfUkNWX0xBUkdF
IHwgTUFDSF9SQ1ZfVElNRU9VVCwgMCwgYnVmZmVyLnNpemUoKSwgbWFjaFBvcnQsIDAsIE1BQ0hf
UE9SVF9OVUxMKTsKKyAgICBpZiAoa3IgPT0gTUFDSF9SQ1ZfVElNRURfT1VUKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIGlmIChrciA9PSBNQUNIX1JDVl9UT09fTEFSR0UpIHsKKyAgICAgICAg
Ly8gVGhlIG1lc3NhZ2Ugd2FzIHRvbyBsYXJnZSwgcmVzaXplIHRoZSBidWZmZXIgYW5kIHRyeSBh
Z2Fpbi4KKyAgICAgICAgYnVmZmVyLnJlc2l6ZShoZWFkZXItPm1zZ2hfc2l6ZSArIE1BWF9UUkFJ
TEVSX1NJWkUpOworICAgICAgICBoZWFkZXIgPSByZWludGVycHJldF9jYXN0PG1hY2hfbXNnX2hl
YWRlcl90Kj4oYnVmZmVyLmRhdGEoKSk7CisgICAgICAgIAorICAgICAgICBrciA9IG1hY2hfbXNn
KGhlYWRlciwgTUFDSF9SQ1ZfTVNHIHwgTUFDSF9SQ1ZfTEFSR0UgfCBNQUNIX1JDVl9USU1FT1VU
LCAwLCBidWZmZXIuc2l6ZSgpLCBtYWNoUG9ydCwgMCwgTUFDSF9QT1JUX05VTEwpOworICAgICAg
ICBBU1NFUlQoa3IgIT0gTUFDSF9SQ1ZfVE9PX0xBUkdFKTsKKyAgICB9CisKKyAgICBpZiAoa3Ig
IT0gTUFDSF9NU0dfU1VDQ0VTUykgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIGhlYWRlcjsKK30KKwordm9pZCBD
b25uZWN0aW9uOjpyZWNlaXZlU291cmNlRXZlbnRIYW5kbGVyKCkKK3sKKyAgICBSZWNlaXZlQnVm
ZmVyIGJ1ZmZlcjsKKworICAgIG1hY2hfbXNnX2hlYWRlcl90KiBoZWFkZXIgPSByZWFkRnJvbU1h
Y2hQb3J0KG1fcmVjZWl2ZVBvcnQsIGJ1ZmZlcik7CisgICAgaWYgKCFoZWFkZXIpCisgICAgICAg
IHJldHVybjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxNZXNzYWdlRGVjb2Rlcj4gZGVjb2RlciA9
IGNyZWF0ZU1lc3NhZ2VEZWNvZGVyKGhlYWRlcik7CisgICAgQVNTRVJUKGRlY29kZXIpOworCisj
aWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEw
OTAKKyAgICBkZWNvZGVyLT5zZXRJbXBvcnRhbmNlQXNzZXJ0aW9uKHN0ZDo6bWFrZV91bmlxdWU8
SW1wb3J0YW5jZUFzc2VydGlvbj4oaGVhZGVyKSk7CisjZW5kaWYKKworICAgIGlmIChkZWNvZGVy
LT5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gIklQQyIgJiYgZGVjb2Rlci0+bWVzc2FnZU5hbWUo
KSA9PSAiSW5pdGlhbGl6ZUNvbm5lY3Rpb24iKSB7CisgICAgICAgIEFTU0VSVChtX2lzU2VydmVy
KTsKKyAgICAgICAgQVNTRVJUKCFtX2lzQ29ubmVjdGVkKTsKKyAgICAgICAgQVNTRVJUKCFtX3Nl
bmRQb3J0KTsKKworICAgICAgICBNYWNoUG9ydCBwb3J0OworICAgICAgICBpZiAoIWRlY29kZXIt
PmRlY29kZShwb3J0KSkgeworICAgICAgICAgICAgLy8gRklYTUU6IERpc2Nvbm5lY3QuCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX3NlbmRQb3J0ID0gcG9ydC5w
b3J0KCk7CisgICAgICAgIAorICAgICAgICBpZiAobV9zZW5kUG9ydCkgeworICAgICAgICAgICAg
aW5pdGlhbGl6ZURlYWROYW1lU291cmNlKCk7CisgICAgICAgICAgICBkaXNwYXRjaF9yZXN1bWUo
bV9kZWFkTmFtZVNvdXJjZSk7CisgICAgICAgIH0KKworICAgICAgICBtX2lzQ29ubmVjdGVkID0g
dHJ1ZTsKKworICAgICAgICAvLyBTZW5kIGFueSBwZW5kaW5nIG91dGdvaW5nIG1lc3NhZ2VzLgor
ICAgICAgICBzZW5kT3V0Z29pbmdNZXNzYWdlcygpOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworI2lmICFQTEFURk9STShJT1MpCisgICAgaWYgKGRlY29kZXItPm1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSA9PSAiSVBDIiAmJiBkZWNvZGVyLT5tZXNzYWdlTmFtZSgpID09ICJTZXRF
eGNlcHRpb25Qb3J0IikgeworICAgICAgICBpZiAobV9pc1NlcnZlcikgeworICAgICAgICAgICAg
Ly8gU2VydmVyIGNvbm5lY3Rpb25zIGFyZW4ndCBzdXBwb3NlZCB0byBoYXZlIHRoZWlyIGV4Y2Vw
dGlvbiBwb3J0cyBvdmVycmlkZW4uIFRyZWF0IHRoaXMgYXMgYW4gaW52YWxpZCBtZXNzYWdlLgor
ICAgICAgICAgICAgbV9jbGllbnRSdW5Mb29wLmRpc3BhdGNoKGJpbmQoJkNvbm5lY3Rpb246OmRp
c3BhdGNoRGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlLCB0aGlzLCBkZWNvZGVyLT5tZXNzYWdlUmVj
ZWl2ZXJOYW1lKCkudG9TdHJpbmcoKSwgZGVjb2Rlci0+bWVzc2FnZU5hbWUoKS50b1N0cmluZygp
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgTWFjaFBvcnQgZXhj
ZXB0aW9uUG9ydDsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZXhjZXB0aW9uUG9ydCkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc2V0TWFjaEV4Y2VwdGlvblBvcnQoZXhj
ZXB0aW9uUG9ydC5wb3J0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAg
ICBwcm9jZXNzSW5jb21pbmdNZXNzYWdlKHN0ZDo6bW92ZShkZWNvZGVyKSk7Cit9ICAgIAorCisj
aWYgIVBMQVRGT1JNKElPUykKK3ZvaWQgQ29ubmVjdGlvbjo6ZXhjZXB0aW9uU291cmNlRXZlbnRI
YW5kbGVyKCkKK3sKKyAgICBSZWNlaXZlQnVmZmVyIGJ1ZmZlcjsKKworICAgIG1hY2hfbXNnX2hl
YWRlcl90KiBoZWFkZXIgPSByZWFkRnJvbU1hY2hQb3J0KG1fZXhjZXB0aW9uUG9ydCwgYnVmZmVy
KTsKKyAgICBpZiAoIWhlYWRlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2UndmUgcmVh
ZCB0aGUgZXhjZXB0aW9uIG1lc3NhZ2UuIE5vdyBzZW5kIGl0IG9uIHRvIHRoZSByZWFsIGV4Y2Vw
dGlvbiBwb3J0LgorCisgICAgLy8gVGhlIHJlbW90ZSBwb3J0IHNob3VsZCBoYXZlIGEgc2VuZCBv
bmNlIHJpZ2h0LgorICAgIEFTU0VSVChNQUNIX01TR0hfQklUU19SRU1PVEUoaGVhZGVyLT5tc2do
X2JpdHMpID09IE1BQ0hfTVNHX1RZUEVfTU9WRV9TRU5EX09OQ0UpOworCisgICAgLy8gTm93IGdl
dCB0aGUgcmVhbCBleGNlcHRpb24gcG9ydC4KKyAgICBtYWNoX3BvcnRfdCBleGNlcHRpb25Qb3J0
ID0gbWFjaEV4Y2VwdGlvblBvcnQoKTsKKworICAgIC8vIEZpcnN0LCBnZXQgdGhlIGNvbXBsZXgg
Yml0IGZyb20gdGhlIHNvdXJjZSBtZXNzYWdlLgorICAgIG1hY2hfbXNnX2JpdHNfdCBtZXNzYWdl
Qml0cyA9IGhlYWRlci0+bXNnaF9iaXRzICYgTUFDSF9NU0dIX0JJVFNfQ09NUExFWDsKKyAgICBt
ZXNzYWdlQml0cyB8PSBNQUNIX01TR0hfQklUUyhNQUNIX01TR19UWVBFX0NPUFlfU0VORCwgTUFD
SF9NU0dfVFlQRV9NT1ZFX1NFTkRfT05DRSk7CisKKyAgICBoZWFkZXItPm1zZ2hfYml0cyA9IG1l
c3NhZ2VCaXRzOworICAgIGhlYWRlci0+bXNnaF9sb2NhbF9wb3J0ID0gaGVhZGVyLT5tc2doX3Jl
bW90ZV9wb3J0OworICAgIGhlYWRlci0+bXNnaF9yZW1vdGVfcG9ydCA9IGV4Y2VwdGlvblBvcnQ7
CisKKyAgICAvLyBOb3cgc2VuZCBhbG9uZyB0aGUgbWVzc2FnZS4KKyAgICBrZXJuX3JldHVybl90
IGtyID0gbWFjaF9tc2coaGVhZGVyLCBNQUNIX1NFTkRfTVNHLCBoZWFkZXItPm1zZ2hfc2l6ZSwg
MCwgTUFDSF9QT1JUX05VTEwsIE1BQ0hfTVNHX1RJTUVPVVRfTk9ORSwgTUFDSF9QT1JUX05VTEwp
OworICAgIGlmIChrciAhPSBLRVJOX1NVQ0NFU1MpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gc2VuZCBtZXNzYWdlIHRvIHJlYWwgZXhjZXB0aW9uIHBvcnQuICVzICgleCkiLCBtYWNo
X2Vycm9yX3N0cmluZyhrciksIGtyKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorCisgICAgY29ubmVjdGlvbkRpZENsb3NlKCk7Cit9CisKK3ZvaWQgQ29ubmVjdGlvbjo6
c2V0U2hvdWxkQ2xvc2VDb25uZWN0aW9uT25NYWNoRXhjZXB0aW9ucygpCit7CisgICAgQVNTRVJU
KG1fZXhjZXB0aW9uUG9ydCA9PSBNQUNIX1BPUlRfTlVMTCk7CisKKyAgICBpZiAobWFjaF9wb3J0
X2FsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksIE1BQ0hfUE9SVF9SSUdIVF9SRUNFSVZFLCAmbV9l
eGNlcHRpb25Qb3J0KSAhPSBLRVJOX1NVQ0NFU1MpCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworCisgICAgaWYgKG1hY2hfcG9ydF9pbnNlcnRfcmlnaHQobWFjaF90YXNrX3NlbGYoKSwg
bV9leGNlcHRpb25Qb3J0LCBtX2V4Y2VwdGlvblBvcnQsIE1BQ0hfTVNHX1RZUEVfTUFLRV9TRU5E
KSAhPSBLRVJOX1NVQ0NFU1MpCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorI2Vu
ZGlmCisKK0lQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBDb25uZWN0aW9uOjppZGVudGlmaWVy
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gSWRlbnRpZmllcihtX2lzU2VydmVyID8gbV9yZWNlaXZl
UG9ydCA6IG1fc2VuZFBvcnQsIG1feHBjQ29ubmVjdGlvbik7Cit9CisgICAgCitib29sIENvbm5l
Y3Rpb246OmdldEF1ZGl0VG9rZW4oYXVkaXRfdG9rZW5fdCYgYXVkaXRUb2tlbikKK3sKKyAgICBp
ZiAoIW1feHBjQ29ubmVjdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHhw
Y19jb25uZWN0aW9uX2dldF9hdWRpdF90b2tlbihtX3hwY0Nvbm5lY3Rpb24sICZhdWRpdFRva2Vu
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIElQQwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDAx
MDk1MDQ3YjdlMzg1NjRjYjY3MDYxZDc4YTE5NmQwNzRlNmYwYmYuLjU2YWEzNDdkMTk1OTNjODNj
MDIyNjI2YTI2Njg2MjUzMTc5YmYyMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktp
dDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE4MCw3ICsxODAsNyBAQAogCQkxQTJEOTU2
RjEyODQ4NTY0MDAxRUI5NjIgLyogQ2hpbGRQcm9jZXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTJEOTU2RDEyODQ4NTY0MDAxRUI5NjIgLyogQ2hp
bGRQcm9jZXNzLmggKi87IH07CiAJCTFBMkQ5NTcwMTI4NDg1NjQwMDFFQjk2MiAvKiBDaGlsZFBy
b2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUEyRDk1NkUxMjg0ODU2NDAwMUVCOTYyIC8qIENoaWxkUHJvY2Vzcy5jcHAgKi87IH07CiAJCTFB
MzAwNjZFMTExMEY0RjcwMDMxOTM3QyAvKiBSZXNwb25zaXZlbmVzc1RpbWVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTMwMDY2QzExMTBGNEY3MDAz
MTkzN0MgLyogUmVzcG9uc2l2ZW5lc3NUaW1lci5oICovOyB9OwotCQkxQTMwRUFDNjExNUQ3REEz
MDA1M0U5MzcgLyogQ29ubmVjdGlvbk1hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQTMwRUFDNTExNUQ3REEzMDA1M0U5MzcgLyogQ29ubmVjdGlv
bk1hYy5jcHAgKi87IH07CisJCTFBMzBFQUM2MTE1RDdEQTMwMDUzRTkzNyAvKiBDb25uZWN0aW9u
TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEz
MEVBQzUxMTVEN0RBMzAwNTNFOTM3IC8qIENvbm5lY3Rpb25NYWMubW0gKi87IH07CiAJCTFBMzM0
REVEMTZERThGODgwMDZBOEUzOCAvKiBTdG9yYWdlQXJlYU1hcE1lc3NhZ2VSZWNlaXZlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTMzNERFQjE2
REU4Rjg4MDA2QThFMzggLyogU3RvcmFnZUFyZWFNYXBNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9
OwogCQkxQTMzNERFRTE2REU4Rjg4MDA2QThFMzggLyogU3RvcmFnZUFyZWFNYXBNZXNzYWdlcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEzMzRERUMx
NkRFOEY4ODAwNkE4RTM4IC8qIFN0b3JhZ2VBcmVhTWFwTWVzc2FnZXMuaCAqLzsgfTsKIAkJMUEz
Qzg4ODAxOEE1QUJBRTAwQzRDOTYyIC8qIFdLUHJlZmVyZW5jZXNJbnRlcm5hbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEzQzg4N0YxOEE1QUJBRTAw
QzRDOTYyIC8qIFdLUHJlZmVyZW5jZXNJbnRlcm5hbC5oICovOyB9OwpAQCAtMTk5MCw3ICsxOTkw
LDcgQEAKIAkJMUEyRDk1NkQxMjg0ODU2NDAwMUVCOTYyIC8qIENoaWxkUHJvY2Vzcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDaGlsZFByb2Nlc3MuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUEyRDk1NkUxMjg0ODU2NDAwMUVCOTYyIC8qIENoaWxkUHJvY2Vz
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDaGlsZFByb2Nlc3Mu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTMwMDY2QzExMTBGNEY3MDAzMTkz
N0MgLyogUmVzcG9uc2l2ZW5lc3NUaW1lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZXNwb25zaXZlbmVzc1RpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTFBMzBFQUM1MTE1RDdEQTMwMDUzRTkzNyAvKiBDb25uZWN0aW9uTWFjLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbm5lY3Rpb25NYWMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxQTMwRUFDNTExNUQ3REEzMDA1M0U5MzcgLyogQ29ubmVjdGlv
bk1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvbm5lY3Rp
b25NYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMzM0REVBMTZERThCNjgw
MDZBOEUzOCAvKiBTdG9yYWdlQXJlYU1hcC5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTdG9yYWdlQXJlYU1h
cC5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEzMzRERUIxNkRF
OEY4ODAwNkE4RTM4IC8qIFN0b3JhZ2VBcmVhTWFwTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VBcmVhTWFwTWVzc2FnZVJlY2Vp
dmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEzMzRERUMxNkRFOEY4ODAw
NkE4RTM4IC8qIFN0b3JhZ2VBcmVhTWFwTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3RvcmFnZUFyZWFNYXBNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNjI2OSw3ICs2MjY5LDcgQEAKIAkJQkNDNTZGNzUxMTU5OTU1RTAwMUNDQUY5
IC8qIG1hYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJ
MUEzMEVBQzUxMTVEN0RBMzAwNTNFOTM3IC8qIENvbm5lY3Rpb25NYWMuY3BwICovLAorCQkJCTFB
MzBFQUM1MTE1RDdEQTMwMDUzRTkzNyAvKiBDb25uZWN0aW9uTWFjLm1tICovLAogCQkJCTFBMUVD
NjlEMTg3MjA5MjEwMEI5NTFGMCAvKiBJbXBvcnRhbmNlQXNzZXJ0aW9uLmggKi8sCiAJCQkJQkND
NTZGNzcxMTU5OTU3RDAwMUNDQUY5IC8qIE1hY2hQb3J0LmggKi8sCiAJCQkpOwpAQCAtODM5OCw3
ICs4Mzk4LDcgQEAKIAkJCQkxQTZGOUZCNzExRTE0MDg1MDBEQjEzNzEgLyogQ29tbWFuZExpbmVQ
T1NJWC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzAzMkRBQTEwRjQzN0QxMDA1OEMxNUEgLyog
Q29ubmVjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyREE5NDRBMzE4ODRFNEYwMDBFRDg2
REIgLyogV2ViVG91Y2hFdmVudElPUy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkxQTMwRUFDNjEx
NUQ3REEzMDA1M0U5MzcgLyogQ29ubmVjdGlvbk1hYy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkx
QTMwRUFDNjExNUQ3REEzMDA1M0U5MzcgLyogQ29ubmVjdGlvbk1hYy5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTUxMzYxODNEMTYzMTI2REEwMEE5OURERSAvKiBDb25uZWN0aW9uU3RhY2suY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMkRBOTQ0QjkxODg0RUEzOTAwRUQ4NkRCIC8qIFdlYkJhY2tGb3J3
YXJkTGlzdFByb3h5SU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE1RTc3MzMxODQwMkQ1MTAw
MDcyMDNGIC8qIFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5jcHAgaW4gU291cmNlcyAqLywK
</data>
<flag name="review"
          id="255664"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>