<?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>6752</bug_id>
          
          <creation_ts>2006-01-23 22:27:30 -0800</creation_ts>
          <short_desc>Make pointer hash the default for all pointers (plus other Hash improvements)</short_desc>
          <delta_ts>2006-01-23 23:42:11 -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 API</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>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>29669</commentid>
    <comment_count>0</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-01-23 22:27:30 -0800</bug_when>
    <thetext>- renamed PointerHash to PtrHash
- made PtrHash the default hash function for int and pointer types that aren&apos;t further specialized
- added an AtomicStringImpl class to make it easier and more typesafe to identity hash atomic strings
- did appropriate consequent cleanup (very few places now need to declare a hash function)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>29670</commentid>
    <comment_count>1</comment_count>
      <attachid>5902</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-01-23 22:33:35 -0800</bug_when>
    <thetext>Created attachment 5902
cleanup patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>29674</commentid>
    <comment_count>2</comment_count>
      <attachid>5902</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-23 23:27:29 -0800</bug_when>
    <thetext>Comment on attachment 5902
cleanup patch

Funny, I have the same patch for htmlfactory.cpp -- I can discard that now.

+    AtomicString n = getAttribute(nameAttr);

Why not make that const AtomicString&amp;? Also, HTMLGenericFormElementImpl::name() can also return const AtomicString&amp; if we have a way to get a reference to a global empty atomic string. In general it&apos;s great to have functions that return const AtomicString&amp; when they are attributes to avoid any reference count churn.

Looks good. I didn&apos;t spot any problems.

r=me</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5902</attachid>
            <date>2006-01-23 22:33:35 -0800</date>
            <delta_ts>2006-01-23 23:27:29 -0800</delta_ts>
            <desc>cleanup patch</desc>
            <filename>ptr-hash-default.patch.txt</filename>
            <type>text/plain</type>
            <size>68060</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL2t4bWxjb3JlL0hhc2hTZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9reG1sY29yZS9IYXNoU2V0LmgJKHJldmlzaW9uIDEyMzI4KQorKysgSmF2
