<?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>124876</bug_id>
          
          <creation_ts>2013-11-25 17:43:21 -0800</creation_ts>
          <short_desc>Convert some Shape code to use references</short_desc>
          <delta_ts>2013-11-25 21:51:54 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>954180</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-11-25 17:43:21 -0800</bug_when>
    <thetext>Convert some Shape code to use references</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954181</commentid>
    <comment_count>1</comment_count>
      <attachid>217854</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-11-25 17:45:34 -0800</bug_when>
    <thetext>Created attachment 217854
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954218</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-11-25 21:51:54 -0800</bug_when>
    <thetext>Committed r159779: &lt;http://trac.webkit.org/changeset/159779&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217854</attachid>
            <date>2013-11-25 17:45:34 -0800</date>
            <delta_ts>2013-11-25 17:50:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-124876-20131125174533.patch</filename>
            <type>text/plain</type>
            <size>36528</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1OTc3NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDEzLTExLTI1ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ29udmVydCBzb21lIFNoYXBlIGNvZGUg
dG8gdXNlIHJlZmVyZW5jZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyNDg3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwOgorICAgICAgICAqIHJl
bmRlcmluZy9GbG9hdGluZ09iamVjdHMuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9MYXlvdXRT
dGF0ZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxv
Y2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL2xpbmUv
QnJlYWtpbmdDb250ZXh0SW5saW5lSGVhZGVycy5oOgorICAgICAgICAqIHJlbmRlcmluZy9saW5l
L0xpbmVXaWR0aC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uY3Bw
OgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVJbmZvLmg6CisgICAgICAgICogcmVu
ZGVyaW5nL3NoYXBlcy9TaGFwZUluc2lkZUluZm8uY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9z
aGFwZXMvU2hhcGVJbnNpZGVJbmZvLmg6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFw
ZU91dHNpZGVJbmZvLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lk
ZUluZm8uaDoKKyAgICAgICAgUmVwbGFjZSB5ZXQgbW9yZSBwb2ludGVycyB3aXRoIHJlZmVyZW5j
ZXMuCisKIDIwMTMtMTEtMjUgIFNpbW9uIFBlbmEgIDxzaW1vbi5wZW5hQHNhbXN1bmcuY29tPgog
CiAgICAgICAgIFtFRkxdIFgxMUhlbHBlcjo6Y3JlYXRlUGl4bWFwIGRvZXNuJ3QgaW5pdGlhbGlz
ZSBvdXQgdmFsdWUgaGFuZGxlSWQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JPdmVybGF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yT3ZlcmxheS5jcHAJKHJldmlzaW9uIDE1OTczOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjA0LDcg
KzYwNCw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGQKICAgICBz
aGFwZU9iamVjdC0+c2V0QXJyYXkoImJvdW5kcyIsIGJ1aWxkQXJyYXlGb3JRdWFkKHNoYXBlUXVh
ZCkpOwogCiAgICAgUGF0aCBwYXRoOwotICAgIHNoYXBlT3V0c2lkZUluZm8tPmNvbXB1dGVkU2hh
cGUoKS0+YnVpbGRQYXRoKHBhdGgpOworICAgIHNoYXBlT3V0c2lkZUluZm8tPmNvbXB1dGVkU2hh
cGUoKS5idWlsZFBhdGgocGF0aCk7CiAKICAgICBpZiAocGF0aC5sZW5ndGgoKSkgewogICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHNoYXBlUGF0aCA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG9hdGluZ09iamVjdHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG9hdGluZ09iamVjdHMu
Y3BwCShyZXZpc2lvbiAxNTk3MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvYXRp
bmdPYmplY3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYwLDEyICszNjAsMTIgQEAgc3RhdGlj
IGlubGluZSBTaGFwZU91dHNpZGVJbmZvKiBzaGFwZUluZgogewogICAgIGlmIChmbG9hdGluZ09i
amVjdCkgewogICAgICAgICBpZiAoU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRlID0gZmxv
YXRpbmdPYmplY3QtPnJlbmRlcmVyKCkuc2hhcGVPdXRzaWRlSW5mbygpKSB7Ci0gICAgICAgICAg
ICBzaGFwZU91dHNpZGUtPnVwZGF0ZURlbHRhc0ZvckNvbnRhaW5pbmdCbG9ja0xpbmUoJmNvbnRh
aW5pbmdCbG9jaywgZmxvYXRpbmdPYmplY3QsIGxpbmVUb3AsIGxpbmVCb3R0b20gLSBsaW5lVG9w
KTsKKyAgICAgICAgICAgIHNoYXBlT3V0c2lkZS0+dXBkYXRlRGVsdGFzRm9yQ29udGFpbmluZ0Js
b2NrTGluZShjb250YWluaW5nQmxvY2ssICpmbG9hdGluZ09iamVjdCwgbGluZVRvcCwgbGluZUJv
dHRvbSAtIGxpbmVUb3ApOwogICAgICAgICAgICAgcmV0dXJuIHNoYXBlT3V0c2lkZTsKICAgICAg
ICAgfQogICAgIH0KIAotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogI2Vu
ZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAkocmV2
aXNpb24gMTU5NzM5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBMYXlvdXRTdGF0ZTo6TGF5b3V0U3Rh
dGUoc3RkOjp1bmlxdWVfcHRyCiAgICAgLCBtX2xpbmVHcmlkKDApCiAgICAgLCBtX25leHQoc3Rk
Ojptb3ZlKG5leHQpKQogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgICwgbV9zaGFwZUluc2lk
ZUluZm8oMCkKKyAgICAsIG1fc2hhcGVJbnNpZGVJbmZvKG51bGxwdHIpCiAjZW5kaWYKICNpZm5k
ZWYgTkRFQlVHCiAgICAgLCBtX3JlbmRlcmVyKHJlbmRlcmVyKQpAQCAtMTQ3LDcgKzE0Nyw3IEBA
IExheW91dFN0YXRlOjpMYXlvdXRTdGF0ZShSZW5kZXJPYmplY3QmIHIKICAgICAsIG1fY29sdW1u
SW5mbygwKQogICAgICwgbV9saW5lR3JpZCgwKQogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAg
ICwgbV9zaGFwZUluc2lkZUluZm8oMCkKKyAgICAsIG1fc2hhcGVJbnNpZGVJbmZvKG51bGxwdHIp
CiAjZW5kaWYKICAgICAsIG1fcGFnZUxvZ2ljYWxIZWlnaHQoMCkKICNpZm5kZWYgTkRFQlVHCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDE1
OTczOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyMyw3ICsxMjMsNyBAQCBwdWJsaWM6CiAgICAgTGF5b3V0VW5pdCBtX3Bh
Z2VMb2dpY2FsT2Zmc2V0OwogCiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCi0gICAgT3duUHRyPFNo
YXBlSW5zaWRlSW5mbz4gbV9zaGFwZUluc2lkZUluZm87CisgICAgc3RkOjp1bmlxdWVfcHRyPFNo
YXBlSW5zaWRlSW5mbz4gbV9zaGFwZUluc2lkZUluZm87CiAjZW5kaWYKIH07CiAKQEAgLTE0MDAs
OCArMTQwMCw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmltYWdlQ2hhbmdlZChXcmFwcGVkSW0KIAog
ICAgIFNoYXBlVmFsdWUqIHNoYXBlVmFsdWUgPSBzdHlsZSgpLnNoYXBlSW5zaWRlKCk7CiAgICAg
aWYgKHNoYXBlVmFsdWUgJiYgc2hhcGVWYWx1ZS0+aW1hZ2UoKSAmJiBzaGFwZVZhbHVlLT5pbWFn
ZSgpLT5kYXRhKCkgPT0gaW1hZ2UpIHsKLSAgICAgICAgU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUlu
c2lkZUluZm8gPSBlbnN1cmVTaGFwZUluc2lkZUluZm8oKTsKLSAgICAgICAgc2hhcGVJbnNpZGVJ
bmZvLT5kaXJ0eVNoYXBlU2l6ZSgpOworICAgICAgICBTaGFwZUluc2lkZUluZm8mIHNoYXBlSW5z
aWRlSW5mbyA9IGVuc3VyZVNoYXBlSW5zaWRlSW5mbygpOworICAgICAgICBzaGFwZUluc2lkZUlu
Zm8uZGlydHlTaGFwZVNpemUoKTsKICAgICAgICAgbWFya1NoYXBlSW5zaWRlRGVzY2VuZGFudHNG
b3JMYXlvdXQoKTsKICAgICB9CiAKQEAgLTE0MTcsMzIgKzE0MTcsMzIgQEAgdm9pZCBSZW5kZXJC
bG9jazo6dXBkYXRlU2hhcGVJbnNpZGVJbmZvQQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
c2hhcGVJbnNpZGUpIHsKLSAgICAgICAgU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8g
PSBlbnN1cmVTaGFwZUluc2lkZUluZm8oKTsKLSAgICAgICAgc2hhcGVJbnNpZGVJbmZvLT5kaXJ0
eVNoYXBlU2l6ZSgpOworICAgICAgICBTaGFwZUluc2lkZUluZm8mIHNoYXBlSW5zaWRlSW5mbyA9
IGVuc3VyZVNoYXBlSW5zaWRlSW5mbygpOworICAgICAgICBzaGFwZUluc2lkZUluZm8uZGlydHlT
aGFwZVNpemUoKTsKICAgICB9IGVsc2UKICAgICAgICAgc2V0U2hhcGVJbnNpZGVJbmZvKG51bGxw
dHIpOwogICAgIG1hcmtTaGFwZUluc2lkZURlc2NlbmRhbnRzRm9yTGF5b3V0KCk7CiB9CiAKLVNo
YXBlSW5zaWRlSW5mbyogUmVuZGVyQmxvY2s6OmVuc3VyZVNoYXBlSW5zaWRlSW5mbygpCitTaGFw
ZUluc2lkZUluZm8mIFJlbmRlckJsb2NrOjplbnN1cmVTaGFwZUluc2lkZUluZm8oKQogewogICAg
IFJlbmRlckJsb2NrUmFyZURhdGEmIHJhcmVEYXRhID0gZW5zdXJlUmFyZURhdGEodGhpcyk7CiAg
ICAgaWYgKCFyYXJlRGF0YS5tX3NoYXBlSW5zaWRlSW5mbykKLSAgICAgICAgc2V0U2hhcGVJbnNp
ZGVJbmZvKFNoYXBlSW5zaWRlSW5mbzo6Y3JlYXRlSW5mbyh0aGlzKSk7Ci0gICAgcmV0dXJuIHJh
cmVEYXRhLm1fc2hhcGVJbnNpZGVJbmZvLmdldCgpOworICAgICAgICBzZXRTaGFwZUluc2lkZUlu
Zm8oc3RkOjptYWtlX3VuaXF1ZTxTaGFwZUluc2lkZUluZm8+KCp0aGlzKSk7CisgICAgcmV0dXJu
ICpyYXJlRGF0YS5tX3NoYXBlSW5zaWRlSW5mbzsKIH0KIAogU2hhcGVJbnNpZGVJbmZvKiBSZW5k
ZXJCbG9jazo6c2hhcGVJbnNpZGVJbmZvKCkgY29uc3QKIHsKICAgICBSZW5kZXJCbG9ja1JhcmVE
YXRhKiByYXJlRGF0YSA9IGdldFJhcmVEYXRhKHRoaXMpOwogICAgIGlmICghcmFyZURhdGEgfHwg
IXJhcmVEYXRhLT5tX3NoYXBlSW5zaWRlSW5mbykKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0
dXJuIFNoYXBlSW5zaWRlSW5mbzo6aXNFbmFibGVkRm9yKHRoaXMpID8gcmFyZURhdGEtPm1fc2hh
cGVJbnNpZGVJbmZvLmdldCgpIDogMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0
dXJuIFNoYXBlSW5zaWRlSW5mbzo6aXNFbmFibGVkRm9yKCp0aGlzKSA/IHJhcmVEYXRhLT5tX3No
YXBlSW5zaWRlSW5mby5nZXQoKSA6IG51bGxwdHI7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OnNl
dFNoYXBlSW5zaWRlSW5mbyhQYXNzT3duUHRyPFNoYXBlSW5zaWRlSW5mbz4gdmFsdWUpCit2b2lk
IFJlbmRlckJsb2NrOjpzZXRTaGFwZUluc2lkZUluZm8oc3RkOjp1bmlxdWVfcHRyPFNoYXBlSW5z
aWRlSW5mbz4gdmFsdWUpCiB7Ci0gICAgZW5zdXJlUmFyZURhdGEodGhpcykubV9zaGFwZUluc2lk
ZUluZm8gPSB2YWx1ZTsKKyAgICBlbnN1cmVSYXJlRGF0YSh0aGlzKS5tX3NoYXBlSW5zaWRlSW5m
byA9IHN0ZDo6bW92ZSh2YWx1ZSk7CiB9CiAgICAgCiB2b2lkIFJlbmRlckJsb2NrOjptYXJrU2hh
cGVJbnNpZGVEZXNjZW5kYW50c0ZvckxheW91dCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24gMTU5NzM5KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4Niw5ICszODYsOSBAQCBw
dWJsaWM6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgIFNoYXBlSW5zaWRl
SW5mbyogZW5zdXJlU2hhcGVJbnNpZGVJbmZvKCk7CisgICAgU2hhcGVJbnNpZGVJbmZvJiBlbnN1
cmVTaGFwZUluc2lkZUluZm8oKTsKICAgICBTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5m
bygpIGNvbnN0OwotICAgIHZvaWQgc2V0U2hhcGVJbnNpZGVJbmZvKFBhc3NPd25QdHI8U2hhcGVJ
bnNpZGVJbmZvPiB2YWx1ZSk7CisgICAgdm9pZCBzZXRTaGFwZUluc2lkZUluZm8oc3RkOjp1bmlx
dWVfcHRyPFNoYXBlSW5zaWRlSW5mbz4pOwogICAgIAogICAgIHZvaWQgbWFya1NoYXBlSW5zaWRl
RGVzY2VuZGFudHNGb3JMYXlvdXQoKTsKICAgICBTaGFwZUluc2lkZUluZm8qIGxheW91dFNoYXBl
SW5zaWRlSW5mbygpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrTGluZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHJldmlzaW9uIDE1OTczOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTM0LDcgKzExMzQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHVzaFNoYXBlQ29u
dGVudE92ZXJmCiAgICAgTGF5b3V0VW5pdCBzaGFwZUxvZ2ljYWxCb3R0b20gPSBzaGFwZUluc2lk
ZUluZm8tPnNoYXBlTG9naWNhbEJvdHRvbSgpOwogICAgIExheW91dFVuaXQgc2hhcGVDb250YWlu
aW5nQmxvY2tMb2dpY2FsSGVpZ2h0ID0gc2hhcGVJbnNpZGVJbmZvLT5zaGFwZUNvbnRhaW5pbmdC
bG9ja0xvZ2ljYWxIZWlnaHQoKTsKIAotICAgIGJvb2wgaXNPdmVyZmxvd1Bvc2l0aW9uZWRBbHJl
YWR5ID0gKHNoYXBlQ29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodCAtIHNoYXBlSW5zaWRlSW5m
by0+b3duZXIoKS0+Ym9yZGVyQW5kUGFkZGluZ0FmdGVyKCkgKyBsaW5lSGVpZ2h0KSA8PSBsaW5l
VG9wOworICAgIGJvb2wgaXNPdmVyZmxvd1Bvc2l0aW9uZWRBbHJlYWR5ID0gKHNoYXBlQ29udGFp
bmluZ0Jsb2NrTG9naWNhbEhlaWdodCAtIHNoYXBlSW5zaWRlSW5mby0+b3duZXIoKS5ib3JkZXJB
bmRQYWRkaW5nQWZ0ZXIoKSArIGxpbmVIZWlnaHQpIDw9IGxpbmVUb3A7CiAKICAgICAvLyBJZiB0
aGUgbGFzdCBsaW5lIG92ZXJsYXBzIHdpdGggdGhlIHNoYXBlLCB3ZSBkb24ndCBuZWVkIHRoZSBz
ZWdtZW50cyBhbnltb3JlCiAgICAgaWYgKGxpbmVUb3AgPCBzaGFwZUxvZ2ljYWxCb3R0b20gJiYg
c2hhcGVMb2dpY2FsQm90dG9tIDwgbG9naWNhbExpbmVCb3R0b20pCkBAIC0xMTQzLDcgKzExNDMs
NyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHVzaFNoYXBlQ29udGVudE92ZXJmCiAgICAgaWYgKGxv
Z2ljYWxMaW5lQm90dG9tIDw9IHNoYXBlTG9naWNhbEJvdHRvbSB8fCAhc2hhcGVDb250YWluaW5n
QmxvY2tMb2dpY2FsSGVpZ2h0IHx8IGlzT3ZlcmZsb3dQb3NpdGlvbmVkQWxyZWFkeSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgTGF5b3V0VW5pdCBuZXdMb2dpY2FsSGVpZ2h0ID0gYmxvY2stPmxv
Z2ljYWxIZWlnaHQoKSArIChzaGFwZUNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHQgLSAobGlu
ZVRvcCArIHNoYXBlSW5zaWRlSW5mby0+b3duZXIoKS0+Ym9yZGVyQW5kUGFkZGluZ0FmdGVyKCkp
KTsKKyAgICBMYXlvdXRVbml0IG5ld0xvZ2ljYWxIZWlnaHQgPSBibG9jay0+bG9naWNhbEhlaWdo
dCgpICsgKHNoYXBlQ29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodCAtIChsaW5lVG9wICsgc2hh
cGVJbnNpZGVJbmZvLT5vd25lcigpLmJvcmRlckFuZFBhZGRpbmdBZnRlcigpKSk7CiAgICAgYmxv
Y2stPnNldExvZ2ljYWxIZWlnaHQobmV3TG9naWNhbEhlaWdodCk7CiB9CiAKQEAgLTEzMDEsMTcg
KzEzMDEsMTcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmxheW91dFJ1bnNBbmRGbG9hdAogICAg
IExheW91dFNpemUgbG9naWNhbE9mZnNldEZyb21TaGFwZUNvbnRhaW5lcjsKICAgICBTaGFwZUlu
c2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbyA9IGxheW91dFNoYXBlSW5zaWRlSW5mbygpOwogICAg
IGlmIChzaGFwZUluc2lkZUluZm8pIHsKLSAgICAgICAgQVNTRVJUKHNoYXBlSW5zaWRlSW5mby0+
b3duZXIoKSA9PSB0aGlzIHx8IGFsbG93c1NoYXBlSW5zaWRlSW5mb1NoYXJpbmcoKSk7CisgICAg
ICAgIEFTU0VSVCgmc2hhcGVJbnNpZGVJbmZvLT5vd25lcigpID09IHRoaXMgfHwgYWxsb3dzU2hh
cGVJbnNpZGVJbmZvU2hhcmluZygpKTsKICAgICAgICAgaWYgKHNoYXBlSW5zaWRlSW5mbyAhPSB0
aGlzLT5zaGFwZUluc2lkZUluZm8oKSkgewogICAgICAgICAgICAgLy8gRklYTUUgQnVnIDEwMDI4
NDogSWYgc3Vic2VxdWVudCBMYXlvdXRTdGF0ZXMgYXJlIHB1c2hlZCwgd2Ugd2lsbCBoYXZlIHRv
IGFkZAogICAgICAgICAgICAgLy8gdGhlaXIgb2Zmc2V0cyBmcm9tIHRoZSBvcmlnaW5hbCBzaGFw
ZS1pbnNpZGUgY29udGFpbmVyLgotICAgICAgICAgICAgbG9naWNhbE9mZnNldEZyb21TaGFwZUNv
bnRhaW5lciA9IGxvZ2ljYWxPZmZzZXRGcm9tU2hhcGVBbmNlc3RvckNvbnRhaW5lcihzaGFwZUlu
c2lkZUluZm8tPm93bmVyKCkpOworICAgICAgICAgICAgbG9naWNhbE9mZnNldEZyb21TaGFwZUNv
bnRhaW5lciA9IGxvZ2ljYWxPZmZzZXRGcm9tU2hhcGVBbmNlc3RvckNvbnRhaW5lcigmc2hhcGVJ
bnNpZGVJbmZvLT5vd25lcigpKTsKICAgICAgICAgfQogICAgICAgICAvLyBCZWdpbiBsYXlvdXQg
YXQgdGhlIGxvZ2ljYWwgdG9wIG9mIG91ciBzaGFwZSBpbnNpZGUuCiAgICAgICAgIGlmIChsb2dp
Y2FsSGVpZ2h0KCkgKyBsb2dpY2FsT2Zmc2V0RnJvbVNoYXBlQ29udGFpbmVyLmhlaWdodCgpIDwg
c2hhcGVJbnNpZGVJbmZvLT5zaGFwZUxvZ2ljYWxUb3AoKSkgewogICAgICAgICAgICAgTGF5b3V0
VW5pdCBsb2dpY2FsSGVpZ2h0ID0gc2hhcGVJbnNpZGVJbmZvLT5zaGFwZUxvZ2ljYWxUb3AoKSAt
IGxvZ2ljYWxPZmZzZXRGcm9tU2hhcGVDb250YWluZXIuaGVpZ2h0KCk7CiAgICAgICAgICAgICBp
ZiAobGF5b3V0U3RhdGUuZmxvd1RocmVhZCgpKQotICAgICAgICAgICAgICAgIGxvZ2ljYWxIZWln
aHQgLT0gc2hhcGVJbnNpZGVJbmZvLT5vd25lcigpLT5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCk7
CisgICAgICAgICAgICAgICAgbG9naWNhbEhlaWdodCAtPSBzaGFwZUluc2lkZUluZm8tPm93bmVy
KCkuYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpOwogICAgICAgICAgICAgc2V0TG9naWNhbEhlaWdo
dChsb2dpY2FsSGVpZ2h0KTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiAxNTk3MzkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIwLDcgKzIyMCw3
IEBAIHZvaWQgUmVuZGVyQm94Ojp3aWxsQmVEZXN0cm95ZWQoKQogICAgIFJlbmRlckJsb2NrOjpy
ZW1vdmVQZXJjZW50SGVpZ2h0RGVzY2VuZGFudElmTmVlZGVkKCp0aGlzKTsKIAogI2lmIEVOQUJM
RShDU1NfU0hBUEVTKQotICAgIFNoYXBlT3V0c2lkZUluZm86OnJlbW92ZUluZm8odGhpcyk7Cisg
ICAgU2hhcGVPdXRzaWRlSW5mbzo6cmVtb3ZlSW5mbygqdGhpcyk7CiAjZW5kaWYKIAogICAgIFJl
bmRlckJveE1vZGVsT2JqZWN0Ojp3aWxsQmVEZXN0cm95ZWQoKTsKQEAgLTQwMCw5ICs0MDAsOSBA
QCB2b2lkIFJlbmRlckJveDo6dXBkYXRlU2hhcGVPdXRzaWRlSW5mb0FmCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGlmICghc2hhcGVPdXRzaWRlKQotICAgICAgICBTaGFwZU91dHNpZGVJbmZvOjpy
ZW1vdmVJbmZvKHRoaXMpOworICAgICAgICBTaGFwZU91dHNpZGVJbmZvOjpyZW1vdmVJbmZvKCp0
aGlzKTsKICAgICBlbHNlCi0gICAgICAgIFNoYXBlT3V0c2lkZUluZm86OmVuc3VyZUluZm8odGhp
cyktPmRpcnR5U2hhcGVTaXplKCk7CisgICAgICAgIFNoYXBlT3V0c2lkZUluZm86OmVuc3VyZUlu
Zm8oKnRoaXMpLmRpcnR5U2hhcGVTaXplKCk7CiAKICAgICBpZiAoc2hhcGVPdXRzaWRlIHx8IHNo
YXBlT3V0c2lkZSAhPSBvbGRTaGFwZU91dHNpZGUpCiAgICAgICAgIG1hcmtTaGFwZU91dHNpZGVE
ZXBlbmRlbnRzRm9yTGF5b3V0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5oCShyZXZpc2lvbiAxNTk3MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5MSw3ICs1OTEsNyBAQCBwdWJsaWM6CiAjaWYgRU5B
QkxFKENTU19TSEFQRVMpCiAgICAgU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRlSW5mbygp
IGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gU2hhcGVPdXRzaWRlSW5mbzo6aXNFbmFibGVk
Rm9yKHRoaXMpID8gU2hhcGVPdXRzaWRlSW5mbzo6aW5mbyh0aGlzKSA6IDA7CisgICAgICAgIHJl
dHVybiBTaGFwZU91dHNpZGVJbmZvOjppc0VuYWJsZWRGb3IoKnRoaXMpID8gU2hhcGVPdXRzaWRl
SW5mbzo6aW5mbygqdGhpcykgOiBudWxscHRyOwogICAgIH0KIAogICAgIHZvaWQgbWFya1NoYXBl
T3V0c2lkZURlcGVuZGVudHNGb3JMYXlvdXQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0SW5saW5lSGVhZGVycy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dElubGluZUhlYWRlcnMu
aAkocmV2aXNpb24gMTU5NzM5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJl
YWtpbmdDb250ZXh0SW5saW5lSGVhZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC01ODksNyArNTg5
LDcgQEAgaW5saW5lIHZvaWQgdXBkYXRlU2VnbWVudHNGb3JTaGFwZXMoUmVuZAogICAgICAgICBy
ZXR1cm47CiAKICAgICBib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlID0gYmxvY2suaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKTsKLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxPZmZzZXRGcm9tU2hh
cGVDb250YWluZXIgPSBibG9jay5sb2dpY2FsT2Zmc2V0RnJvbVNoYXBlQW5jZXN0b3JDb250YWlu
ZXIoc2hhcGVJbnNpZGVJbmZvLT5vd25lcigpKS5oZWlnaHQoKTsKKyAgICBMYXlvdXRVbml0IGxv
Z2ljYWxPZmZzZXRGcm9tU2hhcGVDb250YWluZXIgPSBibG9jay5sb2dpY2FsT2Zmc2V0RnJvbVNo
YXBlQW5jZXN0b3JDb250YWluZXIoJnNoYXBlSW5zaWRlSW5mby0+b3duZXIoKSkuaGVpZ2h0KCk7
CiAKICAgICBMYXlvdXRVbml0IGxpbmVMb2dpY2FsVG9wID0gYmxvY2subG9naWNhbEhlaWdodCgp
ICsgbG9naWNhbE9mZnNldEZyb21TaGFwZUNvbnRhaW5lcjsKICAgICBMYXlvdXRVbml0IGxpbmVM
b2dpY2FsSGVpZ2h0ID0gYmxvY2subGluZUhlaWdodChpc0ZpcnN0TGluZSwgaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUgPyBIb3Jpem9udGFsTGluZSA6IFZlcnRpY2FsTGluZSwgUG9zaXRpb25PZklu
dGVyaW9yTGluZUJveGVzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xp
bmVXaWR0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUv
TGluZVdpZHRoLmNwcAkocmV2aXNpb24gMTU5NzM5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL2xpbmUvTGluZVdpZHRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3IEBA
IHZvaWQgTGluZVdpZHRoOjpzaHJpbmtBdmFpbGFibGVXaWR0aEZvck4KICAgICAvLyB3aGVuIHdl
IGFkZCBhIHN1YnNlcXVlbnQgZmxvYXQgb24gdGhlIHNhbWUgbGluZSwgd2UgbmVlZCB0byB1bmRv
IHRoZSBzaGFwZSBkZWx0YSBpbiBvcmRlciB0byBwb3NpdGlvbgogICAgIC8vIGJhc2VkIG9uIHRo
ZSBtYXJnaW4gYm94LiBJbiBvcmRlciB0byBkbyB0aGlzLCB3ZSBuZWVkIHRvIHdhbGsgYmFjayB0
aHJvdWdoIHRoZSBmbG9hdGluZyBvYmplY3QgbGlzdCB0byBmaW5kCiAgICAgLy8gdGhlIGZpcnN0
IHByZXZpb3VzIGZsb2F0IHRoYXQgaXMgb24gdGhlIHNhbWUgc2lkZSBhcyBvdXIgbmV3RmxvYXQu
Ci0gICAgU2hhcGVPdXRzaWRlSW5mbyogcHJldmlvdXNTaGFwZU91dHNpZGVJbmZvID0gMDsKKyAg
ICBTaGFwZU91dHNpZGVJbmZvKiBwcmV2aW91c1NoYXBlT3V0c2lkZUluZm8gPSBudWxscHRyOwog
ICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fYmxvY2su
bV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgIGF1dG8gaXQgPSBmbG9hdGluZ09iamVjdFNl
dC5lbmQoKTsKICAgICBhdXRvIGJlZ2luID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsKQEAg
LTExMSwxNCArMTExLDE0IEBAIHZvaWQgTGluZVdpZHRoOjpzaHJpbmtBdmFpbGFibGVXaWR0aEZv
ck4KICAgICAgICAgaWYgKHByZXZpb3VzRmxvYXQgIT0gbmV3RmxvYXQgJiYgcHJldmlvdXNGbG9h
dC0+dHlwZSgpID09IG5ld0Zsb2F0LT50eXBlKCkpIHsKICAgICAgICAgICAgIHByZXZpb3VzU2hh
cGVPdXRzaWRlSW5mbyA9IHByZXZpb3VzRmxvYXQtPnJlbmRlcmVyKCkuc2hhcGVPdXRzaWRlSW5m
bygpOwogICAgICAgICAgICAgaWYgKHByZXZpb3VzU2hhcGVPdXRzaWRlSW5mbykKLSAgICAgICAg
ICAgICAgICBwcmV2aW91c1NoYXBlT3V0c2lkZUluZm8tPnVwZGF0ZURlbHRhc0ZvckNvbnRhaW5p
bmdCbG9ja0xpbmUoJm1fYmxvY2ssIHByZXZpb3VzRmxvYXQsIG1fYmxvY2subG9naWNhbEhlaWdo
dCgpLCBsaW5lSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBwcmV2aW91c1NoYXBlT3V0c2lkZUlu
Zm8tPnVwZGF0ZURlbHRhc0ZvckNvbnRhaW5pbmdCbG9ja0xpbmUobV9ibG9jaywgKnByZXZpb3Vz
RmxvYXQsIG1fYmxvY2subG9naWNhbEhlaWdodCgpLCBsaW5lSGVpZ2h0KTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCiAgICAgU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVP
dXRzaWRlSW5mbyA9IG5ld0Zsb2F0LT5yZW5kZXJlcigpLnNoYXBlT3V0c2lkZUluZm8oKTsKICAg
ICBpZiAoc2hhcGVPdXRzaWRlSW5mbykKLSAgICAgICAgc2hhcGVPdXRzaWRlSW5mby0+dXBkYXRl
RGVsdGFzRm9yQ29udGFpbmluZ0Jsb2NrTGluZSgmbV9ibG9jaywgbmV3RmxvYXQsIG1fYmxvY2su
bG9naWNhbEhlaWdodCgpLCBsaW5lSGVpZ2h0KTsKKyAgICAgICAgc2hhcGVPdXRzaWRlSW5mby0+
dXBkYXRlRGVsdGFzRm9yQ29udGFpbmluZ0Jsb2NrTGluZShtX2Jsb2NrLCAqbmV3RmxvYXQsIG1f
YmxvY2subG9naWNhbEhlaWdodCgpLCBsaW5lSGVpZ2h0KTsKICNlbmRpZgogCiAgICAgaWYgKG5l
d0Zsb2F0LT50eXBlKCkgPT0gRmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdCkgewpAQCAtMTk0LDcg
KzE5NCw3IEBAIHZvaWQgTGluZVdpZHRoOjpmaXRCZWxvd0Zsb2F0cygpCiAgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGNvZGUgc2hvdWxkIGJlIHJlZmFjdG9yZWQgdG8gaW5jb3Jwb3JhdGUgd2l0aCB0
aGUgY29kZSBhYm92ZS4KICAgICAgICAgU2hhcGVJbnNpZGVJbmZvKiBzaGFwZUluc2lkZUluZm8g
PSBtX2Jsb2NrLmxheW91dFNoYXBlSW5zaWRlSW5mbygpOwogICAgICAgICBpZiAoc2hhcGVJbnNp
ZGVJbmZvKSB7Ci0gICAgICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxPZmZzZXRGcm9tU2hhcGVD
b250YWluZXIgPSBtX2Jsb2NrLmxvZ2ljYWxPZmZzZXRGcm9tU2hhcGVBbmNlc3RvckNvbnRhaW5l
cihzaGFwZUluc2lkZUluZm8tPm93bmVyKCkpLmhlaWdodCgpOworICAgICAgICAgICAgTGF5b3V0
VW5pdCBsb2dpY2FsT2Zmc2V0RnJvbVNoYXBlQ29udGFpbmVyID0gbV9ibG9jay5sb2dpY2FsT2Zm
c2V0RnJvbVNoYXBlQW5jZXN0b3JDb250YWluZXIoJnNoYXBlSW5zaWRlSW5mby0+b3duZXIoKSku
aGVpZ2h0KCk7CiAgICAgICAgICAgICBMYXlvdXRVbml0IGxpbmVIZWlnaHQgPSBtX2Jsb2NrLmxp
bmVIZWlnaHQoZmFsc2UsIG1fYmxvY2suaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IEhvcml6
b250YWxMaW5lIDogVmVydGljYWxMaW5lLCBQb3NpdGlvbk9mSW50ZXJpb3JMaW5lQm94ZXMpOwog
ICAgICAgICAgICAgc2hhcGVJbnNpZGVJbmZvLT51cGRhdGVTZWdtZW50c0ZvckxpbmUobGFzdEZs
b2F0TG9naWNhbEJvdHRvbSArIGxvZ2ljYWxPZmZzZXRGcm9tU2hhcGVDb250YWluZXIsIGxpbmVI
ZWlnaHQpOwogICAgICAgICAgICAgdXBkYXRlQ3VycmVudFNoYXBlU2VnbWVudCgpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbmZvLmNwcAkocmV2aXNp
b24gMTU5NzM5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxNSArNTUsMTUgQEAgYm9vbCBjaGVja1NoYXBlSW1h
Z2VPcmlnaW4oRG9jdW1lbnQmIGRvYwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBSZW5kZXJUeXBlPgot
Y29uc3QgU2hhcGUqIFNoYXBlSW5mbzxSZW5kZXJUeXBlPjo6Y29tcHV0ZWRTaGFwZSgpIGNvbnN0
Citjb25zdCBTaGFwZSYgU2hhcGVJbmZvPFJlbmRlclR5cGU+Ojpjb21wdXRlZFNoYXBlKCkgY29u
c3QKIHsKICAgICBpZiAoU2hhcGUqIHNoYXBlID0gbV9zaGFwZS5nZXQoKSkKLSAgICAgICAgcmV0
dXJuIHNoYXBlOworICAgICAgICByZXR1cm4gKnNoYXBlOwogCi0gICAgV3JpdGluZ01vZGUgd3Jp
dGluZ01vZGUgPSBtX3JlbmRlcmVyLT5zdHlsZSgpLndyaXRpbmdNb2RlKCk7Ci0gICAgTGVuZ3Ro
IG1hcmdpbiA9IG1fcmVuZGVyZXItPnN0eWxlKCkuc2hhcGVNYXJnaW4oKTsKLSAgICBMZW5ndGgg
cGFkZGluZyA9IG1fcmVuZGVyZXItPnN0eWxlKCkuc2hhcGVQYWRkaW5nKCk7Ci0gICAgZmxvYXQg
c2hhcGVJbWFnZVRocmVzaG9sZCA9IG1fcmVuZGVyZXItPnN0eWxlKCkuc2hhcGVJbWFnZVRocmVz
aG9sZCgpOworICAgIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlID0gbV9yZW5kZXJlci5zdHlsZSgp
LndyaXRpbmdNb2RlKCk7CisgICAgTGVuZ3RoIG1hcmdpbiA9IG1fcmVuZGVyZXIuc3R5bGUoKS5z
aGFwZU1hcmdpbigpOworICAgIExlbmd0aCBwYWRkaW5nID0gbV9yZW5kZXJlci5zdHlsZSgpLnNo
YXBlUGFkZGluZygpOworICAgIGZsb2F0IHNoYXBlSW1hZ2VUaHJlc2hvbGQgPSBtX3JlbmRlcmVy
LnN0eWxlKCkuc2hhcGVJbWFnZVRocmVzaG9sZCgpOwogICAgIGNvbnN0IFNoYXBlVmFsdWUqIHNo
YXBlVmFsdWUgPSB0aGlzLT5zaGFwZVZhbHVlKCk7CiAgICAgQVNTRVJUKHNoYXBlVmFsdWUpOwog
CkBAIC03OCw3ICs3OCw3IEBAIGNvbnN0IFNoYXBlKiBTaGFwZUluZm88UmVuZGVyVHlwZT46OmNv
bXAKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTaGFwZVZhbHVlOjpCb3g6IHsKICAgICAgICAg
QVNTRVJUKHNoYXBlVmFsdWUtPmJveCgpKTsKLSAgICAgICAgY29uc3QgUm91bmRlZFJlY3QmIHNo
YXBlUmVjdCA9IG1fcmVuZGVyZXItPnN0eWxlKCkuZ2V0Um91bmRlZEJvcmRlckZvcihMYXlvdXRS
ZWN0KExheW91dFBvaW50KCksIG1fc2hhcGVMb2dpY2FsU2l6ZSksICYobV9yZW5kZXJlci0+dmll
dygpKSk7CisgICAgICAgIGNvbnN0IFJvdW5kZWRSZWN0JiBzaGFwZVJlY3QgPSBtX3JlbmRlcmVy
LnN0eWxlKCkuZ2V0Um91bmRlZEJvcmRlckZvcihMYXlvdXRSZWN0KExheW91dFBvaW50KCksIG1f
c2hhcGVMb2dpY2FsU2l6ZSksICYobV9yZW5kZXJlci52aWV3KCkpKTsKICAgICAgICAgbV9zaGFw
ZSA9IFNoYXBlOjpjcmVhdGVTaGFwZShzaGFwZVJlY3QsIHdyaXRpbmdNb2RlLCBtYXJnaW4sIHBh
ZGRpbmcpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC04OCw3ICs4OCw3IEBAIGNvbnN0IFNo
YXBlKiBTaGFwZUluZm88UmVuZGVyVHlwZT46OmNvbXAKICAgICB9CiAKICAgICBBU1NFUlQobV9z
aGFwZSk7Ci0gICAgcmV0dXJuIG1fc2hhcGUuZ2V0KCk7CisgICAgcmV0dXJuICptX3NoYXBlOwog
fQogCiB0ZW1wbGF0ZTxjbGFzcyBSZW5kZXJUeXBlPgpAQCAtMTA5LDUgKzEwOSw2IEBAIFNlZ21l
bnRMaXN0IFNoYXBlSW5mbzxSZW5kZXJUeXBlPjo6Y29tcHUKIAogdGVtcGxhdGUgY2xhc3MgU2hh
cGVJbmZvPFJlbmRlckJsb2NrPjsKIHRlbXBsYXRlIGNsYXNzIFNoYXBlSW5mbzxSZW5kZXJCb3g+
OworCiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hh
cGVJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9T
aGFwZUluZm8uaAkocmV2aXNpb24gMTU5NzM5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3NoYXBlcy9TaGFwZUluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTggKzQ1LDE5IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIHRlbXBsYXRlPGNsYXNzIEtleVR5cGUsIGNsYXNzIEluZm9UeXBl
PgogY2xhc3MgTWFwcGVkSW5mbyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIEluZm9UeXBlKiBlbnN1
cmVJbmZvKGNvbnN0IEtleVR5cGUqIGtleSkKKyAgICBzdGF0aWMgSW5mb1R5cGUmIGVuc3VyZUlu
Zm8oY29uc3QgS2V5VHlwZSYga2V5KQogICAgIHsKICAgICAgICAgSW5mb01hcCYgaW5mb01hcCA9
IE1hcHBlZEluZm88S2V5VHlwZSwgSW5mb1R5cGU+OjppbmZvTWFwKCk7Ci0gICAgICAgIGlmIChJ
bmZvVHlwZSogaW5mbyA9IGluZm9NYXAuZ2V0KGtleSkpCi0gICAgICAgICAgICByZXR1cm4gaW5m
bzsKLSAgICAgICAgdHlwZW5hbWUgSW5mb01hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IGluZm9NYXAu
YWRkKGtleSwgSW5mb1R5cGU6OmNyZWF0ZUluZm8oa2V5KSk7Ci0gICAgICAgIHJldHVybiByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworICAgICAgICBpZiAoSW5mb1R5cGUqIGluZm8gPSBp
bmZvTWFwLmdldCgma2V5KSkKKyAgICAgICAgICAgIHJldHVybiAqaW5mbzsKKyAgICAgICAgdHlw
ZW5hbWUgSW5mb01hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IGluZm9NYXAuYWRkKCZrZXksIHN0ZDo6
bWFrZV91bmlxdWU8SW5mb1R5cGU+KGtleSkpOworICAgICAgICByZXR1cm4gKnJlc3VsdC5pdGVy
YXRvci0+dmFsdWU7CiAgICAgfQotICAgIHN0YXRpYyB2b2lkIHJlbW92ZUluZm8oY29uc3QgS2V5
VHlwZSoga2V5KSB7IGluZm9NYXAoKS5yZW1vdmUoa2V5KTsgfQotICAgIHN0YXRpYyBJbmZvVHlw
ZSogaW5mbyhjb25zdCBLZXlUeXBlKiBrZXkpIHsgcmV0dXJuIGluZm9NYXAoKS5nZXQoa2V5KTsg
fQorICAgIHN0YXRpYyB2b2lkIHJlbW92ZUluZm8oY29uc3QgS2V5VHlwZSYga2V5KSB7IGluZm9N
YXAoKS5yZW1vdmUoJmtleSk7IH0KKyAgICBzdGF0aWMgSW5mb1R5cGUqIGluZm8oY29uc3QgS2V5
VHlwZSYga2V5KSB7IHJldHVybiBpbmZvTWFwKCkuZ2V0KCZrZXkpOyB9CisKIHByaXZhdGU6Ci0g
ICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IEtleVR5cGUqLCBPd25QdHI8SW5mb1R5cGU+PiBJbmZv
TWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBLZXlUeXBlKiwgc3RkOjp1bmlxdWVfcHRy
PEluZm9UeXBlPj4gSW5mb01hcDsKICAgICBzdGF0aWMgSW5mb01hcCYgaW5mb01hcCgpCiAgICAg
ewogICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEluZm9NYXAsIHN0YXRpY0luZm9NYXAsICgp
KTsKQEAgLTc1LDIzICs3NiwyMyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChzaGFwZVZhbHVlKCkt
PnR5cGUoKSA9PSBTaGFwZVZhbHVlOjpCb3gpIHsKICAgICAgICAgICAgIHN3aXRjaCAoc2hhcGVW
YWx1ZSgpLT5ib3goKSkgewogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU1hcmdpbkJveDoKLSAg
ICAgICAgICAgICAgICBsb2dpY2FsSGVpZ2h0ICs9IG1fcmVuZGVyZXItPm1hcmdpbkxvZ2ljYWxI
ZWlnaHQoKTsKLSAgICAgICAgICAgICAgICBsb2dpY2FsV2lkdGggKz0gbV9yZW5kZXJlci0+bWFy
Z2luTG9naWNhbFdpZHRoKCk7CisgICAgICAgICAgICAgICAgbG9naWNhbEhlaWdodCArPSBtX3Jl
bmRlcmVyLm1hcmdpbkxvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBsb2dpY2FsV2lk
dGggKz0gbV9yZW5kZXJlci5tYXJnaW5Mb2dpY2FsV2lkdGgoKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVCb3JkZXJCb3g6CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlUGFkZGluZ0JveDoKLSAgICAgICAg
ICAgICAgICBsb2dpY2FsSGVpZ2h0IC09IG1fcmVuZGVyZXItPmJvcmRlckxvZ2ljYWxIZWlnaHQo
KTsKLSAgICAgICAgICAgICAgICBsb2dpY2FsV2lkdGggLT0gbV9yZW5kZXJlci0+Ym9yZGVyTG9n
aWNhbFdpZHRoKCk7CisgICAgICAgICAgICAgICAgbG9naWNhbEhlaWdodCAtPSBtX3JlbmRlcmVy
LmJvcmRlckxvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBsb2dpY2FsV2lkdGggLT0g
bV9yZW5kZXJlci5ib3JkZXJMb2dpY2FsV2lkdGgoKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgbG9naWNhbEhlaWdodCAtPSBt
X3JlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgpOwotICAgICAgICAgICAg
ICAgIGxvZ2ljYWxXaWR0aCAtPSBtX3JlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdp
ZHRoKCk7CisgICAgICAgICAgICAgICAgbG9naWNhbEhlaWdodCAtPSBtX3JlbmRlcmVyLmJvcmRl
ckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgbG9naWNhbFdpZHRo
IC09IG1fcmVuZGVyZXIuYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxXaWR0aCgpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKG1fcmVuZGVy
ZXItPnN0eWxlKCkuYm94U2l6aW5nKCkgPT0gQ09OVEVOVF9CT1gpIHsKLSAgICAgICAgICAgIGxv
Z2ljYWxIZWlnaHQgLT0gbV9yZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQo
KTsKLSAgICAgICAgICAgIGxvZ2ljYWxXaWR0aCAtPSBtX3JlbmRlcmVyLT5ib3JkZXJBbmRQYWRk
aW5nTG9naWNhbFdpZHRoKCk7CisgICAgICAgIH0gZWxzZSBpZiAobV9yZW5kZXJlci5zdHlsZSgp
LmJveFNpemluZygpID09IENPTlRFTlRfQk9YKSB7CisgICAgICAgICAgICBsb2dpY2FsSGVpZ2h0
IC09IG1fcmVuZGVyZXIuYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAg
ICAgIGxvZ2ljYWxXaWR0aCAtPSBtX3JlbmRlcmVyLmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lk
dGgoKTsKICAgICAgICAgfQogCiAgICAgICAgIExheW91dFNpemUgbmV3TG9naWNhbFNpemUobG9n
aWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KTsKQEAgLTExNCwxMyArMTE1LDEzIEBAIHB1YmxpYzoK
ICAgICBMYXlvdXRVbml0IGxvZ2ljYWxMaW5lQm90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9zaGFw
ZUxpbmVUb3AgKyBtX2xpbmVIZWlnaHQgKyBsb2dpY2FsVG9wT2Zmc2V0KCk7IH0KICAgICBMYXlv
dXRVbml0IGxvZ2ljYWxMaW5lQm90dG9tKExheW91dFVuaXQgbGluZUhlaWdodCkgY29uc3QgeyBy
ZXR1cm4gbV9zaGFwZUxpbmVUb3AgKyBsaW5lSGVpZ2h0ICsgbG9naWNhbFRvcE9mZnNldCgpOyB9
CiAKLSAgICBMYXlvdXRVbml0IHNoYXBlQ29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIChtX3JlbmRlcmVyLT5zdHlsZSgpLmJveFNpemluZygpID09IENPTlRFTlRf
Qk9YKSA/IChtX3NoYXBlTG9naWNhbFNpemUuaGVpZ2h0KCkgKyBtX3JlbmRlcmVyLT5ib3JkZXJB
bmRQYWRkaW5nTG9naWNhbEhlaWdodCgpKSA6IG1fc2hhcGVMb2dpY2FsU2l6ZS5oZWlnaHQoKTsg
fQorICAgIExheW91dFVuaXQgc2hhcGVDb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0KCkgY29u
c3QgeyByZXR1cm4gKG1fcmVuZGVyZXIuc3R5bGUoKS5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JP
WCkgPyAobV9zaGFwZUxvZ2ljYWxTaXplLmhlaWdodCgpICsgbV9yZW5kZXJlci5ib3JkZXJBbmRQ
YWRkaW5nTG9naWNhbEhlaWdodCgpKSA6IG1fc2hhcGVMb2dpY2FsU2l6ZS5oZWlnaHQoKTsgfQog
CiAgICAgdmlydHVhbCBib29sIGxpbmVPdmVybGFwc1NoYXBlQm91bmRzKCkgY29uc3QgPSAwOwog
CiAgICAgdm9pZCBkaXJ0eVNoYXBlU2l6ZSgpIHsgbV9zaGFwZS5jbGVhcigpOyB9CiAgICAgYm9v
bCBzaGFwZVNpemVEaXJ0eSgpIHsgcmV0dXJuICFtX3NoYXBlLmdldCgpOyB9Ci0gICAgY29uc3Qg
UmVuZGVyVHlwZSogb3duZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVyOyB9CisgICAgY29u
c3QgUmVuZGVyVHlwZSYgb3duZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVyOyB9CiAgICAg
TGF5b3V0U2l6ZSBzaGFwZVNpemUoKSBjb25zdCB7IHJldHVybiBtX3NoYXBlTG9naWNhbFNpemU7
IH0KIAogICAgIExheW91dFJlY3QgY29tcHV0ZWRTaGFwZVBoeXNpY2FsQm91bmRpbmdCb3goKSBj
b25zdApAQCAtMTI4LDkgKzEyOSw5IEBAIHB1YmxpYzoKICAgICAgICAgTGF5b3V0UmVjdCBwaHlz
aWNhbEJvdW5kaW5nQm94ID0gY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpOwogICAg
ICAgICBwaHlzaWNhbEJvdW5kaW5nQm94LnNldFgocGh5c2ljYWxCb3VuZGluZ0JveC54KCkgKyBs
b2dpY2FsTGVmdE9mZnNldCgpKTsKICAgICAgICAgcGh5c2ljYWxCb3VuZGluZ0JveC5zZXRZKHBo
eXNpY2FsQm91bmRpbmdCb3gueSgpICsgbG9naWNhbFRvcE9mZnNldCgpKTsKLSAgICAgICAgaWYg
KG1fcmVuZGVyZXItPnN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkKLSAgICAg
ICAgICAgIHBoeXNpY2FsQm91bmRpbmdCb3guc2V0WShtX3JlbmRlcmVyLT5sb2dpY2FsSGVpZ2h0
KCkgLSBwaHlzaWNhbEJvdW5kaW5nQm94Lm1heFkoKSk7Ci0gICAgICAgIGlmICghbV9yZW5kZXJl
ci0+c3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAgICAgICBpZiAobV9yZW5k
ZXJlci5zdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpCisgICAgICAgICAgICBw
aHlzaWNhbEJvdW5kaW5nQm94LnNldFkobV9yZW5kZXJlci5sb2dpY2FsSGVpZ2h0KCkgLSBwaHlz
aWNhbEJvdW5kaW5nQm94Lm1heFkoKSk7CisgICAgICAgIGlmICghbV9yZW5kZXJlci5zdHlsZSgp
LmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgICAgICBwaHlzaWNhbEJvdW5kaW5n
Qm94ID0gcGh5c2ljYWxCb3VuZGluZ0JveC50cmFuc3Bvc2VkUmVjdCgpOwogICAgICAgICByZXR1
cm4gcGh5c2ljYWxCb3VuZGluZ0JveDsKICAgICB9CkBAIC0xMzgsMjQgKzEzOSwyNyBAQCBwdWJs
aWM6CiAgICAgRmxvYXRQb2ludCBzaGFwZVRvUmVuZGVyZXJQb2ludChGbG9hdFBvaW50IHBvaW50
KSBjb25zdAogICAgIHsKICAgICAgICAgRmxvYXRQb2ludCByZXN1bHQgPSBGbG9hdFBvaW50KHBv
aW50LngoKSArIGxvZ2ljYWxMZWZ0T2Zmc2V0KCksIHBvaW50LnkoKSArIGxvZ2ljYWxUb3BPZmZz
ZXQoKSk7Ci0gICAgICAgIGlmIChtX3JlbmRlcmVyLT5zdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dy
aXRpbmdNb2RlKCkpCi0gICAgICAgICAgICByZXN1bHQuc2V0WShtX3JlbmRlcmVyLT5sb2dpY2Fs
SGVpZ2h0KCkgLSByZXN1bHQueSgpKTsKLSAgICAgICAgaWYgKCFtX3JlbmRlcmVyLT5zdHlsZSgp
LmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCisgICAgICAgIGlmIChtX3JlbmRlcmVyLnN0eWxl
KCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkKKyAgICAgICAgICAgIHJlc3VsdC5zZXRZ
KG1fcmVuZGVyZXIubG9naWNhbEhlaWdodCgpIC0gcmVzdWx0LnkoKSk7CisgICAgICAgIGlmICgh
bV9yZW5kZXJlci5zdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgICAg
ICByZXN1bHQgPSByZXN1bHQudHJhbnNwb3NlZFBvaW50KCk7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogCiAgICAgRmxvYXRTaXplIHNoYXBlVG9SZW5kZXJlclNpemUoRmxvYXRTaXpl
IHNpemUpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAoIW1fcmVuZGVyZXItPnN0eWxlKCkuaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICAgICAgaWYgKCFtX3JlbmRlcmVyLnN0eWxlKCku
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgICAgIHJldHVybiBzaXplLnRyYW5z
cG9zZWRTaXplKCk7CiAgICAgICAgIHJldHVybiBzaXplOwogICAgIH0KIAotICAgIGNvbnN0IFNo
YXBlKiBjb21wdXRlZFNoYXBlKCkgY29uc3Q7CisgICAgY29uc3QgU2hhcGUmIGNvbXB1dGVkU2hh
cGUoKSBjb25zdDsKIAogcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IFNoYXBlSW5mbyhjb25zdCBS
ZW5kZXJUeXBlKiByZW5kZXJlcik6IG1fcmVuZGVyZXIocmVuZGVyZXIpIHsgfQorICAgIGV4cGxp
Y2l0IFNoYXBlSW5mbyhjb25zdCBSZW5kZXJUeXBlJiByZW5kZXJlcikKKyAgICAgICAgOiBtX3Jl
bmRlcmVyKHJlbmRlcmVyKQorICAgIHsKKyAgICB9CiAKICAgICB2aXJ0dWFsIExheW91dFJlY3Qg
Y29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFs
IFNoYXBlVmFsdWUqIHNoYXBlVmFsdWUoKSBjb25zdCA9IDA7CkBAIC0xNjUsMzIgKzE2OSwzMiBA
QCBwcm90ZWN0ZWQ6CiAgICAgewogICAgICAgICBpZiAoc2hhcGVWYWx1ZSgpLT50eXBlKCkgPT0g
U2hhcGVWYWx1ZTo6Qm94KSB7CiAgICAgICAgICAgICBzd2l0Y2ggKHNoYXBlVmFsdWUoKS0+Ym94
KCkpIHsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVNYXJnaW5Cb3g6IHJldHVybiAtbV9yZW5k
ZXJlci0+bWFyZ2luQmVmb3JlKCk7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTWFyZ2luQm94
OiByZXR1cm4gLW1fcmVuZGVyZXIubWFyZ2luQmVmb3JlKCk7CiAgICAgICAgICAgICBjYXNlIENT
U1ZhbHVlQm9yZGVyQm94OiByZXR1cm4gTGF5b3V0VW5pdCgpOwotICAgICAgICAgICAgY2FzZSBD
U1NWYWx1ZVBhZGRpbmdCb3g6IHJldHVybiBtX3JlbmRlcmVyLT5ib3JkZXJCZWZvcmUoKTsKLSAg
ICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBtX3JlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nQmVm
b3JlKCk7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlUGFkZGluZ0JveDogcmV0dXJuIG1fcmVu
ZGVyZXIuYm9yZGVyQmVmb3JlKCk7CisgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gbV9yZW5k
ZXJlci5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIG1fcmVuZGVyZXItPnN0eWxlKCkuYm94U2l6aW5nKCkgPT0gQ09OVEVO
VF9CT1ggPyBtX3JlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCkgOiBMYXlvdXRVbml0
KCk7CisgICAgICAgIHJldHVybiBtX3JlbmRlcmVyLnN0eWxlKCkuYm94U2l6aW5nKCkgPT0gQ09O
VEVOVF9CT1ggPyBtX3JlbmRlcmVyLmJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKSA6IExheW91dFVu
aXQoKTsKICAgICB9CiAKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0T2Zmc2V0KCkgY29uc3QK
ICAgICB7CiAgICAgICAgIGlmIChzaGFwZVZhbHVlKCktPnR5cGUoKSA9PSBTaGFwZVZhbHVlOjpC
b3gpIHsKICAgICAgICAgICAgIHN3aXRjaCAoc2hhcGVWYWx1ZSgpLT5ib3goKSkgewotICAgICAg
ICAgICAgY2FzZSBDU1NWYWx1ZU1hcmdpbkJveDogcmV0dXJuIC1tX3JlbmRlcmVyLT5tYXJnaW5T
dGFydCgpOworICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU1hcmdpbkJveDogcmV0dXJuIC1tX3Jl
bmRlcmVyLm1hcmdpblN0YXJ0KCk7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlQm9yZGVyQm94
OiByZXR1cm4gTGF5b3V0VW5pdCgpOwotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVBhZGRpbmdC
b3g6IHJldHVybiBtX3JlbmRlcmVyLT5ib3JkZXJTdGFydCgpOwotICAgICAgICAgICAgZGVmYXVs
dDogcmV0dXJuIG1fcmVuZGVyZXItPmJvcmRlckFuZFBhZGRpbmdTdGFydCgpOworICAgICAgICAg
ICAgY2FzZSBDU1NWYWx1ZVBhZGRpbmdCb3g6IHJldHVybiBtX3JlbmRlcmVyLmJvcmRlclN0YXJ0
KCk7CisgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gbV9yZW5kZXJlci5ib3JkZXJBbmRQYWRk
aW5nU3RhcnQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1cm4gKG1f
cmVuZGVyZXItPnN0eWxlKCkuYm94U2l6aW5nKCkgPT0gQ09OVEVOVF9CT1ggJiYgIW1fcmVuZGVy
ZXItPmlzUmVuZGVyUmVnaW9uKCkpID8gbV9yZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ1N0YXJ0
KCkgOiBMYXlvdXRVbml0KCk7CisgICAgICAgIHJldHVybiAobV9yZW5kZXJlci5zdHlsZSgpLmJv
eFNpemluZygpID09IENPTlRFTlRfQk9YICYmICFtX3JlbmRlcmVyLmlzUmVuZGVyUmVnaW9uKCkp
ID8gbV9yZW5kZXJlci5ib3JkZXJBbmRQYWRkaW5nU3RhcnQoKSA6IExheW91dFVuaXQoKTsKICAg
ICB9CiAKICAgICBMYXlvdXRVbml0IG1fc2hhcGVMaW5lVG9wOwogICAgIExheW91dFVuaXQgbV9s
aW5lSGVpZ2h0OwogCi0gICAgY29uc3QgUmVuZGVyVHlwZSogbV9yZW5kZXJlcjsKKyAgICBjb25z
dCBSZW5kZXJUeXBlJiBtX3JlbmRlcmVyOwogCiBwcml2YXRlOgogICAgIG11dGFibGUgT3duUHRy
PFNoYXBlPiBtX3NoYXBlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9T
aGFwZUluc2lkZUluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zaGFwZXMvU2hhcGVJbnNpZGVJbmZvLmNwcAkocmV2aXNpb24gMTU5NzM5KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluc2lkZUluZm8uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw5ICs0Myw5IEBAIExpbmVTZWdtZW50UmFuZ2U6OkxpbmVTZWdtZW50UmFuZ2Uo
Y29uc3QKICAgICB7CiAgICAgfQogCi1ib29sIFNoYXBlSW5zaWRlSW5mbzo6aXNFbmFibGVkRm9y
KGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlcikKK2Jvb2wgU2hhcGVJbnNpZGVJbmZvOjppc0Vu
YWJsZWRGb3IoY29uc3QgUmVuZGVyQmxvY2smIHJlbmRlcmVyKQogewotICAgIFNoYXBlVmFsdWUq
IHNoYXBlVmFsdWUgPSByZW5kZXJlci0+c3R5bGUoKS5yZXNvbHZlZFNoYXBlSW5zaWRlKCk7Cisg
ICAgU2hhcGVWYWx1ZSogc2hhcGVWYWx1ZSA9IHJlbmRlcmVyLnN0eWxlKCkucmVzb2x2ZWRTaGFw
ZUluc2lkZSgpOwogICAgIGlmICghc2hhcGVWYWx1ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CkBAIC01Myw3ICs1Myw3IEBAIGJvb2wgU2hhcGVJbnNpZGVJbmZvOjppc0VuYWJsZWRGb3IoY29u
c3QKICAgICBjYXNlIFNoYXBlVmFsdWU6OlNoYXBlOgogICAgICAgICByZXR1cm4gc2hhcGVWYWx1
ZS0+c2hhcGUoKSAmJiBzaGFwZVZhbHVlLT5zaGFwZSgpLT50eXBlKCkgIT0gQmFzaWNTaGFwZTo6
QmFzaWNTaGFwZUluc2V0UmVjdGFuZ2xlVHlwZTsKICAgICBjYXNlIFNoYXBlVmFsdWU6OkltYWdl
OgotICAgICAgICByZXR1cm4gc2hhcGVWYWx1ZS0+aXNJbWFnZVZhbGlkKCkgJiYgY2hlY2tTaGFw
ZUltYWdlT3JpZ2luKHJlbmRlcmVyLT5kb2N1bWVudCgpLCAqKHNoYXBlVmFsdWUtPmltYWdlKCkt
PmNhY2hlZEltYWdlKCkpKTsKKyAgICAgICAgcmV0dXJuIHNoYXBlVmFsdWUtPmlzSW1hZ2VWYWxp
ZCgpICYmIGNoZWNrU2hhcGVJbWFnZU9yaWdpbihyZW5kZXJlci5kb2N1bWVudCgpLCAqKHNoYXBl
VmFsdWUtPmltYWdlKCktPmNhY2hlZEltYWdlKCkpKTsKICAgICBjYXNlIFNoYXBlVmFsdWU6OkJv
eDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNhc2UgU2hhcGVWYWx1ZTo6T3V0c2lkZToK
QEAgLTkxLDEyICs5MSwxMiBAQCBib29sIFNoYXBlSW5zaWRlSW5mbzo6dXBkYXRlU2VnbWVudHNG
b3JMCiAKIGJvb2wgU2hhcGVJbnNpZGVJbmZvOjphZGp1c3RMb2dpY2FsTGluZVRvcChmbG9hdCBt
aW5TZWdtZW50V2lkdGgpCiB7Ci0gICAgY29uc3QgU2hhcGUqIHNoYXBlID0gY29tcHV0ZWRTaGFw
ZSgpOwotICAgIGlmICghc2hhcGUgfHwgbV9saW5lSGVpZ2h0IDw9IDAgfHwgbG9naWNhbExpbmVU
b3AoKSA+IHNoYXBlTG9naWNhbEJvdHRvbSgpKQorICAgIGNvbnN0IFNoYXBlJiBzaGFwZSA9IGNv
bXB1dGVkU2hhcGUoKTsKKyAgICBpZiAobV9saW5lSGVpZ2h0IDw9IDAgfHwgbG9naWNhbExpbmVU
b3AoKSA+IHNoYXBlTG9naWNhbEJvdHRvbSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBMYXlvdXRVbml0IG5ld0xpbmVUb3A7Ci0gICAgaWYgKHNoYXBlLT5maXJzdEluY2x1ZGVkSW50
ZXJ2YWxMb2dpY2FsVG9wKG1fc2hhcGVMaW5lVG9wLCBMYXlvdXRTaXplKG1pblNlZ21lbnRXaWR0
aCwgbV9saW5lSGVpZ2h0KSwgbmV3TGluZVRvcCkpIHsKKyAgICBpZiAoc2hhcGUuZmlyc3RJbmNs
dWRlZEludGVydmFsTG9naWNhbFRvcChtX3NoYXBlTGluZVRvcCwgTGF5b3V0U2l6ZShtaW5TZWdt
ZW50V2lkdGgsIG1fbGluZUhlaWdodCksIG5ld0xpbmVUb3ApKSB7CiAgICAgICAgIGlmIChuZXdM
aW5lVG9wID4gbV9zaGFwZUxpbmVUb3ApIHsKICAgICAgICAgICAgIG1fc2hhcGVMaW5lVG9wID0g
bmV3TGluZVRvcDsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTA4LDE2ICsxMDgsMTYg
QEAgYm9vbCBTaGFwZUluc2lkZUluZm86OmFkanVzdExvZ2ljYWxMaW5lVAogCiBTaGFwZVZhbHVl
KiBTaGFwZUluc2lkZUluZm86OnNoYXBlVmFsdWUoKSBjb25zdAogewotICAgIHJldHVybiBtX3Jl
bmRlcmVyLT5zdHlsZSgpLnJlc29sdmVkU2hhcGVJbnNpZGUoKTsKKyAgICByZXR1cm4gbV9yZW5k
ZXJlci5zdHlsZSgpLnJlc29sdmVkU2hhcGVJbnNpZGUoKTsKIH0KIAogTGF5b3V0VW5pdCBTaGFw
ZUluc2lkZUluZm86OmNvbXB1dGVGaXJzdEZpdFBvc2l0aW9uRm9yRmxvYXQoY29uc3QgTGF5b3V0
U2l6ZSBmbG9hdFNpemUpIGNvbnN0CiB7Ci0gICAgaWYgKCFjb21wdXRlZFNoYXBlKCkgfHwgIWZs
b2F0U2l6ZS53aWR0aCgpIHx8IHNoYXBlTG9naWNhbEJvdHRvbSgpIDwgbG9naWNhbExpbmVUb3Ao
KSkKKyAgICBpZiAoIWZsb2F0U2l6ZS53aWR0aCgpIHx8IHNoYXBlTG9naWNhbEJvdHRvbSgpIDwg
bG9naWNhbExpbmVUb3AoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBMYXlvdXRVbml0IGZp
cnN0Rml0UG9zaXRpb24gPSAwOwotICAgIGlmIChjb21wdXRlZFNoYXBlKCktPmZpcnN0SW5jbHVk
ZWRJbnRlcnZhbExvZ2ljYWxUb3AobV9zaGFwZUxpbmVUb3AsIGZsb2F0U2l6ZSwgZmlyc3RGaXRQ
b3NpdGlvbikgJiYgKG1fc2hhcGVMaW5lVG9wIDw9IGZpcnN0Rml0UG9zaXRpb24pKQorICAgIGlm
IChjb21wdXRlZFNoYXBlKCkuZmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcChtX3NoYXBl
TGluZVRvcCwgZmxvYXRTaXplLCBmaXJzdEZpdFBvc2l0aW9uKSAmJiAobV9zaGFwZUxpbmVUb3Ag
PD0gZmlyc3RGaXRQb3NpdGlvbikpCiAgICAgICAgIHJldHVybiBmaXJzdEZpdFBvc2l0aW9uOwog
CiAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1No
YXBlSW5zaWRlSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
aGFwZXMvU2hhcGVJbnNpZGVJbmZvLmgJKHJldmlzaW9uIDE1OTczOSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnNpZGVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY1LDkgKzY1LDEzIEBAIHR5cGVkZWYgVmVjdG9yPExpbmVTZWdtZW50UmFuZ2U+IFNlZ21lbnQK
IAogY2xhc3MgU2hhcGVJbnNpZGVJbmZvIEZJTkFMIDogcHVibGljIFNoYXBlSW5mbzxSZW5kZXJC
bG9jaz4geyAKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxTaGFwZUluc2lkZUluZm8+
IGNyZWF0ZUluZm8oY29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyKSB7IHJldHVybiBhZG9wdFB0
cihuZXcgU2hhcGVJbnNpZGVJbmZvKHJlbmRlcmVyKSk7IH0KKyAgICBTaGFwZUluc2lkZUluZm8o
Y29uc3QgUmVuZGVyQmxvY2smIHJlbmRlcmVyKQorICAgICAgICA6IFNoYXBlSW5mbzxSZW5kZXJC
bG9jaz4ocmVuZGVyZXIpCisgICAgICAgICwgbV9uZWVkc0xheW91dChmYWxzZSkKKyAgICB7Cisg
ICAgfQogCi0gICAgc3RhdGljIGJvb2wgaXNFbmFibGVkRm9yKGNvbnN0IFJlbmRlckJsb2NrKiBy
ZW5kZXJlcik7CisgICAgc3RhdGljIGJvb2wgaXNFbmFibGVkRm9yKGNvbnN0IFJlbmRlckJsb2Nr
JiByZW5kZXJlcik7CiAKICAgICBib29sIHVwZGF0ZVNlZ21lbnRzRm9yTGluZShMYXlvdXRTaXpl
IGxpbmVPZmZzZXQsIExheW91dFVuaXQgbGluZUhlaWdodCk7CiAgICAgYm9vbCB1cGRhdGVTZWdt
ZW50c0ZvckxpbmUoTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVIZWlnaHQpOwpA
QCAtOTksMjMgKzEwMywxNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgbGluZU92ZXJs
YXBzU2hhcGVCb3VuZHMoKSBjb25zdCBPVkVSUklERQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNv
bXB1dGVkU2hhcGUoKS0+bGluZU92ZXJsYXBzU2hhcGVQYWRkaW5nQm91bmRzKG1fc2hhcGVMaW5l
VG9wLCBtX2xpbmVIZWlnaHQpOworICAgICAgICByZXR1cm4gY29tcHV0ZWRTaGFwZSgpLmxpbmVP
dmVybGFwc1NoYXBlUGFkZGluZ0JvdW5kcyhtX3NoYXBlTGluZVRvcCwgbV9saW5lSGVpZ2h0KTsK
ICAgICB9CiAKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIExheW91dFJlY3QgY29tcHV0ZWRTaGFw
ZUxvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGNvbXB1dGVkU2hh
cGUoKS0+c2hhcGVQYWRkaW5nTG9naWNhbEJvdW5kaW5nQm94KCk7IH0KK3ByaXZhdGU6CisgICAg
dmlydHVhbCBMYXlvdXRSZWN0IGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKSBjb25z
dCBPVkVSUklERSB7IHJldHVybiBjb21wdXRlZFNoYXBlKCkuc2hhcGVQYWRkaW5nTG9naWNhbEJv
dW5kaW5nQm94KCk7IH0KICAgICB2aXJ0dWFsIFNoYXBlVmFsdWUqIHNoYXBlVmFsdWUoKSBjb25z
dCBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0SW50ZXJ2YWxzKExheW91dFVuaXQgbGlu
ZVRvcCwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0LCBTZWdtZW50TGlzdCYgc2VnbWVudHMpIGNvbnN0
IE9WRVJSSURFCiAgICAgewotICAgICAgICByZXR1cm4gY29tcHV0ZWRTaGFwZSgpLT5nZXRJbmNs
dWRlZEludGVydmFscyhsaW5lVG9wLCBsaW5lSGVpZ2h0LCBzZWdtZW50cyk7CisgICAgICAgIHJl
dHVybiBjb21wdXRlZFNoYXBlKCkuZ2V0SW5jbHVkZWRJbnRlcnZhbHMobGluZVRvcCwgbGluZUhl
aWdodCwgc2VnbWVudHMpOwogICAgIH0KIAotcHJpdmF0ZToKLSAgICBTaGFwZUluc2lkZUluZm8o
Y29uc3QgUmVuZGVyQmxvY2sqIHJlbmRlcmVyKQotICAgIDogU2hhcGVJbmZvPFJlbmRlckJsb2Nr
PiAocmVuZGVyZXIpCi0gICAgLCBtX25lZWRzTGF5b3V0KGZhbHNlKQotICAgIHsgfQotCiAgICAg
U2VnbWVudFJhbmdlTGlzdCBtX3NlZ21lbnRSYW5nZXM7CiAgICAgYm9vbCBtX25lZWRzTGF5b3V0
OjE7CiAgICAgU2VnbWVudExpc3QgbV9zZWdtZW50czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmNwcAkocmV2aXNpb24g
MTU5NzM5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJ
bmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTcgKzM4LDE4IEBACiAjaW5jbHVkZSAiUmVu
ZGVyQm94LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLWJvb2wgU2hhcGVPdXRzaWRlSW5mbzo6
aXNFbmFibGVkRm9yKGNvbnN0IFJlbmRlckJveCogYm94KQorCitib29sIFNoYXBlT3V0c2lkZUlu
Zm86OmlzRW5hYmxlZEZvcihjb25zdCBSZW5kZXJCb3gmIGJveCkKIHsKLSAgICBTaGFwZVZhbHVl
KiBzaGFwZVZhbHVlID0gYm94LT5zdHlsZSgpLnNoYXBlT3V0c2lkZSgpOwotICAgIGlmICghYm94
LT5pc0Zsb2F0aW5nKCkgfHwgIXNoYXBlVmFsdWUpCisgICAgU2hhcGVWYWx1ZSogc2hhcGVWYWx1
ZSA9IGJveC5zdHlsZSgpLnNoYXBlT3V0c2lkZSgpOworICAgIGlmICghYm94LmlzRmxvYXRpbmco
KSB8fCAhc2hhcGVWYWx1ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgc3dpdGNoIChz
aGFwZVZhbHVlLT50eXBlKCkpIHsKICAgICBjYXNlIFNoYXBlVmFsdWU6OlNoYXBlOgogICAgICAg
ICByZXR1cm4gc2hhcGVWYWx1ZS0+c2hhcGUoKTsKICAgICBjYXNlIFNoYXBlVmFsdWU6OkltYWdl
OgotICAgICAgICByZXR1cm4gc2hhcGVWYWx1ZS0+aXNJbWFnZVZhbGlkKCkgJiYgY2hlY2tTaGFw
ZUltYWdlT3JpZ2luKGJveC0+ZG9jdW1lbnQoKSwgKihzaGFwZVZhbHVlLT5pbWFnZSgpLT5jYWNo
ZWRJbWFnZSgpKSk7CisgICAgICAgIHJldHVybiBzaGFwZVZhbHVlLT5pc0ltYWdlVmFsaWQoKSAm
JiBjaGVja1NoYXBlSW1hZ2VPcmlnaW4oYm94LmRvY3VtZW50KCksICooc2hhcGVWYWx1ZS0+aW1h
Z2UoKS0+Y2FjaGVkSW1hZ2UoKSkpOwogICAgIGNhc2UgU2hhcGVWYWx1ZTo6Qm94OgogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIFNoYXBlVmFsdWU6Ok91dHNpZGU6CkBAIC01OCw5ICs1
OSw5IEBAIGJvb2wgU2hhcGVPdXRzaWRlSW5mbzo6aXNFbmFibGVkRm9yKGNvbnMKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLXZvaWQgU2hhcGVPdXRzaWRlSW5mbzo6dXBkYXRlRGVsdGFzRm9yQ29u
dGFpbmluZ0Jsb2NrTGluZShjb25zdCBSZW5kZXJCbG9ja0Zsb3cqIGNvbnRhaW5pbmdCbG9jaywg
Y29uc3QgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0LCBMYXlvdXRVbml0IGxpbmVUb3As
IExheW91dFVuaXQgbGluZUhlaWdodCkKK3ZvaWQgU2hhcGVPdXRzaWRlSW5mbzo6dXBkYXRlRGVs
dGFzRm9yQ29udGFpbmluZ0Jsb2NrTGluZShjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGNvbnRhaW5p
bmdCbG9jaywgY29uc3QgRmxvYXRpbmdPYmplY3QmIGZsb2F0aW5nT2JqZWN0LCBMYXlvdXRVbml0
IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUhlaWdodCkKIHsKLSAgICBMYXlvdXRVbml0IHNoYXBl
VG9wID0gY29udGFpbmluZ0Jsb2NrLT5sb2dpY2FsVG9wRm9yRmxvYXQoZmxvYXRpbmdPYmplY3Qp
ICsgc3RkOjptYXgoTGF5b3V0VW5pdCgpLCBjb250YWluaW5nQmxvY2stPm1hcmdpbkJlZm9yZUZv
ckNoaWxkKCptX3JlbmRlcmVyKSk7CisgICAgTGF5b3V0VW5pdCBzaGFwZVRvcCA9IGNvbnRhaW5p
bmdCbG9jay5sb2dpY2FsVG9wRm9yRmxvYXQoJmZsb2F0aW5nT2JqZWN0KSArIHN0ZDo6bWF4KExh
eW91dFVuaXQoKSwgY29udGFpbmluZ0Jsb2NrLm1hcmdpbkJlZm9yZUZvckNoaWxkKG1fcmVuZGVy
ZXIpKTsKICAgICBMYXlvdXRVbml0IGZsb2F0UmVsYXRpdmVMaW5lVG9wID0gbGluZVRvcCAtIHNo
YXBlVG9wOwogCiAgICAgaWYgKHNoYXBlU2l6ZURpcnR5KCkgfHwgbV9saW5lVG9wICE9IGZsb2F0
UmVsYXRpdmVMaW5lVG9wIHx8IG1fbGluZUhlaWdodCAhPSBsaW5lSGVpZ2h0KSB7CkBAIC02OCwx
NSArNjksMTUgQEAgdm9pZCBTaGFwZU91dHNpZGVJbmZvOjp1cGRhdGVEZWx0YXNGb3JDbwogICAg
ICAgICBtX3NoYXBlTGluZVRvcCA9IGZsb2F0UmVsYXRpdmVMaW5lVG9wIC0gbG9naWNhbFRvcE9m
ZnNldCgpOwogICAgICAgICBtX2xpbmVIZWlnaHQgPSBsaW5lSGVpZ2h0OwogCi0gICAgICAgIExh
eW91dFVuaXQgZmxvYXRNYXJnaW5Cb3hXaWR0aCA9IGNvbnRhaW5pbmdCbG9jay0+bG9naWNhbFdp
ZHRoRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QpOworICAgICAgICBMYXlvdXRVbml0IGZsb2F0TWFy
Z2luQm94V2lkdGggPSBjb250YWluaW5nQmxvY2subG9naWNhbFdpZHRoRm9yRmxvYXQoJmZsb2F0
aW5nT2JqZWN0KTsKIAogICAgICAgICBpZiAobGluZU92ZXJsYXBzU2hhcGVCb3VuZHMoKSkgewog
ICAgICAgICAgICAgU2VnbWVudExpc3Qgc2VnbWVudHMgPSBjb21wdXRlU2VnbWVudHNGb3JMaW5l
KGZsb2F0UmVsYXRpdmVMaW5lVG9wLCBsaW5lSGVpZ2h0KTsKICAgICAgICAgICAgIGlmIChzZWdt
ZW50cy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHJhd0xlZnRNYXJnaW5C
b3hEZWx0YSA9IHNlZ21lbnRzLmZpcnN0KCkubG9naWNhbExlZnQgKyBjb250YWluaW5nQmxvY2st
Pm1hcmdpblN0YXJ0Rm9yQ2hpbGQoKm1fcmVuZGVyZXIpOworICAgICAgICAgICAgICAgIExheW91
dFVuaXQgcmF3TGVmdE1hcmdpbkJveERlbHRhID0gc2VnbWVudHMuZmlyc3QoKS5sb2dpY2FsTGVm
dCArIGNvbnRhaW5pbmdCbG9jay5tYXJnaW5TdGFydEZvckNoaWxkKG1fcmVuZGVyZXIpOwogICAg
ICAgICAgICAgICAgIG1fbGVmdE1hcmdpbkJveERlbHRhID0gY2xhbXBUbzxMYXlvdXRVbml0Pihy
YXdMZWZ0TWFyZ2luQm94RGVsdGEsIExheW91dFVuaXQoKSwgZmxvYXRNYXJnaW5Cb3hXaWR0aCk7
CiAKLSAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHJhd1JpZ2h0TWFyZ2luQm94RGVsdGEgPSBz
ZWdtZW50cy5sYXN0KCkubG9naWNhbFJpZ2h0IC0gY29udGFpbmluZ0Jsb2NrLT5sb2dpY2FsV2lk
dGhGb3JDaGlsZCgqbV9yZW5kZXJlcikgLSBjb250YWluaW5nQmxvY2stPm1hcmdpbkVuZEZvckNo
aWxkKCptX3JlbmRlcmVyKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHJhd1JpZ2h0TWFy
Z2luQm94RGVsdGEgPSBzZWdtZW50cy5sYXN0KCkubG9naWNhbFJpZ2h0IC0gY29udGFpbmluZ0Js
b2NrLmxvZ2ljYWxXaWR0aEZvckNoaWxkKG1fcmVuZGVyZXIpIC0gY29udGFpbmluZ0Jsb2NrLm1h
cmdpbkVuZEZvckNoaWxkKG1fcmVuZGVyZXIpOwogICAgICAgICAgICAgICAgIG1fcmlnaHRNYXJn
aW5Cb3hEZWx0YSA9IGNsYW1wVG88TGF5b3V0VW5pdD4ocmF3UmlnaHRNYXJnaW5Cb3hEZWx0YSwg
LWZsb2F0TWFyZ2luQm94V2lkdGgsIExheW91dFVuaXQoKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQpAQCAtOTYsOCArOTcsOSBAQCB2b2lkIFNoYXBlT3V0c2lkZUlu
Zm86OnVwZGF0ZURlbHRhc0ZvckNvCiAKIFNoYXBlVmFsdWUqIFNoYXBlT3V0c2lkZUluZm86OnNo
YXBlVmFsdWUoKSBjb25zdAogewotICAgIHJldHVybiBtX3JlbmRlcmVyLT5zdHlsZSgpLnNoYXBl
T3V0c2lkZSgpOworICAgIHJldHVybiBtX3JlbmRlcmVyLnN0eWxlKCkuc2hhcGVPdXRzaWRlKCk7
CiB9CiAKIH0KKwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVz
L1NoYXBlT3V0c2lkZUluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uaAkocmV2aXNpb24gMTU5NzM5KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDMwICs0MywzMSBAQCBjbGFzcyBGbG9hdGluZ09iamVjdDsKIAogY2xhc3MgU2hh
cGVPdXRzaWRlSW5mbyBGSU5BTCA6IHB1YmxpYyBTaGFwZUluZm88UmVuZGVyQm94PiwgcHVibGlj
IE1hcHBlZEluZm88UmVuZGVyQm94LCBTaGFwZU91dHNpZGVJbmZvPiB7CiBwdWJsaWM6CisgICAg
U2hhcGVPdXRzaWRlSW5mbyhjb25zdCBSZW5kZXJCb3gmIHJlbmRlcmVyKQorICAgICAgICA6IFNo
YXBlSW5mbzxSZW5kZXJCb3g+KHJlbmRlcmVyKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMg
Ym9vbCBpc0VuYWJsZWRGb3IoY29uc3QgUmVuZGVyQm94Jik7CisKICAgICBMYXlvdXRVbml0IGxl
ZnRNYXJnaW5Cb3hEZWx0YSgpIGNvbnN0IHsgcmV0dXJuIG1fbGVmdE1hcmdpbkJveERlbHRhOyB9
CiAgICAgTGF5b3V0VW5pdCByaWdodE1hcmdpbkJveERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9y
aWdodE1hcmdpbkJveERlbHRhOyB9CiAKLSAgICB2b2lkIHVwZGF0ZURlbHRhc0ZvckNvbnRhaW5p
bmdCbG9ja0xpbmUoY29uc3QgUmVuZGVyQmxvY2tGbG93KiwgY29uc3QgRmxvYXRpbmdPYmplY3Qq
LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUhlaWdodCk7Ci0KLSAgICBzdGF0
aWMgUGFzc093blB0cjxTaGFwZU91dHNpZGVJbmZvPiBjcmVhdGVJbmZvKGNvbnN0IFJlbmRlckJv
eCogcmVuZGVyZXIpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBTaGFwZU91dHNpZGVJbmZvKHJlbmRl
cmVyKSk7IH0KLSAgICBzdGF0aWMgYm9vbCBpc0VuYWJsZWRGb3IoY29uc3QgUmVuZGVyQm94Kik7
CisgICAgdm9pZCB1cGRhdGVEZWx0YXNGb3JDb250YWluaW5nQmxvY2tMaW5lKGNvbnN0IFJlbmRl
ckJsb2NrRmxvdyYsIGNvbnN0IEZsb2F0aW5nT2JqZWN0JiwgTGF5b3V0VW5pdCBsaW5lVG9wLCBM
YXlvdXRVbml0IGxpbmVIZWlnaHQpOwogCiAgICAgdmlydHVhbCBib29sIGxpbmVPdmVybGFwc1No
YXBlQm91bmRzKCkgY29uc3QgT1ZFUlJJREUKICAgICB7Ci0gICAgICAgIHJldHVybiBjb21wdXRl
ZFNoYXBlKCktPmxpbmVPdmVybGFwc1NoYXBlTWFyZ2luQm91bmRzKG1fc2hhcGVMaW5lVG9wLCBt
X2xpbmVIZWlnaHQpOworICAgICAgICByZXR1cm4gY29tcHV0ZWRTaGFwZSgpLmxpbmVPdmVybGFw
c1NoYXBlTWFyZ2luQm91bmRzKG1fc2hhcGVMaW5lVG9wLCBtX2xpbmVIZWlnaHQpOwogICAgIH0K
IAotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjb21wdXRlZFNoYXBlTG9naWNh
bEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gY29tcHV0ZWRTaGFwZSgpLT5z
aGFwZU1hcmdpbkxvZ2ljYWxCb3VuZGluZ0JveCgpOyB9Citwcml2YXRlOgorICAgIHZpcnR1YWwg
TGF5b3V0UmVjdCBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gY29tcHV0ZWRTaGFwZSgpLnNoYXBlTWFyZ2luTG9naWNhbEJvdW5kaW5nQm94
KCk7IH0KICAgICB2aXJ0dWFsIFNoYXBlVmFsdWUqIHNoYXBlVmFsdWUoKSBjb25zdCBPVkVSUklE
RTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0SW50ZXJ2YWxzKExheW91dFVuaXQgbGluZVRvcCwgTGF5
b3V0VW5pdCBsaW5lSGVpZ2h0LCBTZWdtZW50TGlzdCYgc2VnbWVudHMpIGNvbnN0IE9WRVJSSURF
CiAgICAgewotICAgICAgICByZXR1cm4gY29tcHV0ZWRTaGFwZSgpLT5nZXRFeGNsdWRlZEludGVy
dmFscyhsaW5lVG9wLCBsaW5lSGVpZ2h0LCBzZWdtZW50cyk7CisgICAgICAgIHJldHVybiBjb21w
dXRlZFNoYXBlKCkuZ2V0RXhjbHVkZWRJbnRlcnZhbHMobGluZVRvcCwgbGluZUhlaWdodCwgc2Vn
bWVudHMpOwogICAgIH0KIAotcHJpdmF0ZToKLSAgICBTaGFwZU91dHNpZGVJbmZvKGNvbnN0IFJl
bmRlckJveCogcmVuZGVyZXIpIDogU2hhcGVJbmZvPFJlbmRlckJveD4ocmVuZGVyZXIpIHsgfQot
CiAgICAgTGF5b3V0VW5pdCBtX2xlZnRNYXJnaW5Cb3hEZWx0YTsKICAgICBMYXlvdXRVbml0IG1f
cmlnaHRNYXJnaW5Cb3hEZWx0YTsKICAgICBMYXlvdXRVbml0IG1fbGluZVRvcDsK
</data>
<flag name="review"
          id="241067"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>