<?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>233106</bug_id>
          
          <creation_ts>2021-11-14 12:49:51 -0800</creation_ts>
          <short_desc>[WebGPU] [Cocoa] Connect WebCore &amp; PAL to WebGPU.framework</short_desc>
          <delta_ts>2021-11-15 14:07:04 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>dino</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1814900</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-11-14 12:49:51 -0800</bug_when>
    <thetext>[WebGPU] [Cocoa] Connect WebCore &amp; PAL to WebGPU.framework</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814904</commentid>
    <comment_count>1</comment_count>
      <attachid>444190</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-11-14 13:08:02 -0800</bug_when>
    <thetext>Created attachment 444190
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814905</commentid>
    <comment_count>2</comment_count>
      <attachid>444191</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-11-14 13:13:20 -0800</bug_when>
    <thetext>Created attachment 444191
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814906</commentid>
    <comment_count>3</comment_count>
      <attachid>444192</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-11-14 13:16:49 -0800</bug_when>
    <thetext>Created attachment 444192
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814978</commentid>
    <comment_count>4</comment_count>
      <attachid>444218</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-11-15 00:59:10 -0800</bug_when>
    <thetext>Created attachment 444218
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814981</commentid>
    <comment_count>5</comment_count>
      <attachid>444221</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-11-15 01:18:23 -0800</bug_when>
    <thetext>Created attachment 444221
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814983</commentid>
    <comment_count>6</comment_count>
      <attachid>444222</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-11-15 01:36:00 -0800</bug_when>
    <thetext>Created attachment 444222
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1815211</commentid>
    <comment_count>7</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-11-15 13:59:43 -0800</bug_when>
    <thetext>I guess I can land this behind HAVE(WEBGPU_IMPLEMENTATION) which is off everywhere. And not land the WebCore pieces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1815212</commentid>
    <comment_count>8</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-11-15 14:06:32 -0800</bug_when>
    <thetext>Committed r285831 (244267@main): &lt;https://commits.webkit.org/244267@main&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444190</attachid>
            <date>2021-11-14 13:08:02 -0800</date>
            <delta_ts>2021-11-14 13:34:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233106-20211114130801.patch</filename>
            <type>text/plain</type>
            <size>253274</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1NzkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzkwM2U0ZmVhYjQzYjAx
OTY2ZmQyOWJhN2E4NGQ3MzBjNmU3OGY0Zi4uODg2YjIzOTYxZWViMTM4MmNmYjNlY2M2MGQxOGI3
NTE3NDlhYjc4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIxLTExLTE0ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkdQVV0g
W0NvY29hXSBDb25uZWN0IFdlYkNvcmUgJiBQQUwgdG8gV2ViR1BVLmZyYW1ld29yaworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzMTA2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGluayB3aXRoIFdlYkdQ
VS5mcmFtZXdvcmsuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhlcmUgaXMgbm8g
YmVoYXZpb3IgY2hhbmdlICh5ZXQpLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorCiAyMDIxLTExLTE0ICBUaW0gTmd1eWVuICA8bnRpbUBhcHBsZS5jb20+
CiAKICAgICAgICAgTW9kYWwgZGlhbG9ncyBzaG91bGQgbWFrZSB0aGUgcm9vdCBlbGVtZW50IHVu
Zm9jdXNhYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwppbmRleCAwMmE2MjJiNzIzNjU3M2UwMGJhOGNkYTUx
YjQ4Y2Y0ZmIwNjc2MjliLi5mNWI5OTFlYzY1Y2Y3MWFhNTk4YzNhZTQ1MzRiZDZlZGNjZGZjNzdm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1BBTC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNjQgQEAKKzIwMjEtMTEtMTQgIE15bGVz
IEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViR1BVXSBb
Q29jb2FdIENvbm5lY3QgV2ViQ29yZSAmIFBBTCB0byBXZWJHUFUuZnJhbWV3b3JrCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzMxMDYKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGFkZHMgYW4gaW1w
bGVtZW50YXRpb24gb2YgV2ViR1BVJ3MgdmlydHVhbCBpbnRlcmZhY2VzIG9uIHRvcCBvZiBXZWJH
UFUuZnJhbWV3b3JrLgorICAgICAgICBUaGF0IGZyYW1ld29yaydzIGhlYWRlcnMgYWxtb3N0IGV4
YWN0bHkgbWF0Y2ggdGhlIFdlYkdQVSBBUEksIHNvIHRoZSBjb25uZWN0aW9ucyBhcmUKKyAgICAg
ICAgbW9zdGx5IG1lY2hhbmljYWwuIFRoZXJlJ3MganVzdCBhIGJ1bmNoIG9mIG1hcnNoYWxsaW5n
IGNvZGUgdG8gY29udmVydCBiZXR3ZWVuCisgICAgICAgIGRlc2NyaXB0b3IgYW5kIHN0cnVjdHMg
ZnJvbSBXZWJDb3JlJ3MgaW50ZXJmYWNlIHRvIFdlYkdQVS5mcmFtZXdvcmsncworICAgICAgICBk
ZXNjcmlwdG9ycy9zdHJ1Y3RzLgorCisgICAgICAgIFRoaXMgdXNlcyB0aGUgc2FtZSAiY29udmVy
dFRvQmFja2luZyIgY29udmVudGlvbiwgd2hlcmUgZnVuY3Rpb25zIHRoYXQgY29udmVydCBmcm9t
IHRoZQorICAgICAgICBoaWdoZXItbGV2ZWwgV2ViQ29yZSB0eXBlcyB0byB0aGUgbG93ZXItbGV2
ZWwgV2ViR1BVLmZyYW1ld29yayB0eXBlcyBhcmUgbmFtZWQKKyAgICAgICAgImNvbnZlcnRUb0Jh
Y2tpbmcoKSIuIFVuZm9ydHVuYXRlbHksIHRoZSBXZWJHUFUgQVBJIHRha2VzIG1hbnkgb2YgdGhl
c2Ugc3RydWN0cyBieQorICAgICAgICBub24tY29uc3QgcmVmZXJlbmNlLCBhbmQgdGhlIHN0cnVj
dHMgYXJlIG5lc3RlZCBieSBub24tY29uc3QgcmVmZXJlbmNlLCB3aGljaCBtZWFucyBJCisgICAg
ICAgIGNhbid0IGp1c3QgaGF2ZSBzaW1wbGUgMS1pbi0xLW91dCBjb252ZXJ0ZXIgZnVuY3Rpb25z
IGZvciBldmVyeSBzdHJ1Y3QsIHNpbmNlIHRoZQorICAgICAgICBpbm5lciBzdHJ1Y3RzIGhhdmUg
dG8gYmUgcmVmZXJlbmNlZCBieS1yZWZlcmVuY2UgYW5kIHRoZXJlZm9yZSBoYXZlIHRvIGJlIGlu
LXNjb3BlLiBUaGlzCisgICAgICAgIG1lYW5zIHRoYXQgdGhlIHNpbXBsZSBlbnVtIGFuZCBmbGFn
cyB0eXBlcyB1c2UgY29udmVydFRvQmFja2luZygpLCBidXQgbW9zdCBvZiB0aGUKKyAgICAgICAg
c3RydWN0cyBoYXZlIHRvIGJlIGNvbnZlcnRlZCBhdCB0aGVpciB1c2Ugc2l0ZS4gTHVja2lseSwg
YWxtb3N0IGFsbCBvZiB0aGVzZSBzdHJ1Y3RzCisgICAgICAgIG9ubHkgaGF2ZSBhIHNpbmdsZSB1
c2Ugc2l0ZSwgc28gdGhlcmUgaXNuJ3QgbXVjaCBkdXBsaWNhdGlvbi4KKworICAgICAgICBGb3Ig
bm93LCB0aGlzIGltcGxlbWVudGF0aW9uIGlzIENvY29hLW9ubHksIGJlY2F1c2UgaW4gb3JkZXIg
Zm9yIHRoZXNlIGNhbGxzIHRvCisgICAgICAgIFdlYkdQVS5mcmFtZXdvcmsgdG8gYmUgbGVnYWws
IFdlYkNvcmUgaGFzIHRvIGxpbmsgd2l0aCBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZQorICAg
ICAgICBmdW5jdGlvbnMuIFRoZSBDb2NvYSBwb3J0cyBhcmUgdGhlIG9ubHkgb25lcyB3aGljaCBh
Y3R1YWxseSBoYXZlIGFuIGltcGxlbWVudGF0aW9uIG9mCisgICAgICAgIHRob3NlIGZ1bmN0aW9u
cywgc28gdGhvc2UgYXJlIHRoZSBvbmx5IHBvcnRzIHdoaWNoIGNhbiBhY3R1YWxseSBjb21waWxl
IHRoaXMgY29kZS4gSWYKKyAgICAgICAgdGhlIG90aGVyIHBvcnRzIHdhbnQgdG8gbGluayB3aXRo
IERhd24gb3IgV0dQVSwgdGhpcyBjb2RlIHNob3VsZCBiZSAobW9zdGx5KSB1c2FibGUKKyAgICAg
ICAgb3V0LW9mLXRoZS1ib3ggZm9yIHRoZW0uIEkgc2F5ICJtb3N0bHkiIGJlY2F1c2UgdGhlIGhl
YWRlciB0aGF0J3Mgc2hhcmVkIGJldHdlZW4gRGF3biwKKyAgICAgICAgV0dQVSwgYW5kIFdlYkdQ
VS5mcmFtZXdvcmsgaXNuJ3QgZmluYWxpemVkIHlldC4gQXMgc3VjaCwgdGhpcyBpbXBsZW1lbnRh
dGlvbiByZWxpZXMgb24KKyAgICAgICAgZnVuY3Rpb25zIGZyb20gV2ViR1BVRXh0LmgsIHdoaWNo
IGlzIGFuIGFkZGl0aW9uYWwgaGVhZGVyICh0aGF0IG9ubHkgZXhpc3RzIGluCisgICAgICAgIFdl
YkdQVS5mcmFtZXdvcmspIHRoYXQgYWRkcyB0aGUgbWlzc2luZyBwaWVjZXMuCisKKyAgICAgICAg
KiBQQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwYWwvZ3JhcGhpY3Mv
V2ViR1BVL0ltcGwvV2ViR1BVQWRhcHRlckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBBTDo6
V2ViR1BVOjphZGFwdGVyTmFtZSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6c3VwcG9ydGVkRmVh
dHVyZXMpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OnN1cHBvcnRlZExpbWl0cyk6CisgICAgICAg
IChQQUw6OldlYkdQVTo6aXNGYWxsYmFja0FkYXB0ZXIpOgorICAgICAgICAoUEFMOjpXZWJHUFU6
OkFkYXB0ZXJJbXBsOjpBZGFwdGVySW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6QWRhcHRl
ckltcGw6On5BZGFwdGVySW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6cmVxdWVzdERldmlj
ZUNhbGxiYWNrKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpBZGFwdGVySW1wbDo6cmVxdWVzdERl
dmljZSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6QWRhcHRlckltcGw6OnJlcXVlc3REZXZpY2VD
YWxsYmFjayk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUFkYXB0
ZXJJbXBsLmg6IEFkZGVkLgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJH
UFVCaW5kR3JvdXBJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChQQUw6OldlYkdQVTo6QmluZEdy
b3VwSW1wbDo6QmluZEdyb3VwSW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6QmluZEdyb3Vw
SW1wbDo6fkJpbmRHcm91cEltcGwpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkJpbmRHcm91cElt
cGw6OnNldExhYmVsSW50ZXJuYWwpOgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1w
bC9XZWJHUFVCaW5kR3JvdXBJbXBsLmg6IEFkZGVkLgorICAgICAgICAqIHBhbC9ncmFwaGljcy9X
ZWJHUFUvSW1wbC9XZWJHUFVCaW5kR3JvdXBMYXlvdXRJbXBsLmNwcDogQWRkZWQuCisgICAgICAg
IChQQUw6OldlYkdQVTo6QmluZEdyb3VwTGF5b3V0SW1wbDo6QmluZEdyb3VwTGF5b3V0SW1wbCk6
CisgICAgICAgIChQQUw6OldlYkdQVTo6QmluZEdyb3VwTGF5b3V0SW1wbDo6fkJpbmRHcm91cExh
eW91dEltcGwpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkJpbmRHcm91cExheW91dEltcGw6OnNl
dExhYmVsSW50ZXJuYWwpOgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJH
UFVCaW5kR3JvdXBMYXlvdXRJbXBsLmg6IEFkZGVkLgorICAgICAgICAqIHBhbC9ncmFwaGljcy9X
ZWJHUFUvSW1wbC9XZWJHUFVCdWZmZXJJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChQQUw6Oldl
YkdQVTo6QnVmZmVySW1wbDo6QnVmZmVySW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6QnVm
ZmVySW1wbDo6fkJ1ZmZlckltcGwpOgorICAgICAgICAoUEFMOjpXZWJHUFU6Om1hcENhbGxiYWNr
KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpCdWZmZXJJbXBsOjptYXBBc3luYyk6CisgICAgICAg
IChQQUw6OldlYkdQVTo6QnVmZmVySW1wbDo6bWFwQ2FsbGJhY2spOgorICAgICAgICAoUEFMOjpX
ZWJHUFU6OkJ1ZmZlckltcGw6OmdldE1hcHBlZFJhbmdlKToKKyAgICAgICAgKFBBTDo6V2ViR1BV
OjpCdWZmZXJJbXBsOjp1bm1hcCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6QnVmZmVySW1wbDo6
ZGVzdHJveSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6QnVmZmVySW1wbDo6c2V0TGFiZWxJbnRl
cm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJ1ZmZlcklt
cGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNv
bW1hbmRCdWZmZXJJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tbWFu
ZEJ1ZmZlckltcGw6OkNvbW1hbmRCdWZmZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpD
b21tYW5kQnVmZmVySW1wbDo6fkNvbW1hbmRCdWZmZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2Vi
R1BVOjpDb21tYW5kQnVmZmVySW1wbDo6c2V0TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFs
L2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmg6IEFkZGVkLgor
ICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb21tYW5kRW5jb2Rlcklt
cGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21tYW5kRW5jb2RlckltcGw6
OkNvbW1hbmRFbmNvZGVySW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tbWFuZEVuY29k
ZXJJbXBsOjp+Q29tbWFuZEVuY29kZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21t
YW5kRW5jb2RlckltcGw6OmJlZ2luUmVuZGVyUGFzcyk6CisgICAgICAgIChQQUw6OldlYkdQVTo6
Q29tbWFuZEVuY29kZXJJbXBsOjpiZWdpbkNvbXB1dGVQYXNzKToKKyAgICAgICAgKFBBTDo6V2Vi
R1BVOjpDb21tYW5kRW5jb2RlckltcGw6OmNvcHlCdWZmZXJUb0J1ZmZlcik6CisgICAgICAgIChQ
QUw6OldlYkdQVTo6Q29tbWFuZEVuY29kZXJJbXBsOjpjb3B5QnVmZmVyVG9UZXh0dXJlKToKKyAg
ICAgICAgKFBBTDo6V2ViR1BVOjpDb21tYW5kRW5jb2RlckltcGw6OmNvcHlUZXh0dXJlVG9CdWZm
ZXIpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbW1hbmRFbmNvZGVySW1wbDo6Y29weVRleHR1
cmVUb1RleHR1cmUpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbW1hbmRFbmNvZGVySW1wbDo6
ZmlsbEJ1ZmZlcik6CisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tbWFuZEVuY29kZXJJbXBsOjpw
dXNoRGVidWdHcm91cCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tbWFuZEVuY29kZXJJbXBs
Ojpwb3BEZWJ1Z0dyb3VwKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21tYW5kRW5jb2Rlcklt
cGw6Omluc2VydERlYnVnTWFya2VyKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21tYW5kRW5j
b2RlckltcGw6OndyaXRlVGltZXN0YW1wKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21tYW5k
RW5jb2RlckltcGw6OnJlc29sdmVRdWVyeVNldCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6Q29t
bWFuZEVuY29kZXJJbXBsOjpmaW5pc2gpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbW1hbmRF
bmNvZGVySW1wbDo6c2V0TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dl
YkdQVS9JbXBsL1dlYkdQVUNvbW1hbmRFbmNvZGVySW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKiBw
YWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5jcHA6
IEFkZGVkLgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbXB1dGVQYXNzRW5jb2RlckltcGw6OkNv
bXB1dGVQYXNzRW5jb2RlckltcGwpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbXB1dGVQYXNz
RW5jb2RlckltcGw6On5Db21wdXRlUGFzc0VuY29kZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2Vi
R1BVOjpDb21wdXRlUGFzc0VuY29kZXJJbXBsOjpzZXRQaXBlbGluZSk6CisgICAgICAgIChQQUw6
OldlYkdQVTo6Q29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6ZGlzcGF0Y2gpOgorICAgICAgICAoUEFM
OjpXZWJHUFU6OkNvbXB1dGVQYXNzRW5jb2RlckltcGw6OmRpc3BhdGNoSW5kaXJlY3QpOgorICAg
ICAgICAoUEFMOjpXZWJHUFU6OkNvbXB1dGVQYXNzRW5jb2RlckltcGw6OmJlZ2luUGlwZWxpbmVT
dGF0aXN0aWNzUXVlcnkpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbXB1dGVQYXNzRW5jb2Rl
ckltcGw6OmVuZFBpcGVsaW5lU3RhdGlzdGljc1F1ZXJ5KToKKyAgICAgICAgKFBBTDo6V2ViR1BV
OjpDb21wdXRlUGFzc0VuY29kZXJJbXBsOjplbmRQYXNzKToKKyAgICAgICAgKFBBTDo6V2ViR1BV
OjpDb21wdXRlUGFzc0VuY29kZXJJbXBsOjpzZXRCaW5kR3JvdXApOgorICAgICAgICAoUEFMOjpX
ZWJHUFU6OkNvbXB1dGVQYXNzRW5jb2RlckltcGw6OnB1c2hEZWJ1Z0dyb3VwKToKKyAgICAgICAg
KFBBTDo6V2ViR1BVOjpDb21wdXRlUGFzc0VuY29kZXJJbXBsOjpwb3BEZWJ1Z0dyb3VwKToKKyAg
ICAgICAgKFBBTDo6V2ViR1BVOjpDb21wdXRlUGFzc0VuY29kZXJJbXBsOjppbnNlcnREZWJ1Z01h
cmtlcik6CisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6c2V0
TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQ
VUNvbXB1dGVQYXNzRW5jb2RlckltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNz
L1dlYkdQVS9JbXBsL1dlYkdQVUNvbXB1dGVQaXBlbGluZUltcGwuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFBBTDo6V2ViR1BVOjpDb21wdXRlUGlwZWxpbmVJbXBsOjpDb21wdXRlUGlwZWxpbmVJbXBs
KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21wdXRlUGlwZWxpbmVJbXBsOjp+Q29tcHV0ZVBp
cGVsaW5lSW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tcHV0ZVBpcGVsaW5lSW1wbDo6
Z2V0QmluZEdyb3VwTGF5b3V0KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21wdXRlUGlwZWxp
bmVJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BV
L0ltcGwvV2ViR1BVQ29tcHV0ZVBpcGVsaW5lSW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKiBwYWwv
Z3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29udmVydFRvQmFja2luZy5jcHA6IEFkZGVkLgor
ICAgICAgICAoUEFMOjpXZWJHUFU6OmNvbnZlcnRUb0JhY2tpbmcpOgorICAgICAgICAoUEFMOjpX
ZWJHUFU6OmNvbnZlcnRCdWZmZXJVc2FnZUZsYWdzVG9CYWNraW5nKToKKyAgICAgICAgKFBBTDo6
V2ViR1BVOjpjb252ZXJ0Q29sb3JXcml0ZUZsYWdzVG9CYWNraW5nKToKKyAgICAgICAgKFBBTDo6
V2ViR1BVOjpjb252ZXJ0TWFwTW9kZUZsYWdzVG9CYWNraW5nKToKKyAgICAgICAgKFBBTDo6V2Vi
R1BVOjpjb252ZXJ0U2hhZGVyU3RhZ2VGbGFnc1RvQmFja2luZyk6CisgICAgICAgIChQQUw6Oldl
YkdQVTo6Y29udmVydFRleHR1cmVVc2FnZUZsYWdzVG9CYWNraW5nKToKKyAgICAgICAgKiBwYWwv
Z3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29udmVydFRvQmFja2luZy5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVRGV2aWNlSW1wbC5jcHA6IEFk
ZGVkLgorICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmljZUltcGw6OkRldmljZUltcGwpOgorICAg
ICAgICAoUEFMOjpXZWJHUFU6OkRldmljZUltcGw6On5EZXZpY2VJbXBsKToKKyAgICAgICAgKFBB
TDo6V2ViR1BVOjpEZXZpY2VJbXBsOjpkZXN0cm95KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpE
ZXZpY2VJbXBsOjpjcmVhdGVCdWZmZXIpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmljZUlt
cGw6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmljZUltcGw6OmNy
ZWF0ZVNhbXBsZXIpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmljZUltcGw6OmltcG9ydEV4
dGVybmFsVGV4dHVyZSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6Y3JlYXRl
QmluZEdyb3VwTGF5b3V0KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpEZXZpY2VJbXBsOjpjcmVh
dGVQaXBlbGluZUxheW91dCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6Y3Jl
YXRlQmluZEdyb3VwKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpEZXZpY2VJbXBsOjpjcmVhdGVT
aGFkZXJNb2R1bGUpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OmNvbnZlcnRUb0JhY2tpbmcpOgor
ICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmljZUltcGw6OmNyZWF0ZUNvbXB1dGVQaXBlbGluZSk6
CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6Y3JlYXRlUmVuZGVyUGlwZWxpbmUp
OgorICAgICAgICAoUEFMOjpXZWJHUFU6OmNyZWF0ZUNvbXB1dGVQaXBlbGluZUFzeW5jQ2FsbGJh
Y2spOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmljZUltcGw6OmNyZWF0ZUNvbXB1dGVQaXBl
bGluZUFzeW5jKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpEZXZpY2VJbXBsOjpjcmVhdGVDb21w
dXRlUGlwZWxpbmVBc3luY0NhbGxiYWNrKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpjcmVhdGVS
ZW5kZXJQaXBlbGluZUFzeW5jQ2FsbGJhY2spOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmlj
ZUltcGw6OmNyZWF0ZVJlbmRlclBpcGVsaW5lQXN5bmMpOgorICAgICAgICAoUEFMOjpXZWJHUFU6
OkRldmljZUltcGw6OmNyZWF0ZVJlbmRlclBpcGVsaW5lQXN5bmNDYWxsYmFjayk6CisgICAgICAg
IChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6Y3JlYXRlQ29tbWFuZEVuY29kZXIpOgorICAgICAg
ICAoUEFMOjpXZWJHUFU6OkRldmljZUltcGw6OmNyZWF0ZVJlbmRlckJ1bmRsZUVuY29kZXIpOgor
ICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmljZUltcGw6OmNyZWF0ZVF1ZXJ5U2V0KToKKyAgICAg
ICAgKFBBTDo6V2ViR1BVOjpEZXZpY2VJbXBsOjpwdXNoRXJyb3JTY29wZSk6CisgICAgICAgIChQ
QUw6OldlYkdQVTo6cG9wRXJyb3JTY29wZUNhbGxiYWNrKToKKyAgICAgICAgKFBBTDo6V2ViR1BV
OjpEZXZpY2VJbXBsOjpwb3BFcnJvclNjb3BlKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpEZXZp
Y2VJbXBsOjpwb3BFcnJvclNjb3BlQ2FsbGJhY2spOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkRl
dmljZUltcGw6OnNldExhYmVsSW50ZXJuYWwpOgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJH
UFUvSW1wbC9XZWJHUFVEZXZpY2VJbXBsLmg6IEFkZGVkLgorICAgICAgICAqIHBhbC9ncmFwaGlj
cy9XZWJHUFUvSW1wbC9XZWJHUFVFeHRlcm5hbFRleHR1cmVJbXBsLmNwcDogQWRkZWQuCisgICAg
ICAgIChQQUw6OldlYkdQVTo6RXh0ZXJuYWxUZXh0dXJlSW1wbDo6RXh0ZXJuYWxUZXh0dXJlSW1w
bCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6RXh0ZXJuYWxUZXh0dXJlSW1wbDo6fkV4dGVybmFs
VGV4dHVyZUltcGwpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkV4dGVybmFsVGV4dHVyZUltcGw6
OnNldExhYmVsSW50ZXJuYWwpOgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9X
ZWJHUFVFeHRlcm5hbFRleHR1cmVJbXBsLmg6IEFkZGVkLgorICAgICAgICAqIHBhbC9ncmFwaGlj
cy9XZWJHUFUvSW1wbC9XZWJHUFVJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChQQUw6OldlYkdQ
VTo6R1BVSW1wbDo6R1BVSW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6R1BVSW1wbDo6fkdQ
VUltcGwpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OnJlcXVlc3RBZGFwdGVyQ2FsbGJhY2spOgor
ICAgICAgICAoUEFMOjpXZWJHUFU6OkdQVUltcGw6OnJlcXVlc3RBZGFwdGVyKToKKyAgICAgICAg
KFBBTDo6V2ViR1BVOjpHUFVJbXBsOjpyZXF1ZXN0QWRhcHRlckNhbGxiYWNrKToKKyAgICAgICAg
KiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVSW1wbC5oOiBBZGRlZC4KKyAgICAgICAg
KiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUGlwZWxpbmVMYXlvdXRJbXBsLmNwcDog
QWRkZWQuCisgICAgICAgIChQQUw6OldlYkdQVTo6UGlwZWxpbmVMYXlvdXRJbXBsOjpQaXBlbGlu
ZUxheW91dEltcGwpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlBpcGVsaW5lTGF5b3V0SW1wbDo6
flBpcGVsaW5lTGF5b3V0SW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UGlwZWxpbmVMYXlv
dXRJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BV
L0ltcGwvV2ViR1BVUGlwZWxpbmVMYXlvdXRJbXBsLmg6IEFkZGVkLgorICAgICAgICAqIHBhbC9n
cmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVRdWVyeVNldEltcGwuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFBBTDo6V2ViR1BVOjpRdWVyeVNldEltcGw6OlF1ZXJ5U2V0SW1wbCk6CisgICAgICAgIChQ
QUw6OldlYkdQVTo6UXVlcnlTZXRJbXBsOjp+UXVlcnlTZXRJbXBsKToKKyAgICAgICAgKFBBTDo6
V2ViR1BVOjpRdWVyeVNldEltcGw6OmRlc3Ryb3kpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlF1
ZXJ5U2V0SW1wbDo6c2V0TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dl
YkdQVS9JbXBsL1dlYkdQVVF1ZXJ5U2V0SW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKiBwYWwvZ3Jh
cGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUXVldWVJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChQ
QUw6OldlYkdQVTo6UXVldWVJbXBsOjpRdWV1ZUltcGwpOgorICAgICAgICAoUEFMOjpXZWJHUFU6
OlF1ZXVlSW1wbDo6flF1ZXVlSW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UXVldWVJbXBs
OjpzdWJtaXQpOgorICAgICAgICAoUEFMOjpXZWJHUFU6Om9uU3VibWl0dGVkV29ya0RvbmVDYWxs
YmFjayk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UXVldWVJbXBsOjpvblN1Ym1pdHRlZFdvcmtE
b25lKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpRdWV1ZUltcGw6Om9uU3VibWl0dGVkV29ya0Rv
bmVDYWxsYmFjayk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UXVldWVJbXBsOjp3cml0ZUJ1ZmZl
cik6CisgICAgICAgIChQQUw6OldlYkdQVTo6UXVldWVJbXBsOjp3cml0ZVRleHR1cmUpOgorICAg
ICAgICAoUEFMOjpXZWJHUFU6OlF1ZXVlSW1wbDo6Y29weUV4dGVybmFsSW1hZ2VUb1RleHR1cmUp
OgorICAgICAgICAoUEFMOjpXZWJHUFU6OlF1ZXVlSW1wbDo6c2V0TGFiZWxJbnRlcm5hbCk6Cisg
ICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVF1ZXVlSW1wbC5oOiBBZGRl
ZC4KKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVyQnVuZGxl
RW5jb2RlckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5k
bGVFbmNvZGVySW1wbDo6UmVuZGVyQnVuZGxlRW5jb2RlckltcGwpOgorICAgICAgICAoUEFMOjpX
ZWJHUFU6OlJlbmRlckJ1bmRsZUVuY29kZXJJbXBsOjp+UmVuZGVyQnVuZGxlRW5jb2RlckltcGwp
OgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlckJ1bmRsZUVuY29kZXJJbXBsOjpzZXRQaXBl
bGluZSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OnNl
dEluZGV4QnVmZmVyKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVFbmNvZGVy
SW1wbDo6c2V0VmVydGV4QnVmZmVyKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5k
bGVFbmNvZGVySW1wbDo6ZHJhdyk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UmVuZGVyQnVuZGxl
RW5jb2RlckltcGw6OmRyYXdJbmRleGVkKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJC
dW5kbGVFbmNvZGVySW1wbDo6ZHJhd0luZGlyZWN0KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpS
ZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6ZHJhd0luZGV4ZWRJbmRpcmVjdCk6CisgICAgICAgIChQ
QUw6OldlYkdQVTo6UmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OnNldEJpbmRHcm91cCk6CisgICAg
ICAgIChQQUw6OldlYkdQVTo6UmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OnB1c2hEZWJ1Z0dyb3Vw
KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6cG9wRGVi
dWdHcm91cCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UmVuZGVyQnVuZGxlRW5jb2RlckltcGw6
Omluc2VydERlYnVnTWFya2VyKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVF
bmNvZGVySW1wbDo6ZmluaXNoKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVF
bmNvZGVySW1wbDo6c2V0TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dl
YkdQVS9JbXBsL1dlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJbXBsLmg6IEFkZGVkLgorICAgICAg
ICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJCdW5kbGVJbXBsLmNwcDog
QWRkZWQuCisgICAgICAgIChQQUw6OldlYkdQVTo6UmVuZGVyQnVuZGxlSW1wbDo6UmVuZGVyQnVu
ZGxlSW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UmVuZGVyQnVuZGxlSW1wbDo6flJlbmRl
ckJ1bmRsZUltcGwpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlckJ1bmRsZUltcGw6OnNl
dExhYmVsSW50ZXJuYWwpOgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJH
UFVSZW5kZXJCdW5kbGVJbXBsLmg6IEFkZGVkLgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJH
UFUvSW1wbC9XZWJHUFVSZW5kZXJQYXNzRW5jb2RlckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6OlJlbmRlclBhc3NFbmNvZGVySW1w
bCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UmVuZGVyUGFzc0VuY29kZXJJbXBsOjp+UmVuZGVy
UGFzc0VuY29kZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2Rl
ckltcGw6OnNldFBpcGVsaW5lKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5j
b2RlckltcGw6OnNldEluZGV4QnVmZmVyKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQ
YXNzRW5jb2RlckltcGw6OnNldFZlcnRleEJ1ZmZlcik6CisgICAgICAgIChQQUw6OldlYkdQVTo6
UmVuZGVyUGFzc0VuY29kZXJJbXBsOjpkcmF3KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5k
ZXJQYXNzRW5jb2RlckltcGw6OmRyYXdJbmRleGVkKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpS
ZW5kZXJQYXNzRW5jb2RlckltcGw6OmRyYXdJbmRpcmVjdCk6CisgICAgICAgIChQQUw6OldlYkdQ
VTo6UmVuZGVyUGFzc0VuY29kZXJJbXBsOjpkcmF3SW5kZXhlZEluZGlyZWN0KToKKyAgICAgICAg
KFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6OnNldEJpbmRHcm91cCk6CisgICAg
ICAgIChQQUw6OldlYkdQVTo6UmVuZGVyUGFzc0VuY29kZXJJbXBsOjpwdXNoRGVidWdHcm91cCk6
CisgICAgICAgIChQQUw6OldlYkdQVTo6UmVuZGVyUGFzc0VuY29kZXJJbXBsOjpwb3BEZWJ1Z0dy
b3VwKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6Omluc2Vy
dERlYnVnTWFya2VyKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2Rlcklt
cGw6OnNldFZpZXdwb3J0KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2Rl
ckltcGw6OnNldFNjaXNzb3JSZWN0KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNz
RW5jb2RlckltcGw6OnNldEJsZW5kQ29uc3RhbnQpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJl
bmRlclBhc3NFbmNvZGVySW1wbDo6c2V0U3RlbmNpbFJlZmVyZW5jZSk6CisgICAgICAgIChQQUw6
OldlYkdQVTo6UmVuZGVyUGFzc0VuY29kZXJJbXBsOjpiZWdpbk9jY2x1c2lvblF1ZXJ5KToKKyAg
ICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6OmVuZE9jY2x1c2lvblF1
ZXJ5KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6OmJlZ2lu
UGlwZWxpbmVTdGF0aXN0aWNzUXVlcnkpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBh
c3NFbmNvZGVySW1wbDo6ZW5kUGlwZWxpbmVTdGF0aXN0aWNzUXVlcnkpOgorICAgICAgICAoUEFM
OjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6ZXhlY3V0ZUJ1bmRsZXMpOgorICAgICAg
ICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6ZW5kUGFzcyk6CisgICAgICAg
IChQQUw6OldlYkdQVTo6UmVuZGVyUGFzc0VuY29kZXJJbXBsOjpzZXRMYWJlbEludGVybmFsKToK
KyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVyUGFzc0VuY29k
ZXJJbXBsLmg6IEFkZGVkLgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJH
UFVSZW5kZXJQaXBlbGluZUltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBBTDo6V2ViR1BVOjpS
ZW5kZXJQaXBlbGluZUltcGw6OlJlbmRlclBpcGVsaW5lSW1wbCk6CisgICAgICAgIChQQUw6Oldl
YkdQVTo6UmVuZGVyUGlwZWxpbmVJbXBsOjp+UmVuZGVyUGlwZWxpbmVJbXBsKToKKyAgICAgICAg
KFBBTDo6V2ViR1BVOjpSZW5kZXJQaXBlbGluZUltcGw6OmdldEJpbmRHcm91cExheW91dCk6Cisg
ICAgICAgIChQQUw6OldlYkdQVTo6UmVuZGVyUGlwZWxpbmVJbXBsOjpzZXRMYWJlbEludGVybmFs
KToKKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVyUGlwZWxp
bmVJbXBsLmg6IEFkZGVkLgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJH
UFVTYW1wbGVySW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoUEFMOjpXZWJHUFU6OlNhbXBsZXJJ
bXBsOjpTYW1wbGVySW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6U2FtcGxlckltcGw6On5T
YW1wbGVySW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6U2FtcGxlckltcGw6OnNldExhYmVs
SW50ZXJuYWwpOgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVTYW1w
bGVySW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2Vi
R1BVU2hhZGVyTW9kdWxlSW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoUEFMOjpXZWJHUFU6OlNo
YWRlck1vZHVsZUltcGw6OlNoYWRlck1vZHVsZUltcGwpOgorICAgICAgICAoUEFMOjpXZWJHUFU6
OlNoYWRlck1vZHVsZUltcGw6On5TaGFkZXJNb2R1bGVJbXBsKToKKyAgICAgICAgKFBBTDo6V2Vi
R1BVOjpTaGFkZXJNb2R1bGVJbXBsOjpjb21waWxhdGlvbkluZm8pOgorICAgICAgICAoUEFMOjpX
ZWJHUFU6OlNoYWRlck1vZHVsZUltcGw6OnNldExhYmVsSW50ZXJuYWwpOgorICAgICAgICAqIHBh
bC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVTaGFkZXJNb2R1bGVJbXBsLmg6IEFkZGVkLgor
ICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVUZXh0dXJlSW1wbC5jcHA6
IEFkZGVkLgorICAgICAgICAoUEFMOjpXZWJHUFU6OlRleHR1cmVJbXBsOjpUZXh0dXJlSW1wbCk6
CisgICAgICAgIChQQUw6OldlYkdQVTo6VGV4dHVyZUltcGw6On5UZXh0dXJlSW1wbCk6CisgICAg
ICAgIChQQUw6OldlYkdQVTo6VGV4dHVyZUltcGw6OmNyZWF0ZVZpZXcgY29uc3QpOgorICAgICAg
ICAoUEFMOjpXZWJHUFU6OlRleHR1cmVJbXBsOjpkZXN0cm95KToKKyAgICAgICAgKFBBTDo6V2Vi
R1BVOjpUZXh0dXJlSW1wbDo6c2V0TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBo
aWNzL1dlYkdQVS9JbXBsL1dlYkdQVVRleHR1cmVJbXBsLmg6IEFkZGVkLgorICAgICAgICAqIHBh
bC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVUZXh0dXJlVmlld0ltcGwuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFBBTDo6V2ViR1BVOjpUZXh0dXJlVmlld0ltcGw6OlRleHR1cmVWaWV3SW1wbCk6
CisgICAgICAgIChQQUw6OldlYkdQVTo6VGV4dHVyZVZpZXdJbXBsOjp+VGV4dHVyZVZpZXdJbXBs
KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpUZXh0dXJlVmlld0ltcGw6OnNldExhYmVsSW50ZXJu
YWwpOgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVUZXh0dXJlVmll
d0ltcGwuaDogQWRkZWQuCisKIDIwMjEtMTEtMTQgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNl
ckBhcHBsZS5jb20+CiAKICAgICAgICAgQXR0YWNoIElPSElERXZlbnQgdGltZXN0YW1wcyB0byB3
aGVlbCBldmVudHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9QQUwueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1BBTC9QQUwueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCBlMTg1NDI1ZTAyZWM2NjkwNzQ0ZWQxMjNlMDhiMjNlMmU1MDQyMWIy
Li41MmFiNzNiY2IwNGVkYTljYmRmYWUxOTlmNmE5YjgxY2VhMTVlY2UwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDksNiAr
MTA5LDI5IEBACiAJCTFDMDlEMDUzMUUzMUM0NDEwMDcyNUYxOCAvKiBDcnlwdG9EaWdlc3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMDlEMDUyMUUz
MUM0NDEwMDcyNUYxOCAvKiBDcnlwdG9EaWdlc3QuaCAqLzsgfTsKIAkJMUMwOUQwNTYxRTMxQzQ2
NTAwNzI1RjE4IC8qIENyeXB0b0RpZ2VzdENvbW1vbkNyeXB0by5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzA5RDA1NTFFMzFDNDY1MDA3MjVGMTgg
LyogQ3J5cHRvRGlnZXN0Q29tbW9uQ3J5cHRvLmNwcCAqLzsgfTsKIAkJMUMwOUQwNTgxRTMxQzU3
RTAwNzI1RjE4IC8qIGNvbmZpZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUMwOUQwNTcxRTMxQzU3RTAwNzI1RjE4IC8qIGNvbmZpZy5oICovOyB9Owor
CQkxQzE5RTY0NDI3M0YzRTVEMDA0QjE3QjAgLyogV2ViR1BVSW1wbC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5RTY0MjI3M0YzRTVEMDA0QjE3
QjAgLyogV2ViR1BVSW1wbC5jcHAgKi87IH07CisJCTFDMTlFNjQ4MjczRjNGODIwMDRCMTdCMCAv
KiBXZWJHUFVBZGFwdGVySW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQzE5RTY0NjI3M0YzRjgyMDA0QjE3QjAgLyogV2ViR1BVQWRhcHRlcklt
cGwuY3BwICovOyB9OworCQkxQzE5RTY0QzI3M0YzRjk5MDA0QjE3QjAgLyogV2ViR1BVQmluZEdy
b3VwSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQzE5RTY0QTI3M0YzRjk5MDA0QjE3QjAgLyogV2ViR1BVQmluZEdyb3VwSW1wbC5jcHAgKi87
IH07CisJCTFDMTlFNjUwMjczRjNGQTUwMDRCMTdCMCAvKiBXZWJHUFVCaW5kR3JvdXBMYXlvdXRJ
bXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFD
MTlFNjRFMjczRjNGQTUwMDRCMTdCMCAvKiBXZWJHUFVCaW5kR3JvdXBMYXlvdXRJbXBsLmNwcCAq
LzsgfTsKKwkJMUMxOUU2NTQyNzNGM0ZCMTAwNEIxN0IwIC8qIFdlYkdQVUJ1ZmZlckltcGwuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMxOUU2NTIy
NzNGM0ZCMTAwNEIxN0IwIC8qIFdlYkdQVUJ1ZmZlckltcGwuY3BwICovOyB9OworCQkxQzE5RTY1
ODI3M0YzRkMwMDA0QjE3QjAgLyogV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMxOUU2NTYyNzNGM0ZDMDAw
NEIxN0IwIC8qIFdlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmNwcCAqLzsgfTsKKwkJMUMxOUU2NUMy
NzNGM0ZEMjAwNEIxN0IwIC8qIFdlYkdQVUNvbW1hbmRFbmNvZGVySW1wbC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5RTY1QTI3M0YzRkQyMDA0
QjE3QjAgLyogV2ViR1BVQ29tbWFuZEVuY29kZXJJbXBsLmNwcCAqLzsgfTsKKwkJMUMxOUU2NjAy
NzNGM0ZFMjAwNEIxN0IwIC8qIFdlYkdQVUNvbXB1dGVQYXNzRW5jb2RlckltcGwuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMxOUU2NUUyNzNGM0ZF
MjAwNEIxN0IwIC8qIFdlYkdQVUNvbXB1dGVQYXNzRW5jb2RlckltcGwuY3BwICovOyB9OworCQkx
QzE5RTY2NDI3M0YzRkVFMDA0QjE3QjAgLyogV2ViR1BVQ29tcHV0ZVBpcGVsaW5lSW1wbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5RTY2MjI3
M0YzRkVFMDA0QjE3QjAgLyogV2ViR1BVQ29tcHV0ZVBpcGVsaW5lSW1wbC5jcHAgKi87IH07CisJ
CTFDMTlFNjY4MjczRjNGRkEwMDRCMTdCMCAvKiBXZWJHUFVEZXZpY2VJbXBsLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNjY2MjczRjNGRkEw
MDRCMTdCMCAvKiBXZWJHUFVEZXZpY2VJbXBsLmNwcCAqLzsgfTsKKwkJMUMxOUU2NzAyNzNGNDAx
NDAwNEIxN0IwIC8qIFdlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5RTY2RTI3M0Y0MDE0MDA0QjE3QjAg
LyogV2ViR1BVUGlwZWxpbmVMYXlvdXRJbXBsLmNwcCAqLzsgfTsKKwkJMUMxOUU2NzQyNzNGNDAy
MDAwNEIxN0IwIC8qIFdlYkdQVVF1ZXJ5U2V0SW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5RTY3MjI3M0Y0MDIwMDA0QjE3QjAgLyogV2Vi
R1BVUXVlcnlTZXRJbXBsLmNwcCAqLzsgfTsKKwkJMUMxOUU2NzgyNzNGNDAyQjAwNEIxN0IwIC8q
IFdlYkdQVVF1ZXVlSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQzE5RTY3NjI3M0Y0MDJCMDA0QjE3QjAgLyogV2ViR1BVUXVldWVJbXBsLmNw
cCAqLzsgfTsKKwkJMUMxOUU2N0MyNzNGNDAzQTAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlckJ1bmRs
ZUltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUMxOUU2N0EyNzNGNDAzQTAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlckJ1bmRsZUltcGwuY3BwICov
OyB9OworCQkxQzE5RTY4MDI3M0Y0MDQ0MDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyQnVuZGxlRW5j
b2RlckltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUMxOUU2N0UyNzNGNDA0NDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJ
bXBsLmNwcCAqLzsgfTsKKwkJMUMxOUU2ODQyNzNGNDA1MDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRl
clBhc3NFbmNvZGVySW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQzE5RTY4MjI3M0Y0MDUwMDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyUGFzc0Vu
Y29kZXJJbXBsLmNwcCAqLzsgfTsKKwkJMUMxOUU2ODgyNzNGNDA1RDAwNEIxN0IwIC8qIFdlYkdQ
VVJlbmRlclBpcGVsaW5lSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQzE5RTY4NjI3M0Y0MDVEMDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyUGlw
ZWxpbmVJbXBsLmNwcCAqLzsgfTsKKwkJMUMxOUU2OEMyNzNGNDA2OTAwNEIxN0IwIC8qIFdlYkdQ
VVNhbXBsZXJJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFDMTlFNjhBMjczRjQwNjkwMDRCMTdCMCAvKiBXZWJHUFVTYW1wbGVySW1wbC5jcHAg
Ki87IH07CisJCTFDMTlFNjkwMjczRjQwNzIwMDRCMTdCMCAvKiBXZWJHUFVTaGFkZXJNb2R1bGVJ
bXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFD
MTlFNjhFMjczRjQwNzEwMDRCMTdCMCAvKiBXZWJHUFVTaGFkZXJNb2R1bGVJbXBsLmNwcCAqLzsg
fTsKKwkJMUMxOUU2OTQyNzNGNDA3RDAwNEIxN0IwIC8qIFdlYkdQVVRleHR1cmVJbXBsLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNjkyMjcz
RjQwN0QwMDRCMTdCMCAvKiBXZWJHUFVUZXh0dXJlSW1wbC5jcHAgKi87IH07CisJCTFDMTlFNjk4
MjczRjQwOEIwMDRCMTdCMCAvKiBXZWJHUFVUZXh0dXJlVmlld0ltcGwuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMxOUU2OTYyNzNGNDA4QjAwNEIx
N0IwIC8qIFdlYkdQVVRleHR1cmVWaWV3SW1wbC5jcHAgKi87IH07CisJCTFDMTlFNkI1MjczRjg1
QUYwMDRCMTdCMCAvKiBXZWJHUFVDb252ZXJ0VG9CYWNraW5nLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNkI0MjczRjg1QUYwMDRCMTdCMCAv
KiBXZWJHUFVDb252ZXJ0VG9CYWNraW5nLmNwcCAqLzsgfTsKKwkJMUMxOUU2QkEyNzQwNUUzMjAw
NEIxN0IwIC8qIFdlYkdQVUV4dGVybmFsVGV4dHVyZUltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMxOUU2QjkyNzQwNUUzMjAwNEIxN0IwIC8q
IFdlYkdQVUV4dGVybmFsVGV4dHVyZUltcGwuY3BwICovOyB9OwogCQkxQzQ4NzZEODFGOEQ3RjRF
MDBDQ0VFQkQgLyogTG9nZ2luZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQzQ4NzZENjFGOEQ3RjRFMDBDQ0VFQkQgLyogTG9nZ2luZy5jcHAgKi87
IH07CiAJCTFDNDg3NkQ5MUY4RDdGNEUwMENDRUVCRCAvKiBMb2dnaW5nLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzQ4NzZENzFGOEQ3RjRFMDBDQ0VF
QkQgLyogTG9nZ2luZy5oICovOyB9OwogCQkxQzc3QzhDOTI1RDc5NzIwMDA2MzVFMEMgLyogQ29y
ZVRleHRTb2Z0TGluay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQzc3QzhDNzI1RDc5NzIwMDA2MzVFMEMgLyogQ29yZVRleHRTb2Z0TGluay5jcHAg
Ki87IH07CkBAIC00NTksNiArNDgyLDUyIEBACiAJCTFDMDlEMDVEMUUzMUM3N0EwMDcyNUYxOCAv
KiBQQUwueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gUEFMLnhjY29u
ZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzA5RDA2MjFFMzFFQzI4MDA3MjVG
MTggLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0
aCA9IERlYnVnUmVsZWFzZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUMwOUQwNjMxRTMxRUMzMTAwNzI1RjE4IC8qIEJhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
LnhjY29uZmlnOyBwYXRoID0gQmFzZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUMxOUU2NDIyNzNGM0U1RDAwNEIxN0IwIC8qIFdlYkdQVUltcGwuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2ViR1BVSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTFDMTlFNjQ2MjczRjNGODIwMDRCMTdCMCAvKiBXZWJHUFVBZGFwdGVySW1wbC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXZWJHUFVBZGFwdGVySW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTFDMTlFNjRBMjczRjNGOTkwMDRCMTdCMCAvKiBXZWJHUFVCaW5kR3JvdXBJbXBs
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQVUJpbmRHcm91cEltcGwuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY0RTI3M0YzRkE1MDA0QjE3QjAgLyogV2ViR1BV
QmluZEdyb3VwTGF5b3V0SW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHUFVCaW5kR3Jv
dXBMYXlvdXRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2NTIy
NzNGM0ZCMTAwNEIxN0IwIC8qIFdlYkdQVUJ1ZmZlckltcGwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2ViR1BVQnVmZmVySW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFD
MTlFNjU2MjczRjNGQzAwMDRCMTdCMCAvKiBXZWJHUFVDb21tYW5kQnVmZmVySW1wbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXZWJHUFVDb21tYW5kQnVmZmVySW1wbC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjVBMjczRjNGRDIwMDRCMTdCMCAvKiBXZWJHUFVDb21t
YW5kRW5jb2RlckltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR1BVQ29tbWFuZEVuY29k
ZXJJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2NUUyNzNGM0ZF
MjAwNEIxN0IwIC8qIFdlYkdQVUNvbXB1dGVQYXNzRW5jb2RlckltcGwuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTFDMTlFNjYyMjczRjNGRUUwMDRCMTdCMCAvKiBXZWJHUFVDb21wdXRl
UGlwZWxpbmVJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQVUNvbXB1dGVQaXBlbGlu
ZUltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY2NjI3M0YzRkZB
MDA0QjE3QjAgLyogV2ViR1BVRGV2aWNlSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJH
UFVEZXZpY2VJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2NkUy
NzNGNDAxNDAwNEIxN0IwIC8qIFdlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXZWJHUFVQaXBlbGluZUxheW91dEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxQzE5RTY3MjI3M0Y0MDIwMDA0QjE3QjAgLyogV2ViR1BVUXVlcnlTZXRJ
bXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQVVF1ZXJ5U2V0SW1wbC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjc2MjczRjQwMkIwMDRCMTdCMCAvKiBXZWJH
UFVRdWV1ZUltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR1BVUXVldWVJbXBsLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2N0EyNzNGNDAzQTAwNEIxN0IwIC8q
IFdlYkdQVVJlbmRlckJ1bmRsZUltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR1BVUmVu
ZGVyQnVuZGxlSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjdF
MjczRjQwNDQwMDRCMTdCMCAvKiBXZWJHUFVSZW5kZXJCdW5kbGVFbmNvZGVySW1wbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXZWJHUFVSZW5kZXJCdW5kbGVFbmNvZGVySW1wbC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjgyMjczRjQwNTAwMDRCMTdCMCAvKiBXZWJH
UFVSZW5kZXJQYXNzRW5jb2RlckltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR1BVUmVu
ZGVyUGFzc0VuY29kZXJJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMx
OUU2ODYyNzNGNDA1RDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXZWJHUFVSZW5kZXJQaXBlbGluZUltcGwuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY4QTI3M0Y0MDY5MDA0QjE3QjAgLyogV2ViR1BVU2Ft
cGxlckltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR1BVU2FtcGxlckltcGwuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY4RTI3M0Y0MDcxMDA0QjE3QjAgLyog
V2ViR1BVU2hhZGVyTW9kdWxlSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHUFVTaGFk
ZXJNb2R1bGVJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2OTIy
NzNGNDA3RDAwNEIxN0IwIC8qIFdlYkdQVVRleHR1cmVJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdlYkdQVVRleHR1cmVJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MUMxOUU2OTYyNzNGNDA4QjAwNEIxN0IwIC8qIFdlYkdQVVRleHR1cmVWaWV3SW1wbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXZWJHUFVUZXh0dXJlVmlld0ltcGwuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkxQzE5RTY5QTI3M0Y0MjQyMDA0QjE3QjAgLyogV2ViR1BVUmVuZGVy
QnVuZGxlRW5jb2RlckltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR1BVUmVuZGVyQnVuZGxlRW5j
b2RlckltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2OUIyNzNGNDI0
MjAwNEIxN0IwIC8qIFdlYkdQVUltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR1BVSW1wbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY5QzI3M0Y0MjQzMDA0QjE3QjAgLyog
V2ViR1BVQmluZEdyb3VwTGF5b3V0SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVCaW5kR3Jv
dXBMYXlvdXRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjlEMjcz
RjQyNDMwMDRCMTdCMCAvKiBXZWJHUFVQaXBlbGluZUxheW91dEltcGwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViR1BVUGlwZWxpbmVMYXlvdXRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTFDMTlFNjlFMjczRjQyNDMwMDRCMTdCMCAvKiBXZWJHUFVDb21wdXRlUGFzc0VuY29kZXJJ
bXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVUNvbXB1dGVQYXNzRW5jb2RlckltcGwuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2OUYyNzNGNDI0MzAwNEIxN0IwIC8qIFdl
YkdQVVRleHR1cmVJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVVRleHR1cmVJbXBsLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNkExMjczRjQyNDMwMDRCMTdCMCAvKiBX
ZWJHUFVCaW5kR3JvdXBJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVUJpbmRHcm91cEltcGwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2QTIyNzNGNDI0MzAwNEIxN0Iw
IC8qIFdlYkdQVUJ1ZmZlckltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR1BVQnVmZmVySW1wbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTZBMzI3M0Y0MjQ0MDA0QjE3QjAg
LyogV2ViR1BVUmVuZGVyUGFzc0VuY29kZXJJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVVJl
bmRlclBhc3NFbmNvZGVySW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5
RTZBNDI3M0Y0MjQ0MDA0QjE3QjAgLyogV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMUMxOUU2QTUyNzNGNDI0NDAwNEIxN0IwIC8qIFdlYkdQVVF1ZXVlSW1wbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJHUFVRdWV1ZUltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUMxOUU2QTYyNzNGNDI0NDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlckJ1bmRsZUltcGwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViR1BVUmVuZGVyQnVuZGxlSW1wbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkxQzE5RTZBNzI3M0Y0MjQ0MDA0QjE3QjAgLyogV2ViR1BVU2FtcGxl
ckltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR1BVU2FtcGxlckltcGwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2QTgyNzNGNDI0NDAwNEIxN0IwIC8qIFdlYkdQVVF1ZXJ5
U2V0SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVRdWVyeVNldEltcGwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2QTkyNzNGNDI0NDAwNEIxN0IwIC8qIFdlYkdQVVJl
bmRlclBpcGVsaW5lSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVSZW5kZXJQaXBlbGluZUlt
cGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2QUEyNzNGNDI0NTAwNEIx
N0IwIC8qIFdlYkdQVVNoYWRlck1vZHVsZUltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR1BVU2hh
ZGVyTW9kdWxlSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTZBQjI3
M0Y0MjQ1MDA0QjE3QjAgLyogV2ViR1BVQ29tbWFuZEVuY29kZXJJbXBsLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYkdQVUNvbW1hbmRFbmNvZGVySW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxQzE5RTZBQzI3M0Y0MjQ1MDA0QjE3QjAgLyogV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYkdQVVRleHR1cmVWaWV3SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxQzE5RTZBRDI3M0Y0MjQ1MDA0QjE3QjAgLyogV2ViR1BVRGV2aWNlSW1w
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVEZXZpY2VJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTFDMTlFNkFFMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJHUFVBZGFwdGVySW1w
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVBZGFwdGVySW1wbC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxQzE5RTZBRjI3M0Y0MjQ1MDA0QjE3QjAgLyogV2ViR1BVQ29tcHV0ZVBp
cGVsaW5lSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNkI0MjczRjg1QUYwMDRCMTdCMCAv
KiBXZWJHUFVDb252ZXJ0VG9CYWNraW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQVUNv
bnZlcnRUb0JhY2tpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTZC
NjI3M0Y4NUJDMDA0QjE3QjAgLyogV2ViR1BVQ29udmVydFRvQmFja2luZy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJHUFVDb252ZXJ0VG9CYWNraW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTFDMTlFNkI5Mjc0MDVFMzIwMDRCMTdCMCAvKiBXZWJHUFVFeHRlcm5hbFRleHR1cmVJbXBs
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQVUV4dGVybmFsVGV4dHVyZUltcGwuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTZCQjI3NDA1RTNDMDA0QjE3QjAgLyog
V2ViR1BVRXh0ZXJuYWxUZXh0dXJlSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVFeHRlcm5h
bFRleHR1cmVJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDNDg3NkQ2MUY4
RDdGNEUwMENDRUVCRCAvKiBMb2dnaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvZ2dpbmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzQ4NzZENzFGOEQ3RjRFMDBDQ0VF
QkQgLyogTG9nZ2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2dnaW5nLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFDNjdDRUEyMUUzMkVFMjYwMEY4MEYyRSAvKiBWZXJzaW9uLnhjY29u
ZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IFZlcnNpb24ueGNjb25maWc7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDAwLDYgKzEwNjksNTkgQEAKIAkJCXBhdGgg
PSBDb25maWd1cmF0aW9uczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTFD
MTlFNjQxMjczRjNENzUwMDRCMTdCMCAvKiBJbXBsICovID0geworCQkJaXNhID0gUEJYR3JvdXA7
CisJCQljaGlsZHJlbiA9ICgKKwkJCQkxQzE5RTY0NjI3M0YzRjgyMDA0QjE3QjAgLyogV2ViR1BV
QWRhcHRlckltcGwuY3BwICovLAorCQkJCTFDMTlFNkFFMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJH
UFVBZGFwdGVySW1wbC5oICovLAorCQkJCTFDMTlFNjRBMjczRjNGOTkwMDRCMTdCMCAvKiBXZWJH
UFVCaW5kR3JvdXBJbXBsLmNwcCAqLywKKwkJCQkxQzE5RTZBMTI3M0Y0MjQzMDA0QjE3QjAgLyog
V2ViR1BVQmluZEdyb3VwSW1wbC5oICovLAorCQkJCTFDMTlFNjRFMjczRjNGQTUwMDRCMTdCMCAv
KiBXZWJHUFVCaW5kR3JvdXBMYXlvdXRJbXBsLmNwcCAqLywKKwkJCQkxQzE5RTY5QzI3M0Y0MjQz
MDA0QjE3QjAgLyogV2ViR1BVQmluZEdyb3VwTGF5b3V0SW1wbC5oICovLAorCQkJCTFDMTlFNjUy
MjczRjNGQjEwMDRCMTdCMCAvKiBXZWJHUFVCdWZmZXJJbXBsLmNwcCAqLywKKwkJCQkxQzE5RTZB
MjI3M0Y0MjQzMDA0QjE3QjAgLyogV2ViR1BVQnVmZmVySW1wbC5oICovLAorCQkJCTFDMTlFNjU2
MjczRjNGQzAwMDRCMTdCMCAvKiBXZWJHUFVDb21tYW5kQnVmZmVySW1wbC5jcHAgKi8sCisJCQkJ
MUMxOUU2QTQyNzNGNDI0NDAwNEIxN0IwIC8qIFdlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmggKi8s
CisJCQkJMUMxOUU2NUEyNzNGM0ZEMjAwNEIxN0IwIC8qIFdlYkdQVUNvbW1hbmRFbmNvZGVySW1w
bC5jcHAgKi8sCisJCQkJMUMxOUU2QUIyNzNGNDI0NTAwNEIxN0IwIC8qIFdlYkdQVUNvbW1hbmRF
bmNvZGVySW1wbC5oICovLAorCQkJCTFDMTlFNjVFMjczRjNGRTIwMDRCMTdCMCAvKiBXZWJHUFVD
b21wdXRlUGFzc0VuY29kZXJJbXBsLmNwcCAqLywKKwkJCQkxQzE5RTY5RTI3M0Y0MjQzMDA0QjE3
QjAgLyogV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5oICovLAorCQkJCTFDMTlFNjYyMjcz
RjNGRUUwMDRCMTdCMCAvKiBXZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBsLmNwcCAqLywKKwkJCQkx
QzE5RTZBRjI3M0Y0MjQ1MDA0QjE3QjAgLyogV2ViR1BVQ29tcHV0ZVBpcGVsaW5lSW1wbC5oICov
LAorCQkJCTFDMTlFNkI0MjczRjg1QUYwMDRCMTdCMCAvKiBXZWJHUFVDb252ZXJ0VG9CYWNraW5n
LmNwcCAqLywKKwkJCQkxQzE5RTZCNjI3M0Y4NUJDMDA0QjE3QjAgLyogV2ViR1BVQ29udmVydFRv
QmFja2luZy5oICovLAorCQkJCTFDMTlFNjY2MjczRjNGRkEwMDRCMTdCMCAvKiBXZWJHUFVEZXZp
Y2VJbXBsLmNwcCAqLywKKwkJCQkxQzE5RTZBRDI3M0Y0MjQ1MDA0QjE3QjAgLyogV2ViR1BVRGV2
aWNlSW1wbC5oICovLAorCQkJCTFDMTlFNkI5Mjc0MDVFMzIwMDRCMTdCMCAvKiBXZWJHUFVFeHRl
cm5hbFRleHR1cmVJbXBsLmNwcCAqLywKKwkJCQkxQzE5RTZCQjI3NDA1RTNDMDA0QjE3QjAgLyog
V2ViR1BVRXh0ZXJuYWxUZXh0dXJlSW1wbC5oICovLAorCQkJCTFDMTlFNjQyMjczRjNFNUQwMDRC
MTdCMCAvKiBXZWJHUFVJbXBsLmNwcCAqLywKKwkJCQkxQzE5RTY5QjI3M0Y0MjQyMDA0QjE3QjAg
LyogV2ViR1BVSW1wbC5oICovLAorCQkJCTFDMTlFNjZFMjczRjQwMTQwMDRCMTdCMCAvKiBXZWJH
UFVQaXBlbGluZUxheW91dEltcGwuY3BwICovLAorCQkJCTFDMTlFNjlEMjczRjQyNDMwMDRCMTdC
MCAvKiBXZWJHUFVQaXBlbGluZUxheW91dEltcGwuaCAqLywKKwkJCQkxQzE5RTY3MjI3M0Y0MDIw
MDA0QjE3QjAgLyogV2ViR1BVUXVlcnlTZXRJbXBsLmNwcCAqLywKKwkJCQkxQzE5RTZBODI3M0Y0
MjQ0MDA0QjE3QjAgLyogV2ViR1BVUXVlcnlTZXRJbXBsLmggKi8sCisJCQkJMUMxOUU2NzYyNzNG
NDAyQjAwNEIxN0IwIC8qIFdlYkdQVVF1ZXVlSW1wbC5jcHAgKi8sCisJCQkJMUMxOUU2QTUyNzNG
NDI0NDAwNEIxN0IwIC8qIFdlYkdQVVF1ZXVlSW1wbC5oICovLAorCQkJCTFDMTlFNjdFMjczRjQw
NDQwMDRCMTdCMCAvKiBXZWJHUFVSZW5kZXJCdW5kbGVFbmNvZGVySW1wbC5jcHAgKi8sCisJCQkJ
MUMxOUU2OUEyNzNGNDI0MjAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJbXBs
LmggKi8sCisJCQkJMUMxOUU2N0EyNzNGNDAzQTAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlckJ1bmRs
ZUltcGwuY3BwICovLAorCQkJCTFDMTlFNkE2MjczRjQyNDQwMDRCMTdCMCAvKiBXZWJHUFVSZW5k
ZXJCdW5kbGVJbXBsLmggKi8sCisJCQkJMUMxOUU2ODIyNzNGNDA1MDAwNEIxN0IwIC8qIFdlYkdQ
VVJlbmRlclBhc3NFbmNvZGVySW1wbC5jcHAgKi8sCisJCQkJMUMxOUU2QTMyNzNGNDI0NDAwNEIx
N0IwIC8qIFdlYkdQVVJlbmRlclBhc3NFbmNvZGVySW1wbC5oICovLAorCQkJCTFDMTlFNjg2Mjcz
RjQwNUQwMDRCMTdCMCAvKiBXZWJHUFVSZW5kZXJQaXBlbGluZUltcGwuY3BwICovLAorCQkJCTFD
MTlFNkE5MjczRjQyNDQwMDRCMTdCMCAvKiBXZWJHUFVSZW5kZXJQaXBlbGluZUltcGwuaCAqLywK
KwkJCQkxQzE5RTY4QTI3M0Y0MDY5MDA0QjE3QjAgLyogV2ViR1BVU2FtcGxlckltcGwuY3BwICov
LAorCQkJCTFDMTlFNkE3MjczRjQyNDQwMDRCMTdCMCAvKiBXZWJHUFVTYW1wbGVySW1wbC5oICov
LAorCQkJCTFDMTlFNjhFMjczRjQwNzEwMDRCMTdCMCAvKiBXZWJHUFVTaGFkZXJNb2R1bGVJbXBs
LmNwcCAqLywKKwkJCQkxQzE5RTZBQTI3M0Y0MjQ1MDA0QjE3QjAgLyogV2ViR1BVU2hhZGVyTW9k
dWxlSW1wbC5oICovLAorCQkJCTFDMTlFNjkyMjczRjQwN0QwMDRCMTdCMCAvKiBXZWJHUFVUZXh0
dXJlSW1wbC5jcHAgKi8sCisJCQkJMUMxOUU2OUYyNzNGNDI0MzAwNEIxN0IwIC8qIFdlYkdQVVRl
eHR1cmVJbXBsLmggKi8sCisJCQkJMUMxOUU2OTYyNzNGNDA4QjAwNEIxN0IwIC8qIFdlYkdQVVRl
eHR1cmVWaWV3SW1wbC5jcHAgKi8sCisJCQkJMUMxOUU2QUMyNzNGNDI0NTAwNEIxN0IwIC8qIFdl
YkdQVVRleHR1cmVWaWV3SW1wbC5oICovLAorCQkJKTsKKwkJCXBhdGggPSBJbXBsOworCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJMUM0ODc2REUxRjhEODMxMzAwQ0NFRUJEIC8q
IGNvY29hICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTEw
NDIsNiArMTE2NCw3IEBACiAJCTFDQzVFM0MzMjczNzQ1QTMwMDZGNkZGNCAvKiBXZWJHUFUgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTFDMTlFNjQxMjcz
RjNENzUwMDRCMTdCMCAvKiBJbXBsICovLAogCQkJCTFDQzVFNDcxMjczNzQ5NDgwMDZGNkZGNCAv
KiBXZWJHUFUuaCAqLywKIAkJCQkxQ0M1RTQ3RjI3Mzc0OTQ5MDA2RjZGRjQgLyogV2ViR1BVQWRh
cHRlci5oICovLAogCQkJCTFDQzVFNDZDMjczNzQ5NDgwMDZGNkZGNCAvKiBXZWJHUFVBZGRyZXNz
TW9kZS5oICovLApAQCAtMTY5NCw2ICsxODE3LDI5IEBACiAJCQkJMDc2MTFEQjcyNDNGQTVCRjAw
RDgwNzA0IC8qIFVzYWdlVHJhY2tpbmdTb2Z0TGluay5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQx
RTFGMzQ0MjQ4QTZBMDAwMDIyRDVERSAvKiBWaWRlb1Rvb2xib3hTb2Z0TGluay5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlGNDZCOEM0RDI2NzQwOTE4MDA3QTY1NTQgLyogVmlzaW9uS2l0Q29yZVNv
ZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2NDgyNzNGM0Y4MjAwNEIxN0IwIC8q
IFdlYkdQVUFkYXB0ZXJJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFDMTlFNjRDMjczRjNG
OTkwMDRCMTdCMCAvKiBXZWJHUFVCaW5kR3JvdXBJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTFDMTlFNjUwMjczRjNGQTUwMDRCMTdCMCAvKiBXZWJHUFVCaW5kR3JvdXBMYXlvdXRJbXBsLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTFDMTlFNjU0MjczRjNGQjEwMDRCMTdCMCAvKiBXZWJHUFVC
dWZmZXJJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFDMTlFNjU4MjczRjNGQzAwMDRCMTdC
MCAvKiBXZWJHUFVDb21tYW5kQnVmZmVySW1wbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQzE5
RTY1QzI3M0YzRkQyMDA0QjE3QjAgLyogV2ViR1BVQ29tbWFuZEVuY29kZXJJbXBsLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTFDMTlFNjYwMjczRjNGRTIwMDRCMTdCMCAvKiBXZWJHUFVDb21wdXRl
UGFzc0VuY29kZXJJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFDMTlFNjY0MjczRjNGRUUw
MDRCMTdCMCAvKiBXZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBsLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTFDMTlFNkI1MjczRjg1QUYwMDRCMTdCMCAvKiBXZWJHUFVDb252ZXJ0VG9CYWNraW5nLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTFDMTlFNjY4MjczRjNGRkEwMDRCMTdCMCAvKiBXZWJHUFVE
ZXZpY2VJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFDMTlFNkJBMjc0MDVFMzIwMDRCMTdC
MCAvKiBXZWJHUFVFeHRlcm5hbFRleHR1cmVJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFD
MTlFNjQ0MjczRjNFNUQwMDRCMTdCMCAvKiBXZWJHUFVJbXBsLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTFDMTlFNjcwMjczRjQwMTQwMDRCMTdCMCAvKiBXZWJHUFVQaXBlbGluZUxheW91dEltcGwu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2NzQyNzNGNDAyMDAwNEIxN0IwIC8qIFdlYkdQ
VVF1ZXJ5U2V0SW1wbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQzE5RTY3ODI3M0Y0MDJCMDA0
QjE3QjAgLyogV2ViR1BVUXVldWVJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFDMTlFNjgw
MjczRjQwNDQwMDRCMTdCMCAvKiBXZWJHUFVSZW5kZXJCdW5kbGVFbmNvZGVySW1wbC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkxQzE5RTY3QzI3M0Y0MDNBMDA0QjE3QjAgLyogV2ViR1BVUmVuZGVy
QnVuZGxlSW1wbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQzE5RTY4NDI3M0Y0MDUwMDA0QjE3
QjAgLyogV2ViR1BVUmVuZGVyUGFzc0VuY29kZXJJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTFDMTlFNjg4MjczRjQwNUQwMDRCMTdCMCAvKiBXZWJHUFVSZW5kZXJQaXBlbGluZUltcGwuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2OEMyNzNGNDA2OTAwNEIxN0IwIC8qIFdlYkdQVVNh
bXBsZXJJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFDMTlFNjkwMjczRjQwNzIwMDRCMTdC
MCAvKiBXZWJHUFVTaGFkZXJNb2R1bGVJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFDMTlF
Njk0MjczRjQwN0QwMDRCMTdCMCAvKiBXZWJHUFVUZXh0dXJlSW1wbC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkxQzE5RTY5ODI3M0Y0MDhCMDA0QjE3QjAgLyogV2ViR1BVVGV4dHVyZVZpZXdJbXBs
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExMDgyNkZBMUY1NzYyOTIwMDQ3NzJBQyAvKiBXZWJQ
YW5lbC5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVBZGFwdGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Q
QUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUFkYXB0ZXJJbXBsLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5kODkyZjg4OGY3MWY5N2Y1MmY1ZjVmZWY3MTJmMGE3NGJlNjhhYmYxCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJH
UFVBZGFwdGVySW1wbC5jcHAKQEAgLTAsMCArMSwyMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViR1BVQWRhcHRlckltcGwuaCIKKworI2luY2x1ZGUg
IldlYkdQVUNvbnZlcnRUb0JhY2tpbmcuaCIKKyNpbmNsdWRlICJXZWJHUFVEZXZpY2VJbXBsLmgi
CisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVz
cGFjZSBXZWJHUFUgeworCitzdGF0aWMgU3RyaW5nIGFkYXB0ZXJOYW1lKFdHUFVBZGFwdGVyIGFk
YXB0ZXIpCit7CisgICAgV0dQVUFkYXB0ZXJQcm9wZXJ0aWVzIHByb3BlcnRpZXM7CisgICAgd2dw
dUFkYXB0ZXJHZXRQcm9wZXJ0aWVzKGFkYXB0ZXIsICZwcm9wZXJ0aWVzKTsKKyAgICByZXR1cm4g
cHJvcGVydGllcy5uYW1lOworfQorCitzdGF0aWMgUmVmPFN1cHBvcnRlZEZlYXR1cmVzPiBzdXBw
b3J0ZWRGZWF0dXJlcyhXR1BVQWRhcHRlciBhZGFwdGVyKQoreworICAgIFZlY3RvcjxTdHJpbmc+
IHJlc3VsdDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgOyArK2kpIHsKKyAgICAgICAgYXV0byBm
ZWF0dXJlID0gd2dwdUFkYXB0ZXJHZXRGZWF0dXJlQXRJbmRleChhZGFwdGVyLCBpKTsKKyAgICAg
ICAgaWYgKGZlYXR1cmUgPT0gV0dQVUZlYXR1cmVOYW1lX1VuZGVmaW5lZCkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PHVpbnQ+KGZlYXR1cmUpKSB7Cisg
ICAgICAgIGNhc2UgV0dQVUZlYXR1cmVOYW1lX0RlcHRoQ2xhbXBpbmc6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBXR1BVRmVhdHVyZU5hbWVfRGVwdGgyNFVub3JtU3RlbmNpbDg6
CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJkZXB0aDI0dW5vcm0tc3RlbmNpbDgiX3MpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVUZlYXR1cmVOYW1lX0RlcHRoMzJG
bG9hdFN0ZW5jaWw4OgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiZGVwdGgzMmZsb2F0LXN0
ZW5jaWw4Il9zKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdHUFVGZWF0dXJl
TmFtZV9UaW1lc3RhbXBRdWVyeToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoInRpbWVzdGFt
cC1xdWVyeSJfcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXR1BVRmVhdHVy
ZU5hbWVfUGlwZWxpbmVTdGF0aXN0aWNzUXVlcnk6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KCJwaXBlbGluZS1zdGF0aXN0aWNzLXF1ZXJ5Il9zKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFdHUFVGZWF0dXJlTmFtZV9UZXh0dXJlQ29tcHJlc3Npb25CQzoKKyAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoInRleHR1cmUtY29tcHJlc3Npb24tYmMiX3MpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVUZlYXR1cmVOYW1lX0RlcHRoQ2xpcENvbnRyb2w6
CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJkZXB0aC1jbGlwLWNvbnRyb2wiX3MpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVUZlYXR1cmVOYW1lX0luZGlyZWN0Rmly
c3RJbnN0YW5jZToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoImluZGlyZWN0LWZpcnN0LWlu
c3RhbmNlIl9zKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdHUFVGZWF0dXJl
TmFtZV9UZXh0dXJlQ29tcHJlc3Npb25FVEMyOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgi
dGV4dHVyZS1jb21wcmVzc2lvbi1ldGMyIl9zKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFdHUFVGZWF0dXJlTmFtZV9UZXh0dXJlQ29tcHJlc3Npb25BU1RDOgorICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgidGV4dHVyZS1jb21wcmVzc2lvbi1hc3RjIl9zKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIFN1cHBvcnRlZEZlYXR1cmVzOjpjcmVhdGUoV1RGTW92ZShy
ZXN1bHQpKTsKK30KKworc3RhdGljIFJlZjxTdXBwb3J0ZWRMaW1pdHM+IHN1cHBvcnRlZExpbWl0
cyhXR1BVQWRhcHRlciBhZGFwdGVyKQoreworICAgIFdHUFVTdXBwb3J0ZWRMaW1pdHMgbGltaXRz
OworICAgIHdncHVBZGFwdGVyR2V0TGltaXRzKGFkYXB0ZXIsICZsaW1pdHMpOworICAgIHJldHVy
biBTdXBwb3J0ZWRMaW1pdHM6OmNyZWF0ZSgKKyAgICAgICAgbGltaXRzLmxpbWl0cy5tYXhUZXh0
dXJlRGltZW5zaW9uMUQsCisgICAgICAgIGxpbWl0cy5saW1pdHMubWF4VGV4dHVyZURpbWVuc2lv
bjJELAorICAgICAgICBsaW1pdHMubGltaXRzLm1heFRleHR1cmVEaW1lbnNpb24zRCwKKyAgICAg
ICAgbGltaXRzLmxpbWl0cy5tYXhUZXh0dXJlQXJyYXlMYXllcnMsCisgICAgICAgIGxpbWl0cy5s
aW1pdHMubWF4QmluZEdyb3VwcywKKyAgICAgICAgbGltaXRzLmxpbWl0cy5tYXhEeW5hbWljVW5p
Zm9ybUJ1ZmZlcnNQZXJQaXBlbGluZUxheW91dCwKKyAgICAgICAgbGltaXRzLmxpbWl0cy5tYXhE
eW5hbWljU3RvcmFnZUJ1ZmZlcnNQZXJQaXBlbGluZUxheW91dCwKKyAgICAgICAgbGltaXRzLmxp
bWl0cy5tYXhTYW1wbGVkVGV4dHVyZXNQZXJTaGFkZXJTdGFnZSwKKyAgICAgICAgbGltaXRzLmxp
bWl0cy5tYXhTYW1wbGVyc1BlclNoYWRlclN0YWdlLAorICAgICAgICBsaW1pdHMubGltaXRzLm1h
eFN0b3JhZ2VCdWZmZXJzUGVyU2hhZGVyU3RhZ2UsCisgICAgICAgIGxpbWl0cy5saW1pdHMubWF4
U3RvcmFnZVRleHR1cmVzUGVyU2hhZGVyU3RhZ2UsCisgICAgICAgIGxpbWl0cy5saW1pdHMubWF4
VW5pZm9ybUJ1ZmZlcnNQZXJTaGFkZXJTdGFnZSwKKyAgICAgICAgbGltaXRzLmxpbWl0cy5tYXhV
bmlmb3JtQnVmZmVyQmluZGluZ1NpemUsCisgICAgICAgIGxpbWl0cy5saW1pdHMubWF4U3RvcmFn
ZUJ1ZmZlckJpbmRpbmdTaXplLAorICAgICAgICBsaW1pdHMubGltaXRzLm1pblVuaWZvcm1CdWZm
ZXJPZmZzZXRBbGlnbm1lbnQsCisgICAgICAgIGxpbWl0cy5saW1pdHMubWluU3RvcmFnZUJ1ZmZl
ck9mZnNldEFsaWdubWVudCwKKyAgICAgICAgbGltaXRzLmxpbWl0cy5tYXhWZXJ0ZXhCdWZmZXJz
LAorICAgICAgICBsaW1pdHMubGltaXRzLm1heFZlcnRleEF0dHJpYnV0ZXMsCisgICAgICAgIGxp
bWl0cy5saW1pdHMubWF4VmVydGV4QnVmZmVyQXJyYXlTdHJpZGUsCisgICAgICAgIGxpbWl0cy5s
aW1pdHMubWF4SW50ZXJTdGFnZVNoYWRlckNvbXBvbmVudHMsCisgICAgICAgIGxpbWl0cy5saW1p
dHMubWF4Q29tcHV0ZVdvcmtncm91cFN0b3JhZ2VTaXplLAorICAgICAgICBsaW1pdHMubGltaXRz
Lm1heENvbXB1dGVJbnZvY2F0aW9uc1Blcldvcmtncm91cCwKKyAgICAgICAgbGltaXRzLmxpbWl0
cy5tYXhDb21wdXRlV29ya2dyb3VwU2l6ZVgsCisgICAgICAgIGxpbWl0cy5saW1pdHMubWF4Q29t
cHV0ZVdvcmtncm91cFNpemVZLAorICAgICAgICBsaW1pdHMubGltaXRzLm1heENvbXB1dGVXb3Jr
Z3JvdXBTaXplWiwKKyAgICAgICAgbGltaXRzLmxpbWl0cy5tYXhDb21wdXRlV29ya2dyb3Vwc1Bl
ckRpbWVuc2lvbik7Cit9CisKK3N0YXRpYyBib29sIGlzRmFsbGJhY2tBZGFwdGVyKFdHUFVBZGFw
dGVyIGFkYXB0ZXIpCit7CisgICAgV0dQVUFkYXB0ZXJQcm9wZXJ0aWVzIHByb3BlcnRpZXM7Cisg
ICAgd2dwdUFkYXB0ZXJHZXRQcm9wZXJ0aWVzKGFkYXB0ZXIsICZwcm9wZXJ0aWVzKTsKKyAgICBy
ZXR1cm4gcHJvcGVydGllcy5hZGFwdGVyVHlwZSA9PSBXR1BVQWRhcHRlclR5cGVfQ1BVOworfQor
CitBZGFwdGVySW1wbDo6QWRhcHRlckltcGwoV0dQVUFkYXB0ZXIgYWRhcHRlcikKKyAgICA6IEFk
YXB0ZXIoYWRhcHRlck5hbWUoYWRhcHRlciksIHN1cHBvcnRlZEZlYXR1cmVzKGFkYXB0ZXIpLCBz
dXBwb3J0ZWRMaW1pdHMoYWRhcHRlciksIFdlYkdQVTo6aXNGYWxsYmFja0FkYXB0ZXIoYWRhcHRl
cikpCisgICAgLCBtX2JhY2tpbmcoYWRhcHRlcikKK3sKK30KKworQWRhcHRlckltcGw6On5BZGFw
dGVySW1wbCgpCit7CisgICAgd2dwdUFkYXB0ZXJSZWxlYXNlKG1fYmFja2luZyk7IAorfQorCit2
b2lkIHJlcXVlc3REZXZpY2VDYWxsYmFjayhXR1BVUmVxdWVzdERldmljZVN0YXR1cyBzdGF0dXMs
IFdHUFVEZXZpY2UgZGV2aWNlLCBjb25zdCBjaGFyKiBtZXNzYWdlLCB2b2lkKiB1c2VyZGF0YSkK
K3sKKyAgICBhdXRvIGFkYXB0ZXIgPSBhZG9wdFJlZigqc3RhdGljX2Nhc3Q8QWRhcHRlckltcGwq
Pih1c2VyZGF0YSkpOworICAgIGFkYXB0ZXItPnJlcXVlc3REZXZpY2VDYWxsYmFjayhzdGF0dXMs
IGRldmljZSwgbWVzc2FnZSk7Cit9CisKK3ZvaWQgQWRhcHRlckltcGw6OnJlcXVlc3REZXZpY2Uo
Y29uc3QgRGV2aWNlRGVzY3JpcHRvciYgZGVzY3JpcHRvciwgc3RkOjpmdW5jdGlvbjx2b2lkKFJl
ZjxEZXZpY2U+KT4mJiBjYWxsYmFjaykKK3sKKyAgICBSZWYgcHJvdGVjdGVkVGhpcygqdGhpcyk7
CisKKyAgICBhdXRvIGxhYmVsID0gZGVzY3JpcHRvci5sYWJlbC51dGY4KCk7CisKKyAgICBXR1BV
RGV2aWNlRGVzY3JpcHRvckxhYmVsIGJhY2tpbmdEZXNjcmlwdG9yTGFiZWwgeworICAgICAgICB7
CisgICAgICAgICAgICBudWxscHRyLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V0dQVVNUeXBl
PihXR1BVU1R5cGVfRGV2aWNlRGVzY3JpcHRvckxhYmVsKSwKKyAgICAgICAgfSwKKyAgICAgICAg
bnVsbHB0ciwKKyAgICAgICAgbGFiZWwuZGF0YSgpCisgICAgfTsKKworICAgIFZlY3RvcjxXR1BV
RmVhdHVyZU5hbWU+IGZlYXR1cmVzOworICAgIGZlYXR1cmVzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoZGVzY3JpcHRvci5yZXF1aXJlZEZlYXR1cmVzLnNpemUoKSk7CisgICAgZm9yIChhdXRvIGZl
YXR1cmVOYW1lIDogZGVzY3JpcHRvci5yZXF1aXJlZEZlYXR1cmVzKQorICAgICAgICBmZWF0dXJl
cy51bmNoZWNrZWRBcHBlbmQoY29udmVydFRvQmFja2luZyhmZWF0dXJlTmFtZSkpOworCisgICAg
V0dQVVJlcXVpcmVkTGltaXRzIGxpbWl0cyB7CisgICAgICAgIG51bGxwdHIsIHsKKyAgICAgICAg
ICAgIDAsIC8vIG1heFRleHR1cmVEaW1lbnNpb24xRAorICAgICAgICAgICAgMCwgLy8gbWF4VGV4
dHVyZURpbWVuc2lvbjJECisgICAgICAgICAgICAwLCAvLyBtYXhUZXh0dXJlRGltZW5zaW9uM0QK
KyAgICAgICAgICAgIDAsIC8vIG1heFRleHR1cmVBcnJheUxheWVycworICAgICAgICAgICAgMCwg
Ly8gbWF4QmluZEdyb3VwcworICAgICAgICAgICAgMCwgLy8gbWF4RHluYW1pY1VuaWZvcm1CdWZm
ZXJzUGVyUGlwZWxpbmVMYXlvdXQKKyAgICAgICAgICAgIDAsIC8vIG1heER5bmFtaWNTdG9yYWdl
QnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0CisgICAgICAgICAgICAwLCAvLyBtYXhTYW1wbGVkVGV4
dHVyZXNQZXJTaGFkZXJTdGFnZQorICAgICAgICAgICAgMCwgLy8gbWF4U2FtcGxlcnNQZXJTaGFk
ZXJTdGFnZQorICAgICAgICAgICAgMCwgLy8gbWF4U3RvcmFnZUJ1ZmZlcnNQZXJTaGFkZXJTdGFn
ZQorICAgICAgICAgICAgMCwgLy8gbWF4U3RvcmFnZVRleHR1cmVzUGVyU2hhZGVyU3RhZ2UKKyAg
ICAgICAgICAgIDAsIC8vIG1heFVuaWZvcm1CdWZmZXJzUGVyU2hhZGVyU3RhZ2UKKyAgICAgICAg
ICAgIDAsIC8vIG1heFVuaWZvcm1CdWZmZXJCaW5kaW5nU2l6ZQorICAgICAgICAgICAgMCwgLy8g
bWF4U3RvcmFnZUJ1ZmZlckJpbmRpbmdTaXplCisgICAgICAgICAgICAwLCAvLyBtaW5Vbmlmb3Jt
QnVmZmVyT2Zmc2V0QWxpZ25tZW50CisgICAgICAgICAgICAwLCAvLyBtaW5TdG9yYWdlQnVmZmVy
T2Zmc2V0QWxpZ25tZW50CisgICAgICAgICAgICAwLCAvLyBtYXhWZXJ0ZXhCdWZmZXJzCisgICAg
ICAgICAgICAwLCAvLyBtYXhWZXJ0ZXhBdHRyaWJ1dGVzCisgICAgICAgICAgICAwLCAvLyBtYXhW
ZXJ0ZXhCdWZmZXJBcnJheVN0cmlkZQorICAgICAgICAgICAgMCwgLy8gbWF4SW50ZXJTdGFnZVNo
YWRlckNvbXBvbmVudHMKKyAgICAgICAgICAgIDAsIC8vIG1heENvbXB1dGVXb3JrZ3JvdXBTdG9y
YWdlU2l6ZQorICAgICAgICAgICAgMCwgLy8gbWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dy
b3VwCisgICAgICAgICAgICAwLCAvLyBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVgKKyAgICAgICAg
ICAgIDAsIC8vIG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWQorICAgICAgICAgICAgMCwgLy8gbWF4
Q29tcHV0ZVdvcmtncm91cFNpemVaCisgICAgICAgICAgICAwLCAvLyBtYXhDb21wdXRlV29ya2dy
b3Vwc1BlckRpbWVuc2lvbgorICAgICAgICB9LAorICAgIH07CisKKyAgICBXR1BVRGV2aWNlRGVz
Y3JpcHRvciBiYWNraW5nRGVzY3JpcHRvciB7CisgICAgICAgICZiYWNraW5nRGVzY3JpcHRvckxh
YmVsLmhlYWRlciwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGZlYXR1cmVzLnNpemUo
KSksCisgICAgICAgIGZlYXR1cmVzLmRhdGEoKSwKKyAgICAgICAgJmxpbWl0cywKKyAgICB9Owor
CisgICAgbV9jYWxsYmFja3MuYXBwZW5kKFdURk1vdmUoY2FsbGJhY2spKTsKKworICAgIHdncHVB
ZGFwdGVyUmVxdWVzdERldmljZShtX2JhY2tpbmcsICZiYWNraW5nRGVzY3JpcHRvciwgJldlYkdQ
VTo6cmVxdWVzdERldmljZUNhbGxiYWNrLCAmcHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpOyAvLyBs
ZWFrUmVmIGlzIGJhbGFuY2VkIGJ5IGFkb3B0UmVmIGluIHJlcXVlc3REZXZpY2VDYWxsYmFjaygp
IGFib3ZlLiBXZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSdyZSB1c2luZyBhIEMgQVBJIHdp
dGggbm8gY29uY2VwdCBvZiByZWZlcmVuY2UgY291bnRpbmcgb3IgYmxvY2tzLgorfQorCit2b2lk
IEFkYXB0ZXJJbXBsOjpyZXF1ZXN0RGV2aWNlQ2FsbGJhY2soV0dQVVJlcXVlc3REZXZpY2VTdGF0
dXMsIFdHUFVEZXZpY2UgZGV2aWNlLCBjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIFVOVVNF
RF9QQVJBTShtZXNzYWdlKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gbV9jYWxsYmFja3MudGFrZUZp
cnN0KCk7CisgICAgY2FsbGJhY2soRGV2aWNlSW1wbDo6Y3JlYXRlKGRldmljZSwgUmVmIHsgZmVh
dHVyZXMoKSB9LCBSZWYgeyBsaW1pdHMoKSB9KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBBTAor
fSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUFkYXB0ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUFkYXB0ZXJJbXBsLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYTY0ODlkNWRhYmE5NThjOGZmMGI4ZmFiODgyZDY3MGI0YjI2ZDZlMwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2Vi
R1BVQWRhcHRlckltcGwuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJXZWJHUFVBZGFwdGVyLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQ
VS5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFj
ZSBXZWJHUFUgeworCitjbGFzcyBBZGFwdGVySW1wbCBmaW5hbCA6IHB1YmxpYyBBZGFwdGVyIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEFkYXB0ZXJJbXBsPiBjcmVhdGUoV0dQVUFkYXB0ZXIg
YWRhcHRlcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFkYXB0ZXJJbXBs
KGFkYXB0ZXIpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5BZGFwdGVySW1wbCgpOworCisgICAg
V0dQVUFkYXB0ZXIgYmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2
YXRlOgorICAgIGZyaWVuZCB2b2lkIHJlcXVlc3REZXZpY2VDYWxsYmFjayhXR1BVUmVxdWVzdERl
dmljZVN0YXR1cywgV0dQVURldmljZSwgY29uc3QgY2hhciogbWVzc2FnZSwgdm9pZCogdXNlcmRh
dGEpOworCisgICAgQWRhcHRlckltcGwoV0dQVUFkYXB0ZXIpOworCisgICAgQWRhcHRlckltcGwo
Y29uc3QgQWRhcHRlckltcGwmKSA9IGRlbGV0ZTsKKyAgICBBZGFwdGVySW1wbChBZGFwdGVySW1w
bCYmKSA9IGRlbGV0ZTsKKyAgICBBZGFwdGVySW1wbCYgb3BlcmF0b3I9KGNvbnN0IEFkYXB0ZXJJ
bXBsJikgPSBkZWxldGU7CisgICAgQWRhcHRlckltcGwmIG9wZXJhdG9yPShBZGFwdGVySW1wbCYm
KSA9IGRlbGV0ZTsKKworICAgIHZvaWQgcmVxdWVzdERldmljZUNhbGxiYWNrKFdHUFVSZXF1ZXN0
RGV2aWNlU3RhdHVzLCBXR1BVRGV2aWNlLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsKKyAgICB2b2lk
IHJlcXVlc3REZXZpY2UoY29uc3QgRGV2aWNlRGVzY3JpcHRvciYsIHN0ZDo6ZnVuY3Rpb248dm9p
ZChSZWY8RGV2aWNlPik+JiYpIGZpbmFsOworCisgICAgV0dQVUFkYXB0ZXIgbV9iYWNraW5nIHsg
bnVsbHB0ciB9OworCisgICAgRGVxdWU8c3RkOjpmdW5jdGlvbjx2b2lkKFJlZjxEZXZpY2U+KT4+
IG1fY2FsbGJhY2tzOworfTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBX
ZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BV
L0ltcGwvV2ViR1BVQmluZEdyb3VwSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dy
YXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJpbmRHcm91cEltcGwuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFi
MGFkNjc1OThhN2FkMjE1OWE5NDg0NGYxNzRjMzAzNWNlYWZmYjQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJpbmRH
cm91cEltcGwuY3BwCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViR1BVQmluZEdyb3VwSW1wbC5oIgorCisjaW5jbHVkZSA8V2Vi
R1BVL1dlYkdQVUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgewor
CitCaW5kR3JvdXBJbXBsOjpCaW5kR3JvdXBJbXBsKFdHUFVCaW5kR3JvdXAgYmluZEdyb3VwKQor
ICAgIDogbV9iYWNraW5nKGJpbmRHcm91cCkKK3sKK30KKworQmluZEdyb3VwSW1wbDo6fkJpbmRH
cm91cEltcGwoKQoreworICAgIHdncHVCaW5kR3JvdXBSZWxlYXNlKG1fYmFja2luZyk7Cit9CisK
K3ZvaWQgQmluZEdyb3VwSW1wbDo6c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVs
KQoreworICAgIHdncHVCaW5kR3JvdXBTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVsLnV0ZjgoKS5k
YXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9X
ZWJHUFVCaW5kR3JvdXBJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dl
YkdQVS9JbXBsL1dlYkdQVUJpbmRHcm91cEltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMzViYmE5ZGI3MmQ2
NTE5NmJhNmVhNmEwNjJmMzcyM2UyZGIwYWY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVCaW5kR3JvdXBJbXBsLmgK
QEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
V2ViR1BVQmluZEdyb3VwLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorCituYW1lc3Bh
Y2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBCaW5kR3JvdXBJbXBsIGZpbmFs
IDogcHVibGljIEJpbmRHcm91cCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxCaW5kR3JvdXBJ
bXBsPiBjcmVhdGUoV0dQVUJpbmRHcm91cCBiaW5kR3JvdXApCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBCaW5kR3JvdXBJbXBsKGJpbmRHcm91cCkpOworICAgIH0KKworICAg
IHZpcnR1YWwgfkJpbmRHcm91cEltcGwoKTsKKworICAgIFdHUFVCaW5kR3JvdXAgYmFja2luZygp
IGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgorICAgIEJpbmRHcm91cElt
cGwoV0dQVUJpbmRHcm91cCk7CisKKyAgICBCaW5kR3JvdXBJbXBsKGNvbnN0IEJpbmRHcm91cElt
cGwmKSA9IGRlbGV0ZTsKKyAgICBCaW5kR3JvdXBJbXBsKEJpbmRHcm91cEltcGwmJikgPSBkZWxl
dGU7CisgICAgQmluZEdyb3VwSW1wbCYgb3BlcmF0b3I9KGNvbnN0IEJpbmRHcm91cEltcGwmKSA9
IGRlbGV0ZTsKKyAgICBCaW5kR3JvdXBJbXBsJiBvcGVyYXRvcj0oQmluZEdyb3VwSW1wbCYmKSA9
IGRlbGV0ZTsKKworICAgIHZvaWQgc2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5h
bDsKKworICAgIFdHUFVCaW5kR3JvdXAgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworfTsKKworfSAv
LyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQmluZEdyb3VwTGF5
b3V0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBs
L1dlYkdQVUJpbmRHcm91cExheW91dEltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2NGU3ZGI2NjAzNDRk
ZjhjNDZiMTM1OGFhNDBlOGQ4MTkxZjQwYTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJpbmRHcm91cExheW91dElt
cGwuY3BwCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViR1BVQmluZEdyb3VwTGF5b3V0SW1wbC5oIgorCisjaW5jbHVkZSA8V2Vi
R1BVL1dlYkdQVUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgewor
CitCaW5kR3JvdXBMYXlvdXRJbXBsOjpCaW5kR3JvdXBMYXlvdXRJbXBsKFdHUFVCaW5kR3JvdXBM
YXlvdXQgYmluZEdyb3VwTGF5b3V0KQorICAgIDogbV9iYWNraW5nKGJpbmRHcm91cExheW91dCkK
K3sKK30KKworQmluZEdyb3VwTGF5b3V0SW1wbDo6fkJpbmRHcm91cExheW91dEltcGwoKQorewor
ICAgIHdncHVCaW5kR3JvdXBMYXlvdXRSZWxlYXNlKG1fYmFja2luZyk7Cit9CisKK3ZvaWQgQmlu
ZEdyb3VwTGF5b3V0SW1wbDo6c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQor
eworICAgIHdncHVCaW5kR3JvdXBMYXlvdXRTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVsLnV0Zjgo
KS5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQ
VQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1w
bC9XZWJHUFVCaW5kR3JvdXBMYXlvdXRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dy
YXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJpbmRHcm91cExheW91dEltcGwuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45OWI2NGI5ZDMxN2YwNWVlZDAyNmYwMzc4MTMzMzJhYTg1NjA4YTI0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVC
aW5kR3JvdXBMYXlvdXRJbXBsLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVQmluZEdyb3VwTGF5b3V0LmgiCisjaW5jbHVkZSA8
V2ViR1BVL1dlYkdQVS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgewor
CitjbGFzcyBCaW5kR3JvdXBMYXlvdXRJbXBsIGZpbmFsIDogcHVibGljIEJpbmRHcm91cExheW91
dCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxCaW5kR3JvdXBMYXlvdXRJbXBsPiBjcmVhdGUo
V0dQVUJpbmRHcm91cExheW91dCBiaW5kR3JvdXBMYXlvdXQpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBCaW5kR3JvdXBMYXlvdXRJbXBsKGJpbmRHcm91cExheW91dCkpOwor
ICAgIH0KKworICAgIHZpcnR1YWwgfkJpbmRHcm91cExheW91dEltcGwoKTsKKworICAgIFdHUFVC
aW5kR3JvdXBMYXlvdXQgYmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitw
cml2YXRlOgorICAgIEJpbmRHcm91cExheW91dEltcGwoV0dQVUJpbmRHcm91cExheW91dCk7CisK
KyAgICBCaW5kR3JvdXBMYXlvdXRJbXBsKGNvbnN0IEJpbmRHcm91cExheW91dEltcGwmKSA9IGRl
bGV0ZTsKKyAgICBCaW5kR3JvdXBMYXlvdXRJbXBsKEJpbmRHcm91cExheW91dEltcGwmJikgPSBk
ZWxldGU7CisgICAgQmluZEdyb3VwTGF5b3V0SW1wbCYgb3BlcmF0b3I9KGNvbnN0IEJpbmRHcm91
cExheW91dEltcGwmKSA9IGRlbGV0ZTsKKyAgICBCaW5kR3JvdXBMYXlvdXRJbXBsJiBvcGVyYXRv
cj0oQmluZEdyb3VwTGF5b3V0SW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIHZvaWQgc2V0TGFiZWxJ
bnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5hbDsKKworICAgIFdHUFVCaW5kR3JvdXBMYXlvdXQg
bV9iYWNraW5nIHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5h
bWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhp
Y3MvV2ViR1BVL0ltcGwvV2ViR1BVQnVmZmVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJ1ZmZlckltcGwuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmVmOWEwZTdlNzdiNWFjZjUxYTRjYzUwMTNjZjMxYmM4NWM4MzM5NDAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJ1
ZmZlckltcGwuY3BwCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViR1BVQnVmZmVySW1wbC5oIgorCisjaW5jbHVkZSA8V2ViR1BV
L1dlYkdQVUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitC
dWZmZXJJbXBsOjpCdWZmZXJJbXBsKFdHUFVCdWZmZXIgYnVmZmVyKQorICAgIDogbV9iYWNraW5n
KGJ1ZmZlcikKK3sKK30KKworQnVmZmVySW1wbDo6fkJ1ZmZlckltcGwoKQoreworICAgIHdncHVC
dWZmZXJSZWxlYXNlKG1fYmFja2luZyk7Cit9CisKK3ZvaWQgbWFwQ2FsbGJhY2soV0dQVUJ1ZmZl
ck1hcEFzeW5jU3RhdHVzIHN0YXR1cywgdm9pZCogdXNlcmRhdGEpCit7CisgICAgYXV0byBidWZm
ZXIgPSBhZG9wdFJlZigqc3RhdGljX2Nhc3Q8QnVmZmVySW1wbCo+KHVzZXJkYXRhKSk7CisgICAg
YnVmZmVyLT5tYXBDYWxsYmFjayhzdGF0dXMpOworfQorCit2b2lkIEJ1ZmZlckltcGw6Om1hcEFz
eW5jKE1hcE1vZGVGbGFncyBtYXBNb2RlRmxhZ3MsIHN0ZDo6b3B0aW9uYWw8U2l6ZTY0PiBvZmZz
ZXQsIHN0ZDo6b3B0aW9uYWw8U2l6ZTY0PiBzaXplLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4mJiBj
YWxsYmFjaykKK3sKKyAgICBSZWYgcHJvdGVjdGVkVGhpcygqdGhpcyk7CisKKyAgICBXR1BVTWFw
TW9kZUZsYWdzIGJhY2tpbmdNYXBNb2RlRmxhZ3MgPSAwOworICAgIGlmIChtYXBNb2RlRmxhZ3Mg
JiBNYXBNb2RlOjpSRUFEKQorICAgICAgICBiYWNraW5nTWFwTW9kZUZsYWdzIHw9IFdHUFVNYXBN
b2RlX1JlYWQ7CisgICAgaWYgKG1hcE1vZGVGbGFncyAmIE1hcE1vZGU6OldSSVRFKQorICAgICAg
ICBiYWNraW5nTWFwTW9kZUZsYWdzIHw9IFdHUFVNYXBNb2RlX1dyaXRlOworCisgICAgYXV0byB1
c2VkT2Zmc2V0ID0gb2Zmc2V0LnZhbHVlX29yKDApOworICAgIGF1dG8gdXNlZFNpemUgPSBzaXpl
LnZhbHVlX29yKFdHUFVfV0hPTEVfU0laRSk7CisKKyAgICBtX2NhbGxiYWNrcy5hcHBlbmQoV1RG
TW92ZShjYWxsYmFjaykpOworCisgICAgd2dwdUJ1ZmZlck1hcEFzeW5jKG1fYmFja2luZywgYmFj
a2luZ01hcE1vZGVGbGFncywgdXNlZE9mZnNldCwgdXNlZFNpemUsICZXZWJHUFU6Om1hcENhbGxi
YWNrLCAmcHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpOyAvLyBsZWFrUmVmIGlzIGJhbGFuY2VkIGJ5
IGFkb3B0UmVmIGluIG1hcENhbGxiYWNrKCkgYWJvdmUuIFdlIGhhdmUgdG8gZG8gdGhpcyBiZWNh
dXNlIHdlJ3JlIHVzaW5nIGEgQyBBUEkgd2l0aCBubyBjb25jZXB0IG9mIHJlZmVyZW5jZSBjb3Vu
dGluZyBvciBibG9ja3MuCit9CisKK3ZvaWQgQnVmZmVySW1wbDo6bWFwQ2FsbGJhY2soV0dQVUJ1
ZmZlck1hcEFzeW5jU3RhdHVzIHN0YXR1cykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdHVzKTsK
KyAgICBhdXRvIGNhbGxiYWNrID0gbV9jYWxsYmFja3MudGFrZUZpcnN0KCk7CisgICAgY2FsbGJh
Y2soKTsKK30KKworYXV0byBCdWZmZXJJbXBsOjpnZXRNYXBwZWRSYW5nZShzdGQ6Om9wdGlvbmFs
PFNpemU2ND4gb2Zmc2V0LCBzdGQ6Om9wdGlvbmFsPFNpemU2ND4gc2l6ZSkgLT4gTWFwcGVkUmFu
Z2UKK3sKKyAgICBhdXRvIHVzZWRPZmZzZXQgPSBvZmZzZXQudmFsdWVfb3IoMCk7CisgICAgYXV0
byB1c2VkU2l6ZSA9IHNpemUudmFsdWVfb3IoV0dQVV9XSE9MRV9TSVpFKTsKKyAgICBhdXRvKiBw
b2ludGVyID0gd2dwdUJ1ZmZlckdldE1hcHBlZFJhbmdlKG1fYmFja2luZywgdXNlZE9mZnNldCwg
dXNlZFNpemUpOworICAgIHJldHVybiB7IHBvaW50ZXIsIHVzZWRTaXplIH07Cit9CisKK3ZvaWQg
QnVmZmVySW1wbDo6dW5tYXAoKQoreworICAgIHdncHVCdWZmZXJVbm1hcChtX2JhY2tpbmcpOwor
fQorCit2b2lkIEJ1ZmZlckltcGw6OmRlc3Ryb3koKQoreworICAgIHdncHVCdWZmZXJEZXN0cm95
KG1fYmFja2luZyk7Cit9CisKK3ZvaWQgQnVmZmVySW1wbDo6c2V0TGFiZWxJbnRlcm5hbChjb25z
dCBTdHJpbmcmIGxhYmVsKQoreworICAgIHdncHVCdWZmZXJTZXRMYWJlbChtX2JhY2tpbmcsIGxh
YmVsLnV0ZjgoKS5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNw
YWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9X
ZWJHUFUvSW1wbC9XZWJHUFVCdWZmZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dy
YXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJ1ZmZlckltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mM2Y3NWE4
NjIwNzNkMDA2NjVlODhiOGU3NzQ5N2VlYzg5ZTM5ZWM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVCdWZmZXJJbXBs
LmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiV2ViR1BVQnVmZmVyLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorI2luY2x1ZGUg
PHd0Zi9EZXF1ZS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitj
bGFzcyBCdWZmZXJJbXBsIGZpbmFsIDogcHVibGljIEJ1ZmZlciB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZjxCdWZmZXJJbXBsPiBjcmVhdGUoV0dQVUJ1ZmZlciBidWZmZXIpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBCdWZmZXJJbXBsKGJ1ZmZlcikpOworICAgIH0KKwor
ICAgIHZpcnR1YWwgfkJ1ZmZlckltcGwoKTsKKworICAgIFdHUFVCdWZmZXIgYmFja2luZygpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCB2b2lkIG1h
cENhbGxiYWNrKFdHUFVCdWZmZXJNYXBBc3luY1N0YXR1cywgdm9pZCogdXNlcmRhdGEpOworCisg
ICAgQnVmZmVySW1wbChXR1BVQnVmZmVyKTsKKworICAgIEJ1ZmZlckltcGwoY29uc3QgQnVmZmVy
SW1wbCYpID0gZGVsZXRlOworICAgIEJ1ZmZlckltcGwoQnVmZmVySW1wbCYmKSA9IGRlbGV0ZTsK
KyAgICBCdWZmZXJJbXBsJiBvcGVyYXRvcj0oY29uc3QgQnVmZmVySW1wbCYpID0gZGVsZXRlOwor
ICAgIEJ1ZmZlckltcGwmIG9wZXJhdG9yPShCdWZmZXJJbXBsJiYpID0gZGVsZXRlOworCisgICAg
dm9pZCBtYXBDYWxsYmFjayhXR1BVQnVmZmVyTWFwQXN5bmNTdGF0dXMpOworICAgIHZvaWQgbWFw
QXN5bmMoTWFwTW9kZUZsYWdzLCBzdGQ6Om9wdGlvbmFsPFNpemU2ND4gb2Zmc2V0LCBzdGQ6Om9w
dGlvbmFsPFNpemU2ND4gc2l6ZUZvck1hcCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+JiYpIGZpbmFs
OworICAgIE1hcHBlZFJhbmdlIGdldE1hcHBlZFJhbmdlKHN0ZDo6b3B0aW9uYWw8U2l6ZTY0PiBv
ZmZzZXQsIHN0ZDo6b3B0aW9uYWw8U2l6ZTY0PikgZmluYWw7CisgICAgdm9pZCB1bm1hcCgpIGZp
bmFsOworCisgICAgdm9pZCBkZXN0cm95KCkgZmluYWw7CisKKyAgICB2b2lkIHNldExhYmVsSW50
ZXJuYWwoY29uc3QgU3RyaW5nJikgZmluYWw7CisKKyAgICBXR1BVQnVmZmVyIG1fYmFja2luZyB7
IG51bGxwdHIgfTsKKworICAgIERlcXVlPHN0ZDo6ZnVuY3Rpb248dm9pZCgpPj4gbV9jYWxsYmFj
a3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJH
UFVDb21tYW5kQnVmZmVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNz
L1dlYkdQVS9JbXBsL1dlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNTY1
OWZjNjdhN2I2ZDQ0N2Y1MWVhZDBhZWJlOTU5YTNlYWQxNTcyCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb21tYW5k
QnVmZmVySW1wbC5jcHAKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVDb21tYW5kQnVmZmVySW1wbC5oIgorCisjaW5jbHVk
ZSA8V2ViR1BVL1dlYkdQVUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJH
UFUgeworCitDb21tYW5kQnVmZmVySW1wbDo6Q29tbWFuZEJ1ZmZlckltcGwoV0dQVUNvbW1hbmRC
dWZmZXIgY29tbWFuZEJ1ZmZlcikKKyAgICA6IG1fYmFja2luZyhjb21tYW5kQnVmZmVyKQorewor
fQorCitDb21tYW5kQnVmZmVySW1wbDo6fkNvbW1hbmRCdWZmZXJJbXBsKCkKK3sKKyAgICB3Z3B1
Q29tbWFuZEJ1ZmZlclJlbGVhc2UobV9iYWNraW5nKTsKK30KKwordm9pZCBDb21tYW5kQnVmZmVy
SW1wbDo6c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAgIHdncHVD
b21tYW5kQnVmZmVyU2V0TGFiZWwobV9iYWNraW5nLCBsYWJlbC51dGY4KCkuZGF0YSgpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tbWFu
ZEJ1ZmZlckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0lt
cGwvV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YTJkN2U4ODRjZGYxY2Yx
NTk3MGM5M2EwYjZiNjg0NjMwNWU5Yjk2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb21tYW5kQnVmZmVySW1wbC5o
CkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IldlYkdQVUNvbW1hbmRCdWZmZXIuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVLmg+CisKK25h
bWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK2NsYXNzIENvbW1hbmRCdWZmZXJJ
bXBsIGZpbmFsIDogcHVibGljIENvbW1hbmRCdWZmZXIgeworcHVibGljOgorICAgIHN0YXRpYyBS
ZWY8Q29tbWFuZEJ1ZmZlckltcGw+IGNyZWF0ZShXR1BVQ29tbWFuZEJ1ZmZlciBjb21tYW5kQnVm
ZmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29tbWFuZEJ1ZmZlcklt
cGwoY29tbWFuZEJ1ZmZlcikpOworICAgIH0KKworICAgIHZpcnR1YWwgfkNvbW1hbmRCdWZmZXJJ
bXBsKCk7CisKKyAgICBXR1BVQ29tbWFuZEJ1ZmZlciBiYWNraW5nKCkgY29uc3QgeyByZXR1cm4g
bV9iYWNraW5nOyB9CisKK3ByaXZhdGU6CisgICAgQ29tbWFuZEJ1ZmZlckltcGwoV0dQVUNvbW1h
bmRCdWZmZXIpOworCisgICAgQ29tbWFuZEJ1ZmZlckltcGwoY29uc3QgQ29tbWFuZEJ1ZmZlcklt
cGwmKSA9IGRlbGV0ZTsKKyAgICBDb21tYW5kQnVmZmVySW1wbChDb21tYW5kQnVmZmVySW1wbCYm
KSA9IGRlbGV0ZTsKKyAgICBDb21tYW5kQnVmZmVySW1wbCYgb3BlcmF0b3I9KGNvbnN0IENvbW1h
bmRCdWZmZXJJbXBsJikgPSBkZWxldGU7CisgICAgQ29tbWFuZEJ1ZmZlckltcGwmIG9wZXJhdG9y
PShDb21tYW5kQnVmZmVySW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIHZvaWQgc2V0TGFiZWxJbnRl
cm5hbChjb25zdCBTdHJpbmcmKSBmaW5hbDsKKworICAgIFdHUFVDb21tYW5kQnVmZmVyIG1fYmFj
a2luZyB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3Bh
Y2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dl
YkdQVS9JbXBsL1dlYkdQVUNvbW1hbmRFbmNvZGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Q
QUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbW1hbmRFbmNvZGVySW1wbC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNjIyMzI2NGZjNTcyODhkNWZkOTViZjUzNjUzNTJhNzFhY2VlOTgwNAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0lt
cGwvV2ViR1BVQ29tbWFuZEVuY29kZXJJbXBsLmNwcApAQCAtMCwwICsxLDI3OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVDb21tYW5kRW5jb2Rl
ckltcGwuaCIKKworI2luY2x1ZGUgIldlYkdQVUJ1ZmZlckltcGwuaCIKKyNpbmNsdWRlICJXZWJH
UFVDb21tYW5kQnVmZmVySW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVUNvbXB1dGVQYXNzRW5jb2Rl
ckltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVDb252ZXJ0VG9CYWNraW5nLmgiCisjaW5jbHVkZSAi
V2ViR1BVUXVlcnlTZXRJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVUmVuZGVyUGFzc0VuY29kZXJJ
bXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVVGV4dHVyZUltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVU
ZXh0dXJlVmlld0ltcGwuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVRXh0Lmg+CisKK25hbWVz
cGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK0NvbW1hbmRFbmNvZGVySW1wbDo6Q29t
bWFuZEVuY29kZXJJbXBsKFdHUFVDb21tYW5kRW5jb2RlciBDb21tYW5kRW5jb2RlcikKKyAgICA6
IG1fYmFja2luZyhDb21tYW5kRW5jb2RlcikKK3sKK30KKworQ29tbWFuZEVuY29kZXJJbXBsOjp+
Q29tbWFuZEVuY29kZXJJbXBsKCkKK3sKKyAgICB3Z3B1Q29tbWFuZEVuY29kZXJSZWxlYXNlKG1f
YmFja2luZyk7Cit9CisKK1JlZjxSZW5kZXJQYXNzRW5jb2Rlcj4gQ29tbWFuZEVuY29kZXJJbXBs
OjpiZWdpblJlbmRlclBhc3MoY29uc3QgUmVuZGVyUGFzc0Rlc2NyaXB0b3ImIGRlc2NyaXB0b3Ip
Cit7CisgICAgVmVjdG9yPFdHUFVSZW5kZXJQYXNzQ29sb3JBdHRhY2htZW50PiBjb2xvckF0dGFj
aG1lbnRzOworICAgIGZvciAoY29uc3QgYXV0byYgY29sb3JBdHRhY2htZW50IDogZGVzY3JpcHRv
ci5jb2xvckF0dGFjaG1lbnRzKSB7CisgICAgICAgIGNvbG9yQXR0YWNobWVudHMuYXBwZW5kKFdH
UFVSZW5kZXJQYXNzQ29sb3JBdHRhY2htZW50IHsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGNv
bnN0IFRleHR1cmVWaWV3SW1wbCY+KGNvbG9yQXR0YWNobWVudC52aWV3KS5iYWNraW5nKCksCisg
ICAgICAgICAgICBjb2xvckF0dGFjaG1lbnQucmVzb2x2ZVRhcmdldCA/IHN0YXRpY19jYXN0PGNv
bnN0IFRleHR1cmVWaWV3SW1wbCY+KCpjb2xvckF0dGFjaG1lbnQucmVzb2x2ZVRhcmdldCkuYmFj
a2luZygpIDogbnVsbHB0ciwKKyAgICAgICAgICAgIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8TG9h
ZE9wPihjb2xvckF0dGFjaG1lbnQubG9hZFZhbHVlKSA/IGNvbnZlcnRUb0JhY2tpbmcoc3RkOjpn
ZXQ8TG9hZE9wPihjb2xvckF0dGFjaG1lbnQubG9hZFZhbHVlKSkgOiBXR1BVTG9hZE9wX0NsZWFy
LAorICAgICAgICAgICAgY29udmVydFRvQmFja2luZyhjb2xvckF0dGFjaG1lbnQuc3RvcmVPcCks
CisgICAgICAgICAgICBXVEY6OnN3aXRjaE9uKGNvbG9yQXR0YWNobWVudC5sb2FkVmFsdWUsIFtd
IChMb2FkT3ApIC0+IFdHUFVDb2xvciB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgMCwgMCwg
MCwgMCB9OworICAgICAgICAgICAgfSwgW10gKGNvbnN0IFZlY3Rvcjxkb3VibGU+JiB2ZWN0b3Ip
IC0+IFdHUFVDb2xvciB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdHUFVDb2xvciB7CisgICAg
ICAgICAgICAgICAgICAgIHZlY3Rvci5zaXplKCkgPiAwID8gdmVjdG9yWzBdIDogMCwKKyAgICAg
ICAgICAgICAgICAgICAgdmVjdG9yLnNpemUoKSA+IDEgPyB2ZWN0b3JbMV0gOiAwLAorICAgICAg
ICAgICAgICAgICAgICB2ZWN0b3Iuc2l6ZSgpID4gMiA/IHZlY3RvclsyXSA6IDAsCisgICAgICAg
ICAgICAgICAgICAgIHZlY3Rvci5zaXplKCkgPiAzID8gdmVjdG9yWzNdIDogMCwKKyAgICAgICAg
ICAgICAgICB9OworICAgICAgICAgICAgfSwgW10gKGNvbnN0IENvbG9yRGljdCYgY29sb3IpIC0+
IFdHUFVDb2xvciB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdHUFVDb2xvciB7CisgICAgICAg
ICAgICAgICAgICAgIGNvbG9yLnIsCisgICAgICAgICAgICAgICAgICAgIGNvbG9yLmcsCisgICAg
ICAgICAgICAgICAgICAgIGNvbG9yLmIsCisgICAgICAgICAgICAgICAgICAgIGNvbG9yLmEsCisg
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0pLAorICAgICAgICB9KTsKKyAgICB9CisK
KyAgICBzdGQ6Om9wdGlvbmFsPFdHUFVSZW5kZXJQYXNzRGVwdGhTdGVuY2lsQXR0YWNobWVudD4g
ZGVwdGhTdGVuY2lsQXR0YWNobWVudDsKKyAgICBpZiAoZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWxB
dHRhY2htZW50KSB7CisgICAgICAgIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBXR1BVUmVuZGVy
UGFzc0RlcHRoU3RlbmNpbEF0dGFjaG1lbnQgeworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29u
c3QgVGV4dHVyZVZpZXdJbXBsJj4oZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWxBdHRhY2htZW50LT52
aWV3KS5iYWNraW5nKCksCisgICAgICAgICAgICBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPExvYWRP
cD4oZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWxBdHRhY2htZW50LT5kZXB0aExvYWRWYWx1ZSkgPyBj
b252ZXJ0VG9CYWNraW5nKHN0ZDo6Z2V0PExvYWRPcD4oZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWxB
dHRhY2htZW50LT5kZXB0aExvYWRWYWx1ZSkpIDogV0dQVUxvYWRPcF9DbGVhciwKKyAgICAgICAg
ICAgIGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWxBdHRhY2htZW50LT5k
ZXB0aFN0b3JlT3ApLAorICAgICAgICAgICAgV1RGOjpzd2l0Y2hPbihkZXNjcmlwdG9yLmRlcHRo
U3RlbmNpbEF0dGFjaG1lbnQtPmRlcHRoTG9hZFZhbHVlLCBbXSAoTG9hZE9wKSAtPiBmbG9hdCB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9LCBbXSAoZmxvYXQgY2xl
YXJEZXB0aCkgLT4gZmxvYXQgeworICAgICAgICAgICAgICAgIHJldHVybiBjbGVhckRlcHRoOwor
ICAgICAgICAgICAgfSksCisgICAgICAgICAgICBkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbEF0dGFj
aG1lbnQtPmRlcHRoUmVhZE9ubHksCisgICAgICAgICAgICBzdGQ6OmhvbGRzX2FsdGVybmF0aXZl
PExvYWRPcD4oZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWxBdHRhY2htZW50LT5zdGVuY2lsTG9hZFZh
bHVlKSA/IGNvbnZlcnRUb0JhY2tpbmcoc3RkOjpnZXQ8TG9hZE9wPihkZXNjcmlwdG9yLmRlcHRo
U3RlbmNpbEF0dGFjaG1lbnQtPnN0ZW5jaWxMb2FkVmFsdWUpKSA6IFdHUFVMb2FkT3BfQ2xlYXIs
CisgICAgICAgICAgICBjb252ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsQXR0
YWNobWVudC0+c3RlbmNpbFN0b3JlT3ApLAorICAgICAgICAgICAgV1RGOjpzd2l0Y2hPbihkZXNj
cmlwdG9yLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQtPnN0ZW5jaWxMb2FkVmFsdWUsIFtdIChMb2Fk
T3ApIC0+IHVpbnQzMl90IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
IH0sIFtdIChTdGVuY2lsVmFsdWUgY2xlYXJTdGVuY2lsKSAtPiB1aW50MzJfdCB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGNsZWFyU3RlbmNpbDsKKyAgICAgICAgICAgIH0pLAorICAgICAgICAg
ICAgZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWxBdHRhY2htZW50LT5zdGVuY2lsUmVhZE9ubHksCisg
ICAgICAgIH07CisgICAgfQorCisgICAgYXV0byBsYWJlbCA9IGRlc2NyaXB0b3IubGFiZWwudXRm
OCgpOworCisgICAgV0dQVVJlbmRlclBhc3NEZXNjcmlwdG9yIGJhY2tpbmdEZXNjcmlwdG9yIHsK
KyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgbGFiZWwuZGF0YSgpLAorICAgICAgICBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oY29sb3JBdHRhY2htZW50cy5zaXplKCkpLAorICAgICAgICBjb2xvckF0
dGFjaG1lbnRzLmRhdGEoKSwKKyAgICAgICAgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA/ICZkZXB0
aFN0ZW5jaWxBdHRhY2htZW50LnZhbHVlKCkgOiBudWxscHRyLAorICAgICAgICBkZXNjcmlwdG9y
Lm9jY2x1c2lvblF1ZXJ5U2V0ID8gc3RhdGljX2Nhc3Q8Y29uc3QgUXVlcnlTZXRJbXBsJj4oKmRl
c2NyaXB0b3Iub2NjbHVzaW9uUXVlcnlTZXQpLmJhY2tpbmcoKSA6IG51bGxwdHIsCisgICAgfTsK
KworICAgIHJldHVybiBSZW5kZXJQYXNzRW5jb2RlckltcGw6OmNyZWF0ZSh3Z3B1Q29tbWFuZEVu
Y29kZXJCZWdpblJlbmRlclBhc3MobV9iYWNraW5nLCAmYmFja2luZ0Rlc2NyaXB0b3IpKTsKK30K
KworUmVmPENvbXB1dGVQYXNzRW5jb2Rlcj4gQ29tbWFuZEVuY29kZXJJbXBsOjpiZWdpbkNvbXB1
dGVQYXNzKGNvbnN0IHN0ZDo6b3B0aW9uYWw8Q29tcHV0ZVBhc3NEZXNjcmlwdG9yPiYgZGVzY3Jp
cHRvcikKK3sKKyAgICBDU3RyaW5nIGxhYmVsID0gZGVzY3JpcHRvciA/IGRlc2NyaXB0b3ItPmxh
YmVsLnV0ZjgoKSA6IENTdHJpbmcoIiIpOworCisgICAgV0dQVUNvbXB1dGVQYXNzRGVzY3JpcHRv
ciBiYWNraW5nRGVzY3JpcHRvciB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIGxhYmVsLmRh
dGEoKSwKKyAgICB9OworCisgICAgcmV0dXJuIENvbXB1dGVQYXNzRW5jb2RlckltcGw6OmNyZWF0
ZSh3Z3B1Q29tbWFuZEVuY29kZXJCZWdpbkNvbXB1dGVQYXNzKG1fYmFja2luZywgJmJhY2tpbmdE
ZXNjcmlwdG9yKSk7Cit9CisKK3ZvaWQgQ29tbWFuZEVuY29kZXJJbXBsOjpjb3B5QnVmZmVyVG9C
dWZmZXIoCisgICAgY29uc3QgQnVmZmVyJiBzb3VyY2UsCisgICAgU2l6ZTY0IHNvdXJjZU9mZnNl
dCwKKyAgICBjb25zdCBCdWZmZXImIGRlc3RpbmF0aW9uLAorICAgIFNpemU2NCBkZXN0aW5hdGlv
bk9mZnNldCwKKyAgICBTaXplNjQgc2l6ZSkKK3sKKyAgICB3Z3B1Q29tbWFuZEVuY29kZXJDb3B5
QnVmZmVyVG9CdWZmZXIobV9iYWNraW5nLCBzdGF0aWNfY2FzdDxjb25zdCBCdWZmZXJJbXBsJj4o
c291cmNlKS5iYWNraW5nKCksIHNvdXJjZU9mZnNldCwgc3RhdGljX2Nhc3Q8Y29uc3QgQnVmZmVy
SW1wbCY+KGRlc3RpbmF0aW9uKS5iYWNraW5nKCksIGRlc3RpbmF0aW9uT2Zmc2V0LCBzaXplKTsK
K30KKwordm9pZCBDb21tYW5kRW5jb2RlckltcGw6OmNvcHlCdWZmZXJUb1RleHR1cmUoCisgICAg
Y29uc3QgSW1hZ2VDb3B5QnVmZmVyJiBzb3VyY2UsCisgICAgY29uc3QgSW1hZ2VDb3B5VGV4dHVy
ZSYgZGVzdGluYXRpb24sCisgICAgY29uc3QgRXh0ZW50M0QmIGNvcHlTaXplKQoreworICAgIFdH
UFVJbWFnZUNvcHlCdWZmZXIgYmFja2luZ1NvdXJjZSB7CisgICAgICAgIG51bGxwdHIsIHsKKyAg
ICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICBzb3VyY2Uub2Zmc2V0LAorICAgICAgICAg
ICAgc291cmNlLmJ5dGVzUGVyUm93LnZhbHVlX29yKDApLAorICAgICAgICAgICAgc291cmNlLnJv
d3NQZXJJbWFnZS52YWx1ZV9vcigwKSwKKyAgICAgICAgfSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8
Y29uc3QgQnVmZmVySW1wbCY+KHNvdXJjZS5idWZmZXIpLmJhY2tpbmcoKSwKKyAgICB9OworCisg
ICAgV0dQVUltYWdlQ29weVRleHR1cmUgYmFja2luZ0Rlc3RpbmF0aW9uIHsKKyAgICAgICAgbnVs
bHB0ciwKKyAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgVGV4dHVyZUltcGwmPihkZXN0aW5hdGlv
bi50ZXh0dXJlKS5iYWNraW5nKCksCisgICAgICAgIGRlc3RpbmF0aW9uLm1pcExldmVsLAorICAg
ICAgICBkZXN0aW5hdGlvbi5vcmlnaW4gPyBjb252ZXJ0VG9CYWNraW5nKCpkZXN0aW5hdGlvbi5v
cmlnaW4pIDogV0dQVU9yaWdpbjNEIHsgMCwgMCwgMCB9LAorICAgICAgICBjb252ZXJ0VG9CYWNr
aW5nKGRlc3RpbmF0aW9uLmFzcGVjdCksCisgICAgfTsKKworICAgIFdHUFVFeHRlbnQzRCBiYWNr
aW5nQ29weVNpemUgPSBjb252ZXJ0VG9CYWNraW5nKGNvcHlTaXplKTsKKworICAgIHdncHVDb21t
YW5kRW5jb2RlckNvcHlCdWZmZXJUb1RleHR1cmUobV9iYWNraW5nLCAmYmFja2luZ1NvdXJjZSwg
JmJhY2tpbmdEZXN0aW5hdGlvbiwgJmJhY2tpbmdDb3B5U2l6ZSk7Cit9CisKK3ZvaWQgQ29tbWFu
ZEVuY29kZXJJbXBsOjpjb3B5VGV4dHVyZVRvQnVmZmVyKAorICAgIGNvbnN0IEltYWdlQ29weVRl
eHR1cmUmIHNvdXJjZSwKKyAgICBjb25zdCBJbWFnZUNvcHlCdWZmZXImIGRlc3RpbmF0aW9uLAor
ICAgIGNvbnN0IEV4dGVudDNEJiBjb3B5U2l6ZSkKK3sKKyAgICBXR1BVSW1hZ2VDb3B5VGV4dHVy
ZSBiYWNraW5nU291cmNlIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgc3RhdGljX2Nhc3Q8
Y29uc3QgVGV4dHVyZUltcGwmPihzb3VyY2UudGV4dHVyZSkuYmFja2luZygpLAorICAgICAgICBz
b3VyY2UubWlwTGV2ZWwsCisgICAgICAgIHNvdXJjZS5vcmlnaW4gPyBjb252ZXJ0VG9CYWNraW5n
KCpzb3VyY2Uub3JpZ2luKSA6IFdHUFVPcmlnaW4zRCB7IDAsIDAsIDAgfSwKKyAgICAgICAgY29u
dmVydFRvQmFja2luZyhzb3VyY2UuYXNwZWN0KSwKKyAgICB9OworCisgICAgV0dQVUltYWdlQ29w
eUJ1ZmZlciBiYWNraW5nRGVzdGluYXRpb24geworICAgICAgICBudWxscHRyLCB7CisgICAgICAg
ICAgICBudWxscHRyLAorICAgICAgICAgICAgZGVzdGluYXRpb24ub2Zmc2V0LAorICAgICAgICAg
ICAgZGVzdGluYXRpb24uYnl0ZXNQZXJSb3cudmFsdWVfb3IoMCksCisgICAgICAgICAgICBkZXN0
aW5hdGlvbi5yb3dzUGVySW1hZ2UudmFsdWVfb3IoMCksCisgICAgICAgIH0sCisgICAgICAgIHN0
YXRpY19jYXN0PGNvbnN0IEJ1ZmZlckltcGwmPihkZXN0aW5hdGlvbi5idWZmZXIpLmJhY2tpbmco
KSwKKyAgICB9OworCisgICAgV0dQVUV4dGVudDNEIGJhY2tpbmdDb3B5U2l6ZSA9IGNvbnZlcnRU
b0JhY2tpbmcoY29weVNpemUpOworCisgICAgd2dwdUNvbW1hbmRFbmNvZGVyQ29weVRleHR1cmVU
b0J1ZmZlcihtX2JhY2tpbmcsICZiYWNraW5nU291cmNlLCAmYmFja2luZ0Rlc3RpbmF0aW9uLCAm
YmFja2luZ0NvcHlTaXplKTsKK30KKwordm9pZCBDb21tYW5kRW5jb2RlckltcGw6OmNvcHlUZXh0
dXJlVG9UZXh0dXJlKAorICAgIGNvbnN0IEltYWdlQ29weVRleHR1cmUmIHNvdXJjZSwKKyAgICBj
b25zdCBJbWFnZUNvcHlUZXh0dXJlJiBkZXN0aW5hdGlvbiwKKyAgICBjb25zdCBFeHRlbnQzRCYg
Y29weVNpemUpCit7CisgICAgV0dQVUltYWdlQ29weVRleHR1cmUgYmFja2luZ1NvdXJjZSB7Cisg
ICAgICAgIG51bGxwdHIsCisgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IFRleHR1cmVJbXBsJj4o
c291cmNlLnRleHR1cmUpLmJhY2tpbmcoKSwKKyAgICAgICAgc291cmNlLm1pcExldmVsLAorICAg
ICAgICBzb3VyY2Uub3JpZ2luID8gY29udmVydFRvQmFja2luZygqc291cmNlLm9yaWdpbikgOiBX
R1BVT3JpZ2luM0QgeyAwLCAwLCAwIH0sCisgICAgICAgIGNvbnZlcnRUb0JhY2tpbmcoc291cmNl
LmFzcGVjdCksCisgICAgfTsKKworICAgIFdHUFVJbWFnZUNvcHlUZXh0dXJlIGJhY2tpbmdEZXN0
aW5hdGlvbiB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IFRl
eHR1cmVJbXBsJj4oZGVzdGluYXRpb24udGV4dHVyZSkuYmFja2luZygpLAorICAgICAgICBkZXN0
aW5hdGlvbi5taXBMZXZlbCwKKyAgICAgICAgZGVzdGluYXRpb24ub3JpZ2luID8gY29udmVydFRv
QmFja2luZygqZGVzdGluYXRpb24ub3JpZ2luKSA6IFdHUFVPcmlnaW4zRCB7IDAsIDAsIDAgfSwK
KyAgICAgICAgY29udmVydFRvQmFja2luZyhkZXN0aW5hdGlvbi5hc3BlY3QpLAorICAgIH07CisK
KyAgICBXR1BVRXh0ZW50M0QgYmFja2luZ0NvcHlTaXplID0gY29udmVydFRvQmFja2luZyhjb3B5
U2l6ZSk7CisKKyAgICB3Z3B1Q29tbWFuZEVuY29kZXJDb3B5VGV4dHVyZVRvVGV4dHVyZShtX2Jh
Y2tpbmcsICZiYWNraW5nU291cmNlLCAmYmFja2luZ0Rlc3RpbmF0aW9uLCAmYmFja2luZ0NvcHlT
aXplKTsKK30KKwordm9pZCBDb21tYW5kRW5jb2RlckltcGw6OmZpbGxCdWZmZXIoCisgICAgY29u
c3QgQnVmZmVyJiBkZXN0aW5hdGlvbiwKKyAgICBTaXplNjQgZGVzdGluYXRpb25PZmZzZXQsCisg
ICAgU2l6ZTY0IHNpemUpCit7CisgICAgd2dwdUNvbW1hbmRFbmNvZGVyRmlsbEJ1ZmZlcihtX2Jh
Y2tpbmcsIHN0YXRpY19jYXN0PGNvbnN0IEJ1ZmZlckltcGwmPihkZXN0aW5hdGlvbikuYmFja2lu
ZygpLCBkZXN0aW5hdGlvbk9mZnNldCwgc2l6ZSk7Cit9CisKK3ZvaWQgQ29tbWFuZEVuY29kZXJJ
bXBsOjpwdXNoRGVidWdHcm91cChTdHJpbmcmJiBncm91cExhYmVsKQoreworICAgIHdncHVDb21t
YW5kRW5jb2RlclB1c2hEZWJ1Z0dyb3VwKG1fYmFja2luZywgZ3JvdXBMYWJlbC51dGY4KCkuZGF0
YSgpKTsKK30KKwordm9pZCBDb21tYW5kRW5jb2RlckltcGw6OnBvcERlYnVnR3JvdXAoKQorewor
ICAgIHdncHVDb21tYW5kRW5jb2RlclBvcERlYnVnR3JvdXAobV9iYWNraW5nKTsKK30KKwordm9p
ZCBDb21tYW5kRW5jb2RlckltcGw6Omluc2VydERlYnVnTWFya2VyKFN0cmluZyYmIG1hcmtlckxh
YmVsKQoreworICAgIHdncHVDb21tYW5kRW5jb2Rlckluc2VydERlYnVnTWFya2VyKG1fYmFja2lu
ZywgbWFya2VyTGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgQ29tbWFuZEVuY29kZXJJ
bXBsOjp3cml0ZVRpbWVzdGFtcChjb25zdCBRdWVyeVNldCYgcXVlcnlTZXQsIFNpemUzMiBxdWVy
eUluZGV4KQoreworICAgIHdncHVDb21tYW5kRW5jb2RlcldyaXRlVGltZXN0YW1wKG1fYmFja2lu
Zywgc3RhdGljX2Nhc3Q8Y29uc3QgUXVlcnlTZXRJbXBsJj4ocXVlcnlTZXQpLmJhY2tpbmcoKSwg
cXVlcnlJbmRleCk7Cit9CisKK3ZvaWQgQ29tbWFuZEVuY29kZXJJbXBsOjpyZXNvbHZlUXVlcnlT
ZXQoCisgICAgY29uc3QgUXVlcnlTZXQmIHF1ZXJ5U2V0LAorICAgIFNpemUzMiBmaXJzdFF1ZXJ5
LAorICAgIFNpemUzMiBxdWVyeUNvdW50LAorICAgIGNvbnN0IEJ1ZmZlciYgZGVzdGluYXRpb24s
CisgICAgU2l6ZTY0IGRlc3RpbmF0aW9uT2Zmc2V0KQoreworICAgIHdncHVDb21tYW5kRW5jb2Rl
clJlc29sdmVRdWVyeVNldChtX2JhY2tpbmcsIHN0YXRpY19jYXN0PGNvbnN0IFF1ZXJ5U2V0SW1w
bCY+KHF1ZXJ5U2V0KS5iYWNraW5nKCksIGZpcnN0UXVlcnksIHF1ZXJ5Q291bnQsIHN0YXRpY19j
YXN0PGNvbnN0IEJ1ZmZlckltcGwmPihkZXN0aW5hdGlvbikuYmFja2luZygpLCBkZXN0aW5hdGlv
bk9mZnNldCk7Cit9CisKK1JlZjxDb21tYW5kQnVmZmVyPiBDb21tYW5kRW5jb2RlckltcGw6OmZp
bmlzaChjb25zdCBDb21tYW5kQnVmZmVyRGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBh
dXRvIGxhYmVsID0gZGVzY3JpcHRvci5sYWJlbC51dGY4KCk7CisKKyAgICBXR1BVQ29tbWFuZEJ1
ZmZlckRlc2NyaXB0b3IgYmFja2luZ0Rlc2NyaXB0b3IgeworICAgICAgICBudWxscHRyLAorICAg
ICAgICBsYWJlbC5kYXRhKCksCisgICAgfTsKKworICAgIHJldHVybiBDb21tYW5kQnVmZmVySW1w
bDo6Y3JlYXRlKHdncHVDb21tYW5kRW5jb2RlckZpbmlzaChtX2JhY2tpbmcsICZiYWNraW5nRGVz
Y3JpcHRvcikpOworfQorCit2b2lkIENvbW1hbmRFbmNvZGVySW1wbDo6c2V0TGFiZWxJbnRlcm5h
bChjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAgIHdncHVDb21tYW5kRW5jb2RlclNldExhYmVs
KG1fYmFja2luZywgbGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBB
TAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbW1hbmRFbmNvZGVySW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb21tYW5kRW5j
b2RlckltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mODBhYWFjODYwNzEyZTRjNzVhY2UxOTE3NzE3NmM0MTUy
OWFhODJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGlj
cy9XZWJHUFUvSW1wbC9XZWJHUFVDb21tYW5kRW5jb2RlckltcGwuaApAQCAtMCwwICsxLDEwNCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVQ29tbWFuZEVu
Y29kZXIuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVLmg+CisKK25hbWVzcGFjZSBQQUwgewor
bmFtZXNwYWNlIFdlYkdQVSB7CisKK2NsYXNzIENvbW1hbmRFbmNvZGVySW1wbCBmaW5hbCA6IHB1
YmxpYyBDb21tYW5kRW5jb2RlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxDb21tYW5kRW5j
b2RlckltcGw+IGNyZWF0ZShXR1BVQ29tbWFuZEVuY29kZXIgQ29tbWFuZEVuY29kZXIpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb21tYW5kRW5jb2RlckltcGwoQ29tbWFu
ZEVuY29kZXIpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5Db21tYW5kRW5jb2RlckltcGwoKTsK
KworICAgIFdHUFVDb21tYW5kRW5jb2RlciBiYWNraW5nKCkgY29uc3QgeyByZXR1cm4gbV9iYWNr
aW5nOyB9CisKK3ByaXZhdGU6CisgICAgQ29tbWFuZEVuY29kZXJJbXBsKFdHUFVDb21tYW5kRW5j
b2Rlcik7CisKKyAgICBDb21tYW5kRW5jb2RlckltcGwoY29uc3QgQ29tbWFuZEVuY29kZXJJbXBs
JikgPSBkZWxldGU7CisgICAgQ29tbWFuZEVuY29kZXJJbXBsKENvbW1hbmRFbmNvZGVySW1wbCYm
KSA9IGRlbGV0ZTsKKyAgICBDb21tYW5kRW5jb2RlckltcGwmIG9wZXJhdG9yPShjb25zdCBDb21t
YW5kRW5jb2RlckltcGwmKSA9IGRlbGV0ZTsKKyAgICBDb21tYW5kRW5jb2RlckltcGwmIG9wZXJh
dG9yPShDb21tYW5kRW5jb2RlckltcGwmJikgPSBkZWxldGU7CisKKyAgICBSZWY8UmVuZGVyUGFz
c0VuY29kZXI+IGJlZ2luUmVuZGVyUGFzcyhjb25zdCBSZW5kZXJQYXNzRGVzY3JpcHRvciYpIGZp
bmFsOworICAgIFJlZjxDb21wdXRlUGFzc0VuY29kZXI+IGJlZ2luQ29tcHV0ZVBhc3MoY29uc3Qg
c3RkOjpvcHRpb25hbDxDb21wdXRlUGFzc0Rlc2NyaXB0b3I+JikgZmluYWw7CisKKyAgICB2b2lk
IGNvcHlCdWZmZXJUb0J1ZmZlcigKKyAgICAgICAgY29uc3QgQnVmZmVyJiBzb3VyY2UsCisgICAg
ICAgIFNpemU2NCBzb3VyY2VPZmZzZXQsCisgICAgICAgIGNvbnN0IEJ1ZmZlciYgZGVzdGluYXRp
b24sCisgICAgICAgIFNpemU2NCBkZXN0aW5hdGlvbk9mZnNldCwKKyAgICAgICAgU2l6ZTY0KSBm
aW5hbDsKKworICAgIHZvaWQgY29weUJ1ZmZlclRvVGV4dHVyZSgKKyAgICAgICAgY29uc3QgSW1h
Z2VDb3B5QnVmZmVyJiBzb3VyY2UsCisgICAgICAgIGNvbnN0IEltYWdlQ29weVRleHR1cmUmIGRl
c3RpbmF0aW9uLAorICAgICAgICBjb25zdCBFeHRlbnQzRCYgY29weVNpemUpIGZpbmFsOworCisg
ICAgdm9pZCBjb3B5VGV4dHVyZVRvQnVmZmVyKAorICAgICAgICBjb25zdCBJbWFnZUNvcHlUZXh0
dXJlJiBzb3VyY2UsCisgICAgICAgIGNvbnN0IEltYWdlQ29weUJ1ZmZlciYgZGVzdGluYXRpb24s
CisgICAgICAgIGNvbnN0IEV4dGVudDNEJiBjb3B5U2l6ZSkgZmluYWw7CisKKyAgICB2b2lkIGNv
cHlUZXh0dXJlVG9UZXh0dXJlKAorICAgICAgICBjb25zdCBJbWFnZUNvcHlUZXh0dXJlJiBzb3Vy
Y2UsCisgICAgICAgIGNvbnN0IEltYWdlQ29weVRleHR1cmUmIGRlc3RpbmF0aW9uLAorICAgICAg
ICBjb25zdCBFeHRlbnQzRCYgY29weVNpemUpIGZpbmFsOworCisgICAgdm9pZCBmaWxsQnVmZmVy
KAorICAgICAgICBjb25zdCBCdWZmZXImIGRlc3RpbmF0aW9uLAorICAgICAgICBTaXplNjQgZGVz
dGluYXRpb25PZmZzZXQsCisgICAgICAgIFNpemU2NCkgZmluYWw7CisKKyAgICB2b2lkIHB1c2hE
ZWJ1Z0dyb3VwKFN0cmluZyYmIGdyb3VwTGFiZWwpIGZpbmFsOworICAgIHZvaWQgcG9wRGVidWdH
cm91cCgpIGZpbmFsOworICAgIHZvaWQgaW5zZXJ0RGVidWdNYXJrZXIoU3RyaW5nJiYgbWFya2Vy
TGFiZWwpIGZpbmFsOworCisgICAgdm9pZCB3cml0ZVRpbWVzdGFtcChjb25zdCBRdWVyeVNldCYs
IFNpemUzMiBxdWVyeUluZGV4KSBmaW5hbDsKKworICAgIHZvaWQgcmVzb2x2ZVF1ZXJ5U2V0KAor
ICAgICAgICBjb25zdCBRdWVyeVNldCYsCisgICAgICAgIFNpemUzMiBmaXJzdFF1ZXJ5LAorICAg
ICAgICBTaXplMzIgcXVlcnlDb3VudCwKKyAgICAgICAgY29uc3QgQnVmZmVyJiBkZXN0aW5hdGlv
biwKKyAgICAgICAgU2l6ZTY0IGRlc3RpbmF0aW9uT2Zmc2V0KSBmaW5hbDsKKworICAgIFJlZjxD
b21tYW5kQnVmZmVyPiBmaW5pc2goY29uc3QgQ29tbWFuZEJ1ZmZlckRlc2NyaXB0b3ImKSBmaW5h
bDsKKworICAgIHZvaWQgc2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5hbDsKKwor
ICAgIFdHUFVDb21tYW5kRW5jb2RlciBtX2JhY2tpbmcgeyBudWxscHRyIH07Cit9OworCit9IC8v
IG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb21wdXRlUGFzc0Vu
Y29kZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0lt
cGwvV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWJjMTZkNDRh
OGEzNGE5OGIxNWFkYzEyYjk3MGJlMThiYThlMmViYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tcHV0ZVBhc3NF
bmNvZGVySW1wbC5jcHAKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5oIgorCisj
aW5jbHVkZSAiV2ViR1BVQmluZEdyb3VwSW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVUJ1ZmZlcklt
cGwuaCIKKyNpbmNsdWRlICJXZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBsLmgiCisjaW5jbHVkZSAi
V2ViR1BVUXVlcnlTZXRJbXBsLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVUV4dC5oPgorCitu
YW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitDb21wdXRlUGFzc0VuY29kZXJJ
bXBsOjpDb21wdXRlUGFzc0VuY29kZXJJbXBsKFdHUFVDb21wdXRlUGFzc0VuY29kZXIgY29tcHV0
ZVBhc3NFbmNvZGVyKQorICAgIDogbV9iYWNraW5nKGNvbXB1dGVQYXNzRW5jb2RlcikKK3sKK30K
KworQ29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6fkNvbXB1dGVQYXNzRW5jb2RlckltcGwoKQorewor
ICAgIHdncHVDb21wdXRlUGFzc0VuY29kZXJSZWxlYXNlKG1fYmFja2luZyk7Cit9CisKK3ZvaWQg
Q29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6c2V0UGlwZWxpbmUoY29uc3QgQ29tcHV0ZVBpcGVsaW5l
JiBjb21wdXRlUGlwZWxpbmUpCit7CisgICAgd2dwdUNvbXB1dGVQYXNzRW5jb2RlclNldFBpcGVs
aW5lKG1fYmFja2luZywgc3RhdGljX2Nhc3Q8Y29uc3QgQ29tcHV0ZVBpcGVsaW5lSW1wbCY+KGNv
bXB1dGVQaXBlbGluZSkuYmFja2luZygpKTsKK30KKwordm9pZCBDb21wdXRlUGFzc0VuY29kZXJJ
bXBsOjpkaXNwYXRjaChTaXplMzIgeCwgc3RkOjpvcHRpb25hbDxTaXplMzI+IHksIHN0ZDo6b3B0
aW9uYWw8U2l6ZTMyPiB6KQoreworICAgIHdncHVDb21wdXRlUGFzc0VuY29kZXJEaXNwYXRjaCht
X2JhY2tpbmcsIHgsIHkudmFsdWVfb3IoMSksIHoudmFsdWVfb3IoMSkpOworfQorCit2b2lkIENv
bXB1dGVQYXNzRW5jb2RlckltcGw6OmRpc3BhdGNoSW5kaXJlY3QoY29uc3QgQnVmZmVyJiBpbmRp
cmVjdEJ1ZmZlciwgU2l6ZTY0IGluZGlyZWN0T2Zmc2V0KQoreworICAgIHdncHVDb21wdXRlUGFz
c0VuY29kZXJEaXNwYXRjaEluZGlyZWN0KG1fYmFja2luZywgc3RhdGljX2Nhc3Q8Y29uc3QgQnVm
ZmVySW1wbCY+KGluZGlyZWN0QnVmZmVyKS5iYWNraW5nKCksIGluZGlyZWN0T2Zmc2V0KTsKK30K
Kwordm9pZCBDb21wdXRlUGFzc0VuY29kZXJJbXBsOjpiZWdpblBpcGVsaW5lU3RhdGlzdGljc1F1
ZXJ5KGNvbnN0IFF1ZXJ5U2V0JiBxdWVyeVNldCwgU2l6ZTMyIHF1ZXJ5SW5kZXgpCit7CisgICAg
d2dwdUNvbXB1dGVQYXNzRW5jb2RlckJlZ2luUGlwZWxpbmVTdGF0aXN0aWNzUXVlcnkobV9iYWNr
aW5nLCBzdGF0aWNfY2FzdDxjb25zdCBRdWVyeVNldEltcGwmPihxdWVyeVNldCkuYmFja2luZygp
LCBxdWVyeUluZGV4KTsKK30KKwordm9pZCBDb21wdXRlUGFzc0VuY29kZXJJbXBsOjplbmRQaXBl
bGluZVN0YXRpc3RpY3NRdWVyeSgpCit7CisgICAgd2dwdUNvbXB1dGVQYXNzRW5jb2RlckVuZFBp
cGVsaW5lU3RhdGlzdGljc1F1ZXJ5KG1fYmFja2luZyk7Cit9CisKK3ZvaWQgQ29tcHV0ZVBhc3NF
bmNvZGVySW1wbDo6ZW5kUGFzcygpCit7CisgICAgd2dwdUNvbXB1dGVQYXNzRW5jb2RlckVuZFBh
c3MobV9iYWNraW5nKTsKK30KKwordm9pZCBDb21wdXRlUGFzc0VuY29kZXJJbXBsOjpzZXRCaW5k
R3JvdXAoSW5kZXgzMiBpbmRleCwgY29uc3QgQmluZEdyb3VwJiBiaW5kR3JvdXAsCisgICAgc3Rk
OjpvcHRpb25hbDxWZWN0b3I8QnVmZmVyRHluYW1pY09mZnNldD4+JiYgb2Zmc2V0cykKK3sKKyAg
ICBhdXRvIGJhY2tpbmdPZmZzZXRzID0gb2Zmc2V0cy52YWx1ZV9vcihWZWN0b3I8QnVmZmVyRHlu
YW1pY09mZnNldD4geyB9KTsKKyAgICB3Z3B1Q29tcHV0ZVBhc3NFbmNvZGVyU2V0QmluZEdyb3Vw
KG1fYmFja2luZywgaW5kZXgsIHN0YXRpY19jYXN0PGNvbnN0IEJpbmRHcm91cEltcGwmPihiaW5k
R3JvdXApLmJhY2tpbmcoKSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGJhY2tpbmdPZmZzZXRzLnNp
emUoKSksIGJhY2tpbmdPZmZzZXRzLmRhdGEoKSk7Cit9CisKK3ZvaWQgQ29tcHV0ZVBhc3NFbmNv
ZGVySW1wbDo6c2V0QmluZEdyb3VwKEluZGV4MzIgaW5kZXgsIGNvbnN0IEJpbmRHcm91cCYgYmlu
ZEdyb3VwLAorICAgIGNvbnN0IHVpbnQzMl90KiBkeW5hbWljT2Zmc2V0c0FycmF5QnVmZmVyLAor
ICAgIHNpemVfdCBkeW5hbWljT2Zmc2V0c0FycmF5QnVmZmVyTGVuZ3RoLAorICAgIFNpemU2NCBk
eW5hbWljT2Zmc2V0c0RhdGFTdGFydCwKKyAgICBTaXplMzIgZHluYW1pY09mZnNldHNEYXRhTGVu
Z3RoKQoreworICAgIFVOVVNFRF9QQVJBTShkeW5hbWljT2Zmc2V0c0FycmF5QnVmZmVyTGVuZ3Ro
KTsKKyAgICAvLyBGSVhNRTogVXNlIGNoZWNrZWQgYWxnZWJyYS4KKyAgICB3Z3B1Q29tcHV0ZVBh
c3NFbmNvZGVyU2V0QmluZEdyb3VwKG1fYmFja2luZywgaW5kZXgsIHN0YXRpY19jYXN0PGNvbnN0
IEJpbmRHcm91cEltcGwmPihiaW5kR3JvdXApLmJhY2tpbmcoKSwgZHluYW1pY09mZnNldHNEYXRh
TGVuZ3RoLCBkeW5hbWljT2Zmc2V0c0FycmF5QnVmZmVyICsgZHluYW1pY09mZnNldHNEYXRhU3Rh
cnQpOworfQorCit2b2lkIENvbXB1dGVQYXNzRW5jb2RlckltcGw6OnB1c2hEZWJ1Z0dyb3VwKFN0
cmluZyYmIGdyb3VwTGFiZWwpCit7CisgICAgd2dwdUNvbXB1dGVQYXNzRW5jb2RlclB1c2hEZWJ1
Z0dyb3VwKG1fYmFja2luZywgZ3JvdXBMYWJlbC51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBD
b21wdXRlUGFzc0VuY29kZXJJbXBsOjpwb3BEZWJ1Z0dyb3VwKCkKK3sKKyAgICB3Z3B1Q29tcHV0
ZVBhc3NFbmNvZGVyUG9wRGVidWdHcm91cChtX2JhY2tpbmcpOworfQorCit2b2lkIENvbXB1dGVQ
YXNzRW5jb2RlckltcGw6Omluc2VydERlYnVnTWFya2VyKFN0cmluZyYmIG1hcmtlckxhYmVsKQor
eworICAgIHdncHVDb21wdXRlUGFzc0VuY29kZXJJbnNlcnREZWJ1Z01hcmtlcihtX2JhY2tpbmcs
IG1hcmtlckxhYmVsLnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIENvbXB1dGVQYXNzRW5jb2Rl
ckltcGw6OnNldExhYmVsSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBsYWJlbCkKK3sKKyAgICB3Z3B1
Q29tcHV0ZVBhc3NFbmNvZGVyU2V0TGFiZWwobV9iYWNraW5nLCBsYWJlbC51dGY4KCkuZGF0YSgp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BV
Q29tcHV0ZVBhc3NFbmNvZGVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGlj
cy9XZWJHUFUvSW1wbC9XZWJHUFVDb21wdXRlUGFzc0VuY29kZXJJbXBsLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MWJlOGFkZGYyM2ZmN2FhZmM3ZDZlYTA1NjMwODU3N2VlMmRlOTBiZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29t
cHV0ZVBhc3NFbmNvZGVySW1wbC5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIldlYkdQVUNvbXB1dGVQYXNzRW5jb2Rlci5oIgorI2luY2x1
ZGUgPFdlYkdQVS9XZWJHUFUuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BV
IHsKKworY2xhc3MgQ29tcHV0ZVBhc3NFbmNvZGVySW1wbCBmaW5hbCA6IHB1YmxpYyBDb21wdXRl
UGFzc0VuY29kZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8Q29tcHV0ZVBhc3NFbmNvZGVy
SW1wbD4gY3JlYXRlKFdHUFVDb21wdXRlUGFzc0VuY29kZXIgY29tcHV0ZVBhc3NFbmNvZGVyKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29tcHV0ZVBhc3NFbmNvZGVySW1w
bChjb21wdXRlUGFzc0VuY29kZXIpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5Db21wdXRlUGFz
c0VuY29kZXJJbXBsKCk7CisKKyAgICBXR1BVQ29tcHV0ZVBhc3NFbmNvZGVyIGJhY2tpbmcoKSBj
b25zdCB7IHJldHVybiBtX2JhY2tpbmc7IH0KKworcHJpdmF0ZToKKyAgICBDb21wdXRlUGFzc0Vu
Y29kZXJJbXBsKFdHUFVDb21wdXRlUGFzc0VuY29kZXIpOworCisgICAgQ29tcHV0ZVBhc3NFbmNv
ZGVySW1wbChjb25zdCBDb21wdXRlUGFzc0VuY29kZXJJbXBsJikgPSBkZWxldGU7CisgICAgQ29t
cHV0ZVBhc3NFbmNvZGVySW1wbChDb21wdXRlUGFzc0VuY29kZXJJbXBsJiYpID0gZGVsZXRlOwor
ICAgIENvbXB1dGVQYXNzRW5jb2RlckltcGwmIG9wZXJhdG9yPShjb25zdCBDb21wdXRlUGFzc0Vu
Y29kZXJJbXBsJikgPSBkZWxldGU7CisgICAgQ29tcHV0ZVBhc3NFbmNvZGVySW1wbCYgb3BlcmF0
b3I9KENvbXB1dGVQYXNzRW5jb2RlckltcGwmJikgPSBkZWxldGU7CisKKyAgICB2b2lkIHNldFBp
cGVsaW5lKGNvbnN0IENvbXB1dGVQaXBlbGluZSYpIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2go
U2l6ZTMyIHgsIHN0ZDo6b3B0aW9uYWw8U2l6ZTMyPiB5LCBzdGQ6Om9wdGlvbmFsPFNpemUzMj4p
IGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2hJbmRpcmVjdChjb25zdCBCdWZmZXImIGluZGlyZWN0
QnVmZmVyLCBTaXplNjQgaW5kaXJlY3RPZmZzZXQpIGZpbmFsOworCisgICAgdm9pZCBiZWdpblBp
cGVsaW5lU3RhdGlzdGljc1F1ZXJ5KGNvbnN0IFF1ZXJ5U2V0JiwgU2l6ZTMyIHF1ZXJ5SW5kZXgp
IGZpbmFsOworICAgIHZvaWQgZW5kUGlwZWxpbmVTdGF0aXN0aWNzUXVlcnkoKSBmaW5hbDsKKwor
ICAgIHZvaWQgZW5kUGFzcygpIGZpbmFsOworCisgICAgdm9pZCBzZXRCaW5kR3JvdXAoSW5kZXgz
MiwgY29uc3QgQmluZEdyb3VwJiwKKyAgICAgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8QnVmZmVy
RHluYW1pY09mZnNldD4+JiYpIGZpbmFsOworCisgICAgdm9pZCBzZXRCaW5kR3JvdXAoSW5kZXgz
MiwgY29uc3QgQmluZEdyb3VwJiwKKyAgICAgICAgY29uc3QgdWludDMyX3QqIGR5bmFtaWNPZmZz
ZXRzQXJyYXlCdWZmZXIsCisgICAgICAgIHNpemVfdCBkeW5hbWljT2Zmc2V0c0FycmF5QnVmZmVy
TGVuZ3RoLAorICAgICAgICBTaXplNjQgZHluYW1pY09mZnNldHNEYXRhU3RhcnQsCisgICAgICAg
IFNpemUzMiBkeW5hbWljT2Zmc2V0c0RhdGFMZW5ndGgpIGZpbmFsOworCisgICAgdm9pZCBwdXNo
RGVidWdHcm91cChTdHJpbmcmJiBncm91cExhYmVsKSBmaW5hbDsKKyAgICB2b2lkIHBvcERlYnVn
R3JvdXAoKSBmaW5hbDsKKyAgICB2b2lkIGluc2VydERlYnVnTWFya2VyKFN0cmluZyYmIG1hcmtl
ckxhYmVsKSBmaW5hbDsKKworICAgIHZvaWQgc2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcm
KSBmaW5hbDsKKworICAgIFdHUFVDb21wdXRlUGFzc0VuY29kZXIgbV9iYWNraW5nIHsgbnVsbHB0
ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2Vi
R1BVQ29tcHV0ZVBpcGVsaW5lSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBo
aWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbXB1dGVQaXBlbGluZUltcGwuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjJhOGU5NzNkNGFjYjc2YmJlMWFhMWQwYTFmOGIzNDY5NjNjYjg0YTIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNv
bXB1dGVQaXBlbGluZUltcGwuY3BwCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViR1BVQ29tcHV0ZVBpcGVsaW5lSW1wbC5oIgor
CisjaW5jbHVkZSAiV2ViR1BVQmluZEdyb3VwTGF5b3V0SW1wbC5oIgorI2luY2x1ZGUgPFdlYkdQ
VS9XZWJHUFVFeHQuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKwor
Q29tcHV0ZVBpcGVsaW5lSW1wbDo6Q29tcHV0ZVBpcGVsaW5lSW1wbChXR1BVQ29tcHV0ZVBpcGVs
aW5lIGNvbXB1dGVQaXBlbGluZSkKKyAgICA6IG1fYmFja2luZyhjb21wdXRlUGlwZWxpbmUpCit7
Cit9CisKK0NvbXB1dGVQaXBlbGluZUltcGw6On5Db21wdXRlUGlwZWxpbmVJbXBsKCkKK3sKKyAg
ICB3Z3B1Q29tcHV0ZVBpcGVsaW5lUmVsZWFzZShtX2JhY2tpbmcpOworfQorCitSZWY8QmluZEdy
b3VwTGF5b3V0PiBDb21wdXRlUGlwZWxpbmVJbXBsOjpnZXRCaW5kR3JvdXBMYXlvdXQodWludDMy
X3QgaW5kZXgpCit7CisgICAgcmV0dXJuIEJpbmRHcm91cExheW91dEltcGw6OmNyZWF0ZSh3Z3B1
Q29tcHV0ZVBpcGVsaW5lR2V0QmluZEdyb3VwTGF5b3V0KG1fYmFja2luZywgaW5kZXgpKTsKK30K
Kwordm9pZCBDb21wdXRlUGlwZWxpbmVJbXBsOjpzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmlu
ZyYgbGFiZWwpCit7CisgICAgd2dwdUNvbXB1dGVQaXBlbGluZVNldExhYmVsKG1fYmFja2luZywg
bGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1l
c3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNz
L1dlYkdQVS9JbXBsL1dlYkdQVUNvbXB1dGVQaXBlbGluZUltcGwuaCBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tcHV0ZVBpcGVsaW5lSW1wbC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjA0NjI2Y2ZhNDBlMjJlMjkyM2RiNWJiZmZiNWYxNDBhZDZhZmFhY2IKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9J
bXBsL1dlYkdQVUNvbXB1dGVQaXBlbGluZUltcGwuaApAQCAtMCwwICsxLDYxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJXZWJHUFVDb21wdXRlUGlwZWxpbmUuaCIK
KyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVLmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNl
IFdlYkdQVSB7CisKK2NsYXNzIENvbXB1dGVQaXBlbGluZUltcGwgZmluYWwgOiBwdWJsaWMgQ29t
cHV0ZVBpcGVsaW5lIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPENvbXB1dGVQaXBlbGluZUlt
cGw+IGNyZWF0ZShXR1BVQ29tcHV0ZVBpcGVsaW5lIGNvbXB1dGVQaXBlbGluZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbXB1dGVQaXBlbGluZUltcGwoY29tcHV0ZVBp
cGVsaW5lKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+Q29tcHV0ZVBpcGVsaW5lSW1wbCgpOwor
CisgICAgV0dQVUNvbXB1dGVQaXBlbGluZSBiYWNraW5nKCkgY29uc3QgeyByZXR1cm4gbV9iYWNr
aW5nOyB9CisKK3ByaXZhdGU6CisgICAgQ29tcHV0ZVBpcGVsaW5lSW1wbChXR1BVQ29tcHV0ZVBp
cGVsaW5lKTsKKworICAgIENvbXB1dGVQaXBlbGluZUltcGwoY29uc3QgQ29tcHV0ZVBpcGVsaW5l
SW1wbCYpID0gZGVsZXRlOworICAgIENvbXB1dGVQaXBlbGluZUltcGwoQ29tcHV0ZVBpcGVsaW5l
SW1wbCYmKSA9IGRlbGV0ZTsKKyAgICBDb21wdXRlUGlwZWxpbmVJbXBsJiBvcGVyYXRvcj0oY29u
c3QgQ29tcHV0ZVBpcGVsaW5lSW1wbCYpID0gZGVsZXRlOworICAgIENvbXB1dGVQaXBlbGluZUlt
cGwmIG9wZXJhdG9yPShDb21wdXRlUGlwZWxpbmVJbXBsJiYpID0gZGVsZXRlOworCisgICAgUmVm
PEJpbmRHcm91cExheW91dD4gZ2V0QmluZEdyb3VwTGF5b3V0KHVpbnQzMl90IGluZGV4KSBmaW5h
bDsKKworICAgIHZvaWQgc2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5hbDsKKwor
ICAgIFdHUFVDb21wdXRlUGlwZWxpbmUgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworfTsKKworfSAv
LyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29udmVydFRvQmFj
a2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dl
YkdQVUNvbnZlcnRUb0JhY2tpbmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUyNTZmYzRmNjQ2MjVmZjQ3OGY1
YTc3ODNiYTVhZmUzMWYyMmRlZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Q
QUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbnZlcnRUb0JhY2tpbmcuY3BwCkBA
IC0wLDAgKzEsODA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYkdQVUNvbnZlcnRUb0JhY2tpbmcuaCIKKworI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFVF
eHQuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworV0dQVUFkZHJl
c3NNb2RlIGNvbnZlcnRUb0JhY2tpbmcoQWRkcmVzc01vZGUgYWRkcmVzc01vZGUpCit7CisgICAg
c3dpdGNoIChhZGRyZXNzTW9kZSkgeworICAgIGNhc2UgQWRkcmVzc01vZGU6OkNsYW1wVG9FZGdl
OgorICAgICAgICByZXR1cm4gV0dQVUFkZHJlc3NNb2RlX0NsYW1wVG9FZGdlOworICAgIGNhc2Ug
QWRkcmVzc01vZGU6OlJlcGVhdDoKKyAgICAgICAgcmV0dXJuIFdHUFVBZGRyZXNzTW9kZV9SZXBl
YXQ7CisgICAgY2FzZSBBZGRyZXNzTW9kZTo6TWlycm9yUmVwZWF0OgorICAgICAgICByZXR1cm4g
V0dQVUFkZHJlc3NNb2RlX01pcnJvclJlcGVhdDsKKyAgICB9Cit9CisKK1dHUFVCbGVuZEZhY3Rv
ciBjb252ZXJ0VG9CYWNraW5nKEJsZW5kRmFjdG9yIGJsZW5kRmFjdG9yKQoreworICAgIHN3aXRj
aCAoYmxlbmRGYWN0b3IpIHsKKyAgICBjYXNlIEJsZW5kRmFjdG9yOjpaZXJvOgorICAgICAgICBy
ZXR1cm4gV0dQVUJsZW5kRmFjdG9yX1plcm87CisgICAgY2FzZSBCbGVuZEZhY3Rvcjo6T25lOgor
ICAgICAgICByZXR1cm4gV0dQVUJsZW5kRmFjdG9yX09uZTsKKyAgICBjYXNlIEJsZW5kRmFjdG9y
OjpTcmM6CisgICAgICAgIHJldHVybiBXR1BVQmxlbmRGYWN0b3JfU3JjOworICAgIGNhc2UgQmxl
bmRGYWN0b3I6Ok9uZU1pbnVzU3JjOgorICAgICAgICByZXR1cm4gV0dQVUJsZW5kRmFjdG9yX09u
ZU1pbnVzU3JjOworICAgIGNhc2UgQmxlbmRGYWN0b3I6OlNyY0FscGhhOgorICAgICAgICByZXR1
cm4gV0dQVUJsZW5kRmFjdG9yX1NyY0FscGhhOworICAgIGNhc2UgQmxlbmRGYWN0b3I6Ok9uZU1p
bnVzU3JjQWxwaGE6CisgICAgICAgIHJldHVybiBXR1BVQmxlbmRGYWN0b3JfT25lTWludXNTcmNB
bHBoYTsKKyAgICBjYXNlIEJsZW5kRmFjdG9yOjpEc3Q6CisgICAgICAgIHJldHVybiBXR1BVQmxl
bmRGYWN0b3JfRHN0OworICAgIGNhc2UgQmxlbmRGYWN0b3I6Ok9uZU1pbnVzRHN0OgorICAgICAg
ICByZXR1cm4gV0dQVUJsZW5kRmFjdG9yX09uZU1pbnVzRHN0OworICAgIGNhc2UgQmxlbmRGYWN0
b3I6OkRzdEFscGhhOgorICAgICAgICByZXR1cm4gV0dQVUJsZW5kRmFjdG9yX0RzdEFscGhhOwor
ICAgIGNhc2UgQmxlbmRGYWN0b3I6Ok9uZU1pbnVzRHN0QWxwaGE6CisgICAgICAgIHJldHVybiBX
R1BVQmxlbmRGYWN0b3JfT25lTWludXNEc3RBbHBoYTsKKyAgICBjYXNlIEJsZW5kRmFjdG9yOjpT
cmNBbHBoYVNhdHVyYXRlZDoKKyAgICAgICAgcmV0dXJuIFdHUFVCbGVuZEZhY3Rvcl9TcmNBbHBo
YVNhdHVyYXRlZDsKKyAgICBjYXNlIEJsZW5kRmFjdG9yOjpDb25zdGFudDoKKyAgICAgICAgcmV0
dXJuIFdHUFVCbGVuZEZhY3Rvcl9Db25zdGFudDsKKyAgICBjYXNlIEJsZW5kRmFjdG9yOjpPbmVN
aW51c0NvbnN0YW50OgorICAgICAgICByZXR1cm4gV0dQVUJsZW5kRmFjdG9yX09uZU1pbnVzQ29u
c3RhbnQ7CisgICAgfQorfQorCitXR1BVQmxlbmRPcGVyYXRpb24gY29udmVydFRvQmFja2luZyhC
bGVuZE9wZXJhdGlvbiBibGVuZE9wZXJhdGlvbikKK3sKKyAgICBzd2l0Y2ggKGJsZW5kT3BlcmF0
aW9uKSB7CisgICAgY2FzZSBCbGVuZE9wZXJhdGlvbjo6QWRkOgorICAgICAgICByZXR1cm4gV0dQ
VUJsZW5kT3BlcmF0aW9uX0FkZDsKKyAgICBjYXNlIEJsZW5kT3BlcmF0aW9uOjpTdWJ0cmFjdDoK
KyAgICAgICAgcmV0dXJuIFdHUFVCbGVuZE9wZXJhdGlvbl9TdWJ0cmFjdDsKKyAgICBjYXNlIEJs
ZW5kT3BlcmF0aW9uOjpSZXZlcnNlU3VidHJhY3Q6CisgICAgICAgIHJldHVybiBXR1BVQmxlbmRP
cGVyYXRpb25fUmV2ZXJzZVN1YnRyYWN0OworICAgIGNhc2UgQmxlbmRPcGVyYXRpb246Ok1pbjoK
KyAgICAgICAgcmV0dXJuIFdHUFVCbGVuZE9wZXJhdGlvbl9NaW47CisgICAgY2FzZSBCbGVuZE9w
ZXJhdGlvbjo6TWF4OgorICAgICAgICByZXR1cm4gV0dQVUJsZW5kT3BlcmF0aW9uX01heDsKKyAg
ICB9Cit9CisKK1dHUFVCdWZmZXJCaW5kaW5nVHlwZSBjb252ZXJ0VG9CYWNraW5nKEJ1ZmZlckJp
bmRpbmdUeXBlIGJ1ZmZlckJpbmRpbmdUeXBlKQoreworICAgIHN3aXRjaCAoYnVmZmVyQmluZGlu
Z1R5cGUpIHsKKyAgICBjYXNlIEJ1ZmZlckJpbmRpbmdUeXBlOjpVbmlmb3JtOgorICAgICAgICBy
ZXR1cm4gV0dQVUJ1ZmZlckJpbmRpbmdUeXBlX1VuaWZvcm07CisgICAgY2FzZSBCdWZmZXJCaW5k
aW5nVHlwZTo6U3RvcmFnZToKKyAgICAgICAgcmV0dXJuIFdHUFVCdWZmZXJCaW5kaW5nVHlwZV9T
dG9yYWdlOworICAgIGNhc2UgQnVmZmVyQmluZGluZ1R5cGU6OlJlYWRPbmx5U3RvcmFnZToKKyAg
ICAgICAgcmV0dXJuIFdHUFVCdWZmZXJCaW5kaW5nVHlwZV9SZWFkT25seVN0b3JhZ2U7CisgICAg
fQorfQorCitXR1BVQ29tcGFyZUZ1bmN0aW9uIGNvbnZlcnRUb0JhY2tpbmcoQ29tcGFyZUZ1bmN0
aW9uIGNvbXBhcmVGdW5jdGlvbikKK3sKKyAgICBzd2l0Y2ggKGNvbXBhcmVGdW5jdGlvbikgewor
ICAgIGNhc2UgQ29tcGFyZUZ1bmN0aW9uOjpOZXZlcjoKKyAgICAgICAgcmV0dXJuIFdHUFVDb21w
YXJlRnVuY3Rpb25fTmV2ZXI7CisgICAgY2FzZSBDb21wYXJlRnVuY3Rpb246Okxlc3M6CisgICAg
ICAgIHJldHVybiBXR1BVQ29tcGFyZUZ1bmN0aW9uX0xlc3M7CisgICAgY2FzZSBDb21wYXJlRnVu
Y3Rpb246OkVxdWFsOgorICAgICAgICByZXR1cm4gV0dQVUNvbXBhcmVGdW5jdGlvbl9FcXVhbDsK
KyAgICBjYXNlIENvbXBhcmVGdW5jdGlvbjo6TGVzc0VxdWFsOgorICAgICAgICByZXR1cm4gV0dQ
VUNvbXBhcmVGdW5jdGlvbl9MZXNzRXF1YWw7CisgICAgY2FzZSBDb21wYXJlRnVuY3Rpb246Okdy
ZWF0ZXI6CisgICAgICAgIHJldHVybiBXR1BVQ29tcGFyZUZ1bmN0aW9uX0dyZWF0ZXI7CisgICAg
Y2FzZSBDb21wYXJlRnVuY3Rpb246Ok5vdEVxdWFsOgorICAgICAgICByZXR1cm4gV0dQVUNvbXBh
cmVGdW5jdGlvbl9Ob3RFcXVhbDsKKyAgICBjYXNlIENvbXBhcmVGdW5jdGlvbjo6R3JlYXRlckVx
dWFsOgorICAgICAgICByZXR1cm4gV0dQVUNvbXBhcmVGdW5jdGlvbl9HcmVhdGVyRXF1YWw7Cisg
ICAgY2FzZSBDb21wYXJlRnVuY3Rpb246OkFsd2F5czoKKyAgICAgICAgcmV0dXJuIFdHUFVDb21w
YXJlRnVuY3Rpb25fQWx3YXlzOworICAgIH0KK30KKworV0dQVUNvbXBpbGF0aW9uTWVzc2FnZVR5
cGUgY29udmVydFRvQmFja2luZyhDb21waWxhdGlvbk1lc3NhZ2VUeXBlIGNvbXBpbGF0aW9uTWVz
c2FnZVR5cGUpCit7CisgICAgc3dpdGNoIChjb21waWxhdGlvbk1lc3NhZ2VUeXBlKSB7CisgICAg
Y2FzZSBDb21waWxhdGlvbk1lc3NhZ2VUeXBlOjpFcnJvcjoKKyAgICAgICAgcmV0dXJuIFdHUFVD
b21waWxhdGlvbk1lc3NhZ2VUeXBlX0Vycm9yOworICAgIGNhc2UgQ29tcGlsYXRpb25NZXNzYWdl
VHlwZTo6V2FybmluZzoKKyAgICAgICAgcmV0dXJuIFdHUFVDb21waWxhdGlvbk1lc3NhZ2VUeXBl
X1dhcm5pbmc7CisgICAgY2FzZSBDb21waWxhdGlvbk1lc3NhZ2VUeXBlOjpJbmZvOgorICAgICAg
ICByZXR1cm4gV0dQVUNvbXBpbGF0aW9uTWVzc2FnZVR5cGVfSW5mbzsKKyAgICB9Cit9CisKK1dH
UFVDdWxsTW9kZSBjb252ZXJ0VG9CYWNraW5nKEN1bGxNb2RlIGN1bGxNb2RlKQoreworICAgIHN3
aXRjaCAoY3VsbE1vZGUpIHsKKyAgICBjYXNlIEN1bGxNb2RlOjpOb25lOgorICAgICAgICByZXR1
cm4gV0dQVUN1bGxNb2RlX05vbmU7CisgICAgY2FzZSBDdWxsTW9kZTo6RnJvbnQ6CisgICAgICAg
IHJldHVybiBXR1BVQ3VsbE1vZGVfRnJvbnQ7CisgICAgY2FzZSBDdWxsTW9kZTo6QmFjazoKKyAg
ICAgICAgcmV0dXJuIFdHUFVDdWxsTW9kZV9CYWNrOworICAgIH0KK30KKworV0dQVUVycm9yRmls
dGVyIGNvbnZlcnRUb0JhY2tpbmcoRXJyb3JGaWx0ZXIgZXJyb3JGaWx0ZXIpCit7CisgICAgc3dp
dGNoIChlcnJvckZpbHRlcikgeworICAgIGNhc2UgRXJyb3JGaWx0ZXI6Ok91dE9mTWVtb3J5Ogor
ICAgICAgICByZXR1cm4gV0dQVUVycm9yRmlsdGVyX091dE9mTWVtb3J5OworICAgIGNhc2UgRXJy
b3JGaWx0ZXI6OlZhbGlkYXRpb246CisgICAgICAgIHJldHVybiBXR1BVRXJyb3JGaWx0ZXJfVmFs
aWRhdGlvbjsKKyAgICB9Cit9CisKK1dHUFVGZWF0dXJlTmFtZSBjb252ZXJ0VG9CYWNraW5nKEZl
YXR1cmVOYW1lIGZlYXR1cmVOYW1lKQoreworICAgIHN3aXRjaCAoZmVhdHVyZU5hbWUpIHsKKyAg
ICBjYXNlIEZlYXR1cmVOYW1lOjpEZXB0aENsaXBDb250cm9sOgorICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8V0dQVUZlYXR1cmVOYW1lPihXR1BVRmVhdHVyZU5hbWVfRGVwdGhDbGlwQ29udHJv
bCk7CisgICAgY2FzZSBGZWF0dXJlTmFtZTo6RGVwdGgyNHVub3JtU3RlbmNpbDg6CisgICAgICAg
IHJldHVybiBXR1BVRmVhdHVyZU5hbWVfRGVwdGgyNFVub3JtU3RlbmNpbDg7CisgICAgY2FzZSBG
ZWF0dXJlTmFtZTo6RGVwdGgzMmZsb2F0U3RlbmNpbDg6CisgICAgICAgIHJldHVybiBXR1BVRmVh
dHVyZU5hbWVfRGVwdGgzMkZsb2F0U3RlbmNpbDg7CisgICAgY2FzZSBGZWF0dXJlTmFtZTo6UGlw
ZWxpbmVTdGF0aXN0aWNzUXVlcnk6CisgICAgICAgIHJldHVybiBXR1BVRmVhdHVyZU5hbWVfUGlw
ZWxpbmVTdGF0aXN0aWNzUXVlcnk7CisgICAgY2FzZSBGZWF0dXJlTmFtZTo6VGV4dHVyZUNvbXBy
ZXNzaW9uQmM6CisgICAgICAgIHJldHVybiBXR1BVRmVhdHVyZU5hbWVfVGV4dHVyZUNvbXByZXNz
aW9uQkM7CisgICAgY2FzZSBGZWF0dXJlTmFtZTo6VGV4dHVyZUNvbXByZXNzaW9uRXRjMjoKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVGZWF0dXJlTmFtZT4oV0dQVUZlYXR1cmVOYW1l
X1RleHR1cmVDb21wcmVzc2lvbkVUQzIpOworICAgIGNhc2UgRmVhdHVyZU5hbWU6OlRleHR1cmVD
b21wcmVzc2lvbkFzdGM6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVRmVhdHVyZU5h
bWU+KFdHUFVGZWF0dXJlTmFtZV9UZXh0dXJlQ29tcHJlc3Npb25BU1RDKTsKKyAgICBjYXNlIEZl
YXR1cmVOYW1lOjpUaW1lc3RhbXBRdWVyeToKKyAgICAgICAgcmV0dXJuIFdHUFVGZWF0dXJlTmFt
ZV9UaW1lc3RhbXBRdWVyeTsKKyAgICBjYXNlIEZlYXR1cmVOYW1lOjpJbmRpcmVjdEZpcnN0SW5z
dGFuY2U6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVRmVhdHVyZU5hbWU+KFdHUFVG
ZWF0dXJlTmFtZV9JbmRpcmVjdEZpcnN0SW5zdGFuY2UpOworICAgIH0KK30KKworV0dQVUZpbHRl
ck1vZGUgY29udmVydFRvQmFja2luZyhGaWx0ZXJNb2RlIGZpbHRlck1vZGUpCit7CisgICAgc3dp
dGNoIChmaWx0ZXJNb2RlKSB7CisgICAgY2FzZSBGaWx0ZXJNb2RlOjpOZWFyZXN0OgorICAgICAg
ICByZXR1cm4gV0dQVUZpbHRlck1vZGVfTmVhcmVzdDsKKyAgICBjYXNlIEZpbHRlck1vZGU6Okxp
bmVhcjoKKyAgICAgICAgcmV0dXJuIFdHUFVGaWx0ZXJNb2RlX0xpbmVhcjsKKyAgICB9Cit9CisK
K1dHUFVGcm9udEZhY2UgY29udmVydFRvQmFja2luZyhGcm9udEZhY2UgZnJvbnRGYWNlKQorewor
ICAgIHN3aXRjaCAoZnJvbnRGYWNlKSB7CisgICAgY2FzZSBGcm9udEZhY2U6OkNDVzoKKyAgICAg
ICAgcmV0dXJuIFdHUFVGcm9udEZhY2VfQ0NXOworICAgIGNhc2UgRnJvbnRGYWNlOjpDVzoKKyAg
ICAgICAgcmV0dXJuIFdHUFVGcm9udEZhY2VfQ1c7CisgICAgfQorfQorCitXR1BVSW5kZXhGb3Jt
YXQgY29udmVydFRvQmFja2luZyhJbmRleEZvcm1hdCBpbmRleEZvcm1hdCkKK3sKKyAgICBzd2l0
Y2ggKGluZGV4Rm9ybWF0KSB7CisgICAgY2FzZSBJbmRleEZvcm1hdDo6VWludDE2OgorICAgICAg
ICByZXR1cm4gV0dQVUluZGV4Rm9ybWF0X1VpbnQxNjsKKyAgICBjYXNlIEluZGV4Rm9ybWF0OjpV
aW50MzI6CisgICAgICAgIHJldHVybiBXR1BVSW5kZXhGb3JtYXRfVWludDMyOworICAgIH0KK30K
KworV0dQVUxvYWRPcCBjb252ZXJ0VG9CYWNraW5nKExvYWRPcCBsb2FkT3ApCit7CisgICAgc3dp
dGNoIChsb2FkT3ApIHsKKyAgICBjYXNlIExvYWRPcDo6TG9hZDoKKyAgICAgICAgcmV0dXJuIFdH
UFVMb2FkT3BfTG9hZDsKKyAgICB9Cit9CisKK1dHUFVQaXBlbGluZVN0YXRpc3RpY05hbWUgY29u
dmVydFRvQmFja2luZyhQaXBlbGluZVN0YXRpc3RpY05hbWUgcGlwZWxpbmVTdGF0aXN0aWNOYW1l
KQoreworICAgIHN3aXRjaCAocGlwZWxpbmVTdGF0aXN0aWNOYW1lKSB7CisgICAgY2FzZSBQaXBl
bGluZVN0YXRpc3RpY05hbWU6OlZlcnRleFNoYWRlckludm9jYXRpb25zOgorICAgICAgICByZXR1
cm4gV0dQVVBpcGVsaW5lU3RhdGlzdGljTmFtZV9WZXJ0ZXhTaGFkZXJJbnZvY2F0aW9uczsKKyAg
ICBjYXNlIFBpcGVsaW5lU3RhdGlzdGljTmFtZTo6Q2xpcHBlckludm9jYXRpb25zOgorICAgICAg
ICByZXR1cm4gV0dQVVBpcGVsaW5lU3RhdGlzdGljTmFtZV9DbGlwcGVySW52b2NhdGlvbnM7Cisg
ICAgY2FzZSBQaXBlbGluZVN0YXRpc3RpY05hbWU6OkNsaXBwZXJQcmltaXRpdmVzT3V0OgorICAg
ICAgICByZXR1cm4gV0dQVVBpcGVsaW5lU3RhdGlzdGljTmFtZV9DbGlwcGVyUHJpbWl0aXZlc091
dDsKKyAgICBjYXNlIFBpcGVsaW5lU3RhdGlzdGljTmFtZTo6RnJhZ21lbnRTaGFkZXJJbnZvY2F0
aW9uczoKKyAgICAgICAgcmV0dXJuIFdHUFVQaXBlbGluZVN0YXRpc3RpY05hbWVfRnJhZ21lbnRT
aGFkZXJJbnZvY2F0aW9uczsKKyAgICBjYXNlIFBpcGVsaW5lU3RhdGlzdGljTmFtZTo6Q29tcHV0
ZVNoYWRlckludm9jYXRpb25zOgorICAgICAgICByZXR1cm4gV0dQVVBpcGVsaW5lU3RhdGlzdGlj
TmFtZV9Db21wdXRlU2hhZGVySW52b2NhdGlvbnM7CisgICAgfQorfQorCitXR1BVUG93ZXJQcmVm
ZXJlbmNlIGNvbnZlcnRUb0JhY2tpbmcoUG93ZXJQcmVmZXJlbmNlIHBvd2VyUHJlZmVyZW5jZSkK
K3sKKyAgICBzd2l0Y2ggKHBvd2VyUHJlZmVyZW5jZSkgeworICAgIGNhc2UgUG93ZXJQcmVmZXJl
bmNlOjpMb3dQb3dlcjoKKyAgICAgICAgcmV0dXJuIFdHUFVQb3dlclByZWZlcmVuY2VfTG93UG93
ZXI7CisgICAgY2FzZSBQb3dlclByZWZlcmVuY2U6OkhpZ2hQZXJmb3JtYW5jZToKKyAgICAgICAg
cmV0dXJuIFdHUFVQb3dlclByZWZlcmVuY2VfSGlnaFBlcmZvcm1hbmNlOworICAgIH0KK30KKwor
V0dQVVByaW1pdGl2ZVRvcG9sb2d5IGNvbnZlcnRUb0JhY2tpbmcoUHJpbWl0aXZlVG9wb2xvZ3kg
cHJpbWl0aXZlVG9wb2xvZ3kpCit7CisgICAgc3dpdGNoIChwcmltaXRpdmVUb3BvbG9neSkgewor
ICAgIGNhc2UgUHJpbWl0aXZlVG9wb2xvZ3k6OlBvaW50TGlzdDoKKyAgICAgICAgcmV0dXJuIFdH
UFVQcmltaXRpdmVUb3BvbG9neV9Qb2ludExpc3Q7CisgICAgY2FzZSBQcmltaXRpdmVUb3BvbG9n
eTo6TGluZUxpc3Q6CisgICAgICAgIHJldHVybiBXR1BVUHJpbWl0aXZlVG9wb2xvZ3lfTGluZUxp
c3Q7CisgICAgY2FzZSBQcmltaXRpdmVUb3BvbG9neTo6TGluZVN0cmlwOgorICAgICAgICByZXR1
cm4gV0dQVVByaW1pdGl2ZVRvcG9sb2d5X0xpbmVTdHJpcDsKKyAgICBjYXNlIFByaW1pdGl2ZVRv
cG9sb2d5OjpUcmlhbmdsZUxpc3Q6CisgICAgICAgIHJldHVybiBXR1BVUHJpbWl0aXZlVG9wb2xv
Z3lfVHJpYW5nbGVMaXN0OworICAgIGNhc2UgUHJpbWl0aXZlVG9wb2xvZ3k6OlRyaWFuZ2xlU3Ry
aXA6CisgICAgICAgIHJldHVybiBXR1BVUHJpbWl0aXZlVG9wb2xvZ3lfVHJpYW5nbGVTdHJpcDsK
KyAgICB9Cit9CisKK1dHUFVRdWVyeVR5cGUgY29udmVydFRvQmFja2luZyhRdWVyeVR5cGUgcXVl
cnlUeXBlKQoreworICAgIHN3aXRjaCAocXVlcnlUeXBlKSB7CisgICAgY2FzZSBRdWVyeVR5cGU6
Ok9jY2x1c2lvbjoKKyAgICAgICAgcmV0dXJuIFdHUFVRdWVyeVR5cGVfT2NjbHVzaW9uOworICAg
IGNhc2UgUXVlcnlUeXBlOjpQaXBlbGluZVN0YXRpc3RpY3M6CisgICAgICAgIHJldHVybiBXR1BV
UXVlcnlUeXBlX1BpcGVsaW5lU3RhdGlzdGljczsKKyAgICBjYXNlIFF1ZXJ5VHlwZTo6VGltZXN0
YW1wOgorICAgICAgICByZXR1cm4gV0dQVVF1ZXJ5VHlwZV9UaW1lc3RhbXA7CisgICAgfQorfQor
CitXR1BVU2FtcGxlckJpbmRpbmdUeXBlIGNvbnZlcnRUb0JhY2tpbmcoU2FtcGxlckJpbmRpbmdU
eXBlIHNhbXBsZXJCaW5kaW5nVHlwZSkKK3sKKyAgICBzd2l0Y2ggKHNhbXBsZXJCaW5kaW5nVHlw
ZSkgeworICAgIGNhc2UgU2FtcGxlckJpbmRpbmdUeXBlOjpGaWx0ZXJpbmc6CisgICAgICAgIHJl
dHVybiBXR1BVU2FtcGxlckJpbmRpbmdUeXBlX0ZpbHRlcmluZzsKKyAgICBjYXNlIFNhbXBsZXJC
aW5kaW5nVHlwZTo6Tm9uRmlsdGVyaW5nOgorICAgICAgICByZXR1cm4gV0dQVVNhbXBsZXJCaW5k
aW5nVHlwZV9Ob25GaWx0ZXJpbmc7CisgICAgY2FzZSBTYW1wbGVyQmluZGluZ1R5cGU6OkNvbXBh
cmlzb246CisgICAgICAgIHJldHVybiBXR1BVU2FtcGxlckJpbmRpbmdUeXBlX0NvbXBhcmlzb247
CisgICAgfQorfQorCitXR1BVU3RlbmNpbE9wZXJhdGlvbiBjb252ZXJ0VG9CYWNraW5nKFN0ZW5j
aWxPcGVyYXRpb24gc3RlbmNpbE9wZXJhdGlvbikKK3sKKyAgICBzd2l0Y2ggKHN0ZW5jaWxPcGVy
YXRpb24pIHsKKyAgICBjYXNlIFN0ZW5jaWxPcGVyYXRpb246OktlZXA6CisgICAgICAgIHJldHVy
biBXR1BVU3RlbmNpbE9wZXJhdGlvbl9LZWVwOworICAgIGNhc2UgU3RlbmNpbE9wZXJhdGlvbjo6
WmVybzoKKyAgICAgICAgcmV0dXJuIFdHUFVTdGVuY2lsT3BlcmF0aW9uX1plcm87CisgICAgY2Fz
ZSBTdGVuY2lsT3BlcmF0aW9uOjpSZXBsYWNlOgorICAgICAgICByZXR1cm4gV0dQVVN0ZW5jaWxP
cGVyYXRpb25fUmVwbGFjZTsKKyAgICBjYXNlIFN0ZW5jaWxPcGVyYXRpb246OkludmVydDoKKyAg
ICAgICAgcmV0dXJuIFdHUFVTdGVuY2lsT3BlcmF0aW9uX0ludmVydDsKKyAgICBjYXNlIFN0ZW5j
aWxPcGVyYXRpb246OkluY3JlbWVudENsYW1wOgorICAgICAgICByZXR1cm4gV0dQVVN0ZW5jaWxP
cGVyYXRpb25fSW5jcmVtZW50Q2xhbXA7CisgICAgY2FzZSBTdGVuY2lsT3BlcmF0aW9uOjpEZWNy
ZW1lbnRDbGFtcDoKKyAgICAgICAgcmV0dXJuIFdHUFVTdGVuY2lsT3BlcmF0aW9uX0RlY3JlbWVu
dENsYW1wOworICAgIGNhc2UgU3RlbmNpbE9wZXJhdGlvbjo6SW5jcmVtZW50V3JhcDoKKyAgICAg
ICAgcmV0dXJuIFdHUFVTdGVuY2lsT3BlcmF0aW9uX0luY3JlbWVudFdyYXA7CisgICAgY2FzZSBT
dGVuY2lsT3BlcmF0aW9uOjpEZWNyZW1lbnRXcmFwOgorICAgICAgICByZXR1cm4gV0dQVVN0ZW5j
aWxPcGVyYXRpb25fRGVjcmVtZW50V3JhcDsKKyAgICB9Cit9CisKK1dHUFVTdG9yYWdlVGV4dHVy
ZUFjY2VzcyBjb252ZXJ0VG9CYWNraW5nKFN0b3JhZ2VUZXh0dXJlQWNjZXNzIHN0b3JhZ2VUZXh0
dXJlQWNjZXNzKQoreworICAgIHN3aXRjaCAoc3RvcmFnZVRleHR1cmVBY2Nlc3MpIHsKKyAgICBj
YXNlIFN0b3JhZ2VUZXh0dXJlQWNjZXNzOjpXcml0ZU9ubHk6CisgICAgICAgIHJldHVybiBXR1BV
U3RvcmFnZVRleHR1cmVBY2Nlc3NfV3JpdGVPbmx5OworICAgIH0KK30KKworV0dQVVN0b3JlT3Ag
Y29udmVydFRvQmFja2luZyhTdG9yZU9wIHN0b3JlT3ApCit7CisgICAgc3dpdGNoIChzdG9yZU9w
KSB7CisgICAgY2FzZSBTdG9yZU9wOjpTdG9yZToKKyAgICAgICAgcmV0dXJuIFdHUFVTdG9yZU9w
X1N0b3JlOworICAgIGNhc2UgU3RvcmVPcDo6RGlzY2FyZDoKKyAgICAgICAgcmV0dXJuIFdHUFVT
dG9yZU9wX0Rpc2NhcmQ7CisgICAgfQorfQorCitXR1BVVGV4dHVyZUFzcGVjdCBjb252ZXJ0VG9C
YWNraW5nKFRleHR1cmVBc3BlY3QgdGV4dHVyZUFzcGVjdCkKK3sKKyAgICBzd2l0Y2ggKHRleHR1
cmVBc3BlY3QpIHsKKyAgICBjYXNlIFRleHR1cmVBc3BlY3Q6OkFsbDoKKyAgICAgICAgcmV0dXJu
IFdHUFVUZXh0dXJlQXNwZWN0X0FsbDsKKyAgICBjYXNlIFRleHR1cmVBc3BlY3Q6OlN0ZW5jaWxP
bmx5OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVBc3BlY3RfU3RlbmNpbE9ubHk7CisgICAg
Y2FzZSBUZXh0dXJlQXNwZWN0OjpEZXB0aE9ubHk6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVy
ZUFzcGVjdF9EZXB0aE9ubHk7CisgICAgfQorfQorCitXR1BVVGV4dHVyZURpbWVuc2lvbiBjb252
ZXJ0VG9CYWNraW5nKFRleHR1cmVEaW1lbnNpb24gdGV4dHVyZURpbWVuc2lvbikKK3sKKyAgICBz
d2l0Y2ggKHRleHR1cmVEaW1lbnNpb24pIHsKKyAgICBjYXNlIFRleHR1cmVEaW1lbnNpb246Ol8x
ZDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRGltZW5zaW9uXzFEOworICAgIGNhc2UgVGV4
dHVyZURpbWVuc2lvbjo6XzJkOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVEaW1lbnNpb25f
MkQ7CisgICAgY2FzZSBUZXh0dXJlRGltZW5zaW9uOjpfM2Q6CisgICAgICAgIHJldHVybiBXR1BV
VGV4dHVyZURpbWVuc2lvbl8zRDsKKyAgICB9Cit9CisKK1dHUFVUZXh0dXJlRm9ybWF0IGNvbnZl
cnRUb0JhY2tpbmcoVGV4dHVyZUZvcm1hdCB0ZXh0dXJlRm9ybWF0KQoreworICAgIHN3aXRjaCAo
dGV4dHVyZUZvcm1hdCkgeworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6Ujh1bm9ybToKKyAgICAg
ICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1I4VW5vcm07CisgICAgY2FzZSBUZXh0dXJlRm9y
bWF0OjpSOHNub3JtOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUjhTbm9ybTsK
KyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OlI4dWludDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0
dXJlRm9ybWF0X1I4VWludDsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OlI4c2ludDoKKyAgICAg
ICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1I4U2ludDsKKyAgICBjYXNlIFRleHR1cmVGb3Jt
YXQ6OlIxNnVpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SMTZVaW50Owor
ICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UjE2c2ludDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0
dXJlRm9ybWF0X1IxNlNpbnQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSMTZmbG9hdDoKKyAg
ICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1IxNkZsb2F0OworICAgIGNhc2UgVGV4dHVy
ZUZvcm1hdDo6Umc4dW5vcm06CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SRzhV
bm9ybTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OlJnOHNub3JtOgorICAgICAgICByZXR1cm4g
V0dQVVRleHR1cmVGb3JtYXRfUkc4U25vcm07CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZzh1
aW50OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkc4VWludDsKKyAgICBjYXNl
IFRleHR1cmVGb3JtYXQ6OlJnOHNpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1h
dF9SRzhTaW50OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UjMydWludDoKKyAgICAgICAgcmV0
dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1IzMlVpbnQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpS
MzJzaW50OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUjMyU2ludDsKKyAgICBj
YXNlIFRleHR1cmVGb3JtYXQ6OlIzMmZsb2F0OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVG
b3JtYXRfUjMyRmxvYXQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZzE2dWludDoKKyAgICAg
ICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1JHMTZVaW50OworICAgIGNhc2UgVGV4dHVyZUZv
cm1hdDo6UmcxNnNpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SRzE2U2lu
dDsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OlJnMTZmbG9hdDoKKyAgICAgICAgcmV0dXJuIFdH
UFVUZXh0dXJlRm9ybWF0X1JHMTZGbG9hdDsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OlJnYmE4
dW5vcm06CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFVub3JtOworICAg
IGNhc2UgVGV4dHVyZUZvcm1hdDo6UmdiYTh1bm9ybVNSR0I6CisgICAgICAgIHJldHVybiBXR1BV
VGV4dHVyZUZvcm1hdF9SR0JBOFVub3JtU3JnYjsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OlJn
YmE4c25vcm06CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFNub3JtOwor
ICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UmdiYTh1aW50OgorICAgICAgICByZXR1cm4gV0dQVVRl
eHR1cmVGb3JtYXRfUkdCQThVaW50OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UmdiYThzaW50
OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkdCQThTaW50OworICAgIGNhc2Ug
VGV4dHVyZUZvcm1hdDo6QmdyYTh1bm9ybToKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9y
bWF0X0JHUkE4VW5vcm07CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpCZ3JhOHVub3JtU1JHQjoK
KyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0JHUkE4VW5vcm1TcmdiOworICAgIGNh
c2UgVGV4dHVyZUZvcm1hdDo6UmdiOWU1dWZsb2F0OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1
cmVGb3JtYXRfUkdCOUU1VWZsb2F0OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UmdiMTBhMnVu
b3JtOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkdCMTBBMlVub3JtOworICAg
IGNhc2UgVGV4dHVyZUZvcm1hdDo6UmcxMWIxMHVmbG9hdDoKKyAgICAgICAgcmV0dXJuIFdHUFVU
ZXh0dXJlRm9ybWF0X1JHMTFCMTBVZmxvYXQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZzMy
dWludDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1JHMzJVaW50OworICAgIGNh
c2UgVGV4dHVyZUZvcm1hdDo6UmczMnNpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZv
cm1hdF9SRzMyU2ludDsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OlJnMzJmbG9hdDoKKyAgICAg
ICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1JHMzJGbG9hdDsKKyAgICBjYXNlIFRleHR1cmVG
b3JtYXQ6OlJnYmExNnVpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SR0JB
MTZVaW50OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UmdiYTE2c2ludDoKKyAgICAgICAgcmV0
dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkExNlNpbnQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0
OjpSZ2JhMTZmbG9hdDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkExNkZs
b2F0OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UmdiYTMydWludDoKKyAgICAgICAgcmV0dXJu
IFdHUFVUZXh0dXJlRm9ybWF0X1JHQkEzMlVpbnQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpS
Z2JhMzJzaW50OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkdCQTMyU2ludDsK
KyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OlJnYmEzMmZsb2F0OgorICAgICAgICByZXR1cm4gV0dQ
VVRleHR1cmVGb3JtYXRfUkdCQTMyRmxvYXQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpTdGVu
Y2lsODoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1N0ZW5jaWw4OworICAgIGNh
c2UgVGV4dHVyZUZvcm1hdDo6RGVwdGgxNnVub3JtOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1
cmVGb3JtYXRfRGVwdGgxNlVub3JtOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6RGVwdGgyNHBs
dXM6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDI0UGx1czsKKyAgICBj
YXNlIFRleHR1cmVGb3JtYXQ6OkRlcHRoMjRwbHVzU3RlbmNpbDg6CisgICAgICAgIHJldHVybiBX
R1BVVGV4dHVyZUZvcm1hdF9EZXB0aDI0UGx1c1N0ZW5jaWw4OworICAgIGNhc2UgVGV4dHVyZUZv
cm1hdDo6RGVwdGgzMmZsb2F0OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfRGVw
dGgzMkZsb2F0OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QmMxUmdiYVVub3JtOgorICAgICAg
ICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQkMxUkdCQVVub3JtOworICAgIGNhc2UgVGV4dHVy
ZUZvcm1hdDo6QmMxUmdiYVVub3JtU1JHQjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9y
bWF0X0JDMVJHQkFVbm9ybVNyZ2I7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpCYzJSZ2JhVW5v
cm06CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9CQzJSR0JBVW5vcm07CisgICAg
Y2FzZSBUZXh0dXJlRm9ybWF0OjpCYzJSZ2JhVW5vcm1TUkdCOgorICAgICAgICByZXR1cm4gV0dQ
VVRleHR1cmVGb3JtYXRfQkMyUkdCQVVub3JtU3JnYjsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6
OkJjM1JnYmFVbm9ybToKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0JDM1JHQkFV
bm9ybTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkJjM1JnYmFVbm9ybVNSR0I6CisgICAgICAg
IHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9CQzNSR0JBVW5vcm1TcmdiOworICAgIGNhc2UgVGV4
dHVyZUZvcm1hdDo6QmM0UlVub3JtOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRf
QkM0UlVub3JtOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QmM0UlNub3JtOgorICAgICAgICBy
ZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQkM0UlNub3JtOworICAgIGNhc2UgVGV4dHVyZUZvcm1h
dDo6QmM1UmdVbm9ybToKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0JDNVJHVW5v
cm07CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpCYzVSZ1Nub3JtOgorICAgICAgICByZXR1cm4g
V0dQVVRleHR1cmVGb3JtYXRfQkM1UkdTbm9ybTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkJj
NmhSZ2JVZmxvYXQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9CQzZIUkdCVWZs
b2F0OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QmM2aFJnYkZsb2F0OgorICAgICAgICByZXR1
cm4gV0dQVVRleHR1cmVGb3JtYXRfQkM2SFJHQkZsb2F0OworICAgIGNhc2UgVGV4dHVyZUZvcm1h
dDo6QmM3UmdiYVVub3JtOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQkM3UkdC
QVVub3JtOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QmM3UmdiYVVub3JtU1JHQjoKKyAgICAg
ICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0JDN1JHQkFVbm9ybVNyZ2I7CisgICAgY2FzZSBU
ZXh0dXJlRm9ybWF0OjpFdGMyUmdiOHVub3JtOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4VW5vcm0pOworICAg
IGNhc2UgVGV4dHVyZUZvcm1hdDo6RXRjMlJnYjh1bm9ybVNSR0I6CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjh1
bm9ybVNyZ2IpOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6RXRjMlJnYjhhMXVub3JtOgorICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9y
bWF0X0VUQzJSR0I4YTFVbm9ybSk7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpFdGMyUmdiOGEx
dW5vcm1TUkdCOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+
KFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4YTF1bm9ybVNyZ2IpOworICAgIGNhc2UgVGV4dHVy
ZUZvcm1hdDo6RXRjMlJnYmE4dW5vcm06CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BV
VGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQkE4VW5vcm0pOworICAgIGNh
c2UgVGV4dHVyZUZvcm1hdDo6RXRjMlJnYmE4dW5vcm1TUkdCOgorICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0JBOFVu
b3JtU3JnYik7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpFYWNSMTF1bm9ybToKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9F
QUNSMTFVbm9ybSk7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpFYWNSMTFzbm9ybToKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1h
dF9FQUNSMTFTbm9ybSk7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpFYWNSZzExdW5vcm06Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVG
b3JtYXRfRUFDUkcxMVVub3JtKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkVhY1JnMTFzbm9y
bToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4
dHVyZUZvcm1hdF9FQUNSRzExU25vcm0pOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0YzR4
NFVub3JtOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdH
UFVUZXh0dXJlRm9ybWF0X0FTVEM0eDRVbm9ybSk7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpB
c3RjNHg0VW5vcm1TUkdCOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVG
b3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM0eDRVbm9ybVNyZ2IpOworICAgIGNhc2UgVGV4
dHVyZUZvcm1hdDo6QXN0YzV4NFVub3JtOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQ
VVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM1eDRVbm9ybSk7CisgICAgY2Fz
ZSBUZXh0dXJlRm9ybWF0OjpBc3RjNXg0VW5vcm1TUkdCOgorICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM1eDRVbm9ybVNy
Z2IpOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0YzV4NVVub3JtOgorICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM1
eDVVbm9ybSk7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpBc3RjNXg1VW5vcm1TUkdCOgorICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9y
bWF0X0FTVEM1eDVVbm9ybVNyZ2IpOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0YzZ4NVVu
b3JtOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVU
ZXh0dXJlRm9ybWF0X0FTVEM2eDVVbm9ybSk7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpBc3Rj
Nng1VW5vcm1TUkdCOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3Jt
YXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2eDVVbm9ybVNyZ2IpOworICAgIGNhc2UgVGV4dHVy
ZUZvcm1hdDo6QXN0YzZ4NlVub3JtOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRl
eHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2eDZVbm9ybSk7CisgICAgY2FzZSBU
ZXh0dXJlRm9ybWF0OjpBc3RjNng2VW5vcm1TUkdCOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM2eDZVbm9ybVNyZ2Ip
OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0Yzh4NVVub3JtOgorICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDVV
bm9ybSk7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpBc3RjOHg1VW5vcm1TUkdCOgorICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0
X0FTVEM4eDVVbm9ybVNyZ2IpOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0Yzh4NlVub3Jt
OgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0
dXJlRm9ybWF0X0FTVEM4eDZVbm9ybSk7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpBc3RjOHg2
VW5vcm1TUkdCOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+
KFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDZVbm9ybVNyZ2IpOworICAgIGNhc2UgVGV4dHVyZUZv
cm1hdDo6QXN0Yzh4OFVub3JtOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1
cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDhVbm9ybSk7CisgICAgY2FzZSBUZXh0
dXJlRm9ybWF0OjpBc3RjOHg4VW5vcm1TUkdCOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0FTVEM4eDhVbm9ybVNyZ2IpOwor
ICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0YzEweDVVbm9ybToKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4NVVu
b3JtKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGMxMHg1VW5vcm1TUkdCOgorICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0
X0FTVEMxMHg1VW5vcm1TcmdiKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGMxMHg2VW5v
cm06CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRl
eHR1cmVGb3JtYXRfQVNUQzEweDZVbm9ybSk7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpBc3Rj
MTB4NlVub3JtU1JHQjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9y
bWF0PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4NlVub3JtU3JnYik7CisgICAgY2FzZSBUZXh0
dXJlRm9ybWF0OjpBc3RjMTB4OFVub3JtOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQ
VVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg4VW5vcm0pOworICAgIGNh
c2UgVGV4dHVyZUZvcm1hdDo6QXN0YzEweDhVbm9ybVNSR0I6CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDhVbm9y
bVNyZ2IpOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0YzEweDEwVW5vcm06CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRf
QVNUQzEweDEwVW5vcm0pOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0YzEweDEwVW5vcm1T
UkdCOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVU
ZXh0dXJlRm9ybWF0X0FTVEMxMHgxMFVub3JtU3JnYik7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0
OjpBc3RjMTJ4MTBVbm9ybToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJl
Rm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4MTBVbm9ybSk7CisgICAgY2FzZSBUZXh0
dXJlRm9ybWF0OjpBc3RjMTJ4MTBVbm9ybVNSR0I6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEyeDEwVW5vcm1Tcmdi
KTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGMxMngxMlVub3JtOgorICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMx
MngxMlVub3JtKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGMxMngxMlVub3JtU1JHQjoK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVy
ZUZvcm1hdF9BU1RDMTJ4MTJVbm9ybVNyZ2IpOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6RGVw
dGgyNHVub3JtU3RlbmNpbDg6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0
aDI0UGx1c1N0ZW5jaWw4OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6RGVwdGgzMmZsb2F0U3Rl
bmNpbDg6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQ
VVRleHR1cmVGb3JtYXRfRGVwdGgzMkZsb2F0U3RlbmNpbDgpOworICAgIH0KK30KKworV0dQVVRl
eHR1cmVTYW1wbGVUeXBlIGNvbnZlcnRUb0JhY2tpbmcoVGV4dHVyZVNhbXBsZVR5cGUgdGV4dHVy
ZVNhbXBsZVR5cGUpCit7CisgICAgc3dpdGNoICh0ZXh0dXJlU2FtcGxlVHlwZSkgeworICAgIGNh
c2UgVGV4dHVyZVNhbXBsZVR5cGU6OkZsb2F0OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVT
YW1wbGVUeXBlX0Zsb2F0OworICAgIGNhc2UgVGV4dHVyZVNhbXBsZVR5cGU6OlVuZmlsdGVyYWJs
ZUZsb2F0OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVTYW1wbGVUeXBlX1VuZmlsdGVyYWJs
ZUZsb2F0OworICAgIGNhc2UgVGV4dHVyZVNhbXBsZVR5cGU6OkRlcHRoOgorICAgICAgICByZXR1
cm4gV0dQVVRleHR1cmVTYW1wbGVUeXBlX0RlcHRoOworICAgIGNhc2UgVGV4dHVyZVNhbXBsZVR5
cGU6OlNpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZVNhbXBsZVR5cGVfU2ludDsKKyAg
ICBjYXNlIFRleHR1cmVTYW1wbGVUeXBlOjpVaW50OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1
cmVTYW1wbGVUeXBlX1VpbnQ7CisgICAgfQorfQorCitXR1BVVGV4dHVyZVZpZXdEaW1lbnNpb24g
Y29udmVydFRvQmFja2luZyhUZXh0dXJlVmlld0RpbWVuc2lvbiB0ZXh0dXJlVmlld0RpbWVuc2lv
bikKK3sKKyAgICBzd2l0Y2ggKHRleHR1cmVWaWV3RGltZW5zaW9uKSB7CisgICAgY2FzZSBUZXh0
dXJlVmlld0RpbWVuc2lvbjo6XzFkOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVWaWV3RGlt
ZW5zaW9uXzFEOworICAgIGNhc2UgVGV4dHVyZVZpZXdEaW1lbnNpb246Ol8yZDoKKyAgICAgICAg
cmV0dXJuIFdHUFVUZXh0dXJlVmlld0RpbWVuc2lvbl8yRDsKKyAgICBjYXNlIFRleHR1cmVWaWV3
RGltZW5zaW9uOjpfMmRBcnJheToKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlVmlld0RpbWVu
c2lvbl8yREFycmF5OworICAgIGNhc2UgVGV4dHVyZVZpZXdEaW1lbnNpb246OkN1YmU6CisgICAg
ICAgIHJldHVybiBXR1BVVGV4dHVyZVZpZXdEaW1lbnNpb25fQ3ViZTsKKyAgICBjYXNlIFRleHR1
cmVWaWV3RGltZW5zaW9uOjpDdWJlQXJyYXk6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZVZp
ZXdEaW1lbnNpb25fQ3ViZUFycmF5OworICAgIGNhc2UgVGV4dHVyZVZpZXdEaW1lbnNpb246Ol8z
ZDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlVmlld0RpbWVuc2lvbl8zRDsKKyAgICB9Cit9
CisKK1dHUFVWZXJ0ZXhGb3JtYXQgY29udmVydFRvQmFja2luZyhWZXJ0ZXhGb3JtYXQgdmVydGV4
Rm9ybWF0KQoreworICAgIHN3aXRjaCAodmVydGV4Rm9ybWF0KSB7CisgICAgY2FzZSBWZXJ0ZXhG
b3JtYXQ6OlVpbnQ4eDI6CisgICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X1VpbnQ4eDI7
CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlVpbnQ4eDQ6CisgICAgICAgIHJldHVybiBXR1BVVmVy
dGV4Rm9ybWF0X1VpbnQ4eDQ7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlNpbnQ4eDI6CisgICAg
ICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X1NpbnQ4eDI7CisgICAgY2FzZSBWZXJ0ZXhGb3Jt
YXQ6OlNpbnQ4eDQ6CisgICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X1NpbnQ4eDQ7Cisg
ICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlVub3JtOHgyOgorICAgICAgICByZXR1cm4gV0dQVVZlcnRl
eEZvcm1hdF9Vbm9ybTh4MjsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6VW5vcm04eDQ6CisgICAg
ICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X1Vub3JtOHg0OworICAgIGNhc2UgVmVydGV4Rm9y
bWF0OjpTbm9ybTh4MjoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfU25vcm04eDI7
CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlNub3JtOHg0OgorICAgICAgICByZXR1cm4gV0dQVVZl
cnRleEZvcm1hdF9Tbm9ybTh4NDsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6VWludDE2eDI6Cisg
ICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X1VpbnQxNngyOworICAgIGNhc2UgVmVydGV4
Rm9ybWF0OjpVaW50MTZ4NDoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfVWludDE2
eDQ7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlNpbnQxNngyOgorICAgICAgICByZXR1cm4gV0dQ
VVZlcnRleEZvcm1hdF9TaW50MTZ4MjsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6U2ludDE2eDQ6
CisgICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X1NpbnQxNng0OworICAgIGNhc2UgVmVy
dGV4Rm9ybWF0OjpVbm9ybTE2eDI6CisgICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X1Vu
b3JtMTZ4MjsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6VW5vcm0xNng0OgorICAgICAgICByZXR1
cm4gV0dQVVZlcnRleEZvcm1hdF9Vbm9ybTE2eDQ7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlNu
b3JtMTZ4MjoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfU25vcm0xNngyOworICAg
IGNhc2UgVmVydGV4Rm9ybWF0OjpTbm9ybTE2eDQ6CisgICAgICAgIHJldHVybiBXR1BVVmVydGV4
Rm9ybWF0X1Nub3JtMTZ4NDsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6RmxvYXQxNngyOgorICAg
ICAgICByZXR1cm4gV0dQVVZlcnRleEZvcm1hdF9GbG9hdDE2eDI7CisgICAgY2FzZSBWZXJ0ZXhG
b3JtYXQ6OkZsb2F0MTZ4NDoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfRmxvYXQx
Nng0OworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpGbG9hdDMyOgorICAgICAgICByZXR1cm4gV0dQ
VVZlcnRleEZvcm1hdF9GbG9hdDMyOworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpGbG9hdDMyeDI6
CisgICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X0Zsb2F0MzJ4MjsKKyAgICBjYXNlIFZl
cnRleEZvcm1hdDo6RmxvYXQzMngzOgorICAgICAgICByZXR1cm4gV0dQVVZlcnRleEZvcm1hdF9G
bG9hdDMyeDM7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OkZsb2F0MzJ4NDoKKyAgICAgICAgcmV0
dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfRmxvYXQzMng0OworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpV
aW50MzI6CisgICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X1VpbnQzMjsKKyAgICBjYXNl
IFZlcnRleEZvcm1hdDo6VWludDMyeDI6CisgICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0
X1VpbnQzMngyOworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpVaW50MzJ4MzoKKyAgICAgICAgcmV0
dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfVWludDMyeDM7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlVp
bnQzMng0OgorICAgICAgICByZXR1cm4gV0dQVVZlcnRleEZvcm1hdF9VaW50MzJ4NDsKKyAgICBj
YXNlIFZlcnRleEZvcm1hdDo6U2ludDMyOgorICAgICAgICByZXR1cm4gV0dQVVZlcnRleEZvcm1h
dF9TaW50MzI7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlNpbnQzMngyOgorICAgICAgICByZXR1
cm4gV0dQVVZlcnRleEZvcm1hdF9TaW50MzJ4MjsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6U2lu
dDMyeDM6CisgICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X1NpbnQzMngzOworICAgIGNh
c2UgVmVydGV4Rm9ybWF0OjpTaW50MzJ4NDoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3Jt
YXRfU2ludDMyeDQ7CisgICAgfQorfQorCitXR1BVVmVydGV4U3RlcE1vZGUgY29udmVydFRvQmFj
a2luZyhWZXJ0ZXhTdGVwTW9kZSB2ZXJ0ZXhTdGVwTW9kZSkKK3sKKyAgICBzd2l0Y2ggKHZlcnRl
eFN0ZXBNb2RlKSB7CisgICAgY2FzZSBWZXJ0ZXhTdGVwTW9kZTo6VmVydGV4OgorICAgICAgICBy
ZXR1cm4gV0dQVVZlcnRleFN0ZXBNb2RlX1ZlcnRleDsKKyAgICBjYXNlIFZlcnRleFN0ZXBNb2Rl
OjpJbnN0YW5jZToKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhTdGVwTW9kZV9JbnN0YW5jZTsK
KyAgICB9Cit9CisKK1dHUFVCdWZmZXJVc2FnZUZsYWdzIGNvbnZlcnRCdWZmZXJVc2FnZUZsYWdz
VG9CYWNraW5nKEJ1ZmZlclVzYWdlRmxhZ3MgYnVmZmVyVXNhZ2VGbGFncykKK3sKKyAgICBXR1BV
QnVmZmVyVXNhZ2VGbGFncyByZXN1bHQgPSAwOworICAgIGlmIChidWZmZXJVc2FnZUZsYWdzICYg
QnVmZmVyVXNhZ2U6Ok1BUF9SRUFEKQorICAgICAgICByZXN1bHQgfD0gV0dQVUJ1ZmZlclVzYWdl
X01hcFJlYWQ7CisgICAgaWYgKGJ1ZmZlclVzYWdlRmxhZ3MgJiBCdWZmZXJVc2FnZTo6TUFQX1dS
SVRFKQorICAgICAgICByZXN1bHQgfD0gV0dQVUJ1ZmZlclVzYWdlX01hcFdyaXRlOworICAgIGlm
IChidWZmZXJVc2FnZUZsYWdzICYgQnVmZmVyVXNhZ2U6OkNPUFlfU1JDKQorICAgICAgICByZXN1
bHQgfD0gV0dQVUJ1ZmZlclVzYWdlX0NvcHlTcmM7CisgICAgaWYgKGJ1ZmZlclVzYWdlRmxhZ3Mg
JiBCdWZmZXJVc2FnZTo6Q09QWV9EU1QpCisgICAgICAgIHJlc3VsdCB8PSBXR1BVQnVmZmVyVXNh
Z2VfQ29weURzdDsKKyAgICBpZiAoYnVmZmVyVXNhZ2VGbGFncyAmIEJ1ZmZlclVzYWdlOjpJTkRF
WCkKKyAgICAgICAgcmVzdWx0IHw9IFdHUFVCdWZmZXJVc2FnZV9JbmRleDsKKyAgICBpZiAoYnVm
ZmVyVXNhZ2VGbGFncyAmIEJ1ZmZlclVzYWdlOjpWRVJURVgpCisgICAgICAgIHJlc3VsdCB8PSBX
R1BVQnVmZmVyVXNhZ2VfVmVydGV4OworICAgIGlmIChidWZmZXJVc2FnZUZsYWdzICYgQnVmZmVy
VXNhZ2U6OlVOSUZPUk0pCisgICAgICAgIHJlc3VsdCB8PSBXR1BVQnVmZmVyVXNhZ2VfVW5pZm9y
bTsKKyAgICBpZiAoYnVmZmVyVXNhZ2VGbGFncyAmIEJ1ZmZlclVzYWdlOjpTVE9SQUdFKQorICAg
ICAgICByZXN1bHQgfD0gV0dQVUJ1ZmZlclVzYWdlX1N0b3JhZ2U7CisgICAgaWYgKGJ1ZmZlclVz
YWdlRmxhZ3MgJiBCdWZmZXJVc2FnZTo6SU5ESVJFQ1QpCisgICAgICAgIHJlc3VsdCB8PSBXR1BV
QnVmZmVyVXNhZ2VfSW5kaXJlY3Q7CisgICAgaWYgKGJ1ZmZlclVzYWdlRmxhZ3MgJiBCdWZmZXJV
c2FnZTo6UVVFUllfUkVTT0xWRSkKKyAgICAgICAgcmVzdWx0IHw9IFdHUFVCdWZmZXJVc2FnZV9R
dWVyeVJlc29sdmU7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV0dQVUNvbG9yV3JpdGVNYXNr
RmxhZ3MgY29udmVydENvbG9yV3JpdGVGbGFnc1RvQmFja2luZyhDb2xvcldyaXRlRmxhZ3MgY29s
b3JXcml0ZUZsYWdzKQoreworICAgIFdHUFVDb2xvcldyaXRlTWFza0ZsYWdzIHJlc3VsdCA9IDA7
CisgICAgaWYgKGNvbG9yV3JpdGVGbGFncyAmIENvbG9yV3JpdGU6OlJFRCkKKyAgICAgICAgcmVz
dWx0IHw9IFdHUFVDb2xvcldyaXRlTWFza19SZWQ7CisgICAgaWYgKGNvbG9yV3JpdGVGbGFncyAm
IENvbG9yV3JpdGU6OkdSRUVOKQorICAgICAgICByZXN1bHQgfD0gV0dQVUNvbG9yV3JpdGVNYXNr
X0dyZWVuOworICAgIGlmIChjb2xvcldyaXRlRmxhZ3MgJiBDb2xvcldyaXRlOjpCTFVFKQorICAg
ICAgICByZXN1bHQgfD0gV0dQVUNvbG9yV3JpdGVNYXNrX0JsdWU7CisgICAgaWYgKGNvbG9yV3Jp
dGVGbGFncyAmIENvbG9yV3JpdGU6OkFMUEhBKQorICAgICAgICByZXN1bHQgfD0gV0dQVUNvbG9y
V3JpdGVNYXNrX0FscGhhOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dHUFVNYXBNb2RlRmxh
Z3MgY29udmVydE1hcE1vZGVGbGFnc1RvQmFja2luZyhNYXBNb2RlRmxhZ3MgbWFwTW9kZUZsYWdz
KQoreworICAgIFdHUFVNYXBNb2RlRmxhZ3MgcmVzdWx0ID0gMDsKKyAgICBpZiAobWFwTW9kZUZs
YWdzICYgTWFwTW9kZTo6UkVBRCkKKyAgICAgICAgcmVzdWx0IHw9IFdHUFVNYXBNb2RlX1JlYWQ7
CisgICAgaWYgKG1hcE1vZGVGbGFncyAmIE1hcE1vZGU6OldSSVRFKQorICAgICAgICByZXN1bHQg
fD0gV0dQVU1hcE1vZGVfV3JpdGU7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV0dQVVNoYWRl
clN0YWdlRmxhZ3MgY29udmVydFNoYWRlclN0YWdlRmxhZ3NUb0JhY2tpbmcoU2hhZGVyU3RhZ2VG
bGFncyBzaGFkZXJTdGFnZUZsYWdzKQoreworICAgIFdHUFVTaGFkZXJTdGFnZUZsYWdzIHJlc3Vs
dCA9IDA7CisgICAgaWYgKHNoYWRlclN0YWdlRmxhZ3MgJiBTaGFkZXJTdGFnZTo6VkVSVEVYKQor
ICAgICAgICByZXN1bHQgfD0gV0dQVVNoYWRlclN0YWdlX1ZlcnRleDsKKyAgICBpZiAoc2hhZGVy
U3RhZ2VGbGFncyAmIFNoYWRlclN0YWdlOjpGUkFHTUVOVCkKKyAgICAgICAgcmVzdWx0IHw9IFdH
UFVTaGFkZXJTdGFnZV9GcmFnbWVudDsKKyAgICBpZiAoc2hhZGVyU3RhZ2VGbGFncyAmIFNoYWRl
clN0YWdlOjpDT01QVVRFKQorICAgICAgICByZXN1bHQgfD0gV0dQVVNoYWRlclN0YWdlX0NvbXB1
dGU7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV0dQVVRleHR1cmVVc2FnZUZsYWdzIGNvbnZl
cnRUZXh0dXJlVXNhZ2VGbGFnc1RvQmFja2luZyhUZXh0dXJlVXNhZ2VGbGFncyB0ZXh0dXJlVXNh
Z2VGbGFncykKK3sKKyAgICBXR1BVVGV4dHVyZVVzYWdlRmxhZ3MgcmVzdWx0ID0gMDsKKyAgICBp
ZiAodGV4dHVyZVVzYWdlRmxhZ3MgJiBUZXh0dXJlVXNhZ2U6OkNPUFlfU1JDKQorICAgICAgICBy
ZXN1bHQgfD0gV0dQVVRleHR1cmVVc2FnZV9Db3B5U3JjOworICAgIGlmICh0ZXh0dXJlVXNhZ2VG
bGFncyAmIFRleHR1cmVVc2FnZTo6Q09QWV9EU1QpCisgICAgICAgIHJlc3VsdCB8PSBXR1BVVGV4
dHVyZVVzYWdlX0NvcHlEc3Q7CisgICAgaWYgKHRleHR1cmVVc2FnZUZsYWdzICYgVGV4dHVyZVVz
YWdlOjpURVhUVVJFX0JJTkRJTkcpCisgICAgICAgIHJlc3VsdCB8PSBXR1BVVGV4dHVyZVVzYWdl
X1RleHR1cmVCaW5kaW5nOworICAgIGlmICh0ZXh0dXJlVXNhZ2VGbGFncyAmIFRleHR1cmVVc2Fn
ZTo6U1RPUkFHRV9CSU5ESU5HKQorICAgICAgICByZXN1bHQgfD0gV0dQVVRleHR1cmVVc2FnZV9T
dG9yYWdlQmluZGluZzsKKyAgICBpZiAodGV4dHVyZVVzYWdlRmxhZ3MgJiBUZXh0dXJlVXNhZ2U6
OlJFTkRFUl9BVFRBQ0hNRU5UKQorICAgICAgICByZXN1bHQgfD0gV0dQVVRleHR1cmVVc2FnZV9S
ZW5kZXJBdHRhY2htZW50OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dHUFVDb2xvciBjb252
ZXJ0VG9CYWNraW5nKGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0
Y2hPbihjb2xvciwgW10gKGNvbnN0IFZlY3Rvcjxkb3VibGU+JiB2ZWN0b3IpIHsKKyAgICAgICAg
cmV0dXJuIFdHUFVDb2xvciB7CisgICAgICAgICAgICB2ZWN0b3Iuc2l6ZSgpID4gMCA/IHZlY3Rv
clswXSA6IDAsCisgICAgICAgICAgICB2ZWN0b3Iuc2l6ZSgpID4gMSA/IHZlY3RvclsxXSA6IDAs
CisgICAgICAgICAgICB2ZWN0b3Iuc2l6ZSgpID4gMiA/IHZlY3RvclsyXSA6IDAsCisgICAgICAg
ICAgICB2ZWN0b3Iuc2l6ZSgpID4gMyA/IHZlY3RvclszXSA6IDAsCisgICAgICAgIH07CisgICAg
fSwgW10gKGNvbnN0IENvbG9yRGljdCYgY29sb3IpIHsKKyAgICAgICAgcmV0dXJuIFdHUFVDb2xv
ciB7CisgICAgICAgICAgICBjb2xvci5yLAorICAgICAgICAgICAgY29sb3IuZywKKyAgICAgICAg
ICAgIGNvbG9yLmIsCisgICAgICAgICAgICBjb2xvci5hLAorICAgICAgICB9OworICAgIH0pOwor
fQorCitXR1BVRXh0ZW50M0QgY29udmVydFRvQmFja2luZyhjb25zdCBFeHRlbnQzRCYgZXh0ZW50
M0QpCit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oZXh0ZW50M0QsIFtdIChjb25zdCBWZWN0
b3I8SW50ZWdlckNvb3JkaW5hdGU+JiB2ZWN0b3IpIHsKKyAgICAgICAgcmV0dXJuIFdHUFVFeHRl
bnQzRCB7CisgICAgICAgICAgICB2ZWN0b3Iuc2l6ZSgpID4gMCA/IHZlY3RvclswXSA6IDAsCisg
ICAgICAgICAgICB2ZWN0b3Iuc2l6ZSgpID4gMSA/IHZlY3RvclsxXSA6IDAsCisgICAgICAgICAg
ICB2ZWN0b3Iuc2l6ZSgpID4gMiA/IHZlY3RvclsyXSA6IDAsCisgICAgICAgIH07CisgICAgfSwg
W10gKGNvbnN0IEV4dGVudDNERGljdCYgZXh0ZW50KSB7CisgICAgICAgIHJldHVybiBXR1BVRXh0
ZW50M0QgeworICAgICAgICAgICAgZXh0ZW50LndpZHRoLAorICAgICAgICAgICAgZXh0ZW50Lmhl
aWdodCwKKyAgICAgICAgICAgIGV4dGVudC5kZXB0aE9yQXJyYXlMYXllcnMsCisgICAgICAgIH07
CisgICAgfSk7Cit9CisKK1dHUFVPcmlnaW4zRCBjb252ZXJ0VG9CYWNraW5nKGNvbnN0IE9yaWdp
bjJEJiBvcmlnaW4yRCkKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihvcmlnaW4yRCwgW10g
KGNvbnN0IFZlY3RvcjxJbnRlZ2VyQ29vcmRpbmF0ZT4mIHZlY3RvcikgeworICAgICAgICByZXR1
cm4gV0dQVU9yaWdpbjNEIHsKKyAgICAgICAgICAgIHZlY3Rvci5zaXplKCkgPiAwID8gdmVjdG9y
WzBdIDogMCwKKyAgICAgICAgICAgIHZlY3Rvci5zaXplKCkgPiAxID8gdmVjdG9yWzFdIDogMCwK
KyAgICAgICAgICAgIDAsCisgICAgICAgIH07CisgICAgfSwgW10gKGNvbnN0IE9yaWdpbjJERGlj
dCYgb3JpZ2luKSB7CisgICAgICAgIHJldHVybiBXR1BVT3JpZ2luM0QgeworICAgICAgICAgICAg
b3JpZ2luLngsCisgICAgICAgICAgICBvcmlnaW4ueSwKKyAgICAgICAgICAgIDAsCisgICAgICAg
IH07CisgICAgfSk7Cit9CisKK1dHUFVPcmlnaW4zRCBjb252ZXJ0VG9CYWNraW5nKGNvbnN0IE9y
aWdpbjNEJiBvcmlnaW4zRCkKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihvcmlnaW4zRCwg
W10gKGNvbnN0IFZlY3RvcjxJbnRlZ2VyQ29vcmRpbmF0ZT4mIHZlY3RvcikgeworICAgICAgICBy
ZXR1cm4gV0dQVU9yaWdpbjNEIHsKKyAgICAgICAgICAgIHZlY3Rvci5zaXplKCkgPiAwID8gdmVj
dG9yWzBdIDogMCwKKyAgICAgICAgICAgIHZlY3Rvci5zaXplKCkgPiAxID8gdmVjdG9yWzFdIDog
MCwKKyAgICAgICAgICAgIHZlY3Rvci5zaXplKCkgPiAyID8gdmVjdG9yWzJdIDogMCwKKyAgICAg
ICAgfTsKKyAgICB9LCBbXSAoY29uc3QgT3JpZ2luM0REaWN0JiBvcmlnaW4pIHsKKyAgICAgICAg
cmV0dXJuIFdHUFVPcmlnaW4zRCB7CisgICAgICAgICAgICBvcmlnaW4ueCwKKyAgICAgICAgICAg
IG9yaWdpbi55LAorICAgICAgICAgICAgb3JpZ2luLnosCisgICAgICAgIH07CisgICAgfSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbnZl
cnRUb0JhY2tpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0lt
cGwvV2ViR1BVQ29udmVydFRvQmFja2luZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlNDFkNzk0YWI0YmYzNjY5
ZGQ3MTRjMTI2MzQxZjg2OTg0Y2U1MDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbnZlcnRUb0JhY2tpbmcuaApA
QCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
V2ViR1BVQWRkcmVzc01vZGUuaCIKKyNpbmNsdWRlICJXZWJHUFVCbGVuZEZhY3Rvci5oIgorI2lu
Y2x1ZGUgIldlYkdQVUJsZW5kT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiV2ViR1BVQnVmZmVyQmlu
ZGluZ1R5cGUuaCIKKyNpbmNsdWRlICJXZWJHUFVCdWZmZXJVc2FnZS5oIgorI2luY2x1ZGUgIldl
YkdQVUNvbG9yLmgiCisjaW5jbHVkZSAiV2ViR1BVQ29sb3JXcml0ZS5oIgorI2luY2x1ZGUgIldl
YkdQVUNvbXBhcmVGdW5jdGlvbi5oIgorI2luY2x1ZGUgIldlYkdQVUNvbXBpbGF0aW9uTWVzc2Fn
ZVR5cGUuaCIKKyNpbmNsdWRlICJXZWJHUFVDdWxsTW9kZS5oIgorI2luY2x1ZGUgIldlYkdQVUVy
cm9yRmlsdGVyLmgiCisjaW5jbHVkZSAiV2ViR1BVRXh0ZW50M0QuaCIKKyNpbmNsdWRlICJXZWJH
UFVGZWF0dXJlTmFtZS5oIgorI2luY2x1ZGUgIldlYkdQVUZpbHRlck1vZGUuaCIKKyNpbmNsdWRl
ICJXZWJHUFVGcm9udEZhY2UuaCIKKyNpbmNsdWRlICJXZWJHUFVJbmRleEZvcm1hdC5oIgorI2lu
Y2x1ZGUgIldlYkdQVUxvYWRPcC5oIgorI2luY2x1ZGUgIldlYkdQVU1hcE1vZGUuaCIKKyNpbmNs
dWRlICJXZWJHUFVPcmlnaW4yRC5oIgorI2luY2x1ZGUgIldlYkdQVU9yaWdpbjNELmgiCisjaW5j
bHVkZSAiV2ViR1BVUGlwZWxpbmVTdGF0aXN0aWNOYW1lLmgiCisjaW5jbHVkZSAiV2ViR1BVUG93
ZXJQcmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiV2ViR1BVUHJpbWl0aXZlVG9wb2xvZ3kuaCIKKyNp
bmNsdWRlICJXZWJHUFVRdWVyeVR5cGUuaCIKKyNpbmNsdWRlICJXZWJHUFVTYW1wbGVyQmluZGlu
Z1R5cGUuaCIKKyNpbmNsdWRlICJXZWJHUFVTaGFkZXJTdGFnZS5oIgorI2luY2x1ZGUgIldlYkdQ
VVN0ZW5jaWxPcGVyYXRpb24uaCIKKyNpbmNsdWRlICJXZWJHUFVTdG9yYWdlVGV4dHVyZUFjY2Vz
cy5oIgorI2luY2x1ZGUgIldlYkdQVVN0b3JlT3AuaCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJl
QXNwZWN0LmgiCisjaW5jbHVkZSAiV2ViR1BVVGV4dHVyZURpbWVuc2lvbi5oIgorI2luY2x1ZGUg
IldlYkdQVVRleHR1cmVGb3JtYXQuaCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJlU2FtcGxlVHlw
ZS5oIgorI2luY2x1ZGUgIldlYkdQVVRleHR1cmVVc2FnZS5oIgorI2luY2x1ZGUgIldlYkdQVVRl
eHR1cmVWaWV3RGltZW5zaW9uLmgiCisjaW5jbHVkZSAiV2ViR1BVVmVydGV4Rm9ybWF0LmgiCisj
aW5jbHVkZSAiV2ViR1BVVmVydGV4U3RlcE1vZGUuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BV
Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK1dHUFVBZGRyZXNz
TW9kZSBjb252ZXJ0VG9CYWNraW5nKEFkZHJlc3NNb2RlKTsKK1dHUFVCbGVuZEZhY3RvciBjb252
ZXJ0VG9CYWNraW5nKEJsZW5kRmFjdG9yKTsKK1dHUFVCbGVuZE9wZXJhdGlvbiBjb252ZXJ0VG9C
YWNraW5nKEJsZW5kT3BlcmF0aW9uKTsKK1dHUFVCdWZmZXJCaW5kaW5nVHlwZSBjb252ZXJ0VG9C
YWNraW5nKEJ1ZmZlckJpbmRpbmdUeXBlKTsKK1dHUFVDb21wYXJlRnVuY3Rpb24gY29udmVydFRv
QmFja2luZyhDb21wYXJlRnVuY3Rpb24pOworV0dQVUNvbXBpbGF0aW9uTWVzc2FnZVR5cGUgY29u
dmVydFRvQmFja2luZyhDb21waWxhdGlvbk1lc3NhZ2VUeXBlKTsKK1dHUFVDdWxsTW9kZSBjb252
ZXJ0VG9CYWNraW5nKEN1bGxNb2RlKTsKK1dHUFVFcnJvckZpbHRlciBjb252ZXJ0VG9CYWNraW5n
KEVycm9yRmlsdGVyKTsKK1dHUFVGZWF0dXJlTmFtZSBjb252ZXJ0VG9CYWNraW5nKEZlYXR1cmVO
YW1lKTsKK1dHUFVGaWx0ZXJNb2RlIGNvbnZlcnRUb0JhY2tpbmcoRmlsdGVyTW9kZSk7CitXR1BV
RnJvbnRGYWNlIGNvbnZlcnRUb0JhY2tpbmcoRnJvbnRGYWNlKTsKK1dHUFVJbmRleEZvcm1hdCBj
b252ZXJ0VG9CYWNraW5nKEluZGV4Rm9ybWF0KTsKK1dHUFVMb2FkT3AgY29udmVydFRvQmFja2lu
ZyhMb2FkT3ApOworV0dQVVBpcGVsaW5lU3RhdGlzdGljTmFtZSBjb252ZXJ0VG9CYWNraW5nKFBp
cGVsaW5lU3RhdGlzdGljTmFtZSk7CitXR1BVUG93ZXJQcmVmZXJlbmNlIGNvbnZlcnRUb0JhY2tp
bmcoUG93ZXJQcmVmZXJlbmNlKTsKK1dHUFVQcmltaXRpdmVUb3BvbG9neSBjb252ZXJ0VG9CYWNr
aW5nKFByaW1pdGl2ZVRvcG9sb2d5KTsKK1dHUFVRdWVyeVR5cGUgY29udmVydFRvQmFja2luZyhR
dWVyeVR5cGUpOworV0dQVVNhbXBsZXJCaW5kaW5nVHlwZSBjb252ZXJ0VG9CYWNraW5nKFNhbXBs
ZXJCaW5kaW5nVHlwZSk7CitXR1BVU3RlbmNpbE9wZXJhdGlvbiBjb252ZXJ0VG9CYWNraW5nKFN0
ZW5jaWxPcGVyYXRpb24pOworV0dQVVN0b3JhZ2VUZXh0dXJlQWNjZXNzIGNvbnZlcnRUb0JhY2tp
bmcoU3RvcmFnZVRleHR1cmVBY2Nlc3MpOworV0dQVVN0b3JlT3AgY29udmVydFRvQmFja2luZyhT
dG9yZU9wKTsKK1dHUFVUZXh0dXJlQXNwZWN0IGNvbnZlcnRUb0JhY2tpbmcoVGV4dHVyZUFzcGVj
dCk7CitXR1BVVGV4dHVyZURpbWVuc2lvbiBjb252ZXJ0VG9CYWNraW5nKFRleHR1cmVEaW1lbnNp
b24pOworV0dQVVRleHR1cmVGb3JtYXQgY29udmVydFRvQmFja2luZyhUZXh0dXJlRm9ybWF0KTsK
K1dHUFVUZXh0dXJlU2FtcGxlVHlwZSBjb252ZXJ0VG9CYWNraW5nKFRleHR1cmVTYW1wbGVUeXBl
KTsKK1dHUFVUZXh0dXJlVmlld0RpbWVuc2lvbiBjb252ZXJ0VG9CYWNraW5nKFRleHR1cmVWaWV3
RGltZW5zaW9uKTsKK1dHUFVWZXJ0ZXhGb3JtYXQgY29udmVydFRvQmFja2luZyhWZXJ0ZXhGb3Jt
YXQpOworV0dQVVZlcnRleFN0ZXBNb2RlIGNvbnZlcnRUb0JhY2tpbmcoVmVydGV4U3RlcE1vZGUp
OworV0dQVUJ1ZmZlclVzYWdlRmxhZ3MgY29udmVydEJ1ZmZlclVzYWdlRmxhZ3NUb0JhY2tpbmco
QnVmZmVyVXNhZ2VGbGFncyk7CitXR1BVQ29sb3JXcml0ZU1hc2tGbGFncyBjb252ZXJ0Q29sb3JX
cml0ZUZsYWdzVG9CYWNraW5nKENvbG9yV3JpdGVGbGFncyk7CitXR1BVTWFwTW9kZUZsYWdzIGNv
bnZlcnRNYXBNb2RlRmxhZ3NUb0JhY2tpbmcoTWFwTW9kZUZsYWdzKTsKK1dHUFVTaGFkZXJTdGFn
ZUZsYWdzIGNvbnZlcnRTaGFkZXJTdGFnZUZsYWdzVG9CYWNraW5nKFNoYWRlclN0YWdlRmxhZ3Mp
OworV0dQVVRleHR1cmVVc2FnZUZsYWdzIGNvbnZlcnRUZXh0dXJlVXNhZ2VGbGFnc1RvQmFja2lu
ZyhUZXh0dXJlVXNhZ2VGbGFncyk7CitXR1BVQ29sb3IgY29udmVydFRvQmFja2luZyhjb25zdCBD
b2xvciYpOworV0dQVUV4dGVudDNEIGNvbnZlcnRUb0JhY2tpbmcoY29uc3QgRXh0ZW50M0QmKTsK
K1dHUFVPcmlnaW4zRCBjb252ZXJ0VG9CYWNraW5nKGNvbnN0IE9yaWdpbjJEJik7CitXR1BVT3Jp
Z2luM0QgY29udmVydFRvQmFja2luZyhjb25zdCBPcmlnaW4zRCYpOworCit9IC8vIG5hbWVzcGFj
ZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
UEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVEZXZpY2VJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVRGV2aWNlSW1wbC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZjQ3ODg3NTJlOTdlZmU5NzZkMmVkZmI5ZDlhZTE4YTJjNDNhMDgzMwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BV
L0ltcGwvV2ViR1BVRGV2aWNlSW1wbC5jcHAKQEAgLTAsMCArMSw1ODEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViR1BVRGV2aWNlSW1wbC5oIgorCisj
aW5jbHVkZSAiV2ViR1BVQmluZEdyb3VwRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIldlYkdQVUJp
bmRHcm91cEltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVCaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9y
LmgiCisjaW5jbHVkZSAiV2ViR1BVQmluZEdyb3VwTGF5b3V0SW1wbC5oIgorI2luY2x1ZGUgIldl
YkdQVUJ1ZmZlckRlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJXZWJHUFVCdWZmZXJJbXBsLmgiCisj
aW5jbHVkZSAiV2ViR1BVQ29tbWFuZEVuY29kZXJEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiV2Vi
R1BVQ29tbWFuZEVuY29kZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVQ29tcHV0ZVBpcGVsaW5l
RGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIldlYkdQVUNvbXB1dGVQaXBlbGluZUltcGwuaCIKKyNp
bmNsdWRlICJXZWJHUFVDb252ZXJ0VG9CYWNraW5nLmgiCisjaW5jbHVkZSAiV2ViR1BVRXh0ZXJu
YWxUZXh0dXJlSW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVU91dE9mTWVtb3J5RXJyb3IuaCIKKyNp
bmNsdWRlICJXZWJHUFVQaXBlbGluZUxheW91dERlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJXZWJH
UFVQaXBlbGluZUxheW91dEltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVRdWVyeVNldERlc2NyaXB0
b3IuaCIKKyNpbmNsdWRlICJXZWJHUFVRdWVyeVNldEltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVS
ZW5kZXJCdW5kbGVFbmNvZGVyRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIldlYkdQVVJlbmRlckJ1
bmRsZUVuY29kZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVUmVuZGVyUGlwZWxpbmVEZXNjcmlw
dG9yLmgiCisjaW5jbHVkZSAiV2ViR1BVUmVuZGVyUGlwZWxpbmVJbXBsLmgiCisjaW5jbHVkZSAi
V2ViR1BVU2FtcGxlckRlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJXZWJHUFVTYW1wbGVySW1wbC5o
IgorI2luY2x1ZGUgIldlYkdQVVNoYWRlck1vZHVsZURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJX
ZWJHUFVTaGFkZXJNb2R1bGVJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVVGV4dHVyZURlc2NyaXB0
b3IuaCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJlSW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVVRl
eHR1cmVWaWV3SW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVVZhbGlkYXRpb25FcnJvci5oIgorI2lu
Y2x1ZGUgPFdlYkdQVS9XZWJHUFVFeHQuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2Ug
V2ViR1BVIHsKKworRGV2aWNlSW1wbDo6RGV2aWNlSW1wbChXR1BVRGV2aWNlIGRldmljZSwgUmVm
PFN1cHBvcnRlZEZlYXR1cmVzPiYmIGZlYXR1cmVzLCBSZWY8U3VwcG9ydGVkTGltaXRzPiYmIGxp
bWl0cykKKyAgICA6IERldmljZShXVEZNb3ZlKGZlYXR1cmVzKSwgV1RGTW92ZShsaW1pdHMpKQor
ICAgICwgbV9iYWNraW5nKGRldmljZSkKK3sKK30KKworRGV2aWNlSW1wbDo6fkRldmljZUltcGwo
KQoreworICAgIHdncHVEZXZpY2VSZWxlYXNlKG1fYmFja2luZyk7Cit9CisKK3ZvaWQgRGV2aWNl
SW1wbDo6ZGVzdHJveSgpCit7CisgICAgd2dwdURldmljZURlc3Ryb3kobV9iYWNraW5nKTsKK30K
KworUmVmPEJ1ZmZlcj4gRGV2aWNlSW1wbDo6Y3JlYXRlQnVmZmVyKGNvbnN0IEJ1ZmZlckRlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgYXV0byBsYWJlbCA9IGRlc2NyaXB0b3IubGFiZWwu
dXRmOCgpOworCisgICAgV0dQVUJ1ZmZlckRlc2NyaXB0b3IgYmFja2luZ0Rlc2NyaXB0b3Igewor
ICAgICAgICBudWxscHRyLAorICAgICAgICBsYWJlbC5kYXRhKCksCisgICAgICAgIGNvbnZlcnRC
dWZmZXJVc2FnZUZsYWdzVG9CYWNraW5nKGRlc2NyaXB0b3IudXNhZ2UpLAorICAgICAgICBkZXNj
cmlwdG9yLnNpemUsCisgICAgICAgIGRlc2NyaXB0b3IubWFwcGVkQXRDcmVhdGlvbiwKKyAgICB9
OworCisgICAgcmV0dXJuIEJ1ZmZlckltcGw6OmNyZWF0ZSh3Z3B1RGV2aWNlQ3JlYXRlQnVmZmVy
KG1fYmFja2luZywgJmJhY2tpbmdEZXNjcmlwdG9yKSk7Cit9CisKK1JlZjxUZXh0dXJlPiBEZXZp
Y2VJbXBsOjpjcmVhdGVUZXh0dXJlKGNvbnN0IFRleHR1cmVEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
KQoreworICAgIGF1dG8gc2l6ZSA9IGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci5zaXplKTsK
KworICAgIGF1dG8gbGFiZWwgPSBkZXNjcmlwdG9yLmxhYmVsLnV0ZjgoKTsKKworICAgIFdHUFVU
ZXh0dXJlRGVzY3JpcHRvciBiYWNraW5nRGVzY3JpcHRvciB7CisgICAgICAgIG51bGxwdHIsCisg
ICAgICAgIGxhYmVsLmRhdGEoKSwKKyAgICAgICAgY29udmVydFRleHR1cmVVc2FnZUZsYWdzVG9C
YWNraW5nKGRlc2NyaXB0b3IudXNhZ2UpLAorICAgICAgICBjb252ZXJ0VG9CYWNraW5nKGRlc2Ny
aXB0b3IuZGltZW5zaW9uKSwKKyAgICAgICAgc2l6ZSwKKyAgICAgICAgY29udmVydFRvQmFja2lu
ZyhkZXNjcmlwdG9yLmZvcm1hdCksCisgICAgICAgIGRlc2NyaXB0b3IubWlwTGV2ZWxDb3VudCwK
KyAgICAgICAgZGVzY3JpcHRvci5zYW1wbGVDb3VudCwKKyAgICB9OworCisgICAgcmV0dXJuIFRl
eHR1cmVJbXBsOjpjcmVhdGUod2dwdURldmljZUNyZWF0ZVRleHR1cmUobV9iYWNraW5nLCAmYmFj
a2luZ0Rlc2NyaXB0b3IpLCBkZXNjcmlwdG9yLmZvcm1hdCwgZGVzY3JpcHRvci5kaW1lbnNpb24p
OworfQorCitSZWY8U2FtcGxlcj4gRGV2aWNlSW1wbDo6Y3JlYXRlU2FtcGxlcihjb25zdCBTYW1w
bGVyRGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBhdXRvIGxhYmVsID0gZGVzY3JpcHRv
ci5sYWJlbC51dGY4KCk7CisKKyAgICBXR1BVU2FtcGxlckRlc2NyaXB0b3IgYmFja2luZ0Rlc2Ny
aXB0b3IgeworICAgICAgICBudWxscHRyLAorICAgICAgICBsYWJlbC5kYXRhKCksCisgICAgICAg
IGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci5hZGRyZXNzTW9kZVUpLAorICAgICAgICBjb252
ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3IuYWRkcmVzc01vZGVWKSwKKyAgICAgICAgY29udmVydFRv
QmFja2luZyhkZXNjcmlwdG9yLmFkZHJlc3NNb2RlVyksCisgICAgICAgIGNvbnZlcnRUb0JhY2tp
bmcoZGVzY3JpcHRvci5tYWdGaWx0ZXIpLAorICAgICAgICBjb252ZXJ0VG9CYWNraW5nKGRlc2Ny
aXB0b3IubWluRmlsdGVyKSwKKyAgICAgICAgY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLm1p
cG1hcEZpbHRlciksCisgICAgICAgIGRlc2NyaXB0b3IubG9kTWluQ2xhbXAsCisgICAgICAgIGRl
c2NyaXB0b3IubG9kTWF4Q2xhbXAsCisgICAgICAgIGRlc2NyaXB0b3IuY29tcGFyZSA/IGNvbnZl
cnRUb0JhY2tpbmcoKmRlc2NyaXB0b3IuY29tcGFyZSkgOiBXR1BVQ29tcGFyZUZ1bmN0aW9uX0Fs
d2F5cywKKyAgICAgICAgZGVzY3JpcHRvci5tYXhBbmlzb3Ryb3B5LAorICAgIH07CisKKyAgICBy
ZXR1cm4gU2FtcGxlckltcGw6OmNyZWF0ZSh3Z3B1RGV2aWNlQ3JlYXRlU2FtcGxlcihtX2JhY2tp
bmcsICZiYWNraW5nRGVzY3JpcHRvcikpOworfQorCitSZWY8RXh0ZXJuYWxUZXh0dXJlPiBEZXZp
Y2VJbXBsOjppbXBvcnRFeHRlcm5hbFRleHR1cmUoY29uc3QgRXh0ZXJuYWxUZXh0dXJlRGVzY3Jp
cHRvciYpCit7CisgICAgcmV0dXJuIEV4dGVybmFsVGV4dHVyZUltcGw6OmNyZWF0ZSgpOworfQor
CitSZWY8QmluZEdyb3VwTGF5b3V0PiBEZXZpY2VJbXBsOjpjcmVhdGVCaW5kR3JvdXBMYXlvdXQo
Y29uc3QgQmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBhdXRv
IGxhYmVsID0gZGVzY3JpcHRvci5sYWJlbC51dGY4KCk7CisKKyAgICBWZWN0b3I8V0dQVUJpbmRH
cm91cExheW91dEVudHJ5PiBiYWNraW5nRW50cmllczsKKyAgICBiYWNraW5nRW50cmllcy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KGRlc2NyaXB0b3IuZW50cmllcy5zaXplKCkpOworICAgIGZvciAo
Y29uc3QgYXV0byYgZW50cnkgOiBkZXNjcmlwdG9yLmVudHJpZXMpIHsKKyAgICAgICAgYmFja2lu
Z0VudHJpZXMudW5jaGVja2VkQXBwZW5kKFdHUFVCaW5kR3JvdXBMYXlvdXRFbnRyeSB7CisgICAg
ICAgICAgICBudWxscHRyLAorICAgICAgICAgICAgZW50cnkuYmluZGluZywKKyAgICAgICAgICAg
IGNvbnZlcnRTaGFkZXJTdGFnZUZsYWdzVG9CYWNraW5nKGVudHJ5LnZpc2liaWxpdHkpLCB7Cisg
ICAgICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICBlbnRyeS5idWZmZXIgPyBj
b252ZXJ0VG9CYWNraW5nKGVudHJ5LmJ1ZmZlci0+dHlwZSkgOiBXR1BVQnVmZmVyQmluZGluZ1R5
cGVfVW5kZWZpbmVkLAorICAgICAgICAgICAgICAgIGVudHJ5LmJ1ZmZlciA/IGVudHJ5LmJ1ZmZl
ci0+aGFzRHluYW1pY09mZnNldCA6IGZhbHNlLAorICAgICAgICAgICAgICAgIGVudHJ5LmJ1ZmZl
ciA/IGVudHJ5LmJ1ZmZlci0+bWluQmluZGluZ1NpemUgOiAwLAorICAgICAgICAgICAgfSwgewor
ICAgICAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICAgICAgZW50cnkuc2FtcGxlciA/
IGNvbnZlcnRUb0JhY2tpbmcoZW50cnkuc2FtcGxlci0+dHlwZSkgOiBXR1BVU2FtcGxlckJpbmRp
bmdUeXBlX1VuZGVmaW5lZCwKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICBudWxs
cHRyLAorICAgICAgICAgICAgICAgIGVudHJ5LnRleHR1cmUgPyBjb252ZXJ0VG9CYWNraW5nKGVu
dHJ5LnRleHR1cmUtPnNhbXBsZVR5cGUpIDogV0dQVVRleHR1cmVTYW1wbGVUeXBlX1VuZGVmaW5l
ZCwKKyAgICAgICAgICAgICAgICBlbnRyeS50ZXh0dXJlID8gY29udmVydFRvQmFja2luZyhlbnRy
eS50ZXh0dXJlLT52aWV3RGltZW5zaW9uKSA6IFdHUFVUZXh0dXJlVmlld0RpbWVuc2lvbl9VbmRl
ZmluZWQsCisgICAgICAgICAgICAgICAgZW50cnkudGV4dHVyZSA/IGVudHJ5LnRleHR1cmUtPm11
bHRpc2FtcGxlZCA6IGZhbHNlLAorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgIG51
bGxwdHIsCisgICAgICAgICAgICAgICAgZW50cnkuc3RvcmFnZVRleHR1cmUgPyBjb252ZXJ0VG9C
YWNraW5nKGVudHJ5LnN0b3JhZ2VUZXh0dXJlLT5hY2Nlc3MpIDogV0dQVVN0b3JhZ2VUZXh0dXJl
QWNjZXNzX1VuZGVmaW5lZCwKKyAgICAgICAgICAgICAgICBlbnRyeS5zdG9yYWdlVGV4dHVyZSA/
IGNvbnZlcnRUb0JhY2tpbmcoZW50cnkuc3RvcmFnZVRleHR1cmUtPmZvcm1hdCkgOiBXR1BVVGV4
dHVyZUZvcm1hdF9VbmRlZmluZWQsCisgICAgICAgICAgICAgICAgZW50cnkuc3RvcmFnZVRleHR1
cmUgPyBjb252ZXJ0VG9CYWNraW5nKGVudHJ5LnN0b3JhZ2VUZXh0dXJlLT52aWV3RGltZW5zaW9u
KSA6IFdHUFVUZXh0dXJlVmlld0RpbWVuc2lvbl9VbmRlZmluZWQsCisgICAgICAgICAgICB9LAor
ICAgICAgICB9KTsKKyAgICB9CisKKyAgICBXR1BVQmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciBi
YWNraW5nRGVzY3JpcHRvciB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIGxhYmVsLmRhdGEo
KSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGJhY2tpbmdFbnRyaWVzLnNpemUoKSks
CisgICAgICAgIGJhY2tpbmdFbnRyaWVzLmRhdGEoKSwKKyAgICB9OworCisgICAgcmV0dXJuIEJp
bmRHcm91cExheW91dEltcGw6OmNyZWF0ZSh3Z3B1RGV2aWNlQ3JlYXRlQmluZEdyb3VwTGF5b3V0
KG1fYmFja2luZywgJmJhY2tpbmdEZXNjcmlwdG9yKSk7Cit9CisKK1JlZjxQaXBlbGluZUxheW91
dD4gRGV2aWNlSW1wbDo6Y3JlYXRlUGlwZWxpbmVMYXlvdXQoY29uc3QgUGlwZWxpbmVMYXlvdXRE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIGF1dG8gbGFiZWwgPSBkZXNjcmlwdG9yLmxh
YmVsLnV0ZjgoKTsKKworICAgIFZlY3RvcjxXR1BVQmluZEdyb3VwTGF5b3V0PiBiYWNraW5nQmlu
ZEdyb3VwTGF5b3V0czsKKyAgICBiYWNraW5nQmluZEdyb3VwTGF5b3V0cy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KGRlc2NyaXB0b3IuYmluZEdyb3VwTGF5b3V0cy5zaXplKCkpOworICAgIGZvciAo
YXV0byBiaW5kR3JvdXBMYXlvdXQgOiBkZXNjcmlwdG9yLmJpbmRHcm91cExheW91dHMpCisgICAg
ICAgIGJhY2tpbmdCaW5kR3JvdXBMYXlvdXRzLnVuY2hlY2tlZEFwcGVuZChzdGF0aWNfY2FzdDxj
b25zdCBCaW5kR3JvdXBMYXlvdXRJbXBsJj4oYmluZEdyb3VwTGF5b3V0LmdldCgpKS5iYWNraW5n
KCkpOworCisgICAgV0dQVVBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciBiYWNraW5nRGVzY3JpcHRv
ciB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIGxhYmVsLmRhdGEoKSwKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KGJhY2tpbmdCaW5kR3JvdXBMYXlvdXRzLnNpemUoKSksCisgICAg
ICAgIGJhY2tpbmdCaW5kR3JvdXBMYXlvdXRzLmRhdGEoKSwKKyAgICB9OworCisgICAgcmV0dXJu
IFBpcGVsaW5lTGF5b3V0SW1wbDo6Y3JlYXRlKHdncHVEZXZpY2VDcmVhdGVQaXBlbGluZUxheW91
dChtX2JhY2tpbmcsICZiYWNraW5nRGVzY3JpcHRvcikpOworfQorCitSZWY8QmluZEdyb3VwPiBE
ZXZpY2VJbXBsOjpjcmVhdGVCaW5kR3JvdXAoY29uc3QgQmluZEdyb3VwRGVzY3JpcHRvciYgZGVz
Y3JpcHRvcikKK3sKKyAgICBhdXRvIGxhYmVsID0gZGVzY3JpcHRvci5sYWJlbC51dGY4KCk7CisK
KyAgICBWZWN0b3I8V0dQVUJpbmRHcm91cEVudHJ5PiBiYWNraW5nRW50cmllczsKKyAgICBiYWNr
aW5nRW50cmllcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGRlc2NyaXB0b3IuZW50cmllcy5zaXpl
KCkpOworICAgIGZvciAoY29uc3QgYXV0byYgYmluZEdyb3VwRW50cnkgOiBkZXNjcmlwdG9yLmVu
dHJpZXMpIHsKKyAgICAgICAgYmFja2luZ0VudHJpZXMudW5jaGVja2VkQXBwZW5kKFdHUFVCaW5k
R3JvdXBFbnRyeSB7CisgICAgICAgICAgICBudWxscHRyLAorICAgICAgICAgICAgYmluZEdyb3Vw
RW50cnkuYmluZGluZywKKyAgICAgICAgICAgIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8QnVmZmVy
QmluZGluZz4oYmluZEdyb3VwRW50cnkucmVzb3VyY2UpID8gc3RhdGljX2Nhc3Q8Y29uc3QgQnVm
ZmVySW1wbCY+KHN0ZDo6Z2V0PEJ1ZmZlckJpbmRpbmc+KGJpbmRHcm91cEVudHJ5LnJlc291cmNl
KS5idWZmZXIpLmJhY2tpbmcoKSA6IG51bGxwdHIsCisgICAgICAgICAgICBzdGQ6OmhvbGRzX2Fs
dGVybmF0aXZlPEJ1ZmZlckJpbmRpbmc+KGJpbmRHcm91cEVudHJ5LnJlc291cmNlKSA/IHN0ZDo6
Z2V0PEJ1ZmZlckJpbmRpbmc+KGJpbmRHcm91cEVudHJ5LnJlc291cmNlKS5vZmZzZXQgOiAwLAor
ICAgICAgICAgICAgc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxCdWZmZXJCaW5kaW5nPihiaW5kR3Jv
dXBFbnRyeS5yZXNvdXJjZSkgPyBzdGQ6OmdldDxCdWZmZXJCaW5kaW5nPihiaW5kR3JvdXBFbnRy
eS5yZXNvdXJjZSkuc2l6ZS52YWx1ZV9vcihXR1BVX1dIT0xFX1NJWkUpIDogMCwKKyAgICAgICAg
ICAgIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxTYW1wbGVy
Pj4oYmluZEdyb3VwRW50cnkucmVzb3VyY2UpID8gc3RhdGljX2Nhc3Q8Y29uc3QgU2FtcGxlcklt
cGwmPihzdGQ6OmdldDxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFNhbXBsZXI+PihiaW5kR3JvdXBF
bnRyeS5yZXNvdXJjZSkuZ2V0KCkpLmJhY2tpbmcoKSA6IG51bGxwdHIsCisgICAgICAgICAgICBz
dGQ6OmhvbGRzX2FsdGVybmF0aXZlPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8VGV4dHVyZVZpZXc+
PihiaW5kR3JvdXBFbnRyeS5yZXNvdXJjZSkgPyBzdGF0aWNfY2FzdDxjb25zdCBUZXh0dXJlVmll
d0ltcGwmPihzdGQ6OmdldDxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFRleHR1cmVWaWV3Pj4oYmlu
ZEdyb3VwRW50cnkucmVzb3VyY2UpLmdldCgpKS5iYWNraW5nKCkgOiBudWxscHRyLAorICAgICAg
ICB9KTsKKyAgICB9CisKKyAgICBXR1BVQmluZEdyb3VwRGVzY3JpcHRvciBiYWNraW5nRGVzY3Jp
cHRvciB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIGxhYmVsLmRhdGEoKSwKKyAgICAgICAg
c3RhdGljX2Nhc3Q8Y29uc3QgQmluZEdyb3VwTGF5b3V0SW1wbCY+KGRlc2NyaXB0b3IubGF5b3V0
KS5iYWNraW5nKCksCisgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90PihiYWNraW5nRW50cmll
cy5zaXplKCkpLAorICAgICAgICBiYWNraW5nRW50cmllcy5kYXRhKCksCisgICAgfTsKKworICAg
IHJldHVybiBCaW5kR3JvdXBJbXBsOjpjcmVhdGUod2dwdURldmljZUNyZWF0ZUJpbmRHcm91cCht
X2JhY2tpbmcsICZiYWNraW5nRGVzY3JpcHRvcikpOworfQorCitSZWY8U2hhZGVyTW9kdWxlPiBE
ZXZpY2VJbXBsOjpjcmVhdGVTaGFkZXJNb2R1bGUoY29uc3QgU2hhZGVyTW9kdWxlRGVzY3JpcHRv
ciYgZGVzY3JpcHRvcikKK3sKKyAgICBhdXRvIGxhYmVsID0gZGVzY3JpcHRvci5sYWJlbC51dGY4
KCk7CisKKyAgICBXR1BVU2hhZGVyTW9kdWxlRGVzY3JpcHRvciBiYWNraW5nRGVzY3JpcHRvciB7
CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIGxhYmVsLmRhdGEoKSwKKyAgICB9OworCisgICAg
cmV0dXJuIFNoYWRlck1vZHVsZUltcGw6OmNyZWF0ZSh3Z3B1RGV2aWNlQ3JlYXRlU2hhZGVyTW9k
dWxlKG1fYmFja2luZywgJmJhY2tpbmdEZXNjcmlwdG9yKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgorYXV0byBjb252ZXJ0VG9CYWNraW5nKGNvbnN0IENvbXB1dGVQaXBlbGluZURlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IsIFQmJiBjYWxsYmFjaykKK3sKKyAgICBhdXRvIGxhYmVsID0gZGVz
Y3JpcHRvci5sYWJlbC51dGY4KCk7CisKKyAgICBhdXRvIGVudHJ5UG9pbnQgPSBkZXNjcmlwdG9y
LmNvbXB1dGUuZW50cnlQb2ludC51dGY4KCk7CisKKyAgICBWZWN0b3I8Q1N0cmluZz4ga2V5czsK
KyAgICBrZXlzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGVzY3JpcHRvci5jb21wdXRlLmNvbnN0
YW50cy5zaXplKCkpOworICAgIGZvciAoY29uc3QgYXV0byYgY29uc3RhbnQgOiBkZXNjcmlwdG9y
LmNvbXB1dGUuY29uc3RhbnRzKQorICAgICAgICBrZXlzLnVuY2hlY2tlZEFwcGVuZChjb25zdGFu
dC5rZXkudXRmOCgpKTsKKworICAgIFZlY3RvcjxXR1BVQ29uc3RhbnRFbnRyeT4gYmFja2luZ0Nv
bnN0YW50RW50cmllczsKKyAgICBiYWNraW5nQ29uc3RhbnRFbnRyaWVzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoZGVzY3JpcHRvci5jb21wdXRlLmNvbnN0YW50cy5zaXplKCkpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZGVzY3JpcHRvci5jb21wdXRlLmNvbnN0YW50cy5zaXplKCk7ICsr
aSkgeworICAgICAgICBjb25zdCBhdXRvJiBjb25zdGFudCA9IGRlc2NyaXB0b3IuY29tcHV0ZS5j
b25zdGFudHNbaV07CisgICAgICAgIGJhY2tpbmdDb25zdGFudEVudHJpZXMudW5jaGVja2VkQXBw
ZW5kKFdHUFVDb25zdGFudEVudHJ5IHsKKyAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAg
ICBrZXlzW2ldLmRhdGEoKSwKKyAgICAgICAgICAgIGNvbnN0YW50LnZhbHVlCisgICAgICAgIH0p
OworICAgIH0KKworICAgIFdHUFVDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yIGJhY2tpbmdEZXNj
cmlwdG9yIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgbGFiZWwuZGF0YSgpLAorICAgICAg
ICBkZXNjcmlwdG9yLmxheW91dCA/IHN0YXRpY19jYXN0PGNvbnN0IFBpcGVsaW5lTGF5b3V0SW1w
bCY+KCpkZXNjcmlwdG9yLmxheW91dCkuYmFja2luZygpIDogbnVsbHB0ciwgeworICAgICAgICAg
ICAgbnVsbHB0ciwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IFNoYWRlck1vZHVsZUlt
cGwmPihkZXNjcmlwdG9yLmNvbXB1dGUubW9kdWxlKS5iYWNraW5nKCksCisgICAgICAgICAgICBl
bnRyeVBvaW50LmRhdGEoKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90PihiYWNr
aW5nQ29uc3RhbnRFbnRyaWVzLnNpemUoKSksCisgICAgICAgICAgICBiYWNraW5nQ29uc3RhbnRF
bnRyaWVzLmRhdGEoKSwKKyAgICAgICAgfQorICAgIH07CisKKyAgICByZXR1cm4gY2FsbGJhY2so
YmFja2luZ0Rlc2NyaXB0b3IpOworfQorCitSZWY8Q29tcHV0ZVBpcGVsaW5lPiBEZXZpY2VJbXBs
OjpjcmVhdGVDb21wdXRlUGlwZWxpbmUoY29uc3QgQ29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciYg
ZGVzY3JpcHRvcikKK3sKKyAgICByZXR1cm4gY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLCBb
dGhpc10gKGNvbnN0IFdHUFVDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJiBiYWNraW5nRGVzY3Jp
cHRvcikgeworICAgICAgICByZXR1cm4gQ29tcHV0ZVBpcGVsaW5lSW1wbDo6Y3JlYXRlKHdncHVE
ZXZpY2VDcmVhdGVDb21wdXRlUGlwZWxpbmUobV9iYWNraW5nLCAmYmFja2luZ0Rlc2NyaXB0b3Ip
KTsKKyAgICB9KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CithdXRvIGNvbnZlcnRUb0Jh
Y2tpbmcoY29uc3QgUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBUJiYgY2Fs
bGJhY2spCit7CisgICAgYXV0byBsYWJlbCA9IGRlc2NyaXB0b3IubGFiZWwudXRmOCgpOworCisg
ICAgVmVjdG9yPFZlY3RvcjxXR1BVVmVydGV4QXR0cmlidXRlPj4gYmFja2luZ0F0dHJpYnV0ZXM7
CisgICAgYmFja2luZ0F0dHJpYnV0ZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShkZXNjcmlwdG9y
LnZlcnRleC5idWZmZXJzLnNpemUoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBidWZmZXIgOiBk
ZXNjcmlwdG9yLnZlcnRleC5idWZmZXJzKSB7CisgICAgICAgIGlmIChidWZmZXIpIHsKKyAgICAg
ICAgICAgIFZlY3RvcjxXR1BVVmVydGV4QXR0cmlidXRlPiBhdHRyaWJ1dGVzOworICAgICAgICAg
ICAgYXR0cmlidXRlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGJ1ZmZlci0+YXR0cmlidXRlcy5z
aXplKCkpOworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBhdHRyaWJ1dGUgOiBidWZmZXIt
PmF0dHJpYnV0ZXMpIHsKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLnVuY2hlY2tlZEFwcGVu
ZChXR1BVVmVydGV4QXR0cmlidXRlIHsKKyAgICAgICAgICAgICAgICAgICAgY29udmVydFRvQmFj
a2luZyhhdHRyaWJ1dGUuZm9ybWF0KSwKKyAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlLm9m
ZnNldCwKKyAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlLnNoYWRlckxvY2F0aW9uLAorICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYmFja2luZ0F0dHJp
YnV0ZXMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoYXR0cmlidXRlcykpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIGJhY2tpbmdBdHRyaWJ1dGVzLnVuY2hlY2tlZEFwcGVuZCh7IH0pOwor
ICAgIH0KKworICAgIFZlY3RvcjxXR1BVVmVydGV4QnVmZmVyTGF5b3V0PiBiYWNraW5nQnVmZmVy
czsKKyAgICBiYWNraW5nQnVmZmVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGRlc2NyaXB0b3Iu
dmVydGV4LmJ1ZmZlcnMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRlc2Ny
aXB0b3IudmVydGV4LmJ1ZmZlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgYXV0byYg
YnVmZmVyID0gZGVzY3JpcHRvci52ZXJ0ZXguYnVmZmVyc1tpXTsKKyAgICAgICAgYmFja2luZ0J1
ZmZlcnMudW5jaGVja2VkQXBwZW5kKFdHUFVWZXJ0ZXhCdWZmZXJMYXlvdXQgeworICAgICAgICAg
ICAgYnVmZmVyID8gYnVmZmVyLT5hcnJheVN0cmlkZSA6IFdHUFVfQ09QWV9TVFJJREVfVU5ERUZJ
TkVELAorICAgICAgICAgICAgYnVmZmVyID8gY29udmVydFRvQmFja2luZyhidWZmZXItPnN0ZXBN
b2RlKSA6IFdHUFVWZXJ0ZXhTdGVwTW9kZV9WZXJ0ZXgsCisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oYmFja2luZ0F0dHJpYnV0ZXNbaV0uc2l6ZSgpKSwKKyAgICAgICAgICAgIGJh
Y2tpbmdBdHRyaWJ1dGVzW2ldLmRhdGEoKSwKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgV0dQ
VURlcHRoU3RlbmNpbFN0YXRlIGRlcHRoU3RlbmNpbFN0YXRlIHsKKyAgICAgICAgbnVsbHB0ciwK
KyAgICAgICAgZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwgPyBjb252ZXJ0VG9CYWNraW5nKGRlc2Ny
aXB0b3IuZGVwdGhTdGVuY2lsLT5mb3JtYXQpIDogV0dQVVRleHR1cmVGb3JtYXRfVW5kZWZpbmVk
LAorICAgICAgICBkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbCA/IGRlc2NyaXB0b3IuZGVwdGhTdGVu
Y2lsLT5kZXB0aFdyaXRlRW5hYmxlZCA6IGZhbHNlLAorICAgICAgICBkZXNjcmlwdG9yLmRlcHRo
U3RlbmNpbCA/IGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwtPmRlcHRo
Q29tcGFyZSkgOiBXR1BVQ29tcGFyZUZ1bmN0aW9uX1VuZGVmaW5lZCwgeworICAgICAgICAgICAg
ZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwgPyBjb252ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3IuZGVw
dGhTdGVuY2lsLT5zdGVuY2lsRnJvbnQuY29tcGFyZSkgOiBXR1BVQ29tcGFyZUZ1bmN0aW9uX1Vu
ZGVmaW5lZCwKKyAgICAgICAgICAgIGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsID8gY29udmVydFRv
QmFja2luZyhkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbC0+c3RlbmNpbEZyb250LmZhaWxPcCkgOiBX
R1BVU3RlbmNpbE9wZXJhdGlvbl9LZWVwLAorICAgICAgICAgICAgZGVzY3JpcHRvci5kZXB0aFN0
ZW5jaWwgPyBjb252ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsLT5zdGVuY2ls
RnJvbnQuZGVwdGhGYWlsT3ApIDogV0dQVVN0ZW5jaWxPcGVyYXRpb25fS2VlcCwKKyAgICAgICAg
ICAgIGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsID8gY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9y
LmRlcHRoU3RlbmNpbC0+c3RlbmNpbEZyb250LnBhc3NPcCkgOiBXR1BVU3RlbmNpbE9wZXJhdGlv
bl9LZWVwLAorICAgICAgICB9LCB7CisgICAgICAgICAgICBkZXNjcmlwdG9yLmRlcHRoU3RlbmNp
bCA/IGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwtPnN0ZW5jaWxCYWNr
LmNvbXBhcmUpIDogV0dQVUNvbXBhcmVGdW5jdGlvbl9VbmRlZmluZWQsCisgICAgICAgICAgICBk
ZXNjcmlwdG9yLmRlcHRoU3RlbmNpbCA/IGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci5kZXB0
aFN0ZW5jaWwtPnN0ZW5jaWxCYWNrLmZhaWxPcCkgOiBXR1BVU3RlbmNpbE9wZXJhdGlvbl9LZWVw
LAorICAgICAgICAgICAgZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwgPyBjb252ZXJ0VG9CYWNraW5n
KGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsLT5zdGVuY2lsQmFjay5kZXB0aEZhaWxPcCkgOiBXR1BV
U3RlbmNpbE9wZXJhdGlvbl9LZWVwLAorICAgICAgICAgICAgZGVzY3JpcHRvci5kZXB0aFN0ZW5j
aWwgPyBjb252ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsLT5zdGVuY2lsQmFj
ay5wYXNzT3ApIDogV0dQVVN0ZW5jaWxPcGVyYXRpb25fS2VlcCwKKyAgICAgICAgfSwKKyAgICAg
ICAgZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwgJiYgZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwtPnN0
ZW5jaWxSZWFkTWFzayA/ICpkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbC0+c3RlbmNpbFJlYWRNYXNr
IDogMCwKKyAgICAgICAgZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwgJiYgZGVzY3JpcHRvci5kZXB0
aFN0ZW5jaWwtPnN0ZW5jaWxXcml0ZU1hc2sgPyAqZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwtPnN0
ZW5jaWxXcml0ZU1hc2sgOiAwLAorICAgICAgICBkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbCA/IGRl
c2NyaXB0b3IuZGVwdGhTdGVuY2lsLT5kZXB0aEJpYXMgOiAwLAorICAgICAgICBkZXNjcmlwdG9y
LmRlcHRoU3RlbmNpbCA/IGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsLT5kZXB0aEJpYXNTbG9wZVNj
YWxlIDogMCwKKyAgICAgICAgZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwgPyBkZXNjcmlwdG9yLmRl
cHRoU3RlbmNpbC0+ZGVwdGhCaWFzQ2xhbXAgOiAwLAorICAgIH07CisKKyAgICBWZWN0b3I8c3Rk
OjpvcHRpb25hbDxXR1BVQmxlbmRTdGF0ZT4+IGJsZW5kU3RhdGVzOworICAgIGlmIChkZXNjcmlw
dG9yLmZyYWdtZW50KSB7CisgICAgICAgIGJsZW5kU3RhdGVzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoZGVzY3JpcHRvci5mcmFnbWVudC0+dGFyZ2V0cy5zaXplKCkpOworICAgICAgICBmb3IgKGNv
bnN0IGF1dG8mIHRhcmdldCA6IGRlc2NyaXB0b3IuZnJhZ21lbnQtPnRhcmdldHMpIHsKKyAgICAg
ICAgICAgIGlmICh0YXJnZXQuYmxlbmQpIHsKKyAgICAgICAgICAgICAgICBibGVuZFN0YXRlcy51
bmNoZWNrZWRBcHBlbmQoV0dQVUJsZW5kU3RhdGUgeworICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9CYWNraW5nKHRhcmdldC5ibGVuZC0+Y29s
b3Iub3BlcmF0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb0JhY2tpbmco
dGFyZ2V0LmJsZW5kLT5jb2xvci5zcmNGYWN0b3IpLAorICAgICAgICAgICAgICAgICAgICAgICAg
Y29udmVydFRvQmFja2luZyh0YXJnZXQuYmxlbmQtPmNvbG9yLmRzdEZhY3RvciksCisgICAgICAg
ICAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb0JhY2tp
bmcodGFyZ2V0LmJsZW5kLT5hbHBoYS5vcGVyYXRpb24pLAorICAgICAgICAgICAgICAgICAgICAg
ICAgY29udmVydFRvQmFja2luZyh0YXJnZXQuYmxlbmQtPmFscGhhLnNyY0ZhY3RvciksCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9CYWNraW5nKHRhcmdldC5ibGVuZC0+YWxwaGEu
ZHN0RmFjdG9yKSwKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgYmxlbmRTdGF0ZXMudW5jaGVja2Vk
QXBwZW5kKHN0ZDo6bnVsbG9wdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWZWN0b3I8V0dQ
VUNvbG9yVGFyZ2V0U3RhdGU+IGNvbG9yVGFyZ2V0czsKKyAgICBpZiAoZGVzY3JpcHRvci5mcmFn
bWVudCkgeworICAgICAgICBjb2xvclRhcmdldHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShkZXNj
cmlwdG9yLmZyYWdtZW50LT50YXJnZXRzLnNpemUoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgZGVzY3JpcHRvci5mcmFnbWVudC0+dGFyZ2V0cy5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgY29uc3QgYXV0byYgdGFyZ2V0ID0gZGVzY3JpcHRvci5mcmFnbWVudC0+dGFyZ2V0
c1tpXTsKKyAgICAgICAgICAgIGNvbG9yVGFyZ2V0cy51bmNoZWNrZWRBcHBlbmQoV0dQVUNvbG9y
VGFyZ2V0U3RhdGUgeworICAgICAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICAgICAg
Y29udmVydFRvQmFja2luZyh0YXJnZXQuZm9ybWF0KSwKKyAgICAgICAgICAgICAgICBibGVuZFN0
YXRlc1tpXSA/ICYqYmxlbmRTdGF0ZXNbaV0gOiBudWxscHRyLAorICAgICAgICAgICAgICAgIGNv
bnZlcnRDb2xvcldyaXRlRmxhZ3NUb0JhY2tpbmcodGFyZ2V0LndyaXRlTWFzayksCisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFdHUFVGcmFnbWVudFN0YXRlIGZyYWdt
ZW50U3RhdGUgeworICAgICAgICBudWxscHRyLAorICAgICAgICBudWxscHRyLAorICAgICAgICBu
dWxscHRyLAorICAgICAgICAwLAorICAgICAgICBudWxscHRyLAorICAgICAgICBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oY29sb3JUYXJnZXRzLnNpemUoKSksCisgICAgICAgIGNvbG9yVGFyZ2V0cy5k
YXRhKCksCisgICAgfTsKKworICAgIFdHUFVSZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgYmFja2lu
Z0Rlc2NyaXB0b3IgeworICAgICAgICBudWxscHRyLAorICAgICAgICBsYWJlbC5kYXRhKCksCisg
ICAgICAgIGRlc2NyaXB0b3IubGF5b3V0ID8gc3RhdGljX2Nhc3Q8Y29uc3QgUGlwZWxpbmVMYXlv
dXRJbXBsJj4oKmRlc2NyaXB0b3IubGF5b3V0KS5iYWNraW5nKCkgOiBudWxscHRyLCB7CisgICAg
ICAgICAgICBudWxscHRyLAorICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgIG51bGxw
dHIsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PHVpbnQzMl90PihiYWNraW5nQnVmZmVycy5zaXplKCkpLAorICAgICAgICAgICAg
YmFja2luZ0J1ZmZlcnMuZGF0YSgpLAorICAgICAgICB9LCB7CisgICAgICAgICAgICBudWxscHRy
LAorICAgICAgICAgICAgZGVzY3JpcHRvci5wcmltaXRpdmUgPyBjb252ZXJ0VG9CYWNraW5nKGRl
c2NyaXB0b3IucHJpbWl0aXZlLT50b3BvbG9neSkgOiBXR1BVUHJpbWl0aXZlVG9wb2xvZ3lfUG9p
bnRMaXN0LAorICAgICAgICAgICAgZGVzY3JpcHRvci5wcmltaXRpdmUgJiYgZGVzY3JpcHRvci5w
cmltaXRpdmUtPnN0cmlwSW5kZXhGb3JtYXQgPyBjb252ZXJ0VG9CYWNraW5nKCpkZXNjcmlwdG9y
LnByaW1pdGl2ZS0+c3RyaXBJbmRleEZvcm1hdCkgOiBXR1BVSW5kZXhGb3JtYXRfVW5kZWZpbmVk
LAorICAgICAgICAgICAgZGVzY3JpcHRvci5wcmltaXRpdmUgPyBjb252ZXJ0VG9CYWNraW5nKGRl
c2NyaXB0b3IucHJpbWl0aXZlLT5mcm9udEZhY2UpIDogV0dQVUZyb250RmFjZV9DQ1csCisgICAg
ICAgICAgICBkZXNjcmlwdG9yLnByaW1pdGl2ZSA/IGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRv
ci5wcmltaXRpdmUtPmN1bGxNb2RlKSA6IFdHUFVDdWxsTW9kZV9Ob25lLAorICAgICAgICAgICAg
CisgICAgICAgIH0sCisgICAgICAgIGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsID8gJmRlcHRoU3Rl
bmNpbFN0YXRlIDogbnVsbHB0ciwgeworICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAg
IGRlc2NyaXB0b3IubXVsdGlzYW1wbGUgPyBkZXNjcmlwdG9yLm11bHRpc2FtcGxlLT5jb3VudCA6
IDAsCisgICAgICAgICAgICBkZXNjcmlwdG9yLm11bHRpc2FtcGxlID8gZGVzY3JpcHRvci5tdWx0
aXNhbXBsZS0+bWFzayA6IDAsCisgICAgICAgICAgICBkZXNjcmlwdG9yLm11bHRpc2FtcGxlID8g
ZGVzY3JpcHRvci5tdWx0aXNhbXBsZS0+YWxwaGFUb0NvdmVyYWdlRW5hYmxlZCA6IGZhbHNlLAor
ICAgICAgICB9LAorICAgICAgICBkZXNjcmlwdG9yLmZyYWdtZW50ID8gJmZyYWdtZW50U3RhdGUg
OiBudWxscHRyLAorICAgIH07CisKKyAgICByZXR1cm4gY2FsbGJhY2soYmFja2luZ0Rlc2NyaXB0
b3IpOworfQorCitSZWY8UmVuZGVyUGlwZWxpbmU+IERldmljZUltcGw6OmNyZWF0ZVJlbmRlclBp
cGVsaW5lKGNvbnN0IFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAg
ICByZXR1cm4gY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLCBbdGhpc10gKGNvbnN0IFdHUFVS
ZW5kZXJQaXBlbGluZURlc2NyaXB0b3ImIGJhY2tpbmdEZXNjcmlwdG9yKSB7CisgICAgICAgIHJl
dHVybiBSZW5kZXJQaXBlbGluZUltcGw6OmNyZWF0ZSh3Z3B1RGV2aWNlQ3JlYXRlUmVuZGVyUGlw
ZWxpbmUobV9iYWNraW5nLCAmYmFja2luZ0Rlc2NyaXB0b3IpKTsKKyAgICB9KTsKK30KKwordm9p
ZCBjcmVhdGVDb21wdXRlUGlwZWxpbmVBc3luY0NhbGxiYWNrKFdHUFVDcmVhdGVQaXBlbGluZUFz
eW5jU3RhdHVzIHN0YXR1cywgV0dQVUNvbXB1dGVQaXBlbGluZSBwaXBlbGluZSwgY29uc3QgY2hh
ciogbWVzc2FnZSwgdm9pZCogdXNlcmRhdGEpCit7CisgICAgYXV0byBkZXZpY2UgPSBhZG9wdFJl
Zigqc3RhdGljX2Nhc3Q8RGV2aWNlSW1wbCo+KHVzZXJkYXRhKSk7CisgICAgZGV2aWNlLT5jcmVh
dGVDb21wdXRlUGlwZWxpbmVBc3luY0NhbGxiYWNrKHN0YXR1cywgcGlwZWxpbmUsIG1lc3NhZ2Up
OworfQorCit2b2lkIERldmljZUltcGw6OmNyZWF0ZUNvbXB1dGVQaXBlbGluZUFzeW5jKGNvbnN0
IENvbXB1dGVQaXBlbGluZURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIHN0ZDo6ZnVuY3Rpb248dm9p
ZChSZWY8Q29tcHV0ZVBpcGVsaW5lPiYmKT4mJiBjYWxsYmFjaykKK3sKKyAgICBSZWYgcHJvdGVj
dGVkVGhpcygqdGhpcyk7CisKKyAgICBtX2NyZWF0ZUNvbXB1dGVQaXBlbGluZUFzeW5jQ2FsbGJh
Y2tzLmFwcGVuZChXVEZNb3ZlKGNhbGxiYWNrKSk7CisKKyAgICBjb252ZXJ0VG9CYWNraW5nKGRl
c2NyaXB0b3IsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0g
KGNvbnN0IFdHUFVDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJiBiYWNraW5nRGVzY3JpcHRvcikg
bXV0YWJsZSB7CisgICAgICAgIHdncHVEZXZpY2VDcmVhdGVDb21wdXRlUGlwZWxpbmVBc3luYyht
X2JhY2tpbmcsICZiYWNraW5nRGVzY3JpcHRvciwgJldlYkdQVTo6Y3JlYXRlQ29tcHV0ZVBpcGVs
aW5lQXN5bmNDYWxsYmFjaywgJnByb3RlY3RlZFRoaXMubGVha1JlZigpKTsgLy8gbGVha1JlZiBp
cyBiYWxhbmNlZCBieSBhZG9wdFJlZiBpbiByZXF1ZXN0RGV2aWNlQ2FsbGJhY2soKSBhYm92ZS4g
V2UgaGF2ZSB0byBkbyB0aGlzIGJlY2F1c2Ugd2UncmUgdXNpbmcgYSBDIEFQSSB3aXRoIG5vIGNv
bmNlcHQgb2YgcmVmZXJlbmNlIGNvdW50aW5nIG9yIGJsb2Nrcy4KKyAgICB9KTsKK30KKwordm9p
ZCBEZXZpY2VJbXBsOjpjcmVhdGVDb21wdXRlUGlwZWxpbmVBc3luY0NhbGxiYWNrKFdHUFVDcmVh
dGVQaXBlbGluZUFzeW5jU3RhdHVzLCBXR1BVQ29tcHV0ZVBpcGVsaW5lIHBpcGVsaW5lLCBjb25z
dCBjaGFyKiBtZXNzYWdlKQoreworICAgIFVOVVNFRF9QQVJBTShtZXNzYWdlKTsKKyAgICBhdXRv
IGNhbGxiYWNrID0gbV9jcmVhdGVDb21wdXRlUGlwZWxpbmVBc3luY0NhbGxiYWNrcy50YWtlRmly
c3QoKTsKKyAgICBjYWxsYmFjayhDb21wdXRlUGlwZWxpbmVJbXBsOjpjcmVhdGUocGlwZWxpbmUp
KTsKK30KKwordm9pZCBjcmVhdGVSZW5kZXJQaXBlbGluZUFzeW5jQ2FsbGJhY2soV0dQVUNyZWF0
ZVBpcGVsaW5lQXN5bmNTdGF0dXMgc3RhdHVzLCBXR1BVUmVuZGVyUGlwZWxpbmUgcGlwZWxpbmUs
IGNvbnN0IGNoYXIqIG1lc3NhZ2UsIHZvaWQqIHVzZXJkYXRhKQoreworICAgIGF1dG8gZGV2aWNl
ID0gYWRvcHRSZWYoKnN0YXRpY19jYXN0PERldmljZUltcGwqPih1c2VyZGF0YSkpOworICAgIGRl
dmljZS0+Y3JlYXRlUmVuZGVyUGlwZWxpbmVBc3luY0NhbGxiYWNrKHN0YXR1cywgcGlwZWxpbmUs
IG1lc3NhZ2UpOworfQorCit2b2lkIERldmljZUltcGw6OmNyZWF0ZVJlbmRlclBpcGVsaW5lQXN5
bmMoY29uc3QgUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQoUmVmPFJlbmRlclBpcGVsaW5lPiYmKT4mJiBjYWxsYmFjaykKK3sKKyAgICBSZWYg
cHJvdGVjdGVkVGhpcygqdGhpcyk7CisKKyAgICBtX2NyZWF0ZVJlbmRlclBpcGVsaW5lQXN5bmND
YWxsYmFja3MuYXBwZW5kKFdURk1vdmUoY2FsbGJhY2spKTsKKworICAgIGNvbnZlcnRUb0JhY2tp
bmcoZGVzY3JpcHRvciwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRo
aXMpXSAoY29uc3QgV0dQVVJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciYgYmFja2luZ0Rlc2NyaXB0
b3IpIG11dGFibGUgeworICAgIHdncHVEZXZpY2VDcmVhdGVSZW5kZXJQaXBlbGluZUFzeW5jKG1f
YmFja2luZywgJmJhY2tpbmdEZXNjcmlwdG9yLCAmV2ViR1BVOjpjcmVhdGVSZW5kZXJQaXBlbGlu
ZUFzeW5jQ2FsbGJhY2ssICZwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7IC8vIGxlYWtSZWYgaXMg
YmFsYW5jZWQgYnkgYWRvcHRSZWYgaW4gcmVxdWVzdERldmljZUNhbGxiYWNrKCkgYWJvdmUuIFdl
IGhhdmUgdG8gZG8gdGhpcyBiZWNhdXNlIHdlJ3JlIHVzaW5nIGEgQyBBUEkgd2l0aCBubyBjb25j
ZXB0IG9mIHJlZmVyZW5jZSBjb3VudGluZyBvciBibG9ja3MuCisgICAgfSk7Cit9CisKK3ZvaWQg
RGV2aWNlSW1wbDo6Y3JlYXRlUmVuZGVyUGlwZWxpbmVBc3luY0NhbGxiYWNrKFdHUFVDcmVhdGVQ
aXBlbGluZUFzeW5jU3RhdHVzLCBXR1BVUmVuZGVyUGlwZWxpbmUgcGlwZWxpbmUsIGNvbnN0IGNo
YXIqIG1lc3NhZ2UpCit7CisgICAgVU5VU0VEX1BBUkFNKG1lc3NhZ2UpOworICAgIGF1dG8gY2Fs
bGJhY2sgPSBtX2NyZWF0ZVJlbmRlclBpcGVsaW5lQXN5bmNDYWxsYmFja3MudGFrZUZpcnN0KCk7
CisgICAgY2FsbGJhY2soUmVuZGVyUGlwZWxpbmVJbXBsOjpjcmVhdGUocGlwZWxpbmUpKTsKK30K
KworUmVmPENvbW1hbmRFbmNvZGVyPiBEZXZpY2VJbXBsOjpjcmVhdGVDb21tYW5kRW5jb2Rlcihj
b25zdCBzdGQ6Om9wdGlvbmFsPENvbW1hbmRFbmNvZGVyRGVzY3JpcHRvcj4mIGRlc2NyaXB0b3Ip
Cit7CisgICAgQ1N0cmluZyBsYWJlbCA9IGRlc2NyaXB0b3IgPyBkZXNjcmlwdG9yLT5sYWJlbC51
dGY4KCkgOiBDU3RyaW5nKCIiKTsKKworICAgIFdHUFVDb21tYW5kRW5jb2RlckRlc2NyaXB0b3Ig
YmFja2luZ0Rlc2NyaXB0b3IgeworICAgICAgICBudWxscHRyLAorICAgICAgICBsYWJlbC5kYXRh
KCksCisgICAgfTsKKworICAgIHJldHVybiBDb21tYW5kRW5jb2RlckltcGw6OmNyZWF0ZSh3Z3B1
RGV2aWNlQ3JlYXRlQ29tbWFuZEVuY29kZXIobV9iYWNraW5nLCAmYmFja2luZ0Rlc2NyaXB0b3Ip
KTsKK30KKworUmVmPFJlbmRlckJ1bmRsZUVuY29kZXI+IERldmljZUltcGw6OmNyZWF0ZVJlbmRl
ckJ1bmRsZUVuY29kZXIoY29uc3QgUmVuZGVyQnVuZGxlRW5jb2RlckRlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IpCit7CisgICAgYXV0byBsYWJlbCA9IGRlc2NyaXB0b3IubGFiZWwudXRmOCgpOworCisg
ICAgVmVjdG9yPFdHUFVUZXh0dXJlRm9ybWF0PiBiYWNraW5nQ29sb3JGb3JtYXRzOworICAgIGJh
Y2tpbmdDb2xvckZvcm1hdHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShkZXNjcmlwdG9yLmNvbG9y
Rm9ybWF0cy5zaXplKCkpOworICAgIGZvciAoYXV0byBjb2xvckZvcm1hdCA6IGRlc2NyaXB0b3Iu
Y29sb3JGb3JtYXRzKQorICAgICAgICBiYWNraW5nQ29sb3JGb3JtYXRzLnVuY2hlY2tlZEFwcGVu
ZChjb252ZXJ0VG9CYWNraW5nKGNvbG9yRm9ybWF0KSk7CisKKyAgICBXR1BVUmVuZGVyQnVuZGxl
RW5jb2RlckRlc2NyaXB0b3IgYmFja2luZ0Rlc2NyaXB0b3IgeworICAgICAgICBudWxscHRyLAor
ICAgICAgICBsYWJlbC5kYXRhKCksCisgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90PihiYWNr
aW5nQ29sb3JGb3JtYXRzLnNpemUoKSksCisgICAgICAgIGJhY2tpbmdDb2xvckZvcm1hdHMuZGF0
YSgpLAorICAgICAgICBkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbEZvcm1hdCA/IGNvbnZlcnRUb0Jh
Y2tpbmcoKmRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsRm9ybWF0KSA6IFdHUFVUZXh0dXJlRm9ybWF0
X1VuZGVmaW5lZCwKKyAgICAgICAgZGVzY3JpcHRvci5zYW1wbGVDb3VudCwKKyAgICB9OworCisg
ICAgcmV0dXJuIFJlbmRlckJ1bmRsZUVuY29kZXJJbXBsOjpjcmVhdGUod2dwdURldmljZUNyZWF0
ZVJlbmRlckJ1bmRsZUVuY29kZXIobV9iYWNraW5nLCAmYmFja2luZ0Rlc2NyaXB0b3IpKTsKK30K
KworUmVmPFF1ZXJ5U2V0PiBEZXZpY2VJbXBsOjpjcmVhdGVRdWVyeVNldChjb25zdCBRdWVyeVNl
dERlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgYXV0byBsYWJlbCA9IGRlc2NyaXB0b3Iu
bGFiZWwudXRmOCgpOworCisgICAgVmVjdG9yPFdHUFVQaXBlbGluZVN0YXRpc3RpY05hbWU+IGJh
Y2tpbmdQaXBlbGluZVN0YXRpc3RpY3M7CisgICAgYmFja2luZ1BpcGVsaW5lU3RhdGlzdGljcy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KGRlc2NyaXB0b3IucGlwZWxpbmVTdGF0aXN0aWNzLnNpemUo
KSk7CisgICAgZm9yIChhdXRvIHBpcGVsaW5lU3RhdGlzdGljIDogZGVzY3JpcHRvci5waXBlbGlu
ZVN0YXRpc3RpY3MpCisgICAgICAgIGJhY2tpbmdQaXBlbGluZVN0YXRpc3RpY3MudW5jaGVja2Vk
QXBwZW5kKGNvbnZlcnRUb0JhY2tpbmcocGlwZWxpbmVTdGF0aXN0aWMpKTsKKworICAgIFdHUFVR
dWVyeVNldERlc2NyaXB0b3IgYmFja2luZ0Rlc2NyaXB0b3IgeworICAgICAgICBudWxscHRyLAor
ICAgICAgICBsYWJlbC5kYXRhKCksCisgICAgICAgIGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRv
ci50eXBlKSwKKyAgICAgICAgZGVzY3JpcHRvci5jb3VudCwKKyAgICAgICAgYmFja2luZ1BpcGVs
aW5lU3RhdGlzdGljcy5kYXRhKCksCisgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90PihiYWNr
aW5nUGlwZWxpbmVTdGF0aXN0aWNzLnNpemUoKSksCisgICAgfTsKKworICAgIHJldHVybiBRdWVy
eVNldEltcGw6OmNyZWF0ZSh3Z3B1RGV2aWNlQ3JlYXRlUXVlcnlTZXQobV9iYWNraW5nLCAmYmFj
a2luZ0Rlc2NyaXB0b3IpKTsKK30KKwordm9pZCBEZXZpY2VJbXBsOjpwdXNoRXJyb3JTY29wZShF
cnJvckZpbHRlciBlcnJvckZpbHRlcikKK3sKKyAgICB3Z3B1RGV2aWNlUHVzaEVycm9yU2NvcGUo
bV9iYWNraW5nLCBjb252ZXJ0VG9CYWNraW5nKGVycm9yRmlsdGVyKSk7Cit9CisKK3ZvaWQgcG9w
RXJyb3JTY29wZUNhbGxiYWNrKFdHUFVFcnJvclR5cGUgdHlwZSwgY29uc3QgY2hhciogbWVzc2Fn
ZSwgdm9pZCogdXNlcmRhdGEpCit7CisgICAgYXV0byBkZXZpY2UgPSBhZG9wdFJlZigqc3RhdGlj
X2Nhc3Q8RGV2aWNlSW1wbCo+KHVzZXJkYXRhKSk7CisgICAgZGV2aWNlLT5wb3BFcnJvclNjb3Bl
Q2FsbGJhY2sodHlwZSwgbWVzc2FnZSk7Cit9CisKK3ZvaWQgRGV2aWNlSW1wbDo6cG9wRXJyb3JT
Y29wZShzdGQ6OmZ1bmN0aW9uPHZvaWQoc3RkOjpvcHRpb25hbDxFcnJvcj4mJik+JiYgY2FsbGJh
Y2spCit7CisgICAgUmVmIHByb3RlY3RlZFRoaXMoKnRoaXMpOworCisgICAgbV9wb3BFcnJvclNj
b3BlQ2FsbGJhY2tzLmFwcGVuZChXVEZNb3ZlKGNhbGxiYWNrKSk7CisKKyAgICB3Z3B1RGV2aWNl
UG9wRXJyb3JTY29wZShtX2JhY2tpbmcsICZXZWJHUFU6OnBvcEVycm9yU2NvcGVDYWxsYmFjaywg
JnByb3RlY3RlZFRoaXMubGVha1JlZigpKTsgLy8gbGVha1JlZiBpcyBiYWxhbmNlZCBieSBhZG9w
dFJlZiBpbiByZXF1ZXN0RGV2aWNlQ2FsbGJhY2soKSBhYm92ZS4gV2UgaGF2ZSB0byBkbyB0aGlz
IGJlY2F1c2Ugd2UncmUgdXNpbmcgYSBDIEFQSSB3aXRoIG5vIGNvbmNlcHQgb2YgcmVmZXJlbmNl
IGNvdW50aW5nIG9yIGJsb2Nrcy4KK30KKwordm9pZCBEZXZpY2VJbXBsOjpwb3BFcnJvclNjb3Bl
Q2FsbGJhY2soV0dQVUVycm9yVHlwZSBlcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7
CisgICAgc3RkOjpvcHRpb25hbDxFcnJvcj4gZXJyb3I7CisgICAgc3dpdGNoIChlcnJvclR5cGUp
IHsKKyAgICBjYXNlIFdHUFVFcnJvclR5cGVfTm9FcnJvcjoKKyAgICBjYXNlIFdHUFVFcnJvclR5
cGVfRm9yY2UzMjoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXR1BVRXJyb3JUeXBlX1ZhbGlk
YXRpb246CisgICAgICAgIGVycm9yID0geyB7IFZhbGlkYXRpb25FcnJvcjo6Y3JlYXRlKG1lc3Nh
Z2UpIH0gfTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXR1BVRXJyb3JUeXBlX091dE9mTWVt
b3J5OgorICAgICAgICBlcnJvciA9IHsgeyBPdXRPZk1lbW9yeUVycm9yOjpjcmVhdGUoKSB9IH07
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0dQVUVycm9yVHlwZV9Vbmtub3duOgorICAgICAg
ICBlcnJvciA9IHsgeyBPdXRPZk1lbW9yeUVycm9yOjpjcmVhdGUoKSB9IH07CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgV0dQVUVycm9yVHlwZV9EZXZpY2VMb3N0OgorICAgICAgICBlcnJvciA9
IHsgeyBPdXRPZk1lbW9yeUVycm9yOjpjcmVhdGUoKSB9IH07CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGF1dG8gY2FsbGJhY2sgPSBtX3BvcEVycm9yU2NvcGVDYWxsYmFja3MudGFrZUZp
cnN0KCk7CisgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOworfQorCit2b2lkIERldmljZUlt
cGw6OnNldExhYmVsSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBsYWJlbCkKK3sKKyAgICB3Z3B1RGV2
aWNlU2V0TGFiZWwobV9iYWNraW5nLCBsYWJlbC51dGY4KCkuZGF0YSgpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVRGV2aWNlSW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVEZXZpY2VJ
bXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uODZhNjBiYzRiZTFjZjhkOGVmMTlhMDJiNDQ2NDg2MGE2ZTI5OTU1
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2Vi
R1BVL0ltcGwvV2ViR1BVRGV2aWNlSW1wbC5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYkdQVURldmljZS5oIgorI2luY2x1ZGUgPFdl
YkdQVS9XZWJHUFUuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKworbmFtZXNwYWNlIFBBTCB7
CituYW1lc3BhY2UgV2ViR1BVIHsKKworY2xhc3MgRGV2aWNlSW1wbCBmaW5hbCA6IHB1YmxpYyBE
ZXZpY2UgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RGV2aWNlSW1wbD4gY3JlYXRlKFdHUFVE
ZXZpY2UgZGV2aWNlLCBSZWY8U3VwcG9ydGVkRmVhdHVyZXM+JiYgZmVhdHVyZXMsIFJlZjxTdXBw
b3J0ZWRMaW1pdHM+JiYgbGltaXRzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRGV2aWNlSW1wbChkZXZpY2UsIFdURk1vdmUoZmVhdHVyZXMpLCBXVEZNb3ZlKGxpbWl0cykp
KTsKKyAgICB9CisKKyAgICB+RGV2aWNlSW1wbCgpOworCisgICAgV0dQVURldmljZSBiYWNraW5n
KCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nOyB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIHZv
aWQgY3JlYXRlQ29tcHV0ZVBpcGVsaW5lQXN5bmNDYWxsYmFjayhXR1BVQ3JlYXRlUGlwZWxpbmVB
c3luY1N0YXR1cywgV0dQVUNvbXB1dGVQaXBlbGluZSwgY29uc3QgY2hhciogbWVzc2FnZSwgdm9p
ZCogdXNlcmRhdGEpOworICAgIGZyaWVuZCB2b2lkIGNyZWF0ZVJlbmRlclBpcGVsaW5lQXN5bmND
YWxsYmFjayhXR1BVQ3JlYXRlUGlwZWxpbmVBc3luY1N0YXR1cywgV0dQVVJlbmRlclBpcGVsaW5l
LCBjb25zdCBjaGFyKiBtZXNzYWdlLCB2b2lkKiB1c2VyZGF0YSk7CisgICAgZnJpZW5kIHZvaWQg
cG9wRXJyb3JTY29wZUNhbGxiYWNrKFdHUFVFcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2Us
IHZvaWQqIHVzZXJkYXRhKTsKKworICAgIERldmljZUltcGwoV0dQVURldmljZSwgUmVmPFN1cHBv
cnRlZEZlYXR1cmVzPiYmLCBSZWY8U3VwcG9ydGVkTGltaXRzPiYmKTsKKworICAgIERldmljZUlt
cGwoY29uc3QgRGV2aWNlSW1wbCYpID0gZGVsZXRlOworICAgIERldmljZUltcGwoRGV2aWNlSW1w
bCYmKSA9IGRlbGV0ZTsKKyAgICBEZXZpY2VJbXBsJiBvcGVyYXRvcj0oY29uc3QgRGV2aWNlSW1w
bCYpID0gZGVsZXRlOworICAgIERldmljZUltcGwmIG9wZXJhdG9yPShEZXZpY2VJbXBsJiYpID0g
ZGVsZXRlOworCisgICAgdm9pZCBkZXN0cm95KCkgZmluYWw7CisKKyAgICBSZWY8QnVmZmVyPiBj
cmVhdGVCdWZmZXIoY29uc3QgQnVmZmVyRGVzY3JpcHRvciYpIGZpbmFsOworICAgIFJlZjxUZXh0
dXJlPiBjcmVhdGVUZXh0dXJlKGNvbnN0IFRleHR1cmVEZXNjcmlwdG9yJikgZmluYWw7CisgICAg
UmVmPFNhbXBsZXI+IGNyZWF0ZVNhbXBsZXIoY29uc3QgU2FtcGxlckRlc2NyaXB0b3ImKSBmaW5h
bDsKKyAgICBSZWY8RXh0ZXJuYWxUZXh0dXJlPiBpbXBvcnRFeHRlcm5hbFRleHR1cmUoY29uc3Qg
RXh0ZXJuYWxUZXh0dXJlRGVzY3JpcHRvciYpIGZpbmFsOworCisgICAgUmVmPEJpbmRHcm91cExh
eW91dD4gY3JlYXRlQmluZEdyb3VwTGF5b3V0KGNvbnN0IEJpbmRHcm91cExheW91dERlc2NyaXB0
b3ImKSBmaW5hbDsKKyAgICBSZWY8UGlwZWxpbmVMYXlvdXQ+IGNyZWF0ZVBpcGVsaW5lTGF5b3V0
KGNvbnN0IFBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciYpIGZpbmFsOworICAgIFJlZjxCaW5kR3Jv
dXA+IGNyZWF0ZUJpbmRHcm91cChjb25zdCBCaW5kR3JvdXBEZXNjcmlwdG9yJikgZmluYWw7CisK
KyAgICBSZWY8U2hhZGVyTW9kdWxlPiBjcmVhdGVTaGFkZXJNb2R1bGUoY29uc3QgU2hhZGVyTW9k
dWxlRGVzY3JpcHRvciYpIGZpbmFsOworICAgIFJlZjxDb21wdXRlUGlwZWxpbmU+IGNyZWF0ZUNv
bXB1dGVQaXBlbGluZShjb25zdCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJikgZmluYWw7Cisg
ICAgUmVmPFJlbmRlclBpcGVsaW5lPiBjcmVhdGVSZW5kZXJQaXBlbGluZShjb25zdCBSZW5kZXJQ
aXBlbGluZURlc2NyaXB0b3ImKSBmaW5hbDsKKyAgICB2b2lkIGNyZWF0ZUNvbXB1dGVQaXBlbGlu
ZUFzeW5jQ2FsbGJhY2soV0dQVUNyZWF0ZVBpcGVsaW5lQXN5bmNTdGF0dXMsIFdHUFVDb21wdXRl
UGlwZWxpbmUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOworICAgIHZvaWQgY3JlYXRlQ29tcHV0ZVBp
cGVsaW5lQXN5bmMoY29uc3QgQ29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciYsIHN0ZDo6ZnVuY3Rp
b248dm9pZChSZWY8Q29tcHV0ZVBpcGVsaW5lPiYmKT4mJikgZmluYWw7CisgICAgdm9pZCBjcmVh
dGVSZW5kZXJQaXBlbGluZUFzeW5jQ2FsbGJhY2soV0dQVUNyZWF0ZVBpcGVsaW5lQXN5bmNTdGF0
dXMsIFdHUFVSZW5kZXJQaXBlbGluZSwgY29uc3QgY2hhciogbWVzc2FnZSk7CisgICAgdm9pZCBj
cmVhdGVSZW5kZXJQaXBlbGluZUFzeW5jKGNvbnN0IFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciYs
IHN0ZDo6ZnVuY3Rpb248dm9pZChSZWY8UmVuZGVyUGlwZWxpbmU+JiYpPiYmKSBmaW5hbDsKKwor
ICAgIFJlZjxDb21tYW5kRW5jb2Rlcj4gY3JlYXRlQ29tbWFuZEVuY29kZXIoY29uc3Qgc3RkOjpv
cHRpb25hbDxDb21tYW5kRW5jb2RlckRlc2NyaXB0b3I+JikgZmluYWw7CisgICAgUmVmPFJlbmRl
ckJ1bmRsZUVuY29kZXI+IGNyZWF0ZVJlbmRlckJ1bmRsZUVuY29kZXIoY29uc3QgUmVuZGVyQnVu
ZGxlRW5jb2RlckRlc2NyaXB0b3ImKSBmaW5hbDsKKworICAgIFJlZjxRdWVyeVNldD4gY3JlYXRl
UXVlcnlTZXQoY29uc3QgUXVlcnlTZXREZXNjcmlwdG9yJikgZmluYWw7CisKKyAgICB2b2lkIHB1
c2hFcnJvclNjb3BlKEVycm9yRmlsdGVyKSBmaW5hbDsKKyAgICB2b2lkIHBvcEVycm9yU2NvcGVD
YWxsYmFjayhXR1BVRXJyb3JUeXBlLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsKKyAgICB2b2lkIHBv
cEVycm9yU2NvcGUoc3RkOjpmdW5jdGlvbjx2b2lkKHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYpPiYm
KSBmaW5hbDsKKworICAgIHZvaWQgc2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5h
bDsKKworICAgIFdHUFVEZXZpY2UgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworCisgICAgRGVxdWU8
c3RkOjpmdW5jdGlvbjx2b2lkKFJlZjxDb21wdXRlUGlwZWxpbmU+JiYpPj4gbV9jcmVhdGVDb21w
dXRlUGlwZWxpbmVBc3luY0NhbGxiYWNrczsKKyAgICBEZXF1ZTxzdGQ6OmZ1bmN0aW9uPHZvaWQo
UmVmPFJlbmRlclBpcGVsaW5lPiYmKT4+IG1fY3JlYXRlUmVuZGVyUGlwZWxpbmVBc3luY0NhbGxi
YWNrczsKKyAgICBEZXF1ZTxzdGQ6OmZ1bmN0aW9uPHZvaWQoc3RkOjpvcHRpb25hbDxFcnJvcj4m
Jik+PiBtX3BvcEVycm9yU2NvcGVDYWxsYmFja3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBQQUwK
K30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVFeHRlcm5hbFRleHR1cmVJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVRXh0ZXJuYWxU
ZXh0dXJlSW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmFlYjg5ZTA3ZmI1NjI3ZjI2OWRiOTM1MDIxNTg2
ZGI0ZjcwYTY0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3Jh
cGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVRXh0ZXJuYWxUZXh0dXJlSW1wbC5jcHAKQEAgLTAsMCAr
MSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJH
UFVFeHRlcm5hbFRleHR1cmVJbXBsLmgiCisKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVRXh0Lmg+
CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK0V4dGVybmFsVGV4dHVy
ZUltcGw6OkV4dGVybmFsVGV4dHVyZUltcGwoKQoreworfQorCitFeHRlcm5hbFRleHR1cmVJbXBs
Ojp+RXh0ZXJuYWxUZXh0dXJlSW1wbCgpCit7Cit9CisKK3ZvaWQgRXh0ZXJuYWxUZXh0dXJlSW1w
bDo6c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKQoreworfQorCit9IC8vIG5hbWVzcGFj
ZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
UEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVFeHRlcm5hbFRleHR1cmVJbXBsLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUV4dGVy
bmFsVGV4dHVyZUltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZDc4MTYzM2U1OGQwNTk3NmI0ZjdkYjliNWM4
M2JlYjA4MWJlNmFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9n
cmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVFeHRlcm5hbFRleHR1cmVJbXBsLmgKQEAgLTAsMCAr
MSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVRXh0
ZXJuYWxUZXh0dXJlLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorCituYW1lc3BhY2Ug
UEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBFeHRlcm5hbFRleHR1cmVJbXBsIGZp
bmFsIDogcHVibGljIEV4dGVybmFsVGV4dHVyZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxF
eHRlcm5hbFRleHR1cmVJbXBsPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRXh0ZXJuYWxUZXh0dXJlSW1wbCgpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5F
eHRlcm5hbFRleHR1cmVJbXBsKCk7CisKK3ByaXZhdGU6CisgICAgRXh0ZXJuYWxUZXh0dXJlSW1w
bCgpOworCisgICAgRXh0ZXJuYWxUZXh0dXJlSW1wbChjb25zdCBFeHRlcm5hbFRleHR1cmVJbXBs
JikgPSBkZWxldGU7CisgICAgRXh0ZXJuYWxUZXh0dXJlSW1wbChFeHRlcm5hbFRleHR1cmVJbXBs
JiYpID0gZGVsZXRlOworICAgIEV4dGVybmFsVGV4dHVyZUltcGwmIG9wZXJhdG9yPShjb25zdCBF
eHRlcm5hbFRleHR1cmVJbXBsJikgPSBkZWxldGU7CisgICAgRXh0ZXJuYWxUZXh0dXJlSW1wbCYg
b3BlcmF0b3I9KEV4dGVybmFsVGV4dHVyZUltcGwmJikgPSBkZWxldGU7CisKKyAgICB2b2lkIHNl
dExhYmVsSW50ZXJuYWwoY29uc3QgU3RyaW5nJikgZmluYWw7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
UEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVJbXBsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVSW1wbC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNTQ4ZTIwZjE0OTZkODU2NWMxMjE5OTk1ZDQyNmFkZTAxNjQzMjhhNAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BV
SW1wbC5jcHAKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWJHUFVJbXBsLmgiCisKKyNpbmNsdWRlICJXZWJHUFVBZGFwdGVySW1w
bC5oIgorI2luY2x1ZGUgIldlYkdQVUNvbnZlcnRUb0JhY2tpbmcuaCIKKyNpbmNsdWRlIDxXZWJH
UFUvV2ViR1BVRXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisK
K0dQVUltcGw6OkdQVUltcGwoV0dQVUluc3RhbmNlIGluc3RhbmNlKQorICAgIDogbV9iYWNraW5n
KGluc3RhbmNlKQoreworfQorCitHUFVJbXBsOjp+R1BVSW1wbCgpCit7CisgICAgd2dwdUluc3Rh
bmNlUmVsZWFzZShtX2JhY2tpbmcpOworfQorCit2b2lkIHJlcXVlc3RBZGFwdGVyQ2FsbGJhY2so
V0dQVVJlcXVlc3RBZGFwdGVyU3RhdHVzIHN0YXR1cywgV0dQVUFkYXB0ZXIgYWRhcHRlciwgY29u
c3QgY2hhciogbWVzc2FnZSwgdm9pZCogdXNlcmRhdGEpCit7CisgICAgYXV0byBncHUgPSBhZG9w
dFJlZigqc3RhdGljX2Nhc3Q8R1BVSW1wbCo+KHVzZXJkYXRhKSk7CisgICAgZ3B1LT5yZXF1ZXN0
QWRhcHRlckNhbGxiYWNrKHN0YXR1cywgYWRhcHRlciwgbWVzc2FnZSk7Cit9CisKK3ZvaWQgR1BV
SW1wbDo6cmVxdWVzdEFkYXB0ZXIoY29uc3QgUmVxdWVzdEFkYXB0ZXJPcHRpb25zJiBvcHRpb25z
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVmUHRyPEFkYXB0ZXI+JiYpPiYmIGNhbGxiYWNrKQorewor
ICAgIFJlZiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKKworICAgIFdHUFVSZXF1ZXN0QWRhcHRlck9w
dGlvbnMgYmFja2luZ09wdGlvbnMgeworICAgICAgICBudWxscHRyLAorICAgICAgICBudWxscHRy
LAorICAgICAgICBvcHRpb25zLnBvd2VyUHJlZmVyZW5jZSA/IGNvbnZlcnRUb0JhY2tpbmcoKm9w
dGlvbnMucG93ZXJQcmVmZXJlbmNlKSA6IHN0YXRpY19jYXN0PFdHUFVQb3dlclByZWZlcmVuY2U+
KFdHUFVQb3dlclByZWZlcmVuY2VfTm9QcmVmZXJlbmNlKSwKKyAgICAgICAgb3B0aW9ucy5mb3Jj
ZUZhbGxiYWNrQWRhcHRlciwKKyAgICB9OworCisgICAgbV9jYWxsYmFja3MuYXBwZW5kKFdURk1v
dmUoY2FsbGJhY2spKTsKKworICAgIHdncHVJbnN0YW5jZVJlcXVlc3RBZGFwdGVyKG1fYmFja2lu
ZywgJmJhY2tpbmdPcHRpb25zLCAmV2ViR1BVOjpyZXF1ZXN0QWRhcHRlckNhbGxiYWNrLCAmcHJv
dGVjdGVkVGhpcy5sZWFrUmVmKCkpOyAvLyBsZWFrUmVmIGlzIGJhbGFuY2VkIGJ5IGFkb3B0UmVm
IGluIHJlcXVlc3RBZGFwdGVyQ2FsbGJhY2soKSBhYm92ZS4gV2UgaGF2ZSB0byBkbyB0aGlzIGJl
Y2F1c2Ugd2UncmUgdXNpbmcgYSBDIEFQSSB3aXRoIG5vIGNvbmNlcHQgb2YgcmVmZXJlbmNlIGNv
dW50aW5nIG9yIGJsb2Nrcy4KK30KKwordm9pZCBHUFVJbXBsOjpyZXF1ZXN0QWRhcHRlckNhbGxi
YWNrKFdHUFVSZXF1ZXN0QWRhcHRlclN0YXR1cywgV0dQVUFkYXB0ZXIgYWRhcHRlciwgY29uc3Qg
Y2hhciogbWVzc2FnZSkKK3sKKyAgICBVTlVTRURfUEFSQU0obWVzc2FnZSk7CisgICAgYXV0byBj
YWxsYmFjayA9IG1fY2FsbGJhY2tzLnRha2VGaXJzdCgpOworICAgIGNhbGxiYWNrKEFkYXB0ZXJJ
bXBsOjpjcmVhdGUoYWRhcHRlcikpOworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFt
ZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGlj
cy9XZWJHUFUvSW1wbC9XZWJHUFVJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBo
aWNzL1dlYkdQVS9JbXBsL1dlYkdQVUltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YzE3MDNkYjJlZTRlMDBm
YjExNWM0NmY2YTNiMDYyYzBjOGYyNjljCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVJbXBsLmgKQEAgLTAsMCArMSw2
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVLmgiCisj
aW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorCituYW1l
c3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBHUFVJbXBsIGZpbmFsIDog
cHVibGljIEdQVSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxHUFVJbXBsPiBjcmVhdGUoV0dQ
VUluc3RhbmNlIGluc3RhbmNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
R1BVSW1wbChpbnN0YW5jZSkpOworICAgIH0KKworICAgIHZpcnR1YWwgfkdQVUltcGwoKTsKKwor
ICAgIFdHUFVJbnN0YW5jZSBiYWNraW5nKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nOyB9CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIHZvaWQgcmVxdWVzdEFkYXB0ZXJDYWxsYmFjayhXR1BVUmVx
dWVzdEFkYXB0ZXJTdGF0dXMsIFdHUFVBZGFwdGVyLCBjb25zdCBjaGFyKiBtZXNzYWdlLCB2b2lk
KiB1c2VyZGF0YSk7CisKKyAgICBHUFVJbXBsKFdHUFVJbnN0YW5jZSk7CisKKyAgICBHUFVJbXBs
KGNvbnN0IEdQVUltcGwmKSA9IGRlbGV0ZTsKKyAgICBHUFVJbXBsKEdQVUltcGwmJikgPSBkZWxl
dGU7CisgICAgR1BVSW1wbCYgb3BlcmF0b3I9KGNvbnN0IEdQVUltcGwmKSA9IGRlbGV0ZTsKKyAg
ICBHUFVJbXBsJiBvcGVyYXRvcj0oR1BVSW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIHZvaWQgcmVx
dWVzdEFkYXB0ZXJDYWxsYmFjayhXR1BVUmVxdWVzdEFkYXB0ZXJTdGF0dXMsIFdHUFVBZGFwdGVy
LCBjb25zdCBjaGFyKiBtZXNzYWdlKTsKKyAgICB2b2lkIHJlcXVlc3RBZGFwdGVyKGNvbnN0IFJl
cXVlc3RBZGFwdGVyT3B0aW9ucyYsIHN0ZDo6ZnVuY3Rpb248dm9pZChSZWZQdHI8QWRhcHRlcj4m
Jik+JiYpIGZpbmFsOworCisgICAgV0dQVUluc3RhbmNlIG1fYmFja2luZyB7IG51bGxwdHIgfTsK
KworICAgIERlcXVlPHN0ZDo6ZnVuY3Rpb248dm9pZChSZWZQdHI8QWRhcHRlcj4mJik+PiBtX2Nh
bGxiYWNrczsKK307CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BV
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBs
L1dlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dy
YXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNjQ0NzM5OTMxODk1MGQ5NTRhN2UxNmRjZjQ2ZTdmYjQ3ZTE0YzVmMAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BV
UGlwZWxpbmVMYXlvdXRJbXBsLmNwcApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5oIgor
CisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVz
cGFjZSBXZWJHUFUgeworCitQaXBlbGluZUxheW91dEltcGw6OlBpcGVsaW5lTGF5b3V0SW1wbChX
R1BVUGlwZWxpbmVMYXlvdXQgcGlwZWxpbmVMYXlvdXQpCisgICAgOiBtX2JhY2tpbmcocGlwZWxp
bmVMYXlvdXQpCit7Cit9CisKK1BpcGVsaW5lTGF5b3V0SW1wbDo6flBpcGVsaW5lTGF5b3V0SW1w
bCgpCit7CisgICAgd2dwdVBpcGVsaW5lTGF5b3V0UmVsZWFzZShtX2JhY2tpbmcpOworfQorCit2
b2lkIFBpcGVsaW5lTGF5b3V0SW1wbDo6c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxh
YmVsKQoreworICAgIHdncHVQaXBlbGluZUxheW91dFNldExhYmVsKG1fYmFja2luZywgbGFiZWwu
dXRmOCgpLmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2Ug
V2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQ
VS9JbXBsL1dlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVQaXBlbGluZUxheW91dEltcGwuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zYWZjYTJjNzRlODMzODFkOGIzZWM1MTBhMDNjZWY5Mjc5ZDFiYTQ4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJH
UFVQaXBlbGluZUxheW91dEltcGwuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJXZWJHUFVQaXBlbGluZUxheW91dC5oIgorI2luY2x1ZGUg
PFdlYkdQVS9XZWJHUFUuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsK
KworY2xhc3MgUGlwZWxpbmVMYXlvdXRJbXBsIGZpbmFsIDogcHVibGljIFBpcGVsaW5lTGF5b3V0
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFBpcGVsaW5lTGF5b3V0SW1wbD4gY3JlYXRlKFdH
UFVQaXBlbGluZUxheW91dCBwaXBlbGluZUxheW91dCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFBpcGVsaW5lTGF5b3V0SW1wbChwaXBlbGluZUxheW91dCkpOworICAgIH0K
KworICAgIHZpcnR1YWwgflBpcGVsaW5lTGF5b3V0SW1wbCgpOworCisgICAgV0dQVVBpcGVsaW5l
TGF5b3V0IGJhY2tpbmcoKSBjb25zdCB7IHJldHVybiBtX2JhY2tpbmc7IH0KKworcHJpdmF0ZToK
KyAgICBQaXBlbGluZUxheW91dEltcGwoV0dQVVBpcGVsaW5lTGF5b3V0KTsKKworICAgIFBpcGVs
aW5lTGF5b3V0SW1wbChjb25zdCBQaXBlbGluZUxheW91dEltcGwmKSA9IGRlbGV0ZTsKKyAgICBQ
aXBlbGluZUxheW91dEltcGwoUGlwZWxpbmVMYXlvdXRJbXBsJiYpID0gZGVsZXRlOworICAgIFBp
cGVsaW5lTGF5b3V0SW1wbCYgb3BlcmF0b3I9KGNvbnN0IFBpcGVsaW5lTGF5b3V0SW1wbCYpID0g
ZGVsZXRlOworICAgIFBpcGVsaW5lTGF5b3V0SW1wbCYgb3BlcmF0b3I9KFBpcGVsaW5lTGF5b3V0
SW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIHZvaWQgc2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJp
bmcmKSBmaW5hbDsKKworICAgIFdHUFVQaXBlbGluZUxheW91dCBtX2JhY2tpbmcgeyBudWxscHRy
IH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJH
UFVRdWVyeVNldEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJH
UFUvSW1wbC9XZWJHUFVRdWVyeVNldEltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ2ZWQ2OTQwYTI5MzEz
MDE3MTk3Zjg4NGMwOGQyNWEzYzE3ZjYwYmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVF1ZXJ5U2V0SW1wbC5jcHAK
QEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXZWJHUFVRdWVyeVNldEltcGwuaCIKKworI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFVFeHQu
aD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworUXVlcnlTZXRJbXBs
OjpRdWVyeVNldEltcGwoV0dQVVF1ZXJ5U2V0IHF1ZXJ5U2V0KQorICAgIDogbV9iYWNraW5nKHF1
ZXJ5U2V0KQoreworfQorCitRdWVyeVNldEltcGw6On5RdWVyeVNldEltcGwoKQoreworICAgIHdn
cHVRdWVyeVNldFJlbGVhc2UobV9iYWNraW5nKTsKK30KKwordm9pZCBRdWVyeVNldEltcGw6OmRl
c3Ryb3koKQoreworICAgIHdncHVRdWVyeVNldERlc3Ryb3kobV9iYWNraW5nKTsKK30KKwordm9p
ZCBRdWVyeVNldEltcGw6OnNldExhYmVsSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBsYWJlbCkKK3sK
KyAgICB3Z3B1UXVlcnlTZXRTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVsLnV0ZjgoKS5kYXRhKCkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVR
dWVyeVNldEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0lt
cGwvV2ViR1BVUXVlcnlTZXRJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWZkZjdmMGYxN2I5Y2E1MDM5OWQ3
YTkzMGVmZGM5NDYyZjE5NDRiYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUXVlcnlTZXRJbXBsLmgKQEAgLTAsMCAr
MSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVUXVl
cnlTZXQuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVLmg+CisKK25hbWVzcGFjZSBQQUwgewor
bmFtZXNwYWNlIFdlYkdQVSB7CisKK2NsYXNzIFF1ZXJ5U2V0SW1wbCBmaW5hbCA6IHB1YmxpYyBR
dWVyeVNldCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxRdWVyeVNldEltcGw+IGNyZWF0ZShX
R1BVUXVlcnlTZXQgcXVlcnlTZXQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBRdWVyeVNldEltcGwocXVlcnlTZXQpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5RdWVyeVNl
dEltcGwoKTsKKworICAgIFdHUFVRdWVyeVNldCBiYWNraW5nKCkgY29uc3QgeyByZXR1cm4gbV9i
YWNraW5nOyB9CisKK3ByaXZhdGU6CisgICAgUXVlcnlTZXRJbXBsKFdHUFVRdWVyeVNldCk7CisK
KyAgICBRdWVyeVNldEltcGwoY29uc3QgUXVlcnlTZXRJbXBsJikgPSBkZWxldGU7CisgICAgUXVl
cnlTZXRJbXBsKFF1ZXJ5U2V0SW1wbCYmKSA9IGRlbGV0ZTsKKyAgICBRdWVyeVNldEltcGwmIG9w
ZXJhdG9yPShjb25zdCBRdWVyeVNldEltcGwmKSA9IGRlbGV0ZTsKKyAgICBRdWVyeVNldEltcGwm
IG9wZXJhdG9yPShRdWVyeVNldEltcGwmJikgPSBkZWxldGU7CisKKyAgICB2b2lkIGRlc3Ryb3ko
KSBmaW5hbDsKKworICAgIHZvaWQgc2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5h
bDsKKworICAgIFdHUFVRdWVyeVNldCBtX2JhY2tpbmcgeyBudWxscHRyIH07Cit9OworCit9IC8v
IG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVRdWV1ZUltcGwuY3Bw
IGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVRdWV1
ZUltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI3NjUyZGY2NWY0ZjZmM2EyMDZhOWE2OTQyZTVlMzg0MWFk
YjU2MjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNz
L1dlYkdQVS9JbXBsL1dlYkdQVVF1ZXVlSW1wbC5jcHAKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViR1BVUXVldWVJbXBsLmgi
CisKKyNpbmNsdWRlICJXZWJHUFVCdWZmZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVQ29tbWFu
ZEJ1ZmZlckltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVDb252ZXJ0VG9CYWNraW5nLmgiCisjaW5j
bHVkZSAiV2ViR1BVVGV4dHVyZUltcGwuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVRXh0Lmg+
CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK1F1ZXVlSW1wbDo6UXVl
dWVJbXBsKFdHUFVRdWV1ZSBxdWV1ZSkKKyAgICA6IG1fYmFja2luZyhxdWV1ZSkKK3sKK30KKwor
UXVldWVJbXBsOjp+UXVldWVJbXBsKCkKK3sKKyAgICB3Z3B1UXVldWVSZWxlYXNlKG1fYmFja2lu
Zyk7Cit9CisKK3ZvaWQgUXVldWVJbXBsOjpzdWJtaXQoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8Q29tbWFuZEJ1ZmZlcj4+JiYgY29tbWFuZEJ1ZmZlcnMpCit7CisgICAgVmVjdG9yPFdH
UFVDb21tYW5kQnVmZmVyPiBiYWNraW5nQ29tbWFuZEJ1ZmZlcnM7CisgICAgYmFja2luZ0NvbW1h
bmRCdWZmZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY29tbWFuZEJ1ZmZlcnMuc2l6ZSgpKTsK
KyAgICBmb3IgKGF1dG8gY29tbWFuZEJ1ZmZlciA6IGNvbW1hbmRCdWZmZXJzKQorICAgICAgICBi
YWNraW5nQ29tbWFuZEJ1ZmZlcnMudW5jaGVja2VkQXBwZW5kKHN0YXRpY19jYXN0PGNvbnN0IENv
bW1hbmRCdWZmZXJJbXBsJj4oY29tbWFuZEJ1ZmZlci5nZXQoKSkuYmFja2luZygpKTsKKworICAg
IHdncHVRdWV1ZVN1Ym1pdChtX2JhY2tpbmcsIGJhY2tpbmdDb21tYW5kQnVmZmVycy5zaXplKCks
IGJhY2tpbmdDb21tYW5kQnVmZmVycy5kYXRhKCkpOworfQorCit2b2lkIG9uU3VibWl0dGVkV29y
a0RvbmVDYWxsYmFjayhXR1BVUXVldWVXb3JrRG9uZVN0YXR1cyBzdGF0dXMsIHZvaWQqIHVzZXJk
YXRhKQoreworICAgIGF1dG8gcXVldWUgPSBhZG9wdFJlZigqc3RhdGljX2Nhc3Q8UXVldWVJbXBs
Kj4odXNlcmRhdGEpKTsKKyAgICBxdWV1ZS0+b25TdWJtaXR0ZWRXb3JrRG9uZUNhbGxiYWNrKHN0
YXR1cyk7Cit9CisKK3ZvaWQgUXVldWVJbXBsOjpvblN1Ym1pdHRlZFdvcmtEb25lKHN0ZDo6ZnVu
Y3Rpb248dm9pZCgpPiYmIGNhbGxiYWNrKQoreworICAgIFJlZiBwcm90ZWN0ZWRUaGlzKCp0aGlz
KTsKKworICAgIG1fY2FsbGJhY2tzLmFwcGVuZChXVEZNb3ZlKGNhbGxiYWNrKSk7CisKKyAgICB3
Z3B1UXVldWVPblN1Ym1pdHRlZFdvcmtEb25lKG1fYmFja2luZywgbV9zaWduYWxWYWx1ZSwgJldl
YkdQVTo6b25TdWJtaXR0ZWRXb3JrRG9uZUNhbGxiYWNrLCAmcHJvdGVjdGVkVGhpcy5sZWFrUmVm
KCkpOyAvLyBsZWFrUmVmIGlzIGJhbGFuY2VkIGJ5IGFkb3B0UmVmIGluIG9uU3VibWl0dGVkV29y
a0RvbmVDYWxsYmFjaygpIGFib3ZlLiBXZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSdyZSB1
c2luZyBhIEMgQVBJIHdpdGggbm8gY29uY2VwdCBvZiByZWZlcmVuY2UgY291bnRpbmcgb3IgYmxv
Y2tzLgorCisgICAgKyttX3NpZ25hbFZhbHVlOworfQorCit2b2lkIFF1ZXVlSW1wbDo6b25TdWJt
aXR0ZWRXb3JrRG9uZUNhbGxiYWNrKFdHUFVRdWV1ZVdvcmtEb25lU3RhdHVzKQoreworICAgIGF1
dG8gY2FsbGJhY2sgPSBtX2NhbGxiYWNrcy50YWtlRmlyc3QoKTsKKyAgICBjYWxsYmFjaygpOwor
fQorCit2b2lkIFF1ZXVlSW1wbDo6d3JpdGVCdWZmZXIoCisgICAgY29uc3QgQnVmZmVyJiBidWZm
ZXIsCisgICAgU2l6ZTY0IGJ1ZmZlck9mZnNldCwKKyAgICBjb25zdCB2b2lkKiBzb3VyY2UsCisg
ICAgc2l6ZV90IGJ5dGVMZW5ndGgsCisgICAgU2l6ZTY0IGRhdGFPZmZzZXQsCisgICAgc3RkOjpv
cHRpb25hbDxTaXplNjQ+IHNpemUpCit7CisgICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFyaXRo
bWV0aWMKKyAgICB3Z3B1UXVldWVXcml0ZUJ1ZmZlcihtX2JhY2tpbmcsIHN0YXRpY19jYXN0PGNv
bnN0IEJ1ZmZlckltcGwmPihidWZmZXIpLmJhY2tpbmcoKSwgYnVmZmVyT2Zmc2V0LCBzdGF0aWNf
Y2FzdDxjb25zdCB1aW50OF90Kj4oc291cmNlKSArIGRhdGFPZmZzZXQsIHNpemUudmFsdWVfb3Io
Ynl0ZUxlbmd0aCAtIGRhdGFPZmZzZXQpKTsKK30KKwordm9pZCBRdWV1ZUltcGw6OndyaXRlVGV4
dHVyZSgKKyAgICBjb25zdCBJbWFnZUNvcHlUZXh0dXJlJiBkZXN0aW5hdGlvbiwKKyAgICBjb25z
dCB2b2lkKiBzb3VyY2UsCisgICAgc2l6ZV90IGJ5dGVMZW5ndGgsCisgICAgY29uc3QgSW1hZ2VE
YXRhTGF5b3V0JiBkYXRhTGF5b3V0LAorICAgIGNvbnN0IEV4dGVudDNEJiBzaXplKQoreworICAg
IFdHUFVJbWFnZUNvcHlUZXh0dXJlIGJhY2tpbmdEZXN0aW5hdGlvbiB7CisgICAgICAgIG51bGxw
dHIsCisgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IFRleHR1cmVJbXBsJj4oZGVzdGluYXRpb24u
dGV4dHVyZSkuYmFja2luZygpLAorICAgICAgICBkZXN0aW5hdGlvbi5taXBMZXZlbCwKKyAgICAg
ICAgZGVzdGluYXRpb24ub3JpZ2luID8gY29udmVydFRvQmFja2luZygqZGVzdGluYXRpb24ub3Jp
Z2luKSA6IFdHUFVPcmlnaW4zRCB7IDAsIDAsIDAgfSwKKyAgICAgICAgY29udmVydFRvQmFja2lu
ZyhkZXN0aW5hdGlvbi5hc3BlY3QpLAorICAgIH07CisKKyAgICBXR1BVVGV4dHVyZURhdGFMYXlv
dXQgYmFja2luZ0RhdGFMYXlvdXQgeworICAgICAgICBudWxscHRyLAorICAgICAgICBkYXRhTGF5
b3V0Lm9mZnNldCwKKyAgICAgICAgZGF0YUxheW91dC5ieXRlc1BlclJvdy52YWx1ZV9vcigwKSwK
KyAgICAgICAgZGF0YUxheW91dC5yb3dzUGVySW1hZ2UudmFsdWVfb3IoMCksCisgICAgfTsKKwor
ICAgIFdHUFVFeHRlbnQzRCBiYWNraW5nU2l6ZSA9IGNvbnZlcnRUb0JhY2tpbmcoc2l6ZSk7CisK
KyAgICB3Z3B1UXVldWVXcml0ZVRleHR1cmUobV9iYWNraW5nLCAmYmFja2luZ0Rlc3RpbmF0aW9u
LCBzb3VyY2UsIGJ5dGVMZW5ndGgsICZiYWNraW5nRGF0YUxheW91dCwgJmJhY2tpbmdTaXplKTsK
K30KKwordm9pZCBRdWV1ZUltcGw6OmNvcHlFeHRlcm5hbEltYWdlVG9UZXh0dXJlKAorICAgIGNv
bnN0IEltYWdlQ29weUV4dGVybmFsSW1hZ2UmIHNvdXJjZSwKKyAgICBjb25zdCBJbWFnZUNvcHlU
ZXh0dXJlVGFnZ2VkJiBkZXN0aW5hdGlvbiwKKyAgICBjb25zdCBFeHRlbnQzRCYgY29weVNpemUp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHNvdXJjZSk7CisgICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0
aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oY29weVNpemUpOworfQorCit2b2lkIFF1ZXVlSW1wbDo6
c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAgIHdncHVRdWV1ZVNl
dExhYmVsKG1fYmFja2luZywgbGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVF1ZXVlSW1wbC5oIGIvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVRdWV1ZUltcGwuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5jYTA2ZmE2ZmI1ZjMyNjY0ODg2Y2E2ZTFjMDc0ZDY5ZDAzN2E0MDk0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1w
bC9XZWJHUFVRdWV1ZUltcGwuaApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJXZWJHUFVRdWV1ZS5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJH
UFUuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3Bh
Y2UgV2ViR1BVIHsKKworY2xhc3MgUXVldWVJbXBsIGZpbmFsIDogcHVibGljIFF1ZXVlIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPFF1ZXVlSW1wbD4gY3JlYXRlKFdHUFVRdWV1ZSBxdWV1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFF1ZXVlSW1wbChxdWV1ZSkpOwor
ICAgIH0KKworICAgIHZpcnR1YWwgflF1ZXVlSW1wbCgpOworCisgICAgV0dQVVF1ZXVlIGJhY2tp
bmcoKSBjb25zdCB7IHJldHVybiBtX2JhY2tpbmc7IH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQg
dm9pZCBvblN1Ym1pdHRlZFdvcmtEb25lQ2FsbGJhY2soV0dQVVF1ZXVlV29ya0RvbmVTdGF0dXMs
IHZvaWQqIHVzZXJkYXRhKTsKKworICAgIFF1ZXVlSW1wbChXR1BVUXVldWUpOworCisgICAgUXVl
dWVJbXBsKGNvbnN0IFF1ZXVlSW1wbCYpID0gZGVsZXRlOworICAgIFF1ZXVlSW1wbChRdWV1ZUlt
cGwmJikgPSBkZWxldGU7CisgICAgUXVldWVJbXBsJiBvcGVyYXRvcj0oY29uc3QgUXVldWVJbXBs
JikgPSBkZWxldGU7CisgICAgUXVldWVJbXBsJiBvcGVyYXRvcj0oUXVldWVJbXBsJiYpID0gZGVs
ZXRlOworCisgICAgdm9pZCBzdWJtaXQoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Q29t
bWFuZEJ1ZmZlcj4+JiYpIGZpbmFsOworCisgICAgdm9pZCBvblN1Ym1pdHRlZFdvcmtEb25lQ2Fs
bGJhY2soV0dQVVF1ZXVlV29ya0RvbmVTdGF0dXMpOworICAgIHZvaWQgb25TdWJtaXR0ZWRXb3Jr
RG9uZShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4mJikgZmluYWw7CisKKyAgICB2b2lkIHdyaXRlQnVm
ZmVyKAorICAgICAgICBjb25zdCBCdWZmZXImLAorICAgICAgICBTaXplNjQgYnVmZmVyT2Zmc2V0
LAorICAgICAgICBjb25zdCB2b2lkKiBzb3VyY2UsCisgICAgICAgIHNpemVfdCBieXRlTGVuZ3Ro
LAorICAgICAgICBTaXplNjQgZGF0YU9mZnNldCwKKyAgICAgICAgc3RkOjpvcHRpb25hbDxTaXpl
NjQ+KSBmaW5hbDsKKworICAgIHZvaWQgd3JpdGVUZXh0dXJlKAorICAgICAgICBjb25zdCBJbWFn
ZUNvcHlUZXh0dXJlJiBkZXN0aW5hdGlvbiwKKyAgICAgICAgY29uc3Qgdm9pZCogc291cmNlLAor
ICAgICAgICBzaXplX3QgYnl0ZUxlbmd0aCwKKyAgICAgICAgY29uc3QgSW1hZ2VEYXRhTGF5b3V0
JiwKKyAgICAgICAgY29uc3QgRXh0ZW50M0QmIHNpemUpIGZpbmFsOworCisgICAgdm9pZCBjb3B5
RXh0ZXJuYWxJbWFnZVRvVGV4dHVyZSgKKyAgICAgICAgY29uc3QgSW1hZ2VDb3B5RXh0ZXJuYWxJ
bWFnZSYgc291cmNlLAorICAgICAgICBjb25zdCBJbWFnZUNvcHlUZXh0dXJlVGFnZ2VkJiBkZXN0
aW5hdGlvbiwKKyAgICAgICAgY29uc3QgRXh0ZW50M0QmIGNvcHlTaXplKSBmaW5hbDsKKworICAg
IHZvaWQgc2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5hbDsKKworICAgIFdHUFVR
dWV1ZSBtX2JhY2tpbmcgeyBudWxscHRyIH07CisKKyAgICB1aW50NjRfdCBtX3NpZ25hbFZhbHVl
IHsgMSB9OworCisgICAgRGVxdWU8c3RkOjpmdW5jdGlvbjx2b2lkKCk+PiBtX2NhbGxiYWNrczsK
K307CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJl
bmRlckJ1bmRsZUVuY29kZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhp
Y3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVyQnVuZGxlRW5jb2RlckltcGwuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjg1ZTIxMjdkNjQyMTZkMGI5NGM0YTQ5OWVjYjFiNDA3OTA4NGFlZmEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQ
VVJlbmRlckJ1bmRsZUVuY29kZXJJbXBsLmNwcApAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVSZW5kZXJCdW5kbGVFbmNv
ZGVySW1wbC5oIgorCisjaW5jbHVkZSAiV2ViR1BVQmluZEdyb3VwSW1wbC5oIgorI2luY2x1ZGUg
IldlYkdQVUJ1ZmZlckltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVDb252ZXJ0VG9CYWNraW5nLmgi
CisjaW5jbHVkZSAiV2ViR1BVUmVuZGVyQnVuZGxlSW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVVJl
bmRlclBpcGVsaW5lSW1wbC5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFVFeHQuaD4KKworbmFt
ZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworUmVuZGVyQnVuZGxlRW5jb2Rlcklt
cGw6OlJlbmRlckJ1bmRsZUVuY29kZXJJbXBsKFdHUFVSZW5kZXJCdW5kbGVFbmNvZGVyIHJlbmRl
ckJ1bmRsZUVuY29kZXIpCisgICAgOiBtX2JhY2tpbmcocmVuZGVyQnVuZGxlRW5jb2RlcikKK3sK
K30KKworUmVuZGVyQnVuZGxlRW5jb2RlckltcGw6On5SZW5kZXJCdW5kbGVFbmNvZGVySW1wbCgp
Cit7CisgICAgd2dwdVJlbmRlckJ1bmRsZUVuY29kZXJSZWxlYXNlKG1fYmFja2luZyk7Cit9CisK
K3ZvaWQgUmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OnNldFBpcGVsaW5lKGNvbnN0IFJlbmRlclBp
cGVsaW5lJiByZW5kZXJQaXBlbGluZSkKK3sKKyAgICB3Z3B1UmVuZGVyQnVuZGxlRW5jb2RlclNl
dFBpcGVsaW5lKG1fYmFja2luZywgc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyUGlwZWxpbmVJbXBs
Jj4ocmVuZGVyUGlwZWxpbmUpLmJhY2tpbmcoKSk7Cit9CisKK3ZvaWQgUmVuZGVyQnVuZGxlRW5j
b2RlckltcGw6OnNldEluZGV4QnVmZmVyKGNvbnN0IEJ1ZmZlciYgYnVmZmVyLCBJbmRleEZvcm1h
dCBpbmRleEZvcm1hdCwgU2l6ZTY0IG9mZnNldCwgc3RkOjpvcHRpb25hbDxTaXplNjQ+IHNpemUp
Cit7CisgICAgd2dwdVJlbmRlckJ1bmRsZUVuY29kZXJTZXRJbmRleEJ1ZmZlcihtX2JhY2tpbmcs
IHN0YXRpY19jYXN0PGNvbnN0IEJ1ZmZlckltcGwmPihidWZmZXIpLmJhY2tpbmcoKSwgY29udmVy
dFRvQmFja2luZyhpbmRleEZvcm1hdCksIG9mZnNldCwgc2l6ZS52YWx1ZV9vcihXR1BVX1dIT0xF
X1NJWkUpKTsKK30KKwordm9pZCBSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6c2V0VmVydGV4QnVm
ZmVyKEluZGV4MzIgc2xvdCwgY29uc3QgQnVmZmVyJiBidWZmZXIsIFNpemU2NCBvZmZzZXQsIHN0
ZDo6b3B0aW9uYWw8U2l6ZTY0PiBzaXplKQoreworICAgIHdncHVSZW5kZXJCdW5kbGVFbmNvZGVy
U2V0VmVydGV4QnVmZmVyKG1fYmFja2luZywgc2xvdCwgc3RhdGljX2Nhc3Q8Y29uc3QgQnVmZmVy
SW1wbCY+KGJ1ZmZlcikuYmFja2luZygpLCBvZmZzZXQsIHNpemUudmFsdWVfb3IoV0dQVV9XSE9M
RV9TSVpFKSk7Cit9CisKK3ZvaWQgUmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OmRyYXcoU2l6ZTMy
IHZlcnRleENvdW50LCBTaXplMzIgaW5zdGFuY2VDb3VudCwKKyAgICBTaXplMzIgZmlyc3RWZXJ0
ZXgsIFNpemUzMiBmaXJzdEluc3RhbmNlKQoreworICAgIHdncHVSZW5kZXJCdW5kbGVFbmNvZGVy
RHJhdyhtX2JhY2tpbmcsIHZlcnRleENvdW50LCBpbnN0YW5jZUNvdW50LCBmaXJzdFZlcnRleCwg
Zmlyc3RJbnN0YW5jZSk7Cit9CisKK3ZvaWQgUmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OmRyYXdJ
bmRleGVkKFNpemUzMiBpbmRleENvdW50LCBTaXplMzIgaW5zdGFuY2VDb3VudCwKKyAgICBTaXpl
MzIgZmlyc3RJbmRleCwKKyAgICBTaWduZWRPZmZzZXQzMiBiYXNlVmVydGV4LAorICAgIFNpemUz
MiBmaXJzdEluc3RhbmNlKQoreworICAgIHdncHVSZW5kZXJCdW5kbGVFbmNvZGVyRHJhd0luZGV4
ZWQobV9iYWNraW5nLCBpbmRleENvdW50LCBpbnN0YW5jZUNvdW50LCBmaXJzdEluZGV4LCBiYXNl
VmVydGV4LCBmaXJzdEluc3RhbmNlKTsKK30KKwordm9pZCBSZW5kZXJCdW5kbGVFbmNvZGVySW1w
bDo6ZHJhd0luZGlyZWN0KGNvbnN0IEJ1ZmZlciYgaW5kaXJlY3RCdWZmZXIsIFNpemU2NCBpbmRp
cmVjdE9mZnNldCkKK3sKKyAgICB3Z3B1UmVuZGVyQnVuZGxlRW5jb2RlckRyYXdJbmRpcmVjdCht
X2JhY2tpbmcsIHN0YXRpY19jYXN0PGNvbnN0IEJ1ZmZlckltcGwmPihpbmRpcmVjdEJ1ZmZlciku
YmFja2luZygpLCBpbmRpcmVjdE9mZnNldCk7Cit9CisKK3ZvaWQgUmVuZGVyQnVuZGxlRW5jb2Rl
ckltcGw6OmRyYXdJbmRleGVkSW5kaXJlY3QoY29uc3QgQnVmZmVyJiBpbmRpcmVjdEJ1ZmZlciwg
U2l6ZTY0IGluZGlyZWN0T2Zmc2V0KQoreworICAgIHdncHVSZW5kZXJCdW5kbGVFbmNvZGVyRHJh
d0luZGV4ZWRJbmRpcmVjdChtX2JhY2tpbmcsIHN0YXRpY19jYXN0PGNvbnN0IEJ1ZmZlckltcGwm
PihpbmRpcmVjdEJ1ZmZlcikuYmFja2luZygpLCBpbmRpcmVjdE9mZnNldCk7Cit9CisKK3ZvaWQg
UmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OnNldEJpbmRHcm91cChJbmRleDMyIGluZGV4LCBjb25z
dCBCaW5kR3JvdXAmIGJpbmRHcm91cCwKKyAgICBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxCdWZmZXJE
eW5hbWljT2Zmc2V0Pj4mJiBkeW5hbWljT2Zmc2V0cykKK3sKKyAgICBhdXRvIGJhY2tpbmdPZmZz
ZXRzID0gZHluYW1pY09mZnNldHMudmFsdWVfb3IoVmVjdG9yPEJ1ZmZlckR5bmFtaWNPZmZzZXQ+
IHsgfSk7CisgICAgd2dwdVJlbmRlckJ1bmRsZUVuY29kZXJTZXRCaW5kR3JvdXAobV9iYWNraW5n
LCBpbmRleCwgc3RhdGljX2Nhc3Q8Y29uc3QgQmluZEdyb3VwSW1wbCY+KGJpbmRHcm91cCkuYmFj
a2luZygpLCBiYWNraW5nT2Zmc2V0cy5zaXplKCksIGJhY2tpbmdPZmZzZXRzLmRhdGEoKSk7Cit9
CisKK3ZvaWQgUmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OnNldEJpbmRHcm91cChJbmRleDMyIGlu
ZGV4LCBjb25zdCBCaW5kR3JvdXAmIGJpbmRHcm91cCwKKyAgICBjb25zdCB1aW50MzJfdCogZHlu
YW1pY09mZnNldHNBcnJheUJ1ZmZlciwKKyAgICBzaXplX3QgZHluYW1pY09mZnNldHNBcnJheUJ1
ZmZlckxlbmd0aCwKKyAgICBTaXplNjQgZHluYW1pY09mZnNldHNEYXRhU3RhcnQsCisgICAgU2l6
ZTMyIGR5bmFtaWNPZmZzZXRzRGF0YUxlbmd0aCkKK3sKKyAgICBVTlVTRURfUEFSQU0oZHluYW1p
Y09mZnNldHNBcnJheUJ1ZmZlckxlbmd0aCk7CisgICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFs
Z2VicmEuCisgICAgd2dwdVJlbmRlckJ1bmRsZUVuY29kZXJTZXRCaW5kR3JvdXAobV9iYWNraW5n
LCBpbmRleCwgc3RhdGljX2Nhc3Q8Y29uc3QgQmluZEdyb3VwSW1wbCY+KGJpbmRHcm91cCkuYmFj
a2luZygpLCBkeW5hbWljT2Zmc2V0c0RhdGFMZW5ndGgsIGR5bmFtaWNPZmZzZXRzQXJyYXlCdWZm
ZXIgKyBkeW5hbWljT2Zmc2V0c0RhdGFTdGFydCk7Cit9CisKK3ZvaWQgUmVuZGVyQnVuZGxlRW5j
b2RlckltcGw6OnB1c2hEZWJ1Z0dyb3VwKFN0cmluZyYmIGdyb3VwTGFiZWwpCit7CisgICAgd2dw
dVJlbmRlckJ1bmRsZUVuY29kZXJQdXNoRGVidWdHcm91cChtX2JhY2tpbmcsIGdyb3VwTGFiZWwu
dXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgUmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OnBvcERl
YnVnR3JvdXAoKQoreworICAgIHdncHVSZW5kZXJCdW5kbGVFbmNvZGVyUG9wRGVidWdHcm91cCht
X2JhY2tpbmcpOworfQorCit2b2lkIFJlbmRlckJ1bmRsZUVuY29kZXJJbXBsOjppbnNlcnREZWJ1
Z01hcmtlcihTdHJpbmcmJiBtYXJrZXJMYWJlbCkKK3sKKyAgICB3Z3B1UmVuZGVyQnVuZGxlRW5j
b2Rlckluc2VydERlYnVnTWFya2VyKG1fYmFja2luZywgbWFya2VyTGFiZWwudXRmOCgpLmRhdGEo
KSk7Cit9CisKK1JlZjxSZW5kZXJCdW5kbGU+IFJlbmRlckJ1bmRsZUVuY29kZXJJbXBsOjpmaW5p
c2goY29uc3QgUmVuZGVyQnVuZGxlRGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBhdXRv
IGxhYmVsID0gZGVzY3JpcHRvci5sYWJlbC51dGY4KCk7CisKKyAgICBXR1BVUmVuZGVyQnVuZGxl
RGVzY3JpcHRvciBiYWNraW5nRGVzY3JpcHRvciB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAg
IGxhYmVsLmRhdGEoKSwKKyAgICB9OworCisgICAgcmV0dXJuIFJlbmRlckJ1bmRsZUltcGw6OmNy
ZWF0ZSh3Z3B1UmVuZGVyQnVuZGxlRW5jb2RlckZpbmlzaChtX2JhY2tpbmcsICZiYWNraW5nRGVz
Y3JpcHRvcikpOworfQorCit2b2lkIFJlbmRlckJ1bmRsZUVuY29kZXJJbXBsOjpzZXRMYWJlbElu
dGVybmFsKGNvbnN0IFN0cmluZyYgbGFiZWwpCit7CisgICAgd2dwdVJlbmRlckJ1bmRsZUVuY29k
ZXJTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVsLnV0ZjgoKS5kYXRhKCkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJCdW5kbGVFbmNv
ZGVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9X
ZWJHUFVSZW5kZXJCdW5kbGVFbmNvZGVySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1ZGFmNDE5M2NkMjhi
OThjMzBiMGJlYjI2OWYxZjcyNjc5MzJiMWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlckJ1bmRsZUVuY29k
ZXJJbXBsLmgKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiV2ViR1BVUmVuZGVyQnVuZGxlRW5jb2Rlci5oIgorI2luY2x1ZGUgPFdlYkdQVS9X
ZWJHUFUuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworY2xhc3Mg
UmVuZGVyQnVuZGxlRW5jb2RlckltcGwgZmluYWwgOiBwdWJsaWMgUmVuZGVyQnVuZGxlRW5jb2Rl
ciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZW5kZXJCdW5kbGVFbmNvZGVySW1wbD4gY3Jl
YXRlKFdHUFVSZW5kZXJCdW5kbGVFbmNvZGVyIHJlbmRlckJ1bmRsZUVuY29kZXIpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZW5kZXJCdW5kbGVFbmNvZGVySW1wbChyZW5k
ZXJCdW5kbGVFbmNvZGVyKSk7CisgICAgfQorCisgICAgflJlbmRlckJ1bmRsZUVuY29kZXJJbXBs
KCk7CisKKyAgICBXR1BVUmVuZGVyQnVuZGxlRW5jb2RlciBiYWNraW5nKCkgY29uc3QgeyByZXR1
cm4gbV9iYWNraW5nOyB9CisKK3ByaXZhdGU6CisgICAgUmVuZGVyQnVuZGxlRW5jb2RlckltcGwo
V0dQVVJlbmRlckJ1bmRsZUVuY29kZXIpOworCisgICAgUmVuZGVyQnVuZGxlRW5jb2RlckltcGwo
Y29uc3QgUmVuZGVyQnVuZGxlRW5jb2RlckltcGwmKSA9IGRlbGV0ZTsKKyAgICBSZW5kZXJCdW5k
bGVFbmNvZGVySW1wbChSZW5kZXJCdW5kbGVFbmNvZGVySW1wbCYmKSA9IGRlbGV0ZTsKKyAgICBS
ZW5kZXJCdW5kbGVFbmNvZGVySW1wbCYgb3BlcmF0b3I9KGNvbnN0IFJlbmRlckJ1bmRsZUVuY29k
ZXJJbXBsJikgPSBkZWxldGU7CisgICAgUmVuZGVyQnVuZGxlRW5jb2RlckltcGwmIG9wZXJhdG9y
PShSZW5kZXJCdW5kbGVFbmNvZGVySW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIHZvaWQgc2V0UGlw
ZWxpbmUoY29uc3QgUmVuZGVyUGlwZWxpbmUmKSBmaW5hbDsKKworICAgIHZvaWQgc2V0SW5kZXhC
dWZmZXIoY29uc3QgQnVmZmVyJiwgSW5kZXhGb3JtYXQsIFNpemU2NCBvZmZzZXQsIHN0ZDo6b3B0
aW9uYWw8U2l6ZTY0PikgZmluYWw7CisgICAgdm9pZCBzZXRWZXJ0ZXhCdWZmZXIoSW5kZXgzMiBz
bG90LCBjb25zdCBCdWZmZXImLCBTaXplNjQgb2Zmc2V0LCBzdGQ6Om9wdGlvbmFsPFNpemU2ND4p
IGZpbmFsOworCisgICAgdm9pZCBkcmF3KFNpemUzMiB2ZXJ0ZXhDb3VudCwgU2l6ZTMyIGluc3Rh
bmNlQ291bnQsCisgICAgICAgIFNpemUzMiBmaXJzdFZlcnRleCwgU2l6ZTMyIGZpcnN0SW5zdGFu
Y2UpIGZpbmFsOworICAgIHZvaWQgZHJhd0luZGV4ZWQoU2l6ZTMyIGluZGV4Q291bnQsIFNpemUz
MiBpbnN0YW5jZUNvdW50LAorICAgICAgICBTaXplMzIgZmlyc3RJbmRleCwKKyAgICAgICAgU2ln
bmVkT2Zmc2V0MzIgYmFzZVZlcnRleCwKKyAgICAgICAgU2l6ZTMyIGZpcnN0SW5zdGFuY2UpIGZp
bmFsOworCisgICAgdm9pZCBkcmF3SW5kaXJlY3QoY29uc3QgQnVmZmVyJiBpbmRpcmVjdEJ1ZmZl
ciwgU2l6ZTY0IGluZGlyZWN0T2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdJbmRleGVkSW5k
aXJlY3QoY29uc3QgQnVmZmVyJiBpbmRpcmVjdEJ1ZmZlciwgU2l6ZTY0IGluZGlyZWN0T2Zmc2V0
KSBmaW5hbDsKKworICAgIHZvaWQgc2V0QmluZEdyb3VwKEluZGV4MzIsIGNvbnN0IEJpbmRHcm91
cCYsCisgICAgICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPEJ1ZmZlckR5bmFtaWNPZmZzZXQ+PiYm
IGR5bmFtaWNPZmZzZXRzKSBmaW5hbDsKKworICAgIHZvaWQgc2V0QmluZEdyb3VwKEluZGV4MzIs
IGNvbnN0IEJpbmRHcm91cCYsCisgICAgICAgIGNvbnN0IHVpbnQzMl90KiBkeW5hbWljT2Zmc2V0
c0FycmF5QnVmZmVyLAorICAgICAgICBzaXplX3QgZHluYW1pY09mZnNldHNBcnJheUJ1ZmZlckxl
bmd0aCwKKyAgICAgICAgU2l6ZTY0IGR5bmFtaWNPZmZzZXRzRGF0YVN0YXJ0LAorICAgICAgICBT
aXplMzIgZHluYW1pY09mZnNldHNEYXRhTGVuZ3RoKSBmaW5hbDsKKworICAgIHZvaWQgcHVzaERl
YnVnR3JvdXAoU3RyaW5nJiYgZ3JvdXBMYWJlbCkgZmluYWw7CisgICAgdm9pZCBwb3BEZWJ1Z0dy
b3VwKCkgZmluYWw7CisgICAgdm9pZCBpbnNlcnREZWJ1Z01hcmtlcihTdHJpbmcmJiBtYXJrZXJM
YWJlbCkgZmluYWw7CisKKyAgICBSZWY8UmVuZGVyQnVuZGxlPiBmaW5pc2goY29uc3QgUmVuZGVy
QnVuZGxlRGVzY3JpcHRvciYpIGZpbmFsOworCisgICAgdm9pZCBzZXRMYWJlbEludGVybmFsKGNv
bnN0IFN0cmluZyYpIGZpbmFsOworCisgICAgV0dQVVJlbmRlckJ1bmRsZUVuY29kZXIgbV9iYWNr
aW5nIHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFj
ZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2Vi
R1BVL0ltcGwvV2ViR1BVUmVuZGVyQnVuZGxlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlckJ1bmRsZUltcGwuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmViMThjZjljNDE4NGM0ZjRjZjhmMTFhMjU2MzdiOTFjNjg3NzY5NGYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dl
YkdQVVJlbmRlckJ1bmRsZUltcGwuY3BwCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViR1BVUmVuZGVyQnVuZGxlSW1wbC5oIgor
CisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVz
cGFjZSBXZWJHUFUgeworCitSZW5kZXJCdW5kbGVJbXBsOjpSZW5kZXJCdW5kbGVJbXBsKFdHUFVS
ZW5kZXJCdW5kbGUgcmVuZGVyQnVuZGxlKQorICAgIDogbV9iYWNraW5nKHJlbmRlckJ1bmRsZSkK
K3sKK30KKworUmVuZGVyQnVuZGxlSW1wbDo6flJlbmRlckJ1bmRsZUltcGwoKQoreworICAgIHdn
cHVSZW5kZXJCdW5kbGVSZWxlYXNlKG1fYmFja2luZyk7Cit9CisKK3ZvaWQgUmVuZGVyQnVuZGxl
SW1wbDo6c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAgIHdncHVS
ZW5kZXJCdW5kbGVTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVsLnV0ZjgoKS5kYXRhKCkpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJC
dW5kbGVJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBs
L1dlYkdQVVJlbmRlckJ1bmRsZUltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YmRhMzZlMDgxYTc0YTMwZTlm
YjRkNDZhYzI0MGMzNTcyMjY2NGRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
UEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJCdW5kbGVJbXBsLmgKQEAg
LTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2Vi
R1BVUmVuZGVyQnVuZGxlLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorCituYW1lc3Bh
Y2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBSZW5kZXJCdW5kbGVJbXBsIGZp
bmFsIDogcHVibGljIFJlbmRlckJ1bmRsZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZW5k
ZXJCdW5kbGVJbXBsPiBjcmVhdGUoV0dQVVJlbmRlckJ1bmRsZSByZW5kZXJCdW5kbGUpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZW5kZXJCdW5kbGVJbXBsKHJlbmRlckJ1
bmRsZSkpOworICAgIH0KKworICAgIHZpcnR1YWwgflJlbmRlckJ1bmRsZUltcGwoKTsKKworICAg
IFdHUFVSZW5kZXJCdW5kbGUgYmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQor
Citwcml2YXRlOgorICAgIFJlbmRlckJ1bmRsZUltcGwoV0dQVVJlbmRlckJ1bmRsZSk7CisKKyAg
ICBSZW5kZXJCdW5kbGVJbXBsKGNvbnN0IFJlbmRlckJ1bmRsZUltcGwmKSA9IGRlbGV0ZTsKKyAg
ICBSZW5kZXJCdW5kbGVJbXBsKFJlbmRlckJ1bmRsZUltcGwmJikgPSBkZWxldGU7CisgICAgUmVu
ZGVyQnVuZGxlSW1wbCYgb3BlcmF0b3I9KGNvbnN0IFJlbmRlckJ1bmRsZUltcGwmKSA9IGRlbGV0
ZTsKKyAgICBSZW5kZXJCdW5kbGVJbXBsJiBvcGVyYXRvcj0oUmVuZGVyQnVuZGxlSW1wbCYmKSA9
IGRlbGV0ZTsKKworICAgIHZvaWQgc2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5h
bDsKKworICAgIFdHUFVSZW5kZXJCdW5kbGUgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVyUGFz
c0VuY29kZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BV
L0ltcGwvV2ViR1BVUmVuZGVyUGFzc0VuY29kZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MTVhODQz
ZWI4ZGRhM2FjNGZkZjYxM2RiY2Y1YTI4ZjEwYTIzMGU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJQYXNz
RW5jb2RlckltcGwuY3BwCkBAIC0wLDAgKzEsMTg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkdQVVJlbmRlclBhc3NFbmNvZGVySW1wbC5oIgorCisj
aW5jbHVkZSAiV2ViR1BVQmluZEdyb3VwSW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVUJ1ZmZlcklt
cGwuaCIKKyNpbmNsdWRlICJXZWJHUFVDb252ZXJ0VG9CYWNraW5nLmgiCisjaW5jbHVkZSAiV2Vi
R1BVUXVlcnlTZXRJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVUmVuZGVyQnVuZGxlSW1wbC5oIgor
I2luY2x1ZGUgIldlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5oIgorI2luY2x1ZGUgPFdlYkdQVS9X
ZWJHUFVFeHQuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworUmVu
ZGVyUGFzc0VuY29kZXJJbXBsOjpSZW5kZXJQYXNzRW5jb2RlckltcGwoV0dQVVJlbmRlclBhc3NF
bmNvZGVyIHJlbmRlclBhc3NFbmNvZGVyKQorICAgIDogbV9iYWNraW5nKHJlbmRlclBhc3NFbmNv
ZGVyKQoreworfQorCitSZW5kZXJQYXNzRW5jb2RlckltcGw6On5SZW5kZXJQYXNzRW5jb2Rlcklt
cGwoKQoreworICAgIHdncHVSZW5kZXJQYXNzRW5jb2RlclJlbGVhc2UobV9iYWNraW5nKTsKK30K
Kwordm9pZCBSZW5kZXJQYXNzRW5jb2RlckltcGw6OnNldFBpcGVsaW5lKGNvbnN0IFJlbmRlclBp
cGVsaW5lJiByZW5kZXJQaXBlbGluZSkKK3sKKyAgICB3Z3B1UmVuZGVyUGFzc0VuY29kZXJTZXRQ
aXBlbGluZShtX2JhY2tpbmcsIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclBpcGVsaW5lSW1wbCY+
KHJlbmRlclBpcGVsaW5lKS5iYWNraW5nKCkpOworfQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVy
SW1wbDo6c2V0SW5kZXhCdWZmZXIoY29uc3QgQnVmZmVyJiBidWZmZXIsIEluZGV4Rm9ybWF0IGlu
ZGV4Rm9ybWF0LCBTaXplNjQgb2Zmc2V0LCBzdGQ6Om9wdGlvbmFsPFNpemU2ND4gc2l6ZSkKK3sK
KyAgICB3Z3B1UmVuZGVyUGFzc0VuY29kZXJTZXRJbmRleEJ1ZmZlcihtX2JhY2tpbmcsIHN0YXRp
Y19jYXN0PGNvbnN0IEJ1ZmZlckltcGwmPihidWZmZXIpLmJhY2tpbmcoKSwgY29udmVydFRvQmFj
a2luZyhpbmRleEZvcm1hdCksIG9mZnNldCwgc2l6ZS52YWx1ZV9vcihXR1BVX1dIT0xFX1NJWkUp
KTsKK30KKwordm9pZCBSZW5kZXJQYXNzRW5jb2RlckltcGw6OnNldFZlcnRleEJ1ZmZlcihJbmRl
eDMyIHNsb3QsIGNvbnN0IEJ1ZmZlciYgYnVmZmVyLCBTaXplNjQgb2Zmc2V0LCBzdGQ6Om9wdGlv
bmFsPFNpemU2ND4gc2l6ZSkKK3sKKyAgICB3Z3B1UmVuZGVyUGFzc0VuY29kZXJTZXRWZXJ0ZXhC
dWZmZXIobV9iYWNraW5nLCBzbG90LCBzdGF0aWNfY2FzdDxjb25zdCBCdWZmZXJJbXBsJj4oYnVm
ZmVyKS5iYWNraW5nKCksIG9mZnNldCwgc2l6ZS52YWx1ZV9vcihXR1BVX1dIT0xFX1NJWkUpKTsK
K30KKwordm9pZCBSZW5kZXJQYXNzRW5jb2RlckltcGw6OmRyYXcoU2l6ZTMyIHZlcnRleENvdW50
LCBTaXplMzIgaW5zdGFuY2VDb3VudCwKKyAgICBTaXplMzIgZmlyc3RWZXJ0ZXgsIFNpemUzMiBm
aXJzdEluc3RhbmNlKQoreworICAgIHdncHVSZW5kZXJQYXNzRW5jb2RlckRyYXcobV9iYWNraW5n
LCB2ZXJ0ZXhDb3VudCwgaW5zdGFuY2VDb3VudCwgZmlyc3RWZXJ0ZXgsIGZpcnN0SW5zdGFuY2Up
OworfQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6ZHJhd0luZGV4ZWQoU2l6ZTMyIGlu
ZGV4Q291bnQsIFNpemUzMiBpbnN0YW5jZUNvdW50LAorICAgIFNpemUzMiBmaXJzdEluZGV4LAor
ICAgIFNpZ25lZE9mZnNldDMyIGJhc2VWZXJ0ZXgsCisgICAgU2l6ZTMyIGZpcnN0SW5zdGFuY2Up
Cit7CisgICAgd2dwdVJlbmRlclBhc3NFbmNvZGVyRHJhd0luZGV4ZWQobV9iYWNraW5nLCBpbmRl
eENvdW50LCBpbnN0YW5jZUNvdW50LCBmaXJzdEluZGV4LCBiYXNlVmVydGV4LCBmaXJzdEluc3Rh
bmNlKTsKK30KKwordm9pZCBSZW5kZXJQYXNzRW5jb2RlckltcGw6OmRyYXdJbmRpcmVjdChjb25z
dCBCdWZmZXImIGluZGlyZWN0QnVmZmVyLCBTaXplNjQgaW5kaXJlY3RPZmZzZXQpCit7CisgICAg
d2dwdVJlbmRlclBhc3NFbmNvZGVyRHJhd0luZGlyZWN0KG1fYmFja2luZywgc3RhdGljX2Nhc3Q8
Y29uc3QgQnVmZmVySW1wbCY+KGluZGlyZWN0QnVmZmVyKS5iYWNraW5nKCksIGluZGlyZWN0T2Zm
c2V0KTsKK30KKwordm9pZCBSZW5kZXJQYXNzRW5jb2RlckltcGw6OmRyYXdJbmRleGVkSW5kaXJl
Y3QoY29uc3QgQnVmZmVyJiBpbmRpcmVjdEJ1ZmZlciwgU2l6ZTY0IGluZGlyZWN0T2Zmc2V0KQor
eworICAgIHdncHVSZW5kZXJQYXNzRW5jb2RlckRyYXdJbmRleGVkSW5kaXJlY3QobV9iYWNraW5n
LCBzdGF0aWNfY2FzdDxjb25zdCBCdWZmZXJJbXBsJj4oaW5kaXJlY3RCdWZmZXIpLmJhY2tpbmco
KSwgaW5kaXJlY3RPZmZzZXQpOworfQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6c2V0
QmluZEdyb3VwKEluZGV4MzIgaW5kZXgsIGNvbnN0IEJpbmRHcm91cCYgYmluZEdyb3VwLAorICAg
IHN0ZDo6b3B0aW9uYWw8VmVjdG9yPEJ1ZmZlckR5bmFtaWNPZmZzZXQ+PiYmIGR5bmFtaWNPZmZz
ZXRzKQoreworICAgIGF1dG8gYmFja2luZ09mZnNldHMgPSBkeW5hbWljT2Zmc2V0cy52YWx1ZV9v
cihWZWN0b3I8QnVmZmVyRHluYW1pY09mZnNldD4geyB9KTsKKyAgICB3Z3B1UmVuZGVyUGFzc0Vu
Y29kZXJTZXRCaW5kR3JvdXAobV9iYWNraW5nLCBpbmRleCwgc3RhdGljX2Nhc3Q8Y29uc3QgQmlu
ZEdyb3VwSW1wbCY+KGJpbmRHcm91cCkuYmFja2luZygpLCBiYWNraW5nT2Zmc2V0cy5zaXplKCks
IGJhY2tpbmdPZmZzZXRzLmRhdGEoKSk7Cit9CisKK3ZvaWQgUmVuZGVyUGFzc0VuY29kZXJJbXBs
OjpzZXRCaW5kR3JvdXAoSW5kZXgzMiBpbmRleCwgY29uc3QgQmluZEdyb3VwJiBiaW5kR3JvdXAs
CisgICAgY29uc3QgdWludDMyX3QqIGR5bmFtaWNPZmZzZXRzQXJyYXlCdWZmZXIsCisgICAgc2l6
ZV90IGR5bmFtaWNPZmZzZXRzQXJyYXlCdWZmZXJMZW5ndGgsCisgICAgU2l6ZTY0IGR5bmFtaWNP
ZmZzZXRzRGF0YVN0YXJ0LAorICAgIFNpemUzMiBkeW5hbWljT2Zmc2V0c0RhdGFMZW5ndGgpCit7
CisgICAgVU5VU0VEX1BBUkFNKGR5bmFtaWNPZmZzZXRzQXJyYXlCdWZmZXJMZW5ndGgpOworICAg
IC8vIEZJWE1FOiBVc2UgY2hlY2tlZCBhbGdlYnJhLgorICAgIHdncHVSZW5kZXJQYXNzRW5jb2Rl
clNldEJpbmRHcm91cChtX2JhY2tpbmcsIGluZGV4LCBzdGF0aWNfY2FzdDxjb25zdCBCaW5kR3Jv
dXBJbXBsJj4oYmluZEdyb3VwKS5iYWNraW5nKCksIGR5bmFtaWNPZmZzZXRzRGF0YUxlbmd0aCwg
ZHluYW1pY09mZnNldHNBcnJheUJ1ZmZlciArIGR5bmFtaWNPZmZzZXRzRGF0YVN0YXJ0KTsKK30K
Kwordm9pZCBSZW5kZXJQYXNzRW5jb2RlckltcGw6OnB1c2hEZWJ1Z0dyb3VwKFN0cmluZyYmIGdy
b3VwTGFiZWwpCit7CisgICAgd2dwdVJlbmRlclBhc3NFbmNvZGVyUHVzaERlYnVnR3JvdXAobV9i
YWNraW5nLCBncm91cExhYmVsLnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIFJlbmRlclBhc3NF
bmNvZGVySW1wbDo6cG9wRGVidWdHcm91cCgpCit7CisgICAgd2dwdVJlbmRlclBhc3NFbmNvZGVy
UG9wRGVidWdHcm91cChtX2JhY2tpbmcpOworfQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1w
bDo6aW5zZXJ0RGVidWdNYXJrZXIoU3RyaW5nJiYgbWFya2VyTGFiZWwpCit7CisgICAgd2dwdVJl
bmRlclBhc3NFbmNvZGVySW5zZXJ0RGVidWdNYXJrZXIobV9iYWNraW5nLCBtYXJrZXJMYWJlbC51
dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBSZW5kZXJQYXNzRW5jb2RlckltcGw6OnNldFZpZXdw
b3J0KGZsb2F0IHgsIGZsb2F0IHksCisgICAgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwKKyAg
ICBmbG9hdCBtaW5EZXB0aCwgZmxvYXQgbWF4RGVwdGgpCit7CisgICAgd2dwdVJlbmRlclBhc3NF
bmNvZGVyU2V0Vmlld3BvcnQobV9iYWNraW5nLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBtaW5EZXB0
aCwgbWF4RGVwdGgpOworfQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6c2V0U2Npc3Nv
clJlY3QoSW50ZWdlckNvb3JkaW5hdGUgeCwgSW50ZWdlckNvb3JkaW5hdGUgeSwKKyAgICBJbnRl
Z2VyQ29vcmRpbmF0ZSB3aWR0aCwgSW50ZWdlckNvb3JkaW5hdGUgaGVpZ2h0KQoreworICAgIHdn
cHVSZW5kZXJQYXNzRW5jb2RlclNldFNjaXNzb3JSZWN0KG1fYmFja2luZywgeCwgeSwgd2lkdGgs
IGhlaWdodCk7Cit9CisKK3ZvaWQgUmVuZGVyUGFzc0VuY29kZXJJbXBsOjpzZXRCbGVuZENvbnN0
YW50KENvbG9yIGNvbG9yKQoreworICAgIGF1dG8gYmFja2luZ0NvbG9yID0gY29udmVydFRvQmFj
a2luZyhjb2xvcik7CisKKyAgICB3Z3B1UmVuZGVyUGFzc0VuY29kZXJTZXRCbGVuZENvbnN0YW50
KG1fYmFja2luZywgJmJhY2tpbmdDb2xvcik7Cit9CisKK3ZvaWQgUmVuZGVyUGFzc0VuY29kZXJJ
bXBsOjpzZXRTdGVuY2lsUmVmZXJlbmNlKFN0ZW5jaWxWYWx1ZSBzdGVuY2lsVmFsdWUpCit7Cisg
ICAgd2dwdVJlbmRlclBhc3NFbmNvZGVyU2V0U3RlbmNpbFJlZmVyZW5jZShtX2JhY2tpbmcsIHN0
ZW5jaWxWYWx1ZSk7Cit9CisKK3ZvaWQgUmVuZGVyUGFzc0VuY29kZXJJbXBsOjpiZWdpbk9jY2x1
c2lvblF1ZXJ5KFNpemUzMiBxdWVyeUluZGV4KQoreworICAgIHdncHVSZW5kZXJQYXNzRW5jb2Rl
ckJlZ2luT2NjbHVzaW9uUXVlcnkobV9iYWNraW5nLCBxdWVyeUluZGV4KTsKK30KKwordm9pZCBS
ZW5kZXJQYXNzRW5jb2RlckltcGw6OmVuZE9jY2x1c2lvblF1ZXJ5KCkKK3sKKyAgICB3Z3B1UmVu
ZGVyUGFzc0VuY29kZXJFbmRPY2NsdXNpb25RdWVyeShtX2JhY2tpbmcpOworfQorCit2b2lkIFJl
bmRlclBhc3NFbmNvZGVySW1wbDo6YmVnaW5QaXBlbGluZVN0YXRpc3RpY3NRdWVyeShjb25zdCBR
dWVyeVNldCYgcXVlcnlTZXQsIFNpemUzMiBxdWVyeUluZGV4KQoreworICAgIHdncHVSZW5kZXJQ
YXNzRW5jb2RlckJlZ2luUGlwZWxpbmVTdGF0aXN0aWNzUXVlcnkobV9iYWNraW5nLCBzdGF0aWNf
Y2FzdDxjb25zdCBRdWVyeVNldEltcGwmPihxdWVyeVNldCkuYmFja2luZygpLCBxdWVyeUluZGV4
KTsKK30KKwordm9pZCBSZW5kZXJQYXNzRW5jb2RlckltcGw6OmVuZFBpcGVsaW5lU3RhdGlzdGlj
c1F1ZXJ5KCkKK3sKKyAgICB3Z3B1UmVuZGVyUGFzc0VuY29kZXJFbmRQaXBlbGluZVN0YXRpc3Rp
Y3NRdWVyeShtX2JhY2tpbmcpOworfQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6ZXhl
Y3V0ZUJ1bmRsZXMoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVuZGVyQnVuZGxlPj4m
JiByZW5kZXJCdW5kbGVzKQoreworICAgIFZlY3RvcjxXR1BVUmVuZGVyQnVuZGxlPiBiYWNraW5n
QnVuZGxlczsKKyAgICBiYWNraW5nQnVuZGxlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHJlbmRl
ckJ1bmRsZXMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8gcmVuZGVyQnVuZGxlIDogcmVuZGVyQnVu
ZGxlcykKKyAgICAgICAgYmFja2luZ0J1bmRsZXMudW5jaGVja2VkQXBwZW5kKHN0YXRpY19jYXN0
PGNvbnN0IFJlbmRlckJ1bmRsZUltcGwmPihyZW5kZXJCdW5kbGUuZ2V0KCkpLmJhY2tpbmcoKSk7
CisKKyAgICB3Z3B1UmVuZGVyUGFzc0VuY29kZXJFeGVjdXRlQnVuZGxlcyhtX2JhY2tpbmcsIGJh
Y2tpbmdCdW5kbGVzLnNpemUoKSwgYmFja2luZ0J1bmRsZXMuZGF0YSgpKTsKK30KKwordm9pZCBS
ZW5kZXJQYXNzRW5jb2RlckltcGw6OmVuZFBhc3MoKQoreworICAgIHdncHVSZW5kZXJQYXNzRW5j
b2RlckVuZFBhc3MobV9iYWNraW5nKTsKK30KKwordm9pZCBSZW5kZXJQYXNzRW5jb2RlckltcGw6
OnNldExhYmVsSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBsYWJlbCkKK3sKKyAgICB3Z3B1UmVuZGVy
UGFzc0VuY29kZXJTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVsLnV0ZjgoKS5kYXRhKCkpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJQ
YXNzRW5jb2RlckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BV
L0ltcGwvV2ViR1BVUmVuZGVyUGFzc0VuY29kZXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWJhZjFhZThj
OTc1N2ZlMTIzOTEwOGU4ODQzMWM0OTY4NWE1ZTcxMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVyUGFzc0Vu
Y29kZXJJbXBsLmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIldlYkdQVVJlbmRlclBhc3NFbmNvZGVyLmgiCisjaW5jbHVkZSA8V2ViR1BV
L1dlYkdQVS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFz
cyBSZW5kZXJQYXNzRW5jb2RlckltcGwgZmluYWwgOiBwdWJsaWMgUmVuZGVyUGFzc0VuY29kZXIg
eworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVuZGVyUGFzc0VuY29kZXJJbXBsPiBjcmVhdGUo
V0dQVVJlbmRlclBhc3NFbmNvZGVyIHJlbmRlclBhc3NFbmNvZGVyKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVuZGVyUGFzc0VuY29kZXJJbXBsKHJlbmRlclBhc3NFbmNv
ZGVyKSk7CisgICAgfQorCisgICAgflJlbmRlclBhc3NFbmNvZGVySW1wbCgpOworCisgICAgV0dQ
VVJlbmRlclBhc3NFbmNvZGVyIGJhY2tpbmcoKSBjb25zdCB7IHJldHVybiBtX2JhY2tpbmc7IH0K
KworcHJpdmF0ZToKKyAgICBSZW5kZXJQYXNzRW5jb2RlckltcGwoV0dQVVJlbmRlclBhc3NFbmNv
ZGVyKTsKKworICAgIFJlbmRlclBhc3NFbmNvZGVySW1wbChjb25zdCBSZW5kZXJQYXNzRW5jb2Rl
ckltcGwmKSA9IGRlbGV0ZTsKKyAgICBSZW5kZXJQYXNzRW5jb2RlckltcGwoUmVuZGVyUGFzc0Vu
Y29kZXJJbXBsJiYpID0gZGVsZXRlOworICAgIFJlbmRlclBhc3NFbmNvZGVySW1wbCYgb3BlcmF0
b3I9KGNvbnN0IFJlbmRlclBhc3NFbmNvZGVySW1wbCYpID0gZGVsZXRlOworICAgIFJlbmRlclBh
c3NFbmNvZGVySW1wbCYgb3BlcmF0b3I9KFJlbmRlclBhc3NFbmNvZGVySW1wbCYmKSA9IGRlbGV0
ZTsKKworICAgIHZvaWQgc2V0UGlwZWxpbmUoY29uc3QgUmVuZGVyUGlwZWxpbmUmKSBmaW5hbDsK
KworICAgIHZvaWQgc2V0SW5kZXhCdWZmZXIoY29uc3QgQnVmZmVyJiwgSW5kZXhGb3JtYXQsIFNp
emU2NCBvZmZzZXQsIHN0ZDo6b3B0aW9uYWw8U2l6ZTY0PikgZmluYWw7CisgICAgdm9pZCBzZXRW
ZXJ0ZXhCdWZmZXIoSW5kZXgzMiBzbG90LCBjb25zdCBCdWZmZXImLCBTaXplNjQgb2Zmc2V0LCBz
dGQ6Om9wdGlvbmFsPFNpemU2ND4pIGZpbmFsOworCisgICAgdm9pZCBkcmF3KFNpemUzMiB2ZXJ0
ZXhDb3VudCwgU2l6ZTMyIGluc3RhbmNlQ291bnQsCisgICAgICAgIFNpemUzMiBmaXJzdFZlcnRl
eCwgU2l6ZTMyIGZpcnN0SW5zdGFuY2UpIGZpbmFsOworICAgIHZvaWQgZHJhd0luZGV4ZWQoU2l6
ZTMyIGluZGV4Q291bnQsIFNpemUzMiBpbnN0YW5jZUNvdW50LAorICAgICAgICBTaXplMzIgZmly
c3RJbmRleCwKKyAgICAgICAgU2lnbmVkT2Zmc2V0MzIgYmFzZVZlcnRleCwKKyAgICAgICAgU2l6
ZTMyIGZpcnN0SW5zdGFuY2UpIGZpbmFsOworCisgICAgdm9pZCBkcmF3SW5kaXJlY3QoY29uc3Qg
QnVmZmVyJiBpbmRpcmVjdEJ1ZmZlciwgU2l6ZTY0IGluZGlyZWN0T2Zmc2V0KSBmaW5hbDsKKyAg
ICB2b2lkIGRyYXdJbmRleGVkSW5kaXJlY3QoY29uc3QgQnVmZmVyJiBpbmRpcmVjdEJ1ZmZlciwg
U2l6ZTY0IGluZGlyZWN0T2Zmc2V0KSBmaW5hbDsKKworICAgIHZvaWQgc2V0QmluZEdyb3VwKElu
ZGV4MzIsIGNvbnN0IEJpbmRHcm91cCYsCisgICAgICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPEJ1
ZmZlckR5bmFtaWNPZmZzZXQ+PiYmIGR5bmFtaWNPZmZzZXRzKSBmaW5hbDsKKworICAgIHZvaWQg
c2V0QmluZEdyb3VwKEluZGV4MzIsIGNvbnN0IEJpbmRHcm91cCYsCisgICAgICAgIGNvbnN0IHVp
bnQzMl90KiBkeW5hbWljT2Zmc2V0c0FycmF5QnVmZmVyLAorICAgICAgICBzaXplX3QgZHluYW1p
Y09mZnNldHNBcnJheUJ1ZmZlckxlbmd0aCwKKyAgICAgICAgU2l6ZTY0IGR5bmFtaWNPZmZzZXRz
RGF0YVN0YXJ0LAorICAgICAgICBTaXplMzIgZHluYW1pY09mZnNldHNEYXRhTGVuZ3RoKSBmaW5h
bDsKKworICAgIHZvaWQgcHVzaERlYnVnR3JvdXAoU3RyaW5nJiYgZ3JvdXBMYWJlbCkgZmluYWw7
CisgICAgdm9pZCBwb3BEZWJ1Z0dyb3VwKCkgZmluYWw7CisgICAgdm9pZCBpbnNlcnREZWJ1Z01h
cmtlcihTdHJpbmcmJiBtYXJrZXJMYWJlbCkgZmluYWw7CisKKyAgICB2b2lkIHNldFZpZXdwb3J0
KGZsb2F0IHgsIGZsb2F0IHksCisgICAgICAgIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsCisg
ICAgICAgIGZsb2F0IG1pbkRlcHRoLCBmbG9hdCBtYXhEZXB0aCkgZmluYWw7CisKKyAgICB2b2lk
IHNldFNjaXNzb3JSZWN0KEludGVnZXJDb29yZGluYXRlIHgsIEludGVnZXJDb29yZGluYXRlIHks
CisgICAgICAgIEludGVnZXJDb29yZGluYXRlIHdpZHRoLCBJbnRlZ2VyQ29vcmRpbmF0ZSBoZWln
aHQpIGZpbmFsOworCisgICAgdm9pZCBzZXRCbGVuZENvbnN0YW50KENvbG9yKSBmaW5hbDsKKyAg
ICB2b2lkIHNldFN0ZW5jaWxSZWZlcmVuY2UoU3RlbmNpbFZhbHVlKSBmaW5hbDsKKworICAgIHZv
aWQgYmVnaW5PY2NsdXNpb25RdWVyeShTaXplMzIgcXVlcnlJbmRleCkgZmluYWw7CisgICAgdm9p
ZCBlbmRPY2NsdXNpb25RdWVyeSgpIGZpbmFsOworCisgICAgdm9pZCBiZWdpblBpcGVsaW5lU3Rh
dGlzdGljc1F1ZXJ5KGNvbnN0IFF1ZXJ5U2V0JiwgU2l6ZTMyIHF1ZXJ5SW5kZXgpIGZpbmFsOwor
ICAgIHZvaWQgZW5kUGlwZWxpbmVTdGF0aXN0aWNzUXVlcnkoKSBmaW5hbDsKKworICAgIHZvaWQg
ZXhlY3V0ZUJ1bmRsZXMoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVuZGVyQnVuZGxl
Pj4mJikgZmluYWw7CisgICAgdm9pZCBlbmRQYXNzKCkgZmluYWw7CisKKyAgICB2b2lkIHNldExh
YmVsSW50ZXJuYWwoY29uc3QgU3RyaW5nJikgZmluYWw7CisKKyAgICBXR1BVUmVuZGVyUGFzc0Vu
Y29kZXIgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9
IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwv
Z3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVyUGlwZWxpbmVJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVyUGlwZWxp
bmVJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYzBkZDNlYTEyYTg5OTljNDJlNjNhYmIzNjIwMzJmYzNj
MTdlMTc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGlj
cy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJQaXBlbGluZUltcGwuY3BwCkBAIC0wLDAgKzEsNTYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViR1BVUmVu
ZGVyUGlwZWxpbmVJbXBsLmgiCisKKyNpbmNsdWRlICJXZWJHUFVCaW5kR3JvdXBMYXlvdXRJbXBs
LmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25h
bWVzcGFjZSBXZWJHUFUgeworCitSZW5kZXJQaXBlbGluZUltcGw6OlJlbmRlclBpcGVsaW5lSW1w
bChXR1BVUmVuZGVyUGlwZWxpbmUgcmVuZGVyUGlwZWxpbmUpCisgICAgOiBtX2JhY2tpbmcocmVu
ZGVyUGlwZWxpbmUpCit7Cit9CisKK1JlbmRlclBpcGVsaW5lSW1wbDo6flJlbmRlclBpcGVsaW5l
SW1wbCgpCit7CisgICAgd2dwdVJlbmRlclBpcGVsaW5lUmVsZWFzZShtX2JhY2tpbmcpOworfQor
CitSZWY8QmluZEdyb3VwTGF5b3V0PiBSZW5kZXJQaXBlbGluZUltcGw6OmdldEJpbmRHcm91cExh
eW91dCh1aW50MzJfdCBpbmRleCkKK3sKKyAgICByZXR1cm4gQmluZEdyb3VwTGF5b3V0SW1wbDo6
Y3JlYXRlKHdncHVSZW5kZXJQaXBlbGluZUdldEJpbmRHcm91cExheW91dChtX2JhY2tpbmcsIGlu
ZGV4KSk7Cit9CisKK3ZvaWQgUmVuZGVyUGlwZWxpbmVJbXBsOjpzZXRMYWJlbEludGVybmFsKGNv
bnN0IFN0cmluZyYgbGFiZWwpCit7CisgICAgd2dwdVJlbmRlclBpcGVsaW5lU2V0TGFiZWwobV9i
YWNraW5nLCBsYWJlbC51dGY4KCkuZGF0YSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgUEFMCit9
IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwv
Z3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVyUGlwZWxpbmVJbXBsLmggYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlclBpcGVsaW5l
SW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjllYWU1N2E2OWZiMTI1N2QzNjcyMjA1Y2Y3OTE5NmE5YTVhMGJm
ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dl
YkdQVS9JbXBsL1dlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYkdQVVJlbmRlclBpcGVsaW5l
LmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVz
cGFjZSBXZWJHUFUgeworCitjbGFzcyBSZW5kZXJQaXBlbGluZUltcGwgZmluYWwgOiBwdWJsaWMg
UmVuZGVyUGlwZWxpbmUgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVuZGVyUGlwZWxpbmVJ
bXBsPiBjcmVhdGUoV0dQVVJlbmRlclBpcGVsaW5lIHJlbmRlclBpcGVsaW5lKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVuZGVyUGlwZWxpbmVJbXBsKHJlbmRlclBpcGVs
aW5lKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+UmVuZGVyUGlwZWxpbmVJbXBsKCk7CisKKyAg
ICBXR1BVUmVuZGVyUGlwZWxpbmUgYmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsg
fQorCitwcml2YXRlOgorICAgIFJlbmRlclBpcGVsaW5lSW1wbChXR1BVUmVuZGVyUGlwZWxpbmUp
OworCisgICAgUmVuZGVyUGlwZWxpbmVJbXBsKGNvbnN0IFJlbmRlclBpcGVsaW5lSW1wbCYpID0g
ZGVsZXRlOworICAgIFJlbmRlclBpcGVsaW5lSW1wbChSZW5kZXJQaXBlbGluZUltcGwmJikgPSBk
ZWxldGU7CisgICAgUmVuZGVyUGlwZWxpbmVJbXBsJiBvcGVyYXRvcj0oY29uc3QgUmVuZGVyUGlw
ZWxpbmVJbXBsJikgPSBkZWxldGU7CisgICAgUmVuZGVyUGlwZWxpbmVJbXBsJiBvcGVyYXRvcj0o
UmVuZGVyUGlwZWxpbmVJbXBsJiYpID0gZGVsZXRlOworCisgICAgUmVmPEJpbmRHcm91cExheW91
dD4gZ2V0QmluZEdyb3VwTGF5b3V0KHVpbnQzMl90IGluZGV4KSBmaW5hbDsKKworICAgIHZvaWQg
c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5hbDsKKworICAgIFdHUFVSZW5kZXJQ
aXBlbGluZSBtX2JhY2tpbmcgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBQQUwK
K30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVTYW1wbGVySW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVNhbXBsZXJJbXBsLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45MmNhYTczYTU3ZjAwMzI4YjkyNmZjMDFjMDA5MDJkZWMxYzA4YTRiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1w
bC9XZWJHUFVTYW1wbGVySW1wbC5jcHAKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVTYW1wbGVySW1wbC5oIgorCisjaW5j
bHVkZSA8V2ViR1BVL1dlYkdQVUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBX
ZWJHUFUgeworCitTYW1wbGVySW1wbDo6U2FtcGxlckltcGwoV0dQVVNhbXBsZXIgc2FtcGxlcikK
KyAgICA6IG1fYmFja2luZyhzYW1wbGVyKQoreworfQorCitTYW1wbGVySW1wbDo6flNhbXBsZXJJ
bXBsKCkKK3sKKyAgICB3Z3B1U2FtcGxlclJlbGVhc2UobV9iYWNraW5nKTsKK30KKwordm9pZCBT
YW1wbGVySW1wbDo6c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAg
IHdncHVTYW1wbGVyU2V0TGFiZWwobV9iYWNraW5nLCBsYWJlbC51dGY4KCkuZGF0YSgpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVU2FtcGxl
ckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2Vi
R1BVU2FtcGxlckltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NTJkYzQ3MjA4NzRmNGY1NmJkZTRhNWY4M2Nj
M2FiZmY1YzJiYmVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9n
cmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVTYW1wbGVySW1wbC5oCkBAIC0wLDAgKzEsNTkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYkdQVVNhbXBsZXIuaCIK
KyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVLmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNl
IFdlYkdQVSB7CisKK2NsYXNzIFNhbXBsZXJJbXBsIGZpbmFsIDogcHVibGljIFNhbXBsZXIgewor
cHVibGljOgorICAgIHN0YXRpYyBSZWY8U2FtcGxlckltcGw+IGNyZWF0ZShXR1BVU2FtcGxlciBz
YW1wbGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2FtcGxlckltcGwo
c2FtcGxlcikpOworICAgIH0KKworICAgIHZpcnR1YWwgflNhbXBsZXJJbXBsKCk7CisKKyAgICBX
R1BVU2FtcGxlciBiYWNraW5nKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nOyB9CisKK3ByaXZh
dGU6CisgICAgU2FtcGxlckltcGwoV0dQVVNhbXBsZXIpOworCisgICAgU2FtcGxlckltcGwoY29u
c3QgU2FtcGxlckltcGwmKSA9IGRlbGV0ZTsKKyAgICBTYW1wbGVySW1wbChTYW1wbGVySW1wbCYm
KSA9IGRlbGV0ZTsKKyAgICBTYW1wbGVySW1wbCYgb3BlcmF0b3I9KGNvbnN0IFNhbXBsZXJJbXBs
JikgPSBkZWxldGU7CisgICAgU2FtcGxlckltcGwmIG9wZXJhdG9yPShTYW1wbGVySW1wbCYmKSA9
IGRlbGV0ZTsKKworICAgIHZvaWQgc2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5h
bDsKKworICAgIFdHUFVTYW1wbGVyIG1fYmFja2luZyB7IG51bGxwdHIgfTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVNoYWRlck1vZHVsZUlt
cGwuY3BwIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJH
UFVTaGFkZXJNb2R1bGVJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MWI1Njk1NTQwZTdkNGVmZTRhZDBj
ZTIxOTQxMzc5NjZkNDJlMDViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFM
L3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVTaGFkZXJNb2R1bGVJbXBsLmNwcApAQCAt
MCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYkdQVVNoYWRlck1vZHVsZUltcGwuaCIKKworI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFVFeHQu
aD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworU2hhZGVyTW9kdWxl
SW1wbDo6U2hhZGVyTW9kdWxlSW1wbChXR1BVU2hhZGVyTW9kdWxlIHNoYWRlck1vZHVsZSkKKyAg
ICA6IG1fYmFja2luZyhzaGFkZXJNb2R1bGUpCit7Cit9CisKK1NoYWRlck1vZHVsZUltcGw6On5T
aGFkZXJNb2R1bGVJbXBsKCkKK3sKKyAgICB3Z3B1U2hhZGVyTW9kdWxlUmVsZWFzZShtX2JhY2tp
bmcpOworfQorCit2b2lkIFNoYWRlck1vZHVsZUltcGw6OmNvbXBpbGF0aW9uSW5mbyhzdGQ6OmZ1
bmN0aW9uPHZvaWQoUmVmPENvbXBpbGF0aW9uSW5mbz4mJik+JiYpCit7Cit9CisKK3ZvaWQgU2hh
ZGVyTW9kdWxlSW1wbDo6c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQorewor
ICAgIHdncHVTaGFkZXJNb2R1bGVTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVsLnV0ZjgoKS5kYXRh
KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJH
UFVTaGFkZXJNb2R1bGVJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dl
YkdQVS9JbXBsL1dlYkdQVVNoYWRlck1vZHVsZUltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hY2VmMzYzOTFk
MDJlNDBiZGRlNmU5NGYwOTEzOTFmYWU0MWNhMzNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVTaGFkZXJNb2R1bGVJ
bXBsLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiV2ViR1BVU2hhZGVyTW9kdWxlLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgor
CituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBTaGFkZXJNb2R1
bGVJbXBsIGZpbmFsIDogcHVibGljIFNoYWRlck1vZHVsZSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxTaGFkZXJNb2R1bGVJbXBsPiBjcmVhdGUoV0dQVVNoYWRlck1vZHVsZSBzaGFkZXJNb2R1
bGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFkZXJNb2R1bGVJbXBs
KHNoYWRlck1vZHVsZSkpOworICAgIH0KKworICAgIHZpcnR1YWwgflNoYWRlck1vZHVsZUltcGwo
KTsKKworICAgIFdHUFVTaGFkZXJNb2R1bGUgYmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFj
a2luZzsgfQorCitwcml2YXRlOgorICAgIFNoYWRlck1vZHVsZUltcGwoV0dQVVNoYWRlck1vZHVs
ZSk7CisKKyAgICBTaGFkZXJNb2R1bGVJbXBsKGNvbnN0IFNoYWRlck1vZHVsZUltcGwmKSA9IGRl
bGV0ZTsKKyAgICBTaGFkZXJNb2R1bGVJbXBsKFNoYWRlck1vZHVsZUltcGwmJikgPSBkZWxldGU7
CisgICAgU2hhZGVyTW9kdWxlSW1wbCYgb3BlcmF0b3I9KGNvbnN0IFNoYWRlck1vZHVsZUltcGwm
KSA9IGRlbGV0ZTsKKyAgICBTaGFkZXJNb2R1bGVJbXBsJiBvcGVyYXRvcj0oU2hhZGVyTW9kdWxl
SW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIHZvaWQgY29tcGlsYXRpb25JbmZvKHN0ZDo6ZnVuY3Rp
b248dm9pZChSZWY8Q29tcGlsYXRpb25JbmZvPiYmKT4mJikgZmluYWw7CisKKyAgICB2b2lkIHNl
dExhYmVsSW50ZXJuYWwoY29uc3QgU3RyaW5nJikgZmluYWw7CisKKyAgICBXR1BVU2hhZGVyTW9k
dWxlIG1fYmFja2luZyB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAv
LyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dy
YXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVRleHR1cmVJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVVGV4dHVyZUltcGwuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmJiNmY4MjFkOTQzYmQ2NDRiN2I3OTAyMTY4MWYxNjA3NDNhNTA1ODEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dl
YkdQVVRleHR1cmVJbXBsLmNwcApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkdQVVRleHR1cmVJbXBsLmgiCisKKyNpbmNsdWRl
ICJXZWJHUFVDb252ZXJ0VG9CYWNraW5nLmgiCisjaW5jbHVkZSAiV2ViR1BVVGV4dHVyZVZpZXcu
aCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJlVmlld0Rlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJX
ZWJHUFVUZXh0dXJlVmlld0ltcGwuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVRXh0Lmg+CisK
K25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK1RleHR1cmVJbXBsOjpUZXh0
dXJlSW1wbChXR1BVVGV4dHVyZSB0ZXh0dXJlLCBUZXh0dXJlRm9ybWF0IGZvcm1hdCwgVGV4dHVy
ZURpbWVuc2lvbiBkaW1lbnNpb24pCisgICAgOiBtX2JhY2tpbmcodGV4dHVyZSkKKyAgICAsIG1f
Zm9ybWF0KGZvcm1hdCkKKyAgICAsIG1fZGltZW5zaW9uKGRpbWVuc2lvbikKK3sKK30KKworVGV4
dHVyZUltcGw6On5UZXh0dXJlSW1wbCgpCit7CisgICAgd2dwdVRleHR1cmVSZWxlYXNlKG1fYmFj
a2luZyk7Cit9CisKK1JlZjxUZXh0dXJlVmlldz4gVGV4dHVyZUltcGw6OmNyZWF0ZVZpZXcoY29u
c3Qgc3RkOjpvcHRpb25hbDxUZXh0dXJlVmlld0Rlc2NyaXB0b3I+JiBkZXNjcmlwdG9yKSBjb25z
dAoreworICAgIENTdHJpbmcgbGFiZWwgPSBkZXNjcmlwdG9yID8gZGVzY3JpcHRvci0+bGFiZWwu
dXRmOCgpIDogQ1N0cmluZygiIik7CisKKyAgICBXR1BVVGV4dHVyZVZpZXdEZXNjcmlwdG9yIGJh
Y2tpbmdEZXNjcmlwdG9yIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgbGFiZWwuZGF0YSgp
LAorICAgICAgICBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3ItPmZvcm1hdCA/IGNvbnZlcnRUb0Jh
Y2tpbmcoKmRlc2NyaXB0b3ItPmZvcm1hdCkgOiBjb252ZXJ0VG9CYWNraW5nKG1fZm9ybWF0KSwK
KyAgICAgICAgKFsmXSAoKSAtPiBXR1BVVGV4dHVyZVZpZXdEaW1lbnNpb24geworICAgICAgICAg
ICAgaWYgKGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci0+ZGltZW5zaW9uKQorICAgICAgICAgICAg
ICAgIHJldHVybiBjb252ZXJ0VG9CYWNraW5nKCpkZXNjcmlwdG9yLT5kaW1lbnNpb24pOworICAg
ICAgICAgICAgc3dpdGNoIChtX2RpbWVuc2lvbikgeworICAgICAgICAgICAgY2FzZSBUZXh0dXJl
RGltZW5zaW9uOjpfMWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlVmlld0Rp
bWVuc2lvbl8xRDsKKyAgICAgICAgICAgIGNhc2UgVGV4dHVyZURpbWVuc2lvbjo6XzJkOgorICAg
ICAgICAgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZVZpZXdEaW1lbnNpb25fMkQ7CisgICAgICAg
ICAgICBjYXNlIFRleHR1cmVEaW1lbnNpb246Ol8zZDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
V0dQVVRleHR1cmVWaWV3RGltZW5zaW9uXzJEOworICAgICAgICAgICAgfQorICAgICAgICB9KSgp
LAorICAgICAgICBkZXNjcmlwdG9yID8gZGVzY3JpcHRvci0+YmFzZU1pcExldmVsIDogMCwKKyAg
ICAgICAgZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLT5taXBMZXZlbENvdW50ID8gKmRlc2NyaXB0
b3ItPm1pcExldmVsQ291bnQgOiBzdGF0aWNfY2FzdDx1aW50MzJfdD4oV0dQVV9NSVBfTEVWRUxf
Q09VTlRfVU5ERUZJTkVEKSwKKyAgICAgICAgZGVzY3JpcHRvciA/IGRlc2NyaXB0b3ItPmJhc2VB
cnJheUxheWVyIDogMCwKKyAgICAgICAgZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLT5hcnJheUxh
eWVyQ291bnQgPyAqZGVzY3JpcHRvci0+YXJyYXlMYXllckNvdW50IDogc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KFdHUFVfQVJSQVlfTEFZRVJfQ09VTlRfVU5ERUZJTkVEKSwKKyAgICAgICAgZGVzY3Jp
cHRvciA/IGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci0+YXNwZWN0KSA6IFdHUFVUZXh0dXJl
QXNwZWN0X0FsbCwKKyAgICB9OworCisgICAgcmV0dXJuIFRleHR1cmVWaWV3SW1wbDo6Y3JlYXRl
KHdncHVUZXh0dXJlQ3JlYXRlVmlldyhtX2JhY2tpbmcsICZiYWNraW5nRGVzY3JpcHRvcikpOwor
fQorCit2b2lkIFRleHR1cmVJbXBsOjpkZXN0cm95KCkKK3sKKyAgICB3Z3B1VGV4dHVyZURlc3Ry
b3kobV9iYWNraW5nKTsKK30KKwordm9pZCBUZXh0dXJlSW1wbDo6c2V0TGFiZWxJbnRlcm5hbChj
b25zdCBTdHJpbmcmIGxhYmVsKQoreworICAgIHdncHVUZXh0dXJlU2V0TGFiZWwobV9iYWNraW5n
LCBsYWJlbC51dGY4KCkuZGF0YSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5h
bWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhp
Y3MvV2ViR1BVL0ltcGwvV2ViR1BVVGV4dHVyZUltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVVGV4dHVyZUltcGwuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
NmU4ZDBiOGMwNDcyYTNkOGUyNjg5ZmZjYmJjM2M0MjdiZWFmMWU5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVUZXh0
dXJlSW1wbC5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIldlYkdQVUludGVncmFsVHlwZXMuaCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJl
LmgiCisjaW5jbHVkZSAiV2ViR1BVVGV4dHVyZURpbWVuc2lvbi5oIgorI2luY2x1ZGUgIldlYkdQ
VVRleHR1cmVGb3JtYXQuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVLmg+CisKK25hbWVzcGFj
ZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK2NsYXNzIFRleHR1cmVJbXBsIGZpbmFsIDog
cHVibGljIFRleHR1cmUgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8VGV4dHVyZUltcGw+IGNy
ZWF0ZShXR1BVVGV4dHVyZSB0ZXh0dXJlLCBUZXh0dXJlRm9ybWF0IGZvcm1hdCwgVGV4dHVyZURp
bWVuc2lvbiBkaW1lbnNpb24pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBU
ZXh0dXJlSW1wbCh0ZXh0dXJlLCBmb3JtYXQsIGRpbWVuc2lvbikpOworICAgIH0KKworICAgIHZp
cnR1YWwgflRleHR1cmVJbXBsKCk7CisKKyAgICBXR1BVVGV4dHVyZSBiYWNraW5nKCkgY29uc3Qg
eyByZXR1cm4gbV9iYWNraW5nOyB9CisKK3ByaXZhdGU6CisgICAgVGV4dHVyZUltcGwoV0dQVVRl
eHR1cmUsIFRleHR1cmVGb3JtYXQsIFRleHR1cmVEaW1lbnNpb24pOworCisgICAgVGV4dHVyZUlt
cGwoY29uc3QgVGV4dHVyZUltcGwmKSA9IGRlbGV0ZTsKKyAgICBUZXh0dXJlSW1wbChUZXh0dXJl
SW1wbCYmKSA9IGRlbGV0ZTsKKyAgICBUZXh0dXJlSW1wbCYgb3BlcmF0b3I9KGNvbnN0IFRleHR1
cmVJbXBsJikgPSBkZWxldGU7CisgICAgVGV4dHVyZUltcGwmIG9wZXJhdG9yPShUZXh0dXJlSW1w
bCYmKSA9IGRlbGV0ZTsKKworICAgIFJlZjxUZXh0dXJlVmlldz4gY3JlYXRlVmlldyhjb25zdCBz
dGQ6Om9wdGlvbmFsPFRleHR1cmVWaWV3RGVzY3JpcHRvcj4mKSBjb25zdCBmaW5hbDsKKworICAg
IHZvaWQgZGVzdHJveSgpIGZpbmFsOworCisgICAgdm9pZCBzZXRMYWJlbEludGVybmFsKGNvbnN0
IFN0cmluZyYpIGZpbmFsOworCisgICAgV0dQVVRleHR1cmUgbV9iYWNraW5nIHsgbnVsbHB0ciB9
OworICAgIFRleHR1cmVGb3JtYXQgbV9mb3JtYXQgeyBUZXh0dXJlRm9ybWF0OjpSZ2JhOHVub3Jt
IH07CisgICAgVGV4dHVyZURpbWVuc2lvbiBtX2RpbWVuc2lvbiB7IFRleHR1cmVEaW1lbnNpb246
Ol8yZCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwv
V2ViR1BVVGV4dHVyZVZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhp
Y3MvV2ViR1BVL0ltcGwvV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OTk5
MDI4Mzc1ZWY1NTQxMGNjOGE0MTE4MzYyZDVkNTZlZmMxMDUzCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVUZXh0dXJl
Vmlld0ltcGwuY3BwCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmgiCisKKyNpbmNsdWRlIDxX
ZWJHUFUvV2ViR1BVRXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7
CisKK1RleHR1cmVWaWV3SW1wbDo6VGV4dHVyZVZpZXdJbXBsKFdHUFVUZXh0dXJlVmlldyB0ZXh0
dXJlVmlldykKKyAgICA6IG1fYmFja2luZyh0ZXh0dXJlVmlldykKK3sKK30KKworVGV4dHVyZVZp
ZXdJbXBsOjp+VGV4dHVyZVZpZXdJbXBsKCkKK3sKKyAgICB3Z3B1VGV4dHVyZVZpZXdSZWxlYXNl
KG1fYmFja2luZyk7Cit9CisKK3ZvaWQgVGV4dHVyZVZpZXdJbXBsOjpzZXRMYWJlbEludGVybmFs
KGNvbnN0IFN0cmluZyYgbGFiZWwpCit7CisgICAgd2dwdVRleHR1cmVWaWV3U2V0TGFiZWwobV9i
YWNraW5nLCBsYWJlbC51dGY4KCkuZGF0YSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgUEFMCit9
IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwv
Z3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmggYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVRleHR1cmVWaWV3SW1wbC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmY1NDQ3ZjI2NzFmMGUwNmUzNGMzY2JhZGYwMzY1MGI1YTI2NDljZDkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9J
bXBsL1dlYkdQVVRleHR1cmVWaWV3SW1wbC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYkdQVVRleHR1cmVWaWV3LmgiCisjaW5jbHVk
ZSA8V2ViR1BVL1dlYkdQVS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUg
eworCitjbGFzcyBUZXh0dXJlVmlld0ltcGwgZmluYWwgOiBwdWJsaWMgVGV4dHVyZVZpZXcgewor
cHVibGljOgorICAgIHN0YXRpYyBSZWY8VGV4dHVyZVZpZXdJbXBsPiBjcmVhdGUoV0dQVVRleHR1
cmVWaWV3IHRleHR1cmVWaWV3KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
VGV4dHVyZVZpZXdJbXBsKHRleHR1cmVWaWV3KSk7CisgICAgfQorCisgICAgdmlydHVhbCB+VGV4
dHVyZVZpZXdJbXBsKCk7CisKKyAgICBXR1BVVGV4dHVyZVZpZXcgYmFja2luZygpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgorICAgIFRleHR1cmVWaWV3SW1wbChXR1BV
VGV4dHVyZVZpZXcpOworCisgICAgVGV4dHVyZVZpZXdJbXBsKGNvbnN0IFRleHR1cmVWaWV3SW1w
bCYpID0gZGVsZXRlOworICAgIFRleHR1cmVWaWV3SW1wbChUZXh0dXJlVmlld0ltcGwmJikgPSBk
ZWxldGU7CisgICAgVGV4dHVyZVZpZXdJbXBsJiBvcGVyYXRvcj0oY29uc3QgVGV4dHVyZVZpZXdJ
bXBsJikgPSBkZWxldGU7CisgICAgVGV4dHVyZVZpZXdJbXBsJiBvcGVyYXRvcj0oVGV4dHVyZVZp
ZXdJbXBsJiYpID0gZGVsZXRlOworCisgICAgdm9pZCBzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0
cmluZyYpIGZpbmFsOworCisgICAgV0dQVVRleHR1cmVWaWV3IG1fYmFja2luZyB7IG51bGxwdHIg
fTsKK307CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
OTk4MTBlYjgyMDNjY2RhNmI1YzllMzgxNjE0YjYyYmU2ZWYyYTFjYy4uYzRiODAwY2UzMGQyOTQz
YzVkODRjYzJiMzczNzY5Zjg0NDgzOTYzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjIzLDYgKzYyMyw3IEBACiAJCTFDMEFB
MTZEMjE5NDBEQzgwMDg5NjgyOSAvKiBTdHlsZUNvbG9yU2NoZW1lLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzBBQTE2QTIxOTQwREM3MDA4OTY4Mjkg
LyogU3R5bGVDb2xvclNjaGVtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTFDMTJBQzJCMUVFNzc4QUUwMDc5RTBBMCAvKiBGb250RmFtaWx5U3Bl
Y2lmaWNhdGlvbkNvcmVUZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQzEyQUMyOTFFRTc3OEFFMDA3OUUwQTAgLyogRm9udEZhbWlseVNwZWNpZmlj
YXRpb25Db3JlVGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTFDMThEQTU5MTgxQUY2QTUwMEM0RUYyMiAvKiBUZXh0UGFpbnRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMxOERBNTcxODFBRjZB
NTAwQzRFRjIyIC8qIFRleHRQYWludGVyLmggKi87IH07CisJCTFDMTlFNkM1Mjc0MDY2Q0MwMDRC
MTdCMCAvKiBXZWJHUFUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUMxOUU2QzMyNzQwNjZDQzAwNEIxN0IwIC8qIFdlYkdQVS5mcmFt
ZXdvcmsgKi87IH07CiAJCTFDMjFFNTdEMTgzRUQxRkYwMDFDMjg5RCAvKiBJT1N1cmZhY2VQb29s
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzIxRTU3
QjE4M0VEMUZGMDAxQzI4OUQgLyogSU9TdXJmYWNlUG9vbC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFDMjRFRUE1MUM3MjlDRTQwMDgwRjhGQyAv
KiBGb250RmFjZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUMyNEVFQTMxQzcyOUNFNDAwODBGOEZDIC8qIEZvbnRGYWNlU2V0LmggKi87IH07CiAJ
CTFDMjRFRUE5MUM3MkE3QjQwMDgwRjhGQyAvKiBKU0ZvbnRGYWNlU2V0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzI0RUVBNzFDNzJBN0I0MDA4MEY4
RkMgLyogSlNGb250RmFjZVNldC5oICovOyB9OwpAQCAtNzAzMiw2ICs3MDMzLDcgQEAKIAkJMUMx
MkFDMkMxRUU3Nzk5NTAwNzlFMEEwIC8qIEZvbnREZXNjcmlwdGlvbkNvY29hLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEZvbnREZXNjcmlwdGlvbkNvY29hLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUMxOERBNTYxODFBRjZBNTAwQzRFRjIyIC8qIFRleHRQYWludGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRQYWludGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUMxOERBNTcxODFBRjZBNTAwQzRFRjIyIC8qIFRl
eHRQYWludGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRQYWludGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNkMzMjc0MDY2Q0MwMDRCMTdC
MCAvKiBXZWJHUFUuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBXZWJHUFUuZnJhbWV3b3Jr
OyBwYXRoID0gV2ViR1BVLmZyYW1ld29yazsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJ
UjsgfTsKIAkJMUMyMUU1N0ExODNFRDFGRjAwMUMyODlEIC8qIElPU3VyZmFjZVBvb2wuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSU9TdXJmYWNlUG9vbC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDMjFFNTdCMTgzRUQxRkYwMDFDMjg5RCAvKiBJ
T1N1cmZhY2VQb29sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElPU3VyZmFj
ZVBvb2wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUMyNEVFQTExQzcyOUIzMjAw
ODBGOEZDIC8qIEZvbnRGYWNlU2V0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBGb250RmFj
ZVNldC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzc2Miw2ICsxNzc2NCw3
IEBACiAJCQkJMzc5OTE5QjIxMjAwREU1MDAwRUEwNDFDIC8qIGxpYnouZHlsaWIgaW4gRnJhbWV3
b3JrcyAqLywKIAkJCQlBODhBRDUyRjA5NTI0QjkyMDAxREQxOTYgLyogUXVhcnR6Q29yZS5mcmFt
ZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKIAkJCQk1RkUxRDI5MjE3OEZEMUYzMDAxQUEzQzMgLyog
U2VjdXJpdHkuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJCQkJMUMxOUU2QzUyNzQwNjZD
QzAwNEIxN0IwIC8qIFdlYkdQVS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE4NDE1
LDYgKzE4NDE4LDcgQEAKIAkJCQk1NzRGNTVFMjIwNEYzQ0JGMDAyOTQ4QzYgLyogTG9jYWxBdXRo
ZW50aWNhdGlvbi5mcmFtZXdvcmsgKi8sCiAJCQkJQTg1RDdBMkYwODc5RUJBOTAwNkE5MTcyIC8q
IFF1YXJ0ekNvcmUuZnJhbWV3b3JrICovLAogCQkJCTVGRTFEMjkxMTc4RkQxRjMwMDFBQTNDMyAv
KiBTZWN1cml0eS5mcmFtZXdvcmsgKi8sCisJCQkJMUMxOUU2QzMyNzQwNjZDQzAwNEIxN0IwIC8q
IFdlYkdQVS5mcmFtZXdvcmsgKi8sCiAJCQkpOwogCQkJbmFtZSA9IEZyYW1ld29ya3M7CiAJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwo=
</data>
<flag name="commit-queue"
          id="469152"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444191</attachid>
            <date>2021-11-14 13:13:20 -0800</date>
            <delta_ts>2021-11-14 13:31:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233106-20211114131319.patch</filename>
            <type>text/plain</type>
            <size>254359</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1NzkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzkwM2U0ZmVhYjQzYjAx
OTY2ZmQyOWJhN2E4NGQ3MzBjNmU3OGY0Zi4uYzc0ZmJlMWM0OWIwYzBkMmMyNTNjZTE2NzM5MTM1
NWY0MWM3YTljMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIxLTExLTE0ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkdQVV0g
W0NvY29hXSBDb25uZWN0IFdlYkNvcmUgJiBQQUwgdG8gV2ViR1BVLmZyYW1ld29yaworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzMTA2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGluayB3aXRoIFdlYkdQ
VS5mcmFtZXdvcmsuIFRoaXMgY2FuJ3QgYmUgbGFuZGVkIHlldCwgYmVjYXVzZSB3ZSBoYXZlbid0
IGZpbmlzaGVkCisgICAgICAgIGNvbmZpZ3VyaW5nIEFwcGxlJ3MgaW50ZXJuYWwgYnVpbGQgc3lz
dGVtIHlldC4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGVyZSBpcyBubyBiZWhh
dmlvciBjaGFuZ2UgKHlldCkuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisKIDIwMjEtMTEtMTQgIFRpbSBOZ3V5ZW4gIDxudGltQGFwcGxlLmNvbT4KIAog
ICAgICAgICBNb2RhbCBkaWFsb2dzIHNob3VsZCBtYWtlIHRoZSByb290IGVsZW1lbnQgdW5mb2N1
c2FibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvQ2hhbmdlTG9nCmluZGV4IDAyYTYyMmI3MjM2NTczZTAwYmE4Y2RhNTFiNDhj
ZjRmYjA2NzYyOWIuLmY1Yjk5MWVjNjVjZjcxYWE1OThjM2FlNDUzNGJkNmVkY2NkZmM3N2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvUEFML0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2NCBAQAorMjAyMS0xMS0xNCAgTXlsZXMgQy4g
TWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtXZWJHUFVdIFtDb2Nv
YV0gQ29ubmVjdCBXZWJDb3JlICYgUEFMIHRvIFdlYkdQVS5mcmFtZXdvcmsKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzEwNgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWRkcyBhbiBpbXBsZW1l
bnRhdGlvbiBvZiBXZWJHUFUncyB2aXJ0dWFsIGludGVyZmFjZXMgb24gdG9wIG9mIFdlYkdQVS5m
cmFtZXdvcmsuCisgICAgICAgIFRoYXQgZnJhbWV3b3JrJ3MgaGVhZGVycyBhbG1vc3QgZXhhY3Rs
eSBtYXRjaCB0aGUgV2ViR1BVIEFQSSwgc28gdGhlIGNvbm5lY3Rpb25zIGFyZQorICAgICAgICBt
b3N0bHkgbWVjaGFuaWNhbC4gVGhlcmUncyBqdXN0IGEgYnVuY2ggb2YgbWFyc2hhbGxpbmcgY29k
ZSB0byBjb252ZXJ0IGJldHdlZW4KKyAgICAgICAgZGVzY3JpcHRvciBhbmQgc3RydWN0cyBmcm9t
IFdlYkNvcmUncyBpbnRlcmZhY2UgdG8gV2ViR1BVLmZyYW1ld29yaydzCisgICAgICAgIGRlc2Ny
aXB0b3JzL3N0cnVjdHMuCisKKyAgICAgICAgVGhpcyB1c2VzIHRoZSBzYW1lICJjb252ZXJ0VG9C
YWNraW5nIiBjb252ZW50aW9uLCB3aGVyZSBmdW5jdGlvbnMgdGhhdCBjb252ZXJ0IGZyb20gdGhl
CisgICAgICAgIGhpZ2hlci1sZXZlbCBXZWJDb3JlIHR5cGVzIHRvIHRoZSBsb3dlci1sZXZlbCBX
ZWJHUFUuZnJhbWV3b3JrIHR5cGVzIGFyZSBuYW1lZAorICAgICAgICAiY29udmVydFRvQmFja2lu
ZygpIi4gVW5mb3J0dW5hdGVseSwgdGhlIFdlYkdQVSBBUEkgdGFrZXMgbWFueSBvZiB0aGVzZSBz
dHJ1Y3RzIGJ5CisgICAgICAgIG5vbi1jb25zdCByZWZlcmVuY2UsIGFuZCB0aGUgc3RydWN0cyBh
cmUgbmVzdGVkIGJ5IG5vbi1jb25zdCByZWZlcmVuY2UsIHdoaWNoIG1lYW5zIEkKKyAgICAgICAg
Y2FuJ3QganVzdCBoYXZlIHNpbXBsZSAxLWluLTEtb3V0IGNvbnZlcnRlciBmdW5jdGlvbnMgZm9y
IGV2ZXJ5IHN0cnVjdCwgc2luY2UgdGhlCisgICAgICAgIGlubmVyIHN0cnVjdHMgaGF2ZSB0byBi
ZSByZWZlcmVuY2VkIGJ5LXJlZmVyZW5jZSBhbmQgdGhlcmVmb3JlIGhhdmUgdG8gYmUgaW4tc2Nv
cGUuIFRoaXMKKyAgICAgICAgbWVhbnMgdGhhdCB0aGUgc2ltcGxlIGVudW0gYW5kIGZsYWdzIHR5
cGVzIHVzZSBjb252ZXJ0VG9CYWNraW5nKCksIGJ1dCBtb3N0IG9mIHRoZQorICAgICAgICBzdHJ1
Y3RzIGhhdmUgdG8gYmUgY29udmVydGVkIGF0IHRoZWlyIHVzZSBzaXRlLiBMdWNraWx5LCBhbG1v
c3QgYWxsIG9mIHRoZXNlIHN0cnVjdHMKKyAgICAgICAgb25seSBoYXZlIGEgc2luZ2xlIHVzZSBz
aXRlLCBzbyB0aGVyZSBpc24ndCBtdWNoIGR1cGxpY2F0aW9uLgorCisgICAgICAgIEZvciBub3cs
IHRoaXMgaW1wbGVtZW50YXRpb24gaXMgQ29jb2Etb25seSwgYmVjYXVzZSBpbiBvcmRlciBmb3Ig
dGhlc2UgY2FsbHMgdG8KKyAgICAgICAgV2ViR1BVLmZyYW1ld29yayB0byBiZSBsZWdhbCwgV2Vi
Q29yZSBoYXMgdG8gbGluayB3aXRoIGFuIGltcGxlbWVudGF0aW9uIG9mIHRob3NlCisgICAgICAg
IGZ1bmN0aW9ucy4gVGhlIENvY29hIHBvcnRzIGFyZSB0aGUgb25seSBvbmVzIHdoaWNoIGFjdHVh
bGx5IGhhdmUgYW4gaW1wbGVtZW50YXRpb24gb2YKKyAgICAgICAgdGhvc2UgZnVuY3Rpb25zLCBz
byB0aG9zZSBhcmUgdGhlIG9ubHkgcG9ydHMgd2hpY2ggY2FuIGFjdHVhbGx5IGNvbXBpbGUgdGhp
cyBjb2RlLiBJZgorICAgICAgICB0aGUgb3RoZXIgcG9ydHMgd2FudCB0byBsaW5rIHdpdGggRGF3
biBvciBXR1BVLCB0aGlzIGNvZGUgc2hvdWxkIGJlIChtb3N0bHkpIHVzYWJsZQorICAgICAgICBv
dXQtb2YtdGhlLWJveCBmb3IgdGhlbS4gSSBzYXkgIm1vc3RseSIgYmVjYXVzZSB0aGUgaGVhZGVy
IHRoYXQncyBzaGFyZWQgYmV0d2VlbiBEYXduLAorICAgICAgICBXR1BVLCBhbmQgV2ViR1BVLmZy
YW1ld29yayBpc24ndCBmaW5hbGl6ZWQgeWV0LiBBcyBzdWNoLCB0aGlzIGltcGxlbWVudGF0aW9u
IHJlbGllcyBvbgorICAgICAgICBmdW5jdGlvbnMgZnJvbSBXZWJHUFVFeHQuaCwgd2hpY2ggaXMg
YW4gYWRkaXRpb25hbCBoZWFkZXIgKHRoYXQgb25seSBleGlzdHMgaW4KKyAgICAgICAgV2ViR1BV
LmZyYW1ld29yaykgdGhhdCBhZGRzIHRoZSBtaXNzaW5nIHBpZWNlcy4KKworICAgICAgICAqIFBB
TC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJH
UFUvSW1wbC9XZWJHUFVBZGFwdGVySW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoUEFMOjpXZWJH
UFU6OmFkYXB0ZXJOYW1lKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpzdXBwb3J0ZWRGZWF0dXJl
cyk6CisgICAgICAgIChQQUw6OldlYkdQVTo6c3VwcG9ydGVkTGltaXRzKToKKyAgICAgICAgKFBB
TDo6V2ViR1BVOjppc0ZhbGxiYWNrQWRhcHRlcik6CisgICAgICAgIChQQUw6OldlYkdQVTo6QWRh
cHRlckltcGw6OkFkYXB0ZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpBZGFwdGVySW1w
bDo6fkFkYXB0ZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpyZXF1ZXN0RGV2aWNlQ2Fs
bGJhY2spOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkFkYXB0ZXJJbXBsOjpyZXF1ZXN0RGV2aWNl
KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpBZGFwdGVySW1wbDo6cmVxdWVzdERldmljZUNhbGxi
YWNrKToKKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQWRhcHRlcklt
cGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJp
bmRHcm91cEltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBBTDo6V2ViR1BVOjpCaW5kR3JvdXBJ
bXBsOjpCaW5kR3JvdXBJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpCaW5kR3JvdXBJbXBs
Ojp+QmluZEdyb3VwSW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6QmluZEdyb3VwSW1wbDo6
c2V0TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dl
YkdQVUJpbmRHcm91cEltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQ
VS9JbXBsL1dlYkdQVUJpbmRHcm91cExheW91dEltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBB
TDo6V2ViR1BVOjpCaW5kR3JvdXBMYXlvdXRJbXBsOjpCaW5kR3JvdXBMYXlvdXRJbXBsKToKKyAg
ICAgICAgKFBBTDo6V2ViR1BVOjpCaW5kR3JvdXBMYXlvdXRJbXBsOjp+QmluZEdyb3VwTGF5b3V0
SW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6QmluZEdyb3VwTGF5b3V0SW1wbDo6c2V0TGFi
ZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJp
bmRHcm91cExheW91dEltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQ
VS9JbXBsL1dlYkdQVUJ1ZmZlckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBBTDo6V2ViR1BV
OjpCdWZmZXJJbXBsOjpCdWZmZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpCdWZmZXJJ
bXBsOjp+QnVmZmVySW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6bWFwQ2FsbGJhY2spOgor
ICAgICAgICAoUEFMOjpXZWJHUFU6OkJ1ZmZlckltcGw6Om1hcEFzeW5jKToKKyAgICAgICAgKFBB
TDo6V2ViR1BVOjpCdWZmZXJJbXBsOjptYXBDYWxsYmFjayk6CisgICAgICAgIChQQUw6OldlYkdQ
VTo6QnVmZmVySW1wbDo6Z2V0TWFwcGVkUmFuZ2UpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkJ1
ZmZlckltcGw6OnVubWFwKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpCdWZmZXJJbXBsOjpkZXN0
cm95KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpCdWZmZXJJbXBsOjpzZXRMYWJlbEludGVybmFs
KToKKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQnVmZmVySW1wbC5o
OiBBZGRlZC4KKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tbWFu
ZEJ1ZmZlckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21tYW5kQnVm
ZmVySW1wbDo6Q29tbWFuZEJ1ZmZlckltcGwpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbW1h
bmRCdWZmZXJJbXBsOjp+Q29tbWFuZEJ1ZmZlckltcGwpOgorICAgICAgICAoUEFMOjpXZWJHUFU6
OkNvbW1hbmRCdWZmZXJJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAgICAgICAgKiBwYWwvZ3Jh
cGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwuaDogQWRkZWQuCisgICAg
ICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbW1hbmRFbmNvZGVySW1wbC5j
cHA6IEFkZGVkLgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbW1hbmRFbmNvZGVySW1wbDo6Q29t
bWFuZEVuY29kZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21tYW5kRW5jb2Rlcklt
cGw6On5Db21tYW5kRW5jb2RlckltcGwpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbW1hbmRF
bmNvZGVySW1wbDo6YmVnaW5SZW5kZXJQYXNzKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21t
YW5kRW5jb2RlckltcGw6OmJlZ2luQ29tcHV0ZVBhc3MpOgorICAgICAgICAoUEFMOjpXZWJHUFU6
OkNvbW1hbmRFbmNvZGVySW1wbDo6Y29weUJ1ZmZlclRvQnVmZmVyKToKKyAgICAgICAgKFBBTDo6
V2ViR1BVOjpDb21tYW5kRW5jb2RlckltcGw6OmNvcHlCdWZmZXJUb1RleHR1cmUpOgorICAgICAg
ICAoUEFMOjpXZWJHUFU6OkNvbW1hbmRFbmNvZGVySW1wbDo6Y29weVRleHR1cmVUb0J1ZmZlcik6
CisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tbWFuZEVuY29kZXJJbXBsOjpjb3B5VGV4dHVyZVRv
VGV4dHVyZSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tbWFuZEVuY29kZXJJbXBsOjpmaWxs
QnVmZmVyKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21tYW5kRW5jb2RlckltcGw6OnB1c2hE
ZWJ1Z0dyb3VwKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21tYW5kRW5jb2RlckltcGw6OnBv
cERlYnVnR3JvdXApOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbW1hbmRFbmNvZGVySW1wbDo6
aW5zZXJ0RGVidWdNYXJrZXIpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbW1hbmRFbmNvZGVy
SW1wbDo6d3JpdGVUaW1lc3RhbXApOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbW1hbmRFbmNv
ZGVySW1wbDo6cmVzb2x2ZVF1ZXJ5U2V0KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21tYW5k
RW5jb2RlckltcGw6OmZpbmlzaCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tbWFuZEVuY29k
ZXJJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BV
L0ltcGwvV2ViR1BVQ29tbWFuZEVuY29kZXJJbXBsLmg6IEFkZGVkLgorICAgICAgICAqIHBhbC9n
cmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb21wdXRlUGFzc0VuY29kZXJJbXBsLmNwcDogQWRk
ZWQuCisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6Q29tcHV0
ZVBhc3NFbmNvZGVySW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tcHV0ZVBhc3NFbmNv
ZGVySW1wbDo6fkNvbXB1dGVQYXNzRW5jb2RlckltcGwpOgorICAgICAgICAoUEFMOjpXZWJHUFU6
OkNvbXB1dGVQYXNzRW5jb2RlckltcGw6OnNldFBpcGVsaW5lKToKKyAgICAgICAgKFBBTDo6V2Vi
R1BVOjpDb21wdXRlUGFzc0VuY29kZXJJbXBsOjpkaXNwYXRjaCk6CisgICAgICAgIChQQUw6Oldl
YkdQVTo6Q29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6ZGlzcGF0Y2hJbmRpcmVjdCk6CisgICAgICAg
IChQQUw6OldlYkdQVTo6Q29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6YmVnaW5QaXBlbGluZVN0YXRp
c3RpY3NRdWVyeSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tcHV0ZVBhc3NFbmNvZGVySW1w
bDo6ZW5kUGlwZWxpbmVTdGF0aXN0aWNzUXVlcnkpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNv
bXB1dGVQYXNzRW5jb2RlckltcGw6OmVuZFBhc3MpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNv
bXB1dGVQYXNzRW5jb2RlckltcGw6OnNldEJpbmRHcm91cCk6CisgICAgICAgIChQQUw6OldlYkdQ
VTo6Q29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6cHVzaERlYnVnR3JvdXApOgorICAgICAgICAoUEFM
OjpXZWJHUFU6OkNvbXB1dGVQYXNzRW5jb2RlckltcGw6OnBvcERlYnVnR3JvdXApOgorICAgICAg
ICAoUEFMOjpXZWJHUFU6OkNvbXB1dGVQYXNzRW5jb2RlckltcGw6Omluc2VydERlYnVnTWFya2Vy
KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21wdXRlUGFzc0VuY29kZXJJbXBsOjpzZXRMYWJl
bEludGVybmFsKToKKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29t
cHV0ZVBhc3NFbmNvZGVySW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2Vi
R1BVL0ltcGwvV2ViR1BVQ29tcHV0ZVBpcGVsaW5lSW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAo
UEFMOjpXZWJHUFU6OkNvbXB1dGVQaXBlbGluZUltcGw6OkNvbXB1dGVQaXBlbGluZUltcGwpOgor
ICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbXB1dGVQaXBlbGluZUltcGw6On5Db21wdXRlUGlwZWxp
bmVJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21wdXRlUGlwZWxpbmVJbXBsOjpnZXRC
aW5kR3JvdXBMYXlvdXQpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbXB1dGVQaXBlbGluZUlt
cGw6OnNldExhYmVsSW50ZXJuYWwpOgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1w
bC9XZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBsLmg6IEFkZGVkLgorICAgICAgICAqIHBhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb252ZXJ0VG9CYWNraW5nLmNwcDogQWRkZWQuCisgICAg
ICAgIChQQUw6OldlYkdQVTo6Y29udmVydFRvQmFja2luZyk6CisgICAgICAgIChQQUw6OldlYkdQ
VTo6Y29udmVydEJ1ZmZlclVzYWdlRmxhZ3NUb0JhY2tpbmcpOgorICAgICAgICAoUEFMOjpXZWJH
UFU6OmNvbnZlcnRDb2xvcldyaXRlRmxhZ3NUb0JhY2tpbmcpOgorICAgICAgICAoUEFMOjpXZWJH
UFU6OmNvbnZlcnRNYXBNb2RlRmxhZ3NUb0JhY2tpbmcpOgorICAgICAgICAoUEFMOjpXZWJHUFU6
OmNvbnZlcnRTaGFkZXJTdGFnZUZsYWdzVG9CYWNraW5nKToKKyAgICAgICAgKFBBTDo6V2ViR1BV
Ojpjb252ZXJ0VGV4dHVyZVVzYWdlRmxhZ3NUb0JhY2tpbmcpOgorICAgICAgICAqIHBhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb252ZXJ0VG9CYWNraW5nLmg6IEFkZGVkLgorICAgICAg
ICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVEZXZpY2VJbXBsLmNwcDogQWRkZWQu
CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6RGV2aWNlSW1wbCk6CisgICAgICAg
IChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6fkRldmljZUltcGwpOgorICAgICAgICAoUEFMOjpX
ZWJHUFU6OkRldmljZUltcGw6OmRlc3Ryb3kpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmlj
ZUltcGw6OmNyZWF0ZUJ1ZmZlcik6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6
Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6Y3JlYXRl
U2FtcGxlcik6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6aW1wb3J0RXh0ZXJu
YWxUZXh0dXJlKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpEZXZpY2VJbXBsOjpjcmVhdGVCaW5k
R3JvdXBMYXlvdXQpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmljZUltcGw6OmNyZWF0ZVBp
cGVsaW5lTGF5b3V0KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpEZXZpY2VJbXBsOjpjcmVhdGVC
aW5kR3JvdXApOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmljZUltcGw6OmNyZWF0ZVNoYWRl
ck1vZHVsZSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6Y29udmVydFRvQmFja2luZyk6CisgICAg
ICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6Y3JlYXRlQ29tcHV0ZVBpcGVsaW5lKToKKyAg
ICAgICAgKFBBTDo6V2ViR1BVOjpEZXZpY2VJbXBsOjpjcmVhdGVSZW5kZXJQaXBlbGluZSk6Cisg
ICAgICAgIChQQUw6OldlYkdQVTo6Y3JlYXRlQ29tcHV0ZVBpcGVsaW5lQXN5bmNDYWxsYmFjayk6
CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6Y3JlYXRlQ29tcHV0ZVBpcGVsaW5l
QXN5bmMpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmljZUltcGw6OmNyZWF0ZUNvbXB1dGVQ
aXBlbGluZUFzeW5jQ2FsbGJhY2spOgorICAgICAgICAoUEFMOjpXZWJHUFU6OmNyZWF0ZVJlbmRl
clBpcGVsaW5lQXN5bmNDYWxsYmFjayk6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1w
bDo6Y3JlYXRlUmVuZGVyUGlwZWxpbmVBc3luYyk6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2
aWNlSW1wbDo6Y3JlYXRlUmVuZGVyUGlwZWxpbmVBc3luY0NhbGxiYWNrKToKKyAgICAgICAgKFBB
TDo6V2ViR1BVOjpEZXZpY2VJbXBsOjpjcmVhdGVDb21tYW5kRW5jb2Rlcik6CisgICAgICAgIChQ
QUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6Y3JlYXRlUmVuZGVyQnVuZGxlRW5jb2Rlcik6CisgICAg
ICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6Y3JlYXRlUXVlcnlTZXQpOgorICAgICAgICAo
UEFMOjpXZWJHUFU6OkRldmljZUltcGw6OnB1c2hFcnJvclNjb3BlKToKKyAgICAgICAgKFBBTDo6
V2ViR1BVOjpwb3BFcnJvclNjb3BlQ2FsbGJhY2spOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkRl
dmljZUltcGw6OnBvcEVycm9yU2NvcGUpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmljZUlt
cGw6OnBvcEVycm9yU2NvcGVDYWxsYmFjayk6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNl
SW1wbDo6c2V0TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9J
bXBsL1dlYkdQVURldmljZUltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dl
YkdQVS9JbXBsL1dlYkdQVUV4dGVybmFsVGV4dHVyZUltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFBBTDo6V2ViR1BVOjpFeHRlcm5hbFRleHR1cmVJbXBsOjpFeHRlcm5hbFRleHR1cmVJbXBsKToK
KyAgICAgICAgKFBBTDo6V2ViR1BVOjpFeHRlcm5hbFRleHR1cmVJbXBsOjp+RXh0ZXJuYWxUZXh0
dXJlSW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6RXh0ZXJuYWxUZXh0dXJlSW1wbDo6c2V0
TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQ
VUV4dGVybmFsVGV4dHVyZUltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dl
YkdQVS9JbXBsL1dlYkdQVUltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBBTDo6V2ViR1BVOjpH
UFVJbXBsOjpHUFVJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpHUFVJbXBsOjp+R1BVSW1w
bCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6cmVxdWVzdEFkYXB0ZXJDYWxsYmFjayk6CisgICAg
ICAgIChQQUw6OldlYkdQVTo6R1BVSW1wbDo6cmVxdWVzdEFkYXB0ZXIpOgorICAgICAgICAoUEFM
OjpXZWJHUFU6OkdQVUltcGw6OnJlcXVlc3RBZGFwdGVyQ2FsbGJhY2spOgorICAgICAgICAqIHBh
bC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVJbXBsLmg6IEFkZGVkLgorICAgICAgICAqIHBh
bC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVQaXBlbGluZUxheW91dEltcGwuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFBBTDo6V2ViR1BVOjpQaXBlbGluZUxheW91dEltcGw6OlBpcGVsaW5lTGF5
b3V0SW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UGlwZWxpbmVMYXlvdXRJbXBsOjp+UGlw
ZWxpbmVMYXlvdXRJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpQaXBlbGluZUxheW91dElt
cGw6OnNldExhYmVsSW50ZXJuYWwpOgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1w
bC9XZWJHUFVQaXBlbGluZUxheW91dEltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBo
aWNzL1dlYkdQVS9JbXBsL1dlYkdQVVF1ZXJ5U2V0SW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAo
UEFMOjpXZWJHUFU6OlF1ZXJ5U2V0SW1wbDo6UXVlcnlTZXRJbXBsKToKKyAgICAgICAgKFBBTDo6
V2ViR1BVOjpRdWVyeVNldEltcGw6On5RdWVyeVNldEltcGwpOgorICAgICAgICAoUEFMOjpXZWJH
UFU6OlF1ZXJ5U2V0SW1wbDo6ZGVzdHJveSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UXVlcnlT
ZXRJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BV
L0ltcGwvV2ViR1BVUXVlcnlTZXRJbXBsLmg6IEFkZGVkLgorICAgICAgICAqIHBhbC9ncmFwaGlj
cy9XZWJHUFUvSW1wbC9XZWJHUFVRdWV1ZUltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBBTDo6
V2ViR1BVOjpRdWV1ZUltcGw6OlF1ZXVlSW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UXVl
dWVJbXBsOjp+UXVldWVJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpRdWV1ZUltcGw6OnN1
Ym1pdCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6b25TdWJtaXR0ZWRXb3JrRG9uZUNhbGxiYWNr
KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpRdWV1ZUltcGw6Om9uU3VibWl0dGVkV29ya0RvbmUp
OgorICAgICAgICAoUEFMOjpXZWJHUFU6OlF1ZXVlSW1wbDo6b25TdWJtaXR0ZWRXb3JrRG9uZUNh
bGxiYWNrKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpRdWV1ZUltcGw6OndyaXRlQnVmZmVyKToK
KyAgICAgICAgKFBBTDo6V2ViR1BVOjpRdWV1ZUltcGw6OndyaXRlVGV4dHVyZSk6CisgICAgICAg
IChQQUw6OldlYkdQVTo6UXVldWVJbXBsOjpjb3B5RXh0ZXJuYWxJbWFnZVRvVGV4dHVyZSk6Cisg
ICAgICAgIChQQUw6OldlYkdQVTo6UXVldWVJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAgICAg
ICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUXVldWVJbXBsLmg6IEFkZGVkLgor
ICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJCdW5kbGVFbmNv
ZGVySW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlckJ1bmRsZUVu
Y29kZXJJbXBsOjpSZW5kZXJCdW5kbGVFbmNvZGVySW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQ
VTo6UmVuZGVyQnVuZGxlRW5jb2RlckltcGw6On5SZW5kZXJCdW5kbGVFbmNvZGVySW1wbCk6Cisg
ICAgICAgIChQQUw6OldlYkdQVTo6UmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OnNldFBpcGVsaW5l
KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6c2V0SW5k
ZXhCdWZmZXIpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlckJ1bmRsZUVuY29kZXJJbXBs
OjpzZXRWZXJ0ZXhCdWZmZXIpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlckJ1bmRsZUVu
Y29kZXJJbXBsOjpkcmF3KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVFbmNv
ZGVySW1wbDo6ZHJhd0luZGV4ZWQpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlckJ1bmRs
ZUVuY29kZXJJbXBsOjpkcmF3SW5kaXJlY3QpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRl
ckJ1bmRsZUVuY29kZXJJbXBsOjpkcmF3SW5kZXhlZEluZGlyZWN0KToKKyAgICAgICAgKFBBTDo6
V2ViR1BVOjpSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6c2V0QmluZEdyb3VwKToKKyAgICAgICAg
KFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6cHVzaERlYnVnR3JvdXApOgor
ICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlckJ1bmRsZUVuY29kZXJJbXBsOjpwb3BEZWJ1Z0dy
b3VwKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6aW5z
ZXJ0RGVidWdNYXJrZXIpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlckJ1bmRsZUVuY29k
ZXJJbXBsOjpmaW5pc2gpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlckJ1bmRsZUVuY29k
ZXJJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BV
L0ltcGwvV2ViR1BVUmVuZGVyQnVuZGxlRW5jb2RlckltcGwuaDogQWRkZWQuCisgICAgICAgICog
cGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlckJ1bmRsZUltcGwuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVJbXBsOjpSZW5kZXJCdW5kbGVJ
bXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVJbXBsOjp+UmVuZGVyQnVu
ZGxlSW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UmVuZGVyQnVuZGxlSW1wbDo6c2V0TGFi
ZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJl
bmRlckJ1bmRsZUltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9J
bXBsL1dlYkdQVVJlbmRlclBhc3NFbmNvZGVySW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoUEFM
OjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6UmVuZGVyUGFzc0VuY29kZXJJbXBsKToK
KyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6On5SZW5kZXJQYXNz
RW5jb2RlckltcGwpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1w
bDo6c2V0UGlwZWxpbmUpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVy
SW1wbDo6c2V0SW5kZXhCdWZmZXIpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NF
bmNvZGVySW1wbDo6c2V0VmVydGV4QnVmZmVyKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5k
ZXJQYXNzRW5jb2RlckltcGw6OmRyYXcpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBh
c3NFbmNvZGVySW1wbDo6ZHJhd0luZGV4ZWQpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRl
clBhc3NFbmNvZGVySW1wbDo6ZHJhd0luZGlyZWN0KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpS
ZW5kZXJQYXNzRW5jb2RlckltcGw6OmRyYXdJbmRleGVkSW5kaXJlY3QpOgorICAgICAgICAoUEFM
OjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6c2V0QmluZEdyb3VwKToKKyAgICAgICAg
KFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6OnB1c2hEZWJ1Z0dyb3VwKToKKyAg
ICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6OnBvcERlYnVnR3JvdXAp
OgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6aW5zZXJ0RGVi
dWdNYXJrZXIpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6
c2V0Vmlld3BvcnQpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1w
bDo6c2V0U2Npc3NvclJlY3QpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNv
ZGVySW1wbDo6c2V0QmxlbmRDb25zdGFudCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UmVuZGVy
UGFzc0VuY29kZXJJbXBsOjpzZXRTdGVuY2lsUmVmZXJlbmNlKToKKyAgICAgICAgKFBBTDo6V2Vi
R1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6OmJlZ2luT2NjbHVzaW9uUXVlcnkpOgorICAgICAg
ICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6ZW5kT2NjbHVzaW9uUXVlcnkp
OgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6YmVnaW5QaXBl
bGluZVN0YXRpc3RpY3NRdWVyeSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UmVuZGVyUGFzc0Vu
Y29kZXJJbXBsOjplbmRQaXBlbGluZVN0YXRpc3RpY3NRdWVyeSk6CisgICAgICAgIChQQUw6Oldl
YkdQVTo6UmVuZGVyUGFzc0VuY29kZXJJbXBsOjpleGVjdXRlQnVuZGxlcyk6CisgICAgICAgIChQ
QUw6OldlYkdQVTo6UmVuZGVyUGFzc0VuY29kZXJJbXBsOjplbmRQYXNzKToKKyAgICAgICAgKFBB
TDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6OnNldExhYmVsSW50ZXJuYWwpOgorICAg
ICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJQYXNzRW5jb2Rlcklt
cGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJl
bmRlclBpcGVsaW5lSW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRl
clBpcGVsaW5lSW1wbDo6UmVuZGVyUGlwZWxpbmVJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BV
OjpSZW5kZXJQaXBlbGluZUltcGw6On5SZW5kZXJQaXBlbGluZUltcGwpOgorICAgICAgICAoUEFM
OjpXZWJHUFU6OlJlbmRlclBpcGVsaW5lSW1wbDo6Z2V0QmluZEdyb3VwTGF5b3V0KToKKyAgICAg
ICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQaXBlbGluZUltcGw6OnNldExhYmVsSW50ZXJuYWwpOgor
ICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJQaXBlbGluZUlt
cGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVNh
bXBsZXJJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChQQUw6OldlYkdQVTo6U2FtcGxlckltcGw6
OlNhbXBsZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpTYW1wbGVySW1wbDo6flNhbXBs
ZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpTYW1wbGVySW1wbDo6c2V0TGFiZWxJbnRl
cm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVNhbXBsZXJJ
bXBsLmg6IEFkZGVkLgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVT
aGFkZXJNb2R1bGVJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChQQUw6OldlYkdQVTo6U2hhZGVy
TW9kdWxlSW1wbDo6U2hhZGVyTW9kdWxlSW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6U2hh
ZGVyTW9kdWxlSW1wbDo6flNoYWRlck1vZHVsZUltcGwpOgorICAgICAgICAoUEFMOjpXZWJHUFU6
OlNoYWRlck1vZHVsZUltcGw6OmNvbXBpbGF0aW9uSW5mbyk6CisgICAgICAgIChQQUw6OldlYkdQ
VTo6U2hhZGVyTW9kdWxlSW1wbDo6c2V0TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dy
YXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVNoYWRlck1vZHVsZUltcGwuaDogQWRkZWQuCisgICAg
ICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVRleHR1cmVJbXBsLmNwcDogQWRk
ZWQuCisgICAgICAgIChQQUw6OldlYkdQVTo6VGV4dHVyZUltcGw6OlRleHR1cmVJbXBsKToKKyAg
ICAgICAgKFBBTDo6V2ViR1BVOjpUZXh0dXJlSW1wbDo6flRleHR1cmVJbXBsKToKKyAgICAgICAg
KFBBTDo6V2ViR1BVOjpUZXh0dXJlSW1wbDo6Y3JlYXRlVmlldyBjb25zdCk6CisgICAgICAgIChQ
QUw6OldlYkdQVTo6VGV4dHVyZUltcGw6OmRlc3Ryb3kpOgorICAgICAgICAoUEFMOjpXZWJHUFU6
OlRleHR1cmVJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAgICAgICAgKiBwYWwvZ3JhcGhpY3Mv
V2ViR1BVL0ltcGwvV2ViR1BVVGV4dHVyZUltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dy
YXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVRleHR1cmVWaWV3SW1wbC5jcHA6IEFkZGVkLgorICAg
ICAgICAoUEFMOjpXZWJHUFU6OlRleHR1cmVWaWV3SW1wbDo6VGV4dHVyZVZpZXdJbXBsKToKKyAg
ICAgICAgKFBBTDo6V2ViR1BVOjpUZXh0dXJlVmlld0ltcGw6On5UZXh0dXJlVmlld0ltcGwpOgor
ICAgICAgICAoUEFMOjpXZWJHUFU6OlRleHR1cmVWaWV3SW1wbDo6c2V0TGFiZWxJbnRlcm5hbCk6
CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVRleHR1cmVWaWV3SW1w
bC5oOiBBZGRlZC4KKwogMjAyMS0xMS0xNCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFw
cGxlLmNvbT4KIAogICAgICAgICBBdHRhY2ggSU9ISURFdmVudCB0aW1lc3RhbXBzIHRvIHdoZWVs
IGV2ZW50cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IGUxODU0MjVlMDJlYzY2OTA3NDRlZDEyM2UwOGIyM2UyZTUwNDIxYjIuLjUy
YWI3M2JjYjA0ZWRhOWNiZGZhZTE5OWY2YTliODFjZWExNWVjZTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1BBTC9QQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwOSw2ICsxMDks
MjkgQEAKIAkJMUMwOUQwNTMxRTMxQzQ0MTAwNzI1RjE4IC8qIENyeXB0b0RpZ2VzdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMwOUQwNTIxRTMxQzQ0
MTAwNzI1RjE4IC8qIENyeXB0b0RpZ2VzdC5oICovOyB9OwogCQkxQzA5RDA1NjFFMzFDNDY1MDA3
MjVGMTggLyogQ3J5cHRvRGlnZXN0Q29tbW9uQ3J5cHRvLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMDlEMDU1MUUzMUM0NjUwMDcyNUYxOCAvKiBD
cnlwdG9EaWdlc3RDb21tb25DcnlwdG8uY3BwICovOyB9OwogCQkxQzA5RDA1ODFFMzFDNTdFMDA3
MjVGMTggLyogY29uZmlnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQzA5RDA1NzFFMzFDNTdFMDA3MjVGMTggLyogY29uZmlnLmggKi87IH07CisJCTFD
MTlFNjQ0MjczRjNFNUQwMDRCMTdCMCAvKiBXZWJHUFVJbXBsLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNjQyMjczRjNFNUQwMDRCMTdCMCAv
KiBXZWJHUFVJbXBsLmNwcCAqLzsgfTsKKwkJMUMxOUU2NDgyNzNGM0Y4MjAwNEIxN0IwIC8qIFdl
YkdQVUFkYXB0ZXJJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFDMTlFNjQ2MjczRjNGODIwMDRCMTdCMCAvKiBXZWJHUFVBZGFwdGVySW1wbC5j
cHAgKi87IH07CisJCTFDMTlFNjRDMjczRjNGOTkwMDRCMTdCMCAvKiBXZWJHUFVCaW5kR3JvdXBJ
bXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFD
MTlFNjRBMjczRjNGOTkwMDRCMTdCMCAvKiBXZWJHUFVCaW5kR3JvdXBJbXBsLmNwcCAqLzsgfTsK
KwkJMUMxOUU2NTAyNzNGM0ZBNTAwNEIxN0IwIC8qIFdlYkdQVUJpbmRHcm91cExheW91dEltcGwu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMxOUU2
NEUyNzNGM0ZBNTAwNEIxN0IwIC8qIFdlYkdQVUJpbmRHcm91cExheW91dEltcGwuY3BwICovOyB9
OworCQkxQzE5RTY1NDI3M0YzRkIxMDA0QjE3QjAgLyogV2ViR1BVQnVmZmVySW1wbC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5RTY1MjI3M0Yz
RkIxMDA0QjE3QjAgLyogV2ViR1BVQnVmZmVySW1wbC5jcHAgKi87IH07CisJCTFDMTlFNjU4Mjcz
RjNGQzAwMDRCMTdCMCAvKiBXZWJHUFVDb21tYW5kQnVmZmVySW1wbC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5RTY1NjI3M0YzRkMwMDA0QjE3
QjAgLyogV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwuY3BwICovOyB9OworCQkxQzE5RTY1QzI3M0Yz
RkQyMDA0QjE3QjAgLyogV2ViR1BVQ29tbWFuZEVuY29kZXJJbXBsLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNjVBMjczRjNGRDIwMDRCMTdC
MCAvKiBXZWJHUFVDb21tYW5kRW5jb2RlckltcGwuY3BwICovOyB9OworCQkxQzE5RTY2MDI3M0Yz
RkUyMDA0QjE3QjAgLyogV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5RTY1RTI3M0YzRkUyMDA0
QjE3QjAgLyogV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5jcHAgKi87IH07CisJCTFDMTlF
NjY0MjczRjNGRUUwMDRCMTdCMCAvKiBXZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBsLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNjYyMjczRjNG
RUUwMDRCMTdCMCAvKiBXZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBsLmNwcCAqLzsgfTsKKwkJMUMx
OUU2NjgyNzNGM0ZGQTAwNEIxN0IwIC8qIFdlYkdQVURldmljZUltcGwuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMxOUU2NjYyNzNGM0ZGQTAwNEIx
N0IwIC8qIFdlYkdQVURldmljZUltcGwuY3BwICovOyB9OworCQkxQzE5RTY3MDI3M0Y0MDE0MDA0
QjE3QjAgLyogV2ViR1BVUGlwZWxpbmVMYXlvdXRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNjZFMjczRjQwMTQwMDRCMTdCMCAvKiBX
ZWJHUFVQaXBlbGluZUxheW91dEltcGwuY3BwICovOyB9OworCQkxQzE5RTY3NDI3M0Y0MDIwMDA0
QjE3QjAgLyogV2ViR1BVUXVlcnlTZXRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNjcyMjczRjQwMjAwMDRCMTdCMCAvKiBXZWJHUFVR
dWVyeVNldEltcGwuY3BwICovOyB9OworCQkxQzE5RTY3ODI3M0Y0MDJCMDA0QjE3QjAgLyogV2Vi
R1BVUXVldWVJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFDMTlFNjc2MjczRjQwMkIwMDRCMTdCMCAvKiBXZWJHUFVRdWV1ZUltcGwuY3BwICov
OyB9OworCQkxQzE5RTY3QzI3M0Y0MDNBMDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyQnVuZGxlSW1w
bC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5
RTY3QTI3M0Y0MDNBMDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyQnVuZGxlSW1wbC5jcHAgKi87IH07
CisJCTFDMTlFNjgwMjczRjQwNDQwMDRCMTdCMCAvKiBXZWJHUFVSZW5kZXJCdW5kbGVFbmNvZGVy
SW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QzE5RTY3RTI3M0Y0MDQ0MDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyQnVuZGxlRW5jb2RlckltcGwu
Y3BwICovOyB9OworCQkxQzE5RTY4NDI3M0Y0MDUwMDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyUGFz
c0VuY29kZXJJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFDMTlFNjgyMjczRjQwNTAwMDRCMTdCMCAvKiBXZWJHUFVSZW5kZXJQYXNzRW5jb2Rl
ckltcGwuY3BwICovOyB9OworCQkxQzE5RTY4ODI3M0Y0MDVEMDA0QjE3QjAgLyogV2ViR1BVUmVu
ZGVyUGlwZWxpbmVJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFDMTlFNjg2MjczRjQwNUQwMDRCMTdCMCAvKiBXZWJHUFVSZW5kZXJQaXBlbGlu
ZUltcGwuY3BwICovOyB9OworCQkxQzE5RTY4QzI3M0Y0MDY5MDA0QjE3QjAgLyogV2ViR1BVU2Ft
cGxlckltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUMxOUU2OEEyNzNGNDA2OTAwNEIxN0IwIC8qIFdlYkdQVVNhbXBsZXJJbXBsLmNwcCAqLzsg
fTsKKwkJMUMxOUU2OTAyNzNGNDA3MjAwNEIxN0IwIC8qIFdlYkdQVVNoYWRlck1vZHVsZUltcGwu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMxOUU2
OEUyNzNGNDA3MTAwNEIxN0IwIC8qIFdlYkdQVVNoYWRlck1vZHVsZUltcGwuY3BwICovOyB9Owor
CQkxQzE5RTY5NDI3M0Y0MDdEMDA0QjE3QjAgLyogV2ViR1BVVGV4dHVyZUltcGwuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMxOUU2OTIyNzNGNDA3
RDAwNEIxN0IwIC8qIFdlYkdQVVRleHR1cmVJbXBsLmNwcCAqLzsgfTsKKwkJMUMxOUU2OTgyNzNG
NDA4QjAwNEIxN0IwIC8qIFdlYkdQVVRleHR1cmVWaWV3SW1wbC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5RTY5NjI3M0Y0MDhCMDA0QjE3QjAg
LyogV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmNwcCAqLzsgfTsKKwkJMUMxOUU2QjUyNzNGODVBRjAw
NEIxN0IwIC8qIFdlYkdQVUNvbnZlcnRUb0JhY2tpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMxOUU2QjQyNzNGODVBRjAwNEIxN0IwIC8qIFdl
YkdQVUNvbnZlcnRUb0JhY2tpbmcuY3BwICovOyB9OworCQkxQzE5RTZCQTI3NDA1RTMyMDA0QjE3
QjAgLyogV2ViR1BVRXh0ZXJuYWxUZXh0dXJlSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5RTZCOTI3NDA1RTMyMDA0QjE3QjAgLyogV2Vi
R1BVRXh0ZXJuYWxUZXh0dXJlSW1wbC5jcHAgKi87IH07CiAJCTFDNDg3NkQ4MUY4RDdGNEUwMEND
RUVCRCAvKiBMb2dnaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFDNDg3NkQ2MUY4RDdGNEUwMENDRUVCRCAvKiBMb2dnaW5nLmNwcCAqLzsgfTsK
IAkJMUM0ODc2RDkxRjhEN0Y0RTAwQ0NFRUJEIC8qIExvZ2dpbmcuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDNDg3NkQ3MUY4RDdGNEUwMENDRUVCRCAv
KiBMb2dnaW5nLmggKi87IH07CiAJCTFDNzdDOEM5MjVENzk3MjAwMDYzNUUwQyAvKiBDb3JlVGV4
dFNvZnRMaW5rLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFDNzdDOEM3MjVENzk3MjAwMDYzNUUwQyAvKiBDb3JlVGV4dFNvZnRMaW5rLmNwcCAqLzsg
fTsKQEAgLTQ1OSw2ICs0ODIsNTIgQEAKIAkJMUMwOUQwNUQxRTMxQzc3QTAwNzI1RjE4IC8qIFBB
TC54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBQQUwueGNjb25maWc7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDMDlEMDYyMUUzMUVDMjgwMDcyNUYxOCAv
KiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0g
RGVidWdSZWxlYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzA5
RDA2MzFFMzFFQzMxMDA3MjVGMTggLyogQmFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNj
b25maWc7IHBhdGggPSBCYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkxQzE5RTY0MjI3M0YzRTVEMDA0QjE3QjAgLyogV2ViR1BVSW1wbC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXZWJHUFVJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMx
OUU2NDYyNzNGM0Y4MjAwNEIxN0IwIC8qIFdlYkdQVUFkYXB0ZXJJbXBsLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdlYkdQVUFkYXB0ZXJJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUMxOUU2NEEyNzNGM0Y5OTAwNEIxN0IwIC8qIFdlYkdQVUJpbmRHcm91cEltcGwuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR1BVQmluZEdyb3VwSW1wbC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjRFMjczRjNGQTUwMDRCMTdCMCAvKiBXZWJHUFVCaW5k
R3JvdXBMYXlvdXRJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQVUJpbmRHcm91cExh
eW91dEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY1MjI3M0Yz
RkIxMDA0QjE3QjAgLyogV2ViR1BVQnVmZmVySW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
ZWJHUFVCdWZmZXJJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2
NTYyNzNGM0ZDMDAwNEIxN0IwIC8qIFdlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMUMxOUU2NUEyNzNGM0ZEMjAwNEIxN0IwIC8qIFdlYkdQVUNvbW1hbmRF
bmNvZGVySW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHUFVDb21tYW5kRW5jb2Rlcklt
cGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY1RTI3M0YzRkUyMDA0
QjE3QjAgLyogV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXZWJHUFVDb21wdXRlUGFzc0VuY29kZXJJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMUMxOUU2NjIyNzNGM0ZFRTAwNEIxN0IwIC8qIFdlYkdQVUNvbXB1dGVQaXBl
bGluZUltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR1BVQ29tcHV0ZVBpcGVsaW5lSW1w
bC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjY2MjczRjNGRkEwMDRC
MTdCMCAvKiBXZWJHUFVEZXZpY2VJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQVURl
dmljZUltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY2RTI3M0Y0
MDE0MDA0QjE3QjAgLyogV2ViR1BVUGlwZWxpbmVMYXlvdXRJbXBsLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTFDMTlFNjcyMjczRjQwMjAwMDRCMTdCMCAvKiBXZWJHUFVRdWVyeVNldEltcGwu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR1BVUXVlcnlTZXRJbXBsLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2NzYyNzNGNDAyQjAwNEIxN0IwIC8qIFdlYkdQVVF1
ZXVlSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHUFVRdWV1ZUltcGwuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY3QTI3M0Y0MDNBMDA0QjE3QjAgLyogV2Vi
R1BVUmVuZGVyQnVuZGxlSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHUFVSZW5kZXJC
dW5kbGVJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2N0UyNzNG
NDA0NDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJbXBsLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJbXBsLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2ODIyNzNGNDA1MDAwNEIxN0IwIC8qIFdlYkdQVVJl
bmRlclBhc3NFbmNvZGVySW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHUFVSZW5kZXJQ
YXNzRW5jb2RlckltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY4
NjI3M0Y0MDVEMDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyUGlwZWxpbmVJbXBsLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTFDMTlFNjhBMjczRjQwNjkwMDRCMTdCMCAvKiBXZWJHUFVTYW1wbGVy
SW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHUFVTYW1wbGVySW1wbC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjhFMjczRjQwNzEwMDRCMTdCMCAvKiBXZWJH
UFVTaGFkZXJNb2R1bGVJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQVVNoYWRlck1v
ZHVsZUltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY5MjI3M0Y0
MDdEMDA0QjE3QjAgLyogV2ViR1BVVGV4dHVyZUltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViR1BVVGV4dHVyZUltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5
RTY5NjI3M0Y0MDhCMDA0QjE3QjAgLyogV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdlYkdQVVRleHR1cmVWaWV3SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTFDMTlFNjlBMjczRjQyNDIwMDRCMTdCMCAvKiBXZWJHUFVSZW5kZXJCdW5k
bGVFbmNvZGVySW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVSZW5kZXJCdW5kbGVFbmNvZGVy
SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY5QjI3M0Y0MjQyMDA0
QjE3QjAgLyogV2ViR1BVSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVJbXBsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjlDMjczRjQyNDMwMDRCMTdCMCAvKiBXZWJH
UFVCaW5kR3JvdXBMYXlvdXRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVUJpbmRHcm91cExh
eW91dEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2OUQyNzNGNDI0
MzAwNEIxN0IwIC8qIFdlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJHUFVQaXBlbGluZUxheW91dEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MUMxOUU2OUUyNzNGNDI0MzAwNEIxN0IwIC8qIFdlYkdQVUNvbXB1dGVQYXNzRW5jb2RlckltcGwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY5RjI3M0Y0MjQzMDA0QjE3QjAgLyogV2ViR1BV
VGV4dHVyZUltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR1BVVGV4dHVyZUltcGwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2QTEyNzNGNDI0MzAwNEIxN0IwIC8qIFdlYkdQ
VUJpbmRHcm91cEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR1BVQmluZEdyb3VwSW1wbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTZBMjI3M0Y0MjQzMDA0QjE3QjAgLyog
V2ViR1BVQnVmZmVySW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVCdWZmZXJJbXBsLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNkEzMjczRjQyNDQwMDRCMTdCMCAvKiBX
ZWJHUFVSZW5kZXJQYXNzRW5jb2RlckltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR1BVUmVuZGVy
UGFzc0VuY29kZXJJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNkE0
MjczRjQyNDQwMDRCMTdCMCAvKiBXZWJHUFVDb21tYW5kQnVmZmVySW1wbC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJHUFVDb21tYW5kQnVmZmVySW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxQzE5RTZBNTI3M0Y0MjQ0MDA0QjE3QjAgLyogV2ViR1BVUXVldWVJbXBsLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkdQVVF1ZXVlSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkxQzE5RTZBNjI3M0Y0MjQ0MDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyQnVuZGxlSW1wbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJHUFVSZW5kZXJCdW5kbGVJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTFDMTlFNkE3MjczRjQyNDQwMDRCMTdCMCAvKiBXZWJHUFVTYW1wbGVySW1w
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVTYW1wbGVySW1wbC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxQzE5RTZBODI3M0Y0MjQ0MDA0QjE3QjAgLyogV2ViR1BVUXVlcnlTZXRJ
bXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVVF1ZXJ5U2V0SW1wbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkxQzE5RTZBOTI3M0Y0MjQ0MDA0QjE3QjAgLyogV2ViR1BVUmVuZGVy
UGlwZWxpbmVJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTZBQTI3M0Y0MjQ1MDA0QjE3QjAg
LyogV2ViR1BVU2hhZGVyTW9kdWxlSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVTaGFkZXJN
b2R1bGVJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNkFCMjczRjQy
NDUwMDRCMTdCMCAvKiBXZWJHUFVDb21tYW5kRW5jb2RlckltcGwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2ViR1BVQ29tbWFuZEVuY29kZXJJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTFDMTlFNkFDMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJHUFVUZXh0dXJlVmlld0ltcGwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTFDMTlFNkFEMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJHUFVEZXZpY2VJbXBsLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYkdQVURldmljZUltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMUMxOUU2QUUyNzNGNDI0NTAwNEIxN0IwIC8qIFdlYkdQVUFkYXB0ZXJJbXBsLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYkdQVUFkYXB0ZXJJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTFDMTlFNkFGMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJHUFVDb21wdXRlUGlwZWxp
bmVJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVUNvbXB1dGVQaXBlbGluZUltcGwuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2QjQyNzNGODVBRjAwNEIxN0IwIC8qIFdl
YkdQVUNvbnZlcnRUb0JhY2tpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR1BVQ29udmVy
dFRvQmFja2luZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNkI2Mjcz
Rjg1QkMwMDRCMTdCMCAvKiBXZWJHUFVDb252ZXJ0VG9CYWNraW5nLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYkdQVUNvbnZlcnRUb0JhY2tpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MUMxOUU2QjkyNzQwNUUzMjAwNEIxN0IwIC8qIFdlYkdQVUV4dGVybmFsVGV4dHVyZUltcGwuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR1BVRXh0ZXJuYWxUZXh0dXJlSW1wbC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNkJCMjc0MDVFM0MwMDRCMTdCMCAvKiBXZWJH
UFVFeHRlcm5hbFRleHR1cmVJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVUV4dGVybmFsVGV4
dHVyZUltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM0ODc2RDYxRjhEN0Y0
RTAwQ0NFRUJEIC8qIExvZ2dpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTG9nZ2luZy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDNDg3NkQ3MUY4RDdGNEUwMENDRUVCRCAv
KiBMb2dnaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvZ2dpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUM2N0NFQTIxRTMyRUUyNjAwRjgwRjJFIC8qIFZlcnNpb24ueGNjb25maWcg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gVmVyc2lvbi54Y2NvbmZpZzsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMDAsNiArMTA2OSw1OSBAQAogCQkJcGF0aCA9IENv
bmZpZ3VyYXRpb25zOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJMUMxOUU2
NDEyNzNGM0Q3NTAwNEIxN0IwIC8qIEltcGwgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJ
CWNoaWxkcmVuID0gKAorCQkJCTFDMTlFNjQ2MjczRjNGODIwMDRCMTdCMCAvKiBXZWJHUFVBZGFw
dGVySW1wbC5jcHAgKi8sCisJCQkJMUMxOUU2QUUyNzNGNDI0NTAwNEIxN0IwIC8qIFdlYkdQVUFk
YXB0ZXJJbXBsLmggKi8sCisJCQkJMUMxOUU2NEEyNzNGM0Y5OTAwNEIxN0IwIC8qIFdlYkdQVUJp
bmRHcm91cEltcGwuY3BwICovLAorCQkJCTFDMTlFNkExMjczRjQyNDMwMDRCMTdCMCAvKiBXZWJH
UFVCaW5kR3JvdXBJbXBsLmggKi8sCisJCQkJMUMxOUU2NEUyNzNGM0ZBNTAwNEIxN0IwIC8qIFdl
YkdQVUJpbmRHcm91cExheW91dEltcGwuY3BwICovLAorCQkJCTFDMTlFNjlDMjczRjQyNDMwMDRC
MTdCMCAvKiBXZWJHUFVCaW5kR3JvdXBMYXlvdXRJbXBsLmggKi8sCisJCQkJMUMxOUU2NTIyNzNG
M0ZCMTAwNEIxN0IwIC8qIFdlYkdQVUJ1ZmZlckltcGwuY3BwICovLAorCQkJCTFDMTlFNkEyMjcz
RjQyNDMwMDRCMTdCMCAvKiBXZWJHUFVCdWZmZXJJbXBsLmggKi8sCisJCQkJMUMxOUU2NTYyNzNG
M0ZDMDAwNEIxN0IwIC8qIFdlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmNwcCAqLywKKwkJCQkxQzE5
RTZBNDI3M0Y0MjQ0MDA0QjE3QjAgLyogV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwuaCAqLywKKwkJ
CQkxQzE5RTY1QTI3M0YzRkQyMDA0QjE3QjAgLyogV2ViR1BVQ29tbWFuZEVuY29kZXJJbXBsLmNw
cCAqLywKKwkJCQkxQzE5RTZBQjI3M0Y0MjQ1MDA0QjE3QjAgLyogV2ViR1BVQ29tbWFuZEVuY29k
ZXJJbXBsLmggKi8sCisJCQkJMUMxOUU2NUUyNzNGM0ZFMjAwNEIxN0IwIC8qIFdlYkdQVUNvbXB1
dGVQYXNzRW5jb2RlckltcGwuY3BwICovLAorCQkJCTFDMTlFNjlFMjczRjQyNDMwMDRCMTdCMCAv
KiBXZWJHUFVDb21wdXRlUGFzc0VuY29kZXJJbXBsLmggKi8sCisJCQkJMUMxOUU2NjIyNzNGM0ZF
RTAwNEIxN0IwIC8qIFdlYkdQVUNvbXB1dGVQaXBlbGluZUltcGwuY3BwICovLAorCQkJCTFDMTlF
NkFGMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBsLmggKi8sCisJ
CQkJMUMxOUU2QjQyNzNGODVBRjAwNEIxN0IwIC8qIFdlYkdQVUNvbnZlcnRUb0JhY2tpbmcuY3Bw
ICovLAorCQkJCTFDMTlFNkI2MjczRjg1QkMwMDRCMTdCMCAvKiBXZWJHUFVDb252ZXJ0VG9CYWNr
aW5nLmggKi8sCisJCQkJMUMxOUU2NjYyNzNGM0ZGQTAwNEIxN0IwIC8qIFdlYkdQVURldmljZUlt
cGwuY3BwICovLAorCQkJCTFDMTlFNkFEMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJHUFVEZXZpY2VJ
bXBsLmggKi8sCisJCQkJMUMxOUU2QjkyNzQwNUUzMjAwNEIxN0IwIC8qIFdlYkdQVUV4dGVybmFs
VGV4dHVyZUltcGwuY3BwICovLAorCQkJCTFDMTlFNkJCMjc0MDVFM0MwMDRCMTdCMCAvKiBXZWJH
UFVFeHRlcm5hbFRleHR1cmVJbXBsLmggKi8sCisJCQkJMUMxOUU2NDIyNzNGM0U1RDAwNEIxN0Iw
IC8qIFdlYkdQVUltcGwuY3BwICovLAorCQkJCTFDMTlFNjlCMjczRjQyNDIwMDRCMTdCMCAvKiBX
ZWJHUFVJbXBsLmggKi8sCisJCQkJMUMxOUU2NkUyNzNGNDAxNDAwNEIxN0IwIC8qIFdlYkdQVVBp
cGVsaW5lTGF5b3V0SW1wbC5jcHAgKi8sCisJCQkJMUMxOUU2OUQyNzNGNDI0MzAwNEIxN0IwIC8q
IFdlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5oICovLAorCQkJCTFDMTlFNjcyMjczRjQwMjAwMDRC
MTdCMCAvKiBXZWJHUFVRdWVyeVNldEltcGwuY3BwICovLAorCQkJCTFDMTlFNkE4MjczRjQyNDQw
MDRCMTdCMCAvKiBXZWJHUFVRdWVyeVNldEltcGwuaCAqLywKKwkJCQkxQzE5RTY3NjI3M0Y0MDJC
MDA0QjE3QjAgLyogV2ViR1BVUXVldWVJbXBsLmNwcCAqLywKKwkJCQkxQzE5RTZBNTI3M0Y0MjQ0
MDA0QjE3QjAgLyogV2ViR1BVUXVldWVJbXBsLmggKi8sCisJCQkJMUMxOUU2N0UyNzNGNDA0NDAw
NEIxN0IwIC8qIFdlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJbXBsLmNwcCAqLywKKwkJCQkxQzE5
RTY5QTI3M0Y0MjQyMDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyQnVuZGxlRW5jb2RlckltcGwuaCAq
LywKKwkJCQkxQzE5RTY3QTI3M0Y0MDNBMDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyQnVuZGxlSW1w
bC5jcHAgKi8sCisJCQkJMUMxOUU2QTYyNzNGNDI0NDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlckJ1
bmRsZUltcGwuaCAqLywKKwkJCQkxQzE5RTY4MjI3M0Y0MDUwMDA0QjE3QjAgLyogV2ViR1BVUmVu
ZGVyUGFzc0VuY29kZXJJbXBsLmNwcCAqLywKKwkJCQkxQzE5RTZBMzI3M0Y0MjQ0MDA0QjE3QjAg
LyogV2ViR1BVUmVuZGVyUGFzc0VuY29kZXJJbXBsLmggKi8sCisJCQkJMUMxOUU2ODYyNzNGNDA1
RDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5jcHAgKi8sCisJCQkJMUMxOUU2
QTkyNzNGNDI0NDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5oICovLAorCQkJ
CTFDMTlFNjhBMjczRjQwNjkwMDRCMTdCMCAvKiBXZWJHUFVTYW1wbGVySW1wbC5jcHAgKi8sCisJ
CQkJMUMxOUU2QTcyNzNGNDI0NDAwNEIxN0IwIC8qIFdlYkdQVVNhbXBsZXJJbXBsLmggKi8sCisJ
CQkJMUMxOUU2OEUyNzNGNDA3MTAwNEIxN0IwIC8qIFdlYkdQVVNoYWRlck1vZHVsZUltcGwuY3Bw
ICovLAorCQkJCTFDMTlFNkFBMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJHUFVTaGFkZXJNb2R1bGVJ
bXBsLmggKi8sCisJCQkJMUMxOUU2OTIyNzNGNDA3RDAwNEIxN0IwIC8qIFdlYkdQVVRleHR1cmVJ
bXBsLmNwcCAqLywKKwkJCQkxQzE5RTY5RjI3M0Y0MjQzMDA0QjE3QjAgLyogV2ViR1BVVGV4dHVy
ZUltcGwuaCAqLywKKwkJCQkxQzE5RTY5NjI3M0Y0MDhCMDA0QjE3QjAgLyogV2ViR1BVVGV4dHVy
ZVZpZXdJbXBsLmNwcCAqLywKKwkJCQkxQzE5RTZBQzI3M0Y0MjQ1MDA0QjE3QjAgLyogV2ViR1BV
VGV4dHVyZVZpZXdJbXBsLmggKi8sCisJCQkpOworCQkJcGF0aCA9IEltcGw7CisJCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOworCQl9OwogCQkxQzQ4NzZERTFGOEQ4MzEzMDBDQ0VFQkQgLyogY29j
b2EgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMTA0Miw2
ICsxMTY0LDcgQEAKIAkJMUNDNUUzQzMyNzM3NDVBMzAwNkY2RkY0IC8qIFdlYkdQVSAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMUMxOUU2NDEyNzNGM0Q3
NTAwNEIxN0IwIC8qIEltcGwgKi8sCiAJCQkJMUNDNUU0NzEyNzM3NDk0ODAwNkY2RkY0IC8qIFdl
YkdQVS5oICovLAogCQkJCTFDQzVFNDdGMjczNzQ5NDkwMDZGNkZGNCAvKiBXZWJHUFVBZGFwdGVy
LmggKi8sCiAJCQkJMUNDNUU0NkMyNzM3NDk0ODAwNkY2RkY0IC8qIFdlYkdQVUFkZHJlc3NNb2Rl
LmggKi8sCkBAIC0xNjk0LDYgKzE4MTcsMjkgQEAKIAkJCQkwNzYxMURCNzI0M0ZBNUJGMDBEODA3
MDQgLyogVXNhZ2VUcmFja2luZ1NvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDFFMUYz
NDQyNDhBNkEwMDAwMjJENURFIC8qIFZpZGVvVG9vbGJveFNvZnRMaW5rLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUY0NkI4QzREMjY3NDA5MTgwMDdBNjU1NCAvKiBWaXNpb25LaXRDb3JlU29mdExp
bmsubW0gaW4gU291cmNlcyAqLywKKwkJCQkxQzE5RTY0ODI3M0YzRjgyMDA0QjE3QjAgLyogV2Vi
R1BVQWRhcHRlckltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2NEMyNzNGM0Y5OTAw
NEIxN0IwIC8qIFdlYkdQVUJpbmRHcm91cEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMx
OUU2NTAyNzNGM0ZBNTAwNEIxN0IwIC8qIFdlYkdQVUJpbmRHcm91cExheW91dEltcGwuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2NTQyNzNGM0ZCMTAwNEIxN0IwIC8qIFdlYkdQVUJ1ZmZl
ckltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2NTgyNzNGM0ZDMDAwNEIxN0IwIC8q
IFdlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFDMTlFNjVD
MjczRjNGRDIwMDRCMTdCMCAvKiBXZWJHUFVDb21tYW5kRW5jb2RlckltcGwuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMUMxOUU2NjAyNzNGM0ZFMjAwNEIxN0IwIC8qIFdlYkdQVUNvbXB1dGVQYXNz
RW5jb2RlckltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2NjQyNzNGM0ZFRTAwNEIx
N0IwIC8qIFdlYkdQVUNvbXB1dGVQaXBlbGluZUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MUMxOUU2QjUyNzNGODVBRjAwNEIxN0IwIC8qIFdlYkdQVUNvbnZlcnRUb0JhY2tpbmcuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2NjgyNzNGM0ZGQTAwNEIxN0IwIC8qIFdlYkdQVURldmlj
ZUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2QkEyNzQwNUUzMjAwNEIxN0IwIC8q
IFdlYkdQVUV4dGVybmFsVGV4dHVyZUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2
NDQyNzNGM0U1RDAwNEIxN0IwIC8qIFdlYkdQVUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MUMxOUU2NzAyNzNGNDAxNDAwNEIxN0IwIC8qIFdlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkxQzE5RTY3NDI3M0Y0MDIwMDA0QjE3QjAgLyogV2ViR1BVUXVl
cnlTZXRJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFDMTlFNjc4MjczRjQwMkIwMDRCMTdC
MCAvKiBXZWJHUFVRdWV1ZUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2ODAyNzNG
NDA0NDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJbXBsLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTFDMTlFNjdDMjczRjQwM0EwMDRCMTdCMCAvKiBXZWJHUFVSZW5kZXJCdW5k
bGVJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFDMTlFNjg0MjczRjQwNTAwMDRCMTdCMCAv
KiBXZWJHUFVSZW5kZXJQYXNzRW5jb2RlckltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMx
OUU2ODgyNzNGNDA1RDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkxQzE5RTY4QzI3M0Y0MDY5MDA0QjE3QjAgLyogV2ViR1BVU2FtcGxl
ckltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2OTAyNzNGNDA3MjAwNEIxN0IwIC8q
IFdlYkdQVVNoYWRlck1vZHVsZUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2OTQy
NzNGNDA3RDAwNEIxN0IwIC8qIFdlYkdQVVRleHR1cmVJbXBsLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTFDMTlFNjk4MjczRjQwOEIwMDRCMTdCMCAvKiBXZWJHUFVUZXh0dXJlVmlld0ltcGwuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTEwODI2RkExRjU3NjI5MjAwNDc3MkFDIC8qIFdlYlBhbmVs
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNz
L1dlYkdQVS9JbXBsL1dlYkdQVUFkYXB0ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQWRhcHRlckltcGwuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjkxMjA5NjlmY2ViYTRhMjQ2YWY2OWEwYjI3NmNiZmYzOTBmMTFiNmYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUFk
YXB0ZXJJbXBsLmNwcApAQCAtMCwwICsxLDIxNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVBZGFwdGVySW1wbC5oIgorCisjaW5jbHVkZSAiV2Vi
R1BVQ29udmVydFRvQmFja2luZy5oIgorI2luY2x1ZGUgIldlYkdQVURldmljZUltcGwuaCIKKyNp
bmNsdWRlIDxXZWJHUFUvV2ViR1BVRXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNl
IFdlYkdQVSB7CisKK3N0YXRpYyBTdHJpbmcgYWRhcHRlck5hbWUoV0dQVUFkYXB0ZXIgYWRhcHRl
cikKK3sKKyAgICBXR1BVQWRhcHRlclByb3BlcnRpZXMgcHJvcGVydGllczsKKyAgICB3Z3B1QWRh
cHRlckdldFByb3BlcnRpZXMoYWRhcHRlciwgJnByb3BlcnRpZXMpOworICAgIHJldHVybiBwcm9w
ZXJ0aWVzLm5hbWU7Cit9CisKK3N0YXRpYyBSZWY8U3VwcG9ydGVkRmVhdHVyZXM+IHN1cHBvcnRl
ZEZlYXR1cmVzKFdHUFVBZGFwdGVyIGFkYXB0ZXIpCit7CisgICAgVmVjdG9yPFN0cmluZz4gcmVz
dWx0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyA7ICsraSkgeworICAgICAgICBhdXRvIGZlYXR1
cmUgPSB3Z3B1QWRhcHRlckdldEZlYXR1cmVBdEluZGV4KGFkYXB0ZXIsIGkpOworICAgICAgICBp
ZiAoZmVhdHVyZSA9PSBXR1BVRmVhdHVyZU5hbWVfVW5kZWZpbmVkKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8dWludD4oZmVhdHVyZSkpIHsKKyAgICAg
ICAgY2FzZSBXR1BVRmVhdHVyZU5hbWVfRGVwdGhDbGFtcGluZzoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFdHUFVGZWF0dXJlTmFtZV9EZXB0aDI0VW5vcm1TdGVuY2lsODoKKyAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoImRlcHRoMjR1bm9ybS1zdGVuY2lsOCJfcyk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXR1BVRmVhdHVyZU5hbWVfRGVwdGgzMkZsb2F0
U3RlbmNpbDg6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJkZXB0aDMyZmxvYXQtc3RlbmNp
bDgiX3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVUZlYXR1cmVOYW1l
X1RpbWVzdGFtcFF1ZXJ5OgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgidGltZXN0YW1wLXF1
ZXJ5Il9zKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdHUFVGZWF0dXJlTmFt
ZV9QaXBlbGluZVN0YXRpc3RpY3NRdWVyeToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoInBp
cGVsaW5lLXN0YXRpc3RpY3MtcXVlcnkiX3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgV0dQVUZlYXR1cmVOYW1lX1RleHR1cmVDb21wcmVzc2lvbkJDOgorICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgidGV4dHVyZS1jb21wcmVzc2lvbi1iYyJfcyk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBXR1BVRmVhdHVyZU5hbWVfRGVwdGhDbGlwQ29udHJvbDoKKyAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoImRlcHRoLWNsaXAtY29udHJvbCJfcyk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXR1BVRmVhdHVyZU5hbWVfSW5kaXJlY3RGaXJzdElu
c3RhbmNlOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiaW5kaXJlY3QtZmlyc3QtaW5zdGFu
Y2UiX3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVUZlYXR1cmVOYW1l
X1RleHR1cmVDb21wcmVzc2lvbkVUQzI6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJ0ZXh0
dXJlLWNvbXByZXNzaW9uLWV0YzIiX3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgV0dQVUZlYXR1cmVOYW1lX1RleHR1cmVDb21wcmVzc2lvbkFTVEM6CisgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKCJ0ZXh0dXJlLWNvbXByZXNzaW9uLWFzdGMiX3MpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gU3VwcG9ydGVkRmVhdHVyZXM6OmNyZWF0ZShXVEZNb3ZlKHJlc3Vs
dCkpOworfQorCitzdGF0aWMgUmVmPFN1cHBvcnRlZExpbWl0cz4gc3VwcG9ydGVkTGltaXRzKFdH
UFVBZGFwdGVyIGFkYXB0ZXIpCit7CisgICAgV0dQVVN1cHBvcnRlZExpbWl0cyBsaW1pdHM7Cisg
ICAgd2dwdUFkYXB0ZXJHZXRMaW1pdHMoYWRhcHRlciwgJmxpbWl0cyk7CisgICAgcmV0dXJuIFN1
cHBvcnRlZExpbWl0czo6Y3JlYXRlKAorICAgICAgICBsaW1pdHMubGltaXRzLm1heFRleHR1cmVE
aW1lbnNpb24xRCwKKyAgICAgICAgbGltaXRzLmxpbWl0cy5tYXhUZXh0dXJlRGltZW5zaW9uMkQs
CisgICAgICAgIGxpbWl0cy5saW1pdHMubWF4VGV4dHVyZURpbWVuc2lvbjNELAorICAgICAgICBs
aW1pdHMubGltaXRzLm1heFRleHR1cmVBcnJheUxheWVycywKKyAgICAgICAgbGltaXRzLmxpbWl0
cy5tYXhCaW5kR3JvdXBzLAorICAgICAgICBsaW1pdHMubGltaXRzLm1heER5bmFtaWNVbmlmb3Jt
QnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0LAorICAgICAgICBsaW1pdHMubGltaXRzLm1heER5bmFt
aWNTdG9yYWdlQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0LAorICAgICAgICBsaW1pdHMubGltaXRz
Lm1heFNhbXBsZWRUZXh0dXJlc1BlclNoYWRlclN0YWdlLAorICAgICAgICBsaW1pdHMubGltaXRz
Lm1heFNhbXBsZXJzUGVyU2hhZGVyU3RhZ2UsCisgICAgICAgIGxpbWl0cy5saW1pdHMubWF4U3Rv
cmFnZUJ1ZmZlcnNQZXJTaGFkZXJTdGFnZSwKKyAgICAgICAgbGltaXRzLmxpbWl0cy5tYXhTdG9y
YWdlVGV4dHVyZXNQZXJTaGFkZXJTdGFnZSwKKyAgICAgICAgbGltaXRzLmxpbWl0cy5tYXhVbmlm
b3JtQnVmZmVyc1BlclNoYWRlclN0YWdlLAorICAgICAgICBsaW1pdHMubGltaXRzLm1heFVuaWZv
cm1CdWZmZXJCaW5kaW5nU2l6ZSwKKyAgICAgICAgbGltaXRzLmxpbWl0cy5tYXhTdG9yYWdlQnVm
ZmVyQmluZGluZ1NpemUsCisgICAgICAgIGxpbWl0cy5saW1pdHMubWluVW5pZm9ybUJ1ZmZlck9m
ZnNldEFsaWdubWVudCwKKyAgICAgICAgbGltaXRzLmxpbWl0cy5taW5TdG9yYWdlQnVmZmVyT2Zm
c2V0QWxpZ25tZW50LAorICAgICAgICBsaW1pdHMubGltaXRzLm1heFZlcnRleEJ1ZmZlcnMsCisg
ICAgICAgIGxpbWl0cy5saW1pdHMubWF4VmVydGV4QXR0cmlidXRlcywKKyAgICAgICAgbGltaXRz
LmxpbWl0cy5tYXhWZXJ0ZXhCdWZmZXJBcnJheVN0cmlkZSwKKyAgICAgICAgbGltaXRzLmxpbWl0
cy5tYXhJbnRlclN0YWdlU2hhZGVyQ29tcG9uZW50cywKKyAgICAgICAgbGltaXRzLmxpbWl0cy5t
YXhDb21wdXRlV29ya2dyb3VwU3RvcmFnZVNpemUsCisgICAgICAgIGxpbWl0cy5saW1pdHMubWF4
Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwLAorICAgICAgICBsaW1pdHMubGltaXRzLm1h
eENvbXB1dGVXb3JrZ3JvdXBTaXplWCwKKyAgICAgICAgbGltaXRzLmxpbWl0cy5tYXhDb21wdXRl
V29ya2dyb3VwU2l6ZVksCisgICAgICAgIGxpbWl0cy5saW1pdHMubWF4Q29tcHV0ZVdvcmtncm91
cFNpemVaLAorICAgICAgICBsaW1pdHMubGltaXRzLm1heENvbXB1dGVXb3JrZ3JvdXBzUGVyRGlt
ZW5zaW9uKTsKK30KKworc3RhdGljIGJvb2wgaXNGYWxsYmFja0FkYXB0ZXIoV0dQVUFkYXB0ZXIg
YWRhcHRlcikKK3sKKyAgICBXR1BVQWRhcHRlclByb3BlcnRpZXMgcHJvcGVydGllczsKKyAgICB3
Z3B1QWRhcHRlckdldFByb3BlcnRpZXMoYWRhcHRlciwgJnByb3BlcnRpZXMpOworICAgIHJldHVy
biBwcm9wZXJ0aWVzLmFkYXB0ZXJUeXBlID09IFdHUFVBZGFwdGVyVHlwZV9DUFU7Cit9CisKK0Fk
YXB0ZXJJbXBsOjpBZGFwdGVySW1wbChXR1BVQWRhcHRlciBhZGFwdGVyKQorICAgIDogQWRhcHRl
cihhZGFwdGVyTmFtZShhZGFwdGVyKSwgc3VwcG9ydGVkRmVhdHVyZXMoYWRhcHRlciksIHN1cHBv
cnRlZExpbWl0cyhhZGFwdGVyKSwgV2ViR1BVOjppc0ZhbGxiYWNrQWRhcHRlcihhZGFwdGVyKSkK
KyAgICAsIG1fYmFja2luZyhhZGFwdGVyKQoreworfQorCitBZGFwdGVySW1wbDo6fkFkYXB0ZXJJ
bXBsKCkKK3sKKyAgICB3Z3B1QWRhcHRlclJlbGVhc2UobV9iYWNraW5nKTsgCit9CisKK3ZvaWQg
cmVxdWVzdERldmljZUNhbGxiYWNrKFdHUFVSZXF1ZXN0RGV2aWNlU3RhdHVzIHN0YXR1cywgV0dQ
VURldmljZSBkZXZpY2UsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIHZvaWQqIHVzZXJkYXRhKQorewor
ICAgIGF1dG8gYWRhcHRlciA9IGFkb3B0UmVmKCpzdGF0aWNfY2FzdDxBZGFwdGVySW1wbCo+KHVz
ZXJkYXRhKSk7IC8vIGFkb3B0UmVmIGlzIGJhbGFuY2VkIGJ5IGxlYWtSZWYgaW4gcmVxdWVzdERl
dmljZSgpIGJlbG93LiBXZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSdyZSB1c2luZyBhIEMg
QVBJIHdpdGggbm8gY29uY2VwdCBvZiByZWZlcmVuY2UgY291bnRpbmcgb3IgYmxvY2tzLgorICAg
IGFkYXB0ZXItPnJlcXVlc3REZXZpY2VDYWxsYmFjayhzdGF0dXMsIGRldmljZSwgbWVzc2FnZSk7
Cit9CisKK3ZvaWQgQWRhcHRlckltcGw6OnJlcXVlc3REZXZpY2UoY29uc3QgRGV2aWNlRGVzY3Jp
cHRvciYgZGVzY3JpcHRvciwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlZjxEZXZpY2U+KT4mJiBjYWxs
YmFjaykKK3sKKyAgICBSZWYgcHJvdGVjdGVkVGhpcygqdGhpcyk7CisKKyAgICBhdXRvIGxhYmVs
ID0gZGVzY3JpcHRvci5sYWJlbC51dGY4KCk7CisKKyAgICBXR1BVRGV2aWNlRGVzY3JpcHRvckxh
YmVsIGJhY2tpbmdEZXNjcmlwdG9yTGFiZWwgeworICAgICAgICB7CisgICAgICAgICAgICBudWxs
cHRyLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V0dQVVNUeXBlPihXR1BVU1R5cGVfRGV2aWNl
RGVzY3JpcHRvckxhYmVsKSwKKyAgICAgICAgfSwKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAg
bGFiZWwuZGF0YSgpCisgICAgfTsKKworICAgIFZlY3RvcjxXR1BVRmVhdHVyZU5hbWU+IGZlYXR1
cmVzOworICAgIGZlYXR1cmVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGVzY3JpcHRvci5yZXF1
aXJlZEZlYXR1cmVzLnNpemUoKSk7CisgICAgZm9yIChhdXRvIGZlYXR1cmVOYW1lIDogZGVzY3Jp
cHRvci5yZXF1aXJlZEZlYXR1cmVzKQorICAgICAgICBmZWF0dXJlcy51bmNoZWNrZWRBcHBlbmQo
Y29udmVydFRvQmFja2luZyhmZWF0dXJlTmFtZSkpOworCisgICAgV0dQVVJlcXVpcmVkTGltaXRz
IGxpbWl0cyB7CisgICAgICAgIG51bGxwdHIsIHsKKyAgICAgICAgICAgIDAsIC8vIG1heFRleHR1
cmVEaW1lbnNpb24xRAorICAgICAgICAgICAgMCwgLy8gbWF4VGV4dHVyZURpbWVuc2lvbjJECisg
ICAgICAgICAgICAwLCAvLyBtYXhUZXh0dXJlRGltZW5zaW9uM0QKKyAgICAgICAgICAgIDAsIC8v
IG1heFRleHR1cmVBcnJheUxheWVycworICAgICAgICAgICAgMCwgLy8gbWF4QmluZEdyb3Vwcwor
ICAgICAgICAgICAgMCwgLy8gbWF4RHluYW1pY1VuaWZvcm1CdWZmZXJzUGVyUGlwZWxpbmVMYXlv
dXQKKyAgICAgICAgICAgIDAsIC8vIG1heER5bmFtaWNTdG9yYWdlQnVmZmVyc1BlclBpcGVsaW5l
TGF5b3V0CisgICAgICAgICAgICAwLCAvLyBtYXhTYW1wbGVkVGV4dHVyZXNQZXJTaGFkZXJTdGFn
ZQorICAgICAgICAgICAgMCwgLy8gbWF4U2FtcGxlcnNQZXJTaGFkZXJTdGFnZQorICAgICAgICAg
ICAgMCwgLy8gbWF4U3RvcmFnZUJ1ZmZlcnNQZXJTaGFkZXJTdGFnZQorICAgICAgICAgICAgMCwg
Ly8gbWF4U3RvcmFnZVRleHR1cmVzUGVyU2hhZGVyU3RhZ2UKKyAgICAgICAgICAgIDAsIC8vIG1h
eFVuaWZvcm1CdWZmZXJzUGVyU2hhZGVyU3RhZ2UKKyAgICAgICAgICAgIDAsIC8vIG1heFVuaWZv
cm1CdWZmZXJCaW5kaW5nU2l6ZQorICAgICAgICAgICAgMCwgLy8gbWF4U3RvcmFnZUJ1ZmZlckJp
bmRpbmdTaXplCisgICAgICAgICAgICAwLCAvLyBtaW5Vbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25t
ZW50CisgICAgICAgICAgICAwLCAvLyBtaW5TdG9yYWdlQnVmZmVyT2Zmc2V0QWxpZ25tZW50Cisg
ICAgICAgICAgICAwLCAvLyBtYXhWZXJ0ZXhCdWZmZXJzCisgICAgICAgICAgICAwLCAvLyBtYXhW
ZXJ0ZXhBdHRyaWJ1dGVzCisgICAgICAgICAgICAwLCAvLyBtYXhWZXJ0ZXhCdWZmZXJBcnJheVN0
cmlkZQorICAgICAgICAgICAgMCwgLy8gbWF4SW50ZXJTdGFnZVNoYWRlckNvbXBvbmVudHMKKyAg
ICAgICAgICAgIDAsIC8vIG1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlU2l6ZQorICAgICAgICAg
ICAgMCwgLy8gbWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwCisgICAgICAgICAgICAw
LCAvLyBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVgKKyAgICAgICAgICAgIDAsIC8vIG1heENvbXB1
dGVXb3JrZ3JvdXBTaXplWQorICAgICAgICAgICAgMCwgLy8gbWF4Q29tcHV0ZVdvcmtncm91cFNp
emVaCisgICAgICAgICAgICAwLCAvLyBtYXhDb21wdXRlV29ya2dyb3Vwc1BlckRpbWVuc2lvbgor
ICAgICAgICB9LAorICAgIH07CisKKyAgICBXR1BVRGV2aWNlRGVzY3JpcHRvciBiYWNraW5nRGVz
Y3JpcHRvciB7CisgICAgICAgICZiYWNraW5nRGVzY3JpcHRvckxhYmVsLmhlYWRlciwKKyAgICAg
ICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGZlYXR1cmVzLnNpemUoKSksCisgICAgICAgIGZlYXR1
cmVzLmRhdGEoKSwKKyAgICAgICAgJmxpbWl0cywKKyAgICB9OworCisgICAgbV9jYWxsYmFja3Mu
YXBwZW5kKFdURk1vdmUoY2FsbGJhY2spKTsKKworICAgIHdncHVBZGFwdGVyUmVxdWVzdERldmlj
ZShtX2JhY2tpbmcsICZiYWNraW5nRGVzY3JpcHRvciwgJldlYkdQVTo6cmVxdWVzdERldmljZUNh
bGxiYWNrLCAmcHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpOyAvLyBsZWFrUmVmIGlzIGJhbGFuY2Vk
IGJ5IGFkb3B0UmVmIGluIHJlcXVlc3REZXZpY2VDYWxsYmFjaygpIGFib3ZlLiBXZSBoYXZlIHRv
IGRvIHRoaXMgYmVjYXVzZSB3ZSdyZSB1c2luZyBhIEMgQVBJIHdpdGggbm8gY29uY2VwdCBvZiBy
ZWZlcmVuY2UgY291bnRpbmcgb3IgYmxvY2tzLgorfQorCit2b2lkIEFkYXB0ZXJJbXBsOjpyZXF1
ZXN0RGV2aWNlQ2FsbGJhY2soV0dQVVJlcXVlc3REZXZpY2VTdGF0dXMsIFdHUFVEZXZpY2UgZGV2
aWNlLCBjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIFVOVVNFRF9QQVJBTShtZXNzYWdlKTsK
KyAgICBhdXRvIGNhbGxiYWNrID0gbV9jYWxsYmFja3MudGFrZUZpcnN0KCk7CisgICAgY2FsbGJh
Y2soRGV2aWNlSW1wbDo6Y3JlYXRlKGRldmljZSwgUmVmIHsgZmVhdHVyZXMoKSB9LCBSZWYgeyBs
aW1pdHMoKSB9KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2Vi
R1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9J
bXBsL1dlYkdQVUFkYXB0ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNz
L1dlYkdQVS9JbXBsL1dlYkdQVUFkYXB0ZXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTY0ODlkNWRhYmE5
NThjOGZmMGI4ZmFiODgyZDY3MGI0YjI2ZDZlMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQWRhcHRlckltcGwuaApA
QCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJX
ZWJHUFVBZGFwdGVyLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorI2luY2x1ZGUgPHd0
Zi9EZXF1ZS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFz
cyBBZGFwdGVySW1wbCBmaW5hbCA6IHB1YmxpYyBBZGFwdGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUmVmPEFkYXB0ZXJJbXBsPiBjcmVhdGUoV0dQVUFkYXB0ZXIgYWRhcHRlcikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFkYXB0ZXJJbXBsKGFkYXB0ZXIpKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIH5BZGFwdGVySW1wbCgpOworCisgICAgV0dQVUFkYXB0ZXIgYmFja2lu
ZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCB2
b2lkIHJlcXVlc3REZXZpY2VDYWxsYmFjayhXR1BVUmVxdWVzdERldmljZVN0YXR1cywgV0dQVURl
dmljZSwgY29uc3QgY2hhciogbWVzc2FnZSwgdm9pZCogdXNlcmRhdGEpOworCisgICAgQWRhcHRl
ckltcGwoV0dQVUFkYXB0ZXIpOworCisgICAgQWRhcHRlckltcGwoY29uc3QgQWRhcHRlckltcGwm
KSA9IGRlbGV0ZTsKKyAgICBBZGFwdGVySW1wbChBZGFwdGVySW1wbCYmKSA9IGRlbGV0ZTsKKyAg
ICBBZGFwdGVySW1wbCYgb3BlcmF0b3I9KGNvbnN0IEFkYXB0ZXJJbXBsJikgPSBkZWxldGU7Cisg
ICAgQWRhcHRlckltcGwmIG9wZXJhdG9yPShBZGFwdGVySW1wbCYmKSA9IGRlbGV0ZTsKKworICAg
IHZvaWQgcmVxdWVzdERldmljZUNhbGxiYWNrKFdHUFVSZXF1ZXN0RGV2aWNlU3RhdHVzLCBXR1BV
RGV2aWNlLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsKKyAgICB2b2lkIHJlcXVlc3REZXZpY2UoY29u
c3QgRGV2aWNlRGVzY3JpcHRvciYsIHN0ZDo6ZnVuY3Rpb248dm9pZChSZWY8RGV2aWNlPik+JiYp
IGZpbmFsOworCisgICAgV0dQVUFkYXB0ZXIgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworCisgICAg
RGVxdWU8c3RkOjpmdW5jdGlvbjx2b2lkKFJlZjxEZXZpY2U+KT4+IG1fY2FsbGJhY2tzOworfTsK
KworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQmluZEdy
b3VwSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBs
L1dlYkdQVUJpbmRHcm91cEltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFiMGFkNjc1OThhN2FkMjE1OWE5
NDg0NGYxNzRjMzAzNWNlYWZmYjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Q
QUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJpbmRHcm91cEltcGwuY3BwCkBAIC0w
LDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViR1BVQmluZEdyb3VwSW1wbC5oIgorCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVUV4dC5oPgor
CituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitCaW5kR3JvdXBJbXBsOjpC
aW5kR3JvdXBJbXBsKFdHUFVCaW5kR3JvdXAgYmluZEdyb3VwKQorICAgIDogbV9iYWNraW5nKGJp
bmRHcm91cCkKK3sKK30KKworQmluZEdyb3VwSW1wbDo6fkJpbmRHcm91cEltcGwoKQoreworICAg
IHdncHVCaW5kR3JvdXBSZWxlYXNlKG1fYmFja2luZyk7Cit9CisKK3ZvaWQgQmluZEdyb3VwSW1w
bDo6c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAgIHdncHVCaW5k
R3JvdXBTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVsLnV0ZjgoKS5kYXRhKCkpOworfQorCit9IC8v
IG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVCaW5kR3JvdXBJbXBs
LmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJp
bmRHcm91cEltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMzViYmE5ZGI3MmQ2NTE5NmJhNmVhNmEwNjJmMzcy
M2UyZGIwYWY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVCaW5kR3JvdXBJbXBsLmgKQEAgLTAsMCArMSw1OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVQmluZEdyb3VwLmgi
CisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFj
ZSBXZWJHUFUgeworCitjbGFzcyBCaW5kR3JvdXBJbXBsIGZpbmFsIDogcHVibGljIEJpbmRHcm91
cCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxCaW5kR3JvdXBJbXBsPiBjcmVhdGUoV0dQVUJp
bmRHcm91cCBiaW5kR3JvdXApCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBC
aW5kR3JvdXBJbXBsKGJpbmRHcm91cCkpOworICAgIH0KKworICAgIHZpcnR1YWwgfkJpbmRHcm91
cEltcGwoKTsKKworICAgIFdHUFVCaW5kR3JvdXAgYmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1f
YmFja2luZzsgfQorCitwcml2YXRlOgorICAgIEJpbmRHcm91cEltcGwoV0dQVUJpbmRHcm91cCk7
CisKKyAgICBCaW5kR3JvdXBJbXBsKGNvbnN0IEJpbmRHcm91cEltcGwmKSA9IGRlbGV0ZTsKKyAg
ICBCaW5kR3JvdXBJbXBsKEJpbmRHcm91cEltcGwmJikgPSBkZWxldGU7CisgICAgQmluZEdyb3Vw
SW1wbCYgb3BlcmF0b3I9KGNvbnN0IEJpbmRHcm91cEltcGwmKSA9IGRlbGV0ZTsKKyAgICBCaW5k
R3JvdXBJbXBsJiBvcGVyYXRvcj0oQmluZEdyb3VwSW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIHZv
aWQgc2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5hbDsKKworICAgIFdHUFVCaW5k
R3JvdXAgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9
IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwv
Z3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQmluZEdyb3VwTGF5b3V0SW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJpbmRHcm91cExh
eW91dEltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2NGU3ZGI2NjAzNDRkZjhjNDZiMTM1OGFhNDBlOGQ4
MTkxZjQwYTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBo
aWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJpbmRHcm91cExheW91dEltcGwuY3BwCkBAIC0wLDAgKzEs
NTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViR1BV
QmluZEdyb3VwTGF5b3V0SW1wbC5oIgorCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVUV4dC5oPgor
CituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitCaW5kR3JvdXBMYXlvdXRJ
bXBsOjpCaW5kR3JvdXBMYXlvdXRJbXBsKFdHUFVCaW5kR3JvdXBMYXlvdXQgYmluZEdyb3VwTGF5
b3V0KQorICAgIDogbV9iYWNraW5nKGJpbmRHcm91cExheW91dCkKK3sKK30KKworQmluZEdyb3Vw
TGF5b3V0SW1wbDo6fkJpbmRHcm91cExheW91dEltcGwoKQoreworICAgIHdncHVCaW5kR3JvdXBM
YXlvdXRSZWxlYXNlKG1fYmFja2luZyk7Cit9CisKK3ZvaWQgQmluZEdyb3VwTGF5b3V0SW1wbDo6
c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAgIHdncHVCaW5kR3Jv
dXBMYXlvdXRTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVsLnV0ZjgoKS5kYXRhKCkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVCaW5kR3JvdXBM
YXlvdXRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBs
L1dlYkdQVUJpbmRHcm91cExheW91dEltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OWI2NGI5ZDMxN2YwNWVl
ZDAyNmYwMzc4MTMzMzJhYTg1NjA4YTI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVCaW5kR3JvdXBMYXlvdXRJbXBs
LmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiV2ViR1BVQmluZEdyb3VwTGF5b3V0LmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgor
CituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBCaW5kR3JvdXBM
YXlvdXRJbXBsIGZpbmFsIDogcHVibGljIEJpbmRHcm91cExheW91dCB7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZjxCaW5kR3JvdXBMYXlvdXRJbXBsPiBjcmVhdGUoV0dQVUJpbmRHcm91cExheW91
dCBiaW5kR3JvdXBMYXlvdXQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBC
aW5kR3JvdXBMYXlvdXRJbXBsKGJpbmRHcm91cExheW91dCkpOworICAgIH0KKworICAgIHZpcnR1
YWwgfkJpbmRHcm91cExheW91dEltcGwoKTsKKworICAgIFdHUFVCaW5kR3JvdXBMYXlvdXQgYmFj
a2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgorICAgIEJpbmRH
cm91cExheW91dEltcGwoV0dQVUJpbmRHcm91cExheW91dCk7CisKKyAgICBCaW5kR3JvdXBMYXlv
dXRJbXBsKGNvbnN0IEJpbmRHcm91cExheW91dEltcGwmKSA9IGRlbGV0ZTsKKyAgICBCaW5kR3Jv
dXBMYXlvdXRJbXBsKEJpbmRHcm91cExheW91dEltcGwmJikgPSBkZWxldGU7CisgICAgQmluZEdy
b3VwTGF5b3V0SW1wbCYgb3BlcmF0b3I9KGNvbnN0IEJpbmRHcm91cExheW91dEltcGwmKSA9IGRl
bGV0ZTsKKyAgICBCaW5kR3JvdXBMYXlvdXRJbXBsJiBvcGVyYXRvcj0oQmluZEdyb3VwTGF5b3V0
SW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIHZvaWQgc2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJp
bmcmKSBmaW5hbDsKKworICAgIFdHUFVCaW5kR3JvdXBMYXlvdXQgbV9iYWNraW5nIHsgbnVsbHB0
ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2Vi
R1BVQnVmZmVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQ
VS9JbXBsL1dlYkdQVUJ1ZmZlckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcyOGNlNGZjY2I3MTQwYjcz
NzUwNzg5OTU4OTc3Y2RmYTI2MzU5ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJ1ZmZlckltcGwuY3BwCkBAIC0w
LDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViR1BVQnVmZmVySW1wbC5oIgorCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVUV4dC5oPgorCitu
YW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitCdWZmZXJJbXBsOjpCdWZmZXJJ
bXBsKFdHUFVCdWZmZXIgYnVmZmVyKQorICAgIDogbV9iYWNraW5nKGJ1ZmZlcikKK3sKK30KKwor
QnVmZmVySW1wbDo6fkJ1ZmZlckltcGwoKQoreworICAgIHdncHVCdWZmZXJSZWxlYXNlKG1fYmFj
a2luZyk7Cit9CisKK3ZvaWQgbWFwQ2FsbGJhY2soV0dQVUJ1ZmZlck1hcEFzeW5jU3RhdHVzIHN0
YXR1cywgdm9pZCogdXNlcmRhdGEpCit7CisgICAgYXV0byBidWZmZXIgPSBhZG9wdFJlZigqc3Rh
dGljX2Nhc3Q8QnVmZmVySW1wbCo+KHVzZXJkYXRhKSk7IC8vIGFkb3B0UmVmIGlzIGJhbGFuY2Vk
IGJ5IGxlYWtSZWYgaW4gbWFwQXN5bmMoKSBiZWxvdy4gV2UgaGF2ZSB0byBkbyB0aGlzIGJlY2F1
c2Ugd2UncmUgdXNpbmcgYSBDIEFQSSB3aXRoIG5vIGNvbmNlcHQgb2YgcmVmZXJlbmNlIGNvdW50
aW5nIG9yIGJsb2Nrcy4KKyAgICBidWZmZXItPm1hcENhbGxiYWNrKHN0YXR1cyk7Cit9CisKK3Zv
aWQgQnVmZmVySW1wbDo6bWFwQXN5bmMoTWFwTW9kZUZsYWdzIG1hcE1vZGVGbGFncywgc3RkOjpv
cHRpb25hbDxTaXplNjQ+IG9mZnNldCwgc3RkOjpvcHRpb25hbDxTaXplNjQ+IHNpemUsIHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPiYmIGNhbGxiYWNrKQoreworICAgIFJlZiBwcm90ZWN0ZWRUaGlzKCp0
aGlzKTsKKworICAgIGF1dG8gYmFja2luZ01hcE1vZGVGbGFncyA9IGNvbnZlcnRNYXBNb2RlRmxh
Z3NUb0JhY2tpbmcobWFwTW9kZUZsYWdzKTsKKworICAgIGF1dG8gdXNlZE9mZnNldCA9IG9mZnNl
dC52YWx1ZV9vcigwKTsKKyAgICBhdXRvIHVzZWRTaXplID0gc2l6ZS52YWx1ZV9vcihXR1BVX1dI
T0xFX1NJWkUpOworCisgICAgbV9jYWxsYmFja3MuYXBwZW5kKFdURk1vdmUoY2FsbGJhY2spKTsK
KworICAgIHdncHVCdWZmZXJNYXBBc3luYyhtX2JhY2tpbmcsIGJhY2tpbmdNYXBNb2RlRmxhZ3Ms
IHVzZWRPZmZzZXQsIHVzZWRTaXplLCAmV2ViR1BVOjptYXBDYWxsYmFjaywgJnByb3RlY3RlZFRo
aXMubGVha1JlZigpKTsgLy8gbGVha1JlZiBpcyBiYWxhbmNlZCBieSBhZG9wdFJlZiBpbiBtYXBD
YWxsYmFjaygpIGFib3ZlLiBXZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSdyZSB1c2luZyBh
IEMgQVBJIHdpdGggbm8gY29uY2VwdCBvZiByZWZlcmVuY2UgY291bnRpbmcgb3IgYmxvY2tzLgor
fQorCit2b2lkIEJ1ZmZlckltcGw6Om1hcENhbGxiYWNrKFdHUFVCdWZmZXJNYXBBc3luY1N0YXR1
cyBzdGF0dXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXR1cyk7CisgICAgYXV0byBjYWxsYmFj
ayA9IG1fY2FsbGJhY2tzLnRha2VGaXJzdCgpOworICAgIGNhbGxiYWNrKCk7Cit9CisKK2F1dG8g
QnVmZmVySW1wbDo6Z2V0TWFwcGVkUmFuZ2Uoc3RkOjpvcHRpb25hbDxTaXplNjQ+IG9mZnNldCwg
c3RkOjpvcHRpb25hbDxTaXplNjQ+IHNpemUpIC0+IE1hcHBlZFJhbmdlCit7CisgICAgYXV0byB1
c2VkT2Zmc2V0ID0gb2Zmc2V0LnZhbHVlX29yKDApOworICAgIGF1dG8gdXNlZFNpemUgPSBzaXpl
LnZhbHVlX29yKFdHUFVfV0hPTEVfU0laRSk7CisgICAgYXV0byogcG9pbnRlciA9IHdncHVCdWZm
ZXJHZXRNYXBwZWRSYW5nZShtX2JhY2tpbmcsIHVzZWRPZmZzZXQsIHVzZWRTaXplKTsKKyAgICBy
ZXR1cm4geyBwb2ludGVyLCB1c2VkU2l6ZSB9OworfQorCit2b2lkIEJ1ZmZlckltcGw6OnVubWFw
KCkKK3sKKyAgICB3Z3B1QnVmZmVyVW5tYXAobV9iYWNraW5nKTsKK30KKwordm9pZCBCdWZmZXJJ
bXBsOjpkZXN0cm95KCkKK3sKKyAgICB3Z3B1QnVmZmVyRGVzdHJveShtX2JhY2tpbmcpOworfQor
Cit2b2lkIEJ1ZmZlckltcGw6OnNldExhYmVsSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBsYWJlbCkK
K3sKKyAgICB3Z3B1QnVmZmVyU2V0TGFiZWwobV9iYWNraW5nLCBsYWJlbC51dGY4KCkuZGF0YSgp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BV
QnVmZmVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1w
bC9XZWJHUFVCdWZmZXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjNmNzVhODYyMDczZDAwNjY1ZTg4Yjhl
Nzc0OTdlZWM4OWUzOWVjNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQnVmZmVySW1wbC5oCkBAIC0wLDAgKzEsNzEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYkdQVUJ1ZmZlci5o
IgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFUuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKwor
bmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworY2xhc3MgQnVmZmVySW1wbCBm
aW5hbCA6IHB1YmxpYyBCdWZmZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8QnVmZmVySW1w
bD4gY3JlYXRlKFdHUFVCdWZmZXIgYnVmZmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgQnVmZmVySW1wbChidWZmZXIpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5CdWZm
ZXJJbXBsKCk7CisKKyAgICBXR1BVQnVmZmVyIGJhY2tpbmcoKSBjb25zdCB7IHJldHVybiBtX2Jh
Y2tpbmc7IH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgdm9pZCBtYXBDYWxsYmFjayhXR1BVQnVm
ZmVyTWFwQXN5bmNTdGF0dXMsIHZvaWQqIHVzZXJkYXRhKTsKKworICAgIEJ1ZmZlckltcGwoV0dQ
VUJ1ZmZlcik7CisKKyAgICBCdWZmZXJJbXBsKGNvbnN0IEJ1ZmZlckltcGwmKSA9IGRlbGV0ZTsK
KyAgICBCdWZmZXJJbXBsKEJ1ZmZlckltcGwmJikgPSBkZWxldGU7CisgICAgQnVmZmVySW1wbCYg
b3BlcmF0b3I9KGNvbnN0IEJ1ZmZlckltcGwmKSA9IGRlbGV0ZTsKKyAgICBCdWZmZXJJbXBsJiBv
cGVyYXRvcj0oQnVmZmVySW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIHZvaWQgbWFwQ2FsbGJhY2so
V0dQVUJ1ZmZlck1hcEFzeW5jU3RhdHVzKTsKKyAgICB2b2lkIG1hcEFzeW5jKE1hcE1vZGVGbGFn
cywgc3RkOjpvcHRpb25hbDxTaXplNjQ+IG9mZnNldCwgc3RkOjpvcHRpb25hbDxTaXplNjQ+IHNp
emVGb3JNYXAsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiYmKSBmaW5hbDsKKyAgICBNYXBwZWRSYW5n
ZSBnZXRNYXBwZWRSYW5nZShzdGQ6Om9wdGlvbmFsPFNpemU2ND4gb2Zmc2V0LCBzdGQ6Om9wdGlv
bmFsPFNpemU2ND4pIGZpbmFsOworICAgIHZvaWQgdW5tYXAoKSBmaW5hbDsKKworICAgIHZvaWQg
ZGVzdHJveSgpIGZpbmFsOworCisgICAgdm9pZCBzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmlu
ZyYpIGZpbmFsOworCisgICAgV0dQVUJ1ZmZlciBtX2JhY2tpbmcgeyBudWxscHRyIH07CisKKyAg
ICBEZXF1ZTxzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4+IG1fY2FsbGJhY2tzOworfTsKKworfSAvLyBu
YW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tbWFuZEJ1ZmZlcklt
cGwuY3BwIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJH
UFVDb21tYW5kQnVmZmVySW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTU2NTlmYzY3YTdiNmQ0NDdmNTFl
YWQwYWViZTk1OWEzZWFkMTU3MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwuY3BwCkBA
IC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwuaCIKKworI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFVF
eHQuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworQ29tbWFuZEJ1
ZmZlckltcGw6OkNvbW1hbmRCdWZmZXJJbXBsKFdHUFVDb21tYW5kQnVmZmVyIGNvbW1hbmRCdWZm
ZXIpCisgICAgOiBtX2JhY2tpbmcoY29tbWFuZEJ1ZmZlcikKK3sKK30KKworQ29tbWFuZEJ1ZmZl
ckltcGw6On5Db21tYW5kQnVmZmVySW1wbCgpCit7CisgICAgd2dwdUNvbW1hbmRCdWZmZXJSZWxl
YXNlKG1fYmFja2luZyk7Cit9CisKK3ZvaWQgQ29tbWFuZEJ1ZmZlckltcGw6OnNldExhYmVsSW50
ZXJuYWwoY29uc3QgU3RyaW5nJiBsYWJlbCkKK3sKKyAgICB3Z3B1Q29tbWFuZEJ1ZmZlclNldExh
YmVsKG1fYmFja2luZywgbGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Q
QUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmggYi9T
b3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbW1hbmRC
dWZmZXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWEyZDdlODg0Y2RmMWNmMTU5NzBjOTNhMGI2YjY4NDYz
MDVlOWI5NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhp
Y3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwuaApAQCAtMCwwICsxLDU5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJXZWJHUFVDb21tYW5kQnVm
ZmVyLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25h
bWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBDb21tYW5kQnVmZmVySW1wbCBmaW5hbCA6IHB1Ymxp
YyBDb21tYW5kQnVmZmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPENvbW1hbmRCdWZmZXJJ
bXBsPiBjcmVhdGUoV0dQVUNvbW1hbmRCdWZmZXIgY29tbWFuZEJ1ZmZlcikKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbW1hbmRCdWZmZXJJbXBsKGNvbW1hbmRCdWZmZXIp
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5Db21tYW5kQnVmZmVySW1wbCgpOworCisgICAgV0dQ
VUNvbW1hbmRCdWZmZXIgYmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitw
cml2YXRlOgorICAgIENvbW1hbmRCdWZmZXJJbXBsKFdHUFVDb21tYW5kQnVmZmVyKTsKKworICAg
IENvbW1hbmRCdWZmZXJJbXBsKGNvbnN0IENvbW1hbmRCdWZmZXJJbXBsJikgPSBkZWxldGU7Cisg
ICAgQ29tbWFuZEJ1ZmZlckltcGwoQ29tbWFuZEJ1ZmZlckltcGwmJikgPSBkZWxldGU7CisgICAg
Q29tbWFuZEJ1ZmZlckltcGwmIG9wZXJhdG9yPShjb25zdCBDb21tYW5kQnVmZmVySW1wbCYpID0g
ZGVsZXRlOworICAgIENvbW1hbmRCdWZmZXJJbXBsJiBvcGVyYXRvcj0oQ29tbWFuZEJ1ZmZlcklt
cGwmJikgPSBkZWxldGU7CisKKyAgICB2b2lkIHNldExhYmVsSW50ZXJuYWwoY29uc3QgU3RyaW5n
JikgZmluYWw7CisKKyAgICBXR1BVQ29tbWFuZEJ1ZmZlciBtX2JhY2tpbmcgeyBudWxscHRyIH07
Cit9OworCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVD
b21tYW5kRW5jb2RlckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9X
ZWJHUFUvSW1wbC9XZWJHUFVDb21tYW5kRW5jb2RlckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYyMjMy
NjRmYzU3Mjg4ZDVmZDk1YmY1MzY1MzUyYTcxYWNlZTk4MDQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbW1hbmRF
bmNvZGVySW1wbC5jcHAKQEAgLTAsMCArMSwyNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViR1BVQ29tbWFuZEVuY29kZXJJbXBsLmgiCisKKyNpbmNs
dWRlICJXZWJHUFVCdWZmZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVQ29tbWFuZEJ1ZmZlcklt
cGwuaCIKKyNpbmNsdWRlICJXZWJHUFVDb21wdXRlUGFzc0VuY29kZXJJbXBsLmgiCisjaW5jbHVk
ZSAiV2ViR1BVQ29udmVydFRvQmFja2luZy5oIgorI2luY2x1ZGUgIldlYkdQVVF1ZXJ5U2V0SW1w
bC5oIgorI2luY2x1ZGUgIldlYkdQVVJlbmRlclBhc3NFbmNvZGVySW1wbC5oIgorI2luY2x1ZGUg
IldlYkdQVVRleHR1cmVJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmgi
CisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVz
cGFjZSBXZWJHUFUgeworCitDb21tYW5kRW5jb2RlckltcGw6OkNvbW1hbmRFbmNvZGVySW1wbChX
R1BVQ29tbWFuZEVuY29kZXIgQ29tbWFuZEVuY29kZXIpCisgICAgOiBtX2JhY2tpbmcoQ29tbWFu
ZEVuY29kZXIpCit7Cit9CisKK0NvbW1hbmRFbmNvZGVySW1wbDo6fkNvbW1hbmRFbmNvZGVySW1w
bCgpCit7CisgICAgd2dwdUNvbW1hbmRFbmNvZGVyUmVsZWFzZShtX2JhY2tpbmcpOworfQorCitS
ZWY8UmVuZGVyUGFzc0VuY29kZXI+IENvbW1hbmRFbmNvZGVySW1wbDo6YmVnaW5SZW5kZXJQYXNz
KGNvbnN0IFJlbmRlclBhc3NEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIFZlY3RvcjxX
R1BVUmVuZGVyUGFzc0NvbG9yQXR0YWNobWVudD4gY29sb3JBdHRhY2htZW50czsKKyAgICBmb3Ig
KGNvbnN0IGF1dG8mIGNvbG9yQXR0YWNobWVudCA6IGRlc2NyaXB0b3IuY29sb3JBdHRhY2htZW50
cykgeworICAgICAgICBjb2xvckF0dGFjaG1lbnRzLmFwcGVuZChXR1BVUmVuZGVyUGFzc0NvbG9y
QXR0YWNobWVudCB7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBUZXh0dXJlVmlld0lt
cGwmPihjb2xvckF0dGFjaG1lbnQudmlldykuYmFja2luZygpLAorICAgICAgICAgICAgY29sb3JB
dHRhY2htZW50LnJlc29sdmVUYXJnZXQgPyBzdGF0aWNfY2FzdDxjb25zdCBUZXh0dXJlVmlld0lt
cGwmPigqY29sb3JBdHRhY2htZW50LnJlc29sdmVUYXJnZXQpLmJhY2tpbmcoKSA6IG51bGxwdHIs
CisgICAgICAgICAgICBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPExvYWRPcD4oY29sb3JBdHRhY2ht
ZW50LmxvYWRWYWx1ZSkgPyBjb252ZXJ0VG9CYWNraW5nKHN0ZDo6Z2V0PExvYWRPcD4oY29sb3JB
dHRhY2htZW50LmxvYWRWYWx1ZSkpIDogV0dQVUxvYWRPcF9DbGVhciwKKyAgICAgICAgICAgIGNv
bnZlcnRUb0JhY2tpbmcoY29sb3JBdHRhY2htZW50LnN0b3JlT3ApLAorICAgICAgICAgICAgV1RG
Ojpzd2l0Y2hPbihjb2xvckF0dGFjaG1lbnQubG9hZFZhbHVlLCBbXSAoTG9hZE9wKSAtPiBXR1BV
Q29sb3IgeworICAgICAgICAgICAgICAgIHJldHVybiB7IDAsIDAsIDAsIDAgfTsKKyAgICAgICAg
ICAgIH0sIFtdIChjb25zdCBWZWN0b3I8ZG91YmxlPiYgdmVjdG9yKSAtPiBXR1BVQ29sb3Igewor
ICAgICAgICAgICAgICAgIHJldHVybiBXR1BVQ29sb3IgeworICAgICAgICAgICAgICAgICAgICB2
ZWN0b3Iuc2l6ZSgpID4gMCA/IHZlY3RvclswXSA6IDAsCisgICAgICAgICAgICAgICAgICAgIHZl
Y3Rvci5zaXplKCkgPiAxID8gdmVjdG9yWzFdIDogMCwKKyAgICAgICAgICAgICAgICAgICAgdmVj
dG9yLnNpemUoKSA+IDIgPyB2ZWN0b3JbMl0gOiAwLAorICAgICAgICAgICAgICAgICAgICB2ZWN0
b3Iuc2l6ZSgpID4gMyA/IHZlY3RvclszXSA6IDAsCisgICAgICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgIH0sIFtdIChjb25zdCBDb2xvckRpY3QmIGNvbG9yKSAtPiBXR1BVQ29sb3IgeworICAg
ICAgICAgICAgICAgIHJldHVybiBXR1BVQ29sb3IgeworICAgICAgICAgICAgICAgICAgICBjb2xv
ci5yLAorICAgICAgICAgICAgICAgICAgICBjb2xvci5nLAorICAgICAgICAgICAgICAgICAgICBj
b2xvci5iLAorICAgICAgICAgICAgICAgICAgICBjb2xvci5hLAorICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICB9KSwKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25h
bDxXR1BVUmVuZGVyUGFzc0RlcHRoU3RlbmNpbEF0dGFjaG1lbnQ+IGRlcHRoU3RlbmNpbEF0dGFj
aG1lbnQ7CisgICAgaWYgKGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsQXR0YWNobWVudCkgeworICAg
ICAgICBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gV0dQVVJlbmRlclBhc3NEZXB0aFN0ZW5jaWxB
dHRhY2htZW50IHsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IFRleHR1cmVWaWV3SW1w
bCY+KGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+dmlldykuYmFja2luZygpLAor
ICAgICAgICAgICAgc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxMb2FkT3A+KGRlc2NyaXB0b3IuZGVw
dGhTdGVuY2lsQXR0YWNobWVudC0+ZGVwdGhMb2FkVmFsdWUpID8gY29udmVydFRvQmFja2luZyhz
dGQ6OmdldDxMb2FkT3A+KGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+ZGVwdGhM
b2FkVmFsdWUpKSA6IFdHUFVMb2FkT3BfQ2xlYXIsCisgICAgICAgICAgICBjb252ZXJ0VG9CYWNr
aW5nKGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+ZGVwdGhTdG9yZU9wKSwKKyAg
ICAgICAgICAgIFdURjo6c3dpdGNoT24oZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWxBdHRhY2htZW50
LT5kZXB0aExvYWRWYWx1ZSwgW10gKExvYWRPcCkgLT4gZmxvYXQgeworICAgICAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICAgICAgfSwgW10gKGZsb2F0IGNsZWFyRGVwdGgpIC0+IGZsb2F0
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xlYXJEZXB0aDsKKyAgICAgICAgICAgIH0pLAor
ICAgICAgICAgICAgZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWxBdHRhY2htZW50LT5kZXB0aFJlYWRP
bmx5LAorICAgICAgICAgICAgc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxMb2FkT3A+KGRlc2NyaXB0
b3IuZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+c3RlbmNpbExvYWRWYWx1ZSkgPyBjb252ZXJ0VG9C
YWNraW5nKHN0ZDo6Z2V0PExvYWRPcD4oZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWxBdHRhY2htZW50
LT5zdGVuY2lsTG9hZFZhbHVlKSkgOiBXR1BVTG9hZE9wX0NsZWFyLAorICAgICAgICAgICAgY29u
dmVydFRvQmFja2luZyhkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQtPnN0ZW5jaWxT
dG9yZU9wKSwKKyAgICAgICAgICAgIFdURjo6c3dpdGNoT24oZGVzY3JpcHRvci5kZXB0aFN0ZW5j
aWxBdHRhY2htZW50LT5zdGVuY2lsTG9hZFZhbHVlLCBbXSAoTG9hZE9wKSAtPiB1aW50MzJfdCB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9LCBbXSAoU3RlbmNpbFZh
bHVlIGNsZWFyU3RlbmNpbCkgLT4gdWludDMyX3QgeworICAgICAgICAgICAgICAgIHJldHVybiBj
bGVhclN0ZW5jaWw7CisgICAgICAgICAgICB9KSwKKyAgICAgICAgICAgIGRlc2NyaXB0b3IuZGVw
dGhTdGVuY2lsQXR0YWNobWVudC0+c3RlbmNpbFJlYWRPbmx5LAorICAgICAgICB9OworICAgIH0K
KworICAgIGF1dG8gbGFiZWwgPSBkZXNjcmlwdG9yLmxhYmVsLnV0ZjgoKTsKKworICAgIFdHUFVS
ZW5kZXJQYXNzRGVzY3JpcHRvciBiYWNraW5nRGVzY3JpcHRvciB7CisgICAgICAgIG51bGxwdHIs
CisgICAgICAgIGxhYmVsLmRhdGEoKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNv
bG9yQXR0YWNobWVudHMuc2l6ZSgpKSwKKyAgICAgICAgY29sb3JBdHRhY2htZW50cy5kYXRhKCks
CisgICAgICAgIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPyAmZGVwdGhTdGVuY2lsQXR0YWNobWVu
dC52YWx1ZSgpIDogbnVsbHB0ciwKKyAgICAgICAgZGVzY3JpcHRvci5vY2NsdXNpb25RdWVyeVNl
dCA/IHN0YXRpY19jYXN0PGNvbnN0IFF1ZXJ5U2V0SW1wbCY+KCpkZXNjcmlwdG9yLm9jY2x1c2lv
blF1ZXJ5U2V0KS5iYWNraW5nKCkgOiBudWxscHRyLAorICAgIH07CisKKyAgICByZXR1cm4gUmVu
ZGVyUGFzc0VuY29kZXJJbXBsOjpjcmVhdGUod2dwdUNvbW1hbmRFbmNvZGVyQmVnaW5SZW5kZXJQ
YXNzKG1fYmFja2luZywgJmJhY2tpbmdEZXNjcmlwdG9yKSk7Cit9CisKK1JlZjxDb21wdXRlUGFz
c0VuY29kZXI+IENvbW1hbmRFbmNvZGVySW1wbDo6YmVnaW5Db21wdXRlUGFzcyhjb25zdCBzdGQ6
Om9wdGlvbmFsPENvbXB1dGVQYXNzRGVzY3JpcHRvcj4mIGRlc2NyaXB0b3IpCit7CisgICAgQ1N0
cmluZyBsYWJlbCA9IGRlc2NyaXB0b3IgPyBkZXNjcmlwdG9yLT5sYWJlbC51dGY4KCkgOiBDU3Ry
aW5nKCIiKTsKKworICAgIFdHUFVDb21wdXRlUGFzc0Rlc2NyaXB0b3IgYmFja2luZ0Rlc2NyaXB0
b3IgeworICAgICAgICBudWxscHRyLAorICAgICAgICBsYWJlbC5kYXRhKCksCisgICAgfTsKKwor
ICAgIHJldHVybiBDb21wdXRlUGFzc0VuY29kZXJJbXBsOjpjcmVhdGUod2dwdUNvbW1hbmRFbmNv
ZGVyQmVnaW5Db21wdXRlUGFzcyhtX2JhY2tpbmcsICZiYWNraW5nRGVzY3JpcHRvcikpOworfQor
Cit2b2lkIENvbW1hbmRFbmNvZGVySW1wbDo6Y29weUJ1ZmZlclRvQnVmZmVyKAorICAgIGNvbnN0
IEJ1ZmZlciYgc291cmNlLAorICAgIFNpemU2NCBzb3VyY2VPZmZzZXQsCisgICAgY29uc3QgQnVm
ZmVyJiBkZXN0aW5hdGlvbiwKKyAgICBTaXplNjQgZGVzdGluYXRpb25PZmZzZXQsCisgICAgU2l6
ZTY0IHNpemUpCit7CisgICAgd2dwdUNvbW1hbmRFbmNvZGVyQ29weUJ1ZmZlclRvQnVmZmVyKG1f
YmFja2luZywgc3RhdGljX2Nhc3Q8Y29uc3QgQnVmZmVySW1wbCY+KHNvdXJjZSkuYmFja2luZygp
LCBzb3VyY2VPZmZzZXQsIHN0YXRpY19jYXN0PGNvbnN0IEJ1ZmZlckltcGwmPihkZXN0aW5hdGlv
bikuYmFja2luZygpLCBkZXN0aW5hdGlvbk9mZnNldCwgc2l6ZSk7Cit9CisKK3ZvaWQgQ29tbWFu
ZEVuY29kZXJJbXBsOjpjb3B5QnVmZmVyVG9UZXh0dXJlKAorICAgIGNvbnN0IEltYWdlQ29weUJ1
ZmZlciYgc291cmNlLAorICAgIGNvbnN0IEltYWdlQ29weVRleHR1cmUmIGRlc3RpbmF0aW9uLAor
ICAgIGNvbnN0IEV4dGVudDNEJiBjb3B5U2l6ZSkKK3sKKyAgICBXR1BVSW1hZ2VDb3B5QnVmZmVy
IGJhY2tpbmdTb3VyY2UgeworICAgICAgICBudWxscHRyLCB7CisgICAgICAgICAgICBudWxscHRy
LAorICAgICAgICAgICAgc291cmNlLm9mZnNldCwKKyAgICAgICAgICAgIHNvdXJjZS5ieXRlc1Bl
clJvdy52YWx1ZV9vcigwKSwKKyAgICAgICAgICAgIHNvdXJjZS5yb3dzUGVySW1hZ2UudmFsdWVf
b3IoMCksCisgICAgICAgIH0sCisgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IEJ1ZmZlckltcGwm
Pihzb3VyY2UuYnVmZmVyKS5iYWNraW5nKCksCisgICAgfTsKKworICAgIFdHUFVJbWFnZUNvcHlU
ZXh0dXJlIGJhY2tpbmdEZXN0aW5hdGlvbiB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIHN0
YXRpY19jYXN0PGNvbnN0IFRleHR1cmVJbXBsJj4oZGVzdGluYXRpb24udGV4dHVyZSkuYmFja2lu
ZygpLAorICAgICAgICBkZXN0aW5hdGlvbi5taXBMZXZlbCwKKyAgICAgICAgZGVzdGluYXRpb24u
b3JpZ2luID8gY29udmVydFRvQmFja2luZygqZGVzdGluYXRpb24ub3JpZ2luKSA6IFdHUFVPcmln
aW4zRCB7IDAsIDAsIDAgfSwKKyAgICAgICAgY29udmVydFRvQmFja2luZyhkZXN0aW5hdGlvbi5h
c3BlY3QpLAorICAgIH07CisKKyAgICBXR1BVRXh0ZW50M0QgYmFja2luZ0NvcHlTaXplID0gY29u
dmVydFRvQmFja2luZyhjb3B5U2l6ZSk7CisKKyAgICB3Z3B1Q29tbWFuZEVuY29kZXJDb3B5QnVm
ZmVyVG9UZXh0dXJlKG1fYmFja2luZywgJmJhY2tpbmdTb3VyY2UsICZiYWNraW5nRGVzdGluYXRp
b24sICZiYWNraW5nQ29weVNpemUpOworfQorCit2b2lkIENvbW1hbmRFbmNvZGVySW1wbDo6Y29w
eVRleHR1cmVUb0J1ZmZlcigKKyAgICBjb25zdCBJbWFnZUNvcHlUZXh0dXJlJiBzb3VyY2UsCisg
ICAgY29uc3QgSW1hZ2VDb3B5QnVmZmVyJiBkZXN0aW5hdGlvbiwKKyAgICBjb25zdCBFeHRlbnQz
RCYgY29weVNpemUpCit7CisgICAgV0dQVUltYWdlQ29weVRleHR1cmUgYmFja2luZ1NvdXJjZSB7
CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IFRleHR1cmVJbXBs
Jj4oc291cmNlLnRleHR1cmUpLmJhY2tpbmcoKSwKKyAgICAgICAgc291cmNlLm1pcExldmVsLAor
ICAgICAgICBzb3VyY2Uub3JpZ2luID8gY29udmVydFRvQmFja2luZygqc291cmNlLm9yaWdpbikg
OiBXR1BVT3JpZ2luM0QgeyAwLCAwLCAwIH0sCisgICAgICAgIGNvbnZlcnRUb0JhY2tpbmcoc291
cmNlLmFzcGVjdCksCisgICAgfTsKKworICAgIFdHUFVJbWFnZUNvcHlCdWZmZXIgYmFja2luZ0Rl
c3RpbmF0aW9uIHsKKyAgICAgICAgbnVsbHB0ciwgeworICAgICAgICAgICAgbnVsbHB0ciwKKyAg
ICAgICAgICAgIGRlc3RpbmF0aW9uLm9mZnNldCwKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uLmJ5
dGVzUGVyUm93LnZhbHVlX29yKDApLAorICAgICAgICAgICAgZGVzdGluYXRpb24ucm93c1Blcklt
YWdlLnZhbHVlX29yKDApLAorICAgICAgICB9LAorICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBC
dWZmZXJJbXBsJj4oZGVzdGluYXRpb24uYnVmZmVyKS5iYWNraW5nKCksCisgICAgfTsKKworICAg
IFdHUFVFeHRlbnQzRCBiYWNraW5nQ29weVNpemUgPSBjb252ZXJ0VG9CYWNraW5nKGNvcHlTaXpl
KTsKKworICAgIHdncHVDb21tYW5kRW5jb2RlckNvcHlUZXh0dXJlVG9CdWZmZXIobV9iYWNraW5n
LCAmYmFja2luZ1NvdXJjZSwgJmJhY2tpbmdEZXN0aW5hdGlvbiwgJmJhY2tpbmdDb3B5U2l6ZSk7
Cit9CisKK3ZvaWQgQ29tbWFuZEVuY29kZXJJbXBsOjpjb3B5VGV4dHVyZVRvVGV4dHVyZSgKKyAg
ICBjb25zdCBJbWFnZUNvcHlUZXh0dXJlJiBzb3VyY2UsCisgICAgY29uc3QgSW1hZ2VDb3B5VGV4
dHVyZSYgZGVzdGluYXRpb24sCisgICAgY29uc3QgRXh0ZW50M0QmIGNvcHlTaXplKQoreworICAg
IFdHUFVJbWFnZUNvcHlUZXh0dXJlIGJhY2tpbmdTb3VyY2UgeworICAgICAgICBudWxscHRyLAor
ICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBUZXh0dXJlSW1wbCY+KHNvdXJjZS50ZXh0dXJlKS5i
YWNraW5nKCksCisgICAgICAgIHNvdXJjZS5taXBMZXZlbCwKKyAgICAgICAgc291cmNlLm9yaWdp
biA/IGNvbnZlcnRUb0JhY2tpbmcoKnNvdXJjZS5vcmlnaW4pIDogV0dQVU9yaWdpbjNEIHsgMCwg
MCwgMCB9LAorICAgICAgICBjb252ZXJ0VG9CYWNraW5nKHNvdXJjZS5hc3BlY3QpLAorICAgIH07
CisKKyAgICBXR1BVSW1hZ2VDb3B5VGV4dHVyZSBiYWNraW5nRGVzdGluYXRpb24geworICAgICAg
ICBudWxscHRyLAorICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBUZXh0dXJlSW1wbCY+KGRlc3Rp
bmF0aW9uLnRleHR1cmUpLmJhY2tpbmcoKSwKKyAgICAgICAgZGVzdGluYXRpb24ubWlwTGV2ZWws
CisgICAgICAgIGRlc3RpbmF0aW9uLm9yaWdpbiA/IGNvbnZlcnRUb0JhY2tpbmcoKmRlc3RpbmF0
aW9uLm9yaWdpbikgOiBXR1BVT3JpZ2luM0QgeyAwLCAwLCAwIH0sCisgICAgICAgIGNvbnZlcnRU
b0JhY2tpbmcoZGVzdGluYXRpb24uYXNwZWN0KSwKKyAgICB9OworCisgICAgV0dQVUV4dGVudDNE
IGJhY2tpbmdDb3B5U2l6ZSA9IGNvbnZlcnRUb0JhY2tpbmcoY29weVNpemUpOworCisgICAgd2dw
dUNvbW1hbmRFbmNvZGVyQ29weVRleHR1cmVUb1RleHR1cmUobV9iYWNraW5nLCAmYmFja2luZ1Nv
dXJjZSwgJmJhY2tpbmdEZXN0aW5hdGlvbiwgJmJhY2tpbmdDb3B5U2l6ZSk7Cit9CisKK3ZvaWQg
Q29tbWFuZEVuY29kZXJJbXBsOjpmaWxsQnVmZmVyKAorICAgIGNvbnN0IEJ1ZmZlciYgZGVzdGlu
YXRpb24sCisgICAgU2l6ZTY0IGRlc3RpbmF0aW9uT2Zmc2V0LAorICAgIFNpemU2NCBzaXplKQor
eworICAgIHdncHVDb21tYW5kRW5jb2RlckZpbGxCdWZmZXIobV9iYWNraW5nLCBzdGF0aWNfY2Fz
dDxjb25zdCBCdWZmZXJJbXBsJj4oZGVzdGluYXRpb24pLmJhY2tpbmcoKSwgZGVzdGluYXRpb25P
ZmZzZXQsIHNpemUpOworfQorCit2b2lkIENvbW1hbmRFbmNvZGVySW1wbDo6cHVzaERlYnVnR3Jv
dXAoU3RyaW5nJiYgZ3JvdXBMYWJlbCkKK3sKKyAgICB3Z3B1Q29tbWFuZEVuY29kZXJQdXNoRGVi
dWdHcm91cChtX2JhY2tpbmcsIGdyb3VwTGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQg
Q29tbWFuZEVuY29kZXJJbXBsOjpwb3BEZWJ1Z0dyb3VwKCkKK3sKKyAgICB3Z3B1Q29tbWFuZEVu
Y29kZXJQb3BEZWJ1Z0dyb3VwKG1fYmFja2luZyk7Cit9CisKK3ZvaWQgQ29tbWFuZEVuY29kZXJJ
bXBsOjppbnNlcnREZWJ1Z01hcmtlcihTdHJpbmcmJiBtYXJrZXJMYWJlbCkKK3sKKyAgICB3Z3B1
Q29tbWFuZEVuY29kZXJJbnNlcnREZWJ1Z01hcmtlcihtX2JhY2tpbmcsIG1hcmtlckxhYmVsLnV0
ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIENvbW1hbmRFbmNvZGVySW1wbDo6d3JpdGVUaW1lc3Rh
bXAoY29uc3QgUXVlcnlTZXQmIHF1ZXJ5U2V0LCBTaXplMzIgcXVlcnlJbmRleCkKK3sKKyAgICB3
Z3B1Q29tbWFuZEVuY29kZXJXcml0ZVRpbWVzdGFtcChtX2JhY2tpbmcsIHN0YXRpY19jYXN0PGNv
bnN0IFF1ZXJ5U2V0SW1wbCY+KHF1ZXJ5U2V0KS5iYWNraW5nKCksIHF1ZXJ5SW5kZXgpOworfQor
Cit2b2lkIENvbW1hbmRFbmNvZGVySW1wbDo6cmVzb2x2ZVF1ZXJ5U2V0KAorICAgIGNvbnN0IFF1
ZXJ5U2V0JiBxdWVyeVNldCwKKyAgICBTaXplMzIgZmlyc3RRdWVyeSwKKyAgICBTaXplMzIgcXVl
cnlDb3VudCwKKyAgICBjb25zdCBCdWZmZXImIGRlc3RpbmF0aW9uLAorICAgIFNpemU2NCBkZXN0
aW5hdGlvbk9mZnNldCkKK3sKKyAgICB3Z3B1Q29tbWFuZEVuY29kZXJSZXNvbHZlUXVlcnlTZXQo
bV9iYWNraW5nLCBzdGF0aWNfY2FzdDxjb25zdCBRdWVyeVNldEltcGwmPihxdWVyeVNldCkuYmFj
a2luZygpLCBmaXJzdFF1ZXJ5LCBxdWVyeUNvdW50LCBzdGF0aWNfY2FzdDxjb25zdCBCdWZmZXJJ
bXBsJj4oZGVzdGluYXRpb24pLmJhY2tpbmcoKSwgZGVzdGluYXRpb25PZmZzZXQpOworfQorCitS
ZWY8Q29tbWFuZEJ1ZmZlcj4gQ29tbWFuZEVuY29kZXJJbXBsOjpmaW5pc2goY29uc3QgQ29tbWFu
ZEJ1ZmZlckRlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgYXV0byBsYWJlbCA9IGRlc2Ny
aXB0b3IubGFiZWwudXRmOCgpOworCisgICAgV0dQVUNvbW1hbmRCdWZmZXJEZXNjcmlwdG9yIGJh
Y2tpbmdEZXNjcmlwdG9yIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgbGFiZWwuZGF0YSgp
LAorICAgIH07CisKKyAgICByZXR1cm4gQ29tbWFuZEJ1ZmZlckltcGw6OmNyZWF0ZSh3Z3B1Q29t
bWFuZEVuY29kZXJGaW5pc2gobV9iYWNraW5nLCAmYmFja2luZ0Rlc2NyaXB0b3IpKTsKK30KKwor
dm9pZCBDb21tYW5kRW5jb2RlckltcGw6OnNldExhYmVsSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBs
YWJlbCkKK3sKKyAgICB3Z3B1Q29tbWFuZEVuY29kZXJTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVs
LnV0ZjgoKS5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNl
IFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJH
UFUvSW1wbC9XZWJHUFVDb21tYW5kRW5jb2RlckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tbWFuZEVuY29kZXJJbXBsLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZjgwYWFhYzg2MDcxMmU0Yzc1YWNlMTkxNzcxNzZjNDE1MjlhYTgyYgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2Vi
R1BVQ29tbWFuZEVuY29kZXJJbXBsLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYkdQVUNvbW1hbmRFbmNvZGVyLmgiCisjaW5jbHVk
ZSA8V2ViR1BVL1dlYkdQVS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUg
eworCitjbGFzcyBDb21tYW5kRW5jb2RlckltcGwgZmluYWwgOiBwdWJsaWMgQ29tbWFuZEVuY29k
ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8Q29tbWFuZEVuY29kZXJJbXBsPiBjcmVhdGUo
V0dQVUNvbW1hbmRFbmNvZGVyIENvbW1hbmRFbmNvZGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgQ29tbWFuZEVuY29kZXJJbXBsKENvbW1hbmRFbmNvZGVyKSk7CisgICAg
fQorCisgICAgdmlydHVhbCB+Q29tbWFuZEVuY29kZXJJbXBsKCk7CisKKyAgICBXR1BVQ29tbWFu
ZEVuY29kZXIgYmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRl
OgorICAgIENvbW1hbmRFbmNvZGVySW1wbChXR1BVQ29tbWFuZEVuY29kZXIpOworCisgICAgQ29t
bWFuZEVuY29kZXJJbXBsKGNvbnN0IENvbW1hbmRFbmNvZGVySW1wbCYpID0gZGVsZXRlOworICAg
IENvbW1hbmRFbmNvZGVySW1wbChDb21tYW5kRW5jb2RlckltcGwmJikgPSBkZWxldGU7CisgICAg
Q29tbWFuZEVuY29kZXJJbXBsJiBvcGVyYXRvcj0oY29uc3QgQ29tbWFuZEVuY29kZXJJbXBsJikg
PSBkZWxldGU7CisgICAgQ29tbWFuZEVuY29kZXJJbXBsJiBvcGVyYXRvcj0oQ29tbWFuZEVuY29k
ZXJJbXBsJiYpID0gZGVsZXRlOworCisgICAgUmVmPFJlbmRlclBhc3NFbmNvZGVyPiBiZWdpblJl
bmRlclBhc3MoY29uc3QgUmVuZGVyUGFzc0Rlc2NyaXB0b3ImKSBmaW5hbDsKKyAgICBSZWY8Q29t
cHV0ZVBhc3NFbmNvZGVyPiBiZWdpbkNvbXB1dGVQYXNzKGNvbnN0IHN0ZDo6b3B0aW9uYWw8Q29t
cHV0ZVBhc3NEZXNjcmlwdG9yPiYpIGZpbmFsOworCisgICAgdm9pZCBjb3B5QnVmZmVyVG9CdWZm
ZXIoCisgICAgICAgIGNvbnN0IEJ1ZmZlciYgc291cmNlLAorICAgICAgICBTaXplNjQgc291cmNl
T2Zmc2V0LAorICAgICAgICBjb25zdCBCdWZmZXImIGRlc3RpbmF0aW9uLAorICAgICAgICBTaXpl
NjQgZGVzdGluYXRpb25PZmZzZXQsCisgICAgICAgIFNpemU2NCkgZmluYWw7CisKKyAgICB2b2lk
IGNvcHlCdWZmZXJUb1RleHR1cmUoCisgICAgICAgIGNvbnN0IEltYWdlQ29weUJ1ZmZlciYgc291
cmNlLAorICAgICAgICBjb25zdCBJbWFnZUNvcHlUZXh0dXJlJiBkZXN0aW5hdGlvbiwKKyAgICAg
ICAgY29uc3QgRXh0ZW50M0QmIGNvcHlTaXplKSBmaW5hbDsKKworICAgIHZvaWQgY29weVRleHR1
cmVUb0J1ZmZlcigKKyAgICAgICAgY29uc3QgSW1hZ2VDb3B5VGV4dHVyZSYgc291cmNlLAorICAg
ICAgICBjb25zdCBJbWFnZUNvcHlCdWZmZXImIGRlc3RpbmF0aW9uLAorICAgICAgICBjb25zdCBF
eHRlbnQzRCYgY29weVNpemUpIGZpbmFsOworCisgICAgdm9pZCBjb3B5VGV4dHVyZVRvVGV4dHVy
ZSgKKyAgICAgICAgY29uc3QgSW1hZ2VDb3B5VGV4dHVyZSYgc291cmNlLAorICAgICAgICBjb25z
dCBJbWFnZUNvcHlUZXh0dXJlJiBkZXN0aW5hdGlvbiwKKyAgICAgICAgY29uc3QgRXh0ZW50M0Qm
IGNvcHlTaXplKSBmaW5hbDsKKworICAgIHZvaWQgZmlsbEJ1ZmZlcigKKyAgICAgICAgY29uc3Qg
QnVmZmVyJiBkZXN0aW5hdGlvbiwKKyAgICAgICAgU2l6ZTY0IGRlc3RpbmF0aW9uT2Zmc2V0LAor
ICAgICAgICBTaXplNjQpIGZpbmFsOworCisgICAgdm9pZCBwdXNoRGVidWdHcm91cChTdHJpbmcm
JiBncm91cExhYmVsKSBmaW5hbDsKKyAgICB2b2lkIHBvcERlYnVnR3JvdXAoKSBmaW5hbDsKKyAg
ICB2b2lkIGluc2VydERlYnVnTWFya2VyKFN0cmluZyYmIG1hcmtlckxhYmVsKSBmaW5hbDsKKwor
ICAgIHZvaWQgd3JpdGVUaW1lc3RhbXAoY29uc3QgUXVlcnlTZXQmLCBTaXplMzIgcXVlcnlJbmRl
eCkgZmluYWw7CisKKyAgICB2b2lkIHJlc29sdmVRdWVyeVNldCgKKyAgICAgICAgY29uc3QgUXVl
cnlTZXQmLAorICAgICAgICBTaXplMzIgZmlyc3RRdWVyeSwKKyAgICAgICAgU2l6ZTMyIHF1ZXJ5
Q291bnQsCisgICAgICAgIGNvbnN0IEJ1ZmZlciYgZGVzdGluYXRpb24sCisgICAgICAgIFNpemU2
NCBkZXN0aW5hdGlvbk9mZnNldCkgZmluYWw7CisKKyAgICBSZWY8Q29tbWFuZEJ1ZmZlcj4gZmlu
aXNoKGNvbnN0IENvbW1hbmRCdWZmZXJEZXNjcmlwdG9yJikgZmluYWw7CisKKyAgICB2b2lkIHNl
dExhYmVsSW50ZXJuYWwoY29uc3QgU3RyaW5nJikgZmluYWw7CisKKyAgICBXR1BVQ29tbWFuZEVu
Y29kZXIgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9
IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwv
Z3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbXB1dGVQ
YXNzRW5jb2RlckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFiYzE2ZDQ0YThhMzRhOThiMTVhZGMxMmI5
NzBiZTE4YmE4ZTJlYmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbXB1dGVQYXNzRW5jb2RlckltcGwuY3BwCkBA
IC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYkdQVUNvbXB1dGVQYXNzRW5jb2RlckltcGwuaCIKKworI2luY2x1ZGUgIldlYkdQVUJp
bmRHcm91cEltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVCdWZmZXJJbXBsLmgiCisjaW5jbHVkZSAi
V2ViR1BVQ29tcHV0ZVBpcGVsaW5lSW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVVF1ZXJ5U2V0SW1w
bC5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFVFeHQuaD4KKworbmFtZXNwYWNlIFBBTCB7Citu
YW1lc3BhY2UgV2ViR1BVIHsKKworQ29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6Q29tcHV0ZVBhc3NF
bmNvZGVySW1wbChXR1BVQ29tcHV0ZVBhc3NFbmNvZGVyIGNvbXB1dGVQYXNzRW5jb2RlcikKKyAg
ICA6IG1fYmFja2luZyhjb21wdXRlUGFzc0VuY29kZXIpCit7Cit9CisKK0NvbXB1dGVQYXNzRW5j
b2RlckltcGw6On5Db21wdXRlUGFzc0VuY29kZXJJbXBsKCkKK3sKKyAgICB3Z3B1Q29tcHV0ZVBh
c3NFbmNvZGVyUmVsZWFzZShtX2JhY2tpbmcpOworfQorCit2b2lkIENvbXB1dGVQYXNzRW5jb2Rl
ckltcGw6OnNldFBpcGVsaW5lKGNvbnN0IENvbXB1dGVQaXBlbGluZSYgY29tcHV0ZVBpcGVsaW5l
KQoreworICAgIHdncHVDb21wdXRlUGFzc0VuY29kZXJTZXRQaXBlbGluZShtX2JhY2tpbmcsIHN0
YXRpY19jYXN0PGNvbnN0IENvbXB1dGVQaXBlbGluZUltcGwmPihjb21wdXRlUGlwZWxpbmUpLmJh
Y2tpbmcoKSk7Cit9CisKK3ZvaWQgQ29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6ZGlzcGF0Y2goU2l6
ZTMyIHgsIHN0ZDo6b3B0aW9uYWw8U2l6ZTMyPiB5LCBzdGQ6Om9wdGlvbmFsPFNpemUzMj4geikK
K3sKKyAgICB3Z3B1Q29tcHV0ZVBhc3NFbmNvZGVyRGlzcGF0Y2gobV9iYWNraW5nLCB4LCB5LnZh
bHVlX29yKDEpLCB6LnZhbHVlX29yKDEpKTsKK30KKwordm9pZCBDb21wdXRlUGFzc0VuY29kZXJJ
bXBsOjpkaXNwYXRjaEluZGlyZWN0KGNvbnN0IEJ1ZmZlciYgaW5kaXJlY3RCdWZmZXIsIFNpemU2
NCBpbmRpcmVjdE9mZnNldCkKK3sKKyAgICB3Z3B1Q29tcHV0ZVBhc3NFbmNvZGVyRGlzcGF0Y2hJ
bmRpcmVjdChtX2JhY2tpbmcsIHN0YXRpY19jYXN0PGNvbnN0IEJ1ZmZlckltcGwmPihpbmRpcmVj
dEJ1ZmZlcikuYmFja2luZygpLCBpbmRpcmVjdE9mZnNldCk7Cit9CisKK3ZvaWQgQ29tcHV0ZVBh
c3NFbmNvZGVySW1wbDo6YmVnaW5QaXBlbGluZVN0YXRpc3RpY3NRdWVyeShjb25zdCBRdWVyeVNl
dCYgcXVlcnlTZXQsIFNpemUzMiBxdWVyeUluZGV4KQoreworICAgIHdncHVDb21wdXRlUGFzc0Vu
Y29kZXJCZWdpblBpcGVsaW5lU3RhdGlzdGljc1F1ZXJ5KG1fYmFja2luZywgc3RhdGljX2Nhc3Q8
Y29uc3QgUXVlcnlTZXRJbXBsJj4ocXVlcnlTZXQpLmJhY2tpbmcoKSwgcXVlcnlJbmRleCk7Cit9
CisKK3ZvaWQgQ29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6ZW5kUGlwZWxpbmVTdGF0aXN0aWNzUXVl
cnkoKQoreworICAgIHdncHVDb21wdXRlUGFzc0VuY29kZXJFbmRQaXBlbGluZVN0YXRpc3RpY3NR
dWVyeShtX2JhY2tpbmcpOworfQorCit2b2lkIENvbXB1dGVQYXNzRW5jb2RlckltcGw6OmVuZFBh
c3MoKQoreworICAgIHdncHVDb21wdXRlUGFzc0VuY29kZXJFbmRQYXNzKG1fYmFja2luZyk7Cit9
CisKK3ZvaWQgQ29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6c2V0QmluZEdyb3VwKEluZGV4MzIgaW5k
ZXgsIGNvbnN0IEJpbmRHcm91cCYgYmluZEdyb3VwLAorICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9y
PEJ1ZmZlckR5bmFtaWNPZmZzZXQ+PiYmIG9mZnNldHMpCit7CisgICAgYXV0byBiYWNraW5nT2Zm
c2V0cyA9IG9mZnNldHMudmFsdWVfb3IoVmVjdG9yPEJ1ZmZlckR5bmFtaWNPZmZzZXQ+IHsgfSk7
CisgICAgd2dwdUNvbXB1dGVQYXNzRW5jb2RlclNldEJpbmRHcm91cChtX2JhY2tpbmcsIGluZGV4
LCBzdGF0aWNfY2FzdDxjb25zdCBCaW5kR3JvdXBJbXBsJj4oYmluZEdyb3VwKS5iYWNraW5nKCks
IHN0YXRpY19jYXN0PHVpbnQzMl90PihiYWNraW5nT2Zmc2V0cy5zaXplKCkpLCBiYWNraW5nT2Zm
c2V0cy5kYXRhKCkpOworfQorCit2b2lkIENvbXB1dGVQYXNzRW5jb2RlckltcGw6OnNldEJpbmRH
cm91cChJbmRleDMyIGluZGV4LCBjb25zdCBCaW5kR3JvdXAmIGJpbmRHcm91cCwKKyAgICBjb25z
dCB1aW50MzJfdCogZHluYW1pY09mZnNldHNBcnJheUJ1ZmZlciwKKyAgICBzaXplX3QgZHluYW1p
Y09mZnNldHNBcnJheUJ1ZmZlckxlbmd0aCwKKyAgICBTaXplNjQgZHluYW1pY09mZnNldHNEYXRh
U3RhcnQsCisgICAgU2l6ZTMyIGR5bmFtaWNPZmZzZXRzRGF0YUxlbmd0aCkKK3sKKyAgICBVTlVT
RURfUEFSQU0oZHluYW1pY09mZnNldHNBcnJheUJ1ZmZlckxlbmd0aCk7CisgICAgLy8gRklYTUU6
IFVzZSBjaGVja2VkIGFsZ2VicmEuCisgICAgd2dwdUNvbXB1dGVQYXNzRW5jb2RlclNldEJpbmRH
cm91cChtX2JhY2tpbmcsIGluZGV4LCBzdGF0aWNfY2FzdDxjb25zdCBCaW5kR3JvdXBJbXBsJj4o
YmluZEdyb3VwKS5iYWNraW5nKCksIGR5bmFtaWNPZmZzZXRzRGF0YUxlbmd0aCwgZHluYW1pY09m
ZnNldHNBcnJheUJ1ZmZlciArIGR5bmFtaWNPZmZzZXRzRGF0YVN0YXJ0KTsKK30KKwordm9pZCBD
b21wdXRlUGFzc0VuY29kZXJJbXBsOjpwdXNoRGVidWdHcm91cChTdHJpbmcmJiBncm91cExhYmVs
KQoreworICAgIHdncHVDb21wdXRlUGFzc0VuY29kZXJQdXNoRGVidWdHcm91cChtX2JhY2tpbmcs
IGdyb3VwTGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgQ29tcHV0ZVBhc3NFbmNvZGVy
SW1wbDo6cG9wRGVidWdHcm91cCgpCit7CisgICAgd2dwdUNvbXB1dGVQYXNzRW5jb2RlclBvcERl
YnVnR3JvdXAobV9iYWNraW5nKTsKK30KKwordm9pZCBDb21wdXRlUGFzc0VuY29kZXJJbXBsOjpp
bnNlcnREZWJ1Z01hcmtlcihTdHJpbmcmJiBtYXJrZXJMYWJlbCkKK3sKKyAgICB3Z3B1Q29tcHV0
ZVBhc3NFbmNvZGVySW5zZXJ0RGVidWdNYXJrZXIobV9iYWNraW5nLCBtYXJrZXJMYWJlbC51dGY4
KCkuZGF0YSgpKTsKK30KKwordm9pZCBDb21wdXRlUGFzc0VuY29kZXJJbXBsOjpzZXRMYWJlbElu
dGVybmFsKGNvbnN0IFN0cmluZyYgbGFiZWwpCit7CisgICAgd2dwdUNvbXB1dGVQYXNzRW5jb2Rl
clNldExhYmVsKG1fYmFja2luZywgbGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbXB1dGVQYXNzRW5jb2Rl
ckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2Vi
R1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFiZThhZGRmMjNmZjdhYWZj
N2Q2ZWEwNTYzMDg1NzdlZTJkZTkwYmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbXB1dGVQYXNzRW5jb2Rlcklt
cGwuaApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJXZWJHUFVDb21wdXRlUGFzc0VuY29kZXIuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BV
Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK2NsYXNzIENvbXB1
dGVQYXNzRW5jb2RlckltcGwgZmluYWwgOiBwdWJsaWMgQ29tcHV0ZVBhc3NFbmNvZGVyIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPENvbXB1dGVQYXNzRW5jb2RlckltcGw+IGNyZWF0ZShXR1BV
Q29tcHV0ZVBhc3NFbmNvZGVyIGNvbXB1dGVQYXNzRW5jb2RlcikKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IENvbXB1dGVQYXNzRW5jb2RlckltcGwoY29tcHV0ZVBhc3NFbmNv
ZGVyKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+Q29tcHV0ZVBhc3NFbmNvZGVySW1wbCgpOwor
CisgICAgV0dQVUNvbXB1dGVQYXNzRW5jb2RlciBiYWNraW5nKCkgY29uc3QgeyByZXR1cm4gbV9i
YWNraW5nOyB9CisKK3ByaXZhdGU6CisgICAgQ29tcHV0ZVBhc3NFbmNvZGVySW1wbChXR1BVQ29t
cHV0ZVBhc3NFbmNvZGVyKTsKKworICAgIENvbXB1dGVQYXNzRW5jb2RlckltcGwoY29uc3QgQ29t
cHV0ZVBhc3NFbmNvZGVySW1wbCYpID0gZGVsZXRlOworICAgIENvbXB1dGVQYXNzRW5jb2Rlcklt
cGwoQ29tcHV0ZVBhc3NFbmNvZGVySW1wbCYmKSA9IGRlbGV0ZTsKKyAgICBDb21wdXRlUGFzc0Vu
Y29kZXJJbXBsJiBvcGVyYXRvcj0oY29uc3QgQ29tcHV0ZVBhc3NFbmNvZGVySW1wbCYpID0gZGVs
ZXRlOworICAgIENvbXB1dGVQYXNzRW5jb2RlckltcGwmIG9wZXJhdG9yPShDb21wdXRlUGFzc0Vu
Y29kZXJJbXBsJiYpID0gZGVsZXRlOworCisgICAgdm9pZCBzZXRQaXBlbGluZShjb25zdCBDb21w
dXRlUGlwZWxpbmUmKSBmaW5hbDsKKyAgICB2b2lkIGRpc3BhdGNoKFNpemUzMiB4LCBzdGQ6Om9w
dGlvbmFsPFNpemUzMj4geSwgc3RkOjpvcHRpb25hbDxTaXplMzI+KSBmaW5hbDsKKyAgICB2b2lk
IGRpc3BhdGNoSW5kaXJlY3QoY29uc3QgQnVmZmVyJiBpbmRpcmVjdEJ1ZmZlciwgU2l6ZTY0IGlu
ZGlyZWN0T2Zmc2V0KSBmaW5hbDsKKworICAgIHZvaWQgYmVnaW5QaXBlbGluZVN0YXRpc3RpY3NR
dWVyeShjb25zdCBRdWVyeVNldCYsIFNpemUzMiBxdWVyeUluZGV4KSBmaW5hbDsKKyAgICB2b2lk
IGVuZFBpcGVsaW5lU3RhdGlzdGljc1F1ZXJ5KCkgZmluYWw7CisKKyAgICB2b2lkIGVuZFBhc3Mo
KSBmaW5hbDsKKworICAgIHZvaWQgc2V0QmluZEdyb3VwKEluZGV4MzIsIGNvbnN0IEJpbmRHcm91
cCYsCisgICAgICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPEJ1ZmZlckR5bmFtaWNPZmZzZXQ+PiYm
KSBmaW5hbDsKKworICAgIHZvaWQgc2V0QmluZEdyb3VwKEluZGV4MzIsIGNvbnN0IEJpbmRHcm91
cCYsCisgICAgICAgIGNvbnN0IHVpbnQzMl90KiBkeW5hbWljT2Zmc2V0c0FycmF5QnVmZmVyLAor
ICAgICAgICBzaXplX3QgZHluYW1pY09mZnNldHNBcnJheUJ1ZmZlckxlbmd0aCwKKyAgICAgICAg
U2l6ZTY0IGR5bmFtaWNPZmZzZXRzRGF0YVN0YXJ0LAorICAgICAgICBTaXplMzIgZHluYW1pY09m
ZnNldHNEYXRhTGVuZ3RoKSBmaW5hbDsKKworICAgIHZvaWQgcHVzaERlYnVnR3JvdXAoU3RyaW5n
JiYgZ3JvdXBMYWJlbCkgZmluYWw7CisgICAgdm9pZCBwb3BEZWJ1Z0dyb3VwKCkgZmluYWw7Cisg
ICAgdm9pZCBpbnNlcnREZWJ1Z01hcmtlcihTdHJpbmcmJiBtYXJrZXJMYWJlbCkgZmluYWw7CisK
KyAgICB2b2lkIHNldExhYmVsSW50ZXJuYWwoY29uc3QgU3RyaW5nJikgZmluYWw7CisKKyAgICBX
R1BVQ29tcHV0ZVBhc3NFbmNvZGVyIG1fYmFja2luZyB7IG51bGxwdHIgfTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbXB1dGVQaXBlbGlu
ZUltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9X
ZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYThlOTczZDRhY2I3NmJi
ZTFhYTFkMGExZjhiMzQ2OTYzY2I4NGEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBs
LmNwcApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYkdQVUNvbXB1dGVQaXBlbGluZUltcGwuaCIKKworI2luY2x1ZGUgIldlYkdQ
VUJpbmRHcm91cExheW91dEltcGwuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVRXh0Lmg+CisK
K25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK0NvbXB1dGVQaXBlbGluZUlt
cGw6OkNvbXB1dGVQaXBlbGluZUltcGwoV0dQVUNvbXB1dGVQaXBlbGluZSBjb21wdXRlUGlwZWxp
bmUpCisgICAgOiBtX2JhY2tpbmcoY29tcHV0ZVBpcGVsaW5lKQoreworfQorCitDb21wdXRlUGlw
ZWxpbmVJbXBsOjp+Q29tcHV0ZVBpcGVsaW5lSW1wbCgpCit7CisgICAgd2dwdUNvbXB1dGVQaXBl
bGluZVJlbGVhc2UobV9iYWNraW5nKTsKK30KKworUmVmPEJpbmRHcm91cExheW91dD4gQ29tcHV0
ZVBpcGVsaW5lSW1wbDo6Z2V0QmluZEdyb3VwTGF5b3V0KHVpbnQzMl90IGluZGV4KQoreworICAg
IHJldHVybiBCaW5kR3JvdXBMYXlvdXRJbXBsOjpjcmVhdGUod2dwdUNvbXB1dGVQaXBlbGluZUdl
dEJpbmRHcm91cExheW91dChtX2JhY2tpbmcsIGluZGV4KSk7Cit9CisKK3ZvaWQgQ29tcHV0ZVBp
cGVsaW5lSW1wbDo6c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAg
IHdncHVDb21wdXRlUGlwZWxpbmVTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVsLnV0ZjgoKS5kYXRh
KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJH
UFVDb21wdXRlUGlwZWxpbmVJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNz
L1dlYkdQVS9JbXBsL1dlYkdQVUNvbXB1dGVQaXBlbGluZUltcGwuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNDYy
NmNmYTQwZTIyZTI5MjNkYjViYmZmYjVmMTQwYWQ2YWZhYWNiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb21wdXRl
UGlwZWxpbmVJbXBsLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiV2ViR1BVQ29tcHV0ZVBpcGVsaW5lLmgiCisjaW5jbHVkZSA8V2ViR1BV
L1dlYkdQVS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFz
cyBDb21wdXRlUGlwZWxpbmVJbXBsIGZpbmFsIDogcHVibGljIENvbXB1dGVQaXBlbGluZSB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZjxDb21wdXRlUGlwZWxpbmVJbXBsPiBjcmVhdGUoV0dQVUNv
bXB1dGVQaXBlbGluZSBjb21wdXRlUGlwZWxpbmUpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBDb21wdXRlUGlwZWxpbmVJbXBsKGNvbXB1dGVQaXBlbGluZSkpOworICAgIH0K
KworICAgIHZpcnR1YWwgfkNvbXB1dGVQaXBlbGluZUltcGwoKTsKKworICAgIFdHUFVDb21wdXRl
UGlwZWxpbmUgYmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRl
OgorICAgIENvbXB1dGVQaXBlbGluZUltcGwoV0dQVUNvbXB1dGVQaXBlbGluZSk7CisKKyAgICBD
b21wdXRlUGlwZWxpbmVJbXBsKGNvbnN0IENvbXB1dGVQaXBlbGluZUltcGwmKSA9IGRlbGV0ZTsK
KyAgICBDb21wdXRlUGlwZWxpbmVJbXBsKENvbXB1dGVQaXBlbGluZUltcGwmJikgPSBkZWxldGU7
CisgICAgQ29tcHV0ZVBpcGVsaW5lSW1wbCYgb3BlcmF0b3I9KGNvbnN0IENvbXB1dGVQaXBlbGlu
ZUltcGwmKSA9IGRlbGV0ZTsKKyAgICBDb21wdXRlUGlwZWxpbmVJbXBsJiBvcGVyYXRvcj0oQ29t
cHV0ZVBpcGVsaW5lSW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIFJlZjxCaW5kR3JvdXBMYXlvdXQ+
IGdldEJpbmRHcm91cExheW91dCh1aW50MzJfdCBpbmRleCkgZmluYWw7CisKKyAgICB2b2lkIHNl
dExhYmVsSW50ZXJuYWwoY29uc3QgU3RyaW5nJikgZmluYWw7CisKKyAgICBXR1BVQ29tcHV0ZVBp
cGVsaW5lIG1fYmFja2luZyB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFBBTAor
fSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbnZlcnRUb0JhY2tpbmcuY3BwIGIvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb252ZXJ0VG9CYWNr
aW5nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41MjU2ZmM0ZjY0NjI1ZmY0NzhmNWE3NzgzYmE1YWZlMzFmMjJk
ZWY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9X
ZWJHUFUvSW1wbC9XZWJHUFVDb252ZXJ0VG9CYWNraW5nLmNwcApAQCAtMCwwICsxLDgwOSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVDb252ZXJ0
VG9CYWNraW5nLmgiCisKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVRXh0Lmg+CisKK25hbWVzcGFj
ZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK1dHUFVBZGRyZXNzTW9kZSBjb252ZXJ0VG9C
YWNraW5nKEFkZHJlc3NNb2RlIGFkZHJlc3NNb2RlKQoreworICAgIHN3aXRjaCAoYWRkcmVzc01v
ZGUpIHsKKyAgICBjYXNlIEFkZHJlc3NNb2RlOjpDbGFtcFRvRWRnZToKKyAgICAgICAgcmV0dXJu
IFdHUFVBZGRyZXNzTW9kZV9DbGFtcFRvRWRnZTsKKyAgICBjYXNlIEFkZHJlc3NNb2RlOjpSZXBl
YXQ6CisgICAgICAgIHJldHVybiBXR1BVQWRkcmVzc01vZGVfUmVwZWF0OworICAgIGNhc2UgQWRk
cmVzc01vZGU6Ok1pcnJvclJlcGVhdDoKKyAgICAgICAgcmV0dXJuIFdHUFVBZGRyZXNzTW9kZV9N
aXJyb3JSZXBlYXQ7CisgICAgfQorfQorCitXR1BVQmxlbmRGYWN0b3IgY29udmVydFRvQmFja2lu
ZyhCbGVuZEZhY3RvciBibGVuZEZhY3RvcikKK3sKKyAgICBzd2l0Y2ggKGJsZW5kRmFjdG9yKSB7
CisgICAgY2FzZSBCbGVuZEZhY3Rvcjo6WmVybzoKKyAgICAgICAgcmV0dXJuIFdHUFVCbGVuZEZh
Y3Rvcl9aZXJvOworICAgIGNhc2UgQmxlbmRGYWN0b3I6Ok9uZToKKyAgICAgICAgcmV0dXJuIFdH
UFVCbGVuZEZhY3Rvcl9PbmU7CisgICAgY2FzZSBCbGVuZEZhY3Rvcjo6U3JjOgorICAgICAgICBy
ZXR1cm4gV0dQVUJsZW5kRmFjdG9yX1NyYzsKKyAgICBjYXNlIEJsZW5kRmFjdG9yOjpPbmVNaW51
c1NyYzoKKyAgICAgICAgcmV0dXJuIFdHUFVCbGVuZEZhY3Rvcl9PbmVNaW51c1NyYzsKKyAgICBj
YXNlIEJsZW5kRmFjdG9yOjpTcmNBbHBoYToKKyAgICAgICAgcmV0dXJuIFdHUFVCbGVuZEZhY3Rv
cl9TcmNBbHBoYTsKKyAgICBjYXNlIEJsZW5kRmFjdG9yOjpPbmVNaW51c1NyY0FscGhhOgorICAg
ICAgICByZXR1cm4gV0dQVUJsZW5kRmFjdG9yX09uZU1pbnVzU3JjQWxwaGE7CisgICAgY2FzZSBC
bGVuZEZhY3Rvcjo6RHN0OgorICAgICAgICByZXR1cm4gV0dQVUJsZW5kRmFjdG9yX0RzdDsKKyAg
ICBjYXNlIEJsZW5kRmFjdG9yOjpPbmVNaW51c0RzdDoKKyAgICAgICAgcmV0dXJuIFdHUFVCbGVu
ZEZhY3Rvcl9PbmVNaW51c0RzdDsKKyAgICBjYXNlIEJsZW5kRmFjdG9yOjpEc3RBbHBoYToKKyAg
ICAgICAgcmV0dXJuIFdHUFVCbGVuZEZhY3Rvcl9Ec3RBbHBoYTsKKyAgICBjYXNlIEJsZW5kRmFj
dG9yOjpPbmVNaW51c0RzdEFscGhhOgorICAgICAgICByZXR1cm4gV0dQVUJsZW5kRmFjdG9yX09u
ZU1pbnVzRHN0QWxwaGE7CisgICAgY2FzZSBCbGVuZEZhY3Rvcjo6U3JjQWxwaGFTYXR1cmF0ZWQ6
CisgICAgICAgIHJldHVybiBXR1BVQmxlbmRGYWN0b3JfU3JjQWxwaGFTYXR1cmF0ZWQ7CisgICAg
Y2FzZSBCbGVuZEZhY3Rvcjo6Q29uc3RhbnQ6CisgICAgICAgIHJldHVybiBXR1BVQmxlbmRGYWN0
b3JfQ29uc3RhbnQ7CisgICAgY2FzZSBCbGVuZEZhY3Rvcjo6T25lTWludXNDb25zdGFudDoKKyAg
ICAgICAgcmV0dXJuIFdHUFVCbGVuZEZhY3Rvcl9PbmVNaW51c0NvbnN0YW50OworICAgIH0KK30K
KworV0dQVUJsZW5kT3BlcmF0aW9uIGNvbnZlcnRUb0JhY2tpbmcoQmxlbmRPcGVyYXRpb24gYmxl
bmRPcGVyYXRpb24pCit7CisgICAgc3dpdGNoIChibGVuZE9wZXJhdGlvbikgeworICAgIGNhc2Ug
QmxlbmRPcGVyYXRpb246OkFkZDoKKyAgICAgICAgcmV0dXJuIFdHUFVCbGVuZE9wZXJhdGlvbl9B
ZGQ7CisgICAgY2FzZSBCbGVuZE9wZXJhdGlvbjo6U3VidHJhY3Q6CisgICAgICAgIHJldHVybiBX
R1BVQmxlbmRPcGVyYXRpb25fU3VidHJhY3Q7CisgICAgY2FzZSBCbGVuZE9wZXJhdGlvbjo6UmV2
ZXJzZVN1YnRyYWN0OgorICAgICAgICByZXR1cm4gV0dQVUJsZW5kT3BlcmF0aW9uX1JldmVyc2VT
dWJ0cmFjdDsKKyAgICBjYXNlIEJsZW5kT3BlcmF0aW9uOjpNaW46CisgICAgICAgIHJldHVybiBX
R1BVQmxlbmRPcGVyYXRpb25fTWluOworICAgIGNhc2UgQmxlbmRPcGVyYXRpb246Ok1heDoKKyAg
ICAgICAgcmV0dXJuIFdHUFVCbGVuZE9wZXJhdGlvbl9NYXg7CisgICAgfQorfQorCitXR1BVQnVm
ZmVyQmluZGluZ1R5cGUgY29udmVydFRvQmFja2luZyhCdWZmZXJCaW5kaW5nVHlwZSBidWZmZXJC
aW5kaW5nVHlwZSkKK3sKKyAgICBzd2l0Y2ggKGJ1ZmZlckJpbmRpbmdUeXBlKSB7CisgICAgY2Fz
ZSBCdWZmZXJCaW5kaW5nVHlwZTo6VW5pZm9ybToKKyAgICAgICAgcmV0dXJuIFdHUFVCdWZmZXJC
aW5kaW5nVHlwZV9Vbmlmb3JtOworICAgIGNhc2UgQnVmZmVyQmluZGluZ1R5cGU6OlN0b3JhZ2U6
CisgICAgICAgIHJldHVybiBXR1BVQnVmZmVyQmluZGluZ1R5cGVfU3RvcmFnZTsKKyAgICBjYXNl
IEJ1ZmZlckJpbmRpbmdUeXBlOjpSZWFkT25seVN0b3JhZ2U6CisgICAgICAgIHJldHVybiBXR1BV
QnVmZmVyQmluZGluZ1R5cGVfUmVhZE9ubHlTdG9yYWdlOworICAgIH0KK30KKworV0dQVUNvbXBh
cmVGdW5jdGlvbiBjb252ZXJ0VG9CYWNraW5nKENvbXBhcmVGdW5jdGlvbiBjb21wYXJlRnVuY3Rp
b24pCit7CisgICAgc3dpdGNoIChjb21wYXJlRnVuY3Rpb24pIHsKKyAgICBjYXNlIENvbXBhcmVG
dW5jdGlvbjo6TmV2ZXI6CisgICAgICAgIHJldHVybiBXR1BVQ29tcGFyZUZ1bmN0aW9uX05ldmVy
OworICAgIGNhc2UgQ29tcGFyZUZ1bmN0aW9uOjpMZXNzOgorICAgICAgICByZXR1cm4gV0dQVUNv
bXBhcmVGdW5jdGlvbl9MZXNzOworICAgIGNhc2UgQ29tcGFyZUZ1bmN0aW9uOjpFcXVhbDoKKyAg
ICAgICAgcmV0dXJuIFdHUFVDb21wYXJlRnVuY3Rpb25fRXF1YWw7CisgICAgY2FzZSBDb21wYXJl
RnVuY3Rpb246Okxlc3NFcXVhbDoKKyAgICAgICAgcmV0dXJuIFdHUFVDb21wYXJlRnVuY3Rpb25f
TGVzc0VxdWFsOworICAgIGNhc2UgQ29tcGFyZUZ1bmN0aW9uOjpHcmVhdGVyOgorICAgICAgICBy
ZXR1cm4gV0dQVUNvbXBhcmVGdW5jdGlvbl9HcmVhdGVyOworICAgIGNhc2UgQ29tcGFyZUZ1bmN0
aW9uOjpOb3RFcXVhbDoKKyAgICAgICAgcmV0dXJuIFdHUFVDb21wYXJlRnVuY3Rpb25fTm90RXF1
YWw7CisgICAgY2FzZSBDb21wYXJlRnVuY3Rpb246OkdyZWF0ZXJFcXVhbDoKKyAgICAgICAgcmV0
dXJuIFdHUFVDb21wYXJlRnVuY3Rpb25fR3JlYXRlckVxdWFsOworICAgIGNhc2UgQ29tcGFyZUZ1
bmN0aW9uOjpBbHdheXM6CisgICAgICAgIHJldHVybiBXR1BVQ29tcGFyZUZ1bmN0aW9uX0Fsd2F5
czsKKyAgICB9Cit9CisKK1dHUFVDb21waWxhdGlvbk1lc3NhZ2VUeXBlIGNvbnZlcnRUb0JhY2tp
bmcoQ29tcGlsYXRpb25NZXNzYWdlVHlwZSBjb21waWxhdGlvbk1lc3NhZ2VUeXBlKQoreworICAg
IHN3aXRjaCAoY29tcGlsYXRpb25NZXNzYWdlVHlwZSkgeworICAgIGNhc2UgQ29tcGlsYXRpb25N
ZXNzYWdlVHlwZTo6RXJyb3I6CisgICAgICAgIHJldHVybiBXR1BVQ29tcGlsYXRpb25NZXNzYWdl
VHlwZV9FcnJvcjsKKyAgICBjYXNlIENvbXBpbGF0aW9uTWVzc2FnZVR5cGU6Oldhcm5pbmc6Cisg
ICAgICAgIHJldHVybiBXR1BVQ29tcGlsYXRpb25NZXNzYWdlVHlwZV9XYXJuaW5nOworICAgIGNh
c2UgQ29tcGlsYXRpb25NZXNzYWdlVHlwZTo6SW5mbzoKKyAgICAgICAgcmV0dXJuIFdHUFVDb21w
aWxhdGlvbk1lc3NhZ2VUeXBlX0luZm87CisgICAgfQorfQorCitXR1BVQ3VsbE1vZGUgY29udmVy
dFRvQmFja2luZyhDdWxsTW9kZSBjdWxsTW9kZSkKK3sKKyAgICBzd2l0Y2ggKGN1bGxNb2RlKSB7
CisgICAgY2FzZSBDdWxsTW9kZTo6Tm9uZToKKyAgICAgICAgcmV0dXJuIFdHUFVDdWxsTW9kZV9O
b25lOworICAgIGNhc2UgQ3VsbE1vZGU6OkZyb250OgorICAgICAgICByZXR1cm4gV0dQVUN1bGxN
b2RlX0Zyb250OworICAgIGNhc2UgQ3VsbE1vZGU6OkJhY2s6CisgICAgICAgIHJldHVybiBXR1BV
Q3VsbE1vZGVfQmFjazsKKyAgICB9Cit9CisKK1dHUFVFcnJvckZpbHRlciBjb252ZXJ0VG9CYWNr
aW5nKEVycm9yRmlsdGVyIGVycm9yRmlsdGVyKQoreworICAgIHN3aXRjaCAoZXJyb3JGaWx0ZXIp
IHsKKyAgICBjYXNlIEVycm9yRmlsdGVyOjpPdXRPZk1lbW9yeToKKyAgICAgICAgcmV0dXJuIFdH
UFVFcnJvckZpbHRlcl9PdXRPZk1lbW9yeTsKKyAgICBjYXNlIEVycm9yRmlsdGVyOjpWYWxpZGF0
aW9uOgorICAgICAgICByZXR1cm4gV0dQVUVycm9yRmlsdGVyX1ZhbGlkYXRpb247CisgICAgfQor
fQorCitXR1BVRmVhdHVyZU5hbWUgY29udmVydFRvQmFja2luZyhGZWF0dXJlTmFtZSBmZWF0dXJl
TmFtZSkKK3sKKyAgICBzd2l0Y2ggKGZlYXR1cmVOYW1lKSB7CisgICAgY2FzZSBGZWF0dXJlTmFt
ZTo6RGVwdGhDbGlwQ29udHJvbDoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVGZWF0
dXJlTmFtZT4oV0dQVUZlYXR1cmVOYW1lX0RlcHRoQ2xpcENvbnRyb2wpOworICAgIGNhc2UgRmVh
dHVyZU5hbWU6OkRlcHRoMjR1bm9ybVN0ZW5jaWw4OgorICAgICAgICByZXR1cm4gV0dQVUZlYXR1
cmVOYW1lX0RlcHRoMjRVbm9ybVN0ZW5jaWw4OworICAgIGNhc2UgRmVhdHVyZU5hbWU6OkRlcHRo
MzJmbG9hdFN0ZW5jaWw4OgorICAgICAgICByZXR1cm4gV0dQVUZlYXR1cmVOYW1lX0RlcHRoMzJG
bG9hdFN0ZW5jaWw4OworICAgIGNhc2UgRmVhdHVyZU5hbWU6OlBpcGVsaW5lU3RhdGlzdGljc1F1
ZXJ5OgorICAgICAgICByZXR1cm4gV0dQVUZlYXR1cmVOYW1lX1BpcGVsaW5lU3RhdGlzdGljc1F1
ZXJ5OworICAgIGNhc2UgRmVhdHVyZU5hbWU6OlRleHR1cmVDb21wcmVzc2lvbkJjOgorICAgICAg
ICByZXR1cm4gV0dQVUZlYXR1cmVOYW1lX1RleHR1cmVDb21wcmVzc2lvbkJDOworICAgIGNhc2Ug
RmVhdHVyZU5hbWU6OlRleHR1cmVDb21wcmVzc2lvbkV0YzI6CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxXR1BVRmVhdHVyZU5hbWU+KFdHUFVGZWF0dXJlTmFtZV9UZXh0dXJlQ29tcHJlc3Np
b25FVEMyKTsKKyAgICBjYXNlIEZlYXR1cmVOYW1lOjpUZXh0dXJlQ29tcHJlc3Npb25Bc3RjOgor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVUZlYXR1cmVOYW1lPihXR1BVRmVhdHVyZU5h
bWVfVGV4dHVyZUNvbXByZXNzaW9uQVNUQyk7CisgICAgY2FzZSBGZWF0dXJlTmFtZTo6VGltZXN0
YW1wUXVlcnk6CisgICAgICAgIHJldHVybiBXR1BVRmVhdHVyZU5hbWVfVGltZXN0YW1wUXVlcnk7
CisgICAgY2FzZSBGZWF0dXJlTmFtZTo6SW5kaXJlY3RGaXJzdEluc3RhbmNlOgorICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVUZlYXR1cmVOYW1lPihXR1BVRmVhdHVyZU5hbWVfSW5kaXJl
Y3RGaXJzdEluc3RhbmNlKTsKKyAgICB9Cit9CisKK1dHUFVGaWx0ZXJNb2RlIGNvbnZlcnRUb0Jh
Y2tpbmcoRmlsdGVyTW9kZSBmaWx0ZXJNb2RlKQoreworICAgIHN3aXRjaCAoZmlsdGVyTW9kZSkg
eworICAgIGNhc2UgRmlsdGVyTW9kZTo6TmVhcmVzdDoKKyAgICAgICAgcmV0dXJuIFdHUFVGaWx0
ZXJNb2RlX05lYXJlc3Q7CisgICAgY2FzZSBGaWx0ZXJNb2RlOjpMaW5lYXI6CisgICAgICAgIHJl
dHVybiBXR1BVRmlsdGVyTW9kZV9MaW5lYXI7CisgICAgfQorfQorCitXR1BVRnJvbnRGYWNlIGNv
bnZlcnRUb0JhY2tpbmcoRnJvbnRGYWNlIGZyb250RmFjZSkKK3sKKyAgICBzd2l0Y2ggKGZyb250
RmFjZSkgeworICAgIGNhc2UgRnJvbnRGYWNlOjpDQ1c6CisgICAgICAgIHJldHVybiBXR1BVRnJv
bnRGYWNlX0NDVzsKKyAgICBjYXNlIEZyb250RmFjZTo6Q1c6CisgICAgICAgIHJldHVybiBXR1BV
RnJvbnRGYWNlX0NXOworICAgIH0KK30KKworV0dQVUluZGV4Rm9ybWF0IGNvbnZlcnRUb0JhY2tp
bmcoSW5kZXhGb3JtYXQgaW5kZXhGb3JtYXQpCit7CisgICAgc3dpdGNoIChpbmRleEZvcm1hdCkg
eworICAgIGNhc2UgSW5kZXhGb3JtYXQ6OlVpbnQxNjoKKyAgICAgICAgcmV0dXJuIFdHUFVJbmRl
eEZvcm1hdF9VaW50MTY7CisgICAgY2FzZSBJbmRleEZvcm1hdDo6VWludDMyOgorICAgICAgICBy
ZXR1cm4gV0dQVUluZGV4Rm9ybWF0X1VpbnQzMjsKKyAgICB9Cit9CisKK1dHUFVMb2FkT3AgY29u
dmVydFRvQmFja2luZyhMb2FkT3AgbG9hZE9wKQoreworICAgIHN3aXRjaCAobG9hZE9wKSB7Cisg
ICAgY2FzZSBMb2FkT3A6OkxvYWQ6CisgICAgICAgIHJldHVybiBXR1BVTG9hZE9wX0xvYWQ7Cisg
ICAgfQorfQorCitXR1BVUGlwZWxpbmVTdGF0aXN0aWNOYW1lIGNvbnZlcnRUb0JhY2tpbmcoUGlw
ZWxpbmVTdGF0aXN0aWNOYW1lIHBpcGVsaW5lU3RhdGlzdGljTmFtZSkKK3sKKyAgICBzd2l0Y2gg
KHBpcGVsaW5lU3RhdGlzdGljTmFtZSkgeworICAgIGNhc2UgUGlwZWxpbmVTdGF0aXN0aWNOYW1l
OjpWZXJ0ZXhTaGFkZXJJbnZvY2F0aW9uczoKKyAgICAgICAgcmV0dXJuIFdHUFVQaXBlbGluZVN0
YXRpc3RpY05hbWVfVmVydGV4U2hhZGVySW52b2NhdGlvbnM7CisgICAgY2FzZSBQaXBlbGluZVN0
YXRpc3RpY05hbWU6OkNsaXBwZXJJbnZvY2F0aW9uczoKKyAgICAgICAgcmV0dXJuIFdHUFVQaXBl
bGluZVN0YXRpc3RpY05hbWVfQ2xpcHBlckludm9jYXRpb25zOworICAgIGNhc2UgUGlwZWxpbmVT
dGF0aXN0aWNOYW1lOjpDbGlwcGVyUHJpbWl0aXZlc091dDoKKyAgICAgICAgcmV0dXJuIFdHUFVQ
aXBlbGluZVN0YXRpc3RpY05hbWVfQ2xpcHBlclByaW1pdGl2ZXNPdXQ7CisgICAgY2FzZSBQaXBl
bGluZVN0YXRpc3RpY05hbWU6OkZyYWdtZW50U2hhZGVySW52b2NhdGlvbnM6CisgICAgICAgIHJl
dHVybiBXR1BVUGlwZWxpbmVTdGF0aXN0aWNOYW1lX0ZyYWdtZW50U2hhZGVySW52b2NhdGlvbnM7
CisgICAgY2FzZSBQaXBlbGluZVN0YXRpc3RpY05hbWU6OkNvbXB1dGVTaGFkZXJJbnZvY2F0aW9u
czoKKyAgICAgICAgcmV0dXJuIFdHUFVQaXBlbGluZVN0YXRpc3RpY05hbWVfQ29tcHV0ZVNoYWRl
ckludm9jYXRpb25zOworICAgIH0KK30KKworV0dQVVBvd2VyUHJlZmVyZW5jZSBjb252ZXJ0VG9C
YWNraW5nKFBvd2VyUHJlZmVyZW5jZSBwb3dlclByZWZlcmVuY2UpCit7CisgICAgc3dpdGNoIChw
b3dlclByZWZlcmVuY2UpIHsKKyAgICBjYXNlIFBvd2VyUHJlZmVyZW5jZTo6TG93UG93ZXI6Cisg
ICAgICAgIHJldHVybiBXR1BVUG93ZXJQcmVmZXJlbmNlX0xvd1Bvd2VyOworICAgIGNhc2UgUG93
ZXJQcmVmZXJlbmNlOjpIaWdoUGVyZm9ybWFuY2U6CisgICAgICAgIHJldHVybiBXR1BVUG93ZXJQ
cmVmZXJlbmNlX0hpZ2hQZXJmb3JtYW5jZTsKKyAgICB9Cit9CisKK1dHUFVQcmltaXRpdmVUb3Bv
bG9neSBjb252ZXJ0VG9CYWNraW5nKFByaW1pdGl2ZVRvcG9sb2d5IHByaW1pdGl2ZVRvcG9sb2d5
KQoreworICAgIHN3aXRjaCAocHJpbWl0aXZlVG9wb2xvZ3kpIHsKKyAgICBjYXNlIFByaW1pdGl2
ZVRvcG9sb2d5OjpQb2ludExpc3Q6CisgICAgICAgIHJldHVybiBXR1BVUHJpbWl0aXZlVG9wb2xv
Z3lfUG9pbnRMaXN0OworICAgIGNhc2UgUHJpbWl0aXZlVG9wb2xvZ3k6OkxpbmVMaXN0OgorICAg
ICAgICByZXR1cm4gV0dQVVByaW1pdGl2ZVRvcG9sb2d5X0xpbmVMaXN0OworICAgIGNhc2UgUHJp
bWl0aXZlVG9wb2xvZ3k6OkxpbmVTdHJpcDoKKyAgICAgICAgcmV0dXJuIFdHUFVQcmltaXRpdmVU
b3BvbG9neV9MaW5lU3RyaXA7CisgICAgY2FzZSBQcmltaXRpdmVUb3BvbG9neTo6VHJpYW5nbGVM
aXN0OgorICAgICAgICByZXR1cm4gV0dQVVByaW1pdGl2ZVRvcG9sb2d5X1RyaWFuZ2xlTGlzdDsK
KyAgICBjYXNlIFByaW1pdGl2ZVRvcG9sb2d5OjpUcmlhbmdsZVN0cmlwOgorICAgICAgICByZXR1
cm4gV0dQVVByaW1pdGl2ZVRvcG9sb2d5X1RyaWFuZ2xlU3RyaXA7CisgICAgfQorfQorCitXR1BV
UXVlcnlUeXBlIGNvbnZlcnRUb0JhY2tpbmcoUXVlcnlUeXBlIHF1ZXJ5VHlwZSkKK3sKKyAgICBz
d2l0Y2ggKHF1ZXJ5VHlwZSkgeworICAgIGNhc2UgUXVlcnlUeXBlOjpPY2NsdXNpb246CisgICAg
ICAgIHJldHVybiBXR1BVUXVlcnlUeXBlX09jY2x1c2lvbjsKKyAgICBjYXNlIFF1ZXJ5VHlwZTo6
UGlwZWxpbmVTdGF0aXN0aWNzOgorICAgICAgICByZXR1cm4gV0dQVVF1ZXJ5VHlwZV9QaXBlbGlu
ZVN0YXRpc3RpY3M7CisgICAgY2FzZSBRdWVyeVR5cGU6OlRpbWVzdGFtcDoKKyAgICAgICAgcmV0
dXJuIFdHUFVRdWVyeVR5cGVfVGltZXN0YW1wOworICAgIH0KK30KKworV0dQVVNhbXBsZXJCaW5k
aW5nVHlwZSBjb252ZXJ0VG9CYWNraW5nKFNhbXBsZXJCaW5kaW5nVHlwZSBzYW1wbGVyQmluZGlu
Z1R5cGUpCit7CisgICAgc3dpdGNoIChzYW1wbGVyQmluZGluZ1R5cGUpIHsKKyAgICBjYXNlIFNh
bXBsZXJCaW5kaW5nVHlwZTo6RmlsdGVyaW5nOgorICAgICAgICByZXR1cm4gV0dQVVNhbXBsZXJC
aW5kaW5nVHlwZV9GaWx0ZXJpbmc7CisgICAgY2FzZSBTYW1wbGVyQmluZGluZ1R5cGU6Ok5vbkZp
bHRlcmluZzoKKyAgICAgICAgcmV0dXJuIFdHUFVTYW1wbGVyQmluZGluZ1R5cGVfTm9uRmlsdGVy
aW5nOworICAgIGNhc2UgU2FtcGxlckJpbmRpbmdUeXBlOjpDb21wYXJpc29uOgorICAgICAgICBy
ZXR1cm4gV0dQVVNhbXBsZXJCaW5kaW5nVHlwZV9Db21wYXJpc29uOworICAgIH0KK30KKworV0dQ
VVN0ZW5jaWxPcGVyYXRpb24gY29udmVydFRvQmFja2luZyhTdGVuY2lsT3BlcmF0aW9uIHN0ZW5j
aWxPcGVyYXRpb24pCit7CisgICAgc3dpdGNoIChzdGVuY2lsT3BlcmF0aW9uKSB7CisgICAgY2Fz
ZSBTdGVuY2lsT3BlcmF0aW9uOjpLZWVwOgorICAgICAgICByZXR1cm4gV0dQVVN0ZW5jaWxPcGVy
YXRpb25fS2VlcDsKKyAgICBjYXNlIFN0ZW5jaWxPcGVyYXRpb246Olplcm86CisgICAgICAgIHJl
dHVybiBXR1BVU3RlbmNpbE9wZXJhdGlvbl9aZXJvOworICAgIGNhc2UgU3RlbmNpbE9wZXJhdGlv
bjo6UmVwbGFjZToKKyAgICAgICAgcmV0dXJuIFdHUFVTdGVuY2lsT3BlcmF0aW9uX1JlcGxhY2U7
CisgICAgY2FzZSBTdGVuY2lsT3BlcmF0aW9uOjpJbnZlcnQ6CisgICAgICAgIHJldHVybiBXR1BV
U3RlbmNpbE9wZXJhdGlvbl9JbnZlcnQ7CisgICAgY2FzZSBTdGVuY2lsT3BlcmF0aW9uOjpJbmNy
ZW1lbnRDbGFtcDoKKyAgICAgICAgcmV0dXJuIFdHUFVTdGVuY2lsT3BlcmF0aW9uX0luY3JlbWVu
dENsYW1wOworICAgIGNhc2UgU3RlbmNpbE9wZXJhdGlvbjo6RGVjcmVtZW50Q2xhbXA6CisgICAg
ICAgIHJldHVybiBXR1BVU3RlbmNpbE9wZXJhdGlvbl9EZWNyZW1lbnRDbGFtcDsKKyAgICBjYXNl
IFN0ZW5jaWxPcGVyYXRpb246OkluY3JlbWVudFdyYXA6CisgICAgICAgIHJldHVybiBXR1BVU3Rl
bmNpbE9wZXJhdGlvbl9JbmNyZW1lbnRXcmFwOworICAgIGNhc2UgU3RlbmNpbE9wZXJhdGlvbjo6
RGVjcmVtZW50V3JhcDoKKyAgICAgICAgcmV0dXJuIFdHUFVTdGVuY2lsT3BlcmF0aW9uX0RlY3Jl
bWVudFdyYXA7CisgICAgfQorfQorCitXR1BVU3RvcmFnZVRleHR1cmVBY2Nlc3MgY29udmVydFRv
QmFja2luZyhTdG9yYWdlVGV4dHVyZUFjY2VzcyBzdG9yYWdlVGV4dHVyZUFjY2VzcykKK3sKKyAg
ICBzd2l0Y2ggKHN0b3JhZ2VUZXh0dXJlQWNjZXNzKSB7CisgICAgY2FzZSBTdG9yYWdlVGV4dHVy
ZUFjY2Vzczo6V3JpdGVPbmx5OgorICAgICAgICByZXR1cm4gV0dQVVN0b3JhZ2VUZXh0dXJlQWNj
ZXNzX1dyaXRlT25seTsKKyAgICB9Cit9CisKK1dHUFVTdG9yZU9wIGNvbnZlcnRUb0JhY2tpbmco
U3RvcmVPcCBzdG9yZU9wKQoreworICAgIHN3aXRjaCAoc3RvcmVPcCkgeworICAgIGNhc2UgU3Rv
cmVPcDo6U3RvcmU6CisgICAgICAgIHJldHVybiBXR1BVU3RvcmVPcF9TdG9yZTsKKyAgICBjYXNl
IFN0b3JlT3A6OkRpc2NhcmQ6CisgICAgICAgIHJldHVybiBXR1BVU3RvcmVPcF9EaXNjYXJkOwor
ICAgIH0KK30KKworV0dQVVRleHR1cmVBc3BlY3QgY29udmVydFRvQmFja2luZyhUZXh0dXJlQXNw
ZWN0IHRleHR1cmVBc3BlY3QpCit7CisgICAgc3dpdGNoICh0ZXh0dXJlQXNwZWN0KSB7CisgICAg
Y2FzZSBUZXh0dXJlQXNwZWN0OjpBbGw6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUFzcGVj
dF9BbGw7CisgICAgY2FzZSBUZXh0dXJlQXNwZWN0OjpTdGVuY2lsT25seToKKyAgICAgICAgcmV0
dXJuIFdHUFVUZXh0dXJlQXNwZWN0X1N0ZW5jaWxPbmx5OworICAgIGNhc2UgVGV4dHVyZUFzcGVj
dDo6RGVwdGhPbmx5OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVBc3BlY3RfRGVwdGhPbmx5
OworICAgIH0KK30KKworV0dQVVRleHR1cmVEaW1lbnNpb24gY29udmVydFRvQmFja2luZyhUZXh0
dXJlRGltZW5zaW9uIHRleHR1cmVEaW1lbnNpb24pCit7CisgICAgc3dpdGNoICh0ZXh0dXJlRGlt
ZW5zaW9uKSB7CisgICAgY2FzZSBUZXh0dXJlRGltZW5zaW9uOjpfMWQ6CisgICAgICAgIHJldHVy
biBXR1BVVGV4dHVyZURpbWVuc2lvbl8xRDsKKyAgICBjYXNlIFRleHR1cmVEaW1lbnNpb246Ol8y
ZDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRGltZW5zaW9uXzJEOworICAgIGNhc2UgVGV4
dHVyZURpbWVuc2lvbjo6XzNkOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVEaW1lbnNpb25f
M0Q7CisgICAgfQorfQorCitXR1BVVGV4dHVyZUZvcm1hdCBjb252ZXJ0VG9CYWNraW5nKFRleHR1
cmVGb3JtYXQgdGV4dHVyZUZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKHRleHR1cmVGb3JtYXQpIHsK
KyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OlI4dW5vcm06CisgICAgICAgIHJldHVybiBXR1BVVGV4
dHVyZUZvcm1hdF9SOFVub3JtOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6Ujhzbm9ybToKKyAg
ICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1I4U25vcm07CisgICAgY2FzZSBUZXh0dXJl
Rm9ybWF0OjpSOHVpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SOFVpbnQ7
CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSOHNpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4
dHVyZUZvcm1hdF9SOFNpbnQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSMTZ1aW50OgorICAg
ICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUjE2VWludDsKKyAgICBjYXNlIFRleHR1cmVG
b3JtYXQ6OlIxNnNpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SMTZTaW50
OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UjE2ZmxvYXQ6CisgICAgICAgIHJldHVybiBXR1BV
VGV4dHVyZUZvcm1hdF9SMTZGbG9hdDsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OlJnOHVub3Jt
OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkc4VW5vcm07CisgICAgY2FzZSBU
ZXh0dXJlRm9ybWF0OjpSZzhzbm9ybToKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0
X1JHOFNub3JtOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6Umc4dWludDoKKyAgICAgICAgcmV0
dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1JHOFVpbnQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpS
ZzhzaW50OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkc4U2ludDsKKyAgICBj
YXNlIFRleHR1cmVGb3JtYXQ6OlIzMnVpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZv
cm1hdF9SMzJVaW50OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UjMyc2ludDoKKyAgICAgICAg
cmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1IzMlNpbnQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0
OjpSMzJmbG9hdDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1IzMkZsb2F0Owor
ICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UmcxNnVpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4
dHVyZUZvcm1hdF9SRzE2VWludDsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OlJnMTZzaW50Ogor
ICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkcxNlNpbnQ7CisgICAgY2FzZSBUZXh0
dXJlRm9ybWF0OjpSZzE2ZmxvYXQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9S
RzE2RmxvYXQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZ2JhOHVub3JtOgorICAgICAgICBy
ZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkdCQThVbm9ybTsKKyAgICBjYXNlIFRleHR1cmVGb3Jt
YXQ6OlJnYmE4dW5vcm1TUkdCOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkdC
QThVbm9ybVNyZ2I7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZ2JhOHNub3JtOgorICAgICAg
ICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkdCQThTbm9ybTsKKyAgICBjYXNlIFRleHR1cmVG
b3JtYXQ6OlJnYmE4dWludDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4
VWludDsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OlJnYmE4c2ludDoKKyAgICAgICAgcmV0dXJu
IFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4U2ludDsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkJn
cmE4dW5vcm06CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9CR1JBOFVub3JtOwor
ICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QmdyYTh1bm9ybVNSR0I6CisgICAgICAgIHJldHVybiBX
R1BVVGV4dHVyZUZvcm1hdF9CR1JBOFVub3JtU3JnYjsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6
OlJnYjllNXVmbG9hdDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1JHQjlFNVVm
bG9hdDsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OlJnYjEwYTJ1bm9ybToKKyAgICAgICAgcmV0
dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1JHQjEwQTJVbm9ybTsKKyAgICBjYXNlIFRleHR1cmVGb3Jt
YXQ6OlJnMTFiMTB1ZmxvYXQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SRzEx
QjEwVWZsb2F0OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UmczMnVpbnQ6CisgICAgICAgIHJl
dHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SRzMyVWludDsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6
OlJnMzJzaW50OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkczMlNpbnQ7Cisg
ICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZzMyZmxvYXQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4
dHVyZUZvcm1hdF9SRzMyRmxvYXQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZ2JhMTZ1aW50
OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkdCQTE2VWludDsKKyAgICBjYXNl
IFRleHR1cmVGb3JtYXQ6OlJnYmExNnNpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZv
cm1hdF9SR0JBMTZTaW50OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UmdiYTE2ZmxvYXQ6Cisg
ICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMTZGbG9hdDsKKyAgICBjYXNlIFRl
eHR1cmVGb3JtYXQ6OlJnYmEzMnVpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1h
dF9SR0JBMzJVaW50OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UmdiYTMyc2ludDoKKyAgICAg
ICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkEzMlNpbnQ7CisgICAgY2FzZSBUZXh0dXJl
Rm9ybWF0OjpSZ2JhMzJmbG9hdDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1JH
QkEzMkZsb2F0OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6U3RlbmNpbDg6CisgICAgICAgIHJl
dHVybiBXR1BVVGV4dHVyZUZvcm1hdF9TdGVuY2lsODsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6
OkRlcHRoMTZ1bm9ybToKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMTZV
bm9ybTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkRlcHRoMjRwbHVzOgorICAgICAgICByZXR1
cm4gV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgyNFBsdXM7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0
OjpEZXB0aDI0cGx1c1N0ZW5jaWw4OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRf
RGVwdGgyNFBsdXNTdGVuY2lsODsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkRlcHRoMzJmbG9h
dDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMzJGbG9hdDsKKyAgICBj
YXNlIFRleHR1cmVGb3JtYXQ6OkJjMVJnYmFVbm9ybToKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0
dXJlRm9ybWF0X0JDMVJHQkFVbm9ybTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkJjMVJnYmFV
bm9ybVNSR0I6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9CQzFSR0JBVW5vcm1T
cmdiOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QmMyUmdiYVVub3JtOgorICAgICAgICByZXR1
cm4gV0dQVVRleHR1cmVGb3JtYXRfQkMyUkdCQVVub3JtOworICAgIGNhc2UgVGV4dHVyZUZvcm1h
dDo6QmMyUmdiYVVub3JtU1JHQjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0JD
MlJHQkFVbm9ybVNyZ2I7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpCYzNSZ2JhVW5vcm06Cisg
ICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9CQzNSR0JBVW5vcm07CisgICAgY2FzZSBU
ZXh0dXJlRm9ybWF0OjpCYzNSZ2JhVW5vcm1TUkdCOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1
cmVGb3JtYXRfQkMzUkdCQVVub3JtU3JnYjsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkJjNFJV
bm9ybToKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0JDNFJVbm9ybTsKKyAgICBj
YXNlIFRleHR1cmVGb3JtYXQ6OkJjNFJTbm9ybToKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJl
Rm9ybWF0X0JDNFJTbm9ybTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkJjNVJnVW5vcm06Cisg
ICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9CQzVSR1Vub3JtOworICAgIGNhc2UgVGV4
dHVyZUZvcm1hdDo6QmM1UmdTbm9ybToKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0
X0JDNVJHU25vcm07CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpCYzZoUmdiVWZsb2F0OgorICAg
ICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQkM2SFJHQlVmbG9hdDsKKyAgICBjYXNlIFRl
eHR1cmVGb3JtYXQ6OkJjNmhSZ2JGbG9hdDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9y
bWF0X0JDNkhSR0JGbG9hdDsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkJjN1JnYmFVbm9ybToK
KyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0JDN1JHQkFVbm9ybTsKKyAgICBjYXNl
IFRleHR1cmVGb3JtYXQ6OkJjN1JnYmFVbm9ybVNSR0I6CisgICAgICAgIHJldHVybiBXR1BVVGV4
dHVyZUZvcm1hdF9CQzdSR0JBVW5vcm1TcmdiOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6RXRj
MlJnYjh1bm9ybToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0
PihXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCOFVub3JtKTsKKyAgICBjYXNlIFRleHR1cmVGb3Jt
YXQ6OkV0YzJSZ2I4dW5vcm1TUkdCOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRl
eHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4dW5vcm1TcmdiKTsKKyAgICBj
YXNlIFRleHR1cmVGb3JtYXQ6OkV0YzJSZ2I4YTF1bm9ybToKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCOGExVW5v
cm0pOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6RXRjMlJnYjhhMXVub3JtU1JHQjoKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1h
dF9FVEMyUkdCOGExdW5vcm1TcmdiKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkV0YzJSZ2Jh
OHVub3JtOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdH
UFVUZXh0dXJlRm9ybWF0X0VUQzJSR0JBOFVub3JtKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6
OkV0YzJSZ2JhOHVub3JtU1JHQjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0
dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCQThVbm9ybVNyZ2IpOworICAgIGNh
c2UgVGV4dHVyZUZvcm1hdDo6RWFjUjExdW5vcm06CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfRUFDUjExVW5vcm0pOworICAg
IGNhc2UgVGV4dHVyZUZvcm1hdDo6RWFjUjExc25vcm06CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfRUFDUjExU25vcm0pOwor
ICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6RWFjUmcxMXVub3JtOgorICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1JHMTFVbm9y
bSk7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpFYWNSZzExc25vcm06CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfRUFDUkcx
MVNub3JtKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGM0eDRVbm9ybToKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9B
U1RDNHg0VW5vcm0pOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0YzR4NFVub3JtU1JHQjoK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVy
ZUZvcm1hdF9BU1RDNHg0VW5vcm1TcmdiKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGM1
eDRVbm9ybToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihX
R1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg0VW5vcm0pOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6
QXN0YzV4NFVub3JtU1JHQjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJl
Rm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg0VW5vcm1TcmdiKTsKKyAgICBjYXNlIFRl
eHR1cmVGb3JtYXQ6OkFzdGM1eDVVbm9ybToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdH
UFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg1VW5vcm0pOworICAgIGNh
c2UgVGV4dHVyZUZvcm1hdDo6QXN0YzV4NVVub3JtU1JHQjoKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg1VW5vcm1T
cmdiKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGM2eDVVbm9ybToKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RD
Nng1VW5vcm0pOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0YzZ4NVVub3JtU1JHQjoKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZv
cm1hdF9BU1RDNng1VW5vcm1TcmdiKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGM2eDZV
bm9ybToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BV
VGV4dHVyZUZvcm1hdF9BU1RDNng2VW5vcm0pOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0
YzZ4NlVub3JtU1JHQjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9y
bWF0PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNng2VW5vcm1TcmdiKTsKKyAgICBjYXNlIFRleHR1
cmVGb3JtYXQ6OkFzdGM4eDVVbm9ybToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVU
ZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg1VW5vcm0pOworICAgIGNhc2Ug
VGV4dHVyZUZvcm1hdDo6QXN0Yzh4NVVub3JtU1JHQjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg1VW5vcm1Tcmdi
KTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGM4eDZVbm9ybToKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg2
VW5vcm0pOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0Yzh4NlVub3JtU1JHQjoKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1h
dF9BU1RDOHg2VW5vcm1TcmdiKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGM4eDhVbm9y
bToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4
dHVyZUZvcm1hdF9BU1RDOHg4VW5vcm0pOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0Yzh4
OFVub3JtU1JHQjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0
PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg4VW5vcm1TcmdiKTsKKyAgICBjYXNlIFRleHR1cmVG
b3JtYXQ6OkFzdGMxMHg1VW5vcm06CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4
dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDVVbm9ybSk7CisgICAgY2FzZSBU
ZXh0dXJlRm9ybWF0OjpBc3RjMTB4NVVub3JtU1JHQjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4NVVub3JtU3Jn
Yik7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpBc3RjMTB4NlVub3JtOgorICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMx
MHg2VW5vcm0pOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0YzEweDZVbm9ybVNSR0I6Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVG
b3JtYXRfQVNUQzEweDZVbm9ybVNyZ2IpOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0YzEw
eDhVbm9ybToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihX
R1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4OFVub3JtKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6
OkFzdGMxMHg4VW5vcm1TUkdCOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1
cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg4VW5vcm1TcmdiKTsKKyAgICBjYXNl
IFRleHR1cmVGb3JtYXQ6OkFzdGMxMHgxMFVub3JtOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHgxMFVub3JtKTsK
KyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGMxMHgxMFVub3JtU1JHQjoKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RD
MTB4MTBVbm9ybVNyZ2IpOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0YzEyeDEwVW5vcm06
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1
cmVGb3JtYXRfQVNUQzEyeDEwVW5vcm0pOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0YzEy
eDEwVW5vcm1TUkdCOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3Jt
YXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMFVub3JtU3JnYik7CisgICAgY2FzZSBUZXh0
dXJlRm9ybWF0OjpBc3RjMTJ4MTJVbm9ybToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdH
UFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4MTJVbm9ybSk7CisgICAg
Y2FzZSBUZXh0dXJlRm9ybWF0OjpBc3RjMTJ4MTJVbm9ybVNSR0I6CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEyeDEy
VW5vcm1TcmdiKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkRlcHRoMjR1bm9ybVN0ZW5jaWw4
OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgyNFBsdXNTdGVuY2lsODsK
KyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkRlcHRoMzJmbG9hdFN0ZW5jaWw4OgorICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0Rl
cHRoMzJGbG9hdFN0ZW5jaWw4KTsKKyAgICB9Cit9CisKK1dHUFVUZXh0dXJlU2FtcGxlVHlwZSBj
b252ZXJ0VG9CYWNraW5nKFRleHR1cmVTYW1wbGVUeXBlIHRleHR1cmVTYW1wbGVUeXBlKQorewor
ICAgIHN3aXRjaCAodGV4dHVyZVNhbXBsZVR5cGUpIHsKKyAgICBjYXNlIFRleHR1cmVTYW1wbGVU
eXBlOjpGbG9hdDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlU2FtcGxlVHlwZV9GbG9hdDsK
KyAgICBjYXNlIFRleHR1cmVTYW1wbGVUeXBlOjpVbmZpbHRlcmFibGVGbG9hdDoKKyAgICAgICAg
cmV0dXJuIFdHUFVUZXh0dXJlU2FtcGxlVHlwZV9VbmZpbHRlcmFibGVGbG9hdDsKKyAgICBjYXNl
IFRleHR1cmVTYW1wbGVUeXBlOjpEZXB0aDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlU2Ft
cGxlVHlwZV9EZXB0aDsKKyAgICBjYXNlIFRleHR1cmVTYW1wbGVUeXBlOjpTaW50OgorICAgICAg
ICByZXR1cm4gV0dQVVRleHR1cmVTYW1wbGVUeXBlX1NpbnQ7CisgICAgY2FzZSBUZXh0dXJlU2Ft
cGxlVHlwZTo6VWludDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlU2FtcGxlVHlwZV9VaW50
OworICAgIH0KK30KKworV0dQVVRleHR1cmVWaWV3RGltZW5zaW9uIGNvbnZlcnRUb0JhY2tpbmco
VGV4dHVyZVZpZXdEaW1lbnNpb24gdGV4dHVyZVZpZXdEaW1lbnNpb24pCit7CisgICAgc3dpdGNo
ICh0ZXh0dXJlVmlld0RpbWVuc2lvbikgeworICAgIGNhc2UgVGV4dHVyZVZpZXdEaW1lbnNpb246
Ol8xZDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlVmlld0RpbWVuc2lvbl8xRDsKKyAgICBj
YXNlIFRleHR1cmVWaWV3RGltZW5zaW9uOjpfMmQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVy
ZVZpZXdEaW1lbnNpb25fMkQ7CisgICAgY2FzZSBUZXh0dXJlVmlld0RpbWVuc2lvbjo6XzJkQXJy
YXk6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZVZpZXdEaW1lbnNpb25fMkRBcnJheTsKKyAg
ICBjYXNlIFRleHR1cmVWaWV3RGltZW5zaW9uOjpDdWJlOgorICAgICAgICByZXR1cm4gV0dQVVRl
eHR1cmVWaWV3RGltZW5zaW9uX0N1YmU7CisgICAgY2FzZSBUZXh0dXJlVmlld0RpbWVuc2lvbjo6
Q3ViZUFycmF5OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVWaWV3RGltZW5zaW9uX0N1YmVB
cnJheTsKKyAgICBjYXNlIFRleHR1cmVWaWV3RGltZW5zaW9uOjpfM2Q6CisgICAgICAgIHJldHVy
biBXR1BVVGV4dHVyZVZpZXdEaW1lbnNpb25fM0Q7CisgICAgfQorfQorCitXR1BVVmVydGV4Rm9y
bWF0IGNvbnZlcnRUb0JhY2tpbmcoVmVydGV4Rm9ybWF0IHZlcnRleEZvcm1hdCkKK3sKKyAgICBz
d2l0Y2ggKHZlcnRleEZvcm1hdCkgeworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpVaW50OHgyOgor
ICAgICAgICByZXR1cm4gV0dQVVZlcnRleEZvcm1hdF9VaW50OHgyOworICAgIGNhc2UgVmVydGV4
Rm9ybWF0OjpVaW50OHg0OgorICAgICAgICByZXR1cm4gV0dQVVZlcnRleEZvcm1hdF9VaW50OHg0
OworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpTaW50OHgyOgorICAgICAgICByZXR1cm4gV0dQVVZl
cnRleEZvcm1hdF9TaW50OHgyOworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpTaW50OHg0OgorICAg
ICAgICByZXR1cm4gV0dQVVZlcnRleEZvcm1hdF9TaW50OHg0OworICAgIGNhc2UgVmVydGV4Rm9y
bWF0OjpVbm9ybTh4MjoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfVW5vcm04eDI7
CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlVub3JtOHg0OgorICAgICAgICByZXR1cm4gV0dQVVZl
cnRleEZvcm1hdF9Vbm9ybTh4NDsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6U25vcm04eDI6Cisg
ICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X1Nub3JtOHgyOworICAgIGNhc2UgVmVydGV4
Rm9ybWF0OjpTbm9ybTh4NDoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfU25vcm04
eDQ7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlVpbnQxNngyOgorICAgICAgICByZXR1cm4gV0dQ
VVZlcnRleEZvcm1hdF9VaW50MTZ4MjsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6VWludDE2eDQ6
CisgICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X1VpbnQxNng0OworICAgIGNhc2UgVmVy
dGV4Rm9ybWF0OjpTaW50MTZ4MjoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfU2lu
dDE2eDI7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlNpbnQxNng0OgorICAgICAgICByZXR1cm4g
V0dQVVZlcnRleEZvcm1hdF9TaW50MTZ4NDsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6VW5vcm0x
NngyOgorICAgICAgICByZXR1cm4gV0dQVVZlcnRleEZvcm1hdF9Vbm9ybTE2eDI7CisgICAgY2Fz
ZSBWZXJ0ZXhGb3JtYXQ6OlVub3JtMTZ4NDoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3Jt
YXRfVW5vcm0xNng0OworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpTbm9ybTE2eDI6CisgICAgICAg
IHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X1Nub3JtMTZ4MjsKKyAgICBjYXNlIFZlcnRleEZvcm1h
dDo6U25vcm0xNng0OgorICAgICAgICByZXR1cm4gV0dQVVZlcnRleEZvcm1hdF9Tbm9ybTE2eDQ7
CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OkZsb2F0MTZ4MjoKKyAgICAgICAgcmV0dXJuIFdHUFVW
ZXJ0ZXhGb3JtYXRfRmxvYXQxNngyOworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpGbG9hdDE2eDQ6
CisgICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X0Zsb2F0MTZ4NDsKKyAgICBjYXNlIFZl
cnRleEZvcm1hdDo6RmxvYXQzMjoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfRmxv
YXQzMjsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6RmxvYXQzMngyOgorICAgICAgICByZXR1cm4g
V0dQVVZlcnRleEZvcm1hdF9GbG9hdDMyeDI7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OkZsb2F0
MzJ4MzoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfRmxvYXQzMngzOworICAgIGNh
c2UgVmVydGV4Rm9ybWF0OjpGbG9hdDMyeDQ6CisgICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9y
bWF0X0Zsb2F0MzJ4NDsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6VWludDMyOgorICAgICAgICBy
ZXR1cm4gV0dQVVZlcnRleEZvcm1hdF9VaW50MzI7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlVp
bnQzMngyOgorICAgICAgICByZXR1cm4gV0dQVVZlcnRleEZvcm1hdF9VaW50MzJ4MjsKKyAgICBj
YXNlIFZlcnRleEZvcm1hdDo6VWludDMyeDM6CisgICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9y
bWF0X1VpbnQzMngzOworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpVaW50MzJ4NDoKKyAgICAgICAg
cmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfVWludDMyeDQ7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6
OlNpbnQzMjoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfU2ludDMyOworICAgIGNh
c2UgVmVydGV4Rm9ybWF0OjpTaW50MzJ4MjoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3Jt
YXRfU2ludDMyeDI7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlNpbnQzMngzOgorICAgICAgICBy
ZXR1cm4gV0dQVVZlcnRleEZvcm1hdF9TaW50MzJ4MzsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6
U2ludDMyeDQ6CisgICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X1NpbnQzMng0OworICAg
IH0KK30KKworV0dQVVZlcnRleFN0ZXBNb2RlIGNvbnZlcnRUb0JhY2tpbmcoVmVydGV4U3RlcE1v
ZGUgdmVydGV4U3RlcE1vZGUpCit7CisgICAgc3dpdGNoICh2ZXJ0ZXhTdGVwTW9kZSkgeworICAg
IGNhc2UgVmVydGV4U3RlcE1vZGU6OlZlcnRleDoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhT
dGVwTW9kZV9WZXJ0ZXg7CisgICAgY2FzZSBWZXJ0ZXhTdGVwTW9kZTo6SW5zdGFuY2U6CisgICAg
ICAgIHJldHVybiBXR1BVVmVydGV4U3RlcE1vZGVfSW5zdGFuY2U7CisgICAgfQorfQorCitXR1BV
QnVmZmVyVXNhZ2VGbGFncyBjb252ZXJ0QnVmZmVyVXNhZ2VGbGFnc1RvQmFja2luZyhCdWZmZXJV
c2FnZUZsYWdzIGJ1ZmZlclVzYWdlRmxhZ3MpCit7CisgICAgV0dQVUJ1ZmZlclVzYWdlRmxhZ3Mg
cmVzdWx0ID0gMDsKKyAgICBpZiAoYnVmZmVyVXNhZ2VGbGFncyAmIEJ1ZmZlclVzYWdlOjpNQVBf
UkVBRCkKKyAgICAgICAgcmVzdWx0IHw9IFdHUFVCdWZmZXJVc2FnZV9NYXBSZWFkOworICAgIGlm
IChidWZmZXJVc2FnZUZsYWdzICYgQnVmZmVyVXNhZ2U6Ok1BUF9XUklURSkKKyAgICAgICAgcmVz
dWx0IHw9IFdHUFVCdWZmZXJVc2FnZV9NYXBXcml0ZTsKKyAgICBpZiAoYnVmZmVyVXNhZ2VGbGFn
cyAmIEJ1ZmZlclVzYWdlOjpDT1BZX1NSQykKKyAgICAgICAgcmVzdWx0IHw9IFdHUFVCdWZmZXJV
c2FnZV9Db3B5U3JjOworICAgIGlmIChidWZmZXJVc2FnZUZsYWdzICYgQnVmZmVyVXNhZ2U6OkNP
UFlfRFNUKQorICAgICAgICByZXN1bHQgfD0gV0dQVUJ1ZmZlclVzYWdlX0NvcHlEc3Q7CisgICAg
aWYgKGJ1ZmZlclVzYWdlRmxhZ3MgJiBCdWZmZXJVc2FnZTo6SU5ERVgpCisgICAgICAgIHJlc3Vs
dCB8PSBXR1BVQnVmZmVyVXNhZ2VfSW5kZXg7CisgICAgaWYgKGJ1ZmZlclVzYWdlRmxhZ3MgJiBC
dWZmZXJVc2FnZTo6VkVSVEVYKQorICAgICAgICByZXN1bHQgfD0gV0dQVUJ1ZmZlclVzYWdlX1Zl
cnRleDsKKyAgICBpZiAoYnVmZmVyVXNhZ2VGbGFncyAmIEJ1ZmZlclVzYWdlOjpVTklGT1JNKQor
ICAgICAgICByZXN1bHQgfD0gV0dQVUJ1ZmZlclVzYWdlX1VuaWZvcm07CisgICAgaWYgKGJ1ZmZl
clVzYWdlRmxhZ3MgJiBCdWZmZXJVc2FnZTo6U1RPUkFHRSkKKyAgICAgICAgcmVzdWx0IHw9IFdH
UFVCdWZmZXJVc2FnZV9TdG9yYWdlOworICAgIGlmIChidWZmZXJVc2FnZUZsYWdzICYgQnVmZmVy
VXNhZ2U6OklORElSRUNUKQorICAgICAgICByZXN1bHQgfD0gV0dQVUJ1ZmZlclVzYWdlX0luZGly
ZWN0OworICAgIGlmIChidWZmZXJVc2FnZUZsYWdzICYgQnVmZmVyVXNhZ2U6OlFVRVJZX1JFU09M
VkUpCisgICAgICAgIHJlc3VsdCB8PSBXR1BVQnVmZmVyVXNhZ2VfUXVlcnlSZXNvbHZlOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK1dHUFVDb2xvcldyaXRlTWFza0ZsYWdzIGNvbnZlcnRDb2xv
cldyaXRlRmxhZ3NUb0JhY2tpbmcoQ29sb3JXcml0ZUZsYWdzIGNvbG9yV3JpdGVGbGFncykKK3sK
KyAgICBXR1BVQ29sb3JXcml0ZU1hc2tGbGFncyByZXN1bHQgPSAwOworICAgIGlmIChjb2xvcldy
aXRlRmxhZ3MgJiBDb2xvcldyaXRlOjpSRUQpCisgICAgICAgIHJlc3VsdCB8PSBXR1BVQ29sb3JX
cml0ZU1hc2tfUmVkOworICAgIGlmIChjb2xvcldyaXRlRmxhZ3MgJiBDb2xvcldyaXRlOjpHUkVF
TikKKyAgICAgICAgcmVzdWx0IHw9IFdHUFVDb2xvcldyaXRlTWFza19HcmVlbjsKKyAgICBpZiAo
Y29sb3JXcml0ZUZsYWdzICYgQ29sb3JXcml0ZTo6QkxVRSkKKyAgICAgICAgcmVzdWx0IHw9IFdH
UFVDb2xvcldyaXRlTWFza19CbHVlOworICAgIGlmIChjb2xvcldyaXRlRmxhZ3MgJiBDb2xvcldy
aXRlOjpBTFBIQSkKKyAgICAgICAgcmVzdWx0IHw9IFdHUFVDb2xvcldyaXRlTWFza19BbHBoYTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitXR1BVTWFwTW9kZUZsYWdzIGNvbnZlcnRNYXBNb2Rl
RmxhZ3NUb0JhY2tpbmcoTWFwTW9kZUZsYWdzIG1hcE1vZGVGbGFncykKK3sKKyAgICBXR1BVTWFw
TW9kZUZsYWdzIHJlc3VsdCA9IDA7CisgICAgaWYgKG1hcE1vZGVGbGFncyAmIE1hcE1vZGU6OlJF
QUQpCisgICAgICAgIHJlc3VsdCB8PSBXR1BVTWFwTW9kZV9SZWFkOworICAgIGlmIChtYXBNb2Rl
RmxhZ3MgJiBNYXBNb2RlOjpXUklURSkKKyAgICAgICAgcmVzdWx0IHw9IFdHUFVNYXBNb2RlX1dy
aXRlOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dHUFVTaGFkZXJTdGFnZUZsYWdzIGNvbnZl
cnRTaGFkZXJTdGFnZUZsYWdzVG9CYWNraW5nKFNoYWRlclN0YWdlRmxhZ3Mgc2hhZGVyU3RhZ2VG
bGFncykKK3sKKyAgICBXR1BVU2hhZGVyU3RhZ2VGbGFncyByZXN1bHQgPSAwOworICAgIGlmIChz
aGFkZXJTdGFnZUZsYWdzICYgU2hhZGVyU3RhZ2U6OlZFUlRFWCkKKyAgICAgICAgcmVzdWx0IHw9
IFdHUFVTaGFkZXJTdGFnZV9WZXJ0ZXg7CisgICAgaWYgKHNoYWRlclN0YWdlRmxhZ3MgJiBTaGFk
ZXJTdGFnZTo6RlJBR01FTlQpCisgICAgICAgIHJlc3VsdCB8PSBXR1BVU2hhZGVyU3RhZ2VfRnJh
Z21lbnQ7CisgICAgaWYgKHNoYWRlclN0YWdlRmxhZ3MgJiBTaGFkZXJTdGFnZTo6Q09NUFVURSkK
KyAgICAgICAgcmVzdWx0IHw9IFdHUFVTaGFkZXJTdGFnZV9Db21wdXRlOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK1dHUFVUZXh0dXJlVXNhZ2VGbGFncyBjb252ZXJ0VGV4dHVyZVVzYWdlRmxh
Z3NUb0JhY2tpbmcoVGV4dHVyZVVzYWdlRmxhZ3MgdGV4dHVyZVVzYWdlRmxhZ3MpCit7CisgICAg
V0dQVVRleHR1cmVVc2FnZUZsYWdzIHJlc3VsdCA9IDA7CisgICAgaWYgKHRleHR1cmVVc2FnZUZs
YWdzICYgVGV4dHVyZVVzYWdlOjpDT1BZX1NSQykKKyAgICAgICAgcmVzdWx0IHw9IFdHUFVUZXh0
dXJlVXNhZ2VfQ29weVNyYzsKKyAgICBpZiAodGV4dHVyZVVzYWdlRmxhZ3MgJiBUZXh0dXJlVXNh
Z2U6OkNPUFlfRFNUKQorICAgICAgICByZXN1bHQgfD0gV0dQVVRleHR1cmVVc2FnZV9Db3B5RHN0
OworICAgIGlmICh0ZXh0dXJlVXNhZ2VGbGFncyAmIFRleHR1cmVVc2FnZTo6VEVYVFVSRV9CSU5E
SU5HKQorICAgICAgICByZXN1bHQgfD0gV0dQVVRleHR1cmVVc2FnZV9UZXh0dXJlQmluZGluZzsK
KyAgICBpZiAodGV4dHVyZVVzYWdlRmxhZ3MgJiBUZXh0dXJlVXNhZ2U6OlNUT1JBR0VfQklORElO
RykKKyAgICAgICAgcmVzdWx0IHw9IFdHUFVUZXh0dXJlVXNhZ2VfU3RvcmFnZUJpbmRpbmc7Cisg
ICAgaWYgKHRleHR1cmVVc2FnZUZsYWdzICYgVGV4dHVyZVVzYWdlOjpSRU5ERVJfQVRUQUNITUVO
VCkKKyAgICAgICAgcmVzdWx0IHw9IFdHUFVUZXh0dXJlVXNhZ2VfUmVuZGVyQXR0YWNobWVudDsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitXR1BVQ29sb3IgY29udmVydFRvQmFja2luZyhjb25z
dCBDb2xvciYgY29sb3IpCit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oY29sb3IsIFtdIChj
b25zdCBWZWN0b3I8ZG91YmxlPiYgdmVjdG9yKSB7CisgICAgICAgIHJldHVybiBXR1BVQ29sb3Ig
eworICAgICAgICAgICAgdmVjdG9yLnNpemUoKSA+IDAgPyB2ZWN0b3JbMF0gOiAwLAorICAgICAg
ICAgICAgdmVjdG9yLnNpemUoKSA+IDEgPyB2ZWN0b3JbMV0gOiAwLAorICAgICAgICAgICAgdmVj
dG9yLnNpemUoKSA+IDIgPyB2ZWN0b3JbMl0gOiAwLAorICAgICAgICAgICAgdmVjdG9yLnNpemUo
KSA+IDMgPyB2ZWN0b3JbM10gOiAwLAorICAgICAgICB9OworICAgIH0sIFtdIChjb25zdCBDb2xv
ckRpY3QmIGNvbG9yKSB7CisgICAgICAgIHJldHVybiBXR1BVQ29sb3IgeworICAgICAgICAgICAg
Y29sb3IuciwKKyAgICAgICAgICAgIGNvbG9yLmcsCisgICAgICAgICAgICBjb2xvci5iLAorICAg
ICAgICAgICAgY29sb3IuYSwKKyAgICAgICAgfTsKKyAgICB9KTsKK30KKworV0dQVUV4dGVudDNE
IGNvbnZlcnRUb0JhY2tpbmcoY29uc3QgRXh0ZW50M0QmIGV4dGVudDNEKQoreworICAgIHJldHVy
biBXVEY6OnN3aXRjaE9uKGV4dGVudDNELCBbXSAoY29uc3QgVmVjdG9yPEludGVnZXJDb29yZGlu
YXRlPiYgdmVjdG9yKSB7CisgICAgICAgIHJldHVybiBXR1BVRXh0ZW50M0QgeworICAgICAgICAg
ICAgdmVjdG9yLnNpemUoKSA+IDAgPyB2ZWN0b3JbMF0gOiAwLAorICAgICAgICAgICAgdmVjdG9y
LnNpemUoKSA+IDEgPyB2ZWN0b3JbMV0gOiAwLAorICAgICAgICAgICAgdmVjdG9yLnNpemUoKSA+
IDIgPyB2ZWN0b3JbMl0gOiAwLAorICAgICAgICB9OworICAgIH0sIFtdIChjb25zdCBFeHRlbnQz
RERpY3QmIGV4dGVudCkgeworICAgICAgICByZXR1cm4gV0dQVUV4dGVudDNEIHsKKyAgICAgICAg
ICAgIGV4dGVudC53aWR0aCwKKyAgICAgICAgICAgIGV4dGVudC5oZWlnaHQsCisgICAgICAgICAg
ICBleHRlbnQuZGVwdGhPckFycmF5TGF5ZXJzLAorICAgICAgICB9OworICAgIH0pOworfQorCitX
R1BVT3JpZ2luM0QgY29udmVydFRvQmFja2luZyhjb25zdCBPcmlnaW4yRCYgb3JpZ2luMkQpCit7
CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24ob3JpZ2luMkQsIFtdIChjb25zdCBWZWN0b3I8SW50
ZWdlckNvb3JkaW5hdGU+JiB2ZWN0b3IpIHsKKyAgICAgICAgcmV0dXJuIFdHUFVPcmlnaW4zRCB7
CisgICAgICAgICAgICB2ZWN0b3Iuc2l6ZSgpID4gMCA/IHZlY3RvclswXSA6IDAsCisgICAgICAg
ICAgICB2ZWN0b3Iuc2l6ZSgpID4gMSA/IHZlY3RvclsxXSA6IDAsCisgICAgICAgICAgICAwLAor
ICAgICAgICB9OworICAgIH0sIFtdIChjb25zdCBPcmlnaW4yRERpY3QmIG9yaWdpbikgeworICAg
ICAgICByZXR1cm4gV0dQVU9yaWdpbjNEIHsKKyAgICAgICAgICAgIG9yaWdpbi54LAorICAgICAg
ICAgICAgb3JpZ2luLnksCisgICAgICAgICAgICAwLAorICAgICAgICB9OworICAgIH0pOworfQor
CitXR1BVT3JpZ2luM0QgY29udmVydFRvQmFja2luZyhjb25zdCBPcmlnaW4zRCYgb3JpZ2luM0Qp
Cit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24ob3JpZ2luM0QsIFtdIChjb25zdCBWZWN0b3I8
SW50ZWdlckNvb3JkaW5hdGU+JiB2ZWN0b3IpIHsKKyAgICAgICAgcmV0dXJuIFdHUFVPcmlnaW4z
RCB7CisgICAgICAgICAgICB2ZWN0b3Iuc2l6ZSgpID4gMCA/IHZlY3RvclswXSA6IDAsCisgICAg
ICAgICAgICB2ZWN0b3Iuc2l6ZSgpID4gMSA/IHZlY3RvclsxXSA6IDAsCisgICAgICAgICAgICB2
ZWN0b3Iuc2l6ZSgpID4gMiA/IHZlY3RvclsyXSA6IDAsCisgICAgICAgIH07CisgICAgfSwgW10g
KGNvbnN0IE9yaWdpbjNERGljdCYgb3JpZ2luKSB7CisgICAgICAgIHJldHVybiBXR1BVT3JpZ2lu
M0QgeworICAgICAgICAgICAgb3JpZ2luLngsCisgICAgICAgICAgICBvcmlnaW4ueSwKKyAgICAg
ICAgICAgIG9yaWdpbi56LAorICAgICAgICB9OworICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFj
ZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
UEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb252ZXJ0VG9CYWNraW5nLmggYi9T
b3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbnZlcnRU
b0JhY2tpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZTQxZDc5NGFiNGJmMzY2OWRkNzE0YzEyNjM0MWY4Njk4
NGNlNTA5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGlj
cy9XZWJHUFUvSW1wbC9XZWJHUFVDb252ZXJ0VG9CYWNraW5nLmgKQEAgLTAsMCArMSwxMDkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYkdQVUFkZHJlc3NNb2Rl
LmgiCisjaW5jbHVkZSAiV2ViR1BVQmxlbmRGYWN0b3IuaCIKKyNpbmNsdWRlICJXZWJHUFVCbGVu
ZE9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIldlYkdQVUJ1ZmZlckJpbmRpbmdUeXBlLmgiCisjaW5j
bHVkZSAiV2ViR1BVQnVmZmVyVXNhZ2UuaCIKKyNpbmNsdWRlICJXZWJHUFVDb2xvci5oIgorI2lu
Y2x1ZGUgIldlYkdQVUNvbG9yV3JpdGUuaCIKKyNpbmNsdWRlICJXZWJHUFVDb21wYXJlRnVuY3Rp
b24uaCIKKyNpbmNsdWRlICJXZWJHUFVDb21waWxhdGlvbk1lc3NhZ2VUeXBlLmgiCisjaW5jbHVk
ZSAiV2ViR1BVQ3VsbE1vZGUuaCIKKyNpbmNsdWRlICJXZWJHUFVFcnJvckZpbHRlci5oIgorI2lu
Y2x1ZGUgIldlYkdQVUV4dGVudDNELmgiCisjaW5jbHVkZSAiV2ViR1BVRmVhdHVyZU5hbWUuaCIK
KyNpbmNsdWRlICJXZWJHUFVGaWx0ZXJNb2RlLmgiCisjaW5jbHVkZSAiV2ViR1BVRnJvbnRGYWNl
LmgiCisjaW5jbHVkZSAiV2ViR1BVSW5kZXhGb3JtYXQuaCIKKyNpbmNsdWRlICJXZWJHUFVMb2Fk
T3AuaCIKKyNpbmNsdWRlICJXZWJHUFVNYXBNb2RlLmgiCisjaW5jbHVkZSAiV2ViR1BVT3JpZ2lu
MkQuaCIKKyNpbmNsdWRlICJXZWJHUFVPcmlnaW4zRC5oIgorI2luY2x1ZGUgIldlYkdQVVBpcGVs
aW5lU3RhdGlzdGljTmFtZS5oIgorI2luY2x1ZGUgIldlYkdQVVBvd2VyUHJlZmVyZW5jZS5oIgor
I2luY2x1ZGUgIldlYkdQVVByaW1pdGl2ZVRvcG9sb2d5LmgiCisjaW5jbHVkZSAiV2ViR1BVUXVl
cnlUeXBlLmgiCisjaW5jbHVkZSAiV2ViR1BVU2FtcGxlckJpbmRpbmdUeXBlLmgiCisjaW5jbHVk
ZSAiV2ViR1BVU2hhZGVyU3RhZ2UuaCIKKyNpbmNsdWRlICJXZWJHUFVTdGVuY2lsT3BlcmF0aW9u
LmgiCisjaW5jbHVkZSAiV2ViR1BVU3RvcmFnZVRleHR1cmVBY2Nlc3MuaCIKKyNpbmNsdWRlICJX
ZWJHUFVTdG9yZU9wLmgiCisjaW5jbHVkZSAiV2ViR1BVVGV4dHVyZUFzcGVjdC5oIgorI2luY2x1
ZGUgIldlYkdQVVRleHR1cmVEaW1lbnNpb24uaCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJlRm9y
bWF0LmgiCisjaW5jbHVkZSAiV2ViR1BVVGV4dHVyZVNhbXBsZVR5cGUuaCIKKyNpbmNsdWRlICJX
ZWJHUFVUZXh0dXJlVXNhZ2UuaCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJlVmlld0RpbWVuc2lv
bi5oIgorI2luY2x1ZGUgIldlYkdQVVZlcnRleEZvcm1hdC5oIgorI2luY2x1ZGUgIldlYkdQVVZl
cnRleFN0ZXBNb2RlLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorCituYW1lc3BhY2Ug
UEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitXR1BVQWRkcmVzc01vZGUgY29udmVydFRvQmFj
a2luZyhBZGRyZXNzTW9kZSk7CitXR1BVQmxlbmRGYWN0b3IgY29udmVydFRvQmFja2luZyhCbGVu
ZEZhY3Rvcik7CitXR1BVQmxlbmRPcGVyYXRpb24gY29udmVydFRvQmFja2luZyhCbGVuZE9wZXJh
dGlvbik7CitXR1BVQnVmZmVyQmluZGluZ1R5cGUgY29udmVydFRvQmFja2luZyhCdWZmZXJCaW5k
aW5nVHlwZSk7CitXR1BVQ29tcGFyZUZ1bmN0aW9uIGNvbnZlcnRUb0JhY2tpbmcoQ29tcGFyZUZ1
bmN0aW9uKTsKK1dHUFVDb21waWxhdGlvbk1lc3NhZ2VUeXBlIGNvbnZlcnRUb0JhY2tpbmcoQ29t
cGlsYXRpb25NZXNzYWdlVHlwZSk7CitXR1BVQ3VsbE1vZGUgY29udmVydFRvQmFja2luZyhDdWxs
TW9kZSk7CitXR1BVRXJyb3JGaWx0ZXIgY29udmVydFRvQmFja2luZyhFcnJvckZpbHRlcik7CitX
R1BVRmVhdHVyZU5hbWUgY29udmVydFRvQmFja2luZyhGZWF0dXJlTmFtZSk7CitXR1BVRmlsdGVy
TW9kZSBjb252ZXJ0VG9CYWNraW5nKEZpbHRlck1vZGUpOworV0dQVUZyb250RmFjZSBjb252ZXJ0
VG9CYWNraW5nKEZyb250RmFjZSk7CitXR1BVSW5kZXhGb3JtYXQgY29udmVydFRvQmFja2luZyhJ
bmRleEZvcm1hdCk7CitXR1BVTG9hZE9wIGNvbnZlcnRUb0JhY2tpbmcoTG9hZE9wKTsKK1dHUFVQ
aXBlbGluZVN0YXRpc3RpY05hbWUgY29udmVydFRvQmFja2luZyhQaXBlbGluZVN0YXRpc3RpY05h
bWUpOworV0dQVVBvd2VyUHJlZmVyZW5jZSBjb252ZXJ0VG9CYWNraW5nKFBvd2VyUHJlZmVyZW5j
ZSk7CitXR1BVUHJpbWl0aXZlVG9wb2xvZ3kgY29udmVydFRvQmFja2luZyhQcmltaXRpdmVUb3Bv
bG9neSk7CitXR1BVUXVlcnlUeXBlIGNvbnZlcnRUb0JhY2tpbmcoUXVlcnlUeXBlKTsKK1dHUFVT
YW1wbGVyQmluZGluZ1R5cGUgY29udmVydFRvQmFja2luZyhTYW1wbGVyQmluZGluZ1R5cGUpOwor
V0dQVVN0ZW5jaWxPcGVyYXRpb24gY29udmVydFRvQmFja2luZyhTdGVuY2lsT3BlcmF0aW9uKTsK
K1dHUFVTdG9yYWdlVGV4dHVyZUFjY2VzcyBjb252ZXJ0VG9CYWNraW5nKFN0b3JhZ2VUZXh0dXJl
QWNjZXNzKTsKK1dHUFVTdG9yZU9wIGNvbnZlcnRUb0JhY2tpbmcoU3RvcmVPcCk7CitXR1BVVGV4
dHVyZUFzcGVjdCBjb252ZXJ0VG9CYWNraW5nKFRleHR1cmVBc3BlY3QpOworV0dQVVRleHR1cmVE
aW1lbnNpb24gY29udmVydFRvQmFja2luZyhUZXh0dXJlRGltZW5zaW9uKTsKK1dHUFVUZXh0dXJl
Rm9ybWF0IGNvbnZlcnRUb0JhY2tpbmcoVGV4dHVyZUZvcm1hdCk7CitXR1BVVGV4dHVyZVNhbXBs
ZVR5cGUgY29udmVydFRvQmFja2luZyhUZXh0dXJlU2FtcGxlVHlwZSk7CitXR1BVVGV4dHVyZVZp
ZXdEaW1lbnNpb24gY29udmVydFRvQmFja2luZyhUZXh0dXJlVmlld0RpbWVuc2lvbik7CitXR1BV
VmVydGV4Rm9ybWF0IGNvbnZlcnRUb0JhY2tpbmcoVmVydGV4Rm9ybWF0KTsKK1dHUFVWZXJ0ZXhT
dGVwTW9kZSBjb252ZXJ0VG9CYWNraW5nKFZlcnRleFN0ZXBNb2RlKTsKK1dHUFVCdWZmZXJVc2Fn
ZUZsYWdzIGNvbnZlcnRCdWZmZXJVc2FnZUZsYWdzVG9CYWNraW5nKEJ1ZmZlclVzYWdlRmxhZ3Mp
OworV0dQVUNvbG9yV3JpdGVNYXNrRmxhZ3MgY29udmVydENvbG9yV3JpdGVGbGFnc1RvQmFja2lu
ZyhDb2xvcldyaXRlRmxhZ3MpOworV0dQVU1hcE1vZGVGbGFncyBjb252ZXJ0TWFwTW9kZUZsYWdz
VG9CYWNraW5nKE1hcE1vZGVGbGFncyk7CitXR1BVU2hhZGVyU3RhZ2VGbGFncyBjb252ZXJ0U2hh
ZGVyU3RhZ2VGbGFnc1RvQmFja2luZyhTaGFkZXJTdGFnZUZsYWdzKTsKK1dHUFVUZXh0dXJlVXNh
Z2VGbGFncyBjb252ZXJ0VGV4dHVyZVVzYWdlRmxhZ3NUb0JhY2tpbmcoVGV4dHVyZVVzYWdlRmxh
Z3MpOworV0dQVUNvbG9yIGNvbnZlcnRUb0JhY2tpbmcoY29uc3QgQ29sb3ImKTsKK1dHUFVFeHRl
bnQzRCBjb252ZXJ0VG9CYWNraW5nKGNvbnN0IEV4dGVudDNEJik7CitXR1BVT3JpZ2luM0QgY29u
dmVydFRvQmFja2luZyhjb25zdCBPcmlnaW4yRCYpOworV0dQVU9yaWdpbjNEIGNvbnZlcnRUb0Jh
Y2tpbmcoY29uc3QgT3JpZ2luM0QmKTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVz
cGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3Mv
V2ViR1BVL0ltcGwvV2ViR1BVRGV2aWNlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVURldmljZUltcGwuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdl
MTdiMjMwZWNmZTkyZjEzZDQ2YzZhOTA0MTgzNTBhZGUzNTA3MTYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVURldmlj
ZUltcGwuY3BwCkBAIC0wLDAgKzEsNTgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYkdQVURldmljZUltcGwuaCIKKworI2luY2x1ZGUgIldlYkdQVUJp
bmRHcm91cERlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJXZWJHUFVCaW5kR3JvdXBJbXBsLmgiCisj
aW5jbHVkZSAiV2ViR1BVQmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIldl
YkdQVUJpbmRHcm91cExheW91dEltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVCdWZmZXJEZXNjcmlw
dG9yLmgiCisjaW5jbHVkZSAiV2ViR1BVQnVmZmVySW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVUNv
bW1hbmRFbmNvZGVyRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIldlYkdQVUNvbW1hbmRFbmNvZGVy
SW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVUNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IuaCIKKyNp
bmNsdWRlICJXZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVQ29u
dmVydFRvQmFja2luZy5oIgorI2luY2x1ZGUgIldlYkdQVUV4dGVybmFsVGV4dHVyZUltcGwuaCIK
KyNpbmNsdWRlICJXZWJHUFVPdXRPZk1lbW9yeUVycm9yLmgiCisjaW5jbHVkZSAiV2ViR1BVUGlw
ZWxpbmVMYXlvdXREZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiV2ViR1BVUGlwZWxpbmVMYXlvdXRJ
bXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVUXVlcnlTZXREZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAi
V2ViR1BVUXVlcnlTZXRJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVUmVuZGVyQnVuZGxlRW5jb2Rl
ckRlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJXZWJHUFVSZW5kZXJCdW5kbGVFbmNvZGVySW1wbC5o
IgorI2luY2x1ZGUgIldlYkdQVVJlbmRlclBpcGVsaW5lRGVzY3JpcHRvci5oIgorI2luY2x1ZGUg
IldlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVVNhbXBsZXJEZXNj
cmlwdG9yLmgiCisjaW5jbHVkZSAiV2ViR1BVU2FtcGxlckltcGwuaCIKKyNpbmNsdWRlICJXZWJH
UFVTaGFkZXJNb2R1bGVEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiV2ViR1BVU2hhZGVyTW9kdWxl
SW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVVRleHR1cmVEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAi
V2ViR1BVVGV4dHVyZUltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJlVmlld0ltcGwuaCIK
KyNpbmNsdWRlICJXZWJHUFVWYWxpZGF0aW9uRXJyb3IuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2Vi
R1BVRXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK0Rldmlj
ZUltcGw6OkRldmljZUltcGwoV0dQVURldmljZSBkZXZpY2UsIFJlZjxTdXBwb3J0ZWRGZWF0dXJl
cz4mJiBmZWF0dXJlcywgUmVmPFN1cHBvcnRlZExpbWl0cz4mJiBsaW1pdHMpCisgICAgOiBEZXZp
Y2UoV1RGTW92ZShmZWF0dXJlcyksIFdURk1vdmUobGltaXRzKSkKKyAgICAsIG1fYmFja2luZyhk
ZXZpY2UpCit7Cit9CisKK0RldmljZUltcGw6On5EZXZpY2VJbXBsKCkKK3sKKyAgICB3Z3B1RGV2
aWNlUmVsZWFzZShtX2JhY2tpbmcpOworfQorCit2b2lkIERldmljZUltcGw6OmRlc3Ryb3koKQor
eworICAgIHdncHVEZXZpY2VEZXN0cm95KG1fYmFja2luZyk7Cit9CisKK1JlZjxCdWZmZXI+IERl
dmljZUltcGw6OmNyZWF0ZUJ1ZmZlcihjb25zdCBCdWZmZXJEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
KQoreworICAgIGF1dG8gbGFiZWwgPSBkZXNjcmlwdG9yLmxhYmVsLnV0ZjgoKTsKKworICAgIFdH
UFVCdWZmZXJEZXNjcmlwdG9yIGJhY2tpbmdEZXNjcmlwdG9yIHsKKyAgICAgICAgbnVsbHB0ciwK
KyAgICAgICAgbGFiZWwuZGF0YSgpLAorICAgICAgICBjb252ZXJ0QnVmZmVyVXNhZ2VGbGFnc1Rv
QmFja2luZyhkZXNjcmlwdG9yLnVzYWdlKSwKKyAgICAgICAgZGVzY3JpcHRvci5zaXplLAorICAg
ICAgICBkZXNjcmlwdG9yLm1hcHBlZEF0Q3JlYXRpb24sCisgICAgfTsKKworICAgIHJldHVybiBC
dWZmZXJJbXBsOjpjcmVhdGUod2dwdURldmljZUNyZWF0ZUJ1ZmZlcihtX2JhY2tpbmcsICZiYWNr
aW5nRGVzY3JpcHRvcikpOworfQorCitSZWY8VGV4dHVyZT4gRGV2aWNlSW1wbDo6Y3JlYXRlVGV4
dHVyZShjb25zdCBUZXh0dXJlRGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBhdXRvIHNp
emUgPSBjb252ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3Iuc2l6ZSk7CisKKyAgICBhdXRvIGxhYmVs
ID0gZGVzY3JpcHRvci5sYWJlbC51dGY4KCk7CisKKyAgICBXR1BVVGV4dHVyZURlc2NyaXB0b3Ig
YmFja2luZ0Rlc2NyaXB0b3IgeworICAgICAgICBudWxscHRyLAorICAgICAgICBsYWJlbC5kYXRh
KCksCisgICAgICAgIGNvbnZlcnRUZXh0dXJlVXNhZ2VGbGFnc1RvQmFja2luZyhkZXNjcmlwdG9y
LnVzYWdlKSwKKyAgICAgICAgY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLmRpbWVuc2lvbiks
CisgICAgICAgIHNpemUsCisgICAgICAgIGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci5mb3Jt
YXQpLAorICAgICAgICBkZXNjcmlwdG9yLm1pcExldmVsQ291bnQsCisgICAgICAgIGRlc2NyaXB0
b3Iuc2FtcGxlQ291bnQsCisgICAgfTsKKworICAgIHJldHVybiBUZXh0dXJlSW1wbDo6Y3JlYXRl
KHdncHVEZXZpY2VDcmVhdGVUZXh0dXJlKG1fYmFja2luZywgJmJhY2tpbmdEZXNjcmlwdG9yKSwg
ZGVzY3JpcHRvci5mb3JtYXQsIGRlc2NyaXB0b3IuZGltZW5zaW9uKTsKK30KKworUmVmPFNhbXBs
ZXI+IERldmljZUltcGw6OmNyZWF0ZVNhbXBsZXIoY29uc3QgU2FtcGxlckRlc2NyaXB0b3ImIGRl
c2NyaXB0b3IpCit7CisgICAgYXV0byBsYWJlbCA9IGRlc2NyaXB0b3IubGFiZWwudXRmOCgpOwor
CisgICAgV0dQVVNhbXBsZXJEZXNjcmlwdG9yIGJhY2tpbmdEZXNjcmlwdG9yIHsKKyAgICAgICAg
bnVsbHB0ciwKKyAgICAgICAgbGFiZWwuZGF0YSgpLAorICAgICAgICBjb252ZXJ0VG9CYWNraW5n
KGRlc2NyaXB0b3IuYWRkcmVzc01vZGVVKSwKKyAgICAgICAgY29udmVydFRvQmFja2luZyhkZXNj
cmlwdG9yLmFkZHJlc3NNb2RlViksCisgICAgICAgIGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRv
ci5hZGRyZXNzTW9kZVcpLAorICAgICAgICBjb252ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3IubWFn
RmlsdGVyKSwKKyAgICAgICAgY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLm1pbkZpbHRlciks
CisgICAgICAgIGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci5taXBtYXBGaWx0ZXIpLAorICAg
ICAgICBkZXNjcmlwdG9yLmxvZE1pbkNsYW1wLAorICAgICAgICBkZXNjcmlwdG9yLmxvZE1heENs
YW1wLAorICAgICAgICBkZXNjcmlwdG9yLmNvbXBhcmUgPyBjb252ZXJ0VG9CYWNraW5nKCpkZXNj
cmlwdG9yLmNvbXBhcmUpIDogV0dQVUNvbXBhcmVGdW5jdGlvbl9BbHdheXMsCisgICAgICAgIGRl
c2NyaXB0b3IubWF4QW5pc290cm9weSwKKyAgICB9OworCisgICAgcmV0dXJuIFNhbXBsZXJJbXBs
OjpjcmVhdGUod2dwdURldmljZUNyZWF0ZVNhbXBsZXIobV9iYWNraW5nLCAmYmFja2luZ0Rlc2Ny
aXB0b3IpKTsKK30KKworUmVmPEV4dGVybmFsVGV4dHVyZT4gRGV2aWNlSW1wbDo6aW1wb3J0RXh0
ZXJuYWxUZXh0dXJlKGNvbnN0IEV4dGVybmFsVGV4dHVyZURlc2NyaXB0b3ImKQoreworICAgIHJl
dHVybiBFeHRlcm5hbFRleHR1cmVJbXBsOjpjcmVhdGUoKTsKK30KKworUmVmPEJpbmRHcm91cExh
eW91dD4gRGV2aWNlSW1wbDo6Y3JlYXRlQmluZEdyb3VwTGF5b3V0KGNvbnN0IEJpbmRHcm91cExh
eW91dERlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgYXV0byBsYWJlbCA9IGRlc2NyaXB0
b3IubGFiZWwudXRmOCgpOworCisgICAgVmVjdG9yPFdHUFVCaW5kR3JvdXBMYXlvdXRFbnRyeT4g
YmFja2luZ0VudHJpZXM7CisgICAgYmFja2luZ0VudHJpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShkZXNjcmlwdG9yLmVudHJpZXMuc2l6ZSgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5
IDogZGVzY3JpcHRvci5lbnRyaWVzKSB7CisgICAgICAgIGJhY2tpbmdFbnRyaWVzLnVuY2hlY2tl
ZEFwcGVuZChXR1BVQmluZEdyb3VwTGF5b3V0RW50cnkgeworICAgICAgICAgICAgbnVsbHB0ciwK
KyAgICAgICAgICAgIGVudHJ5LmJpbmRpbmcsCisgICAgICAgICAgICBjb252ZXJ0U2hhZGVyU3Rh
Z2VGbGFnc1RvQmFja2luZyhlbnRyeS52aXNpYmlsaXR5KSwgeworICAgICAgICAgICAgICAgIG51
bGxwdHIsCisgICAgICAgICAgICAgICAgZW50cnkuYnVmZmVyID8gY29udmVydFRvQmFja2luZyhl
bnRyeS5idWZmZXItPnR5cGUpIDogV0dQVUJ1ZmZlckJpbmRpbmdUeXBlX1VuZGVmaW5lZCwKKyAg
ICAgICAgICAgICAgICBlbnRyeS5idWZmZXIgPyBlbnRyeS5idWZmZXItPmhhc0R5bmFtaWNPZmZz
ZXQgOiBmYWxzZSwKKyAgICAgICAgICAgICAgICBlbnRyeS5idWZmZXIgPyBlbnRyeS5idWZmZXIt
Pm1pbkJpbmRpbmdTaXplIDogMCwKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICBu
dWxscHRyLAorICAgICAgICAgICAgICAgIGVudHJ5LnNhbXBsZXIgPyBjb252ZXJ0VG9CYWNraW5n
KGVudHJ5LnNhbXBsZXItPnR5cGUpIDogV0dQVVNhbXBsZXJCaW5kaW5nVHlwZV9VbmRlZmluZWQs
CisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAg
ICAgICBlbnRyeS50ZXh0dXJlID8gY29udmVydFRvQmFja2luZyhlbnRyeS50ZXh0dXJlLT5zYW1w
bGVUeXBlKSA6IFdHUFVUZXh0dXJlU2FtcGxlVHlwZV9VbmRlZmluZWQsCisgICAgICAgICAgICAg
ICAgZW50cnkudGV4dHVyZSA/IGNvbnZlcnRUb0JhY2tpbmcoZW50cnkudGV4dHVyZS0+dmlld0Rp
bWVuc2lvbikgOiBXR1BVVGV4dHVyZVZpZXdEaW1lbnNpb25fVW5kZWZpbmVkLAorICAgICAgICAg
ICAgICAgIGVudHJ5LnRleHR1cmUgPyBlbnRyeS50ZXh0dXJlLT5tdWx0aXNhbXBsZWQgOiBmYWxz
ZSwKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICBudWxscHRyLAorICAgICAgICAg
ICAgICAgIGVudHJ5LnN0b3JhZ2VUZXh0dXJlID8gY29udmVydFRvQmFja2luZyhlbnRyeS5zdG9y
YWdlVGV4dHVyZS0+YWNjZXNzKSA6IFdHUFVTdG9yYWdlVGV4dHVyZUFjY2Vzc19VbmRlZmluZWQs
CisgICAgICAgICAgICAgICAgZW50cnkuc3RvcmFnZVRleHR1cmUgPyBjb252ZXJ0VG9CYWNraW5n
KGVudHJ5LnN0b3JhZ2VUZXh0dXJlLT5mb3JtYXQpIDogV0dQVVRleHR1cmVGb3JtYXRfVW5kZWZp
bmVkLAorICAgICAgICAgICAgICAgIGVudHJ5LnN0b3JhZ2VUZXh0dXJlID8gY29udmVydFRvQmFj
a2luZyhlbnRyeS5zdG9yYWdlVGV4dHVyZS0+dmlld0RpbWVuc2lvbikgOiBXR1BVVGV4dHVyZVZp
ZXdEaW1lbnNpb25fVW5kZWZpbmVkLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSk7CisgICAg
fQorCisgICAgV0dQVUJpbmRHcm91cExheW91dERlc2NyaXB0b3IgYmFja2luZ0Rlc2NyaXB0b3Ig
eworICAgICAgICBudWxscHRyLAorICAgICAgICBsYWJlbC5kYXRhKCksCisgICAgICAgIHN0YXRp
Y19jYXN0PHVpbnQzMl90PihiYWNraW5nRW50cmllcy5zaXplKCkpLAorICAgICAgICBiYWNraW5n
RW50cmllcy5kYXRhKCksCisgICAgfTsKKworICAgIHJldHVybiBCaW5kR3JvdXBMYXlvdXRJbXBs
OjpjcmVhdGUod2dwdURldmljZUNyZWF0ZUJpbmRHcm91cExheW91dChtX2JhY2tpbmcsICZiYWNr
aW5nRGVzY3JpcHRvcikpOworfQorCitSZWY8UGlwZWxpbmVMYXlvdXQ+IERldmljZUltcGw6OmNy
ZWF0ZVBpcGVsaW5lTGF5b3V0KGNvbnN0IFBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciYgZGVzY3Jp
cHRvcikKK3sKKyAgICBhdXRvIGxhYmVsID0gZGVzY3JpcHRvci5sYWJlbC51dGY4KCk7CisKKyAg
ICBWZWN0b3I8V0dQVUJpbmRHcm91cExheW91dD4gYmFja2luZ0JpbmRHcm91cExheW91dHM7Cisg
ICAgYmFja2luZ0JpbmRHcm91cExheW91dHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShkZXNjcmlw
dG9yLmJpbmRHcm91cExheW91dHMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8gYmluZEdyb3VwTGF5
b3V0IDogZGVzY3JpcHRvci5iaW5kR3JvdXBMYXlvdXRzKQorICAgICAgICBiYWNraW5nQmluZEdy
b3VwTGF5b3V0cy51bmNoZWNrZWRBcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgQmluZEdyb3VwTGF5
b3V0SW1wbCY+KGJpbmRHcm91cExheW91dC5nZXQoKSkuYmFja2luZygpKTsKKworICAgIFdHUFVQ
aXBlbGluZUxheW91dERlc2NyaXB0b3IgYmFja2luZ0Rlc2NyaXB0b3IgeworICAgICAgICBudWxs
cHRyLAorICAgICAgICBsYWJlbC5kYXRhKCksCisgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90
PihiYWNraW5nQmluZEdyb3VwTGF5b3V0cy5zaXplKCkpLAorICAgICAgICBiYWNraW5nQmluZEdy
b3VwTGF5b3V0cy5kYXRhKCksCisgICAgfTsKKworICAgIHJldHVybiBQaXBlbGluZUxheW91dElt
cGw6OmNyZWF0ZSh3Z3B1RGV2aWNlQ3JlYXRlUGlwZWxpbmVMYXlvdXQobV9iYWNraW5nLCAmYmFj
a2luZ0Rlc2NyaXB0b3IpKTsKK30KKworUmVmPEJpbmRHcm91cD4gRGV2aWNlSW1wbDo6Y3JlYXRl
QmluZEdyb3VwKGNvbnN0IEJpbmRHcm91cERlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAg
YXV0byBsYWJlbCA9IGRlc2NyaXB0b3IubGFiZWwudXRmOCgpOworCisgICAgVmVjdG9yPFdHUFVC
aW5kR3JvdXBFbnRyeT4gYmFja2luZ0VudHJpZXM7CisgICAgYmFja2luZ0VudHJpZXMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShkZXNjcmlwdG9yLmVudHJpZXMuc2l6ZSgpKTsKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIGJpbmRHcm91cEVudHJ5IDogZGVzY3JpcHRvci5lbnRyaWVzKSB7CisgICAgICAg
IGJhY2tpbmdFbnRyaWVzLnVuY2hlY2tlZEFwcGVuZChXR1BVQmluZEdyb3VwRW50cnkgeworICAg
ICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgIGJpbmRHcm91cEVudHJ5LmJpbmRpbmcsCisg
ICAgICAgICAgICBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPEJ1ZmZlckJpbmRpbmc+KGJpbmRHcm91
cEVudHJ5LnJlc291cmNlKSA/IHN0YXRpY19jYXN0PGNvbnN0IEJ1ZmZlckltcGwmPihzdGQ6Omdl
dDxCdWZmZXJCaW5kaW5nPihiaW5kR3JvdXBFbnRyeS5yZXNvdXJjZSkuYnVmZmVyKS5iYWNraW5n
KCkgOiBudWxscHRyLAorICAgICAgICAgICAgc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxCdWZmZXJC
aW5kaW5nPihiaW5kR3JvdXBFbnRyeS5yZXNvdXJjZSkgPyBzdGQ6OmdldDxCdWZmZXJCaW5kaW5n
PihiaW5kR3JvdXBFbnRyeS5yZXNvdXJjZSkub2Zmc2V0IDogMCwKKyAgICAgICAgICAgIHN0ZDo6
aG9sZHNfYWx0ZXJuYXRpdmU8QnVmZmVyQmluZGluZz4oYmluZEdyb3VwRW50cnkucmVzb3VyY2Up
ID8gc3RkOjpnZXQ8QnVmZmVyQmluZGluZz4oYmluZEdyb3VwRW50cnkucmVzb3VyY2UpLnNpemUu
dmFsdWVfb3IoV0dQVV9XSE9MRV9TSVpFKSA6IDAsCisgICAgICAgICAgICBzdGQ6OmhvbGRzX2Fs
dGVybmF0aXZlPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8U2FtcGxlcj4+KGJpbmRHcm91cEVudHJ5
LnJlc291cmNlKSA/IHN0YXRpY19jYXN0PGNvbnN0IFNhbXBsZXJJbXBsJj4oc3RkOjpnZXQ8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxTYW1wbGVyPj4oYmluZEdyb3VwRW50cnkucmVzb3VyY2UpLmdl
dCgpKS5iYWNraW5nKCkgOiBudWxscHRyLAorICAgICAgICAgICAgc3RkOjpob2xkc19hbHRlcm5h
dGl2ZTxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFRleHR1cmVWaWV3Pj4oYmluZEdyb3VwRW50cnku
cmVzb3VyY2UpID8gc3RhdGljX2Nhc3Q8Y29uc3QgVGV4dHVyZVZpZXdJbXBsJj4oc3RkOjpnZXQ8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxUZXh0dXJlVmlldz4+KGJpbmRHcm91cEVudHJ5LnJlc291
cmNlKS5nZXQoKSkuYmFja2luZygpIDogbnVsbHB0ciwKKyAgICAgICAgfSk7CisgICAgfQorCisg
ICAgV0dQVUJpbmRHcm91cERlc2NyaXB0b3IgYmFja2luZ0Rlc2NyaXB0b3IgeworICAgICAgICBu
dWxscHRyLAorICAgICAgICBsYWJlbC5kYXRhKCksCisgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0
IEJpbmRHcm91cExheW91dEltcGwmPihkZXNjcmlwdG9yLmxheW91dCkuYmFja2luZygpLAorICAg
ICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYmFja2luZ0VudHJpZXMuc2l6ZSgpKSwKKyAgICAg
ICAgYmFja2luZ0VudHJpZXMuZGF0YSgpLAorICAgIH07CisKKyAgICByZXR1cm4gQmluZEdyb3Vw
SW1wbDo6Y3JlYXRlKHdncHVEZXZpY2VDcmVhdGVCaW5kR3JvdXAobV9iYWNraW5nLCAmYmFja2lu
Z0Rlc2NyaXB0b3IpKTsKK30KKworUmVmPFNoYWRlck1vZHVsZT4gRGV2aWNlSW1wbDo6Y3JlYXRl
U2hhZGVyTW9kdWxlKGNvbnN0IFNoYWRlck1vZHVsZURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7
CisgICAgYXV0byBsYWJlbCA9IGRlc2NyaXB0b3IubGFiZWwudXRmOCgpOworCisgICAgV0dQVVNo
YWRlck1vZHVsZURlc2NyaXB0b3IgYmFja2luZ0Rlc2NyaXB0b3IgeworICAgICAgICBudWxscHRy
LAorICAgICAgICBsYWJlbC5kYXRhKCksCisgICAgfTsKKworICAgIHJldHVybiBTaGFkZXJNb2R1
bGVJbXBsOjpjcmVhdGUod2dwdURldmljZUNyZWF0ZVNoYWRlck1vZHVsZShtX2JhY2tpbmcsICZi
YWNraW5nRGVzY3JpcHRvcikpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2F1dG8gY29u
dmVydFRvQmFja2luZyhjb25zdCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
LCBUJiYgY2FsbGJhY2spCit7CisgICAgYXV0byBsYWJlbCA9IGRlc2NyaXB0b3IubGFiZWwudXRm
OCgpOworCisgICAgYXV0byBlbnRyeVBvaW50ID0gZGVzY3JpcHRvci5jb21wdXRlLmVudHJ5UG9p
bnQudXRmOCgpOworCisgICAgVmVjdG9yPENTdHJpbmc+IGtleXM7CisgICAga2V5cy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KGRlc2NyaXB0b3IuY29tcHV0ZS5jb25zdGFudHMuc2l6ZSgpKTsKKyAg
ICBmb3IgKGNvbnN0IGF1dG8mIGNvbnN0YW50IDogZGVzY3JpcHRvci5jb21wdXRlLmNvbnN0YW50
cykKKyAgICAgICAga2V5cy51bmNoZWNrZWRBcHBlbmQoY29uc3RhbnQua2V5LnV0ZjgoKSk7CisK
KyAgICBWZWN0b3I8V0dQVUNvbnN0YW50RW50cnk+IGJhY2tpbmdDb25zdGFudEVudHJpZXM7Cisg
ICAgYmFja2luZ0NvbnN0YW50RW50cmllcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGRlc2NyaXB0
b3IuY29tcHV0ZS5jb25zdGFudHMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGRlc2NyaXB0b3IuY29tcHV0ZS5jb25zdGFudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29u
c3QgYXV0byYgY29uc3RhbnQgPSBkZXNjcmlwdG9yLmNvbXB1dGUuY29uc3RhbnRzW2ldOworICAg
ICAgICBiYWNraW5nQ29uc3RhbnRFbnRyaWVzLnVuY2hlY2tlZEFwcGVuZChXR1BVQ29uc3RhbnRF
bnRyeSB7CisgICAgICAgICAgICBudWxscHRyLAorICAgICAgICAgICAga2V5c1tpXS5kYXRhKCks
CisgICAgICAgICAgICBjb25zdGFudC52YWx1ZQorICAgICAgICB9KTsKKyAgICB9CisKKyAgICBX
R1BVQ29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciBiYWNraW5nRGVzY3JpcHRvciB7CisgICAgICAg
IG51bGxwdHIsCisgICAgICAgIGxhYmVsLmRhdGEoKSwKKyAgICAgICAgZGVzY3JpcHRvci5sYXlv
dXQgPyBzdGF0aWNfY2FzdDxjb25zdCBQaXBlbGluZUxheW91dEltcGwmPigqZGVzY3JpcHRvci5s
YXlvdXQpLmJhY2tpbmcoKSA6IG51bGxwdHIsIHsKKyAgICAgICAgICAgIG51bGxwdHIsCisgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBTaGFkZXJNb2R1bGVJbXBsJj4oZGVzY3JpcHRvci5j
b21wdXRlLm1vZHVsZSkuYmFja2luZygpLAorICAgICAgICAgICAgZW50cnlQb2ludC5kYXRhKCks
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYmFja2luZ0NvbnN0YW50RW50cmll
cy5zaXplKCkpLAorICAgICAgICAgICAgYmFja2luZ0NvbnN0YW50RW50cmllcy5kYXRhKCksCisg
ICAgICAgIH0KKyAgICB9OworCisgICAgcmV0dXJuIGNhbGxiYWNrKGJhY2tpbmdEZXNjcmlwdG9y
KTsKK30KKworUmVmPENvbXB1dGVQaXBlbGluZT4gRGV2aWNlSW1wbDo6Y3JlYXRlQ29tcHV0ZVBp
cGVsaW5lKGNvbnN0IENvbXB1dGVQaXBlbGluZURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7Cisg
ICAgcmV0dXJuIGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvciwgW3RoaXNdIChjb25zdCBXR1BV
Q29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciYgYmFja2luZ0Rlc2NyaXB0b3IpIHsKKyAgICAgICAg
cmV0dXJuIENvbXB1dGVQaXBlbGluZUltcGw6OmNyZWF0ZSh3Z3B1RGV2aWNlQ3JlYXRlQ29tcHV0
ZVBpcGVsaW5lKG1fYmFja2luZywgJmJhY2tpbmdEZXNjcmlwdG9yKSk7CisgICAgfSk7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorYXV0byBjb252ZXJ0VG9CYWNraW5nKGNvbnN0IFJlbmRl
clBpcGVsaW5lRGVzY3JpcHRvciYgZGVzY3JpcHRvciwgVCYmIGNhbGxiYWNrKQoreworICAgIGF1
dG8gbGFiZWwgPSBkZXNjcmlwdG9yLmxhYmVsLnV0ZjgoKTsKKworICAgIFZlY3RvcjxWZWN0b3I8
V0dQVVZlcnRleEF0dHJpYnV0ZT4+IGJhY2tpbmdBdHRyaWJ1dGVzOworICAgIGJhY2tpbmdBdHRy
aWJ1dGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGVzY3JpcHRvci52ZXJ0ZXguYnVmZmVycy5z
aXplKCkpOworICAgIGZvciAoY29uc3QgYXV0byYgYnVmZmVyIDogZGVzY3JpcHRvci52ZXJ0ZXgu
YnVmZmVycykgeworICAgICAgICBpZiAoYnVmZmVyKSB7CisgICAgICAgICAgICBWZWN0b3I8V0dQ
VVZlcnRleEF0dHJpYnV0ZT4gYXR0cmlidXRlczsKKyAgICAgICAgICAgIGF0dHJpYnV0ZXMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShidWZmZXItPmF0dHJpYnV0ZXMuc2l6ZSgpKTsKKyAgICAgICAg
ICAgIGZvciAoY29uc3QgYXV0byYgYXR0cmlidXRlIDogYnVmZmVyLT5hdHRyaWJ1dGVzKSB7Cisg
ICAgICAgICAgICAgICAgYXR0cmlidXRlcy51bmNoZWNrZWRBcHBlbmQoV0dQVVZlcnRleEF0dHJp
YnV0ZSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb0JhY2tpbmcoYXR0cmlidXRlLmZv
cm1hdCksCisgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZS5vZmZzZXQsCisgICAgICAgICAg
ICAgICAgICAgIGF0dHJpYnV0ZS5zaGFkZXJMb2NhdGlvbiwKKyAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJhY2tpbmdBdHRyaWJ1dGVzLnVuY2hlY2tlZEFw
cGVuZChXVEZNb3ZlKGF0dHJpYnV0ZXMpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBi
YWNraW5nQXR0cmlidXRlcy51bmNoZWNrZWRBcHBlbmQoeyB9KTsKKyAgICB9CisKKyAgICBWZWN0
b3I8V0dQVVZlcnRleEJ1ZmZlckxheW91dD4gYmFja2luZ0J1ZmZlcnM7CisgICAgYmFja2luZ0J1
ZmZlcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShkZXNjcmlwdG9yLnZlcnRleC5idWZmZXJzLnNp
emUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkZXNjcmlwdG9yLnZlcnRleC5idWZm
ZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIGJ1ZmZlciA9IGRlc2NyaXB0
b3IudmVydGV4LmJ1ZmZlcnNbaV07CisgICAgICAgIGJhY2tpbmdCdWZmZXJzLnVuY2hlY2tlZEFw
cGVuZChXR1BVVmVydGV4QnVmZmVyTGF5b3V0IHsKKyAgICAgICAgICAgIGJ1ZmZlciA/IGJ1ZmZl
ci0+YXJyYXlTdHJpZGUgOiBXR1BVX0NPUFlfU1RSSURFX1VOREVGSU5FRCwKKyAgICAgICAgICAg
IGJ1ZmZlciA/IGNvbnZlcnRUb0JhY2tpbmcoYnVmZmVyLT5zdGVwTW9kZSkgOiBXR1BVVmVydGV4
U3RlcE1vZGVfVmVydGV4LAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGJhY2tp
bmdBdHRyaWJ1dGVzW2ldLnNpemUoKSksCisgICAgICAgICAgICBiYWNraW5nQXR0cmlidXRlc1tp
XS5kYXRhKCksCisgICAgICAgIH0pOworICAgIH0KKworICAgIFdHUFVEZXB0aFN0ZW5jaWxTdGF0
ZSBkZXB0aFN0ZW5jaWxTdGF0ZSB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIGRlc2NyaXB0
b3IuZGVwdGhTdGVuY2lsID8gY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLmRlcHRoU3RlbmNp
bC0+Zm9ybWF0KSA6IFdHUFVUZXh0dXJlRm9ybWF0X1VuZGVmaW5lZCwKKyAgICAgICAgZGVzY3Jp
cHRvci5kZXB0aFN0ZW5jaWwgPyBkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbC0+ZGVwdGhXcml0ZUVu
YWJsZWQgOiBmYWxzZSwKKyAgICAgICAgZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwgPyBjb252ZXJ0
VG9CYWNraW5nKGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsLT5kZXB0aENvbXBhcmUpIDogV0dQVUNv
bXBhcmVGdW5jdGlvbl9VbmRlZmluZWQsIHsKKyAgICAgICAgICAgIGRlc2NyaXB0b3IuZGVwdGhT
dGVuY2lsID8gY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbC0+c3RlbmNp
bEZyb250LmNvbXBhcmUpIDogV0dQVUNvbXBhcmVGdW5jdGlvbl9VbmRlZmluZWQsCisgICAgICAg
ICAgICBkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbCA/IGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRv
ci5kZXB0aFN0ZW5jaWwtPnN0ZW5jaWxGcm9udC5mYWlsT3ApIDogV0dQVVN0ZW5jaWxPcGVyYXRp
b25fS2VlcCwKKyAgICAgICAgICAgIGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsID8gY29udmVydFRv
QmFja2luZyhkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbC0+c3RlbmNpbEZyb250LmRlcHRoRmFpbE9w
KSA6IFdHUFVTdGVuY2lsT3BlcmF0aW9uX0tlZXAsCisgICAgICAgICAgICBkZXNjcmlwdG9yLmRl
cHRoU3RlbmNpbCA/IGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwtPnN0
ZW5jaWxGcm9udC5wYXNzT3ApIDogV0dQVVN0ZW5jaWxPcGVyYXRpb25fS2VlcCwKKyAgICAgICAg
fSwgeworICAgICAgICAgICAgZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwgPyBjb252ZXJ0VG9CYWNr
aW5nKGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsLT5zdGVuY2lsQmFjay5jb21wYXJlKSA6IFdHUFVD
b21wYXJlRnVuY3Rpb25fVW5kZWZpbmVkLAorICAgICAgICAgICAgZGVzY3JpcHRvci5kZXB0aFN0
ZW5jaWwgPyBjb252ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsLT5zdGVuY2ls
QmFjay5mYWlsT3ApIDogV0dQVVN0ZW5jaWxPcGVyYXRpb25fS2VlcCwKKyAgICAgICAgICAgIGRl
c2NyaXB0b3IuZGVwdGhTdGVuY2lsID8gY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLmRlcHRo
U3RlbmNpbC0+c3RlbmNpbEJhY2suZGVwdGhGYWlsT3ApIDogV0dQVVN0ZW5jaWxPcGVyYXRpb25f
S2VlcCwKKyAgICAgICAgICAgIGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsID8gY29udmVydFRvQmFj
a2luZyhkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbC0+c3RlbmNpbEJhY2sucGFzc09wKSA6IFdHUFVT
dGVuY2lsT3BlcmF0aW9uX0tlZXAsCisgICAgICAgIH0sCisgICAgICAgIGRlc2NyaXB0b3IuZGVw
dGhTdGVuY2lsICYmIGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsLT5zdGVuY2lsUmVhZE1hc2sgPyAq
ZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwtPnN0ZW5jaWxSZWFkTWFzayA6IDAsCisgICAgICAgIGRl
c2NyaXB0b3IuZGVwdGhTdGVuY2lsICYmIGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsLT5zdGVuY2ls
V3JpdGVNYXNrID8gKmRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsLT5zdGVuY2lsV3JpdGVNYXNrIDog
MCwKKyAgICAgICAgZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwgPyBkZXNjcmlwdG9yLmRlcHRoU3Rl
bmNpbC0+ZGVwdGhCaWFzIDogMCwKKyAgICAgICAgZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwgPyBk
ZXNjcmlwdG9yLmRlcHRoU3RlbmNpbC0+ZGVwdGhCaWFzU2xvcGVTY2FsZSA6IDAsCisgICAgICAg
IGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsID8gZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwtPmRlcHRo
Qmlhc0NsYW1wIDogMCwKKyAgICB9OworCisgICAgVmVjdG9yPHN0ZDo6b3B0aW9uYWw8V0dQVUJs
ZW5kU3RhdGU+PiBibGVuZFN0YXRlczsKKyAgICBpZiAoZGVzY3JpcHRvci5mcmFnbWVudCkgewor
ICAgICAgICBibGVuZFN0YXRlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGRlc2NyaXB0b3IuZnJh
Z21lbnQtPnRhcmdldHMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiB0YXJnZXQg
OiBkZXNjcmlwdG9yLmZyYWdtZW50LT50YXJnZXRzKSB7CisgICAgICAgICAgICBpZiAodGFyZ2V0
LmJsZW5kKSB7CisgICAgICAgICAgICAgICAgYmxlbmRTdGF0ZXMudW5jaGVja2VkQXBwZW5kKFdH
UFVCbGVuZFN0YXRlIHsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY29udmVydFRvQmFja2luZyh0YXJnZXQuYmxlbmQtPmNvbG9yLm9wZXJhdGlvbiksCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9CYWNraW5nKHRhcmdldC5ibGVuZC0+Y29s
b3Iuc3JjRmFjdG9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb0JhY2tpbmco
dGFyZ2V0LmJsZW5kLT5jb2xvci5kc3RGYWN0b3IpLAorICAgICAgICAgICAgICAgICAgICB9LCB7
CisgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9CYWNraW5nKHRhcmdldC5ibGVuZC0+
YWxwaGEub3BlcmF0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb0JhY2tp
bmcodGFyZ2V0LmJsZW5kLT5hbHBoYS5zcmNGYWN0b3IpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgY29udmVydFRvQmFja2luZyh0YXJnZXQuYmxlbmQtPmFscGhhLmRzdEZhY3RvciksCisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgIGJsZW5kU3RhdGVzLnVuY2hlY2tlZEFwcGVuZChzdGQ6Om51bGxv
cHQpOworICAgICAgICB9CisgICAgfQorCisgICAgVmVjdG9yPFdHUFVDb2xvclRhcmdldFN0YXRl
PiBjb2xvclRhcmdldHM7CisgICAgaWYgKGRlc2NyaXB0b3IuZnJhZ21lbnQpIHsKKyAgICAgICAg
Y29sb3JUYXJnZXRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGVzY3JpcHRvci5mcmFnbWVudC0+
dGFyZ2V0cy5zaXplKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRlc2NyaXB0
b3IuZnJhZ21lbnQtPnRhcmdldHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IGF1
dG8mIHRhcmdldCA9IGRlc2NyaXB0b3IuZnJhZ21lbnQtPnRhcmdldHNbaV07CisgICAgICAgICAg
ICBjb2xvclRhcmdldHMudW5jaGVja2VkQXBwZW5kKFdHUFVDb2xvclRhcmdldFN0YXRlIHsKKyAg
ICAgICAgICAgICAgICBudWxscHRyLAorICAgICAgICAgICAgICAgIGNvbnZlcnRUb0JhY2tpbmco
dGFyZ2V0LmZvcm1hdCksCisgICAgICAgICAgICAgICAgYmxlbmRTdGF0ZXNbaV0gPyAmKmJsZW5k
U3RhdGVzW2ldIDogbnVsbHB0ciwKKyAgICAgICAgICAgICAgICBjb252ZXJ0Q29sb3JXcml0ZUZs
YWdzVG9CYWNraW5nKHRhcmdldC53cml0ZU1hc2spLAorICAgICAgICAgICAgfSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBXR1BVRnJhZ21lbnRTdGF0ZSBmcmFnbWVudFN0YXRlIHsKKyAgICAg
ICAgbnVsbHB0ciwKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAg
MCwKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNvbG9y
VGFyZ2V0cy5zaXplKCkpLAorICAgICAgICBjb2xvclRhcmdldHMuZGF0YSgpLAorICAgIH07CisK
KyAgICBXR1BVUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yIGJhY2tpbmdEZXNjcmlwdG9yIHsKKyAg
ICAgICAgbnVsbHB0ciwKKyAgICAgICAgbGFiZWwuZGF0YSgpLAorICAgICAgICBkZXNjcmlwdG9y
LmxheW91dCA/IHN0YXRpY19jYXN0PGNvbnN0IFBpcGVsaW5lTGF5b3V0SW1wbCY+KCpkZXNjcmlw
dG9yLmxheW91dCkuYmFja2luZygpIDogbnVsbHB0ciwgeworICAgICAgICAgICAgbnVsbHB0ciwK
KyAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICBudWxscHRyLAorICAgICAgICAgICAg
MCwKKyAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJf
dD4oYmFja2luZ0J1ZmZlcnMuc2l6ZSgpKSwKKyAgICAgICAgICAgIGJhY2tpbmdCdWZmZXJzLmRh
dGEoKSwKKyAgICAgICAgfSwgeworICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgIGRl
c2NyaXB0b3IucHJpbWl0aXZlID8gY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLnByaW1pdGl2
ZS0+dG9wb2xvZ3kpIDogV0dQVVByaW1pdGl2ZVRvcG9sb2d5X1BvaW50TGlzdCwKKyAgICAgICAg
ICAgIGRlc2NyaXB0b3IucHJpbWl0aXZlICYmIGRlc2NyaXB0b3IucHJpbWl0aXZlLT5zdHJpcElu
ZGV4Rm9ybWF0ID8gY29udmVydFRvQmFja2luZygqZGVzY3JpcHRvci5wcmltaXRpdmUtPnN0cmlw
SW5kZXhGb3JtYXQpIDogV0dQVUluZGV4Rm9ybWF0X1VuZGVmaW5lZCwKKyAgICAgICAgICAgIGRl
c2NyaXB0b3IucHJpbWl0aXZlID8gY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLnByaW1pdGl2
ZS0+ZnJvbnRGYWNlKSA6IFdHUFVGcm9udEZhY2VfQ0NXLAorICAgICAgICAgICAgZGVzY3JpcHRv
ci5wcmltaXRpdmUgPyBjb252ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3IucHJpbWl0aXZlLT5jdWxs
TW9kZSkgOiBXR1BVQ3VsbE1vZGVfTm9uZSwKKyAgICAgICAgICAgIAorICAgICAgICB9LAorICAg
ICAgICBkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbCA/ICZkZXB0aFN0ZW5jaWxTdGF0ZSA6IG51bGxw
dHIsIHsKKyAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICBkZXNjcmlwdG9yLm11bHRp
c2FtcGxlID8gZGVzY3JpcHRvci5tdWx0aXNhbXBsZS0+Y291bnQgOiAwLAorICAgICAgICAgICAg
ZGVzY3JpcHRvci5tdWx0aXNhbXBsZSA/IGRlc2NyaXB0b3IubXVsdGlzYW1wbGUtPm1hc2sgOiAw
LAorICAgICAgICAgICAgZGVzY3JpcHRvci5tdWx0aXNhbXBsZSA/IGRlc2NyaXB0b3IubXVsdGlz
YW1wbGUtPmFscGhhVG9Db3ZlcmFnZUVuYWJsZWQgOiBmYWxzZSwKKyAgICAgICAgfSwKKyAgICAg
ICAgZGVzY3JpcHRvci5mcmFnbWVudCA/ICZmcmFnbWVudFN0YXRlIDogbnVsbHB0ciwKKyAgICB9
OworCisgICAgcmV0dXJuIGNhbGxiYWNrKGJhY2tpbmdEZXNjcmlwdG9yKTsKK30KKworUmVmPFJl
bmRlclBpcGVsaW5lPiBEZXZpY2VJbXBsOjpjcmVhdGVSZW5kZXJQaXBlbGluZShjb25zdCBSZW5k
ZXJQaXBlbGluZURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgcmV0dXJuIGNvbnZlcnRU
b0JhY2tpbmcoZGVzY3JpcHRvciwgW3RoaXNdIChjb25zdCBXR1BVUmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yJiBiYWNraW5nRGVzY3JpcHRvcikgeworICAgICAgICByZXR1cm4gUmVuZGVyUGlwZWxp
bmVJbXBsOjpjcmVhdGUod2dwdURldmljZUNyZWF0ZVJlbmRlclBpcGVsaW5lKG1fYmFja2luZywg
JmJhY2tpbmdEZXNjcmlwdG9yKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgY3JlYXRlQ29tcHV0ZVBp
cGVsaW5lQXN5bmNDYWxsYmFjayhXR1BVQ3JlYXRlUGlwZWxpbmVBc3luY1N0YXR1cyBzdGF0dXMs
IFdHUFVDb21wdXRlUGlwZWxpbmUgcGlwZWxpbmUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIHZvaWQq
IHVzZXJkYXRhKQoreworICAgIGF1dG8gZGV2aWNlID0gYWRvcHRSZWYoKnN0YXRpY19jYXN0PERl
dmljZUltcGwqPih1c2VyZGF0YSkpOyAvLyBhZG9wdFJlZiBpcyBiYWxhbmNlZCBieSBsZWFrUmVm
IGluIGNyZWF0ZUNvbXB1dGVQaXBlbGluZUFzeW5jKCkgYmVsb3cuIFdlIGhhdmUgdG8gZG8gdGhp
cyBiZWNhdXNlIHdlJ3JlIHVzaW5nIGEgQyBBUEkgd2l0aCBubyBjb25jZXB0IG9mIHJlZmVyZW5j
ZSBjb3VudGluZyBvciBibG9ja3MuCisgICAgZGV2aWNlLT5jcmVhdGVDb21wdXRlUGlwZWxpbmVB
c3luY0NhbGxiYWNrKHN0YXR1cywgcGlwZWxpbmUsIG1lc3NhZ2UpOworfQorCit2b2lkIERldmlj
ZUltcGw6OmNyZWF0ZUNvbXB1dGVQaXBlbGluZUFzeW5jKGNvbnN0IENvbXB1dGVQaXBlbGluZURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IsIHN0ZDo6ZnVuY3Rpb248dm9pZChSZWY8Q29tcHV0ZVBpcGVs
aW5lPiYmKT4mJiBjYWxsYmFjaykKK3sKKyAgICBSZWYgcHJvdGVjdGVkVGhpcygqdGhpcyk7CisK
KyAgICBtX2NyZWF0ZUNvbXB1dGVQaXBlbGluZUFzeW5jQ2FsbGJhY2tzLmFwcGVuZChXVEZNb3Zl
KGNhbGxiYWNrKSk7CisKKyAgICBjb252ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3IsIFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKGNvbnN0IFdHUFVDb21wdXRl
UGlwZWxpbmVEZXNjcmlwdG9yJiBiYWNraW5nRGVzY3JpcHRvcikgbXV0YWJsZSB7CisgICAgICAg
IHdncHVEZXZpY2VDcmVhdGVDb21wdXRlUGlwZWxpbmVBc3luYyhtX2JhY2tpbmcsICZiYWNraW5n
RGVzY3JpcHRvciwgJldlYkdQVTo6Y3JlYXRlQ29tcHV0ZVBpcGVsaW5lQXN5bmNDYWxsYmFjaywg
JnByb3RlY3RlZFRoaXMubGVha1JlZigpKTsgLy8gbGVha1JlZiBpcyBiYWxhbmNlZCBieSBhZG9w
dFJlZiBpbiByZXF1ZXN0RGV2aWNlQ2FsbGJhY2soKSBhYm92ZS4gV2UgaGF2ZSB0byBkbyB0aGlz
IGJlY2F1c2Ugd2UncmUgdXNpbmcgYSBDIEFQSSB3aXRoIG5vIGNvbmNlcHQgb2YgcmVmZXJlbmNl
IGNvdW50aW5nIG9yIGJsb2Nrcy4KKyAgICB9KTsKK30KKwordm9pZCBEZXZpY2VJbXBsOjpjcmVh
dGVDb21wdXRlUGlwZWxpbmVBc3luY0NhbGxiYWNrKFdHUFVDcmVhdGVQaXBlbGluZUFzeW5jU3Rh
dHVzLCBXR1BVQ29tcHV0ZVBpcGVsaW5lIHBpcGVsaW5lLCBjb25zdCBjaGFyKiBtZXNzYWdlKQor
eworICAgIFVOVVNFRF9QQVJBTShtZXNzYWdlKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gbV9jcmVh
dGVDb21wdXRlUGlwZWxpbmVBc3luY0NhbGxiYWNrcy50YWtlRmlyc3QoKTsKKyAgICBjYWxsYmFj
ayhDb21wdXRlUGlwZWxpbmVJbXBsOjpjcmVhdGUocGlwZWxpbmUpKTsKK30KKwordm9pZCBjcmVh
dGVSZW5kZXJQaXBlbGluZUFzeW5jQ2FsbGJhY2soV0dQVUNyZWF0ZVBpcGVsaW5lQXN5bmNTdGF0
dXMgc3RhdHVzLCBXR1BVUmVuZGVyUGlwZWxpbmUgcGlwZWxpbmUsIGNvbnN0IGNoYXIqIG1lc3Nh
Z2UsIHZvaWQqIHVzZXJkYXRhKQoreworICAgIGF1dG8gZGV2aWNlID0gYWRvcHRSZWYoKnN0YXRp
Y19jYXN0PERldmljZUltcGwqPih1c2VyZGF0YSkpOyAvLyBhZG9wdFJlZiBpcyBiYWxhbmNlZCBi
eSBsZWFrUmVmIGluIGNyZWF0ZVJlbmRlclBpcGVsaW5lQXN5bmMoKSBiZWxvdy4gV2UgaGF2ZSB0
byBkbyB0aGlzIGJlY2F1c2Ugd2UncmUgdXNpbmcgYSBDIEFQSSB3aXRoIG5vIGNvbmNlcHQgb2Yg
cmVmZXJlbmNlIGNvdW50aW5nIG9yIGJsb2Nrcy4KKyAgICBkZXZpY2UtPmNyZWF0ZVJlbmRlclBp
cGVsaW5lQXN5bmNDYWxsYmFjayhzdGF0dXMsIHBpcGVsaW5lLCBtZXNzYWdlKTsKK30KKwordm9p
ZCBEZXZpY2VJbXBsOjpjcmVhdGVSZW5kZXJQaXBlbGluZUFzeW5jKGNvbnN0IFJlbmRlclBpcGVs
aW5lRGVzY3JpcHRvciYgZGVzY3JpcHRvciwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlZjxSZW5kZXJQ
aXBlbGluZT4mJik+JiYgY2FsbGJhY2spCit7CisgICAgUmVmIHByb3RlY3RlZFRoaXMoKnRoaXMp
OworCisgICAgbV9jcmVhdGVSZW5kZXJQaXBlbGluZUFzeW5jQ2FsbGJhY2tzLmFwcGVuZChXVEZN
b3ZlKGNhbGxiYWNrKSk7CisKKyAgICBjb252ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3IsIFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKGNvbnN0IFdHUFVSZW5k
ZXJQaXBlbGluZURlc2NyaXB0b3ImIGJhY2tpbmdEZXNjcmlwdG9yKSBtdXRhYmxlIHsKKyAgICB3
Z3B1RGV2aWNlQ3JlYXRlUmVuZGVyUGlwZWxpbmVBc3luYyhtX2JhY2tpbmcsICZiYWNraW5nRGVz
Y3JpcHRvciwgJldlYkdQVTo6Y3JlYXRlUmVuZGVyUGlwZWxpbmVBc3luY0NhbGxiYWNrLCAmcHJv
dGVjdGVkVGhpcy5sZWFrUmVmKCkpOyAvLyBsZWFrUmVmIGlzIGJhbGFuY2VkIGJ5IGFkb3B0UmVm
IGluIHJlcXVlc3REZXZpY2VDYWxsYmFjaygpIGFib3ZlLiBXZSBoYXZlIHRvIGRvIHRoaXMgYmVj
YXVzZSB3ZSdyZSB1c2luZyBhIEMgQVBJIHdpdGggbm8gY29uY2VwdCBvZiByZWZlcmVuY2UgY291
bnRpbmcgb3IgYmxvY2tzLgorICAgIH0pOworfQorCit2b2lkIERldmljZUltcGw6OmNyZWF0ZVJl
bmRlclBpcGVsaW5lQXN5bmNDYWxsYmFjayhXR1BVQ3JlYXRlUGlwZWxpbmVBc3luY1N0YXR1cywg
V0dQVVJlbmRlclBpcGVsaW5lIHBpcGVsaW5lLCBjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAg
IFVOVVNFRF9QQVJBTShtZXNzYWdlKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gbV9jcmVhdGVSZW5k
ZXJQaXBlbGluZUFzeW5jQ2FsbGJhY2tzLnRha2VGaXJzdCgpOworICAgIGNhbGxiYWNrKFJlbmRl
clBpcGVsaW5lSW1wbDo6Y3JlYXRlKHBpcGVsaW5lKSk7Cit9CisKK1JlZjxDb21tYW5kRW5jb2Rl
cj4gRGV2aWNlSW1wbDo6Y3JlYXRlQ29tbWFuZEVuY29kZXIoY29uc3Qgc3RkOjpvcHRpb25hbDxD
b21tYW5kRW5jb2RlckRlc2NyaXB0b3I+JiBkZXNjcmlwdG9yKQoreworICAgIENTdHJpbmcgbGFi
ZWwgPSBkZXNjcmlwdG9yID8gZGVzY3JpcHRvci0+bGFiZWwudXRmOCgpIDogQ1N0cmluZygiIik7
CisKKyAgICBXR1BVQ29tbWFuZEVuY29kZXJEZXNjcmlwdG9yIGJhY2tpbmdEZXNjcmlwdG9yIHsK
KyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgbGFiZWwuZGF0YSgpLAorICAgIH07CisKKyAgICBy
ZXR1cm4gQ29tbWFuZEVuY29kZXJJbXBsOjpjcmVhdGUod2dwdURldmljZUNyZWF0ZUNvbW1hbmRF
bmNvZGVyKG1fYmFja2luZywgJmJhY2tpbmdEZXNjcmlwdG9yKSk7Cit9CisKK1JlZjxSZW5kZXJC
dW5kbGVFbmNvZGVyPiBEZXZpY2VJbXBsOjpjcmVhdGVSZW5kZXJCdW5kbGVFbmNvZGVyKGNvbnN0
IFJlbmRlckJ1bmRsZUVuY29kZXJEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIGF1dG8g
bGFiZWwgPSBkZXNjcmlwdG9yLmxhYmVsLnV0ZjgoKTsKKworICAgIFZlY3RvcjxXR1BVVGV4dHVy
ZUZvcm1hdD4gYmFja2luZ0NvbG9yRm9ybWF0czsKKyAgICBiYWNraW5nQ29sb3JGb3JtYXRzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoZGVzY3JpcHRvci5jb2xvckZvcm1hdHMuc2l6ZSgpKTsKKyAg
ICBmb3IgKGF1dG8gY29sb3JGb3JtYXQgOiBkZXNjcmlwdG9yLmNvbG9yRm9ybWF0cykKKyAgICAg
ICAgYmFja2luZ0NvbG9yRm9ybWF0cy51bmNoZWNrZWRBcHBlbmQoY29udmVydFRvQmFja2luZyhj
b2xvckZvcm1hdCkpOworCisgICAgV0dQVVJlbmRlckJ1bmRsZUVuY29kZXJEZXNjcmlwdG9yIGJh
Y2tpbmdEZXNjcmlwdG9yIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgbGFiZWwuZGF0YSgp
LAorICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYmFja2luZ0NvbG9yRm9ybWF0cy5zaXpl
KCkpLAorICAgICAgICBiYWNraW5nQ29sb3JGb3JtYXRzLmRhdGEoKSwKKyAgICAgICAgZGVzY3Jp
cHRvci5kZXB0aFN0ZW5jaWxGb3JtYXQgPyBjb252ZXJ0VG9CYWNraW5nKCpkZXNjcmlwdG9yLmRl
cHRoU3RlbmNpbEZvcm1hdCkgOiBXR1BVVGV4dHVyZUZvcm1hdF9VbmRlZmluZWQsCisgICAgICAg
IGRlc2NyaXB0b3Iuc2FtcGxlQ291bnQsCisgICAgfTsKKworICAgIHJldHVybiBSZW5kZXJCdW5k
bGVFbmNvZGVySW1wbDo6Y3JlYXRlKHdncHVEZXZpY2VDcmVhdGVSZW5kZXJCdW5kbGVFbmNvZGVy
KG1fYmFja2luZywgJmJhY2tpbmdEZXNjcmlwdG9yKSk7Cit9CisKK1JlZjxRdWVyeVNldD4gRGV2
aWNlSW1wbDo6Y3JlYXRlUXVlcnlTZXQoY29uc3QgUXVlcnlTZXREZXNjcmlwdG9yJiBkZXNjcmlw
dG9yKQoreworICAgIGF1dG8gbGFiZWwgPSBkZXNjcmlwdG9yLmxhYmVsLnV0ZjgoKTsKKworICAg
IFZlY3RvcjxXR1BVUGlwZWxpbmVTdGF0aXN0aWNOYW1lPiBiYWNraW5nUGlwZWxpbmVTdGF0aXN0
aWNzOworICAgIGJhY2tpbmdQaXBlbGluZVN0YXRpc3RpY3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShkZXNjcmlwdG9yLnBpcGVsaW5lU3RhdGlzdGljcy5zaXplKCkpOworICAgIGZvciAoYXV0byBw
aXBlbGluZVN0YXRpc3RpYyA6IGRlc2NyaXB0b3IucGlwZWxpbmVTdGF0aXN0aWNzKQorICAgICAg
ICBiYWNraW5nUGlwZWxpbmVTdGF0aXN0aWNzLnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0VG9CYWNr
aW5nKHBpcGVsaW5lU3RhdGlzdGljKSk7CisKKyAgICBXR1BVUXVlcnlTZXREZXNjcmlwdG9yIGJh
Y2tpbmdEZXNjcmlwdG9yIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgbGFiZWwuZGF0YSgp
LAorICAgICAgICBjb252ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3IudHlwZSksCisgICAgICAgIGRl
c2NyaXB0b3IuY291bnQsCisgICAgICAgIGJhY2tpbmdQaXBlbGluZVN0YXRpc3RpY3MuZGF0YSgp
LAorICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYmFja2luZ1BpcGVsaW5lU3RhdGlzdGlj
cy5zaXplKCkpLAorICAgIH07CisKKyAgICByZXR1cm4gUXVlcnlTZXRJbXBsOjpjcmVhdGUod2dw
dURldmljZUNyZWF0ZVF1ZXJ5U2V0KG1fYmFja2luZywgJmJhY2tpbmdEZXNjcmlwdG9yKSk7Cit9
CisKK3ZvaWQgRGV2aWNlSW1wbDo6cHVzaEVycm9yU2NvcGUoRXJyb3JGaWx0ZXIgZXJyb3JGaWx0
ZXIpCit7CisgICAgd2dwdURldmljZVB1c2hFcnJvclNjb3BlKG1fYmFja2luZywgY29udmVydFRv
QmFja2luZyhlcnJvckZpbHRlcikpOworfQorCit2b2lkIHBvcEVycm9yU2NvcGVDYWxsYmFjayhX
R1BVRXJyb3JUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIHZvaWQqIHVzZXJkYXRhKQor
eworICAgIGF1dG8gZGV2aWNlID0gYWRvcHRSZWYoKnN0YXRpY19jYXN0PERldmljZUltcGwqPih1
c2VyZGF0YSkpOyAvLyBhZG9wdFJlZiBpcyBiYWxhbmNlZCBieSBsZWFrUmVmIGluIHBvcEVycm9y
U2NvcGUoKSBiZWxvdy4gV2UgaGF2ZSB0byBkbyB0aGlzIGJlY2F1c2Ugd2UncmUgdXNpbmcgYSBD
IEFQSSB3aXRoIG5vIGNvbmNlcHQgb2YgcmVmZXJlbmNlIGNvdW50aW5nIG9yIGJsb2Nrcy4KKyAg
ICBkZXZpY2UtPnBvcEVycm9yU2NvcGVDYWxsYmFjayh0eXBlLCBtZXNzYWdlKTsKK30KKwordm9p
ZCBEZXZpY2VJbXBsOjpwb3BFcnJvclNjb3BlKHN0ZDo6ZnVuY3Rpb248dm9pZChzdGQ6Om9wdGlv
bmFsPEVycm9yPiYmKT4mJiBjYWxsYmFjaykKK3sKKyAgICBSZWYgcHJvdGVjdGVkVGhpcygqdGhp
cyk7CisKKyAgICBtX3BvcEVycm9yU2NvcGVDYWxsYmFja3MuYXBwZW5kKFdURk1vdmUoY2FsbGJh
Y2spKTsKKworICAgIHdncHVEZXZpY2VQb3BFcnJvclNjb3BlKG1fYmFja2luZywgJldlYkdQVTo6
cG9wRXJyb3JTY29wZUNhbGxiYWNrLCAmcHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpOyAvLyBsZWFr
UmVmIGlzIGJhbGFuY2VkIGJ5IGFkb3B0UmVmIGluIHJlcXVlc3REZXZpY2VDYWxsYmFjaygpIGFi
b3ZlLiBXZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSdyZSB1c2luZyBhIEMgQVBJIHdpdGgg
bm8gY29uY2VwdCBvZiByZWZlcmVuY2UgY291bnRpbmcgb3IgYmxvY2tzLgorfQorCit2b2lkIERl
dmljZUltcGw6OnBvcEVycm9yU2NvcGVDYWxsYmFjayhXR1BVRXJyb3JUeXBlIGVycm9yVHlwZSwg
Y29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPEVycm9yPiBlcnJvcjsK
KyAgICBzd2l0Y2ggKGVycm9yVHlwZSkgeworICAgIGNhc2UgV0dQVUVycm9yVHlwZV9Ob0Vycm9y
OgorICAgIGNhc2UgV0dQVUVycm9yVHlwZV9Gb3JjZTMyOgorICAgICAgICBicmVhazsKKyAgICBj
YXNlIFdHUFVFcnJvclR5cGVfVmFsaWRhdGlvbjoKKyAgICAgICAgZXJyb3IgPSB7IHsgVmFsaWRh
dGlvbkVycm9yOjpjcmVhdGUobWVzc2FnZSkgfSB9OworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFdHUFVFcnJvclR5cGVfT3V0T2ZNZW1vcnk6CisgICAgICAgIGVycm9yID0geyB7IE91dE9mTWVt
b3J5RXJyb3I6OmNyZWF0ZSgpIH0gfTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXR1BVRXJy
b3JUeXBlX1Vua25vd246CisgICAgICAgIGVycm9yID0geyB7IE91dE9mTWVtb3J5RXJyb3I6OmNy
ZWF0ZSgpIH0gfTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXR1BVRXJyb3JUeXBlX0Rldmlj
ZUxvc3Q6CisgICAgICAgIGVycm9yID0geyB7IE91dE9mTWVtb3J5RXJyb3I6OmNyZWF0ZSgpIH0g
fTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgYXV0byBjYWxsYmFjayA9IG1fcG9wRXJy
b3JTY29wZUNhbGxiYWNrcy50YWtlRmlyc3QoKTsKKyAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9y
KSk7Cit9CisKK3ZvaWQgRGV2aWNlSW1wbDo6c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcm
IGxhYmVsKQoreworICAgIHdncHVEZXZpY2VTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVsLnV0Zjgo
KS5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQ
VQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1w
bC9XZWJHUFVEZXZpY2VJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dl
YkdQVS9JbXBsL1dlYkdQVURldmljZUltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NmE2MGJjNGJlMWNmOGQ4
ZWYxOWEwMmI0NDY0ODYwYTZlMjk5NTViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVEZXZpY2VJbXBsLmgKQEAgLTAs
MCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BV
RGV2aWNlLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1
ZS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBEZXZp
Y2VJbXBsIGZpbmFsIDogcHVibGljIERldmljZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxE
ZXZpY2VJbXBsPiBjcmVhdGUoV0dQVURldmljZSBkZXZpY2UsIFJlZjxTdXBwb3J0ZWRGZWF0dXJl
cz4mJiBmZWF0dXJlcywgUmVmPFN1cHBvcnRlZExpbWl0cz4mJiBsaW1pdHMpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEZXZpY2VJbXBsKGRldmljZSwgV1RGTW92ZShmZWF0
dXJlcyksIFdURk1vdmUobGltaXRzKSkpOworICAgIH0KKworICAgIH5EZXZpY2VJbXBsKCk7CisK
KyAgICBXR1BVRGV2aWNlIGJhY2tpbmcoKSBjb25zdCB7IHJldHVybiBtX2JhY2tpbmc7IH0KKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgdm9pZCBjcmVhdGVDb21wdXRlUGlwZWxpbmVBc3luY0NhbGxi
YWNrKFdHUFVDcmVhdGVQaXBlbGluZUFzeW5jU3RhdHVzLCBXR1BVQ29tcHV0ZVBpcGVsaW5lLCBj
b25zdCBjaGFyKiBtZXNzYWdlLCB2b2lkKiB1c2VyZGF0YSk7CisgICAgZnJpZW5kIHZvaWQgY3Jl
YXRlUmVuZGVyUGlwZWxpbmVBc3luY0NhbGxiYWNrKFdHUFVDcmVhdGVQaXBlbGluZUFzeW5jU3Rh
dHVzLCBXR1BVUmVuZGVyUGlwZWxpbmUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIHZvaWQqIHVzZXJk
YXRhKTsKKyAgICBmcmllbmQgdm9pZCBwb3BFcnJvclNjb3BlQ2FsbGJhY2soV0dQVUVycm9yVHlw
ZSwgY29uc3QgY2hhciogbWVzc2FnZSwgdm9pZCogdXNlcmRhdGEpOworCisgICAgRGV2aWNlSW1w
bChXR1BVRGV2aWNlLCBSZWY8U3VwcG9ydGVkRmVhdHVyZXM+JiYsIFJlZjxTdXBwb3J0ZWRMaW1p
dHM+JiYpOworCisgICAgRGV2aWNlSW1wbChjb25zdCBEZXZpY2VJbXBsJikgPSBkZWxldGU7Cisg
ICAgRGV2aWNlSW1wbChEZXZpY2VJbXBsJiYpID0gZGVsZXRlOworICAgIERldmljZUltcGwmIG9w
ZXJhdG9yPShjb25zdCBEZXZpY2VJbXBsJikgPSBkZWxldGU7CisgICAgRGV2aWNlSW1wbCYgb3Bl
cmF0b3I9KERldmljZUltcGwmJikgPSBkZWxldGU7CisKKyAgICB2b2lkIGRlc3Ryb3koKSBmaW5h
bDsKKworICAgIFJlZjxCdWZmZXI+IGNyZWF0ZUJ1ZmZlcihjb25zdCBCdWZmZXJEZXNjcmlwdG9y
JikgZmluYWw7CisgICAgUmVmPFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoY29uc3QgVGV4dHVyZURl
c2NyaXB0b3ImKSBmaW5hbDsKKyAgICBSZWY8U2FtcGxlcj4gY3JlYXRlU2FtcGxlcihjb25zdCBT
YW1wbGVyRGVzY3JpcHRvciYpIGZpbmFsOworICAgIFJlZjxFeHRlcm5hbFRleHR1cmU+IGltcG9y
dEV4dGVybmFsVGV4dHVyZShjb25zdCBFeHRlcm5hbFRleHR1cmVEZXNjcmlwdG9yJikgZmluYWw7
CisKKyAgICBSZWY8QmluZEdyb3VwTGF5b3V0PiBjcmVhdGVCaW5kR3JvdXBMYXlvdXQoY29uc3Qg
QmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciYpIGZpbmFsOworICAgIFJlZjxQaXBlbGluZUxheW91
dD4gY3JlYXRlUGlwZWxpbmVMYXlvdXQoY29uc3QgUGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yJikg
ZmluYWw7CisgICAgUmVmPEJpbmRHcm91cD4gY3JlYXRlQmluZEdyb3VwKGNvbnN0IEJpbmRHcm91
cERlc2NyaXB0b3ImKSBmaW5hbDsKKworICAgIFJlZjxTaGFkZXJNb2R1bGU+IGNyZWF0ZVNoYWRl
ck1vZHVsZShjb25zdCBTaGFkZXJNb2R1bGVEZXNjcmlwdG9yJikgZmluYWw7CisgICAgUmVmPENv
bXB1dGVQaXBlbGluZT4gY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKGNvbnN0IENvbXB1dGVQaXBlbGlu
ZURlc2NyaXB0b3ImKSBmaW5hbDsKKyAgICBSZWY8UmVuZGVyUGlwZWxpbmU+IGNyZWF0ZVJlbmRl
clBpcGVsaW5lKGNvbnN0IFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciYpIGZpbmFsOworICAgIHZv
aWQgY3JlYXRlQ29tcHV0ZVBpcGVsaW5lQXN5bmNDYWxsYmFjayhXR1BVQ3JlYXRlUGlwZWxpbmVB
c3luY1N0YXR1cywgV0dQVUNvbXB1dGVQaXBlbGluZSwgY29uc3QgY2hhciogbWVzc2FnZSk7Cisg
ICAgdm9pZCBjcmVhdGVDb21wdXRlUGlwZWxpbmVBc3luYyhjb25zdCBDb21wdXRlUGlwZWxpbmVE
ZXNjcmlwdG9yJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlZjxDb21wdXRlUGlwZWxpbmU+JiYpPiYm
KSBmaW5hbDsKKyAgICB2b2lkIGNyZWF0ZVJlbmRlclBpcGVsaW5lQXN5bmNDYWxsYmFjayhXR1BV
Q3JlYXRlUGlwZWxpbmVBc3luY1N0YXR1cywgV0dQVVJlbmRlclBpcGVsaW5lLCBjb25zdCBjaGFy
KiBtZXNzYWdlKTsKKyAgICB2b2lkIGNyZWF0ZVJlbmRlclBpcGVsaW5lQXN5bmMoY29uc3QgUmVu
ZGVyUGlwZWxpbmVEZXNjcmlwdG9yJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlZjxSZW5kZXJQaXBl
bGluZT4mJik+JiYpIGZpbmFsOworCisgICAgUmVmPENvbW1hbmRFbmNvZGVyPiBjcmVhdGVDb21t
YW5kRW5jb2Rlcihjb25zdCBzdGQ6Om9wdGlvbmFsPENvbW1hbmRFbmNvZGVyRGVzY3JpcHRvcj4m
KSBmaW5hbDsKKyAgICBSZWY8UmVuZGVyQnVuZGxlRW5jb2Rlcj4gY3JlYXRlUmVuZGVyQnVuZGxl
RW5jb2Rlcihjb25zdCBSZW5kZXJCdW5kbGVFbmNvZGVyRGVzY3JpcHRvciYpIGZpbmFsOworCisg
ICAgUmVmPFF1ZXJ5U2V0PiBjcmVhdGVRdWVyeVNldChjb25zdCBRdWVyeVNldERlc2NyaXB0b3Im
KSBmaW5hbDsKKworICAgIHZvaWQgcHVzaEVycm9yU2NvcGUoRXJyb3JGaWx0ZXIpIGZpbmFsOwor
ICAgIHZvaWQgcG9wRXJyb3JTY29wZUNhbGxiYWNrKFdHUFVFcnJvclR5cGUsIGNvbnN0IGNoYXIq
IG1lc3NhZ2UpOworICAgIHZvaWQgcG9wRXJyb3JTY29wZShzdGQ6OmZ1bmN0aW9uPHZvaWQoc3Rk
OjpvcHRpb25hbDxFcnJvcj4mJik+JiYpIGZpbmFsOworCisgICAgdm9pZCBzZXRMYWJlbEludGVy
bmFsKGNvbnN0IFN0cmluZyYpIGZpbmFsOworCisgICAgV0dQVURldmljZSBtX2JhY2tpbmcgeyBu
dWxscHRyIH07CisKKyAgICBEZXF1ZTxzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVmPENvbXB1dGVQaXBl
bGluZT4mJik+PiBtX2NyZWF0ZUNvbXB1dGVQaXBlbGluZUFzeW5jQ2FsbGJhY2tzOworICAgIERl
cXVlPHN0ZDo6ZnVuY3Rpb248dm9pZChSZWY8UmVuZGVyUGlwZWxpbmU+JiYpPj4gbV9jcmVhdGVS
ZW5kZXJQaXBlbGluZUFzeW5jQ2FsbGJhY2tzOworICAgIERlcXVlPHN0ZDo6ZnVuY3Rpb248dm9p
ZChzdGQ6Om9wdGlvbmFsPEVycm9yPiYmKT4+IG1fcG9wRXJyb3JTY29wZUNhbGxiYWNrczsKK307
CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUV4dGVy
bmFsVGV4dHVyZUltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJH
UFUvSW1wbC9XZWJHUFVFeHRlcm5hbFRleHR1cmVJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYWViODll
MDdmYjU2MjdmMjY5ZGI5MzUwMjE1ODZkYjRmNzBhNjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVFeHRlcm5hbFRl
eHR1cmVJbXBsLmNwcApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldlYkdQVUV4dGVybmFsVGV4dHVyZUltcGwuaCIKKworI2luY2x1
ZGUgPFdlYkdQVS9XZWJHUFVFeHQuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2Vi
R1BVIHsKKworRXh0ZXJuYWxUZXh0dXJlSW1wbDo6RXh0ZXJuYWxUZXh0dXJlSW1wbCgpCit7Cit9
CisKK0V4dGVybmFsVGV4dHVyZUltcGw6On5FeHRlcm5hbFRleHR1cmVJbXBsKCkKK3sKK30KKwor
dm9pZCBFeHRlcm5hbFRleHR1cmVJbXBsOjpzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYp
Cit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQ
VUV4dGVybmFsVGV4dHVyZUltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3Mv
V2ViR1BVL0ltcGwvV2ViR1BVRXh0ZXJuYWxUZXh0dXJlSW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFkNzgx
NjMzZTU4ZDA1OTc2YjRmN2RiOWI1YzgzYmViMDgxYmU2YWMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUV4dGVybmFs
VGV4dHVyZUltcGwuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJXZWJHUFVFeHRlcm5hbFRleHR1cmUuaCIKKyNpbmNsdWRlIDxXZWJHUFUv
V2ViR1BVLmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK2NsYXNz
IEV4dGVybmFsVGV4dHVyZUltcGwgZmluYWwgOiBwdWJsaWMgRXh0ZXJuYWxUZXh0dXJlIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPEV4dGVybmFsVGV4dHVyZUltcGw+IGNyZWF0ZSgpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBFeHRlcm5hbFRleHR1cmVJbXBsKCkpOwor
ICAgIH0KKworICAgIHZpcnR1YWwgfkV4dGVybmFsVGV4dHVyZUltcGwoKTsKKworcHJpdmF0ZToK
KyAgICBFeHRlcm5hbFRleHR1cmVJbXBsKCk7CisKKyAgICBFeHRlcm5hbFRleHR1cmVJbXBsKGNv
bnN0IEV4dGVybmFsVGV4dHVyZUltcGwmKSA9IGRlbGV0ZTsKKyAgICBFeHRlcm5hbFRleHR1cmVJ
bXBsKEV4dGVybmFsVGV4dHVyZUltcGwmJikgPSBkZWxldGU7CisgICAgRXh0ZXJuYWxUZXh0dXJl
SW1wbCYgb3BlcmF0b3I9KGNvbnN0IEV4dGVybmFsVGV4dHVyZUltcGwmKSA9IGRlbGV0ZTsKKyAg
ICBFeHRlcm5hbFRleHR1cmVJbXBsJiBvcGVyYXRvcj0oRXh0ZXJuYWxUZXh0dXJlSW1wbCYmKSA9
IGRlbGV0ZTsKKworICAgIHZvaWQgc2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5h
bDsKK307CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQ
VUltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9X
ZWJHUFVJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMDc2MThjMjIwYWU4Yjg2OWY3ZGUwOGFlNmVlMDE1
MDdhZjgxOWNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVJbXBsLmNwcApAQCAtMCwwICsxLDc2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkdQVUltcGwuaCIKKworI2lu
Y2x1ZGUgIldlYkdQVUFkYXB0ZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVQ29udmVydFRvQmFj
a2luZy5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFVFeHQuaD4KKworbmFtZXNwYWNlIFBBTCB7
CituYW1lc3BhY2UgV2ViR1BVIHsKKworR1BVSW1wbDo6R1BVSW1wbChXR1BVSW5zdGFuY2UgaW5z
dGFuY2UpCisgICAgOiBtX2JhY2tpbmcoaW5zdGFuY2UpCit7Cit9CisKK0dQVUltcGw6On5HUFVJ
bXBsKCkKK3sKKyAgICB3Z3B1SW5zdGFuY2VSZWxlYXNlKG1fYmFja2luZyk7Cit9CisKK3ZvaWQg
cmVxdWVzdEFkYXB0ZXJDYWxsYmFjayhXR1BVUmVxdWVzdEFkYXB0ZXJTdGF0dXMgc3RhdHVzLCBX
R1BVQWRhcHRlciBhZGFwdGVyLCBjb25zdCBjaGFyKiBtZXNzYWdlLCB2b2lkKiB1c2VyZGF0YSkK
K3sKKyAgICBhdXRvIGdwdSA9IGFkb3B0UmVmKCpzdGF0aWNfY2FzdDxHUFVJbXBsKj4odXNlcmRh
dGEpKTsgLy8gYWRvcHRSZWYgaXMgYmFsYW5jZWQgYnkgbGVha1JlZiBpbiByZXF1ZXN0QWRhcHRl
cigpIGJlbG93LiBXZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSdyZSB1c2luZyBhIEMgQVBJ
IHdpdGggbm8gY29uY2VwdCBvZiByZWZlcmVuY2UgY291bnRpbmcgb3IgYmxvY2tzLgorICAgIGdw
dS0+cmVxdWVzdEFkYXB0ZXJDYWxsYmFjayhzdGF0dXMsIGFkYXB0ZXIsIG1lc3NhZ2UpOworfQor
Cit2b2lkIEdQVUltcGw6OnJlcXVlc3RBZGFwdGVyKGNvbnN0IFJlcXVlc3RBZGFwdGVyT3B0aW9u
cyYgb3B0aW9ucywgc3RkOjpmdW5jdGlvbjx2b2lkKFJlZlB0cjxBZGFwdGVyPiYmKT4mJiBjYWxs
YmFjaykKK3sKKyAgICBSZWYgcHJvdGVjdGVkVGhpcygqdGhpcyk7CisKKyAgICBXR1BVUmVxdWVz
dEFkYXB0ZXJPcHRpb25zIGJhY2tpbmdPcHRpb25zIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAg
ICAgbnVsbHB0ciwKKyAgICAgICAgb3B0aW9ucy5wb3dlclByZWZlcmVuY2UgPyBjb252ZXJ0VG9C
YWNraW5nKCpvcHRpb25zLnBvd2VyUHJlZmVyZW5jZSkgOiBzdGF0aWNfY2FzdDxXR1BVUG93ZXJQ
cmVmZXJlbmNlPihXR1BVUG93ZXJQcmVmZXJlbmNlX05vUHJlZmVyZW5jZSksCisgICAgICAgIG9w
dGlvbnMuZm9yY2VGYWxsYmFja0FkYXB0ZXIsCisgICAgfTsKKworICAgIG1fY2FsbGJhY2tzLmFw
cGVuZChXVEZNb3ZlKGNhbGxiYWNrKSk7CisKKyAgICB3Z3B1SW5zdGFuY2VSZXF1ZXN0QWRhcHRl
cihtX2JhY2tpbmcsICZiYWNraW5nT3B0aW9ucywgJldlYkdQVTo6cmVxdWVzdEFkYXB0ZXJDYWxs
YmFjaywgJnByb3RlY3RlZFRoaXMubGVha1JlZigpKTsgLy8gbGVha1JlZiBpcyBiYWxhbmNlZCBi
eSBhZG9wdFJlZiBpbiByZXF1ZXN0QWRhcHRlckNhbGxiYWNrKCkgYWJvdmUuIFdlIGhhdmUgdG8g
ZG8gdGhpcyBiZWNhdXNlIHdlJ3JlIHVzaW5nIGEgQyBBUEkgd2l0aCBubyBjb25jZXB0IG9mIHJl
ZmVyZW5jZSBjb3VudGluZyBvciBibG9ja3MuCit9CisKK3ZvaWQgR1BVSW1wbDo6cmVxdWVzdEFk
YXB0ZXJDYWxsYmFjayhXR1BVUmVxdWVzdEFkYXB0ZXJTdGF0dXMsIFdHUFVBZGFwdGVyIGFkYXB0
ZXIsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgVU5VU0VEX1BBUkFNKG1lc3NhZ2UpOwor
ICAgIGF1dG8gY2FsbGJhY2sgPSBtX2NhbGxiYWNrcy50YWtlRmlyc3QoKTsKKyAgICBjYWxsYmFj
ayhBZGFwdGVySW1wbDo6Y3JlYXRlKGFkYXB0ZXIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgUEFM
Cit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvUEFM
L3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWMxNzAz
ZGIyZWU0ZTAwZmIxMTVjNDZmNmEzYjA2MmMwYzhmMjY5YwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVSW1wbC5oCkBA
IC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldl
YkdQVS5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFUuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUu
aD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworY2xhc3MgR1BVSW1w
bCBmaW5hbCA6IHB1YmxpYyBHUFUgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8R1BVSW1wbD4g
Y3JlYXRlKFdHUFVJbnN0YW5jZSBpbnN0YW5jZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEdQVUltcGwoaW5zdGFuY2UpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5HUFVJ
bXBsKCk7CisKKyAgICBXR1BVSW5zdGFuY2UgYmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFj
a2luZzsgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCB2b2lkIHJlcXVlc3RBZGFwdGVyQ2FsbGJh
Y2soV0dQVVJlcXVlc3RBZGFwdGVyU3RhdHVzLCBXR1BVQWRhcHRlciwgY29uc3QgY2hhciogbWVz
c2FnZSwgdm9pZCogdXNlcmRhdGEpOworCisgICAgR1BVSW1wbChXR1BVSW5zdGFuY2UpOworCisg
ICAgR1BVSW1wbChjb25zdCBHUFVJbXBsJikgPSBkZWxldGU7CisgICAgR1BVSW1wbChHUFVJbXBs
JiYpID0gZGVsZXRlOworICAgIEdQVUltcGwmIG9wZXJhdG9yPShjb25zdCBHUFVJbXBsJikgPSBk
ZWxldGU7CisgICAgR1BVSW1wbCYgb3BlcmF0b3I9KEdQVUltcGwmJikgPSBkZWxldGU7CisKKyAg
ICB2b2lkIHJlcXVlc3RBZGFwdGVyQ2FsbGJhY2soV0dQVVJlcXVlc3RBZGFwdGVyU3RhdHVzLCBX
R1BVQWRhcHRlciwgY29uc3QgY2hhciogbWVzc2FnZSk7CisgICAgdm9pZCByZXF1ZXN0QWRhcHRl
cihjb25zdCBSZXF1ZXN0QWRhcHRlck9wdGlvbnMmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVmUHRy
PEFkYXB0ZXI+JiYpPiYmKSBmaW5hbDsKKworICAgIFdHUFVJbnN0YW5jZSBtX2JhY2tpbmcgeyBu
dWxscHRyIH07CisKKyAgICBEZXF1ZTxzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVmUHRyPEFkYXB0ZXI+
JiYpPj4gbV9jYWxsYmFja3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNw
YWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9X
ZWJHUFUvSW1wbC9XZWJHUFVQaXBlbGluZUxheW91dEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUv
UEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVQaXBlbGluZUxheW91dEltcGwuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjY0NDczOTkzMTg5NTBkOTU0YTdlMTZkY2Y0NmU3ZmI0N2UxNGM1ZjAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9J
bXBsL1dlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5jcHAKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVQaXBlbGluZUxheW91
dEltcGwuaCIKKworI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFVFeHQuaD4KKworbmFtZXNwYWNlIFBB
TCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworUGlwZWxpbmVMYXlvdXRJbXBsOjpQaXBlbGluZUxh
eW91dEltcGwoV0dQVVBpcGVsaW5lTGF5b3V0IHBpcGVsaW5lTGF5b3V0KQorICAgIDogbV9iYWNr
aW5nKHBpcGVsaW5lTGF5b3V0KQoreworfQorCitQaXBlbGluZUxheW91dEltcGw6On5QaXBlbGlu
ZUxheW91dEltcGwoKQoreworICAgIHdncHVQaXBlbGluZUxheW91dFJlbGVhc2UobV9iYWNraW5n
KTsKK30KKwordm9pZCBQaXBlbGluZUxheW91dEltcGw6OnNldExhYmVsSW50ZXJuYWwoY29uc3Qg
U3RyaW5nJiBsYWJlbCkKK3sKKyAgICB3Z3B1UGlwZWxpbmVMYXlvdXRTZXRMYWJlbChtX2JhY2tp
bmcsIGxhYmVsLnV0ZjgoKS5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8g
bmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVQaXBlbGluZUxheW91dEltcGwuaCBiL1NvdXJjZS9XZWJD
b3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUGlwZWxpbmVMYXlvdXRJbXBs
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uM2FmY2EyYzc0ZTgzMzgxZDhiM2VjNTEwYTAzY2VmOTI3OWQxYmE0OAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BV
L0ltcGwvV2ViR1BVUGlwZWxpbmVMYXlvdXRJbXBsLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVUGlwZWxpbmVMYXlvdXQuaCIK
KyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVLmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNl
IFdlYkdQVSB7CisKK2NsYXNzIFBpcGVsaW5lTGF5b3V0SW1wbCBmaW5hbCA6IHB1YmxpYyBQaXBl
bGluZUxheW91dCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxQaXBlbGluZUxheW91dEltcGw+
IGNyZWF0ZShXR1BVUGlwZWxpbmVMYXlvdXQgcGlwZWxpbmVMYXlvdXQpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQaXBlbGluZUxheW91dEltcGwocGlwZWxpbmVMYXlvdXQp
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5QaXBlbGluZUxheW91dEltcGwoKTsKKworICAgIFdH
UFVQaXBlbGluZUxheW91dCBiYWNraW5nKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nOyB9CisK
K3ByaXZhdGU6CisgICAgUGlwZWxpbmVMYXlvdXRJbXBsKFdHUFVQaXBlbGluZUxheW91dCk7CisK
KyAgICBQaXBlbGluZUxheW91dEltcGwoY29uc3QgUGlwZWxpbmVMYXlvdXRJbXBsJikgPSBkZWxl
dGU7CisgICAgUGlwZWxpbmVMYXlvdXRJbXBsKFBpcGVsaW5lTGF5b3V0SW1wbCYmKSA9IGRlbGV0
ZTsKKyAgICBQaXBlbGluZUxheW91dEltcGwmIG9wZXJhdG9yPShjb25zdCBQaXBlbGluZUxheW91
dEltcGwmKSA9IGRlbGV0ZTsKKyAgICBQaXBlbGluZUxheW91dEltcGwmIG9wZXJhdG9yPShQaXBl
bGluZUxheW91dEltcGwmJikgPSBkZWxldGU7CisKKyAgICB2b2lkIHNldExhYmVsSW50ZXJuYWwo
Y29uc3QgU3RyaW5nJikgZmluYWw7CisKKyAgICBXR1BVUGlwZWxpbmVMYXlvdXQgbV9iYWNraW5n
IHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBX
ZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BV
L0ltcGwvV2ViR1BVUXVlcnlTZXRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3Jh
cGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUXVlcnlTZXRJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NmVk
Njk0MGEyOTMxMzAxNzE5N2Y4ODRjMDhkMjVhM2MxN2Y2MGJhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVRdWVyeVNl
dEltcGwuY3BwCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViR1BVUXVlcnlTZXRJbXBsLmgiCisKKyNpbmNsdWRlIDxXZWJHUFUv
V2ViR1BVRXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK1F1
ZXJ5U2V0SW1wbDo6UXVlcnlTZXRJbXBsKFdHUFVRdWVyeVNldCBxdWVyeVNldCkKKyAgICA6IG1f
YmFja2luZyhxdWVyeVNldCkKK3sKK30KKworUXVlcnlTZXRJbXBsOjp+UXVlcnlTZXRJbXBsKCkK
K3sKKyAgICB3Z3B1UXVlcnlTZXRSZWxlYXNlKG1fYmFja2luZyk7Cit9CisKK3ZvaWQgUXVlcnlT
ZXRJbXBsOjpkZXN0cm95KCkKK3sKKyAgICB3Z3B1UXVlcnlTZXREZXN0cm95KG1fYmFja2luZyk7
Cit9CisKK3ZvaWQgUXVlcnlTZXRJbXBsOjpzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYg
bGFiZWwpCit7CisgICAgd2dwdVF1ZXJ5U2V0U2V0TGFiZWwobV9iYWNraW5nLCBsYWJlbC51dGY4
KCkuZGF0YSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJH
UFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0lt
cGwvV2ViR1BVUXVlcnlTZXRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNz
L1dlYkdQVS9JbXBsL1dlYkdQVVF1ZXJ5U2V0SW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmZGY3ZjBmMTdi
OWNhNTAzOTlkN2E5MzBlZmRjOTQ2MmYxOTQ0YmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVF1ZXJ5U2V0SW1wbC5o
CkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IldlYkdQVVF1ZXJ5U2V0LmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorCituYW1lc3Bh
Y2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBRdWVyeVNldEltcGwgZmluYWwg
OiBwdWJsaWMgUXVlcnlTZXQgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UXVlcnlTZXRJbXBs
PiBjcmVhdGUoV0dQVVF1ZXJ5U2V0IHF1ZXJ5U2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgUXVlcnlTZXRJbXBsKHF1ZXJ5U2V0KSk7CisgICAgfQorCisgICAgdmlydHVh
bCB+UXVlcnlTZXRJbXBsKCk7CisKKyAgICBXR1BVUXVlcnlTZXQgYmFja2luZygpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgorICAgIFF1ZXJ5U2V0SW1wbChXR1BVUXVl
cnlTZXQpOworCisgICAgUXVlcnlTZXRJbXBsKGNvbnN0IFF1ZXJ5U2V0SW1wbCYpID0gZGVsZXRl
OworICAgIFF1ZXJ5U2V0SW1wbChRdWVyeVNldEltcGwmJikgPSBkZWxldGU7CisgICAgUXVlcnlT
ZXRJbXBsJiBvcGVyYXRvcj0oY29uc3QgUXVlcnlTZXRJbXBsJikgPSBkZWxldGU7CisgICAgUXVl
cnlTZXRJbXBsJiBvcGVyYXRvcj0oUXVlcnlTZXRJbXBsJiYpID0gZGVsZXRlOworCisgICAgdm9p
ZCBkZXN0cm95KCkgZmluYWw7CisKKyAgICB2b2lkIHNldExhYmVsSW50ZXJuYWwoY29uc3QgU3Ry
aW5nJikgZmluYWw7CisKKyAgICBXR1BVUXVlcnlTZXQgbV9iYWNraW5nIHsgbnVsbHB0ciB9Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUXVl
dWVJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwv
V2ViR1BVUXVldWVJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40N2I0M2YxNjU1ZWVjZWU3OTc5OTYzNTcw
ODU3M2ExMzlkM2JhOWJmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVRdWV1ZUltcGwuY3BwCkBAIC0wLDAgKzEsMTM2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkdQVVF1
ZXVlSW1wbC5oIgorCisjaW5jbHVkZSAiV2ViR1BVQnVmZmVySW1wbC5oIgorI2luY2x1ZGUgIldl
YkdQVUNvbW1hbmRCdWZmZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVQ29udmVydFRvQmFja2lu
Zy5oIgorI2luY2x1ZGUgIldlYkdQVVRleHR1cmVJbXBsLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dl
YkdQVUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitRdWV1
ZUltcGw6OlF1ZXVlSW1wbChXR1BVUXVldWUgcXVldWUpCisgICAgOiBtX2JhY2tpbmcocXVldWUp
Cit7Cit9CisKK1F1ZXVlSW1wbDo6flF1ZXVlSW1wbCgpCit7CisgICAgd2dwdVF1ZXVlUmVsZWFz
ZShtX2JhY2tpbmcpOworfQorCit2b2lkIFF1ZXVlSW1wbDo6c3VibWl0KFZlY3RvcjxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPENvbW1hbmRCdWZmZXI+PiYmIGNvbW1hbmRCdWZmZXJzKQoreworICAg
IFZlY3RvcjxXR1BVQ29tbWFuZEJ1ZmZlcj4gYmFja2luZ0NvbW1hbmRCdWZmZXJzOworICAgIGJh
Y2tpbmdDb21tYW5kQnVmZmVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNvbW1hbmRCdWZmZXJz
LnNpemUoKSk7CisgICAgZm9yIChhdXRvIGNvbW1hbmRCdWZmZXIgOiBjb21tYW5kQnVmZmVycykK
KyAgICAgICAgYmFja2luZ0NvbW1hbmRCdWZmZXJzLnVuY2hlY2tlZEFwcGVuZChzdGF0aWNfY2Fz
dDxjb25zdCBDb21tYW5kQnVmZmVySW1wbCY+KGNvbW1hbmRCdWZmZXIuZ2V0KCkpLmJhY2tpbmco
KSk7CisKKyAgICB3Z3B1UXVldWVTdWJtaXQobV9iYWNraW5nLCBiYWNraW5nQ29tbWFuZEJ1ZmZl
cnMuc2l6ZSgpLCBiYWNraW5nQ29tbWFuZEJ1ZmZlcnMuZGF0YSgpKTsKK30KKwordm9pZCBvblN1
Ym1pdHRlZFdvcmtEb25lQ2FsbGJhY2soV0dQVVF1ZXVlV29ya0RvbmVTdGF0dXMgc3RhdHVzLCB2
b2lkKiB1c2VyZGF0YSkKK3sKKyAgICBhdXRvIHF1ZXVlID0gYWRvcHRSZWYoKnN0YXRpY19jYXN0
PFF1ZXVlSW1wbCo+KHVzZXJkYXRhKSk7IC8vIGFkb3B0UmVmIGlzIGJhbGFuY2VkIGJ5IGxlYWtS
ZWYgaW4gb25TdWJtaXR0ZWRXb3JrRG9uZSgpIGJlbG93LiBXZSBoYXZlIHRvIGRvIHRoaXMgYmVj
YXVzZSB3ZSdyZSB1c2luZyBhIEMgQVBJIHdpdGggbm8gY29uY2VwdCBvZiByZWZlcmVuY2UgY291
bnRpbmcgb3IgYmxvY2tzLgorICAgIHF1ZXVlLT5vblN1Ym1pdHRlZFdvcmtEb25lQ2FsbGJhY2so
c3RhdHVzKTsKK30KKwordm9pZCBRdWV1ZUltcGw6Om9uU3VibWl0dGVkV29ya0RvbmUoc3RkOjpm
dW5jdGlvbjx2b2lkKCk+JiYgY2FsbGJhY2spCit7CisgICAgUmVmIHByb3RlY3RlZFRoaXMoKnRo
aXMpOworCisgICAgbV9jYWxsYmFja3MuYXBwZW5kKFdURk1vdmUoY2FsbGJhY2spKTsKKworICAg
IHdncHVRdWV1ZU9uU3VibWl0dGVkV29ya0RvbmUobV9iYWNraW5nLCBtX3NpZ25hbFZhbHVlLCAm
V2ViR1BVOjpvblN1Ym1pdHRlZFdvcmtEb25lQ2FsbGJhY2ssICZwcm90ZWN0ZWRUaGlzLmxlYWtS
ZWYoKSk7IC8vIGxlYWtSZWYgaXMgYmFsYW5jZWQgYnkgYWRvcHRSZWYgaW4gb25TdWJtaXR0ZWRX
b3JrRG9uZUNhbGxiYWNrKCkgYWJvdmUuIFdlIGhhdmUgdG8gZG8gdGhpcyBiZWNhdXNlIHdlJ3Jl
IHVzaW5nIGEgQyBBUEkgd2l0aCBubyBjb25jZXB0IG9mIHJlZmVyZW5jZSBjb3VudGluZyBvciBi
bG9ja3MuCisKKyAgICArK21fc2lnbmFsVmFsdWU7Cit9CisKK3ZvaWQgUXVldWVJbXBsOjpvblN1
Ym1pdHRlZFdvcmtEb25lQ2FsbGJhY2soV0dQVVF1ZXVlV29ya0RvbmVTdGF0dXMpCit7CisgICAg
YXV0byBjYWxsYmFjayA9IG1fY2FsbGJhY2tzLnRha2VGaXJzdCgpOworICAgIGNhbGxiYWNrKCk7
Cit9CisKK3ZvaWQgUXVldWVJbXBsOjp3cml0ZUJ1ZmZlcigKKyAgICBjb25zdCBCdWZmZXImIGJ1
ZmZlciwKKyAgICBTaXplNjQgYnVmZmVyT2Zmc2V0LAorICAgIGNvbnN0IHZvaWQqIHNvdXJjZSwK
KyAgICBzaXplX3QgYnl0ZUxlbmd0aCwKKyAgICBTaXplNjQgZGF0YU9mZnNldCwKKyAgICBzdGQ6
Om9wdGlvbmFsPFNpemU2ND4gc2l6ZSkKK3sKKyAgICAvLyBGSVhNRTogVXNlIGNoZWNrZWQgYXJp
dGhtZXRpYworICAgIHdncHVRdWV1ZVdyaXRlQnVmZmVyKG1fYmFja2luZywgc3RhdGljX2Nhc3Q8
Y29uc3QgQnVmZmVySW1wbCY+KGJ1ZmZlcikuYmFja2luZygpLCBidWZmZXJPZmZzZXQsIHN0YXRp
Y19jYXN0PGNvbnN0IHVpbnQ4X3QqPihzb3VyY2UpICsgZGF0YU9mZnNldCwgc2l6ZS52YWx1ZV9v
cihieXRlTGVuZ3RoIC0gZGF0YU9mZnNldCkpOworfQorCit2b2lkIFF1ZXVlSW1wbDo6d3JpdGVU
ZXh0dXJlKAorICAgIGNvbnN0IEltYWdlQ29weVRleHR1cmUmIGRlc3RpbmF0aW9uLAorICAgIGNv
bnN0IHZvaWQqIHNvdXJjZSwKKyAgICBzaXplX3QgYnl0ZUxlbmd0aCwKKyAgICBjb25zdCBJbWFn
ZURhdGFMYXlvdXQmIGRhdGFMYXlvdXQsCisgICAgY29uc3QgRXh0ZW50M0QmIHNpemUpCit7Cisg
ICAgV0dQVUltYWdlQ29weVRleHR1cmUgYmFja2luZ0Rlc3RpbmF0aW9uIHsKKyAgICAgICAgbnVs
bHB0ciwKKyAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgVGV4dHVyZUltcGwmPihkZXN0aW5hdGlv
bi50ZXh0dXJlKS5iYWNraW5nKCksCisgICAgICAgIGRlc3RpbmF0aW9uLm1pcExldmVsLAorICAg
ICAgICBkZXN0aW5hdGlvbi5vcmlnaW4gPyBjb252ZXJ0VG9CYWNraW5nKCpkZXN0aW5hdGlvbi5v
cmlnaW4pIDogV0dQVU9yaWdpbjNEIHsgMCwgMCwgMCB9LAorICAgICAgICBjb252ZXJ0VG9CYWNr
aW5nKGRlc3RpbmF0aW9uLmFzcGVjdCksCisgICAgfTsKKworICAgIFdHUFVUZXh0dXJlRGF0YUxh
eW91dCBiYWNraW5nRGF0YUxheW91dCB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIGRhdGFM
YXlvdXQub2Zmc2V0LAorICAgICAgICBkYXRhTGF5b3V0LmJ5dGVzUGVyUm93LnZhbHVlX29yKDAp
LAorICAgICAgICBkYXRhTGF5b3V0LnJvd3NQZXJJbWFnZS52YWx1ZV9vcigwKSwKKyAgICB9Owor
CisgICAgV0dQVUV4dGVudDNEIGJhY2tpbmdTaXplID0gY29udmVydFRvQmFja2luZyhzaXplKTsK
KworICAgIHdncHVRdWV1ZVdyaXRlVGV4dHVyZShtX2JhY2tpbmcsICZiYWNraW5nRGVzdGluYXRp
b24sIHNvdXJjZSwgYnl0ZUxlbmd0aCwgJmJhY2tpbmdEYXRhTGF5b3V0LCAmYmFja2luZ1NpemUp
OworfQorCit2b2lkIFF1ZXVlSW1wbDo6Y29weUV4dGVybmFsSW1hZ2VUb1RleHR1cmUoCisgICAg
Y29uc3QgSW1hZ2VDb3B5RXh0ZXJuYWxJbWFnZSYgc291cmNlLAorICAgIGNvbnN0IEltYWdlQ29w
eVRleHR1cmVUYWdnZWQmIGRlc3RpbmF0aW9uLAorICAgIGNvbnN0IEV4dGVudDNEJiBjb3B5U2l6
ZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc291cmNlKTsKKyAgICBVTlVTRURfUEFSQU0oZGVzdGlu
YXRpb24pOworICAgIFVOVVNFRF9QQVJBTShjb3B5U2l6ZSk7Cit9CisKK3ZvaWQgUXVldWVJbXBs
OjpzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYgbGFiZWwpCit7CisgICAgd2dwdVF1ZXVl
U2V0TGFiZWwobV9iYWNraW5nLCBsYWJlbC51dGY4KCkuZGF0YSgpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUXVldWVJbXBsLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVF1ZXVlSW1wbC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmNhMDZmYTZmYjVmMzI2NjQ4ODZjYTZlMWMwNzRkNjlkMDM3YTQwOTQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9J
bXBsL1dlYkdQVVF1ZXVlSW1wbC5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIldlYkdQVVF1ZXVlLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dl
YkdQVS5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVz
cGFjZSBXZWJHUFUgeworCitjbGFzcyBRdWV1ZUltcGwgZmluYWwgOiBwdWJsaWMgUXVldWUgewor
cHVibGljOgorICAgIHN0YXRpYyBSZWY8UXVldWVJbXBsPiBjcmVhdGUoV0dQVVF1ZXVlIHF1ZXVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUXVldWVJbXBsKHF1ZXVlKSk7
CisgICAgfQorCisgICAgdmlydHVhbCB+UXVldWVJbXBsKCk7CisKKyAgICBXR1BVUXVldWUgYmFj
a2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgorICAgIGZyaWVu
ZCB2b2lkIG9uU3VibWl0dGVkV29ya0RvbmVDYWxsYmFjayhXR1BVUXVldWVXb3JrRG9uZVN0YXR1
cywgdm9pZCogdXNlcmRhdGEpOworCisgICAgUXVldWVJbXBsKFdHUFVRdWV1ZSk7CisKKyAgICBR
dWV1ZUltcGwoY29uc3QgUXVldWVJbXBsJikgPSBkZWxldGU7CisgICAgUXVldWVJbXBsKFF1ZXVl
SW1wbCYmKSA9IGRlbGV0ZTsKKyAgICBRdWV1ZUltcGwmIG9wZXJhdG9yPShjb25zdCBRdWV1ZUlt
cGwmKSA9IGRlbGV0ZTsKKyAgICBRdWV1ZUltcGwmIG9wZXJhdG9yPShRdWV1ZUltcGwmJikgPSBk
ZWxldGU7CisKKyAgICB2b2lkIHN1Ym1pdChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxD
b21tYW5kQnVmZmVyPj4mJikgZmluYWw7CisKKyAgICB2b2lkIG9uU3VibWl0dGVkV29ya0RvbmVD
YWxsYmFjayhXR1BVUXVldWVXb3JrRG9uZVN0YXR1cyk7CisgICAgdm9pZCBvblN1Ym1pdHRlZFdv
cmtEb25lKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiYmKSBmaW5hbDsKKworICAgIHZvaWQgd3JpdGVC
dWZmZXIoCisgICAgICAgIGNvbnN0IEJ1ZmZlciYsCisgICAgICAgIFNpemU2NCBidWZmZXJPZmZz
ZXQsCisgICAgICAgIGNvbnN0IHZvaWQqIHNvdXJjZSwKKyAgICAgICAgc2l6ZV90IGJ5dGVMZW5n
dGgsCisgICAgICAgIFNpemU2NCBkYXRhT2Zmc2V0LAorICAgICAgICBzdGQ6Om9wdGlvbmFsPFNp
emU2ND4pIGZpbmFsOworCisgICAgdm9pZCB3cml0ZVRleHR1cmUoCisgICAgICAgIGNvbnN0IElt
YWdlQ29weVRleHR1cmUmIGRlc3RpbmF0aW9uLAorICAgICAgICBjb25zdCB2b2lkKiBzb3VyY2Us
CisgICAgICAgIHNpemVfdCBieXRlTGVuZ3RoLAorICAgICAgICBjb25zdCBJbWFnZURhdGFMYXlv
dXQmLAorICAgICAgICBjb25zdCBFeHRlbnQzRCYgc2l6ZSkgZmluYWw7CisKKyAgICB2b2lkIGNv
cHlFeHRlcm5hbEltYWdlVG9UZXh0dXJlKAorICAgICAgICBjb25zdCBJbWFnZUNvcHlFeHRlcm5h
bEltYWdlJiBzb3VyY2UsCisgICAgICAgIGNvbnN0IEltYWdlQ29weVRleHR1cmVUYWdnZWQmIGRl
c3RpbmF0aW9uLAorICAgICAgICBjb25zdCBFeHRlbnQzRCYgY29weVNpemUpIGZpbmFsOworCisg
ICAgdm9pZCBzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYpIGZpbmFsOworCisgICAgV0dQ
VVF1ZXVlIG1fYmFja2luZyB7IG51bGxwdHIgfTsKKworICAgIHVpbnQ2NF90IG1fc2lnbmFsVmFs
dWUgeyAxIH07CisKKyAgICBEZXF1ZTxzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4+IG1fY2FsbGJhY2tz
OworfTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BV
UmVuZGVyQnVuZGxlRW5jb2RlckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJCdW5kbGVFbmNvZGVySW1wbC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uODVlMjEyN2Q2NDIxNmQwYjk0YzRhNDk5ZWNiMWI0MDc5MDg0YWVmYQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2Vi
R1BVUmVuZGVyQnVuZGxlRW5jb2RlckltcGwuY3BwCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkdQVVJlbmRlckJ1bmRsZUVu
Y29kZXJJbXBsLmgiCisKKyNpbmNsdWRlICJXZWJHUFVCaW5kR3JvdXBJbXBsLmgiCisjaW5jbHVk
ZSAiV2ViR1BVQnVmZmVySW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVUNvbnZlcnRUb0JhY2tpbmcu
aCIKKyNpbmNsdWRlICJXZWJHUFVSZW5kZXJCdW5kbGVJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BV
UmVuZGVyUGlwZWxpbmVJbXBsLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVUV4dC5oPgorCitu
YW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitSZW5kZXJCdW5kbGVFbmNvZGVy
SW1wbDo6UmVuZGVyQnVuZGxlRW5jb2RlckltcGwoV0dQVVJlbmRlckJ1bmRsZUVuY29kZXIgcmVu
ZGVyQnVuZGxlRW5jb2RlcikKKyAgICA6IG1fYmFja2luZyhyZW5kZXJCdW5kbGVFbmNvZGVyKQor
eworfQorCitSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6flJlbmRlckJ1bmRsZUVuY29kZXJJbXBs
KCkKK3sKKyAgICB3Z3B1UmVuZGVyQnVuZGxlRW5jb2RlclJlbGVhc2UobV9iYWNraW5nKTsKK30K
Kwordm9pZCBSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6c2V0UGlwZWxpbmUoY29uc3QgUmVuZGVy
UGlwZWxpbmUmIHJlbmRlclBpcGVsaW5lKQoreworICAgIHdncHVSZW5kZXJCdW5kbGVFbmNvZGVy
U2V0UGlwZWxpbmUobV9iYWNraW5nLCBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJQaXBlbGluZUlt
cGwmPihyZW5kZXJQaXBlbGluZSkuYmFja2luZygpKTsKK30KKwordm9pZCBSZW5kZXJCdW5kbGVF
bmNvZGVySW1wbDo6c2V0SW5kZXhCdWZmZXIoY29uc3QgQnVmZmVyJiBidWZmZXIsIEluZGV4Rm9y
bWF0IGluZGV4Rm9ybWF0LCBTaXplNjQgb2Zmc2V0LCBzdGQ6Om9wdGlvbmFsPFNpemU2ND4gc2l6
ZSkKK3sKKyAgICB3Z3B1UmVuZGVyQnVuZGxlRW5jb2RlclNldEluZGV4QnVmZmVyKG1fYmFja2lu
Zywgc3RhdGljX2Nhc3Q8Y29uc3QgQnVmZmVySW1wbCY+KGJ1ZmZlcikuYmFja2luZygpLCBjb252
ZXJ0VG9CYWNraW5nKGluZGV4Rm9ybWF0KSwgb2Zmc2V0LCBzaXplLnZhbHVlX29yKFdHUFVfV0hP
TEVfU0laRSkpOworfQorCit2b2lkIFJlbmRlckJ1bmRsZUVuY29kZXJJbXBsOjpzZXRWZXJ0ZXhC
dWZmZXIoSW5kZXgzMiBzbG90LCBjb25zdCBCdWZmZXImIGJ1ZmZlciwgU2l6ZTY0IG9mZnNldCwg
c3RkOjpvcHRpb25hbDxTaXplNjQ+IHNpemUpCit7CisgICAgd2dwdVJlbmRlckJ1bmRsZUVuY29k
ZXJTZXRWZXJ0ZXhCdWZmZXIobV9iYWNraW5nLCBzbG90LCBzdGF0aWNfY2FzdDxjb25zdCBCdWZm
ZXJJbXBsJj4oYnVmZmVyKS5iYWNraW5nKCksIG9mZnNldCwgc2l6ZS52YWx1ZV9vcihXR1BVX1dI
T0xFX1NJWkUpKTsKK30KKwordm9pZCBSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6ZHJhdyhTaXpl
MzIgdmVydGV4Q291bnQsIFNpemUzMiBpbnN0YW5jZUNvdW50LAorICAgIFNpemUzMiBmaXJzdFZl
cnRleCwgU2l6ZTMyIGZpcnN0SW5zdGFuY2UpCit7CisgICAgd2dwdVJlbmRlckJ1bmRsZUVuY29k
ZXJEcmF3KG1fYmFja2luZywgdmVydGV4Q291bnQsIGluc3RhbmNlQ291bnQsIGZpcnN0VmVydGV4
LCBmaXJzdEluc3RhbmNlKTsKK30KKwordm9pZCBSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6ZHJh
d0luZGV4ZWQoU2l6ZTMyIGluZGV4Q291bnQsIFNpemUzMiBpbnN0YW5jZUNvdW50LAorICAgIFNp
emUzMiBmaXJzdEluZGV4LAorICAgIFNpZ25lZE9mZnNldDMyIGJhc2VWZXJ0ZXgsCisgICAgU2l6
ZTMyIGZpcnN0SW5zdGFuY2UpCit7CisgICAgd2dwdVJlbmRlckJ1bmRsZUVuY29kZXJEcmF3SW5k
ZXhlZChtX2JhY2tpbmcsIGluZGV4Q291bnQsIGluc3RhbmNlQ291bnQsIGZpcnN0SW5kZXgsIGJh
c2VWZXJ0ZXgsIGZpcnN0SW5zdGFuY2UpOworfQorCit2b2lkIFJlbmRlckJ1bmRsZUVuY29kZXJJ
bXBsOjpkcmF3SW5kaXJlY3QoY29uc3QgQnVmZmVyJiBpbmRpcmVjdEJ1ZmZlciwgU2l6ZTY0IGlu
ZGlyZWN0T2Zmc2V0KQoreworICAgIHdncHVSZW5kZXJCdW5kbGVFbmNvZGVyRHJhd0luZGlyZWN0
KG1fYmFja2luZywgc3RhdGljX2Nhc3Q8Y29uc3QgQnVmZmVySW1wbCY+KGluZGlyZWN0QnVmZmVy
KS5iYWNraW5nKCksIGluZGlyZWN0T2Zmc2V0KTsKK30KKwordm9pZCBSZW5kZXJCdW5kbGVFbmNv
ZGVySW1wbDo6ZHJhd0luZGV4ZWRJbmRpcmVjdChjb25zdCBCdWZmZXImIGluZGlyZWN0QnVmZmVy
LCBTaXplNjQgaW5kaXJlY3RPZmZzZXQpCit7CisgICAgd2dwdVJlbmRlckJ1bmRsZUVuY29kZXJE
cmF3SW5kZXhlZEluZGlyZWN0KG1fYmFja2luZywgc3RhdGljX2Nhc3Q8Y29uc3QgQnVmZmVySW1w
bCY+KGluZGlyZWN0QnVmZmVyKS5iYWNraW5nKCksIGluZGlyZWN0T2Zmc2V0KTsKK30KKwordm9p
ZCBSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6c2V0QmluZEdyb3VwKEluZGV4MzIgaW5kZXgsIGNv
bnN0IEJpbmRHcm91cCYgYmluZEdyb3VwLAorICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPEJ1ZmZl
ckR5bmFtaWNPZmZzZXQ+PiYmIGR5bmFtaWNPZmZzZXRzKQoreworICAgIGF1dG8gYmFja2luZ09m
ZnNldHMgPSBkeW5hbWljT2Zmc2V0cy52YWx1ZV9vcihWZWN0b3I8QnVmZmVyRHluYW1pY09mZnNl
dD4geyB9KTsKKyAgICB3Z3B1UmVuZGVyQnVuZGxlRW5jb2RlclNldEJpbmRHcm91cChtX2JhY2tp
bmcsIGluZGV4LCBzdGF0aWNfY2FzdDxjb25zdCBCaW5kR3JvdXBJbXBsJj4oYmluZEdyb3VwKS5i
YWNraW5nKCksIGJhY2tpbmdPZmZzZXRzLnNpemUoKSwgYmFja2luZ09mZnNldHMuZGF0YSgpKTsK
K30KKwordm9pZCBSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6c2V0QmluZEdyb3VwKEluZGV4MzIg
aW5kZXgsIGNvbnN0IEJpbmRHcm91cCYgYmluZEdyb3VwLAorICAgIGNvbnN0IHVpbnQzMl90KiBk
eW5hbWljT2Zmc2V0c0FycmF5QnVmZmVyLAorICAgIHNpemVfdCBkeW5hbWljT2Zmc2V0c0FycmF5
QnVmZmVyTGVuZ3RoLAorICAgIFNpemU2NCBkeW5hbWljT2Zmc2V0c0RhdGFTdGFydCwKKyAgICBT
aXplMzIgZHluYW1pY09mZnNldHNEYXRhTGVuZ3RoKQoreworICAgIFVOVVNFRF9QQVJBTShkeW5h
bWljT2Zmc2V0c0FycmF5QnVmZmVyTGVuZ3RoKTsKKyAgICAvLyBGSVhNRTogVXNlIGNoZWNrZWQg
YWxnZWJyYS4KKyAgICB3Z3B1UmVuZGVyQnVuZGxlRW5jb2RlclNldEJpbmRHcm91cChtX2JhY2tp
bmcsIGluZGV4LCBzdGF0aWNfY2FzdDxjb25zdCBCaW5kR3JvdXBJbXBsJj4oYmluZEdyb3VwKS5i
YWNraW5nKCksIGR5bmFtaWNPZmZzZXRzRGF0YUxlbmd0aCwgZHluYW1pY09mZnNldHNBcnJheUJ1
ZmZlciArIGR5bmFtaWNPZmZzZXRzRGF0YVN0YXJ0KTsKK30KKwordm9pZCBSZW5kZXJCdW5kbGVF
bmNvZGVySW1wbDo6cHVzaERlYnVnR3JvdXAoU3RyaW5nJiYgZ3JvdXBMYWJlbCkKK3sKKyAgICB3
Z3B1UmVuZGVyQnVuZGxlRW5jb2RlclB1c2hEZWJ1Z0dyb3VwKG1fYmFja2luZywgZ3JvdXBMYWJl
bC51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6cG9w
RGVidWdHcm91cCgpCit7CisgICAgd2dwdVJlbmRlckJ1bmRsZUVuY29kZXJQb3BEZWJ1Z0dyb3Vw
KG1fYmFja2luZyk7Cit9CisKK3ZvaWQgUmVuZGVyQnVuZGxlRW5jb2RlckltcGw6Omluc2VydERl
YnVnTWFya2VyKFN0cmluZyYmIG1hcmtlckxhYmVsKQoreworICAgIHdncHVSZW5kZXJCdW5kbGVF
bmNvZGVySW5zZXJ0RGVidWdNYXJrZXIobV9iYWNraW5nLCBtYXJrZXJMYWJlbC51dGY4KCkuZGF0
YSgpKTsKK30KKworUmVmPFJlbmRlckJ1bmRsZT4gUmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OmZp
bmlzaChjb25zdCBSZW5kZXJCdW5kbGVEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIGF1
dG8gbGFiZWwgPSBkZXNjcmlwdG9yLmxhYmVsLnV0ZjgoKTsKKworICAgIFdHUFVSZW5kZXJCdW5k
bGVEZXNjcmlwdG9yIGJhY2tpbmdEZXNjcmlwdG9yIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAg
ICAgbGFiZWwuZGF0YSgpLAorICAgIH07CisKKyAgICByZXR1cm4gUmVuZGVyQnVuZGxlSW1wbDo6
Y3JlYXRlKHdncHVSZW5kZXJCdW5kbGVFbmNvZGVyRmluaXNoKG1fYmFja2luZywgJmJhY2tpbmdE
ZXNjcmlwdG9yKSk7Cit9CisKK3ZvaWQgUmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OnNldExhYmVs
SW50ZXJuYWwoY29uc3QgU3RyaW5nJiBsYWJlbCkKK3sKKyAgICB3Z3B1UmVuZGVyQnVuZGxlRW5j
b2RlclNldExhYmVsKG1fYmFja2luZywgbGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlckJ1bmRsZUVu
Y29kZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBs
L1dlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTVkYWY0MTkzY2Qy
OGI5OGMzMGIwYmViMjY5ZjFmNzI2NzkzMmIxZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVyQnVuZGxlRW5j
b2RlckltcGwuaApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJXZWJHUFVSZW5kZXJCdW5kbGVFbmNvZGVyLmgiCisjaW5jbHVkZSA8V2ViR1BV
L1dlYkdQVS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFz
cyBSZW5kZXJCdW5kbGVFbmNvZGVySW1wbCBmaW5hbCA6IHB1YmxpYyBSZW5kZXJCdW5kbGVFbmNv
ZGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlbmRlckJ1bmRsZUVuY29kZXJJbXBsPiBj
cmVhdGUoV0dQVVJlbmRlckJ1bmRsZUVuY29kZXIgcmVuZGVyQnVuZGxlRW5jb2RlcikKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlbmRlckJ1bmRsZUVuY29kZXJJbXBsKHJl
bmRlckJ1bmRsZUVuY29kZXIpKTsKKyAgICB9CisKKyAgICB+UmVuZGVyQnVuZGxlRW5jb2Rlcklt
cGwoKTsKKworICAgIFdHUFVSZW5kZXJCdW5kbGVFbmNvZGVyIGJhY2tpbmcoKSBjb25zdCB7IHJl
dHVybiBtX2JhY2tpbmc7IH0KKworcHJpdmF0ZToKKyAgICBSZW5kZXJCdW5kbGVFbmNvZGVySW1w
bChXR1BVUmVuZGVyQnVuZGxlRW5jb2Rlcik7CisKKyAgICBSZW5kZXJCdW5kbGVFbmNvZGVySW1w
bChjb25zdCBSZW5kZXJCdW5kbGVFbmNvZGVySW1wbCYpID0gZGVsZXRlOworICAgIFJlbmRlckJ1
bmRsZUVuY29kZXJJbXBsKFJlbmRlckJ1bmRsZUVuY29kZXJJbXBsJiYpID0gZGVsZXRlOworICAg
IFJlbmRlckJ1bmRsZUVuY29kZXJJbXBsJiBvcGVyYXRvcj0oY29uc3QgUmVuZGVyQnVuZGxlRW5j
b2RlckltcGwmKSA9IGRlbGV0ZTsKKyAgICBSZW5kZXJCdW5kbGVFbmNvZGVySW1wbCYgb3BlcmF0
b3I9KFJlbmRlckJ1bmRsZUVuY29kZXJJbXBsJiYpID0gZGVsZXRlOworCisgICAgdm9pZCBzZXRQ
aXBlbGluZShjb25zdCBSZW5kZXJQaXBlbGluZSYpIGZpbmFsOworCisgICAgdm9pZCBzZXRJbmRl
eEJ1ZmZlcihjb25zdCBCdWZmZXImLCBJbmRleEZvcm1hdCwgU2l6ZTY0IG9mZnNldCwgc3RkOjpv
cHRpb25hbDxTaXplNjQ+KSBmaW5hbDsKKyAgICB2b2lkIHNldFZlcnRleEJ1ZmZlcihJbmRleDMy
IHNsb3QsIGNvbnN0IEJ1ZmZlciYsIFNpemU2NCBvZmZzZXQsIHN0ZDo6b3B0aW9uYWw8U2l6ZTY0
PikgZmluYWw7CisKKyAgICB2b2lkIGRyYXcoU2l6ZTMyIHZlcnRleENvdW50LCBTaXplMzIgaW5z
dGFuY2VDb3VudCwKKyAgICAgICAgU2l6ZTMyIGZpcnN0VmVydGV4LCBTaXplMzIgZmlyc3RJbnN0
YW5jZSkgZmluYWw7CisgICAgdm9pZCBkcmF3SW5kZXhlZChTaXplMzIgaW5kZXhDb3VudCwgU2l6
ZTMyIGluc3RhbmNlQ291bnQsCisgICAgICAgIFNpemUzMiBmaXJzdEluZGV4LAorICAgICAgICBT
aWduZWRPZmZzZXQzMiBiYXNlVmVydGV4LAorICAgICAgICBTaXplMzIgZmlyc3RJbnN0YW5jZSkg
ZmluYWw7CisKKyAgICB2b2lkIGRyYXdJbmRpcmVjdChjb25zdCBCdWZmZXImIGluZGlyZWN0QnVm
ZmVyLCBTaXplNjQgaW5kaXJlY3RPZmZzZXQpIGZpbmFsOworICAgIHZvaWQgZHJhd0luZGV4ZWRJ
bmRpcmVjdChjb25zdCBCdWZmZXImIGluZGlyZWN0QnVmZmVyLCBTaXplNjQgaW5kaXJlY3RPZmZz
ZXQpIGZpbmFsOworCisgICAgdm9pZCBzZXRCaW5kR3JvdXAoSW5kZXgzMiwgY29uc3QgQmluZEdy
b3VwJiwKKyAgICAgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8QnVmZmVyRHluYW1pY09mZnNldD4+
JiYgZHluYW1pY09mZnNldHMpIGZpbmFsOworCisgICAgdm9pZCBzZXRCaW5kR3JvdXAoSW5kZXgz
MiwgY29uc3QgQmluZEdyb3VwJiwKKyAgICAgICAgY29uc3QgdWludDMyX3QqIGR5bmFtaWNPZmZz
ZXRzQXJyYXlCdWZmZXIsCisgICAgICAgIHNpemVfdCBkeW5hbWljT2Zmc2V0c0FycmF5QnVmZmVy
TGVuZ3RoLAorICAgICAgICBTaXplNjQgZHluYW1pY09mZnNldHNEYXRhU3RhcnQsCisgICAgICAg
IFNpemUzMiBkeW5hbWljT2Zmc2V0c0RhdGFMZW5ndGgpIGZpbmFsOworCisgICAgdm9pZCBwdXNo
RGVidWdHcm91cChTdHJpbmcmJiBncm91cExhYmVsKSBmaW5hbDsKKyAgICB2b2lkIHBvcERlYnVn
R3JvdXAoKSBmaW5hbDsKKyAgICB2b2lkIGluc2VydERlYnVnTWFya2VyKFN0cmluZyYmIG1hcmtl
ckxhYmVsKSBmaW5hbDsKKworICAgIFJlZjxSZW5kZXJCdW5kbGU+IGZpbmlzaChjb25zdCBSZW5k
ZXJCdW5kbGVEZXNjcmlwdG9yJikgZmluYWw7CisKKyAgICB2b2lkIHNldExhYmVsSW50ZXJuYWwo
Y29uc3QgU3RyaW5nJikgZmluYWw7CisKKyAgICBXR1BVUmVuZGVyQnVuZGxlRW5jb2RlciBtX2Jh
Y2tpbmcgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNw
YWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9X
ZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJCdW5kbGVJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVyQnVuZGxlSW1wbC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZWIxOGNmOWM0MTg0YzRmNGNmOGYxMWEyNTYzN2I5MWM2ODc3Njk0ZgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwv
V2ViR1BVUmVuZGVyQnVuZGxlSW1wbC5jcHAKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVSZW5kZXJCdW5kbGVJbXBsLmgi
CisKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVRXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFt
ZXNwYWNlIFdlYkdQVSB7CisKK1JlbmRlckJ1bmRsZUltcGw6OlJlbmRlckJ1bmRsZUltcGwoV0dQ
VVJlbmRlckJ1bmRsZSByZW5kZXJCdW5kbGUpCisgICAgOiBtX2JhY2tpbmcocmVuZGVyQnVuZGxl
KQoreworfQorCitSZW5kZXJCdW5kbGVJbXBsOjp+UmVuZGVyQnVuZGxlSW1wbCgpCit7CisgICAg
d2dwdVJlbmRlckJ1bmRsZVJlbGVhc2UobV9iYWNraW5nKTsKK30KKwordm9pZCBSZW5kZXJCdW5k
bGVJbXBsOjpzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYgbGFiZWwpCit7CisgICAgd2dw
dVJlbmRlckJ1bmRsZVNldExhYmVsKG1fYmFja2luZywgbGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRl
ckJ1bmRsZUltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0lt
cGwvV2ViR1BVUmVuZGVyQnVuZGxlSW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjViZGEzNmUwODFhNzRhMzBl
OWZiNGQ0NmFjMjQwYzM1NzIyNjY0ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlckJ1bmRsZUltcGwuaApA
QCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJX
ZWJHUFVSZW5kZXJCdW5kbGUuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVLmg+CisKK25hbWVz
cGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK2NsYXNzIFJlbmRlckJ1bmRsZUltcGwg
ZmluYWwgOiBwdWJsaWMgUmVuZGVyQnVuZGxlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJl
bmRlckJ1bmRsZUltcGw+IGNyZWF0ZShXR1BVUmVuZGVyQnVuZGxlIHJlbmRlckJ1bmRsZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlbmRlckJ1bmRsZUltcGwocmVuZGVy
QnVuZGxlKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+UmVuZGVyQnVuZGxlSW1wbCgpOworCisg
ICAgV0dQVVJlbmRlckJ1bmRsZSBiYWNraW5nKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nOyB9
CisKK3ByaXZhdGU6CisgICAgUmVuZGVyQnVuZGxlSW1wbChXR1BVUmVuZGVyQnVuZGxlKTsKKwor
ICAgIFJlbmRlckJ1bmRsZUltcGwoY29uc3QgUmVuZGVyQnVuZGxlSW1wbCYpID0gZGVsZXRlOwor
ICAgIFJlbmRlckJ1bmRsZUltcGwoUmVuZGVyQnVuZGxlSW1wbCYmKSA9IGRlbGV0ZTsKKyAgICBS
ZW5kZXJCdW5kbGVJbXBsJiBvcGVyYXRvcj0oY29uc3QgUmVuZGVyQnVuZGxlSW1wbCYpID0gZGVs
ZXRlOworICAgIFJlbmRlckJ1bmRsZUltcGwmIG9wZXJhdG9yPShSZW5kZXJCdW5kbGVJbXBsJiYp
ID0gZGVsZXRlOworCisgICAgdm9pZCBzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYpIGZp
bmFsOworCisgICAgV0dQVVJlbmRlckJ1bmRsZSBtX2JhY2tpbmcgeyBudWxscHRyIH07Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJQ
YXNzRW5jb2RlckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJH
UFUvSW1wbC9XZWJHUFVSZW5kZXJQYXNzRW5jb2RlckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQxNWE4
NDNlYjhkZGEzYWM0ZmRmNjEzZGJjZjVhMjhmMTBhMjMwZTUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlclBh
c3NFbmNvZGVySW1wbC5jcHAKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViR1BVUmVuZGVyUGFzc0VuY29kZXJJbXBsLmgiCisK
KyNpbmNsdWRlICJXZWJHUFVCaW5kR3JvdXBJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVQnVmZmVy
SW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVUNvbnZlcnRUb0JhY2tpbmcuaCIKKyNpbmNsdWRlICJX
ZWJHUFVRdWVyeVNldEltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVSZW5kZXJCdW5kbGVJbXBsLmgi
CisjaW5jbHVkZSAiV2ViR1BVUmVuZGVyUGlwZWxpbmVJbXBsLmgiCisjaW5jbHVkZSA8V2ViR1BV
L1dlYkdQVUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitS
ZW5kZXJQYXNzRW5jb2RlckltcGw6OlJlbmRlclBhc3NFbmNvZGVySW1wbChXR1BVUmVuZGVyUGFz
c0VuY29kZXIgcmVuZGVyUGFzc0VuY29kZXIpCisgICAgOiBtX2JhY2tpbmcocmVuZGVyUGFzc0Vu
Y29kZXIpCit7Cit9CisKK1JlbmRlclBhc3NFbmNvZGVySW1wbDo6flJlbmRlclBhc3NFbmNvZGVy
SW1wbCgpCit7CisgICAgd2dwdVJlbmRlclBhc3NFbmNvZGVyUmVsZWFzZShtX2JhY2tpbmcpOwor
fQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6c2V0UGlwZWxpbmUoY29uc3QgUmVuZGVy
UGlwZWxpbmUmIHJlbmRlclBpcGVsaW5lKQoreworICAgIHdncHVSZW5kZXJQYXNzRW5jb2RlclNl
dFBpcGVsaW5lKG1fYmFja2luZywgc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyUGlwZWxpbmVJbXBs
Jj4ocmVuZGVyUGlwZWxpbmUpLmJhY2tpbmcoKSk7Cit9CisKK3ZvaWQgUmVuZGVyUGFzc0VuY29k
ZXJJbXBsOjpzZXRJbmRleEJ1ZmZlcihjb25zdCBCdWZmZXImIGJ1ZmZlciwgSW5kZXhGb3JtYXQg
aW5kZXhGb3JtYXQsIFNpemU2NCBvZmZzZXQsIHN0ZDo6b3B0aW9uYWw8U2l6ZTY0PiBzaXplKQor
eworICAgIHdncHVSZW5kZXJQYXNzRW5jb2RlclNldEluZGV4QnVmZmVyKG1fYmFja2luZywgc3Rh
dGljX2Nhc3Q8Y29uc3QgQnVmZmVySW1wbCY+KGJ1ZmZlcikuYmFja2luZygpLCBjb252ZXJ0VG9C
YWNraW5nKGluZGV4Rm9ybWF0KSwgb2Zmc2V0LCBzaXplLnZhbHVlX29yKFdHUFVfV0hPTEVfU0la
RSkpOworfQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6c2V0VmVydGV4QnVmZmVyKElu
ZGV4MzIgc2xvdCwgY29uc3QgQnVmZmVyJiBidWZmZXIsIFNpemU2NCBvZmZzZXQsIHN0ZDo6b3B0
aW9uYWw8U2l6ZTY0PiBzaXplKQoreworICAgIHdncHVSZW5kZXJQYXNzRW5jb2RlclNldFZlcnRl
eEJ1ZmZlcihtX2JhY2tpbmcsIHNsb3QsIHN0YXRpY19jYXN0PGNvbnN0IEJ1ZmZlckltcGwmPihi
dWZmZXIpLmJhY2tpbmcoKSwgb2Zmc2V0LCBzaXplLnZhbHVlX29yKFdHUFVfV0hPTEVfU0laRSkp
OworfQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6ZHJhdyhTaXplMzIgdmVydGV4Q291
bnQsIFNpemUzMiBpbnN0YW5jZUNvdW50LAorICAgIFNpemUzMiBmaXJzdFZlcnRleCwgU2l6ZTMy
IGZpcnN0SW5zdGFuY2UpCit7CisgICAgd2dwdVJlbmRlclBhc3NFbmNvZGVyRHJhdyhtX2JhY2tp
bmcsIHZlcnRleENvdW50LCBpbnN0YW5jZUNvdW50LCBmaXJzdFZlcnRleCwgZmlyc3RJbnN0YW5j
ZSk7Cit9CisKK3ZvaWQgUmVuZGVyUGFzc0VuY29kZXJJbXBsOjpkcmF3SW5kZXhlZChTaXplMzIg
aW5kZXhDb3VudCwgU2l6ZTMyIGluc3RhbmNlQ291bnQsCisgICAgU2l6ZTMyIGZpcnN0SW5kZXgs
CisgICAgU2lnbmVkT2Zmc2V0MzIgYmFzZVZlcnRleCwKKyAgICBTaXplMzIgZmlyc3RJbnN0YW5j
ZSkKK3sKKyAgICB3Z3B1UmVuZGVyUGFzc0VuY29kZXJEcmF3SW5kZXhlZChtX2JhY2tpbmcsIGlu
ZGV4Q291bnQsIGluc3RhbmNlQ291bnQsIGZpcnN0SW5kZXgsIGJhc2VWZXJ0ZXgsIGZpcnN0SW5z
dGFuY2UpOworfQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6ZHJhd0luZGlyZWN0KGNv
bnN0IEJ1ZmZlciYgaW5kaXJlY3RCdWZmZXIsIFNpemU2NCBpbmRpcmVjdE9mZnNldCkKK3sKKyAg
ICB3Z3B1UmVuZGVyUGFzc0VuY29kZXJEcmF3SW5kaXJlY3QobV9iYWNraW5nLCBzdGF0aWNfY2Fz
dDxjb25zdCBCdWZmZXJJbXBsJj4oaW5kaXJlY3RCdWZmZXIpLmJhY2tpbmcoKSwgaW5kaXJlY3RP
ZmZzZXQpOworfQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6ZHJhd0luZGV4ZWRJbmRp
cmVjdChjb25zdCBCdWZmZXImIGluZGlyZWN0QnVmZmVyLCBTaXplNjQgaW5kaXJlY3RPZmZzZXQp
Cit7CisgICAgd2dwdVJlbmRlclBhc3NFbmNvZGVyRHJhd0luZGV4ZWRJbmRpcmVjdChtX2JhY2tp
bmcsIHN0YXRpY19jYXN0PGNvbnN0IEJ1ZmZlckltcGwmPihpbmRpcmVjdEJ1ZmZlcikuYmFja2lu
ZygpLCBpbmRpcmVjdE9mZnNldCk7Cit9CisKK3ZvaWQgUmVuZGVyUGFzc0VuY29kZXJJbXBsOjpz
ZXRCaW5kR3JvdXAoSW5kZXgzMiBpbmRleCwgY29uc3QgQmluZEdyb3VwJiBiaW5kR3JvdXAsCisg
ICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8QnVmZmVyRHluYW1pY09mZnNldD4+JiYgZHluYW1pY09m
ZnNldHMpCit7CisgICAgYXV0byBiYWNraW5nT2Zmc2V0cyA9IGR5bmFtaWNPZmZzZXRzLnZhbHVl
X29yKFZlY3RvcjxCdWZmZXJEeW5hbWljT2Zmc2V0PiB7IH0pOworICAgIHdncHVSZW5kZXJQYXNz
RW5jb2RlclNldEJpbmRHcm91cChtX2JhY2tpbmcsIGluZGV4LCBzdGF0aWNfY2FzdDxjb25zdCBC
aW5kR3JvdXBJbXBsJj4oYmluZEdyb3VwKS5iYWNraW5nKCksIGJhY2tpbmdPZmZzZXRzLnNpemUo
KSwgYmFja2luZ09mZnNldHMuZGF0YSgpKTsKK30KKwordm9pZCBSZW5kZXJQYXNzRW5jb2Rlcklt
cGw6OnNldEJpbmRHcm91cChJbmRleDMyIGluZGV4LCBjb25zdCBCaW5kR3JvdXAmIGJpbmRHcm91
cCwKKyAgICBjb25zdCB1aW50MzJfdCogZHluYW1pY09mZnNldHNBcnJheUJ1ZmZlciwKKyAgICBz
aXplX3QgZHluYW1pY09mZnNldHNBcnJheUJ1ZmZlckxlbmd0aCwKKyAgICBTaXplNjQgZHluYW1p
Y09mZnNldHNEYXRhU3RhcnQsCisgICAgU2l6ZTMyIGR5bmFtaWNPZmZzZXRzRGF0YUxlbmd0aCkK
K3sKKyAgICBVTlVTRURfUEFSQU0oZHluYW1pY09mZnNldHNBcnJheUJ1ZmZlckxlbmd0aCk7Cisg
ICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFsZ2VicmEuCisgICAgd2dwdVJlbmRlclBhc3NFbmNv
ZGVyU2V0QmluZEdyb3VwKG1fYmFja2luZywgaW5kZXgsIHN0YXRpY19jYXN0PGNvbnN0IEJpbmRH
cm91cEltcGwmPihiaW5kR3JvdXApLmJhY2tpbmcoKSwgZHluYW1pY09mZnNldHNEYXRhTGVuZ3Ro
LCBkeW5hbWljT2Zmc2V0c0FycmF5QnVmZmVyICsgZHluYW1pY09mZnNldHNEYXRhU3RhcnQpOwor
fQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6cHVzaERlYnVnR3JvdXAoU3RyaW5nJiYg
Z3JvdXBMYWJlbCkKK3sKKyAgICB3Z3B1UmVuZGVyUGFzc0VuY29kZXJQdXNoRGVidWdHcm91cCht
X2JhY2tpbmcsIGdyb3VwTGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgUmVuZGVyUGFz
c0VuY29kZXJJbXBsOjpwb3BEZWJ1Z0dyb3VwKCkKK3sKKyAgICB3Z3B1UmVuZGVyUGFzc0VuY29k
ZXJQb3BEZWJ1Z0dyb3VwKG1fYmFja2luZyk7Cit9CisKK3ZvaWQgUmVuZGVyUGFzc0VuY29kZXJJ
bXBsOjppbnNlcnREZWJ1Z01hcmtlcihTdHJpbmcmJiBtYXJrZXJMYWJlbCkKK3sKKyAgICB3Z3B1
UmVuZGVyUGFzc0VuY29kZXJJbnNlcnREZWJ1Z01hcmtlcihtX2JhY2tpbmcsIG1hcmtlckxhYmVs
LnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6c2V0Vmll
d3BvcnQoZmxvYXQgeCwgZmxvYXQgeSwKKyAgICBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LAor
ICAgIGZsb2F0IG1pbkRlcHRoLCBmbG9hdCBtYXhEZXB0aCkKK3sKKyAgICB3Z3B1UmVuZGVyUGFz
c0VuY29kZXJTZXRWaWV3cG9ydChtX2JhY2tpbmcsIHgsIHksIHdpZHRoLCBoZWlnaHQsIG1pbkRl
cHRoLCBtYXhEZXB0aCk7Cit9CisKK3ZvaWQgUmVuZGVyUGFzc0VuY29kZXJJbXBsOjpzZXRTY2lz
c29yUmVjdChJbnRlZ2VyQ29vcmRpbmF0ZSB4LCBJbnRlZ2VyQ29vcmRpbmF0ZSB5LAorICAgIElu
dGVnZXJDb29yZGluYXRlIHdpZHRoLCBJbnRlZ2VyQ29vcmRpbmF0ZSBoZWlnaHQpCit7CisgICAg
d2dwdVJlbmRlclBhc3NFbmNvZGVyU2V0U2Npc3NvclJlY3QobV9iYWNraW5nLCB4LCB5LCB3aWR0
aCwgaGVpZ2h0KTsKK30KKwordm9pZCBSZW5kZXJQYXNzRW5jb2RlckltcGw6OnNldEJsZW5kQ29u
c3RhbnQoQ29sb3IgY29sb3IpCit7CisgICAgYXV0byBiYWNraW5nQ29sb3IgPSBjb252ZXJ0VG9C
YWNraW5nKGNvbG9yKTsKKworICAgIHdncHVSZW5kZXJQYXNzRW5jb2RlclNldEJsZW5kQ29uc3Rh
bnQobV9iYWNraW5nLCAmYmFja2luZ0NvbG9yKTsKK30KKwordm9pZCBSZW5kZXJQYXNzRW5jb2Rl
ckltcGw6OnNldFN0ZW5jaWxSZWZlcmVuY2UoU3RlbmNpbFZhbHVlIHN0ZW5jaWxWYWx1ZSkKK3sK
KyAgICB3Z3B1UmVuZGVyUGFzc0VuY29kZXJTZXRTdGVuY2lsUmVmZXJlbmNlKG1fYmFja2luZywg
c3RlbmNpbFZhbHVlKTsKK30KKwordm9pZCBSZW5kZXJQYXNzRW5jb2RlckltcGw6OmJlZ2luT2Nj
bHVzaW9uUXVlcnkoU2l6ZTMyIHF1ZXJ5SW5kZXgpCit7CisgICAgd2dwdVJlbmRlclBhc3NFbmNv
ZGVyQmVnaW5PY2NsdXNpb25RdWVyeShtX2JhY2tpbmcsIHF1ZXJ5SW5kZXgpOworfQorCit2b2lk
IFJlbmRlclBhc3NFbmNvZGVySW1wbDo6ZW5kT2NjbHVzaW9uUXVlcnkoKQoreworICAgIHdncHVS
ZW5kZXJQYXNzRW5jb2RlckVuZE9jY2x1c2lvblF1ZXJ5KG1fYmFja2luZyk7Cit9CisKK3ZvaWQg
UmVuZGVyUGFzc0VuY29kZXJJbXBsOjpiZWdpblBpcGVsaW5lU3RhdGlzdGljc1F1ZXJ5KGNvbnN0
IFF1ZXJ5U2V0JiBxdWVyeVNldCwgU2l6ZTMyIHF1ZXJ5SW5kZXgpCit7CisgICAgd2dwdVJlbmRl
clBhc3NFbmNvZGVyQmVnaW5QaXBlbGluZVN0YXRpc3RpY3NRdWVyeShtX2JhY2tpbmcsIHN0YXRp
Y19jYXN0PGNvbnN0IFF1ZXJ5U2V0SW1wbCY+KHF1ZXJ5U2V0KS5iYWNraW5nKCksIHF1ZXJ5SW5k
ZXgpOworfQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6ZW5kUGlwZWxpbmVTdGF0aXN0
aWNzUXVlcnkoKQoreworICAgIHdncHVSZW5kZXJQYXNzRW5jb2RlckVuZFBpcGVsaW5lU3RhdGlz
dGljc1F1ZXJ5KG1fYmFja2luZyk7Cit9CisKK3ZvaWQgUmVuZGVyUGFzc0VuY29kZXJJbXBsOjpl
eGVjdXRlQnVuZGxlcyhWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZW5kZXJCdW5kbGU+
PiYmIHJlbmRlckJ1bmRsZXMpCit7CisgICAgVmVjdG9yPFdHUFVSZW5kZXJCdW5kbGU+IGJhY2tp
bmdCdW5kbGVzOworICAgIGJhY2tpbmdCdW5kbGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocmVu
ZGVyQnVuZGxlcy5zaXplKCkpOworICAgIGZvciAoYXV0byByZW5kZXJCdW5kbGUgOiByZW5kZXJC
dW5kbGVzKQorICAgICAgICBiYWNraW5nQnVuZGxlcy51bmNoZWNrZWRBcHBlbmQoc3RhdGljX2Nh
c3Q8Y29uc3QgUmVuZGVyQnVuZGxlSW1wbCY+KHJlbmRlckJ1bmRsZS5nZXQoKSkuYmFja2luZygp
KTsKKworICAgIHdncHVSZW5kZXJQYXNzRW5jb2RlckV4ZWN1dGVCdW5kbGVzKG1fYmFja2luZywg
YmFja2luZ0J1bmRsZXMuc2l6ZSgpLCBiYWNraW5nQnVuZGxlcy5kYXRhKCkpOworfQorCit2b2lk
IFJlbmRlclBhc3NFbmNvZGVySW1wbDo6ZW5kUGFzcygpCit7CisgICAgd2dwdVJlbmRlclBhc3NF
bmNvZGVyRW5kUGFzcyhtX2JhY2tpbmcpOworfQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1w
bDo6c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAgIHdncHVSZW5k
ZXJQYXNzRW5jb2RlclNldExhYmVsKG1fYmFja2luZywgbGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRl
clBhc3NFbmNvZGVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJH
UFUvSW1wbC9XZWJHUFVSZW5kZXJQYXNzRW5jb2RlckltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YmFmMWFl
OGM5NzU3ZmUxMjM5MTA4ZTg4NDMxYzQ5Njg1YTVlNzEyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJQYXNz
RW5jb2RlckltcGwuaApAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiV2ViR1BVUmVuZGVyUGFzc0VuY29kZXIuaCIKKyNpbmNsdWRlIDxXZWJH
UFUvV2ViR1BVLmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK2Ns
YXNzIFJlbmRlclBhc3NFbmNvZGVySW1wbCBmaW5hbCA6IHB1YmxpYyBSZW5kZXJQYXNzRW5jb2Rl
ciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZW5kZXJQYXNzRW5jb2RlckltcGw+IGNyZWF0
ZShXR1BVUmVuZGVyUGFzc0VuY29kZXIgcmVuZGVyUGFzc0VuY29kZXIpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZW5kZXJQYXNzRW5jb2RlckltcGwocmVuZGVyUGFzc0Vu
Y29kZXIpKTsKKyAgICB9CisKKyAgICB+UmVuZGVyUGFzc0VuY29kZXJJbXBsKCk7CisKKyAgICBX
R1BVUmVuZGVyUGFzc0VuY29kZXIgYmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsg
fQorCitwcml2YXRlOgorICAgIFJlbmRlclBhc3NFbmNvZGVySW1wbChXR1BVUmVuZGVyUGFzc0Vu
Y29kZXIpOworCisgICAgUmVuZGVyUGFzc0VuY29kZXJJbXBsKGNvbnN0IFJlbmRlclBhc3NFbmNv
ZGVySW1wbCYpID0gZGVsZXRlOworICAgIFJlbmRlclBhc3NFbmNvZGVySW1wbChSZW5kZXJQYXNz
RW5jb2RlckltcGwmJikgPSBkZWxldGU7CisgICAgUmVuZGVyUGFzc0VuY29kZXJJbXBsJiBvcGVy
YXRvcj0oY29uc3QgUmVuZGVyUGFzc0VuY29kZXJJbXBsJikgPSBkZWxldGU7CisgICAgUmVuZGVy
UGFzc0VuY29kZXJJbXBsJiBvcGVyYXRvcj0oUmVuZGVyUGFzc0VuY29kZXJJbXBsJiYpID0gZGVs
ZXRlOworCisgICAgdm9pZCBzZXRQaXBlbGluZShjb25zdCBSZW5kZXJQaXBlbGluZSYpIGZpbmFs
OworCisgICAgdm9pZCBzZXRJbmRleEJ1ZmZlcihjb25zdCBCdWZmZXImLCBJbmRleEZvcm1hdCwg
U2l6ZTY0IG9mZnNldCwgc3RkOjpvcHRpb25hbDxTaXplNjQ+KSBmaW5hbDsKKyAgICB2b2lkIHNl
dFZlcnRleEJ1ZmZlcihJbmRleDMyIHNsb3QsIGNvbnN0IEJ1ZmZlciYsIFNpemU2NCBvZmZzZXQs
IHN0ZDo6b3B0aW9uYWw8U2l6ZTY0PikgZmluYWw7CisKKyAgICB2b2lkIGRyYXcoU2l6ZTMyIHZl
cnRleENvdW50LCBTaXplMzIgaW5zdGFuY2VDb3VudCwKKyAgICAgICAgU2l6ZTMyIGZpcnN0VmVy
dGV4LCBTaXplMzIgZmlyc3RJbnN0YW5jZSkgZmluYWw7CisgICAgdm9pZCBkcmF3SW5kZXhlZChT
aXplMzIgaW5kZXhDb3VudCwgU2l6ZTMyIGluc3RhbmNlQ291bnQsCisgICAgICAgIFNpemUzMiBm
aXJzdEluZGV4LAorICAgICAgICBTaWduZWRPZmZzZXQzMiBiYXNlVmVydGV4LAorICAgICAgICBT
aXplMzIgZmlyc3RJbnN0YW5jZSkgZmluYWw7CisKKyAgICB2b2lkIGRyYXdJbmRpcmVjdChjb25z
dCBCdWZmZXImIGluZGlyZWN0QnVmZmVyLCBTaXplNjQgaW5kaXJlY3RPZmZzZXQpIGZpbmFsOwor
ICAgIHZvaWQgZHJhd0luZGV4ZWRJbmRpcmVjdChjb25zdCBCdWZmZXImIGluZGlyZWN0QnVmZmVy
LCBTaXplNjQgaW5kaXJlY3RPZmZzZXQpIGZpbmFsOworCisgICAgdm9pZCBzZXRCaW5kR3JvdXAo
SW5kZXgzMiwgY29uc3QgQmluZEdyb3VwJiwKKyAgICAgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8
QnVmZmVyRHluYW1pY09mZnNldD4+JiYgZHluYW1pY09mZnNldHMpIGZpbmFsOworCisgICAgdm9p
ZCBzZXRCaW5kR3JvdXAoSW5kZXgzMiwgY29uc3QgQmluZEdyb3VwJiwKKyAgICAgICAgY29uc3Qg
dWludDMyX3QqIGR5bmFtaWNPZmZzZXRzQXJyYXlCdWZmZXIsCisgICAgICAgIHNpemVfdCBkeW5h
bWljT2Zmc2V0c0FycmF5QnVmZmVyTGVuZ3RoLAorICAgICAgICBTaXplNjQgZHluYW1pY09mZnNl
dHNEYXRhU3RhcnQsCisgICAgICAgIFNpemUzMiBkeW5hbWljT2Zmc2V0c0RhdGFMZW5ndGgpIGZp
bmFsOworCisgICAgdm9pZCBwdXNoRGVidWdHcm91cChTdHJpbmcmJiBncm91cExhYmVsKSBmaW5h
bDsKKyAgICB2b2lkIHBvcERlYnVnR3JvdXAoKSBmaW5hbDsKKyAgICB2b2lkIGluc2VydERlYnVn
TWFya2VyKFN0cmluZyYmIG1hcmtlckxhYmVsKSBmaW5hbDsKKworICAgIHZvaWQgc2V0Vmlld3Bv
cnQoZmxvYXQgeCwgZmxvYXQgeSwKKyAgICAgICAgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwK
KyAgICAgICAgZmxvYXQgbWluRGVwdGgsIGZsb2F0IG1heERlcHRoKSBmaW5hbDsKKworICAgIHZv
aWQgc2V0U2Npc3NvclJlY3QoSW50ZWdlckNvb3JkaW5hdGUgeCwgSW50ZWdlckNvb3JkaW5hdGUg
eSwKKyAgICAgICAgSW50ZWdlckNvb3JkaW5hdGUgd2lkdGgsIEludGVnZXJDb29yZGluYXRlIGhl
aWdodCkgZmluYWw7CisKKyAgICB2b2lkIHNldEJsZW5kQ29uc3RhbnQoQ29sb3IpIGZpbmFsOwor
ICAgIHZvaWQgc2V0U3RlbmNpbFJlZmVyZW5jZShTdGVuY2lsVmFsdWUpIGZpbmFsOworCisgICAg
dm9pZCBiZWdpbk9jY2x1c2lvblF1ZXJ5KFNpemUzMiBxdWVyeUluZGV4KSBmaW5hbDsKKyAgICB2
b2lkIGVuZE9jY2x1c2lvblF1ZXJ5KCkgZmluYWw7CisKKyAgICB2b2lkIGJlZ2luUGlwZWxpbmVT
dGF0aXN0aWNzUXVlcnkoY29uc3QgUXVlcnlTZXQmLCBTaXplMzIgcXVlcnlJbmRleCkgZmluYWw7
CisgICAgdm9pZCBlbmRQaXBlbGluZVN0YXRpc3RpY3NRdWVyeSgpIGZpbmFsOworCisgICAgdm9p
ZCBleGVjdXRlQnVuZGxlcyhWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZW5kZXJCdW5k
bGU+PiYmKSBmaW5hbDsKKyAgICB2b2lkIGVuZFBhc3MoKSBmaW5hbDsKKworICAgIHZvaWQgc2V0
TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5hbDsKKworICAgIFdHUFVSZW5kZXJQYXNz
RW5jb2RlciBtX2JhY2tpbmcgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBQQUwK
K30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJQaXBlbGluZUltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJQaXBl
bGluZUltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjMGRkM2VhMTJhODk5OWM0MmU2M2FiYjM2MjAzMmZj
M2MxN2UxNzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBo
aWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5jcHAKQEAgLTAsMCArMSw1
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVS
ZW5kZXJQaXBlbGluZUltcGwuaCIKKworI2luY2x1ZGUgIldlYkdQVUJpbmRHcm91cExheW91dElt
cGwuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVRXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgewor
bmFtZXNwYWNlIFdlYkdQVSB7CisKK1JlbmRlclBpcGVsaW5lSW1wbDo6UmVuZGVyUGlwZWxpbmVJ
bXBsKFdHUFVSZW5kZXJQaXBlbGluZSByZW5kZXJQaXBlbGluZSkKKyAgICA6IG1fYmFja2luZyhy
ZW5kZXJQaXBlbGluZSkKK3sKK30KKworUmVuZGVyUGlwZWxpbmVJbXBsOjp+UmVuZGVyUGlwZWxp
bmVJbXBsKCkKK3sKKyAgICB3Z3B1UmVuZGVyUGlwZWxpbmVSZWxlYXNlKG1fYmFja2luZyk7Cit9
CisKK1JlZjxCaW5kR3JvdXBMYXlvdXQ+IFJlbmRlclBpcGVsaW5lSW1wbDo6Z2V0QmluZEdyb3Vw
TGF5b3V0KHVpbnQzMl90IGluZGV4KQoreworICAgIHJldHVybiBCaW5kR3JvdXBMYXlvdXRJbXBs
OjpjcmVhdGUod2dwdVJlbmRlclBpcGVsaW5lR2V0QmluZEdyb3VwTGF5b3V0KG1fYmFja2luZywg
aW5kZXgpKTsKK30KKwordm9pZCBSZW5kZXJQaXBlbGluZUltcGw6OnNldExhYmVsSW50ZXJuYWwo
Y29uc3QgU3RyaW5nJiBsYWJlbCkKK3sKKyAgICB3Z3B1UmVuZGVyUGlwZWxpbmVTZXRMYWJlbCht
X2JhY2tpbmcsIGxhYmVsLnV0ZjgoKS5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwK
K30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJQaXBlbGluZUltcGwuaCBiL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVyUGlwZWxp
bmVJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOWVhZTU3YTY5ZmIxMjU3ZDM2NzIyMDVjZjc5MTk2YTlhNWEw
YmZlYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3Mv
V2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVyUGlwZWxpbmVJbXBsLmgKQEAgLTAsMCArMSw2MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVUmVuZGVyUGlwZWxp
bmUuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVLmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFt
ZXNwYWNlIFdlYkdQVSB7CisKK2NsYXNzIFJlbmRlclBpcGVsaW5lSW1wbCBmaW5hbCA6IHB1Ymxp
YyBSZW5kZXJQaXBlbGluZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZW5kZXJQaXBlbGlu
ZUltcGw+IGNyZWF0ZShXR1BVUmVuZGVyUGlwZWxpbmUgcmVuZGVyUGlwZWxpbmUpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZW5kZXJQaXBlbGluZUltcGwocmVuZGVyUGlw
ZWxpbmUpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5SZW5kZXJQaXBlbGluZUltcGwoKTsKKwor
ICAgIFdHUFVSZW5kZXJQaXBlbGluZSBiYWNraW5nKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5n
OyB9CisKK3ByaXZhdGU6CisgICAgUmVuZGVyUGlwZWxpbmVJbXBsKFdHUFVSZW5kZXJQaXBlbGlu
ZSk7CisKKyAgICBSZW5kZXJQaXBlbGluZUltcGwoY29uc3QgUmVuZGVyUGlwZWxpbmVJbXBsJikg
PSBkZWxldGU7CisgICAgUmVuZGVyUGlwZWxpbmVJbXBsKFJlbmRlclBpcGVsaW5lSW1wbCYmKSA9
IGRlbGV0ZTsKKyAgICBSZW5kZXJQaXBlbGluZUltcGwmIG9wZXJhdG9yPShjb25zdCBSZW5kZXJQ
aXBlbGluZUltcGwmKSA9IGRlbGV0ZTsKKyAgICBSZW5kZXJQaXBlbGluZUltcGwmIG9wZXJhdG9y
PShSZW5kZXJQaXBlbGluZUltcGwmJikgPSBkZWxldGU7CisKKyAgICBSZWY8QmluZEdyb3VwTGF5
b3V0PiBnZXRCaW5kR3JvdXBMYXlvdXQodWludDMyX3QgaW5kZXgpIGZpbmFsOworCisgICAgdm9p
ZCBzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYpIGZpbmFsOworCisgICAgV0dQVVJlbmRl
clBpcGVsaW5lIG1fYmFja2luZyB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFBB
TAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVNhbXBsZXJJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVU2FtcGxlckltcGwuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjkyY2FhNzNhNTdmMDAzMjhiOTI2ZmMwMWMwMDkwMmRlYzFjMDhhNGIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9J
bXBsL1dlYkdQVVNhbXBsZXJJbXBsLmNwcApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkdQVVNhbXBsZXJJbXBsLmgiCisKKyNp
bmNsdWRlIDxXZWJHUFUvV2ViR1BVRXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNl
IFdlYkdQVSB7CisKK1NhbXBsZXJJbXBsOjpTYW1wbGVySW1wbChXR1BVU2FtcGxlciBzYW1wbGVy
KQorICAgIDogbV9iYWNraW5nKHNhbXBsZXIpCit7Cit9CisKK1NhbXBsZXJJbXBsOjp+U2FtcGxl
ckltcGwoKQoreworICAgIHdncHVTYW1wbGVyUmVsZWFzZShtX2JhY2tpbmcpOworfQorCit2b2lk
IFNhbXBsZXJJbXBsOjpzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYgbGFiZWwpCit7Cisg
ICAgd2dwdVNhbXBsZXJTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVsLnV0ZjgoKS5kYXRhKCkpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVTYW1w
bGVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9X
ZWJHUFVTYW1wbGVySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ1MmRjNDcyMDg3NGY0ZjU2YmRlNGE1Zjgz
Y2MzYWJmZjVjMmJiZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVNhbXBsZXJJbXBsLmgKQEAgLTAsMCArMSw1OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVU2FtcGxlci5o
IgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFUuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3Bh
Y2UgV2ViR1BVIHsKKworY2xhc3MgU2FtcGxlckltcGwgZmluYWwgOiBwdWJsaWMgU2FtcGxlciB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTYW1wbGVySW1wbD4gY3JlYXRlKFdHUFVTYW1wbGVy
IHNhbXBsZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTYW1wbGVySW1w
bChzYW1wbGVyKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+U2FtcGxlckltcGwoKTsKKworICAg
IFdHUFVTYW1wbGVyIGJhY2tpbmcoKSBjb25zdCB7IHJldHVybiBtX2JhY2tpbmc7IH0KKworcHJp
dmF0ZToKKyAgICBTYW1wbGVySW1wbChXR1BVU2FtcGxlcik7CisKKyAgICBTYW1wbGVySW1wbChj
b25zdCBTYW1wbGVySW1wbCYpID0gZGVsZXRlOworICAgIFNhbXBsZXJJbXBsKFNhbXBsZXJJbXBs
JiYpID0gZGVsZXRlOworICAgIFNhbXBsZXJJbXBsJiBvcGVyYXRvcj0oY29uc3QgU2FtcGxlcklt
cGwmKSA9IGRlbGV0ZTsKKyAgICBTYW1wbGVySW1wbCYgb3BlcmF0b3I9KFNhbXBsZXJJbXBsJiYp
ID0gZGVsZXRlOworCisgICAgdm9pZCBzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYpIGZp
bmFsOworCisgICAgV0dQVVNhbXBsZXIgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworfTsKKworfSAv
LyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVU2hhZGVyTW9kdWxl
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dl
YkdQVVNoYWRlck1vZHVsZUltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxYjU2OTU1NDBlN2Q0ZWZlNGFk
MGNlMjE5NDEzNzk2NmQ0MmUwNWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Q
QUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVNoYWRlck1vZHVsZUltcGwuY3BwCkBA
IC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2ViR1BVU2hhZGVyTW9kdWxlSW1wbC5oIgorCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVUV4
dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitTaGFkZXJNb2R1
bGVJbXBsOjpTaGFkZXJNb2R1bGVJbXBsKFdHUFVTaGFkZXJNb2R1bGUgc2hhZGVyTW9kdWxlKQor
ICAgIDogbV9iYWNraW5nKHNoYWRlck1vZHVsZSkKK3sKK30KKworU2hhZGVyTW9kdWxlSW1wbDo6
flNoYWRlck1vZHVsZUltcGwoKQoreworICAgIHdncHVTaGFkZXJNb2R1bGVSZWxlYXNlKG1fYmFj
a2luZyk7Cit9CisKK3ZvaWQgU2hhZGVyTW9kdWxlSW1wbDo6Y29tcGlsYXRpb25JbmZvKHN0ZDo6
ZnVuY3Rpb248dm9pZChSZWY8Q29tcGlsYXRpb25JbmZvPiYmKT4mJikKK3sKK30KKwordm9pZCBT
aGFkZXJNb2R1bGVJbXBsOjpzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYgbGFiZWwpCit7
CisgICAgd2dwdVNoYWRlck1vZHVsZVNldExhYmVsKG1fYmFja2luZywgbGFiZWwudXRmOCgpLmRh
dGEoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dl
YkdQVVNoYWRlck1vZHVsZUltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3Mv
V2ViR1BVL0ltcGwvV2ViR1BVU2hhZGVyTW9kdWxlSW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFjZWYzNjM5
MWQwMmU0MGJkZGU2ZTk0ZjA5MTM5MWZhZTQxY2EzM2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVNoYWRlck1vZHVs
ZUltcGwuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJXZWJHUFVTaGFkZXJNb2R1bGUuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVLmg+
CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK2NsYXNzIFNoYWRlck1v
ZHVsZUltcGwgZmluYWwgOiBwdWJsaWMgU2hhZGVyTW9kdWxlIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUmVmPFNoYWRlck1vZHVsZUltcGw+IGNyZWF0ZShXR1BVU2hhZGVyTW9kdWxlIHNoYWRlck1v
ZHVsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNoYWRlck1vZHVsZUlt
cGwoc2hhZGVyTW9kdWxlKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+U2hhZGVyTW9kdWxlSW1w
bCgpOworCisgICAgV0dQVVNoYWRlck1vZHVsZSBiYWNraW5nKCkgY29uc3QgeyByZXR1cm4gbV9i
YWNraW5nOyB9CisKK3ByaXZhdGU6CisgICAgU2hhZGVyTW9kdWxlSW1wbChXR1BVU2hhZGVyTW9k
dWxlKTsKKworICAgIFNoYWRlck1vZHVsZUltcGwoY29uc3QgU2hhZGVyTW9kdWxlSW1wbCYpID0g
ZGVsZXRlOworICAgIFNoYWRlck1vZHVsZUltcGwoU2hhZGVyTW9kdWxlSW1wbCYmKSA9IGRlbGV0
ZTsKKyAgICBTaGFkZXJNb2R1bGVJbXBsJiBvcGVyYXRvcj0oY29uc3QgU2hhZGVyTW9kdWxlSW1w
bCYpID0gZGVsZXRlOworICAgIFNoYWRlck1vZHVsZUltcGwmIG9wZXJhdG9yPShTaGFkZXJNb2R1
bGVJbXBsJiYpID0gZGVsZXRlOworCisgICAgdm9pZCBjb21waWxhdGlvbkluZm8oc3RkOjpmdW5j
dGlvbjx2b2lkKFJlZjxDb21waWxhdGlvbkluZm8+JiYpPiYmKSBmaW5hbDsKKworICAgIHZvaWQg
c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5hbDsKKworICAgIFdHUFVTaGFkZXJN
b2R1bGUgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9
IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwv
Z3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVVGV4dHVyZUltcGwuY3BwIGIvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVUZXh0dXJlSW1wbC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYmI2ZjgyMWQ5NDNiZDY0NGI3Yjc5MDIxNjgxZjE2MDc0M2E1MDU4MQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwv
V2ViR1BVVGV4dHVyZUltcGwuY3BwCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViR1BVVGV4dHVyZUltcGwuaCIKKworI2luY2x1
ZGUgIldlYkdQVUNvbnZlcnRUb0JhY2tpbmcuaCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJlVmll
dy5oIgorI2luY2x1ZGUgIldlYkdQVVRleHR1cmVWaWV3RGVzY3JpcHRvci5oIgorI2luY2x1ZGUg
IldlYkdQVVRleHR1cmVWaWV3SW1wbC5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFVFeHQuaD4K
KworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworVGV4dHVyZUltcGw6OlRl
eHR1cmVJbXBsKFdHUFVUZXh0dXJlIHRleHR1cmUsIFRleHR1cmVGb3JtYXQgZm9ybWF0LCBUZXh0
dXJlRGltZW5zaW9uIGRpbWVuc2lvbikKKyAgICA6IG1fYmFja2luZyh0ZXh0dXJlKQorICAgICwg
bV9mb3JtYXQoZm9ybWF0KQorICAgICwgbV9kaW1lbnNpb24oZGltZW5zaW9uKQoreworfQorCitU
ZXh0dXJlSW1wbDo6flRleHR1cmVJbXBsKCkKK3sKKyAgICB3Z3B1VGV4dHVyZVJlbGVhc2UobV9i
YWNraW5nKTsKK30KKworUmVmPFRleHR1cmVWaWV3PiBUZXh0dXJlSW1wbDo6Y3JlYXRlVmlldyhj
b25zdCBzdGQ6Om9wdGlvbmFsPFRleHR1cmVWaWV3RGVzY3JpcHRvcj4mIGRlc2NyaXB0b3IpIGNv
bnN0Cit7CisgICAgQ1N0cmluZyBsYWJlbCA9IGRlc2NyaXB0b3IgPyBkZXNjcmlwdG9yLT5sYWJl
bC51dGY4KCkgOiBDU3RyaW5nKCIiKTsKKworICAgIFdHUFVUZXh0dXJlVmlld0Rlc2NyaXB0b3Ig
YmFja2luZ0Rlc2NyaXB0b3IgeworICAgICAgICBudWxscHRyLAorICAgICAgICBsYWJlbC5kYXRh
KCksCisgICAgICAgIGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci0+Zm9ybWF0ID8gY29udmVydFRv
QmFja2luZygqZGVzY3JpcHRvci0+Zm9ybWF0KSA6IGNvbnZlcnRUb0JhY2tpbmcobV9mb3JtYXQp
LAorICAgICAgICAoWyZdICgpIC0+IFdHUFVUZXh0dXJlVmlld0RpbWVuc2lvbiB7CisgICAgICAg
ICAgICBpZiAoZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLT5kaW1lbnNpb24pCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGNvbnZlcnRUb0JhY2tpbmcoKmRlc2NyaXB0b3ItPmRpbWVuc2lvbik7Cisg
ICAgICAgICAgICBzd2l0Y2ggKG1fZGltZW5zaW9uKSB7CisgICAgICAgICAgICBjYXNlIFRleHR1
cmVEaW1lbnNpb246Ol8xZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVWaWV3
RGltZW5zaW9uXzFEOworICAgICAgICAgICAgY2FzZSBUZXh0dXJlRGltZW5zaW9uOjpfMmQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlVmlld0RpbWVuc2lvbl8yRDsKKyAgICAg
ICAgICAgIGNhc2UgVGV4dHVyZURpbWVuc2lvbjo6XzNkOgorICAgICAgICAgICAgICAgIHJldHVy
biBXR1BVVGV4dHVyZVZpZXdEaW1lbnNpb25fMkQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0p
KCksCisgICAgICAgIGRlc2NyaXB0b3IgPyBkZXNjcmlwdG9yLT5iYXNlTWlwTGV2ZWwgOiAwLAor
ICAgICAgICBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3ItPm1pcExldmVsQ291bnQgPyAqZGVzY3Jp
cHRvci0+bWlwTGV2ZWxDb3VudCA6IHN0YXRpY19jYXN0PHVpbnQzMl90PihXR1BVX01JUF9MRVZF
TF9DT1VOVF9VTkRFRklORUQpLAorICAgICAgICBkZXNjcmlwdG9yID8gZGVzY3JpcHRvci0+YmFz
ZUFycmF5TGF5ZXIgOiAwLAorICAgICAgICBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3ItPmFycmF5
TGF5ZXJDb3VudCA/ICpkZXNjcmlwdG9yLT5hcnJheUxheWVyQ291bnQgOiBzdGF0aWNfY2FzdDx1
aW50MzJfdD4oV0dQVV9BUlJBWV9MQVlFUl9DT1VOVF9VTkRFRklORUQpLAorICAgICAgICBkZXNj
cmlwdG9yID8gY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLT5hc3BlY3QpIDogV0dQVVRleHR1
cmVBc3BlY3RfQWxsLAorICAgIH07CisKKyAgICByZXR1cm4gVGV4dHVyZVZpZXdJbXBsOjpjcmVh
dGUod2dwdVRleHR1cmVDcmVhdGVWaWV3KG1fYmFja2luZywgJmJhY2tpbmdEZXNjcmlwdG9yKSk7
Cit9CisKK3ZvaWQgVGV4dHVyZUltcGw6OmRlc3Ryb3koKQoreworICAgIHdncHVUZXh0dXJlRGVz
dHJveShtX2JhY2tpbmcpOworfQorCit2b2lkIFRleHR1cmVJbXBsOjpzZXRMYWJlbEludGVybmFs
KGNvbnN0IFN0cmluZyYgbGFiZWwpCit7CisgICAgd2dwdVRleHR1cmVTZXRMYWJlbChtX2JhY2tp
bmcsIGxhYmVsLnV0ZjgoKS5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8g
bmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVUZXh0dXJlSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvUEFM
L3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVUZXh0dXJlSW1wbC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmM2ZThkMGI4YzA0NzJhM2Q4ZTI2ODlmZmNiYmMzYzQyN2JlYWYxZTkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVRl
eHR1cmVJbXBsLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiV2ViR1BVSW50ZWdyYWxUeXBlcy5oIgorI2luY2x1ZGUgIldlYkdQVVRleHR1
cmUuaCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJlRGltZW5zaW9uLmgiCisjaW5jbHVkZSAiV2Vi
R1BVVGV4dHVyZUZvcm1hdC5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFUuaD4KKworbmFtZXNw
YWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworY2xhc3MgVGV4dHVyZUltcGwgZmluYWwg
OiBwdWJsaWMgVGV4dHVyZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxUZXh0dXJlSW1wbD4g
Y3JlYXRlKFdHUFVUZXh0dXJlIHRleHR1cmUsIFRleHR1cmVGb3JtYXQgZm9ybWF0LCBUZXh0dXJl
RGltZW5zaW9uIGRpbWVuc2lvbikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFRleHR1cmVJbXBsKHRleHR1cmUsIGZvcm1hdCwgZGltZW5zaW9uKSk7CisgICAgfQorCisgICAg
dmlydHVhbCB+VGV4dHVyZUltcGwoKTsKKworICAgIFdHUFVUZXh0dXJlIGJhY2tpbmcoKSBjb25z
dCB7IHJldHVybiBtX2JhY2tpbmc7IH0KKworcHJpdmF0ZToKKyAgICBUZXh0dXJlSW1wbChXR1BV
VGV4dHVyZSwgVGV4dHVyZUZvcm1hdCwgVGV4dHVyZURpbWVuc2lvbik7CisKKyAgICBUZXh0dXJl
SW1wbChjb25zdCBUZXh0dXJlSW1wbCYpID0gZGVsZXRlOworICAgIFRleHR1cmVJbXBsKFRleHR1
cmVJbXBsJiYpID0gZGVsZXRlOworICAgIFRleHR1cmVJbXBsJiBvcGVyYXRvcj0oY29uc3QgVGV4
dHVyZUltcGwmKSA9IGRlbGV0ZTsKKyAgICBUZXh0dXJlSW1wbCYgb3BlcmF0b3I9KFRleHR1cmVJ
bXBsJiYpID0gZGVsZXRlOworCisgICAgUmVmPFRleHR1cmVWaWV3PiBjcmVhdGVWaWV3KGNvbnN0
IHN0ZDo6b3B0aW9uYWw8VGV4dHVyZVZpZXdEZXNjcmlwdG9yPiYpIGNvbnN0IGZpbmFsOworCisg
ICAgdm9pZCBkZXN0cm95KCkgZmluYWw7CisKKyAgICB2b2lkIHNldExhYmVsSW50ZXJuYWwoY29u
c3QgU3RyaW5nJikgZmluYWw7CisKKyAgICBXR1BVVGV4dHVyZSBtX2JhY2tpbmcgeyBudWxscHRy
IH07CisgICAgVGV4dHVyZUZvcm1hdCBtX2Zvcm1hdCB7IFRleHR1cmVGb3JtYXQ6OlJnYmE4dW5v
cm0gfTsKKyAgICBUZXh0dXJlRGltZW5zaW9uIG1fZGltZW5zaW9uIHsgVGV4dHVyZURpbWVuc2lv
bjo6XzJkIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQ
VQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1w
bC9XZWJHUFVUZXh0dXJlVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVUZXh0dXJlVmlld0ltcGwuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg5
OTkwMjgzNzVlZjU1NDEwY2M4YTQxMTgzNjJkNWQ1NmVmYzEwNTMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVRleHR1
cmVWaWV3SW1wbC5jcHAKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJlVmlld0ltcGwuaCIKKworI2luY2x1ZGUg
PFdlYkdQVS9XZWJHUFVFeHQuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BV
IHsKKworVGV4dHVyZVZpZXdJbXBsOjpUZXh0dXJlVmlld0ltcGwoV0dQVVRleHR1cmVWaWV3IHRl
eHR1cmVWaWV3KQorICAgIDogbV9iYWNraW5nKHRleHR1cmVWaWV3KQoreworfQorCitUZXh0dXJl
Vmlld0ltcGw6On5UZXh0dXJlVmlld0ltcGwoKQoreworICAgIHdncHVUZXh0dXJlVmlld1JlbGVh
c2UobV9iYWNraW5nKTsKK30KKwordm9pZCBUZXh0dXJlVmlld0ltcGw6OnNldExhYmVsSW50ZXJu
YWwoY29uc3QgU3RyaW5nJiBsYWJlbCkKK3sKKyAgICB3Z3B1VGV4dHVyZVZpZXdTZXRMYWJlbCht
X2JhY2tpbmcsIGxhYmVsLnV0ZjgoKS5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwK
K30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVUZXh0dXJlVmlld0ltcGwuaCBiL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVVGV4dHVyZVZpZXdJbXBs
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZjU0NDdmMjY3MWYwZTA2ZTM0YzNjYmFkZjAzNjUwYjVhMjY0OWNkOQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BV
L0ltcGwvV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVVGV4dHVyZVZpZXcuaCIKKyNpbmNs
dWRlIDxXZWJHUFUvV2ViR1BVLmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQ
VSB7CisKK2NsYXNzIFRleHR1cmVWaWV3SW1wbCBmaW5hbCA6IHB1YmxpYyBUZXh0dXJlVmlldyB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxUZXh0dXJlVmlld0ltcGw+IGNyZWF0ZShXR1BVVGV4
dHVyZVZpZXcgdGV4dHVyZVZpZXcpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBUZXh0dXJlVmlld0ltcGwodGV4dHVyZVZpZXcpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5U
ZXh0dXJlVmlld0ltcGwoKTsKKworICAgIFdHUFVUZXh0dXJlVmlldyBiYWNraW5nKCkgY29uc3Qg
eyByZXR1cm4gbV9iYWNraW5nOyB9CisKK3ByaXZhdGU6CisgICAgVGV4dHVyZVZpZXdJbXBsKFdH
UFVUZXh0dXJlVmlldyk7CisKKyAgICBUZXh0dXJlVmlld0ltcGwoY29uc3QgVGV4dHVyZVZpZXdJ
bXBsJikgPSBkZWxldGU7CisgICAgVGV4dHVyZVZpZXdJbXBsKFRleHR1cmVWaWV3SW1wbCYmKSA9
IGRlbGV0ZTsKKyAgICBUZXh0dXJlVmlld0ltcGwmIG9wZXJhdG9yPShjb25zdCBUZXh0dXJlVmll
d0ltcGwmKSA9IGRlbGV0ZTsKKyAgICBUZXh0dXJlVmlld0ltcGwmIG9wZXJhdG9yPShUZXh0dXJl
Vmlld0ltcGwmJikgPSBkZWxldGU7CisKKyAgICB2b2lkIHNldExhYmVsSW50ZXJuYWwoY29uc3Qg
U3RyaW5nJikgZmluYWw7CisKKyAgICBXR1BVVGV4dHVyZVZpZXcgbV9iYWNraW5nIHsgbnVsbHB0
ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCA5OTgxMGViODIwM2NjZGE2YjVjOWUzODE2MTRiNjJiZTZlZjJhMWNjLi5jNGI4MDBjZTMwZDI5
NDNjNWQ4NGNjMmIzNzM3NjlmODQ0ODM5NjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MjMsNiArNjIzLDcgQEAKIAkJMUMw
QUExNkQyMTk0MERDODAwODk2ODI5IC8qIFN0eWxlQ29sb3JTY2hlbWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMEFBMTZBMjE5NDBEQzcwMDg5Njgy
OSAvKiBTdHlsZUNvbG9yU2NoZW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMUMxMkFDMkIxRUU3NzhBRTAwNzlFMEEwIC8qIEZvbnRGYW1pbHlT
cGVjaWZpY2F0aW9uQ29yZVRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFDMTJBQzI5MUVFNzc4QUUwMDc5RTBBMCAvKiBGb250RmFtaWx5U3BlY2lm
aWNhdGlvbkNvcmVUZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMUMxOERBNTkxODFBRjZBNTAwQzRFRjIyIC8qIFRleHRQYWludGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE4REE1NzE4MUFG
NkE1MDBDNEVGMjIgLyogVGV4dFBhaW50ZXIuaCAqLzsgfTsKKwkJMUMxOUU2QzUyNzQwNjZDQzAw
NEIxN0IwIC8qIFdlYkdQVS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5RTZDMzI3NDA2NkNDMDA0QjE3QjAgLyogV2ViR1BVLmZy
YW1ld29yayAqLzsgfTsKIAkJMUMyMUU1N0QxODNFRDFGRjAwMUMyODlEIC8qIElPU3VyZmFjZVBv
b2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMjFF
NTdCMTgzRUQxRkYwMDFDMjg5RCAvKiBJT1N1cmZhY2VQb29sLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUMyNEVFQTUxQzcyOUNFNDAwODBGOEZD
IC8qIEZvbnRGYWNlU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQzI0RUVBMzFDNzI5Q0U0MDA4MEY4RkMgLyogRm9udEZhY2VTZXQuaCAqLzsgfTsK
IAkJMUMyNEVFQTkxQzcyQTdCNDAwODBGOEZDIC8qIEpTRm9udEZhY2VTZXQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMjRFRUE3MUM3MkE3QjQwMDgw
RjhGQyAvKiBKU0ZvbnRGYWNlU2V0LmggKi87IH07CkBAIC03MDMyLDYgKzcwMzMsNyBAQAogCQkx
QzEyQUMyQzFFRTc3OTk1MDA3OUUwQTAgLyogRm9udERlc2NyaXB0aW9uQ29jb2EuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRm9udERlc2NyaXB0aW9uQ29jb2EuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxQzE4REE1NjE4MUFGNkE1MDBDNEVGMjIgLyogVGV4dFBhaW50ZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dFBhaW50ZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzE4REE1NzE4MUFGNkE1MDBDNEVGMjIgLyog
VGV4dFBhaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFBhaW50
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2QzMyNzQwNjZDQzAwNEIx
N0IwIC8qIFdlYkdQVS5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IFdlYkdQVS5mcmFtZXdv
cms7IHBhdGggPSBXZWJHUFUuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNf
RElSOyB9OwogCQkxQzIxRTU3QTE4M0VEMUZGMDAxQzI4OUQgLyogSU9TdXJmYWNlUG9vbC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJT1N1cmZhY2VQb29sLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUMyMUU1N0IxODNFRDFGRjAwMUMyODlEIC8q
IElPU3VyZmFjZVBvb2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSU9TdXJm
YWNlUG9vbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzI0RUVBMTFDNzI5QjMy
MDA4MEY4RkMgLyogRm9udEZhY2VTZXQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEZvbnRG
YWNlU2V0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3NzYyLDYgKzE3NzY0
LDcgQEAKIAkJCQkzNzk5MTlCMjEyMDBERTUwMDBFQTA0MUMgLyogbGliei5keWxpYiBpbiBGcmFt
ZXdvcmtzICovLAogCQkJCUE4OEFENTJGMDk1MjRCOTIwMDFERDE5NiAvKiBRdWFydHpDb3JlLmZy
YW1ld29yayBpbiBGcmFtZXdvcmtzICovLAogCQkJCTVGRTFEMjkyMTc4RkQxRjMwMDFBQTNDMyAv
KiBTZWN1cml0eS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQkxQzE5RTZDNTI3NDA2
NkNDMDA0QjE3QjAgLyogV2ViR1BVLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTg0
MTUsNiArMTg0MTgsNyBAQAogCQkJCTU3NEY1NUUyMjA0RjNDQkYwMDI5NDhDNiAvKiBMb2NhbEF1
dGhlbnRpY2F0aW9uLmZyYW1ld29yayAqLywKIAkJCQlBODVEN0EyRjA4NzlFQkE5MDA2QTkxNzIg
LyogUXVhcnR6Q29yZS5mcmFtZXdvcmsgKi8sCiAJCQkJNUZFMUQyOTExNzhGRDFGMzAwMUFBM0Mz
IC8qIFNlY3VyaXR5LmZyYW1ld29yayAqLywKKwkJCQkxQzE5RTZDMzI3NDA2NkNDMDA0QjE3QjAg
LyogV2ViR1BVLmZyYW1ld29yayAqLywKIAkJCSk7CiAJCQluYW1lID0gRnJhbWV3b3JrczsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Cg==
</data>
<flag name="commit-queue"
          id="469151"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444192</attachid>
            <date>2021-11-14 13:16:49 -0800</date>
            <delta_ts>2021-11-15 00:59:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233106-20211114131648.patch</filename>
            <type>text/plain</type>
            <size>254396</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1NzkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzkwM2U0ZmVhYjQzYjAx
OTY2ZmQyOWJhN2E4NGQ3MzBjNmU3OGY0Zi4uYzc0ZmJlMWM0OWIwYzBkMmMyNTNjZTE2NzM5MTM1
NWY0MWM3YTljMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIxLTExLTE0ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkdQVV0g
W0NvY29hXSBDb25uZWN0IFdlYkNvcmUgJiBQQUwgdG8gV2ViR1BVLmZyYW1ld29yaworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzMTA2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGluayB3aXRoIFdlYkdQ
VS5mcmFtZXdvcmsuIFRoaXMgY2FuJ3QgYmUgbGFuZGVkIHlldCwgYmVjYXVzZSB3ZSBoYXZlbid0
IGZpbmlzaGVkCisgICAgICAgIGNvbmZpZ3VyaW5nIEFwcGxlJ3MgaW50ZXJuYWwgYnVpbGQgc3lz
dGVtIHlldC4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGVyZSBpcyBubyBiZWhh
dmlvciBjaGFuZ2UgKHlldCkuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisKIDIwMjEtMTEtMTQgIFRpbSBOZ3V5ZW4gIDxudGltQGFwcGxlLmNvbT4KIAog
ICAgICAgICBNb2RhbCBkaWFsb2dzIHNob3VsZCBtYWtlIHRoZSByb290IGVsZW1lbnQgdW5mb2N1
c2FibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvQ2hhbmdlTG9nCmluZGV4IDAyYTYyMmI3MjM2NTczZTAwYmE4Y2RhNTFiNDhj
ZjRmYjA2NzYyOWIuLmY1Yjk5MWVjNjVjZjcxYWE1OThjM2FlNDUzNGJkNmVkY2NkZmM3N2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvUEFML0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2NCBAQAorMjAyMS0xMS0xNCAgTXlsZXMgQy4g
TWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtXZWJHUFVdIFtDb2Nv
YV0gQ29ubmVjdCBXZWJDb3JlICYgUEFMIHRvIFdlYkdQVS5mcmFtZXdvcmsKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzEwNgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWRkcyBhbiBpbXBsZW1l
bnRhdGlvbiBvZiBXZWJHUFUncyB2aXJ0dWFsIGludGVyZmFjZXMgb24gdG9wIG9mIFdlYkdQVS5m
cmFtZXdvcmsuCisgICAgICAgIFRoYXQgZnJhbWV3b3JrJ3MgaGVhZGVycyBhbG1vc3QgZXhhY3Rs
eSBtYXRjaCB0aGUgV2ViR1BVIEFQSSwgc28gdGhlIGNvbm5lY3Rpb25zIGFyZQorICAgICAgICBt
b3N0bHkgbWVjaGFuaWNhbC4gVGhlcmUncyBqdXN0IGEgYnVuY2ggb2YgbWFyc2hhbGxpbmcgY29k
ZSB0byBjb252ZXJ0IGJldHdlZW4KKyAgICAgICAgZGVzY3JpcHRvciBhbmQgc3RydWN0cyBmcm9t
IFdlYkNvcmUncyBpbnRlcmZhY2UgdG8gV2ViR1BVLmZyYW1ld29yaydzCisgICAgICAgIGRlc2Ny
aXB0b3JzL3N0cnVjdHMuCisKKyAgICAgICAgVGhpcyB1c2VzIHRoZSBzYW1lICJjb252ZXJ0VG9C
YWNraW5nIiBjb252ZW50aW9uLCB3aGVyZSBmdW5jdGlvbnMgdGhhdCBjb252ZXJ0IGZyb20gdGhl
CisgICAgICAgIGhpZ2hlci1sZXZlbCBXZWJDb3JlIHR5cGVzIHRvIHRoZSBsb3dlci1sZXZlbCBX
ZWJHUFUuZnJhbWV3b3JrIHR5cGVzIGFyZSBuYW1lZAorICAgICAgICAiY29udmVydFRvQmFja2lu
ZygpIi4gVW5mb3J0dW5hdGVseSwgdGhlIFdlYkdQVSBBUEkgdGFrZXMgbWFueSBvZiB0aGVzZSBz
dHJ1Y3RzIGJ5CisgICAgICAgIG5vbi1jb25zdCByZWZlcmVuY2UsIGFuZCB0aGUgc3RydWN0cyBh
cmUgbmVzdGVkIGJ5IG5vbi1jb25zdCByZWZlcmVuY2UsIHdoaWNoIG1lYW5zIEkKKyAgICAgICAg
Y2FuJ3QganVzdCBoYXZlIHNpbXBsZSAxLWluLTEtb3V0IGNvbnZlcnRlciBmdW5jdGlvbnMgZm9y
IGV2ZXJ5IHN0cnVjdCwgc2luY2UgdGhlCisgICAgICAgIGlubmVyIHN0cnVjdHMgaGF2ZSB0byBi
ZSByZWZlcmVuY2VkIGJ5LXJlZmVyZW5jZSBhbmQgdGhlcmVmb3JlIGhhdmUgdG8gYmUgaW4tc2Nv
cGUuIFRoaXMKKyAgICAgICAgbWVhbnMgdGhhdCB0aGUgc2ltcGxlIGVudW0gYW5kIGZsYWdzIHR5
cGVzIHVzZSBjb252ZXJ0VG9CYWNraW5nKCksIGJ1dCBtb3N0IG9mIHRoZQorICAgICAgICBzdHJ1
Y3RzIGhhdmUgdG8gYmUgY29udmVydGVkIGF0IHRoZWlyIHVzZSBzaXRlLiBMdWNraWx5LCBhbG1v
c3QgYWxsIG9mIHRoZXNlIHN0cnVjdHMKKyAgICAgICAgb25seSBoYXZlIGEgc2luZ2xlIHVzZSBz
aXRlLCBzbyB0aGVyZSBpc24ndCBtdWNoIGR1cGxpY2F0aW9uLgorCisgICAgICAgIEZvciBub3cs
IHRoaXMgaW1wbGVtZW50YXRpb24gaXMgQ29jb2Etb25seSwgYmVjYXVzZSBpbiBvcmRlciBmb3Ig
dGhlc2UgY2FsbHMgdG8KKyAgICAgICAgV2ViR1BVLmZyYW1ld29yayB0byBiZSBsZWdhbCwgV2Vi
Q29yZSBoYXMgdG8gbGluayB3aXRoIGFuIGltcGxlbWVudGF0aW9uIG9mIHRob3NlCisgICAgICAg
IGZ1bmN0aW9ucy4gVGhlIENvY29hIHBvcnRzIGFyZSB0aGUgb25seSBvbmVzIHdoaWNoIGFjdHVh
bGx5IGhhdmUgYW4gaW1wbGVtZW50YXRpb24gb2YKKyAgICAgICAgdGhvc2UgZnVuY3Rpb25zLCBz
byB0aG9zZSBhcmUgdGhlIG9ubHkgcG9ydHMgd2hpY2ggY2FuIGFjdHVhbGx5IGNvbXBpbGUgdGhp
cyBjb2RlLiBJZgorICAgICAgICB0aGUgb3RoZXIgcG9ydHMgd2FudCB0byBsaW5rIHdpdGggRGF3
biBvciBXR1BVLCB0aGlzIGNvZGUgc2hvdWxkIGJlIChtb3N0bHkpIHVzYWJsZQorICAgICAgICBv
dXQtb2YtdGhlLWJveCBmb3IgdGhlbS4gSSBzYXkgIm1vc3RseSIgYmVjYXVzZSB0aGUgaGVhZGVy
IHRoYXQncyBzaGFyZWQgYmV0d2VlbiBEYXduLAorICAgICAgICBXR1BVLCBhbmQgV2ViR1BVLmZy
YW1ld29yayBpc24ndCBmaW5hbGl6ZWQgeWV0LiBBcyBzdWNoLCB0aGlzIGltcGxlbWVudGF0aW9u
IHJlbGllcyBvbgorICAgICAgICBmdW5jdGlvbnMgZnJvbSBXZWJHUFVFeHQuaCwgd2hpY2ggaXMg
YW4gYWRkaXRpb25hbCBoZWFkZXIgKHRoYXQgb25seSBleGlzdHMgaW4KKyAgICAgICAgV2ViR1BV
LmZyYW1ld29yaykgdGhhdCBhZGRzIHRoZSBtaXNzaW5nIHBpZWNlcy4KKworICAgICAgICAqIFBB
TC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJH
UFUvSW1wbC9XZWJHUFVBZGFwdGVySW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoUEFMOjpXZWJH
UFU6OmFkYXB0ZXJOYW1lKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpzdXBwb3J0ZWRGZWF0dXJl
cyk6CisgICAgICAgIChQQUw6OldlYkdQVTo6c3VwcG9ydGVkTGltaXRzKToKKyAgICAgICAgKFBB
TDo6V2ViR1BVOjppc0ZhbGxiYWNrQWRhcHRlcik6CisgICAgICAgIChQQUw6OldlYkdQVTo6QWRh
cHRlckltcGw6OkFkYXB0ZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpBZGFwdGVySW1w
bDo6fkFkYXB0ZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpyZXF1ZXN0RGV2aWNlQ2Fs
bGJhY2spOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkFkYXB0ZXJJbXBsOjpyZXF1ZXN0RGV2aWNl
KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpBZGFwdGVySW1wbDo6cmVxdWVzdERldmljZUNhbGxi
YWNrKToKKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQWRhcHRlcklt
cGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJp
bmRHcm91cEltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBBTDo6V2ViR1BVOjpCaW5kR3JvdXBJ
bXBsOjpCaW5kR3JvdXBJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpCaW5kR3JvdXBJbXBs
Ojp+QmluZEdyb3VwSW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6QmluZEdyb3VwSW1wbDo6
c2V0TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dl
YkdQVUJpbmRHcm91cEltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQ
VS9JbXBsL1dlYkdQVUJpbmRHcm91cExheW91dEltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBB
TDo6V2ViR1BVOjpCaW5kR3JvdXBMYXlvdXRJbXBsOjpCaW5kR3JvdXBMYXlvdXRJbXBsKToKKyAg
ICAgICAgKFBBTDo6V2ViR1BVOjpCaW5kR3JvdXBMYXlvdXRJbXBsOjp+QmluZEdyb3VwTGF5b3V0
SW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6QmluZEdyb3VwTGF5b3V0SW1wbDo6c2V0TGFi
ZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJp
bmRHcm91cExheW91dEltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQ
VS9JbXBsL1dlYkdQVUJ1ZmZlckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBBTDo6V2ViR1BV
OjpCdWZmZXJJbXBsOjpCdWZmZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpCdWZmZXJJ
bXBsOjp+QnVmZmVySW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6bWFwQ2FsbGJhY2spOgor
ICAgICAgICAoUEFMOjpXZWJHUFU6OkJ1ZmZlckltcGw6Om1hcEFzeW5jKToKKyAgICAgICAgKFBB
TDo6V2ViR1BVOjpCdWZmZXJJbXBsOjptYXBDYWxsYmFjayk6CisgICAgICAgIChQQUw6OldlYkdQ
VTo6QnVmZmVySW1wbDo6Z2V0TWFwcGVkUmFuZ2UpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkJ1
ZmZlckltcGw6OnVubWFwKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpCdWZmZXJJbXBsOjpkZXN0
cm95KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpCdWZmZXJJbXBsOjpzZXRMYWJlbEludGVybmFs
KToKKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQnVmZmVySW1wbC5o
OiBBZGRlZC4KKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tbWFu
ZEJ1ZmZlckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21tYW5kQnVm
ZmVySW1wbDo6Q29tbWFuZEJ1ZmZlckltcGwpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbW1h
bmRCdWZmZXJJbXBsOjp+Q29tbWFuZEJ1ZmZlckltcGwpOgorICAgICAgICAoUEFMOjpXZWJHUFU6
OkNvbW1hbmRCdWZmZXJJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAgICAgICAgKiBwYWwvZ3Jh
cGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwuaDogQWRkZWQuCisgICAg
ICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbW1hbmRFbmNvZGVySW1wbC5j
cHA6IEFkZGVkLgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbW1hbmRFbmNvZGVySW1wbDo6Q29t
bWFuZEVuY29kZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21tYW5kRW5jb2Rlcklt
cGw6On5Db21tYW5kRW5jb2RlckltcGwpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbW1hbmRF
bmNvZGVySW1wbDo6YmVnaW5SZW5kZXJQYXNzKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21t
YW5kRW5jb2RlckltcGw6OmJlZ2luQ29tcHV0ZVBhc3MpOgorICAgICAgICAoUEFMOjpXZWJHUFU6
OkNvbW1hbmRFbmNvZGVySW1wbDo6Y29weUJ1ZmZlclRvQnVmZmVyKToKKyAgICAgICAgKFBBTDo6
V2ViR1BVOjpDb21tYW5kRW5jb2RlckltcGw6OmNvcHlCdWZmZXJUb1RleHR1cmUpOgorICAgICAg
ICAoUEFMOjpXZWJHUFU6OkNvbW1hbmRFbmNvZGVySW1wbDo6Y29weVRleHR1cmVUb0J1ZmZlcik6
CisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tbWFuZEVuY29kZXJJbXBsOjpjb3B5VGV4dHVyZVRv
VGV4dHVyZSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tbWFuZEVuY29kZXJJbXBsOjpmaWxs
QnVmZmVyKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21tYW5kRW5jb2RlckltcGw6OnB1c2hE
ZWJ1Z0dyb3VwKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21tYW5kRW5jb2RlckltcGw6OnBv
cERlYnVnR3JvdXApOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbW1hbmRFbmNvZGVySW1wbDo6
aW5zZXJ0RGVidWdNYXJrZXIpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbW1hbmRFbmNvZGVy
SW1wbDo6d3JpdGVUaW1lc3RhbXApOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbW1hbmRFbmNv
ZGVySW1wbDo6cmVzb2x2ZVF1ZXJ5U2V0KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21tYW5k
RW5jb2RlckltcGw6OmZpbmlzaCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tbWFuZEVuY29k
ZXJJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BV
L0ltcGwvV2ViR1BVQ29tbWFuZEVuY29kZXJJbXBsLmg6IEFkZGVkLgorICAgICAgICAqIHBhbC9n
cmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb21wdXRlUGFzc0VuY29kZXJJbXBsLmNwcDogQWRk
ZWQuCisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6Q29tcHV0
ZVBhc3NFbmNvZGVySW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tcHV0ZVBhc3NFbmNv
ZGVySW1wbDo6fkNvbXB1dGVQYXNzRW5jb2RlckltcGwpOgorICAgICAgICAoUEFMOjpXZWJHUFU6
OkNvbXB1dGVQYXNzRW5jb2RlckltcGw6OnNldFBpcGVsaW5lKToKKyAgICAgICAgKFBBTDo6V2Vi
R1BVOjpDb21wdXRlUGFzc0VuY29kZXJJbXBsOjpkaXNwYXRjaCk6CisgICAgICAgIChQQUw6Oldl
YkdQVTo6Q29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6ZGlzcGF0Y2hJbmRpcmVjdCk6CisgICAgICAg
IChQQUw6OldlYkdQVTo6Q29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6YmVnaW5QaXBlbGluZVN0YXRp
c3RpY3NRdWVyeSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tcHV0ZVBhc3NFbmNvZGVySW1w
bDo6ZW5kUGlwZWxpbmVTdGF0aXN0aWNzUXVlcnkpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNv
bXB1dGVQYXNzRW5jb2RlckltcGw6OmVuZFBhc3MpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNv
bXB1dGVQYXNzRW5jb2RlckltcGw6OnNldEJpbmRHcm91cCk6CisgICAgICAgIChQQUw6OldlYkdQ
VTo6Q29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6cHVzaERlYnVnR3JvdXApOgorICAgICAgICAoUEFM
OjpXZWJHUFU6OkNvbXB1dGVQYXNzRW5jb2RlckltcGw6OnBvcERlYnVnR3JvdXApOgorICAgICAg
ICAoUEFMOjpXZWJHUFU6OkNvbXB1dGVQYXNzRW5jb2RlckltcGw6Omluc2VydERlYnVnTWFya2Vy
KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21wdXRlUGFzc0VuY29kZXJJbXBsOjpzZXRMYWJl
bEludGVybmFsKToKKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29t
cHV0ZVBhc3NFbmNvZGVySW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2Vi
R1BVL0ltcGwvV2ViR1BVQ29tcHV0ZVBpcGVsaW5lSW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAo
UEFMOjpXZWJHUFU6OkNvbXB1dGVQaXBlbGluZUltcGw6OkNvbXB1dGVQaXBlbGluZUltcGwpOgor
ICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbXB1dGVQaXBlbGluZUltcGw6On5Db21wdXRlUGlwZWxp
bmVJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21wdXRlUGlwZWxpbmVJbXBsOjpnZXRC
aW5kR3JvdXBMYXlvdXQpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbXB1dGVQaXBlbGluZUlt
cGw6OnNldExhYmVsSW50ZXJuYWwpOgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1w
bC9XZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBsLmg6IEFkZGVkLgorICAgICAgICAqIHBhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb252ZXJ0VG9CYWNraW5nLmNwcDogQWRkZWQuCisgICAg
ICAgIChQQUw6OldlYkdQVTo6Y29udmVydFRvQmFja2luZyk6CisgICAgICAgIChQQUw6OldlYkdQ
VTo6Y29udmVydEJ1ZmZlclVzYWdlRmxhZ3NUb0JhY2tpbmcpOgorICAgICAgICAoUEFMOjpXZWJH
UFU6OmNvbnZlcnRDb2xvcldyaXRlRmxhZ3NUb0JhY2tpbmcpOgorICAgICAgICAoUEFMOjpXZWJH
UFU6OmNvbnZlcnRNYXBNb2RlRmxhZ3NUb0JhY2tpbmcpOgorICAgICAgICAoUEFMOjpXZWJHUFU6
OmNvbnZlcnRTaGFkZXJTdGFnZUZsYWdzVG9CYWNraW5nKToKKyAgICAgICAgKFBBTDo6V2ViR1BV
Ojpjb252ZXJ0VGV4dHVyZVVzYWdlRmxhZ3NUb0JhY2tpbmcpOgorICAgICAgICAqIHBhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb252ZXJ0VG9CYWNraW5nLmg6IEFkZGVkLgorICAgICAg
ICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVEZXZpY2VJbXBsLmNwcDogQWRkZWQu
CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6RGV2aWNlSW1wbCk6CisgICAgICAg
IChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6fkRldmljZUltcGwpOgorICAgICAgICAoUEFMOjpX
ZWJHUFU6OkRldmljZUltcGw6OmRlc3Ryb3kpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmlj
ZUltcGw6OmNyZWF0ZUJ1ZmZlcik6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6
Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6Y3JlYXRl
U2FtcGxlcik6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6aW1wb3J0RXh0ZXJu
YWxUZXh0dXJlKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpEZXZpY2VJbXBsOjpjcmVhdGVCaW5k
R3JvdXBMYXlvdXQpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmljZUltcGw6OmNyZWF0ZVBp
cGVsaW5lTGF5b3V0KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpEZXZpY2VJbXBsOjpjcmVhdGVC
aW5kR3JvdXApOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmljZUltcGw6OmNyZWF0ZVNoYWRl
ck1vZHVsZSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6Y29udmVydFRvQmFja2luZyk6CisgICAg
ICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6Y3JlYXRlQ29tcHV0ZVBpcGVsaW5lKToKKyAg
ICAgICAgKFBBTDo6V2ViR1BVOjpEZXZpY2VJbXBsOjpjcmVhdGVSZW5kZXJQaXBlbGluZSk6Cisg
ICAgICAgIChQQUw6OldlYkdQVTo6Y3JlYXRlQ29tcHV0ZVBpcGVsaW5lQXN5bmNDYWxsYmFjayk6
CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6Y3JlYXRlQ29tcHV0ZVBpcGVsaW5l
QXN5bmMpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmljZUltcGw6OmNyZWF0ZUNvbXB1dGVQ
aXBlbGluZUFzeW5jQ2FsbGJhY2spOgorICAgICAgICAoUEFMOjpXZWJHUFU6OmNyZWF0ZVJlbmRl
clBpcGVsaW5lQXN5bmNDYWxsYmFjayk6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1w
bDo6Y3JlYXRlUmVuZGVyUGlwZWxpbmVBc3luYyk6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2
aWNlSW1wbDo6Y3JlYXRlUmVuZGVyUGlwZWxpbmVBc3luY0NhbGxiYWNrKToKKyAgICAgICAgKFBB
TDo6V2ViR1BVOjpEZXZpY2VJbXBsOjpjcmVhdGVDb21tYW5kRW5jb2Rlcik6CisgICAgICAgIChQ
QUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6Y3JlYXRlUmVuZGVyQnVuZGxlRW5jb2Rlcik6CisgICAg
ICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6Y3JlYXRlUXVlcnlTZXQpOgorICAgICAgICAo
UEFMOjpXZWJHUFU6OkRldmljZUltcGw6OnB1c2hFcnJvclNjb3BlKToKKyAgICAgICAgKFBBTDo6
V2ViR1BVOjpwb3BFcnJvclNjb3BlQ2FsbGJhY2spOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkRl
dmljZUltcGw6OnBvcEVycm9yU2NvcGUpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmljZUlt
cGw6OnBvcEVycm9yU2NvcGVDYWxsYmFjayk6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNl
SW1wbDo6c2V0TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9J
bXBsL1dlYkdQVURldmljZUltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dl
YkdQVS9JbXBsL1dlYkdQVUV4dGVybmFsVGV4dHVyZUltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFBBTDo6V2ViR1BVOjpFeHRlcm5hbFRleHR1cmVJbXBsOjpFeHRlcm5hbFRleHR1cmVJbXBsKToK
KyAgICAgICAgKFBBTDo6V2ViR1BVOjpFeHRlcm5hbFRleHR1cmVJbXBsOjp+RXh0ZXJuYWxUZXh0
dXJlSW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6RXh0ZXJuYWxUZXh0dXJlSW1wbDo6c2V0
TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQ
VUV4dGVybmFsVGV4dHVyZUltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dl
YkdQVS9JbXBsL1dlYkdQVUltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBBTDo6V2ViR1BVOjpH
UFVJbXBsOjpHUFVJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpHUFVJbXBsOjp+R1BVSW1w
bCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6cmVxdWVzdEFkYXB0ZXJDYWxsYmFjayk6CisgICAg
ICAgIChQQUw6OldlYkdQVTo6R1BVSW1wbDo6cmVxdWVzdEFkYXB0ZXIpOgorICAgICAgICAoUEFM
OjpXZWJHUFU6OkdQVUltcGw6OnJlcXVlc3RBZGFwdGVyQ2FsbGJhY2spOgorICAgICAgICAqIHBh
bC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVJbXBsLmg6IEFkZGVkLgorICAgICAgICAqIHBh
bC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVQaXBlbGluZUxheW91dEltcGwuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFBBTDo6V2ViR1BVOjpQaXBlbGluZUxheW91dEltcGw6OlBpcGVsaW5lTGF5
b3V0SW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UGlwZWxpbmVMYXlvdXRJbXBsOjp+UGlw
ZWxpbmVMYXlvdXRJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpQaXBlbGluZUxheW91dElt
cGw6OnNldExhYmVsSW50ZXJuYWwpOgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1w
bC9XZWJHUFVQaXBlbGluZUxheW91dEltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBo
aWNzL1dlYkdQVS9JbXBsL1dlYkdQVVF1ZXJ5U2V0SW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAo
UEFMOjpXZWJHUFU6OlF1ZXJ5U2V0SW1wbDo6UXVlcnlTZXRJbXBsKToKKyAgICAgICAgKFBBTDo6
V2ViR1BVOjpRdWVyeVNldEltcGw6On5RdWVyeVNldEltcGwpOgorICAgICAgICAoUEFMOjpXZWJH
UFU6OlF1ZXJ5U2V0SW1wbDo6ZGVzdHJveSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UXVlcnlT
ZXRJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BV
L0ltcGwvV2ViR1BVUXVlcnlTZXRJbXBsLmg6IEFkZGVkLgorICAgICAgICAqIHBhbC9ncmFwaGlj
cy9XZWJHUFUvSW1wbC9XZWJHUFVRdWV1ZUltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBBTDo6
V2ViR1BVOjpRdWV1ZUltcGw6OlF1ZXVlSW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UXVl
dWVJbXBsOjp+UXVldWVJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpRdWV1ZUltcGw6OnN1
Ym1pdCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6b25TdWJtaXR0ZWRXb3JrRG9uZUNhbGxiYWNr
KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpRdWV1ZUltcGw6Om9uU3VibWl0dGVkV29ya0RvbmUp
OgorICAgICAgICAoUEFMOjpXZWJHUFU6OlF1ZXVlSW1wbDo6b25TdWJtaXR0ZWRXb3JrRG9uZUNh
bGxiYWNrKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpRdWV1ZUltcGw6OndyaXRlQnVmZmVyKToK
KyAgICAgICAgKFBBTDo6V2ViR1BVOjpRdWV1ZUltcGw6OndyaXRlVGV4dHVyZSk6CisgICAgICAg
IChQQUw6OldlYkdQVTo6UXVldWVJbXBsOjpjb3B5RXh0ZXJuYWxJbWFnZVRvVGV4dHVyZSk6Cisg
ICAgICAgIChQQUw6OldlYkdQVTo6UXVldWVJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAgICAg
ICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUXVldWVJbXBsLmg6IEFkZGVkLgor
ICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJCdW5kbGVFbmNv
ZGVySW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlckJ1bmRsZUVu
Y29kZXJJbXBsOjpSZW5kZXJCdW5kbGVFbmNvZGVySW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQ
VTo6UmVuZGVyQnVuZGxlRW5jb2RlckltcGw6On5SZW5kZXJCdW5kbGVFbmNvZGVySW1wbCk6Cisg
ICAgICAgIChQQUw6OldlYkdQVTo6UmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OnNldFBpcGVsaW5l
KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6c2V0SW5k
ZXhCdWZmZXIpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlckJ1bmRsZUVuY29kZXJJbXBs
OjpzZXRWZXJ0ZXhCdWZmZXIpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlckJ1bmRsZUVu
Y29kZXJJbXBsOjpkcmF3KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVFbmNv
ZGVySW1wbDo6ZHJhd0luZGV4ZWQpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlckJ1bmRs
ZUVuY29kZXJJbXBsOjpkcmF3SW5kaXJlY3QpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRl
ckJ1bmRsZUVuY29kZXJJbXBsOjpkcmF3SW5kZXhlZEluZGlyZWN0KToKKyAgICAgICAgKFBBTDo6
V2ViR1BVOjpSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6c2V0QmluZEdyb3VwKToKKyAgICAgICAg
KFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6cHVzaERlYnVnR3JvdXApOgor
ICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlckJ1bmRsZUVuY29kZXJJbXBsOjpwb3BEZWJ1Z0dy
b3VwKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6aW5z
ZXJ0RGVidWdNYXJrZXIpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlckJ1bmRsZUVuY29k
ZXJJbXBsOjpmaW5pc2gpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlckJ1bmRsZUVuY29k
ZXJJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BV
L0ltcGwvV2ViR1BVUmVuZGVyQnVuZGxlRW5jb2RlckltcGwuaDogQWRkZWQuCisgICAgICAgICog
cGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlckJ1bmRsZUltcGwuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVJbXBsOjpSZW5kZXJCdW5kbGVJ
bXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVJbXBsOjp+UmVuZGVyQnVu
ZGxlSW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UmVuZGVyQnVuZGxlSW1wbDo6c2V0TGFi
ZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJl
bmRlckJ1bmRsZUltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9J
bXBsL1dlYkdQVVJlbmRlclBhc3NFbmNvZGVySW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoUEFM
OjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6UmVuZGVyUGFzc0VuY29kZXJJbXBsKToK
KyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6On5SZW5kZXJQYXNz
RW5jb2RlckltcGwpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1w
bDo6c2V0UGlwZWxpbmUpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVy
SW1wbDo6c2V0SW5kZXhCdWZmZXIpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NF
bmNvZGVySW1wbDo6c2V0VmVydGV4QnVmZmVyKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5k
ZXJQYXNzRW5jb2RlckltcGw6OmRyYXcpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBh
c3NFbmNvZGVySW1wbDo6ZHJhd0luZGV4ZWQpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRl
clBhc3NFbmNvZGVySW1wbDo6ZHJhd0luZGlyZWN0KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpS
ZW5kZXJQYXNzRW5jb2RlckltcGw6OmRyYXdJbmRleGVkSW5kaXJlY3QpOgorICAgICAgICAoUEFM
OjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6c2V0QmluZEdyb3VwKToKKyAgICAgICAg
KFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6OnB1c2hEZWJ1Z0dyb3VwKToKKyAg
ICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6OnBvcERlYnVnR3JvdXAp
OgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6aW5zZXJ0RGVi
dWdNYXJrZXIpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6
c2V0Vmlld3BvcnQpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1w
bDo6c2V0U2Npc3NvclJlY3QpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNv
ZGVySW1wbDo6c2V0QmxlbmRDb25zdGFudCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UmVuZGVy
UGFzc0VuY29kZXJJbXBsOjpzZXRTdGVuY2lsUmVmZXJlbmNlKToKKyAgICAgICAgKFBBTDo6V2Vi
R1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6OmJlZ2luT2NjbHVzaW9uUXVlcnkpOgorICAgICAg
ICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6ZW5kT2NjbHVzaW9uUXVlcnkp
OgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6YmVnaW5QaXBl
bGluZVN0YXRpc3RpY3NRdWVyeSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UmVuZGVyUGFzc0Vu
Y29kZXJJbXBsOjplbmRQaXBlbGluZVN0YXRpc3RpY3NRdWVyeSk6CisgICAgICAgIChQQUw6Oldl
YkdQVTo6UmVuZGVyUGFzc0VuY29kZXJJbXBsOjpleGVjdXRlQnVuZGxlcyk6CisgICAgICAgIChQ
QUw6OldlYkdQVTo6UmVuZGVyUGFzc0VuY29kZXJJbXBsOjplbmRQYXNzKToKKyAgICAgICAgKFBB
TDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6OnNldExhYmVsSW50ZXJuYWwpOgorICAg
ICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJQYXNzRW5jb2Rlcklt
cGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJl
bmRlclBpcGVsaW5lSW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRl
clBpcGVsaW5lSW1wbDo6UmVuZGVyUGlwZWxpbmVJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BV
OjpSZW5kZXJQaXBlbGluZUltcGw6On5SZW5kZXJQaXBlbGluZUltcGwpOgorICAgICAgICAoUEFM
OjpXZWJHUFU6OlJlbmRlclBpcGVsaW5lSW1wbDo6Z2V0QmluZEdyb3VwTGF5b3V0KToKKyAgICAg
ICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQaXBlbGluZUltcGw6OnNldExhYmVsSW50ZXJuYWwpOgor
ICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJQaXBlbGluZUlt
cGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVNh
bXBsZXJJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChQQUw6OldlYkdQVTo6U2FtcGxlckltcGw6
OlNhbXBsZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpTYW1wbGVySW1wbDo6flNhbXBs
ZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpTYW1wbGVySW1wbDo6c2V0TGFiZWxJbnRl
cm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVNhbXBsZXJJ
bXBsLmg6IEFkZGVkLgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVT
aGFkZXJNb2R1bGVJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChQQUw6OldlYkdQVTo6U2hhZGVy
TW9kdWxlSW1wbDo6U2hhZGVyTW9kdWxlSW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6U2hh
ZGVyTW9kdWxlSW1wbDo6flNoYWRlck1vZHVsZUltcGwpOgorICAgICAgICAoUEFMOjpXZWJHUFU6
OlNoYWRlck1vZHVsZUltcGw6OmNvbXBpbGF0aW9uSW5mbyk6CisgICAgICAgIChQQUw6OldlYkdQ
VTo6U2hhZGVyTW9kdWxlSW1wbDo6c2V0TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dy
YXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVNoYWRlck1vZHVsZUltcGwuaDogQWRkZWQuCisgICAg
ICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVRleHR1cmVJbXBsLmNwcDogQWRk
ZWQuCisgICAgICAgIChQQUw6OldlYkdQVTo6VGV4dHVyZUltcGw6OlRleHR1cmVJbXBsKToKKyAg
ICAgICAgKFBBTDo6V2ViR1BVOjpUZXh0dXJlSW1wbDo6flRleHR1cmVJbXBsKToKKyAgICAgICAg
KFBBTDo6V2ViR1BVOjpUZXh0dXJlSW1wbDo6Y3JlYXRlVmlldyBjb25zdCk6CisgICAgICAgIChQ
QUw6OldlYkdQVTo6VGV4dHVyZUltcGw6OmRlc3Ryb3kpOgorICAgICAgICAoUEFMOjpXZWJHUFU6
OlRleHR1cmVJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAgICAgICAgKiBwYWwvZ3JhcGhpY3Mv
V2ViR1BVL0ltcGwvV2ViR1BVVGV4dHVyZUltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dy
YXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVRleHR1cmVWaWV3SW1wbC5jcHA6IEFkZGVkLgorICAg
ICAgICAoUEFMOjpXZWJHUFU6OlRleHR1cmVWaWV3SW1wbDo6VGV4dHVyZVZpZXdJbXBsKToKKyAg
ICAgICAgKFBBTDo6V2ViR1BVOjpUZXh0dXJlVmlld0ltcGw6On5UZXh0dXJlVmlld0ltcGwpOgor
ICAgICAgICAoUEFMOjpXZWJHUFU6OlRleHR1cmVWaWV3SW1wbDo6c2V0TGFiZWxJbnRlcm5hbCk6
CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVRleHR1cmVWaWV3SW1w
bC5oOiBBZGRlZC4KKwogMjAyMS0xMS0xNCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFw
cGxlLmNvbT4KIAogICAgICAgICBBdHRhY2ggSU9ISURFdmVudCB0aW1lc3RhbXBzIHRvIHdoZWVs
IGV2ZW50cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IGUxODU0MjVlMDJlYzY2OTA3NDRlZDEyM2UwOGIyM2UyZTUwNDIxYjIuLjUy
YWI3M2JjYjA0ZWRhOWNiZGZhZTE5OWY2YTliODFjZWExNWVjZTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1BBTC9QQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwOSw2ICsxMDks
MjkgQEAKIAkJMUMwOUQwNTMxRTMxQzQ0MTAwNzI1RjE4IC8qIENyeXB0b0RpZ2VzdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMwOUQwNTIxRTMxQzQ0
MTAwNzI1RjE4IC8qIENyeXB0b0RpZ2VzdC5oICovOyB9OwogCQkxQzA5RDA1NjFFMzFDNDY1MDA3
MjVGMTggLyogQ3J5cHRvRGlnZXN0Q29tbW9uQ3J5cHRvLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMDlEMDU1MUUzMUM0NjUwMDcyNUYxOCAvKiBD
cnlwdG9EaWdlc3RDb21tb25DcnlwdG8uY3BwICovOyB9OwogCQkxQzA5RDA1ODFFMzFDNTdFMDA3
MjVGMTggLyogY29uZmlnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQzA5RDA1NzFFMzFDNTdFMDA3MjVGMTggLyogY29uZmlnLmggKi87IH07CisJCTFD
MTlFNjQ0MjczRjNFNUQwMDRCMTdCMCAvKiBXZWJHUFVJbXBsLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNjQyMjczRjNFNUQwMDRCMTdCMCAv
KiBXZWJHUFVJbXBsLmNwcCAqLzsgfTsKKwkJMUMxOUU2NDgyNzNGM0Y4MjAwNEIxN0IwIC8qIFdl
YkdQVUFkYXB0ZXJJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFDMTlFNjQ2MjczRjNGODIwMDRCMTdCMCAvKiBXZWJHUFVBZGFwdGVySW1wbC5j
cHAgKi87IH07CisJCTFDMTlFNjRDMjczRjNGOTkwMDRCMTdCMCAvKiBXZWJHUFVCaW5kR3JvdXBJ
bXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFD
MTlFNjRBMjczRjNGOTkwMDRCMTdCMCAvKiBXZWJHUFVCaW5kR3JvdXBJbXBsLmNwcCAqLzsgfTsK
KwkJMUMxOUU2NTAyNzNGM0ZBNTAwNEIxN0IwIC8qIFdlYkdQVUJpbmRHcm91cExheW91dEltcGwu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMxOUU2
NEUyNzNGM0ZBNTAwNEIxN0IwIC8qIFdlYkdQVUJpbmRHcm91cExheW91dEltcGwuY3BwICovOyB9
OworCQkxQzE5RTY1NDI3M0YzRkIxMDA0QjE3QjAgLyogV2ViR1BVQnVmZmVySW1wbC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5RTY1MjI3M0Yz
RkIxMDA0QjE3QjAgLyogV2ViR1BVQnVmZmVySW1wbC5jcHAgKi87IH07CisJCTFDMTlFNjU4Mjcz
RjNGQzAwMDRCMTdCMCAvKiBXZWJHUFVDb21tYW5kQnVmZmVySW1wbC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5RTY1NjI3M0YzRkMwMDA0QjE3
QjAgLyogV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwuY3BwICovOyB9OworCQkxQzE5RTY1QzI3M0Yz
RkQyMDA0QjE3QjAgLyogV2ViR1BVQ29tbWFuZEVuY29kZXJJbXBsLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNjVBMjczRjNGRDIwMDRCMTdC
MCAvKiBXZWJHUFVDb21tYW5kRW5jb2RlckltcGwuY3BwICovOyB9OworCQkxQzE5RTY2MDI3M0Yz
RkUyMDA0QjE3QjAgLyogV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5RTY1RTI3M0YzRkUyMDA0
QjE3QjAgLyogV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5jcHAgKi87IH07CisJCTFDMTlF
NjY0MjczRjNGRUUwMDRCMTdCMCAvKiBXZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBsLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNjYyMjczRjNG
RUUwMDRCMTdCMCAvKiBXZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBsLmNwcCAqLzsgfTsKKwkJMUMx
OUU2NjgyNzNGM0ZGQTAwNEIxN0IwIC8qIFdlYkdQVURldmljZUltcGwuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMxOUU2NjYyNzNGM0ZGQTAwNEIx
N0IwIC8qIFdlYkdQVURldmljZUltcGwuY3BwICovOyB9OworCQkxQzE5RTY3MDI3M0Y0MDE0MDA0
QjE3QjAgLyogV2ViR1BVUGlwZWxpbmVMYXlvdXRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNjZFMjczRjQwMTQwMDRCMTdCMCAvKiBX
ZWJHUFVQaXBlbGluZUxheW91dEltcGwuY3BwICovOyB9OworCQkxQzE5RTY3NDI3M0Y0MDIwMDA0
QjE3QjAgLyogV2ViR1BVUXVlcnlTZXRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNjcyMjczRjQwMjAwMDRCMTdCMCAvKiBXZWJHUFVR
dWVyeVNldEltcGwuY3BwICovOyB9OworCQkxQzE5RTY3ODI3M0Y0MDJCMDA0QjE3QjAgLyogV2Vi
R1BVUXVldWVJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFDMTlFNjc2MjczRjQwMkIwMDRCMTdCMCAvKiBXZWJHUFVRdWV1ZUltcGwuY3BwICov
OyB9OworCQkxQzE5RTY3QzI3M0Y0MDNBMDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyQnVuZGxlSW1w
bC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5
RTY3QTI3M0Y0MDNBMDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyQnVuZGxlSW1wbC5jcHAgKi87IH07
CisJCTFDMTlFNjgwMjczRjQwNDQwMDRCMTdCMCAvKiBXZWJHUFVSZW5kZXJCdW5kbGVFbmNvZGVy
SW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QzE5RTY3RTI3M0Y0MDQ0MDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyQnVuZGxlRW5jb2RlckltcGwu
Y3BwICovOyB9OworCQkxQzE5RTY4NDI3M0Y0MDUwMDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyUGFz
c0VuY29kZXJJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFDMTlFNjgyMjczRjQwNTAwMDRCMTdCMCAvKiBXZWJHUFVSZW5kZXJQYXNzRW5jb2Rl
ckltcGwuY3BwICovOyB9OworCQkxQzE5RTY4ODI3M0Y0MDVEMDA0QjE3QjAgLyogV2ViR1BVUmVu
ZGVyUGlwZWxpbmVJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFDMTlFNjg2MjczRjQwNUQwMDRCMTdCMCAvKiBXZWJHUFVSZW5kZXJQaXBlbGlu
ZUltcGwuY3BwICovOyB9OworCQkxQzE5RTY4QzI3M0Y0MDY5MDA0QjE3QjAgLyogV2ViR1BVU2Ft
cGxlckltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUMxOUU2OEEyNzNGNDA2OTAwNEIxN0IwIC8qIFdlYkdQVVNhbXBsZXJJbXBsLmNwcCAqLzsg
fTsKKwkJMUMxOUU2OTAyNzNGNDA3MjAwNEIxN0IwIC8qIFdlYkdQVVNoYWRlck1vZHVsZUltcGwu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMxOUU2
OEUyNzNGNDA3MTAwNEIxN0IwIC8qIFdlYkdQVVNoYWRlck1vZHVsZUltcGwuY3BwICovOyB9Owor
CQkxQzE5RTY5NDI3M0Y0MDdEMDA0QjE3QjAgLyogV2ViR1BVVGV4dHVyZUltcGwuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMxOUU2OTIyNzNGNDA3
RDAwNEIxN0IwIC8qIFdlYkdQVVRleHR1cmVJbXBsLmNwcCAqLzsgfTsKKwkJMUMxOUU2OTgyNzNG
NDA4QjAwNEIxN0IwIC8qIFdlYkdQVVRleHR1cmVWaWV3SW1wbC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5RTY5NjI3M0Y0MDhCMDA0QjE3QjAg
LyogV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmNwcCAqLzsgfTsKKwkJMUMxOUU2QjUyNzNGODVBRjAw
NEIxN0IwIC8qIFdlYkdQVUNvbnZlcnRUb0JhY2tpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMxOUU2QjQyNzNGODVBRjAwNEIxN0IwIC8qIFdl
YkdQVUNvbnZlcnRUb0JhY2tpbmcuY3BwICovOyB9OworCQkxQzE5RTZCQTI3NDA1RTMyMDA0QjE3
QjAgLyogV2ViR1BVRXh0ZXJuYWxUZXh0dXJlSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5RTZCOTI3NDA1RTMyMDA0QjE3QjAgLyogV2Vi
R1BVRXh0ZXJuYWxUZXh0dXJlSW1wbC5jcHAgKi87IH07CiAJCTFDNDg3NkQ4MUY4RDdGNEUwMEND
RUVCRCAvKiBMb2dnaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFDNDg3NkQ2MUY4RDdGNEUwMENDRUVCRCAvKiBMb2dnaW5nLmNwcCAqLzsgfTsK
IAkJMUM0ODc2RDkxRjhEN0Y0RTAwQ0NFRUJEIC8qIExvZ2dpbmcuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDNDg3NkQ3MUY4RDdGNEUwMENDRUVCRCAv
KiBMb2dnaW5nLmggKi87IH07CiAJCTFDNzdDOEM5MjVENzk3MjAwMDYzNUUwQyAvKiBDb3JlVGV4
dFNvZnRMaW5rLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFDNzdDOEM3MjVENzk3MjAwMDYzNUUwQyAvKiBDb3JlVGV4dFNvZnRMaW5rLmNwcCAqLzsg
fTsKQEAgLTQ1OSw2ICs0ODIsNTIgQEAKIAkJMUMwOUQwNUQxRTMxQzc3QTAwNzI1RjE4IC8qIFBB
TC54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBQQUwueGNjb25maWc7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDMDlEMDYyMUUzMUVDMjgwMDcyNUYxOCAv
KiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0g
RGVidWdSZWxlYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzA5
RDA2MzFFMzFFQzMxMDA3MjVGMTggLyogQmFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNj
b25maWc7IHBhdGggPSBCYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkxQzE5RTY0MjI3M0YzRTVEMDA0QjE3QjAgLyogV2ViR1BVSW1wbC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXZWJHUFVJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMx
OUU2NDYyNzNGM0Y4MjAwNEIxN0IwIC8qIFdlYkdQVUFkYXB0ZXJJbXBsLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdlYkdQVUFkYXB0ZXJJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUMxOUU2NEEyNzNGM0Y5OTAwNEIxN0IwIC8qIFdlYkdQVUJpbmRHcm91cEltcGwuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR1BVQmluZEdyb3VwSW1wbC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjRFMjczRjNGQTUwMDRCMTdCMCAvKiBXZWJHUFVCaW5k
R3JvdXBMYXlvdXRJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQVUJpbmRHcm91cExh
eW91dEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY1MjI3M0Yz
RkIxMDA0QjE3QjAgLyogV2ViR1BVQnVmZmVySW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
ZWJHUFVCdWZmZXJJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2
NTYyNzNGM0ZDMDAwNEIxN0IwIC8qIFdlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMUMxOUU2NUEyNzNGM0ZEMjAwNEIxN0IwIC8qIFdlYkdQVUNvbW1hbmRF
bmNvZGVySW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHUFVDb21tYW5kRW5jb2Rlcklt
cGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY1RTI3M0YzRkUyMDA0
QjE3QjAgLyogV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXZWJHUFVDb21wdXRlUGFzc0VuY29kZXJJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMUMxOUU2NjIyNzNGM0ZFRTAwNEIxN0IwIC8qIFdlYkdQVUNvbXB1dGVQaXBl
bGluZUltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR1BVQ29tcHV0ZVBpcGVsaW5lSW1w
bC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjY2MjczRjNGRkEwMDRC
MTdCMCAvKiBXZWJHUFVEZXZpY2VJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQVURl
dmljZUltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY2RTI3M0Y0
MDE0MDA0QjE3QjAgLyogV2ViR1BVUGlwZWxpbmVMYXlvdXRJbXBsLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTFDMTlFNjcyMjczRjQwMjAwMDRCMTdCMCAvKiBXZWJHUFVRdWVyeVNldEltcGwu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR1BVUXVlcnlTZXRJbXBsLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2NzYyNzNGNDAyQjAwNEIxN0IwIC8qIFdlYkdQVVF1
ZXVlSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHUFVRdWV1ZUltcGwuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY3QTI3M0Y0MDNBMDA0QjE3QjAgLyogV2Vi
R1BVUmVuZGVyQnVuZGxlSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHUFVSZW5kZXJC
dW5kbGVJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2N0UyNzNG
NDA0NDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJbXBsLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJbXBsLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2ODIyNzNGNDA1MDAwNEIxN0IwIC8qIFdlYkdQVVJl
bmRlclBhc3NFbmNvZGVySW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHUFVSZW5kZXJQ
YXNzRW5jb2RlckltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY4
NjI3M0Y0MDVEMDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyUGlwZWxpbmVJbXBsLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTFDMTlFNjhBMjczRjQwNjkwMDRCMTdCMCAvKiBXZWJHUFVTYW1wbGVy
SW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHUFVTYW1wbGVySW1wbC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjhFMjczRjQwNzEwMDRCMTdCMCAvKiBXZWJH
UFVTaGFkZXJNb2R1bGVJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQVVNoYWRlck1v
ZHVsZUltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY5MjI3M0Y0
MDdEMDA0QjE3QjAgLyogV2ViR1BVVGV4dHVyZUltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViR1BVVGV4dHVyZUltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5
RTY5NjI3M0Y0MDhCMDA0QjE3QjAgLyogV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdlYkdQVVRleHR1cmVWaWV3SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTFDMTlFNjlBMjczRjQyNDIwMDRCMTdCMCAvKiBXZWJHUFVSZW5kZXJCdW5k
bGVFbmNvZGVySW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVSZW5kZXJCdW5kbGVFbmNvZGVy
SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY5QjI3M0Y0MjQyMDA0
QjE3QjAgLyogV2ViR1BVSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVJbXBsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjlDMjczRjQyNDMwMDRCMTdCMCAvKiBXZWJH
UFVCaW5kR3JvdXBMYXlvdXRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVUJpbmRHcm91cExh
eW91dEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2OUQyNzNGNDI0
MzAwNEIxN0IwIC8qIFdlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJHUFVQaXBlbGluZUxheW91dEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MUMxOUU2OUUyNzNGNDI0MzAwNEIxN0IwIC8qIFdlYkdQVUNvbXB1dGVQYXNzRW5jb2RlckltcGwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY5RjI3M0Y0MjQzMDA0QjE3QjAgLyogV2ViR1BV
VGV4dHVyZUltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR1BVVGV4dHVyZUltcGwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2QTEyNzNGNDI0MzAwNEIxN0IwIC8qIFdlYkdQ
VUJpbmRHcm91cEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR1BVQmluZEdyb3VwSW1wbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTZBMjI3M0Y0MjQzMDA0QjE3QjAgLyog
V2ViR1BVQnVmZmVySW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVCdWZmZXJJbXBsLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNkEzMjczRjQyNDQwMDRCMTdCMCAvKiBX
ZWJHUFVSZW5kZXJQYXNzRW5jb2RlckltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR1BVUmVuZGVy
UGFzc0VuY29kZXJJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNkE0
MjczRjQyNDQwMDRCMTdCMCAvKiBXZWJHUFVDb21tYW5kQnVmZmVySW1wbC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJHUFVDb21tYW5kQnVmZmVySW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxQzE5RTZBNTI3M0Y0MjQ0MDA0QjE3QjAgLyogV2ViR1BVUXVldWVJbXBsLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkdQVVF1ZXVlSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkxQzE5RTZBNjI3M0Y0MjQ0MDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyQnVuZGxlSW1wbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJHUFVSZW5kZXJCdW5kbGVJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTFDMTlFNkE3MjczRjQyNDQwMDRCMTdCMCAvKiBXZWJHUFVTYW1wbGVySW1w
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVTYW1wbGVySW1wbC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxQzE5RTZBODI3M0Y0MjQ0MDA0QjE3QjAgLyogV2ViR1BVUXVlcnlTZXRJ
bXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVVF1ZXJ5U2V0SW1wbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkxQzE5RTZBOTI3M0Y0MjQ0MDA0QjE3QjAgLyogV2ViR1BVUmVuZGVy
UGlwZWxpbmVJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTZBQTI3M0Y0MjQ1MDA0QjE3QjAg
LyogV2ViR1BVU2hhZGVyTW9kdWxlSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVTaGFkZXJN
b2R1bGVJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNkFCMjczRjQy
NDUwMDRCMTdCMCAvKiBXZWJHUFVDb21tYW5kRW5jb2RlckltcGwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2ViR1BVQ29tbWFuZEVuY29kZXJJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTFDMTlFNkFDMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJHUFVUZXh0dXJlVmlld0ltcGwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTFDMTlFNkFEMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJHUFVEZXZpY2VJbXBsLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYkdQVURldmljZUltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMUMxOUU2QUUyNzNGNDI0NTAwNEIxN0IwIC8qIFdlYkdQVUFkYXB0ZXJJbXBsLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYkdQVUFkYXB0ZXJJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTFDMTlFNkFGMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJHUFVDb21wdXRlUGlwZWxp
bmVJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVUNvbXB1dGVQaXBlbGluZUltcGwuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2QjQyNzNGODVBRjAwNEIxN0IwIC8qIFdl
YkdQVUNvbnZlcnRUb0JhY2tpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR1BVQ29udmVy
dFRvQmFja2luZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNkI2Mjcz
Rjg1QkMwMDRCMTdCMCAvKiBXZWJHUFVDb252ZXJ0VG9CYWNraW5nLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYkdQVUNvbnZlcnRUb0JhY2tpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MUMxOUU2QjkyNzQwNUUzMjAwNEIxN0IwIC8qIFdlYkdQVUV4dGVybmFsVGV4dHVyZUltcGwuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR1BVRXh0ZXJuYWxUZXh0dXJlSW1wbC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNkJCMjc0MDVFM0MwMDRCMTdCMCAvKiBXZWJH
UFVFeHRlcm5hbFRleHR1cmVJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVUV4dGVybmFsVGV4
dHVyZUltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM0ODc2RDYxRjhEN0Y0
RTAwQ0NFRUJEIC8qIExvZ2dpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTG9nZ2luZy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDNDg3NkQ3MUY4RDdGNEUwMENDRUVCRCAv
KiBMb2dnaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvZ2dpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUM2N0NFQTIxRTMyRUUyNjAwRjgwRjJFIC8qIFZlcnNpb24ueGNjb25maWcg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gVmVyc2lvbi54Y2NvbmZpZzsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMDAsNiArMTA2OSw1OSBAQAogCQkJcGF0aCA9IENv
bmZpZ3VyYXRpb25zOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJMUMxOUU2
NDEyNzNGM0Q3NTAwNEIxN0IwIC8qIEltcGwgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJ
CWNoaWxkcmVuID0gKAorCQkJCTFDMTlFNjQ2MjczRjNGODIwMDRCMTdCMCAvKiBXZWJHUFVBZGFw
dGVySW1wbC5jcHAgKi8sCisJCQkJMUMxOUU2QUUyNzNGNDI0NTAwNEIxN0IwIC8qIFdlYkdQVUFk
YXB0ZXJJbXBsLmggKi8sCisJCQkJMUMxOUU2NEEyNzNGM0Y5OTAwNEIxN0IwIC8qIFdlYkdQVUJp
bmRHcm91cEltcGwuY3BwICovLAorCQkJCTFDMTlFNkExMjczRjQyNDMwMDRCMTdCMCAvKiBXZWJH
UFVCaW5kR3JvdXBJbXBsLmggKi8sCisJCQkJMUMxOUU2NEUyNzNGM0ZBNTAwNEIxN0IwIC8qIFdl
YkdQVUJpbmRHcm91cExheW91dEltcGwuY3BwICovLAorCQkJCTFDMTlFNjlDMjczRjQyNDMwMDRC
MTdCMCAvKiBXZWJHUFVCaW5kR3JvdXBMYXlvdXRJbXBsLmggKi8sCisJCQkJMUMxOUU2NTIyNzNG
M0ZCMTAwNEIxN0IwIC8qIFdlYkdQVUJ1ZmZlckltcGwuY3BwICovLAorCQkJCTFDMTlFNkEyMjcz
RjQyNDMwMDRCMTdCMCAvKiBXZWJHUFVCdWZmZXJJbXBsLmggKi8sCisJCQkJMUMxOUU2NTYyNzNG
M0ZDMDAwNEIxN0IwIC8qIFdlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmNwcCAqLywKKwkJCQkxQzE5
RTZBNDI3M0Y0MjQ0MDA0QjE3QjAgLyogV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwuaCAqLywKKwkJ
CQkxQzE5RTY1QTI3M0YzRkQyMDA0QjE3QjAgLyogV2ViR1BVQ29tbWFuZEVuY29kZXJJbXBsLmNw
cCAqLywKKwkJCQkxQzE5RTZBQjI3M0Y0MjQ1MDA0QjE3QjAgLyogV2ViR1BVQ29tbWFuZEVuY29k
ZXJJbXBsLmggKi8sCisJCQkJMUMxOUU2NUUyNzNGM0ZFMjAwNEIxN0IwIC8qIFdlYkdQVUNvbXB1
dGVQYXNzRW5jb2RlckltcGwuY3BwICovLAorCQkJCTFDMTlFNjlFMjczRjQyNDMwMDRCMTdCMCAv
KiBXZWJHUFVDb21wdXRlUGFzc0VuY29kZXJJbXBsLmggKi8sCisJCQkJMUMxOUU2NjIyNzNGM0ZF
RTAwNEIxN0IwIC8qIFdlYkdQVUNvbXB1dGVQaXBlbGluZUltcGwuY3BwICovLAorCQkJCTFDMTlF
NkFGMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBsLmggKi8sCisJ
CQkJMUMxOUU2QjQyNzNGODVBRjAwNEIxN0IwIC8qIFdlYkdQVUNvbnZlcnRUb0JhY2tpbmcuY3Bw
ICovLAorCQkJCTFDMTlFNkI2MjczRjg1QkMwMDRCMTdCMCAvKiBXZWJHUFVDb252ZXJ0VG9CYWNr
aW5nLmggKi8sCisJCQkJMUMxOUU2NjYyNzNGM0ZGQTAwNEIxN0IwIC8qIFdlYkdQVURldmljZUlt
cGwuY3BwICovLAorCQkJCTFDMTlFNkFEMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJHUFVEZXZpY2VJ
bXBsLmggKi8sCisJCQkJMUMxOUU2QjkyNzQwNUUzMjAwNEIxN0IwIC8qIFdlYkdQVUV4dGVybmFs
VGV4dHVyZUltcGwuY3BwICovLAorCQkJCTFDMTlFNkJCMjc0MDVFM0MwMDRCMTdCMCAvKiBXZWJH
UFVFeHRlcm5hbFRleHR1cmVJbXBsLmggKi8sCisJCQkJMUMxOUU2NDIyNzNGM0U1RDAwNEIxN0Iw
IC8qIFdlYkdQVUltcGwuY3BwICovLAorCQkJCTFDMTlFNjlCMjczRjQyNDIwMDRCMTdCMCAvKiBX
ZWJHUFVJbXBsLmggKi8sCisJCQkJMUMxOUU2NkUyNzNGNDAxNDAwNEIxN0IwIC8qIFdlYkdQVVBp
cGVsaW5lTGF5b3V0SW1wbC5jcHAgKi8sCisJCQkJMUMxOUU2OUQyNzNGNDI0MzAwNEIxN0IwIC8q
IFdlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5oICovLAorCQkJCTFDMTlFNjcyMjczRjQwMjAwMDRC
MTdCMCAvKiBXZWJHUFVRdWVyeVNldEltcGwuY3BwICovLAorCQkJCTFDMTlFNkE4MjczRjQyNDQw
MDRCMTdCMCAvKiBXZWJHUFVRdWVyeVNldEltcGwuaCAqLywKKwkJCQkxQzE5RTY3NjI3M0Y0MDJC
MDA0QjE3QjAgLyogV2ViR1BVUXVldWVJbXBsLmNwcCAqLywKKwkJCQkxQzE5RTZBNTI3M0Y0MjQ0
MDA0QjE3QjAgLyogV2ViR1BVUXVldWVJbXBsLmggKi8sCisJCQkJMUMxOUU2N0UyNzNGNDA0NDAw
NEIxN0IwIC8qIFdlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJbXBsLmNwcCAqLywKKwkJCQkxQzE5
RTY5QTI3M0Y0MjQyMDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyQnVuZGxlRW5jb2RlckltcGwuaCAq
LywKKwkJCQkxQzE5RTY3QTI3M0Y0MDNBMDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyQnVuZGxlSW1w
bC5jcHAgKi8sCisJCQkJMUMxOUU2QTYyNzNGNDI0NDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlckJ1
bmRsZUltcGwuaCAqLywKKwkJCQkxQzE5RTY4MjI3M0Y0MDUwMDA0QjE3QjAgLyogV2ViR1BVUmVu
ZGVyUGFzc0VuY29kZXJJbXBsLmNwcCAqLywKKwkJCQkxQzE5RTZBMzI3M0Y0MjQ0MDA0QjE3QjAg
LyogV2ViR1BVUmVuZGVyUGFzc0VuY29kZXJJbXBsLmggKi8sCisJCQkJMUMxOUU2ODYyNzNGNDA1
RDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5jcHAgKi8sCisJCQkJMUMxOUU2
QTkyNzNGNDI0NDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5oICovLAorCQkJ
CTFDMTlFNjhBMjczRjQwNjkwMDRCMTdCMCAvKiBXZWJHUFVTYW1wbGVySW1wbC5jcHAgKi8sCisJ
CQkJMUMxOUU2QTcyNzNGNDI0NDAwNEIxN0IwIC8qIFdlYkdQVVNhbXBsZXJJbXBsLmggKi8sCisJ
CQkJMUMxOUU2OEUyNzNGNDA3MTAwNEIxN0IwIC8qIFdlYkdQVVNoYWRlck1vZHVsZUltcGwuY3Bw
ICovLAorCQkJCTFDMTlFNkFBMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJHUFVTaGFkZXJNb2R1bGVJ
bXBsLmggKi8sCisJCQkJMUMxOUU2OTIyNzNGNDA3RDAwNEIxN0IwIC8qIFdlYkdQVVRleHR1cmVJ
bXBsLmNwcCAqLywKKwkJCQkxQzE5RTY5RjI3M0Y0MjQzMDA0QjE3QjAgLyogV2ViR1BVVGV4dHVy
ZUltcGwuaCAqLywKKwkJCQkxQzE5RTY5NjI3M0Y0MDhCMDA0QjE3QjAgLyogV2ViR1BVVGV4dHVy
ZVZpZXdJbXBsLmNwcCAqLywKKwkJCQkxQzE5RTZBQzI3M0Y0MjQ1MDA0QjE3QjAgLyogV2ViR1BV
VGV4dHVyZVZpZXdJbXBsLmggKi8sCisJCQkpOworCQkJcGF0aCA9IEltcGw7CisJCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOworCQl9OwogCQkxQzQ4NzZERTFGOEQ4MzEzMDBDQ0VFQkQgLyogY29j
b2EgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMTA0Miw2
ICsxMTY0LDcgQEAKIAkJMUNDNUUzQzMyNzM3NDVBMzAwNkY2RkY0IC8qIFdlYkdQVSAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMUMxOUU2NDEyNzNGM0Q3
NTAwNEIxN0IwIC8qIEltcGwgKi8sCiAJCQkJMUNDNUU0NzEyNzM3NDk0ODAwNkY2RkY0IC8qIFdl
YkdQVS5oICovLAogCQkJCTFDQzVFNDdGMjczNzQ5NDkwMDZGNkZGNCAvKiBXZWJHUFVBZGFwdGVy
LmggKi8sCiAJCQkJMUNDNUU0NkMyNzM3NDk0ODAwNkY2RkY0IC8qIFdlYkdQVUFkZHJlc3NNb2Rl
LmggKi8sCkBAIC0xNjk0LDYgKzE4MTcsMjkgQEAKIAkJCQkwNzYxMURCNzI0M0ZBNUJGMDBEODA3
MDQgLyogVXNhZ2VUcmFja2luZ1NvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDFFMUYz
NDQyNDhBNkEwMDAwMjJENURFIC8qIFZpZGVvVG9vbGJveFNvZnRMaW5rLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUY0NkI4QzREMjY3NDA5MTgwMDdBNjU1NCAvKiBWaXNpb25LaXRDb3JlU29mdExp
bmsubW0gaW4gU291cmNlcyAqLywKKwkJCQkxQzE5RTY0ODI3M0YzRjgyMDA0QjE3QjAgLyogV2Vi
R1BVQWRhcHRlckltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2NEMyNzNGM0Y5OTAw
NEIxN0IwIC8qIFdlYkdQVUJpbmRHcm91cEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMx
OUU2NTAyNzNGM0ZBNTAwNEIxN0IwIC8qIFdlYkdQVUJpbmRHcm91cExheW91dEltcGwuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2NTQyNzNGM0ZCMTAwNEIxN0IwIC8qIFdlYkdQVUJ1ZmZl
ckltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2NTgyNzNGM0ZDMDAwNEIxN0IwIC8q
IFdlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFDMTlFNjVD
MjczRjNGRDIwMDRCMTdCMCAvKiBXZWJHUFVDb21tYW5kRW5jb2RlckltcGwuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMUMxOUU2NjAyNzNGM0ZFMjAwNEIxN0IwIC8qIFdlYkdQVUNvbXB1dGVQYXNz
RW5jb2RlckltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2NjQyNzNGM0ZFRTAwNEIx
N0IwIC8qIFdlYkdQVUNvbXB1dGVQaXBlbGluZUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MUMxOUU2QjUyNzNGODVBRjAwNEIxN0IwIC8qIFdlYkdQVUNvbnZlcnRUb0JhY2tpbmcuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2NjgyNzNGM0ZGQTAwNEIxN0IwIC8qIFdlYkdQVURldmlj
ZUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2QkEyNzQwNUUzMjAwNEIxN0IwIC8q
IFdlYkdQVUV4dGVybmFsVGV4dHVyZUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2
NDQyNzNGM0U1RDAwNEIxN0IwIC8qIFdlYkdQVUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MUMxOUU2NzAyNzNGNDAxNDAwNEIxN0IwIC8qIFdlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkxQzE5RTY3NDI3M0Y0MDIwMDA0QjE3QjAgLyogV2ViR1BVUXVl
cnlTZXRJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFDMTlFNjc4MjczRjQwMkIwMDRCMTdC
MCAvKiBXZWJHUFVRdWV1ZUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2ODAyNzNG
NDA0NDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJbXBsLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTFDMTlFNjdDMjczRjQwM0EwMDRCMTdCMCAvKiBXZWJHUFVSZW5kZXJCdW5k
bGVJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFDMTlFNjg0MjczRjQwNTAwMDRCMTdCMCAv
KiBXZWJHUFVSZW5kZXJQYXNzRW5jb2RlckltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMx
OUU2ODgyNzNGNDA1RDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkxQzE5RTY4QzI3M0Y0MDY5MDA0QjE3QjAgLyogV2ViR1BVU2FtcGxl
ckltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2OTAyNzNGNDA3MjAwNEIxN0IwIC8q
IFdlYkdQVVNoYWRlck1vZHVsZUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2OTQy
NzNGNDA3RDAwNEIxN0IwIC8qIFdlYkdQVVRleHR1cmVJbXBsLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTFDMTlFNjk4MjczRjQwOEIwMDRCMTdCMCAvKiBXZWJHUFVUZXh0dXJlVmlld0ltcGwuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTEwODI2RkExRjU3NjI5MjAwNDc3MkFDIC8qIFdlYlBhbmVs
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNz
L1dlYkdQVS9JbXBsL1dlYkdQVUFkYXB0ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQWRhcHRlckltcGwuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjkxMjA5NjlmY2ViYTRhMjQ2YWY2OWEwYjI3NmNiZmYzOTBmMTFiNmYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUFk
YXB0ZXJJbXBsLmNwcApAQCAtMCwwICsxLDIxNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVBZGFwdGVySW1wbC5oIgorCisjaW5jbHVkZSAiV2Vi
R1BVQ29udmVydFRvQmFja2luZy5oIgorI2luY2x1ZGUgIldlYkdQVURldmljZUltcGwuaCIKKyNp
bmNsdWRlIDxXZWJHUFUvV2ViR1BVRXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNl
IFdlYkdQVSB7CisKK3N0YXRpYyBTdHJpbmcgYWRhcHRlck5hbWUoV0dQVUFkYXB0ZXIgYWRhcHRl
cikKK3sKKyAgICBXR1BVQWRhcHRlclByb3BlcnRpZXMgcHJvcGVydGllczsKKyAgICB3Z3B1QWRh
cHRlckdldFByb3BlcnRpZXMoYWRhcHRlciwgJnByb3BlcnRpZXMpOworICAgIHJldHVybiBwcm9w
ZXJ0aWVzLm5hbWU7Cit9CisKK3N0YXRpYyBSZWY8U3VwcG9ydGVkRmVhdHVyZXM+IHN1cHBvcnRl
ZEZlYXR1cmVzKFdHUFVBZGFwdGVyIGFkYXB0ZXIpCit7CisgICAgVmVjdG9yPFN0cmluZz4gcmVz
dWx0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyA7ICsraSkgeworICAgICAgICBhdXRvIGZlYXR1
cmUgPSB3Z3B1QWRhcHRlckdldEZlYXR1cmVBdEluZGV4KGFkYXB0ZXIsIGkpOworICAgICAgICBp
ZiAoZmVhdHVyZSA9PSBXR1BVRmVhdHVyZU5hbWVfVW5kZWZpbmVkKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8dWludD4oZmVhdHVyZSkpIHsKKyAgICAg
ICAgY2FzZSBXR1BVRmVhdHVyZU5hbWVfRGVwdGhDbGFtcGluZzoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFdHUFVGZWF0dXJlTmFtZV9EZXB0aDI0VW5vcm1TdGVuY2lsODoKKyAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoImRlcHRoMjR1bm9ybS1zdGVuY2lsOCJfcyk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXR1BVRmVhdHVyZU5hbWVfRGVwdGgzMkZsb2F0
U3RlbmNpbDg6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJkZXB0aDMyZmxvYXQtc3RlbmNp
bDgiX3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVUZlYXR1cmVOYW1l
X1RpbWVzdGFtcFF1ZXJ5OgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgidGltZXN0YW1wLXF1
ZXJ5Il9zKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdHUFVGZWF0dXJlTmFt
ZV9QaXBlbGluZVN0YXRpc3RpY3NRdWVyeToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoInBp
cGVsaW5lLXN0YXRpc3RpY3MtcXVlcnkiX3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgV0dQVUZlYXR1cmVOYW1lX1RleHR1cmVDb21wcmVzc2lvbkJDOgorICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgidGV4dHVyZS1jb21wcmVzc2lvbi1iYyJfcyk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBXR1BVRmVhdHVyZU5hbWVfRGVwdGhDbGlwQ29udHJvbDoKKyAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoImRlcHRoLWNsaXAtY29udHJvbCJfcyk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXR1BVRmVhdHVyZU5hbWVfSW5kaXJlY3RGaXJzdElu
c3RhbmNlOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiaW5kaXJlY3QtZmlyc3QtaW5zdGFu
Y2UiX3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVUZlYXR1cmVOYW1l
X1RleHR1cmVDb21wcmVzc2lvbkVUQzI6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJ0ZXh0
dXJlLWNvbXByZXNzaW9uLWV0YzIiX3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgV0dQVUZlYXR1cmVOYW1lX1RleHR1cmVDb21wcmVzc2lvbkFTVEM6CisgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKCJ0ZXh0dXJlLWNvbXByZXNzaW9uLWFzdGMiX3MpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gU3VwcG9ydGVkRmVhdHVyZXM6OmNyZWF0ZShXVEZNb3ZlKHJlc3Vs
dCkpOworfQorCitzdGF0aWMgUmVmPFN1cHBvcnRlZExpbWl0cz4gc3VwcG9ydGVkTGltaXRzKFdH
UFVBZGFwdGVyIGFkYXB0ZXIpCit7CisgICAgV0dQVVN1cHBvcnRlZExpbWl0cyBsaW1pdHM7Cisg
ICAgd2dwdUFkYXB0ZXJHZXRMaW1pdHMoYWRhcHRlciwgJmxpbWl0cyk7CisgICAgcmV0dXJuIFN1
cHBvcnRlZExpbWl0czo6Y3JlYXRlKAorICAgICAgICBsaW1pdHMubGltaXRzLm1heFRleHR1cmVE
aW1lbnNpb24xRCwKKyAgICAgICAgbGltaXRzLmxpbWl0cy5tYXhUZXh0dXJlRGltZW5zaW9uMkQs
CisgICAgICAgIGxpbWl0cy5saW1pdHMubWF4VGV4dHVyZURpbWVuc2lvbjNELAorICAgICAgICBs
aW1pdHMubGltaXRzLm1heFRleHR1cmVBcnJheUxheWVycywKKyAgICAgICAgbGltaXRzLmxpbWl0
cy5tYXhCaW5kR3JvdXBzLAorICAgICAgICBsaW1pdHMubGltaXRzLm1heER5bmFtaWNVbmlmb3Jt
QnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0LAorICAgICAgICBsaW1pdHMubGltaXRzLm1heER5bmFt
aWNTdG9yYWdlQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0LAorICAgICAgICBsaW1pdHMubGltaXRz
Lm1heFNhbXBsZWRUZXh0dXJlc1BlclNoYWRlclN0YWdlLAorICAgICAgICBsaW1pdHMubGltaXRz
Lm1heFNhbXBsZXJzUGVyU2hhZGVyU3RhZ2UsCisgICAgICAgIGxpbWl0cy5saW1pdHMubWF4U3Rv
cmFnZUJ1ZmZlcnNQZXJTaGFkZXJTdGFnZSwKKyAgICAgICAgbGltaXRzLmxpbWl0cy5tYXhTdG9y
YWdlVGV4dHVyZXNQZXJTaGFkZXJTdGFnZSwKKyAgICAgICAgbGltaXRzLmxpbWl0cy5tYXhVbmlm
b3JtQnVmZmVyc1BlclNoYWRlclN0YWdlLAorICAgICAgICBsaW1pdHMubGltaXRzLm1heFVuaWZv
cm1CdWZmZXJCaW5kaW5nU2l6ZSwKKyAgICAgICAgbGltaXRzLmxpbWl0cy5tYXhTdG9yYWdlQnVm
ZmVyQmluZGluZ1NpemUsCisgICAgICAgIGxpbWl0cy5saW1pdHMubWluVW5pZm9ybUJ1ZmZlck9m
ZnNldEFsaWdubWVudCwKKyAgICAgICAgbGltaXRzLmxpbWl0cy5taW5TdG9yYWdlQnVmZmVyT2Zm
c2V0QWxpZ25tZW50LAorICAgICAgICBsaW1pdHMubGltaXRzLm1heFZlcnRleEJ1ZmZlcnMsCisg
ICAgICAgIGxpbWl0cy5saW1pdHMubWF4VmVydGV4QXR0cmlidXRlcywKKyAgICAgICAgbGltaXRz
LmxpbWl0cy5tYXhWZXJ0ZXhCdWZmZXJBcnJheVN0cmlkZSwKKyAgICAgICAgbGltaXRzLmxpbWl0
cy5tYXhJbnRlclN0YWdlU2hhZGVyQ29tcG9uZW50cywKKyAgICAgICAgbGltaXRzLmxpbWl0cy5t
YXhDb21wdXRlV29ya2dyb3VwU3RvcmFnZVNpemUsCisgICAgICAgIGxpbWl0cy5saW1pdHMubWF4
Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwLAorICAgICAgICBsaW1pdHMubGltaXRzLm1h
eENvbXB1dGVXb3JrZ3JvdXBTaXplWCwKKyAgICAgICAgbGltaXRzLmxpbWl0cy5tYXhDb21wdXRl
V29ya2dyb3VwU2l6ZVksCisgICAgICAgIGxpbWl0cy5saW1pdHMubWF4Q29tcHV0ZVdvcmtncm91
cFNpemVaLAorICAgICAgICBsaW1pdHMubGltaXRzLm1heENvbXB1dGVXb3JrZ3JvdXBzUGVyRGlt
ZW5zaW9uKTsKK30KKworc3RhdGljIGJvb2wgaXNGYWxsYmFja0FkYXB0ZXIoV0dQVUFkYXB0ZXIg
YWRhcHRlcikKK3sKKyAgICBXR1BVQWRhcHRlclByb3BlcnRpZXMgcHJvcGVydGllczsKKyAgICB3
Z3B1QWRhcHRlckdldFByb3BlcnRpZXMoYWRhcHRlciwgJnByb3BlcnRpZXMpOworICAgIHJldHVy
biBwcm9wZXJ0aWVzLmFkYXB0ZXJUeXBlID09IFdHUFVBZGFwdGVyVHlwZV9DUFU7Cit9CisKK0Fk
YXB0ZXJJbXBsOjpBZGFwdGVySW1wbChXR1BVQWRhcHRlciBhZGFwdGVyKQorICAgIDogQWRhcHRl
cihhZGFwdGVyTmFtZShhZGFwdGVyKSwgc3VwcG9ydGVkRmVhdHVyZXMoYWRhcHRlciksIHN1cHBv
cnRlZExpbWl0cyhhZGFwdGVyKSwgV2ViR1BVOjppc0ZhbGxiYWNrQWRhcHRlcihhZGFwdGVyKSkK
KyAgICAsIG1fYmFja2luZyhhZGFwdGVyKQoreworfQorCitBZGFwdGVySW1wbDo6fkFkYXB0ZXJJ
bXBsKCkKK3sKKyAgICB3Z3B1QWRhcHRlclJlbGVhc2UobV9iYWNraW5nKTsgCit9CisKK3ZvaWQg
cmVxdWVzdERldmljZUNhbGxiYWNrKFdHUFVSZXF1ZXN0RGV2aWNlU3RhdHVzIHN0YXR1cywgV0dQ
VURldmljZSBkZXZpY2UsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIHZvaWQqIHVzZXJkYXRhKQorewor
ICAgIGF1dG8gYWRhcHRlciA9IGFkb3B0UmVmKCpzdGF0aWNfY2FzdDxBZGFwdGVySW1wbCo+KHVz
ZXJkYXRhKSk7IC8vIGFkb3B0UmVmIGlzIGJhbGFuY2VkIGJ5IGxlYWtSZWYgaW4gcmVxdWVzdERl
dmljZSgpIGJlbG93LiBXZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSdyZSB1c2luZyBhIEMg
QVBJIHdpdGggbm8gY29uY2VwdCBvZiByZWZlcmVuY2UgY291bnRpbmcgb3IgYmxvY2tzLgorICAg
IGFkYXB0ZXItPnJlcXVlc3REZXZpY2VDYWxsYmFjayhzdGF0dXMsIGRldmljZSwgbWVzc2FnZSk7
Cit9CisKK3ZvaWQgQWRhcHRlckltcGw6OnJlcXVlc3REZXZpY2UoY29uc3QgRGV2aWNlRGVzY3Jp
cHRvciYgZGVzY3JpcHRvciwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlZjxEZXZpY2U+KT4mJiBjYWxs
YmFjaykKK3sKKyAgICBSZWYgcHJvdGVjdGVkVGhpcygqdGhpcyk7CisKKyAgICBhdXRvIGxhYmVs
ID0gZGVzY3JpcHRvci5sYWJlbC51dGY4KCk7CisKKyAgICBXR1BVRGV2aWNlRGVzY3JpcHRvckxh
YmVsIGJhY2tpbmdEZXNjcmlwdG9yTGFiZWwgeworICAgICAgICB7CisgICAgICAgICAgICBudWxs
cHRyLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V0dQVVNUeXBlPihXR1BVU1R5cGVfRGV2aWNl
RGVzY3JpcHRvckxhYmVsKSwKKyAgICAgICAgfSwKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAg
bGFiZWwuZGF0YSgpCisgICAgfTsKKworICAgIFZlY3RvcjxXR1BVRmVhdHVyZU5hbWU+IGZlYXR1
cmVzOworICAgIGZlYXR1cmVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGVzY3JpcHRvci5yZXF1
aXJlZEZlYXR1cmVzLnNpemUoKSk7CisgICAgZm9yIChhdXRvIGZlYXR1cmVOYW1lIDogZGVzY3Jp
cHRvci5yZXF1aXJlZEZlYXR1cmVzKQorICAgICAgICBmZWF0dXJlcy51bmNoZWNrZWRBcHBlbmQo
Y29udmVydFRvQmFja2luZyhmZWF0dXJlTmFtZSkpOworCisgICAgV0dQVVJlcXVpcmVkTGltaXRz
IGxpbWl0cyB7CisgICAgICAgIG51bGxwdHIsIHsKKyAgICAgICAgICAgIDAsIC8vIG1heFRleHR1
cmVEaW1lbnNpb24xRAorICAgICAgICAgICAgMCwgLy8gbWF4VGV4dHVyZURpbWVuc2lvbjJECisg
ICAgICAgICAgICAwLCAvLyBtYXhUZXh0dXJlRGltZW5zaW9uM0QKKyAgICAgICAgICAgIDAsIC8v
IG1heFRleHR1cmVBcnJheUxheWVycworICAgICAgICAgICAgMCwgLy8gbWF4QmluZEdyb3Vwcwor
ICAgICAgICAgICAgMCwgLy8gbWF4RHluYW1pY1VuaWZvcm1CdWZmZXJzUGVyUGlwZWxpbmVMYXlv
dXQKKyAgICAgICAgICAgIDAsIC8vIG1heER5bmFtaWNTdG9yYWdlQnVmZmVyc1BlclBpcGVsaW5l
TGF5b3V0CisgICAgICAgICAgICAwLCAvLyBtYXhTYW1wbGVkVGV4dHVyZXNQZXJTaGFkZXJTdGFn
ZQorICAgICAgICAgICAgMCwgLy8gbWF4U2FtcGxlcnNQZXJTaGFkZXJTdGFnZQorICAgICAgICAg
ICAgMCwgLy8gbWF4U3RvcmFnZUJ1ZmZlcnNQZXJTaGFkZXJTdGFnZQorICAgICAgICAgICAgMCwg
Ly8gbWF4U3RvcmFnZVRleHR1cmVzUGVyU2hhZGVyU3RhZ2UKKyAgICAgICAgICAgIDAsIC8vIG1h
eFVuaWZvcm1CdWZmZXJzUGVyU2hhZGVyU3RhZ2UKKyAgICAgICAgICAgIDAsIC8vIG1heFVuaWZv
cm1CdWZmZXJCaW5kaW5nU2l6ZQorICAgICAgICAgICAgMCwgLy8gbWF4U3RvcmFnZUJ1ZmZlckJp
bmRpbmdTaXplCisgICAgICAgICAgICAwLCAvLyBtaW5Vbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25t
ZW50CisgICAgICAgICAgICAwLCAvLyBtaW5TdG9yYWdlQnVmZmVyT2Zmc2V0QWxpZ25tZW50Cisg
ICAgICAgICAgICAwLCAvLyBtYXhWZXJ0ZXhCdWZmZXJzCisgICAgICAgICAgICAwLCAvLyBtYXhW
ZXJ0ZXhBdHRyaWJ1dGVzCisgICAgICAgICAgICAwLCAvLyBtYXhWZXJ0ZXhCdWZmZXJBcnJheVN0
cmlkZQorICAgICAgICAgICAgMCwgLy8gbWF4SW50ZXJTdGFnZVNoYWRlckNvbXBvbmVudHMKKyAg
ICAgICAgICAgIDAsIC8vIG1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlU2l6ZQorICAgICAgICAg
ICAgMCwgLy8gbWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwCisgICAgICAgICAgICAw
LCAvLyBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVgKKyAgICAgICAgICAgIDAsIC8vIG1heENvbXB1
dGVXb3JrZ3JvdXBTaXplWQorICAgICAgICAgICAgMCwgLy8gbWF4Q29tcHV0ZVdvcmtncm91cFNp
emVaCisgICAgICAgICAgICAwLCAvLyBtYXhDb21wdXRlV29ya2dyb3Vwc1BlckRpbWVuc2lvbgor
ICAgICAgICB9LAorICAgIH07CisKKyAgICBXR1BVRGV2aWNlRGVzY3JpcHRvciBiYWNraW5nRGVz
Y3JpcHRvciB7CisgICAgICAgICZiYWNraW5nRGVzY3JpcHRvckxhYmVsLmhlYWRlciwKKyAgICAg
ICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGZlYXR1cmVzLnNpemUoKSksCisgICAgICAgIGZlYXR1
cmVzLmRhdGEoKSwKKyAgICAgICAgJmxpbWl0cywKKyAgICB9OworCisgICAgbV9jYWxsYmFja3Mu
YXBwZW5kKFdURk1vdmUoY2FsbGJhY2spKTsKKworICAgIHdncHVBZGFwdGVyUmVxdWVzdERldmlj
ZShtX2JhY2tpbmcsICZiYWNraW5nRGVzY3JpcHRvciwgJldlYkdQVTo6cmVxdWVzdERldmljZUNh
bGxiYWNrLCAmcHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpOyAvLyBsZWFrUmVmIGlzIGJhbGFuY2Vk
IGJ5IGFkb3B0UmVmIGluIHJlcXVlc3REZXZpY2VDYWxsYmFjaygpIGFib3ZlLiBXZSBoYXZlIHRv
IGRvIHRoaXMgYmVjYXVzZSB3ZSdyZSB1c2luZyBhIEMgQVBJIHdpdGggbm8gY29uY2VwdCBvZiBy
ZWZlcmVuY2UgY291bnRpbmcgb3IgYmxvY2tzLgorfQorCit2b2lkIEFkYXB0ZXJJbXBsOjpyZXF1
ZXN0RGV2aWNlQ2FsbGJhY2soV0dQVVJlcXVlc3REZXZpY2VTdGF0dXMsIFdHUFVEZXZpY2UgZGV2
aWNlLCBjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIFVOVVNFRF9QQVJBTShtZXNzYWdlKTsK
KyAgICBhdXRvIGNhbGxiYWNrID0gbV9jYWxsYmFja3MudGFrZUZpcnN0KCk7CisgICAgY2FsbGJh
Y2soRGV2aWNlSW1wbDo6Y3JlYXRlKGRldmljZSwgUmVmIHsgZmVhdHVyZXMoKSB9LCBSZWYgeyBs
aW1pdHMoKSB9KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2Vi
R1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9J
bXBsL1dlYkdQVUFkYXB0ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNz
L1dlYkdQVS9JbXBsL1dlYkdQVUFkYXB0ZXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTY0ODlkNWRhYmE5
NThjOGZmMGI4ZmFiODgyZDY3MGI0YjI2ZDZlMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQWRhcHRlckltcGwuaApA
QCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJX
ZWJHUFVBZGFwdGVyLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorI2luY2x1ZGUgPHd0
Zi9EZXF1ZS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFz
cyBBZGFwdGVySW1wbCBmaW5hbCA6IHB1YmxpYyBBZGFwdGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUmVmPEFkYXB0ZXJJbXBsPiBjcmVhdGUoV0dQVUFkYXB0ZXIgYWRhcHRlcikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFkYXB0ZXJJbXBsKGFkYXB0ZXIpKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIH5BZGFwdGVySW1wbCgpOworCisgICAgV0dQVUFkYXB0ZXIgYmFja2lu
ZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCB2
b2lkIHJlcXVlc3REZXZpY2VDYWxsYmFjayhXR1BVUmVxdWVzdERldmljZVN0YXR1cywgV0dQVURl
dmljZSwgY29uc3QgY2hhciogbWVzc2FnZSwgdm9pZCogdXNlcmRhdGEpOworCisgICAgQWRhcHRl
ckltcGwoV0dQVUFkYXB0ZXIpOworCisgICAgQWRhcHRlckltcGwoY29uc3QgQWRhcHRlckltcGwm
KSA9IGRlbGV0ZTsKKyAgICBBZGFwdGVySW1wbChBZGFwdGVySW1wbCYmKSA9IGRlbGV0ZTsKKyAg
ICBBZGFwdGVySW1wbCYgb3BlcmF0b3I9KGNvbnN0IEFkYXB0ZXJJbXBsJikgPSBkZWxldGU7Cisg
ICAgQWRhcHRlckltcGwmIG9wZXJhdG9yPShBZGFwdGVySW1wbCYmKSA9IGRlbGV0ZTsKKworICAg
IHZvaWQgcmVxdWVzdERldmljZUNhbGxiYWNrKFdHUFVSZXF1ZXN0RGV2aWNlU3RhdHVzLCBXR1BV
RGV2aWNlLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsKKyAgICB2b2lkIHJlcXVlc3REZXZpY2UoY29u
c3QgRGV2aWNlRGVzY3JpcHRvciYsIHN0ZDo6ZnVuY3Rpb248dm9pZChSZWY8RGV2aWNlPik+JiYp
IGZpbmFsOworCisgICAgV0dQVUFkYXB0ZXIgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworCisgICAg
RGVxdWU8c3RkOjpmdW5jdGlvbjx2b2lkKFJlZjxEZXZpY2U+KT4+IG1fY2FsbGJhY2tzOworfTsK
KworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQmluZEdy
b3VwSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBs
L1dlYkdQVUJpbmRHcm91cEltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFiMGFkNjc1OThhN2FkMjE1OWE5
NDg0NGYxNzRjMzAzNWNlYWZmYjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Q
QUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJpbmRHcm91cEltcGwuY3BwCkBAIC0w
LDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViR1BVQmluZEdyb3VwSW1wbC5oIgorCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVUV4dC5oPgor
CituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitCaW5kR3JvdXBJbXBsOjpC
aW5kR3JvdXBJbXBsKFdHUFVCaW5kR3JvdXAgYmluZEdyb3VwKQorICAgIDogbV9iYWNraW5nKGJp
bmRHcm91cCkKK3sKK30KKworQmluZEdyb3VwSW1wbDo6fkJpbmRHcm91cEltcGwoKQoreworICAg
IHdncHVCaW5kR3JvdXBSZWxlYXNlKG1fYmFja2luZyk7Cit9CisKK3ZvaWQgQmluZEdyb3VwSW1w
bDo6c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAgIHdncHVCaW5k
R3JvdXBTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVsLnV0ZjgoKS5kYXRhKCkpOworfQorCit9IC8v
IG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVCaW5kR3JvdXBJbXBs
LmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJp
bmRHcm91cEltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMzViYmE5ZGI3MmQ2NTE5NmJhNmVhNmEwNjJmMzcy
M2UyZGIwYWY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVCaW5kR3JvdXBJbXBsLmgKQEAgLTAsMCArMSw1OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVQmluZEdyb3VwLmgi
CisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFj
ZSBXZWJHUFUgeworCitjbGFzcyBCaW5kR3JvdXBJbXBsIGZpbmFsIDogcHVibGljIEJpbmRHcm91
cCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxCaW5kR3JvdXBJbXBsPiBjcmVhdGUoV0dQVUJp
bmRHcm91cCBiaW5kR3JvdXApCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBC
aW5kR3JvdXBJbXBsKGJpbmRHcm91cCkpOworICAgIH0KKworICAgIHZpcnR1YWwgfkJpbmRHcm91
cEltcGwoKTsKKworICAgIFdHUFVCaW5kR3JvdXAgYmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1f
YmFja2luZzsgfQorCitwcml2YXRlOgorICAgIEJpbmRHcm91cEltcGwoV0dQVUJpbmRHcm91cCk7
CisKKyAgICBCaW5kR3JvdXBJbXBsKGNvbnN0IEJpbmRHcm91cEltcGwmKSA9IGRlbGV0ZTsKKyAg
ICBCaW5kR3JvdXBJbXBsKEJpbmRHcm91cEltcGwmJikgPSBkZWxldGU7CisgICAgQmluZEdyb3Vw
SW1wbCYgb3BlcmF0b3I9KGNvbnN0IEJpbmRHcm91cEltcGwmKSA9IGRlbGV0ZTsKKyAgICBCaW5k
R3JvdXBJbXBsJiBvcGVyYXRvcj0oQmluZEdyb3VwSW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIHZv
aWQgc2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5hbDsKKworICAgIFdHUFVCaW5k
R3JvdXAgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9
IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwv
Z3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQmluZEdyb3VwTGF5b3V0SW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJpbmRHcm91cExh
eW91dEltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2NGU3ZGI2NjAzNDRkZjhjNDZiMTM1OGFhNDBlOGQ4
MTkxZjQwYTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBo
aWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJpbmRHcm91cExheW91dEltcGwuY3BwCkBAIC0wLDAgKzEs
NTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViR1BV
QmluZEdyb3VwTGF5b3V0SW1wbC5oIgorCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVUV4dC5oPgor
CituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitCaW5kR3JvdXBMYXlvdXRJ
bXBsOjpCaW5kR3JvdXBMYXlvdXRJbXBsKFdHUFVCaW5kR3JvdXBMYXlvdXQgYmluZEdyb3VwTGF5
b3V0KQorICAgIDogbV9iYWNraW5nKGJpbmRHcm91cExheW91dCkKK3sKK30KKworQmluZEdyb3Vw
TGF5b3V0SW1wbDo6fkJpbmRHcm91cExheW91dEltcGwoKQoreworICAgIHdncHVCaW5kR3JvdXBM
YXlvdXRSZWxlYXNlKG1fYmFja2luZyk7Cit9CisKK3ZvaWQgQmluZEdyb3VwTGF5b3V0SW1wbDo6
c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAgIHdncHVCaW5kR3Jv
dXBMYXlvdXRTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVsLnV0ZjgoKS5kYXRhKCkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVCaW5kR3JvdXBM
YXlvdXRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBs
L1dlYkdQVUJpbmRHcm91cExheW91dEltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OWI2NGI5ZDMxN2YwNWVl
ZDAyNmYwMzc4MTMzMzJhYTg1NjA4YTI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVCaW5kR3JvdXBMYXlvdXRJbXBs
LmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiV2ViR1BVQmluZEdyb3VwTGF5b3V0LmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgor
CituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBCaW5kR3JvdXBM
YXlvdXRJbXBsIGZpbmFsIDogcHVibGljIEJpbmRHcm91cExheW91dCB7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZjxCaW5kR3JvdXBMYXlvdXRJbXBsPiBjcmVhdGUoV0dQVUJpbmRHcm91cExheW91
dCBiaW5kR3JvdXBMYXlvdXQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBC
aW5kR3JvdXBMYXlvdXRJbXBsKGJpbmRHcm91cExheW91dCkpOworICAgIH0KKworICAgIHZpcnR1
YWwgfkJpbmRHcm91cExheW91dEltcGwoKTsKKworICAgIFdHUFVCaW5kR3JvdXBMYXlvdXQgYmFj
a2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgorICAgIEJpbmRH
cm91cExheW91dEltcGwoV0dQVUJpbmRHcm91cExheW91dCk7CisKKyAgICBCaW5kR3JvdXBMYXlv
dXRJbXBsKGNvbnN0IEJpbmRHcm91cExheW91dEltcGwmKSA9IGRlbGV0ZTsKKyAgICBCaW5kR3Jv
dXBMYXlvdXRJbXBsKEJpbmRHcm91cExheW91dEltcGwmJikgPSBkZWxldGU7CisgICAgQmluZEdy
b3VwTGF5b3V0SW1wbCYgb3BlcmF0b3I9KGNvbnN0IEJpbmRHcm91cExheW91dEltcGwmKSA9IGRl
bGV0ZTsKKyAgICBCaW5kR3JvdXBMYXlvdXRJbXBsJiBvcGVyYXRvcj0oQmluZEdyb3VwTGF5b3V0
SW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIHZvaWQgc2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJp
bmcmKSBmaW5hbDsKKworICAgIFdHUFVCaW5kR3JvdXBMYXlvdXQgbV9iYWNraW5nIHsgbnVsbHB0
ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2Vi
R1BVQnVmZmVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQ
VS9JbXBsL1dlYkdQVUJ1ZmZlckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM4YWQ3NTNjYzFiY2EzZWI0
OWVmMjc4MzU4MjllYzBjYmRmNDUzNzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJ1ZmZlckltcGwuY3BwCkBAIC0w
LDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViR1BVQnVmZmVySW1wbC5oIgorCisjaW5jbHVkZSAiV2ViR1BVQ29udmVydFRvQmFja2luZy5o
IgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFVFeHQuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1l
c3BhY2UgV2ViR1BVIHsKKworQnVmZmVySW1wbDo6QnVmZmVySW1wbChXR1BVQnVmZmVyIGJ1ZmZl
cikKKyAgICA6IG1fYmFja2luZyhidWZmZXIpCit7Cit9CisKK0J1ZmZlckltcGw6On5CdWZmZXJJ
bXBsKCkKK3sKKyAgICB3Z3B1QnVmZmVyUmVsZWFzZShtX2JhY2tpbmcpOworfQorCit2b2lkIG1h
cENhbGxiYWNrKFdHUFVCdWZmZXJNYXBBc3luY1N0YXR1cyBzdGF0dXMsIHZvaWQqIHVzZXJkYXRh
KQoreworICAgIGF1dG8gYnVmZmVyID0gYWRvcHRSZWYoKnN0YXRpY19jYXN0PEJ1ZmZlckltcGwq
Pih1c2VyZGF0YSkpOyAvLyBhZG9wdFJlZiBpcyBiYWxhbmNlZCBieSBsZWFrUmVmIGluIG1hcEFz
eW5jKCkgYmVsb3cuIFdlIGhhdmUgdG8gZG8gdGhpcyBiZWNhdXNlIHdlJ3JlIHVzaW5nIGEgQyBB
UEkgd2l0aCBubyBjb25jZXB0IG9mIHJlZmVyZW5jZSBjb3VudGluZyBvciBibG9ja3MuCisgICAg
YnVmZmVyLT5tYXBDYWxsYmFjayhzdGF0dXMpOworfQorCit2b2lkIEJ1ZmZlckltcGw6Om1hcEFz
eW5jKE1hcE1vZGVGbGFncyBtYXBNb2RlRmxhZ3MsIHN0ZDo6b3B0aW9uYWw8U2l6ZTY0PiBvZmZz
ZXQsIHN0ZDo6b3B0aW9uYWw8U2l6ZTY0PiBzaXplLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4mJiBj
YWxsYmFjaykKK3sKKyAgICBSZWYgcHJvdGVjdGVkVGhpcygqdGhpcyk7CisKKyAgICBhdXRvIGJh
Y2tpbmdNYXBNb2RlRmxhZ3MgPSBjb252ZXJ0TWFwTW9kZUZsYWdzVG9CYWNraW5nKG1hcE1vZGVG
bGFncyk7CisKKyAgICBhdXRvIHVzZWRPZmZzZXQgPSBvZmZzZXQudmFsdWVfb3IoMCk7CisgICAg
YXV0byB1c2VkU2l6ZSA9IHNpemUudmFsdWVfb3IoV0dQVV9XSE9MRV9TSVpFKTsKKworICAgIG1f
Y2FsbGJhY2tzLmFwcGVuZChXVEZNb3ZlKGNhbGxiYWNrKSk7CisKKyAgICB3Z3B1QnVmZmVyTWFw
QXN5bmMobV9iYWNraW5nLCBiYWNraW5nTWFwTW9kZUZsYWdzLCB1c2VkT2Zmc2V0LCB1c2VkU2l6
ZSwgJldlYkdQVTo6bWFwQ2FsbGJhY2ssICZwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7IC8vIGxl
YWtSZWYgaXMgYmFsYW5jZWQgYnkgYWRvcHRSZWYgaW4gbWFwQ2FsbGJhY2soKSBhYm92ZS4gV2Ug
aGF2ZSB0byBkbyB0aGlzIGJlY2F1c2Ugd2UncmUgdXNpbmcgYSBDIEFQSSB3aXRoIG5vIGNvbmNl
cHQgb2YgcmVmZXJlbmNlIGNvdW50aW5nIG9yIGJsb2Nrcy4KK30KKwordm9pZCBCdWZmZXJJbXBs
OjptYXBDYWxsYmFjayhXR1BVQnVmZmVyTWFwQXN5bmNTdGF0dXMgc3RhdHVzKQoreworICAgIFVO
VVNFRF9QQVJBTShzdGF0dXMpOworICAgIGF1dG8gY2FsbGJhY2sgPSBtX2NhbGxiYWNrcy50YWtl
Rmlyc3QoKTsKKyAgICBjYWxsYmFjaygpOworfQorCithdXRvIEJ1ZmZlckltcGw6OmdldE1hcHBl
ZFJhbmdlKHN0ZDo6b3B0aW9uYWw8U2l6ZTY0PiBvZmZzZXQsIHN0ZDo6b3B0aW9uYWw8U2l6ZTY0
PiBzaXplKSAtPiBNYXBwZWRSYW5nZQoreworICAgIGF1dG8gdXNlZE9mZnNldCA9IG9mZnNldC52
YWx1ZV9vcigwKTsKKyAgICBhdXRvIHVzZWRTaXplID0gc2l6ZS52YWx1ZV9vcihXR1BVX1dIT0xF
X1NJWkUpOworICAgIGF1dG8qIHBvaW50ZXIgPSB3Z3B1QnVmZmVyR2V0TWFwcGVkUmFuZ2UobV9i
YWNraW5nLCB1c2VkT2Zmc2V0LCB1c2VkU2l6ZSk7CisgICAgcmV0dXJuIHsgcG9pbnRlciwgdXNl
ZFNpemUgfTsKK30KKwordm9pZCBCdWZmZXJJbXBsOjp1bm1hcCgpCit7CisgICAgd2dwdUJ1ZmZl
clVubWFwKG1fYmFja2luZyk7Cit9CisKK3ZvaWQgQnVmZmVySW1wbDo6ZGVzdHJveSgpCit7Cisg
ICAgd2dwdUJ1ZmZlckRlc3Ryb3kobV9iYWNraW5nKTsKK30KKwordm9pZCBCdWZmZXJJbXBsOjpz
ZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYgbGFiZWwpCit7CisgICAgd2dwdUJ1ZmZlclNl
dExhYmVsKG1fYmFja2luZywgbGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJ1ZmZlckltcGwuaCBiL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQnVmZmVySW1wbC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmYzZjc1YTg2MjA3M2QwMDY2NWU4OGI4ZTc3NDk3ZWVjODllMzllYzUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9J
bXBsL1dlYkdQVUJ1ZmZlckltcGwuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJXZWJHUFVCdWZmZXIuaCIKKyNpbmNsdWRlIDxXZWJHUFUv
V2ViR1BVLmg+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFt
ZXNwYWNlIFdlYkdQVSB7CisKK2NsYXNzIEJ1ZmZlckltcGwgZmluYWwgOiBwdWJsaWMgQnVmZmVy
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEJ1ZmZlckltcGw+IGNyZWF0ZShXR1BVQnVmZmVy
IGJ1ZmZlcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJ1ZmZlckltcGwo
YnVmZmVyKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+QnVmZmVySW1wbCgpOworCisgICAgV0dQ
VUJ1ZmZlciBiYWNraW5nKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nOyB9CisKK3ByaXZhdGU6
CisgICAgZnJpZW5kIHZvaWQgbWFwQ2FsbGJhY2soV0dQVUJ1ZmZlck1hcEFzeW5jU3RhdHVzLCB2
b2lkKiB1c2VyZGF0YSk7CisKKyAgICBCdWZmZXJJbXBsKFdHUFVCdWZmZXIpOworCisgICAgQnVm
ZmVySW1wbChjb25zdCBCdWZmZXJJbXBsJikgPSBkZWxldGU7CisgICAgQnVmZmVySW1wbChCdWZm
ZXJJbXBsJiYpID0gZGVsZXRlOworICAgIEJ1ZmZlckltcGwmIG9wZXJhdG9yPShjb25zdCBCdWZm
ZXJJbXBsJikgPSBkZWxldGU7CisgICAgQnVmZmVySW1wbCYgb3BlcmF0b3I9KEJ1ZmZlckltcGwm
JikgPSBkZWxldGU7CisKKyAgICB2b2lkIG1hcENhbGxiYWNrKFdHUFVCdWZmZXJNYXBBc3luY1N0
YXR1cyk7CisgICAgdm9pZCBtYXBBc3luYyhNYXBNb2RlRmxhZ3MsIHN0ZDo6b3B0aW9uYWw8U2l6
ZTY0PiBvZmZzZXQsIHN0ZDo6b3B0aW9uYWw8U2l6ZTY0PiBzaXplRm9yTWFwLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQoKT4mJikgZmluYWw7CisgICAgTWFwcGVkUmFuZ2UgZ2V0TWFwcGVkUmFuZ2Uoc3Rk
OjpvcHRpb25hbDxTaXplNjQ+IG9mZnNldCwgc3RkOjpvcHRpb25hbDxTaXplNjQ+KSBmaW5hbDsK
KyAgICB2b2lkIHVubWFwKCkgZmluYWw7CisKKyAgICB2b2lkIGRlc3Ryb3koKSBmaW5hbDsKKwor
ICAgIHZvaWQgc2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5hbDsKKworICAgIFdH
UFVCdWZmZXIgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworCisgICAgRGVxdWU8c3RkOjpmdW5jdGlv
bjx2b2lkKCk+PiBtX2NhbGxiYWNrczsKK307CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBu
YW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBo
aWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjE1NjU5ZmM2N2E3YjZkNDQ3ZjUxZWFkMGFlYmU5NTlhM2VhZDE1NzIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQ
VS9JbXBsL1dlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmNwcApAQCAtMCwwICsxLDUwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkdQVUNvbW1hbmRCdWZm
ZXJJbXBsLmgiCisKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVRXh0Lmg+CisKK25hbWVzcGFjZSBQ
QUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK0NvbW1hbmRCdWZmZXJJbXBsOjpDb21tYW5kQnVm
ZmVySW1wbChXR1BVQ29tbWFuZEJ1ZmZlciBjb21tYW5kQnVmZmVyKQorICAgIDogbV9iYWNraW5n
KGNvbW1hbmRCdWZmZXIpCit7Cit9CisKK0NvbW1hbmRCdWZmZXJJbXBsOjp+Q29tbWFuZEJ1ZmZl
ckltcGwoKQoreworICAgIHdncHVDb21tYW5kQnVmZmVyUmVsZWFzZShtX2JhY2tpbmcpOworfQor
Cit2b2lkIENvbW1hbmRCdWZmZXJJbXBsOjpzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYg
bGFiZWwpCit7CisgICAgd2dwdUNvbW1hbmRCdWZmZXJTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVs
LnV0ZjgoKS5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNl
IFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJH
UFUvSW1wbC9XZWJHUFVDb21tYW5kQnVmZmVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb21tYW5kQnVmZmVySW1wbC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjVhMmQ3ZTg4NGNkZjFjZjE1OTcwYzkzYTBiNmI2ODQ2MzA1ZTliOTYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQ
VUNvbW1hbmRCdWZmZXJJbXBsLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVQ29tbWFuZEJ1ZmZlci5oIgorI2luY2x1ZGUgPFdl
YkdQVS9XZWJHUFUuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKwor
Y2xhc3MgQ29tbWFuZEJ1ZmZlckltcGwgZmluYWwgOiBwdWJsaWMgQ29tbWFuZEJ1ZmZlciB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZjxDb21tYW5kQnVmZmVySW1wbD4gY3JlYXRlKFdHUFVDb21t
YW5kQnVmZmVyIGNvbW1hbmRCdWZmZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBDb21tYW5kQnVmZmVySW1wbChjb21tYW5kQnVmZmVyKSk7CisgICAgfQorCisgICAgdmly
dHVhbCB+Q29tbWFuZEJ1ZmZlckltcGwoKTsKKworICAgIFdHUFVDb21tYW5kQnVmZmVyIGJhY2tp
bmcoKSBjb25zdCB7IHJldHVybiBtX2JhY2tpbmc7IH0KKworcHJpdmF0ZToKKyAgICBDb21tYW5k
QnVmZmVySW1wbChXR1BVQ29tbWFuZEJ1ZmZlcik7CisKKyAgICBDb21tYW5kQnVmZmVySW1wbChj
b25zdCBDb21tYW5kQnVmZmVySW1wbCYpID0gZGVsZXRlOworICAgIENvbW1hbmRCdWZmZXJJbXBs
KENvbW1hbmRCdWZmZXJJbXBsJiYpID0gZGVsZXRlOworICAgIENvbW1hbmRCdWZmZXJJbXBsJiBv
cGVyYXRvcj0oY29uc3QgQ29tbWFuZEJ1ZmZlckltcGwmKSA9IGRlbGV0ZTsKKyAgICBDb21tYW5k
QnVmZmVySW1wbCYgb3BlcmF0b3I9KENvbW1hbmRCdWZmZXJJbXBsJiYpID0gZGVsZXRlOworCisg
ICAgdm9pZCBzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYpIGZpbmFsOworCisgICAgV0dQ
VUNvbW1hbmRCdWZmZXIgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tbWFuZEVuY29kZXJJbXBsLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29t
bWFuZEVuY29kZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MjIzMjY0ZmM1NzI4OGQ1ZmQ5NWJmNTM2
NTM1MmE3MWFjZWU5ODA0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb21tYW5kRW5jb2RlckltcGwuY3BwCkBAIC0w
LDAgKzEsMjc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYkdQVUNvbW1hbmRFbmNvZGVySW1wbC5oIgorCisjaW5jbHVkZSAiV2ViR1BVQnVmZmVySW1w
bC5oIgorI2luY2x1ZGUgIldlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmgiCisjaW5jbHVkZSAiV2Vi
R1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVUNvbnZlcnRUb0Jh
Y2tpbmcuaCIKKyNpbmNsdWRlICJXZWJHUFVRdWVyeVNldEltcGwuaCIKKyNpbmNsdWRlICJXZWJH
UFVSZW5kZXJQYXNzRW5jb2RlckltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJlSW1wbC5o
IgorI2luY2x1ZGUgIldlYkdQVVRleHR1cmVWaWV3SW1wbC5oIgorI2luY2x1ZGUgPFdlYkdQVS9X
ZWJHUFVFeHQuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworQ29t
bWFuZEVuY29kZXJJbXBsOjpDb21tYW5kRW5jb2RlckltcGwoV0dQVUNvbW1hbmRFbmNvZGVyIENv
bW1hbmRFbmNvZGVyKQorICAgIDogbV9iYWNraW5nKENvbW1hbmRFbmNvZGVyKQoreworfQorCitD
b21tYW5kRW5jb2RlckltcGw6On5Db21tYW5kRW5jb2RlckltcGwoKQoreworICAgIHdncHVDb21t
YW5kRW5jb2RlclJlbGVhc2UobV9iYWNraW5nKTsKK30KKworUmVmPFJlbmRlclBhc3NFbmNvZGVy
PiBDb21tYW5kRW5jb2RlckltcGw6OmJlZ2luUmVuZGVyUGFzcyhjb25zdCBSZW5kZXJQYXNzRGVz
Y3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBWZWN0b3I8V0dQVVJlbmRlclBhc3NDb2xvckF0
dGFjaG1lbnQ+IGNvbG9yQXR0YWNobWVudHM7CisgICAgZm9yIChjb25zdCBhdXRvJiBjb2xvckF0
dGFjaG1lbnQgOiBkZXNjcmlwdG9yLmNvbG9yQXR0YWNobWVudHMpIHsKKyAgICAgICAgY29sb3JB
dHRhY2htZW50cy5hcHBlbmQoV0dQVVJlbmRlclBhc3NDb2xvckF0dGFjaG1lbnQgeworICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgVGV4dHVyZVZpZXdJbXBsJj4oY29sb3JBdHRhY2htZW50
LnZpZXcpLmJhY2tpbmcoKSwKKyAgICAgICAgICAgIGNvbG9yQXR0YWNobWVudC5yZXNvbHZlVGFy
Z2V0ID8gc3RhdGljX2Nhc3Q8Y29uc3QgVGV4dHVyZVZpZXdJbXBsJj4oKmNvbG9yQXR0YWNobWVu
dC5yZXNvbHZlVGFyZ2V0KS5iYWNraW5nKCkgOiBudWxscHRyLAorICAgICAgICAgICAgc3RkOjpo
b2xkc19hbHRlcm5hdGl2ZTxMb2FkT3A+KGNvbG9yQXR0YWNobWVudC5sb2FkVmFsdWUpID8gY29u
dmVydFRvQmFja2luZyhzdGQ6OmdldDxMb2FkT3A+KGNvbG9yQXR0YWNobWVudC5sb2FkVmFsdWUp
KSA6IFdHUFVMb2FkT3BfQ2xlYXIsCisgICAgICAgICAgICBjb252ZXJ0VG9CYWNraW5nKGNvbG9y
QXR0YWNobWVudC5zdG9yZU9wKSwKKyAgICAgICAgICAgIFdURjo6c3dpdGNoT24oY29sb3JBdHRh
Y2htZW50LmxvYWRWYWx1ZSwgW10gKExvYWRPcCkgLT4gV0dQVUNvbG9yIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4geyAwLCAwLCAwLCAwIH07CisgICAgICAgICAgICB9LCBbXSAoY29uc3QgVmVj
dG9yPGRvdWJsZT4mIHZlY3RvcikgLT4gV0dQVUNvbG9yIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gV0dQVUNvbG9yIHsKKyAgICAgICAgICAgICAgICAgICAgdmVjdG9yLnNpemUoKSA+IDAgPyB2
ZWN0b3JbMF0gOiAwLAorICAgICAgICAgICAgICAgICAgICB2ZWN0b3Iuc2l6ZSgpID4gMSA/IHZl
Y3RvclsxXSA6IDAsCisgICAgICAgICAgICAgICAgICAgIHZlY3Rvci5zaXplKCkgPiAyID8gdmVj
dG9yWzJdIDogMCwKKyAgICAgICAgICAgICAgICAgICAgdmVjdG9yLnNpemUoKSA+IDMgPyB2ZWN0
b3JbM10gOiAwLAorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9LCBbXSAoY29uc3Qg
Q29sb3JEaWN0JiBjb2xvcikgLT4gV0dQVUNvbG9yIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
V0dQVUNvbG9yIHsKKyAgICAgICAgICAgICAgICAgICAgY29sb3IuciwKKyAgICAgICAgICAgICAg
ICAgICAgY29sb3IuZywKKyAgICAgICAgICAgICAgICAgICAgY29sb3IuYiwKKyAgICAgICAgICAg
ICAgICAgICAgY29sb3IuYSwKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSksCisg
ICAgICAgIH0pOworICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8V0dQVVJlbmRlclBhc3NEZXB0
aFN0ZW5jaWxBdHRhY2htZW50PiBkZXB0aFN0ZW5jaWxBdHRhY2htZW50OworICAgIGlmIChkZXNj
cmlwdG9yLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQpIHsKKyAgICAgICAgZGVwdGhTdGVuY2lsQXR0
YWNobWVudCA9IFdHUFVSZW5kZXJQYXNzRGVwdGhTdGVuY2lsQXR0YWNobWVudCB7CisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxjb25zdCBUZXh0dXJlVmlld0ltcGwmPihkZXNjcmlwdG9yLmRlcHRo
U3RlbmNpbEF0dGFjaG1lbnQtPnZpZXcpLmJhY2tpbmcoKSwKKyAgICAgICAgICAgIHN0ZDo6aG9s
ZHNfYWx0ZXJuYXRpdmU8TG9hZE9wPihkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQt
PmRlcHRoTG9hZFZhbHVlKSA/IGNvbnZlcnRUb0JhY2tpbmcoc3RkOjpnZXQ8TG9hZE9wPihkZXNj
cmlwdG9yLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQtPmRlcHRoTG9hZFZhbHVlKSkgOiBXR1BVTG9h
ZE9wX0NsZWFyLAorICAgICAgICAgICAgY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLmRlcHRo
U3RlbmNpbEF0dGFjaG1lbnQtPmRlcHRoU3RvcmVPcCksCisgICAgICAgICAgICBXVEY6OnN3aXRj
aE9uKGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+ZGVwdGhMb2FkVmFsdWUsIFtd
IChMb2FkT3ApIC0+IGZsb2F0IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
ICAgIH0sIFtdIChmbG9hdCBjbGVhckRlcHRoKSAtPiBmbG9hdCB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGNsZWFyRGVwdGg7CisgICAgICAgICAgICB9KSwKKyAgICAgICAgICAgIGRlc2NyaXB0
b3IuZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+ZGVwdGhSZWFkT25seSwKKyAgICAgICAgICAgIHN0
ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8TG9hZE9wPihkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbEF0dGFj
aG1lbnQtPnN0ZW5jaWxMb2FkVmFsdWUpID8gY29udmVydFRvQmFja2luZyhzdGQ6OmdldDxMb2Fk
T3A+KGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+c3RlbmNpbExvYWRWYWx1ZSkp
IDogV0dQVUxvYWRPcF9DbGVhciwKKyAgICAgICAgICAgIGNvbnZlcnRUb0JhY2tpbmcoZGVzY3Jp
cHRvci5kZXB0aFN0ZW5jaWxBdHRhY2htZW50LT5zdGVuY2lsU3RvcmVPcCksCisgICAgICAgICAg
ICBXVEY6OnN3aXRjaE9uKGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+c3RlbmNp
bExvYWRWYWx1ZSwgW10gKExvYWRPcCkgLT4gdWludDMyX3QgeworICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgfSwgW10gKFN0ZW5jaWxWYWx1ZSBjbGVhclN0ZW5jaWwpIC0+
IHVpbnQzMl90IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xlYXJTdGVuY2lsOworICAgICAg
ICAgICAgfSksCisgICAgICAgICAgICBkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQt
PnN0ZW5jaWxSZWFkT25seSwKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBhdXRvIGxhYmVsID0g
ZGVzY3JpcHRvci5sYWJlbC51dGY4KCk7CisKKyAgICBXR1BVUmVuZGVyUGFzc0Rlc2NyaXB0b3Ig
YmFja2luZ0Rlc2NyaXB0b3IgeworICAgICAgICBudWxscHRyLAorICAgICAgICBsYWJlbC5kYXRh
KCksCisgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90Pihjb2xvckF0dGFjaG1lbnRzLnNpemUo
KSksCisgICAgICAgIGNvbG9yQXR0YWNobWVudHMuZGF0YSgpLAorICAgICAgICBkZXB0aFN0ZW5j
aWxBdHRhY2htZW50ID8gJmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQudmFsdWUoKSA6IG51bGxwdHIs
CisgICAgICAgIGRlc2NyaXB0b3Iub2NjbHVzaW9uUXVlcnlTZXQgPyBzdGF0aWNfY2FzdDxjb25z
dCBRdWVyeVNldEltcGwmPigqZGVzY3JpcHRvci5vY2NsdXNpb25RdWVyeVNldCkuYmFja2luZygp
IDogbnVsbHB0ciwKKyAgICB9OworCisgICAgcmV0dXJuIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6
Y3JlYXRlKHdncHVDb21tYW5kRW5jb2RlckJlZ2luUmVuZGVyUGFzcyhtX2JhY2tpbmcsICZiYWNr
aW5nRGVzY3JpcHRvcikpOworfQorCitSZWY8Q29tcHV0ZVBhc3NFbmNvZGVyPiBDb21tYW5kRW5j
b2RlckltcGw6OmJlZ2luQ29tcHV0ZVBhc3MoY29uc3Qgc3RkOjpvcHRpb25hbDxDb21wdXRlUGFz
c0Rlc2NyaXB0b3I+JiBkZXNjcmlwdG9yKQoreworICAgIENTdHJpbmcgbGFiZWwgPSBkZXNjcmlw
dG9yID8gZGVzY3JpcHRvci0+bGFiZWwudXRmOCgpIDogQ1N0cmluZygiIik7CisKKyAgICBXR1BV
Q29tcHV0ZVBhc3NEZXNjcmlwdG9yIGJhY2tpbmdEZXNjcmlwdG9yIHsKKyAgICAgICAgbnVsbHB0
ciwKKyAgICAgICAgbGFiZWwuZGF0YSgpLAorICAgIH07CisKKyAgICByZXR1cm4gQ29tcHV0ZVBh
c3NFbmNvZGVySW1wbDo6Y3JlYXRlKHdncHVDb21tYW5kRW5jb2RlckJlZ2luQ29tcHV0ZVBhc3Mo
bV9iYWNraW5nLCAmYmFja2luZ0Rlc2NyaXB0b3IpKTsKK30KKwordm9pZCBDb21tYW5kRW5jb2Rl
ckltcGw6OmNvcHlCdWZmZXJUb0J1ZmZlcigKKyAgICBjb25zdCBCdWZmZXImIHNvdXJjZSwKKyAg
ICBTaXplNjQgc291cmNlT2Zmc2V0LAorICAgIGNvbnN0IEJ1ZmZlciYgZGVzdGluYXRpb24sCisg
ICAgU2l6ZTY0IGRlc3RpbmF0aW9uT2Zmc2V0LAorICAgIFNpemU2NCBzaXplKQoreworICAgIHdn
cHVDb21tYW5kRW5jb2RlckNvcHlCdWZmZXJUb0J1ZmZlcihtX2JhY2tpbmcsIHN0YXRpY19jYXN0
PGNvbnN0IEJ1ZmZlckltcGwmPihzb3VyY2UpLmJhY2tpbmcoKSwgc291cmNlT2Zmc2V0LCBzdGF0
aWNfY2FzdDxjb25zdCBCdWZmZXJJbXBsJj4oZGVzdGluYXRpb24pLmJhY2tpbmcoKSwgZGVzdGlu
YXRpb25PZmZzZXQsIHNpemUpOworfQorCit2b2lkIENvbW1hbmRFbmNvZGVySW1wbDo6Y29weUJ1
ZmZlclRvVGV4dHVyZSgKKyAgICBjb25zdCBJbWFnZUNvcHlCdWZmZXImIHNvdXJjZSwKKyAgICBj
b25zdCBJbWFnZUNvcHlUZXh0dXJlJiBkZXN0aW5hdGlvbiwKKyAgICBjb25zdCBFeHRlbnQzRCYg
Y29weVNpemUpCit7CisgICAgV0dQVUltYWdlQ29weUJ1ZmZlciBiYWNraW5nU291cmNlIHsKKyAg
ICAgICAgbnVsbHB0ciwgeworICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgIHNvdXJj
ZS5vZmZzZXQsCisgICAgICAgICAgICBzb3VyY2UuYnl0ZXNQZXJSb3cudmFsdWVfb3IoMCksCisg
ICAgICAgICAgICBzb3VyY2Uucm93c1BlckltYWdlLnZhbHVlX29yKDApLAorICAgICAgICB9LAor
ICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBCdWZmZXJJbXBsJj4oc291cmNlLmJ1ZmZlcikuYmFj
a2luZygpLAorICAgIH07CisKKyAgICBXR1BVSW1hZ2VDb3B5VGV4dHVyZSBiYWNraW5nRGVzdGlu
YXRpb24geworICAgICAgICBudWxscHRyLAorICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBUZXh0
dXJlSW1wbCY+KGRlc3RpbmF0aW9uLnRleHR1cmUpLmJhY2tpbmcoKSwKKyAgICAgICAgZGVzdGlu
YXRpb24ubWlwTGV2ZWwsCisgICAgICAgIGRlc3RpbmF0aW9uLm9yaWdpbiA/IGNvbnZlcnRUb0Jh
Y2tpbmcoKmRlc3RpbmF0aW9uLm9yaWdpbikgOiBXR1BVT3JpZ2luM0QgeyAwLCAwLCAwIH0sCisg
ICAgICAgIGNvbnZlcnRUb0JhY2tpbmcoZGVzdGluYXRpb24uYXNwZWN0KSwKKyAgICB9OworCisg
ICAgV0dQVUV4dGVudDNEIGJhY2tpbmdDb3B5U2l6ZSA9IGNvbnZlcnRUb0JhY2tpbmcoY29weVNp
emUpOworCisgICAgd2dwdUNvbW1hbmRFbmNvZGVyQ29weUJ1ZmZlclRvVGV4dHVyZShtX2JhY2tp
bmcsICZiYWNraW5nU291cmNlLCAmYmFja2luZ0Rlc3RpbmF0aW9uLCAmYmFja2luZ0NvcHlTaXpl
KTsKK30KKwordm9pZCBDb21tYW5kRW5jb2RlckltcGw6OmNvcHlUZXh0dXJlVG9CdWZmZXIoCisg
ICAgY29uc3QgSW1hZ2VDb3B5VGV4dHVyZSYgc291cmNlLAorICAgIGNvbnN0IEltYWdlQ29weUJ1
ZmZlciYgZGVzdGluYXRpb24sCisgICAgY29uc3QgRXh0ZW50M0QmIGNvcHlTaXplKQoreworICAg
IFdHUFVJbWFnZUNvcHlUZXh0dXJlIGJhY2tpbmdTb3VyY2UgeworICAgICAgICBudWxscHRyLAor
ICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBUZXh0dXJlSW1wbCY+KHNvdXJjZS50ZXh0dXJlKS5i
YWNraW5nKCksCisgICAgICAgIHNvdXJjZS5taXBMZXZlbCwKKyAgICAgICAgc291cmNlLm9yaWdp
biA/IGNvbnZlcnRUb0JhY2tpbmcoKnNvdXJjZS5vcmlnaW4pIDogV0dQVU9yaWdpbjNEIHsgMCwg
MCwgMCB9LAorICAgICAgICBjb252ZXJ0VG9CYWNraW5nKHNvdXJjZS5hc3BlY3QpLAorICAgIH07
CisKKyAgICBXR1BVSW1hZ2VDb3B5QnVmZmVyIGJhY2tpbmdEZXN0aW5hdGlvbiB7CisgICAgICAg
IG51bGxwdHIsIHsKKyAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICBkZXN0aW5hdGlv
bi5vZmZzZXQsCisgICAgICAgICAgICBkZXN0aW5hdGlvbi5ieXRlc1BlclJvdy52YWx1ZV9vcigw
KSwKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uLnJvd3NQZXJJbWFnZS52YWx1ZV9vcigwKSwKKyAg
ICAgICAgfSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgQnVmZmVySW1wbCY+KGRlc3RpbmF0
aW9uLmJ1ZmZlcikuYmFja2luZygpLAorICAgIH07CisKKyAgICBXR1BVRXh0ZW50M0QgYmFja2lu
Z0NvcHlTaXplID0gY29udmVydFRvQmFja2luZyhjb3B5U2l6ZSk7CisKKyAgICB3Z3B1Q29tbWFu
ZEVuY29kZXJDb3B5VGV4dHVyZVRvQnVmZmVyKG1fYmFja2luZywgJmJhY2tpbmdTb3VyY2UsICZi
YWNraW5nRGVzdGluYXRpb24sICZiYWNraW5nQ29weVNpemUpOworfQorCit2b2lkIENvbW1hbmRF
bmNvZGVySW1wbDo6Y29weVRleHR1cmVUb1RleHR1cmUoCisgICAgY29uc3QgSW1hZ2VDb3B5VGV4
dHVyZSYgc291cmNlLAorICAgIGNvbnN0IEltYWdlQ29weVRleHR1cmUmIGRlc3RpbmF0aW9uLAor
ICAgIGNvbnN0IEV4dGVudDNEJiBjb3B5U2l6ZSkKK3sKKyAgICBXR1BVSW1hZ2VDb3B5VGV4dHVy
ZSBiYWNraW5nU291cmNlIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgc3RhdGljX2Nhc3Q8
Y29uc3QgVGV4dHVyZUltcGwmPihzb3VyY2UudGV4dHVyZSkuYmFja2luZygpLAorICAgICAgICBz
b3VyY2UubWlwTGV2ZWwsCisgICAgICAgIHNvdXJjZS5vcmlnaW4gPyBjb252ZXJ0VG9CYWNraW5n
KCpzb3VyY2Uub3JpZ2luKSA6IFdHUFVPcmlnaW4zRCB7IDAsIDAsIDAgfSwKKyAgICAgICAgY29u
dmVydFRvQmFja2luZyhzb3VyY2UuYXNwZWN0KSwKKyAgICB9OworCisgICAgV0dQVUltYWdlQ29w
eVRleHR1cmUgYmFja2luZ0Rlc3RpbmF0aW9uIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAg
c3RhdGljX2Nhc3Q8Y29uc3QgVGV4dHVyZUltcGwmPihkZXN0aW5hdGlvbi50ZXh0dXJlKS5iYWNr
aW5nKCksCisgICAgICAgIGRlc3RpbmF0aW9uLm1pcExldmVsLAorICAgICAgICBkZXN0aW5hdGlv
bi5vcmlnaW4gPyBjb252ZXJ0VG9CYWNraW5nKCpkZXN0aW5hdGlvbi5vcmlnaW4pIDogV0dQVU9y
aWdpbjNEIHsgMCwgMCwgMCB9LAorICAgICAgICBjb252ZXJ0VG9CYWNraW5nKGRlc3RpbmF0aW9u
LmFzcGVjdCksCisgICAgfTsKKworICAgIFdHUFVFeHRlbnQzRCBiYWNraW5nQ29weVNpemUgPSBj
b252ZXJ0VG9CYWNraW5nKGNvcHlTaXplKTsKKworICAgIHdncHVDb21tYW5kRW5jb2RlckNvcHlU
ZXh0dXJlVG9UZXh0dXJlKG1fYmFja2luZywgJmJhY2tpbmdTb3VyY2UsICZiYWNraW5nRGVzdGlu
YXRpb24sICZiYWNraW5nQ29weVNpemUpOworfQorCit2b2lkIENvbW1hbmRFbmNvZGVySW1wbDo6
ZmlsbEJ1ZmZlcigKKyAgICBjb25zdCBCdWZmZXImIGRlc3RpbmF0aW9uLAorICAgIFNpemU2NCBk
ZXN0aW5hdGlvbk9mZnNldCwKKyAgICBTaXplNjQgc2l6ZSkKK3sKKyAgICB3Z3B1Q29tbWFuZEVu
Y29kZXJGaWxsQnVmZmVyKG1fYmFja2luZywgc3RhdGljX2Nhc3Q8Y29uc3QgQnVmZmVySW1wbCY+
KGRlc3RpbmF0aW9uKS5iYWNraW5nKCksIGRlc3RpbmF0aW9uT2Zmc2V0LCBzaXplKTsKK30KKwor
dm9pZCBDb21tYW5kRW5jb2RlckltcGw6OnB1c2hEZWJ1Z0dyb3VwKFN0cmluZyYmIGdyb3VwTGFi
ZWwpCit7CisgICAgd2dwdUNvbW1hbmRFbmNvZGVyUHVzaERlYnVnR3JvdXAobV9iYWNraW5nLCBn
cm91cExhYmVsLnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIENvbW1hbmRFbmNvZGVySW1wbDo6
cG9wRGVidWdHcm91cCgpCit7CisgICAgd2dwdUNvbW1hbmRFbmNvZGVyUG9wRGVidWdHcm91cCht
X2JhY2tpbmcpOworfQorCit2b2lkIENvbW1hbmRFbmNvZGVySW1wbDo6aW5zZXJ0RGVidWdNYXJr
ZXIoU3RyaW5nJiYgbWFya2VyTGFiZWwpCit7CisgICAgd2dwdUNvbW1hbmRFbmNvZGVySW5zZXJ0
RGVidWdNYXJrZXIobV9iYWNraW5nLCBtYXJrZXJMYWJlbC51dGY4KCkuZGF0YSgpKTsKK30KKwor
dm9pZCBDb21tYW5kRW5jb2RlckltcGw6OndyaXRlVGltZXN0YW1wKGNvbnN0IFF1ZXJ5U2V0JiBx
dWVyeVNldCwgU2l6ZTMyIHF1ZXJ5SW5kZXgpCit7CisgICAgd2dwdUNvbW1hbmRFbmNvZGVyV3Jp
dGVUaW1lc3RhbXAobV9iYWNraW5nLCBzdGF0aWNfY2FzdDxjb25zdCBRdWVyeVNldEltcGwmPihx
dWVyeVNldCkuYmFja2luZygpLCBxdWVyeUluZGV4KTsKK30KKwordm9pZCBDb21tYW5kRW5jb2Rl
ckltcGw6OnJlc29sdmVRdWVyeVNldCgKKyAgICBjb25zdCBRdWVyeVNldCYgcXVlcnlTZXQsCisg
ICAgU2l6ZTMyIGZpcnN0UXVlcnksCisgICAgU2l6ZTMyIHF1ZXJ5Q291bnQsCisgICAgY29uc3Qg
QnVmZmVyJiBkZXN0aW5hdGlvbiwKKyAgICBTaXplNjQgZGVzdGluYXRpb25PZmZzZXQpCit7Cisg
ICAgd2dwdUNvbW1hbmRFbmNvZGVyUmVzb2x2ZVF1ZXJ5U2V0KG1fYmFja2luZywgc3RhdGljX2Nh
c3Q8Y29uc3QgUXVlcnlTZXRJbXBsJj4ocXVlcnlTZXQpLmJhY2tpbmcoKSwgZmlyc3RRdWVyeSwg
cXVlcnlDb3VudCwgc3RhdGljX2Nhc3Q8Y29uc3QgQnVmZmVySW1wbCY+KGRlc3RpbmF0aW9uKS5i
YWNraW5nKCksIGRlc3RpbmF0aW9uT2Zmc2V0KTsKK30KKworUmVmPENvbW1hbmRCdWZmZXI+IENv
bW1hbmRFbmNvZGVySW1wbDo6ZmluaXNoKGNvbnN0IENvbW1hbmRCdWZmZXJEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yKQoreworICAgIGF1dG8gbGFiZWwgPSBkZXNjcmlwdG9yLmxhYmVsLnV0ZjgoKTsK
KworICAgIFdHUFVDb21tYW5kQnVmZmVyRGVzY3JpcHRvciBiYWNraW5nRGVzY3JpcHRvciB7Cisg
ICAgICAgIG51bGxwdHIsCisgICAgICAgIGxhYmVsLmRhdGEoKSwKKyAgICB9OworCisgICAgcmV0
dXJuIENvbW1hbmRCdWZmZXJJbXBsOjpjcmVhdGUod2dwdUNvbW1hbmRFbmNvZGVyRmluaXNoKG1f
YmFja2luZywgJmJhY2tpbmdEZXNjcmlwdG9yKSk7Cit9CisKK3ZvaWQgQ29tbWFuZEVuY29kZXJJ
bXBsOjpzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYgbGFiZWwpCit7CisgICAgd2dwdUNv
bW1hbmRFbmNvZGVyU2V0TGFiZWwobV9iYWNraW5nLCBsYWJlbC51dGY4KCkuZGF0YSgpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tbWFu
ZEVuY29kZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9J
bXBsL1dlYkdQVUNvbW1hbmRFbmNvZGVySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4MGFhYWM4NjA3MTJl
NGM3NWFjZTE5MTc3MTc2YzQxNTI5YWE4MmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbW1hbmRFbmNvZGVySW1w
bC5oCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJXZWJHUFVDb21tYW5kRW5jb2Rlci5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFUuaD4K
KworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworY2xhc3MgQ29tbWFuZEVu
Y29kZXJJbXBsIGZpbmFsIDogcHVibGljIENvbW1hbmRFbmNvZGVyIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUmVmPENvbW1hbmRFbmNvZGVySW1wbD4gY3JlYXRlKFdHUFVDb21tYW5kRW5jb2RlciBD
b21tYW5kRW5jb2RlcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbW1h
bmRFbmNvZGVySW1wbChDb21tYW5kRW5jb2RlcikpOworICAgIH0KKworICAgIHZpcnR1YWwgfkNv
bW1hbmRFbmNvZGVySW1wbCgpOworCisgICAgV0dQVUNvbW1hbmRFbmNvZGVyIGJhY2tpbmcoKSBj
b25zdCB7IHJldHVybiBtX2JhY2tpbmc7IH0KKworcHJpdmF0ZToKKyAgICBDb21tYW5kRW5jb2Rl
ckltcGwoV0dQVUNvbW1hbmRFbmNvZGVyKTsKKworICAgIENvbW1hbmRFbmNvZGVySW1wbChjb25z
dCBDb21tYW5kRW5jb2RlckltcGwmKSA9IGRlbGV0ZTsKKyAgICBDb21tYW5kRW5jb2RlckltcGwo
Q29tbWFuZEVuY29kZXJJbXBsJiYpID0gZGVsZXRlOworICAgIENvbW1hbmRFbmNvZGVySW1wbCYg
b3BlcmF0b3I9KGNvbnN0IENvbW1hbmRFbmNvZGVySW1wbCYpID0gZGVsZXRlOworICAgIENvbW1h
bmRFbmNvZGVySW1wbCYgb3BlcmF0b3I9KENvbW1hbmRFbmNvZGVySW1wbCYmKSA9IGRlbGV0ZTsK
KworICAgIFJlZjxSZW5kZXJQYXNzRW5jb2Rlcj4gYmVnaW5SZW5kZXJQYXNzKGNvbnN0IFJlbmRl
clBhc3NEZXNjcmlwdG9yJikgZmluYWw7CisgICAgUmVmPENvbXB1dGVQYXNzRW5jb2Rlcj4gYmVn
aW5Db21wdXRlUGFzcyhjb25zdCBzdGQ6Om9wdGlvbmFsPENvbXB1dGVQYXNzRGVzY3JpcHRvcj4m
KSBmaW5hbDsKKworICAgIHZvaWQgY29weUJ1ZmZlclRvQnVmZmVyKAorICAgICAgICBjb25zdCBC
dWZmZXImIHNvdXJjZSwKKyAgICAgICAgU2l6ZTY0IHNvdXJjZU9mZnNldCwKKyAgICAgICAgY29u
c3QgQnVmZmVyJiBkZXN0aW5hdGlvbiwKKyAgICAgICAgU2l6ZTY0IGRlc3RpbmF0aW9uT2Zmc2V0
LAorICAgICAgICBTaXplNjQpIGZpbmFsOworCisgICAgdm9pZCBjb3B5QnVmZmVyVG9UZXh0dXJl
KAorICAgICAgICBjb25zdCBJbWFnZUNvcHlCdWZmZXImIHNvdXJjZSwKKyAgICAgICAgY29uc3Qg
SW1hZ2VDb3B5VGV4dHVyZSYgZGVzdGluYXRpb24sCisgICAgICAgIGNvbnN0IEV4dGVudDNEJiBj
b3B5U2l6ZSkgZmluYWw7CisKKyAgICB2b2lkIGNvcHlUZXh0dXJlVG9CdWZmZXIoCisgICAgICAg
IGNvbnN0IEltYWdlQ29weVRleHR1cmUmIHNvdXJjZSwKKyAgICAgICAgY29uc3QgSW1hZ2VDb3B5
QnVmZmVyJiBkZXN0aW5hdGlvbiwKKyAgICAgICAgY29uc3QgRXh0ZW50M0QmIGNvcHlTaXplKSBm
aW5hbDsKKworICAgIHZvaWQgY29weVRleHR1cmVUb1RleHR1cmUoCisgICAgICAgIGNvbnN0IElt
YWdlQ29weVRleHR1cmUmIHNvdXJjZSwKKyAgICAgICAgY29uc3QgSW1hZ2VDb3B5VGV4dHVyZSYg
ZGVzdGluYXRpb24sCisgICAgICAgIGNvbnN0IEV4dGVudDNEJiBjb3B5U2l6ZSkgZmluYWw7CisK
KyAgICB2b2lkIGZpbGxCdWZmZXIoCisgICAgICAgIGNvbnN0IEJ1ZmZlciYgZGVzdGluYXRpb24s
CisgICAgICAgIFNpemU2NCBkZXN0aW5hdGlvbk9mZnNldCwKKyAgICAgICAgU2l6ZTY0KSBmaW5h
bDsKKworICAgIHZvaWQgcHVzaERlYnVnR3JvdXAoU3RyaW5nJiYgZ3JvdXBMYWJlbCkgZmluYWw7
CisgICAgdm9pZCBwb3BEZWJ1Z0dyb3VwKCkgZmluYWw7CisgICAgdm9pZCBpbnNlcnREZWJ1Z01h
cmtlcihTdHJpbmcmJiBtYXJrZXJMYWJlbCkgZmluYWw7CisKKyAgICB2b2lkIHdyaXRlVGltZXN0
YW1wKGNvbnN0IFF1ZXJ5U2V0JiwgU2l6ZTMyIHF1ZXJ5SW5kZXgpIGZpbmFsOworCisgICAgdm9p
ZCByZXNvbHZlUXVlcnlTZXQoCisgICAgICAgIGNvbnN0IFF1ZXJ5U2V0JiwKKyAgICAgICAgU2l6
ZTMyIGZpcnN0UXVlcnksCisgICAgICAgIFNpemUzMiBxdWVyeUNvdW50LAorICAgICAgICBjb25z
dCBCdWZmZXImIGRlc3RpbmF0aW9uLAorICAgICAgICBTaXplNjQgZGVzdGluYXRpb25PZmZzZXQp
IGZpbmFsOworCisgICAgUmVmPENvbW1hbmRCdWZmZXI+IGZpbmlzaChjb25zdCBDb21tYW5kQnVm
ZmVyRGVzY3JpcHRvciYpIGZpbmFsOworCisgICAgdm9pZCBzZXRMYWJlbEludGVybmFsKGNvbnN0
IFN0cmluZyYpIGZpbmFsOworCisgICAgV0dQVUNvbW1hbmRFbmNvZGVyIG1fYmFja2luZyB7IG51
bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BV
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBs
L1dlYkdQVUNvbXB1dGVQYXNzRW5jb2RlckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb21wdXRlUGFzc0VuY29kZXJJbXBsLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hYmMxNmQ0NGE4YTM0YTk4YjE1YWRjMTJiOTcwYmUxOGJhOGUyZWJhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1w
bC9XZWJHUFVDb21wdXRlUGFzc0VuY29kZXJJbXBsLmNwcApAQCAtMCwwICsxLDExNyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVDb21wdXRlUGFz
c0VuY29kZXJJbXBsLmgiCisKKyNpbmNsdWRlICJXZWJHUFVCaW5kR3JvdXBJbXBsLmgiCisjaW5j
bHVkZSAiV2ViR1BVQnVmZmVySW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVUNvbXB1dGVQaXBlbGlu
ZUltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVRdWVyeVNldEltcGwuaCIKKyNpbmNsdWRlIDxXZWJH
UFUvV2ViR1BVRXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisK
K0NvbXB1dGVQYXNzRW5jb2RlckltcGw6OkNvbXB1dGVQYXNzRW5jb2RlckltcGwoV0dQVUNvbXB1
dGVQYXNzRW5jb2RlciBjb21wdXRlUGFzc0VuY29kZXIpCisgICAgOiBtX2JhY2tpbmcoY29tcHV0
ZVBhc3NFbmNvZGVyKQoreworfQorCitDb21wdXRlUGFzc0VuY29kZXJJbXBsOjp+Q29tcHV0ZVBh
c3NFbmNvZGVySW1wbCgpCit7CisgICAgd2dwdUNvbXB1dGVQYXNzRW5jb2RlclJlbGVhc2UobV9i
YWNraW5nKTsKK30KKwordm9pZCBDb21wdXRlUGFzc0VuY29kZXJJbXBsOjpzZXRQaXBlbGluZShj
b25zdCBDb21wdXRlUGlwZWxpbmUmIGNvbXB1dGVQaXBlbGluZSkKK3sKKyAgICB3Z3B1Q29tcHV0
ZVBhc3NFbmNvZGVyU2V0UGlwZWxpbmUobV9iYWNraW5nLCBzdGF0aWNfY2FzdDxjb25zdCBDb21w
dXRlUGlwZWxpbmVJbXBsJj4oY29tcHV0ZVBpcGVsaW5lKS5iYWNraW5nKCkpOworfQorCit2b2lk
IENvbXB1dGVQYXNzRW5jb2RlckltcGw6OmRpc3BhdGNoKFNpemUzMiB4LCBzdGQ6Om9wdGlvbmFs
PFNpemUzMj4geSwgc3RkOjpvcHRpb25hbDxTaXplMzI+IHopCit7CisgICAgd2dwdUNvbXB1dGVQ
YXNzRW5jb2RlckRpc3BhdGNoKG1fYmFja2luZywgeCwgeS52YWx1ZV9vcigxKSwgei52YWx1ZV9v
cigxKSk7Cit9CisKK3ZvaWQgQ29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6ZGlzcGF0Y2hJbmRpcmVj
dChjb25zdCBCdWZmZXImIGluZGlyZWN0QnVmZmVyLCBTaXplNjQgaW5kaXJlY3RPZmZzZXQpCit7
CisgICAgd2dwdUNvbXB1dGVQYXNzRW5jb2RlckRpc3BhdGNoSW5kaXJlY3QobV9iYWNraW5nLCBz
dGF0aWNfY2FzdDxjb25zdCBCdWZmZXJJbXBsJj4oaW5kaXJlY3RCdWZmZXIpLmJhY2tpbmcoKSwg
aW5kaXJlY3RPZmZzZXQpOworfQorCit2b2lkIENvbXB1dGVQYXNzRW5jb2RlckltcGw6OmJlZ2lu
UGlwZWxpbmVTdGF0aXN0aWNzUXVlcnkoY29uc3QgUXVlcnlTZXQmIHF1ZXJ5U2V0LCBTaXplMzIg
cXVlcnlJbmRleCkKK3sKKyAgICB3Z3B1Q29tcHV0ZVBhc3NFbmNvZGVyQmVnaW5QaXBlbGluZVN0
YXRpc3RpY3NRdWVyeShtX2JhY2tpbmcsIHN0YXRpY19jYXN0PGNvbnN0IFF1ZXJ5U2V0SW1wbCY+
KHF1ZXJ5U2V0KS5iYWNraW5nKCksIHF1ZXJ5SW5kZXgpOworfQorCit2b2lkIENvbXB1dGVQYXNz
RW5jb2RlckltcGw6OmVuZFBpcGVsaW5lU3RhdGlzdGljc1F1ZXJ5KCkKK3sKKyAgICB3Z3B1Q29t
cHV0ZVBhc3NFbmNvZGVyRW5kUGlwZWxpbmVTdGF0aXN0aWNzUXVlcnkobV9iYWNraW5nKTsKK30K
Kwordm9pZCBDb21wdXRlUGFzc0VuY29kZXJJbXBsOjplbmRQYXNzKCkKK3sKKyAgICB3Z3B1Q29t
cHV0ZVBhc3NFbmNvZGVyRW5kUGFzcyhtX2JhY2tpbmcpOworfQorCit2b2lkIENvbXB1dGVQYXNz
RW5jb2RlckltcGw6OnNldEJpbmRHcm91cChJbmRleDMyIGluZGV4LCBjb25zdCBCaW5kR3JvdXAm
IGJpbmRHcm91cCwKKyAgICBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxCdWZmZXJEeW5hbWljT2Zmc2V0
Pj4mJiBvZmZzZXRzKQoreworICAgIGF1dG8gYmFja2luZ09mZnNldHMgPSBvZmZzZXRzLnZhbHVl
X29yKFZlY3RvcjxCdWZmZXJEeW5hbWljT2Zmc2V0PiB7IH0pOworICAgIHdncHVDb21wdXRlUGFz
c0VuY29kZXJTZXRCaW5kR3JvdXAobV9iYWNraW5nLCBpbmRleCwgc3RhdGljX2Nhc3Q8Y29uc3Qg
QmluZEdyb3VwSW1wbCY+KGJpbmRHcm91cCkuYmFja2luZygpLCBzdGF0aWNfY2FzdDx1aW50MzJf
dD4oYmFja2luZ09mZnNldHMuc2l6ZSgpKSwgYmFja2luZ09mZnNldHMuZGF0YSgpKTsKK30KKwor
dm9pZCBDb21wdXRlUGFzc0VuY29kZXJJbXBsOjpzZXRCaW5kR3JvdXAoSW5kZXgzMiBpbmRleCwg
Y29uc3QgQmluZEdyb3VwJiBiaW5kR3JvdXAsCisgICAgY29uc3QgdWludDMyX3QqIGR5bmFtaWNP
ZmZzZXRzQXJyYXlCdWZmZXIsCisgICAgc2l6ZV90IGR5bmFtaWNPZmZzZXRzQXJyYXlCdWZmZXJM
ZW5ndGgsCisgICAgU2l6ZTY0IGR5bmFtaWNPZmZzZXRzRGF0YVN0YXJ0LAorICAgIFNpemUzMiBk
eW5hbWljT2Zmc2V0c0RhdGFMZW5ndGgpCit7CisgICAgVU5VU0VEX1BBUkFNKGR5bmFtaWNPZmZz
ZXRzQXJyYXlCdWZmZXJMZW5ndGgpOworICAgIC8vIEZJWE1FOiBVc2UgY2hlY2tlZCBhbGdlYnJh
LgorICAgIHdncHVDb21wdXRlUGFzc0VuY29kZXJTZXRCaW5kR3JvdXAobV9iYWNraW5nLCBpbmRl
eCwgc3RhdGljX2Nhc3Q8Y29uc3QgQmluZEdyb3VwSW1wbCY+KGJpbmRHcm91cCkuYmFja2luZygp
LCBkeW5hbWljT2Zmc2V0c0RhdGFMZW5ndGgsIGR5bmFtaWNPZmZzZXRzQXJyYXlCdWZmZXIgKyBk
eW5hbWljT2Zmc2V0c0RhdGFTdGFydCk7Cit9CisKK3ZvaWQgQ29tcHV0ZVBhc3NFbmNvZGVySW1w
bDo6cHVzaERlYnVnR3JvdXAoU3RyaW5nJiYgZ3JvdXBMYWJlbCkKK3sKKyAgICB3Z3B1Q29tcHV0
ZVBhc3NFbmNvZGVyUHVzaERlYnVnR3JvdXAobV9iYWNraW5nLCBncm91cExhYmVsLnV0ZjgoKS5k
YXRhKCkpOworfQorCit2b2lkIENvbXB1dGVQYXNzRW5jb2RlckltcGw6OnBvcERlYnVnR3JvdXAo
KQoreworICAgIHdncHVDb21wdXRlUGFzc0VuY29kZXJQb3BEZWJ1Z0dyb3VwKG1fYmFja2luZyk7
Cit9CisKK3ZvaWQgQ29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6aW5zZXJ0RGVidWdNYXJrZXIoU3Ry
aW5nJiYgbWFya2VyTGFiZWwpCit7CisgICAgd2dwdUNvbXB1dGVQYXNzRW5jb2Rlckluc2VydERl
YnVnTWFya2VyKG1fYmFja2luZywgbWFya2VyTGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK3Zv
aWQgQ29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcm
IGxhYmVsKQoreworICAgIHdncHVDb21wdXRlUGFzc0VuY29kZXJTZXRMYWJlbChtX2JhY2tpbmcs
IGxhYmVsLnV0ZjgoKS5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFt
ZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGlj
cy9XZWJHUFUvSW1wbC9XZWJHUFVDb21wdXRlUGFzc0VuY29kZXJJbXBsLmggYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbXB1dGVQYXNzRW5jb2Rl
ckltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xYmU4YWRkZjIzZmY3YWFmYzdkNmVhMDU2MzA4NTc3ZWUyZGU5
MGJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9X
ZWJHUFUvSW1wbC9XZWJHUFVDb21wdXRlUGFzc0VuY29kZXJJbXBsLmgKQEAgLTAsMCArMSw4MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVQ29tcHV0ZVBh
c3NFbmNvZGVyLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorCituYW1lc3BhY2UgUEFM
IHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBDb21wdXRlUGFzc0VuY29kZXJJbXBsIGZp
bmFsIDogcHVibGljIENvbXB1dGVQYXNzRW5jb2RlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZjxDb21wdXRlUGFzc0VuY29kZXJJbXBsPiBjcmVhdGUoV0dQVUNvbXB1dGVQYXNzRW5jb2RlciBj
b21wdXRlUGFzc0VuY29kZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBD
b21wdXRlUGFzc0VuY29kZXJJbXBsKGNvbXB1dGVQYXNzRW5jb2RlcikpOworICAgIH0KKworICAg
IHZpcnR1YWwgfkNvbXB1dGVQYXNzRW5jb2RlckltcGwoKTsKKworICAgIFdHUFVDb21wdXRlUGFz
c0VuY29kZXIgYmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRl
OgorICAgIENvbXB1dGVQYXNzRW5jb2RlckltcGwoV0dQVUNvbXB1dGVQYXNzRW5jb2Rlcik7CisK
KyAgICBDb21wdXRlUGFzc0VuY29kZXJJbXBsKGNvbnN0IENvbXB1dGVQYXNzRW5jb2RlckltcGwm
KSA9IGRlbGV0ZTsKKyAgICBDb21wdXRlUGFzc0VuY29kZXJJbXBsKENvbXB1dGVQYXNzRW5jb2Rl
ckltcGwmJikgPSBkZWxldGU7CisgICAgQ29tcHV0ZVBhc3NFbmNvZGVySW1wbCYgb3BlcmF0b3I9
KGNvbnN0IENvbXB1dGVQYXNzRW5jb2RlckltcGwmKSA9IGRlbGV0ZTsKKyAgICBDb21wdXRlUGFz
c0VuY29kZXJJbXBsJiBvcGVyYXRvcj0oQ29tcHV0ZVBhc3NFbmNvZGVySW1wbCYmKSA9IGRlbGV0
ZTsKKworICAgIHZvaWQgc2V0UGlwZWxpbmUoY29uc3QgQ29tcHV0ZVBpcGVsaW5lJikgZmluYWw7
CisgICAgdm9pZCBkaXNwYXRjaChTaXplMzIgeCwgc3RkOjpvcHRpb25hbDxTaXplMzI+IHksIHN0
ZDo6b3B0aW9uYWw8U2l6ZTMyPikgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaEluZGlyZWN0KGNv
bnN0IEJ1ZmZlciYgaW5kaXJlY3RCdWZmZXIsIFNpemU2NCBpbmRpcmVjdE9mZnNldCkgZmluYWw7
CisKKyAgICB2b2lkIGJlZ2luUGlwZWxpbmVTdGF0aXN0aWNzUXVlcnkoY29uc3QgUXVlcnlTZXQm
LCBTaXplMzIgcXVlcnlJbmRleCkgZmluYWw7CisgICAgdm9pZCBlbmRQaXBlbGluZVN0YXRpc3Rp
Y3NRdWVyeSgpIGZpbmFsOworCisgICAgdm9pZCBlbmRQYXNzKCkgZmluYWw7CisKKyAgICB2b2lk
IHNldEJpbmRHcm91cChJbmRleDMyLCBjb25zdCBCaW5kR3JvdXAmLAorICAgICAgICBzdGQ6Om9w
dGlvbmFsPFZlY3RvcjxCdWZmZXJEeW5hbWljT2Zmc2V0Pj4mJikgZmluYWw7CisKKyAgICB2b2lk
IHNldEJpbmRHcm91cChJbmRleDMyLCBjb25zdCBCaW5kR3JvdXAmLAorICAgICAgICBjb25zdCB1
aW50MzJfdCogZHluYW1pY09mZnNldHNBcnJheUJ1ZmZlciwKKyAgICAgICAgc2l6ZV90IGR5bmFt
aWNPZmZzZXRzQXJyYXlCdWZmZXJMZW5ndGgsCisgICAgICAgIFNpemU2NCBkeW5hbWljT2Zmc2V0
c0RhdGFTdGFydCwKKyAgICAgICAgU2l6ZTMyIGR5bmFtaWNPZmZzZXRzRGF0YUxlbmd0aCkgZmlu
YWw7CisKKyAgICB2b2lkIHB1c2hEZWJ1Z0dyb3VwKFN0cmluZyYmIGdyb3VwTGFiZWwpIGZpbmFs
OworICAgIHZvaWQgcG9wRGVidWdHcm91cCgpIGZpbmFsOworICAgIHZvaWQgaW5zZXJ0RGVidWdN
YXJrZXIoU3RyaW5nJiYgbWFya2VyTGFiZWwpIGZpbmFsOworCisgICAgdm9pZCBzZXRMYWJlbElu
dGVybmFsKGNvbnN0IFN0cmluZyYpIGZpbmFsOworCisgICAgV0dQVUNvbXB1dGVQYXNzRW5jb2Rl
ciBtX2JhY2tpbmcgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8g
bmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tcHV0ZVBpcGVsaW5l
SW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMmE4ZTk3M2Q0YWNiNzZiYmUxYWExZDBhMWY4YjM0Njk2M2Ni
ODRhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3Mv
V2ViR1BVL0ltcGwvV2ViR1BVQ29tcHV0ZVBpcGVsaW5lSW1wbC5jcHAKQEAgLTAsMCArMSw1NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVDb21w
dXRlUGlwZWxpbmVJbXBsLmgiCisKKyNpbmNsdWRlICJXZWJHUFVCaW5kR3JvdXBMYXlvdXRJbXBs
LmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25h
bWVzcGFjZSBXZWJHUFUgeworCitDb21wdXRlUGlwZWxpbmVJbXBsOjpDb21wdXRlUGlwZWxpbmVJ
bXBsKFdHUFVDb21wdXRlUGlwZWxpbmUgY29tcHV0ZVBpcGVsaW5lKQorICAgIDogbV9iYWNraW5n
KGNvbXB1dGVQaXBlbGluZSkKK3sKK30KKworQ29tcHV0ZVBpcGVsaW5lSW1wbDo6fkNvbXB1dGVQ
aXBlbGluZUltcGwoKQoreworICAgIHdncHVDb21wdXRlUGlwZWxpbmVSZWxlYXNlKG1fYmFja2lu
Zyk7Cit9CisKK1JlZjxCaW5kR3JvdXBMYXlvdXQ+IENvbXB1dGVQaXBlbGluZUltcGw6OmdldEJp
bmRHcm91cExheW91dCh1aW50MzJfdCBpbmRleCkKK3sKKyAgICByZXR1cm4gQmluZEdyb3VwTGF5
b3V0SW1wbDo6Y3JlYXRlKHdncHVDb21wdXRlUGlwZWxpbmVHZXRCaW5kR3JvdXBMYXlvdXQobV9i
YWNraW5nLCBpbmRleCkpOworfQorCit2b2lkIENvbXB1dGVQaXBlbGluZUltcGw6OnNldExhYmVs
SW50ZXJuYWwoY29uc3QgU3RyaW5nJiBsYWJlbCkKK3sKKyAgICB3Z3B1Q29tcHV0ZVBpcGVsaW5l
U2V0TGFiZWwobV9iYWNraW5nLCBsYWJlbC51dGY4KCkuZGF0YSgpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tcHV0ZVBpcGVsaW5lSW1w
bC5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVD
b21wdXRlUGlwZWxpbmVJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDQ2MjZjZmE0MGUyMmUyOTIzZGI1YmJm
ZmI1ZjE0MGFkNmFmYWFjYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tcHV0ZVBpcGVsaW5lSW1wbC5oCkBAIC0w
LDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYkdQ
VUNvbXB1dGVQaXBlbGluZS5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFUuaD4KKworbmFtZXNw
YWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworY2xhc3MgQ29tcHV0ZVBpcGVsaW5lSW1w
bCBmaW5hbCA6IHB1YmxpYyBDb21wdXRlUGlwZWxpbmUgeworcHVibGljOgorICAgIHN0YXRpYyBS
ZWY8Q29tcHV0ZVBpcGVsaW5lSW1wbD4gY3JlYXRlKFdHUFVDb21wdXRlUGlwZWxpbmUgY29tcHV0
ZVBpcGVsaW5lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29tcHV0ZVBp
cGVsaW5lSW1wbChjb21wdXRlUGlwZWxpbmUpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5Db21w
dXRlUGlwZWxpbmVJbXBsKCk7CisKKyAgICBXR1BVQ29tcHV0ZVBpcGVsaW5lIGJhY2tpbmcoKSBj
b25zdCB7IHJldHVybiBtX2JhY2tpbmc7IH0KKworcHJpdmF0ZToKKyAgICBDb21wdXRlUGlwZWxp
bmVJbXBsKFdHUFVDb21wdXRlUGlwZWxpbmUpOworCisgICAgQ29tcHV0ZVBpcGVsaW5lSW1wbChj
b25zdCBDb21wdXRlUGlwZWxpbmVJbXBsJikgPSBkZWxldGU7CisgICAgQ29tcHV0ZVBpcGVsaW5l
SW1wbChDb21wdXRlUGlwZWxpbmVJbXBsJiYpID0gZGVsZXRlOworICAgIENvbXB1dGVQaXBlbGlu
ZUltcGwmIG9wZXJhdG9yPShjb25zdCBDb21wdXRlUGlwZWxpbmVJbXBsJikgPSBkZWxldGU7Cisg
ICAgQ29tcHV0ZVBpcGVsaW5lSW1wbCYgb3BlcmF0b3I9KENvbXB1dGVQaXBlbGluZUltcGwmJikg
PSBkZWxldGU7CisKKyAgICBSZWY8QmluZEdyb3VwTGF5b3V0PiBnZXRCaW5kR3JvdXBMYXlvdXQo
dWludDMyX3QgaW5kZXgpIGZpbmFsOworCisgICAgdm9pZCBzZXRMYWJlbEludGVybmFsKGNvbnN0
IFN0cmluZyYpIGZpbmFsOworCisgICAgV0dQVUNvbXB1dGVQaXBlbGluZSBtX2JhY2tpbmcgeyBu
dWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQ
VQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1w
bC9XZWJHUFVDb252ZXJ0VG9CYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3Jh
cGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29udmVydFRvQmFja2luZy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NTI1NmZjNGY2NDYyNWZmNDc4ZjVhNzc4M2JhNWFmZTMxZjIyZGVmNQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29u
dmVydFRvQmFja2luZy5jcHAKQEAgLTAsMCArMSw4MDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViR1BVQ29udmVydFRvQmFja2luZy5oIgorCisjaW5j
bHVkZSA8V2ViR1BVL1dlYkdQVUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBX
ZWJHUFUgeworCitXR1BVQWRkcmVzc01vZGUgY29udmVydFRvQmFja2luZyhBZGRyZXNzTW9kZSBh
ZGRyZXNzTW9kZSkKK3sKKyAgICBzd2l0Y2ggKGFkZHJlc3NNb2RlKSB7CisgICAgY2FzZSBBZGRy
ZXNzTW9kZTo6Q2xhbXBUb0VkZ2U6CisgICAgICAgIHJldHVybiBXR1BVQWRkcmVzc01vZGVfQ2xh
bXBUb0VkZ2U7CisgICAgY2FzZSBBZGRyZXNzTW9kZTo6UmVwZWF0OgorICAgICAgICByZXR1cm4g
V0dQVUFkZHJlc3NNb2RlX1JlcGVhdDsKKyAgICBjYXNlIEFkZHJlc3NNb2RlOjpNaXJyb3JSZXBl
YXQ6CisgICAgICAgIHJldHVybiBXR1BVQWRkcmVzc01vZGVfTWlycm9yUmVwZWF0OworICAgIH0K
K30KKworV0dQVUJsZW5kRmFjdG9yIGNvbnZlcnRUb0JhY2tpbmcoQmxlbmRGYWN0b3IgYmxlbmRG
YWN0b3IpCit7CisgICAgc3dpdGNoIChibGVuZEZhY3RvcikgeworICAgIGNhc2UgQmxlbmRGYWN0
b3I6Olplcm86CisgICAgICAgIHJldHVybiBXR1BVQmxlbmRGYWN0b3JfWmVybzsKKyAgICBjYXNl
IEJsZW5kRmFjdG9yOjpPbmU6CisgICAgICAgIHJldHVybiBXR1BVQmxlbmRGYWN0b3JfT25lOwor
ICAgIGNhc2UgQmxlbmRGYWN0b3I6OlNyYzoKKyAgICAgICAgcmV0dXJuIFdHUFVCbGVuZEZhY3Rv
cl9TcmM7CisgICAgY2FzZSBCbGVuZEZhY3Rvcjo6T25lTWludXNTcmM6CisgICAgICAgIHJldHVy
biBXR1BVQmxlbmRGYWN0b3JfT25lTWludXNTcmM7CisgICAgY2FzZSBCbGVuZEZhY3Rvcjo6U3Jj
QWxwaGE6CisgICAgICAgIHJldHVybiBXR1BVQmxlbmRGYWN0b3JfU3JjQWxwaGE7CisgICAgY2Fz
ZSBCbGVuZEZhY3Rvcjo6T25lTWludXNTcmNBbHBoYToKKyAgICAgICAgcmV0dXJuIFdHUFVCbGVu
ZEZhY3Rvcl9PbmVNaW51c1NyY0FscGhhOworICAgIGNhc2UgQmxlbmRGYWN0b3I6OkRzdDoKKyAg
ICAgICAgcmV0dXJuIFdHUFVCbGVuZEZhY3Rvcl9Ec3Q7CisgICAgY2FzZSBCbGVuZEZhY3Rvcjo6
T25lTWludXNEc3Q6CisgICAgICAgIHJldHVybiBXR1BVQmxlbmRGYWN0b3JfT25lTWludXNEc3Q7
CisgICAgY2FzZSBCbGVuZEZhY3Rvcjo6RHN0QWxwaGE6CisgICAgICAgIHJldHVybiBXR1BVQmxl
bmRGYWN0b3JfRHN0QWxwaGE7CisgICAgY2FzZSBCbGVuZEZhY3Rvcjo6T25lTWludXNEc3RBbHBo
YToKKyAgICAgICAgcmV0dXJuIFdHUFVCbGVuZEZhY3Rvcl9PbmVNaW51c0RzdEFscGhhOworICAg
IGNhc2UgQmxlbmRGYWN0b3I6OlNyY0FscGhhU2F0dXJhdGVkOgorICAgICAgICByZXR1cm4gV0dQ
VUJsZW5kRmFjdG9yX1NyY0FscGhhU2F0dXJhdGVkOworICAgIGNhc2UgQmxlbmRGYWN0b3I6OkNv
bnN0YW50OgorICAgICAgICByZXR1cm4gV0dQVUJsZW5kRmFjdG9yX0NvbnN0YW50OworICAgIGNh
c2UgQmxlbmRGYWN0b3I6Ok9uZU1pbnVzQ29uc3RhbnQ6CisgICAgICAgIHJldHVybiBXR1BVQmxl
bmRGYWN0b3JfT25lTWludXNDb25zdGFudDsKKyAgICB9Cit9CisKK1dHUFVCbGVuZE9wZXJhdGlv
biBjb252ZXJ0VG9CYWNraW5nKEJsZW5kT3BlcmF0aW9uIGJsZW5kT3BlcmF0aW9uKQoreworICAg
IHN3aXRjaCAoYmxlbmRPcGVyYXRpb24pIHsKKyAgICBjYXNlIEJsZW5kT3BlcmF0aW9uOjpBZGQ6
CisgICAgICAgIHJldHVybiBXR1BVQmxlbmRPcGVyYXRpb25fQWRkOworICAgIGNhc2UgQmxlbmRP
cGVyYXRpb246OlN1YnRyYWN0OgorICAgICAgICByZXR1cm4gV0dQVUJsZW5kT3BlcmF0aW9uX1N1
YnRyYWN0OworICAgIGNhc2UgQmxlbmRPcGVyYXRpb246OlJldmVyc2VTdWJ0cmFjdDoKKyAgICAg
ICAgcmV0dXJuIFdHUFVCbGVuZE9wZXJhdGlvbl9SZXZlcnNlU3VidHJhY3Q7CisgICAgY2FzZSBC
bGVuZE9wZXJhdGlvbjo6TWluOgorICAgICAgICByZXR1cm4gV0dQVUJsZW5kT3BlcmF0aW9uX01p
bjsKKyAgICBjYXNlIEJsZW5kT3BlcmF0aW9uOjpNYXg6CisgICAgICAgIHJldHVybiBXR1BVQmxl
bmRPcGVyYXRpb25fTWF4OworICAgIH0KK30KKworV0dQVUJ1ZmZlckJpbmRpbmdUeXBlIGNvbnZl
cnRUb0JhY2tpbmcoQnVmZmVyQmluZGluZ1R5cGUgYnVmZmVyQmluZGluZ1R5cGUpCit7CisgICAg
c3dpdGNoIChidWZmZXJCaW5kaW5nVHlwZSkgeworICAgIGNhc2UgQnVmZmVyQmluZGluZ1R5cGU6
OlVuaWZvcm06CisgICAgICAgIHJldHVybiBXR1BVQnVmZmVyQmluZGluZ1R5cGVfVW5pZm9ybTsK
KyAgICBjYXNlIEJ1ZmZlckJpbmRpbmdUeXBlOjpTdG9yYWdlOgorICAgICAgICByZXR1cm4gV0dQ
VUJ1ZmZlckJpbmRpbmdUeXBlX1N0b3JhZ2U7CisgICAgY2FzZSBCdWZmZXJCaW5kaW5nVHlwZTo6
UmVhZE9ubHlTdG9yYWdlOgorICAgICAgICByZXR1cm4gV0dQVUJ1ZmZlckJpbmRpbmdUeXBlX1Jl
YWRPbmx5U3RvcmFnZTsKKyAgICB9Cit9CisKK1dHUFVDb21wYXJlRnVuY3Rpb24gY29udmVydFRv
QmFja2luZyhDb21wYXJlRnVuY3Rpb24gY29tcGFyZUZ1bmN0aW9uKQoreworICAgIHN3aXRjaCAo
Y29tcGFyZUZ1bmN0aW9uKSB7CisgICAgY2FzZSBDb21wYXJlRnVuY3Rpb246Ok5ldmVyOgorICAg
ICAgICByZXR1cm4gV0dQVUNvbXBhcmVGdW5jdGlvbl9OZXZlcjsKKyAgICBjYXNlIENvbXBhcmVG
dW5jdGlvbjo6TGVzczoKKyAgICAgICAgcmV0dXJuIFdHUFVDb21wYXJlRnVuY3Rpb25fTGVzczsK
KyAgICBjYXNlIENvbXBhcmVGdW5jdGlvbjo6RXF1YWw6CisgICAgICAgIHJldHVybiBXR1BVQ29t
cGFyZUZ1bmN0aW9uX0VxdWFsOworICAgIGNhc2UgQ29tcGFyZUZ1bmN0aW9uOjpMZXNzRXF1YWw6
CisgICAgICAgIHJldHVybiBXR1BVQ29tcGFyZUZ1bmN0aW9uX0xlc3NFcXVhbDsKKyAgICBjYXNl
IENvbXBhcmVGdW5jdGlvbjo6R3JlYXRlcjoKKyAgICAgICAgcmV0dXJuIFdHUFVDb21wYXJlRnVu
Y3Rpb25fR3JlYXRlcjsKKyAgICBjYXNlIENvbXBhcmVGdW5jdGlvbjo6Tm90RXF1YWw6CisgICAg
ICAgIHJldHVybiBXR1BVQ29tcGFyZUZ1bmN0aW9uX05vdEVxdWFsOworICAgIGNhc2UgQ29tcGFy
ZUZ1bmN0aW9uOjpHcmVhdGVyRXF1YWw6CisgICAgICAgIHJldHVybiBXR1BVQ29tcGFyZUZ1bmN0
aW9uX0dyZWF0ZXJFcXVhbDsKKyAgICBjYXNlIENvbXBhcmVGdW5jdGlvbjo6QWx3YXlzOgorICAg
ICAgICByZXR1cm4gV0dQVUNvbXBhcmVGdW5jdGlvbl9BbHdheXM7CisgICAgfQorfQorCitXR1BV
Q29tcGlsYXRpb25NZXNzYWdlVHlwZSBjb252ZXJ0VG9CYWNraW5nKENvbXBpbGF0aW9uTWVzc2Fn
ZVR5cGUgY29tcGlsYXRpb25NZXNzYWdlVHlwZSkKK3sKKyAgICBzd2l0Y2ggKGNvbXBpbGF0aW9u
TWVzc2FnZVR5cGUpIHsKKyAgICBjYXNlIENvbXBpbGF0aW9uTWVzc2FnZVR5cGU6OkVycm9yOgor
ICAgICAgICByZXR1cm4gV0dQVUNvbXBpbGF0aW9uTWVzc2FnZVR5cGVfRXJyb3I7CisgICAgY2Fz
ZSBDb21waWxhdGlvbk1lc3NhZ2VUeXBlOjpXYXJuaW5nOgorICAgICAgICByZXR1cm4gV0dQVUNv
bXBpbGF0aW9uTWVzc2FnZVR5cGVfV2FybmluZzsKKyAgICBjYXNlIENvbXBpbGF0aW9uTWVzc2Fn
ZVR5cGU6OkluZm86CisgICAgICAgIHJldHVybiBXR1BVQ29tcGlsYXRpb25NZXNzYWdlVHlwZV9J
bmZvOworICAgIH0KK30KKworV0dQVUN1bGxNb2RlIGNvbnZlcnRUb0JhY2tpbmcoQ3VsbE1vZGUg
Y3VsbE1vZGUpCit7CisgICAgc3dpdGNoIChjdWxsTW9kZSkgeworICAgIGNhc2UgQ3VsbE1vZGU6
Ok5vbmU6CisgICAgICAgIHJldHVybiBXR1BVQ3VsbE1vZGVfTm9uZTsKKyAgICBjYXNlIEN1bGxN
b2RlOjpGcm9udDoKKyAgICAgICAgcmV0dXJuIFdHUFVDdWxsTW9kZV9Gcm9udDsKKyAgICBjYXNl
IEN1bGxNb2RlOjpCYWNrOgorICAgICAgICByZXR1cm4gV0dQVUN1bGxNb2RlX0JhY2s7CisgICAg
fQorfQorCitXR1BVRXJyb3JGaWx0ZXIgY29udmVydFRvQmFja2luZyhFcnJvckZpbHRlciBlcnJv
ckZpbHRlcikKK3sKKyAgICBzd2l0Y2ggKGVycm9yRmlsdGVyKSB7CisgICAgY2FzZSBFcnJvckZp
bHRlcjo6T3V0T2ZNZW1vcnk6CisgICAgICAgIHJldHVybiBXR1BVRXJyb3JGaWx0ZXJfT3V0T2ZN
ZW1vcnk7CisgICAgY2FzZSBFcnJvckZpbHRlcjo6VmFsaWRhdGlvbjoKKyAgICAgICAgcmV0dXJu
IFdHUFVFcnJvckZpbHRlcl9WYWxpZGF0aW9uOworICAgIH0KK30KKworV0dQVUZlYXR1cmVOYW1l
IGNvbnZlcnRUb0JhY2tpbmcoRmVhdHVyZU5hbWUgZmVhdHVyZU5hbWUpCit7CisgICAgc3dpdGNo
IChmZWF0dXJlTmFtZSkgeworICAgIGNhc2UgRmVhdHVyZU5hbWU6OkRlcHRoQ2xpcENvbnRyb2w6
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVRmVhdHVyZU5hbWU+KFdHUFVGZWF0dXJl
TmFtZV9EZXB0aENsaXBDb250cm9sKTsKKyAgICBjYXNlIEZlYXR1cmVOYW1lOjpEZXB0aDI0dW5v
cm1TdGVuY2lsODoKKyAgICAgICAgcmV0dXJuIFdHUFVGZWF0dXJlTmFtZV9EZXB0aDI0VW5vcm1T
dGVuY2lsODsKKyAgICBjYXNlIEZlYXR1cmVOYW1lOjpEZXB0aDMyZmxvYXRTdGVuY2lsODoKKyAg
ICAgICAgcmV0dXJuIFdHUFVGZWF0dXJlTmFtZV9EZXB0aDMyRmxvYXRTdGVuY2lsODsKKyAgICBj
YXNlIEZlYXR1cmVOYW1lOjpQaXBlbGluZVN0YXRpc3RpY3NRdWVyeToKKyAgICAgICAgcmV0dXJu
IFdHUFVGZWF0dXJlTmFtZV9QaXBlbGluZVN0YXRpc3RpY3NRdWVyeTsKKyAgICBjYXNlIEZlYXR1
cmVOYW1lOjpUZXh0dXJlQ29tcHJlc3Npb25CYzoKKyAgICAgICAgcmV0dXJuIFdHUFVGZWF0dXJl
TmFtZV9UZXh0dXJlQ29tcHJlc3Npb25CQzsKKyAgICBjYXNlIEZlYXR1cmVOYW1lOjpUZXh0dXJl
Q29tcHJlc3Npb25FdGMyOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVUZlYXR1cmVO
YW1lPihXR1BVRmVhdHVyZU5hbWVfVGV4dHVyZUNvbXByZXNzaW9uRVRDMik7CisgICAgY2FzZSBG
ZWF0dXJlTmFtZTo6VGV4dHVyZUNvbXByZXNzaW9uQXN0YzoKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFdHUFVGZWF0dXJlTmFtZT4oV0dQVUZlYXR1cmVOYW1lX1RleHR1cmVDb21wcmVzc2lv
bkFTVEMpOworICAgIGNhc2UgRmVhdHVyZU5hbWU6OlRpbWVzdGFtcFF1ZXJ5OgorICAgICAgICBy
ZXR1cm4gV0dQVUZlYXR1cmVOYW1lX1RpbWVzdGFtcFF1ZXJ5OworICAgIGNhc2UgRmVhdHVyZU5h
bWU6OkluZGlyZWN0Rmlyc3RJbnN0YW5jZToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdH
UFVGZWF0dXJlTmFtZT4oV0dQVUZlYXR1cmVOYW1lX0luZGlyZWN0Rmlyc3RJbnN0YW5jZSk7Cisg
ICAgfQorfQorCitXR1BVRmlsdGVyTW9kZSBjb252ZXJ0VG9CYWNraW5nKEZpbHRlck1vZGUgZmls
dGVyTW9kZSkKK3sKKyAgICBzd2l0Y2ggKGZpbHRlck1vZGUpIHsKKyAgICBjYXNlIEZpbHRlck1v
ZGU6Ok5lYXJlc3Q6CisgICAgICAgIHJldHVybiBXR1BVRmlsdGVyTW9kZV9OZWFyZXN0OworICAg
IGNhc2UgRmlsdGVyTW9kZTo6TGluZWFyOgorICAgICAgICByZXR1cm4gV0dQVUZpbHRlck1vZGVf
TGluZWFyOworICAgIH0KK30KKworV0dQVUZyb250RmFjZSBjb252ZXJ0VG9CYWNraW5nKEZyb250
RmFjZSBmcm9udEZhY2UpCit7CisgICAgc3dpdGNoIChmcm9udEZhY2UpIHsKKyAgICBjYXNlIEZy
b250RmFjZTo6Q0NXOgorICAgICAgICByZXR1cm4gV0dQVUZyb250RmFjZV9DQ1c7CisgICAgY2Fz
ZSBGcm9udEZhY2U6OkNXOgorICAgICAgICByZXR1cm4gV0dQVUZyb250RmFjZV9DVzsKKyAgICB9
Cit9CisKK1dHUFVJbmRleEZvcm1hdCBjb252ZXJ0VG9CYWNraW5nKEluZGV4Rm9ybWF0IGluZGV4
Rm9ybWF0KQoreworICAgIHN3aXRjaCAoaW5kZXhGb3JtYXQpIHsKKyAgICBjYXNlIEluZGV4Rm9y
bWF0OjpVaW50MTY6CisgICAgICAgIHJldHVybiBXR1BVSW5kZXhGb3JtYXRfVWludDE2OworICAg
IGNhc2UgSW5kZXhGb3JtYXQ6OlVpbnQzMjoKKyAgICAgICAgcmV0dXJuIFdHUFVJbmRleEZvcm1h
dF9VaW50MzI7CisgICAgfQorfQorCitXR1BVTG9hZE9wIGNvbnZlcnRUb0JhY2tpbmcoTG9hZE9w
IGxvYWRPcCkKK3sKKyAgICBzd2l0Y2ggKGxvYWRPcCkgeworICAgIGNhc2UgTG9hZE9wOjpMb2Fk
OgorICAgICAgICByZXR1cm4gV0dQVUxvYWRPcF9Mb2FkOworICAgIH0KK30KKworV0dQVVBpcGVs
aW5lU3RhdGlzdGljTmFtZSBjb252ZXJ0VG9CYWNraW5nKFBpcGVsaW5lU3RhdGlzdGljTmFtZSBw
aXBlbGluZVN0YXRpc3RpY05hbWUpCit7CisgICAgc3dpdGNoIChwaXBlbGluZVN0YXRpc3RpY05h
bWUpIHsKKyAgICBjYXNlIFBpcGVsaW5lU3RhdGlzdGljTmFtZTo6VmVydGV4U2hhZGVySW52b2Nh
dGlvbnM6CisgICAgICAgIHJldHVybiBXR1BVUGlwZWxpbmVTdGF0aXN0aWNOYW1lX1ZlcnRleFNo
YWRlckludm9jYXRpb25zOworICAgIGNhc2UgUGlwZWxpbmVTdGF0aXN0aWNOYW1lOjpDbGlwcGVy
SW52b2NhdGlvbnM6CisgICAgICAgIHJldHVybiBXR1BVUGlwZWxpbmVTdGF0aXN0aWNOYW1lX0Ns
aXBwZXJJbnZvY2F0aW9uczsKKyAgICBjYXNlIFBpcGVsaW5lU3RhdGlzdGljTmFtZTo6Q2xpcHBl
clByaW1pdGl2ZXNPdXQ6CisgICAgICAgIHJldHVybiBXR1BVUGlwZWxpbmVTdGF0aXN0aWNOYW1l
X0NsaXBwZXJQcmltaXRpdmVzT3V0OworICAgIGNhc2UgUGlwZWxpbmVTdGF0aXN0aWNOYW1lOjpG
cmFnbWVudFNoYWRlckludm9jYXRpb25zOgorICAgICAgICByZXR1cm4gV0dQVVBpcGVsaW5lU3Rh
dGlzdGljTmFtZV9GcmFnbWVudFNoYWRlckludm9jYXRpb25zOworICAgIGNhc2UgUGlwZWxpbmVT
dGF0aXN0aWNOYW1lOjpDb21wdXRlU2hhZGVySW52b2NhdGlvbnM6CisgICAgICAgIHJldHVybiBX
R1BVUGlwZWxpbmVTdGF0aXN0aWNOYW1lX0NvbXB1dGVTaGFkZXJJbnZvY2F0aW9uczsKKyAgICB9
Cit9CisKK1dHUFVQb3dlclByZWZlcmVuY2UgY29udmVydFRvQmFja2luZyhQb3dlclByZWZlcmVu
Y2UgcG93ZXJQcmVmZXJlbmNlKQoreworICAgIHN3aXRjaCAocG93ZXJQcmVmZXJlbmNlKSB7Cisg
ICAgY2FzZSBQb3dlclByZWZlcmVuY2U6Okxvd1Bvd2VyOgorICAgICAgICByZXR1cm4gV0dQVVBv
d2VyUHJlZmVyZW5jZV9Mb3dQb3dlcjsKKyAgICBjYXNlIFBvd2VyUHJlZmVyZW5jZTo6SGlnaFBl
cmZvcm1hbmNlOgorICAgICAgICByZXR1cm4gV0dQVVBvd2VyUHJlZmVyZW5jZV9IaWdoUGVyZm9y
bWFuY2U7CisgICAgfQorfQorCitXR1BVUHJpbWl0aXZlVG9wb2xvZ3kgY29udmVydFRvQmFja2lu
ZyhQcmltaXRpdmVUb3BvbG9neSBwcmltaXRpdmVUb3BvbG9neSkKK3sKKyAgICBzd2l0Y2ggKHBy
aW1pdGl2ZVRvcG9sb2d5KSB7CisgICAgY2FzZSBQcmltaXRpdmVUb3BvbG9neTo6UG9pbnRMaXN0
OgorICAgICAgICByZXR1cm4gV0dQVVByaW1pdGl2ZVRvcG9sb2d5X1BvaW50TGlzdDsKKyAgICBj
YXNlIFByaW1pdGl2ZVRvcG9sb2d5OjpMaW5lTGlzdDoKKyAgICAgICAgcmV0dXJuIFdHUFVQcmlt
aXRpdmVUb3BvbG9neV9MaW5lTGlzdDsKKyAgICBjYXNlIFByaW1pdGl2ZVRvcG9sb2d5OjpMaW5l
U3RyaXA6CisgICAgICAgIHJldHVybiBXR1BVUHJpbWl0aXZlVG9wb2xvZ3lfTGluZVN0cmlwOwor
ICAgIGNhc2UgUHJpbWl0aXZlVG9wb2xvZ3k6OlRyaWFuZ2xlTGlzdDoKKyAgICAgICAgcmV0dXJu
IFdHUFVQcmltaXRpdmVUb3BvbG9neV9UcmlhbmdsZUxpc3Q7CisgICAgY2FzZSBQcmltaXRpdmVU
b3BvbG9neTo6VHJpYW5nbGVTdHJpcDoKKyAgICAgICAgcmV0dXJuIFdHUFVQcmltaXRpdmVUb3Bv
bG9neV9UcmlhbmdsZVN0cmlwOworICAgIH0KK30KKworV0dQVVF1ZXJ5VHlwZSBjb252ZXJ0VG9C
YWNraW5nKFF1ZXJ5VHlwZSBxdWVyeVR5cGUpCit7CisgICAgc3dpdGNoIChxdWVyeVR5cGUpIHsK
KyAgICBjYXNlIFF1ZXJ5VHlwZTo6T2NjbHVzaW9uOgorICAgICAgICByZXR1cm4gV0dQVVF1ZXJ5
VHlwZV9PY2NsdXNpb247CisgICAgY2FzZSBRdWVyeVR5cGU6OlBpcGVsaW5lU3RhdGlzdGljczoK
KyAgICAgICAgcmV0dXJuIFdHUFVRdWVyeVR5cGVfUGlwZWxpbmVTdGF0aXN0aWNzOworICAgIGNh
c2UgUXVlcnlUeXBlOjpUaW1lc3RhbXA6CisgICAgICAgIHJldHVybiBXR1BVUXVlcnlUeXBlX1Rp
bWVzdGFtcDsKKyAgICB9Cit9CisKK1dHUFVTYW1wbGVyQmluZGluZ1R5cGUgY29udmVydFRvQmFj
a2luZyhTYW1wbGVyQmluZGluZ1R5cGUgc2FtcGxlckJpbmRpbmdUeXBlKQoreworICAgIHN3aXRj
aCAoc2FtcGxlckJpbmRpbmdUeXBlKSB7CisgICAgY2FzZSBTYW1wbGVyQmluZGluZ1R5cGU6OkZp
bHRlcmluZzoKKyAgICAgICAgcmV0dXJuIFdHUFVTYW1wbGVyQmluZGluZ1R5cGVfRmlsdGVyaW5n
OworICAgIGNhc2UgU2FtcGxlckJpbmRpbmdUeXBlOjpOb25GaWx0ZXJpbmc6CisgICAgICAgIHJl
dHVybiBXR1BVU2FtcGxlckJpbmRpbmdUeXBlX05vbkZpbHRlcmluZzsKKyAgICBjYXNlIFNhbXBs
ZXJCaW5kaW5nVHlwZTo6Q29tcGFyaXNvbjoKKyAgICAgICAgcmV0dXJuIFdHUFVTYW1wbGVyQmlu
ZGluZ1R5cGVfQ29tcGFyaXNvbjsKKyAgICB9Cit9CisKK1dHUFVTdGVuY2lsT3BlcmF0aW9uIGNv
bnZlcnRUb0JhY2tpbmcoU3RlbmNpbE9wZXJhdGlvbiBzdGVuY2lsT3BlcmF0aW9uKQoreworICAg
IHN3aXRjaCAoc3RlbmNpbE9wZXJhdGlvbikgeworICAgIGNhc2UgU3RlbmNpbE9wZXJhdGlvbjo6
S2VlcDoKKyAgICAgICAgcmV0dXJuIFdHUFVTdGVuY2lsT3BlcmF0aW9uX0tlZXA7CisgICAgY2Fz
ZSBTdGVuY2lsT3BlcmF0aW9uOjpaZXJvOgorICAgICAgICByZXR1cm4gV0dQVVN0ZW5jaWxPcGVy
YXRpb25fWmVybzsKKyAgICBjYXNlIFN0ZW5jaWxPcGVyYXRpb246OlJlcGxhY2U6CisgICAgICAg
IHJldHVybiBXR1BVU3RlbmNpbE9wZXJhdGlvbl9SZXBsYWNlOworICAgIGNhc2UgU3RlbmNpbE9w
ZXJhdGlvbjo6SW52ZXJ0OgorICAgICAgICByZXR1cm4gV0dQVVN0ZW5jaWxPcGVyYXRpb25fSW52
ZXJ0OworICAgIGNhc2UgU3RlbmNpbE9wZXJhdGlvbjo6SW5jcmVtZW50Q2xhbXA6CisgICAgICAg
IHJldHVybiBXR1BVU3RlbmNpbE9wZXJhdGlvbl9JbmNyZW1lbnRDbGFtcDsKKyAgICBjYXNlIFN0
ZW5jaWxPcGVyYXRpb246OkRlY3JlbWVudENsYW1wOgorICAgICAgICByZXR1cm4gV0dQVVN0ZW5j
aWxPcGVyYXRpb25fRGVjcmVtZW50Q2xhbXA7CisgICAgY2FzZSBTdGVuY2lsT3BlcmF0aW9uOjpJ
bmNyZW1lbnRXcmFwOgorICAgICAgICByZXR1cm4gV0dQVVN0ZW5jaWxPcGVyYXRpb25fSW5jcmVt
ZW50V3JhcDsKKyAgICBjYXNlIFN0ZW5jaWxPcGVyYXRpb246OkRlY3JlbWVudFdyYXA6CisgICAg
ICAgIHJldHVybiBXR1BVU3RlbmNpbE9wZXJhdGlvbl9EZWNyZW1lbnRXcmFwOworICAgIH0KK30K
KworV0dQVVN0b3JhZ2VUZXh0dXJlQWNjZXNzIGNvbnZlcnRUb0JhY2tpbmcoU3RvcmFnZVRleHR1
cmVBY2Nlc3Mgc3RvcmFnZVRleHR1cmVBY2Nlc3MpCit7CisgICAgc3dpdGNoIChzdG9yYWdlVGV4
dHVyZUFjY2VzcykgeworICAgIGNhc2UgU3RvcmFnZVRleHR1cmVBY2Nlc3M6OldyaXRlT25seToK
KyAgICAgICAgcmV0dXJuIFdHUFVTdG9yYWdlVGV4dHVyZUFjY2Vzc19Xcml0ZU9ubHk7CisgICAg
fQorfQorCitXR1BVU3RvcmVPcCBjb252ZXJ0VG9CYWNraW5nKFN0b3JlT3Agc3RvcmVPcCkKK3sK
KyAgICBzd2l0Y2ggKHN0b3JlT3ApIHsKKyAgICBjYXNlIFN0b3JlT3A6OlN0b3JlOgorICAgICAg
ICByZXR1cm4gV0dQVVN0b3JlT3BfU3RvcmU7CisgICAgY2FzZSBTdG9yZU9wOjpEaXNjYXJkOgor
ICAgICAgICByZXR1cm4gV0dQVVN0b3JlT3BfRGlzY2FyZDsKKyAgICB9Cit9CisKK1dHUFVUZXh0
dXJlQXNwZWN0IGNvbnZlcnRUb0JhY2tpbmcoVGV4dHVyZUFzcGVjdCB0ZXh0dXJlQXNwZWN0KQor
eworICAgIHN3aXRjaCAodGV4dHVyZUFzcGVjdCkgeworICAgIGNhc2UgVGV4dHVyZUFzcGVjdDo6
QWxsOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVBc3BlY3RfQWxsOworICAgIGNhc2UgVGV4
dHVyZUFzcGVjdDo6U3RlbmNpbE9ubHk6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUFzcGVj
dF9TdGVuY2lsT25seTsKKyAgICBjYXNlIFRleHR1cmVBc3BlY3Q6OkRlcHRoT25seToKKyAgICAg
ICAgcmV0dXJuIFdHUFVUZXh0dXJlQXNwZWN0X0RlcHRoT25seTsKKyAgICB9Cit9CisKK1dHUFVU
ZXh0dXJlRGltZW5zaW9uIGNvbnZlcnRUb0JhY2tpbmcoVGV4dHVyZURpbWVuc2lvbiB0ZXh0dXJl
RGltZW5zaW9uKQoreworICAgIHN3aXRjaCAodGV4dHVyZURpbWVuc2lvbikgeworICAgIGNhc2Ug
VGV4dHVyZURpbWVuc2lvbjo6XzFkOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVEaW1lbnNp
b25fMUQ7CisgICAgY2FzZSBUZXh0dXJlRGltZW5zaW9uOjpfMmQ6CisgICAgICAgIHJldHVybiBX
R1BVVGV4dHVyZURpbWVuc2lvbl8yRDsKKyAgICBjYXNlIFRleHR1cmVEaW1lbnNpb246Ol8zZDoK
KyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRGltZW5zaW9uXzNEOworICAgIH0KK30KKworV0dQ
VVRleHR1cmVGb3JtYXQgY29udmVydFRvQmFja2luZyhUZXh0dXJlRm9ybWF0IHRleHR1cmVGb3Jt
YXQpCit7CisgICAgc3dpdGNoICh0ZXh0dXJlRm9ybWF0KSB7CisgICAgY2FzZSBUZXh0dXJlRm9y
bWF0OjpSOHVub3JtOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUjhVbm9ybTsK
KyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OlI4c25vcm06CisgICAgICAgIHJldHVybiBXR1BVVGV4
dHVyZUZvcm1hdF9SOFNub3JtOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6Ujh1aW50OgorICAg
ICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUjhVaW50OworICAgIGNhc2UgVGV4dHVyZUZv
cm1hdDo6UjhzaW50OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUjhTaW50Owor
ICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UjE2dWludDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0
dXJlRm9ybWF0X1IxNlVpbnQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSMTZzaW50OgorICAg
ICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUjE2U2ludDsKKyAgICBjYXNlIFRleHR1cmVG
b3JtYXQ6OlIxNmZsb2F0OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUjE2Rmxv
YXQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZzh1bm9ybToKKyAgICAgICAgcmV0dXJuIFdH
UFVUZXh0dXJlRm9ybWF0X1JHOFVub3JtOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6Umc4c25v
cm06CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SRzhTbm9ybTsKKyAgICBjYXNl
IFRleHR1cmVGb3JtYXQ6OlJnOHVpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1h
dF9SRzhVaW50OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6Umc4c2ludDoKKyAgICAgICAgcmV0
dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1JHOFNpbnQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpS
MzJ1aW50OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUjMyVWludDsKKyAgICBj
YXNlIFRleHR1cmVGb3JtYXQ6OlIzMnNpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZv
cm1hdF9SMzJTaW50OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UjMyZmxvYXQ6CisgICAgICAg
IHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SMzJGbG9hdDsKKyAgICBjYXNlIFRleHR1cmVGb3Jt
YXQ6OlJnMTZ1aW50OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkcxNlVpbnQ7
CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZzE2c2ludDoKKyAgICAgICAgcmV0dXJuIFdHUFVU
ZXh0dXJlRm9ybWF0X1JHMTZTaW50OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UmcxNmZsb2F0
OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkcxNkZsb2F0OworICAgIGNhc2Ug
VGV4dHVyZUZvcm1hdDo6UmdiYTh1bm9ybToKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9y
bWF0X1JHQkE4VW5vcm07CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZ2JhOHVub3JtU1JHQjoK
KyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4VW5vcm1TcmdiOworICAgIGNh
c2UgVGV4dHVyZUZvcm1hdDo6UmdiYThzbm9ybToKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJl
Rm9ybWF0X1JHQkE4U25vcm07CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZ2JhOHVpbnQ6Cisg
ICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFVpbnQ7CisgICAgY2FzZSBUZXh0
dXJlRm9ybWF0OjpSZ2JhOHNpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9S
R0JBOFNpbnQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpCZ3JhOHVub3JtOgorICAgICAgICBy
ZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQkdSQThVbm9ybTsKKyAgICBjYXNlIFRleHR1cmVGb3Jt
YXQ6OkJncmE4dW5vcm1TUkdCOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQkdS
QThVbm9ybVNyZ2I7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZ2I5ZTV1ZmxvYXQ6CisgICAg
ICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SR0I5RTVVZmxvYXQ7CisgICAgY2FzZSBUZXh0
dXJlRm9ybWF0OjpSZ2IxMGEydW5vcm06CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1h
dF9SR0IxMEEyVW5vcm07CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZzExYjEwdWZsb2F0Ogor
ICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkcxMUIxMFVmbG9hdDsKKyAgICBjYXNl
IFRleHR1cmVGb3JtYXQ6OlJnMzJ1aW50OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3Jt
YXRfUkczMlVpbnQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZzMyc2ludDoKKyAgICAgICAg
cmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1JHMzJTaW50OworICAgIGNhc2UgVGV4dHVyZUZvcm1h
dDo6UmczMmZsb2F0OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkczMkZsb2F0
OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UmdiYTE2dWludDoKKyAgICAgICAgcmV0dXJuIFdH
UFVUZXh0dXJlRm9ybWF0X1JHQkExNlVpbnQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZ2Jh
MTZzaW50OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkdCQTE2U2ludDsKKyAg
ICBjYXNlIFRleHR1cmVGb3JtYXQ6OlJnYmExNmZsb2F0OgorICAgICAgICByZXR1cm4gV0dQVVRl
eHR1cmVGb3JtYXRfUkdCQTE2RmxvYXQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZ2JhMzJ1
aW50OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkdCQTMyVWludDsKKyAgICBj
YXNlIFRleHR1cmVGb3JtYXQ6OlJnYmEzMnNpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVy
ZUZvcm1hdF9SR0JBMzJTaW50OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UmdiYTMyZmxvYXQ6
CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMzJGbG9hdDsKKyAgICBjYXNl
IFRleHR1cmVGb3JtYXQ6OlN0ZW5jaWw4OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3Jt
YXRfU3RlbmNpbDg7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpEZXB0aDE2dW5vcm06CisgICAg
ICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDE2VW5vcm07CisgICAgY2FzZSBUZXh0
dXJlRm9ybWF0OjpEZXB0aDI0cGx1czoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0
X0RlcHRoMjRQbHVzOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6RGVwdGgyNHBsdXNTdGVuY2ls
ODoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRQbHVzU3RlbmNpbDg7
CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpEZXB0aDMyZmxvYXQ6CisgICAgICAgIHJldHVybiBX
R1BVVGV4dHVyZUZvcm1hdF9EZXB0aDMyRmxvYXQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpC
YzFSZ2JhVW5vcm06CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9CQzFSR0JBVW5v
cm07CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpCYzFSZ2JhVW5vcm1TUkdCOgorICAgICAgICBy
ZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQkMxUkdCQVVub3JtU3JnYjsKKyAgICBjYXNlIFRleHR1
cmVGb3JtYXQ6OkJjMlJnYmFVbm9ybToKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0
X0JDMlJHQkFVbm9ybTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkJjMlJnYmFVbm9ybVNSR0I6
CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9CQzJSR0JBVW5vcm1TcmdiOworICAg
IGNhc2UgVGV4dHVyZUZvcm1hdDo6QmMzUmdiYVVub3JtOgorICAgICAgICByZXR1cm4gV0dQVVRl
eHR1cmVGb3JtYXRfQkMzUkdCQVVub3JtOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QmMzUmdi
YVVub3JtU1JHQjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0JDM1JHQkFVbm9y
bVNyZ2I7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpCYzRSVW5vcm06CisgICAgICAgIHJldHVy
biBXR1BVVGV4dHVyZUZvcm1hdF9CQzRSVW5vcm07CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpC
YzRSU25vcm06CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9CQzRSU25vcm07Cisg
ICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpCYzVSZ1Vub3JtOgorICAgICAgICByZXR1cm4gV0dQVVRl
eHR1cmVGb3JtYXRfQkM1UkdVbm9ybTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkJjNVJnU25v
cm06CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9CQzVSR1Nub3JtOworICAgIGNh
c2UgVGV4dHVyZUZvcm1hdDo6QmM2aFJnYlVmbG9hdDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0
dXJlRm9ybWF0X0JDNkhSR0JVZmxvYXQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpCYzZoUmdi
RmxvYXQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9CQzZIUkdCRmxvYXQ7Cisg
ICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpCYzdSZ2JhVW5vcm06CisgICAgICAgIHJldHVybiBXR1BV
VGV4dHVyZUZvcm1hdF9CQzdSR0JBVW5vcm07CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpCYzdS
Z2JhVW5vcm1TUkdCOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQkM3UkdCQVVu
b3JtU3JnYjsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkV0YzJSZ2I4dW5vcm06CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRf
RVRDMlJHQjhVbm9ybSk7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpFdGMyUmdiOHVub3JtU1JH
QjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4
dHVyZUZvcm1hdF9FVEMyUkdCOHVub3JtU3JnYik7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpF
dGMyUmdiOGExdW5vcm06CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZv
cm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjhhMVVub3JtKTsKKyAgICBjYXNlIFRleHR1
cmVGb3JtYXQ6OkV0YzJSZ2I4YTF1bm9ybVNSR0I6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjhhMXVub3JtU3Jn
Yik7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpFdGMyUmdiYTh1bm9ybToKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9FVEMy
UkdCQThVbm9ybSk7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpFdGMyUmdiYTh1bm9ybVNSR0I6
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1
cmVGb3JtYXRfRVRDMlJHQkE4VW5vcm1TcmdiKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkVh
Y1IxMXVub3JtOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+
KFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1IxMVVub3JtKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6
OkVhY1IxMXNub3JtOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3Jt
YXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1IxMVNub3JtKTsKKyAgICBjYXNlIFRleHR1cmVGb3Jt
YXQ6OkVhY1JnMTF1bm9ybToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJl
Rm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9FQUNSRzExVW5vcm0pOworICAgIGNhc2UgVGV4dHVy
ZUZvcm1hdDo6RWFjUmcxMXNub3JtOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRl
eHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1JHMTFTbm9ybSk7CisgICAgY2FzZSBU
ZXh0dXJlRm9ybWF0OjpBc3RjNHg0VW5vcm06CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxX
R1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzR4NFVub3JtKTsKKyAgICBj
YXNlIFRleHR1cmVGb3JtYXQ6OkFzdGM0eDRVbm9ybVNSR0I6CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzR4NFVub3Jt
U3JnYik7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpBc3RjNXg0VW5vcm06CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNU
QzV4NFVub3JtKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGM1eDRVbm9ybVNSR0I6Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVG
b3JtYXRfQVNUQzV4NFVub3JtU3JnYik7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpBc3RjNXg1
VW5vcm06CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQ
VVRleHR1cmVGb3JtYXRfQVNUQzV4NVVub3JtKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFz
dGM1eDVVbm9ybVNSR0I6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZv
cm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzV4NVVub3JtU3JnYik7CisgICAgY2FzZSBUZXh0
dXJlRm9ybWF0OjpBc3RjNng1VW5vcm06CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BV
VGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzZ4NVVub3JtKTsKKyAgICBjYXNl
IFRleHR1cmVGb3JtYXQ6OkFzdGM2eDVVbm9ybVNSR0I6CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzZ4NVVub3JtU3Jn
Yik7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpBc3RjNng2VW5vcm06CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzZ4
NlVub3JtKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGM2eDZVbm9ybVNSR0I6CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3Jt
YXRfQVNUQzZ4NlVub3JtU3JnYik7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpBc3RjOHg1VW5v
cm06CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRl
eHR1cmVGb3JtYXRfQVNUQzh4NVVub3JtKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGM4
eDVVbm9ybVNSR0I6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1h
dD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4NVVub3JtU3JnYik7CisgICAgY2FzZSBUZXh0dXJl
Rm9ybWF0OjpBc3RjOHg2VW5vcm06CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4
dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4NlVub3JtKTsKKyAgICBjYXNlIFRl
eHR1cmVGb3JtYXQ6OkFzdGM4eDZVbm9ybVNSR0I6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4NlVub3JtU3JnYik7
CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpBc3RjOHg4VW5vcm06CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4OFVu
b3JtKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGM4eDhVbm9ybVNSR0I6CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRf
QVNUQzh4OFVub3JtU3JnYik7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpBc3RjMTB4NVVub3Jt
OgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0
dXJlRm9ybWF0X0FTVEMxMHg1VW5vcm0pOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0YzEw
eDVVbm9ybVNSR0I6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1h
dD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDVVbm9ybVNyZ2IpOworICAgIGNhc2UgVGV4dHVy
ZUZvcm1hdDo6QXN0YzEweDZVbm9ybToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVU
ZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4NlVub3JtKTsKKyAgICBjYXNl
IFRleHR1cmVGb3JtYXQ6OkFzdGMxMHg2VW5vcm1TUkdCOgorICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg2VW5vcm1T
cmdiKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGMxMHg4VW5vcm06CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNU
QzEweDhVbm9ybSk7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpBc3RjMTB4OFVub3JtU1JHQjoK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVy
ZUZvcm1hdF9BU1RDMTB4OFVub3JtU3JnYik7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpBc3Rj
MTB4MTBVbm9ybToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0
PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4MTBVbm9ybSk7CisgICAgY2FzZSBUZXh0dXJlRm9y
bWF0OjpBc3RjMTB4MTBVbm9ybVNSR0I6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BV
VGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDEwVW5vcm1TcmdiKTsKKyAg
ICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGMxMngxMFVub3JtOgorICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMFVu
b3JtKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGMxMngxMFVub3JtU1JHQjoKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1h
dF9BU1RDMTJ4MTBVbm9ybVNyZ2IpOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0YzEyeDEy
VW5vcm06CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQ
VVRleHR1cmVGb3JtYXRfQVNUQzEyeDEyVW5vcm0pOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6
QXN0YzEyeDEyVW5vcm1TUkdCOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1
cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMlVub3JtU3JnYik7CisgICAgY2Fz
ZSBUZXh0dXJlRm9ybWF0OjpEZXB0aDI0dW5vcm1TdGVuY2lsODoKKyAgICAgICAgcmV0dXJuIFdH
UFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRQbHVzU3RlbmNpbDg7CisgICAgY2FzZSBUZXh0dXJlRm9y
bWF0OjpEZXB0aDMyZmxvYXRTdGVuY2lsODoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdH
UFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDMyRmxvYXRTdGVuY2lsOCk7
CisgICAgfQorfQorCitXR1BVVGV4dHVyZVNhbXBsZVR5cGUgY29udmVydFRvQmFja2luZyhUZXh0
dXJlU2FtcGxlVHlwZSB0ZXh0dXJlU2FtcGxlVHlwZSkKK3sKKyAgICBzd2l0Y2ggKHRleHR1cmVT
YW1wbGVUeXBlKSB7CisgICAgY2FzZSBUZXh0dXJlU2FtcGxlVHlwZTo6RmxvYXQ6CisgICAgICAg
IHJldHVybiBXR1BVVGV4dHVyZVNhbXBsZVR5cGVfRmxvYXQ7CisgICAgY2FzZSBUZXh0dXJlU2Ft
cGxlVHlwZTo6VW5maWx0ZXJhYmxlRmxvYXQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZVNh
bXBsZVR5cGVfVW5maWx0ZXJhYmxlRmxvYXQ7CisgICAgY2FzZSBUZXh0dXJlU2FtcGxlVHlwZTo6
RGVwdGg6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZVNhbXBsZVR5cGVfRGVwdGg7CisgICAg
Y2FzZSBUZXh0dXJlU2FtcGxlVHlwZTo6U2ludDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJl
U2FtcGxlVHlwZV9TaW50OworICAgIGNhc2UgVGV4dHVyZVNhbXBsZVR5cGU6OlVpbnQ6CisgICAg
ICAgIHJldHVybiBXR1BVVGV4dHVyZVNhbXBsZVR5cGVfVWludDsKKyAgICB9Cit9CisKK1dHUFVU
ZXh0dXJlVmlld0RpbWVuc2lvbiBjb252ZXJ0VG9CYWNraW5nKFRleHR1cmVWaWV3RGltZW5zaW9u
IHRleHR1cmVWaWV3RGltZW5zaW9uKQoreworICAgIHN3aXRjaCAodGV4dHVyZVZpZXdEaW1lbnNp
b24pIHsKKyAgICBjYXNlIFRleHR1cmVWaWV3RGltZW5zaW9uOjpfMWQ6CisgICAgICAgIHJldHVy
biBXR1BVVGV4dHVyZVZpZXdEaW1lbnNpb25fMUQ7CisgICAgY2FzZSBUZXh0dXJlVmlld0RpbWVu
c2lvbjo6XzJkOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVWaWV3RGltZW5zaW9uXzJEOwor
ICAgIGNhc2UgVGV4dHVyZVZpZXdEaW1lbnNpb246Ol8yZEFycmF5OgorICAgICAgICByZXR1cm4g
V0dQVVRleHR1cmVWaWV3RGltZW5zaW9uXzJEQXJyYXk7CisgICAgY2FzZSBUZXh0dXJlVmlld0Rp
bWVuc2lvbjo6Q3ViZToKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlVmlld0RpbWVuc2lvbl9D
dWJlOworICAgIGNhc2UgVGV4dHVyZVZpZXdEaW1lbnNpb246OkN1YmVBcnJheToKKyAgICAgICAg
cmV0dXJuIFdHUFVUZXh0dXJlVmlld0RpbWVuc2lvbl9DdWJlQXJyYXk7CisgICAgY2FzZSBUZXh0
dXJlVmlld0RpbWVuc2lvbjo6XzNkOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVWaWV3RGlt
ZW5zaW9uXzNEOworICAgIH0KK30KKworV0dQVVZlcnRleEZvcm1hdCBjb252ZXJ0VG9CYWNraW5n
KFZlcnRleEZvcm1hdCB2ZXJ0ZXhGb3JtYXQpCit7CisgICAgc3dpdGNoICh2ZXJ0ZXhGb3JtYXQp
IHsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6VWludDh4MjoKKyAgICAgICAgcmV0dXJuIFdHUFVW
ZXJ0ZXhGb3JtYXRfVWludDh4MjsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6VWludDh4NDoKKyAg
ICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfVWludDh4NDsKKyAgICBjYXNlIFZlcnRleEZv
cm1hdDo6U2ludDh4MjoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfU2ludDh4MjsK
KyAgICBjYXNlIFZlcnRleEZvcm1hdDo6U2ludDh4NDoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0
ZXhGb3JtYXRfU2ludDh4NDsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6VW5vcm04eDI6CisgICAg
ICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X1Vub3JtOHgyOworICAgIGNhc2UgVmVydGV4Rm9y
bWF0OjpVbm9ybTh4NDoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfVW5vcm04eDQ7
CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlNub3JtOHgyOgorICAgICAgICByZXR1cm4gV0dQVVZl
cnRleEZvcm1hdF9Tbm9ybTh4MjsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6U25vcm04eDQ6Cisg
ICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X1Nub3JtOHg0OworICAgIGNhc2UgVmVydGV4
Rm9ybWF0OjpVaW50MTZ4MjoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfVWludDE2
eDI7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlVpbnQxNng0OgorICAgICAgICByZXR1cm4gV0dQ
VVZlcnRleEZvcm1hdF9VaW50MTZ4NDsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6U2ludDE2eDI6
CisgICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X1NpbnQxNngyOworICAgIGNhc2UgVmVy
dGV4Rm9ybWF0OjpTaW50MTZ4NDoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfU2lu
dDE2eDQ7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlVub3JtMTZ4MjoKKyAgICAgICAgcmV0dXJu
IFdHUFVWZXJ0ZXhGb3JtYXRfVW5vcm0xNngyOworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpVbm9y
bTE2eDQ6CisgICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X1Vub3JtMTZ4NDsKKyAgICBj
YXNlIFZlcnRleEZvcm1hdDo6U25vcm0xNngyOgorICAgICAgICByZXR1cm4gV0dQVVZlcnRleEZv
cm1hdF9Tbm9ybTE2eDI7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlNub3JtMTZ4NDoKKyAgICAg
ICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfU25vcm0xNng0OworICAgIGNhc2UgVmVydGV4Rm9y
bWF0OjpGbG9hdDE2eDI6CisgICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X0Zsb2F0MTZ4
MjsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6RmxvYXQxNng0OgorICAgICAgICByZXR1cm4gV0dQ
VVZlcnRleEZvcm1hdF9GbG9hdDE2eDQ7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OkZsb2F0MzI6
CisgICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X0Zsb2F0MzI7CisgICAgY2FzZSBWZXJ0
ZXhGb3JtYXQ6OkZsb2F0MzJ4MjoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfRmxv
YXQzMngyOworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpGbG9hdDMyeDM6CisgICAgICAgIHJldHVy
biBXR1BVVmVydGV4Rm9ybWF0X0Zsb2F0MzJ4MzsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6Rmxv
YXQzMng0OgorICAgICAgICByZXR1cm4gV0dQVVZlcnRleEZvcm1hdF9GbG9hdDMyeDQ7CisgICAg
Y2FzZSBWZXJ0ZXhGb3JtYXQ6OlVpbnQzMjoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3Jt
YXRfVWludDMyOworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpVaW50MzJ4MjoKKyAgICAgICAgcmV0
dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfVWludDMyeDI7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlVp
bnQzMngzOgorICAgICAgICByZXR1cm4gV0dQVVZlcnRleEZvcm1hdF9VaW50MzJ4MzsKKyAgICBj
YXNlIFZlcnRleEZvcm1hdDo6VWludDMyeDQ6CisgICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9y
bWF0X1VpbnQzMng0OworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpTaW50MzI6CisgICAgICAgIHJl
dHVybiBXR1BVVmVydGV4Rm9ybWF0X1NpbnQzMjsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6U2lu
dDMyeDI6CisgICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X1NpbnQzMngyOworICAgIGNh
c2UgVmVydGV4Rm9ybWF0OjpTaW50MzJ4MzoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3Jt
YXRfU2ludDMyeDM7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlNpbnQzMng0OgorICAgICAgICBy
ZXR1cm4gV0dQVVZlcnRleEZvcm1hdF9TaW50MzJ4NDsKKyAgICB9Cit9CisKK1dHUFVWZXJ0ZXhT
dGVwTW9kZSBjb252ZXJ0VG9CYWNraW5nKFZlcnRleFN0ZXBNb2RlIHZlcnRleFN0ZXBNb2RlKQor
eworICAgIHN3aXRjaCAodmVydGV4U3RlcE1vZGUpIHsKKyAgICBjYXNlIFZlcnRleFN0ZXBNb2Rl
OjpWZXJ0ZXg6CisgICAgICAgIHJldHVybiBXR1BVVmVydGV4U3RlcE1vZGVfVmVydGV4OworICAg
IGNhc2UgVmVydGV4U3RlcE1vZGU6Okluc3RhbmNlOgorICAgICAgICByZXR1cm4gV0dQVVZlcnRl
eFN0ZXBNb2RlX0luc3RhbmNlOworICAgIH0KK30KKworV0dQVUJ1ZmZlclVzYWdlRmxhZ3MgY29u
dmVydEJ1ZmZlclVzYWdlRmxhZ3NUb0JhY2tpbmcoQnVmZmVyVXNhZ2VGbGFncyBidWZmZXJVc2Fn
ZUZsYWdzKQoreworICAgIFdHUFVCdWZmZXJVc2FnZUZsYWdzIHJlc3VsdCA9IDA7CisgICAgaWYg
KGJ1ZmZlclVzYWdlRmxhZ3MgJiBCdWZmZXJVc2FnZTo6TUFQX1JFQUQpCisgICAgICAgIHJlc3Vs
dCB8PSBXR1BVQnVmZmVyVXNhZ2VfTWFwUmVhZDsKKyAgICBpZiAoYnVmZmVyVXNhZ2VGbGFncyAm
IEJ1ZmZlclVzYWdlOjpNQVBfV1JJVEUpCisgICAgICAgIHJlc3VsdCB8PSBXR1BVQnVmZmVyVXNh
Z2VfTWFwV3JpdGU7CisgICAgaWYgKGJ1ZmZlclVzYWdlRmxhZ3MgJiBCdWZmZXJVc2FnZTo6Q09Q
WV9TUkMpCisgICAgICAgIHJlc3VsdCB8PSBXR1BVQnVmZmVyVXNhZ2VfQ29weVNyYzsKKyAgICBp
ZiAoYnVmZmVyVXNhZ2VGbGFncyAmIEJ1ZmZlclVzYWdlOjpDT1BZX0RTVCkKKyAgICAgICAgcmVz
dWx0IHw9IFdHUFVCdWZmZXJVc2FnZV9Db3B5RHN0OworICAgIGlmIChidWZmZXJVc2FnZUZsYWdz
ICYgQnVmZmVyVXNhZ2U6OklOREVYKQorICAgICAgICByZXN1bHQgfD0gV0dQVUJ1ZmZlclVzYWdl
X0luZGV4OworICAgIGlmIChidWZmZXJVc2FnZUZsYWdzICYgQnVmZmVyVXNhZ2U6OlZFUlRFWCkK
KyAgICAgICAgcmVzdWx0IHw9IFdHUFVCdWZmZXJVc2FnZV9WZXJ0ZXg7CisgICAgaWYgKGJ1ZmZl
clVzYWdlRmxhZ3MgJiBCdWZmZXJVc2FnZTo6VU5JRk9STSkKKyAgICAgICAgcmVzdWx0IHw9IFdH
UFVCdWZmZXJVc2FnZV9Vbmlmb3JtOworICAgIGlmIChidWZmZXJVc2FnZUZsYWdzICYgQnVmZmVy
VXNhZ2U6OlNUT1JBR0UpCisgICAgICAgIHJlc3VsdCB8PSBXR1BVQnVmZmVyVXNhZ2VfU3RvcmFn
ZTsKKyAgICBpZiAoYnVmZmVyVXNhZ2VGbGFncyAmIEJ1ZmZlclVzYWdlOjpJTkRJUkVDVCkKKyAg
ICAgICAgcmVzdWx0IHw9IFdHUFVCdWZmZXJVc2FnZV9JbmRpcmVjdDsKKyAgICBpZiAoYnVmZmVy
VXNhZ2VGbGFncyAmIEJ1ZmZlclVzYWdlOjpRVUVSWV9SRVNPTFZFKQorICAgICAgICByZXN1bHQg
fD0gV0dQVUJ1ZmZlclVzYWdlX1F1ZXJ5UmVzb2x2ZTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitXR1BVQ29sb3JXcml0ZU1hc2tGbGFncyBjb252ZXJ0Q29sb3JXcml0ZUZsYWdzVG9CYWNraW5n
KENvbG9yV3JpdGVGbGFncyBjb2xvcldyaXRlRmxhZ3MpCit7CisgICAgV0dQVUNvbG9yV3JpdGVN
YXNrRmxhZ3MgcmVzdWx0ID0gMDsKKyAgICBpZiAoY29sb3JXcml0ZUZsYWdzICYgQ29sb3JXcml0
ZTo6UkVEKQorICAgICAgICByZXN1bHQgfD0gV0dQVUNvbG9yV3JpdGVNYXNrX1JlZDsKKyAgICBp
ZiAoY29sb3JXcml0ZUZsYWdzICYgQ29sb3JXcml0ZTo6R1JFRU4pCisgICAgICAgIHJlc3VsdCB8
PSBXR1BVQ29sb3JXcml0ZU1hc2tfR3JlZW47CisgICAgaWYgKGNvbG9yV3JpdGVGbGFncyAmIENv
bG9yV3JpdGU6OkJMVUUpCisgICAgICAgIHJlc3VsdCB8PSBXR1BVQ29sb3JXcml0ZU1hc2tfQmx1
ZTsKKyAgICBpZiAoY29sb3JXcml0ZUZsYWdzICYgQ29sb3JXcml0ZTo6QUxQSEEpCisgICAgICAg
IHJlc3VsdCB8PSBXR1BVQ29sb3JXcml0ZU1hc2tfQWxwaGE7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworV0dQVU1hcE1vZGVGbGFncyBjb252ZXJ0TWFwTW9kZUZsYWdzVG9CYWNraW5nKE1hcE1v
ZGVGbGFncyBtYXBNb2RlRmxhZ3MpCit7CisgICAgV0dQVU1hcE1vZGVGbGFncyByZXN1bHQgPSAw
OworICAgIGlmIChtYXBNb2RlRmxhZ3MgJiBNYXBNb2RlOjpSRUFEKQorICAgICAgICByZXN1bHQg
fD0gV0dQVU1hcE1vZGVfUmVhZDsKKyAgICBpZiAobWFwTW9kZUZsYWdzICYgTWFwTW9kZTo6V1JJ
VEUpCisgICAgICAgIHJlc3VsdCB8PSBXR1BVTWFwTW9kZV9Xcml0ZTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitXR1BVU2hhZGVyU3RhZ2VGbGFncyBjb252ZXJ0U2hhZGVyU3RhZ2VGbGFnc1Rv
QmFja2luZyhTaGFkZXJTdGFnZUZsYWdzIHNoYWRlclN0YWdlRmxhZ3MpCit7CisgICAgV0dQVVNo
YWRlclN0YWdlRmxhZ3MgcmVzdWx0ID0gMDsKKyAgICBpZiAoc2hhZGVyU3RhZ2VGbGFncyAmIFNo
YWRlclN0YWdlOjpWRVJURVgpCisgICAgICAgIHJlc3VsdCB8PSBXR1BVU2hhZGVyU3RhZ2VfVmVy
dGV4OworICAgIGlmIChzaGFkZXJTdGFnZUZsYWdzICYgU2hhZGVyU3RhZ2U6OkZSQUdNRU5UKQor
ICAgICAgICByZXN1bHQgfD0gV0dQVVNoYWRlclN0YWdlX0ZyYWdtZW50OworICAgIGlmIChzaGFk
ZXJTdGFnZUZsYWdzICYgU2hhZGVyU3RhZ2U6OkNPTVBVVEUpCisgICAgICAgIHJlc3VsdCB8PSBX
R1BVU2hhZGVyU3RhZ2VfQ29tcHV0ZTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXR1BVVGV4
dHVyZVVzYWdlRmxhZ3MgY29udmVydFRleHR1cmVVc2FnZUZsYWdzVG9CYWNraW5nKFRleHR1cmVV
c2FnZUZsYWdzIHRleHR1cmVVc2FnZUZsYWdzKQoreworICAgIFdHUFVUZXh0dXJlVXNhZ2VGbGFn
cyByZXN1bHQgPSAwOworICAgIGlmICh0ZXh0dXJlVXNhZ2VGbGFncyAmIFRleHR1cmVVc2FnZTo6
Q09QWV9TUkMpCisgICAgICAgIHJlc3VsdCB8PSBXR1BVVGV4dHVyZVVzYWdlX0NvcHlTcmM7Cisg
ICAgaWYgKHRleHR1cmVVc2FnZUZsYWdzICYgVGV4dHVyZVVzYWdlOjpDT1BZX0RTVCkKKyAgICAg
ICAgcmVzdWx0IHw9IFdHUFVUZXh0dXJlVXNhZ2VfQ29weURzdDsKKyAgICBpZiAodGV4dHVyZVVz
YWdlRmxhZ3MgJiBUZXh0dXJlVXNhZ2U6OlRFWFRVUkVfQklORElORykKKyAgICAgICAgcmVzdWx0
IHw9IFdHUFVUZXh0dXJlVXNhZ2VfVGV4dHVyZUJpbmRpbmc7CisgICAgaWYgKHRleHR1cmVVc2Fn
ZUZsYWdzICYgVGV4dHVyZVVzYWdlOjpTVE9SQUdFX0JJTkRJTkcpCisgICAgICAgIHJlc3VsdCB8
PSBXR1BVVGV4dHVyZVVzYWdlX1N0b3JhZ2VCaW5kaW5nOworICAgIGlmICh0ZXh0dXJlVXNhZ2VG
bGFncyAmIFRleHR1cmVVc2FnZTo6UkVOREVSX0FUVEFDSE1FTlQpCisgICAgICAgIHJlc3VsdCB8
PSBXR1BVVGV4dHVyZVVzYWdlX1JlbmRlckF0dGFjaG1lbnQ7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworV0dQVUNvbG9yIGNvbnZlcnRUb0JhY2tpbmcoY29uc3QgQ29sb3ImIGNvbG9yKQorewor
ICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGNvbG9yLCBbXSAoY29uc3QgVmVjdG9yPGRvdWJsZT4m
IHZlY3RvcikgeworICAgICAgICByZXR1cm4gV0dQVUNvbG9yIHsKKyAgICAgICAgICAgIHZlY3Rv
ci5zaXplKCkgPiAwID8gdmVjdG9yWzBdIDogMCwKKyAgICAgICAgICAgIHZlY3Rvci5zaXplKCkg
PiAxID8gdmVjdG9yWzFdIDogMCwKKyAgICAgICAgICAgIHZlY3Rvci5zaXplKCkgPiAyID8gdmVj
dG9yWzJdIDogMCwKKyAgICAgICAgICAgIHZlY3Rvci5zaXplKCkgPiAzID8gdmVjdG9yWzNdIDog
MCwKKyAgICAgICAgfTsKKyAgICB9LCBbXSAoY29uc3QgQ29sb3JEaWN0JiBjb2xvcikgeworICAg
ICAgICByZXR1cm4gV0dQVUNvbG9yIHsKKyAgICAgICAgICAgIGNvbG9yLnIsCisgICAgICAgICAg
ICBjb2xvci5nLAorICAgICAgICAgICAgY29sb3IuYiwKKyAgICAgICAgICAgIGNvbG9yLmEsCisg
ICAgICAgIH07CisgICAgfSk7Cit9CisKK1dHUFVFeHRlbnQzRCBjb252ZXJ0VG9CYWNraW5nKGNv
bnN0IEV4dGVudDNEJiBleHRlbnQzRCkKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihleHRl
bnQzRCwgW10gKGNvbnN0IFZlY3RvcjxJbnRlZ2VyQ29vcmRpbmF0ZT4mIHZlY3RvcikgeworICAg
ICAgICByZXR1cm4gV0dQVUV4dGVudDNEIHsKKyAgICAgICAgICAgIHZlY3Rvci5zaXplKCkgPiAw
ID8gdmVjdG9yWzBdIDogMCwKKyAgICAgICAgICAgIHZlY3Rvci5zaXplKCkgPiAxID8gdmVjdG9y
WzFdIDogMCwKKyAgICAgICAgICAgIHZlY3Rvci5zaXplKCkgPiAyID8gdmVjdG9yWzJdIDogMCwK
KyAgICAgICAgfTsKKyAgICB9LCBbXSAoY29uc3QgRXh0ZW50M0REaWN0JiBleHRlbnQpIHsKKyAg
ICAgICAgcmV0dXJuIFdHUFVFeHRlbnQzRCB7CisgICAgICAgICAgICBleHRlbnQud2lkdGgsCisg
ICAgICAgICAgICBleHRlbnQuaGVpZ2h0LAorICAgICAgICAgICAgZXh0ZW50LmRlcHRoT3JBcnJh
eUxheWVycywKKyAgICAgICAgfTsKKyAgICB9KTsKK30KKworV0dQVU9yaWdpbjNEIGNvbnZlcnRU
b0JhY2tpbmcoY29uc3QgT3JpZ2luMkQmIG9yaWdpbjJEKQoreworICAgIHJldHVybiBXVEY6OnN3
aXRjaE9uKG9yaWdpbjJELCBbXSAoY29uc3QgVmVjdG9yPEludGVnZXJDb29yZGluYXRlPiYgdmVj
dG9yKSB7CisgICAgICAgIHJldHVybiBXR1BVT3JpZ2luM0QgeworICAgICAgICAgICAgdmVjdG9y
LnNpemUoKSA+IDAgPyB2ZWN0b3JbMF0gOiAwLAorICAgICAgICAgICAgdmVjdG9yLnNpemUoKSA+
IDEgPyB2ZWN0b3JbMV0gOiAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgfTsKKyAgICB9LCBb
XSAoY29uc3QgT3JpZ2luMkREaWN0JiBvcmlnaW4pIHsKKyAgICAgICAgcmV0dXJuIFdHUFVPcmln
aW4zRCB7CisgICAgICAgICAgICBvcmlnaW4ueCwKKyAgICAgICAgICAgIG9yaWdpbi55LAorICAg
ICAgICAgICAgMCwKKyAgICAgICAgfTsKKyAgICB9KTsKK30KKworV0dQVU9yaWdpbjNEIGNvbnZl
cnRUb0JhY2tpbmcoY29uc3QgT3JpZ2luM0QmIG9yaWdpbjNEKQoreworICAgIHJldHVybiBXVEY6
OnN3aXRjaE9uKG9yaWdpbjNELCBbXSAoY29uc3QgVmVjdG9yPEludGVnZXJDb29yZGluYXRlPiYg
dmVjdG9yKSB7CisgICAgICAgIHJldHVybiBXR1BVT3JpZ2luM0QgeworICAgICAgICAgICAgdmVj
dG9yLnNpemUoKSA+IDAgPyB2ZWN0b3JbMF0gOiAwLAorICAgICAgICAgICAgdmVjdG9yLnNpemUo
KSA+IDEgPyB2ZWN0b3JbMV0gOiAwLAorICAgICAgICAgICAgdmVjdG9yLnNpemUoKSA+IDIgPyB2
ZWN0b3JbMl0gOiAwLAorICAgICAgICB9OworICAgIH0sIFtdIChjb25zdCBPcmlnaW4zRERpY3Qm
IG9yaWdpbikgeworICAgICAgICByZXR1cm4gV0dQVU9yaWdpbjNEIHsKKyAgICAgICAgICAgIG9y
aWdpbi54LAorICAgICAgICAgICAgb3JpZ2luLnksCisgICAgICAgICAgICBvcmlnaW4ueiwKKyAg
ICAgICAgfTsKKyAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFj
ZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2Vi
R1BVL0ltcGwvV2ViR1BVQ29udmVydFRvQmFja2luZy5oIGIvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb252ZXJ0VG9CYWNraW5nLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNGU0MWQ3OTRhYjRiZjM2NjlkZDcxNGMxMjYzNDFmODY5ODRjZTUwOQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BV
Q29udmVydFRvQmFja2luZy5oCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJXZWJHUFVBZGRyZXNzTW9kZS5oIgorI2luY2x1ZGUgIldlYkdQ
VUJsZW5kRmFjdG9yLmgiCisjaW5jbHVkZSAiV2ViR1BVQmxlbmRPcGVyYXRpb24uaCIKKyNpbmNs
dWRlICJXZWJHUFVCdWZmZXJCaW5kaW5nVHlwZS5oIgorI2luY2x1ZGUgIldlYkdQVUJ1ZmZlclVz
YWdlLmgiCisjaW5jbHVkZSAiV2ViR1BVQ29sb3IuaCIKKyNpbmNsdWRlICJXZWJHUFVDb2xvcldy
aXRlLmgiCisjaW5jbHVkZSAiV2ViR1BVQ29tcGFyZUZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiV2Vi
R1BVQ29tcGlsYXRpb25NZXNzYWdlVHlwZS5oIgorI2luY2x1ZGUgIldlYkdQVUN1bGxNb2RlLmgi
CisjaW5jbHVkZSAiV2ViR1BVRXJyb3JGaWx0ZXIuaCIKKyNpbmNsdWRlICJXZWJHUFVFeHRlbnQz
RC5oIgorI2luY2x1ZGUgIldlYkdQVUZlYXR1cmVOYW1lLmgiCisjaW5jbHVkZSAiV2ViR1BVRmls
dGVyTW9kZS5oIgorI2luY2x1ZGUgIldlYkdQVUZyb250RmFjZS5oIgorI2luY2x1ZGUgIldlYkdQ
VUluZGV4Rm9ybWF0LmgiCisjaW5jbHVkZSAiV2ViR1BVTG9hZE9wLmgiCisjaW5jbHVkZSAiV2Vi
R1BVTWFwTW9kZS5oIgorI2luY2x1ZGUgIldlYkdQVU9yaWdpbjJELmgiCisjaW5jbHVkZSAiV2Vi
R1BVT3JpZ2luM0QuaCIKKyNpbmNsdWRlICJXZWJHUFVQaXBlbGluZVN0YXRpc3RpY05hbWUuaCIK
KyNpbmNsdWRlICJXZWJHUFVQb3dlclByZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXZWJHUFVQcmlt
aXRpdmVUb3BvbG9neS5oIgorI2luY2x1ZGUgIldlYkdQVVF1ZXJ5VHlwZS5oIgorI2luY2x1ZGUg
IldlYkdQVVNhbXBsZXJCaW5kaW5nVHlwZS5oIgorI2luY2x1ZGUgIldlYkdQVVNoYWRlclN0YWdl
LmgiCisjaW5jbHVkZSAiV2ViR1BVU3RlbmNpbE9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIldlYkdQ
VVN0b3JhZ2VUZXh0dXJlQWNjZXNzLmgiCisjaW5jbHVkZSAiV2ViR1BVU3RvcmVPcC5oIgorI2lu
Y2x1ZGUgIldlYkdQVVRleHR1cmVBc3BlY3QuaCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJlRGlt
ZW5zaW9uLmgiCisjaW5jbHVkZSAiV2ViR1BVVGV4dHVyZUZvcm1hdC5oIgorI2luY2x1ZGUgIldl
YkdQVVRleHR1cmVTYW1wbGVUeXBlLmgiCisjaW5jbHVkZSAiV2ViR1BVVGV4dHVyZVVzYWdlLmgi
CisjaW5jbHVkZSAiV2ViR1BVVGV4dHVyZVZpZXdEaW1lbnNpb24uaCIKKyNpbmNsdWRlICJXZWJH
UFVWZXJ0ZXhGb3JtYXQuaCIKKyNpbmNsdWRlICJXZWJHUFVWZXJ0ZXhTdGVwTW9kZS5oIgorI2lu
Y2x1ZGUgPFdlYkdQVS9XZWJHUFUuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2Vi
R1BVIHsKKworV0dQVUFkZHJlc3NNb2RlIGNvbnZlcnRUb0JhY2tpbmcoQWRkcmVzc01vZGUpOwor
V0dQVUJsZW5kRmFjdG9yIGNvbnZlcnRUb0JhY2tpbmcoQmxlbmRGYWN0b3IpOworV0dQVUJsZW5k
T3BlcmF0aW9uIGNvbnZlcnRUb0JhY2tpbmcoQmxlbmRPcGVyYXRpb24pOworV0dQVUJ1ZmZlckJp
bmRpbmdUeXBlIGNvbnZlcnRUb0JhY2tpbmcoQnVmZmVyQmluZGluZ1R5cGUpOworV0dQVUNvbXBh
cmVGdW5jdGlvbiBjb252ZXJ0VG9CYWNraW5nKENvbXBhcmVGdW5jdGlvbik7CitXR1BVQ29tcGls
YXRpb25NZXNzYWdlVHlwZSBjb252ZXJ0VG9CYWNraW5nKENvbXBpbGF0aW9uTWVzc2FnZVR5cGUp
OworV0dQVUN1bGxNb2RlIGNvbnZlcnRUb0JhY2tpbmcoQ3VsbE1vZGUpOworV0dQVUVycm9yRmls
dGVyIGNvbnZlcnRUb0JhY2tpbmcoRXJyb3JGaWx0ZXIpOworV0dQVUZlYXR1cmVOYW1lIGNvbnZl
cnRUb0JhY2tpbmcoRmVhdHVyZU5hbWUpOworV0dQVUZpbHRlck1vZGUgY29udmVydFRvQmFja2lu
ZyhGaWx0ZXJNb2RlKTsKK1dHUFVGcm9udEZhY2UgY29udmVydFRvQmFja2luZyhGcm9udEZhY2Up
OworV0dQVUluZGV4Rm9ybWF0IGNvbnZlcnRUb0JhY2tpbmcoSW5kZXhGb3JtYXQpOworV0dQVUxv
YWRPcCBjb252ZXJ0VG9CYWNraW5nKExvYWRPcCk7CitXR1BVUGlwZWxpbmVTdGF0aXN0aWNOYW1l
IGNvbnZlcnRUb0JhY2tpbmcoUGlwZWxpbmVTdGF0aXN0aWNOYW1lKTsKK1dHUFVQb3dlclByZWZl
cmVuY2UgY29udmVydFRvQmFja2luZyhQb3dlclByZWZlcmVuY2UpOworV0dQVVByaW1pdGl2ZVRv
cG9sb2d5IGNvbnZlcnRUb0JhY2tpbmcoUHJpbWl0aXZlVG9wb2xvZ3kpOworV0dQVVF1ZXJ5VHlw
ZSBjb252ZXJ0VG9CYWNraW5nKFF1ZXJ5VHlwZSk7CitXR1BVU2FtcGxlckJpbmRpbmdUeXBlIGNv
bnZlcnRUb0JhY2tpbmcoU2FtcGxlckJpbmRpbmdUeXBlKTsKK1dHUFVTdGVuY2lsT3BlcmF0aW9u
IGNvbnZlcnRUb0JhY2tpbmcoU3RlbmNpbE9wZXJhdGlvbik7CitXR1BVU3RvcmFnZVRleHR1cmVB
Y2Nlc3MgY29udmVydFRvQmFja2luZyhTdG9yYWdlVGV4dHVyZUFjY2Vzcyk7CitXR1BVU3RvcmVP
cCBjb252ZXJ0VG9CYWNraW5nKFN0b3JlT3ApOworV0dQVVRleHR1cmVBc3BlY3QgY29udmVydFRv
QmFja2luZyhUZXh0dXJlQXNwZWN0KTsKK1dHUFVUZXh0dXJlRGltZW5zaW9uIGNvbnZlcnRUb0Jh
Y2tpbmcoVGV4dHVyZURpbWVuc2lvbik7CitXR1BVVGV4dHVyZUZvcm1hdCBjb252ZXJ0VG9CYWNr
aW5nKFRleHR1cmVGb3JtYXQpOworV0dQVVRleHR1cmVTYW1wbGVUeXBlIGNvbnZlcnRUb0JhY2tp
bmcoVGV4dHVyZVNhbXBsZVR5cGUpOworV0dQVVRleHR1cmVWaWV3RGltZW5zaW9uIGNvbnZlcnRU
b0JhY2tpbmcoVGV4dHVyZVZpZXdEaW1lbnNpb24pOworV0dQVVZlcnRleEZvcm1hdCBjb252ZXJ0
VG9CYWNraW5nKFZlcnRleEZvcm1hdCk7CitXR1BVVmVydGV4U3RlcE1vZGUgY29udmVydFRvQmFj
a2luZyhWZXJ0ZXhTdGVwTW9kZSk7CitXR1BVQnVmZmVyVXNhZ2VGbGFncyBjb252ZXJ0QnVmZmVy
VXNhZ2VGbGFnc1RvQmFja2luZyhCdWZmZXJVc2FnZUZsYWdzKTsKK1dHUFVDb2xvcldyaXRlTWFz
a0ZsYWdzIGNvbnZlcnRDb2xvcldyaXRlRmxhZ3NUb0JhY2tpbmcoQ29sb3JXcml0ZUZsYWdzKTsK
K1dHUFVNYXBNb2RlRmxhZ3MgY29udmVydE1hcE1vZGVGbGFnc1RvQmFja2luZyhNYXBNb2RlRmxh
Z3MpOworV0dQVVNoYWRlclN0YWdlRmxhZ3MgY29udmVydFNoYWRlclN0YWdlRmxhZ3NUb0JhY2tp
bmcoU2hhZGVyU3RhZ2VGbGFncyk7CitXR1BVVGV4dHVyZVVzYWdlRmxhZ3MgY29udmVydFRleHR1
cmVVc2FnZUZsYWdzVG9CYWNraW5nKFRleHR1cmVVc2FnZUZsYWdzKTsKK1dHUFVDb2xvciBjb252
ZXJ0VG9CYWNraW5nKGNvbnN0IENvbG9yJik7CitXR1BVRXh0ZW50M0QgY29udmVydFRvQmFja2lu
Zyhjb25zdCBFeHRlbnQzRCYpOworV0dQVU9yaWdpbjNEIGNvbnZlcnRUb0JhY2tpbmcoY29uc3Qg
T3JpZ2luMkQmKTsKK1dHUFVPcmlnaW4zRCBjb252ZXJ0VG9CYWNraW5nKGNvbnN0IE9yaWdpbjNE
Jik7CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVURl
dmljZUltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1w
bC9XZWJHUFVEZXZpY2VJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZTE3YjIzMGVjZmU5MmYxM2Q0NmM2
YTkwNDE4MzUwYWRlMzUwNzE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFM
L3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVEZXZpY2VJbXBsLmNwcApAQCAtMCwwICsx
LDU4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJH
UFVEZXZpY2VJbXBsLmgiCisKKyNpbmNsdWRlICJXZWJHUFVCaW5kR3JvdXBEZXNjcmlwdG9yLmgi
CisjaW5jbHVkZSAiV2ViR1BVQmluZEdyb3VwSW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVUJpbmRH
cm91cExheW91dERlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJXZWJHUFVCaW5kR3JvdXBMYXlvdXRJ
bXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVQnVmZmVyRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIldl
YkdQVUJ1ZmZlckltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVDb21tYW5kRW5jb2RlckRlc2NyaXB0
b3IuaCIKKyNpbmNsdWRlICJXZWJHUFVDb21tYW5kRW5jb2RlckltcGwuaCIKKyNpbmNsdWRlICJX
ZWJHUFVDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiV2ViR1BVQ29tcHV0
ZVBpcGVsaW5lSW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVUNvbnZlcnRUb0JhY2tpbmcuaCIKKyNp
bmNsdWRlICJXZWJHUFVFeHRlcm5hbFRleHR1cmVJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVT3V0
T2ZNZW1vcnlFcnJvci5oIgorI2luY2x1ZGUgIldlYkdQVVBpcGVsaW5lTGF5b3V0RGVzY3JpcHRv
ci5oIgorI2luY2x1ZGUgIldlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5oIgorI2luY2x1ZGUgIldl
YkdQVVF1ZXJ5U2V0RGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIldlYkdQVVF1ZXJ5U2V0SW1wbC5o
IgorI2luY2x1ZGUgIldlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJEZXNjcmlwdG9yLmgiCisjaW5j
bHVkZSAiV2ViR1BVUmVuZGVyQnVuZGxlRW5jb2RlckltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVS
ZW5kZXJQaXBlbGluZURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJXZWJHUFVSZW5kZXJQaXBlbGlu
ZUltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVTYW1wbGVyRGVzY3JpcHRvci5oIgorI2luY2x1ZGUg
IldlYkdQVVNhbXBsZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVU2hhZGVyTW9kdWxlRGVzY3Jp
cHRvci5oIgorI2luY2x1ZGUgIldlYkdQVVNoYWRlck1vZHVsZUltcGwuaCIKKyNpbmNsdWRlICJX
ZWJHUFVUZXh0dXJlRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIldlYkdQVVRleHR1cmVJbXBsLmgi
CisjaW5jbHVkZSAiV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVVmFs
aWRhdGlvbkVycm9yLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVUV4dC5oPgorCituYW1lc3Bh
Y2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitEZXZpY2VJbXBsOjpEZXZpY2VJbXBsKFdH
UFVEZXZpY2UgZGV2aWNlLCBSZWY8U3VwcG9ydGVkRmVhdHVyZXM+JiYgZmVhdHVyZXMsIFJlZjxT
dXBwb3J0ZWRMaW1pdHM+JiYgbGltaXRzKQorICAgIDogRGV2aWNlKFdURk1vdmUoZmVhdHVyZXMp
LCBXVEZNb3ZlKGxpbWl0cykpCisgICAgLCBtX2JhY2tpbmcoZGV2aWNlKQoreworfQorCitEZXZp
Y2VJbXBsOjp+RGV2aWNlSW1wbCgpCit7CisgICAgd2dwdURldmljZVJlbGVhc2UobV9iYWNraW5n
KTsKK30KKwordm9pZCBEZXZpY2VJbXBsOjpkZXN0cm95KCkKK3sKKyAgICB3Z3B1RGV2aWNlRGVz
dHJveShtX2JhY2tpbmcpOworfQorCitSZWY8QnVmZmVyPiBEZXZpY2VJbXBsOjpjcmVhdGVCdWZm
ZXIoY29uc3QgQnVmZmVyRGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBhdXRvIGxhYmVs
ID0gZGVzY3JpcHRvci5sYWJlbC51dGY4KCk7CisKKyAgICBXR1BVQnVmZmVyRGVzY3JpcHRvciBi
YWNraW5nRGVzY3JpcHRvciB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIGxhYmVsLmRhdGEo
KSwKKyAgICAgICAgY29udmVydEJ1ZmZlclVzYWdlRmxhZ3NUb0JhY2tpbmcoZGVzY3JpcHRvci51
c2FnZSksCisgICAgICAgIGRlc2NyaXB0b3Iuc2l6ZSwKKyAgICAgICAgZGVzY3JpcHRvci5tYXBw
ZWRBdENyZWF0aW9uLAorICAgIH07CisKKyAgICByZXR1cm4gQnVmZmVySW1wbDo6Y3JlYXRlKHdn
cHVEZXZpY2VDcmVhdGVCdWZmZXIobV9iYWNraW5nLCAmYmFja2luZ0Rlc2NyaXB0b3IpKTsKK30K
KworUmVmPFRleHR1cmU+IERldmljZUltcGw6OmNyZWF0ZVRleHR1cmUoY29uc3QgVGV4dHVyZURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgYXV0byBzaXplID0gY29udmVydFRvQmFja2lu
ZyhkZXNjcmlwdG9yLnNpemUpOworCisgICAgYXV0byBsYWJlbCA9IGRlc2NyaXB0b3IubGFiZWwu
dXRmOCgpOworCisgICAgV0dQVVRleHR1cmVEZXNjcmlwdG9yIGJhY2tpbmdEZXNjcmlwdG9yIHsK
KyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgbGFiZWwuZGF0YSgpLAorICAgICAgICBjb252ZXJ0
VGV4dHVyZVVzYWdlRmxhZ3NUb0JhY2tpbmcoZGVzY3JpcHRvci51c2FnZSksCisgICAgICAgIGNv
bnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci5kaW1lbnNpb24pLAorICAgICAgICBzaXplLAorICAg
ICAgICBjb252ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3IuZm9ybWF0KSwKKyAgICAgICAgZGVzY3Jp
cHRvci5taXBMZXZlbENvdW50LAorICAgICAgICBkZXNjcmlwdG9yLnNhbXBsZUNvdW50LAorICAg
IH07CisKKyAgICByZXR1cm4gVGV4dHVyZUltcGw6OmNyZWF0ZSh3Z3B1RGV2aWNlQ3JlYXRlVGV4
dHVyZShtX2JhY2tpbmcsICZiYWNraW5nRGVzY3JpcHRvciksIGRlc2NyaXB0b3IuZm9ybWF0LCBk
ZXNjcmlwdG9yLmRpbWVuc2lvbik7Cit9CisKK1JlZjxTYW1wbGVyPiBEZXZpY2VJbXBsOjpjcmVh
dGVTYW1wbGVyKGNvbnN0IFNhbXBsZXJEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIGF1
dG8gbGFiZWwgPSBkZXNjcmlwdG9yLmxhYmVsLnV0ZjgoKTsKKworICAgIFdHUFVTYW1wbGVyRGVz
Y3JpcHRvciBiYWNraW5nRGVzY3JpcHRvciB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIGxh
YmVsLmRhdGEoKSwKKyAgICAgICAgY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLmFkZHJlc3NN
b2RlVSksCisgICAgICAgIGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci5hZGRyZXNzTW9kZVYp
LAorICAgICAgICBjb252ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3IuYWRkcmVzc01vZGVXKSwKKyAg
ICAgICAgY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLm1hZ0ZpbHRlciksCisgICAgICAgIGNv
bnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci5taW5GaWx0ZXIpLAorICAgICAgICBjb252ZXJ0VG9C
YWNraW5nKGRlc2NyaXB0b3IubWlwbWFwRmlsdGVyKSwKKyAgICAgICAgZGVzY3JpcHRvci5sb2RN
aW5DbGFtcCwKKyAgICAgICAgZGVzY3JpcHRvci5sb2RNYXhDbGFtcCwKKyAgICAgICAgZGVzY3Jp
cHRvci5jb21wYXJlID8gY29udmVydFRvQmFja2luZygqZGVzY3JpcHRvci5jb21wYXJlKSA6IFdH
UFVDb21wYXJlRnVuY3Rpb25fQWx3YXlzLAorICAgICAgICBkZXNjcmlwdG9yLm1heEFuaXNvdHJv
cHksCisgICAgfTsKKworICAgIHJldHVybiBTYW1wbGVySW1wbDo6Y3JlYXRlKHdncHVEZXZpY2VD
cmVhdGVTYW1wbGVyKG1fYmFja2luZywgJmJhY2tpbmdEZXNjcmlwdG9yKSk7Cit9CisKK1JlZjxF
eHRlcm5hbFRleHR1cmU+IERldmljZUltcGw6OmltcG9ydEV4dGVybmFsVGV4dHVyZShjb25zdCBF
eHRlcm5hbFRleHR1cmVEZXNjcmlwdG9yJikKK3sKKyAgICByZXR1cm4gRXh0ZXJuYWxUZXh0dXJl
SW1wbDo6Y3JlYXRlKCk7Cit9CisKK1JlZjxCaW5kR3JvdXBMYXlvdXQ+IERldmljZUltcGw6OmNy
ZWF0ZUJpbmRHcm91cExheW91dChjb25zdCBCaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yJiBkZXNj
cmlwdG9yKQoreworICAgIGF1dG8gbGFiZWwgPSBkZXNjcmlwdG9yLmxhYmVsLnV0ZjgoKTsKKwor
ICAgIFZlY3RvcjxXR1BVQmluZEdyb3VwTGF5b3V0RW50cnk+IGJhY2tpbmdFbnRyaWVzOworICAg
IGJhY2tpbmdFbnRyaWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGVzY3JpcHRvci5lbnRyaWVz
LnNpemUoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IGRlc2NyaXB0b3IuZW50cmll
cykgeworICAgICAgICBiYWNraW5nRW50cmllcy51bmNoZWNrZWRBcHBlbmQoV0dQVUJpbmRHcm91
cExheW91dEVudHJ5IHsKKyAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICBlbnRyeS5i
aW5kaW5nLAorICAgICAgICAgICAgY29udmVydFNoYWRlclN0YWdlRmxhZ3NUb0JhY2tpbmcoZW50
cnkudmlzaWJpbGl0eSksIHsKKyAgICAgICAgICAgICAgICBudWxscHRyLAorICAgICAgICAgICAg
ICAgIGVudHJ5LmJ1ZmZlciA/IGNvbnZlcnRUb0JhY2tpbmcoZW50cnkuYnVmZmVyLT50eXBlKSA6
IFdHUFVCdWZmZXJCaW5kaW5nVHlwZV9VbmRlZmluZWQsCisgICAgICAgICAgICAgICAgZW50cnku
YnVmZmVyID8gZW50cnkuYnVmZmVyLT5oYXNEeW5hbWljT2Zmc2V0IDogZmFsc2UsCisgICAgICAg
ICAgICAgICAgZW50cnkuYnVmZmVyID8gZW50cnkuYnVmZmVyLT5taW5CaW5kaW5nU2l6ZSA6IDAs
CisgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAg
ICAgICBlbnRyeS5zYW1wbGVyID8gY29udmVydFRvQmFja2luZyhlbnRyeS5zYW1wbGVyLT50eXBl
KSA6IFdHUFVTYW1wbGVyQmluZGluZ1R5cGVfVW5kZWZpbmVkLAorICAgICAgICAgICAgfSwgewor
ICAgICAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICAgICAgZW50cnkudGV4dHVyZSA/
IGNvbnZlcnRUb0JhY2tpbmcoZW50cnkudGV4dHVyZS0+c2FtcGxlVHlwZSkgOiBXR1BVVGV4dHVy
ZVNhbXBsZVR5cGVfVW5kZWZpbmVkLAorICAgICAgICAgICAgICAgIGVudHJ5LnRleHR1cmUgPyBj
b252ZXJ0VG9CYWNraW5nKGVudHJ5LnRleHR1cmUtPnZpZXdEaW1lbnNpb24pIDogV0dQVVRleHR1
cmVWaWV3RGltZW5zaW9uX1VuZGVmaW5lZCwKKyAgICAgICAgICAgICAgICBlbnRyeS50ZXh0dXJl
ID8gZW50cnkudGV4dHVyZS0+bXVsdGlzYW1wbGVkIDogZmFsc2UsCisgICAgICAgICAgICB9LCB7
CisgICAgICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICBlbnRyeS5zdG9yYWdl
VGV4dHVyZSA/IGNvbnZlcnRUb0JhY2tpbmcoZW50cnkuc3RvcmFnZVRleHR1cmUtPmFjY2Vzcykg
OiBXR1BVU3RvcmFnZVRleHR1cmVBY2Nlc3NfVW5kZWZpbmVkLAorICAgICAgICAgICAgICAgIGVu
dHJ5LnN0b3JhZ2VUZXh0dXJlID8gY29udmVydFRvQmFja2luZyhlbnRyeS5zdG9yYWdlVGV4dHVy
ZS0+Zm9ybWF0KSA6IFdHUFVUZXh0dXJlRm9ybWF0X1VuZGVmaW5lZCwKKyAgICAgICAgICAgICAg
ICBlbnRyeS5zdG9yYWdlVGV4dHVyZSA/IGNvbnZlcnRUb0JhY2tpbmcoZW50cnkuc3RvcmFnZVRl
eHR1cmUtPnZpZXdEaW1lbnNpb24pIDogV0dQVVRleHR1cmVWaWV3RGltZW5zaW9uX1VuZGVmaW5l
ZCwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0pOworICAgIH0KKworICAgIFdHUFVCaW5kR3Jv
dXBMYXlvdXREZXNjcmlwdG9yIGJhY2tpbmdEZXNjcmlwdG9yIHsKKyAgICAgICAgbnVsbHB0ciwK
KyAgICAgICAgbGFiZWwuZGF0YSgpLAorICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYmFj
a2luZ0VudHJpZXMuc2l6ZSgpKSwKKyAgICAgICAgYmFja2luZ0VudHJpZXMuZGF0YSgpLAorICAg
IH07CisKKyAgICByZXR1cm4gQmluZEdyb3VwTGF5b3V0SW1wbDo6Y3JlYXRlKHdncHVEZXZpY2VD
cmVhdGVCaW5kR3JvdXBMYXlvdXQobV9iYWNraW5nLCAmYmFja2luZ0Rlc2NyaXB0b3IpKTsKK30K
KworUmVmPFBpcGVsaW5lTGF5b3V0PiBEZXZpY2VJbXBsOjpjcmVhdGVQaXBlbGluZUxheW91dChj
b25zdCBQaXBlbGluZUxheW91dERlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgYXV0byBs
YWJlbCA9IGRlc2NyaXB0b3IubGFiZWwudXRmOCgpOworCisgICAgVmVjdG9yPFdHUFVCaW5kR3Jv
dXBMYXlvdXQ+IGJhY2tpbmdCaW5kR3JvdXBMYXlvdXRzOworICAgIGJhY2tpbmdCaW5kR3JvdXBM
YXlvdXRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGVzY3JpcHRvci5iaW5kR3JvdXBMYXlvdXRz
LnNpemUoKSk7CisgICAgZm9yIChhdXRvIGJpbmRHcm91cExheW91dCA6IGRlc2NyaXB0b3IuYmlu
ZEdyb3VwTGF5b3V0cykKKyAgICAgICAgYmFja2luZ0JpbmRHcm91cExheW91dHMudW5jaGVja2Vk
QXBwZW5kKHN0YXRpY19jYXN0PGNvbnN0IEJpbmRHcm91cExheW91dEltcGwmPihiaW5kR3JvdXBM
YXlvdXQuZ2V0KCkpLmJhY2tpbmcoKSk7CisKKyAgICBXR1BVUGlwZWxpbmVMYXlvdXREZXNjcmlw
dG9yIGJhY2tpbmdEZXNjcmlwdG9yIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgbGFiZWwu
ZGF0YSgpLAorICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYmFja2luZ0JpbmRHcm91cExh
eW91dHMuc2l6ZSgpKSwKKyAgICAgICAgYmFja2luZ0JpbmRHcm91cExheW91dHMuZGF0YSgpLAor
ICAgIH07CisKKyAgICByZXR1cm4gUGlwZWxpbmVMYXlvdXRJbXBsOjpjcmVhdGUod2dwdURldmlj
ZUNyZWF0ZVBpcGVsaW5lTGF5b3V0KG1fYmFja2luZywgJmJhY2tpbmdEZXNjcmlwdG9yKSk7Cit9
CisKK1JlZjxCaW5kR3JvdXA+IERldmljZUltcGw6OmNyZWF0ZUJpbmRHcm91cChjb25zdCBCaW5k
R3JvdXBEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIGF1dG8gbGFiZWwgPSBkZXNjcmlw
dG9yLmxhYmVsLnV0ZjgoKTsKKworICAgIFZlY3RvcjxXR1BVQmluZEdyb3VwRW50cnk+IGJhY2tp
bmdFbnRyaWVzOworICAgIGJhY2tpbmdFbnRyaWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGVz
Y3JpcHRvci5lbnRyaWVzLnNpemUoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBiaW5kR3JvdXBF
bnRyeSA6IGRlc2NyaXB0b3IuZW50cmllcykgeworICAgICAgICBiYWNraW5nRW50cmllcy51bmNo
ZWNrZWRBcHBlbmQoV0dQVUJpbmRHcm91cEVudHJ5IHsKKyAgICAgICAgICAgIG51bGxwdHIsCisg
ICAgICAgICAgICBiaW5kR3JvdXBFbnRyeS5iaW5kaW5nLAorICAgICAgICAgICAgc3RkOjpob2xk
c19hbHRlcm5hdGl2ZTxCdWZmZXJCaW5kaW5nPihiaW5kR3JvdXBFbnRyeS5yZXNvdXJjZSkgPyBz
dGF0aWNfY2FzdDxjb25zdCBCdWZmZXJJbXBsJj4oc3RkOjpnZXQ8QnVmZmVyQmluZGluZz4oYmlu
ZEdyb3VwRW50cnkucmVzb3VyY2UpLmJ1ZmZlcikuYmFja2luZygpIDogbnVsbHB0ciwKKyAgICAg
ICAgICAgIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8QnVmZmVyQmluZGluZz4oYmluZEdyb3VwRW50
cnkucmVzb3VyY2UpID8gc3RkOjpnZXQ8QnVmZmVyQmluZGluZz4oYmluZEdyb3VwRW50cnkucmVz
b3VyY2UpLm9mZnNldCA6IDAsCisgICAgICAgICAgICBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPEJ1
ZmZlckJpbmRpbmc+KGJpbmRHcm91cEVudHJ5LnJlc291cmNlKSA/IHN0ZDo6Z2V0PEJ1ZmZlckJp
bmRpbmc+KGJpbmRHcm91cEVudHJ5LnJlc291cmNlKS5zaXplLnZhbHVlX29yKFdHUFVfV0hPTEVf
U0laRSkgOiAwLAorICAgICAgICAgICAgc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPFNhbXBsZXI+PihiaW5kR3JvdXBFbnRyeS5yZXNvdXJjZSkgPyBzdGF0aWNf
Y2FzdDxjb25zdCBTYW1wbGVySW1wbCY+KHN0ZDo6Z2V0PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
U2FtcGxlcj4+KGJpbmRHcm91cEVudHJ5LnJlc291cmNlKS5nZXQoKSkuYmFja2luZygpIDogbnVs
bHB0ciwKKyAgICAgICAgICAgIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxUZXh0dXJlVmlldz4+KGJpbmRHcm91cEVudHJ5LnJlc291cmNlKSA/IHN0YXRpY19j
YXN0PGNvbnN0IFRleHR1cmVWaWV3SW1wbCY+KHN0ZDo6Z2V0PHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8VGV4dHVyZVZpZXc+PihiaW5kR3JvdXBFbnRyeS5yZXNvdXJjZSkuZ2V0KCkpLmJhY2tpbmco
KSA6IG51bGxwdHIsCisgICAgICAgIH0pOworICAgIH0KKworICAgIFdHUFVCaW5kR3JvdXBEZXNj
cmlwdG9yIGJhY2tpbmdEZXNjcmlwdG9yIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgbGFi
ZWwuZGF0YSgpLAorICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBCaW5kR3JvdXBMYXlvdXRJbXBs
Jj4oZGVzY3JpcHRvci5sYXlvdXQpLmJhY2tpbmcoKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KGJhY2tpbmdFbnRyaWVzLnNpemUoKSksCisgICAgICAgIGJhY2tpbmdFbnRyaWVzLmRh
dGEoKSwKKyAgICB9OworCisgICAgcmV0dXJuIEJpbmRHcm91cEltcGw6OmNyZWF0ZSh3Z3B1RGV2
aWNlQ3JlYXRlQmluZEdyb3VwKG1fYmFja2luZywgJmJhY2tpbmdEZXNjcmlwdG9yKSk7Cit9CisK
K1JlZjxTaGFkZXJNb2R1bGU+IERldmljZUltcGw6OmNyZWF0ZVNoYWRlck1vZHVsZShjb25zdCBT
aGFkZXJNb2R1bGVEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIGF1dG8gbGFiZWwgPSBk
ZXNjcmlwdG9yLmxhYmVsLnV0ZjgoKTsKKworICAgIFdHUFVTaGFkZXJNb2R1bGVEZXNjcmlwdG9y
IGJhY2tpbmdEZXNjcmlwdG9yIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgbGFiZWwuZGF0
YSgpLAorICAgIH07CisKKyAgICByZXR1cm4gU2hhZGVyTW9kdWxlSW1wbDo6Y3JlYXRlKHdncHVE
ZXZpY2VDcmVhdGVTaGFkZXJNb2R1bGUobV9iYWNraW5nLCAmYmFja2luZ0Rlc2NyaXB0b3IpKTsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CithdXRvIGNvbnZlcnRUb0JhY2tpbmcoY29uc3Qg
Q29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciYgZGVzY3JpcHRvciwgVCYmIGNhbGxiYWNrKQorewor
ICAgIGF1dG8gbGFiZWwgPSBkZXNjcmlwdG9yLmxhYmVsLnV0ZjgoKTsKKworICAgIGF1dG8gZW50
cnlQb2ludCA9IGRlc2NyaXB0b3IuY29tcHV0ZS5lbnRyeVBvaW50LnV0ZjgoKTsKKworICAgIFZl
Y3RvcjxDU3RyaW5nPiBrZXlzOworICAgIGtleXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShkZXNj
cmlwdG9yLmNvbXB1dGUuY29uc3RhbnRzLnNpemUoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBj
b25zdGFudCA6IGRlc2NyaXB0b3IuY29tcHV0ZS5jb25zdGFudHMpCisgICAgICAgIGtleXMudW5j
aGVja2VkQXBwZW5kKGNvbnN0YW50LmtleS51dGY4KCkpOworCisgICAgVmVjdG9yPFdHUFVDb25z
dGFudEVudHJ5PiBiYWNraW5nQ29uc3RhbnRFbnRyaWVzOworICAgIGJhY2tpbmdDb25zdGFudEVu
dHJpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShkZXNjcmlwdG9yLmNvbXB1dGUuY29uc3RhbnRz
LnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkZXNjcmlwdG9yLmNvbXB1dGUu
Y29uc3RhbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIGNvbnN0YW50ID0g
ZGVzY3JpcHRvci5jb21wdXRlLmNvbnN0YW50c1tpXTsKKyAgICAgICAgYmFja2luZ0NvbnN0YW50
RW50cmllcy51bmNoZWNrZWRBcHBlbmQoV0dQVUNvbnN0YW50RW50cnkgeworICAgICAgICAgICAg
bnVsbHB0ciwKKyAgICAgICAgICAgIGtleXNbaV0uZGF0YSgpLAorICAgICAgICAgICAgY29uc3Rh
bnQudmFsdWUKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgV0dQVUNvbXB1dGVQaXBlbGluZURl
c2NyaXB0b3IgYmFja2luZ0Rlc2NyaXB0b3IgeworICAgICAgICBudWxscHRyLAorICAgICAgICBs
YWJlbC5kYXRhKCksCisgICAgICAgIGRlc2NyaXB0b3IubGF5b3V0ID8gc3RhdGljX2Nhc3Q8Y29u
c3QgUGlwZWxpbmVMYXlvdXRJbXBsJj4oKmRlc2NyaXB0b3IubGF5b3V0KS5iYWNraW5nKCkgOiBu
dWxscHRyLCB7CisgICAgICAgICAgICBudWxscHRyLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
Y29uc3QgU2hhZGVyTW9kdWxlSW1wbCY+KGRlc2NyaXB0b3IuY29tcHV0ZS5tb2R1bGUpLmJhY2tp
bmcoKSwKKyAgICAgICAgICAgIGVudHJ5UG9pbnQuZGF0YSgpLAorICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KGJhY2tpbmdDb25zdGFudEVudHJpZXMuc2l6ZSgpKSwKKyAgICAgICAg
ICAgIGJhY2tpbmdDb25zdGFudEVudHJpZXMuZGF0YSgpLAorICAgICAgICB9CisgICAgfTsKKwor
ICAgIHJldHVybiBjYWxsYmFjayhiYWNraW5nRGVzY3JpcHRvcik7Cit9CisKK1JlZjxDb21wdXRl
UGlwZWxpbmU+IERldmljZUltcGw6OmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb25zdCBDb21wdXRl
UGlwZWxpbmVEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIHJldHVybiBjb252ZXJ0VG9C
YWNraW5nKGRlc2NyaXB0b3IsIFt0aGlzXSAoY29uc3QgV0dQVUNvbXB1dGVQaXBlbGluZURlc2Ny
aXB0b3ImIGJhY2tpbmdEZXNjcmlwdG9yKSB7CisgICAgICAgIHJldHVybiBDb21wdXRlUGlwZWxp
bmVJbXBsOjpjcmVhdGUod2dwdURldmljZUNyZWF0ZUNvbXB1dGVQaXBlbGluZShtX2JhY2tpbmcs
ICZiYWNraW5nRGVzY3JpcHRvcikpOworICAgIH0pOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK2F1dG8gY29udmVydFRvQmFja2luZyhjb25zdCBSZW5kZXJQaXBlbGluZURlc2NyaXB0b3Im
IGRlc2NyaXB0b3IsIFQmJiBjYWxsYmFjaykKK3sKKyAgICBhdXRvIGxhYmVsID0gZGVzY3JpcHRv
ci5sYWJlbC51dGY4KCk7CisKKyAgICBWZWN0b3I8VmVjdG9yPFdHUFVWZXJ0ZXhBdHRyaWJ1dGU+
PiBiYWNraW5nQXR0cmlidXRlczsKKyAgICBiYWNraW5nQXR0cmlidXRlcy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KGRlc2NyaXB0b3IudmVydGV4LmJ1ZmZlcnMuc2l6ZSgpKTsKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIGJ1ZmZlciA6IGRlc2NyaXB0b3IudmVydGV4LmJ1ZmZlcnMpIHsKKyAgICAgICAg
aWYgKGJ1ZmZlcikgeworICAgICAgICAgICAgVmVjdG9yPFdHUFVWZXJ0ZXhBdHRyaWJ1dGU+IGF0
dHJpYnV0ZXM7CisgICAgICAgICAgICBhdHRyaWJ1dGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
YnVmZmVyLT5hdHRyaWJ1dGVzLnNpemUoKSk7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8m
IGF0dHJpYnV0ZSA6IGJ1ZmZlci0+YXR0cmlidXRlcykgeworICAgICAgICAgICAgICAgIGF0dHJp
YnV0ZXMudW5jaGVja2VkQXBwZW5kKFdHUFVWZXJ0ZXhBdHRyaWJ1dGUgeworICAgICAgICAgICAg
ICAgICAgICBjb252ZXJ0VG9CYWNraW5nKGF0dHJpYnV0ZS5mb3JtYXQpLAorICAgICAgICAgICAg
ICAgICAgICBhdHRyaWJ1dGUub2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUu
c2hhZGVyTG9jYXRpb24sCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBiYWNraW5nQXR0cmlidXRlcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShhdHRyaWJ1
dGVzKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYmFja2luZ0F0dHJpYnV0ZXMudW5j
aGVja2VkQXBwZW5kKHsgfSk7CisgICAgfQorCisgICAgVmVjdG9yPFdHUFVWZXJ0ZXhCdWZmZXJM
YXlvdXQ+IGJhY2tpbmdCdWZmZXJzOworICAgIGJhY2tpbmdCdWZmZXJzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoZGVzY3JpcHRvci52ZXJ0ZXguYnVmZmVycy5zaXplKCkpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgZGVzY3JpcHRvci52ZXJ0ZXguYnVmZmVycy5zaXplKCk7ICsraSkgewor
ICAgICAgICBjb25zdCBhdXRvJiBidWZmZXIgPSBkZXNjcmlwdG9yLnZlcnRleC5idWZmZXJzW2ld
OworICAgICAgICBiYWNraW5nQnVmZmVycy51bmNoZWNrZWRBcHBlbmQoV0dQVVZlcnRleEJ1ZmZl
ckxheW91dCB7CisgICAgICAgICAgICBidWZmZXIgPyBidWZmZXItPmFycmF5U3RyaWRlIDogV0dQ
VV9DT1BZX1NUUklERV9VTkRFRklORUQsCisgICAgICAgICAgICBidWZmZXIgPyBjb252ZXJ0VG9C
YWNraW5nKGJ1ZmZlci0+c3RlcE1vZGUpIDogV0dQVVZlcnRleFN0ZXBNb2RlX1ZlcnRleCwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90PihiYWNraW5nQXR0cmlidXRlc1tpXS5zaXpl
KCkpLAorICAgICAgICAgICAgYmFja2luZ0F0dHJpYnV0ZXNbaV0uZGF0YSgpLAorICAgICAgICB9
KTsKKyAgICB9CisKKyAgICBXR1BVRGVwdGhTdGVuY2lsU3RhdGUgZGVwdGhTdGVuY2lsU3RhdGUg
eworICAgICAgICBudWxscHRyLAorICAgICAgICBkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbCA/IGNv
bnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwtPmZvcm1hdCkgOiBXR1BVVGV4
dHVyZUZvcm1hdF9VbmRlZmluZWQsCisgICAgICAgIGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsID8g
ZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwtPmRlcHRoV3JpdGVFbmFibGVkIDogZmFsc2UsCisgICAg
ICAgIGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsID8gY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9y
LmRlcHRoU3RlbmNpbC0+ZGVwdGhDb21wYXJlKSA6IFdHUFVDb21wYXJlRnVuY3Rpb25fVW5kZWZp
bmVkLCB7CisgICAgICAgICAgICBkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbCA/IGNvbnZlcnRUb0Jh
Y2tpbmcoZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwtPnN0ZW5jaWxGcm9udC5jb21wYXJlKSA6IFdH
UFVDb21wYXJlRnVuY3Rpb25fVW5kZWZpbmVkLAorICAgICAgICAgICAgZGVzY3JpcHRvci5kZXB0
aFN0ZW5jaWwgPyBjb252ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsLT5zdGVu
Y2lsRnJvbnQuZmFpbE9wKSA6IFdHUFVTdGVuY2lsT3BlcmF0aW9uX0tlZXAsCisgICAgICAgICAg
ICBkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbCA/IGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci5k
ZXB0aFN0ZW5jaWwtPnN0ZW5jaWxGcm9udC5kZXB0aEZhaWxPcCkgOiBXR1BVU3RlbmNpbE9wZXJh
dGlvbl9LZWVwLAorICAgICAgICAgICAgZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwgPyBjb252ZXJ0
VG9CYWNraW5nKGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsLT5zdGVuY2lsRnJvbnQucGFzc09wKSA6
IFdHUFVTdGVuY2lsT3BlcmF0aW9uX0tlZXAsCisgICAgICAgIH0sIHsKKyAgICAgICAgICAgIGRl
c2NyaXB0b3IuZGVwdGhTdGVuY2lsID8gY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLmRlcHRo
U3RlbmNpbC0+c3RlbmNpbEJhY2suY29tcGFyZSkgOiBXR1BVQ29tcGFyZUZ1bmN0aW9uX1VuZGVm
aW5lZCwKKyAgICAgICAgICAgIGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsID8gY29udmVydFRvQmFj
a2luZyhkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbC0+c3RlbmNpbEJhY2suZmFpbE9wKSA6IFdHUFVT
dGVuY2lsT3BlcmF0aW9uX0tlZXAsCisgICAgICAgICAgICBkZXNjcmlwdG9yLmRlcHRoU3RlbmNp
bCA/IGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwtPnN0ZW5jaWxCYWNr
LmRlcHRoRmFpbE9wKSA6IFdHUFVTdGVuY2lsT3BlcmF0aW9uX0tlZXAsCisgICAgICAgICAgICBk
ZXNjcmlwdG9yLmRlcHRoU3RlbmNpbCA/IGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci5kZXB0
aFN0ZW5jaWwtPnN0ZW5jaWxCYWNrLnBhc3NPcCkgOiBXR1BVU3RlbmNpbE9wZXJhdGlvbl9LZWVw
LAorICAgICAgICB9LAorICAgICAgICBkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbCAmJiBkZXNjcmlw
dG9yLmRlcHRoU3RlbmNpbC0+c3RlbmNpbFJlYWRNYXNrID8gKmRlc2NyaXB0b3IuZGVwdGhTdGVu
Y2lsLT5zdGVuY2lsUmVhZE1hc2sgOiAwLAorICAgICAgICBkZXNjcmlwdG9yLmRlcHRoU3RlbmNp
bCAmJiBkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbC0+c3RlbmNpbFdyaXRlTWFzayA/ICpkZXNjcmlw
dG9yLmRlcHRoU3RlbmNpbC0+c3RlbmNpbFdyaXRlTWFzayA6IDAsCisgICAgICAgIGRlc2NyaXB0
b3IuZGVwdGhTdGVuY2lsID8gZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwtPmRlcHRoQmlhcyA6IDAs
CisgICAgICAgIGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsID8gZGVzY3JpcHRvci5kZXB0aFN0ZW5j
aWwtPmRlcHRoQmlhc1Nsb3BlU2NhbGUgOiAwLAorICAgICAgICBkZXNjcmlwdG9yLmRlcHRoU3Rl
bmNpbCA/IGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsLT5kZXB0aEJpYXNDbGFtcCA6IDAsCisgICAg
fTsKKworICAgIFZlY3RvcjxzdGQ6Om9wdGlvbmFsPFdHUFVCbGVuZFN0YXRlPj4gYmxlbmRTdGF0
ZXM7CisgICAgaWYgKGRlc2NyaXB0b3IuZnJhZ21lbnQpIHsKKyAgICAgICAgYmxlbmRTdGF0ZXMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShkZXNjcmlwdG9yLmZyYWdtZW50LT50YXJnZXRzLnNpemUo
KSk7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDogZGVzY3JpcHRvci5mcmFnbWVu
dC0+dGFyZ2V0cykgeworICAgICAgICAgICAgaWYgKHRhcmdldC5ibGVuZCkgeworICAgICAgICAg
ICAgICAgIGJsZW5kU3RhdGVzLnVuY2hlY2tlZEFwcGVuZChXR1BVQmxlbmRTdGF0ZSB7CisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb0JhY2tp
bmcodGFyZ2V0LmJsZW5kLT5jb2xvci5vcGVyYXRpb24pLAorICAgICAgICAgICAgICAgICAgICAg
ICAgY29udmVydFRvQmFja2luZyh0YXJnZXQuYmxlbmQtPmNvbG9yLnNyY0ZhY3RvciksCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9CYWNraW5nKHRhcmdldC5ibGVuZC0+Y29sb3Iu
ZHN0RmFjdG9yKSwKKyAgICAgICAgICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY29udmVydFRvQmFja2luZyh0YXJnZXQuYmxlbmQtPmFscGhhLm9wZXJhdGlvbiksCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9CYWNraW5nKHRhcmdldC5ibGVuZC0+YWxw
aGEuc3JjRmFjdG9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb0JhY2tpbmco
dGFyZ2V0LmJsZW5kLT5hbHBoYS5kc3RGYWN0b3IpLAorICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBi
bGVuZFN0YXRlcy51bmNoZWNrZWRBcHBlbmQoc3RkOjpudWxsb3B0KTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIFZlY3RvcjxXR1BVQ29sb3JUYXJnZXRTdGF0ZT4gY29sb3JUYXJnZXRzOworICAg
IGlmIChkZXNjcmlwdG9yLmZyYWdtZW50KSB7CisgICAgICAgIGNvbG9yVGFyZ2V0cy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KGRlc2NyaXB0b3IuZnJhZ21lbnQtPnRhcmdldHMuc2l6ZSgpKTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkZXNjcmlwdG9yLmZyYWdtZW50LT50YXJnZXRz
LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBhdXRvJiB0YXJnZXQgPSBkZXNjcmlw
dG9yLmZyYWdtZW50LT50YXJnZXRzW2ldOworICAgICAgICAgICAgY29sb3JUYXJnZXRzLnVuY2hl
Y2tlZEFwcGVuZChXR1BVQ29sb3JUYXJnZXRTdGF0ZSB7CisgICAgICAgICAgICAgICAgbnVsbHB0
ciwKKyAgICAgICAgICAgICAgICBjb252ZXJ0VG9CYWNraW5nKHRhcmdldC5mb3JtYXQpLAorICAg
ICAgICAgICAgICAgIGJsZW5kU3RhdGVzW2ldID8gJipibGVuZFN0YXRlc1tpXSA6IG51bGxwdHIs
CisgICAgICAgICAgICAgICAgY29udmVydENvbG9yV3JpdGVGbGFnc1RvQmFja2luZyh0YXJnZXQu
d3JpdGVNYXNrKSwKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgV0dQ
VUZyYWdtZW50U3RhdGUgZnJhZ21lbnRTdGF0ZSB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAg
IG51bGxwdHIsCisgICAgICAgIG51bGxwdHIsCisgICAgICAgIDAsCisgICAgICAgIG51bGxwdHIs
CisgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90Pihjb2xvclRhcmdldHMuc2l6ZSgpKSwKKyAg
ICAgICAgY29sb3JUYXJnZXRzLmRhdGEoKSwKKyAgICB9OworCisgICAgV0dQVVJlbmRlclBpcGVs
aW5lRGVzY3JpcHRvciBiYWNraW5nRGVzY3JpcHRvciB7CisgICAgICAgIG51bGxwdHIsCisgICAg
ICAgIGxhYmVsLmRhdGEoKSwKKyAgICAgICAgZGVzY3JpcHRvci5sYXlvdXQgPyBzdGF0aWNfY2Fz
dDxjb25zdCBQaXBlbGluZUxheW91dEltcGwmPigqZGVzY3JpcHRvci5sYXlvdXQpLmJhY2tpbmco
KSA6IG51bGxwdHIsIHsKKyAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICBudWxscHRy
LAorICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBudWxs
cHRyLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGJhY2tpbmdCdWZmZXJzLnNp
emUoKSksCisgICAgICAgICAgICBiYWNraW5nQnVmZmVycy5kYXRhKCksCisgICAgICAgIH0sIHsK
KyAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICBkZXNjcmlwdG9yLnByaW1pdGl2ZSA/
IGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci5wcmltaXRpdmUtPnRvcG9sb2d5KSA6IFdHUFVQ
cmltaXRpdmVUb3BvbG9neV9Qb2ludExpc3QsCisgICAgICAgICAgICBkZXNjcmlwdG9yLnByaW1p
dGl2ZSAmJiBkZXNjcmlwdG9yLnByaW1pdGl2ZS0+c3RyaXBJbmRleEZvcm1hdCA/IGNvbnZlcnRU
b0JhY2tpbmcoKmRlc2NyaXB0b3IucHJpbWl0aXZlLT5zdHJpcEluZGV4Rm9ybWF0KSA6IFdHUFVJ
bmRleEZvcm1hdF9VbmRlZmluZWQsCisgICAgICAgICAgICBkZXNjcmlwdG9yLnByaW1pdGl2ZSA/
IGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci5wcmltaXRpdmUtPmZyb250RmFjZSkgOiBXR1BV
RnJvbnRGYWNlX0NDVywKKyAgICAgICAgICAgIGRlc2NyaXB0b3IucHJpbWl0aXZlID8gY29udmVy
dFRvQmFja2luZyhkZXNjcmlwdG9yLnByaW1pdGl2ZS0+Y3VsbE1vZGUpIDogV0dQVUN1bGxNb2Rl
X05vbmUsCisgICAgICAgICAgICAKKyAgICAgICAgfSwKKyAgICAgICAgZGVzY3JpcHRvci5kZXB0
aFN0ZW5jaWwgPyAmZGVwdGhTdGVuY2lsU3RhdGUgOiBudWxscHRyLCB7CisgICAgICAgICAgICBu
dWxscHRyLAorICAgICAgICAgICAgZGVzY3JpcHRvci5tdWx0aXNhbXBsZSA/IGRlc2NyaXB0b3Iu
bXVsdGlzYW1wbGUtPmNvdW50IDogMCwKKyAgICAgICAgICAgIGRlc2NyaXB0b3IubXVsdGlzYW1w
bGUgPyBkZXNjcmlwdG9yLm11bHRpc2FtcGxlLT5tYXNrIDogMCwKKyAgICAgICAgICAgIGRlc2Ny
aXB0b3IubXVsdGlzYW1wbGUgPyBkZXNjcmlwdG9yLm11bHRpc2FtcGxlLT5hbHBoYVRvQ292ZXJh
Z2VFbmFibGVkIDogZmFsc2UsCisgICAgICAgIH0sCisgICAgICAgIGRlc2NyaXB0b3IuZnJhZ21l
bnQgPyAmZnJhZ21lbnRTdGF0ZSA6IG51bGxwdHIsCisgICAgfTsKKworICAgIHJldHVybiBjYWxs
YmFjayhiYWNraW5nRGVzY3JpcHRvcik7Cit9CisKK1JlZjxSZW5kZXJQaXBlbGluZT4gRGV2aWNl
SW1wbDo6Y3JlYXRlUmVuZGVyUGlwZWxpbmUoY29uc3QgUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yKQoreworICAgIHJldHVybiBjb252ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3Is
IFt0aGlzXSAoY29uc3QgV0dQVVJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciYgYmFja2luZ0Rlc2Ny
aXB0b3IpIHsKKyAgICAgICAgcmV0dXJuIFJlbmRlclBpcGVsaW5lSW1wbDo6Y3JlYXRlKHdncHVE
ZXZpY2VDcmVhdGVSZW5kZXJQaXBlbGluZShtX2JhY2tpbmcsICZiYWNraW5nRGVzY3JpcHRvcikp
OworICAgIH0pOworfQorCit2b2lkIGNyZWF0ZUNvbXB1dGVQaXBlbGluZUFzeW5jQ2FsbGJhY2so
V0dQVUNyZWF0ZVBpcGVsaW5lQXN5bmNTdGF0dXMgc3RhdHVzLCBXR1BVQ29tcHV0ZVBpcGVsaW5l
IHBpcGVsaW5lLCBjb25zdCBjaGFyKiBtZXNzYWdlLCB2b2lkKiB1c2VyZGF0YSkKK3sKKyAgICBh
dXRvIGRldmljZSA9IGFkb3B0UmVmKCpzdGF0aWNfY2FzdDxEZXZpY2VJbXBsKj4odXNlcmRhdGEp
KTsgLy8gYWRvcHRSZWYgaXMgYmFsYW5jZWQgYnkgbGVha1JlZiBpbiBjcmVhdGVDb21wdXRlUGlw
ZWxpbmVBc3luYygpIGJlbG93LiBXZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSdyZSB1c2lu
ZyBhIEMgQVBJIHdpdGggbm8gY29uY2VwdCBvZiByZWZlcmVuY2UgY291bnRpbmcgb3IgYmxvY2tz
LgorICAgIGRldmljZS0+Y3JlYXRlQ29tcHV0ZVBpcGVsaW5lQXN5bmNDYWxsYmFjayhzdGF0dXMs
IHBpcGVsaW5lLCBtZXNzYWdlKTsKK30KKwordm9pZCBEZXZpY2VJbXBsOjpjcmVhdGVDb21wdXRl
UGlwZWxpbmVBc3luYyhjb25zdCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVmPENvbXB1dGVQaXBlbGluZT4mJik+JiYgY2FsbGJhY2sp
Cit7CisgICAgUmVmIHByb3RlY3RlZFRoaXMoKnRoaXMpOworCisgICAgbV9jcmVhdGVDb21wdXRl
UGlwZWxpbmVBc3luY0NhbGxiYWNrcy5hcHBlbmQoV1RGTW92ZShjYWxsYmFjaykpOworCisgICAg
Y29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1v
dmUocHJvdGVjdGVkVGhpcyldIChjb25zdCBXR1BVQ29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciYg
YmFja2luZ0Rlc2NyaXB0b3IpIG11dGFibGUgeworICAgICAgICB3Z3B1RGV2aWNlQ3JlYXRlQ29t
cHV0ZVBpcGVsaW5lQXN5bmMobV9iYWNraW5nLCAmYmFja2luZ0Rlc2NyaXB0b3IsICZXZWJHUFU6
OmNyZWF0ZUNvbXB1dGVQaXBlbGluZUFzeW5jQ2FsbGJhY2ssICZwcm90ZWN0ZWRUaGlzLmxlYWtS
ZWYoKSk7IC8vIGxlYWtSZWYgaXMgYmFsYW5jZWQgYnkgYWRvcHRSZWYgaW4gcmVxdWVzdERldmlj
ZUNhbGxiYWNrKCkgYWJvdmUuIFdlIGhhdmUgdG8gZG8gdGhpcyBiZWNhdXNlIHdlJ3JlIHVzaW5n
IGEgQyBBUEkgd2l0aCBubyBjb25jZXB0IG9mIHJlZmVyZW5jZSBjb3VudGluZyBvciBibG9ja3Mu
CisgICAgfSk7Cit9CisKK3ZvaWQgRGV2aWNlSW1wbDo6Y3JlYXRlQ29tcHV0ZVBpcGVsaW5lQXN5
bmNDYWxsYmFjayhXR1BVQ3JlYXRlUGlwZWxpbmVBc3luY1N0YXR1cywgV0dQVUNvbXB1dGVQaXBl
bGluZSBwaXBlbGluZSwgY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBVTlVTRURfUEFSQU0o
bWVzc2FnZSk7CisgICAgYXV0byBjYWxsYmFjayA9IG1fY3JlYXRlQ29tcHV0ZVBpcGVsaW5lQXN5
bmNDYWxsYmFja3MudGFrZUZpcnN0KCk7CisgICAgY2FsbGJhY2soQ29tcHV0ZVBpcGVsaW5lSW1w
bDo6Y3JlYXRlKHBpcGVsaW5lKSk7Cit9CisKK3ZvaWQgY3JlYXRlUmVuZGVyUGlwZWxpbmVBc3lu
Y0NhbGxiYWNrKFdHUFVDcmVhdGVQaXBlbGluZUFzeW5jU3RhdHVzIHN0YXR1cywgV0dQVVJlbmRl
clBpcGVsaW5lIHBpcGVsaW5lLCBjb25zdCBjaGFyKiBtZXNzYWdlLCB2b2lkKiB1c2VyZGF0YSkK
K3sKKyAgICBhdXRvIGRldmljZSA9IGFkb3B0UmVmKCpzdGF0aWNfY2FzdDxEZXZpY2VJbXBsKj4o
dXNlcmRhdGEpKTsgLy8gYWRvcHRSZWYgaXMgYmFsYW5jZWQgYnkgbGVha1JlZiBpbiBjcmVhdGVS
ZW5kZXJQaXBlbGluZUFzeW5jKCkgYmVsb3cuIFdlIGhhdmUgdG8gZG8gdGhpcyBiZWNhdXNlIHdl
J3JlIHVzaW5nIGEgQyBBUEkgd2l0aCBubyBjb25jZXB0IG9mIHJlZmVyZW5jZSBjb3VudGluZyBv
ciBibG9ja3MuCisgICAgZGV2aWNlLT5jcmVhdGVSZW5kZXJQaXBlbGluZUFzeW5jQ2FsbGJhY2so
c3RhdHVzLCBwaXBlbGluZSwgbWVzc2FnZSk7Cit9CisKK3ZvaWQgRGV2aWNlSW1wbDo6Y3JlYXRl
UmVuZGVyUGlwZWxpbmVBc3luYyhjb25zdCBSZW5kZXJQaXBlbGluZURlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IsIHN0ZDo6ZnVuY3Rpb248dm9pZChSZWY8UmVuZGVyUGlwZWxpbmU+JiYpPiYmIGNhbGxi
YWNrKQoreworICAgIFJlZiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKKworICAgIG1fY3JlYXRlUmVu
ZGVyUGlwZWxpbmVBc3luY0NhbGxiYWNrcy5hcHBlbmQoV1RGTW92ZShjYWxsYmFjaykpOworCisg
ICAgY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdU
Rk1vdmUocHJvdGVjdGVkVGhpcyldIChjb25zdCBXR1BVUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9y
JiBiYWNraW5nRGVzY3JpcHRvcikgbXV0YWJsZSB7CisgICAgd2dwdURldmljZUNyZWF0ZVJlbmRl
clBpcGVsaW5lQXN5bmMobV9iYWNraW5nLCAmYmFja2luZ0Rlc2NyaXB0b3IsICZXZWJHUFU6OmNy
ZWF0ZVJlbmRlclBpcGVsaW5lQXN5bmNDYWxsYmFjaywgJnByb3RlY3RlZFRoaXMubGVha1JlZigp
KTsgLy8gbGVha1JlZiBpcyBiYWxhbmNlZCBieSBhZG9wdFJlZiBpbiByZXF1ZXN0RGV2aWNlQ2Fs
bGJhY2soKSBhYm92ZS4gV2UgaGF2ZSB0byBkbyB0aGlzIGJlY2F1c2Ugd2UncmUgdXNpbmcgYSBD
IEFQSSB3aXRoIG5vIGNvbmNlcHQgb2YgcmVmZXJlbmNlIGNvdW50aW5nIG9yIGJsb2Nrcy4KKyAg
ICB9KTsKK30KKwordm9pZCBEZXZpY2VJbXBsOjpjcmVhdGVSZW5kZXJQaXBlbGluZUFzeW5jQ2Fs
bGJhY2soV0dQVUNyZWF0ZVBpcGVsaW5lQXN5bmNTdGF0dXMsIFdHUFVSZW5kZXJQaXBlbGluZSBw
aXBlbGluZSwgY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBVTlVTRURfUEFSQU0obWVzc2Fn
ZSk7CisgICAgYXV0byBjYWxsYmFjayA9IG1fY3JlYXRlUmVuZGVyUGlwZWxpbmVBc3luY0NhbGxi
YWNrcy50YWtlRmlyc3QoKTsKKyAgICBjYWxsYmFjayhSZW5kZXJQaXBlbGluZUltcGw6OmNyZWF0
ZShwaXBlbGluZSkpOworfQorCitSZWY8Q29tbWFuZEVuY29kZXI+IERldmljZUltcGw6OmNyZWF0
ZUNvbW1hbmRFbmNvZGVyKGNvbnN0IHN0ZDo6b3B0aW9uYWw8Q29tbWFuZEVuY29kZXJEZXNjcmlw
dG9yPiYgZGVzY3JpcHRvcikKK3sKKyAgICBDU3RyaW5nIGxhYmVsID0gZGVzY3JpcHRvciA/IGRl
c2NyaXB0b3ItPmxhYmVsLnV0ZjgoKSA6IENTdHJpbmcoIiIpOworCisgICAgV0dQVUNvbW1hbmRF
bmNvZGVyRGVzY3JpcHRvciBiYWNraW5nRGVzY3JpcHRvciB7CisgICAgICAgIG51bGxwdHIsCisg
ICAgICAgIGxhYmVsLmRhdGEoKSwKKyAgICB9OworCisgICAgcmV0dXJuIENvbW1hbmRFbmNvZGVy
SW1wbDo6Y3JlYXRlKHdncHVEZXZpY2VDcmVhdGVDb21tYW5kRW5jb2RlcihtX2JhY2tpbmcsICZi
YWNraW5nRGVzY3JpcHRvcikpOworfQorCitSZWY8UmVuZGVyQnVuZGxlRW5jb2Rlcj4gRGV2aWNl
SW1wbDo6Y3JlYXRlUmVuZGVyQnVuZGxlRW5jb2Rlcihjb25zdCBSZW5kZXJCdW5kbGVFbmNvZGVy
RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBhdXRvIGxhYmVsID0gZGVzY3JpcHRvci5s
YWJlbC51dGY4KCk7CisKKyAgICBWZWN0b3I8V0dQVVRleHR1cmVGb3JtYXQ+IGJhY2tpbmdDb2xv
ckZvcm1hdHM7CisgICAgYmFja2luZ0NvbG9yRm9ybWF0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KGRlc2NyaXB0b3IuY29sb3JGb3JtYXRzLnNpemUoKSk7CisgICAgZm9yIChhdXRvIGNvbG9yRm9y
bWF0IDogZGVzY3JpcHRvci5jb2xvckZvcm1hdHMpCisgICAgICAgIGJhY2tpbmdDb2xvckZvcm1h
dHMudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRUb0JhY2tpbmcoY29sb3JGb3JtYXQpKTsKKworICAg
IFdHUFVSZW5kZXJCdW5kbGVFbmNvZGVyRGVzY3JpcHRvciBiYWNraW5nRGVzY3JpcHRvciB7Cisg
ICAgICAgIG51bGxwdHIsCisgICAgICAgIGxhYmVsLmRhdGEoKSwKKyAgICAgICAgc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KGJhY2tpbmdDb2xvckZvcm1hdHMuc2l6ZSgpKSwKKyAgICAgICAgYmFja2lu
Z0NvbG9yRm9ybWF0cy5kYXRhKCksCisgICAgICAgIGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsRm9y
bWF0ID8gY29udmVydFRvQmFja2luZygqZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWxGb3JtYXQpIDog
V0dQVVRleHR1cmVGb3JtYXRfVW5kZWZpbmVkLAorICAgICAgICBkZXNjcmlwdG9yLnNhbXBsZUNv
dW50LAorICAgIH07CisKKyAgICByZXR1cm4gUmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OmNyZWF0
ZSh3Z3B1RGV2aWNlQ3JlYXRlUmVuZGVyQnVuZGxlRW5jb2RlcihtX2JhY2tpbmcsICZiYWNraW5n
RGVzY3JpcHRvcikpOworfQorCitSZWY8UXVlcnlTZXQ+IERldmljZUltcGw6OmNyZWF0ZVF1ZXJ5
U2V0KGNvbnN0IFF1ZXJ5U2V0RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBhdXRvIGxh
YmVsID0gZGVzY3JpcHRvci5sYWJlbC51dGY4KCk7CisKKyAgICBWZWN0b3I8V0dQVVBpcGVsaW5l
U3RhdGlzdGljTmFtZT4gYmFja2luZ1BpcGVsaW5lU3RhdGlzdGljczsKKyAgICBiYWNraW5nUGlw
ZWxpbmVTdGF0aXN0aWNzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGVzY3JpcHRvci5waXBlbGlu
ZVN0YXRpc3RpY3Muc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8gcGlwZWxpbmVTdGF0aXN0aWMgOiBk
ZXNjcmlwdG9yLnBpcGVsaW5lU3RhdGlzdGljcykKKyAgICAgICAgYmFja2luZ1BpcGVsaW5lU3Rh
dGlzdGljcy51bmNoZWNrZWRBcHBlbmQoY29udmVydFRvQmFja2luZyhwaXBlbGluZVN0YXRpc3Rp
YykpOworCisgICAgV0dQVVF1ZXJ5U2V0RGVzY3JpcHRvciBiYWNraW5nRGVzY3JpcHRvciB7Cisg
ICAgICAgIG51bGxwdHIsCisgICAgICAgIGxhYmVsLmRhdGEoKSwKKyAgICAgICAgY29udmVydFRv
QmFja2luZyhkZXNjcmlwdG9yLnR5cGUpLAorICAgICAgICBkZXNjcmlwdG9yLmNvdW50LAorICAg
ICAgICBiYWNraW5nUGlwZWxpbmVTdGF0aXN0aWNzLmRhdGEoKSwKKyAgICAgICAgc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KGJhY2tpbmdQaXBlbGluZVN0YXRpc3RpY3Muc2l6ZSgpKSwKKyAgICB9Owor
CisgICAgcmV0dXJuIFF1ZXJ5U2V0SW1wbDo6Y3JlYXRlKHdncHVEZXZpY2VDcmVhdGVRdWVyeVNl
dChtX2JhY2tpbmcsICZiYWNraW5nRGVzY3JpcHRvcikpOworfQorCit2b2lkIERldmljZUltcGw6
OnB1c2hFcnJvclNjb3BlKEVycm9yRmlsdGVyIGVycm9yRmlsdGVyKQoreworICAgIHdncHVEZXZp
Y2VQdXNoRXJyb3JTY29wZShtX2JhY2tpbmcsIGNvbnZlcnRUb0JhY2tpbmcoZXJyb3JGaWx0ZXIp
KTsKK30KKwordm9pZCBwb3BFcnJvclNjb3BlQ2FsbGJhY2soV0dQVUVycm9yVHlwZSB0eXBlLCBj
b25zdCBjaGFyKiBtZXNzYWdlLCB2b2lkKiB1c2VyZGF0YSkKK3sKKyAgICBhdXRvIGRldmljZSA9
IGFkb3B0UmVmKCpzdGF0aWNfY2FzdDxEZXZpY2VJbXBsKj4odXNlcmRhdGEpKTsgLy8gYWRvcHRS
ZWYgaXMgYmFsYW5jZWQgYnkgbGVha1JlZiBpbiBwb3BFcnJvclNjb3BlKCkgYmVsb3cuIFdlIGhh
dmUgdG8gZG8gdGhpcyBiZWNhdXNlIHdlJ3JlIHVzaW5nIGEgQyBBUEkgd2l0aCBubyBjb25jZXB0
IG9mIHJlZmVyZW5jZSBjb3VudGluZyBvciBibG9ja3MuCisgICAgZGV2aWNlLT5wb3BFcnJvclNj
b3BlQ2FsbGJhY2sodHlwZSwgbWVzc2FnZSk7Cit9CisKK3ZvaWQgRGV2aWNlSW1wbDo6cG9wRXJy
b3JTY29wZShzdGQ6OmZ1bmN0aW9uPHZvaWQoc3RkOjpvcHRpb25hbDxFcnJvcj4mJik+JiYgY2Fs
bGJhY2spCit7CisgICAgUmVmIHByb3RlY3RlZFRoaXMoKnRoaXMpOworCisgICAgbV9wb3BFcnJv
clNjb3BlQ2FsbGJhY2tzLmFwcGVuZChXVEZNb3ZlKGNhbGxiYWNrKSk7CisKKyAgICB3Z3B1RGV2
aWNlUG9wRXJyb3JTY29wZShtX2JhY2tpbmcsICZXZWJHUFU6OnBvcEVycm9yU2NvcGVDYWxsYmFj
aywgJnByb3RlY3RlZFRoaXMubGVha1JlZigpKTsgLy8gbGVha1JlZiBpcyBiYWxhbmNlZCBieSBh
ZG9wdFJlZiBpbiByZXF1ZXN0RGV2aWNlQ2FsbGJhY2soKSBhYm92ZS4gV2UgaGF2ZSB0byBkbyB0
aGlzIGJlY2F1c2Ugd2UncmUgdXNpbmcgYSBDIEFQSSB3aXRoIG5vIGNvbmNlcHQgb2YgcmVmZXJl
bmNlIGNvdW50aW5nIG9yIGJsb2Nrcy4KK30KKwordm9pZCBEZXZpY2VJbXBsOjpwb3BFcnJvclNj
b3BlQ2FsbGJhY2soV0dQVUVycm9yVHlwZSBlcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2Up
Cit7CisgICAgc3RkOjpvcHRpb25hbDxFcnJvcj4gZXJyb3I7CisgICAgc3dpdGNoIChlcnJvclR5
cGUpIHsKKyAgICBjYXNlIFdHUFVFcnJvclR5cGVfTm9FcnJvcjoKKyAgICBjYXNlIFdHUFVFcnJv
clR5cGVfRm9yY2UzMjoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXR1BVRXJyb3JUeXBlX1Zh
bGlkYXRpb246CisgICAgICAgIGVycm9yID0geyB7IFZhbGlkYXRpb25FcnJvcjo6Y3JlYXRlKG1l
c3NhZ2UpIH0gfTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXR1BVRXJyb3JUeXBlX091dE9m
TWVtb3J5OgorICAgICAgICBlcnJvciA9IHsgeyBPdXRPZk1lbW9yeUVycm9yOjpjcmVhdGUoKSB9
IH07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0dQVUVycm9yVHlwZV9Vbmtub3duOgorICAg
ICAgICBlcnJvciA9IHsgeyBPdXRPZk1lbW9yeUVycm9yOjpjcmVhdGUoKSB9IH07CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgV0dQVUVycm9yVHlwZV9EZXZpY2VMb3N0OgorICAgICAgICBlcnJv
ciA9IHsgeyBPdXRPZk1lbW9yeUVycm9yOjpjcmVhdGUoKSB9IH07CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGF1dG8gY2FsbGJhY2sgPSBtX3BvcEVycm9yU2NvcGVDYWxsYmFja3MudGFr
ZUZpcnN0KCk7CisgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOworfQorCit2b2lkIERldmlj
ZUltcGw6OnNldExhYmVsSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBsYWJlbCkKK3sKKyAgICB3Z3B1
RGV2aWNlU2V0TGFiZWwobV9iYWNraW5nLCBsYWJlbC51dGY4KCkuZGF0YSgpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVRGV2aWNlSW1wbC5o
IGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVEZXZp
Y2VJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uODZhNjBiYzRiZTFjZjhkOGVmMTlhMDJiNDQ2NDg2MGE2ZTI5
OTU1YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3Mv
V2ViR1BVL0ltcGwvV2ViR1BVRGV2aWNlSW1wbC5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYkdQVURldmljZS5oIgorI2luY2x1ZGUg
PFdlYkdQVS9XZWJHUFUuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKworbmFtZXNwYWNlIFBB
TCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworY2xhc3MgRGV2aWNlSW1wbCBmaW5hbCA6IHB1Ymxp
YyBEZXZpY2UgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RGV2aWNlSW1wbD4gY3JlYXRlKFdH
UFVEZXZpY2UgZGV2aWNlLCBSZWY8U3VwcG9ydGVkRmVhdHVyZXM+JiYgZmVhdHVyZXMsIFJlZjxT
dXBwb3J0ZWRMaW1pdHM+JiYgbGltaXRzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRGV2aWNlSW1wbChkZXZpY2UsIFdURk1vdmUoZmVhdHVyZXMpLCBXVEZNb3ZlKGxpbWl0
cykpKTsKKyAgICB9CisKKyAgICB+RGV2aWNlSW1wbCgpOworCisgICAgV0dQVURldmljZSBiYWNr
aW5nKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nOyB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5k
IHZvaWQgY3JlYXRlQ29tcHV0ZVBpcGVsaW5lQXN5bmNDYWxsYmFjayhXR1BVQ3JlYXRlUGlwZWxp
bmVBc3luY1N0YXR1cywgV0dQVUNvbXB1dGVQaXBlbGluZSwgY29uc3QgY2hhciogbWVzc2FnZSwg
dm9pZCogdXNlcmRhdGEpOworICAgIGZyaWVuZCB2b2lkIGNyZWF0ZVJlbmRlclBpcGVsaW5lQXN5
bmNDYWxsYmFjayhXR1BVQ3JlYXRlUGlwZWxpbmVBc3luY1N0YXR1cywgV0dQVVJlbmRlclBpcGVs
aW5lLCBjb25zdCBjaGFyKiBtZXNzYWdlLCB2b2lkKiB1c2VyZGF0YSk7CisgICAgZnJpZW5kIHZv
aWQgcG9wRXJyb3JTY29wZUNhbGxiYWNrKFdHUFVFcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1lc3Nh
Z2UsIHZvaWQqIHVzZXJkYXRhKTsKKworICAgIERldmljZUltcGwoV0dQVURldmljZSwgUmVmPFN1
cHBvcnRlZEZlYXR1cmVzPiYmLCBSZWY8U3VwcG9ydGVkTGltaXRzPiYmKTsKKworICAgIERldmlj
ZUltcGwoY29uc3QgRGV2aWNlSW1wbCYpID0gZGVsZXRlOworICAgIERldmljZUltcGwoRGV2aWNl
SW1wbCYmKSA9IGRlbGV0ZTsKKyAgICBEZXZpY2VJbXBsJiBvcGVyYXRvcj0oY29uc3QgRGV2aWNl
SW1wbCYpID0gZGVsZXRlOworICAgIERldmljZUltcGwmIG9wZXJhdG9yPShEZXZpY2VJbXBsJiYp
ID0gZGVsZXRlOworCisgICAgdm9pZCBkZXN0cm95KCkgZmluYWw7CisKKyAgICBSZWY8QnVmZmVy
PiBjcmVhdGVCdWZmZXIoY29uc3QgQnVmZmVyRGVzY3JpcHRvciYpIGZpbmFsOworICAgIFJlZjxU
ZXh0dXJlPiBjcmVhdGVUZXh0dXJlKGNvbnN0IFRleHR1cmVEZXNjcmlwdG9yJikgZmluYWw7Cisg
ICAgUmVmPFNhbXBsZXI+IGNyZWF0ZVNhbXBsZXIoY29uc3QgU2FtcGxlckRlc2NyaXB0b3ImKSBm
aW5hbDsKKyAgICBSZWY8RXh0ZXJuYWxUZXh0dXJlPiBpbXBvcnRFeHRlcm5hbFRleHR1cmUoY29u
c3QgRXh0ZXJuYWxUZXh0dXJlRGVzY3JpcHRvciYpIGZpbmFsOworCisgICAgUmVmPEJpbmRHcm91
cExheW91dD4gY3JlYXRlQmluZEdyb3VwTGF5b3V0KGNvbnN0IEJpbmRHcm91cExheW91dERlc2Ny
aXB0b3ImKSBmaW5hbDsKKyAgICBSZWY8UGlwZWxpbmVMYXlvdXQ+IGNyZWF0ZVBpcGVsaW5lTGF5
b3V0KGNvbnN0IFBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciYpIGZpbmFsOworICAgIFJlZjxCaW5k
R3JvdXA+IGNyZWF0ZUJpbmRHcm91cChjb25zdCBCaW5kR3JvdXBEZXNjcmlwdG9yJikgZmluYWw7
CisKKyAgICBSZWY8U2hhZGVyTW9kdWxlPiBjcmVhdGVTaGFkZXJNb2R1bGUoY29uc3QgU2hhZGVy
TW9kdWxlRGVzY3JpcHRvciYpIGZpbmFsOworICAgIFJlZjxDb21wdXRlUGlwZWxpbmU+IGNyZWF0
ZUNvbXB1dGVQaXBlbGluZShjb25zdCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJikgZmluYWw7
CisgICAgUmVmPFJlbmRlclBpcGVsaW5lPiBjcmVhdGVSZW5kZXJQaXBlbGluZShjb25zdCBSZW5k
ZXJQaXBlbGluZURlc2NyaXB0b3ImKSBmaW5hbDsKKyAgICB2b2lkIGNyZWF0ZUNvbXB1dGVQaXBl
bGluZUFzeW5jQ2FsbGJhY2soV0dQVUNyZWF0ZVBpcGVsaW5lQXN5bmNTdGF0dXMsIFdHUFVDb21w
dXRlUGlwZWxpbmUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOworICAgIHZvaWQgY3JlYXRlQ29tcHV0
ZVBpcGVsaW5lQXN5bmMoY29uc3QgQ29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciYsIHN0ZDo6ZnVu
Y3Rpb248dm9pZChSZWY8Q29tcHV0ZVBpcGVsaW5lPiYmKT4mJikgZmluYWw7CisgICAgdm9pZCBj
cmVhdGVSZW5kZXJQaXBlbGluZUFzeW5jQ2FsbGJhY2soV0dQVUNyZWF0ZVBpcGVsaW5lQXN5bmNT
dGF0dXMsIFdHUFVSZW5kZXJQaXBlbGluZSwgY29uc3QgY2hhciogbWVzc2FnZSk7CisgICAgdm9p
ZCBjcmVhdGVSZW5kZXJQaXBlbGluZUFzeW5jKGNvbnN0IFJlbmRlclBpcGVsaW5lRGVzY3JpcHRv
ciYsIHN0ZDo6ZnVuY3Rpb248dm9pZChSZWY8UmVuZGVyUGlwZWxpbmU+JiYpPiYmKSBmaW5hbDsK
KworICAgIFJlZjxDb21tYW5kRW5jb2Rlcj4gY3JlYXRlQ29tbWFuZEVuY29kZXIoY29uc3Qgc3Rk
OjpvcHRpb25hbDxDb21tYW5kRW5jb2RlckRlc2NyaXB0b3I+JikgZmluYWw7CisgICAgUmVmPFJl
bmRlckJ1bmRsZUVuY29kZXI+IGNyZWF0ZVJlbmRlckJ1bmRsZUVuY29kZXIoY29uc3QgUmVuZGVy
QnVuZGxlRW5jb2RlckRlc2NyaXB0b3ImKSBmaW5hbDsKKworICAgIFJlZjxRdWVyeVNldD4gY3Jl
YXRlUXVlcnlTZXQoY29uc3QgUXVlcnlTZXREZXNjcmlwdG9yJikgZmluYWw7CisKKyAgICB2b2lk
IHB1c2hFcnJvclNjb3BlKEVycm9yRmlsdGVyKSBmaW5hbDsKKyAgICB2b2lkIHBvcEVycm9yU2Nv
cGVDYWxsYmFjayhXR1BVRXJyb3JUeXBlLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsKKyAgICB2b2lk
IHBvcEVycm9yU2NvcGUoc3RkOjpmdW5jdGlvbjx2b2lkKHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYp
PiYmKSBmaW5hbDsKKworICAgIHZvaWQgc2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKSBm
aW5hbDsKKworICAgIFdHUFVEZXZpY2UgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworCisgICAgRGVx
dWU8c3RkOjpmdW5jdGlvbjx2b2lkKFJlZjxDb21wdXRlUGlwZWxpbmU+JiYpPj4gbV9jcmVhdGVD
b21wdXRlUGlwZWxpbmVBc3luY0NhbGxiYWNrczsKKyAgICBEZXF1ZTxzdGQ6OmZ1bmN0aW9uPHZv
aWQoUmVmPFJlbmRlclBpcGVsaW5lPiYmKT4+IG1fY3JlYXRlUmVuZGVyUGlwZWxpbmVBc3luY0Nh
bGxiYWNrczsKKyAgICBEZXF1ZTxzdGQ6OmZ1bmN0aW9uPHZvaWQoc3RkOjpvcHRpb25hbDxFcnJv
cj4mJik+PiBtX3BvcEVycm9yU2NvcGVDYWxsYmFja3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBQ
QUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFM
L3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVFeHRlcm5hbFRleHR1cmVJbXBsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVRXh0ZXJu
YWxUZXh0dXJlSW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmFlYjg5ZTA3ZmI1NjI3ZjI2OWRiOTM1MDIx
NTg2ZGI0ZjcwYTY0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwv
Z3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVRXh0ZXJuYWxUZXh0dXJlSW1wbC5jcHAKQEAgLTAs
MCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJHUFVFeHRlcm5hbFRleHR1cmVJbXBsLmgiCisKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVRXh0
Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK0V4dGVybmFsVGV4
dHVyZUltcGw6OkV4dGVybmFsVGV4dHVyZUltcGwoKQoreworfQorCitFeHRlcm5hbFRleHR1cmVJ
bXBsOjp+RXh0ZXJuYWxUZXh0dXJlSW1wbCgpCit7Cit9CisKK3ZvaWQgRXh0ZXJuYWxUZXh0dXJl
SW1wbDo6c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKQoreworfQorCit9IC8vIG5hbWVz
cGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVFeHRlcm5hbFRleHR1cmVJbXBs
LmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUV4
dGVybmFsVGV4dHVyZUltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZDc4MTYzM2U1OGQwNTk3NmI0ZjdkYjli
NWM4M2JlYjA4MWJlNmFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVFeHRlcm5hbFRleHR1cmVJbXBsLmgKQEAgLTAs
MCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BV
RXh0ZXJuYWxUZXh0dXJlLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorCituYW1lc3Bh
Y2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBFeHRlcm5hbFRleHR1cmVJbXBs
IGZpbmFsIDogcHVibGljIEV4dGVybmFsVGV4dHVyZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZjxFeHRlcm5hbFRleHR1cmVJbXBsPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRXh0ZXJuYWxUZXh0dXJlSW1wbCgpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IH5FeHRlcm5hbFRleHR1cmVJbXBsKCk7CisKK3ByaXZhdGU6CisgICAgRXh0ZXJuYWxUZXh0dXJl
SW1wbCgpOworCisgICAgRXh0ZXJuYWxUZXh0dXJlSW1wbChjb25zdCBFeHRlcm5hbFRleHR1cmVJ
bXBsJikgPSBkZWxldGU7CisgICAgRXh0ZXJuYWxUZXh0dXJlSW1wbChFeHRlcm5hbFRleHR1cmVJ
bXBsJiYpID0gZGVsZXRlOworICAgIEV4dGVybmFsVGV4dHVyZUltcGwmIG9wZXJhdG9yPShjb25z
dCBFeHRlcm5hbFRleHR1cmVJbXBsJikgPSBkZWxldGU7CisgICAgRXh0ZXJuYWxUZXh0dXJlSW1w
bCYgb3BlcmF0b3I9KEV4dGVybmFsVGV4dHVyZUltcGwmJikgPSBkZWxldGU7CisKKyAgICB2b2lk
IHNldExhYmVsSW50ZXJuYWwoY29uc3QgU3RyaW5nJikgZmluYWw7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVSW1wbC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMTA3NjE4YzIyMGFlOGI4NjlmN2RlMDhhZTZlZTAxNTA3YWY4MTljYwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2Vi
R1BVSW1wbC5jcHAKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJHUFVJbXBsLmgiCisKKyNpbmNsdWRlICJXZWJHUFVBZGFwdGVy
SW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVUNvbnZlcnRUb0JhY2tpbmcuaCIKKyNpbmNsdWRlIDxX
ZWJHUFUvV2ViR1BVRXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7
CisKK0dQVUltcGw6OkdQVUltcGwoV0dQVUluc3RhbmNlIGluc3RhbmNlKQorICAgIDogbV9iYWNr
aW5nKGluc3RhbmNlKQoreworfQorCitHUFVJbXBsOjp+R1BVSW1wbCgpCit7CisgICAgd2dwdUlu
c3RhbmNlUmVsZWFzZShtX2JhY2tpbmcpOworfQorCit2b2lkIHJlcXVlc3RBZGFwdGVyQ2FsbGJh
Y2soV0dQVVJlcXVlc3RBZGFwdGVyU3RhdHVzIHN0YXR1cywgV0dQVUFkYXB0ZXIgYWRhcHRlciwg
Y29uc3QgY2hhciogbWVzc2FnZSwgdm9pZCogdXNlcmRhdGEpCit7CisgICAgYXV0byBncHUgPSBh
ZG9wdFJlZigqc3RhdGljX2Nhc3Q8R1BVSW1wbCo+KHVzZXJkYXRhKSk7IC8vIGFkb3B0UmVmIGlz
IGJhbGFuY2VkIGJ5IGxlYWtSZWYgaW4gcmVxdWVzdEFkYXB0ZXIoKSBiZWxvdy4gV2UgaGF2ZSB0
byBkbyB0aGlzIGJlY2F1c2Ugd2UncmUgdXNpbmcgYSBDIEFQSSB3aXRoIG5vIGNvbmNlcHQgb2Yg
cmVmZXJlbmNlIGNvdW50aW5nIG9yIGJsb2Nrcy4KKyAgICBncHUtPnJlcXVlc3RBZGFwdGVyQ2Fs
bGJhY2soc3RhdHVzLCBhZGFwdGVyLCBtZXNzYWdlKTsKK30KKwordm9pZCBHUFVJbXBsOjpyZXF1
ZXN0QWRhcHRlcihjb25zdCBSZXF1ZXN0QWRhcHRlck9wdGlvbnMmIG9wdGlvbnMsIHN0ZDo6ZnVu
Y3Rpb248dm9pZChSZWZQdHI8QWRhcHRlcj4mJik+JiYgY2FsbGJhY2spCit7CisgICAgUmVmIHBy
b3RlY3RlZFRoaXMoKnRoaXMpOworCisgICAgV0dQVVJlcXVlc3RBZGFwdGVyT3B0aW9ucyBiYWNr
aW5nT3B0aW9ucyB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIG51bGxwdHIsCisgICAgICAg
IG9wdGlvbnMucG93ZXJQcmVmZXJlbmNlID8gY29udmVydFRvQmFja2luZygqb3B0aW9ucy5wb3dl
clByZWZlcmVuY2UpIDogc3RhdGljX2Nhc3Q8V0dQVVBvd2VyUHJlZmVyZW5jZT4oV0dQVVBvd2Vy
UHJlZmVyZW5jZV9Ob1ByZWZlcmVuY2UpLAorICAgICAgICBvcHRpb25zLmZvcmNlRmFsbGJhY2tB
ZGFwdGVyLAorICAgIH07CisKKyAgICBtX2NhbGxiYWNrcy5hcHBlbmQoV1RGTW92ZShjYWxsYmFj
aykpOworCisgICAgd2dwdUluc3RhbmNlUmVxdWVzdEFkYXB0ZXIobV9iYWNraW5nLCAmYmFja2lu
Z09wdGlvbnMsICZXZWJHUFU6OnJlcXVlc3RBZGFwdGVyQ2FsbGJhY2ssICZwcm90ZWN0ZWRUaGlz
LmxlYWtSZWYoKSk7IC8vIGxlYWtSZWYgaXMgYmFsYW5jZWQgYnkgYWRvcHRSZWYgaW4gcmVxdWVz
dEFkYXB0ZXJDYWxsYmFjaygpIGFib3ZlLiBXZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSdy
ZSB1c2luZyBhIEMgQVBJIHdpdGggbm8gY29uY2VwdCBvZiByZWZlcmVuY2UgY291bnRpbmcgb3Ig
YmxvY2tzLgorfQorCit2b2lkIEdQVUltcGw6OnJlcXVlc3RBZGFwdGVyQ2FsbGJhY2soV0dQVVJl
cXVlc3RBZGFwdGVyU3RhdHVzLCBXR1BVQWRhcHRlciBhZGFwdGVyLCBjb25zdCBjaGFyKiBtZXNz
YWdlKQoreworICAgIFVOVVNFRF9QQVJBTShtZXNzYWdlKTsKKyAgICBhdXRvIGNhbGxiYWNrID0g
bV9jYWxsYmFja3MudGFrZUZpcnN0KCk7CisgICAgY2FsbGJhY2soQWRhcHRlckltcGw6OmNyZWF0
ZShhZGFwdGVyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2Vi
R1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9J
bXBsL1dlYkdQVUltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BV
L0ltcGwvV2ViR1BVSW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjljMTcwM2RiMmVlNGUwMGZiMTE1YzQ2ZjZh
M2IwNjJjMGM4ZjI2OWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUltcGwuaApAQCAtMCwwICsxLDY1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJXZWJHUFUuaCIKKyNpbmNsdWRlIDxX
ZWJHUFUvV2ViR1BVLmg+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisKK25hbWVzcGFjZSBQQUwg
eworbmFtZXNwYWNlIFdlYkdQVSB7CisKK2NsYXNzIEdQVUltcGwgZmluYWwgOiBwdWJsaWMgR1BV
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEdQVUltcGw+IGNyZWF0ZShXR1BVSW5zdGFuY2Ug
aW5zdGFuY2UpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHUFVJbXBsKGlu
c3RhbmNlKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+R1BVSW1wbCgpOworCisgICAgV0dQVUlu
c3RhbmNlIGJhY2tpbmcoKSBjb25zdCB7IHJldHVybiBtX2JhY2tpbmc7IH0KKworcHJpdmF0ZToK
KyAgICBmcmllbmQgdm9pZCByZXF1ZXN0QWRhcHRlckNhbGxiYWNrKFdHUFVSZXF1ZXN0QWRhcHRl
clN0YXR1cywgV0dQVUFkYXB0ZXIsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIHZvaWQqIHVzZXJkYXRh
KTsKKworICAgIEdQVUltcGwoV0dQVUluc3RhbmNlKTsKKworICAgIEdQVUltcGwoY29uc3QgR1BV
SW1wbCYpID0gZGVsZXRlOworICAgIEdQVUltcGwoR1BVSW1wbCYmKSA9IGRlbGV0ZTsKKyAgICBH
UFVJbXBsJiBvcGVyYXRvcj0oY29uc3QgR1BVSW1wbCYpID0gZGVsZXRlOworICAgIEdQVUltcGwm
IG9wZXJhdG9yPShHUFVJbXBsJiYpID0gZGVsZXRlOworCisgICAgdm9pZCByZXF1ZXN0QWRhcHRl
ckNhbGxiYWNrKFdHUFVSZXF1ZXN0QWRhcHRlclN0YXR1cywgV0dQVUFkYXB0ZXIsIGNvbnN0IGNo
YXIqIG1lc3NhZ2UpOworICAgIHZvaWQgcmVxdWVzdEFkYXB0ZXIoY29uc3QgUmVxdWVzdEFkYXB0
ZXJPcHRpb25zJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlZlB0cjxBZGFwdGVyPiYmKT4mJikgZmlu
YWw7CisKKyAgICBXR1BVSW5zdGFuY2UgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworCisgICAgRGVx
dWU8c3RkOjpmdW5jdGlvbjx2b2lkKFJlZlB0cjxBZGFwdGVyPiYmKT4+IG1fY2FsbGJhY2tzOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUGlw
ZWxpbmVMYXlvdXRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2Vi
R1BVL0ltcGwvV2ViR1BVUGlwZWxpbmVMYXlvdXRJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NDQ3Mzk5
MzE4OTUwZDk1NGE3ZTE2ZGNmNDZlN2ZiNDdlMTRjNWYwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVQaXBlbGluZUxh
eW91dEltcGwuY3BwCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViR1BVUGlwZWxpbmVMYXlvdXRJbXBsLmgiCisKKyNpbmNsdWRl
IDxXZWJHUFUvV2ViR1BVRXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQ
VSB7CisKK1BpcGVsaW5lTGF5b3V0SW1wbDo6UGlwZWxpbmVMYXlvdXRJbXBsKFdHUFVQaXBlbGlu
ZUxheW91dCBwaXBlbGluZUxheW91dCkKKyAgICA6IG1fYmFja2luZyhwaXBlbGluZUxheW91dCkK
K3sKK30KKworUGlwZWxpbmVMYXlvdXRJbXBsOjp+UGlwZWxpbmVMYXlvdXRJbXBsKCkKK3sKKyAg
ICB3Z3B1UGlwZWxpbmVMYXlvdXRSZWxlYXNlKG1fYmFja2luZyk7Cit9CisKK3ZvaWQgUGlwZWxp
bmVMYXlvdXRJbXBsOjpzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYgbGFiZWwpCit7Cisg
ICAgd2dwdVBpcGVsaW5lTGF5b3V0U2V0TGFiZWwobV9iYWNraW5nLCBsYWJlbC51dGY4KCkuZGF0
YSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2Vi
R1BVUGlwZWxpbmVMYXlvdXRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNz
L1dlYkdQVS9JbXBsL1dlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhZmNh
MmM3NGU4MzM4MWQ4YjNlYzUxMGEwM2NlZjkyNzlkMWJhNDgKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVBpcGVsaW5l
TGF5b3V0SW1wbC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIldlYkdQVVBpcGVsaW5lTGF5b3V0LmgiCisjaW5jbHVkZSA8V2ViR1BVL1dl
YkdQVS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBQ
aXBlbGluZUxheW91dEltcGwgZmluYWwgOiBwdWJsaWMgUGlwZWxpbmVMYXlvdXQgeworcHVibGlj
OgorICAgIHN0YXRpYyBSZWY8UGlwZWxpbmVMYXlvdXRJbXBsPiBjcmVhdGUoV0dQVVBpcGVsaW5l
TGF5b3V0IHBpcGVsaW5lTGF5b3V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgUGlwZWxpbmVMYXlvdXRJbXBsKHBpcGVsaW5lTGF5b3V0KSk7CisgICAgfQorCisgICAgdmly
dHVhbCB+UGlwZWxpbmVMYXlvdXRJbXBsKCk7CisKKyAgICBXR1BVUGlwZWxpbmVMYXlvdXQgYmFj
a2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgorICAgIFBpcGVs
aW5lTGF5b3V0SW1wbChXR1BVUGlwZWxpbmVMYXlvdXQpOworCisgICAgUGlwZWxpbmVMYXlvdXRJ
bXBsKGNvbnN0IFBpcGVsaW5lTGF5b3V0SW1wbCYpID0gZGVsZXRlOworICAgIFBpcGVsaW5lTGF5
b3V0SW1wbChQaXBlbGluZUxheW91dEltcGwmJikgPSBkZWxldGU7CisgICAgUGlwZWxpbmVMYXlv
dXRJbXBsJiBvcGVyYXRvcj0oY29uc3QgUGlwZWxpbmVMYXlvdXRJbXBsJikgPSBkZWxldGU7Cisg
ICAgUGlwZWxpbmVMYXlvdXRJbXBsJiBvcGVyYXRvcj0oUGlwZWxpbmVMYXlvdXRJbXBsJiYpID0g
ZGVsZXRlOworCisgICAgdm9pZCBzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYpIGZpbmFs
OworCisgICAgV0dQVVBpcGVsaW5lTGF5b3V0IG1fYmFja2luZyB7IG51bGxwdHIgfTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVF1ZXJ5U2V0
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dl
YkdQVVF1ZXJ5U2V0SW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDZlZDY5NDBhMjkzMTMwMTcxOTdmODg0
YzA4ZDI1YTNjMTdmNjBiYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUXVlcnlTZXRJbXBsLmNwcApAQCAtMCwwICsx
LDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkdQ
VVF1ZXJ5U2V0SW1wbC5oIgorCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVUV4dC5oPgorCituYW1l
c3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitRdWVyeVNldEltcGw6OlF1ZXJ5U2V0
SW1wbChXR1BVUXVlcnlTZXQgcXVlcnlTZXQpCisgICAgOiBtX2JhY2tpbmcocXVlcnlTZXQpCit7
Cit9CisKK1F1ZXJ5U2V0SW1wbDo6flF1ZXJ5U2V0SW1wbCgpCit7CisgICAgd2dwdVF1ZXJ5U2V0
UmVsZWFzZShtX2JhY2tpbmcpOworfQorCit2b2lkIFF1ZXJ5U2V0SW1wbDo6ZGVzdHJveSgpCit7
CisgICAgd2dwdVF1ZXJ5U2V0RGVzdHJveShtX2JhY2tpbmcpOworfQorCit2b2lkIFF1ZXJ5U2V0
SW1wbDo6c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAgIHdncHVR
dWVyeVNldFNldExhYmVsKG1fYmFja2luZywgbGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVF1ZXJ5U2V0SW1w
bC5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVR
dWVyeVNldEltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZmRmN2YwZjE3YjljYTUwMzk5ZDdhOTMwZWZkYzk0
NjJmMTk0NGJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVRdWVyeVNldEltcGwuaApAQCAtMCwwICsxLDYxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJXZWJHUFVRdWVyeVNldC5oIgor
I2luY2x1ZGUgPFdlYkdQVS9XZWJHUFUuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2Ug
V2ViR1BVIHsKKworY2xhc3MgUXVlcnlTZXRJbXBsIGZpbmFsIDogcHVibGljIFF1ZXJ5U2V0IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFF1ZXJ5U2V0SW1wbD4gY3JlYXRlKFdHUFVRdWVyeVNl
dCBxdWVyeVNldCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFF1ZXJ5U2V0
SW1wbChxdWVyeVNldCkpOworICAgIH0KKworICAgIHZpcnR1YWwgflF1ZXJ5U2V0SW1wbCgpOwor
CisgICAgV0dQVVF1ZXJ5U2V0IGJhY2tpbmcoKSBjb25zdCB7IHJldHVybiBtX2JhY2tpbmc7IH0K
KworcHJpdmF0ZToKKyAgICBRdWVyeVNldEltcGwoV0dQVVF1ZXJ5U2V0KTsKKworICAgIFF1ZXJ5
U2V0SW1wbChjb25zdCBRdWVyeVNldEltcGwmKSA9IGRlbGV0ZTsKKyAgICBRdWVyeVNldEltcGwo
UXVlcnlTZXRJbXBsJiYpID0gZGVsZXRlOworICAgIFF1ZXJ5U2V0SW1wbCYgb3BlcmF0b3I9KGNv
bnN0IFF1ZXJ5U2V0SW1wbCYpID0gZGVsZXRlOworICAgIFF1ZXJ5U2V0SW1wbCYgb3BlcmF0b3I9
KFF1ZXJ5U2V0SW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIHZvaWQgZGVzdHJveSgpIGZpbmFsOwor
CisgICAgdm9pZCBzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYpIGZpbmFsOworCisgICAg
V0dQVVF1ZXJ5U2V0IG1fYmFja2luZyB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Q
QUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVF1ZXVlSW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVF1ZXVlSW1wbC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNDdiNDNmMTY1NWVlY2VlNzk3OTk2MzU3MDg1NzNhMTM5ZDNiYTliZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0lt
cGwvV2ViR1BVUXVldWVJbXBsLmNwcApAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVRdWV1ZUltcGwuaCIKKworI2luY2x1
ZGUgIldlYkdQVUJ1ZmZlckltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVDb21tYW5kQnVmZmVySW1w
bC5oIgorI2luY2x1ZGUgIldlYkdQVUNvbnZlcnRUb0JhY2tpbmcuaCIKKyNpbmNsdWRlICJXZWJH
UFVUZXh0dXJlSW1wbC5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFVFeHQuaD4KKworbmFtZXNw
YWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworUXVldWVJbXBsOjpRdWV1ZUltcGwoV0dQ
VVF1ZXVlIHF1ZXVlKQorICAgIDogbV9iYWNraW5nKHF1ZXVlKQoreworfQorCitRdWV1ZUltcGw6
On5RdWV1ZUltcGwoKQoreworICAgIHdncHVRdWV1ZVJlbGVhc2UobV9iYWNraW5nKTsKK30KKwor
dm9pZCBRdWV1ZUltcGw6OnN1Ym1pdChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDb21t
YW5kQnVmZmVyPj4mJiBjb21tYW5kQnVmZmVycykKK3sKKyAgICBWZWN0b3I8V0dQVUNvbW1hbmRC
dWZmZXI+IGJhY2tpbmdDb21tYW5kQnVmZmVyczsKKyAgICBiYWNraW5nQ29tbWFuZEJ1ZmZlcnMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjb21tYW5kQnVmZmVycy5zaXplKCkpOworICAgIGZvciAo
YXV0byBjb21tYW5kQnVmZmVyIDogY29tbWFuZEJ1ZmZlcnMpCisgICAgICAgIGJhY2tpbmdDb21t
YW5kQnVmZmVycy51bmNoZWNrZWRBcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgQ29tbWFuZEJ1ZmZl
ckltcGwmPihjb21tYW5kQnVmZmVyLmdldCgpKS5iYWNraW5nKCkpOworCisgICAgd2dwdVF1ZXVl
U3VibWl0KG1fYmFja2luZywgYmFja2luZ0NvbW1hbmRCdWZmZXJzLnNpemUoKSwgYmFja2luZ0Nv
bW1hbmRCdWZmZXJzLmRhdGEoKSk7Cit9CisKK3ZvaWQgb25TdWJtaXR0ZWRXb3JrRG9uZUNhbGxi
YWNrKFdHUFVRdWV1ZVdvcmtEb25lU3RhdHVzIHN0YXR1cywgdm9pZCogdXNlcmRhdGEpCit7Cisg
ICAgYXV0byBxdWV1ZSA9IGFkb3B0UmVmKCpzdGF0aWNfY2FzdDxRdWV1ZUltcGwqPih1c2VyZGF0
YSkpOyAvLyBhZG9wdFJlZiBpcyBiYWxhbmNlZCBieSBsZWFrUmVmIGluIG9uU3VibWl0dGVkV29y
a0RvbmUoKSBiZWxvdy4gV2UgaGF2ZSB0byBkbyB0aGlzIGJlY2F1c2Ugd2UncmUgdXNpbmcgYSBD
IEFQSSB3aXRoIG5vIGNvbmNlcHQgb2YgcmVmZXJlbmNlIGNvdW50aW5nIG9yIGJsb2Nrcy4KKyAg
ICBxdWV1ZS0+b25TdWJtaXR0ZWRXb3JrRG9uZUNhbGxiYWNrKHN0YXR1cyk7Cit9CisKK3ZvaWQg
UXVldWVJbXBsOjpvblN1Ym1pdHRlZFdvcmtEb25lKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiYmIGNh
bGxiYWNrKQoreworICAgIFJlZiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKKworICAgIG1fY2FsbGJh
Y2tzLmFwcGVuZChXVEZNb3ZlKGNhbGxiYWNrKSk7CisKKyAgICB3Z3B1UXVldWVPblN1Ym1pdHRl
ZFdvcmtEb25lKG1fYmFja2luZywgbV9zaWduYWxWYWx1ZSwgJldlYkdQVTo6b25TdWJtaXR0ZWRX
b3JrRG9uZUNhbGxiYWNrLCAmcHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpOyAvLyBsZWFrUmVmIGlz
IGJhbGFuY2VkIGJ5IGFkb3B0UmVmIGluIG9uU3VibWl0dGVkV29ya0RvbmVDYWxsYmFjaygpIGFi
b3ZlLiBXZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSdyZSB1c2luZyBhIEMgQVBJIHdpdGgg
bm8gY29uY2VwdCBvZiByZWZlcmVuY2UgY291bnRpbmcgb3IgYmxvY2tzLgorCisgICAgKyttX3Np
Z25hbFZhbHVlOworfQorCit2b2lkIFF1ZXVlSW1wbDo6b25TdWJtaXR0ZWRXb3JrRG9uZUNhbGxi
YWNrKFdHUFVRdWV1ZVdvcmtEb25lU3RhdHVzKQoreworICAgIGF1dG8gY2FsbGJhY2sgPSBtX2Nh
bGxiYWNrcy50YWtlRmlyc3QoKTsKKyAgICBjYWxsYmFjaygpOworfQorCit2b2lkIFF1ZXVlSW1w
bDo6d3JpdGVCdWZmZXIoCisgICAgY29uc3QgQnVmZmVyJiBidWZmZXIsCisgICAgU2l6ZTY0IGJ1
ZmZlck9mZnNldCwKKyAgICBjb25zdCB2b2lkKiBzb3VyY2UsCisgICAgc2l6ZV90IGJ5dGVMZW5n
dGgsCisgICAgU2l6ZTY0IGRhdGFPZmZzZXQsCisgICAgc3RkOjpvcHRpb25hbDxTaXplNjQ+IHNp
emUpCit7CisgICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFyaXRobWV0aWMKKyAgICB3Z3B1UXVl
dWVXcml0ZUJ1ZmZlcihtX2JhY2tpbmcsIHN0YXRpY19jYXN0PGNvbnN0IEJ1ZmZlckltcGwmPihi
dWZmZXIpLmJhY2tpbmcoKSwgYnVmZmVyT2Zmc2V0LCBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90
Kj4oc291cmNlKSArIGRhdGFPZmZzZXQsIHNpemUudmFsdWVfb3IoYnl0ZUxlbmd0aCAtIGRhdGFP
ZmZzZXQpKTsKK30KKwordm9pZCBRdWV1ZUltcGw6OndyaXRlVGV4dHVyZSgKKyAgICBjb25zdCBJ
bWFnZUNvcHlUZXh0dXJlJiBkZXN0aW5hdGlvbiwKKyAgICBjb25zdCB2b2lkKiBzb3VyY2UsCisg
ICAgc2l6ZV90IGJ5dGVMZW5ndGgsCisgICAgY29uc3QgSW1hZ2VEYXRhTGF5b3V0JiBkYXRhTGF5
b3V0LAorICAgIGNvbnN0IEV4dGVudDNEJiBzaXplKQoreworICAgIFdHUFVJbWFnZUNvcHlUZXh0
dXJlIGJhY2tpbmdEZXN0aW5hdGlvbiB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIHN0YXRp
Y19jYXN0PGNvbnN0IFRleHR1cmVJbXBsJj4oZGVzdGluYXRpb24udGV4dHVyZSkuYmFja2luZygp
LAorICAgICAgICBkZXN0aW5hdGlvbi5taXBMZXZlbCwKKyAgICAgICAgZGVzdGluYXRpb24ub3Jp
Z2luID8gY29udmVydFRvQmFja2luZygqZGVzdGluYXRpb24ub3JpZ2luKSA6IFdHUFVPcmlnaW4z
RCB7IDAsIDAsIDAgfSwKKyAgICAgICAgY29udmVydFRvQmFja2luZyhkZXN0aW5hdGlvbi5hc3Bl
Y3QpLAorICAgIH07CisKKyAgICBXR1BVVGV4dHVyZURhdGFMYXlvdXQgYmFja2luZ0RhdGFMYXlv
dXQgeworICAgICAgICBudWxscHRyLAorICAgICAgICBkYXRhTGF5b3V0Lm9mZnNldCwKKyAgICAg
ICAgZGF0YUxheW91dC5ieXRlc1BlclJvdy52YWx1ZV9vcigwKSwKKyAgICAgICAgZGF0YUxheW91
dC5yb3dzUGVySW1hZ2UudmFsdWVfb3IoMCksCisgICAgfTsKKworICAgIFdHUFVFeHRlbnQzRCBi
YWNraW5nU2l6ZSA9IGNvbnZlcnRUb0JhY2tpbmcoc2l6ZSk7CisKKyAgICB3Z3B1UXVldWVXcml0
ZVRleHR1cmUobV9iYWNraW5nLCAmYmFja2luZ0Rlc3RpbmF0aW9uLCBzb3VyY2UsIGJ5dGVMZW5n
dGgsICZiYWNraW5nRGF0YUxheW91dCwgJmJhY2tpbmdTaXplKTsKK30KKwordm9pZCBRdWV1ZUlt
cGw6OmNvcHlFeHRlcm5hbEltYWdlVG9UZXh0dXJlKAorICAgIGNvbnN0IEltYWdlQ29weUV4dGVy
bmFsSW1hZ2UmIHNvdXJjZSwKKyAgICBjb25zdCBJbWFnZUNvcHlUZXh0dXJlVGFnZ2VkJiBkZXN0
aW5hdGlvbiwKKyAgICBjb25zdCBFeHRlbnQzRCYgY29weVNpemUpCit7CisgICAgVU5VU0VEX1BB
UkFNKHNvdXJjZSk7CisgICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uKTsKKyAgICBVTlVTRURf
UEFSQU0oY29weVNpemUpOworfQorCit2b2lkIFF1ZXVlSW1wbDo6c2V0TGFiZWxJbnRlcm5hbChj
b25zdCBTdHJpbmcmIGxhYmVsKQoreworICAgIHdncHVRdWV1ZVNldExhYmVsKG1fYmFja2luZywg
bGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1l
c3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNz
L1dlYkdQVS9JbXBsL1dlYkdQVVF1ZXVlSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9n
cmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVRdWV1ZUltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYTA2ZmE2
ZmI1ZjMyNjY0ODg2Y2E2ZTFjMDc0ZDY5ZDAzN2E0MDk0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVRdWV1ZUltcGwu
aApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJXZWJHUFVRdWV1ZS5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFUuaD4KKyNpbmNsdWRlIDx3
dGYvRGVxdWUuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworY2xh
c3MgUXVldWVJbXBsIGZpbmFsIDogcHVibGljIFF1ZXVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UmVmPFF1ZXVlSW1wbD4gY3JlYXRlKFdHUFVRdWV1ZSBxdWV1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFF1ZXVlSW1wbChxdWV1ZSkpOworICAgIH0KKworICAgIHZpcnR1
YWwgflF1ZXVlSW1wbCgpOworCisgICAgV0dQVVF1ZXVlIGJhY2tpbmcoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tpbmc7IH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgdm9pZCBvblN1Ym1pdHRlZFdv
cmtEb25lQ2FsbGJhY2soV0dQVVF1ZXVlV29ya0RvbmVTdGF0dXMsIHZvaWQqIHVzZXJkYXRhKTsK
KworICAgIFF1ZXVlSW1wbChXR1BVUXVldWUpOworCisgICAgUXVldWVJbXBsKGNvbnN0IFF1ZXVl
SW1wbCYpID0gZGVsZXRlOworICAgIFF1ZXVlSW1wbChRdWV1ZUltcGwmJikgPSBkZWxldGU7Cisg
ICAgUXVldWVJbXBsJiBvcGVyYXRvcj0oY29uc3QgUXVldWVJbXBsJikgPSBkZWxldGU7CisgICAg
UXVldWVJbXBsJiBvcGVyYXRvcj0oUXVldWVJbXBsJiYpID0gZGVsZXRlOworCisgICAgdm9pZCBz
dWJtaXQoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Q29tbWFuZEJ1ZmZlcj4+JiYpIGZp
bmFsOworCisgICAgdm9pZCBvblN1Ym1pdHRlZFdvcmtEb25lQ2FsbGJhY2soV0dQVVF1ZXVlV29y
a0RvbmVTdGF0dXMpOworICAgIHZvaWQgb25TdWJtaXR0ZWRXb3JrRG9uZShzdGQ6OmZ1bmN0aW9u
PHZvaWQoKT4mJikgZmluYWw7CisKKyAgICB2b2lkIHdyaXRlQnVmZmVyKAorICAgICAgICBjb25z
dCBCdWZmZXImLAorICAgICAgICBTaXplNjQgYnVmZmVyT2Zmc2V0LAorICAgICAgICBjb25zdCB2
b2lkKiBzb3VyY2UsCisgICAgICAgIHNpemVfdCBieXRlTGVuZ3RoLAorICAgICAgICBTaXplNjQg
ZGF0YU9mZnNldCwKKyAgICAgICAgc3RkOjpvcHRpb25hbDxTaXplNjQ+KSBmaW5hbDsKKworICAg
IHZvaWQgd3JpdGVUZXh0dXJlKAorICAgICAgICBjb25zdCBJbWFnZUNvcHlUZXh0dXJlJiBkZXN0
aW5hdGlvbiwKKyAgICAgICAgY29uc3Qgdm9pZCogc291cmNlLAorICAgICAgICBzaXplX3QgYnl0
ZUxlbmd0aCwKKyAgICAgICAgY29uc3QgSW1hZ2VEYXRhTGF5b3V0JiwKKyAgICAgICAgY29uc3Qg
RXh0ZW50M0QmIHNpemUpIGZpbmFsOworCisgICAgdm9pZCBjb3B5RXh0ZXJuYWxJbWFnZVRvVGV4
dHVyZSgKKyAgICAgICAgY29uc3QgSW1hZ2VDb3B5RXh0ZXJuYWxJbWFnZSYgc291cmNlLAorICAg
ICAgICBjb25zdCBJbWFnZUNvcHlUZXh0dXJlVGFnZ2VkJiBkZXN0aW5hdGlvbiwKKyAgICAgICAg
Y29uc3QgRXh0ZW50M0QmIGNvcHlTaXplKSBmaW5hbDsKKworICAgIHZvaWQgc2V0TGFiZWxJbnRl
cm5hbChjb25zdCBTdHJpbmcmKSBmaW5hbDsKKworICAgIFdHUFVRdWV1ZSBtX2JhY2tpbmcgeyBu
dWxscHRyIH07CisKKyAgICB1aW50NjRfdCBtX3NpZ25hbFZhbHVlIHsgMSB9OworCisgICAgRGVx
dWU8c3RkOjpmdW5jdGlvbjx2b2lkKCk+PiBtX2NhbGxiYWNrczsKK307CisKK30gLy8gbmFtZXNw
YWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2Vi
R1BVUmVuZGVyQnVuZGxlRW5jb2RlckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg1ZTIxMjdkNjQyMTZk
MGI5NGM0YTQ5OWVjYjFiNDA3OTA4NGFlZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlckJ1bmRsZUVuY29k
ZXJJbXBsLmNwcApAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJHUFVSZW5kZXJCdW5kbGVFbmNvZGVySW1wbC5oIgorCisjaW5j
bHVkZSAiV2ViR1BVQmluZEdyb3VwSW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVUJ1ZmZlckltcGwu
aCIKKyNpbmNsdWRlICJXZWJHUFVDb252ZXJ0VG9CYWNraW5nLmgiCisjaW5jbHVkZSAiV2ViR1BV
UmVuZGVyQnVuZGxlSW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5o
IgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFVFeHQuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1l
c3BhY2UgV2ViR1BVIHsKKworUmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OlJlbmRlckJ1bmRsZUVu
Y29kZXJJbXBsKFdHUFVSZW5kZXJCdW5kbGVFbmNvZGVyIHJlbmRlckJ1bmRsZUVuY29kZXIpCisg
ICAgOiBtX2JhY2tpbmcocmVuZGVyQnVuZGxlRW5jb2RlcikKK3sKK30KKworUmVuZGVyQnVuZGxl
RW5jb2RlckltcGw6On5SZW5kZXJCdW5kbGVFbmNvZGVySW1wbCgpCit7CisgICAgd2dwdVJlbmRl
ckJ1bmRsZUVuY29kZXJSZWxlYXNlKG1fYmFja2luZyk7Cit9CisKK3ZvaWQgUmVuZGVyQnVuZGxl
RW5jb2RlckltcGw6OnNldFBpcGVsaW5lKGNvbnN0IFJlbmRlclBpcGVsaW5lJiByZW5kZXJQaXBl
bGluZSkKK3sKKyAgICB3Z3B1UmVuZGVyQnVuZGxlRW5jb2RlclNldFBpcGVsaW5lKG1fYmFja2lu
Zywgc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyUGlwZWxpbmVJbXBsJj4ocmVuZGVyUGlwZWxpbmUp
LmJhY2tpbmcoKSk7Cit9CisKK3ZvaWQgUmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OnNldEluZGV4
QnVmZmVyKGNvbnN0IEJ1ZmZlciYgYnVmZmVyLCBJbmRleEZvcm1hdCBpbmRleEZvcm1hdCwgU2l6
ZTY0IG9mZnNldCwgc3RkOjpvcHRpb25hbDxTaXplNjQ+IHNpemUpCit7CisgICAgd2dwdVJlbmRl
ckJ1bmRsZUVuY29kZXJTZXRJbmRleEJ1ZmZlcihtX2JhY2tpbmcsIHN0YXRpY19jYXN0PGNvbnN0
IEJ1ZmZlckltcGwmPihidWZmZXIpLmJhY2tpbmcoKSwgY29udmVydFRvQmFja2luZyhpbmRleEZv
cm1hdCksIG9mZnNldCwgc2l6ZS52YWx1ZV9vcihXR1BVX1dIT0xFX1NJWkUpKTsKK30KKwordm9p
ZCBSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6c2V0VmVydGV4QnVmZmVyKEluZGV4MzIgc2xvdCwg
Y29uc3QgQnVmZmVyJiBidWZmZXIsIFNpemU2NCBvZmZzZXQsIHN0ZDo6b3B0aW9uYWw8U2l6ZTY0
PiBzaXplKQoreworICAgIHdncHVSZW5kZXJCdW5kbGVFbmNvZGVyU2V0VmVydGV4QnVmZmVyKG1f
YmFja2luZywgc2xvdCwgc3RhdGljX2Nhc3Q8Y29uc3QgQnVmZmVySW1wbCY+KGJ1ZmZlcikuYmFj
a2luZygpLCBvZmZzZXQsIHNpemUudmFsdWVfb3IoV0dQVV9XSE9MRV9TSVpFKSk7Cit9CisKK3Zv
aWQgUmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OmRyYXcoU2l6ZTMyIHZlcnRleENvdW50LCBTaXpl
MzIgaW5zdGFuY2VDb3VudCwKKyAgICBTaXplMzIgZmlyc3RWZXJ0ZXgsIFNpemUzMiBmaXJzdElu
c3RhbmNlKQoreworICAgIHdncHVSZW5kZXJCdW5kbGVFbmNvZGVyRHJhdyhtX2JhY2tpbmcsIHZl
cnRleENvdW50LCBpbnN0YW5jZUNvdW50LCBmaXJzdFZlcnRleCwgZmlyc3RJbnN0YW5jZSk7Cit9
CisKK3ZvaWQgUmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OmRyYXdJbmRleGVkKFNpemUzMiBpbmRl
eENvdW50LCBTaXplMzIgaW5zdGFuY2VDb3VudCwKKyAgICBTaXplMzIgZmlyc3RJbmRleCwKKyAg
ICBTaWduZWRPZmZzZXQzMiBiYXNlVmVydGV4LAorICAgIFNpemUzMiBmaXJzdEluc3RhbmNlKQor
eworICAgIHdncHVSZW5kZXJCdW5kbGVFbmNvZGVyRHJhd0luZGV4ZWQobV9iYWNraW5nLCBpbmRl
eENvdW50LCBpbnN0YW5jZUNvdW50LCBmaXJzdEluZGV4LCBiYXNlVmVydGV4LCBmaXJzdEluc3Rh
bmNlKTsKK30KKwordm9pZCBSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6ZHJhd0luZGlyZWN0KGNv
bnN0IEJ1ZmZlciYgaW5kaXJlY3RCdWZmZXIsIFNpemU2NCBpbmRpcmVjdE9mZnNldCkKK3sKKyAg
ICB3Z3B1UmVuZGVyQnVuZGxlRW5jb2RlckRyYXdJbmRpcmVjdChtX2JhY2tpbmcsIHN0YXRpY19j
YXN0PGNvbnN0IEJ1ZmZlckltcGwmPihpbmRpcmVjdEJ1ZmZlcikuYmFja2luZygpLCBpbmRpcmVj
dE9mZnNldCk7Cit9CisKK3ZvaWQgUmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OmRyYXdJbmRleGVk
SW5kaXJlY3QoY29uc3QgQnVmZmVyJiBpbmRpcmVjdEJ1ZmZlciwgU2l6ZTY0IGluZGlyZWN0T2Zm
c2V0KQoreworICAgIHdncHVSZW5kZXJCdW5kbGVFbmNvZGVyRHJhd0luZGV4ZWRJbmRpcmVjdCht
X2JhY2tpbmcsIHN0YXRpY19jYXN0PGNvbnN0IEJ1ZmZlckltcGwmPihpbmRpcmVjdEJ1ZmZlciku
YmFja2luZygpLCBpbmRpcmVjdE9mZnNldCk7Cit9CisKK3ZvaWQgUmVuZGVyQnVuZGxlRW5jb2Rl
ckltcGw6OnNldEJpbmRHcm91cChJbmRleDMyIGluZGV4LCBjb25zdCBCaW5kR3JvdXAmIGJpbmRH
cm91cCwKKyAgICBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxCdWZmZXJEeW5hbWljT2Zmc2V0Pj4mJiBk
eW5hbWljT2Zmc2V0cykKK3sKKyAgICBhdXRvIGJhY2tpbmdPZmZzZXRzID0gZHluYW1pY09mZnNl
dHMudmFsdWVfb3IoVmVjdG9yPEJ1ZmZlckR5bmFtaWNPZmZzZXQ+IHsgfSk7CisgICAgd2dwdVJl
bmRlckJ1bmRsZUVuY29kZXJTZXRCaW5kR3JvdXAobV9iYWNraW5nLCBpbmRleCwgc3RhdGljX2Nh
c3Q8Y29uc3QgQmluZEdyb3VwSW1wbCY+KGJpbmRHcm91cCkuYmFja2luZygpLCBiYWNraW5nT2Zm
c2V0cy5zaXplKCksIGJhY2tpbmdPZmZzZXRzLmRhdGEoKSk7Cit9CisKK3ZvaWQgUmVuZGVyQnVu
ZGxlRW5jb2RlckltcGw6OnNldEJpbmRHcm91cChJbmRleDMyIGluZGV4LCBjb25zdCBCaW5kR3Jv
dXAmIGJpbmRHcm91cCwKKyAgICBjb25zdCB1aW50MzJfdCogZHluYW1pY09mZnNldHNBcnJheUJ1
ZmZlciwKKyAgICBzaXplX3QgZHluYW1pY09mZnNldHNBcnJheUJ1ZmZlckxlbmd0aCwKKyAgICBT
aXplNjQgZHluYW1pY09mZnNldHNEYXRhU3RhcnQsCisgICAgU2l6ZTMyIGR5bmFtaWNPZmZzZXRz
RGF0YUxlbmd0aCkKK3sKKyAgICBVTlVTRURfUEFSQU0oZHluYW1pY09mZnNldHNBcnJheUJ1ZmZl
ckxlbmd0aCk7CisgICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFsZ2VicmEuCisgICAgd2dwdVJl
bmRlckJ1bmRsZUVuY29kZXJTZXRCaW5kR3JvdXAobV9iYWNraW5nLCBpbmRleCwgc3RhdGljX2Nh
c3Q8Y29uc3QgQmluZEdyb3VwSW1wbCY+KGJpbmRHcm91cCkuYmFja2luZygpLCBkeW5hbWljT2Zm
c2V0c0RhdGFMZW5ndGgsIGR5bmFtaWNPZmZzZXRzQXJyYXlCdWZmZXIgKyBkeW5hbWljT2Zmc2V0
c0RhdGFTdGFydCk7Cit9CisKK3ZvaWQgUmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OnB1c2hEZWJ1
Z0dyb3VwKFN0cmluZyYmIGdyb3VwTGFiZWwpCit7CisgICAgd2dwdVJlbmRlckJ1bmRsZUVuY29k
ZXJQdXNoRGVidWdHcm91cChtX2JhY2tpbmcsIGdyb3VwTGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9
CisKK3ZvaWQgUmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OnBvcERlYnVnR3JvdXAoKQoreworICAg
IHdncHVSZW5kZXJCdW5kbGVFbmNvZGVyUG9wRGVidWdHcm91cChtX2JhY2tpbmcpOworfQorCit2
b2lkIFJlbmRlckJ1bmRsZUVuY29kZXJJbXBsOjppbnNlcnREZWJ1Z01hcmtlcihTdHJpbmcmJiBt
YXJrZXJMYWJlbCkKK3sKKyAgICB3Z3B1UmVuZGVyQnVuZGxlRW5jb2Rlckluc2VydERlYnVnTWFy
a2VyKG1fYmFja2luZywgbWFya2VyTGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK1JlZjxSZW5k
ZXJCdW5kbGU+IFJlbmRlckJ1bmRsZUVuY29kZXJJbXBsOjpmaW5pc2goY29uc3QgUmVuZGVyQnVu
ZGxlRGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBhdXRvIGxhYmVsID0gZGVzY3JpcHRv
ci5sYWJlbC51dGY4KCk7CisKKyAgICBXR1BVUmVuZGVyQnVuZGxlRGVzY3JpcHRvciBiYWNraW5n
RGVzY3JpcHRvciB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIGxhYmVsLmRhdGEoKSwKKyAg
ICB9OworCisgICAgcmV0dXJuIFJlbmRlckJ1bmRsZUltcGw6OmNyZWF0ZSh3Z3B1UmVuZGVyQnVu
ZGxlRW5jb2RlckZpbmlzaChtX2JhY2tpbmcsICZiYWNraW5nRGVzY3JpcHRvcikpOworfQorCit2
b2lkIFJlbmRlckJ1bmRsZUVuY29kZXJJbXBsOjpzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmlu
ZyYgbGFiZWwpCit7CisgICAgd2dwdVJlbmRlckJ1bmRsZUVuY29kZXJTZXRMYWJlbChtX2JhY2tp
bmcsIGxhYmVsLnV0ZjgoKS5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8g
bmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJCdW5kbGVFbmNvZGVySW1wbC5oIGIvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJCdW5kbGVF
bmNvZGVySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1ZGFmNDE5M2NkMjhiOThjMzBiMGJlYjI2OWYxZjcy
Njc5MzJiMWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBo
aWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJbXBsLmgKQEAgLTAsMCAr
MSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVUmVu
ZGVyQnVuZGxlRW5jb2Rlci5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFUuaD4KKworbmFtZXNw
YWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworY2xhc3MgUmVuZGVyQnVuZGxlRW5jb2Rl
ckltcGwgZmluYWwgOiBwdWJsaWMgUmVuZGVyQnVuZGxlRW5jb2RlciB7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZjxSZW5kZXJCdW5kbGVFbmNvZGVySW1wbD4gY3JlYXRlKFdHUFVSZW5kZXJCdW5k
bGVFbmNvZGVyIHJlbmRlckJ1bmRsZUVuY29kZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBSZW5kZXJCdW5kbGVFbmNvZGVySW1wbChyZW5kZXJCdW5kbGVFbmNvZGVyKSk7
CisgICAgfQorCisgICAgflJlbmRlckJ1bmRsZUVuY29kZXJJbXBsKCk7CisKKyAgICBXR1BVUmVu
ZGVyQnVuZGxlRW5jb2RlciBiYWNraW5nKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nOyB9CisK
K3ByaXZhdGU6CisgICAgUmVuZGVyQnVuZGxlRW5jb2RlckltcGwoV0dQVVJlbmRlckJ1bmRsZUVu
Y29kZXIpOworCisgICAgUmVuZGVyQnVuZGxlRW5jb2RlckltcGwoY29uc3QgUmVuZGVyQnVuZGxl
RW5jb2RlckltcGwmKSA9IGRlbGV0ZTsKKyAgICBSZW5kZXJCdW5kbGVFbmNvZGVySW1wbChSZW5k
ZXJCdW5kbGVFbmNvZGVySW1wbCYmKSA9IGRlbGV0ZTsKKyAgICBSZW5kZXJCdW5kbGVFbmNvZGVy
SW1wbCYgb3BlcmF0b3I9KGNvbnN0IFJlbmRlckJ1bmRsZUVuY29kZXJJbXBsJikgPSBkZWxldGU7
CisgICAgUmVuZGVyQnVuZGxlRW5jb2RlckltcGwmIG9wZXJhdG9yPShSZW5kZXJCdW5kbGVFbmNv
ZGVySW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIHZvaWQgc2V0UGlwZWxpbmUoY29uc3QgUmVuZGVy
UGlwZWxpbmUmKSBmaW5hbDsKKworICAgIHZvaWQgc2V0SW5kZXhCdWZmZXIoY29uc3QgQnVmZmVy
JiwgSW5kZXhGb3JtYXQsIFNpemU2NCBvZmZzZXQsIHN0ZDo6b3B0aW9uYWw8U2l6ZTY0PikgZmlu
YWw7CisgICAgdm9pZCBzZXRWZXJ0ZXhCdWZmZXIoSW5kZXgzMiBzbG90LCBjb25zdCBCdWZmZXIm
LCBTaXplNjQgb2Zmc2V0LCBzdGQ6Om9wdGlvbmFsPFNpemU2ND4pIGZpbmFsOworCisgICAgdm9p
ZCBkcmF3KFNpemUzMiB2ZXJ0ZXhDb3VudCwgU2l6ZTMyIGluc3RhbmNlQ291bnQsCisgICAgICAg
IFNpemUzMiBmaXJzdFZlcnRleCwgU2l6ZTMyIGZpcnN0SW5zdGFuY2UpIGZpbmFsOworICAgIHZv
aWQgZHJhd0luZGV4ZWQoU2l6ZTMyIGluZGV4Q291bnQsIFNpemUzMiBpbnN0YW5jZUNvdW50LAor
ICAgICAgICBTaXplMzIgZmlyc3RJbmRleCwKKyAgICAgICAgU2lnbmVkT2Zmc2V0MzIgYmFzZVZl
cnRleCwKKyAgICAgICAgU2l6ZTMyIGZpcnN0SW5zdGFuY2UpIGZpbmFsOworCisgICAgdm9pZCBk
cmF3SW5kaXJlY3QoY29uc3QgQnVmZmVyJiBpbmRpcmVjdEJ1ZmZlciwgU2l6ZTY0IGluZGlyZWN0
T2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdJbmRleGVkSW5kaXJlY3QoY29uc3QgQnVmZmVy
JiBpbmRpcmVjdEJ1ZmZlciwgU2l6ZTY0IGluZGlyZWN0T2Zmc2V0KSBmaW5hbDsKKworICAgIHZv
aWQgc2V0QmluZEdyb3VwKEluZGV4MzIsIGNvbnN0IEJpbmRHcm91cCYsCisgICAgICAgIHN0ZDo6
b3B0aW9uYWw8VmVjdG9yPEJ1ZmZlckR5bmFtaWNPZmZzZXQ+PiYmIGR5bmFtaWNPZmZzZXRzKSBm
aW5hbDsKKworICAgIHZvaWQgc2V0QmluZEdyb3VwKEluZGV4MzIsIGNvbnN0IEJpbmRHcm91cCYs
CisgICAgICAgIGNvbnN0IHVpbnQzMl90KiBkeW5hbWljT2Zmc2V0c0FycmF5QnVmZmVyLAorICAg
ICAgICBzaXplX3QgZHluYW1pY09mZnNldHNBcnJheUJ1ZmZlckxlbmd0aCwKKyAgICAgICAgU2l6
ZTY0IGR5bmFtaWNPZmZzZXRzRGF0YVN0YXJ0LAorICAgICAgICBTaXplMzIgZHluYW1pY09mZnNl
dHNEYXRhTGVuZ3RoKSBmaW5hbDsKKworICAgIHZvaWQgcHVzaERlYnVnR3JvdXAoU3RyaW5nJiYg
Z3JvdXBMYWJlbCkgZmluYWw7CisgICAgdm9pZCBwb3BEZWJ1Z0dyb3VwKCkgZmluYWw7CisgICAg
dm9pZCBpbnNlcnREZWJ1Z01hcmtlcihTdHJpbmcmJiBtYXJrZXJMYWJlbCkgZmluYWw7CisKKyAg
ICBSZWY8UmVuZGVyQnVuZGxlPiBmaW5pc2goY29uc3QgUmVuZGVyQnVuZGxlRGVzY3JpcHRvciYp
IGZpbmFsOworCisgICAgdm9pZCBzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYpIGZpbmFs
OworCisgICAgV0dQVVJlbmRlckJ1bmRsZUVuY29kZXIgbV9iYWNraW5nIHsgbnVsbHB0ciB9Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVu
ZGVyQnVuZGxlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQ
VS9JbXBsL1dlYkdQVVJlbmRlckJ1bmRsZUltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmViMThjZjljNDE4
NGM0ZjRjZjhmMTFhMjU2MzdiOTFjNjg3NzY5NGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlckJ1bmRsZUlt
cGwuY3BwCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViR1BVUmVuZGVyQnVuZGxlSW1wbC5oIgorCisjaW5jbHVkZSA8V2ViR1BV
L1dlYkdQVUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitS
ZW5kZXJCdW5kbGVJbXBsOjpSZW5kZXJCdW5kbGVJbXBsKFdHUFVSZW5kZXJCdW5kbGUgcmVuZGVy
QnVuZGxlKQorICAgIDogbV9iYWNraW5nKHJlbmRlckJ1bmRsZSkKK3sKK30KKworUmVuZGVyQnVu
ZGxlSW1wbDo6flJlbmRlckJ1bmRsZUltcGwoKQoreworICAgIHdncHVSZW5kZXJCdW5kbGVSZWxl
YXNlKG1fYmFja2luZyk7Cit9CisKK3ZvaWQgUmVuZGVyQnVuZGxlSW1wbDo6c2V0TGFiZWxJbnRl
cm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAgIHdncHVSZW5kZXJCdW5kbGVTZXRMYWJl
bChtX2JhY2tpbmcsIGxhYmVsLnV0ZjgoKS5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQ
QUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFM
L3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJCdW5kbGVJbXBsLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlckJ1bmRs
ZUltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41YmRhMzZlMDgxYTc0YTMwZTlmYjRkNDZhYzI0MGMzNTcyMjY2
NGRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9X
ZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJCdW5kbGVJbXBsLmgKQEAgLTAsMCArMSw1OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVUmVuZGVyQnVuZGxlLmgi
CisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFj
ZSBXZWJHUFUgeworCitjbGFzcyBSZW5kZXJCdW5kbGVJbXBsIGZpbmFsIDogcHVibGljIFJlbmRl
ckJ1bmRsZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZW5kZXJCdW5kbGVJbXBsPiBjcmVh
dGUoV0dQVVJlbmRlckJ1bmRsZSByZW5kZXJCdW5kbGUpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBSZW5kZXJCdW5kbGVJbXBsKHJlbmRlckJ1bmRsZSkpOworICAgIH0KKwor
ICAgIHZpcnR1YWwgflJlbmRlckJ1bmRsZUltcGwoKTsKKworICAgIFdHUFVSZW5kZXJCdW5kbGUg
YmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgorICAgIFJl
bmRlckJ1bmRsZUltcGwoV0dQVVJlbmRlckJ1bmRsZSk7CisKKyAgICBSZW5kZXJCdW5kbGVJbXBs
KGNvbnN0IFJlbmRlckJ1bmRsZUltcGwmKSA9IGRlbGV0ZTsKKyAgICBSZW5kZXJCdW5kbGVJbXBs
KFJlbmRlckJ1bmRsZUltcGwmJikgPSBkZWxldGU7CisgICAgUmVuZGVyQnVuZGxlSW1wbCYgb3Bl
cmF0b3I9KGNvbnN0IFJlbmRlckJ1bmRsZUltcGwmKSA9IGRlbGV0ZTsKKyAgICBSZW5kZXJCdW5k
bGVJbXBsJiBvcGVyYXRvcj0oUmVuZGVyQnVuZGxlSW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIHZv
aWQgc2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5hbDsKKworICAgIFdHUFVSZW5k
ZXJCdW5kbGUgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgUEFM
Cit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVyUGFzc0VuY29kZXJJbXBsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVy
UGFzc0VuY29kZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MTVhODQzZWI4ZGRhM2FjNGZkZjYxM2Ri
Y2Y1YTI4ZjEwYTIzMGU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJQYXNzRW5jb2RlckltcGwuY3BwCkBA
IC0wLDAgKzEsMTg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYkdQVVJlbmRlclBhc3NFbmNvZGVySW1wbC5oIgorCisjaW5jbHVkZSAiV2ViR1BVQmlu
ZEdyb3VwSW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVUJ1ZmZlckltcGwuaCIKKyNpbmNsdWRlICJX
ZWJHUFVDb252ZXJ0VG9CYWNraW5nLmgiCisjaW5jbHVkZSAiV2ViR1BVUXVlcnlTZXRJbXBsLmgi
CisjaW5jbHVkZSAiV2ViR1BVUmVuZGVyQnVuZGxlSW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVVJl
bmRlclBpcGVsaW5lSW1wbC5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFVFeHQuaD4KKworbmFt
ZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworUmVuZGVyUGFzc0VuY29kZXJJbXBs
OjpSZW5kZXJQYXNzRW5jb2RlckltcGwoV0dQVVJlbmRlclBhc3NFbmNvZGVyIHJlbmRlclBhc3NF
bmNvZGVyKQorICAgIDogbV9iYWNraW5nKHJlbmRlclBhc3NFbmNvZGVyKQoreworfQorCitSZW5k
ZXJQYXNzRW5jb2RlckltcGw6On5SZW5kZXJQYXNzRW5jb2RlckltcGwoKQoreworICAgIHdncHVS
ZW5kZXJQYXNzRW5jb2RlclJlbGVhc2UobV9iYWNraW5nKTsKK30KKwordm9pZCBSZW5kZXJQYXNz
RW5jb2RlckltcGw6OnNldFBpcGVsaW5lKGNvbnN0IFJlbmRlclBpcGVsaW5lJiByZW5kZXJQaXBl
bGluZSkKK3sKKyAgICB3Z3B1UmVuZGVyUGFzc0VuY29kZXJTZXRQaXBlbGluZShtX2JhY2tpbmcs
IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclBpcGVsaW5lSW1wbCY+KHJlbmRlclBpcGVsaW5lKS5i
YWNraW5nKCkpOworfQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6c2V0SW5kZXhCdWZm
ZXIoY29uc3QgQnVmZmVyJiBidWZmZXIsIEluZGV4Rm9ybWF0IGluZGV4Rm9ybWF0LCBTaXplNjQg
b2Zmc2V0LCBzdGQ6Om9wdGlvbmFsPFNpemU2ND4gc2l6ZSkKK3sKKyAgICB3Z3B1UmVuZGVyUGFz
c0VuY29kZXJTZXRJbmRleEJ1ZmZlcihtX2JhY2tpbmcsIHN0YXRpY19jYXN0PGNvbnN0IEJ1ZmZl
ckltcGwmPihidWZmZXIpLmJhY2tpbmcoKSwgY29udmVydFRvQmFja2luZyhpbmRleEZvcm1hdCks
IG9mZnNldCwgc2l6ZS52YWx1ZV9vcihXR1BVX1dIT0xFX1NJWkUpKTsKK30KKwordm9pZCBSZW5k
ZXJQYXNzRW5jb2RlckltcGw6OnNldFZlcnRleEJ1ZmZlcihJbmRleDMyIHNsb3QsIGNvbnN0IEJ1
ZmZlciYgYnVmZmVyLCBTaXplNjQgb2Zmc2V0LCBzdGQ6Om9wdGlvbmFsPFNpemU2ND4gc2l6ZSkK
K3sKKyAgICB3Z3B1UmVuZGVyUGFzc0VuY29kZXJTZXRWZXJ0ZXhCdWZmZXIobV9iYWNraW5nLCBz
bG90LCBzdGF0aWNfY2FzdDxjb25zdCBCdWZmZXJJbXBsJj4oYnVmZmVyKS5iYWNraW5nKCksIG9m
ZnNldCwgc2l6ZS52YWx1ZV9vcihXR1BVX1dIT0xFX1NJWkUpKTsKK30KKwordm9pZCBSZW5kZXJQ
YXNzRW5jb2RlckltcGw6OmRyYXcoU2l6ZTMyIHZlcnRleENvdW50LCBTaXplMzIgaW5zdGFuY2VD
b3VudCwKKyAgICBTaXplMzIgZmlyc3RWZXJ0ZXgsIFNpemUzMiBmaXJzdEluc3RhbmNlKQorewor
ICAgIHdncHVSZW5kZXJQYXNzRW5jb2RlckRyYXcobV9iYWNraW5nLCB2ZXJ0ZXhDb3VudCwgaW5z
dGFuY2VDb3VudCwgZmlyc3RWZXJ0ZXgsIGZpcnN0SW5zdGFuY2UpOworfQorCit2b2lkIFJlbmRl
clBhc3NFbmNvZGVySW1wbDo6ZHJhd0luZGV4ZWQoU2l6ZTMyIGluZGV4Q291bnQsIFNpemUzMiBp
bnN0YW5jZUNvdW50LAorICAgIFNpemUzMiBmaXJzdEluZGV4LAorICAgIFNpZ25lZE9mZnNldDMy
IGJhc2VWZXJ0ZXgsCisgICAgU2l6ZTMyIGZpcnN0SW5zdGFuY2UpCit7CisgICAgd2dwdVJlbmRl
clBhc3NFbmNvZGVyRHJhd0luZGV4ZWQobV9iYWNraW5nLCBpbmRleENvdW50LCBpbnN0YW5jZUNv
dW50LCBmaXJzdEluZGV4LCBiYXNlVmVydGV4LCBmaXJzdEluc3RhbmNlKTsKK30KKwordm9pZCBS
ZW5kZXJQYXNzRW5jb2RlckltcGw6OmRyYXdJbmRpcmVjdChjb25zdCBCdWZmZXImIGluZGlyZWN0
QnVmZmVyLCBTaXplNjQgaW5kaXJlY3RPZmZzZXQpCit7CisgICAgd2dwdVJlbmRlclBhc3NFbmNv
ZGVyRHJhd0luZGlyZWN0KG1fYmFja2luZywgc3RhdGljX2Nhc3Q8Y29uc3QgQnVmZmVySW1wbCY+
KGluZGlyZWN0QnVmZmVyKS5iYWNraW5nKCksIGluZGlyZWN0T2Zmc2V0KTsKK30KKwordm9pZCBS
ZW5kZXJQYXNzRW5jb2RlckltcGw6OmRyYXdJbmRleGVkSW5kaXJlY3QoY29uc3QgQnVmZmVyJiBp
bmRpcmVjdEJ1ZmZlciwgU2l6ZTY0IGluZGlyZWN0T2Zmc2V0KQoreworICAgIHdncHVSZW5kZXJQ
YXNzRW5jb2RlckRyYXdJbmRleGVkSW5kaXJlY3QobV9iYWNraW5nLCBzdGF0aWNfY2FzdDxjb25z
dCBCdWZmZXJJbXBsJj4oaW5kaXJlY3RCdWZmZXIpLmJhY2tpbmcoKSwgaW5kaXJlY3RPZmZzZXQp
OworfQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6c2V0QmluZEdyb3VwKEluZGV4MzIg
aW5kZXgsIGNvbnN0IEJpbmRHcm91cCYgYmluZEdyb3VwLAorICAgIHN0ZDo6b3B0aW9uYWw8VmVj
dG9yPEJ1ZmZlckR5bmFtaWNPZmZzZXQ+PiYmIGR5bmFtaWNPZmZzZXRzKQoreworICAgIGF1dG8g
YmFja2luZ09mZnNldHMgPSBkeW5hbWljT2Zmc2V0cy52YWx1ZV9vcihWZWN0b3I8QnVmZmVyRHlu
YW1pY09mZnNldD4geyB9KTsKKyAgICB3Z3B1UmVuZGVyUGFzc0VuY29kZXJTZXRCaW5kR3JvdXAo
bV9iYWNraW5nLCBpbmRleCwgc3RhdGljX2Nhc3Q8Y29uc3QgQmluZEdyb3VwSW1wbCY+KGJpbmRH
cm91cCkuYmFja2luZygpLCBiYWNraW5nT2Zmc2V0cy5zaXplKCksIGJhY2tpbmdPZmZzZXRzLmRh
dGEoKSk7Cit9CisKK3ZvaWQgUmVuZGVyUGFzc0VuY29kZXJJbXBsOjpzZXRCaW5kR3JvdXAoSW5k
ZXgzMiBpbmRleCwgY29uc3QgQmluZEdyb3VwJiBiaW5kR3JvdXAsCisgICAgY29uc3QgdWludDMy
X3QqIGR5bmFtaWNPZmZzZXRzQXJyYXlCdWZmZXIsCisgICAgc2l6ZV90IGR5bmFtaWNPZmZzZXRz
QXJyYXlCdWZmZXJMZW5ndGgsCisgICAgU2l6ZTY0IGR5bmFtaWNPZmZzZXRzRGF0YVN0YXJ0LAor
ICAgIFNpemUzMiBkeW5hbWljT2Zmc2V0c0RhdGFMZW5ndGgpCit7CisgICAgVU5VU0VEX1BBUkFN
KGR5bmFtaWNPZmZzZXRzQXJyYXlCdWZmZXJMZW5ndGgpOworICAgIC8vIEZJWE1FOiBVc2UgY2hl
Y2tlZCBhbGdlYnJhLgorICAgIHdncHVSZW5kZXJQYXNzRW5jb2RlclNldEJpbmRHcm91cChtX2Jh
Y2tpbmcsIGluZGV4LCBzdGF0aWNfY2FzdDxjb25zdCBCaW5kR3JvdXBJbXBsJj4oYmluZEdyb3Vw
KS5iYWNraW5nKCksIGR5bmFtaWNPZmZzZXRzRGF0YUxlbmd0aCwgZHluYW1pY09mZnNldHNBcnJh
eUJ1ZmZlciArIGR5bmFtaWNPZmZzZXRzRGF0YVN0YXJ0KTsKK30KKwordm9pZCBSZW5kZXJQYXNz
RW5jb2RlckltcGw6OnB1c2hEZWJ1Z0dyb3VwKFN0cmluZyYmIGdyb3VwTGFiZWwpCit7CisgICAg
d2dwdVJlbmRlclBhc3NFbmNvZGVyUHVzaERlYnVnR3JvdXAobV9iYWNraW5nLCBncm91cExhYmVs
LnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6cG9wRGVi
dWdHcm91cCgpCit7CisgICAgd2dwdVJlbmRlclBhc3NFbmNvZGVyUG9wRGVidWdHcm91cChtX2Jh
Y2tpbmcpOworfQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6aW5zZXJ0RGVidWdNYXJr
ZXIoU3RyaW5nJiYgbWFya2VyTGFiZWwpCit7CisgICAgd2dwdVJlbmRlclBhc3NFbmNvZGVySW5z
ZXJ0RGVidWdNYXJrZXIobV9iYWNraW5nLCBtYXJrZXJMYWJlbC51dGY4KCkuZGF0YSgpKTsKK30K
Kwordm9pZCBSZW5kZXJQYXNzRW5jb2RlckltcGw6OnNldFZpZXdwb3J0KGZsb2F0IHgsIGZsb2F0
IHksCisgICAgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwKKyAgICBmbG9hdCBtaW5EZXB0aCwg
ZmxvYXQgbWF4RGVwdGgpCit7CisgICAgd2dwdVJlbmRlclBhc3NFbmNvZGVyU2V0Vmlld3BvcnQo
bV9iYWNraW5nLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBtaW5EZXB0aCwgbWF4RGVwdGgpOworfQor
Cit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6c2V0U2Npc3NvclJlY3QoSW50ZWdlckNvb3Jk
aW5hdGUgeCwgSW50ZWdlckNvb3JkaW5hdGUgeSwKKyAgICBJbnRlZ2VyQ29vcmRpbmF0ZSB3aWR0
aCwgSW50ZWdlckNvb3JkaW5hdGUgaGVpZ2h0KQoreworICAgIHdncHVSZW5kZXJQYXNzRW5jb2Rl
clNldFNjaXNzb3JSZWN0KG1fYmFja2luZywgeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3Zv
aWQgUmVuZGVyUGFzc0VuY29kZXJJbXBsOjpzZXRCbGVuZENvbnN0YW50KENvbG9yIGNvbG9yKQor
eworICAgIGF1dG8gYmFja2luZ0NvbG9yID0gY29udmVydFRvQmFja2luZyhjb2xvcik7CisKKyAg
ICB3Z3B1UmVuZGVyUGFzc0VuY29kZXJTZXRCbGVuZENvbnN0YW50KG1fYmFja2luZywgJmJhY2tp
bmdDb2xvcik7Cit9CisKK3ZvaWQgUmVuZGVyUGFzc0VuY29kZXJJbXBsOjpzZXRTdGVuY2lsUmVm
ZXJlbmNlKFN0ZW5jaWxWYWx1ZSBzdGVuY2lsVmFsdWUpCit7CisgICAgd2dwdVJlbmRlclBhc3NF
bmNvZGVyU2V0U3RlbmNpbFJlZmVyZW5jZShtX2JhY2tpbmcsIHN0ZW5jaWxWYWx1ZSk7Cit9CisK
K3ZvaWQgUmVuZGVyUGFzc0VuY29kZXJJbXBsOjpiZWdpbk9jY2x1c2lvblF1ZXJ5KFNpemUzMiBx
dWVyeUluZGV4KQoreworICAgIHdncHVSZW5kZXJQYXNzRW5jb2RlckJlZ2luT2NjbHVzaW9uUXVl
cnkobV9iYWNraW5nLCBxdWVyeUluZGV4KTsKK30KKwordm9pZCBSZW5kZXJQYXNzRW5jb2Rlcklt
cGw6OmVuZE9jY2x1c2lvblF1ZXJ5KCkKK3sKKyAgICB3Z3B1UmVuZGVyUGFzc0VuY29kZXJFbmRP
Y2NsdXNpb25RdWVyeShtX2JhY2tpbmcpOworfQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1w
bDo6YmVnaW5QaXBlbGluZVN0YXRpc3RpY3NRdWVyeShjb25zdCBRdWVyeVNldCYgcXVlcnlTZXQs
IFNpemUzMiBxdWVyeUluZGV4KQoreworICAgIHdncHVSZW5kZXJQYXNzRW5jb2RlckJlZ2luUGlw
ZWxpbmVTdGF0aXN0aWNzUXVlcnkobV9iYWNraW5nLCBzdGF0aWNfY2FzdDxjb25zdCBRdWVyeVNl
dEltcGwmPihxdWVyeVNldCkuYmFja2luZygpLCBxdWVyeUluZGV4KTsKK30KKwordm9pZCBSZW5k
ZXJQYXNzRW5jb2RlckltcGw6OmVuZFBpcGVsaW5lU3RhdGlzdGljc1F1ZXJ5KCkKK3sKKyAgICB3
Z3B1UmVuZGVyUGFzc0VuY29kZXJFbmRQaXBlbGluZVN0YXRpc3RpY3NRdWVyeShtX2JhY2tpbmcp
OworfQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6ZXhlY3V0ZUJ1bmRsZXMoVmVjdG9y
PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVuZGVyQnVuZGxlPj4mJiByZW5kZXJCdW5kbGVzKQor
eworICAgIFZlY3RvcjxXR1BVUmVuZGVyQnVuZGxlPiBiYWNraW5nQnVuZGxlczsKKyAgICBiYWNr
aW5nQnVuZGxlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHJlbmRlckJ1bmRsZXMuc2l6ZSgpKTsK
KyAgICBmb3IgKGF1dG8gcmVuZGVyQnVuZGxlIDogcmVuZGVyQnVuZGxlcykKKyAgICAgICAgYmFj
a2luZ0J1bmRsZXMudW5jaGVja2VkQXBwZW5kKHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlckJ1bmRs
ZUltcGwmPihyZW5kZXJCdW5kbGUuZ2V0KCkpLmJhY2tpbmcoKSk7CisKKyAgICB3Z3B1UmVuZGVy
UGFzc0VuY29kZXJFeGVjdXRlQnVuZGxlcyhtX2JhY2tpbmcsIGJhY2tpbmdCdW5kbGVzLnNpemUo
KSwgYmFja2luZ0J1bmRsZXMuZGF0YSgpKTsKK30KKwordm9pZCBSZW5kZXJQYXNzRW5jb2Rlcklt
cGw6OmVuZFBhc3MoKQoreworICAgIHdncHVSZW5kZXJQYXNzRW5jb2RlckVuZFBhc3MobV9iYWNr
aW5nKTsKK30KKwordm9pZCBSZW5kZXJQYXNzRW5jb2RlckltcGw6OnNldExhYmVsSW50ZXJuYWwo
Y29uc3QgU3RyaW5nJiBsYWJlbCkKK3sKKyAgICB3Z3B1UmVuZGVyUGFzc0VuY29kZXJTZXRMYWJl
bChtX2JhY2tpbmcsIGxhYmVsLnV0ZjgoKS5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQ
QUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFM
L3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJQYXNzRW5jb2RlckltcGwuaCBi
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVy
UGFzc0VuY29kZXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWJhZjFhZThjOTc1N2ZlMTIzOTEwOGU4ODQz
MWM0OTY4NWE1ZTcxMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwv
Z3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVyUGFzc0VuY29kZXJJbXBsLmgKQEAgLTAs
MCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYkdQ
VVJlbmRlclBhc3NFbmNvZGVyLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorCituYW1l
c3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBSZW5kZXJQYXNzRW5jb2Rl
ckltcGwgZmluYWwgOiBwdWJsaWMgUmVuZGVyUGFzc0VuY29kZXIgeworcHVibGljOgorICAgIHN0
YXRpYyBSZWY8UmVuZGVyUGFzc0VuY29kZXJJbXBsPiBjcmVhdGUoV0dQVVJlbmRlclBhc3NFbmNv
ZGVyIHJlbmRlclBhc3NFbmNvZGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgUmVuZGVyUGFzc0VuY29kZXJJbXBsKHJlbmRlclBhc3NFbmNvZGVyKSk7CisgICAgfQorCisg
ICAgflJlbmRlclBhc3NFbmNvZGVySW1wbCgpOworCisgICAgV0dQVVJlbmRlclBhc3NFbmNvZGVy
IGJhY2tpbmcoKSBjb25zdCB7IHJldHVybiBtX2JhY2tpbmc7IH0KKworcHJpdmF0ZToKKyAgICBS
ZW5kZXJQYXNzRW5jb2RlckltcGwoV0dQVVJlbmRlclBhc3NFbmNvZGVyKTsKKworICAgIFJlbmRl
clBhc3NFbmNvZGVySW1wbChjb25zdCBSZW5kZXJQYXNzRW5jb2RlckltcGwmKSA9IGRlbGV0ZTsK
KyAgICBSZW5kZXJQYXNzRW5jb2RlckltcGwoUmVuZGVyUGFzc0VuY29kZXJJbXBsJiYpID0gZGVs
ZXRlOworICAgIFJlbmRlclBhc3NFbmNvZGVySW1wbCYgb3BlcmF0b3I9KGNvbnN0IFJlbmRlclBh
c3NFbmNvZGVySW1wbCYpID0gZGVsZXRlOworICAgIFJlbmRlclBhc3NFbmNvZGVySW1wbCYgb3Bl
cmF0b3I9KFJlbmRlclBhc3NFbmNvZGVySW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIHZvaWQgc2V0
UGlwZWxpbmUoY29uc3QgUmVuZGVyUGlwZWxpbmUmKSBmaW5hbDsKKworICAgIHZvaWQgc2V0SW5k
ZXhCdWZmZXIoY29uc3QgQnVmZmVyJiwgSW5kZXhGb3JtYXQsIFNpemU2NCBvZmZzZXQsIHN0ZDo6
b3B0aW9uYWw8U2l6ZTY0PikgZmluYWw7CisgICAgdm9pZCBzZXRWZXJ0ZXhCdWZmZXIoSW5kZXgz
MiBzbG90LCBjb25zdCBCdWZmZXImLCBTaXplNjQgb2Zmc2V0LCBzdGQ6Om9wdGlvbmFsPFNpemU2
ND4pIGZpbmFsOworCisgICAgdm9pZCBkcmF3KFNpemUzMiB2ZXJ0ZXhDb3VudCwgU2l6ZTMyIGlu
c3RhbmNlQ291bnQsCisgICAgICAgIFNpemUzMiBmaXJzdFZlcnRleCwgU2l6ZTMyIGZpcnN0SW5z
dGFuY2UpIGZpbmFsOworICAgIHZvaWQgZHJhd0luZGV4ZWQoU2l6ZTMyIGluZGV4Q291bnQsIFNp
emUzMiBpbnN0YW5jZUNvdW50LAorICAgICAgICBTaXplMzIgZmlyc3RJbmRleCwKKyAgICAgICAg
U2lnbmVkT2Zmc2V0MzIgYmFzZVZlcnRleCwKKyAgICAgICAgU2l6ZTMyIGZpcnN0SW5zdGFuY2Up
IGZpbmFsOworCisgICAgdm9pZCBkcmF3SW5kaXJlY3QoY29uc3QgQnVmZmVyJiBpbmRpcmVjdEJ1
ZmZlciwgU2l6ZTY0IGluZGlyZWN0T2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdJbmRleGVk
SW5kaXJlY3QoY29uc3QgQnVmZmVyJiBpbmRpcmVjdEJ1ZmZlciwgU2l6ZTY0IGluZGlyZWN0T2Zm
c2V0KSBmaW5hbDsKKworICAgIHZvaWQgc2V0QmluZEdyb3VwKEluZGV4MzIsIGNvbnN0IEJpbmRH
cm91cCYsCisgICAgICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPEJ1ZmZlckR5bmFtaWNPZmZzZXQ+
PiYmIGR5bmFtaWNPZmZzZXRzKSBmaW5hbDsKKworICAgIHZvaWQgc2V0QmluZEdyb3VwKEluZGV4
MzIsIGNvbnN0IEJpbmRHcm91cCYsCisgICAgICAgIGNvbnN0IHVpbnQzMl90KiBkeW5hbWljT2Zm
c2V0c0FycmF5QnVmZmVyLAorICAgICAgICBzaXplX3QgZHluYW1pY09mZnNldHNBcnJheUJ1ZmZl
ckxlbmd0aCwKKyAgICAgICAgU2l6ZTY0IGR5bmFtaWNPZmZzZXRzRGF0YVN0YXJ0LAorICAgICAg
ICBTaXplMzIgZHluYW1pY09mZnNldHNEYXRhTGVuZ3RoKSBmaW5hbDsKKworICAgIHZvaWQgcHVz
aERlYnVnR3JvdXAoU3RyaW5nJiYgZ3JvdXBMYWJlbCkgZmluYWw7CisgICAgdm9pZCBwb3BEZWJ1
Z0dyb3VwKCkgZmluYWw7CisgICAgdm9pZCBpbnNlcnREZWJ1Z01hcmtlcihTdHJpbmcmJiBtYXJr
ZXJMYWJlbCkgZmluYWw7CisKKyAgICB2b2lkIHNldFZpZXdwb3J0KGZsb2F0IHgsIGZsb2F0IHks
CisgICAgICAgIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsCisgICAgICAgIGZsb2F0IG1pbkRl
cHRoLCBmbG9hdCBtYXhEZXB0aCkgZmluYWw7CisKKyAgICB2b2lkIHNldFNjaXNzb3JSZWN0KElu
dGVnZXJDb29yZGluYXRlIHgsIEludGVnZXJDb29yZGluYXRlIHksCisgICAgICAgIEludGVnZXJD
b29yZGluYXRlIHdpZHRoLCBJbnRlZ2VyQ29vcmRpbmF0ZSBoZWlnaHQpIGZpbmFsOworCisgICAg
dm9pZCBzZXRCbGVuZENvbnN0YW50KENvbG9yKSBmaW5hbDsKKyAgICB2b2lkIHNldFN0ZW5jaWxS
ZWZlcmVuY2UoU3RlbmNpbFZhbHVlKSBmaW5hbDsKKworICAgIHZvaWQgYmVnaW5PY2NsdXNpb25R
dWVyeShTaXplMzIgcXVlcnlJbmRleCkgZmluYWw7CisgICAgdm9pZCBlbmRPY2NsdXNpb25RdWVy
eSgpIGZpbmFsOworCisgICAgdm9pZCBiZWdpblBpcGVsaW5lU3RhdGlzdGljc1F1ZXJ5KGNvbnN0
IFF1ZXJ5U2V0JiwgU2l6ZTMyIHF1ZXJ5SW5kZXgpIGZpbmFsOworICAgIHZvaWQgZW5kUGlwZWxp
bmVTdGF0aXN0aWNzUXVlcnkoKSBmaW5hbDsKKworICAgIHZvaWQgZXhlY3V0ZUJ1bmRsZXMoVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVuZGVyQnVuZGxlPj4mJikgZmluYWw7CisgICAg
dm9pZCBlbmRQYXNzKCkgZmluYWw7CisKKyAgICB2b2lkIHNldExhYmVsSW50ZXJuYWwoY29uc3Qg
U3RyaW5nJikgZmluYWw7CisKKyAgICBXR1BVUmVuZGVyUGFzc0VuY29kZXIgbV9iYWNraW5nIHsg
bnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJH
UFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0lt
cGwvV2ViR1BVUmVuZGVyUGlwZWxpbmVJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwv
Z3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVyUGlwZWxpbmVJbXBsLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5kYzBkZDNlYTEyYTg5OTljNDJlNjNhYmIzNjIwMzJmYzNjMTdlMTc5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJH
UFVSZW5kZXJQaXBlbGluZUltcGwuY3BwCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViR1BVUmVuZGVyUGlwZWxpbmVJbXBsLmgi
CisKKyNpbmNsdWRlICJXZWJHUFVCaW5kR3JvdXBMYXlvdXRJbXBsLmgiCisjaW5jbHVkZSA8V2Vi
R1BVL1dlYkdQVUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgewor
CitSZW5kZXJQaXBlbGluZUltcGw6OlJlbmRlclBpcGVsaW5lSW1wbChXR1BVUmVuZGVyUGlwZWxp
bmUgcmVuZGVyUGlwZWxpbmUpCisgICAgOiBtX2JhY2tpbmcocmVuZGVyUGlwZWxpbmUpCit7Cit9
CisKK1JlbmRlclBpcGVsaW5lSW1wbDo6flJlbmRlclBpcGVsaW5lSW1wbCgpCit7CisgICAgd2dw
dVJlbmRlclBpcGVsaW5lUmVsZWFzZShtX2JhY2tpbmcpOworfQorCitSZWY8QmluZEdyb3VwTGF5
b3V0PiBSZW5kZXJQaXBlbGluZUltcGw6OmdldEJpbmRHcm91cExheW91dCh1aW50MzJfdCBpbmRl
eCkKK3sKKyAgICByZXR1cm4gQmluZEdyb3VwTGF5b3V0SW1wbDo6Y3JlYXRlKHdncHVSZW5kZXJQ
aXBlbGluZUdldEJpbmRHcm91cExheW91dChtX2JhY2tpbmcsIGluZGV4KSk7Cit9CisKK3ZvaWQg
UmVuZGVyUGlwZWxpbmVJbXBsOjpzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYgbGFiZWwp
Cit7CisgICAgd2dwdVJlbmRlclBpcGVsaW5lU2V0TGFiZWwobV9iYWNraW5nLCBsYWJlbC51dGY4
KCkuZGF0YSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJH
UFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0lt
cGwvV2ViR1BVUmVuZGVyUGlwZWxpbmVJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dy
YXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjllYWU1N2E2OWZiMTI1N2QzNjcyMjA1Y2Y3OTE5NmE5YTVhMGJmZWEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJl
bmRlclBpcGVsaW5lSW1wbC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIldlYkdQVVJlbmRlclBpcGVsaW5lLmgiCisjaW5jbHVkZSA8V2Vi
R1BVL1dlYkdQVS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitj
bGFzcyBSZW5kZXJQaXBlbGluZUltcGwgZmluYWwgOiBwdWJsaWMgUmVuZGVyUGlwZWxpbmUgewor
cHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVuZGVyUGlwZWxpbmVJbXBsPiBjcmVhdGUoV0dQVVJl
bmRlclBpcGVsaW5lIHJlbmRlclBpcGVsaW5lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgUmVuZGVyUGlwZWxpbmVJbXBsKHJlbmRlclBpcGVsaW5lKSk7CisgICAgfQorCisg
ICAgdmlydHVhbCB+UmVuZGVyUGlwZWxpbmVJbXBsKCk7CisKKyAgICBXR1BVUmVuZGVyUGlwZWxp
bmUgYmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgorICAg
IFJlbmRlclBpcGVsaW5lSW1wbChXR1BVUmVuZGVyUGlwZWxpbmUpOworCisgICAgUmVuZGVyUGlw
ZWxpbmVJbXBsKGNvbnN0IFJlbmRlclBpcGVsaW5lSW1wbCYpID0gZGVsZXRlOworICAgIFJlbmRl
clBpcGVsaW5lSW1wbChSZW5kZXJQaXBlbGluZUltcGwmJikgPSBkZWxldGU7CisgICAgUmVuZGVy
UGlwZWxpbmVJbXBsJiBvcGVyYXRvcj0oY29uc3QgUmVuZGVyUGlwZWxpbmVJbXBsJikgPSBkZWxl
dGU7CisgICAgUmVuZGVyUGlwZWxpbmVJbXBsJiBvcGVyYXRvcj0oUmVuZGVyUGlwZWxpbmVJbXBs
JiYpID0gZGVsZXRlOworCisgICAgUmVmPEJpbmRHcm91cExheW91dD4gZ2V0QmluZEdyb3VwTGF5
b3V0KHVpbnQzMl90IGluZGV4KSBmaW5hbDsKKworICAgIHZvaWQgc2V0TGFiZWxJbnRlcm5hbChj
b25zdCBTdHJpbmcmKSBmaW5hbDsKKworICAgIFdHUFVSZW5kZXJQaXBlbGluZSBtX2JhY2tpbmcg
eyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdl
YkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUv
SW1wbC9XZWJHUFVTYW1wbGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBo
aWNzL1dlYkdQVS9JbXBsL1dlYkdQVVNhbXBsZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MmNhYTcz
YTU3ZjAwMzI4YjkyNmZjMDFjMDA5MDJkZWMxYzA4YTRiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVTYW1wbGVySW1w
bC5jcHAKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXZWJHUFVTYW1wbGVySW1wbC5oIgorCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQ
VUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitTYW1wbGVy
SW1wbDo6U2FtcGxlckltcGwoV0dQVVNhbXBsZXIgc2FtcGxlcikKKyAgICA6IG1fYmFja2luZyhz
YW1wbGVyKQoreworfQorCitTYW1wbGVySW1wbDo6flNhbXBsZXJJbXBsKCkKK3sKKyAgICB3Z3B1
U2FtcGxlclJlbGVhc2UobV9iYWNraW5nKTsKK30KKwordm9pZCBTYW1wbGVySW1wbDo6c2V0TGFi
ZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAgIHdncHVTYW1wbGVyU2V0TGFi
ZWwobV9iYWNraW5nLCBsYWJlbC51dGY4KCkuZGF0YSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
UEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVU2FtcGxlckltcGwuaCBiL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVU2FtcGxlckltcGwuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40NTJkYzQ3MjA4NzRmNGY1NmJkZTRhNWY4M2NjM2FiZmY1YzJiYmVhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1w
bC9XZWJHUFVTYW1wbGVySW1wbC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIldlYkdQVVNhbXBsZXIuaCIKKyNpbmNsdWRlIDxXZWJHUFUv
V2ViR1BVLmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK2NsYXNz
IFNhbXBsZXJJbXBsIGZpbmFsIDogcHVibGljIFNhbXBsZXIgeworcHVibGljOgorICAgIHN0YXRp
YyBSZWY8U2FtcGxlckltcGw+IGNyZWF0ZShXR1BVU2FtcGxlciBzYW1wbGVyKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2FtcGxlckltcGwoc2FtcGxlcikpOworICAgIH0K
KworICAgIHZpcnR1YWwgflNhbXBsZXJJbXBsKCk7CisKKyAgICBXR1BVU2FtcGxlciBiYWNraW5n
KCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nOyB9CisKK3ByaXZhdGU6CisgICAgU2FtcGxlcklt
cGwoV0dQVVNhbXBsZXIpOworCisgICAgU2FtcGxlckltcGwoY29uc3QgU2FtcGxlckltcGwmKSA9
IGRlbGV0ZTsKKyAgICBTYW1wbGVySW1wbChTYW1wbGVySW1wbCYmKSA9IGRlbGV0ZTsKKyAgICBT
YW1wbGVySW1wbCYgb3BlcmF0b3I9KGNvbnN0IFNhbXBsZXJJbXBsJikgPSBkZWxldGU7CisgICAg
U2FtcGxlckltcGwmIG9wZXJhdG9yPShTYW1wbGVySW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIHZv
aWQgc2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5hbDsKKworICAgIFdHUFVTYW1w
bGVyIG1fYmFja2luZyB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAv
LyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dy
YXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVNoYWRlck1vZHVsZUltcGwuY3BwIGIvU291cmNlL1dl
YkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVTaGFkZXJNb2R1bGVJbXBs
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45MWI1Njk1NTQwZTdkNGVmZTRhZDBjZTIxOTQxMzc5NjZkNDJlMDVi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJH
UFUvSW1wbC9XZWJHUFVTaGFkZXJNb2R1bGVJbXBsLmNwcApAQCAtMCwwICsxLDU0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkdQVVNoYWRlck1vZHVs
ZUltcGwuaCIKKworI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFVFeHQuaD4KKworbmFtZXNwYWNlIFBB
TCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworU2hhZGVyTW9kdWxlSW1wbDo6U2hhZGVyTW9kdWxl
SW1wbChXR1BVU2hhZGVyTW9kdWxlIHNoYWRlck1vZHVsZSkKKyAgICA6IG1fYmFja2luZyhzaGFk
ZXJNb2R1bGUpCit7Cit9CisKK1NoYWRlck1vZHVsZUltcGw6On5TaGFkZXJNb2R1bGVJbXBsKCkK
K3sKKyAgICB3Z3B1U2hhZGVyTW9kdWxlUmVsZWFzZShtX2JhY2tpbmcpOworfQorCit2b2lkIFNo
YWRlck1vZHVsZUltcGw6OmNvbXBpbGF0aW9uSW5mbyhzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVmPENv
bXBpbGF0aW9uSW5mbz4mJik+JiYpCit7Cit9CisKK3ZvaWQgU2hhZGVyTW9kdWxlSW1wbDo6c2V0
TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAgIHdncHVTaGFkZXJNb2R1
bGVTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVsLnV0ZjgoKS5kYXRhKCkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVTaGFkZXJNb2R1bGVJbXBs
LmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVNo
YWRlck1vZHVsZUltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hY2VmMzYzOTFkMDJlNDBiZGRlNmU5NGYwOTEz
OTFmYWU0MWNhMzNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9n
cmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVTaGFkZXJNb2R1bGVJbXBsLmgKQEAgLTAsMCArMSw2
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVU2hhZGVy
TW9kdWxlLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorCituYW1lc3BhY2UgUEFMIHsK
K25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBTaGFkZXJNb2R1bGVJbXBsIGZpbmFsIDogcHVi
bGljIFNoYWRlck1vZHVsZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTaGFkZXJNb2R1bGVJ
bXBsPiBjcmVhdGUoV0dQVVNoYWRlck1vZHVsZSBzaGFkZXJNb2R1bGUpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFkZXJNb2R1bGVJbXBsKHNoYWRlck1vZHVsZSkpOwor
ICAgIH0KKworICAgIHZpcnR1YWwgflNoYWRlck1vZHVsZUltcGwoKTsKKworICAgIFdHUFVTaGFk
ZXJNb2R1bGUgYmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRl
OgorICAgIFNoYWRlck1vZHVsZUltcGwoV0dQVVNoYWRlck1vZHVsZSk7CisKKyAgICBTaGFkZXJN
b2R1bGVJbXBsKGNvbnN0IFNoYWRlck1vZHVsZUltcGwmKSA9IGRlbGV0ZTsKKyAgICBTaGFkZXJN
b2R1bGVJbXBsKFNoYWRlck1vZHVsZUltcGwmJikgPSBkZWxldGU7CisgICAgU2hhZGVyTW9kdWxl
SW1wbCYgb3BlcmF0b3I9KGNvbnN0IFNoYWRlck1vZHVsZUltcGwmKSA9IGRlbGV0ZTsKKyAgICBT
aGFkZXJNb2R1bGVJbXBsJiBvcGVyYXRvcj0oU2hhZGVyTW9kdWxlSW1wbCYmKSA9IGRlbGV0ZTsK
KworICAgIHZvaWQgY29tcGlsYXRpb25JbmZvKHN0ZDo6ZnVuY3Rpb248dm9pZChSZWY8Q29tcGls
YXRpb25JbmZvPiYmKT4mJikgZmluYWw7CisKKyAgICB2b2lkIHNldExhYmVsSW50ZXJuYWwoY29u
c3QgU3RyaW5nJikgZmluYWw7CisKKyAgICBXR1BVU2hhZGVyTW9kdWxlIG1fYmFja2luZyB7IG51
bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BV
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBs
L1dlYkdQVVRleHR1cmVJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3Mv
V2ViR1BVL0ltcGwvV2ViR1BVVGV4dHVyZUltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiNmY4MjFkOTQz
YmQ2NDRiN2I3OTAyMTY4MWYxNjA3NDNhNTA1ODEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVRleHR1cmVJbXBsLmNw
cApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldlYkdQVVRleHR1cmVJbXBsLmgiCisKKyNpbmNsdWRlICJXZWJHUFVDb252ZXJ0VG9C
YWNraW5nLmgiCisjaW5jbHVkZSAiV2ViR1BVVGV4dHVyZVZpZXcuaCIKKyNpbmNsdWRlICJXZWJH
UFVUZXh0dXJlVmlld0Rlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJlVmlld0lt
cGwuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVRXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgewor
bmFtZXNwYWNlIFdlYkdQVSB7CisKK1RleHR1cmVJbXBsOjpUZXh0dXJlSW1wbChXR1BVVGV4dHVy
ZSB0ZXh0dXJlLCBUZXh0dXJlRm9ybWF0IGZvcm1hdCwgVGV4dHVyZURpbWVuc2lvbiBkaW1lbnNp
b24pCisgICAgOiBtX2JhY2tpbmcodGV4dHVyZSkKKyAgICAsIG1fZm9ybWF0KGZvcm1hdCkKKyAg
ICAsIG1fZGltZW5zaW9uKGRpbWVuc2lvbikKK3sKK30KKworVGV4dHVyZUltcGw6On5UZXh0dXJl
SW1wbCgpCit7CisgICAgd2dwdVRleHR1cmVSZWxlYXNlKG1fYmFja2luZyk7Cit9CisKK1JlZjxU
ZXh0dXJlVmlldz4gVGV4dHVyZUltcGw6OmNyZWF0ZVZpZXcoY29uc3Qgc3RkOjpvcHRpb25hbDxU
ZXh0dXJlVmlld0Rlc2NyaXB0b3I+JiBkZXNjcmlwdG9yKSBjb25zdAoreworICAgIENTdHJpbmcg
bGFiZWwgPSBkZXNjcmlwdG9yID8gZGVzY3JpcHRvci0+bGFiZWwudXRmOCgpIDogQ1N0cmluZygi
Iik7CisKKyAgICBXR1BVVGV4dHVyZVZpZXdEZXNjcmlwdG9yIGJhY2tpbmdEZXNjcmlwdG9yIHsK
KyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgbGFiZWwuZGF0YSgpLAorICAgICAgICBkZXNjcmlw
dG9yICYmIGRlc2NyaXB0b3ItPmZvcm1hdCA/IGNvbnZlcnRUb0JhY2tpbmcoKmRlc2NyaXB0b3It
PmZvcm1hdCkgOiBjb252ZXJ0VG9CYWNraW5nKG1fZm9ybWF0KSwKKyAgICAgICAgKFsmXSAoKSAt
PiBXR1BVVGV4dHVyZVZpZXdEaW1lbnNpb24geworICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Ig
JiYgZGVzY3JpcHRvci0+ZGltZW5zaW9uKQorICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0
VG9CYWNraW5nKCpkZXNjcmlwdG9yLT5kaW1lbnNpb24pOworICAgICAgICAgICAgc3dpdGNoICht
X2RpbWVuc2lvbikgeworICAgICAgICAgICAgY2FzZSBUZXh0dXJlRGltZW5zaW9uOjpfMWQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlVmlld0RpbWVuc2lvbl8xRDsKKyAgICAg
ICAgICAgIGNhc2UgVGV4dHVyZURpbWVuc2lvbjo6XzJkOgorICAgICAgICAgICAgICAgIHJldHVy
biBXR1BVVGV4dHVyZVZpZXdEaW1lbnNpb25fMkQ7CisgICAgICAgICAgICBjYXNlIFRleHR1cmVE
aW1lbnNpb246Ol8zZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVWaWV3RGlt
ZW5zaW9uXzJEOworICAgICAgICAgICAgfQorICAgICAgICB9KSgpLAorICAgICAgICBkZXNjcmlw
dG9yID8gZGVzY3JpcHRvci0+YmFzZU1pcExldmVsIDogMCwKKyAgICAgICAgZGVzY3JpcHRvciAm
JiBkZXNjcmlwdG9yLT5taXBMZXZlbENvdW50ID8gKmRlc2NyaXB0b3ItPm1pcExldmVsQ291bnQg
OiBzdGF0aWNfY2FzdDx1aW50MzJfdD4oV0dQVV9NSVBfTEVWRUxfQ09VTlRfVU5ERUZJTkVEKSwK
KyAgICAgICAgZGVzY3JpcHRvciA/IGRlc2NyaXB0b3ItPmJhc2VBcnJheUxheWVyIDogMCwKKyAg
ICAgICAgZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLT5hcnJheUxheWVyQ291bnQgPyAqZGVzY3Jp
cHRvci0+YXJyYXlMYXllckNvdW50IDogc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFdHUFVfQVJSQVlf
TEFZRVJfQ09VTlRfVU5ERUZJTkVEKSwKKyAgICAgICAgZGVzY3JpcHRvciA/IGNvbnZlcnRUb0Jh
Y2tpbmcoZGVzY3JpcHRvci0+YXNwZWN0KSA6IFdHUFVUZXh0dXJlQXNwZWN0X0FsbCwKKyAgICB9
OworCisgICAgcmV0dXJuIFRleHR1cmVWaWV3SW1wbDo6Y3JlYXRlKHdncHVUZXh0dXJlQ3JlYXRl
VmlldyhtX2JhY2tpbmcsICZiYWNraW5nRGVzY3JpcHRvcikpOworfQorCit2b2lkIFRleHR1cmVJ
bXBsOjpkZXN0cm95KCkKK3sKKyAgICB3Z3B1VGV4dHVyZURlc3Ryb3kobV9iYWNraW5nKTsKK30K
Kwordm9pZCBUZXh0dXJlSW1wbDo6c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVs
KQoreworICAgIHdncHVUZXh0dXJlU2V0TGFiZWwobV9iYWNraW5nLCBsYWJlbC51dGY4KCkuZGF0
YSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2Vi
R1BVVGV4dHVyZUltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BV
L0ltcGwvV2ViR1BVVGV4dHVyZUltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNmU4ZDBiOGMwNDcyYTNkOGUy
Njg5ZmZjYmJjM2M0MjdiZWFmMWU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
UEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVUZXh0dXJlSW1wbC5oCkBAIC0wLDAg
KzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYkdQVUlu
dGVncmFsVHlwZXMuaCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJlLmgiCisjaW5jbHVkZSAiV2Vi
R1BVVGV4dHVyZURpbWVuc2lvbi5oIgorI2luY2x1ZGUgIldlYkdQVVRleHR1cmVGb3JtYXQuaCIK
KyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVLmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNl
IFdlYkdQVSB7CisKK2NsYXNzIFRleHR1cmVJbXBsIGZpbmFsIDogcHVibGljIFRleHR1cmUgewor
cHVibGljOgorICAgIHN0YXRpYyBSZWY8VGV4dHVyZUltcGw+IGNyZWF0ZShXR1BVVGV4dHVyZSB0
ZXh0dXJlLCBUZXh0dXJlRm9ybWF0IGZvcm1hdCwgVGV4dHVyZURpbWVuc2lvbiBkaW1lbnNpb24p
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUZXh0dXJlSW1wbCh0ZXh0dXJl
LCBmb3JtYXQsIGRpbWVuc2lvbikpOworICAgIH0KKworICAgIHZpcnR1YWwgflRleHR1cmVJbXBs
KCk7CisKKyAgICBXR1BVVGV4dHVyZSBiYWNraW5nKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5n
OyB9CisKK3ByaXZhdGU6CisgICAgVGV4dHVyZUltcGwoV0dQVVRleHR1cmUsIFRleHR1cmVGb3Jt
YXQsIFRleHR1cmVEaW1lbnNpb24pOworCisgICAgVGV4dHVyZUltcGwoY29uc3QgVGV4dHVyZUlt
cGwmKSA9IGRlbGV0ZTsKKyAgICBUZXh0dXJlSW1wbChUZXh0dXJlSW1wbCYmKSA9IGRlbGV0ZTsK
KyAgICBUZXh0dXJlSW1wbCYgb3BlcmF0b3I9KGNvbnN0IFRleHR1cmVJbXBsJikgPSBkZWxldGU7
CisgICAgVGV4dHVyZUltcGwmIG9wZXJhdG9yPShUZXh0dXJlSW1wbCYmKSA9IGRlbGV0ZTsKKwor
ICAgIFJlZjxUZXh0dXJlVmlldz4gY3JlYXRlVmlldyhjb25zdCBzdGQ6Om9wdGlvbmFsPFRleHR1
cmVWaWV3RGVzY3JpcHRvcj4mKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgZGVzdHJveSgpIGZp
bmFsOworCisgICAgdm9pZCBzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYpIGZpbmFsOwor
CisgICAgV0dQVVRleHR1cmUgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworICAgIFRleHR1cmVGb3Jt
YXQgbV9mb3JtYXQgeyBUZXh0dXJlRm9ybWF0OjpSZ2JhOHVub3JtIH07CisgICAgVGV4dHVyZURp
bWVuc2lvbiBtX2RpbWVuc2lvbiB7IFRleHR1cmVEaW1lbnNpb246Ol8yZCB9OworfTsKKworfSAv
LyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVVGV4dHVyZVZpZXdJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2Vi
R1BVVGV4dHVyZVZpZXdJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OTk5MDI4Mzc1ZWY1NTQxMGNjOGE0
MTE4MzYyZDVkNTZlZmMxMDUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFM
L3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVUZXh0dXJlVmlld0ltcGwuY3BwCkBAIC0w
LDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViR1BVVGV4dHVyZVZpZXdJbXBsLmgiCisKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVRXh0Lmg+
CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK1RleHR1cmVWaWV3SW1w
bDo6VGV4dHVyZVZpZXdJbXBsKFdHUFVUZXh0dXJlVmlldyB0ZXh0dXJlVmlldykKKyAgICA6IG1f
YmFja2luZyh0ZXh0dXJlVmlldykKK3sKK30KKworVGV4dHVyZVZpZXdJbXBsOjp+VGV4dHVyZVZp
ZXdJbXBsKCkKK3sKKyAgICB3Z3B1VGV4dHVyZVZpZXdSZWxlYXNlKG1fYmFja2luZyk7Cit9CisK
K3ZvaWQgVGV4dHVyZVZpZXdJbXBsOjpzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYgbGFi
ZWwpCit7CisgICAgd2dwdVRleHR1cmVWaWV3U2V0TGFiZWwobV9iYWNraW5nLCBsYWJlbC51dGY4
KCkuZGF0YSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJH
UFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0lt
cGwvV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBo
aWNzL1dlYkdQVS9JbXBsL1dlYkdQVVRleHR1cmVWaWV3SW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY1NDQ3
ZjI2NzFmMGUwNmUzNGMzY2JhZGYwMzY1MGI1YTI2NDljZDkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVRleHR1cmVW
aWV3SW1wbC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIldlYkdQVVRleHR1cmVWaWV3LmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5o
PgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBUZXh0dXJl
Vmlld0ltcGwgZmluYWwgOiBwdWJsaWMgVGV4dHVyZVZpZXcgeworcHVibGljOgorICAgIHN0YXRp
YyBSZWY8VGV4dHVyZVZpZXdJbXBsPiBjcmVhdGUoV0dQVVRleHR1cmVWaWV3IHRleHR1cmVWaWV3
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVGV4dHVyZVZpZXdJbXBsKHRl
eHR1cmVWaWV3KSk7CisgICAgfQorCisgICAgdmlydHVhbCB+VGV4dHVyZVZpZXdJbXBsKCk7CisK
KyAgICBXR1BVVGV4dHVyZVZpZXcgYmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsg
fQorCitwcml2YXRlOgorICAgIFRleHR1cmVWaWV3SW1wbChXR1BVVGV4dHVyZVZpZXcpOworCisg
ICAgVGV4dHVyZVZpZXdJbXBsKGNvbnN0IFRleHR1cmVWaWV3SW1wbCYpID0gZGVsZXRlOworICAg
IFRleHR1cmVWaWV3SW1wbChUZXh0dXJlVmlld0ltcGwmJikgPSBkZWxldGU7CisgICAgVGV4dHVy
ZVZpZXdJbXBsJiBvcGVyYXRvcj0oY29uc3QgVGV4dHVyZVZpZXdJbXBsJikgPSBkZWxldGU7Cisg
ICAgVGV4dHVyZVZpZXdJbXBsJiBvcGVyYXRvcj0oVGV4dHVyZVZpZXdJbXBsJiYpID0gZGVsZXRl
OworCisgICAgdm9pZCBzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYpIGZpbmFsOworCisg
ICAgV0dQVVRleHR1cmVWaWV3IG1fYmFja2luZyB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOTk4MTBlYjgyMDNjY2RhNmI1
YzllMzgxNjE0YjYyYmU2ZWYyYTFjYy4uYzRiODAwY2UzMGQyOTQzYzVkODRjYzJiMzczNzY5Zjg0
NDgzOTYzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtNjIzLDYgKzYyMyw3IEBACiAJCTFDMEFBMTZEMjE5NDBEQzgwMDg5Njgy
OSAvKiBTdHlsZUNvbG9yU2NoZW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQzBBQTE2QTIxOTQwREM3MDA4OTY4MjkgLyogU3R5bGVDb2xvclNjaGVt
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFD
MTJBQzJCMUVFNzc4QUUwMDc5RTBBMCAvKiBGb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzEyQUMy
OTFFRTc3OEFFMDA3OUUwQTAgLyogRm9udEZhbWlseVNwZWNpZmljYXRpb25Db3JlVGV4dC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFDMThEQTU5
MTgxQUY2QTUwMEM0RUYyMiAvKiBUZXh0UGFpbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMxOERBNTcxODFBRjZBNTAwQzRFRjIyIC8qIFRleHRQ
YWludGVyLmggKi87IH07CisJCTFDMTlFNkM1Mjc0MDY2Q0MwMDRCMTdCMCAvKiBXZWJHUFUuZnJh
bWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUMxOUU2QzMyNzQwNjZDQzAwNEIxN0IwIC8qIFdlYkdQVS5mcmFtZXdvcmsgKi87IH07CiAJCTFD
MjFFNTdEMTgzRUQxRkYwMDFDMjg5RCAvKiBJT1N1cmZhY2VQb29sLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzIxRTU3QjE4M0VEMUZGMDAxQzI4OUQg
LyogSU9TdXJmYWNlUG9vbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTFDMjRFRUE1MUM3MjlDRTQwMDgwRjhGQyAvKiBGb250RmFjZVNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMyNEVFQTMxQzcy
OUNFNDAwODBGOEZDIC8qIEZvbnRGYWNlU2V0LmggKi87IH07CiAJCTFDMjRFRUE5MUM3MkE3QjQw
MDgwRjhGQyAvKiBKU0ZvbnRGYWNlU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQzI0RUVBNzFDNzJBN0I0MDA4MEY4RkMgLyogSlNGb250RmFjZVNl
dC5oICovOyB9OwpAQCAtNzAzMiw2ICs3MDMzLDcgQEAKIAkJMUMxMkFDMkMxRUU3Nzk5NTAwNzlF
MEEwIC8qIEZvbnREZXNjcmlwdGlvbkNvY29hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRE
ZXNjcmlwdGlvbkNvY29hLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUMxOERB
NTYxODFBRjZBNTAwQzRFRjIyIC8qIFRleHRQYWludGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRQYWludGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUMxOERBNTcxODFBRjZBNTAwQzRFRjIyIC8qIFRleHRQYWludGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRQYWludGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTFDMTlFNkMzMjc0MDY2Q0MwMDRCMTdCMCAvKiBXZWJHUFUuZnJhbWV3
b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3Jh
cHBlci5mcmFtZXdvcms7IG5hbWUgPSBXZWJHUFUuZnJhbWV3b3JrOyBwYXRoID0gV2ViR1BVLmZy
YW1ld29yazsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJMUMyMUU1N0Ex
ODNFRDFGRjAwMUMyODlEIC8qIElPU3VyZmFjZVBvb2wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSU9TdXJmYWNlUG9vbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTFDMjFFNTdCMTgzRUQxRkYwMDFDMjg5RCAvKiBJT1N1cmZhY2VQb29sLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElPU3VyZmFjZVBvb2wuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUMyNEVFQTExQzcyOUIzMjAwODBGOEZDIC8qIEZvbnRGYWNl
U2V0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBGb250RmFjZVNldC5pZGw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzc2Miw2ICsxNzc2NCw3IEBACiAJCQkJMzc5OTE5QjIx
MjAwREU1MDAwRUEwNDFDIC8qIGxpYnouZHlsaWIgaW4gRnJhbWV3b3JrcyAqLywKIAkJCQlBODhB
RDUyRjA5NTI0QjkyMDAxREQxOTYgLyogUXVhcnR6Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3Jr
cyAqLywKIAkJCQk1RkUxRDI5MjE3OEZEMUYzMDAxQUEzQzMgLyogU2VjdXJpdHkuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8sCisJCQkJMUMxOUU2QzUyNzQwNjZDQzAwNEIxN0IwIC8qIFdlYkdQ
VS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE4NDE1LDYgKzE4NDE4LDcgQEAKIAkJ
CQk1NzRGNTVFMjIwNEYzQ0JGMDAyOTQ4QzYgLyogTG9jYWxBdXRoZW50aWNhdGlvbi5mcmFtZXdv
cmsgKi8sCiAJCQkJQTg1RDdBMkYwODc5RUJBOTAwNkE5MTcyIC8qIFF1YXJ0ekNvcmUuZnJhbWV3
b3JrICovLAogCQkJCTVGRTFEMjkxMTc4RkQxRjMwMDFBQTNDMyAvKiBTZWN1cml0eS5mcmFtZXdv
cmsgKi8sCisJCQkJMUMxOUU2QzMyNzQwNjZDQzAwNEIxN0IwIC8qIFdlYkdQVS5mcmFtZXdvcmsg
Ki8sCiAJCQkpOwogCQkJbmFtZSA9IEZyYW1ld29ya3M7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444218</attachid>
            <date>2021-11-15 00:59:10 -0800</date>
            <delta_ts>2021-11-15 01:28:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233106-20211115005909.patch</filename>
            <type>text/plain</type>
            <size>254467</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1Nzk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGUwOWY5NTk5ZDBmNWM4
N2EzNWIyNTRiZjUyNzNhZTZjMzZmZTI4YS4uZmI5OWIyYmQyYzkyNjE2YzMyNzQ5MGJjMmU2MmY1
MWVkMzMxYjA2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIxLTExLTE1ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkdQVV0g
W0NvY29hXSBDb25uZWN0IFdlYkNvcmUgJiBQQUwgdG8gV2ViR1BVLmZyYW1ld29yaworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzMTA2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGluayB3aXRoIFdlYkdQ
VS5mcmFtZXdvcmsuIFRoaXMgY2FuJ3QgYmUgbGFuZGVkIHlldCwgYmVjYXVzZSB3ZSBoYXZlbid0
IGZpbmlzaGVkCisgICAgICAgIGNvbmZpZ3VyaW5nIEFwcGxlJ3MgaW50ZXJuYWwgYnVpbGQgc3lz
dGVtIHlldC4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGVyZSBpcyBubyBiZWhh
dmlvciBjaGFuZ2UgKHlldCkuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisKIDIwMjEtMTEtMTQgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBs
ZS5jb20+CiAKICAgICAgICAgRmluZ2VycyBkb3duIG9uIHRoZSB0cmFja3BhZCBzaG91bGQgc3Rv
cCBhbiBhbmltYXRlZCBzY3JvbGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCmluZGV4IDNlZThmNWFkNGI3MWFi
NjhkYjllZDI2MTMwNTU5YzljOWI1NmZiOGIuLjE4MTI5OTM5MTlhZGYyOGE2YjQxZTc0YmY5YzAz
MGZlMGM4N2E2MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2NCBAQAorMjAyMS0x
MS0xNSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAg
IFtXZWJHUFVdIFtDb2NvYV0gQ29ubmVjdCBXZWJDb3JlICYgUEFMIHRvIFdlYkdQVS5mcmFtZXdv
cmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzEw
NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
YWRkcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBXZWJHUFUncyB2aXJ0dWFsIGludGVyZmFjZXMgb24g
dG9wIG9mIFdlYkdQVS5mcmFtZXdvcmsuCisgICAgICAgIFRoYXQgZnJhbWV3b3JrJ3MgaGVhZGVy
cyBhbG1vc3QgZXhhY3RseSBtYXRjaCB0aGUgV2ViR1BVIEFQSSwgc28gdGhlIGNvbm5lY3Rpb25z
IGFyZQorICAgICAgICBtb3N0bHkgbWVjaGFuaWNhbC4gVGhlcmUncyBqdXN0IGEgYnVuY2ggb2Yg
bWFyc2hhbGxpbmcgY29kZSB0byBjb252ZXJ0IGJldHdlZW4KKyAgICAgICAgZGVzY3JpcHRvciBh
bmQgc3RydWN0cyBmcm9tIFdlYkNvcmUncyBpbnRlcmZhY2UgdG8gV2ViR1BVLmZyYW1ld29yaydz
CisgICAgICAgIGRlc2NyaXB0b3JzL3N0cnVjdHMuCisKKyAgICAgICAgVGhpcyB1c2VzIHRoZSBz
YW1lICJjb252ZXJ0VG9CYWNraW5nIiBjb252ZW50aW9uLCB3aGVyZSBmdW5jdGlvbnMgdGhhdCBj
b252ZXJ0IGZyb20gdGhlCisgICAgICAgIGhpZ2hlci1sZXZlbCBXZWJDb3JlIHR5cGVzIHRvIHRo
ZSBsb3dlci1sZXZlbCBXZWJHUFUuZnJhbWV3b3JrIHR5cGVzIGFyZSBuYW1lZAorICAgICAgICAi
Y29udmVydFRvQmFja2luZygpIi4gVW5mb3J0dW5hdGVseSwgdGhlIFdlYkdQVSBBUEkgdGFrZXMg
bWFueSBvZiB0aGVzZSBzdHJ1Y3RzIGJ5CisgICAgICAgIG5vbi1jb25zdCByZWZlcmVuY2UsIGFu
ZCB0aGUgc3RydWN0cyBhcmUgbmVzdGVkIGJ5IG5vbi1jb25zdCByZWZlcmVuY2UsIHdoaWNoIG1l
YW5zIEkKKyAgICAgICAgY2FuJ3QganVzdCBoYXZlIHNpbXBsZSAxLWluLTEtb3V0IGNvbnZlcnRl
ciBmdW5jdGlvbnMgZm9yIGV2ZXJ5IHN0cnVjdCwgc2luY2UgdGhlCisgICAgICAgIGlubmVyIHN0
cnVjdHMgaGF2ZSB0byBiZSByZWZlcmVuY2VkIGJ5LXJlZmVyZW5jZSBhbmQgdGhlcmVmb3JlIGhh
dmUgdG8gYmUgaW4tc2NvcGUuIFRoaXMKKyAgICAgICAgbWVhbnMgdGhhdCB0aGUgc2ltcGxlIGVu
dW0gYW5kIGZsYWdzIHR5cGVzIHVzZSBjb252ZXJ0VG9CYWNraW5nKCksIGJ1dCBtb3N0IG9mIHRo
ZQorICAgICAgICBzdHJ1Y3RzIGhhdmUgdG8gYmUgY29udmVydGVkIGF0IHRoZWlyIHVzZSBzaXRl
LiBMdWNraWx5LCBhbG1vc3QgYWxsIG9mIHRoZXNlIHN0cnVjdHMKKyAgICAgICAgb25seSBoYXZl
IGEgc2luZ2xlIHVzZSBzaXRlLCBzbyB0aGVyZSBpc24ndCBtdWNoIGR1cGxpY2F0aW9uLgorCisg
ICAgICAgIEZvciBub3csIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgQ29jb2Etb25seSwgYmVjYXVz
ZSBpbiBvcmRlciBmb3IgdGhlc2UgY2FsbHMgdG8KKyAgICAgICAgV2ViR1BVLmZyYW1ld29yayB0
byBiZSBsZWdhbCwgV2ViQ29yZSBoYXMgdG8gbGluayB3aXRoIGFuIGltcGxlbWVudGF0aW9uIG9m
IHRob3NlCisgICAgICAgIGZ1bmN0aW9ucy4gVGhlIENvY29hIHBvcnRzIGFyZSB0aGUgb25seSBv
bmVzIHdoaWNoIGFjdHVhbGx5IGhhdmUgYW4gaW1wbGVtZW50YXRpb24gb2YKKyAgICAgICAgdGhv
c2UgZnVuY3Rpb25zLCBzbyB0aG9zZSBhcmUgdGhlIG9ubHkgcG9ydHMgd2hpY2ggY2FuIGFjdHVh
bGx5IGNvbXBpbGUgdGhpcyBjb2RlLiBJZgorICAgICAgICB0aGUgb3RoZXIgcG9ydHMgd2FudCB0
byBsaW5rIHdpdGggRGF3biBvciBXR1BVLCB0aGlzIGNvZGUgc2hvdWxkIGJlIChtb3N0bHkpIHVz
YWJsZQorICAgICAgICBvdXQtb2YtdGhlLWJveCBmb3IgdGhlbS4gSSBzYXkgIm1vc3RseSIgYmVj
YXVzZSB0aGUgaGVhZGVyIHRoYXQncyBzaGFyZWQgYmV0d2VlbiBEYXduLAorICAgICAgICBXR1BV
LCBhbmQgV2ViR1BVLmZyYW1ld29yayBpc24ndCBmaW5hbGl6ZWQgeWV0LiBBcyBzdWNoLCB0aGlz
IGltcGxlbWVudGF0aW9uIHJlbGllcyBvbgorICAgICAgICBmdW5jdGlvbnMgZnJvbSBXZWJHUFVF
eHQuaCwgd2hpY2ggaXMgYW4gYWRkaXRpb25hbCBoZWFkZXIgKHRoYXQgb25seSBleGlzdHMgaW4K
KyAgICAgICAgV2ViR1BVLmZyYW1ld29yaykgdGhhdCBhZGRzIHRoZSBtaXNzaW5nIHBpZWNlcy4K
KworICAgICAgICAqIFBBTC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBh
bC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVBZGFwdGVySW1wbC5jcHA6IEFkZGVkLgorICAg
ICAgICAoUEFMOjpXZWJHUFU6OmFkYXB0ZXJOYW1lKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpz
dXBwb3J0ZWRGZWF0dXJlcyk6CisgICAgICAgIChQQUw6OldlYkdQVTo6c3VwcG9ydGVkTGltaXRz
KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjppc0ZhbGxiYWNrQWRhcHRlcik6CisgICAgICAgIChQ
QUw6OldlYkdQVTo6QWRhcHRlckltcGw6OkFkYXB0ZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2Vi
R1BVOjpBZGFwdGVySW1wbDo6fkFkYXB0ZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpy
ZXF1ZXN0RGV2aWNlQ2FsbGJhY2spOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkFkYXB0ZXJJbXBs
OjpyZXF1ZXN0RGV2aWNlKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpBZGFwdGVySW1wbDo6cmVx
dWVzdERldmljZUNhbGxiYWNrKToKKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwv
V2ViR1BVQWRhcHRlckltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQ
VS9JbXBsL1dlYkdQVUJpbmRHcm91cEltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBBTDo6V2Vi
R1BVOjpCaW5kR3JvdXBJbXBsOjpCaW5kR3JvdXBJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BV
OjpCaW5kR3JvdXBJbXBsOjp+QmluZEdyb3VwSW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6
QmluZEdyb3VwSW1wbDo6c2V0TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNz
L1dlYkdQVS9JbXBsL1dlYkdQVUJpbmRHcm91cEltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFs
L2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJpbmRHcm91cExheW91dEltcGwuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFBBTDo6V2ViR1BVOjpCaW5kR3JvdXBMYXlvdXRJbXBsOjpCaW5kR3JvdXBM
YXlvdXRJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpCaW5kR3JvdXBMYXlvdXRJbXBsOjp+
QmluZEdyb3VwTGF5b3V0SW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6QmluZEdyb3VwTGF5
b3V0SW1wbDo6c2V0TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQ
VS9JbXBsL1dlYkdQVUJpbmRHcm91cExheW91dEltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFs
L2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJ1ZmZlckltcGwuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFBBTDo6V2ViR1BVOjpCdWZmZXJJbXBsOjpCdWZmZXJJbXBsKToKKyAgICAgICAgKFBBTDo6
V2ViR1BVOjpCdWZmZXJJbXBsOjp+QnVmZmVySW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6
bWFwQ2FsbGJhY2spOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkJ1ZmZlckltcGw6Om1hcEFzeW5j
KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpCdWZmZXJJbXBsOjptYXBDYWxsYmFjayk6CisgICAg
ICAgIChQQUw6OldlYkdQVTo6QnVmZmVySW1wbDo6Z2V0TWFwcGVkUmFuZ2UpOgorICAgICAgICAo
UEFMOjpXZWJHUFU6OkJ1ZmZlckltcGw6OnVubWFwKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpC
dWZmZXJJbXBsOjpkZXN0cm95KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpCdWZmZXJJbXBsOjpz
ZXRMYWJlbEludGVybmFsKToKKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2Vi
R1BVQnVmZmVySW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0lt
cGwvV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBBTDo6V2Vi
R1BVOjpDb21tYW5kQnVmZmVySW1wbDo6Q29tbWFuZEJ1ZmZlckltcGwpOgorICAgICAgICAoUEFM
OjpXZWJHUFU6OkNvbW1hbmRCdWZmZXJJbXBsOjp+Q29tbWFuZEJ1ZmZlckltcGwpOgorICAgICAg
ICAoUEFMOjpXZWJHUFU6OkNvbW1hbmRCdWZmZXJJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAg
ICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwu
aDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbW1h
bmRFbmNvZGVySW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbW1hbmRF
bmNvZGVySW1wbDo6Q29tbWFuZEVuY29kZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpD
b21tYW5kRW5jb2RlckltcGw6On5Db21tYW5kRW5jb2RlckltcGwpOgorICAgICAgICAoUEFMOjpX
ZWJHUFU6OkNvbW1hbmRFbmNvZGVySW1wbDo6YmVnaW5SZW5kZXJQYXNzKToKKyAgICAgICAgKFBB
TDo6V2ViR1BVOjpDb21tYW5kRW5jb2RlckltcGw6OmJlZ2luQ29tcHV0ZVBhc3MpOgorICAgICAg
ICAoUEFMOjpXZWJHUFU6OkNvbW1hbmRFbmNvZGVySW1wbDo6Y29weUJ1ZmZlclRvQnVmZmVyKToK
KyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21tYW5kRW5jb2RlckltcGw6OmNvcHlCdWZmZXJUb1Rl
eHR1cmUpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbW1hbmRFbmNvZGVySW1wbDo6Y29weVRl
eHR1cmVUb0J1ZmZlcik6CisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tbWFuZEVuY29kZXJJbXBs
Ojpjb3B5VGV4dHVyZVRvVGV4dHVyZSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tbWFuZEVu
Y29kZXJJbXBsOjpmaWxsQnVmZmVyKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21tYW5kRW5j
b2RlckltcGw6OnB1c2hEZWJ1Z0dyb3VwKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21tYW5k
RW5jb2RlckltcGw6OnBvcERlYnVnR3JvdXApOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbW1h
bmRFbmNvZGVySW1wbDo6aW5zZXJ0RGVidWdNYXJrZXIpOgorICAgICAgICAoUEFMOjpXZWJHUFU6
OkNvbW1hbmRFbmNvZGVySW1wbDo6d3JpdGVUaW1lc3RhbXApOgorICAgICAgICAoUEFMOjpXZWJH
UFU6OkNvbW1hbmRFbmNvZGVySW1wbDo6cmVzb2x2ZVF1ZXJ5U2V0KToKKyAgICAgICAgKFBBTDo6
V2ViR1BVOjpDb21tYW5kRW5jb2RlckltcGw6OmZpbmlzaCk6CisgICAgICAgIChQQUw6OldlYkdQ
VTo6Q29tbWFuZEVuY29kZXJJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAgICAgICAgKiBwYWwv
Z3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tbWFuZEVuY29kZXJJbXBsLmg6IEFkZGVkLgor
ICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb21wdXRlUGFzc0VuY29k
ZXJJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tcHV0ZVBhc3NFbmNv
ZGVySW1wbDo6Q29tcHV0ZVBhc3NFbmNvZGVySW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6
Q29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6fkNvbXB1dGVQYXNzRW5jb2RlckltcGwpOgorICAgICAg
ICAoUEFMOjpXZWJHUFU6OkNvbXB1dGVQYXNzRW5jb2RlckltcGw6OnNldFBpcGVsaW5lKToKKyAg
ICAgICAgKFBBTDo6V2ViR1BVOjpDb21wdXRlUGFzc0VuY29kZXJJbXBsOjpkaXNwYXRjaCk6Cisg
ICAgICAgIChQQUw6OldlYkdQVTo6Q29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6ZGlzcGF0Y2hJbmRp
cmVjdCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6YmVn
aW5QaXBlbGluZVN0YXRpc3RpY3NRdWVyeSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tcHV0
ZVBhc3NFbmNvZGVySW1wbDo6ZW5kUGlwZWxpbmVTdGF0aXN0aWNzUXVlcnkpOgorICAgICAgICAo
UEFMOjpXZWJHUFU6OkNvbXB1dGVQYXNzRW5jb2RlckltcGw6OmVuZFBhc3MpOgorICAgICAgICAo
UEFMOjpXZWJHUFU6OkNvbXB1dGVQYXNzRW5jb2RlckltcGw6OnNldEJpbmRHcm91cCk6CisgICAg
ICAgIChQQUw6OldlYkdQVTo6Q29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6cHVzaERlYnVnR3JvdXAp
OgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbXB1dGVQYXNzRW5jb2RlckltcGw6OnBvcERlYnVn
R3JvdXApOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbXB1dGVQYXNzRW5jb2RlckltcGw6Omlu
c2VydERlYnVnTWFya2VyKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21wdXRlUGFzc0VuY29k
ZXJJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BV
L0ltcGwvV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKiBw
YWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tcHV0ZVBpcGVsaW5lSW1wbC5jcHA6IEFk
ZGVkLgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbXB1dGVQaXBlbGluZUltcGw6OkNvbXB1dGVQ
aXBlbGluZUltcGwpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbXB1dGVQaXBlbGluZUltcGw6
On5Db21wdXRlUGlwZWxpbmVJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21wdXRlUGlw
ZWxpbmVJbXBsOjpnZXRCaW5kR3JvdXBMYXlvdXQpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNv
bXB1dGVQaXBlbGluZUltcGw6OnNldExhYmVsSW50ZXJuYWwpOgorICAgICAgICAqIHBhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBsLmg6IEFkZGVkLgorICAg
ICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb252ZXJ0VG9CYWNraW5nLmNw
cDogQWRkZWQuCisgICAgICAgIChQQUw6OldlYkdQVTo6Y29udmVydFRvQmFja2luZyk6CisgICAg
ICAgIChQQUw6OldlYkdQVTo6Y29udmVydEJ1ZmZlclVzYWdlRmxhZ3NUb0JhY2tpbmcpOgorICAg
ICAgICAoUEFMOjpXZWJHUFU6OmNvbnZlcnRDb2xvcldyaXRlRmxhZ3NUb0JhY2tpbmcpOgorICAg
ICAgICAoUEFMOjpXZWJHUFU6OmNvbnZlcnRNYXBNb2RlRmxhZ3NUb0JhY2tpbmcpOgorICAgICAg
ICAoUEFMOjpXZWJHUFU6OmNvbnZlcnRTaGFkZXJTdGFnZUZsYWdzVG9CYWNraW5nKToKKyAgICAg
ICAgKFBBTDo6V2ViR1BVOjpjb252ZXJ0VGV4dHVyZVVzYWdlRmxhZ3NUb0JhY2tpbmcpOgorICAg
ICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb252ZXJ0VG9CYWNraW5nLmg6
IEFkZGVkLgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVEZXZpY2VJ
bXBsLmNwcDogQWRkZWQuCisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6RGV2aWNl
SW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6fkRldmljZUltcGwpOgor
ICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmljZUltcGw6OmRlc3Ryb3kpOgorICAgICAgICAoUEFM
OjpXZWJHUFU6OkRldmljZUltcGw6OmNyZWF0ZUJ1ZmZlcik6CisgICAgICAgIChQQUw6OldlYkdQ
VTo6RGV2aWNlSW1wbDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2
aWNlSW1wbDo6Y3JlYXRlU2FtcGxlcik6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1w
bDo6aW1wb3J0RXh0ZXJuYWxUZXh0dXJlKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpEZXZpY2VJ
bXBsOjpjcmVhdGVCaW5kR3JvdXBMYXlvdXQpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmlj
ZUltcGw6OmNyZWF0ZVBpcGVsaW5lTGF5b3V0KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpEZXZp
Y2VJbXBsOjpjcmVhdGVCaW5kR3JvdXApOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmljZUlt
cGw6OmNyZWF0ZVNoYWRlck1vZHVsZSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6Y29udmVydFRv
QmFja2luZyk6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6Y3JlYXRlQ29tcHV0
ZVBpcGVsaW5lKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpEZXZpY2VJbXBsOjpjcmVhdGVSZW5k
ZXJQaXBlbGluZSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6Y3JlYXRlQ29tcHV0ZVBpcGVsaW5l
QXN5bmNDYWxsYmFjayk6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6Y3JlYXRl
Q29tcHV0ZVBpcGVsaW5lQXN5bmMpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmljZUltcGw6
OmNyZWF0ZUNvbXB1dGVQaXBlbGluZUFzeW5jQ2FsbGJhY2spOgorICAgICAgICAoUEFMOjpXZWJH
UFU6OmNyZWF0ZVJlbmRlclBpcGVsaW5lQXN5bmNDYWxsYmFjayk6CisgICAgICAgIChQQUw6Oldl
YkdQVTo6RGV2aWNlSW1wbDo6Y3JlYXRlUmVuZGVyUGlwZWxpbmVBc3luYyk6CisgICAgICAgIChQ
QUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6Y3JlYXRlUmVuZGVyUGlwZWxpbmVBc3luY0NhbGxiYWNr
KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpEZXZpY2VJbXBsOjpjcmVhdGVDb21tYW5kRW5jb2Rl
cik6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6Y3JlYXRlUmVuZGVyQnVuZGxl
RW5jb2Rlcik6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6Y3JlYXRlUXVlcnlT
ZXQpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmljZUltcGw6OnB1c2hFcnJvclNjb3BlKToK
KyAgICAgICAgKFBBTDo6V2ViR1BVOjpwb3BFcnJvclNjb3BlQ2FsbGJhY2spOgorICAgICAgICAo
UEFMOjpXZWJHUFU6OkRldmljZUltcGw6OnBvcEVycm9yU2NvcGUpOgorICAgICAgICAoUEFMOjpX
ZWJHUFU6OkRldmljZUltcGw6OnBvcEVycm9yU2NvcGVDYWxsYmFjayk6CisgICAgICAgIChQQUw6
OldlYkdQVTo6RGV2aWNlSW1wbDo6c2V0TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dy
YXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVURldmljZUltcGwuaDogQWRkZWQuCisgICAgICAgICog
cGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUV4dGVybmFsVGV4dHVyZUltcGwuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFBBTDo6V2ViR1BVOjpFeHRlcm5hbFRleHR1cmVJbXBsOjpFeHRlcm5h
bFRleHR1cmVJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpFeHRlcm5hbFRleHR1cmVJbXBs
Ojp+RXh0ZXJuYWxUZXh0dXJlSW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6RXh0ZXJuYWxU
ZXh0dXJlSW1wbDo6c2V0TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dl
YkdQVS9JbXBsL1dlYkdQVUV4dGVybmFsVGV4dHVyZUltcGwuaDogQWRkZWQuCisgICAgICAgICog
cGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFBBTDo6V2ViR1BVOjpHUFVJbXBsOjpHUFVJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpH
UFVJbXBsOjp+R1BVSW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6cmVxdWVzdEFkYXB0ZXJD
YWxsYmFjayk6CisgICAgICAgIChQQUw6OldlYkdQVTo6R1BVSW1wbDo6cmVxdWVzdEFkYXB0ZXIp
OgorICAgICAgICAoUEFMOjpXZWJHUFU6OkdQVUltcGw6OnJlcXVlc3RBZGFwdGVyQ2FsbGJhY2sp
OgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVJbXBsLmg6IEFkZGVk
LgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVQaXBlbGluZUxheW91
dEltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBBTDo6V2ViR1BVOjpQaXBlbGluZUxheW91dElt
cGw6OlBpcGVsaW5lTGF5b3V0SW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UGlwZWxpbmVM
YXlvdXRJbXBsOjp+UGlwZWxpbmVMYXlvdXRJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpQ
aXBlbGluZUxheW91dEltcGw6OnNldExhYmVsSW50ZXJuYWwpOgorICAgICAgICAqIHBhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVQaXBlbGluZUxheW91dEltcGwuaDogQWRkZWQuCisgICAg
ICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVF1ZXJ5U2V0SW1wbC5jcHA6IEFk
ZGVkLgorICAgICAgICAoUEFMOjpXZWJHUFU6OlF1ZXJ5U2V0SW1wbDo6UXVlcnlTZXRJbXBsKToK
KyAgICAgICAgKFBBTDo6V2ViR1BVOjpRdWVyeVNldEltcGw6On5RdWVyeVNldEltcGwpOgorICAg
ICAgICAoUEFMOjpXZWJHUFU6OlF1ZXJ5U2V0SW1wbDo6ZGVzdHJveSk6CisgICAgICAgIChQQUw6
OldlYkdQVTo6UXVlcnlTZXRJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAgICAgICAgKiBwYWwv
Z3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUXVlcnlTZXRJbXBsLmg6IEFkZGVkLgorICAgICAg
ICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVRdWV1ZUltcGwuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFBBTDo6V2ViR1BVOjpRdWV1ZUltcGw6OlF1ZXVlSW1wbCk6CisgICAgICAgIChQ
QUw6OldlYkdQVTo6UXVldWVJbXBsOjp+UXVldWVJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BV
OjpRdWV1ZUltcGw6OnN1Ym1pdCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6b25TdWJtaXR0ZWRX
b3JrRG9uZUNhbGxiYWNrKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpRdWV1ZUltcGw6Om9uU3Vi
bWl0dGVkV29ya0RvbmUpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlF1ZXVlSW1wbDo6b25TdWJt
aXR0ZWRXb3JrRG9uZUNhbGxiYWNrKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpRdWV1ZUltcGw6
OndyaXRlQnVmZmVyKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpRdWV1ZUltcGw6OndyaXRlVGV4
dHVyZSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UXVldWVJbXBsOjpjb3B5RXh0ZXJuYWxJbWFn
ZVRvVGV4dHVyZSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UXVldWVJbXBsOjpzZXRMYWJlbElu
dGVybmFsKToKKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUXVldWVJ
bXBsLmg6IEFkZGVkLgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVS
ZW5kZXJCdW5kbGVFbmNvZGVySW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoUEFMOjpXZWJHUFU6
OlJlbmRlckJ1bmRsZUVuY29kZXJJbXBsOjpSZW5kZXJCdW5kbGVFbmNvZGVySW1wbCk6CisgICAg
ICAgIChQQUw6OldlYkdQVTo6UmVuZGVyQnVuZGxlRW5jb2RlckltcGw6On5SZW5kZXJCdW5kbGVF
bmNvZGVySW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UmVuZGVyQnVuZGxlRW5jb2Rlcklt
cGw6OnNldFBpcGVsaW5lKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVFbmNv
ZGVySW1wbDo6c2V0SW5kZXhCdWZmZXIpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlckJ1
bmRsZUVuY29kZXJJbXBsOjpzZXRWZXJ0ZXhCdWZmZXIpOgorICAgICAgICAoUEFMOjpXZWJHUFU6
OlJlbmRlckJ1bmRsZUVuY29kZXJJbXBsOjpkcmF3KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpS
ZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6ZHJhd0luZGV4ZWQpOgorICAgICAgICAoUEFMOjpXZWJH
UFU6OlJlbmRlckJ1bmRsZUVuY29kZXJJbXBsOjpkcmF3SW5kaXJlY3QpOgorICAgICAgICAoUEFM
OjpXZWJHUFU6OlJlbmRlckJ1bmRsZUVuY29kZXJJbXBsOjpkcmF3SW5kZXhlZEluZGlyZWN0KToK
KyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6c2V0QmluZEdy
b3VwKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6cHVz
aERlYnVnR3JvdXApOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlckJ1bmRsZUVuY29kZXJJ
bXBsOjpwb3BEZWJ1Z0dyb3VwKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVF
bmNvZGVySW1wbDo6aW5zZXJ0RGVidWdNYXJrZXIpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJl
bmRlckJ1bmRsZUVuY29kZXJJbXBsOjpmaW5pc2gpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJl
bmRlckJ1bmRsZUVuY29kZXJJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAgICAgICAgKiBwYWwv
Z3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVyQnVuZGxlRW5jb2RlckltcGwuaDogQWRk
ZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlckJ1bmRs
ZUltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVJbXBs
OjpSZW5kZXJCdW5kbGVJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVJ
bXBsOjp+UmVuZGVyQnVuZGxlSW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UmVuZGVyQnVu
ZGxlSW1wbDo6c2V0TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQ
VS9JbXBsL1dlYkdQVVJlbmRlckJ1bmRsZUltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dy
YXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlclBhc3NFbmNvZGVySW1wbC5jcHA6IEFkZGVk
LgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6UmVuZGVyUGFz
c0VuY29kZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2Rlcklt
cGw6On5SZW5kZXJQYXNzRW5jb2RlckltcGwpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRl
clBhc3NFbmNvZGVySW1wbDo6c2V0UGlwZWxpbmUpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJl
bmRlclBhc3NFbmNvZGVySW1wbDo6c2V0SW5kZXhCdWZmZXIpOgorICAgICAgICAoUEFMOjpXZWJH
UFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6c2V0VmVydGV4QnVmZmVyKToKKyAgICAgICAgKFBB
TDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6OmRyYXcpOgorICAgICAgICAoUEFMOjpX
ZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6ZHJhd0luZGV4ZWQpOgorICAgICAgICAoUEFM
OjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6ZHJhd0luZGlyZWN0KToKKyAgICAgICAg
KFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6OmRyYXdJbmRleGVkSW5kaXJlY3Qp
OgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6c2V0QmluZEdy
b3VwKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6OnB1c2hE
ZWJ1Z0dyb3VwKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6
OnBvcERlYnVnR3JvdXApOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVy
SW1wbDo6aW5zZXJ0RGVidWdNYXJrZXIpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBh
c3NFbmNvZGVySW1wbDo6c2V0Vmlld3BvcnQpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRl
clBhc3NFbmNvZGVySW1wbDo6c2V0U2Npc3NvclJlY3QpOgorICAgICAgICAoUEFMOjpXZWJHUFU6
OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6c2V0QmxlbmRDb25zdGFudCk6CisgICAgICAgIChQQUw6
OldlYkdQVTo6UmVuZGVyUGFzc0VuY29kZXJJbXBsOjpzZXRTdGVuY2lsUmVmZXJlbmNlKToKKyAg
ICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6OmJlZ2luT2NjbHVzaW9u
UXVlcnkpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6ZW5k
T2NjbHVzaW9uUXVlcnkpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVy
SW1wbDo6YmVnaW5QaXBlbGluZVN0YXRpc3RpY3NRdWVyeSk6CisgICAgICAgIChQQUw6OldlYkdQ
VTo6UmVuZGVyUGFzc0VuY29kZXJJbXBsOjplbmRQaXBlbGluZVN0YXRpc3RpY3NRdWVyeSk6Cisg
ICAgICAgIChQQUw6OldlYkdQVTo6UmVuZGVyUGFzc0VuY29kZXJJbXBsOjpleGVjdXRlQnVuZGxl
cyk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UmVuZGVyUGFzc0VuY29kZXJJbXBsOjplbmRQYXNz
KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6OnNldExhYmVs
SW50ZXJuYWwpOgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5k
ZXJQYXNzRW5jb2RlckltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQ
VS9JbXBsL1dlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoUEFM
OjpXZWJHUFU6OlJlbmRlclBpcGVsaW5lSW1wbDo6UmVuZGVyUGlwZWxpbmVJbXBsKToKKyAgICAg
ICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQaXBlbGluZUltcGw6On5SZW5kZXJQaXBlbGluZUltcGwp
OgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBpcGVsaW5lSW1wbDo6Z2V0QmluZEdyb3Vw
TGF5b3V0KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQaXBlbGluZUltcGw6OnNldExh
YmVsSW50ZXJuYWwpOgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVS
ZW5kZXJQaXBlbGluZUltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQ
VS9JbXBsL1dlYkdQVVNhbXBsZXJJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChQQUw6OldlYkdQ
VTo6U2FtcGxlckltcGw6OlNhbXBsZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpTYW1w
bGVySW1wbDo6flNhbXBsZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpTYW1wbGVySW1w
bDo6c2V0TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBs
L1dlYkdQVVNhbXBsZXJJbXBsLmg6IEFkZGVkLgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJH
UFUvSW1wbC9XZWJHUFVTaGFkZXJNb2R1bGVJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChQQUw6
OldlYkdQVTo6U2hhZGVyTW9kdWxlSW1wbDo6U2hhZGVyTW9kdWxlSW1wbCk6CisgICAgICAgIChQ
QUw6OldlYkdQVTo6U2hhZGVyTW9kdWxlSW1wbDo6flNoYWRlck1vZHVsZUltcGwpOgorICAgICAg
ICAoUEFMOjpXZWJHUFU6OlNoYWRlck1vZHVsZUltcGw6OmNvbXBpbGF0aW9uSW5mbyk6CisgICAg
ICAgIChQQUw6OldlYkdQVTo6U2hhZGVyTW9kdWxlSW1wbDo6c2V0TGFiZWxJbnRlcm5hbCk6Cisg
ICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVNoYWRlck1vZHVsZUltcGwu
aDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVRleHR1
cmVJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChQQUw6OldlYkdQVTo6VGV4dHVyZUltcGw6OlRl
eHR1cmVJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpUZXh0dXJlSW1wbDo6flRleHR1cmVJ
bXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpUZXh0dXJlSW1wbDo6Y3JlYXRlVmlldyBjb25z
dCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6VGV4dHVyZUltcGw6OmRlc3Ryb3kpOgorICAgICAg
ICAoUEFMOjpXZWJHUFU6OlRleHR1cmVJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAgICAgICAg
KiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVVGV4dHVyZUltcGwuaDogQWRkZWQuCisg
ICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVRleHR1cmVWaWV3SW1wbC5j
cHA6IEFkZGVkLgorICAgICAgICAoUEFMOjpXZWJHUFU6OlRleHR1cmVWaWV3SW1wbDo6VGV4dHVy
ZVZpZXdJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpUZXh0dXJlVmlld0ltcGw6On5UZXh0
dXJlVmlld0ltcGwpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlRleHR1cmVWaWV3SW1wbDo6c2V0
TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQ
VVRleHR1cmVWaWV3SW1wbC5oOiBBZGRlZC4KKwogMjAyMS0xMS0xNCAgTXlsZXMgQy4gTWF4Zmll
bGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJHUFVdIFZhcmlvdXMgbWVj
aGFuaWNhbCBjbGVhbnVwcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGUxODU0MjVlMDJlYzY2OTA3NDRlZDEyM2UwOGIyM2UyZTUw
NDIxYjIuLjUyYWI3M2JjYjA0ZWRhOWNiZGZhZTE5OWY2YTliODFjZWExNWVjZTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9QQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEw
OSw2ICsxMDksMjkgQEAKIAkJMUMwOUQwNTMxRTMxQzQ0MTAwNzI1RjE4IC8qIENyeXB0b0RpZ2Vz
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMwOUQw
NTIxRTMxQzQ0MTAwNzI1RjE4IC8qIENyeXB0b0RpZ2VzdC5oICovOyB9OwogCQkxQzA5RDA1NjFF
MzFDNDY1MDA3MjVGMTggLyogQ3J5cHRvRGlnZXN0Q29tbW9uQ3J5cHRvLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMDlEMDU1MUUzMUM0NjUwMDcy
NUYxOCAvKiBDcnlwdG9EaWdlc3RDb21tb25DcnlwdG8uY3BwICovOyB9OwogCQkxQzA5RDA1ODFF
MzFDNTdFMDA3MjVGMTggLyogY29uZmlnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQzA5RDA1NzFFMzFDNTdFMDA3MjVGMTggLyogY29uZmlnLmggKi87
IH07CisJCTFDMTlFNjQ0MjczRjNFNUQwMDRCMTdCMCAvKiBXZWJHUFVJbXBsLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNjQyMjczRjNFNUQw
MDRCMTdCMCAvKiBXZWJHUFVJbXBsLmNwcCAqLzsgfTsKKwkJMUMxOUU2NDgyNzNGM0Y4MjAwNEIx
N0IwIC8qIFdlYkdQVUFkYXB0ZXJJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNjQ2MjczRjNGODIwMDRCMTdCMCAvKiBXZWJHUFVBZGFw
dGVySW1wbC5jcHAgKi87IH07CisJCTFDMTlFNjRDMjczRjNGOTkwMDRCMTdCMCAvKiBXZWJHUFVC
aW5kR3JvdXBJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFDMTlFNjRBMjczRjNGOTkwMDRCMTdCMCAvKiBXZWJHUFVCaW5kR3JvdXBJbXBsLmNw
cCAqLzsgfTsKKwkJMUMxOUU2NTAyNzNGM0ZBNTAwNEIxN0IwIC8qIFdlYkdQVUJpbmRHcm91cExh
eW91dEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUMxOUU2NEUyNzNGM0ZBNTAwNEIxN0IwIC8qIFdlYkdQVUJpbmRHcm91cExheW91dEltcGwu
Y3BwICovOyB9OworCQkxQzE5RTY1NDI3M0YzRkIxMDA0QjE3QjAgLyogV2ViR1BVQnVmZmVySW1w
bC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5
RTY1MjI3M0YzRkIxMDA0QjE3QjAgLyogV2ViR1BVQnVmZmVySW1wbC5jcHAgKi87IH07CisJCTFD
MTlFNjU4MjczRjNGQzAwMDRCMTdCMCAvKiBXZWJHUFVDb21tYW5kQnVmZmVySW1wbC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5RTY1NjI3M0Yz
RkMwMDA0QjE3QjAgLyogV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwuY3BwICovOyB9OworCQkxQzE5
RTY1QzI3M0YzRkQyMDA0QjE3QjAgLyogV2ViR1BVQ29tbWFuZEVuY29kZXJJbXBsLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNjVBMjczRjNG
RDIwMDRCMTdCMCAvKiBXZWJHUFVDb21tYW5kRW5jb2RlckltcGwuY3BwICovOyB9OworCQkxQzE5
RTY2MDI3M0YzRkUyMDA0QjE3QjAgLyogV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5RTY1RTI3
M0YzRkUyMDA0QjE3QjAgLyogV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5jcHAgKi87IH07
CisJCTFDMTlFNjY0MjczRjNGRUUwMDRCMTdCMCAvKiBXZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBs
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlF
NjYyMjczRjNGRUUwMDRCMTdCMCAvKiBXZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBsLmNwcCAqLzsg
fTsKKwkJMUMxOUU2NjgyNzNGM0ZGQTAwNEIxN0IwIC8qIFdlYkdQVURldmljZUltcGwuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMxOUU2NjYyNzNG
M0ZGQTAwNEIxN0IwIC8qIFdlYkdQVURldmljZUltcGwuY3BwICovOyB9OworCQkxQzE5RTY3MDI3
M0Y0MDE0MDA0QjE3QjAgLyogV2ViR1BVUGlwZWxpbmVMYXlvdXRJbXBsLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNjZFMjczRjQwMTQwMDRC
MTdCMCAvKiBXZWJHUFVQaXBlbGluZUxheW91dEltcGwuY3BwICovOyB9OworCQkxQzE5RTY3NDI3
M0Y0MDIwMDA0QjE3QjAgLyogV2ViR1BVUXVlcnlTZXRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNjcyMjczRjQwMjAwMDRCMTdCMCAv
KiBXZWJHUFVRdWVyeVNldEltcGwuY3BwICovOyB9OworCQkxQzE5RTY3ODI3M0Y0MDJCMDA0QjE3
QjAgLyogV2ViR1BVUXVldWVJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFDMTlFNjc2MjczRjQwMkIwMDRCMTdCMCAvKiBXZWJHUFVRdWV1ZUlt
cGwuY3BwICovOyB9OworCQkxQzE5RTY3QzI3M0Y0MDNBMDA0QjE3QjAgLyogV2ViR1BVUmVuZGVy
QnVuZGxlSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQzE5RTY3QTI3M0Y0MDNBMDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyQnVuZGxlSW1wbC5j
cHAgKi87IH07CisJCTFDMTlFNjgwMjczRjQwNDQwMDRCMTdCMCAvKiBXZWJHUFVSZW5kZXJCdW5k
bGVFbmNvZGVySW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQzE5RTY3RTI3M0Y0MDQ0MDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyQnVuZGxlRW5j
b2RlckltcGwuY3BwICovOyB9OworCQkxQzE5RTY4NDI3M0Y0MDUwMDA0QjE3QjAgLyogV2ViR1BV
UmVuZGVyUGFzc0VuY29kZXJJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFDMTlFNjgyMjczRjQwNTAwMDRCMTdCMCAvKiBXZWJHUFVSZW5kZXJQ
YXNzRW5jb2RlckltcGwuY3BwICovOyB9OworCQkxQzE5RTY4ODI3M0Y0MDVEMDA0QjE3QjAgLyog
V2ViR1BVUmVuZGVyUGlwZWxpbmVJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNjg2MjczRjQwNUQwMDRCMTdCMCAvKiBXZWJHUFVSZW5k
ZXJQaXBlbGluZUltcGwuY3BwICovOyB9OworCQkxQzE5RTY4QzI3M0Y0MDY5MDA0QjE3QjAgLyog
V2ViR1BVU2FtcGxlckltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUMxOUU2OEEyNzNGNDA2OTAwNEIxN0IwIC8qIFdlYkdQVVNhbXBsZXJJbXBs
LmNwcCAqLzsgfTsKKwkJMUMxOUU2OTAyNzNGNDA3MjAwNEIxN0IwIC8qIFdlYkdQVVNoYWRlck1v
ZHVsZUltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUMxOUU2OEUyNzNGNDA3MTAwNEIxN0IwIC8qIFdlYkdQVVNoYWRlck1vZHVsZUltcGwuY3Bw
ICovOyB9OworCQkxQzE5RTY5NDI3M0Y0MDdEMDA0QjE3QjAgLyogV2ViR1BVVGV4dHVyZUltcGwu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMxOUU2
OTIyNzNGNDA3RDAwNEIxN0IwIC8qIFdlYkdQVVRleHR1cmVJbXBsLmNwcCAqLzsgfTsKKwkJMUMx
OUU2OTgyNzNGNDA4QjAwNEIxN0IwIC8qIFdlYkdQVVRleHR1cmVWaWV3SW1wbC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5RTY5NjI3M0Y0MDhC
MDA0QjE3QjAgLyogV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmNwcCAqLzsgfTsKKwkJMUMxOUU2QjUy
NzNGODVBRjAwNEIxN0IwIC8qIFdlYkdQVUNvbnZlcnRUb0JhY2tpbmcuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMxOUU2QjQyNzNGODVBRjAwNEIx
N0IwIC8qIFdlYkdQVUNvbnZlcnRUb0JhY2tpbmcuY3BwICovOyB9OworCQkxQzE5RTZCQTI3NDA1
RTMyMDA0QjE3QjAgLyogV2ViR1BVRXh0ZXJuYWxUZXh0dXJlSW1wbC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5RTZCOTI3NDA1RTMyMDA0QjE3
QjAgLyogV2ViR1BVRXh0ZXJuYWxUZXh0dXJlSW1wbC5jcHAgKi87IH07CiAJCTFDNDg3NkQ4MUY4
RDdGNEUwMENDRUVCRCAvKiBMb2dnaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFDNDg3NkQ2MUY4RDdGNEUwMENDRUVCRCAvKiBMb2dnaW5nLmNw
cCAqLzsgfTsKIAkJMUM0ODc2RDkxRjhEN0Y0RTAwQ0NFRUJEIC8qIExvZ2dpbmcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDNDg3NkQ3MUY4RDdGNEUw
MENDRUVCRCAvKiBMb2dnaW5nLmggKi87IH07CiAJCTFDNzdDOEM5MjVENzk3MjAwMDYzNUUwQyAv
KiBDb3JlVGV4dFNvZnRMaW5rLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFDNzdDOEM3MjVENzk3MjAwMDYzNUUwQyAvKiBDb3JlVGV4dFNvZnRMaW5r
LmNwcCAqLzsgfTsKQEAgLTQ1OSw2ICs0ODIsNTIgQEAKIAkJMUMwOUQwNUQxRTMxQzc3QTAwNzI1
RjE4IC8qIFBBTC54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBQQUwu
eGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDMDlEMDYyMUUzMUVDMjgw
MDcyNUYxOCAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmln
OyBwYXRoID0gRGVidWdSZWxlYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQzA5RDA2MzFFMzFFQzMxMDA3MjVGMTggLyogQmFzZS54Y2NvbmZpZyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQueGNjb25maWc7IHBhdGggPSBCYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxQzE5RTY0MjI3M0YzRTVEMDA0QjE3QjAgLyogV2ViR1BVSW1wbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXZWJHUFVJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUMxOUU2NDYyNzNGM0Y4MjAwNEIxN0IwIC8qIFdlYkdQVUFkYXB0ZXJJbXBsLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQVUFkYXB0ZXJJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMUMxOUU2NEEyNzNGM0Y5OTAwNEIxN0IwIC8qIFdlYkdQVUJpbmRHcm91
cEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR1BVQmluZEdyb3VwSW1wbC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjRFMjczRjNGQTUwMDRCMTdCMCAvKiBX
ZWJHUFVCaW5kR3JvdXBMYXlvdXRJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQVUJp
bmRHcm91cExheW91dEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5
RTY1MjI3M0YzRkIxMDA0QjE3QjAgLyogV2ViR1BVQnVmZmVySW1wbC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXZWJHUFVCdWZmZXJJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMUMxOUU2NTYyNzNGM0ZDMDAwNEIxN0IwIC8qIFdlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2NUEyNzNGM0ZEMjAwNEIxN0IwIC8qIFdlYkdQ
VUNvbW1hbmRFbmNvZGVySW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHUFVDb21tYW5k
RW5jb2RlckltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY1RTI3
M0YzRkUyMDA0QjE3QjAgLyogV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXZWJHUFVDb21wdXRlUGFzc0VuY29kZXJJbXBsLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2NjIyNzNGM0ZFRTAwNEIxN0IwIC8qIFdlYkdQVUNv
bXB1dGVQaXBlbGluZUltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR1BVQ29tcHV0ZVBp
cGVsaW5lSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjY2Mjcz
RjNGRkEwMDRCMTdCMCAvKiBXZWJHUFVEZXZpY2VJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdlYkdQVURldmljZUltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5
RTY2RTI3M0Y0MDE0MDA0QjE3QjAgLyogV2ViR1BVUGlwZWxpbmVMYXlvdXRJbXBsLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjcyMjczRjQwMjAwMDRCMTdCMCAvKiBXZWJHUFVRdWVy
eVNldEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR1BVUXVlcnlTZXRJbXBsLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2NzYyNzNGNDAyQjAwNEIxN0IwIC8q
IFdlYkdQVVF1ZXVlSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHUFVRdWV1ZUltcGwu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY3QTI3M0Y0MDNBMDA0QjE3
QjAgLyogV2ViR1BVUmVuZGVyQnVuZGxlSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJH
UFVSZW5kZXJCdW5kbGVJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMx
OUU2N0UyNzNGNDA0NDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJbXBsLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJbXBsLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2ODIyNzNGNDA1MDAwNEIxN0IwIC8q
IFdlYkdQVVJlbmRlclBhc3NFbmNvZGVySW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJH
UFVSZW5kZXJQYXNzRW5jb2RlckltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkxQzE5RTY4NjI3M0Y0MDVEMDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyUGlwZWxpbmVJbXBsLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjhBMjczRjQwNjkwMDRCMTdCMCAvKiBXZWJH
UFVTYW1wbGVySW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHUFVTYW1wbGVySW1wbC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjhFMjczRjQwNzEwMDRCMTdC
MCAvKiBXZWJHUFVTaGFkZXJNb2R1bGVJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQ
VVNoYWRlck1vZHVsZUltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5
RTY5MjI3M0Y0MDdEMDA0QjE3QjAgLyogV2ViR1BVVGV4dHVyZUltcGwuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2ViR1BVVGV4dHVyZUltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxQzE5RTY5NjI3M0Y0MDhCMDA0QjE3QjAgLyogV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQVVRleHR1cmVWaWV3SW1wbC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjlBMjczRjQyNDIwMDRCMTdCMCAvKiBXZWJHUFVS
ZW5kZXJCdW5kbGVFbmNvZGVySW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVSZW5kZXJCdW5k
bGVFbmNvZGVySW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY5QjI3
M0Y0MjQyMDA0QjE3QjAgLyogV2ViR1BVSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVJbXBs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjlDMjczRjQyNDMwMDRCMTdC
MCAvKiBXZWJHUFVCaW5kR3JvdXBMYXlvdXRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVUJp
bmRHcm91cExheW91dEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2
OUQyNzNGNDI0MzAwNEIxN0IwIC8qIFdlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJHUFVQaXBlbGluZUxheW91dEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMUMxOUU2OUUyNzNGNDI0MzAwNEIxN0IwIC8qIFdlYkdQVUNvbXB1dGVQYXNzRW5j
b2RlckltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY5RjI3M0Y0MjQzMDA0QjE3QjAg
LyogV2ViR1BVVGV4dHVyZUltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR1BVVGV4dHVyZUltcGwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2QTEyNzNGNDI0MzAwNEIxN0Iw
IC8qIFdlYkdQVUJpbmRHcm91cEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR1BVQmluZEdyb3Vw
SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTZBMjI3M0Y0MjQzMDA0
QjE3QjAgLyogV2ViR1BVQnVmZmVySW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVCdWZmZXJJ
bXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNkEzMjczRjQyNDQwMDRC
MTdCMCAvKiBXZWJHUFVSZW5kZXJQYXNzRW5jb2RlckltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
R1BVUmVuZGVyUGFzc0VuY29kZXJJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTFDMTlFNkE0MjczRjQyNDQwMDRCMTdCMCAvKiBXZWJHUFVDb21tYW5kQnVmZmVySW1wbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJHUFVDb21tYW5kQnVmZmVySW1wbC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxQzE5RTZBNTI3M0Y0MjQ0MDA0QjE3QjAgLyogV2ViR1BVUXVldWVJbXBs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVVF1ZXVlSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxQzE5RTZBNjI3M0Y0MjQ0MDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyQnVuZGxl
SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVSZW5kZXJCdW5kbGVJbXBsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNkE3MjczRjQyNDQwMDRCMTdCMCAvKiBXZWJHUFVT
YW1wbGVySW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVTYW1wbGVySW1wbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTZBODI3M0Y0MjQ0MDA0QjE3QjAgLyogV2ViR1BV
UXVlcnlTZXRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVVF1ZXJ5U2V0SW1wbC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTZBOTI3M0Y0MjQ0MDA0QjE3QjAgLyogV2Vi
R1BVUmVuZGVyUGlwZWxpbmVJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVVJlbmRlclBpcGVs
aW5lSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTZBQTI3M0Y0MjQ1
MDA0QjE3QjAgLyogV2ViR1BVU2hhZGVyTW9kdWxlSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJH
UFVTaGFkZXJNb2R1bGVJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlF
NkFCMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJHUFVDb21tYW5kRW5jb2RlckltcGwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViR1BVQ29tbWFuZEVuY29kZXJJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTFDMTlFNkFDMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJHUFVUZXh0dXJlVmlld0lt
cGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNkFEMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJHUFVEZXZp
Y2VJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVURldmljZUltcGwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2QUUyNzNGNDI0NTAwNEIxN0IwIC8qIFdlYkdQVUFkYXB0
ZXJJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVUFkYXB0ZXJJbXBsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNkFGMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJHUFVDb21w
dXRlUGlwZWxpbmVJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVUNvbXB1dGVQaXBlbGluZUlt
cGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2QjQyNzNGODVBRjAwNEIx
N0IwIC8qIFdlYkdQVUNvbnZlcnRUb0JhY2tpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vi
R1BVQ29udmVydFRvQmFja2luZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFD
MTlFNkI2MjczRjg1QkMwMDRCMTdCMCAvKiBXZWJHUFVDb252ZXJ0VG9CYWNraW5nLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkdQVUNvbnZlcnRUb0JhY2tpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMUMxOUU2QjkyNzQwNUUzMjAwNEIxN0IwIC8qIFdlYkdQVUV4dGVybmFsVGV4dHVy
ZUltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR1BVRXh0ZXJuYWxUZXh0dXJlSW1wbC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNkJCMjc0MDVFM0MwMDRCMTdC
MCAvKiBXZWJHUFVFeHRlcm5hbFRleHR1cmVJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVUV4
dGVybmFsVGV4dHVyZUltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM0ODc2
RDYxRjhEN0Y0RTAwQ0NFRUJEIC8qIExvZ2dpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTG9n
Z2luZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDNDg3NkQ3MUY4RDdGNEUw
MENDRUVCRCAvKiBMb2dnaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvZ2dpbmcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM2N0NFQTIxRTMyRUUyNjAwRjgwRjJFIC8qIFZlcnNpb24u
eGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gVmVyc2lvbi54Y2NvbmZp
Zzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMDAsNiArMTA2OSw1OSBAQAogCQkJ
cGF0aCA9IENvbmZpZ3VyYXRpb25zOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsK
KwkJMUMxOUU2NDEyNzNGM0Q3NTAwNEIxN0IwIC8qIEltcGwgKi8gPSB7CisJCQlpc2EgPSBQQlhH
cm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTFDMTlFNjQ2MjczRjNGODIwMDRCMTdCMCAvKiBX
ZWJHUFVBZGFwdGVySW1wbC5jcHAgKi8sCisJCQkJMUMxOUU2QUUyNzNGNDI0NTAwNEIxN0IwIC8q
IFdlYkdQVUFkYXB0ZXJJbXBsLmggKi8sCisJCQkJMUMxOUU2NEEyNzNGM0Y5OTAwNEIxN0IwIC8q
IFdlYkdQVUJpbmRHcm91cEltcGwuY3BwICovLAorCQkJCTFDMTlFNkExMjczRjQyNDMwMDRCMTdC
MCAvKiBXZWJHUFVCaW5kR3JvdXBJbXBsLmggKi8sCisJCQkJMUMxOUU2NEUyNzNGM0ZBNTAwNEIx
N0IwIC8qIFdlYkdQVUJpbmRHcm91cExheW91dEltcGwuY3BwICovLAorCQkJCTFDMTlFNjlDMjcz
RjQyNDMwMDRCMTdCMCAvKiBXZWJHUFVCaW5kR3JvdXBMYXlvdXRJbXBsLmggKi8sCisJCQkJMUMx
OUU2NTIyNzNGM0ZCMTAwNEIxN0IwIC8qIFdlYkdQVUJ1ZmZlckltcGwuY3BwICovLAorCQkJCTFD
MTlFNkEyMjczRjQyNDMwMDRCMTdCMCAvKiBXZWJHUFVCdWZmZXJJbXBsLmggKi8sCisJCQkJMUMx
OUU2NTYyNzNGM0ZDMDAwNEIxN0IwIC8qIFdlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmNwcCAqLywK
KwkJCQkxQzE5RTZBNDI3M0Y0MjQ0MDA0QjE3QjAgLyogV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwu
aCAqLywKKwkJCQkxQzE5RTY1QTI3M0YzRkQyMDA0QjE3QjAgLyogV2ViR1BVQ29tbWFuZEVuY29k
ZXJJbXBsLmNwcCAqLywKKwkJCQkxQzE5RTZBQjI3M0Y0MjQ1MDA0QjE3QjAgLyogV2ViR1BVQ29t
bWFuZEVuY29kZXJJbXBsLmggKi8sCisJCQkJMUMxOUU2NUUyNzNGM0ZFMjAwNEIxN0IwIC8qIFdl
YkdQVUNvbXB1dGVQYXNzRW5jb2RlckltcGwuY3BwICovLAorCQkJCTFDMTlFNjlFMjczRjQyNDMw
MDRCMTdCMCAvKiBXZWJHUFVDb21wdXRlUGFzc0VuY29kZXJJbXBsLmggKi8sCisJCQkJMUMxOUU2
NjIyNzNGM0ZFRTAwNEIxN0IwIC8qIFdlYkdQVUNvbXB1dGVQaXBlbGluZUltcGwuY3BwICovLAor
CQkJCTFDMTlFNkFGMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBs
LmggKi8sCisJCQkJMUMxOUU2QjQyNzNGODVBRjAwNEIxN0IwIC8qIFdlYkdQVUNvbnZlcnRUb0Jh
Y2tpbmcuY3BwICovLAorCQkJCTFDMTlFNkI2MjczRjg1QkMwMDRCMTdCMCAvKiBXZWJHUFVDb252
ZXJ0VG9CYWNraW5nLmggKi8sCisJCQkJMUMxOUU2NjYyNzNGM0ZGQTAwNEIxN0IwIC8qIFdlYkdQ
VURldmljZUltcGwuY3BwICovLAorCQkJCTFDMTlFNkFEMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJH
UFVEZXZpY2VJbXBsLmggKi8sCisJCQkJMUMxOUU2QjkyNzQwNUUzMjAwNEIxN0IwIC8qIFdlYkdQ
VUV4dGVybmFsVGV4dHVyZUltcGwuY3BwICovLAorCQkJCTFDMTlFNkJCMjc0MDVFM0MwMDRCMTdC
MCAvKiBXZWJHUFVFeHRlcm5hbFRleHR1cmVJbXBsLmggKi8sCisJCQkJMUMxOUU2NDIyNzNGM0U1
RDAwNEIxN0IwIC8qIFdlYkdQVUltcGwuY3BwICovLAorCQkJCTFDMTlFNjlCMjczRjQyNDIwMDRC
MTdCMCAvKiBXZWJHUFVJbXBsLmggKi8sCisJCQkJMUMxOUU2NkUyNzNGNDAxNDAwNEIxN0IwIC8q
IFdlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5jcHAgKi8sCisJCQkJMUMxOUU2OUQyNzNGNDI0MzAw
NEIxN0IwIC8qIFdlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5oICovLAorCQkJCTFDMTlFNjcyMjcz
RjQwMjAwMDRCMTdCMCAvKiBXZWJHUFVRdWVyeVNldEltcGwuY3BwICovLAorCQkJCTFDMTlFNkE4
MjczRjQyNDQwMDRCMTdCMCAvKiBXZWJHUFVRdWVyeVNldEltcGwuaCAqLywKKwkJCQkxQzE5RTY3
NjI3M0Y0MDJCMDA0QjE3QjAgLyogV2ViR1BVUXVldWVJbXBsLmNwcCAqLywKKwkJCQkxQzE5RTZB
NTI3M0Y0MjQ0MDA0QjE3QjAgLyogV2ViR1BVUXVldWVJbXBsLmggKi8sCisJCQkJMUMxOUU2N0Uy
NzNGNDA0NDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJbXBsLmNwcCAqLywK
KwkJCQkxQzE5RTY5QTI3M0Y0MjQyMDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyQnVuZGxlRW5jb2Rl
ckltcGwuaCAqLywKKwkJCQkxQzE5RTY3QTI3M0Y0MDNBMDA0QjE3QjAgLyogV2ViR1BVUmVuZGVy
QnVuZGxlSW1wbC5jcHAgKi8sCisJCQkJMUMxOUU2QTYyNzNGNDI0NDAwNEIxN0IwIC8qIFdlYkdQ
VVJlbmRlckJ1bmRsZUltcGwuaCAqLywKKwkJCQkxQzE5RTY4MjI3M0Y0MDUwMDA0QjE3QjAgLyog
V2ViR1BVUmVuZGVyUGFzc0VuY29kZXJJbXBsLmNwcCAqLywKKwkJCQkxQzE5RTZBMzI3M0Y0MjQ0
MDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyUGFzc0VuY29kZXJJbXBsLmggKi8sCisJCQkJMUMxOUU2
ODYyNzNGNDA1RDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5jcHAgKi8sCisJ
CQkJMUMxOUU2QTkyNzNGNDI0NDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5o
ICovLAorCQkJCTFDMTlFNjhBMjczRjQwNjkwMDRCMTdCMCAvKiBXZWJHUFVTYW1wbGVySW1wbC5j
cHAgKi8sCisJCQkJMUMxOUU2QTcyNzNGNDI0NDAwNEIxN0IwIC8qIFdlYkdQVVNhbXBsZXJJbXBs
LmggKi8sCisJCQkJMUMxOUU2OEUyNzNGNDA3MTAwNEIxN0IwIC8qIFdlYkdQVVNoYWRlck1vZHVs
ZUltcGwuY3BwICovLAorCQkJCTFDMTlFNkFBMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJHUFVTaGFk
ZXJNb2R1bGVJbXBsLmggKi8sCisJCQkJMUMxOUU2OTIyNzNGNDA3RDAwNEIxN0IwIC8qIFdlYkdQ
VVRleHR1cmVJbXBsLmNwcCAqLywKKwkJCQkxQzE5RTY5RjI3M0Y0MjQzMDA0QjE3QjAgLyogV2Vi
R1BVVGV4dHVyZUltcGwuaCAqLywKKwkJCQkxQzE5RTY5NjI3M0Y0MDhCMDA0QjE3QjAgLyogV2Vi
R1BVVGV4dHVyZVZpZXdJbXBsLmNwcCAqLywKKwkJCQkxQzE5RTZBQzI3M0Y0MjQ1MDA0QjE3QjAg
LyogV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmggKi8sCisJCQkpOworCQkJcGF0aCA9IEltcGw7CisJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQkxQzQ4NzZERTFGOEQ4MzEzMDBDQ0VF
QkQgLyogY29jb2EgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApA
QCAtMTA0Miw2ICsxMTY0LDcgQEAKIAkJMUNDNUUzQzMyNzM3NDVBMzAwNkY2RkY0IC8qIFdlYkdQ
VSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMUMxOUU2
NDEyNzNGM0Q3NTAwNEIxN0IwIC8qIEltcGwgKi8sCiAJCQkJMUNDNUU0NzEyNzM3NDk0ODAwNkY2
RkY0IC8qIFdlYkdQVS5oICovLAogCQkJCTFDQzVFNDdGMjczNzQ5NDkwMDZGNkZGNCAvKiBXZWJH
UFVBZGFwdGVyLmggKi8sCiAJCQkJMUNDNUU0NkMyNzM3NDk0ODAwNkY2RkY0IC8qIFdlYkdQVUFk
ZHJlc3NNb2RlLmggKi8sCkBAIC0xNjk0LDYgKzE4MTcsMjkgQEAKIAkJCQkwNzYxMURCNzI0M0ZB
NUJGMDBEODA3MDQgLyogVXNhZ2VUcmFja2luZ1NvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNDFFMUYzNDQyNDhBNkEwMDAwMjJENURFIC8qIFZpZGVvVG9vbGJveFNvZnRMaW5rLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUY0NkI4QzREMjY3NDA5MTgwMDdBNjU1NCAvKiBWaXNpb25LaXRD
b3JlU29mdExpbmsubW0gaW4gU291cmNlcyAqLywKKwkJCQkxQzE5RTY0ODI3M0YzRjgyMDA0QjE3
QjAgLyogV2ViR1BVQWRhcHRlckltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2NEMy
NzNGM0Y5OTAwNEIxN0IwIC8qIFdlYkdQVUJpbmRHcm91cEltcGwuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMUMxOUU2NTAyNzNGM0ZBNTAwNEIxN0IwIC8qIFdlYkdQVUJpbmRHcm91cExheW91dElt
cGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2NTQyNzNGM0ZCMTAwNEIxN0IwIC8qIFdl
YkdQVUJ1ZmZlckltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2NTgyNzNGM0ZDMDAw
NEIxN0IwIC8qIFdlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTFDMTlFNjVDMjczRjNGRDIwMDRCMTdCMCAvKiBXZWJHUFVDb21tYW5kRW5jb2RlckltcGwuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2NjAyNzNGM0ZFMjAwNEIxN0IwIC8qIFdlYkdQVUNv
bXB1dGVQYXNzRW5jb2RlckltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2NjQyNzNG
M0ZFRTAwNEIxN0IwIC8qIFdlYkdQVUNvbXB1dGVQaXBlbGluZUltcGwuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMUMxOUU2QjUyNzNGODVBRjAwNEIxN0IwIC8qIFdlYkdQVUNvbnZlcnRUb0JhY2tp
bmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2NjgyNzNGM0ZGQTAwNEIxN0IwIC8qIFdl
YkdQVURldmljZUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2QkEyNzQwNUUzMjAw
NEIxN0IwIC8qIFdlYkdQVUV4dGVybmFsVGV4dHVyZUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMUMxOUU2NDQyNzNGM0U1RDAwNEIxN0IwIC8qIFdlYkdQVUltcGwuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMUMxOUU2NzAyNzNGNDAxNDAwNEIxN0IwIC8qIFdlYkdQVVBpcGVsaW5lTGF5b3V0
SW1wbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQzE5RTY3NDI3M0Y0MDIwMDA0QjE3QjAgLyog
V2ViR1BVUXVlcnlTZXRJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFDMTlFNjc4MjczRjQw
MkIwMDRCMTdCMCAvKiBXZWJHUFVRdWV1ZUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMx
OUU2ODAyNzNGNDA0NDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJbXBsLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTFDMTlFNjdDMjczRjQwM0EwMDRCMTdCMCAvKiBXZWJHUFVS
ZW5kZXJCdW5kbGVJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFDMTlFNjg0MjczRjQwNTAw
MDRCMTdCMCAvKiBXZWJHUFVSZW5kZXJQYXNzRW5jb2RlckltcGwuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMUMxOUU2ODgyNzNGNDA1RDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlclBpcGVsaW5lSW1w
bC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQzE5RTY4QzI3M0Y0MDY5MDA0QjE3QjAgLyogV2Vi
R1BVU2FtcGxlckltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2OTAyNzNGNDA3MjAw
NEIxN0IwIC8qIFdlYkdQVVNoYWRlck1vZHVsZUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MUMxOUU2OTQyNzNGNDA3RDAwNEIxN0IwIC8qIFdlYkdQVVRleHR1cmVJbXBsLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTFDMTlFNjk4MjczRjQwOEIwMDRCMTdCMCAvKiBXZWJHUFVUZXh0dXJlVmll
d0ltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTEwODI2RkExRjU3NjI5MjAwNDc3MkFDIC8q
IFdlYlBhbmVsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUFkYXB0ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQWRhcHRlckltcGwuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjkxMjA5NjlmY2ViYTRhMjQ2YWY2OWEwYjI3NmNiZmYzOTBmMTFiNmYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBs
L1dlYkdQVUFkYXB0ZXJJbXBsLmNwcApAQCAtMCwwICsxLDIxNSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVBZGFwdGVySW1wbC5oIgorCisjaW5j
bHVkZSAiV2ViR1BVQ29udmVydFRvQmFja2luZy5oIgorI2luY2x1ZGUgIldlYkdQVURldmljZUlt
cGwuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVRXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgewor
bmFtZXNwYWNlIFdlYkdQVSB7CisKK3N0YXRpYyBTdHJpbmcgYWRhcHRlck5hbWUoV0dQVUFkYXB0
ZXIgYWRhcHRlcikKK3sKKyAgICBXR1BVQWRhcHRlclByb3BlcnRpZXMgcHJvcGVydGllczsKKyAg
ICB3Z3B1QWRhcHRlckdldFByb3BlcnRpZXMoYWRhcHRlciwgJnByb3BlcnRpZXMpOworICAgIHJl
dHVybiBwcm9wZXJ0aWVzLm5hbWU7Cit9CisKK3N0YXRpYyBSZWY8U3VwcG9ydGVkRmVhdHVyZXM+
IHN1cHBvcnRlZEZlYXR1cmVzKFdHUFVBZGFwdGVyIGFkYXB0ZXIpCit7CisgICAgVmVjdG9yPFN0
cmluZz4gcmVzdWx0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyA7ICsraSkgeworICAgICAgICBh
dXRvIGZlYXR1cmUgPSB3Z3B1QWRhcHRlckdldEZlYXR1cmVBdEluZGV4KGFkYXB0ZXIsIGkpOwor
ICAgICAgICBpZiAoZmVhdHVyZSA9PSBXR1BVRmVhdHVyZU5hbWVfVW5kZWZpbmVkKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8dWludD4oZmVhdHVyZSkp
IHsKKyAgICAgICAgY2FzZSBXR1BVRmVhdHVyZU5hbWVfRGVwdGhDbGFtcGluZzoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFdHUFVGZWF0dXJlTmFtZV9EZXB0aDI0VW5vcm1TdGVu
Y2lsODoKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoImRlcHRoMjR1bm9ybS1zdGVuY2lsOCJf
cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXR1BVRmVhdHVyZU5hbWVfRGVw
dGgzMkZsb2F0U3RlbmNpbDg6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJkZXB0aDMyZmxv
YXQtc3RlbmNpbDgiX3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVUZl
YXR1cmVOYW1lX1RpbWVzdGFtcFF1ZXJ5OgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgidGlt
ZXN0YW1wLXF1ZXJ5Il9zKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdHUFVG
ZWF0dXJlTmFtZV9QaXBlbGluZVN0YXRpc3RpY3NRdWVyeToKKyAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoInBpcGVsaW5lLXN0YXRpc3RpY3MtcXVlcnkiX3MpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgV0dQVUZlYXR1cmVOYW1lX1RleHR1cmVDb21wcmVzc2lvbkJDOgorICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgidGV4dHVyZS1jb21wcmVzc2lvbi1iYyJfcyk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXR1BVRmVhdHVyZU5hbWVfRGVwdGhDbGlwQ29u
dHJvbDoKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoImRlcHRoLWNsaXAtY29udHJvbCJfcyk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXR1BVRmVhdHVyZU5hbWVfSW5kaXJl
Y3RGaXJzdEluc3RhbmNlOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiaW5kaXJlY3QtZmly
c3QtaW5zdGFuY2UiX3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVUZl
YXR1cmVOYW1lX1RleHR1cmVDb21wcmVzc2lvbkVUQzI6CisgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKCJ0ZXh0dXJlLWNvbXByZXNzaW9uLWV0YzIiX3MpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgV0dQVUZlYXR1cmVOYW1lX1RleHR1cmVDb21wcmVzc2lvbkFTVEM6CisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKCJ0ZXh0dXJlLWNvbXByZXNzaW9uLWFzdGMiX3MpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gU3VwcG9ydGVkRmVhdHVyZXM6OmNyZWF0ZShXVEZN
b3ZlKHJlc3VsdCkpOworfQorCitzdGF0aWMgUmVmPFN1cHBvcnRlZExpbWl0cz4gc3VwcG9ydGVk
TGltaXRzKFdHUFVBZGFwdGVyIGFkYXB0ZXIpCit7CisgICAgV0dQVVN1cHBvcnRlZExpbWl0cyBs
aW1pdHM7CisgICAgd2dwdUFkYXB0ZXJHZXRMaW1pdHMoYWRhcHRlciwgJmxpbWl0cyk7CisgICAg
cmV0dXJuIFN1cHBvcnRlZExpbWl0czo6Y3JlYXRlKAorICAgICAgICBsaW1pdHMubGltaXRzLm1h
eFRleHR1cmVEaW1lbnNpb24xRCwKKyAgICAgICAgbGltaXRzLmxpbWl0cy5tYXhUZXh0dXJlRGlt
ZW5zaW9uMkQsCisgICAgICAgIGxpbWl0cy5saW1pdHMubWF4VGV4dHVyZURpbWVuc2lvbjNELAor
ICAgICAgICBsaW1pdHMubGltaXRzLm1heFRleHR1cmVBcnJheUxheWVycywKKyAgICAgICAgbGlt
aXRzLmxpbWl0cy5tYXhCaW5kR3JvdXBzLAorICAgICAgICBsaW1pdHMubGltaXRzLm1heER5bmFt
aWNVbmlmb3JtQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0LAorICAgICAgICBsaW1pdHMubGltaXRz
Lm1heER5bmFtaWNTdG9yYWdlQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0LAorICAgICAgICBsaW1p
dHMubGltaXRzLm1heFNhbXBsZWRUZXh0dXJlc1BlclNoYWRlclN0YWdlLAorICAgICAgICBsaW1p
dHMubGltaXRzLm1heFNhbXBsZXJzUGVyU2hhZGVyU3RhZ2UsCisgICAgICAgIGxpbWl0cy5saW1p
dHMubWF4U3RvcmFnZUJ1ZmZlcnNQZXJTaGFkZXJTdGFnZSwKKyAgICAgICAgbGltaXRzLmxpbWl0
cy5tYXhTdG9yYWdlVGV4dHVyZXNQZXJTaGFkZXJTdGFnZSwKKyAgICAgICAgbGltaXRzLmxpbWl0
cy5tYXhVbmlmb3JtQnVmZmVyc1BlclNoYWRlclN0YWdlLAorICAgICAgICBsaW1pdHMubGltaXRz
Lm1heFVuaWZvcm1CdWZmZXJCaW5kaW5nU2l6ZSwKKyAgICAgICAgbGltaXRzLmxpbWl0cy5tYXhT
dG9yYWdlQnVmZmVyQmluZGluZ1NpemUsCisgICAgICAgIGxpbWl0cy5saW1pdHMubWluVW5pZm9y
bUJ1ZmZlck9mZnNldEFsaWdubWVudCwKKyAgICAgICAgbGltaXRzLmxpbWl0cy5taW5TdG9yYWdl
QnVmZmVyT2Zmc2V0QWxpZ25tZW50LAorICAgICAgICBsaW1pdHMubGltaXRzLm1heFZlcnRleEJ1
ZmZlcnMsCisgICAgICAgIGxpbWl0cy5saW1pdHMubWF4VmVydGV4QXR0cmlidXRlcywKKyAgICAg
ICAgbGltaXRzLmxpbWl0cy5tYXhWZXJ0ZXhCdWZmZXJBcnJheVN0cmlkZSwKKyAgICAgICAgbGlt
aXRzLmxpbWl0cy5tYXhJbnRlclN0YWdlU2hhZGVyQ29tcG9uZW50cywKKyAgICAgICAgbGltaXRz
LmxpbWl0cy5tYXhDb21wdXRlV29ya2dyb3VwU3RvcmFnZVNpemUsCisgICAgICAgIGxpbWl0cy5s
aW1pdHMubWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwLAorICAgICAgICBsaW1pdHMu
bGltaXRzLm1heENvbXB1dGVXb3JrZ3JvdXBTaXplWCwKKyAgICAgICAgbGltaXRzLmxpbWl0cy5t
YXhDb21wdXRlV29ya2dyb3VwU2l6ZVksCisgICAgICAgIGxpbWl0cy5saW1pdHMubWF4Q29tcHV0
ZVdvcmtncm91cFNpemVaLAorICAgICAgICBsaW1pdHMubGltaXRzLm1heENvbXB1dGVXb3JrZ3Jv
dXBzUGVyRGltZW5zaW9uKTsKK30KKworc3RhdGljIGJvb2wgaXNGYWxsYmFja0FkYXB0ZXIoV0dQ
VUFkYXB0ZXIgYWRhcHRlcikKK3sKKyAgICBXR1BVQWRhcHRlclByb3BlcnRpZXMgcHJvcGVydGll
czsKKyAgICB3Z3B1QWRhcHRlckdldFByb3BlcnRpZXMoYWRhcHRlciwgJnByb3BlcnRpZXMpOwor
ICAgIHJldHVybiBwcm9wZXJ0aWVzLmFkYXB0ZXJUeXBlID09IFdHUFVBZGFwdGVyVHlwZV9DUFU7
Cit9CisKK0FkYXB0ZXJJbXBsOjpBZGFwdGVySW1wbChXR1BVQWRhcHRlciBhZGFwdGVyKQorICAg
IDogQWRhcHRlcihhZGFwdGVyTmFtZShhZGFwdGVyKSwgc3VwcG9ydGVkRmVhdHVyZXMoYWRhcHRl
ciksIHN1cHBvcnRlZExpbWl0cyhhZGFwdGVyKSwgV2ViR1BVOjppc0ZhbGxiYWNrQWRhcHRlcihh
ZGFwdGVyKSkKKyAgICAsIG1fYmFja2luZyhhZGFwdGVyKQoreworfQorCitBZGFwdGVySW1wbDo6
fkFkYXB0ZXJJbXBsKCkKK3sKKyAgICB3Z3B1QWRhcHRlclJlbGVhc2UobV9iYWNraW5nKTsgCit9
CisKK3ZvaWQgcmVxdWVzdERldmljZUNhbGxiYWNrKFdHUFVSZXF1ZXN0RGV2aWNlU3RhdHVzIHN0
YXR1cywgV0dQVURldmljZSBkZXZpY2UsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIHZvaWQqIHVzZXJk
YXRhKQoreworICAgIGF1dG8gYWRhcHRlciA9IGFkb3B0UmVmKCpzdGF0aWNfY2FzdDxBZGFwdGVy
SW1wbCo+KHVzZXJkYXRhKSk7IC8vIGFkb3B0UmVmIGlzIGJhbGFuY2VkIGJ5IGxlYWtSZWYgaW4g
cmVxdWVzdERldmljZSgpIGJlbG93LiBXZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSdyZSB1
c2luZyBhIEMgQVBJIHdpdGggbm8gY29uY2VwdCBvZiByZWZlcmVuY2UgY291bnRpbmcgb3IgYmxv
Y2tzLgorICAgIGFkYXB0ZXItPnJlcXVlc3REZXZpY2VDYWxsYmFjayhzdGF0dXMsIGRldmljZSwg
bWVzc2FnZSk7Cit9CisKK3ZvaWQgQWRhcHRlckltcGw6OnJlcXVlc3REZXZpY2UoY29uc3QgRGV2
aWNlRGVzY3JpcHRvciYgZGVzY3JpcHRvciwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlZjxEZXZpY2U+
KT4mJiBjYWxsYmFjaykKK3sKKyAgICBSZWYgcHJvdGVjdGVkVGhpcygqdGhpcyk7CisKKyAgICBh
dXRvIGxhYmVsID0gZGVzY3JpcHRvci5sYWJlbC51dGY4KCk7CisKKyAgICBXR1BVRGV2aWNlRGVz
Y3JpcHRvckxhYmVsIGJhY2tpbmdEZXNjcmlwdG9yTGFiZWwgeworICAgICAgICB7CisgICAgICAg
ICAgICBudWxscHRyLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V0dQVVNUeXBlPihXR1BVU1R5
cGVfRGV2aWNlRGVzY3JpcHRvckxhYmVsKSwKKyAgICAgICAgfSwKKyAgICAgICAgbnVsbHB0ciwK
KyAgICAgICAgbGFiZWwuZGF0YSgpCisgICAgfTsKKworICAgIFZlY3RvcjxXR1BVRmVhdHVyZU5h
bWU+IGZlYXR1cmVzOworICAgIGZlYXR1cmVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGVzY3Jp
cHRvci5yZXF1aXJlZEZlYXR1cmVzLnNpemUoKSk7CisgICAgZm9yIChhdXRvIGZlYXR1cmVOYW1l
IDogZGVzY3JpcHRvci5yZXF1aXJlZEZlYXR1cmVzKQorICAgICAgICBmZWF0dXJlcy51bmNoZWNr
ZWRBcHBlbmQoY29udmVydFRvQmFja2luZyhmZWF0dXJlTmFtZSkpOworCisgICAgV0dQVVJlcXVp
cmVkTGltaXRzIGxpbWl0cyB7CisgICAgICAgIG51bGxwdHIsIHsKKyAgICAgICAgICAgIDAsIC8v
IG1heFRleHR1cmVEaW1lbnNpb24xRAorICAgICAgICAgICAgMCwgLy8gbWF4VGV4dHVyZURpbWVu
c2lvbjJECisgICAgICAgICAgICAwLCAvLyBtYXhUZXh0dXJlRGltZW5zaW9uM0QKKyAgICAgICAg
ICAgIDAsIC8vIG1heFRleHR1cmVBcnJheUxheWVycworICAgICAgICAgICAgMCwgLy8gbWF4Qmlu
ZEdyb3VwcworICAgICAgICAgICAgMCwgLy8gbWF4RHluYW1pY1VuaWZvcm1CdWZmZXJzUGVyUGlw
ZWxpbmVMYXlvdXQKKyAgICAgICAgICAgIDAsIC8vIG1heER5bmFtaWNTdG9yYWdlQnVmZmVyc1Bl
clBpcGVsaW5lTGF5b3V0CisgICAgICAgICAgICAwLCAvLyBtYXhTYW1wbGVkVGV4dHVyZXNQZXJT
aGFkZXJTdGFnZQorICAgICAgICAgICAgMCwgLy8gbWF4U2FtcGxlcnNQZXJTaGFkZXJTdGFnZQor
ICAgICAgICAgICAgMCwgLy8gbWF4U3RvcmFnZUJ1ZmZlcnNQZXJTaGFkZXJTdGFnZQorICAgICAg
ICAgICAgMCwgLy8gbWF4U3RvcmFnZVRleHR1cmVzUGVyU2hhZGVyU3RhZ2UKKyAgICAgICAgICAg
IDAsIC8vIG1heFVuaWZvcm1CdWZmZXJzUGVyU2hhZGVyU3RhZ2UKKyAgICAgICAgICAgIDAsIC8v
IG1heFVuaWZvcm1CdWZmZXJCaW5kaW5nU2l6ZQorICAgICAgICAgICAgMCwgLy8gbWF4U3RvcmFn
ZUJ1ZmZlckJpbmRpbmdTaXplCisgICAgICAgICAgICAwLCAvLyBtaW5Vbmlmb3JtQnVmZmVyT2Zm
c2V0QWxpZ25tZW50CisgICAgICAgICAgICAwLCAvLyBtaW5TdG9yYWdlQnVmZmVyT2Zmc2V0QWxp
Z25tZW50CisgICAgICAgICAgICAwLCAvLyBtYXhWZXJ0ZXhCdWZmZXJzCisgICAgICAgICAgICAw
LCAvLyBtYXhWZXJ0ZXhBdHRyaWJ1dGVzCisgICAgICAgICAgICAwLCAvLyBtYXhWZXJ0ZXhCdWZm
ZXJBcnJheVN0cmlkZQorICAgICAgICAgICAgMCwgLy8gbWF4SW50ZXJTdGFnZVNoYWRlckNvbXBv
bmVudHMKKyAgICAgICAgICAgIDAsIC8vIG1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlU2l6ZQor
ICAgICAgICAgICAgMCwgLy8gbWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwCisgICAg
ICAgICAgICAwLCAvLyBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVgKKyAgICAgICAgICAgIDAsIC8v
IG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWQorICAgICAgICAgICAgMCwgLy8gbWF4Q29tcHV0ZVdv
cmtncm91cFNpemVaCisgICAgICAgICAgICAwLCAvLyBtYXhDb21wdXRlV29ya2dyb3Vwc1BlckRp
bWVuc2lvbgorICAgICAgICB9LAorICAgIH07CisKKyAgICBXR1BVRGV2aWNlRGVzY3JpcHRvciBi
YWNraW5nRGVzY3JpcHRvciB7CisgICAgICAgICZiYWNraW5nRGVzY3JpcHRvckxhYmVsLmhlYWRl
ciwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGZlYXR1cmVzLnNpemUoKSksCisgICAg
ICAgIGZlYXR1cmVzLmRhdGEoKSwKKyAgICAgICAgJmxpbWl0cywKKyAgICB9OworCisgICAgbV9j
YWxsYmFja3MuYXBwZW5kKFdURk1vdmUoY2FsbGJhY2spKTsKKworICAgIHdncHVBZGFwdGVyUmVx
dWVzdERldmljZShtX2JhY2tpbmcsICZiYWNraW5nRGVzY3JpcHRvciwgJldlYkdQVTo6cmVxdWVz
dERldmljZUNhbGxiYWNrLCAmcHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpOyAvLyBsZWFrUmVmIGlz
IGJhbGFuY2VkIGJ5IGFkb3B0UmVmIGluIHJlcXVlc3REZXZpY2VDYWxsYmFjaygpIGFib3ZlLiBX
ZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSdyZSB1c2luZyBhIEMgQVBJIHdpdGggbm8gY29u
Y2VwdCBvZiByZWZlcmVuY2UgY291bnRpbmcgb3IgYmxvY2tzLgorfQorCit2b2lkIEFkYXB0ZXJJ
bXBsOjpyZXF1ZXN0RGV2aWNlQ2FsbGJhY2soV0dQVVJlcXVlc3REZXZpY2VTdGF0dXMsIFdHUFVE
ZXZpY2UgZGV2aWNlLCBjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIFVOVVNFRF9QQVJBTSht
ZXNzYWdlKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gbV9jYWxsYmFja3MudGFrZUZpcnN0KCk7Cisg
ICAgY2FsbGJhY2soRGV2aWNlSW1wbDo6Y3JlYXRlKGRldmljZSwgUmVmIHsgZmVhdHVyZXMoKSB9
LCBSZWYgeyBsaW1pdHMoKSB9KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1l
c3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNz
L1dlYkdQVS9JbXBsL1dlYkdQVUFkYXB0ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUFkYXB0ZXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTY0
ODlkNWRhYmE5NThjOGZmMGI4ZmFiODgyZDY3MGI0YjI2ZDZlMwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQWRhcHRl
ckltcGwuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJXZWJHUFVBZGFwdGVyLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorI2lu
Y2x1ZGUgPHd0Zi9EZXF1ZS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUg
eworCitjbGFzcyBBZGFwdGVySW1wbCBmaW5hbCA6IHB1YmxpYyBBZGFwdGVyIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmPEFkYXB0ZXJJbXBsPiBjcmVhdGUoV0dQVUFkYXB0ZXIgYWRhcHRlcikK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFkYXB0ZXJJbXBsKGFkYXB0ZXIp
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5BZGFwdGVySW1wbCgpOworCisgICAgV0dQVUFkYXB0
ZXIgYmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgorICAg
IGZyaWVuZCB2b2lkIHJlcXVlc3REZXZpY2VDYWxsYmFjayhXR1BVUmVxdWVzdERldmljZVN0YXR1
cywgV0dQVURldmljZSwgY29uc3QgY2hhciogbWVzc2FnZSwgdm9pZCogdXNlcmRhdGEpOworCisg
ICAgQWRhcHRlckltcGwoV0dQVUFkYXB0ZXIpOworCisgICAgQWRhcHRlckltcGwoY29uc3QgQWRh
cHRlckltcGwmKSA9IGRlbGV0ZTsKKyAgICBBZGFwdGVySW1wbChBZGFwdGVySW1wbCYmKSA9IGRl
bGV0ZTsKKyAgICBBZGFwdGVySW1wbCYgb3BlcmF0b3I9KGNvbnN0IEFkYXB0ZXJJbXBsJikgPSBk
ZWxldGU7CisgICAgQWRhcHRlckltcGwmIG9wZXJhdG9yPShBZGFwdGVySW1wbCYmKSA9IGRlbGV0
ZTsKKworICAgIHZvaWQgcmVxdWVzdERldmljZUNhbGxiYWNrKFdHUFVSZXF1ZXN0RGV2aWNlU3Rh
dHVzLCBXR1BVRGV2aWNlLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsKKyAgICB2b2lkIHJlcXVlc3RE
ZXZpY2UoY29uc3QgRGV2aWNlRGVzY3JpcHRvciYsIHN0ZDo6ZnVuY3Rpb248dm9pZChSZWY8RGV2
aWNlPik+JiYpIGZpbmFsOworCisgICAgV0dQVUFkYXB0ZXIgbV9iYWNraW5nIHsgbnVsbHB0ciB9
OworCisgICAgRGVxdWU8c3RkOjpmdW5jdGlvbjx2b2lkKFJlZjxEZXZpY2U+KT4+IG1fY2FsbGJh
Y2tzOworfTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2Vi
R1BVQmluZEdyb3VwSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dl
YkdQVS9JbXBsL1dlYkdQVUJpbmRHcm91cEltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFiMGFkNjc1OThh
N2FkMjE1OWE5NDg0NGYxNzRjMzAzNWNlYWZmYjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJpbmRHcm91cEltcGwu
Y3BwCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViR1BVQmluZEdyb3VwSW1wbC5oIgorCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQ
VUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitCaW5kR3Jv
dXBJbXBsOjpCaW5kR3JvdXBJbXBsKFdHUFVCaW5kR3JvdXAgYmluZEdyb3VwKQorICAgIDogbV9i
YWNraW5nKGJpbmRHcm91cCkKK3sKK30KKworQmluZEdyb3VwSW1wbDo6fkJpbmRHcm91cEltcGwo
KQoreworICAgIHdncHVCaW5kR3JvdXBSZWxlYXNlKG1fYmFja2luZyk7Cit9CisKK3ZvaWQgQmlu
ZEdyb3VwSW1wbDo6c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAg
IHdncHVCaW5kR3JvdXBTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVsLnV0ZjgoKS5kYXRhKCkpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVCaW5k
R3JvdXBJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBs
L1dlYkdQVUJpbmRHcm91cEltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMzViYmE5ZGI3MmQ2NTE5NmJhNmVh
NmEwNjJmMzcyM2UyZGIwYWY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFM
L3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVCaW5kR3JvdXBJbXBsLmgKQEAgLTAsMCAr
MSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVQmlu
ZEdyb3VwLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorCituYW1lc3BhY2UgUEFMIHsK
K25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBCaW5kR3JvdXBJbXBsIGZpbmFsIDogcHVibGlj
IEJpbmRHcm91cCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxCaW5kR3JvdXBJbXBsPiBjcmVh
dGUoV0dQVUJpbmRHcm91cCBiaW5kR3JvdXApCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBCaW5kR3JvdXBJbXBsKGJpbmRHcm91cCkpOworICAgIH0KKworICAgIHZpcnR1YWwg
fkJpbmRHcm91cEltcGwoKTsKKworICAgIFdHUFVCaW5kR3JvdXAgYmFja2luZygpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgorICAgIEJpbmRHcm91cEltcGwoV0dQVUJp
bmRHcm91cCk7CisKKyAgICBCaW5kR3JvdXBJbXBsKGNvbnN0IEJpbmRHcm91cEltcGwmKSA9IGRl
bGV0ZTsKKyAgICBCaW5kR3JvdXBJbXBsKEJpbmRHcm91cEltcGwmJikgPSBkZWxldGU7CisgICAg
QmluZEdyb3VwSW1wbCYgb3BlcmF0b3I9KGNvbnN0IEJpbmRHcm91cEltcGwmKSA9IGRlbGV0ZTsK
KyAgICBCaW5kR3JvdXBJbXBsJiBvcGVyYXRvcj0oQmluZEdyb3VwSW1wbCYmKSA9IGRlbGV0ZTsK
KworICAgIHZvaWQgc2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5hbDsKKworICAg
IFdHUFVCaW5kR3JvdXAgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQmluZEdyb3VwTGF5b3V0SW1wbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJp
bmRHcm91cExheW91dEltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2NGU3ZGI2NjAzNDRkZjhjNDZiMTM1
OGFhNDBlOGQ4MTkxZjQwYTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJpbmRHcm91cExheW91dEltcGwuY3BwCkBA
IC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2ViR1BVQmluZEdyb3VwTGF5b3V0SW1wbC5oIgorCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQ
VUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitCaW5kR3Jv
dXBMYXlvdXRJbXBsOjpCaW5kR3JvdXBMYXlvdXRJbXBsKFdHUFVCaW5kR3JvdXBMYXlvdXQgYmlu
ZEdyb3VwTGF5b3V0KQorICAgIDogbV9iYWNraW5nKGJpbmRHcm91cExheW91dCkKK3sKK30KKwor
QmluZEdyb3VwTGF5b3V0SW1wbDo6fkJpbmRHcm91cExheW91dEltcGwoKQoreworICAgIHdncHVC
aW5kR3JvdXBMYXlvdXRSZWxlYXNlKG1fYmFja2luZyk7Cit9CisKK3ZvaWQgQmluZEdyb3VwTGF5
b3V0SW1wbDo6c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAgIHdn
cHVCaW5kR3JvdXBMYXlvdXRTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVsLnV0ZjgoKS5kYXRhKCkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVC
aW5kR3JvdXBMYXlvdXRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dl
YkdQVS9JbXBsL1dlYkdQVUJpbmRHcm91cExheW91dEltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OWI2NGI5
ZDMxN2YwNWVlZDAyNmYwMzc4MTMzMzJhYTg1NjA4YTI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVCaW5kR3JvdXBM
YXlvdXRJbXBsLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiV2ViR1BVQmluZEdyb3VwTGF5b3V0LmgiCisjaW5jbHVkZSA8V2ViR1BVL1dl
YkdQVS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBC
aW5kR3JvdXBMYXlvdXRJbXBsIGZpbmFsIDogcHVibGljIEJpbmRHcm91cExheW91dCB7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZjxCaW5kR3JvdXBMYXlvdXRJbXBsPiBjcmVhdGUoV0dQVUJpbmRH
cm91cExheW91dCBiaW5kR3JvdXBMYXlvdXQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBCaW5kR3JvdXBMYXlvdXRJbXBsKGJpbmRHcm91cExheW91dCkpOworICAgIH0KKwor
ICAgIHZpcnR1YWwgfkJpbmRHcm91cExheW91dEltcGwoKTsKKworICAgIFdHUFVCaW5kR3JvdXBM
YXlvdXQgYmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgor
ICAgIEJpbmRHcm91cExheW91dEltcGwoV0dQVUJpbmRHcm91cExheW91dCk7CisKKyAgICBCaW5k
R3JvdXBMYXlvdXRJbXBsKGNvbnN0IEJpbmRHcm91cExheW91dEltcGwmKSA9IGRlbGV0ZTsKKyAg
ICBCaW5kR3JvdXBMYXlvdXRJbXBsKEJpbmRHcm91cExheW91dEltcGwmJikgPSBkZWxldGU7Cisg
ICAgQmluZEdyb3VwTGF5b3V0SW1wbCYgb3BlcmF0b3I9KGNvbnN0IEJpbmRHcm91cExheW91dElt
cGwmKSA9IGRlbGV0ZTsKKyAgICBCaW5kR3JvdXBMYXlvdXRJbXBsJiBvcGVyYXRvcj0oQmluZEdy
b3VwTGF5b3V0SW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIHZvaWQgc2V0TGFiZWxJbnRlcm5hbChj
b25zdCBTdHJpbmcmKSBmaW5hbDsKKworICAgIFdHUFVCaW5kR3JvdXBMYXlvdXQgbV9iYWNraW5n
IHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBX
ZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BV
L0ltcGwvV2ViR1BVQnVmZmVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBo
aWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJ1ZmZlckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM2NDNmYzFh
Y2M2OTMyZjI2ZWQ4MGE3ZTI5OWUxOTBhYTU1ZTY5NzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJ1ZmZlckltcGwu
Y3BwCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViR1BVQnVmZmVySW1wbC5oIgorCisjaW5jbHVkZSAiV2ViR1BVQ29udmVydFRv
QmFja2luZy5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFVFeHQuaD4KKworbmFtZXNwYWNlIFBB
TCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworQnVmZmVySW1wbDo6QnVmZmVySW1wbChXR1BVQnVm
ZmVyIGJ1ZmZlcikKKyAgICA6IG1fYmFja2luZyhidWZmZXIpCit7Cit9CisKK0J1ZmZlckltcGw6
On5CdWZmZXJJbXBsKCkKK3sKKyAgICB3Z3B1QnVmZmVyUmVsZWFzZShtX2JhY2tpbmcpOworfQor
Cit2b2lkIG1hcENhbGxiYWNrKFdHUFVCdWZmZXJNYXBBc3luY1N0YXR1cyBzdGF0dXMsIHZvaWQq
IHVzZXJkYXRhKQoreworICAgIGF1dG8gYnVmZmVyID0gYWRvcHRSZWYoKnN0YXRpY19jYXN0PEJ1
ZmZlckltcGwqPih1c2VyZGF0YSkpOyAvLyBhZG9wdFJlZiBpcyBiYWxhbmNlZCBieSBsZWFrUmVm
IGluIG1hcEFzeW5jKCkgYmVsb3cuIFdlIGhhdmUgdG8gZG8gdGhpcyBiZWNhdXNlIHdlJ3JlIHVz
aW5nIGEgQyBBUEkgd2l0aCBubyBjb25jZXB0IG9mIHJlZmVyZW5jZSBjb3VudGluZyBvciBibG9j
a3MuCisgICAgYnVmZmVyLT5tYXBDYWxsYmFjayhzdGF0dXMpOworfQorCit2b2lkIEJ1ZmZlcklt
cGw6Om1hcEFzeW5jKE1hcE1vZGVGbGFncyBtYXBNb2RlRmxhZ3MsIHN0ZDo6b3B0aW9uYWw8U2l6
ZTY0PiBvZmZzZXQsIHN0ZDo6b3B0aW9uYWw8U2l6ZTY0PiBzaXplLCBzdGQ6OmZ1bmN0aW9uPHZv
aWQoKT4mJiBjYWxsYmFjaykKK3sKKyAgICBSZWYgcHJvdGVjdGVkVGhpcygqdGhpcyk7CisKKyAg
ICBhdXRvIGJhY2tpbmdNYXBNb2RlRmxhZ3MgPSBjb252ZXJ0TWFwTW9kZUZsYWdzVG9CYWNraW5n
KG1hcE1vZGVGbGFncyk7CisKKyAgICBhdXRvIHVzZWRPZmZzZXQgPSBvZmZzZXQudmFsdWVfb3Io
MCk7CisgICAgYXV0byB1c2VkU2l6ZSA9IHNpemUudmFsdWVfb3IoV0dQVV9XSE9MRV9TSVpFKTsK
KworICAgIG1fY2FsbGJhY2tzLmFwcGVuZChXVEZNb3ZlKGNhbGxiYWNrKSk7CisKKyAgICB3Z3B1
QnVmZmVyTWFwQXN5bmMobV9iYWNraW5nLCBiYWNraW5nTWFwTW9kZUZsYWdzLCB1c2VkT2Zmc2V0
LCB1c2VkU2l6ZSwgJldlYkdQVTo6bWFwQ2FsbGJhY2ssICZwcm90ZWN0ZWRUaGlzLmxlYWtSZWYo
KSk7IC8vIGxlYWtSZWYgaXMgYmFsYW5jZWQgYnkgYWRvcHRSZWYgaW4gbWFwQ2FsbGJhY2soKSBh
Ym92ZS4gV2UgaGF2ZSB0byBkbyB0aGlzIGJlY2F1c2Ugd2UncmUgdXNpbmcgYSBDIEFQSSB3aXRo
IG5vIGNvbmNlcHQgb2YgcmVmZXJlbmNlIGNvdW50aW5nIG9yIGJsb2Nrcy4KK30KKwordm9pZCBC
dWZmZXJJbXBsOjptYXBDYWxsYmFjayhXR1BVQnVmZmVyTWFwQXN5bmNTdGF0dXMgc3RhdHVzKQor
eworICAgIFVOVVNFRF9QQVJBTShzdGF0dXMpOworICAgIGF1dG8gY2FsbGJhY2sgPSBtX2NhbGxi
YWNrcy50YWtlRmlyc3QoKTsKKyAgICBjYWxsYmFjaygpOworfQorCithdXRvIEJ1ZmZlckltcGw6
OmdldE1hcHBlZFJhbmdlKHN0ZDo6b3B0aW9uYWw8U2l6ZTY0PiBvZmZzZXQsIHN0ZDo6b3B0aW9u
YWw8U2l6ZTY0PiBzaXplKSAtPiBNYXBwZWRSYW5nZQoreworICAgIGF1dG8gdXNlZE9mZnNldCA9
IG9mZnNldC52YWx1ZV9vcigwKTsKKyAgICBhdXRvIHVzZWRTaXplID0gc2l6ZS52YWx1ZV9vcihX
R1BVX1dIT0xFX1NJWkUpOworICAgIGF1dG8qIHBvaW50ZXIgPSB3Z3B1QnVmZmVyR2V0TWFwcGVk
UmFuZ2UobV9iYWNraW5nLCB1c2VkT2Zmc2V0LCB1c2VkU2l6ZSk7CisgICAgLy8gRklYTUU6IENo
ZWNrIHRoZSB0eXBlIG5hcnJvd2luZy4KKyAgICByZXR1cm4geyBwb2ludGVyLCBzdGF0aWNfY2Fz
dDxzaXplX3Q+KHVzZWRTaXplKSB9OworfQorCit2b2lkIEJ1ZmZlckltcGw6OnVubWFwKCkKK3sK
KyAgICB3Z3B1QnVmZmVyVW5tYXAobV9iYWNraW5nKTsKK30KKwordm9pZCBCdWZmZXJJbXBsOjpk
ZXN0cm95KCkKK3sKKyAgICB3Z3B1QnVmZmVyRGVzdHJveShtX2JhY2tpbmcpOworfQorCit2b2lk
IEJ1ZmZlckltcGw6OnNldExhYmVsSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBsYWJlbCkKK3sKKyAg
ICB3Z3B1QnVmZmVyU2V0TGFiZWwobV9iYWNraW5nLCBsYWJlbC51dGY4KCkuZGF0YSgpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQnVmZmVy
SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJH
UFVCdWZmZXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjNmNzVhODYyMDczZDAwNjY1ZTg4YjhlNzc0OTdl
ZWM4OWUzOWVjNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3Jh
cGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQnVmZmVySW1wbC5oCkBAIC0wLDAgKzEsNzEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYkdQVUJ1ZmZlci5oIgorI2lu
Y2x1ZGUgPFdlYkdQVS9XZWJHUFUuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKworbmFtZXNw
YWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworY2xhc3MgQnVmZmVySW1wbCBmaW5hbCA6
IHB1YmxpYyBCdWZmZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8QnVmZmVySW1wbD4gY3Jl
YXRlKFdHUFVCdWZmZXIgYnVmZmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgQnVmZmVySW1wbChidWZmZXIpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5CdWZmZXJJbXBs
KCk7CisKKyAgICBXR1BVQnVmZmVyIGJhY2tpbmcoKSBjb25zdCB7IHJldHVybiBtX2JhY2tpbmc7
IH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgdm9pZCBtYXBDYWxsYmFjayhXR1BVQnVmZmVyTWFw
QXN5bmNTdGF0dXMsIHZvaWQqIHVzZXJkYXRhKTsKKworICAgIEJ1ZmZlckltcGwoV0dQVUJ1ZmZl
cik7CisKKyAgICBCdWZmZXJJbXBsKGNvbnN0IEJ1ZmZlckltcGwmKSA9IGRlbGV0ZTsKKyAgICBC
dWZmZXJJbXBsKEJ1ZmZlckltcGwmJikgPSBkZWxldGU7CisgICAgQnVmZmVySW1wbCYgb3BlcmF0
b3I9KGNvbnN0IEJ1ZmZlckltcGwmKSA9IGRlbGV0ZTsKKyAgICBCdWZmZXJJbXBsJiBvcGVyYXRv
cj0oQnVmZmVySW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIHZvaWQgbWFwQ2FsbGJhY2soV0dQVUJ1
ZmZlck1hcEFzeW5jU3RhdHVzKTsKKyAgICB2b2lkIG1hcEFzeW5jKE1hcE1vZGVGbGFncywgc3Rk
OjpvcHRpb25hbDxTaXplNjQ+IG9mZnNldCwgc3RkOjpvcHRpb25hbDxTaXplNjQ+IHNpemVGb3JN
YXAsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiYmKSBmaW5hbDsKKyAgICBNYXBwZWRSYW5nZSBnZXRN
YXBwZWRSYW5nZShzdGQ6Om9wdGlvbmFsPFNpemU2ND4gb2Zmc2V0LCBzdGQ6Om9wdGlvbmFsPFNp
emU2ND4pIGZpbmFsOworICAgIHZvaWQgdW5tYXAoKSBmaW5hbDsKKworICAgIHZvaWQgZGVzdHJv
eSgpIGZpbmFsOworCisgICAgdm9pZCBzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYpIGZp
bmFsOworCisgICAgV0dQVUJ1ZmZlciBtX2JhY2tpbmcgeyBudWxscHRyIH07CisKKyAgICBEZXF1
ZTxzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4+IG1fY2FsbGJhY2tzOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwuY3Bw
IGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb21t
YW5kQnVmZmVySW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTU2NTlmYzY3YTdiNmQ0NDdmNTFlYWQwYWVi
ZTk1OWEzZWFkMTU3MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwv
Z3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwuY3BwCkBAIC0wLDAg
KzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
R1BVQ29tbWFuZEJ1ZmZlckltcGwuaCIKKworI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFVFeHQuaD4K
KworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworQ29tbWFuZEJ1ZmZlcklt
cGw6OkNvbW1hbmRCdWZmZXJJbXBsKFdHUFVDb21tYW5kQnVmZmVyIGNvbW1hbmRCdWZmZXIpCisg
ICAgOiBtX2JhY2tpbmcoY29tbWFuZEJ1ZmZlcikKK3sKK30KKworQ29tbWFuZEJ1ZmZlckltcGw6
On5Db21tYW5kQnVmZmVySW1wbCgpCit7CisgICAgd2dwdUNvbW1hbmRCdWZmZXJSZWxlYXNlKG1f
YmFja2luZyk7Cit9CisKK3ZvaWQgQ29tbWFuZEJ1ZmZlckltcGw6OnNldExhYmVsSW50ZXJuYWwo
Y29uc3QgU3RyaW5nJiBsYWJlbCkKK3sKKyAgICB3Z3B1Q29tbWFuZEJ1ZmZlclNldExhYmVsKG1f
YmFja2luZywgbGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBBTAor
fSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmggYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbW1hbmRCdWZmZXJJ
bXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNWEyZDdlODg0Y2RmMWNmMTU5NzBjOTNhMGI2YjY4NDYzMDVlOWI5
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2Vi
R1BVL0ltcGwvV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwuaApAQCAtMCwwICsxLDU5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJXZWJHUFVDb21tYW5kQnVmZmVyLmgi
CisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFj
ZSBXZWJHUFUgeworCitjbGFzcyBDb21tYW5kQnVmZmVySW1wbCBmaW5hbCA6IHB1YmxpYyBDb21t
YW5kQnVmZmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPENvbW1hbmRCdWZmZXJJbXBsPiBj
cmVhdGUoV0dQVUNvbW1hbmRCdWZmZXIgY29tbWFuZEJ1ZmZlcikKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IENvbW1hbmRCdWZmZXJJbXBsKGNvbW1hbmRCdWZmZXIpKTsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIH5Db21tYW5kQnVmZmVySW1wbCgpOworCisgICAgV0dQVUNvbW1h
bmRCdWZmZXIgYmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRl
OgorICAgIENvbW1hbmRCdWZmZXJJbXBsKFdHUFVDb21tYW5kQnVmZmVyKTsKKworICAgIENvbW1h
bmRCdWZmZXJJbXBsKGNvbnN0IENvbW1hbmRCdWZmZXJJbXBsJikgPSBkZWxldGU7CisgICAgQ29t
bWFuZEJ1ZmZlckltcGwoQ29tbWFuZEJ1ZmZlckltcGwmJikgPSBkZWxldGU7CisgICAgQ29tbWFu
ZEJ1ZmZlckltcGwmIG9wZXJhdG9yPShjb25zdCBDb21tYW5kQnVmZmVySW1wbCYpID0gZGVsZXRl
OworICAgIENvbW1hbmRCdWZmZXJJbXBsJiBvcGVyYXRvcj0oQ29tbWFuZEJ1ZmZlckltcGwmJikg
PSBkZWxldGU7CisKKyAgICB2b2lkIHNldExhYmVsSW50ZXJuYWwoY29uc3QgU3RyaW5nJikgZmlu
YWw7CisKKyAgICBXR1BVQ29tbWFuZEJ1ZmZlciBtX2JhY2tpbmcgeyBudWxscHRyIH07Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb21tYW5k
RW5jb2RlckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUv
SW1wbC9XZWJHUFVDb21tYW5kRW5jb2RlckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYyMjMyNjRmYzU3
Mjg4ZDVmZDk1YmY1MzY1MzUyYTcxYWNlZTk4MDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbW1hbmRFbmNvZGVy
SW1wbC5jcHAKQEAgLTAsMCArMSwyNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViR1BVQ29tbWFuZEVuY29kZXJJbXBsLmgiCisKKyNpbmNsdWRlICJX
ZWJHUFVCdWZmZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwuaCIK
KyNpbmNsdWRlICJXZWJHUFVDb21wdXRlUGFzc0VuY29kZXJJbXBsLmgiCisjaW5jbHVkZSAiV2Vi
R1BVQ29udmVydFRvQmFja2luZy5oIgorI2luY2x1ZGUgIldlYkdQVVF1ZXJ5U2V0SW1wbC5oIgor
I2luY2x1ZGUgIldlYkdQVVJlbmRlclBhc3NFbmNvZGVySW1wbC5oIgorI2luY2x1ZGUgIldlYkdQ
VVRleHR1cmVJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmgiCisjaW5j
bHVkZSA8V2ViR1BVL1dlYkdQVUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBX
ZWJHUFUgeworCitDb21tYW5kRW5jb2RlckltcGw6OkNvbW1hbmRFbmNvZGVySW1wbChXR1BVQ29t
bWFuZEVuY29kZXIgQ29tbWFuZEVuY29kZXIpCisgICAgOiBtX2JhY2tpbmcoQ29tbWFuZEVuY29k
ZXIpCit7Cit9CisKK0NvbW1hbmRFbmNvZGVySW1wbDo6fkNvbW1hbmRFbmNvZGVySW1wbCgpCit7
CisgICAgd2dwdUNvbW1hbmRFbmNvZGVyUmVsZWFzZShtX2JhY2tpbmcpOworfQorCitSZWY8UmVu
ZGVyUGFzc0VuY29kZXI+IENvbW1hbmRFbmNvZGVySW1wbDo6YmVnaW5SZW5kZXJQYXNzKGNvbnN0
IFJlbmRlclBhc3NEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIFZlY3RvcjxXR1BVUmVu
ZGVyUGFzc0NvbG9yQXR0YWNobWVudD4gY29sb3JBdHRhY2htZW50czsKKyAgICBmb3IgKGNvbnN0
IGF1dG8mIGNvbG9yQXR0YWNobWVudCA6IGRlc2NyaXB0b3IuY29sb3JBdHRhY2htZW50cykgewor
ICAgICAgICBjb2xvckF0dGFjaG1lbnRzLmFwcGVuZChXR1BVUmVuZGVyUGFzc0NvbG9yQXR0YWNo
bWVudCB7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBUZXh0dXJlVmlld0ltcGwmPihj
b2xvckF0dGFjaG1lbnQudmlldykuYmFja2luZygpLAorICAgICAgICAgICAgY29sb3JBdHRhY2ht
ZW50LnJlc29sdmVUYXJnZXQgPyBzdGF0aWNfY2FzdDxjb25zdCBUZXh0dXJlVmlld0ltcGwmPigq
Y29sb3JBdHRhY2htZW50LnJlc29sdmVUYXJnZXQpLmJhY2tpbmcoKSA6IG51bGxwdHIsCisgICAg
ICAgICAgICBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPExvYWRPcD4oY29sb3JBdHRhY2htZW50Lmxv
YWRWYWx1ZSkgPyBjb252ZXJ0VG9CYWNraW5nKHN0ZDo6Z2V0PExvYWRPcD4oY29sb3JBdHRhY2ht
ZW50LmxvYWRWYWx1ZSkpIDogV0dQVUxvYWRPcF9DbGVhciwKKyAgICAgICAgICAgIGNvbnZlcnRU
b0JhY2tpbmcoY29sb3JBdHRhY2htZW50LnN0b3JlT3ApLAorICAgICAgICAgICAgV1RGOjpzd2l0
Y2hPbihjb2xvckF0dGFjaG1lbnQubG9hZFZhbHVlLCBbXSAoTG9hZE9wKSAtPiBXR1BVQ29sb3Ig
eworICAgICAgICAgICAgICAgIHJldHVybiB7IDAsIDAsIDAsIDAgfTsKKyAgICAgICAgICAgIH0s
IFtdIChjb25zdCBWZWN0b3I8ZG91YmxlPiYgdmVjdG9yKSAtPiBXR1BVQ29sb3IgeworICAgICAg
ICAgICAgICAgIHJldHVybiBXR1BVQ29sb3IgeworICAgICAgICAgICAgICAgICAgICB2ZWN0b3Iu
c2l6ZSgpID4gMCA/IHZlY3RvclswXSA6IDAsCisgICAgICAgICAgICAgICAgICAgIHZlY3Rvci5z
aXplKCkgPiAxID8gdmVjdG9yWzFdIDogMCwKKyAgICAgICAgICAgICAgICAgICAgdmVjdG9yLnNp
emUoKSA+IDIgPyB2ZWN0b3JbMl0gOiAwLAorICAgICAgICAgICAgICAgICAgICB2ZWN0b3Iuc2l6
ZSgpID4gMyA/IHZlY3RvclszXSA6IDAsCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IH0sIFtdIChjb25zdCBDb2xvckRpY3QmIGNvbG9yKSAtPiBXR1BVQ29sb3IgeworICAgICAgICAg
ICAgICAgIHJldHVybiBXR1BVQ29sb3IgeworICAgICAgICAgICAgICAgICAgICBjb2xvci5yLAor
ICAgICAgICAgICAgICAgICAgICBjb2xvci5nLAorICAgICAgICAgICAgICAgICAgICBjb2xvci5i
LAorICAgICAgICAgICAgICAgICAgICBjb2xvci5hLAorICAgICAgICAgICAgICAgIH07CisgICAg
ICAgICAgICB9KSwKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxXR1BV
UmVuZGVyUGFzc0RlcHRoU3RlbmNpbEF0dGFjaG1lbnQ+IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQ7
CisgICAgaWYgKGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsQXR0YWNobWVudCkgeworICAgICAgICBk
ZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gV0dQVVJlbmRlclBhc3NEZXB0aFN0ZW5jaWxBdHRhY2ht
ZW50IHsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IFRleHR1cmVWaWV3SW1wbCY+KGRl
c2NyaXB0b3IuZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+dmlldykuYmFja2luZygpLAorICAgICAg
ICAgICAgc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxMb2FkT3A+KGRlc2NyaXB0b3IuZGVwdGhTdGVu
Y2lsQXR0YWNobWVudC0+ZGVwdGhMb2FkVmFsdWUpID8gY29udmVydFRvQmFja2luZyhzdGQ6Omdl
dDxMb2FkT3A+KGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+ZGVwdGhMb2FkVmFs
dWUpKSA6IFdHUFVMb2FkT3BfQ2xlYXIsCisgICAgICAgICAgICBjb252ZXJ0VG9CYWNraW5nKGRl
c2NyaXB0b3IuZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+ZGVwdGhTdG9yZU9wKSwKKyAgICAgICAg
ICAgIFdURjo6c3dpdGNoT24oZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWxBdHRhY2htZW50LT5kZXB0
aExvYWRWYWx1ZSwgW10gKExvYWRPcCkgLT4gZmxvYXQgeworICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgICAgfSwgW10gKGZsb2F0IGNsZWFyRGVwdGgpIC0+IGZsb2F0IHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gY2xlYXJEZXB0aDsKKyAgICAgICAgICAgIH0pLAorICAgICAg
ICAgICAgZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWxBdHRhY2htZW50LT5kZXB0aFJlYWRPbmx5LAor
ICAgICAgICAgICAgc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxMb2FkT3A+KGRlc2NyaXB0b3IuZGVw
dGhTdGVuY2lsQXR0YWNobWVudC0+c3RlbmNpbExvYWRWYWx1ZSkgPyBjb252ZXJ0VG9CYWNraW5n
KHN0ZDo6Z2V0PExvYWRPcD4oZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWxBdHRhY2htZW50LT5zdGVu
Y2lsTG9hZFZhbHVlKSkgOiBXR1BVTG9hZE9wX0NsZWFyLAorICAgICAgICAgICAgY29udmVydFRv
QmFja2luZyhkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQtPnN0ZW5jaWxTdG9yZU9w
KSwKKyAgICAgICAgICAgIFdURjo6c3dpdGNoT24oZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWxBdHRh
Y2htZW50LT5zdGVuY2lsTG9hZFZhbHVlLCBbXSAoTG9hZE9wKSAtPiB1aW50MzJfdCB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9LCBbXSAoU3RlbmNpbFZhbHVlIGNs
ZWFyU3RlbmNpbCkgLT4gdWludDMyX3QgeworICAgICAgICAgICAgICAgIHJldHVybiBjbGVhclN0
ZW5jaWw7CisgICAgICAgICAgICB9KSwKKyAgICAgICAgICAgIGRlc2NyaXB0b3IuZGVwdGhTdGVu
Y2lsQXR0YWNobWVudC0+c3RlbmNpbFJlYWRPbmx5LAorICAgICAgICB9OworICAgIH0KKworICAg
IGF1dG8gbGFiZWwgPSBkZXNjcmlwdG9yLmxhYmVsLnV0ZjgoKTsKKworICAgIFdHUFVSZW5kZXJQ
YXNzRGVzY3JpcHRvciBiYWNraW5nRGVzY3JpcHRvciB7CisgICAgICAgIG51bGxwdHIsCisgICAg
ICAgIGxhYmVsLmRhdGEoKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNvbG9yQXR0
YWNobWVudHMuc2l6ZSgpKSwKKyAgICAgICAgY29sb3JBdHRhY2htZW50cy5kYXRhKCksCisgICAg
ICAgIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPyAmZGVwdGhTdGVuY2lsQXR0YWNobWVudC52YWx1
ZSgpIDogbnVsbHB0ciwKKyAgICAgICAgZGVzY3JpcHRvci5vY2NsdXNpb25RdWVyeVNldCA/IHN0
YXRpY19jYXN0PGNvbnN0IFF1ZXJ5U2V0SW1wbCY+KCpkZXNjcmlwdG9yLm9jY2x1c2lvblF1ZXJ5
U2V0KS5iYWNraW5nKCkgOiBudWxscHRyLAorICAgIH07CisKKyAgICByZXR1cm4gUmVuZGVyUGFz
c0VuY29kZXJJbXBsOjpjcmVhdGUod2dwdUNvbW1hbmRFbmNvZGVyQmVnaW5SZW5kZXJQYXNzKG1f
YmFja2luZywgJmJhY2tpbmdEZXNjcmlwdG9yKSk7Cit9CisKK1JlZjxDb21wdXRlUGFzc0VuY29k
ZXI+IENvbW1hbmRFbmNvZGVySW1wbDo6YmVnaW5Db21wdXRlUGFzcyhjb25zdCBzdGQ6Om9wdGlv
bmFsPENvbXB1dGVQYXNzRGVzY3JpcHRvcj4mIGRlc2NyaXB0b3IpCit7CisgICAgQ1N0cmluZyBs
YWJlbCA9IGRlc2NyaXB0b3IgPyBkZXNjcmlwdG9yLT5sYWJlbC51dGY4KCkgOiBDU3RyaW5nKCIi
KTsKKworICAgIFdHUFVDb21wdXRlUGFzc0Rlc2NyaXB0b3IgYmFja2luZ0Rlc2NyaXB0b3Igewor
ICAgICAgICBudWxscHRyLAorICAgICAgICBsYWJlbC5kYXRhKCksCisgICAgfTsKKworICAgIHJl
dHVybiBDb21wdXRlUGFzc0VuY29kZXJJbXBsOjpjcmVhdGUod2dwdUNvbW1hbmRFbmNvZGVyQmVn
aW5Db21wdXRlUGFzcyhtX2JhY2tpbmcsICZiYWNraW5nRGVzY3JpcHRvcikpOworfQorCit2b2lk
IENvbW1hbmRFbmNvZGVySW1wbDo6Y29weUJ1ZmZlclRvQnVmZmVyKAorICAgIGNvbnN0IEJ1ZmZl
ciYgc291cmNlLAorICAgIFNpemU2NCBzb3VyY2VPZmZzZXQsCisgICAgY29uc3QgQnVmZmVyJiBk
ZXN0aW5hdGlvbiwKKyAgICBTaXplNjQgZGVzdGluYXRpb25PZmZzZXQsCisgICAgU2l6ZTY0IHNp
emUpCit7CisgICAgd2dwdUNvbW1hbmRFbmNvZGVyQ29weUJ1ZmZlclRvQnVmZmVyKG1fYmFja2lu
Zywgc3RhdGljX2Nhc3Q8Y29uc3QgQnVmZmVySW1wbCY+KHNvdXJjZSkuYmFja2luZygpLCBzb3Vy
Y2VPZmZzZXQsIHN0YXRpY19jYXN0PGNvbnN0IEJ1ZmZlckltcGwmPihkZXN0aW5hdGlvbikuYmFj
a2luZygpLCBkZXN0aW5hdGlvbk9mZnNldCwgc2l6ZSk7Cit9CisKK3ZvaWQgQ29tbWFuZEVuY29k
ZXJJbXBsOjpjb3B5QnVmZmVyVG9UZXh0dXJlKAorICAgIGNvbnN0IEltYWdlQ29weUJ1ZmZlciYg
c291cmNlLAorICAgIGNvbnN0IEltYWdlQ29weVRleHR1cmUmIGRlc3RpbmF0aW9uLAorICAgIGNv
bnN0IEV4dGVudDNEJiBjb3B5U2l6ZSkKK3sKKyAgICBXR1BVSW1hZ2VDb3B5QnVmZmVyIGJhY2tp
bmdTb3VyY2UgeworICAgICAgICBudWxscHRyLCB7CisgICAgICAgICAgICBudWxscHRyLAorICAg
ICAgICAgICAgc291cmNlLm9mZnNldCwKKyAgICAgICAgICAgIHNvdXJjZS5ieXRlc1BlclJvdy52
YWx1ZV9vcigwKSwKKyAgICAgICAgICAgIHNvdXJjZS5yb3dzUGVySW1hZ2UudmFsdWVfb3IoMCks
CisgICAgICAgIH0sCisgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IEJ1ZmZlckltcGwmPihzb3Vy
Y2UuYnVmZmVyKS5iYWNraW5nKCksCisgICAgfTsKKworICAgIFdHUFVJbWFnZUNvcHlUZXh0dXJl
IGJhY2tpbmdEZXN0aW5hdGlvbiB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIHN0YXRpY19j
YXN0PGNvbnN0IFRleHR1cmVJbXBsJj4oZGVzdGluYXRpb24udGV4dHVyZSkuYmFja2luZygpLAor
ICAgICAgICBkZXN0aW5hdGlvbi5taXBMZXZlbCwKKyAgICAgICAgZGVzdGluYXRpb24ub3JpZ2lu
ID8gY29udmVydFRvQmFja2luZygqZGVzdGluYXRpb24ub3JpZ2luKSA6IFdHUFVPcmlnaW4zRCB7
IDAsIDAsIDAgfSwKKyAgICAgICAgY29udmVydFRvQmFja2luZyhkZXN0aW5hdGlvbi5hc3BlY3Qp
LAorICAgIH07CisKKyAgICBXR1BVRXh0ZW50M0QgYmFja2luZ0NvcHlTaXplID0gY29udmVydFRv
QmFja2luZyhjb3B5U2l6ZSk7CisKKyAgICB3Z3B1Q29tbWFuZEVuY29kZXJDb3B5QnVmZmVyVG9U
ZXh0dXJlKG1fYmFja2luZywgJmJhY2tpbmdTb3VyY2UsICZiYWNraW5nRGVzdGluYXRpb24sICZi
YWNraW5nQ29weVNpemUpOworfQorCit2b2lkIENvbW1hbmRFbmNvZGVySW1wbDo6Y29weVRleHR1
cmVUb0J1ZmZlcigKKyAgICBjb25zdCBJbWFnZUNvcHlUZXh0dXJlJiBzb3VyY2UsCisgICAgY29u
c3QgSW1hZ2VDb3B5QnVmZmVyJiBkZXN0aW5hdGlvbiwKKyAgICBjb25zdCBFeHRlbnQzRCYgY29w
eVNpemUpCit7CisgICAgV0dQVUltYWdlQ29weVRleHR1cmUgYmFja2luZ1NvdXJjZSB7CisgICAg
ICAgIG51bGxwdHIsCisgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IFRleHR1cmVJbXBsJj4oc291
cmNlLnRleHR1cmUpLmJhY2tpbmcoKSwKKyAgICAgICAgc291cmNlLm1pcExldmVsLAorICAgICAg
ICBzb3VyY2Uub3JpZ2luID8gY29udmVydFRvQmFja2luZygqc291cmNlLm9yaWdpbikgOiBXR1BV
T3JpZ2luM0QgeyAwLCAwLCAwIH0sCisgICAgICAgIGNvbnZlcnRUb0JhY2tpbmcoc291cmNlLmFz
cGVjdCksCisgICAgfTsKKworICAgIFdHUFVJbWFnZUNvcHlCdWZmZXIgYmFja2luZ0Rlc3RpbmF0
aW9uIHsKKyAgICAgICAgbnVsbHB0ciwgeworICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAg
ICAgIGRlc3RpbmF0aW9uLm9mZnNldCwKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uLmJ5dGVzUGVy
Um93LnZhbHVlX29yKDApLAorICAgICAgICAgICAgZGVzdGluYXRpb24ucm93c1BlckltYWdlLnZh
bHVlX29yKDApLAorICAgICAgICB9LAorICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBCdWZmZXJJ
bXBsJj4oZGVzdGluYXRpb24uYnVmZmVyKS5iYWNraW5nKCksCisgICAgfTsKKworICAgIFdHUFVF
eHRlbnQzRCBiYWNraW5nQ29weVNpemUgPSBjb252ZXJ0VG9CYWNraW5nKGNvcHlTaXplKTsKKwor
ICAgIHdncHVDb21tYW5kRW5jb2RlckNvcHlUZXh0dXJlVG9CdWZmZXIobV9iYWNraW5nLCAmYmFj
a2luZ1NvdXJjZSwgJmJhY2tpbmdEZXN0aW5hdGlvbiwgJmJhY2tpbmdDb3B5U2l6ZSk7Cit9CisK
K3ZvaWQgQ29tbWFuZEVuY29kZXJJbXBsOjpjb3B5VGV4dHVyZVRvVGV4dHVyZSgKKyAgICBjb25z
dCBJbWFnZUNvcHlUZXh0dXJlJiBzb3VyY2UsCisgICAgY29uc3QgSW1hZ2VDb3B5VGV4dHVyZSYg
ZGVzdGluYXRpb24sCisgICAgY29uc3QgRXh0ZW50M0QmIGNvcHlTaXplKQoreworICAgIFdHUFVJ
bWFnZUNvcHlUZXh0dXJlIGJhY2tpbmdTb3VyY2UgeworICAgICAgICBudWxscHRyLAorICAgICAg
ICBzdGF0aWNfY2FzdDxjb25zdCBUZXh0dXJlSW1wbCY+KHNvdXJjZS50ZXh0dXJlKS5iYWNraW5n
KCksCisgICAgICAgIHNvdXJjZS5taXBMZXZlbCwKKyAgICAgICAgc291cmNlLm9yaWdpbiA/IGNv
bnZlcnRUb0JhY2tpbmcoKnNvdXJjZS5vcmlnaW4pIDogV0dQVU9yaWdpbjNEIHsgMCwgMCwgMCB9
LAorICAgICAgICBjb252ZXJ0VG9CYWNraW5nKHNvdXJjZS5hc3BlY3QpLAorICAgIH07CisKKyAg
ICBXR1BVSW1hZ2VDb3B5VGV4dHVyZSBiYWNraW5nRGVzdGluYXRpb24geworICAgICAgICBudWxs
cHRyLAorICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBUZXh0dXJlSW1wbCY+KGRlc3RpbmF0aW9u
LnRleHR1cmUpLmJhY2tpbmcoKSwKKyAgICAgICAgZGVzdGluYXRpb24ubWlwTGV2ZWwsCisgICAg
ICAgIGRlc3RpbmF0aW9uLm9yaWdpbiA/IGNvbnZlcnRUb0JhY2tpbmcoKmRlc3RpbmF0aW9uLm9y
aWdpbikgOiBXR1BVT3JpZ2luM0QgeyAwLCAwLCAwIH0sCisgICAgICAgIGNvbnZlcnRUb0JhY2tp
bmcoZGVzdGluYXRpb24uYXNwZWN0KSwKKyAgICB9OworCisgICAgV0dQVUV4dGVudDNEIGJhY2tp
bmdDb3B5U2l6ZSA9IGNvbnZlcnRUb0JhY2tpbmcoY29weVNpemUpOworCisgICAgd2dwdUNvbW1h
bmRFbmNvZGVyQ29weVRleHR1cmVUb1RleHR1cmUobV9iYWNraW5nLCAmYmFja2luZ1NvdXJjZSwg
JmJhY2tpbmdEZXN0aW5hdGlvbiwgJmJhY2tpbmdDb3B5U2l6ZSk7Cit9CisKK3ZvaWQgQ29tbWFu
ZEVuY29kZXJJbXBsOjpmaWxsQnVmZmVyKAorICAgIGNvbnN0IEJ1ZmZlciYgZGVzdGluYXRpb24s
CisgICAgU2l6ZTY0IGRlc3RpbmF0aW9uT2Zmc2V0LAorICAgIFNpemU2NCBzaXplKQoreworICAg
IHdncHVDb21tYW5kRW5jb2RlckZpbGxCdWZmZXIobV9iYWNraW5nLCBzdGF0aWNfY2FzdDxjb25z
dCBCdWZmZXJJbXBsJj4oZGVzdGluYXRpb24pLmJhY2tpbmcoKSwgZGVzdGluYXRpb25PZmZzZXQs
IHNpemUpOworfQorCit2b2lkIENvbW1hbmRFbmNvZGVySW1wbDo6cHVzaERlYnVnR3JvdXAoU3Ry
aW5nJiYgZ3JvdXBMYWJlbCkKK3sKKyAgICB3Z3B1Q29tbWFuZEVuY29kZXJQdXNoRGVidWdHcm91
cChtX2JhY2tpbmcsIGdyb3VwTGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgQ29tbWFu
ZEVuY29kZXJJbXBsOjpwb3BEZWJ1Z0dyb3VwKCkKK3sKKyAgICB3Z3B1Q29tbWFuZEVuY29kZXJQ
b3BEZWJ1Z0dyb3VwKG1fYmFja2luZyk7Cit9CisKK3ZvaWQgQ29tbWFuZEVuY29kZXJJbXBsOjpp
bnNlcnREZWJ1Z01hcmtlcihTdHJpbmcmJiBtYXJrZXJMYWJlbCkKK3sKKyAgICB3Z3B1Q29tbWFu
ZEVuY29kZXJJbnNlcnREZWJ1Z01hcmtlcihtX2JhY2tpbmcsIG1hcmtlckxhYmVsLnV0ZjgoKS5k
YXRhKCkpOworfQorCit2b2lkIENvbW1hbmRFbmNvZGVySW1wbDo6d3JpdGVUaW1lc3RhbXAoY29u
c3QgUXVlcnlTZXQmIHF1ZXJ5U2V0LCBTaXplMzIgcXVlcnlJbmRleCkKK3sKKyAgICB3Z3B1Q29t
bWFuZEVuY29kZXJXcml0ZVRpbWVzdGFtcChtX2JhY2tpbmcsIHN0YXRpY19jYXN0PGNvbnN0IFF1
ZXJ5U2V0SW1wbCY+KHF1ZXJ5U2V0KS5iYWNraW5nKCksIHF1ZXJ5SW5kZXgpOworfQorCit2b2lk
IENvbW1hbmRFbmNvZGVySW1wbDo6cmVzb2x2ZVF1ZXJ5U2V0KAorICAgIGNvbnN0IFF1ZXJ5U2V0
JiBxdWVyeVNldCwKKyAgICBTaXplMzIgZmlyc3RRdWVyeSwKKyAgICBTaXplMzIgcXVlcnlDb3Vu
dCwKKyAgICBjb25zdCBCdWZmZXImIGRlc3RpbmF0aW9uLAorICAgIFNpemU2NCBkZXN0aW5hdGlv
bk9mZnNldCkKK3sKKyAgICB3Z3B1Q29tbWFuZEVuY29kZXJSZXNvbHZlUXVlcnlTZXQobV9iYWNr
aW5nLCBzdGF0aWNfY2FzdDxjb25zdCBRdWVyeVNldEltcGwmPihxdWVyeVNldCkuYmFja2luZygp
LCBmaXJzdFF1ZXJ5LCBxdWVyeUNvdW50LCBzdGF0aWNfY2FzdDxjb25zdCBCdWZmZXJJbXBsJj4o
ZGVzdGluYXRpb24pLmJhY2tpbmcoKSwgZGVzdGluYXRpb25PZmZzZXQpOworfQorCitSZWY8Q29t
bWFuZEJ1ZmZlcj4gQ29tbWFuZEVuY29kZXJJbXBsOjpmaW5pc2goY29uc3QgQ29tbWFuZEJ1ZmZl
ckRlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgYXV0byBsYWJlbCA9IGRlc2NyaXB0b3Iu
bGFiZWwudXRmOCgpOworCisgICAgV0dQVUNvbW1hbmRCdWZmZXJEZXNjcmlwdG9yIGJhY2tpbmdE
ZXNjcmlwdG9yIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgbGFiZWwuZGF0YSgpLAorICAg
IH07CisKKyAgICByZXR1cm4gQ29tbWFuZEJ1ZmZlckltcGw6OmNyZWF0ZSh3Z3B1Q29tbWFuZEVu
Y29kZXJGaW5pc2gobV9iYWNraW5nLCAmYmFja2luZ0Rlc2NyaXB0b3IpKTsKK30KKwordm9pZCBD
b21tYW5kRW5jb2RlckltcGw6OnNldExhYmVsSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBsYWJlbCkK
K3sKKyAgICB3Z3B1Q29tbWFuZEVuY29kZXJTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVsLnV0Zjgo
KS5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQ
VQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1w
bC9XZWJHUFVDb21tYW5kRW5jb2RlckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3Jh
cGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tbWFuZEVuY29kZXJJbXBsLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZjgwYWFhYzg2MDcxMmU0Yzc1YWNlMTkxNzcxNzZjNDE1MjlhYTgyYgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29t
bWFuZEVuY29kZXJJbXBsLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIldlYkdQVUNvbW1hbmRFbmNvZGVyLmgiCisjaW5jbHVkZSA8V2Vi
R1BVL1dlYkdQVS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitj
bGFzcyBDb21tYW5kRW5jb2RlckltcGwgZmluYWwgOiBwdWJsaWMgQ29tbWFuZEVuY29kZXIgewor
cHVibGljOgorICAgIHN0YXRpYyBSZWY8Q29tbWFuZEVuY29kZXJJbXBsPiBjcmVhdGUoV0dQVUNv
bW1hbmRFbmNvZGVyIENvbW1hbmRFbmNvZGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgQ29tbWFuZEVuY29kZXJJbXBsKENvbW1hbmRFbmNvZGVyKSk7CisgICAgfQorCisg
ICAgdmlydHVhbCB+Q29tbWFuZEVuY29kZXJJbXBsKCk7CisKKyAgICBXR1BVQ29tbWFuZEVuY29k
ZXIgYmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgorICAg
IENvbW1hbmRFbmNvZGVySW1wbChXR1BVQ29tbWFuZEVuY29kZXIpOworCisgICAgQ29tbWFuZEVu
Y29kZXJJbXBsKGNvbnN0IENvbW1hbmRFbmNvZGVySW1wbCYpID0gZGVsZXRlOworICAgIENvbW1h
bmRFbmNvZGVySW1wbChDb21tYW5kRW5jb2RlckltcGwmJikgPSBkZWxldGU7CisgICAgQ29tbWFu
ZEVuY29kZXJJbXBsJiBvcGVyYXRvcj0oY29uc3QgQ29tbWFuZEVuY29kZXJJbXBsJikgPSBkZWxl
dGU7CisgICAgQ29tbWFuZEVuY29kZXJJbXBsJiBvcGVyYXRvcj0oQ29tbWFuZEVuY29kZXJJbXBs
JiYpID0gZGVsZXRlOworCisgICAgUmVmPFJlbmRlclBhc3NFbmNvZGVyPiBiZWdpblJlbmRlclBh
c3MoY29uc3QgUmVuZGVyUGFzc0Rlc2NyaXB0b3ImKSBmaW5hbDsKKyAgICBSZWY8Q29tcHV0ZVBh
c3NFbmNvZGVyPiBiZWdpbkNvbXB1dGVQYXNzKGNvbnN0IHN0ZDo6b3B0aW9uYWw8Q29tcHV0ZVBh
c3NEZXNjcmlwdG9yPiYpIGZpbmFsOworCisgICAgdm9pZCBjb3B5QnVmZmVyVG9CdWZmZXIoCisg
ICAgICAgIGNvbnN0IEJ1ZmZlciYgc291cmNlLAorICAgICAgICBTaXplNjQgc291cmNlT2Zmc2V0
LAorICAgICAgICBjb25zdCBCdWZmZXImIGRlc3RpbmF0aW9uLAorICAgICAgICBTaXplNjQgZGVz
dGluYXRpb25PZmZzZXQsCisgICAgICAgIFNpemU2NCkgZmluYWw7CisKKyAgICB2b2lkIGNvcHlC
dWZmZXJUb1RleHR1cmUoCisgICAgICAgIGNvbnN0IEltYWdlQ29weUJ1ZmZlciYgc291cmNlLAor
ICAgICAgICBjb25zdCBJbWFnZUNvcHlUZXh0dXJlJiBkZXN0aW5hdGlvbiwKKyAgICAgICAgY29u
c3QgRXh0ZW50M0QmIGNvcHlTaXplKSBmaW5hbDsKKworICAgIHZvaWQgY29weVRleHR1cmVUb0J1
ZmZlcigKKyAgICAgICAgY29uc3QgSW1hZ2VDb3B5VGV4dHVyZSYgc291cmNlLAorICAgICAgICBj
b25zdCBJbWFnZUNvcHlCdWZmZXImIGRlc3RpbmF0aW9uLAorICAgICAgICBjb25zdCBFeHRlbnQz
RCYgY29weVNpemUpIGZpbmFsOworCisgICAgdm9pZCBjb3B5VGV4dHVyZVRvVGV4dHVyZSgKKyAg
ICAgICAgY29uc3QgSW1hZ2VDb3B5VGV4dHVyZSYgc291cmNlLAorICAgICAgICBjb25zdCBJbWFn
ZUNvcHlUZXh0dXJlJiBkZXN0aW5hdGlvbiwKKyAgICAgICAgY29uc3QgRXh0ZW50M0QmIGNvcHlT
aXplKSBmaW5hbDsKKworICAgIHZvaWQgZmlsbEJ1ZmZlcigKKyAgICAgICAgY29uc3QgQnVmZmVy
JiBkZXN0aW5hdGlvbiwKKyAgICAgICAgU2l6ZTY0IGRlc3RpbmF0aW9uT2Zmc2V0LAorICAgICAg
ICBTaXplNjQpIGZpbmFsOworCisgICAgdm9pZCBwdXNoRGVidWdHcm91cChTdHJpbmcmJiBncm91
cExhYmVsKSBmaW5hbDsKKyAgICB2b2lkIHBvcERlYnVnR3JvdXAoKSBmaW5hbDsKKyAgICB2b2lk
IGluc2VydERlYnVnTWFya2VyKFN0cmluZyYmIG1hcmtlckxhYmVsKSBmaW5hbDsKKworICAgIHZv
aWQgd3JpdGVUaW1lc3RhbXAoY29uc3QgUXVlcnlTZXQmLCBTaXplMzIgcXVlcnlJbmRleCkgZmlu
YWw7CisKKyAgICB2b2lkIHJlc29sdmVRdWVyeVNldCgKKyAgICAgICAgY29uc3QgUXVlcnlTZXQm
LAorICAgICAgICBTaXplMzIgZmlyc3RRdWVyeSwKKyAgICAgICAgU2l6ZTMyIHF1ZXJ5Q291bnQs
CisgICAgICAgIGNvbnN0IEJ1ZmZlciYgZGVzdGluYXRpb24sCisgICAgICAgIFNpemU2NCBkZXN0
aW5hdGlvbk9mZnNldCkgZmluYWw7CisKKyAgICBSZWY8Q29tbWFuZEJ1ZmZlcj4gZmluaXNoKGNv
bnN0IENvbW1hbmRCdWZmZXJEZXNjcmlwdG9yJikgZmluYWw7CisKKyAgICB2b2lkIHNldExhYmVs
SW50ZXJuYWwoY29uc3QgU3RyaW5nJikgZmluYWw7CisKKyAgICBXR1BVQ29tbWFuZEVuY29kZXIg
bV9iYWNraW5nIHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5h
bWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhp
Y3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbXB1dGVQYXNzRW5j
b2RlckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFiYzE2ZDQ0YThhMzRhOThiMTVhZGMxMmI5NzBiZTE4
YmE4ZTJlYmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBo
aWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbXB1dGVQYXNzRW5jb2RlckltcGwuY3BwCkBAIC0wLDAg
KzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
YkdQVUNvbXB1dGVQYXNzRW5jb2RlckltcGwuaCIKKworI2luY2x1ZGUgIldlYkdQVUJpbmRHcm91
cEltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVCdWZmZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BV
Q29tcHV0ZVBpcGVsaW5lSW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVVF1ZXJ5U2V0SW1wbC5oIgor
I2luY2x1ZGUgPFdlYkdQVS9XZWJHUFVFeHQuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3Bh
Y2UgV2ViR1BVIHsKKworQ29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6Q29tcHV0ZVBhc3NFbmNvZGVy
SW1wbChXR1BVQ29tcHV0ZVBhc3NFbmNvZGVyIGNvbXB1dGVQYXNzRW5jb2RlcikKKyAgICA6IG1f
YmFja2luZyhjb21wdXRlUGFzc0VuY29kZXIpCit7Cit9CisKK0NvbXB1dGVQYXNzRW5jb2Rlcklt
cGw6On5Db21wdXRlUGFzc0VuY29kZXJJbXBsKCkKK3sKKyAgICB3Z3B1Q29tcHV0ZVBhc3NFbmNv
ZGVyUmVsZWFzZShtX2JhY2tpbmcpOworfQorCit2b2lkIENvbXB1dGVQYXNzRW5jb2RlckltcGw6
OnNldFBpcGVsaW5lKGNvbnN0IENvbXB1dGVQaXBlbGluZSYgY29tcHV0ZVBpcGVsaW5lKQorewor
ICAgIHdncHVDb21wdXRlUGFzc0VuY29kZXJTZXRQaXBlbGluZShtX2JhY2tpbmcsIHN0YXRpY19j
YXN0PGNvbnN0IENvbXB1dGVQaXBlbGluZUltcGwmPihjb21wdXRlUGlwZWxpbmUpLmJhY2tpbmco
KSk7Cit9CisKK3ZvaWQgQ29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6ZGlzcGF0Y2goU2l6ZTMyIHgs
IHN0ZDo6b3B0aW9uYWw8U2l6ZTMyPiB5LCBzdGQ6Om9wdGlvbmFsPFNpemUzMj4geikKK3sKKyAg
ICB3Z3B1Q29tcHV0ZVBhc3NFbmNvZGVyRGlzcGF0Y2gobV9iYWNraW5nLCB4LCB5LnZhbHVlX29y
KDEpLCB6LnZhbHVlX29yKDEpKTsKK30KKwordm9pZCBDb21wdXRlUGFzc0VuY29kZXJJbXBsOjpk
aXNwYXRjaEluZGlyZWN0KGNvbnN0IEJ1ZmZlciYgaW5kaXJlY3RCdWZmZXIsIFNpemU2NCBpbmRp
cmVjdE9mZnNldCkKK3sKKyAgICB3Z3B1Q29tcHV0ZVBhc3NFbmNvZGVyRGlzcGF0Y2hJbmRpcmVj
dChtX2JhY2tpbmcsIHN0YXRpY19jYXN0PGNvbnN0IEJ1ZmZlckltcGwmPihpbmRpcmVjdEJ1ZmZl
cikuYmFja2luZygpLCBpbmRpcmVjdE9mZnNldCk7Cit9CisKK3ZvaWQgQ29tcHV0ZVBhc3NFbmNv
ZGVySW1wbDo6YmVnaW5QaXBlbGluZVN0YXRpc3RpY3NRdWVyeShjb25zdCBRdWVyeVNldCYgcXVl
cnlTZXQsIFNpemUzMiBxdWVyeUluZGV4KQoreworICAgIHdncHVDb21wdXRlUGFzc0VuY29kZXJC
ZWdpblBpcGVsaW5lU3RhdGlzdGljc1F1ZXJ5KG1fYmFja2luZywgc3RhdGljX2Nhc3Q8Y29uc3Qg
UXVlcnlTZXRJbXBsJj4ocXVlcnlTZXQpLmJhY2tpbmcoKSwgcXVlcnlJbmRleCk7Cit9CisKK3Zv
aWQgQ29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6ZW5kUGlwZWxpbmVTdGF0aXN0aWNzUXVlcnkoKQor
eworICAgIHdncHVDb21wdXRlUGFzc0VuY29kZXJFbmRQaXBlbGluZVN0YXRpc3RpY3NRdWVyeSht
X2JhY2tpbmcpOworfQorCit2b2lkIENvbXB1dGVQYXNzRW5jb2RlckltcGw6OmVuZFBhc3MoKQor
eworICAgIHdncHVDb21wdXRlUGFzc0VuY29kZXJFbmRQYXNzKG1fYmFja2luZyk7Cit9CisKK3Zv
aWQgQ29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6c2V0QmluZEdyb3VwKEluZGV4MzIgaW5kZXgsIGNv
bnN0IEJpbmRHcm91cCYgYmluZEdyb3VwLAorICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPEJ1ZmZl
ckR5bmFtaWNPZmZzZXQ+PiYmIG9mZnNldHMpCit7CisgICAgYXV0byBiYWNraW5nT2Zmc2V0cyA9
IG9mZnNldHMudmFsdWVfb3IoVmVjdG9yPEJ1ZmZlckR5bmFtaWNPZmZzZXQ+IHsgfSk7CisgICAg
d2dwdUNvbXB1dGVQYXNzRW5jb2RlclNldEJpbmRHcm91cChtX2JhY2tpbmcsIGluZGV4LCBzdGF0
aWNfY2FzdDxjb25zdCBCaW5kR3JvdXBJbXBsJj4oYmluZEdyb3VwKS5iYWNraW5nKCksIHN0YXRp
Y19jYXN0PHVpbnQzMl90PihiYWNraW5nT2Zmc2V0cy5zaXplKCkpLCBiYWNraW5nT2Zmc2V0cy5k
YXRhKCkpOworfQorCit2b2lkIENvbXB1dGVQYXNzRW5jb2RlckltcGw6OnNldEJpbmRHcm91cChJ
bmRleDMyIGluZGV4LCBjb25zdCBCaW5kR3JvdXAmIGJpbmRHcm91cCwKKyAgICBjb25zdCB1aW50
MzJfdCogZHluYW1pY09mZnNldHNBcnJheUJ1ZmZlciwKKyAgICBzaXplX3QgZHluYW1pY09mZnNl
dHNBcnJheUJ1ZmZlckxlbmd0aCwKKyAgICBTaXplNjQgZHluYW1pY09mZnNldHNEYXRhU3RhcnQs
CisgICAgU2l6ZTMyIGR5bmFtaWNPZmZzZXRzRGF0YUxlbmd0aCkKK3sKKyAgICBVTlVTRURfUEFS
QU0oZHluYW1pY09mZnNldHNBcnJheUJ1ZmZlckxlbmd0aCk7CisgICAgLy8gRklYTUU6IFVzZSBj
aGVja2VkIGFsZ2VicmEuCisgICAgd2dwdUNvbXB1dGVQYXNzRW5jb2RlclNldEJpbmRHcm91cCht
X2JhY2tpbmcsIGluZGV4LCBzdGF0aWNfY2FzdDxjb25zdCBCaW5kR3JvdXBJbXBsJj4oYmluZEdy
b3VwKS5iYWNraW5nKCksIGR5bmFtaWNPZmZzZXRzRGF0YUxlbmd0aCwgZHluYW1pY09mZnNldHNB
cnJheUJ1ZmZlciArIGR5bmFtaWNPZmZzZXRzRGF0YVN0YXJ0KTsKK30KKwordm9pZCBDb21wdXRl
UGFzc0VuY29kZXJJbXBsOjpwdXNoRGVidWdHcm91cChTdHJpbmcmJiBncm91cExhYmVsKQorewor
ICAgIHdncHVDb21wdXRlUGFzc0VuY29kZXJQdXNoRGVidWdHcm91cChtX2JhY2tpbmcsIGdyb3Vw
TGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgQ29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6
cG9wRGVidWdHcm91cCgpCit7CisgICAgd2dwdUNvbXB1dGVQYXNzRW5jb2RlclBvcERlYnVnR3Jv
dXAobV9iYWNraW5nKTsKK30KKwordm9pZCBDb21wdXRlUGFzc0VuY29kZXJJbXBsOjppbnNlcnRE
ZWJ1Z01hcmtlcihTdHJpbmcmJiBtYXJrZXJMYWJlbCkKK3sKKyAgICB3Z3B1Q29tcHV0ZVBhc3NF
bmNvZGVySW5zZXJ0RGVidWdNYXJrZXIobV9iYWNraW5nLCBtYXJrZXJMYWJlbC51dGY4KCkuZGF0
YSgpKTsKK30KKwordm9pZCBDb21wdXRlUGFzc0VuY29kZXJJbXBsOjpzZXRMYWJlbEludGVybmFs
KGNvbnN0IFN0cmluZyYgbGFiZWwpCit7CisgICAgd2dwdUNvbXB1dGVQYXNzRW5jb2RlclNldExh
YmVsKG1fYmFja2luZywgbGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Q
QUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbXB1dGVQYXNzRW5jb2RlckltcGwu
aCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29t
cHV0ZVBhc3NFbmNvZGVySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFiZThhZGRmMjNmZjdhYWZjN2Q2ZWEw
NTYzMDg1NzdlZTJkZTkwYmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbXB1dGVQYXNzRW5jb2RlckltcGwuaApA
QCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJX
ZWJHUFVDb21wdXRlUGFzc0VuY29kZXIuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVLmg+CisK
K25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK2NsYXNzIENvbXB1dGVQYXNz
RW5jb2RlckltcGwgZmluYWwgOiBwdWJsaWMgQ29tcHV0ZVBhc3NFbmNvZGVyIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmPENvbXB1dGVQYXNzRW5jb2RlckltcGw+IGNyZWF0ZShXR1BVQ29tcHV0
ZVBhc3NFbmNvZGVyIGNvbXB1dGVQYXNzRW5jb2RlcikKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IENvbXB1dGVQYXNzRW5jb2RlckltcGwoY29tcHV0ZVBhc3NFbmNvZGVyKSk7
CisgICAgfQorCisgICAgdmlydHVhbCB+Q29tcHV0ZVBhc3NFbmNvZGVySW1wbCgpOworCisgICAg
V0dQVUNvbXB1dGVQYXNzRW5jb2RlciBiYWNraW5nKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5n
OyB9CisKK3ByaXZhdGU6CisgICAgQ29tcHV0ZVBhc3NFbmNvZGVySW1wbChXR1BVQ29tcHV0ZVBh
c3NFbmNvZGVyKTsKKworICAgIENvbXB1dGVQYXNzRW5jb2RlckltcGwoY29uc3QgQ29tcHV0ZVBh
c3NFbmNvZGVySW1wbCYpID0gZGVsZXRlOworICAgIENvbXB1dGVQYXNzRW5jb2RlckltcGwoQ29t
cHV0ZVBhc3NFbmNvZGVySW1wbCYmKSA9IGRlbGV0ZTsKKyAgICBDb21wdXRlUGFzc0VuY29kZXJJ
bXBsJiBvcGVyYXRvcj0oY29uc3QgQ29tcHV0ZVBhc3NFbmNvZGVySW1wbCYpID0gZGVsZXRlOwor
ICAgIENvbXB1dGVQYXNzRW5jb2RlckltcGwmIG9wZXJhdG9yPShDb21wdXRlUGFzc0VuY29kZXJJ
bXBsJiYpID0gZGVsZXRlOworCisgICAgdm9pZCBzZXRQaXBlbGluZShjb25zdCBDb21wdXRlUGlw
ZWxpbmUmKSBmaW5hbDsKKyAgICB2b2lkIGRpc3BhdGNoKFNpemUzMiB4LCBzdGQ6Om9wdGlvbmFs
PFNpemUzMj4geSwgc3RkOjpvcHRpb25hbDxTaXplMzI+KSBmaW5hbDsKKyAgICB2b2lkIGRpc3Bh
dGNoSW5kaXJlY3QoY29uc3QgQnVmZmVyJiBpbmRpcmVjdEJ1ZmZlciwgU2l6ZTY0IGluZGlyZWN0
T2Zmc2V0KSBmaW5hbDsKKworICAgIHZvaWQgYmVnaW5QaXBlbGluZVN0YXRpc3RpY3NRdWVyeShj
b25zdCBRdWVyeVNldCYsIFNpemUzMiBxdWVyeUluZGV4KSBmaW5hbDsKKyAgICB2b2lkIGVuZFBp
cGVsaW5lU3RhdGlzdGljc1F1ZXJ5KCkgZmluYWw7CisKKyAgICB2b2lkIGVuZFBhc3MoKSBmaW5h
bDsKKworICAgIHZvaWQgc2V0QmluZEdyb3VwKEluZGV4MzIsIGNvbnN0IEJpbmRHcm91cCYsCisg
ICAgICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPEJ1ZmZlckR5bmFtaWNPZmZzZXQ+PiYmKSBmaW5h
bDsKKworICAgIHZvaWQgc2V0QmluZEdyb3VwKEluZGV4MzIsIGNvbnN0IEJpbmRHcm91cCYsCisg
ICAgICAgIGNvbnN0IHVpbnQzMl90KiBkeW5hbWljT2Zmc2V0c0FycmF5QnVmZmVyLAorICAgICAg
ICBzaXplX3QgZHluYW1pY09mZnNldHNBcnJheUJ1ZmZlckxlbmd0aCwKKyAgICAgICAgU2l6ZTY0
IGR5bmFtaWNPZmZzZXRzRGF0YVN0YXJ0LAorICAgICAgICBTaXplMzIgZHluYW1pY09mZnNldHNE
YXRhTGVuZ3RoKSBmaW5hbDsKKworICAgIHZvaWQgcHVzaERlYnVnR3JvdXAoU3RyaW5nJiYgZ3Jv
dXBMYWJlbCkgZmluYWw7CisgICAgdm9pZCBwb3BEZWJ1Z0dyb3VwKCkgZmluYWw7CisgICAgdm9p
ZCBpbnNlcnREZWJ1Z01hcmtlcihTdHJpbmcmJiBtYXJrZXJMYWJlbCkgZmluYWw7CisKKyAgICB2
b2lkIHNldExhYmVsSW50ZXJuYWwoY29uc3QgU3RyaW5nJikgZmluYWw7CisKKyAgICBXR1BVQ29t
cHV0ZVBhc3NFbmNvZGVyIG1fYmFja2luZyB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbXB1dGVQaXBlbGluZUltcGwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVD
b21wdXRlUGlwZWxpbmVJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYThlOTczZDRhY2I3NmJiZTFhYTFk
MGExZjhiMzQ2OTYzY2I4NGEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFM
L3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBsLmNwcApA
QCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYkdQVUNvbXB1dGVQaXBlbGluZUltcGwuaCIKKworI2luY2x1ZGUgIldlYkdQVUJpbmRH
cm91cExheW91dEltcGwuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVRXh0Lmg+CisKK25hbWVz
cGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK0NvbXB1dGVQaXBlbGluZUltcGw6OkNv
bXB1dGVQaXBlbGluZUltcGwoV0dQVUNvbXB1dGVQaXBlbGluZSBjb21wdXRlUGlwZWxpbmUpCisg
ICAgOiBtX2JhY2tpbmcoY29tcHV0ZVBpcGVsaW5lKQoreworfQorCitDb21wdXRlUGlwZWxpbmVJ
bXBsOjp+Q29tcHV0ZVBpcGVsaW5lSW1wbCgpCit7CisgICAgd2dwdUNvbXB1dGVQaXBlbGluZVJl
bGVhc2UobV9iYWNraW5nKTsKK30KKworUmVmPEJpbmRHcm91cExheW91dD4gQ29tcHV0ZVBpcGVs
aW5lSW1wbDo6Z2V0QmluZEdyb3VwTGF5b3V0KHVpbnQzMl90IGluZGV4KQoreworICAgIHJldHVy
biBCaW5kR3JvdXBMYXlvdXRJbXBsOjpjcmVhdGUod2dwdUNvbXB1dGVQaXBlbGluZUdldEJpbmRH
cm91cExheW91dChtX2JhY2tpbmcsIGluZGV4KSk7Cit9CisKK3ZvaWQgQ29tcHV0ZVBpcGVsaW5l
SW1wbDo6c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAgIHdncHVD
b21wdXRlUGlwZWxpbmVTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVsLnV0ZjgoKS5kYXRhKCkpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb21w
dXRlUGlwZWxpbmVJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQ
VS9JbXBsL1dlYkdQVUNvbXB1dGVQaXBlbGluZUltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNDYyNmNmYTQw
ZTIyZTI5MjNkYjViYmZmYjVmMTQwYWQ2YWZhYWNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb21wdXRlUGlwZWxp
bmVJbXBsLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiV2ViR1BVQ29tcHV0ZVBpcGVsaW5lLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQ
VS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBDb21w
dXRlUGlwZWxpbmVJbXBsIGZpbmFsIDogcHVibGljIENvbXB1dGVQaXBlbGluZSB7CitwdWJsaWM6
CisgICAgc3RhdGljIFJlZjxDb21wdXRlUGlwZWxpbmVJbXBsPiBjcmVhdGUoV0dQVUNvbXB1dGVQ
aXBlbGluZSBjb21wdXRlUGlwZWxpbmUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBDb21wdXRlUGlwZWxpbmVJbXBsKGNvbXB1dGVQaXBlbGluZSkpOworICAgIH0KKworICAg
IHZpcnR1YWwgfkNvbXB1dGVQaXBlbGluZUltcGwoKTsKKworICAgIFdHUFVDb21wdXRlUGlwZWxp
bmUgYmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgorICAg
IENvbXB1dGVQaXBlbGluZUltcGwoV0dQVUNvbXB1dGVQaXBlbGluZSk7CisKKyAgICBDb21wdXRl
UGlwZWxpbmVJbXBsKGNvbnN0IENvbXB1dGVQaXBlbGluZUltcGwmKSA9IGRlbGV0ZTsKKyAgICBD
b21wdXRlUGlwZWxpbmVJbXBsKENvbXB1dGVQaXBlbGluZUltcGwmJikgPSBkZWxldGU7CisgICAg
Q29tcHV0ZVBpcGVsaW5lSW1wbCYgb3BlcmF0b3I9KGNvbnN0IENvbXB1dGVQaXBlbGluZUltcGwm
KSA9IGRlbGV0ZTsKKyAgICBDb21wdXRlUGlwZWxpbmVJbXBsJiBvcGVyYXRvcj0oQ29tcHV0ZVBp
cGVsaW5lSW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIFJlZjxCaW5kR3JvdXBMYXlvdXQ+IGdldEJp
bmRHcm91cExheW91dCh1aW50MzJfdCBpbmRleCkgZmluYWw7CisKKyAgICB2b2lkIHNldExhYmVs
SW50ZXJuYWwoY29uc3QgU3RyaW5nJikgZmluYWw7CisKKyAgICBXR1BVQ29tcHV0ZVBpcGVsaW5l
IG1fYmFja2luZyB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBu
YW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBo
aWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbnZlcnRUb0JhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb252ZXJ0VG9CYWNraW5nLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi41MjU2ZmM0ZjY0NjI1ZmY0NzhmNWE3NzgzYmE1YWZlMzFmMjJkZWY1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUv
SW1wbC9XZWJHUFVDb252ZXJ0VG9CYWNraW5nLmNwcApAQCAtMCwwICsxLDgwOSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVDb252ZXJ0VG9CYWNr
aW5nLmgiCisKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVRXh0Lmg+CisKK25hbWVzcGFjZSBQQUwg
eworbmFtZXNwYWNlIFdlYkdQVSB7CisKK1dHUFVBZGRyZXNzTW9kZSBjb252ZXJ0VG9CYWNraW5n
KEFkZHJlc3NNb2RlIGFkZHJlc3NNb2RlKQoreworICAgIHN3aXRjaCAoYWRkcmVzc01vZGUpIHsK
KyAgICBjYXNlIEFkZHJlc3NNb2RlOjpDbGFtcFRvRWRnZToKKyAgICAgICAgcmV0dXJuIFdHUFVB
ZGRyZXNzTW9kZV9DbGFtcFRvRWRnZTsKKyAgICBjYXNlIEFkZHJlc3NNb2RlOjpSZXBlYXQ6Cisg
ICAgICAgIHJldHVybiBXR1BVQWRkcmVzc01vZGVfUmVwZWF0OworICAgIGNhc2UgQWRkcmVzc01v
ZGU6Ok1pcnJvclJlcGVhdDoKKyAgICAgICAgcmV0dXJuIFdHUFVBZGRyZXNzTW9kZV9NaXJyb3JS
ZXBlYXQ7CisgICAgfQorfQorCitXR1BVQmxlbmRGYWN0b3IgY29udmVydFRvQmFja2luZyhCbGVu
ZEZhY3RvciBibGVuZEZhY3RvcikKK3sKKyAgICBzd2l0Y2ggKGJsZW5kRmFjdG9yKSB7CisgICAg
Y2FzZSBCbGVuZEZhY3Rvcjo6WmVybzoKKyAgICAgICAgcmV0dXJuIFdHUFVCbGVuZEZhY3Rvcl9a
ZXJvOworICAgIGNhc2UgQmxlbmRGYWN0b3I6Ok9uZToKKyAgICAgICAgcmV0dXJuIFdHUFVCbGVu
ZEZhY3Rvcl9PbmU7CisgICAgY2FzZSBCbGVuZEZhY3Rvcjo6U3JjOgorICAgICAgICByZXR1cm4g
V0dQVUJsZW5kRmFjdG9yX1NyYzsKKyAgICBjYXNlIEJsZW5kRmFjdG9yOjpPbmVNaW51c1NyYzoK
KyAgICAgICAgcmV0dXJuIFdHUFVCbGVuZEZhY3Rvcl9PbmVNaW51c1NyYzsKKyAgICBjYXNlIEJs
ZW5kRmFjdG9yOjpTcmNBbHBoYToKKyAgICAgICAgcmV0dXJuIFdHUFVCbGVuZEZhY3Rvcl9TcmNB
bHBoYTsKKyAgICBjYXNlIEJsZW5kRmFjdG9yOjpPbmVNaW51c1NyY0FscGhhOgorICAgICAgICBy
ZXR1cm4gV0dQVUJsZW5kRmFjdG9yX09uZU1pbnVzU3JjQWxwaGE7CisgICAgY2FzZSBCbGVuZEZh
Y3Rvcjo6RHN0OgorICAgICAgICByZXR1cm4gV0dQVUJsZW5kRmFjdG9yX0RzdDsKKyAgICBjYXNl
IEJsZW5kRmFjdG9yOjpPbmVNaW51c0RzdDoKKyAgICAgICAgcmV0dXJuIFdHUFVCbGVuZEZhY3Rv
cl9PbmVNaW51c0RzdDsKKyAgICBjYXNlIEJsZW5kRmFjdG9yOjpEc3RBbHBoYToKKyAgICAgICAg
cmV0dXJuIFdHUFVCbGVuZEZhY3Rvcl9Ec3RBbHBoYTsKKyAgICBjYXNlIEJsZW5kRmFjdG9yOjpP
bmVNaW51c0RzdEFscGhhOgorICAgICAgICByZXR1cm4gV0dQVUJsZW5kRmFjdG9yX09uZU1pbnVz
RHN0QWxwaGE7CisgICAgY2FzZSBCbGVuZEZhY3Rvcjo6U3JjQWxwaGFTYXR1cmF0ZWQ6CisgICAg
ICAgIHJldHVybiBXR1BVQmxlbmRGYWN0b3JfU3JjQWxwaGFTYXR1cmF0ZWQ7CisgICAgY2FzZSBC
bGVuZEZhY3Rvcjo6Q29uc3RhbnQ6CisgICAgICAgIHJldHVybiBXR1BVQmxlbmRGYWN0b3JfQ29u
c3RhbnQ7CisgICAgY2FzZSBCbGVuZEZhY3Rvcjo6T25lTWludXNDb25zdGFudDoKKyAgICAgICAg
cmV0dXJuIFdHUFVCbGVuZEZhY3Rvcl9PbmVNaW51c0NvbnN0YW50OworICAgIH0KK30KKworV0dQ
VUJsZW5kT3BlcmF0aW9uIGNvbnZlcnRUb0JhY2tpbmcoQmxlbmRPcGVyYXRpb24gYmxlbmRPcGVy
YXRpb24pCit7CisgICAgc3dpdGNoIChibGVuZE9wZXJhdGlvbikgeworICAgIGNhc2UgQmxlbmRP
cGVyYXRpb246OkFkZDoKKyAgICAgICAgcmV0dXJuIFdHUFVCbGVuZE9wZXJhdGlvbl9BZGQ7Cisg
ICAgY2FzZSBCbGVuZE9wZXJhdGlvbjo6U3VidHJhY3Q6CisgICAgICAgIHJldHVybiBXR1BVQmxl
bmRPcGVyYXRpb25fU3VidHJhY3Q7CisgICAgY2FzZSBCbGVuZE9wZXJhdGlvbjo6UmV2ZXJzZVN1
YnRyYWN0OgorICAgICAgICByZXR1cm4gV0dQVUJsZW5kT3BlcmF0aW9uX1JldmVyc2VTdWJ0cmFj
dDsKKyAgICBjYXNlIEJsZW5kT3BlcmF0aW9uOjpNaW46CisgICAgICAgIHJldHVybiBXR1BVQmxl
bmRPcGVyYXRpb25fTWluOworICAgIGNhc2UgQmxlbmRPcGVyYXRpb246Ok1heDoKKyAgICAgICAg
cmV0dXJuIFdHUFVCbGVuZE9wZXJhdGlvbl9NYXg7CisgICAgfQorfQorCitXR1BVQnVmZmVyQmlu
ZGluZ1R5cGUgY29udmVydFRvQmFja2luZyhCdWZmZXJCaW5kaW5nVHlwZSBidWZmZXJCaW5kaW5n
VHlwZSkKK3sKKyAgICBzd2l0Y2ggKGJ1ZmZlckJpbmRpbmdUeXBlKSB7CisgICAgY2FzZSBCdWZm
ZXJCaW5kaW5nVHlwZTo6VW5pZm9ybToKKyAgICAgICAgcmV0dXJuIFdHUFVCdWZmZXJCaW5kaW5n
VHlwZV9Vbmlmb3JtOworICAgIGNhc2UgQnVmZmVyQmluZGluZ1R5cGU6OlN0b3JhZ2U6CisgICAg
ICAgIHJldHVybiBXR1BVQnVmZmVyQmluZGluZ1R5cGVfU3RvcmFnZTsKKyAgICBjYXNlIEJ1ZmZl
ckJpbmRpbmdUeXBlOjpSZWFkT25seVN0b3JhZ2U6CisgICAgICAgIHJldHVybiBXR1BVQnVmZmVy
QmluZGluZ1R5cGVfUmVhZE9ubHlTdG9yYWdlOworICAgIH0KK30KKworV0dQVUNvbXBhcmVGdW5j
dGlvbiBjb252ZXJ0VG9CYWNraW5nKENvbXBhcmVGdW5jdGlvbiBjb21wYXJlRnVuY3Rpb24pCit7
CisgICAgc3dpdGNoIChjb21wYXJlRnVuY3Rpb24pIHsKKyAgICBjYXNlIENvbXBhcmVGdW5jdGlv
bjo6TmV2ZXI6CisgICAgICAgIHJldHVybiBXR1BVQ29tcGFyZUZ1bmN0aW9uX05ldmVyOworICAg
IGNhc2UgQ29tcGFyZUZ1bmN0aW9uOjpMZXNzOgorICAgICAgICByZXR1cm4gV0dQVUNvbXBhcmVG
dW5jdGlvbl9MZXNzOworICAgIGNhc2UgQ29tcGFyZUZ1bmN0aW9uOjpFcXVhbDoKKyAgICAgICAg
cmV0dXJuIFdHUFVDb21wYXJlRnVuY3Rpb25fRXF1YWw7CisgICAgY2FzZSBDb21wYXJlRnVuY3Rp
b246Okxlc3NFcXVhbDoKKyAgICAgICAgcmV0dXJuIFdHUFVDb21wYXJlRnVuY3Rpb25fTGVzc0Vx
dWFsOworICAgIGNhc2UgQ29tcGFyZUZ1bmN0aW9uOjpHcmVhdGVyOgorICAgICAgICByZXR1cm4g
V0dQVUNvbXBhcmVGdW5jdGlvbl9HcmVhdGVyOworICAgIGNhc2UgQ29tcGFyZUZ1bmN0aW9uOjpO
b3RFcXVhbDoKKyAgICAgICAgcmV0dXJuIFdHUFVDb21wYXJlRnVuY3Rpb25fTm90RXF1YWw7Cisg
ICAgY2FzZSBDb21wYXJlRnVuY3Rpb246OkdyZWF0ZXJFcXVhbDoKKyAgICAgICAgcmV0dXJuIFdH
UFVDb21wYXJlRnVuY3Rpb25fR3JlYXRlckVxdWFsOworICAgIGNhc2UgQ29tcGFyZUZ1bmN0aW9u
OjpBbHdheXM6CisgICAgICAgIHJldHVybiBXR1BVQ29tcGFyZUZ1bmN0aW9uX0Fsd2F5czsKKyAg
ICB9Cit9CisKK1dHUFVDb21waWxhdGlvbk1lc3NhZ2VUeXBlIGNvbnZlcnRUb0JhY2tpbmcoQ29t
cGlsYXRpb25NZXNzYWdlVHlwZSBjb21waWxhdGlvbk1lc3NhZ2VUeXBlKQoreworICAgIHN3aXRj
aCAoY29tcGlsYXRpb25NZXNzYWdlVHlwZSkgeworICAgIGNhc2UgQ29tcGlsYXRpb25NZXNzYWdl
VHlwZTo6RXJyb3I6CisgICAgICAgIHJldHVybiBXR1BVQ29tcGlsYXRpb25NZXNzYWdlVHlwZV9F
cnJvcjsKKyAgICBjYXNlIENvbXBpbGF0aW9uTWVzc2FnZVR5cGU6Oldhcm5pbmc6CisgICAgICAg
IHJldHVybiBXR1BVQ29tcGlsYXRpb25NZXNzYWdlVHlwZV9XYXJuaW5nOworICAgIGNhc2UgQ29t
cGlsYXRpb25NZXNzYWdlVHlwZTo6SW5mbzoKKyAgICAgICAgcmV0dXJuIFdHUFVDb21waWxhdGlv
bk1lc3NhZ2VUeXBlX0luZm87CisgICAgfQorfQorCitXR1BVQ3VsbE1vZGUgY29udmVydFRvQmFj
a2luZyhDdWxsTW9kZSBjdWxsTW9kZSkKK3sKKyAgICBzd2l0Y2ggKGN1bGxNb2RlKSB7CisgICAg
Y2FzZSBDdWxsTW9kZTo6Tm9uZToKKyAgICAgICAgcmV0dXJuIFdHUFVDdWxsTW9kZV9Ob25lOwor
ICAgIGNhc2UgQ3VsbE1vZGU6OkZyb250OgorICAgICAgICByZXR1cm4gV0dQVUN1bGxNb2RlX0Zy
b250OworICAgIGNhc2UgQ3VsbE1vZGU6OkJhY2s6CisgICAgICAgIHJldHVybiBXR1BVQ3VsbE1v
ZGVfQmFjazsKKyAgICB9Cit9CisKK1dHUFVFcnJvckZpbHRlciBjb252ZXJ0VG9CYWNraW5nKEVy
cm9yRmlsdGVyIGVycm9yRmlsdGVyKQoreworICAgIHN3aXRjaCAoZXJyb3JGaWx0ZXIpIHsKKyAg
ICBjYXNlIEVycm9yRmlsdGVyOjpPdXRPZk1lbW9yeToKKyAgICAgICAgcmV0dXJuIFdHUFVFcnJv
ckZpbHRlcl9PdXRPZk1lbW9yeTsKKyAgICBjYXNlIEVycm9yRmlsdGVyOjpWYWxpZGF0aW9uOgor
ICAgICAgICByZXR1cm4gV0dQVUVycm9yRmlsdGVyX1ZhbGlkYXRpb247CisgICAgfQorfQorCitX
R1BVRmVhdHVyZU5hbWUgY29udmVydFRvQmFja2luZyhGZWF0dXJlTmFtZSBmZWF0dXJlTmFtZSkK
K3sKKyAgICBzd2l0Y2ggKGZlYXR1cmVOYW1lKSB7CisgICAgY2FzZSBGZWF0dXJlTmFtZTo6RGVw
dGhDbGlwQ29udHJvbDoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVGZWF0dXJlTmFt
ZT4oV0dQVUZlYXR1cmVOYW1lX0RlcHRoQ2xpcENvbnRyb2wpOworICAgIGNhc2UgRmVhdHVyZU5h
bWU6OkRlcHRoMjR1bm9ybVN0ZW5jaWw4OgorICAgICAgICByZXR1cm4gV0dQVUZlYXR1cmVOYW1l
X0RlcHRoMjRVbm9ybVN0ZW5jaWw4OworICAgIGNhc2UgRmVhdHVyZU5hbWU6OkRlcHRoMzJmbG9h
dFN0ZW5jaWw4OgorICAgICAgICByZXR1cm4gV0dQVUZlYXR1cmVOYW1lX0RlcHRoMzJGbG9hdFN0
ZW5jaWw4OworICAgIGNhc2UgRmVhdHVyZU5hbWU6OlBpcGVsaW5lU3RhdGlzdGljc1F1ZXJ5Ogor
ICAgICAgICByZXR1cm4gV0dQVUZlYXR1cmVOYW1lX1BpcGVsaW5lU3RhdGlzdGljc1F1ZXJ5Owor
ICAgIGNhc2UgRmVhdHVyZU5hbWU6OlRleHR1cmVDb21wcmVzc2lvbkJjOgorICAgICAgICByZXR1
cm4gV0dQVUZlYXR1cmVOYW1lX1RleHR1cmVDb21wcmVzc2lvbkJDOworICAgIGNhc2UgRmVhdHVy
ZU5hbWU6OlRleHR1cmVDb21wcmVzc2lvbkV0YzI6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxXR1BVRmVhdHVyZU5hbWU+KFdHUFVGZWF0dXJlTmFtZV9UZXh0dXJlQ29tcHJlc3Npb25FVEMy
KTsKKyAgICBjYXNlIEZlYXR1cmVOYW1lOjpUZXh0dXJlQ29tcHJlc3Npb25Bc3RjOgorICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVUZlYXR1cmVOYW1lPihXR1BVRmVhdHVyZU5hbWVfVGV4
dHVyZUNvbXByZXNzaW9uQVNUQyk7CisgICAgY2FzZSBGZWF0dXJlTmFtZTo6VGltZXN0YW1wUXVl
cnk6CisgICAgICAgIHJldHVybiBXR1BVRmVhdHVyZU5hbWVfVGltZXN0YW1wUXVlcnk7CisgICAg
Y2FzZSBGZWF0dXJlTmFtZTo6SW5kaXJlY3RGaXJzdEluc3RhbmNlOgorICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8V0dQVUZlYXR1cmVOYW1lPihXR1BVRmVhdHVyZU5hbWVfSW5kaXJlY3RGaXJz
dEluc3RhbmNlKTsKKyAgICB9Cit9CisKK1dHUFVGaWx0ZXJNb2RlIGNvbnZlcnRUb0JhY2tpbmco
RmlsdGVyTW9kZSBmaWx0ZXJNb2RlKQoreworICAgIHN3aXRjaCAoZmlsdGVyTW9kZSkgeworICAg
IGNhc2UgRmlsdGVyTW9kZTo6TmVhcmVzdDoKKyAgICAgICAgcmV0dXJuIFdHUFVGaWx0ZXJNb2Rl
X05lYXJlc3Q7CisgICAgY2FzZSBGaWx0ZXJNb2RlOjpMaW5lYXI6CisgICAgICAgIHJldHVybiBX
R1BVRmlsdGVyTW9kZV9MaW5lYXI7CisgICAgfQorfQorCitXR1BVRnJvbnRGYWNlIGNvbnZlcnRU
b0JhY2tpbmcoRnJvbnRGYWNlIGZyb250RmFjZSkKK3sKKyAgICBzd2l0Y2ggKGZyb250RmFjZSkg
eworICAgIGNhc2UgRnJvbnRGYWNlOjpDQ1c6CisgICAgICAgIHJldHVybiBXR1BVRnJvbnRGYWNl
X0NDVzsKKyAgICBjYXNlIEZyb250RmFjZTo6Q1c6CisgICAgICAgIHJldHVybiBXR1BVRnJvbnRG
YWNlX0NXOworICAgIH0KK30KKworV0dQVUluZGV4Rm9ybWF0IGNvbnZlcnRUb0JhY2tpbmcoSW5k
ZXhGb3JtYXQgaW5kZXhGb3JtYXQpCit7CisgICAgc3dpdGNoIChpbmRleEZvcm1hdCkgeworICAg
IGNhc2UgSW5kZXhGb3JtYXQ6OlVpbnQxNjoKKyAgICAgICAgcmV0dXJuIFdHUFVJbmRleEZvcm1h
dF9VaW50MTY7CisgICAgY2FzZSBJbmRleEZvcm1hdDo6VWludDMyOgorICAgICAgICByZXR1cm4g
V0dQVUluZGV4Rm9ybWF0X1VpbnQzMjsKKyAgICB9Cit9CisKK1dHUFVMb2FkT3AgY29udmVydFRv
QmFja2luZyhMb2FkT3AgbG9hZE9wKQoreworICAgIHN3aXRjaCAobG9hZE9wKSB7CisgICAgY2Fz
ZSBMb2FkT3A6OkxvYWQ6CisgICAgICAgIHJldHVybiBXR1BVTG9hZE9wX0xvYWQ7CisgICAgfQor
fQorCitXR1BVUGlwZWxpbmVTdGF0aXN0aWNOYW1lIGNvbnZlcnRUb0JhY2tpbmcoUGlwZWxpbmVT
dGF0aXN0aWNOYW1lIHBpcGVsaW5lU3RhdGlzdGljTmFtZSkKK3sKKyAgICBzd2l0Y2ggKHBpcGVs
aW5lU3RhdGlzdGljTmFtZSkgeworICAgIGNhc2UgUGlwZWxpbmVTdGF0aXN0aWNOYW1lOjpWZXJ0
ZXhTaGFkZXJJbnZvY2F0aW9uczoKKyAgICAgICAgcmV0dXJuIFdHUFVQaXBlbGluZVN0YXRpc3Rp
Y05hbWVfVmVydGV4U2hhZGVySW52b2NhdGlvbnM7CisgICAgY2FzZSBQaXBlbGluZVN0YXRpc3Rp
Y05hbWU6OkNsaXBwZXJJbnZvY2F0aW9uczoKKyAgICAgICAgcmV0dXJuIFdHUFVQaXBlbGluZVN0
YXRpc3RpY05hbWVfQ2xpcHBlckludm9jYXRpb25zOworICAgIGNhc2UgUGlwZWxpbmVTdGF0aXN0
aWNOYW1lOjpDbGlwcGVyUHJpbWl0aXZlc091dDoKKyAgICAgICAgcmV0dXJuIFdHUFVQaXBlbGlu
ZVN0YXRpc3RpY05hbWVfQ2xpcHBlclByaW1pdGl2ZXNPdXQ7CisgICAgY2FzZSBQaXBlbGluZVN0
YXRpc3RpY05hbWU6OkZyYWdtZW50U2hhZGVySW52b2NhdGlvbnM6CisgICAgICAgIHJldHVybiBX
R1BVUGlwZWxpbmVTdGF0aXN0aWNOYW1lX0ZyYWdtZW50U2hhZGVySW52b2NhdGlvbnM7CisgICAg
Y2FzZSBQaXBlbGluZVN0YXRpc3RpY05hbWU6OkNvbXB1dGVTaGFkZXJJbnZvY2F0aW9uczoKKyAg
ICAgICAgcmV0dXJuIFdHUFVQaXBlbGluZVN0YXRpc3RpY05hbWVfQ29tcHV0ZVNoYWRlckludm9j
YXRpb25zOworICAgIH0KK30KKworV0dQVVBvd2VyUHJlZmVyZW5jZSBjb252ZXJ0VG9CYWNraW5n
KFBvd2VyUHJlZmVyZW5jZSBwb3dlclByZWZlcmVuY2UpCit7CisgICAgc3dpdGNoIChwb3dlclBy
ZWZlcmVuY2UpIHsKKyAgICBjYXNlIFBvd2VyUHJlZmVyZW5jZTo6TG93UG93ZXI6CisgICAgICAg
IHJldHVybiBXR1BVUG93ZXJQcmVmZXJlbmNlX0xvd1Bvd2VyOworICAgIGNhc2UgUG93ZXJQcmVm
ZXJlbmNlOjpIaWdoUGVyZm9ybWFuY2U6CisgICAgICAgIHJldHVybiBXR1BVUG93ZXJQcmVmZXJl
bmNlX0hpZ2hQZXJmb3JtYW5jZTsKKyAgICB9Cit9CisKK1dHUFVQcmltaXRpdmVUb3BvbG9neSBj
b252ZXJ0VG9CYWNraW5nKFByaW1pdGl2ZVRvcG9sb2d5IHByaW1pdGl2ZVRvcG9sb2d5KQorewor
ICAgIHN3aXRjaCAocHJpbWl0aXZlVG9wb2xvZ3kpIHsKKyAgICBjYXNlIFByaW1pdGl2ZVRvcG9s
b2d5OjpQb2ludExpc3Q6CisgICAgICAgIHJldHVybiBXR1BVUHJpbWl0aXZlVG9wb2xvZ3lfUG9p
bnRMaXN0OworICAgIGNhc2UgUHJpbWl0aXZlVG9wb2xvZ3k6OkxpbmVMaXN0OgorICAgICAgICBy
ZXR1cm4gV0dQVVByaW1pdGl2ZVRvcG9sb2d5X0xpbmVMaXN0OworICAgIGNhc2UgUHJpbWl0aXZl
VG9wb2xvZ3k6OkxpbmVTdHJpcDoKKyAgICAgICAgcmV0dXJuIFdHUFVQcmltaXRpdmVUb3BvbG9n
eV9MaW5lU3RyaXA7CisgICAgY2FzZSBQcmltaXRpdmVUb3BvbG9neTo6VHJpYW5nbGVMaXN0Ogor
ICAgICAgICByZXR1cm4gV0dQVVByaW1pdGl2ZVRvcG9sb2d5X1RyaWFuZ2xlTGlzdDsKKyAgICBj
YXNlIFByaW1pdGl2ZVRvcG9sb2d5OjpUcmlhbmdsZVN0cmlwOgorICAgICAgICByZXR1cm4gV0dQ
VVByaW1pdGl2ZVRvcG9sb2d5X1RyaWFuZ2xlU3RyaXA7CisgICAgfQorfQorCitXR1BVUXVlcnlU
eXBlIGNvbnZlcnRUb0JhY2tpbmcoUXVlcnlUeXBlIHF1ZXJ5VHlwZSkKK3sKKyAgICBzd2l0Y2gg
KHF1ZXJ5VHlwZSkgeworICAgIGNhc2UgUXVlcnlUeXBlOjpPY2NsdXNpb246CisgICAgICAgIHJl
dHVybiBXR1BVUXVlcnlUeXBlX09jY2x1c2lvbjsKKyAgICBjYXNlIFF1ZXJ5VHlwZTo6UGlwZWxp
bmVTdGF0aXN0aWNzOgorICAgICAgICByZXR1cm4gV0dQVVF1ZXJ5VHlwZV9QaXBlbGluZVN0YXRp
c3RpY3M7CisgICAgY2FzZSBRdWVyeVR5cGU6OlRpbWVzdGFtcDoKKyAgICAgICAgcmV0dXJuIFdH
UFVRdWVyeVR5cGVfVGltZXN0YW1wOworICAgIH0KK30KKworV0dQVVNhbXBsZXJCaW5kaW5nVHlw
ZSBjb252ZXJ0VG9CYWNraW5nKFNhbXBsZXJCaW5kaW5nVHlwZSBzYW1wbGVyQmluZGluZ1R5cGUp
Cit7CisgICAgc3dpdGNoIChzYW1wbGVyQmluZGluZ1R5cGUpIHsKKyAgICBjYXNlIFNhbXBsZXJC
aW5kaW5nVHlwZTo6RmlsdGVyaW5nOgorICAgICAgICByZXR1cm4gV0dQVVNhbXBsZXJCaW5kaW5n
VHlwZV9GaWx0ZXJpbmc7CisgICAgY2FzZSBTYW1wbGVyQmluZGluZ1R5cGU6Ok5vbkZpbHRlcmlu
ZzoKKyAgICAgICAgcmV0dXJuIFdHUFVTYW1wbGVyQmluZGluZ1R5cGVfTm9uRmlsdGVyaW5nOwor
ICAgIGNhc2UgU2FtcGxlckJpbmRpbmdUeXBlOjpDb21wYXJpc29uOgorICAgICAgICByZXR1cm4g
V0dQVVNhbXBsZXJCaW5kaW5nVHlwZV9Db21wYXJpc29uOworICAgIH0KK30KKworV0dQVVN0ZW5j
aWxPcGVyYXRpb24gY29udmVydFRvQmFja2luZyhTdGVuY2lsT3BlcmF0aW9uIHN0ZW5jaWxPcGVy
YXRpb24pCit7CisgICAgc3dpdGNoIChzdGVuY2lsT3BlcmF0aW9uKSB7CisgICAgY2FzZSBTdGVu
Y2lsT3BlcmF0aW9uOjpLZWVwOgorICAgICAgICByZXR1cm4gV0dQVVN0ZW5jaWxPcGVyYXRpb25f
S2VlcDsKKyAgICBjYXNlIFN0ZW5jaWxPcGVyYXRpb246Olplcm86CisgICAgICAgIHJldHVybiBX
R1BVU3RlbmNpbE9wZXJhdGlvbl9aZXJvOworICAgIGNhc2UgU3RlbmNpbE9wZXJhdGlvbjo6UmVw
bGFjZToKKyAgICAgICAgcmV0dXJuIFdHUFVTdGVuY2lsT3BlcmF0aW9uX1JlcGxhY2U7CisgICAg
Y2FzZSBTdGVuY2lsT3BlcmF0aW9uOjpJbnZlcnQ6CisgICAgICAgIHJldHVybiBXR1BVU3RlbmNp
bE9wZXJhdGlvbl9JbnZlcnQ7CisgICAgY2FzZSBTdGVuY2lsT3BlcmF0aW9uOjpJbmNyZW1lbnRD
bGFtcDoKKyAgICAgICAgcmV0dXJuIFdHUFVTdGVuY2lsT3BlcmF0aW9uX0luY3JlbWVudENsYW1w
OworICAgIGNhc2UgU3RlbmNpbE9wZXJhdGlvbjo6RGVjcmVtZW50Q2xhbXA6CisgICAgICAgIHJl
dHVybiBXR1BVU3RlbmNpbE9wZXJhdGlvbl9EZWNyZW1lbnRDbGFtcDsKKyAgICBjYXNlIFN0ZW5j
aWxPcGVyYXRpb246OkluY3JlbWVudFdyYXA6CisgICAgICAgIHJldHVybiBXR1BVU3RlbmNpbE9w
ZXJhdGlvbl9JbmNyZW1lbnRXcmFwOworICAgIGNhc2UgU3RlbmNpbE9wZXJhdGlvbjo6RGVjcmVt
ZW50V3JhcDoKKyAgICAgICAgcmV0dXJuIFdHUFVTdGVuY2lsT3BlcmF0aW9uX0RlY3JlbWVudFdy
YXA7CisgICAgfQorfQorCitXR1BVU3RvcmFnZVRleHR1cmVBY2Nlc3MgY29udmVydFRvQmFja2lu
ZyhTdG9yYWdlVGV4dHVyZUFjY2VzcyBzdG9yYWdlVGV4dHVyZUFjY2VzcykKK3sKKyAgICBzd2l0
Y2ggKHN0b3JhZ2VUZXh0dXJlQWNjZXNzKSB7CisgICAgY2FzZSBTdG9yYWdlVGV4dHVyZUFjY2Vz
czo6V3JpdGVPbmx5OgorICAgICAgICByZXR1cm4gV0dQVVN0b3JhZ2VUZXh0dXJlQWNjZXNzX1dy
aXRlT25seTsKKyAgICB9Cit9CisKK1dHUFVTdG9yZU9wIGNvbnZlcnRUb0JhY2tpbmcoU3RvcmVP
cCBzdG9yZU9wKQoreworICAgIHN3aXRjaCAoc3RvcmVPcCkgeworICAgIGNhc2UgU3RvcmVPcDo6
U3RvcmU6CisgICAgICAgIHJldHVybiBXR1BVU3RvcmVPcF9TdG9yZTsKKyAgICBjYXNlIFN0b3Jl
T3A6OkRpc2NhcmQ6CisgICAgICAgIHJldHVybiBXR1BVU3RvcmVPcF9EaXNjYXJkOworICAgIH0K
K30KKworV0dQVVRleHR1cmVBc3BlY3QgY29udmVydFRvQmFja2luZyhUZXh0dXJlQXNwZWN0IHRl
eHR1cmVBc3BlY3QpCit7CisgICAgc3dpdGNoICh0ZXh0dXJlQXNwZWN0KSB7CisgICAgY2FzZSBU
ZXh0dXJlQXNwZWN0OjpBbGw6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUFzcGVjdF9BbGw7
CisgICAgY2FzZSBUZXh0dXJlQXNwZWN0OjpTdGVuY2lsT25seToKKyAgICAgICAgcmV0dXJuIFdH
UFVUZXh0dXJlQXNwZWN0X1N0ZW5jaWxPbmx5OworICAgIGNhc2UgVGV4dHVyZUFzcGVjdDo6RGVw
dGhPbmx5OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVBc3BlY3RfRGVwdGhPbmx5OworICAg
IH0KK30KKworV0dQVVRleHR1cmVEaW1lbnNpb24gY29udmVydFRvQmFja2luZyhUZXh0dXJlRGlt
ZW5zaW9uIHRleHR1cmVEaW1lbnNpb24pCit7CisgICAgc3dpdGNoICh0ZXh0dXJlRGltZW5zaW9u
KSB7CisgICAgY2FzZSBUZXh0dXJlRGltZW5zaW9uOjpfMWQ6CisgICAgICAgIHJldHVybiBXR1BV
VGV4dHVyZURpbWVuc2lvbl8xRDsKKyAgICBjYXNlIFRleHR1cmVEaW1lbnNpb246Ol8yZDoKKyAg
ICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRGltZW5zaW9uXzJEOworICAgIGNhc2UgVGV4dHVyZURp
bWVuc2lvbjo6XzNkOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVEaW1lbnNpb25fM0Q7Cisg
ICAgfQorfQorCitXR1BVVGV4dHVyZUZvcm1hdCBjb252ZXJ0VG9CYWNraW5nKFRleHR1cmVGb3Jt
YXQgdGV4dHVyZUZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKHRleHR1cmVGb3JtYXQpIHsKKyAgICBj
YXNlIFRleHR1cmVGb3JtYXQ6OlI4dW5vcm06CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZv
cm1hdF9SOFVub3JtOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6Ujhzbm9ybToKKyAgICAgICAg
cmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1I4U25vcm07CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0
OjpSOHVpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SOFVpbnQ7CisgICAg
Y2FzZSBUZXh0dXJlRm9ybWF0OjpSOHNpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZv
cm1hdF9SOFNpbnQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSMTZ1aW50OgorICAgICAgICBy
ZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUjE2VWludDsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6
OlIxNnNpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SMTZTaW50OworICAg
IGNhc2UgVGV4dHVyZUZvcm1hdDo6UjE2ZmxvYXQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVy
ZUZvcm1hdF9SMTZGbG9hdDsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OlJnOHVub3JtOgorICAg
ICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkc4VW5vcm07CisgICAgY2FzZSBUZXh0dXJl
Rm9ybWF0OjpSZzhzbm9ybToKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1JHOFNu
b3JtOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6Umc4dWludDoKKyAgICAgICAgcmV0dXJuIFdH
UFVUZXh0dXJlRm9ybWF0X1JHOFVpbnQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZzhzaW50
OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkc4U2ludDsKKyAgICBjYXNlIFRl
eHR1cmVGb3JtYXQ6OlIzMnVpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9S
MzJVaW50OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UjMyc2ludDoKKyAgICAgICAgcmV0dXJu
IFdHUFVUZXh0dXJlRm9ybWF0X1IzMlNpbnQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSMzJm
bG9hdDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1IzMkZsb2F0OworICAgIGNh
c2UgVGV4dHVyZUZvcm1hdDo6UmcxNnVpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZv
cm1hdF9SRzE2VWludDsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OlJnMTZzaW50OgorICAgICAg
ICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkcxNlNpbnQ7CisgICAgY2FzZSBUZXh0dXJlRm9y
bWF0OjpSZzE2ZmxvYXQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SRzE2Rmxv
YXQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZ2JhOHVub3JtOgorICAgICAgICByZXR1cm4g
V0dQVVRleHR1cmVGb3JtYXRfUkdCQThVbm9ybTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OlJn
YmE4dW5vcm1TUkdCOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkdCQThVbm9y
bVNyZ2I7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZ2JhOHNub3JtOgorICAgICAgICByZXR1
cm4gV0dQVVRleHR1cmVGb3JtYXRfUkdCQThTbm9ybTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6
OlJnYmE4dWludDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4VWludDsK
KyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OlJnYmE4c2ludDoKKyAgICAgICAgcmV0dXJuIFdHUFVU
ZXh0dXJlRm9ybWF0X1JHQkE4U2ludDsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkJncmE4dW5v
cm06CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9CR1JBOFVub3JtOworICAgIGNh
c2UgVGV4dHVyZUZvcm1hdDo6QmdyYTh1bm9ybVNSR0I6CisgICAgICAgIHJldHVybiBXR1BVVGV4
dHVyZUZvcm1hdF9CR1JBOFVub3JtU3JnYjsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OlJnYjll
NXVmbG9hdDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1JHQjlFNVVmbG9hdDsK
KyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OlJnYjEwYTJ1bm9ybToKKyAgICAgICAgcmV0dXJuIFdH
UFVUZXh0dXJlRm9ybWF0X1JHQjEwQTJVbm9ybTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OlJn
MTFiMTB1ZmxvYXQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SRzExQjEwVWZs
b2F0OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UmczMnVpbnQ6CisgICAgICAgIHJldHVybiBX
R1BVVGV4dHVyZUZvcm1hdF9SRzMyVWludDsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OlJnMzJz
aW50OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkczMlNpbnQ7CisgICAgY2Fz
ZSBUZXh0dXJlRm9ybWF0OjpSZzMyZmxvYXQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZv
cm1hdF9SRzMyRmxvYXQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZ2JhMTZ1aW50OgorICAg
ICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkdCQTE2VWludDsKKyAgICBjYXNlIFRleHR1
cmVGb3JtYXQ6OlJnYmExNnNpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9S
R0JBMTZTaW50OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UmdiYTE2ZmxvYXQ6CisgICAgICAg
IHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMTZGbG9hdDsKKyAgICBjYXNlIFRleHR1cmVG
b3JtYXQ6OlJnYmEzMnVpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SR0JB
MzJVaW50OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UmdiYTMyc2ludDoKKyAgICAgICAgcmV0
dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkEzMlNpbnQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0
OjpSZ2JhMzJmbG9hdDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkEzMkZs
b2F0OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6U3RlbmNpbDg6CisgICAgICAgIHJldHVybiBX
R1BVVGV4dHVyZUZvcm1hdF9TdGVuY2lsODsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkRlcHRo
MTZ1bm9ybToKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMTZVbm9ybTsK
KyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkRlcHRoMjRwbHVzOgorICAgICAgICByZXR1cm4gV0dQ
VVRleHR1cmVGb3JtYXRfRGVwdGgyNFBsdXM7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpEZXB0
aDI0cGx1c1N0ZW5jaWw4OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgy
NFBsdXNTdGVuY2lsODsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkRlcHRoMzJmbG9hdDoKKyAg
ICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMzJGbG9hdDsKKyAgICBjYXNlIFRl
eHR1cmVGb3JtYXQ6OkJjMVJnYmFVbm9ybToKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9y
bWF0X0JDMVJHQkFVbm9ybTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkJjMVJnYmFVbm9ybVNS
R0I6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9CQzFSR0JBVW5vcm1TcmdiOwor
ICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QmMyUmdiYVVub3JtOgorICAgICAgICByZXR1cm4gV0dQ
VVRleHR1cmVGb3JtYXRfQkMyUkdCQVVub3JtOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QmMy
UmdiYVVub3JtU1JHQjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0JDMlJHQkFV
bm9ybVNyZ2I7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpCYzNSZ2JhVW5vcm06CisgICAgICAg
IHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9CQzNSR0JBVW5vcm07CisgICAgY2FzZSBUZXh0dXJl
Rm9ybWF0OjpCYzNSZ2JhVW5vcm1TUkdCOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3Jt
YXRfQkMzUkdCQVVub3JtU3JnYjsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkJjNFJVbm9ybToK
KyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0JDNFJVbm9ybTsKKyAgICBjYXNlIFRl
eHR1cmVGb3JtYXQ6OkJjNFJTbm9ybToKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0
X0JDNFJTbm9ybTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkJjNVJnVW5vcm06CisgICAgICAg
IHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9CQzVSR1Vub3JtOworICAgIGNhc2UgVGV4dHVyZUZv
cm1hdDo6QmM1UmdTbm9ybToKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0JDNVJH
U25vcm07CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpCYzZoUmdiVWZsb2F0OgorICAgICAgICBy
ZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQkM2SFJHQlVmbG9hdDsKKyAgICBjYXNlIFRleHR1cmVG
b3JtYXQ6OkJjNmhSZ2JGbG9hdDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0JD
NkhSR0JGbG9hdDsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkJjN1JnYmFVbm9ybToKKyAgICAg
ICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0JDN1JHQkFVbm9ybTsKKyAgICBjYXNlIFRleHR1
cmVGb3JtYXQ6OkJjN1JnYmFVbm9ybVNSR0I6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZv
cm1hdF9CQzdSR0JBVW5vcm1TcmdiOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6RXRjMlJnYjh1
bm9ybToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BV
VGV4dHVyZUZvcm1hdF9FVEMyUkdCOFVub3JtKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkV0
YzJSZ2I4dW5vcm1TUkdCOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVG
b3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0VUQzJSR0I4dW5vcm1TcmdiKTsKKyAgICBjYXNlIFRl
eHR1cmVGb3JtYXQ6OkV0YzJSZ2I4YTF1bm9ybToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCOGExVW5vcm0pOwor
ICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6RXRjMlJnYjhhMXVub3JtU1JHQjoKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9FVEMy
UkdCOGExdW5vcm1TcmdiKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkV0YzJSZ2JhOHVub3Jt
OgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0
dXJlRm9ybWF0X0VUQzJSR0JBOFVub3JtKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkV0YzJS
Z2JhOHVub3JtU1JHQjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9y
bWF0PihXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCQThVbm9ybVNyZ2IpOworICAgIGNhc2UgVGV4
dHVyZUZvcm1hdDo6RWFjUjExdW5vcm06CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BV
VGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfRUFDUjExVW5vcm0pOworICAgIGNhc2Ug
VGV4dHVyZUZvcm1hdDo6RWFjUjExc25vcm06CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxX
R1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfRUFDUjExU25vcm0pOworICAgIGNh
c2UgVGV4dHVyZUZvcm1hdDo6RWFjUmcxMXVub3JtOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1JHMTFVbm9ybSk7Cisg
ICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpFYWNSZzExc25vcm06CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfRUFDUkcxMVNub3Jt
KTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGM0eDRVbm9ybToKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNHg0
VW5vcm0pOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0YzR4NFVub3JtU1JHQjoKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1h
dF9BU1RDNHg0VW5vcm1TcmdiKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGM1eDRVbm9y
bToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4
dHVyZUZvcm1hdF9BU1RDNXg0VW5vcm0pOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0YzV4
NFVub3JtU1JHQjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0
PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg0VW5vcm1TcmdiKTsKKyAgICBjYXNlIFRleHR1cmVG
b3JtYXQ6OkFzdGM1eDVVbm9ybToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0
dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg1VW5vcm0pOworICAgIGNhc2UgVGV4
dHVyZUZvcm1hdDo6QXN0YzV4NVVub3JtU1JHQjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNXg1VW5vcm1TcmdiKTsK
KyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGM2eDVVbm9ybToKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RDNng1VW5v
cm0pOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0YzZ4NVVub3JtU1JHQjoKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9B
U1RDNng1VW5vcm1TcmdiKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGM2eDZVbm9ybToK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVy
ZUZvcm1hdF9BU1RDNng2VW5vcm0pOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0YzZ4NlVu
b3JtU1JHQjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihX
R1BVVGV4dHVyZUZvcm1hdF9BU1RDNng2VW5vcm1TcmdiKTsKKyAgICBjYXNlIFRleHR1cmVGb3Jt
YXQ6OkFzdGM4eDVVbm9ybToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJl
Rm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg1VW5vcm0pOworICAgIGNhc2UgVGV4dHVy
ZUZvcm1hdDo6QXN0Yzh4NVVub3JtU1JHQjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdH
UFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg1VW5vcm1TcmdiKTsKKyAg
ICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGM4eDZVbm9ybToKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RDOHg2VW5vcm0p
OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0Yzh4NlVub3JtU1JHQjoKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RD
OHg2VW5vcm1TcmdiKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGM4eDhVbm9ybToKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZv
cm1hdF9BU1RDOHg4VW5vcm0pOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0Yzh4OFVub3Jt
U1JHQjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BV
VGV4dHVyZUZvcm1hdF9BU1RDOHg4VW5vcm1TcmdiKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6
OkFzdGMxMHg1VW5vcm06CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZv
cm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDVVbm9ybSk7CisgICAgY2FzZSBUZXh0dXJl
Rm9ybWF0OjpBc3RjMTB4NVVub3JtU1JHQjoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdH
UFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4NVVub3JtU3JnYik7Cisg
ICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpBc3RjMTB4NlVub3JtOgorICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg2VW5v
cm0pOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0YzEweDZVbm9ybVNSR0I6CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRf
QVNUQzEweDZVbm9ybVNyZ2IpOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0YzEweDhVbm9y
bToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4
dHVyZUZvcm1hdF9BU1RDMTB4OFVub3JtKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGMx
MHg4VW5vcm1TUkdCOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3Jt
YXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg4VW5vcm1TcmdiKTsKKyAgICBjYXNlIFRleHR1
cmVGb3JtYXQ6OkFzdGMxMHgxMFVub3JtOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQ
VVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHgxMFVub3JtKTsKKyAgICBj
YXNlIFRleHR1cmVGb3JtYXQ6OkFzdGMxMHgxMFVub3JtU1JHQjoKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4MTBV
bm9ybVNyZ2IpOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0YzEyeDEwVW5vcm06CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3Jt
YXRfQVNUQzEyeDEwVW5vcm0pOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0YzEyeDEwVW5v
cm1TUkdCOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdH
UFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMFVub3JtU3JnYik7CisgICAgY2FzZSBUZXh0dXJlRm9y
bWF0OjpBc3RjMTJ4MTJVbm9ybToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0
dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4MTJVbm9ybSk7CisgICAgY2FzZSBU
ZXh0dXJlRm9ybWF0OjpBc3RjMTJ4MTJVbm9ybVNSR0I6CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEyeDEyVW5vcm1T
cmdiKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkRlcHRoMjR1bm9ybVN0ZW5jaWw4OgorICAg
ICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfRGVwdGgyNFBsdXNTdGVuY2lsODsKKyAgICBj
YXNlIFRleHR1cmVGb3JtYXQ6OkRlcHRoMzJmbG9hdFN0ZW5jaWw4OgorICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMzJG
bG9hdFN0ZW5jaWw4KTsKKyAgICB9Cit9CisKK1dHUFVUZXh0dXJlU2FtcGxlVHlwZSBjb252ZXJ0
VG9CYWNraW5nKFRleHR1cmVTYW1wbGVUeXBlIHRleHR1cmVTYW1wbGVUeXBlKQoreworICAgIHN3
aXRjaCAodGV4dHVyZVNhbXBsZVR5cGUpIHsKKyAgICBjYXNlIFRleHR1cmVTYW1wbGVUeXBlOjpG
bG9hdDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlU2FtcGxlVHlwZV9GbG9hdDsKKyAgICBj
YXNlIFRleHR1cmVTYW1wbGVUeXBlOjpVbmZpbHRlcmFibGVGbG9hdDoKKyAgICAgICAgcmV0dXJu
IFdHUFVUZXh0dXJlU2FtcGxlVHlwZV9VbmZpbHRlcmFibGVGbG9hdDsKKyAgICBjYXNlIFRleHR1
cmVTYW1wbGVUeXBlOjpEZXB0aDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlU2FtcGxlVHlw
ZV9EZXB0aDsKKyAgICBjYXNlIFRleHR1cmVTYW1wbGVUeXBlOjpTaW50OgorICAgICAgICByZXR1
cm4gV0dQVVRleHR1cmVTYW1wbGVUeXBlX1NpbnQ7CisgICAgY2FzZSBUZXh0dXJlU2FtcGxlVHlw
ZTo6VWludDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlU2FtcGxlVHlwZV9VaW50OworICAg
IH0KK30KKworV0dQVVRleHR1cmVWaWV3RGltZW5zaW9uIGNvbnZlcnRUb0JhY2tpbmcoVGV4dHVy
ZVZpZXdEaW1lbnNpb24gdGV4dHVyZVZpZXdEaW1lbnNpb24pCit7CisgICAgc3dpdGNoICh0ZXh0
dXJlVmlld0RpbWVuc2lvbikgeworICAgIGNhc2UgVGV4dHVyZVZpZXdEaW1lbnNpb246Ol8xZDoK
KyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlVmlld0RpbWVuc2lvbl8xRDsKKyAgICBjYXNlIFRl
eHR1cmVWaWV3RGltZW5zaW9uOjpfMmQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZVZpZXdE
aW1lbnNpb25fMkQ7CisgICAgY2FzZSBUZXh0dXJlVmlld0RpbWVuc2lvbjo6XzJkQXJyYXk6Cisg
ICAgICAgIHJldHVybiBXR1BVVGV4dHVyZVZpZXdEaW1lbnNpb25fMkRBcnJheTsKKyAgICBjYXNl
IFRleHR1cmVWaWV3RGltZW5zaW9uOjpDdWJlOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVW
aWV3RGltZW5zaW9uX0N1YmU7CisgICAgY2FzZSBUZXh0dXJlVmlld0RpbWVuc2lvbjo6Q3ViZUFy
cmF5OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVWaWV3RGltZW5zaW9uX0N1YmVBcnJheTsK
KyAgICBjYXNlIFRleHR1cmVWaWV3RGltZW5zaW9uOjpfM2Q6CisgICAgICAgIHJldHVybiBXR1BV
VGV4dHVyZVZpZXdEaW1lbnNpb25fM0Q7CisgICAgfQorfQorCitXR1BVVmVydGV4Rm9ybWF0IGNv
bnZlcnRUb0JhY2tpbmcoVmVydGV4Rm9ybWF0IHZlcnRleEZvcm1hdCkKK3sKKyAgICBzd2l0Y2gg
KHZlcnRleEZvcm1hdCkgeworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpVaW50OHgyOgorICAgICAg
ICByZXR1cm4gV0dQVVZlcnRleEZvcm1hdF9VaW50OHgyOworICAgIGNhc2UgVmVydGV4Rm9ybWF0
OjpVaW50OHg0OgorICAgICAgICByZXR1cm4gV0dQVVZlcnRleEZvcm1hdF9VaW50OHg0OworICAg
IGNhc2UgVmVydGV4Rm9ybWF0OjpTaW50OHgyOgorICAgICAgICByZXR1cm4gV0dQVVZlcnRleEZv
cm1hdF9TaW50OHgyOworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpTaW50OHg0OgorICAgICAgICBy
ZXR1cm4gV0dQVVZlcnRleEZvcm1hdF9TaW50OHg0OworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpV
bm9ybTh4MjoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfVW5vcm04eDI7CisgICAg
Y2FzZSBWZXJ0ZXhGb3JtYXQ6OlVub3JtOHg0OgorICAgICAgICByZXR1cm4gV0dQVVZlcnRleEZv
cm1hdF9Vbm9ybTh4NDsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6U25vcm04eDI6CisgICAgICAg
IHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X1Nub3JtOHgyOworICAgIGNhc2UgVmVydGV4Rm9ybWF0
OjpTbm9ybTh4NDoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfU25vcm04eDQ7Cisg
ICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlVpbnQxNngyOgorICAgICAgICByZXR1cm4gV0dQVVZlcnRl
eEZvcm1hdF9VaW50MTZ4MjsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6VWludDE2eDQ6CisgICAg
ICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X1VpbnQxNng0OworICAgIGNhc2UgVmVydGV4Rm9y
bWF0OjpTaW50MTZ4MjoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfU2ludDE2eDI7
CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlNpbnQxNng0OgorICAgICAgICByZXR1cm4gV0dQVVZl
cnRleEZvcm1hdF9TaW50MTZ4NDsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6VW5vcm0xNngyOgor
ICAgICAgICByZXR1cm4gV0dQVVZlcnRleEZvcm1hdF9Vbm9ybTE2eDI7CisgICAgY2FzZSBWZXJ0
ZXhGb3JtYXQ6OlVub3JtMTZ4NDoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfVW5v
cm0xNng0OworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpTbm9ybTE2eDI6CisgICAgICAgIHJldHVy
biBXR1BVVmVydGV4Rm9ybWF0X1Nub3JtMTZ4MjsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6U25v
cm0xNng0OgorICAgICAgICByZXR1cm4gV0dQVVZlcnRleEZvcm1hdF9Tbm9ybTE2eDQ7CisgICAg
Y2FzZSBWZXJ0ZXhGb3JtYXQ6OkZsb2F0MTZ4MjoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhG
b3JtYXRfRmxvYXQxNngyOworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpGbG9hdDE2eDQ6CisgICAg
ICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X0Zsb2F0MTZ4NDsKKyAgICBjYXNlIFZlcnRleEZv
cm1hdDo6RmxvYXQzMjoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfRmxvYXQzMjsK
KyAgICBjYXNlIFZlcnRleEZvcm1hdDo6RmxvYXQzMngyOgorICAgICAgICByZXR1cm4gV0dQVVZl
cnRleEZvcm1hdF9GbG9hdDMyeDI7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OkZsb2F0MzJ4MzoK
KyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfRmxvYXQzMngzOworICAgIGNhc2UgVmVy
dGV4Rm9ybWF0OjpGbG9hdDMyeDQ6CisgICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X0Zs
b2F0MzJ4NDsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6VWludDMyOgorICAgICAgICByZXR1cm4g
V0dQVVZlcnRleEZvcm1hdF9VaW50MzI7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlVpbnQzMngy
OgorICAgICAgICByZXR1cm4gV0dQVVZlcnRleEZvcm1hdF9VaW50MzJ4MjsKKyAgICBjYXNlIFZl
cnRleEZvcm1hdDo6VWludDMyeDM6CisgICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X1Vp
bnQzMngzOworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpVaW50MzJ4NDoKKyAgICAgICAgcmV0dXJu
IFdHUFVWZXJ0ZXhGb3JtYXRfVWludDMyeDQ7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlNpbnQz
MjoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfU2ludDMyOworICAgIGNhc2UgVmVy
dGV4Rm9ybWF0OjpTaW50MzJ4MjoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfU2lu
dDMyeDI7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlNpbnQzMngzOgorICAgICAgICByZXR1cm4g
V0dQVVZlcnRleEZvcm1hdF9TaW50MzJ4MzsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6U2ludDMy
eDQ6CisgICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X1NpbnQzMng0OworICAgIH0KK30K
KworV0dQVVZlcnRleFN0ZXBNb2RlIGNvbnZlcnRUb0JhY2tpbmcoVmVydGV4U3RlcE1vZGUgdmVy
dGV4U3RlcE1vZGUpCit7CisgICAgc3dpdGNoICh2ZXJ0ZXhTdGVwTW9kZSkgeworICAgIGNhc2Ug
VmVydGV4U3RlcE1vZGU6OlZlcnRleDoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhTdGVwTW9k
ZV9WZXJ0ZXg7CisgICAgY2FzZSBWZXJ0ZXhTdGVwTW9kZTo6SW5zdGFuY2U6CisgICAgICAgIHJl
dHVybiBXR1BVVmVydGV4U3RlcE1vZGVfSW5zdGFuY2U7CisgICAgfQorfQorCitXR1BVQnVmZmVy
VXNhZ2VGbGFncyBjb252ZXJ0QnVmZmVyVXNhZ2VGbGFnc1RvQmFja2luZyhCdWZmZXJVc2FnZUZs
YWdzIGJ1ZmZlclVzYWdlRmxhZ3MpCit7CisgICAgV0dQVUJ1ZmZlclVzYWdlRmxhZ3MgcmVzdWx0
ID0gMDsKKyAgICBpZiAoYnVmZmVyVXNhZ2VGbGFncyAmIEJ1ZmZlclVzYWdlOjpNQVBfUkVBRCkK
KyAgICAgICAgcmVzdWx0IHw9IFdHUFVCdWZmZXJVc2FnZV9NYXBSZWFkOworICAgIGlmIChidWZm
ZXJVc2FnZUZsYWdzICYgQnVmZmVyVXNhZ2U6Ok1BUF9XUklURSkKKyAgICAgICAgcmVzdWx0IHw9
IFdHUFVCdWZmZXJVc2FnZV9NYXBXcml0ZTsKKyAgICBpZiAoYnVmZmVyVXNhZ2VGbGFncyAmIEJ1
ZmZlclVzYWdlOjpDT1BZX1NSQykKKyAgICAgICAgcmVzdWx0IHw9IFdHUFVCdWZmZXJVc2FnZV9D
b3B5U3JjOworICAgIGlmIChidWZmZXJVc2FnZUZsYWdzICYgQnVmZmVyVXNhZ2U6OkNPUFlfRFNU
KQorICAgICAgICByZXN1bHQgfD0gV0dQVUJ1ZmZlclVzYWdlX0NvcHlEc3Q7CisgICAgaWYgKGJ1
ZmZlclVzYWdlRmxhZ3MgJiBCdWZmZXJVc2FnZTo6SU5ERVgpCisgICAgICAgIHJlc3VsdCB8PSBX
R1BVQnVmZmVyVXNhZ2VfSW5kZXg7CisgICAgaWYgKGJ1ZmZlclVzYWdlRmxhZ3MgJiBCdWZmZXJV
c2FnZTo6VkVSVEVYKQorICAgICAgICByZXN1bHQgfD0gV0dQVUJ1ZmZlclVzYWdlX1ZlcnRleDsK
KyAgICBpZiAoYnVmZmVyVXNhZ2VGbGFncyAmIEJ1ZmZlclVzYWdlOjpVTklGT1JNKQorICAgICAg
ICByZXN1bHQgfD0gV0dQVUJ1ZmZlclVzYWdlX1VuaWZvcm07CisgICAgaWYgKGJ1ZmZlclVzYWdl
RmxhZ3MgJiBCdWZmZXJVc2FnZTo6U1RPUkFHRSkKKyAgICAgICAgcmVzdWx0IHw9IFdHUFVCdWZm
ZXJVc2FnZV9TdG9yYWdlOworICAgIGlmIChidWZmZXJVc2FnZUZsYWdzICYgQnVmZmVyVXNhZ2U6
OklORElSRUNUKQorICAgICAgICByZXN1bHQgfD0gV0dQVUJ1ZmZlclVzYWdlX0luZGlyZWN0Owor
ICAgIGlmIChidWZmZXJVc2FnZUZsYWdzICYgQnVmZmVyVXNhZ2U6OlFVRVJZX1JFU09MVkUpCisg
ICAgICAgIHJlc3VsdCB8PSBXR1BVQnVmZmVyVXNhZ2VfUXVlcnlSZXNvbHZlOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK1dHUFVDb2xvcldyaXRlTWFza0ZsYWdzIGNvbnZlcnRDb2xvcldyaXRl
RmxhZ3NUb0JhY2tpbmcoQ29sb3JXcml0ZUZsYWdzIGNvbG9yV3JpdGVGbGFncykKK3sKKyAgICBX
R1BVQ29sb3JXcml0ZU1hc2tGbGFncyByZXN1bHQgPSAwOworICAgIGlmIChjb2xvcldyaXRlRmxh
Z3MgJiBDb2xvcldyaXRlOjpSRUQpCisgICAgICAgIHJlc3VsdCB8PSBXR1BVQ29sb3JXcml0ZU1h
c2tfUmVkOworICAgIGlmIChjb2xvcldyaXRlRmxhZ3MgJiBDb2xvcldyaXRlOjpHUkVFTikKKyAg
ICAgICAgcmVzdWx0IHw9IFdHUFVDb2xvcldyaXRlTWFza19HcmVlbjsKKyAgICBpZiAoY29sb3JX
cml0ZUZsYWdzICYgQ29sb3JXcml0ZTo6QkxVRSkKKyAgICAgICAgcmVzdWx0IHw9IFdHUFVDb2xv
cldyaXRlTWFza19CbHVlOworICAgIGlmIChjb2xvcldyaXRlRmxhZ3MgJiBDb2xvcldyaXRlOjpB
TFBIQSkKKyAgICAgICAgcmVzdWx0IHw9IFdHUFVDb2xvcldyaXRlTWFza19BbHBoYTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitXR1BVTWFwTW9kZUZsYWdzIGNvbnZlcnRNYXBNb2RlRmxhZ3NU
b0JhY2tpbmcoTWFwTW9kZUZsYWdzIG1hcE1vZGVGbGFncykKK3sKKyAgICBXR1BVTWFwTW9kZUZs
YWdzIHJlc3VsdCA9IDA7CisgICAgaWYgKG1hcE1vZGVGbGFncyAmIE1hcE1vZGU6OlJFQUQpCisg
ICAgICAgIHJlc3VsdCB8PSBXR1BVTWFwTW9kZV9SZWFkOworICAgIGlmIChtYXBNb2RlRmxhZ3Mg
JiBNYXBNb2RlOjpXUklURSkKKyAgICAgICAgcmVzdWx0IHw9IFdHUFVNYXBNb2RlX1dyaXRlOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dHUFVTaGFkZXJTdGFnZUZsYWdzIGNvbnZlcnRTaGFk
ZXJTdGFnZUZsYWdzVG9CYWNraW5nKFNoYWRlclN0YWdlRmxhZ3Mgc2hhZGVyU3RhZ2VGbGFncykK
K3sKKyAgICBXR1BVU2hhZGVyU3RhZ2VGbGFncyByZXN1bHQgPSAwOworICAgIGlmIChzaGFkZXJT
dGFnZUZsYWdzICYgU2hhZGVyU3RhZ2U6OlZFUlRFWCkKKyAgICAgICAgcmVzdWx0IHw9IFdHUFVT
aGFkZXJTdGFnZV9WZXJ0ZXg7CisgICAgaWYgKHNoYWRlclN0YWdlRmxhZ3MgJiBTaGFkZXJTdGFn
ZTo6RlJBR01FTlQpCisgICAgICAgIHJlc3VsdCB8PSBXR1BVU2hhZGVyU3RhZ2VfRnJhZ21lbnQ7
CisgICAgaWYgKHNoYWRlclN0YWdlRmxhZ3MgJiBTaGFkZXJTdGFnZTo6Q09NUFVURSkKKyAgICAg
ICAgcmVzdWx0IHw9IFdHUFVTaGFkZXJTdGFnZV9Db21wdXRlOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK1dHUFVUZXh0dXJlVXNhZ2VGbGFncyBjb252ZXJ0VGV4dHVyZVVzYWdlRmxhZ3NUb0Jh
Y2tpbmcoVGV4dHVyZVVzYWdlRmxhZ3MgdGV4dHVyZVVzYWdlRmxhZ3MpCit7CisgICAgV0dQVVRl
eHR1cmVVc2FnZUZsYWdzIHJlc3VsdCA9IDA7CisgICAgaWYgKHRleHR1cmVVc2FnZUZsYWdzICYg
VGV4dHVyZVVzYWdlOjpDT1BZX1NSQykKKyAgICAgICAgcmVzdWx0IHw9IFdHUFVUZXh0dXJlVXNh
Z2VfQ29weVNyYzsKKyAgICBpZiAodGV4dHVyZVVzYWdlRmxhZ3MgJiBUZXh0dXJlVXNhZ2U6OkNP
UFlfRFNUKQorICAgICAgICByZXN1bHQgfD0gV0dQVVRleHR1cmVVc2FnZV9Db3B5RHN0OworICAg
IGlmICh0ZXh0dXJlVXNhZ2VGbGFncyAmIFRleHR1cmVVc2FnZTo6VEVYVFVSRV9CSU5ESU5HKQor
ICAgICAgICByZXN1bHQgfD0gV0dQVVRleHR1cmVVc2FnZV9UZXh0dXJlQmluZGluZzsKKyAgICBp
ZiAodGV4dHVyZVVzYWdlRmxhZ3MgJiBUZXh0dXJlVXNhZ2U6OlNUT1JBR0VfQklORElORykKKyAg
ICAgICAgcmVzdWx0IHw9IFdHUFVUZXh0dXJlVXNhZ2VfU3RvcmFnZUJpbmRpbmc7CisgICAgaWYg
KHRleHR1cmVVc2FnZUZsYWdzICYgVGV4dHVyZVVzYWdlOjpSRU5ERVJfQVRUQUNITUVOVCkKKyAg
ICAgICAgcmVzdWx0IHw9IFdHUFVUZXh0dXJlVXNhZ2VfUmVuZGVyQXR0YWNobWVudDsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitXR1BVQ29sb3IgY29udmVydFRvQmFja2luZyhjb25zdCBDb2xv
ciYgY29sb3IpCit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oY29sb3IsIFtdIChjb25zdCBW
ZWN0b3I8ZG91YmxlPiYgdmVjdG9yKSB7CisgICAgICAgIHJldHVybiBXR1BVQ29sb3IgeworICAg
ICAgICAgICAgdmVjdG9yLnNpemUoKSA+IDAgPyB2ZWN0b3JbMF0gOiAwLAorICAgICAgICAgICAg
dmVjdG9yLnNpemUoKSA+IDEgPyB2ZWN0b3JbMV0gOiAwLAorICAgICAgICAgICAgdmVjdG9yLnNp
emUoKSA+IDIgPyB2ZWN0b3JbMl0gOiAwLAorICAgICAgICAgICAgdmVjdG9yLnNpemUoKSA+IDMg
PyB2ZWN0b3JbM10gOiAwLAorICAgICAgICB9OworICAgIH0sIFtdIChjb25zdCBDb2xvckRpY3Qm
IGNvbG9yKSB7CisgICAgICAgIHJldHVybiBXR1BVQ29sb3IgeworICAgICAgICAgICAgY29sb3Iu
ciwKKyAgICAgICAgICAgIGNvbG9yLmcsCisgICAgICAgICAgICBjb2xvci5iLAorICAgICAgICAg
ICAgY29sb3IuYSwKKyAgICAgICAgfTsKKyAgICB9KTsKK30KKworV0dQVUV4dGVudDNEIGNvbnZl
cnRUb0JhY2tpbmcoY29uc3QgRXh0ZW50M0QmIGV4dGVudDNEKQoreworICAgIHJldHVybiBXVEY6
OnN3aXRjaE9uKGV4dGVudDNELCBbXSAoY29uc3QgVmVjdG9yPEludGVnZXJDb29yZGluYXRlPiYg
dmVjdG9yKSB7CisgICAgICAgIHJldHVybiBXR1BVRXh0ZW50M0QgeworICAgICAgICAgICAgdmVj
dG9yLnNpemUoKSA+IDAgPyB2ZWN0b3JbMF0gOiAwLAorICAgICAgICAgICAgdmVjdG9yLnNpemUo
KSA+IDEgPyB2ZWN0b3JbMV0gOiAwLAorICAgICAgICAgICAgdmVjdG9yLnNpemUoKSA+IDIgPyB2
ZWN0b3JbMl0gOiAwLAorICAgICAgICB9OworICAgIH0sIFtdIChjb25zdCBFeHRlbnQzRERpY3Qm
IGV4dGVudCkgeworICAgICAgICByZXR1cm4gV0dQVUV4dGVudDNEIHsKKyAgICAgICAgICAgIGV4
dGVudC53aWR0aCwKKyAgICAgICAgICAgIGV4dGVudC5oZWlnaHQsCisgICAgICAgICAgICBleHRl
bnQuZGVwdGhPckFycmF5TGF5ZXJzLAorICAgICAgICB9OworICAgIH0pOworfQorCitXR1BVT3Jp
Z2luM0QgY29udmVydFRvQmFja2luZyhjb25zdCBPcmlnaW4yRCYgb3JpZ2luMkQpCit7CisgICAg
cmV0dXJuIFdURjo6c3dpdGNoT24ob3JpZ2luMkQsIFtdIChjb25zdCBWZWN0b3I8SW50ZWdlckNv
b3JkaW5hdGU+JiB2ZWN0b3IpIHsKKyAgICAgICAgcmV0dXJuIFdHUFVPcmlnaW4zRCB7CisgICAg
ICAgICAgICB2ZWN0b3Iuc2l6ZSgpID4gMCA/IHZlY3RvclswXSA6IDAsCisgICAgICAgICAgICB2
ZWN0b3Iuc2l6ZSgpID4gMSA/IHZlY3RvclsxXSA6IDAsCisgICAgICAgICAgICAwLAorICAgICAg
ICB9OworICAgIH0sIFtdIChjb25zdCBPcmlnaW4yRERpY3QmIG9yaWdpbikgeworICAgICAgICBy
ZXR1cm4gV0dQVU9yaWdpbjNEIHsKKyAgICAgICAgICAgIG9yaWdpbi54LAorICAgICAgICAgICAg
b3JpZ2luLnksCisgICAgICAgICAgICAwLAorICAgICAgICB9OworICAgIH0pOworfQorCitXR1BV
T3JpZ2luM0QgY29udmVydFRvQmFja2luZyhjb25zdCBPcmlnaW4zRCYgb3JpZ2luM0QpCit7Cisg
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24ob3JpZ2luM0QsIFtdIChjb25zdCBWZWN0b3I8SW50ZWdl
ckNvb3JkaW5hdGU+JiB2ZWN0b3IpIHsKKyAgICAgICAgcmV0dXJuIFdHUFVPcmlnaW4zRCB7Cisg
ICAgICAgICAgICB2ZWN0b3Iuc2l6ZSgpID4gMCA/IHZlY3RvclswXSA6IDAsCisgICAgICAgICAg
ICB2ZWN0b3Iuc2l6ZSgpID4gMSA/IHZlY3RvclsxXSA6IDAsCisgICAgICAgICAgICB2ZWN0b3Iu
c2l6ZSgpID4gMiA/IHZlY3RvclsyXSA6IDAsCisgICAgICAgIH07CisgICAgfSwgW10gKGNvbnN0
IE9yaWdpbjNERGljdCYgb3JpZ2luKSB7CisgICAgICAgIHJldHVybiBXR1BVT3JpZ2luM0Qgewor
ICAgICAgICAgICAgb3JpZ2luLngsCisgICAgICAgICAgICBvcmlnaW4ueSwKKyAgICAgICAgICAg
IG9yaWdpbi56LAorICAgICAgICB9OworICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwK
K30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb252ZXJ0VG9CYWNraW5nLmggYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbnZlcnRUb0JhY2tp
bmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi40ZTQxZDc5NGFiNGJmMzY2OWRkNzE0YzEyNjM0MWY4Njk4NGNlNTA5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJH
UFUvSW1wbC9XZWJHUFVDb252ZXJ0VG9CYWNraW5nLmgKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYkdQVUFkZHJlc3NNb2RlLmgiCisj
aW5jbHVkZSAiV2ViR1BVQmxlbmRGYWN0b3IuaCIKKyNpbmNsdWRlICJXZWJHUFVCbGVuZE9wZXJh
dGlvbi5oIgorI2luY2x1ZGUgIldlYkdQVUJ1ZmZlckJpbmRpbmdUeXBlLmgiCisjaW5jbHVkZSAi
V2ViR1BVQnVmZmVyVXNhZ2UuaCIKKyNpbmNsdWRlICJXZWJHUFVDb2xvci5oIgorI2luY2x1ZGUg
IldlYkdQVUNvbG9yV3JpdGUuaCIKKyNpbmNsdWRlICJXZWJHUFVDb21wYXJlRnVuY3Rpb24uaCIK
KyNpbmNsdWRlICJXZWJHUFVDb21waWxhdGlvbk1lc3NhZ2VUeXBlLmgiCisjaW5jbHVkZSAiV2Vi
R1BVQ3VsbE1vZGUuaCIKKyNpbmNsdWRlICJXZWJHUFVFcnJvckZpbHRlci5oIgorI2luY2x1ZGUg
IldlYkdQVUV4dGVudDNELmgiCisjaW5jbHVkZSAiV2ViR1BVRmVhdHVyZU5hbWUuaCIKKyNpbmNs
dWRlICJXZWJHUFVGaWx0ZXJNb2RlLmgiCisjaW5jbHVkZSAiV2ViR1BVRnJvbnRGYWNlLmgiCisj
aW5jbHVkZSAiV2ViR1BVSW5kZXhGb3JtYXQuaCIKKyNpbmNsdWRlICJXZWJHUFVMb2FkT3AuaCIK
KyNpbmNsdWRlICJXZWJHUFVNYXBNb2RlLmgiCisjaW5jbHVkZSAiV2ViR1BVT3JpZ2luMkQuaCIK
KyNpbmNsdWRlICJXZWJHUFVPcmlnaW4zRC5oIgorI2luY2x1ZGUgIldlYkdQVVBpcGVsaW5lU3Rh
dGlzdGljTmFtZS5oIgorI2luY2x1ZGUgIldlYkdQVVBvd2VyUHJlZmVyZW5jZS5oIgorI2luY2x1
ZGUgIldlYkdQVVByaW1pdGl2ZVRvcG9sb2d5LmgiCisjaW5jbHVkZSAiV2ViR1BVUXVlcnlUeXBl
LmgiCisjaW5jbHVkZSAiV2ViR1BVU2FtcGxlckJpbmRpbmdUeXBlLmgiCisjaW5jbHVkZSAiV2Vi
R1BVU2hhZGVyU3RhZ2UuaCIKKyNpbmNsdWRlICJXZWJHUFVTdGVuY2lsT3BlcmF0aW9uLmgiCisj
aW5jbHVkZSAiV2ViR1BVU3RvcmFnZVRleHR1cmVBY2Nlc3MuaCIKKyNpbmNsdWRlICJXZWJHUFVT
dG9yZU9wLmgiCisjaW5jbHVkZSAiV2ViR1BVVGV4dHVyZUFzcGVjdC5oIgorI2luY2x1ZGUgIldl
YkdQVVRleHR1cmVEaW1lbnNpb24uaCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJlRm9ybWF0Lmgi
CisjaW5jbHVkZSAiV2ViR1BVVGV4dHVyZVNhbXBsZVR5cGUuaCIKKyNpbmNsdWRlICJXZWJHUFVU
ZXh0dXJlVXNhZ2UuaCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJlVmlld0RpbWVuc2lvbi5oIgor
I2luY2x1ZGUgIldlYkdQVVZlcnRleEZvcm1hdC5oIgorI2luY2x1ZGUgIldlYkdQVVZlcnRleFN0
ZXBNb2RlLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorCituYW1lc3BhY2UgUEFMIHsK
K25hbWVzcGFjZSBXZWJHUFUgeworCitXR1BVQWRkcmVzc01vZGUgY29udmVydFRvQmFja2luZyhB
ZGRyZXNzTW9kZSk7CitXR1BVQmxlbmRGYWN0b3IgY29udmVydFRvQmFja2luZyhCbGVuZEZhY3Rv
cik7CitXR1BVQmxlbmRPcGVyYXRpb24gY29udmVydFRvQmFja2luZyhCbGVuZE9wZXJhdGlvbik7
CitXR1BVQnVmZmVyQmluZGluZ1R5cGUgY29udmVydFRvQmFja2luZyhCdWZmZXJCaW5kaW5nVHlw
ZSk7CitXR1BVQ29tcGFyZUZ1bmN0aW9uIGNvbnZlcnRUb0JhY2tpbmcoQ29tcGFyZUZ1bmN0aW9u
KTsKK1dHUFVDb21waWxhdGlvbk1lc3NhZ2VUeXBlIGNvbnZlcnRUb0JhY2tpbmcoQ29tcGlsYXRp
b25NZXNzYWdlVHlwZSk7CitXR1BVQ3VsbE1vZGUgY29udmVydFRvQmFja2luZyhDdWxsTW9kZSk7
CitXR1BVRXJyb3JGaWx0ZXIgY29udmVydFRvQmFja2luZyhFcnJvckZpbHRlcik7CitXR1BVRmVh
dHVyZU5hbWUgY29udmVydFRvQmFja2luZyhGZWF0dXJlTmFtZSk7CitXR1BVRmlsdGVyTW9kZSBj
b252ZXJ0VG9CYWNraW5nKEZpbHRlck1vZGUpOworV0dQVUZyb250RmFjZSBjb252ZXJ0VG9CYWNr
aW5nKEZyb250RmFjZSk7CitXR1BVSW5kZXhGb3JtYXQgY29udmVydFRvQmFja2luZyhJbmRleEZv
cm1hdCk7CitXR1BVTG9hZE9wIGNvbnZlcnRUb0JhY2tpbmcoTG9hZE9wKTsKK1dHUFVQaXBlbGlu
ZVN0YXRpc3RpY05hbWUgY29udmVydFRvQmFja2luZyhQaXBlbGluZVN0YXRpc3RpY05hbWUpOwor
V0dQVVBvd2VyUHJlZmVyZW5jZSBjb252ZXJ0VG9CYWNraW5nKFBvd2VyUHJlZmVyZW5jZSk7CitX
R1BVUHJpbWl0aXZlVG9wb2xvZ3kgY29udmVydFRvQmFja2luZyhQcmltaXRpdmVUb3BvbG9neSk7
CitXR1BVUXVlcnlUeXBlIGNvbnZlcnRUb0JhY2tpbmcoUXVlcnlUeXBlKTsKK1dHUFVTYW1wbGVy
QmluZGluZ1R5cGUgY29udmVydFRvQmFja2luZyhTYW1wbGVyQmluZGluZ1R5cGUpOworV0dQVVN0
ZW5jaWxPcGVyYXRpb24gY29udmVydFRvQmFja2luZyhTdGVuY2lsT3BlcmF0aW9uKTsKK1dHUFVT
dG9yYWdlVGV4dHVyZUFjY2VzcyBjb252ZXJ0VG9CYWNraW5nKFN0b3JhZ2VUZXh0dXJlQWNjZXNz
KTsKK1dHUFVTdG9yZU9wIGNvbnZlcnRUb0JhY2tpbmcoU3RvcmVPcCk7CitXR1BVVGV4dHVyZUFz
cGVjdCBjb252ZXJ0VG9CYWNraW5nKFRleHR1cmVBc3BlY3QpOworV0dQVVRleHR1cmVEaW1lbnNp
b24gY29udmVydFRvQmFja2luZyhUZXh0dXJlRGltZW5zaW9uKTsKK1dHUFVUZXh0dXJlRm9ybWF0
IGNvbnZlcnRUb0JhY2tpbmcoVGV4dHVyZUZvcm1hdCk7CitXR1BVVGV4dHVyZVNhbXBsZVR5cGUg
Y29udmVydFRvQmFja2luZyhUZXh0dXJlU2FtcGxlVHlwZSk7CitXR1BVVGV4dHVyZVZpZXdEaW1l
bnNpb24gY29udmVydFRvQmFja2luZyhUZXh0dXJlVmlld0RpbWVuc2lvbik7CitXR1BVVmVydGV4
Rm9ybWF0IGNvbnZlcnRUb0JhY2tpbmcoVmVydGV4Rm9ybWF0KTsKK1dHUFVWZXJ0ZXhTdGVwTW9k
ZSBjb252ZXJ0VG9CYWNraW5nKFZlcnRleFN0ZXBNb2RlKTsKK1dHUFVCdWZmZXJVc2FnZUZsYWdz
IGNvbnZlcnRCdWZmZXJVc2FnZUZsYWdzVG9CYWNraW5nKEJ1ZmZlclVzYWdlRmxhZ3MpOworV0dQ
VUNvbG9yV3JpdGVNYXNrRmxhZ3MgY29udmVydENvbG9yV3JpdGVGbGFnc1RvQmFja2luZyhDb2xv
cldyaXRlRmxhZ3MpOworV0dQVU1hcE1vZGVGbGFncyBjb252ZXJ0TWFwTW9kZUZsYWdzVG9CYWNr
aW5nKE1hcE1vZGVGbGFncyk7CitXR1BVU2hhZGVyU3RhZ2VGbGFncyBjb252ZXJ0U2hhZGVyU3Rh
Z2VGbGFnc1RvQmFja2luZyhTaGFkZXJTdGFnZUZsYWdzKTsKK1dHUFVUZXh0dXJlVXNhZ2VGbGFn
cyBjb252ZXJ0VGV4dHVyZVVzYWdlRmxhZ3NUb0JhY2tpbmcoVGV4dHVyZVVzYWdlRmxhZ3MpOwor
V0dQVUNvbG9yIGNvbnZlcnRUb0JhY2tpbmcoY29uc3QgQ29sb3ImKTsKK1dHUFVFeHRlbnQzRCBj
b252ZXJ0VG9CYWNraW5nKGNvbnN0IEV4dGVudDNEJik7CitXR1BVT3JpZ2luM0QgY29udmVydFRv
QmFja2luZyhjb25zdCBPcmlnaW4yRCYpOworV0dQVU9yaWdpbjNEIGNvbnZlcnRUb0JhY2tpbmco
Y29uc3QgT3JpZ2luM0QmKTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBX
ZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BV
L0ltcGwvV2ViR1BVRGV2aWNlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBo
aWNzL1dlYkdQVS9JbXBsL1dlYkdQVURldmljZUltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlMTdiMjMw
ZWNmZTkyZjEzZDQ2YzZhOTA0MTgzNTBhZGUzNTA3MTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVURldmljZUltcGwu
Y3BwCkBAIC0wLDAgKzEsNTgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYkdQVURldmljZUltcGwuaCIKKworI2luY2x1ZGUgIldlYkdQVUJpbmRHcm91
cERlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJXZWJHUFVCaW5kR3JvdXBJbXBsLmgiCisjaW5jbHVk
ZSAiV2ViR1BVQmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIldlYkdQVUJp
bmRHcm91cExheW91dEltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVCdWZmZXJEZXNjcmlwdG9yLmgi
CisjaW5jbHVkZSAiV2ViR1BVQnVmZmVySW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVUNvbW1hbmRF
bmNvZGVyRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIldlYkdQVUNvbW1hbmRFbmNvZGVySW1wbC5o
IgorI2luY2x1ZGUgIldlYkdQVUNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IuaCIKKyNpbmNsdWRl
ICJXZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVQ29udmVydFRv
QmFja2luZy5oIgorI2luY2x1ZGUgIldlYkdQVUV4dGVybmFsVGV4dHVyZUltcGwuaCIKKyNpbmNs
dWRlICJXZWJHUFVPdXRPZk1lbW9yeUVycm9yLmgiCisjaW5jbHVkZSAiV2ViR1BVUGlwZWxpbmVM
YXlvdXREZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiV2ViR1BVUGlwZWxpbmVMYXlvdXRJbXBsLmgi
CisjaW5jbHVkZSAiV2ViR1BVUXVlcnlTZXREZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiV2ViR1BV
UXVlcnlTZXRJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVUmVuZGVyQnVuZGxlRW5jb2RlckRlc2Ny
aXB0b3IuaCIKKyNpbmNsdWRlICJXZWJHUFVSZW5kZXJCdW5kbGVFbmNvZGVySW1wbC5oIgorI2lu
Y2x1ZGUgIldlYkdQVVJlbmRlclBpcGVsaW5lRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIldlYkdQ
VVJlbmRlclBpcGVsaW5lSW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVVNhbXBsZXJEZXNjcmlwdG9y
LmgiCisjaW5jbHVkZSAiV2ViR1BVU2FtcGxlckltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVTaGFk
ZXJNb2R1bGVEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiV2ViR1BVU2hhZGVyTW9kdWxlSW1wbC5o
IgorI2luY2x1ZGUgIldlYkdQVVRleHR1cmVEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiV2ViR1BV
VGV4dHVyZUltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJlVmlld0ltcGwuaCIKKyNpbmNs
dWRlICJXZWJHUFVWYWxpZGF0aW9uRXJyb3IuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVRXh0
Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK0RldmljZUltcGw6
OkRldmljZUltcGwoV0dQVURldmljZSBkZXZpY2UsIFJlZjxTdXBwb3J0ZWRGZWF0dXJlcz4mJiBm
ZWF0dXJlcywgUmVmPFN1cHBvcnRlZExpbWl0cz4mJiBsaW1pdHMpCisgICAgOiBEZXZpY2UoV1RG
TW92ZShmZWF0dXJlcyksIFdURk1vdmUobGltaXRzKSkKKyAgICAsIG1fYmFja2luZyhkZXZpY2Up
Cit7Cit9CisKK0RldmljZUltcGw6On5EZXZpY2VJbXBsKCkKK3sKKyAgICB3Z3B1RGV2aWNlUmVs
ZWFzZShtX2JhY2tpbmcpOworfQorCit2b2lkIERldmljZUltcGw6OmRlc3Ryb3koKQoreworICAg
IHdncHVEZXZpY2VEZXN0cm95KG1fYmFja2luZyk7Cit9CisKK1JlZjxCdWZmZXI+IERldmljZUlt
cGw6OmNyZWF0ZUJ1ZmZlcihjb25zdCBCdWZmZXJEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQorewor
ICAgIGF1dG8gbGFiZWwgPSBkZXNjcmlwdG9yLmxhYmVsLnV0ZjgoKTsKKworICAgIFdHUFVCdWZm
ZXJEZXNjcmlwdG9yIGJhY2tpbmdEZXNjcmlwdG9yIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAg
ICAgbGFiZWwuZGF0YSgpLAorICAgICAgICBjb252ZXJ0QnVmZmVyVXNhZ2VGbGFnc1RvQmFja2lu
ZyhkZXNjcmlwdG9yLnVzYWdlKSwKKyAgICAgICAgZGVzY3JpcHRvci5zaXplLAorICAgICAgICBk
ZXNjcmlwdG9yLm1hcHBlZEF0Q3JlYXRpb24sCisgICAgfTsKKworICAgIHJldHVybiBCdWZmZXJJ
bXBsOjpjcmVhdGUod2dwdURldmljZUNyZWF0ZUJ1ZmZlcihtX2JhY2tpbmcsICZiYWNraW5nRGVz
Y3JpcHRvcikpOworfQorCitSZWY8VGV4dHVyZT4gRGV2aWNlSW1wbDo6Y3JlYXRlVGV4dHVyZShj
b25zdCBUZXh0dXJlRGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBhdXRvIHNpemUgPSBj
b252ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3Iuc2l6ZSk7CisKKyAgICBhdXRvIGxhYmVsID0gZGVz
Y3JpcHRvci5sYWJlbC51dGY4KCk7CisKKyAgICBXR1BVVGV4dHVyZURlc2NyaXB0b3IgYmFja2lu
Z0Rlc2NyaXB0b3IgeworICAgICAgICBudWxscHRyLAorICAgICAgICBsYWJlbC5kYXRhKCksCisg
ICAgICAgIGNvbnZlcnRUZXh0dXJlVXNhZ2VGbGFnc1RvQmFja2luZyhkZXNjcmlwdG9yLnVzYWdl
KSwKKyAgICAgICAgY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLmRpbWVuc2lvbiksCisgICAg
ICAgIHNpemUsCisgICAgICAgIGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci5mb3JtYXQpLAor
ICAgICAgICBkZXNjcmlwdG9yLm1pcExldmVsQ291bnQsCisgICAgICAgIGRlc2NyaXB0b3Iuc2Ft
cGxlQ291bnQsCisgICAgfTsKKworICAgIHJldHVybiBUZXh0dXJlSW1wbDo6Y3JlYXRlKHdncHVE
ZXZpY2VDcmVhdGVUZXh0dXJlKG1fYmFja2luZywgJmJhY2tpbmdEZXNjcmlwdG9yKSwgZGVzY3Jp
cHRvci5mb3JtYXQsIGRlc2NyaXB0b3IuZGltZW5zaW9uKTsKK30KKworUmVmPFNhbXBsZXI+IERl
dmljZUltcGw6OmNyZWF0ZVNhbXBsZXIoY29uc3QgU2FtcGxlckRlc2NyaXB0b3ImIGRlc2NyaXB0
b3IpCit7CisgICAgYXV0byBsYWJlbCA9IGRlc2NyaXB0b3IubGFiZWwudXRmOCgpOworCisgICAg
V0dQVVNhbXBsZXJEZXNjcmlwdG9yIGJhY2tpbmdEZXNjcmlwdG9yIHsKKyAgICAgICAgbnVsbHB0
ciwKKyAgICAgICAgbGFiZWwuZGF0YSgpLAorICAgICAgICBjb252ZXJ0VG9CYWNraW5nKGRlc2Ny
aXB0b3IuYWRkcmVzc01vZGVVKSwKKyAgICAgICAgY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9y
LmFkZHJlc3NNb2RlViksCisgICAgICAgIGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci5hZGRy
ZXNzTW9kZVcpLAorICAgICAgICBjb252ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3IubWFnRmlsdGVy
KSwKKyAgICAgICAgY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLm1pbkZpbHRlciksCisgICAg
ICAgIGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci5taXBtYXBGaWx0ZXIpLAorICAgICAgICBk
ZXNjcmlwdG9yLmxvZE1pbkNsYW1wLAorICAgICAgICBkZXNjcmlwdG9yLmxvZE1heENsYW1wLAor
ICAgICAgICBkZXNjcmlwdG9yLmNvbXBhcmUgPyBjb252ZXJ0VG9CYWNraW5nKCpkZXNjcmlwdG9y
LmNvbXBhcmUpIDogV0dQVUNvbXBhcmVGdW5jdGlvbl9BbHdheXMsCisgICAgICAgIGRlc2NyaXB0
b3IubWF4QW5pc290cm9weSwKKyAgICB9OworCisgICAgcmV0dXJuIFNhbXBsZXJJbXBsOjpjcmVh
dGUod2dwdURldmljZUNyZWF0ZVNhbXBsZXIobV9iYWNraW5nLCAmYmFja2luZ0Rlc2NyaXB0b3Ip
KTsKK30KKworUmVmPEV4dGVybmFsVGV4dHVyZT4gRGV2aWNlSW1wbDo6aW1wb3J0RXh0ZXJuYWxU
ZXh0dXJlKGNvbnN0IEV4dGVybmFsVGV4dHVyZURlc2NyaXB0b3ImKQoreworICAgIHJldHVybiBF
eHRlcm5hbFRleHR1cmVJbXBsOjpjcmVhdGUoKTsKK30KKworUmVmPEJpbmRHcm91cExheW91dD4g
RGV2aWNlSW1wbDo6Y3JlYXRlQmluZEdyb3VwTGF5b3V0KGNvbnN0IEJpbmRHcm91cExheW91dERl
c2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgYXV0byBsYWJlbCA9IGRlc2NyaXB0b3IubGFi
ZWwudXRmOCgpOworCisgICAgVmVjdG9yPFdHUFVCaW5kR3JvdXBMYXlvdXRFbnRyeT4gYmFja2lu
Z0VudHJpZXM7CisgICAgYmFja2luZ0VudHJpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShkZXNj
cmlwdG9yLmVudHJpZXMuc2l6ZSgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogZGVz
Y3JpcHRvci5lbnRyaWVzKSB7CisgICAgICAgIGJhY2tpbmdFbnRyaWVzLnVuY2hlY2tlZEFwcGVu
ZChXR1BVQmluZEdyb3VwTGF5b3V0RW50cnkgeworICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAg
ICAgICAgIGVudHJ5LmJpbmRpbmcsCisgICAgICAgICAgICBjb252ZXJ0U2hhZGVyU3RhZ2VGbGFn
c1RvQmFja2luZyhlbnRyeS52aXNpYmlsaXR5KSwgeworICAgICAgICAgICAgICAgIG51bGxwdHIs
CisgICAgICAgICAgICAgICAgZW50cnkuYnVmZmVyID8gY29udmVydFRvQmFja2luZyhlbnRyeS5i
dWZmZXItPnR5cGUpIDogV0dQVUJ1ZmZlckJpbmRpbmdUeXBlX1VuZGVmaW5lZCwKKyAgICAgICAg
ICAgICAgICBlbnRyeS5idWZmZXIgPyBlbnRyeS5idWZmZXItPmhhc0R5bmFtaWNPZmZzZXQgOiBm
YWxzZSwKKyAgICAgICAgICAgICAgICBlbnRyeS5idWZmZXIgPyBlbnRyeS5idWZmZXItPm1pbkJp
bmRpbmdTaXplIDogMCwKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICBudWxscHRy
LAorICAgICAgICAgICAgICAgIGVudHJ5LnNhbXBsZXIgPyBjb252ZXJ0VG9CYWNraW5nKGVudHJ5
LnNhbXBsZXItPnR5cGUpIDogV0dQVVNhbXBsZXJCaW5kaW5nVHlwZV9VbmRlZmluZWQsCisgICAg
ICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICBl
bnRyeS50ZXh0dXJlID8gY29udmVydFRvQmFja2luZyhlbnRyeS50ZXh0dXJlLT5zYW1wbGVUeXBl
KSA6IFdHUFVUZXh0dXJlU2FtcGxlVHlwZV9VbmRlZmluZWQsCisgICAgICAgICAgICAgICAgZW50
cnkudGV4dHVyZSA/IGNvbnZlcnRUb0JhY2tpbmcoZW50cnkudGV4dHVyZS0+dmlld0RpbWVuc2lv
bikgOiBXR1BVVGV4dHVyZVZpZXdEaW1lbnNpb25fVW5kZWZpbmVkLAorICAgICAgICAgICAgICAg
IGVudHJ5LnRleHR1cmUgPyBlbnRyeS50ZXh0dXJlLT5tdWx0aXNhbXBsZWQgOiBmYWxzZSwKKyAg
ICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICBudWxscHRyLAorICAgICAgICAgICAgICAg
IGVudHJ5LnN0b3JhZ2VUZXh0dXJlID8gY29udmVydFRvQmFja2luZyhlbnRyeS5zdG9yYWdlVGV4
dHVyZS0+YWNjZXNzKSA6IFdHUFVTdG9yYWdlVGV4dHVyZUFjY2Vzc19VbmRlZmluZWQsCisgICAg
ICAgICAgICAgICAgZW50cnkuc3RvcmFnZVRleHR1cmUgPyBjb252ZXJ0VG9CYWNraW5nKGVudHJ5
LnN0b3JhZ2VUZXh0dXJlLT5mb3JtYXQpIDogV0dQVVRleHR1cmVGb3JtYXRfVW5kZWZpbmVkLAor
ICAgICAgICAgICAgICAgIGVudHJ5LnN0b3JhZ2VUZXh0dXJlID8gY29udmVydFRvQmFja2luZyhl
bnRyeS5zdG9yYWdlVGV4dHVyZS0+dmlld0RpbWVuc2lvbikgOiBXR1BVVGV4dHVyZVZpZXdEaW1l
bnNpb25fVW5kZWZpbmVkLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSk7CisgICAgfQorCisg
ICAgV0dQVUJpbmRHcm91cExheW91dERlc2NyaXB0b3IgYmFja2luZ0Rlc2NyaXB0b3IgeworICAg
ICAgICBudWxscHRyLAorICAgICAgICBsYWJlbC5kYXRhKCksCisgICAgICAgIHN0YXRpY19jYXN0
PHVpbnQzMl90PihiYWNraW5nRW50cmllcy5zaXplKCkpLAorICAgICAgICBiYWNraW5nRW50cmll
cy5kYXRhKCksCisgICAgfTsKKworICAgIHJldHVybiBCaW5kR3JvdXBMYXlvdXRJbXBsOjpjcmVh
dGUod2dwdURldmljZUNyZWF0ZUJpbmRHcm91cExheW91dChtX2JhY2tpbmcsICZiYWNraW5nRGVz
Y3JpcHRvcikpOworfQorCitSZWY8UGlwZWxpbmVMYXlvdXQ+IERldmljZUltcGw6OmNyZWF0ZVBp
cGVsaW5lTGF5b3V0KGNvbnN0IFBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciYgZGVzY3JpcHRvcikK
K3sKKyAgICBhdXRvIGxhYmVsID0gZGVzY3JpcHRvci5sYWJlbC51dGY4KCk7CisKKyAgICBWZWN0
b3I8V0dQVUJpbmRHcm91cExheW91dD4gYmFja2luZ0JpbmRHcm91cExheW91dHM7CisgICAgYmFj
a2luZ0JpbmRHcm91cExheW91dHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShkZXNjcmlwdG9yLmJp
bmRHcm91cExheW91dHMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8gYmluZEdyb3VwTGF5b3V0IDog
ZGVzY3JpcHRvci5iaW5kR3JvdXBMYXlvdXRzKQorICAgICAgICBiYWNraW5nQmluZEdyb3VwTGF5
b3V0cy51bmNoZWNrZWRBcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgQmluZEdyb3VwTGF5b3V0SW1w
bCY+KGJpbmRHcm91cExheW91dC5nZXQoKSkuYmFja2luZygpKTsKKworICAgIFdHUFVQaXBlbGlu
ZUxheW91dERlc2NyaXB0b3IgYmFja2luZ0Rlc2NyaXB0b3IgeworICAgICAgICBudWxscHRyLAor
ICAgICAgICBsYWJlbC5kYXRhKCksCisgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90PihiYWNr
aW5nQmluZEdyb3VwTGF5b3V0cy5zaXplKCkpLAorICAgICAgICBiYWNraW5nQmluZEdyb3VwTGF5
b3V0cy5kYXRhKCksCisgICAgfTsKKworICAgIHJldHVybiBQaXBlbGluZUxheW91dEltcGw6OmNy
ZWF0ZSh3Z3B1RGV2aWNlQ3JlYXRlUGlwZWxpbmVMYXlvdXQobV9iYWNraW5nLCAmYmFja2luZ0Rl
c2NyaXB0b3IpKTsKK30KKworUmVmPEJpbmRHcm91cD4gRGV2aWNlSW1wbDo6Y3JlYXRlQmluZEdy
b3VwKGNvbnN0IEJpbmRHcm91cERlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgYXV0byBs
YWJlbCA9IGRlc2NyaXB0b3IubGFiZWwudXRmOCgpOworCisgICAgVmVjdG9yPFdHUFVCaW5kR3Jv
dXBFbnRyeT4gYmFja2luZ0VudHJpZXM7CisgICAgYmFja2luZ0VudHJpZXMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShkZXNjcmlwdG9yLmVudHJpZXMuc2l6ZSgpKTsKKyAgICBmb3IgKGNvbnN0IGF1
dG8mIGJpbmRHcm91cEVudHJ5IDogZGVzY3JpcHRvci5lbnRyaWVzKSB7CisgICAgICAgIGJhY2tp
bmdFbnRyaWVzLnVuY2hlY2tlZEFwcGVuZChXR1BVQmluZEdyb3VwRW50cnkgeworICAgICAgICAg
ICAgbnVsbHB0ciwKKyAgICAgICAgICAgIGJpbmRHcm91cEVudHJ5LmJpbmRpbmcsCisgICAgICAg
ICAgICBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPEJ1ZmZlckJpbmRpbmc+KGJpbmRHcm91cEVudHJ5
LnJlc291cmNlKSA/IHN0YXRpY19jYXN0PGNvbnN0IEJ1ZmZlckltcGwmPihzdGQ6OmdldDxCdWZm
ZXJCaW5kaW5nPihiaW5kR3JvdXBFbnRyeS5yZXNvdXJjZSkuYnVmZmVyKS5iYWNraW5nKCkgOiBu
dWxscHRyLAorICAgICAgICAgICAgc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxCdWZmZXJCaW5kaW5n
PihiaW5kR3JvdXBFbnRyeS5yZXNvdXJjZSkgPyBzdGQ6OmdldDxCdWZmZXJCaW5kaW5nPihiaW5k
R3JvdXBFbnRyeS5yZXNvdXJjZSkub2Zmc2V0IDogMCwKKyAgICAgICAgICAgIHN0ZDo6aG9sZHNf
YWx0ZXJuYXRpdmU8QnVmZmVyQmluZGluZz4oYmluZEdyb3VwRW50cnkucmVzb3VyY2UpID8gc3Rk
OjpnZXQ8QnVmZmVyQmluZGluZz4oYmluZEdyb3VwRW50cnkucmVzb3VyY2UpLnNpemUudmFsdWVf
b3IoV0dQVV9XSE9MRV9TSVpFKSA6IDAsCisgICAgICAgICAgICBzdGQ6OmhvbGRzX2FsdGVybmF0
aXZlPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8U2FtcGxlcj4+KGJpbmRHcm91cEVudHJ5LnJlc291
cmNlKSA/IHN0YXRpY19jYXN0PGNvbnN0IFNhbXBsZXJJbXBsJj4oc3RkOjpnZXQ8c3RkOjpyZWZl
cmVuY2Vfd3JhcHBlcjxTYW1wbGVyPj4oYmluZEdyb3VwRW50cnkucmVzb3VyY2UpLmdldCgpKS5i
YWNraW5nKCkgOiBudWxscHRyLAorICAgICAgICAgICAgc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPFRleHR1cmVWaWV3Pj4oYmluZEdyb3VwRW50cnkucmVzb3Vy
Y2UpID8gc3RhdGljX2Nhc3Q8Y29uc3QgVGV4dHVyZVZpZXdJbXBsJj4oc3RkOjpnZXQ8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxUZXh0dXJlVmlldz4+KGJpbmRHcm91cEVudHJ5LnJlc291cmNlKS5n
ZXQoKSkuYmFja2luZygpIDogbnVsbHB0ciwKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgV0dQ
VUJpbmRHcm91cERlc2NyaXB0b3IgYmFja2luZ0Rlc2NyaXB0b3IgeworICAgICAgICBudWxscHRy
LAorICAgICAgICBsYWJlbC5kYXRhKCksCisgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IEJpbmRH
cm91cExheW91dEltcGwmPihkZXNjcmlwdG9yLmxheW91dCkuYmFja2luZygpLAorICAgICAgICBz
dGF0aWNfY2FzdDx1aW50MzJfdD4oYmFja2luZ0VudHJpZXMuc2l6ZSgpKSwKKyAgICAgICAgYmFj
a2luZ0VudHJpZXMuZGF0YSgpLAorICAgIH07CisKKyAgICByZXR1cm4gQmluZEdyb3VwSW1wbDo6
Y3JlYXRlKHdncHVEZXZpY2VDcmVhdGVCaW5kR3JvdXAobV9iYWNraW5nLCAmYmFja2luZ0Rlc2Ny
aXB0b3IpKTsKK30KKworUmVmPFNoYWRlck1vZHVsZT4gRGV2aWNlSW1wbDo6Y3JlYXRlU2hhZGVy
TW9kdWxlKGNvbnN0IFNoYWRlck1vZHVsZURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAg
YXV0byBsYWJlbCA9IGRlc2NyaXB0b3IubGFiZWwudXRmOCgpOworCisgICAgV0dQVVNoYWRlck1v
ZHVsZURlc2NyaXB0b3IgYmFja2luZ0Rlc2NyaXB0b3IgeworICAgICAgICBudWxscHRyLAorICAg
ICAgICBsYWJlbC5kYXRhKCksCisgICAgfTsKKworICAgIHJldHVybiBTaGFkZXJNb2R1bGVJbXBs
OjpjcmVhdGUod2dwdURldmljZUNyZWF0ZVNoYWRlck1vZHVsZShtX2JhY2tpbmcsICZiYWNraW5n
RGVzY3JpcHRvcikpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2F1dG8gY29udmVydFRv
QmFja2luZyhjb25zdCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBUJiYg
Y2FsbGJhY2spCit7CisgICAgYXV0byBsYWJlbCA9IGRlc2NyaXB0b3IubGFiZWwudXRmOCgpOwor
CisgICAgYXV0byBlbnRyeVBvaW50ID0gZGVzY3JpcHRvci5jb21wdXRlLmVudHJ5UG9pbnQudXRm
OCgpOworCisgICAgVmVjdG9yPENTdHJpbmc+IGtleXM7CisgICAga2V5cy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KGRlc2NyaXB0b3IuY29tcHV0ZS5jb25zdGFudHMuc2l6ZSgpKTsKKyAgICBmb3Ig
KGNvbnN0IGF1dG8mIGNvbnN0YW50IDogZGVzY3JpcHRvci5jb21wdXRlLmNvbnN0YW50cykKKyAg
ICAgICAga2V5cy51bmNoZWNrZWRBcHBlbmQoY29uc3RhbnQua2V5LnV0ZjgoKSk7CisKKyAgICBW
ZWN0b3I8V0dQVUNvbnN0YW50RW50cnk+IGJhY2tpbmdDb25zdGFudEVudHJpZXM7CisgICAgYmFj
a2luZ0NvbnN0YW50RW50cmllcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGRlc2NyaXB0b3IuY29t
cHV0ZS5jb25zdGFudHMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRlc2Ny
aXB0b3IuY29tcHV0ZS5jb25zdGFudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgYXV0
byYgY29uc3RhbnQgPSBkZXNjcmlwdG9yLmNvbXB1dGUuY29uc3RhbnRzW2ldOworICAgICAgICBi
YWNraW5nQ29uc3RhbnRFbnRyaWVzLnVuY2hlY2tlZEFwcGVuZChXR1BVQ29uc3RhbnRFbnRyeSB7
CisgICAgICAgICAgICBudWxscHRyLAorICAgICAgICAgICAga2V5c1tpXS5kYXRhKCksCisgICAg
ICAgICAgICBjb25zdGFudC52YWx1ZQorICAgICAgICB9KTsKKyAgICB9CisKKyAgICBXR1BVQ29t
cHV0ZVBpcGVsaW5lRGVzY3JpcHRvciBiYWNraW5nRGVzY3JpcHRvciB7CisgICAgICAgIG51bGxw
dHIsCisgICAgICAgIGxhYmVsLmRhdGEoKSwKKyAgICAgICAgZGVzY3JpcHRvci5sYXlvdXQgPyBz
dGF0aWNfY2FzdDxjb25zdCBQaXBlbGluZUxheW91dEltcGwmPigqZGVzY3JpcHRvci5sYXlvdXQp
LmJhY2tpbmcoKSA6IG51bGxwdHIsIHsKKyAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxjb25zdCBTaGFkZXJNb2R1bGVJbXBsJj4oZGVzY3JpcHRvci5jb21wdXRl
Lm1vZHVsZSkuYmFja2luZygpLAorICAgICAgICAgICAgZW50cnlQb2ludC5kYXRhKCksCisgICAg
ICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYmFja2luZ0NvbnN0YW50RW50cmllcy5zaXpl
KCkpLAorICAgICAgICAgICAgYmFja2luZ0NvbnN0YW50RW50cmllcy5kYXRhKCksCisgICAgICAg
IH0KKyAgICB9OworCisgICAgcmV0dXJuIGNhbGxiYWNrKGJhY2tpbmdEZXNjcmlwdG9yKTsKK30K
KworUmVmPENvbXB1dGVQaXBlbGluZT4gRGV2aWNlSW1wbDo6Y3JlYXRlQ29tcHV0ZVBpcGVsaW5l
KGNvbnN0IENvbXB1dGVQaXBlbGluZURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgcmV0
dXJuIGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvciwgW3RoaXNdIChjb25zdCBXR1BVQ29tcHV0
ZVBpcGVsaW5lRGVzY3JpcHRvciYgYmFja2luZ0Rlc2NyaXB0b3IpIHsKKyAgICAgICAgcmV0dXJu
IENvbXB1dGVQaXBlbGluZUltcGw6OmNyZWF0ZSh3Z3B1RGV2aWNlQ3JlYXRlQ29tcHV0ZVBpcGVs
aW5lKG1fYmFja2luZywgJmJhY2tpbmdEZXNjcmlwdG9yKSk7CisgICAgfSk7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgorYXV0byBjb252ZXJ0VG9CYWNraW5nKGNvbnN0IFJlbmRlclBpcGVs
aW5lRGVzY3JpcHRvciYgZGVzY3JpcHRvciwgVCYmIGNhbGxiYWNrKQoreworICAgIGF1dG8gbGFi
ZWwgPSBkZXNjcmlwdG9yLmxhYmVsLnV0ZjgoKTsKKworICAgIFZlY3RvcjxWZWN0b3I8V0dQVVZl
cnRleEF0dHJpYnV0ZT4+IGJhY2tpbmdBdHRyaWJ1dGVzOworICAgIGJhY2tpbmdBdHRyaWJ1dGVz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGVzY3JpcHRvci52ZXJ0ZXguYnVmZmVycy5zaXplKCkp
OworICAgIGZvciAoY29uc3QgYXV0byYgYnVmZmVyIDogZGVzY3JpcHRvci52ZXJ0ZXguYnVmZmVy
cykgeworICAgICAgICBpZiAoYnVmZmVyKSB7CisgICAgICAgICAgICBWZWN0b3I8V0dQVVZlcnRl
eEF0dHJpYnV0ZT4gYXR0cmlidXRlczsKKyAgICAgICAgICAgIGF0dHJpYnV0ZXMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShidWZmZXItPmF0dHJpYnV0ZXMuc2l6ZSgpKTsKKyAgICAgICAgICAgIGZv
ciAoY29uc3QgYXV0byYgYXR0cmlidXRlIDogYnVmZmVyLT5hdHRyaWJ1dGVzKSB7CisgICAgICAg
ICAgICAgICAgYXR0cmlidXRlcy51bmNoZWNrZWRBcHBlbmQoV0dQVVZlcnRleEF0dHJpYnV0ZSB7
CisgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb0JhY2tpbmcoYXR0cmlidXRlLmZvcm1hdCks
CisgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZS5vZmZzZXQsCisgICAgICAgICAgICAgICAg
ICAgIGF0dHJpYnV0ZS5zaGFkZXJMb2NhdGlvbiwKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJhY2tpbmdBdHRyaWJ1dGVzLnVuY2hlY2tlZEFwcGVuZChX
VEZNb3ZlKGF0dHJpYnV0ZXMpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBiYWNraW5n
QXR0cmlidXRlcy51bmNoZWNrZWRBcHBlbmQoeyB9KTsKKyAgICB9CisKKyAgICBWZWN0b3I8V0dQ
VVZlcnRleEJ1ZmZlckxheW91dD4gYmFja2luZ0J1ZmZlcnM7CisgICAgYmFja2luZ0J1ZmZlcnMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShkZXNjcmlwdG9yLnZlcnRleC5idWZmZXJzLnNpemUoKSk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkZXNjcmlwdG9yLnZlcnRleC5idWZmZXJzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIGJ1ZmZlciA9IGRlc2NyaXB0b3IudmVy
dGV4LmJ1ZmZlcnNbaV07CisgICAgICAgIGJhY2tpbmdCdWZmZXJzLnVuY2hlY2tlZEFwcGVuZChX
R1BVVmVydGV4QnVmZmVyTGF5b3V0IHsKKyAgICAgICAgICAgIGJ1ZmZlciA/IGJ1ZmZlci0+YXJy
YXlTdHJpZGUgOiBXR1BVX0NPUFlfU1RSSURFX1VOREVGSU5FRCwKKyAgICAgICAgICAgIGJ1ZmZl
ciA/IGNvbnZlcnRUb0JhY2tpbmcoYnVmZmVyLT5zdGVwTW9kZSkgOiBXR1BVVmVydGV4U3RlcE1v
ZGVfVmVydGV4LAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGJhY2tpbmdBdHRy
aWJ1dGVzW2ldLnNpemUoKSksCisgICAgICAgICAgICBiYWNraW5nQXR0cmlidXRlc1tpXS5kYXRh
KCksCisgICAgICAgIH0pOworICAgIH0KKworICAgIFdHUFVEZXB0aFN0ZW5jaWxTdGF0ZSBkZXB0
aFN0ZW5jaWxTdGF0ZSB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIGRlc2NyaXB0b3IuZGVw
dGhTdGVuY2lsID8gY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbC0+Zm9y
bWF0KSA6IFdHUFVUZXh0dXJlRm9ybWF0X1VuZGVmaW5lZCwKKyAgICAgICAgZGVzY3JpcHRvci5k
ZXB0aFN0ZW5jaWwgPyBkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbC0+ZGVwdGhXcml0ZUVuYWJsZWQg
OiBmYWxzZSwKKyAgICAgICAgZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwgPyBjb252ZXJ0VG9CYWNr
aW5nKGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsLT5kZXB0aENvbXBhcmUpIDogV0dQVUNvbXBhcmVG
dW5jdGlvbl9VbmRlZmluZWQsIHsKKyAgICAgICAgICAgIGRlc2NyaXB0b3IuZGVwdGhTdGVuY2ls
ID8gY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbC0+c3RlbmNpbEZyb250
LmNvbXBhcmUpIDogV0dQVUNvbXBhcmVGdW5jdGlvbl9VbmRlZmluZWQsCisgICAgICAgICAgICBk
ZXNjcmlwdG9yLmRlcHRoU3RlbmNpbCA/IGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci5kZXB0
aFN0ZW5jaWwtPnN0ZW5jaWxGcm9udC5mYWlsT3ApIDogV0dQVVN0ZW5jaWxPcGVyYXRpb25fS2Vl
cCwKKyAgICAgICAgICAgIGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsID8gY29udmVydFRvQmFja2lu
ZyhkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbC0+c3RlbmNpbEZyb250LmRlcHRoRmFpbE9wKSA6IFdH
UFVTdGVuY2lsT3BlcmF0aW9uX0tlZXAsCisgICAgICAgICAgICBkZXNjcmlwdG9yLmRlcHRoU3Rl
bmNpbCA/IGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwtPnN0ZW5jaWxG
cm9udC5wYXNzT3ApIDogV0dQVVN0ZW5jaWxPcGVyYXRpb25fS2VlcCwKKyAgICAgICAgfSwgewor
ICAgICAgICAgICAgZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwgPyBjb252ZXJ0VG9CYWNraW5nKGRl
c2NyaXB0b3IuZGVwdGhTdGVuY2lsLT5zdGVuY2lsQmFjay5jb21wYXJlKSA6IFdHUFVDb21wYXJl
RnVuY3Rpb25fVW5kZWZpbmVkLAorICAgICAgICAgICAgZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwg
PyBjb252ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsLT5zdGVuY2lsQmFjay5m
YWlsT3ApIDogV0dQVVN0ZW5jaWxPcGVyYXRpb25fS2VlcCwKKyAgICAgICAgICAgIGRlc2NyaXB0
b3IuZGVwdGhTdGVuY2lsID8gY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLmRlcHRoU3RlbmNp
bC0+c3RlbmNpbEJhY2suZGVwdGhGYWlsT3ApIDogV0dQVVN0ZW5jaWxPcGVyYXRpb25fS2VlcCwK
KyAgICAgICAgICAgIGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsID8gY29udmVydFRvQmFja2luZyhk
ZXNjcmlwdG9yLmRlcHRoU3RlbmNpbC0+c3RlbmNpbEJhY2sucGFzc09wKSA6IFdHUFVTdGVuY2ls
T3BlcmF0aW9uX0tlZXAsCisgICAgICAgIH0sCisgICAgICAgIGRlc2NyaXB0b3IuZGVwdGhTdGVu
Y2lsICYmIGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsLT5zdGVuY2lsUmVhZE1hc2sgPyAqZGVzY3Jp
cHRvci5kZXB0aFN0ZW5jaWwtPnN0ZW5jaWxSZWFkTWFzayA6IDAsCisgICAgICAgIGRlc2NyaXB0
b3IuZGVwdGhTdGVuY2lsICYmIGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsLT5zdGVuY2lsV3JpdGVN
YXNrID8gKmRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsLT5zdGVuY2lsV3JpdGVNYXNrIDogMCwKKyAg
ICAgICAgZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwgPyBkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbC0+
ZGVwdGhCaWFzIDogMCwKKyAgICAgICAgZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwgPyBkZXNjcmlw
dG9yLmRlcHRoU3RlbmNpbC0+ZGVwdGhCaWFzU2xvcGVTY2FsZSA6IDAsCisgICAgICAgIGRlc2Ny
aXB0b3IuZGVwdGhTdGVuY2lsID8gZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwtPmRlcHRoQmlhc0Ns
YW1wIDogMCwKKyAgICB9OworCisgICAgVmVjdG9yPHN0ZDo6b3B0aW9uYWw8V0dQVUJsZW5kU3Rh
dGU+PiBibGVuZFN0YXRlczsKKyAgICBpZiAoZGVzY3JpcHRvci5mcmFnbWVudCkgeworICAgICAg
ICBibGVuZFN0YXRlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGRlc2NyaXB0b3IuZnJhZ21lbnQt
PnRhcmdldHMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiB0YXJnZXQgOiBkZXNj
cmlwdG9yLmZyYWdtZW50LT50YXJnZXRzKSB7CisgICAgICAgICAgICBpZiAodGFyZ2V0LmJsZW5k
KSB7CisgICAgICAgICAgICAgICAgYmxlbmRTdGF0ZXMudW5jaGVja2VkQXBwZW5kKFdHUFVCbGVu
ZFN0YXRlIHsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
Y29udmVydFRvQmFja2luZyh0YXJnZXQuYmxlbmQtPmNvbG9yLm9wZXJhdGlvbiksCisgICAgICAg
ICAgICAgICAgICAgICAgICBjb252ZXJ0VG9CYWNraW5nKHRhcmdldC5ibGVuZC0+Y29sb3Iuc3Jj
RmFjdG9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb0JhY2tpbmcodGFyZ2V0
LmJsZW5kLT5jb2xvci5kc3RGYWN0b3IpLAorICAgICAgICAgICAgICAgICAgICB9LCB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9CYWNraW5nKHRhcmdldC5ibGVuZC0+YWxwaGEu
b3BlcmF0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb0JhY2tpbmcodGFy
Z2V0LmJsZW5kLT5hbHBoYS5zcmNGYWN0b3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgY29u
dmVydFRvQmFja2luZyh0YXJnZXQuYmxlbmQtPmFscGhhLmRzdEZhY3RvciksCisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgIGJsZW5kU3RhdGVzLnVuY2hlY2tlZEFwcGVuZChzdGQ6Om51bGxvcHQpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgVmVjdG9yPFdHUFVDb2xvclRhcmdldFN0YXRlPiBjb2xv
clRhcmdldHM7CisgICAgaWYgKGRlc2NyaXB0b3IuZnJhZ21lbnQpIHsKKyAgICAgICAgY29sb3JU
YXJnZXRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGVzY3JpcHRvci5mcmFnbWVudC0+dGFyZ2V0
cy5zaXplKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRlc2NyaXB0b3IuZnJh
Z21lbnQtPnRhcmdldHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIHRh
cmdldCA9IGRlc2NyaXB0b3IuZnJhZ21lbnQtPnRhcmdldHNbaV07CisgICAgICAgICAgICBjb2xv
clRhcmdldHMudW5jaGVja2VkQXBwZW5kKFdHUFVDb2xvclRhcmdldFN0YXRlIHsKKyAgICAgICAg
ICAgICAgICBudWxscHRyLAorICAgICAgICAgICAgICAgIGNvbnZlcnRUb0JhY2tpbmcodGFyZ2V0
LmZvcm1hdCksCisgICAgICAgICAgICAgICAgYmxlbmRTdGF0ZXNbaV0gPyAmKmJsZW5kU3RhdGVz
W2ldIDogbnVsbHB0ciwKKyAgICAgICAgICAgICAgICBjb252ZXJ0Q29sb3JXcml0ZUZsYWdzVG9C
YWNraW5nKHRhcmdldC53cml0ZU1hc2spLAorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBXR1BVRnJhZ21lbnRTdGF0ZSBmcmFnbWVudFN0YXRlIHsKKyAgICAgICAgbnVs
bHB0ciwKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgMCwKKyAg
ICAgICAgbnVsbHB0ciwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNvbG9yVGFyZ2V0
cy5zaXplKCkpLAorICAgICAgICBjb2xvclRhcmdldHMuZGF0YSgpLAorICAgIH07CisKKyAgICBX
R1BVUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yIGJhY2tpbmdEZXNjcmlwdG9yIHsKKyAgICAgICAg
bnVsbHB0ciwKKyAgICAgICAgbGFiZWwuZGF0YSgpLAorICAgICAgICBkZXNjcmlwdG9yLmxheW91
dCA/IHN0YXRpY19jYXN0PGNvbnN0IFBpcGVsaW5lTGF5b3V0SW1wbCY+KCpkZXNjcmlwdG9yLmxh
eW91dCkuYmFja2luZygpIDogbnVsbHB0ciwgeworICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAg
ICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICBudWxscHRyLAorICAgICAgICAgICAgMCwKKyAg
ICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYmFj
a2luZ0J1ZmZlcnMuc2l6ZSgpKSwKKyAgICAgICAgICAgIGJhY2tpbmdCdWZmZXJzLmRhdGEoKSwK
KyAgICAgICAgfSwgeworICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgIGRlc2NyaXB0
b3IucHJpbWl0aXZlID8gY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLnByaW1pdGl2ZS0+dG9w
b2xvZ3kpIDogV0dQVVByaW1pdGl2ZVRvcG9sb2d5X1BvaW50TGlzdCwKKyAgICAgICAgICAgIGRl
c2NyaXB0b3IucHJpbWl0aXZlICYmIGRlc2NyaXB0b3IucHJpbWl0aXZlLT5zdHJpcEluZGV4Rm9y
bWF0ID8gY29udmVydFRvQmFja2luZygqZGVzY3JpcHRvci5wcmltaXRpdmUtPnN0cmlwSW5kZXhG
b3JtYXQpIDogV0dQVUluZGV4Rm9ybWF0X1VuZGVmaW5lZCwKKyAgICAgICAgICAgIGRlc2NyaXB0
b3IucHJpbWl0aXZlID8gY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLnByaW1pdGl2ZS0+ZnJv
bnRGYWNlKSA6IFdHUFVGcm9udEZhY2VfQ0NXLAorICAgICAgICAgICAgZGVzY3JpcHRvci5wcmlt
aXRpdmUgPyBjb252ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3IucHJpbWl0aXZlLT5jdWxsTW9kZSkg
OiBXR1BVQ3VsbE1vZGVfTm9uZSwKKyAgICAgICAgICAgIAorICAgICAgICB9LAorICAgICAgICBk
ZXNjcmlwdG9yLmRlcHRoU3RlbmNpbCA/ICZkZXB0aFN0ZW5jaWxTdGF0ZSA6IG51bGxwdHIsIHsK
KyAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICBkZXNjcmlwdG9yLm11bHRpc2FtcGxl
ID8gZGVzY3JpcHRvci5tdWx0aXNhbXBsZS0+Y291bnQgOiAwLAorICAgICAgICAgICAgZGVzY3Jp
cHRvci5tdWx0aXNhbXBsZSA/IGRlc2NyaXB0b3IubXVsdGlzYW1wbGUtPm1hc2sgOiAwLAorICAg
ICAgICAgICAgZGVzY3JpcHRvci5tdWx0aXNhbXBsZSA/IGRlc2NyaXB0b3IubXVsdGlzYW1wbGUt
PmFscGhhVG9Db3ZlcmFnZUVuYWJsZWQgOiBmYWxzZSwKKyAgICAgICAgfSwKKyAgICAgICAgZGVz
Y3JpcHRvci5mcmFnbWVudCA/ICZmcmFnbWVudFN0YXRlIDogbnVsbHB0ciwKKyAgICB9OworCisg
ICAgcmV0dXJuIGNhbGxiYWNrKGJhY2tpbmdEZXNjcmlwdG9yKTsKK30KKworUmVmPFJlbmRlclBp
cGVsaW5lPiBEZXZpY2VJbXBsOjpjcmVhdGVSZW5kZXJQaXBlbGluZShjb25zdCBSZW5kZXJQaXBl
bGluZURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgcmV0dXJuIGNvbnZlcnRUb0JhY2tp
bmcoZGVzY3JpcHRvciwgW3RoaXNdIChjb25zdCBXR1BVUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9y
JiBiYWNraW5nRGVzY3JpcHRvcikgeworICAgICAgICByZXR1cm4gUmVuZGVyUGlwZWxpbmVJbXBs
OjpjcmVhdGUod2dwdURldmljZUNyZWF0ZVJlbmRlclBpcGVsaW5lKG1fYmFja2luZywgJmJhY2tp
bmdEZXNjcmlwdG9yKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgY3JlYXRlQ29tcHV0ZVBpcGVsaW5l
QXN5bmNDYWxsYmFjayhXR1BVQ3JlYXRlUGlwZWxpbmVBc3luY1N0YXR1cyBzdGF0dXMsIFdHUFVD
b21wdXRlUGlwZWxpbmUgcGlwZWxpbmUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIHZvaWQqIHVzZXJk
YXRhKQoreworICAgIGF1dG8gZGV2aWNlID0gYWRvcHRSZWYoKnN0YXRpY19jYXN0PERldmljZUlt
cGwqPih1c2VyZGF0YSkpOyAvLyBhZG9wdFJlZiBpcyBiYWxhbmNlZCBieSBsZWFrUmVmIGluIGNy
ZWF0ZUNvbXB1dGVQaXBlbGluZUFzeW5jKCkgYmVsb3cuIFdlIGhhdmUgdG8gZG8gdGhpcyBiZWNh
dXNlIHdlJ3JlIHVzaW5nIGEgQyBBUEkgd2l0aCBubyBjb25jZXB0IG9mIHJlZmVyZW5jZSBjb3Vu
dGluZyBvciBibG9ja3MuCisgICAgZGV2aWNlLT5jcmVhdGVDb21wdXRlUGlwZWxpbmVBc3luY0Nh
bGxiYWNrKHN0YXR1cywgcGlwZWxpbmUsIG1lc3NhZ2UpOworfQorCit2b2lkIERldmljZUltcGw6
OmNyZWF0ZUNvbXB1dGVQaXBlbGluZUFzeW5jKGNvbnN0IENvbXB1dGVQaXBlbGluZURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IsIHN0ZDo6ZnVuY3Rpb248dm9pZChSZWY8Q29tcHV0ZVBpcGVsaW5lPiYm
KT4mJiBjYWxsYmFjaykKK3sKKyAgICBSZWYgcHJvdGVjdGVkVGhpcygqdGhpcyk7CisKKyAgICBt
X2NyZWF0ZUNvbXB1dGVQaXBlbGluZUFzeW5jQ2FsbGJhY2tzLmFwcGVuZChXVEZNb3ZlKGNhbGxi
YWNrKSk7CisKKyAgICBjb252ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3IsIFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKGNvbnN0IFdHUFVDb21wdXRlUGlwZWxp
bmVEZXNjcmlwdG9yJiBiYWNraW5nRGVzY3JpcHRvcikgbXV0YWJsZSB7CisgICAgICAgIHdncHVE
ZXZpY2VDcmVhdGVDb21wdXRlUGlwZWxpbmVBc3luYyhtX2JhY2tpbmcsICZiYWNraW5nRGVzY3Jp
cHRvciwgJldlYkdQVTo6Y3JlYXRlQ29tcHV0ZVBpcGVsaW5lQXN5bmNDYWxsYmFjaywgJnByb3Rl
Y3RlZFRoaXMubGVha1JlZigpKTsgLy8gbGVha1JlZiBpcyBiYWxhbmNlZCBieSBhZG9wdFJlZiBp
biByZXF1ZXN0RGV2aWNlQ2FsbGJhY2soKSBhYm92ZS4gV2UgaGF2ZSB0byBkbyB0aGlzIGJlY2F1
c2Ugd2UncmUgdXNpbmcgYSBDIEFQSSB3aXRoIG5vIGNvbmNlcHQgb2YgcmVmZXJlbmNlIGNvdW50
aW5nIG9yIGJsb2Nrcy4KKyAgICB9KTsKK30KKwordm9pZCBEZXZpY2VJbXBsOjpjcmVhdGVDb21w
dXRlUGlwZWxpbmVBc3luY0NhbGxiYWNrKFdHUFVDcmVhdGVQaXBlbGluZUFzeW5jU3RhdHVzLCBX
R1BVQ29tcHV0ZVBpcGVsaW5lIHBpcGVsaW5lLCBjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAg
IFVOVVNFRF9QQVJBTShtZXNzYWdlKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gbV9jcmVhdGVDb21w
dXRlUGlwZWxpbmVBc3luY0NhbGxiYWNrcy50YWtlRmlyc3QoKTsKKyAgICBjYWxsYmFjayhDb21w
dXRlUGlwZWxpbmVJbXBsOjpjcmVhdGUocGlwZWxpbmUpKTsKK30KKwordm9pZCBjcmVhdGVSZW5k
ZXJQaXBlbGluZUFzeW5jQ2FsbGJhY2soV0dQVUNyZWF0ZVBpcGVsaW5lQXN5bmNTdGF0dXMgc3Rh
dHVzLCBXR1BVUmVuZGVyUGlwZWxpbmUgcGlwZWxpbmUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIHZv
aWQqIHVzZXJkYXRhKQoreworICAgIGF1dG8gZGV2aWNlID0gYWRvcHRSZWYoKnN0YXRpY19jYXN0
PERldmljZUltcGwqPih1c2VyZGF0YSkpOyAvLyBhZG9wdFJlZiBpcyBiYWxhbmNlZCBieSBsZWFr
UmVmIGluIGNyZWF0ZVJlbmRlclBpcGVsaW5lQXN5bmMoKSBiZWxvdy4gV2UgaGF2ZSB0byBkbyB0
aGlzIGJlY2F1c2Ugd2UncmUgdXNpbmcgYSBDIEFQSSB3aXRoIG5vIGNvbmNlcHQgb2YgcmVmZXJl
bmNlIGNvdW50aW5nIG9yIGJsb2Nrcy4KKyAgICBkZXZpY2UtPmNyZWF0ZVJlbmRlclBpcGVsaW5l
QXN5bmNDYWxsYmFjayhzdGF0dXMsIHBpcGVsaW5lLCBtZXNzYWdlKTsKK30KKwordm9pZCBEZXZp
Y2VJbXBsOjpjcmVhdGVSZW5kZXJQaXBlbGluZUFzeW5jKGNvbnN0IFJlbmRlclBpcGVsaW5lRGVz
Y3JpcHRvciYgZGVzY3JpcHRvciwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlZjxSZW5kZXJQaXBlbGlu
ZT4mJik+JiYgY2FsbGJhY2spCit7CisgICAgUmVmIHByb3RlY3RlZFRoaXMoKnRoaXMpOworCisg
ICAgbV9jcmVhdGVSZW5kZXJQaXBlbGluZUFzeW5jQ2FsbGJhY2tzLmFwcGVuZChXVEZNb3ZlKGNh
bGxiYWNrKSk7CisKKyAgICBjb252ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3IsIFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0gKGNvbnN0IFdHUFVSZW5kZXJQaXBl
bGluZURlc2NyaXB0b3ImIGJhY2tpbmdEZXNjcmlwdG9yKSBtdXRhYmxlIHsKKyAgICB3Z3B1RGV2
aWNlQ3JlYXRlUmVuZGVyUGlwZWxpbmVBc3luYyhtX2JhY2tpbmcsICZiYWNraW5nRGVzY3JpcHRv
ciwgJldlYkdQVTo6Y3JlYXRlUmVuZGVyUGlwZWxpbmVBc3luY0NhbGxiYWNrLCAmcHJvdGVjdGVk
VGhpcy5sZWFrUmVmKCkpOyAvLyBsZWFrUmVmIGlzIGJhbGFuY2VkIGJ5IGFkb3B0UmVmIGluIHJl
cXVlc3REZXZpY2VDYWxsYmFjaygpIGFib3ZlLiBXZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZSB3
ZSdyZSB1c2luZyBhIEMgQVBJIHdpdGggbm8gY29uY2VwdCBvZiByZWZlcmVuY2UgY291bnRpbmcg
b3IgYmxvY2tzLgorICAgIH0pOworfQorCit2b2lkIERldmljZUltcGw6OmNyZWF0ZVJlbmRlclBp
cGVsaW5lQXN5bmNDYWxsYmFjayhXR1BVQ3JlYXRlUGlwZWxpbmVBc3luY1N0YXR1cywgV0dQVVJl
bmRlclBpcGVsaW5lIHBpcGVsaW5lLCBjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIFVOVVNF
RF9QQVJBTShtZXNzYWdlKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gbV9jcmVhdGVSZW5kZXJQaXBl
bGluZUFzeW5jQ2FsbGJhY2tzLnRha2VGaXJzdCgpOworICAgIGNhbGxiYWNrKFJlbmRlclBpcGVs
aW5lSW1wbDo6Y3JlYXRlKHBpcGVsaW5lKSk7Cit9CisKK1JlZjxDb21tYW5kRW5jb2Rlcj4gRGV2
aWNlSW1wbDo6Y3JlYXRlQ29tbWFuZEVuY29kZXIoY29uc3Qgc3RkOjpvcHRpb25hbDxDb21tYW5k
RW5jb2RlckRlc2NyaXB0b3I+JiBkZXNjcmlwdG9yKQoreworICAgIENTdHJpbmcgbGFiZWwgPSBk
ZXNjcmlwdG9yID8gZGVzY3JpcHRvci0+bGFiZWwudXRmOCgpIDogQ1N0cmluZygiIik7CisKKyAg
ICBXR1BVQ29tbWFuZEVuY29kZXJEZXNjcmlwdG9yIGJhY2tpbmdEZXNjcmlwdG9yIHsKKyAgICAg
ICAgbnVsbHB0ciwKKyAgICAgICAgbGFiZWwuZGF0YSgpLAorICAgIH07CisKKyAgICByZXR1cm4g
Q29tbWFuZEVuY29kZXJJbXBsOjpjcmVhdGUod2dwdURldmljZUNyZWF0ZUNvbW1hbmRFbmNvZGVy
KG1fYmFja2luZywgJmJhY2tpbmdEZXNjcmlwdG9yKSk7Cit9CisKK1JlZjxSZW5kZXJCdW5kbGVF
bmNvZGVyPiBEZXZpY2VJbXBsOjpjcmVhdGVSZW5kZXJCdW5kbGVFbmNvZGVyKGNvbnN0IFJlbmRl
ckJ1bmRsZUVuY29kZXJEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIGF1dG8gbGFiZWwg
PSBkZXNjcmlwdG9yLmxhYmVsLnV0ZjgoKTsKKworICAgIFZlY3RvcjxXR1BVVGV4dHVyZUZvcm1h
dD4gYmFja2luZ0NvbG9yRm9ybWF0czsKKyAgICBiYWNraW5nQ29sb3JGb3JtYXRzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoZGVzY3JpcHRvci5jb2xvckZvcm1hdHMuc2l6ZSgpKTsKKyAgICBmb3Ig
KGF1dG8gY29sb3JGb3JtYXQgOiBkZXNjcmlwdG9yLmNvbG9yRm9ybWF0cykKKyAgICAgICAgYmFj
a2luZ0NvbG9yRm9ybWF0cy51bmNoZWNrZWRBcHBlbmQoY29udmVydFRvQmFja2luZyhjb2xvckZv
cm1hdCkpOworCisgICAgV0dQVVJlbmRlckJ1bmRsZUVuY29kZXJEZXNjcmlwdG9yIGJhY2tpbmdE
ZXNjcmlwdG9yIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgbGFiZWwuZGF0YSgpLAorICAg
ICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYmFja2luZ0NvbG9yRm9ybWF0cy5zaXplKCkpLAor
ICAgICAgICBiYWNraW5nQ29sb3JGb3JtYXRzLmRhdGEoKSwKKyAgICAgICAgZGVzY3JpcHRvci5k
ZXB0aFN0ZW5jaWxGb3JtYXQgPyBjb252ZXJ0VG9CYWNraW5nKCpkZXNjcmlwdG9yLmRlcHRoU3Rl
bmNpbEZvcm1hdCkgOiBXR1BVVGV4dHVyZUZvcm1hdF9VbmRlZmluZWQsCisgICAgICAgIGRlc2Ny
aXB0b3Iuc2FtcGxlQ291bnQsCisgICAgfTsKKworICAgIHJldHVybiBSZW5kZXJCdW5kbGVFbmNv
ZGVySW1wbDo6Y3JlYXRlKHdncHVEZXZpY2VDcmVhdGVSZW5kZXJCdW5kbGVFbmNvZGVyKG1fYmFj
a2luZywgJmJhY2tpbmdEZXNjcmlwdG9yKSk7Cit9CisKK1JlZjxRdWVyeVNldD4gRGV2aWNlSW1w
bDo6Y3JlYXRlUXVlcnlTZXQoY29uc3QgUXVlcnlTZXREZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQor
eworICAgIGF1dG8gbGFiZWwgPSBkZXNjcmlwdG9yLmxhYmVsLnV0ZjgoKTsKKworICAgIFZlY3Rv
cjxXR1BVUGlwZWxpbmVTdGF0aXN0aWNOYW1lPiBiYWNraW5nUGlwZWxpbmVTdGF0aXN0aWNzOwor
ICAgIGJhY2tpbmdQaXBlbGluZVN0YXRpc3RpY3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShkZXNj
cmlwdG9yLnBpcGVsaW5lU3RhdGlzdGljcy5zaXplKCkpOworICAgIGZvciAoYXV0byBwaXBlbGlu
ZVN0YXRpc3RpYyA6IGRlc2NyaXB0b3IucGlwZWxpbmVTdGF0aXN0aWNzKQorICAgICAgICBiYWNr
aW5nUGlwZWxpbmVTdGF0aXN0aWNzLnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0VG9CYWNraW5nKHBp
cGVsaW5lU3RhdGlzdGljKSk7CisKKyAgICBXR1BVUXVlcnlTZXREZXNjcmlwdG9yIGJhY2tpbmdE
ZXNjcmlwdG9yIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgbGFiZWwuZGF0YSgpLAorICAg
ICAgICBjb252ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3IudHlwZSksCisgICAgICAgIGRlc2NyaXB0
b3IuY291bnQsCisgICAgICAgIGJhY2tpbmdQaXBlbGluZVN0YXRpc3RpY3MuZGF0YSgpLAorICAg
ICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYmFja2luZ1BpcGVsaW5lU3RhdGlzdGljcy5zaXpl
KCkpLAorICAgIH07CisKKyAgICByZXR1cm4gUXVlcnlTZXRJbXBsOjpjcmVhdGUod2dwdURldmlj
ZUNyZWF0ZVF1ZXJ5U2V0KG1fYmFja2luZywgJmJhY2tpbmdEZXNjcmlwdG9yKSk7Cit9CisKK3Zv
aWQgRGV2aWNlSW1wbDo6cHVzaEVycm9yU2NvcGUoRXJyb3JGaWx0ZXIgZXJyb3JGaWx0ZXIpCit7
CisgICAgd2dwdURldmljZVB1c2hFcnJvclNjb3BlKG1fYmFja2luZywgY29udmVydFRvQmFja2lu
ZyhlcnJvckZpbHRlcikpOworfQorCit2b2lkIHBvcEVycm9yU2NvcGVDYWxsYmFjayhXR1BVRXJy
b3JUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIHZvaWQqIHVzZXJkYXRhKQoreworICAg
IGF1dG8gZGV2aWNlID0gYWRvcHRSZWYoKnN0YXRpY19jYXN0PERldmljZUltcGwqPih1c2VyZGF0
YSkpOyAvLyBhZG9wdFJlZiBpcyBiYWxhbmNlZCBieSBsZWFrUmVmIGluIHBvcEVycm9yU2NvcGUo
KSBiZWxvdy4gV2UgaGF2ZSB0byBkbyB0aGlzIGJlY2F1c2Ugd2UncmUgdXNpbmcgYSBDIEFQSSB3
aXRoIG5vIGNvbmNlcHQgb2YgcmVmZXJlbmNlIGNvdW50aW5nIG9yIGJsb2Nrcy4KKyAgICBkZXZp
Y2UtPnBvcEVycm9yU2NvcGVDYWxsYmFjayh0eXBlLCBtZXNzYWdlKTsKK30KKwordm9pZCBEZXZp
Y2VJbXBsOjpwb3BFcnJvclNjb3BlKHN0ZDo6ZnVuY3Rpb248dm9pZChzdGQ6Om9wdGlvbmFsPEVy
cm9yPiYmKT4mJiBjYWxsYmFjaykKK3sKKyAgICBSZWYgcHJvdGVjdGVkVGhpcygqdGhpcyk7CisK
KyAgICBtX3BvcEVycm9yU2NvcGVDYWxsYmFja3MuYXBwZW5kKFdURk1vdmUoY2FsbGJhY2spKTsK
KworICAgIHdncHVEZXZpY2VQb3BFcnJvclNjb3BlKG1fYmFja2luZywgJldlYkdQVTo6cG9wRXJy
b3JTY29wZUNhbGxiYWNrLCAmcHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpOyAvLyBsZWFrUmVmIGlz
IGJhbGFuY2VkIGJ5IGFkb3B0UmVmIGluIHJlcXVlc3REZXZpY2VDYWxsYmFjaygpIGFib3ZlLiBX
ZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSdyZSB1c2luZyBhIEMgQVBJIHdpdGggbm8gY29u
Y2VwdCBvZiByZWZlcmVuY2UgY291bnRpbmcgb3IgYmxvY2tzLgorfQorCit2b2lkIERldmljZUlt
cGw6OnBvcEVycm9yU2NvcGVDYWxsYmFjayhXR1BVRXJyb3JUeXBlIGVycm9yVHlwZSwgY29uc3Qg
Y2hhciogbWVzc2FnZSkKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPEVycm9yPiBlcnJvcjsKKyAgICBz
d2l0Y2ggKGVycm9yVHlwZSkgeworICAgIGNhc2UgV0dQVUVycm9yVHlwZV9Ob0Vycm9yOgorICAg
IGNhc2UgV0dQVUVycm9yVHlwZV9Gb3JjZTMyOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFdH
UFVFcnJvclR5cGVfVmFsaWRhdGlvbjoKKyAgICAgICAgZXJyb3IgPSB7IHsgVmFsaWRhdGlvbkVy
cm9yOjpjcmVhdGUobWVzc2FnZSkgfSB9OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdHUFVF
cnJvclR5cGVfT3V0T2ZNZW1vcnk6CisgICAgICAgIGVycm9yID0geyB7IE91dE9mTWVtb3J5RXJy
b3I6OmNyZWF0ZSgpIH0gfTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXR1BVRXJyb3JUeXBl
X1Vua25vd246CisgICAgICAgIGVycm9yID0geyB7IE91dE9mTWVtb3J5RXJyb3I6OmNyZWF0ZSgp
IH0gfTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXR1BVRXJyb3JUeXBlX0RldmljZUxvc3Q6
CisgICAgICAgIGVycm9yID0geyB7IE91dE9mTWVtb3J5RXJyb3I6OmNyZWF0ZSgpIH0gfTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgYXV0byBjYWxsYmFjayA9IG1fcG9wRXJyb3JTY29w
ZUNhbGxiYWNrcy50YWtlRmlyc3QoKTsKKyAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSk7Cit9
CisKK3ZvaWQgRGV2aWNlSW1wbDo6c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVs
KQoreworICAgIHdncHVEZXZpY2VTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVsLnV0ZjgoKS5kYXRh
KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJH
UFVEZXZpY2VJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9J
bXBsL1dlYkdQVURldmljZUltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NmE2MGJjNGJlMWNmOGQ4ZWYxOWEw
MmI0NDY0ODYwYTZlMjk5NTViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFM
L3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVEZXZpY2VJbXBsLmgKQEAgLTAsMCArMSw5
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVRGV2aWNl
LmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgor
CituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBEZXZpY2VJbXBs
IGZpbmFsIDogcHVibGljIERldmljZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEZXZpY2VJ
bXBsPiBjcmVhdGUoV0dQVURldmljZSBkZXZpY2UsIFJlZjxTdXBwb3J0ZWRGZWF0dXJlcz4mJiBm
ZWF0dXJlcywgUmVmPFN1cHBvcnRlZExpbWl0cz4mJiBsaW1pdHMpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBEZXZpY2VJbXBsKGRldmljZSwgV1RGTW92ZShmZWF0dXJlcyks
IFdURk1vdmUobGltaXRzKSkpOworICAgIH0KKworICAgIH5EZXZpY2VJbXBsKCk7CisKKyAgICBX
R1BVRGV2aWNlIGJhY2tpbmcoKSBjb25zdCB7IHJldHVybiBtX2JhY2tpbmc7IH0KKworcHJpdmF0
ZToKKyAgICBmcmllbmQgdm9pZCBjcmVhdGVDb21wdXRlUGlwZWxpbmVBc3luY0NhbGxiYWNrKFdH
UFVDcmVhdGVQaXBlbGluZUFzeW5jU3RhdHVzLCBXR1BVQ29tcHV0ZVBpcGVsaW5lLCBjb25zdCBj
aGFyKiBtZXNzYWdlLCB2b2lkKiB1c2VyZGF0YSk7CisgICAgZnJpZW5kIHZvaWQgY3JlYXRlUmVu
ZGVyUGlwZWxpbmVBc3luY0NhbGxiYWNrKFdHUFVDcmVhdGVQaXBlbGluZUFzeW5jU3RhdHVzLCBX
R1BVUmVuZGVyUGlwZWxpbmUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIHZvaWQqIHVzZXJkYXRhKTsK
KyAgICBmcmllbmQgdm9pZCBwb3BFcnJvclNjb3BlQ2FsbGJhY2soV0dQVUVycm9yVHlwZSwgY29u
c3QgY2hhciogbWVzc2FnZSwgdm9pZCogdXNlcmRhdGEpOworCisgICAgRGV2aWNlSW1wbChXR1BV
RGV2aWNlLCBSZWY8U3VwcG9ydGVkRmVhdHVyZXM+JiYsIFJlZjxTdXBwb3J0ZWRMaW1pdHM+JiYp
OworCisgICAgRGV2aWNlSW1wbChjb25zdCBEZXZpY2VJbXBsJikgPSBkZWxldGU7CisgICAgRGV2
aWNlSW1wbChEZXZpY2VJbXBsJiYpID0gZGVsZXRlOworICAgIERldmljZUltcGwmIG9wZXJhdG9y
PShjb25zdCBEZXZpY2VJbXBsJikgPSBkZWxldGU7CisgICAgRGV2aWNlSW1wbCYgb3BlcmF0b3I9
KERldmljZUltcGwmJikgPSBkZWxldGU7CisKKyAgICB2b2lkIGRlc3Ryb3koKSBmaW5hbDsKKwor
ICAgIFJlZjxCdWZmZXI+IGNyZWF0ZUJ1ZmZlcihjb25zdCBCdWZmZXJEZXNjcmlwdG9yJikgZmlu
YWw7CisgICAgUmVmPFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoY29uc3QgVGV4dHVyZURlc2NyaXB0
b3ImKSBmaW5hbDsKKyAgICBSZWY8U2FtcGxlcj4gY3JlYXRlU2FtcGxlcihjb25zdCBTYW1wbGVy
RGVzY3JpcHRvciYpIGZpbmFsOworICAgIFJlZjxFeHRlcm5hbFRleHR1cmU+IGltcG9ydEV4dGVy
bmFsVGV4dHVyZShjb25zdCBFeHRlcm5hbFRleHR1cmVEZXNjcmlwdG9yJikgZmluYWw7CisKKyAg
ICBSZWY8QmluZEdyb3VwTGF5b3V0PiBjcmVhdGVCaW5kR3JvdXBMYXlvdXQoY29uc3QgQmluZEdy
b3VwTGF5b3V0RGVzY3JpcHRvciYpIGZpbmFsOworICAgIFJlZjxQaXBlbGluZUxheW91dD4gY3Jl
YXRlUGlwZWxpbmVMYXlvdXQoY29uc3QgUGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yJikgZmluYWw7
CisgICAgUmVmPEJpbmRHcm91cD4gY3JlYXRlQmluZEdyb3VwKGNvbnN0IEJpbmRHcm91cERlc2Ny
aXB0b3ImKSBmaW5hbDsKKworICAgIFJlZjxTaGFkZXJNb2R1bGU+IGNyZWF0ZVNoYWRlck1vZHVs
ZShjb25zdCBTaGFkZXJNb2R1bGVEZXNjcmlwdG9yJikgZmluYWw7CisgICAgUmVmPENvbXB1dGVQ
aXBlbGluZT4gY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKGNvbnN0IENvbXB1dGVQaXBlbGluZURlc2Ny
aXB0b3ImKSBmaW5hbDsKKyAgICBSZWY8UmVuZGVyUGlwZWxpbmU+IGNyZWF0ZVJlbmRlclBpcGVs
aW5lKGNvbnN0IFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciYpIGZpbmFsOworICAgIHZvaWQgY3Jl
YXRlQ29tcHV0ZVBpcGVsaW5lQXN5bmNDYWxsYmFjayhXR1BVQ3JlYXRlUGlwZWxpbmVBc3luY1N0
YXR1cywgV0dQVUNvbXB1dGVQaXBlbGluZSwgY29uc3QgY2hhciogbWVzc2FnZSk7CisgICAgdm9p
ZCBjcmVhdGVDb21wdXRlUGlwZWxpbmVBc3luYyhjb25zdCBDb21wdXRlUGlwZWxpbmVEZXNjcmlw
dG9yJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlZjxDb21wdXRlUGlwZWxpbmU+JiYpPiYmKSBmaW5h
bDsKKyAgICB2b2lkIGNyZWF0ZVJlbmRlclBpcGVsaW5lQXN5bmNDYWxsYmFjayhXR1BVQ3JlYXRl
UGlwZWxpbmVBc3luY1N0YXR1cywgV0dQVVJlbmRlclBpcGVsaW5lLCBjb25zdCBjaGFyKiBtZXNz
YWdlKTsKKyAgICB2b2lkIGNyZWF0ZVJlbmRlclBpcGVsaW5lQXN5bmMoY29uc3QgUmVuZGVyUGlw
ZWxpbmVEZXNjcmlwdG9yJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlZjxSZW5kZXJQaXBlbGluZT4m
Jik+JiYpIGZpbmFsOworCisgICAgUmVmPENvbW1hbmRFbmNvZGVyPiBjcmVhdGVDb21tYW5kRW5j
b2Rlcihjb25zdCBzdGQ6Om9wdGlvbmFsPENvbW1hbmRFbmNvZGVyRGVzY3JpcHRvcj4mKSBmaW5h
bDsKKyAgICBSZWY8UmVuZGVyQnVuZGxlRW5jb2Rlcj4gY3JlYXRlUmVuZGVyQnVuZGxlRW5jb2Rl
cihjb25zdCBSZW5kZXJCdW5kbGVFbmNvZGVyRGVzY3JpcHRvciYpIGZpbmFsOworCisgICAgUmVm
PFF1ZXJ5U2V0PiBjcmVhdGVRdWVyeVNldChjb25zdCBRdWVyeVNldERlc2NyaXB0b3ImKSBmaW5h
bDsKKworICAgIHZvaWQgcHVzaEVycm9yU2NvcGUoRXJyb3JGaWx0ZXIpIGZpbmFsOworICAgIHZv
aWQgcG9wRXJyb3JTY29wZUNhbGxiYWNrKFdHUFVFcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1lc3Nh
Z2UpOworICAgIHZvaWQgcG9wRXJyb3JTY29wZShzdGQ6OmZ1bmN0aW9uPHZvaWQoc3RkOjpvcHRp
b25hbDxFcnJvcj4mJik+JiYpIGZpbmFsOworCisgICAgdm9pZCBzZXRMYWJlbEludGVybmFsKGNv
bnN0IFN0cmluZyYpIGZpbmFsOworCisgICAgV0dQVURldmljZSBtX2JhY2tpbmcgeyBudWxscHRy
IH07CisKKyAgICBEZXF1ZTxzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVmPENvbXB1dGVQaXBlbGluZT4m
Jik+PiBtX2NyZWF0ZUNvbXB1dGVQaXBlbGluZUFzeW5jQ2FsbGJhY2tzOworICAgIERlcXVlPHN0
ZDo6ZnVuY3Rpb248dm9pZChSZWY8UmVuZGVyUGlwZWxpbmU+JiYpPj4gbV9jcmVhdGVSZW5kZXJQ
aXBlbGluZUFzeW5jQ2FsbGJhY2tzOworICAgIERlcXVlPHN0ZDo6ZnVuY3Rpb248dm9pZChzdGQ6
Om9wdGlvbmFsPEVycm9yPiYmKT4+IG1fcG9wRXJyb3JTY29wZUNhbGxiYWNrczsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUV4dGVybmFsVGV4
dHVyZUltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1w
bC9XZWJHUFVFeHRlcm5hbFRleHR1cmVJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYWViODllMDdmYjU2
MjdmMjY5ZGI5MzUwMjE1ODZkYjRmNzBhNjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVFeHRlcm5hbFRleHR1cmVJ
bXBsLmNwcApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYkdQVUV4dGVybmFsVGV4dHVyZUltcGwuaCIKKworI2luY2x1ZGUgPFdl
YkdQVS9XZWJHUFVFeHQuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsK
KworRXh0ZXJuYWxUZXh0dXJlSW1wbDo6RXh0ZXJuYWxUZXh0dXJlSW1wbCgpCit7Cit9CisKK0V4
dGVybmFsVGV4dHVyZUltcGw6On5FeHRlcm5hbFRleHR1cmVJbXBsKCkKK3sKK30KKwordm9pZCBF
eHRlcm5hbFRleHR1cmVJbXBsOjpzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYpCit7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUV4dGVy
bmFsVGV4dHVyZUltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BV
L0ltcGwvV2ViR1BVRXh0ZXJuYWxUZXh0dXJlSW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFkNzgxNjMzZTU4
ZDA1OTc2YjRmN2RiOWI1YzgzYmViMDgxYmU2YWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUV4dGVybmFsVGV4dHVy
ZUltcGwuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJXZWJHUFVFeHRlcm5hbFRleHR1cmUuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BV
Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK2NsYXNzIEV4dGVy
bmFsVGV4dHVyZUltcGwgZmluYWwgOiBwdWJsaWMgRXh0ZXJuYWxUZXh0dXJlIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmPEV4dGVybmFsVGV4dHVyZUltcGw+IGNyZWF0ZSgpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBFeHRlcm5hbFRleHR1cmVJbXBsKCkpOworICAgIH0K
KworICAgIHZpcnR1YWwgfkV4dGVybmFsVGV4dHVyZUltcGwoKTsKKworcHJpdmF0ZToKKyAgICBF
eHRlcm5hbFRleHR1cmVJbXBsKCk7CisKKyAgICBFeHRlcm5hbFRleHR1cmVJbXBsKGNvbnN0IEV4
dGVybmFsVGV4dHVyZUltcGwmKSA9IGRlbGV0ZTsKKyAgICBFeHRlcm5hbFRleHR1cmVJbXBsKEV4
dGVybmFsVGV4dHVyZUltcGwmJikgPSBkZWxldGU7CisgICAgRXh0ZXJuYWxUZXh0dXJlSW1wbCYg
b3BlcmF0b3I9KGNvbnN0IEV4dGVybmFsVGV4dHVyZUltcGwmKSA9IGRlbGV0ZTsKKyAgICBFeHRl
cm5hbFRleHR1cmVJbXBsJiBvcGVyYXRvcj0oRXh0ZXJuYWxUZXh0dXJlSW1wbCYmKSA9IGRlbGV0
ZTsKKworICAgIHZvaWQgc2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5hbDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUltcGwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVJ
bXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xMDc2MThjMjIwYWU4Yjg2OWY3ZGUwOGFlNmVlMDE1MDdhZjgx
OWNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9X
ZWJHUFUvSW1wbC9XZWJHUFVJbXBsLmNwcApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkdQVUltcGwuaCIKKworI2luY2x1ZGUg
IldlYkdQVUFkYXB0ZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVQ29udmVydFRvQmFja2luZy5o
IgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFVFeHQuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1l
c3BhY2UgV2ViR1BVIHsKKworR1BVSW1wbDo6R1BVSW1wbChXR1BVSW5zdGFuY2UgaW5zdGFuY2Up
CisgICAgOiBtX2JhY2tpbmcoaW5zdGFuY2UpCit7Cit9CisKK0dQVUltcGw6On5HUFVJbXBsKCkK
K3sKKyAgICB3Z3B1SW5zdGFuY2VSZWxlYXNlKG1fYmFja2luZyk7Cit9CisKK3ZvaWQgcmVxdWVz
dEFkYXB0ZXJDYWxsYmFjayhXR1BVUmVxdWVzdEFkYXB0ZXJTdGF0dXMgc3RhdHVzLCBXR1BVQWRh
cHRlciBhZGFwdGVyLCBjb25zdCBjaGFyKiBtZXNzYWdlLCB2b2lkKiB1c2VyZGF0YSkKK3sKKyAg
ICBhdXRvIGdwdSA9IGFkb3B0UmVmKCpzdGF0aWNfY2FzdDxHUFVJbXBsKj4odXNlcmRhdGEpKTsg
Ly8gYWRvcHRSZWYgaXMgYmFsYW5jZWQgYnkgbGVha1JlZiBpbiByZXF1ZXN0QWRhcHRlcigpIGJl
bG93LiBXZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSdyZSB1c2luZyBhIEMgQVBJIHdpdGgg
bm8gY29uY2VwdCBvZiByZWZlcmVuY2UgY291bnRpbmcgb3IgYmxvY2tzLgorICAgIGdwdS0+cmVx
dWVzdEFkYXB0ZXJDYWxsYmFjayhzdGF0dXMsIGFkYXB0ZXIsIG1lc3NhZ2UpOworfQorCit2b2lk
IEdQVUltcGw6OnJlcXVlc3RBZGFwdGVyKGNvbnN0IFJlcXVlc3RBZGFwdGVyT3B0aW9ucyYgb3B0
aW9ucywgc3RkOjpmdW5jdGlvbjx2b2lkKFJlZlB0cjxBZGFwdGVyPiYmKT4mJiBjYWxsYmFjaykK
K3sKKyAgICBSZWYgcHJvdGVjdGVkVGhpcygqdGhpcyk7CisKKyAgICBXR1BVUmVxdWVzdEFkYXB0
ZXJPcHRpb25zIGJhY2tpbmdPcHRpb25zIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgbnVs
bHB0ciwKKyAgICAgICAgb3B0aW9ucy5wb3dlclByZWZlcmVuY2UgPyBjb252ZXJ0VG9CYWNraW5n
KCpvcHRpb25zLnBvd2VyUHJlZmVyZW5jZSkgOiBzdGF0aWNfY2FzdDxXR1BVUG93ZXJQcmVmZXJl
bmNlPihXR1BVUG93ZXJQcmVmZXJlbmNlX05vUHJlZmVyZW5jZSksCisgICAgICAgIG9wdGlvbnMu
Zm9yY2VGYWxsYmFja0FkYXB0ZXIsCisgICAgfTsKKworICAgIG1fY2FsbGJhY2tzLmFwcGVuZChX
VEZNb3ZlKGNhbGxiYWNrKSk7CisKKyAgICB3Z3B1SW5zdGFuY2VSZXF1ZXN0QWRhcHRlcihtX2Jh
Y2tpbmcsICZiYWNraW5nT3B0aW9ucywgJldlYkdQVTo6cmVxdWVzdEFkYXB0ZXJDYWxsYmFjaywg
JnByb3RlY3RlZFRoaXMubGVha1JlZigpKTsgLy8gbGVha1JlZiBpcyBiYWxhbmNlZCBieSBhZG9w
dFJlZiBpbiByZXF1ZXN0QWRhcHRlckNhbGxiYWNrKCkgYWJvdmUuIFdlIGhhdmUgdG8gZG8gdGhp
cyBiZWNhdXNlIHdlJ3JlIHVzaW5nIGEgQyBBUEkgd2l0aCBubyBjb25jZXB0IG9mIHJlZmVyZW5j
ZSBjb3VudGluZyBvciBibG9ja3MuCit9CisKK3ZvaWQgR1BVSW1wbDo6cmVxdWVzdEFkYXB0ZXJD
YWxsYmFjayhXR1BVUmVxdWVzdEFkYXB0ZXJTdGF0dXMsIFdHUFVBZGFwdGVyIGFkYXB0ZXIsIGNv
bnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgVU5VU0VEX1BBUkFNKG1lc3NhZ2UpOworICAgIGF1
dG8gY2FsbGJhY2sgPSBtX2NhbGxiYWNrcy50YWtlRmlyc3QoKTsKKyAgICBjYWxsYmFjayhBZGFw
dGVySW1wbDo6Y3JlYXRlKGFkYXB0ZXIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8v
IG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3Jh
cGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9n
cmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWMxNzAzZGIyZWU0
ZTAwZmIxMTVjNDZmNmEzYjA2MmMwYzhmMjY5YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVSW1wbC5oCkBAIC0wLDAg
KzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYkdQVS5o
IgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFUuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKwor
bmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworY2xhc3MgR1BVSW1wbCBmaW5h
bCA6IHB1YmxpYyBHUFUgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8R1BVSW1wbD4gY3JlYXRl
KFdHUFVJbnN0YW5jZSBpbnN0YW5jZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEdQVUltcGwoaW5zdGFuY2UpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5HUFVJbXBsKCk7
CisKKyAgICBXR1BVSW5zdGFuY2UgYmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsg
fQorCitwcml2YXRlOgorICAgIGZyaWVuZCB2b2lkIHJlcXVlc3RBZGFwdGVyQ2FsbGJhY2soV0dQ
VVJlcXVlc3RBZGFwdGVyU3RhdHVzLCBXR1BVQWRhcHRlciwgY29uc3QgY2hhciogbWVzc2FnZSwg
dm9pZCogdXNlcmRhdGEpOworCisgICAgR1BVSW1wbChXR1BVSW5zdGFuY2UpOworCisgICAgR1BV
SW1wbChjb25zdCBHUFVJbXBsJikgPSBkZWxldGU7CisgICAgR1BVSW1wbChHUFVJbXBsJiYpID0g
ZGVsZXRlOworICAgIEdQVUltcGwmIG9wZXJhdG9yPShjb25zdCBHUFVJbXBsJikgPSBkZWxldGU7
CisgICAgR1BVSW1wbCYgb3BlcmF0b3I9KEdQVUltcGwmJikgPSBkZWxldGU7CisKKyAgICB2b2lk
IHJlcXVlc3RBZGFwdGVyQ2FsbGJhY2soV0dQVVJlcXVlc3RBZGFwdGVyU3RhdHVzLCBXR1BVQWRh
cHRlciwgY29uc3QgY2hhciogbWVzc2FnZSk7CisgICAgdm9pZCByZXF1ZXN0QWRhcHRlcihjb25z
dCBSZXF1ZXN0QWRhcHRlck9wdGlvbnMmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVmUHRyPEFkYXB0
ZXI+JiYpPiYmKSBmaW5hbDsKKworICAgIFdHUFVJbnN0YW5jZSBtX2JhY2tpbmcgeyBudWxscHRy
IH07CisKKyAgICBEZXF1ZTxzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVmUHRyPEFkYXB0ZXI+JiYpPj4g
bV9jYWxsYmFja3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdl
YkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUv
SW1wbC9XZWJHUFVQaXBlbGluZUxheW91dEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVQaXBlbGluZUxheW91dEltcGwuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjY0NDczOTkzMTg5NTBkOTU0YTdlMTZkY2Y0NmU3ZmI0N2UxNGM1ZjAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dl
YkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5jcHAKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVQaXBlbGluZUxheW91dEltcGwu
aCIKKworI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFVFeHQuaD4KKworbmFtZXNwYWNlIFBBTCB7Citu
YW1lc3BhY2UgV2ViR1BVIHsKKworUGlwZWxpbmVMYXlvdXRJbXBsOjpQaXBlbGluZUxheW91dElt
cGwoV0dQVVBpcGVsaW5lTGF5b3V0IHBpcGVsaW5lTGF5b3V0KQorICAgIDogbV9iYWNraW5nKHBp
cGVsaW5lTGF5b3V0KQoreworfQorCitQaXBlbGluZUxheW91dEltcGw6On5QaXBlbGluZUxheW91
dEltcGwoKQoreworICAgIHdncHVQaXBlbGluZUxheW91dFJlbGVhc2UobV9iYWNraW5nKTsKK30K
Kwordm9pZCBQaXBlbGluZUxheW91dEltcGw6OnNldExhYmVsSW50ZXJuYWwoY29uc3QgU3RyaW5n
JiBsYWJlbCkKK3sKKyAgICB3Z3B1UGlwZWxpbmVMYXlvdXRTZXRMYWJlbChtX2JhY2tpbmcsIGxh
YmVsLnV0ZjgoKS5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNw
YWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9X
ZWJHUFUvSW1wbC9XZWJHUFVQaXBlbGluZUxheW91dEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUGlwZWxpbmVMYXlvdXRJbXBsLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uM2FmY2EyYzc0ZTgzMzgxZDhiM2VjNTEwYTAzY2VmOTI3OWQxYmE0OAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwv
V2ViR1BVUGlwZWxpbmVMYXlvdXRJbXBsLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVUGlwZWxpbmVMYXlvdXQuaCIKKyNpbmNs
dWRlIDxXZWJHUFUvV2ViR1BVLmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQ
VSB7CisKK2NsYXNzIFBpcGVsaW5lTGF5b3V0SW1wbCBmaW5hbCA6IHB1YmxpYyBQaXBlbGluZUxh
eW91dCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxQaXBlbGluZUxheW91dEltcGw+IGNyZWF0
ZShXR1BVUGlwZWxpbmVMYXlvdXQgcGlwZWxpbmVMYXlvdXQpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBQaXBlbGluZUxheW91dEltcGwocGlwZWxpbmVMYXlvdXQpKTsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIH5QaXBlbGluZUxheW91dEltcGwoKTsKKworICAgIFdHUFVQaXBl
bGluZUxheW91dCBiYWNraW5nKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nOyB9CisKK3ByaXZh
dGU6CisgICAgUGlwZWxpbmVMYXlvdXRJbXBsKFdHUFVQaXBlbGluZUxheW91dCk7CisKKyAgICBQ
aXBlbGluZUxheW91dEltcGwoY29uc3QgUGlwZWxpbmVMYXlvdXRJbXBsJikgPSBkZWxldGU7Cisg
ICAgUGlwZWxpbmVMYXlvdXRJbXBsKFBpcGVsaW5lTGF5b3V0SW1wbCYmKSA9IGRlbGV0ZTsKKyAg
ICBQaXBlbGluZUxheW91dEltcGwmIG9wZXJhdG9yPShjb25zdCBQaXBlbGluZUxheW91dEltcGwm
KSA9IGRlbGV0ZTsKKyAgICBQaXBlbGluZUxheW91dEltcGwmIG9wZXJhdG9yPShQaXBlbGluZUxh
eW91dEltcGwmJikgPSBkZWxldGU7CisKKyAgICB2b2lkIHNldExhYmVsSW50ZXJuYWwoY29uc3Qg
U3RyaW5nJikgZmluYWw7CisKKyAgICBXR1BVUGlwZWxpbmVMYXlvdXQgbV9iYWNraW5nIHsgbnVs
bHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwv
V2ViR1BVUXVlcnlTZXRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3Mv
V2ViR1BVL0ltcGwvV2ViR1BVUXVlcnlTZXRJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NmVkNjk0MGEy
OTMxMzAxNzE5N2Y4ODRjMDhkMjVhM2MxN2Y2MGJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVRdWVyeVNldEltcGwu
Y3BwCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViR1BVUXVlcnlTZXRJbXBsLmgiCisKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BV
RXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK1F1ZXJ5U2V0
SW1wbDo6UXVlcnlTZXRJbXBsKFdHUFVRdWVyeVNldCBxdWVyeVNldCkKKyAgICA6IG1fYmFja2lu
ZyhxdWVyeVNldCkKK3sKK30KKworUXVlcnlTZXRJbXBsOjp+UXVlcnlTZXRJbXBsKCkKK3sKKyAg
ICB3Z3B1UXVlcnlTZXRSZWxlYXNlKG1fYmFja2luZyk7Cit9CisKK3ZvaWQgUXVlcnlTZXRJbXBs
OjpkZXN0cm95KCkKK3sKKyAgICB3Z3B1UXVlcnlTZXREZXN0cm95KG1fYmFja2luZyk7Cit9CisK
K3ZvaWQgUXVlcnlTZXRJbXBsOjpzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYgbGFiZWwp
Cit7CisgICAgd2dwdVF1ZXJ5U2V0U2V0TGFiZWwobV9iYWNraW5nLCBsYWJlbC51dGY4KCkuZGF0
YSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2Vi
R1BVUXVlcnlTZXRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQ
VS9JbXBsL1dlYkdQVVF1ZXJ5U2V0SW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmZGY3ZjBmMTdiOWNhNTAz
OTlkN2E5MzBlZmRjOTQ2MmYxOTQ0YmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVF1ZXJ5U2V0SW1wbC5oCkBAIC0w
LDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYkdQ
VVF1ZXJ5U2V0LmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorCituYW1lc3BhY2UgUEFM
IHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBRdWVyeVNldEltcGwgZmluYWwgOiBwdWJs
aWMgUXVlcnlTZXQgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UXVlcnlTZXRJbXBsPiBjcmVh
dGUoV0dQVVF1ZXJ5U2V0IHF1ZXJ5U2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgUXVlcnlTZXRJbXBsKHF1ZXJ5U2V0KSk7CisgICAgfQorCisgICAgdmlydHVhbCB+UXVl
cnlTZXRJbXBsKCk7CisKKyAgICBXR1BVUXVlcnlTZXQgYmFja2luZygpIGNvbnN0IHsgcmV0dXJu
IG1fYmFja2luZzsgfQorCitwcml2YXRlOgorICAgIFF1ZXJ5U2V0SW1wbChXR1BVUXVlcnlTZXQp
OworCisgICAgUXVlcnlTZXRJbXBsKGNvbnN0IFF1ZXJ5U2V0SW1wbCYpID0gZGVsZXRlOworICAg
IFF1ZXJ5U2V0SW1wbChRdWVyeVNldEltcGwmJikgPSBkZWxldGU7CisgICAgUXVlcnlTZXRJbXBs
JiBvcGVyYXRvcj0oY29uc3QgUXVlcnlTZXRJbXBsJikgPSBkZWxldGU7CisgICAgUXVlcnlTZXRJ
bXBsJiBvcGVyYXRvcj0oUXVlcnlTZXRJbXBsJiYpID0gZGVsZXRlOworCisgICAgdm9pZCBkZXN0
cm95KCkgZmluYWw7CisKKyAgICB2b2lkIHNldExhYmVsSW50ZXJuYWwoY29uc3QgU3RyaW5nJikg
ZmluYWw7CisKKyAgICBXR1BVUXVlcnlTZXQgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUXVldWVJbXBs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BV
UXVldWVJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40N2I0M2YxNjU1ZWVjZWU3OTc5OTYzNTcwODU3M2Ex
MzlkM2JhOWJmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVRdWV1ZUltcGwuY3BwCkBAIC0wLDAgKzEsMTM2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkdQVVF1ZXVlSW1w
bC5oIgorCisjaW5jbHVkZSAiV2ViR1BVQnVmZmVySW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVUNv
bW1hbmRCdWZmZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVQ29udmVydFRvQmFja2luZy5oIgor
I2luY2x1ZGUgIldlYkdQVVRleHR1cmVJbXBsLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVUV4
dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitRdWV1ZUltcGw6
OlF1ZXVlSW1wbChXR1BVUXVldWUgcXVldWUpCisgICAgOiBtX2JhY2tpbmcocXVldWUpCit7Cit9
CisKK1F1ZXVlSW1wbDo6flF1ZXVlSW1wbCgpCit7CisgICAgd2dwdVF1ZXVlUmVsZWFzZShtX2Jh
Y2tpbmcpOworfQorCit2b2lkIFF1ZXVlSW1wbDo6c3VibWl0KFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPENvbW1hbmRCdWZmZXI+PiYmIGNvbW1hbmRCdWZmZXJzKQoreworICAgIFZlY3Rv
cjxXR1BVQ29tbWFuZEJ1ZmZlcj4gYmFja2luZ0NvbW1hbmRCdWZmZXJzOworICAgIGJhY2tpbmdD
b21tYW5kQnVmZmVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNvbW1hbmRCdWZmZXJzLnNpemUo
KSk7CisgICAgZm9yIChhdXRvIGNvbW1hbmRCdWZmZXIgOiBjb21tYW5kQnVmZmVycykKKyAgICAg
ICAgYmFja2luZ0NvbW1hbmRCdWZmZXJzLnVuY2hlY2tlZEFwcGVuZChzdGF0aWNfY2FzdDxjb25z
dCBDb21tYW5kQnVmZmVySW1wbCY+KGNvbW1hbmRCdWZmZXIuZ2V0KCkpLmJhY2tpbmcoKSk7CisK
KyAgICB3Z3B1UXVldWVTdWJtaXQobV9iYWNraW5nLCBiYWNraW5nQ29tbWFuZEJ1ZmZlcnMuc2l6
ZSgpLCBiYWNraW5nQ29tbWFuZEJ1ZmZlcnMuZGF0YSgpKTsKK30KKwordm9pZCBvblN1Ym1pdHRl
ZFdvcmtEb25lQ2FsbGJhY2soV0dQVVF1ZXVlV29ya0RvbmVTdGF0dXMgc3RhdHVzLCB2b2lkKiB1
c2VyZGF0YSkKK3sKKyAgICBhdXRvIHF1ZXVlID0gYWRvcHRSZWYoKnN0YXRpY19jYXN0PFF1ZXVl
SW1wbCo+KHVzZXJkYXRhKSk7IC8vIGFkb3B0UmVmIGlzIGJhbGFuY2VkIGJ5IGxlYWtSZWYgaW4g
b25TdWJtaXR0ZWRXb3JrRG9uZSgpIGJlbG93LiBXZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZSB3
ZSdyZSB1c2luZyBhIEMgQVBJIHdpdGggbm8gY29uY2VwdCBvZiByZWZlcmVuY2UgY291bnRpbmcg
b3IgYmxvY2tzLgorICAgIHF1ZXVlLT5vblN1Ym1pdHRlZFdvcmtEb25lQ2FsbGJhY2soc3RhdHVz
KTsKK30KKwordm9pZCBRdWV1ZUltcGw6Om9uU3VibWl0dGVkV29ya0RvbmUoc3RkOjpmdW5jdGlv
bjx2b2lkKCk+JiYgY2FsbGJhY2spCit7CisgICAgUmVmIHByb3RlY3RlZFRoaXMoKnRoaXMpOwor
CisgICAgbV9jYWxsYmFja3MuYXBwZW5kKFdURk1vdmUoY2FsbGJhY2spKTsKKworICAgIHdncHVR
dWV1ZU9uU3VibWl0dGVkV29ya0RvbmUobV9iYWNraW5nLCBtX3NpZ25hbFZhbHVlLCAmV2ViR1BV
OjpvblN1Ym1pdHRlZFdvcmtEb25lQ2FsbGJhY2ssICZwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7
IC8vIGxlYWtSZWYgaXMgYmFsYW5jZWQgYnkgYWRvcHRSZWYgaW4gb25TdWJtaXR0ZWRXb3JrRG9u
ZUNhbGxiYWNrKCkgYWJvdmUuIFdlIGhhdmUgdG8gZG8gdGhpcyBiZWNhdXNlIHdlJ3JlIHVzaW5n
IGEgQyBBUEkgd2l0aCBubyBjb25jZXB0IG9mIHJlZmVyZW5jZSBjb3VudGluZyBvciBibG9ja3Mu
CisKKyAgICArK21fc2lnbmFsVmFsdWU7Cit9CisKK3ZvaWQgUXVldWVJbXBsOjpvblN1Ym1pdHRl
ZFdvcmtEb25lQ2FsbGJhY2soV0dQVVF1ZXVlV29ya0RvbmVTdGF0dXMpCit7CisgICAgYXV0byBj
YWxsYmFjayA9IG1fY2FsbGJhY2tzLnRha2VGaXJzdCgpOworICAgIGNhbGxiYWNrKCk7Cit9CisK
K3ZvaWQgUXVldWVJbXBsOjp3cml0ZUJ1ZmZlcigKKyAgICBjb25zdCBCdWZmZXImIGJ1ZmZlciwK
KyAgICBTaXplNjQgYnVmZmVyT2Zmc2V0LAorICAgIGNvbnN0IHZvaWQqIHNvdXJjZSwKKyAgICBz
aXplX3QgYnl0ZUxlbmd0aCwKKyAgICBTaXplNjQgZGF0YU9mZnNldCwKKyAgICBzdGQ6Om9wdGlv
bmFsPFNpemU2ND4gc2l6ZSkKK3sKKyAgICAvLyBGSVhNRTogVXNlIGNoZWNrZWQgYXJpdGhtZXRp
YworICAgIHdncHVRdWV1ZVdyaXRlQnVmZmVyKG1fYmFja2luZywgc3RhdGljX2Nhc3Q8Y29uc3Qg
QnVmZmVySW1wbCY+KGJ1ZmZlcikuYmFja2luZygpLCBidWZmZXJPZmZzZXQsIHN0YXRpY19jYXN0
PGNvbnN0IHVpbnQ4X3QqPihzb3VyY2UpICsgZGF0YU9mZnNldCwgc2l6ZS52YWx1ZV9vcihieXRl
TGVuZ3RoIC0gZGF0YU9mZnNldCkpOworfQorCit2b2lkIFF1ZXVlSW1wbDo6d3JpdGVUZXh0dXJl
KAorICAgIGNvbnN0IEltYWdlQ29weVRleHR1cmUmIGRlc3RpbmF0aW9uLAorICAgIGNvbnN0IHZv
aWQqIHNvdXJjZSwKKyAgICBzaXplX3QgYnl0ZUxlbmd0aCwKKyAgICBjb25zdCBJbWFnZURhdGFM
YXlvdXQmIGRhdGFMYXlvdXQsCisgICAgY29uc3QgRXh0ZW50M0QmIHNpemUpCit7CisgICAgV0dQ
VUltYWdlQ29weVRleHR1cmUgYmFja2luZ0Rlc3RpbmF0aW9uIHsKKyAgICAgICAgbnVsbHB0ciwK
KyAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgVGV4dHVyZUltcGwmPihkZXN0aW5hdGlvbi50ZXh0
dXJlKS5iYWNraW5nKCksCisgICAgICAgIGRlc3RpbmF0aW9uLm1pcExldmVsLAorICAgICAgICBk
ZXN0aW5hdGlvbi5vcmlnaW4gPyBjb252ZXJ0VG9CYWNraW5nKCpkZXN0aW5hdGlvbi5vcmlnaW4p
IDogV0dQVU9yaWdpbjNEIHsgMCwgMCwgMCB9LAorICAgICAgICBjb252ZXJ0VG9CYWNraW5nKGRl
c3RpbmF0aW9uLmFzcGVjdCksCisgICAgfTsKKworICAgIFdHUFVUZXh0dXJlRGF0YUxheW91dCBi
YWNraW5nRGF0YUxheW91dCB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIGRhdGFMYXlvdXQu
b2Zmc2V0LAorICAgICAgICBkYXRhTGF5b3V0LmJ5dGVzUGVyUm93LnZhbHVlX29yKDApLAorICAg
ICAgICBkYXRhTGF5b3V0LnJvd3NQZXJJbWFnZS52YWx1ZV9vcigwKSwKKyAgICB9OworCisgICAg
V0dQVUV4dGVudDNEIGJhY2tpbmdTaXplID0gY29udmVydFRvQmFja2luZyhzaXplKTsKKworICAg
IHdncHVRdWV1ZVdyaXRlVGV4dHVyZShtX2JhY2tpbmcsICZiYWNraW5nRGVzdGluYXRpb24sIHNv
dXJjZSwgYnl0ZUxlbmd0aCwgJmJhY2tpbmdEYXRhTGF5b3V0LCAmYmFja2luZ1NpemUpOworfQor
Cit2b2lkIFF1ZXVlSW1wbDo6Y29weUV4dGVybmFsSW1hZ2VUb1RleHR1cmUoCisgICAgY29uc3Qg
SW1hZ2VDb3B5RXh0ZXJuYWxJbWFnZSYgc291cmNlLAorICAgIGNvbnN0IEltYWdlQ29weVRleHR1
cmVUYWdnZWQmIGRlc3RpbmF0aW9uLAorICAgIGNvbnN0IEV4dGVudDNEJiBjb3B5U2l6ZSkKK3sK
KyAgICBVTlVTRURfUEFSQU0oc291cmNlKTsKKyAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb24p
OworICAgIFVOVVNFRF9QQVJBTShjb3B5U2l6ZSk7Cit9CisKK3ZvaWQgUXVldWVJbXBsOjpzZXRM
YWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYgbGFiZWwpCit7CisgICAgd2dwdVF1ZXVlU2V0TGFi
ZWwobV9iYWNraW5nLCBsYWJlbC51dGY4KCkuZGF0YSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
UEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUXVldWVJbXBsLmggYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVF1ZXVlSW1wbC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmNhMDZmYTZmYjVmMzI2NjQ4ODZjYTZlMWMwNzRkNjlkMDM3YTQwOTQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dl
YkdQVVF1ZXVlSW1wbC5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIldlYkdQVVF1ZXVlLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5o
PgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBX
ZWJHUFUgeworCitjbGFzcyBRdWV1ZUltcGwgZmluYWwgOiBwdWJsaWMgUXVldWUgeworcHVibGlj
OgorICAgIHN0YXRpYyBSZWY8UXVldWVJbXBsPiBjcmVhdGUoV0dQVVF1ZXVlIHF1ZXVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUXVldWVJbXBsKHF1ZXVlKSk7CisgICAg
fQorCisgICAgdmlydHVhbCB+UXVldWVJbXBsKCk7CisKKyAgICBXR1BVUXVldWUgYmFja2luZygp
IGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCB2b2lk
IG9uU3VibWl0dGVkV29ya0RvbmVDYWxsYmFjayhXR1BVUXVldWVXb3JrRG9uZVN0YXR1cywgdm9p
ZCogdXNlcmRhdGEpOworCisgICAgUXVldWVJbXBsKFdHUFVRdWV1ZSk7CisKKyAgICBRdWV1ZUlt
cGwoY29uc3QgUXVldWVJbXBsJikgPSBkZWxldGU7CisgICAgUXVldWVJbXBsKFF1ZXVlSW1wbCYm
KSA9IGRlbGV0ZTsKKyAgICBRdWV1ZUltcGwmIG9wZXJhdG9yPShjb25zdCBRdWV1ZUltcGwmKSA9
IGRlbGV0ZTsKKyAgICBRdWV1ZUltcGwmIG9wZXJhdG9yPShRdWV1ZUltcGwmJikgPSBkZWxldGU7
CisKKyAgICB2b2lkIHN1Ym1pdChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDb21tYW5k
QnVmZmVyPj4mJikgZmluYWw7CisKKyAgICB2b2lkIG9uU3VibWl0dGVkV29ya0RvbmVDYWxsYmFj
ayhXR1BVUXVldWVXb3JrRG9uZVN0YXR1cyk7CisgICAgdm9pZCBvblN1Ym1pdHRlZFdvcmtEb25l
KHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiYmKSBmaW5hbDsKKworICAgIHZvaWQgd3JpdGVCdWZmZXIo
CisgICAgICAgIGNvbnN0IEJ1ZmZlciYsCisgICAgICAgIFNpemU2NCBidWZmZXJPZmZzZXQsCisg
ICAgICAgIGNvbnN0IHZvaWQqIHNvdXJjZSwKKyAgICAgICAgc2l6ZV90IGJ5dGVMZW5ndGgsCisg
ICAgICAgIFNpemU2NCBkYXRhT2Zmc2V0LAorICAgICAgICBzdGQ6Om9wdGlvbmFsPFNpemU2ND4p
IGZpbmFsOworCisgICAgdm9pZCB3cml0ZVRleHR1cmUoCisgICAgICAgIGNvbnN0IEltYWdlQ29w
eVRleHR1cmUmIGRlc3RpbmF0aW9uLAorICAgICAgICBjb25zdCB2b2lkKiBzb3VyY2UsCisgICAg
ICAgIHNpemVfdCBieXRlTGVuZ3RoLAorICAgICAgICBjb25zdCBJbWFnZURhdGFMYXlvdXQmLAor
ICAgICAgICBjb25zdCBFeHRlbnQzRCYgc2l6ZSkgZmluYWw7CisKKyAgICB2b2lkIGNvcHlFeHRl
cm5hbEltYWdlVG9UZXh0dXJlKAorICAgICAgICBjb25zdCBJbWFnZUNvcHlFeHRlcm5hbEltYWdl
JiBzb3VyY2UsCisgICAgICAgIGNvbnN0IEltYWdlQ29weVRleHR1cmVUYWdnZWQmIGRlc3RpbmF0
aW9uLAorICAgICAgICBjb25zdCBFeHRlbnQzRCYgY29weVNpemUpIGZpbmFsOworCisgICAgdm9p
ZCBzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYpIGZpbmFsOworCisgICAgV0dQVVF1ZXVl
IG1fYmFja2luZyB7IG51bGxwdHIgfTsKKworICAgIHVpbnQ2NF90IG1fc2lnbmFsVmFsdWUgeyAx
IH07CisKKyAgICBEZXF1ZTxzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4+IG1fY2FsbGJhY2tzOworfTsK
KworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVy
QnVuZGxlRW5jb2RlckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9X
ZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJCdW5kbGVFbmNvZGVySW1wbC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ODVlMjEyN2Q2NDIxNmQwYjk0YzRhNDk5ZWNiMWI0MDc5MDg0YWVmYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVu
ZGVyQnVuZGxlRW5jb2RlckltcGwuY3BwCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJ
bXBsLmgiCisKKyNpbmNsdWRlICJXZWJHUFVCaW5kR3JvdXBJbXBsLmgiCisjaW5jbHVkZSAiV2Vi
R1BVQnVmZmVySW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVUNvbnZlcnRUb0JhY2tpbmcuaCIKKyNp
bmNsdWRlICJXZWJHUFVSZW5kZXJCdW5kbGVJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVUmVuZGVy
UGlwZWxpbmVJbXBsLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVUV4dC5oPgorCituYW1lc3Bh
Y2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6
UmVuZGVyQnVuZGxlRW5jb2RlckltcGwoV0dQVVJlbmRlckJ1bmRsZUVuY29kZXIgcmVuZGVyQnVu
ZGxlRW5jb2RlcikKKyAgICA6IG1fYmFja2luZyhyZW5kZXJCdW5kbGVFbmNvZGVyKQoreworfQor
CitSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6flJlbmRlckJ1bmRsZUVuY29kZXJJbXBsKCkKK3sK
KyAgICB3Z3B1UmVuZGVyQnVuZGxlRW5jb2RlclJlbGVhc2UobV9iYWNraW5nKTsKK30KKwordm9p
ZCBSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6c2V0UGlwZWxpbmUoY29uc3QgUmVuZGVyUGlwZWxp
bmUmIHJlbmRlclBpcGVsaW5lKQoreworICAgIHdncHVSZW5kZXJCdW5kbGVFbmNvZGVyU2V0UGlw
ZWxpbmUobV9iYWNraW5nLCBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJQaXBlbGluZUltcGwmPihy
ZW5kZXJQaXBlbGluZSkuYmFja2luZygpKTsKK30KKwordm9pZCBSZW5kZXJCdW5kbGVFbmNvZGVy
SW1wbDo6c2V0SW5kZXhCdWZmZXIoY29uc3QgQnVmZmVyJiBidWZmZXIsIEluZGV4Rm9ybWF0IGlu
ZGV4Rm9ybWF0LCBTaXplNjQgb2Zmc2V0LCBzdGQ6Om9wdGlvbmFsPFNpemU2ND4gc2l6ZSkKK3sK
KyAgICB3Z3B1UmVuZGVyQnVuZGxlRW5jb2RlclNldEluZGV4QnVmZmVyKG1fYmFja2luZywgc3Rh
dGljX2Nhc3Q8Y29uc3QgQnVmZmVySW1wbCY+KGJ1ZmZlcikuYmFja2luZygpLCBjb252ZXJ0VG9C
YWNraW5nKGluZGV4Rm9ybWF0KSwgb2Zmc2V0LCBzaXplLnZhbHVlX29yKFdHUFVfV0hPTEVfU0la
RSkpOworfQorCit2b2lkIFJlbmRlckJ1bmRsZUVuY29kZXJJbXBsOjpzZXRWZXJ0ZXhCdWZmZXIo
SW5kZXgzMiBzbG90LCBjb25zdCBCdWZmZXImIGJ1ZmZlciwgU2l6ZTY0IG9mZnNldCwgc3RkOjpv
cHRpb25hbDxTaXplNjQ+IHNpemUpCit7CisgICAgd2dwdVJlbmRlckJ1bmRsZUVuY29kZXJTZXRW
ZXJ0ZXhCdWZmZXIobV9iYWNraW5nLCBzbG90LCBzdGF0aWNfY2FzdDxjb25zdCBCdWZmZXJJbXBs
Jj4oYnVmZmVyKS5iYWNraW5nKCksIG9mZnNldCwgc2l6ZS52YWx1ZV9vcihXR1BVX1dIT0xFX1NJ
WkUpKTsKK30KKwordm9pZCBSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6ZHJhdyhTaXplMzIgdmVy
dGV4Q291bnQsIFNpemUzMiBpbnN0YW5jZUNvdW50LAorICAgIFNpemUzMiBmaXJzdFZlcnRleCwg
U2l6ZTMyIGZpcnN0SW5zdGFuY2UpCit7CisgICAgd2dwdVJlbmRlckJ1bmRsZUVuY29kZXJEcmF3
KG1fYmFja2luZywgdmVydGV4Q291bnQsIGluc3RhbmNlQ291bnQsIGZpcnN0VmVydGV4LCBmaXJz
dEluc3RhbmNlKTsKK30KKwordm9pZCBSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6ZHJhd0luZGV4
ZWQoU2l6ZTMyIGluZGV4Q291bnQsIFNpemUzMiBpbnN0YW5jZUNvdW50LAorICAgIFNpemUzMiBm
aXJzdEluZGV4LAorICAgIFNpZ25lZE9mZnNldDMyIGJhc2VWZXJ0ZXgsCisgICAgU2l6ZTMyIGZp
cnN0SW5zdGFuY2UpCit7CisgICAgd2dwdVJlbmRlckJ1bmRsZUVuY29kZXJEcmF3SW5kZXhlZCht
X2JhY2tpbmcsIGluZGV4Q291bnQsIGluc3RhbmNlQ291bnQsIGZpcnN0SW5kZXgsIGJhc2VWZXJ0
ZXgsIGZpcnN0SW5zdGFuY2UpOworfQorCit2b2lkIFJlbmRlckJ1bmRsZUVuY29kZXJJbXBsOjpk
cmF3SW5kaXJlY3QoY29uc3QgQnVmZmVyJiBpbmRpcmVjdEJ1ZmZlciwgU2l6ZTY0IGluZGlyZWN0
T2Zmc2V0KQoreworICAgIHdncHVSZW5kZXJCdW5kbGVFbmNvZGVyRHJhd0luZGlyZWN0KG1fYmFj
a2luZywgc3RhdGljX2Nhc3Q8Y29uc3QgQnVmZmVySW1wbCY+KGluZGlyZWN0QnVmZmVyKS5iYWNr
aW5nKCksIGluZGlyZWN0T2Zmc2V0KTsKK30KKwordm9pZCBSZW5kZXJCdW5kbGVFbmNvZGVySW1w
bDo6ZHJhd0luZGV4ZWRJbmRpcmVjdChjb25zdCBCdWZmZXImIGluZGlyZWN0QnVmZmVyLCBTaXpl
NjQgaW5kaXJlY3RPZmZzZXQpCit7CisgICAgd2dwdVJlbmRlckJ1bmRsZUVuY29kZXJEcmF3SW5k
ZXhlZEluZGlyZWN0KG1fYmFja2luZywgc3RhdGljX2Nhc3Q8Y29uc3QgQnVmZmVySW1wbCY+KGlu
ZGlyZWN0QnVmZmVyKS5iYWNraW5nKCksIGluZGlyZWN0T2Zmc2V0KTsKK30KKwordm9pZCBSZW5k
ZXJCdW5kbGVFbmNvZGVySW1wbDo6c2V0QmluZEdyb3VwKEluZGV4MzIgaW5kZXgsIGNvbnN0IEJp
bmRHcm91cCYgYmluZEdyb3VwLAorICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPEJ1ZmZlckR5bmFt
aWNPZmZzZXQ+PiYmIGR5bmFtaWNPZmZzZXRzKQoreworICAgIGF1dG8gYmFja2luZ09mZnNldHMg
PSBkeW5hbWljT2Zmc2V0cy52YWx1ZV9vcihWZWN0b3I8QnVmZmVyRHluYW1pY09mZnNldD4geyB9
KTsKKyAgICB3Z3B1UmVuZGVyQnVuZGxlRW5jb2RlclNldEJpbmRHcm91cChtX2JhY2tpbmcsIGlu
ZGV4LCBzdGF0aWNfY2FzdDxjb25zdCBCaW5kR3JvdXBJbXBsJj4oYmluZEdyb3VwKS5iYWNraW5n
KCksIGJhY2tpbmdPZmZzZXRzLnNpemUoKSwgYmFja2luZ09mZnNldHMuZGF0YSgpKTsKK30KKwor
dm9pZCBSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6c2V0QmluZEdyb3VwKEluZGV4MzIgaW5kZXgs
IGNvbnN0IEJpbmRHcm91cCYgYmluZEdyb3VwLAorICAgIGNvbnN0IHVpbnQzMl90KiBkeW5hbWlj
T2Zmc2V0c0FycmF5QnVmZmVyLAorICAgIHNpemVfdCBkeW5hbWljT2Zmc2V0c0FycmF5QnVmZmVy
TGVuZ3RoLAorICAgIFNpemU2NCBkeW5hbWljT2Zmc2V0c0RhdGFTdGFydCwKKyAgICBTaXplMzIg
ZHluYW1pY09mZnNldHNEYXRhTGVuZ3RoKQoreworICAgIFVOVVNFRF9QQVJBTShkeW5hbWljT2Zm
c2V0c0FycmF5QnVmZmVyTGVuZ3RoKTsKKyAgICAvLyBGSVhNRTogVXNlIGNoZWNrZWQgYWxnZWJy
YS4KKyAgICB3Z3B1UmVuZGVyQnVuZGxlRW5jb2RlclNldEJpbmRHcm91cChtX2JhY2tpbmcsIGlu
ZGV4LCBzdGF0aWNfY2FzdDxjb25zdCBCaW5kR3JvdXBJbXBsJj4oYmluZEdyb3VwKS5iYWNraW5n
KCksIGR5bmFtaWNPZmZzZXRzRGF0YUxlbmd0aCwgZHluYW1pY09mZnNldHNBcnJheUJ1ZmZlciAr
IGR5bmFtaWNPZmZzZXRzRGF0YVN0YXJ0KTsKK30KKwordm9pZCBSZW5kZXJCdW5kbGVFbmNvZGVy
SW1wbDo6cHVzaERlYnVnR3JvdXAoU3RyaW5nJiYgZ3JvdXBMYWJlbCkKK3sKKyAgICB3Z3B1UmVu
ZGVyQnVuZGxlRW5jb2RlclB1c2hEZWJ1Z0dyb3VwKG1fYmFja2luZywgZ3JvdXBMYWJlbC51dGY4
KCkuZGF0YSgpKTsKK30KKwordm9pZCBSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6cG9wRGVidWdH
cm91cCgpCit7CisgICAgd2dwdVJlbmRlckJ1bmRsZUVuY29kZXJQb3BEZWJ1Z0dyb3VwKG1fYmFj
a2luZyk7Cit9CisKK3ZvaWQgUmVuZGVyQnVuZGxlRW5jb2RlckltcGw6Omluc2VydERlYnVnTWFy
a2VyKFN0cmluZyYmIG1hcmtlckxhYmVsKQoreworICAgIHdncHVSZW5kZXJCdW5kbGVFbmNvZGVy
SW5zZXJ0RGVidWdNYXJrZXIobV9iYWNraW5nLCBtYXJrZXJMYWJlbC51dGY4KCkuZGF0YSgpKTsK
K30KKworUmVmPFJlbmRlckJ1bmRsZT4gUmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OmZpbmlzaChj
b25zdCBSZW5kZXJCdW5kbGVEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIGF1dG8gbGFi
ZWwgPSBkZXNjcmlwdG9yLmxhYmVsLnV0ZjgoKTsKKworICAgIFdHUFVSZW5kZXJCdW5kbGVEZXNj
cmlwdG9yIGJhY2tpbmdEZXNjcmlwdG9yIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgbGFi
ZWwuZGF0YSgpLAorICAgIH07CisKKyAgICByZXR1cm4gUmVuZGVyQnVuZGxlSW1wbDo6Y3JlYXRl
KHdncHVSZW5kZXJCdW5kbGVFbmNvZGVyRmluaXNoKG1fYmFja2luZywgJmJhY2tpbmdEZXNjcmlw
dG9yKSk7Cit9CisKK3ZvaWQgUmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OnNldExhYmVsSW50ZXJu
YWwoY29uc3QgU3RyaW5nJiBsYWJlbCkKK3sKKyAgICB3Z3B1UmVuZGVyQnVuZGxlRW5jb2RlclNl
dExhYmVsKG1fYmFja2luZywgbGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJ
bXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQ
VVJlbmRlckJ1bmRsZUVuY29kZXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTVkYWY0MTkzY2QyOGI5OGMz
MGIwYmViMjY5ZjFmNzI2NzkzMmIxZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVyQnVuZGxlRW5jb2Rlcklt
cGwuaApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJXZWJHUFVSZW5kZXJCdW5kbGVFbmNvZGVyLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQ
VS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBSZW5k
ZXJCdW5kbGVFbmNvZGVySW1wbCBmaW5hbCA6IHB1YmxpYyBSZW5kZXJCdW5kbGVFbmNvZGVyIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlbmRlckJ1bmRsZUVuY29kZXJJbXBsPiBjcmVhdGUo
V0dQVVJlbmRlckJ1bmRsZUVuY29kZXIgcmVuZGVyQnVuZGxlRW5jb2RlcikKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlbmRlckJ1bmRsZUVuY29kZXJJbXBsKHJlbmRlckJ1
bmRsZUVuY29kZXIpKTsKKyAgICB9CisKKyAgICB+UmVuZGVyQnVuZGxlRW5jb2RlckltcGwoKTsK
KworICAgIFdHUFVSZW5kZXJCdW5kbGVFbmNvZGVyIGJhY2tpbmcoKSBjb25zdCB7IHJldHVybiBt
X2JhY2tpbmc7IH0KKworcHJpdmF0ZToKKyAgICBSZW5kZXJCdW5kbGVFbmNvZGVySW1wbChXR1BV
UmVuZGVyQnVuZGxlRW5jb2Rlcik7CisKKyAgICBSZW5kZXJCdW5kbGVFbmNvZGVySW1wbChjb25z
dCBSZW5kZXJCdW5kbGVFbmNvZGVySW1wbCYpID0gZGVsZXRlOworICAgIFJlbmRlckJ1bmRsZUVu
Y29kZXJJbXBsKFJlbmRlckJ1bmRsZUVuY29kZXJJbXBsJiYpID0gZGVsZXRlOworICAgIFJlbmRl
ckJ1bmRsZUVuY29kZXJJbXBsJiBvcGVyYXRvcj0oY29uc3QgUmVuZGVyQnVuZGxlRW5jb2Rlcklt
cGwmKSA9IGRlbGV0ZTsKKyAgICBSZW5kZXJCdW5kbGVFbmNvZGVySW1wbCYgb3BlcmF0b3I9KFJl
bmRlckJ1bmRsZUVuY29kZXJJbXBsJiYpID0gZGVsZXRlOworCisgICAgdm9pZCBzZXRQaXBlbGlu
ZShjb25zdCBSZW5kZXJQaXBlbGluZSYpIGZpbmFsOworCisgICAgdm9pZCBzZXRJbmRleEJ1ZmZl
cihjb25zdCBCdWZmZXImLCBJbmRleEZvcm1hdCwgU2l6ZTY0IG9mZnNldCwgc3RkOjpvcHRpb25h
bDxTaXplNjQ+KSBmaW5hbDsKKyAgICB2b2lkIHNldFZlcnRleEJ1ZmZlcihJbmRleDMyIHNsb3Qs
IGNvbnN0IEJ1ZmZlciYsIFNpemU2NCBvZmZzZXQsIHN0ZDo6b3B0aW9uYWw8U2l6ZTY0PikgZmlu
YWw7CisKKyAgICB2b2lkIGRyYXcoU2l6ZTMyIHZlcnRleENvdW50LCBTaXplMzIgaW5zdGFuY2VD
b3VudCwKKyAgICAgICAgU2l6ZTMyIGZpcnN0VmVydGV4LCBTaXplMzIgZmlyc3RJbnN0YW5jZSkg
ZmluYWw7CisgICAgdm9pZCBkcmF3SW5kZXhlZChTaXplMzIgaW5kZXhDb3VudCwgU2l6ZTMyIGlu
c3RhbmNlQ291bnQsCisgICAgICAgIFNpemUzMiBmaXJzdEluZGV4LAorICAgICAgICBTaWduZWRP
ZmZzZXQzMiBiYXNlVmVydGV4LAorICAgICAgICBTaXplMzIgZmlyc3RJbnN0YW5jZSkgZmluYWw7
CisKKyAgICB2b2lkIGRyYXdJbmRpcmVjdChjb25zdCBCdWZmZXImIGluZGlyZWN0QnVmZmVyLCBT
aXplNjQgaW5kaXJlY3RPZmZzZXQpIGZpbmFsOworICAgIHZvaWQgZHJhd0luZGV4ZWRJbmRpcmVj
dChjb25zdCBCdWZmZXImIGluZGlyZWN0QnVmZmVyLCBTaXplNjQgaW5kaXJlY3RPZmZzZXQpIGZp
bmFsOworCisgICAgdm9pZCBzZXRCaW5kR3JvdXAoSW5kZXgzMiwgY29uc3QgQmluZEdyb3VwJiwK
KyAgICAgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8QnVmZmVyRHluYW1pY09mZnNldD4+JiYgZHlu
YW1pY09mZnNldHMpIGZpbmFsOworCisgICAgdm9pZCBzZXRCaW5kR3JvdXAoSW5kZXgzMiwgY29u
c3QgQmluZEdyb3VwJiwKKyAgICAgICAgY29uc3QgdWludDMyX3QqIGR5bmFtaWNPZmZzZXRzQXJy
YXlCdWZmZXIsCisgICAgICAgIHNpemVfdCBkeW5hbWljT2Zmc2V0c0FycmF5QnVmZmVyTGVuZ3Ro
LAorICAgICAgICBTaXplNjQgZHluYW1pY09mZnNldHNEYXRhU3RhcnQsCisgICAgICAgIFNpemUz
MiBkeW5hbWljT2Zmc2V0c0RhdGFMZW5ndGgpIGZpbmFsOworCisgICAgdm9pZCBwdXNoRGVidWdH
cm91cChTdHJpbmcmJiBncm91cExhYmVsKSBmaW5hbDsKKyAgICB2b2lkIHBvcERlYnVnR3JvdXAo
KSBmaW5hbDsKKyAgICB2b2lkIGluc2VydERlYnVnTWFya2VyKFN0cmluZyYmIG1hcmtlckxhYmVs
KSBmaW5hbDsKKworICAgIFJlZjxSZW5kZXJCdW5kbGU+IGZpbmlzaChjb25zdCBSZW5kZXJCdW5k
bGVEZXNjcmlwdG9yJikgZmluYWw7CisKKyAgICB2b2lkIHNldExhYmVsSW50ZXJuYWwoY29uc3Qg
U3RyaW5nJikgZmluYWw7CisKKyAgICBXR1BVUmVuZGVyQnVuZGxlRW5jb2RlciBtX2JhY2tpbmcg
eyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdl
YkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUv
SW1wbC9XZWJHUFVSZW5kZXJCdW5kbGVJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwv
Z3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVyQnVuZGxlSW1wbC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZWIxOGNmOWM0MTg0YzRmNGNmOGYxMWEyNTYzN2I5MWM2ODc3Njk0ZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BV
UmVuZGVyQnVuZGxlSW1wbC5jcHAKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVSZW5kZXJCdW5kbGVJbXBsLmgiCisKKyNp
bmNsdWRlIDxXZWJHUFUvV2ViR1BVRXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNl
IFdlYkdQVSB7CisKK1JlbmRlckJ1bmRsZUltcGw6OlJlbmRlckJ1bmRsZUltcGwoV0dQVVJlbmRl
ckJ1bmRsZSByZW5kZXJCdW5kbGUpCisgICAgOiBtX2JhY2tpbmcocmVuZGVyQnVuZGxlKQorewor
fQorCitSZW5kZXJCdW5kbGVJbXBsOjp+UmVuZGVyQnVuZGxlSW1wbCgpCit7CisgICAgd2dwdVJl
bmRlckJ1bmRsZVJlbGVhc2UobV9iYWNraW5nKTsKK30KKwordm9pZCBSZW5kZXJCdW5kbGVJbXBs
OjpzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYgbGFiZWwpCit7CisgICAgd2dwdVJlbmRl
ckJ1bmRsZVNldExhYmVsKG1fYmFja2luZywgbGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlckJ1bmRs
ZUltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2Vi
R1BVUmVuZGVyQnVuZGxlSW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjViZGEzNmUwODFhNzRhMzBlOWZiNGQ0
NmFjMjQwYzM1NzIyNjY0ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlckJ1bmRsZUltcGwuaApAQCAtMCww
ICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJXZWJHUFVS
ZW5kZXJCdW5kbGUuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVLmg+CisKK25hbWVzcGFjZSBQ
QUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK2NsYXNzIFJlbmRlckJ1bmRsZUltcGwgZmluYWwg
OiBwdWJsaWMgUmVuZGVyQnVuZGxlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlbmRlckJ1
bmRsZUltcGw+IGNyZWF0ZShXR1BVUmVuZGVyQnVuZGxlIHJlbmRlckJ1bmRsZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlbmRlckJ1bmRsZUltcGwocmVuZGVyQnVuZGxl
KSk7CisgICAgfQorCisgICAgdmlydHVhbCB+UmVuZGVyQnVuZGxlSW1wbCgpOworCisgICAgV0dQ
VVJlbmRlckJ1bmRsZSBiYWNraW5nKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nOyB9CisKK3By
aXZhdGU6CisgICAgUmVuZGVyQnVuZGxlSW1wbChXR1BVUmVuZGVyQnVuZGxlKTsKKworICAgIFJl
bmRlckJ1bmRsZUltcGwoY29uc3QgUmVuZGVyQnVuZGxlSW1wbCYpID0gZGVsZXRlOworICAgIFJl
bmRlckJ1bmRsZUltcGwoUmVuZGVyQnVuZGxlSW1wbCYmKSA9IGRlbGV0ZTsKKyAgICBSZW5kZXJC
dW5kbGVJbXBsJiBvcGVyYXRvcj0oY29uc3QgUmVuZGVyQnVuZGxlSW1wbCYpID0gZGVsZXRlOwor
ICAgIFJlbmRlckJ1bmRsZUltcGwmIG9wZXJhdG9yPShSZW5kZXJCdW5kbGVJbXBsJiYpID0gZGVs
ZXRlOworCisgICAgdm9pZCBzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYpIGZpbmFsOwor
CisgICAgV0dQVVJlbmRlckJ1bmRsZSBtX2JhY2tpbmcgeyBudWxscHRyIH07Cit9OworCit9IC8v
IG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJQYXNzRW5j
b2RlckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1w
bC9XZWJHUFVSZW5kZXJQYXNzRW5jb2RlckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQxNWE4NDNlYjhk
ZGEzYWM0ZmRmNjEzZGJjZjVhMjhmMTBhMjMwZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlclBhc3NFbmNv
ZGVySW1wbC5jcHAKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViR1BVUmVuZGVyUGFzc0VuY29kZXJJbXBsLmgiCisKKyNpbmNs
dWRlICJXZWJHUFVCaW5kR3JvdXBJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVQnVmZmVySW1wbC5o
IgorI2luY2x1ZGUgIldlYkdQVUNvbnZlcnRUb0JhY2tpbmcuaCIKKyNpbmNsdWRlICJXZWJHUFVR
dWVyeVNldEltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVSZW5kZXJCdW5kbGVJbXBsLmgiCisjaW5j
bHVkZSAiV2ViR1BVUmVuZGVyUGlwZWxpbmVJbXBsLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQ
VUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitSZW5kZXJQ
YXNzRW5jb2RlckltcGw6OlJlbmRlclBhc3NFbmNvZGVySW1wbChXR1BVUmVuZGVyUGFzc0VuY29k
ZXIgcmVuZGVyUGFzc0VuY29kZXIpCisgICAgOiBtX2JhY2tpbmcocmVuZGVyUGFzc0VuY29kZXIp
Cit7Cit9CisKK1JlbmRlclBhc3NFbmNvZGVySW1wbDo6flJlbmRlclBhc3NFbmNvZGVySW1wbCgp
Cit7CisgICAgd2dwdVJlbmRlclBhc3NFbmNvZGVyUmVsZWFzZShtX2JhY2tpbmcpOworfQorCit2
b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6c2V0UGlwZWxpbmUoY29uc3QgUmVuZGVyUGlwZWxp
bmUmIHJlbmRlclBpcGVsaW5lKQoreworICAgIHdncHVSZW5kZXJQYXNzRW5jb2RlclNldFBpcGVs
aW5lKG1fYmFja2luZywgc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyUGlwZWxpbmVJbXBsJj4ocmVu
ZGVyUGlwZWxpbmUpLmJhY2tpbmcoKSk7Cit9CisKK3ZvaWQgUmVuZGVyUGFzc0VuY29kZXJJbXBs
OjpzZXRJbmRleEJ1ZmZlcihjb25zdCBCdWZmZXImIGJ1ZmZlciwgSW5kZXhGb3JtYXQgaW5kZXhG
b3JtYXQsIFNpemU2NCBvZmZzZXQsIHN0ZDo6b3B0aW9uYWw8U2l6ZTY0PiBzaXplKQoreworICAg
IHdncHVSZW5kZXJQYXNzRW5jb2RlclNldEluZGV4QnVmZmVyKG1fYmFja2luZywgc3RhdGljX2Nh
c3Q8Y29uc3QgQnVmZmVySW1wbCY+KGJ1ZmZlcikuYmFja2luZygpLCBjb252ZXJ0VG9CYWNraW5n
KGluZGV4Rm9ybWF0KSwgb2Zmc2V0LCBzaXplLnZhbHVlX29yKFdHUFVfV0hPTEVfU0laRSkpOwor
fQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6c2V0VmVydGV4QnVmZmVyKEluZGV4MzIg
c2xvdCwgY29uc3QgQnVmZmVyJiBidWZmZXIsIFNpemU2NCBvZmZzZXQsIHN0ZDo6b3B0aW9uYWw8
U2l6ZTY0PiBzaXplKQoreworICAgIHdncHVSZW5kZXJQYXNzRW5jb2RlclNldFZlcnRleEJ1ZmZl
cihtX2JhY2tpbmcsIHNsb3QsIHN0YXRpY19jYXN0PGNvbnN0IEJ1ZmZlckltcGwmPihidWZmZXIp
LmJhY2tpbmcoKSwgb2Zmc2V0LCBzaXplLnZhbHVlX29yKFdHUFVfV0hPTEVfU0laRSkpOworfQor
Cit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6ZHJhdyhTaXplMzIgdmVydGV4Q291bnQsIFNp
emUzMiBpbnN0YW5jZUNvdW50LAorICAgIFNpemUzMiBmaXJzdFZlcnRleCwgU2l6ZTMyIGZpcnN0
SW5zdGFuY2UpCit7CisgICAgd2dwdVJlbmRlclBhc3NFbmNvZGVyRHJhdyhtX2JhY2tpbmcsIHZl
cnRleENvdW50LCBpbnN0YW5jZUNvdW50LCBmaXJzdFZlcnRleCwgZmlyc3RJbnN0YW5jZSk7Cit9
CisKK3ZvaWQgUmVuZGVyUGFzc0VuY29kZXJJbXBsOjpkcmF3SW5kZXhlZChTaXplMzIgaW5kZXhD
b3VudCwgU2l6ZTMyIGluc3RhbmNlQ291bnQsCisgICAgU2l6ZTMyIGZpcnN0SW5kZXgsCisgICAg
U2lnbmVkT2Zmc2V0MzIgYmFzZVZlcnRleCwKKyAgICBTaXplMzIgZmlyc3RJbnN0YW5jZSkKK3sK
KyAgICB3Z3B1UmVuZGVyUGFzc0VuY29kZXJEcmF3SW5kZXhlZChtX2JhY2tpbmcsIGluZGV4Q291
bnQsIGluc3RhbmNlQ291bnQsIGZpcnN0SW5kZXgsIGJhc2VWZXJ0ZXgsIGZpcnN0SW5zdGFuY2Up
OworfQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6ZHJhd0luZGlyZWN0KGNvbnN0IEJ1
ZmZlciYgaW5kaXJlY3RCdWZmZXIsIFNpemU2NCBpbmRpcmVjdE9mZnNldCkKK3sKKyAgICB3Z3B1
UmVuZGVyUGFzc0VuY29kZXJEcmF3SW5kaXJlY3QobV9iYWNraW5nLCBzdGF0aWNfY2FzdDxjb25z
dCBCdWZmZXJJbXBsJj4oaW5kaXJlY3RCdWZmZXIpLmJhY2tpbmcoKSwgaW5kaXJlY3RPZmZzZXQp
OworfQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6ZHJhd0luZGV4ZWRJbmRpcmVjdChj
b25zdCBCdWZmZXImIGluZGlyZWN0QnVmZmVyLCBTaXplNjQgaW5kaXJlY3RPZmZzZXQpCit7Cisg
ICAgd2dwdVJlbmRlclBhc3NFbmNvZGVyRHJhd0luZGV4ZWRJbmRpcmVjdChtX2JhY2tpbmcsIHN0
YXRpY19jYXN0PGNvbnN0IEJ1ZmZlckltcGwmPihpbmRpcmVjdEJ1ZmZlcikuYmFja2luZygpLCBp
bmRpcmVjdE9mZnNldCk7Cit9CisKK3ZvaWQgUmVuZGVyUGFzc0VuY29kZXJJbXBsOjpzZXRCaW5k
R3JvdXAoSW5kZXgzMiBpbmRleCwgY29uc3QgQmluZEdyb3VwJiBiaW5kR3JvdXAsCisgICAgc3Rk
OjpvcHRpb25hbDxWZWN0b3I8QnVmZmVyRHluYW1pY09mZnNldD4+JiYgZHluYW1pY09mZnNldHMp
Cit7CisgICAgYXV0byBiYWNraW5nT2Zmc2V0cyA9IGR5bmFtaWNPZmZzZXRzLnZhbHVlX29yKFZl
Y3RvcjxCdWZmZXJEeW5hbWljT2Zmc2V0PiB7IH0pOworICAgIHdncHVSZW5kZXJQYXNzRW5jb2Rl
clNldEJpbmRHcm91cChtX2JhY2tpbmcsIGluZGV4LCBzdGF0aWNfY2FzdDxjb25zdCBCaW5kR3Jv
dXBJbXBsJj4oYmluZEdyb3VwKS5iYWNraW5nKCksIGJhY2tpbmdPZmZzZXRzLnNpemUoKSwgYmFj
a2luZ09mZnNldHMuZGF0YSgpKTsKK30KKwordm9pZCBSZW5kZXJQYXNzRW5jb2RlckltcGw6OnNl
dEJpbmRHcm91cChJbmRleDMyIGluZGV4LCBjb25zdCBCaW5kR3JvdXAmIGJpbmRHcm91cCwKKyAg
ICBjb25zdCB1aW50MzJfdCogZHluYW1pY09mZnNldHNBcnJheUJ1ZmZlciwKKyAgICBzaXplX3Qg
ZHluYW1pY09mZnNldHNBcnJheUJ1ZmZlckxlbmd0aCwKKyAgICBTaXplNjQgZHluYW1pY09mZnNl
dHNEYXRhU3RhcnQsCisgICAgU2l6ZTMyIGR5bmFtaWNPZmZzZXRzRGF0YUxlbmd0aCkKK3sKKyAg
ICBVTlVTRURfUEFSQU0oZHluYW1pY09mZnNldHNBcnJheUJ1ZmZlckxlbmd0aCk7CisgICAgLy8g
RklYTUU6IFVzZSBjaGVja2VkIGFsZ2VicmEuCisgICAgd2dwdVJlbmRlclBhc3NFbmNvZGVyU2V0
QmluZEdyb3VwKG1fYmFja2luZywgaW5kZXgsIHN0YXRpY19jYXN0PGNvbnN0IEJpbmRHcm91cElt
cGwmPihiaW5kR3JvdXApLmJhY2tpbmcoKSwgZHluYW1pY09mZnNldHNEYXRhTGVuZ3RoLCBkeW5h
bWljT2Zmc2V0c0FycmF5QnVmZmVyICsgZHluYW1pY09mZnNldHNEYXRhU3RhcnQpOworfQorCit2
b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6cHVzaERlYnVnR3JvdXAoU3RyaW5nJiYgZ3JvdXBM
YWJlbCkKK3sKKyAgICB3Z3B1UmVuZGVyUGFzc0VuY29kZXJQdXNoRGVidWdHcm91cChtX2JhY2tp
bmcsIGdyb3VwTGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgUmVuZGVyUGFzc0VuY29k
ZXJJbXBsOjpwb3BEZWJ1Z0dyb3VwKCkKK3sKKyAgICB3Z3B1UmVuZGVyUGFzc0VuY29kZXJQb3BE
ZWJ1Z0dyb3VwKG1fYmFja2luZyk7Cit9CisKK3ZvaWQgUmVuZGVyUGFzc0VuY29kZXJJbXBsOjpp
bnNlcnREZWJ1Z01hcmtlcihTdHJpbmcmJiBtYXJrZXJMYWJlbCkKK3sKKyAgICB3Z3B1UmVuZGVy
UGFzc0VuY29kZXJJbnNlcnREZWJ1Z01hcmtlcihtX2JhY2tpbmcsIG1hcmtlckxhYmVsLnV0Zjgo
KS5kYXRhKCkpOworfQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6c2V0Vmlld3BvcnQo
ZmxvYXQgeCwgZmxvYXQgeSwKKyAgICBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LAorICAgIGZs
b2F0IG1pbkRlcHRoLCBmbG9hdCBtYXhEZXB0aCkKK3sKKyAgICB3Z3B1UmVuZGVyUGFzc0VuY29k
ZXJTZXRWaWV3cG9ydChtX2JhY2tpbmcsIHgsIHksIHdpZHRoLCBoZWlnaHQsIG1pbkRlcHRoLCBt
YXhEZXB0aCk7Cit9CisKK3ZvaWQgUmVuZGVyUGFzc0VuY29kZXJJbXBsOjpzZXRTY2lzc29yUmVj
dChJbnRlZ2VyQ29vcmRpbmF0ZSB4LCBJbnRlZ2VyQ29vcmRpbmF0ZSB5LAorICAgIEludGVnZXJD
b29yZGluYXRlIHdpZHRoLCBJbnRlZ2VyQ29vcmRpbmF0ZSBoZWlnaHQpCit7CisgICAgd2dwdVJl
bmRlclBhc3NFbmNvZGVyU2V0U2Npc3NvclJlY3QobV9iYWNraW5nLCB4LCB5LCB3aWR0aCwgaGVp
Z2h0KTsKK30KKwordm9pZCBSZW5kZXJQYXNzRW5jb2RlckltcGw6OnNldEJsZW5kQ29uc3RhbnQo
Q29sb3IgY29sb3IpCit7CisgICAgYXV0byBiYWNraW5nQ29sb3IgPSBjb252ZXJ0VG9CYWNraW5n
KGNvbG9yKTsKKworICAgIHdncHVSZW5kZXJQYXNzRW5jb2RlclNldEJsZW5kQ29uc3RhbnQobV9i
YWNraW5nLCAmYmFja2luZ0NvbG9yKTsKK30KKwordm9pZCBSZW5kZXJQYXNzRW5jb2RlckltcGw6
OnNldFN0ZW5jaWxSZWZlcmVuY2UoU3RlbmNpbFZhbHVlIHN0ZW5jaWxWYWx1ZSkKK3sKKyAgICB3
Z3B1UmVuZGVyUGFzc0VuY29kZXJTZXRTdGVuY2lsUmVmZXJlbmNlKG1fYmFja2luZywgc3RlbmNp
bFZhbHVlKTsKK30KKwordm9pZCBSZW5kZXJQYXNzRW5jb2RlckltcGw6OmJlZ2luT2NjbHVzaW9u
UXVlcnkoU2l6ZTMyIHF1ZXJ5SW5kZXgpCit7CisgICAgd2dwdVJlbmRlclBhc3NFbmNvZGVyQmVn
aW5PY2NsdXNpb25RdWVyeShtX2JhY2tpbmcsIHF1ZXJ5SW5kZXgpOworfQorCit2b2lkIFJlbmRl
clBhc3NFbmNvZGVySW1wbDo6ZW5kT2NjbHVzaW9uUXVlcnkoKQoreworICAgIHdncHVSZW5kZXJQ
YXNzRW5jb2RlckVuZE9jY2x1c2lvblF1ZXJ5KG1fYmFja2luZyk7Cit9CisKK3ZvaWQgUmVuZGVy
UGFzc0VuY29kZXJJbXBsOjpiZWdpblBpcGVsaW5lU3RhdGlzdGljc1F1ZXJ5KGNvbnN0IFF1ZXJ5
U2V0JiBxdWVyeVNldCwgU2l6ZTMyIHF1ZXJ5SW5kZXgpCit7CisgICAgd2dwdVJlbmRlclBhc3NF
bmNvZGVyQmVnaW5QaXBlbGluZVN0YXRpc3RpY3NRdWVyeShtX2JhY2tpbmcsIHN0YXRpY19jYXN0
PGNvbnN0IFF1ZXJ5U2V0SW1wbCY+KHF1ZXJ5U2V0KS5iYWNraW5nKCksIHF1ZXJ5SW5kZXgpOwor
fQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6ZW5kUGlwZWxpbmVTdGF0aXN0aWNzUXVl
cnkoKQoreworICAgIHdncHVSZW5kZXJQYXNzRW5jb2RlckVuZFBpcGVsaW5lU3RhdGlzdGljc1F1
ZXJ5KG1fYmFja2luZyk7Cit9CisKK3ZvaWQgUmVuZGVyUGFzc0VuY29kZXJJbXBsOjpleGVjdXRl
QnVuZGxlcyhWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZW5kZXJCdW5kbGU+PiYmIHJl
bmRlckJ1bmRsZXMpCit7CisgICAgVmVjdG9yPFdHUFVSZW5kZXJCdW5kbGU+IGJhY2tpbmdCdW5k
bGVzOworICAgIGJhY2tpbmdCdW5kbGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocmVuZGVyQnVu
ZGxlcy5zaXplKCkpOworICAgIGZvciAoYXV0byByZW5kZXJCdW5kbGUgOiByZW5kZXJCdW5kbGVz
KQorICAgICAgICBiYWNraW5nQnVuZGxlcy51bmNoZWNrZWRBcHBlbmQoc3RhdGljX2Nhc3Q8Y29u
c3QgUmVuZGVyQnVuZGxlSW1wbCY+KHJlbmRlckJ1bmRsZS5nZXQoKSkuYmFja2luZygpKTsKKwor
ICAgIHdncHVSZW5kZXJQYXNzRW5jb2RlckV4ZWN1dGVCdW5kbGVzKG1fYmFja2luZywgYmFja2lu
Z0J1bmRsZXMuc2l6ZSgpLCBiYWNraW5nQnVuZGxlcy5kYXRhKCkpOworfQorCit2b2lkIFJlbmRl
clBhc3NFbmNvZGVySW1wbDo6ZW5kUGFzcygpCit7CisgICAgd2dwdVJlbmRlclBhc3NFbmNvZGVy
RW5kUGFzcyhtX2JhY2tpbmcpOworfQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6c2V0
TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAgIHdncHVSZW5kZXJQYXNz
RW5jb2RlclNldExhYmVsKG1fYmFja2luZywgbGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlclBhc3NF
bmNvZGVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1w
bC9XZWJHUFVSZW5kZXJQYXNzRW5jb2RlckltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YmFmMWFlOGM5NzU3
ZmUxMjM5MTA4ZTg4NDMxYzQ5Njg1YTVlNzEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJQYXNzRW5jb2Rl
ckltcGwuaApAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiV2ViR1BVUmVuZGVyUGFzc0VuY29kZXIuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2Vi
R1BVLmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK2NsYXNzIFJl
bmRlclBhc3NFbmNvZGVySW1wbCBmaW5hbCA6IHB1YmxpYyBSZW5kZXJQYXNzRW5jb2RlciB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZjxSZW5kZXJQYXNzRW5jb2RlckltcGw+IGNyZWF0ZShXR1BV
UmVuZGVyUGFzc0VuY29kZXIgcmVuZGVyUGFzc0VuY29kZXIpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBSZW5kZXJQYXNzRW5jb2RlckltcGwocmVuZGVyUGFzc0VuY29kZXIp
KTsKKyAgICB9CisKKyAgICB+UmVuZGVyUGFzc0VuY29kZXJJbXBsKCk7CisKKyAgICBXR1BVUmVu
ZGVyUGFzc0VuY29kZXIgYmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitw
cml2YXRlOgorICAgIFJlbmRlclBhc3NFbmNvZGVySW1wbChXR1BVUmVuZGVyUGFzc0VuY29kZXIp
OworCisgICAgUmVuZGVyUGFzc0VuY29kZXJJbXBsKGNvbnN0IFJlbmRlclBhc3NFbmNvZGVySW1w
bCYpID0gZGVsZXRlOworICAgIFJlbmRlclBhc3NFbmNvZGVySW1wbChSZW5kZXJQYXNzRW5jb2Rl
ckltcGwmJikgPSBkZWxldGU7CisgICAgUmVuZGVyUGFzc0VuY29kZXJJbXBsJiBvcGVyYXRvcj0o
Y29uc3QgUmVuZGVyUGFzc0VuY29kZXJJbXBsJikgPSBkZWxldGU7CisgICAgUmVuZGVyUGFzc0Vu
Y29kZXJJbXBsJiBvcGVyYXRvcj0oUmVuZGVyUGFzc0VuY29kZXJJbXBsJiYpID0gZGVsZXRlOwor
CisgICAgdm9pZCBzZXRQaXBlbGluZShjb25zdCBSZW5kZXJQaXBlbGluZSYpIGZpbmFsOworCisg
ICAgdm9pZCBzZXRJbmRleEJ1ZmZlcihjb25zdCBCdWZmZXImLCBJbmRleEZvcm1hdCwgU2l6ZTY0
IG9mZnNldCwgc3RkOjpvcHRpb25hbDxTaXplNjQ+KSBmaW5hbDsKKyAgICB2b2lkIHNldFZlcnRl
eEJ1ZmZlcihJbmRleDMyIHNsb3QsIGNvbnN0IEJ1ZmZlciYsIFNpemU2NCBvZmZzZXQsIHN0ZDo6
b3B0aW9uYWw8U2l6ZTY0PikgZmluYWw7CisKKyAgICB2b2lkIGRyYXcoU2l6ZTMyIHZlcnRleENv
dW50LCBTaXplMzIgaW5zdGFuY2VDb3VudCwKKyAgICAgICAgU2l6ZTMyIGZpcnN0VmVydGV4LCBT
aXplMzIgZmlyc3RJbnN0YW5jZSkgZmluYWw7CisgICAgdm9pZCBkcmF3SW5kZXhlZChTaXplMzIg
aW5kZXhDb3VudCwgU2l6ZTMyIGluc3RhbmNlQ291bnQsCisgICAgICAgIFNpemUzMiBmaXJzdElu
ZGV4LAorICAgICAgICBTaWduZWRPZmZzZXQzMiBiYXNlVmVydGV4LAorICAgICAgICBTaXplMzIg
Zmlyc3RJbnN0YW5jZSkgZmluYWw7CisKKyAgICB2b2lkIGRyYXdJbmRpcmVjdChjb25zdCBCdWZm
ZXImIGluZGlyZWN0QnVmZmVyLCBTaXplNjQgaW5kaXJlY3RPZmZzZXQpIGZpbmFsOworICAgIHZv
aWQgZHJhd0luZGV4ZWRJbmRpcmVjdChjb25zdCBCdWZmZXImIGluZGlyZWN0QnVmZmVyLCBTaXpl
NjQgaW5kaXJlY3RPZmZzZXQpIGZpbmFsOworCisgICAgdm9pZCBzZXRCaW5kR3JvdXAoSW5kZXgz
MiwgY29uc3QgQmluZEdyb3VwJiwKKyAgICAgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8QnVmZmVy
RHluYW1pY09mZnNldD4+JiYgZHluYW1pY09mZnNldHMpIGZpbmFsOworCisgICAgdm9pZCBzZXRC
aW5kR3JvdXAoSW5kZXgzMiwgY29uc3QgQmluZEdyb3VwJiwKKyAgICAgICAgY29uc3QgdWludDMy
X3QqIGR5bmFtaWNPZmZzZXRzQXJyYXlCdWZmZXIsCisgICAgICAgIHNpemVfdCBkeW5hbWljT2Zm
c2V0c0FycmF5QnVmZmVyTGVuZ3RoLAorICAgICAgICBTaXplNjQgZHluYW1pY09mZnNldHNEYXRh
U3RhcnQsCisgICAgICAgIFNpemUzMiBkeW5hbWljT2Zmc2V0c0RhdGFMZW5ndGgpIGZpbmFsOwor
CisgICAgdm9pZCBwdXNoRGVidWdHcm91cChTdHJpbmcmJiBncm91cExhYmVsKSBmaW5hbDsKKyAg
ICB2b2lkIHBvcERlYnVnR3JvdXAoKSBmaW5hbDsKKyAgICB2b2lkIGluc2VydERlYnVnTWFya2Vy
KFN0cmluZyYmIG1hcmtlckxhYmVsKSBmaW5hbDsKKworICAgIHZvaWQgc2V0Vmlld3BvcnQoZmxv
YXQgeCwgZmxvYXQgeSwKKyAgICAgICAgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwKKyAgICAg
ICAgZmxvYXQgbWluRGVwdGgsIGZsb2F0IG1heERlcHRoKSBmaW5hbDsKKworICAgIHZvaWQgc2V0
U2Npc3NvclJlY3QoSW50ZWdlckNvb3JkaW5hdGUgeCwgSW50ZWdlckNvb3JkaW5hdGUgeSwKKyAg
ICAgICAgSW50ZWdlckNvb3JkaW5hdGUgd2lkdGgsIEludGVnZXJDb29yZGluYXRlIGhlaWdodCkg
ZmluYWw7CisKKyAgICB2b2lkIHNldEJsZW5kQ29uc3RhbnQoQ29sb3IpIGZpbmFsOworICAgIHZv
aWQgc2V0U3RlbmNpbFJlZmVyZW5jZShTdGVuY2lsVmFsdWUpIGZpbmFsOworCisgICAgdm9pZCBi
ZWdpbk9jY2x1c2lvblF1ZXJ5KFNpemUzMiBxdWVyeUluZGV4KSBmaW5hbDsKKyAgICB2b2lkIGVu
ZE9jY2x1c2lvblF1ZXJ5KCkgZmluYWw7CisKKyAgICB2b2lkIGJlZ2luUGlwZWxpbmVTdGF0aXN0
aWNzUXVlcnkoY29uc3QgUXVlcnlTZXQmLCBTaXplMzIgcXVlcnlJbmRleCkgZmluYWw7CisgICAg
dm9pZCBlbmRQaXBlbGluZVN0YXRpc3RpY3NRdWVyeSgpIGZpbmFsOworCisgICAgdm9pZCBleGVj
dXRlQnVuZGxlcyhWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZW5kZXJCdW5kbGU+PiYm
KSBmaW5hbDsKKyAgICB2b2lkIGVuZFBhc3MoKSBmaW5hbDsKKworICAgIHZvaWQgc2V0TGFiZWxJ
bnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5hbDsKKworICAgIFdHUFVSZW5kZXJQYXNzRW5jb2Rl
ciBtX2JhY2tpbmcgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8g
bmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJQaXBlbGluZUltcGwuY3BwIGIvU291cmNlL1dl
YkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJQaXBlbGluZUlt
cGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmRjMGRkM2VhMTJhODk5OWM0MmU2M2FiYjM2MjAzMmZjM2MxN2Ux
NzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dl
YkdQVS9JbXBsL1dlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5jcHAKQEAgLTAsMCArMSw1NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVSZW5kZXJQ
aXBlbGluZUltcGwuaCIKKworI2luY2x1ZGUgIldlYkdQVUJpbmRHcm91cExheW91dEltcGwuaCIK
KyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVRXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNw
YWNlIFdlYkdQVSB7CisKK1JlbmRlclBpcGVsaW5lSW1wbDo6UmVuZGVyUGlwZWxpbmVJbXBsKFdH
UFVSZW5kZXJQaXBlbGluZSByZW5kZXJQaXBlbGluZSkKKyAgICA6IG1fYmFja2luZyhyZW5kZXJQ
aXBlbGluZSkKK3sKK30KKworUmVuZGVyUGlwZWxpbmVJbXBsOjp+UmVuZGVyUGlwZWxpbmVJbXBs
KCkKK3sKKyAgICB3Z3B1UmVuZGVyUGlwZWxpbmVSZWxlYXNlKG1fYmFja2luZyk7Cit9CisKK1Jl
ZjxCaW5kR3JvdXBMYXlvdXQ+IFJlbmRlclBpcGVsaW5lSW1wbDo6Z2V0QmluZEdyb3VwTGF5b3V0
KHVpbnQzMl90IGluZGV4KQoreworICAgIHJldHVybiBCaW5kR3JvdXBMYXlvdXRJbXBsOjpjcmVh
dGUod2dwdVJlbmRlclBpcGVsaW5lR2V0QmluZEdyb3VwTGF5b3V0KG1fYmFja2luZywgaW5kZXgp
KTsKK30KKwordm9pZCBSZW5kZXJQaXBlbGluZUltcGw6OnNldExhYmVsSW50ZXJuYWwoY29uc3Qg
U3RyaW5nJiBsYWJlbCkKK3sKKyAgICB3Z3B1UmVuZGVyUGlwZWxpbmVTZXRMYWJlbChtX2JhY2tp
bmcsIGxhYmVsLnV0ZjgoKS5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8g
bmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJQaXBlbGluZUltcGwuaCBiL1NvdXJjZS9XZWJD
b3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVyUGlwZWxpbmVJbXBs
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOWVhZTU3YTY5ZmIxMjU3ZDM2NzIyMDVjZjc5MTk2YTlhNWEwYmZlYQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BV
L0ltcGwvV2ViR1BVUmVuZGVyUGlwZWxpbmVJbXBsLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVUmVuZGVyUGlwZWxpbmUuaCIK
KyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVLmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNl
IFdlYkdQVSB7CisKK2NsYXNzIFJlbmRlclBpcGVsaW5lSW1wbCBmaW5hbCA6IHB1YmxpYyBSZW5k
ZXJQaXBlbGluZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZW5kZXJQaXBlbGluZUltcGw+
IGNyZWF0ZShXR1BVUmVuZGVyUGlwZWxpbmUgcmVuZGVyUGlwZWxpbmUpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZW5kZXJQaXBlbGluZUltcGwocmVuZGVyUGlwZWxpbmUp
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5SZW5kZXJQaXBlbGluZUltcGwoKTsKKworICAgIFdH
UFVSZW5kZXJQaXBlbGluZSBiYWNraW5nKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nOyB9CisK
K3ByaXZhdGU6CisgICAgUmVuZGVyUGlwZWxpbmVJbXBsKFdHUFVSZW5kZXJQaXBlbGluZSk7CisK
KyAgICBSZW5kZXJQaXBlbGluZUltcGwoY29uc3QgUmVuZGVyUGlwZWxpbmVJbXBsJikgPSBkZWxl
dGU7CisgICAgUmVuZGVyUGlwZWxpbmVJbXBsKFJlbmRlclBpcGVsaW5lSW1wbCYmKSA9IGRlbGV0
ZTsKKyAgICBSZW5kZXJQaXBlbGluZUltcGwmIG9wZXJhdG9yPShjb25zdCBSZW5kZXJQaXBlbGlu
ZUltcGwmKSA9IGRlbGV0ZTsKKyAgICBSZW5kZXJQaXBlbGluZUltcGwmIG9wZXJhdG9yPShSZW5k
ZXJQaXBlbGluZUltcGwmJikgPSBkZWxldGU7CisKKyAgICBSZWY8QmluZEdyb3VwTGF5b3V0PiBn
ZXRCaW5kR3JvdXBMYXlvdXQodWludDMyX3QgaW5kZXgpIGZpbmFsOworCisgICAgdm9pZCBzZXRM
YWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYpIGZpbmFsOworCisgICAgV0dQVVJlbmRlclBpcGVs
aW5lIG1fYmFja2luZyB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAv
LyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dy
YXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVNhbXBsZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVU2FtcGxlckltcGwuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjkyY2FhNzNhNTdmMDAzMjhiOTI2ZmMwMWMwMDkwMmRlYzFjMDhhNGIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dl
YkdQVVNhbXBsZXJJbXBsLmNwcApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkdQVVNhbXBsZXJJbXBsLmgiCisKKyNpbmNsdWRl
IDxXZWJHUFUvV2ViR1BVRXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQ
VSB7CisKK1NhbXBsZXJJbXBsOjpTYW1wbGVySW1wbChXR1BVU2FtcGxlciBzYW1wbGVyKQorICAg
IDogbV9iYWNraW5nKHNhbXBsZXIpCit7Cit9CisKK1NhbXBsZXJJbXBsOjp+U2FtcGxlckltcGwo
KQoreworICAgIHdncHVTYW1wbGVyUmVsZWFzZShtX2JhY2tpbmcpOworfQorCit2b2lkIFNhbXBs
ZXJJbXBsOjpzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYgbGFiZWwpCit7CisgICAgd2dw
dVNhbXBsZXJTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVsLnV0ZjgoKS5kYXRhKCkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVTYW1wbGVySW1w
bC5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVT
YW1wbGVySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ1MmRjNDcyMDg3NGY0ZjU2YmRlNGE1ZjgzY2MzYWJm
ZjVjMmJiZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBo
aWNzL1dlYkdQVS9JbXBsL1dlYkdQVVNhbXBsZXJJbXBsLmgKQEAgLTAsMCArMSw1OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVU2FtcGxlci5oIgorI2lu
Y2x1ZGUgPFdlYkdQVS9XZWJHUFUuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2Vi
R1BVIHsKKworY2xhc3MgU2FtcGxlckltcGwgZmluYWwgOiBwdWJsaWMgU2FtcGxlciB7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZjxTYW1wbGVySW1wbD4gY3JlYXRlKFdHUFVTYW1wbGVyIHNhbXBs
ZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTYW1wbGVySW1wbChzYW1w
bGVyKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+U2FtcGxlckltcGwoKTsKKworICAgIFdHUFVT
YW1wbGVyIGJhY2tpbmcoKSBjb25zdCB7IHJldHVybiBtX2JhY2tpbmc7IH0KKworcHJpdmF0ZToK
KyAgICBTYW1wbGVySW1wbChXR1BVU2FtcGxlcik7CisKKyAgICBTYW1wbGVySW1wbChjb25zdCBT
YW1wbGVySW1wbCYpID0gZGVsZXRlOworICAgIFNhbXBsZXJJbXBsKFNhbXBsZXJJbXBsJiYpID0g
ZGVsZXRlOworICAgIFNhbXBsZXJJbXBsJiBvcGVyYXRvcj0oY29uc3QgU2FtcGxlckltcGwmKSA9
IGRlbGV0ZTsKKyAgICBTYW1wbGVySW1wbCYgb3BlcmF0b3I9KFNhbXBsZXJJbXBsJiYpID0gZGVs
ZXRlOworCisgICAgdm9pZCBzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYpIGZpbmFsOwor
CisgICAgV0dQVVNhbXBsZXIgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1l
c3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVU2hhZGVyTW9kdWxlSW1wbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVNo
YWRlck1vZHVsZUltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxYjU2OTU1NDBlN2Q0ZWZlNGFkMGNlMjE5
NDEzNzk2NmQ0MmUwNWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVNoYWRlck1vZHVsZUltcGwuY3BwCkBAIC0wLDAg
KzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
R1BVU2hhZGVyTW9kdWxlSW1wbC5oIgorCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVUV4dC5oPgor
CituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitTaGFkZXJNb2R1bGVJbXBs
OjpTaGFkZXJNb2R1bGVJbXBsKFdHUFVTaGFkZXJNb2R1bGUgc2hhZGVyTW9kdWxlKQorICAgIDog
bV9iYWNraW5nKHNoYWRlck1vZHVsZSkKK3sKK30KKworU2hhZGVyTW9kdWxlSW1wbDo6flNoYWRl
ck1vZHVsZUltcGwoKQoreworICAgIHdncHVTaGFkZXJNb2R1bGVSZWxlYXNlKG1fYmFja2luZyk7
Cit9CisKK3ZvaWQgU2hhZGVyTW9kdWxlSW1wbDo6Y29tcGlsYXRpb25JbmZvKHN0ZDo6ZnVuY3Rp
b248dm9pZChSZWY8Q29tcGlsYXRpb25JbmZvPiYmKT4mJikKK3sKK30KKwordm9pZCBTaGFkZXJN
b2R1bGVJbXBsOjpzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYgbGFiZWwpCit7CisgICAg
d2dwdVNoYWRlck1vZHVsZVNldExhYmVsKG1fYmFja2luZywgbGFiZWwudXRmOCgpLmRhdGEoKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVNo
YWRlck1vZHVsZUltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BV
L0ltcGwvV2ViR1BVU2hhZGVyTW9kdWxlSW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFjZWYzNjM5MWQwMmU0
MGJkZGU2ZTk0ZjA5MTM5MWZhZTQxY2EzM2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVNoYWRlck1vZHVsZUltcGwu
aApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJXZWJHUFVTaGFkZXJNb2R1bGUuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVLmg+CisKK25h
bWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK2NsYXNzIFNoYWRlck1vZHVsZUlt
cGwgZmluYWwgOiBwdWJsaWMgU2hhZGVyTW9kdWxlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PFNoYWRlck1vZHVsZUltcGw+IGNyZWF0ZShXR1BVU2hhZGVyTW9kdWxlIHNoYWRlck1vZHVsZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNoYWRlck1vZHVsZUltcGwoc2hh
ZGVyTW9kdWxlKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+U2hhZGVyTW9kdWxlSW1wbCgpOwor
CisgICAgV0dQVVNoYWRlck1vZHVsZSBiYWNraW5nKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5n
OyB9CisKK3ByaXZhdGU6CisgICAgU2hhZGVyTW9kdWxlSW1wbChXR1BVU2hhZGVyTW9kdWxlKTsK
KworICAgIFNoYWRlck1vZHVsZUltcGwoY29uc3QgU2hhZGVyTW9kdWxlSW1wbCYpID0gZGVsZXRl
OworICAgIFNoYWRlck1vZHVsZUltcGwoU2hhZGVyTW9kdWxlSW1wbCYmKSA9IGRlbGV0ZTsKKyAg
ICBTaGFkZXJNb2R1bGVJbXBsJiBvcGVyYXRvcj0oY29uc3QgU2hhZGVyTW9kdWxlSW1wbCYpID0g
ZGVsZXRlOworICAgIFNoYWRlck1vZHVsZUltcGwmIG9wZXJhdG9yPShTaGFkZXJNb2R1bGVJbXBs
JiYpID0gZGVsZXRlOworCisgICAgdm9pZCBjb21waWxhdGlvbkluZm8oc3RkOjpmdW5jdGlvbjx2
b2lkKFJlZjxDb21waWxhdGlvbkluZm8+JiYpPiYmKSBmaW5hbDsKKworICAgIHZvaWQgc2V0TGFi
ZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5hbDsKKworICAgIFdHUFVTaGFkZXJNb2R1bGUg
bV9iYWNraW5nIHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5h
bWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhp
Y3MvV2ViR1BVL0ltcGwvV2ViR1BVVGV4dHVyZUltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvUEFM
L3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVUZXh0dXJlSW1wbC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYmI2ZjgyMWQ5NDNiZDY0NGI3Yjc5MDIxNjgxZjE2MDc0M2E1MDU4MQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BV
VGV4dHVyZUltcGwuY3BwCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViR1BVVGV4dHVyZUltcGwuaCIKKworI2luY2x1ZGUgIldl
YkdQVUNvbnZlcnRUb0JhY2tpbmcuaCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJlVmlldy5oIgor
I2luY2x1ZGUgIldlYkdQVVRleHR1cmVWaWV3RGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIldlYkdQ
VVRleHR1cmVWaWV3SW1wbC5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFVFeHQuaD4KKworbmFt
ZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworVGV4dHVyZUltcGw6OlRleHR1cmVJ
bXBsKFdHUFVUZXh0dXJlIHRleHR1cmUsIFRleHR1cmVGb3JtYXQgZm9ybWF0LCBUZXh0dXJlRGlt
ZW5zaW9uIGRpbWVuc2lvbikKKyAgICA6IG1fYmFja2luZyh0ZXh0dXJlKQorICAgICwgbV9mb3Jt
YXQoZm9ybWF0KQorICAgICwgbV9kaW1lbnNpb24oZGltZW5zaW9uKQoreworfQorCitUZXh0dXJl
SW1wbDo6flRleHR1cmVJbXBsKCkKK3sKKyAgICB3Z3B1VGV4dHVyZVJlbGVhc2UobV9iYWNraW5n
KTsKK30KKworUmVmPFRleHR1cmVWaWV3PiBUZXh0dXJlSW1wbDo6Y3JlYXRlVmlldyhjb25zdCBz
dGQ6Om9wdGlvbmFsPFRleHR1cmVWaWV3RGVzY3JpcHRvcj4mIGRlc2NyaXB0b3IpIGNvbnN0Cit7
CisgICAgQ1N0cmluZyBsYWJlbCA9IGRlc2NyaXB0b3IgPyBkZXNjcmlwdG9yLT5sYWJlbC51dGY4
KCkgOiBDU3RyaW5nKCIiKTsKKworICAgIFdHUFVUZXh0dXJlVmlld0Rlc2NyaXB0b3IgYmFja2lu
Z0Rlc2NyaXB0b3IgeworICAgICAgICBudWxscHRyLAorICAgICAgICBsYWJlbC5kYXRhKCksCisg
ICAgICAgIGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci0+Zm9ybWF0ID8gY29udmVydFRvQmFja2lu
ZygqZGVzY3JpcHRvci0+Zm9ybWF0KSA6IGNvbnZlcnRUb0JhY2tpbmcobV9mb3JtYXQpLAorICAg
ICAgICAoWyZdICgpIC0+IFdHUFVUZXh0dXJlVmlld0RpbWVuc2lvbiB7CisgICAgICAgICAgICBp
ZiAoZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLT5kaW1lbnNpb24pCisgICAgICAgICAgICAgICAg
cmV0dXJuIGNvbnZlcnRUb0JhY2tpbmcoKmRlc2NyaXB0b3ItPmRpbWVuc2lvbik7CisgICAgICAg
ICAgICBzd2l0Y2ggKG1fZGltZW5zaW9uKSB7CisgICAgICAgICAgICBjYXNlIFRleHR1cmVEaW1l
bnNpb246Ol8xZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVWaWV3RGltZW5z
aW9uXzFEOworICAgICAgICAgICAgY2FzZSBUZXh0dXJlRGltZW5zaW9uOjpfMmQ6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlVmlld0RpbWVuc2lvbl8yRDsKKyAgICAgICAgICAg
IGNhc2UgVGV4dHVyZURpbWVuc2lvbjo6XzNkOgorICAgICAgICAgICAgICAgIHJldHVybiBXR1BV
VGV4dHVyZVZpZXdEaW1lbnNpb25fMkQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0pKCksCisg
ICAgICAgIGRlc2NyaXB0b3IgPyBkZXNjcmlwdG9yLT5iYXNlTWlwTGV2ZWwgOiAwLAorICAgICAg
ICBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3ItPm1pcExldmVsQ291bnQgPyAqZGVzY3JpcHRvci0+
bWlwTGV2ZWxDb3VudCA6IHN0YXRpY19jYXN0PHVpbnQzMl90PihXR1BVX01JUF9MRVZFTF9DT1VO
VF9VTkRFRklORUQpLAorICAgICAgICBkZXNjcmlwdG9yID8gZGVzY3JpcHRvci0+YmFzZUFycmF5
TGF5ZXIgOiAwLAorICAgICAgICBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3ItPmFycmF5TGF5ZXJD
b3VudCA/ICpkZXNjcmlwdG9yLT5hcnJheUxheWVyQ291bnQgOiBzdGF0aWNfY2FzdDx1aW50MzJf
dD4oV0dQVV9BUlJBWV9MQVlFUl9DT1VOVF9VTkRFRklORUQpLAorICAgICAgICBkZXNjcmlwdG9y
ID8gY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLT5hc3BlY3QpIDogV0dQVVRleHR1cmVBc3Bl
Y3RfQWxsLAorICAgIH07CisKKyAgICByZXR1cm4gVGV4dHVyZVZpZXdJbXBsOjpjcmVhdGUod2dw
dVRleHR1cmVDcmVhdGVWaWV3KG1fYmFja2luZywgJmJhY2tpbmdEZXNjcmlwdG9yKSk7Cit9CisK
K3ZvaWQgVGV4dHVyZUltcGw6OmRlc3Ryb3koKQoreworICAgIHdncHVUZXh0dXJlRGVzdHJveSht
X2JhY2tpbmcpOworfQorCit2b2lkIFRleHR1cmVJbXBsOjpzZXRMYWJlbEludGVybmFsKGNvbnN0
IFN0cmluZyYgbGFiZWwpCit7CisgICAgd2dwdVRleHR1cmVTZXRMYWJlbChtX2JhY2tpbmcsIGxh
YmVsLnV0ZjgoKS5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNw
YWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9X
ZWJHUFUvSW1wbC9XZWJHUFVUZXh0dXJlSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9n
cmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVUZXh0dXJlSW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM2ZThk
MGI4YzA0NzJhM2Q4ZTI2ODlmZmNiYmMzYzQyN2JlYWYxZTkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVRleHR1cmVJ
bXBsLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiV2ViR1BVSW50ZWdyYWxUeXBlcy5oIgorI2luY2x1ZGUgIldlYkdQVVRleHR1cmUuaCIK
KyNpbmNsdWRlICJXZWJHUFVUZXh0dXJlRGltZW5zaW9uLmgiCisjaW5jbHVkZSAiV2ViR1BVVGV4
dHVyZUZvcm1hdC5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFUuaD4KKworbmFtZXNwYWNlIFBB
TCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworY2xhc3MgVGV4dHVyZUltcGwgZmluYWwgOiBwdWJs
aWMgVGV4dHVyZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxUZXh0dXJlSW1wbD4gY3JlYXRl
KFdHUFVUZXh0dXJlIHRleHR1cmUsIFRleHR1cmVGb3JtYXQgZm9ybWF0LCBUZXh0dXJlRGltZW5z
aW9uIGRpbWVuc2lvbikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRleHR1
cmVJbXBsKHRleHR1cmUsIGZvcm1hdCwgZGltZW5zaW9uKSk7CisgICAgfQorCisgICAgdmlydHVh
bCB+VGV4dHVyZUltcGwoKTsKKworICAgIFdHUFVUZXh0dXJlIGJhY2tpbmcoKSBjb25zdCB7IHJl
dHVybiBtX2JhY2tpbmc7IH0KKworcHJpdmF0ZToKKyAgICBUZXh0dXJlSW1wbChXR1BVVGV4dHVy
ZSwgVGV4dHVyZUZvcm1hdCwgVGV4dHVyZURpbWVuc2lvbik7CisKKyAgICBUZXh0dXJlSW1wbChj
b25zdCBUZXh0dXJlSW1wbCYpID0gZGVsZXRlOworICAgIFRleHR1cmVJbXBsKFRleHR1cmVJbXBs
JiYpID0gZGVsZXRlOworICAgIFRleHR1cmVJbXBsJiBvcGVyYXRvcj0oY29uc3QgVGV4dHVyZUlt
cGwmKSA9IGRlbGV0ZTsKKyAgICBUZXh0dXJlSW1wbCYgb3BlcmF0b3I9KFRleHR1cmVJbXBsJiYp
ID0gZGVsZXRlOworCisgICAgUmVmPFRleHR1cmVWaWV3PiBjcmVhdGVWaWV3KGNvbnN0IHN0ZDo6
b3B0aW9uYWw8VGV4dHVyZVZpZXdEZXNjcmlwdG9yPiYpIGNvbnN0IGZpbmFsOworCisgICAgdm9p
ZCBkZXN0cm95KCkgZmluYWw7CisKKyAgICB2b2lkIHNldExhYmVsSW50ZXJuYWwoY29uc3QgU3Ry
aW5nJikgZmluYWw7CisKKyAgICBXR1BVVGV4dHVyZSBtX2JhY2tpbmcgeyBudWxscHRyIH07Cisg
ICAgVGV4dHVyZUZvcm1hdCBtX2Zvcm1hdCB7IFRleHR1cmVGb3JtYXQ6OlJnYmE4dW5vcm0gfTsK
KyAgICBUZXh0dXJlRGltZW5zaW9uIG1fZGltZW5zaW9uIHsgVGV4dHVyZURpbWVuc2lvbjo6XzJk
IH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJH
UFVUZXh0dXJlVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9X
ZWJHUFUvSW1wbC9XZWJHUFVUZXh0dXJlVmlld0ltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg5OTkwMjgz
NzVlZjU1NDEwY2M4YTQxMTgzNjJkNWQ1NmVmYzEwNTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVRleHR1cmVWaWV3
SW1wbC5jcHAKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJlVmlld0ltcGwuaCIKKworI2luY2x1ZGUgPFdlYkdQ
VS9XZWJHUFVFeHQuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKwor
VGV4dHVyZVZpZXdJbXBsOjpUZXh0dXJlVmlld0ltcGwoV0dQVVRleHR1cmVWaWV3IHRleHR1cmVW
aWV3KQorICAgIDogbV9iYWNraW5nKHRleHR1cmVWaWV3KQoreworfQorCitUZXh0dXJlVmlld0lt
cGw6On5UZXh0dXJlVmlld0ltcGwoKQoreworICAgIHdncHVUZXh0dXJlVmlld1JlbGVhc2UobV9i
YWNraW5nKTsKK30KKwordm9pZCBUZXh0dXJlVmlld0ltcGw6OnNldExhYmVsSW50ZXJuYWwoY29u
c3QgU3RyaW5nJiBsYWJlbCkKK3sKKyAgICB3Z3B1VGV4dHVyZVZpZXdTZXRMYWJlbChtX2JhY2tp
bmcsIGxhYmVsLnV0ZjgoKS5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8g
bmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVUZXh0dXJlVmlld0ltcGwuaCBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZjU0NDdmMjY3MWYwZTA2ZTM0YzNjYmFkZjAzNjUwYjVhMjY0OWNkOQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwv
V2ViR1BVVGV4dHVyZVZpZXdJbXBsLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVVGV4dHVyZVZpZXcuaCIKKyNpbmNsdWRlIDxX
ZWJHUFUvV2ViR1BVLmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisK
K2NsYXNzIFRleHR1cmVWaWV3SW1wbCBmaW5hbCA6IHB1YmxpYyBUZXh0dXJlVmlldyB7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZjxUZXh0dXJlVmlld0ltcGw+IGNyZWF0ZShXR1BVVGV4dHVyZVZp
ZXcgdGV4dHVyZVZpZXcpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUZXh0
dXJlVmlld0ltcGwodGV4dHVyZVZpZXcpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5UZXh0dXJl
Vmlld0ltcGwoKTsKKworICAgIFdHUFVUZXh0dXJlVmlldyBiYWNraW5nKCkgY29uc3QgeyByZXR1
cm4gbV9iYWNraW5nOyB9CisKK3ByaXZhdGU6CisgICAgVGV4dHVyZVZpZXdJbXBsKFdHUFVUZXh0
dXJlVmlldyk7CisKKyAgICBUZXh0dXJlVmlld0ltcGwoY29uc3QgVGV4dHVyZVZpZXdJbXBsJikg
PSBkZWxldGU7CisgICAgVGV4dHVyZVZpZXdJbXBsKFRleHR1cmVWaWV3SW1wbCYmKSA9IGRlbGV0
ZTsKKyAgICBUZXh0dXJlVmlld0ltcGwmIG9wZXJhdG9yPShjb25zdCBUZXh0dXJlVmlld0ltcGwm
KSA9IGRlbGV0ZTsKKyAgICBUZXh0dXJlVmlld0ltcGwmIG9wZXJhdG9yPShUZXh0dXJlVmlld0lt
cGwmJikgPSBkZWxldGU7CisKKyAgICB2b2lkIHNldExhYmVsSW50ZXJuYWwoY29uc3QgU3RyaW5n
JikgZmluYWw7CisKKyAgICBXR1BVVGV4dHVyZVZpZXcgbV9iYWNraW5nIHsgbnVsbHB0ciB9Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5OTgx
MGViODIwM2NjZGE2YjVjOWUzODE2MTRiNjJiZTZlZjJhMWNjLi5jNGI4MDBjZTMwZDI5NDNjNWQ4
NGNjMmIzNzM3NjlmODQ0ODM5NjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MjMsNiArNjIzLDcgQEAKIAkJMUMwQUExNkQy
MTk0MERDODAwODk2ODI5IC8qIFN0eWxlQ29sb3JTY2hlbWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMEFBMTZBMjE5NDBEQzcwMDg5NjgyOSAvKiBT
dHlsZUNvbG9yU2NoZW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMUMxMkFDMkIxRUU3NzhBRTAwNzlFMEEwIC8qIEZvbnRGYW1pbHlTcGVjaWZp
Y2F0aW9uQ29yZVRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFDMTJBQzI5MUVFNzc4QUUwMDc5RTBBMCAvKiBGb250RmFtaWx5U3BlY2lmaWNhdGlv
bkNvcmVUZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMUMxOERBNTkxODFBRjZBNTAwQzRFRjIyIC8qIFRleHRQYWludGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE4REE1NzE4MUFGNkE1MDBD
NEVGMjIgLyogVGV4dFBhaW50ZXIuaCAqLzsgfTsKKwkJMUMxOUU2QzUyNzQwNjZDQzAwNEIxN0Iw
IC8qIFdlYkdQVS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQzE5RTZDMzI3NDA2NkNDMDA0QjE3QjAgLyogV2ViR1BVLmZyYW1ld29y
ayAqLzsgfTsKIAkJMUMyMUU1N0QxODNFRDFGRjAwMUMyODlEIC8qIElPU3VyZmFjZVBvb2wuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMjFFNTdCMTgz
RUQxRkYwMDFDMjg5RCAvKiBJT1N1cmZhY2VQb29sLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUMyNEVFQTUxQzcyOUNFNDAwODBGOEZDIC8qIEZv
bnRGYWNlU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQzI0RUVBMzFDNzI5Q0U0MDA4MEY4RkMgLyogRm9udEZhY2VTZXQuaCAqLzsgfTsKIAkJMUMy
NEVFQTkxQzcyQTdCNDAwODBGOEZDIC8qIEpTRm9udEZhY2VTZXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMjRFRUE3MUM3MkE3QjQwMDgwRjhGQyAv
KiBKU0ZvbnRGYWNlU2V0LmggKi87IH07CkBAIC03MDMyLDYgKzcwMzMsNyBAQAogCQkxQzEyQUMy
QzFFRTc3OTk1MDA3OUUwQTAgLyogRm9udERlc2NyaXB0aW9uQ29jb2EuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRm9udERlc2NyaXB0aW9uQ29jb2EuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQzE4REE1NjE4MUFGNkE1MDBDNEVGMjIgLyogVGV4dFBhaW50ZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dFBhaW50ZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxQzE4REE1NzE4MUFGNkE1MDBDNEVGMjIgLyogVGV4dFBh
aW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFBhaW50ZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2QzMyNzQwNjZDQzAwNEIxN0IwIC8q
IFdlYkdQVS5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IFdlYkdQVS5mcmFtZXdvcms7IHBh
dGggPSBXZWJHUFUuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9
OwogCQkxQzIxRTU3QTE4M0VEMUZGMDAxQzI4OUQgLyogSU9TdXJmYWNlUG9vbC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJT1N1cmZhY2VQb29sLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUMyMUU1N0IxODNFRDFGRjAwMUMyODlEIC8qIElPU3Vy
ZmFjZVBvb2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSU9TdXJmYWNlUG9v
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzI0RUVBMTFDNzI5QjMyMDA4MEY4
RkMgLyogRm9udEZhY2VTZXQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEZvbnRGYWNlU2V0
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3NzYyLDYgKzE3NzY0LDcgQEAK
IAkJCQkzNzk5MTlCMjEyMDBERTUwMDBFQTA0MUMgLyogbGliei5keWxpYiBpbiBGcmFtZXdvcmtz
ICovLAogCQkJCUE4OEFENTJGMDk1MjRCOTIwMDFERDE5NiAvKiBRdWFydHpDb3JlLmZyYW1ld29y
ayBpbiBGcmFtZXdvcmtzICovLAogCQkJCTVGRTFEMjkyMTc4RkQxRjMwMDFBQTNDMyAvKiBTZWN1
cml0eS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQkxQzE5RTZDNTI3NDA2NkNDMDA0
QjE3QjAgLyogV2ViR1BVLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTg0MTUsNiAr
MTg0MTgsNyBAQAogCQkJCTU3NEY1NUUyMjA0RjNDQkYwMDI5NDhDNiAvKiBMb2NhbEF1dGhlbnRp
Y2F0aW9uLmZyYW1ld29yayAqLywKIAkJCQlBODVEN0EyRjA4NzlFQkE5MDA2QTkxNzIgLyogUXVh
cnR6Q29yZS5mcmFtZXdvcmsgKi8sCiAJCQkJNUZFMUQyOTExNzhGRDFGMzAwMUFBM0MzIC8qIFNl
Y3VyaXR5LmZyYW1ld29yayAqLywKKwkJCQkxQzE5RTZDMzI3NDA2NkNDMDA0QjE3QjAgLyogV2Vi
R1BVLmZyYW1ld29yayAqLywKIAkJCSk7CiAJCQluYW1lID0gRnJhbWV3b3JrczsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7Cg==
</data>
<flag name="commit-queue"
          id="469190"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444221</attachid>
            <date>2021-11-15 01:18:23 -0800</date>
            <delta_ts>2021-11-15 01:36:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233106-20211115011822.patch</filename>
            <type>text/plain</type>
            <size>254615</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1Nzk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGUwOWY5NTk5ZDBmNWM4
N2EzNWIyNTRiZjUyNzNhZTZjMzZmZTI4YS4uZmI5OWIyYmQyYzkyNjE2YzMyNzQ5MGJjMmU2MmY1
MWVkMzMxYjA2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIxLTExLTE1ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkdQVV0g
W0NvY29hXSBDb25uZWN0IFdlYkNvcmUgJiBQQUwgdG8gV2ViR1BVLmZyYW1ld29yaworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzMTA2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGluayB3aXRoIFdlYkdQ
VS5mcmFtZXdvcmsuIFRoaXMgY2FuJ3QgYmUgbGFuZGVkIHlldCwgYmVjYXVzZSB3ZSBoYXZlbid0
IGZpbmlzaGVkCisgICAgICAgIGNvbmZpZ3VyaW5nIEFwcGxlJ3MgaW50ZXJuYWwgYnVpbGQgc3lz
dGVtIHlldC4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGVyZSBpcyBubyBiZWhh
dmlvciBjaGFuZ2UgKHlldCkuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisKIDIwMjEtMTEtMTQgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBs
ZS5jb20+CiAKICAgICAgICAgRmluZ2VycyBkb3duIG9uIHRoZSB0cmFja3BhZCBzaG91bGQgc3Rv
cCBhbiBhbmltYXRlZCBzY3JvbGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCmluZGV4IDNlZThmNWFkNGI3MWFi
NjhkYjllZDI2MTMwNTU5YzljOWI1NmZiOGIuLjE4MTI5OTM5MTlhZGYyOGE2YjQxZTc0YmY5YzAz
MGZlMGM4N2E2MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2NCBAQAorMjAyMS0x
MS0xNSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAg
IFtXZWJHUFVdIFtDb2NvYV0gQ29ubmVjdCBXZWJDb3JlICYgUEFMIHRvIFdlYkdQVS5mcmFtZXdv
cmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzEw
NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
YWRkcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBXZWJHUFUncyB2aXJ0dWFsIGludGVyZmFjZXMgb24g
dG9wIG9mIFdlYkdQVS5mcmFtZXdvcmsuCisgICAgICAgIFRoYXQgZnJhbWV3b3JrJ3MgaGVhZGVy
cyBhbG1vc3QgZXhhY3RseSBtYXRjaCB0aGUgV2ViR1BVIEFQSSwgc28gdGhlIGNvbm5lY3Rpb25z
IGFyZQorICAgICAgICBtb3N0bHkgbWVjaGFuaWNhbC4gVGhlcmUncyBqdXN0IGEgYnVuY2ggb2Yg
bWFyc2hhbGxpbmcgY29kZSB0byBjb252ZXJ0IGJldHdlZW4KKyAgICAgICAgZGVzY3JpcHRvciBh
bmQgc3RydWN0cyBmcm9tIFdlYkNvcmUncyBpbnRlcmZhY2UgdG8gV2ViR1BVLmZyYW1ld29yaydz
CisgICAgICAgIGRlc2NyaXB0b3JzL3N0cnVjdHMuCisKKyAgICAgICAgVGhpcyB1c2VzIHRoZSBz
YW1lICJjb252ZXJ0VG9CYWNraW5nIiBjb252ZW50aW9uLCB3aGVyZSBmdW5jdGlvbnMgdGhhdCBj
b252ZXJ0IGZyb20gdGhlCisgICAgICAgIGhpZ2hlci1sZXZlbCBXZWJDb3JlIHR5cGVzIHRvIHRo
ZSBsb3dlci1sZXZlbCBXZWJHUFUuZnJhbWV3b3JrIHR5cGVzIGFyZSBuYW1lZAorICAgICAgICAi
Y29udmVydFRvQmFja2luZygpIi4gVW5mb3J0dW5hdGVseSwgdGhlIFdlYkdQVSBBUEkgdGFrZXMg
bWFueSBvZiB0aGVzZSBzdHJ1Y3RzIGJ5CisgICAgICAgIG5vbi1jb25zdCByZWZlcmVuY2UsIGFu
ZCB0aGUgc3RydWN0cyBhcmUgbmVzdGVkIGJ5IG5vbi1jb25zdCByZWZlcmVuY2UsIHdoaWNoIG1l
YW5zIEkKKyAgICAgICAgY2FuJ3QganVzdCBoYXZlIHNpbXBsZSAxLWluLTEtb3V0IGNvbnZlcnRl
ciBmdW5jdGlvbnMgZm9yIGV2ZXJ5IHN0cnVjdCwgc2luY2UgdGhlCisgICAgICAgIGlubmVyIHN0
cnVjdHMgaGF2ZSB0byBiZSByZWZlcmVuY2VkIGJ5LXJlZmVyZW5jZSBhbmQgdGhlcmVmb3JlIGhh
dmUgdG8gYmUgaW4tc2NvcGUuIFRoaXMKKyAgICAgICAgbWVhbnMgdGhhdCB0aGUgc2ltcGxlIGVu
dW0gYW5kIGZsYWdzIHR5cGVzIHVzZSBjb252ZXJ0VG9CYWNraW5nKCksIGJ1dCBtb3N0IG9mIHRo
ZQorICAgICAgICBzdHJ1Y3RzIGhhdmUgdG8gYmUgY29udmVydGVkIGF0IHRoZWlyIHVzZSBzaXRl
LiBMdWNraWx5LCBhbG1vc3QgYWxsIG9mIHRoZXNlIHN0cnVjdHMKKyAgICAgICAgb25seSBoYXZl
IGEgc2luZ2xlIHVzZSBzaXRlLCBzbyB0aGVyZSBpc24ndCBtdWNoIGR1cGxpY2F0aW9uLgorCisg
ICAgICAgIEZvciBub3csIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgQ29jb2Etb25seSwgYmVjYXVz
ZSBpbiBvcmRlciBmb3IgdGhlc2UgY2FsbHMgdG8KKyAgICAgICAgV2ViR1BVLmZyYW1ld29yayB0
byBiZSBsZWdhbCwgV2ViQ29yZSBoYXMgdG8gbGluayB3aXRoIGFuIGltcGxlbWVudGF0aW9uIG9m
IHRob3NlCisgICAgICAgIGZ1bmN0aW9ucy4gVGhlIENvY29hIHBvcnRzIGFyZSB0aGUgb25seSBv
bmVzIHdoaWNoIGFjdHVhbGx5IGhhdmUgYW4gaW1wbGVtZW50YXRpb24gb2YKKyAgICAgICAgdGhv
c2UgZnVuY3Rpb25zLCBzbyB0aG9zZSBhcmUgdGhlIG9ubHkgcG9ydHMgd2hpY2ggY2FuIGFjdHVh
bGx5IGNvbXBpbGUgdGhpcyBjb2RlLiBJZgorICAgICAgICB0aGUgb3RoZXIgcG9ydHMgd2FudCB0
byBsaW5rIHdpdGggRGF3biBvciBXR1BVLCB0aGlzIGNvZGUgc2hvdWxkIGJlIChtb3N0bHkpIHVz
YWJsZQorICAgICAgICBvdXQtb2YtdGhlLWJveCBmb3IgdGhlbS4gSSBzYXkgIm1vc3RseSIgYmVj
YXVzZSB0aGUgaGVhZGVyIHRoYXQncyBzaGFyZWQgYmV0d2VlbiBEYXduLAorICAgICAgICBXR1BV
LCBhbmQgV2ViR1BVLmZyYW1ld29yayBpc24ndCBmaW5hbGl6ZWQgeWV0LiBBcyBzdWNoLCB0aGlz
IGltcGxlbWVudGF0aW9uIHJlbGllcyBvbgorICAgICAgICBmdW5jdGlvbnMgZnJvbSBXZWJHUFVF
eHQuaCwgd2hpY2ggaXMgYW4gYWRkaXRpb25hbCBoZWFkZXIgKHRoYXQgb25seSBleGlzdHMgaW4K
KyAgICAgICAgV2ViR1BVLmZyYW1ld29yaykgdGhhdCBhZGRzIHRoZSBtaXNzaW5nIHBpZWNlcy4K
KworICAgICAgICAqIFBBTC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBh
bC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVBZGFwdGVySW1wbC5jcHA6IEFkZGVkLgorICAg
ICAgICAoUEFMOjpXZWJHUFU6OmFkYXB0ZXJOYW1lKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpz
dXBwb3J0ZWRGZWF0dXJlcyk6CisgICAgICAgIChQQUw6OldlYkdQVTo6c3VwcG9ydGVkTGltaXRz
KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjppc0ZhbGxiYWNrQWRhcHRlcik6CisgICAgICAgIChQ
QUw6OldlYkdQVTo6QWRhcHRlckltcGw6OkFkYXB0ZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2Vi
R1BVOjpBZGFwdGVySW1wbDo6fkFkYXB0ZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpy
ZXF1ZXN0RGV2aWNlQ2FsbGJhY2spOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkFkYXB0ZXJJbXBs
OjpyZXF1ZXN0RGV2aWNlKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpBZGFwdGVySW1wbDo6cmVx
dWVzdERldmljZUNhbGxiYWNrKToKKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwv
V2ViR1BVQWRhcHRlckltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQ
VS9JbXBsL1dlYkdQVUJpbmRHcm91cEltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBBTDo6V2Vi
R1BVOjpCaW5kR3JvdXBJbXBsOjpCaW5kR3JvdXBJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BV
OjpCaW5kR3JvdXBJbXBsOjp+QmluZEdyb3VwSW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6
QmluZEdyb3VwSW1wbDo6c2V0TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNz
L1dlYkdQVS9JbXBsL1dlYkdQVUJpbmRHcm91cEltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFs
L2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJpbmRHcm91cExheW91dEltcGwuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFBBTDo6V2ViR1BVOjpCaW5kR3JvdXBMYXlvdXRJbXBsOjpCaW5kR3JvdXBM
YXlvdXRJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpCaW5kR3JvdXBMYXlvdXRJbXBsOjp+
QmluZEdyb3VwTGF5b3V0SW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6QmluZEdyb3VwTGF5
b3V0SW1wbDo6c2V0TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQ
VS9JbXBsL1dlYkdQVUJpbmRHcm91cExheW91dEltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFs
L2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJ1ZmZlckltcGwuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFBBTDo6V2ViR1BVOjpCdWZmZXJJbXBsOjpCdWZmZXJJbXBsKToKKyAgICAgICAgKFBBTDo6
V2ViR1BVOjpCdWZmZXJJbXBsOjp+QnVmZmVySW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6
bWFwQ2FsbGJhY2spOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkJ1ZmZlckltcGw6Om1hcEFzeW5j
KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpCdWZmZXJJbXBsOjptYXBDYWxsYmFjayk6CisgICAg
ICAgIChQQUw6OldlYkdQVTo6QnVmZmVySW1wbDo6Z2V0TWFwcGVkUmFuZ2UpOgorICAgICAgICAo
UEFMOjpXZWJHUFU6OkJ1ZmZlckltcGw6OnVubWFwKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpC
dWZmZXJJbXBsOjpkZXN0cm95KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpCdWZmZXJJbXBsOjpz
ZXRMYWJlbEludGVybmFsKToKKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2Vi
R1BVQnVmZmVySW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0lt
cGwvV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBBTDo6V2Vi
R1BVOjpDb21tYW5kQnVmZmVySW1wbDo6Q29tbWFuZEJ1ZmZlckltcGwpOgorICAgICAgICAoUEFM
OjpXZWJHUFU6OkNvbW1hbmRCdWZmZXJJbXBsOjp+Q29tbWFuZEJ1ZmZlckltcGwpOgorICAgICAg
ICAoUEFMOjpXZWJHUFU6OkNvbW1hbmRCdWZmZXJJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAg
ICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwu
aDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbW1h
bmRFbmNvZGVySW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbW1hbmRF
bmNvZGVySW1wbDo6Q29tbWFuZEVuY29kZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpD
b21tYW5kRW5jb2RlckltcGw6On5Db21tYW5kRW5jb2RlckltcGwpOgorICAgICAgICAoUEFMOjpX
ZWJHUFU6OkNvbW1hbmRFbmNvZGVySW1wbDo6YmVnaW5SZW5kZXJQYXNzKToKKyAgICAgICAgKFBB
TDo6V2ViR1BVOjpDb21tYW5kRW5jb2RlckltcGw6OmJlZ2luQ29tcHV0ZVBhc3MpOgorICAgICAg
ICAoUEFMOjpXZWJHUFU6OkNvbW1hbmRFbmNvZGVySW1wbDo6Y29weUJ1ZmZlclRvQnVmZmVyKToK
KyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21tYW5kRW5jb2RlckltcGw6OmNvcHlCdWZmZXJUb1Rl
eHR1cmUpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbW1hbmRFbmNvZGVySW1wbDo6Y29weVRl
eHR1cmVUb0J1ZmZlcik6CisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tbWFuZEVuY29kZXJJbXBs
Ojpjb3B5VGV4dHVyZVRvVGV4dHVyZSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tbWFuZEVu
Y29kZXJJbXBsOjpmaWxsQnVmZmVyKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21tYW5kRW5j
b2RlckltcGw6OnB1c2hEZWJ1Z0dyb3VwKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21tYW5k
RW5jb2RlckltcGw6OnBvcERlYnVnR3JvdXApOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbW1h
bmRFbmNvZGVySW1wbDo6aW5zZXJ0RGVidWdNYXJrZXIpOgorICAgICAgICAoUEFMOjpXZWJHUFU6
OkNvbW1hbmRFbmNvZGVySW1wbDo6d3JpdGVUaW1lc3RhbXApOgorICAgICAgICAoUEFMOjpXZWJH
UFU6OkNvbW1hbmRFbmNvZGVySW1wbDo6cmVzb2x2ZVF1ZXJ5U2V0KToKKyAgICAgICAgKFBBTDo6
V2ViR1BVOjpDb21tYW5kRW5jb2RlckltcGw6OmZpbmlzaCk6CisgICAgICAgIChQQUw6OldlYkdQ
VTo6Q29tbWFuZEVuY29kZXJJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAgICAgICAgKiBwYWwv
Z3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tbWFuZEVuY29kZXJJbXBsLmg6IEFkZGVkLgor
ICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb21wdXRlUGFzc0VuY29k
ZXJJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tcHV0ZVBhc3NFbmNv
ZGVySW1wbDo6Q29tcHV0ZVBhc3NFbmNvZGVySW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6
Q29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6fkNvbXB1dGVQYXNzRW5jb2RlckltcGwpOgorICAgICAg
ICAoUEFMOjpXZWJHUFU6OkNvbXB1dGVQYXNzRW5jb2RlckltcGw6OnNldFBpcGVsaW5lKToKKyAg
ICAgICAgKFBBTDo6V2ViR1BVOjpDb21wdXRlUGFzc0VuY29kZXJJbXBsOjpkaXNwYXRjaCk6Cisg
ICAgICAgIChQQUw6OldlYkdQVTo6Q29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6ZGlzcGF0Y2hJbmRp
cmVjdCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6YmVn
aW5QaXBlbGluZVN0YXRpc3RpY3NRdWVyeSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tcHV0
ZVBhc3NFbmNvZGVySW1wbDo6ZW5kUGlwZWxpbmVTdGF0aXN0aWNzUXVlcnkpOgorICAgICAgICAo
UEFMOjpXZWJHUFU6OkNvbXB1dGVQYXNzRW5jb2RlckltcGw6OmVuZFBhc3MpOgorICAgICAgICAo
UEFMOjpXZWJHUFU6OkNvbXB1dGVQYXNzRW5jb2RlckltcGw6OnNldEJpbmRHcm91cCk6CisgICAg
ICAgIChQQUw6OldlYkdQVTo6Q29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6cHVzaERlYnVnR3JvdXAp
OgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbXB1dGVQYXNzRW5jb2RlckltcGw6OnBvcERlYnVn
R3JvdXApOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbXB1dGVQYXNzRW5jb2RlckltcGw6Omlu
c2VydERlYnVnTWFya2VyKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21wdXRlUGFzc0VuY29k
ZXJJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BV
L0ltcGwvV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKiBw
YWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tcHV0ZVBpcGVsaW5lSW1wbC5jcHA6IEFk
ZGVkLgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbXB1dGVQaXBlbGluZUltcGw6OkNvbXB1dGVQ
aXBlbGluZUltcGwpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbXB1dGVQaXBlbGluZUltcGw6
On5Db21wdXRlUGlwZWxpbmVJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21wdXRlUGlw
ZWxpbmVJbXBsOjpnZXRCaW5kR3JvdXBMYXlvdXQpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNv
bXB1dGVQaXBlbGluZUltcGw6OnNldExhYmVsSW50ZXJuYWwpOgorICAgICAgICAqIHBhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBsLmg6IEFkZGVkLgorICAg
ICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb252ZXJ0VG9CYWNraW5nLmNw
cDogQWRkZWQuCisgICAgICAgIChQQUw6OldlYkdQVTo6Y29udmVydFRvQmFja2luZyk6CisgICAg
ICAgIChQQUw6OldlYkdQVTo6Y29udmVydEJ1ZmZlclVzYWdlRmxhZ3NUb0JhY2tpbmcpOgorICAg
ICAgICAoUEFMOjpXZWJHUFU6OmNvbnZlcnRDb2xvcldyaXRlRmxhZ3NUb0JhY2tpbmcpOgorICAg
ICAgICAoUEFMOjpXZWJHUFU6OmNvbnZlcnRNYXBNb2RlRmxhZ3NUb0JhY2tpbmcpOgorICAgICAg
ICAoUEFMOjpXZWJHUFU6OmNvbnZlcnRTaGFkZXJTdGFnZUZsYWdzVG9CYWNraW5nKToKKyAgICAg
ICAgKFBBTDo6V2ViR1BVOjpjb252ZXJ0VGV4dHVyZVVzYWdlRmxhZ3NUb0JhY2tpbmcpOgorICAg
ICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb252ZXJ0VG9CYWNraW5nLmg6
IEFkZGVkLgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVEZXZpY2VJ
bXBsLmNwcDogQWRkZWQuCisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6RGV2aWNl
SW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6fkRldmljZUltcGwpOgor
ICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmljZUltcGw6OmRlc3Ryb3kpOgorICAgICAgICAoUEFM
OjpXZWJHUFU6OkRldmljZUltcGw6OmNyZWF0ZUJ1ZmZlcik6CisgICAgICAgIChQQUw6OldlYkdQ
VTo6RGV2aWNlSW1wbDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2
aWNlSW1wbDo6Y3JlYXRlU2FtcGxlcik6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1w
bDo6aW1wb3J0RXh0ZXJuYWxUZXh0dXJlKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpEZXZpY2VJ
bXBsOjpjcmVhdGVCaW5kR3JvdXBMYXlvdXQpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmlj
ZUltcGw6OmNyZWF0ZVBpcGVsaW5lTGF5b3V0KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpEZXZp
Y2VJbXBsOjpjcmVhdGVCaW5kR3JvdXApOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmljZUlt
cGw6OmNyZWF0ZVNoYWRlck1vZHVsZSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6Y29udmVydFRv
QmFja2luZyk6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6Y3JlYXRlQ29tcHV0
ZVBpcGVsaW5lKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpEZXZpY2VJbXBsOjpjcmVhdGVSZW5k
ZXJQaXBlbGluZSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6Y3JlYXRlQ29tcHV0ZVBpcGVsaW5l
QXN5bmNDYWxsYmFjayk6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6Y3JlYXRl
Q29tcHV0ZVBpcGVsaW5lQXN5bmMpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmljZUltcGw6
OmNyZWF0ZUNvbXB1dGVQaXBlbGluZUFzeW5jQ2FsbGJhY2spOgorICAgICAgICAoUEFMOjpXZWJH
UFU6OmNyZWF0ZVJlbmRlclBpcGVsaW5lQXN5bmNDYWxsYmFjayk6CisgICAgICAgIChQQUw6Oldl
YkdQVTo6RGV2aWNlSW1wbDo6Y3JlYXRlUmVuZGVyUGlwZWxpbmVBc3luYyk6CisgICAgICAgIChQ
QUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6Y3JlYXRlUmVuZGVyUGlwZWxpbmVBc3luY0NhbGxiYWNr
KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpEZXZpY2VJbXBsOjpjcmVhdGVDb21tYW5kRW5jb2Rl
cik6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6Y3JlYXRlUmVuZGVyQnVuZGxl
RW5jb2Rlcik6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6Y3JlYXRlUXVlcnlT
ZXQpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmljZUltcGw6OnB1c2hFcnJvclNjb3BlKToK
KyAgICAgICAgKFBBTDo6V2ViR1BVOjpwb3BFcnJvclNjb3BlQ2FsbGJhY2spOgorICAgICAgICAo
UEFMOjpXZWJHUFU6OkRldmljZUltcGw6OnBvcEVycm9yU2NvcGUpOgorICAgICAgICAoUEFMOjpX
ZWJHUFU6OkRldmljZUltcGw6OnBvcEVycm9yU2NvcGVDYWxsYmFjayk6CisgICAgICAgIChQQUw6
OldlYkdQVTo6RGV2aWNlSW1wbDo6c2V0TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dy
YXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVURldmljZUltcGwuaDogQWRkZWQuCisgICAgICAgICog
cGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUV4dGVybmFsVGV4dHVyZUltcGwuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFBBTDo6V2ViR1BVOjpFeHRlcm5hbFRleHR1cmVJbXBsOjpFeHRlcm5h
bFRleHR1cmVJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpFeHRlcm5hbFRleHR1cmVJbXBs
Ojp+RXh0ZXJuYWxUZXh0dXJlSW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6RXh0ZXJuYWxU
ZXh0dXJlSW1wbDo6c2V0TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dl
YkdQVS9JbXBsL1dlYkdQVUV4dGVybmFsVGV4dHVyZUltcGwuaDogQWRkZWQuCisgICAgICAgICog
cGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFBBTDo6V2ViR1BVOjpHUFVJbXBsOjpHUFVJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpH
UFVJbXBsOjp+R1BVSW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6cmVxdWVzdEFkYXB0ZXJD
YWxsYmFjayk6CisgICAgICAgIChQQUw6OldlYkdQVTo6R1BVSW1wbDo6cmVxdWVzdEFkYXB0ZXIp
OgorICAgICAgICAoUEFMOjpXZWJHUFU6OkdQVUltcGw6OnJlcXVlc3RBZGFwdGVyQ2FsbGJhY2sp
OgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVJbXBsLmg6IEFkZGVk
LgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVQaXBlbGluZUxheW91
dEltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBBTDo6V2ViR1BVOjpQaXBlbGluZUxheW91dElt
cGw6OlBpcGVsaW5lTGF5b3V0SW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UGlwZWxpbmVM
YXlvdXRJbXBsOjp+UGlwZWxpbmVMYXlvdXRJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpQ
aXBlbGluZUxheW91dEltcGw6OnNldExhYmVsSW50ZXJuYWwpOgorICAgICAgICAqIHBhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVQaXBlbGluZUxheW91dEltcGwuaDogQWRkZWQuCisgICAg
ICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVF1ZXJ5U2V0SW1wbC5jcHA6IEFk
ZGVkLgorICAgICAgICAoUEFMOjpXZWJHUFU6OlF1ZXJ5U2V0SW1wbDo6UXVlcnlTZXRJbXBsKToK
KyAgICAgICAgKFBBTDo6V2ViR1BVOjpRdWVyeVNldEltcGw6On5RdWVyeVNldEltcGwpOgorICAg
ICAgICAoUEFMOjpXZWJHUFU6OlF1ZXJ5U2V0SW1wbDo6ZGVzdHJveSk6CisgICAgICAgIChQQUw6
OldlYkdQVTo6UXVlcnlTZXRJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAgICAgICAgKiBwYWwv
Z3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUXVlcnlTZXRJbXBsLmg6IEFkZGVkLgorICAgICAg
ICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVRdWV1ZUltcGwuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFBBTDo6V2ViR1BVOjpRdWV1ZUltcGw6OlF1ZXVlSW1wbCk6CisgICAgICAgIChQ
QUw6OldlYkdQVTo6UXVldWVJbXBsOjp+UXVldWVJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BV
OjpRdWV1ZUltcGw6OnN1Ym1pdCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6b25TdWJtaXR0ZWRX
b3JrRG9uZUNhbGxiYWNrKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpRdWV1ZUltcGw6Om9uU3Vi
bWl0dGVkV29ya0RvbmUpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlF1ZXVlSW1wbDo6b25TdWJt
aXR0ZWRXb3JrRG9uZUNhbGxiYWNrKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpRdWV1ZUltcGw6
OndyaXRlQnVmZmVyKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpRdWV1ZUltcGw6OndyaXRlVGV4
dHVyZSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UXVldWVJbXBsOjpjb3B5RXh0ZXJuYWxJbWFn
ZVRvVGV4dHVyZSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UXVldWVJbXBsOjpzZXRMYWJlbElu
dGVybmFsKToKKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUXVldWVJ
bXBsLmg6IEFkZGVkLgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVS
ZW5kZXJCdW5kbGVFbmNvZGVySW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoUEFMOjpXZWJHUFU6
OlJlbmRlckJ1bmRsZUVuY29kZXJJbXBsOjpSZW5kZXJCdW5kbGVFbmNvZGVySW1wbCk6CisgICAg
ICAgIChQQUw6OldlYkdQVTo6UmVuZGVyQnVuZGxlRW5jb2RlckltcGw6On5SZW5kZXJCdW5kbGVF
bmNvZGVySW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UmVuZGVyQnVuZGxlRW5jb2Rlcklt
cGw6OnNldFBpcGVsaW5lKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVFbmNv
ZGVySW1wbDo6c2V0SW5kZXhCdWZmZXIpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlckJ1
bmRsZUVuY29kZXJJbXBsOjpzZXRWZXJ0ZXhCdWZmZXIpOgorICAgICAgICAoUEFMOjpXZWJHUFU6
OlJlbmRlckJ1bmRsZUVuY29kZXJJbXBsOjpkcmF3KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpS
ZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6ZHJhd0luZGV4ZWQpOgorICAgICAgICAoUEFMOjpXZWJH
UFU6OlJlbmRlckJ1bmRsZUVuY29kZXJJbXBsOjpkcmF3SW5kaXJlY3QpOgorICAgICAgICAoUEFM
OjpXZWJHUFU6OlJlbmRlckJ1bmRsZUVuY29kZXJJbXBsOjpkcmF3SW5kZXhlZEluZGlyZWN0KToK
KyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6c2V0QmluZEdy
b3VwKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6cHVz
aERlYnVnR3JvdXApOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlckJ1bmRsZUVuY29kZXJJ
bXBsOjpwb3BEZWJ1Z0dyb3VwKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVF
bmNvZGVySW1wbDo6aW5zZXJ0RGVidWdNYXJrZXIpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJl
bmRlckJ1bmRsZUVuY29kZXJJbXBsOjpmaW5pc2gpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJl
bmRlckJ1bmRsZUVuY29kZXJJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAgICAgICAgKiBwYWwv
Z3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVyQnVuZGxlRW5jb2RlckltcGwuaDogQWRk
ZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlckJ1bmRs
ZUltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVJbXBs
OjpSZW5kZXJCdW5kbGVJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVJ
bXBsOjp+UmVuZGVyQnVuZGxlSW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UmVuZGVyQnVu
ZGxlSW1wbDo6c2V0TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQ
VS9JbXBsL1dlYkdQVVJlbmRlckJ1bmRsZUltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dy
YXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlclBhc3NFbmNvZGVySW1wbC5jcHA6IEFkZGVk
LgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6UmVuZGVyUGFz
c0VuY29kZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2Rlcklt
cGw6On5SZW5kZXJQYXNzRW5jb2RlckltcGwpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRl
clBhc3NFbmNvZGVySW1wbDo6c2V0UGlwZWxpbmUpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJl
bmRlclBhc3NFbmNvZGVySW1wbDo6c2V0SW5kZXhCdWZmZXIpOgorICAgICAgICAoUEFMOjpXZWJH
UFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6c2V0VmVydGV4QnVmZmVyKToKKyAgICAgICAgKFBB
TDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6OmRyYXcpOgorICAgICAgICAoUEFMOjpX
ZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6ZHJhd0luZGV4ZWQpOgorICAgICAgICAoUEFM
OjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6ZHJhd0luZGlyZWN0KToKKyAgICAgICAg
KFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6OmRyYXdJbmRleGVkSW5kaXJlY3Qp
OgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6c2V0QmluZEdy
b3VwKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6OnB1c2hE
ZWJ1Z0dyb3VwKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6
OnBvcERlYnVnR3JvdXApOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVy
SW1wbDo6aW5zZXJ0RGVidWdNYXJrZXIpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBh
c3NFbmNvZGVySW1wbDo6c2V0Vmlld3BvcnQpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRl
clBhc3NFbmNvZGVySW1wbDo6c2V0U2Npc3NvclJlY3QpOgorICAgICAgICAoUEFMOjpXZWJHUFU6
OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6c2V0QmxlbmRDb25zdGFudCk6CisgICAgICAgIChQQUw6
OldlYkdQVTo6UmVuZGVyUGFzc0VuY29kZXJJbXBsOjpzZXRTdGVuY2lsUmVmZXJlbmNlKToKKyAg
ICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6OmJlZ2luT2NjbHVzaW9u
UXVlcnkpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6ZW5k
T2NjbHVzaW9uUXVlcnkpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVy
SW1wbDo6YmVnaW5QaXBlbGluZVN0YXRpc3RpY3NRdWVyeSk6CisgICAgICAgIChQQUw6OldlYkdQ
VTo6UmVuZGVyUGFzc0VuY29kZXJJbXBsOjplbmRQaXBlbGluZVN0YXRpc3RpY3NRdWVyeSk6Cisg
ICAgICAgIChQQUw6OldlYkdQVTo6UmVuZGVyUGFzc0VuY29kZXJJbXBsOjpleGVjdXRlQnVuZGxl
cyk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UmVuZGVyUGFzc0VuY29kZXJJbXBsOjplbmRQYXNz
KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6OnNldExhYmVs
SW50ZXJuYWwpOgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5k
ZXJQYXNzRW5jb2RlckltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQ
VS9JbXBsL1dlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoUEFM
OjpXZWJHUFU6OlJlbmRlclBpcGVsaW5lSW1wbDo6UmVuZGVyUGlwZWxpbmVJbXBsKToKKyAgICAg
ICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQaXBlbGluZUltcGw6On5SZW5kZXJQaXBlbGluZUltcGwp
OgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBpcGVsaW5lSW1wbDo6Z2V0QmluZEdyb3Vw
TGF5b3V0KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQaXBlbGluZUltcGw6OnNldExh
YmVsSW50ZXJuYWwpOgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVS
ZW5kZXJQaXBlbGluZUltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQ
VS9JbXBsL1dlYkdQVVNhbXBsZXJJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChQQUw6OldlYkdQ
VTo6U2FtcGxlckltcGw6OlNhbXBsZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpTYW1w
bGVySW1wbDo6flNhbXBsZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpTYW1wbGVySW1w
bDo6c2V0TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBs
L1dlYkdQVVNhbXBsZXJJbXBsLmg6IEFkZGVkLgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJH
UFUvSW1wbC9XZWJHUFVTaGFkZXJNb2R1bGVJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChQQUw6
OldlYkdQVTo6U2hhZGVyTW9kdWxlSW1wbDo6U2hhZGVyTW9kdWxlSW1wbCk6CisgICAgICAgIChQ
QUw6OldlYkdQVTo6U2hhZGVyTW9kdWxlSW1wbDo6flNoYWRlck1vZHVsZUltcGwpOgorICAgICAg
ICAoUEFMOjpXZWJHUFU6OlNoYWRlck1vZHVsZUltcGw6OmNvbXBpbGF0aW9uSW5mbyk6CisgICAg
ICAgIChQQUw6OldlYkdQVTo6U2hhZGVyTW9kdWxlSW1wbDo6c2V0TGFiZWxJbnRlcm5hbCk6Cisg
ICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVNoYWRlck1vZHVsZUltcGwu
aDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVRleHR1
cmVJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChQQUw6OldlYkdQVTo6VGV4dHVyZUltcGw6OlRl
eHR1cmVJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpUZXh0dXJlSW1wbDo6flRleHR1cmVJ
bXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpUZXh0dXJlSW1wbDo6Y3JlYXRlVmlldyBjb25z
dCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6VGV4dHVyZUltcGw6OmRlc3Ryb3kpOgorICAgICAg
ICAoUEFMOjpXZWJHUFU6OlRleHR1cmVJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAgICAgICAg
KiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVVGV4dHVyZUltcGwuaDogQWRkZWQuCisg
ICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVRleHR1cmVWaWV3SW1wbC5j
cHA6IEFkZGVkLgorICAgICAgICAoUEFMOjpXZWJHUFU6OlRleHR1cmVWaWV3SW1wbDo6VGV4dHVy
ZVZpZXdJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpUZXh0dXJlVmlld0ltcGw6On5UZXh0
dXJlVmlld0ltcGwpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlRleHR1cmVWaWV3SW1wbDo6c2V0
TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQ
VVRleHR1cmVWaWV3SW1wbC5oOiBBZGRlZC4KKwogMjAyMS0xMS0xNCAgTXlsZXMgQy4gTWF4Zmll
bGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJHUFVdIFZhcmlvdXMgbWVj
aGFuaWNhbCBjbGVhbnVwcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGUxODU0MjVlMDJlYzY2OTA3NDRlZDEyM2UwOGIyM2UyZTUw
NDIxYjIuLjUyYWI3M2JjYjA0ZWRhOWNiZGZhZTE5OWY2YTliODFjZWExNWVjZTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9QQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEw
OSw2ICsxMDksMjkgQEAKIAkJMUMwOUQwNTMxRTMxQzQ0MTAwNzI1RjE4IC8qIENyeXB0b0RpZ2Vz
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMwOUQw
NTIxRTMxQzQ0MTAwNzI1RjE4IC8qIENyeXB0b0RpZ2VzdC5oICovOyB9OwogCQkxQzA5RDA1NjFF
MzFDNDY1MDA3MjVGMTggLyogQ3J5cHRvRGlnZXN0Q29tbW9uQ3J5cHRvLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMDlEMDU1MUUzMUM0NjUwMDcy
NUYxOCAvKiBDcnlwdG9EaWdlc3RDb21tb25DcnlwdG8uY3BwICovOyB9OwogCQkxQzA5RDA1ODFF
MzFDNTdFMDA3MjVGMTggLyogY29uZmlnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQzA5RDA1NzFFMzFDNTdFMDA3MjVGMTggLyogY29uZmlnLmggKi87
IH07CisJCTFDMTlFNjQ0MjczRjNFNUQwMDRCMTdCMCAvKiBXZWJHUFVJbXBsLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNjQyMjczRjNFNUQw
MDRCMTdCMCAvKiBXZWJHUFVJbXBsLmNwcCAqLzsgfTsKKwkJMUMxOUU2NDgyNzNGM0Y4MjAwNEIx
N0IwIC8qIFdlYkdQVUFkYXB0ZXJJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNjQ2MjczRjNGODIwMDRCMTdCMCAvKiBXZWJHUFVBZGFw
dGVySW1wbC5jcHAgKi87IH07CisJCTFDMTlFNjRDMjczRjNGOTkwMDRCMTdCMCAvKiBXZWJHUFVC
aW5kR3JvdXBJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFDMTlFNjRBMjczRjNGOTkwMDRCMTdCMCAvKiBXZWJHUFVCaW5kR3JvdXBJbXBsLmNw
cCAqLzsgfTsKKwkJMUMxOUU2NTAyNzNGM0ZBNTAwNEIxN0IwIC8qIFdlYkdQVUJpbmRHcm91cExh
eW91dEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUMxOUU2NEUyNzNGM0ZBNTAwNEIxN0IwIC8qIFdlYkdQVUJpbmRHcm91cExheW91dEltcGwu
Y3BwICovOyB9OworCQkxQzE5RTY1NDI3M0YzRkIxMDA0QjE3QjAgLyogV2ViR1BVQnVmZmVySW1w
bC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5
RTY1MjI3M0YzRkIxMDA0QjE3QjAgLyogV2ViR1BVQnVmZmVySW1wbC5jcHAgKi87IH07CisJCTFD
MTlFNjU4MjczRjNGQzAwMDRCMTdCMCAvKiBXZWJHUFVDb21tYW5kQnVmZmVySW1wbC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5RTY1NjI3M0Yz
RkMwMDA0QjE3QjAgLyogV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwuY3BwICovOyB9OworCQkxQzE5
RTY1QzI3M0YzRkQyMDA0QjE3QjAgLyogV2ViR1BVQ29tbWFuZEVuY29kZXJJbXBsLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNjVBMjczRjNG
RDIwMDRCMTdCMCAvKiBXZWJHUFVDb21tYW5kRW5jb2RlckltcGwuY3BwICovOyB9OworCQkxQzE5
RTY2MDI3M0YzRkUyMDA0QjE3QjAgLyogV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5RTY1RTI3
M0YzRkUyMDA0QjE3QjAgLyogV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5jcHAgKi87IH07
CisJCTFDMTlFNjY0MjczRjNGRUUwMDRCMTdCMCAvKiBXZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBs
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlF
NjYyMjczRjNGRUUwMDRCMTdCMCAvKiBXZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBsLmNwcCAqLzsg
fTsKKwkJMUMxOUU2NjgyNzNGM0ZGQTAwNEIxN0IwIC8qIFdlYkdQVURldmljZUltcGwuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMxOUU2NjYyNzNG
M0ZGQTAwNEIxN0IwIC8qIFdlYkdQVURldmljZUltcGwuY3BwICovOyB9OworCQkxQzE5RTY3MDI3
M0Y0MDE0MDA0QjE3QjAgLyogV2ViR1BVUGlwZWxpbmVMYXlvdXRJbXBsLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNjZFMjczRjQwMTQwMDRC
MTdCMCAvKiBXZWJHUFVQaXBlbGluZUxheW91dEltcGwuY3BwICovOyB9OworCQkxQzE5RTY3NDI3
M0Y0MDIwMDA0QjE3QjAgLyogV2ViR1BVUXVlcnlTZXRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNjcyMjczRjQwMjAwMDRCMTdCMCAv
KiBXZWJHUFVRdWVyeVNldEltcGwuY3BwICovOyB9OworCQkxQzE5RTY3ODI3M0Y0MDJCMDA0QjE3
QjAgLyogV2ViR1BVUXVldWVJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFDMTlFNjc2MjczRjQwMkIwMDRCMTdCMCAvKiBXZWJHUFVRdWV1ZUlt
cGwuY3BwICovOyB9OworCQkxQzE5RTY3QzI3M0Y0MDNBMDA0QjE3QjAgLyogV2ViR1BVUmVuZGVy
QnVuZGxlSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQzE5RTY3QTI3M0Y0MDNBMDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyQnVuZGxlSW1wbC5j
cHAgKi87IH07CisJCTFDMTlFNjgwMjczRjQwNDQwMDRCMTdCMCAvKiBXZWJHUFVSZW5kZXJCdW5k
bGVFbmNvZGVySW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQzE5RTY3RTI3M0Y0MDQ0MDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyQnVuZGxlRW5j
b2RlckltcGwuY3BwICovOyB9OworCQkxQzE5RTY4NDI3M0Y0MDUwMDA0QjE3QjAgLyogV2ViR1BV
UmVuZGVyUGFzc0VuY29kZXJJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFDMTlFNjgyMjczRjQwNTAwMDRCMTdCMCAvKiBXZWJHUFVSZW5kZXJQ
YXNzRW5jb2RlckltcGwuY3BwICovOyB9OworCQkxQzE5RTY4ODI3M0Y0MDVEMDA0QjE3QjAgLyog
V2ViR1BVUmVuZGVyUGlwZWxpbmVJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNjg2MjczRjQwNUQwMDRCMTdCMCAvKiBXZWJHUFVSZW5k
ZXJQaXBlbGluZUltcGwuY3BwICovOyB9OworCQkxQzE5RTY4QzI3M0Y0MDY5MDA0QjE3QjAgLyog
V2ViR1BVU2FtcGxlckltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUMxOUU2OEEyNzNGNDA2OTAwNEIxN0IwIC8qIFdlYkdQVVNhbXBsZXJJbXBs
LmNwcCAqLzsgfTsKKwkJMUMxOUU2OTAyNzNGNDA3MjAwNEIxN0IwIC8qIFdlYkdQVVNoYWRlck1v
ZHVsZUltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUMxOUU2OEUyNzNGNDA3MTAwNEIxN0IwIC8qIFdlYkdQVVNoYWRlck1vZHVsZUltcGwuY3Bw
ICovOyB9OworCQkxQzE5RTY5NDI3M0Y0MDdEMDA0QjE3QjAgLyogV2ViR1BVVGV4dHVyZUltcGwu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMxOUU2
OTIyNzNGNDA3RDAwNEIxN0IwIC8qIFdlYkdQVVRleHR1cmVJbXBsLmNwcCAqLzsgfTsKKwkJMUMx
OUU2OTgyNzNGNDA4QjAwNEIxN0IwIC8qIFdlYkdQVVRleHR1cmVWaWV3SW1wbC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5RTY5NjI3M0Y0MDhC
MDA0QjE3QjAgLyogV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmNwcCAqLzsgfTsKKwkJMUMxOUU2QjUy
NzNGODVBRjAwNEIxN0IwIC8qIFdlYkdQVUNvbnZlcnRUb0JhY2tpbmcuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMxOUU2QjQyNzNGODVBRjAwNEIx
N0IwIC8qIFdlYkdQVUNvbnZlcnRUb0JhY2tpbmcuY3BwICovOyB9OworCQkxQzE5RTZCQTI3NDA1
RTMyMDA0QjE3QjAgLyogV2ViR1BVRXh0ZXJuYWxUZXh0dXJlSW1wbC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5RTZCOTI3NDA1RTMyMDA0QjE3
QjAgLyogV2ViR1BVRXh0ZXJuYWxUZXh0dXJlSW1wbC5jcHAgKi87IH07CiAJCTFDNDg3NkQ4MUY4
RDdGNEUwMENDRUVCRCAvKiBMb2dnaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFDNDg3NkQ2MUY4RDdGNEUwMENDRUVCRCAvKiBMb2dnaW5nLmNw
cCAqLzsgfTsKIAkJMUM0ODc2RDkxRjhEN0Y0RTAwQ0NFRUJEIC8qIExvZ2dpbmcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDNDg3NkQ3MUY4RDdGNEUw
MENDRUVCRCAvKiBMb2dnaW5nLmggKi87IH07CiAJCTFDNzdDOEM5MjVENzk3MjAwMDYzNUUwQyAv
KiBDb3JlVGV4dFNvZnRMaW5rLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFDNzdDOEM3MjVENzk3MjAwMDYzNUUwQyAvKiBDb3JlVGV4dFNvZnRMaW5r
LmNwcCAqLzsgfTsKQEAgLTQ1OSw2ICs0ODIsNTIgQEAKIAkJMUMwOUQwNUQxRTMxQzc3QTAwNzI1
RjE4IC8qIFBBTC54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBQQUwu
eGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDMDlEMDYyMUUzMUVDMjgw
MDcyNUYxOCAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmln
OyBwYXRoID0gRGVidWdSZWxlYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQzA5RDA2MzFFMzFFQzMxMDA3MjVGMTggLyogQmFzZS54Y2NvbmZpZyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQueGNjb25maWc7IHBhdGggPSBCYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxQzE5RTY0MjI3M0YzRTVEMDA0QjE3QjAgLyogV2ViR1BVSW1wbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXZWJHUFVJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUMxOUU2NDYyNzNGM0Y4MjAwNEIxN0IwIC8qIFdlYkdQVUFkYXB0ZXJJbXBsLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQVUFkYXB0ZXJJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMUMxOUU2NEEyNzNGM0Y5OTAwNEIxN0IwIC8qIFdlYkdQVUJpbmRHcm91
cEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR1BVQmluZEdyb3VwSW1wbC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjRFMjczRjNGQTUwMDRCMTdCMCAvKiBX
ZWJHUFVCaW5kR3JvdXBMYXlvdXRJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQVUJp
bmRHcm91cExheW91dEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5
RTY1MjI3M0YzRkIxMDA0QjE3QjAgLyogV2ViR1BVQnVmZmVySW1wbC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXZWJHUFVCdWZmZXJJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMUMxOUU2NTYyNzNGM0ZDMDAwNEIxN0IwIC8qIFdlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2NUEyNzNGM0ZEMjAwNEIxN0IwIC8qIFdlYkdQ
VUNvbW1hbmRFbmNvZGVySW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHUFVDb21tYW5k
RW5jb2RlckltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY1RTI3
M0YzRkUyMDA0QjE3QjAgLyogV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXZWJHUFVDb21wdXRlUGFzc0VuY29kZXJJbXBsLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2NjIyNzNGM0ZFRTAwNEIxN0IwIC8qIFdlYkdQVUNv
bXB1dGVQaXBlbGluZUltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR1BVQ29tcHV0ZVBp
cGVsaW5lSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjY2Mjcz
RjNGRkEwMDRCMTdCMCAvKiBXZWJHUFVEZXZpY2VJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdlYkdQVURldmljZUltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5
RTY2RTI3M0Y0MDE0MDA0QjE3QjAgLyogV2ViR1BVUGlwZWxpbmVMYXlvdXRJbXBsLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjcyMjczRjQwMjAwMDRCMTdCMCAvKiBXZWJHUFVRdWVy
eVNldEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR1BVUXVlcnlTZXRJbXBsLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2NzYyNzNGNDAyQjAwNEIxN0IwIC8q
IFdlYkdQVVF1ZXVlSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHUFVRdWV1ZUltcGwu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY3QTI3M0Y0MDNBMDA0QjE3
QjAgLyogV2ViR1BVUmVuZGVyQnVuZGxlSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJH
UFVSZW5kZXJCdW5kbGVJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMx
OUU2N0UyNzNGNDA0NDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJbXBsLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJbXBsLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2ODIyNzNGNDA1MDAwNEIxN0IwIC8q
IFdlYkdQVVJlbmRlclBhc3NFbmNvZGVySW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJH
UFVSZW5kZXJQYXNzRW5jb2RlckltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkxQzE5RTY4NjI3M0Y0MDVEMDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyUGlwZWxpbmVJbXBsLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjhBMjczRjQwNjkwMDRCMTdCMCAvKiBXZWJH
UFVTYW1wbGVySW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHUFVTYW1wbGVySW1wbC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjhFMjczRjQwNzEwMDRCMTdC
MCAvKiBXZWJHUFVTaGFkZXJNb2R1bGVJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQ
VVNoYWRlck1vZHVsZUltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5
RTY5MjI3M0Y0MDdEMDA0QjE3QjAgLyogV2ViR1BVVGV4dHVyZUltcGwuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2ViR1BVVGV4dHVyZUltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxQzE5RTY5NjI3M0Y0MDhCMDA0QjE3QjAgLyogV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQVVRleHR1cmVWaWV3SW1wbC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjlBMjczRjQyNDIwMDRCMTdCMCAvKiBXZWJHUFVS
ZW5kZXJCdW5kbGVFbmNvZGVySW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVSZW5kZXJCdW5k
bGVFbmNvZGVySW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY5QjI3
M0Y0MjQyMDA0QjE3QjAgLyogV2ViR1BVSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVJbXBs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjlDMjczRjQyNDMwMDRCMTdC
MCAvKiBXZWJHUFVCaW5kR3JvdXBMYXlvdXRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVUJp
bmRHcm91cExheW91dEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2
OUQyNzNGNDI0MzAwNEIxN0IwIC8qIFdlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJHUFVQaXBlbGluZUxheW91dEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMUMxOUU2OUUyNzNGNDI0MzAwNEIxN0IwIC8qIFdlYkdQVUNvbXB1dGVQYXNzRW5j
b2RlckltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY5RjI3M0Y0MjQzMDA0QjE3QjAg
LyogV2ViR1BVVGV4dHVyZUltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR1BVVGV4dHVyZUltcGwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2QTEyNzNGNDI0MzAwNEIxN0Iw
IC8qIFdlYkdQVUJpbmRHcm91cEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR1BVQmluZEdyb3Vw
SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTZBMjI3M0Y0MjQzMDA0
QjE3QjAgLyogV2ViR1BVQnVmZmVySW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVCdWZmZXJJ
bXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNkEzMjczRjQyNDQwMDRC
MTdCMCAvKiBXZWJHUFVSZW5kZXJQYXNzRW5jb2RlckltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
R1BVUmVuZGVyUGFzc0VuY29kZXJJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTFDMTlFNkE0MjczRjQyNDQwMDRCMTdCMCAvKiBXZWJHUFVDb21tYW5kQnVmZmVySW1wbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJHUFVDb21tYW5kQnVmZmVySW1wbC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxQzE5RTZBNTI3M0Y0MjQ0MDA0QjE3QjAgLyogV2ViR1BVUXVldWVJbXBs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVVF1ZXVlSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxQzE5RTZBNjI3M0Y0MjQ0MDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyQnVuZGxl
SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVSZW5kZXJCdW5kbGVJbXBsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNkE3MjczRjQyNDQwMDRCMTdCMCAvKiBXZWJHUFVT
YW1wbGVySW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVTYW1wbGVySW1wbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTZBODI3M0Y0MjQ0MDA0QjE3QjAgLyogV2ViR1BV
UXVlcnlTZXRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVVF1ZXJ5U2V0SW1wbC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTZBOTI3M0Y0MjQ0MDA0QjE3QjAgLyogV2Vi
R1BVUmVuZGVyUGlwZWxpbmVJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVVJlbmRlclBpcGVs
aW5lSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTZBQTI3M0Y0MjQ1
MDA0QjE3QjAgLyogV2ViR1BVU2hhZGVyTW9kdWxlSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJH
UFVTaGFkZXJNb2R1bGVJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlF
NkFCMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJHUFVDb21tYW5kRW5jb2RlckltcGwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViR1BVQ29tbWFuZEVuY29kZXJJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTFDMTlFNkFDMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJHUFVUZXh0dXJlVmlld0lt
cGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNkFEMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJHUFVEZXZp
Y2VJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVURldmljZUltcGwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2QUUyNzNGNDI0NTAwNEIxN0IwIC8qIFdlYkdQVUFkYXB0
ZXJJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVUFkYXB0ZXJJbXBsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNkFGMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJHUFVDb21w
dXRlUGlwZWxpbmVJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVUNvbXB1dGVQaXBlbGluZUlt
cGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2QjQyNzNGODVBRjAwNEIx
N0IwIC8qIFdlYkdQVUNvbnZlcnRUb0JhY2tpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vi
R1BVQ29udmVydFRvQmFja2luZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFD
MTlFNkI2MjczRjg1QkMwMDRCMTdCMCAvKiBXZWJHUFVDb252ZXJ0VG9CYWNraW5nLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkdQVUNvbnZlcnRUb0JhY2tpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMUMxOUU2QjkyNzQwNUUzMjAwNEIxN0IwIC8qIFdlYkdQVUV4dGVybmFsVGV4dHVy
ZUltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR1BVRXh0ZXJuYWxUZXh0dXJlSW1wbC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNkJCMjc0MDVFM0MwMDRCMTdC
MCAvKiBXZWJHUFVFeHRlcm5hbFRleHR1cmVJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVUV4
dGVybmFsVGV4dHVyZUltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM0ODc2
RDYxRjhEN0Y0RTAwQ0NFRUJEIC8qIExvZ2dpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTG9n
Z2luZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDNDg3NkQ3MUY4RDdGNEUw
MENDRUVCRCAvKiBMb2dnaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvZ2dpbmcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM2N0NFQTIxRTMyRUUyNjAwRjgwRjJFIC8qIFZlcnNpb24u
eGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gVmVyc2lvbi54Y2NvbmZp
Zzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMDAsNiArMTA2OSw1OSBAQAogCQkJ
cGF0aCA9IENvbmZpZ3VyYXRpb25zOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsK
KwkJMUMxOUU2NDEyNzNGM0Q3NTAwNEIxN0IwIC8qIEltcGwgKi8gPSB7CisJCQlpc2EgPSBQQlhH
cm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTFDMTlFNjQ2MjczRjNGODIwMDRCMTdCMCAvKiBX
ZWJHUFVBZGFwdGVySW1wbC5jcHAgKi8sCisJCQkJMUMxOUU2QUUyNzNGNDI0NTAwNEIxN0IwIC8q
IFdlYkdQVUFkYXB0ZXJJbXBsLmggKi8sCisJCQkJMUMxOUU2NEEyNzNGM0Y5OTAwNEIxN0IwIC8q
IFdlYkdQVUJpbmRHcm91cEltcGwuY3BwICovLAorCQkJCTFDMTlFNkExMjczRjQyNDMwMDRCMTdC
MCAvKiBXZWJHUFVCaW5kR3JvdXBJbXBsLmggKi8sCisJCQkJMUMxOUU2NEUyNzNGM0ZBNTAwNEIx
N0IwIC8qIFdlYkdQVUJpbmRHcm91cExheW91dEltcGwuY3BwICovLAorCQkJCTFDMTlFNjlDMjcz
RjQyNDMwMDRCMTdCMCAvKiBXZWJHUFVCaW5kR3JvdXBMYXlvdXRJbXBsLmggKi8sCisJCQkJMUMx
OUU2NTIyNzNGM0ZCMTAwNEIxN0IwIC8qIFdlYkdQVUJ1ZmZlckltcGwuY3BwICovLAorCQkJCTFD
MTlFNkEyMjczRjQyNDMwMDRCMTdCMCAvKiBXZWJHUFVCdWZmZXJJbXBsLmggKi8sCisJCQkJMUMx
OUU2NTYyNzNGM0ZDMDAwNEIxN0IwIC8qIFdlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmNwcCAqLywK
KwkJCQkxQzE5RTZBNDI3M0Y0MjQ0MDA0QjE3QjAgLyogV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwu
aCAqLywKKwkJCQkxQzE5RTY1QTI3M0YzRkQyMDA0QjE3QjAgLyogV2ViR1BVQ29tbWFuZEVuY29k
ZXJJbXBsLmNwcCAqLywKKwkJCQkxQzE5RTZBQjI3M0Y0MjQ1MDA0QjE3QjAgLyogV2ViR1BVQ29t
bWFuZEVuY29kZXJJbXBsLmggKi8sCisJCQkJMUMxOUU2NUUyNzNGM0ZFMjAwNEIxN0IwIC8qIFdl
YkdQVUNvbXB1dGVQYXNzRW5jb2RlckltcGwuY3BwICovLAorCQkJCTFDMTlFNjlFMjczRjQyNDMw
MDRCMTdCMCAvKiBXZWJHUFVDb21wdXRlUGFzc0VuY29kZXJJbXBsLmggKi8sCisJCQkJMUMxOUU2
NjIyNzNGM0ZFRTAwNEIxN0IwIC8qIFdlYkdQVUNvbXB1dGVQaXBlbGluZUltcGwuY3BwICovLAor
CQkJCTFDMTlFNkFGMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBs
LmggKi8sCisJCQkJMUMxOUU2QjQyNzNGODVBRjAwNEIxN0IwIC8qIFdlYkdQVUNvbnZlcnRUb0Jh
Y2tpbmcuY3BwICovLAorCQkJCTFDMTlFNkI2MjczRjg1QkMwMDRCMTdCMCAvKiBXZWJHUFVDb252
ZXJ0VG9CYWNraW5nLmggKi8sCisJCQkJMUMxOUU2NjYyNzNGM0ZGQTAwNEIxN0IwIC8qIFdlYkdQ
VURldmljZUltcGwuY3BwICovLAorCQkJCTFDMTlFNkFEMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJH
UFVEZXZpY2VJbXBsLmggKi8sCisJCQkJMUMxOUU2QjkyNzQwNUUzMjAwNEIxN0IwIC8qIFdlYkdQ
VUV4dGVybmFsVGV4dHVyZUltcGwuY3BwICovLAorCQkJCTFDMTlFNkJCMjc0MDVFM0MwMDRCMTdC
MCAvKiBXZWJHUFVFeHRlcm5hbFRleHR1cmVJbXBsLmggKi8sCisJCQkJMUMxOUU2NDIyNzNGM0U1
RDAwNEIxN0IwIC8qIFdlYkdQVUltcGwuY3BwICovLAorCQkJCTFDMTlFNjlCMjczRjQyNDIwMDRC
MTdCMCAvKiBXZWJHUFVJbXBsLmggKi8sCisJCQkJMUMxOUU2NkUyNzNGNDAxNDAwNEIxN0IwIC8q
IFdlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5jcHAgKi8sCisJCQkJMUMxOUU2OUQyNzNGNDI0MzAw
NEIxN0IwIC8qIFdlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5oICovLAorCQkJCTFDMTlFNjcyMjcz
RjQwMjAwMDRCMTdCMCAvKiBXZWJHUFVRdWVyeVNldEltcGwuY3BwICovLAorCQkJCTFDMTlFNkE4
MjczRjQyNDQwMDRCMTdCMCAvKiBXZWJHUFVRdWVyeVNldEltcGwuaCAqLywKKwkJCQkxQzE5RTY3
NjI3M0Y0MDJCMDA0QjE3QjAgLyogV2ViR1BVUXVldWVJbXBsLmNwcCAqLywKKwkJCQkxQzE5RTZB
NTI3M0Y0MjQ0MDA0QjE3QjAgLyogV2ViR1BVUXVldWVJbXBsLmggKi8sCisJCQkJMUMxOUU2N0Uy
NzNGNDA0NDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJbXBsLmNwcCAqLywK
KwkJCQkxQzE5RTY5QTI3M0Y0MjQyMDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyQnVuZGxlRW5jb2Rl
ckltcGwuaCAqLywKKwkJCQkxQzE5RTY3QTI3M0Y0MDNBMDA0QjE3QjAgLyogV2ViR1BVUmVuZGVy
QnVuZGxlSW1wbC5jcHAgKi8sCisJCQkJMUMxOUU2QTYyNzNGNDI0NDAwNEIxN0IwIC8qIFdlYkdQ
VVJlbmRlckJ1bmRsZUltcGwuaCAqLywKKwkJCQkxQzE5RTY4MjI3M0Y0MDUwMDA0QjE3QjAgLyog
V2ViR1BVUmVuZGVyUGFzc0VuY29kZXJJbXBsLmNwcCAqLywKKwkJCQkxQzE5RTZBMzI3M0Y0MjQ0
MDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyUGFzc0VuY29kZXJJbXBsLmggKi8sCisJCQkJMUMxOUU2
ODYyNzNGNDA1RDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5jcHAgKi8sCisJ
CQkJMUMxOUU2QTkyNzNGNDI0NDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5o
ICovLAorCQkJCTFDMTlFNjhBMjczRjQwNjkwMDRCMTdCMCAvKiBXZWJHUFVTYW1wbGVySW1wbC5j
cHAgKi8sCisJCQkJMUMxOUU2QTcyNzNGNDI0NDAwNEIxN0IwIC8qIFdlYkdQVVNhbXBsZXJJbXBs
LmggKi8sCisJCQkJMUMxOUU2OEUyNzNGNDA3MTAwNEIxN0IwIC8qIFdlYkdQVVNoYWRlck1vZHVs
ZUltcGwuY3BwICovLAorCQkJCTFDMTlFNkFBMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJHUFVTaGFk
ZXJNb2R1bGVJbXBsLmggKi8sCisJCQkJMUMxOUU2OTIyNzNGNDA3RDAwNEIxN0IwIC8qIFdlYkdQ
VVRleHR1cmVJbXBsLmNwcCAqLywKKwkJCQkxQzE5RTY5RjI3M0Y0MjQzMDA0QjE3QjAgLyogV2Vi
R1BVVGV4dHVyZUltcGwuaCAqLywKKwkJCQkxQzE5RTY5NjI3M0Y0MDhCMDA0QjE3QjAgLyogV2Vi
R1BVVGV4dHVyZVZpZXdJbXBsLmNwcCAqLywKKwkJCQkxQzE5RTZBQzI3M0Y0MjQ1MDA0QjE3QjAg
LyogV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmggKi8sCisJCQkpOworCQkJcGF0aCA9IEltcGw7CisJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQkxQzQ4NzZERTFGOEQ4MzEzMDBDQ0VF
QkQgLyogY29jb2EgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApA
QCAtMTA0Miw2ICsxMTY0LDcgQEAKIAkJMUNDNUUzQzMyNzM3NDVBMzAwNkY2RkY0IC8qIFdlYkdQ
VSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMUMxOUU2
NDEyNzNGM0Q3NTAwNEIxN0IwIC8qIEltcGwgKi8sCiAJCQkJMUNDNUU0NzEyNzM3NDk0ODAwNkY2
RkY0IC8qIFdlYkdQVS5oICovLAogCQkJCTFDQzVFNDdGMjczNzQ5NDkwMDZGNkZGNCAvKiBXZWJH
UFVBZGFwdGVyLmggKi8sCiAJCQkJMUNDNUU0NkMyNzM3NDk0ODAwNkY2RkY0IC8qIFdlYkdQVUFk
ZHJlc3NNb2RlLmggKi8sCkBAIC0xNjk0LDYgKzE4MTcsMjkgQEAKIAkJCQkwNzYxMURCNzI0M0ZB
NUJGMDBEODA3MDQgLyogVXNhZ2VUcmFja2luZ1NvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNDFFMUYzNDQyNDhBNkEwMDAwMjJENURFIC8qIFZpZGVvVG9vbGJveFNvZnRMaW5rLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUY0NkI4QzREMjY3NDA5MTgwMDdBNjU1NCAvKiBWaXNpb25LaXRD
b3JlU29mdExpbmsubW0gaW4gU291cmNlcyAqLywKKwkJCQkxQzE5RTY0ODI3M0YzRjgyMDA0QjE3
QjAgLyogV2ViR1BVQWRhcHRlckltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2NEMy
NzNGM0Y5OTAwNEIxN0IwIC8qIFdlYkdQVUJpbmRHcm91cEltcGwuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMUMxOUU2NTAyNzNGM0ZBNTAwNEIxN0IwIC8qIFdlYkdQVUJpbmRHcm91cExheW91dElt
cGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2NTQyNzNGM0ZCMTAwNEIxN0IwIC8qIFdl
YkdQVUJ1ZmZlckltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2NTgyNzNGM0ZDMDAw
NEIxN0IwIC8qIFdlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTFDMTlFNjVDMjczRjNGRDIwMDRCMTdCMCAvKiBXZWJHUFVDb21tYW5kRW5jb2RlckltcGwuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2NjAyNzNGM0ZFMjAwNEIxN0IwIC8qIFdlYkdQVUNv
bXB1dGVQYXNzRW5jb2RlckltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2NjQyNzNG
M0ZFRTAwNEIxN0IwIC8qIFdlYkdQVUNvbXB1dGVQaXBlbGluZUltcGwuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMUMxOUU2QjUyNzNGODVBRjAwNEIxN0IwIC8qIFdlYkdQVUNvbnZlcnRUb0JhY2tp
bmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2NjgyNzNGM0ZGQTAwNEIxN0IwIC8qIFdl
YkdQVURldmljZUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2QkEyNzQwNUUzMjAw
NEIxN0IwIC8qIFdlYkdQVUV4dGVybmFsVGV4dHVyZUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMUMxOUU2NDQyNzNGM0U1RDAwNEIxN0IwIC8qIFdlYkdQVUltcGwuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMUMxOUU2NzAyNzNGNDAxNDAwNEIxN0IwIC8qIFdlYkdQVVBpcGVsaW5lTGF5b3V0
SW1wbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQzE5RTY3NDI3M0Y0MDIwMDA0QjE3QjAgLyog
V2ViR1BVUXVlcnlTZXRJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFDMTlFNjc4MjczRjQw
MkIwMDRCMTdCMCAvKiBXZWJHUFVRdWV1ZUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMx
OUU2ODAyNzNGNDA0NDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJbXBsLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTFDMTlFNjdDMjczRjQwM0EwMDRCMTdCMCAvKiBXZWJHUFVS
ZW5kZXJCdW5kbGVJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFDMTlFNjg0MjczRjQwNTAw
MDRCMTdCMCAvKiBXZWJHUFVSZW5kZXJQYXNzRW5jb2RlckltcGwuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMUMxOUU2ODgyNzNGNDA1RDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlclBpcGVsaW5lSW1w
bC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQzE5RTY4QzI3M0Y0MDY5MDA0QjE3QjAgLyogV2Vi
R1BVU2FtcGxlckltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2OTAyNzNGNDA3MjAw
NEIxN0IwIC8qIFdlYkdQVVNoYWRlck1vZHVsZUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MUMxOUU2OTQyNzNGNDA3RDAwNEIxN0IwIC8qIFdlYkdQVVRleHR1cmVJbXBsLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTFDMTlFNjk4MjczRjQwOEIwMDRCMTdCMCAvKiBXZWJHUFVUZXh0dXJlVmll
d0ltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTEwODI2RkExRjU3NjI5MjAwNDc3MkFDIC8q
IFdlYlBhbmVsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUFkYXB0ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQWRhcHRlckltcGwuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjkxMjA5NjlmY2ViYTRhMjQ2YWY2OWEwYjI3NmNiZmYzOTBmMTFiNmYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBs
L1dlYkdQVUFkYXB0ZXJJbXBsLmNwcApAQCAtMCwwICsxLDIxNSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVBZGFwdGVySW1wbC5oIgorCisjaW5j
bHVkZSAiV2ViR1BVQ29udmVydFRvQmFja2luZy5oIgorI2luY2x1ZGUgIldlYkdQVURldmljZUlt
cGwuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVRXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgewor
bmFtZXNwYWNlIFdlYkdQVSB7CisKK3N0YXRpYyBTdHJpbmcgYWRhcHRlck5hbWUoV0dQVUFkYXB0
ZXIgYWRhcHRlcikKK3sKKyAgICBXR1BVQWRhcHRlclByb3BlcnRpZXMgcHJvcGVydGllczsKKyAg
ICB3Z3B1QWRhcHRlckdldFByb3BlcnRpZXMoYWRhcHRlciwgJnByb3BlcnRpZXMpOworICAgIHJl
dHVybiBwcm9wZXJ0aWVzLm5hbWU7Cit9CisKK3N0YXRpYyBSZWY8U3VwcG9ydGVkRmVhdHVyZXM+
IHN1cHBvcnRlZEZlYXR1cmVzKFdHUFVBZGFwdGVyIGFkYXB0ZXIpCit7CisgICAgVmVjdG9yPFN0
cmluZz4gcmVzdWx0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyA7ICsraSkgeworICAgICAgICBh
dXRvIGZlYXR1cmUgPSB3Z3B1QWRhcHRlckdldEZlYXR1cmVBdEluZGV4KGFkYXB0ZXIsIGkpOwor
ICAgICAgICBpZiAoZmVhdHVyZSA9PSBXR1BVRmVhdHVyZU5hbWVfVW5kZWZpbmVkKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8dWludD4oZmVhdHVyZSkp
IHsKKyAgICAgICAgY2FzZSBXR1BVRmVhdHVyZU5hbWVfRGVwdGhDbGFtcGluZzoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFdHUFVGZWF0dXJlTmFtZV9EZXB0aDI0VW5vcm1TdGVu
Y2lsODoKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoImRlcHRoMjR1bm9ybS1zdGVuY2lsOCJf
cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXR1BVRmVhdHVyZU5hbWVfRGVw
dGgzMkZsb2F0U3RlbmNpbDg6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJkZXB0aDMyZmxv
YXQtc3RlbmNpbDgiX3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVUZl
YXR1cmVOYW1lX1RpbWVzdGFtcFF1ZXJ5OgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgidGlt
ZXN0YW1wLXF1ZXJ5Il9zKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdHUFVG
ZWF0dXJlTmFtZV9QaXBlbGluZVN0YXRpc3RpY3NRdWVyeToKKyAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoInBpcGVsaW5lLXN0YXRpc3RpY3MtcXVlcnkiX3MpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgV0dQVUZlYXR1cmVOYW1lX1RleHR1cmVDb21wcmVzc2lvbkJDOgorICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgidGV4dHVyZS1jb21wcmVzc2lvbi1iYyJfcyk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXR1BVRmVhdHVyZU5hbWVfRGVwdGhDbGlwQ29u
dHJvbDoKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoImRlcHRoLWNsaXAtY29udHJvbCJfcyk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXR1BVRmVhdHVyZU5hbWVfSW5kaXJl
Y3RGaXJzdEluc3RhbmNlOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiaW5kaXJlY3QtZmly
c3QtaW5zdGFuY2UiX3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVUZl
YXR1cmVOYW1lX1RleHR1cmVDb21wcmVzc2lvbkVUQzI6CisgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKCJ0ZXh0dXJlLWNvbXByZXNzaW9uLWV0YzIiX3MpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgV0dQVUZlYXR1cmVOYW1lX1RleHR1cmVDb21wcmVzc2lvbkFTVEM6CisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKCJ0ZXh0dXJlLWNvbXByZXNzaW9uLWFzdGMiX3MpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gU3VwcG9ydGVkRmVhdHVyZXM6OmNyZWF0ZShXVEZN
b3ZlKHJlc3VsdCkpOworfQorCitzdGF0aWMgUmVmPFN1cHBvcnRlZExpbWl0cz4gc3VwcG9ydGVk
TGltaXRzKFdHUFVBZGFwdGVyIGFkYXB0ZXIpCit7CisgICAgV0dQVVN1cHBvcnRlZExpbWl0cyBs
aW1pdHM7CisgICAgd2dwdUFkYXB0ZXJHZXRMaW1pdHMoYWRhcHRlciwgJmxpbWl0cyk7CisgICAg
cmV0dXJuIFN1cHBvcnRlZExpbWl0czo6Y3JlYXRlKAorICAgICAgICBsaW1pdHMubGltaXRzLm1h
eFRleHR1cmVEaW1lbnNpb24xRCwKKyAgICAgICAgbGltaXRzLmxpbWl0cy5tYXhUZXh0dXJlRGlt
ZW5zaW9uMkQsCisgICAgICAgIGxpbWl0cy5saW1pdHMubWF4VGV4dHVyZURpbWVuc2lvbjNELAor
ICAgICAgICBsaW1pdHMubGltaXRzLm1heFRleHR1cmVBcnJheUxheWVycywKKyAgICAgICAgbGlt
aXRzLmxpbWl0cy5tYXhCaW5kR3JvdXBzLAorICAgICAgICBsaW1pdHMubGltaXRzLm1heER5bmFt
aWNVbmlmb3JtQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0LAorICAgICAgICBsaW1pdHMubGltaXRz
Lm1heER5bmFtaWNTdG9yYWdlQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0LAorICAgICAgICBsaW1p
dHMubGltaXRzLm1heFNhbXBsZWRUZXh0dXJlc1BlclNoYWRlclN0YWdlLAorICAgICAgICBsaW1p
dHMubGltaXRzLm1heFNhbXBsZXJzUGVyU2hhZGVyU3RhZ2UsCisgICAgICAgIGxpbWl0cy5saW1p
dHMubWF4U3RvcmFnZUJ1ZmZlcnNQZXJTaGFkZXJTdGFnZSwKKyAgICAgICAgbGltaXRzLmxpbWl0
cy5tYXhTdG9yYWdlVGV4dHVyZXNQZXJTaGFkZXJTdGFnZSwKKyAgICAgICAgbGltaXRzLmxpbWl0
cy5tYXhVbmlmb3JtQnVmZmVyc1BlclNoYWRlclN0YWdlLAorICAgICAgICBsaW1pdHMubGltaXRz
Lm1heFVuaWZvcm1CdWZmZXJCaW5kaW5nU2l6ZSwKKyAgICAgICAgbGltaXRzLmxpbWl0cy5tYXhT
dG9yYWdlQnVmZmVyQmluZGluZ1NpemUsCisgICAgICAgIGxpbWl0cy5saW1pdHMubWluVW5pZm9y
bUJ1ZmZlck9mZnNldEFsaWdubWVudCwKKyAgICAgICAgbGltaXRzLmxpbWl0cy5taW5TdG9yYWdl
QnVmZmVyT2Zmc2V0QWxpZ25tZW50LAorICAgICAgICBsaW1pdHMubGltaXRzLm1heFZlcnRleEJ1
ZmZlcnMsCisgICAgICAgIGxpbWl0cy5saW1pdHMubWF4VmVydGV4QXR0cmlidXRlcywKKyAgICAg
ICAgbGltaXRzLmxpbWl0cy5tYXhWZXJ0ZXhCdWZmZXJBcnJheVN0cmlkZSwKKyAgICAgICAgbGlt
aXRzLmxpbWl0cy5tYXhJbnRlclN0YWdlU2hhZGVyQ29tcG9uZW50cywKKyAgICAgICAgbGltaXRz
LmxpbWl0cy5tYXhDb21wdXRlV29ya2dyb3VwU3RvcmFnZVNpemUsCisgICAgICAgIGxpbWl0cy5s
aW1pdHMubWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwLAorICAgICAgICBsaW1pdHMu
bGltaXRzLm1heENvbXB1dGVXb3JrZ3JvdXBTaXplWCwKKyAgICAgICAgbGltaXRzLmxpbWl0cy5t
YXhDb21wdXRlV29ya2dyb3VwU2l6ZVksCisgICAgICAgIGxpbWl0cy5saW1pdHMubWF4Q29tcHV0
ZVdvcmtncm91cFNpemVaLAorICAgICAgICBsaW1pdHMubGltaXRzLm1heENvbXB1dGVXb3JrZ3Jv
dXBzUGVyRGltZW5zaW9uKTsKK30KKworc3RhdGljIGJvb2wgaXNGYWxsYmFja0FkYXB0ZXIoV0dQ
VUFkYXB0ZXIgYWRhcHRlcikKK3sKKyAgICBXR1BVQWRhcHRlclByb3BlcnRpZXMgcHJvcGVydGll
czsKKyAgICB3Z3B1QWRhcHRlckdldFByb3BlcnRpZXMoYWRhcHRlciwgJnByb3BlcnRpZXMpOwor
ICAgIHJldHVybiBwcm9wZXJ0aWVzLmFkYXB0ZXJUeXBlID09IFdHUFVBZGFwdGVyVHlwZV9DUFU7
Cit9CisKK0FkYXB0ZXJJbXBsOjpBZGFwdGVySW1wbChXR1BVQWRhcHRlciBhZGFwdGVyKQorICAg
IDogQWRhcHRlcihhZGFwdGVyTmFtZShhZGFwdGVyKSwgc3VwcG9ydGVkRmVhdHVyZXMoYWRhcHRl
ciksIHN1cHBvcnRlZExpbWl0cyhhZGFwdGVyKSwgV2ViR1BVOjppc0ZhbGxiYWNrQWRhcHRlcihh
ZGFwdGVyKSkKKyAgICAsIG1fYmFja2luZyhhZGFwdGVyKQoreworfQorCitBZGFwdGVySW1wbDo6
fkFkYXB0ZXJJbXBsKCkKK3sKKyAgICB3Z3B1QWRhcHRlclJlbGVhc2UobV9iYWNraW5nKTsgCit9
CisKK3ZvaWQgcmVxdWVzdERldmljZUNhbGxiYWNrKFdHUFVSZXF1ZXN0RGV2aWNlU3RhdHVzIHN0
YXR1cywgV0dQVURldmljZSBkZXZpY2UsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIHZvaWQqIHVzZXJk
YXRhKQoreworICAgIGF1dG8gYWRhcHRlciA9IGFkb3B0UmVmKCpzdGF0aWNfY2FzdDxBZGFwdGVy
SW1wbCo+KHVzZXJkYXRhKSk7IC8vIGFkb3B0UmVmIGlzIGJhbGFuY2VkIGJ5IGxlYWtSZWYgaW4g
cmVxdWVzdERldmljZSgpIGJlbG93LiBXZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSdyZSB1
c2luZyBhIEMgQVBJIHdpdGggbm8gY29uY2VwdCBvZiByZWZlcmVuY2UgY291bnRpbmcgb3IgYmxv
Y2tzLgorICAgIGFkYXB0ZXItPnJlcXVlc3REZXZpY2VDYWxsYmFjayhzdGF0dXMsIGRldmljZSwg
bWVzc2FnZSk7Cit9CisKK3ZvaWQgQWRhcHRlckltcGw6OnJlcXVlc3REZXZpY2UoY29uc3QgRGV2
aWNlRGVzY3JpcHRvciYgZGVzY3JpcHRvciwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlZjxEZXZpY2U+
KT4mJiBjYWxsYmFjaykKK3sKKyAgICBSZWYgcHJvdGVjdGVkVGhpcygqdGhpcyk7CisKKyAgICBh
dXRvIGxhYmVsID0gZGVzY3JpcHRvci5sYWJlbC51dGY4KCk7CisKKyAgICBXR1BVRGV2aWNlRGVz
Y3JpcHRvckxhYmVsIGJhY2tpbmdEZXNjcmlwdG9yTGFiZWwgeworICAgICAgICB7CisgICAgICAg
ICAgICBudWxscHRyLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V0dQVVNUeXBlPihXR1BVU1R5
cGVfRGV2aWNlRGVzY3JpcHRvckxhYmVsKSwKKyAgICAgICAgfSwKKyAgICAgICAgbnVsbHB0ciwK
KyAgICAgICAgbGFiZWwuZGF0YSgpCisgICAgfTsKKworICAgIFZlY3RvcjxXR1BVRmVhdHVyZU5h
bWU+IGZlYXR1cmVzOworICAgIGZlYXR1cmVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGVzY3Jp
cHRvci5yZXF1aXJlZEZlYXR1cmVzLnNpemUoKSk7CisgICAgZm9yIChhdXRvIGZlYXR1cmVOYW1l
IDogZGVzY3JpcHRvci5yZXF1aXJlZEZlYXR1cmVzKQorICAgICAgICBmZWF0dXJlcy51bmNoZWNr
ZWRBcHBlbmQoY29udmVydFRvQmFja2luZyhmZWF0dXJlTmFtZSkpOworCisgICAgV0dQVVJlcXVp
cmVkTGltaXRzIGxpbWl0cyB7CisgICAgICAgIG51bGxwdHIsIHsKKyAgICAgICAgICAgIDAsIC8v
IG1heFRleHR1cmVEaW1lbnNpb24xRAorICAgICAgICAgICAgMCwgLy8gbWF4VGV4dHVyZURpbWVu
c2lvbjJECisgICAgICAgICAgICAwLCAvLyBtYXhUZXh0dXJlRGltZW5zaW9uM0QKKyAgICAgICAg
ICAgIDAsIC8vIG1heFRleHR1cmVBcnJheUxheWVycworICAgICAgICAgICAgMCwgLy8gbWF4Qmlu
ZEdyb3VwcworICAgICAgICAgICAgMCwgLy8gbWF4RHluYW1pY1VuaWZvcm1CdWZmZXJzUGVyUGlw
ZWxpbmVMYXlvdXQKKyAgICAgICAgICAgIDAsIC8vIG1heER5bmFtaWNTdG9yYWdlQnVmZmVyc1Bl
clBpcGVsaW5lTGF5b3V0CisgICAgICAgICAgICAwLCAvLyBtYXhTYW1wbGVkVGV4dHVyZXNQZXJT
aGFkZXJTdGFnZQorICAgICAgICAgICAgMCwgLy8gbWF4U2FtcGxlcnNQZXJTaGFkZXJTdGFnZQor
ICAgICAgICAgICAgMCwgLy8gbWF4U3RvcmFnZUJ1ZmZlcnNQZXJTaGFkZXJTdGFnZQorICAgICAg
ICAgICAgMCwgLy8gbWF4U3RvcmFnZVRleHR1cmVzUGVyU2hhZGVyU3RhZ2UKKyAgICAgICAgICAg
IDAsIC8vIG1heFVuaWZvcm1CdWZmZXJzUGVyU2hhZGVyU3RhZ2UKKyAgICAgICAgICAgIDAsIC8v
IG1heFVuaWZvcm1CdWZmZXJCaW5kaW5nU2l6ZQorICAgICAgICAgICAgMCwgLy8gbWF4U3RvcmFn
ZUJ1ZmZlckJpbmRpbmdTaXplCisgICAgICAgICAgICAwLCAvLyBtaW5Vbmlmb3JtQnVmZmVyT2Zm
c2V0QWxpZ25tZW50CisgICAgICAgICAgICAwLCAvLyBtaW5TdG9yYWdlQnVmZmVyT2Zmc2V0QWxp
Z25tZW50CisgICAgICAgICAgICAwLCAvLyBtYXhWZXJ0ZXhCdWZmZXJzCisgICAgICAgICAgICAw
LCAvLyBtYXhWZXJ0ZXhBdHRyaWJ1dGVzCisgICAgICAgICAgICAwLCAvLyBtYXhWZXJ0ZXhCdWZm
ZXJBcnJheVN0cmlkZQorICAgICAgICAgICAgMCwgLy8gbWF4SW50ZXJTdGFnZVNoYWRlckNvbXBv
bmVudHMKKyAgICAgICAgICAgIDAsIC8vIG1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlU2l6ZQor
ICAgICAgICAgICAgMCwgLy8gbWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwCisgICAg
ICAgICAgICAwLCAvLyBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVgKKyAgICAgICAgICAgIDAsIC8v
IG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWQorICAgICAgICAgICAgMCwgLy8gbWF4Q29tcHV0ZVdv
cmtncm91cFNpemVaCisgICAgICAgICAgICAwLCAvLyBtYXhDb21wdXRlV29ya2dyb3Vwc1BlckRp
bWVuc2lvbgorICAgICAgICB9LAorICAgIH07CisKKyAgICBXR1BVRGV2aWNlRGVzY3JpcHRvciBi
YWNraW5nRGVzY3JpcHRvciB7CisgICAgICAgICZiYWNraW5nRGVzY3JpcHRvckxhYmVsLmhlYWRl
ciwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGZlYXR1cmVzLnNpemUoKSksCisgICAg
ICAgIGZlYXR1cmVzLmRhdGEoKSwKKyAgICAgICAgJmxpbWl0cywKKyAgICB9OworCisgICAgbV9j
YWxsYmFja3MuYXBwZW5kKFdURk1vdmUoY2FsbGJhY2spKTsKKworICAgIHdncHVBZGFwdGVyUmVx
dWVzdERldmljZShtX2JhY2tpbmcsICZiYWNraW5nRGVzY3JpcHRvciwgJldlYkdQVTo6cmVxdWVz
dERldmljZUNhbGxiYWNrLCAmcHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpOyAvLyBsZWFrUmVmIGlz
IGJhbGFuY2VkIGJ5IGFkb3B0UmVmIGluIHJlcXVlc3REZXZpY2VDYWxsYmFjaygpIGFib3ZlLiBX
ZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSdyZSB1c2luZyBhIEMgQVBJIHdpdGggbm8gY29u
Y2VwdCBvZiByZWZlcmVuY2UgY291bnRpbmcgb3IgYmxvY2tzLgorfQorCit2b2lkIEFkYXB0ZXJJ
bXBsOjpyZXF1ZXN0RGV2aWNlQ2FsbGJhY2soV0dQVVJlcXVlc3REZXZpY2VTdGF0dXMsIFdHUFVE
ZXZpY2UgZGV2aWNlLCBjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIFVOVVNFRF9QQVJBTSht
ZXNzYWdlKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gbV9jYWxsYmFja3MudGFrZUZpcnN0KCk7Cisg
ICAgY2FsbGJhY2soRGV2aWNlSW1wbDo6Y3JlYXRlKGRldmljZSwgUmVmIHsgZmVhdHVyZXMoKSB9
LCBSZWYgeyBsaW1pdHMoKSB9KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1l
c3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNz
L1dlYkdQVS9JbXBsL1dlYkdQVUFkYXB0ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUFkYXB0ZXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTY0
ODlkNWRhYmE5NThjOGZmMGI4ZmFiODgyZDY3MGI0YjI2ZDZlMwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQWRhcHRl
ckltcGwuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJXZWJHUFVBZGFwdGVyLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorI2lu
Y2x1ZGUgPHd0Zi9EZXF1ZS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUg
eworCitjbGFzcyBBZGFwdGVySW1wbCBmaW5hbCA6IHB1YmxpYyBBZGFwdGVyIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmPEFkYXB0ZXJJbXBsPiBjcmVhdGUoV0dQVUFkYXB0ZXIgYWRhcHRlcikK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFkYXB0ZXJJbXBsKGFkYXB0ZXIp
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5BZGFwdGVySW1wbCgpOworCisgICAgV0dQVUFkYXB0
ZXIgYmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgorICAg
IGZyaWVuZCB2b2lkIHJlcXVlc3REZXZpY2VDYWxsYmFjayhXR1BVUmVxdWVzdERldmljZVN0YXR1
cywgV0dQVURldmljZSwgY29uc3QgY2hhciogbWVzc2FnZSwgdm9pZCogdXNlcmRhdGEpOworCisg
ICAgQWRhcHRlckltcGwoV0dQVUFkYXB0ZXIpOworCisgICAgQWRhcHRlckltcGwoY29uc3QgQWRh
cHRlckltcGwmKSA9IGRlbGV0ZTsKKyAgICBBZGFwdGVySW1wbChBZGFwdGVySW1wbCYmKSA9IGRl
bGV0ZTsKKyAgICBBZGFwdGVySW1wbCYgb3BlcmF0b3I9KGNvbnN0IEFkYXB0ZXJJbXBsJikgPSBk
ZWxldGU7CisgICAgQWRhcHRlckltcGwmIG9wZXJhdG9yPShBZGFwdGVySW1wbCYmKSA9IGRlbGV0
ZTsKKworICAgIHZvaWQgcmVxdWVzdERldmljZUNhbGxiYWNrKFdHUFVSZXF1ZXN0RGV2aWNlU3Rh
dHVzLCBXR1BVRGV2aWNlLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsKKyAgICB2b2lkIHJlcXVlc3RE
ZXZpY2UoY29uc3QgRGV2aWNlRGVzY3JpcHRvciYsIHN0ZDo6ZnVuY3Rpb248dm9pZChSZWY8RGV2
aWNlPik+JiYpIGZpbmFsOworCisgICAgV0dQVUFkYXB0ZXIgbV9iYWNraW5nIHsgbnVsbHB0ciB9
OworCisgICAgRGVxdWU8c3RkOjpmdW5jdGlvbjx2b2lkKFJlZjxEZXZpY2U+KT4+IG1fY2FsbGJh
Y2tzOworfTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2Vi
R1BVQmluZEdyb3VwSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dl
YkdQVS9JbXBsL1dlYkdQVUJpbmRHcm91cEltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFiMGFkNjc1OThh
N2FkMjE1OWE5NDg0NGYxNzRjMzAzNWNlYWZmYjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJpbmRHcm91cEltcGwu
Y3BwCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViR1BVQmluZEdyb3VwSW1wbC5oIgorCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQ
VUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitCaW5kR3Jv
dXBJbXBsOjpCaW5kR3JvdXBJbXBsKFdHUFVCaW5kR3JvdXAgYmluZEdyb3VwKQorICAgIDogbV9i
YWNraW5nKGJpbmRHcm91cCkKK3sKK30KKworQmluZEdyb3VwSW1wbDo6fkJpbmRHcm91cEltcGwo
KQoreworICAgIHdncHVCaW5kR3JvdXBSZWxlYXNlKG1fYmFja2luZyk7Cit9CisKK3ZvaWQgQmlu
ZEdyb3VwSW1wbDo6c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAg
IHdncHVCaW5kR3JvdXBTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVsLnV0ZjgoKS5kYXRhKCkpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVCaW5k
R3JvdXBJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBs
L1dlYkdQVUJpbmRHcm91cEltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMzViYmE5ZGI3MmQ2NTE5NmJhNmVh
NmEwNjJmMzcyM2UyZGIwYWY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFM
L3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVCaW5kR3JvdXBJbXBsLmgKQEAgLTAsMCAr
MSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVQmlu
ZEdyb3VwLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorCituYW1lc3BhY2UgUEFMIHsK
K25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBCaW5kR3JvdXBJbXBsIGZpbmFsIDogcHVibGlj
IEJpbmRHcm91cCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxCaW5kR3JvdXBJbXBsPiBjcmVh
dGUoV0dQVUJpbmRHcm91cCBiaW5kR3JvdXApCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBCaW5kR3JvdXBJbXBsKGJpbmRHcm91cCkpOworICAgIH0KKworICAgIHZpcnR1YWwg
fkJpbmRHcm91cEltcGwoKTsKKworICAgIFdHUFVCaW5kR3JvdXAgYmFja2luZygpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgorICAgIEJpbmRHcm91cEltcGwoV0dQVUJp
bmRHcm91cCk7CisKKyAgICBCaW5kR3JvdXBJbXBsKGNvbnN0IEJpbmRHcm91cEltcGwmKSA9IGRl
bGV0ZTsKKyAgICBCaW5kR3JvdXBJbXBsKEJpbmRHcm91cEltcGwmJikgPSBkZWxldGU7CisgICAg
QmluZEdyb3VwSW1wbCYgb3BlcmF0b3I9KGNvbnN0IEJpbmRHcm91cEltcGwmKSA9IGRlbGV0ZTsK
KyAgICBCaW5kR3JvdXBJbXBsJiBvcGVyYXRvcj0oQmluZEdyb3VwSW1wbCYmKSA9IGRlbGV0ZTsK
KworICAgIHZvaWQgc2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5hbDsKKworICAg
IFdHUFVCaW5kR3JvdXAgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQmluZEdyb3VwTGF5b3V0SW1wbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJp
bmRHcm91cExheW91dEltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2NGU3ZGI2NjAzNDRkZjhjNDZiMTM1
OGFhNDBlOGQ4MTkxZjQwYTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJpbmRHcm91cExheW91dEltcGwuY3BwCkBA
IC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2ViR1BVQmluZEdyb3VwTGF5b3V0SW1wbC5oIgorCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQ
VUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitCaW5kR3Jv
dXBMYXlvdXRJbXBsOjpCaW5kR3JvdXBMYXlvdXRJbXBsKFdHUFVCaW5kR3JvdXBMYXlvdXQgYmlu
ZEdyb3VwTGF5b3V0KQorICAgIDogbV9iYWNraW5nKGJpbmRHcm91cExheW91dCkKK3sKK30KKwor
QmluZEdyb3VwTGF5b3V0SW1wbDo6fkJpbmRHcm91cExheW91dEltcGwoKQoreworICAgIHdncHVC
aW5kR3JvdXBMYXlvdXRSZWxlYXNlKG1fYmFja2luZyk7Cit9CisKK3ZvaWQgQmluZEdyb3VwTGF5
b3V0SW1wbDo6c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAgIHdn
cHVCaW5kR3JvdXBMYXlvdXRTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVsLnV0ZjgoKS5kYXRhKCkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVC
aW5kR3JvdXBMYXlvdXRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dl
YkdQVS9JbXBsL1dlYkdQVUJpbmRHcm91cExheW91dEltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OWI2NGI5
ZDMxN2YwNWVlZDAyNmYwMzc4MTMzMzJhYTg1NjA4YTI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVCaW5kR3JvdXBM
YXlvdXRJbXBsLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiV2ViR1BVQmluZEdyb3VwTGF5b3V0LmgiCisjaW5jbHVkZSA8V2ViR1BVL1dl
YkdQVS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBC
aW5kR3JvdXBMYXlvdXRJbXBsIGZpbmFsIDogcHVibGljIEJpbmRHcm91cExheW91dCB7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZjxCaW5kR3JvdXBMYXlvdXRJbXBsPiBjcmVhdGUoV0dQVUJpbmRH
cm91cExheW91dCBiaW5kR3JvdXBMYXlvdXQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBCaW5kR3JvdXBMYXlvdXRJbXBsKGJpbmRHcm91cExheW91dCkpOworICAgIH0KKwor
ICAgIHZpcnR1YWwgfkJpbmRHcm91cExheW91dEltcGwoKTsKKworICAgIFdHUFVCaW5kR3JvdXBM
YXlvdXQgYmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgor
ICAgIEJpbmRHcm91cExheW91dEltcGwoV0dQVUJpbmRHcm91cExheW91dCk7CisKKyAgICBCaW5k
R3JvdXBMYXlvdXRJbXBsKGNvbnN0IEJpbmRHcm91cExheW91dEltcGwmKSA9IGRlbGV0ZTsKKyAg
ICBCaW5kR3JvdXBMYXlvdXRJbXBsKEJpbmRHcm91cExheW91dEltcGwmJikgPSBkZWxldGU7Cisg
ICAgQmluZEdyb3VwTGF5b3V0SW1wbCYgb3BlcmF0b3I9KGNvbnN0IEJpbmRHcm91cExheW91dElt
cGwmKSA9IGRlbGV0ZTsKKyAgICBCaW5kR3JvdXBMYXlvdXRJbXBsJiBvcGVyYXRvcj0oQmluZEdy
b3VwTGF5b3V0SW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIHZvaWQgc2V0TGFiZWxJbnRlcm5hbChj
b25zdCBTdHJpbmcmKSBmaW5hbDsKKworICAgIFdHUFVCaW5kR3JvdXBMYXlvdXQgbV9iYWNraW5n
IHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBX
ZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BV
L0ltcGwvV2ViR1BVQnVmZmVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBo
aWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJ1ZmZlckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4MmQ5M2Q1
Yjg3YmM0OWE5MTgxODIyMjIyZjM1YTAyOWRiYTAzMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJ1ZmZlckltcGwu
Y3BwCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViR1BVQnVmZmVySW1wbC5oIgorCisjaW5jbHVkZSAiV2ViR1BVQ29udmVydFRv
QmFja2luZy5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFVFeHQuaD4KKworbmFtZXNwYWNlIFBB
TCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworQnVmZmVySW1wbDo6QnVmZmVySW1wbChXR1BVQnVm
ZmVyIGJ1ZmZlcikKKyAgICA6IG1fYmFja2luZyhidWZmZXIpCit7Cit9CisKK0J1ZmZlckltcGw6
On5CdWZmZXJJbXBsKCkKK3sKKyAgICB3Z3B1QnVmZmVyUmVsZWFzZShtX2JhY2tpbmcpOworfQor
Cit2b2lkIG1hcENhbGxiYWNrKFdHUFVCdWZmZXJNYXBBc3luY1N0YXR1cyBzdGF0dXMsIHZvaWQq
IHVzZXJkYXRhKQoreworICAgIGF1dG8gYnVmZmVyID0gYWRvcHRSZWYoKnN0YXRpY19jYXN0PEJ1
ZmZlckltcGwqPih1c2VyZGF0YSkpOyAvLyBhZG9wdFJlZiBpcyBiYWxhbmNlZCBieSBsZWFrUmVm
IGluIG1hcEFzeW5jKCkgYmVsb3cuIFdlIGhhdmUgdG8gZG8gdGhpcyBiZWNhdXNlIHdlJ3JlIHVz
aW5nIGEgQyBBUEkgd2l0aCBubyBjb25jZXB0IG9mIHJlZmVyZW5jZSBjb3VudGluZyBvciBibG9j
a3MuCisgICAgYnVmZmVyLT5tYXBDYWxsYmFjayhzdGF0dXMpOworfQorCit2b2lkIEJ1ZmZlcklt
cGw6Om1hcEFzeW5jKE1hcE1vZGVGbGFncyBtYXBNb2RlRmxhZ3MsIHN0ZDo6b3B0aW9uYWw8U2l6
ZTY0PiBvZmZzZXQsIHN0ZDo6b3B0aW9uYWw8U2l6ZTY0PiBzaXplLCBzdGQ6OmZ1bmN0aW9uPHZv
aWQoKT4mJiBjYWxsYmFjaykKK3sKKyAgICBSZWYgcHJvdGVjdGVkVGhpcygqdGhpcyk7CisKKyAg
ICBhdXRvIGJhY2tpbmdNYXBNb2RlRmxhZ3MgPSBjb252ZXJ0TWFwTW9kZUZsYWdzVG9CYWNraW5n
KG1hcE1vZGVGbGFncyk7CisKKyAgICBhdXRvIHVzZWRPZmZzZXQgPSBvZmZzZXQudmFsdWVfb3Io
MCk7CisgICAgYXV0byB1c2VkU2l6ZSA9IHNpemUudmFsdWVfb3IoV0dQVV9XSE9MRV9TSVpFKTsK
KworICAgIG1fY2FsbGJhY2tzLmFwcGVuZChXVEZNb3ZlKGNhbGxiYWNrKSk7CisKKyAgICAvLyBG
SVhNRTogQ2hlY2sgdGhlIGNhc3RzLgorICAgIHdncHVCdWZmZXJNYXBBc3luYyhtX2JhY2tpbmcs
IGJhY2tpbmdNYXBNb2RlRmxhZ3MsIHN0YXRpY19jYXN0PHNpemVfdD4odXNlZE9mZnNldCksIHN0
YXRpY19jYXN0PHNpemVfdD4odXNlZFNpemUpLCAmV2ViR1BVOjptYXBDYWxsYmFjaywgJnByb3Rl
Y3RlZFRoaXMubGVha1JlZigpKTsgLy8gbGVha1JlZiBpcyBiYWxhbmNlZCBieSBhZG9wdFJlZiBp
biBtYXBDYWxsYmFjaygpIGFib3ZlLiBXZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSdyZSB1
c2luZyBhIEMgQVBJIHdpdGggbm8gY29uY2VwdCBvZiByZWZlcmVuY2UgY291bnRpbmcgb3IgYmxv
Y2tzLgorfQorCit2b2lkIEJ1ZmZlckltcGw6Om1hcENhbGxiYWNrKFdHUFVCdWZmZXJNYXBBc3lu
Y1N0YXR1cyBzdGF0dXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXR1cyk7CisgICAgYXV0byBj
YWxsYmFjayA9IG1fY2FsbGJhY2tzLnRha2VGaXJzdCgpOworICAgIGNhbGxiYWNrKCk7Cit9CisK
K2F1dG8gQnVmZmVySW1wbDo6Z2V0TWFwcGVkUmFuZ2Uoc3RkOjpvcHRpb25hbDxTaXplNjQ+IG9m
ZnNldCwgc3RkOjpvcHRpb25hbDxTaXplNjQ+IHNpemUpIC0+IE1hcHBlZFJhbmdlCit7CisgICAg
YXV0byB1c2VkT2Zmc2V0ID0gb2Zmc2V0LnZhbHVlX29yKDApOworICAgIGF1dG8gdXNlZFNpemUg
PSBzaXplLnZhbHVlX29yKFdHUFVfV0hPTEVfU0laRSk7CisgICAgLy8gRklYTUU6IENoZWNrIHRo
ZSBjYXN0cy4KKyAgICBhdXRvKiBwb2ludGVyID0gd2dwdUJ1ZmZlckdldE1hcHBlZFJhbmdlKG1f
YmFja2luZywgc3RhdGljX2Nhc3Q8c2l6ZV90Pih1c2VkT2Zmc2V0KSwgc3RhdGljX2Nhc3Q8c2l6
ZV90Pih1c2VkU2l6ZSkpOworICAgIC8vIEZJWE1FOiBDaGVjayB0aGUgdHlwZSBuYXJyb3dpbmcu
CisgICAgcmV0dXJuIHsgcG9pbnRlciwgc3RhdGljX2Nhc3Q8c2l6ZV90Pih1c2VkU2l6ZSkgfTsK
K30KKwordm9pZCBCdWZmZXJJbXBsOjp1bm1hcCgpCit7CisgICAgd2dwdUJ1ZmZlclVubWFwKG1f
YmFja2luZyk7Cit9CisKK3ZvaWQgQnVmZmVySW1wbDo6ZGVzdHJveSgpCit7CisgICAgd2dwdUJ1
ZmZlckRlc3Ryb3kobV9iYWNraW5nKTsKK30KKwordm9pZCBCdWZmZXJJbXBsOjpzZXRMYWJlbElu
dGVybmFsKGNvbnN0IFN0cmluZyYgbGFiZWwpCit7CisgICAgd2dwdUJ1ZmZlclNldExhYmVsKG1f
YmFja2luZywgbGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBBTAor
fSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJ1ZmZlckltcGwuaCBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQnVmZmVySW1wbC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmYzZjc1YTg2MjA3M2QwMDY2NWU4OGI4ZTc3NDk3ZWVjODllMzllYzUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQ
VUJ1ZmZlckltcGwuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJXZWJHUFVCdWZmZXIuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVLmg+
CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdl
YkdQVSB7CisKK2NsYXNzIEJ1ZmZlckltcGwgZmluYWwgOiBwdWJsaWMgQnVmZmVyIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUmVmPEJ1ZmZlckltcGw+IGNyZWF0ZShXR1BVQnVmZmVyIGJ1ZmZlcikK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJ1ZmZlckltcGwoYnVmZmVyKSk7
CisgICAgfQorCisgICAgdmlydHVhbCB+QnVmZmVySW1wbCgpOworCisgICAgV0dQVUJ1ZmZlciBi
YWNraW5nKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nOyB9CisKK3ByaXZhdGU6CisgICAgZnJp
ZW5kIHZvaWQgbWFwQ2FsbGJhY2soV0dQVUJ1ZmZlck1hcEFzeW5jU3RhdHVzLCB2b2lkKiB1c2Vy
ZGF0YSk7CisKKyAgICBCdWZmZXJJbXBsKFdHUFVCdWZmZXIpOworCisgICAgQnVmZmVySW1wbChj
b25zdCBCdWZmZXJJbXBsJikgPSBkZWxldGU7CisgICAgQnVmZmVySW1wbChCdWZmZXJJbXBsJiYp
ID0gZGVsZXRlOworICAgIEJ1ZmZlckltcGwmIG9wZXJhdG9yPShjb25zdCBCdWZmZXJJbXBsJikg
PSBkZWxldGU7CisgICAgQnVmZmVySW1wbCYgb3BlcmF0b3I9KEJ1ZmZlckltcGwmJikgPSBkZWxl
dGU7CisKKyAgICB2b2lkIG1hcENhbGxiYWNrKFdHUFVCdWZmZXJNYXBBc3luY1N0YXR1cyk7Cisg
ICAgdm9pZCBtYXBBc3luYyhNYXBNb2RlRmxhZ3MsIHN0ZDo6b3B0aW9uYWw8U2l6ZTY0PiBvZmZz
ZXQsIHN0ZDo6b3B0aW9uYWw8U2l6ZTY0PiBzaXplRm9yTWFwLCBzdGQ6OmZ1bmN0aW9uPHZvaWQo
KT4mJikgZmluYWw7CisgICAgTWFwcGVkUmFuZ2UgZ2V0TWFwcGVkUmFuZ2Uoc3RkOjpvcHRpb25h
bDxTaXplNjQ+IG9mZnNldCwgc3RkOjpvcHRpb25hbDxTaXplNjQ+KSBmaW5hbDsKKyAgICB2b2lk
IHVubWFwKCkgZmluYWw7CisKKyAgICB2b2lkIGRlc3Ryb3koKSBmaW5hbDsKKworICAgIHZvaWQg
c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5hbDsKKworICAgIFdHUFVCdWZmZXIg
bV9iYWNraW5nIHsgbnVsbHB0ciB9OworCisgICAgRGVxdWU8c3RkOjpmdW5jdGlvbjx2b2lkKCk+
PiBtX2NhbGxiYWNrczsKK307CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2Ug
V2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQ
VS9JbXBsL1dlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjE1NjU5ZmM2N2E3YjZkNDQ3ZjUxZWFkMGFlYmU5NTlhM2VhZDE1NzIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dl
YkdQVUNvbW1hbmRCdWZmZXJJbXBsLmNwcApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmgi
CisKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVRXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFt
ZXNwYWNlIFdlYkdQVSB7CisKK0NvbW1hbmRCdWZmZXJJbXBsOjpDb21tYW5kQnVmZmVySW1wbChX
R1BVQ29tbWFuZEJ1ZmZlciBjb21tYW5kQnVmZmVyKQorICAgIDogbV9iYWNraW5nKGNvbW1hbmRC
dWZmZXIpCit7Cit9CisKK0NvbW1hbmRCdWZmZXJJbXBsOjp+Q29tbWFuZEJ1ZmZlckltcGwoKQor
eworICAgIHdncHVDb21tYW5kQnVmZmVyUmVsZWFzZShtX2JhY2tpbmcpOworfQorCit2b2lkIENv
bW1hbmRCdWZmZXJJbXBsOjpzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYgbGFiZWwpCit7
CisgICAgd2dwdUNvbW1hbmRCdWZmZXJTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVsLnV0ZjgoKS5k
YXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9X
ZWJHUFVDb21tYW5kQnVmZmVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGlj
cy9XZWJHUFUvSW1wbC9XZWJHUFVDb21tYW5kQnVmZmVySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVhMmQ3
ZTg4NGNkZjFjZjE1OTcwYzkzYTBiNmI2ODQ2MzA1ZTliOTYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbW1hbmRC
dWZmZXJJbXBsLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiV2ViR1BVQ29tbWFuZEJ1ZmZlci5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJH
UFUuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworY2xhc3MgQ29t
bWFuZEJ1ZmZlckltcGwgZmluYWwgOiBwdWJsaWMgQ29tbWFuZEJ1ZmZlciB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFJlZjxDb21tYW5kQnVmZmVySW1wbD4gY3JlYXRlKFdHUFVDb21tYW5kQnVmZmVy
IGNvbW1hbmRCdWZmZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb21t
YW5kQnVmZmVySW1wbChjb21tYW5kQnVmZmVyKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+Q29t
bWFuZEJ1ZmZlckltcGwoKTsKKworICAgIFdHUFVDb21tYW5kQnVmZmVyIGJhY2tpbmcoKSBjb25z
dCB7IHJldHVybiBtX2JhY2tpbmc7IH0KKworcHJpdmF0ZToKKyAgICBDb21tYW5kQnVmZmVySW1w
bChXR1BVQ29tbWFuZEJ1ZmZlcik7CisKKyAgICBDb21tYW5kQnVmZmVySW1wbChjb25zdCBDb21t
YW5kQnVmZmVySW1wbCYpID0gZGVsZXRlOworICAgIENvbW1hbmRCdWZmZXJJbXBsKENvbW1hbmRC
dWZmZXJJbXBsJiYpID0gZGVsZXRlOworICAgIENvbW1hbmRCdWZmZXJJbXBsJiBvcGVyYXRvcj0o
Y29uc3QgQ29tbWFuZEJ1ZmZlckltcGwmKSA9IGRlbGV0ZTsKKyAgICBDb21tYW5kQnVmZmVySW1w
bCYgb3BlcmF0b3I9KENvbW1hbmRCdWZmZXJJbXBsJiYpID0gZGVsZXRlOworCisgICAgdm9pZCBz
ZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYpIGZpbmFsOworCisgICAgV0dQVUNvbW1hbmRC
dWZmZXIgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9
IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwv
Z3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tbWFuZEVuY29kZXJJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tbWFuZEVuY29k
ZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MjIzMjY0ZmM1NzI4OGQ1ZmQ5NWJmNTM2NTM1MmE3MWFj
ZWU5ODA0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGlj
cy9XZWJHUFUvSW1wbC9XZWJHUFVDb21tYW5kRW5jb2RlckltcGwuY3BwCkBAIC0wLDAgKzEsMjc4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkdQVUNv
bW1hbmRFbmNvZGVySW1wbC5oIgorCisjaW5jbHVkZSAiV2ViR1BVQnVmZmVySW1wbC5oIgorI2lu
Y2x1ZGUgIldlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVQ29tcHV0
ZVBhc3NFbmNvZGVySW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVUNvbnZlcnRUb0JhY2tpbmcuaCIK
KyNpbmNsdWRlICJXZWJHUFVRdWVyeVNldEltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVSZW5kZXJQ
YXNzRW5jb2RlckltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJlSW1wbC5oIgorI2luY2x1
ZGUgIldlYkdQVVRleHR1cmVWaWV3SW1wbC5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFVFeHQu
aD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworQ29tbWFuZEVuY29k
ZXJJbXBsOjpDb21tYW5kRW5jb2RlckltcGwoV0dQVUNvbW1hbmRFbmNvZGVyIENvbW1hbmRFbmNv
ZGVyKQorICAgIDogbV9iYWNraW5nKENvbW1hbmRFbmNvZGVyKQoreworfQorCitDb21tYW5kRW5j
b2RlckltcGw6On5Db21tYW5kRW5jb2RlckltcGwoKQoreworICAgIHdncHVDb21tYW5kRW5jb2Rl
clJlbGVhc2UobV9iYWNraW5nKTsKK30KKworUmVmPFJlbmRlclBhc3NFbmNvZGVyPiBDb21tYW5k
RW5jb2RlckltcGw6OmJlZ2luUmVuZGVyUGFzcyhjb25zdCBSZW5kZXJQYXNzRGVzY3JpcHRvciYg
ZGVzY3JpcHRvcikKK3sKKyAgICBWZWN0b3I8V0dQVVJlbmRlclBhc3NDb2xvckF0dGFjaG1lbnQ+
IGNvbG9yQXR0YWNobWVudHM7CisgICAgZm9yIChjb25zdCBhdXRvJiBjb2xvckF0dGFjaG1lbnQg
OiBkZXNjcmlwdG9yLmNvbG9yQXR0YWNobWVudHMpIHsKKyAgICAgICAgY29sb3JBdHRhY2htZW50
cy5hcHBlbmQoV0dQVVJlbmRlclBhc3NDb2xvckF0dGFjaG1lbnQgeworICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8Y29uc3QgVGV4dHVyZVZpZXdJbXBsJj4oY29sb3JBdHRhY2htZW50LnZpZXcpLmJh
Y2tpbmcoKSwKKyAgICAgICAgICAgIGNvbG9yQXR0YWNobWVudC5yZXNvbHZlVGFyZ2V0ID8gc3Rh
dGljX2Nhc3Q8Y29uc3QgVGV4dHVyZVZpZXdJbXBsJj4oKmNvbG9yQXR0YWNobWVudC5yZXNvbHZl
VGFyZ2V0KS5iYWNraW5nKCkgOiBudWxscHRyLAorICAgICAgICAgICAgc3RkOjpob2xkc19hbHRl
cm5hdGl2ZTxMb2FkT3A+KGNvbG9yQXR0YWNobWVudC5sb2FkVmFsdWUpID8gY29udmVydFRvQmFj
a2luZyhzdGQ6OmdldDxMb2FkT3A+KGNvbG9yQXR0YWNobWVudC5sb2FkVmFsdWUpKSA6IFdHUFVM
b2FkT3BfQ2xlYXIsCisgICAgICAgICAgICBjb252ZXJ0VG9CYWNraW5nKGNvbG9yQXR0YWNobWVu
dC5zdG9yZU9wKSwKKyAgICAgICAgICAgIFdURjo6c3dpdGNoT24oY29sb3JBdHRhY2htZW50Lmxv
YWRWYWx1ZSwgW10gKExvYWRPcCkgLT4gV0dQVUNvbG9yIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4geyAwLCAwLCAwLCAwIH07CisgICAgICAgICAgICB9LCBbXSAoY29uc3QgVmVjdG9yPGRvdWJs
ZT4mIHZlY3RvcikgLT4gV0dQVUNvbG9yIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gV0dQVUNv
bG9yIHsKKyAgICAgICAgICAgICAgICAgICAgdmVjdG9yLnNpemUoKSA+IDAgPyB2ZWN0b3JbMF0g
OiAwLAorICAgICAgICAgICAgICAgICAgICB2ZWN0b3Iuc2l6ZSgpID4gMSA/IHZlY3RvclsxXSA6
IDAsCisgICAgICAgICAgICAgICAgICAgIHZlY3Rvci5zaXplKCkgPiAyID8gdmVjdG9yWzJdIDog
MCwKKyAgICAgICAgICAgICAgICAgICAgdmVjdG9yLnNpemUoKSA+IDMgPyB2ZWN0b3JbM10gOiAw
LAorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9LCBbXSAoY29uc3QgQ29sb3JEaWN0
JiBjb2xvcikgLT4gV0dQVUNvbG9yIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gV0dQVUNvbG9y
IHsKKyAgICAgICAgICAgICAgICAgICAgY29sb3IuciwKKyAgICAgICAgICAgICAgICAgICAgY29s
b3IuZywKKyAgICAgICAgICAgICAgICAgICAgY29sb3IuYiwKKyAgICAgICAgICAgICAgICAgICAg
Y29sb3IuYSwKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSksCisgICAgICAgIH0p
OworICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8V0dQVVJlbmRlclBhc3NEZXB0aFN0ZW5jaWxB
dHRhY2htZW50PiBkZXB0aFN0ZW5jaWxBdHRhY2htZW50OworICAgIGlmIChkZXNjcmlwdG9yLmRl
cHRoU3RlbmNpbEF0dGFjaG1lbnQpIHsKKyAgICAgICAgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9
IFdHUFVSZW5kZXJQYXNzRGVwdGhTdGVuY2lsQXR0YWNobWVudCB7CisgICAgICAgICAgICBzdGF0
aWNfY2FzdDxjb25zdCBUZXh0dXJlVmlld0ltcGwmPihkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbEF0
dGFjaG1lbnQtPnZpZXcpLmJhY2tpbmcoKSwKKyAgICAgICAgICAgIHN0ZDo6aG9sZHNfYWx0ZXJu
YXRpdmU8TG9hZE9wPihkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQtPmRlcHRoTG9h
ZFZhbHVlKSA/IGNvbnZlcnRUb0JhY2tpbmcoc3RkOjpnZXQ8TG9hZE9wPihkZXNjcmlwdG9yLmRl
cHRoU3RlbmNpbEF0dGFjaG1lbnQtPmRlcHRoTG9hZFZhbHVlKSkgOiBXR1BVTG9hZE9wX0NsZWFy
LAorICAgICAgICAgICAgY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbEF0
dGFjaG1lbnQtPmRlcHRoU3RvcmVPcCksCisgICAgICAgICAgICBXVEY6OnN3aXRjaE9uKGRlc2Ny
aXB0b3IuZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+ZGVwdGhMb2FkVmFsdWUsIFtdIChMb2FkT3Ap
IC0+IGZsb2F0IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0sIFtd
IChmbG9hdCBjbGVhckRlcHRoKSAtPiBmbG9hdCB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNs
ZWFyRGVwdGg7CisgICAgICAgICAgICB9KSwKKyAgICAgICAgICAgIGRlc2NyaXB0b3IuZGVwdGhT
dGVuY2lsQXR0YWNobWVudC0+ZGVwdGhSZWFkT25seSwKKyAgICAgICAgICAgIHN0ZDo6aG9sZHNf
YWx0ZXJuYXRpdmU8TG9hZE9wPihkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQtPnN0
ZW5jaWxMb2FkVmFsdWUpID8gY29udmVydFRvQmFja2luZyhzdGQ6OmdldDxMb2FkT3A+KGRlc2Ny
aXB0b3IuZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+c3RlbmNpbExvYWRWYWx1ZSkpIDogV0dQVUxv
YWRPcF9DbGVhciwKKyAgICAgICAgICAgIGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci5kZXB0
aFN0ZW5jaWxBdHRhY2htZW50LT5zdGVuY2lsU3RvcmVPcCksCisgICAgICAgICAgICBXVEY6OnN3
aXRjaE9uKGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+c3RlbmNpbExvYWRWYWx1
ZSwgW10gKExvYWRPcCkgLT4gdWludDMyX3QgeworICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgfSwgW10gKFN0ZW5jaWxWYWx1ZSBjbGVhclN0ZW5jaWwpIC0+IHVpbnQzMl90
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xlYXJTdGVuY2lsOworICAgICAgICAgICAgfSks
CisgICAgICAgICAgICBkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQtPnN0ZW5jaWxS
ZWFkT25seSwKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBhdXRvIGxhYmVsID0gZGVzY3JpcHRv
ci5sYWJlbC51dGY4KCk7CisKKyAgICBXR1BVUmVuZGVyUGFzc0Rlc2NyaXB0b3IgYmFja2luZ0Rl
c2NyaXB0b3IgeworICAgICAgICBudWxscHRyLAorICAgICAgICBsYWJlbC5kYXRhKCksCisgICAg
ICAgIHN0YXRpY19jYXN0PHVpbnQzMl90Pihjb2xvckF0dGFjaG1lbnRzLnNpemUoKSksCisgICAg
ICAgIGNvbG9yQXR0YWNobWVudHMuZGF0YSgpLAorICAgICAgICBkZXB0aFN0ZW5jaWxBdHRhY2ht
ZW50ID8gJmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQudmFsdWUoKSA6IG51bGxwdHIsCisgICAgICAg
IGRlc2NyaXB0b3Iub2NjbHVzaW9uUXVlcnlTZXQgPyBzdGF0aWNfY2FzdDxjb25zdCBRdWVyeVNl
dEltcGwmPigqZGVzY3JpcHRvci5vY2NsdXNpb25RdWVyeVNldCkuYmFja2luZygpIDogbnVsbHB0
ciwKKyAgICB9OworCisgICAgcmV0dXJuIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6Y3JlYXRlKHdn
cHVDb21tYW5kRW5jb2RlckJlZ2luUmVuZGVyUGFzcyhtX2JhY2tpbmcsICZiYWNraW5nRGVzY3Jp
cHRvcikpOworfQorCitSZWY8Q29tcHV0ZVBhc3NFbmNvZGVyPiBDb21tYW5kRW5jb2RlckltcGw6
OmJlZ2luQ29tcHV0ZVBhc3MoY29uc3Qgc3RkOjpvcHRpb25hbDxDb21wdXRlUGFzc0Rlc2NyaXB0
b3I+JiBkZXNjcmlwdG9yKQoreworICAgIENTdHJpbmcgbGFiZWwgPSBkZXNjcmlwdG9yID8gZGVz
Y3JpcHRvci0+bGFiZWwudXRmOCgpIDogQ1N0cmluZygiIik7CisKKyAgICBXR1BVQ29tcHV0ZVBh
c3NEZXNjcmlwdG9yIGJhY2tpbmdEZXNjcmlwdG9yIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAg
ICAgbGFiZWwuZGF0YSgpLAorICAgIH07CisKKyAgICByZXR1cm4gQ29tcHV0ZVBhc3NFbmNvZGVy
SW1wbDo6Y3JlYXRlKHdncHVDb21tYW5kRW5jb2RlckJlZ2luQ29tcHV0ZVBhc3MobV9iYWNraW5n
LCAmYmFja2luZ0Rlc2NyaXB0b3IpKTsKK30KKwordm9pZCBDb21tYW5kRW5jb2RlckltcGw6OmNv
cHlCdWZmZXJUb0J1ZmZlcigKKyAgICBjb25zdCBCdWZmZXImIHNvdXJjZSwKKyAgICBTaXplNjQg
c291cmNlT2Zmc2V0LAorICAgIGNvbnN0IEJ1ZmZlciYgZGVzdGluYXRpb24sCisgICAgU2l6ZTY0
IGRlc3RpbmF0aW9uT2Zmc2V0LAorICAgIFNpemU2NCBzaXplKQoreworICAgIHdncHVDb21tYW5k
RW5jb2RlckNvcHlCdWZmZXJUb0J1ZmZlcihtX2JhY2tpbmcsIHN0YXRpY19jYXN0PGNvbnN0IEJ1
ZmZlckltcGwmPihzb3VyY2UpLmJhY2tpbmcoKSwgc291cmNlT2Zmc2V0LCBzdGF0aWNfY2FzdDxj
b25zdCBCdWZmZXJJbXBsJj4oZGVzdGluYXRpb24pLmJhY2tpbmcoKSwgZGVzdGluYXRpb25PZmZz
ZXQsIHNpemUpOworfQorCit2b2lkIENvbW1hbmRFbmNvZGVySW1wbDo6Y29weUJ1ZmZlclRvVGV4
dHVyZSgKKyAgICBjb25zdCBJbWFnZUNvcHlCdWZmZXImIHNvdXJjZSwKKyAgICBjb25zdCBJbWFn
ZUNvcHlUZXh0dXJlJiBkZXN0aW5hdGlvbiwKKyAgICBjb25zdCBFeHRlbnQzRCYgY29weVNpemUp
Cit7CisgICAgV0dQVUltYWdlQ29weUJ1ZmZlciBiYWNraW5nU291cmNlIHsKKyAgICAgICAgbnVs
bHB0ciwgeworICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgIHNvdXJjZS5vZmZzZXQs
CisgICAgICAgICAgICBzb3VyY2UuYnl0ZXNQZXJSb3cudmFsdWVfb3IoMCksCisgICAgICAgICAg
ICBzb3VyY2Uucm93c1BlckltYWdlLnZhbHVlX29yKDApLAorICAgICAgICB9LAorICAgICAgICBz
dGF0aWNfY2FzdDxjb25zdCBCdWZmZXJJbXBsJj4oc291cmNlLmJ1ZmZlcikuYmFja2luZygpLAor
ICAgIH07CisKKyAgICBXR1BVSW1hZ2VDb3B5VGV4dHVyZSBiYWNraW5nRGVzdGluYXRpb24gewor
ICAgICAgICBudWxscHRyLAorICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBUZXh0dXJlSW1wbCY+
KGRlc3RpbmF0aW9uLnRleHR1cmUpLmJhY2tpbmcoKSwKKyAgICAgICAgZGVzdGluYXRpb24ubWlw
TGV2ZWwsCisgICAgICAgIGRlc3RpbmF0aW9uLm9yaWdpbiA/IGNvbnZlcnRUb0JhY2tpbmcoKmRl
c3RpbmF0aW9uLm9yaWdpbikgOiBXR1BVT3JpZ2luM0QgeyAwLCAwLCAwIH0sCisgICAgICAgIGNv
bnZlcnRUb0JhY2tpbmcoZGVzdGluYXRpb24uYXNwZWN0KSwKKyAgICB9OworCisgICAgV0dQVUV4
dGVudDNEIGJhY2tpbmdDb3B5U2l6ZSA9IGNvbnZlcnRUb0JhY2tpbmcoY29weVNpemUpOworCisg
ICAgd2dwdUNvbW1hbmRFbmNvZGVyQ29weUJ1ZmZlclRvVGV4dHVyZShtX2JhY2tpbmcsICZiYWNr
aW5nU291cmNlLCAmYmFja2luZ0Rlc3RpbmF0aW9uLCAmYmFja2luZ0NvcHlTaXplKTsKK30KKwor
dm9pZCBDb21tYW5kRW5jb2RlckltcGw6OmNvcHlUZXh0dXJlVG9CdWZmZXIoCisgICAgY29uc3Qg
SW1hZ2VDb3B5VGV4dHVyZSYgc291cmNlLAorICAgIGNvbnN0IEltYWdlQ29weUJ1ZmZlciYgZGVz
dGluYXRpb24sCisgICAgY29uc3QgRXh0ZW50M0QmIGNvcHlTaXplKQoreworICAgIFdHUFVJbWFn
ZUNvcHlUZXh0dXJlIGJhY2tpbmdTb3VyY2UgeworICAgICAgICBudWxscHRyLAorICAgICAgICBz
dGF0aWNfY2FzdDxjb25zdCBUZXh0dXJlSW1wbCY+KHNvdXJjZS50ZXh0dXJlKS5iYWNraW5nKCks
CisgICAgICAgIHNvdXJjZS5taXBMZXZlbCwKKyAgICAgICAgc291cmNlLm9yaWdpbiA/IGNvbnZl
cnRUb0JhY2tpbmcoKnNvdXJjZS5vcmlnaW4pIDogV0dQVU9yaWdpbjNEIHsgMCwgMCwgMCB9LAor
ICAgICAgICBjb252ZXJ0VG9CYWNraW5nKHNvdXJjZS5hc3BlY3QpLAorICAgIH07CisKKyAgICBX
R1BVSW1hZ2VDb3B5QnVmZmVyIGJhY2tpbmdEZXN0aW5hdGlvbiB7CisgICAgICAgIG51bGxwdHIs
IHsKKyAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICBkZXN0aW5hdGlvbi5vZmZzZXQs
CisgICAgICAgICAgICBkZXN0aW5hdGlvbi5ieXRlc1BlclJvdy52YWx1ZV9vcigwKSwKKyAgICAg
ICAgICAgIGRlc3RpbmF0aW9uLnJvd3NQZXJJbWFnZS52YWx1ZV9vcigwKSwKKyAgICAgICAgfSwK
KyAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgQnVmZmVySW1wbCY+KGRlc3RpbmF0aW9uLmJ1ZmZl
cikuYmFja2luZygpLAorICAgIH07CisKKyAgICBXR1BVRXh0ZW50M0QgYmFja2luZ0NvcHlTaXpl
ID0gY29udmVydFRvQmFja2luZyhjb3B5U2l6ZSk7CisKKyAgICB3Z3B1Q29tbWFuZEVuY29kZXJD
b3B5VGV4dHVyZVRvQnVmZmVyKG1fYmFja2luZywgJmJhY2tpbmdTb3VyY2UsICZiYWNraW5nRGVz
dGluYXRpb24sICZiYWNraW5nQ29weVNpemUpOworfQorCit2b2lkIENvbW1hbmRFbmNvZGVySW1w
bDo6Y29weVRleHR1cmVUb1RleHR1cmUoCisgICAgY29uc3QgSW1hZ2VDb3B5VGV4dHVyZSYgc291
cmNlLAorICAgIGNvbnN0IEltYWdlQ29weVRleHR1cmUmIGRlc3RpbmF0aW9uLAorICAgIGNvbnN0
IEV4dGVudDNEJiBjb3B5U2l6ZSkKK3sKKyAgICBXR1BVSW1hZ2VDb3B5VGV4dHVyZSBiYWNraW5n
U291cmNlIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgVGV4
dHVyZUltcGwmPihzb3VyY2UudGV4dHVyZSkuYmFja2luZygpLAorICAgICAgICBzb3VyY2UubWlw
TGV2ZWwsCisgICAgICAgIHNvdXJjZS5vcmlnaW4gPyBjb252ZXJ0VG9CYWNraW5nKCpzb3VyY2Uu
b3JpZ2luKSA6IFdHUFVPcmlnaW4zRCB7IDAsIDAsIDAgfSwKKyAgICAgICAgY29udmVydFRvQmFj
a2luZyhzb3VyY2UuYXNwZWN0KSwKKyAgICB9OworCisgICAgV0dQVUltYWdlQ29weVRleHR1cmUg
YmFja2luZ0Rlc3RpbmF0aW9uIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgc3RhdGljX2Nh
c3Q8Y29uc3QgVGV4dHVyZUltcGwmPihkZXN0aW5hdGlvbi50ZXh0dXJlKS5iYWNraW5nKCksCisg
ICAgICAgIGRlc3RpbmF0aW9uLm1pcExldmVsLAorICAgICAgICBkZXN0aW5hdGlvbi5vcmlnaW4g
PyBjb252ZXJ0VG9CYWNraW5nKCpkZXN0aW5hdGlvbi5vcmlnaW4pIDogV0dQVU9yaWdpbjNEIHsg
MCwgMCwgMCB9LAorICAgICAgICBjb252ZXJ0VG9CYWNraW5nKGRlc3RpbmF0aW9uLmFzcGVjdCks
CisgICAgfTsKKworICAgIFdHUFVFeHRlbnQzRCBiYWNraW5nQ29weVNpemUgPSBjb252ZXJ0VG9C
YWNraW5nKGNvcHlTaXplKTsKKworICAgIHdncHVDb21tYW5kRW5jb2RlckNvcHlUZXh0dXJlVG9U
ZXh0dXJlKG1fYmFja2luZywgJmJhY2tpbmdTb3VyY2UsICZiYWNraW5nRGVzdGluYXRpb24sICZi
YWNraW5nQ29weVNpemUpOworfQorCit2b2lkIENvbW1hbmRFbmNvZGVySW1wbDo6ZmlsbEJ1ZmZl
cigKKyAgICBjb25zdCBCdWZmZXImIGRlc3RpbmF0aW9uLAorICAgIFNpemU2NCBkZXN0aW5hdGlv
bk9mZnNldCwKKyAgICBTaXplNjQgc2l6ZSkKK3sKKyAgICB3Z3B1Q29tbWFuZEVuY29kZXJGaWxs
QnVmZmVyKG1fYmFja2luZywgc3RhdGljX2Nhc3Q8Y29uc3QgQnVmZmVySW1wbCY+KGRlc3RpbmF0
aW9uKS5iYWNraW5nKCksIGRlc3RpbmF0aW9uT2Zmc2V0LCBzaXplKTsKK30KKwordm9pZCBDb21t
YW5kRW5jb2RlckltcGw6OnB1c2hEZWJ1Z0dyb3VwKFN0cmluZyYmIGdyb3VwTGFiZWwpCit7Cisg
ICAgd2dwdUNvbW1hbmRFbmNvZGVyUHVzaERlYnVnR3JvdXAobV9iYWNraW5nLCBncm91cExhYmVs
LnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIENvbW1hbmRFbmNvZGVySW1wbDo6cG9wRGVidWdH
cm91cCgpCit7CisgICAgd2dwdUNvbW1hbmRFbmNvZGVyUG9wRGVidWdHcm91cChtX2JhY2tpbmcp
OworfQorCit2b2lkIENvbW1hbmRFbmNvZGVySW1wbDo6aW5zZXJ0RGVidWdNYXJrZXIoU3RyaW5n
JiYgbWFya2VyTGFiZWwpCit7CisgICAgd2dwdUNvbW1hbmRFbmNvZGVySW5zZXJ0RGVidWdNYXJr
ZXIobV9iYWNraW5nLCBtYXJrZXJMYWJlbC51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBDb21t
YW5kRW5jb2RlckltcGw6OndyaXRlVGltZXN0YW1wKGNvbnN0IFF1ZXJ5U2V0JiBxdWVyeVNldCwg
U2l6ZTMyIHF1ZXJ5SW5kZXgpCit7CisgICAgd2dwdUNvbW1hbmRFbmNvZGVyV3JpdGVUaW1lc3Rh
bXAobV9iYWNraW5nLCBzdGF0aWNfY2FzdDxjb25zdCBRdWVyeVNldEltcGwmPihxdWVyeVNldCku
YmFja2luZygpLCBxdWVyeUluZGV4KTsKK30KKwordm9pZCBDb21tYW5kRW5jb2RlckltcGw6OnJl
c29sdmVRdWVyeVNldCgKKyAgICBjb25zdCBRdWVyeVNldCYgcXVlcnlTZXQsCisgICAgU2l6ZTMy
IGZpcnN0UXVlcnksCisgICAgU2l6ZTMyIHF1ZXJ5Q291bnQsCisgICAgY29uc3QgQnVmZmVyJiBk
ZXN0aW5hdGlvbiwKKyAgICBTaXplNjQgZGVzdGluYXRpb25PZmZzZXQpCit7CisgICAgd2dwdUNv
bW1hbmRFbmNvZGVyUmVzb2x2ZVF1ZXJ5U2V0KG1fYmFja2luZywgc3RhdGljX2Nhc3Q8Y29uc3Qg
UXVlcnlTZXRJbXBsJj4ocXVlcnlTZXQpLmJhY2tpbmcoKSwgZmlyc3RRdWVyeSwgcXVlcnlDb3Vu
dCwgc3RhdGljX2Nhc3Q8Y29uc3QgQnVmZmVySW1wbCY+KGRlc3RpbmF0aW9uKS5iYWNraW5nKCks
IGRlc3RpbmF0aW9uT2Zmc2V0KTsKK30KKworUmVmPENvbW1hbmRCdWZmZXI+IENvbW1hbmRFbmNv
ZGVySW1wbDo6ZmluaXNoKGNvbnN0IENvbW1hbmRCdWZmZXJEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
KQoreworICAgIGF1dG8gbGFiZWwgPSBkZXNjcmlwdG9yLmxhYmVsLnV0ZjgoKTsKKworICAgIFdH
UFVDb21tYW5kQnVmZmVyRGVzY3JpcHRvciBiYWNraW5nRGVzY3JpcHRvciB7CisgICAgICAgIG51
bGxwdHIsCisgICAgICAgIGxhYmVsLmRhdGEoKSwKKyAgICB9OworCisgICAgcmV0dXJuIENvbW1h
bmRCdWZmZXJJbXBsOjpjcmVhdGUod2dwdUNvbW1hbmRFbmNvZGVyRmluaXNoKG1fYmFja2luZywg
JmJhY2tpbmdEZXNjcmlwdG9yKSk7Cit9CisKK3ZvaWQgQ29tbWFuZEVuY29kZXJJbXBsOjpzZXRM
YWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYgbGFiZWwpCit7CisgICAgd2dwdUNvbW1hbmRFbmNv
ZGVyU2V0TGFiZWwobV9iYWNraW5nLCBsYWJlbC51dGY4KCkuZGF0YSgpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tbWFuZEVuY29kZXJJ
bXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQ
VUNvbW1hbmRFbmNvZGVySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4MGFhYWM4NjA3MTJlNGM3NWFjZTE5
MTc3MTc2YzQxNTI5YWE4MmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbW1hbmRFbmNvZGVySW1wbC5oCkBAIC0w
LDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJXZWJH
UFVDb21tYW5kRW5jb2Rlci5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFUuaD4KKworbmFtZXNw
YWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworY2xhc3MgQ29tbWFuZEVuY29kZXJJbXBs
IGZpbmFsIDogcHVibGljIENvbW1hbmRFbmNvZGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PENvbW1hbmRFbmNvZGVySW1wbD4gY3JlYXRlKFdHUFVDb21tYW5kRW5jb2RlciBDb21tYW5kRW5j
b2RlcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbW1hbmRFbmNvZGVy
SW1wbChDb21tYW5kRW5jb2RlcikpOworICAgIH0KKworICAgIHZpcnR1YWwgfkNvbW1hbmRFbmNv
ZGVySW1wbCgpOworCisgICAgV0dQVUNvbW1hbmRFbmNvZGVyIGJhY2tpbmcoKSBjb25zdCB7IHJl
dHVybiBtX2JhY2tpbmc7IH0KKworcHJpdmF0ZToKKyAgICBDb21tYW5kRW5jb2RlckltcGwoV0dQ
VUNvbW1hbmRFbmNvZGVyKTsKKworICAgIENvbW1hbmRFbmNvZGVySW1wbChjb25zdCBDb21tYW5k
RW5jb2RlckltcGwmKSA9IGRlbGV0ZTsKKyAgICBDb21tYW5kRW5jb2RlckltcGwoQ29tbWFuZEVu
Y29kZXJJbXBsJiYpID0gZGVsZXRlOworICAgIENvbW1hbmRFbmNvZGVySW1wbCYgb3BlcmF0b3I9
KGNvbnN0IENvbW1hbmRFbmNvZGVySW1wbCYpID0gZGVsZXRlOworICAgIENvbW1hbmRFbmNvZGVy
SW1wbCYgb3BlcmF0b3I9KENvbW1hbmRFbmNvZGVySW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIFJl
ZjxSZW5kZXJQYXNzRW5jb2Rlcj4gYmVnaW5SZW5kZXJQYXNzKGNvbnN0IFJlbmRlclBhc3NEZXNj
cmlwdG9yJikgZmluYWw7CisgICAgUmVmPENvbXB1dGVQYXNzRW5jb2Rlcj4gYmVnaW5Db21wdXRl
UGFzcyhjb25zdCBzdGQ6Om9wdGlvbmFsPENvbXB1dGVQYXNzRGVzY3JpcHRvcj4mKSBmaW5hbDsK
KworICAgIHZvaWQgY29weUJ1ZmZlclRvQnVmZmVyKAorICAgICAgICBjb25zdCBCdWZmZXImIHNv
dXJjZSwKKyAgICAgICAgU2l6ZTY0IHNvdXJjZU9mZnNldCwKKyAgICAgICAgY29uc3QgQnVmZmVy
JiBkZXN0aW5hdGlvbiwKKyAgICAgICAgU2l6ZTY0IGRlc3RpbmF0aW9uT2Zmc2V0LAorICAgICAg
ICBTaXplNjQpIGZpbmFsOworCisgICAgdm9pZCBjb3B5QnVmZmVyVG9UZXh0dXJlKAorICAgICAg
ICBjb25zdCBJbWFnZUNvcHlCdWZmZXImIHNvdXJjZSwKKyAgICAgICAgY29uc3QgSW1hZ2VDb3B5
VGV4dHVyZSYgZGVzdGluYXRpb24sCisgICAgICAgIGNvbnN0IEV4dGVudDNEJiBjb3B5U2l6ZSkg
ZmluYWw7CisKKyAgICB2b2lkIGNvcHlUZXh0dXJlVG9CdWZmZXIoCisgICAgICAgIGNvbnN0IElt
YWdlQ29weVRleHR1cmUmIHNvdXJjZSwKKyAgICAgICAgY29uc3QgSW1hZ2VDb3B5QnVmZmVyJiBk
ZXN0aW5hdGlvbiwKKyAgICAgICAgY29uc3QgRXh0ZW50M0QmIGNvcHlTaXplKSBmaW5hbDsKKwor
ICAgIHZvaWQgY29weVRleHR1cmVUb1RleHR1cmUoCisgICAgICAgIGNvbnN0IEltYWdlQ29weVRl
eHR1cmUmIHNvdXJjZSwKKyAgICAgICAgY29uc3QgSW1hZ2VDb3B5VGV4dHVyZSYgZGVzdGluYXRp
b24sCisgICAgICAgIGNvbnN0IEV4dGVudDNEJiBjb3B5U2l6ZSkgZmluYWw7CisKKyAgICB2b2lk
IGZpbGxCdWZmZXIoCisgICAgICAgIGNvbnN0IEJ1ZmZlciYgZGVzdGluYXRpb24sCisgICAgICAg
IFNpemU2NCBkZXN0aW5hdGlvbk9mZnNldCwKKyAgICAgICAgU2l6ZTY0KSBmaW5hbDsKKworICAg
IHZvaWQgcHVzaERlYnVnR3JvdXAoU3RyaW5nJiYgZ3JvdXBMYWJlbCkgZmluYWw7CisgICAgdm9p
ZCBwb3BEZWJ1Z0dyb3VwKCkgZmluYWw7CisgICAgdm9pZCBpbnNlcnREZWJ1Z01hcmtlcihTdHJp
bmcmJiBtYXJrZXJMYWJlbCkgZmluYWw7CisKKyAgICB2b2lkIHdyaXRlVGltZXN0YW1wKGNvbnN0
IFF1ZXJ5U2V0JiwgU2l6ZTMyIHF1ZXJ5SW5kZXgpIGZpbmFsOworCisgICAgdm9pZCByZXNvbHZl
UXVlcnlTZXQoCisgICAgICAgIGNvbnN0IFF1ZXJ5U2V0JiwKKyAgICAgICAgU2l6ZTMyIGZpcnN0
UXVlcnksCisgICAgICAgIFNpemUzMiBxdWVyeUNvdW50LAorICAgICAgICBjb25zdCBCdWZmZXIm
IGRlc3RpbmF0aW9uLAorICAgICAgICBTaXplNjQgZGVzdGluYXRpb25PZmZzZXQpIGZpbmFsOwor
CisgICAgUmVmPENvbW1hbmRCdWZmZXI+IGZpbmlzaChjb25zdCBDb21tYW5kQnVmZmVyRGVzY3Jp
cHRvciYpIGZpbmFsOworCisgICAgdm9pZCBzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYp
IGZpbmFsOworCisgICAgV0dQVUNvbW1hbmRFbmNvZGVyIG1fYmFja2luZyB7IG51bGxwdHIgfTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNv
bXB1dGVQYXNzRW5jb2RlckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGlj
cy9XZWJHUFUvSW1wbC9XZWJHUFVDb21wdXRlUGFzc0VuY29kZXJJbXBsLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hYmMxNmQ0NGE4YTM0YTk4YjE1YWRjMTJiOTcwYmUxOGJhOGUyZWJhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVD
b21wdXRlUGFzc0VuY29kZXJJbXBsLmNwcApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVDb21wdXRlUGFzc0VuY29kZXJJ
bXBsLmgiCisKKyNpbmNsdWRlICJXZWJHUFVCaW5kR3JvdXBJbXBsLmgiCisjaW5jbHVkZSAiV2Vi
R1BVQnVmZmVySW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVUNvbXB1dGVQaXBlbGluZUltcGwuaCIK
KyNpbmNsdWRlICJXZWJHUFVRdWVyeVNldEltcGwuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BV
RXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK0NvbXB1dGVQ
YXNzRW5jb2RlckltcGw6OkNvbXB1dGVQYXNzRW5jb2RlckltcGwoV0dQVUNvbXB1dGVQYXNzRW5j
b2RlciBjb21wdXRlUGFzc0VuY29kZXIpCisgICAgOiBtX2JhY2tpbmcoY29tcHV0ZVBhc3NFbmNv
ZGVyKQoreworfQorCitDb21wdXRlUGFzc0VuY29kZXJJbXBsOjp+Q29tcHV0ZVBhc3NFbmNvZGVy
SW1wbCgpCit7CisgICAgd2dwdUNvbXB1dGVQYXNzRW5jb2RlclJlbGVhc2UobV9iYWNraW5nKTsK
K30KKwordm9pZCBDb21wdXRlUGFzc0VuY29kZXJJbXBsOjpzZXRQaXBlbGluZShjb25zdCBDb21w
dXRlUGlwZWxpbmUmIGNvbXB1dGVQaXBlbGluZSkKK3sKKyAgICB3Z3B1Q29tcHV0ZVBhc3NFbmNv
ZGVyU2V0UGlwZWxpbmUobV9iYWNraW5nLCBzdGF0aWNfY2FzdDxjb25zdCBDb21wdXRlUGlwZWxp
bmVJbXBsJj4oY29tcHV0ZVBpcGVsaW5lKS5iYWNraW5nKCkpOworfQorCit2b2lkIENvbXB1dGVQ
YXNzRW5jb2RlckltcGw6OmRpc3BhdGNoKFNpemUzMiB4LCBzdGQ6Om9wdGlvbmFsPFNpemUzMj4g
eSwgc3RkOjpvcHRpb25hbDxTaXplMzI+IHopCit7CisgICAgd2dwdUNvbXB1dGVQYXNzRW5jb2Rl
ckRpc3BhdGNoKG1fYmFja2luZywgeCwgeS52YWx1ZV9vcigxKSwgei52YWx1ZV9vcigxKSk7Cit9
CisKK3ZvaWQgQ29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6ZGlzcGF0Y2hJbmRpcmVjdChjb25zdCBC
dWZmZXImIGluZGlyZWN0QnVmZmVyLCBTaXplNjQgaW5kaXJlY3RPZmZzZXQpCit7CisgICAgd2dw
dUNvbXB1dGVQYXNzRW5jb2RlckRpc3BhdGNoSW5kaXJlY3QobV9iYWNraW5nLCBzdGF0aWNfY2Fz
dDxjb25zdCBCdWZmZXJJbXBsJj4oaW5kaXJlY3RCdWZmZXIpLmJhY2tpbmcoKSwgaW5kaXJlY3RP
ZmZzZXQpOworfQorCit2b2lkIENvbXB1dGVQYXNzRW5jb2RlckltcGw6OmJlZ2luUGlwZWxpbmVT
dGF0aXN0aWNzUXVlcnkoY29uc3QgUXVlcnlTZXQmIHF1ZXJ5U2V0LCBTaXplMzIgcXVlcnlJbmRl
eCkKK3sKKyAgICB3Z3B1Q29tcHV0ZVBhc3NFbmNvZGVyQmVnaW5QaXBlbGluZVN0YXRpc3RpY3NR
dWVyeShtX2JhY2tpbmcsIHN0YXRpY19jYXN0PGNvbnN0IFF1ZXJ5U2V0SW1wbCY+KHF1ZXJ5U2V0
KS5iYWNraW5nKCksIHF1ZXJ5SW5kZXgpOworfQorCit2b2lkIENvbXB1dGVQYXNzRW5jb2Rlcklt
cGw6OmVuZFBpcGVsaW5lU3RhdGlzdGljc1F1ZXJ5KCkKK3sKKyAgICB3Z3B1Q29tcHV0ZVBhc3NF
bmNvZGVyRW5kUGlwZWxpbmVTdGF0aXN0aWNzUXVlcnkobV9iYWNraW5nKTsKK30KKwordm9pZCBD
b21wdXRlUGFzc0VuY29kZXJJbXBsOjplbmRQYXNzKCkKK3sKKyAgICB3Z3B1Q29tcHV0ZVBhc3NF
bmNvZGVyRW5kUGFzcyhtX2JhY2tpbmcpOworfQorCit2b2lkIENvbXB1dGVQYXNzRW5jb2Rlcklt
cGw6OnNldEJpbmRHcm91cChJbmRleDMyIGluZGV4LCBjb25zdCBCaW5kR3JvdXAmIGJpbmRHcm91
cCwKKyAgICBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxCdWZmZXJEeW5hbWljT2Zmc2V0Pj4mJiBvZmZz
ZXRzKQoreworICAgIGF1dG8gYmFja2luZ09mZnNldHMgPSBvZmZzZXRzLnZhbHVlX29yKFZlY3Rv
cjxCdWZmZXJEeW5hbWljT2Zmc2V0PiB7IH0pOworICAgIHdncHVDb21wdXRlUGFzc0VuY29kZXJT
ZXRCaW5kR3JvdXAobV9iYWNraW5nLCBpbmRleCwgc3RhdGljX2Nhc3Q8Y29uc3QgQmluZEdyb3Vw
SW1wbCY+KGJpbmRHcm91cCkuYmFja2luZygpLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYmFja2lu
Z09mZnNldHMuc2l6ZSgpKSwgYmFja2luZ09mZnNldHMuZGF0YSgpKTsKK30KKwordm9pZCBDb21w
dXRlUGFzc0VuY29kZXJJbXBsOjpzZXRCaW5kR3JvdXAoSW5kZXgzMiBpbmRleCwgY29uc3QgQmlu
ZEdyb3VwJiBiaW5kR3JvdXAsCisgICAgY29uc3QgdWludDMyX3QqIGR5bmFtaWNPZmZzZXRzQXJy
YXlCdWZmZXIsCisgICAgc2l6ZV90IGR5bmFtaWNPZmZzZXRzQXJyYXlCdWZmZXJMZW5ndGgsCisg
ICAgU2l6ZTY0IGR5bmFtaWNPZmZzZXRzRGF0YVN0YXJ0LAorICAgIFNpemUzMiBkeW5hbWljT2Zm
c2V0c0RhdGFMZW5ndGgpCit7CisgICAgVU5VU0VEX1BBUkFNKGR5bmFtaWNPZmZzZXRzQXJyYXlC
dWZmZXJMZW5ndGgpOworICAgIC8vIEZJWE1FOiBVc2UgY2hlY2tlZCBhbGdlYnJhLgorICAgIHdn
cHVDb21wdXRlUGFzc0VuY29kZXJTZXRCaW5kR3JvdXAobV9iYWNraW5nLCBpbmRleCwgc3RhdGlj
X2Nhc3Q8Y29uc3QgQmluZEdyb3VwSW1wbCY+KGJpbmRHcm91cCkuYmFja2luZygpLCBkeW5hbWlj
T2Zmc2V0c0RhdGFMZW5ndGgsIGR5bmFtaWNPZmZzZXRzQXJyYXlCdWZmZXIgKyBkeW5hbWljT2Zm
c2V0c0RhdGFTdGFydCk7Cit9CisKK3ZvaWQgQ29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6cHVzaERl
YnVnR3JvdXAoU3RyaW5nJiYgZ3JvdXBMYWJlbCkKK3sKKyAgICB3Z3B1Q29tcHV0ZVBhc3NFbmNv
ZGVyUHVzaERlYnVnR3JvdXAobV9iYWNraW5nLCBncm91cExhYmVsLnV0ZjgoKS5kYXRhKCkpOwor
fQorCit2b2lkIENvbXB1dGVQYXNzRW5jb2RlckltcGw6OnBvcERlYnVnR3JvdXAoKQoreworICAg
IHdncHVDb21wdXRlUGFzc0VuY29kZXJQb3BEZWJ1Z0dyb3VwKG1fYmFja2luZyk7Cit9CisKK3Zv
aWQgQ29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6aW5zZXJ0RGVidWdNYXJrZXIoU3RyaW5nJiYgbWFy
a2VyTGFiZWwpCit7CisgICAgd2dwdUNvbXB1dGVQYXNzRW5jb2Rlckluc2VydERlYnVnTWFya2Vy
KG1fYmFja2luZywgbWFya2VyTGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgQ29tcHV0
ZVBhc3NFbmNvZGVySW1wbDo6c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQor
eworICAgIHdncHVDb21wdXRlUGFzc0VuY29kZXJTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVsLnV0
ZjgoKS5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdl
YkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUv
SW1wbC9XZWJHUFVDb21wdXRlUGFzc0VuY29kZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbXB1dGVQYXNzRW5jb2RlckltcGwuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xYmU4YWRkZjIzZmY3YWFmYzdkNmVhMDU2MzA4NTc3ZWUyZGU5MGJlCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1w
bC9XZWJHUFVDb21wdXRlUGFzc0VuY29kZXJJbXBsLmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVy
LmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVz
cGFjZSBXZWJHUFUgeworCitjbGFzcyBDb21wdXRlUGFzc0VuY29kZXJJbXBsIGZpbmFsIDogcHVi
bGljIENvbXB1dGVQYXNzRW5jb2RlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxDb21wdXRl
UGFzc0VuY29kZXJJbXBsPiBjcmVhdGUoV0dQVUNvbXB1dGVQYXNzRW5jb2RlciBjb21wdXRlUGFz
c0VuY29kZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb21wdXRlUGFz
c0VuY29kZXJJbXBsKGNvbXB1dGVQYXNzRW5jb2RlcikpOworICAgIH0KKworICAgIHZpcnR1YWwg
fkNvbXB1dGVQYXNzRW5jb2RlckltcGwoKTsKKworICAgIFdHUFVDb21wdXRlUGFzc0VuY29kZXIg
YmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgorICAgIENv
bXB1dGVQYXNzRW5jb2RlckltcGwoV0dQVUNvbXB1dGVQYXNzRW5jb2Rlcik7CisKKyAgICBDb21w
dXRlUGFzc0VuY29kZXJJbXBsKGNvbnN0IENvbXB1dGVQYXNzRW5jb2RlckltcGwmKSA9IGRlbGV0
ZTsKKyAgICBDb21wdXRlUGFzc0VuY29kZXJJbXBsKENvbXB1dGVQYXNzRW5jb2RlckltcGwmJikg
PSBkZWxldGU7CisgICAgQ29tcHV0ZVBhc3NFbmNvZGVySW1wbCYgb3BlcmF0b3I9KGNvbnN0IENv
bXB1dGVQYXNzRW5jb2RlckltcGwmKSA9IGRlbGV0ZTsKKyAgICBDb21wdXRlUGFzc0VuY29kZXJJ
bXBsJiBvcGVyYXRvcj0oQ29tcHV0ZVBhc3NFbmNvZGVySW1wbCYmKSA9IGRlbGV0ZTsKKworICAg
IHZvaWQgc2V0UGlwZWxpbmUoY29uc3QgQ29tcHV0ZVBpcGVsaW5lJikgZmluYWw7CisgICAgdm9p
ZCBkaXNwYXRjaChTaXplMzIgeCwgc3RkOjpvcHRpb25hbDxTaXplMzI+IHksIHN0ZDo6b3B0aW9u
YWw8U2l6ZTMyPikgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaEluZGlyZWN0KGNvbnN0IEJ1ZmZl
ciYgaW5kaXJlY3RCdWZmZXIsIFNpemU2NCBpbmRpcmVjdE9mZnNldCkgZmluYWw7CisKKyAgICB2
b2lkIGJlZ2luUGlwZWxpbmVTdGF0aXN0aWNzUXVlcnkoY29uc3QgUXVlcnlTZXQmLCBTaXplMzIg
cXVlcnlJbmRleCkgZmluYWw7CisgICAgdm9pZCBlbmRQaXBlbGluZVN0YXRpc3RpY3NRdWVyeSgp
IGZpbmFsOworCisgICAgdm9pZCBlbmRQYXNzKCkgZmluYWw7CisKKyAgICB2b2lkIHNldEJpbmRH
cm91cChJbmRleDMyLCBjb25zdCBCaW5kR3JvdXAmLAorICAgICAgICBzdGQ6Om9wdGlvbmFsPFZl
Y3RvcjxCdWZmZXJEeW5hbWljT2Zmc2V0Pj4mJikgZmluYWw7CisKKyAgICB2b2lkIHNldEJpbmRH
cm91cChJbmRleDMyLCBjb25zdCBCaW5kR3JvdXAmLAorICAgICAgICBjb25zdCB1aW50MzJfdCog
ZHluYW1pY09mZnNldHNBcnJheUJ1ZmZlciwKKyAgICAgICAgc2l6ZV90IGR5bmFtaWNPZmZzZXRz
QXJyYXlCdWZmZXJMZW5ndGgsCisgICAgICAgIFNpemU2NCBkeW5hbWljT2Zmc2V0c0RhdGFTdGFy
dCwKKyAgICAgICAgU2l6ZTMyIGR5bmFtaWNPZmZzZXRzRGF0YUxlbmd0aCkgZmluYWw7CisKKyAg
ICB2b2lkIHB1c2hEZWJ1Z0dyb3VwKFN0cmluZyYmIGdyb3VwTGFiZWwpIGZpbmFsOworICAgIHZv
aWQgcG9wRGVidWdHcm91cCgpIGZpbmFsOworICAgIHZvaWQgaW5zZXJ0RGVidWdNYXJrZXIoU3Ry
aW5nJiYgbWFya2VyTGFiZWwpIGZpbmFsOworCisgICAgdm9pZCBzZXRMYWJlbEludGVybmFsKGNv
bnN0IFN0cmluZyYpIGZpbmFsOworCisgICAgV0dQVUNvbXB1dGVQYXNzRW5jb2RlciBtX2JhY2tp
bmcgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNl
IFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJH
UFUvSW1wbC9XZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tcHV0ZVBpcGVsaW5lSW1wbC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMmE4ZTk3M2Q0YWNiNzZiYmUxYWExZDBhMWY4YjM0Njk2M2NiODRhMgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0lt
cGwvV2ViR1BVQ29tcHV0ZVBpcGVsaW5lSW1wbC5jcHAKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVDb21wdXRlUGlwZWxp
bmVJbXBsLmgiCisKKyNpbmNsdWRlICJXZWJHUFVCaW5kR3JvdXBMYXlvdXRJbXBsLmgiCisjaW5j
bHVkZSA8V2ViR1BVL1dlYkdQVUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBX
ZWJHUFUgeworCitDb21wdXRlUGlwZWxpbmVJbXBsOjpDb21wdXRlUGlwZWxpbmVJbXBsKFdHUFVD
b21wdXRlUGlwZWxpbmUgY29tcHV0ZVBpcGVsaW5lKQorICAgIDogbV9iYWNraW5nKGNvbXB1dGVQ
aXBlbGluZSkKK3sKK30KKworQ29tcHV0ZVBpcGVsaW5lSW1wbDo6fkNvbXB1dGVQaXBlbGluZUlt
cGwoKQoreworICAgIHdncHVDb21wdXRlUGlwZWxpbmVSZWxlYXNlKG1fYmFja2luZyk7Cit9CisK
K1JlZjxCaW5kR3JvdXBMYXlvdXQ+IENvbXB1dGVQaXBlbGluZUltcGw6OmdldEJpbmRHcm91cExh
eW91dCh1aW50MzJfdCBpbmRleCkKK3sKKyAgICByZXR1cm4gQmluZEdyb3VwTGF5b3V0SW1wbDo6
Y3JlYXRlKHdncHVDb21wdXRlUGlwZWxpbmVHZXRCaW5kR3JvdXBMYXlvdXQobV9iYWNraW5nLCBp
bmRleCkpOworfQorCit2b2lkIENvbXB1dGVQaXBlbGluZUltcGw6OnNldExhYmVsSW50ZXJuYWwo
Y29uc3QgU3RyaW5nJiBsYWJlbCkKK3sKKyAgICB3Z3B1Q29tcHV0ZVBpcGVsaW5lU2V0TGFiZWwo
bV9iYWNraW5nLCBsYWJlbC51dGY4KCkuZGF0YSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgUEFM
Cit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tcHV0ZVBpcGVsaW5lSW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb21wdXRlUGlw
ZWxpbmVJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDQ2MjZjZmE0MGUyMmUyOTIzZGI1YmJmZmI1ZjE0MGFk
NmFmYWFjYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhp
Y3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tcHV0ZVBpcGVsaW5lSW1wbC5oCkBAIC0wLDAgKzEsNjEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYkdQVUNvbXB1dGVQ
aXBlbGluZS5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFUuaD4KKworbmFtZXNwYWNlIFBBTCB7
CituYW1lc3BhY2UgV2ViR1BVIHsKKworY2xhc3MgQ29tcHV0ZVBpcGVsaW5lSW1wbCBmaW5hbCA6
IHB1YmxpYyBDb21wdXRlUGlwZWxpbmUgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8Q29tcHV0
ZVBpcGVsaW5lSW1wbD4gY3JlYXRlKFdHUFVDb21wdXRlUGlwZWxpbmUgY29tcHV0ZVBpcGVsaW5l
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29tcHV0ZVBpcGVsaW5lSW1w
bChjb21wdXRlUGlwZWxpbmUpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5Db21wdXRlUGlwZWxp
bmVJbXBsKCk7CisKKyAgICBXR1BVQ29tcHV0ZVBpcGVsaW5lIGJhY2tpbmcoKSBjb25zdCB7IHJl
dHVybiBtX2JhY2tpbmc7IH0KKworcHJpdmF0ZToKKyAgICBDb21wdXRlUGlwZWxpbmVJbXBsKFdH
UFVDb21wdXRlUGlwZWxpbmUpOworCisgICAgQ29tcHV0ZVBpcGVsaW5lSW1wbChjb25zdCBDb21w
dXRlUGlwZWxpbmVJbXBsJikgPSBkZWxldGU7CisgICAgQ29tcHV0ZVBpcGVsaW5lSW1wbChDb21w
dXRlUGlwZWxpbmVJbXBsJiYpID0gZGVsZXRlOworICAgIENvbXB1dGVQaXBlbGluZUltcGwmIG9w
ZXJhdG9yPShjb25zdCBDb21wdXRlUGlwZWxpbmVJbXBsJikgPSBkZWxldGU7CisgICAgQ29tcHV0
ZVBpcGVsaW5lSW1wbCYgb3BlcmF0b3I9KENvbXB1dGVQaXBlbGluZUltcGwmJikgPSBkZWxldGU7
CisKKyAgICBSZWY8QmluZEdyb3VwTGF5b3V0PiBnZXRCaW5kR3JvdXBMYXlvdXQodWludDMyX3Qg
aW5kZXgpIGZpbmFsOworCisgICAgdm9pZCBzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYp
IGZpbmFsOworCisgICAgV0dQVUNvbXB1dGVQaXBlbGluZSBtX2JhY2tpbmcgeyBudWxscHRyIH07
Cit9OworCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVD
b252ZXJ0VG9CYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2Vi
R1BVL0ltcGwvV2ViR1BVQ29udmVydFRvQmFja2luZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTI1NmZjNGY2
NDYyNWZmNDc4ZjVhNzc4M2JhNWFmZTMxZjIyZGVmNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29udmVydFRvQmFj
a2luZy5jcHAKQEAgLTAsMCArMSw4MDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViR1BVQ29udmVydFRvQmFja2luZy5oIgorCisjaW5jbHVkZSA8V2Vi
R1BVL1dlYkdQVUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgewor
CitXR1BVQWRkcmVzc01vZGUgY29udmVydFRvQmFja2luZyhBZGRyZXNzTW9kZSBhZGRyZXNzTW9k
ZSkKK3sKKyAgICBzd2l0Y2ggKGFkZHJlc3NNb2RlKSB7CisgICAgY2FzZSBBZGRyZXNzTW9kZTo6
Q2xhbXBUb0VkZ2U6CisgICAgICAgIHJldHVybiBXR1BVQWRkcmVzc01vZGVfQ2xhbXBUb0VkZ2U7
CisgICAgY2FzZSBBZGRyZXNzTW9kZTo6UmVwZWF0OgorICAgICAgICByZXR1cm4gV0dQVUFkZHJl
c3NNb2RlX1JlcGVhdDsKKyAgICBjYXNlIEFkZHJlc3NNb2RlOjpNaXJyb3JSZXBlYXQ6CisgICAg
ICAgIHJldHVybiBXR1BVQWRkcmVzc01vZGVfTWlycm9yUmVwZWF0OworICAgIH0KK30KKworV0dQ
VUJsZW5kRmFjdG9yIGNvbnZlcnRUb0JhY2tpbmcoQmxlbmRGYWN0b3IgYmxlbmRGYWN0b3IpCit7
CisgICAgc3dpdGNoIChibGVuZEZhY3RvcikgeworICAgIGNhc2UgQmxlbmRGYWN0b3I6Olplcm86
CisgICAgICAgIHJldHVybiBXR1BVQmxlbmRGYWN0b3JfWmVybzsKKyAgICBjYXNlIEJsZW5kRmFj
dG9yOjpPbmU6CisgICAgICAgIHJldHVybiBXR1BVQmxlbmRGYWN0b3JfT25lOworICAgIGNhc2Ug
QmxlbmRGYWN0b3I6OlNyYzoKKyAgICAgICAgcmV0dXJuIFdHUFVCbGVuZEZhY3Rvcl9TcmM7Cisg
ICAgY2FzZSBCbGVuZEZhY3Rvcjo6T25lTWludXNTcmM6CisgICAgICAgIHJldHVybiBXR1BVQmxl
bmRGYWN0b3JfT25lTWludXNTcmM7CisgICAgY2FzZSBCbGVuZEZhY3Rvcjo6U3JjQWxwaGE6Cisg
ICAgICAgIHJldHVybiBXR1BVQmxlbmRGYWN0b3JfU3JjQWxwaGE7CisgICAgY2FzZSBCbGVuZEZh
Y3Rvcjo6T25lTWludXNTcmNBbHBoYToKKyAgICAgICAgcmV0dXJuIFdHUFVCbGVuZEZhY3Rvcl9P
bmVNaW51c1NyY0FscGhhOworICAgIGNhc2UgQmxlbmRGYWN0b3I6OkRzdDoKKyAgICAgICAgcmV0
dXJuIFdHUFVCbGVuZEZhY3Rvcl9Ec3Q7CisgICAgY2FzZSBCbGVuZEZhY3Rvcjo6T25lTWludXNE
c3Q6CisgICAgICAgIHJldHVybiBXR1BVQmxlbmRGYWN0b3JfT25lTWludXNEc3Q7CisgICAgY2Fz
ZSBCbGVuZEZhY3Rvcjo6RHN0QWxwaGE6CisgICAgICAgIHJldHVybiBXR1BVQmxlbmRGYWN0b3Jf
RHN0QWxwaGE7CisgICAgY2FzZSBCbGVuZEZhY3Rvcjo6T25lTWludXNEc3RBbHBoYToKKyAgICAg
ICAgcmV0dXJuIFdHUFVCbGVuZEZhY3Rvcl9PbmVNaW51c0RzdEFscGhhOworICAgIGNhc2UgQmxl
bmRGYWN0b3I6OlNyY0FscGhhU2F0dXJhdGVkOgorICAgICAgICByZXR1cm4gV0dQVUJsZW5kRmFj
dG9yX1NyY0FscGhhU2F0dXJhdGVkOworICAgIGNhc2UgQmxlbmRGYWN0b3I6OkNvbnN0YW50Ogor
ICAgICAgICByZXR1cm4gV0dQVUJsZW5kRmFjdG9yX0NvbnN0YW50OworICAgIGNhc2UgQmxlbmRG
YWN0b3I6Ok9uZU1pbnVzQ29uc3RhbnQ6CisgICAgICAgIHJldHVybiBXR1BVQmxlbmRGYWN0b3Jf
T25lTWludXNDb25zdGFudDsKKyAgICB9Cit9CisKK1dHUFVCbGVuZE9wZXJhdGlvbiBjb252ZXJ0
VG9CYWNraW5nKEJsZW5kT3BlcmF0aW9uIGJsZW5kT3BlcmF0aW9uKQoreworICAgIHN3aXRjaCAo
YmxlbmRPcGVyYXRpb24pIHsKKyAgICBjYXNlIEJsZW5kT3BlcmF0aW9uOjpBZGQ6CisgICAgICAg
IHJldHVybiBXR1BVQmxlbmRPcGVyYXRpb25fQWRkOworICAgIGNhc2UgQmxlbmRPcGVyYXRpb246
OlN1YnRyYWN0OgorICAgICAgICByZXR1cm4gV0dQVUJsZW5kT3BlcmF0aW9uX1N1YnRyYWN0Owor
ICAgIGNhc2UgQmxlbmRPcGVyYXRpb246OlJldmVyc2VTdWJ0cmFjdDoKKyAgICAgICAgcmV0dXJu
IFdHUFVCbGVuZE9wZXJhdGlvbl9SZXZlcnNlU3VidHJhY3Q7CisgICAgY2FzZSBCbGVuZE9wZXJh
dGlvbjo6TWluOgorICAgICAgICByZXR1cm4gV0dQVUJsZW5kT3BlcmF0aW9uX01pbjsKKyAgICBj
YXNlIEJsZW5kT3BlcmF0aW9uOjpNYXg6CisgICAgICAgIHJldHVybiBXR1BVQmxlbmRPcGVyYXRp
b25fTWF4OworICAgIH0KK30KKworV0dQVUJ1ZmZlckJpbmRpbmdUeXBlIGNvbnZlcnRUb0JhY2tp
bmcoQnVmZmVyQmluZGluZ1R5cGUgYnVmZmVyQmluZGluZ1R5cGUpCit7CisgICAgc3dpdGNoIChi
dWZmZXJCaW5kaW5nVHlwZSkgeworICAgIGNhc2UgQnVmZmVyQmluZGluZ1R5cGU6OlVuaWZvcm06
CisgICAgICAgIHJldHVybiBXR1BVQnVmZmVyQmluZGluZ1R5cGVfVW5pZm9ybTsKKyAgICBjYXNl
IEJ1ZmZlckJpbmRpbmdUeXBlOjpTdG9yYWdlOgorICAgICAgICByZXR1cm4gV0dQVUJ1ZmZlckJp
bmRpbmdUeXBlX1N0b3JhZ2U7CisgICAgY2FzZSBCdWZmZXJCaW5kaW5nVHlwZTo6UmVhZE9ubHlT
dG9yYWdlOgorICAgICAgICByZXR1cm4gV0dQVUJ1ZmZlckJpbmRpbmdUeXBlX1JlYWRPbmx5U3Rv
cmFnZTsKKyAgICB9Cit9CisKK1dHUFVDb21wYXJlRnVuY3Rpb24gY29udmVydFRvQmFja2luZyhD
b21wYXJlRnVuY3Rpb24gY29tcGFyZUZ1bmN0aW9uKQoreworICAgIHN3aXRjaCAoY29tcGFyZUZ1
bmN0aW9uKSB7CisgICAgY2FzZSBDb21wYXJlRnVuY3Rpb246Ok5ldmVyOgorICAgICAgICByZXR1
cm4gV0dQVUNvbXBhcmVGdW5jdGlvbl9OZXZlcjsKKyAgICBjYXNlIENvbXBhcmVGdW5jdGlvbjo6
TGVzczoKKyAgICAgICAgcmV0dXJuIFdHUFVDb21wYXJlRnVuY3Rpb25fTGVzczsKKyAgICBjYXNl
IENvbXBhcmVGdW5jdGlvbjo6RXF1YWw6CisgICAgICAgIHJldHVybiBXR1BVQ29tcGFyZUZ1bmN0
aW9uX0VxdWFsOworICAgIGNhc2UgQ29tcGFyZUZ1bmN0aW9uOjpMZXNzRXF1YWw6CisgICAgICAg
IHJldHVybiBXR1BVQ29tcGFyZUZ1bmN0aW9uX0xlc3NFcXVhbDsKKyAgICBjYXNlIENvbXBhcmVG
dW5jdGlvbjo6R3JlYXRlcjoKKyAgICAgICAgcmV0dXJuIFdHUFVDb21wYXJlRnVuY3Rpb25fR3Jl
YXRlcjsKKyAgICBjYXNlIENvbXBhcmVGdW5jdGlvbjo6Tm90RXF1YWw6CisgICAgICAgIHJldHVy
biBXR1BVQ29tcGFyZUZ1bmN0aW9uX05vdEVxdWFsOworICAgIGNhc2UgQ29tcGFyZUZ1bmN0aW9u
OjpHcmVhdGVyRXF1YWw6CisgICAgICAgIHJldHVybiBXR1BVQ29tcGFyZUZ1bmN0aW9uX0dyZWF0
ZXJFcXVhbDsKKyAgICBjYXNlIENvbXBhcmVGdW5jdGlvbjo6QWx3YXlzOgorICAgICAgICByZXR1
cm4gV0dQVUNvbXBhcmVGdW5jdGlvbl9BbHdheXM7CisgICAgfQorfQorCitXR1BVQ29tcGlsYXRp
b25NZXNzYWdlVHlwZSBjb252ZXJ0VG9CYWNraW5nKENvbXBpbGF0aW9uTWVzc2FnZVR5cGUgY29t
cGlsYXRpb25NZXNzYWdlVHlwZSkKK3sKKyAgICBzd2l0Y2ggKGNvbXBpbGF0aW9uTWVzc2FnZVR5
cGUpIHsKKyAgICBjYXNlIENvbXBpbGF0aW9uTWVzc2FnZVR5cGU6OkVycm9yOgorICAgICAgICBy
ZXR1cm4gV0dQVUNvbXBpbGF0aW9uTWVzc2FnZVR5cGVfRXJyb3I7CisgICAgY2FzZSBDb21waWxh
dGlvbk1lc3NhZ2VUeXBlOjpXYXJuaW5nOgorICAgICAgICByZXR1cm4gV0dQVUNvbXBpbGF0aW9u
TWVzc2FnZVR5cGVfV2FybmluZzsKKyAgICBjYXNlIENvbXBpbGF0aW9uTWVzc2FnZVR5cGU6Oklu
Zm86CisgICAgICAgIHJldHVybiBXR1BVQ29tcGlsYXRpb25NZXNzYWdlVHlwZV9JbmZvOworICAg
IH0KK30KKworV0dQVUN1bGxNb2RlIGNvbnZlcnRUb0JhY2tpbmcoQ3VsbE1vZGUgY3VsbE1vZGUp
Cit7CisgICAgc3dpdGNoIChjdWxsTW9kZSkgeworICAgIGNhc2UgQ3VsbE1vZGU6Ok5vbmU6Cisg
ICAgICAgIHJldHVybiBXR1BVQ3VsbE1vZGVfTm9uZTsKKyAgICBjYXNlIEN1bGxNb2RlOjpGcm9u
dDoKKyAgICAgICAgcmV0dXJuIFdHUFVDdWxsTW9kZV9Gcm9udDsKKyAgICBjYXNlIEN1bGxNb2Rl
OjpCYWNrOgorICAgICAgICByZXR1cm4gV0dQVUN1bGxNb2RlX0JhY2s7CisgICAgfQorfQorCitX
R1BVRXJyb3JGaWx0ZXIgY29udmVydFRvQmFja2luZyhFcnJvckZpbHRlciBlcnJvckZpbHRlcikK
K3sKKyAgICBzd2l0Y2ggKGVycm9yRmlsdGVyKSB7CisgICAgY2FzZSBFcnJvckZpbHRlcjo6T3V0
T2ZNZW1vcnk6CisgICAgICAgIHJldHVybiBXR1BVRXJyb3JGaWx0ZXJfT3V0T2ZNZW1vcnk7Cisg
ICAgY2FzZSBFcnJvckZpbHRlcjo6VmFsaWRhdGlvbjoKKyAgICAgICAgcmV0dXJuIFdHUFVFcnJv
ckZpbHRlcl9WYWxpZGF0aW9uOworICAgIH0KK30KKworV0dQVUZlYXR1cmVOYW1lIGNvbnZlcnRU
b0JhY2tpbmcoRmVhdHVyZU5hbWUgZmVhdHVyZU5hbWUpCit7CisgICAgc3dpdGNoIChmZWF0dXJl
TmFtZSkgeworICAgIGNhc2UgRmVhdHVyZU5hbWU6OkRlcHRoQ2xpcENvbnRyb2w6CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxXR1BVRmVhdHVyZU5hbWU+KFdHUFVGZWF0dXJlTmFtZV9EZXB0
aENsaXBDb250cm9sKTsKKyAgICBjYXNlIEZlYXR1cmVOYW1lOjpEZXB0aDI0dW5vcm1TdGVuY2ls
ODoKKyAgICAgICAgcmV0dXJuIFdHUFVGZWF0dXJlTmFtZV9EZXB0aDI0VW5vcm1TdGVuY2lsODsK
KyAgICBjYXNlIEZlYXR1cmVOYW1lOjpEZXB0aDMyZmxvYXRTdGVuY2lsODoKKyAgICAgICAgcmV0
dXJuIFdHUFVGZWF0dXJlTmFtZV9EZXB0aDMyRmxvYXRTdGVuY2lsODsKKyAgICBjYXNlIEZlYXR1
cmVOYW1lOjpQaXBlbGluZVN0YXRpc3RpY3NRdWVyeToKKyAgICAgICAgcmV0dXJuIFdHUFVGZWF0
dXJlTmFtZV9QaXBlbGluZVN0YXRpc3RpY3NRdWVyeTsKKyAgICBjYXNlIEZlYXR1cmVOYW1lOjpU
ZXh0dXJlQ29tcHJlc3Npb25CYzoKKyAgICAgICAgcmV0dXJuIFdHUFVGZWF0dXJlTmFtZV9UZXh0
dXJlQ29tcHJlc3Npb25CQzsKKyAgICBjYXNlIEZlYXR1cmVOYW1lOjpUZXh0dXJlQ29tcHJlc3Np
b25FdGMyOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVUZlYXR1cmVOYW1lPihXR1BV
RmVhdHVyZU5hbWVfVGV4dHVyZUNvbXByZXNzaW9uRVRDMik7CisgICAgY2FzZSBGZWF0dXJlTmFt
ZTo6VGV4dHVyZUNvbXByZXNzaW9uQXN0YzoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdH
UFVGZWF0dXJlTmFtZT4oV0dQVUZlYXR1cmVOYW1lX1RleHR1cmVDb21wcmVzc2lvbkFTVEMpOwor
ICAgIGNhc2UgRmVhdHVyZU5hbWU6OlRpbWVzdGFtcFF1ZXJ5OgorICAgICAgICByZXR1cm4gV0dQ
VUZlYXR1cmVOYW1lX1RpbWVzdGFtcFF1ZXJ5OworICAgIGNhc2UgRmVhdHVyZU5hbWU6OkluZGly
ZWN0Rmlyc3RJbnN0YW5jZToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVGZWF0dXJl
TmFtZT4oV0dQVUZlYXR1cmVOYW1lX0luZGlyZWN0Rmlyc3RJbnN0YW5jZSk7CisgICAgfQorfQor
CitXR1BVRmlsdGVyTW9kZSBjb252ZXJ0VG9CYWNraW5nKEZpbHRlck1vZGUgZmlsdGVyTW9kZSkK
K3sKKyAgICBzd2l0Y2ggKGZpbHRlck1vZGUpIHsKKyAgICBjYXNlIEZpbHRlck1vZGU6Ok5lYXJl
c3Q6CisgICAgICAgIHJldHVybiBXR1BVRmlsdGVyTW9kZV9OZWFyZXN0OworICAgIGNhc2UgRmls
dGVyTW9kZTo6TGluZWFyOgorICAgICAgICByZXR1cm4gV0dQVUZpbHRlck1vZGVfTGluZWFyOwor
ICAgIH0KK30KKworV0dQVUZyb250RmFjZSBjb252ZXJ0VG9CYWNraW5nKEZyb250RmFjZSBmcm9u
dEZhY2UpCit7CisgICAgc3dpdGNoIChmcm9udEZhY2UpIHsKKyAgICBjYXNlIEZyb250RmFjZTo6
Q0NXOgorICAgICAgICByZXR1cm4gV0dQVUZyb250RmFjZV9DQ1c7CisgICAgY2FzZSBGcm9udEZh
Y2U6OkNXOgorICAgICAgICByZXR1cm4gV0dQVUZyb250RmFjZV9DVzsKKyAgICB9Cit9CisKK1dH
UFVJbmRleEZvcm1hdCBjb252ZXJ0VG9CYWNraW5nKEluZGV4Rm9ybWF0IGluZGV4Rm9ybWF0KQor
eworICAgIHN3aXRjaCAoaW5kZXhGb3JtYXQpIHsKKyAgICBjYXNlIEluZGV4Rm9ybWF0OjpVaW50
MTY6CisgICAgICAgIHJldHVybiBXR1BVSW5kZXhGb3JtYXRfVWludDE2OworICAgIGNhc2UgSW5k
ZXhGb3JtYXQ6OlVpbnQzMjoKKyAgICAgICAgcmV0dXJuIFdHUFVJbmRleEZvcm1hdF9VaW50MzI7
CisgICAgfQorfQorCitXR1BVTG9hZE9wIGNvbnZlcnRUb0JhY2tpbmcoTG9hZE9wIGxvYWRPcCkK
K3sKKyAgICBzd2l0Y2ggKGxvYWRPcCkgeworICAgIGNhc2UgTG9hZE9wOjpMb2FkOgorICAgICAg
ICByZXR1cm4gV0dQVUxvYWRPcF9Mb2FkOworICAgIH0KK30KKworV0dQVVBpcGVsaW5lU3RhdGlz
dGljTmFtZSBjb252ZXJ0VG9CYWNraW5nKFBpcGVsaW5lU3RhdGlzdGljTmFtZSBwaXBlbGluZVN0
YXRpc3RpY05hbWUpCit7CisgICAgc3dpdGNoIChwaXBlbGluZVN0YXRpc3RpY05hbWUpIHsKKyAg
ICBjYXNlIFBpcGVsaW5lU3RhdGlzdGljTmFtZTo6VmVydGV4U2hhZGVySW52b2NhdGlvbnM6Cisg
ICAgICAgIHJldHVybiBXR1BVUGlwZWxpbmVTdGF0aXN0aWNOYW1lX1ZlcnRleFNoYWRlckludm9j
YXRpb25zOworICAgIGNhc2UgUGlwZWxpbmVTdGF0aXN0aWNOYW1lOjpDbGlwcGVySW52b2NhdGlv
bnM6CisgICAgICAgIHJldHVybiBXR1BVUGlwZWxpbmVTdGF0aXN0aWNOYW1lX0NsaXBwZXJJbnZv
Y2F0aW9uczsKKyAgICBjYXNlIFBpcGVsaW5lU3RhdGlzdGljTmFtZTo6Q2xpcHBlclByaW1pdGl2
ZXNPdXQ6CisgICAgICAgIHJldHVybiBXR1BVUGlwZWxpbmVTdGF0aXN0aWNOYW1lX0NsaXBwZXJQ
cmltaXRpdmVzT3V0OworICAgIGNhc2UgUGlwZWxpbmVTdGF0aXN0aWNOYW1lOjpGcmFnbWVudFNo
YWRlckludm9jYXRpb25zOgorICAgICAgICByZXR1cm4gV0dQVVBpcGVsaW5lU3RhdGlzdGljTmFt
ZV9GcmFnbWVudFNoYWRlckludm9jYXRpb25zOworICAgIGNhc2UgUGlwZWxpbmVTdGF0aXN0aWNO
YW1lOjpDb21wdXRlU2hhZGVySW52b2NhdGlvbnM6CisgICAgICAgIHJldHVybiBXR1BVUGlwZWxp
bmVTdGF0aXN0aWNOYW1lX0NvbXB1dGVTaGFkZXJJbnZvY2F0aW9uczsKKyAgICB9Cit9CisKK1dH
UFVQb3dlclByZWZlcmVuY2UgY29udmVydFRvQmFja2luZyhQb3dlclByZWZlcmVuY2UgcG93ZXJQ
cmVmZXJlbmNlKQoreworICAgIHN3aXRjaCAocG93ZXJQcmVmZXJlbmNlKSB7CisgICAgY2FzZSBQ
b3dlclByZWZlcmVuY2U6Okxvd1Bvd2VyOgorICAgICAgICByZXR1cm4gV0dQVVBvd2VyUHJlZmVy
ZW5jZV9Mb3dQb3dlcjsKKyAgICBjYXNlIFBvd2VyUHJlZmVyZW5jZTo6SGlnaFBlcmZvcm1hbmNl
OgorICAgICAgICByZXR1cm4gV0dQVVBvd2VyUHJlZmVyZW5jZV9IaWdoUGVyZm9ybWFuY2U7Cisg
ICAgfQorfQorCitXR1BVUHJpbWl0aXZlVG9wb2xvZ3kgY29udmVydFRvQmFja2luZyhQcmltaXRp
dmVUb3BvbG9neSBwcmltaXRpdmVUb3BvbG9neSkKK3sKKyAgICBzd2l0Y2ggKHByaW1pdGl2ZVRv
cG9sb2d5KSB7CisgICAgY2FzZSBQcmltaXRpdmVUb3BvbG9neTo6UG9pbnRMaXN0OgorICAgICAg
ICByZXR1cm4gV0dQVVByaW1pdGl2ZVRvcG9sb2d5X1BvaW50TGlzdDsKKyAgICBjYXNlIFByaW1p
dGl2ZVRvcG9sb2d5OjpMaW5lTGlzdDoKKyAgICAgICAgcmV0dXJuIFdHUFVQcmltaXRpdmVUb3Bv
bG9neV9MaW5lTGlzdDsKKyAgICBjYXNlIFByaW1pdGl2ZVRvcG9sb2d5OjpMaW5lU3RyaXA6Cisg
ICAgICAgIHJldHVybiBXR1BVUHJpbWl0aXZlVG9wb2xvZ3lfTGluZVN0cmlwOworICAgIGNhc2Ug
UHJpbWl0aXZlVG9wb2xvZ3k6OlRyaWFuZ2xlTGlzdDoKKyAgICAgICAgcmV0dXJuIFdHUFVQcmlt
aXRpdmVUb3BvbG9neV9UcmlhbmdsZUxpc3Q7CisgICAgY2FzZSBQcmltaXRpdmVUb3BvbG9neTo6
VHJpYW5nbGVTdHJpcDoKKyAgICAgICAgcmV0dXJuIFdHUFVQcmltaXRpdmVUb3BvbG9neV9Ucmlh
bmdsZVN0cmlwOworICAgIH0KK30KKworV0dQVVF1ZXJ5VHlwZSBjb252ZXJ0VG9CYWNraW5nKFF1
ZXJ5VHlwZSBxdWVyeVR5cGUpCit7CisgICAgc3dpdGNoIChxdWVyeVR5cGUpIHsKKyAgICBjYXNl
IFF1ZXJ5VHlwZTo6T2NjbHVzaW9uOgorICAgICAgICByZXR1cm4gV0dQVVF1ZXJ5VHlwZV9PY2Ns
dXNpb247CisgICAgY2FzZSBRdWVyeVR5cGU6OlBpcGVsaW5lU3RhdGlzdGljczoKKyAgICAgICAg
cmV0dXJuIFdHUFVRdWVyeVR5cGVfUGlwZWxpbmVTdGF0aXN0aWNzOworICAgIGNhc2UgUXVlcnlU
eXBlOjpUaW1lc3RhbXA6CisgICAgICAgIHJldHVybiBXR1BVUXVlcnlUeXBlX1RpbWVzdGFtcDsK
KyAgICB9Cit9CisKK1dHUFVTYW1wbGVyQmluZGluZ1R5cGUgY29udmVydFRvQmFja2luZyhTYW1w
bGVyQmluZGluZ1R5cGUgc2FtcGxlckJpbmRpbmdUeXBlKQoreworICAgIHN3aXRjaCAoc2FtcGxl
ckJpbmRpbmdUeXBlKSB7CisgICAgY2FzZSBTYW1wbGVyQmluZGluZ1R5cGU6OkZpbHRlcmluZzoK
KyAgICAgICAgcmV0dXJuIFdHUFVTYW1wbGVyQmluZGluZ1R5cGVfRmlsdGVyaW5nOworICAgIGNh
c2UgU2FtcGxlckJpbmRpbmdUeXBlOjpOb25GaWx0ZXJpbmc6CisgICAgICAgIHJldHVybiBXR1BV
U2FtcGxlckJpbmRpbmdUeXBlX05vbkZpbHRlcmluZzsKKyAgICBjYXNlIFNhbXBsZXJCaW5kaW5n
VHlwZTo6Q29tcGFyaXNvbjoKKyAgICAgICAgcmV0dXJuIFdHUFVTYW1wbGVyQmluZGluZ1R5cGVf
Q29tcGFyaXNvbjsKKyAgICB9Cit9CisKK1dHUFVTdGVuY2lsT3BlcmF0aW9uIGNvbnZlcnRUb0Jh
Y2tpbmcoU3RlbmNpbE9wZXJhdGlvbiBzdGVuY2lsT3BlcmF0aW9uKQoreworICAgIHN3aXRjaCAo
c3RlbmNpbE9wZXJhdGlvbikgeworICAgIGNhc2UgU3RlbmNpbE9wZXJhdGlvbjo6S2VlcDoKKyAg
ICAgICAgcmV0dXJuIFdHUFVTdGVuY2lsT3BlcmF0aW9uX0tlZXA7CisgICAgY2FzZSBTdGVuY2ls
T3BlcmF0aW9uOjpaZXJvOgorICAgICAgICByZXR1cm4gV0dQVVN0ZW5jaWxPcGVyYXRpb25fWmVy
bzsKKyAgICBjYXNlIFN0ZW5jaWxPcGVyYXRpb246OlJlcGxhY2U6CisgICAgICAgIHJldHVybiBX
R1BVU3RlbmNpbE9wZXJhdGlvbl9SZXBsYWNlOworICAgIGNhc2UgU3RlbmNpbE9wZXJhdGlvbjo6
SW52ZXJ0OgorICAgICAgICByZXR1cm4gV0dQVVN0ZW5jaWxPcGVyYXRpb25fSW52ZXJ0OworICAg
IGNhc2UgU3RlbmNpbE9wZXJhdGlvbjo6SW5jcmVtZW50Q2xhbXA6CisgICAgICAgIHJldHVybiBX
R1BVU3RlbmNpbE9wZXJhdGlvbl9JbmNyZW1lbnRDbGFtcDsKKyAgICBjYXNlIFN0ZW5jaWxPcGVy
YXRpb246OkRlY3JlbWVudENsYW1wOgorICAgICAgICByZXR1cm4gV0dQVVN0ZW5jaWxPcGVyYXRp
b25fRGVjcmVtZW50Q2xhbXA7CisgICAgY2FzZSBTdGVuY2lsT3BlcmF0aW9uOjpJbmNyZW1lbnRX
cmFwOgorICAgICAgICByZXR1cm4gV0dQVVN0ZW5jaWxPcGVyYXRpb25fSW5jcmVtZW50V3JhcDsK
KyAgICBjYXNlIFN0ZW5jaWxPcGVyYXRpb246OkRlY3JlbWVudFdyYXA6CisgICAgICAgIHJldHVy
biBXR1BVU3RlbmNpbE9wZXJhdGlvbl9EZWNyZW1lbnRXcmFwOworICAgIH0KK30KKworV0dQVVN0
b3JhZ2VUZXh0dXJlQWNjZXNzIGNvbnZlcnRUb0JhY2tpbmcoU3RvcmFnZVRleHR1cmVBY2Nlc3Mg
c3RvcmFnZVRleHR1cmVBY2Nlc3MpCit7CisgICAgc3dpdGNoIChzdG9yYWdlVGV4dHVyZUFjY2Vz
cykgeworICAgIGNhc2UgU3RvcmFnZVRleHR1cmVBY2Nlc3M6OldyaXRlT25seToKKyAgICAgICAg
cmV0dXJuIFdHUFVTdG9yYWdlVGV4dHVyZUFjY2Vzc19Xcml0ZU9ubHk7CisgICAgfQorfQorCitX
R1BVU3RvcmVPcCBjb252ZXJ0VG9CYWNraW5nKFN0b3JlT3Agc3RvcmVPcCkKK3sKKyAgICBzd2l0
Y2ggKHN0b3JlT3ApIHsKKyAgICBjYXNlIFN0b3JlT3A6OlN0b3JlOgorICAgICAgICByZXR1cm4g
V0dQVVN0b3JlT3BfU3RvcmU7CisgICAgY2FzZSBTdG9yZU9wOjpEaXNjYXJkOgorICAgICAgICBy
ZXR1cm4gV0dQVVN0b3JlT3BfRGlzY2FyZDsKKyAgICB9Cit9CisKK1dHUFVUZXh0dXJlQXNwZWN0
IGNvbnZlcnRUb0JhY2tpbmcoVGV4dHVyZUFzcGVjdCB0ZXh0dXJlQXNwZWN0KQoreworICAgIHN3
aXRjaCAodGV4dHVyZUFzcGVjdCkgeworICAgIGNhc2UgVGV4dHVyZUFzcGVjdDo6QWxsOgorICAg
ICAgICByZXR1cm4gV0dQVVRleHR1cmVBc3BlY3RfQWxsOworICAgIGNhc2UgVGV4dHVyZUFzcGVj
dDo6U3RlbmNpbE9ubHk6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUFzcGVjdF9TdGVuY2ls
T25seTsKKyAgICBjYXNlIFRleHR1cmVBc3BlY3Q6OkRlcHRoT25seToKKyAgICAgICAgcmV0dXJu
IFdHUFVUZXh0dXJlQXNwZWN0X0RlcHRoT25seTsKKyAgICB9Cit9CisKK1dHUFVUZXh0dXJlRGlt
ZW5zaW9uIGNvbnZlcnRUb0JhY2tpbmcoVGV4dHVyZURpbWVuc2lvbiB0ZXh0dXJlRGltZW5zaW9u
KQoreworICAgIHN3aXRjaCAodGV4dHVyZURpbWVuc2lvbikgeworICAgIGNhc2UgVGV4dHVyZURp
bWVuc2lvbjo6XzFkOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVEaW1lbnNpb25fMUQ7Cisg
ICAgY2FzZSBUZXh0dXJlRGltZW5zaW9uOjpfMmQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVy
ZURpbWVuc2lvbl8yRDsKKyAgICBjYXNlIFRleHR1cmVEaW1lbnNpb246Ol8zZDoKKyAgICAgICAg
cmV0dXJuIFdHUFVUZXh0dXJlRGltZW5zaW9uXzNEOworICAgIH0KK30KKworV0dQVVRleHR1cmVG
b3JtYXQgY29udmVydFRvQmFja2luZyhUZXh0dXJlRm9ybWF0IHRleHR1cmVGb3JtYXQpCit7Cisg
ICAgc3dpdGNoICh0ZXh0dXJlRm9ybWF0KSB7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSOHVu
b3JtOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUjhVbm9ybTsKKyAgICBjYXNl
IFRleHR1cmVGb3JtYXQ6OlI4c25vcm06CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1h
dF9SOFNub3JtOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6Ujh1aW50OgorICAgICAgICByZXR1
cm4gV0dQVVRleHR1cmVGb3JtYXRfUjhVaW50OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6Ujhz
aW50OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUjhTaW50OworICAgIGNhc2Ug
VGV4dHVyZUZvcm1hdDo6UjE2dWludDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0
X1IxNlVpbnQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSMTZzaW50OgorICAgICAgICByZXR1
cm4gV0dQVVRleHR1cmVGb3JtYXRfUjE2U2ludDsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OlIx
NmZsb2F0OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUjE2RmxvYXQ7CisgICAg
Y2FzZSBUZXh0dXJlRm9ybWF0OjpSZzh1bm9ybToKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJl
Rm9ybWF0X1JHOFVub3JtOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6Umc4c25vcm06CisgICAg
ICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SRzhTbm9ybTsKKyAgICBjYXNlIFRleHR1cmVG
b3JtYXQ6OlJnOHVpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SRzhVaW50
OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6Umc4c2ludDoKKyAgICAgICAgcmV0dXJuIFdHUFVU
ZXh0dXJlRm9ybWF0X1JHOFNpbnQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSMzJ1aW50Ogor
ICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUjMyVWludDsKKyAgICBjYXNlIFRleHR1
cmVGb3JtYXQ6OlIzMnNpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SMzJT
aW50OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UjMyZmxvYXQ6CisgICAgICAgIHJldHVybiBX
R1BVVGV4dHVyZUZvcm1hdF9SMzJGbG9hdDsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OlJnMTZ1
aW50OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkcxNlVpbnQ7CisgICAgY2Fz
ZSBUZXh0dXJlRm9ybWF0OjpSZzE2c2ludDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9y
bWF0X1JHMTZTaW50OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UmcxNmZsb2F0OgorICAgICAg
ICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkcxNkZsb2F0OworICAgIGNhc2UgVGV4dHVyZUZv
cm1hdDo6UmdiYTh1bm9ybToKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4
VW5vcm07CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZ2JhOHVub3JtU1JHQjoKKyAgICAgICAg
cmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4VW5vcm1TcmdiOworICAgIGNhc2UgVGV4dHVy
ZUZvcm1hdDo6UmdiYThzbm9ybToKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1JH
QkE4U25vcm07CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZ2JhOHVpbnQ6CisgICAgICAgIHJl
dHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFVpbnQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0
OjpSZ2JhOHNpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFNpbnQ7
CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpCZ3JhOHVub3JtOgorICAgICAgICByZXR1cm4gV0dQ
VVRleHR1cmVGb3JtYXRfQkdSQThVbm9ybTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkJncmE4
dW5vcm1TUkdCOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQkdSQThVbm9ybVNy
Z2I7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZ2I5ZTV1ZmxvYXQ6CisgICAgICAgIHJldHVy
biBXR1BVVGV4dHVyZUZvcm1hdF9SR0I5RTVVZmxvYXQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0
OjpSZ2IxMGEydW5vcm06CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SR0IxMEEy
VW5vcm07CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZzExYjEwdWZsb2F0OgorICAgICAgICBy
ZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkcxMUIxMFVmbG9hdDsKKyAgICBjYXNlIFRleHR1cmVG
b3JtYXQ6OlJnMzJ1aW50OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkczMlVp
bnQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZzMyc2ludDoKKyAgICAgICAgcmV0dXJuIFdH
UFVUZXh0dXJlRm9ybWF0X1JHMzJTaW50OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UmczMmZs
b2F0OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkczMkZsb2F0OworICAgIGNh
c2UgVGV4dHVyZUZvcm1hdDo6UmdiYTE2dWludDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJl
Rm9ybWF0X1JHQkExNlVpbnQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZ2JhMTZzaW50Ogor
ICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkdCQTE2U2ludDsKKyAgICBjYXNlIFRl
eHR1cmVGb3JtYXQ6OlJnYmExNmZsb2F0OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3Jt
YXRfUkdCQTE2RmxvYXQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZ2JhMzJ1aW50OgorICAg
ICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkdCQTMyVWludDsKKyAgICBjYXNlIFRleHR1
cmVGb3JtYXQ6OlJnYmEzMnNpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9S
R0JBMzJTaW50OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UmdiYTMyZmxvYXQ6CisgICAgICAg
IHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMzJGbG9hdDsKKyAgICBjYXNlIFRleHR1cmVG
b3JtYXQ6OlN0ZW5jaWw4OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfU3RlbmNp
bDg7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpEZXB0aDE2dW5vcm06CisgICAgICAgIHJldHVy
biBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDE2VW5vcm07CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0
OjpEZXB0aDI0cGx1czoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRQ
bHVzOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6RGVwdGgyNHBsdXNTdGVuY2lsODoKKyAgICAg
ICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRQbHVzU3RlbmNpbDg7CisgICAgY2Fz
ZSBUZXh0dXJlRm9ybWF0OjpEZXB0aDMyZmxvYXQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVy
ZUZvcm1hdF9EZXB0aDMyRmxvYXQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpCYzFSZ2JhVW5v
cm06CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9CQzFSR0JBVW5vcm07CisgICAg
Y2FzZSBUZXh0dXJlRm9ybWF0OjpCYzFSZ2JhVW5vcm1TUkdCOgorICAgICAgICByZXR1cm4gV0dQ
VVRleHR1cmVGb3JtYXRfQkMxUkdCQVVub3JtU3JnYjsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6
OkJjMlJnYmFVbm9ybToKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0JDMlJHQkFV
bm9ybTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkJjMlJnYmFVbm9ybVNSR0I6CisgICAgICAg
IHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9CQzJSR0JBVW5vcm1TcmdiOworICAgIGNhc2UgVGV4
dHVyZUZvcm1hdDo6QmMzUmdiYVVub3JtOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3Jt
YXRfQkMzUkdCQVVub3JtOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QmMzUmdiYVVub3JtU1JH
QjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0JDM1JHQkFVbm9ybVNyZ2I7Cisg
ICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpCYzRSVW5vcm06CisgICAgICAgIHJldHVybiBXR1BVVGV4
dHVyZUZvcm1hdF9CQzRSVW5vcm07CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpCYzRSU25vcm06
CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9CQzRSU25vcm07CisgICAgY2FzZSBU
ZXh0dXJlRm9ybWF0OjpCYzVSZ1Vub3JtOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3Jt
YXRfQkM1UkdVbm9ybTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkJjNVJnU25vcm06CisgICAg
ICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9CQzVSR1Nub3JtOworICAgIGNhc2UgVGV4dHVy
ZUZvcm1hdDo6QmM2aFJnYlVmbG9hdDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0
X0JDNkhSR0JVZmxvYXQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpCYzZoUmdiRmxvYXQ6Cisg
ICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9CQzZIUkdCRmxvYXQ7CisgICAgY2FzZSBU
ZXh0dXJlRm9ybWF0OjpCYzdSZ2JhVW5vcm06CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZv
cm1hdF9CQzdSR0JBVW5vcm07CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpCYzdSZ2JhVW5vcm1T
UkdCOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQkM3UkdCQVVub3JtU3JnYjsK
KyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkV0YzJSZ2I4dW5vcm06CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjhV
bm9ybSk7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpFdGMyUmdiOHVub3JtU1JHQjoKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1h
dF9FVEMyUkdCOHVub3JtU3JnYik7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpFdGMyUmdiOGEx
dW5vcm06CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQ
VVRleHR1cmVGb3JtYXRfRVRDMlJHQjhhMVVub3JtKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6
OkV0YzJSZ2I4YTF1bm9ybVNSR0I6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4
dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjhhMXVub3JtU3JnYik7CisgICAg
Y2FzZSBUZXh0dXJlRm9ybWF0OjpFdGMyUmdiYTh1bm9ybToKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCQThVbm9y
bSk7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpFdGMyUmdiYTh1bm9ybVNSR0I6CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRf
RVRDMlJHQkE4VW5vcm1TcmdiKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkVhY1IxMXVub3Jt
OgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0
dXJlRm9ybWF0X0VBQ1IxMVVub3JtKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkVhY1IxMXNu
b3JtOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVU
ZXh0dXJlRm9ybWF0X0VBQ1IxMVNub3JtKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkVhY1Jn
MTF1bm9ybToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihX
R1BVVGV4dHVyZUZvcm1hdF9FQUNSRzExVW5vcm0pOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6
RWFjUmcxMXNub3JtOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3Jt
YXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1JHMTFTbm9ybSk7CisgICAgY2FzZSBUZXh0dXJlRm9y
bWF0OjpBc3RjNHg0VW5vcm06CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVy
ZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzR4NFVub3JtKTsKKyAgICBjYXNlIFRleHR1
cmVGb3JtYXQ6OkFzdGM0eDRVbm9ybVNSR0I6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxX
R1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzR4NFVub3JtU3JnYik7Cisg
ICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpBc3RjNXg0VW5vcm06CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzV4NFVub3Jt
KTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGM1eDRVbm9ybVNSR0I6CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNU
QzV4NFVub3JtU3JnYik7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpBc3RjNXg1VW5vcm06Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVG
b3JtYXRfQVNUQzV4NVVub3JtKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGM1eDVVbm9y
bVNSR0I6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQ
VVRleHR1cmVGb3JtYXRfQVNUQzV4NVVub3JtU3JnYik7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0
OjpBc3RjNng1VW5vcm06CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZv
cm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzZ4NVVub3JtKTsKKyAgICBjYXNlIFRleHR1cmVG
b3JtYXQ6OkFzdGM2eDVVbm9ybVNSR0I6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BV
VGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzZ4NVVub3JtU3JnYik7CisgICAg
Y2FzZSBUZXh0dXJlRm9ybWF0OjpBc3RjNng2VW5vcm06CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzZ4NlVub3JtKTsK
KyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGM2eDZVbm9ybVNSR0I6CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzZ4
NlVub3JtU3JnYik7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpBc3RjOHg1VW5vcm06CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3Jt
YXRfQVNUQzh4NVVub3JtKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGM4eDVVbm9ybVNS
R0I6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRl
eHR1cmVGb3JtYXRfQVNUQzh4NVVub3JtU3JnYik7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpB
c3RjOHg2VW5vcm06CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1h
dD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4NlVub3JtKTsKKyAgICBjYXNlIFRleHR1cmVGb3Jt
YXQ6OkFzdGM4eDZVbm9ybVNSR0I6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4
dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4NlVub3JtU3JnYik7CisgICAgY2Fz
ZSBUZXh0dXJlRm9ybWF0OjpBc3RjOHg4VW5vcm06CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4OFVub3JtKTsKKyAg
ICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGM4eDhVbm9ybVNSR0I6CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4OFVu
b3JtU3JnYik7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpBc3RjMTB4NVVub3JtOgorICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0
X0FTVEMxMHg1VW5vcm0pOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0YzEweDVVbm9ybVNS
R0I6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRl
eHR1cmVGb3JtYXRfQVNUQzEweDVVbm9ybVNyZ2IpOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6
QXN0YzEweDZVbm9ybToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9y
bWF0PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4NlVub3JtKTsKKyAgICBjYXNlIFRleHR1cmVG
b3JtYXQ6OkFzdGMxMHg2VW5vcm1TUkdCOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQ
VVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg2VW5vcm1TcmdiKTsKKyAg
ICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGMxMHg4VW5vcm06CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDhVbm9y
bSk7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpBc3RjMTB4OFVub3JtU1JHQjoKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9B
U1RDMTB4OFVub3JtU3JnYik7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpBc3RjMTB4MTBVbm9y
bToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4
dHVyZUZvcm1hdF9BU1RDMTB4MTBVbm9ybSk7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpBc3Rj
MTB4MTBVbm9ybVNSR0I6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZv
cm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDEwVW5vcm1TcmdiKTsKKyAgICBjYXNlIFRl
eHR1cmVGb3JtYXQ6OkFzdGMxMngxMFVub3JtOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMFVub3JtKTsKKyAg
ICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGMxMngxMFVub3JtU1JHQjoKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4
MTBVbm9ybVNyZ2IpOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0YzEyeDEyVW5vcm06Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVG
b3JtYXRfQVNUQzEyeDEyVW5vcm0pOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0YzEyeDEy
VW5vcm1TUkdCOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+
KFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMlVub3JtU3JnYik7CisgICAgY2FzZSBUZXh0dXJl
Rm9ybWF0OjpEZXB0aDI0dW5vcm1TdGVuY2lsODoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJl
Rm9ybWF0X0RlcHRoMjRQbHVzU3RlbmNpbDg7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpEZXB0
aDMyZmxvYXRTdGVuY2lsODoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJl
Rm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDMyRmxvYXRTdGVuY2lsOCk7CisgICAgfQor
fQorCitXR1BVVGV4dHVyZVNhbXBsZVR5cGUgY29udmVydFRvQmFja2luZyhUZXh0dXJlU2FtcGxl
VHlwZSB0ZXh0dXJlU2FtcGxlVHlwZSkKK3sKKyAgICBzd2l0Y2ggKHRleHR1cmVTYW1wbGVUeXBl
KSB7CisgICAgY2FzZSBUZXh0dXJlU2FtcGxlVHlwZTo6RmxvYXQ6CisgICAgICAgIHJldHVybiBX
R1BVVGV4dHVyZVNhbXBsZVR5cGVfRmxvYXQ7CisgICAgY2FzZSBUZXh0dXJlU2FtcGxlVHlwZTo6
VW5maWx0ZXJhYmxlRmxvYXQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZVNhbXBsZVR5cGVf
VW5maWx0ZXJhYmxlRmxvYXQ7CisgICAgY2FzZSBUZXh0dXJlU2FtcGxlVHlwZTo6RGVwdGg6Cisg
ICAgICAgIHJldHVybiBXR1BVVGV4dHVyZVNhbXBsZVR5cGVfRGVwdGg7CisgICAgY2FzZSBUZXh0
dXJlU2FtcGxlVHlwZTo6U2ludDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlU2FtcGxlVHlw
ZV9TaW50OworICAgIGNhc2UgVGV4dHVyZVNhbXBsZVR5cGU6OlVpbnQ6CisgICAgICAgIHJldHVy
biBXR1BVVGV4dHVyZVNhbXBsZVR5cGVfVWludDsKKyAgICB9Cit9CisKK1dHUFVUZXh0dXJlVmll
d0RpbWVuc2lvbiBjb252ZXJ0VG9CYWNraW5nKFRleHR1cmVWaWV3RGltZW5zaW9uIHRleHR1cmVW
aWV3RGltZW5zaW9uKQoreworICAgIHN3aXRjaCAodGV4dHVyZVZpZXdEaW1lbnNpb24pIHsKKyAg
ICBjYXNlIFRleHR1cmVWaWV3RGltZW5zaW9uOjpfMWQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4
dHVyZVZpZXdEaW1lbnNpb25fMUQ7CisgICAgY2FzZSBUZXh0dXJlVmlld0RpbWVuc2lvbjo6XzJk
OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVWaWV3RGltZW5zaW9uXzJEOworICAgIGNhc2Ug
VGV4dHVyZVZpZXdEaW1lbnNpb246Ol8yZEFycmF5OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1
cmVWaWV3RGltZW5zaW9uXzJEQXJyYXk7CisgICAgY2FzZSBUZXh0dXJlVmlld0RpbWVuc2lvbjo6
Q3ViZToKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlVmlld0RpbWVuc2lvbl9DdWJlOworICAg
IGNhc2UgVGV4dHVyZVZpZXdEaW1lbnNpb246OkN1YmVBcnJheToKKyAgICAgICAgcmV0dXJuIFdH
UFVUZXh0dXJlVmlld0RpbWVuc2lvbl9DdWJlQXJyYXk7CisgICAgY2FzZSBUZXh0dXJlVmlld0Rp
bWVuc2lvbjo6XzNkOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVWaWV3RGltZW5zaW9uXzNE
OworICAgIH0KK30KKworV0dQVVZlcnRleEZvcm1hdCBjb252ZXJ0VG9CYWNraW5nKFZlcnRleEZv
cm1hdCB2ZXJ0ZXhGb3JtYXQpCit7CisgICAgc3dpdGNoICh2ZXJ0ZXhGb3JtYXQpIHsKKyAgICBj
YXNlIFZlcnRleEZvcm1hdDo6VWludDh4MjoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3Jt
YXRfVWludDh4MjsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6VWludDh4NDoKKyAgICAgICAgcmV0
dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfVWludDh4NDsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6U2lu
dDh4MjoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfU2ludDh4MjsKKyAgICBjYXNl
IFZlcnRleEZvcm1hdDo6U2ludDh4NDoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRf
U2ludDh4NDsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6VW5vcm04eDI6CisgICAgICAgIHJldHVy
biBXR1BVVmVydGV4Rm9ybWF0X1Vub3JtOHgyOworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpVbm9y
bTh4NDoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfVW5vcm04eDQ7CisgICAgY2Fz
ZSBWZXJ0ZXhGb3JtYXQ6OlNub3JtOHgyOgorICAgICAgICByZXR1cm4gV0dQVVZlcnRleEZvcm1h
dF9Tbm9ybTh4MjsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6U25vcm04eDQ6CisgICAgICAgIHJl
dHVybiBXR1BVVmVydGV4Rm9ybWF0X1Nub3JtOHg0OworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpV
aW50MTZ4MjoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfVWludDE2eDI7CisgICAg
Y2FzZSBWZXJ0ZXhGb3JtYXQ6OlVpbnQxNng0OgorICAgICAgICByZXR1cm4gV0dQVVZlcnRleEZv
cm1hdF9VaW50MTZ4NDsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6U2ludDE2eDI6CisgICAgICAg
IHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X1NpbnQxNngyOworICAgIGNhc2UgVmVydGV4Rm9ybWF0
OjpTaW50MTZ4NDoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfU2ludDE2eDQ7Cisg
ICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlVub3JtMTZ4MjoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0
ZXhGb3JtYXRfVW5vcm0xNngyOworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpVbm9ybTE2eDQ6Cisg
ICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X1Vub3JtMTZ4NDsKKyAgICBjYXNlIFZlcnRl
eEZvcm1hdDo6U25vcm0xNngyOgorICAgICAgICByZXR1cm4gV0dQVVZlcnRleEZvcm1hdF9Tbm9y
bTE2eDI7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlNub3JtMTZ4NDoKKyAgICAgICAgcmV0dXJu
IFdHUFVWZXJ0ZXhGb3JtYXRfU25vcm0xNng0OworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpGbG9h
dDE2eDI6CisgICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X0Zsb2F0MTZ4MjsKKyAgICBj
YXNlIFZlcnRleEZvcm1hdDo6RmxvYXQxNng0OgorICAgICAgICByZXR1cm4gV0dQVVZlcnRleEZv
cm1hdF9GbG9hdDE2eDQ7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OkZsb2F0MzI6CisgICAgICAg
IHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X0Zsb2F0MzI7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6
OkZsb2F0MzJ4MjoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfRmxvYXQzMngyOwor
ICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpGbG9hdDMyeDM6CisgICAgICAgIHJldHVybiBXR1BVVmVy
dGV4Rm9ybWF0X0Zsb2F0MzJ4MzsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6RmxvYXQzMng0Ogor
ICAgICAgICByZXR1cm4gV0dQVVZlcnRleEZvcm1hdF9GbG9hdDMyeDQ7CisgICAgY2FzZSBWZXJ0
ZXhGb3JtYXQ6OlVpbnQzMjoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfVWludDMy
OworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpVaW50MzJ4MjoKKyAgICAgICAgcmV0dXJuIFdHUFVW
ZXJ0ZXhGb3JtYXRfVWludDMyeDI7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlVpbnQzMngzOgor
ICAgICAgICByZXR1cm4gV0dQVVZlcnRleEZvcm1hdF9VaW50MzJ4MzsKKyAgICBjYXNlIFZlcnRl
eEZvcm1hdDo6VWludDMyeDQ6CisgICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X1VpbnQz
Mng0OworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpTaW50MzI6CisgICAgICAgIHJldHVybiBXR1BV
VmVydGV4Rm9ybWF0X1NpbnQzMjsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6U2ludDMyeDI6Cisg
ICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X1NpbnQzMngyOworICAgIGNhc2UgVmVydGV4
Rm9ybWF0OjpTaW50MzJ4MzoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfU2ludDMy
eDM7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlNpbnQzMng0OgorICAgICAgICByZXR1cm4gV0dQ
VVZlcnRleEZvcm1hdF9TaW50MzJ4NDsKKyAgICB9Cit9CisKK1dHUFVWZXJ0ZXhTdGVwTW9kZSBj
b252ZXJ0VG9CYWNraW5nKFZlcnRleFN0ZXBNb2RlIHZlcnRleFN0ZXBNb2RlKQoreworICAgIHN3
aXRjaCAodmVydGV4U3RlcE1vZGUpIHsKKyAgICBjYXNlIFZlcnRleFN0ZXBNb2RlOjpWZXJ0ZXg6
CisgICAgICAgIHJldHVybiBXR1BVVmVydGV4U3RlcE1vZGVfVmVydGV4OworICAgIGNhc2UgVmVy
dGV4U3RlcE1vZGU6Okluc3RhbmNlOgorICAgICAgICByZXR1cm4gV0dQVVZlcnRleFN0ZXBNb2Rl
X0luc3RhbmNlOworICAgIH0KK30KKworV0dQVUJ1ZmZlclVzYWdlRmxhZ3MgY29udmVydEJ1ZmZl
clVzYWdlRmxhZ3NUb0JhY2tpbmcoQnVmZmVyVXNhZ2VGbGFncyBidWZmZXJVc2FnZUZsYWdzKQor
eworICAgIFdHUFVCdWZmZXJVc2FnZUZsYWdzIHJlc3VsdCA9IDA7CisgICAgaWYgKGJ1ZmZlclVz
YWdlRmxhZ3MgJiBCdWZmZXJVc2FnZTo6TUFQX1JFQUQpCisgICAgICAgIHJlc3VsdCB8PSBXR1BV
QnVmZmVyVXNhZ2VfTWFwUmVhZDsKKyAgICBpZiAoYnVmZmVyVXNhZ2VGbGFncyAmIEJ1ZmZlclVz
YWdlOjpNQVBfV1JJVEUpCisgICAgICAgIHJlc3VsdCB8PSBXR1BVQnVmZmVyVXNhZ2VfTWFwV3Jp
dGU7CisgICAgaWYgKGJ1ZmZlclVzYWdlRmxhZ3MgJiBCdWZmZXJVc2FnZTo6Q09QWV9TUkMpCisg
ICAgICAgIHJlc3VsdCB8PSBXR1BVQnVmZmVyVXNhZ2VfQ29weVNyYzsKKyAgICBpZiAoYnVmZmVy
VXNhZ2VGbGFncyAmIEJ1ZmZlclVzYWdlOjpDT1BZX0RTVCkKKyAgICAgICAgcmVzdWx0IHw9IFdH
UFVCdWZmZXJVc2FnZV9Db3B5RHN0OworICAgIGlmIChidWZmZXJVc2FnZUZsYWdzICYgQnVmZmVy
VXNhZ2U6OklOREVYKQorICAgICAgICByZXN1bHQgfD0gV0dQVUJ1ZmZlclVzYWdlX0luZGV4Owor
ICAgIGlmIChidWZmZXJVc2FnZUZsYWdzICYgQnVmZmVyVXNhZ2U6OlZFUlRFWCkKKyAgICAgICAg
cmVzdWx0IHw9IFdHUFVCdWZmZXJVc2FnZV9WZXJ0ZXg7CisgICAgaWYgKGJ1ZmZlclVzYWdlRmxh
Z3MgJiBCdWZmZXJVc2FnZTo6VU5JRk9STSkKKyAgICAgICAgcmVzdWx0IHw9IFdHUFVCdWZmZXJV
c2FnZV9Vbmlmb3JtOworICAgIGlmIChidWZmZXJVc2FnZUZsYWdzICYgQnVmZmVyVXNhZ2U6OlNU
T1JBR0UpCisgICAgICAgIHJlc3VsdCB8PSBXR1BVQnVmZmVyVXNhZ2VfU3RvcmFnZTsKKyAgICBp
ZiAoYnVmZmVyVXNhZ2VGbGFncyAmIEJ1ZmZlclVzYWdlOjpJTkRJUkVDVCkKKyAgICAgICAgcmVz
dWx0IHw9IFdHUFVCdWZmZXJVc2FnZV9JbmRpcmVjdDsKKyAgICBpZiAoYnVmZmVyVXNhZ2VGbGFn
cyAmIEJ1ZmZlclVzYWdlOjpRVUVSWV9SRVNPTFZFKQorICAgICAgICByZXN1bHQgfD0gV0dQVUJ1
ZmZlclVzYWdlX1F1ZXJ5UmVzb2x2ZTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXR1BVQ29s
b3JXcml0ZU1hc2tGbGFncyBjb252ZXJ0Q29sb3JXcml0ZUZsYWdzVG9CYWNraW5nKENvbG9yV3Jp
dGVGbGFncyBjb2xvcldyaXRlRmxhZ3MpCit7CisgICAgV0dQVUNvbG9yV3JpdGVNYXNrRmxhZ3Mg
cmVzdWx0ID0gMDsKKyAgICBpZiAoY29sb3JXcml0ZUZsYWdzICYgQ29sb3JXcml0ZTo6UkVEKQor
ICAgICAgICByZXN1bHQgfD0gV0dQVUNvbG9yV3JpdGVNYXNrX1JlZDsKKyAgICBpZiAoY29sb3JX
cml0ZUZsYWdzICYgQ29sb3JXcml0ZTo6R1JFRU4pCisgICAgICAgIHJlc3VsdCB8PSBXR1BVQ29s
b3JXcml0ZU1hc2tfR3JlZW47CisgICAgaWYgKGNvbG9yV3JpdGVGbGFncyAmIENvbG9yV3JpdGU6
OkJMVUUpCisgICAgICAgIHJlc3VsdCB8PSBXR1BVQ29sb3JXcml0ZU1hc2tfQmx1ZTsKKyAgICBp
ZiAoY29sb3JXcml0ZUZsYWdzICYgQ29sb3JXcml0ZTo6QUxQSEEpCisgICAgICAgIHJlc3VsdCB8
PSBXR1BVQ29sb3JXcml0ZU1hc2tfQWxwaGE7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV0dQ
VU1hcE1vZGVGbGFncyBjb252ZXJ0TWFwTW9kZUZsYWdzVG9CYWNraW5nKE1hcE1vZGVGbGFncyBt
YXBNb2RlRmxhZ3MpCit7CisgICAgV0dQVU1hcE1vZGVGbGFncyByZXN1bHQgPSAwOworICAgIGlm
IChtYXBNb2RlRmxhZ3MgJiBNYXBNb2RlOjpSRUFEKQorICAgICAgICByZXN1bHQgfD0gV0dQVU1h
cE1vZGVfUmVhZDsKKyAgICBpZiAobWFwTW9kZUZsYWdzICYgTWFwTW9kZTo6V1JJVEUpCisgICAg
ICAgIHJlc3VsdCB8PSBXR1BVTWFwTW9kZV9Xcml0ZTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitXR1BVU2hhZGVyU3RhZ2VGbGFncyBjb252ZXJ0U2hhZGVyU3RhZ2VGbGFnc1RvQmFja2luZyhT
aGFkZXJTdGFnZUZsYWdzIHNoYWRlclN0YWdlRmxhZ3MpCit7CisgICAgV0dQVVNoYWRlclN0YWdl
RmxhZ3MgcmVzdWx0ID0gMDsKKyAgICBpZiAoc2hhZGVyU3RhZ2VGbGFncyAmIFNoYWRlclN0YWdl
OjpWRVJURVgpCisgICAgICAgIHJlc3VsdCB8PSBXR1BVU2hhZGVyU3RhZ2VfVmVydGV4OworICAg
IGlmIChzaGFkZXJTdGFnZUZsYWdzICYgU2hhZGVyU3RhZ2U6OkZSQUdNRU5UKQorICAgICAgICBy
ZXN1bHQgfD0gV0dQVVNoYWRlclN0YWdlX0ZyYWdtZW50OworICAgIGlmIChzaGFkZXJTdGFnZUZs
YWdzICYgU2hhZGVyU3RhZ2U6OkNPTVBVVEUpCisgICAgICAgIHJlc3VsdCB8PSBXR1BVU2hhZGVy
U3RhZ2VfQ29tcHV0ZTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXR1BVVGV4dHVyZVVzYWdl
RmxhZ3MgY29udmVydFRleHR1cmVVc2FnZUZsYWdzVG9CYWNraW5nKFRleHR1cmVVc2FnZUZsYWdz
IHRleHR1cmVVc2FnZUZsYWdzKQoreworICAgIFdHUFVUZXh0dXJlVXNhZ2VGbGFncyByZXN1bHQg
PSAwOworICAgIGlmICh0ZXh0dXJlVXNhZ2VGbGFncyAmIFRleHR1cmVVc2FnZTo6Q09QWV9TUkMp
CisgICAgICAgIHJlc3VsdCB8PSBXR1BVVGV4dHVyZVVzYWdlX0NvcHlTcmM7CisgICAgaWYgKHRl
eHR1cmVVc2FnZUZsYWdzICYgVGV4dHVyZVVzYWdlOjpDT1BZX0RTVCkKKyAgICAgICAgcmVzdWx0
IHw9IFdHUFVUZXh0dXJlVXNhZ2VfQ29weURzdDsKKyAgICBpZiAodGV4dHVyZVVzYWdlRmxhZ3Mg
JiBUZXh0dXJlVXNhZ2U6OlRFWFRVUkVfQklORElORykKKyAgICAgICAgcmVzdWx0IHw9IFdHUFVU
ZXh0dXJlVXNhZ2VfVGV4dHVyZUJpbmRpbmc7CisgICAgaWYgKHRleHR1cmVVc2FnZUZsYWdzICYg
VGV4dHVyZVVzYWdlOjpTVE9SQUdFX0JJTkRJTkcpCisgICAgICAgIHJlc3VsdCB8PSBXR1BVVGV4
dHVyZVVzYWdlX1N0b3JhZ2VCaW5kaW5nOworICAgIGlmICh0ZXh0dXJlVXNhZ2VGbGFncyAmIFRl
eHR1cmVVc2FnZTo6UkVOREVSX0FUVEFDSE1FTlQpCisgICAgICAgIHJlc3VsdCB8PSBXR1BVVGV4
dHVyZVVzYWdlX1JlbmRlckF0dGFjaG1lbnQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV0dQ
VUNvbG9yIGNvbnZlcnRUb0JhY2tpbmcoY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIHJldHVy
biBXVEY6OnN3aXRjaE9uKGNvbG9yLCBbXSAoY29uc3QgVmVjdG9yPGRvdWJsZT4mIHZlY3Rvcikg
eworICAgICAgICByZXR1cm4gV0dQVUNvbG9yIHsKKyAgICAgICAgICAgIHZlY3Rvci5zaXplKCkg
PiAwID8gdmVjdG9yWzBdIDogMCwKKyAgICAgICAgICAgIHZlY3Rvci5zaXplKCkgPiAxID8gdmVj
dG9yWzFdIDogMCwKKyAgICAgICAgICAgIHZlY3Rvci5zaXplKCkgPiAyID8gdmVjdG9yWzJdIDog
MCwKKyAgICAgICAgICAgIHZlY3Rvci5zaXplKCkgPiAzID8gdmVjdG9yWzNdIDogMCwKKyAgICAg
ICAgfTsKKyAgICB9LCBbXSAoY29uc3QgQ29sb3JEaWN0JiBjb2xvcikgeworICAgICAgICByZXR1
cm4gV0dQVUNvbG9yIHsKKyAgICAgICAgICAgIGNvbG9yLnIsCisgICAgICAgICAgICBjb2xvci5n
LAorICAgICAgICAgICAgY29sb3IuYiwKKyAgICAgICAgICAgIGNvbG9yLmEsCisgICAgICAgIH07
CisgICAgfSk7Cit9CisKK1dHUFVFeHRlbnQzRCBjb252ZXJ0VG9CYWNraW5nKGNvbnN0IEV4dGVu
dDNEJiBleHRlbnQzRCkKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihleHRlbnQzRCwgW10g
KGNvbnN0IFZlY3RvcjxJbnRlZ2VyQ29vcmRpbmF0ZT4mIHZlY3RvcikgeworICAgICAgICByZXR1
cm4gV0dQVUV4dGVudDNEIHsKKyAgICAgICAgICAgIHZlY3Rvci5zaXplKCkgPiAwID8gdmVjdG9y
WzBdIDogMCwKKyAgICAgICAgICAgIHZlY3Rvci5zaXplKCkgPiAxID8gdmVjdG9yWzFdIDogMCwK
KyAgICAgICAgICAgIHZlY3Rvci5zaXplKCkgPiAyID8gdmVjdG9yWzJdIDogMCwKKyAgICAgICAg
fTsKKyAgICB9LCBbXSAoY29uc3QgRXh0ZW50M0REaWN0JiBleHRlbnQpIHsKKyAgICAgICAgcmV0
dXJuIFdHUFVFeHRlbnQzRCB7CisgICAgICAgICAgICBleHRlbnQud2lkdGgsCisgICAgICAgICAg
ICBleHRlbnQuaGVpZ2h0LAorICAgICAgICAgICAgZXh0ZW50LmRlcHRoT3JBcnJheUxheWVycywK
KyAgICAgICAgfTsKKyAgICB9KTsKK30KKworV0dQVU9yaWdpbjNEIGNvbnZlcnRUb0JhY2tpbmco
Y29uc3QgT3JpZ2luMkQmIG9yaWdpbjJEKQoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG9y
aWdpbjJELCBbXSAoY29uc3QgVmVjdG9yPEludGVnZXJDb29yZGluYXRlPiYgdmVjdG9yKSB7Cisg
ICAgICAgIHJldHVybiBXR1BVT3JpZ2luM0QgeworICAgICAgICAgICAgdmVjdG9yLnNpemUoKSA+
IDAgPyB2ZWN0b3JbMF0gOiAwLAorICAgICAgICAgICAgdmVjdG9yLnNpemUoKSA+IDEgPyB2ZWN0
b3JbMV0gOiAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgfTsKKyAgICB9LCBbXSAoY29uc3Qg
T3JpZ2luMkREaWN0JiBvcmlnaW4pIHsKKyAgICAgICAgcmV0dXJuIFdHUFVPcmlnaW4zRCB7Cisg
ICAgICAgICAgICBvcmlnaW4ueCwKKyAgICAgICAgICAgIG9yaWdpbi55LAorICAgICAgICAgICAg
MCwKKyAgICAgICAgfTsKKyAgICB9KTsKK30KKworV0dQVU9yaWdpbjNEIGNvbnZlcnRUb0JhY2tp
bmcoY29uc3QgT3JpZ2luM0QmIG9yaWdpbjNEKQoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9u
KG9yaWdpbjNELCBbXSAoY29uc3QgVmVjdG9yPEludGVnZXJDb29yZGluYXRlPiYgdmVjdG9yKSB7
CisgICAgICAgIHJldHVybiBXR1BVT3JpZ2luM0QgeworICAgICAgICAgICAgdmVjdG9yLnNpemUo
KSA+IDAgPyB2ZWN0b3JbMF0gOiAwLAorICAgICAgICAgICAgdmVjdG9yLnNpemUoKSA+IDEgPyB2
ZWN0b3JbMV0gOiAwLAorICAgICAgICAgICAgdmVjdG9yLnNpemUoKSA+IDIgPyB2ZWN0b3JbMl0g
OiAwLAorICAgICAgICB9OworICAgIH0sIFtdIChjb25zdCBPcmlnaW4zRERpY3QmIG9yaWdpbikg
eworICAgICAgICByZXR1cm4gV0dQVU9yaWdpbjNEIHsKKyAgICAgICAgICAgIG9yaWdpbi54LAor
ICAgICAgICAgICAgb3JpZ2luLnksCisgICAgICAgICAgICBvcmlnaW4ueiwKKyAgICAgICAgfTsK
KyAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwv
V2ViR1BVQ29udmVydFRvQmFja2luZy5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGlj
cy9XZWJHUFUvSW1wbC9XZWJHUFVDb252ZXJ0VG9CYWNraW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGU0MWQ3
OTRhYjRiZjM2NjlkZDcxNGMxMjYzNDFmODY5ODRjZTUwOQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29udmVydFRv
QmFja2luZy5oCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJXZWJHUFVBZGRyZXNzTW9kZS5oIgorI2luY2x1ZGUgIldlYkdQVUJsZW5kRmFj
dG9yLmgiCisjaW5jbHVkZSAiV2ViR1BVQmxlbmRPcGVyYXRpb24uaCIKKyNpbmNsdWRlICJXZWJH
UFVCdWZmZXJCaW5kaW5nVHlwZS5oIgorI2luY2x1ZGUgIldlYkdQVUJ1ZmZlclVzYWdlLmgiCisj
aW5jbHVkZSAiV2ViR1BVQ29sb3IuaCIKKyNpbmNsdWRlICJXZWJHUFVDb2xvcldyaXRlLmgiCisj
aW5jbHVkZSAiV2ViR1BVQ29tcGFyZUZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiV2ViR1BVQ29tcGls
YXRpb25NZXNzYWdlVHlwZS5oIgorI2luY2x1ZGUgIldlYkdQVUN1bGxNb2RlLmgiCisjaW5jbHVk
ZSAiV2ViR1BVRXJyb3JGaWx0ZXIuaCIKKyNpbmNsdWRlICJXZWJHUFVFeHRlbnQzRC5oIgorI2lu
Y2x1ZGUgIldlYkdQVUZlYXR1cmVOYW1lLmgiCisjaW5jbHVkZSAiV2ViR1BVRmlsdGVyTW9kZS5o
IgorI2luY2x1ZGUgIldlYkdQVUZyb250RmFjZS5oIgorI2luY2x1ZGUgIldlYkdQVUluZGV4Rm9y
bWF0LmgiCisjaW5jbHVkZSAiV2ViR1BVTG9hZE9wLmgiCisjaW5jbHVkZSAiV2ViR1BVTWFwTW9k
ZS5oIgorI2luY2x1ZGUgIldlYkdQVU9yaWdpbjJELmgiCisjaW5jbHVkZSAiV2ViR1BVT3JpZ2lu
M0QuaCIKKyNpbmNsdWRlICJXZWJHUFVQaXBlbGluZVN0YXRpc3RpY05hbWUuaCIKKyNpbmNsdWRl
ICJXZWJHUFVQb3dlclByZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXZWJHUFVQcmltaXRpdmVUb3Bv
bG9neS5oIgorI2luY2x1ZGUgIldlYkdQVVF1ZXJ5VHlwZS5oIgorI2luY2x1ZGUgIldlYkdQVVNh
bXBsZXJCaW5kaW5nVHlwZS5oIgorI2luY2x1ZGUgIldlYkdQVVNoYWRlclN0YWdlLmgiCisjaW5j
bHVkZSAiV2ViR1BVU3RlbmNpbE9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIldlYkdQVVN0b3JhZ2VU
ZXh0dXJlQWNjZXNzLmgiCisjaW5jbHVkZSAiV2ViR1BVU3RvcmVPcC5oIgorI2luY2x1ZGUgIldl
YkdQVVRleHR1cmVBc3BlY3QuaCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJlRGltZW5zaW9uLmgi
CisjaW5jbHVkZSAiV2ViR1BVVGV4dHVyZUZvcm1hdC5oIgorI2luY2x1ZGUgIldlYkdQVVRleHR1
cmVTYW1wbGVUeXBlLmgiCisjaW5jbHVkZSAiV2ViR1BVVGV4dHVyZVVzYWdlLmgiCisjaW5jbHVk
ZSAiV2ViR1BVVGV4dHVyZVZpZXdEaW1lbnNpb24uaCIKKyNpbmNsdWRlICJXZWJHUFVWZXJ0ZXhG
b3JtYXQuaCIKKyNpbmNsdWRlICJXZWJHUFVWZXJ0ZXhTdGVwTW9kZS5oIgorI2luY2x1ZGUgPFdl
YkdQVS9XZWJHUFUuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKwor
V0dQVUFkZHJlc3NNb2RlIGNvbnZlcnRUb0JhY2tpbmcoQWRkcmVzc01vZGUpOworV0dQVUJsZW5k
RmFjdG9yIGNvbnZlcnRUb0JhY2tpbmcoQmxlbmRGYWN0b3IpOworV0dQVUJsZW5kT3BlcmF0aW9u
IGNvbnZlcnRUb0JhY2tpbmcoQmxlbmRPcGVyYXRpb24pOworV0dQVUJ1ZmZlckJpbmRpbmdUeXBl
IGNvbnZlcnRUb0JhY2tpbmcoQnVmZmVyQmluZGluZ1R5cGUpOworV0dQVUNvbXBhcmVGdW5jdGlv
biBjb252ZXJ0VG9CYWNraW5nKENvbXBhcmVGdW5jdGlvbik7CitXR1BVQ29tcGlsYXRpb25NZXNz
YWdlVHlwZSBjb252ZXJ0VG9CYWNraW5nKENvbXBpbGF0aW9uTWVzc2FnZVR5cGUpOworV0dQVUN1
bGxNb2RlIGNvbnZlcnRUb0JhY2tpbmcoQ3VsbE1vZGUpOworV0dQVUVycm9yRmlsdGVyIGNvbnZl
cnRUb0JhY2tpbmcoRXJyb3JGaWx0ZXIpOworV0dQVUZlYXR1cmVOYW1lIGNvbnZlcnRUb0JhY2tp
bmcoRmVhdHVyZU5hbWUpOworV0dQVUZpbHRlck1vZGUgY29udmVydFRvQmFja2luZyhGaWx0ZXJN
b2RlKTsKK1dHUFVGcm9udEZhY2UgY29udmVydFRvQmFja2luZyhGcm9udEZhY2UpOworV0dQVUlu
ZGV4Rm9ybWF0IGNvbnZlcnRUb0JhY2tpbmcoSW5kZXhGb3JtYXQpOworV0dQVUxvYWRPcCBjb252
ZXJ0VG9CYWNraW5nKExvYWRPcCk7CitXR1BVUGlwZWxpbmVTdGF0aXN0aWNOYW1lIGNvbnZlcnRU
b0JhY2tpbmcoUGlwZWxpbmVTdGF0aXN0aWNOYW1lKTsKK1dHUFVQb3dlclByZWZlcmVuY2UgY29u
dmVydFRvQmFja2luZyhQb3dlclByZWZlcmVuY2UpOworV0dQVVByaW1pdGl2ZVRvcG9sb2d5IGNv
bnZlcnRUb0JhY2tpbmcoUHJpbWl0aXZlVG9wb2xvZ3kpOworV0dQVVF1ZXJ5VHlwZSBjb252ZXJ0
VG9CYWNraW5nKFF1ZXJ5VHlwZSk7CitXR1BVU2FtcGxlckJpbmRpbmdUeXBlIGNvbnZlcnRUb0Jh
Y2tpbmcoU2FtcGxlckJpbmRpbmdUeXBlKTsKK1dHUFVTdGVuY2lsT3BlcmF0aW9uIGNvbnZlcnRU
b0JhY2tpbmcoU3RlbmNpbE9wZXJhdGlvbik7CitXR1BVU3RvcmFnZVRleHR1cmVBY2Nlc3MgY29u
dmVydFRvQmFja2luZyhTdG9yYWdlVGV4dHVyZUFjY2Vzcyk7CitXR1BVU3RvcmVPcCBjb252ZXJ0
VG9CYWNraW5nKFN0b3JlT3ApOworV0dQVVRleHR1cmVBc3BlY3QgY29udmVydFRvQmFja2luZyhU
ZXh0dXJlQXNwZWN0KTsKK1dHUFVUZXh0dXJlRGltZW5zaW9uIGNvbnZlcnRUb0JhY2tpbmcoVGV4
dHVyZURpbWVuc2lvbik7CitXR1BVVGV4dHVyZUZvcm1hdCBjb252ZXJ0VG9CYWNraW5nKFRleHR1
cmVGb3JtYXQpOworV0dQVVRleHR1cmVTYW1wbGVUeXBlIGNvbnZlcnRUb0JhY2tpbmcoVGV4dHVy
ZVNhbXBsZVR5cGUpOworV0dQVVRleHR1cmVWaWV3RGltZW5zaW9uIGNvbnZlcnRUb0JhY2tpbmco
VGV4dHVyZVZpZXdEaW1lbnNpb24pOworV0dQVVZlcnRleEZvcm1hdCBjb252ZXJ0VG9CYWNraW5n
KFZlcnRleEZvcm1hdCk7CitXR1BVVmVydGV4U3RlcE1vZGUgY29udmVydFRvQmFja2luZyhWZXJ0
ZXhTdGVwTW9kZSk7CitXR1BVQnVmZmVyVXNhZ2VGbGFncyBjb252ZXJ0QnVmZmVyVXNhZ2VGbGFn
c1RvQmFja2luZyhCdWZmZXJVc2FnZUZsYWdzKTsKK1dHUFVDb2xvcldyaXRlTWFza0ZsYWdzIGNv
bnZlcnRDb2xvcldyaXRlRmxhZ3NUb0JhY2tpbmcoQ29sb3JXcml0ZUZsYWdzKTsKK1dHUFVNYXBN
b2RlRmxhZ3MgY29udmVydE1hcE1vZGVGbGFnc1RvQmFja2luZyhNYXBNb2RlRmxhZ3MpOworV0dQ
VVNoYWRlclN0YWdlRmxhZ3MgY29udmVydFNoYWRlclN0YWdlRmxhZ3NUb0JhY2tpbmcoU2hhZGVy
U3RhZ2VGbGFncyk7CitXR1BVVGV4dHVyZVVzYWdlRmxhZ3MgY29udmVydFRleHR1cmVVc2FnZUZs
YWdzVG9CYWNraW5nKFRleHR1cmVVc2FnZUZsYWdzKTsKK1dHUFVDb2xvciBjb252ZXJ0VG9CYWNr
aW5nKGNvbnN0IENvbG9yJik7CitXR1BVRXh0ZW50M0QgY29udmVydFRvQmFja2luZyhjb25zdCBF
eHRlbnQzRCYpOworV0dQVU9yaWdpbjNEIGNvbnZlcnRUb0JhY2tpbmcoY29uc3QgT3JpZ2luMkQm
KTsKK1dHUFVPcmlnaW4zRCBjb252ZXJ0VG9CYWNraW5nKGNvbnN0IE9yaWdpbjNEJik7CisKK30g
Ly8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVURldmljZUltcGwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVE
ZXZpY2VJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZTE3YjIzMGVjZmU5MmYxM2Q0NmM2YTkwNDE4MzUw
YWRlMzUwNzE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVEZXZpY2VJbXBsLmNwcApAQCAtMCwwICsxLDU4MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVEZXZpY2VJ
bXBsLmgiCisKKyNpbmNsdWRlICJXZWJHUFVCaW5kR3JvdXBEZXNjcmlwdG9yLmgiCisjaW5jbHVk
ZSAiV2ViR1BVQmluZEdyb3VwSW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVUJpbmRHcm91cExheW91
dERlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJXZWJHUFVCaW5kR3JvdXBMYXlvdXRJbXBsLmgiCisj
aW5jbHVkZSAiV2ViR1BVQnVmZmVyRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIldlYkdQVUJ1ZmZl
ckltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVDb21tYW5kRW5jb2RlckRlc2NyaXB0b3IuaCIKKyNp
bmNsdWRlICJXZWJHUFVDb21tYW5kRW5jb2RlckltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVDb21w
dXRlUGlwZWxpbmVEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiV2ViR1BVQ29tcHV0ZVBpcGVsaW5l
SW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVUNvbnZlcnRUb0JhY2tpbmcuaCIKKyNpbmNsdWRlICJX
ZWJHUFVFeHRlcm5hbFRleHR1cmVJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVT3V0T2ZNZW1vcnlF
cnJvci5oIgorI2luY2x1ZGUgIldlYkdQVVBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvci5oIgorI2lu
Y2x1ZGUgIldlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVVF1ZXJ5
U2V0RGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIldlYkdQVVF1ZXJ5U2V0SW1wbC5oIgorI2luY2x1
ZGUgIldlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiV2Vi
R1BVUmVuZGVyQnVuZGxlRW5jb2RlckltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVSZW5kZXJQaXBl
bGluZURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJXZWJHUFVSZW5kZXJQaXBlbGluZUltcGwuaCIK
KyNpbmNsdWRlICJXZWJHUFVTYW1wbGVyRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIldlYkdQVVNh
bXBsZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVU2hhZGVyTW9kdWxlRGVzY3JpcHRvci5oIgor
I2luY2x1ZGUgIldlYkdQVVNoYWRlck1vZHVsZUltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0
dXJlRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIldlYkdQVVRleHR1cmVJbXBsLmgiCisjaW5jbHVk
ZSAiV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVVmFsaWRhdGlvbkVy
cm9yLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsK
K25hbWVzcGFjZSBXZWJHUFUgeworCitEZXZpY2VJbXBsOjpEZXZpY2VJbXBsKFdHUFVEZXZpY2Ug
ZGV2aWNlLCBSZWY8U3VwcG9ydGVkRmVhdHVyZXM+JiYgZmVhdHVyZXMsIFJlZjxTdXBwb3J0ZWRM
aW1pdHM+JiYgbGltaXRzKQorICAgIDogRGV2aWNlKFdURk1vdmUoZmVhdHVyZXMpLCBXVEZNb3Zl
KGxpbWl0cykpCisgICAgLCBtX2JhY2tpbmcoZGV2aWNlKQoreworfQorCitEZXZpY2VJbXBsOjp+
RGV2aWNlSW1wbCgpCit7CisgICAgd2dwdURldmljZVJlbGVhc2UobV9iYWNraW5nKTsKK30KKwor
dm9pZCBEZXZpY2VJbXBsOjpkZXN0cm95KCkKK3sKKyAgICB3Z3B1RGV2aWNlRGVzdHJveShtX2Jh
Y2tpbmcpOworfQorCitSZWY8QnVmZmVyPiBEZXZpY2VJbXBsOjpjcmVhdGVCdWZmZXIoY29uc3Qg
QnVmZmVyRGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBhdXRvIGxhYmVsID0gZGVzY3Jp
cHRvci5sYWJlbC51dGY4KCk7CisKKyAgICBXR1BVQnVmZmVyRGVzY3JpcHRvciBiYWNraW5nRGVz
Y3JpcHRvciB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIGxhYmVsLmRhdGEoKSwKKyAgICAg
ICAgY29udmVydEJ1ZmZlclVzYWdlRmxhZ3NUb0JhY2tpbmcoZGVzY3JpcHRvci51c2FnZSksCisg
ICAgICAgIGRlc2NyaXB0b3Iuc2l6ZSwKKyAgICAgICAgZGVzY3JpcHRvci5tYXBwZWRBdENyZWF0
aW9uLAorICAgIH07CisKKyAgICByZXR1cm4gQnVmZmVySW1wbDo6Y3JlYXRlKHdncHVEZXZpY2VD
cmVhdGVCdWZmZXIobV9iYWNraW5nLCAmYmFja2luZ0Rlc2NyaXB0b3IpKTsKK30KKworUmVmPFRl
eHR1cmU+IERldmljZUltcGw6OmNyZWF0ZVRleHR1cmUoY29uc3QgVGV4dHVyZURlc2NyaXB0b3Im
IGRlc2NyaXB0b3IpCit7CisgICAgYXV0byBzaXplID0gY29udmVydFRvQmFja2luZyhkZXNjcmlw
dG9yLnNpemUpOworCisgICAgYXV0byBsYWJlbCA9IGRlc2NyaXB0b3IubGFiZWwudXRmOCgpOwor
CisgICAgV0dQVVRleHR1cmVEZXNjcmlwdG9yIGJhY2tpbmdEZXNjcmlwdG9yIHsKKyAgICAgICAg
bnVsbHB0ciwKKyAgICAgICAgbGFiZWwuZGF0YSgpLAorICAgICAgICBjb252ZXJ0VGV4dHVyZVVz
YWdlRmxhZ3NUb0JhY2tpbmcoZGVzY3JpcHRvci51c2FnZSksCisgICAgICAgIGNvbnZlcnRUb0Jh
Y2tpbmcoZGVzY3JpcHRvci5kaW1lbnNpb24pLAorICAgICAgICBzaXplLAorICAgICAgICBjb252
ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3IuZm9ybWF0KSwKKyAgICAgICAgZGVzY3JpcHRvci5taXBM
ZXZlbENvdW50LAorICAgICAgICBkZXNjcmlwdG9yLnNhbXBsZUNvdW50LAorICAgIH07CisKKyAg
ICByZXR1cm4gVGV4dHVyZUltcGw6OmNyZWF0ZSh3Z3B1RGV2aWNlQ3JlYXRlVGV4dHVyZShtX2Jh
Y2tpbmcsICZiYWNraW5nRGVzY3JpcHRvciksIGRlc2NyaXB0b3IuZm9ybWF0LCBkZXNjcmlwdG9y
LmRpbWVuc2lvbik7Cit9CisKK1JlZjxTYW1wbGVyPiBEZXZpY2VJbXBsOjpjcmVhdGVTYW1wbGVy
KGNvbnN0IFNhbXBsZXJEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIGF1dG8gbGFiZWwg
PSBkZXNjcmlwdG9yLmxhYmVsLnV0ZjgoKTsKKworICAgIFdHUFVTYW1wbGVyRGVzY3JpcHRvciBi
YWNraW5nRGVzY3JpcHRvciB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIGxhYmVsLmRhdGEo
KSwKKyAgICAgICAgY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLmFkZHJlc3NNb2RlVSksCisg
ICAgICAgIGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci5hZGRyZXNzTW9kZVYpLAorICAgICAg
ICBjb252ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3IuYWRkcmVzc01vZGVXKSwKKyAgICAgICAgY29u
dmVydFRvQmFja2luZyhkZXNjcmlwdG9yLm1hZ0ZpbHRlciksCisgICAgICAgIGNvbnZlcnRUb0Jh
Y2tpbmcoZGVzY3JpcHRvci5taW5GaWx0ZXIpLAorICAgICAgICBjb252ZXJ0VG9CYWNraW5nKGRl
c2NyaXB0b3IubWlwbWFwRmlsdGVyKSwKKyAgICAgICAgZGVzY3JpcHRvci5sb2RNaW5DbGFtcCwK
KyAgICAgICAgZGVzY3JpcHRvci5sb2RNYXhDbGFtcCwKKyAgICAgICAgZGVzY3JpcHRvci5jb21w
YXJlID8gY29udmVydFRvQmFja2luZygqZGVzY3JpcHRvci5jb21wYXJlKSA6IFdHUFVDb21wYXJl
RnVuY3Rpb25fQWx3YXlzLAorICAgICAgICBkZXNjcmlwdG9yLm1heEFuaXNvdHJvcHksCisgICAg
fTsKKworICAgIHJldHVybiBTYW1wbGVySW1wbDo6Y3JlYXRlKHdncHVEZXZpY2VDcmVhdGVTYW1w
bGVyKG1fYmFja2luZywgJmJhY2tpbmdEZXNjcmlwdG9yKSk7Cit9CisKK1JlZjxFeHRlcm5hbFRl
eHR1cmU+IERldmljZUltcGw6OmltcG9ydEV4dGVybmFsVGV4dHVyZShjb25zdCBFeHRlcm5hbFRl
eHR1cmVEZXNjcmlwdG9yJikKK3sKKyAgICByZXR1cm4gRXh0ZXJuYWxUZXh0dXJlSW1wbDo6Y3Jl
YXRlKCk7Cit9CisKK1JlZjxCaW5kR3JvdXBMYXlvdXQ+IERldmljZUltcGw6OmNyZWF0ZUJpbmRH
cm91cExheW91dChjb25zdCBCaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQor
eworICAgIGF1dG8gbGFiZWwgPSBkZXNjcmlwdG9yLmxhYmVsLnV0ZjgoKTsKKworICAgIFZlY3Rv
cjxXR1BVQmluZEdyb3VwTGF5b3V0RW50cnk+IGJhY2tpbmdFbnRyaWVzOworICAgIGJhY2tpbmdF
bnRyaWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGVzY3JpcHRvci5lbnRyaWVzLnNpemUoKSk7
CisgICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IGRlc2NyaXB0b3IuZW50cmllcykgeworICAg
ICAgICBiYWNraW5nRW50cmllcy51bmNoZWNrZWRBcHBlbmQoV0dQVUJpbmRHcm91cExheW91dEVu
dHJ5IHsKKyAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICBlbnRyeS5iaW5kaW5nLAor
ICAgICAgICAgICAgY29udmVydFNoYWRlclN0YWdlRmxhZ3NUb0JhY2tpbmcoZW50cnkudmlzaWJp
bGl0eSksIHsKKyAgICAgICAgICAgICAgICBudWxscHRyLAorICAgICAgICAgICAgICAgIGVudHJ5
LmJ1ZmZlciA/IGNvbnZlcnRUb0JhY2tpbmcoZW50cnkuYnVmZmVyLT50eXBlKSA6IFdHUFVCdWZm
ZXJCaW5kaW5nVHlwZV9VbmRlZmluZWQsCisgICAgICAgICAgICAgICAgZW50cnkuYnVmZmVyID8g
ZW50cnkuYnVmZmVyLT5oYXNEeW5hbWljT2Zmc2V0IDogZmFsc2UsCisgICAgICAgICAgICAgICAg
ZW50cnkuYnVmZmVyID8gZW50cnkuYnVmZmVyLT5taW5CaW5kaW5nU2l6ZSA6IDAsCisgICAgICAg
ICAgICB9LCB7CisgICAgICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICBlbnRy
eS5zYW1wbGVyID8gY29udmVydFRvQmFja2luZyhlbnRyeS5zYW1wbGVyLT50eXBlKSA6IFdHUFVT
YW1wbGVyQmluZGluZ1R5cGVfVW5kZWZpbmVkLAorICAgICAgICAgICAgfSwgeworICAgICAgICAg
ICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICAgICAgZW50cnkudGV4dHVyZSA/IGNvbnZlcnRU
b0JhY2tpbmcoZW50cnkudGV4dHVyZS0+c2FtcGxlVHlwZSkgOiBXR1BVVGV4dHVyZVNhbXBsZVR5
cGVfVW5kZWZpbmVkLAorICAgICAgICAgICAgICAgIGVudHJ5LnRleHR1cmUgPyBjb252ZXJ0VG9C
YWNraW5nKGVudHJ5LnRleHR1cmUtPnZpZXdEaW1lbnNpb24pIDogV0dQVVRleHR1cmVWaWV3RGlt
ZW5zaW9uX1VuZGVmaW5lZCwKKyAgICAgICAgICAgICAgICBlbnRyeS50ZXh0dXJlID8gZW50cnku
dGV4dHVyZS0+bXVsdGlzYW1wbGVkIDogZmFsc2UsCisgICAgICAgICAgICB9LCB7CisgICAgICAg
ICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICBlbnRyeS5zdG9yYWdlVGV4dHVyZSA/
IGNvbnZlcnRUb0JhY2tpbmcoZW50cnkuc3RvcmFnZVRleHR1cmUtPmFjY2VzcykgOiBXR1BVU3Rv
cmFnZVRleHR1cmVBY2Nlc3NfVW5kZWZpbmVkLAorICAgICAgICAgICAgICAgIGVudHJ5LnN0b3Jh
Z2VUZXh0dXJlID8gY29udmVydFRvQmFja2luZyhlbnRyeS5zdG9yYWdlVGV4dHVyZS0+Zm9ybWF0
KSA6IFdHUFVUZXh0dXJlRm9ybWF0X1VuZGVmaW5lZCwKKyAgICAgICAgICAgICAgICBlbnRyeS5z
dG9yYWdlVGV4dHVyZSA/IGNvbnZlcnRUb0JhY2tpbmcoZW50cnkuc3RvcmFnZVRleHR1cmUtPnZp
ZXdEaW1lbnNpb24pIDogV0dQVVRleHR1cmVWaWV3RGltZW5zaW9uX1VuZGVmaW5lZCwKKyAgICAg
ICAgICAgIH0sCisgICAgICAgIH0pOworICAgIH0KKworICAgIFdHUFVCaW5kR3JvdXBMYXlvdXRE
ZXNjcmlwdG9yIGJhY2tpbmdEZXNjcmlwdG9yIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAg
bGFiZWwuZGF0YSgpLAorICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYmFja2luZ0VudHJp
ZXMuc2l6ZSgpKSwKKyAgICAgICAgYmFja2luZ0VudHJpZXMuZGF0YSgpLAorICAgIH07CisKKyAg
ICByZXR1cm4gQmluZEdyb3VwTGF5b3V0SW1wbDo6Y3JlYXRlKHdncHVEZXZpY2VDcmVhdGVCaW5k
R3JvdXBMYXlvdXQobV9iYWNraW5nLCAmYmFja2luZ0Rlc2NyaXB0b3IpKTsKK30KKworUmVmPFBp
cGVsaW5lTGF5b3V0PiBEZXZpY2VJbXBsOjpjcmVhdGVQaXBlbGluZUxheW91dChjb25zdCBQaXBl
bGluZUxheW91dERlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgYXV0byBsYWJlbCA9IGRl
c2NyaXB0b3IubGFiZWwudXRmOCgpOworCisgICAgVmVjdG9yPFdHUFVCaW5kR3JvdXBMYXlvdXQ+
IGJhY2tpbmdCaW5kR3JvdXBMYXlvdXRzOworICAgIGJhY2tpbmdCaW5kR3JvdXBMYXlvdXRzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoZGVzY3JpcHRvci5iaW5kR3JvdXBMYXlvdXRzLnNpemUoKSk7
CisgICAgZm9yIChhdXRvIGJpbmRHcm91cExheW91dCA6IGRlc2NyaXB0b3IuYmluZEdyb3VwTGF5
b3V0cykKKyAgICAgICAgYmFja2luZ0JpbmRHcm91cExheW91dHMudW5jaGVja2VkQXBwZW5kKHN0
YXRpY19jYXN0PGNvbnN0IEJpbmRHcm91cExheW91dEltcGwmPihiaW5kR3JvdXBMYXlvdXQuZ2V0
KCkpLmJhY2tpbmcoKSk7CisKKyAgICBXR1BVUGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yIGJhY2tp
bmdEZXNjcmlwdG9yIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgbGFiZWwuZGF0YSgpLAor
ICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYmFja2luZ0JpbmRHcm91cExheW91dHMuc2l6
ZSgpKSwKKyAgICAgICAgYmFja2luZ0JpbmRHcm91cExheW91dHMuZGF0YSgpLAorICAgIH07CisK
KyAgICByZXR1cm4gUGlwZWxpbmVMYXlvdXRJbXBsOjpjcmVhdGUod2dwdURldmljZUNyZWF0ZVBp
cGVsaW5lTGF5b3V0KG1fYmFja2luZywgJmJhY2tpbmdEZXNjcmlwdG9yKSk7Cit9CisKK1JlZjxC
aW5kR3JvdXA+IERldmljZUltcGw6OmNyZWF0ZUJpbmRHcm91cChjb25zdCBCaW5kR3JvdXBEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIGF1dG8gbGFiZWwgPSBkZXNjcmlwdG9yLmxhYmVs
LnV0ZjgoKTsKKworICAgIFZlY3RvcjxXR1BVQmluZEdyb3VwRW50cnk+IGJhY2tpbmdFbnRyaWVz
OworICAgIGJhY2tpbmdFbnRyaWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGVzY3JpcHRvci5l
bnRyaWVzLnNpemUoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBiaW5kR3JvdXBFbnRyeSA6IGRl
c2NyaXB0b3IuZW50cmllcykgeworICAgICAgICBiYWNraW5nRW50cmllcy51bmNoZWNrZWRBcHBl
bmQoV0dQVUJpbmRHcm91cEVudHJ5IHsKKyAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAg
ICBiaW5kR3JvdXBFbnRyeS5iaW5kaW5nLAorICAgICAgICAgICAgc3RkOjpob2xkc19hbHRlcm5h
dGl2ZTxCdWZmZXJCaW5kaW5nPihiaW5kR3JvdXBFbnRyeS5yZXNvdXJjZSkgPyBzdGF0aWNfY2Fz
dDxjb25zdCBCdWZmZXJJbXBsJj4oc3RkOjpnZXQ8QnVmZmVyQmluZGluZz4oYmluZEdyb3VwRW50
cnkucmVzb3VyY2UpLmJ1ZmZlcikuYmFja2luZygpIDogbnVsbHB0ciwKKyAgICAgICAgICAgIHN0
ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8QnVmZmVyQmluZGluZz4oYmluZEdyb3VwRW50cnkucmVzb3Vy
Y2UpID8gc3RkOjpnZXQ8QnVmZmVyQmluZGluZz4oYmluZEdyb3VwRW50cnkucmVzb3VyY2UpLm9m
ZnNldCA6IDAsCisgICAgICAgICAgICBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPEJ1ZmZlckJpbmRp
bmc+KGJpbmRHcm91cEVudHJ5LnJlc291cmNlKSA/IHN0ZDo6Z2V0PEJ1ZmZlckJpbmRpbmc+KGJp
bmRHcm91cEVudHJ5LnJlc291cmNlKS5zaXplLnZhbHVlX29yKFdHUFVfV0hPTEVfU0laRSkgOiAw
LAorICAgICAgICAgICAgc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPFNhbXBsZXI+PihiaW5kR3JvdXBFbnRyeS5yZXNvdXJjZSkgPyBzdGF0aWNfY2FzdDxjb25z
dCBTYW1wbGVySW1wbCY+KHN0ZDo6Z2V0PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8U2FtcGxlcj4+
KGJpbmRHcm91cEVudHJ5LnJlc291cmNlKS5nZXQoKSkuYmFja2luZygpIDogbnVsbHB0ciwKKyAg
ICAgICAgICAgIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxU
ZXh0dXJlVmlldz4+KGJpbmRHcm91cEVudHJ5LnJlc291cmNlKSA/IHN0YXRpY19jYXN0PGNvbnN0
IFRleHR1cmVWaWV3SW1wbCY+KHN0ZDo6Z2V0PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8VGV4dHVy
ZVZpZXc+PihiaW5kR3JvdXBFbnRyeS5yZXNvdXJjZSkuZ2V0KCkpLmJhY2tpbmcoKSA6IG51bGxw
dHIsCisgICAgICAgIH0pOworICAgIH0KKworICAgIFdHUFVCaW5kR3JvdXBEZXNjcmlwdG9yIGJh
Y2tpbmdEZXNjcmlwdG9yIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgbGFiZWwuZGF0YSgp
LAorICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBCaW5kR3JvdXBMYXlvdXRJbXBsJj4oZGVzY3Jp
cHRvci5sYXlvdXQpLmJhY2tpbmcoKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGJh
Y2tpbmdFbnRyaWVzLnNpemUoKSksCisgICAgICAgIGJhY2tpbmdFbnRyaWVzLmRhdGEoKSwKKyAg
ICB9OworCisgICAgcmV0dXJuIEJpbmRHcm91cEltcGw6OmNyZWF0ZSh3Z3B1RGV2aWNlQ3JlYXRl
QmluZEdyb3VwKG1fYmFja2luZywgJmJhY2tpbmdEZXNjcmlwdG9yKSk7Cit9CisKK1JlZjxTaGFk
ZXJNb2R1bGU+IERldmljZUltcGw6OmNyZWF0ZVNoYWRlck1vZHVsZShjb25zdCBTaGFkZXJNb2R1
bGVEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIGF1dG8gbGFiZWwgPSBkZXNjcmlwdG9y
LmxhYmVsLnV0ZjgoKTsKKworICAgIFdHUFVTaGFkZXJNb2R1bGVEZXNjcmlwdG9yIGJhY2tpbmdE
ZXNjcmlwdG9yIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgbGFiZWwuZGF0YSgpLAorICAg
IH07CisKKyAgICByZXR1cm4gU2hhZGVyTW9kdWxlSW1wbDo6Y3JlYXRlKHdncHVEZXZpY2VDcmVh
dGVTaGFkZXJNb2R1bGUobV9iYWNraW5nLCAmYmFja2luZ0Rlc2NyaXB0b3IpKTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CithdXRvIGNvbnZlcnRUb0JhY2tpbmcoY29uc3QgQ29tcHV0ZVBp
cGVsaW5lRGVzY3JpcHRvciYgZGVzY3JpcHRvciwgVCYmIGNhbGxiYWNrKQoreworICAgIGF1dG8g
bGFiZWwgPSBkZXNjcmlwdG9yLmxhYmVsLnV0ZjgoKTsKKworICAgIGF1dG8gZW50cnlQb2ludCA9
IGRlc2NyaXB0b3IuY29tcHV0ZS5lbnRyeVBvaW50LnV0ZjgoKTsKKworICAgIFZlY3RvcjxDU3Ry
aW5nPiBrZXlzOworICAgIGtleXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShkZXNjcmlwdG9yLmNv
bXB1dGUuY29uc3RhbnRzLnNpemUoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBjb25zdGFudCA6
IGRlc2NyaXB0b3IuY29tcHV0ZS5jb25zdGFudHMpCisgICAgICAgIGtleXMudW5jaGVja2VkQXBw
ZW5kKGNvbnN0YW50LmtleS51dGY4KCkpOworCisgICAgVmVjdG9yPFdHUFVDb25zdGFudEVudHJ5
PiBiYWNraW5nQ29uc3RhbnRFbnRyaWVzOworICAgIGJhY2tpbmdDb25zdGFudEVudHJpZXMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShkZXNjcmlwdG9yLmNvbXB1dGUuY29uc3RhbnRzLnNpemUoKSk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkZXNjcmlwdG9yLmNvbXB1dGUuY29uc3RhbnRz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIGNvbnN0YW50ID0gZGVzY3JpcHRv
ci5jb21wdXRlLmNvbnN0YW50c1tpXTsKKyAgICAgICAgYmFja2luZ0NvbnN0YW50RW50cmllcy51
bmNoZWNrZWRBcHBlbmQoV0dQVUNvbnN0YW50RW50cnkgeworICAgICAgICAgICAgbnVsbHB0ciwK
KyAgICAgICAgICAgIGtleXNbaV0uZGF0YSgpLAorICAgICAgICAgICAgY29uc3RhbnQudmFsdWUK
KyAgICAgICAgfSk7CisgICAgfQorCisgICAgV0dQVUNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3Ig
YmFja2luZ0Rlc2NyaXB0b3IgeworICAgICAgICBudWxscHRyLAorICAgICAgICBsYWJlbC5kYXRh
KCksCisgICAgICAgIGRlc2NyaXB0b3IubGF5b3V0ID8gc3RhdGljX2Nhc3Q8Y29uc3QgUGlwZWxp
bmVMYXlvdXRJbXBsJj4oKmRlc2NyaXB0b3IubGF5b3V0KS5iYWNraW5nKCkgOiBudWxscHRyLCB7
CisgICAgICAgICAgICBudWxscHRyLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgU2hh
ZGVyTW9kdWxlSW1wbCY+KGRlc2NyaXB0b3IuY29tcHV0ZS5tb2R1bGUpLmJhY2tpbmcoKSwKKyAg
ICAgICAgICAgIGVudHJ5UG9pbnQuZGF0YSgpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KGJhY2tpbmdDb25zdGFudEVudHJpZXMuc2l6ZSgpKSwKKyAgICAgICAgICAgIGJhY2tp
bmdDb25zdGFudEVudHJpZXMuZGF0YSgpLAorICAgICAgICB9CisgICAgfTsKKworICAgIHJldHVy
biBjYWxsYmFjayhiYWNraW5nRGVzY3JpcHRvcik7Cit9CisKK1JlZjxDb21wdXRlUGlwZWxpbmU+
IERldmljZUltcGw6OmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb25zdCBDb21wdXRlUGlwZWxpbmVE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIHJldHVybiBjb252ZXJ0VG9CYWNraW5nKGRl
c2NyaXB0b3IsIFt0aGlzXSAoY29uc3QgV0dQVUNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3ImIGJh
Y2tpbmdEZXNjcmlwdG9yKSB7CisgICAgICAgIHJldHVybiBDb21wdXRlUGlwZWxpbmVJbXBsOjpj
cmVhdGUod2dwdURldmljZUNyZWF0ZUNvbXB1dGVQaXBlbGluZShtX2JhY2tpbmcsICZiYWNraW5n
RGVzY3JpcHRvcikpOworICAgIH0pOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2F1dG8g
Y29udmVydFRvQmFja2luZyhjb25zdCBSZW5kZXJQaXBlbGluZURlc2NyaXB0b3ImIGRlc2NyaXB0
b3IsIFQmJiBjYWxsYmFjaykKK3sKKyAgICBhdXRvIGxhYmVsID0gZGVzY3JpcHRvci5sYWJlbC51
dGY4KCk7CisKKyAgICBWZWN0b3I8VmVjdG9yPFdHUFVWZXJ0ZXhBdHRyaWJ1dGU+PiBiYWNraW5n
QXR0cmlidXRlczsKKyAgICBiYWNraW5nQXR0cmlidXRlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KGRlc2NyaXB0b3IudmVydGV4LmJ1ZmZlcnMuc2l6ZSgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IGJ1ZmZlciA6IGRlc2NyaXB0b3IudmVydGV4LmJ1ZmZlcnMpIHsKKyAgICAgICAgaWYgKGJ1ZmZl
cikgeworICAgICAgICAgICAgVmVjdG9yPFdHUFVWZXJ0ZXhBdHRyaWJ1dGU+IGF0dHJpYnV0ZXM7
CisgICAgICAgICAgICBhdHRyaWJ1dGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYnVmZmVyLT5h
dHRyaWJ1dGVzLnNpemUoKSk7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGF0dHJpYnV0
ZSA6IGJ1ZmZlci0+YXR0cmlidXRlcykgeworICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMudW5j
aGVja2VkQXBwZW5kKFdHUFVWZXJ0ZXhBdHRyaWJ1dGUgeworICAgICAgICAgICAgICAgICAgICBj
b252ZXJ0VG9CYWNraW5nKGF0dHJpYnV0ZS5mb3JtYXQpLAorICAgICAgICAgICAgICAgICAgICBh
dHRyaWJ1dGUub2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUuc2hhZGVyTG9j
YXRpb24sCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
YWNraW5nQXR0cmlidXRlcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShhdHRyaWJ1dGVzKSk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYmFja2luZ0F0dHJpYnV0ZXMudW5jaGVja2VkQXBw
ZW5kKHsgfSk7CisgICAgfQorCisgICAgVmVjdG9yPFdHUFVWZXJ0ZXhCdWZmZXJMYXlvdXQ+IGJh
Y2tpbmdCdWZmZXJzOworICAgIGJhY2tpbmdCdWZmZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
ZGVzY3JpcHRvci52ZXJ0ZXguYnVmZmVycy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZGVzY3JpcHRvci52ZXJ0ZXguYnVmZmVycy5zaXplKCk7ICsraSkgeworICAgICAgICBj
b25zdCBhdXRvJiBidWZmZXIgPSBkZXNjcmlwdG9yLnZlcnRleC5idWZmZXJzW2ldOworICAgICAg
ICBiYWNraW5nQnVmZmVycy51bmNoZWNrZWRBcHBlbmQoV0dQVVZlcnRleEJ1ZmZlckxheW91dCB7
CisgICAgICAgICAgICBidWZmZXIgPyBidWZmZXItPmFycmF5U3RyaWRlIDogV0dQVV9DT1BZX1NU
UklERV9VTkRFRklORUQsCisgICAgICAgICAgICBidWZmZXIgPyBjb252ZXJ0VG9CYWNraW5nKGJ1
ZmZlci0+c3RlcE1vZGUpIDogV0dQVVZlcnRleFN0ZXBNb2RlX1ZlcnRleCwKKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PHVpbnQzMl90PihiYWNraW5nQXR0cmlidXRlc1tpXS5zaXplKCkpLAorICAg
ICAgICAgICAgYmFja2luZ0F0dHJpYnV0ZXNbaV0uZGF0YSgpLAorICAgICAgICB9KTsKKyAgICB9
CisKKyAgICBXR1BVRGVwdGhTdGVuY2lsU3RhdGUgZGVwdGhTdGVuY2lsU3RhdGUgeworICAgICAg
ICBudWxscHRyLAorICAgICAgICBkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbCA/IGNvbnZlcnRUb0Jh
Y2tpbmcoZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwtPmZvcm1hdCkgOiBXR1BVVGV4dHVyZUZvcm1h
dF9VbmRlZmluZWQsCisgICAgICAgIGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsID8gZGVzY3JpcHRv
ci5kZXB0aFN0ZW5jaWwtPmRlcHRoV3JpdGVFbmFibGVkIDogZmFsc2UsCisgICAgICAgIGRlc2Ny
aXB0b3IuZGVwdGhTdGVuY2lsID8gY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLmRlcHRoU3Rl
bmNpbC0+ZGVwdGhDb21wYXJlKSA6IFdHUFVDb21wYXJlRnVuY3Rpb25fVW5kZWZpbmVkLCB7Cisg
ICAgICAgICAgICBkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbCA/IGNvbnZlcnRUb0JhY2tpbmcoZGVz
Y3JpcHRvci5kZXB0aFN0ZW5jaWwtPnN0ZW5jaWxGcm9udC5jb21wYXJlKSA6IFdHUFVDb21wYXJl
RnVuY3Rpb25fVW5kZWZpbmVkLAorICAgICAgICAgICAgZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwg
PyBjb252ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsLT5zdGVuY2lsRnJvbnQu
ZmFpbE9wKSA6IFdHUFVTdGVuY2lsT3BlcmF0aW9uX0tlZXAsCisgICAgICAgICAgICBkZXNjcmlw
dG9yLmRlcHRoU3RlbmNpbCA/IGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci5kZXB0aFN0ZW5j
aWwtPnN0ZW5jaWxGcm9udC5kZXB0aEZhaWxPcCkgOiBXR1BVU3RlbmNpbE9wZXJhdGlvbl9LZWVw
LAorICAgICAgICAgICAgZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwgPyBjb252ZXJ0VG9CYWNraW5n
KGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsLT5zdGVuY2lsRnJvbnQucGFzc09wKSA6IFdHUFVTdGVu
Y2lsT3BlcmF0aW9uX0tlZXAsCisgICAgICAgIH0sIHsKKyAgICAgICAgICAgIGRlc2NyaXB0b3Iu
ZGVwdGhTdGVuY2lsID8gY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbC0+
c3RlbmNpbEJhY2suY29tcGFyZSkgOiBXR1BVQ29tcGFyZUZ1bmN0aW9uX1VuZGVmaW5lZCwKKyAg
ICAgICAgICAgIGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsID8gY29udmVydFRvQmFja2luZyhkZXNj
cmlwdG9yLmRlcHRoU3RlbmNpbC0+c3RlbmNpbEJhY2suZmFpbE9wKSA6IFdHUFVTdGVuY2lsT3Bl
cmF0aW9uX0tlZXAsCisgICAgICAgICAgICBkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbCA/IGNvbnZl
cnRUb0JhY2tpbmcoZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwtPnN0ZW5jaWxCYWNrLmRlcHRoRmFp
bE9wKSA6IFdHUFVTdGVuY2lsT3BlcmF0aW9uX0tlZXAsCisgICAgICAgICAgICBkZXNjcmlwdG9y
LmRlcHRoU3RlbmNpbCA/IGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwt
PnN0ZW5jaWxCYWNrLnBhc3NPcCkgOiBXR1BVU3RlbmNpbE9wZXJhdGlvbl9LZWVwLAorICAgICAg
ICB9LAorICAgICAgICBkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbCAmJiBkZXNjcmlwdG9yLmRlcHRo
U3RlbmNpbC0+c3RlbmNpbFJlYWRNYXNrID8gKmRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsLT5zdGVu
Y2lsUmVhZE1hc2sgOiAwLAorICAgICAgICBkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbCAmJiBkZXNj
cmlwdG9yLmRlcHRoU3RlbmNpbC0+c3RlbmNpbFdyaXRlTWFzayA/ICpkZXNjcmlwdG9yLmRlcHRo
U3RlbmNpbC0+c3RlbmNpbFdyaXRlTWFzayA6IDAsCisgICAgICAgIGRlc2NyaXB0b3IuZGVwdGhT
dGVuY2lsID8gZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwtPmRlcHRoQmlhcyA6IDAsCisgICAgICAg
IGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsID8gZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwtPmRlcHRo
Qmlhc1Nsb3BlU2NhbGUgOiAwLAorICAgICAgICBkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbCA/IGRl
c2NyaXB0b3IuZGVwdGhTdGVuY2lsLT5kZXB0aEJpYXNDbGFtcCA6IDAsCisgICAgfTsKKworICAg
IFZlY3RvcjxzdGQ6Om9wdGlvbmFsPFdHUFVCbGVuZFN0YXRlPj4gYmxlbmRTdGF0ZXM7CisgICAg
aWYgKGRlc2NyaXB0b3IuZnJhZ21lbnQpIHsKKyAgICAgICAgYmxlbmRTdGF0ZXMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShkZXNjcmlwdG9yLmZyYWdtZW50LT50YXJnZXRzLnNpemUoKSk7CisgICAg
ICAgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDogZGVzY3JpcHRvci5mcmFnbWVudC0+dGFyZ2V0
cykgeworICAgICAgICAgICAgaWYgKHRhcmdldC5ibGVuZCkgeworICAgICAgICAgICAgICAgIGJs
ZW5kU3RhdGVzLnVuY2hlY2tlZEFwcGVuZChXR1BVQmxlbmRTdGF0ZSB7CisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb0JhY2tpbmcodGFyZ2V0
LmJsZW5kLT5jb2xvci5vcGVyYXRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgY29udmVy
dFRvQmFja2luZyh0YXJnZXQuYmxlbmQtPmNvbG9yLnNyY0ZhY3RvciksCisgICAgICAgICAgICAg
ICAgICAgICAgICBjb252ZXJ0VG9CYWNraW5nKHRhcmdldC5ibGVuZC0+Y29sb3IuZHN0RmFjdG9y
KSwKKyAgICAgICAgICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgICAgICAgICAgY29u
dmVydFRvQmFja2luZyh0YXJnZXQuYmxlbmQtPmFscGhhLm9wZXJhdGlvbiksCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb252ZXJ0VG9CYWNraW5nKHRhcmdldC5ibGVuZC0+YWxwaGEuc3JjRmFj
dG9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb0JhY2tpbmcodGFyZ2V0LmJs
ZW5kLT5hbHBoYS5kc3RGYWN0b3IpLAorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBibGVuZFN0YXRl
cy51bmNoZWNrZWRBcHBlbmQoc3RkOjpudWxsb3B0KTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IFZlY3RvcjxXR1BVQ29sb3JUYXJnZXRTdGF0ZT4gY29sb3JUYXJnZXRzOworICAgIGlmIChkZXNj
cmlwdG9yLmZyYWdtZW50KSB7CisgICAgICAgIGNvbG9yVGFyZ2V0cy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KGRlc2NyaXB0b3IuZnJhZ21lbnQtPnRhcmdldHMuc2l6ZSgpKTsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBkZXNjcmlwdG9yLmZyYWdtZW50LT50YXJnZXRzLnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBjb25zdCBhdXRvJiB0YXJnZXQgPSBkZXNjcmlwdG9yLmZyYWdt
ZW50LT50YXJnZXRzW2ldOworICAgICAgICAgICAgY29sb3JUYXJnZXRzLnVuY2hlY2tlZEFwcGVu
ZChXR1BVQ29sb3JUYXJnZXRTdGF0ZSB7CisgICAgICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAg
ICAgICAgICAgICBjb252ZXJ0VG9CYWNraW5nKHRhcmdldC5mb3JtYXQpLAorICAgICAgICAgICAg
ICAgIGJsZW5kU3RhdGVzW2ldID8gJipibGVuZFN0YXRlc1tpXSA6IG51bGxwdHIsCisgICAgICAg
ICAgICAgICAgY29udmVydENvbG9yV3JpdGVGbGFnc1RvQmFja2luZyh0YXJnZXQud3JpdGVNYXNr
KSwKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgV0dQVUZyYWdtZW50
U3RhdGUgZnJhZ21lbnRTdGF0ZSB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIG51bGxwdHIs
CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIDAsCisgICAgICAgIG51bGxwdHIsCisgICAgICAg
IHN0YXRpY19jYXN0PHVpbnQzMl90Pihjb2xvclRhcmdldHMuc2l6ZSgpKSwKKyAgICAgICAgY29s
b3JUYXJnZXRzLmRhdGEoKSwKKyAgICB9OworCisgICAgV0dQVVJlbmRlclBpcGVsaW5lRGVzY3Jp
cHRvciBiYWNraW5nRGVzY3JpcHRvciB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIGxhYmVs
LmRhdGEoKSwKKyAgICAgICAgZGVzY3JpcHRvci5sYXlvdXQgPyBzdGF0aWNfY2FzdDxjb25zdCBQ
aXBlbGluZUxheW91dEltcGwmPigqZGVzY3JpcHRvci5sYXlvdXQpLmJhY2tpbmcoKSA6IG51bGxw
dHIsIHsKKyAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICBudWxscHRyLAorICAgICAg
ICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBudWxscHRyLAorICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGJhY2tpbmdCdWZmZXJzLnNpemUoKSksCisg
ICAgICAgICAgICBiYWNraW5nQnVmZmVycy5kYXRhKCksCisgICAgICAgIH0sIHsKKyAgICAgICAg
ICAgIG51bGxwdHIsCisgICAgICAgICAgICBkZXNjcmlwdG9yLnByaW1pdGl2ZSA/IGNvbnZlcnRU
b0JhY2tpbmcoZGVzY3JpcHRvci5wcmltaXRpdmUtPnRvcG9sb2d5KSA6IFdHUFVQcmltaXRpdmVU
b3BvbG9neV9Qb2ludExpc3QsCisgICAgICAgICAgICBkZXNjcmlwdG9yLnByaW1pdGl2ZSAmJiBk
ZXNjcmlwdG9yLnByaW1pdGl2ZS0+c3RyaXBJbmRleEZvcm1hdCA/IGNvbnZlcnRUb0JhY2tpbmco
KmRlc2NyaXB0b3IucHJpbWl0aXZlLT5zdHJpcEluZGV4Rm9ybWF0KSA6IFdHUFVJbmRleEZvcm1h
dF9VbmRlZmluZWQsCisgICAgICAgICAgICBkZXNjcmlwdG9yLnByaW1pdGl2ZSA/IGNvbnZlcnRU
b0JhY2tpbmcoZGVzY3JpcHRvci5wcmltaXRpdmUtPmZyb250RmFjZSkgOiBXR1BVRnJvbnRGYWNl
X0NDVywKKyAgICAgICAgICAgIGRlc2NyaXB0b3IucHJpbWl0aXZlID8gY29udmVydFRvQmFja2lu
ZyhkZXNjcmlwdG9yLnByaW1pdGl2ZS0+Y3VsbE1vZGUpIDogV0dQVUN1bGxNb2RlX05vbmUsCisg
ICAgICAgICAgICAKKyAgICAgICAgfSwKKyAgICAgICAgZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwg
PyAmZGVwdGhTdGVuY2lsU3RhdGUgOiBudWxscHRyLCB7CisgICAgICAgICAgICBudWxscHRyLAor
ICAgICAgICAgICAgZGVzY3JpcHRvci5tdWx0aXNhbXBsZSA/IGRlc2NyaXB0b3IubXVsdGlzYW1w
bGUtPmNvdW50IDogMCwKKyAgICAgICAgICAgIGRlc2NyaXB0b3IubXVsdGlzYW1wbGUgPyBkZXNj
cmlwdG9yLm11bHRpc2FtcGxlLT5tYXNrIDogMCwKKyAgICAgICAgICAgIGRlc2NyaXB0b3IubXVs
dGlzYW1wbGUgPyBkZXNjcmlwdG9yLm11bHRpc2FtcGxlLT5hbHBoYVRvQ292ZXJhZ2VFbmFibGVk
IDogZmFsc2UsCisgICAgICAgIH0sCisgICAgICAgIGRlc2NyaXB0b3IuZnJhZ21lbnQgPyAmZnJh
Z21lbnRTdGF0ZSA6IG51bGxwdHIsCisgICAgfTsKKworICAgIHJldHVybiBjYWxsYmFjayhiYWNr
aW5nRGVzY3JpcHRvcik7Cit9CisKK1JlZjxSZW5kZXJQaXBlbGluZT4gRGV2aWNlSW1wbDo6Y3Jl
YXRlUmVuZGVyUGlwZWxpbmUoY29uc3QgUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yKQoreworICAgIHJldHVybiBjb252ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3IsIFt0aGlzXSAo
Y29uc3QgV0dQVVJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciYgYmFja2luZ0Rlc2NyaXB0b3IpIHsK
KyAgICAgICAgcmV0dXJuIFJlbmRlclBpcGVsaW5lSW1wbDo6Y3JlYXRlKHdncHVEZXZpY2VDcmVh
dGVSZW5kZXJQaXBlbGluZShtX2JhY2tpbmcsICZiYWNraW5nRGVzY3JpcHRvcikpOworICAgIH0p
OworfQorCit2b2lkIGNyZWF0ZUNvbXB1dGVQaXBlbGluZUFzeW5jQ2FsbGJhY2soV0dQVUNyZWF0
ZVBpcGVsaW5lQXN5bmNTdGF0dXMgc3RhdHVzLCBXR1BVQ29tcHV0ZVBpcGVsaW5lIHBpcGVsaW5l
LCBjb25zdCBjaGFyKiBtZXNzYWdlLCB2b2lkKiB1c2VyZGF0YSkKK3sKKyAgICBhdXRvIGRldmlj
ZSA9IGFkb3B0UmVmKCpzdGF0aWNfY2FzdDxEZXZpY2VJbXBsKj4odXNlcmRhdGEpKTsgLy8gYWRv
cHRSZWYgaXMgYmFsYW5jZWQgYnkgbGVha1JlZiBpbiBjcmVhdGVDb21wdXRlUGlwZWxpbmVBc3lu
YygpIGJlbG93LiBXZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSdyZSB1c2luZyBhIEMgQVBJ
IHdpdGggbm8gY29uY2VwdCBvZiByZWZlcmVuY2UgY291bnRpbmcgb3IgYmxvY2tzLgorICAgIGRl
dmljZS0+Y3JlYXRlQ29tcHV0ZVBpcGVsaW5lQXN5bmNDYWxsYmFjayhzdGF0dXMsIHBpcGVsaW5l
LCBtZXNzYWdlKTsKK30KKwordm9pZCBEZXZpY2VJbXBsOjpjcmVhdGVDb21wdXRlUGlwZWxpbmVB
c3luYyhjb25zdCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBzdGQ6OmZ1
bmN0aW9uPHZvaWQoUmVmPENvbXB1dGVQaXBlbGluZT4mJik+JiYgY2FsbGJhY2spCit7CisgICAg
UmVmIHByb3RlY3RlZFRoaXMoKnRoaXMpOworCisgICAgbV9jcmVhdGVDb21wdXRlUGlwZWxpbmVB
c3luY0NhbGxiYWNrcy5hcHBlbmQoV1RGTW92ZShjYWxsYmFjaykpOworCisgICAgY29udmVydFRv
QmFja2luZyhkZXNjcmlwdG9yLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVj
dGVkVGhpcyldIChjb25zdCBXR1BVQ29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciYgYmFja2luZ0Rl
c2NyaXB0b3IpIG11dGFibGUgeworICAgICAgICB3Z3B1RGV2aWNlQ3JlYXRlQ29tcHV0ZVBpcGVs
aW5lQXN5bmMobV9iYWNraW5nLCAmYmFja2luZ0Rlc2NyaXB0b3IsICZXZWJHUFU6OmNyZWF0ZUNv
bXB1dGVQaXBlbGluZUFzeW5jQ2FsbGJhY2ssICZwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7IC8v
IGxlYWtSZWYgaXMgYmFsYW5jZWQgYnkgYWRvcHRSZWYgaW4gcmVxdWVzdERldmljZUNhbGxiYWNr
KCkgYWJvdmUuIFdlIGhhdmUgdG8gZG8gdGhpcyBiZWNhdXNlIHdlJ3JlIHVzaW5nIGEgQyBBUEkg
d2l0aCBubyBjb25jZXB0IG9mIHJlZmVyZW5jZSBjb3VudGluZyBvciBibG9ja3MuCisgICAgfSk7
Cit9CisKK3ZvaWQgRGV2aWNlSW1wbDo6Y3JlYXRlQ29tcHV0ZVBpcGVsaW5lQXN5bmNDYWxsYmFj
ayhXR1BVQ3JlYXRlUGlwZWxpbmVBc3luY1N0YXR1cywgV0dQVUNvbXB1dGVQaXBlbGluZSBwaXBl
bGluZSwgY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBVTlVTRURfUEFSQU0obWVzc2FnZSk7
CisgICAgYXV0byBjYWxsYmFjayA9IG1fY3JlYXRlQ29tcHV0ZVBpcGVsaW5lQXN5bmNDYWxsYmFj
a3MudGFrZUZpcnN0KCk7CisgICAgY2FsbGJhY2soQ29tcHV0ZVBpcGVsaW5lSW1wbDo6Y3JlYXRl
KHBpcGVsaW5lKSk7Cit9CisKK3ZvaWQgY3JlYXRlUmVuZGVyUGlwZWxpbmVBc3luY0NhbGxiYWNr
KFdHUFVDcmVhdGVQaXBlbGluZUFzeW5jU3RhdHVzIHN0YXR1cywgV0dQVVJlbmRlclBpcGVsaW5l
IHBpcGVsaW5lLCBjb25zdCBjaGFyKiBtZXNzYWdlLCB2b2lkKiB1c2VyZGF0YSkKK3sKKyAgICBh
dXRvIGRldmljZSA9IGFkb3B0UmVmKCpzdGF0aWNfY2FzdDxEZXZpY2VJbXBsKj4odXNlcmRhdGEp
KTsgLy8gYWRvcHRSZWYgaXMgYmFsYW5jZWQgYnkgbGVha1JlZiBpbiBjcmVhdGVSZW5kZXJQaXBl
bGluZUFzeW5jKCkgYmVsb3cuIFdlIGhhdmUgdG8gZG8gdGhpcyBiZWNhdXNlIHdlJ3JlIHVzaW5n
IGEgQyBBUEkgd2l0aCBubyBjb25jZXB0IG9mIHJlZmVyZW5jZSBjb3VudGluZyBvciBibG9ja3Mu
CisgICAgZGV2aWNlLT5jcmVhdGVSZW5kZXJQaXBlbGluZUFzeW5jQ2FsbGJhY2soc3RhdHVzLCBw
aXBlbGluZSwgbWVzc2FnZSk7Cit9CisKK3ZvaWQgRGV2aWNlSW1wbDo6Y3JlYXRlUmVuZGVyUGlw
ZWxpbmVBc3luYyhjb25zdCBSZW5kZXJQaXBlbGluZURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIHN0
ZDo6ZnVuY3Rpb248dm9pZChSZWY8UmVuZGVyUGlwZWxpbmU+JiYpPiYmIGNhbGxiYWNrKQorewor
ICAgIFJlZiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKKworICAgIG1fY3JlYXRlUmVuZGVyUGlwZWxp
bmVBc3luY0NhbGxiYWNrcy5hcHBlbmQoV1RGTW92ZShjYWxsYmFjaykpOworCisgICAgY29udmVy
dFRvQmFja2luZyhkZXNjcmlwdG9yLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJv
dGVjdGVkVGhpcyldIChjb25zdCBXR1BVUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yJiBiYWNraW5n
RGVzY3JpcHRvcikgbXV0YWJsZSB7CisgICAgd2dwdURldmljZUNyZWF0ZVJlbmRlclBpcGVsaW5l
QXN5bmMobV9iYWNraW5nLCAmYmFja2luZ0Rlc2NyaXB0b3IsICZXZWJHUFU6OmNyZWF0ZVJlbmRl
clBpcGVsaW5lQXN5bmNDYWxsYmFjaywgJnByb3RlY3RlZFRoaXMubGVha1JlZigpKTsgLy8gbGVh
a1JlZiBpcyBiYWxhbmNlZCBieSBhZG9wdFJlZiBpbiByZXF1ZXN0RGV2aWNlQ2FsbGJhY2soKSBh
Ym92ZS4gV2UgaGF2ZSB0byBkbyB0aGlzIGJlY2F1c2Ugd2UncmUgdXNpbmcgYSBDIEFQSSB3aXRo
IG5vIGNvbmNlcHQgb2YgcmVmZXJlbmNlIGNvdW50aW5nIG9yIGJsb2Nrcy4KKyAgICB9KTsKK30K
Kwordm9pZCBEZXZpY2VJbXBsOjpjcmVhdGVSZW5kZXJQaXBlbGluZUFzeW5jQ2FsbGJhY2soV0dQ
VUNyZWF0ZVBpcGVsaW5lQXN5bmNTdGF0dXMsIFdHUFVSZW5kZXJQaXBlbGluZSBwaXBlbGluZSwg
Y29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBVTlVTRURfUEFSQU0obWVzc2FnZSk7CisgICAg
YXV0byBjYWxsYmFjayA9IG1fY3JlYXRlUmVuZGVyUGlwZWxpbmVBc3luY0NhbGxiYWNrcy50YWtl
Rmlyc3QoKTsKKyAgICBjYWxsYmFjayhSZW5kZXJQaXBlbGluZUltcGw6OmNyZWF0ZShwaXBlbGlu
ZSkpOworfQorCitSZWY8Q29tbWFuZEVuY29kZXI+IERldmljZUltcGw6OmNyZWF0ZUNvbW1hbmRF
bmNvZGVyKGNvbnN0IHN0ZDo6b3B0aW9uYWw8Q29tbWFuZEVuY29kZXJEZXNjcmlwdG9yPiYgZGVz
Y3JpcHRvcikKK3sKKyAgICBDU3RyaW5nIGxhYmVsID0gZGVzY3JpcHRvciA/IGRlc2NyaXB0b3It
PmxhYmVsLnV0ZjgoKSA6IENTdHJpbmcoIiIpOworCisgICAgV0dQVUNvbW1hbmRFbmNvZGVyRGVz
Y3JpcHRvciBiYWNraW5nRGVzY3JpcHRvciB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIGxh
YmVsLmRhdGEoKSwKKyAgICB9OworCisgICAgcmV0dXJuIENvbW1hbmRFbmNvZGVySW1wbDo6Y3Jl
YXRlKHdncHVEZXZpY2VDcmVhdGVDb21tYW5kRW5jb2RlcihtX2JhY2tpbmcsICZiYWNraW5nRGVz
Y3JpcHRvcikpOworfQorCitSZWY8UmVuZGVyQnVuZGxlRW5jb2Rlcj4gRGV2aWNlSW1wbDo6Y3Jl
YXRlUmVuZGVyQnVuZGxlRW5jb2Rlcihjb25zdCBSZW5kZXJCdW5kbGVFbmNvZGVyRGVzY3JpcHRv
ciYgZGVzY3JpcHRvcikKK3sKKyAgICBhdXRvIGxhYmVsID0gZGVzY3JpcHRvci5sYWJlbC51dGY4
KCk7CisKKyAgICBWZWN0b3I8V0dQVVRleHR1cmVGb3JtYXQ+IGJhY2tpbmdDb2xvckZvcm1hdHM7
CisgICAgYmFja2luZ0NvbG9yRm9ybWF0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGRlc2NyaXB0
b3IuY29sb3JGb3JtYXRzLnNpemUoKSk7CisgICAgZm9yIChhdXRvIGNvbG9yRm9ybWF0IDogZGVz
Y3JpcHRvci5jb2xvckZvcm1hdHMpCisgICAgICAgIGJhY2tpbmdDb2xvckZvcm1hdHMudW5jaGVj
a2VkQXBwZW5kKGNvbnZlcnRUb0JhY2tpbmcoY29sb3JGb3JtYXQpKTsKKworICAgIFdHUFVSZW5k
ZXJCdW5kbGVFbmNvZGVyRGVzY3JpcHRvciBiYWNraW5nRGVzY3JpcHRvciB7CisgICAgICAgIG51
bGxwdHIsCisgICAgICAgIGxhYmVsLmRhdGEoKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KGJhY2tpbmdDb2xvckZvcm1hdHMuc2l6ZSgpKSwKKyAgICAgICAgYmFja2luZ0NvbG9yRm9y
bWF0cy5kYXRhKCksCisgICAgICAgIGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsRm9ybWF0ID8gY29u
dmVydFRvQmFja2luZygqZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWxGb3JtYXQpIDogV0dQVVRleHR1
cmVGb3JtYXRfVW5kZWZpbmVkLAorICAgICAgICBkZXNjcmlwdG9yLnNhbXBsZUNvdW50LAorICAg
IH07CisKKyAgICByZXR1cm4gUmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OmNyZWF0ZSh3Z3B1RGV2
aWNlQ3JlYXRlUmVuZGVyQnVuZGxlRW5jb2RlcihtX2JhY2tpbmcsICZiYWNraW5nRGVzY3JpcHRv
cikpOworfQorCitSZWY8UXVlcnlTZXQ+IERldmljZUltcGw6OmNyZWF0ZVF1ZXJ5U2V0KGNvbnN0
IFF1ZXJ5U2V0RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBhdXRvIGxhYmVsID0gZGVz
Y3JpcHRvci5sYWJlbC51dGY4KCk7CisKKyAgICBWZWN0b3I8V0dQVVBpcGVsaW5lU3RhdGlzdGlj
TmFtZT4gYmFja2luZ1BpcGVsaW5lU3RhdGlzdGljczsKKyAgICBiYWNraW5nUGlwZWxpbmVTdGF0
aXN0aWNzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGVzY3JpcHRvci5waXBlbGluZVN0YXRpc3Rp
Y3Muc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8gcGlwZWxpbmVTdGF0aXN0aWMgOiBkZXNjcmlwdG9y
LnBpcGVsaW5lU3RhdGlzdGljcykKKyAgICAgICAgYmFja2luZ1BpcGVsaW5lU3RhdGlzdGljcy51
bmNoZWNrZWRBcHBlbmQoY29udmVydFRvQmFja2luZyhwaXBlbGluZVN0YXRpc3RpYykpOworCisg
ICAgV0dQVVF1ZXJ5U2V0RGVzY3JpcHRvciBiYWNraW5nRGVzY3JpcHRvciB7CisgICAgICAgIG51
bGxwdHIsCisgICAgICAgIGxhYmVsLmRhdGEoKSwKKyAgICAgICAgY29udmVydFRvQmFja2luZyhk
ZXNjcmlwdG9yLnR5cGUpLAorICAgICAgICBkZXNjcmlwdG9yLmNvdW50LAorICAgICAgICBiYWNr
aW5nUGlwZWxpbmVTdGF0aXN0aWNzLmRhdGEoKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KGJhY2tpbmdQaXBlbGluZVN0YXRpc3RpY3Muc2l6ZSgpKSwKKyAgICB9OworCisgICAgcmV0
dXJuIFF1ZXJ5U2V0SW1wbDo6Y3JlYXRlKHdncHVEZXZpY2VDcmVhdGVRdWVyeVNldChtX2JhY2tp
bmcsICZiYWNraW5nRGVzY3JpcHRvcikpOworfQorCit2b2lkIERldmljZUltcGw6OnB1c2hFcnJv
clNjb3BlKEVycm9yRmlsdGVyIGVycm9yRmlsdGVyKQoreworICAgIHdncHVEZXZpY2VQdXNoRXJy
b3JTY29wZShtX2JhY2tpbmcsIGNvbnZlcnRUb0JhY2tpbmcoZXJyb3JGaWx0ZXIpKTsKK30KKwor
dm9pZCBwb3BFcnJvclNjb3BlQ2FsbGJhY2soV0dQVUVycm9yVHlwZSB0eXBlLCBjb25zdCBjaGFy
KiBtZXNzYWdlLCB2b2lkKiB1c2VyZGF0YSkKK3sKKyAgICBhdXRvIGRldmljZSA9IGFkb3B0UmVm
KCpzdGF0aWNfY2FzdDxEZXZpY2VJbXBsKj4odXNlcmRhdGEpKTsgLy8gYWRvcHRSZWYgaXMgYmFs
YW5jZWQgYnkgbGVha1JlZiBpbiBwb3BFcnJvclNjb3BlKCkgYmVsb3cuIFdlIGhhdmUgdG8gZG8g
dGhpcyBiZWNhdXNlIHdlJ3JlIHVzaW5nIGEgQyBBUEkgd2l0aCBubyBjb25jZXB0IG9mIHJlZmVy
ZW5jZSBjb3VudGluZyBvciBibG9ja3MuCisgICAgZGV2aWNlLT5wb3BFcnJvclNjb3BlQ2FsbGJh
Y2sodHlwZSwgbWVzc2FnZSk7Cit9CisKK3ZvaWQgRGV2aWNlSW1wbDo6cG9wRXJyb3JTY29wZShz
dGQ6OmZ1bmN0aW9uPHZvaWQoc3RkOjpvcHRpb25hbDxFcnJvcj4mJik+JiYgY2FsbGJhY2spCit7
CisgICAgUmVmIHByb3RlY3RlZFRoaXMoKnRoaXMpOworCisgICAgbV9wb3BFcnJvclNjb3BlQ2Fs
bGJhY2tzLmFwcGVuZChXVEZNb3ZlKGNhbGxiYWNrKSk7CisKKyAgICB3Z3B1RGV2aWNlUG9wRXJy
b3JTY29wZShtX2JhY2tpbmcsICZXZWJHUFU6OnBvcEVycm9yU2NvcGVDYWxsYmFjaywgJnByb3Rl
Y3RlZFRoaXMubGVha1JlZigpKTsgLy8gbGVha1JlZiBpcyBiYWxhbmNlZCBieSBhZG9wdFJlZiBp
biByZXF1ZXN0RGV2aWNlQ2FsbGJhY2soKSBhYm92ZS4gV2UgaGF2ZSB0byBkbyB0aGlzIGJlY2F1
c2Ugd2UncmUgdXNpbmcgYSBDIEFQSSB3aXRoIG5vIGNvbmNlcHQgb2YgcmVmZXJlbmNlIGNvdW50
aW5nIG9yIGJsb2Nrcy4KK30KKwordm9pZCBEZXZpY2VJbXBsOjpwb3BFcnJvclNjb3BlQ2FsbGJh
Y2soV0dQVUVycm9yVHlwZSBlcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAg
c3RkOjpvcHRpb25hbDxFcnJvcj4gZXJyb3I7CisgICAgc3dpdGNoIChlcnJvclR5cGUpIHsKKyAg
ICBjYXNlIFdHUFVFcnJvclR5cGVfTm9FcnJvcjoKKyAgICBjYXNlIFdHUFVFcnJvclR5cGVfRm9y
Y2UzMjoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXR1BVRXJyb3JUeXBlX1ZhbGlkYXRpb246
CisgICAgICAgIGVycm9yID0geyB7IFZhbGlkYXRpb25FcnJvcjo6Y3JlYXRlKG1lc3NhZ2UpIH0g
fTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXR1BVRXJyb3JUeXBlX091dE9mTWVtb3J5Ogor
ICAgICAgICBlcnJvciA9IHsgeyBPdXRPZk1lbW9yeUVycm9yOjpjcmVhdGUoKSB9IH07CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgV0dQVUVycm9yVHlwZV9Vbmtub3duOgorICAgICAgICBlcnJv
ciA9IHsgeyBPdXRPZk1lbW9yeUVycm9yOjpjcmVhdGUoKSB9IH07CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgV0dQVUVycm9yVHlwZV9EZXZpY2VMb3N0OgorICAgICAgICBlcnJvciA9IHsgeyBP
dXRPZk1lbW9yeUVycm9yOjpjcmVhdGUoKSB9IH07CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGF1dG8gY2FsbGJhY2sgPSBtX3BvcEVycm9yU2NvcGVDYWxsYmFja3MudGFrZUZpcnN0KCk7
CisgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOworfQorCit2b2lkIERldmljZUltcGw6OnNl
dExhYmVsSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBsYWJlbCkKK3sKKyAgICB3Z3B1RGV2aWNlU2V0
TGFiZWwobV9iYWNraW5nLCBsYWJlbC51dGY4KCkuZGF0YSgpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVRGV2aWNlSW1wbC5oIGIvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVEZXZpY2VJbXBsLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uODZhNjBiYzRiZTFjZjhkOGVmMTlhMDJiNDQ2NDg2MGE2ZTI5OTU1YgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0lt
cGwvV2ViR1BVRGV2aWNlSW1wbC5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIldlYkdQVURldmljZS5oIgorI2luY2x1ZGUgPFdlYkdQVS9X
ZWJHUFUuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1l
c3BhY2UgV2ViR1BVIHsKKworY2xhc3MgRGV2aWNlSW1wbCBmaW5hbCA6IHB1YmxpYyBEZXZpY2Ug
eworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RGV2aWNlSW1wbD4gY3JlYXRlKFdHUFVEZXZpY2Ug
ZGV2aWNlLCBSZWY8U3VwcG9ydGVkRmVhdHVyZXM+JiYgZmVhdHVyZXMsIFJlZjxTdXBwb3J0ZWRM
aW1pdHM+JiYgbGltaXRzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGV2
aWNlSW1wbChkZXZpY2UsIFdURk1vdmUoZmVhdHVyZXMpLCBXVEZNb3ZlKGxpbWl0cykpKTsKKyAg
ICB9CisKKyAgICB+RGV2aWNlSW1wbCgpOworCisgICAgV0dQVURldmljZSBiYWNraW5nKCkgY29u
c3QgeyByZXR1cm4gbV9iYWNraW5nOyB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIHZvaWQgY3Jl
YXRlQ29tcHV0ZVBpcGVsaW5lQXN5bmNDYWxsYmFjayhXR1BVQ3JlYXRlUGlwZWxpbmVBc3luY1N0
YXR1cywgV0dQVUNvbXB1dGVQaXBlbGluZSwgY29uc3QgY2hhciogbWVzc2FnZSwgdm9pZCogdXNl
cmRhdGEpOworICAgIGZyaWVuZCB2b2lkIGNyZWF0ZVJlbmRlclBpcGVsaW5lQXN5bmNDYWxsYmFj
ayhXR1BVQ3JlYXRlUGlwZWxpbmVBc3luY1N0YXR1cywgV0dQVVJlbmRlclBpcGVsaW5lLCBjb25z
dCBjaGFyKiBtZXNzYWdlLCB2b2lkKiB1c2VyZGF0YSk7CisgICAgZnJpZW5kIHZvaWQgcG9wRXJy
b3JTY29wZUNhbGxiYWNrKFdHUFVFcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIHZvaWQq
IHVzZXJkYXRhKTsKKworICAgIERldmljZUltcGwoV0dQVURldmljZSwgUmVmPFN1cHBvcnRlZEZl
YXR1cmVzPiYmLCBSZWY8U3VwcG9ydGVkTGltaXRzPiYmKTsKKworICAgIERldmljZUltcGwoY29u
c3QgRGV2aWNlSW1wbCYpID0gZGVsZXRlOworICAgIERldmljZUltcGwoRGV2aWNlSW1wbCYmKSA9
IGRlbGV0ZTsKKyAgICBEZXZpY2VJbXBsJiBvcGVyYXRvcj0oY29uc3QgRGV2aWNlSW1wbCYpID0g
ZGVsZXRlOworICAgIERldmljZUltcGwmIG9wZXJhdG9yPShEZXZpY2VJbXBsJiYpID0gZGVsZXRl
OworCisgICAgdm9pZCBkZXN0cm95KCkgZmluYWw7CisKKyAgICBSZWY8QnVmZmVyPiBjcmVhdGVC
dWZmZXIoY29uc3QgQnVmZmVyRGVzY3JpcHRvciYpIGZpbmFsOworICAgIFJlZjxUZXh0dXJlPiBj
cmVhdGVUZXh0dXJlKGNvbnN0IFRleHR1cmVEZXNjcmlwdG9yJikgZmluYWw7CisgICAgUmVmPFNh
bXBsZXI+IGNyZWF0ZVNhbXBsZXIoY29uc3QgU2FtcGxlckRlc2NyaXB0b3ImKSBmaW5hbDsKKyAg
ICBSZWY8RXh0ZXJuYWxUZXh0dXJlPiBpbXBvcnRFeHRlcm5hbFRleHR1cmUoY29uc3QgRXh0ZXJu
YWxUZXh0dXJlRGVzY3JpcHRvciYpIGZpbmFsOworCisgICAgUmVmPEJpbmRHcm91cExheW91dD4g
Y3JlYXRlQmluZEdyb3VwTGF5b3V0KGNvbnN0IEJpbmRHcm91cExheW91dERlc2NyaXB0b3ImKSBm
aW5hbDsKKyAgICBSZWY8UGlwZWxpbmVMYXlvdXQ+IGNyZWF0ZVBpcGVsaW5lTGF5b3V0KGNvbnN0
IFBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciYpIGZpbmFsOworICAgIFJlZjxCaW5kR3JvdXA+IGNy
ZWF0ZUJpbmRHcm91cChjb25zdCBCaW5kR3JvdXBEZXNjcmlwdG9yJikgZmluYWw7CisKKyAgICBS
ZWY8U2hhZGVyTW9kdWxlPiBjcmVhdGVTaGFkZXJNb2R1bGUoY29uc3QgU2hhZGVyTW9kdWxlRGVz
Y3JpcHRvciYpIGZpbmFsOworICAgIFJlZjxDb21wdXRlUGlwZWxpbmU+IGNyZWF0ZUNvbXB1dGVQ
aXBlbGluZShjb25zdCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJikgZmluYWw7CisgICAgUmVm
PFJlbmRlclBpcGVsaW5lPiBjcmVhdGVSZW5kZXJQaXBlbGluZShjb25zdCBSZW5kZXJQaXBlbGlu
ZURlc2NyaXB0b3ImKSBmaW5hbDsKKyAgICB2b2lkIGNyZWF0ZUNvbXB1dGVQaXBlbGluZUFzeW5j
Q2FsbGJhY2soV0dQVUNyZWF0ZVBpcGVsaW5lQXN5bmNTdGF0dXMsIFdHUFVDb21wdXRlUGlwZWxp
bmUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOworICAgIHZvaWQgY3JlYXRlQ29tcHV0ZVBpcGVsaW5l
QXN5bmMoY29uc3QgQ29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciYsIHN0ZDo6ZnVuY3Rpb248dm9p
ZChSZWY8Q29tcHV0ZVBpcGVsaW5lPiYmKT4mJikgZmluYWw7CisgICAgdm9pZCBjcmVhdGVSZW5k
ZXJQaXBlbGluZUFzeW5jQ2FsbGJhY2soV0dQVUNyZWF0ZVBpcGVsaW5lQXN5bmNTdGF0dXMsIFdH
UFVSZW5kZXJQaXBlbGluZSwgY29uc3QgY2hhciogbWVzc2FnZSk7CisgICAgdm9pZCBjcmVhdGVS
ZW5kZXJQaXBlbGluZUFzeW5jKGNvbnN0IFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciYsIHN0ZDo6
ZnVuY3Rpb248dm9pZChSZWY8UmVuZGVyUGlwZWxpbmU+JiYpPiYmKSBmaW5hbDsKKworICAgIFJl
ZjxDb21tYW5kRW5jb2Rlcj4gY3JlYXRlQ29tbWFuZEVuY29kZXIoY29uc3Qgc3RkOjpvcHRpb25h
bDxDb21tYW5kRW5jb2RlckRlc2NyaXB0b3I+JikgZmluYWw7CisgICAgUmVmPFJlbmRlckJ1bmRs
ZUVuY29kZXI+IGNyZWF0ZVJlbmRlckJ1bmRsZUVuY29kZXIoY29uc3QgUmVuZGVyQnVuZGxlRW5j
b2RlckRlc2NyaXB0b3ImKSBmaW5hbDsKKworICAgIFJlZjxRdWVyeVNldD4gY3JlYXRlUXVlcnlT
ZXQoY29uc3QgUXVlcnlTZXREZXNjcmlwdG9yJikgZmluYWw7CisKKyAgICB2b2lkIHB1c2hFcnJv
clNjb3BlKEVycm9yRmlsdGVyKSBmaW5hbDsKKyAgICB2b2lkIHBvcEVycm9yU2NvcGVDYWxsYmFj
ayhXR1BVRXJyb3JUeXBlLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsKKyAgICB2b2lkIHBvcEVycm9y
U2NvcGUoc3RkOjpmdW5jdGlvbjx2b2lkKHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYpPiYmKSBmaW5h
bDsKKworICAgIHZvaWQgc2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5hbDsKKwor
ICAgIFdHUFVEZXZpY2UgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworCisgICAgRGVxdWU8c3RkOjpm
dW5jdGlvbjx2b2lkKFJlZjxDb21wdXRlUGlwZWxpbmU+JiYpPj4gbV9jcmVhdGVDb21wdXRlUGlw
ZWxpbmVBc3luY0NhbGxiYWNrczsKKyAgICBEZXF1ZTxzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVmPFJl
bmRlclBpcGVsaW5lPiYmKT4+IG1fY3JlYXRlUmVuZGVyUGlwZWxpbmVBc3luY0NhbGxiYWNrczsK
KyAgICBEZXF1ZTxzdGQ6OmZ1bmN0aW9uPHZvaWQoc3RkOjpvcHRpb25hbDxFcnJvcj4mJik+PiBt
X3BvcEVycm9yU2NvcGVDYWxsYmFja3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8g
bmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVFeHRlcm5hbFRleHR1cmVJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVRXh0ZXJuYWxUZXh0dXJl
SW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMmFlYjg5ZTA3ZmI1NjI3ZjI2OWRiOTM1MDIxNTg2ZGI0Zjcw
YTY0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3Mv
V2ViR1BVL0ltcGwvV2ViR1BVRXh0ZXJuYWxUZXh0dXJlSW1wbC5jcHAKQEAgLTAsMCArMSw0NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVFeHRl
cm5hbFRleHR1cmVJbXBsLmgiCisKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVRXh0Lmg+CisKK25h
bWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK0V4dGVybmFsVGV4dHVyZUltcGw6
OkV4dGVybmFsVGV4dHVyZUltcGwoKQoreworfQorCitFeHRlcm5hbFRleHR1cmVJbXBsOjp+RXh0
ZXJuYWxUZXh0dXJlSW1wbCgpCit7Cit9CisKK3ZvaWQgRXh0ZXJuYWxUZXh0dXJlSW1wbDo6c2V0
TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwK
K30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVFeHRlcm5hbFRleHR1cmVJbXBsLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUV4dGVybmFsVGV4
dHVyZUltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZDc4MTYzM2U1OGQwNTk3NmI0ZjdkYjliNWM4M2JlYjA4
MWJlNmFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGlj
cy9XZWJHUFUvSW1wbC9XZWJHUFVFeHRlcm5hbFRleHR1cmVJbXBsLmgKQEAgLTAsMCArMSw1NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVRXh0ZXJuYWxU
ZXh0dXJlLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorCituYW1lc3BhY2UgUEFMIHsK
K25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBFeHRlcm5hbFRleHR1cmVJbXBsIGZpbmFsIDog
cHVibGljIEV4dGVybmFsVGV4dHVyZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxFeHRlcm5h
bFRleHR1cmVJbXBsPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRXh0ZXJuYWxUZXh0dXJlSW1wbCgpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5FeHRlcm5h
bFRleHR1cmVJbXBsKCk7CisKK3ByaXZhdGU6CisgICAgRXh0ZXJuYWxUZXh0dXJlSW1wbCgpOwor
CisgICAgRXh0ZXJuYWxUZXh0dXJlSW1wbChjb25zdCBFeHRlcm5hbFRleHR1cmVJbXBsJikgPSBk
ZWxldGU7CisgICAgRXh0ZXJuYWxUZXh0dXJlSW1wbChFeHRlcm5hbFRleHR1cmVJbXBsJiYpID0g
ZGVsZXRlOworICAgIEV4dGVybmFsVGV4dHVyZUltcGwmIG9wZXJhdG9yPShjb25zdCBFeHRlcm5h
bFRleHR1cmVJbXBsJikgPSBkZWxldGU7CisgICAgRXh0ZXJuYWxUZXh0dXJlSW1wbCYgb3BlcmF0
b3I9KEV4dGVybmFsVGV4dHVyZUltcGwmJikgPSBkZWxldGU7CisKKyAgICB2b2lkIHNldExhYmVs
SW50ZXJuYWwoY29uc3QgU3RyaW5nJikgZmluYWw7Cit9OworCit9IC8vIG5hbWVzcGFjZSBQQUwK
K30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVSW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTA3
NjE4YzIyMGFlOGI4NjlmN2RlMDhhZTZlZTAxNTA3YWY4MTljYwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVSW1wbC5j
cHAKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJHUFVJbXBsLmgiCisKKyNpbmNsdWRlICJXZWJHUFVBZGFwdGVySW1wbC5oIgor
I2luY2x1ZGUgIldlYkdQVUNvbnZlcnRUb0JhY2tpbmcuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2Vi
R1BVRXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK0dQVUlt
cGw6OkdQVUltcGwoV0dQVUluc3RhbmNlIGluc3RhbmNlKQorICAgIDogbV9iYWNraW5nKGluc3Rh
bmNlKQoreworfQorCitHUFVJbXBsOjp+R1BVSW1wbCgpCit7CisgICAgd2dwdUluc3RhbmNlUmVs
ZWFzZShtX2JhY2tpbmcpOworfQorCit2b2lkIHJlcXVlc3RBZGFwdGVyQ2FsbGJhY2soV0dQVVJl
cXVlc3RBZGFwdGVyU3RhdHVzIHN0YXR1cywgV0dQVUFkYXB0ZXIgYWRhcHRlciwgY29uc3QgY2hh
ciogbWVzc2FnZSwgdm9pZCogdXNlcmRhdGEpCit7CisgICAgYXV0byBncHUgPSBhZG9wdFJlZigq
c3RhdGljX2Nhc3Q8R1BVSW1wbCo+KHVzZXJkYXRhKSk7IC8vIGFkb3B0UmVmIGlzIGJhbGFuY2Vk
IGJ5IGxlYWtSZWYgaW4gcmVxdWVzdEFkYXB0ZXIoKSBiZWxvdy4gV2UgaGF2ZSB0byBkbyB0aGlz
IGJlY2F1c2Ugd2UncmUgdXNpbmcgYSBDIEFQSSB3aXRoIG5vIGNvbmNlcHQgb2YgcmVmZXJlbmNl
IGNvdW50aW5nIG9yIGJsb2Nrcy4KKyAgICBncHUtPnJlcXVlc3RBZGFwdGVyQ2FsbGJhY2soc3Rh
dHVzLCBhZGFwdGVyLCBtZXNzYWdlKTsKK30KKwordm9pZCBHUFVJbXBsOjpyZXF1ZXN0QWRhcHRl
cihjb25zdCBSZXF1ZXN0QWRhcHRlck9wdGlvbnMmIG9wdGlvbnMsIHN0ZDo6ZnVuY3Rpb248dm9p
ZChSZWZQdHI8QWRhcHRlcj4mJik+JiYgY2FsbGJhY2spCit7CisgICAgUmVmIHByb3RlY3RlZFRo
aXMoKnRoaXMpOworCisgICAgV0dQVVJlcXVlc3RBZGFwdGVyT3B0aW9ucyBiYWNraW5nT3B0aW9u
cyB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIG51bGxwdHIsCisgICAgICAgIG9wdGlvbnMu
cG93ZXJQcmVmZXJlbmNlID8gY29udmVydFRvQmFja2luZygqb3B0aW9ucy5wb3dlclByZWZlcmVu
Y2UpIDogc3RhdGljX2Nhc3Q8V0dQVVBvd2VyUHJlZmVyZW5jZT4oV0dQVVBvd2VyUHJlZmVyZW5j
ZV9Ob1ByZWZlcmVuY2UpLAorICAgICAgICBvcHRpb25zLmZvcmNlRmFsbGJhY2tBZGFwdGVyLAor
ICAgIH07CisKKyAgICBtX2NhbGxiYWNrcy5hcHBlbmQoV1RGTW92ZShjYWxsYmFjaykpOworCisg
ICAgd2dwdUluc3RhbmNlUmVxdWVzdEFkYXB0ZXIobV9iYWNraW5nLCAmYmFja2luZ09wdGlvbnMs
ICZXZWJHUFU6OnJlcXVlc3RBZGFwdGVyQ2FsbGJhY2ssICZwcm90ZWN0ZWRUaGlzLmxlYWtSZWYo
KSk7IC8vIGxlYWtSZWYgaXMgYmFsYW5jZWQgYnkgYWRvcHRSZWYgaW4gcmVxdWVzdEFkYXB0ZXJD
YWxsYmFjaygpIGFib3ZlLiBXZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSdyZSB1c2luZyBh
IEMgQVBJIHdpdGggbm8gY29uY2VwdCBvZiByZWZlcmVuY2UgY291bnRpbmcgb3IgYmxvY2tzLgor
fQorCit2b2lkIEdQVUltcGw6OnJlcXVlc3RBZGFwdGVyQ2FsbGJhY2soV0dQVVJlcXVlc3RBZGFw
dGVyU3RhdHVzLCBXR1BVQWRhcHRlciBhZGFwdGVyLCBjb25zdCBjaGFyKiBtZXNzYWdlKQorewor
ICAgIFVOVVNFRF9QQVJBTShtZXNzYWdlKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gbV9jYWxsYmFj
a3MudGFrZUZpcnN0KCk7CisgICAgY2FsbGJhY2soQWRhcHRlckltcGw6OmNyZWF0ZShhZGFwdGVy
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQ
VUltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2Vi
R1BVSW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjljMTcwM2RiMmVlNGUwMGZiMTE1YzQ2ZjZhM2IwNjJjMGM4
ZjI2OWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNz
L1dlYkdQVS9JbXBsL1dlYkdQVUltcGwuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJXZWJHUFUuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2Vi
R1BVLmg+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNw
YWNlIFdlYkdQVSB7CisKK2NsYXNzIEdQVUltcGwgZmluYWwgOiBwdWJsaWMgR1BVIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUmVmPEdQVUltcGw+IGNyZWF0ZShXR1BVSW5zdGFuY2UgaW5zdGFuY2Up
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHUFVJbXBsKGluc3RhbmNlKSk7
CisgICAgfQorCisgICAgdmlydHVhbCB+R1BVSW1wbCgpOworCisgICAgV0dQVUluc3RhbmNlIGJh
Y2tpbmcoKSBjb25zdCB7IHJldHVybiBtX2JhY2tpbmc7IH0KKworcHJpdmF0ZToKKyAgICBmcmll
bmQgdm9pZCByZXF1ZXN0QWRhcHRlckNhbGxiYWNrKFdHUFVSZXF1ZXN0QWRhcHRlclN0YXR1cywg
V0dQVUFkYXB0ZXIsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIHZvaWQqIHVzZXJkYXRhKTsKKworICAg
IEdQVUltcGwoV0dQVUluc3RhbmNlKTsKKworICAgIEdQVUltcGwoY29uc3QgR1BVSW1wbCYpID0g
ZGVsZXRlOworICAgIEdQVUltcGwoR1BVSW1wbCYmKSA9IGRlbGV0ZTsKKyAgICBHUFVJbXBsJiBv
cGVyYXRvcj0oY29uc3QgR1BVSW1wbCYpID0gZGVsZXRlOworICAgIEdQVUltcGwmIG9wZXJhdG9y
PShHUFVJbXBsJiYpID0gZGVsZXRlOworCisgICAgdm9pZCByZXF1ZXN0QWRhcHRlckNhbGxiYWNr
KFdHUFVSZXF1ZXN0QWRhcHRlclN0YXR1cywgV0dQVUFkYXB0ZXIsIGNvbnN0IGNoYXIqIG1lc3Nh
Z2UpOworICAgIHZvaWQgcmVxdWVzdEFkYXB0ZXIoY29uc3QgUmVxdWVzdEFkYXB0ZXJPcHRpb25z
Jiwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlZlB0cjxBZGFwdGVyPiYmKT4mJikgZmluYWw7CisKKyAg
ICBXR1BVSW5zdGFuY2UgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworCisgICAgRGVxdWU8c3RkOjpm
dW5jdGlvbjx2b2lkKFJlZlB0cjxBZGFwdGVyPiYmKT4+IG1fY2FsbGJhY2tzOworfTsKKworfSAv
LyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUGlwZWxpbmVMYXlv
dXRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwv
V2ViR1BVUGlwZWxpbmVMYXlvdXRJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NDQ3Mzk5MzE4OTUwZDk1
NGE3ZTE2ZGNmNDZlN2ZiNDdlMTRjNWYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVQaXBlbGluZUxheW91dEltcGwu
Y3BwCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViR1BVUGlwZWxpbmVMYXlvdXRJbXBsLmgiCisKKyNpbmNsdWRlIDxXZWJHUFUv
V2ViR1BVRXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK1Bp
cGVsaW5lTGF5b3V0SW1wbDo6UGlwZWxpbmVMYXlvdXRJbXBsKFdHUFVQaXBlbGluZUxheW91dCBw
aXBlbGluZUxheW91dCkKKyAgICA6IG1fYmFja2luZyhwaXBlbGluZUxheW91dCkKK3sKK30KKwor
UGlwZWxpbmVMYXlvdXRJbXBsOjp+UGlwZWxpbmVMYXlvdXRJbXBsKCkKK3sKKyAgICB3Z3B1UGlw
ZWxpbmVMYXlvdXRSZWxlYXNlKG1fYmFja2luZyk7Cit9CisKK3ZvaWQgUGlwZWxpbmVMYXlvdXRJ
bXBsOjpzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYgbGFiZWwpCit7CisgICAgd2dwdVBp
cGVsaW5lTGF5b3V0U2V0TGFiZWwobV9iYWNraW5nLCBsYWJlbC51dGY4KCkuZGF0YSgpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUGlwZWxp
bmVMYXlvdXRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9J
bXBsL1dlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhZmNhMmM3NGU4MzM4
MWQ4YjNlYzUxMGEwM2NlZjkyNzlkMWJhNDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVBpcGVsaW5lTGF5b3V0SW1w
bC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIldlYkdQVVBpcGVsaW5lTGF5b3V0LmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgor
CituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBQaXBlbGluZUxh
eW91dEltcGwgZmluYWwgOiBwdWJsaWMgUGlwZWxpbmVMYXlvdXQgeworcHVibGljOgorICAgIHN0
YXRpYyBSZWY8UGlwZWxpbmVMYXlvdXRJbXBsPiBjcmVhdGUoV0dQVVBpcGVsaW5lTGF5b3V0IHBp
cGVsaW5lTGF5b3V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGlwZWxp
bmVMYXlvdXRJbXBsKHBpcGVsaW5lTGF5b3V0KSk7CisgICAgfQorCisgICAgdmlydHVhbCB+UGlw
ZWxpbmVMYXlvdXRJbXBsKCk7CisKKyAgICBXR1BVUGlwZWxpbmVMYXlvdXQgYmFja2luZygpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgorICAgIFBpcGVsaW5lTGF5b3V0
SW1wbChXR1BVUGlwZWxpbmVMYXlvdXQpOworCisgICAgUGlwZWxpbmVMYXlvdXRJbXBsKGNvbnN0
IFBpcGVsaW5lTGF5b3V0SW1wbCYpID0gZGVsZXRlOworICAgIFBpcGVsaW5lTGF5b3V0SW1wbChQ
aXBlbGluZUxheW91dEltcGwmJikgPSBkZWxldGU7CisgICAgUGlwZWxpbmVMYXlvdXRJbXBsJiBv
cGVyYXRvcj0oY29uc3QgUGlwZWxpbmVMYXlvdXRJbXBsJikgPSBkZWxldGU7CisgICAgUGlwZWxp
bmVMYXlvdXRJbXBsJiBvcGVyYXRvcj0oUGlwZWxpbmVMYXlvdXRJbXBsJiYpID0gZGVsZXRlOwor
CisgICAgdm9pZCBzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYpIGZpbmFsOworCisgICAg
V0dQVVBpcGVsaW5lTGF5b3V0IG1fYmFja2luZyB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVF1ZXJ5U2V0SW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVF1ZXJ5
U2V0SW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDZlZDY5NDBhMjkzMTMwMTcxOTdmODg0YzA4ZDI1YTNj
MTdmNjBiYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhp
Y3MvV2ViR1BVL0ltcGwvV2ViR1BVUXVlcnlTZXRJbXBsLmNwcApAQCAtMCwwICsxLDU1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkdQVVF1ZXJ5U2V0
SW1wbC5oIgorCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVUV4dC5oPgorCituYW1lc3BhY2UgUEFM
IHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitRdWVyeVNldEltcGw6OlF1ZXJ5U2V0SW1wbChXR1BV
UXVlcnlTZXQgcXVlcnlTZXQpCisgICAgOiBtX2JhY2tpbmcocXVlcnlTZXQpCit7Cit9CisKK1F1
ZXJ5U2V0SW1wbDo6flF1ZXJ5U2V0SW1wbCgpCit7CisgICAgd2dwdVF1ZXJ5U2V0UmVsZWFzZSht
X2JhY2tpbmcpOworfQorCit2b2lkIFF1ZXJ5U2V0SW1wbDo6ZGVzdHJveSgpCit7CisgICAgd2dw
dVF1ZXJ5U2V0RGVzdHJveShtX2JhY2tpbmcpOworfQorCit2b2lkIFF1ZXJ5U2V0SW1wbDo6c2V0
TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAgIHdncHVRdWVyeVNldFNl
dExhYmVsKG1fYmFja2luZywgbGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVF1ZXJ5U2V0SW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVRdWVyeVNldElt
cGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi41ZmRmN2YwZjE3YjljYTUwMzk5ZDdhOTMwZWZkYzk0NjJmMTk0NGJh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJH
UFUvSW1wbC9XZWJHUFVRdWVyeVNldEltcGwuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJXZWJHUFVRdWVyeVNldC5oIgorI2luY2x1ZGUg
PFdlYkdQVS9XZWJHUFUuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsK
KworY2xhc3MgUXVlcnlTZXRJbXBsIGZpbmFsIDogcHVibGljIFF1ZXJ5U2V0IHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmPFF1ZXJ5U2V0SW1wbD4gY3JlYXRlKFdHUFVRdWVyeVNldCBxdWVyeVNl
dCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFF1ZXJ5U2V0SW1wbChxdWVy
eVNldCkpOworICAgIH0KKworICAgIHZpcnR1YWwgflF1ZXJ5U2V0SW1wbCgpOworCisgICAgV0dQ
VVF1ZXJ5U2V0IGJhY2tpbmcoKSBjb25zdCB7IHJldHVybiBtX2JhY2tpbmc7IH0KKworcHJpdmF0
ZToKKyAgICBRdWVyeVNldEltcGwoV0dQVVF1ZXJ5U2V0KTsKKworICAgIFF1ZXJ5U2V0SW1wbChj
b25zdCBRdWVyeVNldEltcGwmKSA9IGRlbGV0ZTsKKyAgICBRdWVyeVNldEltcGwoUXVlcnlTZXRJ
bXBsJiYpID0gZGVsZXRlOworICAgIFF1ZXJ5U2V0SW1wbCYgb3BlcmF0b3I9KGNvbnN0IFF1ZXJ5
U2V0SW1wbCYpID0gZGVsZXRlOworICAgIFF1ZXJ5U2V0SW1wbCYgb3BlcmF0b3I9KFF1ZXJ5U2V0
SW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIHZvaWQgZGVzdHJveSgpIGZpbmFsOworCisgICAgdm9p
ZCBzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYpIGZpbmFsOworCisgICAgV0dQVVF1ZXJ5
U2V0IG1fYmFja2luZyB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAv
LyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dy
YXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVF1ZXVlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Q
QUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVF1ZXVlSW1wbC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNDdiNDNmMTY1NWVlY2VlNzk3OTk2MzU3MDg1NzNhMTM5ZDNiYTliZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BV
UXVldWVJbXBsLmNwcApAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVRdWV1ZUltcGwuaCIKKworI2luY2x1ZGUgIldlYkdQ
VUJ1ZmZlckltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVDb21tYW5kQnVmZmVySW1wbC5oIgorI2lu
Y2x1ZGUgIldlYkdQVUNvbnZlcnRUb0JhY2tpbmcuaCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJl
SW1wbC5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFVFeHQuaD4KKworbmFtZXNwYWNlIFBBTCB7
CituYW1lc3BhY2UgV2ViR1BVIHsKKworUXVldWVJbXBsOjpRdWV1ZUltcGwoV0dQVVF1ZXVlIHF1
ZXVlKQorICAgIDogbV9iYWNraW5nKHF1ZXVlKQoreworfQorCitRdWV1ZUltcGw6On5RdWV1ZUlt
cGwoKQoreworICAgIHdncHVRdWV1ZVJlbGVhc2UobV9iYWNraW5nKTsKK30KKwordm9pZCBRdWV1
ZUltcGw6OnN1Ym1pdChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDb21tYW5kQnVmZmVy
Pj4mJiBjb21tYW5kQnVmZmVycykKK3sKKyAgICBWZWN0b3I8V0dQVUNvbW1hbmRCdWZmZXI+IGJh
Y2tpbmdDb21tYW5kQnVmZmVyczsKKyAgICBiYWNraW5nQ29tbWFuZEJ1ZmZlcnMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShjb21tYW5kQnVmZmVycy5zaXplKCkpOworICAgIGZvciAoYXV0byBjb21t
YW5kQnVmZmVyIDogY29tbWFuZEJ1ZmZlcnMpCisgICAgICAgIGJhY2tpbmdDb21tYW5kQnVmZmVy
cy51bmNoZWNrZWRBcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgQ29tbWFuZEJ1ZmZlckltcGwmPihj
b21tYW5kQnVmZmVyLmdldCgpKS5iYWNraW5nKCkpOworCisgICAgd2dwdVF1ZXVlU3VibWl0KG1f
YmFja2luZywgYmFja2luZ0NvbW1hbmRCdWZmZXJzLnNpemUoKSwgYmFja2luZ0NvbW1hbmRCdWZm
ZXJzLmRhdGEoKSk7Cit9CisKK3ZvaWQgb25TdWJtaXR0ZWRXb3JrRG9uZUNhbGxiYWNrKFdHUFVR
dWV1ZVdvcmtEb25lU3RhdHVzIHN0YXR1cywgdm9pZCogdXNlcmRhdGEpCit7CisgICAgYXV0byBx
dWV1ZSA9IGFkb3B0UmVmKCpzdGF0aWNfY2FzdDxRdWV1ZUltcGwqPih1c2VyZGF0YSkpOyAvLyBh
ZG9wdFJlZiBpcyBiYWxhbmNlZCBieSBsZWFrUmVmIGluIG9uU3VibWl0dGVkV29ya0RvbmUoKSBi
ZWxvdy4gV2UgaGF2ZSB0byBkbyB0aGlzIGJlY2F1c2Ugd2UncmUgdXNpbmcgYSBDIEFQSSB3aXRo
IG5vIGNvbmNlcHQgb2YgcmVmZXJlbmNlIGNvdW50aW5nIG9yIGJsb2Nrcy4KKyAgICBxdWV1ZS0+
b25TdWJtaXR0ZWRXb3JrRG9uZUNhbGxiYWNrKHN0YXR1cyk7Cit9CisKK3ZvaWQgUXVldWVJbXBs
OjpvblN1Ym1pdHRlZFdvcmtEb25lKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiYmIGNhbGxiYWNrKQor
eworICAgIFJlZiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKKworICAgIG1fY2FsbGJhY2tzLmFwcGVu
ZChXVEZNb3ZlKGNhbGxiYWNrKSk7CisKKyAgICB3Z3B1UXVldWVPblN1Ym1pdHRlZFdvcmtEb25l
KG1fYmFja2luZywgbV9zaWduYWxWYWx1ZSwgJldlYkdQVTo6b25TdWJtaXR0ZWRXb3JrRG9uZUNh
bGxiYWNrLCAmcHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpOyAvLyBsZWFrUmVmIGlzIGJhbGFuY2Vk
IGJ5IGFkb3B0UmVmIGluIG9uU3VibWl0dGVkV29ya0RvbmVDYWxsYmFjaygpIGFib3ZlLiBXZSBo
YXZlIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSdyZSB1c2luZyBhIEMgQVBJIHdpdGggbm8gY29uY2Vw
dCBvZiByZWZlcmVuY2UgY291bnRpbmcgb3IgYmxvY2tzLgorCisgICAgKyttX3NpZ25hbFZhbHVl
OworfQorCit2b2lkIFF1ZXVlSW1wbDo6b25TdWJtaXR0ZWRXb3JrRG9uZUNhbGxiYWNrKFdHUFVR
dWV1ZVdvcmtEb25lU3RhdHVzKQoreworICAgIGF1dG8gY2FsbGJhY2sgPSBtX2NhbGxiYWNrcy50
YWtlRmlyc3QoKTsKKyAgICBjYWxsYmFjaygpOworfQorCit2b2lkIFF1ZXVlSW1wbDo6d3JpdGVC
dWZmZXIoCisgICAgY29uc3QgQnVmZmVyJiBidWZmZXIsCisgICAgU2l6ZTY0IGJ1ZmZlck9mZnNl
dCwKKyAgICBjb25zdCB2b2lkKiBzb3VyY2UsCisgICAgc2l6ZV90IGJ5dGVMZW5ndGgsCisgICAg
U2l6ZTY0IGRhdGFPZmZzZXQsCisgICAgc3RkOjpvcHRpb25hbDxTaXplNjQ+IHNpemUpCit7Cisg
ICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFyaXRobWV0aWMKKyAgICB3Z3B1UXVldWVXcml0ZUJ1
ZmZlcihtX2JhY2tpbmcsIHN0YXRpY19jYXN0PGNvbnN0IEJ1ZmZlckltcGwmPihidWZmZXIpLmJh
Y2tpbmcoKSwgYnVmZmVyT2Zmc2V0LCBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oc291cmNl
KSArIGRhdGFPZmZzZXQsIHNpemUudmFsdWVfb3IoYnl0ZUxlbmd0aCAtIGRhdGFPZmZzZXQpKTsK
K30KKwordm9pZCBRdWV1ZUltcGw6OndyaXRlVGV4dHVyZSgKKyAgICBjb25zdCBJbWFnZUNvcHlU
ZXh0dXJlJiBkZXN0aW5hdGlvbiwKKyAgICBjb25zdCB2b2lkKiBzb3VyY2UsCisgICAgc2l6ZV90
IGJ5dGVMZW5ndGgsCisgICAgY29uc3QgSW1hZ2VEYXRhTGF5b3V0JiBkYXRhTGF5b3V0LAorICAg
IGNvbnN0IEV4dGVudDNEJiBzaXplKQoreworICAgIFdHUFVJbWFnZUNvcHlUZXh0dXJlIGJhY2tp
bmdEZXN0aW5hdGlvbiB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIHN0YXRpY19jYXN0PGNv
bnN0IFRleHR1cmVJbXBsJj4oZGVzdGluYXRpb24udGV4dHVyZSkuYmFja2luZygpLAorICAgICAg
ICBkZXN0aW5hdGlvbi5taXBMZXZlbCwKKyAgICAgICAgZGVzdGluYXRpb24ub3JpZ2luID8gY29u
dmVydFRvQmFja2luZygqZGVzdGluYXRpb24ub3JpZ2luKSA6IFdHUFVPcmlnaW4zRCB7IDAsIDAs
IDAgfSwKKyAgICAgICAgY29udmVydFRvQmFja2luZyhkZXN0aW5hdGlvbi5hc3BlY3QpLAorICAg
IH07CisKKyAgICBXR1BVVGV4dHVyZURhdGFMYXlvdXQgYmFja2luZ0RhdGFMYXlvdXQgeworICAg
ICAgICBudWxscHRyLAorICAgICAgICBkYXRhTGF5b3V0Lm9mZnNldCwKKyAgICAgICAgZGF0YUxh
eW91dC5ieXRlc1BlclJvdy52YWx1ZV9vcigwKSwKKyAgICAgICAgZGF0YUxheW91dC5yb3dzUGVy
SW1hZ2UudmFsdWVfb3IoMCksCisgICAgfTsKKworICAgIFdHUFVFeHRlbnQzRCBiYWNraW5nU2l6
ZSA9IGNvbnZlcnRUb0JhY2tpbmcoc2l6ZSk7CisKKyAgICB3Z3B1UXVldWVXcml0ZVRleHR1cmUo
bV9iYWNraW5nLCAmYmFja2luZ0Rlc3RpbmF0aW9uLCBzb3VyY2UsIGJ5dGVMZW5ndGgsICZiYWNr
aW5nRGF0YUxheW91dCwgJmJhY2tpbmdTaXplKTsKK30KKwordm9pZCBRdWV1ZUltcGw6OmNvcHlF
eHRlcm5hbEltYWdlVG9UZXh0dXJlKAorICAgIGNvbnN0IEltYWdlQ29weUV4dGVybmFsSW1hZ2Um
IHNvdXJjZSwKKyAgICBjb25zdCBJbWFnZUNvcHlUZXh0dXJlVGFnZ2VkJiBkZXN0aW5hdGlvbiwK
KyAgICBjb25zdCBFeHRlbnQzRCYgY29weVNpemUpCit7CisgICAgVU5VU0VEX1BBUkFNKHNvdXJj
ZSk7CisgICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oY29w
eVNpemUpOworfQorCit2b2lkIFF1ZXVlSW1wbDo6c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJp
bmcmIGxhYmVsKQoreworICAgIHdncHVRdWV1ZVNldExhYmVsKG1fYmFja2luZywgbGFiZWwudXRm
OCgpLmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2Vi
R1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9J
bXBsL1dlYkdQVVF1ZXVlSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9X
ZWJHUFUvSW1wbC9XZWJHUFVRdWV1ZUltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYTA2ZmE2ZmI1ZjMyNjY0
ODg2Y2E2ZTFjMDc0ZDY5ZDAzN2E0MDk0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVRdWV1ZUltcGwuaApAQCAtMCww
ICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJXZWJHUFVR
dWV1ZS5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFUuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUu
aD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworY2xhc3MgUXVldWVJ
bXBsIGZpbmFsIDogcHVibGljIFF1ZXVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFF1ZXVl
SW1wbD4gY3JlYXRlKFdHUFVRdWV1ZSBxdWV1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFF1ZXVlSW1wbChxdWV1ZSkpOworICAgIH0KKworICAgIHZpcnR1YWwgflF1ZXVl
SW1wbCgpOworCisgICAgV0dQVVF1ZXVlIGJhY2tpbmcoKSBjb25zdCB7IHJldHVybiBtX2JhY2tp
bmc7IH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgdm9pZCBvblN1Ym1pdHRlZFdvcmtEb25lQ2Fs
bGJhY2soV0dQVVF1ZXVlV29ya0RvbmVTdGF0dXMsIHZvaWQqIHVzZXJkYXRhKTsKKworICAgIFF1
ZXVlSW1wbChXR1BVUXVldWUpOworCisgICAgUXVldWVJbXBsKGNvbnN0IFF1ZXVlSW1wbCYpID0g
ZGVsZXRlOworICAgIFF1ZXVlSW1wbChRdWV1ZUltcGwmJikgPSBkZWxldGU7CisgICAgUXVldWVJ
bXBsJiBvcGVyYXRvcj0oY29uc3QgUXVldWVJbXBsJikgPSBkZWxldGU7CisgICAgUXVldWVJbXBs
JiBvcGVyYXRvcj0oUXVldWVJbXBsJiYpID0gZGVsZXRlOworCisgICAgdm9pZCBzdWJtaXQoVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Q29tbWFuZEJ1ZmZlcj4+JiYpIGZpbmFsOworCisg
ICAgdm9pZCBvblN1Ym1pdHRlZFdvcmtEb25lQ2FsbGJhY2soV0dQVVF1ZXVlV29ya0RvbmVTdGF0
dXMpOworICAgIHZvaWQgb25TdWJtaXR0ZWRXb3JrRG9uZShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4m
JikgZmluYWw7CisKKyAgICB2b2lkIHdyaXRlQnVmZmVyKAorICAgICAgICBjb25zdCBCdWZmZXIm
LAorICAgICAgICBTaXplNjQgYnVmZmVyT2Zmc2V0LAorICAgICAgICBjb25zdCB2b2lkKiBzb3Vy
Y2UsCisgICAgICAgIHNpemVfdCBieXRlTGVuZ3RoLAorICAgICAgICBTaXplNjQgZGF0YU9mZnNl
dCwKKyAgICAgICAgc3RkOjpvcHRpb25hbDxTaXplNjQ+KSBmaW5hbDsKKworICAgIHZvaWQgd3Jp
dGVUZXh0dXJlKAorICAgICAgICBjb25zdCBJbWFnZUNvcHlUZXh0dXJlJiBkZXN0aW5hdGlvbiwK
KyAgICAgICAgY29uc3Qgdm9pZCogc291cmNlLAorICAgICAgICBzaXplX3QgYnl0ZUxlbmd0aCwK
KyAgICAgICAgY29uc3QgSW1hZ2VEYXRhTGF5b3V0JiwKKyAgICAgICAgY29uc3QgRXh0ZW50M0Qm
IHNpemUpIGZpbmFsOworCisgICAgdm9pZCBjb3B5RXh0ZXJuYWxJbWFnZVRvVGV4dHVyZSgKKyAg
ICAgICAgY29uc3QgSW1hZ2VDb3B5RXh0ZXJuYWxJbWFnZSYgc291cmNlLAorICAgICAgICBjb25z
dCBJbWFnZUNvcHlUZXh0dXJlVGFnZ2VkJiBkZXN0aW5hdGlvbiwKKyAgICAgICAgY29uc3QgRXh0
ZW50M0QmIGNvcHlTaXplKSBmaW5hbDsKKworICAgIHZvaWQgc2V0TGFiZWxJbnRlcm5hbChjb25z
dCBTdHJpbmcmKSBmaW5hbDsKKworICAgIFdHUFVRdWV1ZSBtX2JhY2tpbmcgeyBudWxscHRyIH07
CisKKyAgICB1aW50NjRfdCBtX3NpZ25hbFZhbHVlIHsgMSB9OworCisgICAgRGVxdWU8c3RkOjpm
dW5jdGlvbjx2b2lkKCk+PiBtX2NhbGxiYWNrczsKK307CisKK30gLy8gbmFtZXNwYWNlIFBBTAor
fSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJbXBsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVy
QnVuZGxlRW5jb2RlckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg1ZTIxMjdkNjQyMTZkMGI5NGM0YTQ5
OWVjYjFiNDA3OTA4NGFlZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJbXBsLmNw
cApAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJHUFVSZW5kZXJCdW5kbGVFbmNvZGVySW1wbC5oIgorCisjaW5jbHVkZSAiV2Vi
R1BVQmluZEdyb3VwSW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVUJ1ZmZlckltcGwuaCIKKyNpbmNs
dWRlICJXZWJHUFVDb252ZXJ0VG9CYWNraW5nLmgiCisjaW5jbHVkZSAiV2ViR1BVUmVuZGVyQnVu
ZGxlSW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5oIgorI2luY2x1
ZGUgPFdlYkdQVS9XZWJHUFVFeHQuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2Vi
R1BVIHsKKworUmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OlJlbmRlckJ1bmRsZUVuY29kZXJJbXBs
KFdHUFVSZW5kZXJCdW5kbGVFbmNvZGVyIHJlbmRlckJ1bmRsZUVuY29kZXIpCisgICAgOiBtX2Jh
Y2tpbmcocmVuZGVyQnVuZGxlRW5jb2RlcikKK3sKK30KKworUmVuZGVyQnVuZGxlRW5jb2Rlcklt
cGw6On5SZW5kZXJCdW5kbGVFbmNvZGVySW1wbCgpCit7CisgICAgd2dwdVJlbmRlckJ1bmRsZUVu
Y29kZXJSZWxlYXNlKG1fYmFja2luZyk7Cit9CisKK3ZvaWQgUmVuZGVyQnVuZGxlRW5jb2Rlcklt
cGw6OnNldFBpcGVsaW5lKGNvbnN0IFJlbmRlclBpcGVsaW5lJiByZW5kZXJQaXBlbGluZSkKK3sK
KyAgICB3Z3B1UmVuZGVyQnVuZGxlRW5jb2RlclNldFBpcGVsaW5lKG1fYmFja2luZywgc3RhdGlj
X2Nhc3Q8Y29uc3QgUmVuZGVyUGlwZWxpbmVJbXBsJj4ocmVuZGVyUGlwZWxpbmUpLmJhY2tpbmco
KSk7Cit9CisKK3ZvaWQgUmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OnNldEluZGV4QnVmZmVyKGNv
bnN0IEJ1ZmZlciYgYnVmZmVyLCBJbmRleEZvcm1hdCBpbmRleEZvcm1hdCwgU2l6ZTY0IG9mZnNl
dCwgc3RkOjpvcHRpb25hbDxTaXplNjQ+IHNpemUpCit7CisgICAgd2dwdVJlbmRlckJ1bmRsZUVu
Y29kZXJTZXRJbmRleEJ1ZmZlcihtX2JhY2tpbmcsIHN0YXRpY19jYXN0PGNvbnN0IEJ1ZmZlcklt
cGwmPihidWZmZXIpLmJhY2tpbmcoKSwgY29udmVydFRvQmFja2luZyhpbmRleEZvcm1hdCksIG9m
ZnNldCwgc2l6ZS52YWx1ZV9vcihXR1BVX1dIT0xFX1NJWkUpKTsKK30KKwordm9pZCBSZW5kZXJC
dW5kbGVFbmNvZGVySW1wbDo6c2V0VmVydGV4QnVmZmVyKEluZGV4MzIgc2xvdCwgY29uc3QgQnVm
ZmVyJiBidWZmZXIsIFNpemU2NCBvZmZzZXQsIHN0ZDo6b3B0aW9uYWw8U2l6ZTY0PiBzaXplKQor
eworICAgIHdncHVSZW5kZXJCdW5kbGVFbmNvZGVyU2V0VmVydGV4QnVmZmVyKG1fYmFja2luZywg
c2xvdCwgc3RhdGljX2Nhc3Q8Y29uc3QgQnVmZmVySW1wbCY+KGJ1ZmZlcikuYmFja2luZygpLCBv
ZmZzZXQsIHNpemUudmFsdWVfb3IoV0dQVV9XSE9MRV9TSVpFKSk7Cit9CisKK3ZvaWQgUmVuZGVy
QnVuZGxlRW5jb2RlckltcGw6OmRyYXcoU2l6ZTMyIHZlcnRleENvdW50LCBTaXplMzIgaW5zdGFu
Y2VDb3VudCwKKyAgICBTaXplMzIgZmlyc3RWZXJ0ZXgsIFNpemUzMiBmaXJzdEluc3RhbmNlKQor
eworICAgIHdncHVSZW5kZXJCdW5kbGVFbmNvZGVyRHJhdyhtX2JhY2tpbmcsIHZlcnRleENvdW50
LCBpbnN0YW5jZUNvdW50LCBmaXJzdFZlcnRleCwgZmlyc3RJbnN0YW5jZSk7Cit9CisKK3ZvaWQg
UmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OmRyYXdJbmRleGVkKFNpemUzMiBpbmRleENvdW50LCBT
aXplMzIgaW5zdGFuY2VDb3VudCwKKyAgICBTaXplMzIgZmlyc3RJbmRleCwKKyAgICBTaWduZWRP
ZmZzZXQzMiBiYXNlVmVydGV4LAorICAgIFNpemUzMiBmaXJzdEluc3RhbmNlKQoreworICAgIHdn
cHVSZW5kZXJCdW5kbGVFbmNvZGVyRHJhd0luZGV4ZWQobV9iYWNraW5nLCBpbmRleENvdW50LCBp
bnN0YW5jZUNvdW50LCBmaXJzdEluZGV4LCBiYXNlVmVydGV4LCBmaXJzdEluc3RhbmNlKTsKK30K
Kwordm9pZCBSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6ZHJhd0luZGlyZWN0KGNvbnN0IEJ1ZmZl
ciYgaW5kaXJlY3RCdWZmZXIsIFNpemU2NCBpbmRpcmVjdE9mZnNldCkKK3sKKyAgICB3Z3B1UmVu
ZGVyQnVuZGxlRW5jb2RlckRyYXdJbmRpcmVjdChtX2JhY2tpbmcsIHN0YXRpY19jYXN0PGNvbnN0
IEJ1ZmZlckltcGwmPihpbmRpcmVjdEJ1ZmZlcikuYmFja2luZygpLCBpbmRpcmVjdE9mZnNldCk7
Cit9CisKK3ZvaWQgUmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OmRyYXdJbmRleGVkSW5kaXJlY3Qo
Y29uc3QgQnVmZmVyJiBpbmRpcmVjdEJ1ZmZlciwgU2l6ZTY0IGluZGlyZWN0T2Zmc2V0KQorewor
ICAgIHdncHVSZW5kZXJCdW5kbGVFbmNvZGVyRHJhd0luZGV4ZWRJbmRpcmVjdChtX2JhY2tpbmcs
IHN0YXRpY19jYXN0PGNvbnN0IEJ1ZmZlckltcGwmPihpbmRpcmVjdEJ1ZmZlcikuYmFja2luZygp
LCBpbmRpcmVjdE9mZnNldCk7Cit9CisKK3ZvaWQgUmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OnNl
dEJpbmRHcm91cChJbmRleDMyIGluZGV4LCBjb25zdCBCaW5kR3JvdXAmIGJpbmRHcm91cCwKKyAg
ICBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxCdWZmZXJEeW5hbWljT2Zmc2V0Pj4mJiBkeW5hbWljT2Zm
c2V0cykKK3sKKyAgICBhdXRvIGJhY2tpbmdPZmZzZXRzID0gZHluYW1pY09mZnNldHMudmFsdWVf
b3IoVmVjdG9yPEJ1ZmZlckR5bmFtaWNPZmZzZXQ+IHsgfSk7CisgICAgd2dwdVJlbmRlckJ1bmRs
ZUVuY29kZXJTZXRCaW5kR3JvdXAobV9iYWNraW5nLCBpbmRleCwgc3RhdGljX2Nhc3Q8Y29uc3Qg
QmluZEdyb3VwSW1wbCY+KGJpbmRHcm91cCkuYmFja2luZygpLCBiYWNraW5nT2Zmc2V0cy5zaXpl
KCksIGJhY2tpbmdPZmZzZXRzLmRhdGEoKSk7Cit9CisKK3ZvaWQgUmVuZGVyQnVuZGxlRW5jb2Rl
ckltcGw6OnNldEJpbmRHcm91cChJbmRleDMyIGluZGV4LCBjb25zdCBCaW5kR3JvdXAmIGJpbmRH
cm91cCwKKyAgICBjb25zdCB1aW50MzJfdCogZHluYW1pY09mZnNldHNBcnJheUJ1ZmZlciwKKyAg
ICBzaXplX3QgZHluYW1pY09mZnNldHNBcnJheUJ1ZmZlckxlbmd0aCwKKyAgICBTaXplNjQgZHlu
YW1pY09mZnNldHNEYXRhU3RhcnQsCisgICAgU2l6ZTMyIGR5bmFtaWNPZmZzZXRzRGF0YUxlbmd0
aCkKK3sKKyAgICBVTlVTRURfUEFSQU0oZHluYW1pY09mZnNldHNBcnJheUJ1ZmZlckxlbmd0aCk7
CisgICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFsZ2VicmEuCisgICAgd2dwdVJlbmRlckJ1bmRs
ZUVuY29kZXJTZXRCaW5kR3JvdXAobV9iYWNraW5nLCBpbmRleCwgc3RhdGljX2Nhc3Q8Y29uc3Qg
QmluZEdyb3VwSW1wbCY+KGJpbmRHcm91cCkuYmFja2luZygpLCBkeW5hbWljT2Zmc2V0c0RhdGFM
ZW5ndGgsIGR5bmFtaWNPZmZzZXRzQXJyYXlCdWZmZXIgKyBkeW5hbWljT2Zmc2V0c0RhdGFTdGFy
dCk7Cit9CisKK3ZvaWQgUmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OnB1c2hEZWJ1Z0dyb3VwKFN0
cmluZyYmIGdyb3VwTGFiZWwpCit7CisgICAgd2dwdVJlbmRlckJ1bmRsZUVuY29kZXJQdXNoRGVi
dWdHcm91cChtX2JhY2tpbmcsIGdyb3VwTGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQg
UmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OnBvcERlYnVnR3JvdXAoKQoreworICAgIHdncHVSZW5k
ZXJCdW5kbGVFbmNvZGVyUG9wRGVidWdHcm91cChtX2JhY2tpbmcpOworfQorCit2b2lkIFJlbmRl
ckJ1bmRsZUVuY29kZXJJbXBsOjppbnNlcnREZWJ1Z01hcmtlcihTdHJpbmcmJiBtYXJrZXJMYWJl
bCkKK3sKKyAgICB3Z3B1UmVuZGVyQnVuZGxlRW5jb2Rlckluc2VydERlYnVnTWFya2VyKG1fYmFj
a2luZywgbWFya2VyTGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK1JlZjxSZW5kZXJCdW5kbGU+
IFJlbmRlckJ1bmRsZUVuY29kZXJJbXBsOjpmaW5pc2goY29uc3QgUmVuZGVyQnVuZGxlRGVzY3Jp
cHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBhdXRvIGxhYmVsID0gZGVzY3JpcHRvci5sYWJlbC51
dGY4KCk7CisKKyAgICBXR1BVUmVuZGVyQnVuZGxlRGVzY3JpcHRvciBiYWNraW5nRGVzY3JpcHRv
ciB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIGxhYmVsLmRhdGEoKSwKKyAgICB9OworCisg
ICAgcmV0dXJuIFJlbmRlckJ1bmRsZUltcGw6OmNyZWF0ZSh3Z3B1UmVuZGVyQnVuZGxlRW5jb2Rl
ckZpbmlzaChtX2JhY2tpbmcsICZiYWNraW5nRGVzY3JpcHRvcikpOworfQorCit2b2lkIFJlbmRl
ckJ1bmRsZUVuY29kZXJJbXBsOjpzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYgbGFiZWwp
Cit7CisgICAgd2dwdVJlbmRlckJ1bmRsZUVuY29kZXJTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVs
LnV0ZjgoKS5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNl
IFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJH
UFUvSW1wbC9XZWJHUFVSZW5kZXJCdW5kbGVFbmNvZGVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUv
UEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJCdW5kbGVFbmNvZGVySW1w
bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmE1ZGFmNDE5M2NkMjhiOThjMzBiMGJlYjI2OWYxZjcyNjc5MzJiMWQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQ
VS9JbXBsL1dlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJbXBsLmgKQEAgLTAsMCArMSw4OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVUmVuZGVyQnVuZGxl
RW5jb2Rlci5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFUuaD4KKworbmFtZXNwYWNlIFBBTCB7
CituYW1lc3BhY2UgV2ViR1BVIHsKKworY2xhc3MgUmVuZGVyQnVuZGxlRW5jb2RlckltcGwgZmlu
YWwgOiBwdWJsaWMgUmVuZGVyQnVuZGxlRW5jb2RlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZjxSZW5kZXJCdW5kbGVFbmNvZGVySW1wbD4gY3JlYXRlKFdHUFVSZW5kZXJCdW5kbGVFbmNvZGVy
IHJlbmRlckJ1bmRsZUVuY29kZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBSZW5kZXJCdW5kbGVFbmNvZGVySW1wbChyZW5kZXJCdW5kbGVFbmNvZGVyKSk7CisgICAgfQor
CisgICAgflJlbmRlckJ1bmRsZUVuY29kZXJJbXBsKCk7CisKKyAgICBXR1BVUmVuZGVyQnVuZGxl
RW5jb2RlciBiYWNraW5nKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nOyB9CisKK3ByaXZhdGU6
CisgICAgUmVuZGVyQnVuZGxlRW5jb2RlckltcGwoV0dQVVJlbmRlckJ1bmRsZUVuY29kZXIpOwor
CisgICAgUmVuZGVyQnVuZGxlRW5jb2RlckltcGwoY29uc3QgUmVuZGVyQnVuZGxlRW5jb2Rlcklt
cGwmKSA9IGRlbGV0ZTsKKyAgICBSZW5kZXJCdW5kbGVFbmNvZGVySW1wbChSZW5kZXJCdW5kbGVF
bmNvZGVySW1wbCYmKSA9IGRlbGV0ZTsKKyAgICBSZW5kZXJCdW5kbGVFbmNvZGVySW1wbCYgb3Bl
cmF0b3I9KGNvbnN0IFJlbmRlckJ1bmRsZUVuY29kZXJJbXBsJikgPSBkZWxldGU7CisgICAgUmVu
ZGVyQnVuZGxlRW5jb2RlckltcGwmIG9wZXJhdG9yPShSZW5kZXJCdW5kbGVFbmNvZGVySW1wbCYm
KSA9IGRlbGV0ZTsKKworICAgIHZvaWQgc2V0UGlwZWxpbmUoY29uc3QgUmVuZGVyUGlwZWxpbmUm
KSBmaW5hbDsKKworICAgIHZvaWQgc2V0SW5kZXhCdWZmZXIoY29uc3QgQnVmZmVyJiwgSW5kZXhG
b3JtYXQsIFNpemU2NCBvZmZzZXQsIHN0ZDo6b3B0aW9uYWw8U2l6ZTY0PikgZmluYWw7CisgICAg
dm9pZCBzZXRWZXJ0ZXhCdWZmZXIoSW5kZXgzMiBzbG90LCBjb25zdCBCdWZmZXImLCBTaXplNjQg
b2Zmc2V0LCBzdGQ6Om9wdGlvbmFsPFNpemU2ND4pIGZpbmFsOworCisgICAgdm9pZCBkcmF3KFNp
emUzMiB2ZXJ0ZXhDb3VudCwgU2l6ZTMyIGluc3RhbmNlQ291bnQsCisgICAgICAgIFNpemUzMiBm
aXJzdFZlcnRleCwgU2l6ZTMyIGZpcnN0SW5zdGFuY2UpIGZpbmFsOworICAgIHZvaWQgZHJhd0lu
ZGV4ZWQoU2l6ZTMyIGluZGV4Q291bnQsIFNpemUzMiBpbnN0YW5jZUNvdW50LAorICAgICAgICBT
aXplMzIgZmlyc3RJbmRleCwKKyAgICAgICAgU2lnbmVkT2Zmc2V0MzIgYmFzZVZlcnRleCwKKyAg
ICAgICAgU2l6ZTMyIGZpcnN0SW5zdGFuY2UpIGZpbmFsOworCisgICAgdm9pZCBkcmF3SW5kaXJl
Y3QoY29uc3QgQnVmZmVyJiBpbmRpcmVjdEJ1ZmZlciwgU2l6ZTY0IGluZGlyZWN0T2Zmc2V0KSBm
aW5hbDsKKyAgICB2b2lkIGRyYXdJbmRleGVkSW5kaXJlY3QoY29uc3QgQnVmZmVyJiBpbmRpcmVj
dEJ1ZmZlciwgU2l6ZTY0IGluZGlyZWN0T2Zmc2V0KSBmaW5hbDsKKworICAgIHZvaWQgc2V0Qmlu
ZEdyb3VwKEluZGV4MzIsIGNvbnN0IEJpbmRHcm91cCYsCisgICAgICAgIHN0ZDo6b3B0aW9uYWw8
VmVjdG9yPEJ1ZmZlckR5bmFtaWNPZmZzZXQ+PiYmIGR5bmFtaWNPZmZzZXRzKSBmaW5hbDsKKwor
ICAgIHZvaWQgc2V0QmluZEdyb3VwKEluZGV4MzIsIGNvbnN0IEJpbmRHcm91cCYsCisgICAgICAg
IGNvbnN0IHVpbnQzMl90KiBkeW5hbWljT2Zmc2V0c0FycmF5QnVmZmVyLAorICAgICAgICBzaXpl
X3QgZHluYW1pY09mZnNldHNBcnJheUJ1ZmZlckxlbmd0aCwKKyAgICAgICAgU2l6ZTY0IGR5bmFt
aWNPZmZzZXRzRGF0YVN0YXJ0LAorICAgICAgICBTaXplMzIgZHluYW1pY09mZnNldHNEYXRhTGVu
Z3RoKSBmaW5hbDsKKworICAgIHZvaWQgcHVzaERlYnVnR3JvdXAoU3RyaW5nJiYgZ3JvdXBMYWJl
bCkgZmluYWw7CisgICAgdm9pZCBwb3BEZWJ1Z0dyb3VwKCkgZmluYWw7CisgICAgdm9pZCBpbnNl
cnREZWJ1Z01hcmtlcihTdHJpbmcmJiBtYXJrZXJMYWJlbCkgZmluYWw7CisKKyAgICBSZWY8UmVu
ZGVyQnVuZGxlPiBmaW5pc2goY29uc3QgUmVuZGVyQnVuZGxlRGVzY3JpcHRvciYpIGZpbmFsOwor
CisgICAgdm9pZCBzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYpIGZpbmFsOworCisgICAg
V0dQVVJlbmRlckJ1bmRsZUVuY29kZXIgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworfTsKKworfSAv
LyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVyQnVuZGxl
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dl
YkdQVVJlbmRlckJ1bmRsZUltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmViMThjZjljNDE4NGM0ZjRjZjhm
MTFhMjU2MzdiOTFjNjg3NzY5NGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Q
QUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlckJ1bmRsZUltcGwuY3BwCkBA
IC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2ViR1BVUmVuZGVyQnVuZGxlSW1wbC5oIgorCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVUV4
dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitSZW5kZXJCdW5k
bGVJbXBsOjpSZW5kZXJCdW5kbGVJbXBsKFdHUFVSZW5kZXJCdW5kbGUgcmVuZGVyQnVuZGxlKQor
ICAgIDogbV9iYWNraW5nKHJlbmRlckJ1bmRsZSkKK3sKK30KKworUmVuZGVyQnVuZGxlSW1wbDo6
flJlbmRlckJ1bmRsZUltcGwoKQoreworICAgIHdncHVSZW5kZXJCdW5kbGVSZWxlYXNlKG1fYmFj
a2luZyk7Cit9CisKK3ZvaWQgUmVuZGVyQnVuZGxlSW1wbDo6c2V0TGFiZWxJbnRlcm5hbChjb25z
dCBTdHJpbmcmIGxhYmVsKQoreworICAgIHdncHVSZW5kZXJCdW5kbGVTZXRMYWJlbChtX2JhY2tp
bmcsIGxhYmVsLnV0ZjgoKS5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8g
bmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJCdW5kbGVJbXBsLmggYi9Tb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlckJ1bmRsZUltcGwuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41YmRhMzZlMDgxYTc0YTMwZTlmYjRkNDZhYzI0MGMzNTcyMjY2NGRhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1w
bC9XZWJHUFVSZW5kZXJCdW5kbGVJbXBsLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVUmVuZGVyQnVuZGxlLmgiCisjaW5jbHVk
ZSA8V2ViR1BVL1dlYkdQVS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUg
eworCitjbGFzcyBSZW5kZXJCdW5kbGVJbXBsIGZpbmFsIDogcHVibGljIFJlbmRlckJ1bmRsZSB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZW5kZXJCdW5kbGVJbXBsPiBjcmVhdGUoV0dQVVJl
bmRlckJ1bmRsZSByZW5kZXJCdW5kbGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBSZW5kZXJCdW5kbGVJbXBsKHJlbmRlckJ1bmRsZSkpOworICAgIH0KKworICAgIHZpcnR1
YWwgflJlbmRlckJ1bmRsZUltcGwoKTsKKworICAgIFdHUFVSZW5kZXJCdW5kbGUgYmFja2luZygp
IGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgorICAgIFJlbmRlckJ1bmRs
ZUltcGwoV0dQVVJlbmRlckJ1bmRsZSk7CisKKyAgICBSZW5kZXJCdW5kbGVJbXBsKGNvbnN0IFJl
bmRlckJ1bmRsZUltcGwmKSA9IGRlbGV0ZTsKKyAgICBSZW5kZXJCdW5kbGVJbXBsKFJlbmRlckJ1
bmRsZUltcGwmJikgPSBkZWxldGU7CisgICAgUmVuZGVyQnVuZGxlSW1wbCYgb3BlcmF0b3I9KGNv
bnN0IFJlbmRlckJ1bmRsZUltcGwmKSA9IGRlbGV0ZTsKKyAgICBSZW5kZXJCdW5kbGVJbXBsJiBv
cGVyYXRvcj0oUmVuZGVyQnVuZGxlSW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIHZvaWQgc2V0TGFi
ZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5hbDsKKworICAgIFdHUFVSZW5kZXJCdW5kbGUg
bV9iYWNraW5nIHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5h
bWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhp
Y3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVyUGFzc0VuY29kZXJJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVyUGFzc0VuY29k
ZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MTVhODQzZWI4ZGRhM2FjNGZkZjYxM2RiY2Y1YTI4ZjEw
YTIzMGU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGlj
cy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJQYXNzRW5jb2RlckltcGwuY3BwCkBAIC0wLDAgKzEs
MTg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkdQ
VVJlbmRlclBhc3NFbmNvZGVySW1wbC5oIgorCisjaW5jbHVkZSAiV2ViR1BVQmluZEdyb3VwSW1w
bC5oIgorI2luY2x1ZGUgIldlYkdQVUJ1ZmZlckltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVDb252
ZXJ0VG9CYWNraW5nLmgiCisjaW5jbHVkZSAiV2ViR1BVUXVlcnlTZXRJbXBsLmgiCisjaW5jbHVk
ZSAiV2ViR1BVUmVuZGVyQnVuZGxlSW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVVJlbmRlclBpcGVs
aW5lSW1wbC5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFVFeHQuaD4KKworbmFtZXNwYWNlIFBB
TCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworUmVuZGVyUGFzc0VuY29kZXJJbXBsOjpSZW5kZXJQ
YXNzRW5jb2RlckltcGwoV0dQVVJlbmRlclBhc3NFbmNvZGVyIHJlbmRlclBhc3NFbmNvZGVyKQor
ICAgIDogbV9iYWNraW5nKHJlbmRlclBhc3NFbmNvZGVyKQoreworfQorCitSZW5kZXJQYXNzRW5j
b2RlckltcGw6On5SZW5kZXJQYXNzRW5jb2RlckltcGwoKQoreworICAgIHdncHVSZW5kZXJQYXNz
RW5jb2RlclJlbGVhc2UobV9iYWNraW5nKTsKK30KKwordm9pZCBSZW5kZXJQYXNzRW5jb2Rlcklt
cGw6OnNldFBpcGVsaW5lKGNvbnN0IFJlbmRlclBpcGVsaW5lJiByZW5kZXJQaXBlbGluZSkKK3sK
KyAgICB3Z3B1UmVuZGVyUGFzc0VuY29kZXJTZXRQaXBlbGluZShtX2JhY2tpbmcsIHN0YXRpY19j
YXN0PGNvbnN0IFJlbmRlclBpcGVsaW5lSW1wbCY+KHJlbmRlclBpcGVsaW5lKS5iYWNraW5nKCkp
OworfQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6c2V0SW5kZXhCdWZmZXIoY29uc3Qg
QnVmZmVyJiBidWZmZXIsIEluZGV4Rm9ybWF0IGluZGV4Rm9ybWF0LCBTaXplNjQgb2Zmc2V0LCBz
dGQ6Om9wdGlvbmFsPFNpemU2ND4gc2l6ZSkKK3sKKyAgICB3Z3B1UmVuZGVyUGFzc0VuY29kZXJT
ZXRJbmRleEJ1ZmZlcihtX2JhY2tpbmcsIHN0YXRpY19jYXN0PGNvbnN0IEJ1ZmZlckltcGwmPihi
dWZmZXIpLmJhY2tpbmcoKSwgY29udmVydFRvQmFja2luZyhpbmRleEZvcm1hdCksIG9mZnNldCwg
c2l6ZS52YWx1ZV9vcihXR1BVX1dIT0xFX1NJWkUpKTsKK30KKwordm9pZCBSZW5kZXJQYXNzRW5j
b2RlckltcGw6OnNldFZlcnRleEJ1ZmZlcihJbmRleDMyIHNsb3QsIGNvbnN0IEJ1ZmZlciYgYnVm
ZmVyLCBTaXplNjQgb2Zmc2V0LCBzdGQ6Om9wdGlvbmFsPFNpemU2ND4gc2l6ZSkKK3sKKyAgICB3
Z3B1UmVuZGVyUGFzc0VuY29kZXJTZXRWZXJ0ZXhCdWZmZXIobV9iYWNraW5nLCBzbG90LCBzdGF0
aWNfY2FzdDxjb25zdCBCdWZmZXJJbXBsJj4oYnVmZmVyKS5iYWNraW5nKCksIG9mZnNldCwgc2l6
ZS52YWx1ZV9vcihXR1BVX1dIT0xFX1NJWkUpKTsKK30KKwordm9pZCBSZW5kZXJQYXNzRW5jb2Rl
ckltcGw6OmRyYXcoU2l6ZTMyIHZlcnRleENvdW50LCBTaXplMzIgaW5zdGFuY2VDb3VudCwKKyAg
ICBTaXplMzIgZmlyc3RWZXJ0ZXgsIFNpemUzMiBmaXJzdEluc3RhbmNlKQoreworICAgIHdncHVS
ZW5kZXJQYXNzRW5jb2RlckRyYXcobV9iYWNraW5nLCB2ZXJ0ZXhDb3VudCwgaW5zdGFuY2VDb3Vu
dCwgZmlyc3RWZXJ0ZXgsIGZpcnN0SW5zdGFuY2UpOworfQorCit2b2lkIFJlbmRlclBhc3NFbmNv
ZGVySW1wbDo6ZHJhd0luZGV4ZWQoU2l6ZTMyIGluZGV4Q291bnQsIFNpemUzMiBpbnN0YW5jZUNv
dW50LAorICAgIFNpemUzMiBmaXJzdEluZGV4LAorICAgIFNpZ25lZE9mZnNldDMyIGJhc2VWZXJ0
ZXgsCisgICAgU2l6ZTMyIGZpcnN0SW5zdGFuY2UpCit7CisgICAgd2dwdVJlbmRlclBhc3NFbmNv
ZGVyRHJhd0luZGV4ZWQobV9iYWNraW5nLCBpbmRleENvdW50LCBpbnN0YW5jZUNvdW50LCBmaXJz
dEluZGV4LCBiYXNlVmVydGV4LCBmaXJzdEluc3RhbmNlKTsKK30KKwordm9pZCBSZW5kZXJQYXNz
RW5jb2RlckltcGw6OmRyYXdJbmRpcmVjdChjb25zdCBCdWZmZXImIGluZGlyZWN0QnVmZmVyLCBT
aXplNjQgaW5kaXJlY3RPZmZzZXQpCit7CisgICAgd2dwdVJlbmRlclBhc3NFbmNvZGVyRHJhd0lu
ZGlyZWN0KG1fYmFja2luZywgc3RhdGljX2Nhc3Q8Y29uc3QgQnVmZmVySW1wbCY+KGluZGlyZWN0
QnVmZmVyKS5iYWNraW5nKCksIGluZGlyZWN0T2Zmc2V0KTsKK30KKwordm9pZCBSZW5kZXJQYXNz
RW5jb2RlckltcGw6OmRyYXdJbmRleGVkSW5kaXJlY3QoY29uc3QgQnVmZmVyJiBpbmRpcmVjdEJ1
ZmZlciwgU2l6ZTY0IGluZGlyZWN0T2Zmc2V0KQoreworICAgIHdncHVSZW5kZXJQYXNzRW5jb2Rl
ckRyYXdJbmRleGVkSW5kaXJlY3QobV9iYWNraW5nLCBzdGF0aWNfY2FzdDxjb25zdCBCdWZmZXJJ
bXBsJj4oaW5kaXJlY3RCdWZmZXIpLmJhY2tpbmcoKSwgaW5kaXJlY3RPZmZzZXQpOworfQorCit2
b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6c2V0QmluZEdyb3VwKEluZGV4MzIgaW5kZXgsIGNv
bnN0IEJpbmRHcm91cCYgYmluZEdyb3VwLAorICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPEJ1ZmZl
ckR5bmFtaWNPZmZzZXQ+PiYmIGR5bmFtaWNPZmZzZXRzKQoreworICAgIGF1dG8gYmFja2luZ09m
ZnNldHMgPSBkeW5hbWljT2Zmc2V0cy52YWx1ZV9vcihWZWN0b3I8QnVmZmVyRHluYW1pY09mZnNl
dD4geyB9KTsKKyAgICB3Z3B1UmVuZGVyUGFzc0VuY29kZXJTZXRCaW5kR3JvdXAobV9iYWNraW5n
LCBpbmRleCwgc3RhdGljX2Nhc3Q8Y29uc3QgQmluZEdyb3VwSW1wbCY+KGJpbmRHcm91cCkuYmFj
a2luZygpLCBiYWNraW5nT2Zmc2V0cy5zaXplKCksIGJhY2tpbmdPZmZzZXRzLmRhdGEoKSk7Cit9
CisKK3ZvaWQgUmVuZGVyUGFzc0VuY29kZXJJbXBsOjpzZXRCaW5kR3JvdXAoSW5kZXgzMiBpbmRl
eCwgY29uc3QgQmluZEdyb3VwJiBiaW5kR3JvdXAsCisgICAgY29uc3QgdWludDMyX3QqIGR5bmFt
aWNPZmZzZXRzQXJyYXlCdWZmZXIsCisgICAgc2l6ZV90IGR5bmFtaWNPZmZzZXRzQXJyYXlCdWZm
ZXJMZW5ndGgsCisgICAgU2l6ZTY0IGR5bmFtaWNPZmZzZXRzRGF0YVN0YXJ0LAorICAgIFNpemUz
MiBkeW5hbWljT2Zmc2V0c0RhdGFMZW5ndGgpCit7CisgICAgVU5VU0VEX1BBUkFNKGR5bmFtaWNP
ZmZzZXRzQXJyYXlCdWZmZXJMZW5ndGgpOworICAgIC8vIEZJWE1FOiBVc2UgY2hlY2tlZCBhbGdl
YnJhLgorICAgIHdncHVSZW5kZXJQYXNzRW5jb2RlclNldEJpbmRHcm91cChtX2JhY2tpbmcsIGlu
ZGV4LCBzdGF0aWNfY2FzdDxjb25zdCBCaW5kR3JvdXBJbXBsJj4oYmluZEdyb3VwKS5iYWNraW5n
KCksIGR5bmFtaWNPZmZzZXRzRGF0YUxlbmd0aCwgZHluYW1pY09mZnNldHNBcnJheUJ1ZmZlciAr
IGR5bmFtaWNPZmZzZXRzRGF0YVN0YXJ0KTsKK30KKwordm9pZCBSZW5kZXJQYXNzRW5jb2Rlcklt
cGw6OnB1c2hEZWJ1Z0dyb3VwKFN0cmluZyYmIGdyb3VwTGFiZWwpCit7CisgICAgd2dwdVJlbmRl
clBhc3NFbmNvZGVyUHVzaERlYnVnR3JvdXAobV9iYWNraW5nLCBncm91cExhYmVsLnV0ZjgoKS5k
YXRhKCkpOworfQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6cG9wRGVidWdHcm91cCgp
Cit7CisgICAgd2dwdVJlbmRlclBhc3NFbmNvZGVyUG9wRGVidWdHcm91cChtX2JhY2tpbmcpOwor
fQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6aW5zZXJ0RGVidWdNYXJrZXIoU3RyaW5n
JiYgbWFya2VyTGFiZWwpCit7CisgICAgd2dwdVJlbmRlclBhc3NFbmNvZGVySW5zZXJ0RGVidWdN
YXJrZXIobV9iYWNraW5nLCBtYXJrZXJMYWJlbC51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBS
ZW5kZXJQYXNzRW5jb2RlckltcGw6OnNldFZpZXdwb3J0KGZsb2F0IHgsIGZsb2F0IHksCisgICAg
ZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwKKyAgICBmbG9hdCBtaW5EZXB0aCwgZmxvYXQgbWF4
RGVwdGgpCit7CisgICAgd2dwdVJlbmRlclBhc3NFbmNvZGVyU2V0Vmlld3BvcnQobV9iYWNraW5n
LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBtaW5EZXB0aCwgbWF4RGVwdGgpOworfQorCit2b2lkIFJl
bmRlclBhc3NFbmNvZGVySW1wbDo6c2V0U2Npc3NvclJlY3QoSW50ZWdlckNvb3JkaW5hdGUgeCwg
SW50ZWdlckNvb3JkaW5hdGUgeSwKKyAgICBJbnRlZ2VyQ29vcmRpbmF0ZSB3aWR0aCwgSW50ZWdl
ckNvb3JkaW5hdGUgaGVpZ2h0KQoreworICAgIHdncHVSZW5kZXJQYXNzRW5jb2RlclNldFNjaXNz
b3JSZWN0KG1fYmFja2luZywgeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgUmVuZGVy
UGFzc0VuY29kZXJJbXBsOjpzZXRCbGVuZENvbnN0YW50KENvbG9yIGNvbG9yKQoreworICAgIGF1
dG8gYmFja2luZ0NvbG9yID0gY29udmVydFRvQmFja2luZyhjb2xvcik7CisKKyAgICB3Z3B1UmVu
ZGVyUGFzc0VuY29kZXJTZXRCbGVuZENvbnN0YW50KG1fYmFja2luZywgJmJhY2tpbmdDb2xvcik7
Cit9CisKK3ZvaWQgUmVuZGVyUGFzc0VuY29kZXJJbXBsOjpzZXRTdGVuY2lsUmVmZXJlbmNlKFN0
ZW5jaWxWYWx1ZSBzdGVuY2lsVmFsdWUpCit7CisgICAgd2dwdVJlbmRlclBhc3NFbmNvZGVyU2V0
U3RlbmNpbFJlZmVyZW5jZShtX2JhY2tpbmcsIHN0ZW5jaWxWYWx1ZSk7Cit9CisKK3ZvaWQgUmVu
ZGVyUGFzc0VuY29kZXJJbXBsOjpiZWdpbk9jY2x1c2lvblF1ZXJ5KFNpemUzMiBxdWVyeUluZGV4
KQoreworICAgIHdncHVSZW5kZXJQYXNzRW5jb2RlckJlZ2luT2NjbHVzaW9uUXVlcnkobV9iYWNr
aW5nLCBxdWVyeUluZGV4KTsKK30KKwordm9pZCBSZW5kZXJQYXNzRW5jb2RlckltcGw6OmVuZE9j
Y2x1c2lvblF1ZXJ5KCkKK3sKKyAgICB3Z3B1UmVuZGVyUGFzc0VuY29kZXJFbmRPY2NsdXNpb25R
dWVyeShtX2JhY2tpbmcpOworfQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6YmVnaW5Q
aXBlbGluZVN0YXRpc3RpY3NRdWVyeShjb25zdCBRdWVyeVNldCYgcXVlcnlTZXQsIFNpemUzMiBx
dWVyeUluZGV4KQoreworICAgIHdncHVSZW5kZXJQYXNzRW5jb2RlckJlZ2luUGlwZWxpbmVTdGF0
aXN0aWNzUXVlcnkobV9iYWNraW5nLCBzdGF0aWNfY2FzdDxjb25zdCBRdWVyeVNldEltcGwmPihx
dWVyeVNldCkuYmFja2luZygpLCBxdWVyeUluZGV4KTsKK30KKwordm9pZCBSZW5kZXJQYXNzRW5j
b2RlckltcGw6OmVuZFBpcGVsaW5lU3RhdGlzdGljc1F1ZXJ5KCkKK3sKKyAgICB3Z3B1UmVuZGVy
UGFzc0VuY29kZXJFbmRQaXBlbGluZVN0YXRpc3RpY3NRdWVyeShtX2JhY2tpbmcpOworfQorCit2
b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6ZXhlY3V0ZUJ1bmRsZXMoVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8UmVuZGVyQnVuZGxlPj4mJiByZW5kZXJCdW5kbGVzKQoreworICAgIFZl
Y3RvcjxXR1BVUmVuZGVyQnVuZGxlPiBiYWNraW5nQnVuZGxlczsKKyAgICBiYWNraW5nQnVuZGxl
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHJlbmRlckJ1bmRsZXMuc2l6ZSgpKTsKKyAgICBmb3Ig
KGF1dG8gcmVuZGVyQnVuZGxlIDogcmVuZGVyQnVuZGxlcykKKyAgICAgICAgYmFja2luZ0J1bmRs
ZXMudW5jaGVja2VkQXBwZW5kKHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlckJ1bmRsZUltcGwmPihy
ZW5kZXJCdW5kbGUuZ2V0KCkpLmJhY2tpbmcoKSk7CisKKyAgICB3Z3B1UmVuZGVyUGFzc0VuY29k
ZXJFeGVjdXRlQnVuZGxlcyhtX2JhY2tpbmcsIGJhY2tpbmdCdW5kbGVzLnNpemUoKSwgYmFja2lu
Z0J1bmRsZXMuZGF0YSgpKTsKK30KKwordm9pZCBSZW5kZXJQYXNzRW5jb2RlckltcGw6OmVuZFBh
c3MoKQoreworICAgIHdncHVSZW5kZXJQYXNzRW5jb2RlckVuZFBhc3MobV9iYWNraW5nKTsKK30K
Kwordm9pZCBSZW5kZXJQYXNzRW5jb2RlckltcGw6OnNldExhYmVsSW50ZXJuYWwoY29uc3QgU3Ry
aW5nJiBsYWJlbCkKK3sKKyAgICB3Z3B1UmVuZGVyUGFzc0VuY29kZXJTZXRMYWJlbChtX2JhY2tp
bmcsIGxhYmVsLnV0ZjgoKS5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8g
bmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJQYXNzRW5jb2RlckltcGwuaCBiL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVyUGFzc0VuY29k
ZXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOWJhZjFhZThjOTc1N2ZlMTIzOTEwOGU4ODQzMWM0OTY4NWE1
ZTcxMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3Mv
V2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVyUGFzc0VuY29kZXJJbXBsLmgKQEAgLTAsMCArMSwxMDYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYkdQVVJlbmRlclBh
c3NFbmNvZGVyLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorCituYW1lc3BhY2UgUEFM
IHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBSZW5kZXJQYXNzRW5jb2RlckltcGwgZmlu
YWwgOiBwdWJsaWMgUmVuZGVyUGFzc0VuY29kZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8
UmVuZGVyUGFzc0VuY29kZXJJbXBsPiBjcmVhdGUoV0dQVVJlbmRlclBhc3NFbmNvZGVyIHJlbmRl
clBhc3NFbmNvZGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVuZGVy
UGFzc0VuY29kZXJJbXBsKHJlbmRlclBhc3NFbmNvZGVyKSk7CisgICAgfQorCisgICAgflJlbmRl
clBhc3NFbmNvZGVySW1wbCgpOworCisgICAgV0dQVVJlbmRlclBhc3NFbmNvZGVyIGJhY2tpbmco
KSBjb25zdCB7IHJldHVybiBtX2JhY2tpbmc7IH0KKworcHJpdmF0ZToKKyAgICBSZW5kZXJQYXNz
RW5jb2RlckltcGwoV0dQVVJlbmRlclBhc3NFbmNvZGVyKTsKKworICAgIFJlbmRlclBhc3NFbmNv
ZGVySW1wbChjb25zdCBSZW5kZXJQYXNzRW5jb2RlckltcGwmKSA9IGRlbGV0ZTsKKyAgICBSZW5k
ZXJQYXNzRW5jb2RlckltcGwoUmVuZGVyUGFzc0VuY29kZXJJbXBsJiYpID0gZGVsZXRlOworICAg
IFJlbmRlclBhc3NFbmNvZGVySW1wbCYgb3BlcmF0b3I9KGNvbnN0IFJlbmRlclBhc3NFbmNvZGVy
SW1wbCYpID0gZGVsZXRlOworICAgIFJlbmRlclBhc3NFbmNvZGVySW1wbCYgb3BlcmF0b3I9KFJl
bmRlclBhc3NFbmNvZGVySW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIHZvaWQgc2V0UGlwZWxpbmUo
Y29uc3QgUmVuZGVyUGlwZWxpbmUmKSBmaW5hbDsKKworICAgIHZvaWQgc2V0SW5kZXhCdWZmZXIo
Y29uc3QgQnVmZmVyJiwgSW5kZXhGb3JtYXQsIFNpemU2NCBvZmZzZXQsIHN0ZDo6b3B0aW9uYWw8
U2l6ZTY0PikgZmluYWw7CisgICAgdm9pZCBzZXRWZXJ0ZXhCdWZmZXIoSW5kZXgzMiBzbG90LCBj
b25zdCBCdWZmZXImLCBTaXplNjQgb2Zmc2V0LCBzdGQ6Om9wdGlvbmFsPFNpemU2ND4pIGZpbmFs
OworCisgICAgdm9pZCBkcmF3KFNpemUzMiB2ZXJ0ZXhDb3VudCwgU2l6ZTMyIGluc3RhbmNlQ291
bnQsCisgICAgICAgIFNpemUzMiBmaXJzdFZlcnRleCwgU2l6ZTMyIGZpcnN0SW5zdGFuY2UpIGZp
bmFsOworICAgIHZvaWQgZHJhd0luZGV4ZWQoU2l6ZTMyIGluZGV4Q291bnQsIFNpemUzMiBpbnN0
YW5jZUNvdW50LAorICAgICAgICBTaXplMzIgZmlyc3RJbmRleCwKKyAgICAgICAgU2lnbmVkT2Zm
c2V0MzIgYmFzZVZlcnRleCwKKyAgICAgICAgU2l6ZTMyIGZpcnN0SW5zdGFuY2UpIGZpbmFsOwor
CisgICAgdm9pZCBkcmF3SW5kaXJlY3QoY29uc3QgQnVmZmVyJiBpbmRpcmVjdEJ1ZmZlciwgU2l6
ZTY0IGluZGlyZWN0T2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdJbmRleGVkSW5kaXJlY3Qo
Y29uc3QgQnVmZmVyJiBpbmRpcmVjdEJ1ZmZlciwgU2l6ZTY0IGluZGlyZWN0T2Zmc2V0KSBmaW5h
bDsKKworICAgIHZvaWQgc2V0QmluZEdyb3VwKEluZGV4MzIsIGNvbnN0IEJpbmRHcm91cCYsCisg
ICAgICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPEJ1ZmZlckR5bmFtaWNPZmZzZXQ+PiYmIGR5bmFt
aWNPZmZzZXRzKSBmaW5hbDsKKworICAgIHZvaWQgc2V0QmluZEdyb3VwKEluZGV4MzIsIGNvbnN0
IEJpbmRHcm91cCYsCisgICAgICAgIGNvbnN0IHVpbnQzMl90KiBkeW5hbWljT2Zmc2V0c0FycmF5
QnVmZmVyLAorICAgICAgICBzaXplX3QgZHluYW1pY09mZnNldHNBcnJheUJ1ZmZlckxlbmd0aCwK
KyAgICAgICAgU2l6ZTY0IGR5bmFtaWNPZmZzZXRzRGF0YVN0YXJ0LAorICAgICAgICBTaXplMzIg
ZHluYW1pY09mZnNldHNEYXRhTGVuZ3RoKSBmaW5hbDsKKworICAgIHZvaWQgcHVzaERlYnVnR3Jv
dXAoU3RyaW5nJiYgZ3JvdXBMYWJlbCkgZmluYWw7CisgICAgdm9pZCBwb3BEZWJ1Z0dyb3VwKCkg
ZmluYWw7CisgICAgdm9pZCBpbnNlcnREZWJ1Z01hcmtlcihTdHJpbmcmJiBtYXJrZXJMYWJlbCkg
ZmluYWw7CisKKyAgICB2b2lkIHNldFZpZXdwb3J0KGZsb2F0IHgsIGZsb2F0IHksCisgICAgICAg
IGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsCisgICAgICAgIGZsb2F0IG1pbkRlcHRoLCBmbG9h
dCBtYXhEZXB0aCkgZmluYWw7CisKKyAgICB2b2lkIHNldFNjaXNzb3JSZWN0KEludGVnZXJDb29y
ZGluYXRlIHgsIEludGVnZXJDb29yZGluYXRlIHksCisgICAgICAgIEludGVnZXJDb29yZGluYXRl
IHdpZHRoLCBJbnRlZ2VyQ29vcmRpbmF0ZSBoZWlnaHQpIGZpbmFsOworCisgICAgdm9pZCBzZXRC
bGVuZENvbnN0YW50KENvbG9yKSBmaW5hbDsKKyAgICB2b2lkIHNldFN0ZW5jaWxSZWZlcmVuY2Uo
U3RlbmNpbFZhbHVlKSBmaW5hbDsKKworICAgIHZvaWQgYmVnaW5PY2NsdXNpb25RdWVyeShTaXpl
MzIgcXVlcnlJbmRleCkgZmluYWw7CisgICAgdm9pZCBlbmRPY2NsdXNpb25RdWVyeSgpIGZpbmFs
OworCisgICAgdm9pZCBiZWdpblBpcGVsaW5lU3RhdGlzdGljc1F1ZXJ5KGNvbnN0IFF1ZXJ5U2V0
JiwgU2l6ZTMyIHF1ZXJ5SW5kZXgpIGZpbmFsOworICAgIHZvaWQgZW5kUGlwZWxpbmVTdGF0aXN0
aWNzUXVlcnkoKSBmaW5hbDsKKworICAgIHZvaWQgZXhlY3V0ZUJ1bmRsZXMoVmVjdG9yPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8UmVuZGVyQnVuZGxlPj4mJikgZmluYWw7CisgICAgdm9pZCBlbmRQ
YXNzKCkgZmluYWw7CisKKyAgICB2b2lkIHNldExhYmVsSW50ZXJuYWwoY29uc3QgU3RyaW5nJikg
ZmluYWw7CisKKyAgICBXR1BVUmVuZGVyUGFzc0VuY29kZXIgbV9iYWNraW5nIHsgbnVsbHB0ciB9
OworfTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BV
UmVuZGVyUGlwZWxpbmVJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3Mv
V2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVyUGlwZWxpbmVJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYzBk
ZDNlYTEyYTg5OTljNDJlNjNhYmIzNjIwMzJmYzNjMTdlMTc5Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJQ
aXBlbGluZUltcGwuY3BwCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViR1BVUmVuZGVyUGlwZWxpbmVJbXBsLmgiCisKKyNpbmNs
dWRlICJXZWJHUFVCaW5kR3JvdXBMYXlvdXRJbXBsLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQ
VUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitSZW5kZXJQ
aXBlbGluZUltcGw6OlJlbmRlclBpcGVsaW5lSW1wbChXR1BVUmVuZGVyUGlwZWxpbmUgcmVuZGVy
UGlwZWxpbmUpCisgICAgOiBtX2JhY2tpbmcocmVuZGVyUGlwZWxpbmUpCit7Cit9CisKK1JlbmRl
clBpcGVsaW5lSW1wbDo6flJlbmRlclBpcGVsaW5lSW1wbCgpCit7CisgICAgd2dwdVJlbmRlclBp
cGVsaW5lUmVsZWFzZShtX2JhY2tpbmcpOworfQorCitSZWY8QmluZEdyb3VwTGF5b3V0PiBSZW5k
ZXJQaXBlbGluZUltcGw6OmdldEJpbmRHcm91cExheW91dCh1aW50MzJfdCBpbmRleCkKK3sKKyAg
ICByZXR1cm4gQmluZEdyb3VwTGF5b3V0SW1wbDo6Y3JlYXRlKHdncHVSZW5kZXJQaXBlbGluZUdl
dEJpbmRHcm91cExheW91dChtX2JhY2tpbmcsIGluZGV4KSk7Cit9CisKK3ZvaWQgUmVuZGVyUGlw
ZWxpbmVJbXBsOjpzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYgbGFiZWwpCit7CisgICAg
d2dwdVJlbmRlclBpcGVsaW5lU2V0TGFiZWwobV9iYWNraW5nLCBsYWJlbC51dGY4KCkuZGF0YSgp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BV
UmVuZGVyUGlwZWxpbmVJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dl
YkdQVS9JbXBsL1dlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjllYWU1N2E2
OWZiMTI1N2QzNjcyMjA1Y2Y3OTE5NmE5YTVhMGJmZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlclBpcGVs
aW5lSW1wbC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIldlYkdQVVJlbmRlclBpcGVsaW5lLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQ
VS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBSZW5k
ZXJQaXBlbGluZUltcGwgZmluYWwgOiBwdWJsaWMgUmVuZGVyUGlwZWxpbmUgeworcHVibGljOgor
ICAgIHN0YXRpYyBSZWY8UmVuZGVyUGlwZWxpbmVJbXBsPiBjcmVhdGUoV0dQVVJlbmRlclBpcGVs
aW5lIHJlbmRlclBpcGVsaW5lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
UmVuZGVyUGlwZWxpbmVJbXBsKHJlbmRlclBpcGVsaW5lKSk7CisgICAgfQorCisgICAgdmlydHVh
bCB+UmVuZGVyUGlwZWxpbmVJbXBsKCk7CisKKyAgICBXR1BVUmVuZGVyUGlwZWxpbmUgYmFja2lu
ZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgorICAgIFJlbmRlclBp
cGVsaW5lSW1wbChXR1BVUmVuZGVyUGlwZWxpbmUpOworCisgICAgUmVuZGVyUGlwZWxpbmVJbXBs
KGNvbnN0IFJlbmRlclBpcGVsaW5lSW1wbCYpID0gZGVsZXRlOworICAgIFJlbmRlclBpcGVsaW5l
SW1wbChSZW5kZXJQaXBlbGluZUltcGwmJikgPSBkZWxldGU7CisgICAgUmVuZGVyUGlwZWxpbmVJ
bXBsJiBvcGVyYXRvcj0oY29uc3QgUmVuZGVyUGlwZWxpbmVJbXBsJikgPSBkZWxldGU7CisgICAg
UmVuZGVyUGlwZWxpbmVJbXBsJiBvcGVyYXRvcj0oUmVuZGVyUGlwZWxpbmVJbXBsJiYpID0gZGVs
ZXRlOworCisgICAgUmVmPEJpbmRHcm91cExheW91dD4gZ2V0QmluZEdyb3VwTGF5b3V0KHVpbnQz
Ml90IGluZGV4KSBmaW5hbDsKKworICAgIHZvaWQgc2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJp
bmcmKSBmaW5hbDsKKworICAgIFdHUFVSZW5kZXJQaXBlbGluZSBtX2JhY2tpbmcgeyBudWxscHRy
IH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJH
UFVTYW1wbGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQ
VS9JbXBsL1dlYkdQVVNhbXBsZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MmNhYTczYTU3ZjAwMzI4
YjkyNmZjMDFjMDA5MDJkZWMxYzA4YTRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVTYW1wbGVySW1wbC5jcHAKQEAg
LTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJHUFVTYW1wbGVySW1wbC5oIgorCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVUV4dC5oPgor
CituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitTYW1wbGVySW1wbDo6U2Ft
cGxlckltcGwoV0dQVVNhbXBsZXIgc2FtcGxlcikKKyAgICA6IG1fYmFja2luZyhzYW1wbGVyKQor
eworfQorCitTYW1wbGVySW1wbDo6flNhbXBsZXJJbXBsKCkKK3sKKyAgICB3Z3B1U2FtcGxlclJl
bGVhc2UobV9iYWNraW5nKTsKK30KKwordm9pZCBTYW1wbGVySW1wbDo6c2V0TGFiZWxJbnRlcm5h
bChjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAgIHdncHVTYW1wbGVyU2V0TGFiZWwobV9iYWNr
aW5nLCBsYWJlbC51dGY4KCkuZGF0YSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8v
IG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3Jh
cGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVU2FtcGxlckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVU2FtcGxlckltcGwuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40NTJkYzQ3MjA4NzRmNGY1NmJkZTRhNWY4M2NjM2FiZmY1YzJiYmVhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVT
YW1wbGVySW1wbC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIldlYkdQVVNhbXBsZXIuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVLmg+
CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK2NsYXNzIFNhbXBsZXJJ
bXBsIGZpbmFsIDogcHVibGljIFNhbXBsZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8U2Ft
cGxlckltcGw+IGNyZWF0ZShXR1BVU2FtcGxlciBzYW1wbGVyKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU2FtcGxlckltcGwoc2FtcGxlcikpOworICAgIH0KKworICAgIHZp
cnR1YWwgflNhbXBsZXJJbXBsKCk7CisKKyAgICBXR1BVU2FtcGxlciBiYWNraW5nKCkgY29uc3Qg
eyByZXR1cm4gbV9iYWNraW5nOyB9CisKK3ByaXZhdGU6CisgICAgU2FtcGxlckltcGwoV0dQVVNh
bXBsZXIpOworCisgICAgU2FtcGxlckltcGwoY29uc3QgU2FtcGxlckltcGwmKSA9IGRlbGV0ZTsK
KyAgICBTYW1wbGVySW1wbChTYW1wbGVySW1wbCYmKSA9IGRlbGV0ZTsKKyAgICBTYW1wbGVySW1w
bCYgb3BlcmF0b3I9KGNvbnN0IFNhbXBsZXJJbXBsJikgPSBkZWxldGU7CisgICAgU2FtcGxlcklt
cGwmIG9wZXJhdG9yPShTYW1wbGVySW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIHZvaWQgc2V0TGFi
ZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5hbDsKKworICAgIFdHUFVTYW1wbGVyIG1fYmFj
a2luZyB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3Bh
Y2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dl
YkdQVS9JbXBsL1dlYkdQVVNoYWRlck1vZHVsZUltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvUEFM
L3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVTaGFkZXJNb2R1bGVJbXBsLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45MWI1Njk1NTQwZTdkNGVmZTRhZDBjZTIxOTQxMzc5NjZkNDJlMDViCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9X
ZWJHUFVTaGFkZXJNb2R1bGVJbXBsLmNwcApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkdQVVNoYWRlck1vZHVsZUltcGwuaCIK
KworI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFVFeHQuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1l
c3BhY2UgV2ViR1BVIHsKKworU2hhZGVyTW9kdWxlSW1wbDo6U2hhZGVyTW9kdWxlSW1wbChXR1BV
U2hhZGVyTW9kdWxlIHNoYWRlck1vZHVsZSkKKyAgICA6IG1fYmFja2luZyhzaGFkZXJNb2R1bGUp
Cit7Cit9CisKK1NoYWRlck1vZHVsZUltcGw6On5TaGFkZXJNb2R1bGVJbXBsKCkKK3sKKyAgICB3
Z3B1U2hhZGVyTW9kdWxlUmVsZWFzZShtX2JhY2tpbmcpOworfQorCit2b2lkIFNoYWRlck1vZHVs
ZUltcGw6OmNvbXBpbGF0aW9uSW5mbyhzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVmPENvbXBpbGF0aW9u
SW5mbz4mJik+JiYpCit7Cit9CisKK3ZvaWQgU2hhZGVyTW9kdWxlSW1wbDo6c2V0TGFiZWxJbnRl
cm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAgIHdncHVTaGFkZXJNb2R1bGVTZXRMYWJl
bChtX2JhY2tpbmcsIGxhYmVsLnV0ZjgoKS5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQ
QUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFM
L3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVTaGFkZXJNb2R1bGVJbXBsLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVNoYWRlck1vZHVs
ZUltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hY2VmMzYzOTFkMDJlNDBiZGRlNmU5NGYwOTEzOTFmYWU0MWNh
MzNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9X
ZWJHUFUvSW1wbC9XZWJHUFVTaGFkZXJNb2R1bGVJbXBsLmgKQEAgLTAsMCArMSw2MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVU2hhZGVyTW9kdWxlLmgi
CisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFj
ZSBXZWJHUFUgeworCitjbGFzcyBTaGFkZXJNb2R1bGVJbXBsIGZpbmFsIDogcHVibGljIFNoYWRl
ck1vZHVsZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTaGFkZXJNb2R1bGVJbXBsPiBjcmVh
dGUoV0dQVVNoYWRlck1vZHVsZSBzaGFkZXJNb2R1bGUpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBTaGFkZXJNb2R1bGVJbXBsKHNoYWRlck1vZHVsZSkpOworICAgIH0KKwor
ICAgIHZpcnR1YWwgflNoYWRlck1vZHVsZUltcGwoKTsKKworICAgIFdHUFVTaGFkZXJNb2R1bGUg
YmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgorICAgIFNo
YWRlck1vZHVsZUltcGwoV0dQVVNoYWRlck1vZHVsZSk7CisKKyAgICBTaGFkZXJNb2R1bGVJbXBs
KGNvbnN0IFNoYWRlck1vZHVsZUltcGwmKSA9IGRlbGV0ZTsKKyAgICBTaGFkZXJNb2R1bGVJbXBs
KFNoYWRlck1vZHVsZUltcGwmJikgPSBkZWxldGU7CisgICAgU2hhZGVyTW9kdWxlSW1wbCYgb3Bl
cmF0b3I9KGNvbnN0IFNoYWRlck1vZHVsZUltcGwmKSA9IGRlbGV0ZTsKKyAgICBTaGFkZXJNb2R1
bGVJbXBsJiBvcGVyYXRvcj0oU2hhZGVyTW9kdWxlSW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIHZv
aWQgY29tcGlsYXRpb25JbmZvKHN0ZDo6ZnVuY3Rpb248dm9pZChSZWY8Q29tcGlsYXRpb25JbmZv
PiYmKT4mJikgZmluYWw7CisKKyAgICB2b2lkIHNldExhYmVsSW50ZXJuYWwoY29uc3QgU3RyaW5n
JikgZmluYWw7CisKKyAgICBXR1BVU2hhZGVyTW9kdWxlIG1fYmFja2luZyB7IG51bGxwdHIgfTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVRl
eHR1cmVJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0lt
cGwvV2ViR1BVVGV4dHVyZUltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiNmY4MjFkOTQzYmQ2NDRiN2I3
OTAyMTY4MWYxNjA3NDNhNTA1ODEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Q
QUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVRleHR1cmVJbXBsLmNwcApAQCAtMCww
ICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
YkdQVVRleHR1cmVJbXBsLmgiCisKKyNpbmNsdWRlICJXZWJHUFVDb252ZXJ0VG9CYWNraW5nLmgi
CisjaW5jbHVkZSAiV2ViR1BVVGV4dHVyZVZpZXcuaCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJl
Vmlld0Rlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJlVmlld0ltcGwuaCIKKyNp
bmNsdWRlIDxXZWJHUFUvV2ViR1BVRXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNl
IFdlYkdQVSB7CisKK1RleHR1cmVJbXBsOjpUZXh0dXJlSW1wbChXR1BVVGV4dHVyZSB0ZXh0dXJl
LCBUZXh0dXJlRm9ybWF0IGZvcm1hdCwgVGV4dHVyZURpbWVuc2lvbiBkaW1lbnNpb24pCisgICAg
OiBtX2JhY2tpbmcodGV4dHVyZSkKKyAgICAsIG1fZm9ybWF0KGZvcm1hdCkKKyAgICAsIG1fZGlt
ZW5zaW9uKGRpbWVuc2lvbikKK3sKK30KKworVGV4dHVyZUltcGw6On5UZXh0dXJlSW1wbCgpCit7
CisgICAgd2dwdVRleHR1cmVSZWxlYXNlKG1fYmFja2luZyk7Cit9CisKK1JlZjxUZXh0dXJlVmll
dz4gVGV4dHVyZUltcGw6OmNyZWF0ZVZpZXcoY29uc3Qgc3RkOjpvcHRpb25hbDxUZXh0dXJlVmll
d0Rlc2NyaXB0b3I+JiBkZXNjcmlwdG9yKSBjb25zdAoreworICAgIENTdHJpbmcgbGFiZWwgPSBk
ZXNjcmlwdG9yID8gZGVzY3JpcHRvci0+bGFiZWwudXRmOCgpIDogQ1N0cmluZygiIik7CisKKyAg
ICBXR1BVVGV4dHVyZVZpZXdEZXNjcmlwdG9yIGJhY2tpbmdEZXNjcmlwdG9yIHsKKyAgICAgICAg
bnVsbHB0ciwKKyAgICAgICAgbGFiZWwuZGF0YSgpLAorICAgICAgICBkZXNjcmlwdG9yICYmIGRl
c2NyaXB0b3ItPmZvcm1hdCA/IGNvbnZlcnRUb0JhY2tpbmcoKmRlc2NyaXB0b3ItPmZvcm1hdCkg
OiBjb252ZXJ0VG9CYWNraW5nKG1fZm9ybWF0KSwKKyAgICAgICAgKFsmXSAoKSAtPiBXR1BVVGV4
dHVyZVZpZXdEaW1lbnNpb24geworICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IgJiYgZGVzY3Jp
cHRvci0+ZGltZW5zaW9uKQorICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9CYWNraW5n
KCpkZXNjcmlwdG9yLT5kaW1lbnNpb24pOworICAgICAgICAgICAgc3dpdGNoIChtX2RpbWVuc2lv
bikgeworICAgICAgICAgICAgY2FzZSBUZXh0dXJlRGltZW5zaW9uOjpfMWQ6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlVmlld0RpbWVuc2lvbl8xRDsKKyAgICAgICAgICAgIGNh
c2UgVGV4dHVyZURpbWVuc2lvbjo6XzJkOgorICAgICAgICAgICAgICAgIHJldHVybiBXR1BVVGV4
dHVyZVZpZXdEaW1lbnNpb25fMkQ7CisgICAgICAgICAgICBjYXNlIFRleHR1cmVEaW1lbnNpb246
Ol8zZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVWaWV3RGltZW5zaW9uXzJE
OworICAgICAgICAgICAgfQorICAgICAgICB9KSgpLAorICAgICAgICBkZXNjcmlwdG9yID8gZGVz
Y3JpcHRvci0+YmFzZU1pcExldmVsIDogMCwKKyAgICAgICAgZGVzY3JpcHRvciAmJiBkZXNjcmlw
dG9yLT5taXBMZXZlbENvdW50ID8gKmRlc2NyaXB0b3ItPm1pcExldmVsQ291bnQgOiBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oV0dQVV9NSVBfTEVWRUxfQ09VTlRfVU5ERUZJTkVEKSwKKyAgICAgICAg
ZGVzY3JpcHRvciA/IGRlc2NyaXB0b3ItPmJhc2VBcnJheUxheWVyIDogMCwKKyAgICAgICAgZGVz
Y3JpcHRvciAmJiBkZXNjcmlwdG9yLT5hcnJheUxheWVyQ291bnQgPyAqZGVzY3JpcHRvci0+YXJy
YXlMYXllckNvdW50IDogc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFdHUFVfQVJSQVlfTEFZRVJfQ09V
TlRfVU5ERUZJTkVEKSwKKyAgICAgICAgZGVzY3JpcHRvciA/IGNvbnZlcnRUb0JhY2tpbmcoZGVz
Y3JpcHRvci0+YXNwZWN0KSA6IFdHUFVUZXh0dXJlQXNwZWN0X0FsbCwKKyAgICB9OworCisgICAg
cmV0dXJuIFRleHR1cmVWaWV3SW1wbDo6Y3JlYXRlKHdncHVUZXh0dXJlQ3JlYXRlVmlldyhtX2Jh
Y2tpbmcsICZiYWNraW5nRGVzY3JpcHRvcikpOworfQorCit2b2lkIFRleHR1cmVJbXBsOjpkZXN0
cm95KCkKK3sKKyAgICB3Z3B1VGV4dHVyZURlc3Ryb3kobV9iYWNraW5nKTsKK30KKwordm9pZCBU
ZXh0dXJlSW1wbDo6c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAg
IHdncHVUZXh0dXJlU2V0TGFiZWwobV9iYWNraW5nLCBsYWJlbC51dGY4KCkuZGF0YSgpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVVGV4dHVy
ZUltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2Vi
R1BVVGV4dHVyZUltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNmU4ZDBiOGMwNDcyYTNkOGUyNjg5ZmZjYmJj
M2M0MjdiZWFmMWU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9n
cmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVUZXh0dXJlSW1wbC5oCkBAIC0wLDAgKzEsNjggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYkdQVUludGVncmFsVHlw
ZXMuaCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJlLmgiCisjaW5jbHVkZSAiV2ViR1BVVGV4dHVy
ZURpbWVuc2lvbi5oIgorI2luY2x1ZGUgIldlYkdQVVRleHR1cmVGb3JtYXQuaCIKKyNpbmNsdWRl
IDxXZWJHUFUvV2ViR1BVLmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7
CisKK2NsYXNzIFRleHR1cmVJbXBsIGZpbmFsIDogcHVibGljIFRleHR1cmUgeworcHVibGljOgor
ICAgIHN0YXRpYyBSZWY8VGV4dHVyZUltcGw+IGNyZWF0ZShXR1BVVGV4dHVyZSB0ZXh0dXJlLCBU
ZXh0dXJlRm9ybWF0IGZvcm1hdCwgVGV4dHVyZURpbWVuc2lvbiBkaW1lbnNpb24pCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUZXh0dXJlSW1wbCh0ZXh0dXJlLCBmb3JtYXQs
IGRpbWVuc2lvbikpOworICAgIH0KKworICAgIHZpcnR1YWwgflRleHR1cmVJbXBsKCk7CisKKyAg
ICBXR1BVVGV4dHVyZSBiYWNraW5nKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nOyB9CisKK3By
aXZhdGU6CisgICAgVGV4dHVyZUltcGwoV0dQVVRleHR1cmUsIFRleHR1cmVGb3JtYXQsIFRleHR1
cmVEaW1lbnNpb24pOworCisgICAgVGV4dHVyZUltcGwoY29uc3QgVGV4dHVyZUltcGwmKSA9IGRl
bGV0ZTsKKyAgICBUZXh0dXJlSW1wbChUZXh0dXJlSW1wbCYmKSA9IGRlbGV0ZTsKKyAgICBUZXh0
dXJlSW1wbCYgb3BlcmF0b3I9KGNvbnN0IFRleHR1cmVJbXBsJikgPSBkZWxldGU7CisgICAgVGV4
dHVyZUltcGwmIG9wZXJhdG9yPShUZXh0dXJlSW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIFJlZjxU
ZXh0dXJlVmlldz4gY3JlYXRlVmlldyhjb25zdCBzdGQ6Om9wdGlvbmFsPFRleHR1cmVWaWV3RGVz
Y3JpcHRvcj4mKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgZGVzdHJveSgpIGZpbmFsOworCisg
ICAgdm9pZCBzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYpIGZpbmFsOworCisgICAgV0dQ
VVRleHR1cmUgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworICAgIFRleHR1cmVGb3JtYXQgbV9mb3Jt
YXQgeyBUZXh0dXJlRm9ybWF0OjpSZ2JhOHVub3JtIH07CisgICAgVGV4dHVyZURpbWVuc2lvbiBt
X2RpbWVuc2lvbiB7IFRleHR1cmVEaW1lbnNpb246Ol8yZCB9OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVVGV4dHVy
ZVZpZXdJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OTk5MDI4Mzc1ZWY1NTQxMGNjOGE0MTE4MzYyZDVk
NTZlZmMxMDUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVUZXh0dXJlVmlld0ltcGwuY3BwCkBAIC0wLDAgKzEsNTAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViR1BVVGV4
dHVyZVZpZXdJbXBsLmgiCisKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVRXh0Lmg+CisKK25hbWVz
cGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK1RleHR1cmVWaWV3SW1wbDo6VGV4dHVy
ZVZpZXdJbXBsKFdHUFVUZXh0dXJlVmlldyB0ZXh0dXJlVmlldykKKyAgICA6IG1fYmFja2luZyh0
ZXh0dXJlVmlldykKK3sKK30KKworVGV4dHVyZVZpZXdJbXBsOjp+VGV4dHVyZVZpZXdJbXBsKCkK
K3sKKyAgICB3Z3B1VGV4dHVyZVZpZXdSZWxlYXNlKG1fYmFja2luZyk7Cit9CisKK3ZvaWQgVGV4
dHVyZVZpZXdJbXBsOjpzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYgbGFiZWwpCit7Cisg
ICAgd2dwdVRleHR1cmVWaWV3U2V0TGFiZWwobV9iYWNraW5nLCBsYWJlbC51dGY4KCkuZGF0YSgp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BV
VGV4dHVyZVZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQ
VS9JbXBsL1dlYkdQVVRleHR1cmVWaWV3SW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY1NDQ3ZjI2NzFmMGUw
NmUzNGMzY2JhZGYwMzY1MGI1YTI2NDljZDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVRleHR1cmVWaWV3SW1wbC5o
CkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IldlYkdQVVRleHR1cmVWaWV3LmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorCituYW1l
c3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBUZXh0dXJlVmlld0ltcGwg
ZmluYWwgOiBwdWJsaWMgVGV4dHVyZVZpZXcgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8VGV4
dHVyZVZpZXdJbXBsPiBjcmVhdGUoV0dQVVRleHR1cmVWaWV3IHRleHR1cmVWaWV3KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVGV4dHVyZVZpZXdJbXBsKHRleHR1cmVWaWV3
KSk7CisgICAgfQorCisgICAgdmlydHVhbCB+VGV4dHVyZVZpZXdJbXBsKCk7CisKKyAgICBXR1BV
VGV4dHVyZVZpZXcgYmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2
YXRlOgorICAgIFRleHR1cmVWaWV3SW1wbChXR1BVVGV4dHVyZVZpZXcpOworCisgICAgVGV4dHVy
ZVZpZXdJbXBsKGNvbnN0IFRleHR1cmVWaWV3SW1wbCYpID0gZGVsZXRlOworICAgIFRleHR1cmVW
aWV3SW1wbChUZXh0dXJlVmlld0ltcGwmJikgPSBkZWxldGU7CisgICAgVGV4dHVyZVZpZXdJbXBs
JiBvcGVyYXRvcj0oY29uc3QgVGV4dHVyZVZpZXdJbXBsJikgPSBkZWxldGU7CisgICAgVGV4dHVy
ZVZpZXdJbXBsJiBvcGVyYXRvcj0oVGV4dHVyZVZpZXdJbXBsJiYpID0gZGVsZXRlOworCisgICAg
dm9pZCBzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYpIGZpbmFsOworCisgICAgV0dQVVRl
eHR1cmVWaWV3IG1fYmFja2luZyB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFBB
TAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOTk4MTBlYjgyMDNjY2RhNmI1YzllMzgxNjE0
YjYyYmU2ZWYyYTFjYy4uYzRiODAwY2UzMGQyOTQzYzVkODRjYzJiMzczNzY5Zjg0NDgzOTYzNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtNjIzLDYgKzYyMyw3IEBACiAJCTFDMEFBMTZEMjE5NDBEQzgwMDg5NjgyOSAvKiBTdHls
ZUNvbG9yU2NoZW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQzBBQTE2QTIxOTQwREM3MDA4OTY4MjkgLyogU3R5bGVDb2xvclNjaGVtZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFDMTJBQzJCMUVF
Nzc4QUUwMDc5RTBBMCAvKiBGb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzEyQUMyOTFFRTc3OEFF
MDA3OUUwQTAgLyogRm9udEZhbWlseVNwZWNpZmljYXRpb25Db3JlVGV4dC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFDMThEQTU5MTgxQUY2QTUw
MEM0RUYyMiAvKiBUZXh0UGFpbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUMxOERBNTcxODFBRjZBNTAwQzRFRjIyIC8qIFRleHRQYWludGVyLmgg
Ki87IH07CisJCTFDMTlFNkM1Mjc0MDY2Q0MwMDRCMTdCMCAvKiBXZWJHUFUuZnJhbWV3b3JrIGlu
IEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMxOUU2QzMy
NzQwNjZDQzAwNEIxN0IwIC8qIFdlYkdQVS5mcmFtZXdvcmsgKi87IH07CiAJCTFDMjFFNTdEMTgz
RUQxRkYwMDFDMjg5RCAvKiBJT1N1cmZhY2VQb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzIxRTU3QjE4M0VEMUZGMDAxQzI4OUQgLyogSU9TdXJm
YWNlUG9vbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTFDMjRFRUE1MUM3MjlDRTQwMDgwRjhGQyAvKiBGb250RmFjZVNldC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMyNEVFQTMxQzcyOUNFNDAwODBG
OEZDIC8qIEZvbnRGYWNlU2V0LmggKi87IH07CiAJCTFDMjRFRUE5MUM3MkE3QjQwMDgwRjhGQyAv
KiBKU0ZvbnRGYWNlU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQzI0RUVBNzFDNzJBN0I0MDA4MEY4RkMgLyogSlNGb250RmFjZVNldC5oICovOyB9
OwpAQCAtNzAzMiw2ICs3MDMzLDcgQEAKIAkJMUMxMkFDMkMxRUU3Nzk5NTAwNzlFMEEwIC8qIEZv
bnREZXNjcmlwdGlvbkNvY29hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnREZXNjcmlwdGlv
bkNvY29hLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUMxOERBNTYxODFBRjZB
NTAwQzRFRjIyIC8qIFRleHRQYWludGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFRleHRQYWludGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUMxOERBNTcxODFBRjZBNTAwQzRFRjIyIC8qIFRleHRQYWludGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRQYWludGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTFDMTlFNkMzMjc0MDY2Q0MwMDRCMTdCMCAvKiBXZWJHUFUuZnJhbWV3b3JrICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFt
ZXdvcms7IG5hbWUgPSBXZWJHUFUuZnJhbWV3b3JrOyBwYXRoID0gV2ViR1BVLmZyYW1ld29yazsg
c291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJMUMyMUU1N0ExODNFRDFGRjAw
MUMyODlEIC8qIElPU3VyZmFjZVBvb2wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSU9TdXJmYWNlUG9vbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFDMjFFNTdCMTgzRUQxRkYwMDFDMjg5RCAvKiBJT1N1cmZhY2VQb29sLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElPU3VyZmFjZVBvb2wuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUMyNEVFQTExQzcyOUIzMjAwODBGOEZDIC8qIEZvbnRGYWNlU2V0LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBGb250RmFjZVNldC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xNzc2Miw2ICsxNzc2NCw3IEBACiAJCQkJMzc5OTE5QjIxMjAwREU1MDAw
RUEwNDFDIC8qIGxpYnouZHlsaWIgaW4gRnJhbWV3b3JrcyAqLywKIAkJCQlBODhBRDUyRjA5NTI0
QjkyMDAxREQxOTYgLyogUXVhcnR6Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKIAkJ
CQk1RkUxRDI5MjE3OEZEMUYzMDAxQUEzQzMgLyogU2VjdXJpdHkuZnJhbWV3b3JrIGluIEZyYW1l
d29ya3MgKi8sCisJCQkJMUMxOUU2QzUyNzQwNjZDQzAwNEIxN0IwIC8qIFdlYkdQVS5mcmFtZXdv
cmsgaW4gRnJhbWV3b3JrcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE4NDE1LDYgKzE4NDE4LDcgQEAKIAkJCQk1NzRGNTVF
MjIwNEYzQ0JGMDAyOTQ4QzYgLyogTG9jYWxBdXRoZW50aWNhdGlvbi5mcmFtZXdvcmsgKi8sCiAJ
CQkJQTg1RDdBMkYwODc5RUJBOTAwNkE5MTcyIC8qIFF1YXJ0ekNvcmUuZnJhbWV3b3JrICovLAog
CQkJCTVGRTFEMjkxMTc4RkQxRjMwMDFBQTNDMyAvKiBTZWN1cml0eS5mcmFtZXdvcmsgKi8sCisJ
CQkJMUMxOUU2QzMyNzQwNjZDQzAwNEIxN0IwIC8qIFdlYkdQVS5mcmFtZXdvcmsgKi8sCiAJCQkp
OwogCQkJbmFtZSA9IEZyYW1ld29ya3M7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwo=
</data>
<flag name="commit-queue"
          id="469192"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444222</attachid>
            <date>2021-11-15 01:36:00 -0800</date>
            <delta_ts>2021-11-15 09:04:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233106-20211115013559.patch</filename>
            <type>text/plain</type>
            <size>254655</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1Nzk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGUwOWY5NTk5ZDBmNWM4
N2EzNWIyNTRiZjUyNzNhZTZjMzZmZTI4YS4uZmI5OWIyYmQyYzkyNjE2YzMyNzQ5MGJjMmU2MmY1
MWVkMzMxYjA2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIxLTExLTE1ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkdQVV0g
W0NvY29hXSBDb25uZWN0IFdlYkNvcmUgJiBQQUwgdG8gV2ViR1BVLmZyYW1ld29yaworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzMTA2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGluayB3aXRoIFdlYkdQ
VS5mcmFtZXdvcmsuIFRoaXMgY2FuJ3QgYmUgbGFuZGVkIHlldCwgYmVjYXVzZSB3ZSBoYXZlbid0
IGZpbmlzaGVkCisgICAgICAgIGNvbmZpZ3VyaW5nIEFwcGxlJ3MgaW50ZXJuYWwgYnVpbGQgc3lz
dGVtIHlldC4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGVyZSBpcyBubyBiZWhh
dmlvciBjaGFuZ2UgKHlldCkuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisKIDIwMjEtMTEtMTQgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBs
ZS5jb20+CiAKICAgICAgICAgRmluZ2VycyBkb3duIG9uIHRoZSB0cmFja3BhZCBzaG91bGQgc3Rv
cCBhbiBhbmltYXRlZCBzY3JvbGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCmluZGV4IDNlZThmNWFkNGI3MWFi
NjhkYjllZDI2MTMwNTU5YzljOWI1NmZiOGIuLjE4MTI5OTM5MTlhZGYyOGE2YjQxZTc0YmY5YzAz
MGZlMGM4N2E2MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2NCBAQAorMjAyMS0x
MS0xNSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAg
IFtXZWJHUFVdIFtDb2NvYV0gQ29ubmVjdCBXZWJDb3JlICYgUEFMIHRvIFdlYkdQVS5mcmFtZXdv
cmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzEw
NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
YWRkcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBXZWJHUFUncyB2aXJ0dWFsIGludGVyZmFjZXMgb24g
dG9wIG9mIFdlYkdQVS5mcmFtZXdvcmsuCisgICAgICAgIFRoYXQgZnJhbWV3b3JrJ3MgaGVhZGVy
cyBhbG1vc3QgZXhhY3RseSBtYXRjaCB0aGUgV2ViR1BVIEFQSSwgc28gdGhlIGNvbm5lY3Rpb25z
IGFyZQorICAgICAgICBtb3N0bHkgbWVjaGFuaWNhbC4gVGhlcmUncyBqdXN0IGEgYnVuY2ggb2Yg
bWFyc2hhbGxpbmcgY29kZSB0byBjb252ZXJ0IGJldHdlZW4KKyAgICAgICAgZGVzY3JpcHRvciBh
bmQgc3RydWN0cyBmcm9tIFdlYkNvcmUncyBpbnRlcmZhY2UgdG8gV2ViR1BVLmZyYW1ld29yaydz
CisgICAgICAgIGRlc2NyaXB0b3JzL3N0cnVjdHMuCisKKyAgICAgICAgVGhpcyB1c2VzIHRoZSBz
YW1lICJjb252ZXJ0VG9CYWNraW5nIiBjb252ZW50aW9uLCB3aGVyZSBmdW5jdGlvbnMgdGhhdCBj
b252ZXJ0IGZyb20gdGhlCisgICAgICAgIGhpZ2hlci1sZXZlbCBXZWJDb3JlIHR5cGVzIHRvIHRo
ZSBsb3dlci1sZXZlbCBXZWJHUFUuZnJhbWV3b3JrIHR5cGVzIGFyZSBuYW1lZAorICAgICAgICAi
Y29udmVydFRvQmFja2luZygpIi4gVW5mb3J0dW5hdGVseSwgdGhlIFdlYkdQVSBBUEkgdGFrZXMg
bWFueSBvZiB0aGVzZSBzdHJ1Y3RzIGJ5CisgICAgICAgIG5vbi1jb25zdCByZWZlcmVuY2UsIGFu
ZCB0aGUgc3RydWN0cyBhcmUgbmVzdGVkIGJ5IG5vbi1jb25zdCByZWZlcmVuY2UsIHdoaWNoIG1l
YW5zIEkKKyAgICAgICAgY2FuJ3QganVzdCBoYXZlIHNpbXBsZSAxLWluLTEtb3V0IGNvbnZlcnRl
ciBmdW5jdGlvbnMgZm9yIGV2ZXJ5IHN0cnVjdCwgc2luY2UgdGhlCisgICAgICAgIGlubmVyIHN0
cnVjdHMgaGF2ZSB0byBiZSByZWZlcmVuY2VkIGJ5LXJlZmVyZW5jZSBhbmQgdGhlcmVmb3JlIGhh
dmUgdG8gYmUgaW4tc2NvcGUuIFRoaXMKKyAgICAgICAgbWVhbnMgdGhhdCB0aGUgc2ltcGxlIGVu
dW0gYW5kIGZsYWdzIHR5cGVzIHVzZSBjb252ZXJ0VG9CYWNraW5nKCksIGJ1dCBtb3N0IG9mIHRo
ZQorICAgICAgICBzdHJ1Y3RzIGhhdmUgdG8gYmUgY29udmVydGVkIGF0IHRoZWlyIHVzZSBzaXRl
LiBMdWNraWx5LCBhbG1vc3QgYWxsIG9mIHRoZXNlIHN0cnVjdHMKKyAgICAgICAgb25seSBoYXZl
IGEgc2luZ2xlIHVzZSBzaXRlLCBzbyB0aGVyZSBpc24ndCBtdWNoIGR1cGxpY2F0aW9uLgorCisg
ICAgICAgIEZvciBub3csIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgQ29jb2Etb25seSwgYmVjYXVz
ZSBpbiBvcmRlciBmb3IgdGhlc2UgY2FsbHMgdG8KKyAgICAgICAgV2ViR1BVLmZyYW1ld29yayB0
byBiZSBsZWdhbCwgV2ViQ29yZSBoYXMgdG8gbGluayB3aXRoIGFuIGltcGxlbWVudGF0aW9uIG9m
IHRob3NlCisgICAgICAgIGZ1bmN0aW9ucy4gVGhlIENvY29hIHBvcnRzIGFyZSB0aGUgb25seSBv
bmVzIHdoaWNoIGFjdHVhbGx5IGhhdmUgYW4gaW1wbGVtZW50YXRpb24gb2YKKyAgICAgICAgdGhv
c2UgZnVuY3Rpb25zLCBzbyB0aG9zZSBhcmUgdGhlIG9ubHkgcG9ydHMgd2hpY2ggY2FuIGFjdHVh
bGx5IGNvbXBpbGUgdGhpcyBjb2RlLiBJZgorICAgICAgICB0aGUgb3RoZXIgcG9ydHMgd2FudCB0
byBsaW5rIHdpdGggRGF3biBvciBXR1BVLCB0aGlzIGNvZGUgc2hvdWxkIGJlIChtb3N0bHkpIHVz
YWJsZQorICAgICAgICBvdXQtb2YtdGhlLWJveCBmb3IgdGhlbS4gSSBzYXkgIm1vc3RseSIgYmVj
YXVzZSB0aGUgaGVhZGVyIHRoYXQncyBzaGFyZWQgYmV0d2VlbiBEYXduLAorICAgICAgICBXR1BV
LCBhbmQgV2ViR1BVLmZyYW1ld29yayBpc24ndCBmaW5hbGl6ZWQgeWV0LiBBcyBzdWNoLCB0aGlz
IGltcGxlbWVudGF0aW9uIHJlbGllcyBvbgorICAgICAgICBmdW5jdGlvbnMgZnJvbSBXZWJHUFVF
eHQuaCwgd2hpY2ggaXMgYW4gYWRkaXRpb25hbCBoZWFkZXIgKHRoYXQgb25seSBleGlzdHMgaW4K
KyAgICAgICAgV2ViR1BVLmZyYW1ld29yaykgdGhhdCBhZGRzIHRoZSBtaXNzaW5nIHBpZWNlcy4K
KworICAgICAgICAqIFBBTC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBh
bC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVBZGFwdGVySW1wbC5jcHA6IEFkZGVkLgorICAg
ICAgICAoUEFMOjpXZWJHUFU6OmFkYXB0ZXJOYW1lKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpz
dXBwb3J0ZWRGZWF0dXJlcyk6CisgICAgICAgIChQQUw6OldlYkdQVTo6c3VwcG9ydGVkTGltaXRz
KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjppc0ZhbGxiYWNrQWRhcHRlcik6CisgICAgICAgIChQ
QUw6OldlYkdQVTo6QWRhcHRlckltcGw6OkFkYXB0ZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2Vi
R1BVOjpBZGFwdGVySW1wbDo6fkFkYXB0ZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpy
ZXF1ZXN0RGV2aWNlQ2FsbGJhY2spOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkFkYXB0ZXJJbXBs
OjpyZXF1ZXN0RGV2aWNlKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpBZGFwdGVySW1wbDo6cmVx
dWVzdERldmljZUNhbGxiYWNrKToKKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwv
V2ViR1BVQWRhcHRlckltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQ
VS9JbXBsL1dlYkdQVUJpbmRHcm91cEltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBBTDo6V2Vi
R1BVOjpCaW5kR3JvdXBJbXBsOjpCaW5kR3JvdXBJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BV
OjpCaW5kR3JvdXBJbXBsOjp+QmluZEdyb3VwSW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6
QmluZEdyb3VwSW1wbDo6c2V0TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNz
L1dlYkdQVS9JbXBsL1dlYkdQVUJpbmRHcm91cEltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFs
L2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJpbmRHcm91cExheW91dEltcGwuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFBBTDo6V2ViR1BVOjpCaW5kR3JvdXBMYXlvdXRJbXBsOjpCaW5kR3JvdXBM
YXlvdXRJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpCaW5kR3JvdXBMYXlvdXRJbXBsOjp+
QmluZEdyb3VwTGF5b3V0SW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6QmluZEdyb3VwTGF5
b3V0SW1wbDo6c2V0TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQ
VS9JbXBsL1dlYkdQVUJpbmRHcm91cExheW91dEltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFs
L2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJ1ZmZlckltcGwuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFBBTDo6V2ViR1BVOjpCdWZmZXJJbXBsOjpCdWZmZXJJbXBsKToKKyAgICAgICAgKFBBTDo6
V2ViR1BVOjpCdWZmZXJJbXBsOjp+QnVmZmVySW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6
bWFwQ2FsbGJhY2spOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkJ1ZmZlckltcGw6Om1hcEFzeW5j
KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpCdWZmZXJJbXBsOjptYXBDYWxsYmFjayk6CisgICAg
ICAgIChQQUw6OldlYkdQVTo6QnVmZmVySW1wbDo6Z2V0TWFwcGVkUmFuZ2UpOgorICAgICAgICAo
UEFMOjpXZWJHUFU6OkJ1ZmZlckltcGw6OnVubWFwKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpC
dWZmZXJJbXBsOjpkZXN0cm95KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpCdWZmZXJJbXBsOjpz
ZXRMYWJlbEludGVybmFsKToKKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2Vi
R1BVQnVmZmVySW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0lt
cGwvV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBBTDo6V2Vi
R1BVOjpDb21tYW5kQnVmZmVySW1wbDo6Q29tbWFuZEJ1ZmZlckltcGwpOgorICAgICAgICAoUEFM
OjpXZWJHUFU6OkNvbW1hbmRCdWZmZXJJbXBsOjp+Q29tbWFuZEJ1ZmZlckltcGwpOgorICAgICAg
ICAoUEFMOjpXZWJHUFU6OkNvbW1hbmRCdWZmZXJJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAg
ICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwu
aDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbW1h
bmRFbmNvZGVySW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbW1hbmRF
bmNvZGVySW1wbDo6Q29tbWFuZEVuY29kZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpD
b21tYW5kRW5jb2RlckltcGw6On5Db21tYW5kRW5jb2RlckltcGwpOgorICAgICAgICAoUEFMOjpX
ZWJHUFU6OkNvbW1hbmRFbmNvZGVySW1wbDo6YmVnaW5SZW5kZXJQYXNzKToKKyAgICAgICAgKFBB
TDo6V2ViR1BVOjpDb21tYW5kRW5jb2RlckltcGw6OmJlZ2luQ29tcHV0ZVBhc3MpOgorICAgICAg
ICAoUEFMOjpXZWJHUFU6OkNvbW1hbmRFbmNvZGVySW1wbDo6Y29weUJ1ZmZlclRvQnVmZmVyKToK
KyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21tYW5kRW5jb2RlckltcGw6OmNvcHlCdWZmZXJUb1Rl
eHR1cmUpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbW1hbmRFbmNvZGVySW1wbDo6Y29weVRl
eHR1cmVUb0J1ZmZlcik6CisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tbWFuZEVuY29kZXJJbXBs
Ojpjb3B5VGV4dHVyZVRvVGV4dHVyZSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tbWFuZEVu
Y29kZXJJbXBsOjpmaWxsQnVmZmVyKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21tYW5kRW5j
b2RlckltcGw6OnB1c2hEZWJ1Z0dyb3VwKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21tYW5k
RW5jb2RlckltcGw6OnBvcERlYnVnR3JvdXApOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbW1h
bmRFbmNvZGVySW1wbDo6aW5zZXJ0RGVidWdNYXJrZXIpOgorICAgICAgICAoUEFMOjpXZWJHUFU6
OkNvbW1hbmRFbmNvZGVySW1wbDo6d3JpdGVUaW1lc3RhbXApOgorICAgICAgICAoUEFMOjpXZWJH
UFU6OkNvbW1hbmRFbmNvZGVySW1wbDo6cmVzb2x2ZVF1ZXJ5U2V0KToKKyAgICAgICAgKFBBTDo6
V2ViR1BVOjpDb21tYW5kRW5jb2RlckltcGw6OmZpbmlzaCk6CisgICAgICAgIChQQUw6OldlYkdQ
VTo6Q29tbWFuZEVuY29kZXJJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAgICAgICAgKiBwYWwv
Z3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tbWFuZEVuY29kZXJJbXBsLmg6IEFkZGVkLgor
ICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb21wdXRlUGFzc0VuY29k
ZXJJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tcHV0ZVBhc3NFbmNv
ZGVySW1wbDo6Q29tcHV0ZVBhc3NFbmNvZGVySW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6
Q29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6fkNvbXB1dGVQYXNzRW5jb2RlckltcGwpOgorICAgICAg
ICAoUEFMOjpXZWJHUFU6OkNvbXB1dGVQYXNzRW5jb2RlckltcGw6OnNldFBpcGVsaW5lKToKKyAg
ICAgICAgKFBBTDo6V2ViR1BVOjpDb21wdXRlUGFzc0VuY29kZXJJbXBsOjpkaXNwYXRjaCk6Cisg
ICAgICAgIChQQUw6OldlYkdQVTo6Q29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6ZGlzcGF0Y2hJbmRp
cmVjdCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6YmVn
aW5QaXBlbGluZVN0YXRpc3RpY3NRdWVyeSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6Q29tcHV0
ZVBhc3NFbmNvZGVySW1wbDo6ZW5kUGlwZWxpbmVTdGF0aXN0aWNzUXVlcnkpOgorICAgICAgICAo
UEFMOjpXZWJHUFU6OkNvbXB1dGVQYXNzRW5jb2RlckltcGw6OmVuZFBhc3MpOgorICAgICAgICAo
UEFMOjpXZWJHUFU6OkNvbXB1dGVQYXNzRW5jb2RlckltcGw6OnNldEJpbmRHcm91cCk6CisgICAg
ICAgIChQQUw6OldlYkdQVTo6Q29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6cHVzaERlYnVnR3JvdXAp
OgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbXB1dGVQYXNzRW5jb2RlckltcGw6OnBvcERlYnVn
R3JvdXApOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbXB1dGVQYXNzRW5jb2RlckltcGw6Omlu
c2VydERlYnVnTWFya2VyKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21wdXRlUGFzc0VuY29k
ZXJJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BV
L0ltcGwvV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKiBw
YWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tcHV0ZVBpcGVsaW5lSW1wbC5jcHA6IEFk
ZGVkLgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbXB1dGVQaXBlbGluZUltcGw6OkNvbXB1dGVQ
aXBlbGluZUltcGwpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNvbXB1dGVQaXBlbGluZUltcGw6
On5Db21wdXRlUGlwZWxpbmVJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpDb21wdXRlUGlw
ZWxpbmVJbXBsOjpnZXRCaW5kR3JvdXBMYXlvdXQpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkNv
bXB1dGVQaXBlbGluZUltcGw6OnNldExhYmVsSW50ZXJuYWwpOgorICAgICAgICAqIHBhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBsLmg6IEFkZGVkLgorICAg
ICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb252ZXJ0VG9CYWNraW5nLmNw
cDogQWRkZWQuCisgICAgICAgIChQQUw6OldlYkdQVTo6Y29udmVydFRvQmFja2luZyk6CisgICAg
ICAgIChQQUw6OldlYkdQVTo6Y29udmVydEJ1ZmZlclVzYWdlRmxhZ3NUb0JhY2tpbmcpOgorICAg
ICAgICAoUEFMOjpXZWJHUFU6OmNvbnZlcnRDb2xvcldyaXRlRmxhZ3NUb0JhY2tpbmcpOgorICAg
ICAgICAoUEFMOjpXZWJHUFU6OmNvbnZlcnRNYXBNb2RlRmxhZ3NUb0JhY2tpbmcpOgorICAgICAg
ICAoUEFMOjpXZWJHUFU6OmNvbnZlcnRTaGFkZXJTdGFnZUZsYWdzVG9CYWNraW5nKToKKyAgICAg
ICAgKFBBTDo6V2ViR1BVOjpjb252ZXJ0VGV4dHVyZVVzYWdlRmxhZ3NUb0JhY2tpbmcpOgorICAg
ICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb252ZXJ0VG9CYWNraW5nLmg6
IEFkZGVkLgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVEZXZpY2VJ
bXBsLmNwcDogQWRkZWQuCisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6RGV2aWNl
SW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6fkRldmljZUltcGwpOgor
ICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmljZUltcGw6OmRlc3Ryb3kpOgorICAgICAgICAoUEFM
OjpXZWJHUFU6OkRldmljZUltcGw6OmNyZWF0ZUJ1ZmZlcik6CisgICAgICAgIChQQUw6OldlYkdQ
VTo6RGV2aWNlSW1wbDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2
aWNlSW1wbDo6Y3JlYXRlU2FtcGxlcik6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1w
bDo6aW1wb3J0RXh0ZXJuYWxUZXh0dXJlKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpEZXZpY2VJ
bXBsOjpjcmVhdGVCaW5kR3JvdXBMYXlvdXQpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmlj
ZUltcGw6OmNyZWF0ZVBpcGVsaW5lTGF5b3V0KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpEZXZp
Y2VJbXBsOjpjcmVhdGVCaW5kR3JvdXApOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmljZUlt
cGw6OmNyZWF0ZVNoYWRlck1vZHVsZSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6Y29udmVydFRv
QmFja2luZyk6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6Y3JlYXRlQ29tcHV0
ZVBpcGVsaW5lKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpEZXZpY2VJbXBsOjpjcmVhdGVSZW5k
ZXJQaXBlbGluZSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6Y3JlYXRlQ29tcHV0ZVBpcGVsaW5l
QXN5bmNDYWxsYmFjayk6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6Y3JlYXRl
Q29tcHV0ZVBpcGVsaW5lQXN5bmMpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmljZUltcGw6
OmNyZWF0ZUNvbXB1dGVQaXBlbGluZUFzeW5jQ2FsbGJhY2spOgorICAgICAgICAoUEFMOjpXZWJH
UFU6OmNyZWF0ZVJlbmRlclBpcGVsaW5lQXN5bmNDYWxsYmFjayk6CisgICAgICAgIChQQUw6Oldl
YkdQVTo6RGV2aWNlSW1wbDo6Y3JlYXRlUmVuZGVyUGlwZWxpbmVBc3luYyk6CisgICAgICAgIChQ
QUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6Y3JlYXRlUmVuZGVyUGlwZWxpbmVBc3luY0NhbGxiYWNr
KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpEZXZpY2VJbXBsOjpjcmVhdGVDb21tYW5kRW5jb2Rl
cik6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6Y3JlYXRlUmVuZGVyQnVuZGxl
RW5jb2Rlcik6CisgICAgICAgIChQQUw6OldlYkdQVTo6RGV2aWNlSW1wbDo6Y3JlYXRlUXVlcnlT
ZXQpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkRldmljZUltcGw6OnB1c2hFcnJvclNjb3BlKToK
KyAgICAgICAgKFBBTDo6V2ViR1BVOjpwb3BFcnJvclNjb3BlQ2FsbGJhY2spOgorICAgICAgICAo
UEFMOjpXZWJHUFU6OkRldmljZUltcGw6OnBvcEVycm9yU2NvcGUpOgorICAgICAgICAoUEFMOjpX
ZWJHUFU6OkRldmljZUltcGw6OnBvcEVycm9yU2NvcGVDYWxsYmFjayk6CisgICAgICAgIChQQUw6
OldlYkdQVTo6RGV2aWNlSW1wbDo6c2V0TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dy
YXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVURldmljZUltcGwuaDogQWRkZWQuCisgICAgICAgICog
cGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUV4dGVybmFsVGV4dHVyZUltcGwuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFBBTDo6V2ViR1BVOjpFeHRlcm5hbFRleHR1cmVJbXBsOjpFeHRlcm5h
bFRleHR1cmVJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpFeHRlcm5hbFRleHR1cmVJbXBs
Ojp+RXh0ZXJuYWxUZXh0dXJlSW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6RXh0ZXJuYWxU
ZXh0dXJlSW1wbDo6c2V0TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dl
YkdQVS9JbXBsL1dlYkdQVUV4dGVybmFsVGV4dHVyZUltcGwuaDogQWRkZWQuCisgICAgICAgICog
cGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFBBTDo6V2ViR1BVOjpHUFVJbXBsOjpHUFVJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpH
UFVJbXBsOjp+R1BVSW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6cmVxdWVzdEFkYXB0ZXJD
YWxsYmFjayk6CisgICAgICAgIChQQUw6OldlYkdQVTo6R1BVSW1wbDo6cmVxdWVzdEFkYXB0ZXIp
OgorICAgICAgICAoUEFMOjpXZWJHUFU6OkdQVUltcGw6OnJlcXVlc3RBZGFwdGVyQ2FsbGJhY2sp
OgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVJbXBsLmg6IEFkZGVk
LgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVQaXBlbGluZUxheW91
dEltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBBTDo6V2ViR1BVOjpQaXBlbGluZUxheW91dElt
cGw6OlBpcGVsaW5lTGF5b3V0SW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UGlwZWxpbmVM
YXlvdXRJbXBsOjp+UGlwZWxpbmVMYXlvdXRJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpQ
aXBlbGluZUxheW91dEltcGw6OnNldExhYmVsSW50ZXJuYWwpOgorICAgICAgICAqIHBhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVQaXBlbGluZUxheW91dEltcGwuaDogQWRkZWQuCisgICAg
ICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVF1ZXJ5U2V0SW1wbC5jcHA6IEFk
ZGVkLgorICAgICAgICAoUEFMOjpXZWJHUFU6OlF1ZXJ5U2V0SW1wbDo6UXVlcnlTZXRJbXBsKToK
KyAgICAgICAgKFBBTDo6V2ViR1BVOjpRdWVyeVNldEltcGw6On5RdWVyeVNldEltcGwpOgorICAg
ICAgICAoUEFMOjpXZWJHUFU6OlF1ZXJ5U2V0SW1wbDo6ZGVzdHJveSk6CisgICAgICAgIChQQUw6
OldlYkdQVTo6UXVlcnlTZXRJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAgICAgICAgKiBwYWwv
Z3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUXVlcnlTZXRJbXBsLmg6IEFkZGVkLgorICAgICAg
ICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVRdWV1ZUltcGwuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFBBTDo6V2ViR1BVOjpRdWV1ZUltcGw6OlF1ZXVlSW1wbCk6CisgICAgICAgIChQ
QUw6OldlYkdQVTo6UXVldWVJbXBsOjp+UXVldWVJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BV
OjpRdWV1ZUltcGw6OnN1Ym1pdCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6b25TdWJtaXR0ZWRX
b3JrRG9uZUNhbGxiYWNrKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpRdWV1ZUltcGw6Om9uU3Vi
bWl0dGVkV29ya0RvbmUpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlF1ZXVlSW1wbDo6b25TdWJt
aXR0ZWRXb3JrRG9uZUNhbGxiYWNrKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpRdWV1ZUltcGw6
OndyaXRlQnVmZmVyKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpRdWV1ZUltcGw6OndyaXRlVGV4
dHVyZSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UXVldWVJbXBsOjpjb3B5RXh0ZXJuYWxJbWFn
ZVRvVGV4dHVyZSk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UXVldWVJbXBsOjpzZXRMYWJlbElu
dGVybmFsKToKKyAgICAgICAgKiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUXVldWVJ
bXBsLmg6IEFkZGVkLgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVS
ZW5kZXJCdW5kbGVFbmNvZGVySW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoUEFMOjpXZWJHUFU6
OlJlbmRlckJ1bmRsZUVuY29kZXJJbXBsOjpSZW5kZXJCdW5kbGVFbmNvZGVySW1wbCk6CisgICAg
ICAgIChQQUw6OldlYkdQVTo6UmVuZGVyQnVuZGxlRW5jb2RlckltcGw6On5SZW5kZXJCdW5kbGVF
bmNvZGVySW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UmVuZGVyQnVuZGxlRW5jb2Rlcklt
cGw6OnNldFBpcGVsaW5lKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVFbmNv
ZGVySW1wbDo6c2V0SW5kZXhCdWZmZXIpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlckJ1
bmRsZUVuY29kZXJJbXBsOjpzZXRWZXJ0ZXhCdWZmZXIpOgorICAgICAgICAoUEFMOjpXZWJHUFU6
OlJlbmRlckJ1bmRsZUVuY29kZXJJbXBsOjpkcmF3KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpS
ZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6ZHJhd0luZGV4ZWQpOgorICAgICAgICAoUEFMOjpXZWJH
UFU6OlJlbmRlckJ1bmRsZUVuY29kZXJJbXBsOjpkcmF3SW5kaXJlY3QpOgorICAgICAgICAoUEFM
OjpXZWJHUFU6OlJlbmRlckJ1bmRsZUVuY29kZXJJbXBsOjpkcmF3SW5kZXhlZEluZGlyZWN0KToK
KyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6c2V0QmluZEdy
b3VwKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVFbmNvZGVySW1wbDo6cHVz
aERlYnVnR3JvdXApOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlckJ1bmRsZUVuY29kZXJJ
bXBsOjpwb3BEZWJ1Z0dyb3VwKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVF
bmNvZGVySW1wbDo6aW5zZXJ0RGVidWdNYXJrZXIpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJl
bmRlckJ1bmRsZUVuY29kZXJJbXBsOjpmaW5pc2gpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJl
bmRlckJ1bmRsZUVuY29kZXJJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAgICAgICAgKiBwYWwv
Z3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVyQnVuZGxlRW5jb2RlckltcGwuaDogQWRk
ZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlckJ1bmRs
ZUltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVJbXBs
OjpSZW5kZXJCdW5kbGVJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJCdW5kbGVJ
bXBsOjp+UmVuZGVyQnVuZGxlSW1wbCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UmVuZGVyQnVu
ZGxlSW1wbDo6c2V0TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQ
VS9JbXBsL1dlYkdQVVJlbmRlckJ1bmRsZUltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dy
YXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlclBhc3NFbmNvZGVySW1wbC5jcHA6IEFkZGVk
LgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6UmVuZGVyUGFz
c0VuY29kZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2Rlcklt
cGw6On5SZW5kZXJQYXNzRW5jb2RlckltcGwpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRl
clBhc3NFbmNvZGVySW1wbDo6c2V0UGlwZWxpbmUpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJl
bmRlclBhc3NFbmNvZGVySW1wbDo6c2V0SW5kZXhCdWZmZXIpOgorICAgICAgICAoUEFMOjpXZWJH
UFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6c2V0VmVydGV4QnVmZmVyKToKKyAgICAgICAgKFBB
TDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6OmRyYXcpOgorICAgICAgICAoUEFMOjpX
ZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6ZHJhd0luZGV4ZWQpOgorICAgICAgICAoUEFM
OjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6ZHJhd0luZGlyZWN0KToKKyAgICAgICAg
KFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6OmRyYXdJbmRleGVkSW5kaXJlY3Qp
OgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6c2V0QmluZEdy
b3VwKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6OnB1c2hE
ZWJ1Z0dyb3VwKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6
OnBvcERlYnVnR3JvdXApOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVy
SW1wbDo6aW5zZXJ0RGVidWdNYXJrZXIpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBh
c3NFbmNvZGVySW1wbDo6c2V0Vmlld3BvcnQpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRl
clBhc3NFbmNvZGVySW1wbDo6c2V0U2Npc3NvclJlY3QpOgorICAgICAgICAoUEFMOjpXZWJHUFU6
OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6c2V0QmxlbmRDb25zdGFudCk6CisgICAgICAgIChQQUw6
OldlYkdQVTo6UmVuZGVyUGFzc0VuY29kZXJJbXBsOjpzZXRTdGVuY2lsUmVmZXJlbmNlKToKKyAg
ICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6OmJlZ2luT2NjbHVzaW9u
UXVlcnkpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVySW1wbDo6ZW5k
T2NjbHVzaW9uUXVlcnkpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVy
SW1wbDo6YmVnaW5QaXBlbGluZVN0YXRpc3RpY3NRdWVyeSk6CisgICAgICAgIChQQUw6OldlYkdQ
VTo6UmVuZGVyUGFzc0VuY29kZXJJbXBsOjplbmRQaXBlbGluZVN0YXRpc3RpY3NRdWVyeSk6Cisg
ICAgICAgIChQQUw6OldlYkdQVTo6UmVuZGVyUGFzc0VuY29kZXJJbXBsOjpleGVjdXRlQnVuZGxl
cyk6CisgICAgICAgIChQQUw6OldlYkdQVTo6UmVuZGVyUGFzc0VuY29kZXJJbXBsOjplbmRQYXNz
KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQYXNzRW5jb2RlckltcGw6OnNldExhYmVs
SW50ZXJuYWwpOgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5k
ZXJQYXNzRW5jb2RlckltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQ
VS9JbXBsL1dlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoUEFM
OjpXZWJHUFU6OlJlbmRlclBpcGVsaW5lSW1wbDo6UmVuZGVyUGlwZWxpbmVJbXBsKToKKyAgICAg
ICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQaXBlbGluZUltcGw6On5SZW5kZXJQaXBlbGluZUltcGwp
OgorICAgICAgICAoUEFMOjpXZWJHUFU6OlJlbmRlclBpcGVsaW5lSW1wbDo6Z2V0QmluZEdyb3Vw
TGF5b3V0KToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpSZW5kZXJQaXBlbGluZUltcGw6OnNldExh
YmVsSW50ZXJuYWwpOgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVS
ZW5kZXJQaXBlbGluZUltcGwuaDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQ
VS9JbXBsL1dlYkdQVVNhbXBsZXJJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChQQUw6OldlYkdQ
VTo6U2FtcGxlckltcGw6OlNhbXBsZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpTYW1w
bGVySW1wbDo6flNhbXBsZXJJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpTYW1wbGVySW1w
bDo6c2V0TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBs
L1dlYkdQVVNhbXBsZXJJbXBsLmg6IEFkZGVkLgorICAgICAgICAqIHBhbC9ncmFwaGljcy9XZWJH
UFUvSW1wbC9XZWJHUFVTaGFkZXJNb2R1bGVJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChQQUw6
OldlYkdQVTo6U2hhZGVyTW9kdWxlSW1wbDo6U2hhZGVyTW9kdWxlSW1wbCk6CisgICAgICAgIChQ
QUw6OldlYkdQVTo6U2hhZGVyTW9kdWxlSW1wbDo6flNoYWRlck1vZHVsZUltcGwpOgorICAgICAg
ICAoUEFMOjpXZWJHUFU6OlNoYWRlck1vZHVsZUltcGw6OmNvbXBpbGF0aW9uSW5mbyk6CisgICAg
ICAgIChQQUw6OldlYkdQVTo6U2hhZGVyTW9kdWxlSW1wbDo6c2V0TGFiZWxJbnRlcm5hbCk6Cisg
ICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVNoYWRlck1vZHVsZUltcGwu
aDogQWRkZWQuCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVRleHR1
cmVJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChQQUw6OldlYkdQVTo6VGV4dHVyZUltcGw6OlRl
eHR1cmVJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpUZXh0dXJlSW1wbDo6flRleHR1cmVJ
bXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpUZXh0dXJlSW1wbDo6Y3JlYXRlVmlldyBjb25z
dCk6CisgICAgICAgIChQQUw6OldlYkdQVTo6VGV4dHVyZUltcGw6OmRlc3Ryb3kpOgorICAgICAg
ICAoUEFMOjpXZWJHUFU6OlRleHR1cmVJbXBsOjpzZXRMYWJlbEludGVybmFsKToKKyAgICAgICAg
KiBwYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVVGV4dHVyZUltcGwuaDogQWRkZWQuCisg
ICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVRleHR1cmVWaWV3SW1wbC5j
cHA6IEFkZGVkLgorICAgICAgICAoUEFMOjpXZWJHUFU6OlRleHR1cmVWaWV3SW1wbDo6VGV4dHVy
ZVZpZXdJbXBsKToKKyAgICAgICAgKFBBTDo6V2ViR1BVOjpUZXh0dXJlVmlld0ltcGw6On5UZXh0
dXJlVmlld0ltcGwpOgorICAgICAgICAoUEFMOjpXZWJHUFU6OlRleHR1cmVWaWV3SW1wbDo6c2V0
TGFiZWxJbnRlcm5hbCk6CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQ
VVRleHR1cmVWaWV3SW1wbC5oOiBBZGRlZC4KKwogMjAyMS0xMS0xNCAgTXlsZXMgQy4gTWF4Zmll
bGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJHUFVdIFZhcmlvdXMgbWVj
aGFuaWNhbCBjbGVhbnVwcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvUEFML1BBTC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGUxODU0MjVlMDJlYzY2OTA3NDRlZDEyM2UwOGIyM2UyZTUw
NDIxYjIuLjUyYWI3M2JjYjA0ZWRhOWNiZGZhZTE5OWY2YTliODFjZWExNWVjZTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9QQUwueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9QQUwvUEFMLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEw
OSw2ICsxMDksMjkgQEAKIAkJMUMwOUQwNTMxRTMxQzQ0MTAwNzI1RjE4IC8qIENyeXB0b0RpZ2Vz
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMwOUQw
NTIxRTMxQzQ0MTAwNzI1RjE4IC8qIENyeXB0b0RpZ2VzdC5oICovOyB9OwogCQkxQzA5RDA1NjFF
MzFDNDY1MDA3MjVGMTggLyogQ3J5cHRvRGlnZXN0Q29tbW9uQ3J5cHRvLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMDlEMDU1MUUzMUM0NjUwMDcy
NUYxOCAvKiBDcnlwdG9EaWdlc3RDb21tb25DcnlwdG8uY3BwICovOyB9OwogCQkxQzA5RDA1ODFF
MzFDNTdFMDA3MjVGMTggLyogY29uZmlnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQzA5RDA1NzFFMzFDNTdFMDA3MjVGMTggLyogY29uZmlnLmggKi87
IH07CisJCTFDMTlFNjQ0MjczRjNFNUQwMDRCMTdCMCAvKiBXZWJHUFVJbXBsLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNjQyMjczRjNFNUQw
MDRCMTdCMCAvKiBXZWJHUFVJbXBsLmNwcCAqLzsgfTsKKwkJMUMxOUU2NDgyNzNGM0Y4MjAwNEIx
N0IwIC8qIFdlYkdQVUFkYXB0ZXJJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNjQ2MjczRjNGODIwMDRCMTdCMCAvKiBXZWJHUFVBZGFw
dGVySW1wbC5jcHAgKi87IH07CisJCTFDMTlFNjRDMjczRjNGOTkwMDRCMTdCMCAvKiBXZWJHUFVC
aW5kR3JvdXBJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFDMTlFNjRBMjczRjNGOTkwMDRCMTdCMCAvKiBXZWJHUFVCaW5kR3JvdXBJbXBsLmNw
cCAqLzsgfTsKKwkJMUMxOUU2NTAyNzNGM0ZBNTAwNEIxN0IwIC8qIFdlYkdQVUJpbmRHcm91cExh
eW91dEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUMxOUU2NEUyNzNGM0ZBNTAwNEIxN0IwIC8qIFdlYkdQVUJpbmRHcm91cExheW91dEltcGwu
Y3BwICovOyB9OworCQkxQzE5RTY1NDI3M0YzRkIxMDA0QjE3QjAgLyogV2ViR1BVQnVmZmVySW1w
bC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5
RTY1MjI3M0YzRkIxMDA0QjE3QjAgLyogV2ViR1BVQnVmZmVySW1wbC5jcHAgKi87IH07CisJCTFD
MTlFNjU4MjczRjNGQzAwMDRCMTdCMCAvKiBXZWJHUFVDb21tYW5kQnVmZmVySW1wbC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5RTY1NjI3M0Yz
RkMwMDA0QjE3QjAgLyogV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwuY3BwICovOyB9OworCQkxQzE5
RTY1QzI3M0YzRkQyMDA0QjE3QjAgLyogV2ViR1BVQ29tbWFuZEVuY29kZXJJbXBsLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNjVBMjczRjNG
RDIwMDRCMTdCMCAvKiBXZWJHUFVDb21tYW5kRW5jb2RlckltcGwuY3BwICovOyB9OworCQkxQzE5
RTY2MDI3M0YzRkUyMDA0QjE3QjAgLyogV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5RTY1RTI3
M0YzRkUyMDA0QjE3QjAgLyogV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5jcHAgKi87IH07
CisJCTFDMTlFNjY0MjczRjNGRUUwMDRCMTdCMCAvKiBXZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBs
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlF
NjYyMjczRjNGRUUwMDRCMTdCMCAvKiBXZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBsLmNwcCAqLzsg
fTsKKwkJMUMxOUU2NjgyNzNGM0ZGQTAwNEIxN0IwIC8qIFdlYkdQVURldmljZUltcGwuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMxOUU2NjYyNzNG
M0ZGQTAwNEIxN0IwIC8qIFdlYkdQVURldmljZUltcGwuY3BwICovOyB9OworCQkxQzE5RTY3MDI3
M0Y0MDE0MDA0QjE3QjAgLyogV2ViR1BVUGlwZWxpbmVMYXlvdXRJbXBsLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNjZFMjczRjQwMTQwMDRC
MTdCMCAvKiBXZWJHUFVQaXBlbGluZUxheW91dEltcGwuY3BwICovOyB9OworCQkxQzE5RTY3NDI3
M0Y0MDIwMDA0QjE3QjAgLyogV2ViR1BVUXVlcnlTZXRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNjcyMjczRjQwMjAwMDRCMTdCMCAv
KiBXZWJHUFVRdWVyeVNldEltcGwuY3BwICovOyB9OworCQkxQzE5RTY3ODI3M0Y0MDJCMDA0QjE3
QjAgLyogV2ViR1BVUXVldWVJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFDMTlFNjc2MjczRjQwMkIwMDRCMTdCMCAvKiBXZWJHUFVRdWV1ZUlt
cGwuY3BwICovOyB9OworCQkxQzE5RTY3QzI3M0Y0MDNBMDA0QjE3QjAgLyogV2ViR1BVUmVuZGVy
QnVuZGxlSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQzE5RTY3QTI3M0Y0MDNBMDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyQnVuZGxlSW1wbC5j
cHAgKi87IH07CisJCTFDMTlFNjgwMjczRjQwNDQwMDRCMTdCMCAvKiBXZWJHUFVSZW5kZXJCdW5k
bGVFbmNvZGVySW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQzE5RTY3RTI3M0Y0MDQ0MDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyQnVuZGxlRW5j
b2RlckltcGwuY3BwICovOyB9OworCQkxQzE5RTY4NDI3M0Y0MDUwMDA0QjE3QjAgLyogV2ViR1BV
UmVuZGVyUGFzc0VuY29kZXJJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFDMTlFNjgyMjczRjQwNTAwMDRCMTdCMCAvKiBXZWJHUFVSZW5kZXJQ
YXNzRW5jb2RlckltcGwuY3BwICovOyB9OworCQkxQzE5RTY4ODI3M0Y0MDVEMDA0QjE3QjAgLyog
V2ViR1BVUmVuZGVyUGlwZWxpbmVJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNjg2MjczRjQwNUQwMDRCMTdCMCAvKiBXZWJHUFVSZW5k
ZXJQaXBlbGluZUltcGwuY3BwICovOyB9OworCQkxQzE5RTY4QzI3M0Y0MDY5MDA0QjE3QjAgLyog
V2ViR1BVU2FtcGxlckltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUMxOUU2OEEyNzNGNDA2OTAwNEIxN0IwIC8qIFdlYkdQVVNhbXBsZXJJbXBs
LmNwcCAqLzsgfTsKKwkJMUMxOUU2OTAyNzNGNDA3MjAwNEIxN0IwIC8qIFdlYkdQVVNoYWRlck1v
ZHVsZUltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUMxOUU2OEUyNzNGNDA3MTAwNEIxN0IwIC8qIFdlYkdQVVNoYWRlck1vZHVsZUltcGwuY3Bw
ICovOyB9OworCQkxQzE5RTY5NDI3M0Y0MDdEMDA0QjE3QjAgLyogV2ViR1BVVGV4dHVyZUltcGwu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMxOUU2
OTIyNzNGNDA3RDAwNEIxN0IwIC8qIFdlYkdQVVRleHR1cmVJbXBsLmNwcCAqLzsgfTsKKwkJMUMx
OUU2OTgyNzNGNDA4QjAwNEIxN0IwIC8qIFdlYkdQVVRleHR1cmVWaWV3SW1wbC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5RTY5NjI3M0Y0MDhC
MDA0QjE3QjAgLyogV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmNwcCAqLzsgfTsKKwkJMUMxOUU2QjUy
NzNGODVBRjAwNEIxN0IwIC8qIFdlYkdQVUNvbnZlcnRUb0JhY2tpbmcuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMxOUU2QjQyNzNGODVBRjAwNEIx
N0IwIC8qIFdlYkdQVUNvbnZlcnRUb0JhY2tpbmcuY3BwICovOyB9OworCQkxQzE5RTZCQTI3NDA1
RTMyMDA0QjE3QjAgLyogV2ViR1BVRXh0ZXJuYWxUZXh0dXJlSW1wbC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzE5RTZCOTI3NDA1RTMyMDA0QjE3
QjAgLyogV2ViR1BVRXh0ZXJuYWxUZXh0dXJlSW1wbC5jcHAgKi87IH07CiAJCTFDNDg3NkQ4MUY4
RDdGNEUwMENDRUVCRCAvKiBMb2dnaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFDNDg3NkQ2MUY4RDdGNEUwMENDRUVCRCAvKiBMb2dnaW5nLmNw
cCAqLzsgfTsKIAkJMUM0ODc2RDkxRjhEN0Y0RTAwQ0NFRUJEIC8qIExvZ2dpbmcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDNDg3NkQ3MUY4RDdGNEUw
MENDRUVCRCAvKiBMb2dnaW5nLmggKi87IH07CiAJCTFDNzdDOEM5MjVENzk3MjAwMDYzNUUwQyAv
KiBDb3JlVGV4dFNvZnRMaW5rLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFDNzdDOEM3MjVENzk3MjAwMDYzNUUwQyAvKiBDb3JlVGV4dFNvZnRMaW5r
LmNwcCAqLzsgfTsKQEAgLTQ1OSw2ICs0ODIsNTIgQEAKIAkJMUMwOUQwNUQxRTMxQzc3QTAwNzI1
RjE4IC8qIFBBTC54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBQQUwu
eGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDMDlEMDYyMUUzMUVDMjgw
MDcyNUYxOCAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmln
OyBwYXRoID0gRGVidWdSZWxlYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQzA5RDA2MzFFMzFFQzMxMDA3MjVGMTggLyogQmFzZS54Y2NvbmZpZyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQueGNjb25maWc7IHBhdGggPSBCYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxQzE5RTY0MjI3M0YzRTVEMDA0QjE3QjAgLyogV2ViR1BVSW1wbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXZWJHUFVJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUMxOUU2NDYyNzNGM0Y4MjAwNEIxN0IwIC8qIFdlYkdQVUFkYXB0ZXJJbXBsLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQVUFkYXB0ZXJJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMUMxOUU2NEEyNzNGM0Y5OTAwNEIxN0IwIC8qIFdlYkdQVUJpbmRHcm91
cEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR1BVQmluZEdyb3VwSW1wbC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjRFMjczRjNGQTUwMDRCMTdCMCAvKiBX
ZWJHUFVCaW5kR3JvdXBMYXlvdXRJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQVUJp
bmRHcm91cExheW91dEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5
RTY1MjI3M0YzRkIxMDA0QjE3QjAgLyogV2ViR1BVQnVmZmVySW1wbC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXZWJHUFVCdWZmZXJJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMUMxOUU2NTYyNzNGM0ZDMDAwNEIxN0IwIC8qIFdlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2NUEyNzNGM0ZEMjAwNEIxN0IwIC8qIFdlYkdQ
VUNvbW1hbmRFbmNvZGVySW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHUFVDb21tYW5k
RW5jb2RlckltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY1RTI3
M0YzRkUyMDA0QjE3QjAgLyogV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXZWJHUFVDb21wdXRlUGFzc0VuY29kZXJJbXBsLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2NjIyNzNGM0ZFRTAwNEIxN0IwIC8qIFdlYkdQVUNv
bXB1dGVQaXBlbGluZUltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR1BVQ29tcHV0ZVBp
cGVsaW5lSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjY2Mjcz
RjNGRkEwMDRCMTdCMCAvKiBXZWJHUFVEZXZpY2VJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdlYkdQVURldmljZUltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5
RTY2RTI3M0Y0MDE0MDA0QjE3QjAgLyogV2ViR1BVUGlwZWxpbmVMYXlvdXRJbXBsLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjcyMjczRjQwMjAwMDRCMTdCMCAvKiBXZWJHUFVRdWVy
eVNldEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR1BVUXVlcnlTZXRJbXBsLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2NzYyNzNGNDAyQjAwNEIxN0IwIC8q
IFdlYkdQVVF1ZXVlSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHUFVRdWV1ZUltcGwu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY3QTI3M0Y0MDNBMDA0QjE3
QjAgLyogV2ViR1BVUmVuZGVyQnVuZGxlSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJH
UFVSZW5kZXJCdW5kbGVJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMx
OUU2N0UyNzNGNDA0NDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJbXBsLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJbXBsLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2ODIyNzNGNDA1MDAwNEIxN0IwIC8q
IFdlYkdQVVJlbmRlclBhc3NFbmNvZGVySW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJH
UFVSZW5kZXJQYXNzRW5jb2RlckltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkxQzE5RTY4NjI3M0Y0MDVEMDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyUGlwZWxpbmVJbXBsLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjhBMjczRjQwNjkwMDRCMTdCMCAvKiBXZWJH
UFVTYW1wbGVySW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHUFVTYW1wbGVySW1wbC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjhFMjczRjQwNzEwMDRCMTdC
MCAvKiBXZWJHUFVTaGFkZXJNb2R1bGVJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQ
VVNoYWRlck1vZHVsZUltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5
RTY5MjI3M0Y0MDdEMDA0QjE3QjAgLyogV2ViR1BVVGV4dHVyZUltcGwuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2ViR1BVVGV4dHVyZUltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxQzE5RTY5NjI3M0Y0MDhCMDA0QjE3QjAgLyogV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQVVRleHR1cmVWaWV3SW1wbC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjlBMjczRjQyNDIwMDRCMTdCMCAvKiBXZWJHUFVS
ZW5kZXJCdW5kbGVFbmNvZGVySW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVSZW5kZXJCdW5k
bGVFbmNvZGVySW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY5QjI3
M0Y0MjQyMDA0QjE3QjAgLyogV2ViR1BVSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVJbXBs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNjlDMjczRjQyNDMwMDRCMTdC
MCAvKiBXZWJHUFVCaW5kR3JvdXBMYXlvdXRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVUJp
bmRHcm91cExheW91dEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2
OUQyNzNGNDI0MzAwNEIxN0IwIC8qIFdlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJHUFVQaXBlbGluZUxheW91dEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMUMxOUU2OUUyNzNGNDI0MzAwNEIxN0IwIC8qIFdlYkdQVUNvbXB1dGVQYXNzRW5j
b2RlckltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTY5RjI3M0Y0MjQzMDA0QjE3QjAg
LyogV2ViR1BVVGV4dHVyZUltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR1BVVGV4dHVyZUltcGwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2QTEyNzNGNDI0MzAwNEIxN0Iw
IC8qIFdlYkdQVUJpbmRHcm91cEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR1BVQmluZEdyb3Vw
SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTZBMjI3M0Y0MjQzMDA0
QjE3QjAgLyogV2ViR1BVQnVmZmVySW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVCdWZmZXJJ
bXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNkEzMjczRjQyNDQwMDRC
MTdCMCAvKiBXZWJHUFVSZW5kZXJQYXNzRW5jb2RlckltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
R1BVUmVuZGVyUGFzc0VuY29kZXJJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTFDMTlFNkE0MjczRjQyNDQwMDRCMTdCMCAvKiBXZWJHUFVDb21tYW5kQnVmZmVySW1wbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJHUFVDb21tYW5kQnVmZmVySW1wbC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxQzE5RTZBNTI3M0Y0MjQ0MDA0QjE3QjAgLyogV2ViR1BVUXVldWVJbXBs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVVF1ZXVlSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxQzE5RTZBNjI3M0Y0MjQ0MDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyQnVuZGxl
SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVSZW5kZXJCdW5kbGVJbXBsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNkE3MjczRjQyNDQwMDRCMTdCMCAvKiBXZWJHUFVT
YW1wbGVySW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHUFVTYW1wbGVySW1wbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTZBODI3M0Y0MjQ0MDA0QjE3QjAgLyogV2ViR1BV
UXVlcnlTZXRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVVF1ZXJ5U2V0SW1wbC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTZBOTI3M0Y0MjQ0MDA0QjE3QjAgLyogV2Vi
R1BVUmVuZGVyUGlwZWxpbmVJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVVJlbmRlclBpcGVs
aW5lSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTZBQTI3M0Y0MjQ1
MDA0QjE3QjAgLyogV2ViR1BVU2hhZGVyTW9kdWxlSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJH
UFVTaGFkZXJNb2R1bGVJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlF
NkFCMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJHUFVDb21tYW5kRW5jb2RlckltcGwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViR1BVQ29tbWFuZEVuY29kZXJJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTFDMTlFNkFDMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJHUFVUZXh0dXJlVmlld0lt
cGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNkFEMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJHUFVEZXZp
Y2VJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVURldmljZUltcGwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2QUUyNzNGNDI0NTAwNEIxN0IwIC8qIFdlYkdQVUFkYXB0
ZXJJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVUFkYXB0ZXJJbXBsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNkFGMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJHUFVDb21w
dXRlUGlwZWxpbmVJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVUNvbXB1dGVQaXBlbGluZUlt
cGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMxOUU2QjQyNzNGODVBRjAwNEIx
N0IwIC8qIFdlYkdQVUNvbnZlcnRUb0JhY2tpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vi
R1BVQ29udmVydFRvQmFja2luZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFD
MTlFNkI2MjczRjg1QkMwMDRCMTdCMCAvKiBXZWJHUFVDb252ZXJ0VG9CYWNraW5nLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkdQVUNvbnZlcnRUb0JhY2tpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMUMxOUU2QjkyNzQwNUUzMjAwNEIxN0IwIC8qIFdlYkdQVUV4dGVybmFsVGV4dHVy
ZUltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR1BVRXh0ZXJuYWxUZXh0dXJlSW1wbC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMTlFNkJCMjc0MDVFM0MwMDRCMTdC
MCAvKiBXZWJHUFVFeHRlcm5hbFRleHR1cmVJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdQVUV4
dGVybmFsVGV4dHVyZUltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM0ODc2
RDYxRjhEN0Y0RTAwQ0NFRUJEIC8qIExvZ2dpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTG9n
Z2luZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDNDg3NkQ3MUY4RDdGNEUw
MENDRUVCRCAvKiBMb2dnaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvZ2dpbmcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM2N0NFQTIxRTMyRUUyNjAwRjgwRjJFIC8qIFZlcnNpb24u
eGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gVmVyc2lvbi54Y2NvbmZp
Zzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMDAsNiArMTA2OSw1OSBAQAogCQkJ
cGF0aCA9IENvbmZpZ3VyYXRpb25zOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsK
KwkJMUMxOUU2NDEyNzNGM0Q3NTAwNEIxN0IwIC8qIEltcGwgKi8gPSB7CisJCQlpc2EgPSBQQlhH
cm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTFDMTlFNjQ2MjczRjNGODIwMDRCMTdCMCAvKiBX
ZWJHUFVBZGFwdGVySW1wbC5jcHAgKi8sCisJCQkJMUMxOUU2QUUyNzNGNDI0NTAwNEIxN0IwIC8q
IFdlYkdQVUFkYXB0ZXJJbXBsLmggKi8sCisJCQkJMUMxOUU2NEEyNzNGM0Y5OTAwNEIxN0IwIC8q
IFdlYkdQVUJpbmRHcm91cEltcGwuY3BwICovLAorCQkJCTFDMTlFNkExMjczRjQyNDMwMDRCMTdC
MCAvKiBXZWJHUFVCaW5kR3JvdXBJbXBsLmggKi8sCisJCQkJMUMxOUU2NEUyNzNGM0ZBNTAwNEIx
N0IwIC8qIFdlYkdQVUJpbmRHcm91cExheW91dEltcGwuY3BwICovLAorCQkJCTFDMTlFNjlDMjcz
RjQyNDMwMDRCMTdCMCAvKiBXZWJHUFVCaW5kR3JvdXBMYXlvdXRJbXBsLmggKi8sCisJCQkJMUMx
OUU2NTIyNzNGM0ZCMTAwNEIxN0IwIC8qIFdlYkdQVUJ1ZmZlckltcGwuY3BwICovLAorCQkJCTFD
MTlFNkEyMjczRjQyNDMwMDRCMTdCMCAvKiBXZWJHUFVCdWZmZXJJbXBsLmggKi8sCisJCQkJMUMx
OUU2NTYyNzNGM0ZDMDAwNEIxN0IwIC8qIFdlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmNwcCAqLywK
KwkJCQkxQzE5RTZBNDI3M0Y0MjQ0MDA0QjE3QjAgLyogV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwu
aCAqLywKKwkJCQkxQzE5RTY1QTI3M0YzRkQyMDA0QjE3QjAgLyogV2ViR1BVQ29tbWFuZEVuY29k
ZXJJbXBsLmNwcCAqLywKKwkJCQkxQzE5RTZBQjI3M0Y0MjQ1MDA0QjE3QjAgLyogV2ViR1BVQ29t
bWFuZEVuY29kZXJJbXBsLmggKi8sCisJCQkJMUMxOUU2NUUyNzNGM0ZFMjAwNEIxN0IwIC8qIFdl
YkdQVUNvbXB1dGVQYXNzRW5jb2RlckltcGwuY3BwICovLAorCQkJCTFDMTlFNjlFMjczRjQyNDMw
MDRCMTdCMCAvKiBXZWJHUFVDb21wdXRlUGFzc0VuY29kZXJJbXBsLmggKi8sCisJCQkJMUMxOUU2
NjIyNzNGM0ZFRTAwNEIxN0IwIC8qIFdlYkdQVUNvbXB1dGVQaXBlbGluZUltcGwuY3BwICovLAor
CQkJCTFDMTlFNkFGMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBs
LmggKi8sCisJCQkJMUMxOUU2QjQyNzNGODVBRjAwNEIxN0IwIC8qIFdlYkdQVUNvbnZlcnRUb0Jh
Y2tpbmcuY3BwICovLAorCQkJCTFDMTlFNkI2MjczRjg1QkMwMDRCMTdCMCAvKiBXZWJHUFVDb252
ZXJ0VG9CYWNraW5nLmggKi8sCisJCQkJMUMxOUU2NjYyNzNGM0ZGQTAwNEIxN0IwIC8qIFdlYkdQ
VURldmljZUltcGwuY3BwICovLAorCQkJCTFDMTlFNkFEMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJH
UFVEZXZpY2VJbXBsLmggKi8sCisJCQkJMUMxOUU2QjkyNzQwNUUzMjAwNEIxN0IwIC8qIFdlYkdQ
VUV4dGVybmFsVGV4dHVyZUltcGwuY3BwICovLAorCQkJCTFDMTlFNkJCMjc0MDVFM0MwMDRCMTdC
MCAvKiBXZWJHUFVFeHRlcm5hbFRleHR1cmVJbXBsLmggKi8sCisJCQkJMUMxOUU2NDIyNzNGM0U1
RDAwNEIxN0IwIC8qIFdlYkdQVUltcGwuY3BwICovLAorCQkJCTFDMTlFNjlCMjczRjQyNDIwMDRC
MTdCMCAvKiBXZWJHUFVJbXBsLmggKi8sCisJCQkJMUMxOUU2NkUyNzNGNDAxNDAwNEIxN0IwIC8q
IFdlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5jcHAgKi8sCisJCQkJMUMxOUU2OUQyNzNGNDI0MzAw
NEIxN0IwIC8qIFdlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5oICovLAorCQkJCTFDMTlFNjcyMjcz
RjQwMjAwMDRCMTdCMCAvKiBXZWJHUFVRdWVyeVNldEltcGwuY3BwICovLAorCQkJCTFDMTlFNkE4
MjczRjQyNDQwMDRCMTdCMCAvKiBXZWJHUFVRdWVyeVNldEltcGwuaCAqLywKKwkJCQkxQzE5RTY3
NjI3M0Y0MDJCMDA0QjE3QjAgLyogV2ViR1BVUXVldWVJbXBsLmNwcCAqLywKKwkJCQkxQzE5RTZB
NTI3M0Y0MjQ0MDA0QjE3QjAgLyogV2ViR1BVUXVldWVJbXBsLmggKi8sCisJCQkJMUMxOUU2N0Uy
NzNGNDA0NDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJbXBsLmNwcCAqLywK
KwkJCQkxQzE5RTY5QTI3M0Y0MjQyMDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyQnVuZGxlRW5jb2Rl
ckltcGwuaCAqLywKKwkJCQkxQzE5RTY3QTI3M0Y0MDNBMDA0QjE3QjAgLyogV2ViR1BVUmVuZGVy
QnVuZGxlSW1wbC5jcHAgKi8sCisJCQkJMUMxOUU2QTYyNzNGNDI0NDAwNEIxN0IwIC8qIFdlYkdQ
VVJlbmRlckJ1bmRsZUltcGwuaCAqLywKKwkJCQkxQzE5RTY4MjI3M0Y0MDUwMDA0QjE3QjAgLyog
V2ViR1BVUmVuZGVyUGFzc0VuY29kZXJJbXBsLmNwcCAqLywKKwkJCQkxQzE5RTZBMzI3M0Y0MjQ0
MDA0QjE3QjAgLyogV2ViR1BVUmVuZGVyUGFzc0VuY29kZXJJbXBsLmggKi8sCisJCQkJMUMxOUU2
ODYyNzNGNDA1RDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5jcHAgKi8sCisJ
CQkJMUMxOUU2QTkyNzNGNDI0NDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5o
ICovLAorCQkJCTFDMTlFNjhBMjczRjQwNjkwMDRCMTdCMCAvKiBXZWJHUFVTYW1wbGVySW1wbC5j
cHAgKi8sCisJCQkJMUMxOUU2QTcyNzNGNDI0NDAwNEIxN0IwIC8qIFdlYkdQVVNhbXBsZXJJbXBs
LmggKi8sCisJCQkJMUMxOUU2OEUyNzNGNDA3MTAwNEIxN0IwIC8qIFdlYkdQVVNoYWRlck1vZHVs
ZUltcGwuY3BwICovLAorCQkJCTFDMTlFNkFBMjczRjQyNDUwMDRCMTdCMCAvKiBXZWJHUFVTaGFk
ZXJNb2R1bGVJbXBsLmggKi8sCisJCQkJMUMxOUU2OTIyNzNGNDA3RDAwNEIxN0IwIC8qIFdlYkdQ
VVRleHR1cmVJbXBsLmNwcCAqLywKKwkJCQkxQzE5RTY5RjI3M0Y0MjQzMDA0QjE3QjAgLyogV2Vi
R1BVVGV4dHVyZUltcGwuaCAqLywKKwkJCQkxQzE5RTY5NjI3M0Y0MDhCMDA0QjE3QjAgLyogV2Vi
R1BVVGV4dHVyZVZpZXdJbXBsLmNwcCAqLywKKwkJCQkxQzE5RTZBQzI3M0Y0MjQ1MDA0QjE3QjAg
LyogV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmggKi8sCisJCQkpOworCQkJcGF0aCA9IEltcGw7CisJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQkxQzQ4NzZERTFGOEQ4MzEzMDBDQ0VF
QkQgLyogY29jb2EgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApA
QCAtMTA0Miw2ICsxMTY0LDcgQEAKIAkJMUNDNUUzQzMyNzM3NDVBMzAwNkY2RkY0IC8qIFdlYkdQ
VSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMUMxOUU2
NDEyNzNGM0Q3NTAwNEIxN0IwIC8qIEltcGwgKi8sCiAJCQkJMUNDNUU0NzEyNzM3NDk0ODAwNkY2
RkY0IC8qIFdlYkdQVS5oICovLAogCQkJCTFDQzVFNDdGMjczNzQ5NDkwMDZGNkZGNCAvKiBXZWJH
UFVBZGFwdGVyLmggKi8sCiAJCQkJMUNDNUU0NkMyNzM3NDk0ODAwNkY2RkY0IC8qIFdlYkdQVUFk
ZHJlc3NNb2RlLmggKi8sCkBAIC0xNjk0LDYgKzE4MTcsMjkgQEAKIAkJCQkwNzYxMURCNzI0M0ZB
NUJGMDBEODA3MDQgLyogVXNhZ2VUcmFja2luZ1NvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNDFFMUYzNDQyNDhBNkEwMDAwMjJENURFIC8qIFZpZGVvVG9vbGJveFNvZnRMaW5rLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUY0NkI4QzREMjY3NDA5MTgwMDdBNjU1NCAvKiBWaXNpb25LaXRD
b3JlU29mdExpbmsubW0gaW4gU291cmNlcyAqLywKKwkJCQkxQzE5RTY0ODI3M0YzRjgyMDA0QjE3
QjAgLyogV2ViR1BVQWRhcHRlckltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2NEMy
NzNGM0Y5OTAwNEIxN0IwIC8qIFdlYkdQVUJpbmRHcm91cEltcGwuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMUMxOUU2NTAyNzNGM0ZBNTAwNEIxN0IwIC8qIFdlYkdQVUJpbmRHcm91cExheW91dElt
cGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2NTQyNzNGM0ZCMTAwNEIxN0IwIC8qIFdl
YkdQVUJ1ZmZlckltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2NTgyNzNGM0ZDMDAw
NEIxN0IwIC8qIFdlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTFDMTlFNjVDMjczRjNGRDIwMDRCMTdCMCAvKiBXZWJHUFVDb21tYW5kRW5jb2RlckltcGwuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2NjAyNzNGM0ZFMjAwNEIxN0IwIC8qIFdlYkdQVUNv
bXB1dGVQYXNzRW5jb2RlckltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2NjQyNzNG
M0ZFRTAwNEIxN0IwIC8qIFdlYkdQVUNvbXB1dGVQaXBlbGluZUltcGwuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMUMxOUU2QjUyNzNGODVBRjAwNEIxN0IwIC8qIFdlYkdQVUNvbnZlcnRUb0JhY2tp
bmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2NjgyNzNGM0ZGQTAwNEIxN0IwIC8qIFdl
YkdQVURldmljZUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2QkEyNzQwNUUzMjAw
NEIxN0IwIC8qIFdlYkdQVUV4dGVybmFsVGV4dHVyZUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMUMxOUU2NDQyNzNGM0U1RDAwNEIxN0IwIC8qIFdlYkdQVUltcGwuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMUMxOUU2NzAyNzNGNDAxNDAwNEIxN0IwIC8qIFdlYkdQVVBpcGVsaW5lTGF5b3V0
SW1wbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQzE5RTY3NDI3M0Y0MDIwMDA0QjE3QjAgLyog
V2ViR1BVUXVlcnlTZXRJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFDMTlFNjc4MjczRjQw
MkIwMDRCMTdCMCAvKiBXZWJHUFVRdWV1ZUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMx
OUU2ODAyNzNGNDA0NDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJbXBsLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTFDMTlFNjdDMjczRjQwM0EwMDRCMTdCMCAvKiBXZWJHUFVS
ZW5kZXJCdW5kbGVJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFDMTlFNjg0MjczRjQwNTAw
MDRCMTdCMCAvKiBXZWJHUFVSZW5kZXJQYXNzRW5jb2RlckltcGwuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMUMxOUU2ODgyNzNGNDA1RDAwNEIxN0IwIC8qIFdlYkdQVVJlbmRlclBpcGVsaW5lSW1w
bC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQzE5RTY4QzI3M0Y0MDY5MDA0QjE3QjAgLyogV2Vi
R1BVU2FtcGxlckltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUMxOUU2OTAyNzNGNDA3MjAw
NEIxN0IwIC8qIFdlYkdQVVNoYWRlck1vZHVsZUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MUMxOUU2OTQyNzNGNDA3RDAwNEIxN0IwIC8qIFdlYkdQVVRleHR1cmVJbXBsLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTFDMTlFNjk4MjczRjQwOEIwMDRCMTdCMCAvKiBXZWJHUFVUZXh0dXJlVmll
d0ltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTEwODI2RkExRjU3NjI5MjAwNDc3MkFDIC8q
IFdlYlBhbmVsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUFkYXB0ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQWRhcHRlckltcGwuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjkxMjA5NjlmY2ViYTRhMjQ2YWY2OWEwYjI3NmNiZmYzOTBmMTFiNmYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBs
L1dlYkdQVUFkYXB0ZXJJbXBsLmNwcApAQCAtMCwwICsxLDIxNSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVBZGFwdGVySW1wbC5oIgorCisjaW5j
bHVkZSAiV2ViR1BVQ29udmVydFRvQmFja2luZy5oIgorI2luY2x1ZGUgIldlYkdQVURldmljZUlt
cGwuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVRXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgewor
bmFtZXNwYWNlIFdlYkdQVSB7CisKK3N0YXRpYyBTdHJpbmcgYWRhcHRlck5hbWUoV0dQVUFkYXB0
ZXIgYWRhcHRlcikKK3sKKyAgICBXR1BVQWRhcHRlclByb3BlcnRpZXMgcHJvcGVydGllczsKKyAg
ICB3Z3B1QWRhcHRlckdldFByb3BlcnRpZXMoYWRhcHRlciwgJnByb3BlcnRpZXMpOworICAgIHJl
dHVybiBwcm9wZXJ0aWVzLm5hbWU7Cit9CisKK3N0YXRpYyBSZWY8U3VwcG9ydGVkRmVhdHVyZXM+
IHN1cHBvcnRlZEZlYXR1cmVzKFdHUFVBZGFwdGVyIGFkYXB0ZXIpCit7CisgICAgVmVjdG9yPFN0
cmluZz4gcmVzdWx0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyA7ICsraSkgeworICAgICAgICBh
dXRvIGZlYXR1cmUgPSB3Z3B1QWRhcHRlckdldEZlYXR1cmVBdEluZGV4KGFkYXB0ZXIsIGkpOwor
ICAgICAgICBpZiAoZmVhdHVyZSA9PSBXR1BVRmVhdHVyZU5hbWVfVW5kZWZpbmVkKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8dWludD4oZmVhdHVyZSkp
IHsKKyAgICAgICAgY2FzZSBXR1BVRmVhdHVyZU5hbWVfRGVwdGhDbGFtcGluZzoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFdHUFVGZWF0dXJlTmFtZV9EZXB0aDI0VW5vcm1TdGVu
Y2lsODoKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoImRlcHRoMjR1bm9ybS1zdGVuY2lsOCJf
cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXR1BVRmVhdHVyZU5hbWVfRGVw
dGgzMkZsb2F0U3RlbmNpbDg6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJkZXB0aDMyZmxv
YXQtc3RlbmNpbDgiX3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVUZl
YXR1cmVOYW1lX1RpbWVzdGFtcFF1ZXJ5OgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgidGlt
ZXN0YW1wLXF1ZXJ5Il9zKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdHUFVG
ZWF0dXJlTmFtZV9QaXBlbGluZVN0YXRpc3RpY3NRdWVyeToKKyAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoInBpcGVsaW5lLXN0YXRpc3RpY3MtcXVlcnkiX3MpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgV0dQVUZlYXR1cmVOYW1lX1RleHR1cmVDb21wcmVzc2lvbkJDOgorICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgidGV4dHVyZS1jb21wcmVzc2lvbi1iYyJfcyk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXR1BVRmVhdHVyZU5hbWVfRGVwdGhDbGlwQ29u
dHJvbDoKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoImRlcHRoLWNsaXAtY29udHJvbCJfcyk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXR1BVRmVhdHVyZU5hbWVfSW5kaXJl
Y3RGaXJzdEluc3RhbmNlOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiaW5kaXJlY3QtZmly
c3QtaW5zdGFuY2UiX3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0dQVUZl
YXR1cmVOYW1lX1RleHR1cmVDb21wcmVzc2lvbkVUQzI6CisgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKCJ0ZXh0dXJlLWNvbXByZXNzaW9uLWV0YzIiX3MpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgV0dQVUZlYXR1cmVOYW1lX1RleHR1cmVDb21wcmVzc2lvbkFTVEM6CisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKCJ0ZXh0dXJlLWNvbXByZXNzaW9uLWFzdGMiX3MpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gU3VwcG9ydGVkRmVhdHVyZXM6OmNyZWF0ZShXVEZN
b3ZlKHJlc3VsdCkpOworfQorCitzdGF0aWMgUmVmPFN1cHBvcnRlZExpbWl0cz4gc3VwcG9ydGVk
TGltaXRzKFdHUFVBZGFwdGVyIGFkYXB0ZXIpCit7CisgICAgV0dQVVN1cHBvcnRlZExpbWl0cyBs
aW1pdHM7CisgICAgd2dwdUFkYXB0ZXJHZXRMaW1pdHMoYWRhcHRlciwgJmxpbWl0cyk7CisgICAg
cmV0dXJuIFN1cHBvcnRlZExpbWl0czo6Y3JlYXRlKAorICAgICAgICBsaW1pdHMubGltaXRzLm1h
eFRleHR1cmVEaW1lbnNpb24xRCwKKyAgICAgICAgbGltaXRzLmxpbWl0cy5tYXhUZXh0dXJlRGlt
ZW5zaW9uMkQsCisgICAgICAgIGxpbWl0cy5saW1pdHMubWF4VGV4dHVyZURpbWVuc2lvbjNELAor
ICAgICAgICBsaW1pdHMubGltaXRzLm1heFRleHR1cmVBcnJheUxheWVycywKKyAgICAgICAgbGlt
aXRzLmxpbWl0cy5tYXhCaW5kR3JvdXBzLAorICAgICAgICBsaW1pdHMubGltaXRzLm1heER5bmFt
aWNVbmlmb3JtQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0LAorICAgICAgICBsaW1pdHMubGltaXRz
Lm1heER5bmFtaWNTdG9yYWdlQnVmZmVyc1BlclBpcGVsaW5lTGF5b3V0LAorICAgICAgICBsaW1p
dHMubGltaXRzLm1heFNhbXBsZWRUZXh0dXJlc1BlclNoYWRlclN0YWdlLAorICAgICAgICBsaW1p
dHMubGltaXRzLm1heFNhbXBsZXJzUGVyU2hhZGVyU3RhZ2UsCisgICAgICAgIGxpbWl0cy5saW1p
dHMubWF4U3RvcmFnZUJ1ZmZlcnNQZXJTaGFkZXJTdGFnZSwKKyAgICAgICAgbGltaXRzLmxpbWl0
cy5tYXhTdG9yYWdlVGV4dHVyZXNQZXJTaGFkZXJTdGFnZSwKKyAgICAgICAgbGltaXRzLmxpbWl0
cy5tYXhVbmlmb3JtQnVmZmVyc1BlclNoYWRlclN0YWdlLAorICAgICAgICBsaW1pdHMubGltaXRz
Lm1heFVuaWZvcm1CdWZmZXJCaW5kaW5nU2l6ZSwKKyAgICAgICAgbGltaXRzLmxpbWl0cy5tYXhT
dG9yYWdlQnVmZmVyQmluZGluZ1NpemUsCisgICAgICAgIGxpbWl0cy5saW1pdHMubWluVW5pZm9y
bUJ1ZmZlck9mZnNldEFsaWdubWVudCwKKyAgICAgICAgbGltaXRzLmxpbWl0cy5taW5TdG9yYWdl
QnVmZmVyT2Zmc2V0QWxpZ25tZW50LAorICAgICAgICBsaW1pdHMubGltaXRzLm1heFZlcnRleEJ1
ZmZlcnMsCisgICAgICAgIGxpbWl0cy5saW1pdHMubWF4VmVydGV4QXR0cmlidXRlcywKKyAgICAg
ICAgbGltaXRzLmxpbWl0cy5tYXhWZXJ0ZXhCdWZmZXJBcnJheVN0cmlkZSwKKyAgICAgICAgbGlt
aXRzLmxpbWl0cy5tYXhJbnRlclN0YWdlU2hhZGVyQ29tcG9uZW50cywKKyAgICAgICAgbGltaXRz
LmxpbWl0cy5tYXhDb21wdXRlV29ya2dyb3VwU3RvcmFnZVNpemUsCisgICAgICAgIGxpbWl0cy5s
aW1pdHMubWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwLAorICAgICAgICBsaW1pdHMu
bGltaXRzLm1heENvbXB1dGVXb3JrZ3JvdXBTaXplWCwKKyAgICAgICAgbGltaXRzLmxpbWl0cy5t
YXhDb21wdXRlV29ya2dyb3VwU2l6ZVksCisgICAgICAgIGxpbWl0cy5saW1pdHMubWF4Q29tcHV0
ZVdvcmtncm91cFNpemVaLAorICAgICAgICBsaW1pdHMubGltaXRzLm1heENvbXB1dGVXb3JrZ3Jv
dXBzUGVyRGltZW5zaW9uKTsKK30KKworc3RhdGljIGJvb2wgaXNGYWxsYmFja0FkYXB0ZXIoV0dQ
VUFkYXB0ZXIgYWRhcHRlcikKK3sKKyAgICBXR1BVQWRhcHRlclByb3BlcnRpZXMgcHJvcGVydGll
czsKKyAgICB3Z3B1QWRhcHRlckdldFByb3BlcnRpZXMoYWRhcHRlciwgJnByb3BlcnRpZXMpOwor
ICAgIHJldHVybiBwcm9wZXJ0aWVzLmFkYXB0ZXJUeXBlID09IFdHUFVBZGFwdGVyVHlwZV9DUFU7
Cit9CisKK0FkYXB0ZXJJbXBsOjpBZGFwdGVySW1wbChXR1BVQWRhcHRlciBhZGFwdGVyKQorICAg
IDogQWRhcHRlcihhZGFwdGVyTmFtZShhZGFwdGVyKSwgc3VwcG9ydGVkRmVhdHVyZXMoYWRhcHRl
ciksIHN1cHBvcnRlZExpbWl0cyhhZGFwdGVyKSwgV2ViR1BVOjppc0ZhbGxiYWNrQWRhcHRlcihh
ZGFwdGVyKSkKKyAgICAsIG1fYmFja2luZyhhZGFwdGVyKQoreworfQorCitBZGFwdGVySW1wbDo6
fkFkYXB0ZXJJbXBsKCkKK3sKKyAgICB3Z3B1QWRhcHRlclJlbGVhc2UobV9iYWNraW5nKTsgCit9
CisKK3ZvaWQgcmVxdWVzdERldmljZUNhbGxiYWNrKFdHUFVSZXF1ZXN0RGV2aWNlU3RhdHVzIHN0
YXR1cywgV0dQVURldmljZSBkZXZpY2UsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIHZvaWQqIHVzZXJk
YXRhKQoreworICAgIGF1dG8gYWRhcHRlciA9IGFkb3B0UmVmKCpzdGF0aWNfY2FzdDxBZGFwdGVy
SW1wbCo+KHVzZXJkYXRhKSk7IC8vIGFkb3B0UmVmIGlzIGJhbGFuY2VkIGJ5IGxlYWtSZWYgaW4g
cmVxdWVzdERldmljZSgpIGJlbG93LiBXZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSdyZSB1
c2luZyBhIEMgQVBJIHdpdGggbm8gY29uY2VwdCBvZiByZWZlcmVuY2UgY291bnRpbmcgb3IgYmxv
Y2tzLgorICAgIGFkYXB0ZXItPnJlcXVlc3REZXZpY2VDYWxsYmFjayhzdGF0dXMsIGRldmljZSwg
bWVzc2FnZSk7Cit9CisKK3ZvaWQgQWRhcHRlckltcGw6OnJlcXVlc3REZXZpY2UoY29uc3QgRGV2
aWNlRGVzY3JpcHRvciYgZGVzY3JpcHRvciwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlZjxEZXZpY2U+
KT4mJiBjYWxsYmFjaykKK3sKKyAgICBSZWYgcHJvdGVjdGVkVGhpcygqdGhpcyk7CisKKyAgICBh
dXRvIGxhYmVsID0gZGVzY3JpcHRvci5sYWJlbC51dGY4KCk7CisKKyAgICBXR1BVRGV2aWNlRGVz
Y3JpcHRvckxhYmVsIGJhY2tpbmdEZXNjcmlwdG9yTGFiZWwgeworICAgICAgICB7CisgICAgICAg
ICAgICBudWxscHRyLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V0dQVVNUeXBlPihXR1BVU1R5
cGVfRGV2aWNlRGVzY3JpcHRvckxhYmVsKSwKKyAgICAgICAgfSwKKyAgICAgICAgbnVsbHB0ciwK
KyAgICAgICAgbGFiZWwuZGF0YSgpCisgICAgfTsKKworICAgIFZlY3RvcjxXR1BVRmVhdHVyZU5h
bWU+IGZlYXR1cmVzOworICAgIGZlYXR1cmVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGVzY3Jp
cHRvci5yZXF1aXJlZEZlYXR1cmVzLnNpemUoKSk7CisgICAgZm9yIChhdXRvIGZlYXR1cmVOYW1l
IDogZGVzY3JpcHRvci5yZXF1aXJlZEZlYXR1cmVzKQorICAgICAgICBmZWF0dXJlcy51bmNoZWNr
ZWRBcHBlbmQoY29udmVydFRvQmFja2luZyhmZWF0dXJlTmFtZSkpOworCisgICAgV0dQVVJlcXVp
cmVkTGltaXRzIGxpbWl0cyB7CisgICAgICAgIG51bGxwdHIsIHsKKyAgICAgICAgICAgIDAsIC8v
IG1heFRleHR1cmVEaW1lbnNpb24xRAorICAgICAgICAgICAgMCwgLy8gbWF4VGV4dHVyZURpbWVu
c2lvbjJECisgICAgICAgICAgICAwLCAvLyBtYXhUZXh0dXJlRGltZW5zaW9uM0QKKyAgICAgICAg
ICAgIDAsIC8vIG1heFRleHR1cmVBcnJheUxheWVycworICAgICAgICAgICAgMCwgLy8gbWF4Qmlu
ZEdyb3VwcworICAgICAgICAgICAgMCwgLy8gbWF4RHluYW1pY1VuaWZvcm1CdWZmZXJzUGVyUGlw
ZWxpbmVMYXlvdXQKKyAgICAgICAgICAgIDAsIC8vIG1heER5bmFtaWNTdG9yYWdlQnVmZmVyc1Bl
clBpcGVsaW5lTGF5b3V0CisgICAgICAgICAgICAwLCAvLyBtYXhTYW1wbGVkVGV4dHVyZXNQZXJT
aGFkZXJTdGFnZQorICAgICAgICAgICAgMCwgLy8gbWF4U2FtcGxlcnNQZXJTaGFkZXJTdGFnZQor
ICAgICAgICAgICAgMCwgLy8gbWF4U3RvcmFnZUJ1ZmZlcnNQZXJTaGFkZXJTdGFnZQorICAgICAg
ICAgICAgMCwgLy8gbWF4U3RvcmFnZVRleHR1cmVzUGVyU2hhZGVyU3RhZ2UKKyAgICAgICAgICAg
IDAsIC8vIG1heFVuaWZvcm1CdWZmZXJzUGVyU2hhZGVyU3RhZ2UKKyAgICAgICAgICAgIDAsIC8v
IG1heFVuaWZvcm1CdWZmZXJCaW5kaW5nU2l6ZQorICAgICAgICAgICAgMCwgLy8gbWF4U3RvcmFn
ZUJ1ZmZlckJpbmRpbmdTaXplCisgICAgICAgICAgICAwLCAvLyBtaW5Vbmlmb3JtQnVmZmVyT2Zm
c2V0QWxpZ25tZW50CisgICAgICAgICAgICAwLCAvLyBtaW5TdG9yYWdlQnVmZmVyT2Zmc2V0QWxp
Z25tZW50CisgICAgICAgICAgICAwLCAvLyBtYXhWZXJ0ZXhCdWZmZXJzCisgICAgICAgICAgICAw
LCAvLyBtYXhWZXJ0ZXhBdHRyaWJ1dGVzCisgICAgICAgICAgICAwLCAvLyBtYXhWZXJ0ZXhCdWZm
ZXJBcnJheVN0cmlkZQorICAgICAgICAgICAgMCwgLy8gbWF4SW50ZXJTdGFnZVNoYWRlckNvbXBv
bmVudHMKKyAgICAgICAgICAgIDAsIC8vIG1heENvbXB1dGVXb3JrZ3JvdXBTdG9yYWdlU2l6ZQor
ICAgICAgICAgICAgMCwgLy8gbWF4Q29tcHV0ZUludm9jYXRpb25zUGVyV29ya2dyb3VwCisgICAg
ICAgICAgICAwLCAvLyBtYXhDb21wdXRlV29ya2dyb3VwU2l6ZVgKKyAgICAgICAgICAgIDAsIC8v
IG1heENvbXB1dGVXb3JrZ3JvdXBTaXplWQorICAgICAgICAgICAgMCwgLy8gbWF4Q29tcHV0ZVdv
cmtncm91cFNpemVaCisgICAgICAgICAgICAwLCAvLyBtYXhDb21wdXRlV29ya2dyb3Vwc1BlckRp
bWVuc2lvbgorICAgICAgICB9LAorICAgIH07CisKKyAgICBXR1BVRGV2aWNlRGVzY3JpcHRvciBi
YWNraW5nRGVzY3JpcHRvciB7CisgICAgICAgICZiYWNraW5nRGVzY3JpcHRvckxhYmVsLmhlYWRl
ciwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGZlYXR1cmVzLnNpemUoKSksCisgICAg
ICAgIGZlYXR1cmVzLmRhdGEoKSwKKyAgICAgICAgJmxpbWl0cywKKyAgICB9OworCisgICAgbV9j
YWxsYmFja3MuYXBwZW5kKFdURk1vdmUoY2FsbGJhY2spKTsKKworICAgIHdncHVBZGFwdGVyUmVx
dWVzdERldmljZShtX2JhY2tpbmcsICZiYWNraW5nRGVzY3JpcHRvciwgJldlYkdQVTo6cmVxdWVz
dERldmljZUNhbGxiYWNrLCAmcHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpOyAvLyBsZWFrUmVmIGlz
IGJhbGFuY2VkIGJ5IGFkb3B0UmVmIGluIHJlcXVlc3REZXZpY2VDYWxsYmFjaygpIGFib3ZlLiBX
ZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSdyZSB1c2luZyBhIEMgQVBJIHdpdGggbm8gY29u
Y2VwdCBvZiByZWZlcmVuY2UgY291bnRpbmcgb3IgYmxvY2tzLgorfQorCit2b2lkIEFkYXB0ZXJJ
bXBsOjpyZXF1ZXN0RGV2aWNlQ2FsbGJhY2soV0dQVVJlcXVlc3REZXZpY2VTdGF0dXMsIFdHUFVE
ZXZpY2UgZGV2aWNlLCBjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIFVOVVNFRF9QQVJBTSht
ZXNzYWdlKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gbV9jYWxsYmFja3MudGFrZUZpcnN0KCk7Cisg
ICAgY2FsbGJhY2soRGV2aWNlSW1wbDo6Y3JlYXRlKGRldmljZSwgUmVmIHsgZmVhdHVyZXMoKSB9
LCBSZWYgeyBsaW1pdHMoKSB9KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1l
c3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNz
L1dlYkdQVS9JbXBsL1dlYkdQVUFkYXB0ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUFkYXB0ZXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTY0
ODlkNWRhYmE5NThjOGZmMGI4ZmFiODgyZDY3MGI0YjI2ZDZlMwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQWRhcHRl
ckltcGwuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJXZWJHUFVBZGFwdGVyLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorI2lu
Y2x1ZGUgPHd0Zi9EZXF1ZS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUg
eworCitjbGFzcyBBZGFwdGVySW1wbCBmaW5hbCA6IHB1YmxpYyBBZGFwdGVyIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmPEFkYXB0ZXJJbXBsPiBjcmVhdGUoV0dQVUFkYXB0ZXIgYWRhcHRlcikK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFkYXB0ZXJJbXBsKGFkYXB0ZXIp
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5BZGFwdGVySW1wbCgpOworCisgICAgV0dQVUFkYXB0
ZXIgYmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgorICAg
IGZyaWVuZCB2b2lkIHJlcXVlc3REZXZpY2VDYWxsYmFjayhXR1BVUmVxdWVzdERldmljZVN0YXR1
cywgV0dQVURldmljZSwgY29uc3QgY2hhciogbWVzc2FnZSwgdm9pZCogdXNlcmRhdGEpOworCisg
ICAgQWRhcHRlckltcGwoV0dQVUFkYXB0ZXIpOworCisgICAgQWRhcHRlckltcGwoY29uc3QgQWRh
cHRlckltcGwmKSA9IGRlbGV0ZTsKKyAgICBBZGFwdGVySW1wbChBZGFwdGVySW1wbCYmKSA9IGRl
bGV0ZTsKKyAgICBBZGFwdGVySW1wbCYgb3BlcmF0b3I9KGNvbnN0IEFkYXB0ZXJJbXBsJikgPSBk
ZWxldGU7CisgICAgQWRhcHRlckltcGwmIG9wZXJhdG9yPShBZGFwdGVySW1wbCYmKSA9IGRlbGV0
ZTsKKworICAgIHZvaWQgcmVxdWVzdERldmljZUNhbGxiYWNrKFdHUFVSZXF1ZXN0RGV2aWNlU3Rh
dHVzLCBXR1BVRGV2aWNlLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsKKyAgICB2b2lkIHJlcXVlc3RE
ZXZpY2UoY29uc3QgRGV2aWNlRGVzY3JpcHRvciYsIHN0ZDo6ZnVuY3Rpb248dm9pZChSZWY8RGV2
aWNlPik+JiYpIGZpbmFsOworCisgICAgV0dQVUFkYXB0ZXIgbV9iYWNraW5nIHsgbnVsbHB0ciB9
OworCisgICAgRGVxdWU8c3RkOjpmdW5jdGlvbjx2b2lkKFJlZjxEZXZpY2U+KT4+IG1fY2FsbGJh
Y2tzOworfTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2Vi
R1BVQmluZEdyb3VwSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dl
YkdQVS9JbXBsL1dlYkdQVUJpbmRHcm91cEltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFiMGFkNjc1OThh
N2FkMjE1OWE5NDg0NGYxNzRjMzAzNWNlYWZmYjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJpbmRHcm91cEltcGwu
Y3BwCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViR1BVQmluZEdyb3VwSW1wbC5oIgorCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQ
VUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitCaW5kR3Jv
dXBJbXBsOjpCaW5kR3JvdXBJbXBsKFdHUFVCaW5kR3JvdXAgYmluZEdyb3VwKQorICAgIDogbV9i
YWNraW5nKGJpbmRHcm91cCkKK3sKK30KKworQmluZEdyb3VwSW1wbDo6fkJpbmRHcm91cEltcGwo
KQoreworICAgIHdncHVCaW5kR3JvdXBSZWxlYXNlKG1fYmFja2luZyk7Cit9CisKK3ZvaWQgQmlu
ZEdyb3VwSW1wbDo6c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAg
IHdncHVCaW5kR3JvdXBTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVsLnV0ZjgoKS5kYXRhKCkpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVCaW5k
R3JvdXBJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBs
L1dlYkdQVUJpbmRHcm91cEltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMzViYmE5ZGI3MmQ2NTE5NmJhNmVh
NmEwNjJmMzcyM2UyZGIwYWY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFM
L3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVCaW5kR3JvdXBJbXBsLmgKQEAgLTAsMCAr
MSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVQmlu
ZEdyb3VwLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorCituYW1lc3BhY2UgUEFMIHsK
K25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBCaW5kR3JvdXBJbXBsIGZpbmFsIDogcHVibGlj
IEJpbmRHcm91cCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxCaW5kR3JvdXBJbXBsPiBjcmVh
dGUoV0dQVUJpbmRHcm91cCBiaW5kR3JvdXApCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBCaW5kR3JvdXBJbXBsKGJpbmRHcm91cCkpOworICAgIH0KKworICAgIHZpcnR1YWwg
fkJpbmRHcm91cEltcGwoKTsKKworICAgIFdHUFVCaW5kR3JvdXAgYmFja2luZygpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgorICAgIEJpbmRHcm91cEltcGwoV0dQVUJp
bmRHcm91cCk7CisKKyAgICBCaW5kR3JvdXBJbXBsKGNvbnN0IEJpbmRHcm91cEltcGwmKSA9IGRl
bGV0ZTsKKyAgICBCaW5kR3JvdXBJbXBsKEJpbmRHcm91cEltcGwmJikgPSBkZWxldGU7CisgICAg
QmluZEdyb3VwSW1wbCYgb3BlcmF0b3I9KGNvbnN0IEJpbmRHcm91cEltcGwmKSA9IGRlbGV0ZTsK
KyAgICBCaW5kR3JvdXBJbXBsJiBvcGVyYXRvcj0oQmluZEdyb3VwSW1wbCYmKSA9IGRlbGV0ZTsK
KworICAgIHZvaWQgc2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5hbDsKKworICAg
IFdHUFVCaW5kR3JvdXAgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQmluZEdyb3VwTGF5b3V0SW1wbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJp
bmRHcm91cExheW91dEltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2NGU3ZGI2NjAzNDRkZjhjNDZiMTM1
OGFhNDBlOGQ4MTkxZjQwYTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJpbmRHcm91cExheW91dEltcGwuY3BwCkBA
IC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2ViR1BVQmluZEdyb3VwTGF5b3V0SW1wbC5oIgorCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQ
VUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitCaW5kR3Jv
dXBMYXlvdXRJbXBsOjpCaW5kR3JvdXBMYXlvdXRJbXBsKFdHUFVCaW5kR3JvdXBMYXlvdXQgYmlu
ZEdyb3VwTGF5b3V0KQorICAgIDogbV9iYWNraW5nKGJpbmRHcm91cExheW91dCkKK3sKK30KKwor
QmluZEdyb3VwTGF5b3V0SW1wbDo6fkJpbmRHcm91cExheW91dEltcGwoKQoreworICAgIHdncHVC
aW5kR3JvdXBMYXlvdXRSZWxlYXNlKG1fYmFja2luZyk7Cit9CisKK3ZvaWQgQmluZEdyb3VwTGF5
b3V0SW1wbDo6c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAgIHdn
cHVCaW5kR3JvdXBMYXlvdXRTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVsLnV0ZjgoKS5kYXRhKCkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVC
aW5kR3JvdXBMYXlvdXRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dl
YkdQVS9JbXBsL1dlYkdQVUJpbmRHcm91cExheW91dEltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OWI2NGI5
ZDMxN2YwNWVlZDAyNmYwMzc4MTMzMzJhYTg1NjA4YTI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVCaW5kR3JvdXBM
YXlvdXRJbXBsLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiV2ViR1BVQmluZEdyb3VwTGF5b3V0LmgiCisjaW5jbHVkZSA8V2ViR1BVL1dl
YkdQVS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBC
aW5kR3JvdXBMYXlvdXRJbXBsIGZpbmFsIDogcHVibGljIEJpbmRHcm91cExheW91dCB7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZjxCaW5kR3JvdXBMYXlvdXRJbXBsPiBjcmVhdGUoV0dQVUJpbmRH
cm91cExheW91dCBiaW5kR3JvdXBMYXlvdXQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBCaW5kR3JvdXBMYXlvdXRJbXBsKGJpbmRHcm91cExheW91dCkpOworICAgIH0KKwor
ICAgIHZpcnR1YWwgfkJpbmRHcm91cExheW91dEltcGwoKTsKKworICAgIFdHUFVCaW5kR3JvdXBM
YXlvdXQgYmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgor
ICAgIEJpbmRHcm91cExheW91dEltcGwoV0dQVUJpbmRHcm91cExheW91dCk7CisKKyAgICBCaW5k
R3JvdXBMYXlvdXRJbXBsKGNvbnN0IEJpbmRHcm91cExheW91dEltcGwmKSA9IGRlbGV0ZTsKKyAg
ICBCaW5kR3JvdXBMYXlvdXRJbXBsKEJpbmRHcm91cExheW91dEltcGwmJikgPSBkZWxldGU7Cisg
ICAgQmluZEdyb3VwTGF5b3V0SW1wbCYgb3BlcmF0b3I9KGNvbnN0IEJpbmRHcm91cExheW91dElt
cGwmKSA9IGRlbGV0ZTsKKyAgICBCaW5kR3JvdXBMYXlvdXRJbXBsJiBvcGVyYXRvcj0oQmluZEdy
b3VwTGF5b3V0SW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIHZvaWQgc2V0TGFiZWxJbnRlcm5hbChj
b25zdCBTdHJpbmcmKSBmaW5hbDsKKworICAgIFdHUFVCaW5kR3JvdXBMYXlvdXQgbV9iYWNraW5n
IHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBX
ZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BV
L0ltcGwvV2ViR1BVQnVmZmVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBo
aWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJ1ZmZlckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4MmQ5M2Q1
Yjg3YmM0OWE5MTgxODIyMjIyZjM1YTAyOWRiYTAzMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJ1ZmZlckltcGwu
Y3BwCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViR1BVQnVmZmVySW1wbC5oIgorCisjaW5jbHVkZSAiV2ViR1BVQ29udmVydFRv
QmFja2luZy5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFVFeHQuaD4KKworbmFtZXNwYWNlIFBB
TCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworQnVmZmVySW1wbDo6QnVmZmVySW1wbChXR1BVQnVm
ZmVyIGJ1ZmZlcikKKyAgICA6IG1fYmFja2luZyhidWZmZXIpCit7Cit9CisKK0J1ZmZlckltcGw6
On5CdWZmZXJJbXBsKCkKK3sKKyAgICB3Z3B1QnVmZmVyUmVsZWFzZShtX2JhY2tpbmcpOworfQor
Cit2b2lkIG1hcENhbGxiYWNrKFdHUFVCdWZmZXJNYXBBc3luY1N0YXR1cyBzdGF0dXMsIHZvaWQq
IHVzZXJkYXRhKQoreworICAgIGF1dG8gYnVmZmVyID0gYWRvcHRSZWYoKnN0YXRpY19jYXN0PEJ1
ZmZlckltcGwqPih1c2VyZGF0YSkpOyAvLyBhZG9wdFJlZiBpcyBiYWxhbmNlZCBieSBsZWFrUmVm
IGluIG1hcEFzeW5jKCkgYmVsb3cuIFdlIGhhdmUgdG8gZG8gdGhpcyBiZWNhdXNlIHdlJ3JlIHVz
aW5nIGEgQyBBUEkgd2l0aCBubyBjb25jZXB0IG9mIHJlZmVyZW5jZSBjb3VudGluZyBvciBibG9j
a3MuCisgICAgYnVmZmVyLT5tYXBDYWxsYmFjayhzdGF0dXMpOworfQorCit2b2lkIEJ1ZmZlcklt
cGw6Om1hcEFzeW5jKE1hcE1vZGVGbGFncyBtYXBNb2RlRmxhZ3MsIHN0ZDo6b3B0aW9uYWw8U2l6
ZTY0PiBvZmZzZXQsIHN0ZDo6b3B0aW9uYWw8U2l6ZTY0PiBzaXplLCBzdGQ6OmZ1bmN0aW9uPHZv
aWQoKT4mJiBjYWxsYmFjaykKK3sKKyAgICBSZWYgcHJvdGVjdGVkVGhpcygqdGhpcyk7CisKKyAg
ICBhdXRvIGJhY2tpbmdNYXBNb2RlRmxhZ3MgPSBjb252ZXJ0TWFwTW9kZUZsYWdzVG9CYWNraW5n
KG1hcE1vZGVGbGFncyk7CisKKyAgICBhdXRvIHVzZWRPZmZzZXQgPSBvZmZzZXQudmFsdWVfb3Io
MCk7CisgICAgYXV0byB1c2VkU2l6ZSA9IHNpemUudmFsdWVfb3IoV0dQVV9XSE9MRV9TSVpFKTsK
KworICAgIG1fY2FsbGJhY2tzLmFwcGVuZChXVEZNb3ZlKGNhbGxiYWNrKSk7CisKKyAgICAvLyBG
SVhNRTogQ2hlY2sgdGhlIGNhc3RzLgorICAgIHdncHVCdWZmZXJNYXBBc3luYyhtX2JhY2tpbmcs
IGJhY2tpbmdNYXBNb2RlRmxhZ3MsIHN0YXRpY19jYXN0PHNpemVfdD4odXNlZE9mZnNldCksIHN0
YXRpY19jYXN0PHNpemVfdD4odXNlZFNpemUpLCAmV2ViR1BVOjptYXBDYWxsYmFjaywgJnByb3Rl
Y3RlZFRoaXMubGVha1JlZigpKTsgLy8gbGVha1JlZiBpcyBiYWxhbmNlZCBieSBhZG9wdFJlZiBp
biBtYXBDYWxsYmFjaygpIGFib3ZlLiBXZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSdyZSB1
c2luZyBhIEMgQVBJIHdpdGggbm8gY29uY2VwdCBvZiByZWZlcmVuY2UgY291bnRpbmcgb3IgYmxv
Y2tzLgorfQorCit2b2lkIEJ1ZmZlckltcGw6Om1hcENhbGxiYWNrKFdHUFVCdWZmZXJNYXBBc3lu
Y1N0YXR1cyBzdGF0dXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXR1cyk7CisgICAgYXV0byBj
YWxsYmFjayA9IG1fY2FsbGJhY2tzLnRha2VGaXJzdCgpOworICAgIGNhbGxiYWNrKCk7Cit9CisK
K2F1dG8gQnVmZmVySW1wbDo6Z2V0TWFwcGVkUmFuZ2Uoc3RkOjpvcHRpb25hbDxTaXplNjQ+IG9m
ZnNldCwgc3RkOjpvcHRpb25hbDxTaXplNjQ+IHNpemUpIC0+IE1hcHBlZFJhbmdlCit7CisgICAg
YXV0byB1c2VkT2Zmc2V0ID0gb2Zmc2V0LnZhbHVlX29yKDApOworICAgIGF1dG8gdXNlZFNpemUg
PSBzaXplLnZhbHVlX29yKFdHUFVfV0hPTEVfU0laRSk7CisgICAgLy8gRklYTUU6IENoZWNrIHRo
ZSBjYXN0cy4KKyAgICBhdXRvKiBwb2ludGVyID0gd2dwdUJ1ZmZlckdldE1hcHBlZFJhbmdlKG1f
YmFja2luZywgc3RhdGljX2Nhc3Q8c2l6ZV90Pih1c2VkT2Zmc2V0KSwgc3RhdGljX2Nhc3Q8c2l6
ZV90Pih1c2VkU2l6ZSkpOworICAgIC8vIEZJWE1FOiBDaGVjayB0aGUgdHlwZSBuYXJyb3dpbmcu
CisgICAgcmV0dXJuIHsgcG9pbnRlciwgc3RhdGljX2Nhc3Q8c2l6ZV90Pih1c2VkU2l6ZSkgfTsK
K30KKwordm9pZCBCdWZmZXJJbXBsOjp1bm1hcCgpCit7CisgICAgd2dwdUJ1ZmZlclVubWFwKG1f
YmFja2luZyk7Cit9CisKK3ZvaWQgQnVmZmVySW1wbDo6ZGVzdHJveSgpCit7CisgICAgd2dwdUJ1
ZmZlckRlc3Ryb3kobV9iYWNraW5nKTsKK30KKwordm9pZCBCdWZmZXJJbXBsOjpzZXRMYWJlbElu
dGVybmFsKGNvbnN0IFN0cmluZyYgbGFiZWwpCit7CisgICAgd2dwdUJ1ZmZlclNldExhYmVsKG1f
YmFja2luZywgbGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBBTAor
fSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUJ1ZmZlckltcGwuaCBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQnVmZmVySW1wbC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmYzZjc1YTg2MjA3M2QwMDY2NWU4OGI4ZTc3NDk3ZWVjODllMzllYzUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQ
VUJ1ZmZlckltcGwuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJXZWJHUFVCdWZmZXIuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVLmg+
CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdl
YkdQVSB7CisKK2NsYXNzIEJ1ZmZlckltcGwgZmluYWwgOiBwdWJsaWMgQnVmZmVyIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUmVmPEJ1ZmZlckltcGw+IGNyZWF0ZShXR1BVQnVmZmVyIGJ1ZmZlcikK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJ1ZmZlckltcGwoYnVmZmVyKSk7
CisgICAgfQorCisgICAgdmlydHVhbCB+QnVmZmVySW1wbCgpOworCisgICAgV0dQVUJ1ZmZlciBi
YWNraW5nKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nOyB9CisKK3ByaXZhdGU6CisgICAgZnJp
ZW5kIHZvaWQgbWFwQ2FsbGJhY2soV0dQVUJ1ZmZlck1hcEFzeW5jU3RhdHVzLCB2b2lkKiB1c2Vy
ZGF0YSk7CisKKyAgICBCdWZmZXJJbXBsKFdHUFVCdWZmZXIpOworCisgICAgQnVmZmVySW1wbChj
b25zdCBCdWZmZXJJbXBsJikgPSBkZWxldGU7CisgICAgQnVmZmVySW1wbChCdWZmZXJJbXBsJiYp
ID0gZGVsZXRlOworICAgIEJ1ZmZlckltcGwmIG9wZXJhdG9yPShjb25zdCBCdWZmZXJJbXBsJikg
PSBkZWxldGU7CisgICAgQnVmZmVySW1wbCYgb3BlcmF0b3I9KEJ1ZmZlckltcGwmJikgPSBkZWxl
dGU7CisKKyAgICB2b2lkIG1hcENhbGxiYWNrKFdHUFVCdWZmZXJNYXBBc3luY1N0YXR1cyk7Cisg
ICAgdm9pZCBtYXBBc3luYyhNYXBNb2RlRmxhZ3MsIHN0ZDo6b3B0aW9uYWw8U2l6ZTY0PiBvZmZz
ZXQsIHN0ZDo6b3B0aW9uYWw8U2l6ZTY0PiBzaXplRm9yTWFwLCBzdGQ6OmZ1bmN0aW9uPHZvaWQo
KT4mJikgZmluYWw7CisgICAgTWFwcGVkUmFuZ2UgZ2V0TWFwcGVkUmFuZ2Uoc3RkOjpvcHRpb25h
bDxTaXplNjQ+IG9mZnNldCwgc3RkOjpvcHRpb25hbDxTaXplNjQ+KSBmaW5hbDsKKyAgICB2b2lk
IHVubWFwKCkgZmluYWw7CisKKyAgICB2b2lkIGRlc3Ryb3koKSBmaW5hbDsKKworICAgIHZvaWQg
c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5hbDsKKworICAgIFdHUFVCdWZmZXIg
bV9iYWNraW5nIHsgbnVsbHB0ciB9OworCisgICAgRGVxdWU8c3RkOjpmdW5jdGlvbjx2b2lkKCk+
PiBtX2NhbGxiYWNrczsKK307CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2Ug
V2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQ
VS9JbXBsL1dlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tbWFuZEJ1ZmZlckltcGwuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjE1NjU5ZmM2N2E3YjZkNDQ3ZjUxZWFkMGFlYmU5NTlhM2VhZDE1NzIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dl
YkdQVUNvbW1hbmRCdWZmZXJJbXBsLmNwcApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmgi
CisKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVRXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFt
ZXNwYWNlIFdlYkdQVSB7CisKK0NvbW1hbmRCdWZmZXJJbXBsOjpDb21tYW5kQnVmZmVySW1wbChX
R1BVQ29tbWFuZEJ1ZmZlciBjb21tYW5kQnVmZmVyKQorICAgIDogbV9iYWNraW5nKGNvbW1hbmRC
dWZmZXIpCit7Cit9CisKK0NvbW1hbmRCdWZmZXJJbXBsOjp+Q29tbWFuZEJ1ZmZlckltcGwoKQor
eworICAgIHdncHVDb21tYW5kQnVmZmVyUmVsZWFzZShtX2JhY2tpbmcpOworfQorCit2b2lkIENv
bW1hbmRCdWZmZXJJbXBsOjpzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYgbGFiZWwpCit7
CisgICAgd2dwdUNvbW1hbmRCdWZmZXJTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVsLnV0ZjgoKS5k
YXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9X
ZWJHUFVDb21tYW5kQnVmZmVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGlj
cy9XZWJHUFUvSW1wbC9XZWJHUFVDb21tYW5kQnVmZmVySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVhMmQ3
ZTg4NGNkZjFjZjE1OTcwYzkzYTBiNmI2ODQ2MzA1ZTliOTYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbW1hbmRC
dWZmZXJJbXBsLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiV2ViR1BVQ29tbWFuZEJ1ZmZlci5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJH
UFUuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworY2xhc3MgQ29t
bWFuZEJ1ZmZlckltcGwgZmluYWwgOiBwdWJsaWMgQ29tbWFuZEJ1ZmZlciB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFJlZjxDb21tYW5kQnVmZmVySW1wbD4gY3JlYXRlKFdHUFVDb21tYW5kQnVmZmVy
IGNvbW1hbmRCdWZmZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb21t
YW5kQnVmZmVySW1wbChjb21tYW5kQnVmZmVyKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+Q29t
bWFuZEJ1ZmZlckltcGwoKTsKKworICAgIFdHUFVDb21tYW5kQnVmZmVyIGJhY2tpbmcoKSBjb25z
dCB7IHJldHVybiBtX2JhY2tpbmc7IH0KKworcHJpdmF0ZToKKyAgICBDb21tYW5kQnVmZmVySW1w
bChXR1BVQ29tbWFuZEJ1ZmZlcik7CisKKyAgICBDb21tYW5kQnVmZmVySW1wbChjb25zdCBDb21t
YW5kQnVmZmVySW1wbCYpID0gZGVsZXRlOworICAgIENvbW1hbmRCdWZmZXJJbXBsKENvbW1hbmRC
dWZmZXJJbXBsJiYpID0gZGVsZXRlOworICAgIENvbW1hbmRCdWZmZXJJbXBsJiBvcGVyYXRvcj0o
Y29uc3QgQ29tbWFuZEJ1ZmZlckltcGwmKSA9IGRlbGV0ZTsKKyAgICBDb21tYW5kQnVmZmVySW1w
bCYgb3BlcmF0b3I9KENvbW1hbmRCdWZmZXJJbXBsJiYpID0gZGVsZXRlOworCisgICAgdm9pZCBz
ZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYpIGZpbmFsOworCisgICAgV0dQVUNvbW1hbmRC
dWZmZXIgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgUEFMCit9
IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwv
Z3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tbWFuZEVuY29kZXJJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tbWFuZEVuY29k
ZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MjIzMjY0ZmM1NzI4OGQ1ZmQ5NWJmNTM2NTM1MmE3MWFj
ZWU5ODA0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGlj
cy9XZWJHUFUvSW1wbC9XZWJHUFVDb21tYW5kRW5jb2RlckltcGwuY3BwCkBAIC0wLDAgKzEsMjc4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkdQVUNv
bW1hbmRFbmNvZGVySW1wbC5oIgorCisjaW5jbHVkZSAiV2ViR1BVQnVmZmVySW1wbC5oIgorI2lu
Y2x1ZGUgIldlYkdQVUNvbW1hbmRCdWZmZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVQ29tcHV0
ZVBhc3NFbmNvZGVySW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVUNvbnZlcnRUb0JhY2tpbmcuaCIK
KyNpbmNsdWRlICJXZWJHUFVRdWVyeVNldEltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVSZW5kZXJQ
YXNzRW5jb2RlckltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJlSW1wbC5oIgorI2luY2x1
ZGUgIldlYkdQVVRleHR1cmVWaWV3SW1wbC5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFVFeHQu
aD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworQ29tbWFuZEVuY29k
ZXJJbXBsOjpDb21tYW5kRW5jb2RlckltcGwoV0dQVUNvbW1hbmRFbmNvZGVyIENvbW1hbmRFbmNv
ZGVyKQorICAgIDogbV9iYWNraW5nKENvbW1hbmRFbmNvZGVyKQoreworfQorCitDb21tYW5kRW5j
b2RlckltcGw6On5Db21tYW5kRW5jb2RlckltcGwoKQoreworICAgIHdncHVDb21tYW5kRW5jb2Rl
clJlbGVhc2UobV9iYWNraW5nKTsKK30KKworUmVmPFJlbmRlclBhc3NFbmNvZGVyPiBDb21tYW5k
RW5jb2RlckltcGw6OmJlZ2luUmVuZGVyUGFzcyhjb25zdCBSZW5kZXJQYXNzRGVzY3JpcHRvciYg
ZGVzY3JpcHRvcikKK3sKKyAgICBWZWN0b3I8V0dQVVJlbmRlclBhc3NDb2xvckF0dGFjaG1lbnQ+
IGNvbG9yQXR0YWNobWVudHM7CisgICAgZm9yIChjb25zdCBhdXRvJiBjb2xvckF0dGFjaG1lbnQg
OiBkZXNjcmlwdG9yLmNvbG9yQXR0YWNobWVudHMpIHsKKyAgICAgICAgY29sb3JBdHRhY2htZW50
cy5hcHBlbmQoV0dQVVJlbmRlclBhc3NDb2xvckF0dGFjaG1lbnQgeworICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8Y29uc3QgVGV4dHVyZVZpZXdJbXBsJj4oY29sb3JBdHRhY2htZW50LnZpZXcpLmJh
Y2tpbmcoKSwKKyAgICAgICAgICAgIGNvbG9yQXR0YWNobWVudC5yZXNvbHZlVGFyZ2V0ID8gc3Rh
dGljX2Nhc3Q8Y29uc3QgVGV4dHVyZVZpZXdJbXBsJj4oKmNvbG9yQXR0YWNobWVudC5yZXNvbHZl
VGFyZ2V0KS5iYWNraW5nKCkgOiBudWxscHRyLAorICAgICAgICAgICAgc3RkOjpob2xkc19hbHRl
cm5hdGl2ZTxMb2FkT3A+KGNvbG9yQXR0YWNobWVudC5sb2FkVmFsdWUpID8gY29udmVydFRvQmFj
a2luZyhzdGQ6OmdldDxMb2FkT3A+KGNvbG9yQXR0YWNobWVudC5sb2FkVmFsdWUpKSA6IFdHUFVM
b2FkT3BfQ2xlYXIsCisgICAgICAgICAgICBjb252ZXJ0VG9CYWNraW5nKGNvbG9yQXR0YWNobWVu
dC5zdG9yZU9wKSwKKyAgICAgICAgICAgIFdURjo6c3dpdGNoT24oY29sb3JBdHRhY2htZW50Lmxv
YWRWYWx1ZSwgW10gKExvYWRPcCkgLT4gV0dQVUNvbG9yIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4geyAwLCAwLCAwLCAwIH07CisgICAgICAgICAgICB9LCBbXSAoY29uc3QgVmVjdG9yPGRvdWJs
ZT4mIHZlY3RvcikgLT4gV0dQVUNvbG9yIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gV0dQVUNv
bG9yIHsKKyAgICAgICAgICAgICAgICAgICAgdmVjdG9yLnNpemUoKSA+IDAgPyB2ZWN0b3JbMF0g
OiAwLAorICAgICAgICAgICAgICAgICAgICB2ZWN0b3Iuc2l6ZSgpID4gMSA/IHZlY3RvclsxXSA6
IDAsCisgICAgICAgICAgICAgICAgICAgIHZlY3Rvci5zaXplKCkgPiAyID8gdmVjdG9yWzJdIDog
MCwKKyAgICAgICAgICAgICAgICAgICAgdmVjdG9yLnNpemUoKSA+IDMgPyB2ZWN0b3JbM10gOiAw
LAorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9LCBbXSAoY29uc3QgQ29sb3JEaWN0
JiBjb2xvcikgLT4gV0dQVUNvbG9yIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gV0dQVUNvbG9y
IHsKKyAgICAgICAgICAgICAgICAgICAgY29sb3IuciwKKyAgICAgICAgICAgICAgICAgICAgY29s
b3IuZywKKyAgICAgICAgICAgICAgICAgICAgY29sb3IuYiwKKyAgICAgICAgICAgICAgICAgICAg
Y29sb3IuYSwKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSksCisgICAgICAgIH0p
OworICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8V0dQVVJlbmRlclBhc3NEZXB0aFN0ZW5jaWxB
dHRhY2htZW50PiBkZXB0aFN0ZW5jaWxBdHRhY2htZW50OworICAgIGlmIChkZXNjcmlwdG9yLmRl
cHRoU3RlbmNpbEF0dGFjaG1lbnQpIHsKKyAgICAgICAgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9
IFdHUFVSZW5kZXJQYXNzRGVwdGhTdGVuY2lsQXR0YWNobWVudCB7CisgICAgICAgICAgICBzdGF0
aWNfY2FzdDxjb25zdCBUZXh0dXJlVmlld0ltcGwmPihkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbEF0
dGFjaG1lbnQtPnZpZXcpLmJhY2tpbmcoKSwKKyAgICAgICAgICAgIHN0ZDo6aG9sZHNfYWx0ZXJu
YXRpdmU8TG9hZE9wPihkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQtPmRlcHRoTG9h
ZFZhbHVlKSA/IGNvbnZlcnRUb0JhY2tpbmcoc3RkOjpnZXQ8TG9hZE9wPihkZXNjcmlwdG9yLmRl
cHRoU3RlbmNpbEF0dGFjaG1lbnQtPmRlcHRoTG9hZFZhbHVlKSkgOiBXR1BVTG9hZE9wX0NsZWFy
LAorICAgICAgICAgICAgY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbEF0
dGFjaG1lbnQtPmRlcHRoU3RvcmVPcCksCisgICAgICAgICAgICBXVEY6OnN3aXRjaE9uKGRlc2Ny
aXB0b3IuZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+ZGVwdGhMb2FkVmFsdWUsIFtdIChMb2FkT3Ap
IC0+IGZsb2F0IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0sIFtd
IChmbG9hdCBjbGVhckRlcHRoKSAtPiBmbG9hdCB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNs
ZWFyRGVwdGg7CisgICAgICAgICAgICB9KSwKKyAgICAgICAgICAgIGRlc2NyaXB0b3IuZGVwdGhT
dGVuY2lsQXR0YWNobWVudC0+ZGVwdGhSZWFkT25seSwKKyAgICAgICAgICAgIHN0ZDo6aG9sZHNf
YWx0ZXJuYXRpdmU8TG9hZE9wPihkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQtPnN0
ZW5jaWxMb2FkVmFsdWUpID8gY29udmVydFRvQmFja2luZyhzdGQ6OmdldDxMb2FkT3A+KGRlc2Ny
aXB0b3IuZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+c3RlbmNpbExvYWRWYWx1ZSkpIDogV0dQVUxv
YWRPcF9DbGVhciwKKyAgICAgICAgICAgIGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci5kZXB0
aFN0ZW5jaWxBdHRhY2htZW50LT5zdGVuY2lsU3RvcmVPcCksCisgICAgICAgICAgICBXVEY6OnN3
aXRjaE9uKGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+c3RlbmNpbExvYWRWYWx1
ZSwgW10gKExvYWRPcCkgLT4gdWludDMyX3QgeworICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgfSwgW10gKFN0ZW5jaWxWYWx1ZSBjbGVhclN0ZW5jaWwpIC0+IHVpbnQzMl90
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xlYXJTdGVuY2lsOworICAgICAgICAgICAgfSks
CisgICAgICAgICAgICBkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQtPnN0ZW5jaWxS
ZWFkT25seSwKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBhdXRvIGxhYmVsID0gZGVzY3JpcHRv
ci5sYWJlbC51dGY4KCk7CisKKyAgICBXR1BVUmVuZGVyUGFzc0Rlc2NyaXB0b3IgYmFja2luZ0Rl
c2NyaXB0b3IgeworICAgICAgICBudWxscHRyLAorICAgICAgICBsYWJlbC5kYXRhKCksCisgICAg
ICAgIHN0YXRpY19jYXN0PHVpbnQzMl90Pihjb2xvckF0dGFjaG1lbnRzLnNpemUoKSksCisgICAg
ICAgIGNvbG9yQXR0YWNobWVudHMuZGF0YSgpLAorICAgICAgICBkZXB0aFN0ZW5jaWxBdHRhY2ht
ZW50ID8gJmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQudmFsdWUoKSA6IG51bGxwdHIsCisgICAgICAg
IGRlc2NyaXB0b3Iub2NjbHVzaW9uUXVlcnlTZXQgPyBzdGF0aWNfY2FzdDxjb25zdCBRdWVyeVNl
dEltcGwmPigqZGVzY3JpcHRvci5vY2NsdXNpb25RdWVyeVNldCkuYmFja2luZygpIDogbnVsbHB0
ciwKKyAgICB9OworCisgICAgcmV0dXJuIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6Y3JlYXRlKHdn
cHVDb21tYW5kRW5jb2RlckJlZ2luUmVuZGVyUGFzcyhtX2JhY2tpbmcsICZiYWNraW5nRGVzY3Jp
cHRvcikpOworfQorCitSZWY8Q29tcHV0ZVBhc3NFbmNvZGVyPiBDb21tYW5kRW5jb2RlckltcGw6
OmJlZ2luQ29tcHV0ZVBhc3MoY29uc3Qgc3RkOjpvcHRpb25hbDxDb21wdXRlUGFzc0Rlc2NyaXB0
b3I+JiBkZXNjcmlwdG9yKQoreworICAgIENTdHJpbmcgbGFiZWwgPSBkZXNjcmlwdG9yID8gZGVz
Y3JpcHRvci0+bGFiZWwudXRmOCgpIDogQ1N0cmluZygiIik7CisKKyAgICBXR1BVQ29tcHV0ZVBh
c3NEZXNjcmlwdG9yIGJhY2tpbmdEZXNjcmlwdG9yIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAg
ICAgbGFiZWwuZGF0YSgpLAorICAgIH07CisKKyAgICByZXR1cm4gQ29tcHV0ZVBhc3NFbmNvZGVy
SW1wbDo6Y3JlYXRlKHdncHVDb21tYW5kRW5jb2RlckJlZ2luQ29tcHV0ZVBhc3MobV9iYWNraW5n
LCAmYmFja2luZ0Rlc2NyaXB0b3IpKTsKK30KKwordm9pZCBDb21tYW5kRW5jb2RlckltcGw6OmNv
cHlCdWZmZXJUb0J1ZmZlcigKKyAgICBjb25zdCBCdWZmZXImIHNvdXJjZSwKKyAgICBTaXplNjQg
c291cmNlT2Zmc2V0LAorICAgIGNvbnN0IEJ1ZmZlciYgZGVzdGluYXRpb24sCisgICAgU2l6ZTY0
IGRlc3RpbmF0aW9uT2Zmc2V0LAorICAgIFNpemU2NCBzaXplKQoreworICAgIHdncHVDb21tYW5k
RW5jb2RlckNvcHlCdWZmZXJUb0J1ZmZlcihtX2JhY2tpbmcsIHN0YXRpY19jYXN0PGNvbnN0IEJ1
ZmZlckltcGwmPihzb3VyY2UpLmJhY2tpbmcoKSwgc291cmNlT2Zmc2V0LCBzdGF0aWNfY2FzdDxj
b25zdCBCdWZmZXJJbXBsJj4oZGVzdGluYXRpb24pLmJhY2tpbmcoKSwgZGVzdGluYXRpb25PZmZz
ZXQsIHNpemUpOworfQorCit2b2lkIENvbW1hbmRFbmNvZGVySW1wbDo6Y29weUJ1ZmZlclRvVGV4
dHVyZSgKKyAgICBjb25zdCBJbWFnZUNvcHlCdWZmZXImIHNvdXJjZSwKKyAgICBjb25zdCBJbWFn
ZUNvcHlUZXh0dXJlJiBkZXN0aW5hdGlvbiwKKyAgICBjb25zdCBFeHRlbnQzRCYgY29weVNpemUp
Cit7CisgICAgV0dQVUltYWdlQ29weUJ1ZmZlciBiYWNraW5nU291cmNlIHsKKyAgICAgICAgbnVs
bHB0ciwgeworICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgIHNvdXJjZS5vZmZzZXQs
CisgICAgICAgICAgICBzb3VyY2UuYnl0ZXNQZXJSb3cudmFsdWVfb3IoMCksCisgICAgICAgICAg
ICBzb3VyY2Uucm93c1BlckltYWdlLnZhbHVlX29yKDApLAorICAgICAgICB9LAorICAgICAgICBz
dGF0aWNfY2FzdDxjb25zdCBCdWZmZXJJbXBsJj4oc291cmNlLmJ1ZmZlcikuYmFja2luZygpLAor
ICAgIH07CisKKyAgICBXR1BVSW1hZ2VDb3B5VGV4dHVyZSBiYWNraW5nRGVzdGluYXRpb24gewor
ICAgICAgICBudWxscHRyLAorICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBUZXh0dXJlSW1wbCY+
KGRlc3RpbmF0aW9uLnRleHR1cmUpLmJhY2tpbmcoKSwKKyAgICAgICAgZGVzdGluYXRpb24ubWlw
TGV2ZWwsCisgICAgICAgIGRlc3RpbmF0aW9uLm9yaWdpbiA/IGNvbnZlcnRUb0JhY2tpbmcoKmRl
c3RpbmF0aW9uLm9yaWdpbikgOiBXR1BVT3JpZ2luM0QgeyAwLCAwLCAwIH0sCisgICAgICAgIGNv
bnZlcnRUb0JhY2tpbmcoZGVzdGluYXRpb24uYXNwZWN0KSwKKyAgICB9OworCisgICAgV0dQVUV4
dGVudDNEIGJhY2tpbmdDb3B5U2l6ZSA9IGNvbnZlcnRUb0JhY2tpbmcoY29weVNpemUpOworCisg
ICAgd2dwdUNvbW1hbmRFbmNvZGVyQ29weUJ1ZmZlclRvVGV4dHVyZShtX2JhY2tpbmcsICZiYWNr
aW5nU291cmNlLCAmYmFja2luZ0Rlc3RpbmF0aW9uLCAmYmFja2luZ0NvcHlTaXplKTsKK30KKwor
dm9pZCBDb21tYW5kRW5jb2RlckltcGw6OmNvcHlUZXh0dXJlVG9CdWZmZXIoCisgICAgY29uc3Qg
SW1hZ2VDb3B5VGV4dHVyZSYgc291cmNlLAorICAgIGNvbnN0IEltYWdlQ29weUJ1ZmZlciYgZGVz
dGluYXRpb24sCisgICAgY29uc3QgRXh0ZW50M0QmIGNvcHlTaXplKQoreworICAgIFdHUFVJbWFn
ZUNvcHlUZXh0dXJlIGJhY2tpbmdTb3VyY2UgeworICAgICAgICBudWxscHRyLAorICAgICAgICBz
dGF0aWNfY2FzdDxjb25zdCBUZXh0dXJlSW1wbCY+KHNvdXJjZS50ZXh0dXJlKS5iYWNraW5nKCks
CisgICAgICAgIHNvdXJjZS5taXBMZXZlbCwKKyAgICAgICAgc291cmNlLm9yaWdpbiA/IGNvbnZl
cnRUb0JhY2tpbmcoKnNvdXJjZS5vcmlnaW4pIDogV0dQVU9yaWdpbjNEIHsgMCwgMCwgMCB9LAor
ICAgICAgICBjb252ZXJ0VG9CYWNraW5nKHNvdXJjZS5hc3BlY3QpLAorICAgIH07CisKKyAgICBX
R1BVSW1hZ2VDb3B5QnVmZmVyIGJhY2tpbmdEZXN0aW5hdGlvbiB7CisgICAgICAgIG51bGxwdHIs
IHsKKyAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICBkZXN0aW5hdGlvbi5vZmZzZXQs
CisgICAgICAgICAgICBkZXN0aW5hdGlvbi5ieXRlc1BlclJvdy52YWx1ZV9vcigwKSwKKyAgICAg
ICAgICAgIGRlc3RpbmF0aW9uLnJvd3NQZXJJbWFnZS52YWx1ZV9vcigwKSwKKyAgICAgICAgfSwK
KyAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgQnVmZmVySW1wbCY+KGRlc3RpbmF0aW9uLmJ1ZmZl
cikuYmFja2luZygpLAorICAgIH07CisKKyAgICBXR1BVRXh0ZW50M0QgYmFja2luZ0NvcHlTaXpl
ID0gY29udmVydFRvQmFja2luZyhjb3B5U2l6ZSk7CisKKyAgICB3Z3B1Q29tbWFuZEVuY29kZXJD
b3B5VGV4dHVyZVRvQnVmZmVyKG1fYmFja2luZywgJmJhY2tpbmdTb3VyY2UsICZiYWNraW5nRGVz
dGluYXRpb24sICZiYWNraW5nQ29weVNpemUpOworfQorCit2b2lkIENvbW1hbmRFbmNvZGVySW1w
bDo6Y29weVRleHR1cmVUb1RleHR1cmUoCisgICAgY29uc3QgSW1hZ2VDb3B5VGV4dHVyZSYgc291
cmNlLAorICAgIGNvbnN0IEltYWdlQ29weVRleHR1cmUmIGRlc3RpbmF0aW9uLAorICAgIGNvbnN0
IEV4dGVudDNEJiBjb3B5U2l6ZSkKK3sKKyAgICBXR1BVSW1hZ2VDb3B5VGV4dHVyZSBiYWNraW5n
U291cmNlIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgVGV4
dHVyZUltcGwmPihzb3VyY2UudGV4dHVyZSkuYmFja2luZygpLAorICAgICAgICBzb3VyY2UubWlw
TGV2ZWwsCisgICAgICAgIHNvdXJjZS5vcmlnaW4gPyBjb252ZXJ0VG9CYWNraW5nKCpzb3VyY2Uu
b3JpZ2luKSA6IFdHUFVPcmlnaW4zRCB7IDAsIDAsIDAgfSwKKyAgICAgICAgY29udmVydFRvQmFj
a2luZyhzb3VyY2UuYXNwZWN0KSwKKyAgICB9OworCisgICAgV0dQVUltYWdlQ29weVRleHR1cmUg
YmFja2luZ0Rlc3RpbmF0aW9uIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgc3RhdGljX2Nh
c3Q8Y29uc3QgVGV4dHVyZUltcGwmPihkZXN0aW5hdGlvbi50ZXh0dXJlKS5iYWNraW5nKCksCisg
ICAgICAgIGRlc3RpbmF0aW9uLm1pcExldmVsLAorICAgICAgICBkZXN0aW5hdGlvbi5vcmlnaW4g
PyBjb252ZXJ0VG9CYWNraW5nKCpkZXN0aW5hdGlvbi5vcmlnaW4pIDogV0dQVU9yaWdpbjNEIHsg
MCwgMCwgMCB9LAorICAgICAgICBjb252ZXJ0VG9CYWNraW5nKGRlc3RpbmF0aW9uLmFzcGVjdCks
CisgICAgfTsKKworICAgIFdHUFVFeHRlbnQzRCBiYWNraW5nQ29weVNpemUgPSBjb252ZXJ0VG9C
YWNraW5nKGNvcHlTaXplKTsKKworICAgIHdncHVDb21tYW5kRW5jb2RlckNvcHlUZXh0dXJlVG9U
ZXh0dXJlKG1fYmFja2luZywgJmJhY2tpbmdTb3VyY2UsICZiYWNraW5nRGVzdGluYXRpb24sICZi
YWNraW5nQ29weVNpemUpOworfQorCit2b2lkIENvbW1hbmRFbmNvZGVySW1wbDo6ZmlsbEJ1ZmZl
cigKKyAgICBjb25zdCBCdWZmZXImIGRlc3RpbmF0aW9uLAorICAgIFNpemU2NCBkZXN0aW5hdGlv
bk9mZnNldCwKKyAgICBTaXplNjQgc2l6ZSkKK3sKKyAgICB3Z3B1Q29tbWFuZEVuY29kZXJGaWxs
QnVmZmVyKG1fYmFja2luZywgc3RhdGljX2Nhc3Q8Y29uc3QgQnVmZmVySW1wbCY+KGRlc3RpbmF0
aW9uKS5iYWNraW5nKCksIGRlc3RpbmF0aW9uT2Zmc2V0LCBzaXplKTsKK30KKwordm9pZCBDb21t
YW5kRW5jb2RlckltcGw6OnB1c2hEZWJ1Z0dyb3VwKFN0cmluZyYmIGdyb3VwTGFiZWwpCit7Cisg
ICAgd2dwdUNvbW1hbmRFbmNvZGVyUHVzaERlYnVnR3JvdXAobV9iYWNraW5nLCBncm91cExhYmVs
LnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIENvbW1hbmRFbmNvZGVySW1wbDo6cG9wRGVidWdH
cm91cCgpCit7CisgICAgd2dwdUNvbW1hbmRFbmNvZGVyUG9wRGVidWdHcm91cChtX2JhY2tpbmcp
OworfQorCit2b2lkIENvbW1hbmRFbmNvZGVySW1wbDo6aW5zZXJ0RGVidWdNYXJrZXIoU3RyaW5n
JiYgbWFya2VyTGFiZWwpCit7CisgICAgd2dwdUNvbW1hbmRFbmNvZGVySW5zZXJ0RGVidWdNYXJr
ZXIobV9iYWNraW5nLCBtYXJrZXJMYWJlbC51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBDb21t
YW5kRW5jb2RlckltcGw6OndyaXRlVGltZXN0YW1wKGNvbnN0IFF1ZXJ5U2V0JiBxdWVyeVNldCwg
U2l6ZTMyIHF1ZXJ5SW5kZXgpCit7CisgICAgd2dwdUNvbW1hbmRFbmNvZGVyV3JpdGVUaW1lc3Rh
bXAobV9iYWNraW5nLCBzdGF0aWNfY2FzdDxjb25zdCBRdWVyeVNldEltcGwmPihxdWVyeVNldCku
YmFja2luZygpLCBxdWVyeUluZGV4KTsKK30KKwordm9pZCBDb21tYW5kRW5jb2RlckltcGw6OnJl
c29sdmVRdWVyeVNldCgKKyAgICBjb25zdCBRdWVyeVNldCYgcXVlcnlTZXQsCisgICAgU2l6ZTMy
IGZpcnN0UXVlcnksCisgICAgU2l6ZTMyIHF1ZXJ5Q291bnQsCisgICAgY29uc3QgQnVmZmVyJiBk
ZXN0aW5hdGlvbiwKKyAgICBTaXplNjQgZGVzdGluYXRpb25PZmZzZXQpCit7CisgICAgd2dwdUNv
bW1hbmRFbmNvZGVyUmVzb2x2ZVF1ZXJ5U2V0KG1fYmFja2luZywgc3RhdGljX2Nhc3Q8Y29uc3Qg
UXVlcnlTZXRJbXBsJj4ocXVlcnlTZXQpLmJhY2tpbmcoKSwgZmlyc3RRdWVyeSwgcXVlcnlDb3Vu
dCwgc3RhdGljX2Nhc3Q8Y29uc3QgQnVmZmVySW1wbCY+KGRlc3RpbmF0aW9uKS5iYWNraW5nKCks
IGRlc3RpbmF0aW9uT2Zmc2V0KTsKK30KKworUmVmPENvbW1hbmRCdWZmZXI+IENvbW1hbmRFbmNv
ZGVySW1wbDo6ZmluaXNoKGNvbnN0IENvbW1hbmRCdWZmZXJEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
KQoreworICAgIGF1dG8gbGFiZWwgPSBkZXNjcmlwdG9yLmxhYmVsLnV0ZjgoKTsKKworICAgIFdH
UFVDb21tYW5kQnVmZmVyRGVzY3JpcHRvciBiYWNraW5nRGVzY3JpcHRvciB7CisgICAgICAgIG51
bGxwdHIsCisgICAgICAgIGxhYmVsLmRhdGEoKSwKKyAgICB9OworCisgICAgcmV0dXJuIENvbW1h
bmRCdWZmZXJJbXBsOjpjcmVhdGUod2dwdUNvbW1hbmRFbmNvZGVyRmluaXNoKG1fYmFja2luZywg
JmJhY2tpbmdEZXNjcmlwdG9yKSk7Cit9CisKK3ZvaWQgQ29tbWFuZEVuY29kZXJJbXBsOjpzZXRM
YWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYgbGFiZWwpCit7CisgICAgd2dwdUNvbW1hbmRFbmNv
ZGVyU2V0TGFiZWwobV9iYWNraW5nLCBsYWJlbC51dGY4KCkuZGF0YSgpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tbWFuZEVuY29kZXJJ
bXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQ
VUNvbW1hbmRFbmNvZGVySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4MGFhYWM4NjA3MTJlNGM3NWFjZTE5
MTc3MTc2YzQxNTI5YWE4MmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbW1hbmRFbmNvZGVySW1wbC5oCkBAIC0w
LDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJXZWJH
UFVDb21tYW5kRW5jb2Rlci5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFUuaD4KKworbmFtZXNw
YWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworY2xhc3MgQ29tbWFuZEVuY29kZXJJbXBs
IGZpbmFsIDogcHVibGljIENvbW1hbmRFbmNvZGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PENvbW1hbmRFbmNvZGVySW1wbD4gY3JlYXRlKFdHUFVDb21tYW5kRW5jb2RlciBDb21tYW5kRW5j
b2RlcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbW1hbmRFbmNvZGVy
SW1wbChDb21tYW5kRW5jb2RlcikpOworICAgIH0KKworICAgIHZpcnR1YWwgfkNvbW1hbmRFbmNv
ZGVySW1wbCgpOworCisgICAgV0dQVUNvbW1hbmRFbmNvZGVyIGJhY2tpbmcoKSBjb25zdCB7IHJl
dHVybiBtX2JhY2tpbmc7IH0KKworcHJpdmF0ZToKKyAgICBDb21tYW5kRW5jb2RlckltcGwoV0dQ
VUNvbW1hbmRFbmNvZGVyKTsKKworICAgIENvbW1hbmRFbmNvZGVySW1wbChjb25zdCBDb21tYW5k
RW5jb2RlckltcGwmKSA9IGRlbGV0ZTsKKyAgICBDb21tYW5kRW5jb2RlckltcGwoQ29tbWFuZEVu
Y29kZXJJbXBsJiYpID0gZGVsZXRlOworICAgIENvbW1hbmRFbmNvZGVySW1wbCYgb3BlcmF0b3I9
KGNvbnN0IENvbW1hbmRFbmNvZGVySW1wbCYpID0gZGVsZXRlOworICAgIENvbW1hbmRFbmNvZGVy
SW1wbCYgb3BlcmF0b3I9KENvbW1hbmRFbmNvZGVySW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIFJl
ZjxSZW5kZXJQYXNzRW5jb2Rlcj4gYmVnaW5SZW5kZXJQYXNzKGNvbnN0IFJlbmRlclBhc3NEZXNj
cmlwdG9yJikgZmluYWw7CisgICAgUmVmPENvbXB1dGVQYXNzRW5jb2Rlcj4gYmVnaW5Db21wdXRl
UGFzcyhjb25zdCBzdGQ6Om9wdGlvbmFsPENvbXB1dGVQYXNzRGVzY3JpcHRvcj4mKSBmaW5hbDsK
KworICAgIHZvaWQgY29weUJ1ZmZlclRvQnVmZmVyKAorICAgICAgICBjb25zdCBCdWZmZXImIHNv
dXJjZSwKKyAgICAgICAgU2l6ZTY0IHNvdXJjZU9mZnNldCwKKyAgICAgICAgY29uc3QgQnVmZmVy
JiBkZXN0aW5hdGlvbiwKKyAgICAgICAgU2l6ZTY0IGRlc3RpbmF0aW9uT2Zmc2V0LAorICAgICAg
ICBTaXplNjQpIGZpbmFsOworCisgICAgdm9pZCBjb3B5QnVmZmVyVG9UZXh0dXJlKAorICAgICAg
ICBjb25zdCBJbWFnZUNvcHlCdWZmZXImIHNvdXJjZSwKKyAgICAgICAgY29uc3QgSW1hZ2VDb3B5
VGV4dHVyZSYgZGVzdGluYXRpb24sCisgICAgICAgIGNvbnN0IEV4dGVudDNEJiBjb3B5U2l6ZSkg
ZmluYWw7CisKKyAgICB2b2lkIGNvcHlUZXh0dXJlVG9CdWZmZXIoCisgICAgICAgIGNvbnN0IElt
YWdlQ29weVRleHR1cmUmIHNvdXJjZSwKKyAgICAgICAgY29uc3QgSW1hZ2VDb3B5QnVmZmVyJiBk
ZXN0aW5hdGlvbiwKKyAgICAgICAgY29uc3QgRXh0ZW50M0QmIGNvcHlTaXplKSBmaW5hbDsKKwor
ICAgIHZvaWQgY29weVRleHR1cmVUb1RleHR1cmUoCisgICAgICAgIGNvbnN0IEltYWdlQ29weVRl
eHR1cmUmIHNvdXJjZSwKKyAgICAgICAgY29uc3QgSW1hZ2VDb3B5VGV4dHVyZSYgZGVzdGluYXRp
b24sCisgICAgICAgIGNvbnN0IEV4dGVudDNEJiBjb3B5U2l6ZSkgZmluYWw7CisKKyAgICB2b2lk
IGZpbGxCdWZmZXIoCisgICAgICAgIGNvbnN0IEJ1ZmZlciYgZGVzdGluYXRpb24sCisgICAgICAg
IFNpemU2NCBkZXN0aW5hdGlvbk9mZnNldCwKKyAgICAgICAgU2l6ZTY0KSBmaW5hbDsKKworICAg
IHZvaWQgcHVzaERlYnVnR3JvdXAoU3RyaW5nJiYgZ3JvdXBMYWJlbCkgZmluYWw7CisgICAgdm9p
ZCBwb3BEZWJ1Z0dyb3VwKCkgZmluYWw7CisgICAgdm9pZCBpbnNlcnREZWJ1Z01hcmtlcihTdHJp
bmcmJiBtYXJrZXJMYWJlbCkgZmluYWw7CisKKyAgICB2b2lkIHdyaXRlVGltZXN0YW1wKGNvbnN0
IFF1ZXJ5U2V0JiwgU2l6ZTMyIHF1ZXJ5SW5kZXgpIGZpbmFsOworCisgICAgdm9pZCByZXNvbHZl
UXVlcnlTZXQoCisgICAgICAgIGNvbnN0IFF1ZXJ5U2V0JiwKKyAgICAgICAgU2l6ZTMyIGZpcnN0
UXVlcnksCisgICAgICAgIFNpemUzMiBxdWVyeUNvdW50LAorICAgICAgICBjb25zdCBCdWZmZXIm
IGRlc3RpbmF0aW9uLAorICAgICAgICBTaXplNjQgZGVzdGluYXRpb25PZmZzZXQpIGZpbmFsOwor
CisgICAgUmVmPENvbW1hbmRCdWZmZXI+IGZpbmlzaChjb25zdCBDb21tYW5kQnVmZmVyRGVzY3Jp
cHRvciYpIGZpbmFsOworCisgICAgdm9pZCBzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYp
IGZpbmFsOworCisgICAgV0dQVUNvbW1hbmRFbmNvZGVyIG1fYmFja2luZyB7IG51bGxwdHIgfTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNv
bXB1dGVQYXNzRW5jb2RlckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGlj
cy9XZWJHUFUvSW1wbC9XZWJHUFVDb21wdXRlUGFzc0VuY29kZXJJbXBsLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hYmMxNmQ0NGE4YTM0YTk4YjE1YWRjMTJiOTcwYmUxOGJhOGUyZWJhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVD
b21wdXRlUGFzc0VuY29kZXJJbXBsLmNwcApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVDb21wdXRlUGFzc0VuY29kZXJJ
bXBsLmgiCisKKyNpbmNsdWRlICJXZWJHUFVCaW5kR3JvdXBJbXBsLmgiCisjaW5jbHVkZSAiV2Vi
R1BVQnVmZmVySW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVUNvbXB1dGVQaXBlbGluZUltcGwuaCIK
KyNpbmNsdWRlICJXZWJHUFVRdWVyeVNldEltcGwuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BV
RXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK0NvbXB1dGVQ
YXNzRW5jb2RlckltcGw6OkNvbXB1dGVQYXNzRW5jb2RlckltcGwoV0dQVUNvbXB1dGVQYXNzRW5j
b2RlciBjb21wdXRlUGFzc0VuY29kZXIpCisgICAgOiBtX2JhY2tpbmcoY29tcHV0ZVBhc3NFbmNv
ZGVyKQoreworfQorCitDb21wdXRlUGFzc0VuY29kZXJJbXBsOjp+Q29tcHV0ZVBhc3NFbmNvZGVy
SW1wbCgpCit7CisgICAgd2dwdUNvbXB1dGVQYXNzRW5jb2RlclJlbGVhc2UobV9iYWNraW5nKTsK
K30KKwordm9pZCBDb21wdXRlUGFzc0VuY29kZXJJbXBsOjpzZXRQaXBlbGluZShjb25zdCBDb21w
dXRlUGlwZWxpbmUmIGNvbXB1dGVQaXBlbGluZSkKK3sKKyAgICB3Z3B1Q29tcHV0ZVBhc3NFbmNv
ZGVyU2V0UGlwZWxpbmUobV9iYWNraW5nLCBzdGF0aWNfY2FzdDxjb25zdCBDb21wdXRlUGlwZWxp
bmVJbXBsJj4oY29tcHV0ZVBpcGVsaW5lKS5iYWNraW5nKCkpOworfQorCit2b2lkIENvbXB1dGVQ
YXNzRW5jb2RlckltcGw6OmRpc3BhdGNoKFNpemUzMiB4LCBzdGQ6Om9wdGlvbmFsPFNpemUzMj4g
eSwgc3RkOjpvcHRpb25hbDxTaXplMzI+IHopCit7CisgICAgd2dwdUNvbXB1dGVQYXNzRW5jb2Rl
ckRpc3BhdGNoKG1fYmFja2luZywgeCwgeS52YWx1ZV9vcigxKSwgei52YWx1ZV9vcigxKSk7Cit9
CisKK3ZvaWQgQ29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6ZGlzcGF0Y2hJbmRpcmVjdChjb25zdCBC
dWZmZXImIGluZGlyZWN0QnVmZmVyLCBTaXplNjQgaW5kaXJlY3RPZmZzZXQpCit7CisgICAgd2dw
dUNvbXB1dGVQYXNzRW5jb2RlckRpc3BhdGNoSW5kaXJlY3QobV9iYWNraW5nLCBzdGF0aWNfY2Fz
dDxjb25zdCBCdWZmZXJJbXBsJj4oaW5kaXJlY3RCdWZmZXIpLmJhY2tpbmcoKSwgaW5kaXJlY3RP
ZmZzZXQpOworfQorCit2b2lkIENvbXB1dGVQYXNzRW5jb2RlckltcGw6OmJlZ2luUGlwZWxpbmVT
dGF0aXN0aWNzUXVlcnkoY29uc3QgUXVlcnlTZXQmIHF1ZXJ5U2V0LCBTaXplMzIgcXVlcnlJbmRl
eCkKK3sKKyAgICB3Z3B1Q29tcHV0ZVBhc3NFbmNvZGVyQmVnaW5QaXBlbGluZVN0YXRpc3RpY3NR
dWVyeShtX2JhY2tpbmcsIHN0YXRpY19jYXN0PGNvbnN0IFF1ZXJ5U2V0SW1wbCY+KHF1ZXJ5U2V0
KS5iYWNraW5nKCksIHF1ZXJ5SW5kZXgpOworfQorCit2b2lkIENvbXB1dGVQYXNzRW5jb2Rlcklt
cGw6OmVuZFBpcGVsaW5lU3RhdGlzdGljc1F1ZXJ5KCkKK3sKKyAgICB3Z3B1Q29tcHV0ZVBhc3NF
bmNvZGVyRW5kUGlwZWxpbmVTdGF0aXN0aWNzUXVlcnkobV9iYWNraW5nKTsKK30KKwordm9pZCBD
b21wdXRlUGFzc0VuY29kZXJJbXBsOjplbmRQYXNzKCkKK3sKKyAgICB3Z3B1Q29tcHV0ZVBhc3NF
bmNvZGVyRW5kUGFzcyhtX2JhY2tpbmcpOworfQorCit2b2lkIENvbXB1dGVQYXNzRW5jb2Rlcklt
cGw6OnNldEJpbmRHcm91cChJbmRleDMyIGluZGV4LCBjb25zdCBCaW5kR3JvdXAmIGJpbmRHcm91
cCwKKyAgICBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxCdWZmZXJEeW5hbWljT2Zmc2V0Pj4mJiBvZmZz
ZXRzKQoreworICAgIGF1dG8gYmFja2luZ09mZnNldHMgPSBvZmZzZXRzLnZhbHVlX29yKFZlY3Rv
cjxCdWZmZXJEeW5hbWljT2Zmc2V0PiB7IH0pOworICAgIHdncHVDb21wdXRlUGFzc0VuY29kZXJT
ZXRCaW5kR3JvdXAobV9iYWNraW5nLCBpbmRleCwgc3RhdGljX2Nhc3Q8Y29uc3QgQmluZEdyb3Vw
SW1wbCY+KGJpbmRHcm91cCkuYmFja2luZygpLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYmFja2lu
Z09mZnNldHMuc2l6ZSgpKSwgYmFja2luZ09mZnNldHMuZGF0YSgpKTsKK30KKwordm9pZCBDb21w
dXRlUGFzc0VuY29kZXJJbXBsOjpzZXRCaW5kR3JvdXAoSW5kZXgzMiBpbmRleCwgY29uc3QgQmlu
ZEdyb3VwJiBiaW5kR3JvdXAsCisgICAgY29uc3QgdWludDMyX3QqIGR5bmFtaWNPZmZzZXRzQXJy
YXlCdWZmZXIsCisgICAgc2l6ZV90IGR5bmFtaWNPZmZzZXRzQXJyYXlCdWZmZXJMZW5ndGgsCisg
ICAgU2l6ZTY0IGR5bmFtaWNPZmZzZXRzRGF0YVN0YXJ0LAorICAgIFNpemUzMiBkeW5hbWljT2Zm
c2V0c0RhdGFMZW5ndGgpCit7CisgICAgVU5VU0VEX1BBUkFNKGR5bmFtaWNPZmZzZXRzQXJyYXlC
dWZmZXJMZW5ndGgpOworICAgIC8vIEZJWE1FOiBVc2UgY2hlY2tlZCBhbGdlYnJhLgorICAgIHdn
cHVDb21wdXRlUGFzc0VuY29kZXJTZXRCaW5kR3JvdXAobV9iYWNraW5nLCBpbmRleCwgc3RhdGlj
X2Nhc3Q8Y29uc3QgQmluZEdyb3VwSW1wbCY+KGJpbmRHcm91cCkuYmFja2luZygpLCBkeW5hbWlj
T2Zmc2V0c0RhdGFMZW5ndGgsIGR5bmFtaWNPZmZzZXRzQXJyYXlCdWZmZXIgKyBkeW5hbWljT2Zm
c2V0c0RhdGFTdGFydCk7Cit9CisKK3ZvaWQgQ29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6cHVzaERl
YnVnR3JvdXAoU3RyaW5nJiYgZ3JvdXBMYWJlbCkKK3sKKyAgICB3Z3B1Q29tcHV0ZVBhc3NFbmNv
ZGVyUHVzaERlYnVnR3JvdXAobV9iYWNraW5nLCBncm91cExhYmVsLnV0ZjgoKS5kYXRhKCkpOwor
fQorCit2b2lkIENvbXB1dGVQYXNzRW5jb2RlckltcGw6OnBvcERlYnVnR3JvdXAoKQoreworICAg
IHdncHVDb21wdXRlUGFzc0VuY29kZXJQb3BEZWJ1Z0dyb3VwKG1fYmFja2luZyk7Cit9CisKK3Zv
aWQgQ29tcHV0ZVBhc3NFbmNvZGVySW1wbDo6aW5zZXJ0RGVidWdNYXJrZXIoU3RyaW5nJiYgbWFy
a2VyTGFiZWwpCit7CisgICAgd2dwdUNvbXB1dGVQYXNzRW5jb2Rlckluc2VydERlYnVnTWFya2Vy
KG1fYmFja2luZywgbWFya2VyTGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgQ29tcHV0
ZVBhc3NFbmNvZGVySW1wbDo6c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQor
eworICAgIHdncHVDb21wdXRlUGFzc0VuY29kZXJTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVsLnV0
ZjgoKS5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdl
YkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUv
SW1wbC9XZWJHUFVDb21wdXRlUGFzc0VuY29kZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUNvbXB1dGVQYXNzRW5jb2RlckltcGwuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xYmU4YWRkZjIzZmY3YWFmYzdkNmVhMDU2MzA4NTc3ZWUyZGU5MGJlCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1w
bC9XZWJHUFVDb21wdXRlUGFzc0VuY29kZXJJbXBsLmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVQ29tcHV0ZVBhc3NFbmNvZGVy
LmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVz
cGFjZSBXZWJHUFUgeworCitjbGFzcyBDb21wdXRlUGFzc0VuY29kZXJJbXBsIGZpbmFsIDogcHVi
bGljIENvbXB1dGVQYXNzRW5jb2RlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxDb21wdXRl
UGFzc0VuY29kZXJJbXBsPiBjcmVhdGUoV0dQVUNvbXB1dGVQYXNzRW5jb2RlciBjb21wdXRlUGFz
c0VuY29kZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb21wdXRlUGFz
c0VuY29kZXJJbXBsKGNvbXB1dGVQYXNzRW5jb2RlcikpOworICAgIH0KKworICAgIHZpcnR1YWwg
fkNvbXB1dGVQYXNzRW5jb2RlckltcGwoKTsKKworICAgIFdHUFVDb21wdXRlUGFzc0VuY29kZXIg
YmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgorICAgIENv
bXB1dGVQYXNzRW5jb2RlckltcGwoV0dQVUNvbXB1dGVQYXNzRW5jb2Rlcik7CisKKyAgICBDb21w
dXRlUGFzc0VuY29kZXJJbXBsKGNvbnN0IENvbXB1dGVQYXNzRW5jb2RlckltcGwmKSA9IGRlbGV0
ZTsKKyAgICBDb21wdXRlUGFzc0VuY29kZXJJbXBsKENvbXB1dGVQYXNzRW5jb2RlckltcGwmJikg
PSBkZWxldGU7CisgICAgQ29tcHV0ZVBhc3NFbmNvZGVySW1wbCYgb3BlcmF0b3I9KGNvbnN0IENv
bXB1dGVQYXNzRW5jb2RlckltcGwmKSA9IGRlbGV0ZTsKKyAgICBDb21wdXRlUGFzc0VuY29kZXJJ
bXBsJiBvcGVyYXRvcj0oQ29tcHV0ZVBhc3NFbmNvZGVySW1wbCYmKSA9IGRlbGV0ZTsKKworICAg
IHZvaWQgc2V0UGlwZWxpbmUoY29uc3QgQ29tcHV0ZVBpcGVsaW5lJikgZmluYWw7CisgICAgdm9p
ZCBkaXNwYXRjaChTaXplMzIgeCwgc3RkOjpvcHRpb25hbDxTaXplMzI+IHksIHN0ZDo6b3B0aW9u
YWw8U2l6ZTMyPikgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaEluZGlyZWN0KGNvbnN0IEJ1ZmZl
ciYgaW5kaXJlY3RCdWZmZXIsIFNpemU2NCBpbmRpcmVjdE9mZnNldCkgZmluYWw7CisKKyAgICB2
b2lkIGJlZ2luUGlwZWxpbmVTdGF0aXN0aWNzUXVlcnkoY29uc3QgUXVlcnlTZXQmLCBTaXplMzIg
cXVlcnlJbmRleCkgZmluYWw7CisgICAgdm9pZCBlbmRQaXBlbGluZVN0YXRpc3RpY3NRdWVyeSgp
IGZpbmFsOworCisgICAgdm9pZCBlbmRQYXNzKCkgZmluYWw7CisKKyAgICB2b2lkIHNldEJpbmRH
cm91cChJbmRleDMyLCBjb25zdCBCaW5kR3JvdXAmLAorICAgICAgICBzdGQ6Om9wdGlvbmFsPFZl
Y3RvcjxCdWZmZXJEeW5hbWljT2Zmc2V0Pj4mJikgZmluYWw7CisKKyAgICB2b2lkIHNldEJpbmRH
cm91cChJbmRleDMyLCBjb25zdCBCaW5kR3JvdXAmLAorICAgICAgICBjb25zdCB1aW50MzJfdCog
ZHluYW1pY09mZnNldHNBcnJheUJ1ZmZlciwKKyAgICAgICAgc2l6ZV90IGR5bmFtaWNPZmZzZXRz
QXJyYXlCdWZmZXJMZW5ndGgsCisgICAgICAgIFNpemU2NCBkeW5hbWljT2Zmc2V0c0RhdGFTdGFy
dCwKKyAgICAgICAgU2l6ZTMyIGR5bmFtaWNPZmZzZXRzRGF0YUxlbmd0aCkgZmluYWw7CisKKyAg
ICB2b2lkIHB1c2hEZWJ1Z0dyb3VwKFN0cmluZyYmIGdyb3VwTGFiZWwpIGZpbmFsOworICAgIHZv
aWQgcG9wRGVidWdHcm91cCgpIGZpbmFsOworICAgIHZvaWQgaW5zZXJ0RGVidWdNYXJrZXIoU3Ry
aW5nJiYgbWFya2VyTGFiZWwpIGZpbmFsOworCisgICAgdm9pZCBzZXRMYWJlbEludGVybmFsKGNv
bnN0IFN0cmluZyYpIGZpbmFsOworCisgICAgV0dQVUNvbXB1dGVQYXNzRW5jb2RlciBtX2JhY2tp
bmcgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNl
IFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJH
UFUvSW1wbC9XZWJHUFVDb21wdXRlUGlwZWxpbmVJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tcHV0ZVBpcGVsaW5lSW1wbC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMmE4ZTk3M2Q0YWNiNzZiYmUxYWExZDBhMWY4YjM0Njk2M2NiODRhMgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0lt
cGwvV2ViR1BVQ29tcHV0ZVBpcGVsaW5lSW1wbC5jcHAKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVDb21wdXRlUGlwZWxp
bmVJbXBsLmgiCisKKyNpbmNsdWRlICJXZWJHUFVCaW5kR3JvdXBMYXlvdXRJbXBsLmgiCisjaW5j
bHVkZSA8V2ViR1BVL1dlYkdQVUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBX
ZWJHUFUgeworCitDb21wdXRlUGlwZWxpbmVJbXBsOjpDb21wdXRlUGlwZWxpbmVJbXBsKFdHUFVD
b21wdXRlUGlwZWxpbmUgY29tcHV0ZVBpcGVsaW5lKQorICAgIDogbV9iYWNraW5nKGNvbXB1dGVQ
aXBlbGluZSkKK3sKK30KKworQ29tcHV0ZVBpcGVsaW5lSW1wbDo6fkNvbXB1dGVQaXBlbGluZUlt
cGwoKQoreworICAgIHdncHVDb21wdXRlUGlwZWxpbmVSZWxlYXNlKG1fYmFja2luZyk7Cit9CisK
K1JlZjxCaW5kR3JvdXBMYXlvdXQ+IENvbXB1dGVQaXBlbGluZUltcGw6OmdldEJpbmRHcm91cExh
eW91dCh1aW50MzJfdCBpbmRleCkKK3sKKyAgICByZXR1cm4gQmluZEdyb3VwTGF5b3V0SW1wbDo6
Y3JlYXRlKHdncHVDb21wdXRlUGlwZWxpbmVHZXRCaW5kR3JvdXBMYXlvdXQobV9iYWNraW5nLCBp
bmRleCkpOworfQorCit2b2lkIENvbXB1dGVQaXBlbGluZUltcGw6OnNldExhYmVsSW50ZXJuYWwo
Y29uc3QgU3RyaW5nJiBsYWJlbCkKK3sKKyAgICB3Z3B1Q29tcHV0ZVBpcGVsaW5lU2V0TGFiZWwo
bV9iYWNraW5nLCBsYWJlbC51dGY4KCkuZGF0YSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgUEFM
Cit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tcHV0ZVBpcGVsaW5lSW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVDb21wdXRlUGlw
ZWxpbmVJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDQ2MjZjZmE0MGUyMmUyOTIzZGI1YmJmZmI1ZjE0MGFk
NmFmYWFjYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhp
Y3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29tcHV0ZVBpcGVsaW5lSW1wbC5oCkBAIC0wLDAgKzEsNjEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYkdQVUNvbXB1dGVQ
aXBlbGluZS5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFUuaD4KKworbmFtZXNwYWNlIFBBTCB7
CituYW1lc3BhY2UgV2ViR1BVIHsKKworY2xhc3MgQ29tcHV0ZVBpcGVsaW5lSW1wbCBmaW5hbCA6
IHB1YmxpYyBDb21wdXRlUGlwZWxpbmUgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8Q29tcHV0
ZVBpcGVsaW5lSW1wbD4gY3JlYXRlKFdHUFVDb21wdXRlUGlwZWxpbmUgY29tcHV0ZVBpcGVsaW5l
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29tcHV0ZVBpcGVsaW5lSW1w
bChjb21wdXRlUGlwZWxpbmUpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5Db21wdXRlUGlwZWxp
bmVJbXBsKCk7CisKKyAgICBXR1BVQ29tcHV0ZVBpcGVsaW5lIGJhY2tpbmcoKSBjb25zdCB7IHJl
dHVybiBtX2JhY2tpbmc7IH0KKworcHJpdmF0ZToKKyAgICBDb21wdXRlUGlwZWxpbmVJbXBsKFdH
UFVDb21wdXRlUGlwZWxpbmUpOworCisgICAgQ29tcHV0ZVBpcGVsaW5lSW1wbChjb25zdCBDb21w
dXRlUGlwZWxpbmVJbXBsJikgPSBkZWxldGU7CisgICAgQ29tcHV0ZVBpcGVsaW5lSW1wbChDb21w
dXRlUGlwZWxpbmVJbXBsJiYpID0gZGVsZXRlOworICAgIENvbXB1dGVQaXBlbGluZUltcGwmIG9w
ZXJhdG9yPShjb25zdCBDb21wdXRlUGlwZWxpbmVJbXBsJikgPSBkZWxldGU7CisgICAgQ29tcHV0
ZVBpcGVsaW5lSW1wbCYgb3BlcmF0b3I9KENvbXB1dGVQaXBlbGluZUltcGwmJikgPSBkZWxldGU7
CisKKyAgICBSZWY8QmluZEdyb3VwTGF5b3V0PiBnZXRCaW5kR3JvdXBMYXlvdXQodWludDMyX3Qg
aW5kZXgpIGZpbmFsOworCisgICAgdm9pZCBzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYp
IGZpbmFsOworCisgICAgV0dQVUNvbXB1dGVQaXBlbGluZSBtX2JhY2tpbmcgeyBudWxscHRyIH07
Cit9OworCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVD
b252ZXJ0VG9CYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2Vi
R1BVL0ltcGwvV2ViR1BVQ29udmVydFRvQmFja2luZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTI1NmZjNGY2
NDYyNWZmNDc4ZjVhNzc4M2JhNWFmZTMxZjIyZGVmNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29udmVydFRvQmFj
a2luZy5jcHAKQEAgLTAsMCArMSw4MDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViR1BVQ29udmVydFRvQmFja2luZy5oIgorCisjaW5jbHVkZSA8V2Vi
R1BVL1dlYkdQVUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgewor
CitXR1BVQWRkcmVzc01vZGUgY29udmVydFRvQmFja2luZyhBZGRyZXNzTW9kZSBhZGRyZXNzTW9k
ZSkKK3sKKyAgICBzd2l0Y2ggKGFkZHJlc3NNb2RlKSB7CisgICAgY2FzZSBBZGRyZXNzTW9kZTo6
Q2xhbXBUb0VkZ2U6CisgICAgICAgIHJldHVybiBXR1BVQWRkcmVzc01vZGVfQ2xhbXBUb0VkZ2U7
CisgICAgY2FzZSBBZGRyZXNzTW9kZTo6UmVwZWF0OgorICAgICAgICByZXR1cm4gV0dQVUFkZHJl
c3NNb2RlX1JlcGVhdDsKKyAgICBjYXNlIEFkZHJlc3NNb2RlOjpNaXJyb3JSZXBlYXQ6CisgICAg
ICAgIHJldHVybiBXR1BVQWRkcmVzc01vZGVfTWlycm9yUmVwZWF0OworICAgIH0KK30KKworV0dQ
VUJsZW5kRmFjdG9yIGNvbnZlcnRUb0JhY2tpbmcoQmxlbmRGYWN0b3IgYmxlbmRGYWN0b3IpCit7
CisgICAgc3dpdGNoIChibGVuZEZhY3RvcikgeworICAgIGNhc2UgQmxlbmRGYWN0b3I6Olplcm86
CisgICAgICAgIHJldHVybiBXR1BVQmxlbmRGYWN0b3JfWmVybzsKKyAgICBjYXNlIEJsZW5kRmFj
dG9yOjpPbmU6CisgICAgICAgIHJldHVybiBXR1BVQmxlbmRGYWN0b3JfT25lOworICAgIGNhc2Ug
QmxlbmRGYWN0b3I6OlNyYzoKKyAgICAgICAgcmV0dXJuIFdHUFVCbGVuZEZhY3Rvcl9TcmM7Cisg
ICAgY2FzZSBCbGVuZEZhY3Rvcjo6T25lTWludXNTcmM6CisgICAgICAgIHJldHVybiBXR1BVQmxl
bmRGYWN0b3JfT25lTWludXNTcmM7CisgICAgY2FzZSBCbGVuZEZhY3Rvcjo6U3JjQWxwaGE6Cisg
ICAgICAgIHJldHVybiBXR1BVQmxlbmRGYWN0b3JfU3JjQWxwaGE7CisgICAgY2FzZSBCbGVuZEZh
Y3Rvcjo6T25lTWludXNTcmNBbHBoYToKKyAgICAgICAgcmV0dXJuIFdHUFVCbGVuZEZhY3Rvcl9P
bmVNaW51c1NyY0FscGhhOworICAgIGNhc2UgQmxlbmRGYWN0b3I6OkRzdDoKKyAgICAgICAgcmV0
dXJuIFdHUFVCbGVuZEZhY3Rvcl9Ec3Q7CisgICAgY2FzZSBCbGVuZEZhY3Rvcjo6T25lTWludXNE
c3Q6CisgICAgICAgIHJldHVybiBXR1BVQmxlbmRGYWN0b3JfT25lTWludXNEc3Q7CisgICAgY2Fz
ZSBCbGVuZEZhY3Rvcjo6RHN0QWxwaGE6CisgICAgICAgIHJldHVybiBXR1BVQmxlbmRGYWN0b3Jf
RHN0QWxwaGE7CisgICAgY2FzZSBCbGVuZEZhY3Rvcjo6T25lTWludXNEc3RBbHBoYToKKyAgICAg
ICAgcmV0dXJuIFdHUFVCbGVuZEZhY3Rvcl9PbmVNaW51c0RzdEFscGhhOworICAgIGNhc2UgQmxl
bmRGYWN0b3I6OlNyY0FscGhhU2F0dXJhdGVkOgorICAgICAgICByZXR1cm4gV0dQVUJsZW5kRmFj
dG9yX1NyY0FscGhhU2F0dXJhdGVkOworICAgIGNhc2UgQmxlbmRGYWN0b3I6OkNvbnN0YW50Ogor
ICAgICAgICByZXR1cm4gV0dQVUJsZW5kRmFjdG9yX0NvbnN0YW50OworICAgIGNhc2UgQmxlbmRG
YWN0b3I6Ok9uZU1pbnVzQ29uc3RhbnQ6CisgICAgICAgIHJldHVybiBXR1BVQmxlbmRGYWN0b3Jf
T25lTWludXNDb25zdGFudDsKKyAgICB9Cit9CisKK1dHUFVCbGVuZE9wZXJhdGlvbiBjb252ZXJ0
VG9CYWNraW5nKEJsZW5kT3BlcmF0aW9uIGJsZW5kT3BlcmF0aW9uKQoreworICAgIHN3aXRjaCAo
YmxlbmRPcGVyYXRpb24pIHsKKyAgICBjYXNlIEJsZW5kT3BlcmF0aW9uOjpBZGQ6CisgICAgICAg
IHJldHVybiBXR1BVQmxlbmRPcGVyYXRpb25fQWRkOworICAgIGNhc2UgQmxlbmRPcGVyYXRpb246
OlN1YnRyYWN0OgorICAgICAgICByZXR1cm4gV0dQVUJsZW5kT3BlcmF0aW9uX1N1YnRyYWN0Owor
ICAgIGNhc2UgQmxlbmRPcGVyYXRpb246OlJldmVyc2VTdWJ0cmFjdDoKKyAgICAgICAgcmV0dXJu
IFdHUFVCbGVuZE9wZXJhdGlvbl9SZXZlcnNlU3VidHJhY3Q7CisgICAgY2FzZSBCbGVuZE9wZXJh
dGlvbjo6TWluOgorICAgICAgICByZXR1cm4gV0dQVUJsZW5kT3BlcmF0aW9uX01pbjsKKyAgICBj
YXNlIEJsZW5kT3BlcmF0aW9uOjpNYXg6CisgICAgICAgIHJldHVybiBXR1BVQmxlbmRPcGVyYXRp
b25fTWF4OworICAgIH0KK30KKworV0dQVUJ1ZmZlckJpbmRpbmdUeXBlIGNvbnZlcnRUb0JhY2tp
bmcoQnVmZmVyQmluZGluZ1R5cGUgYnVmZmVyQmluZGluZ1R5cGUpCit7CisgICAgc3dpdGNoIChi
dWZmZXJCaW5kaW5nVHlwZSkgeworICAgIGNhc2UgQnVmZmVyQmluZGluZ1R5cGU6OlVuaWZvcm06
CisgICAgICAgIHJldHVybiBXR1BVQnVmZmVyQmluZGluZ1R5cGVfVW5pZm9ybTsKKyAgICBjYXNl
IEJ1ZmZlckJpbmRpbmdUeXBlOjpTdG9yYWdlOgorICAgICAgICByZXR1cm4gV0dQVUJ1ZmZlckJp
bmRpbmdUeXBlX1N0b3JhZ2U7CisgICAgY2FzZSBCdWZmZXJCaW5kaW5nVHlwZTo6UmVhZE9ubHlT
dG9yYWdlOgorICAgICAgICByZXR1cm4gV0dQVUJ1ZmZlckJpbmRpbmdUeXBlX1JlYWRPbmx5U3Rv
cmFnZTsKKyAgICB9Cit9CisKK1dHUFVDb21wYXJlRnVuY3Rpb24gY29udmVydFRvQmFja2luZyhD
b21wYXJlRnVuY3Rpb24gY29tcGFyZUZ1bmN0aW9uKQoreworICAgIHN3aXRjaCAoY29tcGFyZUZ1
bmN0aW9uKSB7CisgICAgY2FzZSBDb21wYXJlRnVuY3Rpb246Ok5ldmVyOgorICAgICAgICByZXR1
cm4gV0dQVUNvbXBhcmVGdW5jdGlvbl9OZXZlcjsKKyAgICBjYXNlIENvbXBhcmVGdW5jdGlvbjo6
TGVzczoKKyAgICAgICAgcmV0dXJuIFdHUFVDb21wYXJlRnVuY3Rpb25fTGVzczsKKyAgICBjYXNl
IENvbXBhcmVGdW5jdGlvbjo6RXF1YWw6CisgICAgICAgIHJldHVybiBXR1BVQ29tcGFyZUZ1bmN0
aW9uX0VxdWFsOworICAgIGNhc2UgQ29tcGFyZUZ1bmN0aW9uOjpMZXNzRXF1YWw6CisgICAgICAg
IHJldHVybiBXR1BVQ29tcGFyZUZ1bmN0aW9uX0xlc3NFcXVhbDsKKyAgICBjYXNlIENvbXBhcmVG
dW5jdGlvbjo6R3JlYXRlcjoKKyAgICAgICAgcmV0dXJuIFdHUFVDb21wYXJlRnVuY3Rpb25fR3Jl
YXRlcjsKKyAgICBjYXNlIENvbXBhcmVGdW5jdGlvbjo6Tm90RXF1YWw6CisgICAgICAgIHJldHVy
biBXR1BVQ29tcGFyZUZ1bmN0aW9uX05vdEVxdWFsOworICAgIGNhc2UgQ29tcGFyZUZ1bmN0aW9u
OjpHcmVhdGVyRXF1YWw6CisgICAgICAgIHJldHVybiBXR1BVQ29tcGFyZUZ1bmN0aW9uX0dyZWF0
ZXJFcXVhbDsKKyAgICBjYXNlIENvbXBhcmVGdW5jdGlvbjo6QWx3YXlzOgorICAgICAgICByZXR1
cm4gV0dQVUNvbXBhcmVGdW5jdGlvbl9BbHdheXM7CisgICAgfQorfQorCitXR1BVQ29tcGlsYXRp
b25NZXNzYWdlVHlwZSBjb252ZXJ0VG9CYWNraW5nKENvbXBpbGF0aW9uTWVzc2FnZVR5cGUgY29t
cGlsYXRpb25NZXNzYWdlVHlwZSkKK3sKKyAgICBzd2l0Y2ggKGNvbXBpbGF0aW9uTWVzc2FnZVR5
cGUpIHsKKyAgICBjYXNlIENvbXBpbGF0aW9uTWVzc2FnZVR5cGU6OkVycm9yOgorICAgICAgICBy
ZXR1cm4gV0dQVUNvbXBpbGF0aW9uTWVzc2FnZVR5cGVfRXJyb3I7CisgICAgY2FzZSBDb21waWxh
dGlvbk1lc3NhZ2VUeXBlOjpXYXJuaW5nOgorICAgICAgICByZXR1cm4gV0dQVUNvbXBpbGF0aW9u
TWVzc2FnZVR5cGVfV2FybmluZzsKKyAgICBjYXNlIENvbXBpbGF0aW9uTWVzc2FnZVR5cGU6Oklu
Zm86CisgICAgICAgIHJldHVybiBXR1BVQ29tcGlsYXRpb25NZXNzYWdlVHlwZV9JbmZvOworICAg
IH0KK30KKworV0dQVUN1bGxNb2RlIGNvbnZlcnRUb0JhY2tpbmcoQ3VsbE1vZGUgY3VsbE1vZGUp
Cit7CisgICAgc3dpdGNoIChjdWxsTW9kZSkgeworICAgIGNhc2UgQ3VsbE1vZGU6Ok5vbmU6Cisg
ICAgICAgIHJldHVybiBXR1BVQ3VsbE1vZGVfTm9uZTsKKyAgICBjYXNlIEN1bGxNb2RlOjpGcm9u
dDoKKyAgICAgICAgcmV0dXJuIFdHUFVDdWxsTW9kZV9Gcm9udDsKKyAgICBjYXNlIEN1bGxNb2Rl
OjpCYWNrOgorICAgICAgICByZXR1cm4gV0dQVUN1bGxNb2RlX0JhY2s7CisgICAgfQorfQorCitX
R1BVRXJyb3JGaWx0ZXIgY29udmVydFRvQmFja2luZyhFcnJvckZpbHRlciBlcnJvckZpbHRlcikK
K3sKKyAgICBzd2l0Y2ggKGVycm9yRmlsdGVyKSB7CisgICAgY2FzZSBFcnJvckZpbHRlcjo6T3V0
T2ZNZW1vcnk6CisgICAgICAgIHJldHVybiBXR1BVRXJyb3JGaWx0ZXJfT3V0T2ZNZW1vcnk7Cisg
ICAgY2FzZSBFcnJvckZpbHRlcjo6VmFsaWRhdGlvbjoKKyAgICAgICAgcmV0dXJuIFdHUFVFcnJv
ckZpbHRlcl9WYWxpZGF0aW9uOworICAgIH0KK30KKworV0dQVUZlYXR1cmVOYW1lIGNvbnZlcnRU
b0JhY2tpbmcoRmVhdHVyZU5hbWUgZmVhdHVyZU5hbWUpCit7CisgICAgc3dpdGNoIChmZWF0dXJl
TmFtZSkgeworICAgIGNhc2UgRmVhdHVyZU5hbWU6OkRlcHRoQ2xpcENvbnRyb2w6CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxXR1BVRmVhdHVyZU5hbWU+KFdHUFVGZWF0dXJlTmFtZV9EZXB0
aENsaXBDb250cm9sKTsKKyAgICBjYXNlIEZlYXR1cmVOYW1lOjpEZXB0aDI0dW5vcm1TdGVuY2ls
ODoKKyAgICAgICAgcmV0dXJuIFdHUFVGZWF0dXJlTmFtZV9EZXB0aDI0VW5vcm1TdGVuY2lsODsK
KyAgICBjYXNlIEZlYXR1cmVOYW1lOjpEZXB0aDMyZmxvYXRTdGVuY2lsODoKKyAgICAgICAgcmV0
dXJuIFdHUFVGZWF0dXJlTmFtZV9EZXB0aDMyRmxvYXRTdGVuY2lsODsKKyAgICBjYXNlIEZlYXR1
cmVOYW1lOjpQaXBlbGluZVN0YXRpc3RpY3NRdWVyeToKKyAgICAgICAgcmV0dXJuIFdHUFVGZWF0
dXJlTmFtZV9QaXBlbGluZVN0YXRpc3RpY3NRdWVyeTsKKyAgICBjYXNlIEZlYXR1cmVOYW1lOjpU
ZXh0dXJlQ29tcHJlc3Npb25CYzoKKyAgICAgICAgcmV0dXJuIFdHUFVGZWF0dXJlTmFtZV9UZXh0
dXJlQ29tcHJlc3Npb25CQzsKKyAgICBjYXNlIEZlYXR1cmVOYW1lOjpUZXh0dXJlQ29tcHJlc3Np
b25FdGMyOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVUZlYXR1cmVOYW1lPihXR1BV
RmVhdHVyZU5hbWVfVGV4dHVyZUNvbXByZXNzaW9uRVRDMik7CisgICAgY2FzZSBGZWF0dXJlTmFt
ZTo6VGV4dHVyZUNvbXByZXNzaW9uQXN0YzoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdH
UFVGZWF0dXJlTmFtZT4oV0dQVUZlYXR1cmVOYW1lX1RleHR1cmVDb21wcmVzc2lvbkFTVEMpOwor
ICAgIGNhc2UgRmVhdHVyZU5hbWU6OlRpbWVzdGFtcFF1ZXJ5OgorICAgICAgICByZXR1cm4gV0dQ
VUZlYXR1cmVOYW1lX1RpbWVzdGFtcFF1ZXJ5OworICAgIGNhc2UgRmVhdHVyZU5hbWU6OkluZGly
ZWN0Rmlyc3RJbnN0YW5jZToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVGZWF0dXJl
TmFtZT4oV0dQVUZlYXR1cmVOYW1lX0luZGlyZWN0Rmlyc3RJbnN0YW5jZSk7CisgICAgfQorfQor
CitXR1BVRmlsdGVyTW9kZSBjb252ZXJ0VG9CYWNraW5nKEZpbHRlck1vZGUgZmlsdGVyTW9kZSkK
K3sKKyAgICBzd2l0Y2ggKGZpbHRlck1vZGUpIHsKKyAgICBjYXNlIEZpbHRlck1vZGU6Ok5lYXJl
c3Q6CisgICAgICAgIHJldHVybiBXR1BVRmlsdGVyTW9kZV9OZWFyZXN0OworICAgIGNhc2UgRmls
dGVyTW9kZTo6TGluZWFyOgorICAgICAgICByZXR1cm4gV0dQVUZpbHRlck1vZGVfTGluZWFyOwor
ICAgIH0KK30KKworV0dQVUZyb250RmFjZSBjb252ZXJ0VG9CYWNraW5nKEZyb250RmFjZSBmcm9u
dEZhY2UpCit7CisgICAgc3dpdGNoIChmcm9udEZhY2UpIHsKKyAgICBjYXNlIEZyb250RmFjZTo6
Q0NXOgorICAgICAgICByZXR1cm4gV0dQVUZyb250RmFjZV9DQ1c7CisgICAgY2FzZSBGcm9udEZh
Y2U6OkNXOgorICAgICAgICByZXR1cm4gV0dQVUZyb250RmFjZV9DVzsKKyAgICB9Cit9CisKK1dH
UFVJbmRleEZvcm1hdCBjb252ZXJ0VG9CYWNraW5nKEluZGV4Rm9ybWF0IGluZGV4Rm9ybWF0KQor
eworICAgIHN3aXRjaCAoaW5kZXhGb3JtYXQpIHsKKyAgICBjYXNlIEluZGV4Rm9ybWF0OjpVaW50
MTY6CisgICAgICAgIHJldHVybiBXR1BVSW5kZXhGb3JtYXRfVWludDE2OworICAgIGNhc2UgSW5k
ZXhGb3JtYXQ6OlVpbnQzMjoKKyAgICAgICAgcmV0dXJuIFdHUFVJbmRleEZvcm1hdF9VaW50MzI7
CisgICAgfQorfQorCitXR1BVTG9hZE9wIGNvbnZlcnRUb0JhY2tpbmcoTG9hZE9wIGxvYWRPcCkK
K3sKKyAgICBzd2l0Y2ggKGxvYWRPcCkgeworICAgIGNhc2UgTG9hZE9wOjpMb2FkOgorICAgICAg
ICByZXR1cm4gV0dQVUxvYWRPcF9Mb2FkOworICAgIH0KK30KKworV0dQVVBpcGVsaW5lU3RhdGlz
dGljTmFtZSBjb252ZXJ0VG9CYWNraW5nKFBpcGVsaW5lU3RhdGlzdGljTmFtZSBwaXBlbGluZVN0
YXRpc3RpY05hbWUpCit7CisgICAgc3dpdGNoIChwaXBlbGluZVN0YXRpc3RpY05hbWUpIHsKKyAg
ICBjYXNlIFBpcGVsaW5lU3RhdGlzdGljTmFtZTo6VmVydGV4U2hhZGVySW52b2NhdGlvbnM6Cisg
ICAgICAgIHJldHVybiBXR1BVUGlwZWxpbmVTdGF0aXN0aWNOYW1lX1ZlcnRleFNoYWRlckludm9j
YXRpb25zOworICAgIGNhc2UgUGlwZWxpbmVTdGF0aXN0aWNOYW1lOjpDbGlwcGVySW52b2NhdGlv
bnM6CisgICAgICAgIHJldHVybiBXR1BVUGlwZWxpbmVTdGF0aXN0aWNOYW1lX0NsaXBwZXJJbnZv
Y2F0aW9uczsKKyAgICBjYXNlIFBpcGVsaW5lU3RhdGlzdGljTmFtZTo6Q2xpcHBlclByaW1pdGl2
ZXNPdXQ6CisgICAgICAgIHJldHVybiBXR1BVUGlwZWxpbmVTdGF0aXN0aWNOYW1lX0NsaXBwZXJQ
cmltaXRpdmVzT3V0OworICAgIGNhc2UgUGlwZWxpbmVTdGF0aXN0aWNOYW1lOjpGcmFnbWVudFNo
YWRlckludm9jYXRpb25zOgorICAgICAgICByZXR1cm4gV0dQVVBpcGVsaW5lU3RhdGlzdGljTmFt
ZV9GcmFnbWVudFNoYWRlckludm9jYXRpb25zOworICAgIGNhc2UgUGlwZWxpbmVTdGF0aXN0aWNO
YW1lOjpDb21wdXRlU2hhZGVySW52b2NhdGlvbnM6CisgICAgICAgIHJldHVybiBXR1BVUGlwZWxp
bmVTdGF0aXN0aWNOYW1lX0NvbXB1dGVTaGFkZXJJbnZvY2F0aW9uczsKKyAgICB9Cit9CisKK1dH
UFVQb3dlclByZWZlcmVuY2UgY29udmVydFRvQmFja2luZyhQb3dlclByZWZlcmVuY2UgcG93ZXJQ
cmVmZXJlbmNlKQoreworICAgIHN3aXRjaCAocG93ZXJQcmVmZXJlbmNlKSB7CisgICAgY2FzZSBQ
b3dlclByZWZlcmVuY2U6Okxvd1Bvd2VyOgorICAgICAgICByZXR1cm4gV0dQVVBvd2VyUHJlZmVy
ZW5jZV9Mb3dQb3dlcjsKKyAgICBjYXNlIFBvd2VyUHJlZmVyZW5jZTo6SGlnaFBlcmZvcm1hbmNl
OgorICAgICAgICByZXR1cm4gV0dQVVBvd2VyUHJlZmVyZW5jZV9IaWdoUGVyZm9ybWFuY2U7Cisg
ICAgfQorfQorCitXR1BVUHJpbWl0aXZlVG9wb2xvZ3kgY29udmVydFRvQmFja2luZyhQcmltaXRp
dmVUb3BvbG9neSBwcmltaXRpdmVUb3BvbG9neSkKK3sKKyAgICBzd2l0Y2ggKHByaW1pdGl2ZVRv
cG9sb2d5KSB7CisgICAgY2FzZSBQcmltaXRpdmVUb3BvbG9neTo6UG9pbnRMaXN0OgorICAgICAg
ICByZXR1cm4gV0dQVVByaW1pdGl2ZVRvcG9sb2d5X1BvaW50TGlzdDsKKyAgICBjYXNlIFByaW1p
dGl2ZVRvcG9sb2d5OjpMaW5lTGlzdDoKKyAgICAgICAgcmV0dXJuIFdHUFVQcmltaXRpdmVUb3Bv
bG9neV9MaW5lTGlzdDsKKyAgICBjYXNlIFByaW1pdGl2ZVRvcG9sb2d5OjpMaW5lU3RyaXA6Cisg
ICAgICAgIHJldHVybiBXR1BVUHJpbWl0aXZlVG9wb2xvZ3lfTGluZVN0cmlwOworICAgIGNhc2Ug
UHJpbWl0aXZlVG9wb2xvZ3k6OlRyaWFuZ2xlTGlzdDoKKyAgICAgICAgcmV0dXJuIFdHUFVQcmlt
aXRpdmVUb3BvbG9neV9UcmlhbmdsZUxpc3Q7CisgICAgY2FzZSBQcmltaXRpdmVUb3BvbG9neTo6
VHJpYW5nbGVTdHJpcDoKKyAgICAgICAgcmV0dXJuIFdHUFVQcmltaXRpdmVUb3BvbG9neV9Ucmlh
bmdsZVN0cmlwOworICAgIH0KK30KKworV0dQVVF1ZXJ5VHlwZSBjb252ZXJ0VG9CYWNraW5nKFF1
ZXJ5VHlwZSBxdWVyeVR5cGUpCit7CisgICAgc3dpdGNoIChxdWVyeVR5cGUpIHsKKyAgICBjYXNl
IFF1ZXJ5VHlwZTo6T2NjbHVzaW9uOgorICAgICAgICByZXR1cm4gV0dQVVF1ZXJ5VHlwZV9PY2Ns
dXNpb247CisgICAgY2FzZSBRdWVyeVR5cGU6OlBpcGVsaW5lU3RhdGlzdGljczoKKyAgICAgICAg
cmV0dXJuIFdHUFVRdWVyeVR5cGVfUGlwZWxpbmVTdGF0aXN0aWNzOworICAgIGNhc2UgUXVlcnlU
eXBlOjpUaW1lc3RhbXA6CisgICAgICAgIHJldHVybiBXR1BVUXVlcnlUeXBlX1RpbWVzdGFtcDsK
KyAgICB9Cit9CisKK1dHUFVTYW1wbGVyQmluZGluZ1R5cGUgY29udmVydFRvQmFja2luZyhTYW1w
bGVyQmluZGluZ1R5cGUgc2FtcGxlckJpbmRpbmdUeXBlKQoreworICAgIHN3aXRjaCAoc2FtcGxl
ckJpbmRpbmdUeXBlKSB7CisgICAgY2FzZSBTYW1wbGVyQmluZGluZ1R5cGU6OkZpbHRlcmluZzoK
KyAgICAgICAgcmV0dXJuIFdHUFVTYW1wbGVyQmluZGluZ1R5cGVfRmlsdGVyaW5nOworICAgIGNh
c2UgU2FtcGxlckJpbmRpbmdUeXBlOjpOb25GaWx0ZXJpbmc6CisgICAgICAgIHJldHVybiBXR1BV
U2FtcGxlckJpbmRpbmdUeXBlX05vbkZpbHRlcmluZzsKKyAgICBjYXNlIFNhbXBsZXJCaW5kaW5n
VHlwZTo6Q29tcGFyaXNvbjoKKyAgICAgICAgcmV0dXJuIFdHUFVTYW1wbGVyQmluZGluZ1R5cGVf
Q29tcGFyaXNvbjsKKyAgICB9Cit9CisKK1dHUFVTdGVuY2lsT3BlcmF0aW9uIGNvbnZlcnRUb0Jh
Y2tpbmcoU3RlbmNpbE9wZXJhdGlvbiBzdGVuY2lsT3BlcmF0aW9uKQoreworICAgIHN3aXRjaCAo
c3RlbmNpbE9wZXJhdGlvbikgeworICAgIGNhc2UgU3RlbmNpbE9wZXJhdGlvbjo6S2VlcDoKKyAg
ICAgICAgcmV0dXJuIFdHUFVTdGVuY2lsT3BlcmF0aW9uX0tlZXA7CisgICAgY2FzZSBTdGVuY2ls
T3BlcmF0aW9uOjpaZXJvOgorICAgICAgICByZXR1cm4gV0dQVVN0ZW5jaWxPcGVyYXRpb25fWmVy
bzsKKyAgICBjYXNlIFN0ZW5jaWxPcGVyYXRpb246OlJlcGxhY2U6CisgICAgICAgIHJldHVybiBX
R1BVU3RlbmNpbE9wZXJhdGlvbl9SZXBsYWNlOworICAgIGNhc2UgU3RlbmNpbE9wZXJhdGlvbjo6
SW52ZXJ0OgorICAgICAgICByZXR1cm4gV0dQVVN0ZW5jaWxPcGVyYXRpb25fSW52ZXJ0OworICAg
IGNhc2UgU3RlbmNpbE9wZXJhdGlvbjo6SW5jcmVtZW50Q2xhbXA6CisgICAgICAgIHJldHVybiBX
R1BVU3RlbmNpbE9wZXJhdGlvbl9JbmNyZW1lbnRDbGFtcDsKKyAgICBjYXNlIFN0ZW5jaWxPcGVy
YXRpb246OkRlY3JlbWVudENsYW1wOgorICAgICAgICByZXR1cm4gV0dQVVN0ZW5jaWxPcGVyYXRp
b25fRGVjcmVtZW50Q2xhbXA7CisgICAgY2FzZSBTdGVuY2lsT3BlcmF0aW9uOjpJbmNyZW1lbnRX
cmFwOgorICAgICAgICByZXR1cm4gV0dQVVN0ZW5jaWxPcGVyYXRpb25fSW5jcmVtZW50V3JhcDsK
KyAgICBjYXNlIFN0ZW5jaWxPcGVyYXRpb246OkRlY3JlbWVudFdyYXA6CisgICAgICAgIHJldHVy
biBXR1BVU3RlbmNpbE9wZXJhdGlvbl9EZWNyZW1lbnRXcmFwOworICAgIH0KK30KKworV0dQVVN0
b3JhZ2VUZXh0dXJlQWNjZXNzIGNvbnZlcnRUb0JhY2tpbmcoU3RvcmFnZVRleHR1cmVBY2Nlc3Mg
c3RvcmFnZVRleHR1cmVBY2Nlc3MpCit7CisgICAgc3dpdGNoIChzdG9yYWdlVGV4dHVyZUFjY2Vz
cykgeworICAgIGNhc2UgU3RvcmFnZVRleHR1cmVBY2Nlc3M6OldyaXRlT25seToKKyAgICAgICAg
cmV0dXJuIFdHUFVTdG9yYWdlVGV4dHVyZUFjY2Vzc19Xcml0ZU9ubHk7CisgICAgfQorfQorCitX
R1BVU3RvcmVPcCBjb252ZXJ0VG9CYWNraW5nKFN0b3JlT3Agc3RvcmVPcCkKK3sKKyAgICBzd2l0
Y2ggKHN0b3JlT3ApIHsKKyAgICBjYXNlIFN0b3JlT3A6OlN0b3JlOgorICAgICAgICByZXR1cm4g
V0dQVVN0b3JlT3BfU3RvcmU7CisgICAgY2FzZSBTdG9yZU9wOjpEaXNjYXJkOgorICAgICAgICBy
ZXR1cm4gV0dQVVN0b3JlT3BfRGlzY2FyZDsKKyAgICB9Cit9CisKK1dHUFVUZXh0dXJlQXNwZWN0
IGNvbnZlcnRUb0JhY2tpbmcoVGV4dHVyZUFzcGVjdCB0ZXh0dXJlQXNwZWN0KQoreworICAgIHN3
aXRjaCAodGV4dHVyZUFzcGVjdCkgeworICAgIGNhc2UgVGV4dHVyZUFzcGVjdDo6QWxsOgorICAg
ICAgICByZXR1cm4gV0dQVVRleHR1cmVBc3BlY3RfQWxsOworICAgIGNhc2UgVGV4dHVyZUFzcGVj
dDo6U3RlbmNpbE9ubHk6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUFzcGVjdF9TdGVuY2ls
T25seTsKKyAgICBjYXNlIFRleHR1cmVBc3BlY3Q6OkRlcHRoT25seToKKyAgICAgICAgcmV0dXJu
IFdHUFVUZXh0dXJlQXNwZWN0X0RlcHRoT25seTsKKyAgICB9Cit9CisKK1dHUFVUZXh0dXJlRGlt
ZW5zaW9uIGNvbnZlcnRUb0JhY2tpbmcoVGV4dHVyZURpbWVuc2lvbiB0ZXh0dXJlRGltZW5zaW9u
KQoreworICAgIHN3aXRjaCAodGV4dHVyZURpbWVuc2lvbikgeworICAgIGNhc2UgVGV4dHVyZURp
bWVuc2lvbjo6XzFkOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVEaW1lbnNpb25fMUQ7Cisg
ICAgY2FzZSBUZXh0dXJlRGltZW5zaW9uOjpfMmQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVy
ZURpbWVuc2lvbl8yRDsKKyAgICBjYXNlIFRleHR1cmVEaW1lbnNpb246Ol8zZDoKKyAgICAgICAg
cmV0dXJuIFdHUFVUZXh0dXJlRGltZW5zaW9uXzNEOworICAgIH0KK30KKworV0dQVVRleHR1cmVG
b3JtYXQgY29udmVydFRvQmFja2luZyhUZXh0dXJlRm9ybWF0IHRleHR1cmVGb3JtYXQpCit7Cisg
ICAgc3dpdGNoICh0ZXh0dXJlRm9ybWF0KSB7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSOHVu
b3JtOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUjhVbm9ybTsKKyAgICBjYXNl
IFRleHR1cmVGb3JtYXQ6OlI4c25vcm06CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1h
dF9SOFNub3JtOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6Ujh1aW50OgorICAgICAgICByZXR1
cm4gV0dQVVRleHR1cmVGb3JtYXRfUjhVaW50OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6Ujhz
aW50OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUjhTaW50OworICAgIGNhc2Ug
VGV4dHVyZUZvcm1hdDo6UjE2dWludDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0
X1IxNlVpbnQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSMTZzaW50OgorICAgICAgICByZXR1
cm4gV0dQVVRleHR1cmVGb3JtYXRfUjE2U2ludDsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OlIx
NmZsb2F0OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUjE2RmxvYXQ7CisgICAg
Y2FzZSBUZXh0dXJlRm9ybWF0OjpSZzh1bm9ybToKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJl
Rm9ybWF0X1JHOFVub3JtOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6Umc4c25vcm06CisgICAg
ICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SRzhTbm9ybTsKKyAgICBjYXNlIFRleHR1cmVG
b3JtYXQ6OlJnOHVpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SRzhVaW50
OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6Umc4c2ludDoKKyAgICAgICAgcmV0dXJuIFdHUFVU
ZXh0dXJlRm9ybWF0X1JHOFNpbnQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSMzJ1aW50Ogor
ICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUjMyVWludDsKKyAgICBjYXNlIFRleHR1
cmVGb3JtYXQ6OlIzMnNpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SMzJT
aW50OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UjMyZmxvYXQ6CisgICAgICAgIHJldHVybiBX
R1BVVGV4dHVyZUZvcm1hdF9SMzJGbG9hdDsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OlJnMTZ1
aW50OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkcxNlVpbnQ7CisgICAgY2Fz
ZSBUZXh0dXJlRm9ybWF0OjpSZzE2c2ludDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9y
bWF0X1JHMTZTaW50OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UmcxNmZsb2F0OgorICAgICAg
ICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkcxNkZsb2F0OworICAgIGNhc2UgVGV4dHVyZUZv
cm1hdDo6UmdiYTh1bm9ybToKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4
VW5vcm07CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZ2JhOHVub3JtU1JHQjoKKyAgICAgICAg
cmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1JHQkE4VW5vcm1TcmdiOworICAgIGNhc2UgVGV4dHVy
ZUZvcm1hdDo6UmdiYThzbm9ybToKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X1JH
QkE4U25vcm07CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZ2JhOHVpbnQ6CisgICAgICAgIHJl
dHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFVpbnQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0
OjpSZ2JhOHNpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBOFNpbnQ7
CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpCZ3JhOHVub3JtOgorICAgICAgICByZXR1cm4gV0dQ
VVRleHR1cmVGb3JtYXRfQkdSQThVbm9ybTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkJncmE4
dW5vcm1TUkdCOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQkdSQThVbm9ybVNy
Z2I7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZ2I5ZTV1ZmxvYXQ6CisgICAgICAgIHJldHVy
biBXR1BVVGV4dHVyZUZvcm1hdF9SR0I5RTVVZmxvYXQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0
OjpSZ2IxMGEydW5vcm06CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SR0IxMEEy
VW5vcm07CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZzExYjEwdWZsb2F0OgorICAgICAgICBy
ZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkcxMUIxMFVmbG9hdDsKKyAgICBjYXNlIFRleHR1cmVG
b3JtYXQ6OlJnMzJ1aW50OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkczMlVp
bnQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZzMyc2ludDoKKyAgICAgICAgcmV0dXJuIFdH
UFVUZXh0dXJlRm9ybWF0X1JHMzJTaW50OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UmczMmZs
b2F0OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkczMkZsb2F0OworICAgIGNh
c2UgVGV4dHVyZUZvcm1hdDo6UmdiYTE2dWludDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJl
Rm9ybWF0X1JHQkExNlVpbnQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZ2JhMTZzaW50Ogor
ICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkdCQTE2U2ludDsKKyAgICBjYXNlIFRl
eHR1cmVGb3JtYXQ6OlJnYmExNmZsb2F0OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3Jt
YXRfUkdCQTE2RmxvYXQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpSZ2JhMzJ1aW50OgorICAg
ICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfUkdCQTMyVWludDsKKyAgICBjYXNlIFRleHR1
cmVGb3JtYXQ6OlJnYmEzMnNpbnQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9S
R0JBMzJTaW50OworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6UmdiYTMyZmxvYXQ6CisgICAgICAg
IHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9SR0JBMzJGbG9hdDsKKyAgICBjYXNlIFRleHR1cmVG
b3JtYXQ6OlN0ZW5jaWw4OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfU3RlbmNp
bDg7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpEZXB0aDE2dW5vcm06CisgICAgICAgIHJldHVy
biBXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDE2VW5vcm07CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0
OjpEZXB0aDI0cGx1czoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRQ
bHVzOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6RGVwdGgyNHBsdXNTdGVuY2lsODoKKyAgICAg
ICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0RlcHRoMjRQbHVzU3RlbmNpbDg7CisgICAgY2Fz
ZSBUZXh0dXJlRm9ybWF0OjpEZXB0aDMyZmxvYXQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVy
ZUZvcm1hdF9EZXB0aDMyRmxvYXQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpCYzFSZ2JhVW5v
cm06CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9CQzFSR0JBVW5vcm07CisgICAg
Y2FzZSBUZXh0dXJlRm9ybWF0OjpCYzFSZ2JhVW5vcm1TUkdCOgorICAgICAgICByZXR1cm4gV0dQ
VVRleHR1cmVGb3JtYXRfQkMxUkdCQVVub3JtU3JnYjsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6
OkJjMlJnYmFVbm9ybToKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0JDMlJHQkFV
bm9ybTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkJjMlJnYmFVbm9ybVNSR0I6CisgICAgICAg
IHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9CQzJSR0JBVW5vcm1TcmdiOworICAgIGNhc2UgVGV4
dHVyZUZvcm1hdDo6QmMzUmdiYVVub3JtOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3Jt
YXRfQkMzUkdCQVVub3JtOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QmMzUmdiYVVub3JtU1JH
QjoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0X0JDM1JHQkFVbm9ybVNyZ2I7Cisg
ICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpCYzRSVW5vcm06CisgICAgICAgIHJldHVybiBXR1BVVGV4
dHVyZUZvcm1hdF9CQzRSVW5vcm07CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpCYzRSU25vcm06
CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9CQzRSU25vcm07CisgICAgY2FzZSBU
ZXh0dXJlRm9ybWF0OjpCYzVSZ1Vub3JtOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3Jt
YXRfQkM1UkdVbm9ybTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkJjNVJnU25vcm06CisgICAg
ICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9CQzVSR1Nub3JtOworICAgIGNhc2UgVGV4dHVy
ZUZvcm1hdDo6QmM2aFJnYlVmbG9hdDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlRm9ybWF0
X0JDNkhSR0JVZmxvYXQ7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpCYzZoUmdiRmxvYXQ6Cisg
ICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZvcm1hdF9CQzZIUkdCRmxvYXQ7CisgICAgY2FzZSBU
ZXh0dXJlRm9ybWF0OjpCYzdSZ2JhVW5vcm06CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZUZv
cm1hdF9CQzdSR0JBVW5vcm07CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpCYzdSZ2JhVW5vcm1T
UkdCOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVGb3JtYXRfQkM3UkdCQVVub3JtU3JnYjsK
KyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkV0YzJSZ2I4dW5vcm06CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjhV
bm9ybSk7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpFdGMyUmdiOHVub3JtU1JHQjoKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1h
dF9FVEMyUkdCOHVub3JtU3JnYik7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpFdGMyUmdiOGEx
dW5vcm06CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQ
VVRleHR1cmVGb3JtYXRfRVRDMlJHQjhhMVVub3JtKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6
OkV0YzJSZ2I4YTF1bm9ybVNSR0I6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4
dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfRVRDMlJHQjhhMXVub3JtU3JnYik7CisgICAg
Y2FzZSBUZXh0dXJlRm9ybWF0OjpFdGMyUmdiYTh1bm9ybToKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9FVEMyUkdCQThVbm9y
bSk7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpFdGMyUmdiYTh1bm9ybVNSR0I6CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRf
RVRDMlJHQkE4VW5vcm1TcmdiKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkVhY1IxMXVub3Jt
OgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0
dXJlRm9ybWF0X0VBQ1IxMVVub3JtKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkVhY1IxMXNu
b3JtOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVU
ZXh0dXJlRm9ybWF0X0VBQ1IxMVNub3JtKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkVhY1Jn
MTF1bm9ybToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihX
R1BVVGV4dHVyZUZvcm1hdF9FQUNSRzExVW5vcm0pOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6
RWFjUmcxMXNub3JtOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3Jt
YXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0VBQ1JHMTFTbm9ybSk7CisgICAgY2FzZSBUZXh0dXJlRm9y
bWF0OjpBc3RjNHg0VW5vcm06CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVy
ZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzR4NFVub3JtKTsKKyAgICBjYXNlIFRleHR1
cmVGb3JtYXQ6OkFzdGM0eDRVbm9ybVNSR0I6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxX
R1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzR4NFVub3JtU3JnYik7Cisg
ICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpBc3RjNXg0VW5vcm06CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzV4NFVub3Jt
KTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGM1eDRVbm9ybVNSR0I6CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNU
QzV4NFVub3JtU3JnYik7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpBc3RjNXg1VW5vcm06Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVG
b3JtYXRfQVNUQzV4NVVub3JtKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGM1eDVVbm9y
bVNSR0I6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQ
VVRleHR1cmVGb3JtYXRfQVNUQzV4NVVub3JtU3JnYik7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0
OjpBc3RjNng1VW5vcm06CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZv
cm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzZ4NVVub3JtKTsKKyAgICBjYXNlIFRleHR1cmVG
b3JtYXQ6OkFzdGM2eDVVbm9ybVNSR0I6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BV
VGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzZ4NVVub3JtU3JnYik7CisgICAg
Y2FzZSBUZXh0dXJlRm9ybWF0OjpBc3RjNng2VW5vcm06CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzZ4NlVub3JtKTsK
KyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGM2eDZVbm9ybVNSR0I6CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzZ4
NlVub3JtU3JnYik7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpBc3RjOHg1VW5vcm06CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3Jt
YXRfQVNUQzh4NVVub3JtKTsKKyAgICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGM4eDVVbm9ybVNS
R0I6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRl
eHR1cmVGb3JtYXRfQVNUQzh4NVVub3JtU3JnYik7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpB
c3RjOHg2VW5vcm06CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1h
dD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4NlVub3JtKTsKKyAgICBjYXNlIFRleHR1cmVGb3Jt
YXQ6OkFzdGM4eDZVbm9ybVNSR0I6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4
dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4NlVub3JtU3JnYik7CisgICAgY2Fz
ZSBUZXh0dXJlRm9ybWF0OjpBc3RjOHg4VW5vcm06CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4OFVub3JtKTsKKyAg
ICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGM4eDhVbm9ybVNSR0I6CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzh4OFVu
b3JtU3JnYik7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpBc3RjMTB4NVVub3JtOgorICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0
X0FTVEMxMHg1VW5vcm0pOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0YzEweDVVbm9ybVNS
R0I6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRl
eHR1cmVGb3JtYXRfQVNUQzEweDVVbm9ybVNyZ2IpOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6
QXN0YzEweDZVbm9ybToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9y
bWF0PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTB4NlVub3JtKTsKKyAgICBjYXNlIFRleHR1cmVG
b3JtYXQ6OkFzdGMxMHg2VW5vcm1TUkdCOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQ
VVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMHg2VW5vcm1TcmdiKTsKKyAg
ICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGMxMHg4VW5vcm06CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDhVbm9y
bSk7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpBc3RjMTB4OFVub3JtU1JHQjoKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9B
U1RDMTB4OFVub3JtU3JnYik7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpBc3RjMTB4MTBVbm9y
bToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4
dHVyZUZvcm1hdF9BU1RDMTB4MTBVbm9ybSk7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpBc3Rj
MTB4MTBVbm9ybVNSR0I6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZv
cm1hdD4oV0dQVVRleHR1cmVGb3JtYXRfQVNUQzEweDEwVW5vcm1TcmdiKTsKKyAgICBjYXNlIFRl
eHR1cmVGb3JtYXQ6OkFzdGMxMngxMFVub3JtOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
V0dQVVRleHR1cmVGb3JtYXQ+KFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMFVub3JtKTsKKyAg
ICBjYXNlIFRleHR1cmVGb3JtYXQ6OkFzdGMxMngxMFVub3JtU1JHQjoKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFdHUFVUZXh0dXJlRm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9BU1RDMTJ4
MTBVbm9ybVNyZ2IpOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0YzEyeDEyVW5vcm06Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXR1BVVGV4dHVyZUZvcm1hdD4oV0dQVVRleHR1cmVG
b3JtYXRfQVNUQzEyeDEyVW5vcm0pOworICAgIGNhc2UgVGV4dHVyZUZvcm1hdDo6QXN0YzEyeDEy
VW5vcm1TUkdCOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0dQVVRleHR1cmVGb3JtYXQ+
KFdHUFVUZXh0dXJlRm9ybWF0X0FTVEMxMngxMlVub3JtU3JnYik7CisgICAgY2FzZSBUZXh0dXJl
Rm9ybWF0OjpEZXB0aDI0dW5vcm1TdGVuY2lsODoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJl
Rm9ybWF0X0RlcHRoMjRQbHVzU3RlbmNpbDg7CisgICAgY2FzZSBUZXh0dXJlRm9ybWF0OjpEZXB0
aDMyZmxvYXRTdGVuY2lsODoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdHUFVUZXh0dXJl
Rm9ybWF0PihXR1BVVGV4dHVyZUZvcm1hdF9EZXB0aDMyRmxvYXRTdGVuY2lsOCk7CisgICAgfQor
fQorCitXR1BVVGV4dHVyZVNhbXBsZVR5cGUgY29udmVydFRvQmFja2luZyhUZXh0dXJlU2FtcGxl
VHlwZSB0ZXh0dXJlU2FtcGxlVHlwZSkKK3sKKyAgICBzd2l0Y2ggKHRleHR1cmVTYW1wbGVUeXBl
KSB7CisgICAgY2FzZSBUZXh0dXJlU2FtcGxlVHlwZTo6RmxvYXQ6CisgICAgICAgIHJldHVybiBX
R1BVVGV4dHVyZVNhbXBsZVR5cGVfRmxvYXQ7CisgICAgY2FzZSBUZXh0dXJlU2FtcGxlVHlwZTo6
VW5maWx0ZXJhYmxlRmxvYXQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4dHVyZVNhbXBsZVR5cGVf
VW5maWx0ZXJhYmxlRmxvYXQ7CisgICAgY2FzZSBUZXh0dXJlU2FtcGxlVHlwZTo6RGVwdGg6Cisg
ICAgICAgIHJldHVybiBXR1BVVGV4dHVyZVNhbXBsZVR5cGVfRGVwdGg7CisgICAgY2FzZSBUZXh0
dXJlU2FtcGxlVHlwZTo6U2ludDoKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlU2FtcGxlVHlw
ZV9TaW50OworICAgIGNhc2UgVGV4dHVyZVNhbXBsZVR5cGU6OlVpbnQ6CisgICAgICAgIHJldHVy
biBXR1BVVGV4dHVyZVNhbXBsZVR5cGVfVWludDsKKyAgICB9Cit9CisKK1dHUFVUZXh0dXJlVmll
d0RpbWVuc2lvbiBjb252ZXJ0VG9CYWNraW5nKFRleHR1cmVWaWV3RGltZW5zaW9uIHRleHR1cmVW
aWV3RGltZW5zaW9uKQoreworICAgIHN3aXRjaCAodGV4dHVyZVZpZXdEaW1lbnNpb24pIHsKKyAg
ICBjYXNlIFRleHR1cmVWaWV3RGltZW5zaW9uOjpfMWQ6CisgICAgICAgIHJldHVybiBXR1BVVGV4
dHVyZVZpZXdEaW1lbnNpb25fMUQ7CisgICAgY2FzZSBUZXh0dXJlVmlld0RpbWVuc2lvbjo6XzJk
OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVWaWV3RGltZW5zaW9uXzJEOworICAgIGNhc2Ug
VGV4dHVyZVZpZXdEaW1lbnNpb246Ol8yZEFycmF5OgorICAgICAgICByZXR1cm4gV0dQVVRleHR1
cmVWaWV3RGltZW5zaW9uXzJEQXJyYXk7CisgICAgY2FzZSBUZXh0dXJlVmlld0RpbWVuc2lvbjo6
Q3ViZToKKyAgICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlVmlld0RpbWVuc2lvbl9DdWJlOworICAg
IGNhc2UgVGV4dHVyZVZpZXdEaW1lbnNpb246OkN1YmVBcnJheToKKyAgICAgICAgcmV0dXJuIFdH
UFVUZXh0dXJlVmlld0RpbWVuc2lvbl9DdWJlQXJyYXk7CisgICAgY2FzZSBUZXh0dXJlVmlld0Rp
bWVuc2lvbjo6XzNkOgorICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVWaWV3RGltZW5zaW9uXzNE
OworICAgIH0KK30KKworV0dQVVZlcnRleEZvcm1hdCBjb252ZXJ0VG9CYWNraW5nKFZlcnRleEZv
cm1hdCB2ZXJ0ZXhGb3JtYXQpCit7CisgICAgc3dpdGNoICh2ZXJ0ZXhGb3JtYXQpIHsKKyAgICBj
YXNlIFZlcnRleEZvcm1hdDo6VWludDh4MjoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3Jt
YXRfVWludDh4MjsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6VWludDh4NDoKKyAgICAgICAgcmV0
dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfVWludDh4NDsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6U2lu
dDh4MjoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfU2ludDh4MjsKKyAgICBjYXNl
IFZlcnRleEZvcm1hdDo6U2ludDh4NDoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRf
U2ludDh4NDsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6VW5vcm04eDI6CisgICAgICAgIHJldHVy
biBXR1BVVmVydGV4Rm9ybWF0X1Vub3JtOHgyOworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpVbm9y
bTh4NDoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfVW5vcm04eDQ7CisgICAgY2Fz
ZSBWZXJ0ZXhGb3JtYXQ6OlNub3JtOHgyOgorICAgICAgICByZXR1cm4gV0dQVVZlcnRleEZvcm1h
dF9Tbm9ybTh4MjsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6U25vcm04eDQ6CisgICAgICAgIHJl
dHVybiBXR1BVVmVydGV4Rm9ybWF0X1Nub3JtOHg0OworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpV
aW50MTZ4MjoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfVWludDE2eDI7CisgICAg
Y2FzZSBWZXJ0ZXhGb3JtYXQ6OlVpbnQxNng0OgorICAgICAgICByZXR1cm4gV0dQVVZlcnRleEZv
cm1hdF9VaW50MTZ4NDsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6U2ludDE2eDI6CisgICAgICAg
IHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X1NpbnQxNngyOworICAgIGNhc2UgVmVydGV4Rm9ybWF0
OjpTaW50MTZ4NDoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfU2ludDE2eDQ7Cisg
ICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlVub3JtMTZ4MjoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0
ZXhGb3JtYXRfVW5vcm0xNngyOworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpVbm9ybTE2eDQ6Cisg
ICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X1Vub3JtMTZ4NDsKKyAgICBjYXNlIFZlcnRl
eEZvcm1hdDo6U25vcm0xNngyOgorICAgICAgICByZXR1cm4gV0dQVVZlcnRleEZvcm1hdF9Tbm9y
bTE2eDI7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlNub3JtMTZ4NDoKKyAgICAgICAgcmV0dXJu
IFdHUFVWZXJ0ZXhGb3JtYXRfU25vcm0xNng0OworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpGbG9h
dDE2eDI6CisgICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X0Zsb2F0MTZ4MjsKKyAgICBj
YXNlIFZlcnRleEZvcm1hdDo6RmxvYXQxNng0OgorICAgICAgICByZXR1cm4gV0dQVVZlcnRleEZv
cm1hdF9GbG9hdDE2eDQ7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OkZsb2F0MzI6CisgICAgICAg
IHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X0Zsb2F0MzI7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6
OkZsb2F0MzJ4MjoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfRmxvYXQzMngyOwor
ICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpGbG9hdDMyeDM6CisgICAgICAgIHJldHVybiBXR1BVVmVy
dGV4Rm9ybWF0X0Zsb2F0MzJ4MzsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6RmxvYXQzMng0Ogor
ICAgICAgICByZXR1cm4gV0dQVVZlcnRleEZvcm1hdF9GbG9hdDMyeDQ7CisgICAgY2FzZSBWZXJ0
ZXhGb3JtYXQ6OlVpbnQzMjoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfVWludDMy
OworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpVaW50MzJ4MjoKKyAgICAgICAgcmV0dXJuIFdHUFVW
ZXJ0ZXhGb3JtYXRfVWludDMyeDI7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlVpbnQzMngzOgor
ICAgICAgICByZXR1cm4gV0dQVVZlcnRleEZvcm1hdF9VaW50MzJ4MzsKKyAgICBjYXNlIFZlcnRl
eEZvcm1hdDo6VWludDMyeDQ6CisgICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X1VpbnQz
Mng0OworICAgIGNhc2UgVmVydGV4Rm9ybWF0OjpTaW50MzI6CisgICAgICAgIHJldHVybiBXR1BV
VmVydGV4Rm9ybWF0X1NpbnQzMjsKKyAgICBjYXNlIFZlcnRleEZvcm1hdDo6U2ludDMyeDI6Cisg
ICAgICAgIHJldHVybiBXR1BVVmVydGV4Rm9ybWF0X1NpbnQzMngyOworICAgIGNhc2UgVmVydGV4
Rm9ybWF0OjpTaW50MzJ4MzoKKyAgICAgICAgcmV0dXJuIFdHUFVWZXJ0ZXhGb3JtYXRfU2ludDMy
eDM7CisgICAgY2FzZSBWZXJ0ZXhGb3JtYXQ6OlNpbnQzMng0OgorICAgICAgICByZXR1cm4gV0dQ
VVZlcnRleEZvcm1hdF9TaW50MzJ4NDsKKyAgICB9Cit9CisKK1dHUFVWZXJ0ZXhTdGVwTW9kZSBj
b252ZXJ0VG9CYWNraW5nKFZlcnRleFN0ZXBNb2RlIHZlcnRleFN0ZXBNb2RlKQoreworICAgIHN3
aXRjaCAodmVydGV4U3RlcE1vZGUpIHsKKyAgICBjYXNlIFZlcnRleFN0ZXBNb2RlOjpWZXJ0ZXg6
CisgICAgICAgIHJldHVybiBXR1BVVmVydGV4U3RlcE1vZGVfVmVydGV4OworICAgIGNhc2UgVmVy
dGV4U3RlcE1vZGU6Okluc3RhbmNlOgorICAgICAgICByZXR1cm4gV0dQVVZlcnRleFN0ZXBNb2Rl
X0luc3RhbmNlOworICAgIH0KK30KKworV0dQVUJ1ZmZlclVzYWdlRmxhZ3MgY29udmVydEJ1ZmZl
clVzYWdlRmxhZ3NUb0JhY2tpbmcoQnVmZmVyVXNhZ2VGbGFncyBidWZmZXJVc2FnZUZsYWdzKQor
eworICAgIFdHUFVCdWZmZXJVc2FnZUZsYWdzIHJlc3VsdCA9IDA7CisgICAgaWYgKGJ1ZmZlclVz
YWdlRmxhZ3MgJiBCdWZmZXJVc2FnZTo6TUFQX1JFQUQpCisgICAgICAgIHJlc3VsdCB8PSBXR1BV
QnVmZmVyVXNhZ2VfTWFwUmVhZDsKKyAgICBpZiAoYnVmZmVyVXNhZ2VGbGFncyAmIEJ1ZmZlclVz
YWdlOjpNQVBfV1JJVEUpCisgICAgICAgIHJlc3VsdCB8PSBXR1BVQnVmZmVyVXNhZ2VfTWFwV3Jp
dGU7CisgICAgaWYgKGJ1ZmZlclVzYWdlRmxhZ3MgJiBCdWZmZXJVc2FnZTo6Q09QWV9TUkMpCisg
ICAgICAgIHJlc3VsdCB8PSBXR1BVQnVmZmVyVXNhZ2VfQ29weVNyYzsKKyAgICBpZiAoYnVmZmVy
VXNhZ2VGbGFncyAmIEJ1ZmZlclVzYWdlOjpDT1BZX0RTVCkKKyAgICAgICAgcmVzdWx0IHw9IFdH
UFVCdWZmZXJVc2FnZV9Db3B5RHN0OworICAgIGlmIChidWZmZXJVc2FnZUZsYWdzICYgQnVmZmVy
VXNhZ2U6OklOREVYKQorICAgICAgICByZXN1bHQgfD0gV0dQVUJ1ZmZlclVzYWdlX0luZGV4Owor
ICAgIGlmIChidWZmZXJVc2FnZUZsYWdzICYgQnVmZmVyVXNhZ2U6OlZFUlRFWCkKKyAgICAgICAg
cmVzdWx0IHw9IFdHUFVCdWZmZXJVc2FnZV9WZXJ0ZXg7CisgICAgaWYgKGJ1ZmZlclVzYWdlRmxh
Z3MgJiBCdWZmZXJVc2FnZTo6VU5JRk9STSkKKyAgICAgICAgcmVzdWx0IHw9IFdHUFVCdWZmZXJV
c2FnZV9Vbmlmb3JtOworICAgIGlmIChidWZmZXJVc2FnZUZsYWdzICYgQnVmZmVyVXNhZ2U6OlNU
T1JBR0UpCisgICAgICAgIHJlc3VsdCB8PSBXR1BVQnVmZmVyVXNhZ2VfU3RvcmFnZTsKKyAgICBp
ZiAoYnVmZmVyVXNhZ2VGbGFncyAmIEJ1ZmZlclVzYWdlOjpJTkRJUkVDVCkKKyAgICAgICAgcmVz
dWx0IHw9IFdHUFVCdWZmZXJVc2FnZV9JbmRpcmVjdDsKKyAgICBpZiAoYnVmZmVyVXNhZ2VGbGFn
cyAmIEJ1ZmZlclVzYWdlOjpRVUVSWV9SRVNPTFZFKQorICAgICAgICByZXN1bHQgfD0gV0dQVUJ1
ZmZlclVzYWdlX1F1ZXJ5UmVzb2x2ZTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXR1BVQ29s
b3JXcml0ZU1hc2tGbGFncyBjb252ZXJ0Q29sb3JXcml0ZUZsYWdzVG9CYWNraW5nKENvbG9yV3Jp
dGVGbGFncyBjb2xvcldyaXRlRmxhZ3MpCit7CisgICAgV0dQVUNvbG9yV3JpdGVNYXNrRmxhZ3Mg
cmVzdWx0ID0gMDsKKyAgICBpZiAoY29sb3JXcml0ZUZsYWdzICYgQ29sb3JXcml0ZTo6UkVEKQor
ICAgICAgICByZXN1bHQgfD0gV0dQVUNvbG9yV3JpdGVNYXNrX1JlZDsKKyAgICBpZiAoY29sb3JX
cml0ZUZsYWdzICYgQ29sb3JXcml0ZTo6R1JFRU4pCisgICAgICAgIHJlc3VsdCB8PSBXR1BVQ29s
b3JXcml0ZU1hc2tfR3JlZW47CisgICAgaWYgKGNvbG9yV3JpdGVGbGFncyAmIENvbG9yV3JpdGU6
OkJMVUUpCisgICAgICAgIHJlc3VsdCB8PSBXR1BVQ29sb3JXcml0ZU1hc2tfQmx1ZTsKKyAgICBp
ZiAoY29sb3JXcml0ZUZsYWdzICYgQ29sb3JXcml0ZTo6QUxQSEEpCisgICAgICAgIHJlc3VsdCB8
PSBXR1BVQ29sb3JXcml0ZU1hc2tfQWxwaGE7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV0dQ
VU1hcE1vZGVGbGFncyBjb252ZXJ0TWFwTW9kZUZsYWdzVG9CYWNraW5nKE1hcE1vZGVGbGFncyBt
YXBNb2RlRmxhZ3MpCit7CisgICAgV0dQVU1hcE1vZGVGbGFncyByZXN1bHQgPSAwOworICAgIGlm
IChtYXBNb2RlRmxhZ3MgJiBNYXBNb2RlOjpSRUFEKQorICAgICAgICByZXN1bHQgfD0gV0dQVU1h
cE1vZGVfUmVhZDsKKyAgICBpZiAobWFwTW9kZUZsYWdzICYgTWFwTW9kZTo6V1JJVEUpCisgICAg
ICAgIHJlc3VsdCB8PSBXR1BVTWFwTW9kZV9Xcml0ZTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitXR1BVU2hhZGVyU3RhZ2VGbGFncyBjb252ZXJ0U2hhZGVyU3RhZ2VGbGFnc1RvQmFja2luZyhT
aGFkZXJTdGFnZUZsYWdzIHNoYWRlclN0YWdlRmxhZ3MpCit7CisgICAgV0dQVVNoYWRlclN0YWdl
RmxhZ3MgcmVzdWx0ID0gMDsKKyAgICBpZiAoc2hhZGVyU3RhZ2VGbGFncyAmIFNoYWRlclN0YWdl
OjpWRVJURVgpCisgICAgICAgIHJlc3VsdCB8PSBXR1BVU2hhZGVyU3RhZ2VfVmVydGV4OworICAg
IGlmIChzaGFkZXJTdGFnZUZsYWdzICYgU2hhZGVyU3RhZ2U6OkZSQUdNRU5UKQorICAgICAgICBy
ZXN1bHQgfD0gV0dQVVNoYWRlclN0YWdlX0ZyYWdtZW50OworICAgIGlmIChzaGFkZXJTdGFnZUZs
YWdzICYgU2hhZGVyU3RhZ2U6OkNPTVBVVEUpCisgICAgICAgIHJlc3VsdCB8PSBXR1BVU2hhZGVy
U3RhZ2VfQ29tcHV0ZTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXR1BVVGV4dHVyZVVzYWdl
RmxhZ3MgY29udmVydFRleHR1cmVVc2FnZUZsYWdzVG9CYWNraW5nKFRleHR1cmVVc2FnZUZsYWdz
IHRleHR1cmVVc2FnZUZsYWdzKQoreworICAgIFdHUFVUZXh0dXJlVXNhZ2VGbGFncyByZXN1bHQg
PSAwOworICAgIGlmICh0ZXh0dXJlVXNhZ2VGbGFncyAmIFRleHR1cmVVc2FnZTo6Q09QWV9TUkMp
CisgICAgICAgIHJlc3VsdCB8PSBXR1BVVGV4dHVyZVVzYWdlX0NvcHlTcmM7CisgICAgaWYgKHRl
eHR1cmVVc2FnZUZsYWdzICYgVGV4dHVyZVVzYWdlOjpDT1BZX0RTVCkKKyAgICAgICAgcmVzdWx0
IHw9IFdHUFVUZXh0dXJlVXNhZ2VfQ29weURzdDsKKyAgICBpZiAodGV4dHVyZVVzYWdlRmxhZ3Mg
JiBUZXh0dXJlVXNhZ2U6OlRFWFRVUkVfQklORElORykKKyAgICAgICAgcmVzdWx0IHw9IFdHUFVU
ZXh0dXJlVXNhZ2VfVGV4dHVyZUJpbmRpbmc7CisgICAgaWYgKHRleHR1cmVVc2FnZUZsYWdzICYg
VGV4dHVyZVVzYWdlOjpTVE9SQUdFX0JJTkRJTkcpCisgICAgICAgIHJlc3VsdCB8PSBXR1BVVGV4
dHVyZVVzYWdlX1N0b3JhZ2VCaW5kaW5nOworICAgIGlmICh0ZXh0dXJlVXNhZ2VGbGFncyAmIFRl
eHR1cmVVc2FnZTo6UkVOREVSX0FUVEFDSE1FTlQpCisgICAgICAgIHJlc3VsdCB8PSBXR1BVVGV4
dHVyZVVzYWdlX1JlbmRlckF0dGFjaG1lbnQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV0dQ
VUNvbG9yIGNvbnZlcnRUb0JhY2tpbmcoY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIHJldHVy
biBXVEY6OnN3aXRjaE9uKGNvbG9yLCBbXSAoY29uc3QgVmVjdG9yPGRvdWJsZT4mIHZlY3Rvcikg
eworICAgICAgICByZXR1cm4gV0dQVUNvbG9yIHsKKyAgICAgICAgICAgIHZlY3Rvci5zaXplKCkg
PiAwID8gdmVjdG9yWzBdIDogMCwKKyAgICAgICAgICAgIHZlY3Rvci5zaXplKCkgPiAxID8gdmVj
dG9yWzFdIDogMCwKKyAgICAgICAgICAgIHZlY3Rvci5zaXplKCkgPiAyID8gdmVjdG9yWzJdIDog
MCwKKyAgICAgICAgICAgIHZlY3Rvci5zaXplKCkgPiAzID8gdmVjdG9yWzNdIDogMCwKKyAgICAg
ICAgfTsKKyAgICB9LCBbXSAoY29uc3QgQ29sb3JEaWN0JiBjb2xvcikgeworICAgICAgICByZXR1
cm4gV0dQVUNvbG9yIHsKKyAgICAgICAgICAgIGNvbG9yLnIsCisgICAgICAgICAgICBjb2xvci5n
LAorICAgICAgICAgICAgY29sb3IuYiwKKyAgICAgICAgICAgIGNvbG9yLmEsCisgICAgICAgIH07
CisgICAgfSk7Cit9CisKK1dHUFVFeHRlbnQzRCBjb252ZXJ0VG9CYWNraW5nKGNvbnN0IEV4dGVu
dDNEJiBleHRlbnQzRCkKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihleHRlbnQzRCwgW10g
KGNvbnN0IFZlY3RvcjxJbnRlZ2VyQ29vcmRpbmF0ZT4mIHZlY3RvcikgeworICAgICAgICByZXR1
cm4gV0dQVUV4dGVudDNEIHsKKyAgICAgICAgICAgIHZlY3Rvci5zaXplKCkgPiAwID8gdmVjdG9y
WzBdIDogMCwKKyAgICAgICAgICAgIHZlY3Rvci5zaXplKCkgPiAxID8gdmVjdG9yWzFdIDogMCwK
KyAgICAgICAgICAgIHZlY3Rvci5zaXplKCkgPiAyID8gdmVjdG9yWzJdIDogMCwKKyAgICAgICAg
fTsKKyAgICB9LCBbXSAoY29uc3QgRXh0ZW50M0REaWN0JiBleHRlbnQpIHsKKyAgICAgICAgcmV0
dXJuIFdHUFVFeHRlbnQzRCB7CisgICAgICAgICAgICBleHRlbnQud2lkdGgsCisgICAgICAgICAg
ICBleHRlbnQuaGVpZ2h0LAorICAgICAgICAgICAgZXh0ZW50LmRlcHRoT3JBcnJheUxheWVycywK
KyAgICAgICAgfTsKKyAgICB9KTsKK30KKworV0dQVU9yaWdpbjNEIGNvbnZlcnRUb0JhY2tpbmco
Y29uc3QgT3JpZ2luMkQmIG9yaWdpbjJEKQoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG9y
aWdpbjJELCBbXSAoY29uc3QgVmVjdG9yPEludGVnZXJDb29yZGluYXRlPiYgdmVjdG9yKSB7Cisg
ICAgICAgIHJldHVybiBXR1BVT3JpZ2luM0QgeworICAgICAgICAgICAgdmVjdG9yLnNpemUoKSA+
IDAgPyB2ZWN0b3JbMF0gOiAwLAorICAgICAgICAgICAgdmVjdG9yLnNpemUoKSA+IDEgPyB2ZWN0
b3JbMV0gOiAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgfTsKKyAgICB9LCBbXSAoY29uc3Qg
T3JpZ2luMkREaWN0JiBvcmlnaW4pIHsKKyAgICAgICAgcmV0dXJuIFdHUFVPcmlnaW4zRCB7Cisg
ICAgICAgICAgICBvcmlnaW4ueCwKKyAgICAgICAgICAgIG9yaWdpbi55LAorICAgICAgICAgICAg
MCwKKyAgICAgICAgfTsKKyAgICB9KTsKK30KKworV0dQVU9yaWdpbjNEIGNvbnZlcnRUb0JhY2tp
bmcoY29uc3QgT3JpZ2luM0QmIG9yaWdpbjNEKQoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9u
KG9yaWdpbjNELCBbXSAoY29uc3QgVmVjdG9yPEludGVnZXJDb29yZGluYXRlPiYgdmVjdG9yKSB7
CisgICAgICAgIHJldHVybiBXR1BVT3JpZ2luM0QgeworICAgICAgICAgICAgdmVjdG9yLnNpemUo
KSA+IDAgPyB2ZWN0b3JbMF0gOiAwLAorICAgICAgICAgICAgdmVjdG9yLnNpemUoKSA+IDEgPyB2
ZWN0b3JbMV0gOiAwLAorICAgICAgICAgICAgdmVjdG9yLnNpemUoKSA+IDIgPyB2ZWN0b3JbMl0g
OiAwLAorICAgICAgICB9OworICAgIH0sIFtdIChjb25zdCBPcmlnaW4zRERpY3QmIG9yaWdpbikg
eworICAgICAgICByZXR1cm4gV0dQVU9yaWdpbjNEIHsKKyAgICAgICAgICAgIG9yaWdpbi54LAor
ICAgICAgICAgICAgb3JpZ2luLnksCisgICAgICAgICAgICBvcmlnaW4ueiwKKyAgICAgICAgfTsK
KyAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwv
V2ViR1BVQ29udmVydFRvQmFja2luZy5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGlj
cy9XZWJHUFUvSW1wbC9XZWJHUFVDb252ZXJ0VG9CYWNraW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGU0MWQ3
OTRhYjRiZjM2NjlkZDcxNGMxMjYzNDFmODY5ODRjZTUwOQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVQ29udmVydFRv
QmFja2luZy5oCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJXZWJHUFVBZGRyZXNzTW9kZS5oIgorI2luY2x1ZGUgIldlYkdQVUJsZW5kRmFj
dG9yLmgiCisjaW5jbHVkZSAiV2ViR1BVQmxlbmRPcGVyYXRpb24uaCIKKyNpbmNsdWRlICJXZWJH
UFVCdWZmZXJCaW5kaW5nVHlwZS5oIgorI2luY2x1ZGUgIldlYkdQVUJ1ZmZlclVzYWdlLmgiCisj
aW5jbHVkZSAiV2ViR1BVQ29sb3IuaCIKKyNpbmNsdWRlICJXZWJHUFVDb2xvcldyaXRlLmgiCisj
aW5jbHVkZSAiV2ViR1BVQ29tcGFyZUZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiV2ViR1BVQ29tcGls
YXRpb25NZXNzYWdlVHlwZS5oIgorI2luY2x1ZGUgIldlYkdQVUN1bGxNb2RlLmgiCisjaW5jbHVk
ZSAiV2ViR1BVRXJyb3JGaWx0ZXIuaCIKKyNpbmNsdWRlICJXZWJHUFVFeHRlbnQzRC5oIgorI2lu
Y2x1ZGUgIldlYkdQVUZlYXR1cmVOYW1lLmgiCisjaW5jbHVkZSAiV2ViR1BVRmlsdGVyTW9kZS5o
IgorI2luY2x1ZGUgIldlYkdQVUZyb250RmFjZS5oIgorI2luY2x1ZGUgIldlYkdQVUluZGV4Rm9y
bWF0LmgiCisjaW5jbHVkZSAiV2ViR1BVTG9hZE9wLmgiCisjaW5jbHVkZSAiV2ViR1BVTWFwTW9k
ZS5oIgorI2luY2x1ZGUgIldlYkdQVU9yaWdpbjJELmgiCisjaW5jbHVkZSAiV2ViR1BVT3JpZ2lu
M0QuaCIKKyNpbmNsdWRlICJXZWJHUFVQaXBlbGluZVN0YXRpc3RpY05hbWUuaCIKKyNpbmNsdWRl
ICJXZWJHUFVQb3dlclByZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXZWJHUFVQcmltaXRpdmVUb3Bv
bG9neS5oIgorI2luY2x1ZGUgIldlYkdQVVF1ZXJ5VHlwZS5oIgorI2luY2x1ZGUgIldlYkdQVVNh
bXBsZXJCaW5kaW5nVHlwZS5oIgorI2luY2x1ZGUgIldlYkdQVVNoYWRlclN0YWdlLmgiCisjaW5j
bHVkZSAiV2ViR1BVU3RlbmNpbE9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIldlYkdQVVN0b3JhZ2VU
ZXh0dXJlQWNjZXNzLmgiCisjaW5jbHVkZSAiV2ViR1BVU3RvcmVPcC5oIgorI2luY2x1ZGUgIldl
YkdQVVRleHR1cmVBc3BlY3QuaCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJlRGltZW5zaW9uLmgi
CisjaW5jbHVkZSAiV2ViR1BVVGV4dHVyZUZvcm1hdC5oIgorI2luY2x1ZGUgIldlYkdQVVRleHR1
cmVTYW1wbGVUeXBlLmgiCisjaW5jbHVkZSAiV2ViR1BVVGV4dHVyZVVzYWdlLmgiCisjaW5jbHVk
ZSAiV2ViR1BVVGV4dHVyZVZpZXdEaW1lbnNpb24uaCIKKyNpbmNsdWRlICJXZWJHUFVWZXJ0ZXhG
b3JtYXQuaCIKKyNpbmNsdWRlICJXZWJHUFVWZXJ0ZXhTdGVwTW9kZS5oIgorI2luY2x1ZGUgPFdl
YkdQVS9XZWJHUFUuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKwor
V0dQVUFkZHJlc3NNb2RlIGNvbnZlcnRUb0JhY2tpbmcoQWRkcmVzc01vZGUpOworV0dQVUJsZW5k
RmFjdG9yIGNvbnZlcnRUb0JhY2tpbmcoQmxlbmRGYWN0b3IpOworV0dQVUJsZW5kT3BlcmF0aW9u
IGNvbnZlcnRUb0JhY2tpbmcoQmxlbmRPcGVyYXRpb24pOworV0dQVUJ1ZmZlckJpbmRpbmdUeXBl
IGNvbnZlcnRUb0JhY2tpbmcoQnVmZmVyQmluZGluZ1R5cGUpOworV0dQVUNvbXBhcmVGdW5jdGlv
biBjb252ZXJ0VG9CYWNraW5nKENvbXBhcmVGdW5jdGlvbik7CitXR1BVQ29tcGlsYXRpb25NZXNz
YWdlVHlwZSBjb252ZXJ0VG9CYWNraW5nKENvbXBpbGF0aW9uTWVzc2FnZVR5cGUpOworV0dQVUN1
bGxNb2RlIGNvbnZlcnRUb0JhY2tpbmcoQ3VsbE1vZGUpOworV0dQVUVycm9yRmlsdGVyIGNvbnZl
cnRUb0JhY2tpbmcoRXJyb3JGaWx0ZXIpOworV0dQVUZlYXR1cmVOYW1lIGNvbnZlcnRUb0JhY2tp
bmcoRmVhdHVyZU5hbWUpOworV0dQVUZpbHRlck1vZGUgY29udmVydFRvQmFja2luZyhGaWx0ZXJN
b2RlKTsKK1dHUFVGcm9udEZhY2UgY29udmVydFRvQmFja2luZyhGcm9udEZhY2UpOworV0dQVUlu
ZGV4Rm9ybWF0IGNvbnZlcnRUb0JhY2tpbmcoSW5kZXhGb3JtYXQpOworV0dQVUxvYWRPcCBjb252
ZXJ0VG9CYWNraW5nKExvYWRPcCk7CitXR1BVUGlwZWxpbmVTdGF0aXN0aWNOYW1lIGNvbnZlcnRU
b0JhY2tpbmcoUGlwZWxpbmVTdGF0aXN0aWNOYW1lKTsKK1dHUFVQb3dlclByZWZlcmVuY2UgY29u
dmVydFRvQmFja2luZyhQb3dlclByZWZlcmVuY2UpOworV0dQVVByaW1pdGl2ZVRvcG9sb2d5IGNv
bnZlcnRUb0JhY2tpbmcoUHJpbWl0aXZlVG9wb2xvZ3kpOworV0dQVVF1ZXJ5VHlwZSBjb252ZXJ0
VG9CYWNraW5nKFF1ZXJ5VHlwZSk7CitXR1BVU2FtcGxlckJpbmRpbmdUeXBlIGNvbnZlcnRUb0Jh
Y2tpbmcoU2FtcGxlckJpbmRpbmdUeXBlKTsKK1dHUFVTdGVuY2lsT3BlcmF0aW9uIGNvbnZlcnRU
b0JhY2tpbmcoU3RlbmNpbE9wZXJhdGlvbik7CitXR1BVU3RvcmFnZVRleHR1cmVBY2Nlc3MgY29u
dmVydFRvQmFja2luZyhTdG9yYWdlVGV4dHVyZUFjY2Vzcyk7CitXR1BVU3RvcmVPcCBjb252ZXJ0
VG9CYWNraW5nKFN0b3JlT3ApOworV0dQVVRleHR1cmVBc3BlY3QgY29udmVydFRvQmFja2luZyhU
ZXh0dXJlQXNwZWN0KTsKK1dHUFVUZXh0dXJlRGltZW5zaW9uIGNvbnZlcnRUb0JhY2tpbmcoVGV4
dHVyZURpbWVuc2lvbik7CitXR1BVVGV4dHVyZUZvcm1hdCBjb252ZXJ0VG9CYWNraW5nKFRleHR1
cmVGb3JtYXQpOworV0dQVVRleHR1cmVTYW1wbGVUeXBlIGNvbnZlcnRUb0JhY2tpbmcoVGV4dHVy
ZVNhbXBsZVR5cGUpOworV0dQVVRleHR1cmVWaWV3RGltZW5zaW9uIGNvbnZlcnRUb0JhY2tpbmco
VGV4dHVyZVZpZXdEaW1lbnNpb24pOworV0dQVVZlcnRleEZvcm1hdCBjb252ZXJ0VG9CYWNraW5n
KFZlcnRleEZvcm1hdCk7CitXR1BVVmVydGV4U3RlcE1vZGUgY29udmVydFRvQmFja2luZyhWZXJ0
ZXhTdGVwTW9kZSk7CitXR1BVQnVmZmVyVXNhZ2VGbGFncyBjb252ZXJ0QnVmZmVyVXNhZ2VGbGFn
c1RvQmFja2luZyhCdWZmZXJVc2FnZUZsYWdzKTsKK1dHUFVDb2xvcldyaXRlTWFza0ZsYWdzIGNv
bnZlcnRDb2xvcldyaXRlRmxhZ3NUb0JhY2tpbmcoQ29sb3JXcml0ZUZsYWdzKTsKK1dHUFVNYXBN
b2RlRmxhZ3MgY29udmVydE1hcE1vZGVGbGFnc1RvQmFja2luZyhNYXBNb2RlRmxhZ3MpOworV0dQ
VVNoYWRlclN0YWdlRmxhZ3MgY29udmVydFNoYWRlclN0YWdlRmxhZ3NUb0JhY2tpbmcoU2hhZGVy
U3RhZ2VGbGFncyk7CitXR1BVVGV4dHVyZVVzYWdlRmxhZ3MgY29udmVydFRleHR1cmVVc2FnZUZs
YWdzVG9CYWNraW5nKFRleHR1cmVVc2FnZUZsYWdzKTsKK1dHUFVDb2xvciBjb252ZXJ0VG9CYWNr
aW5nKGNvbnN0IENvbG9yJik7CitXR1BVRXh0ZW50M0QgY29udmVydFRvQmFja2luZyhjb25zdCBF
eHRlbnQzRCYpOworV0dQVU9yaWdpbjNEIGNvbnZlcnRUb0JhY2tpbmcoY29uc3QgT3JpZ2luMkQm
KTsKK1dHUFVPcmlnaW4zRCBjb252ZXJ0VG9CYWNraW5nKGNvbnN0IE9yaWdpbjNEJik7CisKK30g
Ly8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVURldmljZUltcGwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVE
ZXZpY2VJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZTE3YjIzMGVjZmU5MmYxM2Q0NmM2YTkwNDE4MzUw
YWRlMzUwNzE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVEZXZpY2VJbXBsLmNwcApAQCAtMCwwICsxLDU4MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVEZXZpY2VJ
bXBsLmgiCisKKyNpbmNsdWRlICJXZWJHUFVCaW5kR3JvdXBEZXNjcmlwdG9yLmgiCisjaW5jbHVk
ZSAiV2ViR1BVQmluZEdyb3VwSW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVUJpbmRHcm91cExheW91
dERlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJXZWJHUFVCaW5kR3JvdXBMYXlvdXRJbXBsLmgiCisj
aW5jbHVkZSAiV2ViR1BVQnVmZmVyRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIldlYkdQVUJ1ZmZl
ckltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVDb21tYW5kRW5jb2RlckRlc2NyaXB0b3IuaCIKKyNp
bmNsdWRlICJXZWJHUFVDb21tYW5kRW5jb2RlckltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVDb21w
dXRlUGlwZWxpbmVEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiV2ViR1BVQ29tcHV0ZVBpcGVsaW5l
SW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVUNvbnZlcnRUb0JhY2tpbmcuaCIKKyNpbmNsdWRlICJX
ZWJHUFVFeHRlcm5hbFRleHR1cmVJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVT3V0T2ZNZW1vcnlF
cnJvci5oIgorI2luY2x1ZGUgIldlYkdQVVBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvci5oIgorI2lu
Y2x1ZGUgIldlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVVF1ZXJ5
U2V0RGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIldlYkdQVVF1ZXJ5U2V0SW1wbC5oIgorI2luY2x1
ZGUgIldlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiV2Vi
R1BVUmVuZGVyQnVuZGxlRW5jb2RlckltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVSZW5kZXJQaXBl
bGluZURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJXZWJHUFVSZW5kZXJQaXBlbGluZUltcGwuaCIK
KyNpbmNsdWRlICJXZWJHUFVTYW1wbGVyRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIldlYkdQVVNh
bXBsZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVU2hhZGVyTW9kdWxlRGVzY3JpcHRvci5oIgor
I2luY2x1ZGUgIldlYkdQVVNoYWRlck1vZHVsZUltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0
dXJlRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIldlYkdQVVRleHR1cmVJbXBsLmgiCisjaW5jbHVk
ZSAiV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVVmFsaWRhdGlvbkVy
cm9yLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsK
K25hbWVzcGFjZSBXZWJHUFUgeworCitEZXZpY2VJbXBsOjpEZXZpY2VJbXBsKFdHUFVEZXZpY2Ug
ZGV2aWNlLCBSZWY8U3VwcG9ydGVkRmVhdHVyZXM+JiYgZmVhdHVyZXMsIFJlZjxTdXBwb3J0ZWRM
aW1pdHM+JiYgbGltaXRzKQorICAgIDogRGV2aWNlKFdURk1vdmUoZmVhdHVyZXMpLCBXVEZNb3Zl
KGxpbWl0cykpCisgICAgLCBtX2JhY2tpbmcoZGV2aWNlKQoreworfQorCitEZXZpY2VJbXBsOjp+
RGV2aWNlSW1wbCgpCit7CisgICAgd2dwdURldmljZVJlbGVhc2UobV9iYWNraW5nKTsKK30KKwor
dm9pZCBEZXZpY2VJbXBsOjpkZXN0cm95KCkKK3sKKyAgICB3Z3B1RGV2aWNlRGVzdHJveShtX2Jh
Y2tpbmcpOworfQorCitSZWY8QnVmZmVyPiBEZXZpY2VJbXBsOjpjcmVhdGVCdWZmZXIoY29uc3Qg
QnVmZmVyRGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBhdXRvIGxhYmVsID0gZGVzY3Jp
cHRvci5sYWJlbC51dGY4KCk7CisKKyAgICBXR1BVQnVmZmVyRGVzY3JpcHRvciBiYWNraW5nRGVz
Y3JpcHRvciB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIGxhYmVsLmRhdGEoKSwKKyAgICAg
ICAgY29udmVydEJ1ZmZlclVzYWdlRmxhZ3NUb0JhY2tpbmcoZGVzY3JpcHRvci51c2FnZSksCisg
ICAgICAgIGRlc2NyaXB0b3Iuc2l6ZSwKKyAgICAgICAgZGVzY3JpcHRvci5tYXBwZWRBdENyZWF0
aW9uLAorICAgIH07CisKKyAgICByZXR1cm4gQnVmZmVySW1wbDo6Y3JlYXRlKHdncHVEZXZpY2VD
cmVhdGVCdWZmZXIobV9iYWNraW5nLCAmYmFja2luZ0Rlc2NyaXB0b3IpKTsKK30KKworUmVmPFRl
eHR1cmU+IERldmljZUltcGw6OmNyZWF0ZVRleHR1cmUoY29uc3QgVGV4dHVyZURlc2NyaXB0b3Im
IGRlc2NyaXB0b3IpCit7CisgICAgYXV0byBzaXplID0gY29udmVydFRvQmFja2luZyhkZXNjcmlw
dG9yLnNpemUpOworCisgICAgYXV0byBsYWJlbCA9IGRlc2NyaXB0b3IubGFiZWwudXRmOCgpOwor
CisgICAgV0dQVVRleHR1cmVEZXNjcmlwdG9yIGJhY2tpbmdEZXNjcmlwdG9yIHsKKyAgICAgICAg
bnVsbHB0ciwKKyAgICAgICAgbGFiZWwuZGF0YSgpLAorICAgICAgICBjb252ZXJ0VGV4dHVyZVVz
YWdlRmxhZ3NUb0JhY2tpbmcoZGVzY3JpcHRvci51c2FnZSksCisgICAgICAgIGNvbnZlcnRUb0Jh
Y2tpbmcoZGVzY3JpcHRvci5kaW1lbnNpb24pLAorICAgICAgICBzaXplLAorICAgICAgICBjb252
ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3IuZm9ybWF0KSwKKyAgICAgICAgZGVzY3JpcHRvci5taXBM
ZXZlbENvdW50LAorICAgICAgICBkZXNjcmlwdG9yLnNhbXBsZUNvdW50LAorICAgIH07CisKKyAg
ICByZXR1cm4gVGV4dHVyZUltcGw6OmNyZWF0ZSh3Z3B1RGV2aWNlQ3JlYXRlVGV4dHVyZShtX2Jh
Y2tpbmcsICZiYWNraW5nRGVzY3JpcHRvciksIGRlc2NyaXB0b3IuZm9ybWF0LCBkZXNjcmlwdG9y
LmRpbWVuc2lvbik7Cit9CisKK1JlZjxTYW1wbGVyPiBEZXZpY2VJbXBsOjpjcmVhdGVTYW1wbGVy
KGNvbnN0IFNhbXBsZXJEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIGF1dG8gbGFiZWwg
PSBkZXNjcmlwdG9yLmxhYmVsLnV0ZjgoKTsKKworICAgIFdHUFVTYW1wbGVyRGVzY3JpcHRvciBi
YWNraW5nRGVzY3JpcHRvciB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIGxhYmVsLmRhdGEo
KSwKKyAgICAgICAgY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLmFkZHJlc3NNb2RlVSksCisg
ICAgICAgIGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci5hZGRyZXNzTW9kZVYpLAorICAgICAg
ICBjb252ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3IuYWRkcmVzc01vZGVXKSwKKyAgICAgICAgY29u
dmVydFRvQmFja2luZyhkZXNjcmlwdG9yLm1hZ0ZpbHRlciksCisgICAgICAgIGNvbnZlcnRUb0Jh
Y2tpbmcoZGVzY3JpcHRvci5taW5GaWx0ZXIpLAorICAgICAgICBjb252ZXJ0VG9CYWNraW5nKGRl
c2NyaXB0b3IubWlwbWFwRmlsdGVyKSwKKyAgICAgICAgZGVzY3JpcHRvci5sb2RNaW5DbGFtcCwK
KyAgICAgICAgZGVzY3JpcHRvci5sb2RNYXhDbGFtcCwKKyAgICAgICAgZGVzY3JpcHRvci5jb21w
YXJlID8gY29udmVydFRvQmFja2luZygqZGVzY3JpcHRvci5jb21wYXJlKSA6IFdHUFVDb21wYXJl
RnVuY3Rpb25fQWx3YXlzLAorICAgICAgICBkZXNjcmlwdG9yLm1heEFuaXNvdHJvcHksCisgICAg
fTsKKworICAgIHJldHVybiBTYW1wbGVySW1wbDo6Y3JlYXRlKHdncHVEZXZpY2VDcmVhdGVTYW1w
bGVyKG1fYmFja2luZywgJmJhY2tpbmdEZXNjcmlwdG9yKSk7Cit9CisKK1JlZjxFeHRlcm5hbFRl
eHR1cmU+IERldmljZUltcGw6OmltcG9ydEV4dGVybmFsVGV4dHVyZShjb25zdCBFeHRlcm5hbFRl
eHR1cmVEZXNjcmlwdG9yJikKK3sKKyAgICByZXR1cm4gRXh0ZXJuYWxUZXh0dXJlSW1wbDo6Y3Jl
YXRlKCk7Cit9CisKK1JlZjxCaW5kR3JvdXBMYXlvdXQ+IERldmljZUltcGw6OmNyZWF0ZUJpbmRH
cm91cExheW91dChjb25zdCBCaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQor
eworICAgIGF1dG8gbGFiZWwgPSBkZXNjcmlwdG9yLmxhYmVsLnV0ZjgoKTsKKworICAgIFZlY3Rv
cjxXR1BVQmluZEdyb3VwTGF5b3V0RW50cnk+IGJhY2tpbmdFbnRyaWVzOworICAgIGJhY2tpbmdF
bnRyaWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGVzY3JpcHRvci5lbnRyaWVzLnNpemUoKSk7
CisgICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IGRlc2NyaXB0b3IuZW50cmllcykgeworICAg
ICAgICBiYWNraW5nRW50cmllcy51bmNoZWNrZWRBcHBlbmQoV0dQVUJpbmRHcm91cExheW91dEVu
dHJ5IHsKKyAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICBlbnRyeS5iaW5kaW5nLAor
ICAgICAgICAgICAgY29udmVydFNoYWRlclN0YWdlRmxhZ3NUb0JhY2tpbmcoZW50cnkudmlzaWJp
bGl0eSksIHsKKyAgICAgICAgICAgICAgICBudWxscHRyLAorICAgICAgICAgICAgICAgIGVudHJ5
LmJ1ZmZlciA/IGNvbnZlcnRUb0JhY2tpbmcoZW50cnkuYnVmZmVyLT50eXBlKSA6IFdHUFVCdWZm
ZXJCaW5kaW5nVHlwZV9VbmRlZmluZWQsCisgICAgICAgICAgICAgICAgZW50cnkuYnVmZmVyID8g
ZW50cnkuYnVmZmVyLT5oYXNEeW5hbWljT2Zmc2V0IDogZmFsc2UsCisgICAgICAgICAgICAgICAg
ZW50cnkuYnVmZmVyID8gZW50cnkuYnVmZmVyLT5taW5CaW5kaW5nU2l6ZSA6IDAsCisgICAgICAg
ICAgICB9LCB7CisgICAgICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICBlbnRy
eS5zYW1wbGVyID8gY29udmVydFRvQmFja2luZyhlbnRyeS5zYW1wbGVyLT50eXBlKSA6IFdHUFVT
YW1wbGVyQmluZGluZ1R5cGVfVW5kZWZpbmVkLAorICAgICAgICAgICAgfSwgeworICAgICAgICAg
ICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICAgICAgZW50cnkudGV4dHVyZSA/IGNvbnZlcnRU
b0JhY2tpbmcoZW50cnkudGV4dHVyZS0+c2FtcGxlVHlwZSkgOiBXR1BVVGV4dHVyZVNhbXBsZVR5
cGVfVW5kZWZpbmVkLAorICAgICAgICAgICAgICAgIGVudHJ5LnRleHR1cmUgPyBjb252ZXJ0VG9C
YWNraW5nKGVudHJ5LnRleHR1cmUtPnZpZXdEaW1lbnNpb24pIDogV0dQVVRleHR1cmVWaWV3RGlt
ZW5zaW9uX1VuZGVmaW5lZCwKKyAgICAgICAgICAgICAgICBlbnRyeS50ZXh0dXJlID8gZW50cnku
dGV4dHVyZS0+bXVsdGlzYW1wbGVkIDogZmFsc2UsCisgICAgICAgICAgICB9LCB7CisgICAgICAg
ICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICBlbnRyeS5zdG9yYWdlVGV4dHVyZSA/
IGNvbnZlcnRUb0JhY2tpbmcoZW50cnkuc3RvcmFnZVRleHR1cmUtPmFjY2VzcykgOiBXR1BVU3Rv
cmFnZVRleHR1cmVBY2Nlc3NfVW5kZWZpbmVkLAorICAgICAgICAgICAgICAgIGVudHJ5LnN0b3Jh
Z2VUZXh0dXJlID8gY29udmVydFRvQmFja2luZyhlbnRyeS5zdG9yYWdlVGV4dHVyZS0+Zm9ybWF0
KSA6IFdHUFVUZXh0dXJlRm9ybWF0X1VuZGVmaW5lZCwKKyAgICAgICAgICAgICAgICBlbnRyeS5z
dG9yYWdlVGV4dHVyZSA/IGNvbnZlcnRUb0JhY2tpbmcoZW50cnkuc3RvcmFnZVRleHR1cmUtPnZp
ZXdEaW1lbnNpb24pIDogV0dQVVRleHR1cmVWaWV3RGltZW5zaW9uX1VuZGVmaW5lZCwKKyAgICAg
ICAgICAgIH0sCisgICAgICAgIH0pOworICAgIH0KKworICAgIFdHUFVCaW5kR3JvdXBMYXlvdXRE
ZXNjcmlwdG9yIGJhY2tpbmdEZXNjcmlwdG9yIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAg
bGFiZWwuZGF0YSgpLAorICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYmFja2luZ0VudHJp
ZXMuc2l6ZSgpKSwKKyAgICAgICAgYmFja2luZ0VudHJpZXMuZGF0YSgpLAorICAgIH07CisKKyAg
ICByZXR1cm4gQmluZEdyb3VwTGF5b3V0SW1wbDo6Y3JlYXRlKHdncHVEZXZpY2VDcmVhdGVCaW5k
R3JvdXBMYXlvdXQobV9iYWNraW5nLCAmYmFja2luZ0Rlc2NyaXB0b3IpKTsKK30KKworUmVmPFBp
cGVsaW5lTGF5b3V0PiBEZXZpY2VJbXBsOjpjcmVhdGVQaXBlbGluZUxheW91dChjb25zdCBQaXBl
bGluZUxheW91dERlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgYXV0byBsYWJlbCA9IGRl
c2NyaXB0b3IubGFiZWwudXRmOCgpOworCisgICAgVmVjdG9yPFdHUFVCaW5kR3JvdXBMYXlvdXQ+
IGJhY2tpbmdCaW5kR3JvdXBMYXlvdXRzOworICAgIGJhY2tpbmdCaW5kR3JvdXBMYXlvdXRzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoZGVzY3JpcHRvci5iaW5kR3JvdXBMYXlvdXRzLnNpemUoKSk7
CisgICAgZm9yIChhdXRvIGJpbmRHcm91cExheW91dCA6IGRlc2NyaXB0b3IuYmluZEdyb3VwTGF5
b3V0cykKKyAgICAgICAgYmFja2luZ0JpbmRHcm91cExheW91dHMudW5jaGVja2VkQXBwZW5kKHN0
YXRpY19jYXN0PGNvbnN0IEJpbmRHcm91cExheW91dEltcGwmPihiaW5kR3JvdXBMYXlvdXQuZ2V0
KCkpLmJhY2tpbmcoKSk7CisKKyAgICBXR1BVUGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yIGJhY2tp
bmdEZXNjcmlwdG9yIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgbGFiZWwuZGF0YSgpLAor
ICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYmFja2luZ0JpbmRHcm91cExheW91dHMuc2l6
ZSgpKSwKKyAgICAgICAgYmFja2luZ0JpbmRHcm91cExheW91dHMuZGF0YSgpLAorICAgIH07CisK
KyAgICByZXR1cm4gUGlwZWxpbmVMYXlvdXRJbXBsOjpjcmVhdGUod2dwdURldmljZUNyZWF0ZVBp
cGVsaW5lTGF5b3V0KG1fYmFja2luZywgJmJhY2tpbmdEZXNjcmlwdG9yKSk7Cit9CisKK1JlZjxC
aW5kR3JvdXA+IERldmljZUltcGw6OmNyZWF0ZUJpbmRHcm91cChjb25zdCBCaW5kR3JvdXBEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIGF1dG8gbGFiZWwgPSBkZXNjcmlwdG9yLmxhYmVs
LnV0ZjgoKTsKKworICAgIFZlY3RvcjxXR1BVQmluZEdyb3VwRW50cnk+IGJhY2tpbmdFbnRyaWVz
OworICAgIGJhY2tpbmdFbnRyaWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGVzY3JpcHRvci5l
bnRyaWVzLnNpemUoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBiaW5kR3JvdXBFbnRyeSA6IGRl
c2NyaXB0b3IuZW50cmllcykgeworICAgICAgICBiYWNraW5nRW50cmllcy51bmNoZWNrZWRBcHBl
bmQoV0dQVUJpbmRHcm91cEVudHJ5IHsKKyAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAg
ICBiaW5kR3JvdXBFbnRyeS5iaW5kaW5nLAorICAgICAgICAgICAgc3RkOjpob2xkc19hbHRlcm5h
dGl2ZTxCdWZmZXJCaW5kaW5nPihiaW5kR3JvdXBFbnRyeS5yZXNvdXJjZSkgPyBzdGF0aWNfY2Fz
dDxjb25zdCBCdWZmZXJJbXBsJj4oc3RkOjpnZXQ8QnVmZmVyQmluZGluZz4oYmluZEdyb3VwRW50
cnkucmVzb3VyY2UpLmJ1ZmZlcikuYmFja2luZygpIDogbnVsbHB0ciwKKyAgICAgICAgICAgIHN0
ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8QnVmZmVyQmluZGluZz4oYmluZEdyb3VwRW50cnkucmVzb3Vy
Y2UpID8gc3RkOjpnZXQ8QnVmZmVyQmluZGluZz4oYmluZEdyb3VwRW50cnkucmVzb3VyY2UpLm9m
ZnNldCA6IDAsCisgICAgICAgICAgICBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPEJ1ZmZlckJpbmRp
bmc+KGJpbmRHcm91cEVudHJ5LnJlc291cmNlKSA/IHN0ZDo6Z2V0PEJ1ZmZlckJpbmRpbmc+KGJp
bmRHcm91cEVudHJ5LnJlc291cmNlKS5zaXplLnZhbHVlX29yKFdHUFVfV0hPTEVfU0laRSkgOiAw
LAorICAgICAgICAgICAgc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPFNhbXBsZXI+PihiaW5kR3JvdXBFbnRyeS5yZXNvdXJjZSkgPyBzdGF0aWNfY2FzdDxjb25z
dCBTYW1wbGVySW1wbCY+KHN0ZDo6Z2V0PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8U2FtcGxlcj4+
KGJpbmRHcm91cEVudHJ5LnJlc291cmNlKS5nZXQoKSkuYmFja2luZygpIDogbnVsbHB0ciwKKyAg
ICAgICAgICAgIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxU
ZXh0dXJlVmlldz4+KGJpbmRHcm91cEVudHJ5LnJlc291cmNlKSA/IHN0YXRpY19jYXN0PGNvbnN0
IFRleHR1cmVWaWV3SW1wbCY+KHN0ZDo6Z2V0PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8VGV4dHVy
ZVZpZXc+PihiaW5kR3JvdXBFbnRyeS5yZXNvdXJjZSkuZ2V0KCkpLmJhY2tpbmcoKSA6IG51bGxw
dHIsCisgICAgICAgIH0pOworICAgIH0KKworICAgIFdHUFVCaW5kR3JvdXBEZXNjcmlwdG9yIGJh
Y2tpbmdEZXNjcmlwdG9yIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgbGFiZWwuZGF0YSgp
LAorICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBCaW5kR3JvdXBMYXlvdXRJbXBsJj4oZGVzY3Jp
cHRvci5sYXlvdXQpLmJhY2tpbmcoKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGJh
Y2tpbmdFbnRyaWVzLnNpemUoKSksCisgICAgICAgIGJhY2tpbmdFbnRyaWVzLmRhdGEoKSwKKyAg
ICB9OworCisgICAgcmV0dXJuIEJpbmRHcm91cEltcGw6OmNyZWF0ZSh3Z3B1RGV2aWNlQ3JlYXRl
QmluZEdyb3VwKG1fYmFja2luZywgJmJhY2tpbmdEZXNjcmlwdG9yKSk7Cit9CisKK1JlZjxTaGFk
ZXJNb2R1bGU+IERldmljZUltcGw6OmNyZWF0ZVNoYWRlck1vZHVsZShjb25zdCBTaGFkZXJNb2R1
bGVEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIGF1dG8gbGFiZWwgPSBkZXNjcmlwdG9y
LmxhYmVsLnV0ZjgoKTsKKworICAgIFdHUFVTaGFkZXJNb2R1bGVEZXNjcmlwdG9yIGJhY2tpbmdE
ZXNjcmlwdG9yIHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgbGFiZWwuZGF0YSgpLAorICAg
IH07CisKKyAgICByZXR1cm4gU2hhZGVyTW9kdWxlSW1wbDo6Y3JlYXRlKHdncHVEZXZpY2VDcmVh
dGVTaGFkZXJNb2R1bGUobV9iYWNraW5nLCAmYmFja2luZ0Rlc2NyaXB0b3IpKTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CithdXRvIGNvbnZlcnRUb0JhY2tpbmcoY29uc3QgQ29tcHV0ZVBp
cGVsaW5lRGVzY3JpcHRvciYgZGVzY3JpcHRvciwgVCYmIGNhbGxiYWNrKQoreworICAgIGF1dG8g
bGFiZWwgPSBkZXNjcmlwdG9yLmxhYmVsLnV0ZjgoKTsKKworICAgIGF1dG8gZW50cnlQb2ludCA9
IGRlc2NyaXB0b3IuY29tcHV0ZS5lbnRyeVBvaW50LnV0ZjgoKTsKKworICAgIFZlY3RvcjxDU3Ry
aW5nPiBrZXlzOworICAgIGtleXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShkZXNjcmlwdG9yLmNv
bXB1dGUuY29uc3RhbnRzLnNpemUoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBjb25zdGFudCA6
IGRlc2NyaXB0b3IuY29tcHV0ZS5jb25zdGFudHMpCisgICAgICAgIGtleXMudW5jaGVja2VkQXBw
ZW5kKGNvbnN0YW50LmtleS51dGY4KCkpOworCisgICAgVmVjdG9yPFdHUFVDb25zdGFudEVudHJ5
PiBiYWNraW5nQ29uc3RhbnRFbnRyaWVzOworICAgIGJhY2tpbmdDb25zdGFudEVudHJpZXMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShkZXNjcmlwdG9yLmNvbXB1dGUuY29uc3RhbnRzLnNpemUoKSk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkZXNjcmlwdG9yLmNvbXB1dGUuY29uc3RhbnRz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIGNvbnN0YW50ID0gZGVzY3JpcHRv
ci5jb21wdXRlLmNvbnN0YW50c1tpXTsKKyAgICAgICAgYmFja2luZ0NvbnN0YW50RW50cmllcy51
bmNoZWNrZWRBcHBlbmQoV0dQVUNvbnN0YW50RW50cnkgeworICAgICAgICAgICAgbnVsbHB0ciwK
KyAgICAgICAgICAgIGtleXNbaV0uZGF0YSgpLAorICAgICAgICAgICAgY29uc3RhbnQudmFsdWUK
KyAgICAgICAgfSk7CisgICAgfQorCisgICAgV0dQVUNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3Ig
YmFja2luZ0Rlc2NyaXB0b3IgeworICAgICAgICBudWxscHRyLAorICAgICAgICBsYWJlbC5kYXRh
KCksCisgICAgICAgIGRlc2NyaXB0b3IubGF5b3V0ID8gc3RhdGljX2Nhc3Q8Y29uc3QgUGlwZWxp
bmVMYXlvdXRJbXBsJj4oKmRlc2NyaXB0b3IubGF5b3V0KS5iYWNraW5nKCkgOiBudWxscHRyLCB7
CisgICAgICAgICAgICBudWxscHRyLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgU2hh
ZGVyTW9kdWxlSW1wbCY+KGRlc2NyaXB0b3IuY29tcHV0ZS5tb2R1bGUpLmJhY2tpbmcoKSwKKyAg
ICAgICAgICAgIGVudHJ5UG9pbnQuZGF0YSgpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KGJhY2tpbmdDb25zdGFudEVudHJpZXMuc2l6ZSgpKSwKKyAgICAgICAgICAgIGJhY2tp
bmdDb25zdGFudEVudHJpZXMuZGF0YSgpLAorICAgICAgICB9CisgICAgfTsKKworICAgIHJldHVy
biBjYWxsYmFjayhiYWNraW5nRGVzY3JpcHRvcik7Cit9CisKK1JlZjxDb21wdXRlUGlwZWxpbmU+
IERldmljZUltcGw6OmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb25zdCBDb21wdXRlUGlwZWxpbmVE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIHJldHVybiBjb252ZXJ0VG9CYWNraW5nKGRl
c2NyaXB0b3IsIFt0aGlzXSAoY29uc3QgV0dQVUNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3ImIGJh
Y2tpbmdEZXNjcmlwdG9yKSB7CisgICAgICAgIHJldHVybiBDb21wdXRlUGlwZWxpbmVJbXBsOjpj
cmVhdGUod2dwdURldmljZUNyZWF0ZUNvbXB1dGVQaXBlbGluZShtX2JhY2tpbmcsICZiYWNraW5n
RGVzY3JpcHRvcikpOworICAgIH0pOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2F1dG8g
Y29udmVydFRvQmFja2luZyhjb25zdCBSZW5kZXJQaXBlbGluZURlc2NyaXB0b3ImIGRlc2NyaXB0
b3IsIFQmJiBjYWxsYmFjaykKK3sKKyAgICBhdXRvIGxhYmVsID0gZGVzY3JpcHRvci5sYWJlbC51
dGY4KCk7CisKKyAgICBWZWN0b3I8VmVjdG9yPFdHUFVWZXJ0ZXhBdHRyaWJ1dGU+PiBiYWNraW5n
QXR0cmlidXRlczsKKyAgICBiYWNraW5nQXR0cmlidXRlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KGRlc2NyaXB0b3IudmVydGV4LmJ1ZmZlcnMuc2l6ZSgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IGJ1ZmZlciA6IGRlc2NyaXB0b3IudmVydGV4LmJ1ZmZlcnMpIHsKKyAgICAgICAgaWYgKGJ1ZmZl
cikgeworICAgICAgICAgICAgVmVjdG9yPFdHUFVWZXJ0ZXhBdHRyaWJ1dGU+IGF0dHJpYnV0ZXM7
CisgICAgICAgICAgICBhdHRyaWJ1dGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYnVmZmVyLT5h
dHRyaWJ1dGVzLnNpemUoKSk7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGF0dHJpYnV0
ZSA6IGJ1ZmZlci0+YXR0cmlidXRlcykgeworICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMudW5j
aGVja2VkQXBwZW5kKFdHUFVWZXJ0ZXhBdHRyaWJ1dGUgeworICAgICAgICAgICAgICAgICAgICBj
b252ZXJ0VG9CYWNraW5nKGF0dHJpYnV0ZS5mb3JtYXQpLAorICAgICAgICAgICAgICAgICAgICBh
dHRyaWJ1dGUub2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUuc2hhZGVyTG9j
YXRpb24sCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
YWNraW5nQXR0cmlidXRlcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShhdHRyaWJ1dGVzKSk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYmFja2luZ0F0dHJpYnV0ZXMudW5jaGVja2VkQXBw
ZW5kKHsgfSk7CisgICAgfQorCisgICAgVmVjdG9yPFdHUFVWZXJ0ZXhCdWZmZXJMYXlvdXQ+IGJh
Y2tpbmdCdWZmZXJzOworICAgIGJhY2tpbmdCdWZmZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
ZGVzY3JpcHRvci52ZXJ0ZXguYnVmZmVycy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZGVzY3JpcHRvci52ZXJ0ZXguYnVmZmVycy5zaXplKCk7ICsraSkgeworICAgICAgICBj
b25zdCBhdXRvJiBidWZmZXIgPSBkZXNjcmlwdG9yLnZlcnRleC5idWZmZXJzW2ldOworICAgICAg
ICBiYWNraW5nQnVmZmVycy51bmNoZWNrZWRBcHBlbmQoV0dQVVZlcnRleEJ1ZmZlckxheW91dCB7
CisgICAgICAgICAgICBidWZmZXIgPyBidWZmZXItPmFycmF5U3RyaWRlIDogV0dQVV9DT1BZX1NU
UklERV9VTkRFRklORUQsCisgICAgICAgICAgICBidWZmZXIgPyBjb252ZXJ0VG9CYWNraW5nKGJ1
ZmZlci0+c3RlcE1vZGUpIDogV0dQVVZlcnRleFN0ZXBNb2RlX1ZlcnRleCwKKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PHVpbnQzMl90PihiYWNraW5nQXR0cmlidXRlc1tpXS5zaXplKCkpLAorICAg
ICAgICAgICAgYmFja2luZ0F0dHJpYnV0ZXNbaV0uZGF0YSgpLAorICAgICAgICB9KTsKKyAgICB9
CisKKyAgICBXR1BVRGVwdGhTdGVuY2lsU3RhdGUgZGVwdGhTdGVuY2lsU3RhdGUgeworICAgICAg
ICBudWxscHRyLAorICAgICAgICBkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbCA/IGNvbnZlcnRUb0Jh
Y2tpbmcoZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwtPmZvcm1hdCkgOiBXR1BVVGV4dHVyZUZvcm1h
dF9VbmRlZmluZWQsCisgICAgICAgIGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsID8gZGVzY3JpcHRv
ci5kZXB0aFN0ZW5jaWwtPmRlcHRoV3JpdGVFbmFibGVkIDogZmFsc2UsCisgICAgICAgIGRlc2Ny
aXB0b3IuZGVwdGhTdGVuY2lsID8gY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLmRlcHRoU3Rl
bmNpbC0+ZGVwdGhDb21wYXJlKSA6IFdHUFVDb21wYXJlRnVuY3Rpb25fVW5kZWZpbmVkLCB7Cisg
ICAgICAgICAgICBkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbCA/IGNvbnZlcnRUb0JhY2tpbmcoZGVz
Y3JpcHRvci5kZXB0aFN0ZW5jaWwtPnN0ZW5jaWxGcm9udC5jb21wYXJlKSA6IFdHUFVDb21wYXJl
RnVuY3Rpb25fVW5kZWZpbmVkLAorICAgICAgICAgICAgZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwg
PyBjb252ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsLT5zdGVuY2lsRnJvbnQu
ZmFpbE9wKSA6IFdHUFVTdGVuY2lsT3BlcmF0aW9uX0tlZXAsCisgICAgICAgICAgICBkZXNjcmlw
dG9yLmRlcHRoU3RlbmNpbCA/IGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci5kZXB0aFN0ZW5j
aWwtPnN0ZW5jaWxGcm9udC5kZXB0aEZhaWxPcCkgOiBXR1BVU3RlbmNpbE9wZXJhdGlvbl9LZWVw
LAorICAgICAgICAgICAgZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwgPyBjb252ZXJ0VG9CYWNraW5n
KGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsLT5zdGVuY2lsRnJvbnQucGFzc09wKSA6IFdHUFVTdGVu
Y2lsT3BlcmF0aW9uX0tlZXAsCisgICAgICAgIH0sIHsKKyAgICAgICAgICAgIGRlc2NyaXB0b3Iu
ZGVwdGhTdGVuY2lsID8gY29udmVydFRvQmFja2luZyhkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbC0+
c3RlbmNpbEJhY2suY29tcGFyZSkgOiBXR1BVQ29tcGFyZUZ1bmN0aW9uX1VuZGVmaW5lZCwKKyAg
ICAgICAgICAgIGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsID8gY29udmVydFRvQmFja2luZyhkZXNj
cmlwdG9yLmRlcHRoU3RlbmNpbC0+c3RlbmNpbEJhY2suZmFpbE9wKSA6IFdHUFVTdGVuY2lsT3Bl
cmF0aW9uX0tlZXAsCisgICAgICAgICAgICBkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbCA/IGNvbnZl
cnRUb0JhY2tpbmcoZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwtPnN0ZW5jaWxCYWNrLmRlcHRoRmFp
bE9wKSA6IFdHUFVTdGVuY2lsT3BlcmF0aW9uX0tlZXAsCisgICAgICAgICAgICBkZXNjcmlwdG9y
LmRlcHRoU3RlbmNpbCA/IGNvbnZlcnRUb0JhY2tpbmcoZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwt
PnN0ZW5jaWxCYWNrLnBhc3NPcCkgOiBXR1BVU3RlbmNpbE9wZXJhdGlvbl9LZWVwLAorICAgICAg
ICB9LAorICAgICAgICBkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbCAmJiBkZXNjcmlwdG9yLmRlcHRo
U3RlbmNpbC0+c3RlbmNpbFJlYWRNYXNrID8gKmRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsLT5zdGVu
Y2lsUmVhZE1hc2sgOiAwLAorICAgICAgICBkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbCAmJiBkZXNj
cmlwdG9yLmRlcHRoU3RlbmNpbC0+c3RlbmNpbFdyaXRlTWFzayA/ICpkZXNjcmlwdG9yLmRlcHRo
U3RlbmNpbC0+c3RlbmNpbFdyaXRlTWFzayA6IDAsCisgICAgICAgIGRlc2NyaXB0b3IuZGVwdGhT
dGVuY2lsID8gZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwtPmRlcHRoQmlhcyA6IDAsCisgICAgICAg
IGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsID8gZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwtPmRlcHRo
Qmlhc1Nsb3BlU2NhbGUgOiAwLAorICAgICAgICBkZXNjcmlwdG9yLmRlcHRoU3RlbmNpbCA/IGRl
c2NyaXB0b3IuZGVwdGhTdGVuY2lsLT5kZXB0aEJpYXNDbGFtcCA6IDAsCisgICAgfTsKKworICAg
IFZlY3RvcjxzdGQ6Om9wdGlvbmFsPFdHUFVCbGVuZFN0YXRlPj4gYmxlbmRTdGF0ZXM7CisgICAg
aWYgKGRlc2NyaXB0b3IuZnJhZ21lbnQpIHsKKyAgICAgICAgYmxlbmRTdGF0ZXMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShkZXNjcmlwdG9yLmZyYWdtZW50LT50YXJnZXRzLnNpemUoKSk7CisgICAg
ICAgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDogZGVzY3JpcHRvci5mcmFnbWVudC0+dGFyZ2V0
cykgeworICAgICAgICAgICAgaWYgKHRhcmdldC5ibGVuZCkgeworICAgICAgICAgICAgICAgIGJs
ZW5kU3RhdGVzLnVuY2hlY2tlZEFwcGVuZChXR1BVQmxlbmRTdGF0ZSB7CisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb0JhY2tpbmcodGFyZ2V0
LmJsZW5kLT5jb2xvci5vcGVyYXRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgY29udmVy
dFRvQmFja2luZyh0YXJnZXQuYmxlbmQtPmNvbG9yLnNyY0ZhY3RvciksCisgICAgICAgICAgICAg
ICAgICAgICAgICBjb252ZXJ0VG9CYWNraW5nKHRhcmdldC5ibGVuZC0+Y29sb3IuZHN0RmFjdG9y
KSwKKyAgICAgICAgICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgICAgICAgICAgY29u
dmVydFRvQmFja2luZyh0YXJnZXQuYmxlbmQtPmFscGhhLm9wZXJhdGlvbiksCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb252ZXJ0VG9CYWNraW5nKHRhcmdldC5ibGVuZC0+YWxwaGEuc3JjRmFj
dG9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb0JhY2tpbmcodGFyZ2V0LmJs
ZW5kLT5hbHBoYS5kc3RGYWN0b3IpLAorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBibGVuZFN0YXRl
cy51bmNoZWNrZWRBcHBlbmQoc3RkOjpudWxsb3B0KTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IFZlY3RvcjxXR1BVQ29sb3JUYXJnZXRTdGF0ZT4gY29sb3JUYXJnZXRzOworICAgIGlmIChkZXNj
cmlwdG9yLmZyYWdtZW50KSB7CisgICAgICAgIGNvbG9yVGFyZ2V0cy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KGRlc2NyaXB0b3IuZnJhZ21lbnQtPnRhcmdldHMuc2l6ZSgpKTsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBkZXNjcmlwdG9yLmZyYWdtZW50LT50YXJnZXRzLnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBjb25zdCBhdXRvJiB0YXJnZXQgPSBkZXNjcmlwdG9yLmZyYWdt
ZW50LT50YXJnZXRzW2ldOworICAgICAgICAgICAgY29sb3JUYXJnZXRzLnVuY2hlY2tlZEFwcGVu
ZChXR1BVQ29sb3JUYXJnZXRTdGF0ZSB7CisgICAgICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAg
ICAgICAgICAgICBjb252ZXJ0VG9CYWNraW5nKHRhcmdldC5mb3JtYXQpLAorICAgICAgICAgICAg
ICAgIGJsZW5kU3RhdGVzW2ldID8gJipibGVuZFN0YXRlc1tpXSA6IG51bGxwdHIsCisgICAgICAg
ICAgICAgICAgY29udmVydENvbG9yV3JpdGVGbGFnc1RvQmFja2luZyh0YXJnZXQud3JpdGVNYXNr
KSwKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgV0dQVUZyYWdtZW50
U3RhdGUgZnJhZ21lbnRTdGF0ZSB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIG51bGxwdHIs
CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIDAsCisgICAgICAgIG51bGxwdHIsCisgICAgICAg
IHN0YXRpY19jYXN0PHVpbnQzMl90Pihjb2xvclRhcmdldHMuc2l6ZSgpKSwKKyAgICAgICAgY29s
b3JUYXJnZXRzLmRhdGEoKSwKKyAgICB9OworCisgICAgV0dQVVJlbmRlclBpcGVsaW5lRGVzY3Jp
cHRvciBiYWNraW5nRGVzY3JpcHRvciB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIGxhYmVs
LmRhdGEoKSwKKyAgICAgICAgZGVzY3JpcHRvci5sYXlvdXQgPyBzdGF0aWNfY2FzdDxjb25zdCBQ
aXBlbGluZUxheW91dEltcGwmPigqZGVzY3JpcHRvci5sYXlvdXQpLmJhY2tpbmcoKSA6IG51bGxw
dHIsIHsKKyAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICBudWxscHRyLAorICAgICAg
ICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBudWxscHRyLAorICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGJhY2tpbmdCdWZmZXJzLnNpemUoKSksCisg
ICAgICAgICAgICBiYWNraW5nQnVmZmVycy5kYXRhKCksCisgICAgICAgIH0sIHsKKyAgICAgICAg
ICAgIG51bGxwdHIsCisgICAgICAgICAgICBkZXNjcmlwdG9yLnByaW1pdGl2ZSA/IGNvbnZlcnRU
b0JhY2tpbmcoZGVzY3JpcHRvci5wcmltaXRpdmUtPnRvcG9sb2d5KSA6IFdHUFVQcmltaXRpdmVU
b3BvbG9neV9Qb2ludExpc3QsCisgICAgICAgICAgICBkZXNjcmlwdG9yLnByaW1pdGl2ZSAmJiBk
ZXNjcmlwdG9yLnByaW1pdGl2ZS0+c3RyaXBJbmRleEZvcm1hdCA/IGNvbnZlcnRUb0JhY2tpbmco
KmRlc2NyaXB0b3IucHJpbWl0aXZlLT5zdHJpcEluZGV4Rm9ybWF0KSA6IFdHUFVJbmRleEZvcm1h
dF9VbmRlZmluZWQsCisgICAgICAgICAgICBkZXNjcmlwdG9yLnByaW1pdGl2ZSA/IGNvbnZlcnRU
b0JhY2tpbmcoZGVzY3JpcHRvci5wcmltaXRpdmUtPmZyb250RmFjZSkgOiBXR1BVRnJvbnRGYWNl
X0NDVywKKyAgICAgICAgICAgIGRlc2NyaXB0b3IucHJpbWl0aXZlID8gY29udmVydFRvQmFja2lu
ZyhkZXNjcmlwdG9yLnByaW1pdGl2ZS0+Y3VsbE1vZGUpIDogV0dQVUN1bGxNb2RlX05vbmUsCisg
ICAgICAgICAgICAKKyAgICAgICAgfSwKKyAgICAgICAgZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWwg
PyAmZGVwdGhTdGVuY2lsU3RhdGUgOiBudWxscHRyLCB7CisgICAgICAgICAgICBudWxscHRyLAor
ICAgICAgICAgICAgZGVzY3JpcHRvci5tdWx0aXNhbXBsZSA/IGRlc2NyaXB0b3IubXVsdGlzYW1w
bGUtPmNvdW50IDogMCwKKyAgICAgICAgICAgIGRlc2NyaXB0b3IubXVsdGlzYW1wbGUgPyBkZXNj
cmlwdG9yLm11bHRpc2FtcGxlLT5tYXNrIDogMCwKKyAgICAgICAgICAgIGRlc2NyaXB0b3IubXVs
dGlzYW1wbGUgPyBkZXNjcmlwdG9yLm11bHRpc2FtcGxlLT5hbHBoYVRvQ292ZXJhZ2VFbmFibGVk
IDogZmFsc2UsCisgICAgICAgIH0sCisgICAgICAgIGRlc2NyaXB0b3IuZnJhZ21lbnQgPyAmZnJh
Z21lbnRTdGF0ZSA6IG51bGxwdHIsCisgICAgfTsKKworICAgIHJldHVybiBjYWxsYmFjayhiYWNr
aW5nRGVzY3JpcHRvcik7Cit9CisKK1JlZjxSZW5kZXJQaXBlbGluZT4gRGV2aWNlSW1wbDo6Y3Jl
YXRlUmVuZGVyUGlwZWxpbmUoY29uc3QgUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yKQoreworICAgIHJldHVybiBjb252ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3IsIFt0aGlzXSAo
Y29uc3QgV0dQVVJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciYgYmFja2luZ0Rlc2NyaXB0b3IpIHsK
KyAgICAgICAgcmV0dXJuIFJlbmRlclBpcGVsaW5lSW1wbDo6Y3JlYXRlKHdncHVEZXZpY2VDcmVh
dGVSZW5kZXJQaXBlbGluZShtX2JhY2tpbmcsICZiYWNraW5nRGVzY3JpcHRvcikpOworICAgIH0p
OworfQorCit2b2lkIGNyZWF0ZUNvbXB1dGVQaXBlbGluZUFzeW5jQ2FsbGJhY2soV0dQVUNyZWF0
ZVBpcGVsaW5lQXN5bmNTdGF0dXMgc3RhdHVzLCBXR1BVQ29tcHV0ZVBpcGVsaW5lIHBpcGVsaW5l
LCBjb25zdCBjaGFyKiBtZXNzYWdlLCB2b2lkKiB1c2VyZGF0YSkKK3sKKyAgICBhdXRvIGRldmlj
ZSA9IGFkb3B0UmVmKCpzdGF0aWNfY2FzdDxEZXZpY2VJbXBsKj4odXNlcmRhdGEpKTsgLy8gYWRv
cHRSZWYgaXMgYmFsYW5jZWQgYnkgbGVha1JlZiBpbiBjcmVhdGVDb21wdXRlUGlwZWxpbmVBc3lu
YygpIGJlbG93LiBXZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSdyZSB1c2luZyBhIEMgQVBJ
IHdpdGggbm8gY29uY2VwdCBvZiByZWZlcmVuY2UgY291bnRpbmcgb3IgYmxvY2tzLgorICAgIGRl
dmljZS0+Y3JlYXRlQ29tcHV0ZVBpcGVsaW5lQXN5bmNDYWxsYmFjayhzdGF0dXMsIHBpcGVsaW5l
LCBtZXNzYWdlKTsKK30KKwordm9pZCBEZXZpY2VJbXBsOjpjcmVhdGVDb21wdXRlUGlwZWxpbmVB
c3luYyhjb25zdCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBzdGQ6OmZ1
bmN0aW9uPHZvaWQoUmVmPENvbXB1dGVQaXBlbGluZT4mJik+JiYgY2FsbGJhY2spCit7CisgICAg
UmVmIHByb3RlY3RlZFRoaXMoKnRoaXMpOworCisgICAgbV9jcmVhdGVDb21wdXRlUGlwZWxpbmVB
c3luY0NhbGxiYWNrcy5hcHBlbmQoV1RGTW92ZShjYWxsYmFjaykpOworCisgICAgY29udmVydFRv
QmFja2luZyhkZXNjcmlwdG9yLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVj
dGVkVGhpcyldIChjb25zdCBXR1BVQ29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciYgYmFja2luZ0Rl
c2NyaXB0b3IpIG11dGFibGUgeworICAgICAgICB3Z3B1RGV2aWNlQ3JlYXRlQ29tcHV0ZVBpcGVs
aW5lQXN5bmMobV9iYWNraW5nLCAmYmFja2luZ0Rlc2NyaXB0b3IsICZXZWJHUFU6OmNyZWF0ZUNv
bXB1dGVQaXBlbGluZUFzeW5jQ2FsbGJhY2ssICZwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7IC8v
IGxlYWtSZWYgaXMgYmFsYW5jZWQgYnkgYWRvcHRSZWYgaW4gcmVxdWVzdERldmljZUNhbGxiYWNr
KCkgYWJvdmUuIFdlIGhhdmUgdG8gZG8gdGhpcyBiZWNhdXNlIHdlJ3JlIHVzaW5nIGEgQyBBUEkg
d2l0aCBubyBjb25jZXB0IG9mIHJlZmVyZW5jZSBjb3VudGluZyBvciBibG9ja3MuCisgICAgfSk7
Cit9CisKK3ZvaWQgRGV2aWNlSW1wbDo6Y3JlYXRlQ29tcHV0ZVBpcGVsaW5lQXN5bmNDYWxsYmFj
ayhXR1BVQ3JlYXRlUGlwZWxpbmVBc3luY1N0YXR1cywgV0dQVUNvbXB1dGVQaXBlbGluZSBwaXBl
bGluZSwgY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBVTlVTRURfUEFSQU0obWVzc2FnZSk7
CisgICAgYXV0byBjYWxsYmFjayA9IG1fY3JlYXRlQ29tcHV0ZVBpcGVsaW5lQXN5bmNDYWxsYmFj
a3MudGFrZUZpcnN0KCk7CisgICAgY2FsbGJhY2soQ29tcHV0ZVBpcGVsaW5lSW1wbDo6Y3JlYXRl
KHBpcGVsaW5lKSk7Cit9CisKK3ZvaWQgY3JlYXRlUmVuZGVyUGlwZWxpbmVBc3luY0NhbGxiYWNr
KFdHUFVDcmVhdGVQaXBlbGluZUFzeW5jU3RhdHVzIHN0YXR1cywgV0dQVVJlbmRlclBpcGVsaW5l
IHBpcGVsaW5lLCBjb25zdCBjaGFyKiBtZXNzYWdlLCB2b2lkKiB1c2VyZGF0YSkKK3sKKyAgICBh
dXRvIGRldmljZSA9IGFkb3B0UmVmKCpzdGF0aWNfY2FzdDxEZXZpY2VJbXBsKj4odXNlcmRhdGEp
KTsgLy8gYWRvcHRSZWYgaXMgYmFsYW5jZWQgYnkgbGVha1JlZiBpbiBjcmVhdGVSZW5kZXJQaXBl
bGluZUFzeW5jKCkgYmVsb3cuIFdlIGhhdmUgdG8gZG8gdGhpcyBiZWNhdXNlIHdlJ3JlIHVzaW5n
IGEgQyBBUEkgd2l0aCBubyBjb25jZXB0IG9mIHJlZmVyZW5jZSBjb3VudGluZyBvciBibG9ja3Mu
CisgICAgZGV2aWNlLT5jcmVhdGVSZW5kZXJQaXBlbGluZUFzeW5jQ2FsbGJhY2soc3RhdHVzLCBw
aXBlbGluZSwgbWVzc2FnZSk7Cit9CisKK3ZvaWQgRGV2aWNlSW1wbDo6Y3JlYXRlUmVuZGVyUGlw
ZWxpbmVBc3luYyhjb25zdCBSZW5kZXJQaXBlbGluZURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIHN0
ZDo6ZnVuY3Rpb248dm9pZChSZWY8UmVuZGVyUGlwZWxpbmU+JiYpPiYmIGNhbGxiYWNrKQorewor
ICAgIFJlZiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKKworICAgIG1fY3JlYXRlUmVuZGVyUGlwZWxp
bmVBc3luY0NhbGxiYWNrcy5hcHBlbmQoV1RGTW92ZShjYWxsYmFjaykpOworCisgICAgY29udmVy
dFRvQmFja2luZyhkZXNjcmlwdG9yLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJv
dGVjdGVkVGhpcyldIChjb25zdCBXR1BVUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yJiBiYWNraW5n
RGVzY3JpcHRvcikgbXV0YWJsZSB7CisgICAgd2dwdURldmljZUNyZWF0ZVJlbmRlclBpcGVsaW5l
QXN5bmMobV9iYWNraW5nLCAmYmFja2luZ0Rlc2NyaXB0b3IsICZXZWJHUFU6OmNyZWF0ZVJlbmRl
clBpcGVsaW5lQXN5bmNDYWxsYmFjaywgJnByb3RlY3RlZFRoaXMubGVha1JlZigpKTsgLy8gbGVh
a1JlZiBpcyBiYWxhbmNlZCBieSBhZG9wdFJlZiBpbiByZXF1ZXN0RGV2aWNlQ2FsbGJhY2soKSBh
Ym92ZS4gV2UgaGF2ZSB0byBkbyB0aGlzIGJlY2F1c2Ugd2UncmUgdXNpbmcgYSBDIEFQSSB3aXRo
IG5vIGNvbmNlcHQgb2YgcmVmZXJlbmNlIGNvdW50aW5nIG9yIGJsb2Nrcy4KKyAgICB9KTsKK30K
Kwordm9pZCBEZXZpY2VJbXBsOjpjcmVhdGVSZW5kZXJQaXBlbGluZUFzeW5jQ2FsbGJhY2soV0dQ
VUNyZWF0ZVBpcGVsaW5lQXN5bmNTdGF0dXMsIFdHUFVSZW5kZXJQaXBlbGluZSBwaXBlbGluZSwg
Y29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBVTlVTRURfUEFSQU0obWVzc2FnZSk7CisgICAg
YXV0byBjYWxsYmFjayA9IG1fY3JlYXRlUmVuZGVyUGlwZWxpbmVBc3luY0NhbGxiYWNrcy50YWtl
Rmlyc3QoKTsKKyAgICBjYWxsYmFjayhSZW5kZXJQaXBlbGluZUltcGw6OmNyZWF0ZShwaXBlbGlu
ZSkpOworfQorCitSZWY8Q29tbWFuZEVuY29kZXI+IERldmljZUltcGw6OmNyZWF0ZUNvbW1hbmRF
bmNvZGVyKGNvbnN0IHN0ZDo6b3B0aW9uYWw8Q29tbWFuZEVuY29kZXJEZXNjcmlwdG9yPiYgZGVz
Y3JpcHRvcikKK3sKKyAgICBDU3RyaW5nIGxhYmVsID0gZGVzY3JpcHRvciA/IGRlc2NyaXB0b3It
PmxhYmVsLnV0ZjgoKSA6IENTdHJpbmcoIiIpOworCisgICAgV0dQVUNvbW1hbmRFbmNvZGVyRGVz
Y3JpcHRvciBiYWNraW5nRGVzY3JpcHRvciB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIGxh
YmVsLmRhdGEoKSwKKyAgICB9OworCisgICAgcmV0dXJuIENvbW1hbmRFbmNvZGVySW1wbDo6Y3Jl
YXRlKHdncHVEZXZpY2VDcmVhdGVDb21tYW5kRW5jb2RlcihtX2JhY2tpbmcsICZiYWNraW5nRGVz
Y3JpcHRvcikpOworfQorCitSZWY8UmVuZGVyQnVuZGxlRW5jb2Rlcj4gRGV2aWNlSW1wbDo6Y3Jl
YXRlUmVuZGVyQnVuZGxlRW5jb2Rlcihjb25zdCBSZW5kZXJCdW5kbGVFbmNvZGVyRGVzY3JpcHRv
ciYgZGVzY3JpcHRvcikKK3sKKyAgICBhdXRvIGxhYmVsID0gZGVzY3JpcHRvci5sYWJlbC51dGY4
KCk7CisKKyAgICBWZWN0b3I8V0dQVVRleHR1cmVGb3JtYXQ+IGJhY2tpbmdDb2xvckZvcm1hdHM7
CisgICAgYmFja2luZ0NvbG9yRm9ybWF0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGRlc2NyaXB0
b3IuY29sb3JGb3JtYXRzLnNpemUoKSk7CisgICAgZm9yIChhdXRvIGNvbG9yRm9ybWF0IDogZGVz
Y3JpcHRvci5jb2xvckZvcm1hdHMpCisgICAgICAgIGJhY2tpbmdDb2xvckZvcm1hdHMudW5jaGVj
a2VkQXBwZW5kKGNvbnZlcnRUb0JhY2tpbmcoY29sb3JGb3JtYXQpKTsKKworICAgIFdHUFVSZW5k
ZXJCdW5kbGVFbmNvZGVyRGVzY3JpcHRvciBiYWNraW5nRGVzY3JpcHRvciB7CisgICAgICAgIG51
bGxwdHIsCisgICAgICAgIGxhYmVsLmRhdGEoKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KGJhY2tpbmdDb2xvckZvcm1hdHMuc2l6ZSgpKSwKKyAgICAgICAgYmFja2luZ0NvbG9yRm9y
bWF0cy5kYXRhKCksCisgICAgICAgIGRlc2NyaXB0b3IuZGVwdGhTdGVuY2lsRm9ybWF0ID8gY29u
dmVydFRvQmFja2luZygqZGVzY3JpcHRvci5kZXB0aFN0ZW5jaWxGb3JtYXQpIDogV0dQVVRleHR1
cmVGb3JtYXRfVW5kZWZpbmVkLAorICAgICAgICBkZXNjcmlwdG9yLnNhbXBsZUNvdW50LAorICAg
IH07CisKKyAgICByZXR1cm4gUmVuZGVyQnVuZGxlRW5jb2RlckltcGw6OmNyZWF0ZSh3Z3B1RGV2
aWNlQ3JlYXRlUmVuZGVyQnVuZGxlRW5jb2RlcihtX2JhY2tpbmcsICZiYWNraW5nRGVzY3JpcHRv
cikpOworfQorCitSZWY8UXVlcnlTZXQ+IERldmljZUltcGw6OmNyZWF0ZVF1ZXJ5U2V0KGNvbnN0
IFF1ZXJ5U2V0RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBhdXRvIGxhYmVsID0gZGVz
Y3JpcHRvci5sYWJlbC51dGY4KCk7CisKKyAgICBWZWN0b3I8V0dQVVBpcGVsaW5lU3RhdGlzdGlj
TmFtZT4gYmFja2luZ1BpcGVsaW5lU3RhdGlzdGljczsKKyAgICBiYWNraW5nUGlwZWxpbmVTdGF0
aXN0aWNzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGVzY3JpcHRvci5waXBlbGluZVN0YXRpc3Rp
Y3Muc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8gcGlwZWxpbmVTdGF0aXN0aWMgOiBkZXNjcmlwdG9y
LnBpcGVsaW5lU3RhdGlzdGljcykKKyAgICAgICAgYmFja2luZ1BpcGVsaW5lU3RhdGlzdGljcy51
bmNoZWNrZWRBcHBlbmQoY29udmVydFRvQmFja2luZyhwaXBlbGluZVN0YXRpc3RpYykpOworCisg
ICAgV0dQVVF1ZXJ5U2V0RGVzY3JpcHRvciBiYWNraW5nRGVzY3JpcHRvciB7CisgICAgICAgIG51
bGxwdHIsCisgICAgICAgIGxhYmVsLmRhdGEoKSwKKyAgICAgICAgY29udmVydFRvQmFja2luZyhk
ZXNjcmlwdG9yLnR5cGUpLAorICAgICAgICBkZXNjcmlwdG9yLmNvdW50LAorICAgICAgICBiYWNr
aW5nUGlwZWxpbmVTdGF0aXN0aWNzLmRhdGEoKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KGJhY2tpbmdQaXBlbGluZVN0YXRpc3RpY3Muc2l6ZSgpKSwKKyAgICB9OworCisgICAgcmV0
dXJuIFF1ZXJ5U2V0SW1wbDo6Y3JlYXRlKHdncHVEZXZpY2VDcmVhdGVRdWVyeVNldChtX2JhY2tp
bmcsICZiYWNraW5nRGVzY3JpcHRvcikpOworfQorCit2b2lkIERldmljZUltcGw6OnB1c2hFcnJv
clNjb3BlKEVycm9yRmlsdGVyIGVycm9yRmlsdGVyKQoreworICAgIHdncHVEZXZpY2VQdXNoRXJy
b3JTY29wZShtX2JhY2tpbmcsIGNvbnZlcnRUb0JhY2tpbmcoZXJyb3JGaWx0ZXIpKTsKK30KKwor
dm9pZCBwb3BFcnJvclNjb3BlQ2FsbGJhY2soV0dQVUVycm9yVHlwZSB0eXBlLCBjb25zdCBjaGFy
KiBtZXNzYWdlLCB2b2lkKiB1c2VyZGF0YSkKK3sKKyAgICBhdXRvIGRldmljZSA9IGFkb3B0UmVm
KCpzdGF0aWNfY2FzdDxEZXZpY2VJbXBsKj4odXNlcmRhdGEpKTsgLy8gYWRvcHRSZWYgaXMgYmFs
YW5jZWQgYnkgbGVha1JlZiBpbiBwb3BFcnJvclNjb3BlKCkgYmVsb3cuIFdlIGhhdmUgdG8gZG8g
dGhpcyBiZWNhdXNlIHdlJ3JlIHVzaW5nIGEgQyBBUEkgd2l0aCBubyBjb25jZXB0IG9mIHJlZmVy
ZW5jZSBjb3VudGluZyBvciBibG9ja3MuCisgICAgZGV2aWNlLT5wb3BFcnJvclNjb3BlQ2FsbGJh
Y2sodHlwZSwgbWVzc2FnZSk7Cit9CisKK3ZvaWQgRGV2aWNlSW1wbDo6cG9wRXJyb3JTY29wZShz
dGQ6OmZ1bmN0aW9uPHZvaWQoc3RkOjpvcHRpb25hbDxFcnJvcj4mJik+JiYgY2FsbGJhY2spCit7
CisgICAgUmVmIHByb3RlY3RlZFRoaXMoKnRoaXMpOworCisgICAgbV9wb3BFcnJvclNjb3BlQ2Fs
bGJhY2tzLmFwcGVuZChXVEZNb3ZlKGNhbGxiYWNrKSk7CisKKyAgICB3Z3B1RGV2aWNlUG9wRXJy
b3JTY29wZShtX2JhY2tpbmcsICZXZWJHUFU6OnBvcEVycm9yU2NvcGVDYWxsYmFjaywgJnByb3Rl
Y3RlZFRoaXMubGVha1JlZigpKTsgLy8gbGVha1JlZiBpcyBiYWxhbmNlZCBieSBhZG9wdFJlZiBp
biByZXF1ZXN0RGV2aWNlQ2FsbGJhY2soKSBhYm92ZS4gV2UgaGF2ZSB0byBkbyB0aGlzIGJlY2F1
c2Ugd2UncmUgdXNpbmcgYSBDIEFQSSB3aXRoIG5vIGNvbmNlcHQgb2YgcmVmZXJlbmNlIGNvdW50
aW5nIG9yIGJsb2Nrcy4KK30KKwordm9pZCBEZXZpY2VJbXBsOjpwb3BFcnJvclNjb3BlQ2FsbGJh
Y2soV0dQVUVycm9yVHlwZSBlcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAg
c3RkOjpvcHRpb25hbDxFcnJvcj4gZXJyb3I7CisgICAgc3dpdGNoIChlcnJvclR5cGUpIHsKKyAg
ICBjYXNlIFdHUFVFcnJvclR5cGVfTm9FcnJvcjoKKyAgICBjYXNlIFdHUFVFcnJvclR5cGVfRm9y
Y2UzMjoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXR1BVRXJyb3JUeXBlX1ZhbGlkYXRpb246
CisgICAgICAgIGVycm9yID0geyB7IFZhbGlkYXRpb25FcnJvcjo6Y3JlYXRlKG1lc3NhZ2UpIH0g
fTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXR1BVRXJyb3JUeXBlX091dE9mTWVtb3J5Ogor
ICAgICAgICBlcnJvciA9IHsgeyBPdXRPZk1lbW9yeUVycm9yOjpjcmVhdGUoKSB9IH07CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgV0dQVUVycm9yVHlwZV9Vbmtub3duOgorICAgICAgICBlcnJv
ciA9IHsgeyBPdXRPZk1lbW9yeUVycm9yOjpjcmVhdGUoKSB9IH07CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgV0dQVUVycm9yVHlwZV9EZXZpY2VMb3N0OgorICAgICAgICBlcnJvciA9IHsgeyBP
dXRPZk1lbW9yeUVycm9yOjpjcmVhdGUoKSB9IH07CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGF1dG8gY2FsbGJhY2sgPSBtX3BvcEVycm9yU2NvcGVDYWxsYmFja3MudGFrZUZpcnN0KCk7
CisgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOworfQorCit2b2lkIERldmljZUltcGw6OnNl
dExhYmVsSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBsYWJlbCkKK3sKKyAgICB3Z3B1RGV2aWNlU2V0
TGFiZWwobV9iYWNraW5nLCBsYWJlbC51dGY4KCkuZGF0YSgpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVRGV2aWNlSW1wbC5oIGIvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVEZXZpY2VJbXBsLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uODZhNjBiYzRiZTFjZjhkOGVmMTlhMDJiNDQ2NDg2MGE2ZTI5OTU1YgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0lt
cGwvV2ViR1BVRGV2aWNlSW1wbC5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIldlYkdQVURldmljZS5oIgorI2luY2x1ZGUgPFdlYkdQVS9X
ZWJHUFUuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1l
c3BhY2UgV2ViR1BVIHsKKworY2xhc3MgRGV2aWNlSW1wbCBmaW5hbCA6IHB1YmxpYyBEZXZpY2Ug
eworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RGV2aWNlSW1wbD4gY3JlYXRlKFdHUFVEZXZpY2Ug
ZGV2aWNlLCBSZWY8U3VwcG9ydGVkRmVhdHVyZXM+JiYgZmVhdHVyZXMsIFJlZjxTdXBwb3J0ZWRM
aW1pdHM+JiYgbGltaXRzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGV2
aWNlSW1wbChkZXZpY2UsIFdURk1vdmUoZmVhdHVyZXMpLCBXVEZNb3ZlKGxpbWl0cykpKTsKKyAg
ICB9CisKKyAgICB+RGV2aWNlSW1wbCgpOworCisgICAgV0dQVURldmljZSBiYWNraW5nKCkgY29u
c3QgeyByZXR1cm4gbV9iYWNraW5nOyB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIHZvaWQgY3Jl
YXRlQ29tcHV0ZVBpcGVsaW5lQXN5bmNDYWxsYmFjayhXR1BVQ3JlYXRlUGlwZWxpbmVBc3luY1N0
YXR1cywgV0dQVUNvbXB1dGVQaXBlbGluZSwgY29uc3QgY2hhciogbWVzc2FnZSwgdm9pZCogdXNl
cmRhdGEpOworICAgIGZyaWVuZCB2b2lkIGNyZWF0ZVJlbmRlclBpcGVsaW5lQXN5bmNDYWxsYmFj
ayhXR1BVQ3JlYXRlUGlwZWxpbmVBc3luY1N0YXR1cywgV0dQVVJlbmRlclBpcGVsaW5lLCBjb25z
dCBjaGFyKiBtZXNzYWdlLCB2b2lkKiB1c2VyZGF0YSk7CisgICAgZnJpZW5kIHZvaWQgcG9wRXJy
b3JTY29wZUNhbGxiYWNrKFdHUFVFcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIHZvaWQq
IHVzZXJkYXRhKTsKKworICAgIERldmljZUltcGwoV0dQVURldmljZSwgUmVmPFN1cHBvcnRlZEZl
YXR1cmVzPiYmLCBSZWY8U3VwcG9ydGVkTGltaXRzPiYmKTsKKworICAgIERldmljZUltcGwoY29u
c3QgRGV2aWNlSW1wbCYpID0gZGVsZXRlOworICAgIERldmljZUltcGwoRGV2aWNlSW1wbCYmKSA9
IGRlbGV0ZTsKKyAgICBEZXZpY2VJbXBsJiBvcGVyYXRvcj0oY29uc3QgRGV2aWNlSW1wbCYpID0g
ZGVsZXRlOworICAgIERldmljZUltcGwmIG9wZXJhdG9yPShEZXZpY2VJbXBsJiYpID0gZGVsZXRl
OworCisgICAgdm9pZCBkZXN0cm95KCkgZmluYWw7CisKKyAgICBSZWY8QnVmZmVyPiBjcmVhdGVC
dWZmZXIoY29uc3QgQnVmZmVyRGVzY3JpcHRvciYpIGZpbmFsOworICAgIFJlZjxUZXh0dXJlPiBj
cmVhdGVUZXh0dXJlKGNvbnN0IFRleHR1cmVEZXNjcmlwdG9yJikgZmluYWw7CisgICAgUmVmPFNh
bXBsZXI+IGNyZWF0ZVNhbXBsZXIoY29uc3QgU2FtcGxlckRlc2NyaXB0b3ImKSBmaW5hbDsKKyAg
ICBSZWY8RXh0ZXJuYWxUZXh0dXJlPiBpbXBvcnRFeHRlcm5hbFRleHR1cmUoY29uc3QgRXh0ZXJu
YWxUZXh0dXJlRGVzY3JpcHRvciYpIGZpbmFsOworCisgICAgUmVmPEJpbmRHcm91cExheW91dD4g
Y3JlYXRlQmluZEdyb3VwTGF5b3V0KGNvbnN0IEJpbmRHcm91cExheW91dERlc2NyaXB0b3ImKSBm
aW5hbDsKKyAgICBSZWY8UGlwZWxpbmVMYXlvdXQ+IGNyZWF0ZVBpcGVsaW5lTGF5b3V0KGNvbnN0
IFBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciYpIGZpbmFsOworICAgIFJlZjxCaW5kR3JvdXA+IGNy
ZWF0ZUJpbmRHcm91cChjb25zdCBCaW5kR3JvdXBEZXNjcmlwdG9yJikgZmluYWw7CisKKyAgICBS
ZWY8U2hhZGVyTW9kdWxlPiBjcmVhdGVTaGFkZXJNb2R1bGUoY29uc3QgU2hhZGVyTW9kdWxlRGVz
Y3JpcHRvciYpIGZpbmFsOworICAgIFJlZjxDb21wdXRlUGlwZWxpbmU+IGNyZWF0ZUNvbXB1dGVQ
aXBlbGluZShjb25zdCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJikgZmluYWw7CisgICAgUmVm
PFJlbmRlclBpcGVsaW5lPiBjcmVhdGVSZW5kZXJQaXBlbGluZShjb25zdCBSZW5kZXJQaXBlbGlu
ZURlc2NyaXB0b3ImKSBmaW5hbDsKKyAgICB2b2lkIGNyZWF0ZUNvbXB1dGVQaXBlbGluZUFzeW5j
Q2FsbGJhY2soV0dQVUNyZWF0ZVBpcGVsaW5lQXN5bmNTdGF0dXMsIFdHUFVDb21wdXRlUGlwZWxp
bmUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOworICAgIHZvaWQgY3JlYXRlQ29tcHV0ZVBpcGVsaW5l
QXN5bmMoY29uc3QgQ29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciYsIHN0ZDo6ZnVuY3Rpb248dm9p
ZChSZWY8Q29tcHV0ZVBpcGVsaW5lPiYmKT4mJikgZmluYWw7CisgICAgdm9pZCBjcmVhdGVSZW5k
ZXJQaXBlbGluZUFzeW5jQ2FsbGJhY2soV0dQVUNyZWF0ZVBpcGVsaW5lQXN5bmNTdGF0dXMsIFdH
UFVSZW5kZXJQaXBlbGluZSwgY29uc3QgY2hhciogbWVzc2FnZSk7CisgICAgdm9pZCBjcmVhdGVS
ZW5kZXJQaXBlbGluZUFzeW5jKGNvbnN0IFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciYsIHN0ZDo6
ZnVuY3Rpb248dm9pZChSZWY8UmVuZGVyUGlwZWxpbmU+JiYpPiYmKSBmaW5hbDsKKworICAgIFJl
ZjxDb21tYW5kRW5jb2Rlcj4gY3JlYXRlQ29tbWFuZEVuY29kZXIoY29uc3Qgc3RkOjpvcHRpb25h
bDxDb21tYW5kRW5jb2RlckRlc2NyaXB0b3I+JikgZmluYWw7CisgICAgUmVmPFJlbmRlckJ1bmRs
ZUVuY29kZXI+IGNyZWF0ZVJlbmRlckJ1bmRsZUVuY29kZXIoY29uc3QgUmVuZGVyQnVuZGxlRW5j
b2RlckRlc2NyaXB0b3ImKSBmaW5hbDsKKworICAgIFJlZjxRdWVyeVNldD4gY3JlYXRlUXVlcnlT
ZXQoY29uc3QgUXVlcnlTZXREZXNjcmlwdG9yJikgZmluYWw7CisKKyAgICB2b2lkIHB1c2hFcnJv
clNjb3BlKEVycm9yRmlsdGVyKSBmaW5hbDsKKyAgICB2b2lkIHBvcEVycm9yU2NvcGVDYWxsYmFj
ayhXR1BVRXJyb3JUeXBlLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsKKyAgICB2b2lkIHBvcEVycm9y
U2NvcGUoc3RkOjpmdW5jdGlvbjx2b2lkKHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYpPiYmKSBmaW5h
bDsKKworICAgIHZvaWQgc2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5hbDsKKwor
ICAgIFdHUFVEZXZpY2UgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworCisgICAgRGVxdWU8c3RkOjpm
dW5jdGlvbjx2b2lkKFJlZjxDb21wdXRlUGlwZWxpbmU+JiYpPj4gbV9jcmVhdGVDb21wdXRlUGlw
ZWxpbmVBc3luY0NhbGxiYWNrczsKKyAgICBEZXF1ZTxzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVmPFJl
bmRlclBpcGVsaW5lPiYmKT4+IG1fY3JlYXRlUmVuZGVyUGlwZWxpbmVBc3luY0NhbGxiYWNrczsK
KyAgICBEZXF1ZTxzdGQ6OmZ1bmN0aW9uPHZvaWQoc3RkOjpvcHRpb25hbDxFcnJvcj4mJik+PiBt
X3BvcEVycm9yU2NvcGVDYWxsYmFja3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8g
bmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVFeHRlcm5hbFRleHR1cmVJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVRXh0ZXJuYWxUZXh0dXJl
SW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMmFlYjg5ZTA3ZmI1NjI3ZjI2OWRiOTM1MDIxNTg2ZGI0Zjcw
YTY0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3Mv
V2ViR1BVL0ltcGwvV2ViR1BVRXh0ZXJuYWxUZXh0dXJlSW1wbC5jcHAKQEAgLTAsMCArMSw0NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVFeHRl
cm5hbFRleHR1cmVJbXBsLmgiCisKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVRXh0Lmg+CisKK25h
bWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK0V4dGVybmFsVGV4dHVyZUltcGw6
OkV4dGVybmFsVGV4dHVyZUltcGwoKQoreworfQorCitFeHRlcm5hbFRleHR1cmVJbXBsOjp+RXh0
ZXJuYWxUZXh0dXJlSW1wbCgpCit7Cit9CisKK3ZvaWQgRXh0ZXJuYWxUZXh0dXJlSW1wbDo6c2V0
TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBQQUwK
K30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVFeHRlcm5hbFRleHR1cmVJbXBsLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUV4dGVybmFsVGV4
dHVyZUltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZDc4MTYzM2U1OGQwNTk3NmI0ZjdkYjliNWM4M2JlYjA4
MWJlNmFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGlj
cy9XZWJHUFUvSW1wbC9XZWJHUFVFeHRlcm5hbFRleHR1cmVJbXBsLmgKQEAgLTAsMCArMSw1NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVRXh0ZXJuYWxU
ZXh0dXJlLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorCituYW1lc3BhY2UgUEFMIHsK
K25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBFeHRlcm5hbFRleHR1cmVJbXBsIGZpbmFsIDog
cHVibGljIEV4dGVybmFsVGV4dHVyZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxFeHRlcm5h
bFRleHR1cmVJbXBsPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRXh0ZXJuYWxUZXh0dXJlSW1wbCgpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5FeHRlcm5h
bFRleHR1cmVJbXBsKCk7CisKK3ByaXZhdGU6CisgICAgRXh0ZXJuYWxUZXh0dXJlSW1wbCgpOwor
CisgICAgRXh0ZXJuYWxUZXh0dXJlSW1wbChjb25zdCBFeHRlcm5hbFRleHR1cmVJbXBsJikgPSBk
ZWxldGU7CisgICAgRXh0ZXJuYWxUZXh0dXJlSW1wbChFeHRlcm5hbFRleHR1cmVJbXBsJiYpID0g
ZGVsZXRlOworICAgIEV4dGVybmFsVGV4dHVyZUltcGwmIG9wZXJhdG9yPShjb25zdCBFeHRlcm5h
bFRleHR1cmVJbXBsJikgPSBkZWxldGU7CisgICAgRXh0ZXJuYWxUZXh0dXJlSW1wbCYgb3BlcmF0
b3I9KEV4dGVybmFsVGV4dHVyZUltcGwmJikgPSBkZWxldGU7CisKKyAgICB2b2lkIHNldExhYmVs
SW50ZXJuYWwoY29uc3QgU3RyaW5nJikgZmluYWw7Cit9OworCit9IC8vIG5hbWVzcGFjZSBQQUwK
K30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVSW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTA3
NjE4YzIyMGFlOGI4NjlmN2RlMDhhZTZlZTAxNTA3YWY4MTljYwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVSW1wbC5j
cHAKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJHUFVJbXBsLmgiCisKKyNpbmNsdWRlICJXZWJHUFVBZGFwdGVySW1wbC5oIgor
I2luY2x1ZGUgIldlYkdQVUNvbnZlcnRUb0JhY2tpbmcuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2Vi
R1BVRXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK0dQVUlt
cGw6OkdQVUltcGwoV0dQVUluc3RhbmNlIGluc3RhbmNlKQorICAgIDogbV9iYWNraW5nKGluc3Rh
bmNlKQoreworfQorCitHUFVJbXBsOjp+R1BVSW1wbCgpCit7CisgICAgd2dwdUluc3RhbmNlUmVs
ZWFzZShtX2JhY2tpbmcpOworfQorCit2b2lkIHJlcXVlc3RBZGFwdGVyQ2FsbGJhY2soV0dQVVJl
cXVlc3RBZGFwdGVyU3RhdHVzIHN0YXR1cywgV0dQVUFkYXB0ZXIgYWRhcHRlciwgY29uc3QgY2hh
ciogbWVzc2FnZSwgdm9pZCogdXNlcmRhdGEpCit7CisgICAgYXV0byBncHUgPSBhZG9wdFJlZigq
c3RhdGljX2Nhc3Q8R1BVSW1wbCo+KHVzZXJkYXRhKSk7IC8vIGFkb3B0UmVmIGlzIGJhbGFuY2Vk
IGJ5IGxlYWtSZWYgaW4gcmVxdWVzdEFkYXB0ZXIoKSBiZWxvdy4gV2UgaGF2ZSB0byBkbyB0aGlz
IGJlY2F1c2Ugd2UncmUgdXNpbmcgYSBDIEFQSSB3aXRoIG5vIGNvbmNlcHQgb2YgcmVmZXJlbmNl
IGNvdW50aW5nIG9yIGJsb2Nrcy4KKyAgICBncHUtPnJlcXVlc3RBZGFwdGVyQ2FsbGJhY2soc3Rh
dHVzLCBhZGFwdGVyLCBtZXNzYWdlKTsKK30KKwordm9pZCBHUFVJbXBsOjpyZXF1ZXN0QWRhcHRl
cihjb25zdCBSZXF1ZXN0QWRhcHRlck9wdGlvbnMmIG9wdGlvbnMsIHN0ZDo6ZnVuY3Rpb248dm9p
ZChSZWZQdHI8QWRhcHRlcj4mJik+JiYgY2FsbGJhY2spCit7CisgICAgUmVmIHByb3RlY3RlZFRo
aXMoKnRoaXMpOworCisgICAgV0dQVVJlcXVlc3RBZGFwdGVyT3B0aW9ucyBiYWNraW5nT3B0aW9u
cyB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIG51bGxwdHIsCisgICAgICAgIG9wdGlvbnMu
cG93ZXJQcmVmZXJlbmNlID8gY29udmVydFRvQmFja2luZygqb3B0aW9ucy5wb3dlclByZWZlcmVu
Y2UpIDogc3RhdGljX2Nhc3Q8V0dQVVBvd2VyUHJlZmVyZW5jZT4oV0dQVVBvd2VyUHJlZmVyZW5j
ZV9Ob1ByZWZlcmVuY2UpLAorICAgICAgICBvcHRpb25zLmZvcmNlRmFsbGJhY2tBZGFwdGVyLAor
ICAgIH07CisKKyAgICBtX2NhbGxiYWNrcy5hcHBlbmQoV1RGTW92ZShjYWxsYmFjaykpOworCisg
ICAgd2dwdUluc3RhbmNlUmVxdWVzdEFkYXB0ZXIobV9iYWNraW5nLCAmYmFja2luZ09wdGlvbnMs
ICZXZWJHUFU6OnJlcXVlc3RBZGFwdGVyQ2FsbGJhY2ssICZwcm90ZWN0ZWRUaGlzLmxlYWtSZWYo
KSk7IC8vIGxlYWtSZWYgaXMgYmFsYW5jZWQgYnkgYWRvcHRSZWYgaW4gcmVxdWVzdEFkYXB0ZXJD
YWxsYmFjaygpIGFib3ZlLiBXZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSdyZSB1c2luZyBh
IEMgQVBJIHdpdGggbm8gY29uY2VwdCBvZiByZWZlcmVuY2UgY291bnRpbmcgb3IgYmxvY2tzLgor
fQorCit2b2lkIEdQVUltcGw6OnJlcXVlc3RBZGFwdGVyQ2FsbGJhY2soV0dQVVJlcXVlc3RBZGFw
dGVyU3RhdHVzLCBXR1BVQWRhcHRlciBhZGFwdGVyLCBjb25zdCBjaGFyKiBtZXNzYWdlKQorewor
ICAgIFVOVVNFRF9QQVJBTShtZXNzYWdlKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gbV9jYWxsYmFj
a3MudGFrZUZpcnN0KCk7CisgICAgY2FsbGJhY2soQWRhcHRlckltcGw6OmNyZWF0ZShhZGFwdGVy
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQ
VUltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2Vi
R1BVSW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjljMTcwM2RiMmVlNGUwMGZiMTE1YzQ2ZjZhM2IwNjJjMGM4
ZjI2OWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNz
L1dlYkdQVS9JbXBsL1dlYkdQVUltcGwuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJXZWJHUFUuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2Vi
R1BVLmg+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNw
YWNlIFdlYkdQVSB7CisKK2NsYXNzIEdQVUltcGwgZmluYWwgOiBwdWJsaWMgR1BVIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUmVmPEdQVUltcGw+IGNyZWF0ZShXR1BVSW5zdGFuY2UgaW5zdGFuY2Up
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHUFVJbXBsKGluc3RhbmNlKSk7
CisgICAgfQorCisgICAgdmlydHVhbCB+R1BVSW1wbCgpOworCisgICAgV0dQVUluc3RhbmNlIGJh
Y2tpbmcoKSBjb25zdCB7IHJldHVybiBtX2JhY2tpbmc7IH0KKworcHJpdmF0ZToKKyAgICBmcmll
bmQgdm9pZCByZXF1ZXN0QWRhcHRlckNhbGxiYWNrKFdHUFVSZXF1ZXN0QWRhcHRlclN0YXR1cywg
V0dQVUFkYXB0ZXIsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIHZvaWQqIHVzZXJkYXRhKTsKKworICAg
IEdQVUltcGwoV0dQVUluc3RhbmNlKTsKKworICAgIEdQVUltcGwoY29uc3QgR1BVSW1wbCYpID0g
ZGVsZXRlOworICAgIEdQVUltcGwoR1BVSW1wbCYmKSA9IGRlbGV0ZTsKKyAgICBHUFVJbXBsJiBv
cGVyYXRvcj0oY29uc3QgR1BVSW1wbCYpID0gZGVsZXRlOworICAgIEdQVUltcGwmIG9wZXJhdG9y
PShHUFVJbXBsJiYpID0gZGVsZXRlOworCisgICAgdm9pZCByZXF1ZXN0QWRhcHRlckNhbGxiYWNr
KFdHUFVSZXF1ZXN0QWRhcHRlclN0YXR1cywgV0dQVUFkYXB0ZXIsIGNvbnN0IGNoYXIqIG1lc3Nh
Z2UpOworICAgIHZvaWQgcmVxdWVzdEFkYXB0ZXIoY29uc3QgUmVxdWVzdEFkYXB0ZXJPcHRpb25z
Jiwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlZlB0cjxBZGFwdGVyPiYmKT4mJikgZmluYWw7CisKKyAg
ICBXR1BVSW5zdGFuY2UgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworCisgICAgRGVxdWU8c3RkOjpm
dW5jdGlvbjx2b2lkKFJlZlB0cjxBZGFwdGVyPiYmKT4+IG1fY2FsbGJhY2tzOworfTsKKworfSAv
LyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUGlwZWxpbmVMYXlv
dXRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwv
V2ViR1BVUGlwZWxpbmVMYXlvdXRJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NDQ3Mzk5MzE4OTUwZDk1
NGE3ZTE2ZGNmNDZlN2ZiNDdlMTRjNWYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVQaXBlbGluZUxheW91dEltcGwu
Y3BwCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViR1BVUGlwZWxpbmVMYXlvdXRJbXBsLmgiCisKKyNpbmNsdWRlIDxXZWJHUFUv
V2ViR1BVRXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK1Bp
cGVsaW5lTGF5b3V0SW1wbDo6UGlwZWxpbmVMYXlvdXRJbXBsKFdHUFVQaXBlbGluZUxheW91dCBw
aXBlbGluZUxheW91dCkKKyAgICA6IG1fYmFja2luZyhwaXBlbGluZUxheW91dCkKK3sKK30KKwor
UGlwZWxpbmVMYXlvdXRJbXBsOjp+UGlwZWxpbmVMYXlvdXRJbXBsKCkKK3sKKyAgICB3Z3B1UGlw
ZWxpbmVMYXlvdXRSZWxlYXNlKG1fYmFja2luZyk7Cit9CisKK3ZvaWQgUGlwZWxpbmVMYXlvdXRJ
bXBsOjpzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYgbGFiZWwpCit7CisgICAgd2dwdVBp
cGVsaW5lTGF5b3V0U2V0TGFiZWwobV9iYWNraW5nLCBsYWJlbC51dGY4KCkuZGF0YSgpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUGlwZWxp
bmVMYXlvdXRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9J
bXBsL1dlYkdQVVBpcGVsaW5lTGF5b3V0SW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhZmNhMmM3NGU4MzM4
MWQ4YjNlYzUxMGEwM2NlZjkyNzlkMWJhNDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVBpcGVsaW5lTGF5b3V0SW1w
bC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIldlYkdQVVBpcGVsaW5lTGF5b3V0LmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgor
CituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBQaXBlbGluZUxh
eW91dEltcGwgZmluYWwgOiBwdWJsaWMgUGlwZWxpbmVMYXlvdXQgeworcHVibGljOgorICAgIHN0
YXRpYyBSZWY8UGlwZWxpbmVMYXlvdXRJbXBsPiBjcmVhdGUoV0dQVVBpcGVsaW5lTGF5b3V0IHBp
cGVsaW5lTGF5b3V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGlwZWxp
bmVMYXlvdXRJbXBsKHBpcGVsaW5lTGF5b3V0KSk7CisgICAgfQorCisgICAgdmlydHVhbCB+UGlw
ZWxpbmVMYXlvdXRJbXBsKCk7CisKKyAgICBXR1BVUGlwZWxpbmVMYXlvdXQgYmFja2luZygpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgorICAgIFBpcGVsaW5lTGF5b3V0
SW1wbChXR1BVUGlwZWxpbmVMYXlvdXQpOworCisgICAgUGlwZWxpbmVMYXlvdXRJbXBsKGNvbnN0
IFBpcGVsaW5lTGF5b3V0SW1wbCYpID0gZGVsZXRlOworICAgIFBpcGVsaW5lTGF5b3V0SW1wbChQ
aXBlbGluZUxheW91dEltcGwmJikgPSBkZWxldGU7CisgICAgUGlwZWxpbmVMYXlvdXRJbXBsJiBv
cGVyYXRvcj0oY29uc3QgUGlwZWxpbmVMYXlvdXRJbXBsJikgPSBkZWxldGU7CisgICAgUGlwZWxp
bmVMYXlvdXRJbXBsJiBvcGVyYXRvcj0oUGlwZWxpbmVMYXlvdXRJbXBsJiYpID0gZGVsZXRlOwor
CisgICAgdm9pZCBzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYpIGZpbmFsOworCisgICAg
V0dQVVBpcGVsaW5lTGF5b3V0IG1fYmFja2luZyB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVF1ZXJ5U2V0SW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVF1ZXJ5
U2V0SW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDZlZDY5NDBhMjkzMTMwMTcxOTdmODg0YzA4ZDI1YTNj
MTdmNjBiYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhp
Y3MvV2ViR1BVL0ltcGwvV2ViR1BVUXVlcnlTZXRJbXBsLmNwcApAQCAtMCwwICsxLDU1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkdQVVF1ZXJ5U2V0
SW1wbC5oIgorCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVUV4dC5oPgorCituYW1lc3BhY2UgUEFM
IHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitRdWVyeVNldEltcGw6OlF1ZXJ5U2V0SW1wbChXR1BV
UXVlcnlTZXQgcXVlcnlTZXQpCisgICAgOiBtX2JhY2tpbmcocXVlcnlTZXQpCit7Cit9CisKK1F1
ZXJ5U2V0SW1wbDo6flF1ZXJ5U2V0SW1wbCgpCit7CisgICAgd2dwdVF1ZXJ5U2V0UmVsZWFzZSht
X2JhY2tpbmcpOworfQorCit2b2lkIFF1ZXJ5U2V0SW1wbDo6ZGVzdHJveSgpCit7CisgICAgd2dw
dVF1ZXJ5U2V0RGVzdHJveShtX2JhY2tpbmcpOworfQorCit2b2lkIFF1ZXJ5U2V0SW1wbDo6c2V0
TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAgIHdncHVRdWVyeVNldFNl
dExhYmVsKG1fYmFja2luZywgbGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVF1ZXJ5U2V0SW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVRdWVyeVNldElt
cGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi41ZmRmN2YwZjE3YjljYTUwMzk5ZDdhOTMwZWZkYzk0NjJmMTk0NGJh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJH
UFUvSW1wbC9XZWJHUFVRdWVyeVNldEltcGwuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJXZWJHUFVRdWVyeVNldC5oIgorI2luY2x1ZGUg
PFdlYkdQVS9XZWJHUFUuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsK
KworY2xhc3MgUXVlcnlTZXRJbXBsIGZpbmFsIDogcHVibGljIFF1ZXJ5U2V0IHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmPFF1ZXJ5U2V0SW1wbD4gY3JlYXRlKFdHUFVRdWVyeVNldCBxdWVyeVNl
dCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFF1ZXJ5U2V0SW1wbChxdWVy
eVNldCkpOworICAgIH0KKworICAgIHZpcnR1YWwgflF1ZXJ5U2V0SW1wbCgpOworCisgICAgV0dQ
VVF1ZXJ5U2V0IGJhY2tpbmcoKSBjb25zdCB7IHJldHVybiBtX2JhY2tpbmc7IH0KKworcHJpdmF0
ZToKKyAgICBRdWVyeVNldEltcGwoV0dQVVF1ZXJ5U2V0KTsKKworICAgIFF1ZXJ5U2V0SW1wbChj
b25zdCBRdWVyeVNldEltcGwmKSA9IGRlbGV0ZTsKKyAgICBRdWVyeVNldEltcGwoUXVlcnlTZXRJ
bXBsJiYpID0gZGVsZXRlOworICAgIFF1ZXJ5U2V0SW1wbCYgb3BlcmF0b3I9KGNvbnN0IFF1ZXJ5
U2V0SW1wbCYpID0gZGVsZXRlOworICAgIFF1ZXJ5U2V0SW1wbCYgb3BlcmF0b3I9KFF1ZXJ5U2V0
SW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIHZvaWQgZGVzdHJveSgpIGZpbmFsOworCisgICAgdm9p
ZCBzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYpIGZpbmFsOworCisgICAgV0dQVVF1ZXJ5
U2V0IG1fYmFja2luZyB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAv
LyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dy
YXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVF1ZXVlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Q
QUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVF1ZXVlSW1wbC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZGQxZjExOGYyYzllYTA0MzJkMGQwYTY0ZDNhNjllODRlZjBmN2RmZQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BV
UXVldWVJbXBsLmNwcApAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVRdWV1ZUltcGwuaCIKKworI2luY2x1ZGUgIldlYkdQ
VUJ1ZmZlckltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVDb21tYW5kQnVmZmVySW1wbC5oIgorI2lu
Y2x1ZGUgIldlYkdQVUNvbnZlcnRUb0JhY2tpbmcuaCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJl
SW1wbC5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFVFeHQuaD4KKworbmFtZXNwYWNlIFBBTCB7
CituYW1lc3BhY2UgV2ViR1BVIHsKKworUXVldWVJbXBsOjpRdWV1ZUltcGwoV0dQVVF1ZXVlIHF1
ZXVlKQorICAgIDogbV9iYWNraW5nKHF1ZXVlKQoreworfQorCitRdWV1ZUltcGw6On5RdWV1ZUlt
cGwoKQoreworICAgIHdncHVRdWV1ZVJlbGVhc2UobV9iYWNraW5nKTsKK30KKwordm9pZCBRdWV1
ZUltcGw6OnN1Ym1pdChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDb21tYW5kQnVmZmVy
Pj4mJiBjb21tYW5kQnVmZmVycykKK3sKKyAgICBWZWN0b3I8V0dQVUNvbW1hbmRCdWZmZXI+IGJh
Y2tpbmdDb21tYW5kQnVmZmVyczsKKyAgICBiYWNraW5nQ29tbWFuZEJ1ZmZlcnMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShjb21tYW5kQnVmZmVycy5zaXplKCkpOworICAgIGZvciAoYXV0byBjb21t
YW5kQnVmZmVyIDogY29tbWFuZEJ1ZmZlcnMpCisgICAgICAgIGJhY2tpbmdDb21tYW5kQnVmZmVy
cy51bmNoZWNrZWRBcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgQ29tbWFuZEJ1ZmZlckltcGwmPihj
b21tYW5kQnVmZmVyLmdldCgpKS5iYWNraW5nKCkpOworCisgICAgd2dwdVF1ZXVlU3VibWl0KG1f
YmFja2luZywgYmFja2luZ0NvbW1hbmRCdWZmZXJzLnNpemUoKSwgYmFja2luZ0NvbW1hbmRCdWZm
ZXJzLmRhdGEoKSk7Cit9CisKK3ZvaWQgb25TdWJtaXR0ZWRXb3JrRG9uZUNhbGxiYWNrKFdHUFVR
dWV1ZVdvcmtEb25lU3RhdHVzIHN0YXR1cywgdm9pZCogdXNlcmRhdGEpCit7CisgICAgYXV0byBx
dWV1ZSA9IGFkb3B0UmVmKCpzdGF0aWNfY2FzdDxRdWV1ZUltcGwqPih1c2VyZGF0YSkpOyAvLyBh
ZG9wdFJlZiBpcyBiYWxhbmNlZCBieSBsZWFrUmVmIGluIG9uU3VibWl0dGVkV29ya0RvbmUoKSBi
ZWxvdy4gV2UgaGF2ZSB0byBkbyB0aGlzIGJlY2F1c2Ugd2UncmUgdXNpbmcgYSBDIEFQSSB3aXRo
IG5vIGNvbmNlcHQgb2YgcmVmZXJlbmNlIGNvdW50aW5nIG9yIGJsb2Nrcy4KKyAgICBxdWV1ZS0+
b25TdWJtaXR0ZWRXb3JrRG9uZUNhbGxiYWNrKHN0YXR1cyk7Cit9CisKK3ZvaWQgUXVldWVJbXBs
OjpvblN1Ym1pdHRlZFdvcmtEb25lKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiYmIGNhbGxiYWNrKQor
eworICAgIFJlZiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKKworICAgIG1fY2FsbGJhY2tzLmFwcGVu
ZChXVEZNb3ZlKGNhbGxiYWNrKSk7CisKKyAgICB3Z3B1UXVldWVPblN1Ym1pdHRlZFdvcmtEb25l
KG1fYmFja2luZywgbV9zaWduYWxWYWx1ZSwgJldlYkdQVTo6b25TdWJtaXR0ZWRXb3JrRG9uZUNh
bGxiYWNrLCAmcHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpOyAvLyBsZWFrUmVmIGlzIGJhbGFuY2Vk
IGJ5IGFkb3B0UmVmIGluIG9uU3VibWl0dGVkV29ya0RvbmVDYWxsYmFjaygpIGFib3ZlLiBXZSBo
YXZlIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZSdyZSB1c2luZyBhIEMgQVBJIHdpdGggbm8gY29uY2Vw
dCBvZiByZWZlcmVuY2UgY291bnRpbmcgb3IgYmxvY2tzLgorCisgICAgKyttX3NpZ25hbFZhbHVl
OworfQorCit2b2lkIFF1ZXVlSW1wbDo6b25TdWJtaXR0ZWRXb3JrRG9uZUNhbGxiYWNrKFdHUFVR
dWV1ZVdvcmtEb25lU3RhdHVzKQoreworICAgIGF1dG8gY2FsbGJhY2sgPSBtX2NhbGxiYWNrcy50
YWtlRmlyc3QoKTsKKyAgICBjYWxsYmFjaygpOworfQorCit2b2lkIFF1ZXVlSW1wbDo6d3JpdGVC
dWZmZXIoCisgICAgY29uc3QgQnVmZmVyJiBidWZmZXIsCisgICAgU2l6ZTY0IGJ1ZmZlck9mZnNl
dCwKKyAgICBjb25zdCB2b2lkKiBzb3VyY2UsCisgICAgc2l6ZV90IGJ5dGVMZW5ndGgsCisgICAg
U2l6ZTY0IGRhdGFPZmZzZXQsCisgICAgc3RkOjpvcHRpb25hbDxTaXplNjQ+IHNpemUpCit7Cisg
ICAgLy8gRklYTUU6IFVzZSBjaGVja2VkIGFyaXRobWV0aWMgYW5kIGNoZWNrIHRoZSBjYXN0Cisg
ICAgd2dwdVF1ZXVlV3JpdGVCdWZmZXIobV9iYWNraW5nLCBzdGF0aWNfY2FzdDxjb25zdCBCdWZm
ZXJJbXBsJj4oYnVmZmVyKS5iYWNraW5nKCksIGJ1ZmZlck9mZnNldCwgc3RhdGljX2Nhc3Q8Y29u
c3QgdWludDhfdCo+KHNvdXJjZSkgKyBkYXRhT2Zmc2V0LCBzdGF0aWNfY2FzdDxzaXplX3Q+KHNp
emUudmFsdWVfb3IoYnl0ZUxlbmd0aCAtIGRhdGFPZmZzZXQpKSk7Cit9CisKK3ZvaWQgUXVldWVJ
bXBsOjp3cml0ZVRleHR1cmUoCisgICAgY29uc3QgSW1hZ2VDb3B5VGV4dHVyZSYgZGVzdGluYXRp
b24sCisgICAgY29uc3Qgdm9pZCogc291cmNlLAorICAgIHNpemVfdCBieXRlTGVuZ3RoLAorICAg
IGNvbnN0IEltYWdlRGF0YUxheW91dCYgZGF0YUxheW91dCwKKyAgICBjb25zdCBFeHRlbnQzRCYg
c2l6ZSkKK3sKKyAgICBXR1BVSW1hZ2VDb3B5VGV4dHVyZSBiYWNraW5nRGVzdGluYXRpb24gewor
ICAgICAgICBudWxscHRyLAorICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBUZXh0dXJlSW1wbCY+
KGRlc3RpbmF0aW9uLnRleHR1cmUpLmJhY2tpbmcoKSwKKyAgICAgICAgZGVzdGluYXRpb24ubWlw
TGV2ZWwsCisgICAgICAgIGRlc3RpbmF0aW9uLm9yaWdpbiA/IGNvbnZlcnRUb0JhY2tpbmcoKmRl
c3RpbmF0aW9uLm9yaWdpbikgOiBXR1BVT3JpZ2luM0QgeyAwLCAwLCAwIH0sCisgICAgICAgIGNv
bnZlcnRUb0JhY2tpbmcoZGVzdGluYXRpb24uYXNwZWN0KSwKKyAgICB9OworCisgICAgV0dQVVRl
eHR1cmVEYXRhTGF5b3V0IGJhY2tpbmdEYXRhTGF5b3V0IHsKKyAgICAgICAgbnVsbHB0ciwKKyAg
ICAgICAgZGF0YUxheW91dC5vZmZzZXQsCisgICAgICAgIGRhdGFMYXlvdXQuYnl0ZXNQZXJSb3cu
dmFsdWVfb3IoMCksCisgICAgICAgIGRhdGFMYXlvdXQucm93c1BlckltYWdlLnZhbHVlX29yKDAp
LAorICAgIH07CisKKyAgICBXR1BVRXh0ZW50M0QgYmFja2luZ1NpemUgPSBjb252ZXJ0VG9CYWNr
aW5nKHNpemUpOworCisgICAgd2dwdVF1ZXVlV3JpdGVUZXh0dXJlKG1fYmFja2luZywgJmJhY2tp
bmdEZXN0aW5hdGlvbiwgc291cmNlLCBieXRlTGVuZ3RoLCAmYmFja2luZ0RhdGFMYXlvdXQsICZi
YWNraW5nU2l6ZSk7Cit9CisKK3ZvaWQgUXVldWVJbXBsOjpjb3B5RXh0ZXJuYWxJbWFnZVRvVGV4
dHVyZSgKKyAgICBjb25zdCBJbWFnZUNvcHlFeHRlcm5hbEltYWdlJiBzb3VyY2UsCisgICAgY29u
c3QgSW1hZ2VDb3B5VGV4dHVyZVRhZ2dlZCYgZGVzdGluYXRpb24sCisgICAgY29uc3QgRXh0ZW50
M0QmIGNvcHlTaXplKQoreworICAgIFVOVVNFRF9QQVJBTShzb3VyY2UpOworICAgIFVOVVNFRF9Q
QVJBTShkZXN0aW5hdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKGNvcHlTaXplKTsKK30KKwordm9p
ZCBRdWV1ZUltcGw6OnNldExhYmVsSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBsYWJlbCkKK3sKKyAg
ICB3Z3B1UXVldWVTZXRMYWJlbChtX2JhY2tpbmcsIGxhYmVsLnV0ZjgoKS5kYXRhKCkpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVRdWV1ZUlt
cGwuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BV
UXVldWVJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2EwNmZhNmZiNWYzMjY2NDg4NmNhNmUxYzA3NGQ2OWQw
MzdhNDA5NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhp
Y3MvV2ViR1BVL0ltcGwvV2ViR1BVUXVldWVJbXBsLmgKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR1BVUXVldWUuaCIKKyNpbmNsdWRl
IDxXZWJHUFUvV2ViR1BVLmg+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisKK25hbWVzcGFjZSBQ
QUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK2NsYXNzIFF1ZXVlSW1wbCBmaW5hbCA6IHB1Ymxp
YyBRdWV1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxRdWV1ZUltcGw+IGNyZWF0ZShXR1BV
UXVldWUgcXVldWUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBRdWV1ZUlt
cGwocXVldWUpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5RdWV1ZUltcGwoKTsKKworICAgIFdH
UFVRdWV1ZSBiYWNraW5nKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nOyB9CisKK3ByaXZhdGU6
CisgICAgZnJpZW5kIHZvaWQgb25TdWJtaXR0ZWRXb3JrRG9uZUNhbGxiYWNrKFdHUFVRdWV1ZVdv
cmtEb25lU3RhdHVzLCB2b2lkKiB1c2VyZGF0YSk7CisKKyAgICBRdWV1ZUltcGwoV0dQVVF1ZXVl
KTsKKworICAgIFF1ZXVlSW1wbChjb25zdCBRdWV1ZUltcGwmKSA9IGRlbGV0ZTsKKyAgICBRdWV1
ZUltcGwoUXVldWVJbXBsJiYpID0gZGVsZXRlOworICAgIFF1ZXVlSW1wbCYgb3BlcmF0b3I9KGNv
bnN0IFF1ZXVlSW1wbCYpID0gZGVsZXRlOworICAgIFF1ZXVlSW1wbCYgb3BlcmF0b3I9KFF1ZXVl
SW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIHZvaWQgc3VibWl0KFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPENvbW1hbmRCdWZmZXI+PiYmKSBmaW5hbDsKKworICAgIHZvaWQgb25TdWJtaXR0
ZWRXb3JrRG9uZUNhbGxiYWNrKFdHUFVRdWV1ZVdvcmtEb25lU3RhdHVzKTsKKyAgICB2b2lkIG9u
U3VibWl0dGVkV29ya0RvbmUoc3RkOjpmdW5jdGlvbjx2b2lkKCk+JiYpIGZpbmFsOworCisgICAg
dm9pZCB3cml0ZUJ1ZmZlcigKKyAgICAgICAgY29uc3QgQnVmZmVyJiwKKyAgICAgICAgU2l6ZTY0
IGJ1ZmZlck9mZnNldCwKKyAgICAgICAgY29uc3Qgdm9pZCogc291cmNlLAorICAgICAgICBzaXpl
X3QgYnl0ZUxlbmd0aCwKKyAgICAgICAgU2l6ZTY0IGRhdGFPZmZzZXQsCisgICAgICAgIHN0ZDo6
b3B0aW9uYWw8U2l6ZTY0PikgZmluYWw7CisKKyAgICB2b2lkIHdyaXRlVGV4dHVyZSgKKyAgICAg
ICAgY29uc3QgSW1hZ2VDb3B5VGV4dHVyZSYgZGVzdGluYXRpb24sCisgICAgICAgIGNvbnN0IHZv
aWQqIHNvdXJjZSwKKyAgICAgICAgc2l6ZV90IGJ5dGVMZW5ndGgsCisgICAgICAgIGNvbnN0IElt
YWdlRGF0YUxheW91dCYsCisgICAgICAgIGNvbnN0IEV4dGVudDNEJiBzaXplKSBmaW5hbDsKKwor
ICAgIHZvaWQgY29weUV4dGVybmFsSW1hZ2VUb1RleHR1cmUoCisgICAgICAgIGNvbnN0IEltYWdl
Q29weUV4dGVybmFsSW1hZ2UmIHNvdXJjZSwKKyAgICAgICAgY29uc3QgSW1hZ2VDb3B5VGV4dHVy
ZVRhZ2dlZCYgZGVzdGluYXRpb24sCisgICAgICAgIGNvbnN0IEV4dGVudDNEJiBjb3B5U2l6ZSkg
ZmluYWw7CisKKyAgICB2b2lkIHNldExhYmVsSW50ZXJuYWwoY29uc3QgU3RyaW5nJikgZmluYWw7
CisKKyAgICBXR1BVUXVldWUgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworCisgICAgdWludDY0X3Qg
bV9zaWduYWxWYWx1ZSB7IDEgfTsKKworICAgIERlcXVlPHN0ZDo6ZnVuY3Rpb248dm9pZCgpPj4g
bV9jYWxsYmFja3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdl
YkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUv
SW1wbC9XZWJHUFVSZW5kZXJCdW5kbGVFbmNvZGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Q
QUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXJJbXBs
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44NWUyMTI3ZDY0MjE2ZDBiOTRjNGE0OTllY2IxYjQwNzkwODRhZWZh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJH
UFUvSW1wbC9XZWJHUFVSZW5kZXJCdW5kbGVFbmNvZGVySW1wbC5jcHAKQEAgLTAsMCArMSwxMzkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViR1BVUmVu
ZGVyQnVuZGxlRW5jb2RlckltcGwuaCIKKworI2luY2x1ZGUgIldlYkdQVUJpbmRHcm91cEltcGwu
aCIKKyNpbmNsdWRlICJXZWJHUFVCdWZmZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVQ29udmVy
dFRvQmFja2luZy5oIgorI2luY2x1ZGUgIldlYkdQVVJlbmRlckJ1bmRsZUltcGwuaCIKKyNpbmNs
dWRlICJXZWJHUFVSZW5kZXJQaXBlbGluZUltcGwuaCIKKyNpbmNsdWRlIDxXZWJHUFUvV2ViR1BV
RXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisKK1JlbmRlckJ1
bmRsZUVuY29kZXJJbXBsOjpSZW5kZXJCdW5kbGVFbmNvZGVySW1wbChXR1BVUmVuZGVyQnVuZGxl
RW5jb2RlciByZW5kZXJCdW5kbGVFbmNvZGVyKQorICAgIDogbV9iYWNraW5nKHJlbmRlckJ1bmRs
ZUVuY29kZXIpCit7Cit9CisKK1JlbmRlckJ1bmRsZUVuY29kZXJJbXBsOjp+UmVuZGVyQnVuZGxl
RW5jb2RlckltcGwoKQoreworICAgIHdncHVSZW5kZXJCdW5kbGVFbmNvZGVyUmVsZWFzZShtX2Jh
Y2tpbmcpOworfQorCit2b2lkIFJlbmRlckJ1bmRsZUVuY29kZXJJbXBsOjpzZXRQaXBlbGluZShj
b25zdCBSZW5kZXJQaXBlbGluZSYgcmVuZGVyUGlwZWxpbmUpCit7CisgICAgd2dwdVJlbmRlckJ1
bmRsZUVuY29kZXJTZXRQaXBlbGluZShtX2JhY2tpbmcsIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRl
clBpcGVsaW5lSW1wbCY+KHJlbmRlclBpcGVsaW5lKS5iYWNraW5nKCkpOworfQorCit2b2lkIFJl
bmRlckJ1bmRsZUVuY29kZXJJbXBsOjpzZXRJbmRleEJ1ZmZlcihjb25zdCBCdWZmZXImIGJ1ZmZl
ciwgSW5kZXhGb3JtYXQgaW5kZXhGb3JtYXQsIFNpemU2NCBvZmZzZXQsIHN0ZDo6b3B0aW9uYWw8
U2l6ZTY0PiBzaXplKQoreworICAgIHdncHVSZW5kZXJCdW5kbGVFbmNvZGVyU2V0SW5kZXhCdWZm
ZXIobV9iYWNraW5nLCBzdGF0aWNfY2FzdDxjb25zdCBCdWZmZXJJbXBsJj4oYnVmZmVyKS5iYWNr
aW5nKCksIGNvbnZlcnRUb0JhY2tpbmcoaW5kZXhGb3JtYXQpLCBvZmZzZXQsIHNpemUudmFsdWVf
b3IoV0dQVV9XSE9MRV9TSVpFKSk7Cit9CisKK3ZvaWQgUmVuZGVyQnVuZGxlRW5jb2RlckltcGw6
OnNldFZlcnRleEJ1ZmZlcihJbmRleDMyIHNsb3QsIGNvbnN0IEJ1ZmZlciYgYnVmZmVyLCBTaXpl
NjQgb2Zmc2V0LCBzdGQ6Om9wdGlvbmFsPFNpemU2ND4gc2l6ZSkKK3sKKyAgICB3Z3B1UmVuZGVy
QnVuZGxlRW5jb2RlclNldFZlcnRleEJ1ZmZlcihtX2JhY2tpbmcsIHNsb3QsIHN0YXRpY19jYXN0
PGNvbnN0IEJ1ZmZlckltcGwmPihidWZmZXIpLmJhY2tpbmcoKSwgb2Zmc2V0LCBzaXplLnZhbHVl
X29yKFdHUFVfV0hPTEVfU0laRSkpOworfQorCit2b2lkIFJlbmRlckJ1bmRsZUVuY29kZXJJbXBs
OjpkcmF3KFNpemUzMiB2ZXJ0ZXhDb3VudCwgU2l6ZTMyIGluc3RhbmNlQ291bnQsCisgICAgU2l6
ZTMyIGZpcnN0VmVydGV4LCBTaXplMzIgZmlyc3RJbnN0YW5jZSkKK3sKKyAgICB3Z3B1UmVuZGVy
QnVuZGxlRW5jb2RlckRyYXcobV9iYWNraW5nLCB2ZXJ0ZXhDb3VudCwgaW5zdGFuY2VDb3VudCwg
Zmlyc3RWZXJ0ZXgsIGZpcnN0SW5zdGFuY2UpOworfQorCit2b2lkIFJlbmRlckJ1bmRsZUVuY29k
ZXJJbXBsOjpkcmF3SW5kZXhlZChTaXplMzIgaW5kZXhDb3VudCwgU2l6ZTMyIGluc3RhbmNlQ291
bnQsCisgICAgU2l6ZTMyIGZpcnN0SW5kZXgsCisgICAgU2lnbmVkT2Zmc2V0MzIgYmFzZVZlcnRl
eCwKKyAgICBTaXplMzIgZmlyc3RJbnN0YW5jZSkKK3sKKyAgICB3Z3B1UmVuZGVyQnVuZGxlRW5j
b2RlckRyYXdJbmRleGVkKG1fYmFja2luZywgaW5kZXhDb3VudCwgaW5zdGFuY2VDb3VudCwgZmly
c3RJbmRleCwgYmFzZVZlcnRleCwgZmlyc3RJbnN0YW5jZSk7Cit9CisKK3ZvaWQgUmVuZGVyQnVu
ZGxlRW5jb2RlckltcGw6OmRyYXdJbmRpcmVjdChjb25zdCBCdWZmZXImIGluZGlyZWN0QnVmZmVy
LCBTaXplNjQgaW5kaXJlY3RPZmZzZXQpCit7CisgICAgd2dwdVJlbmRlckJ1bmRsZUVuY29kZXJE
cmF3SW5kaXJlY3QobV9iYWNraW5nLCBzdGF0aWNfY2FzdDxjb25zdCBCdWZmZXJJbXBsJj4oaW5k
aXJlY3RCdWZmZXIpLmJhY2tpbmcoKSwgaW5kaXJlY3RPZmZzZXQpOworfQorCit2b2lkIFJlbmRl
ckJ1bmRsZUVuY29kZXJJbXBsOjpkcmF3SW5kZXhlZEluZGlyZWN0KGNvbnN0IEJ1ZmZlciYgaW5k
aXJlY3RCdWZmZXIsIFNpemU2NCBpbmRpcmVjdE9mZnNldCkKK3sKKyAgICB3Z3B1UmVuZGVyQnVu
ZGxlRW5jb2RlckRyYXdJbmRleGVkSW5kaXJlY3QobV9iYWNraW5nLCBzdGF0aWNfY2FzdDxjb25z
dCBCdWZmZXJJbXBsJj4oaW5kaXJlY3RCdWZmZXIpLmJhY2tpbmcoKSwgaW5kaXJlY3RPZmZzZXQp
OworfQorCit2b2lkIFJlbmRlckJ1bmRsZUVuY29kZXJJbXBsOjpzZXRCaW5kR3JvdXAoSW5kZXgz
MiBpbmRleCwgY29uc3QgQmluZEdyb3VwJiBiaW5kR3JvdXAsCisgICAgc3RkOjpvcHRpb25hbDxW
ZWN0b3I8QnVmZmVyRHluYW1pY09mZnNldD4+JiYgZHluYW1pY09mZnNldHMpCit7CisgICAgYXV0
byBiYWNraW5nT2Zmc2V0cyA9IGR5bmFtaWNPZmZzZXRzLnZhbHVlX29yKFZlY3RvcjxCdWZmZXJE
eW5hbWljT2Zmc2V0PiB7IH0pOworICAgIHdncHVSZW5kZXJCdW5kbGVFbmNvZGVyU2V0QmluZEdy
b3VwKG1fYmFja2luZywgaW5kZXgsIHN0YXRpY19jYXN0PGNvbnN0IEJpbmRHcm91cEltcGwmPihi
aW5kR3JvdXApLmJhY2tpbmcoKSwgYmFja2luZ09mZnNldHMuc2l6ZSgpLCBiYWNraW5nT2Zmc2V0
cy5kYXRhKCkpOworfQorCit2b2lkIFJlbmRlckJ1bmRsZUVuY29kZXJJbXBsOjpzZXRCaW5kR3Jv
dXAoSW5kZXgzMiBpbmRleCwgY29uc3QgQmluZEdyb3VwJiBiaW5kR3JvdXAsCisgICAgY29uc3Qg
dWludDMyX3QqIGR5bmFtaWNPZmZzZXRzQXJyYXlCdWZmZXIsCisgICAgc2l6ZV90IGR5bmFtaWNP
ZmZzZXRzQXJyYXlCdWZmZXJMZW5ndGgsCisgICAgU2l6ZTY0IGR5bmFtaWNPZmZzZXRzRGF0YVN0
YXJ0LAorICAgIFNpemUzMiBkeW5hbWljT2Zmc2V0c0RhdGFMZW5ndGgpCit7CisgICAgVU5VU0VE
X1BBUkFNKGR5bmFtaWNPZmZzZXRzQXJyYXlCdWZmZXJMZW5ndGgpOworICAgIC8vIEZJWE1FOiBV
c2UgY2hlY2tlZCBhbGdlYnJhLgorICAgIHdncHVSZW5kZXJCdW5kbGVFbmNvZGVyU2V0QmluZEdy
b3VwKG1fYmFja2luZywgaW5kZXgsIHN0YXRpY19jYXN0PGNvbnN0IEJpbmRHcm91cEltcGwmPihi
aW5kR3JvdXApLmJhY2tpbmcoKSwgZHluYW1pY09mZnNldHNEYXRhTGVuZ3RoLCBkeW5hbWljT2Zm
c2V0c0FycmF5QnVmZmVyICsgZHluYW1pY09mZnNldHNEYXRhU3RhcnQpOworfQorCit2b2lkIFJl
bmRlckJ1bmRsZUVuY29kZXJJbXBsOjpwdXNoRGVidWdHcm91cChTdHJpbmcmJiBncm91cExhYmVs
KQoreworICAgIHdncHVSZW5kZXJCdW5kbGVFbmNvZGVyUHVzaERlYnVnR3JvdXAobV9iYWNraW5n
LCBncm91cExhYmVsLnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIFJlbmRlckJ1bmRsZUVuY29k
ZXJJbXBsOjpwb3BEZWJ1Z0dyb3VwKCkKK3sKKyAgICB3Z3B1UmVuZGVyQnVuZGxlRW5jb2RlclBv
cERlYnVnR3JvdXAobV9iYWNraW5nKTsKK30KKwordm9pZCBSZW5kZXJCdW5kbGVFbmNvZGVySW1w
bDo6aW5zZXJ0RGVidWdNYXJrZXIoU3RyaW5nJiYgbWFya2VyTGFiZWwpCit7CisgICAgd2dwdVJl
bmRlckJ1bmRsZUVuY29kZXJJbnNlcnREZWJ1Z01hcmtlcihtX2JhY2tpbmcsIG1hcmtlckxhYmVs
LnV0ZjgoKS5kYXRhKCkpOworfQorCitSZWY8UmVuZGVyQnVuZGxlPiBSZW5kZXJCdW5kbGVFbmNv
ZGVySW1wbDo6ZmluaXNoKGNvbnN0IFJlbmRlckJ1bmRsZURlc2NyaXB0b3ImIGRlc2NyaXB0b3Ip
Cit7CisgICAgYXV0byBsYWJlbCA9IGRlc2NyaXB0b3IubGFiZWwudXRmOCgpOworCisgICAgV0dQ
VVJlbmRlckJ1bmRsZURlc2NyaXB0b3IgYmFja2luZ0Rlc2NyaXB0b3IgeworICAgICAgICBudWxs
cHRyLAorICAgICAgICBsYWJlbC5kYXRhKCksCisgICAgfTsKKworICAgIHJldHVybiBSZW5kZXJC
dW5kbGVJbXBsOjpjcmVhdGUod2dwdVJlbmRlckJ1bmRsZUVuY29kZXJGaW5pc2gobV9iYWNraW5n
LCAmYmFja2luZ0Rlc2NyaXB0b3IpKTsKK30KKwordm9pZCBSZW5kZXJCdW5kbGVFbmNvZGVySW1w
bDo6c2V0TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAgIHdncHVSZW5k
ZXJCdW5kbGVFbmNvZGVyU2V0TGFiZWwobV9iYWNraW5nLCBsYWJlbC51dGY4KCkuZGF0YSgpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVu
ZGVyQnVuZGxlRW5jb2RlckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3Mv
V2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVyQnVuZGxlRW5jb2RlckltcGwuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
NWRhZjQxOTNjZDI4Yjk4YzMwYjBiZWIyNjlmMWY3MjY3OTMyYjFkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5k
ZXJCdW5kbGVFbmNvZGVySW1wbC5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIldlYkdQVVJlbmRlckJ1bmRsZUVuY29kZXIuaCIKKyNpbmNs
dWRlIDxXZWJHUFUvV2ViR1BVLmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQ
VSB7CisKK2NsYXNzIFJlbmRlckJ1bmRsZUVuY29kZXJJbXBsIGZpbmFsIDogcHVibGljIFJlbmRl
ckJ1bmRsZUVuY29kZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVuZGVyQnVuZGxlRW5j
b2RlckltcGw+IGNyZWF0ZShXR1BVUmVuZGVyQnVuZGxlRW5jb2RlciByZW5kZXJCdW5kbGVFbmNv
ZGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVuZGVyQnVuZGxlRW5j
b2RlckltcGwocmVuZGVyQnVuZGxlRW5jb2RlcikpOworICAgIH0KKworICAgIH5SZW5kZXJCdW5k
bGVFbmNvZGVySW1wbCgpOworCisgICAgV0dQVVJlbmRlckJ1bmRsZUVuY29kZXIgYmFja2luZygp
IGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgorICAgIFJlbmRlckJ1bmRs
ZUVuY29kZXJJbXBsKFdHUFVSZW5kZXJCdW5kbGVFbmNvZGVyKTsKKworICAgIFJlbmRlckJ1bmRs
ZUVuY29kZXJJbXBsKGNvbnN0IFJlbmRlckJ1bmRsZUVuY29kZXJJbXBsJikgPSBkZWxldGU7Cisg
ICAgUmVuZGVyQnVuZGxlRW5jb2RlckltcGwoUmVuZGVyQnVuZGxlRW5jb2RlckltcGwmJikgPSBk
ZWxldGU7CisgICAgUmVuZGVyQnVuZGxlRW5jb2RlckltcGwmIG9wZXJhdG9yPShjb25zdCBSZW5k
ZXJCdW5kbGVFbmNvZGVySW1wbCYpID0gZGVsZXRlOworICAgIFJlbmRlckJ1bmRsZUVuY29kZXJJ
bXBsJiBvcGVyYXRvcj0oUmVuZGVyQnVuZGxlRW5jb2RlckltcGwmJikgPSBkZWxldGU7CisKKyAg
ICB2b2lkIHNldFBpcGVsaW5lKGNvbnN0IFJlbmRlclBpcGVsaW5lJikgZmluYWw7CisKKyAgICB2
b2lkIHNldEluZGV4QnVmZmVyKGNvbnN0IEJ1ZmZlciYsIEluZGV4Rm9ybWF0LCBTaXplNjQgb2Zm
c2V0LCBzdGQ6Om9wdGlvbmFsPFNpemU2ND4pIGZpbmFsOworICAgIHZvaWQgc2V0VmVydGV4QnVm
ZmVyKEluZGV4MzIgc2xvdCwgY29uc3QgQnVmZmVyJiwgU2l6ZTY0IG9mZnNldCwgc3RkOjpvcHRp
b25hbDxTaXplNjQ+KSBmaW5hbDsKKworICAgIHZvaWQgZHJhdyhTaXplMzIgdmVydGV4Q291bnQs
IFNpemUzMiBpbnN0YW5jZUNvdW50LAorICAgICAgICBTaXplMzIgZmlyc3RWZXJ0ZXgsIFNpemUz
MiBmaXJzdEluc3RhbmNlKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdJbmRleGVkKFNpemUzMiBpbmRl
eENvdW50LCBTaXplMzIgaW5zdGFuY2VDb3VudCwKKyAgICAgICAgU2l6ZTMyIGZpcnN0SW5kZXgs
CisgICAgICAgIFNpZ25lZE9mZnNldDMyIGJhc2VWZXJ0ZXgsCisgICAgICAgIFNpemUzMiBmaXJz
dEluc3RhbmNlKSBmaW5hbDsKKworICAgIHZvaWQgZHJhd0luZGlyZWN0KGNvbnN0IEJ1ZmZlciYg
aW5kaXJlY3RCdWZmZXIsIFNpemU2NCBpbmRpcmVjdE9mZnNldCkgZmluYWw7CisgICAgdm9pZCBk
cmF3SW5kZXhlZEluZGlyZWN0KGNvbnN0IEJ1ZmZlciYgaW5kaXJlY3RCdWZmZXIsIFNpemU2NCBp
bmRpcmVjdE9mZnNldCkgZmluYWw7CisKKyAgICB2b2lkIHNldEJpbmRHcm91cChJbmRleDMyLCBj
b25zdCBCaW5kR3JvdXAmLAorICAgICAgICBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxCdWZmZXJEeW5h
bWljT2Zmc2V0Pj4mJiBkeW5hbWljT2Zmc2V0cykgZmluYWw7CisKKyAgICB2b2lkIHNldEJpbmRH
cm91cChJbmRleDMyLCBjb25zdCBCaW5kR3JvdXAmLAorICAgICAgICBjb25zdCB1aW50MzJfdCog
ZHluYW1pY09mZnNldHNBcnJheUJ1ZmZlciwKKyAgICAgICAgc2l6ZV90IGR5bmFtaWNPZmZzZXRz
QXJyYXlCdWZmZXJMZW5ndGgsCisgICAgICAgIFNpemU2NCBkeW5hbWljT2Zmc2V0c0RhdGFTdGFy
dCwKKyAgICAgICAgU2l6ZTMyIGR5bmFtaWNPZmZzZXRzRGF0YUxlbmd0aCkgZmluYWw7CisKKyAg
ICB2b2lkIHB1c2hEZWJ1Z0dyb3VwKFN0cmluZyYmIGdyb3VwTGFiZWwpIGZpbmFsOworICAgIHZv
aWQgcG9wRGVidWdHcm91cCgpIGZpbmFsOworICAgIHZvaWQgaW5zZXJ0RGVidWdNYXJrZXIoU3Ry
aW5nJiYgbWFya2VyTGFiZWwpIGZpbmFsOworCisgICAgUmVmPFJlbmRlckJ1bmRsZT4gZmluaXNo
KGNvbnN0IFJlbmRlckJ1bmRsZURlc2NyaXB0b3ImKSBmaW5hbDsKKworICAgIHZvaWQgc2V0TGFi
ZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5hbDsKKworICAgIFdHUFVSZW5kZXJCdW5kbGVF
bmNvZGVyIG1fYmFja2luZyB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFBBTAor
fSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlckJ1bmRsZUltcGwuY3BwIGIvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJCdW5kbGVJ
bXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5lYjE4Y2Y5YzQxODRjNGY0Y2Y4ZjExYTI1NjM3YjkxYzY4Nzc2
OTRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9X
ZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJCdW5kbGVJbXBsLmNwcApAQCAtMCwwICsxLDUwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkdQVVJlbmRlckJ1
bmRsZUltcGwuaCIKKworI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFVFeHQuaD4KKworbmFtZXNwYWNl
IFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworUmVuZGVyQnVuZGxlSW1wbDo6UmVuZGVyQnVu
ZGxlSW1wbChXR1BVUmVuZGVyQnVuZGxlIHJlbmRlckJ1bmRsZSkKKyAgICA6IG1fYmFja2luZyhy
ZW5kZXJCdW5kbGUpCit7Cit9CisKK1JlbmRlckJ1bmRsZUltcGw6On5SZW5kZXJCdW5kbGVJbXBs
KCkKK3sKKyAgICB3Z3B1UmVuZGVyQnVuZGxlUmVsZWFzZShtX2JhY2tpbmcpOworfQorCit2b2lk
IFJlbmRlckJ1bmRsZUltcGw6OnNldExhYmVsSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBsYWJlbCkK
K3sKKyAgICB3Z3B1UmVuZGVyQnVuZGxlU2V0TGFiZWwobV9iYWNraW5nLCBsYWJlbC51dGY4KCku
ZGF0YSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwv
V2ViR1BVUmVuZGVyQnVuZGxlSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGlj
cy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJCdW5kbGVJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWJkYTM2
ZTA4MWE3NGEzMGU5ZmI0ZDQ2YWMyNDBjMzU3MjI2NjRkYQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVyQnVu
ZGxlSW1wbC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIldlYkdQVVJlbmRlckJ1bmRsZS5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFUu
aD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworY2xhc3MgUmVuZGVy
QnVuZGxlSW1wbCBmaW5hbCA6IHB1YmxpYyBSZW5kZXJCdW5kbGUgeworcHVibGljOgorICAgIHN0
YXRpYyBSZWY8UmVuZGVyQnVuZGxlSW1wbD4gY3JlYXRlKFdHUFVSZW5kZXJCdW5kbGUgcmVuZGVy
QnVuZGxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVuZGVyQnVuZGxl
SW1wbChyZW5kZXJCdW5kbGUpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5SZW5kZXJCdW5kbGVJ
bXBsKCk7CisKKyAgICBXR1BVUmVuZGVyQnVuZGxlIGJhY2tpbmcoKSBjb25zdCB7IHJldHVybiBt
X2JhY2tpbmc7IH0KKworcHJpdmF0ZToKKyAgICBSZW5kZXJCdW5kbGVJbXBsKFdHUFVSZW5kZXJC
dW5kbGUpOworCisgICAgUmVuZGVyQnVuZGxlSW1wbChjb25zdCBSZW5kZXJCdW5kbGVJbXBsJikg
PSBkZWxldGU7CisgICAgUmVuZGVyQnVuZGxlSW1wbChSZW5kZXJCdW5kbGVJbXBsJiYpID0gZGVs
ZXRlOworICAgIFJlbmRlckJ1bmRsZUltcGwmIG9wZXJhdG9yPShjb25zdCBSZW5kZXJCdW5kbGVJ
bXBsJikgPSBkZWxldGU7CisgICAgUmVuZGVyQnVuZGxlSW1wbCYgb3BlcmF0b3I9KFJlbmRlckJ1
bmRsZUltcGwmJikgPSBkZWxldGU7CisKKyAgICB2b2lkIHNldExhYmVsSW50ZXJuYWwoY29uc3Qg
U3RyaW5nJikgZmluYWw7CisKKyAgICBXR1BVUmVuZGVyQnVuZGxlIG1fYmFja2luZyB7IG51bGxw
dHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dl
YkdQVVJlbmRlclBhc3NFbmNvZGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dy
YXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlclBhc3NFbmNvZGVySW1wbC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNDE1YTg0M2ViOGRkYTNhYzRmZGY2MTNkYmNmNWEyOGYxMGEyMzBlNQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2Vi
R1BVUmVuZGVyUGFzc0VuY29kZXJJbXBsLmNwcApAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVSZW5kZXJQYXNzRW5jb2Rl
ckltcGwuaCIKKworI2luY2x1ZGUgIldlYkdQVUJpbmRHcm91cEltcGwuaCIKKyNpbmNsdWRlICJX
ZWJHUFVCdWZmZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViR1BVQ29udmVydFRvQmFja2luZy5oIgor
I2luY2x1ZGUgIldlYkdQVVF1ZXJ5U2V0SW1wbC5oIgorI2luY2x1ZGUgIldlYkdQVVJlbmRlckJ1
bmRsZUltcGwuaCIKKyNpbmNsdWRlICJXZWJHUFVSZW5kZXJQaXBlbGluZUltcGwuaCIKKyNpbmNs
dWRlIDxXZWJHUFUvV2ViR1BVRXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdl
YkdQVSB7CisKK1JlbmRlclBhc3NFbmNvZGVySW1wbDo6UmVuZGVyUGFzc0VuY29kZXJJbXBsKFdH
UFVSZW5kZXJQYXNzRW5jb2RlciByZW5kZXJQYXNzRW5jb2RlcikKKyAgICA6IG1fYmFja2luZyhy
ZW5kZXJQYXNzRW5jb2RlcikKK3sKK30KKworUmVuZGVyUGFzc0VuY29kZXJJbXBsOjp+UmVuZGVy
UGFzc0VuY29kZXJJbXBsKCkKK3sKKyAgICB3Z3B1UmVuZGVyUGFzc0VuY29kZXJSZWxlYXNlKG1f
YmFja2luZyk7Cit9CisKK3ZvaWQgUmVuZGVyUGFzc0VuY29kZXJJbXBsOjpzZXRQaXBlbGluZShj
b25zdCBSZW5kZXJQaXBlbGluZSYgcmVuZGVyUGlwZWxpbmUpCit7CisgICAgd2dwdVJlbmRlclBh
c3NFbmNvZGVyU2V0UGlwZWxpbmUobV9iYWNraW5nLCBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJQ
aXBlbGluZUltcGwmPihyZW5kZXJQaXBlbGluZSkuYmFja2luZygpKTsKK30KKwordm9pZCBSZW5k
ZXJQYXNzRW5jb2RlckltcGw6OnNldEluZGV4QnVmZmVyKGNvbnN0IEJ1ZmZlciYgYnVmZmVyLCBJ
bmRleEZvcm1hdCBpbmRleEZvcm1hdCwgU2l6ZTY0IG9mZnNldCwgc3RkOjpvcHRpb25hbDxTaXpl
NjQ+IHNpemUpCit7CisgICAgd2dwdVJlbmRlclBhc3NFbmNvZGVyU2V0SW5kZXhCdWZmZXIobV9i
YWNraW5nLCBzdGF0aWNfY2FzdDxjb25zdCBCdWZmZXJJbXBsJj4oYnVmZmVyKS5iYWNraW5nKCks
IGNvbnZlcnRUb0JhY2tpbmcoaW5kZXhGb3JtYXQpLCBvZmZzZXQsIHNpemUudmFsdWVfb3IoV0dQ
VV9XSE9MRV9TSVpFKSk7Cit9CisKK3ZvaWQgUmVuZGVyUGFzc0VuY29kZXJJbXBsOjpzZXRWZXJ0
ZXhCdWZmZXIoSW5kZXgzMiBzbG90LCBjb25zdCBCdWZmZXImIGJ1ZmZlciwgU2l6ZTY0IG9mZnNl
dCwgc3RkOjpvcHRpb25hbDxTaXplNjQ+IHNpemUpCit7CisgICAgd2dwdVJlbmRlclBhc3NFbmNv
ZGVyU2V0VmVydGV4QnVmZmVyKG1fYmFja2luZywgc2xvdCwgc3RhdGljX2Nhc3Q8Y29uc3QgQnVm
ZmVySW1wbCY+KGJ1ZmZlcikuYmFja2luZygpLCBvZmZzZXQsIHNpemUudmFsdWVfb3IoV0dQVV9X
SE9MRV9TSVpFKSk7Cit9CisKK3ZvaWQgUmVuZGVyUGFzc0VuY29kZXJJbXBsOjpkcmF3KFNpemUz
MiB2ZXJ0ZXhDb3VudCwgU2l6ZTMyIGluc3RhbmNlQ291bnQsCisgICAgU2l6ZTMyIGZpcnN0VmVy
dGV4LCBTaXplMzIgZmlyc3RJbnN0YW5jZSkKK3sKKyAgICB3Z3B1UmVuZGVyUGFzc0VuY29kZXJE
cmF3KG1fYmFja2luZywgdmVydGV4Q291bnQsIGluc3RhbmNlQ291bnQsIGZpcnN0VmVydGV4LCBm
aXJzdEluc3RhbmNlKTsKK30KKwordm9pZCBSZW5kZXJQYXNzRW5jb2RlckltcGw6OmRyYXdJbmRl
eGVkKFNpemUzMiBpbmRleENvdW50LCBTaXplMzIgaW5zdGFuY2VDb3VudCwKKyAgICBTaXplMzIg
Zmlyc3RJbmRleCwKKyAgICBTaWduZWRPZmZzZXQzMiBiYXNlVmVydGV4LAorICAgIFNpemUzMiBm
aXJzdEluc3RhbmNlKQoreworICAgIHdncHVSZW5kZXJQYXNzRW5jb2RlckRyYXdJbmRleGVkKG1f
YmFja2luZywgaW5kZXhDb3VudCwgaW5zdGFuY2VDb3VudCwgZmlyc3RJbmRleCwgYmFzZVZlcnRl
eCwgZmlyc3RJbnN0YW5jZSk7Cit9CisKK3ZvaWQgUmVuZGVyUGFzc0VuY29kZXJJbXBsOjpkcmF3
SW5kaXJlY3QoY29uc3QgQnVmZmVyJiBpbmRpcmVjdEJ1ZmZlciwgU2l6ZTY0IGluZGlyZWN0T2Zm
c2V0KQoreworICAgIHdncHVSZW5kZXJQYXNzRW5jb2RlckRyYXdJbmRpcmVjdChtX2JhY2tpbmcs
IHN0YXRpY19jYXN0PGNvbnN0IEJ1ZmZlckltcGwmPihpbmRpcmVjdEJ1ZmZlcikuYmFja2luZygp
LCBpbmRpcmVjdE9mZnNldCk7Cit9CisKK3ZvaWQgUmVuZGVyUGFzc0VuY29kZXJJbXBsOjpkcmF3
SW5kZXhlZEluZGlyZWN0KGNvbnN0IEJ1ZmZlciYgaW5kaXJlY3RCdWZmZXIsIFNpemU2NCBpbmRp
cmVjdE9mZnNldCkKK3sKKyAgICB3Z3B1UmVuZGVyUGFzc0VuY29kZXJEcmF3SW5kZXhlZEluZGly
ZWN0KG1fYmFja2luZywgc3RhdGljX2Nhc3Q8Y29uc3QgQnVmZmVySW1wbCY+KGluZGlyZWN0QnVm
ZmVyKS5iYWNraW5nKCksIGluZGlyZWN0T2Zmc2V0KTsKK30KKwordm9pZCBSZW5kZXJQYXNzRW5j
b2RlckltcGw6OnNldEJpbmRHcm91cChJbmRleDMyIGluZGV4LCBjb25zdCBCaW5kR3JvdXAmIGJp
bmRHcm91cCwKKyAgICBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxCdWZmZXJEeW5hbWljT2Zmc2V0Pj4m
JiBkeW5hbWljT2Zmc2V0cykKK3sKKyAgICBhdXRvIGJhY2tpbmdPZmZzZXRzID0gZHluYW1pY09m
ZnNldHMudmFsdWVfb3IoVmVjdG9yPEJ1ZmZlckR5bmFtaWNPZmZzZXQ+IHsgfSk7CisgICAgd2dw
dVJlbmRlclBhc3NFbmNvZGVyU2V0QmluZEdyb3VwKG1fYmFja2luZywgaW5kZXgsIHN0YXRpY19j
YXN0PGNvbnN0IEJpbmRHcm91cEltcGwmPihiaW5kR3JvdXApLmJhY2tpbmcoKSwgYmFja2luZ09m
ZnNldHMuc2l6ZSgpLCBiYWNraW5nT2Zmc2V0cy5kYXRhKCkpOworfQorCit2b2lkIFJlbmRlclBh
c3NFbmNvZGVySW1wbDo6c2V0QmluZEdyb3VwKEluZGV4MzIgaW5kZXgsIGNvbnN0IEJpbmRHcm91
cCYgYmluZEdyb3VwLAorICAgIGNvbnN0IHVpbnQzMl90KiBkeW5hbWljT2Zmc2V0c0FycmF5QnVm
ZmVyLAorICAgIHNpemVfdCBkeW5hbWljT2Zmc2V0c0FycmF5QnVmZmVyTGVuZ3RoLAorICAgIFNp
emU2NCBkeW5hbWljT2Zmc2V0c0RhdGFTdGFydCwKKyAgICBTaXplMzIgZHluYW1pY09mZnNldHNE
YXRhTGVuZ3RoKQoreworICAgIFVOVVNFRF9QQVJBTShkeW5hbWljT2Zmc2V0c0FycmF5QnVmZmVy
TGVuZ3RoKTsKKyAgICAvLyBGSVhNRTogVXNlIGNoZWNrZWQgYWxnZWJyYS4KKyAgICB3Z3B1UmVu
ZGVyUGFzc0VuY29kZXJTZXRCaW5kR3JvdXAobV9iYWNraW5nLCBpbmRleCwgc3RhdGljX2Nhc3Q8
Y29uc3QgQmluZEdyb3VwSW1wbCY+KGJpbmRHcm91cCkuYmFja2luZygpLCBkeW5hbWljT2Zmc2V0
c0RhdGFMZW5ndGgsIGR5bmFtaWNPZmZzZXRzQXJyYXlCdWZmZXIgKyBkeW5hbWljT2Zmc2V0c0Rh
dGFTdGFydCk7Cit9CisKK3ZvaWQgUmVuZGVyUGFzc0VuY29kZXJJbXBsOjpwdXNoRGVidWdHcm91
cChTdHJpbmcmJiBncm91cExhYmVsKQoreworICAgIHdncHVSZW5kZXJQYXNzRW5jb2RlclB1c2hE
ZWJ1Z0dyb3VwKG1fYmFja2luZywgZ3JvdXBMYWJlbC51dGY4KCkuZGF0YSgpKTsKK30KKwordm9p
ZCBSZW5kZXJQYXNzRW5jb2RlckltcGw6OnBvcERlYnVnR3JvdXAoKQoreworICAgIHdncHVSZW5k
ZXJQYXNzRW5jb2RlclBvcERlYnVnR3JvdXAobV9iYWNraW5nKTsKK30KKwordm9pZCBSZW5kZXJQ
YXNzRW5jb2RlckltcGw6Omluc2VydERlYnVnTWFya2VyKFN0cmluZyYmIG1hcmtlckxhYmVsKQor
eworICAgIHdncHVSZW5kZXJQYXNzRW5jb2Rlckluc2VydERlYnVnTWFya2VyKG1fYmFja2luZywg
bWFya2VyTGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgUmVuZGVyUGFzc0VuY29kZXJJ
bXBsOjpzZXRWaWV3cG9ydChmbG9hdCB4LCBmbG9hdCB5LAorICAgIGZsb2F0IHdpZHRoLCBmbG9h
dCBoZWlnaHQsCisgICAgZmxvYXQgbWluRGVwdGgsIGZsb2F0IG1heERlcHRoKQoreworICAgIHdn
cHVSZW5kZXJQYXNzRW5jb2RlclNldFZpZXdwb3J0KG1fYmFja2luZywgeCwgeSwgd2lkdGgsIGhl
aWdodCwgbWluRGVwdGgsIG1heERlcHRoKTsKK30KKwordm9pZCBSZW5kZXJQYXNzRW5jb2Rlcklt
cGw6OnNldFNjaXNzb3JSZWN0KEludGVnZXJDb29yZGluYXRlIHgsIEludGVnZXJDb29yZGluYXRl
IHksCisgICAgSW50ZWdlckNvb3JkaW5hdGUgd2lkdGgsIEludGVnZXJDb29yZGluYXRlIGhlaWdo
dCkKK3sKKyAgICB3Z3B1UmVuZGVyUGFzc0VuY29kZXJTZXRTY2lzc29yUmVjdChtX2JhY2tpbmcs
IHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1wbDo6
c2V0QmxlbmRDb25zdGFudChDb2xvciBjb2xvcikKK3sKKyAgICBhdXRvIGJhY2tpbmdDb2xvciA9
IGNvbnZlcnRUb0JhY2tpbmcoY29sb3IpOworCisgICAgd2dwdVJlbmRlclBhc3NFbmNvZGVyU2V0
QmxlbmRDb25zdGFudChtX2JhY2tpbmcsICZiYWNraW5nQ29sb3IpOworfQorCit2b2lkIFJlbmRl
clBhc3NFbmNvZGVySW1wbDo6c2V0U3RlbmNpbFJlZmVyZW5jZShTdGVuY2lsVmFsdWUgc3RlbmNp
bFZhbHVlKQoreworICAgIHdncHVSZW5kZXJQYXNzRW5jb2RlclNldFN0ZW5jaWxSZWZlcmVuY2Uo
bV9iYWNraW5nLCBzdGVuY2lsVmFsdWUpOworfQorCit2b2lkIFJlbmRlclBhc3NFbmNvZGVySW1w
bDo6YmVnaW5PY2NsdXNpb25RdWVyeShTaXplMzIgcXVlcnlJbmRleCkKK3sKKyAgICB3Z3B1UmVu
ZGVyUGFzc0VuY29kZXJCZWdpbk9jY2x1c2lvblF1ZXJ5KG1fYmFja2luZywgcXVlcnlJbmRleCk7
Cit9CisKK3ZvaWQgUmVuZGVyUGFzc0VuY29kZXJJbXBsOjplbmRPY2NsdXNpb25RdWVyeSgpCit7
CisgICAgd2dwdVJlbmRlclBhc3NFbmNvZGVyRW5kT2NjbHVzaW9uUXVlcnkobV9iYWNraW5nKTsK
K30KKwordm9pZCBSZW5kZXJQYXNzRW5jb2RlckltcGw6OmJlZ2luUGlwZWxpbmVTdGF0aXN0aWNz
UXVlcnkoY29uc3QgUXVlcnlTZXQmIHF1ZXJ5U2V0LCBTaXplMzIgcXVlcnlJbmRleCkKK3sKKyAg
ICB3Z3B1UmVuZGVyUGFzc0VuY29kZXJCZWdpblBpcGVsaW5lU3RhdGlzdGljc1F1ZXJ5KG1fYmFj
a2luZywgc3RhdGljX2Nhc3Q8Y29uc3QgUXVlcnlTZXRJbXBsJj4ocXVlcnlTZXQpLmJhY2tpbmco
KSwgcXVlcnlJbmRleCk7Cit9CisKK3ZvaWQgUmVuZGVyUGFzc0VuY29kZXJJbXBsOjplbmRQaXBl
bGluZVN0YXRpc3RpY3NRdWVyeSgpCit7CisgICAgd2dwdVJlbmRlclBhc3NFbmNvZGVyRW5kUGlw
ZWxpbmVTdGF0aXN0aWNzUXVlcnkobV9iYWNraW5nKTsKK30KKwordm9pZCBSZW5kZXJQYXNzRW5j
b2RlckltcGw6OmV4ZWN1dGVCdW5kbGVzKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJl
bmRlckJ1bmRsZT4+JiYgcmVuZGVyQnVuZGxlcykKK3sKKyAgICBWZWN0b3I8V0dQVVJlbmRlckJ1
bmRsZT4gYmFja2luZ0J1bmRsZXM7CisgICAgYmFja2luZ0J1bmRsZXMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShyZW5kZXJCdW5kbGVzLnNpemUoKSk7CisgICAgZm9yIChhdXRvIHJlbmRlckJ1bmRs
ZSA6IHJlbmRlckJ1bmRsZXMpCisgICAgICAgIGJhY2tpbmdCdW5kbGVzLnVuY2hlY2tlZEFwcGVu
ZChzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJCdW5kbGVJbXBsJj4ocmVuZGVyQnVuZGxlLmdldCgp
KS5iYWNraW5nKCkpOworCisgICAgd2dwdVJlbmRlclBhc3NFbmNvZGVyRXhlY3V0ZUJ1bmRsZXMo
bV9iYWNraW5nLCBiYWNraW5nQnVuZGxlcy5zaXplKCksIGJhY2tpbmdCdW5kbGVzLmRhdGEoKSk7
Cit9CisKK3ZvaWQgUmVuZGVyUGFzc0VuY29kZXJJbXBsOjplbmRQYXNzKCkKK3sKKyAgICB3Z3B1
UmVuZGVyUGFzc0VuY29kZXJFbmRQYXNzKG1fYmFja2luZyk7Cit9CisKK3ZvaWQgUmVuZGVyUGFz
c0VuY29kZXJJbXBsOjpzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYgbGFiZWwpCit7Cisg
ICAgd2dwdVJlbmRlclBhc3NFbmNvZGVyU2V0TGFiZWwobV9iYWNraW5nLCBsYWJlbC51dGY4KCku
ZGF0YSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwv
V2ViR1BVUmVuZGVyUGFzc0VuY29kZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dy
YXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlclBhc3NFbmNvZGVySW1wbC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjliYWYxYWU4Yzk3NTdmZTEyMzkxMDhlODg0MzFjNDk2ODVhNWU3MTIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQ
VVJlbmRlclBhc3NFbmNvZGVySW1wbC5oCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJXZWJHUFVSZW5kZXJQYXNzRW5jb2Rlci5oIgorI2lu
Y2x1ZGUgPFdlYkdQVS9XZWJHUFUuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2Vi
R1BVIHsKKworY2xhc3MgUmVuZGVyUGFzc0VuY29kZXJJbXBsIGZpbmFsIDogcHVibGljIFJlbmRl
clBhc3NFbmNvZGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlbmRlclBhc3NFbmNvZGVy
SW1wbD4gY3JlYXRlKFdHUFVSZW5kZXJQYXNzRW5jb2RlciByZW5kZXJQYXNzRW5jb2RlcikKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlbmRlclBhc3NFbmNvZGVySW1wbChy
ZW5kZXJQYXNzRW5jb2RlcikpOworICAgIH0KKworICAgIH5SZW5kZXJQYXNzRW5jb2RlckltcGwo
KTsKKworICAgIFdHUFVSZW5kZXJQYXNzRW5jb2RlciBiYWNraW5nKCkgY29uc3QgeyByZXR1cm4g
bV9iYWNraW5nOyB9CisKK3ByaXZhdGU6CisgICAgUmVuZGVyUGFzc0VuY29kZXJJbXBsKFdHUFVS
ZW5kZXJQYXNzRW5jb2Rlcik7CisKKyAgICBSZW5kZXJQYXNzRW5jb2RlckltcGwoY29uc3QgUmVu
ZGVyUGFzc0VuY29kZXJJbXBsJikgPSBkZWxldGU7CisgICAgUmVuZGVyUGFzc0VuY29kZXJJbXBs
KFJlbmRlclBhc3NFbmNvZGVySW1wbCYmKSA9IGRlbGV0ZTsKKyAgICBSZW5kZXJQYXNzRW5jb2Rl
ckltcGwmIG9wZXJhdG9yPShjb25zdCBSZW5kZXJQYXNzRW5jb2RlckltcGwmKSA9IGRlbGV0ZTsK
KyAgICBSZW5kZXJQYXNzRW5jb2RlckltcGwmIG9wZXJhdG9yPShSZW5kZXJQYXNzRW5jb2Rlcklt
cGwmJikgPSBkZWxldGU7CisKKyAgICB2b2lkIHNldFBpcGVsaW5lKGNvbnN0IFJlbmRlclBpcGVs
aW5lJikgZmluYWw7CisKKyAgICB2b2lkIHNldEluZGV4QnVmZmVyKGNvbnN0IEJ1ZmZlciYsIElu
ZGV4Rm9ybWF0LCBTaXplNjQgb2Zmc2V0LCBzdGQ6Om9wdGlvbmFsPFNpemU2ND4pIGZpbmFsOwor
ICAgIHZvaWQgc2V0VmVydGV4QnVmZmVyKEluZGV4MzIgc2xvdCwgY29uc3QgQnVmZmVyJiwgU2l6
ZTY0IG9mZnNldCwgc3RkOjpvcHRpb25hbDxTaXplNjQ+KSBmaW5hbDsKKworICAgIHZvaWQgZHJh
dyhTaXplMzIgdmVydGV4Q291bnQsIFNpemUzMiBpbnN0YW5jZUNvdW50LAorICAgICAgICBTaXpl
MzIgZmlyc3RWZXJ0ZXgsIFNpemUzMiBmaXJzdEluc3RhbmNlKSBmaW5hbDsKKyAgICB2b2lkIGRy
YXdJbmRleGVkKFNpemUzMiBpbmRleENvdW50LCBTaXplMzIgaW5zdGFuY2VDb3VudCwKKyAgICAg
ICAgU2l6ZTMyIGZpcnN0SW5kZXgsCisgICAgICAgIFNpZ25lZE9mZnNldDMyIGJhc2VWZXJ0ZXgs
CisgICAgICAgIFNpemUzMiBmaXJzdEluc3RhbmNlKSBmaW5hbDsKKworICAgIHZvaWQgZHJhd0lu
ZGlyZWN0KGNvbnN0IEJ1ZmZlciYgaW5kaXJlY3RCdWZmZXIsIFNpemU2NCBpbmRpcmVjdE9mZnNl
dCkgZmluYWw7CisgICAgdm9pZCBkcmF3SW5kZXhlZEluZGlyZWN0KGNvbnN0IEJ1ZmZlciYgaW5k
aXJlY3RCdWZmZXIsIFNpemU2NCBpbmRpcmVjdE9mZnNldCkgZmluYWw7CisKKyAgICB2b2lkIHNl
dEJpbmRHcm91cChJbmRleDMyLCBjb25zdCBCaW5kR3JvdXAmLAorICAgICAgICBzdGQ6Om9wdGlv
bmFsPFZlY3RvcjxCdWZmZXJEeW5hbWljT2Zmc2V0Pj4mJiBkeW5hbWljT2Zmc2V0cykgZmluYWw7
CisKKyAgICB2b2lkIHNldEJpbmRHcm91cChJbmRleDMyLCBjb25zdCBCaW5kR3JvdXAmLAorICAg
ICAgICBjb25zdCB1aW50MzJfdCogZHluYW1pY09mZnNldHNBcnJheUJ1ZmZlciwKKyAgICAgICAg
c2l6ZV90IGR5bmFtaWNPZmZzZXRzQXJyYXlCdWZmZXJMZW5ndGgsCisgICAgICAgIFNpemU2NCBk
eW5hbWljT2Zmc2V0c0RhdGFTdGFydCwKKyAgICAgICAgU2l6ZTMyIGR5bmFtaWNPZmZzZXRzRGF0
YUxlbmd0aCkgZmluYWw7CisKKyAgICB2b2lkIHB1c2hEZWJ1Z0dyb3VwKFN0cmluZyYmIGdyb3Vw
TGFiZWwpIGZpbmFsOworICAgIHZvaWQgcG9wRGVidWdHcm91cCgpIGZpbmFsOworICAgIHZvaWQg
aW5zZXJ0RGVidWdNYXJrZXIoU3RyaW5nJiYgbWFya2VyTGFiZWwpIGZpbmFsOworCisgICAgdm9p
ZCBzZXRWaWV3cG9ydChmbG9hdCB4LCBmbG9hdCB5LAorICAgICAgICBmbG9hdCB3aWR0aCwgZmxv
YXQgaGVpZ2h0LAorICAgICAgICBmbG9hdCBtaW5EZXB0aCwgZmxvYXQgbWF4RGVwdGgpIGZpbmFs
OworCisgICAgdm9pZCBzZXRTY2lzc29yUmVjdChJbnRlZ2VyQ29vcmRpbmF0ZSB4LCBJbnRlZ2Vy
Q29vcmRpbmF0ZSB5LAorICAgICAgICBJbnRlZ2VyQ29vcmRpbmF0ZSB3aWR0aCwgSW50ZWdlckNv
b3JkaW5hdGUgaGVpZ2h0KSBmaW5hbDsKKworICAgIHZvaWQgc2V0QmxlbmRDb25zdGFudChDb2xv
cikgZmluYWw7CisgICAgdm9pZCBzZXRTdGVuY2lsUmVmZXJlbmNlKFN0ZW5jaWxWYWx1ZSkgZmlu
YWw7CisKKyAgICB2b2lkIGJlZ2luT2NjbHVzaW9uUXVlcnkoU2l6ZTMyIHF1ZXJ5SW5kZXgpIGZp
bmFsOworICAgIHZvaWQgZW5kT2NjbHVzaW9uUXVlcnkoKSBmaW5hbDsKKworICAgIHZvaWQgYmVn
aW5QaXBlbGluZVN0YXRpc3RpY3NRdWVyeShjb25zdCBRdWVyeVNldCYsIFNpemUzMiBxdWVyeUlu
ZGV4KSBmaW5hbDsKKyAgICB2b2lkIGVuZFBpcGVsaW5lU3RhdGlzdGljc1F1ZXJ5KCkgZmluYWw7
CisKKyAgICB2b2lkIGV4ZWN1dGVCdW5kbGVzKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PFJlbmRlckJ1bmRsZT4+JiYpIGZpbmFsOworICAgIHZvaWQgZW5kUGFzcygpIGZpbmFsOworCisg
ICAgdm9pZCBzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYpIGZpbmFsOworCisgICAgV0dQ
VVJlbmRlclBhc3NFbmNvZGVyIG1fYmFja2luZyB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlclBpcGVsaW5lSW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQ
VVJlbmRlclBpcGVsaW5lSW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGMwZGQzZWExMmE4OTk5YzQyZTYz
YWJiMzYyMDMyZmMzYzE3ZTE3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVUmVuZGVyUGlwZWxpbmVJbXBsLmNwcApA
QCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYkdQVVJlbmRlclBpcGVsaW5lSW1wbC5oIgorCisjaW5jbHVkZSAiV2ViR1BVQmluZEdy
b3VwTGF5b3V0SW1wbC5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFVFeHQuaD4KKworbmFtZXNw
YWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworUmVuZGVyUGlwZWxpbmVJbXBsOjpSZW5k
ZXJQaXBlbGluZUltcGwoV0dQVVJlbmRlclBpcGVsaW5lIHJlbmRlclBpcGVsaW5lKQorICAgIDog
bV9iYWNraW5nKHJlbmRlclBpcGVsaW5lKQoreworfQorCitSZW5kZXJQaXBlbGluZUltcGw6On5S
ZW5kZXJQaXBlbGluZUltcGwoKQoreworICAgIHdncHVSZW5kZXJQaXBlbGluZVJlbGVhc2UobV9i
YWNraW5nKTsKK30KKworUmVmPEJpbmRHcm91cExheW91dD4gUmVuZGVyUGlwZWxpbmVJbXBsOjpn
ZXRCaW5kR3JvdXBMYXlvdXQodWludDMyX3QgaW5kZXgpCit7CisgICAgcmV0dXJuIEJpbmRHcm91
cExheW91dEltcGw6OmNyZWF0ZSh3Z3B1UmVuZGVyUGlwZWxpbmVHZXRCaW5kR3JvdXBMYXlvdXQo
bV9iYWNraW5nLCBpbmRleCkpOworfQorCit2b2lkIFJlbmRlclBpcGVsaW5lSW1wbDo6c2V0TGFi
ZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAgIHdncHVSZW5kZXJQaXBlbGlu
ZVNldExhYmVsKG1fYmFja2luZywgbGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVJlbmRlclBpcGVsaW5lSW1w
bC5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVS
ZW5kZXJQaXBlbGluZUltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZWFlNTdhNjlmYjEyNTdkMzY3MjIwNWNm
NzkxOTZhOWE1YTBiZmVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVSZW5kZXJQaXBlbGluZUltcGwuaApAQCAtMCww
ICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJXZWJHUFVS
ZW5kZXJQaXBlbGluZS5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFUuaD4KKworbmFtZXNwYWNl
IFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworY2xhc3MgUmVuZGVyUGlwZWxpbmVJbXBsIGZp
bmFsIDogcHVibGljIFJlbmRlclBpcGVsaW5lIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJl
bmRlclBpcGVsaW5lSW1wbD4gY3JlYXRlKFdHUFVSZW5kZXJQaXBlbGluZSByZW5kZXJQaXBlbGlu
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlbmRlclBpcGVsaW5lSW1w
bChyZW5kZXJQaXBlbGluZSkpOworICAgIH0KKworICAgIHZpcnR1YWwgflJlbmRlclBpcGVsaW5l
SW1wbCgpOworCisgICAgV0dQVVJlbmRlclBpcGVsaW5lIGJhY2tpbmcoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tpbmc7IH0KKworcHJpdmF0ZToKKyAgICBSZW5kZXJQaXBlbGluZUltcGwoV0dQVVJl
bmRlclBpcGVsaW5lKTsKKworICAgIFJlbmRlclBpcGVsaW5lSW1wbChjb25zdCBSZW5kZXJQaXBl
bGluZUltcGwmKSA9IGRlbGV0ZTsKKyAgICBSZW5kZXJQaXBlbGluZUltcGwoUmVuZGVyUGlwZWxp
bmVJbXBsJiYpID0gZGVsZXRlOworICAgIFJlbmRlclBpcGVsaW5lSW1wbCYgb3BlcmF0b3I9KGNv
bnN0IFJlbmRlclBpcGVsaW5lSW1wbCYpID0gZGVsZXRlOworICAgIFJlbmRlclBpcGVsaW5lSW1w
bCYgb3BlcmF0b3I9KFJlbmRlclBpcGVsaW5lSW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIFJlZjxC
aW5kR3JvdXBMYXlvdXQ+IGdldEJpbmRHcm91cExheW91dCh1aW50MzJfdCBpbmRleCkgZmluYWw7
CisKKyAgICB2b2lkIHNldExhYmVsSW50ZXJuYWwoY29uc3QgU3RyaW5nJikgZmluYWw7CisKKyAg
ICBXR1BVUmVuZGVyUGlwZWxpbmUgbV9iYWNraW5nIHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBu
YW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVU2FtcGxlckltcGwuY3Bw
IGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVTYW1w
bGVySW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTJjYWE3M2E1N2YwMDMyOGI5MjZmYzAxYzAwOTAyZGVj
MWMwOGE0YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhp
Y3MvV2ViR1BVL0ltcGwvV2ViR1BVU2FtcGxlckltcGwuY3BwCkBAIC0wLDAgKzEsNTAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViR1BVU2FtcGxlcklt
cGwuaCIKKworI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFVFeHQuaD4KKworbmFtZXNwYWNlIFBBTCB7
CituYW1lc3BhY2UgV2ViR1BVIHsKKworU2FtcGxlckltcGw6OlNhbXBsZXJJbXBsKFdHUFVTYW1w
bGVyIHNhbXBsZXIpCisgICAgOiBtX2JhY2tpbmcoc2FtcGxlcikKK3sKK30KKworU2FtcGxlcklt
cGw6On5TYW1wbGVySW1wbCgpCit7CisgICAgd2dwdVNhbXBsZXJSZWxlYXNlKG1fYmFja2luZyk7
Cit9CisKK3ZvaWQgU2FtcGxlckltcGw6OnNldExhYmVsSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBs
YWJlbCkKK3sKKyAgICB3Z3B1U2FtcGxlclNldExhYmVsKG1fYmFja2luZywgbGFiZWwudXRmOCgp
LmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BV
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBs
L1dlYkdQVVNhbXBsZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dl
YkdQVS9JbXBsL1dlYkdQVVNhbXBsZXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDUyZGM0NzIwODc0ZjRm
NTZiZGU0YTVmODNjYzNhYmZmNWMyYmJlYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVU2FtcGxlckltcGwuaApAQCAt
MCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJXZWJH
UFVTYW1wbGVyLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5oPgorCituYW1lc3BhY2UgUEFM
IHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBTYW1wbGVySW1wbCBmaW5hbCA6IHB1Ymxp
YyBTYW1wbGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFNhbXBsZXJJbXBsPiBjcmVhdGUo
V0dQVVNhbXBsZXIgc2FtcGxlcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFNhbXBsZXJJbXBsKHNhbXBsZXIpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5TYW1wbGVySW1w
bCgpOworCisgICAgV0dQVVNhbXBsZXIgYmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2lu
ZzsgfQorCitwcml2YXRlOgorICAgIFNhbXBsZXJJbXBsKFdHUFVTYW1wbGVyKTsKKworICAgIFNh
bXBsZXJJbXBsKGNvbnN0IFNhbXBsZXJJbXBsJikgPSBkZWxldGU7CisgICAgU2FtcGxlckltcGwo
U2FtcGxlckltcGwmJikgPSBkZWxldGU7CisgICAgU2FtcGxlckltcGwmIG9wZXJhdG9yPShjb25z
dCBTYW1wbGVySW1wbCYpID0gZGVsZXRlOworICAgIFNhbXBsZXJJbXBsJiBvcGVyYXRvcj0oU2Ft
cGxlckltcGwmJikgPSBkZWxldGU7CisKKyAgICB2b2lkIHNldExhYmVsSW50ZXJuYWwoY29uc3Qg
U3RyaW5nJikgZmluYWw7CisKKyAgICBXR1BVU2FtcGxlciBtX2JhY2tpbmcgeyBudWxscHRyIH07
Cit9OworCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVT
aGFkZXJNb2R1bGVJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2Vi
R1BVL0ltcGwvV2ViR1BVU2hhZGVyTW9kdWxlSW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTFiNTY5NTU0
MGU3ZDRlZmU0YWQwY2UyMTk0MTM3OTY2ZDQyZTA1YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVU2hhZGVyTW9kdWxl
SW1wbC5jcHAKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWJHUFVTaGFkZXJNb2R1bGVJbXBsLmgiCisKKyNpbmNsdWRlIDxXZWJH
UFUvV2ViR1BVRXh0Lmg+CisKK25hbWVzcGFjZSBQQUwgeworbmFtZXNwYWNlIFdlYkdQVSB7CisK
K1NoYWRlck1vZHVsZUltcGw6OlNoYWRlck1vZHVsZUltcGwoV0dQVVNoYWRlck1vZHVsZSBzaGFk
ZXJNb2R1bGUpCisgICAgOiBtX2JhY2tpbmcoc2hhZGVyTW9kdWxlKQoreworfQorCitTaGFkZXJN
b2R1bGVJbXBsOjp+U2hhZGVyTW9kdWxlSW1wbCgpCit7CisgICAgd2dwdVNoYWRlck1vZHVsZVJl
bGVhc2UobV9iYWNraW5nKTsKK30KKwordm9pZCBTaGFkZXJNb2R1bGVJbXBsOjpjb21waWxhdGlv
bkluZm8oc3RkOjpmdW5jdGlvbjx2b2lkKFJlZjxDb21waWxhdGlvbkluZm8+JiYpPiYmKQorewor
fQorCit2b2lkIFNoYWRlck1vZHVsZUltcGw6OnNldExhYmVsSW50ZXJuYWwoY29uc3QgU3RyaW5n
JiBsYWJlbCkKK3sKKyAgICB3Z3B1U2hhZGVyTW9kdWxlU2V0TGFiZWwobV9iYWNraW5nLCBsYWJl
bC51dGY4KCkuZGF0YSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgUEFMCit9IC8vIG5hbWVzcGFj
ZSBXZWJHUFUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2Vi
R1BVL0ltcGwvV2ViR1BVU2hhZGVyTW9kdWxlSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVTaGFkZXJNb2R1bGVJbXBsLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYWNlZjM2MzkxZDAyZTQwYmRkZTZlOTRmMDkxMzkxZmFlNDFjYTMzZQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BV
U2hhZGVyTW9kdWxlSW1wbC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIldlYkdQVVNoYWRlck1vZHVsZS5oIgorI2luY2x1ZGUgPFdlYkdQ
VS9XZWJHUFUuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1lc3BhY2UgV2ViR1BVIHsKKworY2xh
c3MgU2hhZGVyTW9kdWxlSW1wbCBmaW5hbCA6IHB1YmxpYyBTaGFkZXJNb2R1bGUgeworcHVibGlj
OgorICAgIHN0YXRpYyBSZWY8U2hhZGVyTW9kdWxlSW1wbD4gY3JlYXRlKFdHUFVTaGFkZXJNb2R1
bGUgc2hhZGVyTW9kdWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hh
ZGVyTW9kdWxlSW1wbChzaGFkZXJNb2R1bGUpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5TaGFk
ZXJNb2R1bGVJbXBsKCk7CisKKyAgICBXR1BVU2hhZGVyTW9kdWxlIGJhY2tpbmcoKSBjb25zdCB7
IHJldHVybiBtX2JhY2tpbmc7IH0KKworcHJpdmF0ZToKKyAgICBTaGFkZXJNb2R1bGVJbXBsKFdH
UFVTaGFkZXJNb2R1bGUpOworCisgICAgU2hhZGVyTW9kdWxlSW1wbChjb25zdCBTaGFkZXJNb2R1
bGVJbXBsJikgPSBkZWxldGU7CisgICAgU2hhZGVyTW9kdWxlSW1wbChTaGFkZXJNb2R1bGVJbXBs
JiYpID0gZGVsZXRlOworICAgIFNoYWRlck1vZHVsZUltcGwmIG9wZXJhdG9yPShjb25zdCBTaGFk
ZXJNb2R1bGVJbXBsJikgPSBkZWxldGU7CisgICAgU2hhZGVyTW9kdWxlSW1wbCYgb3BlcmF0b3I9
KFNoYWRlck1vZHVsZUltcGwmJikgPSBkZWxldGU7CisKKyAgICB2b2lkIGNvbXBpbGF0aW9uSW5m
byhzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVmPENvbXBpbGF0aW9uSW5mbz4mJik+JiYpIGZpbmFsOwor
CisgICAgdm9pZCBzZXRMYWJlbEludGVybmFsKGNvbnN0IFN0cmluZyYpIGZpbmFsOworCisgICAg
V0dQVVNoYWRlck1vZHVsZSBtX2JhY2tpbmcgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVz
cGFjZSBQQUwKK30gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVUZXh0dXJlSW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVRleHR1cmVJ
bXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iYjZmODIxZDk0M2JkNjQ0YjdiNzkwMjE2ODFmMTYwNzQzYTUw
NTgxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9X
ZWJHUFUvSW1wbC9XZWJHUFVUZXh0dXJlSW1wbC5jcHAKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJlSW1wbC5o
IgorCisjaW5jbHVkZSAiV2ViR1BVQ29udmVydFRvQmFja2luZy5oIgorI2luY2x1ZGUgIldlYkdQ
VVRleHR1cmVWaWV3LmgiCisjaW5jbHVkZSAiV2ViR1BVVGV4dHVyZVZpZXdEZXNjcmlwdG9yLmgi
CisjaW5jbHVkZSAiV2ViR1BVVGV4dHVyZVZpZXdJbXBsLmgiCisjaW5jbHVkZSA8V2ViR1BVL1dl
YkdQVUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitUZXh0
dXJlSW1wbDo6VGV4dHVyZUltcGwoV0dQVVRleHR1cmUgdGV4dHVyZSwgVGV4dHVyZUZvcm1hdCBm
b3JtYXQsIFRleHR1cmVEaW1lbnNpb24gZGltZW5zaW9uKQorICAgIDogbV9iYWNraW5nKHRleHR1
cmUpCisgICAgLCBtX2Zvcm1hdChmb3JtYXQpCisgICAgLCBtX2RpbWVuc2lvbihkaW1lbnNpb24p
Cit7Cit9CisKK1RleHR1cmVJbXBsOjp+VGV4dHVyZUltcGwoKQoreworICAgIHdncHVUZXh0dXJl
UmVsZWFzZShtX2JhY2tpbmcpOworfQorCitSZWY8VGV4dHVyZVZpZXc+IFRleHR1cmVJbXBsOjpj
cmVhdGVWaWV3KGNvbnN0IHN0ZDo6b3B0aW9uYWw8VGV4dHVyZVZpZXdEZXNjcmlwdG9yPiYgZGVz
Y3JpcHRvcikgY29uc3QKK3sKKyAgICBDU3RyaW5nIGxhYmVsID0gZGVzY3JpcHRvciA/IGRlc2Ny
aXB0b3ItPmxhYmVsLnV0ZjgoKSA6IENTdHJpbmcoIiIpOworCisgICAgV0dQVVRleHR1cmVWaWV3
RGVzY3JpcHRvciBiYWNraW5nRGVzY3JpcHRvciB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAg
IGxhYmVsLmRhdGEoKSwKKyAgICAgICAgZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLT5mb3JtYXQg
PyBjb252ZXJ0VG9CYWNraW5nKCpkZXNjcmlwdG9yLT5mb3JtYXQpIDogY29udmVydFRvQmFja2lu
ZyhtX2Zvcm1hdCksCisgICAgICAgIChbJl0gKCkgLT4gV0dQVVRleHR1cmVWaWV3RGltZW5zaW9u
IHsKKyAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3ItPmRpbWVuc2lvbikK
KyAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydFRvQmFja2luZygqZGVzY3JpcHRvci0+ZGlt
ZW5zaW9uKTsKKyAgICAgICAgICAgIHN3aXRjaCAobV9kaW1lbnNpb24pIHsKKyAgICAgICAgICAg
IGNhc2UgVGV4dHVyZURpbWVuc2lvbjo6XzFkOgorICAgICAgICAgICAgICAgIHJldHVybiBXR1BV
VGV4dHVyZVZpZXdEaW1lbnNpb25fMUQ7CisgICAgICAgICAgICBjYXNlIFRleHR1cmVEaW1lbnNp
b246Ol8yZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gV0dQVVRleHR1cmVWaWV3RGltZW5zaW9u
XzJEOworICAgICAgICAgICAgY2FzZSBUZXh0dXJlRGltZW5zaW9uOjpfM2Q6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIFdHUFVUZXh0dXJlVmlld0RpbWVuc2lvbl8yRDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSkoKSwKKyAgICAgICAgZGVzY3JpcHRvciA/IGRlc2NyaXB0b3ItPmJhc2VNaXBM
ZXZlbCA6IDAsCisgICAgICAgIGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci0+bWlwTGV2ZWxDb3Vu
dCA/ICpkZXNjcmlwdG9yLT5taXBMZXZlbENvdW50IDogc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFdH
UFVfTUlQX0xFVkVMX0NPVU5UX1VOREVGSU5FRCksCisgICAgICAgIGRlc2NyaXB0b3IgPyBkZXNj
cmlwdG9yLT5iYXNlQXJyYXlMYXllciA6IDAsCisgICAgICAgIGRlc2NyaXB0b3IgJiYgZGVzY3Jp
cHRvci0+YXJyYXlMYXllckNvdW50ID8gKmRlc2NyaXB0b3ItPmFycmF5TGF5ZXJDb3VudCA6IHN0
YXRpY19jYXN0PHVpbnQzMl90PihXR1BVX0FSUkFZX0xBWUVSX0NPVU5UX1VOREVGSU5FRCksCisg
ICAgICAgIGRlc2NyaXB0b3IgPyBjb252ZXJ0VG9CYWNraW5nKGRlc2NyaXB0b3ItPmFzcGVjdCkg
OiBXR1BVVGV4dHVyZUFzcGVjdF9BbGwsCisgICAgfTsKKworICAgIHJldHVybiBUZXh0dXJlVmll
d0ltcGw6OmNyZWF0ZSh3Z3B1VGV4dHVyZUNyZWF0ZVZpZXcobV9iYWNraW5nLCAmYmFja2luZ0Rl
c2NyaXB0b3IpKTsKK30KKwordm9pZCBUZXh0dXJlSW1wbDo6ZGVzdHJveSgpCit7CisgICAgd2dw
dVRleHR1cmVEZXN0cm95KG1fYmFja2luZyk7Cit9CisKK3ZvaWQgVGV4dHVyZUltcGw6OnNldExh
YmVsSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBsYWJlbCkKK3sKKyAgICB3Z3B1VGV4dHVyZVNldExh
YmVsKG1fYmFja2luZywgbGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Q
QUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVRleHR1cmVJbXBsLmggYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVRleHR1cmVJbXBsLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYzZlOGQwYjhjMDQ3MmEzZDhlMjY4OWZmY2JiYzNjNDI3YmVhZjFlOQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0lt
cGwvV2ViR1BVVGV4dHVyZUltcGwuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJXZWJHUFVJbnRlZ3JhbFR5cGVzLmgiCisjaW5jbHVkZSAi
V2ViR1BVVGV4dHVyZS5oIgorI2luY2x1ZGUgIldlYkdQVVRleHR1cmVEaW1lbnNpb24uaCIKKyNp
bmNsdWRlICJXZWJHUFVUZXh0dXJlRm9ybWF0LmgiCisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVS5o
PgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVzcGFjZSBXZWJHUFUgeworCitjbGFzcyBUZXh0dXJl
SW1wbCBmaW5hbCA6IHB1YmxpYyBUZXh0dXJlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFRl
eHR1cmVJbXBsPiBjcmVhdGUoV0dQVVRleHR1cmUgdGV4dHVyZSwgVGV4dHVyZUZvcm1hdCBmb3Jt
YXQsIFRleHR1cmVEaW1lbnNpb24gZGltZW5zaW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgVGV4dHVyZUltcGwodGV4dHVyZSwgZm9ybWF0LCBkaW1lbnNpb24pKTsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIH5UZXh0dXJlSW1wbCgpOworCisgICAgV0dQVVRleHR1cmUgYmFj
a2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCitwcml2YXRlOgorICAgIFRleHR1
cmVJbXBsKFdHUFVUZXh0dXJlLCBUZXh0dXJlRm9ybWF0LCBUZXh0dXJlRGltZW5zaW9uKTsKKwor
ICAgIFRleHR1cmVJbXBsKGNvbnN0IFRleHR1cmVJbXBsJikgPSBkZWxldGU7CisgICAgVGV4dHVy
ZUltcGwoVGV4dHVyZUltcGwmJikgPSBkZWxldGU7CisgICAgVGV4dHVyZUltcGwmIG9wZXJhdG9y
PShjb25zdCBUZXh0dXJlSW1wbCYpID0gZGVsZXRlOworICAgIFRleHR1cmVJbXBsJiBvcGVyYXRv
cj0oVGV4dHVyZUltcGwmJikgPSBkZWxldGU7CisKKyAgICBSZWY8VGV4dHVyZVZpZXc+IGNyZWF0
ZVZpZXcoY29uc3Qgc3RkOjpvcHRpb25hbDxUZXh0dXJlVmlld0Rlc2NyaXB0b3I+JikgY29uc3Qg
ZmluYWw7CisKKyAgICB2b2lkIGRlc3Ryb3koKSBmaW5hbDsKKworICAgIHZvaWQgc2V0TGFiZWxJ
bnRlcm5hbChjb25zdCBTdHJpbmcmKSBmaW5hbDsKKworICAgIFdHUFVUZXh0dXJlIG1fYmFja2lu
ZyB7IG51bGxwdHIgfTsKKyAgICBUZXh0dXJlRm9ybWF0IG1fZm9ybWF0IHsgVGV4dHVyZUZvcm1h
dDo6UmdiYTh1bm9ybSB9OworICAgIFRleHR1cmVEaW1lbnNpb24gbV9kaW1lbnNpb24geyBUZXh0
dXJlRGltZW5zaW9uOjpfMmQgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFBBTAorfSAvLyBuYW1l
c3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNz
L1dlYkdQVS9JbXBsL1dlYkdQVVRleHR1cmVWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Q
QUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVRleHR1cmVWaWV3SW1wbC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uODk5OTAyODM3NWVmNTU0MTBjYzhhNDExODM2MmQ1ZDU2ZWZjMTA1MwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwv
V2ViR1BVVGV4dHVyZVZpZXdJbXBsLmNwcApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkdQVVRleHR1cmVWaWV3SW1wbC5oIgor
CisjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVUV4dC5oPgorCituYW1lc3BhY2UgUEFMIHsKK25hbWVz
cGFjZSBXZWJHUFUgeworCitUZXh0dXJlVmlld0ltcGw6OlRleHR1cmVWaWV3SW1wbChXR1BVVGV4
dHVyZVZpZXcgdGV4dHVyZVZpZXcpCisgICAgOiBtX2JhY2tpbmcodGV4dHVyZVZpZXcpCit7Cit9
CisKK1RleHR1cmVWaWV3SW1wbDo6flRleHR1cmVWaWV3SW1wbCgpCit7CisgICAgd2dwdVRleHR1
cmVWaWV3UmVsZWFzZShtX2JhY2tpbmcpOworfQorCit2b2lkIFRleHR1cmVWaWV3SW1wbDo6c2V0
TGFiZWxJbnRlcm5hbChjb25zdCBTdHJpbmcmIGxhYmVsKQoreworICAgIHdncHVUZXh0dXJlVmll
d1NldExhYmVsKG1fYmFja2luZywgbGFiZWwudXRmOCgpLmRhdGEoKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFBBTAorfSAvLyBuYW1lc3BhY2UgV2ViR1BVCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVVRleHR1cmVWaWV3SW1wbC5o
IGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVUZXh0
dXJlVmlld0ltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNTQ0N2YyNjcxZjBlMDZlMzRjM2NiYWRmMDM2NTBi
NWEyNjQ5Y2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFw
aGljcy9XZWJHUFUvSW1wbC9XZWJHUFVUZXh0dXJlVmlld0ltcGwuaApAQCAtMCwwICsxLDU5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJXZWJHUFVUZXh0dXJlVmll
dy5oIgorI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFUuaD4KKworbmFtZXNwYWNlIFBBTCB7CituYW1l
c3BhY2UgV2ViR1BVIHsKKworY2xhc3MgVGV4dHVyZVZpZXdJbXBsIGZpbmFsIDogcHVibGljIFRl
eHR1cmVWaWV3IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFRleHR1cmVWaWV3SW1wbD4gY3Jl
YXRlKFdHUFVUZXh0dXJlVmlldyB0ZXh0dXJlVmlldykKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFRleHR1cmVWaWV3SW1wbCh0ZXh0dXJlVmlldykpOworICAgIH0KKworICAg
IHZpcnR1YWwgflRleHR1cmVWaWV3SW1wbCgpOworCisgICAgV0dQVVRleHR1cmVWaWV3IGJhY2tp
bmcoKSBjb25zdCB7IHJldHVybiBtX2JhY2tpbmc7IH0KKworcHJpdmF0ZToKKyAgICBUZXh0dXJl
Vmlld0ltcGwoV0dQVVRleHR1cmVWaWV3KTsKKworICAgIFRleHR1cmVWaWV3SW1wbChjb25zdCBU
ZXh0dXJlVmlld0ltcGwmKSA9IGRlbGV0ZTsKKyAgICBUZXh0dXJlVmlld0ltcGwoVGV4dHVyZVZp
ZXdJbXBsJiYpID0gZGVsZXRlOworICAgIFRleHR1cmVWaWV3SW1wbCYgb3BlcmF0b3I9KGNvbnN0
IFRleHR1cmVWaWV3SW1wbCYpID0gZGVsZXRlOworICAgIFRleHR1cmVWaWV3SW1wbCYgb3BlcmF0
b3I9KFRleHR1cmVWaWV3SW1wbCYmKSA9IGRlbGV0ZTsKKworICAgIHZvaWQgc2V0TGFiZWxJbnRl
cm5hbChjb25zdCBTdHJpbmcmKSBmaW5hbDsKKworICAgIFdHUFVUZXh0dXJlVmlldyBtX2JhY2tp
bmcgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBQQUwKK30gLy8gbmFtZXNwYWNl
IFdlYkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IDk5ODEwZWI4MjAzY2NkYTZiNWM5ZTM4MTYxNGI2MmJlNmVmMmExY2MuLmM0
YjgwMGNlMzBkMjk0M2M1ZDg0Y2MyYjM3Mzc2OWY4NDQ4Mzk2MzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTYyMyw2ICs2MjMs
NyBAQAogCQkxQzBBQTE2RDIxOTQwREM4MDA4OTY4MjkgLyogU3R5bGVDb2xvclNjaGVtZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMwQUExNkEyMTk0
MERDNzAwODk2ODI5IC8qIFN0eWxlQ29sb3JTY2hlbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQzEyQUMyQjFFRTc3OEFFMDA3OUUwQTAgLyog
Rm9udEZhbWlseVNwZWNpZmljYXRpb25Db3JlVGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMxMkFDMjkxRUU3NzhBRTAwNzlFMEEwIC8qIEZvbnRG
YW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkxQzE4REE1OTE4MUFGNkE1MDBDNEVGMjIgLyogVGV4dFBh
aW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFD
MThEQTU3MTgxQUY2QTUwMEM0RUYyMiAvKiBUZXh0UGFpbnRlci5oICovOyB9OworCQkxQzE5RTZD
NTI3NDA2NkNDMDA0QjE3QjAgLyogV2ViR1BVLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMTlFNkMzMjc0MDY2Q0MwMDRCMTdCMCAv
KiBXZWJHUFUuZnJhbWV3b3JrICovOyB9OwogCQkxQzIxRTU3RDE4M0VEMUZGMDAxQzI4OUQgLyog
SU9TdXJmYWNlUG9vbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUMyMUU1N0IxODNFRDFGRjAwMUMyODlEIC8qIElPU3VyZmFjZVBvb2wuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQzI0RUVBNTFDNzI5
Q0U0MDA4MEY4RkMgLyogRm9udEZhY2VTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFDMjRFRUEzMUM3MjlDRTQwMDgwRjhGQyAvKiBGb250RmFjZVNl
dC5oICovOyB9OwogCQkxQzI0RUVBOTFDNzJBN0I0MDA4MEY4RkMgLyogSlNGb250RmFjZVNldC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMyNEVFQTcx
QzcyQTdCNDAwODBGOEZDIC8qIEpTRm9udEZhY2VTZXQuaCAqLzsgfTsKQEAgLTcwMzIsNiArNzAz
Myw3IEBACiAJCTFDMTJBQzJDMUVFNzc5OTUwMDc5RTBBMCAvKiBGb250RGVzY3JpcHRpb25Db2Nv
YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250RGVzY3JpcHRpb25Db2NvYS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDMThEQTU2MTgxQUY2QTUwMEM0RUYyMiAvKiBUZXh0
UGFpbnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0UGFp
bnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDMThEQTU3MTgxQUY2QTUw
MEM0RUYyMiAvKiBUZXh0UGFpbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUZXh0UGFpbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzE5RTZDMzI3
NDA2NkNDMDA0QjE3QjAgLyogV2ViR1BVLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gV2Vi
R1BVLmZyYW1ld29yazsgcGF0aCA9IFdlYkdQVS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBCVUlM
VF9QUk9EVUNUU19ESVI7IH07CiAJCTFDMjFFNTdBMTgzRUQxRkYwMDFDMjg5RCAvKiBJT1N1cmZh
Y2VQb29sLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElPU3VyZmFj
ZVBvb2wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzIxRTU3QjE4M0VEMUZG
MDAxQzI4OUQgLyogSU9TdXJmYWNlUG9vbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJT1N1cmZhY2VQb29sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDMjRF
RUExMUM3MjlCMzIwMDgwRjhGQyAvKiBGb250RmFjZVNldC5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gRm9udEZhY2VTZXQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc3
NjIsNiArMTc3NjQsNyBAQAogCQkJCTM3OTkxOUIyMTIwMERFNTAwMEVBMDQxQyAvKiBsaWJ6LmR5
bGliIGluIEZyYW1ld29ya3MgKi8sCiAJCQkJQTg4QUQ1MkYwOTUyNEI5MjAwMUREMTk2IC8qIFF1
YXJ0ekNvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCiAJCQkJNUZFMUQyOTIxNzhGRDFG
MzAwMUFBM0MzIC8qIFNlY3VyaXR5LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJCTFD
MTlFNkM1Mjc0MDY2Q0MwMDRCMTdCMCAvKiBXZWJHUFUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3Mg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CkBAIC0xODQxNSw2ICsxODQxOCw3IEBACiAJCQkJNTc0RjU1RTIyMDRGM0NCRjAwMjk0OEM2
IC8qIExvY2FsQXV0aGVudGljYXRpb24uZnJhbWV3b3JrICovLAogCQkJCUE4NUQ3QTJGMDg3OUVC
QTkwMDZBOTE3MiAvKiBRdWFydHpDb3JlLmZyYW1ld29yayAqLywKIAkJCQk1RkUxRDI5MTE3OEZE
MUYzMDAxQUEzQzMgLyogU2VjdXJpdHkuZnJhbWV3b3JrICovLAorCQkJCTFDMTlFNkMzMjc0MDY2
Q0MwMDRCMTdCMCAvKiBXZWJHUFUuZnJhbWV3b3JrICovLAogCQkJKTsKIAkJCW5hbWUgPSBGcmFt
ZXdvcmtzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
</data>
<flag name="review"
          id="469191"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
      

    </bug>

</bugzilla>