YVNjcmlwdENvcmUva3htbGNvcmUvSGFzaFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1
Nyw3IEBAIG5hbWVzcGFjZSBLWE1MQ29yZSB7CiAgICAgICAgIH0KICAgICB9OwogICAgIAotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zID0gRGVmYXVs
dEhhc2g8VmFsdWU+LCB0eXBlbmFtZSBUcmFpdHMgPSBIYXNoVHJhaXRzPFZhbHVlPiA+CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMgPSB0eXBlbmFt
ZSBEZWZhdWx0SGFzaDxWYWx1ZT46Okhhc2gsIHR5cGVuYW1lIFRyYWl0cyA9IEhhc2hUcmFpdHM8
VmFsdWU+ID4KICAgICBjbGFzcyBIYXNoU2V0IHsKICAgICBwcml2YXRlOgogICAgICAgICB0eXBl
ZGVmIEhhc2hUYWJsZTxWYWx1ZSwgVmFsdWUsIElkZW50aXR5RXh0cmFjdG9yPFZhbHVlPiwgSGFz
aEZ1bmN0aW9ucywgVHJhaXRzLCBUcmFpdHM+IEltcGxUeXBlOwpJbmRleDogSmF2YVNjcmlwdENv
cmUva3htbGNvcmUvSGFzaEZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2t4bWxjb3JlL0hhc2hGdW5jdGlvbnMuaAkocmV2aXNpb24gMTIzMjgpCisrKyBKYXZhU2NyaXB0
Q29yZS9reG1sY29yZS9IYXNoRnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDI3ICs2
MiwzMSBAQCBuYW1lc3BhY2UgS1hNTENvcmUgewogICAgICAgICBrZXkgXj0gKGtleSA+PiAzMSk7
CiAgICAgICAgIHJldHVybiBrZXk7CiAgICAgfQotICAgIAotICAgIHRlbXBsYXRlPD4gc3RydWN0
IERlZmF1bHRIYXNoPHZvaWQgKj4gewotICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaCh2b2lk
ICprZXkpIHsgcmV0dXJuIHBvaW50ZXJIYXNoPHNpemVvZih2b2lkICopPihrZXkpOyB9Ci0gICAg
ICAgIHN0YXRpYyBib29sIGVxdWFsKHZvaWQgKmEsIHZvaWQgKmIpIHsgcmV0dXJuIGEgPT0gYjsg
fQotICAgIH07Ci0gICAgCi0gICAgLy8gcG9pbnRlciBpZGVudGl0eSBoYXNoIC0gZGVmYXVsdCBm
b3Igdm9pZCAqLCBtdXN0IGJlIHJlcXVlc3RlZCBleHBsaWNpdGx5IGZvciBvdGhlciAKLSAgICAv
LyBwb2ludGVyIHR5cGVzOyBhbHNvIHNob3VsZCB3b3JrIGZvciBpbnRlZ2VyIHR5cGVzCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFBvaW50ZXJIYXNoIHsKKworICAgIC8vIHBvaW50
ZXIgaWRlbnRpdHkgaGFzaCAtIGRlZmF1bHQgZm9yIHBvaW50ZXIgdHlwZXMgdGhhdCBkb24ndAor
ICAgIC8vIGV4cGxpY2l0bHkgc3BlY2lhbGl6ZSBvdGhlcndpc2U7IGFsc28gc2hvdWxkIHdvcmsg
Zm9yIGludGVnZXIKKyAgICAvLyB0eXBlcworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBQdHJIYXNoIHsKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goVCBrZXkpIHsgcmV0dXJu
IHBvaW50ZXJIYXNoPHNpemVvZih2b2lkICopPigodm9pZCAqKWtleSk7IH0KICAgICAgICAgc3Rh
dGljIGJvb2wgZXF1YWwoVCBhLCBUIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQogICAgIH07CiAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBQPiBzdHJ1Y3QgUG9pbnRlckhhc2g8UmVmUHRyPFA+ID4gewor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFA+IHN0cnVjdCBQdHJIYXNoPFJlZlB0cjxQPiA+IHsKICAg
ICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUmVmUHRyPFA+JiBrZXkpIHsgcmV0dXJu
ICBwb2ludGVySGFzaDxzaXplb2Yodm9pZCAqKT4oKHZvaWQgKilrZXkuZ2V0KCkpOyB9CiAgICAg
ICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFJlZlB0cjxQPiYgYSwgY29uc3QgUmVmUHRyPFA+
JiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
UD4gc3RydWN0IERlZmF1bHRIYXNoPFAgKj4geworICAgICAgICB0eXBlZGVmIFB0ckhhc2g8UCAq
PiBIYXNoOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxpbnQ+
IHsKKyAgICAgICAgdHlwZWRlZiBQdHJIYXNoPGludD4gSGFzaDsKKyAgICB9OwogICAgIAogfSAv
LyBuYW1lc3BhY2UgS1hNTENvcmUKIAogdXNpbmcgS1hNTENvcmU6OkRlZmF1bHRIYXNoOwotdXNp
bmcgS1hNTENvcmU6OlBvaW50ZXJIYXNoOwordXNpbmcgS1hNTENvcmU6OlB0ckhhc2g7CiAKICNl
bmRpZiAvLyBLWExNQ09SRV9IQVNIX0ZVTkNUSU9OU19ICkluZGV4OiBKYXZhU2NyaXB0Q29yZS9r
eG1sY29yZS9IYXNoQ291bnRlZFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2t4
bWxjb3JlL0hhc2hDb3VudGVkU2V0LmgJKHJldmlzaW9uIDEyMzI4KQorKysgSmF2YVNjcmlwdENv
cmUva3htbGNvcmUvSGFzaENvdW50ZWRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgs
NyBAQAogCiBuYW1lc3BhY2UgS1hNTENvcmUgewogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFs
dWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMgPSBEZWZhdWx0SGFzaDxWYWx1ZT4sIHR5cGVuYW1l
IFRyYWl0cyA9IEhhc2hUcmFpdHM8VmFsdWU+ID4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1
ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucyA9IHR5cGVuYW1lIERlZmF1bHRIYXNoPFZhbHVlPjo6
SGFzaCwgdHlwZW5hbWUgVHJhaXRzID0gSGFzaFRyYWl0czxWYWx1ZT4gPgogICAgIGNsYXNzIEhh
c2hDb3VudGVkU2V0IHsKICAgICBwcml2YXRlOgogICAgICAgICB0eXBlZGVmIEhhc2hNYXA8VmFs
dWUsIHVuc2lnbmVkLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+IEltcGxUeXBlOwpJbmRleDogSmF2
YVNjcmlwdENvcmUva3htbGNvcmUvSGFzaE1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL2t4bWxjb3JlL0hhc2hNYXAuaAkocmV2aXNpb24gMTIzMjgpCisrKyBKYXZhU2NyaXB0Q29y
ZS9reG1sY29yZS9IYXNoTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHVi
bGljOgogfTsKIAogCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIE1hcHBlZCwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucyA9IERlZmF1bHRIYXNoPEtleT4sIHR5cGVuYW1lIEtleVRyYWl0
cyA9IEhhc2hUcmFpdHM8S2V5PiwgdHlwZW5hbWUgTWFwcGVkVHJhaXRzID0gSGFzaFRyYWl0czxN
YXBwZWQ+ID4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkLCB0eXBlbmFt
ZSBIYXNoRnVuY3Rpb25zID0gdHlwZW5hbWUgRGVmYXVsdEhhc2g8S2V5Pjo6SGFzaCwgdHlwZW5h
bWUgS2V5VHJhaXRzID0gSGFzaFRyYWl0czxLZXk+LCB0eXBlbmFtZSBNYXBwZWRUcmFpdHMgPSBI
YXNoVHJhaXRzPE1hcHBlZD4gPgogY2xhc3MgSGFzaE1hcCB7CiAgcHVibGljOgogICAgIHR5cGVk
ZWYgS2V5IEtleVR5cGU7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS9IYXNoTWFwUHRy
U3BlYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2t4bWxjb3JlL0hhc2hNYXBQdHJT
cGVjLmgJKHJldmlzaW9uIDEyMzI4KQorKysgSmF2YVNjcmlwdENvcmUva3htbGNvcmUvSGFzaE1h
cFB0clNwZWMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMjIgKzMxLDI2IEBACiAKIG5hbWVzcGFj
ZSBLWE1MQ29yZSB7CiAKKyAgICBzdHJ1Y3QgVm9pZFB0ckhhc2ggOiBwdWJsaWMgUHRySGFzaDx2
b2lkICo+CisgICAgeworICAgIH07CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQLCB0eXBlbmFt
ZSBNYXBwZWQ+Ci0gICAgY2xhc3MgUG9pbnRlckhhc2hJdGVyYXRvckFkYXB0ZXIgeworICAgIGNs
YXNzIFB0ckhhc2hJdGVyYXRvckFkYXB0ZXIgewogICAgIHByaXZhdGU6Ci0gICAgICAgIHR5cGVk
ZWYgSGFzaE1hcDxQICosIE1hcHBlZCwgUG9pbnRlckhhc2g8UCAqPiwgSGFzaFRyYWl0czxQICo+
LCBIYXNoVHJhaXRzPE1hcHBlZD4gPiBNYXBUeXBlOworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8
UCAqLCBNYXBwZWQsIFB0ckhhc2g8UCAqPiwgSGFzaFRyYWl0czxQICo+LCBIYXNoVHJhaXRzPE1h
cHBlZD4gPiBNYXBUeXBlOwogICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIE1hcFR5cGU6OlZhbHVl
VHlwZSBWYWx1ZVR5cGU7CiAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgTWFwVHlwZTo6SW1wbFZh
bHVlVHlwZSBJbXBsVmFsdWVUeXBlOwotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEhhc2hNYXA8
UCAqLCBNYXBwZWQsIFBvaW50ZXJIYXNoPFAgKj4sIEhhc2hUcmFpdHM8UCAqPiwgSGFzaFRyYWl0
czxNYXBwZWQ+ID46OkltcGxJdGVyYXRvciBJbXBsSXRlcmF0b3I7Ci0gICAgICAgIHR5cGVkZWYg
UG9pbnRlckhhc2hJdGVyYXRvckFkYXB0ZXI8UCwgTWFwcGVkPiBpdGVyYXRvcjsKKyAgICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBIYXNoTWFwPFAgKiwgTWFwcGVkLCBQdHJIYXNoPFAgKj4sIEhhc2hU
cmFpdHM8UCAqPiwgSGFzaFRyYWl0czxNYXBwZWQ+ID46OkltcGxJdGVyYXRvciBJbXBsSXRlcmF0
b3I7CisgICAgICAgIHR5cGVkZWYgUHRySGFzaEl0ZXJhdG9yQWRhcHRlcjxQLCBNYXBwZWQ+IGl0
ZXJhdG9yOwogICAgICAgICB0eXBlZGVmIFZhbHVlVHlwZSYgUmVmZXJlbmNlVHlwZTsKICAgICAg
ICAgdHlwZWRlZiBWYWx1ZVR5cGUgKlBvaW50ZXJUeXBlOwogICAgICAgICAKLSAgICAgICAgZnJp
ZW5kIGNsYXNzIEhhc2hNYXA8UCAqLCBNYXBwZWQsIFBvaW50ZXJIYXNoPFAgKj4sIEhhc2hUcmFp
dHM8UCAqPiwgSGFzaFRyYWl0czxNYXBwZWQ+ID47CisgICAgICAgIGZyaWVuZCBjbGFzcyBIYXNo
TWFwPFAgKiwgTWFwcGVkLCBQdHJIYXNoPFAgKj4sIEhhc2hUcmFpdHM8UCAqPiwgSGFzaFRyYWl0
czxNYXBwZWQ+ID47CiAgICAgICAgIAogICAgIHB1YmxpYzoKLSAgICAgICAgUG9pbnRlckhhc2hJ
dGVyYXRvckFkYXB0ZXIoKSB7fQotICAgICAgICBQb2ludGVySGFzaEl0ZXJhdG9yQWRhcHRlcihj
b25zdCBJbXBsSXRlcmF0b3IgJmltcGwpIDogbV9pbXBsKGltcGwpIHt9CisgICAgICAgIFB0ckhh
c2hJdGVyYXRvckFkYXB0ZXIoKSB7fQorICAgICAgICBQdHJIYXNoSXRlcmF0b3JBZGFwdGVyKGNv
bnN0IEltcGxJdGVyYXRvciAmaW1wbCkgOiBtX2ltcGwoaW1wbCkge30KICAgICAgICAgCiAgICAg
ICAgIC8vIGRlZmF1bHQgY29weSwgYXNzaWdubWVudCBhbmQgZGVzdHJ1Y3RvciBhcmUgb2sKICAg
ICAgICAgCkBAIC03NywyNCArODEsMjQgQEAgbmFtZXNwYWNlIEtYTUxDb3JlIHsKICAgICB9Owog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUCwgdHlwZW5hbWUgTWFwcGVkPgotICAgIGNsYXNzIFBv
aW50ZXJIYXNoQ29uc3RJdGVyYXRvckFkYXB0ZXIgeworICAgIGNsYXNzIFB0ckhhc2hDb25zdEl0
ZXJhdG9yQWRhcHRlciB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFAg
KiwgTWFwcGVkLCBQb2ludGVySGFzaDxQICo+LCBIYXNoVHJhaXRzPFAgKj4sIEhhc2hUcmFpdHM8
TWFwcGVkPiA+IE1hcFR5cGU7CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxQICosIE1hcHBlZCwg
UHRySGFzaDxQICo+LCBIYXNoVHJhaXRzPFAgKj4sIEhhc2hUcmFpdHM8TWFwcGVkPiA+IE1hcFR5
cGU7CiAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgTWFwVHlwZTo6VmFsdWVUeXBlIFZhbHVlVHlw
ZTsKICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBNYXBUeXBlOjpJbXBsVmFsdWVUeXBlIEltcGxW
YWx1ZVR5cGU7CiAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgTWFwVHlwZTo6SW1wbEl0ZXJhdG9y
IEltcGxJdGVyYXRvcjsKICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBNYXBUeXBlOjpJbXBsQ29u
c3RJdGVyYXRvciBJbXBsQ29uc3RJdGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiBQb2ludGVySGFz
aEl0ZXJhdG9yQWRhcHRlcjxQLCBNYXBwZWQ+IGl0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIFBv
aW50ZXJIYXNoQ29uc3RJdGVyYXRvckFkYXB0ZXI8UCwgTWFwcGVkPiBjb25zdF9pdGVyYXRvcjsK
KyAgICAgICAgdHlwZWRlZiBQdHJIYXNoSXRlcmF0b3JBZGFwdGVyPFAsIE1hcHBlZD4gaXRlcmF0
b3I7CisgICAgICAgIHR5cGVkZWYgUHRySGFzaENvbnN0SXRlcmF0b3JBZGFwdGVyPFAsIE1hcHBl
ZD4gY29uc3RfaXRlcmF0b3I7CiAgICAgICAgIHR5cGVkZWYgY29uc3QgVmFsdWVUeXBlJiBSZWZl
cmVuY2VUeXBlOwogICAgICAgICB0eXBlZGVmIGNvbnN0IFZhbHVlVHlwZSAqUG9pbnRlclR5cGU7
CiAgICAgICAgIAotICAgICAgICBmcmllbmQgY2xhc3MgSGFzaE1hcDxQICosIE1hcHBlZCwgUG9p
bnRlckhhc2g8UCAqPiwgSGFzaFRyYWl0czxQICo+LCBIYXNoVHJhaXRzPE1hcHBlZD4gPjsKKyAg
ICAgICAgZnJpZW5kIGNsYXNzIEhhc2hNYXA8UCAqLCBNYXBwZWQsIFB0ckhhc2g8UCAqPiwgSGFz
aFRyYWl0czxQICo+LCBIYXNoVHJhaXRzPE1hcHBlZD4gPjsKICAgICAgICAgCiAgICAgcHVibGlj
OgotICAgICAgICBQb2ludGVySGFzaENvbnN0SXRlcmF0b3JBZGFwdGVyKCkge30KLSAgICAgICAg
UG9pbnRlckhhc2hDb25zdEl0ZXJhdG9yQWRhcHRlcihjb25zdCBJbXBsQ29uc3RJdGVyYXRvciAm
aW1wbCkgOiBtX2ltcGwoaW1wbCkge30KLSAgICAgICAgUG9pbnRlckhhc2hDb25zdEl0ZXJhdG9y
QWRhcHRlcihjb25zdCBpdGVyYXRvciAmb3RoZXIpIDogbV9pbXBsKG90aGVyLm1faW1wbCkgeyB9
CisgICAgICAgIFB0ckhhc2hDb25zdEl0ZXJhdG9yQWRhcHRlcigpIHt9CisgICAgICAgIFB0ckhh
c2hDb25zdEl0ZXJhdG9yQWRhcHRlcihjb25zdCBJbXBsQ29uc3RJdGVyYXRvciAmaW1wbCkgOiBt
X2ltcGwoaW1wbCkge30KKyAgICAgICAgUHRySGFzaENvbnN0SXRlcmF0b3JBZGFwdGVyKGNvbnN0
IGl0ZXJhdG9yICZvdGhlcikgOiBtX2ltcGwob3RoZXIubV9pbXBsKSB7IH0KICAgICAgICAgCiAg
ICAgICAgIC8vIGRlZmF1bHQgY29weSwgYXNzaWdubWVudCBhbmQgZGVzdHJ1Y3RvciBhcmUgb2sK
ICAgICAgICAgCkBAIC0xMjUsMjAgKzEyOSwyMCBAQCBuYW1lc3BhY2UgS1hNTENvcmUgewogICAg
IH07CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQLCB0eXBlbmFtZSBNYXBwZWQ+Ci0gICAgY2xh
c3MgSGFzaE1hcDxQICosIE1hcHBlZCwgUG9pbnRlckhhc2g8UCAqPiwgSGFzaFRyYWl0czxQICo+
LCBIYXNoVHJhaXRzPE1hcHBlZD4gPiB7CisgICAgY2xhc3MgSGFzaE1hcDxQICosIE1hcHBlZCwg
UHRySGFzaDxQICo+LCBIYXNoVHJhaXRzPFAgKj4sIEhhc2hUcmFpdHM8TWFwcGVkPiA+IHsKICAg
ICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgUCAqS2V5VHlwZTsKICAgICAgICAgdHlwZWRlZiBN
YXBwZWQgTWFwcGVkVHlwZTsKICAgICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8S2V5VHlwZSwgTWFw
cGVkPiBWYWx1ZVR5cGU7CiAgICAgcHJpdmF0ZToKICAgICAgICAgLy8gaW1wb3J0YW50IG5vdCB0
byB1c2UgcG9pbnRlckhhc2gvcG9pbnRlckVxdWFsIGhlcmUgb3IgaW5zdGFudGlhdGlvbiB3b3Vs
ZCByZWN1cnNlCi0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDx2b2lkICosIE1hcHBlZFR5cGUsIERl
ZmF1bHRIYXNoPHZvaWQgKj4sIEhhc2hUcmFpdHM8dm9pZCAqPiwgSGFzaFRyYWl0czxNYXBwZWQ+
ID4gSW1wbFR5cGU7CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDx2b2lkICosIE1hcHBlZFR5cGUs
IFZvaWRQdHJIYXNoLCBIYXNoVHJhaXRzPHZvaWQgKj4sIEhhc2hUcmFpdHM8TWFwcGVkPiA+IElt
cGxUeXBlOwogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBJbXBsVHlwZTo6
VmFsdWVUeXBlIEltcGxWYWx1ZVR5cGU7CiAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgSW1wbFR5
cGU6Oml0ZXJhdG9yIEltcGxJdGVyYXRvcjsKICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBJbXBs
VHlwZTo6Y29uc3RfaXRlcmF0b3IgSW1wbENvbnN0SXRlcmF0b3I7Ci0gICAgICAgIHR5cGVkZWYg
UG9pbnRlckhhc2hJdGVyYXRvckFkYXB0ZXI8UCwgTWFwcGVkPiBpdGVyYXRvcjsKLSAgICAgICAg
dHlwZWRlZiBQb2ludGVySGFzaENvbnN0SXRlcmF0b3JBZGFwdGVyPFAsIE1hcHBlZD4gY29uc3Rf
aXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgUHRySGFzaEl0ZXJhdG9yQWRhcHRlcjxQLCBNYXBw
ZWQ+IGl0ZXJhdG9yOworICAgICAgICB0eXBlZGVmIFB0ckhhc2hDb25zdEl0ZXJhdG9yQWRhcHRl
cjxQLCBNYXBwZWQ+IGNvbnN0X2l0ZXJhdG9yOwogICAgICAgICAKICAgICAgICAgSGFzaE1hcCgp
IHt9CiAgICAgICAgIApAQCAtMTcxLDIwICsxNzUsMjAgQEAgbmFtZXNwYWNlIEtYTUxDb3JlIHsK
ICAgICB9OwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFAsIHR5cGVuYW1lIFE+Ci0gICAg
Y2xhc3MgSGFzaE1hcDxQICosIFEgKiwgUG9pbnRlckhhc2g8UCAqPiwgSGFzaFRyYWl0czxQICo+
LCBIYXNoVHJhaXRzPFEgKj4gPiB7CisgICAgY2xhc3MgSGFzaE1hcDxQICosIFEgKiwgUHRySGFz
aDxQICo+LCBIYXNoVHJhaXRzPFAgKj4sIEhhc2hUcmFpdHM8USAqPiA+IHsKICAgICBwcml2YXRl
OgotICAgICAgICAvLyBpbXBvcnRhbnQgbm90IHRvIHVzZSBQb2ludGVySGFzaCBoZXJlIG9yIGlu
c3RhbnRpYXRpb24gd291bGQgcmVjdXJzZQotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8dm9pZCAq
LCB2b2lkICosIERlZmF1bHRIYXNoPHZvaWQgKj4sIEhhc2hUcmFpdHM8dm9pZCAqPiwgSGFzaFRy
YWl0czx2b2lkICo+ID4gSW1wbE1hcFR5cGU7CisgICAgICAgIC8vIGltcG9ydGFudCBub3QgdG8g
dXNlIFB0ckhhc2ggaGVyZSBvciBpbnN0YW50aWF0aW9uIHdvdWxkIHJlY3Vyc2UKKyAgICAgICAg
dHlwZWRlZiBIYXNoTWFwPHZvaWQgKiwgdm9pZCAqLCBWb2lkUHRySGFzaCwgSGFzaFRyYWl0czx2
b2lkICo+LCBIYXNoVHJhaXRzPHZvaWQgKj4gPiBJbXBsTWFwVHlwZTsKICAgICBwdWJsaWM6CiAg
ICAgICAgIHR5cGVkZWYgUCAqS2V5VHlwZTsKICAgICAgICAgdHlwZWRlZiBRICpNYXBwZWRUeXBl
OwogICAgICAgICB0eXBlZGVmIHN0ZDo6cGFpcjxLZXlUeXBlLCBNYXBwZWRUeXBlPiBWYWx1ZVR5
cGU7CiAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpwYWlyPHZvaWQgKiwgdm9pZCAqPiBJ
bXBsVmFsdWVUeXBlOwotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUl0ZXJhdG9yPHZvaWQgKiwg
SW1wbFZhbHVlVHlwZSwgUGFpckZpcnN0RXh0cmFjdG9yPHZvaWQgKiwgdm9pZCo+LCBEZWZhdWx0
SGFzaDx2b2lkICo+LCBQYWlySGFzaFRyYWl0czxIYXNoVHJhaXRzPHZvaWQgKj4sIEhhc2hUcmFp
dHM8dm9pZCAqPiA+LCBIYXNoVHJhaXRzPHZvaWQgKj4gPiBJbXBsSXRlcmF0b3I7Ci0gICAgICAg
IHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjx2b2lkICosIEltcGxWYWx1ZVR5cGUsIFBh
aXJGaXJzdEV4dHJhY3Rvcjx2b2lkICosIHZvaWQqPiwgRGVmYXVsdEhhc2g8dm9pZCAqPiwgUGFp
ckhhc2hUcmFpdHM8SGFzaFRyYWl0czx2b2lkICo+LCBIYXNoVHJhaXRzPHZvaWQgKj4gPiwgSGFz
aFRyYWl0czx2b2lkICo+ID4gSW1wbENvbnN0SXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFz
aFRhYmxlSXRlcmF0b3I8dm9pZCAqLCBJbXBsVmFsdWVUeXBlLCBQYWlyRmlyc3RFeHRyYWN0b3I8
dm9pZCAqLCB2b2lkKj4sIFZvaWRQdHJIYXNoLCBQYWlySGFzaFRyYWl0czxIYXNoVHJhaXRzPHZv
aWQgKj4sIEhhc2hUcmFpdHM8dm9pZCAqPiA+LCBIYXNoVHJhaXRzPHZvaWQgKj4gPiBJbXBsSXRl
cmF0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRvcjx2b2lkICosIElt
cGxWYWx1ZVR5cGUsIFBhaXJGaXJzdEV4dHJhY3Rvcjx2b2lkICosIHZvaWQqPiwgVm9pZFB0ckhh
c2gsIFBhaXJIYXNoVHJhaXRzPEhhc2hUcmFpdHM8dm9pZCAqPiwgSGFzaFRyYWl0czx2b2lkICo+
ID4sIEhhc2hUcmFpdHM8dm9pZCAqPiA+IEltcGxDb25zdEl0ZXJhdG9yOwogICAgICAgICAKLSAg
ICAgICAgdHlwZWRlZiBQb2ludGVySGFzaEl0ZXJhdG9yQWRhcHRlcjxQLCBRICo+IGl0ZXJhdG9y
OwotICAgICAgICB0eXBlZGVmIFBvaW50ZXJIYXNoQ29uc3RJdGVyYXRvckFkYXB0ZXI8UCwgUSAq
PiBjb25zdF9pdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBQdHJIYXNoSXRlcmF0b3JBZGFwdGVy
PFAsIFEgKj4gaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgUHRySGFzaENvbnN0SXRlcmF0b3JB
ZGFwdGVyPFAsIFEgKj4gY29uc3RfaXRlcmF0b3I7CiAgICAgICAgIAogICAgICAgICBIYXNoTWFw
KCkge30KICAgICAgICAgCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjMyOCkKKysrIEphdmFT
Y3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDM2IEBACiAyMDA2
LTAxLTIzICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CiAKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSByZW5hbWVkIFBvaW50ZXJIYXNo
IHRvIFB0ckhhc2gKKyAgICAgICAgLSBtYWRlIFB0ckhhc2ggdGhlIGRlZmF1bHQgaGFzaCBmdW5j
dGlvbiBmb3IgaW50IGFuZCBwb2ludGVyIHR5cGVzIHRoYXQgYXJlbid0IGZ1cnRoZXIgc3BlY2lh
bGl6ZWQKKyAgICAgICAgLSBhZGRlZCBhbiBBdG9taWNTdHJpbmdJbXBsIGNsYXNzIHRvIG1ha2Ug
aXQgZWFzaWVyIGFuZCBtb3JlIHR5cGVzYWZlIHRvIGlkZW50aXR5IGhhc2ggYXRvbWljIHN0cmlu
Z3MKKyAgICAgICAgLSBkaWQgYXBwcm9wcmlhdGUgY29uc2VxdWVudCBjbGVhbnVwICh2ZXJ5IGZl
dyBwbGFjZXMgbm93IG5lZWQgdG8gZGVjbGFyZSBhIGhhc2ggZnVuY3Rpb24pCisgICAgICAgIGh0
dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc1MgorICAgICAg
ICAKKyAgICAgICAgKiBranMvYXJyYXlfb2JqZWN0LmNwcDoKKyAgICAgICAgKEFycmF5UHJvdG9G
dW5jOjpjYWxsQXNGdW5jdGlvbik6IG5vIG5lZWQgdG8gbWVudGlvbiBQb2ludGVySGFzaAorICAg
ICAgICAqIGtqcy9jb2xsZWN0b3IuY3BwOiBkaXR0bworICAgICAgICAqIGtqcy9pZGVudGlmaWVy
LmNwcDoKKyAgICAgICAgKEtYTUxDb3JlOjopOiBkZWNsYXJlIERlZmF1bHRIYXNoIHRoZSBuZXcg
d2F5CisgICAgICAgICoga2pzL2ludGVybmFsLmNwcDogbm8gbmVlZCB0byBtZW50aW9uIFBvaW50
ZXJIYXNoCisgICAgICAgICoga2pzL3VzdHJpbmcuaDoKKyAgICAgICAgKiBreG1sY29yZS9IYXNo
Q291bnRlZFNldC5oOiBjaGFuZ2UgaG93IHdlIGdldCB0aGUgZGVmYXVsdCBoYXNoIHRvIG1ha2Ug
aXQKKyAgICAgICAgZWFzaWVyIHRvIHNwZWNpYWxpemUgb24gUHRySGFzaAorICAgICAgICAqIGt4
bWxjb3JlL0hhc2hGdW5jdGlvbnMuaDoKKyAgICAgICAgKEtYTUxDb3JlOjopOiByZW5hbWVkIFBv
aW50ZXJIYXNoIHRvIFB0ckhhc2g7IGNoYW5nZWQgRGVmYXVsdEhhc2ggc28gdGhhdCBpdCBoYXMK
KyAgICAgICAgYSBIYXNoIHR5cGVkZWYgcmF0aGVyIHRoYW4gYmVpbmcgYSBoYXNoIGZ1bmN0aW9u
IGNsYXNzIGl0c2VsZjsgZGVjbGFyZWQgRGVmYXVsdEhhc2gKKyAgICAgICAgZm9yIGludCBhbmQg
cGFydGlhbGl6eSBzcGVjaWFsaXplZCBmb3IgcG9pbnRlciB0eXBlcworICAgICAgICAqIGt4bWxj
b3JlL0hhc2hNYXBQdHJTcGVjLmg6CisgICAgICAgIChLWE1MQ29yZTo6UHRySGFzaEl0ZXJhdG9y
QWRhcHRlcjo6UHRySGFzaEl0ZXJhdG9yQWRhcHRlcik6IFNsaWdodCB0d2Vha3MgZm9yIG5ldwor
ICAgICAgICB3YXkgb2YgaGFuZGxpbmcgcG9pbnRlciBoYXNoCisgICAgICAgIChLWE1MQ29yZTo6
UHRySGFzaENvbnN0SXRlcmF0b3JBZGFwdGVyOjpQdHJIYXNoQ29uc3RJdGVyYXRvckFkYXB0ZXIp
OiBkaXR0bworICAgICAgICAoS1hNTENvcmU6Oik6IGRpdHRvCisgICAgICAgICoga3htbGNvcmUv
SGFzaE1hcC5oOiBkaXR0bworICAgICAgICAqIGt4bWxjb3JlL0hhc2hTZXQuaDogZGl0dG8KKwor
MjAwNi0wMS0yMyAgTWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgorCiAgICAgICAg
IFJldmlld2VkIGJ5IFRpbSBPbWVybmljay4KICAgICAgICAgCiAgICAgICAgIC0gdXNlIGNsYXNz
ZXMgaW5zdGVhZCBvZiBmcmVlIGZ1bmN0aW9ucyBmb3IgZXh0cmFjdG9ycywgdGhpcyBiZXR0ZXIg
bWF0Y2hlcyBob3cgb3RoZXIKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL2ludGVybmFsLmNwcAkocmV2aXNpb24g
MTIzMjgpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJuYWwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MjUsNyArNDI1LDcgQEAgdm9pZCBQYXJzZXI6OmFjY2VwdChQcm9ncmFtTm9kZSAqcHJv
ZykKIAogSW50ZXJwcmV0ZXJJbXAqIEludGVycHJldGVySW1wOjpzX2hvb2sgPSAwTDsKIAotdHlw
ZWRlZiBIYXNoTWFwPEpTT2JqZWN0ICosIEludGVycHJldGVySW1wICosIFBvaW50ZXJIYXNoPEpT
T2JqZWN0ICo+ID4gSW50ZXJwcmV0ZXJNYXA7Cit0eXBlZGVmIEhhc2hNYXA8SlNPYmplY3QgKiwg
SW50ZXJwcmV0ZXJJbXAgKj4gSW50ZXJwcmV0ZXJNYXA7CiAKIHN0YXRpYyBpbmxpbmUgSW50ZXJw
cmV0ZXJNYXAgJmludGVycHJldGVyTWFwKCkKIHsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9p
ZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvaWRlbnRpZmll
ci5jcHAJKHJldmlzaW9uIDEyMzI4KQorKysgSmF2YVNjcmlwdENvcmUva2pzL2lkZW50aWZpZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxMSArNDQsMTcgQEAKIG5hbWVzcGFjZSBLWE1MQ29y
ZSB7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBEZWZhdWx0SGFzaDsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBTdHJIYXNoOwogCi0gICAgdGVtcGxhdGU8PiBzdHJ1
Y3QgRGVmYXVsdEhhc2g8S0pTOjpVU3RyaW5nOjpSZXAgKj4geworICAgIHRlbXBsYXRlPD4gc3Ry
dWN0IFN0ckhhc2g8S0pTOjpVU3RyaW5nOjpSZXAgKj4gewogICAgICAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBLSlM6OlVTdHJpbmc6OlJlcCAqa2V5KSB7IHJldHVybiBrZXktPmhhc2go
KTsgfQogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBLSlM6OlVTdHJpbmc6OlJlcCAq
YSwgY29uc3QgS0pTOjpVU3RyaW5nOjpSZXAgKmIpIHsgcmV0dXJuIEtKUzo6SWRlbnRpZmllcjo6
ZXF1YWwoYSwgYik7IH0KICAgICB9OworCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhh
c2g8S0pTOjpVU3RyaW5nOjpSZXAgKj4geworICAgICAgICB0eXBlZGVmIFN0ckhhc2g8S0pTOjpV
U3RyaW5nOjpSZXAgKj4gSGFzaDsKKyAgICB9OworCiB9CiAKIG5hbWVzcGFjZSBLSlMgewpJbmRl
eDogSmF2YVNjcmlwdENvcmUva2pzL3VzdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9ranMvdXN0cmluZy5oCShyZXZpc2lvbiAxMjMyOCkKKysrIEphdmFTY3JpcHRDb3JlL2tq
cy91c3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAgdHlwZWRlZiB1bnNp
Z25lZCBsb25nIHVsb25nOwogICovCiBuYW1lc3BhY2UgRE9NIHsKICAgY2xhc3MgRE9NU3RyaW5n
OworICBjbGFzcyBBdG9taWNTdHJpbmc7CiB9CiBjbGFzcyBLSlNjcmlwdDsKIGNsYXNzIFFTdHJp
bmc7CkBAIC0yNzUsMTEgKzI3NiwxNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgKiBOb3RlOiBm
ZWVsIGZyZWUgdG8gY29udGFjdCBtZSBpZiB5b3Ugd2FudCB0byBzZWUgYSBkdW1teSBoZWFkZXIg
Zm9yCiAgICAgICogeW91ciBmYXZvcml0ZSBGb29TdHJpbmcgY2xhc3MgaGVyZSAhCiAgICAgICov
Ci0gICAgVVN0cmluZyhjb25zdCBRU3RyaW5nICYpOworICAgIFVTdHJpbmcoY29uc3QgUVN0cmlu
ZyYpOwogICAgIC8qKgogICAgICAqIENvbnZlbmllbmNlIGRlY2xhcmF0aW9uIG9ubHkgISBTZWUg
VVN0cmluZyhjb25zdCBRU3RyaW5nJikuCiAgICAgICovCi0gICAgVVN0cmluZyhjb25zdCBET006
OkRPTVN0cmluZyAmKTsKKyAgICBVU3RyaW5nKGNvbnN0IERPTTo6RE9NU3RyaW5nJik7CisgICAg
LyoqCisgICAgICogQ29udmVuaWVuY2UgZGVjbGFyYXRpb24gb25seSAhIFNlZSBVU3RyaW5nKGNv
bnN0IFFTdHJpbmcmKS4KKyAgICAgKi8KKyAgICBVU3RyaW5nKGNvbnN0IERPTTo6QXRvbWljU3Ry
aW5nJik7CisKICAgICAvKioKICAgICAgKiBDb25jYXRlbmF0aW9uIGNvbnN0cnVjdG9yLiBNYWtl
cyBvcGVyYXRvcisgbW9yZSBlZmZpY2llbnQuCiAgICAgICovCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ranMvY29sbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvY29s
bGVjdG9yLmNwcAkocmV2aXNpb24gMTIzMjgpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvY29sbGVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk1LDcgKzM5NSw3IEBAIHZvaWQgQ29sbGVjdG9y
OjptYXJrU3RhY2tPYmplY3RzQ29uc2VydmEKICNlbmRpZgogfQogCi10eXBlZGVmIEhhc2hDb3Vu
dGVkU2V0PEpTQ2VsbCAqLCBQb2ludGVySGFzaDxKU0NlbGwgKj4gPiBQcm90ZWN0Q291bnRzOwor
dHlwZWRlZiBIYXNoQ291bnRlZFNldDxKU0NlbGwgKj4gUHJvdGVjdENvdW50czsKIAogc3RhdGlj
IFByb3RlY3RDb3VudHMmIHByb3RlY3RlZFZhbHVlcygpCiB7CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ranMvYXJyYXlfb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMv
YXJyYXlfb2JqZWN0LmNwcAkocmV2aXNpb24gMTIzMjgpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMv
YXJyYXlfb2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcwLDcgKzQ3MCw3IEBAIEpTVmFs
dWUgKkFycmF5UHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbigKIAogICAgIC8vIGZhbGwgdGhyb3Vn
aAogICBjYXNlIEpvaW46IHsKLSAgICBzdGF0aWMgSGFzaFNldDxKU09iamVjdCosIFBvaW50ZXJI
YXNoPEpTT2JqZWN0Kj4gPiB2aXNpdGVkRWxlbXM7CisgICAgc3RhdGljIEhhc2hTZXQ8SlNPYmpl
Y3QqPiB2aXNpdGVkRWxlbXM7CiAgICAgaWYgKHZpc2l0ZWRFbGVtcy5jb250YWlucyh0aGlzT2Jq
KSkKICAgICAgIHJldHVybiBqc1N0cmluZygiIik7CiAgICAgVVN0cmluZyBzZXBhcmF0b3IgPSAi
LCI7CkluZGV4OiBXZWJDb3JlL2todG1sL2RvbS9kb21fc3RyaW5nLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9raHRtbC9kb20vZG9tX3N0cmluZy5oCShyZXZpc2lvbiAxMjMxNykKKysrIFdlYkNv
cmUva2h0bWwvZG9tL2RvbV9zdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDEyICsxNTQs
MTYgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBRU3RyaW5nJiBiLAogCiBuYW1lc3Bh
Y2UgS1hNTENvcmUgewogCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8V2ViQ29y
ZTo6RE9NU3RyaW5nPiB7CisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgU3RySGFzaDxXZWJDb3JlOjpE
T01TdHJpbmc+IHsKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgV2ViQ29yZTo6
RE9NU3RyaW5nJiBrZXkpIHsgcmV0dXJuIGtleS5pbXBsKCktPmhhc2goKTsgfQogICAgICAgICBz
dGF0aWMgYm9vbCBlcXVhbChjb25zdCBXZWJDb3JlOjpET01TdHJpbmcmIGEsIGNvbnN0IFdlYkNv
cmU6OkRPTVN0cmluZyYgYikKLSAgICAgICAgICAgIHsgcmV0dXJuIERlZmF1bHRIYXNoPFdlYkNv
cmU6OkRPTVN0cmluZ0ltcGwqPjo6ZXF1YWwoYS5pbXBsKCksIGIuaW1wbCgpKTsgfQorICAgICAg
ICAgICAgeyByZXR1cm4gU3RySGFzaDxXZWJDb3JlOjpET01TdHJpbmdJbXBsKj46OmVxdWFsKGEu
aW1wbCgpLCBiLmltcGwoKSk7IH0KICAgICB9OwogICAgIAorICAgIHRlbXBsYXRlPD4gc3RydWN0
IERlZmF1bHRIYXNoPFdlYkNvcmU6OkRPTVN0cmluZz4geworICAgICAgICB0eXBlZGVmIFN0ckhh
c2g8V2ViQ29yZTo6RE9NU3RyaW5nPiBIYXNoOworICAgIH07CisKICAgICB0ZW1wbGF0ZTw+IHN0
cnVjdCBIYXNoVHJhaXRzPFdlYkNvcmU6OkRPTVN0cmluZz4gewogICAgICAgICB0eXBlZGVmIFdl
YkNvcmU6OkRPTVN0cmluZyBUcmFpdFR5cGU7CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGVt
cHR5VmFsdWVJc1plcm8gPSB0cnVlOwpJbmRleDogV2ViQ29yZS9raHRtbC94bWwvRG9jdW1lbnRJ
bXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9raHRtbC94bWwvRG9jdW1lbnRJbXBsLmgJKHJl
dmlzaW9uIDEyMzE3KQorKysgV2ViQ29yZS9raHRtbC94bWwvRG9jdW1lbnRJbXBsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY0Niw3ICs2NDYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgUmVuZGVy
QXJlbmEqIG1fcmVuZGVyQXJlbmE7CiAKLSAgICB0eXBlZGVmIEhhc2hNYXA8Tm9kZUltcGwqLCBR
VmFsdWVMaXN0PERvY3VtZW50TWFya2VyPiosIFBvaW50ZXJIYXNoPE5vZGVJbXBsKj4gPiBNYXJr
ZXJNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPE5vZGVJbXBsKiwgUVZhbHVlTGlzdDxEb2N1bWVu
dE1hcmtlcj4qPiBNYXJrZXJNYXA7CiAgICAgTWFya2VyTWFwIG1fbWFya2VyczsKIAogICAgIEtX
UUFjY09iamVjdENhY2hlKiBtX2FjY0NhY2hlOwpAQCAtNjcwLDEyICs2NzAsMTIgQEAgcHJvdGVj
dGVkOgogICAgIFhCTDo6WEJMQmluZGluZ01hbmFnZXIqIG1fYmluZGluZ01hbmFnZXI7IC8vIFRo
ZSBhY2Nlc3MgcG9pbnQgdGhyb3VnaCB3aGljaCBkb2N1bWVudHMgYW5kIGVsZW1lbnRzIGNvbW11
bmljYXRlIHdpdGggWEJMLgogI2VuZGlmCiAgICAgCi0gICAgdHlwZWRlZiBIYXNoTWFwPERPTVN0
cmluZ0ltcGwqLCBIVE1MTWFwRWxlbWVudEltcGwqLCBQb2ludGVySGFzaDxET01TdHJpbmdJbXBs
Kj4gPiBJbWFnZU1hcHNCeU5hbWU7CisgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0lt
cGwqLCBIVE1MTWFwRWxlbWVudEltcGwqPiBJbWFnZU1hcHNCeU5hbWU7CiAgICAgSW1hZ2VNYXBz
QnlOYW1lIG1faW1hZ2VNYXBzQnlOYW1lOwogCiAgICAgRE9NU3RyaW5nIG1fcG9saWN5QmFzZVVS
TDsKIAotICAgIHR5cGVkZWYgSGFzaFNldDxOb2RlSW1wbCosIFBvaW50ZXJIYXNoPE5vZGVJbXBs
Kj4gPiBOb2RlU2V0OworICAgIHR5cGVkZWYgSGFzaFNldDxOb2RlSW1wbCo+IE5vZGVTZXQ7CiAg
ICAgTm9kZVNldCBtX2Rpc2Nvbm5lY3RlZE5vZGVzV2l0aEV2ZW50TGlzdGVuZXJzOwogCiAgICAg
aW50IG1fZG9jSUQ7IC8vIEEgdW5pcXVlIGRvY3VtZW50IGlkZW50aWZpZXIgdXNlZCBmb3IgdGhp
bmdzIGxpa2UgZG9jdW1lbnQtc3BlY2lmaWMgbWFwcGVkIGF0dHJpYnV0ZXMuCkBAIC03MTYsOCAr
NzE2LDggQEAgcHVibGljOgogICAgIHZvaWQgdW5yZWdpc3RlckRpc2Nvbm5lY3RlZE5vZGVXaXRo
RXZlbnRMaXN0ZW5lcnMoTm9kZUltcGwqKTsKICAgICAKICAgICB2b2lkIHJhZGlvQnV0dG9uQ2hl
Y2tlZChIVE1MSW5wdXRFbGVtZW50SW1wbCAqY2FsbGVyLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpm
b3JtKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50SW1wbCogY2hlY2tlZFJhZGlvQnV0dG9uRm9yR3Jv
dXAoRE9NU3RyaW5nSW1wbCogbmFtZSwgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybSk7Ci0gICAg
dm9pZCByZW1vdmVSYWRpb0J1dHRvbkdyb3VwKERPTVN0cmluZ0ltcGwqIG5hbWUsIEhUTUxGb3Jt
RWxlbWVudEltcGwgKmZvcm0pOworICAgIEhUTUxJbnB1dEVsZW1lbnRJbXBsKiBjaGVja2VkUmFk
aW9CdXR0b25Gb3JHcm91cChBdG9taWNTdHJpbmdJbXBsKiBuYW1lLCBIVE1MRm9ybUVsZW1lbnRJ
bXBsICpmb3JtKTsKKyAgICB2b2lkIHJlbW92ZVJhZGlvQnV0dG9uR3JvdXAoQXRvbWljU3RyaW5n
SW1wbCogbmFtZSwgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybSk7CiAgICAgCiAjaWYgU1ZHX1NV
UFBPUlQKICAgICBjb25zdCBTVkdEb2N1bWVudEV4dGVuc2lvbnMqIHN2Z0V4dGVuc2lvbnMoKTsK
QEAgLTc0MSwxNiArNzQxLDE2IEBAIHByaXZhdGU6CiAgICAgCiAgICAgUmVmUHRyPERlY29kZXI+
IG1fZGVjb2RlcjsKIAotICAgIG11dGFibGUgSGFzaE1hcDxET01TdHJpbmdJbXBsKiwgRWxlbWVu
dEltcGwqLCBQb2ludGVySGFzaDxET01TdHJpbmdJbXBsKj4gPiBtX2VsZW1lbnRzQnlJZDsKLSAg
ICBtdXRhYmxlIEhhc2hDb3VudGVkU2V0PERPTVN0cmluZ0ltcGwqLCBQb2ludGVySGFzaDxET01T
dHJpbmdJbXBsKj4gPiBtX2R1cGxpY2F0ZUlkczsKKyAgICBtdXRhYmxlIEhhc2hNYXA8QXRvbWlj
U3RyaW5nSW1wbCosIEVsZW1lbnRJbXBsKj4gbV9lbGVtZW50c0J5SWQ7CisgICAgbXV0YWJsZSBI
YXNoQ291bnRlZFNldDxBdG9taWNTdHJpbmdJbXBsKj4gbV9kdXBsaWNhdGVJZHM7CiAgICAgCiAg
ICAgSGFzaE1hcDxET01TdHJpbmdJbXBsKiwgRWxlbWVudEltcGwqLCBDYXNlSW5zZW5zaXRpdmVI
YXNoPiBtX2VsZW1lbnRzQnlBY2Nlc3NLZXk7CiAgICAgCiAgICAgSW5oZXJpdGVkQm9vbCBtX2Rl
c2lnbk1vZGU7CiAgICAgCiAgICAgaW50IG1fc2VsZk9ubHlSZWZDb3VudDsKLSAgICB0eXBlZGVm
IEhhc2hNYXA8RE9NU3RyaW5nSW1wbCosIEhUTUxJbnB1dEVsZW1lbnRJbXBsKiwgUG9pbnRlckhh
c2g8RE9NU3RyaW5nSW1wbCo+ID4gTmFtZVRvSW5wdXRNYXA7Ci0gICAgdHlwZWRlZiBIYXNoTWFw
PEhUTUxGb3JtRWxlbWVudEltcGwqLCBOYW1lVG9JbnB1dE1hcCosIFBvaW50ZXJIYXNoPEhUTUxG
b3JtRWxlbWVudEltcGwqPiA+IEZvcm1Ub0dyb3VwTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxB
dG9taWNTdHJpbmdJbXBsKiwgSFRNTElucHV0RWxlbWVudEltcGwqPiBOYW1lVG9JbnB1dE1hcDsK
KyAgICB0eXBlZGVmIEhhc2hNYXA8SFRNTEZvcm1FbGVtZW50SW1wbCosIE5hbWVUb0lucHV0TWFw
Kj4gRm9ybVRvR3JvdXBNYXA7CiAgICAgRm9ybVRvR3JvdXBNYXAgbV9zZWxlY3RlZFJhZGlvQnV0
dG9uczsKICAgICAKICNpZiBTVkdfU1VQUE9SVApJbmRleDogV2ViQ29yZS9raHRtbC94bWwvTm9k
ZUltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2todG1sL3htbC9Ob2RlSW1wbC5oCShyZXZp
c2lvbiAxMjMxNykKKysrIFdlYkNvcmUva2h0bWwveG1sL05vZGVJbXBsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ3NCw3ICs0NzQsNyBAQCBwcml2YXRlOiAvLyBtZW1iZXJzCiAgICAgUmVuZGVyT2Jq
ZWN0KiBtX3JlbmRlcmVyOwogcHJvdGVjdGVkOgogICAgIFFQdHJMaXN0PFJlZ2lzdGVyZWRFdmVu
dExpc3RlbmVyPiogbV9yZWdkTGlzdGVuZXJzOwotICAgIHR5cGVkZWYgSGFzaFNldDxOb2RlTGlz
dEltcGwqLCBQb2ludGVySGFzaDxOb2RlTGlzdEltcGwqPiA+IE5vZGVMaXN0U2V0OworICAgIHR5
cGVkZWYgSGFzaFNldDxOb2RlTGlzdEltcGwqPiBOb2RlTGlzdFNldDsKICAgICBOb2RlTGlzdFNl
dCogbV9ub2RlTGlzdHM7CiAKICAgICB1bnNpZ25lZCBzaG9ydCBtX3RhYkluZGV4IDogMTU7Cklu
ZGV4OiBXZWJDb3JlL2todG1sL3htbC9kb21fc3RyaW5naW1wbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUva2h0bWwveG1sL2RvbV9zdHJpbmdpbXBsLmgJKHJldmlzaW9uIDEyMzE3KQorKysgV2Vi
Q29yZS9raHRtbC94bWwvZG9tX3N0cmluZ2ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDgg
KzEzMSw5IEBAIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgY2hhciosIGNvbnMKIG5hbWVz
cGFjZSBLWE1MQ29yZSB7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBEZWZhdWx0
SGFzaDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBTdHJIYXNoOwogCi0gICAgdGVt
cGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8RE9NOjpET01TdHJpbmdJbXBsICo+IHsKKyAgICB0
ZW1wbGF0ZTw+IHN0cnVjdCBTdHJIYXNoPERPTTo6RE9NU3RyaW5nSW1wbCAqPiB7CiAgICAgICAg
IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IERPTTo6RE9NU3RyaW5nSW1wbCAqa2V5KSB7IHJl
dHVybiBrZXktPmhhc2goKTsgfQogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBET006
OkRPTVN0cmluZ0ltcGwgKmEsIGNvbnN0IERPTTo6RE9NU3RyaW5nSW1wbCAqYikKICAgICAgICAg
ewpAQCAtMjcxLDE3ICsyNzIsMjUgQEAgbmFtZXNwYWNlIEtYTUxDb3JlIHsKICAgICAgICAgfQog
ICAgIH07CiAKLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxSZWZQdHI8RE9NOjpE
T01TdHJpbmdJbXBsPiA+IHsKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBTdHJIYXNoPFJlZlB0cjxE
T006OkRPTVN0cmluZ0ltcGw+ID4gewogICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25z
dCBSZWZQdHI8RE9NOjpET01TdHJpbmdJbXBsPiYga2V5KSAKICAgICAgICAgeyAKLSAgICAgICAg
ICAgIHJldHVybiBEZWZhdWx0SGFzaDxET006OkRPTVN0cmluZ0ltcGwgKj46Omhhc2goa2V5Lmdl
dCgpKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJIYXNoPERPTTo6RE9NU3RyaW5nSW1wbCAqPjo6
aGFzaChrZXkuZ2V0KCkpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwo
Y29uc3QgUmVmUHRyPERPTTo6RE9NU3RyaW5nSW1wbD4mIGEsIGNvbnN0IFJlZlB0cjxET006OkRP
TVN0cmluZ0ltcGw+JiBiKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRGVmYXVsdEhh
c2g8RE9NOjpET01TdHJpbmdJbXBsICo+OjplcXVhbChhLmdldCgpLCBiLmdldCgpKTsKKyAgICAg
ICAgICAgIHJldHVybiBTdHJIYXNoPERPTTo6RE9NU3RyaW5nSW1wbCAqPjo6ZXF1YWwoYS5nZXQo
KSwgYi5nZXQoKSk7CiAgICAgICAgIH0KICAgICB9OworCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3Qg
RGVmYXVsdEhhc2g8RE9NOjpET01TdHJpbmdJbXBsKj4geworICAgICAgICB0eXBlZGVmIFN0ckhh
c2g8RE9NOjpET01TdHJpbmdJbXBsKj4gSGFzaDsKKyAgICB9OworCisgICAgdGVtcGxhdGU8PiBz
dHJ1Y3QgRGVmYXVsdEhhc2g8UmVmUHRyPERPTTo6RE9NU3RyaW5nSW1wbD4gPiB7CisgICAgICAg
IHR5cGVkZWYgU3RySGFzaDxSZWZQdHI8RE9NOjpET01TdHJpbmdJbXBsPiA+IEhhc2g7CisgICAg
fTsKICAgICAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgSGFzaFRyYWl0czsKIApJ
bmRleDogV2ViQ29yZS9raHRtbC94bWwveG1sX3Rva2VuaXplci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUva2h0bWwveG1sL3htbF90b2tlbml6ZXIuaAkocmV2aXNpb24gMTIzMTcpCisrKyBXZWJD
b3JlL2todG1sL3htbC94bWxfdG9rZW5pemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2
LDcgQEAKIAogI2luY2x1ZGUgPGt4bWxjb3JlL0hhc2hNYXAuaD4KICNpbmNsdWRlIDxxb2JqZWN0
Lmg+CisjaW5jbHVkZSAiZG9tX3N0cmluZy5oIgogCiBjbGFzcyBGcmFtZVZpZXc7CiBjbGFzcyBR
VGltZTsKSW5kZXg6IFdlYkNvcmUva2h0bWwveG1sL0RvY3VtZW50SW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9raHRtbC94bWwvRG9jdW1lbnRJbXBsLmNwcAkocmV2aXNpb24gMTIzMjEp
CisrKyBXZWJDb3JlL2todG1sL3htbC9Eb2N1bWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMDIwLDcgKzMwMjAsNyBAQCB2b2lkIERvY3VtZW50SW1wbDo6cmFkaW9CdXR0b25DaGVja2Vk
KEhUCiAgICAgZm9ybVJhZGlvQnV0dG9ucy0+c2V0KGNhbGxlci0+bmFtZSgpLmltcGwoKSwgY2Fs
bGVyKTsKIH0KIAotSFRNTElucHV0RWxlbWVudEltcGwqIERvY3VtZW50SW1wbDo6Y2hlY2tlZFJh
ZGlvQnV0dG9uRm9yR3JvdXAoRE9NU3RyaW5nSW1wbCogbmFtZSwgSFRNTEZvcm1FbGVtZW50SW1w
bCAqZm9ybSkKK0hUTUxJbnB1dEVsZW1lbnRJbXBsKiBEb2N1bWVudEltcGw6OmNoZWNrZWRSYWRp
b0J1dHRvbkZvckdyb3VwKEF0b21pY1N0cmluZ0ltcGwqIG5hbWUsIEhUTUxGb3JtRWxlbWVudElt
cGwgKmZvcm0pCiB7CiAgICAgaWYgKCFmb3JtKQogICAgICAgICBmb3JtID0gZGVmYXVsdEZvcm07
CkBAIC0zMDMxLDcgKzMwMzEsNyBAQCBIVE1MSW5wdXRFbGVtZW50SW1wbCogRG9jdW1lbnRJbXBs
OjpjaGVjCiAgICAgcmV0dXJuIGZvcm1SYWRpb0J1dHRvbnMtPmdldChuYW1lKTsKIH0KIAotdm9p
ZCBEb2N1bWVudEltcGw6OnJlbW92ZVJhZGlvQnV0dG9uR3JvdXAoRE9NU3RyaW5nSW1wbCogbmFt
ZSwgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybSkKK3ZvaWQgRG9jdW1lbnRJbXBsOjpyZW1vdmVS
YWRpb0J1dHRvbkdyb3VwKEF0b21pY1N0cmluZ0ltcGwqIG5hbWUsIEhUTUxGb3JtRWxlbWVudElt
cGwgKmZvcm0pCiB7CiAgICAgaWYgKCFmb3JtKQogICAgICAgICBmb3JtID0gZGVmYXVsdEZvcm07
CkluZGV4OiBXZWJDb3JlL2todG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9raHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5oCShyZXZpc2lvbiAxMjMxNykK
KysrIFdlYkNvcmUva2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNiArMjcsMTAgQEAKIAogbmFtZXNwYWNlIERPTSB7CiAKK2NsYXNzIEF0b21pY1N0cmlu
Z0ltcGwgOiBwdWJsaWMgRE9NU3RyaW5nSW1wbAoreworfTsKKwogY2xhc3MgQXRvbWljU3RyaW5n
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBpbml0KCk7CkBAIC0zNywxMyArNDEsMTQgQEAg
cHVibGljOgogICAgIEF0b21pY1N0cmluZyhjb25zdCB1bnNpZ25lZCBzaG9ydCogcywgaW50IGxl
bmd0aCkgOiBtX3N0cmluZyhhZGQoKFFDaGFyKilzLCBsZW5ndGgpKSB7IH0KICAgICBBdG9taWNT
dHJpbmcoY29uc3QgUVN0cmluZyYgcykgOiBtX3N0cmluZyhhZGQocy51bmljb2RlKCksIHMubGVu
Z3RoKCkpKSB7IH0KICAgICBBdG9taWNTdHJpbmcoRE9NU3RyaW5nSW1wbCogaW1wKSA6IG1fc3Ry
aW5nKGFkZChpbXApKSB7IH0KKyAgICBBdG9taWNTdHJpbmcoQXRvbWljU3RyaW5nSW1wbCogaW1w
KSA6IG1fc3RyaW5nKGltcCkgeyB9CiAgICAgZXhwbGljaXQgQXRvbWljU3RyaW5nKGNvbnN0IERP
TVN0cmluZyAmcykgOiBtX3N0cmluZyhhZGQocy5pbXBsKCkpKSB7IH0KICAgICAKICAgICBvcGVy
YXRvciBjb25zdCBET01TdHJpbmcmKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmc7IH0KICAgICBj
b25zdCBET01TdHJpbmcmIGRvbVN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nOyB9Owog
ICAgIFFTdHJpbmcgcXN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLnFzdHJpbmcoKTsg
fTsKICAgICAKLSAgICBET01TdHJpbmdJbXBsKiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9zdHJp
bmcuaW1wbCgpOyB9CisgICAgQXRvbWljU3RyaW5nSW1wbCogaW1wbCgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PEF0b21pY1N0cmluZ0ltcGwgKj4obV9zdHJpbmcuaW1wbCgpKTsgfQogICAg
IAogICAgIGNvbnN0IFFDaGFyICp1bmljb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcudW5p
Y29kZSgpOyB9CiAgICAgdWludCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5sZW5n
dGgoKTsgfQpAQCAtODIsMTcgKzg3LDYgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgRE9NU3RyaW5n
SW1wbCAqYWRkKGNvbnN0IGNoYXIgKik7CiAgICAgc3RhdGljIERPTVN0cmluZ0ltcGwgKmFkZChj
b25zdCBRQ2hhciAqLCBpbnQgbGVuZ3RoKTsKICAgICBzdGF0aWMgRE9NU3RyaW5nSW1wbCAqYWRk
KERPTVN0cmluZ0ltcGwgKik7Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgaW5zZXJ0KERPTVN0cmlu
Z0ltcGwgKik7Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgcmVoYXNoKGludCBuZXdUYWJsZVNpemUp
OwotICAgIHN0YXRpYyB2b2lkIGV4cGFuZCgpOwotICAgIHN0YXRpYyB2b2lkIHNocmluaygpOwot
ICAgIAotICAgIHN0YXRpYyBET01TdHJpbmdJbXBsICoqX3RhYmxlOwotICAgIHN0YXRpYyBpbnQg
X3RhYmxlU2l6ZTsKLSAgICBzdGF0aWMgaW50IF90YWJsZVNpemVNYXNrOwotICAgIHN0YXRpYyBp
bnQgX2tleUNvdW50OwogfTsKIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNT
dHJpbmcmIGEsIGNvbnN0IEF0b21pY1N0cmluZyYgYikgeyByZXR1cm4gYS5pbXBsKCkgPT0gYi5p
bXBsKCk7IH0KQEAgLTEyMyw1ICsxMTcsMTMgQEAgaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0Nh
c2UoY29uc3QgRE9NUwogI2VuZGlmCiAKIH0KK25hbWVzcGFjZSBLWE1MQ29yZSB7CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBTdHJIYXNoOworCisgICAgdGVtcGxhdGU8PiBzdHJ1
Y3QgU3RySGFzaDxET006OkF0b21pY1N0cmluZ0ltcGwqPiA6IHB1YmxpYyBTdHJIYXNoPERPTTo6
RE9NU3RyaW5nSW1wbCo+CisgICAgeworICAgIH07Cit9CiAKICNlbmRpZgpJbmRleDogV2ViQ29y
ZS9raHRtbC94bWwvZG9tX3N0cmluZ2ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2h0
bWwveG1sL2RvbV9zdHJpbmdpbXBsLmNwcAkocmV2aXNpb24gMTIzMTcpCisrKyBXZWJDb3JlL2to
dG1sL3htbC9kb21fc3RyaW5naW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzNyw3ICs2Mzcs
NyBAQCBET01TdHJpbmdJbXBsICpET01TdHJpbmdJbXBsOjpyZXBsYWNlKFFDCiAKIGJvb2wgZXF1
YWwoY29uc3QgRE9NU3RyaW5nSW1wbCogYSwgY29uc3QgRE9NU3RyaW5nSW1wbCogYikKIHsKLSAg
ICByZXR1cm4gRGVmYXVsdEhhc2g8RE9NU3RyaW5nSW1wbCo+OjplcXVhbChhLCBiKTsKKyAgICBy
ZXR1cm4gU3RySGFzaDxET01TdHJpbmdJbXBsKj46OmVxdWFsKGEsIGIpOwogfQogCiBib29sIGVx
dWFsKGNvbnN0IERPTVN0cmluZ0ltcGwqIGEsIGNvbnN0IGNoYXIqIGIpCkluZGV4OiBXZWJDb3Jl
L2todG1sL2VkaXRpbmcvYXBwbHlfc3R5bGVfY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9raHRtbC9lZGl0aW5nL2FwcGx5X3N0eWxlX2NvbW1hbmQuY3BwCShyZXZpc2lvbiAxMjMx
NykKKysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDU0LDcgKzQ1NCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFw
cGx5UmVsYXRpdmVGb24KIAogICAgIC8vIFN0b3JlIGF3YXkgZm9udCBzaXplIGJlZm9yZSBtYWtp
bmcgYW55IGNoYW5nZXMgdG8gdGhlIGRvY3VtZW50LgogICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0
IGNoYW5nZXMgdG8gb25lIG5vZGUgd29uJ3QgZWZmZWN0IGFub3RoZXIuCi0gICAgSGFzaE1hcDxO
b2RlSW1wbCosIGZsb2F0LCBQb2ludGVySGFzaDxOb2RlSW1wbCo+ID4gc3RhcnRpbmdGb250U2l6
ZXM7CisgICAgSGFzaE1hcDxOb2RlSW1wbCosIGZsb2F0PiBzdGFydGluZ0ZvbnRTaXplczsKICAg
ICBmb3IgKE5vZGVJbXBsICpub2RlID0gc3RhcnROb2RlOyBub2RlICE9IGJleW9uZEVuZDsgbm9k
ZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkKICAgICAgICAgc3RhcnRpbmdGb250U2l6ZXMu
c2V0KG5vZGUsIGNvbXB1dGVkRm9udFNpemUobm9kZSkpOwogCkluZGV4OiBXZWJDb3JlL2todG1s
L2h0bWwvSFRNTENvbGxlY3Rpb25JbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9raHRtbC9o
dG1sL0hUTUxDb2xsZWN0aW9uSW1wbC5oCShyZXZpc2lvbiAxMjMxNykKKysrIFdlYkNvcmUva2h0
bWwvaHRtbC9IVE1MQ29sbGVjdGlvbkltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQs
OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIE5vZGVJbXBsOwogY2xhc3MgRE9NU3Ry
aW5nOwotY2xhc3MgRE9NU3RyaW5nSW1wbDsKIGNsYXNzIEF0b21pY1N0cmluZzsKK2NsYXNzIEF0
b21pY1N0cmluZ0ltcGw7CiAKIGNsYXNzIEhUTUxDb2xsZWN0aW9uSW1wbCA6IHB1YmxpYyBTaGFy
ZWQ8SFRNTENvbGxlY3Rpb25JbXBsPgogewpAQCAtOTQsOCArOTQsOCBAQCBwdWJsaWM6CiAgICAg
ICAgIHVuc2lnbmVkIGludCBwb3NpdGlvbjsKICAgICAgICAgdW5zaWduZWQgaW50IGxlbmd0aDsK
ICAgICAgICAgaW50IGVsZW1lbnRzQXJyYXlQb3NpdGlvbjsKLSAgICAgICAgSGFzaE1hcDxET01T
dHJpbmdJbXBsKiwgUVB0clZlY3RvcjxOb2RlSW1wbD4qLCBQb2ludGVySGFzaDxET01TdHJpbmdJ
bXBsKj4gPiBpZENhY2hlOwotICAgICAgICBIYXNoTWFwPERPTVN0cmluZ0ltcGwqLCBRUHRyVmVj
dG9yPE5vZGVJbXBsPiosIFBvaW50ZXJIYXNoPERPTVN0cmluZ0ltcGwqPiA+IG5hbWVDYWNoZTsK
KyAgICAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgUVB0clZlY3RvcjxOb2RlSW1wbD4q
PiBpZENhY2hlOworICAgICAgICBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBRUHRyVmVjdG9y
PE5vZGVJbXBsPio+IG5hbWVDYWNoZTsKICAgICAgICAgYm9vbCBoYXNsZW5ndGg7CiAgICAgICAg
IGJvb2wgaGFzTmFtZUNhY2hlOwogICAgICB9OwpJbmRleDogV2ViQ29yZS9raHRtbC9odG1sL2h0
bWxwYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2h0bWwvaHRtbC9odG1scGFyc2Vy
LmNwcAkocmV2aXNpb24gMTIzMjEpCisrKyBXZWJDb3JlL2todG1sL2h0bWwvaHRtbHBhcnNlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU5MSw3ICs1OTEsNyBAQCBib29sIEhUTUxQYXJzZXI6Omhh
bmRsZUVycm9yKE5vZGVJbXBsKiBuCiB9CiAKIHR5cGVkZWYgYm9vbCAoSFRNTFBhcnNlcjo6KkNy
ZWF0ZUVycm9yQ2hlY2tGdW5jKShUb2tlbiogdCwgTm9kZUltcGwqJik7Ci10eXBlZGVmIEhhc2hN
YXA8RE9NU3RyaW5nSW1wbCAqLCBDcmVhdGVFcnJvckNoZWNrRnVuYywgUG9pbnRlckhhc2g8RE9N
U3RyaW5nSW1wbCAqPiA+IEZ1bmN0aW9uTWFwOwordHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmlu
Z0ltcGwqLCBDcmVhdGVFcnJvckNoZWNrRnVuYz4gRnVuY3Rpb25NYXA7CiAKIGJvb2wgSFRNTFBh
cnNlcjo6dGV4dENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIE5vZGVJbXBsKiYgcmVzdWx0KQog
ewpAQCAtODM1LDcgKzgzNSw3IEBAIHZvaWQgSFRNTFBhcnNlcjo6cHJvY2Vzc0Nsb3NlVGFnKFRv
a2VuICoKIAogYm9vbCBIVE1MUGFyc2VyOjppc0hlYWRlclRhZyhjb25zdCBBdG9taWNTdHJpbmcm
IHRhZ05hbWUpCiB7Ci0gICAgc3RhdGljIEhhc2hTZXQ8RE9NU3RyaW5nSW1wbCosIFBvaW50ZXJI
YXNoPERPTVN0cmluZ0ltcGwqPiA+IGhlYWRlclRhZ3M7CisgICAgc3RhdGljIEhhc2hTZXQ8QXRv
bWljU3RyaW5nSW1wbCo+IGhlYWRlclRhZ3M7CiAgICAgaWYgKGhlYWRlclRhZ3MuaXNFbXB0eSgp
KSB7CiAgICAgICAgIGhlYWRlclRhZ3MuYWRkKGgxVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CiAg
ICAgICAgIGhlYWRlclRhZ3MuYWRkKGgyVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CkBAIC04ODcs
NyArODg3LDcgQEAgYm9vbCBIVE1MUGFyc2VyOjppc0lubGluZShET006Ok5vZGVJbXBsKgogCiBi
b29sIEhUTUxQYXJzZXI6OmlzUmVzaWR1YWxTdHlsZVRhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRh
Z05hbWUpCiB7Ci0gICAgc3RhdGljIEhhc2hTZXQ8RE9NU3RyaW5nSW1wbCosIFBvaW50ZXJIYXNo
PERPTVN0cmluZ0ltcGwqPiA+IHJlc2lkdWFsU3R5bGVUYWdzOworICAgIHN0YXRpYyBIYXNoU2V0
PEF0b21pY1N0cmluZ0ltcGwqPiByZXNpZHVhbFN0eWxlVGFnczsKICAgICBpZiAocmVzaWR1YWxT
dHlsZVRhZ3MuaXNFbXB0eSgpKSB7CiAgICAgICAgIHJlc2lkdWFsU3R5bGVUYWdzLmFkZChhVGFn
LmxvY2FsTmFtZSgpLmltcGwoKSk7CiAgICAgICAgIHJlc2lkdWFsU3R5bGVUYWdzLmFkZChmb250
VGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7CkBAIC05MTgsNyArOTE4LDcgQEAgYm9vbCBIVE1MUGFy
c2VyOjppc0FmZmVjdGVkQnlSZXNpZHVhbFN0eQogICAgIGlmIChpc1Jlc2lkdWFsU3R5bGVUYWco
dGFnTmFtZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgc3RhdGljIEhhc2hTZXQ8RE9N
U3RyaW5nSW1wbCosIFBvaW50ZXJIYXNoPERPTVN0cmluZ0ltcGwqPiA+IGFmZmVjdGVkQmxvY2tU
YWdzOworICAgIHN0YXRpYyBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiBhZmZlY3RlZEJsb2Nr
VGFnczsKICAgICBpZiAoYWZmZWN0ZWRCbG9ja1RhZ3MuaXNFbXB0eSgpKSB7CiAgICAgICAgIGFm
ZmVjdGVkQmxvY2tUYWdzLmFkZChoMVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwogICAgICAgICBh
ZmZlY3RlZEJsb2NrVGFncy5hZGQoaDJUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKSW5kZXg6IFdl
YkNvcmUva2h0bWwvaHRtbC9IVE1MRm9ybUNvbGxlY3Rpb25JbXBsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2todG1sL2h0bWwvSFRNTEZvcm1Db2xsZWN0aW9uSW1wbC5jcHAJKHJldmlzaW9u
IDEyMzIxKQorKysgV2ViQ29yZS9raHRtbC9odG1sL0hUTUxGb3JtQ29sbGVjdGlvbkltcGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjYsNyArMjI2LDcgQEAgdm9pZCBIVE1MRm9ybUNvbGxlY3Rp
b25JbXBsOjp1cGRhdGVOYW1lQwogICAgIGlmIChpbmZvLT5oYXNOYW1lQ2FjaGUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEhhc2hTZXQ8RE9NU3RyaW5nSW1wbCosIFBvaW50ZXJIYXNoPERPTVN0
cmluZ0ltcGwqPiA+IGZvdW5kSW5wdXRFbGVtZW50czsKKyAgICBIYXNoU2V0PEF0b21pY1N0cmlu
Z0ltcGwqPiBmb3VuZElucHV0RWxlbWVudHM7CiAKICAgICBpZiAoIW1fYmFzZS0+aGFzVGFnTmFt
ZShmb3JtVGFnKSkgewogICAgICAgICBpbmZvLT5oYXNOYW1lQ2FjaGUgPSB0cnVlOwpJbmRleDog
V2ViQ29yZS9raHRtbC9odG1sL2h0bWxmYWN0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2todG1sL2h0bWwvaHRtbGZhY3RvcnkuY3BwCShyZXZpc2lvbiAxMjMxNykKKysrIFdlYkNvcmUv
a2h0bWwvaHRtbC9odG1sZmFjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcg
QEAgbmFtZXNwYWNlIERPTQogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogdHlwZWRlZiBI
VE1MRWxlbWVudEltcGwqICgqQ29uc3RydWN0b3JGdW5jKShjb25zdCBBdG9taWNTdHJpbmcmIHRh
Z05hbWUsIERvY3VtZW50SW1wbCogZG9jUHRyLCBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmb3JtLCBi
b29sIGNyZWF0ZWRCeVBhcnNlcik7Ci10eXBlZGVmIEhhc2hNYXA8RE9NU3RyaW5nSW1wbCAqLCB2
b2lkKiwgUG9pbnRlckhhc2g8RE9NU3RyaW5nSW1wbCAqPiA+IEZ1bmN0aW9uTWFwOwordHlwZWRl
ZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBDb25zdHJ1Y3RvckZ1bmM+IEZ1bmN0aW9uTWFw
Owogc3RhdGljIEZ1bmN0aW9uTWFwKiBnRnVuY3Rpb25NYXA7CiAKIEhUTUxFbGVtZW50SW1wbCog
aHRtbENvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnRJbXBs
KiBkb2NQdHIsIEhUTUxGb3JtRWxlbWVudEltcGwqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2Vy
KQpAQCAtMzUzLDg1ICszNTMsODIgQEAgSFRNTEVsZW1lbnRJbXBsKiBIVE1MRWxlbWVudEZhY3Rv
cnk6OmNyZQogICAgICAgICBnRnVuY3Rpb25NYXAgPSBuZXcgRnVuY3Rpb25NYXA7CiAgICAgICAg
IAogICAgICAgICAvLyBQb3B1bGF0ZSBpdCB3aXRoIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucy4KLSAg
ICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoaHRtbFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lk
KikmaHRtbENvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoaGVhZFRhZy5s
b2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmaGVhZENvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1
bmN0aW9uTWFwLT5zZXQoYm9keVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmYm9keUNv
bnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoYmFzZVRhZy5sb2NhbE5hbWUo
KS5pbXBsKCksICh2b2lkKikmYmFzZUNvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFw
LT5zZXQobGlua1RhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmbGlua0NvbnN0cnVjdG9y
KTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQobWV0YVRhZy5sb2NhbE5hbWUoKS5pbXBsKCks
ICh2b2lkKikmbWV0YUNvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoc3R5
bGVUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJnN0eWxlQ29uc3RydWN0b3IpOwotICAg
ICAgICBnRnVuY3Rpb25NYXAtPnNldCh0aXRsZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lk
KikmdGl0bGVDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KGZyYW1lVGFn
LmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZmcmFtZUNvbnN0cnVjdG9yKTsKLSAgICAgICAg
Z0Z1bmN0aW9uTWFwLT5zZXQoZnJhbWVzZXRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCop
JmZyYW1lc2V0Q29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAtPnNldChpZnJhbWVU
YWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJmlmcmFtZUNvbnN0cnVjdG9yKTsKLSAgICAg
ICAgZ0Z1bmN0aW9uTWFwLT5zZXQoZm9ybVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikm
Zm9ybUNvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoYnV0dG9uVGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZidXR0b25Db25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdG
dW5jdGlvbk1hcC0+c2V0KGlucHV0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZpbnB1
dENvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoaXNpbmRleFRhZy5sb2Nh
bE5hbWUoKS5pbXBsKCksICh2b2lkKikmaXNpbmRleENvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1
bmN0aW9uTWFwLT5zZXQoZmllbGRzZXRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJmZp
ZWxkc2V0Q29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAtPnNldChsYWJlbFRhZy5s
b2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmbGFiZWxDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdG
dW5jdGlvbk1hcC0+c2V0KGxlZ2VuZFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmbGVn
ZW5kQ29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAtPnNldChvcHRncm91cFRhZy5s
b2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmb3B0Z3JvdXBDb25zdHJ1Y3Rvcik7Ci0gICAgICAg
IGdGdW5jdGlvbk1hcC0+c2V0KG9wdGlvblRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikm
b3B0aW9uQ29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAtPnNldChzZWxlY3RUYWcu
bG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJnNlbGVjdENvbnN0cnVjdG9yKTsKLSAgICAgICAg
Z0Z1bmN0aW9uTWFwLT5zZXQodGV4dGFyZWFUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCop
JnRleHRhcmVhQ29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAtPnNldChkbFRhZy5s
b2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmZGxDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5j
dGlvbk1hcC0+c2V0KG9sVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZvbENvbnN0cnVj
dG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQodWxUYWcubG9jYWxOYW1lKCkuaW1wbCgp
LCAodm9pZCopJnVsQ29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAtPnNldChkaXJU
YWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJmRpckNvbnN0cnVjdG9yKTsKLSAgICAgICAg
Z0Z1bmN0aW9uTWFwLT5zZXQobWVudVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmbWVu
dUNvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQobGlUYWcubG9jYWxOYW1l
KCkuaW1wbCgpLCAodm9pZCopJmxpQ29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAt
PnNldChibG9ja3F1b3RlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZibG9ja3F1b3Rl
Q29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAtPnNldChkaXZUYWcubG9jYWxOYW1l
KCkuaW1wbCgpLCAodm9pZCopJmRpdkNvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFw
LT5zZXQoaDFUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJmhlYWRpbmdDb25zdHJ1Y3Rv
cik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KGgyVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwg
KHZvaWQqKSZoZWFkaW5nQ29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAtPnNldCho
M1RhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmaGVhZGluZ0NvbnN0cnVjdG9yKTsKLSAg
ICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoaDRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCop
JmhlYWRpbmdDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KGg1VGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZoZWFkaW5nQ29uc3RydWN0b3IpOwotICAgICAgICBn
RnVuY3Rpb25NYXAtPnNldChoNlRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmaGVhZGlu
Z0NvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoaHJUYWcubG9jYWxOYW1l
KCkuaW1wbCgpLCAodm9pZCopJmhyQ29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAt
PnNldChwVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZwYXJhZ3JhcGhDb25zdHJ1Y3Rv
cik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KHByZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCks
ICh2b2lkKikmcHJlQ29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAtPnNldCh4bXBU
YWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJnByZUNvbnN0cnVjdG9yKTsKLSAgICAgICAg
Z0Z1bmN0aW9uTWFwLT5zZXQoYmFzZWZvbnRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCop
JmJhc2Vmb250Q29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAtPnNldChmb250VGFn
LmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZmb250Q29uc3RydWN0b3IpOwotICAgICAgICBn
RnVuY3Rpb25NYXAtPnNldChkZWxUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJm1vZENv
bnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoaW5zVGFnLmxvY2FsTmFtZSgp
LmltcGwoKSwgKHZvaWQqKSZtb2RDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+
c2V0KGFUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJmFuY2hvckNvbnN0cnVjdG9yKTsK
LSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoaW1hZ2VUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAo
dm9pZCopJmltYWdlQ29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAtPnNldChpbWdU
YWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJmltYWdlQ29uc3RydWN0b3IpOwotICAgICAg
ICBnRnVuY3Rpb25NYXAtPnNldChtYXBUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJm1h
cENvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoYXJlYVRhZy5sb2NhbE5h
bWUoKS5pbXBsKCksICh2b2lkKikmYXJlYUNvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9u
TWFwLT5zZXQoY2FudmFzVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZjYW52YXNDb25z
dHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KGFwcGxldFRhZy5sb2NhbE5hbWUo
KS5pbXBsKCksICh2b2lkKikmYXBwbGV0Q29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25N
YXAtPnNldChlbWJlZFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmZW1iZWRDb25zdHJ1
Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KG9iamVjdFRhZy5sb2NhbE5hbWUoKS5p
bXBsKCksICh2b2lkKikmb2JqZWN0Q29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAt
PnNldChwYXJhbVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmcGFyYW1Db25zdHJ1Y3Rv
cik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KHNjcmlwdFRhZy5sb2NhbE5hbWUoKS5pbXBs
KCksICh2b2lkKikmc2NyaXB0Q29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAtPnNl
dCh0YWJsZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmdGFibGVDb25zdHJ1Y3Rvcik7
Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KGNhcHRpb25UYWcubG9jYWxOYW1lKCkuaW1wbCgp
LCAodm9pZCopJnRhYmxlQ2FwdGlvbkNvbnN0cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFw
LT5zZXQoY29sZ3JvdXBUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJnRhYmxlQ29sQ29u
c3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25NYXAtPnNldChjb2xUYWcubG9jYWxOYW1lKCku
aW1wbCgpLCAodm9pZCopJnRhYmxlQ29sQ29uc3RydWN0b3IpOwotICAgICAgICBnRnVuY3Rpb25N
YXAtPnNldCh0clRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICh2b2lkKikmdGFibGVSb3dDb25zdHJ1
Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KHRkVGFnLmxvY2FsTmFtZSgpLmltcGwo
KSwgKHZvaWQqKSZ0YWJsZUNlbGxDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+
c2V0KHRoVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZ0YWJsZUNlbGxDb25zdHJ1Y3Rv
cik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KHRoZWFkVGFnLmxvY2FsTmFtZSgpLmltcGwo
KSwgKHZvaWQqKSZ0YWJsZVNlY3Rpb25Db25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1h
cC0+c2V0KHRib2R5VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZ0YWJsZVNlY3Rpb25D
b25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KHRmb290VGFnLmxvY2FsTmFt
ZSgpLmltcGwoKSwgKHZvaWQqKSZ0YWJsZVNlY3Rpb25Db25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdG
dW5jdGlvbk1hcC0+c2V0KGJyVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgKHZvaWQqKSZickNvbnN0
cnVjdG9yKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQocVRhZy5sb2NhbE5hbWUoKS5pbXBs
KCksICh2b2lkKikmcXVvdGVDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0
KG1hcnF1ZWVUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAodm9pZCopJm1hcnF1ZWVDb25zdHJ1Y3Rv
cik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KGh0bWxUYWcubG9jYWxOYW1lKCkuaW1wbCgp
LCBodG1sQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPnNldChoZWFkVGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSwgaGVhZENvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFw
LT5zZXQoYm9keVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGJvZHlDb25zdHJ1Y3Rvcik7CisgICAg
ICAgIGdGdW5jdGlvbk1hcC0+c2V0KGJhc2VUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBiYXNlQ29u
c3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPnNldChsaW5rVGFnLmxvY2FsTmFtZSgp
LmltcGwoKSwgbGlua0NvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQobWV0
YVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIG1ldGFDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5j
dGlvbk1hcC0+c2V0KHN0eWxlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgc3R5bGVDb25zdHJ1Y3Rv
cik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KHRpdGxlVGFnLmxvY2FsTmFtZSgpLmltcGwo
KSwgdGl0bGVDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KGZyYW1lVGFn
LmxvY2FsTmFtZSgpLmltcGwoKSwgZnJhbWVDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlv
bk1hcC0+c2V0KGZyYW1lc2V0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgZnJhbWVzZXRDb25zdHJ1
Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KGlmcmFtZVRhZy5sb2NhbE5hbWUoKS5p
bXBsKCksIGlmcmFtZUNvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoZm9y
bVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGZvcm1Db25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5j
dGlvbk1hcC0+c2V0KGJ1dHRvblRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGJ1dHRvbkNvbnN0cnVj
dG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoaW5wdXRUYWcubG9jYWxOYW1lKCkuaW1w
bCgpLCBpbnB1dENvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoaXNpbmRl
eFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGlzaW5kZXhDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdG
dW5jdGlvbk1hcC0+c2V0KGZpZWxkc2V0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgZmllbGRzZXRD
b25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KGxhYmVsVGFnLmxvY2FsTmFt
ZSgpLmltcGwoKSwgbGFiZWxDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0
KGxlZ2VuZFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGxlZ2VuZENvbnN0cnVjdG9yKTsKKyAgICAg
ICAgZ0Z1bmN0aW9uTWFwLT5zZXQob3B0Z3JvdXBUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBvcHRn
cm91cENvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQob3B0aW9uVGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSwgb3B0aW9uQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25N
YXAtPnNldChzZWxlY3RUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBzZWxlY3RDb25zdHJ1Y3Rvcik7
CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KHRleHRhcmVhVGFnLmxvY2FsTmFtZSgpLmltcGwo
KSwgdGV4dGFyZWFDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KGRsVGFn
LmxvY2FsTmFtZSgpLmltcGwoKSwgZGxDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1h
cC0+c2V0KG9sVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgb2xDb25zdHJ1Y3Rvcik7CisgICAgICAg
IGdGdW5jdGlvbk1hcC0+c2V0KHVsVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgdWxDb25zdHJ1Y3Rv
cik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KGRpclRhZy5sb2NhbE5hbWUoKS5pbXBsKCks
IGRpckNvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQobWVudVRhZy5sb2Nh
bE5hbWUoKS5pbXBsKCksIG1lbnVDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+
c2V0KGxpVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgbGlDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdG
dW5jdGlvbk1hcC0+c2V0KGJsb2NrcXVvdGVUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBibG9ja3F1
b3RlQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPnNldChkaXZUYWcubG9jYWxO
YW1lKCkuaW1wbCgpLCBkaXZDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0
KGgxVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgaGVhZGluZ0NvbnN0cnVjdG9yKTsKKyAgICAgICAg
Z0Z1bmN0aW9uTWFwLT5zZXQoaDJUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBoZWFkaW5nQ29uc3Ry
dWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPnNldChoM1RhZy5sb2NhbE5hbWUoKS5pbXBs
KCksIGhlYWRpbmdDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KGg0VGFn
LmxvY2FsTmFtZSgpLmltcGwoKSwgaGVhZGluZ0NvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0
aW9uTWFwLT5zZXQoaDVUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBoZWFkaW5nQ29uc3RydWN0b3Ip
OworICAgICAgICBnRnVuY3Rpb25NYXAtPnNldChoNlRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGhl
YWRpbmdDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KGhyVGFnLmxvY2Fs
TmFtZSgpLmltcGwoKSwgaHJDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0
KHBUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBwYXJhZ3JhcGhDb25zdHJ1Y3Rvcik7CisgICAgICAg
IGdGdW5jdGlvbk1hcC0+c2V0KHByZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIHByZUNvbnN0cnVj
dG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoeG1wVGFnLmxvY2FsTmFtZSgpLmltcGwo
KSwgcHJlQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPnNldChiYXNlZm9udFRh
Zy5sb2NhbE5hbWUoKS5pbXBsKCksIGJhc2Vmb250Q29uc3RydWN0b3IpOworICAgICAgICBnRnVu
Y3Rpb25NYXAtPnNldChmb250VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgZm9udENvbnN0cnVjdG9y
KTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoZGVsVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwg
bW9kQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPnNldChpbnNUYWcubG9jYWxO
YW1lKCkuaW1wbCgpLCBtb2RDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0
KGFUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBhbmNob3JDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdG
dW5jdGlvbk1hcC0+c2V0KGltYWdlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgaW1hZ2VDb25zdHJ1
Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KGltZ1RhZy5sb2NhbE5hbWUoKS5pbXBs
KCksIGltYWdlQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPnNldChtYXBUYWcu
bG9jYWxOYW1lKCkuaW1wbCgpLCBtYXBDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1h
cC0+c2V0KGFyZWFUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBhcmVhQ29uc3RydWN0b3IpOworICAg
ICAgICBnRnVuY3Rpb25NYXAtPnNldChjYW52YXNUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBjYW52
YXNDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KGFwcGxldFRhZy5sb2Nh
bE5hbWUoKS5pbXBsKCksIGFwcGxldENvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFw
LT5zZXQoZW1iZWRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBlbWJlZENvbnN0cnVjdG9yKTsKKyAg
ICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQob2JqZWN0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgb2Jq
ZWN0Q29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPnNldChwYXJhbVRhZy5sb2Nh
bE5hbWUoKS5pbXBsKCksIHBhcmFtQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAt
PnNldChzY3JpcHRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBzY3JpcHRDb25zdHJ1Y3Rvcik7Cisg
ICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KHRhYmxlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgdGFi
bGVDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KGNhcHRpb25UYWcubG9j
YWxOYW1lKCkuaW1wbCgpLCB0YWJsZUNhcHRpb25Db25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5j
dGlvbk1hcC0+c2V0KGNvbGdyb3VwVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgdGFibGVDb2xDb25z
dHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KGNvbFRhZy5sb2NhbE5hbWUoKS5p
bXBsKCksIHRhYmxlQ29sQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPnNldCh0
clRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIHRhYmxlUm93Q29uc3RydWN0b3IpOworICAgICAgICBn
RnVuY3Rpb25NYXAtPnNldCh0ZFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIHRhYmxlQ2VsbENvbnN0
cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQodGhUYWcubG9jYWxOYW1lKCkuaW1w
bCgpLCB0YWJsZUNlbGxDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KHRo
ZWFkVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgdGFibGVTZWN0aW9uQ29uc3RydWN0b3IpOworICAg
ICAgICBnRnVuY3Rpb25NYXAtPnNldCh0Ym9keVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIHRhYmxl
U2VjdGlvbkNvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQodGZvb3RUYWcu
bG9jYWxOYW1lKCkuaW1wbCgpLCB0YWJsZVNlY3Rpb25Db25zdHJ1Y3Rvcik7CisgICAgICAgIGdG
dW5jdGlvbk1hcC0+c2V0KGJyVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgYnJDb25zdHJ1Y3Rvcik7
CisgICAgICAgIGdGdW5jdGlvbk1hcC0+c2V0KHFUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBxdW90
ZUNvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5zZXQobWFycXVlZVRhZy5sb2Nh
bE5hbWUoKS5pbXBsKCksIG1hcnF1ZWVDb25zdHJ1Y3Rvcik7CiAgICAgfQogICAgIAotICAgIHZv
aWQqIHJlc3VsdCA9IGdGdW5jdGlvbk1hcC0+Z2V0KHRhZ05hbWUuaW1wbCgpKTsKLSAgICBpZiAo
cmVzdWx0KSB7Ci0gICAgICAgIENvbnN0cnVjdG9yRnVuYyBmdW5jID0gKENvbnN0cnVjdG9yRnVu
YylyZXN1bHQ7CisgICAgQ29uc3RydWN0b3JGdW5jIGZ1bmMgPSBnRnVuY3Rpb25NYXAtPmdldCh0
YWdOYW1lLmltcGwoKSk7CisgICAgaWYgKGZ1bmMpCiAgICAgICAgIHJldHVybiAoZnVuYykodGFn
TmFtZSwgZG9jUHRyLCBmb3JtLCBjcmVhdGVkQnlQYXJzZXIpOwotICAgIH0KICAKICAgICAvLyBl
bGVtZW50cyB3aXRoIG5vIHNwZWNpYWwgcmVwcmVzZW50YXRpb24gaW4gdGhlIERPTQogICAgIHJl
dHVybiBuZXcgSFRNTEVsZW1lbnRJbXBsKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIHRhZ05hbWUs
IHhodG1sTmFtZXNwYWNlVVJJKSwgZG9jUHRyKTsKLQogfQogCiB9CkluZGV4OiBXZWJDb3JlL2to
dG1sL2h0bWwvSFRNTEVsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2todG1s
L2h0bWwvSFRNTEVsZW1lbnRJbXBsLmNwcAkocmV2aXNpb24gMTIzMjEpCisrKyBXZWJDb3JlL2to
dG1sL2h0bWwvSFRNTEVsZW1lbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQ5LDcgKzY0
OSw3IEBAIGJvb2wgSFRNTEVsZW1lbnRJbXBsOjpjaGlsZEFsbG93ZWQoTm9kZUkKIC8vIFRoaXMg
dW5mb3J0dW5hdGUgZnVuY3Rpb24gaXMgb25seSBuZWVkZWQgd2hlbiBjaGVja2luZyBhZ2FpbnN0
IHRoZSBEVEQuICBPdGhlciBsYW5ndWFnZXMgKGxpa2UgU1ZHKSB3b24ndCBuZWVkIHRoaXMuCiBi
b29sIEhUTUxFbGVtZW50SW1wbDo6aXNSZWNvZ25pemVkVGFnTmFtZShjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lKQogewotICAgIHN0YXRpYyBIYXNoU2V0PERPTVN0cmluZ0ltcGwqLCBQb2lu
dGVySGFzaDxET01TdHJpbmdJbXBsKj4gPiB0YWdMaXN0OworICAgIHN0YXRpYyBIYXNoU2V0PEF0
b21pY1N0cmluZ0ltcGwqPiB0YWdMaXN0OwogICAgIGlmICh0YWdMaXN0LmlzRW1wdHkoKSkgewog
ICAgICAgICAjZGVmaW5lIEFERF9UQUcobmFtZSkgdGFnTGlzdC5hZGQobmFtZSMjVGFnLmxvY2Fs
TmFtZSgpLmltcGwoKSk7CiAgICAgICAgIERPTV9IVE1MTkFNRVNfRk9SX0VBQ0hfVEFHKEFERF9U
QUcpCkBAIC02NTksOSArNjU5LDkgQEAgYm9vbCBIVE1MRWxlbWVudEltcGw6OmlzUmVjb2duaXpl
ZFRhZ05hbQogCiAvLyBUaGUgdGVybXMgaW5saW5lIGFuZCBibG9jayBhcmUgdXNlZCBoZXJlIGxv
b3NlbHkuICBEb24ndCBtYWtlIHRoZSBtaXN0YWtlIG9mIGFzc3VtaW5nIGFsbCBpbmxpbmVzIG9y
IGFsbCBibG9ja3MKIC8vIG5lZWQgdG8gYmUgaW4gdGhlc2UgdHdvIGxpc3RzLgotSGFzaFNldDxE
T01TdHJpbmdJbXBsKiwgUG9pbnRlckhhc2g8RE9NU3RyaW5nSW1wbCo+ID4qIGlubGluZVRhZ0xp
c3QoKQorSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4qIGlubGluZVRhZ0xpc3QoKQogewotICAg
IHN0YXRpYyBIYXNoU2V0PERPTVN0cmluZ0ltcGwqLCBQb2ludGVySGFzaDxET01TdHJpbmdJbXBs
Kj4gPiB0YWdMaXN0OworICAgIHN0YXRpYyBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiB0YWdM
aXN0OwogICAgIGlmICh0YWdMaXN0LmlzRW1wdHkoKSkgewogICAgICAgICB0YWdMaXN0LmFkZCh0
dFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwogICAgICAgICB0YWdMaXN0LmFkZChpVGFnLmxvY2Fs
TmFtZSgpLmltcGwoKSk7CkBAIC03MTIsOSArNzEyLDkgQEAgSGFzaFNldDxET01TdHJpbmdJbXBs
KiwgUG9pbnRlckhhc2g8RE9NUwogICAgIHJldHVybiAmdGFnTGlzdDsKIH0KIAotSGFzaFNldDxE
T01TdHJpbmdJbXBsKiwgUG9pbnRlckhhc2g8RE9NU3RyaW5nSW1wbCo+ID4qIGJsb2NrVGFnTGlz
dCgpCitIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiogYmxvY2tUYWdMaXN0KCkKIHsKLSAgICBz
dGF0aWMgSGFzaFNldDxET01TdHJpbmdJbXBsKiwgUG9pbnRlckhhc2g8RE9NU3RyaW5nSW1wbCo+
ID4gdGFnTGlzdDsKKyAgICBzdGF0aWMgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4gdGFnTGlz
dDsKICAgICBpZiAodGFnTGlzdC5pc0VtcHR5KCkpIHsKICAgICAgICAgdGFnTGlzdC5hZGQocFRh
Zy5sb2NhbE5hbWUoKS5pbXBsKCkpOwogICAgICAgICB0YWdMaXN0LmFkZChoMVRhZy5sb2NhbE5h
bWUoKS5pbXBsKCkpOwpJbmRleDogV2ViQ29yZS9raHRtbC9odG1sL0hUTUxJbnB1dEVsZW1lbnRJ
bXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2todG1sL2h0bWwvSFRNTElucHV0RWxlbWVu
dEltcGwuY3BwCShyZXZpc2lvbiAxMjMxNykKKysrIFdlYkNvcmUva2h0bWwvaHRtbC9IVE1MSW5w
dXRFbGVtZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgSFRNTElu
cHV0RWxlbWVudEltcGw6On5IVE1MSW5wdXRFbGVtZW50SQogICAgIGRlbGV0ZSBtX2ltYWdlTG9h
ZGVyOwogfQogCi1ET01TdHJpbmcgSFRNTElucHV0RWxlbWVudEltcGw6Om5hbWUoKSBjb25zdAor
QXRvbWljU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpuYW1lKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV9uYW1lLmlzTnVsbCgpID8gIiIgOiBtX25hbWU7CiB9CkluZGV4OiBXZWJDb3JlL2to
dG1sL2h0bWwvSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2todG1sL2h0bWwvSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwuaAkocmV2aXNpb24gMTIz
MTcpCisrKyBXZWJDb3JlL2todG1sL2h0bWwvSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwuaAko
d29ya2luZyBjb3B5KQpAQCAtNzgsOCArNzgsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZv
aWQgcmVjYWxjU3R5bGUoIFN0eWxlQ2hhbmdlICk7CiAKLSAgICB2aXJ0dWFsIERPTVN0cmluZyBu
YW1lKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXROYW1lKGNvbnN0IERPTVN0cmluZyYgbmFtZSk7Cisg
ICAgdmlydHVhbCBBdG9taWNTdHJpbmcgbmFtZSgpIGNvbnN0OworICAgIHZvaWQgc2V0TmFtZShj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUpOwogCiAgICAgdmlydHVhbCBib29sIGlzR2VuZXJpY0Zv
cm1FbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1Jh
ZGlvQnV0dG9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KSW5kZXg6IFdlYkNvcmUva2h0bWwv
aHRtbC9IVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9raHRtbC9odG1sL0hUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsLmNwcAkocmV2aXNpb24gMTIz
MTcpCisrKyBXZWJDb3JlL2todG1sL2h0bWwvSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsMTMgKzE0NSwxMyBAQCBIVE1MRm9ybUVsZW1lbnRJbXBs
KiBIVE1MR2VuZXJpY0Zvcm1FbGVtCiAgICAgcmV0dXJuIDA7CiB9CiAKLURPTVN0cmluZyBIVE1M
R2VuZXJpY0Zvcm1FbGVtZW50SW1wbDo6bmFtZSgpIGNvbnN0CitBdG9taWNTdHJpbmcgSFRNTEdl
bmVyaWNGb3JtRWxlbWVudEltcGw6Om5hbWUoKSBjb25zdAogewotICAgIERPTVN0cmluZyBuID0g
Z2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKKyAgICBBdG9taWNTdHJpbmcgbiA9IGdldEF0dHJpYnV0
ZShuYW1lQXR0cik7CiAgICAgcmV0dXJuIG4uaXNOdWxsKCkgPyAiIiA6IG47CiB9CiAKLXZvaWQg
SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw6OnNldE5hbWUoY29uc3QgRE9NU3RyaW5nICZ2YWx1
ZSkKK3ZvaWQgSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw6OnNldE5hbWUoY29uc3QgQXRvbWlj
U3RyaW5nICZ2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUobmFtZUF0dHIsIHZhbHVlKTsKIH0K
SW5kZXg6IFdlYkNvcmUva2h0bWwvaHRtbC9IVE1MSW5wdXRFbGVtZW50SW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUva2h0bWwvaHRtbC9IVE1MSW5wdXRFbGVtZW50SW1wbC5oCShyZXZpc2lv
biAxMjMxNykKKysrIFdlYkNvcmUva2h0bWwvaHRtbC9IVE1MSW5wdXRFbGVtZW50SW1wbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wg
aXNLZXlib2FyZEZvY3VzYWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0VudW1lcmF0
YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlucHV0VHlwZSgpICE9IElNQUdFOyB9CiAKLSAgICB2aXJ0
dWFsIERPTVN0cmluZyBuYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBBdG9taWNTdHJpbmcgbmFt
ZSgpIGNvbnN0OwogCiAgICAgYm9vbCBhdXRvQ29tcGxldGUoKSBjb25zdCB7IHJldHVybiBtX2F1
dG9jb21wbGV0ZTsgfQogCkluZGV4OiBXZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfaHRtbC5jcHAJKHJldmlzaW9uIDEy
MzE3KQorKysgV2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1sLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTEwLDcgKzUxMCw3IEBAIGNvbnN0IENsYXNzSW5mbyBLSlM6OkhUTUxFbGVtZW50OjptYXJx
dWUKIAogY29uc3QgQ2xhc3NJbmZvKiBLSlM6OkhUTUxFbGVtZW50OjpjbGFzc0luZm8oKSBjb25z
dAogewotICAgIHN0YXRpYyBIYXNoTWFwPERPTTo6RE9NU3RyaW5nSW1wbCosIGNvbnN0IENsYXNz
SW5mbyosIFBvaW50ZXJIYXNoPERPTTo6RE9NU3RyaW5nSW1wbCo+ID4gY2xhc3NJbmZvTWFwOwor
ICAgIHN0YXRpYyBIYXNoTWFwPERPTTo6QXRvbWljU3RyaW5nSW1wbCosIGNvbnN0IENsYXNzSW5m
byo+IGNsYXNzSW5mb01hcDsKICAgICBpZiAoY2xhc3NJbmZvTWFwLmlzRW1wdHkoKSkgewogICAg
ICAgICBjbGFzc0luZm9NYXAuc2V0KGFUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmYV9pbmZvKTsK
ICAgICAgICAgY2xhc3NJbmZvTWFwLnNldChhcHBsZXRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAm
YXBwbGV0X2luZm8pOwpAQCAtNjQ0LDcgKzY0NCw3IEBAIGNvbnN0IEhUTUxFbGVtZW50OjpBY2Nl
c3NvcnMgSFRNTEVsZW1lbnQKIAogY29uc3QgSFRNTEVsZW1lbnQ6OkFjY2Vzc29ycyogSFRNTEVs
ZW1lbnQ6OmFjY2Vzc29ycygpIGNvbnN0CiB7Ci0gICAgc3RhdGljIEhhc2hNYXA8RE9NOjpET01T
dHJpbmdJbXBsICosIGNvbnN0IEFjY2Vzc29ycyAqLCBQb2ludGVySGFzaDxET006OkRPTVN0cmlu
Z0ltcGwgKj4gPiBhY2Nlc3Nvck1hcDsKKyAgICBzdGF0aWMgSGFzaE1hcDxET006OkF0b21pY1N0
cmluZ0ltcGwqLCBjb25zdCBBY2Nlc3NvcnMqPiBhY2Nlc3Nvck1hcDsKICAgICBpZiAoYWNjZXNz
b3JNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgIGFjY2Vzc29yTWFwLmFkZChhVGFnLmxvY2FsTmFt
ZSgpLmltcGwoKSwgJmFfYWNjZXNzb3JzKTsKICAgICAgICAgYWNjZXNzb3JNYXAuYWRkKGFwcGxl
dFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZhcHBsZXRfYWNjZXNzb3JzKTsKQEAgLTI2MzMsNyAr
MjYzMyw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OnNlbGVjdFNldHRlcihFeGVjU3RhdGUKICAgICAg
ICAgLy8gcmVhZC1vbmx5OiBvcHRpb25zCiAgICAgICAgIGNhc2UgU2VsZWN0RGlzYWJsZWQ6ICAg
ICAgICB7IHNlbGVjdC5zZXREaXNhYmxlZCh2YWx1ZS0+dG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJu
OyB9CiAgICAgICAgIGNhc2UgU2VsZWN0TXVsdGlwbGU6ICAgICAgICB7IHNlbGVjdC5zZXRNdWx0
aXBsZSh2YWx1ZS0+dG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICAgIGNhc2UgU2Vs
ZWN0TmFtZTogICAgICAgICAgICB7IHNlbGVjdC5zZXROYW1lKHN0cik7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIFNlbGVjdE5hbWU6ICAgICAgICAgICAgeyBzZWxlY3Quc2V0TmFtZShBdG9taWNT
dHJpbmcoc3RyKSk7IHJldHVybjsgfQogICAgICAgICBjYXNlIFNlbGVjdFNpemU6ICAgICAgICAg
ICAgeyBzZWxlY3Quc2V0U2l6ZSh2YWx1ZS0+dG9JbnQzMihleGVjKSk7IHJldHVybjsgfQogICAg
ICAgICBjYXNlIFNlbGVjdFRhYkluZGV4OiAgICAgICAgeyBzZWxlY3Quc2V0VGFiSW5kZXgodmFs
dWUtPnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KICAgICB9CkBAIC0yNjc5LDcgKzI2NzksNyBA
QCB2b2lkIEhUTUxFbGVtZW50OjppbnB1dFNldHRlcihFeGVjU3RhdGUgCiAgICAgICAgIGNhc2Ug
SW5wdXREaXNhYmxlZDogICAgICAgIHsgaW5wdXQuc2V0RGlzYWJsZWQodmFsdWUtPnRvQm9vbGVh
bihleGVjKSk7IHJldHVybjsgfQogICAgICAgICBjYXNlIElucHV0SW5kZXRlcm1pbmF0ZTogICB7
IGlucHV0LnNldEluZGV0ZXJtaW5hdGUodmFsdWUtPnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsg
fQogICAgICAgICBjYXNlIElucHV0TWF4TGVuZ3RoOiAgICAgICB7IGlucHV0LnNldE1heExlbmd0
aCh2YWx1ZS0+dG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgICBjYXNlIElucHV0TmFt
ZTogICAgICAgICAgICB7IGlucHV0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgSW5wdXROYW1lOiAgICAgICAgICAgIHsgaW5wdXQuc2V0TmFtZShBdG9taWNTdHJpbmcoc3Ry
KSk7IHJldHVybjsgfQogICAgICAgICBjYXNlIElucHV0UmVhZE9ubHk6ICAgICAgICB7IGlucHV0
LnNldFJlYWRPbmx5KHZhbHVlLT50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KICAgICAgICAg
Y2FzZSBJbnB1dFNpemU6ICAgICAgICAgICAgeyBpbnB1dC5zZXRTaXplKHZhbHVlLT50b0ludDMy
KGV4ZWMpKTsgcmV0dXJuOyB9CiAgICAgICAgIGNhc2UgSW5wdXRTZWxlY3Rpb25TdGFydDogIHsg
aW5wdXQuc2V0U2VsZWN0aW9uU3RhcnQodmFsdWUtPnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0K
QEAgLTI3MDEsNyArMjcwMSw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OnRleHRBcmVhU2V0dGVyKEV4
ZWNTdGEKICAgICAgICAgY2FzZSBUZXh0QXJlYUFjY2Vzc0tleTogICAgICAgeyB0ZXh0YXJlYS5z
ZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9CiAgICAgICAgIGNhc2UgVGV4dEFyZWFDb2xzOiAg
ICAgICAgICAgIHsgdGV4dGFyZWEuc2V0Q29scyh2YWx1ZS0+dG9JbnQzMihleGVjKSk7IHJldHVy
bjsgfQogICAgICAgICBjYXNlIFRleHRBcmVhRGlzYWJsZWQ6ICAgICAgICB7IHRleHRhcmVhLnNl
dERpc2FibGVkKHZhbHVlLT50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgICAgY2Fz
ZSBUZXh0QXJlYU5hbWU6ICAgICAgICAgICAgeyB0ZXh0YXJlYS5zZXROYW1lKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIFRleHRBcmVhTmFtZTogICAgICAgICAgICB7IHRleHRhcmVhLnNl
dE5hbWUoQXRvbWljU3RyaW5nKHN0cikpOyByZXR1cm47IH0KICAgICAgICAgY2FzZSBUZXh0QXJl
YVJlYWRPbmx5OiAgICAgICAgeyB0ZXh0YXJlYS5zZXRSZWFkT25seSh2YWx1ZS0+dG9Cb29sZWFu
KGV4ZWMpKTsgcmV0dXJuOyB9CiAgICAgICAgIGNhc2UgVGV4dEFyZWFSb3dzOiAgICAgICAgICAg
IHsgdGV4dGFyZWEuc2V0Um93cyh2YWx1ZS0+dG9JbnQzMihleGVjKSk7IHJldHVybjsgfQogICAg
ICAgICBjYXNlIFRleHRBcmVhU2VsZWN0aW9uU3RhcnQ6ICB7IHRleHRhcmVhLnNldFNlbGVjdGlv
blN0YXJ0KHZhbHVlLT50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CkBAIC0yNzE5LDcgKzI3MTks
NyBAQCB2b2lkIEhUTUxFbGVtZW50OjpidXR0b25TZXR0ZXIoRXhlY1N0YXRlCiAgICAgICAgIC8v
IHJlYWQtb25seTogZm9ybQogICAgICAgICBjYXNlIEJ1dHRvbkFjY2Vzc0tleTogICAgICAgeyBi
dXR0b24uc2V0QWNjZXNzS2V5KHN0cik7IHJldHVybjsgfQogICAgICAgICBjYXNlIEJ1dHRvbkRp
c2FibGVkOiAgICAgICAgeyBidXR0b24uc2V0RGlzYWJsZWQodmFsdWUtPnRvQm9vbGVhbihleGVj
KSk7IHJldHVybjsgfQotICAgICAgICBjYXNlIEJ1dHRvbk5hbWU6ICAgICAgICAgICAgeyBidXR0
b24uc2V0TmFtZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBCdXR0b25OYW1lOiAgICAg
ICAgICAgIHsgYnV0dG9uLnNldE5hbWUoQXRvbWljU3RyaW5nKHN0cikpOyByZXR1cm47IH0KICAg
ICAgICAgY2FzZSBCdXR0b25UYWJJbmRleDogICAgICAgIHsgYnV0dG9uLnNldFRhYkluZGV4KHZh
bHVlLT50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CiAgICAgICAgIC8vIHJlYWQtb25seTogdHlw
ZQogICAgICAgICBjYXNlIEJ1dHRvblZhbHVlOiAgICAgICAgICAgeyBidXR0b24uc2V0VmFsdWUo
c3RyKTsgcmV0dXJuOyB9CkluZGV4OiBXZWJDb3JlL2todG1sL2VjbWEva2pzX2JpbmRpbmcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfYmluZGluZy5jcHAJKHJldmlz
aW9uIDEyMzE3KQorKysgV2ViQ29yZS9raHRtbC9lY21hL2tqc19iaW5kaW5nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTksOSArNTksOSBAQCBVU3RyaW5nIERPTU9iamVjdDo6dG9TdHJpbmcoRXhl
Y1N0YXRlICopCiAgIHJldHVybiAiW29iamVjdCAiICsgY2xhc3NOYW1lKCkgKyAiXSI7CiB9CiAK
LXR5cGVkZWYgSGFzaE1hcDx2b2lkICosIERPTU9iamVjdCAqPiBET01PYmplY3RNYXA7Ci10eXBl
ZGVmIEhhc2hNYXA8Tm9kZUltcGwgKiwgRE9NTm9kZSAqLCBQb2ludGVySGFzaDxOb2RlSW1wbCAq
PiA+IE5vZGVNYXA7Ci10eXBlZGVmIEhhc2hNYXA8RG9jdW1lbnRJbXBsICosIE5vZGVNYXAgKiwg
UG9pbnRlckhhc2g8RG9jdW1lbnRJbXBsICo+ID4gTm9kZVBlckRvY01hcDsKK3R5cGVkZWYgSGFz
aE1hcDx2b2lkKiwgRE9NT2JqZWN0Kj4gRE9NT2JqZWN0TWFwOwordHlwZWRlZiBIYXNoTWFwPE5v
ZGVJbXBsKiwgRE9NTm9kZSo+IE5vZGVNYXA7Cit0eXBlZGVmIEhhc2hNYXA8RG9jdW1lbnRJbXBs
KiwgTm9kZU1hcCo+IE5vZGVQZXJEb2NNYXA7CiAKIHN0YXRpYyBET01PYmplY3RNYXAgKmRvbU9i
amVjdHMoKQogeyAKQEAgLTI3OCw2ICsyNzgsMTcgQEAgVVN0cmluZzo6VVN0cmluZyhjb25zdCBE
T01TdHJpbmcgJmQpCiAgIG1fcmVwID0gVVN0cmluZzo6UmVwOjpjcmVhdGVDb3B5aW5nKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIgKj4oZC51bmljb2RlKCkpLCBkLmxlbmd0aCgpKTsKIH0K
IAorVVN0cmluZzo6VVN0cmluZyhjb25zdCBBdG9taWNTdHJpbmcgJmQpCit7CisgIGlmIChkLmlz
TnVsbCgpKSB7CisgICAgbV9yZXAgPSAmUmVwOjpudWxsOworICAgIHJldHVybjsKKyAgfQorICAv
LyByZWludGVycHJldF9jYXN0IGlzIHVnbHkgYnV0IGluIHRoaXMgY2FzZSBzYWZlLCBzaW5jZSBR
Q2hhciBhbmQgVUNoYXIgaGF2ZSB0aGUgc2FtZQorICAvLyBtZW1vcnkgbGF5b3V0CisgIG1fcmVw
ID0gVVN0cmluZzo6UmVwOjpjcmVhdGVDb3B5aW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNo
YXIgKj4oZC5kb21TdHJpbmcoKS51bmljb2RlKCkpLCBkLmRvbVN0cmluZygpLmxlbmd0aCgpKTsK
K30KKwogRE9NU3RyaW5nIFVTdHJpbmc6OmRvbVN0cmluZygpIGNvbnN0CiB7CiAgIGlmIChpc051
bGwoKSkKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfd2luZG93LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9raHRtbC9lY21hL2tqc193aW5kb3cuaAkocmV2aXNpb24gMTIzMTcpCisrKyBX
ZWJDb3JlL2todG1sL2VjbWEva2pzX3dpbmRvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4
Nyw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB2aXJ0dWFsIHZvaWQgdGltZXJFdmVudChR
VGltZXJFdmVudCAqKTsKIAogICAgICAgICBXaW5kb3cgKm1fcGFyZW50OwotICAgICAgICB0eXBl
ZGVmIEhhc2hNYXA8aW50LCBTY2hlZHVsZWRBY3Rpb24qLCBQb2ludGVySGFzaDxpbnQ+ID4gVGlt
ZW91dHNNYXA7CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFNjaGVkdWxlZEFjdGlvbio+
IFRpbWVvdXRzTWFwOwogICAgICAgICBUaW1lb3V0c01hcCBtX3RpbWVvdXRzOwogICB9OwogCkBA
IC0xNjksOCArMTY5LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgLy8gU2V0IGEgcGxhY2UgdG8g
cHV0IGEgZGlhbG9nIHJldHVybiB2YWx1ZSB3aGVuIHRoZSB3aW5kb3cgaXMgY2xlYXJlZC4KICAg
ICB2b2lkIHNldFJldHVyblZhbHVlU2xvdChKU1ZhbHVlICoqc2xvdCkgeyBtX3JldHVyblZhbHVl
U2xvdCA9IHNsb3Q7IH0KIAotICAgIHR5cGVkZWYgSGFzaE1hcDxKU09iamVjdCosIEpTRXZlbnRM
aXN0ZW5lciosIFBvaW50ZXJIYXNoPEpTT2JqZWN0Kj4gPiBMaXN0ZW5lcnNNYXA7Ci0gICAgdHlw
ZWRlZiBIYXNoTWFwPEpTT2JqZWN0KiwgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqLCBQb2lu
dGVySGFzaDxKU09iamVjdCo+ID4gVW5wcm90ZWN0ZWRMaXN0ZW5lcnNNYXA7CisgICAgdHlwZWRl
ZiBIYXNoTWFwPEpTT2JqZWN0KiwgSlNFdmVudExpc3RlbmVyKj4gTGlzdGVuZXJzTWFwOworICAg
IHR5cGVkZWYgSGFzaE1hcDxKU09iamVjdCosIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKj4g
VW5wcm90ZWN0ZWRMaXN0ZW5lcnNNYXA7CiAgICAgTGlzdGVuZXJzTWFwIGpzRXZlbnRMaXN0ZW5l
cnM7CiAgICAgVW5wcm90ZWN0ZWRMaXN0ZW5lcnNNYXAganNVbnByb3RlY3RlZEV2ZW50TGlzdGVu
ZXJzOwogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJl
dHVybiAmaW5mbzsgfQpJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL2tqc19kb20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfZG9tLmNwcAkocmV2aXNpb24gMTIzMjEp
CisrKyBXZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
MCw3ICsxMzAsNyBAQCB2b2lkIERPTU5vZGU6Om1hcmsoKQogICAgIHJvb3QgPSBjdXJyZW50Owog
ICB9CiAKLSAgc3RhdGljIEhhc2hTZXQ8Tm9kZUltcGwqLCBQb2ludGVySGFzaDxOb2RlSW1wbCo+
ID4gbWFya2luZ1Jvb3RzOworICBzdGF0aWMgSGFzaFNldDxOb2RlSW1wbCo+IG1hcmtpbmdSb290
czsKIAogICAvLyBJZiB3ZSdyZSBhbHJlYWR5IG1hcmtpbmcgdGhpcyB0cmVlLCB0aGVuIHdlIGNh
biBzaW1wbHkgbWFyayB0aGlzIHdyYXBwZXIKICAgLy8gYnkgY2FsbGluZyB0aGUgYmFzZSBjbGFz
czsgb3VyIGNhbGxlciBpcyBpdGVyYXRpbmcgdGhlIHRyZWUuCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL29iamMvRE9NLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00u
bW0JKHJldmlzaW9uIDEyMzE3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQkod29y
a2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCBwcml2YXRlOgogICAgIGlkIDxET01FdmVudExp
c3RlbmVyPiBtX2xpc3RlbmVyOwogfTsKIAotdHlwZWRlZiBIYXNoTWFwPCBpZCwgT2JqQ0V2ZW50
TGlzdGVuZXIgKiwgUG9pbnRlckhhc2g8aWQ+ID4gTGlzdGVuZXJNYXA7Cit0eXBlZGVmIEhhc2hN
YXA8aWQsIE9iakNFdmVudExpc3RlbmVyKj4gTGlzdGVuZXJNYXA7CiAKIHN0YXRpYyBMaXN0ZW5l
ck1hcCAqbGlzdGVuZXJNYXA7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3JlbmRlcl9jYW52
YXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9yZW5kZXJfY2FudmFzLmgJKHJl
dmlzaW9uIDEyMzE3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvcmVuZGVyX2NhbnZhcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDcgQEAgcHJvdGVjdGVkOgogICAgIGludCBtX21heGlt
YWxPdXRsaW5lU2l6ZTsgLy8gVXNlZCB0byBhcHBseSBhIGZ1ZGdlIGZhY3RvciB0byBkaXJ0eS1y
ZWN0IGNoZWNrcyBvbiBibG9ja3MvdGFibGVzLgogICAgIEludFJlY3QgbV9wcmludFJlY3Q7IC8v
IFVzZWQgd2hlbiBwcmludGluZy4KIAotICAgIHR5cGVkZWYgSGFzaFNldDxSZW5kZXJPYmplY3Qg
KiwgUG9pbnRlckhhc2g8UmVuZGVyT2JqZWN0ICo+ID4gUmVuZGVyT2JqZWN0U2V0OworICAgIHR5
cGVkZWYgSGFzaFNldDxSZW5kZXJPYmplY3QgKj4gUmVuZGVyT2JqZWN0U2V0OwogCiAgICAgUmVu
ZGVyT2JqZWN0U2V0IG1fd2lkZ2V0czsKIH07CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9yZW5k
ZXJfb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvcmVuZGVyX29iamVj
dC5oCShyZXZpc2lvbiAxMjMxNykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3JlbmRlcl9vYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDcgKzEyNCw3IEBAIHN0cnVjdCBEYXNoYm9hcmRSZWdp
b25WYWx1ZQogCiAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBIYXNoU2VxdWVuY2VkU2V0LCBi
dXQgd2UgZG9uJ3QgaGF2ZSB0aGF0IGRhdGEgc3RydWN0dXJlIHlldC4KIC8vIFRoaXMgbWVhbnMg
dGhlIHBhaW50IG9yZGVyIG9mIG91dGxpbmVzIHdpbGwgYmUgd3JvbmcsIGFsdGhvdWdoIHRoaXMg
aXMgYSBtaW5vciBpc3N1ZS4KLXR5cGVkZWYgSGFzaFNldDxSZW5kZXJGbG93KiwgUG9pbnRlckhh
c2g8UmVuZGVyRmxvdyo+ID4gUmVuZGVyRmxvd1NlcXVlbmNlZFNldDsKK3R5cGVkZWYgSGFzaFNl
dDxSZW5kZXJGbG93Kj4gUmVuZGVyRmxvd1NlcXVlbmNlZFNldDsKIAogLyoqCiAgKiBCYXNlIENs
YXNzIGZvciBhbGwgcmVuZGVyaW5nIHRyZWUgb2JqZWN0cy4KSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL3JlbmRlcl9jYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3Jl
bmRlcl9jYW52YXMuY3BwCShyZXZpc2lvbiAxMjMyMSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3Jl
bmRlcl9jYW52YXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDgsNyArMzA4LDcgQEAgdm9pZCBS
ZW5kZXJDYW52YXM6OmFic29sdXRlUmVjdHMoUVZhbHVlTAogCiBJbnRSZWN0IFJlbmRlckNhbnZh
czo6c2VsZWN0aW9uUmVjdCgpIGNvbnN0CiB7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFJlbmRlck9i
amVjdCosIFNlbGVjdGlvbkluZm8qLCBQb2ludGVySGFzaDxSZW5kZXJPYmplY3QqPiA+IFNlbGVj
dGlvbk1hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgU2VsZWN0aW9uSW5m
byo+IFNlbGVjdGlvbk1hcDsKICAgICBTZWxlY3Rpb25NYXAgc2VsZWN0ZWRPYmplY3RzOwogCiAg
ICAgUmVuZGVyT2JqZWN0KiBvcyA9IG1fc2VsZWN0aW9uU3RhcnQ7CkBAIC0zNzIsMTQgKzM3Miwx
NCBAQCB2b2lkIFJlbmRlckNhbnZhczo6c2V0U2VsZWN0aW9uKFJlbmRlck9iCiAgICAgaW50IG9s
ZEVuZFBvcyA9IG1fc2VsZWN0aW9uRW5kUG9zOwogCiAgICAgLy8gT2JqZWN0cyBlYWNoIGhhdmUg
YSBzaW5nbGUgc2VsZWN0aW9uIHJlY3QgdG8gZXhhbWluZS4KLSAgICB0eXBlZGVmIEhhc2hNYXA8
UmVuZGVyT2JqZWN0KiwgU2VsZWN0aW9uSW5mbyosIFBvaW50ZXJIYXNoPFJlbmRlck9iamVjdCo+
ID4gU2VsZWN0ZWRPYmplY3RNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFJlbmRlck9iamVjdCos
IFNlbGVjdGlvbkluZm8qPiBTZWxlY3RlZE9iamVjdE1hcDsKICAgICBTZWxlY3RlZE9iamVjdE1h
cCBvbGRTZWxlY3RlZE9iamVjdHM7CiAgICAgU2VsZWN0ZWRPYmplY3RNYXAgbmV3U2VsZWN0ZWRP
YmplY3RzOwogCiAgICAgLy8gQmxvY2tzIGNvbnRhaW4gc2VsZWN0ZWQgb2JqZWN0cyBhbmQgZmls
bCBnYXBzIGJldHdlZW4gdGhlbSwgZWl0aGVyIG9uIHRoZSBsZWZ0LCByaWdodCwgb3IgaW4gYmV0
d2VlbiBsaW5lcyBhbmQgYmxvY2tzLgogICAgIC8vIEluIG9yZGVyIHRvIGdldCB0aGUgcmVwYWlu
dCByZWN0IHJpZ2h0LCB3ZSBoYXZlIHRvIGV4YW1pbmUgbGVmdCwgbWlkZGxlLCBhbmQgcmlnaHQg
cmVjdHMgaW5kaXZpZHVhbGx5LCBzaW5jZSBvdGhlcndpc2UKICAgICAvLyB0aGUgdW5pb24gb2Yg
dGhvc2UgcmVjdHMgbWlnaHQgcmVtYWluIHRoZSBzYW1lIGV2ZW4gd2hlbiBjaGFuZ2VzIGhhdmUg
b2NjdXJyZWQuCi0gICAgdHlwZWRlZiBIYXNoTWFwPFJlbmRlckJsb2NrKiwgQmxvY2tTZWxlY3Rp
b25JbmZvKiwgUG9pbnRlckhhc2g8UmVuZGVyQmxvY2sqPiA+IFNlbGVjdGVkQmxvY2tNYXA7Cisg
ICAgdHlwZWRlZiBIYXNoTWFwPFJlbmRlckJsb2NrKiwgQmxvY2tTZWxlY3Rpb25JbmZvKj4gU2Vs
ZWN0ZWRCbG9ja01hcDsKICAgICBTZWxlY3RlZEJsb2NrTWFwIG9sZFNlbGVjdGVkQmxvY2tzOwog
ICAgIFNlbGVjdGVkQmxvY2tNYXAgbmV3U2VsZWN0ZWRCbG9ja3M7CiAKSW5kZXg6IFdlYkNvcmUv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjMy
NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODcgQEAK
KzIwMDYtMDEtMjMgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIHJlbmFtZWQgUG9pbnRl
ckhhc2ggdG8gUHRySGFzaAorICAgICAgICAtIG1hZGUgUHRySGFzaCB0aGUgZGVmYXVsdCBoYXNo
IGZ1bmN0aW9uIGZvciBpbnQgYW5kIHBvaW50ZXIgdHlwZXMgdGhhdCBhcmVuJ3QgZnVydGhlciBz
cGVjaWFsaXplZAorICAgICAgICAtIGFkZGVkIGFuIEF0b21pY1N0cmluZ0ltcGwgY2xhc3MgdG8g
bWFrZSBpdCBlYXNpZXIgYW5kIG1vcmUgdHlwZXNhZmUgdG8gaWRlbnRpdHkgaGFzaCBhdG9taWMg
c3RyaW5ncworICAgICAgICAtIGRpZCBhcHByb3ByaWF0ZSBjb25zZXF1ZW50IGNsZWFudXAgKHZl
cnkgZmV3IHBsYWNlcyBub3cgbmVlZCB0byBkZWNsYXJlIGEgaGFzaCBmdW5jdGlvbikKKyAgICAg
ICAgaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9pZD02NzUyCisg
ICAgICAgIAorICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9NLm1tOgorICAgICAgICAqIGJyaWRn
ZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tOgorICAgICAgICAoLVtXZWJDb3JlRnJhbWVCcmlk
Z2UgZWxlbWVudFdpdGhOYW1lOmluRm9ybTpdKToKKyAgICAgICAgKiBjc3MvY3Nzc3R5bGVzZWxl
Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NSdWxlU2V0OjpnZXRJRFJ1bGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1J1bGVTZXQ6OmdldENsYXNzUnVsZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUnVsZVNldDo6Z2V0VGFnUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUnVs
ZVNldDo6YWRkVG9SdWxlU2V0KToKKyAgICAgICAgKiBraHRtbC9kb20vZG9tX3N0cmluZy5oOgor
ICAgICAgICAoS1hNTENvcmU6Oik6CisgICAgICAgICoga2h0bWwvZWNtYS9ranNfYmluZGluZy5j
cHA6CisgICAgICAgIChLSlM6OlVTdHJpbmc6OlVTdHJpbmcpOgorICAgICAgICAqIGtodG1sL2Vj
bWEva2pzX2RvbS5jcHA6CisgICAgICAgIChLSlM6OkRPTU5vZGU6Om1hcmspOgorICAgICAgICAq
IGtodG1sL2VjbWEva2pzX2h0bWwuY3BwOgorICAgICAgICAoS0pTOjpLSlM6OkhUTUxFbGVtZW50
OjpjbGFzc0luZm8pOgorICAgICAgICAoS0pTOjpIVE1MRWxlbWVudDo6YWNjZXNzb3JzKToKKyAg
ICAgICAgKEtKUzo6SFRNTEVsZW1lbnQ6OnNlbGVjdFNldHRlcik6CisgICAgICAgIChLSlM6OkhU
TUxFbGVtZW50OjppbnB1dFNldHRlcik6CisgICAgICAgIChLSlM6OkhUTUxFbGVtZW50Ojp0ZXh0
QXJlYVNldHRlcik6CisgICAgICAgIChLSlM6OkhUTUxFbGVtZW50OjpidXR0b25TZXR0ZXIpOgor
ICAgICAgICAqIGtodG1sL2VjbWEva2pzX3dpbmRvdy5oOgorICAgICAgICAqIGtodG1sL2VkaXRp
bmcvYXBwbHlfc3R5bGVfY29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxl
Q29tbWFuZDo6YXBwbHlSZWxhdGl2ZUZvbnRTdHlsZUNoYW5nZSk6CisgICAgICAgICoga2h0bWwv
aHRtbC9IVE1MQ29sbGVjdGlvbkltcGwuaDoKKyAgICAgICAgKiBraHRtbC9odG1sL0hUTUxFbGVt
ZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudEltcGw6OmlzUmVjb2du
aXplZFRhZ05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6aW5saW5lVGFnTGlzdCk6CisgICAgICAg
IChXZWJDb3JlOjpibG9ja1RhZ0xpc3QpOgorICAgICAgICAqIGtodG1sL2h0bWwvSFRNTEZvcm1D
b2xsZWN0aW9uSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbGxlY3Rpb25J
bXBsOjp1cGRhdGVOYW1lQ2FjaGUpOgorICAgICAgICAqIGtodG1sL2h0bWwvSFRNTEdlbmVyaWNG
b3JtRWxlbWVudEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEdlbmVyaWNGb3JtRWxl
bWVudEltcGw6Om5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEdlbmVyaWNGb3JtRWxlbWVu
dEltcGw6OnNldE5hbWUpOgorICAgICAgICAqIGtodG1sL2h0bWwvSFRNTEdlbmVyaWNGb3JtRWxl
bWVudEltcGwuaDoKKyAgICAgICAgKiBraHRtbC9odG1sL0hUTUxJbnB1dEVsZW1lbnRJbXBsLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnRJbXBsOjpuYW1lKToKKyAgICAg
ICAgKiBraHRtbC9odG1sL0hUTUxJbnB1dEVsZW1lbnRJbXBsLmg6CisgICAgICAgICoga2h0bWwv
aHRtbC9odG1sZmFjdG9yeS5jcHA6CisgICAgICAgIChET006OkhUTUxFbGVtZW50RmFjdG9yeTo6
Y3JlYXRlSFRNTEVsZW1lbnQpOgorICAgICAgICAqIGtodG1sL2h0bWwvaHRtbHBhcnNlci5jcHA6
CisgICAgICAgIChIVE1MUGFyc2VyOjppc0hlYWRlclRhZyk6CisgICAgICAgIChIVE1MUGFyc2Vy
Ojppc1Jlc2lkdWFsU3R5bGVUYWcpOgorICAgICAgICAoSFRNTFBhcnNlcjo6aXNBZmZlY3RlZEJ5
UmVzaWR1YWxTdHlsZSk6CisgICAgICAgICoga2h0bWwveG1sL0RvY3VtZW50SW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudEltcGw6OmNoZWNrZWRSYWRpb0J1dHRvbkZvckdyb3Vw
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50SW1wbDo6cmVtb3ZlUmFkaW9CdXR0b25Hcm91
cCk6CisgICAgICAgICoga2h0bWwveG1sL0RvY3VtZW50SW1wbC5oOgorICAgICAgICAqIGtodG1s
L3htbC9Ob2RlSW1wbC5oOgorICAgICAgICAqIGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmg6
CisgICAgICAgIChET006OkF0b21pY1N0cmluZzo6QXRvbWljU3RyaW5nKToKKyAgICAgICAgKERP
TTo6QXRvbWljU3RyaW5nOjppbXBsKToKKyAgICAgICAgKEtYTUxDb3JlOjopOgorICAgICAgICAq
IGtodG1sL3htbC9kb21fc3RyaW5naW1wbC5jcHA6CisgICAgICAgIChET006OmVxdWFsKToKKyAg
ICAgICAgKiBraHRtbC94bWwvZG9tX3N0cmluZ2ltcGwuaDoKKyAgICAgICAgKEtYTUxDb3JlOjop
OgorICAgICAgICAqIGtodG1sL3htbC94bWxfdG9rZW5pemVyLmg6CisgICAgICAgICoga3N2ZzIv
bWlzYy9LU1ZHVGltZVNjaGVkdWxlci5jcHA6CisgICAgICAgIChLU1ZHOjpTVkdUaW1lcjo6bm90
aWZ5QWxsKToKKyAgICAgICAgKiBrd3EvS1dRS0pvYkNsYXNzZXMuaDoKKyAgICAgICAgKiBrd3Ev
S1dRT2JqZWN0LmNwcDoKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkT2JqZWN0Lmg6CisgICAgICAg
ICogbG9hZGVyL0NhY2hlZE9iamVjdENsaWVudFdhbGtlci5oOgorICAgICAgICAqIGxvYWRlci9s
b2FkZXIuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKEZyYW1lOjplbmRB
bGxMaWZlU3VwcG9ydCk6CisgICAgICAgICogcmVuZGVyaW5nL3JlbmRlcl9jYW52YXMuY3BwOgor
ICAgICAgICAoUmVuZGVyQ2FudmFzOjpzZWxlY3Rpb25SZWN0KToKKyAgICAgICAgKFJlbmRlckNh
bnZhczo6c2V0U2VsZWN0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvcmVuZGVyX2NhbnZhcy5o
OgorICAgICAgICAqIHJlbmRlcmluZy9yZW5kZXJfb2JqZWN0Lmg6CisgICAgICAgICogeG1sL3ht
bGh0dHByZXF1ZXN0Lmg6CisKIDIwMDYtMDEtMjMgTWl0eiBQZXR0ZWwgIDxvcGVuZGFyd2luLm9y
Z0BtaXR6cGV0dGVsLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbi4KSW5kZXg6IFdl
YkNvcmUvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3Nz
L2Nzc3N0eWxlc2VsZWN0b3IuY3BwCShyZXZpc2lvbiAxMjMxNykKKysrIFdlYkNvcmUvY3NzL2Nz
c3N0eWxlc2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksMTcgKzE2OSwxNyBAQCBw
dWJsaWM6CiAgICAgQ1NTUnVsZVNldCgpOwogICAgIH5DU1NSdWxlU2V0KCk7CiAgICAgCi0gICAg
dHlwZWRlZiBIYXNoTWFwPERPTVN0cmluZ0ltcGwgKiwgQ1NTUnVsZURhdGFMaXN0ICosIFBvaW50
ZXJIYXNoPERPTVN0cmluZ0ltcGwgKj4gPiBBdG9tUnVsZU1hcDsKKyAgICB0eXBlZGVmIEhhc2hN
YXA8QXRvbWljU3RyaW5nSW1wbCosIENTU1J1bGVEYXRhTGlzdCo+IEF0b21SdWxlTWFwOwogICAg
IAogICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldEltcGwqIHNoZWV0LCBj
b25zdCBET01TdHJpbmcgJm1lZGl1bSA9ICJzY3JlZW4iKTsKICAgICAKICAgICB2b2lkIGFkZFJ1
bGUoQ1NTU3R5bGVSdWxlSW1wbCogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbCk7Ci0gICAgdm9pZCBh
ZGRUb1J1bGVTZXQoRE9NU3RyaW5nSW1wbCoga2V5LCBBdG9tUnVsZU1hcCYgbWFwLAorICAgIHZv
aWQgYWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmIG1hcCwK
ICAgICAgICAgICAgICAgICAgICAgICBDU1NTdHlsZVJ1bGVJbXBsKiBydWxlLCBDU1NTZWxlY3Rv
ciogc2VsKTsKICAgICAKLSAgICBDU1NSdWxlRGF0YUxpc3QqIGdldElEUnVsZXMoRE9NU3RyaW5n
SW1wbCoga2V5KSB7IHJldHVybiBtX2lkUnVsZXMuZ2V0KGtleSk7IH0KLSAgICBDU1NSdWxlRGF0
YUxpc3QqIGdldENsYXNzUnVsZXMoRE9NU3RyaW5nSW1wbCoga2V5KSB7IHJldHVybiBtX2NsYXNz
UnVsZXMuZ2V0KGtleSk7IH0KLSAgICBDU1NSdWxlRGF0YUxpc3QqIGdldFRhZ1J1bGVzKERPTVN0
cmluZ0ltcGwqIGtleSkgeyByZXR1cm4gbV90YWdSdWxlcy5nZXQoa2V5KTsgfQorICAgIENTU1J1
bGVEYXRhTGlzdCogZ2V0SURSdWxlcyhBdG9taWNTdHJpbmdJbXBsKiBrZXkpIHsgcmV0dXJuIG1f
aWRSdWxlcy5nZXQoa2V5KTsgfQorICAgIENTU1J1bGVEYXRhTGlzdCogZ2V0Q2xhc3NSdWxlcyhB
dG9taWNTdHJpbmdJbXBsKiBrZXkpIHsgcmV0dXJuIG1fY2xhc3NSdWxlcy5nZXQoa2V5KTsgfQor
ICAgIENTU1J1bGVEYXRhTGlzdCogZ2V0VGFnUnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSB7
IHJldHVybiBtX3RhZ1J1bGVzLmdldChrZXkpOyB9CiAgICAgQ1NTUnVsZURhdGFMaXN0KiBnZXRV
bml2ZXJzYWxSdWxlcygpIHsgcmV0dXJuIG1fdW5pdmVyc2FsUnVsZXM7IH0KICAgICAKIHB1Ymxp
YzoKQEAgLTE1NDcsNyArMTU0Nyw3IEBAIENTU1J1bGVTZXQ6On5DU1NSdWxlU2V0KCkKIH0KIAog
Ci12b2lkIENTU1J1bGVTZXQ6OmFkZFRvUnVsZVNldChET01TdHJpbmdJbXBsKiBrZXksIEF0b21S
dWxlTWFwJiBtYXAsCit2b2lkIENTU1J1bGVTZXQ6OmFkZFRvUnVsZVNldChBdG9taWNTdHJpbmdJ
bXBsKiBrZXksIEF0b21SdWxlTWFwJiBtYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDU1NTdHlsZVJ1bGVJbXBsKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsKQogewogICAgIGlmICgh
a2V5KSByZXR1cm47CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdl
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2Uu
bW0JKHJldmlzaW9uIDEyMzE3KQorKysgV2ViQ29yZS9icmlkZ2UvbWFjL1dlYkNvcmVGcmFtZUJy
aWRnZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTE2Niw3ICsxMTY2LDcgQEAgc3RhdGljIEhUTUxG
b3JtRWxlbWVudEltcGwgKmZvcm1FbGVtZW50RgogICAgIEhUTUxGb3JtRWxlbWVudEltcGwgKmZv
cm1FbGVtZW50ID0gZm9ybUVsZW1lbnRGcm9tRE9NRWxlbWVudChmb3JtKTsKICAgICBpZiAoZm9y
bUVsZW1lbnQpIHsKICAgICAgICAgUVB0clZlY3RvcjxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1w
bD4gJmVsZW1lbnRzID0gZm9ybUVsZW1lbnQtPmZvcm1FbGVtZW50czsKLSAgICAgICAgUVN0cmlu
ZyB0YXJnZXROYW1lID0gUVN0cmluZzo6ZnJvbU5TU3RyaW5nKG5hbWUpOworICAgICAgICBBdG9t
aWNTdHJpbmcgdGFyZ2V0TmFtZSA9IG5hbWU7CiAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgZWxlbWVudHMuY291bnQoKTsgaSsrKSB7CiAgICAgICAgICAgICBIVE1MR2VuZXJp
Y0Zvcm1FbGVtZW50SW1wbCAqZWx0ID0gZWxlbWVudHMuYXQoaSk7CiAgICAgICAgICAgICAvLyBT
a2lwIG9wdGlvbiBlbGVtZW50cywgb3RoZXIgZHVkcwpJbmRleDogV2ViQ29yZS9rc3ZnMi9taXNj
L0tTVkdUaW1lU2NoZWR1bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL21pc2Mv
S1NWR1RpbWVTY2hlZHVsZXIuY3BwCShyZXZpc2lvbiAxMjMxNykKKysrIFdlYkNvcmUva3N2ZzIv
bWlzYy9LU1ZHVGltZVNjaGVkdWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw3ICsxMzIs
NyBAQCB2b2lkIFNWR1RpbWVyOjpub3RpZnlBbGwoKQogICAgIC8vIEZpcnN0IGJ1aWxkIGEgbGlz
dCBvZiBhbmltYXRpb24gZWxlbWVudHMgcGVyIHRhcmdldCBlbGVtZW50CiAgICAgLy8gVGhpcyBp
cyBpbXBvcnRhbnQgdG8gZGVjaWRlIGFib3V0IHRoZSBvcmRlciAmIHByaW9yaXR5IG9mIAogICAg
IC8vIHRoZSBhbmltYXRpb25zIC0+ICdhZGRpdGl2ZScgc3VwcG9ydCBpcyBoYW5kbGVkIHRoaXMg
d2F5LgotICAgIHR5cGVkZWYgSGFzaE1hcDxTVkdFbGVtZW50SW1wbCosIFEzUHRyTGlzdDxTVkdB
bmltYXRpb25FbGVtZW50SW1wbD4sIFBvaW50ZXJIYXNoPFNWR0VsZW1lbnRJbXBsKj4gPiBUYXJn
ZXRBbmltYXRpb25NYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFNWR0VsZW1lbnRJbXBsKiwgUTNQ
dHJMaXN0PFNWR0FuaW1hdGlvbkVsZW1lbnRJbXBsPiA+IFRhcmdldEFuaW1hdGlvbk1hcDsKICAg
ICBUYXJnZXRBbmltYXRpb25NYXAgdGFyZ2V0TWFwOwogICAgIAogICAgIGZvcih1bnNpZ25lZCBp
bnQgaSA9IG1fbm90aWZ5TGlzdC5jb3VudCgpOyBpID4gMDsgaS0tKQpJbmRleDogV2ViQ29yZS94
bWwveG1saHR0cHJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC94bWxodHRwcmVx
dWVzdC5oCShyZXZpc2lvbiAxMjMxNykKKysrIFdlYkNvcmUveG1sL3htbGh0dHByZXF1ZXN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk2LDggKzk2LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgdm9pZCBjaGFuZ2VTdGF0ZShYTUxIdHRwUmVxdWVzdFN0YXRlIG5ld1N0YXRlKTsKIAotICAg
IHR5cGVkZWYgSGFzaFNldDxYTUxIdHRwUmVxdWVzdCosIFBvaW50ZXJIYXNoPFhNTEh0dHBSZXF1
ZXN0Kj4gPiBSZXF1ZXN0c1NldDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8RG9jdW1lbnRJbXBsKiwg
UmVxdWVzdHNTZXQqLCBQb2ludGVySGFzaDxEb2N1bWVudEltcGwqPiA+IFJlcXVlc3RzTWFwOwor
ICAgIHR5cGVkZWYgSGFzaFNldDxYTUxIdHRwUmVxdWVzdCo+IFJlcXVlc3RzU2V0OworICAgIHR5
cGVkZWYgSGFzaE1hcDxEb2N1bWVudEltcGwqLCBSZXF1ZXN0c1NldCo+IFJlcXVlc3RzTWFwOwog
ICAgIHN0YXRpYyBSZXF1ZXN0c01hcCAmcmVxdWVzdHNCeURvY3VtZW50KCk7CiAgICAgdm9pZCBh
ZGRUb1JlcXVlc3RzQnlEb2N1bWVudCgpOwogICAgIHZvaWQgcmVtb3ZlRnJvbVJlcXVlc3RzQnlE
b2N1bWVudCgpOwpJbmRleDogV2ViQ29yZS9rd3EvS1dRT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2t3cS9LV1FPYmplY3QuY3BwCShyZXZpc2lvbiAxMjMxNykKKysrIFdlYkNvcmUv
a3dxL0tXUU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDggKzQ5LDggQEAgS1dRT2Jq
ZWN0VGltZXI6OktXUU9iamVjdFRpbWVyKFFPYmplY3QgKgogY29uc3QgUU9iamVjdCAqUU9iamVj
dDo6X3NlbmRlcjsKIGJvb2wgUU9iamVjdDo6X2RlZmVyc1RpbWVyczsKIAotdHlwZWRlZiBIYXNo
TWFwPGludCwgS1dRT2JqZWN0VGltZXIqLCBQb2ludGVySGFzaDxpbnQ+ID4gSWRUb1RpbWVyTWFw
OwotdHlwZWRlZiBIYXNoTWFwPGNvbnN0IFFPYmplY3QqLCBJZFRvVGltZXJNYXAqLCBQb2ludGVy
SGFzaDxjb25zdCBRT2JqZWN0Kj4gPiBPYmplY3RUb1RpbWVyc01hcDsKK3R5cGVkZWYgSGFzaE1h
cDxpbnQsIEtXUU9iamVjdFRpbWVyKj4gSWRUb1RpbWVyTWFwOwordHlwZWRlZiBIYXNoTWFwPGNv
bnN0IFFPYmplY3QqLCBJZFRvVGltZXJNYXAqPiBPYmplY3RUb1RpbWVyc01hcDsKIAogc3RhdGlj
IE9iamVjdFRvVGltZXJzTWFwICp0aW1lck1hcHM7CiBzdGF0aWMgQ0ZNdXRhYmxlQXJyYXlSZWYg
ZGVmZXJyZWRUaW1lcnM7CkluZGV4OiBXZWJDb3JlL2t3cS9LV1FLSm9iQ2xhc3Nlcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUva3dxL0tXUUtKb2JDbGFzc2VzLmgJKHJldmlzaW9uIDEyMzE3KQor
KysgV2ViQ29yZS9rd3EvS1dRS0pvYkNsYXNzZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsNyBAQAogI2luY2x1ZGUgIktXUU9iamVjdC5oIgogI2luY2x1ZGUgIktXUVN0cmluZy5oIgog
I2luY2x1ZGUgIktXUUtVUkwuaCIKKyNpbmNsdWRlICJkb21fc3RyaW5nLmgiCiAKICNpZmRlZiBf
X09CSkNfXwogQGNsYXNzIEtXUVJlc291cmNlTG9hZGVyOwpJbmRleDogV2ViQ29yZS9sb2FkZXIv
Q2FjaGVkT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkT2JqZWN0
LmgJKHJldmlzaW9uIDEyMzE3KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTE2OSw3ICsxNjksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgIHBy
b3RlY3RlZDoKICAgICAgICAgdm9pZCBzZXRTaXplKGludCBzaXplKTsKIAotICAgICAgICBIYXNo
U2V0PENhY2hlZE9iamVjdENsaWVudCosIFBvaW50ZXJIYXNoPENhY2hlZE9iamVjdENsaWVudCo+
ID4gbV9jbGllbnRzOworICAgICAgICBIYXNoU2V0PENhY2hlZE9iamVjdENsaWVudCo+IG1fY2xp
ZW50czsKIAogICAgICAgICBET01TdHJpbmcgbV91cmw7CiAgICAgICAgIFFTdHJpbmcgbV9hY2Nl
cHQ7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRPYmplY3RDbGllbnRXYWxrZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRPYmplY3RDbGllbnRXYWxrZXIuaAkocmV2
aXNpb24gMTIzMTcpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRPYmplY3RDbGllbnRXYWxrZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICBjbGFzcyBDYWNoZWRPYmplY3RDbGllbnQ7CiAKLSAgICB0eXBlZGVmIEhhc2hTZXQ8Q2Fj
aGVkT2JqZWN0Q2xpZW50KiwgUG9pbnRlckhhc2g8Q2FjaGVkT2JqZWN0Q2xpZW50Kj4gPiBDYWNo
ZWRPYmplY3RDbGllbnRTZXQ7CisgICAgdHlwZWRlZiBIYXNoU2V0PENhY2hlZE9iamVjdENsaWVu
dCo+IENhY2hlZE9iamVjdENsaWVudFNldDsKIAogICAgIC8vIENhbGwgdGhpcyAid2Fsa2VyIiBp
bnN0ZWFkIG9mIGl0ZXJhdG9yIHNvIHBlb3BsZSB3b24ndCBleHBlY3QgUXQgb3IgU1RMLXN0eWxl
IGl0ZXJhdG9yIGludGVyZmFjZS4KICAgICAvLyBKdXN0IGtlZXAgY2FsbGluZyBuZXh0KCkgb24g
dGhpcy4gSXQncyBzYWZlIGZyb20gZGVsZXRpb25zIG9mIGl0ZW1zLgpJbmRleDogV2ViQ29yZS9s
b2FkZXIvbG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmgJKHJl
dmlzaW9uIDEyMzE3KQorKysgV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTg4LDcgKzg4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVhbCBib29s
IGlzS0hUTUxMb2FkZXIoKSBjb25zdDsKIAogICAgICAgICBRUHRyTGlzdDxSZXF1ZXN0PiBtX3Jl
cXVlc3RzUGVuZGluZzsKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEtJTzo6Sm9iKiwgUmVxdWVz
dCosIFBvaW50ZXJIYXNoPEtJTzo6Sm9iKj4gPiBSZXF1ZXN0TWFwOworICAgICAgICB0eXBlZGVm
IEhhc2hNYXA8S0lPOjpKb2IqLCBSZXF1ZXN0Kj4gUmVxdWVzdE1hcDsKICAgICAgICAgUmVxdWVz
dE1hcCBtX3JlcXVlc3RzTG9hZGluZzsKIAogICAgICAgICBRUHRyTGlzdDxSZXF1ZXN0PiBtX3Jl
cXVlc3RzQmFja2dyb3VuZERlY29kaW5nOwpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiAxMjMyMSkKKysr
IFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5OTUsMTYgKzI5OTUs
MTUgQEAgdm9pZCBGcmFtZTo6ZGlzY29ubmVjdENoaWxkKGNvbnN0IENoaWxkRgogfQogCiAjaWZu
ZGVmIE5ERUJVRwotdHlwZWRlZiBIYXNoU2V0PEZyYW1lICosIFBvaW50ZXJIYXNoPEZyYW1lICo+
ID4gRnJhbWVTZXQ7Ci1zdGF0aWMgRnJhbWVTZXQgbGlmZVN1cHBvcnRTZXQ7CitzdGF0aWMgSGFz
aFNldDxGcmFtZSo+IGxpZmVTdXBwb3J0U2V0OwogI2VuZGlmCiAKIHZvaWQgRnJhbWU6OmVuZEFs
bExpZmVTdXBwb3J0KCkKIHsKICNpZm5kZWYgTkRFQlVHCi0gICAgRnJhbWVTZXQgbGlmZVN1cHBv
cnRDb3B5ID0gbGlmZVN1cHBvcnRTZXQ7Ci0gICAgRnJhbWVTZXQ6Oml0ZXJhdG9yIGVuZCA9IGxp
ZmVTdXBwb3J0Q29weS5lbmQoKTsKLSAgICBmb3IgKEZyYW1lU2V0OjppdGVyYXRvciBpdCA9IGxp
ZmVTdXBwb3J0Q29weS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgSGFzaFNldDxGcmFt
ZSo+IGxpZmVTdXBwb3J0Q29weSA9IGxpZmVTdXBwb3J0U2V0OworICAgIEhhc2hTZXQ8RnJhbWUq
Pjo6aXRlcmF0b3IgZW5kID0gbGlmZVN1cHBvcnRDb3B5LmVuZCgpOworICAgIGZvciAoSGFzaFNl
dDxGcmFtZSo+OjppdGVyYXRvciBpdCA9IGxpZmVTdXBwb3J0Q29weS5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCiAgICAgICAgICgqaXQpLT5zbG90RW5kTGlmZVN1cHBvcnQoKTsKICNlbmRpZgog
fQo=
</data>
<flag name="review"
          id="1379"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>