<?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>124088</bug_id>
          
          <creation_ts>2013-11-08 17:02:43 -0800</creation_ts>
          <short_desc>Merge IDBDatabaseBackendInterface and IDBDatabaseBackendImpl</short_desc>
          <delta_ts>2013-11-08 22:25:29 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>alecflett</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jsbell</cc>
    
    <cc>rakuco</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>948942</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-08 17:02:43 -0800</bug_when>
    <thetext>Merge IDBDatabaseBackendInterface and IDBDatabaseBackendImpl

The abstraction no longer makes any sense in its current form.

Some of the groundwork for the DatabaseProcess in WebKit2 relied on this abstraction, but it will be updated in a later patch  (It&apos;s not used right now, anyways)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>948946</commentid>
    <comment_count>1</comment_count>
      <attachid>216466</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-08 17:11:50 -0800</bug_when>
    <thetext>Created attachment 216466
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>948989</commentid>
    <comment_count>2</comment_count>
      <attachid>216466</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-08 19:23:35 -0800</bug_when>
    <thetext>Comment on attachment 216466
Patch v1 

Rejecting attachment 216466 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.appspot.com&apos;, &apos;--bot-id=webkit-cq-02&apos;, &apos;validate-changelog&apos;, &apos;--check-oops&apos;, &apos;--non-interactive&apos;, 216466, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

ChangeLog entry in Source/WebCore/ChangeLog contains OOPS!.

Full output: http://webkit-queues.appspot.com/results/22748655</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949006</commentid>
    <comment_count>3</comment_count>
      <attachid>216481</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-08 21:53:14 -0800</bug_when>
    <thetext>Created attachment 216481
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949011</commentid>
    <comment_count>4</comment_count>
      <attachid>216481</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-08 22:25:26 -0800</bug_when>
    <thetext>Comment on attachment 216481
Patch for landing

Clearing flags on attachment: 216481

Committed r158992: &lt;http://trac.webkit.org/changeset/158992&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949012</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-08 22:25:29 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216466</attachid>
            <date>2013-11-08 17:11:50 -0800</date>
            <delta_ts>2013-11-08 21:53:14 -0800</delta_ts>
            <desc>Patch v1 </desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>182692</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYTllMjE4YS4uNTI0NWU4MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTc2NCw3ICs3NjQsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZC5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9J
REJDdXJzb3JXaXRoVmFsdWUuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2Uu
Y3BwCi0gICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKKyAg
ICBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuY3BwCiAgICAgTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcAogICAgIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkV2
ZW50RGlzcGF0Y2hlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwZDJkYTIzLi43MjcwYWE1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCkBAIC0xLDUgKzEsNTMgQEAKIDIwMTMtMTEtMDggIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25A
YXBwbGUuY29tPgogCisgICAgICAgIE1lcmdlIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSBh
bmQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI0MDg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFr
ZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFdl
YkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmg6IFJlbW92ZWQuCisKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAuCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kLmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgu
CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmVJbnRlcmZhY2Uu
aDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaDoKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvckJhY2tlbmQuY3BwOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvckJhY2tlbmQuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRh
YmFzZS5jcHA6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaDoKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcDoKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkluZGV4V3JpdGVyLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmUuY3BwOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmg6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5jcHA6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5oOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdEZWxldGVDYWxsLmg6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvSURCUmVxdWVzdC5jcHA6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
UmVxdWVzdC5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNw
cDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHA6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmg6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9u
cy5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRmFjdG9yeUJhY2tl
bmRMZXZlbERCLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZh
Y3RvcnlCYWNrZW5kTGV2ZWxEQi5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVs
ZGIvSURCTGV2ZWxEQkNvZGluZy5jcHA6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2
ZWxkYi9JREJMZXZlbERCQ29kaW5nLmg6CisKKzIwMTMtMTEtMDggIEJyYWR5IEVpZHNvbiAgPGJl
aWRzb25AYXBwbGUuY29tPgorCiAgICAgICAgIE1lcmdlIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSBhbmQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbAogICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0MDc3CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCmluZGV4IGJjODQ2ZjQuLmZiMDE2OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQpAQCAtMTgwMCw5ICsxODAwLDggQEAgd2ViY29yZV9tb2R1bGVzX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaCBcCi0J
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5j
cHAgXAotCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2Vu
ZEltcGwuaCBcCi0JU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VC
YWNrZW5kSW50ZXJmYWNlLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkRhdGFiYXNlQmFja2VuZC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlQmFja2VuZC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaCBcCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmVJbnRlcmZhY2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZUludGVy
ZmFjZS5oCmluZGV4IGI5MjA4NjQuLjBkMTM0OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZUludGVyZmFjZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZUludGVyZmFjZS5oCkBA
IC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZh
Y2UuaCIKICNpbmNsdWRlICJJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZS5oIgot
I2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgIklEQkRh
dGFiYXNlQmFja2VuZC5oIgogI2luY2x1ZGUgIklEQk1ldGFkYXRhLmgiCiAjaW5jbHVkZSAiSW5k
ZXhlZERCLmgiCiAKQEAgLTkxLDcgKzkxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBn
ZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uSW50
ZXJmYWNlJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QmIGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgbWF5
YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uSW50ZXJmYWNlJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgbmV3U3RhdGUsIGJvb2wgY2hlY2tDdXJyZW50KSA9IDA7CiAKLSAgICB2aXJ0dWFs
IGJvb2wgbWFrZUluZGV4V3JpdGVycyhJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBJREJLZXkmIHByaW1hcnlL
ZXksIGJvb2wga2V5V2FzR2VuZXJhdGVkLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRz
LCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIFZlY3RvcjxSZWZQdHI8SURCSW5kZXhXcml0ZXI+
PiYgaW5kZXhXcml0ZXJzLCBTdHJpbmcqIGVycm9yTWVzc2FnZSwgYm9vbCYgY29tcGxldGVkKSA9
IDA7CisgICAgdmlydHVhbCBib29sIG1ha2VJbmRleFdyaXRlcnMoSURCVHJhbnNhY3Rpb25CYWNr
ZW5kJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiwg
SURCS2V5JiBwcmltYXJ5S2V5LCBib29sIGtleVdhc0dlbmVyYXRlZCwgY29uc3QgVmVjdG9yPGlu
dDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4+Jiwg
VmVjdG9yPFJlZlB0cjxJREJJbmRleFdyaXRlcj4+JiBpbmRleFdyaXRlcnMsIFN0cmluZyogZXJy
b3JNZXNzYWdlLCBib29sJiBjb21wbGV0ZWQpID0gMDsKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJREJLZXk+IGdlbmVyYXRlS2V5KElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHVw
ZGF0ZUtleUdlbmVyYXRvcihJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgYm9vbCBjaGVja0N1cnJl
bnQpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkNhbGxiYWNrcy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJh
Y2tzLmgKaW5kZXggOWVkMzkwYS4uMTUzODJiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmgKQEAgLTQwLDcgKzQwLDcgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIGNsYXNzIERPTVN0cmluZ0xpc3Q7CiBjbGFzcyBJREJDdXJzb3JCYWNrZW5k
OwotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOworY2xhc3MgSURCRGF0YWJhc2VC
YWNrZW5kOwogCiBzdHJ1Y3QgSURCRGF0YWJhc2VNZXRhZGF0YTsKIApAQCAtNzIsOCArNzIsOCBA
QCBwdWJsaWM6CiAgICAgLy8gRnJvbSBJREJGYWN0b3J5Lm9wZW4oKS9kZWxldGVEYXRhYmFzZSgp
CiAgICAgdmlydHVhbCB2b2lkIG9uQmxvY2tlZCh1aW50NjRfdCAvKiBleGlzdGluZ1ZlcnNpb24g
Ki8pIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICAvLyBGcm9tIElEQkZhY3Rvcnkub3Bl
bigpCi0gICAgdmlydHVhbCB2b2lkIG9uVXBncmFkZU5lZWRlZCh1aW50NjRfdCAvKiBvbGRWZXJz
aW9uICovLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4sIGNvbnN0IElE
QkRhdGFiYXNlTWV0YWRhdGEmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVh
bCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4s
IGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Cisg
ICAgdmlydHVhbCB2b2lkIG9uVXBncmFkZU5lZWRlZCh1aW50NjRfdCAvKiBvbGRWZXJzaW9uICov
LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4sIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRh
dGEmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vz
cyhQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4sIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRh
dGEmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJz
b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcApp
bmRleCAxMjY2ZGQzLi5lZjA2NTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvci5jcHAKQEAgLTE0OSw3ICsxNDksNyBAQCBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IElEQkN1cnNvcjo6dXBkYXRlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgU2NyaXB0VmFs
dWUmIHZhbAogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIG9iamVjdFN0b3JlLT5wdXQo
SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JVcGRhdGUsIElEQkFueTo6Y3JlYXRl
KHRoaXMpLCBzdGF0ZSwgdmFsdWUsIG1fY3VycmVudFByaW1hcnlLZXksIGVjKTsKKyAgICByZXR1
cm4gb2JqZWN0U3RvcmUtPnB1dChJREJEYXRhYmFzZUJhY2tlbmQ6OkN1cnNvclVwZGF0ZSwgSURC
QW55OjpjcmVhdGUodGhpcyksIHN0YXRlLCB2YWx1ZSwgbV9jdXJyZW50UHJpbWFyeUtleSwgZWMp
OwogfQogCiB2b2lkIElEQkN1cnNvcjo6YWR2YW5jZSh1bnNpZ25lZCBsb25nIGNvdW50LCBFeGNl
cHRpb25Db2RlJiBlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvckJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ3Vyc29yQmFja2VuZC5jcHAKaW5kZXggZjE2NGUzOC4uMjdkNjQ3ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZC5j
cHAKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZUludGVyZmFj
ZS5oIgogI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFj
a2VuZEltcGwuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmQuaCIKICNpbmNsdWRlICJJ
REJEYXRhYmFzZUNhbGxiYWNrcy5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKICNp
bmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgpAQCAtMTAxLDcgKzEwMSw3IEBAIHByaXZh
dGU6CiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7CiB9OwogCi1JREJDdXJz
b3JCYWNrZW5kOjpJREJDdXJzb3JCYWNrZW5kKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlQ3Vy
c29ySW50ZXJmYWNlPiBjdXJzb3IsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJ
REJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCitJREJDdXJz
b3JCYWNrZW5kOjpJREJDdXJzb3JCYWNrZW5kKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlQ3Vy
c29ySW50ZXJmYWNlPiBjdXJzb3IsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJ
REJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tl
bmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiAgICAgOiBtX3Rhc2tUeXBl
KHRhc2tUeXBlKQogICAgICwgbV9jdXJzb3JUeXBlKGN1cnNvclR5cGUpCiAgICAgLCBtX2RhdGFi
YXNlKCYodHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZC5oCmluZGV4IDMxNGM1YmYuLjMyNzk2
N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNv
ckJhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJz
b3JCYWNrZW5kLmgKQEAgLTMwLDcgKzMwLDcgQEAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKIAogI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZUludGVyZmFjZS5oIgotI2luY2x1ZGUgIklE
QkRhdGFiYXNlQmFja2VuZEltcGwuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmQuaCIK
ICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmQuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZm
ZXIuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC00NSw5ICs0NSw5IEBAIGNsYXNzIElE
QkN1cnNvckJhY2tlbmQgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJDdXJzb3JCYWNrZW5kPiB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gY3JlYXRlKFBh
c3NSZWZQdHI8SURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiBjdXJzb3IsIEluZGV4ZWRE
Qjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0
aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IElEQkN1cnNvckJhY2tlbmQoY3Vyc29yLCBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2U6Ok5vcm1hbFRhc2ssIHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkKSk7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQ3Vyc29yQmFja2VuZChjdXJzb3IsIGN1
cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZDo6Tm9ybWFsVGFzaywgdHJhbnNhY3Rpb24sIG9i
amVjdFN0b3JlSWQpKTsKICAgICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFj
a2VuZD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiBj
dXJzb3IsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tl
bmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRy
YW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
SURCQ3Vyc29yQmFja2VuZD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlQ3Vyc29y
SW50ZXJmYWNlPiBjdXJzb3IsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJE
YXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmQq
IHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiAgICAgewogICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IElEQkN1cnNvckJhY2tlbmQoY3Vyc29yLCBjdXJzb3JUeXBlLCB0YXNr
VHlwZSwgdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWQpKTsKICAgICB9CkBAIC02NywxNSArNjcs
MTUgQEAgcHVibGljOgogICAgIHZvaWQgY2xvc2UoKTsKIAogcHJpdmF0ZToKLSAgICBJREJDdXJz
b3JCYWNrZW5kKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiwgSW5k
ZXhlZERCOjpDdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBl
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmQqLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOworICAgIElE
QkN1cnNvckJhY2tlbmQoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2U+
LCBJbmRleGVkREI6OkN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUsIElE
QlRyYW5zYWN0aW9uQmFja2VuZCosIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CiAKICAgICBjbGFz
cyBDdXJzb3JJdGVyYXRpb25PcGVyYXRpb247CiAgICAgY2xhc3MgQ3Vyc29yQWR2YW5jZU9wZXJh
dGlvbjsKICAgICBjbGFzcyBDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbjsKIAotICAg
IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgbV90YXNrVHlwZTsKKyAgICBJ
REJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIG1fdGFza1R5cGU7CiAgICAgSW5kZXhlZERCOjpD
dXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsKLSAgICBjb25zdCBSZWZQdHI8SURCRGF0YWJhc2VCYWNr
ZW5kSW50ZXJmYWNlPiBtX2RhdGFiYXNlOworICAgIGNvbnN0IFJlZlB0cjxJREJEYXRhYmFzZUJh
Y2tlbmQ+IG1fZGF0YWJhc2U7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90
cmFuc2FjdGlvbjsKICAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCmluZGV4IGMz
YmYxNWUuLmM1M2MzNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZS5jcHAKQEAgLTUxLDE0ICs1MSwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLVBhc3NSZWZQdHI8SURCRGF0YWJhc2U+IElEQkRhdGFiYXNlOjpjcmVhdGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJ
bnRlcmZhY2U+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxs
YmFja3MpCitQYXNzUmVmUHRyPElEQkRhdGFiYXNlPiBJREJEYXRhYmFzZTo6Y3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5k
PiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzKQog
ewogICAgIFJlZlB0cjxJREJEYXRhYmFzZT4gaWRiRGF0YWJhc2UoYWRvcHRSZWYobmV3IElEQkRh
dGFiYXNlKGNvbnRleHQsIGRhdGFiYXNlLCBjYWxsYmFja3MpKSk7CiAgICAgaWRiRGF0YWJhc2Ut
PnN1c3BlbmRJZk5lZWRlZCgpOwogICAgIHJldHVybiBpZGJEYXRhYmFzZS5yZWxlYXNlKCk7CiB9
CiAKLUlEQkRhdGFiYXNlOjpJREJEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzKQorSURCRGF0YWJhc2U6OklE
QkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kPiBiYWNrZW5kLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tz
PiBjYWxsYmFja3MpCiAgICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCkKICAgICAsIG1fYmFj
a2VuZChiYWNrZW5kKQogICAgICwgbV9jbG9zZVBlbmRpbmcoZmFsc2UpCkBAIC0xODUsNyArMTg1
LDcgQEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVj
dFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY28KICAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQg
PSBtX21ldGFkYXRhLm1heE9iamVjdFN0b3JlSWQgKyAxOwogICAgIG1fYmFja2VuZC0+Y3JlYXRl
T2JqZWN0U3RvcmUobV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmlkKCksIG9iamVjdFN0b3Jl
SWQsIG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQpOwogCi0gICAgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSBtZXRhZGF0YShuYW1lLCBvYmplY3RTdG9yZUlkLCBrZXlQYXRoLCBhdXRvSW5jcmVt
ZW50LCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6Ok1pbmltdW1JbmRleElkKTsKKyAgICBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFkYXRhKG5hbWUsIG9iamVjdFN0b3JlSWQsIGtleVBh
dGgsIGF1dG9JbmNyZW1lbnQsIElEQkRhdGFiYXNlQmFja2VuZDo6TWluaW11bUluZGV4SWQpOwog
ICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9yZTo6
Y3JlYXRlKG1ldGFkYXRhLCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5nZXQoKSk7CiAgICAg
bV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0KG1ldGFkYXRhLmlkLCBtZXRhZGF0YSk7CiAgICAg
KyttX21ldGFkYXRhLm1heE9iamVjdFN0b3JlSWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaAppbmRleCBiZDkyNTVmLi5hZGY3NGQwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgKQEAgLTUxLDcg
KzUxLDcgQEAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAogY2xhc3MgSURCRGF0YWJhc2Ug
RklOQUwgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJEYXRhYmFzZT4sIHB1YmxpYyBTY3JpcHRXcmFw
cGFibGUsIHB1YmxpYyBFdmVudFRhcmdldFdpdGhJbmxpbmVEYXRhLCBwdWJsaWMgQWN0aXZlRE9N
T2JqZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJEYXRhYmFzZT4gY3Jl
YXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2Vu
ZEludGVyZmFjZT4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+KTsKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxJREJEYXRhYmFzZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VD
YWxsYmFja3M+KTsKICAgICB+SURCRGF0YWJhc2UoKTsKIAogICAgIHZvaWQgc2V0TWV0YWRhdGEo
Y29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEpIHsgbV9tZXRhZGF0YSA9IG1ldGFk
YXRhOyB9CkBAIC0xMDEsNyArMTAxLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZmluZE9i
amVjdFN0b3JlSWQobmFtZSkgIT0gSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW52YWxpZElkOwog
ICAgIH0KIAotICAgIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSogYmFja2VuZCgpIGNvbnN0
IHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorICAgIElEQkRhdGFiYXNlQmFja2VuZCogYmFj
a2VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQogCiAgICAgc3RhdGljIGlu
dDY0X3QgbmV4dFRyYW5zYWN0aW9uSWQoKTsKIApAQCAtMTA5LDcgKzEwOSw3IEBAIHB1YmxpYzoK
ICAgICB1c2luZyBSZWZDb3VudGVkPElEQkRhdGFiYXNlPjo6ZGVyZWY7CiAKIHByaXZhdGU6Ci0g
ICAgSURCRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VCYWNrZW5kSW50ZXJmYWNlPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4p
OworICAgIElEQkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQmFja2VuZD4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+KTsKIAog
ICAgIC8vIEFjdGl2ZURPTU9iamVjdAogICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgT1ZFUlJJREU7
CkBAIC0xMjEsNyArMTIxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNsb3NlQ29ubmVjdGlvbigp
OwogCiAgICAgSURCRGF0YWJhc2VNZXRhZGF0YSBtX21ldGFkYXRhOwotICAgIFJlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+IG1fYmFja2VuZDsKKyAgICBSZWZQdHI8SURCRGF0YWJh
c2VCYWNrZW5kPiBtX2JhY2tlbmQ7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBtX3ZlcnNp
b25DaGFuZ2VUcmFuc2FjdGlvbjsKICAgICB0eXBlZGVmIEhhc2hNYXA8aW50NjRfdCwgSURCVHJh
bnNhY3Rpb24qPiBUcmFuc2FjdGlvbk1hcDsKICAgICBUcmFuc2FjdGlvbk1hcCBtX3RyYW5zYWN0
aW9uczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0
NzA5ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsNjYyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZC5oIgorCisjaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJJREJCYWNraW5nU3RvcmVJbnRlcmZh
Y2UuaCIKKyNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kLmgiCisjaW5jbHVkZSAiSURCRGF0YWJh
c2VDYWxsYmFja3MuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1
ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCSW5kZXhXcml0
ZXIuaCIKKyNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgorI2luY2x1ZGUgIklEQlJlY29yZElkZW50
aWZpZXIuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmQuaCIKKyNpbmNsdWRlICJJ
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1
ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4gSURC
RGF0YWJhc2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3Rv
cmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UqIGZh
Y3RvcnksIGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllcikKK3sKKyAgICBSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kPiBiYWNrZW5kID0gYWRvcHRSZWYobmV3IElEQkRhdGFiYXNlQmFja2Vu
ZChuYW1lLCBiYWNraW5nU3RvcmUsIGZhY3RvcnksIHVuaXF1ZUlkZW50aWZpZXIpKTsKKyAgICBi
YWNrZW5kLT5vcGVuSW50ZXJuYWxBc3luYygpOworICAgIAorICAgIHJldHVybiBiYWNrZW5kLnJl
bGVhc2UoKTsKK30KKworSURCRGF0YWJhc2VCYWNrZW5kOjpJREJEYXRhYmFzZUJhY2tlbmQoY29u
c3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwg
SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UqIGZhY3RvcnksIGNvbnN0IFN0cmluZyYgdW5pcXVl
SWRlbnRpZmllcikKKyAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAsIG1f
bWV0YWRhdGEobmFtZSwgSW52YWxpZElkLCAwLCBJbnZhbGlkSWQpCisgICAgLCBtX2lkZW50aWZp
ZXIodW5pcXVlSWRlbnRpZmllcikKKyAgICAsIG1fZmFjdG9yeShmYWN0b3J5KQorICAgICwgbV90
cmFuc2FjdGlvbkNvb3JkaW5hdG9yKElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmNyZWF0ZSgp
KQorICAgICwgbV9jbG9zaW5nQ29ubmVjdGlvbihmYWxzZSkKK3sKKyAgICBBU1NFUlQoIW1fbWV0
YWRhdGEubmFtZS5pc051bGwoKSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjphZGRP
YmplY3RTdG9yZShjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSwgaW50
NjRfdCBuZXdNYXhPYmplY3RTdG9yZUlkKQoreworICAgIEFTU0VSVCghbV9tZXRhZGF0YS5vYmpl
Y3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmUuaWQpKTsKKyAgICBpZiAobmV3TWF4T2JqZWN0
U3RvcmVJZCAhPSBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKKyAgICAgICAg
QVNTRVJUKG1fbWV0YWRhdGEubWF4T2JqZWN0U3RvcmVJZCA8IG5ld01heE9iamVjdFN0b3JlSWQp
OworICAgICAgICBtX21ldGFkYXRhLm1heE9iamVjdFN0b3JlSWQgPSBuZXdNYXhPYmplY3RTdG9y
ZUlkOworICAgIH0KKyAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmUu
aWQsIG9iamVjdFN0b3JlKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OnJlbW92ZU9i
amVjdFN0b3JlKGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKK3sKKyAgICBBU1NFUlQobV9tZXRhZGF0
YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgIG1fbWV0YWRhdGEu
b2JqZWN0U3RvcmVzLnJlbW92ZShvYmplY3RTdG9yZUlkKTsKK30KKwordm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmQ6OmFkZEluZGV4KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhN
ZXRhZGF0YSYgaW5kZXgsIGludDY0X3QgbmV3TWF4SW5kZXhJZCkKK3sKKyAgICBBU1NFUlQobV9t
ZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgIElEQk9i
amVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmUgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5n
ZXQob2JqZWN0U3RvcmVJZCk7CisKKyAgICBBU1NFUlQoIW9iamVjdFN0b3JlLmluZGV4ZXMuY29u
dGFpbnMoaW5kZXguaWQpKTsKKyAgICBvYmplY3RTdG9yZS5pbmRleGVzLnNldChpbmRleC5pZCwg
aW5kZXgpOworICAgIGlmIChuZXdNYXhJbmRleElkICE9IElEQkluZGV4TWV0YWRhdGE6OkludmFs
aWRJZCkgeworICAgICAgICBBU1NFUlQob2JqZWN0U3RvcmUubWF4SW5kZXhJZCA8IG5ld01heElu
ZGV4SWQpOworICAgICAgICBvYmplY3RTdG9yZS5tYXhJbmRleElkID0gbmV3TWF4SW5kZXhJZDsK
KyAgICB9CisgICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3JlSWQsIG9i
amVjdFN0b3JlKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OnJlbW92ZUluZGV4KGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQoreworICAgIEFTU0VSVChtX21l
dGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAgSURCT2Jq
ZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZSA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdl
dChvYmplY3RTdG9yZUlkKTsKKworICAgIEFTU0VSVChvYmplY3RTdG9yZS5pbmRleGVzLmNvbnRh
aW5zKGluZGV4SWQpKTsKKyAgICBvYmplY3RTdG9yZS5pbmRleGVzLnJlbW92ZShpbmRleElkKTsK
KyAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmVJZCwgb2JqZWN0U3Rv
cmUpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6b3BlbkludGVybmFsQXN5bmMoKQor
eworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IHNlbGYgPSB0aGlzOworICAgIG1fYmFj
a2luZ1N0b3JlLT5nZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGEobV9tZXRhZGF0YS5u
YW1lLCBbc2VsZl0oY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEsIGJvb2wgc3Vj
Y2VzcykgeworICAgICAgICBzZWxmLT5kaWRPcGVuSW50ZXJuYWxBc3luYyhtZXRhZGF0YSwgc3Vj
Y2Vzcyk7CisgICAgfSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpkaWRPcGVuSW50
ZXJuYWxBc3luYyhjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSwgYm9vbCBzdWNj
ZXNzKQoreworICAgIGlmICghc3VjY2VzcykgeworICAgICAgICBwcm9jZXNzUGVuZGluZ09wZW5D
YWxscyhmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX21ldGFkYXRhID0g
bWV0YWRhdGE7CisKKyAgICBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7Cit9CisKK0lEQkRhdGFiYXNl
QmFja2VuZDo6fklEQkRhdGFiYXNlQmFja2VuZCgpCit7Cit9CisKK0lEQkJhY2tpbmdTdG9yZUlu
dGVyZmFjZSogSURCRGF0YWJhc2VCYWNrZW5kOjpiYWNraW5nU3RvcmUoKSBjb25zdAoreworICAg
IHJldHVybiBtX2JhY2tpbmdTdG9yZS5nZXQoKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tl
bmQ6OmNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgs
IGJvb2wgYXV0b0luY3JlbWVudCkKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNl
QmFja2VuZDo6Y3JlYXRlT2JqZWN0U3RvcmUiKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQq
IHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIGlm
ICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24t
Pm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZSk7CisKKyAgICBB
U1NFUlQoIW1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsK
KyAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlTWV0YWRhdGEobmFtZSwgb2Jq
ZWN0U3RvcmVJZCwga2V5UGF0aCwgYXV0b0luY3JlbWVudCwgSURCRGF0YWJhc2VCYWNrZW5kOjpN
aW5pbXVtSW5kZXhJZCk7CisKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVDcmVhdGVPYmplY3RT
dG9yZU9wZXJhdGlvbihvYmplY3RTdG9yZU1ldGFkYXRhKTsKKyAgICBhZGRPYmplY3RTdG9yZShv
YmplY3RTdG9yZU1ldGFkYXRhLCBvYmplY3RTdG9yZUlkKTsKK30KKwordm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmQ6OmRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNr
ZW5kOjpkZWxldGVPYmplY3RTdG9yZSIpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJh
bnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAgaWYgKCF0
cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9k
ZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKTsKKworICAgIEFTU0VS
VChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAg
Y29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1fbWV0
YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKKworICAgIHRyYW5zYWN0aW9u
LT5zY2hlZHVsZURlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKG9iamVjdFN0b3JlTWV0YWRhdGEp
OworICAgIHJlbW92ZU9iamVjdFN0b3JlKG9iamVjdFN0b3JlSWQpOworfQorCit2b2lkIElEQkRh
dGFiYXNlQmFja2VuZDo6Y3JlYXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KQorewor
ICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kOjpjcmVhdGVJbmRleCIpOwor
ICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5n
ZXQodHJhbnNhY3Rpb25JZCk7CisgICAgaWYgKCF0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJu
OworICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rp
b25WZXJzaW9uQ2hhbmdlKTsKKworICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5j
b250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0
YSBvYmplY3RTdG9yZSA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlk
KTsKKworICAgIEFTU0VSVCghb2JqZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRleElkKSk7
CisgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBpbmRleE1ldGFkYXRhKG5hbWUsIGluZGV4SWQs
IGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSk7CisKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1
bGVDcmVhdGVJbmRleE9wZXJhdGlvbihvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKTsKKwor
ICAgIGFkZEluZGV4KG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEsIGluZGV4SWQpOworfQor
Cit2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6ZGVsZXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlv
bklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkKK3sKKyAgICBMT0co
U3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZDo6ZGVsZXRlSW5kZXgiKTsKKyAgICBJREJU
cmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5z
YWN0aW9uSWQpOworICAgIGlmICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVybjsKKyAgICBB
U1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lv
bkNoYW5nZSk7CisKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMo
b2JqZWN0U3RvcmVJZCkpOworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0
U3RvcmUgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7CisKKyAg
ICBBU1NFUlQob2JqZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRleElkKSk7CisgICAgY29u
c3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSA9IG9iamVjdFN0b3JlLmluZGV4ZXMu
Z2V0KGluZGV4SWQpOworCisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlRGVsZXRlSW5kZXhPcGVy
YXRpb24ob2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSk7CisKKyAgICByZW1vdmVJbmRleChv
YmplY3RTdG9yZUlkLCBpbmRleElkKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmNv
bW1pdChpbnQ2NF90IHRyYW5zYWN0aW9uSWQpCit7CisgICAgLy8gVGhlIGZyb250ZW5kIHN1Z2dl
c3RzIHRoYXQgd2UgY29tbWl0LCBidXQgd2UgbWF5IGhhdmUgcHJldmlvdXNseSBpbml0aWF0ZWQg
YW4gYWJvcnQsIGFuZCBzbyBoYXZlIGRpc3Bvc2VkIG9mIHRoZSB0cmFuc2FjdGlvbi4gb25BYm9y
dCBoYXMgYWxyZWFkeSBiZWVuIGRpc3BhdGNoZWQgdG8gdGhlIGZyb250ZW5kLCBzbyBpdCB3aWxs
IGZpbmQgb3V0IGFib3V0IHRoYXQgYXN5bmNocm9ub3VzbHkuCisgICAgaWYgKG1fdHJhbnNhY3Rp
b25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKQorICAgICAgICBtX3RyYW5zYWN0aW9ucy5nZXQo
dHJhbnNhY3Rpb25JZCktPmNvbW1pdCgpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6
YWJvcnQoaW50NjRfdCB0cmFuc2FjdGlvbklkKQoreworICAgIC8vIElmIHRoZSB0cmFuc2FjdGlv
biBpcyB1bmtub3duLCB0aGVuIGl0IGhhcyBhbHJlYWR5IGJlZW4gYWJvcnRlZCBieSB0aGUgYmFj
a2VuZCBiZWZvcmUgdGhpcyBjYWxsIHNvIGl0IGlzIHNhZmUgdG8gaWdub3JlIGl0LgorICAgIGlm
IChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSkKKyAgICAgICAgbV90cmFu
c2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpLT5hYm9ydCgpOworfQorCit2b2lkIElEQkRhdGFi
YXNlQmFja2VuZDo6YWJvcnQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRh
dGFiYXNlRXJyb3I+IGVycm9yKQoreworICAgIC8vIElmIHRoZSB0cmFuc2FjdGlvbiBpcyB1bmtu
b3duLCB0aGVuIGl0IGhhcyBhbHJlYWR5IGJlZW4gYWJvcnRlZCBieSB0aGUgYmFja2VuZCBiZWZv
cmUgdGhpcyBjYWxsIHNvIGl0IGlzIHNhZmUgdG8gaWdub3JlIGl0LgorICAgIGlmIChtX3RyYW5z
YWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSkKKyAgICAgICAgbV90cmFuc2FjdGlvbnMu
Z2V0KHRyYW5zYWN0aW9uSWQpLT5hYm9ydChlcnJvcik7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kOjpnZXQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIGJvb2wg
a2V5T25seSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBMT0co
U3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZDo6Z2V0Iik7CisgICAgSURCVHJhbnNhY3Rp
b25CYWNrZW5kKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklk
KTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICB0cmFuc2Fj
dGlvbi0+c2NoZWR1bGVHZXRPcGVyYXRpb24obV9tZXRhZGF0YSwgb2JqZWN0U3RvcmVJZCwgaW5k
ZXhJZCwga2V5UmFuZ2UsIGtleU9ubHkgPyBJbmRleGVkREI6OkN1cnNvcktleU9ubHkgOiBJbmRl
eGVkREI6OkN1cnNvcktleUFuZFZhbHVlLCBjYWxsYmFja3MpOworfQorCit2b2lkIElEQkRhdGFi
YXNlQmFja2VuZDo6cHV0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBr
ZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywg
Y29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4m
IGluZGV4S2V5cykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZDo6
cHV0Iik7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNh
Y3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAg
ICByZXR1cm47CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpU
cmFuc2FjdGlvblJlYWRPbmx5KTsKKworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEg
b2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RT
dG9yZUlkKTsKKworICAgIEFTU0VSVChvYmplY3RTdG9yZU1ldGFkYXRhLmF1dG9JbmNyZW1lbnQg
fHwga2V5LmdldCgpKTsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVB1dE9wZXJhdGlvbihv
YmplY3RTdG9yZU1ldGFkYXRhLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxsYmFja3MsIGluZGV4
SWRzLCBpbmRleEtleXMpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6c2V0SW5kZXhL
ZXlzKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVm
UHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElk
cywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKK3sKKyAgICBMT0coU3RvcmFn
ZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZDo6c2V0SW5kZXhLZXlzIik7CisgICAgQVNTRVJUKHBy
cFByaW1hcnlLZXkpOworCisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiA9
IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9u
KQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5k
ZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpOworCisgICAgUmVmUHRyPElEQktleT4g
cHJpbWFyeUtleSA9IHBycFByaW1hcnlLZXk7CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZUlu
dGVyZmFjZT4gc3RvcmUgPSBtX2JhY2tpbmdTdG9yZTsKKyAgICAvLyBGSVhNRTogVGhpcyBtZXRo
b2QgY291bGQgYmUgYXN5bmNocm9ub3VzLCBidXQgd2UgbmVlZCB0byBldmFsdWF0ZSBpZiBpdCdz
IHdvcnRoIHRoZSBleHRyYSBjb21wbGV4aXR5LgorICAgIFJlZlB0cjxJREJSZWNvcmRJZGVudGlm
aWVyPiByZWNvcmRJZGVudGlmaWVyOworICAgIGJvb2wgb2sgPSBzdG9yZS0+a2V5RXhpc3RzSW5P
YmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9tZXRh
ZGF0YS5pZCwgb2JqZWN0U3RvcmVJZCwgKnByaW1hcnlLZXksIHJlY29yZElkZW50aWZpZXIpOwor
ICAgIGlmICghb2spIHsKKyAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwg
ZXJyb3Igc2V0dGluZyBpbmRleCBrZXlzLiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAoIXJlY29yZElkZW50aWZpZXIpIHsKKyAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJy
b3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpVbmtub3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBzZXR0aW5nIGlu
ZGV4IGtleXMgZm9yIG9iamVjdCBzdG9yZS4iKSk7CisgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9y
dChlcnJvci5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVjdG9y
PFJlZlB0cjxJREJJbmRleFdyaXRlcj4+IGluZGV4V3JpdGVyczsKKyAgICBTdHJpbmcgZXJyb3JN
ZXNzYWdlOworICAgIGJvb2wgb2JleXNDb25zdHJhaW50cyA9IGZhbHNlOworICAgIEFTU0VSVCht
X21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAgY29u
c3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1fbWV0YWRh
dGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKKyAgICBib29sIGJhY2tpbmdTdG9y
ZVN1Y2Nlc3MgPSBzdG9yZS0+bWFrZUluZGV4V3JpdGVycygqdHJhbnNhY3Rpb24sIGlkKCksIG9i
amVjdFN0b3JlTWV0YWRhdGEsICpwcmltYXJ5S2V5LCBmYWxzZSwgaW5kZXhJZHMsIGluZGV4S2V5
cywgaW5kZXhXcml0ZXJzLCAmZXJyb3JNZXNzYWdlLCBvYmV5c0NvbnN0cmFpbnRzKTsKKyAgICBp
ZiAoIWJhY2tpbmdTdG9yZVN1Y2Nlc3MpIHsKKyAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElE
QkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9y
LCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgdXBkYXRpbmcgaW5kZXgga2V5
cy4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFvYmV5c0NvbnN0cmFpbnRz
KSB7CisgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvciwgZXJyb3JNZXNzYWdlKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4
V3JpdGVycy5zaXplKCk7ICsraSkgeworICAgICAgICBJREJJbmRleFdyaXRlciogaW5kZXhXcml0
ZXIgPSBpbmRleFdyaXRlcnNbaV0uZ2V0KCk7CisgICAgICAgIGluZGV4V3JpdGVyLT53cml0ZUlu
ZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLmdldCgpLCAqc3RvcmUuZ2V0KCksIHRyYW5zYWN0aW9u
LT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBpZCgpLCBvYmplY3RTdG9yZUlkKTsKKyAgICB9
Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpzZXRJbmRleGVzUmVhZHkoaW50NjRfdCB0
cmFuc2FjdGlvbklkLCBpbnQ2NF90LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzKQor
eworICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kOjpzZXRJbmRleGVzUmVh
ZHkiKTsKKworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24gPSBtX3RyYW5z
YWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAgaWYgKCF0cmFuc2FjdGlvbikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlU2V0SW5kZXhlc1JlYWR5T3Bl
cmF0aW9uKGluZGV4SWRzLnNpemUoKSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpv
cGVuQ3Vyc29yKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVk
REI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wga2V5T25seSwgVGFza1R5cGUgdGFz
a1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgTE9HKFN0
b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmQ6Om9wZW5DdXJzb3IiKTsKKyAgICBJREJUcmFu
c2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0
aW9uSWQpOworICAgIGlmICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIHRy
YW5zYWN0aW9uLT5zY2hlZHVsZU9wZW5DdXJzb3JPcGVyYXRpb24ob2JqZWN0U3RvcmVJZCwgaW5k
ZXhJZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwga2V5T25seSA/IEluZGV4ZWREQjo6Q3Vyc29yS2V5
T25seSA6IEluZGV4ZWREQjo6Q3Vyc29yS2V5QW5kVmFsdWUsIHRhc2tUeXBlLCBjYWxsYmFja3Mp
OworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6Y291bnQoaW50NjRfdCB0cmFuc2FjdGlv
bklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Mp
Cit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmQ6OmNvdW50Iik7Cisg
ICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdl
dCh0cmFuc2FjdGlvbklkKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47
CisKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3Rv
cmVJZCkpOworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZUNvdW50T3BlcmF0aW9uKG9iamVjdFN0
b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBjYWxsYmFja3MpOworfQorCisKK3ZvaWQgSURCRGF0
YWJhc2VCYWNrZW5kOjpkZWxldGVSYW5nZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJJREJE
YXRhYmFzZUJhY2tlbmQ6OmRlbGV0ZVJhbmdlIik7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5k
KiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBp
ZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKHRyYW5zYWN0aW9u
LT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5KTsKKworICAgIHRyYW5z
YWN0aW9uLT5zY2hlZHVsZURlbGV0ZVJhbmdlT3BlcmF0aW9uKG9iamVjdFN0b3JlSWQsIGtleVJh
bmdlLCBjYWxsYmFja3MpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6Y2xlYXIoaW50
NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFz
ZUJhY2tlbmQ6OmNsZWFyIik7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlv
biA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBpZiAoIXRyYW5zYWN0
aW9uKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0g
SW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5KTsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hl
ZHVsZUNsZWFyT3BlcmF0aW9uKG9iamVjdFN0b3JlSWQsIGNhbGxiYWNrcyk7Cit9CisKK3ZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kOjp0cmFuc2FjdGlvblN0YXJ0ZWQoSURCVHJhbnNhY3Rpb25CYWNr
ZW5kKiB0cmFuc2FjdGlvbikKK3sKKyAgICBpZiAodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRl
eGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZSkgeworICAgICAgICBBU1NFUlQoIW1fcnVu
bmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7CisgICAgICAgIG1fcnVubmluZ1ZlcnNpb25D
aGFuZ2VUcmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uOworICAgIH0KK30KKwordm9pZCBJREJEYXRh
YmFzZUJhY2tlbmQ6OnRyYW5zYWN0aW9uRmluaXNoZWQoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiBy
YXdUcmFuc2FjdGlvbikKK3sKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiB0cmFu
c2FjdGlvbiA9IHJhd1RyYW5zYWN0aW9uOworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250
YWlucyh0cmFuc2FjdGlvbi0+aWQoKSkpOworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5nZXQo
dHJhbnNhY3Rpb24tPmlkKCkpID09IHRyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBtX3RyYW5zYWN0
aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24tPmlkKCkpOworICAgIGlmICh0cmFuc2FjdGlvbi0+bW9k
ZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKSB7CisgICAgICAgIEFT
U0VSVCh0cmFuc2FjdGlvbi5nZXQoKSA9PSBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rp
b24uZ2V0KCkpOworICAgICAgICBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24uY2xl
YXIoKTsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjp0cmFuc2FjdGlvbkZp
bmlzaGVkQW5kQWJvcnRGaXJlZChJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHJhd1RyYW5zYWN0aW9u
KQoreworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IHRyYW5zYWN0aW9uID0gcmF3
VHJhbnNhY3Rpb247CisgICAgaWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpU
cmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpIHsKKyAgICAgICAgLy8gSWYgdGhpcyB3YXMgYW4gb3Bl
bi13aXRoLXZlcnNpb24gY2FsbCwgdGhlcmUgd2lsbCBiZSBhICJzZWNvbmQKKyAgICAgICAgLy8g
aGFsZiIgb3BlbiBjYWxsIHdhaXRpbmcgZm9yIHVzIGluIHByb2Nlc3NQZW5kaW5nQ2FsbHMuCisg
ICAgICAgIC8vIEZJWE1FOiBXaGVuIHdlIG5vIGxvbmdlciBzdXBwb3J0IHNldFZlcnNpb24sIGFz
c2VydCBzdWNoIGEgdGhpbmcuCisgICAgICAgIGlmIChtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbikg
eworICAgICAgICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4tPmNhbGxiYWNrcygpLT5vbkVy
cm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJvcnRF
cnJvciwgIlZlcnNpb24gY2hhbmdlIHRyYW5zYWN0aW9uIHdhcyBhYm9ydGVkIGluIHVwZ3JhZGVu
ZWVkZWQgZXZlbnQgaGFuZGxlci4iKSk7CisgICAgICAgICAgICBtX3BlbmRpbmdTZWNvbmRIYWxm
T3Blbi5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICAgICAgcHJvY2Vzc1BlbmRpbmdDYWxscygp
OworICAgIH0KK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OnRyYW5zYWN0aW9uRmluaXNo
ZWRBbmRDb21wbGV0ZUZpcmVkKElEQlRyYW5zYWN0aW9uQmFja2VuZCogcmF3VHJhbnNhY3Rpb24p
Cit7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gdHJhbnNhY3Rpb24gPSByYXdU
cmFuc2FjdGlvbjsKKyAgICBpZiAodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRy
YW5zYWN0aW9uVmVyc2lvbkNoYW5nZSkKKyAgICAgICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOwor
fQorCitzaXplX3QgSURCRGF0YWJhc2VCYWNrZW5kOjpjb25uZWN0aW9uQ291bnQoKQoreworICAg
IC8vIFRoaXMgZG9lcyBub3QgaW5jbHVkZSBwZW5kaW5nIG9wZW4gY2FsbHMsIGFzIHRob3NlIHNo
b3VsZCBub3QgYmxvY2sgdmVyc2lvbiBjaGFuZ2VzIGFuZCBkZWxldGVzLgorICAgIHJldHVybiBt
X2RhdGFiYXNlQ2FsbGJhY2tzU2V0LnNpemUoKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tl
bmQ6OnByb2Nlc3NQZW5kaW5nQ2FsbHMoKQoreworICAgIGlmIChtX3BlbmRpbmdTZWNvbmRIYWxm
T3BlbikgeworICAgICAgICBBU1NFUlQobV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4tPnZlcnNpb24o
KSA9PSBtX21ldGFkYXRhLnZlcnNpb24pOworICAgICAgICBBU1NFUlQobV9tZXRhZGF0YS5pZCAh
PSBJbnZhbGlkSWQpOworICAgICAgICBtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbi0+Y2FsbGJhY2tz
KCktPm9uU3VjY2Vzcyh0aGlzLCB0aGlzLT5tZXRhZGF0YSgpKTsKKyAgICAgICAgbV9wZW5kaW5n
U2Vjb25kSGFsZk9wZW4ucmVsZWFzZSgpOworICAgICAgICAvLyBGYWxsIHRocm91Z2ggd2hlbiBj
b21wbGV0ZSwgYXMgcGVuZGluZyBkZWxldGVzIG1heSBiZSAocGFydGlhbGx5KSB1bmJsb2NrZWQu
CisgICAgfQorCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgY2hlY2sgaXMgb25seSBhbiBvcHRpbWl6
YXRpb24gdG8gcmVkdWNlIHF1ZXVlLWNodXJuIGFuZAorICAgIC8vIG5vdCBuZWNlc3NhcnkgZm9y
IGNvcnJlY3RuZXNzOyBkZWxldGVEYXRhYmFzZSBhbmQgb3BlbkNvbm5lY3Rpb24gd2lsbAorICAg
IC8vIHJlcXVldWUgdGhlaXIgY2FsbHMgaWYgdGhpcyBjb25kaXRpb24gaXMgdHJ1ZS4KKyAgICBp
ZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSAmJiBpc0RlbGV0ZURhdGFi
YXNlQmxvY2tlZCgpKQorICAgICAgICByZXR1cm47CisgICAgd2hpbGUgKCFtX3BlbmRpbmdEZWxl
dGVDYWxscy5pc0VtcHR5KCkpIHsKKyAgICAgICAgT3duUHRyPElEQlBlbmRpbmdEZWxldGVDYWxs
PiBwZW5kaW5nRGVsZXRlQ2FsbCA9IG1fcGVuZGluZ0RlbGV0ZUNhbGxzLnRha2VGaXJzdCgpOwor
ICAgICAgICBtX2RlbGV0ZUNhbGxiYWNrc1dhaXRpbmdDb21wbGV0aW9uLmFkZChwZW5kaW5nRGVs
ZXRlQ2FsbC0+Y2FsbGJhY2tzKCkpOworICAgICAgICBkZWxldGVEYXRhYmFzZUFzeW5jKHBlbmRp
bmdEZWxldGVDYWxsLT5jYWxsYmFja3MoKSk7CisgICAgfQorCisgICAgLy8gZGVsZXRlRGF0YWJh
c2VBc3luYyBzaG91bGQgbmV2ZXIgcmUtcXVldWUgY2FsbHMuCisgICAgQVNTRVJUKG1fcGVuZGlu
Z0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSk7CisKKyAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGRhdGFi
YXNlIGRlbGV0aW9ucyB3YWl0aW5nIGZvciBjb21wbGV0aW9uLCB3ZSdyZSBkb25lIGZvciBub3cu
CisgICAgLy8gRnVydGhlciBjYWxsYmFja3Mgd2lsbCBiZSBoYW5kbGVkIGluIGEgZnV0dXJlIGNh
bGwgdG8gcHJvY2Vzc1BlbmRpbmdDYWxscygpLgorICAgIGlmIChtX2RlbGV0ZUNhbGxiYWNrc1dh
aXRpbmdDb21wbGV0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1f
cnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAg
cHJvY2Vzc1BlbmRpbmdPcGVuQ2FsbHModHJ1ZSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kOjpwcm9jZXNzUGVuZGluZ09wZW5DYWxscyhib29sIHN1Y2Nlc3MpCit7CisgICAgLy8gT3Bl
biBjYWxscyBjYW4gYmUgcmVxdWV1ZWQgaWYgYW4gb3BlbiBjYWxsIHN0YXJ0ZWQgYSB2ZXJzaW9u
IGNoYW5nZSB0cmFuc2FjdGlvbiBvciBkZWxldGVzIHRoZSBkYXRhYmFzZS4KKyAgICBEZXF1ZTxP
d25QdHI8SURCUGVuZGluZ09wZW5DYWxsPj4gcGVuZGluZ09wZW5DYWxsczsKKyAgICBtX3BlbmRp
bmdPcGVuQ2FsbHMuc3dhcChwZW5kaW5nT3BlbkNhbGxzKTsKKworICAgIHdoaWxlICghcGVuZGlu
Z09wZW5DYWxscy5pc0VtcHR5KCkpIHsKKyAgICAgICAgT3duUHRyPElEQlBlbmRpbmdPcGVuQ2Fs
bD4gcGVuZGluZ09wZW5DYWxsID0gcGVuZGluZ09wZW5DYWxscy50YWtlRmlyc3QoKTsKKyAgICAg
ICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIGlmIChtX21ldGFkYXRhLmlkID09IEludmFs
aWRJZCkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgZGF0YWJhc2Ugd2FzIGRlbGV0ZWQgdGhl
biBxdWlja2x5IHJlLW9wZW5lZC4KKyAgICAgICAgICAgICAgICAvLyBvcGVuSW50ZXJuYWxBc3lu
YygpIHdpbGwgcmVjcmVhdGUgaXQgaW4gdGhlIGJhY2tpbmcgc3RvcmUgYW5kIHRoZW4gcmVzdW1l
IHByb2Nlc3NpbmcgcGVuZGluZyBjYWxsYmFja3MuCisgICAgICAgICAgICAgICAgcGVuZGluZ09w
ZW5DYWxscy5wcmVwZW5kKHBlbmRpbmdPcGVuQ2FsbC5yZWxlYXNlKCkpOworICAgICAgICAgICAg
ICAgIHBlbmRpbmdPcGVuQ2FsbHMuc3dhcChtX3BlbmRpbmdPcGVuQ2FsbHMpOworCisgICAgICAg
ICAgICAgICAgb3BlbkludGVybmFsQXN5bmMoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBvcGVuQ29ubmVjdGlvbkludGVybmFsKHBlbmRpbmdP
cGVuQ2FsbC0+Y2FsbGJhY2tzKCksIHBlbmRpbmdPcGVuQ2FsbC0+ZGF0YWJhc2VDYWxsYmFja3Mo
KSwgcGVuZGluZ09wZW5DYWxsLT50cmFuc2FjdGlvbklkKCksIHBlbmRpbmdPcGVuQ2FsbC0+dmVy
c2lvbigpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlOwor
ICAgICAgICAgICAgaWYgKHBlbmRpbmdPcGVuQ2FsbC0+dmVyc2lvbigpID09IElEQkRhdGFiYXNl
TWV0YWRhdGE6Ok5vSW50VmVyc2lvbikKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gIkludGVy
bmFsIGVycm9yIG9wZW5pbmcgZGF0YWJhc2Ugd2l0aCBubyB2ZXJzaW9uIHNwZWNpZmllZC4iOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1h
dCgiSW50ZXJuYWwgZXJyb3Igb3BlbmluZyBkYXRhYmFzZSB3aXRoIHZlcnNpb24gJWxsdSIsIHN0
YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4ocGVuZGluZ09wZW5DYWxsLT52ZXJzaW9uKCkp
KTsKKyAgICAgICAgICAgIHBlbmRpbmdPcGVuQ2FsbC0+Y2FsbGJhY2tzKCktPm9uRXJyb3IoSURC
RGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3Is
IG1lc3NhZ2UpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tl
bmQ6OmNyZWF0ZVRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9i
amVjdFN0b3JlSWRzLCB1bnNpZ25lZCBzaG9ydCBtb2RlKQoreworICAgIFJlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmQ+IHRyYW5zYWN0aW9uID0gbV9mYWN0b3J5LT5tYXliZUNyZWF0ZVRyYW5z
YWN0aW9uQmFja2VuZCh0aGlzLCB0cmFuc2FjdGlvbklkLCBjYWxsYmFja3MsIG9iamVjdFN0b3Jl
SWRzLCBzdGF0aWNfY2FzdDxJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZT4obW9kZSkpOworCisg
ICAgaWYgKCF0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKCFtX3Ry
YW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSk7CisgICAgbV90cmFuc2FjdGlvbnMu
YWRkKHRyYW5zYWN0aW9uSWQsIHRyYW5zYWN0aW9uLmdldCgpKTsKK30KKwordm9pZCBJREJEYXRh
YmFzZUJhY2tlbmQ6Om9wZW5Db25uZWN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBD
YWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IHBycERhdGFiYXNlQ2Fs
bGJhY2tzLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIHVpbnQ2NF90IHZlcnNpb24pCit7CisgICAg
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIFJlZlB0
cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MgPSBwcnBEYXRhYmFzZUNh
bGxiYWNrczsKKworICAgIG1fcGVuZGluZ09wZW5DYWxscy5hcHBlbmQoSURCUGVuZGluZ09wZW5D
YWxsOjpjcmVhdGUoKmNhbGxiYWNrcywgKmRhdGFiYXNlQ2FsbGJhY2tzLCB0cmFuc2FjdGlvbklk
LCB2ZXJzaW9uKSk7CisKKyAgICBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7Cit9CisKKwordm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmQ6Om9wZW5Db25uZWN0aW9uSW50ZXJuYWwoUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IHBycENhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4g
cHJwRGF0YWJhc2VDYWxsYmFja3MsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgdWludDY0X3QgdmVy
c2lvbikKK3sKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUuZ2V0KCkpOworICAgIEFTU0VSVCht
X3BlbmRpbmdEZWxldGVDYWxscy5pc0VtcHR5KCkpOworICAgIEFTU0VSVCghbV9ydW5uaW5nVmVy
c2lvbkNoYW5nZVRyYW5zYWN0aW9uKTsKKworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRh
dGFiYXNlQ2FsbGJhY2tzID0gcHJwRGF0YWJhc2VDYWxsYmFja3M7CisKKyAgICAvLyBXZSBpbmZl
ciB0aGF0IHRoZSBkYXRhYmFzZSBkaWRuJ3QgZXhpc3QgZnJvbSBpdHMgbGFjayBvZiBlaXRoZXIg
dHlwZSBvZiB2ZXJzaW9uLgorICAgIGJvb2wgaXNOZXdEYXRhYmFzZSA9IG1fbWV0YWRhdGEudmVy
c2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb247CisKKyAgICBpZiAodmVy
c2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpEZWZhdWx0SW50VmVyc2lvbikgeworICAgICAg
ICAvLyBGSVhNRTogdGhpcyBjb21tZW50cyB3YXMgcmVsYXRlZCB0byBDaHJvbWl1bSBjb2RlLiBJ
dCBtYXkgYmUgaW5jb3JyZWN0CisgICAgICAgIC8vIEZvciB1bml0IHRlc3RzIG9ubHkgLSBza2lw
IHVwZ3JhZGUgc3RlcHMuIENhbGxpbmcgZnJvbSBzY3JpcHQgd2l0aCBEZWZhdWx0SW50VmVyc2lv
biB0aHJvd3MgZXhjZXB0aW9uLgorICAgICAgICBBU1NFUlQoaXNOZXdEYXRhYmFzZSk7CisgICAg
ICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKGRhdGFiYXNlQ2FsbGJhY2tzKTsKKyAgICAg
ICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3ModGhpcywgdGhpcy0+bWV0YWRhdGEoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodmVyc2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRh
OjpOb0ludFZlcnNpb24pIHsKKyAgICAgICAgaWYgKCFpc05ld0RhdGFiYXNlKSB7CisgICAgICAg
ICAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmFkZChSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFj
a3M+KGRhdGFiYXNlQ2FsbGJhY2tzKSk7CisgICAgICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2Vz
cyh0aGlzLCB0aGlzLT5tZXRhZGF0YSgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAvLyBTcGVjIHNheXM6IElmIG5vIHZlcnNpb24gaXMgc3BlY2lmaWVkIGFuZCBu
byBkYXRhYmFzZSBleGlzdHMsIHNldCBkYXRhYmFzZSB2ZXJzaW9uIHRvIDEuCisgICAgICAgIHZl
cnNpb24gPSAxOworICAgIH0KKworICAgIGlmICh2ZXJzaW9uID4gbV9tZXRhZGF0YS52ZXJzaW9u
KSB7CisgICAgICAgIHJ1bkludFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihjYWxsYmFja3MsIGRh
dGFiYXNlQ2FsbGJhY2tzLCB0cmFuc2FjdGlvbklkLCB2ZXJzaW9uKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmICh2ZXJzaW9uIDwgbV9tZXRhZGF0YS52ZXJzaW9uKSB7CisgICAg
ICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OlZlcnNpb25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIlRoZSByZXF1ZXN0ZWQg
dmVyc2lvbiAoJWxsdSkgaXMgbGVzcyB0aGFuIHRoZSBleGlzdGluZyB2ZXJzaW9uICglbGx1KS4i
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHZlcnNpb24pLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBsb25nIGxvbmc+KG1fbWV0YWRhdGEudmVyc2lvbikpKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBBU1NFUlQodmVyc2lvbiA9PSBtX21ldGFkYXRhLnZlcnNpb24pOwor
ICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKGRhdGFiYXNlQ2FsbGJhY2tzKTsKKyAgICBj
YWxsYmFja3MtPm9uU3VjY2Vzcyh0aGlzLCB0aGlzLT5tZXRhZGF0YSgpKTsKK30KKwordm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmQ6OnJ1bkludFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2Fs
bGJhY2tzPiBwcnBEYXRhYmFzZUNhbGxiYWNrcywgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2
NF90IHJlcXVlc3RlZFZlcnNpb24pCit7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzID0gcHJwQ2FsbGJhY2tzOworICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0
YWJhc2VDYWxsYmFja3MgPSBwcnBEYXRhYmFzZUNhbGxiYWNrczsKKyAgICBBU1NFUlQoY2FsbGJh
Y2tzKTsKKyAgICBmb3IgKERhdGFiYXNlQ2FsbGJhY2tzU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYmVnaW4oKTsgaXQgIT0gbV9kYXRhYmFzZUNhbGxiYWNr
c1NldC5lbmQoKTsgKytpdCkgeworICAgICAgICAvLyBGcm9udCBlbmQgZW5zdXJlcyB0aGUgZXZl
bnQgaXMgbm90IGZpcmVkIGF0IGNvbm5lY3Rpb25zIHRoYXQgaGF2ZSBjbG9zZVBlbmRpbmcgc2V0
LgorICAgICAgICBpZiAoKml0ICE9IGRhdGFiYXNlQ2FsbGJhY2tzKQorICAgICAgICAgICAgKCpp
dCktPm9uVmVyc2lvbkNoYW5nZShtX21ldGFkYXRhLnZlcnNpb24sIHJlcXVlc3RlZFZlcnNpb24s
IEluZGV4ZWREQjo6TnVsbFZlcnNpb24pOworICAgIH0KKyAgICAvLyBUaGUgc3BlYyBkaWN0YXRl
cyB3ZSB3YWl0IHVudGlsIGFsbCB0aGUgdmVyc2lvbiBjaGFuZ2UgZXZlbnRzIGFyZQorICAgIC8v
IGRlbGl2ZXJlZCBhbmQgdGhlbiBjaGVjayBtX2RhdGFiYXNlQ2FsbGJhY2tzLmVtcHR5KCkgYmVm
b3JlIHByb2NlZWRpbmcKKyAgICAvLyBvciBmaXJpbmcgYSBibG9ja2VkIGV2ZW50LCBidXQgaW5z
dGVhZCB3ZSBzaG91bGQgYmUgY29uc2lzdGVudCB3aXRoIGhvdworICAgIC8vIHRoZSBvbGQgc2V0
VmVyc2lvbiAoaW5jb3JyZWN0bHkpIGRpZCBpdC4KKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBj
YWxsIHRvIG9uQmxvY2tlZCBhbmQgaW5zdGVhZCB3YWl0IHVudGlsIHRoZSBmcm9udGVuZAorICAg
IC8vIHRlbGxzIHVzIHRoYXQgYWxsIHRoZSBibG9ja2VkIGV2ZW50cyBoYXZlIGJlZW4gZGVsaXZl
cmVkLiBTZWUKKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzExMzAKKyAgICBpZiAoY29ubmVjdGlvbkNvdW50KCkpCisgICAgICAgIGNhbGxiYWNrcy0+b25C
bG9ja2VkKG1fbWV0YWRhdGEudmVyc2lvbik7CisgICAgLy8gRklYTUU6IEFkZCB0ZXN0IGZvciBt
X3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24uCisgICAgaWYgKG1fcnVubmluZ1ZlcnNp
b25DaGFuZ2VUcmFuc2FjdGlvbiB8fCBjb25uZWN0aW9uQ291bnQoKSkgeworICAgICAgICBtX3Bl
bmRpbmdPcGVuQ2FsbHMuYXBwZW5kKElEQlBlbmRpbmdPcGVuQ2FsbDo6Y3JlYXRlKCpjYWxsYmFj
a3MsICpkYXRhYmFzZUNhbGxiYWNrcywgdHJhbnNhY3Rpb25JZCwgcmVxdWVzdGVkVmVyc2lvbikp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVjdG9yPGludDY0X3Q+IG9iamVjdFN0
b3JlSWRzOworICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWQsIGRhdGFiYXNlQ2Fs
bGJhY2tzLCBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFu
Z2UpOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IHRyYW5zYWN0aW9uID0gbV90
cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworCisgICAgdHJhbnNhY3Rpb24tPnNjaGVk
dWxlVmVyc2lvbkNoYW5nZU9wZXJhdGlvbih0cmFuc2FjdGlvbklkLCByZXF1ZXN0ZWRWZXJzaW9u
LCBjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzLCBtX21ldGFkYXRhKTsKKworICAgIEFTU0VS
VCghbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4pOworICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQu
YWRkKGRhdGFiYXNlQ2FsbGJhY2tzKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmRl
bGV0ZURhdGFiYXNlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MpCit7Cisg
ICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIGlm
IChpc0RlbGV0ZURhdGFiYXNlQmxvY2tlZCgpKSB7CisgICAgICAgIGZvciAoRGF0YWJhc2VDYWxs
YmFja3NTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5iZWdp
bigpOyBpdCAhPSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmVuZCgpOyArK2l0KSB7CisgICAgICAg
ICAgICAvLyBGcm9udCBlbmQgZW5zdXJlcyB0aGUgZXZlbnQgaXMgbm90IGZpcmVkIGF0IGNvbm5l
Y3Rpb25zIHRoYXQgaGF2ZSBjbG9zZVBlbmRpbmcgc2V0LgorICAgICAgICAgICAgKCppdCktPm9u
VmVyc2lvbkNoYW5nZShtX21ldGFkYXRhLnZlcnNpb24sIDAsIEluZGV4ZWREQjo6TnVsbFZlcnNp
b24pOworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBPbmx5IGZpcmUgb25CbG9ja2VkIGlm
IHRoZXJlIGFyZSBvcGVuIGNvbm5lY3Rpb25zIGFmdGVyIHRoZQorICAgICAgICAvLyBWZXJzaW9u
Q2hhbmdlRXZlbnRzIGFyZSByZWNlaXZlZCwgbm90IGp1c3Qgc2V0IHVwIHRvIGZpcmUuCisgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTEzMAorICAg
ICAgICBjYWxsYmFja3MtPm9uQmxvY2tlZChtX21ldGFkYXRhLnZlcnNpb24pOworICAgICAgICBt
X3BlbmRpbmdEZWxldGVDYWxscy5hcHBlbmQoSURCUGVuZGluZ0RlbGV0ZUNhbGw6OmNyZWF0ZShj
YWxsYmFja3MucmVsZWFzZSgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZGVsZXRl
RGF0YWJhc2VBc3luYyhjYWxsYmFja3MucmVsZWFzZSgpKTsKK30KKworYm9vbCBJREJEYXRhYmFz
ZUJhY2tlbmQ6OmlzRGVsZXRlRGF0YWJhc2VCbG9ja2VkKCkKK3sKKyAgICByZXR1cm4gY29ubmVj
dGlvbkNvdW50KCk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpkZWxldGVEYXRhYmFz
ZUFzeW5jKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgQVNTRVJU
KCFpc0RlbGV0ZURhdGFiYXNlQmxvY2tlZCgpKTsKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUp
OworCisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4gc2VsZih0aGlzKTsKKyAgICBtX2Jh
Y2tpbmdTdG9yZS0+ZGVsZXRlRGF0YWJhc2UobV9tZXRhZGF0YS5uYW1lLCBbc2VsZiwgY2FsbGJh
Y2tzXShib29sIHN1Y2Nlc3MpIHsKKyAgICAgICAgQVNTRVJUKHNlbGYtPm1fZGVsZXRlQ2FsbGJh
Y2tzV2FpdGluZ0NvbXBsZXRpb24uY29udGFpbnMoY2FsbGJhY2tzKSk7CisgICAgICAgIHNlbGYt
Pm1fZGVsZXRlQ2FsbGJhY2tzV2FpdGluZ0NvbXBsZXRpb24ucmVtb3ZlKGNhbGxiYWNrcyk7CisK
KyAgICAgICAgLy8gSWYgdGhpcyBJREJEYXRhYmFzZUJhY2tlbmQgd2FzIGNsb3NlZCB3aGlsZSB3
YWl0aW5nIGZvciBkZWxldGVEYXRhYmFzZSB0byBjb21wbGV0ZSwgbm8gcG9pbnQgaW4gcGVyZm9y
bWluZyBhbnkgY2FsbGJhY2tzLgorICAgICAgICBpZiAoIXNlbGYtPm1fYmFja2luZ1N0b3JlKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAg
ICBzZWxmLT5tX21ldGFkYXRhLmlkID0gSW52YWxpZElkOworICAgICAgICAgICAgc2VsZi0+bV9t
ZXRhZGF0YS52ZXJzaW9uID0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uOworICAg
ICAgICAgICAgc2VsZi0+bV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY2xlYXIoKTsKKyAgICAgICAg
ICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
Y2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgZGVsZXRpbmcgZGF0YWJhc2Uu
IikpOworCisgICAgICAgIHNlbGYtPnByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKKyAgICB9KTsKK30K
Kwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmNsb3NlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VD
YWxsYmFja3M+IHBycENhbGxiYWNrcykKK3sKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFj
a3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBBU1NFUlQobV9kYXRhYmFzZUNhbGxi
YWNrc1NldC5jb250YWlucyhjYWxsYmFja3MpKTsKKworICAgIG1fZGF0YWJhc2VDYWxsYmFja3NT
ZXQucmVtb3ZlKGNhbGxiYWNrcyk7CisgICAgaWYgKG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuICYm
IG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLT5kYXRhYmFzZUNhbGxiYWNrcygpID09IGNhbGxiYWNr
cykgeworICAgICAgICBtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbi0+Y2FsbGJhY2tzKCktPm9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVy
cm9yLCAiVGhlIGNvbm5lY3Rpb24gd2FzIGNsb3NlZC4iKSk7CisgICAgICAgIG1fcGVuZGluZ1Nl
Y29uZEhhbGZPcGVuLnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBpZiAoY29ubmVjdGlvbkNvdW50
KCkgPiAxKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBwcm9jZXNzUGVuZGluZ0NhbGxzIGFs
bG93cyB0aGUgaW5zcGVjdG9yIHRvIHByb2Nlc3MgYSBwZW5kaW5nIG9wZW4gY2FsbAorICAgIC8v
IGFuZCBjYWxsIGNsb3NlLCByZWVudGVyaW5nIElEQkRhdGFiYXNlQmFja2VuZDo6Y2xvc2UuIFRo
ZW4gdGhlCisgICAgLy8gYmFja2VuZCB3b3VsZCBiZSByZW1vdmVkIGJvdGggYnkgdGhlIGluc3Bl
Y3RvciBjbG9zaW5nIGl0cyBjb25uZWN0aW9uLCBhbmQKKyAgICAvLyBieSB0aGUgY29ubmVjdGlv
biB0aGF0IGZpcnN0IGNhbGxlZCBjbG9zZS4KKyAgICAvLyBUbyBhdm9pZCB0aGF0IHNpdHVhdGlv
biwgZG9uJ3QgcHJvY2VlZCBpbiBjYXNlIG9mIHJlZW50cmFuY3kuCisgICAgaWYgKG1fY2xvc2lu
Z0Nvbm5lY3Rpb24pCisgICAgICAgIHJldHVybjsKKyAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4g
Y2xvc2luZ0Nvbm5lY3Rpb24obV9jbG9zaW5nQ29ubmVjdGlvbiwgdHJ1ZSk7CisgICAgcHJvY2Vz
c1BlbmRpbmdDYWxscygpOworCisgICAgLy8gRklYTUU6IEFkZCBhIHRlc3QgZm9yIHRoZSBtX3Bl
bmRpbmdPcGVuQ2FsbHMgY2FzZXMgYmVsb3cuCisgICAgaWYgKCFjb25uZWN0aW9uQ291bnQoKSAm
JiAhbV9wZW5kaW5nT3BlbkNhbGxzLnNpemUoKSAmJiAhbV9wZW5kaW5nRGVsZXRlQ2FsbHMuc2l6
ZSgpKSB7CisgICAgICAgIFRyYW5zYWN0aW9uTWFwIHRyYW5zYWN0aW9ucyhtX3RyYW5zYWN0aW9u
cyk7CisgICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiQ29ubmVj
dGlvbiBpcyBjbG9zaW5nLiIpOworICAgICAgICBmb3IgKFRyYW5zYWN0aW9uTWFwOjpjb25zdF9p
dGVyYXRvcjo6VmFsdWVzIGl0ID0gdHJhbnNhY3Rpb25zLnZhbHVlcygpLmJlZ2luKCksIGVuZCA9
IHRyYW5zYWN0aW9ucy52YWx1ZXMoKS5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAg
ICAgKCppdCktPmFib3J0KGVycm9yKTsKKworICAgICAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMu
aXNFbXB0eSgpKTsKKworICAgICAgICBtX2JhY2tpbmdTdG9yZS5jbGVhcigpOworCisgICAgICAg
IC8vIFRoaXMgY2hlY2sgc2hvdWxkIG9ubHkgYmUgZmFsc2UgaW4gdW5pdCB0ZXN0cy4KKyAgICAg
ICAgQVNTRVJUKG1fZmFjdG9yeSk7CisgICAgICAgIGlmIChtX2ZhY3RvcnkpCisgICAgICAgICAg
ICBtX2ZhY3RvcnktPnJlbW92ZUlEQkRhdGFiYXNlQmFja2VuZChtX2lkZW50aWZpZXIpOworICAg
IH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjdhZWY4ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuaApAQCAtMCwwICsxLDE3NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgSURCRGF0YWJhc2VCYWNrZW5kX2gKKyNkZWZpbmUgSURCRGF0YWJhc2VCYWNrZW5kX2gKKwor
I2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZC5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2Fs
bGJhY2tzLmgiCisjaW5jbHVkZSAiSURCTWV0YWRhdGEuaCIKKyNpbmNsdWRlICJJREJQZW5kaW5n
RGVsZXRlQ2FsbC5oIgorI2luY2x1ZGUgIklEQlBlbmRpbmdPcGVuQ2FsbC5oIgorI2luY2x1ZGUg
PHN0ZGludC5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJCYWNraW5nU3RvcmVJ
bnRlcmZhY2U7CitjbGFzcyBJREJEYXRhYmFzZTsKK2NsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlOworY2xhc3MgSURCS2V5OworY2xhc3MgSURCS2V5UGF0aDsKK2NsYXNzIElEQktleVJh
bmdlOworY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kOworY2xhc3MgSURCVHJhbnNhY3Rpb25D
b29yZGluYXRvcjsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworc3RydWN0IElEQkRhdGFiYXNlTWV0
YWRhdGE7CitzdHJ1Y3QgSURCSW5kZXhNZXRhZGF0YTsKK3N0cnVjdCBJREJPYmplY3RTdG9yZU1l
dGFkYXRhOworCit0eXBlZGVmIFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4gSW5kZXhLZXlzOwordHlw
ZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kIDogcHVi
bGljIFJlZkNvdW50ZWQ8SURCRGF0YWJhc2VCYWNrZW5kPiB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1l
LCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqLCBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSos
IGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllcik7CisgICAgfklEQkRhdGFiYXNlQmFja2Vu
ZCgpOworCisgICAgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUoKSBjb25z
dDsKKworICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IEludmFsaWRJZCA9IDA7CisgICAgaW50NjRf
dCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEuaWQ7IH0KKyAgICB2b2lkIGFkZE9iamVj
dFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBpbnQ2NF90IG5ld01heE9iamVj
dFN0b3JlSWQpOworICAgIHZvaWQgcmVtb3ZlT2JqZWN0U3RvcmUoaW50NjRfdCBvYmplY3RTdG9y
ZUlkKTsKKyAgICB2b2lkIGFkZEluZGV4KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURC
SW5kZXhNZXRhZGF0YSYsIGludDY0X3QgbmV3TWF4SW5kZXhJZCk7CisgICAgdm9pZCByZW1vdmVJ
bmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCk7CisKKyAgICB2b2lk
IG9wZW5Db25uZWN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUNhbGxiYWNrcz4sIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgdWludDY0X3QgdmVyc2lv
bik7CisgICAgdm9pZCBkZWxldGVEYXRhYmFzZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwor
CisgICAgLy8gSURCRGF0YWJhc2VCYWNrZW5kCisgICAgdm9pZCBjcmVhdGVPYmplY3RTdG9yZShp
bnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50KTsKKyAgICB2b2lk
IGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkKTsKKyAgICB2b2lkIGNyZWF0ZVRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25J
ZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90
PiYgb2JqZWN0U3RvcmVJZHMsIHVuc2lnbmVkIHNob3J0IG1vZGUpOworICAgIHZvaWQgY2xvc2Uo
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4pOworCisgICAgdm9pZCBjb21taXQoaW50
NjRfdCB0cmFuc2FjdGlvbklkKTsKKyAgICB2b2lkIGFib3J0KGludDY0X3QgdHJhbnNhY3Rpb25J
ZCk7CisgICAgdm9pZCBhYm9ydChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VFcnJvcj4pOworCisgICAgdm9pZCBjcmVhdGVJbmRleChpbnQ2NF90IHRyYW5zYWN0
aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5
KTsKKyAgICB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOworCisgICAgSURCVHJhbnNhY3Rpb25Db29y
ZGluYXRvciogdHJhbnNhY3Rpb25Db29yZGluYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNh
Y3Rpb25Db29yZGluYXRvci5nZXQoKTsgfQorICAgIHZvaWQgdHJhbnNhY3Rpb25TdGFydGVkKElE
QlRyYW5zYWN0aW9uQmFja2VuZCopOworICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZChJREJU
cmFuc2FjdGlvbkJhY2tlbmQqKTsKKyAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWRBbmRDb21w
bGV0ZUZpcmVkKElEQlRyYW5zYWN0aW9uQmFja2VuZCopOworICAgIHZvaWQgdHJhbnNhY3Rpb25G
aW5pc2hlZEFuZEFib3J0RmlyZWQoSURCVHJhbnNhY3Rpb25CYWNrZW5kKik7CisKKyAgICBlbnVt
IFRhc2tUeXBlIHsKKyAgICAgICAgTm9ybWFsVGFzayA9IDAsCisgICAgICAgIFByZWVtcHRpdmVU
YXNrCisgICAgfTsKKworICAgIGVudW0gUHV0TW9kZSB7CisgICAgICAgIEFkZE9yVXBkYXRlLAor
ICAgICAgICBBZGRPbmx5LAorICAgICAgICBDdXJzb3JVcGRhdGUKKyAgICB9OworCisgICAgc3Rh
dGljIGNvbnN0IGludDY0X3QgTWluaW11bUluZGV4SWQgPSAzMDsKKworICAgIHZvaWQgZ2V0KGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBib29sIGtleU9ubHksIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPik7CisgICAgdm9pZCBwdXQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSwgUGFzc1JlZlB0
cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIGNvbnN0IFZlY3Rv
cjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+Jik7CisgICAgdm9p
ZCBzZXRJbmRleEtleXMoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8aW50NjRf
dD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYpOworICAgIHZvaWQgc2V0SW5k
ZXhlc1JlYWR5KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzKTsKKyAgICB2b2lkIG9wZW5DdXJzb3IoaW50
NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uLCBi
b29sIGtleU9ubHksIFRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworICAgIHZv
aWQgY291bnQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPik7CisgICAgdm9pZCBkZWxldGVSYW5nZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPik7CisgICAgdm9pZCBjbGVhcihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKworICAgIGNv
bnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9tZXRh
ZGF0YTsgfQorICAgIHZvaWQgc2V0Q3VycmVudFZlcnNpb24odWludDY0X3QgdmVyc2lvbikgeyBt
X21ldGFkYXRhLnZlcnNpb24gPSB2ZXJzaW9uOyB9CisKKyAgICBib29sIGlzSURCRGF0YWJhc2VC
YWNrZW5kKCkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgYm9vbCBoYXNQZW5kaW5nU2Vjb25kSGFs
Zk9wZW4oKSB7IHJldHVybiBtX3BlbmRpbmdTZWNvbmRIYWxmT3BlbjsgfQorICAgIHZvaWQgc2V0
UGVuZGluZ1NlY29uZEhhbGZPcGVuKFBhc3NPd25QdHI8SURCUGVuZGluZ09wZW5DYWxsPiBwZW5k
aW5nT3BlbkNhbGwpIHsgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4gPSBwZW5kaW5nT3BlbkNhbGw7
IH0KKworICAgIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlJiBmYWN0b3J5QmFja2VuZCgpIHsg
cmV0dXJuICptX2ZhY3Rvcnk7IH0KKworICAgIGNsYXNzIFZlcnNpb25DaGFuZ2VPcGVyYXRpb247
CisgICAgY2xhc3MgVmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uOworCitwcml2YXRlOgorICAg
IElEQkRhdGFiYXNlQmFja2VuZChjb25zdCBTdHJpbmcmIG5hbWUsIElEQkJhY2tpbmdTdG9yZUlu
dGVyZmFjZSosIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgU3RyaW5nJiB1bmlx
dWVJZGVudGlmaWVyKTsKKworICAgIHZvaWQgb3BlbkNvbm5lY3Rpb25JbnRlcm5hbChQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBpbnQ2
NF90IHRyYW5zYWN0aW9uSWQsIHVpbnQ2NF90IHZlcnNpb24pOworCisgICAgdm9pZCBvcGVuSW50
ZXJuYWxBc3luYygpOworICAgIHZvaWQgZGlkT3BlbkludGVybmFsQXN5bmMoY29uc3QgSURCRGF0
YWJhc2VNZXRhZGF0YSYsIGJvb2wgc3VjY2Vzcyk7CisKKyAgICB2b2lkIHJ1bkludFZlcnNpb25D
aGFuZ2VUcmFuc2FjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+LCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgcmVxdWVz
dGVkVmVyc2lvbik7CisgICAgc2l6ZV90IGNvbm5lY3Rpb25Db3VudCgpOworICAgIHZvaWQgcHJv
Y2Vzc1BlbmRpbmdDYWxscygpOworICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdPcGVuQ2FsbHMoYm9v
bCBzdWNjZXNzKTsKKworICAgIGJvb2wgaXNEZWxldGVEYXRhYmFzZUJsb2NrZWQoKTsKKyAgICB2
b2lkIGRlbGV0ZURhdGFiYXNlQXN5bmMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKworICAg
IFJlZlB0cjxJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U+IG1fYmFja2luZ1N0b3JlOworICAgIElE
QkRhdGFiYXNlTWV0YWRhdGEgbV9tZXRhZGF0YTsKKworICAgIFN0cmluZyBtX2lkZW50aWZpZXI7
CisgICAgLy8gVGhpcyBtaWdodCBub3QgbmVlZCB0byBiZSBhIFJlZlB0ciBzaW5jZSB0aGUgZmFj
dG9yeSdzIGxpZmV0aW1lIGlzIHRoYXQgb2YgdGhlIHBhZ2UgZ3JvdXAsIGJ1dCBpdCdzIGJldHRl
ciB0byBiZSBjb25zZXJ2YXRpdmUgdGhhbiBzb3JyeS4KKyAgICBSZWZQdHI8SURCRmFjdG9yeUJh
Y2tlbmRJbnRlcmZhY2U+IG1fZmFjdG9yeTsKKworICAgIE93blB0cjxJREJUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yPiBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CisgICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZD4gbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uOworCisgICAg
dHlwZWRlZiBIYXNoTWFwPGludDY0X3QsIElEQlRyYW5zYWN0aW9uQmFja2VuZCo+IFRyYW5zYWN0
aW9uTWFwOworICAgIFRyYW5zYWN0aW9uTWFwIG1fdHJhbnNhY3Rpb25zOworCisgICAgRGVxdWU8
T3duUHRyPElEQlBlbmRpbmdPcGVuQ2FsbD4+IG1fcGVuZGluZ09wZW5DYWxsczsKKyAgICBPd25Q
dHI8SURCUGVuZGluZ09wZW5DYWxsPiBtX3BlbmRpbmdTZWNvbmRIYWxmT3BlbjsKKworICAgIERl
cXVlPE93blB0cjxJREJQZW5kaW5nRGVsZXRlQ2FsbD4+IG1fcGVuZGluZ0RlbGV0ZUNhbGxzOwor
ICAgIEhhc2hTZXQ8UmVmUHRyPElEQkNhbGxiYWNrcz4+IG1fZGVsZXRlQ2FsbGJhY2tzV2FpdGlu
Z0NvbXBsZXRpb247CisKKyAgICB0eXBlZGVmIExpc3RIYXNoU2V0PFJlZlB0cjxJREJEYXRhYmFz
ZUNhbGxiYWNrcz4+IERhdGFiYXNlQ2FsbGJhY2tzU2V0OworICAgIERhdGFiYXNlQ2FsbGJhY2tz
U2V0IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQ7CisKKyAgICBib29sIG1fY2xvc2luZ0Nvbm5lY3Rp
b247Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKKworI2VuZGlmIC8vIElEQkRhdGFiYXNlQmFja2VuZF9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFj
a2VuZEltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTYxYjcwLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFj
a2VuZEltcGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjYyICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgotCi0j
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJCYWNraW5nU3RvcmVJ
bnRlcmZhY2UuaCIKLSNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kLmgiCi0jaW5jbHVkZSAiSURC
RGF0YWJhc2VDYWxsYmFja3MuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgot
I2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiSURCSW5k
ZXhXcml0ZXIuaCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1ZGUgIklEQlJlY29y
ZElkZW50aWZpZXIuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmQuaCIKLSNpbmNs
dWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgot
I2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2Uu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUs
IElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBJREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZSogZmFjdG9yeSwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKQotewot
ICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBiYWNrZW5kID0gYWRvcHRSZWYobmV3
IElEQkRhdGFiYXNlQmFja2VuZEltcGwobmFtZSwgYmFja2luZ1N0b3JlLCBmYWN0b3J5LCB1bmlx
dWVJZGVudGlmaWVyKSk7Ci0gICAgYmFja2VuZC0+b3BlbkludGVybmFsQXN5bmMoKTsKLSAgICAK
LSAgICByZXR1cm4gYmFja2VuZC5yZWxlYXNlKCk7Ci19Ci0KLUlEQkRhdGFiYXNlQmFja2VuZElt
cGw6OklEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5n
U3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2Uq
IGZhY3RvcnksIGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllcikKLSAgICA6IG1fYmFja2lu
Z1N0b3JlKGJhY2tpbmdTdG9yZSkKLSAgICAsIG1fbWV0YWRhdGEobmFtZSwgSW52YWxpZElkLCAw
LCBJbnZhbGlkSWQpCi0gICAgLCBtX2lkZW50aWZpZXIodW5pcXVlSWRlbnRpZmllcikKLSAgICAs
IG1fZmFjdG9yeShmYWN0b3J5KQotICAgICwgbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yKElEQlRy
YW5zYWN0aW9uQ29vcmRpbmF0b3I6OmNyZWF0ZSgpKQotICAgICwgbV9jbG9zaW5nQ29ubmVjdGlv
bihmYWxzZSkKLXsKLSAgICBBU1NFUlQoIW1fbWV0YWRhdGEubmFtZS5pc051bGwoKSk7Ci19Ci0K
LXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6YWRkT2JqZWN0U3RvcmUoY29uc3QgSURCT2Jq
ZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUsIGludDY0X3QgbmV3TWF4T2JqZWN0U3RvcmVJ
ZCkKLXsKLSAgICBBU1NFUlQoIW1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVj
dFN0b3JlLmlkKSk7Ci0gICAgaWYgKG5ld01heE9iamVjdFN0b3JlSWQgIT0gSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YTo6SW52YWxpZElkKSB7Ci0gICAgICAgIEFTU0VSVChtX21ldGFkYXRhLm1heE9i
amVjdFN0b3JlSWQgPCBuZXdNYXhPYmplY3RTdG9yZUlkKTsKLSAgICAgICAgbV9tZXRhZGF0YS5t
YXhPYmplY3RTdG9yZUlkID0gbmV3TWF4T2JqZWN0U3RvcmVJZDsKLSAgICB9Ci0gICAgbV9tZXRh
ZGF0YS5vYmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3JlLmlkLCBvYmplY3RTdG9yZSk7Ci19Ci0K
LXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVtb3ZlT2JqZWN0U3RvcmUoaW50NjRfdCBv
YmplY3RTdG9yZUlkKQotewotICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250
YWlucyhvYmplY3RTdG9yZUlkKSk7Ci0gICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMucmVtb3Zl
KG9iamVjdFN0b3JlSWQpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmFkZElu
ZGV4KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXgs
IGludDY0X3QgbmV3TWF4SW5kZXhJZCkKLXsKLSAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RT
dG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwotICAgIElEQk9iamVjdFN0b3JlTWV0YWRh
dGEgb2JqZWN0U3RvcmUgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJ
ZCk7Ci0KLSAgICBBU1NFUlQoIW9iamVjdFN0b3JlLmluZGV4ZXMuY29udGFpbnMoaW5kZXguaWQp
KTsKLSAgICBvYmplY3RTdG9yZS5pbmRleGVzLnNldChpbmRleC5pZCwgaW5kZXgpOwotICAgIGlm
IChuZXdNYXhJbmRleElkICE9IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCkgewotICAgICAg
ICBBU1NFUlQob2JqZWN0U3RvcmUubWF4SW5kZXhJZCA8IG5ld01heEluZGV4SWQpOwotICAgICAg
ICBvYmplY3RTdG9yZS5tYXhJbmRleElkID0gbmV3TWF4SW5kZXhJZDsKLSAgICB9Ci0gICAgbV9t
ZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3JlSWQsIG9iamVjdFN0b3JlKTsKLX0K
LQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVJbmRleChpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkKLXsKLSAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmpl
Y3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwotICAgIElEQk9iamVjdFN0b3JlTWV0
YWRhdGEgb2JqZWN0U3RvcmUgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3Rv
cmVJZCk7Ci0KLSAgICBBU1NFUlQob2JqZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRleElk
KSk7Ci0gICAgb2JqZWN0U3RvcmUuaW5kZXhlcy5yZW1vdmUoaW5kZXhJZCk7Ci0gICAgbV9tZXRh
ZGF0YS5vYmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3JlSWQsIG9iamVjdFN0b3JlKTsKLX0KLQot
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuSW50ZXJuYWxBc3luYygpCi17Ci0gICAg
UmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IHNlbGYgPSB0aGlzOwotICAgIG1fYmFja2lu
Z1N0b3JlLT5nZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGEobV9tZXRhZGF0YS5uYW1l
LCBbc2VsZl0oY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEsIGJvb2wgc3VjY2Vz
cykgewotICAgICAgICBzZWxmLT5kaWRPcGVuSW50ZXJuYWxBc3luYyhtZXRhZGF0YSwgc3VjY2Vz
cyk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGlkT3Blbklu
dGVybmFsQXN5bmMoY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEsIGJvb2wgc3Vj
Y2VzcykKLXsKLSAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgcHJvY2Vzc1BlbmRpbmdPcGVu
Q2FsbHMoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9tZXRhZGF0YSA9
IG1ldGFkYXRhOwotCi0gICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOwotfQotCi1JREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjp+SURCRGF0YWJhc2VCYWNrZW5kSW1wbCgpCi17Ci19Ci0KLUlEQkJhY2tp
bmdTdG9yZUludGVyZmFjZSogSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6YmFja2luZ1N0b3JlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9iYWNraW5nU3RvcmUuZ2V0KCk7Ci19Ci0KLXZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlv
bklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURC
S2V5UGF0aCYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KQotewotICAgIExPRyhTdG9yYWdl
QVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUiKTsKLSAgICBJ
REJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRy
YW5zYWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLSAg
ICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVy
c2lvbkNoYW5nZSk7Ci0KLSAgICBBU1NFUlQoIW1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRh
aW5zKG9iamVjdFN0b3JlSWQpKTsKLSAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0
b3JlTWV0YWRhdGEobmFtZSwgb2JqZWN0U3RvcmVJZCwga2V5UGF0aCwgYXV0b0luY3JlbWVudCwg
SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpNaW5pbXVtSW5kZXhJZCk7Ci0KLSAgICB0cmFu
c2FjdGlvbi0+c2NoZWR1bGVDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbihvYmplY3RTdG9yZU1l
dGFkYXRhKTsKLSAgICBhZGRPYmplY3RTdG9yZShvYmplY3RTdG9yZU1ldGFkYXRhLCBvYmplY3RT
dG9yZUlkKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVPYmplY3RT
dG9yZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKLXsKLSAg
ICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0
b3JlIik7Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNh
Y3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAg
ICByZXR1cm47Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpU
cmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpOwotCi0gICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0
U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKLSAgICBjb25zdCBJREJPYmplY3RTdG9y
ZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMu
Z2V0KG9iamVjdFN0b3JlSWQpOwotCi0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlRGVsZXRlT2Jq
ZWN0U3RvcmVPcGVyYXRpb24ob2JqZWN0U3RvcmVNZXRhZGF0YSk7Ci0gICAgcmVtb3ZlT2JqZWN0
U3RvcmUob2JqZWN0U3RvcmVJZCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
Y3JlYXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBr
ZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KQotewotICAgIExPRyhTdG9yYWdl
QVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgiKTsKLSAgICBJREJUcmFu
c2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0
aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NF
UlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNo
YW5nZSk7Ci0KLSAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2Jq
ZWN0U3RvcmVJZCkpOwotICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3Rv
cmUgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7Ci0KLSAgICBB
U1NFUlQoIW9iamVjdFN0b3JlLmluZGV4ZXMuY29udGFpbnMoaW5kZXhJZCkpOwotICAgIGNvbnN0
IElEQkluZGV4TWV0YWRhdGEgaW5kZXhNZXRhZGF0YShuYW1lLCBpbmRleElkLCBrZXlQYXRoLCB1
bmlxdWUsIG11bHRpRW50cnkpOwotCi0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlQ3JlYXRlSW5k
ZXhPcGVyYXRpb24ob2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSk7Ci0KLSAgICBhZGRJbmRl
eChvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhLCBpbmRleElkKTsKLX0KLQotdm9pZCBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQotewotICAgIExPRyhTdG9yYWdl
QVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXgiKTsKLSAgICBJREJUcmFu
c2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0
aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NF
UlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNo
YW5nZSk7Ci0KLSAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2Jq
ZWN0U3RvcmVJZCkpOwotICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3Rv
cmUgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7Ci0KLSAgICBB
U1NFUlQob2JqZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRleElkKSk7Ci0gICAgY29uc3Qg
SURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSA9IG9iamVjdFN0b3JlLmluZGV4ZXMuZ2V0
KGluZGV4SWQpOwotCi0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlRGVsZXRlSW5kZXhPcGVyYXRp
b24ob2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSk7Ci0KLSAgICByZW1vdmVJbmRleChvYmpl
Y3RTdG9yZUlkLCBpbmRleElkKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpj
b21taXQoaW50NjRfdCB0cmFuc2FjdGlvbklkKQotewotICAgIC8vIFRoZSBmcm9udGVuZCBzdWdn
ZXN0cyB0aGF0IHdlIGNvbW1pdCwgYnV0IHdlIG1heSBoYXZlIHByZXZpb3VzbHkgaW5pdGlhdGVk
IGFuIGFib3J0LCBhbmQgc28gaGF2ZSBkaXNwb3NlZCBvZiB0aGUgdHJhbnNhY3Rpb24uIG9uQWJv
cnQgaGFzIGFscmVhZHkgYmVlbiBkaXNwYXRjaGVkIHRvIHRoZSBmcm9udGVuZCwgc28gaXQgd2ls
bCBmaW5kIG91dCBhYm91dCB0aGF0IGFzeW5jaHJvbm91c2x5LgotICAgIGlmIChtX3RyYW5zYWN0
aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSkKLSAgICAgICAgbV90cmFuc2FjdGlvbnMuZ2V0
KHRyYW5zYWN0aW9uSWQpLT5jb21taXQoKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjphYm9ydChpbnQ2NF90IHRyYW5zYWN0aW9uSWQpCi17Ci0gICAgLy8gSWYgdGhlIHRyYW5z
YWN0aW9uIGlzIHVua25vd24sIHRoZW4gaXQgaGFzIGFscmVhZHkgYmVlbiBhYm9ydGVkIGJ5IHRo
ZSBiYWNrZW5kIGJlZm9yZSB0aGlzIGNhbGwgc28gaXQgaXMgc2FmZSB0byBpZ25vcmUgaXQuCi0g
ICAgaWYgKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKQotICAgICAgICBt
X3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCktPmFib3J0KCk7Ci19Ci0KLXZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6YWJvcnQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVm
UHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yKQotewotICAgIC8vIElmIHRoZSB0cmFuc2FjdGlv
biBpcyB1bmtub3duLCB0aGVuIGl0IGhhcyBhbHJlYWR5IGJlZW4gYWJvcnRlZCBieSB0aGUgYmFj
a2VuZCBiZWZvcmUgdGhpcyBjYWxsIHNvIGl0IGlzIHNhZmUgdG8gaWdub3JlIGl0LgotICAgIGlm
IChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSkKLSAgICAgICAgbV90cmFu
c2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpLT5hYm9ydChlcnJvcik7Ci19Ci0KLXZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6Z2V0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtl
eVJhbmdlLCBib29sIGtleU9ubHksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Mp
Ci17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpnZXQiKTsK
LSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMu
Z2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZUdldE9wZXJhdGlvbihtX21ldGFkYXRhLCBv
YmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwga2V5T25seSA/IEluZGV4ZWREQjo6Q3Vy
c29yS2V5T25seSA6IEluZGV4ZWREQjo6Q3Vyc29yS2V5QW5kVmFsdWUsIGNhbGxiYWNrcyk7Ci19
Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cHV0KGludDY0X3QgdHJhbnNhY3Rpb25J
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUs
IFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29u
c3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwg
IklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnB1dCIpOwotICAgIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Ci0gICAg
aWYgKCF0cmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCh0cmFuc2FjdGlv
bi0+bW9kZSgpICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25SZWFkT25seSk7Ci0KLSAgICBjb25z
dCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlTWV0YWRhdGEgPSBtX21ldGFkYXRh
Lm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7Ci0KLSAgICBBU1NFUlQob2JqZWN0U3Rv
cmVNZXRhZGF0YS5hdXRvSW5jcmVtZW50IHx8IGtleS5nZXQoKSk7Ci0KLSAgICB0cmFuc2FjdGlv
bi0+c2NoZWR1bGVQdXRPcGVyYXRpb24ob2JqZWN0U3RvcmVNZXRhZGF0YSwgdmFsdWUsIGtleSwg
cHV0TW9kZSwgY2FsbGJhY2tzLCBpbmRleElkcywgaW5kZXhLZXlzKTsKLX0KLQotdm9pZCBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBj
b25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYg
aW5kZXhLZXlzKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6c2V0SW5kZXhLZXlzIik7Ci0gICAgQVNTRVJUKHBycFByaW1hcnlLZXkpOwotCi0gICAgSURC
VHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFu
c2FjdGlvbklkKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAg
QVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNp
b25DaGFuZ2UpOwotCi0gICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IHBycFByaW1hcnlL
ZXk7Ci0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZUludGVyZmFjZT4gc3RvcmUgPSBtX2JhY2tp
bmdTdG9yZTsKLSAgICAvLyBGSVhNRTogVGhpcyBtZXRob2QgY291bGQgYmUgYXN5bmNocm9ub3Vz
LCBidXQgd2UgbmVlZCB0byBldmFsdWF0ZSBpZiBpdCdzIHdvcnRoIHRoZSBleHRyYSBjb21wbGV4
aXR5LgotICAgIFJlZlB0cjxJREJSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVyOwot
ICAgIGJvb2wgb2sgPSBzdG9yZS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+
YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9tZXRhZGF0YS5pZCwgb2JqZWN0U3RvcmVJZCwg
KnByaW1hcnlLZXksIHJlY29yZElkZW50aWZpZXIpOwotICAgIGlmICghb2spIHsKLSAgICAgICAg
dHJhbnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3Igc2V0dGluZyBpbmRleCBrZXlz
LiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXJlY29yZElkZW50aWZpZXIp
IHsKLSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJhc2VF
cnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmluZzo6
Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBzZXR0aW5nIGluZGV4IGtleXMgZm9yIG9iamVjdCBzdG9y
ZS4iKSk7Ci0gICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChlcnJvci5yZWxlYXNlKCkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPFJlZlB0cjxJREJJbmRleFdyaXRlcj4+
IGluZGV4V3JpdGVyczsKLSAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwotICAgIGJvb2wgb2JleXND
b25zdHJhaW50cyA9IGZhbHNlOwotICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5j
b250YWlucyhvYmplY3RTdG9yZUlkKSk7Ci0gICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0
YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmpl
Y3RTdG9yZUlkKTsKLSAgICBib29sIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBzdG9yZS0+bWFrZUlu
ZGV4V3JpdGVycygqdHJhbnNhY3Rpb24sIGlkKCksIG9iamVjdFN0b3JlTWV0YWRhdGEsICpwcmlt
YXJ5S2V5LCBmYWxzZSwgaW5kZXhJZHMsIGluZGV4S2V5cywgaW5kZXhXcml0ZXJzLCAmZXJyb3JN
ZXNzYWdlLCBvYmV5c0NvbnN0cmFpbnRzKTsKLSAgICBpZiAoIWJhY2tpbmdTdG9yZVN1Y2Nlc3Mp
IHsKLSAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tp
bmcgc3RvcmUgZXJyb3IgdXBkYXRpbmcgaW5kZXgga2V5cy4iKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgaWYgKCFvYmV5c0NvbnN0cmFpbnRzKSB7Ci0gICAgICAgIHRyYW5zYWN0aW9u
LT5hYm9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNv
bnN0cmFpbnRFcnJvciwgZXJyb3JNZXNzYWdlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4V3JpdGVycy5zaXplKCk7ICsraSkgewot
ICAgICAgICBJREJJbmRleFdyaXRlciogaW5kZXhXcml0ZXIgPSBpbmRleFdyaXRlcnNbaV0uZ2V0
KCk7Ci0gICAgICAgIGluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVy
LmdldCgpLCAqc3RvcmUuZ2V0KCksIHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlv
bigpLCBpZCgpLCBvYmplY3RTdG9yZUlkKTsKLSAgICB9Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRf
dCwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcykKLXsKLSAgICBMT0coU3RvcmFnZUFQ
SSwgIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeSIpOwotCi0gICAgSURC
VHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFu
c2FjdGlvbklkKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24oaW5kZXhJZHMu
c2l6ZSgpKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRp
cmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wga2V5T25seSwgVGFza1R5cGUgdGFza1R5cGUsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yIik7Ci0gICAgSURCVHJhbnNhY3Rpb25C
YWNrZW5kKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsK
LSAgICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICB0cmFuc2FjdGlv
bi0+c2NoZWR1bGVPcGVuQ3Vyc29yT3BlcmF0aW9uKG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtl
eVJhbmdlLCBkaXJlY3Rpb24sIGtleU9ubHkgPyBJbmRleGVkREI6OkN1cnNvcktleU9ubHkgOiBJ
bmRleGVkREI6OkN1cnNvcktleUFuZFZhbHVlLCB0YXNrVHlwZSwgY2FsbGJhY2tzKTsKLX0KLQot
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjb3VudChpbnQ2NF90IHRyYW5zYWN0aW9uSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLXsK
LSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNvdW50Iik7Ci0g
ICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdl
dCh0cmFuc2FjdGlvbklkKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3Rv
cmVJZCkpOwotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZUNvdW50T3BlcmF0aW9uKG9iamVjdFN0
b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBjYWxsYmFja3MpOwotfQotCi0KLXZvaWQgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlUmFuZ2UoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAi
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlUmFuZ2UiKTsKLSAgICBJREJUcmFuc2FjdGlv
bkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQp
OwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQodHJh
bnNhY3Rpb24tPm1vZGUoKSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uUmVhZE9ubHkpOwotCi0g
ICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlRGVsZXRlUmFuZ2VPcGVyYXRpb24ob2JqZWN0U3RvcmVJ
ZCwga2V5UmFuZ2UsIGNhbGxiYWNrcyk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6Y2xlYXIoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEks
ICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjbGVhciIpOwotICAgIElEQlRyYW5zYWN0aW9uQmFj
a2VuZCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Ci0g
ICAgaWYgKCF0cmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCh0cmFuc2Fj
dGlvbi0+bW9kZSgpICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25SZWFkT25seSk7Ci0KLSAgICB0
cmFuc2FjdGlvbi0+c2NoZWR1bGVDbGVhck9wZXJhdGlvbihvYmplY3RTdG9yZUlkLCBjYWxsYmFj
a3MpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uU3RhcnRl
ZChJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uKQotewotICAgIGlmICh0cmFuc2Fj
dGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKSB7Ci0g
ICAgICAgIEFTU0VSVCghbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKTsKLSAgICAg
ICAgbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb247Ci0gICAg
fQotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uRmluaXNoZWQo
SURCVHJhbnNhY3Rpb25CYWNrZW5kKiByYXdUcmFuc2FjdGlvbikKLXsKLSAgICBSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kPiB0cmFuc2FjdGlvbiA9IHJhd1RyYW5zYWN0aW9uOwotICAgIEFT
U0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbi0+aWQoKSkpOwotICAgIEFT
U0VSVChtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb24tPmlkKCkpID09IHRyYW5zYWN0aW9u
LmdldCgpKTsKLSAgICBtX3RyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24tPmlkKCkpOwot
ICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25WZXJz
aW9uQ2hhbmdlKSB7Ci0gICAgICAgIEFTU0VSVCh0cmFuc2FjdGlvbi5nZXQoKSA9PSBtX3J1bm5p
bmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgICAgICBtX3J1bm5pbmdWZXJz
aW9uQ2hhbmdlVHJhbnNhY3Rpb24uY2xlYXIoKTsKLSAgICB9Ci19Ci0KLXZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25GaW5pc2hlZEFuZEFib3J0RmlyZWQoSURCVHJhbnNh
Y3Rpb25CYWNrZW5kKiByYXdUcmFuc2FjdGlvbikKLXsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kPiB0cmFuc2FjdGlvbiA9IHJhd1RyYW5zYWN0aW9uOwotICAgIGlmICh0cmFuc2Fj
dGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKSB7Ci0g
ICAgICAgIC8vIElmIHRoaXMgd2FzIGFuIG9wZW4td2l0aC12ZXJzaW9uIGNhbGwsIHRoZXJlIHdp
bGwgYmUgYSAic2Vjb25kCi0gICAgICAgIC8vIGhhbGYiIG9wZW4gY2FsbCB3YWl0aW5nIGZvciB1
cyBpbiBwcm9jZXNzUGVuZGluZ0NhbGxzLgotICAgICAgICAvLyBGSVhNRTogV2hlbiB3ZSBubyBs
b25nZXIgc3VwcG9ydCBzZXRWZXJzaW9uLCBhc3NlcnQgc3VjaCBhIHRoaW5nLgotICAgICAgICBp
ZiAobV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4pIHsKLSAgICAgICAgICAgIG1fcGVuZGluZ1NlY29u
ZEhhbGZPcGVuLT5jYWxsYmFja3MoKS0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IsICJWZXJzaW9uIGNoYW5nZSB0cmFuc2Fj
dGlvbiB3YXMgYWJvcnRlZCBpbiB1cGdyYWRlbmVlZGVkIGV2ZW50IGhhbmRsZXIuIikpOwotICAg
ICAgICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4ucmVsZWFzZSgpOwotICAgICAgICB9Ci0g
ICAgICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKLSAgICB9Ci19Ci0KLXZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25GaW5pc2hlZEFuZENvbXBsZXRlRmlyZWQoSURCVHJh
bnNhY3Rpb25CYWNrZW5kKiByYXdUcmFuc2FjdGlvbikKLXsKLSAgICBSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kPiB0cmFuc2FjdGlvbiA9IHJhd1RyYW5zYWN0aW9uOwotICAgIGlmICh0cmFu
c2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKQot
ICAgICAgICBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7Ci19Ci0KLXNpemVfdCBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpjb25uZWN0aW9uQ291bnQoKQotewotICAgIC8vIFRoaXMgZG9lcyBub3QgaW5j
bHVkZSBwZW5kaW5nIG9wZW4gY2FsbHMsIGFzIHRob3NlIHNob3VsZCBub3QgYmxvY2sgdmVyc2lv
biBjaGFuZ2VzIGFuZCBkZWxldGVzLgotICAgIHJldHVybiBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0
LnNpemUoKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpwcm9jZXNzUGVuZGlu
Z0NhbGxzKCkKLXsKLSAgICBpZiAobV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4pIHsKLSAgICAgICAg
QVNTRVJUKG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLT52ZXJzaW9uKCkgPT0gbV9tZXRhZGF0YS52
ZXJzaW9uKTsKLSAgICAgICAgQVNTRVJUKG1fbWV0YWRhdGEuaWQgIT0gSW52YWxpZElkKTsKLSAg
ICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4tPmNhbGxiYWNrcygpLT5vblN1Y2Nlc3ModGhp
cywgdGhpcy0+bWV0YWRhdGEoKSk7Ci0gICAgICAgIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLnJl
bGVhc2UoKTsKLSAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHdoZW4gY29tcGxldGUsIGFzIHBlbmRp
bmcgZGVsZXRlcyBtYXkgYmUgKHBhcnRpYWxseSkgdW5ibG9ja2VkLgotICAgIH0KLQotICAgIC8v
IE5vdGUgdGhhdCB0aGlzIGNoZWNrIGlzIG9ubHkgYW4gb3B0aW1pemF0aW9uIHRvIHJlZHVjZSBx
dWV1ZS1jaHVybiBhbmQKLSAgICAvLyBub3QgbmVjZXNzYXJ5IGZvciBjb3JyZWN0bmVzczsgZGVs
ZXRlRGF0YWJhc2UgYW5kIG9wZW5Db25uZWN0aW9uIHdpbGwKLSAgICAvLyByZXF1ZXVlIHRoZWly
IGNhbGxzIGlmIHRoaXMgY29uZGl0aW9uIGlzIHRydWUuCi0gICAgaWYgKG1fcnVubmluZ1ZlcnNp
b25DaGFuZ2VUcmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3BlbmRp
bmdEZWxldGVDYWxscy5pc0VtcHR5KCkgJiYgaXNEZWxldGVEYXRhYmFzZUJsb2NrZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIHdoaWxlICghbV9wZW5kaW5nRGVsZXRlQ2FsbHMuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIE93blB0cjxJREJQZW5kaW5nRGVsZXRlQ2FsbD4gcGVuZGluZ0RlbGV0ZUNh
bGwgPSBtX3BlbmRpbmdEZWxldGVDYWxscy50YWtlRmlyc3QoKTsKLSAgICAgICAgbV9kZWxldGVD
YWxsYmFja3NXYWl0aW5nQ29tcGxldGlvbi5hZGQocGVuZGluZ0RlbGV0ZUNhbGwtPmNhbGxiYWNr
cygpKTsKLSAgICAgICAgZGVsZXRlRGF0YWJhc2VBc3luYyhwZW5kaW5nRGVsZXRlQ2FsbC0+Y2Fs
bGJhY2tzKCkpOwotICAgIH0KLQotICAgIC8vIGRlbGV0ZURhdGFiYXNlQXN5bmMgc2hvdWxkIG5l
dmVyIHJlLXF1ZXVlIGNhbGxzLgotICAgIEFTU0VSVChtX3BlbmRpbmdEZWxldGVDYWxscy5pc0Vt
cHR5KCkpOwotCi0gICAgLy8gSWYgdGhlcmUgYXJlIGFueSBkYXRhYmFzZSBkZWxldGlvbnMgd2Fp
dGluZyBmb3IgY29tcGxldGlvbiwgd2UncmUgZG9uZSBmb3Igbm93LgotICAgIC8vIEZ1cnRoZXIg
Y2FsbGJhY2tzIHdpbGwgYmUgaGFuZGxlZCBpbiBhIGZ1dHVyZSBjYWxsIHRvIHByb2Nlc3NQZW5k
aW5nQ2FsbHMoKS4KLSAgICBpZiAobV9kZWxldGVDYWxsYmFja3NXYWl0aW5nQ29tcGxldGlvbi5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hh
bmdlVHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIHByb2Nlc3NQZW5kaW5nT3Bl
bkNhbGxzKHRydWUpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnByb2Nlc3NQ
ZW5kaW5nT3BlbkNhbGxzKGJvb2wgc3VjY2VzcykKLXsKLSAgICAvLyBPcGVuIGNhbGxzIGNhbiBi
ZSByZXF1ZXVlZCBpZiBhbiBvcGVuIGNhbGwgc3RhcnRlZCBhIHZlcnNpb24gY2hhbmdlIHRyYW5z
YWN0aW9uIG9yIGRlbGV0ZXMgdGhlIGRhdGFiYXNlLgotICAgIERlcXVlPE93blB0cjxJREJQZW5k
aW5nT3BlbkNhbGw+PiBwZW5kaW5nT3BlbkNhbGxzOwotICAgIG1fcGVuZGluZ09wZW5DYWxscy5z
d2FwKHBlbmRpbmdPcGVuQ2FsbHMpOwotCi0gICAgd2hpbGUgKCFwZW5kaW5nT3BlbkNhbGxzLmlz
RW1wdHkoKSkgewotICAgICAgICBPd25QdHI8SURCUGVuZGluZ09wZW5DYWxsPiBwZW5kaW5nT3Bl
bkNhbGwgPSBwZW5kaW5nT3BlbkNhbGxzLnRha2VGaXJzdCgpOwotICAgICAgICBpZiAoc3VjY2Vz
cykgewotICAgICAgICAgICAgaWYgKG1fbWV0YWRhdGEuaWQgPT0gSW52YWxpZElkKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gVGhpcyBkYXRhYmFzZSB3YXMgZGVsZXRlZCB0aGVuIHF1aWNrbHkgcmUt
b3BlbmVkLgotICAgICAgICAgICAgICAgIC8vIG9wZW5JbnRlcm5hbEFzeW5jKCkgd2lsbCByZWNy
ZWF0ZSBpdCBpbiB0aGUgYmFja2luZyBzdG9yZSBhbmQgdGhlbiByZXN1bWUgcHJvY2Vzc2luZyBw
ZW5kaW5nIGNhbGxiYWNrcy4KLSAgICAgICAgICAgICAgICBwZW5kaW5nT3BlbkNhbGxzLnByZXBl
bmQocGVuZGluZ09wZW5DYWxsLnJlbGVhc2UoKSk7Ci0gICAgICAgICAgICAgICAgcGVuZGluZ09w
ZW5DYWxscy5zd2FwKG1fcGVuZGluZ09wZW5DYWxscyk7Ci0KLSAgICAgICAgICAgICAgICBvcGVu
SW50ZXJuYWxBc3luYygpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIG9wZW5Db25uZWN0aW9uSW50ZXJuYWwocGVuZGluZ09wZW5DYWxsLT5jYWxs
YmFja3MoKSwgcGVuZGluZ09wZW5DYWxsLT5kYXRhYmFzZUNhbGxiYWNrcygpLCBwZW5kaW5nT3Bl
bkNhbGwtPnRyYW5zYWN0aW9uSWQoKSwgcGVuZGluZ09wZW5DYWxsLT52ZXJzaW9uKCkpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2U7Ci0gICAgICAgICAgICBp
ZiAocGVuZGluZ09wZW5DYWxsLT52ZXJzaW9uKCkgPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9J
bnRWZXJzaW9uKQotICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAiSW50ZXJuYWwgZXJyb3Igb3Bl
bmluZyBkYXRhYmFzZSB3aXRoIG5vIHZlcnNpb24gc3BlY2lmaWVkLiI7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgbWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBl
cnJvciBvcGVuaW5nIGRhdGFiYXNlIHdpdGggdmVyc2lvbiAlbGx1Iiwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQgbG9uZyBsb25nPihwZW5kaW5nT3BlbkNhbGwtPnZlcnNpb24oKSkpOwotICAgICAgICAg
ICAgcGVuZGluZ09wZW5DYWxsLT5jYWxsYmFja3MoKS0+b25FcnJvcihJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgbWVzc2FnZSkpOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0
ZVRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3Jl
SWRzLCB1bnNpZ25lZCBzaG9ydCBtb2RlKQotewotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmQ+IHRyYW5zYWN0aW9uID0gbV9mYWN0b3J5LT5tYXliZUNyZWF0ZVRyYW5zYWN0aW9uQmFj
a2VuZCh0aGlzLCB0cmFuc2FjdGlvbklkLCBjYWxsYmFja3MsIG9iamVjdFN0b3JlSWRzLCBzdGF0
aWNfY2FzdDxJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZT4obW9kZSkpOwotCi0gICAgaWYgKCF0
cmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9u
cy5jb250YWlucyh0cmFuc2FjdGlvbklkKSk7Ci0gICAgbV90cmFuc2FjdGlvbnMuYWRkKHRyYW5z
YWN0aW9uSWQsIHRyYW5zYWN0aW9uLmdldCgpKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpvcGVuQ29ubmVjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJh
Y2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBwcnBEYXRhYmFzZUNhbGxiYWNr
cywgaW50NjRfdCB0cmFuc2FjdGlvbklkLCB1aW50NjRfdCB2ZXJzaW9uKQotewotICAgIFJlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzID0gcHJwRGF0YWJhc2VDYWxsYmFj
a3M7Ci0KLSAgICBtX3BlbmRpbmdPcGVuQ2FsbHMuYXBwZW5kKElEQlBlbmRpbmdPcGVuQ2FsbDo6
Y3JlYXRlKCpjYWxsYmFja3MsICpkYXRhYmFzZUNhbGxiYWNrcywgdHJhbnNhY3Rpb25JZCwgdmVy
c2lvbikpOwotCi0gICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOwotfQotCi0KLXZvaWQgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkNvbm5lY3Rpb25JbnRlcm5hbChQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBw
cnBEYXRhYmFzZUNhbGxiYWNrcywgaW50NjRfdCB0cmFuc2FjdGlvbklkLCB1aW50NjRfdCB2ZXJz
aW9uKQotewotICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZS5nZXQoKSk7Ci0gICAgQVNTRVJUKG1f
cGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKCFtX3J1bm5pbmdWZXJz
aW9uQ2hhbmdlVHJhbnNhY3Rpb24pOwotCi0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0
YWJhc2VDYWxsYmFja3MgPSBwcnBEYXRhYmFzZUNhbGxiYWNrczsKLQotICAgIC8vIFdlIGluZmVy
IHRoYXQgdGhlIGRhdGFiYXNlIGRpZG4ndCBleGlzdCBmcm9tIGl0cyBsYWNrIG9mIGVpdGhlciB0
eXBlIG9mIHZlcnNpb24uCi0gICAgYm9vbCBpc05ld0RhdGFiYXNlID0gbV9tZXRhZGF0YS52ZXJz
aW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbjsKLQotICAgIGlmICh2ZXJz
aW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6OkRlZmF1bHRJbnRWZXJzaW9uKSB7Ci0gICAgICAg
IC8vIEZJWE1FOiB0aGlzIGNvbW1lbnRzIHdhcyByZWxhdGVkIHRvIENocm9taXVtIGNvZGUuIEl0
IG1heSBiZSBpbmNvcnJlY3QKLSAgICAgICAgLy8gRm9yIHVuaXQgdGVzdHMgb25seSAtIHNraXAg
dXBncmFkZSBzdGVwcy4gQ2FsbGluZyBmcm9tIHNjcmlwdCB3aXRoIERlZmF1bHRJbnRWZXJzaW9u
IHRocm93cyBleGNlcHRpb24uCi0gICAgICAgIEFTU0VSVChpc05ld0RhdGFiYXNlKTsKLSAgICAg
ICAgbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5hZGQoZGF0YWJhc2VDYWxsYmFja3MpOwotICAgICAg
ICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0aGlzLCB0aGlzLT5tZXRhZGF0YSgpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmICh2ZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6
Ok5vSW50VmVyc2lvbikgewotICAgICAgICBpZiAoIWlzTmV3RGF0YWJhc2UpIHsKLSAgICAgICAg
ICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNr
cz4oZGF0YWJhc2VDYWxsYmFja3MpKTsKLSAgICAgICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNz
KHRoaXMsIHRoaXMtPm1ldGFkYXRhKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIC8vIFNwZWMgc2F5czogSWYgbm8gdmVyc2lvbiBpcyBzcGVjaWZpZWQgYW5kIG5v
IGRhdGFiYXNlIGV4aXN0cywgc2V0IGRhdGFiYXNlIHZlcnNpb24gdG8gMS4KLSAgICAgICAgdmVy
c2lvbiA9IDE7Ci0gICAgfQotCi0gICAgaWYgKHZlcnNpb24gPiBtX21ldGFkYXRhLnZlcnNpb24p
IHsKLSAgICAgICAgcnVuSW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKGNhbGxiYWNrcywgZGF0
YWJhc2VDYWxsYmFja3MsIHRyYW5zYWN0aW9uSWQsIHZlcnNpb24pOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKHZlcnNpb24gPCBtX21ldGFkYXRhLnZlcnNpb24pIHsKLSAgICAg
ICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6VmVyc2lvbkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiVGhlIHJlcXVlc3RlZCB2
ZXJzaW9uICglbGx1KSBpcyBsZXNzIHRoYW4gdGhlIGV4aXN0aW5nIHZlcnNpb24gKCVsbHUpLiIs
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4odmVyc2lvbiksIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGxvbmcgbG9uZz4obV9tZXRhZGF0YS52ZXJzaW9uKSkpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIEFTU0VSVCh2ZXJzaW9uID09IG1fbWV0YWRhdGEudmVyc2lvbik7Ci0g
ICAgbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5hZGQoZGF0YWJhc2VDYWxsYmFja3MpOwotICAgIGNh
bGxiYWNrcy0+b25TdWNjZXNzKHRoaXMsIHRoaXMtPm1ldGFkYXRhKCkpOwotfQotCi12b2lkIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OnJ1bkludFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
Q2FsbGJhY2tzPiBwcnBEYXRhYmFzZUNhbGxiYWNrcywgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBp
bnQ2NF90IHJlcXVlc3RlZFZlcnNpb24pCi17Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4g
ZGF0YWJhc2VDYWxsYmFja3MgPSBwcnBEYXRhYmFzZUNhbGxiYWNrczsKLSAgICBBU1NFUlQoY2Fs
bGJhY2tzKTsKLSAgICBmb3IgKERhdGFiYXNlQ2FsbGJhY2tzU2V0Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYmVnaW4oKTsgaXQgIT0gbV9kYXRhYmFzZUNhbGxi
YWNrc1NldC5lbmQoKTsgKytpdCkgewotICAgICAgICAvLyBGcm9udCBlbmQgZW5zdXJlcyB0aGUg
ZXZlbnQgaXMgbm90IGZpcmVkIGF0IGNvbm5lY3Rpb25zIHRoYXQgaGF2ZSBjbG9zZVBlbmRpbmcg
c2V0LgotICAgICAgICBpZiAoKml0ICE9IGRhdGFiYXNlQ2FsbGJhY2tzKQotICAgICAgICAgICAg
KCppdCktPm9uVmVyc2lvbkNoYW5nZShtX21ldGFkYXRhLnZlcnNpb24sIHJlcXVlc3RlZFZlcnNp
b24sIEluZGV4ZWREQjo6TnVsbFZlcnNpb24pOwotICAgIH0KLSAgICAvLyBUaGUgc3BlYyBkaWN0
YXRlcyB3ZSB3YWl0IHVudGlsIGFsbCB0aGUgdmVyc2lvbiBjaGFuZ2UgZXZlbnRzIGFyZQotICAg
IC8vIGRlbGl2ZXJlZCBhbmQgdGhlbiBjaGVjayBtX2RhdGFiYXNlQ2FsbGJhY2tzLmVtcHR5KCkg
YmVmb3JlIHByb2NlZWRpbmcKLSAgICAvLyBvciBmaXJpbmcgYSBibG9ja2VkIGV2ZW50LCBidXQg
aW5zdGVhZCB3ZSBzaG91bGQgYmUgY29uc2lzdGVudCB3aXRoIGhvdwotICAgIC8vIHRoZSBvbGQg
c2V0VmVyc2lvbiAoaW5jb3JyZWN0bHkpIGRpZCBpdC4KLSAgICAvLyBGSVhNRTogUmVtb3ZlIHRo
ZSBjYWxsIHRvIG9uQmxvY2tlZCBhbmQgaW5zdGVhZCB3YWl0IHVudGlsIHRoZSBmcm9udGVuZAot
ICAgIC8vIHRlbGxzIHVzIHRoYXQgYWxsIHRoZSBibG9ja2VkIGV2ZW50cyBoYXZlIGJlZW4gZGVs
aXZlcmVkLiBTZWUKLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzExMzAKLSAgICBpZiAoY29ubmVjdGlvbkNvdW50KCkpCi0gICAgICAgIGNhbGxiYWNrcy0+
b25CbG9ja2VkKG1fbWV0YWRhdGEudmVyc2lvbik7Ci0gICAgLy8gRklYTUU6IEFkZCB0ZXN0IGZv
ciBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24uCi0gICAgaWYgKG1fcnVubmluZ1Zl
cnNpb25DaGFuZ2VUcmFuc2FjdGlvbiB8fCBjb25uZWN0aW9uQ291bnQoKSkgewotICAgICAgICBt
X3BlbmRpbmdPcGVuQ2FsbHMuYXBwZW5kKElEQlBlbmRpbmdPcGVuQ2FsbDo6Y3JlYXRlKCpjYWxs
YmFja3MsICpkYXRhYmFzZUNhbGxiYWNrcywgdHJhbnNhY3Rpb25JZCwgcmVxdWVzdGVkVmVyc2lv
bikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPGludDY0X3Q+IG9iamVj
dFN0b3JlSWRzOwotICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWQsIGRhdGFiYXNl
Q2FsbGJhY2tzLCBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25D
aGFuZ2UpOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IHRyYW5zYWN0aW9uID0g
bV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotCi0gICAgdHJhbnNhY3Rpb24tPnNj
aGVkdWxlVmVyc2lvbkNoYW5nZU9wZXJhdGlvbih0cmFuc2FjdGlvbklkLCByZXF1ZXN0ZWRWZXJz
aW9uLCBjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzLCBtX21ldGFkYXRhKTsKLQotICAgIEFT
U0VSVCghbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4pOwotICAgIG1fZGF0YWJhc2VDYWxsYmFja3NT
ZXQuYWRkKGRhdGFiYXNlQ2FsbGJhY2tzKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpkZWxldGVEYXRhYmFzZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tz
KQotewotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsK
LSAgICBpZiAoaXNEZWxldGVEYXRhYmFzZUJsb2NrZWQoKSkgewotICAgICAgICBmb3IgKERhdGFi
YXNlQ2FsbGJhY2tzU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VDYWxsYmFja3NT
ZXQuYmVnaW4oKTsgaXQgIT0gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5lbmQoKTsgKytpdCkgewot
ICAgICAgICAgICAgLy8gRnJvbnQgZW5kIGVuc3VyZXMgdGhlIGV2ZW50IGlzIG5vdCBmaXJlZCBh
dCBjb25uZWN0aW9ucyB0aGF0IGhhdmUgY2xvc2VQZW5kaW5nIHNldC4KLSAgICAgICAgICAgICgq
aXQpLT5vblZlcnNpb25DaGFuZ2UobV9tZXRhZGF0YS52ZXJzaW9uLCAwLCBJbmRleGVkREI6Ok51
bGxWZXJzaW9uKTsKLSAgICAgICAgfQotICAgICAgICAvLyBGSVhNRTogT25seSBmaXJlIG9uQmxv
Y2tlZCBpZiB0aGVyZSBhcmUgb3BlbiBjb25uZWN0aW9ucyBhZnRlciB0aGUKLSAgICAgICAgLy8g
VmVyc2lvbkNoYW5nZUV2ZW50cyBhcmUgcmVjZWl2ZWQsIG5vdCBqdXN0IHNldCB1cCB0byBmaXJl
LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEx
MzAKLSAgICAgICAgY2FsbGJhY2tzLT5vbkJsb2NrZWQobV9tZXRhZGF0YS52ZXJzaW9uKTsKLSAg
ICAgICAgbV9wZW5kaW5nRGVsZXRlQ2FsbHMuYXBwZW5kKElEQlBlbmRpbmdEZWxldGVDYWxsOjpj
cmVhdGUoY2FsbGJhY2tzLnJlbGVhc2UoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGRlbGV0ZURhdGFiYXNlQXN5bmMoY2FsbGJhY2tzLnJlbGVhc2UoKSk7Ci19Ci0KLWJvb2wgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6aXNEZWxldGVEYXRhYmFzZUJsb2NrZWQoKQotewotICAgIHJl
dHVybiBjb25uZWN0aW9uQ291bnQoKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpkZWxldGVEYXRhYmFzZUFzeW5jKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Mp
Ci17Ci0gICAgQVNTRVJUKCFpc0RlbGV0ZURhdGFiYXNlQmxvY2tlZCgpKTsKLSAgICBBU1NFUlQo
bV9iYWNraW5nU3RvcmUpOwotCi0gICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IHNl
bGYodGhpcyk7Ci0gICAgbV9iYWNraW5nU3RvcmUtPmRlbGV0ZURhdGFiYXNlKG1fbWV0YWRhdGEu
bmFtZSwgW3NlbGYsIGNhbGxiYWNrc10oYm9vbCBzdWNjZXNzKSB7Ci0gICAgICAgIEFTU0VSVChz
ZWxmLT5tX2RlbGV0ZUNhbGxiYWNrc1dhaXRpbmdDb21wbGV0aW9uLmNvbnRhaW5zKGNhbGxiYWNr
cykpOwotICAgICAgICBzZWxmLT5tX2RlbGV0ZUNhbGxiYWNrc1dhaXRpbmdDb21wbGV0aW9uLnJl
bW92ZShjYWxsYmFja3MpOwotCi0gICAgICAgIC8vIElmIHRoaXMgSURCRGF0YWJhc2VCYWNrZW5k
IHdhcyBjbG9zZWQgd2hpbGUgd2FpdGluZyBmb3IgZGVsZXRlRGF0YWJhc2UgdG8gY29tcGxldGUs
IG5vIHBvaW50IGluIHBlcmZvcm1pbmcgYW55IGNhbGxiYWNrcy4KLSAgICAgICAgaWYgKCFzZWxm
LT5tX2JhY2tpbmdTdG9yZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoc3Vj
Y2VzcykgewotICAgICAgICAgICAgc2VsZi0+bV9tZXRhZGF0YS5pZCA9IEludmFsaWRJZDsKLSAg
ICAgICAgICAgIHNlbGYtPm1fbWV0YWRhdGEudmVyc2lvbiA9IElEQkRhdGFiYXNlTWV0YWRhdGE6
Ok5vSW50VmVyc2lvbjsKLSAgICAgICAgICAgIHNlbGYtPm1fbWV0YWRhdGEub2JqZWN0U3RvcmVz
LmNsZWFyKCk7Ci0gICAgICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcygpOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpj
cmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9y
IGRlbGV0aW5nIGRhdGFiYXNlLiIpKTsKLQotICAgICAgICBzZWxmLT5wcm9jZXNzUGVuZGluZ0Nh
bGxzKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y2xvc2Uo
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzKQotewotICAgIFJl
ZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAg
IEFTU0VSVChtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmNvbnRhaW5zKGNhbGxiYWNrcykpOwotCi0g
ICAgbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5yZW1vdmUoY2FsbGJhY2tzKTsKLSAgICBpZiAobV9w
ZW5kaW5nU2Vjb25kSGFsZk9wZW4gJiYgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4tPmRhdGFiYXNl
Q2FsbGJhY2tzKCkgPT0gY2FsbGJhY2tzKSB7Ci0gICAgICAgIG1fcGVuZGluZ1NlY29uZEhhbGZP
cGVuLT5jYWxsYmFja3MoKS0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IsICJUaGUgY29ubmVjdGlvbiB3YXMgY2xvc2VkLiIp
KTsKLSAgICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4ucmVsZWFzZSgpOwotICAgIH0KLQot
ICAgIGlmIChjb25uZWN0aW9uQ291bnQoKSA+IDEpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8v
IHByb2Nlc3NQZW5kaW5nQ2FsbHMgYWxsb3dzIHRoZSBpbnNwZWN0b3IgdG8gcHJvY2VzcyBhIHBl
bmRpbmcgb3BlbiBjYWxsCi0gICAgLy8gYW5kIGNhbGwgY2xvc2UsIHJlZW50ZXJpbmcgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6Y2xvc2UuIFRoZW4gdGhlCi0gICAgLy8gYmFja2VuZCB3b3VsZCBi
ZSByZW1vdmVkIGJvdGggYnkgdGhlIGluc3BlY3RvciBjbG9zaW5nIGl0cyBjb25uZWN0aW9uLCBh
bmQKLSAgICAvLyBieSB0aGUgY29ubmVjdGlvbiB0aGF0IGZpcnN0IGNhbGxlZCBjbG9zZS4KLSAg
ICAvLyBUbyBhdm9pZCB0aGF0IHNpdHVhdGlvbiwgZG9uJ3QgcHJvY2VlZCBpbiBjYXNlIG9mIHJl
ZW50cmFuY3kuCi0gICAgaWYgKG1fY2xvc2luZ0Nvbm5lY3Rpb24pCi0gICAgICAgIHJldHVybjsK
LSAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gY2xvc2luZ0Nvbm5lY3Rpb24obV9jbG9zaW5nQ29u
bmVjdGlvbiwgdHJ1ZSk7Ci0gICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOwotCi0gICAgLy8gRklY
TUU6IEFkZCBhIHRlc3QgZm9yIHRoZSBtX3BlbmRpbmdPcGVuQ2FsbHMgY2FzZXMgYmVsb3cuCi0g
ICAgaWYgKCFjb25uZWN0aW9uQ291bnQoKSAmJiAhbV9wZW5kaW5nT3BlbkNhbGxzLnNpemUoKSAm
JiAhbV9wZW5kaW5nRGVsZXRlQ2FsbHMuc2l6ZSgpKSB7Ci0gICAgICAgIFRyYW5zYWN0aW9uTWFw
IHRyYW5zYWN0aW9ucyhtX3RyYW5zYWN0aW9ucyk7Ci0gICAgICAgIFJlZlB0cjxJREJEYXRhYmFz
ZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VW5rbm93bkVycm9yLCAiQ29ubmVjdGlvbiBpcyBjbG9zaW5nLiIpOwotICAgICAgICBm
b3IgKFRyYW5zYWN0aW9uTWFwOjpjb25zdF9pdGVyYXRvcjo6VmFsdWVzIGl0ID0gdHJhbnNhY3Rp
b25zLnZhbHVlcygpLmJlZ2luKCksIGVuZCA9IHRyYW5zYWN0aW9ucy52YWx1ZXMoKS5lbmQoKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgKCppdCktPmFib3J0KGVycm9yKTsKLQotICAg
ICAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuaXNFbXB0eSgpKTsKLQotICAgICAgICBtX2JhY2tp
bmdTdG9yZS5jbGVhcigpOwotCi0gICAgICAgIC8vIFRoaXMgY2hlY2sgc2hvdWxkIG9ubHkgYmUg
ZmFsc2UgaW4gdW5pdCB0ZXN0cy4KLSAgICAgICAgQVNTRVJUKG1fZmFjdG9yeSk7Ci0gICAgICAg
IGlmIChtX2ZhY3RvcnkpCi0gICAgICAgICAgICBtX2ZhY3RvcnktPnJlbW92ZUlEQkRhdGFiYXNl
QmFja2VuZChtX2lkZW50aWZpZXIpOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkZGJlMGMuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQkRhdGFiYXNl
QmFja2VuZEltcGxfaAotI2RlZmluZSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsX2gKLQotI2luY2x1
ZGUgIklEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIklEQk1ldGFkYXRh
LmgiCi0jaW5jbHVkZSAiSURCUGVuZGluZ0RlbGV0ZUNhbGwuaCIKLSNpbmNsdWRlIDxzdGRpbnQu
aD4KLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2lu
Y2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNl
OwotY2xhc3MgSURCRGF0YWJhc2U7Ci1jbGFzcyBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZTsK
LWNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZDsKLWNsYXNzIElEQlRyYW5zYWN0aW9uQ29vcmRp
bmF0b3I7Ci0KLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGwgRklOQUwgOiBwdWJsaWMgSURC
RGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJC
YWNraW5nU3RvcmVJbnRlcmZhY2UqLCBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSosIGNvbnN0
IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllcik7Ci0gICAgdmlydHVhbCB+SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbCgpOwotCi0gICAgdmlydHVhbCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tp
bmdTdG9yZSgpIGNvbnN0IE9WRVJSSURFOwotCi0gICAgc3RhdGljIGNvbnN0IGludDY0X3QgSW52
YWxpZElkID0gMDsKLSAgICB2aXJ0dWFsIGludDY0X3QgaWQoKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiBtX21ldGFkYXRhLmlkOyB9Ci0gICAgdmlydHVhbCB2b2lkIGFkZE9iamVjdFN0b3JlKGNv
bnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBpbnQ2NF90IG5ld01heE9iamVjdFN0b3JlSWQp
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVPYmplY3RTdG9yZShpbnQ2NF90IG9i
amVjdFN0b3JlSWQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBhZGRJbmRleChpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmLCBpbnQ2NF90IG5ld01heElu
ZGV4SWQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJbmRleChpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkgT1ZFUlJJREU7Ci0KLSAgICB2b2lkIG9wZW5D
b25uZWN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUNhbGxiYWNrcz4sIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgdWludDY0X3QgdmVyc2lvbik7Ci0g
ICAgdm9pZCBkZWxldGVEYXRhYmFzZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotCi0gICAg
Ly8gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZU9i
amVjdFN0b3JlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQp
OwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5zYWN0aW9u
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRyYW5z
YWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxi
YWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIHVuc2lnbmVkIHNo
b3J0IG1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZShQYXNzUmVmUHRyPElEQkRhdGFiYXNl
Q2FsbGJhY2tzPik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KGludDY0X3QgdHJhbnNhY3Rp
b25JZCk7Ci0gICAgdmlydHVhbCB2b2lkIGFib3J0KGludDY0X3QgdHJhbnNhY3Rpb25JZCk7Ci0g
ICAgdmlydHVhbCB2b2lkIGFib3J0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUVycm9yPik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW5kZXgoaW50NjRf
dCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wg
bXVsdGlFbnRyeSk7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QgdHJhbnNh
Y3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOwotCi0gICAg
SURCVHJhbnNhY3Rpb25Db29yZGluYXRvciogdHJhbnNhY3Rpb25Db29yZGluYXRvcigpIGNvbnN0
IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQoKTsgfQotICAgIHZvaWQgdHJh
bnNhY3Rpb25TdGFydGVkKElEQlRyYW5zYWN0aW9uQmFja2VuZCopOwotICAgIHZvaWQgdHJhbnNh
Y3Rpb25GaW5pc2hlZChJREJUcmFuc2FjdGlvbkJhY2tlbmQqKTsKLSAgICB2b2lkIHRyYW5zYWN0
aW9uRmluaXNoZWRBbmRDb21wbGV0ZUZpcmVkKElEQlRyYW5zYWN0aW9uQmFja2VuZCopOwotICAg
IHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZEFuZEFib3J0RmlyZWQoSURCVHJhbnNhY3Rpb25CYWNr
ZW5kKik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+LCBib29sIGtleU9ubHksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPikgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCB2b2lkIHB1dChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktl
eT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0
X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mKSBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0SW5kZXhLZXlzKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVj
dG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mKSBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGludDY0X3QgdHJhbnNhY3Rpb25J
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRz
KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihpbnQ2NF90IHRyYW5zYWN0
aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24sIGJvb2wga2V5T25seSwg
VGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPikgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCB2b2lkIGNvdW50KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4pIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVSYW5nZShpbnQ2
NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPikgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCB2b2lkIGNsZWFyKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pIE9WRVJSSURFOwotCi0gICAgdmlydHVhbCBjb25z
dCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJu
IG1fbWV0YWRhdGE7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q3VycmVudFZlcnNpb24odWludDY0
X3QgdmVyc2lvbikgT1ZFUlJJREUgeyBtX21ldGFkYXRhLnZlcnNpb24gPSB2ZXJzaW9uOyB9Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgaXNJREJEYXRhYmFzZUJhY2tlbmRJbXBsKCkgT1ZFUlJJREUgeyBy
ZXR1cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdTZWNvbmRIYWxmT3Bl
bigpIE9WRVJSSURFIHsgcmV0dXJuIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuOyB9Ci0gICAgdmly
dHVhbCB2b2lkIHNldFBlbmRpbmdTZWNvbmRIYWxmT3BlbihQYXNzT3duUHRyPElEQlBlbmRpbmdP
cGVuQ2FsbD4gcGVuZGluZ09wZW5DYWxsKSBPVkVSUklERSB7IG1fcGVuZGluZ1NlY29uZEhhbGZP
cGVuID0gcGVuZGluZ09wZW5DYWxsOyB9Ci0KLSAgICB2aXJ0dWFsIElEQkZhY3RvcnlCYWNrZW5k
SW50ZXJmYWNlJiBmYWN0b3J5QmFja2VuZCgpIE9WRVJSSURFIHsgcmV0dXJuICptX2ZhY3Rvcnk7
IH0KLQotICAgIGNsYXNzIFZlcnNpb25DaGFuZ2VPcGVyYXRpb247Ci0gICAgY2xhc3MgVmVyc2lv
bkNoYW5nZUFib3J0T3BlcmF0aW9uOwotCi1wcml2YXRlOgotICAgIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqLCBJREJG
YWN0b3J5QmFja2VuZEludGVyZmFjZSosIGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllcik7
Ci0KLSAgICB2b2lkIG9wZW5Db25uZWN0aW9uSW50ZXJuYWwoUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgaW50NjRfdCB0cmFuc2FjdGlv
bklkLCB1aW50NjRfdCB2ZXJzaW9uKTsKLQotICAgIHZvaWQgb3BlbkludGVybmFsQXN5bmMoKTsK
LSAgICB2b2lkIGRpZE9wZW5JbnRlcm5hbEFzeW5jKGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEm
LCBib29sIHN1Y2Nlc3MpOwotCi0gICAgdm9pZCBydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rp
b24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJh
Y2tzPiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24pOwot
ICAgIHNpemVfdCBjb25uZWN0aW9uQ291bnQoKTsKLSAgICB2b2lkIHByb2Nlc3NQZW5kaW5nQ2Fs
bHMoKTsKLSAgICB2b2lkIHByb2Nlc3NQZW5kaW5nT3BlbkNhbGxzKGJvb2wgc3VjY2Vzcyk7Ci0K
LSAgICBib29sIGlzRGVsZXRlRGF0YWJhc2VCbG9ja2VkKCk7Ci0gICAgdm9pZCBkZWxldGVEYXRh
YmFzZUFzeW5jKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0KLSAgICBSZWZQdHI8SURCQmFj
a2luZ1N0b3JlSW50ZXJmYWNlPiBtX2JhY2tpbmdTdG9yZTsKLSAgICBJREJEYXRhYmFzZU1ldGFk
YXRhIG1fbWV0YWRhdGE7Ci0KLSAgICBTdHJpbmcgbV9pZGVudGlmaWVyOwotICAgIC8vIFRoaXMg
bWlnaHQgbm90IG5lZWQgdG8gYmUgYSBSZWZQdHIgc2luY2UgdGhlIGZhY3RvcnkncyBsaWZldGlt
ZSBpcyB0aGF0IG9mIHRoZSBwYWdlIGdyb3VwLCBidXQgaXQncyBiZXR0ZXIgdG8gYmUgY29uc2Vy
dmF0aXZlIHRoYW4gc29ycnkuCi0gICAgUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNl
PiBtX2ZhY3Rvcnk7Ci0KLSAgICBPd25QdHI8SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcj4gbV90
cmFuc2FjdGlvbkNvb3JkaW5hdG9yOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+
IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbjsKLQotICAgIHR5cGVkZWYgSGFzaE1h
cDxpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmQqPiBUcmFuc2FjdGlvbk1hcDsKLSAgICBU
cmFuc2FjdGlvbk1hcCBtX3RyYW5zYWN0aW9uczsKLQotICAgIERlcXVlPE93blB0cjxJREJQZW5k
aW5nT3BlbkNhbGw+PiBtX3BlbmRpbmdPcGVuQ2FsbHM7Ci0gICAgT3duUHRyPElEQlBlbmRpbmdP
cGVuQ2FsbD4gbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW47Ci0KLSAgICBEZXF1ZTxPd25QdHI8SURC
UGVuZGluZ0RlbGV0ZUNhbGw+PiBtX3BlbmRpbmdEZWxldGVDYWxsczsKLSAgICBIYXNoU2V0PFJl
ZlB0cjxJREJDYWxsYmFja3M+PiBtX2RlbGV0ZUNhbGxiYWNrc1dhaXRpbmdDb21wbGV0aW9uOwot
Ci0gICAgdHlwZWRlZiBMaXN0SGFzaFNldDxSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+PiBE
YXRhYmFzZUNhbGxiYWNrc1NldDsKLSAgICBEYXRhYmFzZUNhbGxiYWNrc1NldCBtX2RhdGFiYXNl
Q2FsbGJhY2tzU2V0OwotCi0gICAgYm9vbCBtX2Nsb3NpbmdDb25uZWN0aW9uOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0Up
Ci0KLSNlbmRpZiAvLyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW50
ZXJmYWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5YWRkNzguLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlX2gKLSNkZWZpbmUgSURCRGF0YWJhc2VCYWNr
ZW5kSW50ZXJmYWNlX2gKLQotI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgotI2luY2x1ZGUgIklE
QkRhdGFiYXNlQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFcnJvci5oIgotI2lu
Y2x1ZGUgIklEQlBlbmRpbmdPcGVuQ2FsbC5oIgotI2luY2x1ZGUgIkluZGV4ZWREQi5oIgotI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOwotY2xhc3MgSURCRmFjdG9yeUJhY2tl
bmRJbnRlcmZhY2U7Ci1jbGFzcyBJREJLZXk7Ci1jbGFzcyBJREJLZXlQYXRoOwotY2xhc3MgSURC
S2V5UmFuZ2U7Ci1jbGFzcyBTaGFyZWRCdWZmZXI7Ci0KLXN0cnVjdCBJREJEYXRhYmFzZU1ldGFk
YXRhOwotc3RydWN0IElEQkluZGV4TWV0YWRhdGE7Ci1zdHJ1Y3QgSURCT2JqZWN0U3RvcmVNZXRh
ZGF0YTsKLQotdHlwZWRlZiBWZWN0b3I8UmVmUHRyPElEQktleT4+IEluZGV4S2V5czsKLXR5cGVk
ZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KLS8vIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbCBhbmQgb3B0aW9uYWxseSBvdGhlcnMgKGluIG9yZGVyIHRvIHByb3h5
Ci0vLyBjYWxscyBhY3Jvc3MgcHJvY2VzcyBiYXJyaWVycykuIEFsbCBjYWxscyB0byB0aGVzZSBj
bGFzc2VzIHNob3VsZCBiZSBub24tYmxvY2tpbmcgYW5kCi0vLyB0cmlnZ2VyIHdvcmsgb24gYSBi
YWNrZ3JvdW5kIHRocmVhZCBpZiBuZWNlc3NhcnkuCi1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJ
bnRlcmZhY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+
IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UoKSB7
IH0KLQotICAgIHZpcnR1YWwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUo
KSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRf
dCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUcmFuc2FjdGlvbihp
bnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBj
b25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCB1bnNpZ25lZCBzaG9ydCBtb2Rl
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxs
YmFja3M+KSA9IDA7Ci0KLSAgICAvLyBUcmFuc2FjdGlvbi1zcGVjaWZpYyBvcGVyYXRpb25zLgot
ICAgIHZpcnR1YWwgdm9pZCBjb21taXQoaW50NjRfdCB0cmFuc2FjdGlvbklkKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGFib3J0KGludDY0X3QgdHJhbnNhY3Rpb25JZCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBhYm9ydChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VFcnJvcj4pID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJbmRleChpbnQ2NF90IHRy
YW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0
aUVudHJ5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QgdHJhbnNh
Y3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpID0gMDsKLQot
ICAgIGVudW0gVGFza1R5cGUgewotICAgICAgICBOb3JtYWxUYXNrID0gMCwKLSAgICAgICAgUHJl
ZW1wdGl2ZVRhc2sKLSAgICB9OwotCi0gICAgZW51bSBQdXRNb2RlIHsKLSAgICAgICAgQWRkT3JV
cGRhdGUsCi0gICAgICAgIEFkZE9ubHksCi0gICAgICAgIEN1cnNvclVwZGF0ZQotICAgIH07Ci0K
LSAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBNaW5pbXVtSW5kZXhJZCA9IDMwOwotCi0gICAgdmly
dHVhbCB2b2lkIGdldChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgYm9vbCBrZXlPbmx5
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pID0gMDsKLSAgICAvLyBOb3RlIHRoYXQgJ3ZhbHVl
JyBtYXkgYmUgY29uc3VtZWQvYWRvcHRlZCBieSB0aGlzIGNhbGwuCi0gICAgdmlydHVhbCB2b2lk
IHB1dChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1Jl
ZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywg
Y29uc3QgVmVjdG9yPEluZGV4S2V5cz4mKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldEluZGV4
S2V5cyhpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1Jl
ZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJ
ZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJ
bmRleGVzUmVhZHkoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
b3BlbkN1cnNvcihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgSW5kZXhlZERCOjpDdXJz
b3JEaXJlY3Rpb24sIGJvb2wga2V5T25seSwgVGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb3VudChpbnQ2NF90IHRyYW5zYWN0aW9uSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGRlbGV0ZVJhbmdlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pID0gMDsKLQotICAgIHZpcnR1
YWwgaW50NjRfdCBpZCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkT2JqZWN0U3Rv
cmUoY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIGludDY0X3QgbmV3TWF4T2JqZWN0U3Rv
cmVJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVPYmplY3RTdG9yZShpbnQ2NF90IG9i
amVjdFN0b3JlSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkSW5kZXgoaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiwgaW50NjRfdCBuZXdNYXhJbmRleElk
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUluZGV4KGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IElEQkRhdGFiYXNl
TWV0YWRhdGEmIG1ldGFkYXRhKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJy
ZW50VmVyc2lvbih1aW50NjRfdCkgPSAwOwotCi0gICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdT
ZWNvbmRIYWxmT3BlbigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UGVuZGluZ1NlY29uZEhh
bGZPcGVuKFBhc3NPd25QdHI8SURCUGVuZGluZ09wZW5DYWxsPikgPSAwOwotCi0gICAgdmlydHVh
bCBib29sIGlzSURCRGF0YWJhc2VCYWNrZW5kSW1wbCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAg
ICB2aXJ0dWFsIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlJiBmYWN0b3J5QmFja2VuZCgpID0g
MDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJ
REJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgKaW5k
ZXggZTFhNWZjMy4uNjEwMWFlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oCkBAIC00MCw4
ICs0MCw5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIElEQkNhbGxiYWNrczsKK2Ns
YXNzIElEQkN1cnNvckJhY2tlbmQ7CiBjbGFzcyBJREJEYXRhYmFzZTsKLWNsYXNzIElEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZTsKK2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZDsKIGNsYXNzIElE
QkRhdGFiYXNlQ2FsbGJhY2tzOwogY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kOwogY2xhc3Mg
U2VjdXJpdHlPcmlnaW47CkBAIC02NCw5ICs2NSw5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVJREJEYXRhYmFzZUJhY2tlbmQoY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlm
aWVyKSA9IDA7CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
PiBtYXliZUNyZWF0ZVRyYW5zYWN0aW9uQmFja2VuZChJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZh
Y2UqLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFj
a3M+LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRy
YW5zYWN0aW9uTW9kZSkgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmQ+IG1heWJlQ3JlYXRlVHJhbnNhY3Rpb25CYWNrZW5kKElEQkRhdGFiYXNlQmFja2Vu
ZCosIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNr
cz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJh
bnNhY3Rpb25Nb2RlKSA9IDA7CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFj
a2VuZD4gY3JlYXRlQ3Vyc29yQmFja2VuZChJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBJREJCYWNr
aW5nU3RvcmVDdXJzb3JJbnRlcmZhY2UmLCBJbmRleGVkREI6OkN1cnNvclR5cGUsIElEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgPSAw
OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiBjcmVhdGVDdXJzb3JC
YWNrZW5kKElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVy
ZmFjZSYsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlw
ZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRl
eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAKaW5k
ZXggNjM4MmNiOC4uZGY2MzczNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCSW5kZXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkluZGV4LmNwcApAQCAtNzEsNyArNzEsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IElEQkluZGV4OjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBh
cwogCiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUo
Y29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwogICAg
IHJlcXVlc3QtPnNldEN1cnNvckRldGFpbHMoSW5kZXhlZERCOjpDdXJzb3JLZXlBbmRWYWx1ZSwg
ZGlyZWN0aW9uKTsKLSAgICBiYWNrZW5kREIoKS0+b3BlbkN1cnNvcihtX3RyYW5zYWN0aW9uLT5p
ZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCBtX21ldGFkYXRhLmlkLCBrZXlSYW5nZSwgZGlyZWN0
aW9uLCBmYWxzZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpOb3JtYWxUYXNrLCByZXF1
ZXN0KTsKKyAgICBiYWNrZW5kREIoKS0+b3BlbkN1cnNvcihtX3RyYW5zYWN0aW9uLT5pZCgpLCBt
X29iamVjdFN0b3JlLT5pZCgpLCBtX21ldGFkYXRhLmlkLCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBm
YWxzZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpOb3JtYWxUYXNrLCByZXF1ZXN0KTsKICAgICByZXR1
cm4gcmVxdWVzdDsKIH0KIApAQCAtMTI2LDcgKzEyNiw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gSURCSW5kZXg6Om9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwKIAogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRl
KGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKICAg
ICByZXF1ZXN0LT5zZXRDdXJzb3JEZXRhaWxzKEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSwgZGly
ZWN0aW9uKTsKLSAgICBiYWNrZW5kREIoKS0+b3BlbkN1cnNvcihtX3RyYW5zYWN0aW9uLT5pZCgp
LCBtX29iamVjdFN0b3JlLT5pZCgpLCBtX21ldGFkYXRhLmlkLCBrZXlSYW5nZSwgZGlyZWN0aW9u
LCB0cnVlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6Ok5vcm1hbFRhc2ssIHJlcXVlc3Qp
OworICAgIGJhY2tlbmREQigpLT5vcGVuQ3Vyc29yKG1fdHJhbnNhY3Rpb24tPmlkKCksIG1fb2Jq
ZWN0U3RvcmUtPmlkKCksIG1fbWV0YWRhdGEuaWQsIGtleVJhbmdlLCBkaXJlY3Rpb24sIHRydWUs
IElEQkRhdGFiYXNlQmFja2VuZDo6Tm9ybWFsVGFzaywgcmVxdWVzdCk7CiAgICAgcmV0dXJuIHJl
cXVlc3Q7CiB9CiAKQEAgLTIwMCw3ICsyMDAsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElE
QkluZGV4OjpnZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZgog
ICAgIHJldHVybiByZXF1ZXN0OwogfQogCi1JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UqIElE
QkluZGV4OjpiYWNrZW5kREIoKSBjb25zdAorSURCRGF0YWJhc2VCYWNrZW5kKiBJREJJbmRleDo6
YmFja2VuZERCKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV90cmFuc2FjdGlvbi0+YmFja2VuZERC
KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaAppbmRl
eCBhYzgwYzUwLi4yMDU2MGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJJbmRleC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkluZGV4LmgKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBtYXJrRGVs
ZXRlZCgpIHsgbV9kZWxldGVkID0gdHJ1ZTsgfQogCi0gICAgSURCRGF0YWJhc2VCYWNrZW5kSW50
ZXJmYWNlKiBiYWNrZW5kREIoKSBjb25zdDsKKyAgICBJREJEYXRhYmFzZUJhY2tlbmQqIGJhY2tl
bmREQigpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIElEQkluZGV4KGNvbnN0IElEQkluZGV4TWV0
YWRhdGEmLCBJREJPYmplY3RTdG9yZSosIElEQlRyYW5zYWN0aW9uKik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleFdyaXRlci5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhXcml0ZXIuaAppbmRleCBjZjEyNTk0
Li4zMTYwYTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJJbmRleFdyaXRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkluZGV4V3JpdGVyLmgKQEAgLTI4LDcgKzI4LDcgQEAKICNkZWZpbmUgSURCSW5kZXhXcml0ZXJf
aAogCiAjaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiSURC
RGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5k
LmgiCiAjaW5jbHVkZSAiSURCTWV0YWRhdGEuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZS5jcHAKaW5kZXggZDEwZGYwMy4uNTIwYzk0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcApAQCAtMTIwLDI4ICsxMjAs
MjggQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShET01SZXF1ZXN0U3Rh
dGUqIHJlcXVlc3RTdGF0ZSwgY29uc3QgSURCSW4KIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURC
T2JqZWN0U3RvcmU6OmFkZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFNjcmlwdFZhbHVlJiB2YWx1
ZSwgY29uc3QgU2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgTE9H
KFN0b3JhZ2VBUEksICJJREJPYmplY3RTdG9yZTo6YWRkIik7Ci0gICAgcmV0dXJuIHB1dChJREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OkFkZE9ubHksIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBz
dGF0ZSwgdmFsdWUsIGtleSwgZWMpOworICAgIHJldHVybiBwdXQoSURCRGF0YWJhc2VCYWNrZW5k
OjpBZGRPbmx5LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgc3RhdGUsIHZhbHVlLCBrZXksIGVjKTsK
IH0KIAogUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6YWRkKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgU2NyaXB0VmFsdWUmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBMT0coU3RvcmFnZUFQSSwgIklEQk9iamVjdFN0b3JlOjphZGQiKTsKLSAgICByZXR1cm4g
cHV0KElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6QWRkT25seSwgSURCQW55OjpjcmVhdGUo
dGhpcyksIHN0YXRlLCB2YWx1ZSwgc3RhdGljX2Nhc3Q8SURCS2V5Kj4oMCksIGVjKTsKKyAgICBy
ZXR1cm4gcHV0KElEQkRhdGFiYXNlQmFja2VuZDo6QWRkT25seSwgSURCQW55OjpjcmVhdGUodGhp
cyksIHN0YXRlLCB2YWx1ZSwgc3RhdGljX2Nhc3Q8SURCS2V5Kj4oMCksIGVjKTsKIH0KIAogUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgU2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIklEQk9iamVjdFN0b3JlOjpwdXQi
KTsKLSAgICByZXR1cm4gcHV0KElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6QWRkT3JVcGRh
dGUsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBzdGF0ZSwgdmFsdWUsIGtleSwgZWMpOworICAgIHJl
dHVybiBwdXQoSURCRGF0YWJhc2VCYWNrZW5kOjpBZGRPclVwZGF0ZSwgSURCQW55OjpjcmVhdGUo
dGhpcyksIHN0YXRlLCB2YWx1ZSwga2V5LCBlYyk7CiB9CiAKIFBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gSURCT2JqZWN0U3RvcmU6OnB1dChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFNjcmlwdFZhbHVl
JiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgTE9HKFN0b3JhZ2VBUEksICJJREJP
YmplY3RTdG9yZTo6cHV0Iik7Ci0gICAgcmV0dXJuIHB1dChJREJEYXRhYmFzZUJhY2tlbmRJbnRl
cmZhY2U6OkFkZE9yVXBkYXRlLCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgc3RhdGUsIHZhbHVlLCBz
dGF0aWNfY2FzdDxJREJLZXkqPigwKSwgZWMpOworICAgIHJldHVybiBwdXQoSURCRGF0YWJhc2VC
YWNrZW5kOjpBZGRPclVwZGF0ZSwgSURCQW55OjpjcmVhdGUodGhpcyksIHN0YXRlLCB2YWx1ZSwg
c3RhdGljX2Nhc3Q8SURCS2V5Kj4oMCksIGVjKTsKIH0KIAotUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6UHV0TW9k
ZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIFNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgU2NyaXB0VmFsdWUmIGtleVZhbHVlLCBFeGNl
cHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1
dChJREJEYXRhYmFzZUJhY2tlbmQ6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJBbnk+
IHNvdXJjZSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBTY3JpcHRWYWx1ZSYgdmFsdWUsIGNvbnN0
IFNjcmlwdFZhbHVlJiBrZXlWYWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHRGcm9tRXhl
Y1N0YXRlKHN0YXRlKTsKICAgICBET01SZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKGNvbnRleHQp
OwpAQCAtMTQ5LDcgKzE0OSw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3Rv
cmU6OnB1dChJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUKICAgICByZXR1cm4g
cHV0KHB1dE1vZGUsIHNvdXJjZSwgc3RhdGUsIHZhbHVlLCBrZXkucmVsZWFzZSgpLCBlYyk7CiB9
CiAKLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJEYXRhYmFz
ZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJBbnk+IHNv
dXJjZSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBTY3JpcHRWYWx1ZSYgdmFsdWUsIFBhc3NSZWZQ
dHI8SURCS2V5PiBwcnBLZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZSBwdXRN
b2RlLCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFNj
cmlwdFZhbHVlJiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7CiAgICAgUmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5OwogICAgIGlmIChtX2Rl
bGV0ZWQpIHsKQEAgLTE4Niw3ICsxODYsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9i
amVjdFN0b3JlOjpwdXQoSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlCiAgICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHRG
cm9tRXhlY1N0YXRlKHN0YXRlKTsKICAgICBET01SZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKGNv
bnRleHQpOwogCi0gICAgaWYgKHB1dE1vZGUgIT0gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNl
OjpDdXJzb3JVcGRhdGUgJiYgdXNlc0luTGluZUtleXMgJiYga2V5KSB7CisgICAgaWYgKHB1dE1v
ZGUgIT0gSURCRGF0YWJhc2VCYWNrZW5kOjpDdXJzb3JVcGRhdGUgJiYgdXNlc0luTGluZUtleXMg
JiYga2V5KSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMjMzLDcgKzIzMyw3IEBAIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZh
Y2U6OlB1dE1vZGUKICAgICAvLyBTZWUgaHR0cHM6Ly9saXN0cy53ZWJraXQub3JnL3BpcGVybWFp
bC93ZWJraXQtZGV2LzIwMTMtRmVicnVhcnkvMDIzNjgyLmh0bWwKICAgICBWZWN0b3I8Y2hhcj4q
IHZhbHVlQnl0ZXNTaWduZWQgPSByZWludGVycHJldF9jYXN0PFZlY3RvcjxjaGFyPio+KCZ2YWx1
ZUJ5dGVzKTsKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZUJ1ZmZlciA9IFNoYXJlZEJ1
ZmZlcjo6YWRvcHRWZWN0b3IoKnZhbHVlQnl0ZXNTaWduZWQpOwotICAgIGJhY2tlbmREQigpLT5w
dXQobV90cmFuc2FjdGlvbi0+aWQoKSwgaWQoKSwgdmFsdWVCdWZmZXIsIGtleS5yZWxlYXNlKCks
IHN0YXRpY19jYXN0PElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZT4ocHV0TW9k
ZSksIHJlcXVlc3QsIGluZGV4SWRzLCBpbmRleEtleXMpOworICAgIGJhY2tlbmREQigpLT5wdXQo
bV90cmFuc2FjdGlvbi0+aWQoKSwgaWQoKSwgdmFsdWVCdWZmZXIsIGtleS5yZWxlYXNlKCksIHN0
YXRpY19jYXN0PElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZT4ocHV0TW9kZSksIHJlcXVlc3Qs
IGluZGV4SWRzLCBpbmRleEtleXMpOwogICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKIH0K
IApAQCAtMjk5LDcgKzI5OSw3IEBAIG5hbWVzcGFjZSB7CiAvLyBjdXJzb3Igc3VjY2VzcyBoYW5k
bGVycyBhcmUga2VwdCBhbGl2ZS4KIGNsYXNzIEluZGV4UG9wdWxhdG9yIDogcHVibGljIEV2ZW50
TGlzdGVuZXIgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluZGV4UG9wdWxhdG9y
PiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQs
IGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJ
bmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluZGV4
UG9wdWxhdG9yPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IGJhY2tlbmQs
IGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJ
bmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBJbmRleFBvcHVsYXRvcihiYWNrZW5kLCB0cmFuc2FjdGlvbklkLCBvYmplY3RTdG9y
ZUlkLCBpbmRleE1ldGFkYXRhKSk7CiAgICAgfQpAQCAtMzEwLDcgKzMxMCw3IEBAIHB1YmxpYzoK
ICAgICB9CiAKIHByaXZhdGU6Ci0gICAgSW5kZXhQb3B1bGF0b3IoUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRh
KQorICAgIEluZGV4UG9wdWxhdG9yKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBiYWNr
ZW5kLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3Qg
SURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKICAgICAgICAgOiBFdmVudExpc3RlbmVy
KENQUEV2ZW50TGlzdGVuZXJUeXBlKQogICAgICAgICAsIG1fZGF0YWJhc2VCYWNrZW5kKGJhY2tl
bmQpCiAgICAgICAgICwgbV90cmFuc2FjdGlvbklkKHRyYW5zYWN0aW9uSWQpCkBAIC0zNTQsNyAr
MzU0LDcgQEAgcHJpdmF0ZToKIAogICAgIH0KIAotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tl
bmRJbnRlcmZhY2U+IG1fZGF0YWJhc2VCYWNrZW5kOworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJh
Y2tlbmQ+IG1fZGF0YWJhc2VCYWNrZW5kOwogICAgIGNvbnN0IGludDY0X3QgbV90cmFuc2FjdGlv
bklkOwogICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwogICAgIGNvbnN0IElEQklu
ZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOwpAQCAtNDE1LDcgKzQxNSw3IEBAIFBhc3NSZWZQ
dHI8SURCSW5kZXg+IElEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFJl
ZlB0cjxJREJSZXF1ZXN0PiBpbmRleFJlcXVlc3QgPSBvcGVuQ3Vyc29yKGNvbnRleHQsIHN0YXRp
Y19jYXN0PElEQktleVJhbmdlKj4oMCksIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBJREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlByZWVtcHRpdmVUYXNrLCBlYyk7CisgICAgUmVmUHRy
PElEQlJlcXVlc3Q+IGluZGV4UmVxdWVzdCA9IG9wZW5DdXJzb3IoY29udGV4dCwgc3RhdGljX2Nh
c3Q8SURCS2V5UmFuZ2UqPigwKSwgSURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCksIElEQkRhdGFi
YXNlQmFja2VuZDo6UHJlZW1wdGl2ZVRhc2ssIGVjKTsKICAgICBBU1NFUlQoIWVjKTsKICAgICBp
ZiAoZWMpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNDkyLDcgKzQ5MiwyNyBAQCB2b2lkIElEQk9i
amVjdFN0b3JlOjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogICAgIH0KIH0KIAotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6
b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiByYW5nZSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb25TdHJpbmcsIElEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQorUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBy
ZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBzdGF0aWNfY2FzdDxJREJLZXlSYW5nZSo+KDApLCBl
Yyk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6Om9wZW5DdXJz
b3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBvcGVuQ3Vyc29y
KGNvbnRleHQsIGtleVJhbmdlLCBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKSwgZWMpOworfQor
CitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNjcmlwdFZhbHVlJiBrZXksIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIGtleSwgSURC
Q3Vyc29yOjpkaXJlY3Rpb25OZXh0KCksIGVjKTsKK30KKworUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rp
b24sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQs
IHJhbmdlLCBkaXJlY3Rpb24sIElEQkRhdGFiYXNlQmFja2VuZDo6Tm9ybWFsVGFzaywgZWMpOwor
fQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJh
bmdlLCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvblN0cmluZywgSURCRGF0YWJhc2VCYWNrZW5kOjpU
YXNrVHlwZSB0YXNrVHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgTE9HKFN0b3JhZ2VB
UEksICJJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvciIpOwogICAgIGlmIChtX2RlbGV0ZWQpIHsK
QEAgLTUxMCw3ICs1MzAsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3Jl
OjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleAogICAgIFJlZlB0cjxJ
REJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6
Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKICAgICByZXF1ZXN0LT5zZXRDdXJz
b3JEZXRhaWxzKEluZGV4ZWREQjo6Q3Vyc29yS2V5QW5kVmFsdWUsIGRpcmVjdGlvbik7CiAKLSAg
ICBiYWNrZW5kREIoKS0+b3BlbkN1cnNvcihtX3RyYW5zYWN0aW9uLT5pZCgpLCBpZCgpLCBJREJJ
bmRleE1ldGFkYXRhOjpJbnZhbGlkSWQsIHJhbmdlLCBkaXJlY3Rpb24sIGZhbHNlLCBzdGF0aWNf
Y2FzdDxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlPih0YXNrVHlwZSksIHJl
cXVlc3QpOworICAgIGJhY2tlbmREQigpLT5vcGVuQ3Vyc29yKG1fdHJhbnNhY3Rpb24tPmlkKCks
IGlkKCksIElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCwgcmFuZ2UsIGRpcmVjdGlvbiwgZmFs
c2UsIHN0YXRpY19jYXN0PElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGU+KHRhc2tUeXBlKSwg
cmVxdWVzdCk7CiAgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwogfQogCkBAIC01NjUsNyAr
NTg1LDcgQEAgaW50NjRfdCBJREJPYmplY3RTdG9yZTo6ZmluZEluZGV4SWQoY29uc3QgU3RyaW5n
JiBuYW1lKSBjb25zdAogICAgIHJldHVybiBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQ7CiB9
CiAKLUlEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSogSURCT2JqZWN0U3RvcmU6OmJhY2tlbmRE
QigpIGNvbnN0CitJREJEYXRhYmFzZUJhY2tlbmQqIElEQk9iamVjdFN0b3JlOjpiYWNrZW5kREIo
KSBjb25zdAogewogICAgIHJldHVybiBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kREIoKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCmlu
ZGV4IDEwOGNiMDAuLmM1ZmExZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaApAQCAtNjcsMTEgKzY3LDExIEBAIHB1YmxpYzoKIAog
ICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gYWRkKEpTQzo6RXhlY1N0YXRlKiwgU2NyaXB0VmFs
dWUmLCBFeGNlcHRpb25Db2RlJik7CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoSlND
OjpFeGVjU3RhdGUqLCBTY3JpcHRWYWx1ZSYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwgc3RhdGlj
X2Nhc3Q8SURCS2V5UmFuZ2UqPigwKSwgZWMpOyB9Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbkN1
cnNvcihjb250ZXh0LCBrZXlSYW5nZSwgSURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCksIGVjKTsg
fQotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBjb25zdCBTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJiBl
YykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXksIElEQkN1cnNvcjo6ZGlyZWN0aW9u
TmV4dCgpLCBlYyk7IH0KLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFu
Z2UsIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4g
b3BlbkN1cnNvcihjb250ZXh0LCByYW5nZSwgZGlyZWN0aW9uLCBJREJEYXRhYmFzZUJhY2tlbmRJ
bnRlcmZhY2U6Ok5vcm1hbFRhc2ssIGVjKTsgfQotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4g
b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4sIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6
OlRhc2tUeXBlLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBv
cGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJik7CisgICAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3Qg
U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCUmVx
dWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4sIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJik7CisgICAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIElEQkRh
dGFiYXNlQmFja2VuZDo6VGFza1R5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFNj
cmlwdFZhbHVlJiBrZXksIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlJik7
CiAKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgY29uc3QgU2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYpOwpAQCAtOTQsOCArOTQs
OCBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4Y2VwdGlvbkNvZGUmKTsK
ICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBjb25zdCBTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IHB1dChJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUs
IFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIEpTQzo6RXhlY1N0YXRlKiwgU2NyaXB0VmFsdWUm
LCBjb25zdCBTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBwdXQoSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlLCBQ
YXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBKU0M6OkV4ZWNTdGF0ZSosIFNjcmlwdFZhbHVlJiwg
UGFzc1JlZlB0cjxJREJLZXk+LCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBwdXQoSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkFu
eT4gc291cmNlLCBKU0M6OkV4ZWNTdGF0ZSosIFNjcmlwdFZhbHVlJiwgY29uc3QgU2NyaXB0VmFs
dWUmIGtleSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gcHV0
KElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZSwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwg
SlNDOjpFeGVjU3RhdGUqLCBTY3JpcHRWYWx1ZSYsIFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0
aW9uQ29kZSYpOwogICAgIHZvaWQgbWFya0RlbGV0ZWQoKSB7IG1fZGVsZXRlZCA9IHRydWU7IH0K
ICAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQoKTsKIApAQCAtMTA1LDcgKzEwNSw3IEBAIHB1
YmxpYzoKICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4gSW5kZXhLZXlzOwogICAg
IHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIEluZGV4S2V5cz4gSW5kZXhLZXlNYXA7CiAKLSAgICBJ
REJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UqIGJhY2tlbmREQigpIGNvbnN0OworICAgIElEQkRh
dGFiYXNlQmFja2VuZCogYmFja2VuZERCKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgSURCT2Jq
ZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIElEQlRyYW5zYWN0aW9uKik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJS
ZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJl
cXVlc3QuY3BwCmluZGV4IDQ3OGE0MjYuLmNiNjQ0MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuY3BwCkBAIC00NSw3ICs0
NSw3IEBAIFBhc3NSZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4gSURCT3BlbkRCUmVxdWVzdDo6Y3Jl
YXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvCiB9CiAKIElEQk9wZW5EQlJlcXVlc3Q6OklE
Qk9wZW5EQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQs
IHVpbnQ2NF90IHZlcnNpb24sIEluZGV4ZWREQjo6VmVyc2lvbk51bGxuZXNzIHZlcnNpb25OdWxs
bmVzcykKLSAgICA6IElEQlJlcXVlc3QoY29udGV4dCwgSURCQW55OjpjcmVhdGVOdWxsKCksIElE
QkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6Tm9ybWFsVGFzaywgMCkKKyAgICA6IElEQlJlcXVl
c3QoY29udGV4dCwgSURCQW55OjpjcmVhdGVOdWxsKCksIElEQkRhdGFiYXNlQmFja2VuZDo6Tm9y
bWFsVGFzaywgMCkKICAgICAsIG1fZGF0YWJhc2VDYWxsYmFja3MoY2FsbGJhY2tzKQogICAgICwg
bV90cmFuc2FjdGlvbklkKHRyYW5zYWN0aW9uSWQpCiAgICAgLCBtX3ZlcnNpb24odmVyc2lvbikK
QEAgLTcyLDExICs3MiwxMSBAQCB2b2lkIElEQk9wZW5EQlJlcXVlc3Q6Om9uQmxvY2tlZCh1aW50
NjRfdCBvbGRWZXJzaW9uKQogICAgIGVucXVldWVFdmVudChJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6
OmNyZWF0ZShvbGRWZXJzaW9uLCBtX3ZlcnNpb24sIG1fdmVyc2lvbk51bGxuZXNzLCBldmVudE5h
bWVzKCkuYmxvY2tlZEV2ZW50KSk7CiB9CiAKLXZvaWQgSURCT3BlbkRCUmVxdWVzdDo6b25VcGdy
YWRlTmVlZGVkKHVpbnQ2NF90IG9sZFZlcnNpb24sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNr
ZW5kSW50ZXJmYWNlPiBwcnBEYXRhYmFzZUJhY2tlbmQsIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRh
dGEmIG1ldGFkYXRhKQordm9pZCBJREJPcGVuREJSZXF1ZXN0OjpvblVwZ3JhZGVOZWVkZWQodWlu
dDY0X3Qgb2xkVmVyc2lvbiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IHBycERhdGFi
YXNlQmFja2VuZCwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEpCiB7CiAgICAg
TE9HKFN0b3JhZ2VBUEksICJJREJPcGVuREJSZXF1ZXN0OjpvblVwZ3JhZGVOZWVkZWQoKSIpOwog
ICAgIGlmIChtX2NvbnRleHRTdG9wcGVkIHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpIHsK
LSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4gZGIgPSBwcnBEYXRh
YmFzZUJhY2tlbmQ7CisgICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IGRiID0gcHJw
RGF0YWJhc2VCYWNrZW5kOwogICAgICAgICBkYi0+YWJvcnQobV90cmFuc2FjdGlvbklkKTsKICAg
ICAgICAgZGItPmNsb3NlKG1fZGF0YWJhc2VDYWxsYmFja3MpOwogICAgICAgICByZXR1cm47CkBA
IC04Niw3ICs4Niw3IEBAIHZvaWQgSURCT3BlbkRCUmVxdWVzdDo6b25VcGdyYWRlTmVlZGVkKHVp
bnQ2NF90IG9sZFZlcnNpb24sIFBhc3NSZWZQdHI8SURCRGF0YWJhCiAKICAgICBBU1NFUlQobV9k
YXRhYmFzZUNhbGxiYWNrcyk7CiAKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJm
YWNlPiBkYXRhYmFzZUJhY2tlbmQgPSBwcnBEYXRhYmFzZUJhY2tlbmQ7CisgICAgUmVmUHRyPElE
QkRhdGFiYXNlQmFja2VuZD4gZGF0YWJhc2VCYWNrZW5kID0gcHJwRGF0YWJhc2VCYWNrZW5kOwog
CiAgICAgUmVmUHRyPElEQkRhdGFiYXNlPiBpZGJEYXRhYmFzZSA9IElEQkRhdGFiYXNlOjpjcmVh
dGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBkYXRhYmFzZUJhY2tlbmQsIG1fZGF0YWJhc2VD
YWxsYmFja3MpOwogICAgIGlkYkRhdGFiYXNlLT5zZXRNZXRhZGF0YShtZXRhZGF0YSk7CkBAIC0x
MDQsMTMgKzEwNCwxMyBAQCB2b2lkIElEQk9wZW5EQlJlcXVlc3Q6Om9uVXBncmFkZU5lZWRlZCh1
aW50NjRfdCBvbGRWZXJzaW9uLCBQYXNzUmVmUHRyPElEQkRhdGFiYQogICAgIGVucXVldWVFdmVu
dChJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6OmNyZWF0ZShvbGRWZXJzaW9uLCBtX3ZlcnNpb24sIG1f
dmVyc2lvbk51bGxuZXNzLCBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2ZW50KSk7CiB9CiAK
LXZvaWQgSURCT3BlbkRCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kSW50ZXJmYWNlPiBwcnBCYWNrZW5kLCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBt
ZXRhZGF0YSkKK3ZvaWQgSURCT3BlbkRCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kPiBwcnBCYWNrZW5kLCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBt
ZXRhZGF0YSkKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIklEQk9wZW5EQlJlcXVlc3Q6Om9uU3Vj
Y2VzcygpIik7CiAgICAgaWYgKCFzaG91bGRFbnF1ZXVlRXZlbnQoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCA9IHBy
cEJhY2tlbmQ7CisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4gYmFja2VuZCA9IHBycEJh
Y2tlbmQ7CiAgICAgUmVmUHRyPElEQkRhdGFiYXNlPiBpZGJEYXRhYmFzZTsKICAgICBpZiAobV9y
ZXN1bHQpIHsKICAgICAgICAgaWRiRGF0YWJhc2UgPSBtX3Jlc3VsdC0+aWRiRGF0YWJhc2UoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJl
cXVlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVl
c3QuaAppbmRleCA5NjA0NTlkLi4zOWRkNTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5oCkBAIC00Myw4ICs0Myw4IEBAIHB1
YmxpYzoKICAgICB1c2luZyBJREJSZXF1ZXN0OjpvblN1Y2Nlc3M7CiAKICAgICB2aXJ0dWFsIHZv
aWQgb25CbG9ja2VkKHVpbnQ2NF90IGV4aXN0aW5nVmVyc2lvbikgT1ZFUlJJREU7Ci0gICAgdmly
dHVhbCB2b2lkIG9uVXBncmFkZU5lZWRlZCh1aW50NjRfdCBvbGRWZXJzaW9uLCBQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4sIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEm
KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VCYWNrZW5kSW50ZXJmYWNlPiwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBvblVwZ3JhZGVOZWVkZWQodWludDY0X3Qgb2xkVmVyc2lv
biwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+LCBjb25zdCBJREJEYXRhYmFzZU1ldGFk
YXRhJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQmFja2VuZD4sIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmKSBPVkVSUklERTsK
IAogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBl
dmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCUGVuZGluZ0RlbGV0ZUNhbGwuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdEZWxldGVDYWxsLmgKaW5kZXggZTFjMmM4Mi4u
MjJiZGE1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
UGVuZGluZ0RlbGV0ZUNhbGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJQZW5kaW5nRGVsZXRlQ2FsbC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIElEQlBl
bmRpbmdEZWxldGVDYWxsX2gKICNkZWZpbmUgSURCUGVuZGluZ0RlbGV0ZUNhbGxfaAogCisjaW5j
bHVkZSAiSURCQ2FsbGJhY2tzLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAgLTMzLDggKzM0LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBJREJDYWxsYmFja3M7Ci0KIGNsYXNzIElEQlBlbmRpbmdEZWxldGVDYWxs
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxJREJQZW5kaW5nRGVsZXRlQ2FsbD4g
Y3JlYXRlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCmluZGV4IDk1ZDhjZjYuLjAw
NDllZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJl
cXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVl
c3QuY3BwCkBAIC00OSw3ICs0OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBJREJSZXF1ZXN0OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgSURCVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uKQogewotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0KGFkb3B0UmVmKG5ldyBJ
REJSZXF1ZXN0KGNvbnRleHQsIHNvdXJjZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpO
b3JtYWxUYXNrLCB0cmFuc2FjdGlvbikpKTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVz
dChhZG9wdFJlZihuZXcgSURCUmVxdWVzdChjb250ZXh0LCBzb3VyY2UsIElEQkRhdGFiYXNlQmFj
a2VuZDo6Tm9ybWFsVGFzaywgdHJhbnNhY3Rpb24pKSk7CiAgICAgcmVxdWVzdC0+c3VzcGVuZElm
TmVlZGVkKCk7CiAgICAgLy8gUmVxdWVzdHMgYXNzb2NpYXRlZCB3aXRoIElEQkZhY3RvcnkgKG9w
ZW4vZGVsZXRlRGF0YWJhc2UvZ2V0RGF0YWJhc2VOYW1lcykgYXJlIG5vdCBhc3NvY2lhdGVkIHdp
dGggdHJhbnNhY3Rpb25zLgogICAgIGlmICh0cmFuc2FjdGlvbikKQEAgLTU3LDcgKzU3LDcgQEAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJSZXF1ZXN0OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUGFzc1IKICAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7CiB9
CiAKLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCUmVxdWVzdDo6Y3JlYXRlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIElEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIElEQlRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbikKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCUmVxdWVzdDo6Y3JlYXRlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2Us
IElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUgdGFza1R5cGUsIElEQlRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbikKIHsKICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdChhZG9wdFJlZihu
ZXcgSURCUmVxdWVzdChjb250ZXh0LCBzb3VyY2UsIHRhc2tUeXBlLCB0cmFuc2FjdGlvbikpKTsK
ICAgICByZXF1ZXN0LT5zdXNwZW5kSWZOZWVkZWQoKTsKQEAgLTY3LDcgKzY3LDcgQEAgUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBJREJSZXF1ZXN0OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgUGFzc1IKICAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7CiB9CiAKLUlE
QlJlcXVlc3Q6OklEQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFz
c1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNr
VHlwZSB0YXNrVHlwZSwgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQorSURCUmVxdWVzdDo6
SURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElE
QkFueT4gc291cmNlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlLCBJREJU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCiAgICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCkK
ICAgICAsIG1fcmVzdWx0KDApCiAgICAgLCBtX2Vycm9yQ29kZSgwKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCmluZGV4IDVmNTliN2QuLjQzMDU4OWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmgKQEAg
LTQyLDcgKzQyLDcgQEAKICNpbmNsdWRlICJJREJBbnkuaCIKICNpbmNsdWRlICJJREJDYWxsYmFj
a3MuaCIKICNpbmNsdWRlICJJREJDdXJzb3IuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tl
bmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmQuaCIKICNpbmNsdWRl
ICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgogI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgog
CkBAIC01NSw3ICs1NSw3IEBAIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiBjbGFzcyBJREJS
ZXF1ZXN0IDogcHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVibGljIElEQkNhbGxiYWNrcywgcHVi
bGljIEV2ZW50VGFyZ2V0V2l0aElubGluZURhdGEsIHB1YmxpYyBBY3RpdmVET01PYmplY3Qgewog
cHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNyZWF0ZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgSURCVHJhbnNhY3Rp
b24qKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjcmVhdGUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIElEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZTo6VGFza1R5cGUsIElEQlRyYW5zYWN0aW9uKik7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQkFueT4gc291cmNlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlLCBJREJU
cmFuc2FjdGlvbiopOwogICAgIHZpcnR1YWwgfklEQlJlcXVlc3QoKTsKIAogICAgIFBhc3NSZWZQ
dHI8SURCQW55PiByZXN1bHQoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwpAQCAtMTExLDEyICsxMTEs
MTIgQEAgcHVibGljOgogICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURCQ2FsbGJhY2tzPjo6cmVmOwog
ICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURCQ2FsbGJhY2tzPjo6ZGVyZWY7CiAKLSAgICBJREJEYXRh
YmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlKCkgeyByZXR1cm4gbV90YXNr
VHlwZTsgfQorICAgIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUgdGFza1R5cGUoKSB7IHJl
dHVybiBtX3Rhc2tUeXBlOyB9CiAKICAgICBET01SZXF1ZXN0U3RhdGUqIHJlcXVlc3RTdGF0ZSgp
IHsgcmV0dXJuICZtX3JlcXVlc3RTdGF0ZTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgSURCUmVxdWVz
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgSURC
RGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwgSURCVHJhbnNhY3Rpb24qKTsKKyAg
ICBJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkFueT4g
c291cmNlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbiopOwog
ICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKICAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkRW5xdWV1ZUV2ZW50KCkgY29uc3Q7CiAgICAgdm9pZCBvblN1Y2Nlc3NJbnRlcm5h
bChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4pOwpAQCAtMTQzLDcgKzE0Myw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBzZXRSZXN1bHRDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3I+
LCBQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBjb25z
dCBTY3JpcHRWYWx1ZSYpOwogCiAgICAgUmVmUHRyPElEQkFueT4gbV9zb3VyY2U7Ci0gICAgY29u
c3QgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSBtX3Rhc2tUeXBlOworICAg
IGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUgbV90YXNrVHlwZTsKIAogICAgIGJv
b2wgbV9oYXNQZW5kaW5nQWN0aXZpdHk7CiAgICAgVmVjdG9yPFJlZlB0cjxFdmVudD4+IG1fZW5x
dWV1ZWRFdmVudHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbi5jcHAKaW5kZXggNzg4ZjYzMS4uYmQ3MDAwNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcApAQCAtNDIx
LDcgKzQyMSw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmVucXVldWVFdmVudChQYXNzUmVmUHRy
PEV2ZW50PiBldmVudCkKICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUo
KS5lbnF1ZXVlRXZlbnQoZXZlbnQpOwogfQogCi1JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2Uq
IElEQlRyYW5zYWN0aW9uOjpiYWNrZW5kREIoKSBjb25zdAorSURCRGF0YWJhc2VCYWNrZW5kKiBJ
REJUcmFuc2FjdGlvbjo6YmFja2VuZERCKCkgY29uc3QKIHsKICAgICByZXR1cm4gZGIoKS0+YmFj
a2VuZCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uLmgKaW5kZXggYTRlOGFmMC4uOWNlMGE3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCkBAIC00NCw3ICs0NCw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSURCQ3Vyc29yOwogY2xhc3MgSURCRGF0YWJh
c2U7Ci1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U7CitjbGFzcyBJREJEYXRhYmFz
ZUJhY2tlbmQ7CiBjbGFzcyBJREJEYXRhYmFzZUVycm9yOwogY2xhc3MgSURCT2JqZWN0U3RvcmU7
CiBjbGFzcyBJREJPcGVuREJSZXF1ZXN0OwpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIHN0cmluZ1RvTW9kZShjb25zdCBTdHJp
bmcmLCBFeGNlcHRpb25Db2RlJik7CiAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgbW9k
ZVRvU3RyaW5nKEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlKTsKIAotICAgIElEQkRhdGFiYXNl
QmFja2VuZEludGVyZmFjZSogYmFja2VuZERCKCkgY29uc3Q7CisgICAgSURCRGF0YWJhc2VCYWNr
ZW5kKiBiYWNrZW5kREIoKSBjb25zdDsKIAogICAgIGludDY0X3QgaWQoKSBjb25zdCB7IHJldHVy
biBtX2lkOyB9CiAgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0g
QWN0aXZlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcAppbmRleCAzN2YzMTQxLi5mYjNmZDk5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJh
Y2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uQmFja2VuZC5jcHAKQEAgLTI5LDcgKzI5LDcgQEAKICNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKIAogI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmQuaCIKLSNpbmNsdWRlICJJREJE
YXRhYmFzZUJhY2tlbmRJbXBsLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kLmgiCiAj
aW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUV4
Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgiCkBAIC00
MCw3ICs0MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmQ+IElEQlRyYW5zYWN0aW9uQmFja2VuZDo6Y3JlYXRlKElEQkRhdGFiYXNl
QmFja2VuZEltcGwqIGRhdGFiYXNlQmFja2VuZCwgaW50NjRfdCBpZCwgUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVj
dFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSBtb2RlKQorUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmQ+IElEQlRyYW5zYWN0aW9uQmFja2VuZDo6Y3JlYXRlKElEQkRh
dGFiYXNlQmFja2VuZCogZGF0YWJhc2VCYWNrZW5kLCBpbnQ2NF90IGlkLCBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2Jq
ZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUpCiB7CiAgICAgSGFz
aFNldDxpbnQ2NF90PiBvYmplY3RTdG9yZUhhc2hTZXQ7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBvYmplY3RTdG9yZUlkcy5zaXplKCk7ICsraSkKQEAgLTQ5LDcgKzQ5LDcgQEAgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IElEQlRyYW5zYWN0aW9uQmFja2VuZDo6Y3JlYXRl
KElEQkRhdGFiYXNlQmFja2UKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQlRyYW5zYWN0aW9u
QmFja2VuZChkYXRhYmFzZUJhY2tlbmQsIGlkLCBjYWxsYmFja3MsIG9iamVjdFN0b3JlSGFzaFNl
dCwgbW9kZSkpOwogfQogCi1JREJUcmFuc2FjdGlvbkJhY2tlbmQ6OklEQlRyYW5zYWN0aW9uQmFj
a2VuZChJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZUJhY2tlbmQsIGludDY0X3QgaWQs
IFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgSGFzaFNl
dDxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1v
ZGUpCitJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OklEQlRyYW5zYWN0aW9uQmFja2VuZChJREJEYXRh
YmFzZUJhY2tlbmQqIGRhdGFiYXNlQmFja2VuZCwgaW50NjRfdCBpZCwgUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBIYXNoU2V0PGludDY0X3Q+JiBvYmpl
Y3RTdG9yZUlkcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgbW9kZSkKICAgICA6IG1fb2Jq
ZWN0U3RvcmVJZHMob2JqZWN0U3RvcmVJZHMpCiAgICAgLCBtX21vZGUobW9kZSkKICAgICAsIG1f
c3RhdGUoVW51c2VkKQpAQCAtNzQsMTIgKzc0LDEyIEBAIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6
fklEQlRyYW5zYWN0aW9uQmFja2VuZCgpCiAgICAgQVNTRVJUKG1fc3RhdGUgPT0gRmluaXNoZWQp
OwogfQogCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVUYXNrKElEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgdHlwZSwgUGFzc093blB0cjxJREJPcGVyYXRp
b24+IHRhc2ssIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBhYm9ydFRhc2spCit2b2lkIElEQlRy
YW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5
cGUgdHlwZSwgUGFzc093blB0cjxJREJPcGVyYXRpb24+IHRhc2ssIFBhc3NPd25QdHI8SURCT3Bl
cmF0aW9uPiBhYm9ydFRhc2spCiB7CiAgICAgaWYgKG1fc3RhdGUgPT0gRmluaXNoZWQpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmICh0eXBlID09IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFj
ZTo6Tm9ybWFsVGFzaykKKyAgICBpZiAodHlwZSA9PSBJREJEYXRhYmFzZUJhY2tlbmQ6Ok5vcm1h
bFRhc2spCiAgICAgICAgIG1fdGFza1F1ZXVlLmFwcGVuZCh0YXNrKTsKICAgICBlbHNlCiAgICAg
ICAgIG1fcHJlZW1wdGl2ZVRhc2tRdWV1ZS5hcHBlbmQodGFzayk7CkBAIC0yODIsNyArMjgyLDcg
QEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlRGVsZXRlT2JqZWN0U3RvcmVP
cGVyYXRpb24oY29uc3QgSURCT2JqZWN0U3QKIAogdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6
OnNjaGVkdWxlVmVyc2lvbkNoYW5nZU9wZXJhdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGlu
dDY0X3QgcmVxdWVzdGVkVmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MsIGNv
bnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhKQogewotICAgIHNjaGVkdWxlVGFzayhJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpjcmVhdGUodGhp
cywgdHJhbnNhY3Rpb25JZCwgcmVxdWVzdGVkVmVyc2lvbiwgY2FsbGJhY2tzLCBkYXRhYmFzZUNh
bGxiYWNrcyksIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJh
dGlvbjo6Y3JlYXRlKHRoaXMsIFN0cmluZzo6bnVtYmVyKG1ldGFkYXRhLnZlcnNpb24pLCBtZXRh
ZGF0YS52ZXJzaW9uKSk7CisgICAgc2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZDo6VmVy
c2lvbkNoYW5nZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIHRyYW5zYWN0aW9uSWQsIHJlcXVlc3Rl
ZFZlcnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MpLCBJREJEYXRhYmFzZUJhY2tl
bmQ6OlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIFN0cmluZzo6bnVt
YmVyKG1ldGFkYXRhLnZlcnNpb24pLCBtZXRhZGF0YS52ZXJzaW9uKSk7CiB9CiAKIHZvaWQgSURC
VHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZUNyZWF0ZUluZGV4T3BlcmF0aW9uKGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKQEAg
LTMwMCwxNyArMzAwLDE3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZUdl
dE9wZXJhdGlvbihjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhCiAgICAgc2NoZWR1bGVU
YXNrKEdldE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG1fYmFja2luZ1N0b3JlLmdldCgpLCBtZXRh
ZGF0YSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGN1cnNvclR5cGUsIGNhbGxi
YWNrcykpOwogfQogCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVQdXRPcGVy
YXRpb24oY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSwg
UGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBJ
REJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywg
Y29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKK3ZvaWQgSURCVHJhbnNhY3Rpb25C
YWNrZW5kOjpzY2hlZHVsZVB1dE9wZXJhdGlvbihjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRh
JiBvYmplY3RTdG9yZU1ldGFkYXRhLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFBh
c3NSZWZQdHI8SURCS2V5PiBrZXksIElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZSBwdXRNb2Rl
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRf
dD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQogewogICAg
IHNjaGVkdWxlVGFzayhQdXRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBtX2JhY2tpbmdTdG9yZS5n
ZXQoKSwgZGF0YWJhc2UoKS5pZCgpLCBvYmplY3RTdG9yZU1ldGFkYXRhLCB2YWx1ZSwga2V5LCBw
dXRNb2RlLCBjYWxsYmFja3MsIGluZGV4SWRzLCBpbmRleEtleXMpKTsKIH0KIAogdm9pZCBJREJU
cmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uKHNpemVf
dCBpbmRleENvdW50KQogewotICAgIHNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmRJbnRl
cmZhY2U6OlByZWVtcHRpdmVUYXNrLCBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OmNyZWF0ZSh0
aGlzLCBpbmRleENvdW50KSk7CisgICAgc2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZDo6
UHJlZW1wdGl2ZVRhc2ssIFNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGlu
ZGV4Q291bnQpKTsKIH0KIAotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlT3Bl
bkN1cnNvck9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0
aW9uIGRpcmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MpCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVP
cGVuQ3Vyc29yT3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJl
Y3Rpb24gZGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCRGF0
YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcykKIHsKICAgICBzY2hlZHVsZVRhc2soT3BlbkN1cnNvck9wZXJhdGlvbjo6Y3Jl
YXRlKHRoaXMsIG1fYmFja2luZ1N0b3JlLmdldCgpLCBkYXRhYmFzZSgpLmlkKCksIG9iamVjdFN0
b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvclR5cGUsIHRhc2tUeXBl
LCBjYWxsYmFja3MpKTsKIH0KQEAgLTMzMCw3ICszMzAsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9u
QmFja2VuZDo6c2NoZWR1bGVDbGVhck9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBh
c3NSZQogICAgIHNjaGVkdWxlVGFzayhDbGVhck9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG1fYmFj
a2luZ1N0b3JlLmdldCgpLCBkYXRhYmFzZSgpLmlkKCksIG9iamVjdFN0b3JlSWQsIGNhbGxiYWNr
cykpOwogfQogCi1QYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IElEQlRyYW5zYWN0aW9uQmFj
a2VuZDo6Y3JlYXRlQ3Vyc29yQmFja2VuZChJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2Um
IGN1cnNvciwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkK
K1Bhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpjcmVh
dGVDdXJzb3JCYWNrZW5kKElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZSYgY3Vyc29yLCBJ
bmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNr
VHlwZSB0YXNrVHlwZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQogewogICAgIHJldHVybiBtX2Rh
dGFiYXNlLT5mYWN0b3J5QmFja2VuZCgpLmNyZWF0ZUN1cnNvckJhY2tlbmQoKnRoaXMsIGN1cnNv
ciwgY3Vyc29yVHlwZSwgdGFza1R5cGUsIG9iamVjdFN0b3JlSWQpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQu
aAppbmRleCBlYzI5NmJmLi41NGFhNzU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuaApAQCAtMjksOCArMjks
NyBAQAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCiAjaW5jbHVkZSAiSURCQmFja2lu
Z1N0b3JlSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgot
I2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgIklEQkRh
dGFiYXNlQmFja2VuZC5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKICNpbmNsdWRl
ICJJREJPcGVyYXRpb24uaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmQuaCIKQEAg
LTQxLDExICs0MCwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIElEQkN1cnNv
ckJhY2tlbmQ7CiBjbGFzcyBJREJEYXRhYmFzZUNhbGxiYWNrczsKIAogY2xhc3MgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kIDogcHVibGljIFJlZkNvdW50ZWQ8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBj
cmVhdGUoSURCRGF0YWJhc2VCYWNrZW5kSW1wbCosIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2Jq
ZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlKTsKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IGNyZWF0ZShJREJEYXRhYmFzZUJhY2tlbmQq
LCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+
LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5z
YWN0aW9uTW9kZSk7CiAgICAgfklEQlRyYW5zYWN0aW9uQmFja2VuZCgpOwogCiAgICAgdm9pZCBj
b21taXQoKTsKQEAgLTU2LDggKzU2LDggQEAgcHVibGljOgogICAgIEluZGV4ZWREQjo6VHJhbnNh
Y3Rpb25Nb2RlIG1vZGUoKSBjb25zdCAgeyByZXR1cm4gbV9tb2RlOyB9CiAgICAgY29uc3QgSGFz
aFNldDxpbnQ2NF90PiYgc2NvcGUoKSBjb25zdCAgeyByZXR1cm4gbV9vYmplY3RTdG9yZUlkczsg
fQogCi0gICAgdm9pZCBzY2hlZHVsZVRhc2soUGFzc093blB0cjxJREJPcGVyYXRpb24+IHRhc2ss
IFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBhYm9ydFRhc2sgPSBudWxscHRyKSB7IHNjaGVkdWxl
VGFzayhJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6Ok5vcm1hbFRhc2ssIHRhc2ssIGFib3J0
VGFzayk7IH0KLSAgICB2b2lkIHNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZh
Y2U6OlRhc2tUeXBlLCBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4sIFBhc3NPd25QdHI8SURCT3Bl
cmF0aW9uPiBhYm9ydFRhc2sgPSBudWxscHRyKTsKKyAgICB2b2lkIHNjaGVkdWxlVGFzayhQYXNz
T3duUHRyPElEQk9wZXJhdGlvbj4gdGFzaywgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGFib3J0
VGFzayA9IG51bGxwdHIpIHsgc2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZDo6Tm9ybWFs
VGFzaywgdGFzaywgYWJvcnRUYXNrKTsgfQorICAgIHZvaWQgc2NoZWR1bGVUYXNrKElEQkRhdGFi
YXNlQmFja2VuZDo6VGFza1R5cGUsIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiwgUGFzc093blB0
cjxJREJPcGVyYXRpb24+IGFib3J0VGFzayA9IG51bGxwdHIpOwogCiAgICAgdm9pZCByZWdpc3Rl
ck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZCopOwogICAgIHZvaWQgdW5yZWdpc3Rlck9wZW5D
dXJzb3IoSURCQ3Vyc29yQmFja2VuZCopOwpAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkaWRDb21wbGV0ZVByZWVtcHRpdmVFdmVudCgpICB7IG1fcGVuZGluZ1ByZWVtcHRpdmVF
dmVudHMtLTsgQVNTRVJUKG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMgPj0gMCk7IH0KICAgICBJ
REJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZSYgYmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24oKSB7IHJldHVybiAqbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbjsgfQogCi0gICAgSURCRGF0
YWJhc2VCYWNrZW5kSW50ZXJmYWNlJiBkYXRhYmFzZSgpIGNvbnN0ICB7IHJldHVybiAqbV9kYXRh
YmFzZTsgfQorICAgIElEQkRhdGFiYXNlQmFja2VuZCYgZGF0YWJhc2UoKSBjb25zdCAgeyByZXR1
cm4gKm1fZGF0YWJhc2U7IH0KIAogICAgIHZvaWQgc2NoZWR1bGVDcmVhdGVPYmplY3RTdG9yZU9w
ZXJhdGlvbihjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJik7CiAgICAgdm9pZCBzY2hlZHVs
ZURlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEm
KTsKQEAgLTc0LDE5ICs3NCwxOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzY2hlZHVsZUNyZWF0ZUlu
ZGV4T3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0
YSYpOwogICAgIHZvaWQgc2NoZWR1bGVEZWxldGVJbmRleE9wZXJhdGlvbihpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmKTsKICAgICB2b2lkIHNjaGVkdWxlR2V0
T3BlcmF0aW9uKGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEluZGV4ZWREQjo6
Q3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKLSAgICB2b2lkIHNjaGVkdWxl
UHV0T3BlcmF0aW9uKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBQYXNzUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiwgSURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlOjpQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIGNvbnN0IFZlY3Rv
cjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+Jik7CisgICAgdm9p
ZCBzY2hlZHVsZVB1dE9wZXJhdGlvbihjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiwgUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4sIElEQkRhdGFi
YXNlQmFja2VuZDo6UHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBjb25zdCBWZWN0
b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYpOwogICAgIHZv
aWQgc2NoZWR1bGVTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24oc2l6ZV90IGluZGV4Q291bnQpOwot
ICAgIHZvaWQgc2NoZWR1bGVPcGVuQ3Vyc29yT3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgSW5kZXhlZERCOjpD
dXJzb3JEaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlOjpUYXNrVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAgICB2b2lk
IHNjaGVkdWxlT3BlbkN1cnNvck9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEluZGV4ZWREQjo6Q3Vyc29yRGly
ZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5
cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CiAgICAgdm9pZCBzY2hlZHVsZUNvdW50T3Bl
cmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKICAgICB2b2lkIHNjaGVk
dWxlRGVsZXRlUmFuZ2VPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKICAgICB2b2lkIHNjaGVk
dWxlQ2xlYXJPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4pOwogCi0gICAgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiBjcmVhdGVDdXJz
b3JCYWNrZW5kKElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZSYsIEluZGV4ZWREQjo6Q3Vy
c29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwgaW50NjRfdCBv
YmplY3RTdG9yZUlkKTsKKyAgICBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IGNyZWF0ZUN1
cnNvckJhY2tlbmQoSURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlJiwgSW5kZXhlZERCOjpD
dXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQpOwogCiAgICAgaW50NjRfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KIAogcHJp
dmF0ZToKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQoSURCRGF0YWJhc2VCYWNrZW5kSW1wbCos
IGludDY0X3QgaWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBIYXNo
U2V0PGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUp
OworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZChJREJEYXRhYmFzZUJhY2tlbmQqLCBpbnQ2NF90
IGlkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3QgSGFzaFNldDxpbnQ2
NF90PiYgb2JqZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlKTsKIAogICAg
IGVudW0gU3RhdGUgewogICAgICAgICBVbnVzZWQsIC8vIENyZWF0ZWQsIGJ1dCBubyB0YXNrcyB5
ZXQuCkBAIC0xMDksNyArMTA5LDcgQEAgcHJpdmF0ZToKICAgICBTdGF0ZSBtX3N0YXRlOwogICAg
IGJvb2wgbV9jb21taXRQZW5kaW5nOwogICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4g
bV9jYWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IG1fZGF0YWJh
c2U7CisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4gbV9kYXRhYmFzZTsKIAogICAgIHR5
cGVkZWYgRGVxdWU8T3duUHRyPElEQk9wZXJhdGlvbj4+IFRhc2tRdWV1ZTsKICAgICBUYXNrUXVl
dWUgbV90YXNrUXVldWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3BwCmlu
ZGV4IDMyNWFlMjYuLmQ2OTY2MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlv
bnMuY3BwCkBAIC0xODAsNyArMTgwLDcgQEAgdm9pZCBQdXRPcGVyYXRpb246OnBlcmZvcm0oKQog
ICAgIGJvb2wga2V5V2FzR2VuZXJhdGVkID0gZmFsc2U7CiAKICAgICBSZWZQdHI8SURCS2V5PiBr
ZXk7Ci0gICAgaWYgKG1fcHV0TW9kZSAhPSBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OkN1
cnNvclVwZGF0ZSAmJiBtX29iamVjdFN0b3JlLmF1dG9JbmNyZW1lbnQgJiYgIW1fa2V5KSB7Cisg
ICAgaWYgKG1fcHV0TW9kZSAhPSBJREJEYXRhYmFzZUJhY2tlbmQ6OkN1cnNvclVwZGF0ZSAmJiBt
X29iamVjdFN0b3JlLmF1dG9JbmNyZW1lbnQgJiYgIW1fa2V5KSB7CiAgICAgICAgIFJlZlB0cjxJ
REJLZXk+IGF1dG9JbmNLZXkgPSBtX2JhY2tpbmdTdG9yZS0+Z2VuZXJhdGVLZXkoKm1fdHJhbnNh
Y3Rpb24sIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCk7CiAgICAgICAgIGtleVdhc0dl
bmVyYXRlZCA9IHRydWU7CiAgICAgICAgIGlmICghYXV0b0luY0tleS0+aXNWYWxpZCgpKSB7CkBA
IC0xOTUsNyArMTk1LDcgQEAgdm9pZCBQdXRPcGVyYXRpb246OnBlcmZvcm0oKQogICAgIEFTU0VS
VChrZXktPmlzVmFsaWQoKSk7CiAKICAgICBSZWZQdHI8SURCUmVjb3JkSWRlbnRpZmllcj4gcmVj
b3JkSWRlbnRpZmllcjsKLSAgICBpZiAobV9wdXRNb2RlID09IElEQkRhdGFiYXNlQmFja2VuZElu
dGVyZmFjZTo6QWRkT25seSkgeworICAgIGlmIChtX3B1dE1vZGUgPT0gSURCRGF0YWJhc2VCYWNr
ZW5kOjpBZGRPbmx5KSB7CiAgICAgICAgIGJvb2wgb2sgPSBtX2JhY2tpbmdTdG9yZS0+a2V5RXhp
c3RzSW5PYmplY3RTdG9yZShtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigp
LCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQsICprZXksIHJlY29yZElkZW50aWZpZXIp
OwogICAgICAgICBpZiAoIW9rKSB7CiAgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJ
REJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJv
ciwgIkludGVybmFsIGVycm9yIGNoZWNraW5nIGtleSBleGlzdGVuY2UuIikpOwpAQCAtMjMyLDcg
KzIzMiw3IEBAIHZvaWQgUHV0T3BlcmF0aW9uOjpwZXJmb3JtKCkKICAgICAgICAgaW5kZXhXcml0
ZXItPndyaXRlSW5kZXhLZXlzKHJlY29yZElkZW50aWZpZXIuZ2V0KCksICptX2JhY2tpbmdTdG9y
ZSwgbV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlk
LCBtX29iamVjdFN0b3JlLmlkKTsKICAgICB9CiAKLSAgICBpZiAobV9vYmplY3RTdG9yZS5hdXRv
SW5jcmVtZW50ICYmIG1fcHV0TW9kZSAhPSBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OkN1
cnNvclVwZGF0ZSAmJiBrZXktPnR5cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5cGUpIHsKKyAgICBp
ZiAobV9vYmplY3RTdG9yZS5hdXRvSW5jcmVtZW50ICYmIG1fcHV0TW9kZSAhPSBJREJEYXRhYmFz
ZUJhY2tlbmQ6OkN1cnNvclVwZGF0ZSAmJiBrZXktPnR5cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5
cGUpIHsKICAgICAgICAgYm9vbCBvayA9IG1fYmFja2luZ1N0b3JlLT51cGRhdGVLZXlHZW5lcmF0
b3IoKm1fdHJhbnNhY3Rpb24sIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCwgKmtleSwg
IWtleVdhc0dlbmVyYXRlZCk7CiAgICAgICAgIGlmICghb2spIHsKICAgICAgICAgICAgIG1fY2Fs
bGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgdXBkYXRpbmcga2V5IGdlbmVyYXRv
ci4iKSk7CkBAIC0yNTgsNyArMjU4LDcgQEAgdm9pZCBPcGVuQ3Vyc29yT3BlcmF0aW9uOjpwZXJm
b3JtKCkKICAgICAvLyB1bnRpbCB0aGUgaW5kZXhpbmcgaXMgY29tcGxldGUuIFRoaXMgY2FuJ3Qg
aGFwcGVuIGFueSBlYXJsaWVyCiAgICAgLy8gYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHN3aXRj
aCB0byBlYXJseSBtb2RlIGluIGNhc2UgbXVsdGlwbGUKICAgICAvLyBpbmRleGVzIGFyZSBiZWlu
ZyBjcmVhdGVkIGluIGEgcm93LCB3aXRoIHB1dCgpJ3MgaW4gYmV0d2Vlbi4KLSAgICBpZiAobV90
YXNrVHlwZSA9PSBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlByZWVtcHRpdmVUYXNrKQor
ICAgIGlmIChtX3Rhc2tUeXBlID09IElEQkRhdGFiYXNlQmFja2VuZDo6UHJlZW1wdGl2ZVRhc2sp
CiAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmFkZFByZWVtcHRpdmVFdmVudCgpOwogCiAgICAgUmVm
UHRyPElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZT4gYmFja2luZ1N0b3JlQ3Vyc29yOwpA
QCAtMjY2LDcgKzI2Niw3IEBAIHZvaWQgT3BlbkN1cnNvck9wZXJhdGlvbjo6cGVyZm9ybSgpCiAg
ICAgICAgIEFTU0VSVChtX2N1cnNvclR5cGUgIT0gSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5KTsK
ICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5PYmplY3RT
dG9yZUN1cnNvcihtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2Rh
dGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQoKSwgbV9kaXJlY3Rpb24p
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChtX3Rhc2tUeXBlID09IElEQkRhdGFiYXNl
QmFja2VuZEludGVyZmFjZTo6Tm9ybWFsVGFzayk7CisgICAgICAgIEFTU0VSVChtX3Rhc2tUeXBl
ID09IElEQkRhdGFiYXNlQmFja2VuZDo6Tm9ybWFsVGFzayk7CiAgICAgICAgIGlmIChtX2N1cnNv
clR5cGUgPT0gSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5KQogICAgICAgICAgICAgYmFja2luZ1N0
b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5JbmRleEtleUN1cnNvcihtX3RyYW5zYWN0
aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3Rv
cmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBtX2RpcmVjdGlvbik7CiAgICAgICAg
IGVsc2UKQEAgLTI3OCw3ICsyNzgsNyBAQCB2b2lkIE9wZW5DdXJzb3JPcGVyYXRpb246OnBlcmZv
cm0oKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgSURCRGF0YWJhc2VCYWNrZW5kSW50
ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZShzdGF0aWNfY2FzdDxJREJEYXRhYmFzZUJhY2tlbmRJ
bnRlcmZhY2U6OlRhc2tUeXBlPihtX3Rhc2tUeXBlKSk7CisgICAgSURCRGF0YWJhc2VCYWNrZW5k
OjpUYXNrVHlwZSB0YXNrVHlwZShzdGF0aWNfY2FzdDxJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tU
eXBlPihtX3Rhc2tUeXBlKSk7CiAKICAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gY3Vyc29y
ID0gbV90cmFuc2FjdGlvbi0+Y3JlYXRlQ3Vyc29yQmFja2VuZCgqYmFja2luZ1N0b3JlQ3Vyc29y
LCBtX2N1cnNvclR5cGUsIHRhc2tUeXBlLCBtX29iamVjdFN0b3JlSWQpOwogICAgIG1fY2FsbGJh
Y2tzLT5vblN1Y2Nlc3MoY3Vyc29yLCBjdXJzb3ItPmtleSgpLCBjdXJzb3ItPnByaW1hcnlLZXko
KSwgY3Vyc29yLT52YWx1ZSgpKTsKQEAgLTM0MiwxMCArMzQyLDEwIEBAIHZvaWQgRGVsZXRlT2Jq
ZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0oKQogICAgIH0KIH0KIAotdm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpwZXJmb3JtKCkKK3ZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpwZXJmb3JtKCkKIHsKICAg
ICBMT0coU3RvcmFnZUFQSSwgIlZlcnNpb25DaGFuZ2VPcGVyYXRpb24iKTsKLSAgICBJREJEYXRh
YmFzZUJhY2tlbmRJbnRlcmZhY2UmIGRhdGFiYXNlID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2Uo
KTsKKyAgICBJREJEYXRhYmFzZUJhY2tlbmQmIGRhdGFiYXNlID0gbV90cmFuc2FjdGlvbi0+ZGF0
YWJhc2UoKTsKICAgICBpbnQ2NF90IGRhdGFiYXNlSWQgPSBkYXRhYmFzZS5pZCgpOwogICAgIHVp
bnQ2NF90IG9sZFZlcnNpb24gPSBkYXRhYmFzZS5tZXRhZGF0YSgpLnZlcnNpb247CiAKQEAgLTM3
NSw3ICszNzUsNyBAQCB2b2lkIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246OnBlcmZv
cm0oKQogICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuYWRkT2JqZWN0U3RvcmUobV9vYmpl
Y3RTdG9yZU1ldGFkYXRhLCBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbnZhbGlkSWQpOwogfQog
Ci12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlv
bjo6cGVyZm9ybSgpCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZUFib3J0
T3BlcmF0aW9uOjpwZXJmb3JtKCkKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIlZlcnNpb25DaGFu
Z2VBYm9ydE9wZXJhdGlvbiIpOwogICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2V0Q3Vy
cmVudFZlcnNpb24obV9wcmV2aW91c0ludFZlcnNpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5k
T3BlcmF0aW9ucy5oCmluZGV4IDIwNjVmNDYuLjE0YmRmNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRPcGVyYXRpb25zLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgSURCVHJhbnNhY3Rp
b25CYWNrZW5kT3BlcmF0aW9uc19oCiAjZGVmaW5lIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJh
dGlvbnNfaAogCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgorI2luY2x1ZGUg
IklEQkRhdGFiYXNlQmFja2VuZC5oIgogI2luY2x1ZGUgIklEQk9wZXJhdGlvbi5oIgogI2luY2x1
ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZC5oIgogCkBAIC03NCw3ICs3NCw3IEBAIHByaXZhdGU6
CiAgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX29iamVjdFN0b3JlTWV0YWRhdGE7
CiB9OwogCi1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlT3BlcmF0
aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7CitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmQ6OlZl
cnNpb25DaGFuZ2VPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJh
Y2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgdmVyc2lv
biwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCiAgICAgewpAQCAtMTM0LDcgKzEzNCw3
IEBAIHByaXZhdGU6CiAgICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX29iamVjdFN0b3JlTWV0
YWRhdGE7CiB9OwogCi1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdl
QWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKK2NsYXNzIElEQkRhdGFiYXNl
QmFja2VuZDo6VmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlv
biB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUo
SURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgY29uc3QgU3RyaW5nJiBwcmV2aW91
c1ZlcnNpb24sIGludDY0X3QgcHJldmlvdXNJbnRWZXJzaW9uKQogICAgIHsKQEAgLTI3NiwxMyAr
Mjc2LDEzIEBAIHByaXZhdGU6CiAKIGNsYXNzIFB1dE9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVy
YXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gY3Jl
YXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUlu
dGVyZmFjZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IElEQk9iamVj
dFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFs
dWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6
UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25z
dCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5k
ZXhLZXlzKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRy
YW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSog
YmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0
YWRhdGEmIG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFBhc3NS
ZWZQdHI8SURCS2V5PiBrZXksIElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZSBwdXRNb2RlLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4m
IGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQdXRPcGVyYXRpb24odHJhbnNhY3Rpb24sIGJhY2tp
bmdTdG9yZSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNh
bGxiYWNrcywgaW5kZXhJZHMsIGluZGV4S2V5cykpOwogICAgIH0KICAgICB2aXJ0dWFsIHZvaWQg
cGVyZm9ybSgpIE9WRVJSSURFIEZJTkFMOwogcHJpdmF0ZToKLSAgICBQdXRPcGVyYXRpb24oSURC
VHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNl
KiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSYgb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiYgdmFsdWUsIFBh
c3NSZWZQdHI8SURCS2V5PiBrZXksIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6UHV0TW9k
ZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0
b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlz
KQorICAgIFB1dE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBJ
REJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlk
LCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxT
aGFyZWRCdWZmZXI+JiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgSURCRGF0YWJhc2VC
YWNrZW5kOjpQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtl
eXM+JiBpbmRleEtleXMpCiAgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKICAg
ICAgICAgLCBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCiAgICAgICAgICwgbV9kYXRhYmFz
ZUlkKGRhdGFiYXNlSWQpCkBAIC0zMDIsNyArMzAyLDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhIG1fb2JqZWN0U3RvcmU7CiAgICAgY29uc3QgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gbV92YWx1ZTsKICAgICBjb25zdCBSZWZQdHI8SURCS2V5PiBtX2tleTsKLSAg
ICBjb25zdCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUgbV9wdXRNb2RlOwor
ICAgIGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZSBtX3B1dE1vZGU7CiAgICAgY29u
c3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7CiAgICAgY29uc3QgVmVjdG9yPGlu
dDY0X3Q+IG1faW5kZXhJZHM7CiAgICAgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4gbV9pbmRleEtl
eXM7CkBAIC0zMjgsMTMgKzMyOCwxMyBAQCBwcml2YXRlOgogCiBjbGFzcyBPcGVuQ3Vyc29yT3Bl
cmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NP
d25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2Fj
dGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJl
Y3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tl
bmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElE
QlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFj
ZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgSW5k
ZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGUg
Y3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgT3BlbkN1cnNvck9wZXJhdGlvbih0cmFuc2FjdGlvbiwgYmFja2luZ1N0b3JlLCBk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBj
dXJzb3JUeXBlLCB0YXNrVHlwZSwgY2FsbGJhY2tzKSk7CiAgICAgfQogICAgIHZpcnR1YWwgdm9p
ZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklOQUw7CiBwcml2YXRlOgotICAgIE9wZW5DdXJzb3JPcGVy
YXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3Jl
SW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJh
bmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vy
c29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBl
IHRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIE9wZW5D
dXJzb3JPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFj
a2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIEluZGV4
ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBl
IHRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogICAgICAgICA6
IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCiAgICAgICAgICwgbV9iYWNraW5nU3RvcmUoYmFj
a2luZ1N0b3JlKQogICAgICAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQpAQCAtMzU2LDcg
KzM1Niw3IEBAIHByaXZhdGU6CiAgICAgY29uc3QgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gbV9r
ZXlSYW5nZTsKICAgICBjb25zdCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBtX2RpcmVjdGlv
bjsKICAgICBjb25zdCBJbmRleGVkREI6OkN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOwotICAgIGNv
bnN0IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgbV90YXNrVHlwZTsKKyAg
ICBjb25zdCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIG1fdGFza1R5cGU7CiAgICAgY29u
c3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7CiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNrZW5k
TGV2ZWxEQi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lE
QkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5jcHAKaW5kZXggNDk3YzRhNi4uYzU5YmJlYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJGYWN0b3J5
QmFja2VuZExldmVsREIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmNwcApAQCAtMzIsNyArMzIsNyBAQAog
I2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJJREJCYWNraW5nU3RvcmVMZXZl
bERCLmgiCiAjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZC5oIgotI2luY2x1ZGUgIklEQkRhdGFi
YXNlQmFja2VuZEltcGwuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmQuaCIKICNpbmNs
dWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFj
a2VuZC5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKQEAgLTEyMiw3
ICsxMjIsNyBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQjo6ZGVsZXRlRGF0YWJhc2Uo
Y29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQgogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZCA9
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZShuYW1lLCBiYWNraW5nU3RvcmUuZ2V0KCks
IHRoaXMsIHVuaXF1ZUlkZW50aWZpZXIpOworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+
IGRhdGFiYXNlQmFja2VuZCA9IElEQkRhdGFiYXNlQmFja2VuZDo6Y3JlYXRlKG5hbWUsIGJhY2tp
bmdTdG9yZS5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRpZmllcik7CiAgICAgaWYgKGRhdGFiYXNl
QmFja2VuZCkgewogICAgICAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5zZXQodW5pcXVlSWRlbnRp
ZmllciwgZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKICAgICAgICAgZGF0YWJhc2VCYWNrZW5kLT5k
ZWxldGVEYXRhYmFzZShjYWxsYmFja3MpOwpAQCAtMTY3LDcgKzE2Nyw3IEBAIHZvaWQgSURCRmFj
dG9yeUJhY2tlbmRMZXZlbERCOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgdWludDY0X3QgdmVy
c2lvbiwgaW50NjRfCiAgICAgTE9HKFN0b3JhZ2VBUEksICJJREJGYWN0b3J5QmFja2VuZExldmVs
REI6Om9wZW4iKTsKICAgICBjb25zdCBTdHJpbmcgdW5pcXVlSWRlbnRpZmllciA9IGNvbXB1dGVV
bmlxdWVJZGVudGlmaWVyKG5hbWUsIG9wZW5pbmdPcmlnaW4pOwogCi0gICAgUmVmUHRyPElEQkRh
dGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZDsKKyAgICBSZWZQdHI8SURCRGF0YWJh
c2VCYWNrZW5kPiBkYXRhYmFzZUJhY2tlbmQ7CiAgICAgSURCRGF0YWJhc2VCYWNrZW5kTWFwOjpp
dGVyYXRvciBpdCA9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmZpbmQodW5pcXVlSWRlbnRpZmllcik7
CiAgICAgaWYgKGl0ID09IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmVuZCgpKSB7CiAgICAgICAgIFJl
ZlB0cjxJREJCYWNraW5nU3RvcmVMZXZlbERCPiBiYWNraW5nU3RvcmUgPSBvcGVuQmFja2luZ1N0
b3JlKG9wZW5pbmdPcmlnaW4sIG1fZGF0YWJhc2VEaXJlY3RvcnkpOwpAQCAtMTc2LDcgKzE3Niw3
IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFt
ZSwgdWludDY0X3QgdmVyc2lvbiwgaW50NjRfCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIAotICAgICAgICBkYXRhYmFzZUJhY2tlbmQgPSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpj
cmVhdGUobmFtZSwgYmFja2luZ1N0b3JlLmdldCgpLCB0aGlzLCB1bmlxdWVJZGVudGlmaWVyKTsK
KyAgICAgICAgZGF0YWJhc2VCYWNrZW5kID0gSURCRGF0YWJhc2VCYWNrZW5kOjpjcmVhdGUobmFt
ZSwgYmFja2luZ1N0b3JlLmdldCgpLCB0aGlzLCB1bmlxdWVJZGVudGlmaWVyKTsKICAgICAgICAg
aWYgKGRhdGFiYXNlQmFja2VuZCkKICAgICAgICAgICAgIG1fZGF0YWJhc2VCYWNrZW5kTWFwLnNl
dCh1bmlxdWVJZGVudGlmaWVyLCBkYXRhYmFzZUJhY2tlbmQuZ2V0KCkpOwogICAgICAgICBlbHNl
IHsKQEAgLTE4OSwxNSArMTg5LDE1IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCOjpv
cGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgdWludDY0X3QgdmVyc2lvbiwgaW50NjRfCiAgICAgZGF0
YWJhc2VCYWNrZW5kLT5vcGVuQ29ubmVjdGlvbihjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tz
LCB0cmFuc2FjdGlvbklkLCB2ZXJzaW9uKTsKIH0KIAotUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmQ+IElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQjo6bWF5YmVDcmVhdGVUcmFuc2FjdGlv
bkJhY2tlbmQoSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlKiBiYWNrZW5kLCBpbnQ2NF90IHRy
YW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2Fs
bGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6
OlRyYW5zYWN0aW9uTW9kZSBtb2RlKQorUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+
IElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQjo6bWF5YmVDcmVhdGVUcmFuc2FjdGlvbkJhY2tlbmQo
SURCRGF0YWJhc2VCYWNrZW5kKiBiYWNrZW5kLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NS
ZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzLCBjb25zdCBWZWN0
b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSBt
b2RlKQogewotICAgIGlmICghYmFja2VuZC0+aXNJREJEYXRhYmFzZUJhY2tlbmRJbXBsKCkpCisg
ICAgaWYgKCFiYWNrZW5kLT5pc0lEQkRhdGFiYXNlQmFja2VuZCgpKQogICAgICAgICByZXR1cm4g
MDsKIAotICAgIHJldHVybiBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmNyZWF0ZShzdGF0aWNfY2Fz
dDxJREJEYXRhYmFzZUJhY2tlbmRJbXBsKj4oYmFja2VuZCksIHRyYW5zYWN0aW9uSWQsIGRhdGFi
YXNlQ2FsbGJhY2tzLCBvYmplY3RTdG9yZUlkcywgbW9kZSk7CisgICAgcmV0dXJuIElEQlRyYW5z
YWN0aW9uQmFja2VuZDo6Y3JlYXRlKHN0YXRpY19jYXN0PElEQkRhdGFiYXNlQmFja2VuZCo+KGJh
Y2tlbmQpLCB0cmFuc2FjdGlvbklkLCBkYXRhYmFzZUNhbGxiYWNrcywgb2JqZWN0U3RvcmVJZHMs
IG1vZGUpOwogfQogCi1QYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IElEQkZhY3RvcnlCYWNr
ZW5kTGV2ZWxEQjo6Y3JlYXRlQ3Vyc29yQmFja2VuZChJREJUcmFuc2FjdGlvbkJhY2tlbmQmIHRy
YW5zYWN0aW9uQmFja2VuZCwgSURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlJiBiYWNraW5n
U3RvcmVDdXJzb3IsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFz
ZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQpCitQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxE
Qjo6Y3JlYXRlQ3Vyc29yQmFja2VuZChJREJUcmFuc2FjdGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9u
QmFja2VuZCwgSURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlJiBiYWNraW5nU3RvcmVDdXJz
b3IsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6
OlRhc2tUeXBlIHRhc2tUeXBlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiB7CiAgICAgcmV0dXJu
IElEQkN1cnNvckJhY2tlbmQ6OmNyZWF0ZSgmYmFja2luZ1N0b3JlQ3Vyc29yLCBjdXJzb3JUeXBl
LCB0YXNrVHlwZSwgJnRyYW5zYWN0aW9uQmFja2VuZCwgb2JqZWN0U3RvcmVJZCk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3Rv
cnlCYWNrZW5kTGV2ZWxEQi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2
ZWxkYi9JREJGYWN0b3J5QmFja2VuZExldmVsREIuaAppbmRleCAzYzNjNzc2Li4xMzIwMGI3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZh
Y3RvcnlCYWNrZW5kTGV2ZWxEQi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmgKQEAgLTQ1LDcgKzQ1LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRE9NU3RyaW5nTGlzdDsKIAogY2xhc3MgSURCQmFj
a2luZ1N0b3JlTGV2ZWxEQjsKLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw7CitjbGFzcyBJ
REJEYXRhYmFzZUJhY2tlbmQ7CiAKIGNsYXNzIElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQiA6IHB1
YmxpYyBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSB7CiBwdWJsaWM6CkBAIC02Myw5ICs2Myw5
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJp
bmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9y
aWdpbj4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpIE9W
RVJSSURFIEZJTkFMOwogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZD4gbWF5YmVDcmVhdGVUcmFuc2FjdGlvbkJhY2tlbmQoSURCRGF0YWJhc2VCYWNrZW5kSW50
ZXJmYWNlKiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2Fs
bGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1v
ZGUpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmQ+IG1heWJlQ3JlYXRlVHJhbnNhY3Rpb25CYWNrZW5kKElEQkRhdGFiYXNlQmFja2Vu
ZCosIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNr
cz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlKSBP
VkVSUklERSBGSU5BTDsKIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5k
PiBjcmVhdGVDdXJzb3JCYWNrZW5kKElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIElEQkJhY2tpbmdT
dG9yZUN1cnNvckludGVyZmFjZSYsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSwgSURCRGF0YWJhc2VC
YWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gY3JlYXRlQ3Vyc29yQmFja2VuZChJ
REJUcmFuc2FjdGlvbkJhY2tlbmQmLCBJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2UmLCBJ
bmRleGVkREI6OkN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCk7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlTGV2ZWxEQj4gb3BlbkJhY2tpbmdTdG9yZShjb25zdCBTZWN1cml0eU9y
aWdpbiYsIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CkBAIC03Myw3ICs3Myw3IEBAIHByb3RlY3Rl
ZDoKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCKGNvbnN0
IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnkpOwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmlu
ZywgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+ID4gSURCRGF0YWJhc2VCYWNrZW5kTWFw
OworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+
ID4gSURCRGF0YWJhc2VCYWNrZW5kTWFwOwogICAgIElEQkRhdGFiYXNlQmFja2VuZE1hcCBtX2Rh
dGFiYXNlQmFja2VuZE1hcDsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFdlYWtQdHI8
SURCQmFja2luZ1N0b3JlTGV2ZWxEQj4gPiBJREJCYWNraW5nU3RvcmVMZXZlbERCTWFwOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJMZXZl
bERCQ29kaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIv
SURCTGV2ZWxEQkNvZGluZy5jcHAKaW5kZXggNTYwZDE5Zi4uYTRkY2IxZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5n
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkxl
dmVsREJDb2RpbmcuY3BwCkBAIC0xNTIxLDcgKzE1MjEsNyBAQCBpbnQ2NF90IEluZGV4RnJlZUxp
c3RLZXk6OmluZGV4SWQoKSBjb25zdAogfQogCiAvLyBGSVhNRTogV2UgbmV2ZXIgdXNlIHRoaXMg
dG8gbG9vayB1cCBvYmplY3Qgc3RvcmUgaWRzLCBiZWNhdXNlIGEgbWFwcGluZwotLy8gaXMga2Vw
dCBpbiB0aGUgSURCRGF0YWJhc2VCYWNrZW5kSW1wbC4gQ2FuIHRoZSBtYXBwaW5nIGJlY29tZSB1
bnJlbGlhYmxlPworLy8gaXMga2VwdCBpbiB0aGUgSURCRGF0YWJhc2VCYWNrZW5kLiBDYW4gdGhl
IG1hcHBpbmcgYmVjb21lIHVucmVsaWFibGU/CiAvLyBDYW4gd2UgcmVtb3ZlIHRoaXM/CiBjb25z
dCBjaGFyKiBPYmplY3RTdG9yZU5hbWVzS2V5OjpkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNv
bnN0IGNoYXIqIGxpbWl0LCBPYmplY3RTdG9yZU5hbWVzS2V5KiByZXN1bHQpCiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkxldmVsREJD
b2RpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCTGV2
ZWxEQkNvZGluZy5oCmluZGV4IDI3OGQwZjguLjlhYzM5YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCTGV2ZWxEQkNvZGluZy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCTGV2ZWxEQkNvZGlu
Zy5oCkBAIC0yODEsNyArMjgxLDcgQEAgcHJpdmF0ZToKIGNsYXNzIE9iamVjdFN0b3JlTmFtZXNL
ZXkgewogcHVibGljOgogICAgIC8vIEZJWE1FOiBXZSBuZXZlciB1c2UgdGhpcyB0byBsb29rIHVw
IG9iamVjdCBzdG9yZSBpZHMsIGJlY2F1c2UgYSBtYXBwaW5nCi0gICAgLy8gaXMga2VwdCBpbiB0
aGUgSURCRGF0YWJhc2VCYWNrZW5kSW1wbC4gQ2FuIHRoZSBtYXBwaW5nIGJlY29tZSB1bnJlbGlh
YmxlPworICAgIC8vIGlzIGtlcHQgaW4gdGhlIElEQkRhdGFiYXNlQmFja2VuZC4gQ2FuIHRoZSBt
YXBwaW5nIGJlY29tZSB1bnJlbGlhYmxlPwogICAgIC8vIENhbiB3ZSByZW1vdmUgdGhpcz8KICAg
ICBzdGF0aWMgY29uc3QgY2hhciogZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFy
KiBsaW1pdCwgT2JqZWN0U3RvcmVOYW1lc0tleSogcmVzdWx0KTsKICAgICBzdGF0aWMgVmVjdG9y
PGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3Rv
cmVOYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJD
b3JlLnZjeHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hw
cm9qCmluZGV4IGY1OTcxNmIuLjAyMmU0YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagpAQCAtMTg0NjEsOCArMTg0NjEsNyBAQAogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCQ3Vyc29yLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJDdXJzb3JCYWNr
ZW5kLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJ
REJEYXRhYmFzZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xpbmRl
eGVkZGJcSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgiIC8+
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJEYXRhYmFz
ZUJhY2tlbmQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhl
ZGRiXElEQkRhdGFiYXNlRXJyb3IuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1v
ZHVsZXNcaW5kZXhlZGRiXElEQkRhdGFiYXNlRXhjZXB0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJGYWN0b3J5LmgiIC8+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNGM2
NGViMi4uMjYzODUzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtMTY1NCw4ICsxNjU0LDYgQEAKIAkJNTEwRDRBMzgxMDMxNjVF
RTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwRDRBMzIxMDMxNjVFRTAwNDlFQTU0IC8q
IFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oICovOyB9OwogCQk1MTBFQzQyQTE4MTcwQzc1MDBD
ODk3RDYgLyogSURCSW5kZXhXcml0ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTEwRUM0MjgxODE3MEM3NTAwQzg5N0Q2IC8qIElEQkluZGV4V3Jp
dGVyLmNwcCAqLzsgfTsKIAkJNTEwRUM0MkIxODE3MEM3NTAwQzg5N0Q2IC8qIElEQkluZGV4V3Jp
dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTBF
QzQyOTE4MTcwQzc1MDBDODk3RDYgLyogSURCSW5kZXhXcml0ZXIuaCAqLzsgfTsKLQkJNTEwRUM0
NEYxODE3NzlENTAwQzg5N0Q2IC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwRUM0NEQxODE3NzlENTAw
Qzg5N0Q2IC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwICovOyB9OwotCQk1MTBFQzQ1MDE4
MTc3OUQ1MDBDODk3RDYgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwRUM0NEUxODE3NzlENTAwQzg5N0Q2
IC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTEyOTM1RjNENTRCNEI1MkZBRjk3M0YgLyogSW5zcGVj
dG9ySGVhcFByb2ZpbGVyQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTExMjkzNjEzRDZEQjRCNTJGQUY5NzNGIC8qIEluc3BlY3RvckhlYXBQ
cm9maWxlckFnZW50LmNwcCAqLzsgfTsKIAkJNTExMjkzNjAzRDYwQjRCNTJGQUY5NzNGIC8qIElu
c3BlY3RvckhlYXBQcm9maWxlckFnZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTEyOTM2MjNEODVCNEI1MkZBRjk3M0YgLyogSW5zcGVjdG9ySGVh
cFByb2ZpbGVyQWdlbnQuaCAqLzsgfTsKIAkJNTExRUYyQzAxN0YwRkQzNTAwRTRGQTE2IC8qIEpT
SURCQW55LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxMUVGMkE4MTdGMEZDNDgwMEU0RkExNiAvKiBKU0lEQkFueS5jcHAgKi87IH07CkBAIC0xNzUy
LDYgKzE3NTAsOCBAQAogCQk1MTc0MUQxMTBCMDcyNTlBMDBFRDQ0MkMgLyogSGlzdG9yeUl0ZW0u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNzQxRDBE
MEIwNzI1OUEwMEVENDQyQyAvKiBIaXN0b3J5SXRlbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxNzQxRDEyMEIwNzI1OUEwMEVENDQyQyAvKiBI
aXN0b3J5SXRlbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTc0MUQwRTBCMDcyNTlBMDBFRDQ0MkMgLyogSGlzdG9yeUl0ZW0uY3BwICovOyB9Owog
CQk1MTc0RTIwQTEwQTFGNDRGMDBGOTVFNkYgLyogUG9wU3RhdGVFdmVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3NEUyMDgxMEExRjQ0RjAwRjk1
RTZGIC8qIFBvcFN0YXRlRXZlbnQuaCAqLzsgfTsKKwkJNTE3NzFDOEUxODJEQjRCNzAwOEU3ODFF
IC8qIElEQkRhdGFiYXNlQmFja2VuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTc3MUM4QzE4MkRCNEI3MDA4RTc4MUUgLyogSURCRGF0YWJhc2VC
YWNrZW5kLmNwcCAqLzsgfTsKKwkJNTE3NzFDOEYxODJEQjRCNzAwOEU3ODFFIC8qIElEQkRhdGFi
YXNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTE3NzFDOEQxODJEQjRCNzAwOEU3ODFFIC8qIElEQkRhdGFiYXNlQmFja2VuZC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxN0ZCQTFFMTUx
QUIxN0MwMEI1Nzk1OSAvKiBET01XaW5kb3dFeHRlbnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3RkJBMTcxNTFBQTcxQjAwQjU3OTU5IC8q
IERPTVdpbmRvd0V4dGVuc2lvbi5jcHAgKi87IH07CiAJCTUxODlGMDFEMTBCMzdCRDkwMEYzQzcz
OSAvKiBKU1BvcFN0YXRlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTE4OUYwMUIxMEIzN0JEOTAwRjNDNzM5IC8qIEpTUG9wU3RhdGVFdmVu
dC5jcHAgKi87IH07CiAJCTUxODlGMDFFMTBCMzdCRDkwMEYzQzczOSAvKiBKU1BvcFN0YXRlRXZl
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxODlG
MDFDMTBCMzdCRDkwMEYzQzczOSAvKiBKU1BvcFN0YXRlRXZlbnQuaCAqLzsgfTsKQEAgLTE3ODUs
NyArMTc4NSw2IEBACiAJCTUxRDcxOUM0MTgxMTA2RTAwMDE2REM1MSAvKiBJREJDdXJzb3JXaXRo
VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
RDcxOTdBMTgxMTA2REYwMDE2REM1MSAvKiBJREJDdXJzb3JXaXRoVmFsdWUuaCAqLzsgfTsKIAkJ
NTFENzE5QzYxODExMDZFMDAwMTZEQzUxIC8qIElEQkRhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcxOTdDMTgxMTA2REYwMDE2REM1
MSAvKiBJREJEYXRhYmFzZS5jcHAgKi87IH07CiAJCTUxRDcxOUM3MTgxMTA2RTAwMDE2REM1MSAv
KiBJREJEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFENzE5N0QxODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNlLmggKi87IH07Ci0J
CTUxRDcxOUM5MTgxMTA2RTAwMDE2REM1MSAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcxOTdG
MTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MUQ3MTlDQTE4MTEw
NkUwMDAxNkRDNTEgLyogSURCRGF0YWJhc2VDYWxsYmFja3MuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcxOTgwMTgxMTA2REYwMDE2REM1MSAvKiBJ
REJEYXRhYmFzZUNhbGxiYWNrcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTUxRDcxOUNCMTgxMTA2RTAwMDE2REM1MSAvKiBJREJEYXRhYmFzZUNh
bGxiYWNrc0ltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFENzE5ODExODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1w
bC5jcHAgKi87IH07CiAJCTUxRDcxOUNDMTgxMTA2RTAwMDE2REM1MSAvKiBJREJEYXRhYmFzZUNh
bGxiYWNrc0ltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxRDcxOTgyMTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwu
aCAqLzsgfTsKQEAgLTgzMzUsOCArODMzNCw2IEBACiAJCTUxMEQ0QTMyMTAzMTY1RUUwMDQ5RUE1
NCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUxMEVDNDI4MTgxNzBDNzUwMEM4OTdENiAvKiBJREJJbmRleFdyaXRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJJbmRleFdyaXRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMEVDNDI5MTgxNzBDNzUwMEM4OTdENiAv
KiBJREJJbmRleFdyaXRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJJ
bmRleFdyaXRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTBFQzQ0RDE4MTc3
OUQ1MDBDODk3RDYgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTEwRUM0NEUxODE3NzlENTAwQzg5N0Q2IC8qIElEQkRh
dGFiYXNlQmFja2VuZEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURC
RGF0YWJhc2VCYWNrZW5kSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTEy
OTM2MTNENkRCNEI1MkZBRjk3M0YgLyogSW5zcGVjdG9ySGVhcFByb2ZpbGVyQWdlbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9ySGVhcFByb2ZpbGVy
QWdlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTEyOTM2MjNEODVCNEI1
MkZBRjk3M0YgLyogSW5zcGVjdG9ySGVhcFByb2ZpbGVyQWdlbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9ySGVhcFByb2ZpbGVyQWdlbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTExRUYyQTgxN0YwRkM0ODAwRTRGQTE2IC8qIEpTSURCQW55
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSURCQW55LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTg0MzUsNiArODQzMiw4IEBACiAJCTUxNzQxRDBFMEIwNzI1OUEwMEVENDQy
QyAvKiBIaXN0b3J5SXRlbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSGlzdG9yeUl0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTc0RTIw
ODEwQTFGNDRGMDBGOTVFNkYgLyogUG9wU3RhdGVFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQb3BTdGF0ZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUxNzRFMjBCMTBBMUY0OUEwMEY5NUU2RiAvKiBQb3BTdGF0ZUV2ZW50LmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBQb3BTdGF0ZUV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTE3NzFDOEMxODJEQjRCNzAwOEU3ODFFIC8qIElEQkRhdGFiYXNlQmFja2VuZC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJEYXRhYmFzZUJhY2tl
bmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTc3MUM4RDE4MkRCNEI3MDA4
RTc4MUUgLyogSURCRGF0YWJhc2VCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IElEQkRhdGFiYXNlQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MTdGQkExNzE1MUFBNzFCMDBCNTc5NTkgLyogRE9NV2luZG93RXh0ZW5zaW9uLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTVdpbmRvd0V4dGVuc2lvbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxN0ZCQTE4MTUxQUE3MUIwMEI1Nzk1OSAv
KiBET01XaW5kb3dFeHRlbnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RE9NV2luZG93RXh0ZW5zaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxODlG
MDFCMTBCMzdCRDkwMEYzQzczOSAvKiBKU1BvcFN0YXRlRXZlbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNQb3BTdGF0ZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTg0NzYsNyArODQ3NSw2IEBACiAJCTUxRDcxOTdDMTgxMTA2REYw
MDE2REM1MSAvKiBJREJEYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJREJEYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
RDcxOTdEMTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJREJEYXRhYmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MUQ3MTk3RTE4MTEwNkRGMDAxNkRDNTEgLyogSURCRGF0YWJhc2UuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IElEQkRhdGFiYXNlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNTFENzE5N0YxODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNlQmFja2VuZEludGVy
ZmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJEYXRhYmFzZUJhY2tl
bmRJbnRlcmZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFENzE5ODAxODEx
MDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IElEQkRhdGFiYXNlQ2FsbGJhY2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUxRDcxOTgxMTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZUNhbGxi
YWNrc0ltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCRGF0
YWJhc2VDYWxsYmFja3NJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFE
NzE5ODIxODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2OTU4LDkgKzE2OTU2LDggQEAKIAkJCQk1
MUQ3MTk3QzE4MTEwNkRGMDAxNkRDNTEgLyogSURCRGF0YWJhc2UuY3BwICovLAogCQkJCTUxRDcx
OTdEMTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZS5oICovLAogCQkJCTUxRDcxOTdFMTgx
MTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZS5pZGwgKi8sCi0JCQkJNTEwRUM0NEQxODE3NzlE
NTAwQzg5N0Q2IC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwICovLAotCQkJCTUxMEVDNDRF
MTgxNzc5RDUwMEM4OTdENiAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggKi8sCi0JCQkJNTFE
NzE5N0YxODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oICov
LAorCQkJCTUxNzcxQzhDMTgyREI0QjcwMDhFNzgxRSAvKiBJREJEYXRhYmFzZUJhY2tlbmQuY3Bw
ICovLAorCQkJCTUxNzcxQzhEMTgyREI0QjcwMDhFNzgxRSAvKiBJREJEYXRhYmFzZUJhY2tlbmQu
aCAqLywKIAkJCQk1MUQ3MTk4MDE4MTEwNkRGMDAxNkRDNTEgLyogSURCRGF0YWJhc2VDYWxsYmFj
a3MuaCAqLywKIAkJCQk1MUQ3MTk4MTE4MTEwNkRGMDAxNkRDNTEgLyogSURCRGF0YWJhc2VDYWxs
YmFja3NJbXBsLmNwcCAqLywKIAkJCQk1MUQ3MTk4MjE4MTEwNkRGMDAxNkRDNTEgLyogSURCRGF0
YWJhc2VDYWxsYmFja3NJbXBsLmggKi8sCkBAIC0yMjkwMSw2ICsyMjg5OCw3IEBACiAJCQkJNTFD
ODFCOEEwQzQ0MjJGNzAwMTlFQ0UzIC8qIEZUUERpcmVjdG9yeVBhcnNlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkQzMTYwMEQxMkIwMjY3NjAwQzFBMzU5IC8qIEdhaW5Ob2RlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MzVDNDc3NTA5QUM0RDhFMDBBNkFBQjQgLyogR2FwUmVjdHMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTUxNzcxQzhGMTgyREI0QjcwMDhFNzgxRSAvKiBJREJEYXRhYmFzZUJhY2tl
bmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MzJFODQ3MEM1MTQ5MzgwMEIxNTAwRiAvKiBHQ0Nv
bnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUMwQzA1NENDMTExOEM4RTQwMENFMjYzNiAv
KiBnZW5lcmF0ZS1iaW5kaW5ncy5wbCBpbiBIZWFkZXJzICovLAogCQkJCUJDMjNGMERCMERBRkY0
QTQwMDlGREM5MSAvKiBHZW5lcmF0ZWRJbWFnZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzg4Miw3
ICsyMzg4MCw2IEBACiAJCQkJOTM1QzQ3NjMwOUFDNENFNjAwQTZBQUI0IC8qIE1vdXNlRXZlbnRX
aXRoSGl0VGVzdFJlc3VsdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDMxQjQ4MEE0NEVGQzcw
MEY5OTJFMCAvKiBNb3VzZVJlbGF0ZWRFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlE
RkMwOTlFNjQ5MjAwNTZFNTgxIC8qIE1vdmVTZWxlY3Rpb25Db21tYW5kLmggaW4gSGVhZGVycyAq
LywKLQkJCQk1MTBFQzQ1MDE4MTc3OUQ1MDBDODk3RDYgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkRCMTcwMDYxNEEyQkFCMjAwQTJCNUQ5IC8qIE11bHRp
Q2hhbm5lbFJlc2FtcGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzZGMDkwMEExNDMyN0I2MTAw
Njg1ODQ5IC8qIE11dGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDMxQjRB
MEE0NEVGQzcwMEY5OTJFMCAvKiBNdXRhdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI0
NTE1LDcgKzI0NTEyLDYgQEAKIAkJCQlCQzVFQjY5QTBFODFEQTYzMDBCMjU5NjUgLyogU3R5bGVW
aXN1YWxEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlEMDAwRUQyODExQzFCOUNEMDBDNDc3MjYg
LyogU3ViZnJhbWVMb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFGQzQwRkJBMTY1NUNDQjkw
MDQwRjI5RSAvKiBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk1
MUQ3MTlDOTE4MTEwNkUwMDAxNkRDNTEgLyogSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RENDEyNTFGMTJEMDAzRUYyNjkgLyogU3VibWl0SW5w
dXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTZEMzc0ODBBREJBNURFMDBBNDU1NEQgLyog
U3VicmVzb3VyY2VMb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1OUE3RDEzMEI2REI0RDkw
MDExNTVCMyAvKiBTdWJzdGl0dXRlRGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzYzOCw2ICsy
NzYzNCw3IEBACiAJCQkJMUEyRTZFN0EwQ0M1NTZENTAwNEEyMDYyIC8qIFNRTGl0ZUF1dGhvcml6
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEyMjQ2NDkwQ0M5OEREQjAwQzA1MjQwIC8qIFNR
TGl0ZURhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI1QTY4NDI0MEZGQUJFQUEwMEQy
NDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxNzcxQzhF
MTgyREI0QjcwMDhFNzgxRSAvKiBJREJEYXRhYmFzZUJhY2tlbmQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUEyMjQ2NEIwQ0M5OEREQjAwQzA1MjQwIC8qIFNRTGl0ZVN0YXRlbWVudC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxQTIyNDY0RDBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRlVHJhbnNh
Y3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdCQzZBNDExNTA1RjA4MTAwMUI3NEFDIC8q
IFNRTFJlc3VsdFNldC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI4MDc5LDcgKzI4MDc2LDYgQEAK
IAkJCQkwNzhFMDkxMTE3RDE0Q0VFMDA0MjBBQTEgLyogUlRDVm9pZFJlcXVlc3RJbXBsLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTQ5ODM5MTU4MEYxRTc3NjkwMEMyMzc4MiAvKiBXZWJLaXRDU1NN
YXRyaXguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI0QkY3N0MxNUNDM0JBRjAwMzE5MUYyIC8q
IFdlYktpdENTU01peEZ1bmN0aW9uVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTEwRUM0
NEYxODE3NzlENTAwQzg5N0Q2IC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOEFBNjFDRkYxNDRENTk1QjAwRjM3MzUwIC8qIFdlYktpdENTU1JlZ2lvblJ1
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTAzOEJDMDcxNDcxMUNEQjAwOTVFMEQxIC8qIFdl
YktpdENTU1NoYWRlclZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA1NjJGOTQ2MTU3M0VD
RUIwMDMxQ0ExNiAvKiBXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlLmNwcCBpbiBTb3VyY2VzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCmluZGV4IGIyZGVmMDcuLmYzODA2ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsNSArMSwy
OCBAQAogMjAxMy0xMS0wOCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKKyAg
ICAgICAgTWVyZ2UgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlIGFuZCBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjQwODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIGFic3RyYWN0aW9uIGlzIG5vIGxvbmdlciBtZWFuaW5nZnVsIGluIGl0cyBjdXJyZW50
IGZvcm0gaW4gV2ViQ29yZS4KKyAgICAgICAgVGhlIGN1cnJlbnQgZ3JvdW5kd29yayBmb3IgdGhl
IFdLMiBEYXRhYmFzZVByb2Nlc3MgcmVsaWVkIG9uIHRoaXMgYWJzdHJhY3Rpb24sCisgICAgICAg
IGJ1dCB0aGF0IHdpbGwgYmUgcmV3b3JrZWQgaW4gYSBmdXR1cmUgcGF0Y2guCisKKyAgICAgICAg
KiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkRhdGFiYXNlQmFj
a2VuZC5oOgorCisgICAgICAgICogV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklE
QkZhY3RvcnlCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSURCRmFjdG9yeUJhY2tl
bmQ6Om1heWJlQ3JlYXRlVHJhbnNhY3Rpb25CYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
SURCRmFjdG9yeUJhY2tlbmQ6OmNyZWF0ZUN1cnNvckJhY2tlbmQpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJGYWN0b3J5QmFja2VuZC5oOgorCisgICAg
ICAgICogV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYlByb2Nlc3NJREJEYXRhYmFz
ZUJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzSURCRGF0YWJhc2VCYWNr
ZW5kOjpwdXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzSURCRGF0YWJhc2VCYWNrZW5k
OjpvcGVuQ3Vyc29yKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIv
V2ViUHJvY2Vzc0lEQkRhdGFiYXNlQmFja2VuZC5oOgorCisyMDEzLTExLTA4ICBCcmFkeSBFaWRz
b24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKwogICAgICAgICBNZXJnZSBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UgYW5kIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwKICAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDA3NwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vz
c0lEQkRhdGFiYXNlQmFja2VuZC5oIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0lu
ZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJEYXRhYmFzZUJhY2tlbmQuaAppbmRleCBkZWQwZTYz
Li42MmMwNDVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5k
ZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkRhdGFiYXNlQmFja2VuZC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCRGF0YWJh
c2VCYWNrZW5kLmgKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgRGF0YWJhc2VQcm9jZXNzSURC
RGF0YWJhc2VCYWNrZW5kX2gKIAogI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKLSNpbmNsdWRl
IDxXZWJDb3JlL0lEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvSURCRGF0YWJhc2VCYWNrZW5kLmg+CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkg
JiYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCiAKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNl
IFdlYktpdCB7CiAKIGNsYXNzIERhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbjsKIAotLy8g
RklYTUU6IFdoZW4gYWRkaW5nIGFjdHVhbCBJREIgbG9naWMsIHRoaXMgY2xhc3Mgd2lsbCBpbmhl
cml0IGZyb20gV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlCisvLyBGSVhNRTog
V2hlbiBhZGRpbmcgYWN0dWFsIElEQiBsb2dpYywgdGhpcyBjbGFzcyB3aWxsIGluaGVyaXQgZnJv
bSBXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmQKIC8vIGluc3RlYWQgb2YgaW5oZXJpdGluZyBm
cm9tIFJlZkNvdW50ZWQgZGlyZWN0bHkuCiAvLyBEb2luZyBzbyB3aWxsIGFsc28gYWRkIGEgbGFy
Z2UgbnVtYmVyIG9mIGludGVyZmFjZSBtZXRob2RzIHRvIGltcGxlbWVudCB3aGljaCBpcyB3aHkg
SSdtIGhvbGRpbmcgb2ZmIGZvciBub3cuCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJGYWN0b3J5QmFja2VuZC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCRmFjdG9y
eUJhY2tlbmQuY3BwCmluZGV4IDRkZDFkMmMuLmEwYzEwOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJGYWN0b3J5QmFja2Vu
ZC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERC
L1dlYklEQkZhY3RvcnlCYWNrZW5kLmNwcApAQCAtMTAwLDEzICsxMDAsMTMgQEAgdm9pZCBXZWJJ
REJGYWN0b3J5QmFja2VuZDo6cmVtb3ZlSURCRGF0YWJhc2VCYWNrZW5kKGNvbnN0IFN0cmluZyYp
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmQ+IFdlYklEQkZhY3RvcnlCYWNrZW5kOjptYXliZUNyZWF0ZVRyYW5zYWN0aW9uQmFja2Vu
ZChJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UqLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mLCBJ
bmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSkKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kPiBXZWJJREJGYWN0b3J5QmFja2VuZDo6bWF5YmVDcmVhdGVUcmFuc2FjdGlvbkJhY2tlbmQo
SURCRGF0YWJhc2VCYWNrZW5kKiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgSW5kZXhlZERCOjpU
cmFuc2FjdGlvbk1vZGUpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gMDsK
IH0KIAotUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiBXZWJJREJGYWN0b3J5QmFja2VuZDo6
Y3JlYXRlQ3Vyc29yQmFja2VuZChJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBJREJCYWNraW5nU3Rv
cmVDdXJzb3JJbnRlcmZhY2UmLCBJbmRleGVkREI6OkN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZTo6VGFza1R5cGUsIGludDY0X3QpCitQYXNzUmVmUHRyPElEQkN1cnNvckJh
Y2tlbmQ+IFdlYklEQkZhY3RvcnlCYWNrZW5kOjpjcmVhdGVDdXJzb3JCYWNrZW5kKElEQlRyYW5z
YWN0aW9uQmFja2VuZCYsIElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZSYsIEluZGV4ZWRE
Qjo6Q3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSwgaW50NjRfdCkKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQkZhY3RvcnlCYWNr
ZW5kLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2Vi
SURCRmFjdG9yeUJhY2tlbmQuaAppbmRleCAwNjQxN2IxLi5hZTk5MWM4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCRmFjdG9y
eUJhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRl
eGVkREIvV2ViSURCRmFjdG9yeUJhY2tlbmQuaApAQCAtNDUsOSArNDUsOSBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSURCRGF0YWJhc2VCYWNrZW5kKGNvbnN0IFN0cmluZyYg
dW5pcXVlSWRlbnRpZmllcikgT1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtYXliZUNyZWF0ZVRyYW5zYWN0aW9uQmFja2Vu
ZChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UqLCBpbnQ2NF90IHRyYW5zYWN0
aW9uSWQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCRGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBW
ZWN0b3I8aW50NjRfdD4mLCBXZWJDb3JlOjpJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFj
a2VuZD4gbWF5YmVDcmVhdGVUcmFuc2FjdGlvbkJhY2tlbmQoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kKiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkRh
dGFiYXNlQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgV2ViQ29yZTo6SW5kZXhl
ZERCOjpUcmFuc2FjdGlvbk1vZGUpIE9WRVJSSURFOwogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRy
PFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmQ+IGNyZWF0ZUN1cnNvckJhY2tlbmQoV2ViQ29yZTo6
SURCVHJhbnNhY3Rpb25CYWNrZW5kJiwgV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlQ3Vyc29ySW50
ZXJmYWNlJiwgV2ViQ29yZTo6SW5kZXhlZERCOjpDdXJzb3JUeXBlLCBXZWJDb3JlOjpJREJEYXRh
YmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5k
PiBjcmVhdGVDdXJzb3JCYWNrZW5kKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZCYsIFdl
YkNvcmU6OklEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZSYsIFdlYkNvcmU6OkluZGV4ZWRE
Qjo6Q3Vyc29yVHlwZSwgV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSwgaW50
NjRfdCBvYmplY3RTdG9yZUlkKSBPVkVSUklERTsKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBX
ZWJJREJGYWN0b3J5QmFja2VuZChjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5SWRlbnRp
Zmllcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9J
bmRleGVkREIvV2ViUHJvY2Vzc0lEQkRhdGFiYXNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViUHJvY2Vzc0lEQkRhdGFiYXNlQmFj
a2VuZC5jcHAKaW5kZXggZjM3OTRiOC4uYjg0ZjU5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYlByb2Nlc3NJREJEYXRhYmFzZUJh
Y2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4
ZWREQi9XZWJQcm9jZXNzSURCRGF0YWJhc2VCYWNrZW5kLmNwcApAQCAtMTE2LDcgKzExNiw3IEBA
IHZvaWQgV2ViUHJvY2Vzc0lEQkRhdGFiYXNlQmFja2VuZDo6Z2V0KGludDY0X3QgdHJhbnNhY3Rp
b25JZCwgaW50NjRfdCBvYmplY3RTdG9yCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAK
LXZvaWQgV2ViUHJvY2Vzc0lEQkRhdGFiYXNlQmFja2VuZDo6cHV0KGludDY0X3QgdHJhbnNhY3Rp
b25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFs
dWUsIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlz
PiYpCit2b2lkIFdlYlByb2Nlc3NJREJEYXRhYmFzZUJhY2tlbmQ6OnB1dChpbnQ2NF90IHRyYW5z
YWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+
IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4sIElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRz
LCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYpCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBXZWJQcm9jZXNzSURCRGF0YWJhc2VCYWNrZW5k
OjpzZXRJbmRleGVzUmVhZHkoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF8KICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzSURCRGF0YWJhc2VCYWNrZW5k
OjpvcGVuQ3Vyc29yKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBJbmRleGVkREI6OkN1
cnNvckRpcmVjdGlvbiwgYm9vbCBrZXlPbmx5LCBUYXNrVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+KQordm9pZCBXZWJQcm9jZXNzSURCRGF0YWJhc2VCYWNrZW5kOjpvcGVuQ3Vyc29yKGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiwg
Ym9vbCBrZXlPbmx5LCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4pCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViUHJvY2Vz
c0lEQkRhdGFiYXNlQmFja2VuZC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFz
ZXMvSW5kZXhlZERCL1dlYlByb2Nlc3NJREJEYXRhYmFzZUJhY2tlbmQuaAppbmRleCAzZTU3NzE2
Li4xOWU2ZGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNl
cy9JbmRleGVkREIvV2ViUHJvY2Vzc0lEQkRhdGFiYXNlQmFja2VuZC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJQcm9jZXNzSURCRGF0YWJh
c2VCYWNrZW5kLmgKQEAgLTI4LDcgKzI4LDcgQEAKICNkZWZpbmUgV2ViUHJvY2Vzc0lEQkRhdGFi
YXNlQmFja2VuZF9oCiAKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCi0jaW5jbHVkZSA8V2Vi
Q29yZS9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0lE
QkRhdGFiYXNlQmFja2VuZC5oPgogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAjaWYg
RU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCkBAIC00MSw1MCArNDEsNTAgQEAgbmFtZXNwYWNlIFdl
YktpdCB7CiAKIGNsYXNzIFdlYklEQkZhY3RvcnlCYWNrZW5kOwogCi1jbGFzcyBXZWJQcm9jZXNz
SURCRGF0YWJhc2VCYWNrZW5kIEZJTkFMIDogcHVibGljIFdlYkNvcmU6OklEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZSwgcHVibGljIENvcmVJUEM6Ok1lc3NhZ2VTZW5kZXIgeworY2xhc3MgV2Vi
UHJvY2Vzc0lEQkRhdGFiYXNlQmFja2VuZCA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlByb2Nlc3NJ
REJEYXRhYmFzZUJhY2tlbmQ+LCBwdWJsaWMgQ29yZUlQQzo6TWVzc2FnZVNlbmRlciB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViUHJvY2Vzc0lEQkRhdGFiYXNlQmFja2VuZD4g
Y3JlYXRlKFdlYklEQkZhY3RvcnlCYWNrZW5kJiBmYWN0b3J5LCBjb25zdCBTdHJpbmcmIG5hbWUp
IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJQcm9jZXNzSURCRGF0YWJhc2VCYWNrZW5kKGZhY3Rv
cnksIG5hbWUpKTsgfQogCiAgICAgdmlydHVhbCB+V2ViUHJvY2Vzc0lEQkRhdGFiYXNlQmFja2Vu
ZCgpOwogCi0gICAgdmlydHVhbCBXZWJDb3JlOjpJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJh
Y2tpbmdTdG9yZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SURCQmFj
a2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUoKSBjb25zdDsKIAotICAgIHZpcnR1YWwg
dm9pZCBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJDb3JlOjpJREJLZXlQYXRo
JiwgYm9vbCBhdXRvSW5jcmVtZW50KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
T2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQp
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUcmFuc2FjdGlvbihpbnQ2NF90IHRy
YW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCRGF0YWJhc2VDYWxsYmFja3M+LCBj
b25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCB1bnNpZ25lZCBzaG9ydCBtb2Rl
KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoUGFzc1JlZlB0cjxXZWJDb3JlOjpJ
REJEYXRhYmFzZUNhbGxiYWNrcz4pIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVP
YmplY3RTdG9yZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJDb3JlOjpJREJLZXlQYXRoJiwgYm9vbCBhdXRv
SW5jcmVtZW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCB0
cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOworICAgIHZpcnR1YWwgdm9pZCBj
cmVhdGVUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8V2ViQ29y
ZTo6SURCRGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0
b3JlSWRzLCB1bnNpZ25lZCBzaG9ydCBtb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoUGFz
c1JlZlB0cjxXZWJDb3JlOjpJREJEYXRhYmFzZUNhbGxiYWNrcz4pOwogCiAgICAgLy8gVHJhbnNh
Y3Rpb24tc3BlY2lmaWMgb3BlcmF0aW9ucy4KLSAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KGludDY0
X3QgdHJhbnNhY3Rpb25JZCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGFib3J0KGludDY0
X3QgdHJhbnNhY3Rpb25JZCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGFib3J0KGludDY0
X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJEYXRhYmFzZUVycm9yPikg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNvbW1pdChpbnQ2NF90IHRyYW5zYWN0aW9uSWQp
OworICAgIHZpcnR1YWwgdm9pZCBhYm9ydChpbnQ2NF90IHRyYW5zYWN0aW9uSWQpOworICAgIHZp
cnR1YWwgdm9pZCBhYm9ydChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8V2ViQ29y
ZTo6SURCRGF0YWJhc2VFcnJvcj4pOwogCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZUluZGV4KGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgV2ViQ29yZTo6SURCS2V5UGF0aCYsIGJvb2wg
dW5pcXVlLCBib29sIG11bHRpRW50cnkpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVJbmRleChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW5kZXgoaW50
NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJDb3JlOjpJREJLZXlQYXRoJiwgYm9vbCB1
bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQpOwogCi0gICAgdmlydHVhbCB2b2lkIGdldChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklE
QktleVJhbmdlPiwgYm9vbCBrZXlPbmx5LCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNr
cz4pIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBnZXQoaW50NjRfdCB0cmFuc2FjdGlvbklk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpJREJLZXlSYW5nZT4sIGJvb2wga2V5T25seSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJD
YWxsYmFja3M+KTsKICAgICAvLyBOb3RlIHRoYXQgJ3ZhbHVlJyBtYXkgYmUgY29uc3VtZWQvYWRv
cHRlZCBieSB0aGlzIGNhbGwuCi0gICAgdmlydHVhbCB2b2lkIHB1dChpbnQ2NF90IHRyYW5zYWN0
aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRC
dWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleT4sIFB1dE1vZGUsIFBhc3NS
ZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRl
eElkcywgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkluZGV4S2V5cz4mKSBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0SW5kZXhLZXlzKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleT4gcHJwUHJpbWFyeUtleSwg
Y29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPFdlYkNvcmU6Oklu
ZGV4S2V5cz4mKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBWZWN0b3I8
aW50NjRfdD4mIGluZGV4SWRzKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNv
cihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleVJhbmdlPiwgV2ViQ29yZTo6SW5kZXhl
ZERCOjpDdXJzb3JEaXJlY3Rpb24sIGJvb2wga2V5T25seSwgVGFza1R5cGUsIFBhc3NSZWZQdHI8
V2ViQ29yZTo6SURCQ2FsbGJhY2tzPikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGNvdW50
KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPFdlYkNv
cmU6OklEQkNhbGxiYWNrcz4pIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVSYW5n
ZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0
cjxXZWJDb3JlOjpJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tz
PikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyKGludDY0X3QgdHJhbnNhY3Rpb25J
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNr
cz4pIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBwdXQoaW50NjRfdCB0cmFuc2FjdGlvbklk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVy
PiB2YWx1ZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJLZXk+LCBXZWJDb3JlOjpJREJEYXRhYmFz
ZUJhY2tlbmQ6OlB1dE1vZGUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgY29u
c3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkluZGV4
S2V5cz4mKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhLZXlzKGludDY0X3QgdHJhbnNhY3Rp
b25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleT4g
cHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkluZGV4S2V5cz4mKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhlc1Jl
YWR5KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBW
ZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzKTsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihp
bnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleVJhbmdlPiwgV2ViQ29yZTo6SW5kZXhlZERC
OjpDdXJzb3JEaXJlY3Rpb24sIGJvb2wga2V5T25seSwgV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNr
ZW5kOjpUYXNrVHlwZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+KTsKKyAgICB2
aXJ0dWFsIHZvaWQgY291bnQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJLZXlSYW5nZT4s
IFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPik7CisgICAgdmlydHVhbCB2b2lkIGRl
bGV0ZVJhbmdlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQ
YXNzUmVmUHRyPFdlYkNvcmU6OklEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJD
YWxsYmFja3M+KTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoaW50NjRfdCB0cmFuc2FjdGlvbklk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tz
Pik7CiAKLSAgICB2aXJ0dWFsIGludDY0X3QgaWQoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIHZvaWQgYWRkT2JqZWN0U3RvcmUoY29uc3QgV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVNZXRh
ZGF0YSYsIGludDY0X3QgbmV3TWF4T2JqZWN0U3RvcmVJZCkgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCB2b2lkIHJlbW92ZU9iamVjdFN0b3JlKGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCB2b2lkIGFkZEluZGV4KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3Qg
V2ViQ29yZTo6SURCSW5kZXhNZXRhZGF0YSYsIGludDY0X3QgbmV3TWF4SW5kZXhJZCkgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUluZGV4KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGludDY0X3QgaWQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkT2JqZWN0U3RvcmUoY29uc3QgV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmVNZXRhZGF0YSYsIGludDY0X3QgbmV3TWF4T2JqZWN0U3RvcmVJZCk7CisgICAgdmly
dHVhbCB2b2lkIHJlbW92ZU9iamVjdFN0b3JlKGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAg
dmlydHVhbCB2b2lkIGFkZEluZGV4KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgV2ViQ29y
ZTo6SURCSW5kZXhNZXRhZGF0YSYsIGludDY0X3QgbmV3TWF4SW5kZXhJZCk7CisgICAgdmlydHVh
bCB2b2lkIHJlbW92ZUluZGV4KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
KTsKIAotICAgIHZpcnR1YWwgY29uc3QgV2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0
YWRhdGEoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q3VycmVudFZlcnNp
b24odWludDY0X3QpIE9WRVJSSURFOworICAgIHZpcnR1YWwgY29uc3QgV2ViQ29yZTo6SURCRGF0
YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vy
cmVudFZlcnNpb24odWludDY0X3QpOwogCi0gICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdTZWNv
bmRIYWxmT3BlbigpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQZW5kaW5nU2Vjb25k
SGFsZk9wZW4oUGFzc093blB0cjxXZWJDb3JlOjpJREJQZW5kaW5nT3BlbkNhbGw+KSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ1NlY29uZEhhbGZPcGVuKCk7CisgICAgdmly
dHVhbCB2b2lkIHNldFBlbmRpbmdTZWNvbmRIYWxmT3BlbihQYXNzT3duUHRyPFdlYkNvcmU6OklE
QlBlbmRpbmdPcGVuQ2FsbD4pOwogCi0gICAgdmlydHVhbCBXZWJDb3JlOjpJREJGYWN0b3J5QmFj
a2VuZEludGVyZmFjZSYgZmFjdG9yeUJhY2tlbmQoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdl
YkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlJiBmYWN0b3J5QmFja2VuZCgpOwogCiAg
ICAgdm9pZCBvcGVuQ29ubmVjdGlvbihQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4s
IFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCRGF0YWJhc2VDYWxsYmFja3M+LCBpbnQ2NF90IHRyYW5z
YWN0aW9uSWQsIHVpbnQ2NF90IHZlcnNpb24pOwogCkBAIC05Nyw3ICs5Nyw3IEBAIHByaXZhdGU6
CiAgICAgUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiBtX3NlY3VyaXR5T3JpZ2luOwog
CiAgICAgLy8gQ29yZUlQQzo6TWVzc2FnZVNlbmRlcgotICAgIHZpcnR1YWwgQ29yZUlQQzo6Q29u
bmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IENvcmVJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCk7CiAgICAgdmly
dHVhbCB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIE9WRVJSSURFIHsgcmV0
dXJuIG1fYmFja2VuZElkZW50aWZpZXI7IH0KIAogICAgIHVpbnQ2NF90IG1fYmFja2VuZElkZW50
aWZpZXI7Cg==
</data>
<flag name="review"
          id="239439"
          type_id="1"
          status="+"
          setter="thorton"
    />
    <flag name="commit-queue"
          id="239450"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216481</attachid>
            <date>2013-11-08 21:53:14 -0800</date>
            <delta_ts>2013-11-08 22:25:26 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>patch1.txt</filename>
            <type>text/plain</type>
            <size>182651</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYTllMjE4YS4uNTI0NWU4MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTc2NCw3ICs3NjQsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZC5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9J
REJDdXJzb3JXaXRoVmFsdWUuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2Uu
Y3BwCi0gICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKKyAg
ICBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuY3BwCiAgICAgTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcAogICAgIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkV2
ZW50RGlzcGF0Y2hlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwZDJkYTIzLi43MjcwYWE1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCkBAIC0xLDUgKzEsNTEgQEAKIDIwMTMtMTEtMDggIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25A
YXBwbGUuY29tPgogCisgICAgICAgIE1lcmdlIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSBh
bmQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI0MDg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhvcnRv
bi4KKysKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5s
aXN0LmFtOgorICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2o6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmg6IFJlbW92ZWQuCisK
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuY3BwOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNr
ZW5kLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZUJhY2tlbmRJbXBsLmguCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJC
YWNraW5nU3RvcmVJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJD
YWxsYmFja3MuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmQuY3BwOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmQuaDoKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHA6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2UuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZS5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4
LmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4V3JpdGVyLmg6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRC
UmVxdWVzdC5jcHA6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVz
dC5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdEZWxldGVDYWxsLmg6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHA6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbi5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
QmFja2VuZC5jcHA6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25C
YWNrZW5kLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNr
ZW5kT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xl
dmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5oOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCTGV2ZWxEQkNvZGluZy5jcHA6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5nLmg6CisKKzIwMTMtMTEt
MDggIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCiAgICAgICAgIE1lcmdlIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSBhbmQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0MDc3
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGJjODQ2ZjQuLmZiMDE2OTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMTgwMCw5ICsxODAwLDggQEAgd2ViY29y
ZV9tb2R1bGVzX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJz
b3JXaXRoVmFsdWUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3JXaXRoVmFsdWUuaCBcCi0JU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBcCi0JU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmggXAorCVNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZC5jcHAgXAorCVNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZC5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrc0lt
cGwuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJC
YWNraW5nU3RvcmVJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkJhY2tpbmdTdG9yZUludGVyZmFjZS5oCmluZGV4IGI5MjA4NjQuLjBkMTM0OTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZUlu
dGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tp
bmdTdG9yZUludGVyZmFjZS5oCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJJREJCYWNr
aW5nU3RvcmVDdXJzb3JJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJJREJCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbkludGVyZmFjZS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEludGVyZmFj
ZS5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZC5oIgogI2luY2x1ZGUgIklEQk1ldGFk
YXRhLmgiCiAjaW5jbHVkZSAiSW5kZXhlZERCLmgiCiAKQEAgLTkxLDcgKzkxLDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgYm9vbCBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uSW50ZXJmYWNlJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QmIGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIpID0gMDsK
ICAgICB2aXJ0dWFsIGJvb2wgbWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElE
QkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uSW50ZXJmYWNlJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbmV3U3RhdGUsIGJvb2wgY2hlY2tDdXJyZW50
KSA9IDA7CiAKLSAgICB2aXJ0dWFsIGJvb2wgbWFrZUluZGV4V3JpdGVycyhJREJUcmFuc2FjdGlv
bkJhY2tlbmQmLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRh
dGEmLCBJREJLZXkmIHByaW1hcnlLZXksIGJvb2wga2V5V2FzR2VuZXJhdGVkLCBjb25zdCBWZWN0
b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIFZlY3RvcjxS
ZWZQdHI8SURCSW5kZXhXcml0ZXI+PiYgaW5kZXhXcml0ZXJzLCBTdHJpbmcqIGVycm9yTWVzc2Fn
ZSwgYm9vbCYgY29tcGxldGVkKSA9IDA7CisgICAgdmlydHVhbCBib29sIG1ha2VJbmRleFdyaXRl
cnMoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJREJP
YmplY3RTdG9yZU1ldGFkYXRhJiwgSURCS2V5JiBwcmltYXJ5S2V5LCBib29sIGtleVdhc0dlbmVy
YXRlZCwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPFZlY3Rv
cjxSZWZQdHI8SURCS2V5Pj4+JiwgVmVjdG9yPFJlZlB0cjxJREJJbmRleFdyaXRlcj4+JiBpbmRl
eFdyaXRlcnMsIFN0cmluZyogZXJyb3JNZXNzYWdlLCBib29sJiBjb21wbGV0ZWQpID0gMDsKIAog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGdlbmVyYXRlS2V5KElEQlRyYW5zYWN0aW9u
QmFja2VuZCYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7
CiAgICAgdmlydHVhbCBib29sIHVwZGF0ZUtleUdlbmVyYXRvcihJREJUcmFuc2FjdGlvbkJhY2tl
bmQmLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURC
S2V5JiwgYm9vbCBjaGVja0N1cnJlbnQpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmgKaW5kZXggOWVkMzkwYS4uMTUzODJiYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmgKQEAgLTQw
LDcgKzQwLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIERPTVN0cmluZ0xpc3Q7CiBj
bGFzcyBJREJDdXJzb3JCYWNrZW5kOwotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNl
OworY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kOwogCiBzdHJ1Y3QgSURCRGF0YWJhc2VNZXRhZGF0
YTsKIApAQCAtNzIsOCArNzIsOCBAQCBwdWJsaWM6CiAgICAgLy8gRnJvbSBJREJGYWN0b3J5Lm9w
ZW4oKS9kZWxldGVEYXRhYmFzZSgpCiAgICAgdmlydHVhbCB2b2lkIG9uQmxvY2tlZCh1aW50NjRf
dCAvKiBleGlzdGluZ1ZlcnNpb24gKi8pIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICAv
LyBGcm9tIElEQkZhY3Rvcnkub3BlbigpCi0gICAgdmlydHVhbCB2b2lkIG9uVXBncmFkZU5lZWRl
ZCh1aW50NjRfdCAvKiBvbGRWZXJzaW9uICovLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2Vu
ZEludGVyZmFjZT4sIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmKSB7IEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZT4sIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmKSB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIG9uVXBncmFkZU5lZWRlZCh1aW50
NjRfdCAvKiBvbGRWZXJzaW9uICovLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4sIGNv
bnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAg
dmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4sIGNv
bnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ3Vyc29yLmNwcAppbmRleCAxMjY2ZGQzLi5lZjA2NTQ0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKQEAgLTE0OSw3ICsxNDks
NyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkN1cnNvcjo6dXBkYXRlKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgU2NyaXB0VmFsdWUmIHZhbAogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0
dXJuIG9iamVjdFN0b3JlLT5wdXQoSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JV
cGRhdGUsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBzdGF0ZSwgdmFsdWUsIG1fY3VycmVudFByaW1h
cnlLZXksIGVjKTsKKyAgICByZXR1cm4gb2JqZWN0U3RvcmUtPnB1dChJREJEYXRhYmFzZUJhY2tl
bmQ6OkN1cnNvclVwZGF0ZSwgSURCQW55OjpjcmVhdGUodGhpcyksIHN0YXRlLCB2YWx1ZSwgbV9j
dXJyZW50UHJpbWFyeUtleSwgZWMpOwogfQogCiB2b2lkIElEQkN1cnNvcjo6YWR2YW5jZSh1bnNp
Z25lZCBsb25nIGNvdW50LCBFeGNlcHRpb25Db2RlJiBlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmQuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZC5jcHAKaW5kZXggZjE2NGUz
OC4uMjdkNjQ3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ3Vyc29yQmFja2VuZC5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgIklE
QkJhY2tpbmdTdG9yZUludGVyZmFjZS5oIgogI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgotI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJh
Y2tlbmQuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgogI2luY2x1ZGUgIklE
QkRhdGFiYXNlRXJyb3IuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgpAQCAt
MTAxLDcgKzEwMSw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxs
YmFja3M7CiB9OwogCi1JREJDdXJzb3JCYWNrZW5kOjpJREJDdXJzb3JCYWNrZW5kKFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiBjdXJzb3IsIEluZGV4ZWREQjo6Q3Vy
c29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBl
IHRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQpCitJREJDdXJzb3JCYWNrZW5kOjpJREJDdXJzb3JCYWNrZW5kKFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiBjdXJzb3IsIEluZGV4ZWREQjo6Q3Vy
c29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBl
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQpCiAgICAgOiBtX3Rhc2tUeXBlKHRhc2tUeXBlKQogICAgICwgbV9jdXJzb3JUeXBlKGN1cnNv
clR5cGUpCiAgICAgLCBtX2RhdGFiYXNlKCYodHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2Vu
ZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZC5o
CmluZGV4IDMxNGM1YmYuLjMyNzk2N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kLmgKQEAgLTMwLDcgKzMwLDcgQEAKICNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZUludGVy
ZmFjZS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKKyNpbmNsdWRlICJJ
REJEYXRhYmFzZUJhY2tlbmQuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmQuaCIK
ICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC00
NSw5ICs0NSw5IEBAIGNsYXNzIElEQkN1cnNvckJhY2tlbmQgOiBwdWJsaWMgUmVmQ291bnRlZDxJ
REJDdXJzb3JCYWNrZW5kPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vy
c29yQmFja2VuZD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJm
YWNlPiBjdXJzb3IsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkN1cnNvckJhY2tlbmQoY3Vyc29yLCBjdXJz
b3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6Ok5vcm1hbFRhc2ssIHRyYW5zYWN0
aW9uLCBvYmplY3RTdG9yZUlkKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQ3Vy
c29yQmFja2VuZChjdXJzb3IsIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZDo6Tm9ybWFs
VGFzaywgdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWQpKTsKICAgICB9Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0
b3JlQ3Vyc29ySW50ZXJmYWNlPiBjdXJzb3IsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JU
eXBlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBJREJU
cmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gY3JlYXRlKFBhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiBjdXJzb3IsIEluZGV4ZWREQjo6Q3Vyc29y
VHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQp
CiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkN1cnNvckJhY2tlbmQoY3Vy
c29yLCBjdXJzb3JUeXBlLCB0YXNrVHlwZSwgdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWQpKTsK
ICAgICB9CkBAIC02NywxNSArNjcsMTUgQEAgcHVibGljOgogICAgIHZvaWQgY2xvc2UoKTsKIAog
cHJpdmF0ZToKLSAgICBJREJDdXJzb3JCYWNrZW5kKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
Q3Vyc29ySW50ZXJmYWNlPiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tl
bmRJbnRlcmZhY2U6OlRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmQqLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQpOworICAgIElEQkN1cnNvckJhY2tlbmQoUGFzc1JlZlB0cjxJREJCYWNraW5n
U3RvcmVDdXJzb3JJbnRlcmZhY2U+LCBJbmRleGVkREI6OkN1cnNvclR5cGUsIElEQkRhdGFiYXNl
QmFja2VuZDo6VGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZCosIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCk7CiAKICAgICBjbGFzcyBDdXJzb3JJdGVyYXRpb25PcGVyYXRpb247CiAgICAgY2xh
c3MgQ3Vyc29yQWR2YW5jZU9wZXJhdGlvbjsKICAgICBjbGFzcyBDdXJzb3JQcmVmZXRjaEl0ZXJh
dGlvbk9wZXJhdGlvbjsKIAotICAgIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5
cGUgbV90YXNrVHlwZTsKKyAgICBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIG1fdGFza1R5
cGU7CiAgICAgSW5kZXhlZERCOjpDdXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsKLSAgICBjb25zdCBS
ZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPiBtX2RhdGFiYXNlOworICAgIGNvbnN0
IFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IG1fZGF0YWJhc2U7CiAgICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKICAgICBjb25zdCBpbnQ2NF90IG1fb2Jq
ZWN0U3RvcmVJZDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2UuY3BwCmluZGV4IGMzYmYxNWUuLmM1M2MzNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKQEAgLTUxLDE0ICs1MSwxNCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8SURCRGF0YWJhc2U+IElEQkRh
dGFiYXNlOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQkRh
dGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MpCitQYXNzUmVmUHRyPElEQkRhdGFiYXNlPiBJREJE
YXRhYmFzZTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VCYWNrZW5kPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNh
bGxiYWNrcz4gY2FsbGJhY2tzKQogewogICAgIFJlZlB0cjxJREJEYXRhYmFzZT4gaWRiRGF0YWJh
c2UoYWRvcHRSZWYobmV3IElEQkRhdGFiYXNlKGNvbnRleHQsIGRhdGFiYXNlLCBjYWxsYmFja3Mp
KSk7CiAgICAgaWRiRGF0YWJhc2UtPnN1c3BlbmRJZk5lZWRlZCgpOwogICAgIHJldHVybiBpZGJE
YXRhYmFzZS5yZWxlYXNlKCk7CiB9CiAKLUlEQkRhdGFiYXNlOjpJREJEYXRhYmFzZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZElu
dGVyZmFjZT4gYmFja2VuZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJh
Y2tzKQorSURCRGF0YWJhc2U6OklEQkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBiYWNrZW5kLCBQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiAgICAgOiBBY3RpdmVET01PYmplY3Qo
Y29udGV4dCkKICAgICAsIG1fYmFja2VuZChiYWNrZW5kKQogICAgICwgbV9jbG9zZVBlbmRpbmco
ZmFsc2UpCkBAIC0xODUsNyArMTg1LDcgQEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURC
RGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY28KICAgICBp
bnQ2NF90IG9iamVjdFN0b3JlSWQgPSBtX21ldGFkYXRhLm1heE9iamVjdFN0b3JlSWQgKyAxOwog
ICAgIG1fYmFja2VuZC0+Y3JlYXRlT2JqZWN0U3RvcmUobV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rp
b24tPmlkKCksIG9iamVjdFN0b3JlSWQsIG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQpOwog
Ci0gICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtZXRhZGF0YShuYW1lLCBvYmplY3RTdG9yZUlk
LCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50LCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6Ok1p
bmltdW1JbmRleElkKTsKKyAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFkYXRhKG5hbWUs
IG9iamVjdFN0b3JlSWQsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIElEQkRhdGFiYXNlQmFja2Vu
ZDo6TWluaW11bUluZGV4SWQpOwogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3Rv
cmUgPSBJREJPYmplY3RTdG9yZTo6Y3JlYXRlKG1ldGFkYXRhLCBtX3ZlcnNpb25DaGFuZ2VUcmFu
c2FjdGlvbi5nZXQoKSk7CiAgICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0KG1ldGFkYXRh
LmlkLCBtZXRhZGF0YSk7CiAgICAgKyttX21ldGFkYXRhLm1heE9iamVjdFN0b3JlSWQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaAppbmRleCBiZDky
NTVmLi5hZGY3NGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkRhdGFiYXNlLmgKQEAgLTUxLDcgKzUxLDcgQEAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsK
IAogY2xhc3MgSURCRGF0YWJhc2UgRklOQUwgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJEYXRhYmFz
ZT4sIHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1YmxpYyBFdmVudFRhcmdldFdpdGhJbmxpbmVE
YXRhLCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VD
YWxsYmFja3M+KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJEYXRhYmFzZT4gY3JlYXRlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4sIFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+KTsKICAgICB+SURCRGF0YWJhc2UoKTsKIAog
ICAgIHZvaWQgc2V0TWV0YWRhdGEoY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEp
IHsgbV9tZXRhZGF0YSA9IG1ldGFkYXRhOyB9CkBAIC0xMDEsNyArMTAxLDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gZmluZE9iamVjdFN0b3JlSWQobmFtZSkgIT0gSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YTo6SW52YWxpZElkOwogICAgIH0KIAotICAgIElEQkRhdGFiYXNlQmFja2VuZEludGVy
ZmFjZSogYmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorICAgIElE
QkRhdGFiYXNlQmFja2VuZCogYmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC5nZXQo
KTsgfQogCiAgICAgc3RhdGljIGludDY0X3QgbmV4dFRyYW5zYWN0aW9uSWQoKTsKIApAQCAtMTA5
LDcgKzEwOSw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBSZWZDb3VudGVkPElEQkRhdGFiYXNlPjo6
ZGVyZWY7CiAKIHByaXZhdGU6Ci0gICAgSURCRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPiwgUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4pOworICAgIElEQkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4sIFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VDYWxsYmFja3M+KTsKIAogICAgIC8vIEFjdGl2ZURPTU9iamVjdAogICAgIHZpcnR1YWwg
dm9pZCBzdG9wKCkgT1ZFUlJJREU7CkBAIC0xMjEsNyArMTIxLDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGNsb3NlQ29ubmVjdGlvbigpOwogCiAgICAgSURCRGF0YWJhc2VNZXRhZGF0YSBtX21ldGFk
YXRhOwotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+IG1fYmFja2VuZDsK
KyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBtX2JhY2tlbmQ7CiAgICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uPiBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbjsKICAgICB0eXBlZGVmIEhh
c2hNYXA8aW50NjRfdCwgSURCVHJhbnNhY3Rpb24qPiBUcmFuc2FjdGlvbk1hcDsKICAgICBUcmFu
c2FjdGlvbk1hcCBtX3RyYW5zYWN0aW9uczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmI0NzA5ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEs
NjYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNl
QmFja2VuZC5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJJ
REJCYWNraW5nU3RvcmVJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kLmgi
CisjaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFz
ZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgiCisj
aW5jbHVkZSAiSURCSW5kZXhXcml0ZXIuaCIKKyNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgorI2lu
Y2x1ZGUgIklEQlJlY29yZElkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJh
Y2tlbmQuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCisjaW5jbHVk
ZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9U
ZW1wb3JhcnlDaGFuZ2UuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQmFja2VuZD4gSURCRGF0YWJhc2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgU3RyaW5n
JiBuYW1lLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgSURCRmFjdG9y
eUJhY2tlbmRJbnRlcmZhY2UqIGZhY3RvcnksIGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmll
cikKK3sKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBiYWNrZW5kID0gYWRvcHRSZWYo
bmV3IElEQkRhdGFiYXNlQmFja2VuZChuYW1lLCBiYWNraW5nU3RvcmUsIGZhY3RvcnksIHVuaXF1
ZUlkZW50aWZpZXIpKTsKKyAgICBiYWNrZW5kLT5vcGVuSW50ZXJuYWxBc3luYygpOworICAgIAor
ICAgIHJldHVybiBiYWNrZW5kLnJlbGVhc2UoKTsKK30KKworSURCRGF0YWJhc2VCYWNrZW5kOjpJ
REJEYXRhYmFzZUJhY2tlbmQoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmVJbnRl
cmZhY2UqIGJhY2tpbmdTdG9yZSwgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UqIGZhY3Rvcnks
IGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllcikKKyAgICA6IG1fYmFja2luZ1N0b3JlKGJh
Y2tpbmdTdG9yZSkKKyAgICAsIG1fbWV0YWRhdGEobmFtZSwgSW52YWxpZElkLCAwLCBJbnZhbGlk
SWQpCisgICAgLCBtX2lkZW50aWZpZXIodW5pcXVlSWRlbnRpZmllcikKKyAgICAsIG1fZmFjdG9y
eShmYWN0b3J5KQorICAgICwgbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yKElEQlRyYW5zYWN0aW9u
Q29vcmRpbmF0b3I6OmNyZWF0ZSgpKQorICAgICwgbV9jbG9zaW5nQ29ubmVjdGlvbihmYWxzZSkK
K3sKKyAgICBBU1NFUlQoIW1fbWV0YWRhdGEubmFtZS5pc051bGwoKSk7Cit9CisKK3ZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kOjphZGRPYmplY3RTdG9yZShjb25zdCBJREJPYmplY3RTdG9yZU1ldGFk
YXRhJiBvYmplY3RTdG9yZSwgaW50NjRfdCBuZXdNYXhPYmplY3RTdG9yZUlkKQoreworICAgIEFT
U0VSVCghbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmUuaWQpKTsK
KyAgICBpZiAobmV3TWF4T2JqZWN0U3RvcmVJZCAhPSBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJ
bnZhbGlkSWQpIHsKKyAgICAgICAgQVNTRVJUKG1fbWV0YWRhdGEubWF4T2JqZWN0U3RvcmVJZCA8
IG5ld01heE9iamVjdFN0b3JlSWQpOworICAgICAgICBtX21ldGFkYXRhLm1heE9iamVjdFN0b3Jl
SWQgPSBuZXdNYXhPYmplY3RTdG9yZUlkOworICAgIH0KKyAgICBtX21ldGFkYXRhLm9iamVjdFN0
b3Jlcy5zZXQob2JqZWN0U3RvcmUuaWQsIG9iamVjdFN0b3JlKTsKK30KKwordm9pZCBJREJEYXRh
YmFzZUJhY2tlbmQ6OnJlbW92ZU9iamVjdFN0b3JlKGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKK3sK
KyAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJ
ZCkpOworICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnJlbW92ZShvYmplY3RTdG9yZUlkKTsK
K30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmFkZEluZGV4KGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXgsIGludDY0X3QgbmV3TWF4SW5kZXhJ
ZCkKK3sKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0
U3RvcmVJZCkpOworICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmUgPSBtX21l
dGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7CisKKyAgICBBU1NFUlQoIW9i
amVjdFN0b3JlLmluZGV4ZXMuY29udGFpbnMoaW5kZXguaWQpKTsKKyAgICBvYmplY3RTdG9yZS5p
bmRleGVzLnNldChpbmRleC5pZCwgaW5kZXgpOworICAgIGlmIChuZXdNYXhJbmRleElkICE9IElE
QkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCkgeworICAgICAgICBBU1NFUlQob2JqZWN0U3RvcmUu
bWF4SW5kZXhJZCA8IG5ld01heEluZGV4SWQpOworICAgICAgICBvYmplY3RTdG9yZS5tYXhJbmRl
eElkID0gbmV3TWF4SW5kZXhJZDsKKyAgICB9CisgICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMu
c2V0KG9iamVjdFN0b3JlSWQsIG9iamVjdFN0b3JlKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJh
Y2tlbmQ6OnJlbW92ZUluZGV4KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
KQoreworICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RT
dG9yZUlkKSk7CisgICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZSA9IG1fbWV0
YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKKworICAgIEFTU0VSVChvYmpl
Y3RTdG9yZS5pbmRleGVzLmNvbnRhaW5zKGluZGV4SWQpKTsKKyAgICBvYmplY3RTdG9yZS5pbmRl
eGVzLnJlbW92ZShpbmRleElkKTsKKyAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQob2Jq
ZWN0U3RvcmVJZCwgb2JqZWN0U3RvcmUpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6
b3BlbkludGVybmFsQXN5bmMoKQoreworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IHNl
bGYgPSB0aGlzOworICAgIG1fYmFja2luZ1N0b3JlLT5nZXRPckVzdGFibGlzaElEQkRhdGFiYXNl
TWV0YWRhdGEobV9tZXRhZGF0YS5uYW1lLCBbc2VsZl0oY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0
YSYgbWV0YWRhdGEsIGJvb2wgc3VjY2VzcykgeworICAgICAgICBzZWxmLT5kaWRPcGVuSW50ZXJu
YWxBc3luYyhtZXRhZGF0YSwgc3VjY2Vzcyk7CisgICAgfSk7Cit9CisKK3ZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kOjpkaWRPcGVuSW50ZXJuYWxBc3luYyhjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRh
JiBtZXRhZGF0YSwgYm9vbCBzdWNjZXNzKQoreworICAgIGlmICghc3VjY2VzcykgeworICAgICAg
ICBwcm9jZXNzUGVuZGluZ09wZW5DYWxscyhmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBtX21ldGFkYXRhID0gbWV0YWRhdGE7CisKKyAgICBwcm9jZXNzUGVuZGluZ0NhbGxz
KCk7Cit9CisKK0lEQkRhdGFiYXNlQmFja2VuZDo6fklEQkRhdGFiYXNlQmFja2VuZCgpCit7Cit9
CisKK0lEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogSURCRGF0YWJhc2VCYWNrZW5kOjpiYWNraW5n
U3RvcmUoKSBjb25zdAoreworICAgIHJldHVybiBtX2JhY2tpbmdTdG9yZS5nZXQoKTsKK30KKwor
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJhbnNh
Y3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkKK3sKKyAgICBMT0coU3Rv
cmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZDo6Y3JlYXRlT2JqZWN0U3RvcmUiKTsKKyAgICBJ
REJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRy
YW5zYWN0aW9uSWQpOworICAgIGlmICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVybjsKKyAg
ICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVy
c2lvbkNoYW5nZSk7CisKKyAgICBBU1NFUlQoIW1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRh
aW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0
b3JlTWV0YWRhdGEobmFtZSwgb2JqZWN0U3RvcmVJZCwga2V5UGF0aCwgYXV0b0luY3JlbWVudCwg
SURCRGF0YWJhc2VCYWNrZW5kOjpNaW5pbXVtSW5kZXhJZCk7CisKKyAgICB0cmFuc2FjdGlvbi0+
c2NoZWR1bGVDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbihvYmplY3RTdG9yZU1ldGFkYXRhKTsK
KyAgICBhZGRPYmplY3RTdG9yZShvYmplY3RTdG9yZU1ldGFkYXRhLCBvYmplY3RTdG9yZUlkKTsK
K30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3Qg
dHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQoreworICAgIExPRyhTdG9yYWdl
QVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kOjpkZWxldGVPYmplY3RTdG9yZSIpOworICAgIElEQlRy
YW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNh
Y3Rpb25JZCk7CisgICAgaWYgKCF0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIEFT
U0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9u
Q2hhbmdlKTsKKworICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhv
YmplY3RTdG9yZUlkKSk7CisgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0
U3RvcmVNZXRhZGF0YSA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlk
KTsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZURlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
KG9iamVjdFN0b3JlTWV0YWRhdGEpOworICAgIHJlbW92ZU9iamVjdFN0b3JlKG9iamVjdFN0b3Jl
SWQpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6Y3JlYXRlSW5kZXgoaW50NjRfdCB0
cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwg
Ym9vbCBtdWx0aUVudHJ5KQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNr
ZW5kOjpjcmVhdGVJbmRleCIpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rp
b24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAgaWYgKCF0cmFuc2Fj
dGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09
IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKTsKKworICAgIEFTU0VSVChtX21l
dGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAgY29uc3Qg
SURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZSA9IG1fbWV0YWRhdGEub2JqZWN0U3Rv
cmVzLmdldChvYmplY3RTdG9yZUlkKTsKKworICAgIEFTU0VSVCghb2JqZWN0U3RvcmUuaW5kZXhl
cy5jb250YWlucyhpbmRleElkKSk7CisgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBpbmRleE1l
dGFkYXRhKG5hbWUsIGluZGV4SWQsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSk7CisKKyAg
ICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVDcmVhdGVJbmRleE9wZXJhdGlvbihvYmplY3RTdG9yZUlk
LCBpbmRleE1ldGFkYXRhKTsKKworICAgIGFkZEluZGV4KG9iamVjdFN0b3JlSWQsIGluZGV4TWV0
YWRhdGEsIGluZGV4SWQpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6ZGVsZXRlSW5k
ZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCkKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZDo6ZGVs
ZXRlSW5kZXgiKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90
cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIGlmICghdHJhbnNhY3Rpb24pCisg
ICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVk
REI6OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZSk7CisKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5v
YmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgIGNvbnN0IElEQk9iamVj
dFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmUgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQo
b2JqZWN0U3RvcmVJZCk7CisKKyAgICBBU1NFUlQob2JqZWN0U3RvcmUuaW5kZXhlcy5jb250YWlu
cyhpbmRleElkKSk7CisgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSA9
IG9iamVjdFN0b3JlLmluZGV4ZXMuZ2V0KGluZGV4SWQpOworCisgICAgdHJhbnNhY3Rpb24tPnNj
aGVkdWxlRGVsZXRlSW5kZXhPcGVyYXRpb24ob2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSk7
CisKKyAgICByZW1vdmVJbmRleChvYmplY3RTdG9yZUlkLCBpbmRleElkKTsKK30KKwordm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmQ6OmNvbW1pdChpbnQ2NF90IHRyYW5zYWN0aW9uSWQpCit7CisgICAg
Ly8gVGhlIGZyb250ZW5kIHN1Z2dlc3RzIHRoYXQgd2UgY29tbWl0LCBidXQgd2UgbWF5IGhhdmUg
cHJldmlvdXNseSBpbml0aWF0ZWQgYW4gYWJvcnQsIGFuZCBzbyBoYXZlIGRpc3Bvc2VkIG9mIHRo
ZSB0cmFuc2FjdGlvbi4gb25BYm9ydCBoYXMgYWxyZWFkeSBiZWVuIGRpc3BhdGNoZWQgdG8gdGhl
IGZyb250ZW5kLCBzbyBpdCB3aWxsIGZpbmQgb3V0IGFib3V0IHRoYXQgYXN5bmNocm9ub3VzbHku
CisgICAgaWYgKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKQorICAgICAg
ICBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCktPmNvbW1pdCgpOworfQorCit2b2lk
IElEQkRhdGFiYXNlQmFja2VuZDo6YWJvcnQoaW50NjRfdCB0cmFuc2FjdGlvbklkKQoreworICAg
IC8vIElmIHRoZSB0cmFuc2FjdGlvbiBpcyB1bmtub3duLCB0aGVuIGl0IGhhcyBhbHJlYWR5IGJl
ZW4gYWJvcnRlZCBieSB0aGUgYmFja2VuZCBiZWZvcmUgdGhpcyBjYWxsIHNvIGl0IGlzIHNhZmUg
dG8gaWdub3JlIGl0LgorICAgIGlmIChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlv
bklkKSkKKyAgICAgICAgbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpLT5hYm9ydCgp
OworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6YWJvcnQoaW50NjRfdCB0cmFuc2FjdGlv
bklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yKQoreworICAgIC8vIElmIHRo
ZSB0cmFuc2FjdGlvbiBpcyB1bmtub3duLCB0aGVuIGl0IGhhcyBhbHJlYWR5IGJlZW4gYWJvcnRl
ZCBieSB0aGUgYmFja2VuZCBiZWZvcmUgdGhpcyBjYWxsIHNvIGl0IGlzIHNhZmUgdG8gaWdub3Jl
IGl0LgorICAgIGlmIChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSkKKyAg
ICAgICAgbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpLT5hYm9ydChlcnJvcik7Cit9
CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpnZXQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4ga2V5UmFuZ2UsIGJvb2wga2V5T25seSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZDo6Z2V0
Iik7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rp
b25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICBy
ZXR1cm47CisKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVHZXRPcGVyYXRpb24obV9tZXRhZGF0
YSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGtleU9ubHkgPyBJbmRleGVkREI6
OkN1cnNvcktleU9ubHkgOiBJbmRleGVkREI6OkN1cnNvcktleUFuZFZhbHVlLCBjYWxsYmFja3Mp
OworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6cHV0KGludDY0X3QgdHJhbnNhY3Rpb25J
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUs
IFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29u
c3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwg
IklEQkRhdGFiYXNlQmFja2VuZDo6cHV0Iik7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0
cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBpZiAo
IXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5t
b2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5KTsKKworICAgIGNvbnN0IElE
Qk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1fbWV0YWRhdGEub2Jq
ZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKKworICAgIEFTU0VSVChvYmplY3RTdG9yZU1l
dGFkYXRhLmF1dG9JbmNyZW1lbnQgfHwga2V5LmdldCgpKTsKKworICAgIHRyYW5zYWN0aW9uLT5z
Y2hlZHVsZVB1dE9wZXJhdGlvbihvYmplY3RTdG9yZU1ldGFkYXRhLCB2YWx1ZSwga2V5LCBwdXRN
b2RlLCBjYWxsYmFja3MsIGluZGV4SWRzLCBpbmRleEtleXMpOworfQorCit2b2lkIElEQkRhdGFi
YXNlQmFja2VuZDo6c2V0SW5kZXhLZXlzKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVj
dG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5
cykKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZDo6c2V0SW5kZXhL
ZXlzIik7CisgICAgQVNTRVJUKHBycFByaW1hcnlLZXkpOworCisgICAgSURCVHJhbnNhY3Rpb25C
YWNrZW5kKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsK
KyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKHRyYW5z
YWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpOwor
CisgICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IHBycFByaW1hcnlLZXk7CisgICAgUmVm
UHRyPElEQkJhY2tpbmdTdG9yZUludGVyZmFjZT4gc3RvcmUgPSBtX2JhY2tpbmdTdG9yZTsKKyAg
ICAvLyBGSVhNRTogVGhpcyBtZXRob2QgY291bGQgYmUgYXN5bmNocm9ub3VzLCBidXQgd2UgbmVl
ZCB0byBldmFsdWF0ZSBpZiBpdCdzIHdvcnRoIHRoZSBleHRyYSBjb21wbGV4aXR5LgorICAgIFJl
ZlB0cjxJREJSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVyOworICAgIGJvb2wgb2sg
PSBzdG9yZS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24oKSwgbV9tZXRhZGF0YS5pZCwgb2JqZWN0U3RvcmVJZCwgKnByaW1hcnlLZXks
IHJlY29yZElkZW50aWZpZXIpOworICAgIGlmICghb2spIHsKKyAgICAgICAgdHJhbnNhY3Rpb24t
PmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5r
bm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3Igc2V0dGluZyBpbmRleCBrZXlzLiIpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIXJlY29yZElkZW50aWZpZXIpIHsKKyAgICAgICAg
UmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRl
cm5hbCBlcnJvciBzZXR0aW5nIGluZGV4IGtleXMgZm9yIG9iamVjdCBzdG9yZS4iKSk7CisgICAg
ICAgIHRyYW5zYWN0aW9uLT5hYm9ydChlcnJvci5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgVmVjdG9yPFJlZlB0cjxJREJJbmRleFdyaXRlcj4+IGluZGV4V3JpdGVy
czsKKyAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOworICAgIGJvb2wgb2JleXNDb25zdHJhaW50cyA9
IGZhbHNlOworICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmpl
Y3RTdG9yZUlkKSk7CisgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3Rv
cmVNZXRhZGF0YSA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsK
KyAgICBib29sIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBzdG9yZS0+bWFrZUluZGV4V3JpdGVycygq
dHJhbnNhY3Rpb24sIGlkKCksIG9iamVjdFN0b3JlTWV0YWRhdGEsICpwcmltYXJ5S2V5LCBmYWxz
ZSwgaW5kZXhJZHMsIGluZGV4S2V5cywgaW5kZXhXcml0ZXJzLCAmZXJyb3JNZXNzYWdlLCBvYmV5
c0NvbnN0cmFpbnRzKTsKKyAgICBpZiAoIWJhY2tpbmdTdG9yZVN1Y2Nlc3MpIHsKKyAgICAgICAg
dHJhbnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJy
b3IgdXBkYXRpbmcgaW5kZXgga2V5cy4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
aWYgKCFvYmV5c0NvbnN0cmFpbnRzKSB7CisgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChJREJE
YXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJv
ciwgZXJyb3JNZXNzYWdlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGluZGV4V3JpdGVycy5zaXplKCk7ICsraSkgeworICAgICAgICBJREJJ
bmRleFdyaXRlciogaW5kZXhXcml0ZXIgPSBpbmRleFdyaXRlcnNbaV0uZ2V0KCk7CisgICAgICAg
IGluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLmdldCgpLCAqc3Rv
cmUuZ2V0KCksIHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBpZCgpLCBv
YmplY3RTdG9yZUlkKTsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpzZXRJ
bmRleGVzUmVhZHkoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90LCBjb25zdCBWZWN0b3I8
aW50NjRfdD4mIGluZGV4SWRzKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VC
YWNrZW5kOjpzZXRJbmRleGVzUmVhZHkiKTsKKworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCog
dHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAgaWYg
KCF0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgdHJhbnNhY3Rpb24tPnNjaGVk
dWxlU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uKGluZGV4SWRzLnNpemUoKSk7Cit9CisKK3ZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kOjpvcGVuQ3Vyc29yKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wg
a2V5T25seSwgVGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmQ6Om9wZW5D
dXJzb3IiKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90cmFu
c2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIGlmICghdHJhbnNhY3Rpb24pCisgICAg
ICAgIHJldHVybjsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZU9wZW5DdXJzb3JPcGVyYXRp
b24ob2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwga2V5T25seSA/
IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSA6IEluZGV4ZWREQjo6Q3Vyc29yS2V5QW5kVmFsdWUs
IHRhc2tUeXBlLCBjYWxsYmFja3MpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6Y291
bnQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFz
ZUJhY2tlbmQ6OmNvdW50Iik7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlv
biA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBpZiAoIXRyYW5zYWN0
aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9y
ZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZUNv
dW50T3BlcmF0aW9uKG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBjYWxsYmFja3Mp
OworfQorCisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpkZWxldGVSYW5nZShpbnQ2NF90IHRy
YW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAg
TE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmQ6OmRlbGV0ZVJhbmdlIik7CisgICAg
SURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0
cmFuc2FjdGlvbklkKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47Cisg
ICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblJl
YWRPbmx5KTsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZURlbGV0ZVJhbmdlT3BlcmF0aW9u
KG9iamVjdFN0b3JlSWQsIGtleVJhbmdlLCBjYWxsYmFja3MpOworfQorCit2b2lkIElEQkRhdGFi
YXNlQmFja2VuZDo6Y2xlYXIoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgTE9HKFN0
b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmQ6OmNsZWFyIik7CisgICAgSURCVHJhbnNhY3Rp
b25CYWNrZW5kKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklk
KTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKHRy
YW5zYWN0aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5KTsKKwor
ICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZUNsZWFyT3BlcmF0aW9uKG9iamVjdFN0b3JlSWQsIGNh
bGxiYWNrcyk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjp0cmFuc2FjdGlvblN0YXJ0
ZWQoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbikKK3sKKyAgICBpZiAodHJhbnNh
Y3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZSkgewor
ICAgICAgICBBU1NFUlQoIW1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7CisgICAg
ICAgIG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uOworICAg
IH0KK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OnRyYW5zYWN0aW9uRmluaXNoZWQoSURC
VHJhbnNhY3Rpb25CYWNrZW5kKiByYXdUcmFuc2FjdGlvbikKK3sKKyAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kPiB0cmFuc2FjdGlvbiA9IHJhd1RyYW5zYWN0aW9uOworICAgIEFTU0VS
VChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbi0+aWQoKSkpOworICAgIEFTU0VS
VChtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb24tPmlkKCkpID09IHRyYW5zYWN0aW9uLmdl
dCgpKTsKKyAgICBtX3RyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24tPmlkKCkpOworICAg
IGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9u
Q2hhbmdlKSB7CisgICAgICAgIEFTU0VSVCh0cmFuc2FjdGlvbi5nZXQoKSA9PSBtX3J1bm5pbmdW
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24uZ2V0KCkpOworICAgICAgICBtX3J1bm5pbmdWZXJzaW9u
Q2hhbmdlVHJhbnNhY3Rpb24uY2xlYXIoKTsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kOjp0cmFuc2FjdGlvbkZpbmlzaGVkQW5kQWJvcnRGaXJlZChJREJUcmFuc2FjdGlvbkJh
Y2tlbmQqIHJhd1RyYW5zYWN0aW9uKQoreworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmQ+IHRyYW5zYWN0aW9uID0gcmF3VHJhbnNhY3Rpb247CisgICAgaWYgKHRyYW5zYWN0aW9uLT5t
b2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpIHsKKyAgICAgICAg
Ly8gSWYgdGhpcyB3YXMgYW4gb3Blbi13aXRoLXZlcnNpb24gY2FsbCwgdGhlcmUgd2lsbCBiZSBh
ICJzZWNvbmQKKyAgICAgICAgLy8gaGFsZiIgb3BlbiBjYWxsIHdhaXRpbmcgZm9yIHVzIGluIHBy
b2Nlc3NQZW5kaW5nQ2FsbHMuCisgICAgICAgIC8vIEZJWE1FOiBXaGVuIHdlIG5vIGxvbmdlciBz
dXBwb3J0IHNldFZlcnNpb24sIGFzc2VydCBzdWNoIGEgdGhpbmcuCisgICAgICAgIGlmIChtX3Bl
bmRpbmdTZWNvbmRIYWxmT3BlbikgeworICAgICAgICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9w
ZW4tPmNhbGxiYWNrcygpLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6QWJvcnRFcnJvciwgIlZlcnNpb24gY2hhbmdlIHRyYW5zYWN0aW9uIHdh
cyBhYm9ydGVkIGluIHVwZ3JhZGVuZWVkZWQgZXZlbnQgaGFuZGxlci4iKSk7CisgICAgICAgICAg
ICBtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbi5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICAgICAg
cHJvY2Vzc1BlbmRpbmdDYWxscygpOworICAgIH0KK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tl
bmQ6OnRyYW5zYWN0aW9uRmluaXNoZWRBbmRDb21wbGV0ZUZpcmVkKElEQlRyYW5zYWN0aW9uQmFj
a2VuZCogcmF3VHJhbnNhY3Rpb24pCit7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZD4gdHJhbnNhY3Rpb24gPSByYXdUcmFuc2FjdGlvbjsKKyAgICBpZiAodHJhbnNhY3Rpb24tPm1v
ZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZSkKKyAgICAgICAgcHJv
Y2Vzc1BlbmRpbmdDYWxscygpOworfQorCitzaXplX3QgSURCRGF0YWJhc2VCYWNrZW5kOjpjb25u
ZWN0aW9uQ291bnQoKQoreworICAgIC8vIFRoaXMgZG9lcyBub3QgaW5jbHVkZSBwZW5kaW5nIG9w
ZW4gY2FsbHMsIGFzIHRob3NlIHNob3VsZCBub3QgYmxvY2sgdmVyc2lvbiBjaGFuZ2VzIGFuZCBk
ZWxldGVzLgorICAgIHJldHVybiBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LnNpemUoKTsKK30KKwor
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OnByb2Nlc3NQZW5kaW5nQ2FsbHMoKQoreworICAgIGlm
IChtX3BlbmRpbmdTZWNvbmRIYWxmT3BlbikgeworICAgICAgICBBU1NFUlQobV9wZW5kaW5nU2Vj
b25kSGFsZk9wZW4tPnZlcnNpb24oKSA9PSBtX21ldGFkYXRhLnZlcnNpb24pOworICAgICAgICBB
U1NFUlQobV9tZXRhZGF0YS5pZCAhPSBJbnZhbGlkSWQpOworICAgICAgICBtX3BlbmRpbmdTZWNv
bmRIYWxmT3Blbi0+Y2FsbGJhY2tzKCktPm9uU3VjY2Vzcyh0aGlzLCB0aGlzLT5tZXRhZGF0YSgp
KTsKKyAgICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4ucmVsZWFzZSgpOworICAgICAgICAv
LyBGYWxsIHRocm91Z2ggd2hlbiBjb21wbGV0ZSwgYXMgcGVuZGluZyBkZWxldGVzIG1heSBiZSAo
cGFydGlhbGx5KSB1bmJsb2NrZWQuCisgICAgfQorCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgY2hl
Y2sgaXMgb25seSBhbiBvcHRpbWl6YXRpb24gdG8gcmVkdWNlIHF1ZXVlLWNodXJuIGFuZAorICAg
IC8vIG5vdCBuZWNlc3NhcnkgZm9yIGNvcnJlY3RuZXNzOyBkZWxldGVEYXRhYmFzZSBhbmQgb3Bl
bkNvbm5lY3Rpb24gd2lsbAorICAgIC8vIHJlcXVldWUgdGhlaXIgY2FsbHMgaWYgdGhpcyBjb25k
aXRpb24gaXMgdHJ1ZS4KKyAgICBpZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9u
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1w
dHkoKSAmJiBpc0RlbGV0ZURhdGFiYXNlQmxvY2tlZCgpKQorICAgICAgICByZXR1cm47CisgICAg
d2hpbGUgKCFtX3BlbmRpbmdEZWxldGVDYWxscy5pc0VtcHR5KCkpIHsKKyAgICAgICAgT3duUHRy
PElEQlBlbmRpbmdEZWxldGVDYWxsPiBwZW5kaW5nRGVsZXRlQ2FsbCA9IG1fcGVuZGluZ0RlbGV0
ZUNhbGxzLnRha2VGaXJzdCgpOworICAgICAgICBtX2RlbGV0ZUNhbGxiYWNrc1dhaXRpbmdDb21w
bGV0aW9uLmFkZChwZW5kaW5nRGVsZXRlQ2FsbC0+Y2FsbGJhY2tzKCkpOworICAgICAgICBkZWxl
dGVEYXRhYmFzZUFzeW5jKHBlbmRpbmdEZWxldGVDYWxsLT5jYWxsYmFja3MoKSk7CisgICAgfQor
CisgICAgLy8gZGVsZXRlRGF0YWJhc2VBc3luYyBzaG91bGQgbmV2ZXIgcmUtcXVldWUgY2FsbHMu
CisgICAgQVNTRVJUKG1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSk7CisKKyAgICAvLyBJ
ZiB0aGVyZSBhcmUgYW55IGRhdGFiYXNlIGRlbGV0aW9ucyB3YWl0aW5nIGZvciBjb21wbGV0aW9u
LCB3ZSdyZSBkb25lIGZvciBub3cuCisgICAgLy8gRnVydGhlciBjYWxsYmFja3Mgd2lsbCBiZSBo
YW5kbGVkIGluIGEgZnV0dXJlIGNhbGwgdG8gcHJvY2Vzc1BlbmRpbmdDYWxscygpLgorICAgIGlm
IChtX2RlbGV0ZUNhbGxiYWNrc1dhaXRpbmdDb21wbGV0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgcHJvY2Vzc1BlbmRpbmdPcGVuQ2FsbHModHJ1ZSk7Cit9CisK
K3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpwcm9jZXNzUGVuZGluZ09wZW5DYWxscyhib29sIHN1
Y2Nlc3MpCit7CisgICAgLy8gT3BlbiBjYWxscyBjYW4gYmUgcmVxdWV1ZWQgaWYgYW4gb3BlbiBj
YWxsIHN0YXJ0ZWQgYSB2ZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbiBvciBkZWxldGVzIHRoZSBk
YXRhYmFzZS4KKyAgICBEZXF1ZTxPd25QdHI8SURCUGVuZGluZ09wZW5DYWxsPj4gcGVuZGluZ09w
ZW5DYWxsczsKKyAgICBtX3BlbmRpbmdPcGVuQ2FsbHMuc3dhcChwZW5kaW5nT3BlbkNhbGxzKTsK
KworICAgIHdoaWxlICghcGVuZGluZ09wZW5DYWxscy5pc0VtcHR5KCkpIHsKKyAgICAgICAgT3du
UHRyPElEQlBlbmRpbmdPcGVuQ2FsbD4gcGVuZGluZ09wZW5DYWxsID0gcGVuZGluZ09wZW5DYWxs
cy50YWtlRmlyc3QoKTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIGlmICht
X21ldGFkYXRhLmlkID09IEludmFsaWRJZCkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgZGF0
YWJhc2Ugd2FzIGRlbGV0ZWQgdGhlbiBxdWlja2x5IHJlLW9wZW5lZC4KKyAgICAgICAgICAgICAg
ICAvLyBvcGVuSW50ZXJuYWxBc3luYygpIHdpbGwgcmVjcmVhdGUgaXQgaW4gdGhlIGJhY2tpbmcg
c3RvcmUgYW5kIHRoZW4gcmVzdW1lIHByb2Nlc3NpbmcgcGVuZGluZyBjYWxsYmFja3MuCisgICAg
ICAgICAgICAgICAgcGVuZGluZ09wZW5DYWxscy5wcmVwZW5kKHBlbmRpbmdPcGVuQ2FsbC5yZWxl
YXNlKCkpOworICAgICAgICAgICAgICAgIHBlbmRpbmdPcGVuQ2FsbHMuc3dhcChtX3BlbmRpbmdP
cGVuQ2FsbHMpOworCisgICAgICAgICAgICAgICAgb3BlbkludGVybmFsQXN5bmMoKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvcGVuQ29ubmVj
dGlvbkludGVybmFsKHBlbmRpbmdPcGVuQ2FsbC0+Y2FsbGJhY2tzKCksIHBlbmRpbmdPcGVuQ2Fs
bC0+ZGF0YWJhc2VDYWxsYmFja3MoKSwgcGVuZGluZ09wZW5DYWxsLT50cmFuc2FjdGlvbklkKCks
IHBlbmRpbmdPcGVuQ2FsbC0+dmVyc2lvbigpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIFN0cmluZyBtZXNzYWdlOworICAgICAgICAgICAgaWYgKHBlbmRpbmdPcGVuQ2FsbC0+dmVy
c2lvbigpID09IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbikKKyAgICAgICAgICAg
ICAgICBtZXNzYWdlID0gIkludGVybmFsIGVycm9yIG9wZW5pbmcgZGF0YWJhc2Ugd2l0aCBubyB2
ZXJzaW9uIHNwZWNpZmllZC4iOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1l
c3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3Igb3BlbmluZyBkYXRhYmFzZSB3
aXRoIHZlcnNpb24gJWxsdSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4ocGVuZGlu
Z09wZW5DYWxsLT52ZXJzaW9uKCkpKTsKKyAgICAgICAgICAgIHBlbmRpbmdPcGVuQ2FsbC0+Y2Fs
bGJhY2tzKCktPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVbmtub3duRXJyb3IsIG1lc3NhZ2UpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmNyZWF0ZVRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNh
Y3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25z
dCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCB1bnNpZ25lZCBzaG9ydCBtb2RlKQor
eworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IHRyYW5zYWN0aW9uID0gbV9mYWN0
b3J5LT5tYXliZUNyZWF0ZVRyYW5zYWN0aW9uQmFja2VuZCh0aGlzLCB0cmFuc2FjdGlvbklkLCBj
YWxsYmFja3MsIG9iamVjdFN0b3JlSWRzLCBzdGF0aWNfY2FzdDxJbmRleGVkREI6OlRyYW5zYWN0
aW9uTW9kZT4obW9kZSkpOworCisgICAgaWYgKCF0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJu
OworCisgICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSk7
CisgICAgbV90cmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uSWQsIHRyYW5zYWN0aW9uLmdldCgp
KTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6Om9wZW5Db25uZWN0aW9uKFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxs
YmFja3M+IHBycERhdGFiYXNlQ2FsbGJhY2tzLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIHVpbnQ2
NF90IHZlcnNpb24pCit7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJw
Q2FsbGJhY2tzOworICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxs
YmFja3MgPSBwcnBEYXRhYmFzZUNhbGxiYWNrczsKKworICAgIG1fcGVuZGluZ09wZW5DYWxscy5h
cHBlbmQoSURCUGVuZGluZ09wZW5DYWxsOjpjcmVhdGUoKmNhbGxiYWNrcywgKmRhdGFiYXNlQ2Fs
bGJhY2tzLCB0cmFuc2FjdGlvbklkLCB2ZXJzaW9uKSk7CisKKyAgICBwcm9jZXNzUGVuZGluZ0Nh
bGxzKCk7Cit9CisKKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6Om9wZW5Db25uZWN0aW9uSW50
ZXJuYWwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwRGF0YWJhc2VDYWxsYmFja3MsIGludDY0X3QgdHJhbnNh
Y3Rpb25JZCwgdWludDY0X3QgdmVyc2lvbikKK3sKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUu
Z2V0KCkpOworICAgIEFTU0VSVChtX3BlbmRpbmdEZWxldGVDYWxscy5pc0VtcHR5KCkpOworICAg
IEFTU0VSVCghbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKTsKKworICAgIFJlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzID0gcHJwRGF0YWJhc2VDYWxsYmFj
a3M7CisKKyAgICAvLyBXZSBpbmZlciB0aGF0IHRoZSBkYXRhYmFzZSBkaWRuJ3QgZXhpc3QgZnJv
bSBpdHMgbGFjayBvZiBlaXRoZXIgdHlwZSBvZiB2ZXJzaW9uLgorICAgIGJvb2wgaXNOZXdEYXRh
YmFzZSA9IG1fbWV0YWRhdGEudmVyc2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZl
cnNpb247CisKKyAgICBpZiAodmVyc2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpEZWZhdWx0
SW50VmVyc2lvbikgeworICAgICAgICAvLyBGSVhNRTogdGhpcyBjb21tZW50cyB3YXMgcmVsYXRl
ZCB0byBDaHJvbWl1bSBjb2RlLiBJdCBtYXkgYmUgaW5jb3JyZWN0CisgICAgICAgIC8vIEZvciB1
bml0IHRlc3RzIG9ubHkgLSBza2lwIHVwZ3JhZGUgc3RlcHMuIENhbGxpbmcgZnJvbSBzY3JpcHQg
d2l0aCBEZWZhdWx0SW50VmVyc2lvbiB0aHJvd3MgZXhjZXB0aW9uLgorICAgICAgICBBU1NFUlQo
aXNOZXdEYXRhYmFzZSk7CisgICAgICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKGRhdGFi
YXNlQ2FsbGJhY2tzKTsKKyAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3ModGhpcywgdGhpcy0+
bWV0YWRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodmVyc2lvbiA9
PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pIHsKKyAgICAgICAgaWYgKCFpc05l
d0RhdGFiYXNlKSB7CisgICAgICAgICAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmFkZChSZWZQ
dHI8SURCRGF0YWJhc2VDYWxsYmFja3M+KGRhdGFiYXNlQ2FsbGJhY2tzKSk7CisgICAgICAgICAg
ICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0aGlzLCB0aGlzLT5tZXRhZGF0YSgpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBTcGVjIHNheXM6IElmIG5vIHZlcnNp
b24gaXMgc3BlY2lmaWVkIGFuZCBubyBkYXRhYmFzZSBleGlzdHMsIHNldCBkYXRhYmFzZSB2ZXJz
aW9uIHRvIDEuCisgICAgICAgIHZlcnNpb24gPSAxOworICAgIH0KKworICAgIGlmICh2ZXJzaW9u
ID4gbV9tZXRhZGF0YS52ZXJzaW9uKSB7CisgICAgICAgIHJ1bkludFZlcnNpb25DaGFuZ2VUcmFu
c2FjdGlvbihjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzLCB0cmFuc2FjdGlvbklkLCB2ZXJz
aW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh2ZXJzaW9uIDwgbV9tZXRh
ZGF0YS52ZXJzaW9uKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlZlcnNpb25FcnJvciwgU3RyaW5nOjpm
b3JtYXQoIlRoZSByZXF1ZXN0ZWQgdmVyc2lvbiAoJWxsdSkgaXMgbGVzcyB0aGFuIHRoZSBleGlz
dGluZyB2ZXJzaW9uICglbGx1KS4iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHZl
cnNpb24pLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KG1fbWV0YWRhdGEudmVyc2lv
bikpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQodmVyc2lvbiA9PSBt
X21ldGFkYXRhLnZlcnNpb24pOworICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKGRhdGFi
YXNlQ2FsbGJhY2tzKTsKKyAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0aGlzLCB0aGlzLT5tZXRh
ZGF0YSgpKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OnJ1bkludFZlcnNpb25DaGFu
Z2VUcmFuc2FjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBQYXNz
UmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBwcnBEYXRhYmFzZUNhbGxiYWNrcywgaW50NjRf
dCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24pCit7CisgICAgUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIFJlZlB0cjxJREJE
YXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MgPSBwcnBEYXRhYmFzZUNhbGxiYWNr
czsKKyAgICBBU1NFUlQoY2FsbGJhY2tzKTsKKyAgICBmb3IgKERhdGFiYXNlQ2FsbGJhY2tzU2V0
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYmVnaW4oKTsgaXQg
IT0gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5lbmQoKTsgKytpdCkgeworICAgICAgICAvLyBGcm9u
dCBlbmQgZW5zdXJlcyB0aGUgZXZlbnQgaXMgbm90IGZpcmVkIGF0IGNvbm5lY3Rpb25zIHRoYXQg
aGF2ZSBjbG9zZVBlbmRpbmcgc2V0LgorICAgICAgICBpZiAoKml0ICE9IGRhdGFiYXNlQ2FsbGJh
Y2tzKQorICAgICAgICAgICAgKCppdCktPm9uVmVyc2lvbkNoYW5nZShtX21ldGFkYXRhLnZlcnNp
b24sIHJlcXVlc3RlZFZlcnNpb24sIEluZGV4ZWREQjo6TnVsbFZlcnNpb24pOworICAgIH0KKyAg
ICAvLyBUaGUgc3BlYyBkaWN0YXRlcyB3ZSB3YWl0IHVudGlsIGFsbCB0aGUgdmVyc2lvbiBjaGFu
Z2UgZXZlbnRzIGFyZQorICAgIC8vIGRlbGl2ZXJlZCBhbmQgdGhlbiBjaGVjayBtX2RhdGFiYXNl
Q2FsbGJhY2tzLmVtcHR5KCkgYmVmb3JlIHByb2NlZWRpbmcKKyAgICAvLyBvciBmaXJpbmcgYSBi
bG9ja2VkIGV2ZW50LCBidXQgaW5zdGVhZCB3ZSBzaG91bGQgYmUgY29uc2lzdGVudCB3aXRoIGhv
dworICAgIC8vIHRoZSBvbGQgc2V0VmVyc2lvbiAoaW5jb3JyZWN0bHkpIGRpZCBpdC4KKyAgICAv
LyBGSVhNRTogUmVtb3ZlIHRoZSBjYWxsIHRvIG9uQmxvY2tlZCBhbmQgaW5zdGVhZCB3YWl0IHVu
dGlsIHRoZSBmcm9udGVuZAorICAgIC8vIHRlbGxzIHVzIHRoYXQgYWxsIHRoZSBibG9ja2VkIGV2
ZW50cyBoYXZlIGJlZW4gZGVsaXZlcmVkLiBTZWUKKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExMzAKKyAgICBpZiAoY29ubmVjdGlvbkNvdW50KCkpCisg
ICAgICAgIGNhbGxiYWNrcy0+b25CbG9ja2VkKG1fbWV0YWRhdGEudmVyc2lvbik7CisgICAgLy8g
RklYTUU6IEFkZCB0ZXN0IGZvciBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24uCisg
ICAgaWYgKG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiB8fCBjb25uZWN0aW9uQ291
bnQoKSkgeworICAgICAgICBtX3BlbmRpbmdPcGVuQ2FsbHMuYXBwZW5kKElEQlBlbmRpbmdPcGVu
Q2FsbDo6Y3JlYXRlKCpjYWxsYmFja3MsICpkYXRhYmFzZUNhbGxiYWNrcywgdHJhbnNhY3Rpb25J
ZCwgcmVxdWVzdGVkVmVyc2lvbikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVj
dG9yPGludDY0X3Q+IG9iamVjdFN0b3JlSWRzOworICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHRyYW5z
YWN0aW9uSWQsIGRhdGFiYXNlQ2FsbGJhY2tzLCBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERCOjpU
cmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmQ+IHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworCisg
ICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVmVyc2lvbkNoYW5nZU9wZXJhdGlvbih0cmFuc2FjdGlv
bklkLCByZXF1ZXN0ZWRWZXJzaW9uLCBjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzLCBtX21l
dGFkYXRhKTsKKworICAgIEFTU0VSVCghbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4pOworICAgIG1f
ZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKGRhdGFiYXNlQ2FsbGJhY2tzKTsKK30KKwordm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmQ6OmRlbGV0ZURhdGFiYXNlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBwcnBDYWxsYmFja3MpCit7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0g
cHJwQ2FsbGJhY2tzOworICAgIGlmIChpc0RlbGV0ZURhdGFiYXNlQmxvY2tlZCgpKSB7CisgICAg
ICAgIGZvciAoRGF0YWJhc2VDYWxsYmFja3NTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRh
YmFzZUNhbGxiYWNrc1NldC5iZWdpbigpOyBpdCAhPSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmVu
ZCgpOyArK2l0KSB7CisgICAgICAgICAgICAvLyBGcm9udCBlbmQgZW5zdXJlcyB0aGUgZXZlbnQg
aXMgbm90IGZpcmVkIGF0IGNvbm5lY3Rpb25zIHRoYXQgaGF2ZSBjbG9zZVBlbmRpbmcgc2V0Lgor
ICAgICAgICAgICAgKCppdCktPm9uVmVyc2lvbkNoYW5nZShtX21ldGFkYXRhLnZlcnNpb24sIDAs
IEluZGV4ZWREQjo6TnVsbFZlcnNpb24pOworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBP
bmx5IGZpcmUgb25CbG9ja2VkIGlmIHRoZXJlIGFyZSBvcGVuIGNvbm5lY3Rpb25zIGFmdGVyIHRo
ZQorICAgICAgICAvLyBWZXJzaW9uQ2hhbmdlRXZlbnRzIGFyZSByZWNlaXZlZCwgbm90IGp1c3Qg
c2V0IHVwIHRvIGZpcmUuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03MTEzMAorICAgICAgICBjYWxsYmFja3MtPm9uQmxvY2tlZChtX21ldGFkYXRh
LnZlcnNpb24pOworICAgICAgICBtX3BlbmRpbmdEZWxldGVDYWxscy5hcHBlbmQoSURCUGVuZGlu
Z0RlbGV0ZUNhbGw6OmNyZWF0ZShjYWxsYmFja3MucmVsZWFzZSgpKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgZGVsZXRlRGF0YWJhc2VBc3luYyhjYWxsYmFja3MucmVsZWFzZSgpKTsK
K30KKworYm9vbCBJREJEYXRhYmFzZUJhY2tlbmQ6OmlzRGVsZXRlRGF0YWJhc2VCbG9ja2VkKCkK
K3sKKyAgICByZXR1cm4gY29ubmVjdGlvbkNvdW50KCk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kOjpkZWxldGVEYXRhYmFzZUFzeW5jKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MpCit7CisgICAgQVNTRVJUKCFpc0RlbGV0ZURhdGFiYXNlQmxvY2tlZCgpKTsKKyAgICBB
U1NFUlQobV9iYWNraW5nU3RvcmUpOworCisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4g
c2VsZih0aGlzKTsKKyAgICBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlRGF0YWJhc2UobV9tZXRhZGF0
YS5uYW1lLCBbc2VsZiwgY2FsbGJhY2tzXShib29sIHN1Y2Nlc3MpIHsKKyAgICAgICAgQVNTRVJU
KHNlbGYtPm1fZGVsZXRlQ2FsbGJhY2tzV2FpdGluZ0NvbXBsZXRpb24uY29udGFpbnMoY2FsbGJh
Y2tzKSk7CisgICAgICAgIHNlbGYtPm1fZGVsZXRlQ2FsbGJhY2tzV2FpdGluZ0NvbXBsZXRpb24u
cmVtb3ZlKGNhbGxiYWNrcyk7CisKKyAgICAgICAgLy8gSWYgdGhpcyBJREJEYXRhYmFzZUJhY2tl
bmQgd2FzIGNsb3NlZCB3aGlsZSB3YWl0aW5nIGZvciBkZWxldGVEYXRhYmFzZSB0byBjb21wbGV0
ZSwgbm8gcG9pbnQgaW4gcGVyZm9ybWluZyBhbnkgY2FsbGJhY2tzLgorICAgICAgICBpZiAoIXNl
bGYtPm1fYmFja2luZ1N0b3JlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChz
dWNjZXNzKSB7CisgICAgICAgICAgICBzZWxmLT5tX21ldGFkYXRhLmlkID0gSW52YWxpZElkOwor
ICAgICAgICAgICAgc2VsZi0+bV9tZXRhZGF0YS52ZXJzaW9uID0gSURCRGF0YWJhc2VNZXRhZGF0
YTo6Tm9JbnRWZXJzaW9uOworICAgICAgICAgICAgc2VsZi0+bV9tZXRhZGF0YS5vYmplY3RTdG9y
ZXMuY2xlYXIoKTsKKyAgICAgICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKCk7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJy
b3IgZGVsZXRpbmcgZGF0YWJhc2UuIikpOworCisgICAgICAgIHNlbGYtPnByb2Nlc3NQZW5kaW5n
Q2FsbHMoKTsKKyAgICB9KTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmNsb3NlKFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IHBycENhbGxiYWNrcykKK3sKKyAgICBSZWZQ
dHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBB
U1NFUlQobV9kYXRhYmFzZUNhbGxiYWNrc1NldC5jb250YWlucyhjYWxsYmFja3MpKTsKKworICAg
IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQucmVtb3ZlKGNhbGxiYWNrcyk7CisgICAgaWYgKG1fcGVu
ZGluZ1NlY29uZEhhbGZPcGVuICYmIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLT5kYXRhYmFzZUNh
bGxiYWNrcygpID09IGNhbGxiYWNrcykgeworICAgICAgICBtX3BlbmRpbmdTZWNvbmRIYWxmT3Bl
bi0+Y2FsbGJhY2tzKCktPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yLCAiVGhlIGNvbm5lY3Rpb24gd2FzIGNsb3NlZC4iKSk7
CisgICAgICAgIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLnJlbGVhc2UoKTsKKyAgICB9CisKKyAg
ICBpZiAoY29ubmVjdGlvbkNvdW50KCkgPiAxKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBw
cm9jZXNzUGVuZGluZ0NhbGxzIGFsbG93cyB0aGUgaW5zcGVjdG9yIHRvIHByb2Nlc3MgYSBwZW5k
aW5nIG9wZW4gY2FsbAorICAgIC8vIGFuZCBjYWxsIGNsb3NlLCByZWVudGVyaW5nIElEQkRhdGFi
YXNlQmFja2VuZDo6Y2xvc2UuIFRoZW4gdGhlCisgICAgLy8gYmFja2VuZCB3b3VsZCBiZSByZW1v
dmVkIGJvdGggYnkgdGhlIGluc3BlY3RvciBjbG9zaW5nIGl0cyBjb25uZWN0aW9uLCBhbmQKKyAg
ICAvLyBieSB0aGUgY29ubmVjdGlvbiB0aGF0IGZpcnN0IGNhbGxlZCBjbG9zZS4KKyAgICAvLyBU
byBhdm9pZCB0aGF0IHNpdHVhdGlvbiwgZG9uJ3QgcHJvY2VlZCBpbiBjYXNlIG9mIHJlZW50cmFu
Y3kuCisgICAgaWYgKG1fY2xvc2luZ0Nvbm5lY3Rpb24pCisgICAgICAgIHJldHVybjsKKyAgICBU
ZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gY2xvc2luZ0Nvbm5lY3Rpb24obV9jbG9zaW5nQ29ubmVjdGlv
biwgdHJ1ZSk7CisgICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOworCisgICAgLy8gRklYTUU6IEFk
ZCBhIHRlc3QgZm9yIHRoZSBtX3BlbmRpbmdPcGVuQ2FsbHMgY2FzZXMgYmVsb3cuCisgICAgaWYg
KCFjb25uZWN0aW9uQ291bnQoKSAmJiAhbV9wZW5kaW5nT3BlbkNhbGxzLnNpemUoKSAmJiAhbV9w
ZW5kaW5nRGVsZXRlQ2FsbHMuc2l6ZSgpKSB7CisgICAgICAgIFRyYW5zYWN0aW9uTWFwIHRyYW5z
YWN0aW9ucyhtX3RyYW5zYWN0aW9ucyk7CisgICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9y
PiBlcnJvciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VW5rbm93bkVycm9yLCAiQ29ubmVjdGlvbiBpcyBjbG9zaW5nLiIpOworICAgICAgICBmb3IgKFRy
YW5zYWN0aW9uTWFwOjpjb25zdF9pdGVyYXRvcjo6VmFsdWVzIGl0ID0gdHJhbnNhY3Rpb25zLnZh
bHVlcygpLmJlZ2luKCksIGVuZCA9IHRyYW5zYWN0aW9ucy52YWx1ZXMoKS5lbmQoKTsgaXQgIT0g
ZW5kOyArK2l0KQorICAgICAgICAgICAgKCppdCktPmFib3J0KGVycm9yKTsKKworICAgICAgICBB
U1NFUlQobV90cmFuc2FjdGlvbnMuaXNFbXB0eSgpKTsKKworICAgICAgICBtX2JhY2tpbmdTdG9y
ZS5jbGVhcigpOworCisgICAgICAgIC8vIFRoaXMgY2hlY2sgc2hvdWxkIG9ubHkgYmUgZmFsc2Ug
aW4gdW5pdCB0ZXN0cy4KKyAgICAgICAgQVNTRVJUKG1fZmFjdG9yeSk7CisgICAgICAgIGlmICht
X2ZhY3RvcnkpCisgICAgICAgICAgICBtX2ZhY3RvcnktPnJlbW92ZUlEQkRhdGFiYXNlQmFja2Vu
ZChtX2lkZW50aWZpZXIpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZWY4ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuaApAQCAtMCwwICsx
LDE3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgSURCRGF0YWJhc2VCYWNrZW5kX2gKKyNkZWZpbmUgSURC
RGF0YWJhc2VCYWNrZW5kX2gKKworI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZC5oIgorI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiSURCTWV0YWRhdGEuaCIK
KyNpbmNsdWRlICJJREJQZW5kaW5nRGVsZXRlQ2FsbC5oIgorI2luY2x1ZGUgIklEQlBlbmRpbmdP
cGVuQ2FsbC5oIgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisK
KyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U7CitjbGFzcyBJREJEYXRhYmFzZTsKK2NsYXNz
IElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOworY2xhc3MgSURCS2V5OworY2xhc3MgSURCS2V5
UGF0aDsKK2NsYXNzIElEQktleVJhbmdlOworY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kOwor
Y2xhc3MgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKwor
c3RydWN0IElEQkRhdGFiYXNlTWV0YWRhdGE7CitzdHJ1Y3QgSURCSW5kZXhNZXRhZGF0YTsKK3N0
cnVjdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhOworCit0eXBlZGVmIFZlY3RvcjxSZWZQdHI8SURC
S2V5Pj4gSW5kZXhLZXlzOwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xhc3MgSURC
RGF0YWJhc2VCYWNrZW5kIDogcHVibGljIFJlZkNvdW50ZWQ8SURCRGF0YWJhc2VCYWNrZW5kPiB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBjcmVh
dGUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqLCBJREJGYWN0
b3J5QmFja2VuZEludGVyZmFjZSosIGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllcik7Cisg
ICAgfklEQkRhdGFiYXNlQmFja2VuZCgpOworCisgICAgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNl
KiBiYWNraW5nU3RvcmUoKSBjb25zdDsKKworICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IEludmFs
aWRJZCA9IDA7CisgICAgaW50NjRfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEuaWQ7
IH0KKyAgICB2b2lkIGFkZE9iamVjdFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEm
LCBpbnQ2NF90IG5ld01heE9iamVjdFN0b3JlSWQpOworICAgIHZvaWQgcmVtb3ZlT2JqZWN0U3Rv
cmUoaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAgICB2b2lkIGFkZEluZGV4KGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYsIGludDY0X3QgbmV3TWF4SW5kZXhJ
ZCk7CisgICAgdm9pZCByZW1vdmVJbmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCk7CisKKyAgICB2b2lkIG9wZW5Db25uZWN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGludDY0X3QgdHJhbnNhY3Rp
b25JZCwgdWludDY0X3QgdmVyc2lvbik7CisgICAgdm9pZCBkZWxldGVEYXRhYmFzZShQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4pOworCisgICAgLy8gSURCRGF0YWJhc2VCYWNrZW5kCisgICAgdm9p
ZCBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRv
SW5jcmVtZW50KTsKKyAgICB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJhbnNhY3Rp
b25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAgICB2b2lkIGNyZWF0ZVRyYW5zYWN0aW9u
KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4s
IGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIHVuc2lnbmVkIHNob3J0IG1v
ZGUpOworICAgIHZvaWQgY2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4pOwor
CisgICAgdm9pZCBjb21taXQoaW50NjRfdCB0cmFuc2FjdGlvbklkKTsKKyAgICB2b2lkIGFib3J0
KGludDY0X3QgdHJhbnNhY3Rpb25JZCk7CisgICAgdm9pZCBhYm9ydChpbnQ2NF90IHRyYW5zYWN0
aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pOworCisgICAgdm9pZCBjcmVhdGVJ
bmRleChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIHVu
aXF1ZSwgYm9vbCBtdWx0aUVudHJ5KTsKKyAgICB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOworCisg
ICAgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvciogdHJhbnNhY3Rpb25Db29yZGluYXRvcigpIGNv
bnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQoKTsgfQorICAgIHZvaWQg
dHJhbnNhY3Rpb25TdGFydGVkKElEQlRyYW5zYWN0aW9uQmFja2VuZCopOworICAgIHZvaWQgdHJh
bnNhY3Rpb25GaW5pc2hlZChJREJUcmFuc2FjdGlvbkJhY2tlbmQqKTsKKyAgICB2b2lkIHRyYW5z
YWN0aW9uRmluaXNoZWRBbmRDb21wbGV0ZUZpcmVkKElEQlRyYW5zYWN0aW9uQmFja2VuZCopOwor
ICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZEFuZEFib3J0RmlyZWQoSURCVHJhbnNhY3Rpb25C
YWNrZW5kKik7CisKKyAgICBlbnVtIFRhc2tUeXBlIHsKKyAgICAgICAgTm9ybWFsVGFzayA9IDAs
CisgICAgICAgIFByZWVtcHRpdmVUYXNrCisgICAgfTsKKworICAgIGVudW0gUHV0TW9kZSB7Cisg
ICAgICAgIEFkZE9yVXBkYXRlLAorICAgICAgICBBZGRPbmx5LAorICAgICAgICBDdXJzb3JVcGRh
dGUKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IGludDY0X3QgTWluaW11bUluZGV4SWQgPSAz
MDsKKworICAgIHZvaWQgZ2V0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBib29sIGtl
eU9ubHksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgdm9pZCBwdXQoaW50NjRfdCB0
cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8U2hhcmVkQnVm
ZmVyPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJ
bmRleEtleXM+Jik7CisgICAgdm9pZCBzZXRJbmRleEtleXMoaW50NjRfdCB0cmFuc2FjdGlvbklk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5
LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlz
PiYpOworICAgIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzKTsKKyAg
ICB2b2lkIG9wZW5DdXJzb3IoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEluZGV4ZWRE
Qjo6Q3Vyc29yRGlyZWN0aW9uLCBib29sIGtleU9ubHksIFRhc2tUeXBlLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4pOworICAgIHZvaWQgY291bnQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgdm9pZCBkZWxldGVSYW5nZShpbnQ2
NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgdm9pZCBjbGVhcihpbnQ2
NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+KTsKKworICAgIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhKCkg
Y29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YTsgfQorICAgIHZvaWQgc2V0Q3VycmVudFZlcnNpb24o
dWludDY0X3QgdmVyc2lvbikgeyBtX21ldGFkYXRhLnZlcnNpb24gPSB2ZXJzaW9uOyB9CisKKyAg
ICBib29sIGlzSURCRGF0YWJhc2VCYWNrZW5kKCkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgYm9v
bCBoYXNQZW5kaW5nU2Vjb25kSGFsZk9wZW4oKSB7IHJldHVybiBtX3BlbmRpbmdTZWNvbmRIYWxm
T3BlbjsgfQorICAgIHZvaWQgc2V0UGVuZGluZ1NlY29uZEhhbGZPcGVuKFBhc3NPd25QdHI8SURC
UGVuZGluZ09wZW5DYWxsPiBwZW5kaW5nT3BlbkNhbGwpIHsgbV9wZW5kaW5nU2Vjb25kSGFsZk9w
ZW4gPSBwZW5kaW5nT3BlbkNhbGw7IH0KKworICAgIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNl
JiBmYWN0b3J5QmFja2VuZCgpIHsgcmV0dXJuICptX2ZhY3Rvcnk7IH0KKworICAgIGNsYXNzIFZl
cnNpb25DaGFuZ2VPcGVyYXRpb247CisgICAgY2xhc3MgVmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0
aW9uOworCitwcml2YXRlOgorICAgIElEQkRhdGFiYXNlQmFja2VuZChjb25zdCBTdHJpbmcmIG5h
bWUsIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSosIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNl
KiwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKTsKKworICAgIHZvaWQgb3BlbkNvbm5l
Y3Rpb25JbnRlcm5hbChQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VDYWxsYmFja3M+LCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIHVpbnQ2NF90IHZlcnNpb24p
OworCisgICAgdm9pZCBvcGVuSW50ZXJuYWxBc3luYygpOworICAgIHZvaWQgZGlkT3BlbkludGVy
bmFsQXN5bmMoY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYsIGJvb2wgc3VjY2Vzcyk7CisKKyAg
ICB2b2lkIHJ1bkludFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBpbnQ2NF90IHRyYW5zYWN0
aW9uSWQsIGludDY0X3QgcmVxdWVzdGVkVmVyc2lvbik7CisgICAgc2l6ZV90IGNvbm5lY3Rpb25D
b3VudCgpOworICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdDYWxscygpOworICAgIHZvaWQgcHJvY2Vz
c1BlbmRpbmdPcGVuQ2FsbHMoYm9vbCBzdWNjZXNzKTsKKworICAgIGJvb2wgaXNEZWxldGVEYXRh
YmFzZUJsb2NrZWQoKTsKKyAgICB2b2lkIGRlbGV0ZURhdGFiYXNlQXN5bmMoUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+KTsKKworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U+IG1f
YmFja2luZ1N0b3JlOworICAgIElEQkRhdGFiYXNlTWV0YWRhdGEgbV9tZXRhZGF0YTsKKworICAg
IFN0cmluZyBtX2lkZW50aWZpZXI7CisgICAgLy8gVGhpcyBtaWdodCBub3QgbmVlZCB0byBiZSBh
IFJlZlB0ciBzaW5jZSB0aGUgZmFjdG9yeSdzIGxpZmV0aW1lIGlzIHRoYXQgb2YgdGhlIHBhZ2Ug
Z3JvdXAsIGJ1dCBpdCdzIGJldHRlciB0byBiZSBjb25zZXJ2YXRpdmUgdGhhbiBzb3JyeS4KKyAg
ICBSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IG1fZmFjdG9yeTsKKworICAgIE93
blB0cjxJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yPiBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3I7
CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV9ydW5uaW5nVmVyc2lvbkNoYW5n
ZVRyYW5zYWN0aW9uOworCisgICAgdHlwZWRlZiBIYXNoTWFwPGludDY0X3QsIElEQlRyYW5zYWN0
aW9uQmFja2VuZCo+IFRyYW5zYWN0aW9uTWFwOworICAgIFRyYW5zYWN0aW9uTWFwIG1fdHJhbnNh
Y3Rpb25zOworCisgICAgRGVxdWU8T3duUHRyPElEQlBlbmRpbmdPcGVuQ2FsbD4+IG1fcGVuZGlu
Z09wZW5DYWxsczsKKyAgICBPd25QdHI8SURCUGVuZGluZ09wZW5DYWxsPiBtX3BlbmRpbmdTZWNv
bmRIYWxmT3BlbjsKKworICAgIERlcXVlPE93blB0cjxJREJQZW5kaW5nRGVsZXRlQ2FsbD4+IG1f
cGVuZGluZ0RlbGV0ZUNhbGxzOworICAgIEhhc2hTZXQ8UmVmUHRyPElEQkNhbGxiYWNrcz4+IG1f
ZGVsZXRlQ2FsbGJhY2tzV2FpdGluZ0NvbXBsZXRpb247CisKKyAgICB0eXBlZGVmIExpc3RIYXNo
U2V0PFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4+IERhdGFiYXNlQ2FsbGJhY2tzU2V0Owor
ICAgIERhdGFiYXNlQ2FsbGJhY2tzU2V0IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQ7CisKKyAgICBi
b29sIG1fY2xvc2luZ0Nvbm5lY3Rpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2VuZGlmIC8vIElEQkRhdGFi
YXNlQmFja2VuZF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA3MTYxYjcwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjYy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJh
c2VCYWNrZW5kSW1wbC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNs
dWRlICJJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJJREJDdXJzb3JCYWNr
ZW5kLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKLSNpbmNsdWRlICJJREJE
YXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNl
LmgiCi0jaW5jbHVkZSAiSURCSW5kZXhXcml0ZXIuaCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZS5o
IgotI2luY2x1ZGUgIklEQlJlY29yZElkZW50aWZpZXIuaCIKLSNpbmNsdWRlICJJREJUcmFuc2Fj
dGlvbkJhY2tlbmQuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCi0j
aW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUg
PHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVm
UHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0
ZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0
b3JlLCBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSogZmFjdG9yeSwgY29uc3QgU3RyaW5nJiB1
bmlxdWVJZGVudGlmaWVyKQotewotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBi
YWNrZW5kID0gYWRvcHRSZWYobmV3IElEQkRhdGFiYXNlQmFja2VuZEltcGwobmFtZSwgYmFja2lu
Z1N0b3JlLCBmYWN0b3J5LCB1bmlxdWVJZGVudGlmaWVyKSk7Ci0gICAgYmFja2VuZC0+b3Blbklu
dGVybmFsQXN5bmMoKTsKLSAgICAKLSAgICByZXR1cm4gYmFja2VuZC5yZWxlYXNlKCk7Ci19Ci0K
LUlEQkRhdGFiYXNlQmFja2VuZEltcGw6OklEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3Ry
aW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgSURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2UqIGZhY3RvcnksIGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRp
ZmllcikKLSAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKLSAgICAsIG1fbWV0YWRh
dGEobmFtZSwgSW52YWxpZElkLCAwLCBJbnZhbGlkSWQpCi0gICAgLCBtX2lkZW50aWZpZXIodW5p
cXVlSWRlbnRpZmllcikKLSAgICAsIG1fZmFjdG9yeShmYWN0b3J5KQotICAgICwgbV90cmFuc2Fj
dGlvbkNvb3JkaW5hdG9yKElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmNyZWF0ZSgpKQotICAg
ICwgbV9jbG9zaW5nQ29ubmVjdGlvbihmYWxzZSkKLXsKLSAgICBBU1NFUlQoIW1fbWV0YWRhdGEu
bmFtZS5pc051bGwoKSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6YWRkT2Jq
ZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUsIGludDY0
X3QgbmV3TWF4T2JqZWN0U3RvcmVJZCkKLXsKLSAgICBBU1NFUlQoIW1fbWV0YWRhdGEub2JqZWN0
U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlLmlkKSk7Ci0gICAgaWYgKG5ld01heE9iamVjdFN0
b3JlSWQgIT0gSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW52YWxpZElkKSB7Ci0gICAgICAgIEFT
U0VSVChtX21ldGFkYXRhLm1heE9iamVjdFN0b3JlSWQgPCBuZXdNYXhPYmplY3RTdG9yZUlkKTsK
LSAgICAgICAgbV9tZXRhZGF0YS5tYXhPYmplY3RTdG9yZUlkID0gbmV3TWF4T2JqZWN0U3RvcmVJ
ZDsKLSAgICB9Ci0gICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3JlLmlk
LCBvYmplY3RTdG9yZSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVtb3Zl
T2JqZWN0U3RvcmUoaW50NjRfdCBvYmplY3RTdG9yZUlkKQotewotICAgIEFTU0VSVChtX21ldGFk
YXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Ci0gICAgbV9tZXRhZGF0
YS5vYmplY3RTdG9yZXMucmVtb3ZlKG9iamVjdFN0b3JlSWQpOwotfQotCi12b2lkIElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OmFkZEluZGV4KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURC
SW5kZXhNZXRhZGF0YSYgaW5kZXgsIGludDY0X3QgbmV3TWF4SW5kZXhJZCkKLXsKLSAgICBBU1NF
UlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwotICAg
IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmUgPSBtX21ldGFkYXRhLm9iamVjdFN0
b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7Ci0KLSAgICBBU1NFUlQoIW9iamVjdFN0b3JlLmluZGV4
ZXMuY29udGFpbnMoaW5kZXguaWQpKTsKLSAgICBvYmplY3RTdG9yZS5pbmRleGVzLnNldChpbmRl
eC5pZCwgaW5kZXgpOwotICAgIGlmIChuZXdNYXhJbmRleElkICE9IElEQkluZGV4TWV0YWRhdGE6
OkludmFsaWRJZCkgewotICAgICAgICBBU1NFUlQob2JqZWN0U3RvcmUubWF4SW5kZXhJZCA8IG5l
d01heEluZGV4SWQpOwotICAgICAgICBvYmplY3RTdG9yZS5tYXhJbmRleElkID0gbmV3TWF4SW5k
ZXhJZDsKLSAgICB9Ci0gICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3Jl
SWQsIG9iamVjdFN0b3JlKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1v
dmVJbmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkKLXsKLSAgICBB
U1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwot
ICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmUgPSBtX21ldGFkYXRhLm9iamVj
dFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7Ci0KLSAgICBBU1NFUlQob2JqZWN0U3RvcmUuaW5k
ZXhlcy5jb250YWlucyhpbmRleElkKSk7Ci0gICAgb2JqZWN0U3RvcmUuaW5kZXhlcy5yZW1vdmUo
aW5kZXhJZCk7Ci0gICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3JlSWQs
IG9iamVjdFN0b3JlKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuSW50
ZXJuYWxBc3luYygpCi17Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IHNlbGYg
PSB0aGlzOwotICAgIG1fYmFja2luZ1N0b3JlLT5nZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0
YWRhdGEobV9tZXRhZGF0YS5uYW1lLCBbc2VsZl0oY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYg
bWV0YWRhdGEsIGJvb2wgc3VjY2VzcykgewotICAgICAgICBzZWxmLT5kaWRPcGVuSW50ZXJuYWxB
c3luYyhtZXRhZGF0YSwgc3VjY2Vzcyk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6ZGlkT3BlbkludGVybmFsQXN5bmMoY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0
YSYgbWV0YWRhdGEsIGJvb2wgc3VjY2VzcykKLXsKLSAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAg
ICAgcHJvY2Vzc1BlbmRpbmdPcGVuQ2FsbHMoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgbV9tZXRhZGF0YSA9IG1ldGFkYXRhOwotCi0gICAgcHJvY2Vzc1BlbmRpbmdDYWxs
cygpOwotfQotCi1JREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp+SURCRGF0YWJhc2VCYWNrZW5kSW1w
bCgpCi17Ci19Ci0KLUlEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6YmFja2luZ1N0b3JlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9iYWNraW5nU3RvcmUu
Z2V0KCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3Rv
cmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50
KQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRl
T2JqZWN0U3RvcmUiKTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0g
bV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rpb24p
Ci0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRl
eGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZSk7Ci0KLSAgICBBU1NFUlQoIW1fbWV0YWRh
dGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKLSAgICBJREJPYmplY3RT
dG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlTWV0YWRhdGEobmFtZSwgb2JqZWN0U3RvcmVJZCwga2V5
UGF0aCwgYXV0b0luY3JlbWVudCwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpNaW5pbXVt
SW5kZXhJZCk7Ci0KLSAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVDcmVhdGVPYmplY3RTdG9yZU9w
ZXJhdGlvbihvYmplY3RTdG9yZU1ldGFkYXRhKTsKLSAgICBhZGRPYmplY3RTdG9yZShvYmplY3RT
dG9yZU1ldGFkYXRhLCBvYmplY3RTdG9yZUlkKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlIik7Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0
cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAgICBpZiAo
IXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5t
b2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpOwotCi0gICAgQVNT
RVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKLSAg
ICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhID0gbV9t
ZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOwotCi0gICAgdHJhbnNhY3Rp
b24tPnNjaGVkdWxlRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24ob2JqZWN0U3RvcmVNZXRhZGF0
YSk7Ci0gICAgcmVtb3ZlT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZCk7Ci19Ci0KLXZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5
KQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRl
SW5kZXgiKTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90cmFu
c2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAg
ICAgIHJldHVybjsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6
OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZSk7Ci0KLSAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmpl
Y3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwotICAgIGNvbnN0IElEQk9iamVjdFN0
b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmUgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2Jq
ZWN0U3RvcmVJZCk7Ci0KLSAgICBBU1NFUlQoIW9iamVjdFN0b3JlLmluZGV4ZXMuY29udGFpbnMo
aW5kZXhJZCkpOwotICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEgaW5kZXhNZXRhZGF0YShuYW1l
LCBpbmRleElkLCBrZXlQYXRoLCB1bmlxdWUsIG11bHRpRW50cnkpOwotCi0gICAgdHJhbnNhY3Rp
b24tPnNjaGVkdWxlQ3JlYXRlSW5kZXhPcGVyYXRpb24ob2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRh
ZGF0YSk7Ci0KLSAgICBhZGRJbmRleChvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhLCBpbmRl
eElkKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleChpbnQ2
NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
KQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRl
SW5kZXgiKTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90cmFu
c2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAg
ICAgIHJldHVybjsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6
OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZSk7Ci0KLSAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmpl
Y3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwotICAgIGNvbnN0IElEQk9iamVjdFN0
b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmUgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2Jq
ZWN0U3RvcmVJZCk7Ci0KLSAgICBBU1NFUlQob2JqZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhp
bmRleElkKSk7Ci0gICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSA9IG9i
amVjdFN0b3JlLmluZGV4ZXMuZ2V0KGluZGV4SWQpOwotCi0gICAgdHJhbnNhY3Rpb24tPnNjaGVk
dWxlRGVsZXRlSW5kZXhPcGVyYXRpb24ob2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSk7Ci0K
LSAgICByZW1vdmVJbmRleChvYmplY3RTdG9yZUlkLCBpbmRleElkKTsKLX0KLQotdm9pZCBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpjb21taXQoaW50NjRfdCB0cmFuc2FjdGlvbklkKQotewotICAg
IC8vIFRoZSBmcm9udGVuZCBzdWdnZXN0cyB0aGF0IHdlIGNvbW1pdCwgYnV0IHdlIG1heSBoYXZl
IHByZXZpb3VzbHkgaW5pdGlhdGVkIGFuIGFib3J0LCBhbmQgc28gaGF2ZSBkaXNwb3NlZCBvZiB0
aGUgdHJhbnNhY3Rpb24uIG9uQWJvcnQgaGFzIGFscmVhZHkgYmVlbiBkaXNwYXRjaGVkIHRvIHRo
ZSBmcm9udGVuZCwgc28gaXQgd2lsbCBmaW5kIG91dCBhYm91dCB0aGF0IGFzeW5jaHJvbm91c2x5
LgotICAgIGlmIChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSkKLSAgICAg
ICAgbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpLT5jb21taXQoKTsKLX0KLQotdm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjphYm9ydChpbnQ2NF90IHRyYW5zYWN0aW9uSWQpCi17
Ci0gICAgLy8gSWYgdGhlIHRyYW5zYWN0aW9uIGlzIHVua25vd24sIHRoZW4gaXQgaGFzIGFscmVh
ZHkgYmVlbiBhYm9ydGVkIGJ5IHRoZSBiYWNrZW5kIGJlZm9yZSB0aGlzIGNhbGwgc28gaXQgaXMg
c2FmZSB0byBpZ25vcmUgaXQuCi0gICAgaWYgKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5z
YWN0aW9uSWQpKQotICAgICAgICBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCktPmFi
b3J0KCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6YWJvcnQoaW50NjRfdCB0
cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yKQotewotICAg
IC8vIElmIHRoZSB0cmFuc2FjdGlvbiBpcyB1bmtub3duLCB0aGVuIGl0IGhhcyBhbHJlYWR5IGJl
ZW4gYWJvcnRlZCBieSB0aGUgYmFja2VuZCBiZWZvcmUgdGhpcyBjYWxsIHNvIGl0IGlzIHNhZmUg
dG8gaWdub3JlIGl0LgotICAgIGlmIChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlv
bklkKSkKLSAgICAgICAgbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpLT5hYm9ydChl
cnJvcik7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Z2V0KGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBib29sIGtleU9ubHksIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpnZXQiKTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0
aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNh
Y3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZUdldE9w
ZXJhdGlvbihtX21ldGFkYXRhLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwga2V5
T25seSA/IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSA6IEluZGV4ZWREQjo6Q3Vyc29yS2V5QW5k
VmFsdWUsIGNhbGxiYWNrcyk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cHV0
KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFB1dE1vZGUgcHV0
TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGlu
dDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKLXsK
LSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnB1dCIpOwotICAg
IElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQo
dHJhbnNhY3Rpb25JZCk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJuOwot
ICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25S
ZWFkT25seSk7Ci0KLSAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3Jl
TWV0YWRhdGEgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7Ci0K
LSAgICBBU1NFUlQob2JqZWN0U3RvcmVNZXRhZGF0YS5hdXRvSW5jcmVtZW50IHx8IGtleS5nZXQo
KSk7Ci0KLSAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVQdXRPcGVyYXRpb24ob2JqZWN0U3RvcmVN
ZXRhZGF0YSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCBpbmRleElkcywgaW5kZXhL
ZXlzKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMoaW50
NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURC
S2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25z
dCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAi
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0SW5kZXhLZXlzIik7Ci0gICAgQVNTRVJUKHBycFBy
aW1hcnlLZXkpOwotCi0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiA9IG1f
dHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKQot
ICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhl
ZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpOwotCi0gICAgUmVmUHRyPElEQktleT4gcHJp
bWFyeUtleSA9IHBycFByaW1hcnlLZXk7Ci0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZUludGVy
ZmFjZT4gc3RvcmUgPSBtX2JhY2tpbmdTdG9yZTsKLSAgICAvLyBGSVhNRTogVGhpcyBtZXRob2Qg
Y291bGQgYmUgYXN5bmNocm9ub3VzLCBidXQgd2UgbmVlZCB0byBldmFsdWF0ZSBpZiBpdCdzIHdv
cnRoIHRoZSBleHRyYSBjb21wbGV4aXR5LgotICAgIFJlZlB0cjxJREJSZWNvcmRJZGVudGlmaWVy
PiByZWNvcmRJZGVudGlmaWVyOwotICAgIGJvb2wgb2sgPSBzdG9yZS0+a2V5RXhpc3RzSW5PYmpl
Y3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9tZXRhZGF0
YS5pZCwgb2JqZWN0U3RvcmVJZCwgKnByaW1hcnlLZXksIHJlY29yZElkZW50aWZpZXIpOwotICAg
IGlmICghb2spIHsKLSAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJy
b3Igc2V0dGluZyBpbmRleCBrZXlzLiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBp
ZiAoIXJlY29yZElkZW50aWZpZXIpIHsKLSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+
IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpV
bmtub3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBzZXR0aW5nIGluZGV4
IGtleXMgZm9yIG9iamVjdCBzdG9yZS4iKSk7Ci0gICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChl
cnJvci5yZWxlYXNlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPFJl
ZlB0cjxJREJJbmRleFdyaXRlcj4+IGluZGV4V3JpdGVyczsKLSAgICBTdHJpbmcgZXJyb3JNZXNz
YWdlOwotICAgIGJvb2wgb2JleXNDb25zdHJhaW50cyA9IGZhbHNlOwotICAgIEFTU0VSVChtX21l
dGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Ci0gICAgY29uc3Qg
SURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1fbWV0YWRhdGEu
b2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKLSAgICBib29sIGJhY2tpbmdTdG9yZVN1
Y2Nlc3MgPSBzdG9yZS0+bWFrZUluZGV4V3JpdGVycygqdHJhbnNhY3Rpb24sIGlkKCksIG9iamVj
dFN0b3JlTWV0YWRhdGEsICpwcmltYXJ5S2V5LCBmYWxzZSwgaW5kZXhJZHMsIGluZGV4S2V5cywg
aW5kZXhXcml0ZXJzLCAmZXJyb3JNZXNzYWdlLCBvYmV5c0NvbnN0cmFpbnRzKTsKLSAgICBpZiAo
IWJhY2tpbmdTdG9yZVN1Y2Nlc3MpIHsKLSAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElEQkRh
dGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAi
SW50ZXJuYWwgZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgdXBkYXRpbmcgaW5kZXgga2V5cy4i
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFvYmV5c0NvbnN0cmFpbnRzKSB7
Ci0gICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvciwgZXJyb3JNZXNzYWdlKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4V3Jp
dGVycy5zaXplKCk7ICsraSkgewotICAgICAgICBJREJJbmRleFdyaXRlciogaW5kZXhXcml0ZXIg
PSBpbmRleFdyaXRlcnNbaV0uZ2V0KCk7Ci0gICAgICAgIGluZGV4V3JpdGVyLT53cml0ZUluZGV4
S2V5cyhyZWNvcmRJZGVudGlmaWVyLmdldCgpLCAqc3RvcmUuZ2V0KCksIHRyYW5zYWN0aW9uLT5i
YWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBpZCgpLCBvYmplY3RTdG9yZUlkKTsKLSAgICB9Ci19
Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5KGludDY0X3Qg
dHJhbnNhY3Rpb25JZCwgaW50NjRfdCwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcykK
LXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldEluZGV4
ZXNSZWFkeSIpOwotCi0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiA9IG1f
dHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVTZXRJbmRleGVzUmVh
ZHlPcGVyYXRpb24oaW5kZXhJZHMuc2l6ZSgpKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpvcGVuQ3Vyc29yKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdl
LCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wga2V5T25seSwgVGFz
a1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0g
ICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yIik7
Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25z
LmdldCh0cmFuc2FjdGlvbklkKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1
cm47Ci0KLSAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVPcGVuQ3Vyc29yT3BlcmF0aW9uKG9iamVj
dFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBkaXJlY3Rpb24sIGtleU9ubHkgPyBJbmRleGVk
REI6OkN1cnNvcktleU9ubHkgOiBJbmRleGVkREI6OkN1cnNvcktleUFuZFZhbHVlLCB0YXNrVHlw
ZSwgY2FsbGJhY2tzKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjb3VudChp
bnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OmNvdW50Iik7Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlv
biA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAgICBpZiAoIXRyYW5zYWN0
aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9y
ZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZUNv
dW50T3BlcmF0aW9uKG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBjYWxsYmFja3Mp
OwotfQotCi0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlUmFuZ2UoaW50NjRf
dCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewot
ICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlUmFuZ2Ui
KTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlv
bnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAgICAgIHJl
dHVybjsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJbmRleGVkREI6OlRyYW5z
YWN0aW9uUmVhZE9ubHkpOwotCi0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlRGVsZXRlUmFuZ2VP
cGVyYXRpb24ob2JqZWN0U3RvcmVJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcyk7Ci19Ci0KLXZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y2xlYXIoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17
Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjbGVhciIpOwot
ICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5n
ZXQodHJhbnNhY3Rpb25JZCk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJu
OwotICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rp
b25SZWFkT25seSk7Ci0KLSAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVDbGVhck9wZXJhdGlvbihv
YmplY3RTdG9yZUlkLCBjYWxsYmFja3MpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZElt
cGw6OnRyYW5zYWN0aW9uU3RhcnRlZChJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9u
KQotewotICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rp
b25WZXJzaW9uQ2hhbmdlKSB7Ci0gICAgICAgIEFTU0VSVCghbV9ydW5uaW5nVmVyc2lvbkNoYW5n
ZVRyYW5zYWN0aW9uKTsKLSAgICAgICAgbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9u
ID0gdHJhbnNhY3Rpb247Ci0gICAgfQotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OnRyYW5zYWN0aW9uRmluaXNoZWQoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiByYXdUcmFuc2FjdGlv
bikKLXsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiB0cmFuc2FjdGlvbiA9IHJh
d1RyYW5zYWN0aW9uOwotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2Fj
dGlvbi0+aWQoKSkpOwotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb24t
PmlkKCkpID09IHRyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX3RyYW5zYWN0aW9ucy5yZW1vdmUo
dHJhbnNhY3Rpb24tPmlkKCkpOwotICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4
ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKSB7Ci0gICAgICAgIEFTU0VSVCh0cmFuc2Fj
dGlvbi5nZXQoKSA9PSBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24uZ2V0KCkpOwot
ICAgICAgICBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24uY2xlYXIoKTsKLSAgICB9
Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25GaW5pc2hlZEFu
ZEFib3J0RmlyZWQoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiByYXdUcmFuc2FjdGlvbikKLXsKLSAg
ICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiB0cmFuc2FjdGlvbiA9IHJhd1RyYW5zYWN0
aW9uOwotICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rp
b25WZXJzaW9uQ2hhbmdlKSB7Ci0gICAgICAgIC8vIElmIHRoaXMgd2FzIGFuIG9wZW4td2l0aC12
ZXJzaW9uIGNhbGwsIHRoZXJlIHdpbGwgYmUgYSAic2Vjb25kCi0gICAgICAgIC8vIGhhbGYiIG9w
ZW4gY2FsbCB3YWl0aW5nIGZvciB1cyBpbiBwcm9jZXNzUGVuZGluZ0NhbGxzLgotICAgICAgICAv
LyBGSVhNRTogV2hlbiB3ZSBubyBsb25nZXIgc3VwcG9ydCBzZXRWZXJzaW9uLCBhc3NlcnQgc3Vj
aCBhIHRoaW5nLgotICAgICAgICBpZiAobV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4pIHsKLSAgICAg
ICAgICAgIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLT5jYWxsYmFja3MoKS0+b25FcnJvcihJREJE
YXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IsICJW
ZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbiB3YXMgYWJvcnRlZCBpbiB1cGdyYWRlbmVlZGVkIGV2
ZW50IGhhbmRsZXIuIikpOwotICAgICAgICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4ucmVs
ZWFzZSgpOwotICAgICAgICB9Ci0gICAgICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKLSAgICB9
Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25GaW5pc2hlZEFu
ZENvbXBsZXRlRmlyZWQoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiByYXdUcmFuc2FjdGlvbikKLXsK
LSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiB0cmFuc2FjdGlvbiA9IHJhd1RyYW5z
YWN0aW9uOwotICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNh
Y3Rpb25WZXJzaW9uQ2hhbmdlKQotICAgICAgICBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7Ci19Ci0K
LXNpemVfdCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjb25uZWN0aW9uQ291bnQoKQotewotICAg
IC8vIFRoaXMgZG9lcyBub3QgaW5jbHVkZSBwZW5kaW5nIG9wZW4gY2FsbHMsIGFzIHRob3NlIHNo
b3VsZCBub3QgYmxvY2sgdmVyc2lvbiBjaGFuZ2VzIGFuZCBkZWxldGVzLgotICAgIHJldHVybiBt
X2RhdGFiYXNlQ2FsbGJhY2tzU2V0LnNpemUoKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpwcm9jZXNzUGVuZGluZ0NhbGxzKCkKLXsKLSAgICBpZiAobV9wZW5kaW5nU2Vjb25k
SGFsZk9wZW4pIHsKLSAgICAgICAgQVNTRVJUKG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLT52ZXJz
aW9uKCkgPT0gbV9tZXRhZGF0YS52ZXJzaW9uKTsKLSAgICAgICAgQVNTRVJUKG1fbWV0YWRhdGEu
aWQgIT0gSW52YWxpZElkKTsKLSAgICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4tPmNhbGxi
YWNrcygpLT5vblN1Y2Nlc3ModGhpcywgdGhpcy0+bWV0YWRhdGEoKSk7Ci0gICAgICAgIG1fcGVu
ZGluZ1NlY29uZEhhbGZPcGVuLnJlbGVhc2UoKTsKLSAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHdo
ZW4gY29tcGxldGUsIGFzIHBlbmRpbmcgZGVsZXRlcyBtYXkgYmUgKHBhcnRpYWxseSkgdW5ibG9j
a2VkLgotICAgIH0KLQotICAgIC8vIE5vdGUgdGhhdCB0aGlzIGNoZWNrIGlzIG9ubHkgYW4gb3B0
aW1pemF0aW9uIHRvIHJlZHVjZSBxdWV1ZS1jaHVybiBhbmQKLSAgICAvLyBub3QgbmVjZXNzYXJ5
IGZvciBjb3JyZWN0bmVzczsgZGVsZXRlRGF0YWJhc2UgYW5kIG9wZW5Db25uZWN0aW9uIHdpbGwK
LSAgICAvLyByZXF1ZXVlIHRoZWlyIGNhbGxzIGlmIHRoaXMgY29uZGl0aW9uIGlzIHRydWUuCi0g
ICAgaWYgKG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKCFtX3BlbmRpbmdEZWxldGVDYWxscy5pc0VtcHR5KCkgJiYgaXNEZWxldGVE
YXRhYmFzZUJsb2NrZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHdoaWxlICghbV9wZW5kaW5n
RGVsZXRlQ2FsbHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIE93blB0cjxJREJQZW5kaW5nRGVsZXRl
Q2FsbD4gcGVuZGluZ0RlbGV0ZUNhbGwgPSBtX3BlbmRpbmdEZWxldGVDYWxscy50YWtlRmlyc3Qo
KTsKLSAgICAgICAgbV9kZWxldGVDYWxsYmFja3NXYWl0aW5nQ29tcGxldGlvbi5hZGQocGVuZGlu
Z0RlbGV0ZUNhbGwtPmNhbGxiYWNrcygpKTsKLSAgICAgICAgZGVsZXRlRGF0YWJhc2VBc3luYyhw
ZW5kaW5nRGVsZXRlQ2FsbC0+Y2FsbGJhY2tzKCkpOwotICAgIH0KLQotICAgIC8vIGRlbGV0ZURh
dGFiYXNlQXN5bmMgc2hvdWxkIG5ldmVyIHJlLXF1ZXVlIGNhbGxzLgotICAgIEFTU0VSVChtX3Bl
bmRpbmdEZWxldGVDYWxscy5pc0VtcHR5KCkpOwotCi0gICAgLy8gSWYgdGhlcmUgYXJlIGFueSBk
YXRhYmFzZSBkZWxldGlvbnMgd2FpdGluZyBmb3IgY29tcGxldGlvbiwgd2UncmUgZG9uZSBmb3Ig
bm93LgotICAgIC8vIEZ1cnRoZXIgY2FsbGJhY2tzIHdpbGwgYmUgaGFuZGxlZCBpbiBhIGZ1dHVy
ZSBjYWxsIHRvIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKS4KLSAgICBpZiAobV9kZWxldGVDYWxsYmFj
a3NXYWl0aW5nQ29tcGxldGlvbi5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHByb2Nlc3NQZW5kaW5nT3BlbkNhbGxzKHRydWUpOwotfQotCi12b2lkIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OnByb2Nlc3NQZW5kaW5nT3BlbkNhbGxzKGJvb2wgc3VjY2VzcykKLXsKLSAg
ICAvLyBPcGVuIGNhbGxzIGNhbiBiZSByZXF1ZXVlZCBpZiBhbiBvcGVuIGNhbGwgc3RhcnRlZCBh
IHZlcnNpb24gY2hhbmdlIHRyYW5zYWN0aW9uIG9yIGRlbGV0ZXMgdGhlIGRhdGFiYXNlLgotICAg
IERlcXVlPE93blB0cjxJREJQZW5kaW5nT3BlbkNhbGw+PiBwZW5kaW5nT3BlbkNhbGxzOwotICAg
IG1fcGVuZGluZ09wZW5DYWxscy5zd2FwKHBlbmRpbmdPcGVuQ2FsbHMpOwotCi0gICAgd2hpbGUg
KCFwZW5kaW5nT3BlbkNhbGxzLmlzRW1wdHkoKSkgewotICAgICAgICBPd25QdHI8SURCUGVuZGlu
Z09wZW5DYWxsPiBwZW5kaW5nT3BlbkNhbGwgPSBwZW5kaW5nT3BlbkNhbGxzLnRha2VGaXJzdCgp
OwotICAgICAgICBpZiAoc3VjY2VzcykgewotICAgICAgICAgICAgaWYgKG1fbWV0YWRhdGEuaWQg
PT0gSW52YWxpZElkKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBkYXRhYmFzZSB3YXMgZGVs
ZXRlZCB0aGVuIHF1aWNrbHkgcmUtb3BlbmVkLgotICAgICAgICAgICAgICAgIC8vIG9wZW5JbnRl
cm5hbEFzeW5jKCkgd2lsbCByZWNyZWF0ZSBpdCBpbiB0aGUgYmFja2luZyBzdG9yZSBhbmQgdGhl
biByZXN1bWUgcHJvY2Vzc2luZyBwZW5kaW5nIGNhbGxiYWNrcy4KLSAgICAgICAgICAgICAgICBw
ZW5kaW5nT3BlbkNhbGxzLnByZXBlbmQocGVuZGluZ09wZW5DYWxsLnJlbGVhc2UoKSk7Ci0gICAg
ICAgICAgICAgICAgcGVuZGluZ09wZW5DYWxscy5zd2FwKG1fcGVuZGluZ09wZW5DYWxscyk7Ci0K
LSAgICAgICAgICAgICAgICBvcGVuSW50ZXJuYWxBc3luYygpOwotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG9wZW5Db25uZWN0aW9uSW50ZXJuYWwo
cGVuZGluZ09wZW5DYWxsLT5jYWxsYmFja3MoKSwgcGVuZGluZ09wZW5DYWxsLT5kYXRhYmFzZUNh
bGxiYWNrcygpLCBwZW5kaW5nT3BlbkNhbGwtPnRyYW5zYWN0aW9uSWQoKSwgcGVuZGluZ09wZW5D
YWxsLT52ZXJzaW9uKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU3RyaW5nIG1l
c3NhZ2U7Ci0gICAgICAgICAgICBpZiAocGVuZGluZ09wZW5DYWxsLT52ZXJzaW9uKCkgPT0gSURC
RGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKQotICAgICAgICAgICAgICAgIG1lc3NhZ2Ug
PSAiSW50ZXJuYWwgZXJyb3Igb3BlbmluZyBkYXRhYmFzZSB3aXRoIG5vIHZlcnNpb24gc3BlY2lm
aWVkLiI7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbWVzc2FnZSA9IFN0cmlu
Zzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBvcGVuaW5nIGRhdGFiYXNlIHdpdGggdmVyc2lvbiAl
bGx1Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihwZW5kaW5nT3BlbkNhbGwtPnZl
cnNpb24oKSkpOwotICAgICAgICAgICAgcGVuZGluZ09wZW5DYWxsLT5jYWxsYmFja3MoKS0+b25F
cnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25v
d25FcnJvciwgbWVzc2FnZSkpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OmNyZWF0ZVRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JZCwg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8
aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCB1bnNpZ25lZCBzaG9ydCBtb2RlKQotewotICAgIFJl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IHRyYW5zYWN0aW9uID0gbV9mYWN0b3J5LT5tYXli
ZUNyZWF0ZVRyYW5zYWN0aW9uQmFja2VuZCh0aGlzLCB0cmFuc2FjdGlvbklkLCBjYWxsYmFja3Ms
IG9iamVjdFN0b3JlSWRzLCBzdGF0aWNfY2FzdDxJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZT4o
bW9kZSkpOwotCi0gICAgaWYgKCF0cmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
QVNTRVJUKCFtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSk7Ci0gICAgbV90
cmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uSWQsIHRyYW5zYWN0aW9uLmdldCgpKTsKLX0KLQot
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuQ29ubmVjdGlvbihQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tz
PiBwcnBEYXRhYmFzZUNhbGxiYWNrcywgaW50NjRfdCB0cmFuc2FjdGlvbklkLCB1aW50NjRfdCB2
ZXJzaW9uKQotewotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxi
YWNrczsKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tz
ID0gcHJwRGF0YWJhc2VDYWxsYmFja3M7Ci0KLSAgICBtX3BlbmRpbmdPcGVuQ2FsbHMuYXBwZW5k
KElEQlBlbmRpbmdPcGVuQ2FsbDo6Y3JlYXRlKCpjYWxsYmFja3MsICpkYXRhYmFzZUNhbGxiYWNr
cywgdHJhbnNhY3Rpb25JZCwgdmVyc2lvbikpOwotCi0gICAgcHJvY2Vzc1BlbmRpbmdDYWxscygp
OwotfQotCi0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkNvbm5lY3Rpb25JbnRl
cm5hbChQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPiBwcnBEYXRhYmFzZUNhbGxiYWNrcywgaW50NjRfdCB0cmFuc2Fj
dGlvbklkLCB1aW50NjRfdCB2ZXJzaW9uKQotewotICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZS5n
ZXQoKSk7Ci0gICAgQVNTRVJUKG1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSk7Ci0gICAg
QVNTRVJUKCFtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pOwotCi0gICAgUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIFJlZlB0cjxJREJE
YXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MgPSBwcnBEYXRhYmFzZUNhbGxiYWNr
czsKLQotICAgIC8vIFdlIGluZmVyIHRoYXQgdGhlIGRhdGFiYXNlIGRpZG4ndCBleGlzdCBmcm9t
IGl0cyBsYWNrIG9mIGVpdGhlciB0eXBlIG9mIHZlcnNpb24uCi0gICAgYm9vbCBpc05ld0RhdGFi
YXNlID0gbV9tZXRhZGF0YS52ZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVy
c2lvbjsKLQotICAgIGlmICh2ZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6OkRlZmF1bHRJ
bnRWZXJzaW9uKSB7Ci0gICAgICAgIC8vIEZJWE1FOiB0aGlzIGNvbW1lbnRzIHdhcyByZWxhdGVk
IHRvIENocm9taXVtIGNvZGUuIEl0IG1heSBiZSBpbmNvcnJlY3QKLSAgICAgICAgLy8gRm9yIHVu
aXQgdGVzdHMgb25seSAtIHNraXAgdXBncmFkZSBzdGVwcy4gQ2FsbGluZyBmcm9tIHNjcmlwdCB3
aXRoIERlZmF1bHRJbnRWZXJzaW9uIHRocm93cyBleGNlcHRpb24uCi0gICAgICAgIEFTU0VSVChp
c05ld0RhdGFiYXNlKTsKLSAgICAgICAgbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5hZGQoZGF0YWJh
c2VDYWxsYmFja3MpOwotICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0aGlzLCB0aGlzLT5t
ZXRhZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh2ZXJzaW9uID09
IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbikgewotICAgICAgICBpZiAoIWlzTmV3
RGF0YWJhc2UpIHsKLSAgICAgICAgICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKFJlZlB0
cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4oZGF0YWJhc2VDYWxsYmFja3MpKTsKLSAgICAgICAgICAg
IGNhbGxiYWNrcy0+b25TdWNjZXNzKHRoaXMsIHRoaXMtPm1ldGFkYXRhKCkpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIFNwZWMgc2F5czogSWYgbm8gdmVyc2lv
biBpcyBzcGVjaWZpZWQgYW5kIG5vIGRhdGFiYXNlIGV4aXN0cywgc2V0IGRhdGFiYXNlIHZlcnNp
b24gdG8gMS4KLSAgICAgICAgdmVyc2lvbiA9IDE7Ci0gICAgfQotCi0gICAgaWYgKHZlcnNpb24g
PiBtX21ldGFkYXRhLnZlcnNpb24pIHsKLSAgICAgICAgcnVuSW50VmVyc2lvbkNoYW5nZVRyYW5z
YWN0aW9uKGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MsIHRyYW5zYWN0aW9uSWQsIHZlcnNp
b24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHZlcnNpb24gPCBtX21ldGFk
YXRhLnZlcnNpb24pIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VmVyc2lvbkVycm9yLCBTdHJpbmc6OmZv
cm1hdCgiVGhlIHJlcXVlc3RlZCB2ZXJzaW9uICglbGx1KSBpcyBsZXNzIHRoYW4gdGhlIGV4aXN0
aW5nIHZlcnNpb24gKCVsbHUpLiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4odmVy
c2lvbiksIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obV9tZXRhZGF0YS52ZXJzaW9u
KSkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVCh2ZXJzaW9uID09IG1f
bWV0YWRhdGEudmVyc2lvbik7Ci0gICAgbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5hZGQoZGF0YWJh
c2VDYWxsYmFja3MpOwotICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHRoaXMsIHRoaXMtPm1ldGFk
YXRhKCkpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJ1bkludFZlcnNpb25D
aGFuZ2VUcmFuc2FjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBwcnBEYXRhYmFzZUNhbGxiYWNrcywgaW50
NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24pCi17Ci0gICAgUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIFJlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MgPSBwcnBEYXRhYmFzZUNhbGxi
YWNrczsKLSAgICBBU1NFUlQoY2FsbGJhY2tzKTsKLSAgICBmb3IgKERhdGFiYXNlQ2FsbGJhY2tz
U2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYmVnaW4oKTsg
aXQgIT0gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5lbmQoKTsgKytpdCkgewotICAgICAgICAvLyBG
cm9udCBlbmQgZW5zdXJlcyB0aGUgZXZlbnQgaXMgbm90IGZpcmVkIGF0IGNvbm5lY3Rpb25zIHRo
YXQgaGF2ZSBjbG9zZVBlbmRpbmcgc2V0LgotICAgICAgICBpZiAoKml0ICE9IGRhdGFiYXNlQ2Fs
bGJhY2tzKQotICAgICAgICAgICAgKCppdCktPm9uVmVyc2lvbkNoYW5nZShtX21ldGFkYXRhLnZl
cnNpb24sIHJlcXVlc3RlZFZlcnNpb24sIEluZGV4ZWREQjo6TnVsbFZlcnNpb24pOwotICAgIH0K
LSAgICAvLyBUaGUgc3BlYyBkaWN0YXRlcyB3ZSB3YWl0IHVudGlsIGFsbCB0aGUgdmVyc2lvbiBj
aGFuZ2UgZXZlbnRzIGFyZQotICAgIC8vIGRlbGl2ZXJlZCBhbmQgdGhlbiBjaGVjayBtX2RhdGFi
YXNlQ2FsbGJhY2tzLmVtcHR5KCkgYmVmb3JlIHByb2NlZWRpbmcKLSAgICAvLyBvciBmaXJpbmcg
YSBibG9ja2VkIGV2ZW50LCBidXQgaW5zdGVhZCB3ZSBzaG91bGQgYmUgY29uc2lzdGVudCB3aXRo
IGhvdwotICAgIC8vIHRoZSBvbGQgc2V0VmVyc2lvbiAoaW5jb3JyZWN0bHkpIGRpZCBpdC4KLSAg
ICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBjYWxsIHRvIG9uQmxvY2tlZCBhbmQgaW5zdGVhZCB3YWl0
IHVudGlsIHRoZSBmcm9udGVuZAotICAgIC8vIHRlbGxzIHVzIHRoYXQgYWxsIHRoZSBibG9ja2Vk
IGV2ZW50cyBoYXZlIGJlZW4gZGVsaXZlcmVkLiBTZWUKLSAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExMzAKLSAgICBpZiAoY29ubmVjdGlvbkNvdW50KCkp
Ci0gICAgICAgIGNhbGxiYWNrcy0+b25CbG9ja2VkKG1fbWV0YWRhdGEudmVyc2lvbik7Ci0gICAg
Ly8gRklYTUU6IEFkZCB0ZXN0IGZvciBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24u
Ci0gICAgaWYgKG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiB8fCBjb25uZWN0aW9u
Q291bnQoKSkgewotICAgICAgICBtX3BlbmRpbmdPcGVuQ2FsbHMuYXBwZW5kKElEQlBlbmRpbmdP
cGVuQ2FsbDo6Y3JlYXRlKCpjYWxsYmFja3MsICpkYXRhYmFzZUNhbGxiYWNrcywgdHJhbnNhY3Rp
b25JZCwgcmVxdWVzdGVkVmVyc2lvbikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
VmVjdG9yPGludDY0X3Q+IG9iamVjdFN0b3JlSWRzOwotICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHRy
YW5zYWN0aW9uSWQsIGRhdGFiYXNlQ2FsbGJhY2tzLCBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERC
OjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmQ+IHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwot
Ci0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVmVyc2lvbkNoYW5nZU9wZXJhdGlvbih0cmFuc2Fj
dGlvbklkLCByZXF1ZXN0ZWRWZXJzaW9uLCBjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzLCBt
X21ldGFkYXRhKTsKLQotICAgIEFTU0VSVCghbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4pOwotICAg
IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKGRhdGFiYXNlQ2FsbGJhY2tzKTsKLX0KLQotdm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZShQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gcHJwQ2FsbGJhY2tzKQotewotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBpZiAoaXNEZWxldGVEYXRhYmFzZUJsb2NrZWQoKSkg
ewotICAgICAgICBmb3IgKERhdGFiYXNlQ2FsbGJhY2tzU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYmVnaW4oKTsgaXQgIT0gbV9kYXRhYmFzZUNhbGxiYWNr
c1NldC5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgLy8gRnJvbnQgZW5kIGVuc3VyZXMgdGhl
IGV2ZW50IGlzIG5vdCBmaXJlZCBhdCBjb25uZWN0aW9ucyB0aGF0IGhhdmUgY2xvc2VQZW5kaW5n
IHNldC4KLSAgICAgICAgICAgICgqaXQpLT5vblZlcnNpb25DaGFuZ2UobV9tZXRhZGF0YS52ZXJz
aW9uLCAwLCBJbmRleGVkREI6Ok51bGxWZXJzaW9uKTsKLSAgICAgICAgfQotICAgICAgICAvLyBG
SVhNRTogT25seSBmaXJlIG9uQmxvY2tlZCBpZiB0aGVyZSBhcmUgb3BlbiBjb25uZWN0aW9ucyBh
ZnRlciB0aGUKLSAgICAgICAgLy8gVmVyc2lvbkNoYW5nZUV2ZW50cyBhcmUgcmVjZWl2ZWQsIG5v
dCBqdXN0IHNldCB1cCB0byBmaXJlLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzExMzAKLSAgICAgICAgY2FsbGJhY2tzLT5vbkJsb2NrZWQobV9t
ZXRhZGF0YS52ZXJzaW9uKTsKLSAgICAgICAgbV9wZW5kaW5nRGVsZXRlQ2FsbHMuYXBwZW5kKElE
QlBlbmRpbmdEZWxldGVDYWxsOjpjcmVhdGUoY2FsbGJhY2tzLnJlbGVhc2UoKSkpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGRlbGV0ZURhdGFiYXNlQXN5bmMoY2FsbGJhY2tzLnJlbGVh
c2UoKSk7Ci19Ci0KLWJvb2wgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6aXNEZWxldGVEYXRhYmFz
ZUJsb2NrZWQoKQotewotICAgIHJldHVybiBjb25uZWN0aW9uQ291bnQoKTsKLX0KLQotdm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZUFzeW5jKFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgQVNTRVJUKCFpc0RlbGV0ZURhdGFiYXNlQmxv
Y2tlZCgpKTsKLSAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwotCi0gICAgUmVmUHRyPElEQkRh
dGFiYXNlQmFja2VuZEltcGw+IHNlbGYodGhpcyk7Ci0gICAgbV9iYWNraW5nU3RvcmUtPmRlbGV0
ZURhdGFiYXNlKG1fbWV0YWRhdGEubmFtZSwgW3NlbGYsIGNhbGxiYWNrc10oYm9vbCBzdWNjZXNz
KSB7Ci0gICAgICAgIEFTU0VSVChzZWxmLT5tX2RlbGV0ZUNhbGxiYWNrc1dhaXRpbmdDb21wbGV0
aW9uLmNvbnRhaW5zKGNhbGxiYWNrcykpOwotICAgICAgICBzZWxmLT5tX2RlbGV0ZUNhbGxiYWNr
c1dhaXRpbmdDb21wbGV0aW9uLnJlbW92ZShjYWxsYmFja3MpOwotCi0gICAgICAgIC8vIElmIHRo
aXMgSURCRGF0YWJhc2VCYWNrZW5kIHdhcyBjbG9zZWQgd2hpbGUgd2FpdGluZyBmb3IgZGVsZXRl
RGF0YWJhc2UgdG8gY29tcGxldGUsIG5vIHBvaW50IGluIHBlcmZvcm1pbmcgYW55IGNhbGxiYWNr
cy4KLSAgICAgICAgaWYgKCFzZWxmLT5tX2JhY2tpbmdTdG9yZSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBpZiAoc3VjY2VzcykgewotICAgICAgICAgICAgc2VsZi0+bV9tZXRhZGF0
YS5pZCA9IEludmFsaWRJZDsKLSAgICAgICAgICAgIHNlbGYtPm1fbWV0YWRhdGEudmVyc2lvbiA9
IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbjsKLSAgICAgICAgICAgIHNlbGYtPm1f
bWV0YWRhdGEub2JqZWN0U3RvcmVzLmNsZWFyKCk7Ci0gICAgICAgICAgICBjYWxsYmFja3MtPm9u
U3VjY2VzcygpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25F
cnJvciwgIkludGVybmFsIGVycm9yIGRlbGV0aW5nIGRhdGFiYXNlLiIpKTsKLQotICAgICAgICBz
ZWxmLT5wcm9jZXNzUGVuZGluZ0NhbGxzKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6Y2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJw
Q2FsbGJhY2tzKQotewotICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tz
ID0gcHJwQ2FsbGJhY2tzOwotICAgIEFTU0VSVChtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmNvbnRh
aW5zKGNhbGxiYWNrcykpOwotCi0gICAgbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5yZW1vdmUoY2Fs
bGJhY2tzKTsKLSAgICBpZiAobV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4gJiYgbV9wZW5kaW5nU2Vj
b25kSGFsZk9wZW4tPmRhdGFiYXNlQ2FsbGJhY2tzKCkgPT0gY2FsbGJhY2tzKSB7Ci0gICAgICAg
IG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLT5jYWxsYmFja3MoKS0+b25FcnJvcihJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IsICJUaGUgY29u
bmVjdGlvbiB3YXMgY2xvc2VkLiIpKTsKLSAgICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4u
cmVsZWFzZSgpOwotICAgIH0KLQotICAgIGlmIChjb25uZWN0aW9uQ291bnQoKSA+IDEpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIHByb2Nlc3NQZW5kaW5nQ2FsbHMgYWxsb3dzIHRoZSBpbnNw
ZWN0b3IgdG8gcHJvY2VzcyBhIHBlbmRpbmcgb3BlbiBjYWxsCi0gICAgLy8gYW5kIGNhbGwgY2xv
c2UsIHJlZW50ZXJpbmcgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y2xvc2UuIFRoZW4gdGhlCi0g
ICAgLy8gYmFja2VuZCB3b3VsZCBiZSByZW1vdmVkIGJvdGggYnkgdGhlIGluc3BlY3RvciBjbG9z
aW5nIGl0cyBjb25uZWN0aW9uLCBhbmQKLSAgICAvLyBieSB0aGUgY29ubmVjdGlvbiB0aGF0IGZp
cnN0IGNhbGxlZCBjbG9zZS4KLSAgICAvLyBUbyBhdm9pZCB0aGF0IHNpdHVhdGlvbiwgZG9uJ3Qg
cHJvY2VlZCBpbiBjYXNlIG9mIHJlZW50cmFuY3kuCi0gICAgaWYgKG1fY2xvc2luZ0Nvbm5lY3Rp
b24pCi0gICAgICAgIHJldHVybjsKLSAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gY2xvc2luZ0Nv
bm5lY3Rpb24obV9jbG9zaW5nQ29ubmVjdGlvbiwgdHJ1ZSk7Ci0gICAgcHJvY2Vzc1BlbmRpbmdD
YWxscygpOwotCi0gICAgLy8gRklYTUU6IEFkZCBhIHRlc3QgZm9yIHRoZSBtX3BlbmRpbmdPcGVu
Q2FsbHMgY2FzZXMgYmVsb3cuCi0gICAgaWYgKCFjb25uZWN0aW9uQ291bnQoKSAmJiAhbV9wZW5k
aW5nT3BlbkNhbGxzLnNpemUoKSAmJiAhbV9wZW5kaW5nRGVsZXRlQ2FsbHMuc2l6ZSgpKSB7Ci0g
ICAgICAgIFRyYW5zYWN0aW9uTWFwIHRyYW5zYWN0aW9ucyhtX3RyYW5zYWN0aW9ucyk7Ci0gICAg
ICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiQ29ubmVjdGlvbiBpcyBj
bG9zaW5nLiIpOwotICAgICAgICBmb3IgKFRyYW5zYWN0aW9uTWFwOjpjb25zdF9pdGVyYXRvcjo6
VmFsdWVzIGl0ID0gdHJhbnNhY3Rpb25zLnZhbHVlcygpLmJlZ2luKCksIGVuZCA9IHRyYW5zYWN0
aW9ucy52YWx1ZXMoKS5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgKCppdCkt
PmFib3J0KGVycm9yKTsKLQotICAgICAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuaXNFbXB0eSgp
KTsKLQotICAgICAgICBtX2JhY2tpbmdTdG9yZS5jbGVhcigpOwotCi0gICAgICAgIC8vIFRoaXMg
Y2hlY2sgc2hvdWxkIG9ubHkgYmUgZmFsc2UgaW4gdW5pdCB0ZXN0cy4KLSAgICAgICAgQVNTRVJU
KG1fZmFjdG9yeSk7Ci0gICAgICAgIGlmIChtX2ZhY3RvcnkpCi0gICAgICAgICAgICBtX2ZhY3Rv
cnktPnJlbW92ZUlEQkRhdGFiYXNlQmFja2VuZChtX2lkZW50aWZpZXIpOwotICAgIH0KLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRh
YmFzZUJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZUJhY2tlbmRJbXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkZGJl
MGMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUwICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIElEQkRhdGFiYXNlQmFja2VuZEltcGxfaAotI2RlZmluZSBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsX2gKLQotI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIgot
I2luY2x1ZGUgIklEQk1ldGFkYXRhLmgiCi0jaW5jbHVkZSAiSURCUGVuZGluZ0RlbGV0ZUNhbGwu
aCIKLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgotCi0jaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURC
QmFja2luZ1N0b3JlSW50ZXJmYWNlOwotY2xhc3MgSURCRGF0YWJhc2U7Ci1jbGFzcyBJREJGYWN0
b3J5QmFja2VuZEludGVyZmFjZTsKLWNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZDsKLWNsYXNz
IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I7Ci0KLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZElt
cGwgRklOQUwgOiBwdWJsaWMgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBjcmVhdGUoY29u
c3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqLCBJREJGYWN0b3J5QmFj
a2VuZEludGVyZmFjZSosIGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllcik7Ci0gICAgdmly
dHVhbCB+SURCRGF0YWJhc2VCYWNrZW5kSW1wbCgpOwotCi0gICAgdmlydHVhbCBJREJCYWNraW5n
U3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSgpIGNvbnN0IE9WRVJSSURFOwotCi0gICAgc3Rh
dGljIGNvbnN0IGludDY0X3QgSW52YWxpZElkID0gMDsKLSAgICB2aXJ0dWFsIGludDY0X3QgaWQo
KSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX21ldGFkYXRhLmlkOyB9Ci0gICAgdmlydHVhbCB2
b2lkIGFkZE9iamVjdFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBpbnQ2NF90
IG5ld01heE9iamVjdFN0b3JlSWQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVP
YmplY3RTdG9yZShpbnQ2NF90IG9iamVjdFN0b3JlSWQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwg
dm9pZCBhZGRJbmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRh
dGEmLCBpbnQ2NF90IG5ld01heEluZGV4SWQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVJbmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkgT1ZFUlJJ
REU7Ci0KLSAgICB2b2lkIG9wZW5Db25uZWN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGludDY0X3QgdHJhbnNhY3Rpb25JZCwg
dWludDY0X3QgdmVyc2lvbik7Ci0gICAgdm9pZCBkZWxldGVEYXRhYmFzZShQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4pOwotCi0gICAgLy8gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlCi0gICAg
dmlydHVhbCB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgm
LCBib29sIGF1dG9JbmNyZW1lbnQpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9y
ZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7Ci0gICAgdmly
dHVhbCB2b2lkIGNyZWF0ZVRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0
U3RvcmVJZHMsIHVuc2lnbmVkIHNob3J0IG1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZShQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29t
bWl0KGludDY0X3QgdHJhbnNhY3Rpb25JZCk7Ci0gICAgdmlydHVhbCB2b2lkIGFib3J0KGludDY0
X3QgdHJhbnNhY3Rpb25JZCk7Ci0gICAgdmlydHVhbCB2b2lkIGFib3J0KGludDY0X3QgdHJhbnNh
Y3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgY3JlYXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRo
JiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSk7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0
ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQpOwotCi0gICAgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvciogdHJhbnNhY3Rp
b25Db29yZGluYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5n
ZXQoKTsgfQotICAgIHZvaWQgdHJhbnNhY3Rpb25TdGFydGVkKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZCopOwotICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZChJREJUcmFuc2FjdGlvbkJhY2tlbmQq
KTsKLSAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWRBbmRDb21wbGV0ZUZpcmVkKElEQlRyYW5z
YWN0aW9uQmFja2VuZCopOwotICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZEFuZEFib3J0Rmly
ZWQoSURCVHJhbnNhY3Rpb25CYWNrZW5kKik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0KGludDY0
X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBib29sIGtleU9ubHksIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChpbnQ2NF90IHRyYW5zYWN0
aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZh
bHVlLCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5
cz4mKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhLZXlzKGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleT4gcHJw
UHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9y
PEluZGV4S2V5cz4mKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhlc1JlYWR5
KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBWZWN0
b3I8aW50NjRfdD4mIGluZGV4SWRzKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1
cnNvcihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgSW5kZXhlZERCOjpDdXJzb3JEaXJl
Y3Rpb24sIGJvb2wga2V5T25seSwgVGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPikg
T1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGNvdW50KGludDY0X3QgdHJhbnNhY3Rpb25JZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pIE9WRVJSSURFOwotICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVSYW5nZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPikg
T1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyKGludDY0X3QgdHJhbnNhY3Rpb25JZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pIE9WRVJSSURF
OwotCi0gICAgdmlydHVhbCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSgpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fbWV0YWRhdGE7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0
Q3VycmVudFZlcnNpb24odWludDY0X3QgdmVyc2lvbikgT1ZFUlJJREUgeyBtX21ldGFkYXRhLnZl
cnNpb24gPSB2ZXJzaW9uOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNJREJEYXRhYmFzZUJhY2tl
bmRJbXBsKCkgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVhbCBib29sIGhh
c1BlbmRpbmdTZWNvbmRIYWxmT3BlbigpIE9WRVJSSURFIHsgcmV0dXJuIG1fcGVuZGluZ1NlY29u
ZEhhbGZPcGVuOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFBlbmRpbmdTZWNvbmRIYWxmT3BlbihQ
YXNzT3duUHRyPElEQlBlbmRpbmdPcGVuQ2FsbD4gcGVuZGluZ09wZW5DYWxsKSBPVkVSUklERSB7
IG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuID0gcGVuZGluZ09wZW5DYWxsOyB9Ci0KLSAgICB2aXJ0
dWFsIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlJiBmYWN0b3J5QmFja2VuZCgpIE9WRVJSSURF
IHsgcmV0dXJuICptX2ZhY3Rvcnk7IH0KLQotICAgIGNsYXNzIFZlcnNpb25DaGFuZ2VPcGVyYXRp
b247Ci0gICAgY2xhc3MgVmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uOwotCi1wcml2YXRlOgot
ICAgIElEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5n
U3RvcmVJbnRlcmZhY2UqLCBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSosIGNvbnN0IFN0cmlu
ZyYgdW5pcXVlSWRlbnRpZmllcik7Ci0KLSAgICB2b2lkIG9wZW5Db25uZWN0aW9uSW50ZXJuYWwo
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tz
PiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCB1aW50NjRfdCB2ZXJzaW9uKTsKLQotICAgIHZvaWQg
b3BlbkludGVybmFsQXN5bmMoKTsKLSAgICB2b2lkIGRpZE9wZW5JbnRlcm5hbEFzeW5jKGNvbnN0
IElEQkRhdGFiYXNlTWV0YWRhdGEmLCBib29sIHN1Y2Nlc3MpOwotCi0gICAgdm9pZCBydW5JbnRW
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVm
UHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90
IHJlcXVlc3RlZFZlcnNpb24pOwotICAgIHNpemVfdCBjb25uZWN0aW9uQ291bnQoKTsKLSAgICB2
b2lkIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKLSAgICB2b2lkIHByb2Nlc3NQZW5kaW5nT3BlbkNh
bGxzKGJvb2wgc3VjY2Vzcyk7Ci0KLSAgICBib29sIGlzRGVsZXRlRGF0YWJhc2VCbG9ja2VkKCk7
Ci0gICAgdm9pZCBkZWxldGVEYXRhYmFzZUFzeW5jKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7
Ci0KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlPiBtX2JhY2tpbmdTdG9yZTsK
LSAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1fbWV0YWRhdGE7Ci0KLSAgICBTdHJpbmcgbV9pZGVu
dGlmaWVyOwotICAgIC8vIFRoaXMgbWlnaHQgbm90IG5lZWQgdG8gYmUgYSBSZWZQdHIgc2luY2Ug
dGhlIGZhY3RvcnkncyBsaWZldGltZSBpcyB0aGF0IG9mIHRoZSBwYWdlIGdyb3VwLCBidXQgaXQn
cyBiZXR0ZXIgdG8gYmUgY29uc2VydmF0aXZlIHRoYW4gc29ycnkuCi0gICAgUmVmUHRyPElEQkZh
Y3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBtX2ZhY3Rvcnk7Ci0KLSAgICBPd25QdHI8SURCVHJhbnNh
Y3Rpb25Db29yZGluYXRvcj4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yOwotICAgIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbjsK
LQotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmQqPiBU
cmFuc2FjdGlvbk1hcDsKLSAgICBUcmFuc2FjdGlvbk1hcCBtX3RyYW5zYWN0aW9uczsKLQotICAg
IERlcXVlPE93blB0cjxJREJQZW5kaW5nT3BlbkNhbGw+PiBtX3BlbmRpbmdPcGVuQ2FsbHM7Ci0g
ICAgT3duUHRyPElEQlBlbmRpbmdPcGVuQ2FsbD4gbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW47Ci0K
LSAgICBEZXF1ZTxPd25QdHI8SURCUGVuZGluZ0RlbGV0ZUNhbGw+PiBtX3BlbmRpbmdEZWxldGVD
YWxsczsKLSAgICBIYXNoU2V0PFJlZlB0cjxJREJDYWxsYmFja3M+PiBtX2RlbGV0ZUNhbGxiYWNr
c1dhaXRpbmdDb21wbGV0aW9uOwotCi0gICAgdHlwZWRlZiBMaXN0SGFzaFNldDxSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+PiBEYXRhYmFzZUNhbGxiYWNrc1NldDsKLSAgICBEYXRhYmFzZUNh
bGxiYWNrc1NldCBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0OwotCi0gICAgYm9vbCBtX2Nsb3NpbmdD
b25uZWN0aW9uOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNlbmRpZiAvLyBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDE5YWRkNzguLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlX2gKLSNk
ZWZpbmUgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlX2gKLQotI2luY2x1ZGUgIklEQkNhbGxi
YWNrcy5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiSURC
RGF0YWJhc2VFcnJvci5oIgotI2luY2x1ZGUgIklEQlBlbmRpbmdPcGVuQ2FsbC5oIgotI2luY2x1
ZGUgIkluZGV4ZWREQi5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOwot
Y2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U7Ci1jbGFzcyBJREJLZXk7Ci1jbGFzcyBJ
REJLZXlQYXRoOwotY2xhc3MgSURCS2V5UmFuZ2U7Ci1jbGFzcyBTaGFyZWRCdWZmZXI7Ci0KLXN0
cnVjdCBJREJEYXRhYmFzZU1ldGFkYXRhOwotc3RydWN0IElEQkluZGV4TWV0YWRhdGE7Ci1zdHJ1
Y3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YTsKLQotdHlwZWRlZiBWZWN0b3I8UmVmUHRyPElEQktl
eT4+IEluZGV4S2V5czsKLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KLS8vIFRoaXMgaXMg
aW1wbGVtZW50ZWQgYnkgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCBhbmQgb3B0aW9uYWxseSBvdGhl
cnMgKGluIG9yZGVyIHRvIHByb3h5Ci0vLyBjYWxscyBhY3Jvc3MgcHJvY2VzcyBiYXJyaWVycyku
IEFsbCBjYWxscyB0byB0aGVzZSBjbGFzc2VzIHNob3VsZCBiZSBub24tYmxvY2tpbmcgYW5kCi0v
LyB0cmlnZ2VyIHdvcmsgb24gYSBiYWNrZ3JvdW5kIHRocmVhZCBpZiBuZWNlc3NhcnkuCi1jbGFz
cyBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJEYXRh
YmFzZUJhY2tlbmRJbnRlcmZhY2U+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5JREJEYXRhYmFz
ZUJhY2tlbmRJbnRlcmZhY2UoKSB7IH0KLQotICAgIHZpcnR1YWwgSURCQmFja2luZ1N0b3JlSW50
ZXJmYWNlKiBiYWNraW5nU3RvcmUoKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY3Jl
YXRlT2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3Jl
bWVudCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IHRy
YW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBjcmVhdGVUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRz
LCB1bnNpZ25lZCBzaG9ydCBtb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlKFBhc3NS
ZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+KSA9IDA7Ci0KLSAgICAvLyBUcmFuc2FjdGlvbi1z
cGVjaWZpYyBvcGVyYXRpb25zLgotICAgIHZpcnR1YWwgdm9pZCBjb21taXQoaW50NjRfdCB0cmFu
c2FjdGlvbklkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGFib3J0KGludDY0X3QgdHJhbnNhY3Rp
b25JZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhYm9ydChpbnQ2NF90IHRyYW5zYWN0aW9uSWQs
IFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBj
cmVhdGVJbmRleChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBi
b29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0
ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQpID0gMDsKLQotICAgIGVudW0gVGFza1R5cGUgewotICAgICAgICBOb3JtYWxU
YXNrID0gMCwKLSAgICAgICAgUHJlZW1wdGl2ZVRhc2sKLSAgICB9OwotCi0gICAgZW51bSBQdXRN
b2RlIHsKLSAgICAgICAgQWRkT3JVcGRhdGUsCi0gICAgICAgIEFkZE9ubHksCi0gICAgICAgIEN1
cnNvclVwZGF0ZQotICAgIH07Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBNaW5pbXVtSW5k
ZXhJZCA9IDMwOwotCi0gICAgdmlydHVhbCB2b2lkIGdldChpbnQ2NF90IHRyYW5zYWN0aW9uSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiwgYm9vbCBrZXlPbmx5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pID0gMDsKLSAg
ICAvLyBOb3RlIHRoYXQgJ3ZhbHVlJyBtYXkgYmUgY29uc3VtZWQvYWRvcHRlZCBieSB0aGlzIGNh
bGwuCi0gICAgdmlydHVhbCB2b2lkIHB1dChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRy
PElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9y
PGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZl
Y3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleGVzUmVhZHkoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJh
bmdlPiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24sIGJvb2wga2V5T25seSwgVGFza1R5cGUs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb3VudChp
bnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJhbmdlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyKGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4pID0gMDsKLQotICAgIHZpcnR1YWwgaW50NjRfdCBpZCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgYWRkT2JqZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIGlu
dDY0X3QgbmV3TWF4T2JqZWN0U3RvcmVJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVP
YmplY3RTdG9yZShpbnQ2NF90IG9iamVjdFN0b3JlSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
YWRkSW5kZXgoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiwg
aW50NjRfdCBuZXdNYXhJbmRleElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUluZGV4
KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKSA9IDA7Ci0KLSAgICB2aXJ0
dWFsIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhKCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRDdXJyZW50VmVyc2lvbih1aW50NjRfdCkgPSAwOwotCi0gICAgdmly
dHVhbCBib29sIGhhc1BlbmRpbmdTZWNvbmRIYWxmT3BlbigpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0UGVuZGluZ1NlY29uZEhhbGZPcGVuKFBhc3NPd25QdHI8SURCUGVuZGluZ09wZW5DYWxs
PikgPSAwOwotCi0gICAgdmlydHVhbCBib29sIGlzSURCRGF0YWJhc2VCYWNrZW5kSW1wbCgpIHsg
cmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2aXJ0dWFsIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNl
JiBmYWN0b3J5QmFja2VuZCgpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmCi0KLSNlbmRpZiAvLyBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2VfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJ
bnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggZTFhNWZjMy4uNjEwMWFlNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZS5oCkBAIC00MCw4ICs0MCw5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIElEQkNhbGxiYWNrczsKK2NsYXNzIElEQkN1cnNvckJhY2tlbmQ7CiBjbGFzcyBJREJEYXRh
YmFzZTsKLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTsKK2NsYXNzIElEQkRhdGFi
YXNlQmFja2VuZDsKIGNsYXNzIElEQkRhdGFiYXNlQ2FsbGJhY2tzOwogY2xhc3MgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CkBAIC02NCw5ICs2NSw5IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJREJEYXRhYmFzZUJhY2tlbmQoY29uc3Qg
U3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKSA9IDA7CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtYXliZUNyZWF0ZVRyYW5zYWN0aW9uQmFja2VuZChJREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UqLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0
b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSkgPSAwOworICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1heWJlQ3JlYXRlVHJhbnNhY3Rpb25CYWNr
ZW5kKElEQkRhdGFiYXNlQmFja2VuZCosIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3Rv
cmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlKSA9IDA7CiAKLSAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gY3JlYXRlQ3Vyc29yQmFja2VuZChJREJUcmFuc2Fj
dGlvbkJhY2tlbmQmLCBJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2UmLCBJbmRleGVkREI6
OkN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCkgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJDdXJzb3JC
YWNrZW5kPiBjcmVhdGVDdXJzb3JCYWNrZW5kKElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIElEQkJh
Y2tpbmdTdG9yZUN1cnNvckludGVyZmFjZSYsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSwgSURCRGF0
YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleC5jcHAKaW5kZXggNjM4MmNiOC4uZGY2MzczNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcApAQCAtNzEsNyArNzEsNyBAQCBQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4OjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIFBhcwogCiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3Qg
PSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJh
bnNhY3Rpb24uZ2V0KCkpOwogICAgIHJlcXVlc3QtPnNldEN1cnNvckRldGFpbHMoSW5kZXhlZERC
OjpDdXJzb3JLZXlBbmRWYWx1ZSwgZGlyZWN0aW9uKTsKLSAgICBiYWNrZW5kREIoKS0+b3BlbkN1
cnNvcihtX3RyYW5zYWN0aW9uLT5pZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCBtX21ldGFkYXRh
LmlkLCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBmYWxzZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJm
YWNlOjpOb3JtYWxUYXNrLCByZXF1ZXN0KTsKKyAgICBiYWNrZW5kREIoKS0+b3BlbkN1cnNvciht
X3RyYW5zYWN0aW9uLT5pZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCBtX21ldGFkYXRhLmlkLCBr
ZXlSYW5nZSwgZGlyZWN0aW9uLCBmYWxzZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpOb3JtYWxUYXNr
LCByZXF1ZXN0KTsKICAgICByZXR1cm4gcmVxdWVzdDsKIH0KIApAQCAtMTI2LDcgKzEyNiw3IEBA
IFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5LZXlDdXJzb3IoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwKIAogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0
ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3Ry
YW5zYWN0aW9uLmdldCgpKTsKICAgICByZXF1ZXN0LT5zZXRDdXJzb3JEZXRhaWxzKEluZGV4ZWRE
Qjo6Q3Vyc29yS2V5T25seSwgZGlyZWN0aW9uKTsKLSAgICBiYWNrZW5kREIoKS0+b3BlbkN1cnNv
cihtX3RyYW5zYWN0aW9uLT5pZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCBtX21ldGFkYXRhLmlk
LCBrZXlSYW5nZSwgZGlyZWN0aW9uLCB0cnVlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6
Ok5vcm1hbFRhc2ssIHJlcXVlc3QpOworICAgIGJhY2tlbmREQigpLT5vcGVuQ3Vyc29yKG1fdHJh
bnNhY3Rpb24tPmlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCksIG1fbWV0YWRhdGEuaWQsIGtleVJh
bmdlLCBkaXJlY3Rpb24sIHRydWUsIElEQkRhdGFiYXNlQmFja2VuZDo6Tm9ybWFsVGFzaywgcmVx
dWVzdCk7CiAgICAgcmV0dXJuIHJlcXVlc3Q7CiB9CiAKQEAgLTIwMCw3ICsyMDAsNyBAQCBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4OjpnZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgUGFzc1JlZgogICAgIHJldHVybiByZXF1ZXN0OwogfQogCi1JREJEYXRhYmFz
ZUJhY2tlbmRJbnRlcmZhY2UqIElEQkluZGV4OjpiYWNrZW5kREIoKSBjb25zdAorSURCRGF0YWJh
c2VCYWNrZW5kKiBJREJJbmRleDo6YmFja2VuZERCKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV90
cmFuc2FjdGlvbi0+YmFja2VuZERCKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCSW5kZXguaAppbmRleCBhYzgwYzUwLi4yMDU2MGY0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmgKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBtYXJrRGVsZXRlZCgpIHsgbV9kZWxldGVkID0gdHJ1ZTsgfQogCi0gICAg
SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlKiBiYWNrZW5kREIoKSBjb25zdDsKKyAgICBJREJE
YXRhYmFzZUJhY2tlbmQqIGJhY2tlbmREQigpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIElEQklu
ZGV4KGNvbnN0IElEQkluZGV4TWV0YWRhdGEmLCBJREJPYmplY3RTdG9yZSosIElEQlRyYW5zYWN0
aW9uKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleFdyaXRlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhX
cml0ZXIuaAppbmRleCBjZjEyNTk0Li4zMTYwYTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleFdyaXRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4V3JpdGVyLmgKQEAgLTI4LDcgKzI4LDcgQEAKICNk
ZWZpbmUgSURCSW5kZXhXcml0ZXJfaAogCiAjaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlSW50ZXJm
YWNlLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVk
ZSAiSURCRGF0YWJhc2VCYWNrZW5kLmgiCiAjaW5jbHVkZSAiSURCTWV0YWRhdGEuaCIKICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKaW5kZXggZDEwZGYwMy4uNTIwYzk0MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmNwcApAQCAtMTIwLDI4ICsxMjAsMjggQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVJbmRleEtleXNG
b3JWYWx1ZShET01SZXF1ZXN0U3RhdGUqIHJlcXVlc3RTdGF0ZSwgY29uc3QgSURCSW4KIFBhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmFkZChKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIFNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgU2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CiAgICAgTE9HKFN0b3JhZ2VBUEksICJJREJPYmplY3RTdG9yZTo6YWRkIik7
Ci0gICAgcmV0dXJuIHB1dChJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OkFkZE9ubHksIElE
QkFueTo6Y3JlYXRlKHRoaXMpLCBzdGF0ZSwgdmFsdWUsIGtleSwgZWMpOworICAgIHJldHVybiBw
dXQoSURCRGF0YWJhc2VCYWNrZW5kOjpBZGRPbmx5LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgc3Rh
dGUsIHZhbHVlLCBrZXksIGVjKTsKIH0KIAogUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmpl
Y3RTdG9yZTo6YWRkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgU2NyaXB0VmFsdWUmIHZhbHVlLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIklEQk9iamVjdFN0b3Jl
OjphZGQiKTsKLSAgICByZXR1cm4gcHV0KElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6QWRk
T25seSwgSURCQW55OjpjcmVhdGUodGhpcyksIHN0YXRlLCB2YWx1ZSwgc3RhdGljX2Nhc3Q8SURC
S2V5Kj4oMCksIGVjKTsKKyAgICByZXR1cm4gcHV0KElEQkRhdGFiYXNlQmFja2VuZDo6QWRkT25s
eSwgSURCQW55OjpjcmVhdGUodGhpcyksIHN0YXRlLCB2YWx1ZSwgc3RhdGljX2Nhc3Q8SURCS2V5
Kj4oMCksIGVjKTsKIH0KIAogUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6
cHV0KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgU2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBTY3Jp
cHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBMT0coU3RvcmFnZUFQSSwg
IklEQk9iamVjdFN0b3JlOjpwdXQiKTsKLSAgICByZXR1cm4gcHV0KElEQkRhdGFiYXNlQmFja2Vu
ZEludGVyZmFjZTo6QWRkT3JVcGRhdGUsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBzdGF0ZSwgdmFs
dWUsIGtleSwgZWMpOworICAgIHJldHVybiBwdXQoSURCRGF0YWJhc2VCYWNrZW5kOjpBZGRPclVw
ZGF0ZSwgSURCQW55OjpjcmVhdGUodGhpcyksIHN0YXRlLCB2YWx1ZSwga2V5LCBlYyk7CiB9CiAK
IFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIFNjcmlwdFZhbHVlJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAg
TE9HKFN0b3JhZ2VBUEksICJJREJPYmplY3RTdG9yZTo6cHV0Iik7Ci0gICAgcmV0dXJuIHB1dChJ
REJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OkFkZE9yVXBkYXRlLCBJREJBbnk6OmNyZWF0ZSh0
aGlzKSwgc3RhdGUsIHZhbHVlLCBzdGF0aWNfY2FzdDxJREJLZXkqPigwKSwgZWMpOworICAgIHJl
dHVybiBwdXQoSURCRGF0YWJhc2VCYWNrZW5kOjpBZGRPclVwZGF0ZSwgSURCQW55OjpjcmVhdGUo
dGhpcyksIHN0YXRlLCB2YWx1ZSwgc3RhdGljX2Nhc3Q8SURCS2V5Kj4oMCksIGVjKTsKIH0KIAot
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZTo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNl
LCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgU2NyaXB0
VmFsdWUmIGtleVZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8SURCUmVxdWVz
dD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJEYXRhYmFzZUJhY2tlbmQ6OlB1dE1vZGUgcHV0TW9k
ZSwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBTY3Jp
cHRWYWx1ZSYgdmFsdWUsIGNvbnN0IFNjcmlwdFZhbHVlJiBrZXlWYWx1ZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRGcm9tRXhlY1N0YXRlKHN0YXRlKTsKICAgICBET01SZXF1ZXN0U3RhdGUg
cmVxdWVzdFN0YXRlKGNvbnRleHQpOwpAQCAtMTQ5LDcgKzE0OSw3IEBAIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6
OlB1dE1vZGUKICAgICByZXR1cm4gcHV0KHB1dE1vZGUsIHNvdXJjZSwgc3RhdGUsIHZhbHVlLCBr
ZXkucmVsZWFzZSgpLCBlYyk7CiB9CiAKLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0
U3RvcmU6OnB1dChJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUgcHV0TW9kZSwg
UGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBTY3JpcHRW
YWx1ZSYgdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIEV4Y2VwdGlvbkNvZGUmIGVj
KQorUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQkRhdGFiYXNl
QmFja2VuZDo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIFNjcmlwdFZhbHVlJiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+
IHBycEtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgUmVmUHRyPElEQktleT4ga2V5ID0g
cHJwS2V5OwogICAgIGlmIChtX2RlbGV0ZWQpIHsKQEAgLTE4Niw3ICsxODYsNyBAQCBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoSURCRGF0YWJhc2VCYWNrZW5kSW50
ZXJmYWNlOjpQdXRNb2RlCiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRGcm9tRXhlY1N0YXRlKHN0YXRlKTsKICAgICBET01SZXF1ZXN0
U3RhdGUgcmVxdWVzdFN0YXRlKGNvbnRleHQpOwogCi0gICAgaWYgKHB1dE1vZGUgIT0gSURCRGF0
YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JVcGRhdGUgJiYgdXNlc0luTGluZUtleXMgJiYg
a2V5KSB7CisgICAgaWYgKHB1dE1vZGUgIT0gSURCRGF0YWJhc2VCYWNrZW5kOjpDdXJzb3JVcGRh
dGUgJiYgdXNlc0luTGluZUtleXMgJiYga2V5KSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OkRhdGFFcnJvcjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMjMzLDcg
KzIzMyw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUKICAgICAvLyBTZWUgaHR0cHM6Ly9saXN0
cy53ZWJraXQub3JnL3BpcGVybWFpbC93ZWJraXQtZGV2LzIwMTMtRmVicnVhcnkvMDIzNjgyLmh0
bWwKICAgICBWZWN0b3I8Y2hhcj4qIHZhbHVlQnl0ZXNTaWduZWQgPSByZWludGVycHJldF9jYXN0
PFZlY3RvcjxjaGFyPio+KCZ2YWx1ZUJ5dGVzKTsKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiB2
YWx1ZUJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IoKnZhbHVlQnl0ZXNTaWduZWQp
OwotICAgIGJhY2tlbmREQigpLT5wdXQobV90cmFuc2FjdGlvbi0+aWQoKSwgaWQoKSwgdmFsdWVC
dWZmZXIsIGtleS5yZWxlYXNlKCksIHN0YXRpY19jYXN0PElEQkRhdGFiYXNlQmFja2VuZEludGVy
ZmFjZTo6UHV0TW9kZT4ocHV0TW9kZSksIHJlcXVlc3QsIGluZGV4SWRzLCBpbmRleEtleXMpOwor
ICAgIGJhY2tlbmREQigpLT5wdXQobV90cmFuc2FjdGlvbi0+aWQoKSwgaWQoKSwgdmFsdWVCdWZm
ZXIsIGtleS5yZWxlYXNlKCksIHN0YXRpY19jYXN0PElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9k
ZT4ocHV0TW9kZSksIHJlcXVlc3QsIGluZGV4SWRzLCBpbmRleEtleXMpOwogICAgIHJldHVybiBy
ZXF1ZXN0LnJlbGVhc2UoKTsKIH0KIApAQCAtMjk5LDcgKzI5OSw3IEBAIG5hbWVzcGFjZSB7CiAv
LyBjdXJzb3Igc3VjY2VzcyBoYW5kbGVycyBhcmUga2VwdCBhbGl2ZS4KIGNsYXNzIEluZGV4UG9w
dWxhdG9yIDogcHVibGljIEV2ZW50TGlzdGVuZXIgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEluZGV4UG9wdWxhdG9yPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tl
bmRJbnRlcmZhY2U+IGJhY2tlbmQsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEluZGV4UG9wdWxhdG9yPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUJhY2tlbmQ+IGJhY2tlbmQsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbmRleFBvcHVsYXRvcihiYWNrZW5kLCB0cmFu
c2FjdGlvbklkLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSk7CiAgICAgfQpAQCAtMzEw
LDcgKzMxMCw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgSW5kZXhQb3B1bGF0
b3IoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIGludDY0
X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1l
dGFkYXRhJiBpbmRleE1ldGFkYXRhKQorICAgIEluZGV4UG9wdWxhdG9yKFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kPiBiYWNrZW5kLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKICAg
ICAgICAgOiBFdmVudExpc3RlbmVyKENQUEV2ZW50TGlzdGVuZXJUeXBlKQogICAgICAgICAsIG1f
ZGF0YWJhc2VCYWNrZW5kKGJhY2tlbmQpCiAgICAgICAgICwgbV90cmFuc2FjdGlvbklkKHRyYW5z
YWN0aW9uSWQpCkBAIC0zNTQsNyArMzU0LDcgQEAgcHJpdmF0ZToKIAogICAgIH0KIAotICAgIFJl
ZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+IG1fZGF0YWJhc2VCYWNrZW5kOworICAg
IFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IG1fZGF0YWJhc2VCYWNrZW5kOwogICAgIGNvbnN0
IGludDY0X3QgbV90cmFuc2FjdGlvbklkOwogICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9y
ZUlkOwogICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOwpAQCAtNDE1
LDcgKzQxNSw3IEBAIFBhc3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVjdFN0b3JlOjpjcmVhdGVJ
bmRleChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0CiAgICAgaWYgKGVjKQogICAgICAg
ICByZXR1cm4gMDsKIAotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBpbmRleFJlcXVlc3QgPSBvcGVu
Q3Vyc29yKGNvbnRleHQsIHN0YXRpY19jYXN0PElEQktleVJhbmdlKj4oMCksIElEQkN1cnNvcjo6
ZGlyZWN0aW9uTmV4dCgpLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlByZWVtcHRpdmVU
YXNrLCBlYyk7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IGluZGV4UmVxdWVzdCA9IG9wZW5DdXJz
b3IoY29udGV4dCwgc3RhdGljX2Nhc3Q8SURCS2V5UmFuZ2UqPigwKSwgSURCQ3Vyc29yOjpkaXJl
Y3Rpb25OZXh0KCksIElEQkRhdGFiYXNlQmFja2VuZDo6UHJlZW1wdGl2ZVRhc2ssIGVjKTsKICAg
ICBBU1NFUlQoIWVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNDkyLDcg
KzQ5MiwyNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlOjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcm
IG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIH0KIH0KIAotUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgY29uc3QgU3RyaW5nJiBkaXJl
Y3Rpb25TdHJpbmcsIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5
cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RT
dG9yZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBzdGF0aWNfY2Fz
dDxJREJLZXlSYW5nZSo+KDApLCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURC
T2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIGtleVJhbmdlLCBJREJDdXJzb3I6OmRpcmVj
dGlvbk5leHQoKSwgZWMpOworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0
b3JlOjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNj
cmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBvcGVuQ3Vy
c29yKGNvbnRleHQsIGtleSwgSURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCksIGVjKTsKK30KKwor
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwg
Y29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVy
biBvcGVuQ3Vyc29yKGNvbnRleHQsIHJhbmdlLCBkaXJlY3Rpb24sIElEQkRhdGFiYXNlQmFja2Vu
ZDo6Tm9ybWFsVGFzaywgZWMpOworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVj
dFN0b3JlOjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvblN0cmluZywg
SURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgTE9HKFN0b3JhZ2VBUEksICJJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvciIpOwog
ICAgIGlmIChtX2RlbGV0ZWQpIHsKQEAgLTUxMCw3ICs1MzAsNyBAQCBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IElEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleAogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3Jl
YXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsK
ICAgICByZXF1ZXN0LT5zZXRDdXJzb3JEZXRhaWxzKEluZGV4ZWREQjo6Q3Vyc29yS2V5QW5kVmFs
dWUsIGRpcmVjdGlvbik7CiAKLSAgICBiYWNrZW5kREIoKS0+b3BlbkN1cnNvcihtX3RyYW5zYWN0
aW9uLT5pZCgpLCBpZCgpLCBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQsIHJhbmdlLCBkaXJl
Y3Rpb24sIGZhbHNlLCBzdGF0aWNfY2FzdDxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRh
c2tUeXBlPih0YXNrVHlwZSksIHJlcXVlc3QpOworICAgIGJhY2tlbmREQigpLT5vcGVuQ3Vyc29y
KG1fdHJhbnNhY3Rpb24tPmlkKCksIGlkKCksIElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCwg
cmFuZ2UsIGRpcmVjdGlvbiwgZmFsc2UsIHN0YXRpY19jYXN0PElEQkRhdGFiYXNlQmFja2VuZDo6
VGFza1R5cGU+KHRhc2tUeXBlKSwgcmVxdWVzdCk7CiAgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFz
ZSgpOwogfQogCkBAIC01NjUsNyArNTg1LDcgQEAgaW50NjRfdCBJREJPYmplY3RTdG9yZTo6Zmlu
ZEluZGV4SWQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAogICAgIHJldHVybiBJREJJbmRleE1l
dGFkYXRhOjpJbnZhbGlkSWQ7CiB9CiAKLUlEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSogSURC
T2JqZWN0U3RvcmU6OmJhY2tlbmREQigpIGNvbnN0CitJREJEYXRhYmFzZUJhY2tlbmQqIElEQk9i
amVjdFN0b3JlOjpiYWNrZW5kREIoKSBjb25zdAogewogICAgIHJldHVybiBtX3RyYW5zYWN0aW9u
LT5iYWNrZW5kREIoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZS5oCmluZGV4IDEwOGNiMDAuLmM1ZmExZjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaApAQCAtNjcsMTEg
KzY3LDExIEBAIHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gYWRkKEpTQzo6
RXhlY1N0YXRlKiwgU2NyaXB0VmFsdWUmLCBFeGNlcHRpb25Db2RlJik7CiAgICAgUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBwdXQoSlNDOjpFeGVjU3RhdGUqLCBTY3JpcHRWYWx1ZSYsIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5D
dXJzb3IoY29udGV4dCwgc3RhdGljX2Nhc3Q8SURCS2V5UmFuZ2UqPigwKSwgZWMpOyB9Ci0gICAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBFeGNlcHRpb25Db2Rl
JiBlYykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXlSYW5nZSwgSURCQ3Vyc29yOjpk
aXJlY3Rpb25OZXh0KCksIGVjKTsgfQotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1
cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTY3JpcHRWYWx1ZSYg
a2V5LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXks
IElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7IH0KLSAgICBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRp
b25Db2RlJiBlYykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCByYW5nZSwgZGlyZWN0aW9u
LCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6Ok5vcm1hbFRhc2ssIGVjKTsgfQotICAgIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBJREJEYXRh
YmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBF
eGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9u
Q29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgY29uc3QgU2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBF
eGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgY29uc3QgU3Ry
aW5nJiBkaXJlY3Rpb24sIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUsIEV4Y2VwdGlvbkNv
ZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIGNvbnN0IFNjcmlwdFZhbHVlJiBrZXksIGNvbnN0IFN0cmluZyYgZGlyZWN0
aW9uLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGdldChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9u
Q29kZSYpOwpAQCAtOTQsOCArOTQsOCBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25D
b2RlJik7CiAKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChJREJEYXRhYmFzZUJhY2tl
bmRJbnRlcmZhY2U6OlB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIEpTQzo6RXhl
Y1N0YXRlKiwgU2NyaXB0VmFsdWUmLCBjb25zdCBTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoSURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlOjpQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBKU0M6OkV4ZWNT
dGF0ZSosIFNjcmlwdFZhbHVlJiwgUGFzc1JlZlB0cjxJREJLZXk+LCBFeGNlcHRpb25Db2RlJik7
CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRN
b2RlLCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBKU0M6OkV4ZWNTdGF0ZSosIFNjcmlwdFZh
bHVlJiwgY29uc3QgU2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gcHV0KElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZSwgUGFzc1Jl
ZlB0cjxJREJBbnk+IHNvdXJjZSwgSlNDOjpFeGVjU3RhdGUqLCBTY3JpcHRWYWx1ZSYsIFBhc3NS
ZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgbWFya0RlbGV0ZWQoKSB7
IG1fZGVsZXRlZCA9IHRydWU7IH0KICAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQoKTsKIApA
QCAtMTA1LDcgKzEwNSw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8SURC
S2V5Pj4gSW5kZXhLZXlzOwogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIEluZGV4S2V5cz4g
SW5kZXhLZXlNYXA7CiAKLSAgICBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UqIGJhY2tlbmRE
QigpIGNvbnN0OworICAgIElEQkRhdGFiYXNlQmFja2VuZCogYmFja2VuZERCKCkgY29uc3Q7CiAK
IHByaXZhdGU6CiAgICAgSURCT2JqZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0
YSYsIElEQlRyYW5zYWN0aW9uKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuY3BwCmluZGV4IDQ3OGE0MjYuLmNiNjQ0MzMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVl
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJl
cXVlc3QuY3BwCkBAIC00NSw3ICs0NSw3IEBAIFBhc3NSZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4g
SURCT3BlbkRCUmVxdWVzdDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvCiB9CiAK
IElEQk9wZW5EQlJlcXVlc3Q6OklEQk9wZW5EQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBp
bnQ2NF90IHRyYW5zYWN0aW9uSWQsIHVpbnQ2NF90IHZlcnNpb24sIEluZGV4ZWREQjo6VmVyc2lv
bk51bGxuZXNzIHZlcnNpb25OdWxsbmVzcykKLSAgICA6IElEQlJlcXVlc3QoY29udGV4dCwgSURC
QW55OjpjcmVhdGVOdWxsKCksIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6Tm9ybWFsVGFz
aywgMCkKKyAgICA6IElEQlJlcXVlc3QoY29udGV4dCwgSURCQW55OjpjcmVhdGVOdWxsKCksIElE
QkRhdGFiYXNlQmFja2VuZDo6Tm9ybWFsVGFzaywgMCkKICAgICAsIG1fZGF0YWJhc2VDYWxsYmFj
a3MoY2FsbGJhY2tzKQogICAgICwgbV90cmFuc2FjdGlvbklkKHRyYW5zYWN0aW9uSWQpCiAgICAg
LCBtX3ZlcnNpb24odmVyc2lvbikKQEAgLTcyLDExICs3MiwxMSBAQCB2b2lkIElEQk9wZW5EQlJl
cXVlc3Q6Om9uQmxvY2tlZCh1aW50NjRfdCBvbGRWZXJzaW9uKQogICAgIGVucXVldWVFdmVudChJ
REJWZXJzaW9uQ2hhbmdlRXZlbnQ6OmNyZWF0ZShvbGRWZXJzaW9uLCBtX3ZlcnNpb24sIG1fdmVy
c2lvbk51bGxuZXNzLCBldmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50KSk7CiB9CiAKLXZvaWQgSURC
T3BlbkRCUmVxdWVzdDo6b25VcGdyYWRlTmVlZGVkKHVpbnQ2NF90IG9sZFZlcnNpb24sIFBhc3NS
ZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPiBwcnBEYXRhYmFzZUJhY2tlbmQsIGNv
bnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhKQordm9pZCBJREJPcGVuREJSZXF1ZXN0
OjpvblVwZ3JhZGVOZWVkZWQodWludDY0X3Qgb2xkVmVyc2lvbiwgUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUJhY2tlbmQ+IHBycERhdGFiYXNlQmFja2VuZCwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0
YSYgbWV0YWRhdGEpCiB7CiAgICAgTE9HKFN0b3JhZ2VBUEksICJJREJPcGVuREJSZXF1ZXN0Ojpv
blVwZ3JhZGVOZWVkZWQoKSIpOwogICAgIGlmIChtX2NvbnRleHRTdG9wcGVkIHx8ICFzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpIHsKLSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZElu
dGVyZmFjZT4gZGIgPSBwcnBEYXRhYmFzZUJhY2tlbmQ7CisgICAgICAgIFJlZlB0cjxJREJEYXRh
YmFzZUJhY2tlbmQ+IGRiID0gcHJwRGF0YWJhc2VCYWNrZW5kOwogICAgICAgICBkYi0+YWJvcnQo
bV90cmFuc2FjdGlvbklkKTsKICAgICAgICAgZGItPmNsb3NlKG1fZGF0YWJhc2VDYWxsYmFja3Mp
OwogICAgICAgICByZXR1cm47CkBAIC04Niw3ICs4Niw3IEBAIHZvaWQgSURCT3BlbkRCUmVxdWVz
dDo6b25VcGdyYWRlTmVlZGVkKHVpbnQ2NF90IG9sZFZlcnNpb24sIFBhc3NSZWZQdHI8SURCRGF0
YWJhCiAKICAgICBBU1NFUlQobV9kYXRhYmFzZUNhbGxiYWNrcyk7CiAKLSAgICBSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPiBkYXRhYmFzZUJhY2tlbmQgPSBwcnBEYXRhYmFzZUJh
Y2tlbmQ7CisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4gZGF0YWJhc2VCYWNrZW5kID0g
cHJwRGF0YWJhc2VCYWNrZW5kOwogCiAgICAgUmVmUHRyPElEQkRhdGFiYXNlPiBpZGJEYXRhYmFz
ZSA9IElEQkRhdGFiYXNlOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBkYXRhYmFz
ZUJhY2tlbmQsIG1fZGF0YWJhc2VDYWxsYmFja3MpOwogICAgIGlkYkRhdGFiYXNlLT5zZXRNZXRh
ZGF0YShtZXRhZGF0YSk7CkBAIC0xMDQsMTMgKzEwNCwxMyBAQCB2b2lkIElEQk9wZW5EQlJlcXVl
c3Q6Om9uVXBncmFkZU5lZWRlZCh1aW50NjRfdCBvbGRWZXJzaW9uLCBQYXNzUmVmUHRyPElEQkRh
dGFiYQogICAgIGVucXVldWVFdmVudChJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6OmNyZWF0ZShvbGRW
ZXJzaW9uLCBtX3ZlcnNpb24sIG1fdmVyc2lvbk51bGxuZXNzLCBldmVudE5hbWVzKCkudXBncmFk
ZW5lZWRlZEV2ZW50KSk7CiB9CiAKLXZvaWQgSURCT3BlbkRCUmVxdWVzdDo6b25TdWNjZXNzKFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPiBwcnBCYWNrZW5kLCBjb25zdCBJ
REJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSkKK3ZvaWQgSURCT3BlbkRCUmVxdWVzdDo6b25T
dWNjZXNzKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBwcnBCYWNrZW5kLCBjb25zdCBJ
REJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSkKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIklE
Qk9wZW5EQlJlcXVlc3Q6Om9uU3VjY2VzcygpIik7CiAgICAgaWYgKCFzaG91bGRFbnF1ZXVlRXZl
bnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZElu
dGVyZmFjZT4gYmFja2VuZCA9IHBycEJhY2tlbmQ7CisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFj
a2VuZD4gYmFja2VuZCA9IHBycEJhY2tlbmQ7CiAgICAgUmVmUHRyPElEQkRhdGFiYXNlPiBpZGJE
YXRhYmFzZTsKICAgICBpZiAobV9yZXN1bHQpIHsKICAgICAgICAgaWRiRGF0YWJhc2UgPSBtX3Jl
c3VsdC0+aWRiRGF0YWJhc2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuaAppbmRleCA5NjA0NTlkLi4zOWRkNTM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5o
CkBAIC00Myw4ICs0Myw4IEBAIHB1YmxpYzoKICAgICB1c2luZyBJREJSZXF1ZXN0OjpvblN1Y2Nl
c3M7CiAKICAgICB2aXJ0dWFsIHZvaWQgb25CbG9ja2VkKHVpbnQ2NF90IGV4aXN0aW5nVmVyc2lv
bikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIG9uVXBncmFkZU5lZWRlZCh1aW50NjRfdCBv
bGRWZXJzaW9uLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4sIGNvbnN0
IElEQkRhdGFiYXNlTWV0YWRhdGEmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgb25TdWNj
ZXNzKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPiwgY29uc3QgSURCRGF0
YWJhc2VNZXRhZGF0YSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBvblVwZ3JhZGVOZWVk
ZWQodWludDY0X3Qgb2xkVmVyc2lvbiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+LCBj
b25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIG9u
U3VjY2VzcyhQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4sIGNvbnN0IElEQkRhdGFiYXNl
TWV0YWRhdGEmKSBPVkVSUklERTsKIAogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgdmlydHVhbCBF
dmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUGVuZGluZ0RlbGV0ZUNh
bGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdEZWxldGVD
YWxsLmgKaW5kZXggZTFjMmM4Mi4uMjJiZGE1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCUGVuZGluZ0RlbGV0ZUNhbGwuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJQZW5kaW5nRGVsZXRlQ2FsbC5oCkBAIC0yNiw2ICsy
Niw3IEBACiAjaWZuZGVmIElEQlBlbmRpbmdEZWxldGVDYWxsX2gKICNkZWZpbmUgSURCUGVuZGlu
Z0RlbGV0ZUNhbGxfaAogCisjaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCiAjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAgLTMzLDggKzM0LDYg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJREJDYWxsYmFja3M7Ci0KIGNsYXNz
IElEQlBlbmRpbmdEZWxldGVDYWxsIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxJ
REJQZW5kaW5nRGVsZXRlQ2FsbD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJS
ZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3Qu
Y3BwCmluZGV4IDk1ZDhjZjYuLjAwNDllZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCkBAIC00OSw3ICs0OSw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJSZXF1ZXN0OjpjcmVhdGUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwg
SURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQogewotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBy
ZXF1ZXN0KGFkb3B0UmVmKG5ldyBJREJSZXF1ZXN0KGNvbnRleHQsIHNvdXJjZSwgSURCRGF0YWJh
c2VCYWNrZW5kSW50ZXJmYWNlOjpOb3JtYWxUYXNrLCB0cmFuc2FjdGlvbikpKTsKKyAgICBSZWZQ
dHI8SURCUmVxdWVzdD4gcmVxdWVzdChhZG9wdFJlZihuZXcgSURCUmVxdWVzdChjb250ZXh0LCBz
b3VyY2UsIElEQkRhdGFiYXNlQmFja2VuZDo6Tm9ybWFsVGFzaywgdHJhbnNhY3Rpb24pKSk7CiAg
ICAgcmVxdWVzdC0+c3VzcGVuZElmTmVlZGVkKCk7CiAgICAgLy8gUmVxdWVzdHMgYXNzb2NpYXRl
ZCB3aXRoIElEQkZhY3RvcnkgKG9wZW4vZGVsZXRlRGF0YWJhc2UvZ2V0RGF0YWJhc2VOYW1lcykg
YXJlIG5vdCBhc3NvY2lhdGVkIHdpdGggdHJhbnNhY3Rpb25zLgogICAgIGlmICh0cmFuc2FjdGlv
bikKQEAgLTU3LDcgKzU3LDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJSZXF1ZXN0Ojpj
cmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1IKICAgICByZXR1cm4g
cmVxdWVzdC5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCUmVxdWVz
dDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURC
QW55PiBzb3VyY2UsIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5
cGUsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4g
SURCUmVxdWVzdDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NS
ZWZQdHI8SURCQW55PiBzb3VyY2UsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUgdGFza1R5
cGUsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKIHsKICAgICBSZWZQdHI8SURCUmVxdWVz
dD4gcmVxdWVzdChhZG9wdFJlZihuZXcgSURCUmVxdWVzdChjb250ZXh0LCBzb3VyY2UsIHRhc2tU
eXBlLCB0cmFuc2FjdGlvbikpKTsKICAgICByZXF1ZXN0LT5zdXNwZW5kSWZOZWVkZWQoKTsKQEAg
LTY3LDcgKzY3LDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJSZXF1ZXN0OjpjcmVhdGUo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1IKICAgICByZXR1cm4gcmVxdWVz
dC5yZWxlYXNlKCk7CiB9CiAKLUlEQlJlcXVlc3Q6OklEQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgSURCRGF0YWJhc2VC
YWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwgSURCVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uKQorSURCUmVxdWVzdDo6SURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRh
c2tUeXBlIHRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCiAgICAgOiBBY3Rp
dmVET01PYmplY3QoY29udGV4dCkKICAgICAsIG1fcmVzdWx0KDApCiAgICAgLCBtX2Vycm9yQ29k
ZSgwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVx
dWVzdC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCmlu
ZGV4IDVmNTliN2QuLjQzMDU4OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlJlcXVlc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJSZXF1ZXN0LmgKQEAgLTQyLDcgKzQyLDcgQEAKICNpbmNsdWRlICJJREJBbnkuaCIK
ICNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIKICNpbmNsdWRlICJJREJDdXJzb3IuaCIKLSNpbmNs
dWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFz
ZUJhY2tlbmQuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgogI2luY2x1ZGUg
IlNjcmlwdFdyYXBwYWJsZS5oIgogCkBAIC01NSw3ICs1NSw3IEBAIHR5cGVkZWYgaW50IEV4Y2Vw
dGlvbkNvZGU7CiBjbGFzcyBJREJSZXF1ZXN0IDogcHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVi
bGljIElEQkNhbGxiYWNrcywgcHVibGljIEV2ZW50VGFyZ2V0V2l0aElubGluZURhdGEsIHB1Ymxp
YyBBY3RpdmVET01PYmplY3QgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJBbnk+
IHNvdXJjZSwgSURCVHJhbnNhY3Rpb24qKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCQW55PiBz
b3VyY2UsIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUsIElEQlRyYW5zYWN0
aW9uKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY3JlYXRlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBJREJEYXRhYmFzZUJh
Y2tlbmQ6OlRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbiopOwogICAgIHZpcnR1YWwgfklEQlJlcXVl
c3QoKTsKIAogICAgIFBhc3NSZWZQdHI8SURCQW55PiByZXN1bHQoRXhjZXB0aW9uQ29kZSYpIGNv
bnN0OwpAQCAtMTExLDEyICsxMTEsMTIgQEAgcHVibGljOgogICAgIHVzaW5nIFJlZkNvdW50ZWQ8
SURCQ2FsbGJhY2tzPjo6cmVmOwogICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURCQ2FsbGJhY2tzPjo6
ZGVyZWY7CiAKLSAgICBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tU
eXBlKCkgeyByZXR1cm4gbV90YXNrVHlwZTsgfQorICAgIElEQkRhdGFiYXNlQmFja2VuZDo6VGFz
a1R5cGUgdGFza1R5cGUoKSB7IHJldHVybiBtX3Rhc2tUeXBlOyB9CiAKICAgICBET01SZXF1ZXN0
U3RhdGUqIHJlcXVlc3RTdGF0ZSgpIHsgcmV0dXJuICZtX3JlcXVlc3RTdGF0ZTsgfQogCiBwcm90
ZWN0ZWQ6Ci0gICAgSURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJBbnk+IHNvdXJjZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwg
SURCVHJhbnNhY3Rpb24qKTsKKyAgICBJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBl
LCBJREJUcmFuc2FjdGlvbiopOwogICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+KTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRW5xdWV1ZUV2ZW50KCkgY29uc3Q7CiAgICAg
dm9pZCBvblN1Y2Nlc3NJbnRlcm5hbChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4p
OwpAQCAtMTQzLDcgKzE0Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRSZXN1bHRDdXJzb3Io
UGFzc1JlZlB0cjxJREJDdXJzb3I+LCBQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURC
S2V5PiBwcmltYXJ5S2V5LCBjb25zdCBTY3JpcHRWYWx1ZSYpOwogCiAgICAgUmVmUHRyPElEQkFu
eT4gbV9zb3VyY2U7Ci0gICAgY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNr
VHlwZSBtX3Rhc2tUeXBlOworICAgIGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUg
bV90YXNrVHlwZTsKIAogICAgIGJvb2wgbV9oYXNQZW5kaW5nQWN0aXZpdHk7CiAgICAgVmVjdG9y
PFJlZlB0cjxFdmVudD4+IG1fZW5xdWV1ZWRFdmVudHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKaW5kZXggNzg4ZjYzMS4uYmQ3
MDAwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uLmNwcApAQCAtNDIxLDcgKzQyMSw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmVu
cXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKICAgICBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoZXZlbnQpOwogfQogCi1JREJEYXRh
YmFzZUJhY2tlbmRJbnRlcmZhY2UqIElEQlRyYW5zYWN0aW9uOjpiYWNrZW5kREIoKSBjb25zdAor
SURCRGF0YWJhc2VCYWNrZW5kKiBJREJUcmFuc2FjdGlvbjo6YmFja2VuZERCKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gZGIoKS0+YmFja2VuZCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgKaW5kZXggYTRlOGFmMC4uOWNlMGE3MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rp
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlv
bi5oCkBAIC00NCw3ICs0NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSURCQ3Vy
c29yOwogY2xhc3MgSURCRGF0YWJhc2U7Ci1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZh
Y2U7CitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmQ7CiBjbGFzcyBJREJEYXRhYmFzZUVycm9yOwog
Y2xhc3MgSURCT2JqZWN0U3RvcmU7CiBjbGFzcyBJREJPcGVuREJSZXF1ZXN0OwpAQCAtNjUsNyAr
NjUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIHN0
cmluZ1RvTW9kZShjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiAgICAgc3RhdGljIGNv
bnN0IEF0b21pY1N0cmluZyYgbW9kZVRvU3RyaW5nKEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2Rl
KTsKIAotICAgIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSogYmFja2VuZERCKCkgY29uc3Q7
CisgICAgSURCRGF0YWJhc2VCYWNrZW5kKiBiYWNrZW5kREIoKSBjb25zdDsKIAogICAgIGludDY0
X3QgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CiAgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUgPT0gQWN0aXZlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcAppbmRleCAz
N2YzMTQxLi5mYjNmZDk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAKQEAgLTI5LDcgKzI5LDcgQEAK
ICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogI2luY2x1ZGUgIklEQkN1cnNvckJhY2tl
bmQuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCisjaW5jbHVkZSAiSURC
RGF0YWJhc2VCYWNrZW5kLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKICNp
bmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNr
ZW5kSW50ZXJmYWNlLmgiCkBAIC00MCw3ICs0MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IElEQlRyYW5zYWN0aW9uQmFja2Vu
ZDo6Y3JlYXRlKElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNlQmFja2VuZCwgaW50NjRf
dCBpZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBW
ZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9k
ZSBtb2RlKQorUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IElEQlRyYW5zYWN0aW9u
QmFja2VuZDo6Y3JlYXRlKElEQkRhdGFiYXNlQmFja2VuZCogZGF0YWJhc2VCYWNrZW5kLCBpbnQ2
NF90IGlkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0
IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25N
b2RlIG1vZGUpCiB7CiAgICAgSGFzaFNldDxpbnQ2NF90PiBvYmplY3RTdG9yZUhhc2hTZXQ7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTdG9yZUlkcy5zaXplKCk7ICsraSkKQEAg
LTQ5LDcgKzQ5LDcgQEAgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IElEQlRyYW5z
YWN0aW9uQmFja2VuZDo6Y3JlYXRlKElEQkRhdGFiYXNlQmFja2UKICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IElEQlRyYW5zYWN0aW9uQmFja2VuZChkYXRhYmFzZUJhY2tlbmQsIGlkLCBjYWxsYmFj
a3MsIG9iamVjdFN0b3JlSGFzaFNldCwgbW9kZSkpOwogfQogCi1JREJUcmFuc2FjdGlvbkJhY2tl
bmQ6OklEQlRyYW5zYWN0aW9uQmFja2VuZChJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFz
ZUJhY2tlbmQsIGludDY0X3QgaWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGNh
bGxiYWNrcywgY29uc3QgSGFzaFNldDxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIEluZGV4ZWRE
Qjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUpCitJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OklEQlRyYW5z
YWN0aW9uQmFja2VuZChJREJEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlQmFja2VuZCwgaW50NjRf
dCBpZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBI
YXNoU2V0PGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1v
ZGUgbW9kZSkKICAgICA6IG1fb2JqZWN0U3RvcmVJZHMob2JqZWN0U3RvcmVJZHMpCiAgICAgLCBt
X21vZGUobW9kZSkKICAgICAsIG1fc3RhdGUoVW51c2VkKQpAQCAtNzQsMTIgKzc0LDEyIEBAIElE
QlRyYW5zYWN0aW9uQmFja2VuZDo6fklEQlRyYW5zYWN0aW9uQmFja2VuZCgpCiAgICAgQVNTRVJU
KG1fc3RhdGUgPT0gRmluaXNoZWQpOwogfQogCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6
c2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgdHlwZSwg
UGFzc093blB0cjxJREJPcGVyYXRpb24+IHRhc2ssIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBh
Ym9ydFRhc2spCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVUYXNrKElEQkRh
dGFiYXNlQmFja2VuZDo6VGFza1R5cGUgdHlwZSwgUGFzc093blB0cjxJREJPcGVyYXRpb24+IHRh
c2ssIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBhYm9ydFRhc2spCiB7CiAgICAgaWYgKG1fc3Rh
dGUgPT0gRmluaXNoZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICh0eXBlID09IElEQkRh
dGFiYXNlQmFja2VuZEludGVyZmFjZTo6Tm9ybWFsVGFzaykKKyAgICBpZiAodHlwZSA9PSBJREJE
YXRhYmFzZUJhY2tlbmQ6Ok5vcm1hbFRhc2spCiAgICAgICAgIG1fdGFza1F1ZXVlLmFwcGVuZCh0
YXNrKTsKICAgICBlbHNlCiAgICAgICAgIG1fcHJlZW1wdGl2ZVRhc2tRdWV1ZS5hcHBlbmQodGFz
ayk7CkBAIC0yODIsNyArMjgyLDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVk
dWxlRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oY29uc3QgSURCT2JqZWN0U3QKIAogdm9pZCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlVmVyc2lvbkNoYW5nZU9wZXJhdGlvbihpbnQ2
NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgcmVxdWVzdGVkVmVyc2lvbiwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4g
ZGF0YWJhc2VDYWxsYmFja3MsIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhKQog
ewotICAgIHNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdl
T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgdHJhbnNhY3Rpb25JZCwgcmVxdWVzdGVkVmVyc2lvbiwg
Y2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcyksIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZl
cnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIFN0cmluZzo6bnVtYmVyKG1l
dGFkYXRhLnZlcnNpb24pLCBtZXRhZGF0YS52ZXJzaW9uKSk7CisgICAgc2NoZWR1bGVUYXNrKElE
QkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIHRy
YW5zYWN0aW9uSWQsIHJlcXVlc3RlZFZlcnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFj
a3MpLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6Y3Jl
YXRlKHRoaXMsIFN0cmluZzo6bnVtYmVyKG1ldGFkYXRhLnZlcnNpb24pLCBtZXRhZGF0YS52ZXJz
aW9uKSk7CiB9CiAKIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZUNyZWF0ZUlu
ZGV4T3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0
YSYgaW5kZXhNZXRhZGF0YSkKQEAgLTMwMCwxNyArMzAwLDE3IEBAIHZvaWQgSURCVHJhbnNhY3Rp
b25CYWNrZW5kOjpzY2hlZHVsZUdldE9wZXJhdGlvbihjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRh
JiBtZXRhCiAgICAgc2NoZWR1bGVUYXNrKEdldE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG1fYmFj
a2luZ1N0b3JlLmdldCgpLCBtZXRhZGF0YSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFu
Z2UsIGN1cnNvclR5cGUsIGNhbGxiYWNrcykpOwogfQogCi12b2lkIElEQlRyYW5zYWN0aW9uQmFj
a2VuZDo6c2NoZWR1bGVQdXRPcGVyYXRpb24oY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYg
b2JqZWN0U3RvcmVNZXRhZGF0YSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNz
UmVmUHRyPElEQktleT4ga2V5LCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUg
cHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9y
PGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykK
K3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZVB1dE9wZXJhdGlvbihjb25zdCBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhLCBQYXNzUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIElEQkRhdGFiYXNlQmFj
a2VuZDo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlz
PiYgaW5kZXhLZXlzKQogewogICAgIHNjaGVkdWxlVGFzayhQdXRPcGVyYXRpb246OmNyZWF0ZSh0
aGlzLCBtX2JhY2tpbmdTdG9yZS5nZXQoKSwgZGF0YWJhc2UoKS5pZCgpLCBvYmplY3RTdG9yZU1l
dGFkYXRhLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxsYmFja3MsIGluZGV4SWRzLCBpbmRleEtl
eXMpKTsKIH0KIAogdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlU2V0SW5kZXhl
c1JlYWR5T3BlcmF0aW9uKHNpemVfdCBpbmRleENvdW50KQogewotICAgIHNjaGVkdWxlVGFzayhJ
REJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlByZWVtcHRpdmVUYXNrLCBTZXRJbmRleGVzUmVh
ZHlPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBpbmRleENvdW50KSk7CisgICAgc2NoZWR1bGVUYXNr
KElEQkRhdGFiYXNlQmFja2VuZDo6UHJlZW1wdGl2ZVRhc2ssIFNldEluZGV4ZXNSZWFkeU9wZXJh
dGlvbjo6Y3JlYXRlKHRoaXMsIGluZGV4Q291bnQpKTsKIH0KIAotdm9pZCBJREJUcmFuc2FjdGlv
bkJhY2tlbmQ6OnNjaGVkdWxlT3BlbkN1cnNvck9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIElu
ZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBl
IGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5
cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit2b2lkIElEQlRyYW5zYWN0
aW9uQmFja2VuZDo6c2NoZWR1bGVPcGVuQ3Vyc29yT3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwg
SW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5
cGUgY3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKIHsKICAgICBzY2hlZHVsZVRhc2soT3Bl
bkN1cnNvck9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG1fYmFja2luZ1N0b3JlLmdldCgpLCBkYXRh
YmFzZSgpLmlkKCksIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBkaXJlY3Rpb24s
IGN1cnNvclR5cGUsIHRhc2tUeXBlLCBjYWxsYmFja3MpKTsKIH0KQEAgLTMzMCw3ICszMzAsNyBA
QCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVDbGVhck9wZXJhdGlvbihpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZQogICAgIHNjaGVkdWxlVGFzayhDbGVhck9wZXJhdGlv
bjo6Y3JlYXRlKHRoaXMsIG1fYmFja2luZ1N0b3JlLmdldCgpLCBkYXRhYmFzZSgpLmlkKCksIG9i
amVjdFN0b3JlSWQsIGNhbGxiYWNrcykpOwogfQogCi1QYXNzUmVmUHRyPElEQkN1cnNvckJhY2tl
bmQ+IElEQlRyYW5zYWN0aW9uQmFja2VuZDo6Y3JlYXRlQ3Vyc29yQmFja2VuZChJREJCYWNraW5n
U3RvcmVDdXJzb3JJbnRlcmZhY2UmIGN1cnNvciwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNv
clR5cGUsIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCkKK1Bhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gSURCVHJh
bnNhY3Rpb25CYWNrZW5kOjpjcmVhdGVDdXJzb3JCYWNrZW5kKElEQkJhY2tpbmdTdG9yZUN1cnNv
ckludGVyZmFjZSYgY3Vyc29yLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURC
RGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwgaW50NjRfdCBvYmplY3RTdG9yZUlk
KQogewogICAgIHJldHVybiBtX2RhdGFiYXNlLT5mYWN0b3J5QmFja2VuZCgpLmNyZWF0ZUN1cnNv
ckJhY2tlbmQoKnRoaXMsIGN1cnNvciwgY3Vyc29yVHlwZSwgdGFza1R5cGUsIG9iamVjdFN0b3Jl
SWQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmQuaAppbmRleCBlYzI5NmJmLi41NGFhNzU4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJh
Y2tlbmQuaApAQCAtMjksOCArMjksNyBAQAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQog
CiAjaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEludGVyZmFj
ZS5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZC5oIgogI2luY2x1ZGUgIklEQkRhdGFi
YXNlRXJyb3IuaCIKICNpbmNsdWRlICJJREJPcGVyYXRpb24uaCIKICNpbmNsdWRlICJJREJUcmFu
c2FjdGlvbkJhY2tlbmQuaCIKQEAgLTQxLDExICs0MCwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK2NsYXNzIElEQkN1cnNvckJhY2tlbmQ7CiBjbGFzcyBJREJEYXRhYmFzZUNhbGxiYWNr
czsKIAogY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kIDogcHVibGljIFJlZkNvdW50ZWQ8SURC
VHJhbnNhY3Rpb25CYWNrZW5kPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kPiBjcmVhdGUoSURCRGF0YWJhc2VCYWNrZW5kSW1wbCosIGludDY0
X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0
IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25N
b2RlKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IGNyZWF0
ZShJREJEYXRhYmFzZUJhY2tlbmQqLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3Jl
SWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSk7CiAgICAgfklEQlRyYW5zYWN0aW9uQmFj
a2VuZCgpOwogCiAgICAgdm9pZCBjb21taXQoKTsKQEAgLTU2LDggKzU2LDggQEAgcHVibGljOgog
ICAgIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUoKSBjb25zdCAgeyByZXR1cm4gbV9t
b2RlOyB9CiAgICAgY29uc3QgSGFzaFNldDxpbnQ2NF90PiYgc2NvcGUoKSBjb25zdCAgeyByZXR1
cm4gbV9vYmplY3RTdG9yZUlkczsgfQogCi0gICAgdm9pZCBzY2hlZHVsZVRhc2soUGFzc093blB0
cjxJREJPcGVyYXRpb24+IHRhc2ssIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBhYm9ydFRhc2sg
PSBudWxscHRyKSB7IHNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6Ok5v
cm1hbFRhc2ssIHRhc2ssIGFib3J0VGFzayk7IH0KLSAgICB2b2lkIHNjaGVkdWxlVGFzayhJREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlLCBQYXNzT3duUHRyPElEQk9wZXJhdGlv
bj4sIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBhYm9ydFRhc2sgPSBudWxscHRyKTsKKyAgICB2
b2lkIHNjaGVkdWxlVGFzayhQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gdGFzaywgUGFzc093blB0
cjxJREJPcGVyYXRpb24+IGFib3J0VGFzayA9IG51bGxwdHIpIHsgc2NoZWR1bGVUYXNrKElEQkRh
dGFiYXNlQmFja2VuZDo6Tm9ybWFsVGFzaywgdGFzaywgYWJvcnRUYXNrKTsgfQorICAgIHZvaWQg
c2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUsIFBhc3NPd25QdHI8SURC
T3BlcmF0aW9uPiwgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGFib3J0VGFzayA9IG51bGxwdHIp
OwogCiAgICAgdm9pZCByZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZCopOwogICAg
IHZvaWQgdW5yZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZCopOwpAQCAtNjYsNyAr
NjYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRDb21wbGV0ZVByZWVtcHRpdmVFdmVudCgpICB7
IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMtLTsgQVNTRVJUKG1fcGVuZGluZ1ByZWVtcHRpdmVF
dmVudHMgPj0gMCk7IH0KICAgICBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZSYg
YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSB7IHJldHVybiAqbV9iYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbjsgfQogCi0gICAgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlJiBkYXRhYmFzZSgpIGNv
bnN0ICB7IHJldHVybiAqbV9kYXRhYmFzZTsgfQorICAgIElEQkRhdGFiYXNlQmFja2VuZCYgZGF0
YWJhc2UoKSBjb25zdCAgeyByZXR1cm4gKm1fZGF0YWJhc2U7IH0KIAogICAgIHZvaWQgc2NoZWR1
bGVDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbihjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRh
Jik7CiAgICAgdm9pZCBzY2hlZHVsZURlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKGNvbnN0IElE
Qk9iamVjdFN0b3JlTWV0YWRhdGEmKTsKQEAgLTc0LDE5ICs3NCwxOSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzY2hlZHVsZUNyZWF0ZUluZGV4T3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
Y29uc3QgSURCSW5kZXhNZXRhZGF0YSYpOwogICAgIHZvaWQgc2NoZWR1bGVEZWxldGVJbmRleE9w
ZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmKTsK
ICAgICB2b2lkIHNjaGVkdWxlR2V0T3BlcmF0aW9uKGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEm
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
KTsKLSAgICB2b2lkIHNjaGVkdWxlUHV0T3BlcmF0aW9uKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0
YWRhdGEmLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5
PiwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJ
bmRleEtleXM+Jik7CisgICAgdm9pZCBzY2hlZHVsZVB1dE9wZXJhdGlvbihjb25zdCBJREJPYmpl
Y3RTdG9yZU1ldGFkYXRhJiwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVm
UHRyPElEQktleT4sIElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8
SW5kZXhLZXlzPiYpOwogICAgIHZvaWQgc2NoZWR1bGVTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24o
c2l6ZV90IGluZGV4Q291bnQpOwotICAgIHZvaWQgc2NoZWR1bGVPcGVuQ3Vyc29yT3BlcmF0aW9u
KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlw
ZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+KTsKKyAgICB2b2lkIHNjaGVkdWxlT3BlbkN1cnNvck9wZXJhdGlvbihpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4s
IEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGUsIElEQkRh
dGFiYXNlQmFja2VuZDo6VGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CiAgICAg
dm9pZCBzY2hlZHVsZUNvdW50T3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+KTsKICAgICB2b2lkIHNjaGVkdWxlRGVsZXRlUmFuZ2VPcGVyYXRpb24oaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+KTsKICAgICB2b2lkIHNjaGVkdWxlQ2xlYXJPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwogCi0gICAgUGFzc1JlZlB0cjxJREJDdXJz
b3JCYWNrZW5kPiBjcmVhdGVDdXJzb3JCYWNrZW5kKElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVy
ZmFjZSYsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNl
OjpUYXNrVHlwZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAgICBQYXNzUmVmUHRyPElEQkN1
cnNvckJhY2tlbmQ+IGNyZWF0ZUN1cnNvckJhY2tlbmQoSURCQmFja2luZ1N0b3JlQ3Vyc29ySW50
ZXJmYWNlJiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tU
eXBlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwogCiAgICAgaW50NjRfdCBpZCgpIGNvbnN0IHsg
cmV0dXJuIG1faWQ7IH0KIAogcHJpdmF0ZToKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQoSURC
RGF0YWJhc2VCYWNrZW5kSW1wbCosIGludDY0X3QgaWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VD
YWxsYmFja3M+LCBjb25zdCBIYXNoU2V0PGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhl
ZERCOjpUcmFuc2FjdGlvbk1vZGUpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZChJREJEYXRh
YmFzZUJhY2tlbmQqLCBpbnQ2NF90IGlkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tz
PiwgY29uc3QgSGFzaFNldDxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJh
bnNhY3Rpb25Nb2RlKTsKIAogICAgIGVudW0gU3RhdGUgewogICAgICAgICBVbnVzZWQsIC8vIENy
ZWF0ZWQsIGJ1dCBubyB0YXNrcyB5ZXQuCkBAIC0xMDksNyArMTA5LDcgQEAgcHJpdmF0ZToKICAg
ICBTdGF0ZSBtX3N0YXRlOwogICAgIGJvb2wgbV9jb21taXRQZW5kaW5nOwogICAgIFJlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNl
QmFja2VuZEltcGw+IG1fZGF0YWJhc2U7CisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4g
bV9kYXRhYmFzZTsKIAogICAgIHR5cGVkZWYgRGVxdWU8T3duUHRyPElEQk9wZXJhdGlvbj4+IFRh
c2tRdWV1ZTsKICAgICBUYXNrUXVldWUgbV90YXNrUXVldWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25z
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZE9wZXJhdGlvbnMuY3BwCmluZGV4IDMyNWFlMjYuLmQ2OTY2MjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJh
dGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3BwCkBAIC0xODAsNyArMTgwLDcgQEAgdm9pZCBQdXRP
cGVyYXRpb246OnBlcmZvcm0oKQogICAgIGJvb2wga2V5V2FzR2VuZXJhdGVkID0gZmFsc2U7CiAK
ICAgICBSZWZQdHI8SURCS2V5PiBrZXk7Ci0gICAgaWYgKG1fcHV0TW9kZSAhPSBJREJEYXRhYmFz
ZUJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclVwZGF0ZSAmJiBtX29iamVjdFN0b3JlLmF1dG9JbmNy
ZW1lbnQgJiYgIW1fa2V5KSB7CisgICAgaWYgKG1fcHV0TW9kZSAhPSBJREJEYXRhYmFzZUJhY2tl
bmQ6OkN1cnNvclVwZGF0ZSAmJiBtX29iamVjdFN0b3JlLmF1dG9JbmNyZW1lbnQgJiYgIW1fa2V5
KSB7CiAgICAgICAgIFJlZlB0cjxJREJLZXk+IGF1dG9JbmNLZXkgPSBtX2JhY2tpbmdTdG9yZS0+
Z2VuZXJhdGVLZXkoKm1fdHJhbnNhY3Rpb24sIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5p
ZCk7CiAgICAgICAgIGtleVdhc0dlbmVyYXRlZCA9IHRydWU7CiAgICAgICAgIGlmICghYXV0b0lu
Y0tleS0+aXNWYWxpZCgpKSB7CkBAIC0xOTUsNyArMTk1LDcgQEAgdm9pZCBQdXRPcGVyYXRpb246
OnBlcmZvcm0oKQogICAgIEFTU0VSVChrZXktPmlzVmFsaWQoKSk7CiAKICAgICBSZWZQdHI8SURC
UmVjb3JkSWRlbnRpZmllcj4gcmVjb3JkSWRlbnRpZmllcjsKLSAgICBpZiAobV9wdXRNb2RlID09
IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6QWRkT25seSkgeworICAgIGlmIChtX3B1dE1v
ZGUgPT0gSURCRGF0YWJhc2VCYWNrZW5kOjpBZGRPbmx5KSB7CiAgICAgICAgIGJvb2wgb2sgPSBt
X2JhY2tpbmdTdG9yZS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZShtX3RyYW5zYWN0aW9uLT5iYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQsICpr
ZXksIHJlY29yZElkZW50aWZpZXIpOwogICAgICAgICBpZiAoIW9rKSB7CiAgICAgICAgICAgICBt
X2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGNoZWNraW5nIGtleSBleGlz
dGVuY2UuIikpOwpAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgUHV0T3BlcmF0aW9uOjpwZXJmb3Jt
KCkKICAgICAgICAgaW5kZXhXcml0ZXItPndyaXRlSW5kZXhLZXlzKHJlY29yZElkZW50aWZpZXIu
Z2V0KCksICptX2JhY2tpbmdTdG9yZSwgbV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlkKTsKICAgICB9CiAKLSAgICBp
ZiAobV9vYmplY3RTdG9yZS5hdXRvSW5jcmVtZW50ICYmIG1fcHV0TW9kZSAhPSBJREJEYXRhYmFz
ZUJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclVwZGF0ZSAmJiBrZXktPnR5cGUoKSA9PSBJREJLZXk6
Ok51bWJlclR5cGUpIHsKKyAgICBpZiAobV9vYmplY3RTdG9yZS5hdXRvSW5jcmVtZW50ICYmIG1f
cHV0TW9kZSAhPSBJREJEYXRhYmFzZUJhY2tlbmQ6OkN1cnNvclVwZGF0ZSAmJiBrZXktPnR5cGUo
KSA9PSBJREJLZXk6Ok51bWJlclR5cGUpIHsKICAgICAgICAgYm9vbCBvayA9IG1fYmFja2luZ1N0
b3JlLT51cGRhdGVLZXlHZW5lcmF0b3IoKm1fdHJhbnNhY3Rpb24sIG1fZGF0YWJhc2VJZCwgbV9v
YmplY3RTdG9yZS5pZCwgKmtleSwgIWtleVdhc0dlbmVyYXRlZCk7CiAgICAgICAgIGlmICghb2sp
IHsKICAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3Ig
dXBkYXRpbmcga2V5IGdlbmVyYXRvci4iKSk7CkBAIC0yNTgsNyArMjU4LDcgQEAgdm9pZCBPcGVu
Q3Vyc29yT3BlcmF0aW9uOjpwZXJmb3JtKCkKICAgICAvLyB1bnRpbCB0aGUgaW5kZXhpbmcgaXMg
Y29tcGxldGUuIFRoaXMgY2FuJ3QgaGFwcGVuIGFueSBlYXJsaWVyCiAgICAgLy8gYmVjYXVzZSB3
ZSBkb24ndCB3YW50IHRvIHN3aXRjaCB0byBlYXJseSBtb2RlIGluIGNhc2UgbXVsdGlwbGUKICAg
ICAvLyBpbmRleGVzIGFyZSBiZWluZyBjcmVhdGVkIGluIGEgcm93LCB3aXRoIHB1dCgpJ3MgaW4g
YmV0d2Vlbi4KLSAgICBpZiAobV90YXNrVHlwZSA9PSBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZh
Y2U6OlByZWVtcHRpdmVUYXNrKQorICAgIGlmIChtX3Rhc2tUeXBlID09IElEQkRhdGFiYXNlQmFj
a2VuZDo6UHJlZW1wdGl2ZVRhc2spCiAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmFkZFByZWVtcHRp
dmVFdmVudCgpOwogCiAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZT4g
YmFja2luZ1N0b3JlQ3Vyc29yOwpAQCAtMjY2LDcgKzI2Niw3IEBAIHZvaWQgT3BlbkN1cnNvck9w
ZXJhdGlvbjo6cGVyZm9ybSgpCiAgICAgICAgIEFTU0VSVChtX2N1cnNvclR5cGUgIT0gSW5kZXhl
ZERCOjpDdXJzb3JLZXlPbmx5KTsKICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNr
aW5nU3RvcmUtPm9wZW5PYmplY3RTdG9yZUN1cnNvcihtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5n
ZS5nZXQoKSwgbV9kaXJlY3Rpb24pOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChtX3Rh
c2tUeXBlID09IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6Tm9ybWFsVGFzayk7CisgICAg
ICAgIEFTU0VSVChtX3Rhc2tUeXBlID09IElEQkRhdGFiYXNlQmFja2VuZDo6Tm9ybWFsVGFzayk7
CiAgICAgICAgIGlmIChtX2N1cnNvclR5cGUgPT0gSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5KQog
ICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5JbmRl
eEtleUN1cnNvcihtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2Rh
dGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBt
X2RpcmVjdGlvbik7CiAgICAgICAgIGVsc2UKQEAgLTI3OCw3ICsyNzgsNyBAQCB2b2lkIE9wZW5D
dXJzb3JPcGVyYXRpb246OnBlcmZvcm0oKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZShzdGF0aWNfY2Fz
dDxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlPihtX3Rhc2tUeXBlKSk7Cisg
ICAgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZShzdGF0aWNfY2FzdDxJREJE
YXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlPihtX3Rhc2tUeXBlKSk7CiAKICAgICBSZWZQdHI8SURC
Q3Vyc29yQmFja2VuZD4gY3Vyc29yID0gbV90cmFuc2FjdGlvbi0+Y3JlYXRlQ3Vyc29yQmFja2Vu
ZCgqYmFja2luZ1N0b3JlQ3Vyc29yLCBtX2N1cnNvclR5cGUsIHRhc2tUeXBlLCBtX29iamVjdFN0
b3JlSWQpOwogICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY3Vyc29yLCBjdXJzb3ItPmtleSgp
LCBjdXJzb3ItPnByaW1hcnlLZXkoKSwgY3Vyc29yLT52YWx1ZSgpKTsKQEAgLTM0MiwxMCArMzQy
LDEwIEBAIHZvaWQgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0oKQogICAgIH0K
IH0KIAotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9u
OjpwZXJmb3JtKCkKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0
aW9uOjpwZXJmb3JtKCkKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIlZlcnNpb25DaGFuZ2VPcGVy
YXRpb24iKTsKLSAgICBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UmIGRhdGFiYXNlID0gbV90
cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBJREJEYXRhYmFzZUJhY2tlbmQmIGRhdGFiYXNl
ID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBpbnQ2NF90IGRhdGFiYXNlSWQgPSBk
YXRhYmFzZS5pZCgpOwogICAgIHVpbnQ2NF90IG9sZFZlcnNpb24gPSBkYXRhYmFzZS5tZXRhZGF0
YSgpLnZlcnNpb247CiAKQEAgLTM3NSw3ICszNzUsNyBAQCB2b2lkIERlbGV0ZU9iamVjdFN0b3Jl
QWJvcnRPcGVyYXRpb246OnBlcmZvcm0oKQogICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCku
YWRkT2JqZWN0U3RvcmUobV9vYmplY3RTdG9yZU1ldGFkYXRhLCBJREJPYmplY3RTdG9yZU1ldGFk
YXRhOjpJbnZhbGlkSWQpOwogfQogCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNp
b25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSgpCit2b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZDo6VmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKCkKIHsKICAgICBMT0coU3Rv
cmFnZUFQSSwgIlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbiIpOwogICAgIG1fdHJhbnNhY3Rp
b24tPmRhdGFiYXNlKCkuc2V0Q3VycmVudFZlcnNpb24obV9wcmV2aW91c0ludFZlcnNpb24pOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rp
b25CYWNrZW5kT3BlcmF0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oCmluZGV4IDIwNjVmNDYuLjE0YmRmNjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uQmFja2VuZE9wZXJhdGlvbnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmgKQEAgLTI2LDcgKzI2LDcgQEAK
ICNpZm5kZWYgSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9uc19oCiAjZGVmaW5lIElEQlRy
YW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnNfaAogCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZC5oIgogI2luY2x1ZGUgIklE
Qk9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZC5oIgogCkBAIC03
NCw3ICs3NCw3IEBAIHByaXZhdGU6CiAgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBt
X29iamVjdFN0b3JlTWV0YWRhdGE7CiB9OwogCi1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7CitjbGFzcyBJ
REJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb24gOiBwdWJsaWMgSURCT3Bl
cmF0aW9uIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGNy
ZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IHRyYW5zYWN0
aW9uSWQsIGludDY0X3QgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCiAg
ICAgewpAQCAtMTM0LDcgKzEzNCw3IEBAIHByaXZhdGU6CiAgICAgSURCT2JqZWN0U3RvcmVNZXRh
ZGF0YSBtX29iamVjdFN0b3JlTWV0YWRhdGE7CiB9OwogCi1jbGFzcyBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9u
IHsKK2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9u
IDogcHVibGljIElEQk9wZXJhdGlvbiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8
SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwg
Y29uc3QgU3RyaW5nJiBwcmV2aW91c1ZlcnNpb24sIGludDY0X3QgcHJldmlvdXNJbnRWZXJzaW9u
KQogICAgIHsKQEAgLTI3NiwxMyArMjc2LDEzIEBAIHByaXZhdGU6CiAKIGNsYXNzIFB1dE9wZXJh
dGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3du
UHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rp
b24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlLCBQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIElEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBW
ZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQk9w
ZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIElEQkJh
Y2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNv
bnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIElEQkRhdGFiYXNlQmFja2Vu
ZDo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBj
b25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYg
aW5kZXhLZXlzKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQdXRPcGVyYXRp
b24odHJhbnNhY3Rpb24sIGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUsIHZh
bHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgaW5kZXhJZHMsIGluZGV4S2V5cykpOwogICAg
IH0KICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybSgpIE9WRVJSSURFIEZJTkFMOwogcHJpdmF0ZToK
LSAgICBQdXRPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgSURC
QmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwg
Y29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2hh
cmVkQnVmZmVyPiYgdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIElEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZTo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8
SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQorICAgIFB1dE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJh
Y2tlbmQqIHRyYW5zYWN0aW9uLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9y
ZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmpl
Y3RTdG9yZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+JiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJL
ZXk+IGtleSwgSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMs
IGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMpCiAgICAgICAgIDogbV90cmFuc2Fj
dGlvbih0cmFuc2FjdGlvbikKICAgICAgICAgLCBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUp
CiAgICAgICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCkBAIC0zMDIsNyArMzAyLDcgQEAg
cHJpdmF0ZToKICAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1fb2JqZWN0U3RvcmU7
CiAgICAgY29uc3QgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV92YWx1ZTsKICAgICBjb25zdCBSZWZQ
dHI8SURCS2V5PiBtX2tleTsKLSAgICBjb25zdCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6
OlB1dE1vZGUgbV9wdXRNb2RlOworICAgIGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9k
ZSBtX3B1dE1vZGU7CiAgICAgY29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7
CiAgICAgY29uc3QgVmVjdG9yPGludDY0X3Q+IG1faW5kZXhJZHM7CiAgICAgY29uc3QgVmVjdG9y
PEluZGV4S2V5cz4gbV9pbmRleEtleXM7CkBAIC0zMjgsMTMgKzMyOCwxMyBAQCBwcml2YXRlOgog
CiBjbGFzcyBPcGVuQ3Vyc29yT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNh
Y3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNr
aW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6
OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JU
eXBlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPElE
Qk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIElE
QkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiBrZXlSYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBJ
bmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNr
VHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICB7
CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgT3BlbkN1cnNvck9wZXJhdGlvbih0cmFuc2Fj
dGlvbiwgYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBr
ZXlSYW5nZSwgZGlyZWN0aW9uLCBjdXJzb3JUeXBlLCB0YXNrVHlwZSwgY2FsbGJhY2tzKSk7CiAg
ICAgfQogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklOQUw7CiBwcml2YXRl
OgotICAgIE9wZW5DdXJzb3JPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2Fj
dGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJl
Y3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tl
bmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzKQorICAgIE9wZW5DdXJzb3JPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5k
KiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVj
dGlvbiBkaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRh
YmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzKQogICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCiAgICAgICAg
ICwgbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQogICAgICAgICAsIG1fZGF0YWJhc2VJZChk
YXRhYmFzZUlkKQpAQCAtMzU2LDcgKzM1Niw3IEBAIHByaXZhdGU6CiAgICAgY29uc3QgUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKICAgICBjb25zdCBJbmRleGVkREI6OkN1cnNv
ckRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKICAgICBjb25zdCBJbmRleGVkREI6OkN1cnNvclR5cGUg
bV9jdXJzb3JUeXBlOwotICAgIGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFz
a1R5cGUgbV90YXNrVHlwZTsKKyAgICBjb25zdCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBl
IG1fdGFza1R5cGU7CiAgICAgY29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7
CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZl
bGRiL0lEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5jcHAKaW5kZXggNDk3
YzRhNi4uYzU5YmJlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGV2ZWxkYi9JREJGYWN0b3J5QmFja2VuZExldmVsREIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmNw
cApAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRl
ICJJREJCYWNraW5nU3RvcmVMZXZlbERCLmgiCiAjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZC5o
IgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKKyNpbmNsdWRlICJJREJEYXRh
YmFzZUJhY2tlbmQuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1
ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZC5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuaCIKQEAgLTEyMiw3ICsxMjIsNyBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kTGV2
ZWxEQjo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQgog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZElt
cGw+IGRhdGFiYXNlQmFja2VuZCA9IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZShuYW1l
LCBiYWNraW5nU3RvcmUuZ2V0KCksIHRoaXMsIHVuaXF1ZUlkZW50aWZpZXIpOworICAgIFJlZlB0
cjxJREJEYXRhYmFzZUJhY2tlbmQ+IGRhdGFiYXNlQmFja2VuZCA9IElEQkRhdGFiYXNlQmFja2Vu
ZDo6Y3JlYXRlKG5hbWUsIGJhY2tpbmdTdG9yZS5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRpZmll
cik7CiAgICAgaWYgKGRhdGFiYXNlQmFja2VuZCkgewogICAgICAgICBtX2RhdGFiYXNlQmFja2Vu
ZE1hcC5zZXQodW5pcXVlSWRlbnRpZmllciwgZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKICAgICAg
ICAgZGF0YWJhc2VCYWNrZW5kLT5kZWxldGVEYXRhYmFzZShjYWxsYmFja3MpOwpAQCAtMTY3LDcg
KzE2Nyw3IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCOjpvcGVuKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgdWludDY0X3QgdmVyc2lvbiwgaW50NjRfCiAgICAgTE9HKFN0b3JhZ2VBUEksICJJ
REJGYWN0b3J5QmFja2VuZExldmVsREI6Om9wZW4iKTsKICAgICBjb25zdCBTdHJpbmcgdW5pcXVl
SWRlbnRpZmllciA9IGNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKG5hbWUsIG9wZW5pbmdPcmlnaW4p
OwogCi0gICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZDsK
KyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBkYXRhYmFzZUJhY2tlbmQ7CiAgICAgSURC
RGF0YWJhc2VCYWNrZW5kTWFwOjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmZp
bmQodW5pcXVlSWRlbnRpZmllcik7CiAgICAgaWYgKGl0ID09IG1fZGF0YWJhc2VCYWNrZW5kTWFw
LmVuZCgpKSB7CiAgICAgICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmVMZXZlbERCPiBiYWNraW5n
U3RvcmUgPSBvcGVuQmFja2luZ1N0b3JlKG9wZW5pbmdPcmlnaW4sIG1fZGF0YWJhc2VEaXJlY3Rv
cnkpOwpAQCAtMTc2LDcgKzE3Niw3IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCOjpv
cGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgdWludDY0X3QgdmVyc2lvbiwgaW50NjRfCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBkYXRhYmFzZUJhY2tlbmQgPSBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGUobmFtZSwgYmFja2luZ1N0b3JlLmdldCgpLCB0aGlz
LCB1bmlxdWVJZGVudGlmaWVyKTsKKyAgICAgICAgZGF0YWJhc2VCYWNrZW5kID0gSURCRGF0YWJh
c2VCYWNrZW5kOjpjcmVhdGUobmFtZSwgYmFja2luZ1N0b3JlLmdldCgpLCB0aGlzLCB1bmlxdWVJ
ZGVudGlmaWVyKTsKICAgICAgICAgaWYgKGRhdGFiYXNlQmFja2VuZCkKICAgICAgICAgICAgIG1f
ZGF0YWJhc2VCYWNrZW5kTWFwLnNldCh1bmlxdWVJZGVudGlmaWVyLCBkYXRhYmFzZUJhY2tlbmQu
Z2V0KCkpOwogICAgICAgICBlbHNlIHsKQEAgLTE4OSwxNSArMTg5LDE1IEBAIHZvaWQgSURCRmFj
dG9yeUJhY2tlbmRMZXZlbERCOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgdWludDY0X3QgdmVy
c2lvbiwgaW50NjRfCiAgICAgZGF0YWJhc2VCYWNrZW5kLT5vcGVuQ29ubmVjdGlvbihjYWxsYmFj
a3MsIGRhdGFiYXNlQ2FsbGJhY2tzLCB0cmFuc2FjdGlvbklkLCB2ZXJzaW9uKTsKIH0KIAotUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQjo6
bWF5YmVDcmVhdGVUcmFuc2FjdGlvbkJhY2tlbmQoSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNl
KiBiYWNrZW5kLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VD
YWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVj
dFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSBtb2RlKQorUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmQ+IElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQjo6bWF5YmVDcmVh
dGVUcmFuc2FjdGlvbkJhY2tlbmQoSURCRGF0YWJhc2VCYWNrZW5kKiBiYWNrZW5kLCBpbnQ2NF90
IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNl
Q2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVk
REI6OlRyYW5zYWN0aW9uTW9kZSBtb2RlKQogewotICAgIGlmICghYmFja2VuZC0+aXNJREJEYXRh
YmFzZUJhY2tlbmRJbXBsKCkpCisgICAgaWYgKCFiYWNrZW5kLT5pc0lEQkRhdGFiYXNlQmFja2Vu
ZCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBJREJUcmFuc2FjdGlvbkJhY2tl
bmQ6OmNyZWF0ZShzdGF0aWNfY2FzdDxJREJEYXRhYmFzZUJhY2tlbmRJbXBsKj4oYmFja2VuZCks
IHRyYW5zYWN0aW9uSWQsIGRhdGFiYXNlQ2FsbGJhY2tzLCBvYmplY3RTdG9yZUlkcywgbW9kZSk7
CisgICAgcmV0dXJuIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6Y3JlYXRlKHN0YXRpY19jYXN0PElE
QkRhdGFiYXNlQmFja2VuZCo+KGJhY2tlbmQpLCB0cmFuc2FjdGlvbklkLCBkYXRhYmFzZUNhbGxi
YWNrcywgb2JqZWN0U3RvcmVJZHMsIG1vZGUpOwogfQogCi1QYXNzUmVmUHRyPElEQkN1cnNvckJh
Y2tlbmQ+IElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQjo6Y3JlYXRlQ3Vyc29yQmFja2VuZChJREJU
cmFuc2FjdGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9uQmFja2VuZCwgSURCQmFja2luZ1N0b3JlQ3Vy
c29ySW50ZXJmYWNlJiBiYWNraW5nU3RvcmVDdXJzb3IsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBj
dXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBl
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCitQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IElE
QkZhY3RvcnlCYWNrZW5kTGV2ZWxEQjo6Y3JlYXRlQ3Vyc29yQmFja2VuZChJREJUcmFuc2FjdGlv
bkJhY2tlbmQmIHRyYW5zYWN0aW9uQmFja2VuZCwgSURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJm
YWNlJiBiYWNraW5nU3RvcmVDdXJzb3IsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBl
LCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQpCiB7CiAgICAgcmV0dXJuIElEQkN1cnNvckJhY2tlbmQ6OmNyZWF0ZSgmYmFja2luZ1N0
b3JlQ3Vyc29yLCBjdXJzb3JUeXBlLCB0YXNrVHlwZSwgJnRyYW5zYWN0aW9uQmFja2VuZCwgb2Jq
ZWN0U3RvcmVJZCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJGYWN0b3J5QmFja2VuZExldmVsREIuaAppbmRl
eCAzYzNjNzc2Li4xMzIwMGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZlbERC
LmgKQEAgLTQ1LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRE9NU3RyaW5n
TGlzdDsKIAogY2xhc3MgSURCQmFja2luZ1N0b3JlTGV2ZWxEQjsKLWNsYXNzIElEQkRhdGFiYXNl
QmFja2VuZEltcGw7CitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmQ7CiAKIGNsYXNzIElEQkZhY3Rv
cnlCYWNrZW5kTGV2ZWxEQiA6IHB1YmxpYyBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSB7CiBw
dWJsaWM6CkBAIC02Myw5ICs2Myw5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwg
UGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25z
dCBTdHJpbmcmIGRhdGFEaXIpIE9WRVJSSURFIEZJTkFMOwogCi0gICAgdmlydHVhbCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbWF5YmVDcmVhdGVUcmFuc2FjdGlvbkJhY2tlbmQo
SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlKiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNz
UmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgSW5k
ZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1heWJlQ3JlYXRlVHJhbnNhY3Rpb25CYWNr
ZW5kKElEQkRhdGFiYXNlQmFja2VuZCosIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIEluZGV4ZWRE
Qjo6VHJhbnNhY3Rpb25Nb2RlKSBPVkVSUklERSBGSU5BTDsKIAotICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxJREJDdXJzb3JCYWNrZW5kPiBjcmVhdGVDdXJzb3JCYWNrZW5kKElEQlRyYW5zYWN0aW9u
QmFja2VuZCYsIElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZSYsIEluZGV4ZWREQjo6Q3Vy
c29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwgaW50NjRfdCBv
YmplY3RTdG9yZUlkKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4g
Y3JlYXRlQ3Vyc29yQmFja2VuZChJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBJREJCYWNraW5nU3Rv
cmVDdXJzb3JJbnRlcmZhY2UmLCBJbmRleGVkREI6OkN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFj
a2VuZDo6VGFza1R5cGUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CiAKIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlTGV2ZWxEQj4gb3BlbkJhY2tpbmdT
dG9yZShjb25zdCBTZWN1cml0eU9yaWdpbiYsIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CkBAIC03
Myw3ICs3Myw3IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgSURCRmFjdG9y
eUJhY2tlbmRMZXZlbERCKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnkpOwogCi0gICAg
dHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+ID4g
SURCRGF0YWJhc2VCYWNrZW5kTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0
cjxJREJEYXRhYmFzZUJhY2tlbmQ+ID4gSURCRGF0YWJhc2VCYWNrZW5kTWFwOwogICAgIElEQkRh
dGFiYXNlQmFja2VuZE1hcCBtX2RhdGFiYXNlQmFja2VuZE1hcDsKIAogICAgIHR5cGVkZWYgSGFz
aE1hcDxTdHJpbmcsIFdlYWtQdHI8SURCQmFja2luZ1N0b3JlTGV2ZWxEQj4gPiBJREJCYWNraW5n
U3RvcmVMZXZlbERCTWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCTGV2ZWxEQkNvZGluZy5jcHAKaW5kZXggNTYwZDE5Zi4u
YTRkY2IxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2
ZWxkYi9JREJMZXZlbERCQ29kaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZXZlbGRiL0lEQkxldmVsREJDb2RpbmcuY3BwCkBAIC0xNTIxLDcgKzE1MjEsNyBA
QCBpbnQ2NF90IEluZGV4RnJlZUxpc3RLZXk6OmluZGV4SWQoKSBjb25zdAogfQogCiAvLyBGSVhN
RTogV2UgbmV2ZXIgdXNlIHRoaXMgdG8gbG9vayB1cCBvYmplY3Qgc3RvcmUgaWRzLCBiZWNhdXNl
IGEgbWFwcGluZwotLy8gaXMga2VwdCBpbiB0aGUgSURCRGF0YWJhc2VCYWNrZW5kSW1wbC4gQ2Fu
IHRoZSBtYXBwaW5nIGJlY29tZSB1bnJlbGlhYmxlPworLy8gaXMga2VwdCBpbiB0aGUgSURCRGF0
YWJhc2VCYWNrZW5kLiBDYW4gdGhlIG1hcHBpbmcgYmVjb21lIHVucmVsaWFibGU/CiAvLyBDYW4g
d2UgcmVtb3ZlIHRoaXM/CiBjb25zdCBjaGFyKiBPYmplY3RTdG9yZU5hbWVzS2V5OjpkZWNvZGUo
Y29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBPYmplY3RTdG9yZU5hbWVzS2V5
KiByZXN1bHQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQkxldmVsREJDb2RpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2xldmVsZGIvSURCTGV2ZWxEQkNvZGluZy5oCmluZGV4IDI3OGQwZjguLjlhYzM5YmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURC
TGV2ZWxEQkNvZGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
dmVsZGIvSURCTGV2ZWxEQkNvZGluZy5oCkBAIC0yODEsNyArMjgxLDcgQEAgcHJpdmF0ZToKIGNs
YXNzIE9iamVjdFN0b3JlTmFtZXNLZXkgewogcHVibGljOgogICAgIC8vIEZJWE1FOiBXZSBuZXZl
ciB1c2UgdGhpcyB0byBsb29rIHVwIG9iamVjdCBzdG9yZSBpZHMsIGJlY2F1c2UgYSBtYXBwaW5n
Ci0gICAgLy8gaXMga2VwdCBpbiB0aGUgSURCRGF0YWJhc2VCYWNrZW5kSW1wbC4gQ2FuIHRoZSBt
YXBwaW5nIGJlY29tZSB1bnJlbGlhYmxlPworICAgIC8vIGlzIGtlcHQgaW4gdGhlIElEQkRhdGFi
YXNlQmFja2VuZC4gQ2FuIHRoZSBtYXBwaW5nIGJlY29tZSB1bnJlbGlhYmxlPwogICAgIC8vIENh
biB3ZSByZW1vdmUgdGhpcz8KICAgICBzdGF0aWMgY29uc3QgY2hhciogZGVjb2RlKGNvbnN0IGNo
YXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgT2JqZWN0U3RvcmVOYW1lc0tleSogcmVzdWx0
KTsKICAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNv
bnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCmluZGV4IGY1OTcxNmIuLjAyMmU0YWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagpAQCAtMTg0NjEs
OCArMTg0NjEsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xpbmRleGVk
ZGJcSURCQ3Vyc29yLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGlu
ZGV4ZWRkYlxJREJDdXJzb3JCYWNrZW5kLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxNb2R1bGVzXGluZGV4ZWRkYlxJREJEYXRhYmFzZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIiAvPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCRGF0YWJhc2VC
YWNrZW5kSW50ZXJmYWNlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVz
XGluZGV4ZWRkYlxJREJEYXRhYmFzZUJhY2tlbmQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkRhdGFiYXNlRXJyb3IuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkRhdGFiYXNlRXhjZXB0aW9u
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJG
YWN0b3J5LmgiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggNGM2NGViMi4uMjYzODUzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTY1NCw4ICsxNjU0LDYg
QEAKIAkJNTEwRDRBMzgxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwRDRB
MzIxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oICovOyB9Owog
CQk1MTBFQzQyQTE4MTcwQzc1MDBDODk3RDYgLyogSURCSW5kZXhXcml0ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwRUM0MjgxODE3MEM3NTAw
Qzg5N0Q2IC8qIElEQkluZGV4V3JpdGVyLmNwcCAqLzsgfTsKIAkJNTEwRUM0MkIxODE3MEM3NTAw
Qzg5N0Q2IC8qIElEQkluZGV4V3JpdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTBFQzQyOTE4MTcwQzc1MDBDODk3RDYgLyogSURCSW5kZXhXcml0
ZXIuaCAqLzsgfTsKLQkJNTEwRUM0NEYxODE3NzlENTAwQzg5N0Q2IC8qIElEQkRhdGFiYXNlQmFj
a2VuZEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTEwRUM0NEQxODE3NzlENTAwQzg5N0Q2IC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuY3Bw
ICovOyB9OwotCQk1MTBFQzQ1MDE4MTc3OUQ1MDBDODk3RDYgLyogSURCRGF0YWJhc2VCYWNrZW5k
SW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEw
RUM0NEUxODE3NzlENTAwQzg5N0Q2IC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTEyOTM1RjNENTRC
NEI1MkZBRjk3M0YgLyogSW5zcGVjdG9ySGVhcFByb2ZpbGVyQWdlbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTExMjkzNjEzRDZEQjRCNTJGQUY5
NzNGIC8qIEluc3BlY3RvckhlYXBQcm9maWxlckFnZW50LmNwcCAqLzsgfTsKIAkJNTExMjkzNjAz
RDYwQjRCNTJGQUY5NzNGIC8qIEluc3BlY3RvckhlYXBQcm9maWxlckFnZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTEyOTM2MjNEODVCNEI1MkZB
Rjk3M0YgLyogSW5zcGVjdG9ySGVhcFByb2ZpbGVyQWdlbnQuaCAqLzsgfTsKIAkJNTExRUYyQzAx
N0YwRkQzNTAwRTRGQTE2IC8qIEpTSURCQW55LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUVGMkE4MTdGMEZDNDgwMEU0RkExNiAvKiBKU0lEQkFu
eS5jcHAgKi87IH07CkBAIC0xNzUyLDYgKzE3NTAsOCBAQAogCQk1MTc0MUQxMTBCMDcyNTlBMDBF
RDQ0MkMgLyogSGlzdG9yeUl0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxNzQxRDBEMEIwNzI1OUEwMEVENDQyQyAvKiBIaXN0b3J5SXRlbS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxNzQxRDEy
MEIwNzI1OUEwMEVENDQyQyAvKiBIaXN0b3J5SXRlbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTc0MUQwRTBCMDcyNTlBMDBFRDQ0MkMgLyogSGlz
dG9yeUl0ZW0uY3BwICovOyB9OwogCQk1MTc0RTIwQTEwQTFGNDRGMDBGOTVFNkYgLyogUG9wU3Rh
dGVFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTE3NEUyMDgxMEExRjQ0RjAwRjk1RTZGIC8qIFBvcFN0YXRlRXZlbnQuaCAqLzsgfTsKKwkJNTE3
NzFDOEUxODJEQjRCNzAwOEU3ODFFIC8qIElEQkRhdGFiYXNlQmFja2VuZC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTc3MUM4QzE4MkRCNEI3MDA4
RTc4MUUgLyogSURCRGF0YWJhc2VCYWNrZW5kLmNwcCAqLzsgfTsKKwkJNTE3NzFDOEYxODJEQjRC
NzAwOEU3ODFFIC8qIElEQkRhdGFiYXNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3NzFDOEQxODJEQjRCNzAwOEU3ODFFIC8qIElEQkRh
dGFiYXNlQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTUxN0ZCQTFFMTUxQUIxN0MwMEI1Nzk1OSAvKiBET01XaW5kb3dFeHRlbnNpb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3RkJB
MTcxNTFBQTcxQjAwQjU3OTU5IC8qIERPTVdpbmRvd0V4dGVuc2lvbi5jcHAgKi87IH07CiAJCTUx
ODlGMDFEMTBCMzdCRDkwMEYzQzczOSAvKiBKU1BvcFN0YXRlRXZlbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4OUYwMUIxMEIzN0JEOTAwRjND
NzM5IC8qIEpTUG9wU3RhdGVFdmVudC5jcHAgKi87IH07CiAJCTUxODlGMDFFMTBCMzdCRDkwMEYz
QzczOSAvKiBKU1BvcFN0YXRlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxODlGMDFDMTBCMzdCRDkwMEYzQzczOSAvKiBKU1BvcFN0YXRlRXZl
bnQuaCAqLzsgfTsKQEAgLTE3ODUsNyArMTc4NSw2IEBACiAJCTUxRDcxOUM0MTgxMTA2RTAwMDE2
REM1MSAvKiBJREJDdXJzb3JXaXRoVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcxOTdBMTgxMTA2REYwMDE2REM1MSAvKiBJREJDdXJzb3JX
aXRoVmFsdWUuaCAqLzsgfTsKIAkJNTFENzE5QzYxODExMDZFMDAwMTZEQzUxIC8qIElEQkRhdGFi
YXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
RDcxOTdDMTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZS5jcHAgKi87IH07CiAJCTUxRDcx
OUM3MTgxMTA2RTAwMDE2REM1MSAvKiBJREJEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5N0QxODExMDZERjAwMTZEQzUxIC8qIElE
QkRhdGFiYXNlLmggKi87IH07Ci0JCTUxRDcxOUM5MTgxMTA2RTAwMDE2REM1MSAvKiBJREJEYXRh
YmFzZUJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxRDcxOTdGMTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZUJhY2tl
bmRJbnRlcmZhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk1MUQ3MTlDQTE4MTEwNkUwMDAxNkRDNTEgLyogSURCRGF0YWJhc2VDYWxsYmFja3Mu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcxOTgw
MTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZUNhbGxiYWNrcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxRDcxOUNCMTgxMTA2RTAwMDE2
REM1MSAvKiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5ODExODExMDZERjAwMTZEQzUxIC8qIElE
QkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHAgKi87IH07CiAJCTUxRDcxOUNDMTgxMTA2RTAwMDE2
REM1MSAvKiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDcxOTgyMTgxMTA2REYwMDE2REM1MSAvKiBJREJE
YXRhYmFzZUNhbGxiYWNrc0ltcGwuaCAqLzsgfTsKQEAgLTgzMzUsOCArODMzNCw2IEBACiAJCTUx
MEQ0QTMyMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMEVDNDI4MTgxNzBDNzUwMEM4OTdENiAv
KiBJREJJbmRleFdyaXRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJREJJbmRleFdyaXRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMEVD
NDI5MTgxNzBDNzUwMEM4OTdENiAvKiBJREJJbmRleFdyaXRlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJREJJbmRleFdyaXRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk1MTBFQzQ0RDE4MTc3OUQ1MDBDODk3RDYgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTEwRUM0NEUxODE3
NzlENTAwQzg5N0Q2IC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MTEyOTM2MTNENkRCNEI1MkZBRjk3M0YgLyogSW5zcGVjdG9ySGVh
cFByb2ZpbGVyQWdlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW5zcGVjdG9ySGVhcFByb2ZpbGVyQWdlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MTEyOTM2MjNEODVCNEI1MkZBRjk3M0YgLyogSW5zcGVjdG9ySGVhcFByb2ZpbGVyQWdl
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9ySGVhcFByb2Zp
bGVyQWdlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTExRUYyQTgxN0YwRkM0
ODAwRTRGQTE2IC8qIEpTSURCQW55LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSURCQW55LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg0MzUsNiArODQzMiw4IEBACiAJCTUx
NzQxRDBFMEIwNzI1OUEwMEVENDQyQyAvKiBIaXN0b3J5SXRlbS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGlzdG9yeUl0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MTc0RTIwODEwQTFGNDRGMDBGOTVFNkYgLyogUG9wU3RhdGVFdmVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb3BTdGF0ZUV2ZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNzRFMjBCMTBBMUY0OUEwMEY5NUU2RiAvKiBQb3BT
dGF0ZUV2ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQb3BTdGF0ZUV2ZW50LmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE3NzFDOEMxODJEQjRCNzAwOEU3ODFFIC8q
IElEQkRhdGFiYXNlQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJREJEYXRhYmFzZUJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1MTc3MUM4RDE4MkRCNEI3MDA4RTc4MUUgLyogSURCRGF0YWJhc2VCYWNrZW5kLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkRhdGFiYXNlQmFja2VuZC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MTdGQkExNzE1MUFBNzFCMDBCNTc5NTkgLyogRE9NV2lu
ZG93RXh0ZW5zaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERP
TVdpbmRvd0V4dGVuc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxN0ZC
QTE4MTUxQUE3MUIwMEI1Nzk1OSAvKiBET01XaW5kb3dFeHRlbnNpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NV2luZG93RXh0ZW5zaW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUxODlGMDFCMTBCMzdCRDkwMEYzQzczOSAvKiBKU1BvcFN0YXRlRXZl
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNQb3BTdGF0ZUV2
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg0NzYsNyArODQ3NSw2IEBA
CiAJCTUxRDcxOTdDMTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJEYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUxRDcxOTdEMTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJEYXRhYmFzZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUQ3MTk3RTE4MTEwNkRGMDAxNkRDNTEgLyogSURC
RGF0YWJhc2UuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IElEQkRhdGFiYXNlLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFENzE5N0YxODExMDZERjAwMTZEQzUxIC8qIElE
QkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTFENzE5ODAxODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkRhdGFiYXNlQ2FsbGJhY2tz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRDcxOTgxMTgxMTA2REYwMDE2REM1
MSAvKiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTFENzE5ODIxODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNl
Q2FsbGJhY2tzSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJEYXRh
YmFzZUNhbGxiYWNrc0ltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2OTU4
LDkgKzE2OTU2LDggQEAKIAkJCQk1MUQ3MTk3QzE4MTEwNkRGMDAxNkRDNTEgLyogSURCRGF0YWJh
c2UuY3BwICovLAogCQkJCTUxRDcxOTdEMTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZS5o
ICovLAogCQkJCTUxRDcxOTdFMTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZS5pZGwgKi8s
Ci0JCQkJNTEwRUM0NEQxODE3NzlENTAwQzg5N0Q2IC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwu
Y3BwICovLAotCQkJCTUxMEVDNDRFMTgxNzc5RDUwMEM4OTdENiAvKiBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsLmggKi8sCi0JCQkJNTFENzE5N0YxODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNl
QmFja2VuZEludGVyZmFjZS5oICovLAorCQkJCTUxNzcxQzhDMTgyREI0QjcwMDhFNzgxRSAvKiBJ
REJEYXRhYmFzZUJhY2tlbmQuY3BwICovLAorCQkJCTUxNzcxQzhEMTgyREI0QjcwMDhFNzgxRSAv
KiBJREJEYXRhYmFzZUJhY2tlbmQuaCAqLywKIAkJCQk1MUQ3MTk4MDE4MTEwNkRGMDAxNkRDNTEg
LyogSURCRGF0YWJhc2VDYWxsYmFja3MuaCAqLywKIAkJCQk1MUQ3MTk4MTE4MTEwNkRGMDAxNkRD
NTEgLyogSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcCAqLywKIAkJCQk1MUQ3MTk4MjE4MTEw
NkRGMDAxNkRDNTEgLyogSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmggKi8sCkBAIC0yMjkwMSw2
ICsyMjg5OCw3IEBACiAJCQkJNTFDODFCOEEwQzQ0MjJGNzAwMTlFQ0UzIC8qIEZUUERpcmVjdG9y
eVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwMEQxMkIwMjY3NjAwQzFBMzU5IC8q
IEdhaW5Ob2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzVDNDc3NTA5QUM0RDhFMDBBNkFBQjQg
LyogR2FwUmVjdHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxNzcxQzhGMTgyREI0QjcwMDhFNzgx
RSAvKiBJREJEYXRhYmFzZUJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MzJFODQ3MEM1
MTQ5MzgwMEIxNTAwRiAvKiBHQ0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUMwQzA1
NENDMTExOEM4RTQwMENFMjYzNiAvKiBnZW5lcmF0ZS1iaW5kaW5ncy5wbCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMjNGMERCMERBRkY0QTQwMDlGREM5MSAvKiBHZW5lcmF0ZWRJbWFnZS5oIGluIEhl
YWRlcnMgKi8sCkBAIC0yMzg4Miw3ICsyMzg4MCw2IEBACiAJCQkJOTM1QzQ3NjMwOUFDNENFNjAw
QTZBQUI0IC8qIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg1MDMxQjQ4MEE0NEVGQzcwMEY5OTJFMCAvKiBNb3VzZVJlbGF0ZWRFdmVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTMzMDlERkMwOTlFNjQ5MjAwNTZFNTgxIC8qIE1vdmVTZWxlY3Rpb25D
b21tYW5kLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTBFQzQ1MDE4MTc3OUQ1MDBDODk3RDYgLyog
SURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkRCMTcwMDYxNEEy
QkFCMjAwQTJCNUQ5IC8qIE11bHRpQ2hhbm5lbFJlc2FtcGxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzZGMDkwMEExNDMyN0I2MTAwNjg1ODQ5IC8qIE11dGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg1MDMxQjRBMEE0NEVGQzcwMEY5OTJFMCAvKiBNdXRhdGlvbkV2ZW50Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTI0NTE1LDcgKzI0NTEyLDYgQEAKIAkJCQlCQzVFQjY5QTBFODFE
QTYzMDBCMjU5NjUgLyogU3R5bGVWaXN1YWxEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlEMDAw
RUQyODExQzFCOUNEMDBDNDc3MjYgLyogU3ViZnJhbWVMb2FkZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFGQzQwRkJBMTY1NUNDQjkwMDQwRjI5RSAvKiBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmgg
aW4gSGVhZGVycyAqLywKLQkJCQk1MUQ3MTlDOTE4MTEwNkUwMDAxNkRDNTEgLyogSURCRGF0YWJh
c2VCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RENDEyNTFGMTJE
MDAzRUYyNjkgLyogU3VibWl0SW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTZEMzc0
ODBBREJBNURFMDBBNDU1NEQgLyogU3VicmVzb3VyY2VMb2FkZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTY1OUE3RDEzMEI2REI0RDkwMDExNTVCMyAvKiBTdWJzdGl0dXRlRGF0YS5oIGluIEhlYWRl
cnMgKi8sCkBAIC0yNzYzOCw2ICsyNzYzNCw3IEBACiAJCQkJMUEyRTZFN0EwQ0M1NTZENTAwNEEy
MDYyIC8qIFNRTGl0ZUF1dGhvcml6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEyMjQ2NDkw
Q0M5OEREQjAwQzA1MjQwIC8qIFNRTGl0ZURhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUI1QTY4NDI0MEZGQUJFQUEwMEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTUxNzcxQzhFMTgyREI0QjcwMDhFNzgxRSAvKiBJREJEYXRhYmFzZUJhY2tl
bmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEyMjQ2NEIwQ0M5OEREQjAwQzA1MjQwIC8qIFNR
TGl0ZVN0YXRlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTIyNDY0RDBDQzk4RERCMDBD
MDUyNDAgLyogU1FMaXRlVHJhbnNhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdCQzZB
NDExNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFJlc3VsdFNldC5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTI4MDc5LDcgKzI4MDc2LDYgQEAKIAkJCQkwNzhFMDkxMTE3RDE0Q0VFMDA0MjBBQTEgLyogUlRD
Vm9pZFJlcXVlc3RJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5ODM5MTU4MEYxRTc3Njkw
MEMyMzc4MiAvKiBXZWJLaXRDU1NNYXRyaXguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI0QkY3
N0MxNUNDM0JBRjAwMzE5MUYyIC8qIFdlYktpdENTU01peEZ1bmN0aW9uVmFsdWUuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJNTEwRUM0NEYxODE3NzlENTAwQzg5N0Q2IC8qIElEQkRhdGFiYXNlQmFj
a2VuZEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOEFBNjFDRkYxNDRENTk1QjAwRjM3MzUw
IC8qIFdlYktpdENTU1JlZ2lvblJ1bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTAzOEJDMDcx
NDcxMUNEQjAwOTVFMEQxIC8qIFdlYktpdENTU1NoYWRlclZhbHVlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTA1NjJGOTQ2MTU3M0VDRUIwMDMxQ0ExNiAvKiBXZWJLaXRDU1NTVkdEb2N1bWVudFZh
bHVlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGIyZGVmMDcuLmYzODA2ZmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKQEAgLTEsNSArMSwyOCBAQAogMjAxMy0xMS0wOCAgQnJhZHkgRWlkc29uICA8YmVp
ZHNvbkBhcHBsZS5jb20+CiAKKyAgICAgICAgTWVyZ2UgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJm
YWNlIGFuZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQwODgKKworICAgICAgICBSZXZpZXdlZCBieSBUaW0g
SG9ydG9uLgorCisgICAgICAgIFRoaXMgYWJzdHJhY3Rpb24gaXMgbm8gbG9uZ2VyIG1lYW5pbmdm
dWwgaW4gaXRzIGN1cnJlbnQgZm9ybSBpbiBXZWJDb3JlLgorICAgICAgICBUaGUgY3VycmVudCBn
cm91bmR3b3JrIGZvciB0aGUgV0syIERhdGFiYXNlUHJvY2VzcyByZWxpZWQgb24gdGhpcyBhYnN0
cmFjdGlvbiwKKyAgICAgICAgYnV0IHRoYXQgd2lsbCBiZSByZXdvcmtlZCBpbiBhIGZ1dHVyZSBw
YXRjaC4KKworICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9j
ZXNzSURCRGF0YWJhc2VCYWNrZW5kLmg6CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0RhdGFiYXNl
cy9JbmRleGVkREIvV2ViSURCRmFjdG9yeUJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJREJGYWN0b3J5QmFja2VuZDo6bWF5YmVDcmVhdGVUcmFuc2FjdGlvbkJhY2tlbmQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJJREJGYWN0b3J5QmFja2VuZDo6Y3JlYXRlQ3Vyc29yQmFja2VuZCk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQkZhY3RvcnlC
YWNrZW5kLmg6CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2Vi
UHJvY2Vzc0lEQkRhdGFiYXNlQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NJREJEYXRhYmFzZUJhY2tlbmQ6OnB1dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NJ
REJEYXRhYmFzZUJhY2tlbmQ6Om9wZW5DdXJzb3IpOgorICAgICAgICAqIFdlYlByb2Nlc3MvRGF0
YWJhc2VzL0luZGV4ZWREQi9XZWJQcm9jZXNzSURCRGF0YWJhc2VCYWNrZW5kLmg6CisKKzIwMTMt
MTEtMDggIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCiAgICAgICAgIE1lcmdl
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSBhbmQgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0
MDc3CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVk
REIvRGF0YWJhc2VQcm9jZXNzSURCRGF0YWJhc2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0Mi9E
YXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkRhdGFiYXNlQmFja2Vu
ZC5oCmluZGV4IGRlZDBlNjMuLjYyYzA0NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0Rh
dGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCRGF0YWJhc2VCYWNrZW5k
LmgKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRhYmFz
ZVByb2Nlc3NJREJEYXRhYmFzZUJhY2tlbmQuaApAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBE
YXRhYmFzZVByb2Nlc3NJREJEYXRhYmFzZUJhY2tlbmRfaAogCiAjaW5jbHVkZSAiTWVzc2FnZVNl
bmRlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9JREJEYXRhYmFzZUJhY2tlbmQuaD4KIAogI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKSAmJiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKIApAQCAtMzUsNyAr
MzUsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRGF0YWJhc2VUb1dlYlByb2Nlc3ND
b25uZWN0aW9uOwogCi0vLyBGSVhNRTogV2hlbiBhZGRpbmcgYWN0dWFsIElEQiBsb2dpYywgdGhp
cyBjbGFzcyB3aWxsIGluaGVyaXQgZnJvbSBXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbnRl
cmZhY2UKKy8vIEZJWE1FOiBXaGVuIGFkZGluZyBhY3R1YWwgSURCIGxvZ2ljLCB0aGlzIGNsYXNz
IHdpbGwgaW5oZXJpdCBmcm9tIFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZAogLy8gaW5zdGVh
ZCBvZiBpbmhlcml0aW5nIGZyb20gUmVmQ291bnRlZCBkaXJlY3RseS4KIC8vIERvaW5nIHNvIHdp
bGwgYWxzbyBhZGQgYSBsYXJnZSBudW1iZXIgb2YgaW50ZXJmYWNlIG1ldGhvZHMgdG8gaW1wbGVt
ZW50IHdoaWNoIGlzIHdoeSBJJ20gaG9sZGluZyBvZmYgZm9yIG5vdy4KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQkZhY3Rv
cnlCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4
ZWREQi9XZWJJREJGYWN0b3J5QmFja2VuZC5jcHAKaW5kZXggNGRkMWQyYy4uYTBjMTA5YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dl
YklEQkZhY3RvcnlCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rh
dGFiYXNlcy9JbmRleGVkREIvV2ViSURCRmFjdG9yeUJhY2tlbmQuY3BwCkBAIC0xMDAsMTMgKzEw
MCwxMyBAQCB2b2lkIFdlYklEQkZhY3RvcnlCYWNrZW5kOjpyZW1vdmVJREJEYXRhYmFzZUJhY2tl
bmQoY29uc3QgU3RyaW5nJikKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1QYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZD4gV2ViSURCRmFjdG9yeUJhY2tlbmQ6Om1heWJlQ3JlYXRl
VHJhbnNhY3Rpb25CYWNrZW5kKElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSosIGludDY0X3Qg
dHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IFZl
Y3RvcjxpbnQ2NF90PiYsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlKQorUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmQ+IFdlYklEQkZhY3RvcnlCYWNrZW5kOjptYXliZUNyZWF0ZVRy
YW5zYWN0aW9uQmFja2VuZChJREJEYXRhYmFzZUJhY2tlbmQqLCBpbnQ2NF90IHRyYW5zYWN0aW9u
SWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBWZWN0b3I8aW50NjRf
dD4mLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogICAgIHJldHVybiAwOwogfQogCi1QYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IFdlYklE
QkZhY3RvcnlCYWNrZW5kOjpjcmVhdGVDdXJzb3JCYWNrZW5kKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZCYsIElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZSYsIEluZGV4ZWREQjo6Q3Vyc29yVHlw
ZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwgaW50NjRfdCkKK1Bhc3NS
ZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gV2ViSURCRmFjdG9yeUJhY2tlbmQ6OmNyZWF0ZUN1cnNv
ckJhY2tlbmQoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiwgSURCQmFja2luZ1N0b3JlQ3Vyc29ySW50
ZXJmYWNlJiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tU
eXBlLCBpbnQ2NF90KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIDA7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIv
V2ViSURCRmFjdG9yeUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJh
c2VzL0luZGV4ZWREQi9XZWJJREJGYWN0b3J5QmFja2VuZC5oCmluZGV4IDA2NDE3YjEuLmFlOTkx
YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4
ZWREQi9XZWJJREJGYWN0b3J5QmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJGYWN0b3J5QmFja2VuZC5oCkBAIC00NSw5ICs0
NSw5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJREJEYXRhYmFzZUJhY2tl
bmQoY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKSBPVkVSUklERTsKIAotICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1heWJlQ3JlYXRl
VHJhbnNhY3Rpb25CYWNrZW5kKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSos
IGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJEYXRhYmFzZUNh
bGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIFdlYkNvcmU6OkluZGV4ZWREQjo6VHJh
bnNhY3Rpb25Nb2RlKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6
SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtYXliZUNyZWF0ZVRyYW5zYWN0aW9uQmFja2VuZChXZWJD
b3JlOjpJREJEYXRhYmFzZUJhY2tlbmQqLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6SURCRGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBWZWN0b3I8aW50NjRfdD4m
LCBXZWJDb3JlOjpJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSkgT1ZFUlJJREU7CiAKLSAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZD4gY3JlYXRlQ3Vyc29y
QmFja2VuZChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBXZWJDb3JlOjpJREJCYWNr
aW5nU3RvcmVDdXJzb3JJbnRlcmZhY2UmLCBXZWJDb3JlOjpJbmRleGVkREI6OkN1cnNvclR5cGUs
IFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6
OklEQkN1cnNvckJhY2tlbmQ+IGNyZWF0ZUN1cnNvckJhY2tlbmQoV2ViQ29yZTo6SURCVHJhbnNh
Y3Rpb25CYWNrZW5kJiwgV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlJiwg
V2ViQ29yZTo6SW5kZXhlZERCOjpDdXJzb3JUeXBlLCBXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tl
bmQ6OlRhc2tUeXBlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIE9WRVJSSURFOwogCiBwcml2YXRl
OgogICAgIGV4cGxpY2l0IFdlYklEQkZhY3RvcnlCYWNrZW5kKGNvbnN0IFN0cmluZyYgZGF0YWJh
c2VEaXJlY3RvcnlJZGVudGlmaWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJQcm9jZXNzSURCRGF0YWJhc2VCYWNrZW5kLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJQcm9j
ZXNzSURCRGF0YWJhc2VCYWNrZW5kLmNwcAppbmRleCBmMzc5NGI4Li5iODRmNTkwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViUHJv
Y2Vzc0lEQkRhdGFiYXNlQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYlByb2Nlc3NJREJEYXRhYmFzZUJhY2tlbmQuY3BwCkBA
IC0xMTYsNyArMTE2LDcgQEAgdm9pZCBXZWJQcm9jZXNzSURCRGF0YWJhc2VCYWNrZW5kOjpnZXQo
aW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3IKICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzSURCRGF0YWJhc2VCYWNrZW5kOjpwdXQo
aW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0
IFZlY3RvcjxJbmRleEtleXM+JikKK3ZvaWQgV2ViUHJvY2Vzc0lEQkRhdGFiYXNlQmFja2VuZDo6
cHV0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiwgSURCRGF0YWJhc2VC
YWNrZW5kOjpQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIGNvbnN0IFZlY3Rvcjxp
bnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JikKIHsKICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIH0KQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIFdlYlByb2Nlc3NJ
REJEYXRhYmFzZUJhY2tlbmQ6OnNldEluZGV4ZXNSZWFkeShpbnQ2NF90IHRyYW5zYWN0aW9uSWQs
IGludDY0XwogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIFdlYlByb2Nlc3NJ
REJEYXRhYmFzZUJhY2tlbmQ6Om9wZW5DdXJzb3IoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4sIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uLCBib29sIGtleU9ubHksIFRhc2tUeXBlLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pCit2b2lkIFdlYlByb2Nlc3NJREJEYXRhYmFzZUJhY2tl
bmQ6Om9wZW5DdXJzb3IoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEluZGV4ZWREQjo6
Q3Vyc29yRGlyZWN0aW9uLCBib29sIGtleU9ubHksIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5
cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0lu
ZGV4ZWREQi9XZWJQcm9jZXNzSURCRGF0YWJhc2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViUHJvY2Vzc0lEQkRhdGFiYXNlQmFja2Vu
ZC5oCmluZGV4IDNlNTc3MTYuLjE5ZTZkZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJQcm9jZXNzSURCRGF0YWJhc2VCYWNrZW5k
LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dl
YlByb2Nlc3NJREJEYXRhYmFzZUJhY2tlbmQuaApAQCAtMjgsNyArMjgsNyBAQAogI2RlZmluZSBX
ZWJQcm9jZXNzSURCRGF0YWJhc2VCYWNrZW5kX2gKIAogI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIu
aCIKLSNpbmNsdWRlIDxXZWJDb3JlL0lEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSURCRGF0YWJhc2VCYWNrZW5kLmg+CiAKICNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKICNpZiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKQEAgLTQxLDUwICs0MSw1
MCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViSURCRmFjdG9yeUJhY2tlbmQ7CiAK
LWNsYXNzIFdlYlByb2Nlc3NJREJEYXRhYmFzZUJhY2tlbmQgRklOQUwgOiBwdWJsaWMgV2ViQ29y
ZTo6SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLCBwdWJsaWMgQ29yZUlQQzo6TWVzc2FnZVNl
bmRlciB7CitjbGFzcyBXZWJQcm9jZXNzSURCRGF0YWJhc2VCYWNrZW5kIDogcHVibGljIFJlZkNv
dW50ZWQ8V2ViUHJvY2Vzc0lEQkRhdGFiYXNlQmFja2VuZD4sIHB1YmxpYyBDb3JlSVBDOjpNZXNz
YWdlU2VuZGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJQcm9jZXNzSURC
RGF0YWJhc2VCYWNrZW5kPiBjcmVhdGUoV2ViSURCRmFjdG9yeUJhY2tlbmQmIGZhY3RvcnksIGNv
bnN0IFN0cmluZyYgbmFtZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlByb2Nlc3NJREJEYXRh
YmFzZUJhY2tlbmQoZmFjdG9yeSwgbmFtZSkpOyB9CiAKICAgICB2aXJ0dWFsIH5XZWJQcm9jZXNz
SURCRGF0YWJhc2VCYWNrZW5kKCk7CiAKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OklEQkJhY2tpbmdT
dG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBXZWJDb3JlOjpJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSgpIGNvbnN0
OwogCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJhbnNhY3Rp
b25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFdl
YkNvcmU6OklEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQpIE9WRVJSSURFOwotICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRyYW5z
YWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJEYXRh
YmFzZUNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIHVu
c2lnbmVkIHNob3J0IG1vZGUpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZShQYXNz
UmVmUHRyPFdlYkNvcmU6OklEQkRhdGFiYXNlQ2FsbGJhY2tzPikgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYkNvcmU6OklEQktl
eVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmpl
Y3RTdG9yZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7Cisg
ICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JZCwg
UGFzc1JlZlB0cjxXZWJDb3JlOjpJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IFZlY3Rvcjxp
bnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIHVuc2lnbmVkIHNob3J0IG1vZGUpOworICAgIHZpcnR1
YWwgdm9pZCBjbG9zZShQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkRhdGFiYXNlQ2FsbGJhY2tzPik7
CiAKICAgICAvLyBUcmFuc2FjdGlvbi1zcGVjaWZpYyBvcGVyYXRpb25zLgotICAgIHZpcnR1YWwg
dm9pZCBjb21taXQoaW50NjRfdCB0cmFuc2FjdGlvbklkKSBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IHZvaWQgYWJvcnQoaW50NjRfdCB0cmFuc2FjdGlvbklkKSBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IHZvaWQgYWJvcnQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklE
QkRhdGFiYXNlRXJyb3I+KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KGludDY0
X3QgdHJhbnNhY3Rpb25JZCk7CisgICAgdmlydHVhbCB2b2lkIGFib3J0KGludDY0X3QgdHJhbnNh
Y3Rpb25JZCk7CisgICAgdmlydHVhbCB2b2lkIGFib3J0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwg
UGFzc1JlZlB0cjxXZWJDb3JlOjpJREJEYXRhYmFzZUVycm9yPik7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgY3JlYXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJDb3JlOjpJ
REJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSkgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBjcmVhdGVJbmRleChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYkNvcmU6OklE
QktleVBhdGgmLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0KGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NS
ZWZQdHI8V2ViQ29yZTo6SURCS2V5UmFuZ2U+LCBib29sIGtleU9ubHksIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6SURCQ2FsbGJhY2tzPikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGdldChpbnQ2
NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
LCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleVJhbmdlPiwgYm9vbCBrZXlPbmx5LCBQYXNzUmVm
UHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4pOwogICAgIC8vIE5vdGUgdGhhdCAndmFsdWUnIG1h
eSBiZSBjb25zdW1lZC9hZG9wdGVkIGJ5IHRoaXMgY2FsbC4KLSAgICB2aXJ0dWFsIHZvaWQgcHV0
KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRy
PFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5
PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBjb25zdCBWZWN0
b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6SW5kZXhLZXlzPiYp
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoaW50NjRfdCB0cmFuc2Fj
dGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5
PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6SW5kZXhLZXlzPiYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXRJbmRleGVzUmVhZHkoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMpIE9WRVJSSURFOwotICAgIHZpcnR1
YWwgdm9pZCBvcGVuQ3Vyc29yKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5UmFuZ2U+
LCBXZWJDb3JlOjpJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiwgYm9vbCBrZXlPbmx5LCBUYXNr
VHlwZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+KSBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIHZvaWQgY291bnQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJLZXlSYW5nZT4s
IFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPikgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCB2b2lkIGRlbGV0ZVJhbmdlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpJREJDYWxsYmFja3M+KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoaW50
NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6SURCQ2FsbGJhY2tzPikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHB1dChpbnQ2
NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleT4sIFdl
YkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJ
REJDYWxsYmFja3M+LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0
b3I8V2ViQ29yZTo6SW5kZXhLZXlzPiYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMo
aW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8
V2ViQ29yZTo6SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGlu
ZGV4SWRzLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6SW5kZXhLZXlzPiYpOworICAgIHZpcnR1YWwg
dm9pZCBzZXRJbmRleGVzUmVhZHkoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMpOworICAgIHZpcnR1YWwg
dm9pZCBvcGVuQ3Vyc29yKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5UmFuZ2U+LCBX
ZWJDb3JlOjpJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiwgYm9vbCBrZXlPbmx5LCBXZWJDb3Jl
OjpJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNh
bGxiYWNrcz4pOworICAgIHZpcnR1YWwgdm9pZCBjb3VudChpbnQ2NF90IHRyYW5zYWN0aW9uSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPFdlYkNv
cmU6OklEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGVsZXRlUmFuZ2UoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5UmFuZ2U+LCBQYXNzUmVm
UHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4pOworICAgIHZpcnR1YWwgdm9pZCBjbGVhcihpbnQ2
NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpJREJDYWxsYmFja3M+KTsKIAotICAgIHZpcnR1YWwgaW50NjRfdCBpZCgpIGNvbnN0IE9W
RVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBhZGRPYmplY3RTdG9yZShjb25zdCBXZWJDb3JlOjpJ
REJPYmplY3RTdG9yZU1ldGFkYXRhJiwgaW50NjRfdCBuZXdNYXhPYmplY3RTdG9yZUlkKSBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlT2JqZWN0U3RvcmUoaW50NjRfdCBvYmplY3RT
dG9yZUlkKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkSW5kZXgoaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBXZWJDb3JlOjpJREJJbmRleE1ldGFkYXRhJiwgaW50NjRfdCBuZXdN
YXhJbmRleElkKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSW5kZXgoaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
aW50NjRfdCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGRPYmplY3RTdG9yZShjb25z
dCBXZWJDb3JlOjpJREJPYmplY3RTdG9yZU1ldGFkYXRhJiwgaW50NjRfdCBuZXdNYXhPYmplY3RT
dG9yZUlkKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlT2JqZWN0U3RvcmUoaW50NjRfdCBvYmpl
Y3RTdG9yZUlkKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkSW5kZXgoaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBXZWJDb3JlOjpJREJJbmRleE1ldGFkYXRhJiwgaW50NjRfdCBuZXdNYXhJbmRl
eElkKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSW5kZXgoaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQpOwogCi0gICAgdmlydHVhbCBjb25zdCBXZWJDb3JlOjpJREJEYXRh
YmFzZU1ldGFkYXRhJiBtZXRhZGF0YSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRDdXJyZW50VmVyc2lvbih1aW50NjRfdCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBjb25z
dCBXZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSgpIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBzZXRDdXJyZW50VmVyc2lvbih1aW50NjRfdCk7CiAKLSAgICB2aXJ0dWFsIGJv
b2wgaGFzUGVuZGluZ1NlY29uZEhhbGZPcGVuKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lk
IHNldFBlbmRpbmdTZWNvbmRIYWxmT3BlbihQYXNzT3duUHRyPFdlYkNvcmU6OklEQlBlbmRpbmdP
cGVuQ2FsbD4pIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBoYXNQZW5kaW5nU2Vjb25kSGFs
Zk9wZW4oKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGVuZGluZ1NlY29uZEhhbGZPcGVuKFBhc3NP
d25QdHI8V2ViQ29yZTo6SURCUGVuZGluZ09wZW5DYWxsPik7CiAKLSAgICB2aXJ0dWFsIFdlYkNv
cmU6OklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlJiBmYWN0b3J5QmFja2VuZCgpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgV2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UmIGZhY3Rv
cnlCYWNrZW5kKCk7CiAKICAgICB2b2lkIG9wZW5Db25uZWN0aW9uKFBhc3NSZWZQdHI8V2ViQ29y
ZTo6SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJEYXRhYmFzZUNhbGxiYWNr
cz4sIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgdWludDY0X3QgdmVyc2lvbik7CiAKQEAgLTk3LDcg
Kzk3LDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+IG1f
c2VjdXJpdHlPcmlnaW47CiAKICAgICAvLyBDb3JlSVBDOjpNZXNzYWdlU2VuZGVyCi0gICAgdmly
dHVhbCBDb3JlSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgQ29yZUlQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5l
Y3Rpb24oKTsKICAgICB2aXJ0dWFsIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklE
KCkgT1ZFUlJJREUgeyByZXR1cm4gbV9iYWNrZW5kSWRlbnRpZmllcjsgfQogCiAgICAgdWludDY0
X3QgbV9iYWNrZW5kSWRlbnRpZmllcjs=
</data>

          </attachment>
      

    </bug>

</bugzilla>