<?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>87456</bug_id>
          
          <creation_ts>2012-05-24 20:46:41 -0700</creation_ts>
          <short_desc>WebKit should be lazy-finalization-safe (esp. the DOM)</short_desc>
          <delta_ts>2012-05-24 23:52:05 -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="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>633506</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-05-24 20:46:41 -0700</bug_when>
    <thetext>WebKit should be lazy-finalization-safe (esp. the DOM)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633573</commentid>
    <comment_count>1</comment_count>
      <attachid>143978</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-05-24 22:31:53 -0700</bug_when>
    <thetext>Created attachment 143978
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633618</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-05-24 23:52:05 -0700</bug_when>
    <thetext>Committed r118483: &lt;http://trac.webkit.org/changeset/118483&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143978</attachid>
            <date>2012-05-24 22:31:53 -0700</date>
            <delta_ts>2012-05-24 22:47:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87456-20120524223153.patch</filename>
            <type>text/plain</type>
            <size>28005</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE4NDcxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBA
CisyMDEyLTA1LTI0ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgV2ViS2l0IHNob3VsZCBiZSBsYXp5LWZpbmFsaXphdGlvbi1zYWZlIChlc3AuIHRoZSBET00p
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzQ1Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIExhenkgZmlu
YWxpemF0aW9uIGFkZHMgdHdvIHR3aXN0cyB0byB3ZWFrIHBvaW50ZXIgdXNlOgorCisgICAgICAg
ICgxKSBBIGRlbWFuZC1hbGxvY2F0ZWQgd2VhayBwb2ludGVyIG1heSByZXBsYWNlIGEgZGVhZCBw
YXlsb2FkIGJlZm9yZSB0aGUKKyAgICAgICAgcGF5bG9hZCdzIGZpbmFsaXplciBydW5zLiBJbiB0
aGF0IGNhc2UsIHdoZW4gdGhlIHBheWxvYWQncyBmaW5hbGl6ZXIgcnVucywKKyAgICAgICAgdGhl
IHBheWxvYWQgaGFzIGFscmVhZHkgYmVlbiBvdmVyd3JpdHRlbiwgYW5kIHRoZSBmaW5hbGl6ZXIg
c2hvdWxkIG5vdAorICAgICAgICBjbGVhciB0aGUgcGF5bG9hZCwgd2hpY2ggbm93IHBvaW50cyB0
byBzb21ldGhpbmcgbmV3LgorCisgICAgICAgICgxKSBBIEhhc2hNYXAgb2Ygd2VhayBwb2ludGVy
cyBtYXkgY29udGFpbiBsb2dpY2FsbHkgbnVsbCBlbnRyaWVzLiAoV2VhaworICAgICAgICBwb2lu
dGVycyBiZWhhdmUgYXMtaWYgbnVsbCBvbmNlIHRoZWlyIHBheWxvYWRzIGRpZS4pIEluc2VydGlv
biBtdXN0IG5vdAorICAgICAgICBhc3N1bWUgdGhhdCBhIHByZS1leGlzdGluZyBlbnRyeSBpcyBu
ZWNlc3NhcmlseSB2YWxpZCwgYW5kIGl0ZXJhdGlvbgorICAgICAgICBtdXN0IG5vdCBhc3N1bWUg
dGhhdCBhbGwgZW50cmllcyBjYW4gYmUgZGVyZWZlcmVuY2VkLgorCisgICAgICAgICogQVBJL0pT
Q2xhc3NSZWYuY3BwOgorICAgICAgICAoT3BhcXVlSlNDbGFzczo6cHJvdG90eXBlKTogTm8gbmVl
ZCB0byBzcGVjaWZ5IG51bGw7IHRoYXQncyB0aGUgZGVmYXVsdC4KKworICAgICAgICAqIEFQSS9K
U1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmNwcDogVXNlIHJlbW92ZSwgc2luY2UgdGFrZSgpIGlz
IGdvbmUuCisKKyAgICAgICAgKiBoZWFwL1Bhc3NXZWFrLmg6CisgICAgICAgIChXZWFrSW1wbEFj
Y2Vzc29yOjp3YXMpOiBUaGlzIGlzIG5vIGxvbmdlciBhIGRlYnVnLW9ubHkgZnVuY3Rpb24sIHNp
bmNlCisgICAgICAgIGl0J3MgcmVxdWlyZWQgdG8gcmVhc29uIGFib3V0IGxhemlseSBmaW5hbGl6
ZWQgcG9pbnRlcnMuCisKKyAgICAgICAgKiBoZWFwL1dlYWsuaDoKKyAgICAgICAgKEpTQzo6d2Vh
a0FkZCk6CisgICAgICAgIChKU0M6OndlYWtSZW1vdmUpOgorICAgICAgICAoSlNDOjp3ZWFrQ2xl
YXIpOiBBZGRlZCB0aGVzZSBoZWxwZXIgZnVuY3Rpb25zIGZvciB0aGUgY29tbW9uIGlkaW9tcyBv
ZgorICAgICAgICB3aGF0IGNsaWVudHMgd2FudCB0byBkbyBpbiB0aGVpciB3ZWFrIHBvaW50ZXIg
ZmluYWxpemVycy4KKworICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6
OkpJVFRodW5rczo6aG9zdEZ1bmN0aW9uU3R1Yik6IFVzZSB0aGUgbmV3IGlkaW9tcy4gT3RoZXJ3
aXNlLCB3ZQorICAgICAgICB3b3VsZCByZXR1cm4gTlVMTCBmb3IgYSAiem9tYmllIiBleGVjdXRh
YmxlIHdlYWsgcG9pbnRlciB0aGF0IHdhcyB3YWl0aW5nCisgICAgICAgIGZvciBmaW5hbGl6YXRp
b24gKGl0ZW0gKDIpKSwgYW5kIGZpbmFsaXppbmcgYSBkZWFkIGV4ZWN1dGFibGUgd2VhayBwb2lu
dGVyCisgICAgICAgIHdvdWxkIHBvdGVudGlhbGx5IGRlc3Ryb3kgYSBuZXcsIGxpdmUgb25lIChp
dGVtICgxKSkuCisKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cENhY2hlLmNwcDoKKyAgICAgICAg
KEpTQzo6UmVnRXhwQ2FjaGU6Omxvb2t1cE9yQ3JlYXRlKToKKyAgICAgICAgKEpTQzo6UmVnRXhw
Q2FjaGU6OmZpbmFsaXplKTogRGl0dG8uCisKKyAgICAgICAgKEpTQzo6UmVnRXhwQ2FjaGU6Omlu
dmFsaWRhdGVDb2RlKTogQ2hlY2sgZm9yIG51bGwgd2hpbGUgaXRlcmF0aW5nLiAoU2VlCisgICAg
ICAgIGl0ZW0gKDIpLikKKworICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpjb250YWlucyk6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6YWRkKTogVXNlIGdldCBhbmQgc2V0IGluc3Rl
YWQgb2YgYWRkIGFuZAorICAgICAgICBjb250YWlucywgc2luY2UgYWRkIGFuZCBjb250YWlucyBh
cmUgbm90IGNvbXBhdGlibGUgd2l0aCBsYXp5IGZpbmFsaXphdGlvbi4KKworICAgICAgICAqIHJ1
bnRpbWUvV2Vha0dDTWFwLmg6CisgICAgICAgIChXZWFrR0NNYXApOgorICAgICAgICAoSlNDOjpX
ZWFrR0NNYXA6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6V2Vha0dDTWFwOjpyZW1vdmUpOiBSZW1v
dmVkIGEgYnVuY2ggb2YgY29kZSB0aGF0IHdhcyBpbmNvbXBhdGlibGUgd2l0aAorICAgICAgICBs
YXp5IGZpbmFsaXphdGlvbiBiZWNhdXNlIEkgZGlkbid0IGZlZWwgbGlrZSBtYWtpbmcgaXQgY29t
cGF0aWJsZSwgYW5kIEkgaGFkCisgICAgICAgIG5vIHdheSB0byB0ZXN0IGl0LgorCiAyMDEyLTA1
LTI0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgbmV3IHRlc3Qg
ZmFzdC9qcy9kZmctYXJndW1lbnRzLW1peGVkLWFsaWFzLmh0bWwgZmFpbHMgb24gSlNWQUxVRTMy
XzY0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5jcHAJKHJldmlz
aW9uIDExODQyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIxOSw2ICsyMTksNiBAQCBKU09iamVjdCogT3BhcXVlSlNDbGFz
czo6cHJvdG90eXBlKEV4ZWNTCiAgICAgICAgICAgICBwcm90b3R5cGUtPnNldFByb3RvdHlwZShl
eGVjLT5nbG9iYWxEYXRhKCksIHBhcmVudFByb3RvdHlwZSk7CiAgICAgfQogCi0gICAganNDbGFz
c0RhdGEuY2FjaGVkUHJvdG90eXBlID0gUGFzc1dlYWs8SlNPYmplY3Q+KHByb3RvdHlwZSwgMCk7
CisgICAganNDbGFzc0RhdGEuY2FjaGVkUHJvdG90eXBlID0gUGFzc1dlYWs8SlNPYmplY3Q+KHBy
b3RvdHlwZSk7CiAgICAgcmV0dXJuIHByb3RvdHlwZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmNwcAko
cmV2aXNpb24gMTE4NDI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dlYWtPYmpl
Y3RNYXBSZWZQcml2YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCB2b2lk
IEpTV2Vha09iamVjdE1hcFJlbW92ZShKU0NvbnRleHRSZWYgCiB7CiAgICAgRXhlY1N0YXRlKiBl
eGVjID0gdG9KUyhjdHgpOwogICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZXhlYyk7Ci0gICAg
bWFwLT5tYXAoKS50YWtlKGtleSk7CisgICAgbWFwLT5tYXAoKS5yZW1vdmUoa2V5KTsKIH0KIAog
Ly8gV2UgbmVlZCB0byBrZWVwIHRoaXMgZnVuY3Rpb24gaW4gdGhlIGJ1aWxkIHRvIGtlZXAgdGhl
IG5pZ2h0bGllcyBydW5uaW5nLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUGFz
c1dlYWsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QYXNzV2Vh
ay5oCShyZXZpc2lvbiAxMTg0MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QYXNz
V2Vhay5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw5ICs0Niw3IEBAIHB1YmxpYzoKICAgICBUJiBv
cGVyYXRvciooKSBjb25zdDsKICAgICBHZXRUeXBlIGdldCgpIGNvbnN0OwogCi0jaWYgIUFTU0VS
VF9ESVNBQkxFRAogICAgIGJvb2wgd2FzKEdldFR5cGUpIGNvbnN0OwotI2VuZGlmCiB9OwogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBQYXNzV2VhayA6IHB1YmxpYyBXZWFrSW1wbEFjY2Vz
c29yPFBhc3NXZWFrPFQ+LCBUPiB7CkBAIC0xMDIsMTIgKzEwMCwxMCBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBCYXNlLCB0eXBlbmFtZSBUPiBpbmxpCiAgICAgcmV0dXJuIGpzQ2FzdDxUKj4oc3RhdGlj
X2Nhc3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5tX2ltcGwtPmpzVmFsdWUoKS5hc0NlbGwoKSk7CiB9
CiAKLSNpZiAhQVNTRVJUX0RJU0FCTEVECiB0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlLCB0eXBlbmFt
ZSBUPiBpbmxpbmUgYm9vbCBXZWFrSW1wbEFjY2Vzc29yPEJhc2UsIFQ+Ojp3YXModHlwZW5hbWUg
V2Vha0ltcGxBY2Nlc3NvcjxCYXNlLCBUPjo6R2V0VHlwZSBvdGhlcikgY29uc3QKIHsKICAgICBy
ZXR1cm4ganNDYXN0PFQqPihzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPm1faW1wbC0+
anNWYWx1ZSgpLmFzQ2VsbCgpKSA9PSBvdGhlcjsKIH0KLSNlbmRpZgogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbmxpbmUgUGFzc1dlYWs8VD46OlBhc3NXZWFrKCkKICAgICA6IG1faW1wbCgwKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vhay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWsuaAkocmV2aXNpb24gMTE4NDI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vhay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsy
NiwxMCBAQAogI2lmbmRlZiBXZWFrX2gKICNkZWZpbmUgV2Vha19oCiAKLSNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgIlBhc3NXZWFrLmgiCiAjaW5jbHVkZSAiV2Vha1NldElu
bGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xNTAsNiArMTUxLDMyIEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGlubGluZSBXZWFrSW1wbCogV2UKICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxXZWFrSW1wbCo+KC0xKTsKIH0KIAorLy8gVGhpcyBmdW5jdGlvbiBoZWxwcyBhdm9pZCBt
b2RpZnlpbmcgYSB3ZWFrIHRhYmxlIHdoaWxlIGhvbGRpbmcgYW4gaXRlcmF0b3IgaW50byBpdC4g
KE9iamVjdCBhbGxvY2F0aW9uCisvLyBjYW4gcnVuIGEgZmluYWxpemVyIHRoYXQgbW9kaWZpZXMg
dGhlIHRhYmxlLiBXZSBhdm9pZCB0aGF0IGJ5IHJlcXVpcmluZyBhIHByZS1jb25zdHJ1Y3RlZCBv
YmplY3QgYXMgb3VyIHZhbHVlLikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlu
bGluZSB2b2lkIHdlYWtBZGQoSGFzaE1hcDxULCBXZWFrPFU+ID4mIG1hcCwgY29uc3QgVCYga2V5
LCBQYXNzV2VhazxVPiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoIW1hcC5nZXQoa2V5KSk7CisgICAg
bWFwLnNldChrZXksIHZhbHVlKTsgLy8gVGhlIHRhYmxlIG1heSBzdGlsbCBoYXZlIGEgem9tYmll
IGZvciB2YWx1ZS4KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IHZvaWQgd2Vha1JlbW92ZShIYXNoTWFwPFQsIFdlYWs8VT4gPiYgbWFwLCBjb25zdCBUJiBrZXks
IHR5cGVuYW1lIFdlYWs8VT46OkdldFR5cGUgdmFsdWUpCit7CisgICAgdHlwZW5hbWUgSGFzaE1h
cDxULCBXZWFrPFU+ID46Oml0ZXJhdG9yIGl0ID0gbWFwLmZpbmQoa2V5KTsKKyAgICBBU1NFUlQo
aXQgIT0gbWFwLmVuZCgpKTsKKyAgICBpZiAoIWl0LT5zZWNvbmQud2FzKHZhbHVlKSkgLy8gV2Ug
bWF5IGFscmVhZHkgaGF2ZSByZXBsYWNlZCB2YWx1ZS4KKyAgICAgICAgcmV0dXJuOworICAgIEFT
U0VSVCghaXQtPnNlY29uZCk7CisgICAgbWFwLnJlbW92ZShpdCk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSB2b2lkIHdlYWtDbGVhcihXZWFrPFQ+JiB3ZWFrLCB0eXBlbmFtZSBX
ZWFrPFQ+OjpHZXRUeXBlIHZhbHVlKQoreworICAgIGlmICghd2Vhay53YXModmFsdWUpKSAvLyBX
ZSBtYXkgYWxyZWFkeSBoYXZlIHJlcGxhY2VkIHZhbHVlLgorICAgICAgICByZXR1cm47CisgICAg
QVNTRVJUKCF3ZWFrKTsKKyAgICB3ZWFrLmNsZWFyKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuY3BwCShyZXZpc2lvbiAxMTg0MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ1OCwyNyArMzQ1OCwzMSBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgSklUVGh1bmtzOjpjdGlTdHViCiAKIE5hdGl2ZUV4ZWN1dGFibGUqIEpJ
VFRodW5rczo6aG9zdEZ1bmN0aW9uU3R1YihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIE5hdGl2
ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKIHsKLSAgICBI
b3N0RnVuY3Rpb25TdHViTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9ob3N0RnVuY3Rpb25TdHVi
TWFwLT5hZGQoZnVuY3Rpb24sIFBhc3NXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+KCkpOwotICAgIGlm
ICghcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kID0gUGFzc1dlYWs8TmF0aXZlRXhlY3V0YWJsZT4oTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRl
KCpnbG9iYWxEYXRhLCBKSVQ6OmNvbXBpbGVDVElOYXRpdmVDYWxsKGdsb2JhbERhdGEsIGZ1bmN0
aW9uKSwgZnVuY3Rpb24sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRD
b2RlUmVmKGN0aU5hdGl2ZUNvbnN0cnVjdCgpKSwgY29uc3RydWN0b3IsIE5vSW50cmluc2ljKSk7
Ci0gICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgIGlmIChOYXRp
dmVFeGVjdXRhYmxlKiBuYXRpdmVFeGVjdXRhYmxlID0gbV9ob3N0RnVuY3Rpb25TdHViTWFwLT5n
ZXQoZnVuY3Rpb24pKQorICAgICAgICByZXR1cm4gbmF0aXZlRXhlY3V0YWJsZTsKKworICAgIE5h
dGl2ZUV4ZWN1dGFibGUqIG5hdGl2ZUV4ZWN1dGFibGUgPSBOYXRpdmVFeGVjdXRhYmxlOjpjcmVh
dGUoKmdsb2JhbERhdGEsIEpJVDo6Y29tcGlsZUNUSU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSwgZnVu
Y3Rpb24pLCBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdl
ZENvZGVSZWYoY3RpTmF0aXZlQ29uc3RydWN0KCkpLCBjb25zdHJ1Y3RvciwgTm9JbnRyaW5zaWMp
OworICAgIHdlYWtBZGQoKm1faG9zdEZ1bmN0aW9uU3R1Yk1hcCwgZnVuY3Rpb24sIFBhc3NXZWFr
PE5hdGl2ZUV4ZWN1dGFibGU+KG5hdGl2ZUV4ZWN1dGFibGUpKTsKKyAgICByZXR1cm4gbmF0aXZl
RXhlY3V0YWJsZTsKIH0KIAogTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rp
b25TdHViKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24s
IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvciwgSW50cmluc2ljIGludHJpbnNpYykKIHsKLSAgICBI
b3N0RnVuY3Rpb25TdHViTWFwOjpBZGRSZXN1bHQgZW50cnkgPSBtX2hvc3RGdW5jdGlvblN0dWJN
YXAtPmFkZChmdW5jdGlvbiwgUGFzc1dlYWs8TmF0aXZlRXhlY3V0YWJsZT4oKSk7Ci0gICAgaWYg
KCFlbnRyeS5pdGVyYXRvci0+c2Vjb25kKSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBjb2RlOwotICAgICAgICBpZiAoZ2VuZXJhdG9yKSB7Ci0gICAgICAgICAgICBpZiAoZ2xvYmFs
RGF0YS0+Y2FuVXNlSklUKCkpCi0gICAgICAgICAgICAgICAgY29kZSA9IGdlbmVyYXRvcihnbG9i
YWxEYXRhKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb2RlID0gTWFjcm9B
c3NlbWJsZXJDb2RlUmVmKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY29kZSA9IEpJ
VDo6Y29tcGlsZUNUSU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSwgZnVuY3Rpb24pOwotICAgICAgICBl
bnRyeS5pdGVyYXRvci0+c2Vjb25kID0gUGFzc1dlYWs8TmF0aXZlRXhlY3V0YWJsZT4oTmF0aXZl
RXhlY3V0YWJsZTo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBjb2RlLCBmdW5jdGlvbiwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ29uc3RydWN0
KCkpLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgaW50cmluc2ljKSk7Ci0gICAgfQot
ICAgIHJldHVybiBlbnRyeS5pdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgIGlmIChOYXRpdmVF
eGVjdXRhYmxlKiBuYXRpdmVFeGVjdXRhYmxlID0gbV9ob3N0RnVuY3Rpb25TdHViTWFwLT5nZXQo
ZnVuY3Rpb24pKQorICAgICAgICByZXR1cm4gbmF0aXZlRXhlY3V0YWJsZTsKKworICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBjb2RlOworICAgIGlmIChnZW5lcmF0b3IpIHsKKyAgICAgICAgaWYg
KGdsb2JhbERhdGEtPmNhblVzZUpJVCgpKQorICAgICAgICAgICAgY29kZSA9IGdlbmVyYXRvcihn
bG9iYWxEYXRhKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29kZSA9IE1hY3JvQXNzZW1i
bGVyQ29kZVJlZigpOworICAgIH0gZWxzZQorICAgICAgICBjb2RlID0gSklUOjpjb21waWxlQ1RJ
TmF0aXZlQ2FsbChnbG9iYWxEYXRhLCBmdW5jdGlvbik7CisKKyAgICBOYXRpdmVFeGVjdXRhYmxl
KiBuYXRpdmVFeGVjdXRhYmxlID0gTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCpnbG9iYWxEYXRh
LCBjb2RlLCBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdl
ZENvZGVSZWYoY3RpTmF0aXZlQ29uc3RydWN0KCkpLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1
Y3RvciwgaW50cmluc2ljKTsKKyAgICB3ZWFrQWRkKCptX2hvc3RGdW5jdGlvblN0dWJNYXAsIGZ1
bmN0aW9uLCBQYXNzV2VhazxOYXRpdmVFeGVjdXRhYmxlPihuYXRpdmVFeGVjdXRhYmxlKSk7Cisg
ICAgcmV0dXJuIG5hdGl2ZUV4ZWN1dGFibGU7CiB9CiAKIHZvaWQgSklUVGh1bmtzOjpjbGVhckhv
c3RGdW5jdGlvblN0dWJzKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBDYWNoZS5jcHAJKHJldmlzaW9uIDExODQyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTcgKzM2
LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogUmVnRXhwKiBSZWdFeHBDYWNoZTo6bG9va3VwT3JDcmVh
dGUoY29uc3QgVVN0cmluZyYgcGF0dGVyblN0cmluZywgUmVnRXhwRmxhZ3MgZmxhZ3MpCiB7CiAg
ICAgUmVnRXhwS2V5IGtleShmbGFncywgcGF0dGVyblN0cmluZyk7Ci0gICAgUmVnRXhwQ2FjaGVN
YXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fd2Vha0NhY2hlLmZpbmQoa2V5KTsKLSAgICBpZiAocmVz
dWx0ICE9IG1fd2Vha0NhY2hlLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQu
Z2V0KCk7CisgICAgaWYgKFJlZ0V4cCogcmVnRXhwID0gbV93ZWFrQ2FjaGUuZ2V0KGtleSkpCisg
ICAgICAgIHJldHVybiByZWdFeHA7CisKICAgICBSZWdFeHAqIHJlZ0V4cCA9IFJlZ0V4cDo6Y3Jl
YXRlV2l0aG91dENhY2hpbmcoKm1fZ2xvYmFsRGF0YSwgcGF0dGVyblN0cmluZywgZmxhZ3MpOwog
I2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKICAgICBtX2dsb2JhbERhdGEtPmFkZFJlZ0V4cFRv
VHJhY2UocmVnRXhwKTsKICNlbmRpZgotICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBzZWNvbmQgbG9v
a3VwIHRvIGFkZCB0aGUgUmVnRXhwIGFzCi0gICAgLy8gYWxsb2NhdGluZyBpdCBtYXkgaGF2ZSBj
YXVzZWQgYSBnYyBjeWNsZSwgd2hpY2ggaW4KLSAgICAvLyB0dXJuIG1heSBoYXZlIHJlbW92ZWQg
aXRlbXMgZnJvbSB0aGUgY2FjaGUuCi0gICAgbV93ZWFrQ2FjaGUuYWRkKGtleSwgUGFzc1dlYWs8
UmVnRXhwPihyZWdFeHAsIHRoaXMpKTsKKworICAgIHdlYWtBZGQobV93ZWFrQ2FjaGUsIGtleSwg
UGFzc1dlYWs8UmVnRXhwPihyZWdFeHAsIHRoaXMpKTsKICAgICByZXR1cm4gcmVnRXhwOwogfQog
CkBAIC01OSw3ICs1Nyw3IEBAIFJlZ0V4cENhY2hlOjpSZWdFeHBDYWNoZShKU0dsb2JhbERhdGEq
IGcKIHZvaWQgUmVnRXhwQ2FjaGU6OmZpbmFsaXplKEhhbmRsZTxVbmtub3duPiBoYW5kbGUsIHZv
aWQqKQogewogICAgIFJlZ0V4cCogcmVnRXhwID0gc3RhdGljX2Nhc3Q8UmVnRXhwKj4oaGFuZGxl
LmdldCgpLmFzQ2VsbCgpKTsKLSAgICBtX3dlYWtDYWNoZS5yZW1vdmUocmVnRXhwLT5rZXkoKSk7
CisgICAgd2Vha1JlbW92ZShtX3dlYWtDYWNoZSwgcmVnRXhwLT5rZXkoKSwgcmVnRXhwKTsKICAg
ICByZWdFeHAtPmludmFsaWRhdGVDb2RlKCk7CiB9CiAKQEAgLTc5LDkgKzc3LDE0IEBAIHZvaWQg
UmVnRXhwQ2FjaGU6OmludmFsaWRhdGVDb2RlKCkKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1h
eFN0cm9uZ0NhY2hlYWJsZUVudHJpZXM7IGkrKykKICAgICAgICAgbV9zdHJvbmdDYWNoZVtpXS5j
bGVhcigpOwogICAgIG1fbmV4dEVudHJ5SW5TdHJvbmdDYWNoZSA9IDA7CisKICAgICBSZWdFeHBD
YWNoZU1hcDo6aXRlcmF0b3IgZW5kID0gbV93ZWFrQ2FjaGUuZW5kKCk7Ci0gICAgZm9yIChSZWdF
eHBDYWNoZU1hcDo6aXRlcmF0b3IgcHRyID0gbV93ZWFrQ2FjaGUuYmVnaW4oKTsgcHRyICE9IGVu
ZDsgKytwdHIpCi0gICAgICAgIHB0ci0+c2Vjb25kLT5pbnZhbGlkYXRlQ29kZSgpOworICAgIGZv
ciAoUmVnRXhwQ2FjaGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV93ZWFrQ2FjaGUuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CisgICAgICAgIFJlZ0V4cCogcmVnRXhwID0gaXQtPnNlY29uZC5nZXQo
KTsKKyAgICAgICAgaWYgKCFyZWdFeHApIC8vIFNraXAgem9tYmllcy4KKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICByZWdFeHAtPmludmFsaWRhdGVDb2RlKCk7CisgICAgfQogfQogCiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJl
dmlzaW9uIDExODQyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgYm9vbCBTdHJ1Y3R1cmVUcmFu
c2l0aW9uVGFibGU6OmNvbnRhaW5zKAogICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBz
aW5nbGVUcmFuc2l0aW9uKCk7CiAgICAgICAgIHJldHVybiB0cmFuc2l0aW9uICYmIHRyYW5zaXRp
b24tPm1fbmFtZUluUHJldmlvdXMgPT0gcmVwICYmIHRyYW5zaXRpb24tPm1fYXR0cmlidXRlc0lu
UHJldmlvdXMgPT0gYXR0cmlidXRlczsKICAgICB9Ci0gICAgcmV0dXJuIG1hcCgpLT5jb250YWlu
cyhtYWtlX3BhaXIocmVwLCBhdHRyaWJ1dGVzKSk7CisgICAgcmV0dXJuIG1hcCgpLT5nZXQobWFr
ZV9wYWlyKHJlcCwgYXR0cmlidXRlcykpOwogfQogCiBpbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1
cmVUcmFuc2l0aW9uVGFibGU6OmdldChTdHJpbmdJbXBsKiByZXAsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMpIGNvbnN0CkBAIC0xMDEsMTMgKzEwMSw3IEBAIGlubGluZSB2b2lkIFN0cnVjdHVyZVRyYW5z
aXRpb25UYWJsZTo6YWQKICAgICAvLyBOZXdlciB2ZXJzaW9ucyBvZiB0aGUgU1RMIGhhdmUgYW4g
c3RkOjptYWtlX3BhaXIgZnVuY3Rpb24gdGhhdCB0YWtlcyBydmFsdWUgcmVmZXJlbmNlcy4KICAg
ICAvLyBXaGVuIGVpdGhlciBvZiB0aGUgcGFyYW1ldGVycyBhcmUgYml0ZmllbGRzLCB0aGUgQysr
IGNvbXBpbGVyIHdpbGwgdHJ5IHRvIGJpbmQgdGhlbSBhcyBsdmFsdWVzLCB3aGljaCBpcyBpbnZh
bGlkLiBUbyB3b3JrIGFyb3VuZCB0aGlzLCB1c2UgdW5hcnkgIisiIHRvIG1ha2UgdGhlIHBhcmFt
ZXRlciBhbiBydmFsdWUuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01OTI2MSBmb3IgbW9yZSBkZXRhaWxzCi0gICAgVHJhbnNpdGlvbk1hcDo6QWRk
UmVzdWx0IHJlc3VsdCA9IG1hcCgpLT5hZGQoZ2xvYmFsRGF0YSwgbWFrZV9wYWlyKHN0cnVjdHVy
ZS0+bV9uYW1lSW5QcmV2aW91cywgK3N0cnVjdHVyZS0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91cyks
IHN0cnVjdHVyZSk7Ci0gICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICAvLyBU
aGVyZSBhbHJlYWR5IGlzIGFuIGVudHJ5ISAtIHdlIHNob3VsZCBvbmx5IGhpdCB0aGlzIHdoZW4g
ZGVzcGVjaWZ5aW5nLgotICAgICAgICBBU1NFUlQocmVzdWx0Lml0ZXJhdG9yLmdldCgpLnNlY29u
ZC0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cyk7Ci0gICAgICAgIEFTU0VSVCghc3RydWN0dXJl
LT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzKTsKLSAgICAgICAgbWFwKCktPnNldChnbG9iYWxE
YXRhLCByZXN1bHQuaXRlcmF0b3IuZ2V0KCkuZmlyc3QsIHN0cnVjdHVyZSk7Ci0gICAgfQorICAg
IG1hcCgpLT5zZXQoZ2xvYmFsRGF0YSwgbWFrZV9wYWlyKHN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2
aW91cywgK3N0cnVjdHVyZS0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91cyksIHN0cnVjdHVyZSk7CiB9
CiAKIHZvaWQgU3RydWN0dXJlOjpkdW1wU3RhdGlzdGljcygpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAuaAkocmV2aXNpb24gMTE4NDI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTUz
LDgwICs1MywyNSBAQCBjbGFzcyBXZWFrR0NNYXAgOiBwcml2YXRlIFdlYWtIYW5kbGVPd25lCiAK
ICAgICB0eXBlZGVmIEhhc2hNYXA8S2V5VHlwZSwgV2Vha0ltcGwqLCBIYXNoQXJnLCBLZXlUcmFp
dHNBcmc+IE1hcFR5cGU7CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBIYW5kbGVUeXBlczxNYXBwZWRU
eXBlPjo6RXh0ZXJuYWxUeXBlIEV4dGVybmFsVHlwZTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIE1h
cFR5cGU6Oml0ZXJhdG9yIG1hcF9pdGVyYXRvcjsKIAogcHVibGljOgotCi0gICAgc3RydWN0IGl0
ZXJhdG9yIHsKLSAgICAgICAgZnJpZW5kIGNsYXNzIFdlYWtHQ01hcDsKLSAgICAgICAgaXRlcmF0
b3IobWFwX2l0ZXJhdG9yIGl0ZXIpCi0gICAgICAgICAgICA6IG1faXRlcmF0b3IoaXRlcikKLSAg
ICAgICAgewotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdGQ6OnBhaXI8S2V5VHlwZSwg
RXh0ZXJuYWxUeXBlPiBnZXQoKSBjb25zdCB7IHJldHVybiBzdGQ6Om1ha2VfcGFpcihtX2l0ZXJh
dG9yLT5maXJzdCwgSGFuZGxlVHlwZXM8TWFwcGVkVHlwZT46OmdldEZyb21TbG90KGNvbnN0X2Nh
c3Q8SlNWYWx1ZSo+KCZtX2l0ZXJhdG9yLT5zZWNvbmQtPmpzVmFsdWUoKSkpKTsgfQotICAgICAg
ICAKLSAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7ICsrbV9pdGVyYXRvcjsgcmV0dXJu
ICp0aGlzOyB9Ci0gICAgICAgIAotICAgICAgICAvLyBwb3N0Zml4ICsrIGludGVudGlvbmFsbHkg
b21pdHRlZAotICAgICAgICAKLSAgICAgICAgLy8gQ29tcGFyaXNvbi4KLSAgICAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRv
ciA9PSBvdGhlci5tX2l0ZXJhdG9yOyB9Ci0gICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBp
dGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1faXRlcmF0b3IgIT0gb3RoZXIubV9pdGVy
YXRvcjsgfQotICAgICAgICAKLSAgICBwcml2YXRlOgotICAgICAgICBtYXBfaXRlcmF0b3IgbV9p
dGVyYXRvcjsKLSAgICB9OwotCi0gICAgdHlwZWRlZiBXVEY6Okhhc2hUYWJsZUFkZFJlc3VsdDxp
dGVyYXRvcj4gQWRkUmVzdWx0OwotCiAgICAgV2Vha0dDTWFwKCkKICAgICB7CiAgICAgfQogCi0g
ICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4gbV9tYXAuaXNFbXB0eSgpOyB9CiAgICAgdm9pZCBj
bGVhcigpCiAgICAgewotICAgICAgICBtYXBfaXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7Ci0g
ICAgICAgIGZvciAobWFwX2l0ZXJhdG9yIHB0ciA9IG1fbWFwLmJlZ2luKCk7IHB0ciAhPSBlbmQ7
ICsrcHRyKQorICAgICAgICB0eXBlbmFtZSBNYXBUeXBlOjppdGVyYXRvciBlbmQgPSBtX21hcC5l
bmQoKTsKKyAgICAgICAgZm9yICh0eXBlbmFtZSBNYXBUeXBlOjppdGVyYXRvciBwdHIgPSBtX21h
cC5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikKICAgICAgICAgICAgIFdlYWtTZXQ6OmRlYWxs
b2NhdGUocHRyLT5zZWNvbmQpOwogICAgICAgICBtX21hcC5jbGVhcigpOwogICAgIH0KIAotICAg
IGJvb2wgY29udGFpbnMoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fbWFwLmNvbnRhaW5zKGtleSk7Ci0gICAgfQotCi0gICAgaXRlcmF0b3IgZmluZChj
b25zdCBLZXlUeXBlJiBrZXkpCi0gICAgewotICAgICAgICByZXR1cm4gbV9tYXAuZmluZChrZXkp
OwotICAgIH0KLQotICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yIGl0ZXIpCi0gICAgewotICAgICAg
ICBBU1NFUlQoaXRlci5tX2l0ZXJhdG9yICE9IG1fbWFwLmVuZCgpKTsKLSAgICAgICAgV2Vha0lt
cGwqIGltcGwgPSBpdGVyLm1faXRlcmF0b3ItPnNlY29uZDsKLSAgICAgICAgQVNTRVJUKGltcGwp
OwotICAgICAgICBXZWFrU2V0OjpkZWFsbG9jYXRlKGltcGwpOwotICAgICAgICBtX21hcC5yZW1v
dmUoaXRlci5tX2l0ZXJhdG9yKTsKLSAgICB9Ci0KICAgICBFeHRlcm5hbFR5cGUgZ2V0KGNvbnN0
IEtleVR5cGUmIGtleSkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBIYW5kbGVUeXBlczxN
YXBwZWRUeXBlPjo6Z2V0RnJvbVNsb3QoY29uc3RfY2FzdDxKU1ZhbHVlKj4oJm1fbWFwLmdldChr
ZXkpLT5qc1ZhbHVlKCkpKTsKICAgICB9CiAKLSAgICBBZGRSZXN1bHQgYWRkKEpTR2xvYmFsRGF0
YSYsIGNvbnN0IEtleVR5cGUmIGtleSwgRXh0ZXJuYWxUeXBlIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgdHlwZW5hbWUgTWFwVHlwZTo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fbWFwLmFkZChrZXksIDAp
OwotICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICByZXN1bHQuaXRl
cmF0b3ItPnNlY29uZCA9IFdlYWtTZXQ6OmFsbG9jYXRlKHZhbHVlLCB0aGlzLCBGaW5hbGl6ZXJD
YWxsYmFjazo6ZmluYWxpemVyQ29udGV4dEZvcihrZXkpKTsKLQotICAgICAgICAvLyBXZWFrR0NN
YXAgZXhwb3NlcyBhIGRpZmZlcmVudCBpdGVyYXRvciwgc28gd2UgbmVlZCB0byB3cmFwIGl0IGFu
ZCBjcmVhdGUgb3VyIG93biBBZGRSZXN1bHQuCi0gICAgICAgIHJldHVybiBBZGRSZXN1bHQoaXRl
cmF0b3IocmVzdWx0Lml0ZXJhdG9yKSwgcmVzdWx0LmlzTmV3RW50cnkpOwotICAgIH0KLQogICAg
IHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYsIGNvbnN0IEtleVR5cGUmIGtleSwgRXh0ZXJuYWxUeXBl
IHZhbHVlKQogICAgIHsKICAgICAgICAgdHlwZW5hbWUgTWFwVHlwZTo6QWRkUmVzdWx0IHJlc3Vs
dCA9IG1fbWFwLmFkZChrZXksIDApOwpAQCAtMTM1LDIxICs4MCwxNCBAQCBwdWJsaWM6CiAgICAg
ICAgIHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gV2Vha1NldDo6YWxsb2NhdGUodmFsdWUsIHRo
aXMsIEZpbmFsaXplckNhbGxiYWNrOjpmaW5hbGl6ZXJDb250ZXh0Rm9yKGtleSkpOwogICAgIH0K
IAotICAgIEV4dGVybmFsVHlwZSB0YWtlKGNvbnN0IEtleVR5cGUmIGtleSkKKyAgICB2b2lkIHJl
bW92ZShjb25zdCBLZXlUeXBlJiBrZXkpCiAgICAgewogICAgICAgICBXZWFrSW1wbCogaW1wbCA9
IG1fbWFwLnRha2Uoa2V5KTsKICAgICAgICAgaWYgKCFpbXBsKQotICAgICAgICAgICAgcmV0dXJu
IEhhc2hUcmFpdHM8RXh0ZXJuYWxUeXBlPjo6ZW1wdHlWYWx1ZSgpOwotICAgICAgICBFeHRlcm5h
bFR5cGUgcmVzdWx0ID0gSGFuZGxlVHlwZXM8TWFwcGVkVHlwZT46OmdldEZyb21TbG90KGNvbnN0
X2Nhc3Q8SlNWYWx1ZSo+KCZpbXBsLT5qc1ZhbHVlKCkpKTsKKyAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgV2Vha1NldDo6ZGVhbGxvY2F0ZShpbXBsKTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAKLSAgICBzaXplX3Qgc2l6ZSgpIHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQot
Ci0gICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBpdGVyYXRvcihtX21hcC5iZWdpbigpKTsg
fQotICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGl0ZXJhdG9yKG1fbWFwLmVuZCgpKTsgfQot
ICAgIAogICAgIH5XZWFrR0NNYXAoKQogICAgIHsKICAgICAgICAgY2xlYXIoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDExODQ2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDEyLTA1LTI0ICBHZW9mZnJleSBHYXJlbiAg
PGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViS2l0IHNob3VsZCBiZSBsYXp5LWZpbmFs
aXphdGlvbi1zYWZlIChlc3AuIHRoZSBET00pCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD04NzQ1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTU3RyaW5nT3duZXI6OmZpbmFsaXplKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNTdHJpbmdTbG93
Q2FzZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmg6CisgICAgICAgIChX
ZWJDb3JlOjpjYWNoZVdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6dW5jYWNoZVdyYXBwZXIp
OiBVc2UgdGhlIG5ldyBpZGlvbXMuCisKKyAgICAgICAgKFdlYkNvcmU6OmpzU3RyaW5nKTogVXNl
IGdldCBpbnN0ZWFkIG9mIGZpbmQgYmVjYXVzZSBnZXQgaXMgc2ltcGxlciBpbgorICAgICAgICB0
aGUgY2FzZSBvZiBlbnRyaWVzIHRoYXQgYXJlIGxvZ2ljYWxseSBudWxsLgorCisgICAgICAgIChX
ZWJDb3JlOjpkb21PYmplY3RXcmFwcGVyTWFwRm9yKTogUmVtb3ZlZCwgc2luY2UgaXQgd2FzIHVu
dXNlZC4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFdyYXBwYWJsZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0V3JhcHBhYmxlOjpjbGVhcldyYXBwZXIpOiBVc2UgdGhlIG5ldyBp
ZGlvbXMuCisKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9yb290LmNwcDoKKyAgICAgICAgKEpT
Qzo6QmluZGluZ3M6OlJvb3RPYmplY3Q6OmludmFsaWRhdGUpOiBDaGVjayBmb3IgbnVsbCB3aGls
ZSBpdGVyYXRpbmcsCisgICAgICAgIHNpbmNlIHRoYXQncyBwb3NzaWJsZSBub3cuCisKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3Q6OmFkZFJ1bnRpbWVPYmplY3QpOgorICAgICAg
ICAoSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdDo6cmVtb3ZlUnVudGltZU9iamVjdCk6CisgICAg
ICAgIChKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0OjpmaW5hbGl6ZSk6IFVzZSB0aGUgbmV3IGlk
aW9tcy4KKworICAgICAgICAqIGJyaWRnZS9ydW50aW1lX3Jvb3QuaDoKKyAgICAgICAgKFJvb3RP
YmplY3QpOiBDbGFyaWZpZWQgdGhlIHdvcmQgIm5lZWQiLgorCiAyMDEyLTA1LTI0ICBNT1JJVEEg
SGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29tPgogCiAgICAgICAgIFNjb3BlZCBzdHlsZXNoZWV0
IHNob3VsZCBiZSBwZXItZG9jdW1lbnQtY29uZmlndXJhYmxlLgpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuY3BwCShyZXZpc2lvbiAxMTg0Mjgp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw4ICszNCw3IEBAIHZvaWQgSlNTdHJpbmdPd25lcjo6ZmluYWxpemUo
SlNDOjpIYW5kbGUKIHsKICAgICBKU1N0cmluZyoganNTdHJpbmcgPSBqc0Nhc3Q8SlNTdHJpbmcq
PihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkpOwogICAgIFN0cmluZ0ltcGwqIHN0cmluZ0ltcGwgPSBz
dGF0aWNfY2FzdDxTdHJpbmdJbXBsKj4oY29udGV4dCk7Ci0gICAgQVNTRVJUX1VOVVNFRChqc1N0
cmluZywgbV93b3JsZC0+bV9zdHJpbmdDYWNoZS5maW5kKHN0cmluZ0ltcGwpLT5zZWNvbmQud2Fz
KGpzU3RyaW5nKSk7Ci0gICAgbV93b3JsZC0+bV9zdHJpbmdDYWNoZS5yZW1vdmUoc3RyaW5nSW1w
bCk7CisgICAgd2Vha1JlbW92ZShtX3dvcmxkLT5tX3N0cmluZ0NhY2hlLCBzdHJpbmdJbXBsLCBq
c1N0cmluZyk7CiB9CiAKIERPTVdyYXBwZXJXb3JsZDo6RE9NV3JhcHBlcldvcmxkKEpTQzo6SlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBib29sIGlzTm9ybWFsKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiAxMTg0MjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OSw3ICs0OSw3IEBAIGNvbnN0IEpTQzo6SGFzaFRhYmxlKiBnZXRIYXNoVGFibGVGb3JH
bG8KIEpTVmFsdWUganNTdHJpbmdTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nQ2Fj
aGUmIHN0cmluZ0NhY2hlLCBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsKQogewogICAgIEpTU3RyaW5n
KiB3cmFwcGVyID0ganNTdHJpbmcoZXhlYywgVVN0cmluZyhzdHJpbmdJbXBsKSk7Ci0gICAgc3Ry
aW5nQ2FjaGUuYWRkKHN0cmluZ0ltcGwsIFBhc3NXZWFrPEpTU3RyaW5nPih3cmFwcGVyLCBjdXJy
ZW50V29ybGQoZXhlYyktPnN0cmluZ1dyYXBwZXJPd25lcigpLCBzdHJpbmdJbXBsKSk7CisgICAg
d2Vha0FkZChzdHJpbmdDYWNoZSwgc3RyaW5nSW1wbCwgUGFzc1dlYWs8SlNTdHJpbmc+KHdyYXBw
ZXIsIGN1cnJlbnRXb3JsZChleGVjKS0+c3RyaW5nV3JhcHBlck93bmVyKCksIHN0cmluZ0ltcGwp
KTsKICAgICByZXR1cm4gd3JhcHBlcjsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDExODQyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsMTYgKzE0
MiwxNCBAQCBlbnVtIFBhcmFtZXRlckRlZmF1bHRQb2xpY3kgewogICAgICAgICBpZiAoc2V0SW5s
aW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgZG9tT2JqZWN0LCB3cmFwcGVyKSkKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgSlNDOjpQYXNzV2VhazxKU0RPTVdyYXBwZXI+IHBhc3NXZWFrKHdy
YXBwZXIsIHdyYXBwZXJPd25lcih3b3JsZCwgZG9tT2JqZWN0KSwgd3JhcHBlckNvbnRleHQod29y
bGQsIGRvbU9iamVjdCkpOwotICAgICAgICBET01PYmplY3RXcmFwcGVyTWFwOjpBZGRSZXN1bHQg
cmVzdWx0ID0gd29ybGQtPm1fd3JhcHBlcnMuYWRkKGRvbU9iamVjdCwgcGFzc1dlYWspOwotICAg
ICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICB3
ZWFrQWRkKHdvcmxkLT5tX3dyYXBwZXJzLCAodm9pZCopZG9tT2JqZWN0LCBwYXNzV2Vhayk7CiAg
ICAgfQogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIERPTUNsYXNzPiBpbmxpbmUgdm9pZCB1bmNh
Y2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQqIHdvcmxkLCBET01DbGFzcyogZG9tT2JqZWN0LCBK
U0RPTVdyYXBwZXIqIHdyYXBwZXIpCiAgICAgewogICAgICAgICBpZiAoY2xlYXJJbmxpbmVDYWNo
ZWRXcmFwcGVyKHdvcmxkLCBkb21PYmplY3QsIHdyYXBwZXIpKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBBU1NFUlQod29ybGQtPm1fd3JhcHBlcnMuZmluZChkb21PYmplY3QpLT5zZWNv
bmQud2FzKHdyYXBwZXIpKTsKLSAgICAgICAgd29ybGQtPm1fd3JhcHBlcnMucmVtb3ZlKGRvbU9i
amVjdCk7CisgICAgICAgIHdlYWtSZW1vdmUod29ybGQtPm1fd3JhcHBlcnMsICh2b2lkKilkb21P
YmplY3QsIHdyYXBwZXIpOwogICAgIH0KICAgICAKICAgICAjZGVmaW5lIENSRUFURV9ET01fV1JB
UFBFUihleGVjLCBnbG9iYWxPYmplY3QsIGNsYXNzTmFtZSwgb2JqZWN0KSBjcmVhdGVXcmFwcGVy
PEpTIyNjbGFzc05hbWU+KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8Y2xhc3NOYW1l
Kj4ob2JqZWN0KSkKQEAgLTM0OSwxOCArMzQ3LDEyIEBAIGVudW0gUGFyYW1ldGVyRGVmYXVsdFBv
bGljeSB7CiAgICAgICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgc3RyaW5nVG9VU3RyaW5n
KHMpKTsKIAogICAgICAgICBKU1N0cmluZ0NhY2hlJiBzdHJpbmdDYWNoZSA9IGN1cnJlbnRXb3Js
ZChleGVjKS0+bV9zdHJpbmdDYWNoZTsKLSAgICAgICAgSlNTdHJpbmdDYWNoZTo6aXRlcmF0b3Ig
aXQgPSBzdHJpbmdDYWNoZS5maW5kKHN0cmluZ0ltcGwpOwotICAgICAgICBpZiAoaXQgIT0gc3Ry
aW5nQ2FjaGUuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsKKyAg
ICAgICAgaWYgKEpTQzo6SlNTdHJpbmcqIHN0cmluZyA9IHN0cmluZ0NhY2hlLmdldChzdHJpbmdJ
bXBsKSkKKyAgICAgICAgICAgIHJldHVybiBzdHJpbmc7CiAKICAgICAgICAgcmV0dXJuIGpzU3Ry
aW5nU2xvd0Nhc2UoZXhlYywgc3RyaW5nQ2FjaGUsIHN0cmluZ0ltcGwpOwogICAgIH0KIAotICAg
IGlubGluZSBET01PYmplY3RXcmFwcGVyTWFwJiBkb21PYmplY3RXcmFwcGVyTWFwRm9yKEpTQzo6
RXhlY1N0YXRlKiBleGVjKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGN1cnJlbnRXb3JsZChleGVj
KS0+bV93cmFwcGVyczsKLSAgICB9Ci0KICAgICBpbmxpbmUgU3RyaW5nIHVzdHJpbmdUb1N0cmlu
Zyhjb25zdCBKU0M6OlVTdHJpbmcmIHUpCiAgICAgewogICAgICAgICByZXR1cm4gdS5pbXBsKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRXcmFwcGFibGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRXcmFwcGFibGUuaAko
cmV2aXNpb24gMTE4NDI4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0V3Jh
cHBhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDggKzUxLDcgQEAgcHVibGljOgogCiAgICAg
dm9pZCBjbGVhcldyYXBwZXIoSlNET01XcmFwcGVyKiB3cmFwcGVyKQogICAgIHsKLSAgICAgICAg
QVNTRVJUX1VOVVNFRCh3cmFwcGVyLCBtX3dyYXBwZXIud2FzKHdyYXBwZXIpKTsKLSAgICAgICAg
bV93cmFwcGVyLmNsZWFyKCk7CisgICAgICAgIHdlYWtDbGVhcihtX3dyYXBwZXIsIHdyYXBwZXIp
OwogICAgIH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1l
X3Jvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jv
b3QuY3BwCShyZXZpc2lvbiAxMTg0MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGlt
ZV9yb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSwxMCBAQCB2b2lkIFJvb3RP
YmplY3Q6OmludmFsaWRhdGUoKQogICAgIHsKICAgICAgICAgSGFzaE1hcDxSdW50aW1lT2JqZWN0
KiwgSlNDOjpXZWFrPFJ1bnRpbWVPYmplY3Q+ID46Oml0ZXJhdG9yIGVuZCA9IG1fcnVudGltZU9i
amVjdHMuZW5kKCk7CiAgICAgICAgIGZvciAoSGFzaE1hcDxSdW50aW1lT2JqZWN0KiwgSlNDOjpX
ZWFrPFJ1bnRpbWVPYmplY3Q+ID46Oml0ZXJhdG9yIGl0ID0gbV9ydW50aW1lT2JqZWN0cy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0KCktPmlu
dmFsaWRhdGUoKTsKKyAgICAgICAgICAgIFJ1bnRpbWVPYmplY3QqIHJ1bnRpbWVPYmplY3QgPSBp
dC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgaWYgKCFydW50aW1lT2JqZWN0KSAvLyBTa2lw
IHpvbWJpZXMuCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBydW50aW1l
T2JqZWN0LT5pbnZhbGlkYXRlKCk7CiAgICAgICAgIH0KIAogICAgICAgICBtX3J1bnRpbWVPYmpl
Y3RzLmNsZWFyKCk7CkBAIC0xNzksMjkgKzE4MiwyMyBAQCB2b2lkIFJvb3RPYmplY3Q6OnVwZGF0
ZUdsb2JhbE9iamVjdChKU0dsCiB2b2lkIFJvb3RPYmplY3Q6OmFkZFJ1bnRpbWVPYmplY3QoSlNH
bG9iYWxEYXRhJiwgUnVudGltZU9iamVjdCogb2JqZWN0KQogewogICAgIEFTU0VSVChtX2lzVmFs
aWQpOwotICAgIEFTU0VSVCghbV9ydW50aW1lT2JqZWN0cy5nZXQob2JqZWN0KSk7Ci0KLSAgICBt
X3J1bnRpbWVPYmplY3RzLnNldChvYmplY3QsIEpTQzo6UGFzc1dlYWs8UnVudGltZU9iamVjdD4o
b2JqZWN0LCB0aGlzKSk7CisgICAgd2Vha0FkZChtX3J1bnRpbWVPYmplY3RzLCBvYmplY3QsIEpT
Qzo6UGFzc1dlYWs8UnVudGltZU9iamVjdD4ob2JqZWN0LCB0aGlzKSk7CiB9CiAKIHZvaWQgUm9v
dE9iamVjdDo6cmVtb3ZlUnVudGltZU9iamVjdChSdW50aW1lT2JqZWN0KiBvYmplY3QpCiB7CiAg
ICAgaWYgKCFtX2lzVmFsaWQpCiAgICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX3J1bnRp
bWVPYmplY3RzLmdldChvYmplY3QpKTsKLQotICAgIG1fcnVudGltZU9iamVjdHMudGFrZShvYmpl
Y3QpOworICAgIHdlYWtSZW1vdmUobV9ydW50aW1lT2JqZWN0cywgb2JqZWN0LCBvYmplY3QpOwog
fQogCiB2b2lkIFJvb3RPYmplY3Q6OmZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4g
aGFuZGxlLCB2b2lkKikKIHsKICAgICBSdW50aW1lT2JqZWN0KiBvYmplY3QgPSBzdGF0aWNfY2Fz
dDxSdW50aW1lT2JqZWN0Kj4oYXNPYmplY3QoaGFuZGxlLmdldCgpKSk7Ci0gICAgQVNTRVJUKG1f
cnVudGltZU9iamVjdHMuY29udGFpbnMob2JqZWN0KSk7CiAKICAgICBSZWZQdHI8Um9vdE9iamVj
dD4gcHJvdGVjdCh0aGlzKTsKICAgICBvYmplY3QtPmludmFsaWRhdGUoKTsKLSAgICBtX3J1bnRp
bWVPYmplY3RzLnJlbW92ZShvYmplY3QpOworICAgIHdlYWtSZW1vdmUobV9ydW50aW1lT2JqZWN0
cywgb2JqZWN0LCBvYmplY3QpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QmluZGluZ3MK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9yb290LmgJKHJldmlzaW9uIDExODQyOCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuaAkod29ya2luZyBjb3B5KQpA
QCAtOTMsNyArOTMsNyBAQCBwcml2YXRlOgogICAgIFN0cm9uZzxKU0dsb2JhbE9iamVjdD4gbV9n
bG9iYWxPYmplY3Q7CiAKICAgICBQcm90ZWN0Q291bnRTZXQgbV9wcm90ZWN0Q291bnRTZXQ7Ci0g
ICAgSGFzaE1hcDxSdW50aW1lT2JqZWN0KiwgSlNDOjpXZWFrPFJ1bnRpbWVPYmplY3Q+ID4gbV9y
dW50aW1lT2JqZWN0czsgLy8gUmVhbGx5IG5lZWQgYSBXZWFrR0NTZXQsIGJ1dCB0aGlzIHdpbGwg
ZG8uCisgICAgSGFzaE1hcDxSdW50aW1lT2JqZWN0KiwgSlNDOjpXZWFrPFJ1bnRpbWVPYmplY3Q+
ID4gbV9ydW50aW1lT2JqZWN0czsgLy8gV2UgdXNlIGEgbWFwIHRvIGltcGxlbWVudCBhIHNldC4K
IAogICAgIEhhc2hTZXQ8SW52YWxpZGF0aW9uQ2FsbGJhY2sqPiBtX2ludmFsaWRhdGlvbkNhbGxi
YWNrczsKIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTg0NjgpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0wNS0y
NCAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIFdlYktpdCBz
aG91bGQgYmUgbGF6eS1maW5hbGl6YXRpb24tc2FmZSAoZXNwLiB0aGUgRE9NKQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc0NTYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOUFJ1
bnRpbWVPYmplY3RNYXA6OmdldE9yQ3JlYXRlSlNPYmplY3QpOiBVc2UgdGhlIG5ldyBpZGlvbXMu
CisKKyAgICAgICAgKFdlYktpdDo6TlBSdW50aW1lT2JqZWN0TWFwOjppbnZhbGlkYXRlKTogQ2hl
Y2sgZm9yIG51bGwgd2hpbGUgaXRlcmF0aW5nLAorICAgICAgICBzaW5jZSB0aGF0J3MgcG9zc2li
bGUgbm93LgorCisgICAgICAgIChXZWJLaXQ6Ok5QUnVudGltZU9iamVjdE1hcDo6ZmluYWxpemUp
OiBVc2UgdGhlIG5ldyBpZGlvbXMuCisKIDIwMTItMDUtMjQgIEJyYWR5IEVpZHNvbiAgPGJlaWRz
b25AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCB0aGUgYnVpbGQgYWZ0ZXIgaHR0cDovL3RyYWMu
d2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTE4NDQxCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2Jq
ZWN0TWFwLmNwcAkocmV2aXNpb24gMTE4NDI4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwNCw4ICsxMDQsNyBAQCBKU09iamVjdCogTlBSdW50aW1lT2JqZWN0TWFwOjpnZXRPckNy
ZWF0CiAgICAgICAgIHJldHVybiBqc05QT2JqZWN0OwogCiAgICAgSlNOUE9iamVjdCoganNOUE9i
amVjdCA9IEpTTlBPYmplY3Q6OmNyZWF0ZShnbG9iYWxPYmplY3QsIHRoaXMsIG5wT2JqZWN0KTsK
LSAgICBtX2pzTlBPYmplY3RzLnNldChucE9iamVjdCwgSlNDOjpQYXNzV2VhazxKU05QT2JqZWN0
Pihqc05QT2JqZWN0LCB0aGlzLCBucE9iamVjdCkpOwotCisgICAgd2Vha0FkZChtX2pzTlBPYmpl
Y3RzLCBucE9iamVjdCwgSlNDOjpQYXNzV2VhazxKU05QT2JqZWN0Pihqc05QT2JqZWN0LCB0aGlz
LCBucE9iamVjdCkpOwogICAgIHJldHVybiBqc05QT2JqZWN0OwogfQogCkBAIC0yMTIsOCArMjEx
LDEyIEBAIHZvaWQgTlBSdW50aW1lT2JqZWN0TWFwOjppbnZhbGlkYXRlKCkKIAogICAgIFZlY3Rv
cjxOUE9iamVjdCo+IG9iamVjdHM7CiAKLSAgICBmb3IgKEhhc2hNYXA8TlBPYmplY3QqLCBKU0M6
OldlYWs8SlNOUE9iamVjdD4gPjo6aXRlcmF0b3IgcHRyID0gbV9qc05QT2JqZWN0cy5iZWdpbigp
LCBlbmQgPSBtX2pzTlBPYmplY3RzLmVuZCgpOyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAg
b2JqZWN0cy5hcHBlbmQocHRyLT5zZWNvbmQtPmxlYWtOUE9iamVjdCgpKTsKKyAgICBmb3IgKEhh
c2hNYXA8TlBPYmplY3QqLCBKU0M6OldlYWs8SlNOUE9iamVjdD4gPjo6aXRlcmF0b3IgcHRyID0g
bV9qc05QT2JqZWN0cy5iZWdpbigpLCBlbmQgPSBtX2pzTlBPYmplY3RzLmVuZCgpOyBwdHIgIT0g
ZW5kOyArK3B0cikgeworICAgICAgICBKU05QT2JqZWN0KiBqc05QT2JqZWN0ID0gcHRyLT5zZWNv
bmQuZ2V0KCk7CisgICAgICAgIGlmICghanNOUE9iamVjdCkgLy8gU2tpcCB6b21iaWVzLgorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIG9iamVjdHMuYXBwZW5kKGpzTlBPYmplY3QtPmxl
YWtOUE9iamVjdCgpKTsKKyAgICB9CiAKICAgICBtX2pzTlBPYmplY3RzLmNsZWFyKCk7CiAKQEAg
LTI5MywxMiArMjk2LDcgQEAgdm9pZCBOUFJ1bnRpbWVPYmplY3RNYXA6OmFkZFRvSW52YWxpZGF0
aQogdm9pZCBOUFJ1bnRpbWVPYmplY3RNYXA6OmZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4gaGFuZGxlLCB2b2lkKiBjb250ZXh0KQogewogICAgIEpTTlBPYmplY3QqIG9iamVjdCA9
IGpzQ2FzdDxKU05QT2JqZWN0Kj4oYXNPYmplY3QoaGFuZGxlLmdldCgpKSk7Ci0KLSAgICBIYXNo
TWFwPE5QT2JqZWN0KiwgSlNDOjpXZWFrPEpTTlBPYmplY3Q+ID46Oml0ZXJhdG9yIGZvdW5kID0g
bV9qc05QT2JqZWN0cy5maW5kKHN0YXRpY19jYXN0PE5QT2JqZWN0Kj4oY29udGV4dCkpOwotICAg
IEFTU0VSVChmb3VuZCAhPSBtX2pzTlBPYmplY3RzLmVuZCgpKTsKLSAgICBBU1NFUlQoZm91bmQt
PnNlY29uZC53YXMob2JqZWN0KSk7Ci0gICAgbV9qc05QT2JqZWN0cy5yZW1vdmUoZm91bmQpOwot
CisgICAgd2Vha1JlbW92ZShtX2pzTlBPYmplY3RzLCBzdGF0aWNfY2FzdDxOUE9iamVjdCo+KGNv
bnRleHQpLCBvYmplY3QpOwogICAgIGFkZFRvSW52YWxpZGF0aW9uUXVldWUob2JqZWN0LT5sZWFr
TlBPYmplY3QoKSk7CiB9CiAK
</data>
<flag name="review"
          id="150674"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>