<?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>6611</bug_id>
          
          <creation_ts>2006-01-17 03:17:29 -0800</creation_ts>
          <short_desc>add assertions to check correct use of hash table iterators</short_desc>
          <delta_ts>2006-01-17 20:32:06 -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>WebKit Misc.</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>mjs</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>28681</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-17 03:17:29 -0800</bug_when>
    <thetext>If you use an iterator for a hash table after that hash table has been modified, bad things can happen.

We can add assertions to catch those cases in the debugger.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28682</commentid>
    <comment_count>1</comment_count>
      <attachid>5736</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-17 03:18:46 -0800</bug_when>
    <thetext>Created attachment 5736
add new CHECK_HASHTABLE_ITERATORS, make iterator wrap const iterator</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28739</commentid>
    <comment_count>2</comment_count>
      <attachid>5736</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2006-01-17 15:55:21 -0800</bug_when>
    <thetext>Comment on attachment 5736
add new CHECK_HASHTABLE_ITERATORS, make iterator wrap const iterator

r=me</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5736</attachid>
            <date>2006-01-17 03:18:46 -0800</date>
            <delta_ts>2006-01-17 15:55:21 -0800</delta_ts>
            <desc>add new CHECK_HASHTABLE_ITERATORS, make iterator wrap const iterator</desc>
            <filename>HashPatch.txt</filename>
            <type>text/plain</type>
            <size>45294</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IGt4bWxjb3JlL0hhc2hUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGt4bWxjb3JlL0hhc2hU
