<?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>6909</bug_id>
          
          <creation_ts>2006-01-29 03:22:08 -0800</creation_ts>
          <short_desc>Replace QValueVector and QPtrVector with Vector</short_desc>
          <delta_ts>2019-02-06 09:03:48 -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>DOM</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</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="Maciej Stachowiak">mjs</reporter>
          <assigned_to name="Maciej Stachowiak">mjs</assigned_to>
          <cc>cdumez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>30490</commentid>
    <comment_count>0</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-01-29 03:22:08 -0800</bug_when>
    <thetext>QValueVector and QPtrVector should be removed and replaced with Vector throughout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>30491</commentid>
    <comment_count>1</comment_count>
      <attachid>6069</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-01-29 03:22:40 -0800</bug_when>
    <thetext>Created attachment 6069
vectorize</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>30527</commentid>
    <comment_count>2</comment_count>
      <attachid>6069</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-29 08:49:13 -0800</bug_when>
    <thetext>Comment on attachment 6069
vectorize

For the m_negZOrderList and m_posZOrderList, I noticed that the fetch of the cout went inside the loop. In general, is there a reason to use iterators to walk a vector? To me it seems easier to understand a loop that uses numeric indices.

Love the use of &quot;256&quot; in jobsToCancel. A nice optimization to have at our fingertips!

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503041</commentid>
    <comment_count>3</comment_count>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2019-02-06 09:03:48 -0800</bug_when>
    <thetext>Mass moving XML DOM bugs to the &quot;DOM&quot; Component.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6069</attachid>
            <date>2006-01-29 03:22:40 -0800</date>
            <delta_ts>2006-01-29 08:49:13 -0800</delta_ts>
            <desc>vectorize</desc>
            <filename>vectorization.patch.txt</filename>
            <type>text/plain</type>
            <size>63074</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2h0bWwvSFRNTENvbGxlY3Rpb25JbXBsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0
