<?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>181951</bug_id>
          
          <creation_ts>2018-01-22 14:17:59 -0800</creation_ts>
          <short_desc>Begin removing QTKit code</short_desc>
          <delta_ts>2018-01-22 17:26:02 -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="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>jer.noble</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1391815</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-01-22 14:17:59 -0800</bug_when>
    <thetext>BBegin removing QTKit code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1391817</commentid>
    <comment_count>1</comment_count>
      <attachid>331964</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-01-22 14:22:56 -0800</bug_when>
    <thetext>Created attachment 331964
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1391901</commentid>
    <comment_count>2</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-01-22 17:26:00 -0800</bug_when>
    <thetext>https://trac.webkit.org/changeset/227372/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331964</attachid>
            <date>2018-01-22 14:22:56 -0800</date>
            <delta_ts>2018-01-22 15:04:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-181951-20180122142301.patch</filename>
            <type>text/plain</type>
            <size>99293</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMjczNjIpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE4LTAxLTIyICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQmVnaW4gcmVtb3ZpbmcgUVRLaXQg
Y29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgx
OTUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3
dGYvUGxhdGZvcm0uaDoKKwogMjAxOC0wMS0yMSAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVo
QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBuZXcgZmVhdHVyZSBmbGFnIGZvciBFWFRSQV9a
T09NX01PREUgYW5kIHJlaW50cm9kdWNlIEFkZGl0aW9uYWxGZWF0dXJlRGVmaW5lcy5oCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L1BsYXRmb3JtLmgJKHJldmlzaW9uIDIyNzM1NSkKKysrIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3Jt
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3MiwxMiArNTcyLDYgQEAKIAogI2lmIFBMQVRGT1JNKE1B
QykKIAotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDEyMDAKLSNkZWZp
bmUgVVNFX1FUS0lUIDEKLSNlbHNlCi0jZGVmaW5lIFVTRV9RVEtJVCAwCi0jZW5kaWYKLQogI2Rl
ZmluZSBVU0VfQVBQS0lUIDEKICNkZWZpbmUgSEFWRV9SVU5MT09QX1RJTUVSIDEKICNkZWZpbmUg
SEFWRV9TRUNfSURFTlRJVFkgMQpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI3MzU1KQorKysg
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAK
KzIwMTgtMDEtMjIgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4K
KworICAgICAgICBCZWdpbiByZW1vdmluZyBRVEtpdCBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODE5NTEKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBRVEtpdCB3YXMgYmVpbmcgdXNlZCBvbiBFbCBD
YXBpdGFuIGFuZCBiZWZvcmUuCisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9XZWJDb3JlLnhj
Y29uZmlnOgorICAgICAgICAqIFNvdXJjZXNNYWMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE1lZGlhRW5naW5lc1ZlY3Rvcik6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6c3VwcG9ydHNUeXBlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRL
aXQubW06IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhVGlt
ZVFUS2l0Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlh
VGltZVFUS2l0Lm1tOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyLm1tOgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyIHNldFZpZGVvRWxlbWVudDpdKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlciB1cGRhdGVQb3dlckFzc2VydGlvbnNdKToKKwogMjAxOC0wMS0yMiAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlZ2lz
dHJhdGlvbikgaGl0IGluIFNXU2VydmVyOjppbnN0YWxsQ29udGV4dERhdGEoY29uc3QgU2Vydmlj
ZVdvcmtlckNvbnRleHREYXRhJikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXNNYWMudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXNNYWMudHh0CShyZXZpc2lvbiAy
MjczNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzTWFjLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjksOCArNjksNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSWNvbk1hYy5tbQogcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0ludFBvaW50TWFjLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW50
UmVjdE1hYy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFNpemVNYWMubW0KLXBsYXRmb3Jt
L2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbSBAbm8tdW5pZnkKLXBsYXRm
b3JtL2dyYXBoaWNzL21hYy9NZWRpYVRpbWVRVEtpdC5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L1BERkRvY3VtZW50SW1hZ2VNYWMubW0KIAogcGxhdGZvcm0vbWFjL0JsYWNrbGlzdFVwZGF0ZXIu
bW0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NvbmZpZ3VyYXRpb25zL1dlYkNvcmUueGNjb25maWcK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ29uZmlndXJhdGlvbnMvV2ViQ29yZS54Y2Nv
bmZpZwkocmV2aXNpb24gMjI3MzU1KQorKysgU291cmNlL1dlYkNvcmUvQ29uZmlndXJhdGlvbnMv
V2ViQ29yZS54Y2NvbmZpZwkod29ya2luZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw3IEBAIEVYQ0xV
REVEX1NPVVJDRV9GSUxFX05BTUVTX0ZPUl9UT1VDSF9FVkUKIEVYQ0xVREVEX1NPVVJDRV9GSUxF
X05BTUVTX0ZPUl9HRVNUVVJFX0VWRU5UUyA9ICQoRVhDTFVERURfU09VUkNFX0ZJTEVfTkFNRVNf
Rk9SX0dFU1RVUkVfRVZFTlRTX0lGX0VOQUJMRURfJChFTkFCTEVfSU9TX0dFU1RVUkVfRVZFTlRT
KSQoRU5BQkxFX01BQ19HRVNUVVJFX0VWRU5UUykpOwogRVhDTFVERURfU09VUkNFX0ZJTEVfTkFN
RVNfRk9SX0dFU1RVUkVfRVZFTlRTX0lGX0VOQUJMRURfID0gSlNHZXN0dXJlKiBET01HZXN0dXJl
KjsKIAotRVhDTFVERURfU09VUkNFX0ZJTEVfTkFNRVNbc2RrPWlwaG9uZSpdID0gKi50aWZmICpD
dXJzb3IucG5nIEFjY2Vzc2liaWxpdHlPYmplY3RNYWMubW0gQVhPYmplY3RDYWNoZU1hYy5tbSBD
b2xvck1hYy5tbSBDdXJzb3IuY3BwIEN1cnNvck1hYy5tbSBEYXRhVHJhbnNmZXJNYWMubW0gRWRp
dG9yTWFjLm1tIEV2ZW50SGFuZGxlck1hYy5tbSBFdmVudExvb3BNYWMubW0gR2VvbG9jYXRpb25T
ZXJ2aWNlTWFjLm1tIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwIEljb25EYXRhYmFzZS5j
cHAgSWNvbk1hYy5tbSBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQubW0gTUlNRVR5cGVSZWdp
c3RyeU1hYy5tbSBNZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbSBOU1Njcm9sbGVySW1wRGV0YWls
cy5tbSBOZXR3b3JrU3RhdGVOb3RpZmllck1hYy5jcHAgUGFzdGVib2FyZE1hYy5tbSBQbGF0Zm9y
bUV2ZW50RmFjdG9yeU1hYy5tbSBQbGF0Zm9ybU1vdXNlRXZlbnRNYWMubW0gUGxhdGZvcm1QYXN0
ZWJvYXJkTWFjLm1tIFBsYXRmb3JtU2NyZWVuTWFjLm1tIFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6
ZXJNYWMubW0gUnVuTG9vcE1hYy5tbSBTU0xLZXlHZW5lcmF0b3JNYWMubW0gU2Nyb2xsVmlld01h
Yy5tbSBTY3JvbGxiYXJUaGVtZU1hYy5tbSBTaGFyZWRUaW1lck1hYy5tbSBTeXN0ZW1UaW1lTWFj
LmNwcCBUaGVtZU1hYy5tbSBUaHJlYWRDaGVjay5tbSBVc2VyQWdlbnRNYWMubW0gV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0gV2ViQ29udGVudFJlYWRlck1hYy5tbSBXZWJDb3Jl
Vmlldy5tIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0gV2ViVmlkZW9GdWxsc2NyZWVu
SFVEV2luZG93Q29udHJvbGxlci5tbSBXZWJXaW5kb3dBbmltYXRpb24ubW0gV2lkZ2V0TWFjLm1t
IERpc3BsYXlSZWZyZXNoTW9uaXRvck1hYy5jcHAgbnBhcGkuaCBucGZ1bmN0aW9ucy5oIG5wcnVu
dGltZS5oIG5wcnVudGltZV9pbnRlcm5hbC5oICQoRVhDTFVERURfU09VUkNFX0ZJTEVfTkFNRVNf
Rk9SX1RPVUNIX0VWRU5UUykgJChFWENMVURFRF9TT1VSQ0VfRklMRV9OQU1FU19GT1JfR0VTVFVS
RV9FVkVOVFMpOworRVhDTFVERURfU09VUkNFX0ZJTEVfTkFNRVNbc2RrPWlwaG9uZSpdID0gKi50
aWZmICpDdXJzb3IucG5nIEFjY2Vzc2liaWxpdHlPYmplY3RNYWMubW0gQVhPYmplY3RDYWNoZU1h
Yy5tbSBDb2xvck1hYy5tbSBDdXJzb3IuY3BwIEN1cnNvck1hYy5tbSBEYXRhVHJhbnNmZXJNYWMu
bW0gRWRpdG9yTWFjLm1tIEV2ZW50SGFuZGxlck1hYy5tbSBFdmVudExvb3BNYWMubW0gR2VvbG9j
YXRpb25TZXJ2aWNlTWFjLm1tIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwIEljb25EYXRh
YmFzZS5jcHAgSWNvbk1hYy5tbSBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQubW0gTUlNRVR5
cGVSZWdpc3RyeU1hYy5tbSBOU1Njcm9sbGVySW1wRGV0YWlscy5tbSBOZXR3b3JrU3RhdGVOb3Rp
Zmllck1hYy5jcHAgUGFzdGVib2FyZE1hYy5tbSBQbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5tbSBQ
bGF0Zm9ybU1vdXNlRXZlbnRNYWMubW0gUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tIFBsYXRmb3Jt
U2NyZWVuTWFjLm1tIFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJNYWMubW0gUnVuTG9vcE1hYy5t
bSBTU0xLZXlHZW5lcmF0b3JNYWMubW0gU2Nyb2xsVmlld01hYy5tbSBTY3JvbGxiYXJUaGVtZU1h
Yy5tbSBTaGFyZWRUaW1lck1hYy5tbSBTeXN0ZW1UaW1lTWFjLmNwcCBUaGVtZU1hYy5tbSBUaHJl
YWRDaGVjay5tbSBVc2VyQWdlbnRNYWMubW0gV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJN
YWMubW0gV2ViQ29udGVudFJlYWRlck1hYy5tbSBXZWJDb3JlVmlldy5tIFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXIubW0gV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5t
bSBXZWJXaW5kb3dBbmltYXRpb24ubW0gV2lkZ2V0TWFjLm1tIERpc3BsYXlSZWZyZXNoTW9uaXRv
ck1hYy5jcHAgbnBhcGkuaCBucGZ1bmN0aW9ucy5oIG5wcnVudGltZS5oIG5wcnVudGltZV9pbnRl
cm5hbC5oICQoRVhDTFVERURfU09VUkNFX0ZJTEVfTkFNRVNfRk9SX1RPVUNIX0VWRU5UUykgJChF
WENMVURFRF9TT1VSQ0VfRklMRV9OQU1FU19GT1JfR0VTVFVSRV9FVkVOVFMpOwogRVhDTFVERURf
U09VUkNFX0ZJTEVfTkFNRVNbc2RrPW1hY29zeCpdID0gKklPUy5oICpJT1MuY3BwICpJT1MubW0g
V0FLQXBwS2l0U3R1YnMuaCBXQUtDbGlwVmlldy5oIFdBS1Jlc3BvbmRlci5oIFdBS1Njcm9sbFZp
ZXcuaCBXQUtWaWV3LmggV0FLVmlld1ByaXZhdGUuaCBXQUtXaW5kb3cuaCBXS0NvbnRlbnRPYnNl
cnZhdGlvbi5oIFdLR3JhcGhpY3MuaCBXS1R5cGVzLmggV0tVdGlsaXRpZXMuaCBXS1ZpZXcuaCBX
S1ZpZXdQcml2YXRlLmggV2ViQ29yZVRocmVhZC5oIFdlYkNvcmVUaHJlYWRNZXNzYWdlLmggV2Vi
Q29yZVRocmVhZFJ1bi5oIFdlYkNvcmVUaHJlYWRTeXN0ZW1JbnRlcmZhY2UuaCAkKEVYQ0xVREVE
X1NPVVJDRV9GSUxFX05BTUVTX0ZPUl9UT1VDSF9FVkVOVFMpICQoRVhDTFVERURfU09VUkNFX0ZJ
TEVfTkFNRVNfRk9SX0dFU1RVUkVfRVZFTlRTKTsKIAogV0tfRU1QVFlfID0gWUVTOwpJbmRleDog
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMjI3MzU1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zODU3LDcgKzM4NTcsNiBAQAogCQlDRDU4
OTZFMjFDRDJCMTUxMDBCM0JDQzggLyogV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENTg5NkUwMUNEMkIx
NTEwMEIzQkNDOCAvKiBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNENUQyNzc4MUU4MzE4RTAwMEQ4
MEEzRCAvKiBXZWJDb3JlRGVjb21wcmVzc2lvblNlc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENUQyNzc2MUU4MzE4RTAwMEQ4MEEzRCAvKiBX
ZWJDb3JlRGVjb21wcmVzc2lvblNlc3Npb24uaCAqLzsgfTsKIAkJQ0Q1RTVCNUYxQTE1Q0U1NDAw
MEM2MDlFIC8qIFBhZ2VDb25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDRDVFNUI1RTFBMTVDRTU0MDAwQzYwOUUgLyogUGFnZUNvbmZp
Z3VyYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQlDRDYwQzBDNzE5M0U4N0M3MDAzQzY1NkIgLyogTWVkaWFUaW1lUVRLaXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENjBDMEM1MTkzRTg3Qzcw
MDNDNjU2QiAvKiBNZWRpYVRpbWVRVEtpdC5oICovOyB9OwogCQlDRDYxRkU2ODE3OTRBQURCMDA0
MTAxRUIgLyogTWVkaWFTb3VyY2VSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjFBOTQyRTIxNUI1Q0UyMjAwRDUyNUQxIC8qIE1lZGlhU291
cmNlUmVnaXN0cnkuaCAqLzsgfTsKIAkJQ0Q2MkZCOTYxQUYwMThFNzAwMTJFRDdEIC8qIEdlbmVy
aWNUYXNrUXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENENjJGQjk0MUFGMDE4RTcwMDEyRUQ3RCAvKiBHZW5lcmljVGFza1F1ZXVlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0Q2NDFFQjMxODE4
RjVFRDAwRUU0QzQxIC8qIE1lZGlhU291cmNlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q2NDFFQjExODE4RjVFRDAwRUU0QzQxIC8qIE1l
ZGlhU291cmNlUHJpdmF0ZS5oICovOyB9OwpAQCAtNDI2OCw3ICs0MjY3LDYgQEAKIAkJREU1Rjg2
MTIxRkEyMzlFNzAwNkRCNjNBIC8qIEpTR0NPYnNlcnZhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTcxNEVBRTFDRjY2NTRBMDA0NzIzQzQg
LyogSlNHQ09ic2VydmF0aW9uLmNwcCAqLzsgfTsKIAkJREU1Rjg2MUQxRkEyODE1QjAwNkRCNjNB
IC8qIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUE0NzhBN0UxNkNENzBDMzAwN0QxQkI0IC8q
IFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tICovOyB9OwogCQlERTVGODYxRTFG
QTI4MUZEMDA2REI2M0EgLyogV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlBODEyNDYwRkJC
OUNBOTAwNTEwMjkzIC8qIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbSAqLzsg
fTsKLQkJREU1Rjg2MjcxRkEyOEEwNTAwNkRCNjNBIC8qIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRCNDFF
MTEwQ0JGOTBFRjAwQUYyRUNFIC8qIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tICovOyB9Owog
CQlERTVGODYyQzFGQTI4RDhEMDA2REI2M0EgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEODIw
MzA3MTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyLm1tICov
OyB9OwogCQlERTVGODY1MDFGQTJBRjI0MDA2REI2M0EgLyogVW5pZmllZFNvdXJjZTUxLW1tLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREU1Rjg2MzYx
RkEyQUYwNDAwNkRCNjNBIC8qIFVuaWZpZWRTb3VyY2U1MS1tbS5tbSAqLzsgfTsKIAkJREU1Rjg2
NTExRkEyQUYyNDAwNkRCNjNBIC8qIFVuaWZpZWRTb3VyY2U1Mi1tbS5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERFNUY4NjM3MUZBMkFGMDUwMDZEQjYz
QSAvKiBVbmlmaWVkU291cmNlNTItbW0ubW0gKi87IH07CkBAIC00NTg4LDcgKzQ1ODYsNiBAQAog
CQlFNDQ2MTNCMDBDRDYzMzEwMDBGQURBNzUgLyogVGltZVJhbmdlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ0NjEzOUUwQ0Q2MzMxMDAwRkFEQTc1
IC8qIFRpbWVSYW5nZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlFNDQ2MTNCNjBDRDYzNDRFMDBGQURBNzUgLyogVm9pZENhbGxiYWNrLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDQ2MTNCNDBDRDYz
NDRFMDBGQURBNzUgLyogVm9pZENhbGxiYWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ0NjEzRTQwQ0Q2ODFBMjAwRkFEQTc1IC8qIE1lZGlh
UGxheWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
NEI0MUUwRDBDQkY5MEJEMDBBRjJFQ0UgLyogTWVkaWFQbGF5ZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlFNDQ2MTNFNjBDRDY4MUE5MDBGQURB
NzUgLyogTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QjQxRTEwMENCRjkwRUYwMEFGMkVDRSAvKiBNZWRpYVBs
YXllclByaXZhdGVRVEtpdC5oICovOyB9OwogCQlFNDQ2MTNFQzBDRDY4MUI1MDBGQURBNzUgLyog
UHJvZ3Jlc3NFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTRCNDFFMDIwQ0JGOEVBQTAwQUYyRUNFIC8qIFByb2dyZXNzRXZlbnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDQ2MTNFRTBDRDY4
MUJCMDBGQURBNzUgLyogSlNQcm9ncmVzc0V2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEI0MjM4NjBDQkZCNzNDMDBBRjJFQ0UgLyogSlNQcm9n
cmVzc0V2ZW50LmggKi87IH07CiAJCUU0NDYxNDE3MENENjgyNjkwMEZBREE3NSAvKiBKU0hUTUxW
aWRlb0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0NDYxNDBGMENENjgyNjkwMEZBREE3NSAvKiBKU0hUTUxWaWRlb0VsZW1lbnQuaCAqLzsg
fTsKQEAgLTEyOTUxLDggKzEyOTQ4LDYgQEAKIAkJQ0Q1RDI3NzYxRTgzMThFMDAwRDgwQTNEIC8q
IFdlYkNvcmVEZWNvbXByZXNzaW9uU2Vzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJDb3JlRGVjb21wcmVzc2lvblNlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQ0Q1RTVCNUUxQTE1Q0U1NDAwMEM2MDlFIC8qIFBhZ2VDb25maWd1cmF0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VDb25maWd1cmF0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNENUU1QjYwMUExNUYxNTYwMDBDNjA5RSAv
KiBQYWdlQ29uZmlndXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBQYWdlQ29uZmlndXJhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUNENjBDMEM0MTkzRTg3QzcwMDNDNjU2QiAvKiBNZWRpYVRpbWVRVEtpdC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE1lZGlhVGltZVFUS2l0Lm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlDRDYwQzBDNTE5M0U4N0M3MDAzQzY1NkIgLyogTWVkaWFU
aW1lUVRLaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFUaW1lUVRL
aXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q2MkZCOTQxQUYwMThFNzAwMTJF
RDdEIC8qIEdlbmVyaWNUYXNrUXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gR2VuZXJpY1Rhc2tRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDY0
MUVCMTE4MThGNUVEMDBFRTRDNDEgLyogTWVkaWFTb3VyY2VQcml2YXRlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhU291cmNlUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDRDY0MUVCMjE4MThGNUVEMDBFRTRDNDEgLyogU291cmNlQnVmZmVy
UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VCdWZmZXJQ
cml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDA5NSw4ICsxNDA5MCw2
IEBACiAJCUU0QjQxRTAzMENCRjhFQUEwMEFGMkVDRSAvKiBQcm9ncmVzc0V2ZW50LmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBQcm9ncmVzc0V2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTRCNDFFMEMwQ0JGOTBCRDAwQUYyRUNFIC8qIE1lZGlhUGxheWVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhUGxheWVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRCNDFFMEQwQ0JGOTBCRDAwQUYyRUNFIC8qIE1l
ZGlhUGxheWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUGxheWVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0QjQxRTEwMENCRjkwRUYwMEFGMkVD
RSAvKiBNZWRpYVBsYXllclByaXZhdGVRVEtpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNZWRpYVBsYXllclByaXZhdGVRVEtpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlFNEI0MUUxMTBDQkY5MEVGMDBBRjJFQ0UgLyogTWVkaWFQbGF5ZXJQcml2YXRlUVRL
aXQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBNZWRpYVBsYXll
clByaXZhdGVRVEtpdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRCNDFFMzMw
Q0JGQjYwOTAwQUYyRUNFIC8qIFJlbmRlclZpZGVvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJlbmRlclZpZGVvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTRCNDFFMzQwQ0JGQjYwOTAwQUYyRUNFIC8qIFJlbmRlclZpZGVvLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclZpZGVvLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUU0QjQyMzcxMENCRkI2RTAwMEFGMkVDRSAvKiBKU0hUTUxTb3VyY2VFbGVt
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTFNvdXJj
ZUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI5MjEsMTAgKzIy
OTE0LDYgQEAKIAkJCQlCMjc1MzU0RjBCMDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnRNYWMubW0g
Ki8sCiAJCQkJQjI3NTM1NTAwQjA1MzgxNDAwMkNFNjRGIC8qIEludFJlY3RNYWMubW0gKi8sCiAJ
CQkJQjI3NTM1NTEwQjA1MzgxNDAwMkNFNjRGIC8qIEludFNpemVNYWMubW0gKi8sCi0JCQkJRTRC
NDFFMTAwQ0JGOTBFRjAwQUYyRUNFIC8qIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmggKi8sCi0J
CQkJRTRCNDFFMTEwQ0JGOTBFRjAwQUYyRUNFIC8qIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1t
ICovLAotCQkJCUNENjBDMEM1MTkzRTg3QzcwMDNDNjU2QiAvKiBNZWRpYVRpbWVRVEtpdC5oICov
LAotCQkJCUNENjBDMEM0MTkzRTg3QzcwMDNDNjU2QiAvKiBNZWRpYVRpbWVRVEtpdC5tbSAqLywK
IAkJCQkyRDZFNDY4MjE3RDY2MEY1MDBFQ0Y4QkIgLyogUERGRG9jdW1lbnRJbWFnZU1hYy5tbSAq
LywKIAkJCQkxNjNFODhGNTExOEEzOUQyMDBFRDkyMzEgLyogU2ltcGxlRm9udERhdGFDb3JlVGV4
dC5jcHAgKi8sCiAJCQkJMEZDRjMzMkIwRjJCOUEyNTAwNEI2Nzk1IC8qIFdlYkxheWVyLmggKi8s
CkBAIC0yODY4OSw3ICsyODY3OCw2IEBACiAJCQkJREY5QUZENzIxM0ZDMzFEODAwMTVGRUI3IC8q
IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUNEQzhCNUEzMTgwNDYzNDcwMDE2RTY4NSAvKiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE1MDUyNEY0MUI3MTJGRjYwMDY5NkFBOSAv
KiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMuaCBpbiBIZWFkZXJzICovLAot
CQkJCUU0NDYxM0U2MENENjgxQTkwMEZBREE3NSAvKiBNZWRpYVBsYXllclByaXZhdGVRVEtpdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTJFMkNBRkMxOUZGMDIwNzAwMUVFQjRGIC8qIE1lZGlhUHJv
ZHVjZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTRFMTk1OTJBMEEzOURBQ0MwMDIyMEZFNSAvKiBN
ZWRpYVF1ZXJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NDkzQjZCRjFENzRCNDEyMDA4OEU3ODAg
LyogTWVkaWFRdWVyeUJsb2NrV2F0Y2hlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODczMCw3ICsy
ODcxOCw2IEBACiAJCQkJMDc4RTA5MTgxN0QxNEQxQzAwNDIwQUExIC8qIE1lZGlhU3RyZWFtVHJh
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCTA3OEUwOTE5MTdEMTREMUMwMDQyMEFBMSAvKiBNZWRp
YVN0cmVhbVRyYWNrRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3RkZERTY5MTgxQUVENDIw
MDcyRDQwOSAvKiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
Q0Q2MEMwQzcxOTNFODdDNzAwM0M2NTZCIC8qIE1lZGlhVGltZVFUS2l0LmggaW4gSGVhZGVycyAq
LywKIAkJCQk5MzJDQzBCNzFERkZEMTU4MDA0QzBGOUYgLyogTWVkaWFUcmFja0NvbnN0cmFpbnRz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwN0MxQzBFMjFCRkI2MDAxMDBCRDIyNTYgLyogTWVkaWFU
cmFja1N1cHBvcnRlZENvbnN0cmFpbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUUxQkFDMzFC
RDgwNjRFMDA1NUQ4MUYgLyogTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uaCBpbiBIZWFk
ZXJzICovLApAQCAtMzA3ODgsNyArMzA3NzUsNiBAQAogCQkJCURGOUFGRDczMTNGQzMxRDgwMDE1
RkVCNyAvKiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQ0RDOEI1QTIxODA0NjM0NzAwMTZFNjg1IC8qIE1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU291cmNlQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE1MDUyNEY1MUI3MTJGRjkw
MDY5NkFBOSAvKiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0gaW4gU291
cmNlcyAqLywKLQkJCQlERTVGODYyNzFGQTI4QTA1MDA2REI2M0EgLyogTWVkaWFQbGF5ZXJQcml2
YXRlUVRLaXQubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQjEyNEQ4RjFEMzgwQkI2MDBFQ0RGQjAg
LyogTWVkaWFTYW1wbGVBVkZPYmpDLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RCRUFFQUMxOUQ5
MkI2QzAwQkVCQTg4IC8qIE1lZGlhU2VsZWN0aW9uR3JvdXBBVkZPYmpDLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQzk2RjVFQzcxQjU4NzIyNjAwOTFFQTlEIC8qIE1lZGlhU2Vzc2lvbkludGVycnVw
dGlvblByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAkocmV2aXNpb24gMjI3MzU1KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NSw5ICs2NSw2IEBACiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKENPQ09B
KQotI2lmIFVTRShRVEtJVCkKLSNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVRVEtpdC5oIgot
I2VuZGlmCiAKICNpZiBVU0UoQVZGT1VOREFUSU9OKQogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakMuaCIKQEAgLTI0OSwxMSArMjQ2LDYgQEAgc3RhdGljIHZvaWQg
YnVpbGRNZWRpYUVuZ2luZXNWZWN0b3IoKQogICAgIH0KICNlbmRpZiAvLyBVU0UoQVZGT1VOREFU
SU9OKQogCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBVU0UoUVRLSVQpCi0gICAgaWYgKERlcHJlY2F0
ZWRHbG9iYWxTZXR0aW5nczo6aXNRVEtpdEVuYWJsZWQoKSkKLSAgICAgICAgTWVkaWFQbGF5ZXJQ
cml2YXRlUVRLaXQ6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoYWRkTWVkaWFFbmdpbmUpOwotI2VuZGlm
Ci0KICNpZiBkZWZpbmVkKFBsYXRmb3JtTWVkaWFFbmdpbmVDbGFzc05hbWUpCiAjaWYgVVNFKEdT
VFJFQU1FUikKICAgICBpZiAoRGVwcmVjYXRlZEdsb2JhbFNldHRpbmdzOjppc0dTdHJlYW1lckVu
YWJsZWQoKSkKQEAgLTkwOCw3ICs5MDAsNyBAQCBOYXRpdmVJbWFnZVB0ciBNZWRpYVBsYXllcjo6
bmF0aXZlSW1hZ2VGCiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50
VGltZSgpOwogfQogCi1NZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyOjpzdXBw
b3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYgcGFyYW1ldGVycywg
Y29uc3QgTWVkaWFQbGF5ZXJTdXBwb3J0c1R5cGVDbGllbnQqIGNsaWVudCkKK01lZGlhUGxheWVy
OjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXI6OnN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2lu
ZVN1cHBvcnRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBNZWRpYVBsYXllclN1cHBvcnRz
VHlwZUNsaWVudCopCiB7CiAgICAgLy8gNC44LjEwLjMgTUlNRSB0eXBlcyAtIFRoZSBjYW5QbGF5
VHlwZSh0eXBlKSBtZXRob2QgbXVzdCByZXR1cm4gdGhlIGVtcHR5IHN0cmluZyBpZiB0eXBlIGlz
IGEgdHlwZSB0aGF0IHRoZSAKICAgICAvLyB1c2VyIGFnZW50IGtub3dzIGl0IGNhbm5vdCByZW5k
ZXIgb3IgaXMgdGhlIHR5cGUgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIKQEAgLTkyMCwyMyAr
OTEyLDYgQEAgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllcjo6cwogICAgIGlm
ICghZW5naW5lKQogICAgICAgICByZXR1cm4gSXNOb3RTdXBwb3J0ZWQ7CiAKLSNpZiBQTEFURk9S
TShDT0NPQSkKLSAgICAvLyBZb3VUdWJlIHdpbGwgYXNrIGlmIHRoZSBIVE1MTWVkaWFFbGVtZW50
IGNhblBsYXlUeXBlIHZpZGVvL3dlYm0sIHRoZW4KLSAgICAvLyB2aWRlby94LWZsdiwgdGhlbiBm
aW5hbGx5IHZpZGVvL21wNCwgYW5kIHdpbGwgdGhlbiBsb2FkIGEgVVJMIG9mIHRoZSBmaXJzdCB0
eXBlCi0gICAgLy8gaW4gdGhhdCBsaXN0IHdoaWNoIHJldHVybnMgInByb2JhYmx5Ii4gV2hlbiBQ
ZXJpYW4gaXMgaW5zdGFsbGVkLAotICAgIC8vIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0IGNsYWlt
cyB0byBzdXBwb3J0IGJvdGggdmlkZW8vd2VibSBhbmQgdmlkZW8veC1mbHYsIGJ1dAotICAgIC8v
IGR1ZSB0byBhIGJ1ZyBpbiBQZXJpYW4sIGxvYWRpbmcgbWVkaWEgaW4gdGhlc2UgZm9ybWF0cyB3
aWxsIHNvbWV0aW1lcyBmYWlsIG9uCi0gICAgLy8gc2xvdyBjb25uZWN0aW9ucy4gPGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NjQwOT4KLSAgICBpZiAoY2xpZW50ICYm
IGNsaWVudC0+bWVkaWFQbGF5ZXJOZWVkc1NpdGVTcGVjaWZpY0hhY2tzKCkpIHsKLSAgICAgICAg
U3RyaW5nIGhvc3QgPSBjbGllbnQtPm1lZGlhUGxheWVyRG9jdW1lbnRIb3N0KCk7Ci0gICAgICAg
IGlmICgoaG9zdC5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCIueW91dHViZS5jb20iKSB8fCBl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShob3N0LCAieW91dHViZS5jb20iKSkKLSAgICAg
ICAgICAgICYmIChzdGFydHNXaXRoTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnRhaW5lclR5
cGUsICJ2aWRlby93ZWJtIikgfHwgc3RhcnRzV2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShj
b250YWluZXJUeXBlLCAidmlkZW8veC1mbHYiKSkpCi0gICAgICAgICAgICByZXR1cm4gSXNOb3RT
dXBwb3J0ZWQ7Ci0gICAgfQotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY2xpZW50KTsKLSNlbmRp
ZgotCiAgICAgcmV0dXJuIGVuZ2luZS0+c3VwcG9ydHNUeXBlQW5kQ29kZWNzKHBhcmFtZXRlcnMp
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQ
bGF5ZXJQcml2YXRlUVRLaXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaAkocmV2aXNpb24gMjI3MzU1
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJp
dmF0ZVFUS2l0LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMjUgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaWZuZGVmIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0X2gKLSNkZWZpbmUgTWVkaWFQbGF5ZXJQ
cml2YXRlUVRLaXRfaAotCi0jaWYgRU5BQkxFKFZJREVPKQotCi0jaW5jbHVkZSAiTWVkaWFQbGF5
ZXJQcml2YXRlLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIK
LSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLSNpZmRlZiBfX09CSkNfXwotI2ltcG9ydCA8
cGFsL3NwaS9tYWMvUVRLaXRTUEkuaD4KLSNlbHNlCi1jbGFzcyBRVFRpbWU7Ci0jZW5kaWYKLQot
T0JKQ19DTEFTUyBOU0RpY3Rpb25hcnk7Ci1PQkpDX0NMQVNTIE5TTXV0YWJsZURpY3Rpb25hcnk7
Ci1PQkpDX0NMQVNTIFFUTW92aWU7Ci1PQkpDX0NMQVNTIFFUTW92aWVMYXllcjsKLU9CSkNfQ0xB
U1MgUVRWaWRlb1JlbmRlcmVyV2ViS2l0T25seTsKLU9CSkNfQ0xBU1MgV2ViQ29yZU1vdmllT2Jz
ZXJ2ZXI7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLWNsYXNzIE1lZGlhUGxheWVyUHJp
dmF0ZVFUS2l0IDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSB7Ci1wdWJsaWM6
Ci0gICAgZXhwbGljaXQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQoTWVkaWFQbGF5ZXIqKTsKLSAg
ICB+TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
dm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyKTsKLQotICAgIHZv
aWQgcmVwYWludCgpOwotICAgIHZvaWQgbG9hZFN0YXRlQ2hhbmdlZCgpOwotICAgIHZvaWQgbG9h
ZGVkUmFuZ2VzQ2hhbmdlZCgpOwotICAgIHZvaWQgcmF0ZUNoYW5nZWQoKTsKLSAgICB2b2lkIHNp
emVDaGFuZ2VkKCk7Ci0gICAgdm9pZCB0aW1lQ2hhbmdlZCgpOwotICAgIHZvaWQgZGlkRW5kKCk7
Ci0gICAgdm9pZCBsYXllckhvc3RDaGFuZ2VkKFBsYXRmb3JtTGF5ZXIqIHJvb3RMYXllcik7Ci0K
LXByaXZhdGU6Ci0gICAgLy8gZW5naW5lIHN1cHBvcnQKLSAgICBzdGF0aWMgdm9pZCBnZXRTdXBw
b3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgdHlw
ZXMpOwotICAgIHN0YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZShj
b25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJik7Ci0KLSAgICBzdGF0aWMgSGFzaFNl
dDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+PiBvcmlnaW5zSW5NZWRpYUNhY2hlKGNvbnN0IFN0cmlu
ZyYpOwotICAgIHN0YXRpYyB2b2lkIGNsZWFyTWVkaWFDYWNoZShjb25zdCBTdHJpbmcmLCBXYWxs
VGltZSBtb2RpZmllZFNpbmNlKTsKLSAgICBzdGF0aWMgdm9pZCBjbGVhck1lZGlhQ2FjaGVGb3JP
cmlnaW5zKGNvbnN0IFN0cmluZyYsIGNvbnN0IEhhc2hTZXQ8UmVmUHRyPFNlY3VyaXR5T3JpZ2lu
Pj4mKTsKLSAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOwotCi0gICAgUGxhdGZvcm1NZWRp
YSBwbGF0Zm9ybU1lZGlhKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgUGxhdGZvcm1MYXllciogcGxh
dGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgRmxvYXRTaXplIG5hdHVyYWxTaXpl
KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIGJvb2wgaGFzQXVkaW8oKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIHN1cHBvcnRzRnVs
bHNjcmVlbigpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgc3VwcG9ydHNTY2FubmluZygpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICAKLSAgICB2b2lkIGxvYWQoY29uc3Qg
U3RyaW5nJiB1cmwpIG92ZXJyaWRlOwotI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCi0gICAgdm9p
ZCBsb2FkKGNvbnN0IFN0cmluZyYsIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCopIG92ZXJyaWRl
OwotI2VuZGlmCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICB2b2lkIGxvYWQoTWVkaWFT
dHJlYW1Qcml2YXRlJikgb3ZlcnJpZGUgeyB9Ci0jZW5kaWYKLSAgICB2b2lkIGNhbmNlbExvYWQo
KSBvdmVycmlkZTsKLSAgICB2b2lkIGxvYWRJbnRlcm5hbChjb25zdCBTdHJpbmcmIHVybCk7Ci0g
ICAgdm9pZCByZXN1bWVMb2FkKCk7Ci0gICAgCi0gICAgdm9pZCBwbGF5KCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBwYXVzZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgcHJlcGFyZVRvUGxheSgpIG92ZXJy
aWRlOwotICAgIAotICAgIGJvb2wgcGF1c2VkKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBz
ZWVraW5nKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgCi0gICAgTWVkaWFUaW1lIGR1cmF0aW9uTWVk
aWFUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgTWVkaWFUaW1lIGN1cnJlbnRNZWRpYVRpbWUo
KSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHNlZWsoY29uc3QgTWVkaWFUaW1lJikgb3ZlcnJp
ZGU7Ci0gICAgCi0gICAgdm9pZCBzZXRSYXRlKGZsb2F0KSBvdmVycmlkZTsKLSAgICBkb3VibGUg
cmF0ZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Vm9sdW1lKGZsb2F0KSBvdmVycmlk
ZTsKLSAgICB2b2lkIHNldFByZXNlcnZlc1BpdGNoKGJvb2wpIG92ZXJyaWRlOwotCi0gICAgYm9v
bCBoYXNDbG9zZWRDYXB0aW9ucygpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Q2xvc2Vk
Q2FwdGlvbnNWaXNpYmxlKGJvb2wpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzZXRQcmVsb2FkKE1l
ZGlhUGxheWVyOjpQcmVsb2FkKSBvdmVycmlkZTsKLQotICAgIE1lZGlhUGxheWVyOjpOZXR3b3Jr
U3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9uZXR3b3JrU3Rh
dGU7IH0KLSAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9yZWFkeVN0YXRlOyB9Ci0gICAgCi0gICAgc3RkOjp1bmlxdWVfcHRy
PFBsYXRmb3JtVGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBNZWRp
YVRpbWUgbWF4TWVkaWFUaW1lU2Vla2FibGUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGRp
ZExvYWRpbmdQcm9ncmVzcygpIGNvbnN0IG92ZXJyaWRlOwotICAgIHVuc2lnbmVkIGxvbmcgbG9u
ZyB0b3RhbEJ5dGVzKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgCi0gICAgdm9pZCBzZXRWaXNpYmxl
KGJvb2wpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJp
ZGU7Ci0gICAgCi0gICAgYm9vbCBoYXNBdmFpbGFibGVWaWRlb0ZyYW1lKCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0KLSAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYp
IG92ZXJyaWRlOwotICAgIHZvaWQgcGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwcmVwYXJlRm9y
UmVuZGVyaW5nKCkgb3ZlcnJpZGU7Ci0KLSAgICBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5k
ZXJpbmcoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIGFjY2VsZXJhdGVkUmVuZGVyaW5nU3Rh
dGVDaGFuZ2VkKCkgb3ZlcnJpZGU7Ci0KLSAgICBib29sIGhhc1NpbmdsZVNlY3VyaXR5T3JpZ2lu
KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgTWVkaWFQbGF5ZXI6Ok1vdmllTG9hZFR5cGUgbW92aWVM
b2FkVHlwZSgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgYm9vbCBjYW5TYXZlTWVkaWFEYXRhKCkg
Y29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGNyZWF0ZVFUTW92aWUoY29uc3QgU3RyaW5nJiB1
cmwpOwotICAgIHZvaWQgY3JlYXRlUVRNb3ZpZShOU1VSTCAqLCBOU0RpY3Rpb25hcnkgKm1vdmll
QXR0cmlidXRlcyk7Ci0KLSAgICBlbnVtIE1lZGlhUmVuZGVyaW5nTW9kZSB7IE1lZGlhUmVuZGVy
aW5nTm9uZSwgTWVkaWFSZW5kZXJpbmdTb2Z0d2FyZVJlbmRlcmVyLCBNZWRpYVJlbmRlcmluZ01v
dmllTGF5ZXIgfTsKLSAgICBNZWRpYVJlbmRlcmluZ01vZGUgY3VycmVudFJlbmRlcmluZ01vZGUo
KSBjb25zdDsKLSAgICBNZWRpYVJlbmRlcmluZ01vZGUgcHJlZmVycmVkUmVuZGVyaW5nTW9kZSgp
IGNvbnN0OwotICAgIAotICAgIHZvaWQgc2V0VXBWaWRlb1JlbmRlcmluZygpOwotICAgIHZvaWQg
dGVhckRvd25WaWRlb1JlbmRlcmluZygpOwotICAgIGJvb2wgaGFzU2V0VXBWaWRlb1JlbmRlcmlu
ZygpIGNvbnN0OwotICAgIAotICAgIGVudW0gUVRWaWRlb1JlbmRlcmVyTW9kZSB7IFFUVmlkZW9S
ZW5kZXJlck1vZGVEZWZhdWx0LCBRVFZpZGVvUmVuZGVyZXJNb2RlTGlzdGVuc0Zvck5ld0ltYWdl
cyB9OwotICAgIHZvaWQgY3JlYXRlUVRWaWRlb1JlbmRlcmVyKFFUVmlkZW9SZW5kZXJlck1vZGUg
cmVuZGVyZXJNb2RlKTsKLSAgICB2b2lkIGRlc3Ryb3lRVFZpZGVvUmVuZGVyZXIoKTsKLSAgICAK
LSAgICB2b2lkIGNyZWF0ZVFUTW92aWVMYXllcigpOwotICAgIHZvaWQgZGVzdHJveVFUTW92aWVM
YXllcigpOwotCi0gICAgdm9pZCB1cGRhdGVTdGF0ZXMoKTsKLSAgICB2b2lkIGRvU2VlaygpOwot
ICAgIHZvaWQgY2FuY2VsU2VlaygpOwotICAgIHZvaWQgc2Vla1RpbWVyRmlyZWQoKTsKLSAgICBN
ZWRpYVRpbWUgbWF4TWVkaWFUaW1lTG9hZGVkKCkgY29uc3Q7Ci0gICAgdm9pZCBkaXNhYmxlVW5z
dXBwb3J0ZWRUcmFja3MoKTsKLSAgICAKLSAgICB2b2lkIHNhd1Vuc3VwcG9ydGVkVHJhY2tzKCk7
Ci0gICAgdm9pZCBjYWNoZU1vdmllU2NhbGUoKTsKLSAgICBib29sIG1ldGFEYXRhQXZhaWxhYmxl
KCkgY29uc3QgeyByZXR1cm4gbV9xdE1vdmllICYmIG1fcmVhZHlTdGF0ZSA+PSBNZWRpYVBsYXll
cjo6SGF2ZU1ldGFkYXRhOyB9Ci0KLSAgICBib29sIGlzUmVhZHlGb3JWaWRlb1NldHVwKCkgY29u
c3Q7Ci0KLSAgICBkb3VibGUgbWF4aW11bUR1cmF0aW9uVG9DYWNoZU1lZGlhVGltZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIDU7IH0KLQotICAgIHZvaWQgc2V0UHJpdmF0ZUJyb3dzaW5nTW9k
ZShib29sKSBvdmVycmlkZTsKLSAgICAKLSAgICBOU011dGFibGVEaWN0aW9uYXJ5KiBjb21tb25N
b3ZpZUF0dHJpYnV0ZXMoKTsKLQotICAgIFN0cmluZyBlbmdpbmVEZXNjcmlwdGlvbigpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuICJRVEtpdCI7IH0KLSAgICBsb25nIHBsYXRmb3JtRXJyb3JDb2Rl
KCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VU
KQotICAgIGJvb2wgaXNDdXJyZW50UGxheWJhY2tUYXJnZXRXaXJlbGVzcygpIGNvbnN0IG92ZXJy
aWRlOwotICAgIHZvaWQgc2V0V2lyZWxlc3NQbGF5YmFja1RhcmdldChSZWY8TWVkaWFQbGF5YmFj
a1RhcmdldD4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTaG91bGRQbGF5VG9QbGF5YmFja1Rh
cmdldChib29sKSBvdmVycmlkZTsKLSAgICBib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2Fi
bGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSNlbmRpZgotCi0gICAgTWVk
aWFQbGF5ZXIqIG1fcGxheWVyOwotICAgIFJldGFpblB0cjxRVE1vdmllPiBtX3F0TW92aWU7Ci0g
ICAgUmV0YWluUHRyPFFUVmlkZW9SZW5kZXJlcldlYktpdE9ubHk+IG1fcXRWaWRlb1JlbmRlcmVy
OwotICAgIFJldGFpblB0cjxXZWJDb3JlTW92aWVPYnNlcnZlcj4gbV9vYmpjT2JzZXJ2ZXI7Ci0g
ICAgU3RyaW5nIG1fbW92aWVVUkw7Ci0gICAgTWVkaWFUaW1lIG1fc2Vla1RvOwotICAgIFRpbWVy
IG1fc2Vla1RpbWVyOwotICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbV9uZXR3b3JrU3Rh
dGU7Ci0gICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwotICAgIEludFJl
Y3QgbV9yZWN0OwotICAgIEZsb2F0U2l6ZSBtX3NjYWxlRmFjdG9yOwotICAgIHVuc2lnbmVkIG1f
ZW5hYmxlZFRyYWNrQ291bnQ7Ci0gICAgdW5zaWduZWQgbV90b3RhbFRyYWNrQ291bnQ7Ci0gICAg
TWVkaWFUaW1lIG1fcmVwb3J0ZWREdXJhdGlvbjsKLSAgICBNZWRpYVRpbWUgbV9jYWNoZWREdXJh
dGlvbjsKLSAgICBNZWRpYVRpbWUgbV90aW1lVG9SZXN0b3JlOwotICAgIFJldGFpblB0cjxRVE1v
dmllTGF5ZXI+IG1fcXRWaWRlb0xheWVyOwotICAgIE1lZGlhUGxheWVyOjpQcmVsb2FkIG1fcHJl
bG9hZDsKLSAgICBib29sIG1fc3RhcnRlZFBsYXlpbmc7Ci0gICAgYm9vbCBtX2lzU3RyZWFtaW5n
OwotICAgIGJvb2wgbV92aXNpYmxlOwotICAgIGJvb2wgbV9oYXNVbnN1cHBvcnRlZFRyYWNrczsK
LSAgICBib29sIG1fdmlkZW9GcmFtZUhhc0RyYXduOwotICAgIGJvb2wgbV9pc0FsbG93ZWRUb1Jl
bmRlcjsKLSAgICBib29sIG1fcHJpdmF0ZUJyb3dzaW5nOwotICAgIG11dGFibGUgTWVkaWFUaW1l
IG1fbWF4VGltZUxvYWRlZEF0TGFzdERpZExvYWRpbmdQcm9ncmVzczsKLSAgICBtdXRhYmxlIEZs
b2F0U2l6ZSBtX2NhY2hlZE5hdHVyYWxTaXplOwotI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFD
S19UQVJHRVQpCi0gICAgUmVmUHRyPE1lZGlhUGxheWJhY2tUYXJnZXQ+IG1fcGxheWJhY2tUYXJn
ZXQ7Ci0gICAgYm9vbCBtX3Nob3VsZFBsYXlUb1RhcmdldCB7IGZhbHNlIH07Ci0jZW5kaWYKLX07
Ci0KLX0KLQotI2VuZGlmCi0jZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5oCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtp
dC5tbQkocmV2aXNpb24gMjI3MzU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCShub25leGlzdGVudCkKQEAgLTEsMTcy
NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoVklERU8pICYmIFVTRShRVEtJ
VCkKLQotI2ltcG9ydCAiTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaCIKLQotI2ltcG9ydCAiRG9j
dW1lbnRMb2FkZXIuaCIKLSNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgotI2ltcG9ydCAiTG9n
Z2luZy5oIgotI2ltcG9ydCAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2ltcG9ydCAiTWVkaWFUaW1l
UVRLaXQuaCIKLSNpbXBvcnQgIlBsYXRmb3JtTGF5ZXIuaCIKLSNpbXBvcnQgIlBsYXRmb3JtVGlt
ZVJhbmdlcy5oIgotI2ltcG9ydCAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbXBvcnQgIlVSTC5oIgot
I2ltcG9ydCAiVVRJVXRpbGl0aWVzLmgiCi0jaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KLSNpbXBv
cnQgPHBhbC9zcGkvbWFjL1FUS2l0U1BJLmg+Ci0jaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0
aW9ucy5oPgotI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW1wb3J0IDx3dGYvU29m
dExpbmtpbmcuaD4KLQotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKLSNwcmFnbWEgY2xh
bmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgotCi1TT0ZU
X0xJTktfRlJBTUVXT1JLKFFUS2l0KQotCi1TT0ZUX0xJTksoUVRLaXQsIFFUTWFrZVRpbWUsIFFU
VGltZSwgKGxvbmcgbG9uZyB0aW1lVmFsdWUsIGxvbmcgdGltZVNjYWxlKSwgKHRpbWVWYWx1ZSwg
dGltZVNjYWxlKSkKLQotU09GVF9MSU5LX0NMQVNTKFFUS2l0LCBRVE1vdmllKQotU09GVF9MSU5L
X0NMQVNTKFFUS2l0LCBRVE1vdmllTGF5ZXIpCi1TT0ZUX0xJTktfQ0xBU1MoUVRLaXQsIFFUVXRp
bGl0aWVzKQotCi1TT0ZUX0xJTktfUE9JTlRFUihRVEtpdCwgUVRUcmFja01lZGlhVHlwZUF0dHJp
YnV0ZSwgTlNTdHJpbmcgKikKLVNPRlRfTElOS19QT0lOVEVSKFFUS2l0LCBRVE1lZGlhVHlwZUF0
dHJpYnV0ZSwgTlNTdHJpbmcgKikKLVNPRlRfTElOS19QT0lOVEVSKFFUS2l0LCBRVE1lZGlhVHlw
ZUJhc2UsIE5TU3RyaW5nICopCi1TT0ZUX0xJTktfUE9JTlRFUihRVEtpdCwgUVRNZWRpYVR5cGVN
UEVHLCBOU1N0cmluZyAqKQotU09GVF9MSU5LX1BPSU5URVIoUVRLaXQsIFFUTWVkaWFUeXBlU291
bmQsIE5TU3RyaW5nICopCi1TT0ZUX0xJTktfUE9JTlRFUihRVEtpdCwgUVRNZWRpYVR5cGVUZXh0
LCBOU1N0cmluZyAqKQotU09GVF9MSU5LX1BPSU5URVIoUVRLaXQsIFFUTWVkaWFUeXBlVmlkZW8s
IE5TU3RyaW5nICopCi1TT0ZUX0xJTktfUE9JTlRFUihRVEtpdCwgUVRNb3ZpZUFza1VucmVzb2x2
ZWREYXRhUmVmc0F0dHJpYnV0ZSwgTlNTdHJpbmcgKikKLVNPRlRfTElOS19QT0lOVEVSKFFUS2l0
LCBRVE1vdmllTG9vcHNBdHRyaWJ1dGUsIE5TU3RyaW5nICopCi1TT0ZUX0xJTktfUE9JTlRFUihR
VEtpdCwgUVRNb3ZpZURhdGFBdHRyaWJ1dGUsIE5TU3RyaW5nICopCi1TT0ZUX0xJTktfUE9JTlRF
UihRVEtpdCwgUVRNb3ZpZURhdGFTaXplQXR0cmlidXRlLCBOU1N0cmluZyAqKQotU09GVF9MSU5L
X1BPSU5URVIoUVRLaXQsIFFUTW92aWVEaWRFbmROb3RpZmljYXRpb24sIE5TU3RyaW5nICopCi1T
T0ZUX0xJTktfUE9JTlRFUihRVEtpdCwgUVRNb3ZpZUhhc1ZpZGVvQXR0cmlidXRlLCBOU1N0cmlu
ZyAqKQotU09GVF9MSU5LX1BPSU5URVIoUVRLaXQsIFFUTW92aWVIYXNBdWRpb0F0dHJpYnV0ZSwg
TlNTdHJpbmcgKikKLVNPRlRfTElOS19QT0lOVEVSKFFUS2l0LCBRVE1vdmllSXNBY3RpdmVBdHRy
aWJ1dGUsIE5TU3RyaW5nICopCi1TT0ZUX0xJTktfUE9JTlRFUihRVEtpdCwgUVRNb3ZpZUxvYWRT
dGF0ZUF0dHJpYnV0ZSwgTlNTdHJpbmcgKikKLVNPRlRfTElOS19QT0lOVEVSKFFUS2l0LCBRVE1v
dmllTG9hZFN0YXRlRXJyb3JBdHRyaWJ1dGUsIE5TU3RyaW5nICopCi1TT0ZUX0xJTktfUE9JTlRF
UihRVEtpdCwgUVRNb3ZpZUxvYWRTdGF0ZURpZENoYW5nZU5vdGlmaWNhdGlvbiwgTlNTdHJpbmcg
KikKLVNPRlRfTElOS19QT0lOVEVSKFFUS2l0LCBRVE1vdmllTG9hZGVkUmFuZ2VzRGlkQ2hhbmdl
Tm90aWZpY2F0aW9uLCBOU1N0cmluZyAqKTsKLVNPRlRfTElOS19QT0lOVEVSKFFUS2l0LCBRVE1v
dmllTmF0dXJhbFNpemVBdHRyaWJ1dGUsIE5TU3RyaW5nICopCi1TT0ZUX0xJTktfUE9JTlRFUihR
VEtpdCwgUVRNb3ZpZUN1cnJlbnRTaXplQXR0cmlidXRlLCBOU1N0cmluZyAqKQotU09GVF9MSU5L
X1BPSU5URVIoUVRLaXQsIFFUTW92aWVQcmV2ZW50RXh0ZXJuYWxVUkxMaW5rc0F0dHJpYnV0ZSwg
TlNTdHJpbmcgKikKLVNPRlRfTElOS19QT0lOVEVSKFFUS2l0LCBRVE1vdmllUmF0ZUNoYW5nZXNQ
cmVzZXJ2ZVBpdGNoQXR0cmlidXRlLCBOU1N0cmluZyAqKQotU09GVF9MSU5LX1BPSU5URVIoUVRL
aXQsIFFUTW92aWVSYXRlRGlkQ2hhbmdlTm90aWZpY2F0aW9uLCBOU1N0cmluZyAqKQotU09GVF9M
SU5LX1BPSU5URVIoUVRLaXQsIFFUTW92aWVTaXplRGlkQ2hhbmdlTm90aWZpY2F0aW9uLCBOU1N0
cmluZyAqKQotU09GVF9MSU5LX1BPSU5URVIoUVRLaXQsIFFUTW92aWVUaW1lRGlkQ2hhbmdlTm90
aWZpY2F0aW9uLCBOU1N0cmluZyAqKQotU09GVF9MSU5LX1BPSU5URVIoUVRLaXQsIFFUTW92aWVU
aW1lU2NhbGVBdHRyaWJ1dGUsIE5TU3RyaW5nICopCi1TT0ZUX0xJTktfUE9JTlRFUihRVEtpdCwg
UVRNb3ZpZVVSTEF0dHJpYnV0ZSwgTlNTdHJpbmcgKikKLVNPRlRfTElOS19QT0lOVEVSKFFUS2l0
LCBRVE1vdmllVm9sdW1lRGlkQ2hhbmdlTm90aWZpY2F0aW9uLCBOU1N0cmluZyAqKQotU09GVF9M
SU5LX1BPSU5URVIoUVRLaXQsIFFUU2VjdXJpdHlQb2xpY3lOb0Nyb3NzU2l0ZUF0dHJpYnV0ZSwg
TlNTdHJpbmcgKikKLVNPRlRfTElOS19QT0lOVEVSKFFUS2l0LCBRVFZpZGVvUmVuZGVyZXJXZWJL
aXRPbmx5TmV3SW1hZ2VBdmFpbGFibGVOb3RpZmljYXRpb24sIE5TU3RyaW5nICopCi1TT0ZUX0xJ
TktfUE9JTlRFUihRVEtpdCwgUVRNb3ZpZUFwZXJ0dXJlTW9kZUNsZWFuLCBOU1N0cmluZyAqKQot
U09GVF9MSU5LX1BPSU5URVIoUVRLaXQsIFFUTW92aWVBcGVydHVyZU1vZGVBdHRyaWJ1dGUsIE5T
U3RyaW5nICopCi0KLVNPRlRfTElOS19QT0lOVEVSX09QVElPTkFMKFFUS2l0LCBRVFNlY3VyaXR5
UG9saWN5Tm9Mb2NhbFRvUmVtb3RlU2l0ZUF0dHJpYnV0ZSwgTlNTdHJpbmcgKikKLVNPRlRfTElO
S19QT0lOVEVSX09QVElPTkFMKFFUS2l0LCBRVFNlY3VyaXR5UG9saWN5Tm9SZW1vdGVUb0xvY2Fs
U2l0ZUF0dHJpYnV0ZSwgTlNTdHJpbmcgKikKLQotQGludGVyZmFjZSBRVE1vdmllKFdlYktpdEV4
dHJhcykKLS0gKFFUVGltZSltYXhUaW1lTG9hZGVkOwotLSAoTlNBcnJheSAqKWF2YWlsYWJsZVJh
bmdlczsKLS0gKE5TQXJyYXkgKilsb2FkZWRSYW5nZXM7Ci1AZW5kCi0KLSNkZWZpbmUgUVRNb3Zp
ZUxheWVyIGdldFFUTW92aWVMYXllckNsYXNzKCkKLSNkZWZpbmUgUVRVdGlsaXRpZXMgZ2V0UVRV
dGlsaXRpZXNDbGFzcygpCi0KLSNkZWZpbmUgUVRUcmFja01lZGlhVHlwZUF0dHJpYnV0ZSBnZXRR
VFRyYWNrTWVkaWFUeXBlQXR0cmlidXRlKCkKLSNkZWZpbmUgUVRNZWRpYVR5cGVBdHRyaWJ1dGUg
Z2V0UVRNZWRpYVR5cGVBdHRyaWJ1dGUoKQotI2RlZmluZSBRVE1lZGlhVHlwZUJhc2UgZ2V0UVRN
ZWRpYVR5cGVCYXNlKCkKLSNkZWZpbmUgUVRNZWRpYVR5cGVNUEVHIGdldFFUTWVkaWFUeXBlTVBF
RygpCi0jZGVmaW5lIFFUTWVkaWFUeXBlU291bmQgZ2V0UVRNZWRpYVR5cGVTb3VuZCgpCi0jZGVm
aW5lIFFUTWVkaWFUeXBlVGV4dCBnZXRRVE1lZGlhVHlwZVRleHQoKQotI2RlZmluZSBRVE1lZGlh
VHlwZVZpZGVvIGdldFFUTWVkaWFUeXBlVmlkZW8oKQotI2RlZmluZSBRVE1vdmllQXNrVW5yZXNv
bHZlZERhdGFSZWZzQXR0cmlidXRlIGdldFFUTW92aWVBc2tVbnJlc29sdmVkRGF0YVJlZnNBdHRy
aWJ1dGUoKQotI2RlZmluZSBRVE1vdmllTG9vcHNBdHRyaWJ1dGUgZ2V0UVRNb3ZpZUxvb3BzQXR0
cmlidXRlKCkKLSNkZWZpbmUgUVRNb3ZpZURhdGFBdHRyaWJ1dGUgZ2V0UVRNb3ZpZURhdGFBdHRy
aWJ1dGUoKQotI2RlZmluZSBRVE1vdmllRGF0YVNpemVBdHRyaWJ1dGUgZ2V0UVRNb3ZpZURhdGFT
aXplQXR0cmlidXRlKCkKLSNkZWZpbmUgUVRNb3ZpZURpZEVuZE5vdGlmaWNhdGlvbiBnZXRRVE1v
dmllRGlkRW5kTm90aWZpY2F0aW9uKCkKLSNkZWZpbmUgUVRNb3ZpZUhhc1ZpZGVvQXR0cmlidXRl
IGdldFFUTW92aWVIYXNWaWRlb0F0dHJpYnV0ZSgpCi0jZGVmaW5lIFFUTW92aWVIYXNBdWRpb0F0
dHJpYnV0ZSBnZXRRVE1vdmllSGFzQXVkaW9BdHRyaWJ1dGUoKQotI2RlZmluZSBRVE1vdmllSXNB
Y3RpdmVBdHRyaWJ1dGUgZ2V0UVRNb3ZpZUlzQWN0aXZlQXR0cmlidXRlKCkKLSNkZWZpbmUgUVRN
b3ZpZUxvYWRTdGF0ZUF0dHJpYnV0ZSBnZXRRVE1vdmllTG9hZFN0YXRlQXR0cmlidXRlKCkKLSNk
ZWZpbmUgUVRNb3ZpZUxvYWRTdGF0ZUVycm9yQXR0cmlidXRlIGdldFFUTW92aWVMb2FkU3RhdGVF
cnJvckF0dHJpYnV0ZSgpCi0jZGVmaW5lIFFUTW92aWVMb2FkU3RhdGVEaWRDaGFuZ2VOb3RpZmlj
YXRpb24gZ2V0UVRNb3ZpZUxvYWRTdGF0ZURpZENoYW5nZU5vdGlmaWNhdGlvbigpCi0jZGVmaW5l
IFFUTW92aWVMb2FkZWRSYW5nZXNEaWRDaGFuZ2VOb3RpZmljYXRpb24gZ2V0UVRNb3ZpZUxvYWRl
ZFJhbmdlc0RpZENoYW5nZU5vdGlmaWNhdGlvbigpCi0jZGVmaW5lIFFUTW92aWVOYXR1cmFsU2l6
ZUF0dHJpYnV0ZSBnZXRRVE1vdmllTmF0dXJhbFNpemVBdHRyaWJ1dGUoKQotI2RlZmluZSBRVE1v
dmllQ3VycmVudFNpemVBdHRyaWJ1dGUgZ2V0UVRNb3ZpZUN1cnJlbnRTaXplQXR0cmlidXRlKCkK
LSNkZWZpbmUgUVRNb3ZpZVByZXZlbnRFeHRlcm5hbFVSTExpbmtzQXR0cmlidXRlIGdldFFUTW92
aWVQcmV2ZW50RXh0ZXJuYWxVUkxMaW5rc0F0dHJpYnV0ZSgpCi0jZGVmaW5lIFFUTW92aWVSYXRl
Q2hhbmdlc1ByZXNlcnZlUGl0Y2hBdHRyaWJ1dGUgZ2V0UVRNb3ZpZVJhdGVDaGFuZ2VzUHJlc2Vy
dmVQaXRjaEF0dHJpYnV0ZSgpCi0jZGVmaW5lIFFUTW92aWVSYXRlRGlkQ2hhbmdlTm90aWZpY2F0
aW9uIGdldFFUTW92aWVSYXRlRGlkQ2hhbmdlTm90aWZpY2F0aW9uKCkKLSNkZWZpbmUgUVRNb3Zp
ZVNpemVEaWRDaGFuZ2VOb3RpZmljYXRpb24gZ2V0UVRNb3ZpZVNpemVEaWRDaGFuZ2VOb3RpZmlj
YXRpb24oKQotI2RlZmluZSBRVE1vdmllVGltZURpZENoYW5nZU5vdGlmaWNhdGlvbiBnZXRRVE1v
dmllVGltZURpZENoYW5nZU5vdGlmaWNhdGlvbigpCi0jZGVmaW5lIFFUTW92aWVUaW1lU2NhbGVB
dHRyaWJ1dGUgZ2V0UVRNb3ZpZVRpbWVTY2FsZUF0dHJpYnV0ZSgpCi0jZGVmaW5lIFFUTW92aWVV
UkxBdHRyaWJ1dGUgZ2V0UVRNb3ZpZVVSTEF0dHJpYnV0ZSgpCi0jZGVmaW5lIFFUTW92aWVWb2x1
bWVEaWRDaGFuZ2VOb3RpZmljYXRpb24gZ2V0UVRNb3ZpZVZvbHVtZURpZENoYW5nZU5vdGlmaWNh
dGlvbigpCi0jZGVmaW5lIFFUU2VjdXJpdHlQb2xpY3lOb0Nyb3NzU2l0ZUF0dHJpYnV0ZSBnZXRR
VFNlY3VyaXR5UG9saWN5Tm9Dcm9zc1NpdGVBdHRyaWJ1dGUoKQotI2RlZmluZSBRVFNlY3VyaXR5
UG9saWN5Tm9Mb2NhbFRvUmVtb3RlU2l0ZUF0dHJpYnV0ZSBnZXRRVFNlY3VyaXR5UG9saWN5Tm9M
b2NhbFRvUmVtb3RlU2l0ZUF0dHJpYnV0ZSgpCi0jZGVmaW5lIFFUU2VjdXJpdHlQb2xpY3lOb1Jl
bW90ZVRvTG9jYWxTaXRlQXR0cmlidXRlIGdldFFUU2VjdXJpdHlQb2xpY3lOb1JlbW90ZVRvTG9j
YWxTaXRlQXR0cmlidXRlKCkKLSNkZWZpbmUgUVRWaWRlb1JlbmRlcmVyV2ViS2l0T25seU5ld0lt
YWdlQXZhaWxhYmxlTm90aWZpY2F0aW9uIGdldFFUVmlkZW9SZW5kZXJlcldlYktpdE9ubHlOZXdJ
bWFnZUF2YWlsYWJsZU5vdGlmaWNhdGlvbigpCi0jZGVmaW5lIFFUTW92aWVBcGVydHVyZU1vZGVD
bGVhbiBnZXRRVE1vdmllQXBlcnR1cmVNb2RlQ2xlYW4oKQotI2RlZmluZSBRVE1vdmllQXBlcnR1
cmVNb2RlQXR0cmlidXRlIGdldFFUTW92aWVBcGVydHVyZU1vZGVBdHRyaWJ1dGUoKQotCi0vLyBP
bGRlciB2ZXJzaW9ucyBvZiB0aGUgUVRLaXQgaGVhZGVyIGRvbid0IGhhdmUgdGhlc2UgY29uc3Rh
bnRzLgotI2lmICFkZWZpbmVkIFFUS0lUX1ZFUlNJT05fTUFYX0FMTE9XRUQgfHwgUVRLSVRfVkVS
U0lPTl9NQVhfQUxMT1dFRCA8PSBRVEtJVF9WRVJTSU9OXzdfMAotZW51bSB7Ci0gICAgUVRNb3Zp
ZUxvYWRTdGF0ZUVycm9yID0gLTFMLAotICAgIFFUTW92aWVMb2FkU3RhdGVMb2FkZWQgID0gMjAw
MEwsCi0gICAgUVRNb3ZpZUxvYWRTdGF0ZVBsYXlhYmxlID0gMTAwMDBMLAotICAgIFFUTW92aWVM
b2FkU3RhdGVQbGF5dGhyb3VnaE9LID0gMjAwMDBMLAotICAgIFFUTW92aWVMb2FkU3RhdGVDb21w
bGV0ZSA9IDEwMDAwMEwKLX07Ci0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0K
LUBpbnRlcmZhY2UgV2ViQ29yZU1vdmllT2JzZXJ2ZXIgOiBOU09iamVjdAotewotICAgIE1lZGlh
UGxheWVyUHJpdmF0ZVFUS2l0KiBtX2NhbGxiYWNrOwotICAgIEJPT0wgbV9kZWxheUNhbGxiYWNr
czsKLX0KLS0oaWQpaW5pdFdpdGhDYWxsYmFjazooTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQqKWNh
bGxiYWNrOwotLSh2b2lkKWRpc2Nvbm5lY3Q7Ci0tKHZvaWQpcmVwYWludDsKLS0odm9pZClzZXRE
ZWxheUNhbGxiYWNrczooQk9PTClzaG91bGREZWxheTsKLS0odm9pZClsb2FkU3RhdGVDaGFuZ2Vk
OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbjsKLS0gKHZvaWQpbG9hZGVkUmFuZ2VzQ2hh
bmdlZDooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb247Ci0tKHZvaWQpcmF0ZUNoYW5nZWQ6
KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uOwotLSh2b2lkKXNpemVDaGFuZ2VkOihOU05v
dGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbjsKLS0odm9pZCl0aW1lQ2hhbmdlZDooTlNOb3RpZmlj
YXRpb24gKilub3RpZmljYXRpb247Ci0tKHZvaWQpZGlkRW5kOihOU05vdGlmaWNhdGlvbiAqKW5v
dGlmaWNhdGlvbjsKLS0odm9pZClsYXllckhvc3RDaGFuZ2VkOihOU05vdGlmaWNhdGlvbiAqKW5v
dGlmaWNhdGlvbjsKLS0gKHZvaWQpbmV3SW1hZ2VBdmFpbGFibGU6KE5TTm90aWZpY2F0aW9uICop
bm90aWZpY2F0aW9uOwotQGVuZAotCi1AcHJvdG9jb2wgV2ViS2l0VmlkZW9SZW5kZXJpbmdEZXRh
aWxzCi0tKHZvaWQpc2V0TW92aWU6KGlkKW1vdmllOwotLSh2b2lkKWRyYXdJblJlY3Q6KE5TUmVj
dClyZWN0OwotQGVuZAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlUVRLaXQ6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIgcmVn
aXN0cmFyKQotewotICAgIGlmIChpc0F2YWlsYWJsZSgpKQotICAgICAgICByZWdpc3RyYXIoW10o
TWVkaWFQbGF5ZXIqIHBsYXllcikgeyByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxNZWRpYVBsYXll
clByaXZhdGVRVEtpdD4ocGxheWVyKTsgfSwgZ2V0U3VwcG9ydGVkVHlwZXMsCi0gICAgICAgICAg
ICBzdXBwb3J0c1R5cGUsIG9yaWdpbnNJbk1lZGlhQ2FjaGUsIGNsZWFyTWVkaWFDYWNoZSwgY2xl
YXJNZWRpYUNhY2hlRm9yT3JpZ2lucywgMCk7Ci19Ci0KLU1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0
OjpNZWRpYVBsYXllclByaXZhdGVRVEtpdChNZWRpYVBsYXllciogcGxheWVyKQotICAgIDogbV9w
bGF5ZXIocGxheWVyKQotICAgICwgbV9vYmpjT2JzZXJ2ZXIoYWRvcHROUyhbW1dlYkNvcmVNb3Zp
ZU9ic2VydmVyIGFsbG9jXSBpbml0V2l0aENhbGxiYWNrOnRoaXNdKSkKLSAgICAsIG1fc2Vla1Rv
KE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSkKLSAgICAsIG1fc2Vla1RpbWVyKCp0aGlzLCAmTWVk
aWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNlZWtUaW1lckZpcmVkKQotICAgICwgbV9uZXR3b3JrU3Rh
dGUoTWVkaWFQbGF5ZXI6OkVtcHR5KQotICAgICwgbV9yZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpI
YXZlTm90aGluZykKLSAgICAsIG1fcmVjdCgpCi0gICAgLCBtX3NjYWxlRmFjdG9yKDEsIDEpCi0g
ICAgLCBtX2VuYWJsZWRUcmFja0NvdW50KDApCi0gICAgLCBtX3RvdGFsVHJhY2tDb3VudCgwKQot
ICAgICwgbV9yZXBvcnRlZER1cmF0aW9uKE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSkKLSAgICAs
IG1fY2FjaGVkRHVyYXRpb24oTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpKQotICAgICwgbV90aW1l
VG9SZXN0b3JlKE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSkKLSAgICAsIG1fcHJlbG9hZChNZWRp
YVBsYXllcjo6QXV0bykKLSAgICAsIG1fc3RhcnRlZFBsYXlpbmcoZmFsc2UpCi0gICAgLCBtX2lz
U3RyZWFtaW5nKGZhbHNlKQotICAgICwgbV92aXNpYmxlKGZhbHNlKQotICAgICwgbV9oYXNVbnN1
cHBvcnRlZFRyYWNrcyhmYWxzZSkKLSAgICAsIG1fdmlkZW9GcmFtZUhhc0RyYXduKGZhbHNlKQot
ICAgICwgbV9pc0FsbG93ZWRUb1JlbmRlcihmYWxzZSkKLSAgICAsIG1fcHJpdmF0ZUJyb3dzaW5n
KGZhbHNlKQotewotfQotCi1NZWRpYVBsYXllclByaXZhdGVRVEtpdDo6fk1lZGlhUGxheWVyUHJp
dmF0ZVFUS2l0KCkKLXsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6
fk1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0KCVwKSIsIHRoaXMpOwotICAgIHRlYXJEb3duVmlkZW9S
ZW5kZXJpbmcoKTsKLQotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0g
cmVtb3ZlT2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCldOwotICAgIFttX29iamNPYnNlcnZl
ci5nZXQoKSBkaXNjb25uZWN0XTsKLX0KLQotTlNNdXRhYmxlRGljdGlvbmFyeSAqTWVkaWFQbGF5
ZXJQcml2YXRlUVRLaXQ6OmNvbW1vbk1vdmllQXR0cmlidXRlcygpIAotewotICAgIE5TTXV0YWJs
ZURpY3Rpb25hcnkgKm1vdmllQXR0cmlidXRlcyA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rp
b25hcnlXaXRoT2JqZWN0c0FuZEtleXM6Ci0gICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0
aEJvb2w6bV9wbGF5ZXItPnByZXNlcnZlc1BpdGNoKCldLCBRVE1vdmllUmF0ZUNoYW5nZXNQcmVz
ZXJ2ZVBpdGNoQXR0cmlidXRlLAotICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29s
OllFU10sIFFUTW92aWVQcmV2ZW50RXh0ZXJuYWxVUkxMaW5rc0F0dHJpYnV0ZSwKLSAgICAgICAg
ICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10sIFFUTW92aWVBc2tVbnJlc29sdmVkRGF0
YVJlZnNBdHRyaWJ1dGUsCi0gICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6Tk9d
LCBRVE1vdmllTG9vcHNBdHRyaWJ1dGUsCi0gICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0
aEJvb2w6IW1fcHJpdmF0ZUJyb3dzaW5nXSwgQCJRVE1vdmllQWxsb3dQZXJzaXN0ZW50Q2FjaGVB
dHRyaWJ1dGUiLAotICAgICAgICAgICAgUVRNb3ZpZUFwZXJ0dXJlTW9kZUNsZWFuLCBRVE1vdmll
QXBlcnR1cmVNb2RlQXR0cmlidXRlLAotICAgICAgICAgICAgbmlsXTsKLQotICAgIC8vIENoZWNr
IHRvIHNlZSBpZiBRVFNlY3VyaXR5UG9saWN5Tm9SZW1vdGVUb0xvY2FsU2l0ZUF0dHJpYnV0ZSBp
cyBkZWZpbmVkLCB3aGljaCB3YXMgYWRkZWQgaW4gUVRLaXQgNy42LjMuCi0gICAgLy8gSWYgbm90
LCBqdXN0IHNldCBOb0Nyb3NzU2l0ZSA9IFlFUywgd2hpY2ggZG9lcyB0aGUgc2FtZSB0aGluZyBh
cyBOb1JlbW90ZVRvTG9jYWwgPSBZRVMgYW5kIAotICAgIC8vIE5vTG9jYWxUb1JlbW90ZSA9IFlF
UyBpbiBRVEtpdCA8IDcuNi4zLgotICAgIGlmIChRVFNlY3VyaXR5UG9saWN5Tm9SZW1vdGVUb0xv
Y2FsU2l0ZUF0dHJpYnV0ZSkgewotICAgICAgICBbbW92aWVBdHRyaWJ1dGVzIHNldFZhbHVlOltO
U051bWJlciBudW1iZXJXaXRoQm9vbDpOT10gZm9yS2V5OlFUU2VjdXJpdHlQb2xpY3lOb0Nyb3Nz
U2l0ZUF0dHJpYnV0ZV07Ci0gICAgICAgIFttb3ZpZUF0dHJpYnV0ZXMgc2V0VmFsdWU6W05TTnVt
YmVyIG51bWJlcldpdGhCb29sOllFU10gZm9yS2V5OlFUU2VjdXJpdHlQb2xpY3lOb1JlbW90ZVRv
TG9jYWxTaXRlQXR0cmlidXRlXTsKLSAgICAgICAgW21vdmllQXR0cmlidXRlcyBzZXRWYWx1ZTpb
TlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSBmb3JLZXk6UVRTZWN1cml0eVBvbGljeU5vTG9j
YWxUb1JlbW90ZVNpdGVBdHRyaWJ1dGVdOwotICAgIH0gZWxzZQotICAgICAgICBbbW92aWVBdHRy
aWJ1dGVzIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdIGZvcktleTpRVFNl
Y3VyaXR5UG9saWN5Tm9Dcm9zc1NpdGVBdHRyaWJ1dGVdOwotCi0gICAgaWYgKG1fcHJlbG9hZCA8
IE1lZGlhUGxheWVyOjpBdXRvKQotICAgICAgICBbbW92aWVBdHRyaWJ1dGVzIHNldFZhbHVlOltO
U051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdIGZvcktleTpAIlFUTW92aWVMaW1pdFJlYWRBaGVh
ZEF0dHJpYnV0ZSJdOwotCi0gICAgcmV0dXJuIG1vdmllQXR0cmlidXRlczsKLX0KLQotdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVRVEtpdDo6Y3JlYXRlUVRNb3ZpZShjb25zdCBTdHJpbmcmIHVybCkK
LXsKLSAgICBVUkwga1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybCk7Ci0gICAgTlNVUkwgKmNvY29h
VVJMID0ga1VSTDsKLSAgICBOU011dGFibGVEaWN0aW9uYXJ5ICptb3ZpZUF0dHJpYnV0ZXMgPSBj
b21tb25Nb3ZpZUF0dHJpYnV0ZXMoKTsgICAgCi0gICAgW21vdmllQXR0cmlidXRlcyBzZXRWYWx1
ZTpjb2NvYVVSTCBmb3JLZXk6UVRNb3ZpZVVSTEF0dHJpYnV0ZV07Ci0KLSAgICBDRkRpY3Rpb25h
cnlSZWYgcHJveHlTZXR0aW5ncyA9IENGTmV0d29ya0NvcHlTeXN0ZW1Qcm94eVNldHRpbmdzKCk7
Ci0gICAgQ0ZBcnJheVJlZiBwcm94aWVzRm9yVVJMID0gQ0ZOZXR3b3JrQ29weVByb3hpZXNGb3JV
UkwoKENGVVJMUmVmKWNvY29hVVJMLCBwcm94eVNldHRpbmdzKTsKLSAgICBCT09MIHdpbGxVc2VQ
cm94eSA9IFlFUzsKLSAgICAKLSAgICBpZiAoIXByb3hpZXNGb3JVUkwgfHwgIUNGQXJyYXlHZXRD
b3VudChwcm94aWVzRm9yVVJMKSkKLSAgICAgICAgd2lsbFVzZVByb3h5ID0gTk87Ci0gICAgCi0g
ICAgaWYgKENGQXJyYXlHZXRDb3VudChwcm94aWVzRm9yVVJMKSA9PSAxKSB7Ci0gICAgICAgIENG
RGljdGlvbmFyeVJlZiBwcm94eSA9IChDRkRpY3Rpb25hcnlSZWYpQ0ZBcnJheUdldFZhbHVlQXRJ
bmRleChwcm94aWVzRm9yVVJMLCAwKTsKLSAgICAgICAgQVNTRVJUKENGR2V0VHlwZUlEKHByb3h5
KSA9PSBDRkRpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Ci0gICAgICAgIAotICAgICAgICBDRlN0cmlu
Z1JlZiBwcm94eVR5cGUgPSAoQ0ZTdHJpbmdSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJveHks
IGtDRlByb3h5VHlwZUtleSk7Ci0gICAgICAgIEFTU0VSVChDRkdldFR5cGVJRChwcm94eVR5cGUp
ID09IENGU3RyaW5nR2V0VHlwZUlEKCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKENGU3RyaW5n
Q29tcGFyZShwcm94eVR5cGUsIGtDRlByb3h5VHlwZU5vbmUsIDApID09IGtDRkNvbXBhcmVFcXVh
bFRvKQotICAgICAgICAgICAgd2lsbFVzZVByb3h5ID0gTk87Ci0gICAgfQotCi0gICAgaWYgKCF3
aWxsVXNlUHJveHkgJiYgIWtVUkwucHJvdG9jb2xJc0RhdGEoKSkgewotICAgICAgICAvLyBPbmx5
IHBhc3MgdGhlIFFUTW92aWVPcGVuRm9yUGxheWJhY2tBdHRyaWJ1dGUgZmxhZyBpZiB0aGVyZSBh
cmUgbm8gcHJveHkgc2VydmVycywgZHVlCi0gICAgICAgIC8vIHRvIHJkYXI6Ly9wcm9ibGVtLzc1
MzE3NzYsIG9yIGlmIG5vdCBsb2FkaW5nIGEgZGF0YTovLyB1cmwgZHVlIHRvIHJkYXI6Ly9wcm9i
bGVtLzgxMDM4MDEuCi0gICAgICAgIFttb3ZpZUF0dHJpYnV0ZXMgc2V0T2JqZWN0OltOU051bWJl
ciBudW1iZXJXaXRoQm9vbDpZRVNdIGZvcktleTpAIlFUTW92aWVPcGVuRm9yUGxheWJhY2tBdHRy
aWJ1dGUiXTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHByb3hpZXNGb3JVUkwpCi0gICAgICAgIENG
UmVsZWFzZShwcm94aWVzRm9yVVJMKTsKLSAgICBpZiAocHJveHlTZXR0aW5ncykKLSAgICAgICAg
Q0ZSZWxlYXNlKHByb3h5U2V0dGluZ3MpOwotCi0gICAgY3JlYXRlUVRNb3ZpZShjb2NvYVVSTCwg
bW92aWVBdHRyaWJ1dGVzKTsKLX0KLQotc3RhdGljIHZvaWQgZGlzYWJsZUNvbXBvbmVudHNPbmNl
KCkKLXsKLSAgICBzdGF0aWMgYm9vbCBzQ29tcG9uZW50c0Rpc2FibGVkID0gZmFsc2U7Ci0gICAg
aWYgKHNDb21wb25lbnRzRGlzYWJsZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBzQ29tcG9uZW50
c0Rpc2FibGVkID0gdHJ1ZTsKLQotICAgIC8vIGVhdC9QREYgYW5kIGdyaXAvUERGIGNvbXBvbmVu
dHMgbXVzdCBiZSBkaXNhYmxlZCB0d2ljZSBzaW5jZSB0aGV5IGFyZSByZWdpc3RlcmVkIHR3aWNl
Ci0gICAgLy8gd2l0aCBkaWZmZXJlbnQgZmxhZ3MuICBIb3dldmVyLCB0aGVyZSBpcyBjdXJyZW50
bHkgYSBidWcgaW4gNjQtYml0IFFUS2l0ICg8cmRhcjovL3Byb2JsZW0vODM3ODIzNz4pCi0gICAg
Ly8gd2hpY2ggY2F1c2VzIHN1YnNlcXVlbnQgZGlzYWJsZSBjb21wb25lbnQgcmVxdWVzdHMgb2Yg
ZXhhY3RseSB0aGUgc2FtZSB0eXBlIHRvIGJlIGlnbm9yZWQgaWYKLSAgICAvLyBRVEtpdFNlcnZl
ciBoYXMgbm90IHlldCBzdGFydGVkLiAgQXMgYSByZXN1bHQsIHdlIG11c3QgcGFzcyBpbiBleGFj
dGx5IHRoZSBmbGFncyB3ZSB3YW50IHRvCi0gICAgLy8gZGlzYWJsZSBwZXIgY29tcG9uZW50LiAg
QXMgYSBmYWlsc2FmZSwgaWYgaW4gdGhlIGZ1dHVyZSB0aGVzZSBmbGFncyBjaGFuZ2UsIHdlIHdp
bGwgZGlzYWJsZSB0aGUKLSAgICAvLyBQREYgY29tcG9uZW50cyBmb3IgYSB0aGlyZCB0aW1lIHdp
dGggYSB3aWxkY2FyZCBmbGFncyBmaWVsZDoKLSAgICBDb21wb25lbnREZXNjcmlwdGlvbiBjb21w
b25lbnRzVG9EaXNhYmxlWzExXSA9IHsKLSAgICAgICAgeydlYXQgJywgJ1RFWFQnLCAndGV4dCcs
IDAsIDB9LAotICAgICAgICB7J2VhdCAnLCAnVFhUICcsICd0ZXh0JywgMCwgMH0sICAgIAotICAg
ICAgICB7J2VhdCAnLCAndXR4dCcsICd0ZXh0JywgMCwgMH0sICAKLSAgICAgICAgeydlYXQgJywg
J1RFWFQnLCAndHgzZycsIDAsIDB9LCAgCi0gICAgICAgIHsnZWF0ICcsICdQREYgJywgJ3ZpZGUn
LCAweDQ0ODAyLCAwfSwKLSAgICAgICAgeydlYXQgJywgJ1BERiAnLCAndmlkZScsIDB4NDU4MDIs
IDB9LAotICAgICAgICB7J2VhdCAnLCAnUERGICcsICd2aWRlJywgMCwgMH0sICAKLSAgICAgICAg
eydncmlwJywgJ1BERiAnLCAnYXBwbCcsIDB4ODQ0YTAwLCAwfSwKLSAgICAgICAgeydncmlwJywg
J1BERiAnLCAnYXBwbCcsIDB4ODQ1YTAwLCAwfSwKLSAgICAgICAgeydncmlwJywgJ1BERiAnLCAn
YXBwbCcsIDAsIDB9LCAgCi0gICAgICAgIHsnaW1kYycsICdwZGYgJywgJ2FwcGwnLCAwLCAwfSwg
IAotICAgIH07Ci0KLSAgICBmb3IgKGF1dG8mIGNvbXBvbmVudCA6IGNvbXBvbmVudHNUb0Rpc2Fi
bGUpCi0gICAgICAgIFtnZXRRVE1vdmllQ2xhc3MoKSBkaXNhYmxlQ29tcG9uZW50OmNvbXBvbmVu
dF07Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmNyZWF0ZVFUTW92aWUoTlNV
UkwgKnVybCwgTlNEaWN0aW9uYXJ5ICptb3ZpZUF0dHJpYnV0ZXMpCi17Ci0gICAgTE9HKE1lZGlh
LCAiTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmNyZWF0ZVFUTW92aWUoJXApICIsIHRoaXMpOwot
ICAgIGRpc2FibGVDb21wb25lbnRzT25jZSgpOwotCi0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRl
ciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQoKV07Ci0g
ICAgCi0gICAgYm9vbCByZWNyZWF0aW5nID0gZmFsc2U7Ci0gICAgaWYgKG1fcXRNb3ZpZSkgewot
ICAgICAgICByZWNyZWF0aW5nID0gdHJ1ZTsKLSAgICAgICAgZGVzdHJveVFUVmlkZW9SZW5kZXJl
cigpOwotICAgICAgICBtX3F0TW92aWUgPSAwOwotICAgIH0KLSAgICAKLSAgICAvLyBEaXNhYmxl
IHJ0c3Agc3RyZWFtcyBmb3Igbm93LCA8cmRhcjovL3Byb2JsZW0vNTY5Mzk2Nz4KLSAgICBpZiAo
cHJvdG9jb2xJcyhbdXJsIHNjaGVtZV0sICJydHNwIikpCi0gICAgICAgIHJldHVybjsKLSAgICAK
LSAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKLSAgICBtX3F0TW92aWUgPSBhZG9wdE5TKFthbGxv
Y1FUTW92aWVJbnN0YW5jZSgpIGluaXRXaXRoQXR0cmlidXRlczptb3ZpZUF0dHJpYnV0ZXMgZXJy
b3I6JmVycm9yXSk7Ci0gICAgCi0gICAgaWYgKCFtX3F0TW92aWUpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBbbV9xdE1vdmllLmdldCgpIHNldFZvbHVtZTptX3BsYXllci0+dm9sdW1lKCld
OwotCi0gICAgaWYgKHJlY3JlYXRpbmcgJiYgaGFzVmlkZW8oKSkKLSAgICAgICAgY3JlYXRlUVRW
aWRlb1JlbmRlcmVyKFFUVmlkZW9SZW5kZXJlck1vZGVMaXN0ZW5zRm9yTmV3SW1hZ2VzKTsKLSAg
ICAKLSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVy
Om1fb2JqY09ic2VydmVyLmdldCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxlY3RvcjpAc2VsZWN0b3IobG9hZFN0YXRlQ2hhbmdlZDopIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6UVRNb3ZpZUxv
YWRTdGF0ZURpZENoYW5nZU5vdGlmaWNhdGlvbiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Om1fcXRNb3ZpZS5nZXQoKV07Ci0KLSAgICAvLyBJ
biB1cGRhdGVTdGF0ZSgpLCB3ZSB0cmFjayB3aGVuIG1heFRpbWVMb2FkZWQoKSA9PSBkdXJhdGlv
bigpLgotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2
ZXI6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGVjdG9yOkBzZWxlY3Rvcihsb2FkZWRSYW5nZXNDaGFuZ2VkOikKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOlFUTW92
aWVMb2FkZWRSYW5nZXNEaWRDaGFuZ2VOb3RpZmljYXRpb24KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Om1fcXRNb3ZpZS5nZXQoKV07Ci0KLSAg
ICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOm1fb2Jq
Y09ic2VydmVyLmdldCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxlY3RvcjpAc2VsZWN0b3IocmF0ZUNoYW5nZWQ6KSAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOlFUTW92aWVSYXRlRGlkQ2hhbmdl
Tm90aWZpY2F0aW9uIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvYmplY3Q6bV9xdE1vdmllLmdldCgpXTsKLSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVy
IGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOm1fb2JqY09ic2VydmVyLmdldCgpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcjpAc2VsZWN0b3Io
c2l6ZUNoYW5nZWQ6KSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuYW1lOlFUTW92aWVTaXplRGlkQ2hhbmdlTm90aWZpY2F0aW9uIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Q6bV9xdE1vdmllLmdl
dCgpXTsKLSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2Vy
dmVyOm1fb2JqY09ic2VydmVyLmdldCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxlY3RvcjpAc2VsZWN0b3IodGltZUNoYW5nZWQ6KSAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOlFUTW92aWVUaW1l
RGlkQ2hhbmdlTm90aWZpY2F0aW9uIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvYmplY3Q6bV9xdE1vdmllLmdldCgpXTsKLSAgICBbW05TTm90aWZpY2F0
aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOm1fb2JqY09ic2VydmVyLmdldCgp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcjpA
c2VsZWN0b3IoZGlkRW5kOikgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbmFtZTpRVE1vdmllRGlkRW5kTm90aWZpY2F0aW9uIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Q6bV9xdE1vdmllLmdldCgp
XTsKLX0KLQotc3RhdGljIENsYXNzIFFUVmlkZW9SZW5kZXJlckNsYXNzKCkKLXsKLSAgICAgc3Rh
dGljIENsYXNzIFFUVmlkZW9SZW5kZXJlcldlYktpdE9ubHlDbGFzcyA9IE5TQ2xhc3NGcm9tU3Ry
aW5nKEAiUVRWaWRlb1JlbmRlcmVyV2ViS2l0T25seSIpOwotICAgICByZXR1cm4gUVRWaWRlb1Jl
bmRlcmVyV2ViS2l0T25seUNsYXNzOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0
OjpjcmVhdGVRVFZpZGVvUmVuZGVyZXIoUVRWaWRlb1JlbmRlcmVyTW9kZSByZW5kZXJlck1vZGUp
Ci17Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmNyZWF0ZVFUVmlk
ZW9SZW5kZXJlciglcCkiLCB0aGlzKTsKLSAgICBkZXN0cm95UVRWaWRlb1JlbmRlcmVyKCk7Ci0K
LSAgICBtX3F0VmlkZW9SZW5kZXJlciA9IGFkb3B0TlMoW1tRVFZpZGVvUmVuZGVyZXJDbGFzcygp
IGFsbG9jXSBpbml0XSk7Ci0gICAgaWYgKCFtX3F0VmlkZW9SZW5kZXJlcikKLSAgICAgICAgcmV0
dXJuOwotICAgIAotICAgIC8vIGFzc29jaWF0ZSBvdXIgbW92aWUgd2l0aCBvdXIgaW5zdGFuY2Ug
b2YgUVRWaWRlb1JlbmRlcmVyV2ViS2l0T25seQotICAgIFsoaWQ8V2ViS2l0VmlkZW9SZW5kZXJp
bmdEZXRhaWxzPiltX3F0VmlkZW9SZW5kZXJlci5nZXQoKSBzZXRNb3ZpZTptX3F0TW92aWUuZ2V0
KCldOwotCi0gICAgaWYgKHJlbmRlcmVyTW9kZSA9PSBRVFZpZGVvUmVuZGVyZXJNb2RlTGlzdGVu
c0Zvck5ld0ltYWdlcykgewotICAgICAgICAvLyBsaXN0ZW4gdG8gUVRWaWRlb1JlbmRlcmVyV2Vi
S2l0T25seSdzIFFUVmlkZW9SZW5kZXJlcldlYktpdE9ubHlOZXdJbWFnZURpZEJlY29tZUF2YWls
YWJsZU5vdGlmaWNhdGlvbgotICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRD
ZW50ZXJdIGFkZE9ic2VydmVyOm1fb2JqY09ic2VydmVyLmdldCgpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3I6QHNlbGVjdG9yKG5ld0lt
YWdlQXZhaWxhYmxlOikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbmFtZTpRVFZpZGVvUmVuZGVyZXJXZWJLaXRPbmx5TmV3SW1hZ2VBdmFpbGFi
bGVOb3RpZmljYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9iamVjdDptX3F0VmlkZW9SZW5kZXJlci5nZXQoKV07Ci0gICAgfQotfQotCi12
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpkZXN0cm95UVRWaWRlb1JlbmRlcmVyKCkKLXsK
LSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6ZGVzdHJveVFUVmlkZW9S
ZW5kZXJlciglcCkiLCB0aGlzKTsKLSAgICBpZiAoIW1fcXRWaWRlb1JlbmRlcmVyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBzdG9wIG9ic2VydmluZyB0aGUgcmVuZGVyZXIncyBub3RpZmlj
YXRpb25zIGJlZm9yZSB3ZSB0b3NzIGl0Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZh
dWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQoKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6UVRWaWRlb1Jl
bmRlcmVyV2ViS2l0T25seU5ld0ltYWdlQXZhaWxhYmxlTm90aWZpY2F0aW9uCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdDptX3F0VmlkZW9S
ZW5kZXJlci5nZXQoKV07Ci0KLSAgICAvLyBkaXNhc3NvY2lhdGUgb3VyIG1vdmllIGZyb20gb3Vy
IGluc3RhbmNlIG9mIFFUVmlkZW9SZW5kZXJlcldlYktpdE9ubHkKLSAgICBbKGlkPFdlYktpdFZp
ZGVvUmVuZGVyaW5nRGV0YWlscz4pbV9xdFZpZGVvUmVuZGVyZXIuZ2V0KCkgc2V0TW92aWU6bmls
XTsgICAgCi0KLSAgICBtX3F0VmlkZW9SZW5kZXJlciA9IG5pbDsKLX0KLQotdm9pZCBNZWRpYVBs
YXllclByaXZhdGVRVEtpdDo6Y3JlYXRlUVRNb3ZpZUxheWVyKCkKLXsKLSAgICBMT0coTWVkaWEs
ICJNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6Y3JlYXRlUVRNb3ZpZUxheWVyKCVwKSIsIHRoaXMp
OwotICAgIGlmICghbV9xdE1vdmllKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoc3Vw
cG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpKTsKLSAgICAKLSAgICBpZiAoIW1fcXRWaWRlb0xh
eWVyKSB7Ci0gICAgICAgIG1fcXRWaWRlb0xheWVyID0gYWRvcHROUyhbYWxsb2NRVE1vdmllTGF5
ZXJJbnN0YW5jZSgpIGluaXRdKTsKLSAgICAgICAgaWYgKCFtX3F0VmlkZW9MYXllcikKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBbbV9xdFZpZGVvTGF5ZXIuZ2V0KCkgc2V0TW92aWU6
bV9xdE1vdmllLmdldCgpXTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIFsoQ0FMYXllciAqKW1f
cXRWaWRlb0xheWVyLmdldCgpIHNldE5hbWU6QCJWaWRlbyBsYXllciJdOwotI2VuZGlmCi0gICAg
ICAgIC8vIFRoZSBsYXllciB3aWxsIGdldCBob29rZWQgdXAgdmlhIFJlbmRlckxheWVyQmFja2lu
Zzo6dXBkYXRlQ29uZmlndXJhdGlvbigpLgotICAgIH0KLX0KLQotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVRVEtpdDo6ZGVzdHJveVFUTW92aWVMYXllcigpCi17Ci0gICAgTE9HKE1lZGlhLCAiTWVk
aWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmRlc3Ryb3lRVE1vdmllTGF5ZXIoJXApIiwgdGhpcyk7Ci0g
ICAgaWYgKCFtX3F0VmlkZW9MYXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gZGlzYXNz
b2NpYXRlIG91ciBtb3ZpZSBmcm9tIG91ciBpbnN0YW5jZSBvZiBRVE1vdmllTGF5ZXIKLSAgICBb
bV9xdFZpZGVvTGF5ZXIuZ2V0KCkgc2V0TW92aWU6bmlsXTsgICAgCi0gICAgbV9xdFZpZGVvTGF5
ZXIgPSBuaWw7Ci19Ci0KLU1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpNZWRpYVJlbmRlcmluZ01v
ZGUgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmN1cnJlbnRSZW5kZXJpbmdNb2RlKCkgY29uc3QK
LXsKLSAgICBpZiAobV9xdFZpZGVvTGF5ZXIpCi0gICAgICAgIHJldHVybiBNZWRpYVJlbmRlcmlu
Z01vdmllTGF5ZXI7Ci0KLSAgICBpZiAobV9xdFZpZGVvUmVuZGVyZXIpCi0gICAgICAgIHJldHVy
biBNZWRpYVJlbmRlcmluZ1NvZnR3YXJlUmVuZGVyZXI7Ci0gICAgCi0gICAgcmV0dXJuIE1lZGlh
UmVuZGVyaW5nTm9uZTsKLX0KLQotTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6Ok1lZGlhUmVuZGVy
aW5nTW9kZSBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6cHJlZmVycmVkUmVuZGVyaW5nTW9kZSgp
IGNvbnN0Ci17Ci0gICAgaWYgKCFtX3F0TW92aWUpCi0gICAgICAgIHJldHVybiBNZWRpYVJlbmRl
cmluZ05vbmU7Ci0KLSAgICBpZiAoc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpICYmIG1f
cGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXllclJlbmRlcmluZ0NhbkJlQWNjZWxlcmF0ZWQobV9w
bGF5ZXIpKQotICAgICAgICByZXR1cm4gTWVkaWFSZW5kZXJpbmdNb3ZpZUxheWVyOwotCi0gICAg
aWYgKCFRVFZpZGVvUmVuZGVyZXJDbGFzcygpKQotICAgICAgICByZXR1cm4gTWVkaWFSZW5kZXJp
bmdOb25lOwotICAgIAotICAgIHJldHVybiBNZWRpYVJlbmRlcmluZ1NvZnR3YXJlUmVuZGVyZXI7
Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNldFVwVmlkZW9SZW5kZXJpbmco
KQotewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzZXRVcFZpZGVv
UmVuZGVyaW5nKCVwKSIsIHRoaXMpOwotICAgIGlmICghaXNSZWFkeUZvclZpZGVvU2V0dXAoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgTWVkaWFSZW5kZXJpbmdNb2RlIGN1cnJlbnRNb2RlID0g
Y3VycmVudFJlbmRlcmluZ01vZGUoKTsKLSAgICBNZWRpYVJlbmRlcmluZ01vZGUgcHJlZmVycmVk
TW9kZSA9IHByZWZlcnJlZFJlbmRlcmluZ01vZGUoKTsKLSAgICBpZiAoY3VycmVudE1vZGUgPT0g
cHJlZmVycmVkTW9kZSAmJiBjdXJyZW50TW9kZSAhPSBNZWRpYVJlbmRlcmluZ05vbmUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChjdXJyZW50TW9kZSAhPSBNZWRpYVJlbmRlcmluZ05vbmUp
ICAKLSAgICAgICAgdGVhckRvd25WaWRlb1JlbmRlcmluZygpOwotCi0gICAgc3dpdGNoIChwcmVm
ZXJyZWRNb2RlKSB7Ci0gICAgY2FzZSBNZWRpYVJlbmRlcmluZ05vbmU6Ci0gICAgY2FzZSBNZWRp
YVJlbmRlcmluZ1NvZnR3YXJlUmVuZGVyZXI6Ci0gICAgICAgIGNyZWF0ZVFUVmlkZW9SZW5kZXJl
cihRVFZpZGVvUmVuZGVyZXJNb2RlTGlzdGVuc0Zvck5ld0ltYWdlcyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgTWVkaWFSZW5kZXJpbmdNb3ZpZUxheWVyOgotICAgICAgICBjcmVhdGVRVE1v
dmllTGF5ZXIoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgLy8gSWYgdXNpbmcgYSBt
b3ZpZSBsYXllciwgaW5mb3JtIHRoZSBjbGllbnQgc28gdGhlIGNvbXBvc2l0aW5nIHRyZWUgaXMg
dXBkYXRlZC4KLSAgICBpZiAoY3VycmVudE1vZGUgPT0gTWVkaWFSZW5kZXJpbmdNb3ZpZUxheWVy
IHx8IHByZWZlcnJlZE1vZGUgPT0gTWVkaWFSZW5kZXJpbmdNb3ZpZUxheWVyKQotICAgICAgICBt
X3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJSZW5kZXJpbmdNb2RlQ2hhbmdlZChtX3BsYXll
cik7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnRlYXJEb3duVmlkZW9SZW5k
ZXJpbmcoKQotewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojp0ZWFy
RG93blZpZGVvUmVuZGVyaW5nKCVwKSIsIHRoaXMpOwotICAgIGlmIChtX3F0VmlkZW9SZW5kZXJl
cikKLSAgICAgICAgZGVzdHJveVFUVmlkZW9SZW5kZXJlcigpOwotICAgIGlmIChtX3F0VmlkZW9M
YXllcikKLSAgICAgICAgZGVzdHJveVFUTW92aWVMYXllcigpOwotfQotCi1ib29sIE1lZGlhUGxh
eWVyUHJpdmF0ZVFUS2l0OjpoYXNTZXRVcFZpZGVvUmVuZGVyaW5nKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9xdFZpZGVvTGF5ZXIKLSAgICAgICAgfHwgbV9xdFZpZGVvUmVuZGVyZXI7Ci19Ci0K
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnJlc3VtZUxvYWQoKQotewotICAgIGlmICgh
bV9tb3ZpZVVSTC5pc051bGwoKSkKLSAgICAgICAgbG9hZEludGVybmFsKG1fbW92aWVVUkwpOwot
fQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojpsb2FkKGNvbnN0IFN0cmluZyYgdXJs
KQotewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojpsb2FkKCVwKSIs
IHRoaXMpOwotICAgIG1fbW92aWVVUkwgPSB1cmw7Ci0KLSAgICAvLyBJZiB0aGUgZWxlbWVudCBp
cyBub3Qgc3VwcG9zZWQgdG8gbG9hZCBhbnkgZGF0YSByZXR1cm4gaW1tZWRpYXRlbHkuCi0gICAg
aWYgKG1fcHJlbG9hZCA9PSBNZWRpYVBsYXllcjo6Tm9uZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbG9hZEludGVybmFsKHVybCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6
OmxvYWRJbnRlcm5hbChjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBpZiAobV9uZXR3b3JrU3Rh
dGUgIT0gTWVkaWFQbGF5ZXI6OkxvYWRpbmcpIHsKLSAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBN
ZWRpYVBsYXllcjo6TG9hZGluZzsKLSAgICAgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5n
ZWQoKTsKLSAgICB9Ci0gICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBNZWRpYVBsYXllcjo6SGF2ZU5v
dGhpbmcpIHsKLSAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5n
OwotICAgICAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKLSAgICB9Ci0gICAgY2Fu
Y2VsU2VlaygpOwotICAgIG1fdmlkZW9GcmFtZUhhc0RyYXduID0gZmFsc2U7Ci0gICAgCi0gICAg
W21fb2JqY09ic2VydmVyLmdldCgpIHNldERlbGF5Q2FsbGJhY2tzOllFU107Ci0KLSAgICBjcmVh
dGVRVE1vdmllKHVybCk7Ci0KLSAgICBbbV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgbG9hZFN0YXRlQ2hh
bmdlZDpuaWxdOwotICAgIFttX29iamNPYnNlcnZlci5nZXQoKSBzZXREZWxheUNhbGxiYWNrczpO
T107Ci19Ci0KLSNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQotdm9pZCBNZWRpYVBsYXllclByaXZh
dGVRVEtpdDo6bG9hZChjb25zdCBTdHJpbmcmLCBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqKQot
ewotICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkZvcm1hdEVycm9yOwotICAgIG1f
cGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7Ci19Ci0jZW5kaWYKLQotCi12b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZVFUS2l0OjpwcmVwYXJlVG9QbGF5KCkKLXsKLSAgICBMT0coTWVkaWEsICJN
ZWRpYVBsYXllclByaXZhdGVRVEtpdDo6cHJlcGFyZVRvUGxheSglcCkiLCB0aGlzKTsKLSAgICBz
ZXRQcmVsb2FkKE1lZGlhUGxheWVyOjpBdXRvKTsKLX0KLQotUGxhdGZvcm1NZWRpYSBNZWRpYVBs
YXllclByaXZhdGVRVEtpdDo6cGxhdGZvcm1NZWRpYSgpIGNvbnN0Ci17Ci0gICAgUGxhdGZvcm1N
ZWRpYSBwbTsKLSAgICBwbS50eXBlID0gUGxhdGZvcm1NZWRpYTo6UVRNb3ZpZVR5cGU7Ci0gICAg
cG0ubWVkaWEucXRNb3ZpZSA9IG1fcXRNb3ZpZS5nZXQoKTsKLSAgICByZXR1cm4gcG07Ci19Ci0K
LVBsYXRmb3JtTGF5ZXIqIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpwbGF0Zm9ybUxheWVyKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9xdFZpZGVvTGF5ZXIuZ2V0KCk7Ci19Ci0KLXZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnBsYXkoKQotewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxh
eWVyUHJpdmF0ZVFUS2l0OjpwbGF5KCVwKSIsIHRoaXMpOwotICAgIGlmICghbWV0YURhdGFBdmFp
bGFibGUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fc3RhcnRlZFBsYXlpbmcgPSB0cnVlOwot
ICAgIFttX29iamNPYnNlcnZlci5nZXQoKSBzZXREZWxheUNhbGxiYWNrczpZRVNdOwotICAgIFtt
X3F0TW92aWUuZ2V0KCkgc2V0UmF0ZTptX3BsYXllci0+cmF0ZSgpXTsKLSAgICBbbV9vYmpjT2Jz
ZXJ2ZXIuZ2V0KCkgc2V0RGVsYXlDYWxsYmFja3M6Tk9dOwotfQotCi12b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZVFUS2l0OjpwYXVzZSgpCi17Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2
YXRlUVRLaXQ6OnBhdXNlKCVwKSIsIHRoaXMpOwotICAgIGlmICghbWV0YURhdGFBdmFpbGFibGUo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fc3RhcnRlZFBsYXlpbmcgPSBmYWxzZTsKLSAgICBb
bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgc2V0RGVsYXlDYWxsYmFja3M6WUVTXTsKLSAgICBbbV9xdE1v
dmllLmdldCgpIHN0b3BdOwotICAgIFttX29iamNPYnNlcnZlci5nZXQoKSBzZXREZWxheUNhbGxi
YWNrczpOT107Ci19Ci0KLU1lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6ZHVyYXRp
b25NZWRpYVRpbWUoKSBjb25zdAotewotICAgIGlmICghbWV0YURhdGFBdmFpbGFibGUoKSkKLSAg
ICAgICAgcmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsKLQotICAgIGlmIChtX2NhY2hlZER1
cmF0aW9uLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIG1fY2FjaGVkRHVyYXRpb247Ci0KLSAg
ICBRVFRpbWUgdGltZSA9IFttX3F0TW92aWUuZ2V0KCkgZHVyYXRpb25dOwotICAgIGlmICh0aW1l
LmZsYWdzID09IGtRVFRpbWVJc0luZGVmaW5pdGUpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWU6
OnBvc2l0aXZlSW5maW5pdGVUaW1lKCk7Ci0gICAgcmV0dXJuIHRvTWVkaWFUaW1lKHRpbWUpOwot
fQotCi1NZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmN1cnJlbnRNZWRpYVRpbWUo
KSBjb25zdAotewotICAgIGlmICghbWV0YURhdGFBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJu
IE1lZGlhVGltZTo6emVyb1RpbWUoKTsKLSAgICBRVFRpbWUgdGltZSA9IFttX3F0TW92aWUuZ2V0
KCkgY3VycmVudFRpbWVdOwotICAgIHJldHVybiB0b01lZGlhVGltZSh0aW1lKTsKLX0KLQotdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c2Vlayhjb25zdCBNZWRpYVRpbWUmIGluVGltZSkK
LXsKLSAgICBNZWRpYVRpbWUgdGltZSA9IGluVGltZTsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBs
YXllclByaXZhdGVRVEtpdDo6c2VlayglcCkgLSB0aW1lICVzIiwgdGhpcywgdG9TdHJpbmcodGlt
ZSkudXRmOCgpLmRhdGEoKSk7Ci0gICAgLy8gTm90aGluZyB0byBkbyBpZiB3ZSBhcmUgYWxyZWFk
eSBpbiB0aGUgbWlkZGxlIG9mIGEgc2VlayB0byB0aGUgc2FtZSB0aW1lLgotICAgIGlmICh0aW1l
ID09IG1fc2Vla1RvKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjYW5jZWxTZWVrKCk7Ci0gICAg
Ci0gICAgaWYgKCFtZXRhRGF0YUF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0g
ICAgaWYgKHRpbWUgPiBkdXJhdGlvbk1lZGlhVGltZSgpKQotICAgICAgICB0aW1lID0gZHVyYXRp
b25NZWRpYVRpbWUoKTsKLQotICAgIG1fc2Vla1RvID0gdGltZTsKLSAgICBpZiAobWF4TWVkaWFU
aW1lU2Vla2FibGUoKSA+PSBtX3NlZWtUbykKLSAgICAgICAgZG9TZWVrKCk7Ci0gICAgZWxzZSAK
LSAgICAgICAgbV9zZWVrVGltZXIuc3RhcnQoMF9zLCA1MDBfbXMpOwotfQotCi12b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZVFUS2l0Ojpkb1NlZWsoKSAKLXsKLSAgICBRVFRpbWUgcXR0aW1lID0gdG9R
VFRpbWUobV9zZWVrVG8pOwotICAgIC8vIHNldEN1cnJlbnRUaW1lIGdlbmVyYXRlcyBzZXZlcmFs
IGV2ZW50IGNhbGxiYWNrcywgdXBkYXRlIGFmdGVyd2FyZHMKLSAgICBbbV9vYmpjT2JzZXJ2ZXIu
Z2V0KCkgc2V0RGVsYXlDYWxsYmFja3M6WUVTXTsKLSAgICBmbG9hdCBvbGRSYXRlID0gW21fcXRN
b3ZpZS5nZXQoKSByYXRlXTsKLQotICAgIGlmIChvbGRSYXRlKQotICAgICAgICBbbV9xdE1vdmll
LmdldCgpIHNldFJhdGU6MF07Ci0gICAgW21fcXRNb3ZpZS5nZXQoKSBzZXRDdXJyZW50VGltZTpx
dHRpbWVdOwotCi0gICAgLy8gcmVzdG9yZSBwbGF5YmFjayBvbmx5IGlmIG5vdCBhdCBlbmQsIG90
aGVyd2lzZSBRVE1vdmllIHdpbGwgbG9vcAotICAgIE1lZGlhVGltZSB0aW1lQWZ0ZXJTZWVrID0g
Y3VycmVudE1lZGlhVGltZSgpOwotICAgIGlmIChvbGRSYXRlICYmIHRpbWVBZnRlclNlZWsgPCBk
dXJhdGlvbk1lZGlhVGltZSgpKQotICAgICAgICBbbV9xdE1vdmllLmdldCgpIHNldFJhdGU6b2xk
UmF0ZV07Ci0KLSAgICBjYW5jZWxTZWVrKCk7Ci0gICAgW21fb2JqY09ic2VydmVyLmdldCgpIHNl
dERlbGF5Q2FsbGJhY2tzOk5PXTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6
Y2FuY2VsU2VlaygpCi17Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6
OmNhbmNlbFNlZWsoJXApIiwgdGhpcyk7Ci0gICAgbV9zZWVrVG8gPSBNZWRpYVRpbWU6OmludmFs
aWRUaW1lKCk7Ci0gICAgbV9zZWVrVGltZXIuc3RvcCgpOwotfQotCi12b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZVFUS2l0OjpzZWVrVGltZXJGaXJlZCgpCi17ICAgICAgICAKLSAgICBpZiAoIW1ldGFE
YXRhQXZhaWxhYmxlKCkgfHwgIXNlZWtpbmcoKSB8fCBjdXJyZW50TWVkaWFUaW1lKCkgPT0gbV9z
ZWVrVG8pIHsKLSAgICAgICAgY2FuY2VsU2VlaygpOwotICAgICAgICB1cGRhdGVTdGF0ZXMoKTsK
LSAgICAgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7IAotICAgICAgICByZXR1cm47Ci0gICAg
fSAKLQotICAgIGlmIChtYXhNZWRpYVRpbWVTZWVrYWJsZSgpID49IG1fc2Vla1RvKQotICAgICAg
ICBkb1NlZWsoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0
ZSBzdGF0ZSA9IG5ldHdvcmtTdGF0ZSgpOwotICAgICAgICBpZiAoc3RhdGUgPT0gTWVkaWFQbGF5
ZXI6OkVtcHR5IHx8IHN0YXRlID09IE1lZGlhUGxheWVyOjpMb2FkZWQpIHsKLSAgICAgICAgICAg
IGNhbmNlbFNlZWsoKTsKLSAgICAgICAgICAgIHVwZGF0ZVN0YXRlcygpOwotICAgICAgICAgICAg
bV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgTWVk
aWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnBhdXNlZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtZXRhRGF0
YUF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gW21fcXRNb3Zp
ZS5nZXQoKSByYXRlXSA9PSAwOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojpz
ZWVraW5nKCkgY29uc3QKLXsKLSAgICBpZiAoIW1ldGFEYXRhQXZhaWxhYmxlKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV9zZWVrVG8uaXNWYWxpZCgpICYmIG1fc2Vla1Rv
ID49IE1lZGlhVGltZTo6emVyb1RpbWUoKTsKLX0KLQotRmxvYXRTaXplIE1lZGlhUGxheWVyUHJp
dmF0ZVFUS2l0OjpuYXR1cmFsU2l6ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtZXRhRGF0YUF2YWls
YWJsZSgpKQotICAgICAgICByZXR1cm4gRmxvYXRTaXplKCk7Ci0KLSAgICAvLyBJbiBzcGl0ZSBv
ZiB0aGUgbmFtZSBvZiB0aGlzIG1ldGhvZCwgcmV0dXJuIFFUTW92aWVOYXR1cmFsU2l6ZUF0dHJp
YnV0ZSB0cmFuc2Zvcm1lZCBieSB0aGUgCi0gICAgLy8gaW5pdGlhbCBtb3ZpZSBzY2FsZSBiZWNh
dXNlIHRoZSBzcGVjIHNheXMgaW50cmluc2ljIHNpemUgaXM6Ci0gICAgLy8KLSAgICAvLyAgICAu
Li4gdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHJlc291cmNlIGluIENTUyBwaXhlbHMgYWZ0ZXIgdGFr
aW5nIGludG8gYWNjb3VudCB0aGUgcmVzb3VyY2UncyAKLSAgICAvLyAgICBkaW1lbnNpb25zLCBh
c3BlY3QgcmF0aW8sIGNsZWFuIGFwZXJ0dXJlLCByZXNvbHV0aW9uLCBhbmQgc28gZm9ydGgsIGFz
IGRlZmluZWQgZm9yIHRoZSAKLSAgICAvLyAgICBmb3JtYXQgdXNlZCBieSB0aGUgcmVzb3VyY2UK
LSAgICAKLSAgICBGbG9hdFNpemUgbmF0dXJhbFNpemUoW1ttX3F0TW92aWUuZ2V0KCkgYXR0cmli
dXRlRm9yS2V5OlFUTW92aWVOYXR1cmFsU2l6ZUF0dHJpYnV0ZV0gc2l6ZVZhbHVlXSk7Ci0gICAg
aWYgKG5hdHVyYWxTaXplLmlzRW1wdHkoKSAmJiBtX2lzU3RyZWFtaW5nKSB7Ci0gICAgICAgIC8v
IEhUVFAgTGl2ZSBTdHJlYW1zIHdpbGwgb2NjYXNpb25hbGx5IHJldHVybiB7MCwwfSBuYXR1cmFs
IHNpemVzIHdoaWxlIHNjcnViYmluZy4KLSAgICAgICAgLy8gV29yayBhcm91bmQgdGhpcyBwcm9i
bGVtICg8cmRhcjovL3Byb2JsZW0vOTA3ODU2Mz4pIGJ5IHJldHVybmluZyB0aGUgbGFzdCB2YWxp
ZCAKLSAgICAgICAgLy8gY2FjaGVkIG5hdHVyYWwgc2l6ZToKLSAgICAgICAgbmF0dXJhbFNpemUg
PSBtX2NhY2hlZE5hdHVyYWxTaXplOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFVuZm9ydHVu
YXRlbHksIGR1ZSB0byBhbm90aGVyIFFUS2l0IGJ1ZyAoPHJkYXI6Ly9wcm9ibGVtLzkwODIwNzE+
KSB3ZSB3b24ndCBnZXQgYSBzaXplQ2hhbmdlZAotICAgICAgICAvLyBldmVudCB3aGVuIHRoaXMg
aGFwcGVucywgc28gd2UgbXVzdCBjYWNoZSB0aGUgbGFzdCB2YWxpZCBuYXR1cmFsU2l6ZSBoZXJl
OgotICAgICAgICBtX2NhY2hlZE5hdHVyYWxTaXplID0gbmF0dXJhbFNpemU7Ci0gICAgfQotICAg
IAotICAgIG5hdHVyYWxTaXplLnNjYWxlKG1fc2NhbGVGYWN0b3Iud2lkdGgoKSwgbV9zY2FsZUZh
Y3Rvci5oZWlnaHQoKSk7Ci0gICAgcmV0dXJuIG5hdHVyYWxTaXplOwotfQotCi1ib29sIE1lZGlh
UGxheWVyUHJpdmF0ZVFUS2l0OjpoYXNWaWRlbygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtZXRhRGF0
YUF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIFtbbV9xdE1v
dmllLmdldCgpIGF0dHJpYnV0ZUZvcktleTpRVE1vdmllSGFzVmlkZW9BdHRyaWJ1dGVdIGJvb2xW
YWx1ZV07Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6Omhhc0F1ZGlvKCkgY29u
c3QKLXsKLSAgICBpZiAoIW1fcXRNb3ZpZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJl
dHVybiBbW21fcXRNb3ZpZS5nZXQoKSBhdHRyaWJ1dGVGb3JLZXk6UVRNb3ZpZUhhc0F1ZGlvQXR0
cmlidXRlXSBib29sVmFsdWVdOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojpz
dXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQotewotICAg
IExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzZXRWb2x1bWUoJXApIC0gdm9s
dW1lICVmIiwgdGhpcywgdm9sdW1lKTsKLSAgICBpZiAobV9xdE1vdmllKQotICAgICAgICBbbV9x
dE1vdmllLmdldCgpIHNldFZvbHVtZTp2b2x1bWVdOyAgCi19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQ
cml2YXRlUVRLaXQ6Omhhc0Nsb3NlZENhcHRpb25zKCkgY29uc3QKLXsKLSAgICBpZiAoIW1ldGFE
YXRhQXZhaWxhYmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gW1ttX3F0
TW92aWUgYWx0ZXJuYXRlR3JvdXBUeXBlc10gY29udGFpbnNPYmplY3Q6QCJjbGNwIl07Ci19Ci0K
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNldENsb3NlZENhcHRpb25zVmlzaWJsZShi
b29sIGNsb3NlZENhcHRpb25zVmlzaWJsZSkKLXsKLSAgICBpZiAoIW1ldGFEYXRhQXZhaWxhYmxl
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghW1ttX3F0TW92aWUgYWx0ZXJuYXRlR3Jv
dXBUeXBlc10gY29udGFpbnNPYmplY3Q6QCJjbGNwIl0pCi0gICAgICAgIHJldHVybjsKLQotICAg
IE5TQXJyYXkgKnRyYWNrQWx0ZXJuYXRlc0FycmF5ID0gW21fcXRNb3ZpZSBhbHRlcm5hdGVzRm9y
TWVkaWFUeXBlOkAiY2xjcCJdOwotICAgIFFUVHJhY2sgKnRyYWNrID0gdHJhY2tBbHRlcm5hdGVz
QXJyYXlbMF1bQCJRVEFsdGVybmF0ZXNfUVRUcmFjayJdOwotICAgIGlmICghdHJhY2spCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICghY2xvc2VkQ2FwdGlvbnNWaXNpYmxlKQotICAgICAgICBb
bV9xdE1vdmllIGRlc2VsZWN0QWx0ZXJuYXRlR3JvdXBUcmFjazp0cmFja107Ci0gICAgZWxzZQot
ICAgICAgICBbbV9xdE1vdmllIHNlbGVjdEFsdGVybmF0ZUdyb3VwVHJhY2s6dHJhY2tdOwotCi0g
ICAgaWYgKGNsb3NlZENhcHRpb25zVmlzaWJsZSAmJiBtX3F0VmlkZW9MYXllcikgewotICAgICAg
ICAvLyBDYXB0aW9ucyB3aWxsIGJlIHJlbmRlcmVkIHVwc2lkZSBkb3duIHVubGVzcyB3ZSBmbGFn
IHRoZSBtb3ZpZSBhcyBmbGlwcGVkIChhZ2FpbikuIFNlZSA8cmRhcjovLzc0MDg0NDA+LgotICAg
ICAgICBbbV9xdFZpZGVvTGF5ZXIuZ2V0KCkgc2V0R2VvbWV0cnlGbGlwcGVkOllFU107Ci0gICAg
fQotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzZXRSYXRlKGZsb2F0IHJhdGUp
Ci17Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNldFJhdGUoJXAp
IC0gcmF0ZSAlZiIsIHRoaXMsIHJhdGUpOwotICAgIGlmIChtX3F0TW92aWUpCi0gICAgICAgIFtt
X3F0TW92aWUuZ2V0KCkgc2V0UmF0ZTpyYXRlXTsKLX0KLQotZG91YmxlIE1lZGlhUGxheWVyUHJp
dmF0ZVFUS2l0OjpyYXRlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9xdE1vdmllID8gW21fcXRN
b3ZpZSByYXRlXSA6IDA7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNldFBy
ZXNlcnZlc1BpdGNoKGJvb2wgcHJlc2VydmVzUGl0Y2gpCi17Ci0gICAgTE9HKE1lZGlhLCAiTWVk
aWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNldFByZXNlcnZlc1BpdGNoKCVwKSAtIHByZXNlcnZlc1Bp
dGNoICVkIiwgdGhpcywgKGludClwcmVzZXJ2ZXNQaXRjaCk7Ci0gICAgaWYgKCFtX3F0TW92aWUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFFUTW92aWVSYXRlQ2hhbmdlc1ByZXNlcnZlUGl0
Y2hBdHRyaWJ1dGUgY2Fubm90IGJlIGNoYW5nZWQgZHluYW1pY2FsbHkgYWZ0ZXIgUVRNb3ZpZSBj
cmVhdGlvbi4KLSAgICAvLyBJZiB0aGUgcGFzc2VkIGluIHZhbHVlIGlzIGRpZmZlcmVudCB0aGFu
IHdoYXQgYWxyZWFkeSBleGlzdHMsIHdlIG5lZWQgdG8gcmVjcmVhdGUgdGhlIFFUTW92aWUgZm9y
IGl0IHRvIHRha2UgZWZmZWN0LgotICAgIGlmIChbW21fcXRNb3ZpZS5nZXQoKSBhdHRyaWJ1dGVG
b3JLZXk6UVRNb3ZpZVJhdGVDaGFuZ2VzUHJlc2VydmVQaXRjaEF0dHJpYnV0ZV0gYm9vbFZhbHVl
XSA9PSBwcmVzZXJ2ZXNQaXRjaCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmV0YWluUHRyPE5T
RGljdGlvbmFyeT4gbW92aWVBdHRyaWJ1dGVzID0gYWRvcHROUyhbW21fcXRNb3ZpZS5nZXQoKSBt
b3ZpZUF0dHJpYnV0ZXNdIG11dGFibGVDb3B5XSk7Ci0gICAgQVNTRVJUKG1vdmllQXR0cmlidXRl
cyk7Ci0gICAgW21vdmllQXR0cmlidXRlcy5nZXQoKSBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVy
V2l0aEJvb2w6cHJlc2VydmVzUGl0Y2hdIGZvcktleTpRVE1vdmllUmF0ZUNoYW5nZXNQcmVzZXJ2
ZVBpdGNoQXR0cmlidXRlXTsKLSAgICBtX3RpbWVUb1Jlc3RvcmUgPSBjdXJyZW50TWVkaWFUaW1l
KCk7Ci0KLSAgICBjcmVhdGVRVE1vdmllKFttb3ZpZUF0dHJpYnV0ZXMuZ2V0KCkgdmFsdWVGb3JL
ZXk6UVRNb3ZpZVVSTEF0dHJpYnV0ZV0sIG1vdmllQXR0cmlidXRlcy5nZXQoKSk7Ci19Ci0KLXN0
ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0
OjpidWZmZXJlZCgpIGNvbnN0Ci17Ci0gICAgYXV0byB0aW1lUmFuZ2VzID0gc3RkOjptYWtlX3Vu
aXF1ZTxQbGF0Zm9ybVRpbWVSYW5nZXM+KCk7Ci0gICAgTWVkaWFUaW1lIGxvYWRlZCA9IG1heE1l
ZGlhVGltZUxvYWRlZCgpOwotICAgIGlmIChsb2FkZWQgPiBNZWRpYVRpbWU6Onplcm9UaW1lKCkp
Ci0gICAgICAgIHRpbWVSYW5nZXMtPmFkZChNZWRpYVRpbWU6Onplcm9UaW1lKCksIGxvYWRlZCk7
Ci0gICAgcmV0dXJuIHRpbWVSYW5nZXM7Ci19Ci0KLXN0YXRpYyBNZWRpYVRpbWUgbWF4VmFsdWVG
b3JUaW1lUmFuZ2VzKE5TQXJyYXkgKnJhbmdlcykKLXsKLSAgICBpZiAoIXJhbmdlcykKLSAgICAg
ICAgcmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsKLQotICAgIE1lZGlhVGltZSBtYXg7Ci0g
ICAgZm9yIChOU1ZhbHVlICp2YWx1ZSBpbiByYW5nZXMpIHsKLSAgICAgICAgUVRUaW1lUmFuZ2Ug
cmFuZ2UgPSBbdmFsdWUgUVRUaW1lUmFuZ2VWYWx1ZV07Ci0gICAgICAgIGlmICghcmFuZ2UudGlt
ZS50aW1lU2NhbGUgfHwgIXJhbmdlLmR1cmF0aW9uLnRpbWVTY2FsZSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgIE1lZGlhVGltZSB0aW1lID0gdG9NZWRpYVRpbWUocmFuZ2UudGlt
ZSk7Ci0gICAgICAgIE1lZGlhVGltZSBkdXJhdGlvbiA9IHRvTWVkaWFUaW1lKHJhbmdlLmR1cmF0
aW9uKTsKLSAgICAgICAgaWYgKHRpbWUuaXNWYWxpZCgpICYmIGR1cmF0aW9uLmlzVmFsaWQoKSkK
LSAgICAgICAgICAgIG1heCA9IHN0ZDo6bWF4KG1heCwgdGltZSArIGR1cmF0aW9uKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gbWF4OwotfQotCi1NZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlUVRL
aXQ6Om1heE1lZGlhVGltZVNlZWthYmxlKCkgY29uc3QKLXsKLSAgICBpZiAoIW1ldGFEYXRhQXZh
aWxhYmxlKCkpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7Ci0KLSAgICAv
LyBpbmZpbml0ZSBkdXJhdGlvbiBtZWFucyBsaXZlIHN0cmVhbQotICAgIGlmIChkdXJhdGlvbk1l
ZGlhVGltZSgpLmlzUG9zaXRpdmVJbmZpbml0ZSgpKQotICAgICAgICByZXR1cm4gTWVkaWFUaW1l
Ojp6ZXJvVGltZSgpOwotCi0gICAgTlNBcnJheSogc2Vla2FibGVSYW5nZXMgPSBbbV9xdE1vdmll
IGF2YWlsYWJsZVJhbmdlc107Ci0KLSAgICByZXR1cm4gbWF4VmFsdWVGb3JUaW1lUmFuZ2VzKHNl
ZWthYmxlUmFuZ2VzKTsKLX0KLQotTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojpt
YXhNZWRpYVRpbWVMb2FkZWQoKSBjb25zdAotewotICAgIGlmICghbWV0YURhdGFBdmFpbGFibGUo
KSkKLSAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsKLSAgICBpZiAoW21fcXRN
b3ZpZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRlZFJhbmdlcyldKQotICAgICAg
ICByZXR1cm4gbWF4VmFsdWVGb3JUaW1lUmFuZ2VzKFttX3F0TW92aWUgbG9hZGVkUmFuZ2VzXSk7
Ci0gICAgcmV0dXJuIHRvTWVkaWFUaW1lKFttX3F0TW92aWUgbWF4VGltZUxvYWRlZF0pOwotfQot
Ci1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpkaWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25z
dAotewotICAgIGlmICghZHVyYXRpb24oKSB8fCAhdG90YWxCeXRlcygpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgTWVkaWFUaW1lIGN1cnJlbnRNYXhUaW1lTG9hZGVkID0gbWF4TWVkaWFU
aW1lTG9hZGVkKCk7Ci0gICAgYm9vbCBkaWRMb2FkaW5nUHJvZ3Jlc3MgPSBjdXJyZW50TWF4VGlt
ZUxvYWRlZCAhPSBtX21heFRpbWVMb2FkZWRBdExhc3REaWRMb2FkaW5nUHJvZ3Jlc3M7Ci0gICAg
bV9tYXhUaW1lTG9hZGVkQXRMYXN0RGlkTG9hZGluZ1Byb2dyZXNzID0gY3VycmVudE1heFRpbWVM
b2FkZWQ7Ci0gICAgcmV0dXJuIGRpZExvYWRpbmdQcm9ncmVzczsKLX0KLQotdW5zaWduZWQgbG9u
ZyBsb25nIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojp0b3RhbEJ5dGVzKCkgY29uc3QKLXsKLSAg
ICBpZiAoIW1ldGFEYXRhQXZhaWxhYmxlKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biBbW21fcXRNb3ZpZS5nZXQoKSBhdHRyaWJ1dGVGb3JLZXk6UVRNb3ZpZURhdGFTaXplQXR0cmli
dXRlXSBsb25nTG9uZ1ZhbHVlXTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6
Y2FuY2VsTG9hZCgpCi17Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6
OmNhbmNlbExvYWQoJXApIiwgdGhpcyk7Ci0gICAgLy8gRklYTUU6IElzIHRoZXJlIGEgYmV0dGVy
IHdheSB0byBjaGVjayBmb3IgdGhpcz8KLSAgICBpZiAobV9uZXR3b3JrU3RhdGUgPCBNZWRpYVBs
YXllcjo6TG9hZGluZyB8fCBtX25ldHdvcmtTdGF0ZSA9PSBNZWRpYVBsYXllcjo6TG9hZGVkKQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgdGVhckRvd25WaWRlb1JlbmRlcmluZygpOwotICAg
IG1fcXRNb3ZpZSA9IG5pbDsKLSAgICAKLSAgICB1cGRhdGVTdGF0ZXMoKTsKLX0KLQotdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVRVEtpdDo6Y2FjaGVNb3ZpZVNjYWxlKCkKLXsKLSAgICBOU1NpemUg
aW5pdGlhbFNpemUgPSBOU1plcm9TaXplOwotICAgIE5TU2l6ZSBuYXR1cmFsU2l6ZSA9IFtbbV9x
dE1vdmllLmdldCgpIGF0dHJpYnV0ZUZvcktleTpRVE1vdmllTmF0dXJhbFNpemVBdHRyaWJ1dGVd
IHNpemVWYWx1ZV07Ci0KLSAgICAvLyBRVE1vdmllQ3VycmVudFNpemVBdHRyaWJ1dGUgaXMgbm90
IGFsbG93ZWQgd2l0aCBpbnN0YW5jZXMgb2YgUVRNb3ZpZSB0aGF0IGhhdmUgYmVlbiAKLSAgICAv
LyBvcGVuZWQgd2l0aCBRVE1vdmllT3BlbkZvclBsYXliYWNrQXR0cmlidXRlLCBzbyBhc2sgZm9y
IHRoZSBkaXNwbGF5IHRyYW5zZm9ybSBhdHRyaWJ1dGUgaW5zdGVhZC4KLSAgICBOU0FmZmluZVRy
YW5zZm9ybSAqZGlzcGxheVRyYW5zZm9ybSA9IFttX3F0TW92aWUuZ2V0KCkgYXR0cmlidXRlRm9y
S2V5OkAiUVRNb3ZpZVByZWZlcnJlZFRyYW5zZm9ybUF0dHJpYnV0ZSJdOwotICAgIGlmIChkaXNw
bGF5VHJhbnNmb3JtKQotICAgICAgICBpbml0aWFsU2l6ZSA9IFtkaXNwbGF5VHJhbnNmb3JtIHRy
YW5zZm9ybVNpemU6bmF0dXJhbFNpemVdOwotICAgIGVsc2UgewotICAgICAgICBpbml0aWFsU2l6
ZS53aWR0aCA9IG5hdHVyYWxTaXplLndpZHRoOwotICAgICAgICBpbml0aWFsU2l6ZS5oZWlnaHQg
PSBuYXR1cmFsU2l6ZS5oZWlnaHQ7Ci0gICAgfQotCi0gICAgaWYgKG5hdHVyYWxTaXplLndpZHRo
KQotICAgICAgICBtX3NjYWxlRmFjdG9yLnNldFdpZHRoKGluaXRpYWxTaXplLndpZHRoIC8gbmF0
dXJhbFNpemUud2lkdGgpOwotICAgIGlmIChuYXR1cmFsU2l6ZS5oZWlnaHQpCi0gICAgICAgIG1f
c2NhbGVGYWN0b3Iuc2V0SGVpZ2h0KGluaXRpYWxTaXplLmhlaWdodCAvIG5hdHVyYWxTaXplLmhl
aWdodCk7Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmlzUmVhZHlGb3JWaWRl
b1NldHVwKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yZWFkeVN0YXRlID49IE1lZGlhUGxheWVy
OjpIYXZlTWV0YWRhdGEgJiYgbV9wbGF5ZXItPnZpc2libGUoKTsKLX0KLQotdm9pZCBNZWRpYVBs
YXllclByaXZhdGVRVEtpdDo6cHJlcGFyZUZvclJlbmRlcmluZygpCi17Ci0gICAgTE9HKE1lZGlh
LCAiTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnByZXBhcmVGb3JSZW5kZXJpbmcoJXApIiwgdGhp
cyk7Ci0gICAgaWYgKG1faXNBbGxvd2VkVG9SZW5kZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X2lzQWxsb3dlZFRvUmVuZGVyID0gdHJ1ZTsKLQotICAgIGlmICghaGFzU2V0VXBWaWRlb1JlbmRl
cmluZygpKQotICAgICAgICBzZXRVcFZpZGVvUmVuZGVyaW5nKCk7Ci0KLSAgICAvLyBJZiB1c2lu
ZyBhIG1vdmllIGxheWVyLCBpbmZvcm0gdGhlIGNsaWVudCBzbyB0aGUgY29tcG9zaXRpbmcgdHJl
ZSBpcyB1cGRhdGVkLiBUaGlzIGlzIGNydWNpYWwgaWYgdGhlIG1vdmllCi0gICAgLy8gaGFzIGEg
cG9zdGVyLCBhcyBpdCB3aWxsIG1vc3QgbGlrZWx5IG5vdCBoYXZlIGEgbGF5ZXIgYW5kIHdlIHdp
bGwgbm93IGJlIHJlbmRlcmluZyBmcmFtZXMgdG8gdGhlIG1vdmllIGxheWVyLgotICAgIGlmIChj
dXJyZW50UmVuZGVyaW5nTW9kZSgpID09IE1lZGlhUmVuZGVyaW5nTW92aWVMYXllciB8fCBwcmVm
ZXJyZWRSZW5kZXJpbmdNb2RlKCkgPT0gTWVkaWFSZW5kZXJpbmdNb3ZpZUxheWVyKQotICAgICAg
ICBtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJSZW5kZXJpbmdNb2RlQ2hhbmdlZChtX3Bs
YXllcik7Ci19Ci0KLXN0YXRpYyB2b2lkIHNlbGVjdFByZWZlcnJlZEFsdGVybmF0ZVRyYWNrRm9y
TWVkaWFUeXBlKFFUTW92aWUgKm1vdmllLCBOU1N0cmluZyAqbWVkaWFUeXBlKQotewotICAgIE5T
QXJyYXkgKmFsdGVybmF0ZXMgPSBbbW92aWUgYWx0ZXJuYXRlc0Zvck1lZGlhVHlwZTptZWRpYVR5
cGVdOwotICAgIGlmICghYWx0ZXJuYXRlcy5jb3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
YXV0byBsYW5ndWFnZVRvUVRUcmFja01hcCA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5
IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmFsdGVybmF0ZXMuY291bnRdKTsKLQotICAgIGZvciAo
TlNVSW50ZWdlciBpbmRleCA9IDA7IGluZGV4IDwgYWx0ZXJuYXRlcy5jb3VudDsgKytpbmRleCkg
ewotICAgICAgICBOU0RpY3Rpb25hcnkgKmFsdGVybmF0ZURpY3QgPSBhbHRlcm5hdGVzW2luZGV4
XTsKLSAgICAgICAgTlNTdHJpbmcgKmxhbmd1YWdlU3RyaW5nID0gYWx0ZXJuYXRlRGljdFtAIlFU
QWx0ZXJuYXRlc19MYW5ndWFnZUNvZGVFbmNvZGluZ19JU09fNjM5XzJUIl07Ci0gICAgICAgIGlm
ICghW2xhbmd1YWdlU3RyaW5nIGNTdHJpbmdVc2luZ0VuY29kaW5nOmtDRlN0cmluZ0VuY29kaW5n
QVNDSUldKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghbGFuZ3VhZ2VTdHJp
bmcpCi0gICAgICAgICAgICBsYW5ndWFnZVN0cmluZyA9IGFsdGVybmF0ZURpY3RbQCJRVEFsdGVy
bmF0ZXNfTGFuZ3VhZ2VDb2RlRW5jb2RpbmdfUkZDXzQ2NDYiXTsKLSAgICAgICAgaWYgKCFsYW5n
dWFnZVN0cmluZykgewotICAgICAgICAgICAgTGFuZ0NvZGUgbGFuZ0NvZGUgPSBbYWx0ZXJuYXRl
RGljdFtAIlFUQWx0ZXJuYXRlc19MYW5ndWFnZUNvZGVFbmNvZGluZ19NYWNUeXBlX0xhbmdDb2Rl
Il0gaW50VmFsdWVdOwotICAgICAgICAgICAgYXV0byBpZGVudGlmaWVyID0gYWRvcHRDRihDRkxv
Y2FsZUNyZWF0ZUNhbm9uaWNhbExvY2FsZUlkZW50aWZpZXJGcm9tU2NyaXB0TWFuYWdlckNvZGVz
KGtDRkFsbG9jYXRvckRlZmF1bHQsIGxhbmdDb2RlLCAwKSk7Ci0gICAgICAgICAgICBsYW5ndWFn
ZVN0cmluZyA9IChOU1N0cmluZyAqKWlkZW50aWZpZXIuYXV0b3JlbGVhc2UoKTsKLSAgICAgICAg
fQotICAgICAgICBpZiAoIWxhbmd1YWdlU3RyaW5nKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgaWQgYWx0ZXJuYXRlVHJhY2sgPSBhbHRlcm5hdGVEaWN0W0AiUVRBbHRlcm5hdGVz
X1FUVHJhY2siXTsKLSAgICAgICAgaWYgKCFhbHRlcm5hdGVUcmFjaykKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgIGlmICghW1thbHRlcm5hdGVUcmFjayBhdHRyaWJ1dGVGb3JLZXk6
QCJRVFRyYWNrRW5hYmxlZEF0dHJpYnV0ZSJdIGJvb2xWYWx1ZV0pCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICBbbGFuZ3VhZ2VUb1FUVHJhY2tNYXAgc2V0T2JqZWN0OmFsdGVybmF0
ZVRyYWNrIGZvcktleTpsYW5ndWFnZVN0cmluZ107Ci0gICAgfQotCi0gICAgTlNBcnJheSAqcHJl
ZmVycmVkTGFuZ3VhZ2VzID0gW05TQnVuZGxlIHByZWZlcnJlZExvY2FsaXphdGlvbnNGcm9tQXJy
YXk6W2xhbmd1YWdlVG9RVFRyYWNrTWFwIGFsbEtleXNdIGZvclByZWZlcmVuY2VzOm5pbF07Ci0g
ICAgaWYgKHByZWZlcnJlZExhbmd1YWdlcy5jb3VudCkgewotICAgICAgICBpZCBwcmVmZXJyZWRU
cmFjayA9IFtsYW5ndWFnZVRvUVRUcmFja01hcCBvYmplY3RGb3JLZXk6cHJlZmVycmVkTGFuZ3Vh
Z2VzWzBdXTsKLSAgICAgICAgaWYgKHByZWZlcnJlZFRyYWNrKSB7Ci0gICAgICAgICAgICAvLyAr
W05TQnVuZGxlIHByZWZlcnJlZExvY2FsaXphdGlvbnNGcm9tQXJyYXk6Zm9yUHJlZmVyZW5jZXNd
IG1heSByZXR1cm4gYSBsYW5ndWFnZSB3aGljaCB3YXMKLSAgICAgICAgICAgIC8vIG5vdCBwcmVz
ZW50IGluIHByZWZlcnJlZExhbmd1YWdlcywgYW5kIHdpbGwgdGhlcmVmb3JlIG5vdCBoYXZlIGFu
IGFzc29jaWF0ZWQgdHJhY2suCi0gICAgICAgICAgICBbbW92aWUgc2VsZWN0QWx0ZXJuYXRlR3Jv
dXBUcmFjazpwcmVmZXJyZWRUcmFja107Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXN0YXRpYyB2
b2lkIHNlbGVjdFByZWZlcnJlZEFsdGVybmF0ZXMoUVRNb3ZpZSAqbW92aWUpCi17Ci0gICAgc2Vs
ZWN0UHJlZmVycmVkQWx0ZXJuYXRlVHJhY2tGb3JNZWRpYVR5cGUobW92aWUsIEAidmlkZSIpOwot
ICAgIHNlbGVjdFByZWZlcnJlZEFsdGVybmF0ZVRyYWNrRm9yTWVkaWFUeXBlKG1vdmllLCBAInNv
dW4iKTsKLSAgICBzZWxlY3RQcmVmZXJyZWRBbHRlcm5hdGVUcmFja0Zvck1lZGlhVHlwZShtb3Zp
ZSwgQCJjcGxwIik7Ci0gICAgc2VsZWN0UHJlZmVycmVkQWx0ZXJuYXRlVHJhY2tGb3JNZWRpYVR5
cGUobW92aWUsIEAic2J0bCIpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojp1
cGRhdGVTdGF0ZXMoKQotewotICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgb2xkTmV0d29y
a1N0YXRlID0gbV9uZXR3b3JrU3RhdGU7Ci0gICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgb2xk
UmVhZHlTdGF0ZSA9IG1fcmVhZHlTdGF0ZTsKLQotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVy
UHJpdmF0ZVFUS2l0Ojp1cGRhdGVTdGF0ZXMoJXApIC0gZW50ZXJpbmcgd2l0aCBuZXR3b3JrU3Rh
dGUgPSAlaSwgcmVhZHlTdGF0ZSA9ICVpIiwgdGhpcywgc3RhdGljX2Nhc3Q8aW50PihtX25ldHdv
cmtTdGF0ZSksIHN0YXRpY19jYXN0PGludD4obV9yZWFkeVN0YXRlKSk7Ci0KLSAgICAKLSAgICBs
b25nIGxvYWRTdGF0ZSA9IG1fcXRNb3ZpZSA/IFtbbV9xdE1vdmllLmdldCgpIGF0dHJpYnV0ZUZv
cktleTpRVE1vdmllTG9hZFN0YXRlQXR0cmlidXRlXSBsb25nVmFsdWVdIDogc3RhdGljX2Nhc3Q8
bG9uZz4oUVRNb3ZpZUxvYWRTdGF0ZUVycm9yKTsKLQotICAgIGlmIChsb2FkU3RhdGUgPj0gUVRN
b3ZpZUxvYWRTdGF0ZUxvYWRlZCAmJiBtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZU1l
dGFkYXRhKSB7Ci0gICAgICAgIGRpc2FibGVVbnN1cHBvcnRlZFRyYWNrcygpOwotICAgICAgICBp
ZiAobV9wbGF5ZXItPmluTWVkaWFEb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fZW5h
YmxlZFRyYWNrQ291bnQgfHwgbV9oYXNVbnN1cHBvcnRlZFRyYWNrcykgewotICAgICAgICAgICAg
ICAgIC8vIFRoaXMgaGFzIGEgdHlwZSBvZiBtZWRpYSB0aGF0IHdlIGRvIG5vdCBoYW5kbGUgZGly
ZWN0bHkgd2l0aCBhIDx2aWRlbz4gCi0gICAgICAgICAgICAgICAgLy8gZWxlbWVudCwgZWcuIGEg
cnRzcCB0cmFjayBvciBRdWlja1RpbWUgVlIuIFRlbGwgdGhlIE1lZGlhUGxheWVyQ2xpZW50Ci0g
ICAgICAgICAgICAgICAgLy8gdGhhdCB3ZSBub3RpY2VkLgotICAgICAgICAgICAgICAgIHNhd1Vu
c3VwcG9ydGVkVHJhY2tzKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
fQotICAgICAgICB9IGVsc2UgaWYgKCFtX2VuYWJsZWRUcmFja0NvdW50KQotICAgICAgICAgICAg
bG9hZFN0YXRlID0gUVRNb3ZpZUxvYWRTdGF0ZUVycm9yOwotCi0gICAgICAgIGlmIChsb2FkU3Rh
dGUgIT0gUVRNb3ZpZUxvYWRTdGF0ZUVycm9yKSB7Ci0gICAgICAgICAgICBzZWxlY3RQcmVmZXJy
ZWRBbHRlcm5hdGVzKG1fcXRNb3ZpZS5nZXQoKSk7Ci0gICAgICAgICAgICBjYWNoZU1vdmllU2Nh
bGUoKTsKLSAgICAgICAgICAgIE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIG1vdmllVHlwZSA9
IG1vdmllTG9hZFR5cGUoKTsKLSAgICAgICAgICAgIG1faXNTdHJlYW1pbmcgPSBtb3ZpZVR5cGUg
PT0gTWVkaWFQbGF5ZXI6OlN0b3JlZFN0cmVhbSB8fCBtb3ZpZVR5cGUgPT0gTWVkaWFQbGF5ZXI6
OkxpdmVTdHJlYW07Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gSWYgdGhpcyBtb3Zp
ZSBpcyByZWxvYWRpbmcgYW5kIHdlIG1lYW4gdG8gcmVzdG9yZSB0aGUgY3VycmVudCB0aW1lL3Jh
dGUsIHRoaXMgbWlnaHQgYmUgdGhlIHJpZ2h0IHRpbWUgdG8gZG8gaXQuCi0gICAgaWYgKGxvYWRT
dGF0ZSA+PSBRVE1vdmllTG9hZFN0YXRlTG9hZGVkICYmIG9sZE5ldHdvcmtTdGF0ZSA8IE1lZGlh
UGxheWVyOjpMb2FkZWQgJiYgbV90aW1lVG9SZXN0b3JlLmlzVmFsaWQoKSkgewotICAgICAgICBR
VFRpbWUgcXR0aW1lID0gdG9RVFRpbWUobV90aW1lVG9SZXN0b3JlKTsKLSAgICAgICAgbV90aW1l
VG9SZXN0b3JlID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOwotICAgICAgICAgICAgCi0gICAg
ICAgIC8vIERpc2FibGUgZXZlbnQgY2FsbGJhY2tzIGZyb20gc2V0Q3VycmVudFRpbWUgZm9yIHJl
c3RvcmluZyB0aW1lIGluIGEgcmVjcmVhdGVkIHZpZGVvCi0gICAgICAgIFttX29iamNPYnNlcnZl
ci5nZXQoKSBzZXREZWxheUNhbGxiYWNrczpZRVNdOwotICAgICAgICBbbV9xdE1vdmllLmdldCgp
IHNldEN1cnJlbnRUaW1lOnF0dGltZV07Ci0gICAgICAgIFttX3F0TW92aWUuZ2V0KCkgc2V0UmF0
ZTptX3BsYXllci0+cmF0ZSgpXTsKLSAgICAgICAgW21fb2JqY09ic2VydmVyLmdldCgpIHNldERl
bGF5Q2FsbGJhY2tzOk5PXTsKLSAgICB9Ci0KLSAgICBCT09MIGNvbXBsZXRlbHlMb2FkZWQgPSAh
bV9pc1N0cmVhbWluZyAmJiAobG9hZFN0YXRlID49IFFUTW92aWVMb2FkU3RhdGVDb21wbGV0ZSk7
Ci0KLSAgICAvLyBOb3RlOiBRVCBpbmRpY2F0ZXMgdGhhdCB3ZSBhcmUgZnVsbHkgbG9hZGVkIHdp
dGggUVRNb3ZpZUxvYWRTdGF0ZUNvbXBsZXRlLgotICAgIC8vIEhvd2V2ZXIgbmV3ZXIgdmVyc2lv
bnMgb2YgUVQgZG8gbm90LCBzbyB3ZSBjaGVjayBtYXhUaW1lTG9hZGVkIGFnYWluc3QgZHVyYXRp
b24uCi0gICAgaWYgKCFjb21wbGV0ZWx5TG9hZGVkICYmICFtX2lzU3RyZWFtaW5nICYmIG1ldGFE
YXRhQXZhaWxhYmxlKCkpCi0gICAgICAgIGNvbXBsZXRlbHlMb2FkZWQgPSBtYXhNZWRpYVRpbWVM
b2FkZWQoKSA9PSBkdXJhdGlvbk1lZGlhVGltZSgpOwotCi0gICAgaWYgKGNvbXBsZXRlbHlMb2Fk
ZWQpIHsKLSAgICAgICAgLy8gIkxvYWRlZCIgaXMgcmVzZXJ2ZWQgZm9yIGZ1bGx5IGJ1ZmZlcmVk
IG1vdmllcywgbmV2ZXIgdGhlIGNhc2Ugd2hlbiBzdHJlYW1pbmcKLSAgICAgICAgbV9uZXR3b3Jr
U3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGVkOwotICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRp
YVBsYXllcjo6SGF2ZUVub3VnaERhdGE7Ci0gICAgfSBlbHNlIGlmIChsb2FkU3RhdGUgPj0gUVRN
b3ZpZUxvYWRTdGF0ZVBsYXl0aHJvdWdoT0spIHsKLSAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVk
aWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOwotICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlh
UGxheWVyOjpMb2FkaW5nOwotICAgIH0gZWxzZSBpZiAobG9hZFN0YXRlID49IFFUTW92aWVMb2Fk
U3RhdGVQbGF5YWJsZSkgewotICAgICAgICAvLyBGSVhNRTogVGhpcyBtaWdodCBub3Qgd29yayBj
b3JyZWN0bHkgaW4gc3RyZWFtaW5nIGNhc2UsIDxyZGFyOi8vcHJvYmxlbS81NjkzOTY3PgotICAg
ICAgICBtX3JlYWR5U3RhdGUgPSBjdXJyZW50TWVkaWFUaW1lKCkgPCBtYXhNZWRpYVRpbWVMb2Fk
ZWQoKSA/IE1lZGlhUGxheWVyOjpIYXZlRnV0dXJlRGF0YSA6IE1lZGlhUGxheWVyOjpIYXZlQ3Vy
cmVudERhdGE7Ci0gICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7
Ci0gICAgfSBlbHNlIGlmIChsb2FkU3RhdGUgPj0gUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCkgewot
ICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhOwotICAgICAg
ICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOwotICAgIH0gZWxzZSBpZiAo
bG9hZFN0YXRlID4gUVRNb3ZpZUxvYWRTdGF0ZUVycm9yKSB7Ci0gICAgICAgIG1fcmVhZHlTdGF0
ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKLSAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBN
ZWRpYVBsYXllcjo6TG9hZGluZzsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBMb2FkaW5nIG9y
IGRlY29kaW5nIGZhaWxlZC4KLQotICAgICAgICBpZiAobV9wbGF5ZXItPmluTWVkaWFEb2N1bWVu
dCgpKSB7Ci0gICAgICAgICAgICAvLyBTb21ldGhpbmcgd2VudCB3cm9uZyBpbiB0aGUgbG9hZGlu
ZyBvZiBtZWRpYSB3aXRoaW4gYSBzdGFuZGFsb25lIGZpbGUuIAotICAgICAgICAgICAgLy8gVGhp
cyBjYW4gb2NjdXIgd2l0aCBjaGFpbmVkIHJlZm1vdmllcyBwb2ludGluZyB0byBzdHJlYW1lZCBt
ZWRpYS4KLSAgICAgICAgICAgIHNhd1Vuc3VwcG9ydGVkVHJhY2tzKCk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBNZWRpYVRpbWUgbG9hZGVkID0gbWF4TWVkaWFU
aW1lTG9hZGVkKCk7Ci0gICAgICAgIGlmICghbG9hZGVkKQotICAgICAgICAgICAgbV9yZWFkeVN0
YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOwotCi0gICAgICAgIGlmICghbV9lbmFibGVk
VHJhY2tDb3VudCkKLSAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkZv
cm1hdEVycm9yOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGxvYWQvbmV0d29yayBlcnJvcnMgYW5kIGRlY29kZSBl
cnJvcnMgPHJkYXI6Ly9wcm9ibGVtLzU2MDU2OTI+Ci0gICAgICAgICAgICBpZiAobG9hZGVkID4g
TWVkaWFUaW1lOjp6ZXJvVGltZSgpKQotICAgICAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0g
TWVkaWFQbGF5ZXI6OkRlY29kZUVycm9yOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmIChpc1JlYWR5Rm9yVmlkZW9TZXR1cCgpICYmICFoYXNTZXRVcFZpZGVv
UmVuZGVyaW5nKCkpCi0gICAgICAgIHNldFVwVmlkZW9SZW5kZXJpbmcoKTsKLQotICAgIGlmIChz
ZWVraW5nKCkpCi0gICAgICAgIG1fcmVhZHlTdGF0ZSA9IG1fcmVhZHlTdGF0ZSA+PSBNZWRpYVBs
YXllcjo6SGF2ZU1ldGFkYXRhID8gTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YSA6IE1lZGlhUGxh
eWVyOjpIYXZlTm90aGluZzsKLQotICAgIC8vIFN0cmVhbWluZyBtb3ZpZXMgZG9uJ3QgdXNlIHRo
ZSBuZXR3b3JrIHdoZW4gcGF1c2VkLgotICAgIGlmIChtX2lzU3RyZWFtaW5nICYmIG1fcmVhZHlT
dGF0ZSA+PSBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhICYmIG1fbmV0d29ya1N0YXRlID49IE1l
ZGlhUGxheWVyOjpMb2FkaW5nICYmIFttX3F0TW92aWUuZ2V0KCkgcmF0ZV0gPT0gMCkKLSAgICAg
ICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6SWRsZTsKLQotICAgIGlmIChtX25ldHdv
cmtTdGF0ZSAhPSBvbGROZXR3b3JrU3RhdGUpCi0gICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3Rh
dGVDaGFuZ2VkKCk7Ci0KLSAgICBpZiAobV9yZWFkeVN0YXRlICE9IG9sZFJlYWR5U3RhdGUpCi0g
ICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOwotCi0gICAgaWYgKGxvYWRTdGF0
ZSA+PSBRVE1vdmllTG9hZFN0YXRlTG9hZGVkKSB7Ci0gICAgICAgIE1lZGlhVGltZSBkdXIgPSBk
dXJhdGlvbk1lZGlhVGltZSgpOwotICAgICAgICBpZiAoZHVyICE9IG1fcmVwb3J0ZWREdXJhdGlv
bikgewotICAgICAgICAgICAgaWYgKG1fcmVwb3J0ZWREdXJhdGlvbi5pc1ZhbGlkKCkpCi0gICAg
ICAgICAgICAgICAgbV9wbGF5ZXItPmR1cmF0aW9uQ2hhbmdlZCgpOwotICAgICAgICAgICAgbV9y
ZXBvcnRlZER1cmF0aW9uID0gZHVyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgTE9HKE1lZGlh
LCAiTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnVwZGF0ZVN0YXRlcyglcCkgLSBleGl0aW5nIHdp
dGggbmV0d29ya1N0YXRlID0gJWksIHJlYWR5U3RhdGUgPSAlaSIsIHRoaXMsIHN0YXRpY19jYXN0
PGludD4obV9uZXR3b3JrU3RhdGUpLCBzdGF0aWNfY2FzdDxpbnQ+KG1fcmVhZHlTdGF0ZSkpOwot
fQotCi1sb25nIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpwbGF0Zm9ybUVycm9yQ29kZSgpIGNv
bnN0Ci17Ci0gICAgaWYgKCFtX3F0TW92aWUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgTlNF
cnJvciogZXJyb3IgPSAoTlNFcnJvciopW21fcXRNb3ZpZSBhdHRyaWJ1dGVGb3JLZXk6UVRNb3Zp
ZUxvYWRTdGF0ZUVycm9yQXR0cmlidXRlXTsKLSAgICBpZiAoIWVycm9yIHx8ICFbZXJyb3IgaXNL
aW5kT2ZDbGFzczpbTlNFcnJvciBjbGFzc11dKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJl
dHVybiBbZXJyb3IgY29kZV07Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6Omxv
YWRTdGF0ZUNoYW5nZWQoKQotewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVFU
S2l0Ojpsb2FkU3RhdGVDaGFuZ2VkKCVwKSAtIGxvYWRTdGF0ZSA9ICVsaSIsIHRoaXMsIFtbbV9x
dE1vdmllLmdldCgpIGF0dHJpYnV0ZUZvcktleTpRVE1vdmllTG9hZFN0YXRlQXR0cmlidXRlXSBs
b25nVmFsdWVdKTsKLQotICAgIGlmICghbV9oYXNVbnN1cHBvcnRlZFRyYWNrcykKLSAgICAgICAg
dXBkYXRlU3RhdGVzKCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmxvYWRl
ZFJhbmdlc0NoYW5nZWQoKQotewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVFU
S2l0Ojpsb2FkZWRSYW5nZXNDaGFuZ2VkKCVwKSAtIGxvYWRTdGF0ZSA9ICVsaSIsIHRoaXMsIFtb
bV9xdE1vdmllLmdldCgpIGF0dHJpYnV0ZUZvcktleTpRVE1vdmllTG9hZFN0YXRlQXR0cmlidXRl
XSBsb25nVmFsdWVdKTsKLQotICAgIGlmICghbV9oYXNVbnN1cHBvcnRlZFRyYWNrcykKLSAgICAg
ICAgdXBkYXRlU3RhdGVzKCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnJh
dGVDaGFuZ2VkKCkKLXsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6
cmF0ZUNoYW5nZWQoJXApIC0gcmF0ZSA9ICVsaSIsIHRoaXMsIFttX3F0TW92aWUuZ2V0KCkgcmF0
ZV0pOwotICAgIGlmIChtX2hhc1Vuc3VwcG9ydGVkVHJhY2tzKQotICAgICAgICByZXR1cm47Ci0K
LSAgICB1cGRhdGVTdGF0ZXMoKTsKLSAgICBtX3BsYXllci0+cmF0ZUNoYW5nZWQoKTsKLX0KLQot
dm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c2l6ZUNoYW5nZWQoKQotewotICAgIExPRyhN
ZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzaXplQ2hhbmdlZCglcCkiLCB0aGlzKTsK
LSAgICBpZiAoIW1faGFzVW5zdXBwb3J0ZWRUcmFja3MpCi0gICAgICAgIG1fcGxheWVyLT5zaXpl
Q2hhbmdlZCgpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojp0aW1lQ2hhbmdl
ZCgpCi17Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnRpbWVDaGFu
Z2VkKCVwKSIsIHRoaXMpOwotICAgIGlmIChtX2hhc1Vuc3VwcG9ydGVkVHJhY2tzKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBJdCBtYXkgbm90IGJlIHBvc3NpYmxlIHRvIHNlZWsgdG8gYSBz
cGVjaWZpYyB0aW1lIGluIGEgc3RyZWFtZWQgbW92aWUuIFdoZW4gc2Vla2luZyBpbiBhIAotICAg
IC8vIHN0cmVhbSBRdWlja1RpbWUgc2V0cyB0aGUgbW92aWUgdGltZSB0byBjbG9zZXN0IHRpbWUg
cG9zc2libGUgYW5kIHBvc3RzIGEgdGltZWNoYW5nZWQgCi0gICAgLy8gbm90aWZpY2F0aW9uLiBV
cGRhdGUgbV9zZWVrVG8gc28gd2UgY2FuIGRldGVjdCB3aGVuIHRoZSBzZWVrIGNvbXBsZXRlcy4K
LSAgICBpZiAobV9zZWVrVG8uaXNWYWxpZCgpKQotICAgICAgICBtX3NlZWtUbyA9IGN1cnJlbnRN
ZWRpYVRpbWUoKTsKLQotICAgIG1fdGltZVRvUmVzdG9yZSA9IE1lZGlhVGltZTo6aW52YWxpZFRp
bWUoKTsKLSAgICB1cGRhdGVTdGF0ZXMoKTsKLSAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsK
LX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6ZGlkRW5kKCkKLXsKLSAgICBMT0co
TWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6ZGlkRW5kKCVwKSIsIHRoaXMpOwotICAg
IGlmIChtX2hhc1Vuc3VwcG9ydGVkVHJhY2tzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N0
YXJ0ZWRQbGF5aW5nID0gZmFsc2U7Ci0KLSAgICAvLyBIYW5nIG9udG8gdGhlIGN1cnJlbnQgdGlt
ZSBhbmQgdXNlIGl0IGFzIGR1cmF0aW9uIGZyb20gbm93IG9uIHNpbmNlIFF1aWNrVGltZSBpcyB0
ZWxsaW5nIHVzIHdlCi0gICAgLy8gYXJlIGF0IHRoZSBlbmQuIERvIHRoaXMgYmVjYXVzZSBRdWlj
a1RpbWUgc29tZXRpbWVzIHJlcG9ydHMgb25lIHRpbWUgZm9yIGR1cmF0aW9uIGFuZCBzdG9wcwot
ICAgIC8vIHBsYXliYWNrIGF0IGFub3RoZXIgdGltZSwgd2hpY2ggY2F1c2VzIHByb2JsZW1zIGlu
IEhUTUxNZWRpYUVsZW1lbnQuIFFUS2l0J3MgJ2VuZGVkJyBldmVudCAKLSAgICAvLyBmaXJlcyB3
aGVuIHBsYXlpbmcgaW4gcmV2ZXJzZSBzbyBkb24ndCB1cGRhdGUgZHVyYXRpb24gd2hlbiBhdCB0
aW1lIHplcm8hCi0gICAgTWVkaWFUaW1lIG5vdyA9IGN1cnJlbnRNZWRpYVRpbWUoKTsKLSAgICBp
ZiAobm93ID4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpKQotICAgICAgICBtX2NhY2hlZER1cmF0aW9u
ID0gbm93OwotCi0gICAgdXBkYXRlU3RhdGVzKCk7Ci0gICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2Vk
KCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmxheWVySG9zdENoYW5nZWQo
UGxhdGZvcm1MYXllciogcm9vdExheWVyKQotewotICAgIFVOVVNFRF9QQVJBTShyb290TGF5ZXIp
OwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzZXRTaXplKGNvbnN0IEludFNp
emUmKSAKLXsgCi19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNldFZpc2libGUo
Ym9vbCBiKQotewotICAgIGlmIChtX3Zpc2libGUgIT0gYikgewotICAgICAgICBtX3Zpc2libGUg
PSBiOwotICAgICAgICBpZiAoYikKLSAgICAgICAgICAgIHNldFVwVmlkZW9SZW5kZXJpbmcoKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGVhckRvd25WaWRlb1JlbmRlcmluZygpOwotICAg
IH0KLX0KLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6aGFzQXZhaWxhYmxlVmlkZW9G
cmFtZSgpIGNvbnN0Ci17Ci0gICAgLy8gV2hlbiB1c2luZyBhIFFUTW92aWVMYXllciByZXR1cm4g
dHJ1ZSBhcyBzb29uIGFzIHRoZSBtb3ZpZSByZWFjaGVzIFFUTW92aWVMb2FkU3RhdGVQbGF5YWJs
ZSAKLSAgICAvLyBiZWNhdXNlIGFsdGhvdWdoIHdlIGRvbid0ICprbm93KiB3aGVuIHRoZSBmaXJz
dCBmcmFtZSBoYXMgZGVjb2RlZCwgYnkgdGhlIHRpbWUgd2UgZ2V0IGFuZCAKLSAgICAvLyBwcm9j
ZXNzIHRoZSBub3RpZmljYXRpb24gYSBmcmFtZSBzaG91bGQgaGF2ZSBwcm9wYWdhdGVkIHRoZSBW
aXN1YWxDb250ZXh0IGFuZCBiZWVuIHNldCBvbgotICAgIC8vIHRoZSBsYXllci4KLSAgICBpZiAo
Y3VycmVudFJlbmRlcmluZ01vZGUoKSA9PSBNZWRpYVJlbmRlcmluZ01vdmllTGF5ZXIpCi0gICAg
ICAgIHJldHVybiBtX3JlYWR5U3RhdGUgPj0gTWVkaWFQbGF5ZXI6OkhhdmVDdXJyZW50RGF0YTsK
LQotICAgIC8vIFdoZW4gdXNpbmcgdGhlIHNvZnR3YXJlIHJlbmRlcmVyIFF1aWNrVGltZSBzaWdu
YWxzIHRoYXQgYSBmcmFtZSBpcyBhdmFpbGFibGUgc28gd2UgbWlnaHQgYXMgd2VsbAotICAgIC8v
IHdhaXQgdW50aWwgd2Uga25vdyB0aGF0IGEgZnJhbWUgaGFzIGJlZW4gZHJhd24uCi0gICAgcmV0
dXJuIG1fdmlkZW9GcmFtZUhhc0RyYXduOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFU
S2l0OjpyZXBhaW50KCkKLXsKLSAgICBpZiAobV9oYXNVbnN1cHBvcnRlZFRyYWNrcykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV92aWRlb0ZyYW1lSGFzRHJhd24gPSB0cnVlOwotICAgIG1fcGxh
eWVyLT5yZXBhaW50KCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnBhaW50
Q3VycmVudEZyYW1lSW5Db250ZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxv
YXRSZWN0JiByKQotewotICAgIGlkIHF0VmlkZW9SZW5kZXJlciA9IG1fcXRWaWRlb1JlbmRlcmVy
LmdldCgpOwotICAgIGlmICghcXRWaWRlb1JlbmRlcmVyICYmIGN1cnJlbnRSZW5kZXJpbmdNb2Rl
KCkgPT0gTWVkaWFSZW5kZXJpbmdNb3ZpZUxheWVyKSB7Ci0gICAgICAgIC8vIFdlJ3JlIGJlaW5n
IHRvbGQgdG8gcmVuZGVyIGludG8gYSBjb250ZXh0LCBidXQgd2UgYWxyZWFkeSBoYXZlIHRoZQot
ICAgICAgICAvLyBNb3ZpZUxheWVyIGdvaW5nLiBUaGlzIHByb2JhYmx5IG1lYW5zIHdlJ3ZlIGJl
ZW4gY2FsbGVkIGZyb20gPGNhbnZhcz4uCi0gICAgICAgIC8vIFNldCB1cCBhIFFUVmlkZW9SZW5k
ZXJlciB0byB1c2UsIGJ1dCBvbmUgdGhhdCBkb2Vzbid0IHJlZ2lzdGVyIGZvcgotICAgICAgICAv
LyB1cGRhdGUgY2FsbGJhY2tzLiBUaGF0IHdheSwgaXQgd29uJ3QgYm90aGVyIHVzIGFza2luZyB0
byByZXBhaW50LgotICAgICAgICBjcmVhdGVRVFZpZGVvUmVuZGVyZXIoUVRWaWRlb1JlbmRlcmVy
TW9kZURlZmF1bHQpOwotICAgIH0KLSAgICBwYWludChjb250ZXh0LCByKTsKLX0KLQotdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVRVEtpdDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIHIpCi17Ci0gICAgaWYgKGNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgp
IHx8IG1faGFzVW5zdXBwb3J0ZWRUcmFja3MpCi0gICAgICAgIHJldHVybjsKLSAgICBpZCBxdFZp
ZGVvUmVuZGVyZXIgPSBtX3F0VmlkZW9SZW5kZXJlci5nZXQoKTsKLSAgICBpZiAoIXF0VmlkZW9S
ZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW21fb2JqY09ic2VydmVyLmdldCgpIHNl
dERlbGF5Q2FsbGJhY2tzOllFU107Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwot
ICAgIE5TR3JhcGhpY3NDb250ZXh0KiBuZXdDb250ZXh0OwotICAgIEZsb2F0U2l6ZSBzY2FsZUZh
Y3RvcigxLjBmLCAtMS4wZik7Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVjdChGbG9hdFBvaW50KCks
IHIuc2l6ZSgpKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihj
b250ZXh0KTsKLSAgICBjb250ZXh0LnRyYW5zbGF0ZShyLngoKSwgci55KCkgKyByLmhlaWdodCgp
KTsKLSAgICBjb250ZXh0LnNjYWxlKHNjYWxlRmFjdG9yKTsKLSAgICBjb250ZXh0LnNldEltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvbkxvdyk7Ci0KLSAgICBuZXdDb250ZXh0
ID0gW05TR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dFdpdGhHcmFwaGljc1BvcnQ6Y29u
dGV4dC5wbGF0Zm9ybUNvbnRleHQoKSBmbGlwcGVkOk5PXTsKLQotICAgIFtOU0dyYXBoaWNzQ29u
dGV4dCBzYXZlR3JhcGhpY3NTdGF0ZV07Ci0gICAgW05TR3JhcGhpY3NDb250ZXh0IHNldEN1cnJl
bnRDb250ZXh0Om5ld0NvbnRleHRdOwotICAgIFsoaWQ8V2ViS2l0VmlkZW9SZW5kZXJpbmdEZXRh
aWxzPilxdFZpZGVvUmVuZGVyZXIgZHJhd0luUmVjdDpwYWludFJlY3RdOwotICAgIFtOU0dyYXBo
aWNzQ29udGV4dCByZXN0b3JlR3JhcGhpY3NTdGF0ZV07Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwotICAgIFttX29iamNPYnNlcnZlci5nZXQoKSBzZXREZWxheUNhbGxiYWNrczpO
T107Ci19Ci0KLXN0YXRpYyBib29sIHNob3VsZFJlamVjdE1JTUVUeXBlKGNvbnN0IFN0cmluZyYg
dHlwZSkKLXsKLSAgICAvLyBRVEtpdCB3aWxsIHJldHVybiBub24tdmlkZW8gTUlNRSB0eXBlcyB3
aGljaCBpdCBjbGFpbXMgdG8gc3VwcG9ydCwgYnV0IHdoaWNoIHdlCi0gICAgLy8gZG8gbm90IHN1
cHBvcnQgaW4gdGhlIDx2aWRlbz4gZWxlbWVudC4gRGlzY2xhaW0gYWxsIG5vbiB2aWRlby8gb3Ig
YXVkaW8vIHR5cGVzLgotICAgIHJldHVybiAhc3RhcnRzV2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZSh0eXBlLCAidmlkZW8vIikgJiYgIXN0YXJ0c1dpdGhMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UodHlwZSwgImF1ZGlvLyIpOwotfQotCi1zdGF0aWMgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2Fz
ZUluc2Vuc2l0aXZlSGFzaD4gY3JlYXRlRmlsZVR5cGVzU2V0KE5TQXJyYXkgKmZpbGVUeXBlcykK
LXsKLSAgICBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBzZXQ7Ci0g
ICAgZm9yIChOU1N0cmluZyAqZmlsZVR5cGUgaW4gZmlsZVR5cGVzKSB7Ci0gICAgICAgIENGU3Ry
aW5nUmVmIGV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZTdHJpbmdSZWY+KGZpbGVUeXBlKTsKLSAg
ICAgICAgYXV0byB1dGkgPSBhZG9wdENGKFVUVHlwZUNyZWF0ZVByZWZlcnJlZElkZW50aWZpZXJG
b3JUYWcoa1VUVGFnQ2xhc3NGaWxlbmFtZUV4dGVuc2lvbiwgZXh0LCBOVUxMKSk7Ci0gICAgICAg
IGlmICghdXRpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGF1dG8gbWltZSA9IE1J
TUVUeXBlRnJvbVVUSSh1dGkuZ2V0KCkpOwotICAgICAgICBpZiAoc2hvdWxkUmVqZWN0TUlNRVR5
cGUobWltZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCFtaW1lLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIHNldC5hZGQobWltZSk7Ci0KLSAgICAgICAgLy8gLW1vdmllRmls
ZVR5cGVzOiByZXR1cm5zIGJvdGggZmlsZSBleHRlbnNpb25zIGFuZCBPU1R5cGVzLiBUaGUgbGF0
ZXIgYXJlIHN1cnJvdW5kZWQgYnkgc2luZ2xlCi0gICAgICAgIC8vIHF1b3RlcywgZWcuICdNb29W
Jywgc28gZG9uJ3QgYm90aGVyIGxvb2tpbmcgYXQgdGhvc2UuCi0gICAgICAgIGlmIChDRlN0cmlu
Z0dldENoYXJhY3RlckF0SW5kZXgoZXh0LCAwKSAhPSAnXCcnKSB7Ci0gICAgICAgICAgICAvLyBV
VEkgaXMgbWlzc2luZyBtYW55IG1lZGlhIHJlbGF0ZWQgTUlNRSB0eXBlcyBzdXBwb3J0ZWQgYnkg
UVRLaXQgKHNlZSByZGFyOi8vNjQzNDE2OCksIGFuZCBub3QgYWxsCi0gICAgICAgICAgICAvLyB3
ZWIgc2VydmVycyB1c2UgdGhlIE1JTUUgdHlwZSBVVEkgcmV0dXJucyBmb3IgYW4gZXh0ZW5zaW9u
IChzZWUgcmRhcjovLzc4NzUzOTMpLCBzbyBldmVuIGlmIFVUSSAKLSAgICAgICAgICAgIC8vIGhh
cyBhIHR5cGUgZm9yIHRoaXMgZXh0ZW5zaW9uIGFkZCBhbnkgdHlwZXMgaW4gaGFyZCBjb2RlZCB0
YWJsZSBpbiB0aGUgTUlNRSB0eXBlIHJlZ2lzdHJ5LgotICAgICAgICAgICAgZm9yIChhdXRvJiB0
eXBlIDogTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TWVkaWFNSU1FVHlwZXNGb3JFeHRlbnNpb24oZXh0
KSkgewotICAgICAgICAgICAgICAgIGlmICghc2hvdWxkUmVqZWN0TUlNRVR5cGUodHlwZSkpCi0g
ICAgICAgICAgICAgICAgICAgIHNldC5hZGQodHlwZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgcmV0dXJuIHNldDsKLX0KLQotc3RhdGljIGNvbnN0IEhhc2hTZXQ8U3Ry
aW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBtaW1lQ29tbW9uVHlwZXNDYWNoZSgpCi17
Ci0gICAgc3RhdGljIGNvbnN0IGF1dG8gY2FjaGUgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoY3JlYXRl
RmlsZVR5cGVzU2V0KFtnZXRRVE1vdmllQ2xhc3MoKSBtb3ZpZUZpbGVUeXBlczpRVEluY2x1ZGVD
b21tb25UeXBlc10pKTsKLSAgICByZXR1cm4gY2FjaGU7Ci19IAotCi1zdGF0aWMgY29uc3QgSGFz
aFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIG1pbWVNb2Rlcm5UeXBlc0Nh
Y2hlKCkKLXsKLSAgICBzdGF0aWMgY29uc3QgYXV0byBjYWNoZSA9IG1ha2VOZXZlckRlc3Ryb3ll
ZChjcmVhdGVGaWxlVHlwZXNTZXQoW2dldFFUTW92aWVDbGFzcygpIG1vdmllRmlsZVR5cGVzOihR
VE1vdmllRmlsZVR5cGVPcHRpb25zKVFUSW5jbHVkZU9ubHlGaWdNZWRpYUZpbGVUeXBlc10pKTsK
LSAgICByZXR1cm4gY2FjaGU7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbmNhdGVuYXRlSGFzaFNldHMo
SGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIGRlc3RpbmF0aW9uLCBj
b25zdCBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgc291cmNlKQot
ewotICAgIGZvciAoYXV0byYgdHlwZSA6IHNvdXJjZSkKLSAgICAgICAgZGVzdGluYXRpb24uYWRk
KHR5cGUpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpnZXRTdXBwb3J0ZWRU
eXBlcyhIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgc3VwcG9ydGVk
VHlwZXMpCi17Ci0gICAgY29uY2F0ZW5hdGVIYXNoU2V0cyhzdXBwb3J0ZWRUeXBlcywgbWltZU1v
ZGVyblR5cGVzQ2FjaGUoKSk7Ci0KLSAgICAvLyBOb3RlOiB0aGlzIG1ldGhvZCBzdGFydHMgUVRL
aXRTZXJ2ZXIgaWYgaXQgaXNuJ3QgYWxyZWFkeSBydW5uaW5nIHdoZW4gaW4gNjQtYml0IGJlY2F1
c2UgaXQgaGFzIHRvIHJldHVybiB0aGUgbGlzdCAKLSAgICAvLyBvZiBldmVyeSBNSU1FIHR5cGUg
c3VwcG9ydGVkIGJ5IFFUS2l0LgotICAgIGNvbmNhdGVuYXRlSGFzaFNldHMoc3VwcG9ydGVkVHlw
ZXMsIG1pbWVDb21tb25UeXBlc0NhY2hlKCkpOwotfQotCi1NZWRpYVBsYXllcjo6U3VwcG9ydHNU
eXBlIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdp
bmVTdXBwb3J0UGFyYW1ldGVycyYgcGFyYW1ldGVycykKLXsKLSNpZiBFTkFCTEUoTUVESUFfU09V
UkNFKQotICAgIGlmIChwYXJhbWV0ZXJzLmlzTWVkaWFTb3VyY2UpCi0gICAgICAgIHJldHVybiBN
ZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7Ci0jZW5kaWYKLQotICAgIC8vIE9ubHkgcmV0dXJu
ICJJc1N1cHBvcnRlZCIgaWYgdGhlcmUgaXMgbm8gY29kZWNzIHBhcmFtZXRlciBmb3Igbm93IGFz
IHRoZXJlIGlzIG5vIHdheSB0byBhc2sgUVQgaWYgaXQgc3VwcG9ydHMgYW4KLSAgICAvLyBleHRl
bmRlZCBNSU1FIHR5cGUgeWV0LgotCi0gICAgLy8gRHVlIHRvIDxyZGFyOi8vcHJvYmxlbS8xMDc3
NzA1OT4sIGF2b2lkIGNhbGxpbmcgdGhlIG1pbWUgdHlwZXMgY2FjaGUgZnVuY3Rpb25zIGlmIGF0
Ci0gICAgLy8gYWxsIHBvc3NpYmxlOgotICAgIGF1dG8gY29udGFpbmVyVHlwZSA9IHBhcmFtZXRl
cnMudHlwZS5jb250YWluZXJUeXBlKCk7Ci0gICAgaWYgKHNob3VsZFJlamVjdE1JTUVUeXBlKGNv
bnRhaW5lclR5cGUpKQotICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVk
OwotCi0gICAgLy8gV2UgY2hlY2sgdGhlICJtb2Rlcm4iIHR5cGUgY2FjaGUgZmlyc3QsIGFzIGl0
IGRvZXNuJ3QgcmVxdWlyZSBRVEtpdFNlcnZlciB0byBzdGFydC4KLSAgICBpZiAobWltZU1vZGVy
blR5cGVzQ2FjaGUoKS5jb250YWlucyhjb250YWluZXJUeXBlKSB8fCBtaW1lQ29tbW9uVHlwZXND
YWNoZSgpLmNvbnRhaW5zKGNvbnRhaW5lclR5cGUpKQotICAgICAgICByZXR1cm4gcGFyYW1ldGVy
cy50eXBlLmNvZGVjcygpLmlzRW1wdHkoKSA/IE1lZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZCA6
IE1lZGlhUGxheWVyOjpJc1N1cHBvcnRlZDsKLQotICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNO
b3RTdXBwb3J0ZWQ7Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmlzQXZhaWxh
YmxlKCkKLXsKLSAgICAvLyBPbiAxMC41IGFuZCBoaWdoZXIsIFF1aWNrVGltZSB3aWxsIGFsd2F5
cyBiZSBuZXcgZW5vdWdoIGZvciA8dmlkZW8+IGFuZCA8YXVkaW8+IHN1cHBvcnQsIHNvIHdlIGp1
c3QgY2hlY2sgdGhhdCB0aGUgZnJhbWV3b3JrIGNhbiBiZSBsb2FkZWQuCi0gICAgcmV0dXJuIFFU
S2l0TGlicmFyeSgpOwotfQotCi1IYXNoU2V0PFJlZlB0cjxTZWN1cml0eU9yaWdpbj4+IE1lZGlh
UGxheWVyUHJpdmF0ZVFUS2l0OjpvcmlnaW5zSW5NZWRpYUNhY2hlKGNvbnN0IFN0cmluZyYpCi17
Ci0gICAgSGFzaFNldDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+PiBvcmlnaW5zOwotICAgIE5TQXJy
YXkgKm1lZGlhU2l0ZXMgPSBbW1FUVXRpbGl0aWVzIHF0VXRpbGl0aWVzXSBzaXRlc0luRG93bmxv
YWRDYWNoZV07Ci0gICAgCi0gICAgZm9yIChOU1N0cmluZyAqc2l0ZSBpbiBtZWRpYVNpdGVzKSB7
Ci0gICAgICAgIFVSTCBzaXRlQXNVUkwgPSBVUkwoVVJMKCksIHNpdGUpOwotICAgICAgICBpZiAo
c2l0ZUFzVVJMLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIG9yaWdpbnMuYWRkKFNlY3VyaXR5T3Jp
Z2luOjpjcmVhdGUoc2l0ZUFzVVJMKSk7Ci0gICAgfQotICAgIHJldHVybiBvcmlnaW5zOwotfQot
Ci12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpjbGVhck1lZGlhQ2FjaGUoY29uc3QgU3Ry
aW5nJiwgV2FsbFRpbWUpCi17Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlUVRL
aXQ6OmNsZWFyTWVkaWFDYWNoZSgpIik7Ci0gICAgW1tRVFV0aWxpdGllcyBxdFV0aWxpdGllc10g
Y2xlYXJEb3dubG9hZENhY2hlXTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6
Y2xlYXJNZWRpYUNhY2hlRm9yT3JpZ2lucyhjb25zdCBTdHJpbmcmLCBjb25zdCBIYXNoU2V0PFJl
ZlB0cjxTZWN1cml0eU9yaWdpbj4+JiBvcmlnaW5zKQotewotICAgIExPRyhNZWRpYSwgIk1lZGlh
UGxheWVyUHJpdmF0ZVFUS2l0OjpjbGVhck1lZGlhQ2FjaGVGb3JPcmlnaW5zKCkiKTsKLSAgICBm
b3IgKGF1dG8mIG9yaWdpbiA6IG9yaWdpbnMpCi0gICAgICAgIFtbUVRVdGlsaXRpZXMgcXRVdGls
aXRpZXNdIGNsZWFyRG93bmxvYWRDYWNoZUZvclNpdGU6b3JpZ2luLT50b1Jhd1N0cmluZygpXTsK
LX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6ZGlzYWJsZVVuc3VwcG9ydGVkVHJh
Y2tzKCkKLXsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6ZGlzYWJs
ZVVuc3VwcG9ydGVkVHJhY2tzKCVwKSIsIHRoaXMpOwotCi0gICAgaWYgKCFtX3F0TW92aWUpIHsK
LSAgICAgICAgbV9lbmFibGVkVHJhY2tDb3VudCA9IDA7Ci0gICAgICAgIG1fdG90YWxUcmFja0Nv
dW50ID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+PiBhbGxvd2VkVHJhY2tUeXBlcyA9IFtdIHsKLSAgICAg
ICAgc3RhdGljIE5TU3RyaW5nICogY29uc3QgdHlwZXNbXSA9IHsKLSAgICAgICAgICAgIFFUTWVk
aWFUeXBlVmlkZW8sCi0gICAgICAgICAgICBRVE1lZGlhVHlwZVNvdW5kLAotICAgICAgICAgICAg
UVRNZWRpYVR5cGVUZXh0LAotICAgICAgICAgICAgUVRNZWRpYVR5cGVCYXNlLAotICAgICAgICAg
ICAgUVRNZWRpYVR5cGVNUEVHLAotICAgICAgICAgICAgQCJjbGNwIiwgLy8gQ2xvc2VkIGNhcHRp
b24KLSAgICAgICAgICAgIEAic2J0bCIsIC8vIFN1YnRpdGxlCi0gICAgICAgICAgICBAIm9kc20i
LCAvLyBNUEVHLTQgb2JqZWN0IGRlc2NyaXB0b3Igc3RyZWFtCi0gICAgICAgICAgICBAInNkc20i
LCAvLyBNUEVHLTQgc2NlbmUgZGVzY3JpcHRpb24gc3RyZWFtCi0gICAgICAgICAgICBAInRtY2Qi
LCAvLyB0aW1lY29kZQotICAgICAgICAgICAgQCJ0YzY0IiwgLy8gdGltY29kZS02NAotICAgICAg
ICAgICAgQCJ0bWV0IiwgLy8gdGltZWQgbWV0YWRhdGEKLSAgICAgICAgfTsKLSAgICAgICAgSGFz
aFNldDxTdHJpbmc+IHNldDsKLSAgICAgICAgZm9yIChhdXRvJiB0eXBlIDogdHlwZXMpCi0gICAg
ICAgICAgICBzZXQuYWRkKHR5cGUpOwotICAgICAgICByZXR1cm4gc2V0OwotICAgIH0oKTsKLSAg
ICAKLSAgICBOU0FycmF5ICp0cmFja3MgPSBbbV9xdE1vdmllLmdldCgpIHRyYWNrc107Ci0gICAg
Ci0gICAgbV90b3RhbFRyYWNrQ291bnQgPSBbdHJhY2tzIGNvdW50XTsKLSAgICBtX2VuYWJsZWRU
cmFja0NvdW50ID0gbV90b3RhbFRyYWNrQ291bnQ7Ci0gICAgZm9yICh1bnNpZ25lZCB0cmFja0lu
ZGV4ID0gMDsgdHJhY2tJbmRleCA8IG1fdG90YWxUcmFja0NvdW50OyB0cmFja0luZGV4KyspIHsK
LSAgICAgICAgLy8gR3JhYiB0aGUgdHJhY2sgYXQgdGhlIGN1cnJlbnQgaW5kZXguIElmIHRoZXJl
IGlzbid0IG9uZSB0aGVyZSwgdGhlbgotICAgICAgICAvLyB3ZSBjYW4gbW92ZSBvbnRvIHRoZSBu
ZXh0IG9uZS4KLSAgICAgICAgUVRUcmFjayAqdHJhY2sgPSBbdHJhY2tzIG9iamVjdEF0SW5kZXg6
dHJhY2tJbmRleF07Ci0gICAgICAgIGlmICghdHJhY2spCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgCi0gICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgdHJhY2sgaXMgZGlzYWJs
ZWQgYWxyZWFkeSwgd2Ugc2hvdWxkIG1vdmUgYWxvbmcuCi0gICAgICAgIC8vIFdlIGRvbid0IG5l
ZWQgdG8gcmUtZGlzYWJsZSBpdC4KLSAgICAgICAgaWYgKCFbdHJhY2sgaXNFbmFibGVkXSkgewot
ICAgICAgICAgICAgLS1tX2VuYWJsZWRUcmFja0NvdW50OwotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIEdldCB0aGUgdHJhY2sncyBtZWRpYSB0
eXBlLgotICAgICAgICBOU1N0cmluZyAqbWVkaWFUeXBlID0gW3RyYWNrIGF0dHJpYnV0ZUZvcktl
eTpRVFRyYWNrTWVkaWFUeXBlQXR0cmlidXRlXTsKLSAgICAgICAgaWYgKCFtZWRpYVR5cGUpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBUZXN0IHdoZXRoZXIgdGhlIG1lZGlh
IHR5cGUgaXMgaW4gb3VyIHdoaXRlIGxpc3QuCi0gICAgICAgIGlmICghYWxsb3dlZFRyYWNrVHlw
ZXMuZ2V0KCkuY29udGFpbnMobWVkaWFUeXBlKSkgewotICAgICAgICAgICAgLy8gSWYgdGhpcyB0
cmFjayB0eXBlIGlzIG5vdCBhbGxvd2VkLCB0aGVuIHdlIG5lZWQgdG8gZGlzYWJsZSBpdC4KLSAg
ICAgICAgICAgIFt0cmFjayBzZXRFbmFibGVkOk5PXTsKLSAgICAgICAgICAgIC0tbV9lbmFibGVk
VHJhY2tDb3VudDsKLSAgICAgICAgICAgIG1faGFzVW5zdXBwb3J0ZWRUcmFja3MgPSB0cnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gRGlzYWJsZSBjaGFwdGVyIHRyYWNrcy4gVGhlc2UgYXJl
IG1vc3QgbGlrZWx5IHRvIGxlYWQgdG8gdHJvdWJsZSwgYXMKLSAgICAgICAgLy8gdGhleSB3aWxs
IGJlIGNvbXBvc2l0ZWQgdW5kZXIgdGhlIHZpZGVvIHRyYWNrcywgZm9yY2luZyBRVCB0byBkbyBl
eHRyYQotICAgICAgICAvLyB3b3JrLgotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKLSNw
cmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VuZGVjbGFyZWQtc2VsZWN0b3IiCi0g
ICAgICAgIFFUVHJhY2sgKmNoYXB0ZXJUcmFjayA9IFt0cmFjayBwZXJmb3JtU2VsZWN0b3I6QHNl
bGVjdG9yKGNoYXB0ZXJsaXN0KV07Ci0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0gICAg
ICAgIGlmICghY2hhcHRlclRyYWNrKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAot
ICAgICAgICAvLyBUcnkgdG8gZ3JhYiB0aGUgbWVkaWEgZm9yIHRoZSB0cmFjay4KLSAgICAgICAg
UVRNZWRpYSAqY2hhcHRlck1lZGlhID0gW2NoYXB0ZXJUcmFjayBtZWRpYV07Ci0gICAgICAgIGlm
ICghY2hhcHRlck1lZGlhKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAg
ICAvLyBHcmFiIHRoZSBtZWRpYSB0eXBlIGZvciB0aGlzIHRyYWNrLgotICAgICAgICBpZCBjaGFw
dGVyTWVkaWFUeXBlID0gW2NoYXB0ZXJNZWRpYSBhdHRyaWJ1dGVGb3JLZXk6UVRNZWRpYVR5cGVB
dHRyaWJ1dGVdOwotICAgICAgICBpZiAoIWNoYXB0ZXJNZWRpYVR5cGUpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgdHJhY2sg
aXMgYSB2aWRlbyB0cmFjay4gV2UgZG9uJ3QgY2FyZSBhYm91dAotICAgICAgICAvLyBvdGhlciBu
b24tdmlkZW8gdHJhY2tzLgotICAgICAgICBpZiAoIVtjaGFwdGVyTWVkaWFUeXBlIGlzRXF1YWw6
UVRNZWRpYVR5cGVWaWRlb10pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgdHJhY2sgaXMgYWxyZWFkeSBkaXNhYmxlZC4gSWYg
aXQgaXMsIHdlCi0gICAgICAgIC8vIHNob3VsZCBtb3ZlIGFsb25nLgotICAgICAgICBpZiAoIVtj
aGFwdGVyVHJhY2sgaXNFbmFibGVkXSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAK
LSAgICAgICAgLy8gRGlzYWJsZSB0aGUgZXZpbCwgZXZpbCB0cmFjay4KLSAgICAgICAgW2NoYXB0
ZXJUcmFjayBzZXRFbmFibGVkOk5PXTsKLSAgICAgICAgLS1tX2VuYWJsZWRUcmFja0NvdW50Owot
ICAgICAgICBtX2hhc1Vuc3VwcG9ydGVkVHJhY2tzID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNhd1Vuc3VwcG9ydGVkVHJhY2tzKCkKLXsKLSAgICBt
X2hhc1Vuc3VwcG9ydGVkVHJhY2tzID0gdHJ1ZTsKLSAgICBtX3BsYXllci0+Y2xpZW50KCkubWVk
aWFQbGF5ZXJTYXdVbnN1cHBvcnRlZFRyYWNrcyhtX3BsYXllcik7Ci19Ci0KLWJvb2wgTWVkaWFQ
bGF5ZXJQcml2YXRlUVRLaXQ6OnN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdAot
ewotICAgIHJldHVybiBpc1JlYWR5Rm9yVmlkZW9TZXR1cCgpICYmIGdldFFUTW92aWVMYXllckNs
YXNzKCkgIT0gTmlsOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjphY2NlbGVy
YXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpCi17Ci0gICAgLy8gU2V0IHVwIG9yIGNoYW5nZSB0
aGUgcmVuZGVyaW5nIHBhdGggaWYgbmVjZXNzYXJ5LgotICAgIHNldFVwVmlkZW9SZW5kZXJpbmco
KTsKLX0KLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6aGFzU2luZ2xlU2VjdXJpdHlP
cmlnaW4oKSBjb25zdAotewotICAgIGlmICghbV9xdE1vdmllKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBSZWY8U2VjdXJpdHlPcmlnaW4+IHJlc29sdmVkT3JpZ2luID0gU2VjdXJpdHlP
cmlnaW46OmNyZWF0ZShVUkwoW21fcXRNb3ZpZSBVUkxdKSk7Ci0gICAgUmVmPFNlY3VyaXR5T3Jp
Z2luPiByZXF1ZXN0ZWRPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyht
X21vdmllVVJMKTsKLSAgICByZXR1cm4gcmVzb2x2ZWRPcmlnaW4tPmlzU2FtZVNjaGVtZUhvc3RQ
b3J0KHJlcXVlc3RlZE9yaWdpbi5nZXQoKSk7Ci19Ci0KLU1lZGlhUGxheWVyOjpNb3ZpZUxvYWRU
eXBlIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojptb3ZpZUxvYWRUeXBlKCkgY29uc3QKLXsKLSAg
ICBpZiAoIW1fcXRNb3ZpZSkKLSAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRU
eXBlOjpVbmtub3duOwotCi0gICAgVUludDMyIG1vdmllVHlwZSA9IFttX3F0TW92aWUgbW92aWVU
eXBlXTsKLSAgICBzd2l0Y2ggKG1vdmllVHlwZSkgewotICAgIGNhc2UgUVRNb3ZpZVR5cGVMb2Nh
bDoKLSAgICBjYXNlIFFUTW92aWVUeXBlRmFzdFN0YXJ0OgotICAgICAgICByZXR1cm4gTWVkaWFQ
bGF5ZXI6Ok1vdmllTG9hZFR5cGU6OkRvd25sb2FkOwotICAgIGNhc2UgUVRNb3ZpZVR5cGVMaXZl
U3RyZWFtOgotICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6Ok1vdmllTG9hZFR5cGU6OkxpdmVT
dHJlYW07Ci0gICAgY2FzZSBRVE1vdmllVHlwZVN0b3JlZFN0cmVhbToKLSAgICAgICAgcmV0dXJu
IE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlOjpTdG9yZWRTdHJlYW07Ci0gICAgY2FzZSBRVE1v
dmllVHlwZVVua25vd246Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVy
OjpNb3ZpZUxvYWRUeXBlOjpVbmtub3duOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVRVEtpdDo6c2V0UHJlbG9hZChNZWRpYVBsYXllcjo6UHJlbG9hZCBwcmVsb2FkKQotewot
ICAgIG1fcHJlbG9hZCA9IHByZWxvYWQ7Ci0gICAgaWYgKG1fcHJlbG9hZCA9PSBNZWRpYVBsYXll
cjo6Tm9uZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3F0TW92aWUpCi0gICAgICAg
IHJlc3VtZUxvYWQoKTsKLSAgICBlbHNlIGlmIChtX3ByZWxvYWQgPT0gTWVkaWFQbGF5ZXI6OkF1
dG8pCi0gICAgICAgIFttX3F0TW92aWUuZ2V0KCkgc2V0QXR0cmlidXRlOltOU051bWJlciBudW1i
ZXJXaXRoQm9vbDpOT10gZm9yS2V5OkAiUVRNb3ZpZUxpbWl0UmVhZEFoZWFkQXR0cmlidXRlIl07
Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNldFByaXZhdGVCcm93c2luZ01v
ZGUoYm9vbCBwcml2YXRlQnJvd3NpbmcpCi17Ci0gICAgbV9wcml2YXRlQnJvd3NpbmcgPSBwcml2
YXRlQnJvd3Npbmc7Ci0gICAgaWYgKCFtX3F0TW92aWUpCi0gICAgICAgIHJldHVybjsKLSAgICBb
bV9xdE1vdmllLmdldCgpIHNldEF0dHJpYnV0ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6IXBy
aXZhdGVCcm93c2luZ10gZm9yS2V5OkAiUVRNb3ZpZUFsbG93UGVyc2lzdGVudENhY2hlQXR0cmli
dXRlIl07Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmNhblNhdmVNZWRpYURh
dGEoKSBjb25zdAotewotICAgIFVSTCB1cmw7Ci0KLSAgICBpZiAoZHVyYXRpb25NZWRpYVRpbWUo
KS5pc1Bvc2l0aXZlSW5maW5pdGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KG1fcXRNb3ZpZSkKLSAgICAgICAgdXJsID0gVVJMKFttX3F0TW92aWUgVVJMXSk7Ci0gICAgZWxz
ZQotICAgICAgICB1cmwgPSBVUkwoUGFyc2VkVVJMU3RyaW5nLCBtX21vdmllVVJMKTsKLQotICAg
IGlmICh1cmwuaXNMb2NhbEZpbGUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAo
dXJsLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0jaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RB
UkdFVCkKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNldFdpcmVsZXNzUGxheWJhY2tU
YXJnZXQoUmVmPE1lZGlhUGxheWJhY2tUYXJnZXQ+JiYgdGFyZ2V0KQotewotICAgIG1fcGxheWJh
Y2tUYXJnZXQgPSBXVEZNb3ZlKHRhcmdldCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
UVRLaXQ6OnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KGJvb2wgc2hvdWxkUGxheVRvVGFy
Z2V0KQotewotICAgIGlmIChzaG91bGRQbGF5VG9UYXJnZXQgPT0gbV9zaG91bGRQbGF5VG9UYXJn
ZXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2hvdWxkUGxheVRvVGFyZ2V0ID0gc2hvdWxk
UGxheVRvVGFyZ2V0OwotCi0gICAgaWYgKG1fcGxheWVyKQotICAgICAgICBtX3BsYXllci0+Y3Vy
cmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzc0NoYW5nZWQoKTsKLX0KLQotYm9vbCBNZWRpYVBs
YXllclByaXZhdGVRVEtpdDo6aXNDdXJyZW50UGxheWJhY2tUYXJnZXRXaXJlbGVzcygpIGNvbnN0
Ci17Ci0gICAgaWYgKCFtX3BsYXliYWNrVGFyZ2V0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgCi0gICAgcmV0dXJuIG1fc2hvdWxkUGxheVRvVGFyZ2V0ICYmIG1fcGxheWJhY2tUYXJnZXQt
Pmhhc0FjdGl2ZVJvdXRlKCk7Ci19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci1AaW1wbGVtZW50YXRpb24gV2ViQ29yZU1vdmllT2JzZXJ2ZXIKLQotLSAoaWQpaW5pdFdpdGhD
YWxsYmFjazooTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQqKWNhbGxiYWNrCi17Ci0gICAgbV9jYWxs
YmFjayA9IGNhbGxiYWNrOwotICAgIHJldHVybiBbc3VwZXIgaW5pdF07Ci19Ci0KLS0gKHZvaWQp
ZGlzY29ubmVjdAotewotICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0
c1dpdGhUYXJnZXQ6c2VsZl07Ci0gICAgbV9jYWxsYmFjayA9IDA7Ci19Ci0KLS0odm9pZClyZXBh
aW50Ci17Ci0gICAgaWYgKG1fZGVsYXlDYWxsYmFja3MpCi0gICAgICAgIFtzZWxmIHBlcmZvcm1T
ZWxlY3RvcjpfY21kIHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6MC5dOwotICAgIGVsc2UgaWYg
KG1fY2FsbGJhY2spCi0gICAgICAgIG1fY2FsbGJhY2stPnJlcGFpbnQoKTsKLX0KLQotLSAodm9p
ZClsb2FkU3RhdGVDaGFuZ2VkOihOU05vdGlmaWNhdGlvbiAqKXVudXNlZE5vdGlmaWNhdGlvbgot
ewotICAgIFVOVVNFRF9QQVJBTSh1bnVzZWROb3RpZmljYXRpb24pOwotICAgIGlmIChtX2RlbGF5
Q2FsbGJhY2tzKQotICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6X2NtZCB3aXRoT2JqZWN0
Om5pbCBhZnRlckRlbGF5OjBdOwotICAgIGVsc2UKLSAgICAgICAgbV9jYWxsYmFjay0+bG9hZFN0
YXRlQ2hhbmdlZCgpOwotfQotCi0tICh2b2lkKWxvYWRlZFJhbmdlc0NoYW5nZWQ6KE5TTm90aWZp
Y2F0aW9uICopdW51c2VkTm90aWZpY2F0aW9uCi17Ci0gICAgVU5VU0VEX1BBUkFNKHVudXNlZE5v
dGlmaWNhdGlvbik7Ci0gICAgaWYgKG1fZGVsYXlDYWxsYmFja3MpCi0gICAgICAgIFtzZWxmIHBl
cmZvcm1TZWxlY3RvcjpfY21kIHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6MF07Ci0gICAgZWxz
ZQotICAgICAgICBtX2NhbGxiYWNrLT5sb2FkZWRSYW5nZXNDaGFuZ2VkKCk7Ci19Ci0KLS0gKHZv
aWQpcmF0ZUNoYW5nZWQ6KE5TTm90aWZpY2F0aW9uICopdW51c2VkTm90aWZpY2F0aW9uCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKHVudXNlZE5vdGlmaWNhdGlvbik7Ci0gICAgaWYgKG1fZGVsYXlDYWxs
YmFja3MpCi0gICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpfY21kIHdpdGhPYmplY3Q6bmls
IGFmdGVyRGVsYXk6MF07Ci0gICAgZWxzZQotICAgICAgICBtX2NhbGxiYWNrLT5yYXRlQ2hhbmdl
ZCgpOwotfQotCi0tICh2b2lkKXNpemVDaGFuZ2VkOihOU05vdGlmaWNhdGlvbiAqKXVudXNlZE5v
dGlmaWNhdGlvbgotewotICAgIFVOVVNFRF9QQVJBTSh1bnVzZWROb3RpZmljYXRpb24pOwotICAg
IGlmIChtX2RlbGF5Q2FsbGJhY2tzKQotICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6X2Nt
ZCB3aXRoT2JqZWN0Om5pbCBhZnRlckRlbGF5OjBdOwotICAgIGVsc2UKLSAgICAgICAgbV9jYWxs
YmFjay0+c2l6ZUNoYW5nZWQoKTsKLX0KLQotLSAodm9pZCl0aW1lQ2hhbmdlZDooTlNOb3RpZmlj
YXRpb24gKil1bnVzZWROb3RpZmljYXRpb24KLXsKLSAgICBVTlVTRURfUEFSQU0odW51c2VkTm90
aWZpY2F0aW9uKTsKLSAgICBpZiAobV9kZWxheUNhbGxiYWNrcykKLSAgICAgICAgW3NlbGYgcGVy
Zm9ybVNlbGVjdG9yOl9jbWQgd2l0aE9iamVjdDpuaWwgYWZ0ZXJEZWxheTowXTsKLSAgICBlbHNl
Ci0gICAgICAgIG1fY2FsbGJhY2stPnRpbWVDaGFuZ2VkKCk7Ci19Ci0KLS0gKHZvaWQpZGlkRW5k
OihOU05vdGlmaWNhdGlvbiAqKXVudXNlZE5vdGlmaWNhdGlvbgotewotICAgIFVOVVNFRF9QQVJB
TSh1bnVzZWROb3RpZmljYXRpb24pOwotICAgIGlmIChtX2RlbGF5Q2FsbGJhY2tzKQotICAgICAg
ICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6X2NtZCB3aXRoT2JqZWN0Om5pbCBhZnRlckRlbGF5OjBd
OwotICAgIGVsc2UKLSAgICAgICAgbV9jYWxsYmFjay0+ZGlkRW5kKCk7Ci19Ci0KLS0gKHZvaWQp
bmV3SW1hZ2VBdmFpbGFibGU6KE5TTm90aWZpY2F0aW9uICopdW51c2VkTm90aWZpY2F0aW9uCi17
Ci0gICAgVU5VU0VEX1BBUkFNKHVudXNlZE5vdGlmaWNhdGlvbik7Ci0gICAgW3NlbGYgcmVwYWlu
dF07Ci19Ci0KLS0gKHZvaWQpbGF5ZXJIb3N0Q2hhbmdlZDooTlNOb3RpZmljYXRpb24gKilub3Rp
ZmljYXRpb24KLXsKLSAgICBDQUxheWVyKiByb290TGF5ZXIgPSBzdGF0aWNfY2FzdDxDQUxheWVy
Kj4oW25vdGlmaWNhdGlvbiBvYmplY3RdKTsKLSAgICBtX2NhbGxiYWNrLT5sYXllckhvc3RDaGFu
Z2VkKHJvb3RMYXllcik7Ci19Ci0KLS0gKHZvaWQpc2V0RGVsYXlDYWxsYmFja3M6KEJPT0wpc2hv
dWxkRGVsYXkKLXsKLSAgICBtX2RlbGF5Q2FsbGJhY2tzID0gc2hvdWxkRGVsYXk7Ci19Ci0KLUBl
bmQKLQotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcCAvLyBkZXByZWNhdGVkLWRlY2xhcmF0
aW9ucwotCi0jZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbQpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRl
bGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9NZWRpYVRpbWVRVEtpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9NZWRpYVRpbWVRVEtpdC5oCShyZXZpc2lvbiAyMjczNTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFUaW1lUVRLaXQuaAkobm9u
ZXhpc3RlbnQpCkBAIC0xLDQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIE1lZGlhVGlt
ZVFUS2l0X2gKLSNkZWZpbmUgTWVkaWFUaW1lUVRLaXRfaAotCi0jaWYgUExBVEZPUk0oTUFDKSAm
JiBVU0UoUVRLSVQpCi0KLSNpbXBvcnQgPHBhbC9zcGkvbWFjL1FUS2l0U1BJLmg+Ci0jaW1wb3J0
IDx3dGYvTWVkaWFUaW1lLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUVRUaW1lIHRvUVRU
aW1lKGNvbnN0IE1lZGlhVGltZSYpOwotTWVkaWFUaW1lIHRvTWVkaWFUaW1lKGNvbnN0IFFUVGlt
ZSYpOwotICAgIAotfQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIE1lZGlhVGltZVFUS2l0X2gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVRpbWVRVEtpdC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVk
aWFUaW1lUVRLaXQubW0JKHJldmlzaW9uIDIyNzM1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9NZWRpYVRpbWVRVEtpdC5tbQkobm9uZXhpc3RlbnQpCkBAIC0xLDY2
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTWVk
aWFUaW1lUVRLaXQuaCIKLQotI2lmIFBMQVRGT1JNKE1BQykgJiYgVVNFKFFUS0lUKQotCi0jaW1w
b3J0IDx3dGYvU29mdExpbmtpbmcuaD4KLQotU09GVF9MSU5LX0ZSQU1FV09SSyhRVEtpdCkKLVNP
RlRfTElOS19DT05TVEFOVChRVEtpdCwgUVRJbmRlZmluaXRlVGltZSwgUVRUaW1lKQotU09GVF9M
SU5LX0NPTlNUQU5UKFFUS2l0LCBRVFplcm9UaW1lLCBRVFRpbWUpCi1TT0ZUX0xJTksoUVRLaXQs
IFFUVGltZUNvbXBhcmUsIE5TQ29tcGFyaXNvblJlc3VsdCwgKFFUVGltZSB0aW1lLCBRVFRpbWUg
b3RoZXJUaW1lKSwgKHRpbWUsIG90aGVyVGltZSkpCi1TT0ZUX0xJTksoUVRLaXQsIFFUTWFrZVRp
bWUsIFFUVGltZSwgKGxvbmcgbG9uZyB0aW1lVmFsdWUsIGxvbmcgdGltZVNjYWxlKSwgKHRpbWVW
YWx1ZSwgdGltZVNjYWxlKSkKLVNPRlRfTElOSyhRVEtpdCwgUVRNYWtlVGltZVdpdGhUaW1lSW50
ZXJ2YWwsIFFUVGltZSwgKE5TVGltZUludGVydmFsIHRpbWVJbnRlcnZhbCksICh0aW1lSW50ZXJ2
YWwpKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLU1lZGlhVGltZSB0b01lZGlhVGltZShjb25z
dCBRVFRpbWUmIHF0VGltZSkKLXsKLSAgICBpZiAocXRUaW1lLmZsYWdzICYga1FUVGltZUlzSW5k
ZWZpbml0ZSkKLSAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6aW5kZWZpbml0ZVRpbWUoKTsKLSAg
ICByZXR1cm4gTWVkaWFUaW1lKHF0VGltZS50aW1lVmFsdWUsIHF0VGltZS50aW1lU2NhbGUpOwot
fQotCi1RVFRpbWUgdG9RVFRpbWUoY29uc3QgTWVkaWFUaW1lJiBtZWRpYVRpbWUpCi17Ci0gICAg
aWYgKG1lZGlhVGltZS5pc0luZGVmaW5pdGUoKSB8fCBtZWRpYVRpbWUuaXNJbnZhbGlkKCkpCi0g
ICAgICAgIHJldHVybiBnZXRRVEluZGVmaW5pdGVUaW1lKCk7Ci0gICAgaWYgKCFtZWRpYVRpbWUp
Ci0gICAgICAgIHJldHVybiBnZXRRVFplcm9UaW1lKCk7Ci0KLSNwcmFnbWEgY2xhbmcgZGlhZ25v
c3RpYyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVk
LWRlY2xhcmF0aW9ucyIKLSAgICBpZiAobWVkaWFUaW1lLmhhc0RvdWJsZVZhbHVlKCkpCi0gICAg
ICAgIHJldHVybiBRVE1ha2VUaW1lV2l0aFRpbWVJbnRlcnZhbChtZWRpYVRpbWUudG9Eb3VibGUo
KSk7Ci0gICAgcmV0dXJuIFFUTWFrZVRpbWUobWVkaWFUaW1lLnRpbWVWYWx1ZSgpLCBtZWRpYVRp
bWUudGltZVNjYWxlKCkpOwotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAotfQotCi19Ci0K
LSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0JKHJldmlzaW9uIDIyNzM1NSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxNCArMzksNiBAQAogI2ltcG9ydCA8d3RmL1JldGFp
blB0ci5oPgogI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+CiAKLSNpZiBVU0UoUVRLSVQpCi0j
aW1wb3J0IDxwYWwvc3BpL21hYy9RVEtpdFNQSS5oPgotU09GVF9MSU5LX0ZSQU1FV09SSyhRVEtp
dCkKLVNPRlRfTElOS19DTEFTUyhRVEtpdCwgUVRNb3ZpZUxheWVyKQotU09GVF9MSU5LX1BPSU5U
RVIoUVRLaXQsIFFUTW92aWVSYXRlRGlkQ2hhbmdlTm90aWZpY2F0aW9uLCBOU1N0cmluZyAqKQot
I2RlZmluZSBRVE1vdmllUmF0ZURpZENoYW5nZU5vdGlmaWNhdGlvbiBnZXRRVE1vdmllUmF0ZURp
ZENoYW5nZU5vdGlmaWNhdGlvbigpCi0jZW5kaWYKLQogdXNpbmcgV2ViQ29yZTo6SFRNTFZpZGVv
RWxlbWVudDsKIAogI2lmIENPTVBJTEVSKENMQU5HKQpAQCAtMTM0LDIwICsxMjYsNiBAQCAtICh2
b2lkKXNldFZpZGVvRWxlbWVudDooSFRNTFZpZGVvRWxlbWVuCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGlmIChbc2VsZiBpc1dpbmRvd0xvYWRlZF0pIHsKLSNpZiBVU0UoUVRLSVQpCi0gICAgICAg
IGlmIChfdmlkZW9FbGVtZW50LT5wbGF0Zm9ybU1lZGlhKCkudHlwZSA9PSBQbGF0Zm9ybU1lZGlh
OjpRVE1vdmllVHlwZSkgewotICAgICAgICAgICAgUVRNb3ZpZSAqbW92aWUgPSBfdmlkZW9FbGVt
ZW50LT5wbGF0Zm9ybU1lZGlhKCkubWVkaWEucXRNb3ZpZTsKLSAgICAgICAgICAgIFJldGFpblB0
cjxRVE1vdmllTGF5ZXI+IGxheWVyID0gYWRvcHROUyhbYWxsb2NRVE1vdmllTGF5ZXJJbnN0YW5j
ZSgpIGluaXRdKTsKLSAgICAgICAgICAgIFtsYXllci5nZXQoKSBzZXRNb3ZpZTptb3ZpZV07Ci0g
ICAgICAgICAgICBbc2VsZiBzZXR1cFZpZGVvT3ZlcmxheTpsYXllci5nZXQoKV07Ci0KLSAgICAg
ICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6
c2VsZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxlY3RvcjpAc2VsZWN0b3IocmF0ZUNoYW5nZWQ6KQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTpRVE1vdmllUmF0ZURpZENo
YW5nZU5vdGlmaWNhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9iamVjdDptb3ZpZV07Ci0KLSAgICAgICAgfSBlbHNlCi0jZW5kaWYK
ICAgICAgICAgaWYgKF92aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS50eXBlID09IFBsYXRm
b3JtTWVkaWE6OkFWRm91bmRhdGlvbk1lZGlhUGxheWVyVHlwZSkgewogICAgICAgICAgICAgQVZQ
bGF5ZXIgKnBsYXllciA9IF92aWRlb0VsZW1lbnQtPnBsYXRmb3JtTWVkaWEoKS5tZWRpYS5hdmZN
ZWRpYVBsYXllcjsKICAgICAgICAgICAgIFJldGFpblB0cjxBVlBsYXllckxheWVyPiBsYXllciA9
IGFkb3B0TlMoW2FsbG9jQVZQbGF5ZXJMYXllckluc3RhbmNlKCkgaW5pdF0pOwpAQCAtMzY1LDE3
ICszNDMsNyBAQCAtICh2b2lkKXVwZGF0ZU1lbnVBbmREb2NrRm9yRnVsbHNjcmVlbgogCiAtICh2
b2lkKXVwZGF0ZVBvd2VyQXNzZXJ0aW9ucwogewotI2lmIFVTRShRVEtJVCkKLSAgICBmbG9hdCBy
YXRlID0gMDsKLSAgICBpZiAoX3ZpZGVvRWxlbWVudCAmJiBfdmlkZW9FbGVtZW50LT5wbGF0Zm9y
bU1lZGlhKCkudHlwZSA9PSBQbGF0Zm9ybU1lZGlhOjpRVE1vdmllVHlwZSkKLSAgICAgICAgcmF0
ZSA9IFtfdmlkZW9FbGVtZW50LT5wbGF0Zm9ybU1lZGlhKCkubWVkaWEucXRNb3ZpZSByYXRlXTsK
LSAgICAKLSAgICBpZiAocmF0ZSAmJiAhX2lzRW5kaW5nRnVsbHNjcmVlbikgewotICAgICAgICBp
ZiAoIV9kaXNwbGF5U2xlZXBEaXNhYmxlcikKLSAgICAgICAgICAgIF9kaXNwbGF5U2xlZXBEaXNh
YmxlciA9IFBBTDo6U2xlZXBEaXNhYmxlcjo6Y3JlYXRlKCJjb20uYXBwbGUuV2ViQ29yZSAtIEZ1
bGxzY3JlZW4gdmlkZW8iLCBQQUw6OlNsZWVwRGlzYWJsZXI6OlR5cGU6OkRpc3BsYXkpOwotICAg
IH0gZWxzZQotI2VuZGlmCi0gICAgICAgIF9kaXNwbGF5U2xlZXBEaXNhYmxlciA9IG51bGxwdHI7
CisgICAgX2Rpc3BsYXlTbGVlcERpc2FibGVyID0gbnVsbHB0cjsKIH0KIAogLy8gTUFSSzogLQo=
</data>
<flag name="review"
          id="350947"
          type_id="1"
          status="+"
          setter="jer.noble"
    />
          </attachment>
      

    </bug>

</bugzilla>