YWJsZS5oCShyZXZpc2lvbiAxMjE0OCkKKysrIGt4bWxjb3JlL0hhc2hUYWJsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLy8gLSotIG1vZGU6IGMrKzsgYy1iYXNpYy1vZmZzZXQ6
IDQgLSotCiAvKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBsaWJyYXJpZXMKLSAq
IENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChD
KSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTI2LDE4ICsyNiwyMyBAQAogI2luY2x1ZGUgIkZhc3RNYWxsb2MuaCIKICNpbmNsdWRlICJIYXNo
VHJhaXRzLmgiCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNs
dWRlIDxhbGdvcml0aG0+CiAKIG5hbWVzcGFjZSBLWE1MQ29yZSB7CiAKICNkZWZpbmUgRFVNUF9I
QVNIVEFCTEVfU1RBVFMgMAogI2RlZmluZSBDSEVDS19IQVNIVEFCTEVfQ09OU0lTVEVOQ1kgMAot
ICAgIAorCisjaWYgTkRFQlVHCisjZGVmaW5lIENIRUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMgMAor
I2Vsc2UKKyNkZWZpbmUgQ0hFQ0tfSEFTSFRBQkxFX0lURVJBVE9SUyAxCisjZW5kaWYKKwogI2lm
IERVTVBfSEFTSFRBQkxFX1NUQVRTCi0gICAgCisKICAgICBzdHJ1Y3QgSGFzaFRhYmxlU3RhdHMg
ewotICAgICAgICB+SGFzaFRhYmxlU3RhdHMoKTsgCisgICAgICAgIH5IYXNoVGFibGVTdGF0cygp
OwogICAgICAgICBzdGF0aWMgaW50IG51bUFjY2Vzc2VzOwogICAgICAgICBzdGF0aWMgaW50IG51
bUNvbGxpc2lvbnM7CiAgICAgICAgIHN0YXRpYyBpbnQgY29sbGlzaW9uR3JhcGhbNDA5Nl07CkBA
IC00NywxODUgKzUyLDIxMyBAQAogICAgICAgICBzdGF0aWMgaW50IG51bVJlaW5zZXJ0czsKICAg
ICAgICAgc3RhdGljIHZvaWQgcmVjb3JkQ29sbGlzaW9uQXRDb3VudChpbnQgY291bnQpOwogICAg
IH07Ci0gICAgCisKICNlbmRpZgotICAgIAotI2lmICFDSEVDS19IQVNIVEFCTEVfQ09OU0lTVEVO
Q1kKLSNkZWZpbmUgY2hlY2tUYWJsZUNvbnNpc3RlbmN5KCkgKCh2b2lkKTApCi0jZGVmaW5lIGNo
ZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKSAoKHZvaWQpMCkKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIGNvbnN0IEtleSYgRXh0cmFjdEtleShjb25z
dCBWYWx1ZSYpLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVu
YW1lIEtleVRyYWl0cz4KKyAgICBjbGFzcyBIYXNoVGFibGU7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgY29uc3QgS2V5JiBFeHRyYWN0S2V5KGNvbnN0IFZhbHVl
JiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzPgorICAgIGNsYXNzIEhhc2hUYWJsZUl0ZXJhdG9yOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIGNvbnN0IEtleSYgRXh0cmFjdEtleShjb25zdCBWYWx1
ZSYpLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtl
eVRyYWl0cz4KKyAgICBjbGFzcyBIYXNoVGFibGVDb25zdEl0ZXJhdG9yOworCisjaWYgQ0hFQ0tf
SEFTSFRBQkxFX0lURVJBVE9SUworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUg
VmFsdWUsIGNvbnN0IEtleSYgRXh0cmFjdEtleShjb25zdCBWYWx1ZSYpLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB2b2lk
IGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qLAorICAgICAgICBIYXNoVGFibGVDb25zdEl0
ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5
VHJhaXRzPiopOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwg
Y29uc3QgS2V5JiBFeHRyYWN0S2V5KGNvbnN0IFZhbHVlJiksIHR5cGVuYW1lIEhhc2hGdW5jdGlv
bnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHZvaWQgcmVtb3Zl
SXRlcmF0b3IoSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4qKTsKKyNlbHNlCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgY29uc3QgS2V5JiBFeHRyYWN0S2V5KGNvbnN0
IFZhbHVlJiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzPgorICAgIGlubGluZSB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJs
ZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0
cz4qLAorICAgICAgICBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RL
ZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiopIHsgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgY29uc3QgS2V5JiBFeHRyYWN0S2V5KGNv
bnN0IFZhbHVlJiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzPgorICAgIGlubGluZSB2b2lkIHJlbW92ZUl0ZXJhdG9yKEhhc2hUYWJs
ZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFjdEtleSwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzLCBLZXlUcmFpdHM+KikgeyB9CiAjZW5kaWYKLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBjb25zdCBLZXkmIEV4dHJhY3RLZXkoY29uc3QgVmFsdWUg
JiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzPgotICAgIGNsYXNzIEhhc2hUYWJsZTsKLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBjb25zdCBLZXkmIEV4dHJhY3RLZXkoY29uc3QgVmFsdWUg
JiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzPgotICAgIGNsYXNzIEhhc2hUYWJsZUl0ZXJhdG9yIHsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIGNvbnN0IEtleSYgRXh0cmFjdEtleShjb25zdCBW
YWx1ZSYpLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4KKyAgICBjbGFzcyBIYXNoVGFibGVDb25zdEl0ZXJhdG9yIHsKICAgICBwcml2
YXRlOgogICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gSGFzaFRhYmxlVHlwZTsKICAgICAgICAg
dHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFz
aFRhYmxlQ29uc3RJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz4gY29uc3RfaXRlcmF0b3I7CiAgICAgICAgIHR5cGVkZWYgVmFs
dWUgVmFsdWVUeXBlOwotICAgICAgICB0eXBlZGVmIFZhbHVlVHlwZSYgUmVmZXJlbmNlVHlwZTsK
LSAgICAgICAgdHlwZWRlZiBWYWx1ZVR5cGUgKlBvaW50ZXJUeXBlOwotICAgICAgICAKKyAgICAg
ICAgdHlwZWRlZiBjb25zdCBWYWx1ZVR5cGUmIFJlZmVyZW5jZVR5cGU7CisgICAgICAgIHR5cGVk
ZWYgY29uc3QgVmFsdWVUeXBlKiBQb2ludGVyVHlwZTsKKwogICAgICAgICBmcmllbmQgY2xhc3Mg
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzPjsKLSAgICAgICAgCi0gICAgICAgIHZvaWQgc2tpcEVtcHR5QnVja2V0cygpIAor
ICAgICAgICBmcmllbmQgY2xhc3MgSGFzaFRhYmxlSXRlcmF0b3I8S2V5LCBWYWx1ZSwgRXh0cmFj
dEtleSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OworCisgICAgICAgIHZvaWQg
c2tpcEVtcHR5QnVja2V0cygpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHdoaWxlIChtX3Bvc2l0
aW9uICE9IG1fZW5kUG9zaXRpb24gJiYgKEhhc2hUYWJsZVR5cGU6OmlzRW1wdHlPckRlbGV0ZWRC
dWNrZXQoKm1fcG9zaXRpb24pKSkgeworICAgICAgICAgICAgd2hpbGUgKG1fcG9zaXRpb24gIT0g
bV9lbmRQb3NpdGlvbiAmJiBIYXNoVGFibGVUeXBlOjppc0VtcHR5T3JEZWxldGVkQnVja2V0KCpt
X3Bvc2l0aW9uKSkKICAgICAgICAgICAgICAgICArK21fcG9zaXRpb247Ci0gICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEhhc2hUYWJsZUl0ZXJhdG9yKFBvaW50ZXJU
eXBlIHBvc2l0aW9uLCBQb2ludGVyVHlwZSBlbmRQb3NpdGlvbikgCi0gICAgICAgICAgICA6IG1f
cG9zaXRpb24ocG9zaXRpb24pLCBtX2VuZFBvc2l0aW9uKGVuZFBvc2l0aW9uKSAKLSAgICAgICAg
eyAKKworICAgICAgICBIYXNoVGFibGVDb25zdEl0ZXJhdG9yKGNvbnN0IEhhc2hUYWJsZVR5cGUq
IHRhYmxlLCBQb2ludGVyVHlwZSBwb3NpdGlvbiwgUG9pbnRlclR5cGUgZW5kUG9zaXRpb24pCisg
ICAgICAgICAgICA6IG1fcG9zaXRpb24ocG9zaXRpb24pLCBtX2VuZFBvc2l0aW9uKGVuZFBvc2l0
aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBhZGRJdGVyYXRvcih0YWJsZSwgdGhpcyk7CiAg
ICAgICAgICAgICBza2lwRW1wdHlCdWNrZXRzKCk7CiAgICAgICAgIH0KKwogICAgIHB1YmxpYzoK
LSAgICAgICAgSGFzaFRhYmxlSXRlcmF0b3IoKSB7fQotICAgICAgICAKLSAgICAgICAgLy8gZGVm
YXVsdCBjb3B5LCBhc3NpZ25tZW50IGFuZCBkZXN0cnVjdG9yIGFyZSBvawotICAgICAgICAKLSAg
ICAgICAgUmVmZXJlbmNlVHlwZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqbV9wb3NpdGlv
bjsgfQotICAgICAgICBQb2ludGVyVHlwZSBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihv
cGVyYXRvciooKSk7IH0KLSAgICAgICAgCi0gICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkK
KyAgICAgICAgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcigpCiAgICAgICAgIHsKKyAgICAgICAgICAg
IGFkZEl0ZXJhdG9yKDAsIHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgSGFzaFRhYmxlQ29u
c3RJdGVyYXRvcihjb25zdCBpdGVyYXRvciYgb3RoZXIpCisgICAgICAgICAgICA6IG1fcG9zaXRp
b24ob3RoZXIubV9wb3NpdGlvbiksIG1fZW5kUG9zaXRpb24ob3RoZXIubV9lbmRQb3NpdGlvbikK
KyAgICAgICAgeworI2lmIENIRUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMKKyAgICAgICAgICAgIGFk
ZEl0ZXJhdG9yKG90aGVyLm1fdGFibGUsIHRoaXMpOworI2VuZGlmCisgICAgICAgIH0KKworICAg
ICAgICAvLyBkZWZhdWx0IGNvcHksIGFzc2lnbm1lbnQgYW5kIGRlc3RydWN0b3IgYXJlIE9LIGlm
IENIRUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMgaXMgMAorCisjaWYgQ0hFQ0tfSEFTSFRBQkxFX0lU
RVJBVE9SUworICAgICAgICB+SGFzaFRhYmxlQ29uc3RJdGVyYXRvcigpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJlbW92ZUl0ZXJhdG9yKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgSGFz
aFRhYmxlQ29uc3RJdGVyYXRvcihjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoZXIpCisgICAgICAg
ICAgICA6IG1fcG9zaXRpb24ob3RoZXIubV9wb3NpdGlvbiksIG1fZW5kUG9zaXRpb24ob3RoZXIu
bV9lbmRQb3NpdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgYWRkSXRlcmF0b3Iob3RoZXIu
bV90YWJsZSwgdGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBjb25zdF9pdGVyYXRvciYgb3Bl
cmF0b3I9KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikKKyAgICAgICAgeworICAgICAgICAg
ICAgbV9wb3NpdGlvbiA9IG90aGVyLm1fcG9zaXRpb247CisgICAgICAgICAgICBtX2VuZFBvc2l0
aW9uID0gb3RoZXIubV9lbmRQb3NpdGlvbjsKKworICAgICAgICAgICAgcmVtb3ZlSXRlcmF0b3Io
dGhpcyk7CisgICAgICAgICAgICBhZGRJdGVyYXRvcihvdGhlci5tX3RhYmxlLCB0aGlzKTsKKyAg
ICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgUmVmZXJlbmNlVHlwZSBvcGVyYXRvciooKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgICAgICBy
ZXR1cm4gKm1fcG9zaXRpb247CisgICAgICAgIH0KKyAgICAgICAgUG9pbnRlclR5cGUgb3BlcmF0
b3ItPigpIGNvbnN0IHsgcmV0dXJuICYqKnRoaXM7IH0KKworICAgICAgICBjb25zdF9pdGVyYXRv
ciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsK
KyAgICAgICAgICAgIGFzc2VydChtX3Bvc2l0aW9uICE9IG1fZW5kUG9zaXRpb24pOwogICAgICAg
ICAgICAgKyttX3Bvc2l0aW9uOwogICAgICAgICAgICAgc2tpcEVtcHR5QnVja2V0cygpOwogICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8v
IHBvc3RmaXggKysgaW50ZW50aW9uYWxseSBvbWl0dGVkCi0gICAgICAgIAorCiAgICAgICAgIC8v
IENvbXBhcmlzb24uCi0gICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3Ro
ZXIpIGNvbnN0Ci0gICAgICAgIHsgCi0gICAgICAgICAgICByZXR1cm4gbV9wb3NpdGlvbiA9PSBv
dGhlci5tX3Bvc2l0aW9uOyAKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNvbnN0X2l0
ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgY2hlY2tWYWxpZGl0
eShvdGhlcik7CisgICAgICAgICAgICByZXR1cm4gbV9wb3NpdGlvbiA9PSBvdGhlci5tX3Bvc2l0
aW9uOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
aXRlcmF0b3ImIG90aGVyKSBjb25zdCAKLSAgICAgICAgeyAKLSAgICAgICAgICAgIHJldHVybiBt
X3Bvc2l0aW9uICE9IG90aGVyLm1fcG9zaXRpb247IAorICAgICAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICBjaGVja1ZhbGlkaXR5KG90aGVyKTsKKyAgICAgICAgICAgIHJldHVybiBtX3Bvc2l0aW9uICE9
IG90aGVyLm1fcG9zaXRpb247CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICBwcml2YXRlOgor
ICAgICAgICB2b2lkIGNoZWNrVmFsaWRpdHkoKSBjb25zdAorICAgICAgICB7CisjaWYgQ0hFQ0tf
SEFTSFRBQkxFX0lURVJBVE9SUworICAgICAgICAgICAgYXNzZXJ0KG1fdGFibGUpOworI2VuZGlm
CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGNoZWNrVmFsaWRpdHkoY29uc3QgY29uc3RfaXRl
cmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisjaWYgQ0hFQ0tfSEFTSFRBQkxFX0lURVJB
VE9SUworICAgICAgICAgICAgYXNzZXJ0KG1fdGFibGUpOworICAgICAgICAgICAgYXNzZXJ0KG90
aGVyLm1fdGFibGUpOworICAgICAgICAgICAgYXNzZXJ0KG1fdGFibGUgPT0gb3RoZXIubV90YWJs
ZSk7CisjZW5kaWYKKyAgICAgICAgfQorCiAgICAgICAgIFBvaW50ZXJUeXBlIG1fcG9zaXRpb247
CiAgICAgICAgIFBvaW50ZXJUeXBlIG1fZW5kUG9zaXRpb247CisKKyNpZiBDSEVDS19IQVNIVEFC
TEVfSVRFUkFUT1JTCisgICAgcHVibGljOgorICAgICAgICBtdXRhYmxlIGNvbnN0IEhhc2hUYWJs
ZVR5cGUqIG1fdGFibGU7CisgICAgICAgIG11dGFibGUgY29uc3RfaXRlcmF0b3IqIG1fbmV4dDsK
KyAgICAgICAgbXV0YWJsZSBjb25zdF9pdGVyYXRvciogbV9wcmV2aW91czsKKyNlbmRpZgogICAg
IH07CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBjb25zdCBL
ZXkmIEV4dHJhY3RLZXkoY29uc3QgVmFsdWUgJiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIGNsYXNzIEhhc2hUYWJsZUNv
bnN0SXRlcmF0b3IgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IGNvbnN0IEtleSYgRXh0cmFjdEtleShjb25zdCBWYWx1ZSYpLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICBjbGFzcyBIYXNo
VGFibGVJdGVyYXRvciB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgdHlwZWRlZiBIYXNoVGFibGU8
S2V5LCBWYWx1ZSwgRXh0cmFjdEtleSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+
IEhhc2hUYWJsZVR5cGU7CiAgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlSXRlcmF0b3I8S2V5LCBW
YWx1ZSwgRXh0cmFjdEtleSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGl0ZXJh
dG9yOwogICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I8S2V5LCBWYWx1ZSwg
RXh0cmFjdEtleSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+IGNvbnN0X2l0ZXJh
dG9yOwogICAgICAgICB0eXBlZGVmIFZhbHVlIFZhbHVlVHlwZTsKLSAgICAgICAgdHlwZWRlZiBj
b25zdCBWYWx1ZVR5cGUmIFJlZmVyZW5jZVR5cGU7Ci0gICAgICAgIHR5cGVkZWYgY29uc3QgVmFs
dWVUeXBlICpQb2ludGVyVHlwZTsKLSAgICAgICAgCisgICAgICAgIHR5cGVkZWYgVmFsdWVUeXBl
JiBSZWZlcmVuY2VUeXBlOworICAgICAgICB0eXBlZGVmIFZhbHVlVHlwZSogUG9pbnRlclR5cGU7
CisKICAgICAgICAgZnJpZW5kIGNsYXNzIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz47Ci0gICAgICAgIAotICAgICAgICBI
YXNoVGFibGVDb25zdEl0ZXJhdG9yKFBvaW50ZXJUeXBlIHBvc2l0aW9uLCBQb2ludGVyVHlwZSBl
bmRQb3NpdGlvbikgCi0gICAgICAgICAgICA6IG1fcG9zaXRpb24ocG9zaXRpb24pLCBtX2VuZFBv
c2l0aW9uKGVuZFBvc2l0aW9uKSAKLSAgICAgICAgeyAKLSAgICAgICAgICAgIHNraXBFbXB0eUJ1
Y2tldHMoKTsKLSAgICAgICAgfQorCisgICAgICAgIEhhc2hUYWJsZUl0ZXJhdG9yKEhhc2hUYWJs
ZVR5cGUqIHRhYmxlLCBQb2ludGVyVHlwZSBwb3MsIFBvaW50ZXJUeXBlIGVuZCkgOiBtX2l0ZXJh
dG9yKHRhYmxlLCBwb3MsIGVuZCkgeyB9CisKICAgICBwdWJsaWM6Ci0gICAgICAgIEhhc2hUYWJs
ZUNvbnN0SXRlcmF0b3IoKSB7fQotICAgICAgICBIYXNoVGFibGVDb25zdEl0ZXJhdG9yKGNvbnN0
IGl0ZXJhdG9yICZvdGhlcikKLSAgICAgICAgICAgIDogbV9wb3NpdGlvbihvdGhlci5tX3Bvc2l0
aW9uKSwgbV9lbmRQb3NpdGlvbihvdGhlci5tX2VuZFBvc2l0aW9uKSB7IH0KLSAgICAgICAgCi0g
ICAgICAgIC8vIGRlZmF1bHQgY29weSwgYXNzaWdubWVudCBhbmQgZGVzdHJ1Y3RvciBhcmUgb2sK
LSAgICAgICAgCi0gICAgICAgIFJlZmVyZW5jZVR5cGUgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1
cm4gKm1fcG9zaXRpb247IH0KLSAgICAgICAgUG9pbnRlclR5cGUgb3BlcmF0b3ItPigpIGNvbnN0
IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIHNraXBF
bXB0eUJ1Y2tldHMoKSAKLSAgICAgICAgewotICAgICAgICAgICAgd2hpbGUgKG1fcG9zaXRpb24g
IT0gbV9lbmRQb3NpdGlvbiAmJiAoSGFzaFRhYmxlVHlwZTo6aXNFbXB0eU9yRGVsZXRlZEJ1Y2tl
dCgqbV9wb3NpdGlvbikpKSB7Ci0gICAgICAgICAgICAgICAgKyttX3Bvc2l0aW9uOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjb25zdF9pdGVyYXRvciYgb3Bl
cmF0b3IrKygpCi0gICAgICAgIHsKLSAgICAgICAgICAgICsrbV9wb3NpdGlvbjsKLSAgICAgICAg
ICAgIHNraXBFbXB0eUJ1Y2tldHMoKTsKLSAgICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAg
ICAgfQotICAgICAgICAKKyAgICAgICAgSGFzaFRhYmxlSXRlcmF0b3IoKSB7IH0KKworICAgICAg
ICAvLyBkZWZhdWx0IGNvcHksIGFzc2lnbm1lbnQgYW5kIGRlc3RydWN0b3IgYXJlIE9LCisKKyAg
ICAgICAgUmVmZXJlbmNlVHlwZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0
PFJlZmVyZW5jZVR5cGU+KCptX2l0ZXJhdG9yKTsgfQorICAgICAgICBQb2ludGVyVHlwZSBvcGVy
YXRvci0+KCkgY29uc3QgeyByZXR1cm4gJioqdGhpczsgfQorCisgICAgICAgIGl0ZXJhdG9yJiBv
cGVyYXRvcisrKCkgeyArK21faXRlcmF0b3I7IHJldHVybiAqdGhpczsgfQorCiAgICAgICAgIC8v
IHBvc3RmaXggKysgaW50ZW50aW9uYWxseSBvbWl0dGVkCi0gICAgICAgIAorCiAgICAgICAgIC8v
IENvbXBhcmlzb24uCi0gICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBjb25zdF9pdGVyYXRv
ciYgb3RoZXIpIGNvbnN0Ci0gICAgICAgIHsgCi0gICAgICAgICAgICByZXR1cm4gbV9wb3NpdGlv
biA9PSBvdGhlci5tX3Bvc2l0aW9uOyAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QgCi0gICAgICAg
IHsgCi0gICAgICAgICAgICByZXR1cm4gbV9wb3NpdGlvbiAhPSBvdGhlci5tX3Bvc2l0aW9uOyAK
LSAgICAgICAgfQotICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJh
dG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRvciA9PSBvdGhlci5tX2l0ZXJhdG9y
OyB9CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuIG1faXRlcmF0b3IgIT0gb3RoZXIubV9pdGVyYXRvcjsgfQorCiAgICAgcHJpdmF0
ZToKLSAgICAgICAgUG9pbnRlclR5cGUgbV9wb3NpdGlvbjsKLSAgICAgICAgUG9pbnRlclR5cGUg
bV9lbmRQb3NpdGlvbjsKKyAgICAgICAgY29uc3RfaXRlcmF0b3IgbV9pdGVyYXRvcjsKICAgICB9
OwotICAgIAorCiAgICAgdXNpbmcgc3RkOjpzd2FwOwogCi0jaWZuZGVmIFdJTjMyCisjaWYgIVdJ
TjMyCiAgICAgLy8gVmlzdWFsIEMrKyBoYXMgYSBzd2FwIGZvciBwYWlycyBkZWZpbmVkLgorCiAg
ICAgLy8gc3dhcCBwYWlycyBieSBjb21wb25lbnQsIGluIGNhc2Ugb2YgcGFpciBtZW1iZXJzIHRo
YXQgc3BlY2lhbGl6ZSBzd2FwCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4K
LSAgICBpbmxpbmUgdm9pZCBzd2FwKHBhaXI8VCwgVT4mIGEsIHBhaXI8VCwgVT4mIGIpCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIHZvaWQgc3dhcChwYWlyPFQs
IFU+JiBhLCBwYWlyPFQsIFU+JiBiKQogICAgIHsKICAgICAgICAgc3dhcChhLmZpcnN0LCBiLmZp
cnN0KTsKICAgICAgICAgc3dhcChhLnNlY29uZCwgYi5zZWNvbmQpOwogICAgIH0KICNlbmRpZgog
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCB1c2VTd2FwPgotICAgIGNsYXNzIE1vdmVy
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgdXNlU3dhcD4gc3RydWN0IE1vdmVyOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBNb3ZlcjxULCB0cnVlPiB7IHN0YXRpYyB2
b2lkIG1vdmUoVCYgZnJvbSwgVCYgdG8pIHsgc3dhcChmcm9tLCB0byk7IH0gfTsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgTW92ZXI8VCwgZmFsc2U+IHsgc3RhdGljIHZvaWQgbW92
ZShUJiBmcm9tLCBUJiB0bykgeyB0byA9IGZyb207IH0gfTsKIAotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci0gICAgc3RydWN0IE1vdmVyPFQsIHRydWU+IHsKLSAgICAgICAgc3RhdGljIHZvaWQg
bW92ZShUJiBmcm9tLCBUJiB0bykKLSAgICAgICAgewotICAgICAgICAgICAgc3dhcChmcm9tLCB0
byk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBz
dHJ1Y3QgTW92ZXI8VCwgZmFsc2U+IHsKLSAgICAgICAgc3RhdGljIHZvaWQgbW92ZShUJiBmcm9t
LCBUJiB0bykKLSAgICAgICAgewotICAgICAgICAgICAgdG8gPSBmcm9tOwotICAgICAgICB9Ci0g
ICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnM+Ci0gICAgY2xhc3MgSWRlbnRpdHlIYXNoVHJhbnNsYXRvciB7Ci0g
ICAgICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnM+IGNsYXNzIElkZW50aXR5SGFzaFRyYW5zbGF0b3IgewogICAgIHB1
YmxpYzoKLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgS2V5JiBrZXkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBIYXNoRnVuY3Rpb25zOjpoYXNoKGtleSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBLZXkmIGEsIGNvbnN0IEtl
eSYgYikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEhhc2hGdW5jdGlvbnM6OmVxdWFs
KGEsIGIpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFZhbHVl
JiBsb2NhdGlvbiwgY29uc3QgS2V5JiBrZXksIGNvbnN0IFZhbHVlJiB2YWx1ZSwgdW5zaWduZWQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGxvY2F0aW9uID0gdmFsdWU7Ci0gICAgICAgIH0KKyAg
ICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgS2V5JiBrZXkpIHsgcmV0dXJuIEhhc2hG
dW5jdGlvbnM6Omhhc2goa2V5KTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBL
ZXkmIGEsIGNvbnN0IEtleSYgYikgeyByZXR1cm4gSGFzaEZ1bmN0aW9uczo6ZXF1YWwoYSwgYik7
IH0KKyAgICAgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFZhbHVlJiBsb2NhdGlvbiwgY29uc3Qg
S2V5JiBrZXksIGNvbnN0IFZhbHVlJiB2YWx1ZSwgdW5zaWduZWQpIHsgbG9jYXRpb24gPSB2YWx1
ZTsgfQogICAgIH07CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVl
LCBjb25zdCBLZXkmIEV4dHJhY3RLZXkoY29uc3QgVmFsdWUgJiksIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIGNvbnN0IEtleSYgRXh0cmFjdEtleShjb25z
dCBWYWx1ZSYpLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVu
YW1lIEtleVRyYWl0cz4KICAgICBjbGFzcyBIYXNoVGFibGUgewogICAgIHB1YmxpYzoKICAgICAg
ICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRvcjxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gaXRlcmF0b3I7CkBAIC0yMzMsMTA3ICsyNjYs
MTMwIEBACiAgICAgICAgIHR5cGVkZWYgS2V5IEtleVR5cGU7CiAgICAgICAgIHR5cGVkZWYgVmFs
dWUgVmFsdWVUeXBlOwogICAgICAgICB0eXBlZGVmIElkZW50aXR5SGFzaFRyYW5zbGF0b3I8S2V5
LCBWYWx1ZSwgSGFzaEZ1bmN0aW9ucz4gSWRlbnRpdHlUcmFuc2xhdG9yVHlwZTsKLSAgICAgICAg
Ci0gICAgICAgIEhhc2hUYWJsZSgpIDogbV90YWJsZSgwKSwgbV90YWJsZVNpemUoMCksIG1fdGFi
bGVTaXplTWFzaygwKSwgbV9rZXlDb3VudCgwKSwgbV9kZWxldGVkQ291bnQoMCkge30KLSAgICAg
ICAgfkhhc2hUYWJsZSgpIHsgZGVhbGxvY2F0ZVRhYmxlKG1fdGFibGUsIG1fdGFibGVTaXplKTsg
fQotICAgICAgICAKLSAgICAgICAgSGFzaFRhYmxlKGNvbnN0IEhhc2hUYWJsZSYgb3RoZXIpOwot
ICAgICAgICB2b2lkIHN3YXAoY29uc3QgSGFzaFRhYmxlJiBvdGhlcik7Ci0gICAgICAgIEhhc2hU
YWJsZSYgb3BlcmF0b3I9KGNvbnN0IEhhc2hUYWJsZSYgb3RoZXIpOwotICAgICAgICAKKworICAg
ICAgICBIYXNoVGFibGUoKTsKKyAgICAgICAgfkhhc2hUYWJsZSgpIHsgaW52YWxpZGF0ZUl0ZXJh
dG9ycygpOyBkZWFsbG9jYXRlVGFibGUobV90YWJsZSwgbV90YWJsZVNpemUpOyB9CisKKyAgICAg
ICAgSGFzaFRhYmxlKGNvbnN0IEhhc2hUYWJsZSYpOworICAgICAgICB2b2lkIHN3YXAoSGFzaFRh
YmxlJik7CisgICAgICAgIEhhc2hUYWJsZSYgb3BlcmF0b3I9KGNvbnN0IEhhc2hUYWJsZSYpOwor
CiAgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbWFrZUl0ZXJhdG9yKG1fdGFibGUp
OyB9CiAgICAgICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1ha2VJdGVyYXRvcihtX3RhYmxl
ICsgbV90YWJsZVNpemUpOyB9CiAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3Qg
eyByZXR1cm4gbWFrZUNvbnN0SXRlcmF0b3IobV90YWJsZSk7IH0KICAgICAgICAgY29uc3RfaXRl
cmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbWFrZUNvbnN0SXRlcmF0b3IobV90YWJsZSArIG1f
dGFibGVTaXplKTsgfQotICAgICAgICAKKwogICAgICAgICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fa2V5Q291bnQ7IH0KICAgICAgICAgaW50IGNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4g
bV90YWJsZVNpemU7IH0KLSAgICAgICAgCisKICAgICAgICAgcGFpcjxpdGVyYXRvciwgYm9vbD4g
aW5zZXJ0KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIGluc2VydDxLZXlUeXBlLCBW
YWx1ZVR5cGUsIElkZW50aXR5VHJhbnNsYXRvclR5cGU+KEV4dHJhY3RLZXkodmFsdWUpLCB2YWx1
ZSk7IH0KLSAgICAgICAgCi0gICAgICAgIC8vIGEgc3BlY2lhbCB2ZXJzaW9uIG9mIGluc2VydCgp
IHRoYXQgZmluZHMgdGhlIG9iamVjdCBieSBoYXNoaW5nIGFuZCBjb21wYXJpbmcKKworICAgICAg
ICAvLyBBIHNwZWNpYWwgdmVyc2lvbiBvZiBpbnNlcnQoKSB0aGF0IGZpbmRzIHRoZSBvYmplY3Qg
YnkgaGFzaGluZyBhbmQgY29tcGFyaW5nCiAgICAgICAgIC8vIHdpdGggc29tZSBvdGhlciB0eXBl
LCB0byBhdm9pZCB0aGUgY29zdCBvZiB0eXBlIGNvbnZlcnNpb24gaWYgdGhlIG9iamVjdCBpcyBh
bHJlYWR5Ci0gICAgICAgIC8vIGluIHRoZSB0YWJsZQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBFeHRyYSwgdHlwZW5hbWUgSGFzaFRyYW5zbGF0b3I+IAotICAgICAgICBw
YWlyPGl0ZXJhdG9yLCBib29sPiBpbnNlcnQoY29uc3QgVCYga2V5LCBjb25zdCBFeHRyYSYgZXh0
cmEpOwotICAgICAgICAKLSAgICAgICAgaXRlcmF0b3IgZmluZChjb25zdCBLZXlUeXBlJiBrZXkp
OwotICAgICAgICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3Q7
Ci0gICAgICAgIGJvb2wgY29udGFpbnMoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdDsKLSAgICAg
ICAgCi0gICAgICAgIHZvaWQgcmVtb3ZlKGNvbnN0IEtleVR5cGUmIGtleSk7Ci0gICAgICAgIHZv
aWQgcmVtb3ZlKGl0ZXJhdG9yIGl0KTsKKyAgICAgICAgLy8gaW4gdGhlIHRhYmxlLgorICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeHRyYSwgdHlwZW5hbWUgSGFzaFRyYW5z
bGF0b3I+IHBhaXI8aXRlcmF0b3IsIGJvb2w+IGluc2VydChjb25zdCBUJiBrZXksIGNvbnN0IEV4
dHJhJik7CisKKyAgICAgICAgaXRlcmF0b3IgZmluZChjb25zdCBLZXlUeXBlJik7CisgICAgICAg
IGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3QgS2V5VHlwZSYpIGNvbnN0OworICAgICAgICBib29s
IGNvbnRhaW5zKGNvbnN0IEtleVR5cGUmKSBjb25zdDsKKworICAgICAgICB2b2lkIHJlbW92ZShj
b25zdCBLZXlUeXBlJik7CisgICAgICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yKTsKICAgICAgICAg
dm9pZCBjbGVhcigpOwotICAgICAgICAKKwogICAgICAgICBzdGF0aWMgYm9vbCBpc0VtcHR5QnVj
a2V0KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIHsgcmV0dXJuIEV4dHJhY3RLZXkodmFsdWUpID09
IEtleVRyYWl0czo6ZW1wdHlWYWx1ZSgpOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGlzRGVsZXRl
ZEJ1Y2tldChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSB7IHJldHVybiBFeHRyYWN0S2V5KHZhbHVl
KSA9PSBLZXlUcmFpdHM6OmRlbGV0ZWRWYWx1ZSgpOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGlz
RW1wdHlPckRlbGV0ZWRCdWNrZXQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgeyByZXR1cm4gaXNF
bXB0eUJ1Y2tldCh2YWx1ZSkgfHwgaXNEZWxldGVkQnVja2V0KHZhbHVlKTsgfQotICAgICAgICAK
KwogICAgIHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyBWYWx1ZVR5cGUgKmFsbG9jYXRlVGFibGUo
aW50IHNpemUpOwotICAgICAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlVGFibGUoVmFsdWVUeXBl
ICp0YWJsZSwgaW50IHNpemUpOworICAgICAgICBzdGF0aWMgVmFsdWVUeXBlKiBhbGxvY2F0ZVRh
YmxlKGludCBzaXplKTsKKyAgICAgICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZVRhYmxlKFZhbHVl
VHlwZSogdGFibGUsIGludCBzaXplKTsKIAotICAgICAgICB0eXBlZGVmIHBhaXI8VmFsdWVUeXBl
ICosIGJvb2w+IExvb2t1cFR5cGU7CisgICAgICAgIHR5cGVkZWYgcGFpcjxWYWx1ZVR5cGUqLCBi
b29sPiBMb29rdXBUeXBlOwogICAgICAgICB0eXBlZGVmIHBhaXI8TG9va3VwVHlwZSwgdW5zaWdu
ZWQ+IEZ1bGxMb29rdXBUeXBlOwotICAgICAgICAKKwogICAgICAgICBMb29rdXBUeXBlIGxvb2t1
cChjb25zdCBLZXkmIGtleSkgeyByZXR1cm4gbG9va3VwPEtleSwgSWRlbnRpdHlUcmFuc2xhdG9y
VHlwZT4oa2V5KS5maXJzdDsgfQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBIYXNoVHJhbnNsYXRvcj4KLSAgICAgICAgRnVsbExvb2t1cFR5cGUgbG9va3VwKGNvbnN0IFQm
KTsKLSAgICAgICAgCi0gICAgICAgIHZvaWQgcmVtb3ZlKFZhbHVlVHlwZSAqKTsKLSAgICAgICAg
CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yPiBG
dWxsTG9va3VwVHlwZSBsb29rdXAoY29uc3QgVCYpOworCisgICAgICAgIHZvaWQgcmVtb3ZlKFZh
bHVlVHlwZSopOworCiAgICAgICAgIGJvb2wgc2hvdWxkRXhwYW5kKCkgY29uc3QgeyByZXR1cm4g
KG1fa2V5Q291bnQgKyBtX2RlbGV0ZWRDb3VudCkgKiBtX21heExvYWQgPj0gbV90YWJsZVNpemU7
IH0KICAgICAgICAgYm9vbCBtdXN0UmVoYXNoSW5QbGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5
Q291bnQgKiBtX21pbkxvYWQgPCBtX3RhYmxlU2l6ZSAqIDI7IH0KICAgICAgICAgYm9vbCBzaG91
bGRTaHJpbmsoKSBjb25zdCB7IHJldHVybiBtX2tleUNvdW50ICogbV9taW5Mb2FkIDwgbV90YWJs
ZVNpemUgJiYgbV90YWJsZVNpemUgPiBtX21pblRhYmxlU2l6ZTsgfQogICAgICAgICB2b2lkIGV4
cGFuZCgpOwogICAgICAgICB2b2lkIHNocmluaygpIHsgcmVoYXNoKG1fdGFibGVTaXplIC8gMik7
IH0KLSAgICAgICAgCisKICAgICAgICAgdm9pZCByZWhhc2goaW50IG5ld1RhYmxlU2l6ZSk7CiAg
ICAgICAgIHZvaWQgcmVpbnNlcnQoVmFsdWVUeXBlJik7Ci0gICAgICAgIAorCiAgICAgICAgIHN0
YXRpYyB2b2lkIGluaXRpYWxpemVCdWNrZXQoVmFsdWVUeXBlJiBidWNrZXQpIHsgbmV3ICgmYnVj
a2V0KSBWYWx1ZVR5cGUoVHJhaXRzOjplbXB0eVZhbHVlKCkpOyB9CiAgICAgICAgIHN0YXRpYyB2
b2lkIGRlbGV0ZUJ1Y2tldChWYWx1ZVR5cGUmIGJ1Y2tldCkgeyBhc3NpZ25EZWxldGVkPFZhbHVl
VHlwZSwgVHJhaXRzPihidWNrZXQpOyB9Ci0gICAgICAgIAotICAgICAgICBGdWxsTG9va3VwVHlw
ZSBtYWtlTG9va3VwUmVzdWx0KFZhbHVlVHlwZSAqcG9zaXRpb24sIGJvb2wgZm91bmQsIHVuc2ln
bmVkIGhhc2gpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBGdWxsTG9va3VwVHlwZShM
b29rdXBUeXBlKHBvc2l0aW9uLCBmb3VuZCksIGhhc2gpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBpdGVyYXRvciBtYWtlSXRlcmF0b3IoVmFsdWVUeXBlICpwb3MpIHsgcmV0dXJuIGl0
ZXJhdG9yKHBvcywgbV90YWJsZSArIG1fdGFibGVTaXplKTsgfQotICAgICAgICBjb25zdF9pdGVy
YXRvciBtYWtlQ29uc3RJdGVyYXRvcihWYWx1ZVR5cGUgKnBvcykgY29uc3QgeyByZXR1cm4gY29u
c3RfaXRlcmF0b3IocG9zLCBtX3RhYmxlICsgbV90YWJsZVNpemUpOyB9Ci0gICAgICAgIAorCisg
ICAgICAgIEZ1bGxMb29rdXBUeXBlIG1ha2VMb29rdXBSZXN1bHQoVmFsdWVUeXBlKiBwb3NpdGlv
biwgYm9vbCBmb3VuZCwgdW5zaWduZWQgaGFzaCkKKyAgICAgICAgICAgIHsgcmV0dXJuIEZ1bGxM
b29rdXBUeXBlKExvb2t1cFR5cGUocG9zaXRpb24sIGZvdW5kKSwgaGFzaCk7IH0KKworICAgICAg
ICBpdGVyYXRvciBtYWtlSXRlcmF0b3IoVmFsdWVUeXBlKiBwb3MpIHsgcmV0dXJuIGl0ZXJhdG9y
KHRoaXMsIHBvcywgbV90YWJsZSArIG1fdGFibGVTaXplKTsgfQorICAgICAgICBjb25zdF9pdGVy
YXRvciBtYWtlQ29uc3RJdGVyYXRvcihWYWx1ZVR5cGUqIHBvcykgY29uc3QgeyByZXR1cm4gY29u
c3RfaXRlcmF0b3IodGhpcywgcG9zLCBtX3RhYmxlICsgbV90YWJsZVNpemUpOyB9CisKICNpZiBD
SEVDS19IQVNIVEFCTEVfQ09OU0lTVEVOQ1kKICAgICAgICAgdm9pZCBjaGVja1RhYmxlQ29uc2lz
dGVuY3koKSBjb25zdDsKICAgICAgICAgdm9pZCBjaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNlcHRT
aXplKCkgY29uc3Q7CisjZWxzZQorICAgICAgICBzdGF0aWMgdm9pZCBjaGVja1RhYmxlQ29uc2lz
dGVuY3koKSB7IH0KKyAgICAgICAgc3RhdGljIHZvaWQgY2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhj
ZXB0U2l6ZSgpIHsgfQogI2VuZGlmCi0gICAgICAgIAorCisjaWYgQ0hFQ0tfSEFTSFRBQkxFX0lU
RVJBVE9SUworICAgICAgICB2b2lkIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKKyNlbHNlCisgICAg
ICAgIHN0YXRpYyB2b2lkIGludmFsaWRhdGVJdGVyYXRvcnMoKSB7IH0KKyNlbmRpZgorCiAgICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbV9taW5UYWJsZVNpemUgPSA2NDsKICAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBtX21heExvYWQgPSAyOwogICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1fbWlu
TG9hZCA9IDY7Ci0gICAgICAgIAotICAgICAgICBWYWx1ZVR5cGUgKm1fdGFibGU7CisKKyAgICAg
ICAgVmFsdWVUeXBlKiBtX3RhYmxlOwogICAgICAgICBpbnQgbV90YWJsZVNpemU7CiAgICAgICAg
IGludCBtX3RhYmxlU2l6ZU1hc2s7CiAgICAgICAgIGludCBtX2tleUNvdW50OwogICAgICAgICBp
bnQgbV9kZWxldGVkQ291bnQ7CisKKyNpZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCisgICAg
cHVibGljOgorICAgICAgICBtdXRhYmxlIGNvbnN0X2l0ZXJhdG9yKiBtX2l0ZXJhdG9yczsKKyNl
bmRpZgogICAgIH07Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgY29uc3QgS2V5JiBFeHRyYWN0S2V5KGNvbnN0IFZhbHVlICYpLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIGNvbnN0IEtleSYgRXh0cmFjdEtl
eShjb25zdCBWYWx1ZSYpLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICBpbmxpbmUgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4
dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6SGFzaFRhYmxlKCkK
KyAgICAgICAgOiBtX3RhYmxlKDApCisgICAgICAgICwgbV90YWJsZVNpemUoMCkKKyAgICAgICAg
LCBtX3RhYmxlU2l6ZU1hc2soMCkKKyAgICAgICAgLCBtX2tleUNvdW50KDApCisgICAgICAgICwg
bV9kZWxldGVkQ291bnQoMCkKKyNpZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCisgICAgICAg
ICwgbV9pdGVyYXRvcnMoMCkKKyNlbmRpZgorICAgIHsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBjb25zdCBLZXkmIEV4dHJhY3RLZXkoY29uc3Qg
VmFsdWUmKSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFt
ZSBLZXlUcmFpdHM+CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSGFzaFRyYW5z
bGF0b3I+CiAgICAgaW5saW5lIHR5cGVuYW1lIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0
S2V5LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OkZ1bGxMb29rdXBUeXBlIEhh
c2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cz46Omxvb2t1cChjb25zdCBUJiBrZXkpCiAgICAgewogICAgICAgICBhc3NlcnQobV90
YWJsZSk7Ci0gICAgICAgIAorCiAgICAgICAgIHVuc2lnbmVkIGggPSBIYXNoVHJhbnNsYXRvcjo6
aGFzaChrZXkpOwogICAgICAgICBpbnQgc2l6ZU1hc2sgPSBtX3RhYmxlU2l6ZU1hc2s7CiAgICAg
ICAgIGludCBpID0gaCAmIHNpemVNYXNrOwogICAgICAgICBpbnQgayA9IDA7Ci0gICAgICAgIAor
CiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKICAgICAgICAgKytIYXNoVGFibGVTdGF0czo6bnVt
QWNjZXNzZXM7CiAgICAgICAgIGludCBwcm9iZUNvdW50ID0gMDsKICNlbmRpZgotICAgICAgICAK
KwogICAgICAgICBWYWx1ZVR5cGUgKnRhYmxlID0gbV90YWJsZTsKICAgICAgICAgVmFsdWVUeXBl
ICplbnRyeTsKICAgICAgICAgVmFsdWVUeXBlICpkZWxldGVkRW50cnkgPSAwOwpAQCAtMzUwLDM2
ICs0MDYsMzcgQEAKICAgICAgICAgICAgICAgICBrID0gMSB8IChoICUgc2l6ZU1hc2spOwogICAg
ICAgICAgICAgaSA9IChpICsgaykgJiBzaXplTWFzazsKICAgICAgICAgfQotICAgICAgICAKKwog
ICAgICAgICByZXR1cm4gbWFrZUxvb2t1cFJlc3VsdChkZWxldGVkRW50cnkgPyBkZWxldGVkRW50
cnkgOiBlbnRyeSwgZmFsc2UsIGgpOwogICAgIH0KLSAgICAKLSAgICAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBjb25zdCBLZXkmIEV4dHJhY3RLZXkoY29uc3Qg
VmFsdWUgJiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5h
bWUgS2V5VHJhaXRzPgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4dHJhLCB0
eXBlbmFtZSBIYXNoVHJhbnNsYXRvcj4gCisKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwg
dHlwZW5hbWUgVmFsdWUsIGNvbnN0IEtleSYgRXh0cmFjdEtleShjb25zdCBWYWx1ZSYpLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeHRyYSwgdHlwZW5hbWUgSGFzaFRy
YW5zbGF0b3I+CiAgICAgaW5saW5lIHBhaXI8dHlwZW5hbWUgSGFzaFRhYmxlPEtleSwgVmFsdWUs
IEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6aXRlcmF0b3Is
IGJvb2w+IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cz46Omluc2VydChjb25zdCBUJiBrZXksIGNvbnN0IEV4dHJhICZleHRy
YSkKICAgICB7CisgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKKwogICAgICAgICBpZiAo
IW1fdGFibGUpCiAgICAgICAgICAgICBleHBhbmQoKTsKLSAgICAgICAgCisKICAgICAgICAgY2hl
Y2tUYWJsZUNvbnNpc3RlbmN5KCk7Ci0gICAgICAgIAorCiAgICAgICAgIEZ1bGxMb29rdXBUeXBl
IGxvb2t1cFJlc3VsdCA9IGxvb2t1cDxULCBIYXNoVHJhbnNsYXRvcj4oa2V5KTsKLSAgICAgICAg
CisKICAgICAgICAgVmFsdWVUeXBlICplbnRyeSA9IGxvb2t1cFJlc3VsdC5maXJzdC5maXJzdDsK
ICAgICAgICAgYm9vbCBmb3VuZCA9IGxvb2t1cFJlc3VsdC5maXJzdC5zZWNvbmQ7CiAgICAgICAg
IHVuc2lnbmVkIGggPSBsb29rdXBSZXN1bHQuc2Vjb25kOwotICAgICAgICAKLSAgICAgICAgaWYg
KGZvdW5kKSB7CisKKyAgICAgICAgaWYgKGZvdW5kKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bWFrZV9wYWlyKG1ha2VJdGVyYXRvcihlbnRyeSksIGZhbHNlKTsKLSAgICAgICAgfQotICAgICAg
ICAKKwogICAgICAgICBpZiAoaXNEZWxldGVkQnVja2V0KCplbnRyeSkpCiAgICAgICAgICAgICAt
LW1fZGVsZXRlZENvdW50OwotICAgICAgICAKKwogICAgICAgICBIYXNoVHJhbnNsYXRvcjo6dHJh
bnNsYXRlKCplbnRyeSwga2V5LCBleHRyYSwgaCk7CiAgICAgICAgICsrbV9rZXlDb3VudDsKLSAg
ICAgICAgCisKICAgICAgICAgaWYgKHNob3VsZEV4cGFuZCgpKSB7CiAgICAgICAgICAgICAvLyBG
SVhNRTogdGhpcyBtYWtlcyBhbiBleHRyYSBjb3B5IG9uIGV4cGFuZC4gUHJvYmFibHkgbm90IHRo
YXQgYmFkIHNpbmNlCiAgICAgICAgICAgICAvLyBleHBhbmQgaXMgcmFyZSwgYnV0IHdvdWxkIGJl
IGJldHRlciB0byBoYXZlIGEgdmVyc2lvbiBvZiBleHBhbmQgdGhhdCBjYW4KQEAgLTM4OCwxMyAr
NDQ1LDEzIEBACiAgICAgICAgICAgICBleHBhbmQoKTsKICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1ha2VfcGFpcihmaW5kKGVudGVyZWRLZXkpLCB0cnVlKTsKICAgICAgICAgfQotICAgICAgICAK
KwogICAgICAgICBjaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKLSAgICAgICAgCisKICAgICAgICAg
cmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG1ha2VJdGVyYXRvcihlbnRyeSksIHRydWUpOwogICAgIH0K
LSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBjb25zdCBL
ZXkmIEV4dHJhY3RLZXkoY29uc3QgVmFsdWUgJiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgY29uc3QgS2V5JiBFeHRyYWN0S2V5KGNvbnN0IFZhbHVl
JiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzPgogICAgIGlubGluZSB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OnJlaW5zZXJ0KFZhbHVlVHlwZSYg
ZW50cnkpCiAgICAgewogICAgICAgICBhc3NlcnQobV90YWJsZSk7CkBAIC00MDMsOTAgKzQ2MCw5
MSBAQAogI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCiAgICAgICAgICsrSGFzaFRhYmxlU3RhdHM6
Om51bVJlaW5zZXJ0czsKICNlbmRpZgotICAgICAgICAKKwogICAgICAgICBNb3ZlcjxWYWx1ZVR5
cGUsIFRyYWl0czo6bmVlZHNEZXN0cnVjdGlvbj46Om1vdmUoZW50cnksICoobG9va3VwKEV4dHJh
Y3RLZXkoZW50cnkpKS5maXJzdCkpOwogICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBjb25zdCBLZXkmIEV4dHJhY3RLZXkoY29uc3QgVmFsdWUg
JiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5
VHJhaXRzPgorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgY29u
c3QgS2V5JiBFeHRyYWN0S2V5KGNvbnN0IFZhbHVlJiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIGlubGluZSB0eXBlbmFt
ZSBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdEtleSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBLZXlUcmFpdHM+OjppdGVyYXRvciBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdEtleSwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpmaW5kKGNvbnN0IEtleSYga2V5KQog
ICAgIHsKICAgICAgICAgaWYgKCFtX3RhYmxlKQogICAgICAgICAgICAgcmV0dXJuIGVuZCgpOwot
ICAgICAgICAKKwogICAgICAgICBMb29rdXBUeXBlIHJlc3VsdCA9IGxvb2t1cChrZXkpOwogICAg
ICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpCiAgICAgICAgICAgICByZXR1cm4gZW5kKCk7CiAgICAg
ICAgIHJldHVybiBtYWtlSXRlcmF0b3IocmVzdWx0LmZpcnN0KTsKICAgICB9Ci0gICAgCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgY29uc3QgS2V5JiBFeHRyYWN0
S2V5KGNvbnN0IFZhbHVlICYpLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFp
dHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlw
ZW5hbWUgVmFsdWUsIGNvbnN0IEtleSYgRXh0cmFjdEtleShjb25zdCBWYWx1ZSYpLCB0eXBlbmFt
ZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAg
ICBpbmxpbmUgdHlwZW5hbWUgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6Y29uc3RfaXRlcmF0b3IgSGFzaFRhYmxlPEtl
eSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6
ZmluZChjb25zdCBLZXkmIGtleSkgY29uc3QKICAgICB7CiAgICAgICAgIGlmICghbV90YWJsZSkK
ICAgICAgICAgICAgIHJldHVybiBlbmQoKTsKLSAgICAgICAgCisKICAgICAgICAgTG9va3VwVHlw
ZSByZXN1bHQgPSBjb25zdF9jYXN0PEhhc2hUYWJsZSAqPih0aGlzKS0+bG9va3VwKGtleSk7CiAg
ICAgICAgIGlmICghcmVzdWx0LnNlY29uZCkKICAgICAgICAgICAgIHJldHVybiBlbmQoKTsKICAg
ICAgICAgcmV0dXJuIG1ha2VDb25zdEl0ZXJhdG9yKHJlc3VsdC5maXJzdCk7CiAgICAgfQotICAg
IAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIGNvbnN0IEtleSYg
RXh0cmFjdEtleShjb25zdCBWYWx1ZSAmKSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5h
bWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgaW5saW5lIGJvb2wgSGFzaFRhYmxl
PEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRz
Pjo6Y29udGFpbnMoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdCAKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIGNvbnN0IEtleSYgRXh0cmFjdEtleShjb25zdCBW
YWx1ZSYpLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4KKyAgICBpbmxpbmUgYm9vbCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFj
dEtleSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Ojpjb250YWlucyhjb25zdCBL
ZXlUeXBlJiBrZXkpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoIW1fdGFibGUpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBjb25zdF9jYXN0
PEhhc2hUYWJsZSAqPih0aGlzKS0+bG9va3VwKGtleSkuc2Vjb25kOwogICAgIH0KLSAgICAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBjb25zdCBLZXkmIEV4dHJh
Y3RLZXkoY29uc3QgVmFsdWUgJiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRy
YWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIGlubGluZSB2b2lkIEhhc2hUYWJsZTxLZXks
IFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OnJl
bW92ZShWYWx1ZVR5cGUgKnBvcykKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIGNvbnN0IEtleSYgRXh0cmFjdEtleShjb25zdCBWYWx1ZSYpLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICBp
bmxpbmUgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdEtleSwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHM+OjpyZW1vdmUoVmFsdWVUeXBlKiBwb3MpCiAgICAgeworICAg
ICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CiAgICAgICAgIGNoZWNrVGFibGVDb25zaXN0ZW5j
eSgpOwotICAgICAgICAKKwogI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCiAgICAgICAgICsrSGFz
aFRhYmxlU3RhdHM6Om51bVJlbW92ZXM7CiAjZW5kaWYKLSAgICAgICAgCisKICAgICAgICAgZGVs
ZXRlQnVja2V0KCpwb3MpOwogICAgICAgICArK21fZGVsZXRlZENvdW50OwogICAgICAgICAtLW1f
a2V5Q291bnQ7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChzaG91bGRTaHJpbmsoKSkKICAgICAg
ICAgICAgIHNocmluaygpOwotICAgICAgICAKKwogICAgICAgICBjaGVja1RhYmxlQ29uc2lzdGVu
Y3koKTsKICAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBW
YWx1ZSwgY29uc3QgS2V5JiBFeHRyYWN0S2V5KGNvbnN0IFZhbHVlICYpLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIGNvbnN0IEtleSYgRXh0cmFjdEtl
eShjb25zdCBWYWx1ZSYpLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBpbmxpbmUgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1
ZSwgRXh0cmFjdEtleSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpyZW1vdmUo
Y29uc3QgS2V5VHlwZSYga2V5KQotICAgIHsgCisgICAgewogICAgICAgICBpZiAoIW1fdGFibGUp
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICByZW1vdmUoZmluZChrZXkp
KTsgCisKKyAgICAgICAgcmVtb3ZlKGZpbmQoa2V5KSk7CiAgICAgfQotICAgIAotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIGNvbnN0IEtleSYgRXh0cmFjdEtleShj
b25zdCBWYWx1ZSAmKSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0
eXBlbmFtZSBLZXlUcmFpdHM+CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1l
IFZhbHVlLCBjb25zdCBLZXkmIEV4dHJhY3RLZXkoY29uc3QgVmFsdWUmKSwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgaW5s
aW5lIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQotICAgIHsgCisgICAgewog
ICAgICAgICBpZiAoaXQgPT0gZW5kKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAot
ICAgICAgICByZW1vdmUoaXQubV9wb3NpdGlvbik7IAorCisgICAgICAgIHJlbW92ZShjb25zdF9j
YXN0PFZhbHVlVHlwZSo+KGl0Lm1faXRlcmF0b3IubV9wb3NpdGlvbikpOwogICAgIH0KLSAgICAK
LSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBjb25zdCBL
ZXkmIEV4dHJhY3RLZXkoY29uc3QgVmFsdWUgJiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorCisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBjb25zdCBLZXkmIEV4dHJhY3RLZXkoY29uc3QgVmFs
dWUmKSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBL
ZXlUcmFpdHM+CiAgICAgaW5saW5lIFZhbHVlICpIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFj
dEtleSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjphbGxvY2F0ZVRhYmxlKGlu
dCBzaXplKQogICAgIHsKICAgICAgICAgLy8gd291bGQgdXNlIGEgdGVtcGxhdGUgbWVtYmVyIGZ1
bmN0aW9uIHdpdGggZXhwbGljaXQgc3BlY2lhbGl6YXRpb25zIGhlcmUsIGJ1dAogICAgICAgICAv
LyBnY2MgZG9lc24ndCBhcHBlYXIgdG8gc3VwcG9ydCB0aGF0CiAgICAgICAgIGlmIChUcmFpdHM6
OmVtcHR5VmFsdWVJc1plcm8pCi0gICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxW
YWx1ZVR5cGUgKj4oZmFzdENhbGxvYyhzaXplLCBzaXplb2YoVmFsdWVUeXBlKSkpOyAKKyAgICAg
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFZhbHVlVHlwZSAqPihmYXN0Q2FsbG9jKHNp
emUsIHNpemVvZihWYWx1ZVR5cGUpKSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgVmFs
dWVUeXBlICpyZXN1bHQgPSByZWludGVycHJldF9jYXN0PFZhbHVlVHlwZSAqPihmYXN0TWFsbG9j
KHNpemUgKiBzaXplb2YoVmFsdWVUeXBlKSkpOyAKKyAgICAgICAgICAgIFZhbHVlVHlwZSAqcmVz
dWx0ID0gcmVpbnRlcnByZXRfY2FzdDxWYWx1ZVR5cGUgKj4oZmFzdE1hbGxvYyhzaXplICogc2l6
ZW9mKFZhbHVlVHlwZSkpKTsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsg
aSsrKSB7CiAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZUJ1Y2tldChyZXN1bHRbaV0pOwogICAg
ICAgICAgICAgfQpAQCAtNDk0LDcgKzU1Miw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBjb25zdCBLZXkmIEV4dHJhY3RL
ZXkoY29uc3QgVmFsdWUgJiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIGNvbnN0IEtleSYgRXh0cmFjdEtleShjb25zdCBWYWx1ZSYpLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBp
bmxpbmUgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdEtleSwgSGFzaEZ1bmN0aW9u
cywgVHJhaXRzLCBLZXlUcmFpdHM+OjpkZWFsbG9jYXRlVGFibGUoVmFsdWVUeXBlICp0YWJsZSwg
aW50IHNpemUpCiAgICAgewogICAgICAgICBpZiAoVHJhaXRzOjpuZWVkc0Rlc3RydWN0aW9uKSB7
CkBAIC01MDUsMTAgKzU2MywxMCBAQAogCiAgICAgICAgIGZhc3RGcmVlKHRhYmxlKTsKICAgICB9
Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgY29uc3Qg
S2V5JiBFeHRyYWN0S2V5KGNvbnN0IFZhbHVlICYpLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0
eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIGNvbnN0IEtleSYgRXh0cmFjdEtleShjb25zdCBWYWx1
ZSYpLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtl
eVRyYWl0cz4KICAgICBpbmxpbmUgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdEtl
eSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpleHBhbmQoKQotICAgIHsgCisg
ICAgewogICAgICAgICBpbnQgbmV3U2l6ZTsKICAgICAgICAgaWYgKG1fdGFibGVTaXplID09IDAp
CiAgICAgICAgICAgICBuZXdTaXplID0gbV9taW5UYWJsZVNpemU7CkBAIC01MTYsMTM5ICs1NzQs
MjEyIEBACiAgICAgICAgICAgICBuZXdTaXplID0gbV90YWJsZVNpemU7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIG5ld1NpemUgPSBtX3RhYmxlU2l6ZSAqIDI7Ci0gICAgICAgIAotICAgICAg
ICByZWhhc2gobmV3U2l6ZSk7IAorCisgICAgICAgIHJlaGFzaChuZXdTaXplKTsKICAgICB9Ci0g
ICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgY29uc3QgS2V5
JiBFeHRyYWN0S2V5KGNvbnN0IFZhbHVlICYpLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEtleSwgdHlwZW5hbWUgVmFsdWUsIGNvbnN0IEtleSYgRXh0cmFjdEtleShjb25zdCBWYWx1ZSYp
LCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRy
YWl0cz4KICAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OnJlaGFzaChpbnQgbmV3VGFibGVTaXplKQogICAg
IHsKICAgICAgICAgY2hlY2tUYWJsZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSgpOwotICAgICAgICAK
KwogICAgICAgICBpbnQgb2xkVGFibGVTaXplID0gbV90YWJsZVNpemU7CiAgICAgICAgIFZhbHVl
VHlwZSAqb2xkVGFibGUgPSBtX3RhYmxlOwotICAgICAgICAKKwogI2lmIERVTVBfSEFTSFRBQkxF
X1NUQVRTCiAgICAgICAgIGlmIChvbGRUYWJsZVNpemUgIT0gMCkKICAgICAgICAgICAgICsrSGFz
aFRhYmxlU3RhdHM6Om51bVJlaGFzaGVzOwogI2VuZGlmCi0gICAgICAgIAorCiAgICAgICAgIG1f
dGFibGVTaXplID0gbmV3VGFibGVTaXplOwogICAgICAgICBtX3RhYmxlU2l6ZU1hc2sgPSBuZXdU
YWJsZVNpemUgLSAxOwogICAgICAgICBtX3RhYmxlID0gYWxsb2NhdGVUYWJsZShuZXdUYWJsZVNp
emUpOwotICAgICAgICAKKwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSAhPSBvbGRUYWJsZVNp
emU7ICsraSkgewogICAgICAgICAgICAgaWYgKCFpc0VtcHR5T3JEZWxldGVkQnVja2V0KG9sZFRh
YmxlW2ldKSkKICAgICAgICAgICAgICAgICByZWluc2VydChvbGRUYWJsZVtpXSk7CiAgICAgICAg
IH0KLSAgICAgICAgCisKICAgICAgICAgbV9kZWxldGVkQ291bnQgPSAwOwotICAgICAgICAKKwog
ICAgICAgICBkZWFsbG9jYXRlVGFibGUob2xkVGFibGUsIG9sZFRhYmxlU2l6ZSk7Ci0gICAgICAg
IAorCiAgICAgICAgIGNoZWNrVGFibGVDb25zaXN0ZW5jeSgpOwogICAgIH0KLSAgICAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBjb25zdCBLZXkmIEV4dHJhY3RL
ZXkoY29uc3QgVmFsdWUgJiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBl
bmFtZSBWYWx1ZSwgY29uc3QgS2V5JiBFeHRyYWN0S2V5KGNvbnN0IFZhbHVlJiksIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAg
IGlubGluZSB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmNsZWFyKCkKICAgICB7CisgICAgICAgIGludmFsaWRh
dGVJdGVyYXRvcnMoKTsKICAgICAgICAgZGVhbGxvY2F0ZVRhYmxlKG1fdGFibGUsIG1fdGFibGVT
aXplKTsKICAgICAgICAgbV90YWJsZSA9IDA7CiAgICAgICAgIG1fdGFibGVTaXplID0gMDsKICAg
ICAgICAgbV90YWJsZVNpemVNYXNrID0gMDsKICAgICAgICAgbV9rZXlDb3VudCA9IDA7CiAgICAg
fQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIGNvbnN0
IEtleSYgRXh0cmFjdEtleShjb25zdCBWYWx1ZSAmKSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywg
dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBjb25zdCBLZXkmIEV4dHJhY3RLZXkoY29uc3QgVmFs
dWUmKSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBL
ZXlUcmFpdHM+CiAgICAgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6SGFzaFRhYmxlKGNvbnN0IEhhc2hUYWJsZSYgb3Ro
ZXIpCiAgICAgICAgIDogbV90YWJsZSgwKQogICAgICAgICAsIG1fdGFibGVTaXplKDApCiAgICAg
ICAgICwgbV90YWJsZVNpemVNYXNrKDApCiAgICAgICAgICwgbV9rZXlDb3VudCgwKQogICAgICAg
ICAsIG1fZGVsZXRlZENvdW50KDApCisjaWYgQ0hFQ0tfSEFTSFRBQkxFX0lURVJBVE9SUworICAg
ICAgICAsIG1faXRlcmF0b3JzKDApCisjZW5kaWYKICAgICB7Ci0gICAgICAgIC8vIGRvZXNuJ3Qg
bWF0dGVyIGlmIGNvcHlpbmcgYSBoYXNodGFibGUgaXMgZWZmaWNpZW50IHNvIGp1c3QKLSAgICAg
ICAgLy8gZG8gaXQgdGhlIGR1bWIgd2F5LCBieSBjb3B5aW5nIGVhY2ggZWxlbWVudC4KKyAgICAg
ICAgLy8gQ29weSB0aGUgaGFzaCB0YWJsZSB0aGUgZHVtYiB3YXksIGJ5IGluc2VydGluZyBlYWNo
IGVsZW1lbnQgaW50byB0aGUgbmV3IHRhYmxlLgorICAgICAgICAvLyBJdCBtaWdodCBiZSBtb3Jl
IGVmZmljaWVudCB0byBjb3B5IHRoZSB0YWJsZSBzbG90cywgYnV0IGl0J3Mgbm90IGNsZWFyIHRo
YXQgZWZmaWNpZW5jeSBpcyBuZWVkZWQuCiAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCA9IG90
aGVyLmVuZCgpOwotICAgICAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0ID0gb3RoZXIuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGZvciAoY29uc3RfaXRlcmF0b3IgaXQgPSBv
dGhlci5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICAgICBpbnNlcnQoKml0KTsK
LSAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVu
YW1lIFZhbHVlLCBjb25zdCBLZXkmIEV4dHJhY3RLZXkoY29uc3QgVmFsdWUgJiksIHR5cGVuYW1l
IEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAg
IHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzPjo6c3dhcChjb25zdCBIYXNoVGFibGUmIG90aGVyKQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgY29uc3QgS2V5JiBFeHRyYWN0S2V5
KGNvbnN0IFZhbHVlJiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywg
dHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJh
Y3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6c3dhcChIYXNoVGFibGUm
IG90aGVyKQogICAgIHsKKyAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOworCiAgICAgICAg
IFZhbHVlVHlwZSAqdG1wX3RhYmxlID0gbV90YWJsZTsKICAgICAgICAgbV90YWJsZSA9IG90aGVy
Lm1fdGFibGU7CiAgICAgICAgIG90aGVyLm1fdGFibGUgPSB0bXBfdGFibGU7Ci0gICAgICAgIAor
CiAgICAgICAgIGludCB0bXBfdGFibGVTaXplID0gbV90YWJsZVNpemU7CiAgICAgICAgIG1fdGFi
bGVTaXplID0gb3RoZXIubV90YWJsZVNpemU7CiAgICAgICAgIG90aGVyLm1fdGFibGVTaXplID0g
dG1wX3RhYmxlU2l6ZTsKLSAgICAgICAgCisKICAgICAgICAgaW50IHRtcF90YWJsZVNpemVNYXNr
ID0gbV90YWJsZVNpemVNYXNrOwogICAgICAgICBtX3RhYmxlU2l6ZU1hc2sgPSBvdGhlci5tX3Rh
YmxlU2l6ZU1hc2s7CiAgICAgICAgIG90aGVyLm1fdGFibGVTaXplTWFzayA9IHRtcF90YWJsZVNp
emVNYXNrOwotICAgICAgICAKKwogICAgICAgICBpbnQgdG1wX2tleUNvdW50ID0gbV9rZXlDb3Vu
dDsKICAgICAgICAgbV9rZXlDb3VudCA9IG90aGVyLm1fa2V5Q291bnQ7CiAgICAgICAgIG90aGVy
Lm1fa2V5Q291bnQgPSB0bXBfa2V5Q291bnQ7Ci0gICAgICAgIAorCiAgICAgICAgIGludCB0bXBf
ZGVsZXRlZENvdW50ID0gbV9kZWxldGVkQ291bnQ7CiAgICAgICAgIG1fZGVsZXRlZENvdW50ID0g
b3RoZXIubV9kZWxldGVkQ291bnQ7CiAgICAgICAgIG90aGVyLm1fZGVsZXRlZENvdW50ID0gdG1w
X2RlbGV0ZWRDb3VudDsKICAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgY29uc3QgS2V5JiBFeHRyYWN0S2V5KGNvbnN0IFZhbHVlICYpLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4K
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIGNvbnN0IEtleSYg
RXh0cmFjdEtleShjb25zdCBWYWx1ZSYpLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBIYXNoVGFibGU8S2V5LCBWYWx1ZSwg
RXh0cmFjdEtleSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+JiBIYXNoVGFibGU8
S2V5LCBWYWx1ZSwgRXh0cmFjdEtleSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+
OjpvcGVyYXRvcj0oY29uc3QgSGFzaFRhYmxlJiBvdGhlcikKICAgICB7CiAgICAgICAgIEhhc2hU
YWJsZSB0bXAob3RoZXIpOwogICAgICAgICBzd2FwKHRtcCk7CiAgICAgICAgIHJldHVybiAqdGhp
czsKICAgICB9Ci0gICAgCisKICNpZiBDSEVDS19IQVNIVEFCTEVfQ09OU0lTVEVOQ1kKLSAgICAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBjb25zdCBLZXkmIEV4
dHJhY3RLZXkoY29uc3QgVmFsdWUgJiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1l
IFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgY29uc3QgS2V5JiBFeHRyYWN0S2V5KGNvbnN0IFZhbHVlJiksIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRz
PgogICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6Y2hlY2tUYWJsZUNvbnNpc3RlbmN5KCkgY29uc3QKICAg
ICB7CiAgICAgICAgIGNoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKTsKICAgICAgICAg
YXNzZXJ0KCFzaG91bGRFeHBhbmQoKSk7CiAgICAgICAgIGFzc2VydCghc2hvdWxkU2hyaW5rKCkp
OwogICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVl
LCBjb25zdCBLZXkmIEV4dHJhY3RLZXkoY29uc3QgVmFsdWUgJiksIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgY29uc3QgS2V5JiBFeHRyYWN0S2V5KGNv
bnN0IFZhbHVlJiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlw
ZW5hbWUgS2V5VHJhaXRzPgogICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RL
ZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6Y2hlY2tUYWJsZUNvbnNpc3Rl
bmN5RXhjZXB0U2l6ZSgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoIW1fdGFibGUpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIAorCiAgICAgICAgIGludCBjb3VudCA9IDA7CiAgICAg
ICAgIGludCBkZWxldGVkQ291bnQgPSAwOwogICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG1f
dGFibGVTaXplOyArK2opIHsKICAgICAgICAgICAgIFZhbHVlVHlwZSAqZW50cnkgPSBtX3RhYmxl
ICsgajsKICAgICAgICAgICAgIGlmIChpc0VtcHR5QnVja2V0KCplbnRyeSkpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGlzRGVsZXRl
ZEJ1Y2tldCgqZW50cnkpKSB7CiAgICAgICAgICAgICAgICAgKytkZWxldGVkQ291bnQ7CiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAg
ICAgICAgICAgY29uc3RfaXRlcmF0b3IgaXQgPSBmaW5kKEV4dHJhY3RLZXkoKmVudHJ5KSk7CiAg
ICAgICAgICAgICBhc3NlcnQoZW50cnkgPT0gaXQubV9wb3NpdGlvbik7CiAgICAgICAgICAgICAr
K2NvdW50OwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGFzc2VydChjb3VudCA9PSBt
X2tleUNvdW50KTsKICAgICAgICAgYXNzZXJ0KGRlbGV0ZWRDb3VudCA9PSBtX2RlbGV0ZWRDb3Vu
dCk7CiAgICAgICAgIGFzc2VydChtX3RhYmxlU2l6ZSA+PSBtX21pblRhYmxlU2l6ZSk7CiAgICAg
ICAgIGFzc2VydChtX3RhYmxlU2l6ZU1hc2spOwogICAgICAgICBhc3NlcnQobV90YWJsZVNpemUg
PT0gbV90YWJsZVNpemVNYXNrICsgMSk7CiAgICAgfQotICAgIAorCiAjZW5kaWYgLy8gQ0hFQ0tf
SEFTSFRBQkxFX0NPTlNJU1RFTkNZCi0gICAgCisKKyNpZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFU
T1JTCisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBjb25zdCBL
ZXkmIEV4dHJhY3RLZXkoY29uc3QgVmFsdWUmKSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdm9pZCBIYXNoVGFibGU8S2V5
LCBWYWx1ZSwgRXh0cmFjdEtleSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+Ojpp
bnZhbGlkYXRlSXRlcmF0b3JzKCkKKyAgICB7CisgICAgICAgIGNvbnN0X2l0ZXJhdG9yKiBuZXh0
OworICAgICAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yKiBwID0gbV9pdGVyYXRvcnM7IHA7IHAgPSBu
ZXh0KSB7CisgICAgICAgICAgICBuZXh0ID0gcC0+bV9uZXh0OworICAgICAgICAgICAgcC0+bV90
YWJsZSA9IDA7CisgICAgICAgICAgICBwLT5tX25leHQgPSAwOworICAgICAgICAgICAgcC0+bV9w
cmV2aW91cyA9IDA7CisgICAgICAgIH0KKyAgICAgICAgbV9pdGVyYXRvcnMgPSAwOworICAgIH0K
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIGNvbnN0IEtleSYg
RXh0cmFjdEtleShjb25zdCBWYWx1ZSYpLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICB2b2lkIGFkZEl0ZXJhdG9yKGNvbnN0
IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMs
IEtleVRyYWl0cz4qIHRhYmxlLAorICAgICAgICBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwg
VmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiogaXQp
CisgICAgeworICAgICAgICBpdC0+bV90YWJsZSA9IHRhYmxlOworICAgICAgICBpdC0+bV9wcmV2
aW91cyA9IDA7CisKKyAgICAgICAgLy8gSW5zZXJ0IGl0ZXJhdG9yIGF0IGhlYWQgb2YgZG91Ymx5
LWxpbmtlZCBsaXN0IG9mIGl0ZXJhdG9ycy4KKyAgICAgICAgaWYgKCF0YWJsZSkgeworICAgICAg
ICAgICAgaXQtPm1fbmV4dCA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhc3Nl
cnQodGFibGUtPm1faXRlcmF0b3JzICE9IGl0KTsKKyAgICAgICAgICAgIGl0LT5tX25leHQgPSB0
YWJsZS0+bV9pdGVyYXRvcnM7CisgICAgICAgICAgICB0YWJsZS0+bV9pdGVyYXRvcnMgPSBpdDsK
KyAgICAgICAgICAgIGlmIChpdC0+bV9uZXh0KSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0KCFp
dC0+bV9uZXh0LT5tX3ByZXZpb3VzKTsKKyAgICAgICAgICAgICAgICBpdC0+bV9uZXh0LT5tX3By
ZXZpb3VzID0gaXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBjb25zdCBLZXkmIEV4dHJhY3RLZXko
Y29uc3QgVmFsdWUmKSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0
eXBlbmFtZSBLZXlUcmFpdHM+CisgICAgdm9pZCByZW1vdmVJdGVyYXRvcihIYXNoVGFibGVDb25z
dEl0ZXJhdG9yPEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzPiogaXQpCisgICAgeworICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZTxLZXksIFZh
bHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4gSGFzaFRh
YmxlVHlwZTsKKyAgICAgICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleSwgVmFs
dWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiBjb25zdF9p
dGVyYXRvcjsKKworICAgICAgICAvLyBEZWxldGUgaXRlcmF0b3IgZnJvbSBkb3VibHktbGlua2Vk
IGxpc3Qgb2YgaXRlcmF0b3JzLgorICAgICAgICBpZiAoIWl0LT5tX3RhYmxlKSB7CisgICAgICAg
ICAgICBhc3NlcnQoIWl0LT5tX25leHQpOworICAgICAgICAgICAgYXNzZXJ0KCFpdC0+bV9wcmV2
aW91cyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoaXQtPm1fbmV4dCkgewor
ICAgICAgICAgICAgICAgIGFzc2VydChpdC0+bV9uZXh0LT5tX3ByZXZpb3VzID09IGl0KTsKKyAg
ICAgICAgICAgICAgICBpdC0+bV9uZXh0LT5tX3ByZXZpb3VzID0gaXQtPm1fcHJldmlvdXM7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaXQtPm1fcHJldmlvdXMpIHsKKyAgICAgICAg
ICAgICAgICBhc3NlcnQoaXQtPm1fdGFibGUtPm1faXRlcmF0b3JzICE9IGl0KTsKKyAgICAgICAg
ICAgICAgICBhc3NlcnQoaXQtPm1fcHJldmlvdXMtPm1fbmV4dCA9PSBpdCk7CisgICAgICAgICAg
ICAgICAgaXQtPm1fcHJldmlvdXMtPm1fbmV4dCA9IGl0LT5tX25leHQ7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGFzc2VydChpdC0+bV90YWJsZS0+bV9pdGVyYXRvcnMg
PT0gaXQpOworICAgICAgICAgICAgICAgIGl0LT5tX3RhYmxlLT5tX2l0ZXJhdG9ycyA9IGl0LT5t
X25leHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpdC0+bV90YWJsZSA9
IDA7CisgICAgICAgIGl0LT5tX25leHQgPSAwOworICAgICAgICBpdC0+bV9wcmV2aW91cyA9IDA7
CisgICAgfQorCisjZW5kaWYgLy8gQ0hFQ0tfSEFTSFRBQkxFX0lURVJBVE9SUworCiB9IC8vIG5h
bWVzcGFjZSBLWE1MQ29yZQogCiAjZW5kaWYgLy8gS1hNTENPUkVfSEFTSF9UQUJMRV9ICkluZGV4
OiBreG1sY29yZS9IYXNoVHJhaXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3htbGNvcmUvSGFzaFRyYWl0
cy5oCShyZXZpc2lvbiAxMjE0OCkKKysrIGt4bWxjb3JlL0hhc2hUcmFpdHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8vIC0qLSBtb2RlOiBjKys7IGMtYmFzaWMtb2Zmc2V0OiA0
IC0qLQogLyoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgbGlicmFyaWVzCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykg
MjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
OSw3ICsyOSw3IEBACiBuYW1lc3BhY2UgS1hNTENvcmUgewogCiAgICAgdXNpbmcgc3RkOjpwYWly
OwotICAgIAorCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBJc0ludGVnZXIgICAg
ICAgICAgIHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBmYWxzZTsgfTsKICAgICB0ZW1wbGF0
ZSA8PiBzdHJ1Y3QgSXNJbnRlZ2VyPGJvb2w+ICAgICAgICAgICAgICAgeyBzdGF0aWMgY29uc3Qg
Ym9vbCB2YWx1ZSA9IHRydWU7IH07CiAgICAgdGVtcGxhdGUgPD4gc3RydWN0IElzSW50ZWdlcjxj
aGFyPiAgICAgICAgICAgICAgIHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwpA
QCAtNDMsNDQgKzQzLDM2IEBACiAgICAgdGVtcGxhdGUgPD4gc3RydWN0IElzSW50ZWdlcjx1bnNp
Z25lZCBsb25nPiAgICAgIHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwogICAg
IHRlbXBsYXRlIDw+IHN0cnVjdCBJc0ludGVnZXI8bG9uZyBsb25nPiAgICAgICAgICB7IHN0YXRp
YyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKICAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSXNJ
bnRlZ2VyPHVuc2lnbmVkIGxvbmcgbG9uZz4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRy
dWU7IH07Ci0gICAgICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RydWN0IEdl
bmVyaWNIYXNoVHJhaXRzIHsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBHZW5l
cmljSGFzaFRyYWl0cyB7CiAgICAgICAgIHR5cGVkZWYgVCBUcmFpdFR5cGU7CiAgICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBJc0ludGVnZXI8VD46OnZhbHVlOwog
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gIUlzSW50ZWdlcjxU
Pjo6dmFsdWU7CiAgICAgICAgIHN0YXRpYyBUcmFpdFR5cGUgZW1wdHlWYWx1ZSgpIHsgcmV0dXJu
IElzSW50ZWdlcjxUPjo6dmFsdWUgPyAwIDogVHJhaXRUeXBlKCk7IH0KICAgICB9OwogCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgSGFzaFRyYWl0cyA6IEdlbmVyaWNIYXNo
VHJhaXRzPFQ+IHsKLSAgICB9OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNo
VHJhaXRzIDogR2VuZXJpY0hhc2hUcmFpdHM8VD4geyB9OwogCi0gICAgLy8gbWF5IG5vdCBiZSBh
cHByb3ByaWF0ZSBmb3IgYWxsIHVzZXMgc2luY2UgaXQgd291bGQgZGlzYWxsb3cgMCBhbmQgLTEg
YXMga2V5cwotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgSGFzaFRyYWl0czxpbnQ+IDogR2Vu
ZXJpY0hhc2hUcmFpdHM8aW50PiB7CisgICAgLy8gbWF5IG5vdCBiZSBhcHByb3ByaWF0ZSBmb3Ig
YWxsIHVzZXMgc2luY2UgaXQgZGlzYWxsb3dzIDAgYW5kIC0xIGFzIGtleXMKKyAgICB0ZW1wbGF0
ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPGludD4gOiBHZW5lcmljSGFzaFRyYWl0czxpbnQ+IHsKICAg
ICAgICAgc3RhdGljIFRyYWl0VHlwZSBkZWxldGVkVmFsdWUoKSB7IHJldHVybiAtMTsgfQogICAg
IH07CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQPgotICAgIHN0cnVjdCBIYXNoVHJhaXRzPFAg
Kj4gOiBHZW5lcmljSGFzaFRyYWl0czxQICo+IHsKLSAgICAgICAgdHlwZWRlZiBQICpUcmFpdFR5
cGU7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUD4gc3RydWN0IEhhc2hUcmFpdHM8UCo+IDogR2Vu
ZXJpY0hhc2hUcmFpdHM8UCo+IHsKKyAgICAgICAgdHlwZWRlZiBQKiBUcmFpdFR5cGU7CiAgICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOwogICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gZmFsc2U7Ci0gICAgICAgIHN0YXRp
YyBUcmFpdFR5cGUgZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UCAqPigw
KTsgfQotICAgICAgICBzdGF0aWMgVHJhaXRUeXBlIGRlbGV0ZWRWYWx1ZSgpIHsgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8UCAqPigtMSk7IH0KKyAgICAgICAgc3RhdGljIFRyYWl0VHlwZSBlbXB0
eVZhbHVlKCkgeyByZXR1cm4gMDsgfQorICAgICAgICBzdGF0aWMgVHJhaXRUeXBlIGRlbGV0ZWRW
YWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UCo+KC0xKTsgfQogICAgIH07CiAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBQPgotICAgIHN0cnVjdCBIYXNoVHJhaXRzPFJlZlB0cjxQPiA+
IDogR2VuZXJpY0hhc2hUcmFpdHM8UmVmUHRyPFA+ID4geworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFA+IHN0cnVjdCBIYXNoVHJhaXRzPFJlZlB0cjxQPiA+IDogR2VuZXJpY0hhc2hUcmFpdHM8UmVm
UHRyPFA+ID4gewogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0g
dHJ1ZTsKICAgICB9OwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRz
PgotICAgIGNsYXNzIERlbGV0ZWRWYWx1ZUFzc2lnbmVyOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFRyYWl0cz4gY2xhc3MgRGVsZXRlZFZhbHVlQXNzaWduZXI7CiAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+Ci0gICAgaW5saW5lIHZvaWQgYXNz
aWduRGVsZXRlZChUJiBsb2NhdGlvbikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBUcmFpdHM+IGlubGluZSB2b2lkIGFzc2lnbkRlbGV0ZWQoVCYgbG9jYXRpb24pCiAgICAgewog
ICAgICAgICBEZWxldGVkVmFsdWVBc3NpZ25lcjxULCBUcmFpdHM+Ojphc3NpZ25EZWxldGVkVmFs
dWUobG9jYXRpb24pOwogICAgIH0KQEAgLTk1LDEzICs4NywxMyBAQAogCiAgICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBGaXJzdFRyYWl0czo6ZW1wdHlWYWx1ZUlz
WmVybyAmJiBTZWNvbmRUcmFpdHM6OmVtcHR5VmFsdWVJc1plcm87CiAgICAgICAgIHN0YXRpYyBj
b25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSBGaXJzdFRyYWl0czo6bmVlZHNEZXN0cnVjdGlv
biB8fCBTZWNvbmRUcmFpdHM6Om5lZWRzRGVzdHJ1Y3Rpb247Ci0gICAgICAgIAotICAgICAgICBz
dGF0aWMgVHJhaXRUeXBlIGVtcHR5VmFsdWUoKSAKKworICAgICAgICBzdGF0aWMgVHJhaXRUeXBl
IGVtcHR5VmFsdWUoKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gVHJhaXRUeXBlKEZp
cnN0VHJhaXRzOjplbXB0eVZhbHVlKCksIFNlY29uZFRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsKICAg
ICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBUcmFpdFR5cGUgZGVsZXRlZFZhbHVlKCkgCisgICAg
ICAgIHN0YXRpYyBUcmFpdFR5cGUgZGVsZXRlZFZhbHVlKCkKICAgICAgICAgewogICAgICAgICAg
ICAgcmV0dXJuIFRyYWl0VHlwZShGaXJzdFRyYWl0czo6ZGVsZXRlZFZhbHVlKCksIFNlY29uZFRy
YWl0czo6ZW1wdHlWYWx1ZSgpKTsKICAgICAgICAgfQpAQCAtMTE0LDIzICsxMDYsMTcgQEAKICAg
ICB9OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRmlyc3QsIHR5cGVuYW1lIFNlY29uZD4KLSAg
ICBzdHJ1Y3QgSGFzaFRyYWl0czxwYWlyPEZpcnN0LCBTZWNvbmQ+ID4gOiBwdWJsaWMgUGFpckhh
c2hUcmFpdHM8SGFzaFRyYWl0czxGaXJzdD4sIEhhc2hUcmFpdHM8U2Vjb25kPiA+IHsKLSAgICB9
OworICAgIHN0cnVjdCBIYXNoVHJhaXRzPHBhaXI8Rmlyc3QsIFNlY29uZD4gPiA6IHB1YmxpYyBQ
YWlySGFzaFRyYWl0czxIYXNoVHJhaXRzPEZpcnN0PiwgSGFzaFRyYWl0czxTZWNvbmQ+ID4geyB9
OwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzPgotICAgIHN0cnVj
dCBEZWxldGVkVmFsdWVBc3NpZ25lcgotICAgIHsKLSAgICAgICAgc3RhdGljIHZvaWQgYXNzaWdu
RGVsZXRlZFZhbHVlKFQmIGxvY2F0aW9uKSAKLSAgICAgICAgeyAKLSAgICAgICAgICAgIGxvY2F0
aW9uID0gVHJhaXRzOjpkZWxldGVkVmFsdWUoKTsgCi0gICAgICAgIH0KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+IHN0cnVjdCBEZWxldGVkVmFsdWVBc3NpZ25lciB7
CisgICAgICAgIHN0YXRpYyB2b2lkIGFzc2lnbkRlbGV0ZWRWYWx1ZShUJiBsb2NhdGlvbikgeyBs
b2NhdGlvbiA9IFRyYWl0czo6ZGVsZXRlZFZhbHVlKCk7IH0KICAgICB9OwogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRmlyc3RUcmFpdHMsIHR5cGVuYW1lIFNlY29uZFRyYWl0cz4KICAgICBzdHJ1
Y3QgRGVsZXRlZFZhbHVlQXNzaWduZXI8cGFpcjx0eXBlbmFtZSBGaXJzdFRyYWl0czo6VHJhaXRU
eXBlLCB0eXBlbmFtZSBTZWNvbmRUcmFpdHM6OlRyYWl0VHlwZT4sIFBhaXJIYXNoVHJhaXRzPEZp
cnN0VHJhaXRzLCBTZWNvbmRUcmFpdHM+ID4KICAgICB7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGFz
c2lnbkRlbGV0ZWRWYWx1ZShwYWlyPHR5cGVuYW1lIEZpcnN0VHJhaXRzOjpUcmFpdFR5cGUsIHR5
cGVuYW1lIFNlY29uZFRyYWl0czo6VHJhaXRUeXBlPiYgbG9jYXRpb24pIAotICAgICAgICB7IAor
ICAgICAgICBzdGF0aWMgdm9pZCBhc3NpZ25EZWxldGVkVmFsdWUocGFpcjx0eXBlbmFtZSBGaXJz
dFRyYWl0czo6VHJhaXRUeXBlLCB0eXBlbmFtZSBTZWNvbmRUcmFpdHM6OlRyYWl0VHlwZT4mIGxv
Y2F0aW9uKQorICAgICAgICB7CiAgICAgICAgICAgICBQYWlySGFzaFRyYWl0czxGaXJzdFRyYWl0
cywgU2Vjb25kVHJhaXRzPjo6YXNzaWduRGVsZXRlZFZhbHVlKGxvY2F0aW9uKTsKICAgICAgICAg
fQogICAgIH07CkBAIC0xMzgsOCArMTI0LDggQEAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaXJz
dCwgdHlwZW5hbWUgU2Vjb25kPgogICAgIHN0cnVjdCBEZWxldGVkVmFsdWVBc3NpZ25lcjxwYWly
PEZpcnN0LCBTZWNvbmQ+LCBIYXNoVHJhaXRzPHBhaXI8Rmlyc3QsIFNlY29uZD4gPiA+CiAgICAg
ewotICAgICAgICBzdGF0aWMgdm9pZCBhc3NpZ25EZWxldGVkVmFsdWUocGFpcjxGaXJzdCwgU2Vj
b25kPiYgbG9jYXRpb24pIAotICAgICAgICB7IAorICAgICAgICBzdGF0aWMgdm9pZCBhc3NpZ25E
ZWxldGVkVmFsdWUocGFpcjxGaXJzdCwgU2Vjb25kPiYgbG9jYXRpb24pCisgICAgICAgIHsKICAg
ICAgICAgICAgIEhhc2hUcmFpdHM8cGFpcjxGaXJzdCwgU2Vjb25kPiA+Ojphc3NpZ25EZWxldGVk
VmFsdWUobG9jYXRpb24pOwogICAgICAgICB9CiAgICAgfTsK
</data>
<flag name="review"
          id="1300"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>