bWwvaHRtbC9IVE1MQ29sbGVjdGlvbkltcGwuaAkocmV2aXNpb24gMTI0NTIpCisrKyBraHRtbC9o
dG1sL0hUTUxDb2xsZWN0aW9uSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBA
CiAKICNpbmNsdWRlICJTaGFyZWQuaCIKICNpbmNsdWRlIDxreG1sY29yZS9IYXNoTWFwLmg+Cisj
aW5jbHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFz
cyBRUHRyVmVjdG9yOwogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFFWYWx1ZUxpc3Q7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTk0LDggKzk0LDggQEAgcHVibGljOgogICAgICAgICB1
bnNpZ25lZCBpbnQgcG9zaXRpb247CiAgICAgICAgIHVuc2lnbmVkIGludCBsZW5ndGg7CiAgICAg
ICAgIGludCBlbGVtZW50c0FycmF5UG9zaXRpb247Ci0gICAgICAgIEhhc2hNYXA8QXRvbWljU3Ry
aW5nSW1wbCosIFFQdHJWZWN0b3I8Tm9kZUltcGw+Kj4gaWRDYWNoZTsKLSAgICAgICAgSGFzaE1h
cDxBdG9taWNTdHJpbmdJbXBsKiwgUVB0clZlY3RvcjxOb2RlSW1wbD4qPiBuYW1lQ2FjaGU7Cisg
ICAgICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIFZlY3RvcjxOb2RlSW1wbCo+Kj4gaWRD
YWNoZTsKKyAgICAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgVmVjdG9yPE5vZGVJbXBs
Kj4qPiBuYW1lQ2FjaGU7CiAgICAgICAgIGJvb2wgaGFzbGVuZ3RoOwogICAgICAgICBib29sIGhh
c05hbWVDYWNoZTsKICAgICAgfTsKSW5kZXg6IGtodG1sL2h0bWwvSFRNTEZvcm1FbGVtZW50SW1w
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvaHRtbC9IVE1MRm9ybUVsZW1lbnRJbXBsLmNwcAko
cmV2aXNpb24gMTI0NTIpCisrKyBraHRtbC9odG1sL0hUTUxGb3JtRWxlbWVudEltcGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NSw5ICs2NSw5IEBAIEhUTUxGb3JtRWxlbWVudEltcGw6On5IVE1M
Rm9ybUVsZW1lbnRJbXAKIHsKICAgICBkZWxldGUgY29sbGVjdGlvbkluZm87CiAgICAgCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm1FbGVtZW50cy5jb3VudCgpOyArK2kpCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm1FbGVtZW50cy5zaXplKCk7ICsraSkKICAgICAg
ICAgZm9ybUVsZW1lbnRzW2ldLT5tX2Zvcm0gPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBpbWdFbGVtZW50cy5jb3VudCgpOyArK2kpCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGltZ0VsZW1lbnRzLnNpemUoKTsgKytpKQogICAgICAgICBpbWdFbGVtZW50c1tpXS0+bV9m
b3JtID0gMDsKIH0KIApAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50SW1w
bDo6cmVtb3ZlZEZyb21Eb2MKIGludCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpsZW5ndGgoKSBjb25z
dAogewogICAgIGludCBsZW4gPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3Jt
RWxlbWVudHMuY291bnQoKTsgKytpKQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3Jt
RWxlbWVudHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGlmIChmb3JtRWxlbWVudHNbaV0tPmlzRW51
bWVyYXRhYmxlKCkpCiAgICAgICAgICAgICArK2xlbjsKIApAQCAtMTIzLDcgKzEyMyw3IEBAIGlu
dCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpsZW5ndGgoKSBjb25zdAogdm9pZCBIVE1MRm9ybUVsZW1l
bnRJbXBsOjpzdWJtaXRDbGljaygpCiB7CiAgICAgYm9vbCBzdWJtaXRGb3VuZCA9IGZhbHNlOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtRWxlbWVudHMuY291bnQoKTsgKytpKSB7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm1FbGVtZW50cy5zaXplKCk7ICsraSkg
ewogICAgICAgICBpZiAoZm9ybUVsZW1lbnRzW2ldLT5oYXNMb2NhbE5hbWUoaW5wdXRUYWcpKSB7
CiAgICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50SW1wbCAqZWxlbWVudCA9IHN0YXRpY19jYXN0
PEhUTUxJbnB1dEVsZW1lbnRJbXBsICo+KGZvcm1FbGVtZW50c1tpXSk7CiAgICAgICAgICAgICBp
ZiAoZWxlbWVudC0+aXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkgJiYgZWxlbWVudC0+cmVuZGVy
ZXIoKSkgewpAQCAtMjEyLDcgKzIxMiw3IEBAIGJvb2wgSFRNTEZvcm1FbGVtZW50SW1wbDo6Zm9y
bURhdGEoRm9ybUQKICAgICAgICAgY29kZWMgPSBRVGV4dENvZGVjOjpjb2RlY0ZvckxvY2FsZSgp
OwogCiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybUVsZW1lbnRzLmNvdW50KCk7
ICsraSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtRWxlbWVudHMuc2l6ZSgp
OyArK2kpIHsKICAgICAgICAgSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqIGN1cnJlbnQgPSBm
b3JtRWxlbWVudHNbaV07CiAgICAgICAgIEZvcm1EYXRhTGlzdCBsc3QoY29kZWMpOwogCkBAIC0z
NTIsNyArMzUyLDcgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpzdWJtaXQoIGJvb2wgYQog
ICAgIGJvb2wgbmVlZEJ1dHRvbkFjdGl2YXRpb24gPSBhY3RpdmF0ZVN1Ym1pdEJ1dHRvbjsgLy8g
ZG8gd2UgbmVlZCB0byBhY3RpdmF0ZSBhIHN1Ym1pdCBidXR0b24/CiAgICAgCiAgICAgZnJhbWUt
PmNsZWFyUmVjb3JkZWRGb3JtVmFsdWVzKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGZvcm1FbGVtZW50cy5jb3VudCgpOyArK2kpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZm9ybUVsZW1lbnRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEhUTUxHZW5lcmljRm9ybUVs
ZW1lbnRJbXBsKiBjdXJyZW50ID0gZm9ybUVsZW1lbnRzW2ldOwogICAgICAgICAvLyBPdXIgYXBw
IG5lZWRzIHRvIGdldCBmb3JtIHZhbHVlcyBmb3IgcGFzc3dvcmQgZmllbGRzIGZvciBkb2luZyBw
YXNzd29yZCBhdXRvY29tcGxldGUsCiAgICAgICAgIC8vIHNvIHdlIGFyZSBtb3JlIGxlbmllbnQg
aW4gcHVzaGluZyB2YWx1ZXMsIGFuZCBsZXQgdGhlIGFwcCBkZWNpZGUgd2hhdCB0byBzYXZlIHdo
ZW4uCkBAIC00MTksNyArNDE5LDcgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpyZXNldCgg
ICkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBmb3JtRWxlbWVudHMuY291bnQoKTsgKytpKQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBmb3JtRWxlbWVudHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGZvcm1FbGVtZW50c1tpXS0+cmVz
ZXQoKTsKIAogICAgIG1faW5yZXNldCA9IGZhbHNlOwpAQCAtNDcyLDM2ICs0NzIsMjUgQEAgdm9p
ZCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dAogICAgICAgICBIVE1MRWxlbWVu
dEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBU
PiBzdGF0aWMgdm9pZCBpbnNlcnRJbnRvVmVjdG9yKFFQdHJWZWN0b3I8VD4gJnZlYywgdW5zaWdu
ZWQgcG9zLCBUKiBpdGVtKQordGVtcGxhdGU8Y2xhc3MgVCwgc2l6ZV90IGk+IHN0YXRpYyB2b2lk
IGluc2VydEludG9WZWN0b3IoVmVjdG9yPFQqLCBpPiYgdmVjLCB1bnNpZ25lZCBwb3MsIFQqIGl0
ZW0pCiB7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IHZlYy5zaXplKCk7Ci0gICAgdW5zaWduZWQgY291
bnQgPSB2ZWMuY291bnQoKTsKLSAgICBhc3NlcnQocG9zIDw9IGNvdW50KTsKLSAgICBpZiAoc2l6
ZSA9PSBjb3VudCkKLSAgICAgICAgdmVjLnJlc2l6ZShzaXplID09IDAgPyA4IDogc2l6ZSAqIDMg
LyAyKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb3VudDsgaSA+IHBvczsgLS1pKQotICAgICAg
ICB2ZWMuaW5zZXJ0KGksIHZlY1tpIC0gMV0pOyAgICAKLSAgICB2ZWMuaW5zZXJ0KHBvcywgaXRl
bSk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+IHN0YXRpYyB2b2lkIGFwcGVuZFRvVmVjdG9yKFFQ
dHJWZWN0b3I8VD4gJnZlYywgVCAqaXRlbSkKLXsKLSAgICB1bnNpZ25lZCBzaXplID0gdmVjLnNp
emUoKTsKLSAgICB1bnNpZ25lZCBjb3VudCA9IHZlYy5jb3VudCgpOwotICAgIGlmIChzaXplID09
IGNvdW50KQotICAgICAgICB2ZWMucmVzaXplKHNpemUgPT0gMCA/IDggOiBzaXplICogMyAvIDIp
OwotICAgIHZlYy5pbnNlcnQoY291bnQsIGl0ZW0pOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBUPiBz
dGF0aWMgdm9pZCByZW1vdmVGcm9tVmVjdG9yKFFQdHJWZWN0b3I8VD4gJnZlYywgVCAqaXRlbSkK
LXsKLSAgICBpbnQgcG9zID0gdmVjLmZpbmRSZWYoaXRlbSk7Ci0gICAgaWYgKHBvcyA8IDApCi0g
ICAgICAgIHJldHVybjsKLSAgICB1bnNpZ25lZCBjb3VudCA9IHZlYy5jb3VudCgpOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IHBvczsgaSA8IGNvdW50IC0gMTsgKytpKQotICAgICAgICB2ZWMuaW5z
ZXJ0KGksIHZlY1tpICsgMV0pOwotICAgIHZlYy5yZW1vdmUoY291bnQgLSAxKTsKKyAgICB2ZWMu
cmVzaXplKHZlYy5zaXplKCkgKyAxKTsKKyAgICB0eXBlbmFtZSBWZWN0b3I8VCosIGk+OjppdGVy
YXRvciBpdDsKKyAgICBmb3IgKGl0ID0gJnZlYy5sYXN0KCk7IGl0ICE9IHZlYy5iZWdpbigpICsg
cG9zOyAtLWl0KQorICAgICAgICAqaXQgPSBpdFstMV07CisgICAgKml0ID0gaXRlbTsKK30KKwor
dGVtcGxhdGU8Y2xhc3MgVCwgc2l6ZV90IGk+IHN0YXRpYyB2b2lkIHJlbW92ZUZyb21WZWN0b3Io
VmVjdG9yPFQqLCBpPiAmIHZlYywgVCogaXRlbSkKK3sKKyAgICBmb3IgKHR5cGVuYW1lIFZlY3Rv
cjxUKiwgaT46Oml0ZXJhdG9yIGl0ID0gdmVjLmJlZ2luKCk7IGl0ICE9IHZlYy5lbmQoKTsgKytp
dCkgeworICAgICAgICBpZiAoKml0ID09IGl0ZW0pIHsKKyAgICAgICAgICAgIGZvciAodHlwZW5h
bWUgVmVjdG9yPFQqLCBpPjo6aXRlcmF0b3IgaXQyID0gaXQ7IGl0MiAhPSAmdmVjLmxhc3QoKTsg
KytpdDIpCisgICAgICAgICAgICAgICAgKml0MiA9IGl0MlsxXTsKKyAgICAgICAgICAgIHZlYy5y
ZW1vdmVMYXN0KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CiB9CiAK
IHVuc2lnbmVkIEhUTUxGb3JtRWxlbWVudEltcGw6OmZvcm1FbGVtZW50SW5kZXgoSFRNTEdlbmVy
aWNGb3JtRWxlbWVudEltcGwgKmUpCkBAIC01MjEsNyArNTEwLDcgQEAgdW5zaWduZWQgSFRNTEZv
cm1FbGVtZW50SW1wbDo6Zm9ybUVsZW1lbgogICAgICAgICAgICAgICAgICsraTsKICAgICAgICAg
fQogICAgIH0KLSAgICByZXR1cm4gZm9ybUVsZW1lbnRzLmNvdW50KCk7CisgICAgcmV0dXJuIGZv
cm1FbGVtZW50cy5zaXplKCk7CiB9CiAKIHZvaWQgSFRNTEZvcm1FbGVtZW50SW1wbDo6cmVnaXN0
ZXJGb3JtRWxlbWVudChIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCAqZSkKQEAgLTU1NCw3ICs1
NDMsNyBAQCBib29sIEhUTUxGb3JtRWxlbWVudEltcGw6OmlzVVJMQXR0cmlidXRlCiAKIHZvaWQg
SFRNTEZvcm1FbGVtZW50SW1wbDo6cmVnaXN0ZXJJbWdFbGVtZW50KEhUTUxJbWFnZUVsZW1lbnRJ
bXBsICplKQogewotICAgIGFwcGVuZFRvVmVjdG9yKGltZ0VsZW1lbnRzLCBlKTsKKyAgICBpbWdF
bGVtZW50cy5hcHBlbmQoZSk7CiB9CiAKIHZvaWQgSFRNTEZvcm1FbGVtZW50SW1wbDo6cmVtb3Zl
SW1nRWxlbWVudChIVE1MSW1hZ2VFbGVtZW50SW1wbCAqZSkKSW5kZXg6IGtodG1sL2h0bWwvSFRN
TEZvcm1Db2xsZWN0aW9uSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvaHRtbC9IVE1MRm9y
bUNvbGxlY3Rpb25JbXBsLmNwcAkocmV2aXNpb24gMTI0NTIpCisrKyBraHRtbC9odG1sL0hUTUxG
b3JtQ29sbGVjdGlvbkltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAj
aW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50SW1wbC5oIgogI2luY2x1ZGUgImh0bWxfaW1hZ2VpbXBs
LmgiCiAjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCi0jaW5jbHVkZSA8cXB0cnZlY3Rvci5oPgorI2lu
Y2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM2
LDIyICszNiwxMiBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogLy8gc2luY2UgdGhlIGNv
bGxlY3Rpb25zIGFyZSB0byBiZSAibGl2ZSIsIHdlIGhhdmUgdG8gZG8gdGhlCiAvLyBjYWxjdWxh
dGlvbiBldmVyeSB0aW1lIGlmIGFueXRoaW5nIGhhcyBjaGFuZ2VkCiAKLXRlbXBsYXRlPGNsYXNz
IFQ+IHN0YXRpYyB2b2lkIGFwcGVuZFRvVmVjdG9yKFFQdHJWZWN0b3I8VD4gKnZlYywgVCAqaXRl
bSkKLXsKLSAgICB1bnNpZ25lZCBzaXplID0gdmVjLT5zaXplKCk7Ci0gICAgdW5zaWduZWQgY291
bnQgPSB2ZWMtPmNvdW50KCk7Ci0gICAgaWYgKHNpemUgPT0gY291bnQpCi0gICAgICAgIHZlYy0+
cmVzaXplKHNpemUgPT0gMCA/IDggOiAoaW50KShzaXplICogMS41KSk7Ci0gICAgdmVjLT5pbnNl
cnQoY291bnQsIGl0ZW0pOwotfQotCiBIVE1MRm9ybUNvbGxlY3Rpb25JbXBsOjpIVE1MRm9ybUNv
bGxlY3Rpb25JbXBsKE5vZGVJbXBsKiBfYmFzZSkKICAgICA6IEhUTUxDb2xsZWN0aW9uSW1wbChf
YmFzZSwgMCkKIHsKICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtQmFzZSA9IHN0YXRpY19j
YXN0PEhUTUxGb3JtRWxlbWVudEltcGwqPihtX2Jhc2UuZ2V0KCkpOwotICAgIGlmICghZm9ybUJh
c2UtPmNvbGxlY3Rpb25JbmZvKSB7CisgICAgaWYgKCFmb3JtQmFzZS0+Y29sbGVjdGlvbkluZm8p
CiAgICAgICAgIGZvcm1CYXNlLT5jb2xsZWN0aW9uSW5mbyA9IG5ldyBDb2xsZWN0aW9uSW5mbygp
OwotICAgIH0KICAgICBpbmZvID0gZm9ybUJhc2UtPmNvbGxlY3Rpb25JbmZvOwogfQogCkBAIC02
MSwzNiArNTEsMjkgQEAgSFRNTEZvcm1Db2xsZWN0aW9uSW1wbDo6fkhUTUxGb3JtQ29sbGVjdAog
CiB1bnNpZ25lZCBIVE1MRm9ybUNvbGxlY3Rpb25JbXBsOjpjYWxjTGVuZ3RoKCkgY29uc3QKIHsK
LSAgICBRUHRyVmVjdG9yPEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsPiAmbCA9IHN0YXRpY19j
YXN0PEhUTUxGb3JtRWxlbWVudEltcGwqPihtX2Jhc2UuZ2V0KCkpLT5mb3JtRWxlbWVudHM7Ci0K
LSAgICBpbnQgbGVuID0gMDsKLSAgICBmb3IgKCB1bnNpZ25lZCBpID0gMDsgaSA8IGwuY291bnQo
KTsgaSsrICkKLSAgICAgICAgaWYgKCBsLmF0KCBpICktPmlzRW51bWVyYXRhYmxlKCkgKQotICAg
ICAgICAgICAgKytsZW47Ci0KLSAgICByZXR1cm4gbGVuOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxIVE1MRm9ybUVsZW1lbnRJbXBsKj4obV9iYXNlLmdldCgpKS0+bGVuZ3RoKCk7CiB9CiAKIE5v
ZGVJbXBsICpIVE1MRm9ybUNvbGxlY3Rpb25JbXBsOjppdGVtKHVuc2lnbmVkIGluZGV4KSBjb25z
dAogewogICAgIHJlc2V0Q29sbGVjdGlvbkluZm8oKTsKIAotICAgIGlmIChpbmZvLT5jdXJyZW50
ICYmIGluZm8tPnBvc2l0aW9uID09IGluZGV4KSB7CisgICAgaWYgKGluZm8tPmN1cnJlbnQgJiYg
aW5mby0+cG9zaXRpb24gPT0gaW5kZXgpCiAgICAgICAgIHJldHVybiBpbmZvLT5jdXJyZW50Owot
ICAgIH0KLSAgICBpZiAoaW5mby0+aGFzbGVuZ3RoICYmIGluZm8tPmxlbmd0aCA8PSBpbmRleCkg
eworCisgICAgaWYgKGluZm8tPmhhc2xlbmd0aCAmJiBpbmZvLT5sZW5ndGggPD0gaW5kZXgpCiAg
ICAgICAgIHJldHVybiAwOwotICAgIH0KKwogICAgIGlmICghaW5mby0+Y3VycmVudCB8fCBpbmZv
LT5wb3NpdGlvbiA+IGluZGV4KSB7CiAgICAgICAgIGluZm8tPmN1cnJlbnQgPSAwOwogICAgICAg
ICBpbmZvLT5wb3NpdGlvbiA9IDA7CiAgICAgICAgIGluZm8tPmVsZW1lbnRzQXJyYXlQb3NpdGlv
biA9IDA7CiAgICAgfQogCi0gICAgUVB0clZlY3RvcjxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1w
bD4gJmwgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsKj4obV9iYXNlLmdldCgpKS0+
Zm9ybUVsZW1lbnRzOworICAgIFZlY3RvcjxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCo+JiBs
ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCo+KG1fYmFzZS5nZXQoKSktPmZvcm1F
bGVtZW50czsKICAgICB1bnNpZ25lZCBjdXJyZW50SW5kZXggPSBpbmZvLT5wb3NpdGlvbjsKICAg
ICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbmZvLT5lbGVtZW50c0FycmF5UG9zaXRpb247IGkg
PCBsLmNvdW50KCk7IGkrKykgeworICAgIGZvciAodW5zaWduZWQgaSA9IGluZm8tPmVsZW1lbnRz
QXJyYXlQb3NpdGlvbjsgaSA8IGwuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgaWYgKGxbaV0tPmlz
RW51bWVyYXRhYmxlKCkgKSB7CiAgICAgICAgICAgICBpZiAoaW5kZXggPT0gY3VycmVudEluZGV4
KSB7CiAgICAgICAgICAgICAgICAgaW5mby0+cG9zaXRpb24gPSBpbmRleDsKQEAgLTExOSw3ICsx
MDIsNyBAQCBOb2RlSW1wbCogSFRNTEZvcm1Db2xsZWN0aW9uSW1wbDo6Z2V0TmFtCiAgICAgICAg
IGJvb2wgZm91bmRJbnB1dEVsZW1lbnRzID0gZmFsc2U7CiAgICAgICAgIGlmIChiYXNlRWxlbWVu
dC0+aGFzTG9jYWxOYW1lKGZvcm1UYWcpKSB7CiAgICAgICAgICAgICBIVE1MRm9ybUVsZW1lbnRJ
bXBsKiBmID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCo+KGJhc2VFbGVtZW50KTsK
LSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmLT5mb3JtRWxlbWVudHMuY291
bnQoKTsgKytpKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZi0+Zm9y
bUVsZW1lbnRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgSFRNTEdlbmVyaWNGb3Jt
RWxlbWVudEltcGwqIGUgPSBmLT5mb3JtRWxlbWVudHNbaV07CiAgICAgICAgICAgICAgICAgaWYg
KGUtPmlzRW51bWVyYXRhYmxlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgYm9vbCBmb3VuZDsK
QEAgLTE0MCw3ICsxMjMsNyBAQCBOb2RlSW1wbCogSFRNTEZvcm1Db2xsZWN0aW9uSW1wbDo6Z2V0
TmFtCiAgICAgICAgIGlmICghZm91bmRJbnB1dEVsZW1lbnRzKSB7CiAgICAgICAgICAgICBIVE1M
Rm9ybUVsZW1lbnRJbXBsKiBmID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCo+KGJh
c2VFbGVtZW50KTsKIAotICAgICAgICAgICAgZm9yKHVuc2lnbmVkIGkgPSAwOyBpIDwgZi0+aW1n
RWxlbWVudHMuY291bnQoKTsgKytpKQorICAgICAgICAgICAgZm9yKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZi0+aW1nRWxlbWVudHMuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgSFRNTEltYWdlRWxlbWVudEltcGwqIGUgPSBmLT5pbWdFbGVtZW50c1tpXTsKICAgICAg
ICAgICAgICAgICBib29sIGZvdW5kOwpAQCAtMjM2LDU1ICsyMTksNTUgQEAgdm9pZCBIVE1MRm9y
bUNvbGxlY3Rpb25JbXBsOjp1cGRhdGVOYW1lQwogICAgIEhUTUxFbGVtZW50SW1wbCogYmFzZUVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihtX2Jhc2UuZ2V0KCkpOwogCiAg
ICAgSFRNTEZvcm1FbGVtZW50SW1wbCogZiA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudElt
cGwqPihiYXNlRWxlbWVudCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGYtPmZvcm1F
bGVtZW50cy5jb3VudCgpOyArK2kpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZi0+
Zm9ybUVsZW1lbnRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEhUTUxHZW5lcmljRm9ybUVsZW1l
bnRJbXBsKiBlID0gZi0+Zm9ybUVsZW1lbnRzW2ldOwogICAgICAgICBpZiAoZS0+aXNFbnVtZXJh
dGFibGUoKSkgewogICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZEF0dHJWYWwgPSBl
LT5nZXRBdHRyaWJ1dGUoaWRBdHRyKTsKICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZUF0dHJWYWwgPSBlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpOwogICAgICAgICAgICAgaWYg
KCFpZEF0dHJWYWwuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gYWRkIHRvIGlkIGNh
Y2hlCi0gICAgICAgICAgICAgICAgUVB0clZlY3RvcjxOb2RlSW1wbD4gKmlkVmVjdG9yID0gaW5m
by0+aWRDYWNoZS5nZXQoaWRBdHRyVmFsLmltcGwoKSk7CisgICAgICAgICAgICAgICAgVmVjdG9y
PE5vZGVJbXBsKj4qIGlkVmVjdG9yID0gaW5mby0+aWRDYWNoZS5nZXQoaWRBdHRyVmFsLmltcGwo
KSk7CiAgICAgICAgICAgICAgICAgaWYgKCFpZFZlY3RvcikgewotICAgICAgICAgICAgICAgICAg
ICBpZFZlY3RvciA9IG5ldyBRUHRyVmVjdG9yPE5vZGVJbXBsPjsKKyAgICAgICAgICAgICAgICAg
ICAgaWRWZWN0b3IgPSBuZXcgVmVjdG9yPE5vZGVJbXBsKj47CiAgICAgICAgICAgICAgICAgICAg
IGluZm8tPmlkQ2FjaGUuYWRkKGlkQXR0clZhbC5pbXBsKCksIGlkVmVjdG9yKTsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYXBwZW5kVG9WZWN0b3IoaWRWZWN0b3IsIHN0YXRp
Y19jYXN0PE5vZGVJbXBsICo+KGUpKTsKKyAgICAgICAgICAgICAgICBpZFZlY3Rvci0+YXBwZW5k
KGUpOwogICAgICAgICAgICAgICAgIGZvdW5kSW5wdXRFbGVtZW50cy5hZGQoaWRBdHRyVmFsLmlt
cGwoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIW5hbWVBdHRyVmFsLmlzRW1w
dHkoKSAmJiBpZEF0dHJWYWwgIT0gbmFtZUF0dHJWYWwpIHsKICAgICAgICAgICAgICAgICAvLyBh
ZGQgdG8gbmFtZSBjYWNoZQotICAgICAgICAgICAgICAgIFFQdHJWZWN0b3I8Tm9kZUltcGw+ICpu
YW1lVmVjdG9yID0gaW5mby0+bmFtZUNhY2hlLmdldChuYW1lQXR0clZhbC5pbXBsKCkpOworICAg
ICAgICAgICAgICAgIFZlY3RvcjxOb2RlSW1wbCo+KiBuYW1lVmVjdG9yID0gaW5mby0+bmFtZUNh
Y2hlLmdldChuYW1lQXR0clZhbC5pbXBsKCkpOwogICAgICAgICAgICAgICAgIGlmICghbmFtZVZl
Y3RvcikgewotICAgICAgICAgICAgICAgICAgICBuYW1lVmVjdG9yID0gbmV3IFFQdHJWZWN0b3I8
Tm9kZUltcGw+OworICAgICAgICAgICAgICAgICAgICBuYW1lVmVjdG9yID0gbmV3IFZlY3RvcjxO
b2RlSW1wbCo+OwogICAgICAgICAgICAgICAgICAgICBpbmZvLT5uYW1lQ2FjaGUuYWRkKG5hbWVB
dHRyVmFsLmltcGwoKSwgbmFtZVZlY3Rvcik7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGFwcGVuZFRvVmVjdG9yKG5hbWVWZWN0b3IsIHN0YXRpY19jYXN0PE5vZGVJbXBsICo+
KGUpKTsKKyAgICAgICAgICAgICAgICBuYW1lVmVjdG9yLT5hcHBlbmQoZSk7CiAgICAgICAgICAg
ICAgICAgZm91bmRJbnB1dEVsZW1lbnRzLmFkZChuYW1lQXR0clZhbC5pbXBsKCkpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGYtPmltZ0VsZW1lbnRzLmNvdW50KCk7ICsraSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBmLT5pbWdFbGVtZW50cy5zaXplKCk7ICsraSkgewogICAgICAgICBIVE1MSW1hZ2VFbGVt
ZW50SW1wbCogZSA9IGYtPmltZ0VsZW1lbnRzW2ldOwogICAgICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGlkQXR0clZhbCA9IGUtPmdldEF0dHJpYnV0ZShpZEF0dHIpOwogICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWVBdHRyVmFsID0gZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKICAg
ICAgICAgaWYgKCFpZEF0dHJWYWwuaXNFbXB0eSgpICYmICFmb3VuZElucHV0RWxlbWVudHMuY29u
dGFpbnMoaWRBdHRyVmFsLmltcGwoKSkpIHsKICAgICAgICAgICAgIC8vIGFkZCB0byBpZCBjYWNo
ZQotICAgICAgICAgICAgUVB0clZlY3RvcjxOb2RlSW1wbD4gKmlkVmVjdG9yID0gaW5mby0+aWRD
YWNoZS5nZXQoaWRBdHRyVmFsLmltcGwoKSk7CisgICAgICAgICAgICBWZWN0b3I8Tm9kZUltcGwq
PiogaWRWZWN0b3IgPSBpbmZvLT5pZENhY2hlLmdldChpZEF0dHJWYWwuaW1wbCgpKTsKICAgICAg
ICAgICAgIGlmICghaWRWZWN0b3IpIHsKLSAgICAgICAgICAgICAgICBpZFZlY3RvciA9IG5ldyBR
UHRyVmVjdG9yPE5vZGVJbXBsPjsKKyAgICAgICAgICAgICAgICBpZFZlY3RvciA9IG5ldyBWZWN0
b3I8Tm9kZUltcGwqPjsKICAgICAgICAgICAgICAgICBpbmZvLT5pZENhY2hlLmFkZChpZEF0dHJW
YWwuaW1wbCgpLCBpZFZlY3Rvcik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhcHBlbmRU
b1ZlY3RvcihpZFZlY3Rvciwgc3RhdGljX2Nhc3Q8Tm9kZUltcGwgKj4oZSkpOworICAgICAgICAg
ICAgaWRWZWN0b3ItPmFwcGVuZChlKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIW5hbWVBdHRy
VmFsLmlzRW1wdHkoKSAmJiBpZEF0dHJWYWwgIT0gbmFtZUF0dHJWYWwgJiYgIWZvdW5kSW5wdXRF
bGVtZW50cy5jb250YWlucyhuYW1lQXR0clZhbC5pbXBsKCkpKSB7CiAgICAgICAgICAgICAvLyBh
ZGQgdG8gbmFtZSBjYWNoZQotICAgICAgICAgICAgUVB0clZlY3RvcjxOb2RlSW1wbD4gKm5hbWVW
ZWN0b3IgPSBpbmZvLT5uYW1lQ2FjaGUuZ2V0KG5hbWVBdHRyVmFsLmltcGwoKSk7CisgICAgICAg
ICAgICBWZWN0b3I8Tm9kZUltcGwqPiogbmFtZVZlY3RvciA9IGluZm8tPm5hbWVDYWNoZS5nZXQo
bmFtZUF0dHJWYWwuaW1wbCgpKTsKICAgICAgICAgICAgIGlmICghbmFtZVZlY3RvcikgewotICAg
ICAgICAgICAgICAgIG5hbWVWZWN0b3IgPSBuZXcgUVB0clZlY3RvcjxOb2RlSW1wbD47CisgICAg
ICAgICAgICAgICAgbmFtZVZlY3RvciA9IG5ldyBWZWN0b3I8Tm9kZUltcGwqPjsKICAgICAgICAg
ICAgICAgICBpbmZvLT5uYW1lQ2FjaGUuYWRkKG5hbWVBdHRyVmFsLmltcGwoKSwgbmFtZVZlY3Rv
cik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhcHBlbmRUb1ZlY3RvcihuYW1lVmVjdG9y
LCBzdGF0aWNfY2FzdDxOb2RlSW1wbCAqPihlKSk7CisgICAgICAgICAgICBuYW1lVmVjdG9yLT5h
cHBlbmQoZSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IGtodG1sL2h0bWwvSFRNTEZvcm1F
bGVtZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2h0bWwvSFRNTEZvcm1FbGVtZW50SW1w
bC5oCShyZXZpc2lvbiAxMjQ1MikKKysrIGtodG1sL2h0bWwvSFRNTEZvcm1FbGVtZW50SW1wbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw3IEBACiAKICNpbmNsdWRlICJIVE1MRWxlbWVu
dEltcGwuaCIKICNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbkltcGwuaCIgCi0KLSNpbmNsdWRlIDxx
cHRydmVjdG9yLmg+CisjaW5jbHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBr
aHRtbCB7CiAgICAgY2xhc3MgRm9ybURhdGE7CkBAIC0xMDUsOCArMTA0LDggQEAgcHVibGljOgog
CiAgICAgSFRNTENvbGxlY3Rpb25JbXBsOjpDb2xsZWN0aW9uSW5mbyAqY29sbGVjdGlvbkluZm87
CiAKLSAgICBRUHRyVmVjdG9yPEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsPiBmb3JtRWxlbWVu
dHM7Ci0gICAgUVB0clZlY3RvcjxIVE1MSW1hZ2VFbGVtZW50SW1wbD4gaW1nRWxlbWVudHM7Cisg
ICAgVmVjdG9yPEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4gZm9ybUVsZW1lbnRzOworICAg
IFZlY3RvcjxIVE1MSW1hZ2VFbGVtZW50SW1wbCo+IGltZ0VsZW1lbnRzOwogICAgIERPTVN0cmlu
ZyBtX3VybDsKICAgICBET01TdHJpbmcgbV90YXJnZXQ7CiAgICAgRE9NU3RyaW5nIG1fZW5jdHlw
ZTsKSW5kZXg6IGtodG1sL2h0bWwvSFRNTENvbGxlY3Rpb25JbXBsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBraHRtbC9odG1sL0hUTUxDb2xsZWN0aW9uSW1wbC5jcHAJKHJldmlzaW9uIDEyNDUyKQorKysg
a2h0bWwvaHRtbC9IVE1MQ29sbGVjdGlvbkltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3
ICsyNSw3IEBACiAjaW5jbHVkZSAiSFRNTENvbGxlY3Rpb25JbXBsLmgiCiAjaW5jbHVkZSAiaHRt
bF9kb2N1bWVudGltcGwuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudEltcGwuaCIKLSNpbmNsdWRl
IDxxcHRydmVjdG9yLmg+CisjaW5jbHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+CiAjaW5jbHVkZSAi
aHRtbG5hbWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMyMCwxNSArMzIwLDYgQEAg
Tm9kZUltcGwgKkhUTUxDb2xsZWN0aW9uSW1wbDo6bmFtZWRJdGVtKAogICAgIHJldHVybiBpbmZv
LT5jdXJyZW50OwogfQogCi10ZW1wbGF0ZTxjbGFzcyBUPiBzdGF0aWMgdm9pZCBhcHBlbmRUb1Zl
Y3RvcihRUHRyVmVjdG9yPFQ+ICp2ZWMsIFQgKml0ZW0pCi17Ci0gICAgdW5zaWduZWQgc2l6ZSA9
IHZlYy0+c2l6ZSgpOwotICAgIHVuc2lnbmVkIGNvdW50ID0gdmVjLT5jb3VudCgpOwotICAgIGlm
IChzaXplID09IGNvdW50KQotICAgICAgICB2ZWMtPnJlc2l6ZShzaXplID09IDAgPyA4IDogKGlu
dCkoc2l6ZSAqIDEuNSkpOwotICAgIHZlYy0+aW5zZXJ0KGNvdW50LCBpdGVtKTsKLX0KLQogdm9p
ZCBIVE1MQ29sbGVjdGlvbkltcGw6OnVwZGF0ZU5hbWVDYWNoZSgpIGNvbnN0CiB7CiAgICAgaWYg
KGluZm8tPmhhc05hbWVDYWNoZSkKQEAgLTM0MiwxMiArMzMzLDEyIEBAIHZvaWQgSFRNTENvbGxl
Y3Rpb25JbXBsOjp1cGRhdGVOYW1lQ2FjaGUKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lQXR0clZhbCA9IGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0cik7CiAgICAgICAgIGlmICghaWRB
dHRyVmFsLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgLy8gYWRkIHRvIGlkIGNhY2hlCi0gICAg
ICAgICAgICBRUHRyVmVjdG9yPE5vZGVJbXBsPiAqaWRWZWN0b3IgPSBpbmZvLT5pZENhY2hlLmdl
dChpZEF0dHJWYWwuaW1wbCgpKTsKKyAgICAgICAgICAgIFZlY3RvcjxOb2RlSW1wbCo+KiBpZFZl
Y3RvciA9IGluZm8tPmlkQ2FjaGUuZ2V0KGlkQXR0clZhbC5pbXBsKCkpOwogICAgICAgICAgICAg
aWYgKCFpZFZlY3RvcikgewotICAgICAgICAgICAgICAgIGlkVmVjdG9yID0gbmV3IFFQdHJWZWN0
b3I8Tm9kZUltcGw+OworICAgICAgICAgICAgICAgIGlkVmVjdG9yID0gbmV3IFZlY3RvcjxOb2Rl
SW1wbCo+OwogICAgICAgICAgICAgICAgIGluZm8tPmlkQ2FjaGUuYWRkKGlkQXR0clZhbC5pbXBs
KCksIGlkVmVjdG9yKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFwcGVuZFRvVmVjdG9y
KGlkVmVjdG9yLCBuKTsKKyAgICAgICAgICAgIGlkVmVjdG9yLT5hcHBlbmQobik7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKCFuYW1lQXR0clZhbC5pc0VtcHR5KCkgJiYgaWRBdHRyVmFsICE9IG5h
bWVBdHRyVmFsCiAgICAgICAgICAgICAmJiAodHlwZSAhPSBET0NfQUxMIHx8IApAQCAtMzU1LDEy
ICszNDYsMTIgQEAgdm9pZCBIVE1MQ29sbGVjdGlvbkltcGw6OnVwZGF0ZU5hbWVDYWNoZQogICAg
ICAgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoYXBwbGV0VGFnKSB8fCBlLT5oYXNMb2NhbE5h
bWUob2JqZWN0VGFnKSB8fAogICAgICAgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoZW1iZWRU
YWcpKSkpIHsKICAgICAgICAgICAgIC8vIGFkZCB0byBuYW1lIGNhY2hlCi0gICAgICAgICAgICBR
UHRyVmVjdG9yPE5vZGVJbXBsPiAqbmFtZVZlY3RvciA9IGluZm8tPm5hbWVDYWNoZS5nZXQobmFt
ZUF0dHJWYWwuaW1wbCgpKTsKKyAgICAgICAgICAgIFZlY3RvcjxOb2RlSW1wbCo+KiBuYW1lVmVj
dG9yID0gaW5mby0+bmFtZUNhY2hlLmdldChuYW1lQXR0clZhbC5pbXBsKCkpOwogICAgICAgICAg
ICAgaWYgKCFuYW1lVmVjdG9yKSB7Ci0gICAgICAgICAgICAgICAgbmFtZVZlY3RvciA9IG5ldyBR
UHRyVmVjdG9yPE5vZGVJbXBsPjsKKyAgICAgICAgICAgICAgICBuYW1lVmVjdG9yID0gbmV3IFZl
Y3RvcjxOb2RlSW1wbCo+OwogICAgICAgICAgICAgICAgIGluZm8tPm5hbWVDYWNoZS5hZGQobmFt
ZUF0dHJWYWwuaW1wbCgpLCBuYW1lVmVjdG9yKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGFwcGVuZFRvVmVjdG9yKG5hbWVWZWN0b3IsIG4pOworICAgICAgICAgICAgbmFtZVZlY3Rvci0+
YXBwZW5kKG4pOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zNzcsMTYgKzM2OCwxNCBAQCBRVmFs
dWVMaXN0PCBSZWZQdHI8Tm9kZUltcGw+ID4gSFRNTENvbGxlCiAgICAgcmVzZXRDb2xsZWN0aW9u
SW5mbygpOwogICAgIHVwZGF0ZU5hbWVDYWNoZSgpOwogICAgIAotICAgIFFQdHJWZWN0b3I8Tm9k
ZUltcGw+ICppZFJlc3VsdHMgPSBpbmZvLT5pZENhY2hlLmdldChuYW1lLmltcGwoKSk7Ci0gICAg
UVB0clZlY3RvcjxOb2RlSW1wbD4gKm5hbWVSZXN1bHRzID0gaW5mby0+bmFtZUNhY2hlLmdldChu
YW1lLmltcGwoKSk7CisgICAgVmVjdG9yPE5vZGVJbXBsKj4qIGlkUmVzdWx0cyA9IGluZm8tPmlk
Q2FjaGUuZ2V0KG5hbWUuaW1wbCgpKTsKKyAgICBWZWN0b3I8Tm9kZUltcGwqPiogbmFtZVJlc3Vs
dHMgPSBpbmZvLT5uYW1lQ2FjaGUuZ2V0KG5hbWUuaW1wbCgpKTsKICAgICAKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpZFJlc3VsdHMgJiYgaSA8IGlkUmVzdWx0cy0+Y291bnQoKTsgKytpKSB7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaWRSZXN1bHRzICYmIGkgPCBpZFJlc3VsdHMtPnNp
emUoKTsgKytpKQogICAgICAgICByZXN1bHQuYXBwZW5kKFJlZlB0cjxOb2RlSW1wbD4oaWRSZXN1
bHRzLT5hdChpKSkpOwotICAgIH0KIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IG5hbWVSZXN1
bHRzICYmIGkgPCBuYW1lUmVzdWx0cy0+Y291bnQoKTsgKytpKSB7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgbmFtZVJlc3VsdHMgJiYgaSA8IG5hbWVSZXN1bHRzLT5zaXplKCk7ICsraSkKICAg
ICAgICAgcmVzdWx0LmFwcGVuZChSZWZQdHI8Tm9kZUltcGw+KG5hbWVSZXN1bHRzLT5hdChpKSkp
OwotICAgIH0KIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiByZW5kZXJpbmcvcmVuZGVy
X2xheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL3JlbmRlcl9sYXllci5oCShyZXZpc2lv
biAxMjQ1MikKKysrIHJlbmRlcmluZy9yZW5kZXJfbGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDcsMTEgKzQ3LDExIEBACiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJJbnRSZWN0Lmgi
CiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+CiAKICNp
bmNsdWRlICJyZW5kZXJfb2JqZWN0LmgiCiAKIGNsYXNzIFFTY3JvbGxCYXI7Ci10ZW1wbGF0ZSA8
Y2xhc3MgVD4gY2xhc3MgUVB0clZlY3RvcjsKIAogbmFtZXNwYWNlIGtodG1sIHsKICAgICBjbGFz
cyBSZW5kZXJTdHlsZTsKQEAgLTI3OCw4ICsyNzgsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRp
cnR5Wk9yZGVyTGlzdHMoKTsKICAgICB2b2lkIHVwZGF0ZVpPcmRlckxpc3RzKCk7Ci0gICAgUVB0
clZlY3RvcjxSZW5kZXJMYXllcj4qIHBvc1pPcmRlckxpc3QoKSBjb25zdCB7IHJldHVybiBtX3Bv
c1pPcmRlckxpc3Q7IH0KLSAgICBRUHRyVmVjdG9yPFJlbmRlckxheWVyPiogbmVnWk9yZGVyTGlz
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbmVnWk9yZGVyTGlzdDsgfQorICAgIFZlY3RvcjxSZW5kZXJM
YXllcio+KiBwb3NaT3JkZXJMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9wb3NaT3JkZXJMaXN0OyB9
CisgICAgVmVjdG9yPFJlbmRlckxheWVyKj4qIG5lZ1pPcmRlckxpc3QoKSBjb25zdCB7IHJldHVy
biBtX25lZ1pPcmRlckxpc3Q7IH0KICAgICAKICAgICAvLyBHZXRzIHRoZSBuZWFyZXN0IGVuY2xv
c2luZyBwb3NpdGlvbmVkIGFuY2VzdG9yIGxheWVyIChhbHNvIGluY2x1ZGVzCiAgICAgLy8gdGhl
IDxodG1sPiBsYXllciBhbmQgdGhlIHJvb3QgbGF5ZXIpLgpAQCAtMzMyLDcgKzMzMiw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBzZXRGaXJzdENoaWxkKFJlbmRlckxheWVyKiBmaXJzdCkgeyBtX2Zp
cnN0ID0gZmlyc3Q7IH0KICAgICB2b2lkIHNldExhc3RDaGlsZChSZW5kZXJMYXllciogbGFzdCkg
eyBtX2xhc3QgPSBsYXN0OyB9CiAKLSAgICB2b2lkIGNvbGxlY3RMYXllcnMoUVB0clZlY3RvcjxS
ZW5kZXJMYXllcj4qJiwgUVB0clZlY3RvcjxSZW5kZXJMYXllcj4qJik7CisgICAgdm9pZCBjb2xs
ZWN0TGF5ZXJzKFZlY3RvcjxSZW5kZXJMYXllcio+KiYsIFZlY3RvcjxSZW5kZXJMYXllcio+KiYp
OwogCiAgICAgdm9pZCBwYWludExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFFQYWludGVy
ICpwLCBjb25zdCBJbnRSZWN0JiBwYWludERpcnR5UmVjdCwgCiAgICAgICAgICAgICAgICAgICAg
IGJvb2wgaGF2ZVRyYW5zcGFyZW5jeSwgYm9vbCBzZWxlY3Rpb25Pbmx5LCBSZW5kZXJPYmplY3Qg
KnBhaW50aW5nUm9vdCk7CkBAIC0zODYsOCArMzg2LDggQEAgcHJvdGVjdGVkOiAgIAogICAgIC8v
IGRlc2NlbmRhbnQgbGF5ZXJzIHdpdGhpbiB0aGUgc3RhY2tpbmcgY29udGV4dCB0aGF0IGhhdmUg
ei1pbmRpY2VzIG9mIDAgb3IgZ3JlYXRlcgogICAgIC8vIChhdXRvIHdpbGwgY291bnQgYXMgMCku
ICBtX25lZ1pPcmRlckxpc3QgaG9sZHMgZGVzY2VuZGFudHMgd2l0aGluIG91ciBzdGFja2luZyBj
b250ZXh0IHdpdGggbmVnYXRpdmUKICAgICAvLyB6LWluZGljZXMuCi0gICAgUVB0clZlY3RvcjxS
ZW5kZXJMYXllcj4qIG1fcG9zWk9yZGVyTGlzdDsKLSAgICBRUHRyVmVjdG9yPFJlbmRlckxheWVy
PiogbV9uZWdaT3JkZXJMaXN0OworICAgIFZlY3RvcjxSZW5kZXJMYXllcio+KiBtX3Bvc1pPcmRl
ckxpc3Q7CisgICAgVmVjdG9yPFJlbmRlckxheWVyKj4qIG1fbmVnWk9yZGVyTGlzdDsKICAgICAK
ICAgICBDbGlwUmVjdHMqIG1fY2xpcFJlY3RzOyAgICAgIC8vIENhY2hlZCBjbGlwIHJlY3RzIHVz
ZWQgd2hlbiBwYWludGluZyBhbmQgaGl0IHRlc3RpbmcuCiAKSW5kZXg6IHJlbmRlcmluZy9yZW5k
ZXJfbGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9yZW5kZXJfbGF5ZXIuY3BwCShy
ZXZpc2lvbiAxMjQ1MikKKysrIHJlbmRlcmluZy9yZW5kZXJfbGF5ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MSw3ICs2MSw3IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgPHFzY3JvbGxiYXIuaD4K
LSNpbmNsdWRlIDxxcHRydmVjdG9yLmg+CisjaW5jbHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+CiAK
IC8vIFRoZXNlIG1hdGNoIHRoZSBudW1iZXJzIHdlIHVzZSBvdmVyIGluIFdlYktpdCAoV2ViRnJh
bWVWaWV3Lm0pLgogI2RlZmluZSBMSU5FX1NURVAgICA0MApAQCAtMTA1NiwxMyArMTA1Niw5IEBA
IFJlbmRlckxheWVyOjpwYWludExheWVyKFJlbmRlckxheWVyKiByb28KICAgICB9CiAKICAgICAv
LyBOb3cgd2FsayB0aGUgc29ydGVkIGxpc3Qgb2YgY2hpbGRyZW4gd2l0aCBuZWdhdGl2ZSB6LWlu
ZGljZXMuCi0gICAgaWYgKG1fbmVnWk9yZGVyTGlzdCkgewotICAgICAgICB1aW50IGNvdW50ID0g
bV9uZWdaT3JkZXJMaXN0LT5jb3VudCgpOwotICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBSZW5kZXJMYXllciogY2hpbGQgPSBtX25lZ1pPcmRl
ckxpc3QtPmF0KGkpOwotICAgICAgICAgICAgY2hpbGQtPnBhaW50TGF5ZXIocm9vdExheWVyLCBw
LCBwYWludERpcnR5UmVjdCwgaGF2ZVRyYW5zcGFyZW5jeSwgc2VsZWN0aW9uT25seSwgcGFpbnRp
bmdSb290KTsKLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAobV9uZWdaT3JkZXJMaXN0KQorICAg
ICAgICBmb3IgKFZlY3RvcjxSZW5kZXJMYXllcio+OjppdGVyYXRvciBpdCA9IG1fbmVnWk9yZGVy
TGlzdC0+YmVnaW4oKTsgaXQgIT0gbV9uZWdaT3JkZXJMaXN0LT5lbmQoKTsgKytpdCkKKyAgICAg
ICAgICAgIGl0WzBdLT5wYWludExheWVyKHJvb3RMYXllciwgcCwgcGFpbnREaXJ0eVJlY3QsIGhh
dmVUcmFuc3BhcmVuY3ksIHNlbGVjdGlvbk9ubHksIHBhaW50aW5nUm9vdCk7CiAgICAgCiAgICAg
Ly8gTm93IGVzdGFibGlzaCB0aGUgYXBwcm9wcmlhdGUgY2xpcCBhbmQgcGFpbnQgb3VyIGNoaWxk
IFJlbmRlck9iamVjdHMuCiAgICAgaWYgKHNob3VsZFBhaW50ICYmICFjbGlwUmVjdFRvQXBwbHku
aXNFbXB0eSgpKSB7CkBAIC0xMDk2LDEzICsxMDkyLDkgQEAgUmVuZGVyTGF5ZXI6OnBhaW50TGF5
ZXIoUmVuZGVyTGF5ZXIqIHJvbwogICAgIH0KICAgICAKICAgICAvLyBOb3cgd2FsayB0aGUgc29y
dGVkIGxpc3Qgb2YgY2hpbGRyZW4gd2l0aCBwb3NpdGl2ZSB6LWluZGljZXMuCi0gICAgaWYgKG1f
cG9zWk9yZGVyTGlzdCkgewotICAgICAgICB1aW50IGNvdW50ID0gbV9wb3NaT3JkZXJMaXN0LT5j
b3VudCgpOwotICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAg
ICAgICAgICBSZW5kZXJMYXllciogY2hpbGQgPSBtX3Bvc1pPcmRlckxpc3QtPmF0KGkpOwotICAg
ICAgICAgICAgY2hpbGQtPnBhaW50TGF5ZXIocm9vdExheWVyLCBwLCBwYWludERpcnR5UmVjdCwg
aGF2ZVRyYW5zcGFyZW5jeSwgc2VsZWN0aW9uT25seSwgcGFpbnRpbmdSb290KTsKLSAgICAgICAg
fQotICAgIH0KKyAgICBpZiAobV9wb3NaT3JkZXJMaXN0KQorICAgICAgICBmb3IgKFZlY3RvcjxS
ZW5kZXJMYXllcio+OjppdGVyYXRvciBpdCA9IG1fcG9zWk9yZGVyTGlzdC0+YmVnaW4oKTsgaXQg
IT0gbV9wb3NaT3JkZXJMaXN0LT5lbmQoKTsgKytpdCkKKyAgICAgICAgICAgIGl0WzBdLT5wYWlu
dExheWVyKHJvb3RMYXllciwgcCwgcGFpbnREaXJ0eVJlY3QsIGhhdmVUcmFuc3BhcmVuY3ksIHNl
bGVjdGlvbk9ubHksIHBhaW50aW5nUm9vdCk7CiAgICAgCiAgICAgLy8gRW5kIG91ciB0cmFuc3Bh
cmVuY3kgbGF5ZXIKICAgICBpZiAoaXNUcmFuc3BhcmVudCgpICYmIG1fdXNlZFRyYW5zcGFyZW5j
eSkgewpAQCAtMTE1NywxMCArMTE0OSw4IEBAIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUmVu
ZGVyTGF5ZXIqIHIKICAgICAvLyBCZWdpbiBieSB3YWxraW5nIG91ciBsaXN0IG9mIHBvc2l0aXZl
IGxheWVycyBmcm9tIGhpZ2hlc3Qgei1pbmRleCBkb3duIHRvIHRoZSBsb3dlc3QKICAgICAvLyB6
LWluZGV4LgogICAgIGlmIChtX3Bvc1pPcmRlckxpc3QpIHsKLSAgICAgICAgdWludCBjb3VudCA9
IG1fcG9zWk9yZGVyTGlzdC0+Y291bnQoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IGNvdW50LTE7
IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgICAgICBSZW5kZXJMYXllciogY2hpbGQgPSBtX3Bvc1pP
cmRlckxpc3QtPmF0KGkpOwotICAgICAgICAgICAgaW5zaWRlTGF5ZXIgPSBjaGlsZC0+aGl0VGVz
dExheWVyKHJvb3RMYXllciwgaW5mbywgeE1vdXNlUG9zLCB5TW91c2VQb3MsIGhpdFRlc3RSZWN0
KTsKKyAgICAgICAgZm9yIChWZWN0b3I8UmVuZGVyTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSAmbV9w
b3NaT3JkZXJMaXN0LT5sYXN0KCk7IGl0ID49IG1fcG9zWk9yZGVyTGlzdC0+YmVnaW4oKTsgLS1p
dCkgeworICAgICAgICAgICAgaW5zaWRlTGF5ZXIgPSBpdFswXS0+aGl0VGVzdExheWVyKHJvb3RM
YXllciwgaW5mbywgeE1vdXNlUG9zLCB5TW91c2VQb3MsIGhpdFRlc3RSZWN0KTsKICAgICAgICAg
ICAgIGlmIChpbnNpZGVMYXllcikKICAgICAgICAgICAgICAgICByZXR1cm4gaW5zaWRlTGF5ZXI7
CiAgICAgICAgIH0KQEAgLTExOTcsMTAgKzExODcsOCBAQCBSZW5kZXJMYXllcjo6aGl0VGVzdExh
eWVyKFJlbmRlckxheWVyKiByCiAgICAgICAgIAogICAgIC8vIE5vdyBjaGVjayBvdXIgbmVnYXRp
dmUgei1pbmRleCBjaGlsZHJlbi4KICAgICBpZiAobV9uZWdaT3JkZXJMaXN0KSB7Ci0gICAgICAg
IHVpbnQgY291bnQgPSBtX25lZ1pPcmRlckxpc3QtPmNvdW50KCk7Ci0gICAgICAgIGZvciAoaW50
IGkgPSBjb3VudC0xOyBpID49IDA7IGktLSkgewotICAgICAgICAgICAgUmVuZGVyTGF5ZXIqIGNo
aWxkID0gbV9uZWdaT3JkZXJMaXN0LT5hdChpKTsKLSAgICAgICAgICAgIGluc2lkZUxheWVyID0g
Y2hpbGQtPmhpdFRlc3RMYXllcihyb290TGF5ZXIsIGluZm8sIHhNb3VzZVBvcywgeU1vdXNlUG9z
LCBoaXRUZXN0UmVjdCk7CisgICAgICAgIGZvciAoVmVjdG9yPFJlbmRlckxheWVyKj46Oml0ZXJh
dG9yIGl0ID0gJm1fbmVnWk9yZGVyTGlzdC0+bGFzdCgpOyBpdCA+PSBtX25lZ1pPcmRlckxpc3Qt
PmJlZ2luKCk7IC0taXQpIHsKKyAgICAgICAgICAgIGluc2lkZUxheWVyID0gaXRbMF0tPmhpdFRl
c3RMYXllcihyb290TGF5ZXIsIGluZm8sIHhNb3VzZVBvcywgeU1vdXNlUG9zLCBoaXRUZXN0UmVj
dCk7CiAgICAgICAgICAgICBpZiAoaW5zaWRlTGF5ZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGluc2lkZUxheWVyOwogICAgICAgICB9CkBAIC0xNDU2LDgzICsxNDQ0LDExIEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBpc092ZXJmbG93T25seShjb25zdCAKICAgICAgICAgICAgIWxheWVyLT5pc1Ry
YW5zcGFyZW50KCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlKGNvbnN0IFJlbmRl
ckxheWVyKiBsYXllcjEsIGNvbnN0IFJlbmRlckxheWVyKiBsYXllcjIpCitzdGF0aWMgaW5saW5l
IGJvb2wgY29tcGFyZVpJbmRleChSZW5kZXJMYXllciogZmlyc3QsIFJlbmRlckxheWVyKiBzZWNv
bmQpCiB7Ci0gICAgLy8gSnVzdCBjb21wYXJlIHotaW5kZXguCi0gICAgcmV0dXJuIChsYXllcjEt
PnpJbmRleCgpIDw9IGxheWVyMi0+ekluZGV4KCkpOworICAgIHJldHVybiBmaXJzdC0+ekluZGV4
KCkgPCBzZWNvbmQtPnpJbmRleCgpOwogfQogCi0vLyBTb3J0IHRoZSBidWZmZXIgZnJvbSBsb3dl
c3Qgei1pbmRleCB0byBoaWdoZXN0LiAgVGhlIGNvbW1vbiBzY2VuYXJpbyB3aWxsIGhhdmUKLS8v
IG1vc3Qgei1pbmRpY2VzIGVxdWFsLCBzbyB3ZSBvcHRpbWl6ZSBmb3IgdGhhdCBjYXNlIChpLmUu
LCB0aGUgbGlzdCB3aWxsIGJlIG1vc3RseQotLy8gc29ydGVkIGFscmVhZHkpLgotc3RhdGljIHZv
aWQgc29ydEJ5Wk9yZGVyKFFQdHJWZWN0b3I8UmVuZGVyTGF5ZXI+KiBidWZmZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgUVB0clZlY3RvcjxSZW5kZXJMYXllcj4qIG1lcmdlQnVmZmVyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQgc3RhcnQsIHVpbnQgZW5kKQotewotICAgIGlm
IChzdGFydCA+PSBlbmQpCi0gICAgICAgIHJldHVybjsgLy8gU2FuaXR5IGNoZWNrLgotCi0gICAg
aWYgKGVuZCAtIHN0YXJ0IDw9IDYpIHsKLSAgICAgICAgLy8gQXBwbHkgYSBidWJibGUgc29ydCBm
b3Igc21hbGxlciBsaXN0cy4KLSAgICAgICAgZm9yICh1aW50IGkgPSBlbmQtMTsgaSA+IHN0YXJ0
OyBpLS0pIHsKLSAgICAgICAgICAgIGJvb2wgc29ydGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGZv
ciAodWludCBqID0gc3RhcnQ7IGogPCBpOyBqKyspIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJM
YXllciogZWx0ID0gYnVmZmVyLT5hdChqKTsKLSAgICAgICAgICAgICAgICBSZW5kZXJMYXllciog
ZWx0MiA9IGJ1ZmZlci0+YXQoaisxKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbXBhcmUoZWx0
LCBlbHQyKSkgewotICAgICAgICAgICAgICAgICAgICBzb3J0ZWQgPSBmYWxzZTsKLSAgICAgICAg
ICAgICAgICAgICAgYnVmZmVyLT5pbnNlcnQoaiwgZWx0Mik7Ci0gICAgICAgICAgICAgICAgICAg
IGJ1ZmZlci0+aW5zZXJ0KGorMSwgZWx0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAoc29ydGVkKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgLy8gUGVmb3JtIGEgbWVyZ2Ugc29y
dCBmb3IgbGFyZ2VyIGxpc3RzLgotICAgICAgICB1aW50IG1pZCA9IChzdGFydCtlbmQpLzI7Ci0g
ICAgICAgIHNvcnRCeVpPcmRlcihidWZmZXIsIG1lcmdlQnVmZmVyLCBzdGFydCwgbWlkKTsKLSAg
ICAgICAgc29ydEJ5Wk9yZGVyKGJ1ZmZlciwgbWVyZ2VCdWZmZXIsIG1pZCwgZW5kKTsKLQotICAg
ICAgICBSZW5kZXJMYXllciogZWx0ID0gYnVmZmVyLT5hdChtaWQtMSk7Ci0gICAgICAgIFJlbmRl
ckxheWVyKiBlbHQyID0gYnVmZmVyLT5hdChtaWQpOwotCi0gICAgICAgIC8vIEhhbmRsZSB0aGUg
ZmFzdCBjb21tb24gY2FzZSAob2YgZXF1YWwgei1pbmRpY2VzKS4gIFRoZSBsaXN0IG1heSBhbHJl
YWR5Ci0gICAgICAgIC8vIGJlIGNvbXBsZXRlbHkgc29ydGVkLgotICAgICAgICBpZiAoY29tcGFy
ZShlbHQsIGVsdDIpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIFdlIGhhdmUg
dG8gbWVyZ2Ugc29ydC4gIEVuc3VyZSBvdXIgbWVyZ2UgYnVmZmVyIGlzIGJpZyBlbm91Z2ggdG8g
aG9sZAotICAgICAgICAvLyBhbGwgdGhlIGl0ZW1zLgotICAgICAgICBtZXJnZUJ1ZmZlci0+cmVz
aXplKGVuZCAtIHN0YXJ0KTsKLSAgICAgICAgdWludCBpMSA9IHN0YXJ0OwotICAgICAgICB1aW50
IGkyID0gbWlkOwotCi0gICAgICAgIGVsdCA9IGJ1ZmZlci0+YXQoaTEpOwotICAgICAgICBlbHQy
ID0gYnVmZmVyLT5hdChpMik7Ci0KLSAgICAgICAgd2hpbGUgKGkxIDwgbWlkIHx8IGkyIDwgZW5k
KSB7Ci0gICAgICAgICAgICBpZiAoaTEgPCBtaWQgJiYgKGkyID09IGVuZCB8fCBlbHQtPnpJbmRl
eCgpIDw9IGVsdDItPnpJbmRleCgpKSkgewotICAgICAgICAgICAgICAgIG1lcmdlQnVmZmVyLT5p
bnNlcnQobWVyZ2VCdWZmZXItPmNvdW50KCksIGVsdCk7Ci0gICAgICAgICAgICAgICAgaTErKzsK
LSAgICAgICAgICAgICAgICBpZiAoaTEgPCBtaWQpCi0gICAgICAgICAgICAgICAgICAgIGVsdCA9
IGJ1ZmZlci0+YXQoaTEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgbWVyZ2VCdWZmZXItPmluc2VydChtZXJnZUJ1ZmZlci0+Y291bnQoKSwgZWx0
Mik7Ci0gICAgICAgICAgICAgICAgaTIrKzsKLSAgICAgICAgICAgICAgICBpZiAoaTIgPCBlbmQp
Ci0gICAgICAgICAgICAgICAgICAgIGVsdDIgPSBidWZmZXItPmF0KGkyKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIGZvciAodWludCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkr
KykKLSAgICAgICAgICAgIGJ1ZmZlci0+aW5zZXJ0KGksIG1lcmdlQnVmZmVyLT5hdChpLXN0YXJ0
KSk7Ci0KLSAgICAgICAgbWVyZ2VCdWZmZXItPmNsZWFyKCk7Ci0gICAgfQotfQogCiB2b2lkIFJl
bmRlckxheWVyOjpkaXJ0eVpPcmRlckxpc3RzKCkKIHsKQEAgLTE1NTIsMTkgKzE0NjgsMTUgQEAg
dm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlWk9yZGVyTGlzdHMoKQogICAgICAgICBjaGlsZC0+Y29s
bGVjdExheWVycyhtX3Bvc1pPcmRlckxpc3QsIG1fbmVnWk9yZGVyTGlzdCk7CiAKICAgICAvLyBT
b3J0IHRoZSB0d28gbGlzdHMuCi0gICAgaWYgKG1fcG9zWk9yZGVyTGlzdCkgewotICAgICAgICBR
UHRyVmVjdG9yPFJlbmRlckxheWVyPiBtZXJnZUJ1ZmZlcjsKLSAgICAgICAgc29ydEJ5Wk9yZGVy
KG1fcG9zWk9yZGVyTGlzdCwgJm1lcmdlQnVmZmVyLCAwLCBtX3Bvc1pPcmRlckxpc3QtPmNvdW50
KCkpOwotICAgIH0KLSAgICBpZiAobV9uZWdaT3JkZXJMaXN0KSB7Ci0gICAgICAgIFFQdHJWZWN0
b3I8UmVuZGVyTGF5ZXI+IG1lcmdlQnVmZmVyOwotICAgICAgICBzb3J0QnlaT3JkZXIobV9uZWda
T3JkZXJMaXN0LCAmbWVyZ2VCdWZmZXIsIDAsIG1fbmVnWk9yZGVyTGlzdC0+Y291bnQoKSk7Ci0g
ICAgfQorICAgIGlmIChtX3Bvc1pPcmRlckxpc3QpCisgICAgICAgIHN0ZDo6c3RhYmxlX3NvcnQo
bV9wb3NaT3JkZXJMaXN0LT5iZWdpbigpLCBtX3Bvc1pPcmRlckxpc3QtPmVuZCgpLCBjb21wYXJl
WkluZGV4KTsKKyAgICBpZiAobV9uZWdaT3JkZXJMaXN0KQorICAgICAgICBzdGQ6OnN0YWJsZV9z
b3J0KG1fbmVnWk9yZGVyTGlzdC0+YmVnaW4oKSwgbV9uZWdaT3JkZXJMaXN0LT5lbmQoKSwgY29t
cGFyZVpJbmRleCk7CiAKICAgICBtX3pPcmRlckxpc3RzRGlydHkgPSBmYWxzZTsKIH0KIAotdm9p
ZCBSZW5kZXJMYXllcjo6Y29sbGVjdExheWVycyhRUHRyVmVjdG9yPFJlbmRlckxheWVyPiomIHBv
c0J1ZmZlciwgUVB0clZlY3RvcjxSZW5kZXJMYXllcj4qJiBuZWdCdWZmZXIpCit2b2lkIFJlbmRl
ckxheWVyOjpjb2xsZWN0TGF5ZXJzKFZlY3RvcjxSZW5kZXJMYXllcio+KiYgcG9zQnVmZmVyLCBW
ZWN0b3I8UmVuZGVyTGF5ZXIqPiomIG5lZ0J1ZmZlcikKIHsKICAgICAvLyBGSVhNRTogQSBjaGls
ZCByZW5kZXIgb2JqZWN0IG9yIGxheWVyIGNvdWxkIG92ZXJyaWRlIHZpc2liaWxpdHkuICBEb24n
dCByZW1vdmUgdGhpcwogICAgIC8vIG9wdGltaXphdGlvbiB0aG91Z2ggdW50aWwgUmVuZGVyT2Jq
ZWN0J3Mgbm9kZUF0UG9pbnQgaXMgcGF0Y2hlZCB0byB1bmRlcnN0YW5kIHdoYXQgdG8gZG8KQEAg
LTE1NzMsMjUgKzE0ODUsMjAgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y29sbGVjdExheWVycyhRUHRy
VmVjdAogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIGJ1ZmZl
ciB0aGUgY2hpbGQgc2hvdWxkIGJlIGluLgotICAgIFFQdHJWZWN0b3I8UmVuZGVyTGF5ZXI+KiYg
YnVmZmVyID0gKHpJbmRleCgpID49IDApID8gcG9zQnVmZmVyIDogbmVnQnVmZmVyOworICAgIFZl
Y3RvcjxSZW5kZXJMYXllcio+KiYgYnVmZmVyID0gKHpJbmRleCgpID49IDApID8gcG9zQnVmZmVy
IDogbmVnQnVmZmVyOwogCiAgICAgLy8gQ3JlYXRlIHRoZSBidWZmZXIgaWYgaXQgZG9lc24ndCBl
eGlzdCB5ZXQuCiAgICAgaWYgKCFidWZmZXIpCi0gICAgICAgIGJ1ZmZlciA9IG5ldyBRUHRyVmVj
dG9yPFJlbmRlckxheWVyPigpOworICAgICAgICBidWZmZXIgPSBuZXcgVmVjdG9yPFJlbmRlckxh
eWVyKj47CiAgICAgCi0gICAgLy8gUmVzaXplIGJ5IGEgcG93ZXIgb2YgMiB3aGVuIG91ciBidWZm
ZXIgZmlsbHMgdXAuCi0gICAgaWYgKGJ1ZmZlci0+Y291bnQoKSA9PSBidWZmZXItPnNpemUoKSkK
LSAgICAgICAgYnVmZmVyLT5yZXNpemUoMiooYnVmZmVyLT5zaXplKCkrMSkpOwotCiAgICAgLy8g
QXBwZW5kIG91cnNlbHZlcyBhdCB0aGUgZW5kIG9mIHRoZSBhcHByb3ByaWF0ZSBidWZmZXIuCi0g
ICAgYnVmZmVyLT5pbnNlcnQoYnVmZmVyLT5jb3VudCgpLCB0aGlzKTsKKyAgICBidWZmZXItPmFw
cGVuZCh0aGlzKTsKIAogICAgIC8vIFJlY3VyIGludG8gb3VyIGNoaWxkcmVuIHRvIGNvbGxlY3Qg
bW9yZSBsYXllcnMsIGJ1dCBvbmx5IGlmIHdlIGRvbid0IGVzdGFibGlzaAogICAgIC8vIGEgc3Rh
Y2tpbmcgY29udGV4dC4KLSAgICBpZiAoIWlzU3RhY2tpbmdDb250ZXh0KCkpIHsKKyAgICBpZiAo
IWlzU3RhY2tpbmdDb250ZXh0KCkpCiAgICAgICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0g
Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKICAgICAg
ICAgICAgIGNoaWxkLT5jb2xsZWN0TGF5ZXJzKHBvc0J1ZmZlciwgbmVnQnVmZmVyKTsKLSAgICB9
CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnJlcGFpbnRJbmNsdWRpbmdEZXNjZW5kYW50cygpCklu
ZGV4OiBXZWJDb3JlK1NWRy9LRE9NU2V0dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUr
U1ZHL0tET01TZXR0aW5ncy5jcHAJKHJldmlzaW9uIDEyNDUyKQorKysgV2ViQ29yZStTVkcvS0RP
TVNldHRpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsOCBAQAogI2luY2x1ZGUg
PGtnbG9iYWxzZXR0aW5ncy5oPgogCiAjaW5jbHVkZSA8cXJlZ2V4cC5oPgotI2luY2x1ZGUgPHEz
dmFsdWV2ZWN0b3IuaD4KICNpbmNsdWRlIDxxZm9udGRhdGFiYXNlLmg+CisjaW5jbHVkZSA8a3ht
bGNvcmUvVmVjdG9yLmg+CiAKICNpbmNsdWRlICJLRE9NU2V0dGluZ3MuaCIKIApAQCAtMTAzLDcg
KzEwMyw3IEBAIHB1YmxpYzoKIAogICAgIFBvbGljeU1hcCBkb21haW5Qb2xpY3k7CiAKLSAgICBR
M1ZhbHVlVmVjdG9yPFFSZWdFeHA+IGFkRmlsdGVyczsKKyAgICBWZWN0b3I8UVJlZ0V4cD4gYWRG
aWx0ZXJzOwogICAgIFEzVmFsdWVMaXN0PCBRUGFpcjwgUVN0cmluZywgUUNoYXIgPiA+IGZhbGxi
YWNrQWNjZXNzS2V5c0Fzc2lnbm1lbnRzOwogCiAgICAgLy8gRmxhZ3MKQEAgLTQ0NSw3ICs0NDUs
NyBAQCB2b2lkIEtET01TZXR0aW5nczo6aW5pdChLQ29uZmlnICpjb25maWcsCiAKICAgICAgICAg
UU1hcDxRU3RyaW5nLFFTdHJpbmc+IGVudHJ5TWFwID0gY29uZmlnLT5lbnRyeU1hcChRU3RyaW5n
Ojpmcm9tTGF0aW4xKCJGaWx0ZXIgU2V0dGluZ3MiKSk7CiAgICAgICAgIFFNYXA8UVN0cmluZyxR
U3RyaW5nPjo6Q29uc3RJdGVyYXRvciBpdDsKLSAgICAgICAgZC0+YWRGaWx0ZXJzLnJlc2VydmUo
ZW50cnlNYXAuY291bnQoKSk7CisgICAgICAgIGQtPmFkRmlsdGVycy5yZXNlcnZlQ2FwYWNpdHko
ZW50cnlNYXAuY291bnQoKSk7CiAgICAgICAgIGZvciggaXQgPSBlbnRyeU1hcC5jb25zdEJlZ2lu
KCk7IGl0ICE9IGVudHJ5TWFwLmNvbnN0RW5kKCk7ICsraXQpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIFFTdHJpbmcgbmFtZSA9IGl0LmtleSgpOwpAQCAtNTk5LDEwICs1OTksMTAgQEAgYm9vbCBL
RE9NU2V0dGluZ3M6OmlzQWRGaWx0ZXJlZChjb25zdCBRUwogICAgIHsKICAgICAgICAgaWYoIXVy
bC5zdGFydHNXaXRoKFFTdHJpbmc6OmZyb21MYXRpbjEoImRhdGE6IikpKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBRM1ZhbHVlVmVjdG9yPFFSZWdFeHA+OjppdGVyYXRvciBpdDsKKyAgICAgICAg
ICAgIFZlY3RvcjxRUmVnRXhwPjo6aXRlcmF0b3IgaXQ7CiAgICAgICAgICAgICBmb3IoaXQgPSBk
LT5hZEZpbHRlcnMuYmVnaW4oKTsgaXQgIT0gZC0+YWRGaWx0ZXJzLmVuZCgpOyArK2l0KQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmKCgqaXQpLnNlYXJjaCh1cmwpICE9IC0xKQor
ICAgICAgICAgICAgICAgIGlmKGl0LT5zZWFyY2godXJsKSAhPSAtMSkKICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgIGtkRGVidWcoNjA4MCkgPDwgIkZpbHRlcmVkOiAiIDw8
IHVybCA8PCBlbmRsOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEyNDUyKQorKysgV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsNyArMTg1LDYgQEAK
IAkJOTNGMTk5N0YwODI0NUU1OTAwMUU5QUJDIC8qIEtXUVByaW50ZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NkFBMDJERTNCODYwMUVBNDEy
MiAvKiBLV1FQcmludGVyLmggKi87IH07CiAJCTkzRjE5OTgyMDgyNDVFNTkwMDFFOUFCQyAvKiBL
V1FQdHJMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNTg3ODY5OTAyREUzQjg2MDFFQTQxMjIgLyogS1dRUHRyTGlzdC5oICovOyB9OwogCQk5M0Yx
OTk4MzA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRUHRyUXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NkFEMDJERTNCODYwMUVBNDEyMiAvKiBL
V1FQdHJRdWV1ZS5oICovOyB9OwotCQk5M0YxOTk4NTA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRUHRy
VmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NTg3ODZDNDAyREUzQjg2MDFFQTQxMjIgLyogS1dRUHRyVmVjdG9yLmggKi87IH07CiAJCTkzRjE5
OThBMDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FSZWdFeHAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NkIzMDJERTNCODYwMUVBNDEyMiAvKiBLV1FS
ZWdFeHAuaCAqLzsgfTsKIAkJOTNGMTk5OEIwODI0NUU1OTAwMUU5QUJDIC8qIEtXUVJlZ2lvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg2QjQw
MkRFM0I4NjAxRUE0MTIyIC8qIEtXUVJlZ2lvbi5oICovOyB9OwogCQk5M0YxOTk4QzA4MjQ1RTU5
MDAxRTlBQkMgLyogS1dRUmVuZGVyVHJlZURlYnVnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Mzk1NUE0MTAzRDcyOTMyMDA4NjM1Q0UgLyogS1dRUmVu
ZGVyVHJlZURlYnVnLmggKi87IH07CkBAIC0yMDYsNyArMjA1LDYgQEAKIAkJOTNGMTk5OUQwODI0
NUU1OTAwMUU5QUJDIC8qIEtXUVZhbHVlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg2QzIwMkRFM0I4NjAxRUE0MTIyIC8qIEtXUVZhbHVl
TGlzdC5oICovOyB9OwogCQk5M0YxOTk5RTA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRVmFsdWVMaXN0
SW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4
Nzg1M0IwMkRFMzc1OTAxRUE0MTIyIC8qIEtXUVZhbHVlTGlzdEltcGwuaCAqLzsgfTsKIAkJOTNG
MTk5OUYwODI0NUU1OTAwMUU5QUJDIC8qIEtXUVZhcmlhbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NkMzMDJERTNCODYwMUVBNDEyMiAvKiBL
V1FWYXJpYW50LmggKi87IH07Ci0JCTkzRjE5OUEwMDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FWZWN0
b3JJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NTg3ODUzRTAyREUzNzU5MDFFQTQxMjIgLyogS1dRVmVjdG9ySW1wbC5oICovOyB9OwogCQk5M0Yx
OTlBMTA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg1NDAwMkRFMzc1OTAxRUE0MTIyIC8qIEtXUVZp
ZXcuaCAqLzsgfTsKIAkJOTNGMTk5QTIwODI0NUU1OTAwMUU5QUJDIC8qIEtXUVdpZGdldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg2QzUwMkRF
M0I4NjAxRUE0MTIyIC8qIEtXUVdpZGdldC5oICovOyB9OwogCQk5M0YxOTlBMzA4MjQ1RTU5MDAx
RTlBQkMgLyogS1dRV2luZG93V2lkZ2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODU0MzAyREUzNzU5MDFFQTQxMjIgLyogS1dRV2luZG93V2lk
Z2V0LmggKi87IH07CkBAIC0zMjMsNyArMzIxLDYgQEAKIAkJOTNGMTlBNTUwODI0NUU1OTAwMUU5
QUJDIC8qIEtXUVRpbWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY1ODc4NTNBMDJERTM3NTkwMUVBNDEyMiAvKiBLV1FUaW1lci5jcHAgKi87IH07
CiAJCTkzRjE5QTU2MDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FWYWx1ZUxpc3RJbXBsLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NTNDMDJERTM3
NTkwMUVBNDEyMiAvKiBLV1FWYWx1ZUxpc3RJbXBsLmNwcCAqLzsgfTsKIAkJOTNGMTlBNTcwODI0
NUU1OTAwMUU5QUJDIC8qIEtXUVZhcmlhbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg1M0QwMkRFMzc1OTAxRUE0MTIyIC8qIEtXUVZhcmlh
bnQuY3BwICovOyB9OwotCQk5M0YxOUE1ODA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRVmVjdG9ySW1w
bC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3
ODUzRjAyREUzNzU5MDFFQTQxMjIgLyogS1dRVmVjdG9ySW1wbC5jcHAgKi87IH07CiAJCTkzRjE5
QTU5MDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FXaWRnZXQubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODU0MjAyREUzNzU5MDFFQTQxMjIgLyogS1dR
V2lkZ2V0Lm1tICovOyB9OwogCQk5M0YxOUE1QTA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRV2luZG93
V2lkZ2V0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RjU4Nzg1NDQwMkRFMzc1OTAxRUE0MTIyIC8qIEtXUVdpbmRvd1dpZGdldC5tbSAqLzsgfTsKIAkJ
OTNGMTlBNUMwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVDb29raWVBZGFwdGVyLm0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODU0QTAyREUzNzU5
MDFFQTQxMjIgLyogV2ViQ29yZUNvb2tpZUFkYXB0ZXIubSAqLzsgfTsKQEAgLTIxNzEsOCArMjE2
OCw2IEBACiAJCUY1ODc4NTNCMDJERTM3NTkwMUVBNDEyMiAvKiBLV1FWYWx1ZUxpc3RJbXBsLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdp
ZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtXUVZh
bHVlTGlzdEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2Vz
VGFicyA9IDA7IH07CiAJCUY1ODc4NTNDMDJERTM3NTkwMUVBNDEyMiAvKiBLV1FWYWx1ZUxpc3RJ
bXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
aW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEtXUVZhbHVlTGlzdEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJX
aWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjU4Nzg1M0QwMkRFMzc1OTAxRUE0MTIyIC8q
IEtXUVZhcmlhbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gS1dRVmFyaWFudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRh
YldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQlGNTg3ODUzRTAyREUzNzU5MDFFQTQxMjIg
LyogS1dRVmVjdG9ySW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBLV1FWZWN0b3JJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRh
YldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQlGNTg3ODUzRjAyREUzNzU5MDFFQTQxMjIg
LyogS1dRVmVjdG9ySW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBLV1FWZWN0b3JJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1ODc4NTQwMDJERTM3NTkw
MUVBNDEyMiAvKiBLV1FWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEtXUVZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lk
dGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1ODc4NTQyMDJERTM3NTkwMUVBNDEyMiAvKiBL
V1FXaWRnZXQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBLV1FXaWRnZXQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTg3ODU0MzAyREUzNzU5MDFFQTQxMjIgLyog
S1dRV2luZG93V2lkZ2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEtXUVdpbmRvd1dpZGdldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0
YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAgLTIyMjUsNyArMjIyMCw2IEBACiAJCUY1
ODc4NkFBMDJERTNCODYwMUVBNDEyMiAvKiBLV1FQcmludGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtXUVByaW50ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1ODc4NkFD
MDJERTNCODYwMUVBNDEyMiAvKiBLV1FQdHJMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtXUVB0ckxpc3QuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1ODc4NkFEMDJERTNC
ODYwMUVBNDEyMiAvKiBLV1FQdHJRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBLV1FQdHJRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJRjU4Nzg2QUYwMkRFM0I4NjAx
RUE0MTIyIC8qIEtXUVB0clZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBLV1FQdHJWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1ODc4NkIzMDJERTNCODYwMUVB
NDEyMiAvKiBLV1FSZWdFeHAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gS1dRUmVnRXhwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTg3ODZCNDAyREUzQjg2MDFFQTQxMjIgLyog
S1dRUmVnaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEtXUVJlZ2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7
IHVzZXNUYWJzID0gMDsgfTsKIAkJRjU4Nzg2QjUwMkRFM0I4NjAxRUE0MTIyIC8qIEtXUVNjcm9s
bFZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
aW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gS1dRU2Nyb2xsVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7
IHVzZXNUYWJzID0gMDsgfTsKQEAgLTIyMzksNyArMjIzMyw2IEBACiAJCUY1ODc4NkMwMDJERTNC
ODYwMUVBNDEyMiAvKiBLV1FUaW1lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBLV1FUaW1lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0
YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjU4Nzg2QzIwMkRFM0I4NjAxRUE0MTIy
IC8qIEtXUVZhbHVlTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBLV1FWYWx1ZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1ODc4NkMzMDJERTNCODYwMUVBNDEyMiAv
KiBLV1FWYXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEtXUVZhcmlhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGgg
PSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUY1ODc4NkM0MDJERTNCODYwMUVBNDEyMiAvKiBLV1FQ
dHJWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gS1dRUHRyVmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0g
ODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTg3ODZDNTAyREUzQjg2MDFFQTQxMjIgLyogS1dRV2lk
Z2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGlu
ZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEtXUVdpZGdldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNU
YWJzID0gMDsgfTsKIAkJRjU4RUY1OEUwMkRGREZCNzAxODYzNUNBIC8qIFdlYkNvcmUuZXhwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5leHBvcnRzOyBuYW1lID0gV2Vi
Q29yZS5leHA7IHBhdGggPSAuLi9XZWJDb3JlLmV4cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
dGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1QTFCMDQ5MDJERThBQkEwMTg2MzVD
QSAvKiBsaW5rQ3Vyc29yLnRpZmYgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBpbWFnZS50aWZmOyBuYW1lID0gbGlua0N1cnNvci50aWZmOyBwYXRoID0g
UmVzb3VyY2VzL2xpbmtDdXJzb3IudGlmZjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTM4MDQsNyArMzc5Nyw2IEBACiAJCQkJRjU4Nzg2QUEwMkRFM0I4NjAxRUE0MTIyIC8qIEtXUVBy
aW50ZXIuaCAqLywKIAkJCQlGNTg3ODZBQzAyREUzQjg2MDFFQTQxMjIgLyogS1dRUHRyTGlzdC5o
ICovLAogCQkJCUY1ODc4NkFEMDJERTNCODYwMUVBNDEyMiAvKiBLV1FQdHJRdWV1ZS5oICovLAot
CQkJCUY1ODc4NkFGMDJERTNCODYwMUVBNDEyMiAvKiBLV1FQdHJWZWN0b3IuaCAqLywKIAkJCQlG
NTg3ODZCMzAyREUzQjg2MDFFQTQxMjIgLyogS1dRUmVnRXhwLmggKi8sCiAJCQkJRjU4Nzg1MkIw
MkRFMzc1OTAxRUE0MTIyIC8qIEtXUVJlZ0V4cC5jcHAgKi8sCiAJCQkJRjU4Nzg2QjQwMkRFM0I4
NjAxRUE0MTIyIC8qIEtXUVJlZ2lvbi5oICovLApAQCAtMzgzMyw5ICszODI1LDYgQEAKIAkJCQlG
NTg3ODUzQzAyREUzNzU5MDFFQTQxMjIgLyogS1dRVmFsdWVMaXN0SW1wbC5jcHAgKi8sCiAJCQkJ
RjU4Nzg2QzMwMkRFM0I4NjAxRUE0MTIyIC8qIEtXUVZhcmlhbnQuaCAqLywKIAkJCQlGNTg3ODUz
RDAyREUzNzU5MDFFQTQxMjIgLyogS1dRVmFyaWFudC5jcHAgKi8sCi0JCQkJRjU4Nzg2QzQwMkRF
M0I4NjAxRUE0MTIyIC8qIEtXUVB0clZlY3Rvci5oICovLAotCQkJCUY1ODc4NTNFMDJERTM3NTkw
MUVBNDEyMiAvKiBLV1FWZWN0b3JJbXBsLmggKi8sCi0JCQkJRjU4Nzg1M0YwMkRFMzc1OTAxRUE0
MTIyIC8qIEtXUVZlY3RvckltcGwuY3BwICovLAogCQkJCUY1ODc4NkM1MDJERTNCODYwMUVBNDEy
MiAvKiBLV1FXaWRnZXQuaCAqLywKIAkJCQlGNTg3ODU0MjAyREUzNzU5MDFFQTQxMjIgLyogS1dR
V2lkZ2V0Lm1tICovLAogCQkJCUE4NUQ3QThEMDg3OUVDNjQwMDZBOTE3MiAvKiBLV1FXTWF0cml4
LmggKi8sCkBAIC0zOTM4LDcgKzM5MjcsNiBAQAogCQkJCTkzRjE5OTdGMDgyNDVFNTkwMDFFOUFC
QyAvKiBLV1FQcmludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTk4MjA4MjQ1RTU5MDAx
RTlBQkMgLyogS1dRUHRyTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5ODMwODI0NUU1
OTAwMUU5QUJDIC8qIEtXUVB0clF1ZXVlLmggaW4gSGVhZGVycyAqLywKLQkJCQk5M0YxOTk4NTA4
MjQ1RTU5MDAxRTlBQkMgLyogS1dRUHRyVmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0Yx
OTk4QTA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRUmVnRXhwLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
M0YxOTk4QjA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRUmVnaW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5M0YxOTk4QzA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRUmVuZGVyVHJlZURlYnVnLmggaW4gSGVh
ZGVycyAqLywKQEAgLTM5NTksNyArMzk0Nyw2IEBACiAJCQkJOTNGMTk5OUQwODI0NUU1OTAwMUU5
QUJDIC8qIEtXUVZhbHVlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5OUUwODI0NUU1
OTAwMUU5QUJDIC8qIEtXUVZhbHVlTGlzdEltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5
OTlGMDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FWYXJpYW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk5
M0YxOTlBMDA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRVmVjdG9ySW1wbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTNGMTk5QTEwODI0NUU1OTAwMUU5QUJDIC8qIEtXUVZpZXcuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkzRjE5OUEyMDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FXaWRnZXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzRjE5OUEzMDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FXaW5kb3dXaWRnZXQuaCBp
biBIZWFkZXJzICovLApAQCAtMzk3OSw3ICszOTY2LDYgQEAKIAkJCQk5M0YxOTlCMzA4MjQ1RTU5
MDAxRTlBQkMgLyogV2ViQ29yZVZpZXdGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0Yx
OTlCNDA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRRnJhbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkz
RjE5OUI3MDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FQdHJMaXN0LmggaW4gSGVhZGVycyAqLywKLQkJ
CQk5M0YxOTk4NTA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRUHRyVmVjdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5M0YxOTlCODA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRU2Nyb2xsQmFyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5M0YxOTlCQjA4MjQ1RTU5MDAxRTlBQkMgLyogV2ViQ29yZUtleWJvYXJk
QWNjZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTlCQzA4MjQ1RTU5MDAxRTlBQkMgLyog
S1dRQWNjT2JqZWN0LmggaW4gSGVhZGVycyAqLywKQEAgLTUwNjQsNyArNTA1MCw2IEBACiAJCQkJ
OTNGMTlBNTUwODI0NUU1OTAwMUU5QUJDIC8qIEtXUVRpbWVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTkzRjE5QTU2MDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FWYWx1ZUxpc3RJbXBsLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkzRjE5QTU3MDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FWYXJpYW50LmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTkzRjE5QTU4MDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FWZWN0
b3JJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5QTU5MDgyNDVFNTkwMDFFOUFCQyAv
KiBLV1FXaWRnZXQubW0gaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUE1QTA4MjQ1RTU5MDAxRTlB
QkMgLyogS1dRV2luZG93V2lkZ2V0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBNUMwODI0
NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVDb29raWVBZGFwdGVyLm0gaW4gU291cmNlcyAqLywKSW5k
ZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDEyNDUyKQor
KysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjMgQEAKKzIwMDYtMDEtMjkg
IE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIHJlcGxhY2UgUVZhbHVlVmVjdG9yIGFuZCBR
UHRyVmVjdG9yIHVzZSB3aXRoIFZlY3RvciwgYW5kIHJlbW92ZSB0aGVtLgorCisgICAgICAgICog
Rm9yd2FyZGluZ0hlYWRlcnMvcTN2YWx1ZXZlY3Rvci5oOiBSZW1vdmVkLgorICAgICAgICAqIEZv
cndhcmRpbmdIZWFkZXJzL3FwdHJ2ZWN0b3IuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBGb3J3YXJk
aW5nSGVhZGVycy9xdmVjdG9yLmg6IFJlbW92ZWQuCisgICAgICAgICogV2ViQ29yZStTVkcvS0RP
TVNldHRpbmdzLmNwcDoKKyAgICAgICAgKEtET01TZXR0aW5nczo6aW5pdCk6CisgICAgICAgIChL
RE9NU2V0dGluZ3M6OmlzQWRGaWx0ZXJlZCk6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJyaWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdl
Lm1tOgorICAgICAgICAoLVtXZWJDb3JlRnJhbWVCcmlkZ2UgZWxlbWVudFdpdGhOYW1lOmluRm9y
bTpdKToKKyAgICAgICAgKC1bV2ViQ29yZUZyYW1lQnJpZGdlIGNvbnRyb2xzSW5Gb3JtOl0pOgor
ICAgICAgICAqIGNzcy9jc3NzdHlsZXNlbGVjdG9yLmg6CisgICAgICAgICoga2h0bWwvaHRtbC9I
VE1MQ29sbGVjdGlvbkltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb25J
bXBsOjp1cGRhdGVOYW1lQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb25J
bXBsOjpuYW1lZEl0ZW1zKToKKyAgICAgICAgKiBraHRtbC9odG1sL0hUTUxDb2xsZWN0aW9uSW1w
bC5oOgorICAgICAgICAqIGtodG1sL2h0bWwvSFRNTEZvcm1Db2xsZWN0aW9uSW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbGxlY3Rpb25JbXBsOjpIVE1MRm9ybUNvbGxlY3Rp
b25JbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29sbGVjdGlvbkltcGw6OmNhbGNM
ZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db2xsZWN0aW9uSW1wbDo6aXRlbSk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbGxlY3Rpb25JbXBsOjpnZXROYW1lZEZvcm1J
dGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29sbGVjdGlvbkltcGw6OnVwZGF0ZU5h
bWVDYWNoZSk6CisgICAgICAgICoga2h0bWwvaHRtbC9IVE1MRm9ybUVsZW1lbnRJbXBsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudEltcGw6On5IVE1MRm9ybUVsZW1lbnRJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudEltcGw6Omxlbmd0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnRJbXBsOjpzdWJtaXRDbGljayk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnRJbXBsOjpmb3JtRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnRJbXBsOjpzdWJtaXQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZvcm1FbGVtZW50SW1wbDo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6aW5zZXJ0SW50
b1ZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVGcm9tVmVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudEltcGw6OmZvcm1FbGVtZW50SW5kZXgpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50SW1wbDo6cmVnaXN0ZXJJbWdFbGVtZW50KToKKyAg
ICAgICAgKiBraHRtbC9odG1sL0hUTUxGb3JtRWxlbWVudEltcGwuaDoKKyAgICAgICAgKiBrc3Zn
Mi9zdmcvU1ZHVGV4dEVsZW1lbnRJbXBsLmNwcDoKKyAgICAgICAgKiBrd3EvS1dRQ29tYm9Cb3gu
aDoKKyAgICAgICAgKiBrd3EvS1dRTGlzdEJveC5oOgorICAgICAgICAqIGt3cS9LV1FQdHJWZWN0
b3IuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBrd3EvS1dRUmVuZGVyVHJlZURlYnVnLmNwcDoKKyAg
ICAgICAgKHdyaXRlTGF5ZXJzKToKKyAgICAgICAgKiBrd3EvS1dRVmFsdWVWZWN0b3IuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBrd3EvS1dRVmVjdG9ySW1wbC5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICoga3dxL0tXUVZlY3RvckltcGwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBsb2FkZXIvbG9hZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRlcjo6Y2FuY2VsUmVxdWVzdHMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9yZW5kZXJfbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OnBhaW50TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRl
c3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpjb21wYXJlWkluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVaT3JkZXJMaXN0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6Y29sbGVjdExheWVycyk6CisgICAgICAgICogcmVuZGVyaW5nL3JlbmRl
cl9sYXllci5oOgorICAgICAgICAoa2h0bWw6OlJlbmRlckxheWVyOjpwb3NaT3JkZXJMaXN0KToK
KyAgICAgICAgKGtodG1sOjpSZW5kZXJMYXllcjo6bmVnWk9yZGVyTGlzdCk6CisKIDIwMDYtMDEt
MjkgIEVyaWMgU2VpZGVsICA8ZXNlaWRlbEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgaHlhdHQuCkluZGV4OiBjc3MvY3Nzc3R5bGVzZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNz
cy9jc3NzdHlsZXNlbGVjdG9yLmgJKHJldmlzaW9uIDEyNDUyKQorKysgY3NzL2Nzc3N0eWxlc2Vs
ZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsNiBAQAogI2lmbmRlZiBfQ1NTX2Nz
c3N0eWxlc2VsZWN0b3JfaF8KICNkZWZpbmUgX0NTU19jc3NzdHlsZXNlbGVjdG9yX2hfCiAKLSNp
bmNsdWRlIDxxcHRydmVjdG9yLmg+Ci0KICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX3N0eWxl
LmgiCiAjaW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKICNpbmNsdWRlICJ4bWwvZG9tX3N0cmlu
Z2ltcGwuaCIKSW5kZXg6IGJyaWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGJyaWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCShyZXZpc2lvbiAxMjQ1MikK
KysrIGJyaWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTYyLDE0ICsxMTYyLDEzIEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVu
dEYKIHsKICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVudCA9IGZvcm1FbGVtZW50
RnJvbURPTUVsZW1lbnQoZm9ybSk7CiAgICAgaWYgKGZvcm1FbGVtZW50KSB7Ci0gICAgICAgIFFQ
dHJWZWN0b3I8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw+ICZlbGVtZW50cyA9IGZvcm1FbGVt
ZW50LT5mb3JtRWxlbWVudHM7CisgICAgICAgIFZlY3RvcjxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50
SW1wbCo+JiBlbGVtZW50cyA9IGZvcm1FbGVtZW50LT5mb3JtRWxlbWVudHM7CiAgICAgICAgIEF0
b21pY1N0cmluZyB0YXJnZXROYW1lID0gbmFtZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBlbGVtZW50cy5jb3VudCgpOyBpKyspIHsKLSAgICAgICAgICAgIEhUTUxHZW5l
cmljRm9ybUVsZW1lbnRJbXBsICplbHQgPSBlbGVtZW50cy5hdChpKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBlbGVtZW50cy5zaXplKCk7IGkrKykgeworICAgICAgICAg
ICAgSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwgKmVsdCA9IGVsZW1lbnRzW2ldOwogICAgICAg
ICAgICAgLy8gU2tpcCBvcHRpb24gZWxlbWVudHMsIG90aGVyIGR1ZHMKLSAgICAgICAgICAgIGlm
IChlbHQtPm5hbWUoKSA9PSB0YXJnZXROYW1lKSB7CisgICAgICAgICAgICBpZiAoZWx0LT5uYW1l
KCkgPT0gdGFyZ2V0TmFtZSkKICAgICAgICAgICAgICAgICByZXR1cm4gW0RPTUVsZW1lbnQgX2Vs
ZW1lbnRXaXRoSW1wbDplbHRdOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAg
IHJldHVybiBuaWw7CkBAIC0xMjEzLDggKzEyMTIsOCBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50
SW1wbCAqZm9ybUVsZW1lbnRGCiAgICAgTlNNdXRhYmxlQXJyYXkgKnJlc3VsdHMgPSBuaWw7CiAg
ICAgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybUVsZW1lbnQgPSBmb3JtRWxlbWVudEZyb21ET01F
bGVtZW50KGZvcm0pOwogICAgIGlmIChmb3JtRWxlbWVudCkgewotICAgICAgICBRUHRyVmVjdG9y
PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsPiAmZWxlbWVudHMgPSBmb3JtRWxlbWVudC0+Zm9y
bUVsZW1lbnRzOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGVsZW1lbnRz
LmNvdW50KCk7IGkrKykgeworICAgICAgICBWZWN0b3I8SFRNTEdlbmVyaWNGb3JtRWxlbWVudElt
cGwqPiYgZWxlbWVudHMgPSBmb3JtRWxlbWVudC0+Zm9ybUVsZW1lbnRzOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGVsZW1lbnRzLnNpemUoKTsgaSsrKSB7CiAgICAgICAg
ICAgICBpZiAoZWxlbWVudHMuYXQoaSktPmlzRW51bWVyYXRhYmxlKCkpIHsgLy8gU2tpcCBvcHRp
b24gZWxlbWVudHMsIG90aGVyIGR1ZHMKICAgICAgICAgICAgICAgICBET01FbGVtZW50ICpkZSA9
IFtET01FbGVtZW50IF9lbGVtZW50V2l0aEltcGw6ZWxlbWVudHMuYXQoaSldOwogICAgICAgICAg
ICAgICAgIGlmICghcmVzdWx0cykgewpJbmRleDoga3N2ZzIvc3ZnL1NWR1RleHRFbGVtZW50SW1w
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1RleHRFbGVtZW50SW1wbC5jcHAJKHJl
dmlzaW9uIDEyNDUyKQorKysga3N2ZzIvc3ZnL1NWR1RleHRFbGVtZW50SW1wbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDggKzM1LDYgQEAKICNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNDcmVh
dG9yLmg+CiAjaW5jbHVkZSA8a2NhbnZhcy9SZW5kZXJTVkdUZXh0Lmg+CiAKLSNpbmNsdWRlIDxx
dmVjdG9yLmg+Ci0KIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogCiBTVkdUZXh0RWxlbWVudEltcGw6
OlNWR1RleHRFbGVtZW50SW1wbChjb25zdCBLRE9NOjpRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBL
RE9NOjpEb2N1bWVudEltcGwgKmRvYykKSW5kZXg6IEZvcndhcmRpbmdIZWFkZXJzL3EzdmFsdWV2
ZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBGb3J3YXJkaW5nSGVhZGVycy9xM3ZhbHVldmVjdG9yLmgJ
KHJldmlzaW9uIDEyNDUyKQorKysgRm9yd2FyZGluZ0hlYWRlcnMvcTN2YWx1ZXZlY3Rvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xICswLDAgQEAKLSNpbXBvcnQgIktXUVZhbHVlVmVjdG9yLmgiCklu
ZGV4OiBGb3J3YXJkaW5nSGVhZGVycy9xcHRydmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gRm9yd2Fy
ZGluZ0hlYWRlcnMvcXB0cnZlY3Rvci5oCShyZXZpc2lvbiAxMjQ1MikKKysrIEZvcndhcmRpbmdI
ZWFkZXJzL3FwdHJ2ZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSArMCwwIEBACi0jaW5jbHVk
ZSAiS1dRUHRyVmVjdG9yLmgiCkluZGV4OiBGb3J3YXJkaW5nSGVhZGVycy9xdmVjdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gRm9yd2FyZGluZ0hlYWRlcnMvcXZlY3Rvci5oCShyZXZpc2lvbiAxMjQ1MikK
KysrIEZvcndhcmRpbmdIZWFkZXJzL3F2ZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSArMCww
IEBACi0jaW1wb3J0ICJLV1FQdHJWZWN0b3IuaCIKSW5kZXg6IGt3cS9LV1FDb21ib0JveC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGt3cS9LV1FDb21ib0JveC5oCShyZXZpc2lvbiAxMjQ1MikKKysrIGt3cS9L
V1FDb21ib0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBAIHByaXZhdGU6CiAK
ICAgICBtdXRhYmxlIGludCBfY3VycmVudEl0ZW07CiAKLSAgICAvLyBBIHZlY3RvcjxLV1FMaXN0
Qm94SXRlbT4gb3IgUVZhbHVlVmVjdG9yPEtXUUxpc3RCb3hJdGVtPiBtYXkgYmUgbW9yZSBlZmZp
Y2llbnQgZm9yIGxhcmdlIG1lbnVzLgorICAgIC8vIEEgVmVjdG9yPEtXUUxpc3RCb3hJdGVtPiBt
YXkgYmUgbW9yZSBlZmZpY2llbnQgZm9yIGxhcmdlIG1lbnVzLgogICAgIFFWYWx1ZUxpc3Q8S1dR
TGlzdEJveEl0ZW0+IF9pdGVtczsKICAgICBtdXRhYmxlIGJvb2wgX21lbnVQb3B1bGF0ZWQ7CiAK
SW5kZXg6IGt3cS9LV1FWZWN0b3JJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3dxL0tXUVZlY3Rvcklt
cGwuaAkocmV2aXNpb24gMTI0NTIpCisrKyBrd3EvS1dRVmVjdG9ySW1wbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgS1dRX1ZF
Q1RPUl9JTVBMX0gKLSNkZWZpbmUgS1dRX1ZFQ1RPUl9JTVBMX0gKLQotI2luY2x1ZGUgIktXUURl
Zi5oIgotCi1jbGFzcyBLV1FWZWN0b3JJbXBsCi17Ci0gIHB1YmxpYzoKLSAgICBLV1FWZWN0b3JJ
bXBsKHZvaWQgKCpkZWxldGVGdW5jKSh2b2lkICopKTsKLSAgICBLV1FWZWN0b3JJbXBsKHVpbnQg
c2l6ZSwgdm9pZCAoKmRlbGV0ZUZ1bmMpKHZvaWQgKikpOwotICAgIH5LV1FWZWN0b3JJbXBsKCk7
Ci0KLSAgICBLV1FWZWN0b3JJbXBsKGNvbnN0IEtXUVZlY3RvckltcGwgJnZpKTsKLSAgICBLV1FW
ZWN0b3JJbXBsICZhc3NpZ24oS1dRVmVjdG9ySW1wbCAmdmksIGJvb2wgZGVsSXRlbXMpOwotCi0g
ICAgdm9pZCBjbGVhcihib29sIGRlbEl0ZW1zKTsKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7
IHJldHVybiBtX2NvdW50ID09IDA7IH0KLSAgICB1aW50IGNvdW50KCkgY29uc3QgeyByZXR1cm4g
bV9jb3VudDsgfQotICAgIHVpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAg
IGJvb2wgcmVtb3ZlKHVpbnQgbiwgYm9vbCBkZWxJdGVtcyk7IAotICAgIGJvb2wgcmVzaXplKHVp
bnQgc2l6ZSwgYm9vbCBkZWxJdGVtcyk7Ci0gICAgYm9vbCBpbnNlcnQodWludCBuLCB2b2lkICpp
dGVtLCBib29sIGRlbEl0ZW1zKTsKLSAgICBib29sIGFwcGVuZCh2b2lkKiBpdGVtLCBib29sIGRl
bEl0ZW1zKTsKLSAgICB2b2lkICphdCh1aW50IG4pIGNvbnN0IHsgcmV0dXJuIG1fZGF0YVtuXTsg
fQotICAgIHZvaWQgKipkYXRhKCkgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgaW50IGZpbmRSZWYo
dm9pZCAqaXRlbSk7Ci0KLSAgcHJpdmF0ZToKLSAgICBLV1FWZWN0b3JJbXBsICZvcGVyYXRvcj0o
Y29uc3QgS1dRVmVjdG9ySW1wbCYpOwotCi0gICAgdm9pZCAqKm1fZGF0YTsKLSAgICB1aW50IG1f
c2l6ZTsKLSAgICB1aW50IG1fY291bnQ7Ci0gICAgdm9pZCAoKiBtX2RlbGV0ZUl0ZW1GdW5jdGlv
bikodm9pZCAqKTsKLX07Ci0KLSNlbmRpZgpJbmRleDoga3dxL0tXUVZlY3RvckltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGt3cS9LV1FWZWN0b3JJbXBsLmNwcAkocmV2aXNpb24gMTI0NTIpCisrKyBr
d3EvS1dRVmVjdG9ySW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTY5ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJLV1FWZWN0
b3JJbXBsLmgiCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotS1dRVmVjdG9ySW1wbDo6S1dRVmVj
dG9ySW1wbCh2b2lkICgqZikodm9pZCAqKSkKLSAgICA6IG1fZGF0YSgwKSwgbV9zaXplKDApLCBt
X2NvdW50KDApLCBtX2RlbGV0ZUl0ZW1GdW5jdGlvbihmKQotewotfQotCi1LV1FWZWN0b3JJbXBs
OjpLV1FWZWN0b3JJbXBsKHVpbnQgc2l6ZSwgdm9pZCAoKmYpKHZvaWQgKikpCi0gICAgOiBtX2Rh
dGEoKHZvaWQgKiopZmFzdE1hbGxvYyhzaXplICogc2l6ZW9mKHZvaWQgKikpKQotICAgICwgbV9z
aXplKHNpemUpLCBtX2NvdW50KDApLCBtX2RlbGV0ZUl0ZW1GdW5jdGlvbihmKQotewotICAgIG1l
bXNldChtX2RhdGEsIDAsIHNpemUgKiBzaXplb2Yodm9pZCAqKSk7Ci19Ci0KLUtXUVZlY3Rvcklt
cGw6OktXUVZlY3RvckltcGwoY29uc3QgS1dRVmVjdG9ySW1wbCAmdmkpCi0gICAgOiBtX2RhdGEo
dmkubV9kYXRhID8gKHZvaWQgKiopZmFzdE1hbGxvYyh2aS5tX3NpemUgKiBzaXplb2Yodm9pZCAq
KSkgOiAwKQotICAgICwgbV9zaXplKHZpLm1fc2l6ZSksIG1fY291bnQodmkubV9jb3VudCkKLSAg
ICAsIG1fZGVsZXRlSXRlbUZ1bmN0aW9uKHZpLm1fZGVsZXRlSXRlbUZ1bmN0aW9uKQotewotICAg
IG1lbWNweShtX2RhdGEsIHZpLm1fZGF0YSwgdmkubV9zaXplICogc2l6ZW9mKHZvaWQgKikpOwot
fQotCi1LV1FWZWN0b3JJbXBsOjp+S1dRVmVjdG9ySW1wbCgpCi17Ci0gICAgZmFzdEZyZWUobV9k
YXRhKTsKLX0KLQotdm9pZCBLV1FWZWN0b3JJbXBsOjpjbGVhcihib29sIGRlbEl0ZW1zKQotewot
ICAgIGlmIChkZWxJdGVtcykgewotICAgICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBtX3NpemU7
ICsraSkgewotICAgICAgICAgICAgdm9pZCAqaXRlbSA9IG1fZGF0YVtpXTsKLSAgICAgICAgICAg
IGlmIChpdGVtKSB7Ci0gICAgICAgICAgICAgICAgbV9kZWxldGVJdGVtRnVuY3Rpb24oaXRlbSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmYXN0RnJlZShtX2RhdGEp
OwotICAgIG1fZGF0YSA9IDA7Ci0gICAgbV9zaXplID0gMDsKLSAgICBtX2NvdW50ID0gMDsKLX0K
LQotYm9vbCBLV1FWZWN0b3JJbXBsOjpyZW1vdmUodWludCBuLCBib29sIGRlbEl0ZW1zKQotewot
ICAgIGlmIChuID49IG1fc2l6ZSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IAotICAgIHZvaWQgKml0ZW0gPSBtX2RhdGFbbl07Ci0gICAgaWYgKGl0ZW0pIHsKLSAgICAgICAg
aWYgKGRlbEl0ZW1zKSB7Ci0gICAgICAgICAgICBtX2RlbGV0ZUl0ZW1GdW5jdGlvbihpdGVtKTsK
LSAgICAgICAgfQotICAgICAgICAtLW1fY291bnQ7Ci0gICAgfQotICAgIG1fZGF0YVtuXSA9IDA7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgS1dRVmVjdG9ySW1wbDo6cmVzaXplKHVpbnQg
c2l6ZSwgYm9vbCBkZWxJdGVtcykKLXsKLSAgICB1aW50IG9sZFNpemUgPSBtX3NpemU7Ci0gICAg
bV9zaXplID0gc2l6ZTsKLSAgICAKLSAgICBmb3IgKHVpbnQgaSA9IHNpemU7IGkgPCBvbGRTaXpl
OyArK2kpIHsKLSAgICAgICAgdm9pZCAqaXRlbSA9IG1fZGF0YVtpXTsKLSAgICAgICAgaWYgKGl0
ZW0pIHsKLSAgICAgICAgICAgIGlmIChkZWxJdGVtcykgewotICAgICAgICAgICAgICAgIG1fZGVs
ZXRlSXRlbUZ1bmN0aW9uKGl0ZW0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLS1tX2Nv
dW50OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9zaXplID0gc2l6ZTsKLSAgICBtX2RhdGEg
PSAodm9pZCAqKilmYXN0UmVhbGxvYyhtX2RhdGEsIHNpemUgKiBzaXplb2Yodm9pZCAqKSk7Ci0K
LSAgICBpZiAoc2l6ZSA+IG9sZFNpemUpIHsKLSAgICAgICAgbWVtc2V0KCZtX2RhdGFbb2xkU2l6
ZV0sIDAsIChzaXplIC0gb2xkU2l6ZSkgKiBzaXplb2Yodm9pZCAqKSk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgS1dRVmVjdG9ySW1wbDo6aW5zZXJ0KHVpbnQgbiwgdm9p
ZCAqaXRlbSwgYm9vbCBkZWxJdGVtcykKLXsKLSAgICBpZiAobiA+PSBtX3NpemUpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHZvaWQgKm9sZEl0ZW0gPSBtX2RhdGFbbl07Ci0gICAgaWYg
KG9sZEl0ZW0pIHsKLSAgICAgICAgaWYgKGRlbEl0ZW1zKSB7Ci0gICAgICAgICAgICBtX2RlbGV0
ZUl0ZW1GdW5jdGlvbihvbGRJdGVtKTsKLSAgICAgICAgfQotICAgICAgICAtLW1fY291bnQ7Ci0g
ICAgfQotICAgIAotICAgIG1fZGF0YVtuXSA9IGl0ZW07Ci0gICAgaWYgKGl0ZW0pIHsKLSAgICAg
ICAgKyttX2NvdW50OwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBL
V1FWZWN0b3JJbXBsOjphcHBlbmQodm9pZCogaXRlbSwgYm9vbCBkZWxJdGVtcykKLXsKLSAgICBp
ZiAobV9zaXplID09IG1fY291bnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhc3NlcnQo
IW1fZGF0YVttX2NvdW50XSk7Ci0gICAgaWYgKGl0ZW0pCi0gICAgICAgIG1fZGF0YVttX2NvdW50
KytdID0gaXRlbTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW50IEtXUVZlY3RvckltcGw6OmZp
bmRSZWYodm9pZCAqaXRlbSkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb3Vu
dDsgaSsrKSB7Ci0gICAgICAgIGlmIChtX2RhdGFbaV0gPT0gaXRlbSkgewotICAgICAgICAgICAg
cmV0dXJuIGk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIC0xOwotfQotCi1L
V1FWZWN0b3JJbXBsICZLV1FWZWN0b3JJbXBsOjphc3NpZ24oS1dRVmVjdG9ySW1wbCAmdmksIGJv
b2wgZGVsSXRlbXMpCi17Ci0gICAgY2xlYXIoZGVsSXRlbXMpOwotICAgIAotICAgIG1fZGF0YSA9
IHZpLm1fZGF0YSA/ICh2b2lkICoqKWZhc3RNYWxsb2ModmkubV9zaXplICogc2l6ZW9mKHZvaWQg
KikpIDogMDsKLSAgICBtX3NpemUgPSB2aS5tX3NpemU7Ci0gICAgbV9jb3VudCA9IHZpLm1fY291
bnQ7Ci0gICAgbV9kZWxldGVJdGVtRnVuY3Rpb24gPSB2aS5tX2RlbGV0ZUl0ZW1GdW5jdGlvbjsK
LQotICAgIG1lbWNweShtX2RhdGEsIHZpLm1fZGF0YSwgdmkubV9zaXplICogc2l6ZW9mKHZvaWQg
KikpOwotICAgIAotICAgIHJldHVybiAqdGhpczsKLX0KSW5kZXg6IGt3cS9LV1FQdHJWZWN0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrd3EvS1dRUHRyVmVjdG9yLmgJKHJldmlzaW9uIDEyNDUyKQorKysg
a3dxL0tXUVB0clZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpZm5kZWYgUVZFQ1RPUl9IXwotI2RlZmluZSBRVkVDVE9SX0hfCi0K
LSNpbmNsdWRlICJLV1FEZWYuaCIKLSNpbmNsdWRlICJLV1FDb2xsZWN0aW9uLmgiCi0KLSNpbmNs
dWRlICJLV1FWZWN0b3JJbXBsLmgiCi0KLWNsYXNzIFFHVmVjdG9yIDogcHVibGljIFFQdHJDb2xs
ZWN0aW9uCi17Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBpbnQgY29tcGFyZUl0ZW1zKHZvaWQgKmEs
IHZvaWQgKmIpID0gMDsKLX07Ci0KLS8vIGNsYXNzIFFQdHJWZWN0b3IgPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci10ZW1wbGF0
ZTxjbGFzcyBUPiBjbGFzcyBRUHRyVmVjdG9yIDogcHVibGljIFFHVmVjdG9yICB7Ci1wdWJsaWM6
Ci0gICAgUVB0clZlY3RvcigpIDogaW1wbChkZWxldGVGdW5jKSB7fQotICAgIFFQdHJWZWN0b3Io
dWludCBzaXplKSA6IGltcGwoc2l6ZSwgZGVsZXRlRnVuYykge30KLSAgICB+UVB0clZlY3Rvcigp
IHsgaWYgKGRlbF9pdGVtKSB7IGltcGwuY2xlYXIoZGVsX2l0ZW0pOyB9IH0KLQotICAgIHZvaWQg
Y2xlYXIoKSB7IGltcGwuY2xlYXIoZGVsX2l0ZW0pOyB9Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29u
c3QgeyByZXR1cm4gaW1wbC5pc0VtcHR5KCk7IH0KLSAgICB1aW50IGNvdW50KCkgY29uc3QgeyBy
ZXR1cm4gaW1wbC5jb3VudCgpOyB9Ci0gICAgdWludCBzaXplKCkgY29uc3QgeyByZXR1cm4gaW1w
bC5zaXplKCk7IH0KLSAgICBib29sIHJlbW92ZSh1aW50IG4pIHsgcmV0dXJuIGltcGwucmVtb3Zl
KG4sIGRlbF9pdGVtKTsgfQotICAgIGJvb2wgcmVzaXplKHVpbnQgc2l6ZSkgeyByZXR1cm4gaW1w
bC5yZXNpemUoc2l6ZSwgZGVsX2l0ZW0pOyB9Ci0gICAgYm9vbCBpbnNlcnQodWludCBuLCBUICpp
dGVtKSB7cmV0dXJuIGltcGwuaW5zZXJ0KG4sIGl0ZW0sIGRlbF9pdGVtKTsgfQotICAgIFQgKmF0
KGludCBuKSBjb25zdCB7cmV0dXJuIChUICopaW1wbC5hdChuKTsgfQotICAgIFQgKipkYXRhKCkg
e3JldHVybiAoVCAqKilpbXBsLmRhdGEoKTsgfQotICAgIGludCBmaW5kUmVmKFQgKml0ZW0pIHty
ZXR1cm4gaW1wbC5maW5kUmVmKGl0ZW0pO30KLQotICAgIGJvb2wgYXBwZW5kKFQqIGl0ZW0pIHsg
cmV0dXJuIGltcGwuYXBwZW5kKGl0ZW0sIGRlbF9pdGVtKTsgfQotCi0gICAgdmlydHVhbCBpbnQg
Y29tcGFyZUl0ZW1zKHZvaWQgKmEsIHZvaWQgKmIpIHsgcmV0dXJuIGEgIT0gYjsgfQotCi0gICAg
VCAqb3BlcmF0b3JbXSh1aW50IG4pIGNvbnN0IHtyZXR1cm4gKFQgKilpbXBsLmF0KG4pOyB9Ci0g
ICAgUVB0clZlY3RvciAmb3BlcmF0b3I9KGNvbnN0IFFQdHJWZWN0b3IgJnYpIAotICAgIHsgaW1w
bC5hc3NpZ24odi5pbXBsLGRlbF9pdGVtKTsgUVB0ckNvbGxlY3Rpb246Om9wZXJhdG9yPSh2KTsg
cmV0dXJuICp0aGlzOyB9Ci0KLSBwcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUZ1bmMo
dm9pZCAqaXRlbSkgeyBkZWxldGUgKFQgKilpdGVtOyB9Ci0KLSAgICBLV1FWZWN0b3JJbXBsIGlt
cGw7Ci19OwotCi0jZW5kaWYKSW5kZXg6IGt3cS9LV1FWYWx1ZVZlY3Rvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGt3cS9LV1FWYWx1ZVZlY3Rvci5oCShyZXZpc2lvbiAxMjQ1MikKKysrIGt3cS9LV1FWYWx1
ZVZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpZm5kZWYgUVZBTFVFVkVDVE9SX0hfCi0jZGVmaW5lIFFWQUxVRVZFQ1RPUl9IXwot
Ci0jaW5jbHVkZSAiS1dRVmFsdWVMaXN0LmgiCi0KLXRlbXBsYXRlIDxjbGFzcyBUPiAKLWNsYXNz
IFFWYWx1ZVZlY3RvciA6IHB1YmxpYyBRVmFsdWVMaXN0PFQ+IHsKLQotfTsKLQotI2RlZmluZSBR
M1ZhbHVlVmVjdG9yIFFWYWx1ZVZlY3RvcgotCi0jZW5kaWYKLQpJbmRleDoga3dxL0tXUUxpc3RC
b3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBrd3EvS1dRTGlzdEJveC5oCShyZXZpc2lvbiAxMjQ1MikKKysr
IGt3cS9LV1FMaXN0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICB2b2lkIGFwcGVuZEl0ZW0oY29uc3QgUVN0cmluZyAmLCBLV1FMaXN0
Qm94SXRlbVR5cGUsIGJvb2wpOwogCi0gICAgLy8gQSB2ZWN0b3I8S1dRTGlzdEJveEl0ZW0+IG9y
IFFWYWx1ZVZlY3RvcjxLV1FMaXN0Qm94SXRlbT4gbWlnaHQgYmUgbW9yZSBlZmZpY2llbnQgZm9y
IGxhcmdlIGxpc3RzLgorICAgIC8vIEEgVmVjdG9yPEtXUUxpc3RCb3hJdGVtPiBtaWdodCBiZSBt
b3JlIGVmZmljaWVudCBmb3IgbGFyZ2UgbGlzdHMuCiAgICAgUVZhbHVlTGlzdDxLV1FMaXN0Qm94
SXRlbT4gX2l0ZW1zOwogCiAgICAgYm9vbCBfY2hhbmdpbmdTZWxlY3Rpb247CkluZGV4OiBrd3Ev
S1dRUmVuZGVyVHJlZURlYnVnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrd3EvS1dRUmVuZGVyVHJlZURl
YnVnLmNwcAkocmV2aXNpb24gMTI0NTIpCisrKyBrd3EvS1dRUmVuZGVyVHJlZURlYnVnLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQAogCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJLV1FUZXh0U3RyZWFtLmgiCi0jaW5jbHVkZSAiS1dRUHRyVmVjdG9yLmgiCisjaW5j
bHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBET007CiB1c2luZyBu
YW1lc3BhY2Uga2h0bWw7CkBAIC0zNTQsMjEgKzM1NCwyMSBAQCBzdGF0aWMgdm9pZCB3cml0ZUxh
eWVycyhRVGV4dFN0cmVhbSAmdHMsCiAgICAgbC0+dXBkYXRlWk9yZGVyTGlzdHMoKTsKIAogICAg
IGJvb2wgc2hvdWxkUGFpbnQgPSBsLT5pbnRlcnNlY3RzRGFtYWdlUmVjdChsYXllckJvdW5kcywg
ZGFtYWdlUmVjdCk7Ci0gICAgUVB0clZlY3RvcjxSZW5kZXJMYXllcj4qIG5lZ0xpc3QgPSBsLT5u
ZWdaT3JkZXJMaXN0KCk7Ci0gICAgaWYgKHNob3VsZFBhaW50ICYmIG5lZ0xpc3QgJiYgbmVnTGlz
dC0+Y291bnQoKSA+IDApCisgICAgVmVjdG9yPFJlbmRlckxheWVyKj4qIG5lZ0xpc3QgPSBsLT5u
ZWdaT3JkZXJMaXN0KCk7CisgICAgaWYgKHNob3VsZFBhaW50ICYmIG5lZ0xpc3QgJiYgbmVnTGlz
dC0+c2l6ZSgpID4gMCkKICAgICAgICAgd3JpdGUodHMsICpsLCBsYXllckJvdW5kcywgZGFtYWdl
UmVjdCwgY2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdCwgLTEsIGluZGVudCk7CiAKICAgICBp
ZiAobmVnTGlzdCkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IG5lZ0xpc3Qt
PmNvdW50KCk7ICsraSkKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBuZWdMaXN0
LT5zaXplKCk7ICsraSkKICAgICAgICAgICAgIHdyaXRlTGF5ZXJzKHRzLCByb290TGF5ZXIsIG5l
Z0xpc3QtPmF0KGkpLCBwYWludERpcnR5UmVjdCwgaW5kZW50KTsKICAgICB9CiAKICAgICBpZiAo
c2hvdWxkUGFpbnQpCi0gICAgICAgIHdyaXRlKHRzLCAqbCwgbGF5ZXJCb3VuZHMsIGRhbWFnZVJl
Y3QsIGNsaXBSZWN0VG9BcHBseSwgb3V0bGluZVJlY3QsIG5lZ0xpc3QgJiYgbmVnTGlzdC0+Y291
bnQoKSA+IDAsIGluZGVudCk7CisgICAgICAgIHdyaXRlKHRzLCAqbCwgbGF5ZXJCb3VuZHMsIGRh
bWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBseSwgb3V0bGluZVJlY3QsIG5lZ0xpc3QgJiYgbmVnTGlz
dC0+c2l6ZSgpID4gMCwgaW5kZW50KTsKIAotICAgIFFQdHJWZWN0b3I8UmVuZGVyTGF5ZXI+KiBw
b3NMaXN0ID0gbC0+cG9zWk9yZGVyTGlzdCgpOworICAgIFZlY3RvcjxSZW5kZXJMYXllcio+KiBw
b3NMaXN0ID0gbC0+cG9zWk9yZGVyTGlzdCgpOwogICAgIGlmIChwb3NMaXN0KSB7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gcG9zTGlzdC0+Y291bnQoKTsgKytpKQorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IHBvc0xpc3QtPnNpemUoKTsgKytpKQogICAgICAg
ICAgICAgd3JpdGVMYXllcnModHMsIHJvb3RMYXllciwgcG9zTGlzdC0+YXQoaSksIHBhaW50RGly
dHlSZWN0LCBpbmRlbnQpOwogICAgIH0KIH0KSW5kZXg6IGxvYWRlci9sb2FkZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGxvYWRlci9sb2FkZXIuY3BwCShyZXZpc2lvbiAxMjQ1MikKKysrIGxvYWRlci9s
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSA8a2lv
L2pvYi5oPgogI2luY2x1ZGUgPGtpby9qb2JjbGFzc2VzLmg+CiAjaW5jbHVkZSA8a3htbGNvcmUv
QXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHFwdHJ2ZWN0b3IuaD4KKyNpbmNsdWRlIDxreG1sY29y
ZS9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0yMzQsMTAgKzIzNCwxMCBA
QCBpbnQgTG9hZGVyOjpudW1SZXF1ZXN0cyggRG9jTG9hZGVyKiBkbCApCiAgICAgcmV0dXJuIHJl
czsKIH0KIAotdm9pZCBMb2FkZXI6OmNhbmNlbFJlcXVlc3RzKCBEb2NMb2FkZXIqIGRsICkKK3Zv
aWQgTG9hZGVyOjpjYW5jZWxSZXF1ZXN0cyhEb2NMb2FkZXIqIGRsKQogewotICAgIFFQdHJMaXN0
SXRlcmF0b3I8UmVxdWVzdD4gcEl0KCBtX3JlcXVlc3RzUGVuZGluZyApOwotICAgIHdoaWxlICgg
cEl0LmN1cnJlbnQoKSApCisgICAgUVB0ckxpc3RJdGVyYXRvcjxSZXF1ZXN0PiBwSXQobV9yZXF1
ZXN0c1BlbmRpbmcpOworICAgIHdoaWxlIChwSXQuY3VycmVudCgpKQogICAgIHsKICAgICAgICAg
aWYgKHBJdC5jdXJyZW50KCktPm1fZG9jTG9hZGVyID09IGRsKSB7CiAgICAgICAgICAgICBDYWNo
ZTo6cmVtb3ZlKCBwSXQuY3VycmVudCgpLT5vYmplY3QgKTsKQEAgLTI0NywxNSArMjQ3LDE2IEBA
IHZvaWQgTG9hZGVyOjpjYW5jZWxSZXF1ZXN0cyggRG9jTG9hZGVyKiAKICAgICAgICAgICAgICsr
cEl0OwogICAgIH0KIAotICAgIFFQdHJWZWN0b3I8S0lPOjpKb2I+IGpvYnNUb0NhbmNlbChtX3Jl
cXVlc3RzTG9hZGluZy5zaXplKCkpOworICAgIFZlY3RvcjxLSU86OkpvYiosIDI1Nj4gam9ic1Rv
Q2FuY2VsOworCiAgICAgUmVxdWVzdE1hcDo6aXRlcmF0b3IgZW5kID0gbV9yZXF1ZXN0c0xvYWRp
bmcuZW5kKCk7CiAgICAgZm9yIChSZXF1ZXN0TWFwOjppdGVyYXRvciBpID0gbV9yZXF1ZXN0c0xv
YWRpbmcuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkgewogICAgICAgICBSZXF1ZXN0KiByID0gaS0+
c2Vjb25kOwogICAgICAgICBpZiAoci0+bV9kb2NMb2FkZXIgPT0gZGwpCiAgICAgICAgICAgICBq
b2JzVG9DYW5jZWwuYXBwZW5kKGktPmZpcnN0KTsKICAgICB9Ci0gICAgdW5zaWduZWQgY291bnQg
PSBqb2JzVG9DYW5jZWwuY291bnQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291
bnQ7ICsraSkgeworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGpvYnNUb0NhbmNlbC5z
aXplKCk7ICsraSkgewogICAgICAgICBLSU86OkpvYiogam9iID0gam9ic1RvQ2FuY2VsW2ldOwog
ICAgICAgICBSZXF1ZXN0KiByID0gbV9yZXF1ZXN0c0xvYWRpbmcuZ2V0KGpvYik7CiAgICAgICAg
IG1fcmVxdWVzdHNMb2FkaW5nLnJlbW92ZShqb2IpOwo=
</data>
<flag name="review"
          id="1457"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>