public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* c++/2915: gcc 3.0 using std::less is ignored
@ 2001-05-23  8:26 tot
  0 siblings, 0 replies; only message in thread
From: tot @ 2001-05-23  8:26 UTC (permalink / raw)
  To: gcc-gnats

>Number:         2915
>Category:       c++
>Synopsis:       gcc 3.0 using std::less is ignored
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    unassigned
>State:          open
>Class:          rejects-legal
>Submitter-Id:   net
>Arrival-Date:   Wed May 23 08:26:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     Teemu Torma
>Release:        gcc-3.0-20010523
>Organization:
>Environment:
RedHat Linux i686
>Description:
gcc does not seem to find template class less even after
"using std::less".  This code is from xalan XSL processor.
This is regression from 2.95.2 which works ok.
>How-To-Repeat:
Reading specs from /usr/local/gcc3/lib/gcc-lib/i686-pc-linux-gnu/3.0/specs
Configured with: ../gcc-3.0-branch/configure --with-gcc-version-trigger=/work/tot/gcc/3.0/gcc-3.0-branch/gcc/version.c --host=i686-pc-linux-gnu --prefix=/usr/local/gcc3 --enable-version-specific-runtime-libs --enable-long-long
Thread model: single
gcc version 3.0 20010523 (prerelease)
 /usr/local/gcc3/lib/gcc-lib/i686-pc-linux-gnu/3.0/cc1plus -fpreprocessed bug-2.i -quiet -dumpbase bug-2.i -version -o /tmp/ccaKUcoc.s
GNU CPP version 3.0 20010523 (prerelease) (cpplib) (i386 Linux/ELF)
GNU C++ version 3.0 20010523 (prerelease) (i686-pc-linux-gnu)
	compiled by GNU C version 3.0 20010523 (prerelease).
In file included from PlatformSupport/ArenaAllocator.hpp:68,
                 from XalanSourceTree/XalanSourceTreeAttributeAllocator.hpp:67,
                 from XalanSourceTree/XalanSourceTreeDocument.hpp:80,
                 from XalanSourceTree/FormatterToSourceTree.cpp:84:
PlatformSupport/ArenaBlock.hpp: In member function `virtual bool 
   ArenaBlock<ObjectType>::ownsObject(const ObjectType*) const':
PlatformSupport/ArenaBlock.hpp:277: parse error before `;' token
PlatformSupport/ArenaBlock.hpp: In member function `bool 
   ArenaBlock<ObjectType>::ownsBlock(const ObjectType*) const':
PlatformSupport/ArenaBlock.hpp:307: parse error before `;' token
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="bug-2.i"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="bug-2.i"

IyA1OCAiWGFsYW5Tb3VyY2VUcmVlL0Zvcm1hdHRlclRvU291cmNlVHJlZS5jcHAiCiMgMSAiWGFs
YW5Tb3VyY2VUcmVlL0Zvcm1hdHRlclRvU291cmNlVHJlZS5ocHAiIDEKIyA2MyAiWGFsYW5Tb3Vy
Y2VUcmVlL0Zvcm1hdHRlclRvU291cmNlVHJlZS5ocHAiCiMgMSAiWGFsYW5Tb3VyY2VUcmVlL1hh
bGFuU291cmNlVHJlZURlZmluaXRpb25zLmhwcCIgMQojIDYyICJYYWxhblNvdXJjZVRyZWUvWGFs
YW5Tb3VyY2VUcmVlRGVmaW5pdGlvbnMuaHBwIgojIDEgIkluY2x1ZGUvUGxhdGZvcm1EZWZpbml0
aW9ucy5ocHAiIDEKIyA2MyAiSW5jbHVkZS9QbGF0Zm9ybURlZmluaXRpb25zLmhwcCIKIyAxICJJ
bmNsdWRlL0dDQ0RlZmluaXRpb25zLmhwcCIgMQojIDY0ICJJbmNsdWRlL1BsYXRmb3JtRGVmaW5p
dGlvbnMuaHBwIiAyCiMgNjMgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVEZWZpbml0
aW9ucy5ocHAiIDIKIyA2NCAiWGFsYW5Tb3VyY2VUcmVlL0Zvcm1hdHRlclRvU291cmNlVHJlZS5o
cHAiIDIKCgoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4wL2luY2x1ZGUvZysrL3ZlY3RvciIgMSAzCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfdmVjdG9y
LmgiIDEgMwojIDMxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX3ZlY3Rvci5oIiAzCgojIDEgIi91c3IvbG9jYWwv
Z2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9m
dW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIv
dXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUv
ZysrL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2djYzMvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvZnVuY3RleGNlcHQu
aCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2
b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Ro
cm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoK
CiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog
IF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93
X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVu
Z3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5n
ZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0
IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9f
cyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7Cgog
IHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9p
ZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDMzICIvdXNyL2xv
Y2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2Jp
dHMvc3RkX3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwoj
IDM1ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2k2ODYtcGMtbGludXgt
Z251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2k2ODYtcGMtbGludXgtZ251L2Jp
dHMvYysrY29uZmlnLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1w
Yy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2k2ODYtcGMtbGludXgtZ251L2JpdHMvb3NfZGVm
aW5lcy5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMC9pbmNsdWRlL2crKy9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL29zX2RlZmluZXMu
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNTAgIi91c3IvaW5jbHVk
ZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMKIyAyNTEg
Ii91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAyNzggIi91c3IvaW5jbHVkZS9mZWF0dXJl
cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMKIyAyNzkgIi91c3IvaW5j
bHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAzOCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL29z
X2RlZmluZXMuaCIgMiAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25m
aWcuaCIgMiAzCiMgMzYgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgojIDEgIi91c3Iv
bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysv
Yml0cy9zdGxfcGFpci5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9wYWlyLmgiIDMKbmFtZXNw
YWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CnN0cnVjdCBwYWlyIHsK
ICB0eXBlZGVmIF9UMSBmaXJzdF90eXBlOwogIHR5cGVkZWYgX1QyIHNlY29uZF90eXBlOwoKICBf
VDEgZmlyc3Q7CiAgX1QyIHNlY29uZDsKICBwYWlyKCkgOiBmaXJzdChfVDEoKSksIHNlY29uZChf
VDIoKSkge30KICBwYWlyKGNvbnN0IF9UMSYgX19hLCBjb25zdCBfVDImIF9fYikgOiBmaXJzdChf
X2EpLCBzZWNvbmQoX19iKSB7fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1UxLCBjbGFzcyBfVTI+CiAg
cGFpcihjb25zdCBwYWlyPF9VMSwgX1UyPiYgX19wKSA6IGZpcnN0KF9fcC5maXJzdCksIHNlY29u
ZChfX3Auc2Vjb25kKSB7fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8
X1QxLCBfVDI+JiBfX3kpCnsKICByZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJzdCAmJiBfX3gu
c2Vjb25kID09IF9feS5zZWNvbmQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4K
aW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBh
aXI8X1QxLCBfVDI+JiBfX3kpCnsKICByZXR1cm4gX194LmZpcnN0IDwgX195LmZpcnN0IHx8CiAg
ICAgICAgICghKF9feS5maXJzdCA8IF9feC5maXJzdCkgJiYgX194LnNlY29uZCA8IF9feS5zZWNv
bmQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9f
eSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFz
cyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBj
b25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IHBh
aXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4g
IShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBi
b29sIG9wZXJhdG9yPj0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEs
IF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
VDEsIGNsYXNzIF9UMj4KCgppbmxpbmUgcGFpcjxfVDEsIF9UMj4gbWFrZV9wYWlyKGNvbnN0IF9U
MSBfX3gsIGNvbnN0IF9UMiBfX3kpCgoKCnsKICByZXR1cm4gcGFpcjxfVDEsIF9UMj4oX194LCBf
X3kpOwp9Cgp9CiMgMzggIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKIyAxICIvdXNy
L2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysr
L2JpdHMvdHlwZV90cmFpdHMuaCIgMSAzCiMgMTkgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy90eXBlX3RyYWl0cy5oIiAz
CgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAv
aW5jbHVkZS9nKysvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgMjEg
Ii91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk
ZS9nKysvYml0cy90eXBlX3RyYWl0cy5oIiAyIDMKIyA1NyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3R5cGVfdHJhaXRz
LmgiIDMKdGVtcGxhdGUgPGJvb2wgX1RydXRoPiBzdHJ1Y3QgX0Jvb2wge307CnR5cGVkZWYgX0Jv
b2w8dHJ1ZT4gX190cnVlX3R5cGU7CnR5cGVkZWYgX0Jvb2w8ZmFsc2U+IF9fZmFsc2VfdHlwZTsK
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRzIHsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSB0aGlzX2R1bW15X21lbWJlcl9tdXN0X2JlX2ZpcnN0OwojIDgxICIvdXNyL2xv
Y2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2Jp
dHMvdHlwZV90cmFpdHMuaCIgMwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9k
ZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9j
b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9hc3Np
Z25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9kZXN0
cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBpc19QT0RfdHlwZTsKfTsKCgoKCnRlbXBs
YXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8Ym9vbD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07
Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGNoYXI+IHsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90
eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaWduZWQgY2hhcj4gewog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVu
c2lnbmVkIGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0
X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29u
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v
cGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg
X190eXBlX3RyYWl0czx3Y2hhcl90PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fz
c2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVz
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRl
PD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2hvcnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoK
dGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBzaG9ydD4gewogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGludD4gewog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVu
c2lnbmVkIGludD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf
Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w
ZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBf
X3R5cGVfdHJhaXRzPGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k
ZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Nv
cHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdu
bWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBz
dHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsK
fTsKIyAxOTkgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjAvaW5jbHVkZS9nKysvYml0cy90eXBlX3RyYWl0cy5oIiAzCnRlbXBsYXRlPD4gc3RydWN0IF9f
dHlwZV90cmFpdHM8ZmxvYXQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k
ZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Nv
cHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdu
bWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBz
dHJ1Y3QgX190eXBlX3RyYWl0czxkb3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVt
cGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nIGRvdWJsZT4gewogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9E
X3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0czxfVHAq
PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBzdHJ1
Y3QgX0lzX2ludGVnZXIgewogIHR5cGVkZWYgX19mYWxzZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRl
bXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGJvb2w+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGNoYXI+IHsKICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19p
bnRlZ2VyPHNpZ25lZCBjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07
Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBjaGFyPiB7CiAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdl
cjx3Y2hhcl90PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0
ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxzaG9ydD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0lu
dGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgc2hvcnQ+
IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0
IF9Jc19pbnRlZ2VyPGludD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoK
dGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgaW50PiB7CiAgdHlwZWRlZiBf
X3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxs
b25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0
cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBf
SW50ZWdyYWw7Cn07CiMgMjk2ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvdHlwZV90cmFpdHMuaCIgMwp0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+IHN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yIHsKICAgdHlwZWRlZiBfX2Zh
bHNlX3R5cGUgX05vcm1hbDsKfTsKCgpuYW1lc3BhY2Ugc3RkIHsKICAgdGVtcGxhdGU8dHlwZW5h
bWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPiBjbGFzcyBfX25vcm1hbF9pdGVyYXRv
cjsKfTsKCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4K
c3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3I8IHN0ZDo6X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh
dG9yLCBfQ29udGFpbmVyPiA+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBfTm9ybWFsOwp9Owoj
IDQxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAxICIvdXNyL2xvY2FsL2djYzMv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2Nz
dHJpbmcuaCIgMSAzCiMgMzkgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0cmluZy5oIiAzCiMgMSAiL3Vzci9s
b2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9p
Njg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9n
Y2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0
ZF9jc3RyaW5nLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyA0MCAi
L3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl
L2crKy9iaXRzL3N0ZF9jc3RkZGVmLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDE0NyAiL3Vz
ci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0
ZGRlZi5oIiAzCnR5cGVkZWYgaW50IHB0cmRpZmZfdDsKIyAxOTkgIi91c3IvbG9jYWwvZ2NjMy9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBl
ZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7CiMgNDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGRlZi5oIiAy
IDMKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6cHRyZGlmZl90OwogIHVzaW5nIDo6c2l6ZV90
Owp9CiMgNDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0cmluZy5oIiAyIDMKIyA1MSAiL3Vzci9sb2NhbC9n
Y2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0
ZF9jc3RyaW5nLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwojIDI2ICIvdXNy
L2luY2x1ZGUvc3RyaW5nLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMg
MjcgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCiMgMSAiL3Vz
ci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0
ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgoKZXh0ZXJuIHZv
aWQgKiBtZW1jcHkgKHZvaWQgKiBfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB2b2lkICogX19y
ZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkICogbWVt
bW92ZSAodm9pZCAqIF9fZGVzdCwgX19jb25zdCB2b2lkICogX19zcmMsIHNpemVfdCBfX24pIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gdm9pZCAqIG1lbWNjcHkgKHZvaWQgKiBfX2Rlc3QsIF9fY29u
c3Qgdm9pZCAqIF9fc3JjLCBpbnQgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gdm9pZCAqIG1lbXNldCAodm9pZCAqIF9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBtZW1jbXAgKF9fY29uc3Qgdm9pZCAqIF9fczEsIF9fY29uc3Qgdm9p
ZCAqIF9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCAqIF9fZ2xpYmNw
cF9tZW1jaHIgKF9fY29uc3Qgdm9pZCAqIF9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgdGhyb3cg
KCk7CgoKCgpleHRlcm4gdm9pZCAqIHJhd21lbWNociAoX19jb25zdCB2b2lkICogX19zLCBpbnQg
X19jKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3Qg
X19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoKCmV4dGVy
biBjaGFyICpzdHJuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnN0
cmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X3NyYykgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3Qg
X19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IHN0cmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNo
YXIgKl9fczIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzdHJuY21wIChfX2NvbnN0IGNoYXIgKl9f
czEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBzdHJjb2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgdGhyb3cg
KCk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgoj
IDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUveGxvY2Fs
ZS5oIiAzCnR5cGVkZWYgc3RydWN0IF9fbG9jYWxlX3N0cnVjdAp7CiAgc3RydWN0IGxvY2FsZV9k
YXRhICpfX2xvY2FsZXNbNl07CgoKICBjb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVf
YjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG9sb3dlcjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG91
cHBlcjsKfSAqX19sb2NhbGVfdDsKIyAxMDAgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoK
ZXh0ZXJuIGludCBfX3N0cmNvbGxfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIg
Kl9fczIsIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IF9fc3RyeGZy
bV9sIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNpemVfdCBfX24sIF9fbG9j
YWxlX3QgX19sKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqX19zdHJkdXAgKF9fY29uc3Qg
Y2hhciAqX19zKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnN0cmR1cCAoX19jb25zdCBjaGFyICpf
X3MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqc3RybmR1cCAoX19jb25zdCBjaGFyICpf
X3N0cmluZywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CiMgMTQ2ICIvdXNyL2luY2x1ZGUvc3RyaW5n
LmgiIDMKZXh0ZXJuIGNoYXIgKl9fZ2xpYmNwcF9zdHJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBp
bnQgX19jKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpfX2dsaWJjcHBfc3RycmNociAoX19jb25z
dCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNocm51
bCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVf
dCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX3JlamVjdCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0
IGNoYXIgKl9fYWNjZXB0KSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpfX2dsaWJjcHBfc3RycGJy
ayAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpIHRocm93ICgpOwoK
ZXh0ZXJuIGNoYXIgKl9fZ2xpYmNwcF9zdHJzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywg
X19jb25zdCBjaGFyICpfX25lZWRsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpfX3N0cmNh
c2VzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkg
dGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RyY2FzZXN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0
YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpz
dHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19k
ZWxpbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hhciAqX19yZXN0
cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLCBjaGFyICoqX19yZXN0
cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFy
ICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sIGNoYXIg
KipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwojIDE5NCAiL3Vzci9pbmNsdWRlL3N0
cmluZy5oIiAzCmV4dGVybiB2b2lkICogbWVtbWVtIChfX2NvbnN0IHZvaWQgKiBfX2hheXN0YWNr
LCBzaXplX3QgX19oYXlzdGFja2xlbiwgX19jb25zdCB2b2lkICogX19uZWVkbGUsIHNpemVfdCBf
X25lZWRsZWxlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCAqIF9fbWVtcGNweSAodm9pZCAq
IF9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKiBfX3Jlc3RyaWN0IF9fc3JjLCBzaXpl
X3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkICogbWVtcGNweSAodm9pZCAqIF9fcmVzdHJp
Y3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKiBfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpfX3MpIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJubGVuIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5n
LCBzaXplX3QgX19tYXhsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yIChp
bnQgX19lcnJudW0pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zdHJlcnJvcl9yIChpbnQg
X19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwpleHRlcm4g
Y2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVm
bGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIF9fYnplcm8gKHZvaWQgKiBfX3MsIHNpemVf
dCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBiY29weSAoX19jb25zdCB2b2lkICogX19z
cmMsIHZvaWQgKiBfX2Rlc3QsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGJ6
ZXJvICh2b2lkICogX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGJjbXAg
KF9fY29uc3Qgdm9pZCAqIF9fczEsIF9fY29uc3Qgdm9pZCAqIF9fczIsIHNpemVfdCBfX24pIHRo
cm93ICgpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2Mp
IHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQg
X19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZmcyAoaW50IF9faSkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKGNvbnN0KSk7CmV4dGVybiBpbnQgZmZzIChpbnQgX19pKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCgoKCmV4dGVybiBpbnQgZmZzbCAobG9uZyBpbnQgX19s
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJu
IGludCBmZnNsbCAobG9uZyBsb25nIGludCBfX2xsKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRl
X18gKChjb25zdCkpOwoKCgoKZXh0ZXJuIGludCBfX3N0cmNhc2VjbXAgKF9fY29uc3QgY2hhciAq
X19zMSwgX19jb25zdCBjaGFyICpfX3MyKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBzdHJjYXNlY21w
IChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9f
czIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IF9fc3RyY2FzZWNtcF9s
IChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgX19sb2NhbGVfdCBfX2xv
YykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3N0cm5jYXNlY21wX2wgKF9fY29uc3QgY2hhciAq
X19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKSB0
aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hhciAqKl9fcmVzdHJpY3QgX19z
dHJpbmdwLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIGludCBzdHJ2ZXJzY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAq
X19zMikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cnNpZ25hbCAoaW50IF9fc2lnKSB0aHJv
dyAoKTsKCgpleHRlcm4gY2hhciAqX19zdHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0
cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X3NyYykgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqX19zdHBuY3B5IChjaGFyICpfX3Jlc3Ry
aWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0
aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGNoYXIgKnN0cmZyeSAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCmV4dGVybiB2
b2lkICogbWVtZnJvYiAodm9pZCAqIF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCmV4
dGVybiBjaGFyICpiYXNlbmFtZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsK
IyAzNTAgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwp9CiMgNTIgIi91c3IvbG9jYWwvZ2NjMy9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0
cmluZy5oIiAyIDMKIyA3NyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RyaW5nLmgiIDMKbmFtZXNwYWNlIHN0
ZAp7CiAgZXh0ZXJuICJDIiB2b2lkKiBtZW1jcHkodm9pZCosIGNvbnN0IHZvaWQqLCBzaXplX3Qp
OwogIGV4dGVybiAiQyIgdm9pZCogbWVtbW92ZSh2b2lkKiwgY29uc3Qgdm9pZCosIHNpemVfdCk7
CiAgZXh0ZXJuICJDIiBjaGFyKiBzdHJjcHkoY2hhciosIGNvbnN0IGNoYXIqKTsKICBleHRlcm4g
IkMiIGNoYXIqIHN0cm5jcHkoY2hhciosIGNvbnN0IGNoYXIqLCBzaXplX3QpOwogIGV4dGVybiAi
QyIgY2hhciogc3RyY2F0KGNoYXIqLCBjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBjaGFyKiBz
dHJuY2F0KGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsKICBleHRlcm4gIkMiIGludCBtZW1j
bXAoY29uc3Qgdm9pZCosIGNvbnN0IHZvaWQqLCBzaXplX3QpOwogIGV4dGVybiAiQyIgaW50IHN0
cmNtcChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOwogIGV4dGVybiAiQyIgaW50IHN0cmNvbGwo
Y29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKICBleHRlcm4gIkMiIGludCBzdHJuY21wKGNvbnN0
IGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsKICBleHRlcm4gIkMiIHNpemVfdCBzdHJ4ZnJt
KGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsKICBleHRlcm4gIkMiIGNvbnN0IHZvaWQqIG1l
bWNocihjb25zdCB2b2lkKiwgaW50LCBzaXplX3QpOwogIGlubGluZSB2b2lkKgogIG1lbWNocih2
b2lkKiBfX3AsIGludCBfX2MsIHNpemVfdCBfX24pCiAgewogICAgcmV0dXJuIGNvbnN0X2Nhc3Q8
dm9pZCo+KG1lbWNocihjb25zdF9jYXN0PGNvbnN0IHZvaWQqPihfX3ApLCBfX2MsIF9fbikpOwog
IH0KICBleHRlcm4gIkMiIGNvbnN0IGNoYXIqIHN0cmNocihjb25zdCBjaGFyKiwgaW50KTsKICBp
bmxpbmUgY2hhcioKICBzdHJjaHIoY2hhciogX19zMSwgaW50IF9fbikKICB7CiAgICByZXR1cm4g
Y29uc3RfY2FzdDxjaGFyKj4oc3RyY2hyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBf
X24pKTsKICB9CiAgZXh0ZXJuICJDIiBzaXplX3Qgc3RyY3Nwbihjb25zdCBjaGFyKiwgY29uc3Qg
Y2hhciopOwogIGV4dGVybiAiQyIgY29uc3QgY2hhciogc3RycGJyayhjb25zdCBjaGFyKiwgY29u
c3QgY2hhciopOwogIGlubGluZSBjaGFyKgogIHN0cnBicmsoY2hhciogX19zMSwgY29uc3QgY2hh
ciogX19zMikKICB7CiAgICByZXR1cm4gY29uc3RfY2FzdDxjaGFyKj4oc3RycGJyayhjb25zdF9j
YXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19zMikpOwogIH0KICBleHRlcm4gIkMiIGNvbnN0IGNo
YXIqIHN0cnJjaHIoY29uc3QgY2hhciosIGludCk7CiAgaW5saW5lIGNoYXIqCiAgc3RycmNocihj
aGFyKiBfX3MxLCBpbnQgX19uKQogIHsKICAgIHJldHVybiBjb25zdF9jYXN0PGNoYXIqPihzdHJy
Y2hyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX24pKTsKICB9CiAgZXh0ZXJuICJD
IiBzaXplX3Qgc3Ryc3BuKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBj
b25zdCBjaGFyKiBzdHJzdHIoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKICBpbmxpbmUgY2hh
cioKICBzdHJzdHIoY2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikKICB7CiAgICByZXR1cm4g
Y29uc3RfY2FzdDxjaGFyKj4oc3Ryc3RyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBf
X3MyKSk7CiAgfQogIGV4dGVybiAiQyIgY2hhciogc3RydG9rKGNoYXIqLCBjb25zdCBjaGFyKik7
CiAgZXh0ZXJuICJDIiB2b2lkKiBtZW1zZXQodm9pZCosIGludCwgc2l6ZV90KTsKICBleHRlcm4g
IkMiIGNoYXIqIHN0cmVycm9yKGludCk7CiAgZXh0ZXJuICJDIiBzaXplX3Qgc3RybGVuKGNvbnN0
IGNoYXIqKTsKfQojIDQzICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51
eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3Iv
bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysv
Yml0cy9zdGRfY2xpbWl0cy5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jbGltaXRzLmgiIDMK
IyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvbGltaXRzLmgiIDEgMwojIDExICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2xvY2FsL2dj
YzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3lzbGltaXRzLmgi
IDEgMwoKCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMTMwICIvdXNyL2xvY2FsL2djYzMvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9saW1p
dHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAxIDMKIyAx
MjYgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9i
aXRzL2xvY2FsX2xpbS5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvbGludXgvbGltaXRzLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1
ZGUvYml0cy9sb2NhbF9saW0uaCIgMiAzCiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFf
bGltLmgiIDIgMwojIDMxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL3Bvc2l4Ml9saW0uaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9saW1pdHMu
aCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDEgMwojIDM0ICIv
dXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0
ZGlvX2xpbS5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDIgMwoj
IDM5ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDEzMSAiL3Vzci9sb2NhbC9nY2MzL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyA4
ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1
ZGUvc3lzbGltaXRzLmgiIDIgMwojIDEyICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDQxICIvdXNyL2xvY2Fs
L2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMv
c3RkX2NsaW1pdHMuaCIgMiAzCiMgNDQgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMg
MSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNs
dWRlL2crKy9iaXRzL3N0ZF9jc3RkbGliLmgiIDEgMwojIDM5ICIvdXNyL2xvY2FsL2djYzMvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRs
aWIuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8zLjAvaW5jbHVkZS9nKysvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAz
CiMgNDAgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAv
aW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGxpYi5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2Nz
dGRkZWYuaCIgMSAzCiMgNDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGxpYi5oIiAyIDMKIyA0MyAiL3Vz
ci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2cr
Ky9iaXRzL3N0ZF9jc3RkbGliLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDEgMwoj
IDI1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMu
aCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgoKCgojIDEgIi91c3Iv
bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRk
ZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgpleHRlcm4gIkMiIHsK
CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBxdW90OwogICAgaW50IHJlbTsKICB9IGRp
dl90OwoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGlu
dCByZW07CiAgfSBsZGl2X3Q7CgoKCgoKX19leHRlbnNpb25fXyB0eXBlZGVmIHN0cnVjdAogIHsK
ICAgIGxvbmcgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgbG9uZyBpbnQgcmVtOwogIH0gbGxkaXZf
dDsKIyA4MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBzaXplX3QgX19jdHlwZV9n
ZXRfbWJfY3VyX21heCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgYXRvZiAoX19j
b25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBhdG9pIChfX2NvbnN0IGNo
YXIgKl9fbnB0cikgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFy
ICpfX25wdHIpIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50
IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUg
c3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmlj
dCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgc3RydG9mIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cg
KCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIHN0cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBsb25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgpleHRlcm4gdW5z
aWduZWQgbG9uZyBpbnQgc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKCl9f
ZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9xIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkg
dGhyb3cgKCk7CgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBz
dHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CiMgMTMyICIvdXNyL2luY2x1ZGUvc3Rk
bGliLmgiIDMKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg
aW50IF9fYmFzZSkgdGhyb3cgKCk7CgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9u
ZyBsb25nIGludCBzdHJ0b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwojIDE1NyAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMg
MTU4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0
b2xfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgpleHRl
cm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBfX2xvY2Fs
ZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGlu
dCBfX3N0cnRvbGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgp
OwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91
bGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCmV4
dGVybiBkb3VibGUgX19zdHJ0b2RfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK
CmV4dGVybiBmbG9hdCBfX3N0cnRvZl9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy
LCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7
CgoKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykg
dGhyb3cgKCk7CiMgMTk2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGRvdWJsZSBf
X3N0cnRvZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgpleHRlcm4gZmxv
YXQgX19zdHJ0b2ZfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNo
YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgpleHRlcm4g
bG9uZyBkb3VibGUgX19zdHJ0b2xkX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0
IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2Us
IGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19z
dHJ0b3VsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsK
CgoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19zdHJ0b2xsX2ludGVy
bmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0ciwgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKCl9fZXh0ZW5z
aW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAo
X19jb25zdCBjaGFyICogX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKiogX19yZXN0cmljdCBfX2Vu
ZHB0ciwgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwojIDMzMyAiL3Vzci9pbmNs
dWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpsNjRhIChsb25nIGludCBfX24pIHRocm93ICgp
OwoKCmV4dGVybiBsb25nIGludCBhNjRsIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoK
IyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3lz
L3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3Iv
aW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRl
L2JpdHMvdHlwZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKIyAx
ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9iaXRzL3R5
cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2JpdHMv
dHlwZXMuaCIgMiAzCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFyOwp0eXBlZGVmIHVu
c2lnbmVkIHNob3J0IF9fdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIF9fdV9sb25nOwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2ln
bmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcg
bG9uZyBpbnQgX19xdWFkX3Q7CiMgNDkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKdHlw
ZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdWludDhf
dDsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50IF9faW50MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBz
aG9ydCBpbnQgX191aW50MTZfdDsKdHlwZWRlZiBzaWduZWQgaW50IF9faW50MzJfdDsKdHlwZWRl
ZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzaWduZWQg
bG9uZyBsb25nIGludCBfX2ludDY0X3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBs
b25nIGxvbmcgaW50IF9fdWludDY0X3Q7Cgp0eXBlZGVmIF9fcXVhZF90ICpfX3FhZGRyX3Q7Cgp0
eXBlZGVmIF9fdV9xdWFkX3QgX19kZXZfdDsKdHlwZWRlZiBfX3VfaW50IF9fdWlkX3Q7CnR5cGVk
ZWYgX191X2ludCBfX2dpZF90Owp0eXBlZGVmIF9fdV9sb25nIF9faW5vX3Q7CnR5cGVkZWYgX191
X2ludCBfX21vZGVfdDsKdHlwZWRlZiBfX3VfaW50IF9fbmxpbmtfdDsKdHlwZWRlZiBsb25nIGlu
dCBfX29mZl90Owp0eXBlZGVmIF9fcXVhZF90IF9fbG9mZl90Owp0eXBlZGVmIGludCBfX3BpZF90
Owp0eXBlZGVmIGludCBfX3NzaXplX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19ybGltX3Q7CnR5cGVk
ZWYgX19xdWFkX3QgX19ybGltNjRfdDsKdHlwZWRlZiBfX3VfaW50IF9faWRfdDsKCnR5cGVkZWYg
c3RydWN0CiAgewogICAgaW50IF9fdmFsWzJdOwogIH0gX19mc2lkX3Q7CgoKdHlwZWRlZiBpbnQg
X19kYWRkcl90Owp0eXBlZGVmIGNoYXIgKl9fY2FkZHJfdDsKdHlwZWRlZiBsb25nIGludCBfX3Rp
bWVfdDsKdHlwZWRlZiBsb25nIGludCBfX3N3YmxrX3Q7Cgp0eXBlZGVmIGxvbmcgaW50IF9fY2xv
Y2tfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fZmRfbWFzazsKIyAxMDAgIi91c3Iv
aW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKICB7CgoKCiAgICBfX2ZkX21h
c2sgZmRzX2JpdHNbMTAyNCAvICg4ICogc2l6ZW9mIChfX2ZkX21hc2spKV07CgoKCgoKICB9IF9f
ZmRfc2V0OwoKCnR5cGVkZWYgaW50IF9fa2V5X3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBp
bnQgX19pcGNfcGlkX3Q7CgoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90Owp0eXBlZGVm
IF9fcXVhZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNibGtjbnRfdDsK
dHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19m
c2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgoKdHlwZWRlZiBf
X3VfbG9uZyBfX2lubzY0X3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7CgoKdHlwZWRl
ZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX190X3Vz
Y2FsYXJfdDsKCgp0eXBlZGVmIGludCBfX2ludHB0cl90OwoKCgoKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy9wdGhyZWFkdHlwZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0
eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCiMgNjggIi91c3Iv
aW5jbHVkZS9iaXRzL3NjaGVkLmgiIDMKc3RydWN0IF9fc2NoZWRfcGFyYW0KICB7CiAgICBpbnQg
c2NoZWRfcHJpb3JpdHk7CiAgfTsKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVz
LmgiIDIgMwoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQgX19zdGF0dXM7
CiAgaW50IF9fc3BpbmxvY2s7Cn07CgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2Rlc2NyX3N0
cnVjdCAqX3B0aHJlYWRfZGVzY3I7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2RldGFj
aHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3NjaGVkX3BhcmFtIF9fc2No
ZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2NvcGU7CiAgc2l6ZV90IF9f
Z3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAqX19zdGFja2FkZHI7CiAg
c2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCgp0eXBlZGVmIHN0cnVjdAp7
CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fY19sb2NrOwogIF9wdGhyZWFkX2Rlc2NyIF9f
Y193YWl0aW5nOwp9IHB0aHJlYWRfY29uZF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9f
ZHVtbXk7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHB0aHJl
YWRfa2V5X3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX21fcmVzZXJ2ZWQ7CiAgaW50
IF9fbV9jb3VudDsKICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7CiAgaW50IF9fbV9raW5kOwog
IHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX21fbG9jazsKfSBwdGhyZWFkX211dGV4X3Q7CgoK
CnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tdXRleGtpbmQ7Cn0gcHRocmVhZF9tdXRleGF0dHJf
dDsKCgoKdHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCBfcHRo
cmVhZF9yd2xvY2tfdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fcndfbG9jazsKICBp
bnQgX19yd19yZWFkZXJzOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVyOwogIF9wdGhyZWFk
X2Rlc2NyIF9fcndfcmVhZF93YWl0aW5nOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVfd2Fp
dGluZzsKICBpbnQgX19yd19raW5kOwogIGludCBfX3J3X3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xv
Y2tfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2xvY2traW5kOwogIGludCBfX3BzaGFy
ZWQ7Cn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7CgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50
IHB0aHJlYWRfdDsKIyAxNTEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwojIDMxICIv
dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYgX191X2NoYXIgdV9jaGFyOwp0
eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVkZWYg
X191X2xvbmcgdV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3VfcXVh
ZF90IHVfcXVhZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgp0eXBlZGVmIF9fbG9mZl90
IGxvZmZfdDsKCgoKdHlwZWRlZiBfX2lub190IGlub190OwoKCgoKCgp0eXBlZGVmIF9faW5vNjRf
dCBpbm82NF90OwoKCgoKdHlwZWRlZiBfX2Rldl90IGRldl90OwoKCgoKdHlwZWRlZiBfX2dpZF90
IGdpZF90OwoKCgoKdHlwZWRlZiBfX21vZGVfdCBtb2RlX3Q7CgoKCgp0eXBlZGVmIF9fbmxpbmtf
dCBubGlua190OwoKCgoKdHlwZWRlZiBfX3VpZF90IHVpZF90OwoKCgoKCnR5cGVkZWYgX19vZmZf
dCBvZmZfdDsKCgoKCgoKdHlwZWRlZiBfX29mZjY0X3Qgb2ZmNjRfdDsKCgoKCnR5cGVkZWYgX19w
aWRfdCBwaWRfdDsKCgoKCnR5cGVkZWYgX19pZF90IGlkX3Q7CgoKCnR5cGVkZWYgX19zc2l6ZV90
IHNzaXplX3Q7CgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJf
dCBjYWRkcl90OwoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CgoKCgoKCiMgMSAiL3Vzci9pbmNs
dWRlL3RpbWUuaCIgMSAzCiMgNTcgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA1OCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoK
dHlwZWRlZiBfX2Nsb2NrX3QgY2xvY2tfdDsKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
dHlwZXMuaCIgMSAzCiMgNjkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCnR5cGVkZWYgX190
aW1lX3QgdGltZV90OwojIDEyMyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgojIDEg
Ii91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk
ZS9zdGRkZWYuaCIgMSAzCiMgMTI2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0
eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGlu
dCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CiMgMTY5ICIvdXNyL2luY2x1ZGUv
c3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVf
XyAoX19RSV9fKSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVf
XyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVf
XyAoX19TSV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVf
XyAoX19ESV9fKSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90IF9fYXR0cmlidXRl
X18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDE2X3Qg
X19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50
IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1
bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkp
OwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fd29y
ZF9fKSkpOwojIDE5MSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2VuZGlhbi5oIiAxIDMKIyAyMiAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIg
MwojIDM1ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9l
bmRpYW4uaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMgMTkyICIvdXNy
L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3Qu
aCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoK
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9z
eXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEgMwoj
IDMyICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9i
aXRzL3NpZ3NldC5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKdHlw
ZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2ln
bmVkIGxvbmcgaW50IF9fdmFsWygxMDI0IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50
KSkpXTsKICB9IF9fc2lnc2V0X3Q7CiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIg
MwoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDgzICIvdXNyL2luY2x1ZGUvdGlt
ZS5oIiAzCnN0cnVjdCB0aW1lc3BlYwogIHsKICAgIGxvbmcgaW50IHR2X3NlYzsKICAgIGxvbmcg
aW50IHR2X25zZWM7CiAgfTsKIyAzOSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgpl
eHRlcm4gIkMiIHsKCgoKCgpzdHJ1Y3QgdGltZXZhbDsKCnR5cGVkZWYgX19mZF9tYXNrIGZkX21h
c2s7CgoKdHlwZWRlZiBfX2ZkX3NldCBmZF9zZXQ7CiMgNzQgIi91c3IvaW5jbHVkZS9zeXMvc2Vs
ZWN0LmgiIDMKZXh0ZXJuIGludCBfX3NlbGVjdCAoaW50IF9fbmZkcywgX19mZF9zZXQgKl9fcmVh
ZGZkcywgX19mZF9zZXQgKl9fd3JpdGVmZHMsIF9fZmRfc2V0ICpfX2V4Y2VwdGZkcywgc3RydWN0
IHRpbWV2YWwgKl9fdGltZW91dCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzZWxlY3QgKGludCBf
X25mZHMsIF9fZmRfc2V0ICpfX3JlYWRmZHMsIF9fZmRfc2V0ICpfX3dyaXRlZmRzLCBfX2ZkX3Nl
dCAqX19leGNlcHRmZHMsIHN0cnVjdCB0aW1ldmFsICpfX3RpbWVvdXQpIHRocm93ICgpOwojIDg3
ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCmV4dGVybiBpbnQgcHNlbGVjdCAoaW50IF9f
bmZkcywgX19mZF9zZXQgKl9fcmVhZGZkcywgX19mZF9zZXQgKl9fd3JpdGVmZHMsIF9fZmRfc2V0
ICpfX2V4Y2VwdGZkcywgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3RpbWVvdXQsIGNvbnN0IF9f
c2lnc2V0X3QgKl9fc2lnbWFzaykgdGhyb3cgKCk7CgoKCgoKfQojIDE5NSAiL3Vzci9pbmNsdWRl
L3N5cy90eXBlcy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEg
MwojIDE5OCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKCgp0eXBlZGVmIF9fYmxr
Y250X3QgYmxrY250X3Q7CnR5cGVkZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7CnR5cGVkZWYg
X19mc2ZpbGNudF90IGZzZmlsY250X3Q7CgoKCgoKCgp0eXBlZGVmIF9fYmxrY250NjRfdCBibGtj
bnQ2NF90Owp0eXBlZGVmIF9fZnNibGtjbnQ2NF90IGZzYmxrY250NjRfdDsKdHlwZWRlZiBfX2Zz
ZmlsY250NjRfdCBmc2ZpbGNudDY0X3Q7CgoKfQojIDM0MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o
IiAyIDMKCgoKCgoKZXh0ZXJuIGludDMyX3QgcmFuZG9tICh2b2lkKSB0aHJvdyAoKTsKCgpleHRl
cm4gdm9pZCBzcmFuZG9tICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gdm9pZCAqIGluaXRzdGF0ZSAodW5zaWduZWQgaW50IF9fc2VlZCwgdm9pZCAqIF9fc3RhdGVi
dWYsIHNpemVfdCBfX3N0YXRlbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkICogc2V0c3Rh
dGUgKHZvaWQgKiBfX3N0YXRlYnVmKSB0aHJvdyAoKTsKCgoKCgoKCnN0cnVjdCByYW5kb21fZGF0
YQogIHsKICAgIGludDMyX3QgKmZwdHI7CiAgICBpbnQzMl90ICpycHRyOwogICAgaW50MzJfdCAq
c3RhdGU7CiAgICBpbnQgcmFuZF90eXBlOwogICAgaW50IHJhbmRfZGVnOwogICAgaW50IHJhbmRf
c2VwOwogICAgaW50MzJfdCAqZW5kX3B0cjsKICB9OwoKZXh0ZXJuIGludCByYW5kb21fciAoc3Ry
dWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmLCBpbnQzMl90ICpfX3Jlc3RyaWN0IF9f
cmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNyYW5kb21fciAodW5zaWduZWQgaW50IF9f
c2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IGlu
aXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCB2b2lkICogX19yZXN0cmljdCBfX3N0YXRl
YnVmLCBzaXplX3QgX19zdGF0ZWxlbiwgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9f
YnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0c3RhdGVfciAodm9pZCAqIF9fcmVzdHJp
Y3QgX19zdGF0ZWJ1Ziwgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJv
dyAoKTsKCgoKCgoKZXh0ZXJuIGludCByYW5kICh2b2lkKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lk
IHNyYW5kICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCByYW5k
X3IgKHVuc2lnbmVkIGludCAqX19zZWVkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBkb3VibGUg
ZHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgZXJhbmQ0OCAodW5zaWduZWQg
c2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBscmFuZDQ4
ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0
IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgbXJhbmQ0OCAodm9p
ZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQg
X194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQgX19z
ZWVkdmFsKSB0aHJvdyAoKTsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGludCAqc2VlZDQ4ICh1bnNp
Z25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgbGNvbmc0
OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10pIHRocm93ICgpOwoKCnN0cnVjdCBkcmFu
ZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgeFszXTsKICAgIHVuc2lnbmVkIHNo
b3J0IGludCBhWzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IGM7CiAgICB1bnNpZ25lZCBzaG9y
dCBpbnQgb2xkX3hbM107CiAgICBpbnQgaW5pdDsKICB9OwoKCgpleHRlcm4gaW50IGRyYW5kNDhf
ciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwgZG91YmxlICpfX3Jl
c3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZXJhbmQ0OF9yICh1bnNpZ25l
ZCBzaG9ydCBpbnQgX194c3ViaVszXSwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBf
X2J1ZmZlciwgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBpbnQgbHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVy
LCBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IG5y
YW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sIHN0cnVjdCBkcmFuZDQ4X2Rh
dGEgKl9fcmVzdHJpY3QgX19idWZmZXIsIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf
X3Jlc3RyaWN0IF9fYnVmZmVyLCBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cg
KCk7CgpleHRlcm4gaW50IGpyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10s
IHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsIGxvbmcgaW50ICpfX3Jl
c3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3JhbmQ0OF9yIChsb25n
IGludCBfX3NlZWR2YWwsIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsK
CmV4dGVybiBpbnQgc2VlZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10sIHN0
cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGxjb25n
NDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sIHN0cnVjdCBkcmFuZDQ4X2RhdGEg
Kl9fYnVmZmVyKSB0aHJvdyAoKTsKIyA0NzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRl
cm4gdm9pZCAqIG1hbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCAq
IGNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCgoKCmV4
dGVybiB2b2lkICogcmVhbGxvYyAodm9pZCAqIF9fcHRyLCBzaXplX3QgX19zaXplKSB0aHJvdyAo
KTsKCmV4dGVybiB2b2lkIGZyZWUgKHZvaWQgKiBfX3B0cikgdGhyb3cgKCk7CgoKCmV4dGVybiB2
b2lkIGNmcmVlICh2b2lkICogX19wdHIpIHRocm93ICgpOwoKCgojIDEgIi91c3IvaW5jbHVkZS9h
bGxvY2EuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAyIDMKCgoj
IDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5j
bHVkZS9zdGRkZWYuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgpleHRl
cm4gIkMiIHsKCgoKCgpleHRlcm4gdm9pZCAqIGFsbG9jYSAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cg
KCk7CgoKCgoKfQojIDQ5MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCmV4dGVybiB2
b2lkICogdmFsbG9jIChzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIGFi
b3J0ICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCmV4
dGVybiBpbnQgYXRleGl0ICh2b2lkICgqX19mdW5jKSAodm9pZCkpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGludCBfX29uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKiBf
X2FyZyksIHZvaWQgKiBfX2FyZykgdGhyb3cgKCk7CgpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQg
KCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKiBfX2FyZyksIHZvaWQgKiBfX2FyZykgdGhy
b3cgKCk7CgoKCgoKCmV4dGVybiB2b2lkIGV4aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX0V4aXQgKGludCBf
X3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0
ZXJuIGNoYXIgKmdldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgpleHRl
cm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIGludCBwdXRlbnYgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgoKCgpl
eHRlcm4gaW50IHNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192
YWx1ZSwgaW50IF9fcmVwbGFjZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIHVuc2V0ZW52IChf
X2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJlbnYg
KHZvaWQpIHRocm93ICgpOwojIDU2NiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBj
aGFyICpta3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50
IG1rc3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzeXN0
ZW0gKF9fY29uc3QgY2hhciAqX19jb21tYW5kKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIg
KmNhbm9uaWNhbGl6ZV9maWxlX25hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsK
IyA1OTUgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqcmVhbHBhdGggKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsIGNoYXIgKl9fcmVzdHJpY3QgX19yZXNvbHZl
ZCkgdGhyb3cgKCk7CgoKCgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpIChfX2NvbnN0
IHZvaWQgKiwgX19jb25zdCB2b2lkICopOwoKCnR5cGVkZWYgX19jb21wYXJfZm5fdCBjb21wYXJp
c29uX2ZuX3Q7CgoKCgoKZXh0ZXJuIHZvaWQgKiBic2VhcmNoIChfX2NvbnN0IHZvaWQgKiBfX2tl
eSwgX19jb25zdCB2b2lkICogX19iYXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwg
X19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCgoKZXh0ZXJuIHZvaWQgcXNvcnQgKHZvaWQgKiBf
X2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29t
cGFyKTsKCgoKCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJzIChsb25nIGludCBfX3gpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxv
bmcgbG9uZyBpbnQgbGxhYnMgKGxvbmcgbG9uZyBpbnQgX194KSB0aHJvdyAoKQogICAgIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVt
ZXIsIGludCBfX2Rlbm9tKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4
dGVybiBsZGl2X3QgbGRpdiAobG9uZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkgdGhy
b3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4
dGVybiBsbGRpdl90IGxsZGl2IChsb25nIGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgbG9uZyBpbnQg
X19kZW5vbSkgdGhyb3cgKCkKCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDY1
MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICplY3Z0IChkb3VibGUgX192
YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3Ry
aWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBfX3Zh
bHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJp
Y3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqZ2N2dCAoZG91YmxlIF9fdmFs
dWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpx
ZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3Qg
X19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAq
cWZjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0
IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIg
KnFnY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGVjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25k
aWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNo
YXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBmY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBf
X2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBz
aXplX3QgX19sZW4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHFlY3Z0X3IgKGxvbmcgZG91Ymxl
IF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19y
ZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBxZmN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19u
ZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBj
aGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwojIDY5NSAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQgbWJsZW4gKF9fY29uc3QgY2hhciAqX19z
LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1idG93YyAod2NoYXJfdCAqX19y
ZXN0cmljdCBfX3B3YywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgd2N0b21iIChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hh
cikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgbWJzdG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJp
Y3QgX19wd2NzLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJv
dyAoKTsKCgpleHRlcm4gc2l6ZV90IHdjc3RvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19j
b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CiMg
NzE4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBycG1hdGNoIChfX2NvbnN0
IGNoYXIgKl9fcmVzcG9uc2UpIHRocm93ICgpOwojIDcyOSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o
IiAzCmV4dGVybiBpbnQgZ2V0c3Vib3B0IChjaGFyICoqX19yZXN0cmljdCBfX29wdGlvbnAsIF9f
Y29uc3QgY2hhciAqX19jb25zdCAqX19yZXN0cmljdCBfX3Rva2VucywgY2hhciAqKl9fcmVzdHJp
Y3QgX192YWx1ZXApIHRocm93ICgpOwojIDczOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4
dGVybiB2b2lkIHNldGtleSAoX19jb25zdCBjaGFyICpfX2tleSkgdGhyb3cgKCk7CgoKCgoKCgpl
eHRlcm4gaW50IGdyYW50cHQgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1bmxv
Y2twdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnB0c25hbWUgKGludCBf
X2ZkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdHNuYW1lX3IgKGludCBfX2ZkLCBjaGFy
ICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdldHB0ICh2
b2lkKSB0aHJvdyAoKTsKCgoKCgp9CiMgNDQgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGxpYi5oIiAyIDMK
IyA4MyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9p
bmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkbGliLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcg
OjpkaXZfdDsKICB1c2luZyA6OmxkaXZfdDsKCiAgZXh0ZXJuICJDIiBkb3VibGUgYXRvZihjb25z
dCBjaGFyKik7CiAgZXh0ZXJuICJDIiBpbnQgYXRvaShjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJD
IiBsb25nIGludCBhdG9sKGNvbnN0IGNoYXIqKTsKICBleHRlcm4gIkMiIGRvdWJsZSBzdHJ0b2Qo
Y29uc3QgY2hhciosIGNoYXIqKik7CiAgZXh0ZXJuICJDIiBmbG9hdCBzdHJ0b2YoY29uc3QgY2hh
ciosIGNoYXIqKik7CiAgZXh0ZXJuICJDIiBsb25nIGludCBzdHJ0b2woY29uc3QgY2hhciosIGNo
YXIqKiwgaW50KTsKICBleHRlcm4gIkMiIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwoY29uc3Qg
Y2hhciosIGNoYXIqKiwgaW50KTsKICBleHRlcm4gIkMiIGludCByYW5kKHZvaWQpOwogIGV4dGVy
biAiQyIgdm9pZCBzcmFuZCh1bnNpZ25lZCBpbnQpOwogIGV4dGVybiAiQyIgdm9pZCogY2FsbG9j
KHNpemVfdCwgc2l6ZV90KTsKICBleHRlcm4gIkMiIHZvaWQgZnJlZSh2b2lkKik7CiAgZXh0ZXJu
ICJDIiB2b2lkKiBtYWxsb2Moc2l6ZV90KTsKICBleHRlcm4gIkMiIHZvaWQqIHJlYWxsb2Modm9p
ZCosIHNpemVfdCk7CiAgZXh0ZXJuICJDIiB2b2lkIGFib3J0KHZvaWQpOwogIGV4dGVybiAiQyIg
aW50IGF0ZXhpdCh2b2lkICgqZnVuYykodm9pZCkpOwogIGV4dGVybiAiQyIgdm9pZCBleGl0KGlu
dCk7CiAgZXh0ZXJuICJDIiB2b2lkIF9FeGl0KGludCk7CiAgZXh0ZXJuICJDIiBjaGFyKmdldGVu
dihjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBpbnQgc3lzdGVtKGNvbnN0IGNoYXIqKTsKICBl
eHRlcm4gIkMiIHZvaWQqIGJzZWFyY2goY29uc3Qgdm9pZCosIGNvbnN0IHZvaWQqLCBzaXplX3Qs
IHNpemVfdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqY29tcCkoY29uc3Qgdm9p
ZCAqLCBjb25zdCB2b2lkICopKTsKICBleHRlcm4gIkMiIHZvaWQgcXNvcnQodm9pZCosIHNpemVf
dCwgc2l6ZV90LAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpjb21wKShjb25zdCB2b2lk
ICosIGNvbnN0IHZvaWQgKikpOwogIGV4dGVybiAiQyIgaW50IGFicyhpbnQpOwogIGV4dGVybiAi
QyIgbG9uZyBpbnQgbGFicyhsb25nIGludCk7CiAgZXh0ZXJuICJDIiBkaXZfdCBkaXYoaW50LCBp
bnQpOwogIGV4dGVybiAiQyIgbGRpdl90IGxkaXYobG9uZyBpbnQsIGxvbmcgaW50KTsKICBleHRl
cm4gIkMiIGludCBtYmxlbihjb25zdCBjaGFyKiwgc2l6ZV90KTsKICBleHRlcm4gIkMiIGludCBt
YnRvd2Mod2NoYXJfdCosIGNvbnN0IGNoYXIqLCBzaXplX3QpOwogIGV4dGVybiAiQyIgaW50IHdj
dG9tYihjaGFyKiwgd2NoYXJfdCk7CiAgZXh0ZXJuICJDIiBzaXplX3QgbWJzdG93Y3Mod2NoYXJf
dCosIGNvbnN0IGNoYXIqLCBzaXplX3QpOwogIGV4dGVybiAiQyIgc2l6ZV90IHdjc3RvbWJzKGNo
YXIqLCBjb25zdCB3Y2hhcl90Kiwgc2l6ZV90KTsKCiAgaW5saW5lIGxvbmcKICBhYnMobG9uZyBf
X2kpIHsgcmV0dXJuIDo6bGFicyhfX2kpOyB9CgogIGlubGluZSBsZGl2X3QKICBkaXYobG9uZyBf
X2ksIGxvbmcgX19qKSB7IHJldHVybiA6OmxkaXYoX19pLCBfX2opOyB9Cn0KIyA0NSAiL3Vzci9s
b2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9i
aXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAz
CiMgNDYgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAv
aW5jbHVkZS9nKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2Mz
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9uZXciIDEgMwoj
IDM0ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvZysrL25ldyIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvY3N0ZGRlZiIgMSAzCiMgMzUgIi91c3IvbG9jYWwv
Z2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvbmV3IiAy
IDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w
L2luY2x1ZGUvZysrL2V4Y2VwdGlvbiIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvZXhjZXB0aW9uIiAzCmV4dGVy
biAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsKICBjbGFzcyBleGNlcHRpb24KICB7CiAgcHVibGlj
OgogICAgZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmV4Y2VwdGlvbigpIHRo
cm93KCk7CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCB0aHJvdygpOwogIH07
CgogIGNsYXNzIGJhZF9leGNlcHRpb24gOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoK
ICAgIGJhZF9leGNlcHRpb24oKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+YmFkX2V4Y2VwdGlv
bigpIHRocm93KCk7CiAgfTsKCiAgdHlwZWRlZiB2b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgp
OwogIHR5cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxlcikgKCk7CgogIHRlcm1pbmF0ZV9o
YW5kbGVyIHNldF90ZXJtaW5hdGUodGVybWluYXRlX2hhbmRsZXIpIHRocm93KCk7CiAgdm9pZCB0
ZXJtaW5hdGUoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgogIHVuZXhwZWN0ZWRf
aGFuZGxlciBzZXRfdW5leHBlY3RlZCh1bmV4cGVjdGVkX2hhbmRsZXIpIHRocm93KCk7CiAgdm9p
ZCB1bmV4cGVjdGVkKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKICBib29sIHVu
Y2F1Z2h0X2V4Y2VwdGlvbigpIHRocm93KCk7Cn0KCn0KIyAzNiAiL3Vzci9sb2NhbC9nY2MzL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9uZXciIDIgMwoKZXh0
ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewogIGNsYXNzIGJhZF9hbGxvYyA6IHB1YmxpYyBl
eGNlcHRpb24KICB7CiAgcHVibGljOgogICAgYmFkX2FsbG9jKCkgdGhyb3coKSB7IH0KICAgIHZp
cnR1YWwgfmJhZF9hbGxvYygpIHRocm93KCk7CiAgfTsKCiAgc3RydWN0IG5vdGhyb3dfdCB7IH07
CiAgZXh0ZXJuIGNvbnN0IG5vdGhyb3dfdCBub3Rocm93OwogIHR5cGVkZWYgdm9pZCAoKm5ld19o
YW5kbGVyKSgpOwogIG5ld19oYW5kbGVyIHNldF9uZXdfaGFuZGxlcihuZXdfaGFuZGxlcik7Cn0K
Cgp2b2lkICpvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7
CnZvaWQgKm9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2Mp
Owp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkICopIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVs
ZXRlW10odm9pZCAqKSB0aHJvdygpOwp2b2lkICpvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIGNv
bnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3IgbmV3W10oc3RkOjpz
aXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxl
dGUodm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3Ig
ZGVsZXRlW10odm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CgoKaW5saW5l
IHZvaWQgKm9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgdm9pZCAqcGxhY2UpIHRocm93KCkgeyBy
ZXR1cm4gcGxhY2U7IH0KaW5saW5lIHZvaWQgKm9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCB2
b2lkICpwbGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQp9CiMgNDcgIi91c3IvbG9jYWwv
Z2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9z
dGxfYWxnb2Jhc2UuaCIgMiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9zZndkLmgiIDEgMwojIDM4
ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1
ZGUvZysrL2JpdHMvc3RkX2lvc2Z3ZC5oIiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvaTY4Ni1wYy1saW51eC1nbnUv
Yml0cy9jKytjb25maWcuaCIgMSAzCiMgNDAgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9zZndkLmgiIDIgMwoj
IDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5j
bHVkZS9nKysvYml0cy9zdHJpbmdmd2QuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvZ2NjMy9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdHJpbmdmd2Qu
aCIgMwoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My4wL2luY2x1ZGUvZysrL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwoj
IDQwICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvZysrL2JpdHMvc3RyaW5nZndkLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxh
dGU8Y2xhc3MgX0NoYXJUPgogICAgc3RydWN0IGNoYXJfdHJhaXRzOwoKICB0ZW1wbGF0ZTw+IGNs
YXNzIGNoYXJfdHJhaXRzPGNoYXI+OwoKICB0ZW1wbGF0ZTw+IGNsYXNzIGNoYXJfdHJhaXRzPHdj
aGFyX3Q+OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYWxsb2NhdG9y
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3Ry
YWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hh
clQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZzsKCiAgdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hh
cj4gc3RyaW5nOwoKICB0eXBlZGVmIGJhc2ljX3N0cmluZzx3Y2hhcl90PiB3c3RyaW5nOwoKfQoj
IDQxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvZysrL2JpdHMvc3RkX2lvc2Z3ZC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvZnBvcy5oIiAx
IDMKIyAzOCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu
MC9pbmNsdWRlL2crKy9iaXRzL2Zwb3MuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2k2ODYtcGMtbGludXgtZ251
L2JpdHMvYysraW8uaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytp
by5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUv
c3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOCAiL3Vzci9p
bmNsdWRlL3N0ZGlvLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCiMgMSAiL3Vzci9sb2NhbC9nY2Mz
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMK
IyAzNCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgoKIyAxICIvdXNyL2xvY2FsL2djYzMv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwoj
IDQzICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvc3RkYXJnLmgiIDMKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlz
dDsKIyAxMTAgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjAvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9fZ251Y192YV9saXN0IHZhX2xpc3Q7CiMg
MzkgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlw
ZXMuaCIgMSAzCiMgNDEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKCgoKCnR5cGVkZWYg
c3RydWN0IF9JT19GSUxFIEZJTEU7CiMgNTcgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2xpYmlvLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMSAzCiMgOSAiL3Vzci9pbmNsdWRlL19HX2Nv
bmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMTAgIi91c3Iv
aW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzEyICIv
dXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUv
c3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1
ZGUvX0dfY29uZmlnLmgiIDIgMwojIDM1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKdHlw
ZWRlZiBpbnQgX0dfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsK
dHlwZWRlZiBpbnQgX0dfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykp
KTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9k
ZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQzMl90IF9fYXR0cmli
dXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwojIDMxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIg
MiAzCiMgNDggIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0
OSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDE1NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi
IDMKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsKCgoKCiMgMSAiL3Vzci9pbmNs
dWRlL2JpdHMvc3RkaW8tbG9jay5oIiAxIDMKIyAyMCAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8t
bG9jay5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMSAzCiMgMTggIi91c3IvaW5j
bHVkZS9wdGhyZWFkLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMTkg
Ii91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIg
MSAzCiMgMjMgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1
cmVzLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzCgoKIyAxICIvdXNyL2lu
Y2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIgMwoK
CiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9zY2hlZC5o
IiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDQ3ICIvdXNyL2lu
Y2x1ZGUvYml0cy9zY2hlZC5oIiAzCnN0cnVjdCBzY2hlZF9wYXJhbQogIHsKICAgIGludCBzY2hl
ZF9wcmlvcml0eTsKICB9OwoKZXh0ZXJuICJDIiB7CgoKCmV4dGVybiBpbnQgY2xvbmUgKGludCAo
Kl9fZm4pICh2b2lkICpfX2FyZyksIHZvaWQgKl9fY2hpbGRfc3RhY2ssIGludCBfX2ZsYWdzLCB2
b2lkICpfX2FyZykgdGhyb3cgKCk7CgoKCn0KIyAzMyAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIg
MwoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBfX3NjaGVkX3NldHBhcmFtIChfX3BpZF90IF9f
cGlkLCBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgpleHRl
cm4gaW50IHNjaGVkX3NldHBhcmFtIChfX3BpZF90IF9fcGlkLCBfX2NvbnN0IHN0cnVjdCBzY2hl
ZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19zY2hlZF9nZXRwYXJh
bSAoX19waWRfdCBfX3BpZCwgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBzY2hlZF9nZXRwYXJhbSAoX19waWRfdCBfX3BpZCwgc3RydWN0IHNjaGVkX3Bh
cmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fc2NoZWRfc2V0c2NoZWR1bGVy
IChfX3BpZF90IF9fcGlkLCBpbnQgX19wb2xpY3ksIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFt
ICpfX3BhcmFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2NoZWRfc2V0c2NoZWR1bGVyIChfX3Bp
ZF90IF9fcGlkLCBpbnQgX19wb2xpY3ksIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3Bh
cmFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX3NjaGVkX2dldHNjaGVkdWxlciAoX19waWRf
dCBfX3BpZCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgc2NoZWRfZ2V0c2NoZWR1bGVyIChfX3BpZF90
IF9fcGlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fc2NoZWRfeWllbGQgKHZvaWQpIHRocm93
ICgpOwpleHRlcm4gaW50IHNjaGVkX3lpZWxkICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IF9fc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAoaW50IF9fYWxnb3JpdGhtKSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IChpbnQgX19hbGdvcml0aG0pIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgX19zY2hlZF9nZXRfcHJpb3JpdHlfbWluIChpbnQgX19hbGdvcml0aG0p
IHRocm93ICgpOwpleHRlcm4gaW50IHNjaGVkX2dldF9wcmlvcml0eV9taW4gKGludCBfX2FsZ29y
aXRobSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3NjaGVkX3JyX2dldF9pbnRlcnZhbCAoX19w
aWRfdCBfX3BpZCwgc3RydWN0IHRpbWVzcGVjICpfX3QpIHRocm93ICgpOwpleHRlcm4gaW50IHNj
aGVkX3JyX2dldF9pbnRlcnZhbCAoX19waWRfdCBfX3BpZCwgc3RydWN0IHRpbWVzcGVjICpfX3Qp
IHRocm93ICgpOwoKfQojIDIxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyAxICIvdXNy
L2luY2x1ZGUvdGltZS5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAz
CgpleHRlcm4gIkMiIHsKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3Vzci9pbmNs
dWRlL3RpbWUuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAxIDMKIyA0
MyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCiMgOTUgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMK
c3RydWN0IHRtCnsKICBpbnQgdG1fc2VjOwogIGludCB0bV9taW47CiAgaW50IHRtX2hvdXI7CiAg
aW50IHRtX21kYXk7CiAgaW50IHRtX21vbjsKICBpbnQgdG1feWVhcjsKICBpbnQgdG1fd2RheTsK
ICBpbnQgdG1feWRheTsKICBpbnQgdG1faXNkc3Q7CgoKICBsb25nIGludCB0bV9nbXRvZmY7CiAg
X19jb25zdCBjaGFyICp0bV96b25lOwoKCgoKfTsKCgoKCmV4dGVybiBjbG9ja190IGNsb2NrICh2
b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdGltZV90IHRpbWUgKHRpbWVfdCAqX190aW1lcikgdGhy
b3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSAodGltZV90IF9fdGltZTEsIHRpbWVfdCBf
X3RpbWUwKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRl
cm4gdGltZV90IG1rdGltZSAoc3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
c2l6ZV90IHN0cmZ0aW1lIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2NvbnN0IHN0cnVjdCB0bSAqX19y
ZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnB0aW1lIChfX2Nv
bnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2ZtdCwgc3RydWN0IHRtICpfX3RwKSB0aHJv
dyAoKTsKCgoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lIChfX2NvbnN0IHRpbWVfdCAqX190
aW1lcikgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZSAoX19jb25zdCB0
aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqX19nbXRpbWVf
ciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwgc3RydWN0IHRtICpfX3Jlc3Ry
aWN0IF9fdHApIHRocm93ICgpOwoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lX3IgKF9fY29uc3Qg
dGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZV9yIChfX2NvbnN0IHRpbWVf
dCAqX19yZXN0cmljdCBfX3RpbWVyLCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWUgKF9fY29uc3Qgc3RydWN0IHRtICpfX3RwKSB0
aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqY3RpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0
aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWVfciAoX19jb25zdCBzdHJ1Y3QgdG0g
Kl9fcmVzdHJpY3QgX190cCwgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCmV4
dGVybiBjaGFyICpjdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLCBj
aGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqX190em5h
bWVbMl07CmV4dGVybiBpbnQgX19kYXlsaWdodDsKZXh0ZXJuIGxvbmcgaW50IF9fdGltZXpvbmU7
CgoKCgpleHRlcm4gY2hhciAqdHpuYW1lWzJdOwoKCgpleHRlcm4gdm9pZCB0enNldCAodm9pZCkg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZGF5bGlnaHQ7CmV4dGVybiBsb25nIGludCB0aW1lem9u
ZTsKCgoKCgpleHRlcm4gaW50IHN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX193aGVuKSB0aHJvdyAo
KTsKIyAyMjggIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIHRpbWVfdCB0aW1lZ20gKHN0
cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lbG9jYWwgKHN0cnVj
dCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBkeXNpemUgKGludCBfX3llYXIpIHRo
cm93ICgpOwoKCgoKCmV4dGVybiBpbnQgbmFub3NsZWVwIChfX2NvbnN0IHN0cnVjdCB0aW1lc3Bl
YyAqX19yZXF1ZXN0ZWRfdGltZSwgc3RydWN0IHRpbWVzcGVjICpfX3JlbWFpbmluZykgdGhyb3cg
KCk7CiMgMjU3ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7
CgoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ2V0ZGF0ZSAoX19jb25zdCBjaGFyICpfX3N0cmluZykg
dGhyb3cgKCk7CiMgMjcyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiBpbnQgZ2V0ZGF0
ZV9yIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zdHJpbmcsIHN0cnVjdCB0bSAqX19yZXN0
cmljdCBfX3Jlc2J1ZnApIHRocm93ICgpOwoKCgoKfQojIDIyICIvdXNyL2luY2x1ZGUvcHRocmVh
ZC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMSAzCiMgMjkgIi91c3IvaW5j
bHVkZS9zaWduYWwuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAzMCAi
L3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAyIDMKCmV4dGVybiAiQyIgewoKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy9zaWdzZXQuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMiAzCiMg
NDkgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwp0eXBlZGVmIF9fc2lnc2V0X3Qgc2lnc2V0X3Q7
CiMgMzYyICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKfQojIDI1ICIvdXNyL2luY2x1ZGUvcHRo
cmVhZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMSAzCiMg
MjYgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwoKCmV4dGVybiAiQyIgewojIDQ5ICIvdXNy
L2luY2x1ZGUvcHRocmVhZC5oIiAzCmVudW0KewogIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFLAoK
ICBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRAoKfTsKCmVudW0KewogIFBUSFJFQURfSU5IRVJJVF9T
Q0hFRCwKCiAgUFRIUkVBRF9FWFBMSUNJVF9TQ0hFRAoKfTsKCmVudW0KewogIFBUSFJFQURfU0NP
UEVfU1lTVEVNLAoKICBQVEhSRUFEX1NDT1BFX1BST0NFU1MKCn07CgplbnVtCnsKICBQVEhSRUFE
X01VVEVYX0ZBU1RfTlAsCiAgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAsCiAgUFRIUkVBRF9N
VVRFWF9FUlJPUkNIRUNLX05QCgogICwKICBQVEhSRUFEX01VVEVYX05PUk1BTCA9IFBUSFJFQURf
TVVURVhfRkFTVF9OUCwKICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSA9IFBUSFJFQURfTVVURVhf
UkVDVVJTSVZFX05QLAogIFBUSFJFQURfTVVURVhfRVJST1JDSEVDSyA9IFBUSFJFQURfTVVURVhf
RVJST1JDSEVDS19OUCwKICBQVEhSRUFEX01VVEVYX0RFRkFVTFQgPSBQVEhSRUFEX01VVEVYX05P
Uk1BTAoKfTsKCmVudW0KewogIFBUSFJFQURfUFJPQ0VTU19QUklWQVRFLAoKICBQVEhSRUFEX1BS
T0NFU1NfU0hBUkVECgp9OwoKCmVudW0KewogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9SRUFERVJf
TlAsCiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRFUl9OUCwKICBQVEhSRUFEX1JXTE9DS19Q
UkVGRVJfV1JJVEVSX05PTlJFQ1VSU0lWRV9OUCwKICBQVEhSRUFEX1JXTE9DS19ERUZBVUxUX05Q
ID0gUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRFUl9OUAp9OwoKCgoKCgpzdHJ1Y3QgX3B0aHJl
YWRfY2xlYW51cF9idWZmZXIKewogIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopOwogIHZvaWQg
Kl9fYXJnOwogIGludCBfX2NhbmNlbHR5cGU7CiAgc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVm
ZmVyICpfX3ByZXY7Cn07CgoKCmVudW0KewogIFBUSFJFQURfQ0FOQ0VMX0VOQUJMRSwKCiAgUFRI
UkVBRF9DQU5DRUxfRElTQUJMRQoKfTsKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxfREVGRVJSRUQs
CgogIFBUSFJFQURfQ0FOQ0VMX0FTWU5DSFJPTk9VUwoKfTsKIyAxNDEgIi91c3IvaW5jbHVkZS9w
dGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX2NyZWF0ZSAocHRocmVhZF90ICpfX3RocmVh
ZCwgX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCB2b2lkICooKl9fc3RhcnRfcm91dGlu
ZSkgKHZvaWQgKiksIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gcHRocmVhZF90
IHB0aHJlYWRfc2VsZiAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2VxdWFs
IChwdGhyZWFkX3QgX190aHJlYWQxLCBwdGhyZWFkX3QgX190aHJlYWQyKSB0aHJvdyAoKTsKCgpl
eHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQgKHZvaWQgKl9fcmV0dmFsKSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfam9pbiAocHRo
cmVhZF90IF9fdGgsIHZvaWQgKipfX3RocmVhZF9yZXR1cm4pIHRocm93ICgpOwoKCgoKCmV4dGVy
biBpbnQgcHRocmVhZF9kZXRhY2ggKHB0aHJlYWRfdCBfX3RoKSB0aHJvdyAoKTsKCgoKCgoKCmV4
dGVybiBpbnQgcHRocmVhZF9hdHRyX2luaXQgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfYXR0cl90ICpf
X2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRl
IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgX19kZXRhY2hzdGF0ZSkgdGhyb3cgKCk7CgoK
CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGRldGFjaHN0YXRlIChfX2NvbnN0IHB0aHJlYWRf
YXR0cl90ICpfX2F0dHIsIGludCAqX19kZXRhY2hzdGF0ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcGFyYW0gKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIF9f
Y29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwYXJhbSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19h
dHRyLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGljeSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50
IF9fcG9saWN5KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRw
b2xpY3kgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50ICpfX3BvbGljeSkgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGluaGVyaXRzY2hlZCAocHRocmVh
ZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9faW5oZXJpdCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg
cHRocmVhZF9hdHRyX2dldGluaGVyaXRzY2hlZCAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19h
dHRyLCBpbnQgKl9faW5oZXJpdCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy
X3NldHNjb3BlIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgX19zY29wZSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NvcGUgKF9fY29uc3QgcHRocmVhZF9hdHRy
X3QgKl9fYXR0ciwgaW50ICpfX3Njb3BlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcHRocmVh
ZF9hdHRyX3NldGd1YXJkc2l6ZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgc2l6ZV90IF9fZ3Vh
cmRzaXplKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0Z3VhcmRzaXpl
IChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIHNpemVfdCAqX19ndWFyZHNpemUpIHRo
cm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2thZGRyIChwdGhy
ZWFkX2F0dHJfdCAqX19hdHRyLCB2b2lkICpfX3N0YWNrYWRkcikgdGhyb3cgKCk7CgoKCmV4dGVy
biBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrYWRkciAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAq
X19hdHRyLCB2b2lkICoqX19zdGFja2FkZHIpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRo
cmVhZF9hdHRyX3NldHN0YWNrc2l6ZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgc2l6ZV90IF9f
c3RhY2tzaXplKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2tz
aXplIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIHNpemVfdCAqX19zdGFja3NpemUp
IHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0c2NoZWRwYXJhbSAocHRocmVh
ZF90IF9fdGFyZ2V0X3RocmVhZCwgaW50IF9fcG9saWN5LCBfX2NvbnN0IHN0cnVjdCBzY2hlZF9w
YXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRzY2hlZHBh
cmFtIChwdGhyZWFkX3QgX190YXJnZXRfdGhyZWFkLCBpbnQgKl9fcG9saWN5LCBzdHJ1Y3Qgc2No
ZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRj
b25jdXJyZW5jeSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNvbmN1
cnJlbmN5IChpbnQgX19sZXZlbCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgX19wdGhyZWFk
X211dGV4X2luaXQgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCwgX19jb25zdCBwdGhyZWFkX211
dGV4YXR0cl90ICpfX211dGV4X2F0dHIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX211
dGV4X2luaXQgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCwgX19jb25zdCBwdGhyZWFkX211dGV4
YXR0cl90ICpfX211dGV4X2F0dHIpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fcHRocmVhZF9t
dXRleF9kZXN0cm95IChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwpleHRlcm4g
aW50IHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF90cnlsb2NrIChwdGhyZWFkX211dGV4
X3QgKl9fbXV0ZXgpIHRocm93ICgpOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAo
cHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fcHRocmVh
ZF9tdXRleF9sb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwpleHRlcm4g
aW50IHB0aHJlYWRfbXV0ZXhfbG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF91bmxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAq
X19tdXRleCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF91bmxvY2sgKHB0aHJl
YWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgX19wdGhyZWFk
X211dGV4YXR0cl9pbml0IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwpl
eHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9f
YXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kg
KHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHRocmVh
ZF9tdXRleGF0dHJfZGVzdHJveSAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSB0aHJvdyAo
KTsKCgoKCgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSAocHRocmVhZF9t
dXRleGF0dHJfdCAqX19hdHRyLCBpbnQgX19raW5kKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRo
cmVhZF9tdXRleGF0dHJfc2V0dHlwZSAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLCBpbnQg
X19raW5kKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9nZXR0eXBl
IChfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0ciwgaW50ICpfX2tpbmQpIHRocm93
ICgpOwojIDMyMyAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRf
Y29uZF9pbml0IChwdGhyZWFkX2NvbmRfdCAqX19jb25kLCBfX2NvbnN0IHB0aHJlYWRfY29uZGF0
dHJfdCAqX19jb25kX2F0dHIpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9k
ZXN0cm95IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0
aHJlYWRfY29uZF9zaWduYWwgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3dhaXQgKHB0aHJlYWRfY29uZF90
ICpfX2NvbmQsIHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy
biBpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdCAocHRocmVhZF9jb25kX3QgKl9fY29uZCwgcHRo
cmVhZF9tdXRleF90ICpfX211dGV4LCBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19hYnN0aW1l
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2luaXQgKHB0aHJl
YWRfY29uZGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29u
ZGF0dHJfZGVzdHJveSAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCgoK
CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19pbml0IChwdGhyZWFkX3J3bG9ja190ICpfX3J3
bG9jaywgX19jb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19kZXN0cm95IChwdGhyZWFkX3J3bG9ja190ICpfX3J3
bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19yZGxvY2sgKHB0aHJl
YWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcnds
b2NrX3RyeXJkbG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfd3Jsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9j
aykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnl3cmxvY2sgKHB0aHJl
YWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcnds
b2NrX3VubG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCgoKCmV4
dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2luaXQgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpf
X2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2Rlc3Ryb3kg
KHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9yd2xvY2thdHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3Qg
Kl9fYXR0ciwgaW50ICpfX3BzaGFyZWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFk
X3J3bG9ja2F0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwgaW50
IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2dl
dGtpbmRfbnAgKF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwgaW50ICpfX3By
ZWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfc2V0a2luZF9u
cCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwgaW50IF9fcHJlZikgdGhyb3cgKCk7CiMg
NDIwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgX19wdGhyZWFkX2tleV9j
cmVhdGUgKHB0aHJlYWRfa2V5X3QgKl9fa2V5LCB2b2lkICgqX19kZXN0cl9mdW5jdGlvbikgKHZv
aWQgKikpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2tleV9jcmVhdGUgKHB0aHJlYWRf
a2V5X3QgKl9fa2V5LCB2b2lkICgqX19kZXN0cl9mdW5jdGlvbikgKHZvaWQgKikpIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2RlbGV0ZSAocHRocmVhZF9rZXlfdCBfX2tleSkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3B0aHJlYWRfc2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5
X3QgX19rZXksIF9fY29uc3Qgdm9pZCAqX19wb2ludGVyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQg
cHRocmVhZF9zZXRzcGVjaWZpYyAocHRocmVhZF9rZXlfdCBfX2tleSwgX19jb25zdCB2b2lkICpf
X3BvaW50ZXIpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCAqX19wdGhyZWFkX2dldHNwZWNpZmlj
IChwdGhyZWFkX2tleV90IF9fa2V5KSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgKnB0aHJlYWRfZ2V0
c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXkpIHRocm93ICgpOwojIDQ0NSAiL3Vzci9pbmNs
dWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IF9fcHRocmVhZF9vbmNlIChwdGhyZWFkX29uY2Vf
dCAqX19vbmNlX2NvbnRyb2wsIHZvaWQgKCpfX2luaXRfcm91dGluZSkgKHZvaWQpKSB0aHJvdyAo
KTsKCmV4dGVybiBpbnQgcHRocmVhZF9vbmNlIChwdGhyZWFkX29uY2VfdCAqX19vbmNlX2NvbnRy
b2wsIHZvaWQgKCpfX2luaXRfcm91dGluZSkgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVy
biBpbnQgcHRocmVhZF9zZXRjYW5jZWxzdGF0ZSAoaW50IF9fc3RhdGUsIGludCAqX19vbGRzdGF0
ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWx0eXBlIChpbnQgX190
eXBlLCBpbnQgKl9fb2xkdHlwZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NhbmNl
bCAocHRocmVhZF90IF9fdGhyZWFkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHB0aHJlYWRf
dGVzdGNhbmNlbCAodm9pZCkgdGhyb3cgKCk7CiMgNDgxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5o
IiAzCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcHVzaCAoc3RydWN0IF9wdGhyZWFkX2Ns
ZWFudXBfYnVmZmVyICpfX2J1ZmZlciwgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKiksIHZvaWQg
Kl9fYXJnKSB0aHJvdyAoKTsKIyA0OTEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJu
IHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3AgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZl
ciAqX19idWZmZXIsIGludCBfX2V4ZWN1dGUpIHRocm93ICgpOwojIDUwMiAiL3Vzci9pbmNsdWRl
L3B0aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3B1c2hfZGVmZXIgKHN0
cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsIHZvaWQgKCpfX3JvdXRpbmUp
ICh2b2lkICopLCB2b2lkICpfX2FyZykgdGhyb3cgKCk7CiMgNTEzICIvdXNyL2luY2x1ZGUvcHRo
cmVhZC5oIiAzCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcG9wX3Jlc3RvcmUgKHN0cnVj
dCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsIGludCBfX2V4ZWN1dGUpIHRocm93
ICgpOwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWd0aHJlYWQuaCIgMSAzCiMgMzEgIi91
c3IvaW5jbHVkZS9iaXRzL3NpZ3RocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9zaWdtYXNr
IChpbnQgX19ob3csIF9fY29uc3QgX19zaWdzZXRfdCAqX19uZXdtYXNrLCBfX3NpZ3NldF90ICpf
X29sZG1hc2spIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfa2lsbCAocHRocmVhZF90
IF9fdGhyZWFkLCBpbnQgX19zaWdubykgdGhyb3cgKCk7CiMgNTE5ICIvdXNyL2luY2x1ZGUvcHRo
cmVhZC5oIiAyIDMKIyA1MzQgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBf
X3B0aHJlYWRfYXRmb3JrICh2b2lkICgqX19wcmVwYXJlKSAodm9pZCksIHZvaWQgKCpfX3BhcmVu
dCkgKHZvaWQpLCB2b2lkICgqX19jaGlsZCkgKHZvaWQpKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHB0aHJlYWRfYXRmb3JrICh2b2lkICgqX19wcmVwYXJlKSAodm9pZCksIHZvaWQgKCpfX3BhcmVu
dCkgKHZvaWQpLCB2b2lkICgqX19jaGlsZCkgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu
IHZvaWQgcHRocmVhZF9raWxsX290aGVyX3RocmVhZHNfbnAgKHZvaWQpIHRocm93ICgpOwoKCgpl
eHRlcm4gdm9pZCBfX3B0aHJlYWRfaW5pdGlhbGl6ZSAodm9pZCkgdGhyb3cgKCk7Cgp9CiMgMjEg
Ii91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLWxvY2suaCIgMiAzCgp0eXBlZGVmIHB0aHJlYWRfbXV0
ZXhfdCBfSU9fbG9ja190OwojIDE2MCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDE3MCAi
L3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9f
bWFya2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgogIGludCBfcG9zOwoj
IDE4NyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKfTsKCnN0cnVjdCBfSU9fRklMRSB7CiAgaW50
IF9mbGFnczsKCgoKCiAgY2hhciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9JT19yZWFkX2VuZDsK
ICBjaGFyKiBfSU9fcmVhZF9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNlOwogIGNoYXIqIF9J
T193cml0ZV9wdHI7CiAgY2hhciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBfSU9fYnVmX2Jhc2U7
CiAgY2hhciogX0lPX2J1Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7CiAgY2hhciAqX0lP
X2JhY2t1cF9iYXNlOwogIGNoYXIgKl9JT19zYXZlX2VuZDsKCiAgc3RydWN0IF9JT19tYXJrZXIg
Kl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87CiAg
aW50IF9ibGtzaXplOwogIF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgoKCiAgdW5zaWduZWQgc2hvcnQg
X2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7CiAgY2hhciBfc2hvcnRi
dWZbMV07CgoKCiAgX0lPX2xvY2tfdCAqX2xvY2s7CiMgMjMzICIvdXNyL2luY2x1ZGUvbGliaW8u
aCIgMwogIF9fb2ZmNjRfdCBfb2Zmc2V0OwoKICBpbnQgX3VudXNlZDJbMTZdOwoKfTsKCgoKCgpz
dHJ1Y3QgX0lPX0ZJTEVfcGx1czsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFf
c3RkaW5fOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpleHRl
cm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwojIDI2MiAiL3Vzci9pbmNs
dWRlL2xpYmlvLmgiIDMKdHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICogX19j
b29raWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpOwojIDI3MSAiL3Vzci9pbmNsdWRl
L2xpYmlvLmgiIDMKdHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAodm9pZCAqIF9fY29v
a2llLCBfX2NvbnN0IGNoYXIgKl9fYnVmLCBzaXplX3QgX19uKTsKIyAyODAgIi91c3IvaW5jbHVk
ZS9saWJpby5oIiAzCnR5cGVkZWYgaW50IF9faW9fc2Vla19mbiAodm9pZCAqIF9fY29va2llLCBf
X29mZl90IF9fcG9zLCBpbnQgX193KTsKCgp0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2b2lk
ICogX19jb29raWUpOwoKCgoKdHlwZWRlZiBfX2lvX3JlYWRfZm4gY29va2llX3JlYWRfZnVuY3Rp
b25fdDsKdHlwZWRlZiBfX2lvX3dyaXRlX2ZuIGNvb2tpZV93cml0ZV9mdW5jdGlvbl90Owp0eXBl
ZGVmIF9faW9fc2Vla19mbiBjb29raWVfc2Vla19mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fY2xv
c2VfZm4gY29va2llX2Nsb3NlX2Z1bmN0aW9uX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QKewogIF9faW9f
cmVhZF9mbiAqcmVhZDsKICBfX2lvX3dyaXRlX2ZuICp3cml0ZTsKICBfX2lvX3NlZWtfZm4gKnNl
ZWs7CiAgX19pb19jbG9zZV9mbiAqY2xvc2U7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdDsK
dHlwZWRlZiBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IGNvb2tpZV9pb19mdW5jdGlvbnNfdDsK
CgpzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlCnsKICBzdHJ1Y3QgX0lPX0ZJTEUgX19maWxlOwogIGNv
bnN0IHZvaWQgKl9fdnRhYmxlOwogIHZvaWQgKl9fY29va2llOwogIF9JT19jb29raWVfaW9fZnVu
Y3Rpb25zX3QgX19pb19mdW5jdGlvbnM7Cn07CgoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50
IF9fdW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX3VmbG93IChf
SU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX292ZXJmbG93IChfSU9fRklMRSAqLCBp
bnQpIHRocm93ICgpOwojIDMzNyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBf
SU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19wdXRjIChp
bnQgX19jLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Zlb2YgKF9J
T19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklMRSAq
X19mcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9JT19GSUxFICpf
X2ZwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChfSU9fRklMRSAq
KSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJv
dyAoKTsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsK
IyAzNjMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zmc2NhbmYgKF9J
T19GSUxFICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsIF9fZ251Y192YV9s
aXN0LCBpbnQgKl9fcmVzdHJpY3QpIHRocm93ICgpOwoKZXh0ZXJuIGludCBfSU9fdmZwcmludGYg
KF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LCBfX2dudWNfdmFf
bGlzdCkgdGhyb3cgKCk7CgpleHRlcm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBp
bnQsIF9fc3NpemVfdCkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgX0lPX3NnZXRuIChfSU9fRklM
RSAqLCB2b2lkICosIHNpemVfdCkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmY2NF90IF9JT19zZWVr
b2ZmIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIF9f
b2ZmNjRfdCBfSU9fc2Vla3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQpIHRocm93ICgp
OwoKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93ICgp
OwoKCn0KIyA1OCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgp0eXBlZGVmIF9fb2ZmX3Qg
ZnBvc190OwoKCgoKdHlwZWRlZiBfX29mZjY0X3QgZnBvczY0X3Q7CiMgMTEwICIvdXNyL2luY2x1
ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAx
MTEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKZXh0ZXJuIEZJTEUgKnN0ZGluOwpleHRl
cm4gRklMRSAqc3Rkb3V0OwpleHRlcm4gRklMRSAqc3RkZXJyOwoKCgoKCgoKZXh0ZXJuIGludCBy
ZW1vdmUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHJl
bmFtZSAoX19jb25zdCBjaGFyICpfX29sZCwgX19jb25zdCBjaGFyICpfX25ldykgdGhyb3cgKCk7
CgoKCgpleHRlcm4gRklMRSAqdG1wZmlsZSAodm9pZCkgdGhyb3cgKCk7CiMgMTQwICIvdXNyL2lu
Y2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gRklMRSAqdG1wZmlsZTY0ICh2b2lkKSB0aHJvdyAoKTsK
CgpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNo
YXIgKnRtcG5hbV9yIChjaGFyICpfX3MpIHRocm93ICgpOwojIDE2MCAiL3Vzci9pbmNsdWRlL3N0
ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKnRlbXBuYW0gKF9fY29uc3QgY2hhciAqX19kaXIsIF9fY29u
c3QgY2hhciAqX19wZngpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmY2xvc2UgKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmZsdXNoIChGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CgoKCgpleHRlcm4gaW50IGZjbG9zZWFsbCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIEZJTEUgKmZvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwgX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgpOwoKCmV4dGVybiBGSUxFICpm
cmVvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbW9kZXMsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgp
OwojIDIwMyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIEZJTEUgKmZvcGVuNjQgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19tb2RlcykgdGhyb3cgKCk7CgpleHRlcm4gRklMRSAqZnJlb3BlbjY0IChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9k
ZXMsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklM
RSAqZmRvcGVuIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gRklMRSAqZm9wZW5jb29raWUgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdpY19jb29r
aWUsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLCBfSU9fY29va2llX2lvX2Z1bmN0
aW9uc190IF9faW9fZnVuY3MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqb3Blbl9tZW1z
dHJlYW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fYnVmbG9jLCBzaXplX3QgKl9fcmVzdHJpY3QgX19z
aXplbG9jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxFICpfX3Jlc3Ry
aWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGludCBzZXR2YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0
IF9fYnVmLCBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZv
aWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0
IF9fYnVmLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2V0bGluZWJ1
ZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHJpbnRmIChGSUxF
ICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs
IC4uLikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3ByaW50ZiAoY2hhciAq
X19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRo
cm93ICgpOwoKCgpleHRlcm4gaW50IHZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdnNw
cmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m
b3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHNu
cHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLCBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCkKCiAgICAgX19hdHRyaWJ1dGVf
XyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CgpleHRlcm4gaW50IF9fdnNucHJp
bnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLCBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKQoKCiAg
ICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7CmV4dGVy
biBpbnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLCBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0
aHJvdyAoKQoKCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMs
IDApKSk7CgoKCgoKZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRy
LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mLCBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhy
b3cgKCkKCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDAp
KSk7CmV4dGVybiBpbnQgX19hc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKSB0aHJvdyAoKQoKICAgICBfX2F0dHJpYnV0
ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGludCBhc3ByaW50
ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zt
dCwgLi4uKSB0aHJvdyAoKQoKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmlu
dGZfXywgMiwgMykpKTsKCgpleHRlcm4gaW50IHZkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZm10LCBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCkKCiAg
ICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVy
biBpbnQgZHByaW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwg
Li4uKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9f
LCAyLCAzKSkpOwoKCgoKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl
YW0sIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikg
dGhyb3cgKCk7CgpleHRlcm4gaW50IHNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
cywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGludCB2ZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCkKCgogICAg
IF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKZXh0ZXJu
IGludCB2c2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3Zh
X2xpc3QgX19hcmcpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9f
c2NhbmZfXywgMSwgMCkpKTsKCgpleHRlcm4gaW50IHZzc2NhbmYgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3Zh
X2xpc3QgX19hcmcpIHRocm93ICgpCgoKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAo
X19zY2FuZl9fLCAyLCAwKSkpOwoKCgoKZXh0ZXJuIGludCBmZ2V0YyAoRklMRSAqX19zdHJlYW0p
IHRocm93ICgpOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IGdldGNoYXIgKHZvaWQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBnZXRj
X3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZ2V0Y2hhcl91
bmxvY2tlZCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZnZXRjX3VubG9ja2VkIChG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRjIChpbnQgX19jLCBG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0YyAoaW50IF9fYywgRklMRSAq
X19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYykgdGhyb3cg
KCk7CgoKCgoKCgpleHRlcm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0
cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJ
TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2VkIChpbnQg
X19jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGdldHcgKEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHB1dHcgKGludCBfX3csIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBjaGFyICpmZ2V0cyAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24s
IEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZn
ZXRzX3VubG9ja2VkIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwgRklMRSAqX19yZXN0
cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9f
cykgdGhyb3cgKCk7CiMgNDEzICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gX19zc2l6
ZV90IF9fZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwgc2l6ZV90ICpfX3Jl
c3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0
aHJvdyAoKTsKCgpleHRlcm4gX19zc2l6ZV90IGdldGRlbGltIChjaGFyICoqX19yZXN0cmljdCBf
X2xpbmVwdHIsIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2RlbGltaXRlciwgRklMRSAq
X19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gX19zc2l6ZV90IGdldGxp
bmUgKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwg
RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgZnB1
dHMgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl
YW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0c191bmxvY2tlZCAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fcywgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gaW50IHB1dHMgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGludCB1bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IHNpemVfdCBmcmVhZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwgc2l6
ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHNp
emVfdCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6
ZSwgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IHNpemVfdCBmcmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9f
c2l6ZSwgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7Cgpl
eHRlcm4gc2l6ZV90IGZ3cml0ZV91bmxvY2tlZCAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9f
cHRyLCBzaXplX3QgX19zaXplLCBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFt
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBmc2VlayAoRklMRSAqX19zdHJlYW0sIGxvbmcg
aW50IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxs
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCByZXdpbmQgKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKTsKIyA0OTMgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBp
bnQgZnNlZWtvIChGSUxFICpfX3N0cmVhbSwgX19vZmZfdCBfX29mZiwgaW50IF9fd2hlbmNlKSB0
aHJvdyAoKTsKCmV4dGVybiBfX29mZl90IGZ0ZWxsbyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IGZnZXRwb3MgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3Nf
dCAqX19yZXN0cmljdCBfX3BvcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBmc2V0cG9zIChGSUxF
ICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSB0aHJvdyAoKTsKIyA1MjcgIi91c3Iv
aW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnNlZWtvNjQgKEZJTEUgKl9fc3RyZWFtLCBf
X29mZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3Qg
ZnRlbGxvNjQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmdldHBvczY0
IChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBmcG9zNjRfdCAqX19yZXN0cmljdCBfX3Bvcykg
dGhyb3cgKCk7CgpleHRlcm4gaW50IGZzZXRwb3M2NCAoRklMRSAqX19zdHJlYW0sIF9fY29uc3Qg
ZnBvczY0X3QgKl9fcG9zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnIgKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVvZiAoRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVy
biBpbnQgZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRl
cm4gdm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBp
bnQgc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsK
CgpleHRlcm4gaW50IF9zeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBfc3lz
X2Vycmxpc3RbXTsKCgoKCgpleHRlcm4gaW50IGZpbGVubyAoRklMRSAqX19zdHJlYW0pIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGludCBmaWxlbm9fdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKTsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVuIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwg
X19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHBjbG9zZSAoRklM
RSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpf
X3MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdXNlcmlkIChjaGFyICpfX3MpIHRocm93
ICgpOwoKCgoKc3RydWN0IG9ic3RhY2s7CgoKZXh0ZXJuIGludCBvYnN0YWNrX3ByaW50ZiAoc3Ry
dWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IG9ic3RhY2tfdnByaW50ZiAo
c3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJncykgdGhyb3cgKCk7CiMgNjE0ICIv
dXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gdm9pZCBmbG9ja2ZpbGUgKEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwojIDYzOCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKfQojIDM2ICIvdXNyL2xvY2Fs
L2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2k2ODYt
cGMtbGludXgtZ251L2JpdHMvYysraW8uaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNyAi
L3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl
L2crKy9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2lvLmgiIDIgMwojIDEgIi91c3IvbG9jYWwv
Z2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvaTY4Ni1w
Yy1saW51eC1nbnUvYml0cy9jKyt0aHJlYWRzLmgiIDEgMwojIDQ4ICIvdXNyL2xvY2FsL2djYzMv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2k2ODYtcGMtbGlu
dXgtZ251L2JpdHMvYysrdGhyZWFkcy5oIiAzCm5hbWVzcGFjZSBzdGQgewoKICBzdHJ1Y3QgX19u
dWxsX211dGV4dCB7IH07CiAgdHlwZWRlZiBfX251bGxfbXV0ZXh0IF9fbXV0ZXh0X3R5cGU7Cgp9
CiMgMzggIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAv
aW5jbHVkZS9nKysvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5oIiAyIDMKCm5hbWVzcGFj
ZSBzdGQKewoKICB0eXBlZGVmIGxvbmcgc3RyZWFtb2ZmOwogIHR5cGVkZWYgcHRyZGlmZl90IHN0
cmVhbXNpemU7CgogIHR5cGVkZWYgcHRyZGlmZl90IHdzdHJlYW1zaXplOwoKICB0eXBlZGVmIGZw
b3NfdCBfX2Nfc3RyZWFtcG9zOwoKCgoKICB0eXBlZGVmIGludCBfX2NfbG9jazsKCgoKCgogIHR5
cGVkZWYgRklMRSBfX2NfZmlsZV90eXBlOwoKCiAgc3RydWN0IF9faW9zX2ZsYWdzCiAgewogICAg
dHlwZWRlZiBzaG9ydCBfX2ludF90eXBlOwoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
X2Jvb2xhbHBoYSA9IDB4MDAwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2RlYyA9
IDB4MDAwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ZpeGVkID0gMHgwMDA0Owog
ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaGV4ID0gMHgwMDA4OwogICAgc3RhdGljIGNv
bnN0IF9faW50X3R5cGUgX1NfaW50ZXJuYWwgPSAweDAwMTA7CiAgICBzdGF0aWMgY29uc3QgX19p
bnRfdHlwZSBfU19sZWZ0ID0gMHgwMDIwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
b2N0ID0gMHgwMDQwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfcmlnaHQgPSAweDAw
ODA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zY2llbnRpZmljID0gMHgwMTAwOwog
ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd2Jhc2UgPSAweDAyMDA7CiAgICBzdGF0
aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9pbnQgPSAweDA0MDA7CiAgICBzdGF0aWMgY29u
c3QgX19pbnRfdHlwZSBfU19zaG93cG9zID0gMHgwODAwOwogICAgc3RhdGljIGNvbnN0IF9faW50
X3R5cGUgX1Nfc2tpcHdzID0gMHgxMDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
dW5pdGJ1ZiA9IDB4MjAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3VwcGVyY2Fz
ZSA9IDB4NDAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2FkanVzdGZpZWxkID0g
MHgwMDIwIHwgMHgwMDgwIHwgMHgwMDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
YmFzZWZpZWxkID0gMHgwMDAyIHwgMHgwMDQwIHwgMHgwMDA4OwogICAgc3RhdGljIGNvbnN0IF9f
aW50X3R5cGUgX1NfZmxvYXRmaWVsZCA9IDB4MDEwMCB8IDB4MDAwNDsKCgogICAgc3RhdGljIGNv
bnN0IF9faW50X3R5cGUgX1NfYmFkYml0ID0gMHgwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90
eXBlIF9TX2VvZmJpdCA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mYWls
Yml0ID0gMHgwNDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXBwID0gMHgwMTsK
ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2F0ZSA9IDB4MDI7CiAgICBzdGF0aWMgY29u
c3QgX19pbnRfdHlwZSBfU19iaW4gPSAweDA0OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg
X1NfaW4gPSAweDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfb3V0ID0gMHgxMDsK
ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3RydW5jID0gMHgyMDsKICB9Owp9CiMgNDAg
Ii91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk
ZS9nKysvYml0cy9mcG9zLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3djaGFyLmgiIDEgMwoj
IDM5ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvZysrL2JpdHMvc3RkX2N3Y2hhci5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9pNjg2LXBjLWxpbnV4LWdu
dS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jd2NoYXIuaCIgMiAz
CiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9p
bmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDQxICIvdXNyL2xvY2FsL2djYzMv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2N3
Y2hhci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51
eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRpby5oIiAxIDMKIyAzOSAiL3Vzci9s
b2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9i
aXRzL3N0ZF9jc3RkaW8uaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytj
b25maWcuaCIgMSAzCiMgNDAgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGlvLmgiIDIgMwojIDEgIi91c3Iv
bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysv
Yml0cy9zdGRfY3N0ZGFyZy5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkYXJnLmgiIDMK
IyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRhcmcuaCIgMiAzCgoK
CgoKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6dmFfbGlzdDsKfQojIDQxICIvdXNyL2xvY2Fs
L2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMv
c3RkX2NzdGRpby5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1w
Yy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgNDIg
Ii91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk
ZS9nKysvYml0cy9zdGRfY3N0ZGlvLmgiIDIgMwojIDQ0ICIvdXNyL2xvY2FsL2djYzMvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRpby5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDQ1ICIvdXNyL2xvY2FsL2djYzMv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2Nz
dGRpby5oIiAyIDMKIyA5NCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkaW8uaCIgMwpuYW1lc3BhY2Ugc3Rk
CnsKICB1c2luZyA6OkZJTEU7CiAgdXNpbmcgOjpmcG9zX3Q7CgogIGV4dGVybiAiQyIgaW50IHJl
bW92ZShjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBpbnQgcmVuYW1lKGNvbnN0IGNoYXIqLCBj
b25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBGSUxFKiB0bXBmaWxlKHZvaWQpOwogIGV4dGVybiAi
QyIgY2hhciogdG1wbmFtKGNoYXIqKTsKICBleHRlcm4gIkMiIGludCBmY2xvc2UoRklMRSopOwog
IGV4dGVybiAiQyIgaW50IGZmbHVzaChGSUxFKik7CiAgZXh0ZXJuICJDIiBGSUxFKiBmb3Blbihj
b25zdCBjaGFyKiwgY29uc3QgY2hhciopOwogIGV4dGVybiAiQyIgRklMRSogZnJlb3Blbihjb25z
dCBjaGFyKiwgY29uc3QgY2hhciosIEZJTEUqKTsKICBleHRlcm4gIkMiIHZvaWQgc2V0YnVmKEZJ
TEUqLCBjaGFyKik7CiAgZXh0ZXJuICJDIiBpbnQgc2V0dmJ1ZihGSUxFKiwgY2hhciosIGludCwg
c2l6ZV90KTsKICBleHRlcm4gIkMiIGludCBmcHJpbnRmKEZJTEUqLCBjb25zdCBjaGFyKiwgLi4u
KTsKICBleHRlcm4gIkMiIGludCBmc2NhbmYoRklMRSosIGNvbnN0IGNoYXIqLCAuLi4pOwogIGV4
dGVybiAiQyIgaW50IHByaW50Zihjb25zdCBjaGFyKiwgLi4uKTsKICBleHRlcm4gIkMiIGludCBz
Y2FuZihjb25zdCBjaGFyKiwgLi4uKTsKICBleHRlcm4gIkMiIGludCBzbnByaW50ZihjaGFyICos
IHNpemVfdCwgY29uc3QgY2hhciosIC4uLik7CiAgZXh0ZXJuICJDIiBpbnQgc3ByaW50ZihjaGFy
ICosIGNvbnN0IGNoYXIqLCAuLi4pOwogIGV4dGVybiAiQyIgaW50IHNzY2FuZihjb25zdCBjaGFy
KiwgY29uc3QgY2hhciosIC4uLik7CiAgZXh0ZXJuICJDIiBpbnQgdmZwcmludGYoRklMRSosIGNv
bnN0IGNoYXIqLCB2YV9saXN0KTsKICBleHRlcm4gIkMiIGludCB2ZnNjYW5mKEZJTEUqLCBjb25z
dCBjaGFyKiwgdmFfbGlzdCk7CiAgZXh0ZXJuICJDIiBpbnQgdnByaW50Zihjb25zdCBjaGFyKiwg
dmFfbGlzdCk7CiAgZXh0ZXJuICJDIiBpbnQgdnNjYW5mKGNvbnN0IGNoYXIqLCB2YV9saXN0KTsK
ICBleHRlcm4gIkMiIGludCB2c25wcmludGYoY2hhciosIHNpemVfdCwgY29uc3QgY2hhciosIHZh
X2xpc3QpOwogIGV4dGVybiAiQyIgaW50IHZzcHJpbnRmKGNoYXIqLCBjb25zdCBjaGFyKiwgdmFf
bGlzdCk7CiAgZXh0ZXJuICJDIiBpbnQgdnNzY2FuZihjb25zdCBjaGFyKiwgY29uc3QgY2hhcios
IHZhX2xpc3QpOwogIGV4dGVybiAiQyIgaW50IGZnZXRjKEZJTEUgKik7CiAgZXh0ZXJuICJDIiBj
aGFyICpmZ2V0cyhjaGFyKiwgaW50LCBGSUxFKik7CiAgZXh0ZXJuICJDIiBpbnQgZnB1dGMoaW50
LCBGSUxFKik7CiAgZXh0ZXJuICJDIiBpbnQgZnB1dHMoY29uc3QgY2hhciosIEZJTEUqKTsKICBl
eHRlcm4gIkMiIGludCBnZXRjKEZJTEUqKTsKICBleHRlcm4gIkMiIGludCBnZXRjaGFyKHZvaWQp
OwogIGV4dGVybiAiQyIgY2hhciAqZ2V0cyhjaGFyKik7CiAgZXh0ZXJuICJDIiBpbnQgcHV0Yyhp
bnQsIEZJTEUqKTsKICBleHRlcm4gIkMiIGludCBwdXRjaGFyKGludCk7CiAgZXh0ZXJuICJDIiBp
bnQgcHV0cyhjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBpbnQgdW5nZXRjKGludCwgRklMRSop
OwogIGV4dGVybiAiQyIgc2l6ZV90IGZyZWFkKHZvaWQqLCBzaXplX3QsIHNpemVfdCwgRklMRSop
OwogIGV4dGVybiAiQyIgc2l6ZV90IGZ3cml0ZShjb25zdCB2b2lkKiwgc2l6ZV90LCBzaXplX3Qs
IEZJTEUqKTsKICBleHRlcm4gIkMiIGludCBmZ2V0cG9zKEZJTEUqLCBmcG9zX3QqKTsKICBleHRl
cm4gIkMiIGludCBmc2VlayhGSUxFKiwgbG9uZyBpbnQsIGludCk7CiAgZXh0ZXJuICJDIiBpbnQg
ZnNldHBvcyhGSUxFKiwgY29uc3QgZnBvc190Kik7CiAgZXh0ZXJuICJDIiBsb25nIGludCBmdGVs
bChGSUxFKik7CiAgZXh0ZXJuICJDIiB2b2lkIHJld2luZChGSUxFKik7CiAgZXh0ZXJuICJDIiB2
b2lkIGNsZWFyZXJyKEZJTEUqKTsKICBleHRlcm4gIkMiIGludCBmZW9mKEZJTEUqKTsKICBleHRl
cm4gIkMiIGludCBmZXJyb3IoRklMRSopOwogIGV4dGVybiAiQyIgdm9pZCBwZXJyb3IoY29uc3Qg
Y2hhciopOwp9CiMgNDIgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3djaGFyLmgiIDIgMwojIDEgIi91c3IvbG9j
YWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0
cy9zdGRfY3N0ZGFyZy5oIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jd2NoYXIuaCIgMiAzCiMg
NTMgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5j
bHVkZS9nKysvYml0cy9zdGRfY3djaGFyLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg
MSAzCiMgMjcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1
cmVzLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgoKCiMgMSAiL3Vzci9p
bmNsdWRlL3N0ZGlvLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgoKCgoK
CiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9p
bmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDUz
ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IGNvdW50Owog
IHdpbnRfdCB2YWx1ZTsKfSBtYnN0YXRlX3Q7CiMgNzcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAz
CnN0cnVjdCB0bTsKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gd2NoYXJfdCAqd2NzY3B5ICh3Y2hh
cl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3Jj
KSB0aHJvdyAoKTsKCgpleHRlcm4gd2NoYXJfdCAqd2NzbmNweSAod2NoYXJfdCAqX19yZXN0cmlj
dCBfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikg
dGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19kZXN0LCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoKCmV4
dGVybiB3Y2hhcl90ICp3Y3NuY2F0ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25z
dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGludCB3Y3NjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpf
X3MyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgd2NzbmNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3Mx
LCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGludCB3Y3NjYXNlY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAq
X19zMikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3Y3NuY2FzZWNtcCAoX19jb25zdCB3Y2hhcl90
ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoK
IyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAxMTMgIi91c3IvaW5jbHVkZS93Y2hh
ci5oIiAyIDMKCmV4dGVybiBpbnQgX193Y3NjYXNlY21wX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19z
MSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IF9fd2NzbmNhc2VjbXBfbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0
IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK
CgoKCmV4dGVybiBpbnQgd2NzY29sbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdj
aGFyX3QgKl9fczIpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3hmcm0gKHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVf
dCBfX24pIHRocm93ICgpOwojIDEzNiAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKZXh0ZXJuIGlu
dCBfX3djc2NvbGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9f
czIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBfX3djc3hm
cm1fbCAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBzaXplX3QgX19uLCBf
X2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc2R1cCAoX19j
b25zdCB3Y2hhcl90ICpfX3MpIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqX19nbGliY3Bw
X3djc2NociAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgd2NoYXJfdCBfX3djKSB0aHJvdyAoKTsK
CmV4dGVybiB3Y2hhcl90ICpfX2dsaWJjcHBfd2NzcmNociAoX19jb25zdCB3Y2hhcl90ICpfX3dj
cywgd2NoYXJfdCBfX3djKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3Njc3BuIChfX2Nv
bnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVqZWN0KSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIHNpemVfdCB3Y3NzcG4gKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qg
d2NoYXJfdCAqX19hY2NlcHQpIHRocm93ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3BicmsgKF9f
Y29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpIHRocm93ICgp
OwoKCmV4dGVybiB3Y2hhcl90ICpfX2dsaWJjcHBfd2Nzc3RyIChfX2NvbnN0IHdjaGFyX3QgKl9f
aGF5c3RhY2ssIF9fY29uc3Qgd2NoYXJfdCAqX19uZWVkbGUpIHRocm93ICgpOwojIDE3NCAiL3Vz
ci9pbmNsdWRlL3djaGFyLmgiIDMKZXh0ZXJuIHdjaGFyX3QgKndjc3RvayAod2NoYXJfdCAqX19y
ZXN0cmljdCBfX3MsIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2RlbGltLCB3Y2hhcl90
ICoqX19yZXN0cmljdCBfX3B0cikgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IF9fd2NzbGVu
IChfX2NvbnN0IHdjaGFyX3QgKl9fcykgdGhyb3cgKCk7CmV4dGVybiBzaXplX3Qgd2NzbGVuIChf
X2NvbnN0IHdjaGFyX3QgKl9fcykgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3Qgd2NzbmxlbiAo
X19jb25zdCB3Y2hhcl90ICpfX3MsIHNpemVfdCBfX21heGxlbikgdGhyb3cgKCk7CgoKCgpleHRl
cm4gd2NoYXJfdCAqX19nbGliY3BwX3dtZW1jaHIgKF9fY29uc3Qgd2NoYXJfdCAqX19zLCB3Y2hh
cl90IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3bWVtY21wIChfX2Nv
bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqd21lbWNweSAo
d2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19z
Miwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd21lbW1vdmUgKHdj
aGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7
CgoKCmV4dGVybiB3Y2hhcl90ICp3bWVtc2V0ICh3Y2hhcl90ICpfX3MsIHdjaGFyX3QgX19jLCBz
aXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB3aW50X3QgYnRvd2MgKGludCBfX2MpIHRo
cm93ICgpOwoKCgpleHRlcm4gaW50IHdjdG9iICh3aW50X3QgX19jKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGludCBtYnNpbml0IChfX2NvbnN0IG1ic3RhdGVfdCAqX19wcykgdGhyb3cgKCk7CgoKCmV4
dGVybiBzaXplX3QgbWJydG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwgbWJzdGF0ZV90ICpfX3ApIHRocm93ICgp
OwoKCgoKZXh0ZXJuIHNpemVfdCB3Y3J0b21iIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgd2NoYXJf
dCBfX3djLCBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCmV4dGVybiBz
aXplX3QgX19tYnJsZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24s
IG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCmV4dGVybiBzaXplX3QgbWJy
bGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLCBtYnN0YXRlX3Qg
Kl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CiMgMjQ3ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg
MwpleHRlcm4gc2l6ZV90IG1ic3J0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX2RzdCwgX19j
b25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbGVuLCBtYnN0YXRlX3QgKl9f
cmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHNpemVfdCB3Y3NydG9tYnMgKGNo
YXIgKl9fcmVzdHJpY3QgX19kc3QsIF9fY29uc3Qgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19zcmMs
IHNpemVfdCBfX2xlbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgoK
CgoKZXh0ZXJuIHNpemVfdCBtYnNucnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LCBf
X2NvbnN0IGNoYXIgKipfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19ubWMsIHNpemVfdCBfX2xl
biwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgoKCmV4dGVybiBzaXpl
X3Qgd2NzbnJ0b21icyAoY2hhciAqX19yZXN0cmljdCBfX2RzdCwgX19jb25zdCB3Y2hhcl90ICoq
X19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbndjLCBzaXplX3QgX19sZW4sIG1ic3RhdGVfdCAq
X19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKIyAyNzcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAz
CmV4dGVybiBpbnQgd2N3aWR0aCAod2ludF90IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg
d2Nzd2lkdGggKF9fY29uc3Qgd2NoYXJfdCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gZG91YmxlIHdjc3RvZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0
ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZs
b2F0IHdjc3RvZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHdjc3Rv
bGQgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IHdjc3RvbCAoX19j
b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50
IHdjc3RvdWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgoKCgoKX19leHRlbnNp
b25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b3EgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0
cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0
aHJvdyAoKTsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQg
d2NzdG91cSAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKCgoKX19leHRlbnNp
b25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b2xsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkg
dGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50
IHdjc3RvdWxsIChfX2NvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwojIDM1NSAiL3Vzci9p
bmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAzNTYg
Ii91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCgoKZXh0ZXJuIGxvbmcgaW50IF9fd2NzdG9sX2wg
KF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fd2NzdG91bF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwg
X19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcg
bG9uZyBpbnQgX193Y3N0b2xsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIs
IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9f
bG9jKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25n
IGludCBfX3djc3RvdWxsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdj
aGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9j
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIF9fd2NzdG9kX2wgKF9fY29uc3Qgd2NoYXJf
dCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xv
Y2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IF9fd2NzdG9mX2wgKF9fY29u
c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIF9f
d2NzdG9sZF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90ICoq
X19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgoKCgpl
eHRlcm4gZG91YmxlIF9fd2NzdG9kX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp
Y3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApIHRo
cm93ICgpOwoKCmV4dGVybiBmbG9hdCBfX3djc3RvZl9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf
X2dyb3VwKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgX193Y3N0b2xkX2ludGVybmFs
IChfX2NvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJp
Y3QgX19lbmRwdHIsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBpbnQg
X193Y3N0b2xfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdj
aGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fd2NzdG91bF9pbnRlcm5hbCAo
X19jb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKiogX19yZXN0cmlj
dCBfX2VuZHB0ciwgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKCgoKX19l
eHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3djc3RvbGxfaW50ZXJuYWwgKF9fY29u
c3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKCgpfX2V4dGVuc2lv
bl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fd2NzdG91bGxfaW50ZXJuYWwgKF9f
Y29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqIF9fcmVzdHJpY3Qg
X19lbmRwdHIsIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKIyA0ODIgIi91c3Iv
aW5jbHVkZS93Y2hhci5oIiAzCmV4dGVybiB3Y2hhcl90ICp3Y3BjcHkgKHdjaGFyX3QgKl9fZGVz
dCwgX19jb25zdCB3Y2hhcl90ICpfX3NyYykgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90ICp3
Y3BuY3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19zcmMsIHNpemVfdCBf
X24pIHRocm93ICgpOwojIDUwMiAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKfQojIDU0ICIvdXNy
L2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysr
L2JpdHMvc3RkX2N3Y2hhci5oIiAyIDMKIyA2OCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jd2NoYXIuaCIgMwpu
YW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Om1ic3RhdGVfdDsKfQojIDEyMCAiL3Vzci9sb2NhbC9n
Y2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0
ZF9jd2NoYXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OndpbnRfdDsKCiAgZXh0ZXJu
ICJDIiB3aW50X3QgYnRvd2MoaW50KTsKICBleHRlcm4gIkMiIGludCB3Y3RvYih3aW50X3QpOwog
IGV4dGVybiAiQyIgd2ludF90IGZnZXR3YyhGSUxFKik7CiAgZXh0ZXJuICJDIiB3Y2hhcl90KiBm
Z2V0d3Mod2NoYXJfdCosIGludCwgRklMRSopOwogIGV4dGVybiAiQyIgd2ludF90IGZwdXR3Yyh3
Y2hhcl90LCBGSUxFKik7CiAgZXh0ZXJuICJDIiBpbnQgZnB1dHdzKGNvbnN0IHdjaGFyX3QqLCBG
SUxFKik7CiAgZXh0ZXJuICJDIiBpbnQgZndpZGUoRklMRSosIGludCk7CiAgZXh0ZXJuICJDIiBp
bnQgZndwcmludGYoRklMRSosIGNvbnN0IHdjaGFyX3QqLCAuLi4pOwogIGV4dGVybiAiQyIgaW50
IGZ3c2NhbmYoRklMRSosIGNvbnN0IHdjaGFyX3QqLCAuLi4pOwogIGV4dGVybiAiQyIgaW50IHN3
cHJpbnRmKHdjaGFyX3QqLCBzaXplX3QsIGNvbnN0IHdjaGFyX3QqLCAuLi4pOwogIGV4dGVybiAi
QyIgaW50IHN3c2NhbmYoY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqLCAuLi4pOwogIGV4
dGVybiAiQyIgaW50IHZmd3ByaW50ZihGSUxFKiwgY29uc3Qgd2NoYXJfdCosIHZhX2xpc3QpOwog
IGV4dGVybiAiQyIgaW50IHZmd3NjYW5mKEZJTEUqLCBjb25zdCB3Y2hhcl90KiwgdmFfbGlzdCk7
CiAgZXh0ZXJuICJDIiBpbnQgdnN3cHJpbnRmKHdjaGFyX3QqLCBzaXplX3QsIGNvbnN0IHdjaGFy
X3QqLCB2YV9saXN0KTsKICBleHRlcm4gIkMiIGludCB2c3dzY2FuZihjb25zdCB3Y2hhcl90Kiwg
Y29uc3Qgd2NoYXJfdCosIHZhX2xpc3QpOwogIGV4dGVybiAiQyIgaW50IHZ3cHJpbnRmKGNvbnN0
IHdjaGFyX3QqLCB2YV9saXN0KTsKICBleHRlcm4gIkMiIGludCB2d3NjYW5mKGNvbnN0IHdjaGFy
X3QqLCB2YV9saXN0KTsKICBleHRlcm4gIkMiIGludCB3cHJpbnRmKGNvbnN0IHdjaGFyX3QqLCAu
Li4pOwogIGV4dGVybiAiQyIgaW50IHdzY2FuZihjb25zdCB3Y2hhcl90KiwgLi4uKTsKICBleHRl
cm4gIkMiIHdpbnRfdCBnZXR3YyhGSUxFKiBzdHJlYW0pOwogIGV4dGVybiAiQyIgd2ludF90IGdl
dHdjaGFyKHZvaWQpOwogIGV4dGVybiAiQyIgaW50IG1ic2luaXQoY29uc3QgbWJzdGF0ZV90Kik7
CiAgZXh0ZXJuICJDIiBzaXplX3QgbWJybGVuKGNvbnN0IGNoYXIqLCBzaXplX3QsIG1ic3RhdGVf
dCopOwogIGV4dGVybiAiQyIgc2l6ZV90IG1icnRvd2Mod2NoYXJfdCosIGNvbnN0IGNoYXIqLCBz
aXplX3QsIG1ic3RhdGVfdCopOwogIGV4dGVybiAiQyIgc2l6ZV90IG1ic3J0b3djcyh3Y2hhcl90
KiwgY29uc3QgY2hhcioqLCBzaXplX3QsIG1ic3RhdGVfdCopOwogIGV4dGVybiAiQyIgc2l6ZV90
IHdjc3J0b21icyhjaGFyKiwgY29uc3Qgd2NoYXJfdCAqKiwgc2l6ZV90LCBtYnN0YXRlX3QqKTsK
ICBleHRlcm4gIkMiIHdpbnRfdCBwdXR3Yyh3Y2hhcl90LCBGSUxFKik7CiAgZXh0ZXJuICJDIiB3
aW50X3QgcHV0d2NoYXIod2NoYXJfdCk7CiAgZXh0ZXJuICJDIiB3aW50X3QgdW5nZXR3Yyh3aW50
X3QsIEZJTEUqKTsKICBleHRlcm4gIkMiIHNpemVfdCB3Y3J0b21iKGNoYXIqLCB3Y2hhcl90LCBt
YnN0YXRlX3QqKTsKICBleHRlcm4gIkMiIGRvdWJsZSB3Y3N0b2QoY29uc3Qgd2NoYXJfdCosIHdj
aGFyX3QqKik7CiAgZXh0ZXJuICJDIiBmbG9hdCB3Y3N0b2YoY29uc3Qgd2NoYXJfdCosIHdjaGFy
X3QqKik7CiAgZXh0ZXJuICJDIiBsb25nIGludCB3Y3N0b2woY29uc3Qgd2NoYXJfdCosIHdjaGFy
X3QqKiwgaW50KTsKICBleHRlcm4gIkMiIHVuc2lnbmVkIGxvbmcgaW50IHdjc3RvdWwoY29uc3Qg
d2NoYXJfdCosIHdjaGFyX3QqKiwgaW50KTsKICBleHRlcm4gIkMiIHdjaGFyX3QqIHdjc2NweSh3
Y2hhcl90KiBzMSwgY29uc3Qgd2NoYXJfdCopOwogIGV4dGVybiAiQyIgd2NoYXJfdCogd2NzbmNw
eSh3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCosIHNpemVfdCk7CiAgZXh0ZXJuICJDIiB3Y2hhcl90
KiB3Y3NjYXQod2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqKTsKICBleHRlcm4gIkMiIHdjaGFyX3Qq
IHdjc25jYXQod2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqLCBzaXplX3QpOwogIGV4dGVybiAiQyIg
aW50IHdjc2NtcChjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopOwogIGV4dGVybiAiQyIg
aW50IHdjc2NvbGwoY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqKTsKICBleHRlcm4gIkMi
IGludCB3Y3NuY21wKGNvbnN0IHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kiwgc2l6ZV90KTsKICBl
eHRlcm4gIkMiIHNpemVfdCB3Y3N4ZnJtKHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kiwgc2l6ZV90
KTsKICBleHRlcm4gIkMiIGNvbnN0IHdjaGFyX3QqIHdjc2Nocihjb25zdCB3Y2hhcl90Kiwgd2No
YXJfdCk7CiAgaW5saW5lIHdjaGFyX3QqCiAgd2NzY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBf
X2MpCiAgewogICAgcmV0dXJuIGNvbnN0X2Nhc3Q8d2NoYXJfdCo+KHdjc2Nocihjb25zdF9jYXN0
PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBfX2MpKTsKICB9CiAgZXh0ZXJuICJDIiBzaXplX3Qgd2Nz
Y3Nwbihjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopOwogIGV4dGVybiAiQyIgc2l6ZV90
IHdjc2xlbihjb25zdCB3Y2hhcl90Kik7CiAgZXh0ZXJuICJDIiBjb25zdCB3Y2hhcl90KiB3Y3Nw
YnJrKGNvbnN0IHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kik7CiAgaW5saW5lIHdjaGFyX3QqCiAg
d2NzcGJyayh3Y2hhcl90KiBfX3MxLCB3Y2hhcl90KiBfX3MyKQogIHsKICAgIHJldHVybiBjb25z
dF9jYXN0PHdjaGFyX3QqPih3Y3NwYnJrKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fczEp
LCBfX3MyKSk7CiAgfQogIGV4dGVybiAiQyIgY29uc3Qgd2NoYXJfdCogd2NzcmNocihjb25zdCB3
Y2hhcl90Kiwgd2NoYXJfdCk7CiAgaW5saW5lIHdjaGFyX3QqCiAgd2NzcmNocih3Y2hhcl90KiBf
X3AsIHdjaGFyX3QgX19jKQogIHsKICAgIHJldHVybiBjb25zdF9jYXN0PHdjaGFyX3QqPih3Y3Ny
Y2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYykpOwogIH0KICBleHRlcm4g
IkMiIHNpemVfdCB3Y3NzcG4oY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqKTsKICBleHRl
cm4gIkMiIGNvbnN0IHdjaGFyX3QqIHdjc3N0cihjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJf
dCopOwogIGlubGluZSB3Y2hhcl90KgogIHdjc3N0cih3Y2hhcl90KiBfX3MxLCB3Y2hhcl90KiBf
X3MyKQogIHsKICAgIHJldHVybiBjb25zdF9jYXN0PHdjaGFyX3QqPih3Y3NzdHIoY29uc3RfY2Fz
dDxjb25zdCB3Y2hhcl90Kj4oX19zMSksIF9fczIpKTsKICB9CiAgZXh0ZXJuICJDIiB3Y2hhcl90
KiB3Y3N0b2sod2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqLCB3Y2hhcl90KiopOwogIGV4dGVybiAi
QyIgY29uc3Qgd2NoYXJfdCogd21lbWNocihjb25zdCB3Y2hhcl90Kiwgd2NoYXJfdCwgc2l6ZV90
KTsKICBpbmxpbmUgd2NoYXJfdCoKICB3bWVtY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2Ms
IHNpemVfdCBfX24pCiAgewogICAgcmV0dXJuIGNvbnN0X2Nhc3Q8d2NoYXJfdCo+KHdtZW1jaHIo
Y29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jLCBfX24pKTsKICB9CiAgZXh0ZXJu
ICJDIiBpbnQgd21lbWNtcChjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCosIHNpemVfdCk7
CiAgZXh0ZXJuICJDIiB3Y2hhcl90KiB3bWVtY3B5KHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kiwg
c2l6ZV90KTsKICBleHRlcm4gIkMiIHdjaGFyX3QqIHdtZW1tb3ZlKHdjaGFyX3QqLCBjb25zdCB3
Y2hhcl90Kiwgc2l6ZV90KTsKICBleHRlcm4gIkMiIHdjaGFyX3QqIHdtZW1zZXQod2NoYXJfdCos
IHdjaGFyX3QsIHNpemVfdCk7CiAgZXh0ZXJuICJDIiBzaXplX3Qgd2NzZnRpbWUod2NoYXJfdCos
IHNpemVfdCwgY29uc3Qgd2NoYXJfdCosIGNvbnN0IHN0cnVjdCB0bSopOwp9CiMgNDEgIi91c3Iv
bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysv
Yml0cy9mcG9zLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1N0YXRlVD4KICAgIGNsYXNzIGZwb3MKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYg
X1N0YXRlVCBfX3N0YXRlX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgX19zdGF0ZV90eXBlIF9N
X3N0OwogICAgICBzdHJlYW1vZmYgX01fb2ZmOwoKICAgIHB1YmxpYzoKICAgICAgX19zdGF0ZV90
eXBlCiAgICAgIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gX01fc3Q7IH0KCiAgICAgIHZvaWQKICAg
ICAgc3RhdGUoX19zdGF0ZV90eXBlIF9fc3QpIHsgX01fc3QgPSBfX3N0OyB9CgoKCiAgICAgIGZw
b3MoKTogX01fc3QoX19zdGF0ZV90eXBlKCkpLCBfTV9vZmYoc3RyZWFtb2ZmKCkpIHsgfQoKICAg
ICAgZnBvcyhzdHJlYW1vZmYgX19vZmYsIF9fc3RhdGVfdHlwZSBfX3N0ID0gX19zdGF0ZV90eXBl
KCkpCiAgICAgIDogX01fc3QoX19zdCksIF9NX29mZihfX29mZikgeyB9CgogICAgICBvcGVyYXRv
ciBzdHJlYW1vZmYoKSBjb25zdCB7IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIGZwb3MmCiAgICAg
IG9wZXJhdG9yKz0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiArPSBfX29mZjsgcmV0dXJuICp0
aGlzOyB9CgogICAgICBmcG9zJgogICAgICBvcGVyYXRvci09KHN0cmVhbW9mZiBfX29mZikgeyBf
TV9vZmYgLT0gX19vZmY7IHJldHVybiAqdGhpczsgfQoKICAgICAgZnBvcyYKICAgICAgb3BlcmF0
b3IrKHN0cmVhbW9mZiBfX29mZikKICAgICAgewogICAgICAgIGZwb3MgdCgqdGhpcyk7CiAgICAg
ICAgcmV0dXJuIHQgKz0gX19vZmY7CiAgICAgIH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9y
LShzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAgICBmcG9zIHQoKnRoaXMpOwogICAgICAg
IHJldHVybiB0IC09IF9fb2ZmOwogICAgICB9CgogICAgICBib29sCiAgICAgIG9wZXJhdG9yPT0o
Y29uc3QgZnBvcyYgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX29mZiA9PSBfX3Bvcy5f
TV9vZmY7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IhPShjb25zdCBmcG9zJiBfX3Bvcykg
Y29uc3QKICAgICAgeyByZXR1cm4gX01fb2ZmICE9IF9fcG9zLl9NX29mZjsgfQoKICAgICAgc3Ry
ZWFtb2ZmCiAgICAgIF9NX3Bvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gX01fb2ZmOyB9CgogICAg
ICB2b2lkCiAgICAgIF9NX3Bvc2l0aW9uKHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgPSBfX29m
ZjsgfQogICAgfTsKCgogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHN0cmVhbXBvczsKCiAgdHlw
ZWRlZiBmcG9zPG1ic3RhdGVfdD4gd3N0cmVhbXBvczsKCn0KIyA0MiAiL3Vzci9sb2NhbC9nY2Mz
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9p
b3Nmd2QuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNy
L2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysr
L2JpdHMvZnVuY3RleGNlcHQuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAz
CiMgMzUgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAv
aW5jbHVkZS9nKysvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2
b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFk
X2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQK
ICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJv
cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3Qg
Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFy
KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsK
CiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK
ICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZs
b3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVyZShjb25z
dCBjaGFyKiBfX3MpOwp9CiMgNDMgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9zZndkLmgiIDIgMwoKbmFtZXNw
YWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0g
Y2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pb3M7CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgog
ICAgY2xhc3MgYmFzaWNfc3RyZWFtYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lz
dHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNo
YXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+
CiAgICBjbGFzcyBiYXNpY19pb3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICAgdHlwZW5h
bWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nYnVm
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3Ry
YWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hh
clQ+ID4KICAgIGNsYXNzIGJhc2ljX2lzdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAg
ICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNf
b3N0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBh
bGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmdzdHJlYW07CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFy
VD4gPgogICAgY2xhc3MgYmFzaWNfZmlsZWJ1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNp
Y19pZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
ID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vZnN0cmVhbTsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0No
YXJUPiA+CiAgICBjbGFzcyBiYXNpY19mc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGlz
dHJlYW1idWZfaXRlcmF0b3I7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVy
YXRvcjsKCgoKICBjbGFzcyBpb3NfYmFzZTsKCgogIHR5cGVkZWYgYmFzaWNfaW9zPGNoYXI+IGlv
czsKICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPiBzdHJlYW1idWY7CiAgdHlwZWRlZiBi
YXNpY19pc3RyZWFtPGNoYXI+IGlzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXI+
IG9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19pb3N0cmVhbTxjaGFyPiBpb3N0cmVhbTsKICB0eXBl
ZGVmIGJhc2ljX3N0cmluZ2J1ZjxjaGFyPiBzdHJpbmdidWY7CiAgdHlwZWRlZiBiYXNpY19pc3Ry
aW5nc3RyZWFtPGNoYXI+IGlzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3Ry
ZWFtPGNoYXI+IG9zdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdzdHJlYW08Y2hh
cj4gc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyPiBmaWxlYnVmOwog
IHR5cGVkZWYgYmFzaWNfaWZzdHJlYW08Y2hhcj4gaWZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19v
ZnN0cmVhbTxjaGFyPiBvZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08Y2hhcj4gZnN0
cmVhbTsKCgogIHR5cGVkZWYgYmFzaWNfaW9zPHdjaGFyX3Q+IHdpb3M7CiAgdHlwZWRlZiBiYXNp
Y19zdHJlYW1idWY8d2NoYXJfdD4gd3N0cmVhbWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08
d2NoYXJfdD4gd2lzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPHdjaGFyX3Q+IHdvc3Ry
ZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08d2NoYXJfdD4gd2lvc3RyZWFtOwogIHR5cGVk
ZWYgYmFzaWNfc3RyaW5nYnVmPHdjaGFyX3Q+IHdzdHJpbmdidWY7CiAgdHlwZWRlZiBiYXNpY19p
c3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdpc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0
cmluZ3N0cmVhbTx3Y2hhcl90PiB3b3N0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmlu
Z3N0cmVhbTx3Y2hhcl90PiB3c3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZmlsZWJ1Zjx3
Y2hhcl90PiB3ZmlsZWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lmc3RyZWFtPHdjaGFyX3Q+IHdpZnN0
cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPHdjaGFyX3Q+IHdvZnN0cmVhbTsKICB0eXBl
ZGVmIGJhc2ljX2ZzdHJlYW08d2NoYXJfdD4gd2ZzdHJlYW07Cgp9CiMgNDkgIi91c3IvbG9jYWwv
Z2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9z
dGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVz
LmgiIDEgMwojIDQwICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwoKbmFt
ZXNwYWNlIHN0ZAp7CgpzdHJ1Y3QgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3Qgb3V0cHV0
X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGZvcndhcmRfaXRlcmF0b3JfdGFnIDogcHVibGljIGlu
cHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIDog
cHVibGljIGZvcndhcmRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVy
YXRvcl90YWcgOiBwdWJsaWMgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcge307CgoKCgoKCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGlucHV0X2l0ZXJhdG9y
IHsKICB0eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBl
ZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsK
ICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoKc3Ry
dWN0IG91dHB1dF9pdGVyYXRvciB7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJh
dG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBk
aWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJl
ZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0
IGZvcndhcmRfaXRlcmF0b3IgewogIHR5cGVkZWYgZm9yd2FyZF9pdGVyYXRvcl90YWcgaXRlcmF0
b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5j
ZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAm
IHJlZmVyZW5jZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0
cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yIHsKICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRl
cmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAg
dHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVy
OwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfRGlzdGFuY2U+IHN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yIHsKICB0eXBlZGVmIHJh
bmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1Rw
IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVk
ZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0NhdGVnb3J5LCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZSA9IHB0cmRpZmZfdCwK
ICAgICAgICAgIGNsYXNzIF9Qb2ludGVyID0gX1RwKiwgY2xhc3MgX1JlZmVyZW5jZSA9IF9UcCY+
CnN0cnVjdCBpdGVyYXRvciB7CiAgdHlwZWRlZiBfQ2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7
CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNl
X3R5cGU7CiAgdHlwZWRlZiBfUG9pbnRlciBwb2ludGVyOwogIHR5cGVkZWYgX1JlZmVyZW5jZSBy
ZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgpzdHJ1Y3QgaXRlcmF0b3Jf
dHJhaXRzIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkg
aXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnZhbHVlX3R5
cGUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6ZGlmZmVyZW5jZV90
eXBlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRl
ciBwb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpyZWZlcmVuY2UgcmVmZXJl
bmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxfVHAq
PiB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29y
eTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVu
Y2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNl
Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxjb25zdCBf
VHAqPiB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRl
Z29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZl
cmVuY2VfdHlwZTsKICB0eXBlZGVmIGNvbnN0IF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0
IF9UcCYgcmVmZXJlbmNlOwp9OwojIDE0MCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5
cGVzLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKX19pdGVyYXRvcl9jYXRlZ29yeShjb25z
dCBfSXRlciYpCnsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0
ZXJhdG9yX2NhdGVnb3J5IF9DYXRlZ29yeTsKICByZXR1cm4gX0NhdGVnb3J5KCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46
OmRpZmZlcmVuY2VfdHlwZSoKX19kaXN0YW5jZV90eXBlKGNvbnN0IF9JdGVyJikKewogIHJldHVy
biBzdGF0aWNfY2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNl
X3R5cGUqPigwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoKX192YWx1ZV90eXBlKGNvbnN0IF9JdGVy
JikKewogIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+
Ojp2YWx1ZV90eXBlKj4oMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5Cml0ZXJhdG9yX2Nh
dGVnb3J5KGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19p
KTsgfQoKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSoKZGlzdGFuY2VfdHlwZShjb25zdCBfSXRlciYg
X19pKSB7IHJldHVybiBfX2Rpc3RhbmNlX3R5cGUoX19pKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9J
dGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoK
dmFsdWVfdHlwZShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX3ZhbHVlX3R5cGUoX19pKTsg
fQoKfQojIDUwICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwv
Z2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9z
dGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRv
cl9iYXNlX2Z1bmNzLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1w
Yy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvY29uY2VwdF9jaGVjay5oIiAxIDMKIyAz
NCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNs
dWRlL2crKy9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMwoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2k2ODYtcGMtbGludXgt
Z251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDM2ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvY29uY2VwdF9jaGVjay5o
IiAyIDMKIyA0MSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDIgMwoKbmFt
ZXNwYWNlIHN0ZAp7CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBf
RGlzdGFuY2U+CmlubGluZSB2b2lkIF9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwg
X0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSYg
X19uLCBpbnB1dF9pdGVyYXRvcl90YWcpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHdoaWxlIChfX2ZpcnN0
ICE9IF9fbGFzdCkgeyArK19fZmlyc3Q7ICsrX19uOyB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19kaXN0YW5j
ZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0
YW5jZSYgX19uLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICBfX24gKz0gX19sYXN0IC0gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGRpc3RhbmNlKF9J
bnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9y
IF9fbGFzdCwgX0Rpc3RhbmNlJiBfX24pCnsKCiAgX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3Qs
IF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0
b3I+OjpkaWZmZXJlbmNlX3R5cGUKX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf
SW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90
eXBlIF9fbiA9IDA7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICArK19fZmlyc3Q7
ICsrX19uOwogIH0KICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ
dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIHJhbmRv
bV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJl
dHVybiBfX2xhc3QgLSBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+
CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJl
bmNlX3R5cGUKZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig
X19sYXN0KQp7CgogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJh
dG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgIF9DYXRlZ29yeTsKICByZXR1cm4gX19kaXN0YW5j
ZShfX2ZpcnN0LCBfX2xhc3QsIF9DYXRlZ29yeSgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9JbnB1dEl0ZXIm
IF9faSwgX0Rpc3RhbmNlIF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHdo
aWxlIChfX24tLSkgKytfX2k7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXJh
dG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfQmlkaXJlY3Rpb25h
bEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICBiaWRp
cmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBp
ZiAoX19uID4gMCkKICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAgZWxzZQogICAgd2hpbGUgKF9f
bisrKSAtLV9faTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xh
c3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
JiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNz
X2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBfX2kgKz0gX19u
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5s
aW5lIHZvaWQgYWR2YW5jZShfSW5wdXRJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uKQp7Cgog
IF9fYWR2YW5jZShfX2ksIF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19pKSk7Cn0KCn0KIyA1MSAi
L3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl
L2crKy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJhdG9y
LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKbmFtZXNwYWNlIHN0ZAp7
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KY2xhc3MgYmFja19pbnNlcnRfaXRlcmF0b3Ig
ewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBf
Q29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBp
dGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZv
aWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9p
ZCByZWZlcmVuY2U7CgogIGV4cGxpY2l0IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXIm
IF9feCkgOiBjb250YWluZXIoJl9feCkge30KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFp
bmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYg
X192YWx1ZSkgewogICAgY29udGFpbmVyLT5wdXNoX2JhY2soX192YWx1ZSk7CiAgICByZXR1cm4g
KnRoaXM7CiAgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcioo
KSB7IHJldHVybiAqdGhpczsgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBv
cGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29u
dGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0NvbnRhaW5lcj4KaW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+
IGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KSB7CiAgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0
ZXJhdG9yPF9Db250YWluZXI+KF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpj
bGFzcyBmcm9udF9pbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29u
dGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwogIHR5
cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZv
aWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYg
dm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7CgogIGV4cGxpY2l0IGZyb250
X2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHt9CiAg
ZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBl
bmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7CiAgICBjb250YWluZXItPnB1
c2hfZnJvbnQoX192YWx1ZSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGZyb250X2luc2VydF9p
dGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBmcm9u
dF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhp
czsgfQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQp
IHsgcmV0dXJuICp0aGlzOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KaW5saW5l
IGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBmcm9udF9pbnNlcnRlcihfQ29udGFp
bmVyJiBfX3gpIHsKICByZXR1cm4gZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9f
eCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFzcyBpbnNlcnRfaXRlcmF0b3Ig
ewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwogIHR5cGVuYW1lIF9Db250YWlu
ZXI6Oml0ZXJhdG9yIGl0ZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVy
X3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Owog
IHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7
CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAgaW5z
ZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0
b3IgX19pKQogICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQogIGluc2VydF9pdGVy
YXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6
dmFsdWVfdHlwZSYgX192YWx1ZSkgewogICAgaXRlciA9IGNvbnRhaW5lci0+aW5zZXJ0KGl0ZXIs
IF9fdmFsdWUpOwogICAgKytpdGVyOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpbnNlcnRfaXRl
cmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgaW5zZXJ0
X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBp
bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhp
czsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXIsIGNsYXNzIF9JdGVyYXRvcj4KaW5s
aW5lCmluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBpbnNlcnRlcihfQ29udGFpbmVyJiBfX3gs
IF9JdGVyYXRvciBfX2kpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9y
IF9faXRlcjsKICByZXR1cm4gaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCwgX19pdGVy
KF9faSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgY2xhc3Mg
X1RwLCBjbGFzcyBfUmVmZXJlbmNlID0gX1RwJiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSA9
IHB0cmRpZmZfdD4KY2xhc3MgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yIHsKICB0eXBl
ZGVmIHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9y
LCBfVHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JlZmVyZW5j
ZSwgX0Rpc3RhbmNlPiBfU2VsZjsKcHJvdGVjdGVkOgogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3Ig
Y3VycmVudDsKcHVibGljOgogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRl
cmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0
YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBf
UmVmZXJlbmNlIHJlZmVyZW5jZTsKCiAgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKCkg
e30KICBleHBsaWNpdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IoX0JpZGlyZWN0aW9u
YWxJdGVyYXRvciBfX3gpCiAgICA6IGN1cnJlbnQoX194KSB7fQogIF9CaWRpcmVjdGlvbmFsSXRl
cmF0b3IgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0KICBfUmVmZXJlbmNlIG9wZXJh
dG9yKigpIGNvbnN0IHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX190bXAgPSBjdXJyZW50
OwogICAgcmV0dXJuICotLV9fdG1wOwogIH0KICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7
IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQogIF9TZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1j
dXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewog
ICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsK
ICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gKnRo
aXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlz
OwogICAgKytjdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFz
cyBfQmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5l
IGJvb2wgb3BlcmF0b3I9PSgKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRv
cjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feCwKICAgIGNvbnN0IHJldmVyc2Vf
YmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9f
eSkKewogIHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfQmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5l
IGJvb2wgb3BlcmF0b3IhPSgKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRv
cjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feCwKICAgIGNvbnN0IHJldmVyc2Vf
YmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9f
eSkKewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9CiMgMTkzICIvdXNyL2xvY2FsL2djYzMvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJh
dG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KY2xhc3MgcmV2ZXJzZV9pdGVyYXRv
cgp7CnByb3RlY3RlZDoKICBfSXRlcmF0b3IgY3VycmVudDsKcHVibGljOgogIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5CiAgICAg
ICAgICBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAg
ICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JdGVyYXRvcj46OnBvaW50ZXIKICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlCiAgICAgICAgICByZWZlcmVu
Y2U7CgogIHR5cGVkZWYgX0l0ZXJhdG9yIGl0ZXJhdG9yX3R5cGU7CiAgdHlwZWRlZiByZXZlcnNl
X2l0ZXJhdG9yPF9JdGVyYXRvcj4gX1NlbGY7CgpwdWJsaWM6CiAgcmV2ZXJzZV9pdGVyYXRvcigp
IHt9CiAgZXhwbGljaXQgcmV2ZXJzZV9pdGVyYXRvcihpdGVyYXRvcl90eXBlIF9feCkgOiBjdXJy
ZW50KF9feCkge30KCiAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCBfU2VsZiYgX194KSA6IGN1cnJl
bnQoX194LmN1cnJlbnQpIHt9CiAgdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgogIHJldmVyc2VfaXRl
cmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcj4mIF9feCkKICAgIDogY3VycmVudChf
X3guYmFzZSgpKSB7fQoKICBpdGVyYXRvcl90eXBlIGJhc2UoKSBjb25zdCB7IHJldHVybiBjdXJy
ZW50OyB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIF9JdGVyYXRvciBfX3Rt
cCA9IGN1cnJlbnQ7CiAgICByZXR1cm4gKi0tX190bXA7CiAgfQogIHBvaW50ZXIgb3BlcmF0b3It
PigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgogIF9TZWxmJiBvcGVyYXRvcisr
KCkgewogICAgLS1jdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRv
cisrKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIC0tY3VycmVudDsKICAgIHJl
dHVybiBfX3RtcDsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAgICArK2N1cnJlbnQ7CiAg
ICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBf
X3RtcCA9ICp0aGlzOwogICAgKytjdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KCiAgX1Nl
bGYgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsKICAgIHJldHVybiBfU2Vs
ZihjdXJyZW50IC0gX19uKTsKICB9CiAgX1NlbGYmIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBl
IF9fbikgewogICAgY3VycmVudCAtPSBfX247CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxm
IG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7CiAgICByZXR1cm4gX1NlbGYo
Y3VycmVudCArIF9fbik7CiAgfQogIF9TZWxmJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBf
X24pIHsKICAgIGN1cnJlbnQgKz0gX19uOwogICAgcmV0dXJuICp0aGlzOwogIH0KICByZWZlcmVu
Y2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKCp0aGlz
ICsgX19uKTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewog
IHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRl
cmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy
YXRvcj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8
X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuIF9feS5iYXNlKCkgPCBfX3guYmFzZSgpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHJl
dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09
IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9y
Pihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJu
IF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3Bl
cmF0b3I8PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewog
IHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGlu
ZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gs
CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4m
IF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0
b3I+CmlubGluZSB0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVu
Y2VfdHlwZQpvcGVyYXRvci0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gs
CiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJl
dHVybiBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRv
cj4KaW5saW5lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPgpvcGVyYXRvcisodHlwZW5hbWUg
cmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAg
ICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gpIHsKICByZXR1cm4gcmV2
ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+KF9feC5iYXNlKCkgLSBfX24pOwp9CgoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9DaGFyVCA9IGNoYXIsIGNsYXNzIF9UcmFpdHMg
PSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgY2xhc3MgX0Rpc3QgPSBwdHJkaWZmX3Q+
CmNsYXNzIGlzdHJlYW1faXRlcmF0b3IgewpwdWJsaWM6CiAgdHlwZWRlZiBfQ2hhclQgY2hhcl90
eXBlOwogIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICB0eXBlZGVmIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPiBpc3RyZWFtX3R5cGU7CgogIHR5cGVkZWYgaW5wdXRfaXRlcmF0
b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlw
ZWRlZiBfRGlzdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBjb25zdCBfVHAqIHBvaW50ZXI7
CiAgdHlwZWRlZiBjb25zdCBfVHAmIHJlZmVyZW5jZTsKCiAgaXN0cmVhbV9pdGVyYXRvcigpIDog
X01fc3RyZWFtKDApLCBfTV9vayhmYWxzZSkge30KICBpc3RyZWFtX2l0ZXJhdG9yKGlzdHJlYW1f
dHlwZSYgX19zKSA6IF9NX3N0cmVhbSgmX19zKSB7IF9NX3JlYWQoKTsgfQoKICByZWZlcmVuY2Ug
b3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX01fdmFsdWU7IH0KICBwb2ludGVyIG9wZXJhdG9y
LT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKICBpc3RyZWFtX2l0ZXJhdG9y
JiBvcGVyYXRvcisrKCkgewogICAgX01fcmVhZCgpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBp
c3RyZWFtX2l0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBpc3RyZWFtX2l0ZXJhdG9yIF9f
dG1wID0gKnRoaXM7CiAgICBfTV9yZWFkKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQoKICBib29s
IF9NX2VxdWFsKGNvbnN0IGlzdHJlYW1faXRlcmF0b3ImIF9feCkgY29uc3QKICAgIHsgcmV0dXJu
IChfTV9vayA9PSBfX3guX01fb2spICYmICghX01fb2sgfHwgX01fc3RyZWFtID09IF9feC5fTV9z
dHJlYW0pOyB9Cgpwcml2YXRlOgogIGlzdHJlYW1fdHlwZSogX01fc3RyZWFtOwogIF9UcCBfTV92
YWx1ZTsKICBib29sIF9NX29rOwoKICB2b2lkIF9NX3JlYWQoKSB7CiAgICBfTV9vayA9IChfTV9z
dHJlYW0gJiYgKl9NX3N0cmVhbSkgPyB0cnVlIDogZmFsc2U7CiAgICBpZiAoX01fb2spIHsKICAg
ICAgKl9NX3N0cmVhbSA+PiBfTV92YWx1ZTsKICAgICAgX01fb2sgPSAqX01fc3RyZWFtID8gdHJ1
ZSA6IGZhbHNlOwogICAgfQogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9DaGFy
VCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0Rpc3Q+CmlubGluZSBib29sCm9wZXJhdG9yPT0oY29u
c3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3gsCiAg
ICAgICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rp
c3Q+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX2VxdWFsKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0Rpc3Q+CmlubGluZSBi
b29sCm9wZXJhdG9yIT0oY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0
cywgX0Rpc3Q+JiBfX3gsCiAgICAgICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9D
aGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3kpIHsKICByZXR1cm4gIV9feC5fTV9lcXVhbChfX3kp
Owp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9DaGFyVCA9IGNoYXIs
IGNsYXNzIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KY2xhc3Mgb3N0cmVhbV9pdGVy
YXRvciB7CnB1YmxpYzoKICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgdHlwZWRlZiBfVHJh
aXRzIHRyYWl0c190eXBlOwogIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
IG9zdHJlYW1fdHlwZTsKCiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2Nh
dGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJl
bmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5j
ZTsKCiAgb3N0cmVhbV9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9fcykgOiBfTV9zdHJlYW0oJl9f
cyksIF9NX3N0cmluZygwKSB7fQogIG9zdHJlYW1faXRlcmF0b3Iob3N0cmVhbV90eXBlJiBfX3Ms
IGNvbnN0IF9DaGFyVCogX19jKQogICAgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZyhfX2Mp
IHt9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcj0oY29uc3QgX1RwJiBfX3ZhbHVl
KSB7CiAgICAqX01fc3RyZWFtIDw8IF9fdmFsdWU7CiAgICBpZiAoX01fc3RyaW5nKSAqX01fc3Ry
ZWFtIDw8IF9NX3N0cmluZzsKICAgIHJldHVybiAqdGhpczsKICB9CiAgb3N0cmVhbV9pdGVyYXRv
cjxfVHA+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIG9zdHJlYW1faXRlcmF0b3I8
X1RwPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAgb3N0cmVhbV9pdGVyYXRvcjxf
VHA+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KcHJpdmF0ZToKICBvc3RyZWFt
X3R5cGUqIF9NX3N0cmVhbTsKICBjb25zdCBfQ2hhclQqIF9NX3N0cmluZzsKfTsKIyA0MTcgIi91
c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9n
KysvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5
cGVuYW1lIF9Db250YWluZXI+CmNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yCiAgOiBwdWJsaWMgaXRl
cmF0b3I8aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5LAogICAg
ICAgICAgICAgICAgICAgIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAog
ICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNl
X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBv
aW50ZXIsCiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJl
ZmVyZW5jZT4KewoKcHJvdGVjdGVkOgogIF9JdGVyYXRvciBfTV9jdXJyZW50OwoKcHVibGljOgog
IHR5cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiBub3JtYWxf
aXRlcmF0b3JfdHlwZTsKICB0eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+IF9fdHJh
aXRzX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjppdGVyYXRvcl9jYXRl
Z29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6
OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6
OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3Ry
YWl0c190eXBlOjpwb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190
eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwoKICBfX25vcm1hbF9pdGVyYXRvcigpIDogX01fY3Vy
cmVudChfSXRlcmF0b3IoKSkgeyB9CgogIGV4cGxpY2l0IF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0
IF9JdGVyYXRvciYgX19pKSA6IF9NX2N1cnJlbnQoX19pKSB7IH0KCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JdGVyPgogIGlubGluZSBfX25vcm1hbF9pdGVyYXRvcihjb25zdCBfX25vcm1hbF9pdGVy
YXRvcjxfSXRlciwgX0NvbnRhaW5lcj4mIF9faSkKICAgIDogX01fY3VycmVudChfX2kuYmFzZSgp
KSB7IH0KCgogIHJlZmVyZW5jZQogIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpfTV9jdXJy
ZW50OyB9CgogIHBvaW50ZXIKICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVu
dDsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvcisrKCkgeyArK19NX2N1cnJl
bnQ7IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yKyso
aW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50KyspOyB9CgoKICBub3Jt
YWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvci0tKCkgeyAtLV9NX2N1cnJlbnQ7IHJldHVybiAq
dGhpczsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yLS0oaW50KSB7IHJldHVy
biBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50LS0pOyB9CgoKICByZWZlcmVuY2UKICBvcGVy
YXRvcltdKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogIHsgcmV0dXJuIF9NX2N1
cnJlbnRbX19uXTsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvcis9KGNvbnN0
IGRpZmZlcmVuY2VfdHlwZSYgX19uKQogIHsgX01fY3VycmVudCArPSBfX247IHJldHVybiAqdGhp
czsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJlbmNl
X3R5cGUmIF9fbikgY29uc3QKICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50
ICsgX19uKTsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvci09KGNvbnN0IGRp
ZmZlcmVuY2VfdHlwZSYgX19uKQogIHsgX01fY3VycmVudCAtPSBfX247IHJldHVybiAqdGhpczsg
fQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yLShjb25zdCBkaWZmZXJlbmNlX3R5
cGUmIF9fbikgY29uc3QKICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50IC0g
X19uKTsgfQoKICBkaWZmZXJlbmNlX3R5cGUKICBvcGVyYXRvci0oY29uc3Qgbm9ybWFsX2l0ZXJh
dG9yX3R5cGUmIF9faSkgY29uc3QKICB7IHJldHVybiBfTV9jdXJyZW50IC0gX19pLl9NX2N1cnJl
bnQ7IH0KCiAgY29uc3QgX0l0ZXJhdG9yJgogIGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9jdXJy
ZW50OyB9Cn07CgoKCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVy
YXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9yPT0oY29uc3Qg
X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAg
ICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3Jo
cykKeyByZXR1cm4gX19saHMuYmFzZSgpID09IF9fcmhzLmJhc2UoKTsgfQoKdGVtcGxhdGU8dHlw
ZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5l
cj4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0
b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0
b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiAhKF9fbGhzID09IF9f
cmhzKTsgfQoKCgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0
b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgppbmxpbmUgYm9vbApvcGVyYXRvcjwoY29uc3QgX19u
b3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAg
Y29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7
IHJldHVybiBfX2xocy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7IH0KCnRlbXBsYXRlPHR5cGVuYW1l
IF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+Cmlu
bGluZSBib29sCm9wZXJhdG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBf
Q29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRl
cmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCnsgcmV0dXJuIF9fcmhzIDwgX19saHM7IH0KCnRl
bXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1l
IF9Db250YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0
b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgIGNvbnN0IF9fbm9y
bWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKeyByZXR1cm4gIShf
X3JocyA8IF9fbGhzKTsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUg
X0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PShj
b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAg
ICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4m
IF9fcmhzKQp7IHJldHVybiAhKF9fbGhzIDwgX19yaHMpOyB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBf
SXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGluZSBfX25vcm1hbF9pdGVyYXRvcjxf
SXRlcmF0b3IsIF9Db250YWluZXI+Cm9wZXJhdG9yKyhfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0
b3IsIF9Db250YWluZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgY29uc3QgX19u
b3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19pKQp7IHJldHVybiBfX25v
cm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+KF9faS5iYXNlKCkgKyBfX24pOyB9
Cgp9CiMgNTIgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9n
Y2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL2Nv
bmNlcHRfY2hlY2suaCIgMSAzCiMgNTMgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgpu
YW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9G
b3J3YXJkSXRlcjIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgX19pdGVyX3N3YXAoX0ZvcndhcmRJ
dGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iLCBfVHAqKQp7CiAgX1RwIF9fdG1wID0gKl9fYTsK
ICAqX19hID0gKl9fYjsKICAqX19iID0gX190bXA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgppbmxpbmUgdm9pZCBpdGVyX3N3YXAoX0Zvcndh
cmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iKQp7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBfX2l0ZXJfc3dhcChfX2Es
IF9fYiwgX192YWx1ZV90eXBlKF9fYSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUg
dm9pZCBzd2FwKF9UcCYgX19hLCBfVHAmIF9fYikKewoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBfVHAgX190bXAgPSBfX2E7CiAg
X19hID0gX19iOwogIF9fYiA9IF9fdG1wOwp9CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpp
bmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKSB7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCiAgaWYgKF9fYiA8IF9fYSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25z
dCBfVHAmIF9fYikgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgogIGlmIChfX2EgPCBfX2IpIHJldHVybiBfX2I7IHJldHVy
biBfX2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29u
c3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2Nv
bXApIHsKCiAgaWYgKF9fY29tcChfX2IsIF9fYSkpIHJldHVybiBfX2I7IHJldHVybiBfX2E7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJiBt
YXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsKCiAg
aWYgKF9fY29tcChfX2EsIF9fYikpIHJldHVybiBfX2I7IHJldHVybiBfX2E7Cn0KIyAxMzcgIi91
c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9n
KysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh
c3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29w
eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAg
IGlucHV0X2l0ZXJhdG9yX3RhZywgX0Rpc3RhbmNlKikKewogIGZvciAoIDsgX19maXJzdCAhPSBf
X2xhc3Q7ICsrX19yZXN1bHQsICsrX19maXJzdCkKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Owog
IHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj
bGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX091dHB1dEl0ZXIKX19j
b3B5KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwK
ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywg
X0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9f
biA+IDA7IC0tX19uKSB7CiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICsrX19maXJzdDsK
ICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4KaW5saW5lIF9UcCoKX19jb3B5X3RyaXZpYWwoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25z
dCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkKewogIG1lbW1vdmUoX19yZXN1bHQsIF9fZmly
c3QsIHNpemVvZihfVHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICByZXR1cm4gX19yZXN1bHQg
KyAoX19sYXN0IC0gX19maXJzdCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh
c3MgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfYXV4MihfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKewogIHJldHVybiBfX2NvcHko
X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0
ZWdvcnkoX19maXJzdCksCiAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGlu
ZSBfT3V0cHV0SXRlciBfX2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1
bHQsIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz
dWx0LAogICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSwKICAgICAg
ICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
VHA+CmlubGluZSBfVHAqIF9fY29weV9hdXgyKF9UcCogX19maXJzdCwgX1RwKiBfX2xhc3QsIF9U
cCogX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQp7CiAgcmV0
dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgppbmxpbmUgX1RwKiBfX2NvcHlfYXV4Mihjb25zdCBfVHAqIF9fZmlyc3Qs
IGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg
ICBfX3RydWVfdHlwZSkKewogIHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3Qs
IF9fcmVzdWx0KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0
SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X2F1eChfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1RwKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBl
X3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBf
VHJpdmlhbDsKICByZXR1cm4gX19jb3B5X2F1eDIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwg
X1RyaXZpYWwoKSk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9P
dXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmly
c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIF9PdXRwdXRJdGVyKF9f
Y29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdC5iYXNlKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpKSk7Cn0KCnRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0
ZXIgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90
eXBlKQp7CiAgcmV0dXJuIF9fY29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX192
YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlw
ZW5hbWUgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfbmkxKF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCnsKICB0eXBlZGVmIHR5cGVu
YW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwog
IHJldHVybiBfX2NvcHlfbmkyKF9fZmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpLCBfX3Jlc3Vs
dCwgX19Ob3JtYWwoKSk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l
IF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X25pMShfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKewogIHR5cGVkZWYgdHlwZW5hbWUg
X0lzX25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgcmV0
dXJuIF9fY29weV9uaTIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIF9P
dXRwdXRJdGVyIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgoKICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9JbnB1dEl0ZXI+Ojpf
Tm9ybWFsIF9fTm9ybWFsOwogICByZXR1cm4gX19jb3B5X25pMShfX2ZpcnN0LCBfX2xhc3QsIF9f
cmVzdWx0LCBfX05vcm1hbCgpKTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFs
SXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfRGlzdGFu
Y2U+CmlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fY29weV9iYWNrd2FyZChfQmlkaXJlY3Rp
b25hbEl0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y
X3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5j
ZSopCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAqLS1fX3Jlc3VsdCA9ICotLV9f
bGFzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz
SXRlciwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19jb3B5X2JhY2t3YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNl
IF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKQogICAgKi0tX19yZXN1bHQg
PSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAg
IGNsYXNzIF9Cb29sVHlwZT4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaAp7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyMT46Oml0ZXJh
dG9yX2NhdGVnb3J5CiAgICAgICAgICBfQ2F0OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcjE+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9E
aXN0YW5jZTsKCiAgc3RhdGljIF9CaWRpcmVjdGlvbmFsSXRlcjIgY29weShfQmlkaXJlY3Rpb25h
bEl0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQpIHsKICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmQo
X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0NhdCgpLCAoX0Rpc3RhbmNlKikgMCk7CiAgfQp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxf
VHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KewogIHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1RwKiBf
X2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgewogICAgY29uc3QgcHRy
ZGlmZl90IF9OdW0gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgbWVtbW92ZShfX3Jlc3VsdCAtIF9O
dW0sIF9fZmlyc3QsIHNpemVvZihfVHApICogX051bSk7CiAgICByZXR1cm4gX19yZXN1bHQgLSBf
TnVtOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX2NvcHlfYmFja3dhcmRf
ZGlzcGF0Y2g8Y29uc3QgX1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CnsKICBzdGF0aWMgX1RwKiBj
b3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQp
IHsKICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVl
X3R5cGU+CiAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICB9Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0JJMSwgY2xhc3MgX0JJMj4KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3
YXJkX2F1eChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KSB7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkky
Pjo6dmFsdWVfdHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgOjpoYXNfdHJpdmlhbF9hc3Np
Z25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICByZXR1cm4gX19jb3B5X2JhY2t3
YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIsIF9Ucml2aWFsPgogICAgICAgICAgICAgIDo6Y29weShf
X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5
cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0
ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKSB7
CiAgcmV0dXJuIF9CSTIoX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz
dWx0LmJhc2UoKSkpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4K
aW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBf
X2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKXsKICByZXR1cm4gX19j
b3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUg
PHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIF9fY29weV9iYWNrd2Fy
ZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0
LCBfX3RydWVfdHlwZSkgewogIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxf
QkkyPjo6X05vcm1hbCBfX05vcm1hbDsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1dF9u
b3JtYWxfaXRlcmF0b3IoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LCBfX05vcm1hbCgp
KTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkky
IF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkx
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19u
b3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgcmV0dXJuIF9fY29weV9i
YWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTm9ybWFs
KCkpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KaW5saW5lIF9C
STIgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0
KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHR5cGVkZWYgdHlwZW5hbWUgX0lz
X25vcm1hbF9pdGVyYXRvcjxfQkkxPjo6X05vcm1hbCBfX05vcm1hbDsKICByZXR1cm4gX19jb3B5
X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTm9ybWFs
KCkpOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNz
IF9PdXRwdXRJdGVyPgpwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPiBfX2NvcHlfbihfSW5w
dXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICBmb3IgKCA7IF9fY291bnQg
PiAwOyAtLV9fY291bnQpIHsKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0
OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0
ZXI+KF9fZmlyc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SQUl0ZXIsIGNsYXNz
IF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X1JBSXRlciwgX091dHB1dEl0
ZXI+Cl9fY29weV9uKF9SQUl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7
CiAgX1JBSXRlciBfX2xhc3QgPSBfX2ZpcnN0ICsgX19jb3VudDsKICByZXR1cm4gcGFpcjxfUkFJ
dGVyLCBfT3V0cHV0SXRlcj4oX19sYXN0LCBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQp
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0
cHV0SXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+Cl9fY29weV9uKF9J
bnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsK
ICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQsCiAgICAgICAgICAg
ICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgcGFpcjxf
SW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4KY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUg
X19jb3VudCwgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1cm4g
X19jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQpOwp9CgoKCgoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lkIGZpbGwoX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkKewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAg
Kl9fZmlyc3QgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX091dHB1dEl0ZXIsIGNsYXNz
IF9TaXplLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIGZpbGxfbihfT3V0cHV0SXRlciBfX2ZpcnN0
LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9y
ICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQogICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwog
IHJldHVybiBfX2ZpcnN0Owp9CgoKCmlubGluZSB2b2lkIGZpbGwodW5zaWduZWQgY2hhciogX19m
aXJzdCwgdW5zaWduZWQgY2hhciogX19sYXN0LAogICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXImIF9fYykKewogIHVuc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAgbWVtc2V0KF9f
Zmlyc3QsIF9fdG1wLCBfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKaW5saW5lIHZvaWQgZmlsbChzaWdu
ZWQgY2hhciogX19maXJzdCwgc2lnbmVkIGNoYXIqIF9fbGFzdCwKICAgICAgICAgICAgICAgICBj
b25zdCBzaWduZWQgY2hhciYgX19jKQp7CiAgc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAgbWVt
c2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0g
X19maXJzdCk7Cn0KCmlubGluZSB2b2lkIGZpbGwoY2hhciogX19maXJzdCwgY2hhciogX19sYXN0
LCBjb25zdCBjaGFyJiBfX2MpCnsKICBjaGFyIF9fdG1wID0gX19jOwogIG1lbXNldChfX2ZpcnN0
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3QpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1NpemU+CmlubGluZSB1bnNpZ25lZCBjaGFyKiBmaWxsX24odW5z
aWduZWQgY2hhciogX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXImIF9fYykKewogIGZpbGwoX19maXJzdCwgX19maXJzdCAr
IF9fbiwgX19jKTsKICByZXR1cm4gX19maXJzdCArIF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9T
aXplPgppbmxpbmUgc2lnbmVkIGNoYXIqIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpCnsKICBm
aWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgcmV0dXJuIF9fZmlyc3QgKyBfX247
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4KaW5saW5lIGNoYXIqIGZpbGxfbihjaGFyKiBfX2Zp
cnN0LCBfU2l6ZSBfX24sIGNvbnN0IGNoYXImIF9fYykKewogIGZpbGwoX19maXJzdCwgX19maXJz
dCArIF9fbiwgX19jKTsKICByZXR1cm4gX19maXJzdCArIF9fbjsKfQoKCgoKCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CnBhaXI8X0lucHV0SXRlcjEsIF9J
bnB1dEl0ZXIyPiBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEg
JiYgKl9fZmlyc3QxID09ICpfX2ZpcnN0MikgewogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJz
dDI7CiAgfQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEs
IF9fZmlyc3QyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJ
dGVyMiwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRl
cjI+IG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVk
KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm
IF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICArK19fZmlyc3QxOwog
ICAgKytfX2ZpcnN0MjsKICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIy
PihfX2ZpcnN0MSwgX19maXJzdDIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNs
YXNzIF9JbnB1dEl0ZXIyPgppbmxpbmUgYm9vbCBlcXVhbChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwg
X0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJz
dDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBf
X2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYgKCEoKl9fZmlyc3QxID09ICpf
X2ZpcnN0MikpCiAgICAgIHJldHVybiBmYWxzZTsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWRp
Y2F0ZT4KaW5saW5lIGJvb2wgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfQmluYXJ5
UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9yICgg
OyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYgKCFf
X2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgcmV0dXJuIGZhbHNlOwog
IHJldHVybiB0cnVlOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBf
SW5wdXRJdGVyMj4KYm9vbCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2Zp
cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
SW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikKewoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmly
c3QyICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgIGlm
ICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKCpfX2Zp
cnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gX19maXJz
dDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBsZXhp
Y29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19s
YXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg
X0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFy
ZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBf
X2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJzdDEsICsrX19m
aXJzdDIpIHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICByZXR1
cm4gdHJ1ZTsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICByZXR1
cm4gZmFsc2U7CiAgfQogIHJldHVybiBfX2ZpcnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9
IF9fbGFzdDI7Cn0KCmlubGluZSBib29sCmxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IHVu
c2lnbmVkIGNoYXIqIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp
Z25lZCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyKiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg
Y2hhciogX19sYXN0MikKewogIGNvbnN0IHNpemVfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJz
dDE7CiAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICBjb25zdCBp
bnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xl
bjIpKTsKICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0IDwgMCA6IF9fbGVuMSA8IF9f
bGVuMjsKfQoKaW5saW5lIGJvb2wgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgY2hhciog
X19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBjaGFyKiBfX2xhc3QyKQp7Cgog
IHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZSgoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2Zp
cnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFy
KikgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25l
ZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25z
dCBzaWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbnQgX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8z
d2F5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVy
MiBfX2xhc3QyKQp7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0g
X19sYXN0MikgewogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgcmV0dXJuIC0x
OwogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIDE7CiAgICArK19f
Zmlyc3QxOwogICAgKytfX2ZpcnN0MjsKICB9CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpIHsK
ICAgIHJldHVybiAhKF9fZmlyc3QxID09IF9fbGFzdDEpOwogIH0KICBlbHNlIHsKICAgIHJldHVy
biAtMTsKICB9Cn0KCmlubGluZSBpbnQKX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNv
bnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKewogIGNvbnN0IHB0cmRp
ZmZfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7CiAgY29uc3QgcHRyZGlmZl90IF9fbGVu
MiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19m
aXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICByZXR1cm4gX19yZXN1bHQg
IT0gMCA/IF9fcmVzdWx0CiAgICAgICAgICAgICAgICAgICAgICAgOiAoX19sZW4xID09IF9fbGVu
MiA/IDAgOiAoX19sZW4xIDwgX19sZW4yID8gLTEgOiAxKSk7Cn0KCmlubGluZSBpbnQKX19sZXhp
Y29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFy
KiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19m
aXJzdDIsIGNvbnN0IGNoYXIqIF9fbGFzdDIpCnsKCiAgcmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2Fs
X2NvbXBhcmVfM3dheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2ln
bmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29u
c3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbnQgbGV4aWNvZ3JhcGhpY2Fs
X2NvbXBhcmVfM3dheShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J
bnB1dEl0ZXIyIF9fbGFzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHJl
dHVybiBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX19maXJzdDEsIF9fbGFzdDEsIF9f
Zmlyc3QyLCBfX2xhc3QyKTsKfQoKfQojIDM0ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMK
IyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDI4ICIvdXNyL2xvY2FsL2djYzMvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9j
LmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My4wL2luY2x1ZGUvZysrL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwv
Z2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9m
dW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAi
L3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl
L2crKy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBf
X3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Mo
dm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhy
b3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0
IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBf
X3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7
CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk
CiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5n
ZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJv
cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29u
c3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIq
IF9fcyk7Cn0KIyAyOSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyAxICIvdXNyL2xvY2Fs
L2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMv
c3RkX2NzdGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAi
L3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl
L2crKy9iaXRzL3N0ZF9jc3RkbGliLmgiIDEgMwojIDMxICIvdXNyL2xvY2FsL2djYzMvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9jLmgi
IDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0cmluZy5oIiAxIDMKIyAzMiAiL3Vzci9sb2NhbC9n
Y2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0
bF9hbGxvYy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2Nhc3NlcnQuaCIgMSAzCiMgMzcgIi91
c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9n
KysvYml0cy9zdGRfY2Fzc2VydC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMK
IyAzNSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVz
LmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDIgMwojIDU4ICIvdXNyL2luY2x1
ZGUvYXNzZXJ0LmgiIDMKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfZmFpbCAo
X19jb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgX19jb25zdCBjaGFyICpfX2ZpbGUsIHVuc2lnbmVk
IGludCBfX2xpbmUsIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikgdGhyb3cgKCkKCgoKICAgICBf
X2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfcGVy
cm9yX2ZhaWwgKGludCBfX2Vycm51bSwgX19jb25zdCBjaGFyICpfX2ZpbGUsIHVuc2lnbmVkIGlu
dCBfX2xpbmUsIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikgdGhyb3cgKCkKCgoKICAgICBfX2F0
dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7Cgp9CiMgMzggIi91c3IvbG9jYWwvZ2NjMy9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY2Fzc2Vy
dC5oIiAyIDMKIyAzMyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKCgoKCgojIDEgIi91c3Iv
bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysv
Yml0cy9zdGxfdGhyZWFkcy5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF90aHJlYWRzLmgiIDMK
bmFtZXNwYWNlIHN0ZAp7CiMgNTQgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfdGhyZWFkcy5oIiAzCnN0cnVjdCBf
UmVmY291bnRfQmFzZQp7CgoKCgogIHR5cGVkZWYgc2l6ZV90IF9SQ190OwoKCgogICB2b2xhdGls
ZSBfUkNfdCBfTV9yZWZfY291bnQ7CiMgNzYgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAg
X1JlZmNvdW50X0Jhc2UoX1JDX3QgX19uKSA6IF9NX3JlZl9jb3VudChfX24pIHt9CiMgMTExICIv
dXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUv
ZysrL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHZvaWQgX01faW5jcigpIHsgKytfTV9yZWZfY291
bnQ7IH0KICBfUkNfdCBfTV9kZWNyKCkgeyByZXR1cm4gLS1fTV9yZWZfY291bnQ7IH0KCn07CiMg
MjAyICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvZysrL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogICAgc3RhdGljIGlubGluZSB1bnNpZ25l
ZCBsb25nIF9BdG9taWNfc3dhcCh1bnNpZ25lZCBsb25nICogX19wLCB1bnNpZ25lZCBsb25nIF9f
cSkgewogICAgICAgIHVuc2lnbmVkIGxvbmcgX19yZXN1bHQgPSAqX19wOwogICAgICAgICpfX3Ag
PSBfX3E7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDIyMyAiL3Vzci9sb2NhbC9n
Y2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0
bF90aHJlYWRzLmgiIDMKdGVtcGxhdGUgPGludCBfX2luc3Q+CnN0cnVjdCBfU1RMX211dGV4X3Nw
aW4gewogIGVudW0geyBfX2xvd19tYXggPSAzMCwgX19oaWdoX21heCA9IDEwMDAgfTsKCgogIHN0
YXRpYyB1bnNpZ25lZCBfX21heDsKICBzdGF0aWMgdW5zaWduZWQgX19sYXN0Owp9OwoKdGVtcGxh
dGUgPGludCBfX2luc3Q+CnVuc2lnbmVkIF9TVExfbXV0ZXhfc3BpbjxfX2luc3Q+OjpfX21heCA9
IF9TVExfbXV0ZXhfc3BpbjxfX2luc3Q+OjpfX2xvd19tYXg7Cgp0ZW1wbGF0ZSA8aW50IF9faW5z
dD4KdW5zaWduZWQgX1NUTF9tdXRleF9zcGluPF9faW5zdD46Ol9fbGFzdCA9IDA7CgpzdHJ1Y3Qg
X1NUTF9tdXRleF9sb2NrCnsKIyAzMjkgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgdm9p
ZCBfTV9pbml0aWFsaXplKCkge30KICB2b2lkIF9NX2FjcXVpcmVfbG9jaygpIHt9CiAgdm9pZCBf
TV9yZWxlYXNlX2xvY2soKSB7fQoKfTsKIyAzNTUgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfdGhyZWFkcy5oIiAz
CnN0cnVjdCBfU1RMX2F1dG9fbG9jawp7CiAgX1NUTF9tdXRleF9sb2NrJiBfTV9sb2NrOwoKICBf
U1RMX2F1dG9fbG9jayhfU1RMX211dGV4X2xvY2smIF9fbG9jaykgOiBfTV9sb2NrKF9fbG9jaykK
ICAgIHsgX01fbG9jay5fTV9hY3F1aXJlX2xvY2soKTsgfQogIH5fU1RMX2F1dG9fbG9jaygpIHsg
X01fbG9jay5fTV9yZWxlYXNlX2xvY2soKTsgfQoKcHJpdmF0ZToKICB2b2lkIG9wZXJhdG9yPShj
b25zdCBfU1RMX2F1dG9fbG9jayYpOwogIF9TVExfYXV0b19sb2NrKGNvbnN0IF9TVExfYXV0b19s
b2NrJik7Cn07Cgp9CiMgMzkgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgNjggIi91c3Iv
bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysv
Yml0cy9zdGxfYWxsb2MuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxhdGUgPGludCBfX2lu
c3Q+CmNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlIHsKCnByaXZhdGU6CgogIHN0YXRpYyB2
b2lkKiBfU19vb21fbWFsbG9jKHNpemVfdCk7CiAgc3RhdGljIHZvaWQqIF9TX29vbV9yZWFsbG9j
KHZvaWQqLCBzaXplX3QpOwogIHN0YXRpYyB2b2lkICgqIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5k
bGVyKSgpOwoKcHVibGljOgoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7
CiAgICB2b2lkKiBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgaWYgKDAgPT0gX19yZXN1bHQp
IF9fcmVzdWx0ID0gX1Nfb29tX21hbGxvYyhfX24pOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0K
CiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCApCiAgewogICAgZnJl
ZShfX3ApOwogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3Qg
LCBzaXplX3QgX19uZXdfc3opCiAgewogICAgdm9pZCogX19yZXN1bHQgPSByZWFsbG9jKF9fcCwg
X19uZXdfc3opOwogICAgaWYgKDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX3JlYWxs
b2MoX19wLCBfX25ld19zeik7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQoKICBzdGF0aWMgdm9p
ZCAoKiBfX3NldF9tYWxsb2NfaGFuZGxlcih2b2lkICgqX19mKSgpKSkoKQogIHsKICAgIHZvaWQg
KCogX19vbGQpKCkgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgIF9fbWFsbG9jX2Fs
bG9jX29vbV9oYW5kbGVyID0gX19mOwogICAgcmV0dXJuKF9fb2xkKTsKICB9Cgp9OwoKCgp0ZW1w
bGF0ZSA8aW50IF9faW5zdD4Kdm9pZCAoKiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+
OjpfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7Cgp0ZW1wbGF0ZSA8aW50IF9faW5z
dD4Kdm9pZCoKX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29tX21hbGxvYyhz
aXplX3QgX19uKQp7CiAgICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICB2b2lk
KiBfX3Jlc3VsdDsKCiAgICBmb3IgKDs7KSB7CiAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9
IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9j
X2hhbmRsZXIpIHsgc3RkOjpfX3Rocm93X2JhZF9hbGxvYygpOyB9CiAgICAgICAgKCpfX215X21h
bGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAg
aWYgKF9fcmVzdWx0KSByZXR1cm4oX19yZXN1bHQpOwogICAgfQp9Cgp0ZW1wbGF0ZSA8aW50IF9f
aW5zdD4Kdm9pZCogX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29tX3JlYWxs
b2Modm9pZCogX19wLCBzaXplX3QgX19uKQp7CiAgICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRs
ZXIpKCk7CiAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICBmb3IgKDs7KSB7CiAgICAgICAgX19teV9t
YWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgIGlmICgw
ID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpIHsgc3RkOjpfX3Rocm93X2JhZF9hbGxvYygpOyB9CiAg
ICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9fcmVzdWx0ID0gcmVhbGxv
YyhfX3AsIF9fbik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4oX19yZXN1bHQpOwogICAg
fQp9Cgp0eXBlZGVmIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPDA+IG1hbGxvY19hbGxvYzsKCnRl
bXBsYXRlPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBzaW1wbGVfYWxsb2MgewoKcHVi
bGljOgogICAgc3RhdGljIF9UcCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4g
MCA9PSBfX24gPyAwIDogKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mIChfVHAp
KTsgfQogICAgc3RhdGljIF9UcCogYWxsb2NhdGUodm9pZCkKICAgICAgeyByZXR1cm4gKF9UcCop
IF9BbGxvYzo6YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsgfQogICAgc3RhdGljIHZvaWQgZGVhbGxv
Y2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgICAgeyBpZiAoMCAhPSBfX24pIF9BbGxvYzo6
ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KICAgIHN0YXRpYyB2b2lkIGRl
YWxsb2NhdGUoX1RwKiBfX3ApCiAgICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgc2l6ZW9m
IChfVHApKTsgfQp9OwoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBkZWJ1Z19h
bGxvYyB7Cgpwcml2YXRlOgoKICBlbnVtIHtfU19leHRyYSA9IDh9OwoKCgpwdWJsaWM6CgogIHN0
YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIGNoYXIqIF9fcmVzdWx0ID0g
KGNoYXIqKV9BbGxvYzo6YWxsb2NhdGUoX19uICsgKGludCkgX1NfZXh0cmEpOwogICAgKihzaXpl
X3QqKV9fcmVzdWx0ID0gX19uOwogICAgcmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7
CiAgfQoKICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKICB7
CiAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19leHRyYTsKICAgICgo
dm9pZCkgKCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19uKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAo
Iiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24iLCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGxvYy5oIiwgMTkw
LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAgIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3Jl
YWxfcCwgX19uICsgKGludCkgX1NfZXh0cmEpOwogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2Nh
dGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeikKICB7CiAgICBj
aGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19leHRyYTsKICAgICgodm9pZCkg
KCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19vbGRfc3opID8gMCA6IChfX2Fzc2VydF9mYWlsICgi
KihzaXplX3QqKV9fcmVhbF9wID09IF9fb2xkX3N6IiwgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxsb2MuaCIs
IDE5NywgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICBjaGFyKiBfX3Jlc3VsdCA9IChj
aGFyKikKICAgICAgX0FsbG9jOjpyZWFsbG9jYXRlKF9fcmVhbF9wLCBfX29sZF9zeiArIChpbnQp
IF9TX2V4dHJhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N6ICsg
KGludCkgX1NfZXh0cmEpOwogICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19uZXdfc3o7CiAgICBy
ZXR1cm4gX19yZXN1bHQgKyAoaW50KSBfU19leHRyYTsKICB9Cgp9OwoKCgoKdHlwZWRlZiBtYWxs
b2NfYWxsb2MgYWxsb2M7CnR5cGVkZWYgbWFsbG9jX2FsbG9jIHNpbmdsZV9jbGllbnRfYWxsb2M7
CiMgNTI2ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w
L2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xh
c3MgYWxsb2NhdG9yIHsKICB0eXBlZGVmIGFsbG9jIF9BbGxvYzsKcHVibGljOgogIHR5cGVkZWYg
c2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAg
dHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7
CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVm
ZXJlbmNlOwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAx
PiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07
CgogIGFsbG9jYXRvcigpIHRocm93KCkge30KICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikg
dGhyb3coKSB7fQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhbGxvY2F0b3IoY29uc3QgYWxsb2Nh
dG9yPF9UcDE+JikgdGhyb3coKSB7fQogIH5hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogIHBvaW50
ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgY29uc3Rf
cG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7
IH0KCgoKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewog
ICAgcmV0dXJuIF9fbiAhPSAwID8gc3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShf
X24gKiBzaXplb2YoX1RwKSkpCiAgICAgICAgICAgICAgICAgICAgOiAwOwogIH0KCgogIHZvaWQg
ZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX0FsbG9jOjpkZWFs
bG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgp
IGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoK
ICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19w
KSBfVHAoX192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgp
OyB9Cn07Cgp0ZW1wbGF0ZTw+CmNsYXNzIGFsbG9jYXRvcjx2b2lkPiB7CnB1YmxpYzoKICB0eXBl
ZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBl
OwogIHR5cGVkZWYgdm9pZCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3Bv
aW50ZXI7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAx
PiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07
Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0
dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikK
ewogIHJldHVybiBmYWxzZTsKfQojIDYwMiAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9fYWxsb2NhdG9yIHsKICBfQWxs
b2MgX191bmRlcmx5aW5nX2FsbG9jOwoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlw
ZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwog
IHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVu
Y2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9UcCB2
YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0
eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7CiAgfTsKCiAgX19hbGxvY2F0
b3IoKSB0aHJvdygpIHt9CiAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3ImIF9fYSkgdGhy
b3coKQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykge30K
ICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvcjxf
VHAxLCBfQWxsb2M+JiBfX2EpIHRocm93KCkKICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9fYS5f
X3VuZGVybHlpbmdfYWxsb2MpIHt9CiAgfl9fYWxsb2NhdG9yKCkgdGhyb3coKSB7fQoKICBwb2lu
dGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQogIGNvbnN0
X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194
OyB9CgoKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewog
ICAgcmV0dXJuIF9fbiAhPSAwCiAgICAgICAgPyBzdGF0aWNfY2FzdDxfVHAqPihfX3VuZGVybHlp
bmdfYWxsb2MuYWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQogICAgICAgIDogMDsKICB9CgoK
ICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCiAgICB7IF9fdW5k
ZXJseWluZ19hbGxvYy5kZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNp
emVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkg
LyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1Rw
JiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIg
X19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBf
X2FsbG9jYXRvcjx2b2lkLCBfQWxsb2M+IHsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAg
dHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCogcG9pbnRl
cjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHZh
bHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5
cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9Owp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9f
YWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5fX3VuZGVy
bHlpbmdfYWxsb2MgPT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2FsbG9j
YXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19h
bGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7CiAgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5n
X2FsbG9jICE9IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOwp9CgoKCgoKdGVtcGxhdGUgPGludCBp
bnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRl
PGluc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1w
bGF0ZTxpbnN0PiYpCnsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGludCBfX2luc3Q+Cmlu
bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0
PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8
X19pbnN0PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+Cmlu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gdHJ1
ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBkZWJ1Z19hbGxvYzxfQWxsb2M+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWJ1
Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVybiBmYWxzZTsKfQojIDczMiAiL3Vzci9sb2NhbC9n
Y2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0
bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CnN0cnVj
dCBfQWxsb2NfdHJhaXRzCnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSBm
YWxzZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxfVHA+
OjpvdGhlciBhbGxvY2F0b3JfdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B
bGxvY2F0b3I+CmNvbnN0IGJvb2wgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjpfU19p
bnN0YW5jZWxlc3M7CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CnN0cnVjdCBf
QWxsb2NfdHJhaXRzPF9UcCwgYWxsb2NhdG9yPF9UcDE+ID4KewogIHN0YXRpYyBjb25zdCBib29s
IF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBhbGxv
Yz4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwPiBhbGxvY2F0b3JfdHlwZTsK
fTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFp
dHM8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4KewogIHN0YXRpYyBjb25z
dCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1Rw
LCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRl
ZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxv
Y2F0b3JfdHlwZTsKfTsKIyA3NzQgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgZGVidWdf
YWxsb2M8X0FsbG9jPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0
cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9B
bGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+
ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAx
LCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsCiAgICAgICAgICAgICAgICAg
ICAgIF9fYWxsb2NhdG9yPF9UcDEsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiA+
CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYg
c2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxv
Y190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0
ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CiMgODA4ICIvdXNyL2xvY2FsL2djYzMvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9j
LmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgY2xhc3MgX0FsbG9jPgpzdHJ1
Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fYWxsb2NhdG9yPF9UcDEsIGRlYnVnX2FsbG9jPF9BbGxv
Yz4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5
cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBl
OwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2Nh
dG9yX3R5cGU7Cn07Cgp9CiMgMzUgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfdmVjdG9yLmgiIDIgMwojIDEgIi91
c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9n
KysvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYzMvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2NvbnN0cnVj
dC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzMuMC9pbmNsdWRlL2crKy9uZXciIDEgMwojIDM1ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2NvbnN0cnVjdC5o
IiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDQ3ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAz
CnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIHZvaWQgX0NvbnN0cnVjdChf
VDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVlKSB7Cm5ldyAoKHZvaWQqKSBfX3ApIF9UMShfX3Zh
bHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMT4KaW5saW5lIHZvaWQgX0NvbnN0cnVjdChfVDEq
IF9fcCkgewogIG5ldyAoKHZvaWQqKSBfX3ApIF9UMSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgppbmxpbmUgdm9pZCBfRGVzdHJveShfVHAqIF9fcG9pbnRlcikgewogIF9fcG9pbnRlci0+fl9U
cCgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4Kdm9pZApfX2Rlc3Ryb3lf
YXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIF9f
ZmFsc2VfdHlwZSkKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAg
IGRlc3Ryb3koJipfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+
CmlubGluZSB2b2lkIF9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVy
YXRvciwgX190cnVlX3R5cGUpIHt9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwg
Y2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX2Rlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgX1RwKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190
eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yCiAgICAgICAgICBfVHJpdmlh
bF9kZXN0cnVjdG9yOwogIF9fZGVzdHJveV9hdXgoX19maXJzdCwgX19sYXN0LCBfVHJpdmlhbF9k
ZXN0cnVjdG9yKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KaW5saW5l
IHZvaWQgX0Rlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9y
IF9fbGFzdCkgewogIF9fZGVzdHJveShfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2Zp
cnN0KSk7Cn0KCmlubGluZSB2b2lkIF9EZXN0cm95KGNoYXIqLCBjaGFyKikge30KaW5saW5lIHZv
aWQgX0Rlc3Ryb3koaW50KiwgaW50Kikge30KaW5saW5lIHZvaWQgX0Rlc3Ryb3kobG9uZyosIGxv
bmcqKSB7fQppbmxpbmUgdm9pZCBfRGVzdHJveShmbG9hdCosIGZsb2F0Kikge30KaW5saW5lIHZv
aWQgX0Rlc3Ryb3koZG91YmxlKiwgZG91YmxlKikge30KaW5saW5lIHZvaWQgX0Rlc3Ryb3kod2No
YXJfdCosIHdjaGFyX3QqKSB7fQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpp
bmxpbmUgdm9pZCBjb25zdHJ1Y3QoX1QxKiBfX3AsIGNvbnN0IF9UMiYgX192YWx1ZSkgewogIF9D
b25zdHJ1Y3QoX19wLCBfX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMT4KaW5saW5lIHZv
aWQgY29uc3RydWN0KF9UMSogX19wKSB7CiAgX0NvbnN0cnVjdChfX3ApOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgppbmxpbmUgdm9pZCBkZXN0cm95KF9UcCogX19wb2ludGVyKSB7CiAgX0Rlc3Ry
b3koX19wb2ludGVyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGlu
ZSB2b2lkIGRlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9y
IF9fbGFzdCkgewogIF9EZXN0cm95KF9fZmlyc3QsIF9fbGFzdCk7Cn0KCn0KIyAzNiAiL3Vzci9s
b2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9i
aXRzL3N0ZF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgi
IDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwojIDEgIi91c3IvbG9j
YWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0
cy9zdGRfY3N0cmluZy5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgi
IDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29w
eV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs
dCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9G
b3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBf
X3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKewogIF9Gb3J3
YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0OwogIHRyeSB7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0g
X19sYXN0OyArK19fZmlyc3QsICsrX19jdXIpCiAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgKl9f
Zmlyc3QpOwogICAgcmV0dXJuIF9fY3VyOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19y
ZXN1bHQsIF9fY3VyKTsgdGhyb3c7IH07Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg
Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIKX191bmlu
aXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBfVHAqKQp7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgcmV0
dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBf
SXNfUE9EKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJ
dGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyCiAgdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJk
SXRlciBfX3Jlc3VsdCkKewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBf
X2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5
cGUoX19yZXN1bHQpKTsKfQoKaW5saW5lIGNoYXIqIHVuaW5pdGlhbGl6ZWRfY29weShjb25zdCBj
aGFyKiBfX2ZpcnN0LCBjb25zdCBjaGFyKiBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciogX19yZXN1bHQpIHsKICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBf
X2xhc3QgLSBfX2ZpcnN0KTsKICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7
Cn0KCmlubGluZSB3Y2hhcl90Kgp1bmluaXRpYWxpemVkX2NvcHkoY29uc3Qgd2NoYXJfdCogX19m
aXJzdCwgY29uc3Qgd2NoYXJfdCogX19sYXN0LAogICAgICAgICAgICAgICAgICAgd2NoYXJfdCog
X19yZXN1bHQpCnsKICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXplb2Yod2NoYXJfdCkg
KiAoX19sYXN0IC0gX19maXJzdCkpOwogIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2Zp
cnN0KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNz
IF9Gb3J3YXJkSXRlcj4KcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9fdW5pbml0aWFs
aXplZF9jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAg
ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAg
ICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsK
ICB0cnkgewogICAgZm9yICggOyBfX2NvdW50ID4gMCA7IC0tX19jb3VudCwgKytfX2ZpcnN0LCAr
K19fY3VyKQogICAgICBfQ29uc3RydWN0KCYqX19jdXIsICpfX2ZpcnN0KTsKICAgIHJldHVybiBw
YWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19jdXIpOwogIH0KICBjYXRj
aCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1bHQsIF9fY3VyKTsgdGhyb3c7IH07Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRl
cj4KaW5saW5lIHBhaXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9Gb3J3YXJkSXRlcj4KX191bmluaXRp
YWxpemVkX2NvcHlfbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAog
ICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAg
ICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2NvdW50OwogIHJldHVybiBwYWlyPF9SYW5kb21BY2Nl
c3NJdGVyLCBfRm9yd2FyZEl0ZXI+KAogICAgICAgICAgICAgICAgIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCkpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJk
SXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPgpfX3VuaW5pdGlhbGl6
ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAg
ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXpl
ZF9jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUg
cGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+CnVuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1
dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgX0Zvcndh
cmRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X24oX19maXJz
dCwgX19jb3VudCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19p
dGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUpCnsKICBmaWxsKF9fZmlyc3QsIF9f
bGFzdCwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2
b2lkCl9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh
cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBf
X2ZhbHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogIHRyeSB7CiAg
ICBmb3IgKCA7IF9fY3VyICE9IF9fbGFzdDsgKytfX2N1cikKICAgICAgX0NvbnN0cnVjdCgmKl9f
Y3VyLCBfX3gpOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19maXJzdCwgX19jdXIpOyB0
aHJvdzsgfTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFz
cyBfVHAxPgppbmxpbmUgdm9pZCBfX3VuaW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19m
aXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFz
dCwgY29uc3QgX1RwJiBfX3gsIF9UcDEqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJh
aXRzPF9UcDE+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogIF9fdW5pbml0aWFsaXplZF9maWxsX2F1
eChfX2ZpcnN0LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsKCn0KCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgdW5pbml0aWFsaXplZF9maWxsKF9G
b3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zvcndh
cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYg
X194KQp7CiAgX191bmluaXRpYWxpemVkX2ZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gsIF9fdmFs
dWVfdHlwZShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh
c3MgX1NpemUsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRf
ZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUpCnsKICByZXR1cm4gZmls
bF9uKF9fZmlyc3QsIF9fbiwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg
Y2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9maWxs
X25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0ZXIg
X19jdXIgPSBfX2ZpcnN0OwogIHRyeSB7CiAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19f
Y3VyKQogICAgICBfQ29uc3RydWN0KCYqX19jdXIsIF9feCk7CiAgICByZXR1cm4gX19jdXI7CiAg
fQogIGNhdGNoKC4uLikgeyBfRGVzdHJveShfX2ZpcnN0LCBfX2N1cik7IHRocm93OyB9Owp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwLCBjbGFz
cyBfVHAxPgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9maWxsX24oX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3gsIF9UcDEqKQp7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcDE+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwog
IHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfX2ZpcnN0LCBfX24sIF9feCwgX0lz
X1BPRCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNs
YXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlcgp1bmluaXRpYWxpemVkX2ZpbGxfbihfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9feCkKewogIHJldHVybiBfX3Vu
aW5pdGlhbGl6ZWRfZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194LCBfX3ZhbHVlX3R5cGUoX19maXJz
dCkpOwp9CiMgMjMxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+
CmlubGluZSBfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHlfY29weShfSW5wdXRJdGVy
MSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCnsKICBfRm9yd2FyZEl0ZXIgX19t
aWQgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICB0
cnkgewogICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MiwgX19sYXN0MiwgX19t
aWQpOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsgdGhyb3c7
IH07Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3Mg
X0lucHV0SXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9jb3B5
KF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwgX0ZvcndhcmRJdGVyIF9fbWlkLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9J
bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QpCnsKICB1bmluaXRpYWxpemVkX2Zp
bGwoX19yZXN1bHQsIF9fbWlkLCBfX3gpOwogIHRyeSB7CiAgICByZXR1cm4gdW5pbml0aWFsaXpl
ZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19taWQpOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ry
b3koX19yZXN1bHQsIF9fbWlkKTsgdGhyb3c7IH07Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX191bmlu
aXRpYWxpemVkX2NvcHlfZmlsbChfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFz
dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9y
d2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9f
eCkKewogIF9Gb3J3YXJkSXRlciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEs
IF9fbGFzdDEsIF9fZmlyc3QyKTsKICB0cnkgewogICAgdW5pbml0aWFsaXplZF9maWxsKF9fbWlk
MiwgX19sYXN0MiwgX194KTsKICB9CiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95KF9fZmlyc3QyLCBf
X21pZDIpOyB0aHJvdzsgfTsKfQoKfQojIDM3ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMK
IyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvZysrL2JpdHMvc3RsX3ZlY3Rvci5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9nY2MzL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF92ZWN0
b3IuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMKIyAz
NSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNs
dWRlL2crKy9iaXRzL3N0bF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL2Z1bmN0ZXhjZXB0
LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvZnVuY3RleGNlcHQuaCIgMwojIDEgIi91c3IvbG9jYWwv
Z2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvZXhjZXB0
aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5h
bWVzcGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAg
dm9pZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nh
c3Qodm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAg
X190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19k
b21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9h
cmd1bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3Io
Y29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNo
YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19z
KTsKCiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9p
ZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9f
dGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJv
d19pb3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgMzYgIi91c3IvbG9jYWwvZ2NjMy9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfdmVj
dG9yLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9jb25jZXB0X2NoZWNrLmgiIDEgMwojIDM3ICIvdXNy
L2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysr
L2JpdHMvc3RsX3ZlY3Rvci5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDQ4ICIvdXNyL2xvY2Fs
L2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMv
c3RsX3ZlY3Rvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3IsIGJv
b2wgX0lzU3RhdGljPgpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBl
CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9y
KCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0KCiAgX1ZlY3Rvcl9hbGxvY19i
YXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX2RhdGFfYWxsb2NhdG9yKF9f
YSksIF9NX3N0YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCiAge30K
CnByb3RlY3RlZDoKICBhbGxvY2F0b3JfdHlwZSBfTV9kYXRhX2FsbG9jYXRvcjsKICBfVHAqIF9N
X3N0YXJ0OwogIF9UcCogX01fZmluaXNoOwogIF9UcCogX01fZW5kX29mX3N0b3JhZ2U7CgogIF9U
cCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9y
LmFsbG9jYXRlKF9fbik7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBf
X24pCiAgICB7IGlmIChfX3ApIF9NX2RhdGFfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX19wLCBfX24p
OyB9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CmNsYXNzIF9W
ZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvY2F0b3IsIHRydWU+IHsKcHVibGljOgogIHR5cGVk
ZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlw
ZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRv
cigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgX1ZlY3Rvcl9hbGxvY19i
YXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgIDogX01fc3RhcnQoMCksIF9NX2ZpbmlzaCgw
KSwgX01fZW5kX29mX3N0b3JhZ2UoMCkKICB7fQoKcHJvdGVjdGVkOgogIF9UcCogX01fc3RhcnQ7
CiAgX1RwKiBfTV9maW5pc2g7CiAgX1RwKiBfTV9lbmRfb2Zfc3RvcmFnZTsKCiAgdHlwZWRlZiB0
eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBlIF9BbGxv
Y190eXBlOwogIF9UcCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9BbGxv
Y190eXBlOjphbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKF9UcCogX19wLCBz
aXplX3QgX19uKQogICAgeyBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7fQp9OwoK
dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX1ZlY3Rvcl9iYXNlCiAg
OiBwdWJsaWMgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNz
Pgp7CiAgdHlwZWRlZiBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNl
bGVzcz4KICAgICAgICAgIF9CYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRv
cl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfVmVjdG9yX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5
cGUmIF9fYSkgOiBfQmFzZShfX2EpIHt9CiAgX1ZlY3Rvcl9iYXNlKHNpemVfdCBfX24sIGNvbnN0
IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7CiAgICBfTV9zdGFydCA9IF9NX2Fs
bG9jYXRlKF9fbik7CiAgICBfTV9maW5pc2ggPSBfTV9zdGFydDsKICAgIF9NX2VuZF9vZl9zdG9y
YWdlID0gX01fc3RhcnQgKyBfX247CiAgfQoKICB+X1ZlY3Rvcl9iYXNlKCkgeyBfTV9kZWFsbG9j
YXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsgfQp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxfVHA+ID4KY2xhc3MgdmVj
dG9yIDogcHJvdGVjdGVkIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4KewoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKcHJpdmF0ZToKICB0
eXBlZGVmIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4gX0Jhc2U7CiAgdHlwZWRlZiB2ZWN0b3I8
X1RwLCBfQWxsb2M+IHZlY3Rvcl90eXBlOwpwdWJsaWM6CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlw
ZTsKICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90
eXBlKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8cG9pbnRlciwg
dmVjdG9yX3R5cGU+IGl0ZXJhdG9yOwogIHR5cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8Y29uc3Rf
cG9pbnRlciwgdmVjdG9yX3R5cGU+IGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdmFsdWVfdHlw
ZSYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNl
OwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJl
bmNlX3R5cGU7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9j
YXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVy
biBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9CgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxj
b25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2Vf
aXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7Cgpwcm90ZWN0ZWQ6CiAgdXNpbmcg
X0Jhc2U6Ol9NX2FsbG9jYXRlOwogIHVzaW5nIF9CYXNlOjpfTV9kZWFsbG9jYXRlOwogIHVzaW5n
IF9CYXNlOjpfTV9zdGFydDsKICB1c2luZyBfQmFzZTo6X01fZmluaXNoOwogIHVzaW5nIF9CYXNl
OjpfTV9lbmRfb2Zfc3RvcmFnZTsKCnByb3RlY3RlZDoKICB2b2lkIF9NX2luc2VydF9hdXgoaXRl
cmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpOwogIHZvaWQgX01faW5zZXJ0X2F1eChp
dGVyYXRvciBfX3Bvc2l0aW9uKTsKCnB1YmxpYzoKICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJu
IGl0ZXJhdG9yIChfTV9zdGFydCk7IH0KICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0CiAg
ICB7IHJldHVybiBjb25zdF9pdGVyYXRvciAoX01fc3RhcnQpOyB9CiAgaXRlcmF0b3IgZW5kKCkg
eyByZXR1cm4gaXRlcmF0b3IgKF9NX2ZpbmlzaCk7IH0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBj
b25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvciAoX01fZmluaXNoKTsgfQoKICByZXZlcnNlX2l0
ZXJhdG9yIHJiZWdpbigpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQog
IGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0
X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkKICAg
IHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0
ZXJhdG9yIHJlbmQoKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihi
ZWdpbigpKTsgfQoKICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplX3R5
cGUoZW5kKCkgLSBiZWdpbigpKTsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0CiAgICB7
IHJldHVybiBzaXplX3R5cGUoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KICBzaXplX3R5cGUgY2FwYWNp
dHkoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9yKF9NX2VuZF9v
Zl9zdG9yYWdlKSAtIGJlZ2luKCkpOyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0CiAgICB7IHJldHVy
biBiZWdpbigpID09IGVuZCgpOyB9CgogIHJlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBf
X24pIHsgcmV0dXJuICooYmVnaW4oKSArIF9fbik7IH0KICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0
b3JbXShzaXplX3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKGJlZ2luKCkgKyBfX24pOyB9Cgog
IHZvaWQgX01fcmFuZ2VfY2hlY2soc2l6ZV90eXBlIF9fbikgY29uc3QgewogICAgaWYgKF9fbiA+
PSB0aGlzLT5zaXplKCkpCiAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJ2ZWN0b3IiKTsKICB9
CgogIHJlZmVyZW5jZSBhdChzaXplX3R5cGUgX19uKQogICAgeyBfTV9yYW5nZV9jaGVjayhfX24p
OyByZXR1cm4gKCp0aGlzKVtfX25dOyB9CiAgY29uc3RfcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBf
X24pIGNvbnN0CiAgICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07
IH0KCiAgZXhwbGljaXQgdmVjdG9yKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0
b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2EpIHt9CgogIHZlY3RvcihzaXplX3R5cGUgX19uLCBj
b25zdCBfVHAmIF9fdmFsdWUsCiAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBh
bGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX24sIF9fYSkKICAgIHsgX01fZmluaXNoID0g
dW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX192YWx1ZSk7IH0KCiAgZXhwbGlj
aXQgdmVjdG9yKHNpemVfdHlwZSBfX24pCiAgICA6IF9CYXNlKF9fbiwgYWxsb2NhdG9yX3R5cGUo
KSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwg
X1RwKCkpOyB9CgogIHZlY3Rvcihjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpCiAgICA6
IF9CYXNlKF9feC5zaXplKCksIF9feC5nZXRfYWxsb2NhdG9yKCkpCiAgICB7IF9NX2ZpbmlzaCA9
IHVuaW5pdGlhbGl6ZWRfY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfTV9zdGFydCk7IH0K
CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2ZWN0b3IoX0lucHV0SXRlcmF0
b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICBjb25zdCBhbGxvY2F0
b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFzZShfX2EpIHsKICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVn
cmFsOwogICAgX01faW5pdGlhbGl6ZV9hdXgoX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7
CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9pbml0aWFsaXplX2F1
eChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsdWUsIF9fdHJ1ZV90eXBlKSB7CiAgICBfTV9z
dGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0
ICsgX19uOwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9f
biwgX192YWx1ZSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9p
ZCBfTV9pbml0aWFsaXplX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsKICAgIF9N
X3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9f
Zmlyc3QpKTsKICB9CgogIH52ZWN0b3IoKSB7IGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7
IH0KCiAgdmVjdG9yPF9UcCwgX0FsbG9jPiYgb3BlcmF0b3I9KGNvbnN0IHZlY3RvcjxfVHAsIF9B
bGxvYz4mIF9feCk7CiAgdm9pZCByZXNlcnZlKHNpemVfdHlwZSBfX24pIHsKICAgIGlmIChjYXBh
Y2l0eSgpIDwgX19uKSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgp
OwogICAgICBwb2ludGVyIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX19uLCBfTV9zdGFy
dCwgX01fZmluaXNoKTsKICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAg
X01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAg
ICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICAgIF9NX2ZpbmlzaCA9IF9fdG1wICsgX19vbGRfc2l6
ZTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAgIH0KICB9CgoK
CgoKCiAgdm9pZCBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCkgeyBfTV9m
aWxsX2Fzc2lnbihfX24sIF9fdmFsKTsgfQogIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90eXBl
IF9fbiwgY29uc3QgX1RwJiBfX3ZhbCk7CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRv
cj4KICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf
X2xhc3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+
OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9f
bGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZv
aWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1
ZV90eXBlKQogICAgeyBfTV9maWxsX2Fzc2lnbigoc2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFs
KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNw
YXRjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfX2ZhbHNlX3R5cGUp
CiAgICB7IF9NX2Fzc2lnbl9hdXgoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5
KF9fZmlyc3QpKTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBf
TV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRl
cmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKCiAgcmVmZXJlbmNlIGZyb250KCkgeyByZXR1cm4g
KmJlZ2luKCk7IH0KICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqYmVn
aW4oKTsgfQogIHJlZmVyZW5jZSBiYWNrKCkgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAgY29u
c3RfcmVmZXJlbmNlIGJhY2soKSBjb25zdCB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KCiAgdm9p
ZCBwdXNoX2JhY2soY29uc3QgX1RwJiBfX3gpIHsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5k
X29mX3N0b3JhZ2UpIHsKICAgICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgX194KTsKICAgICAgKytf
TV9maW5pc2g7CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoZW5kKCksIF9feCk7
CiAgfQogIHZvaWQgcHVzaF9iYWNrKCkgewogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zf
c3RvcmFnZSkgewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoKTsKICAgICAgKytfTV9maW5pc2g7
CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoZW5kKCkpOwogIH0KICB2b2lkIHN3
YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KSB7CiAgICBzdGQ6OnN3YXAoX01fc3RhcnQsIF9f
eC5fTV9zdGFydCk7CiAgICBzdGQ6OnN3YXAoX01fZmluaXNoLCBfX3guX01fZmluaXNoKTsKICAg
IHN0ZDo6c3dhcChfTV9lbmRfb2Zfc3RvcmFnZSwgX194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICB9
CgogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkg
ewogICAgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwogICAgaWYgKF9NX2Zp
bmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKSB7CiAgICAg
IGNvbnN0cnVjdChfTV9maW5pc2gsIF9feCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAg
ZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yKF9fcG9zaXRpb24pLCBfX3gpOwogICAg
cmV0dXJuIGJlZ2luKCkgKyBfX247CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bv
c2l0aW9uKSB7CiAgICBzaXplX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICBp
ZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkp
IHsKICAgICAgY29uc3RydWN0KF9NX2ZpbmlzaCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQog
ICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yKF9fcG9zaXRpb24pKTsKICAgIHJl
dHVybiBiZWdpbigpICsgX19uOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
PgogIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf
SW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8
X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01faW5zZXJ0X2Rpc3Bh
dGNoKF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRl
IDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3Bv
cywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3RydWVfdHlwZSkKICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIChzaXplX3R5cGUpIF9f
biwgKF9UcCkgX192YWwpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2
b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICBfTV9yYW5nZV9pbnNl
cnQoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7
CiAgfQoKICB2b2lkIGluc2VydCAoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0
IF9UcCYgX194KQogICAgeyBfTV9maWxsX2luc2VydChfX3BvcywgX19uLCBfX3gpOyB9CgogIHZv
aWQgX01fZmlsbF9pbnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBf
VHAmIF9feCk7CgogIHZvaWQgcG9wX2JhY2soKSB7CiAgICAtLV9NX2ZpbmlzaDsKICAgIGRlc3Ry
b3koX01fZmluaXNoKTsKICB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikg
ewogICAgaWYgKF9fcG9zaXRpb24gKyAxICE9IGVuZCgpKQogICAgICBjb3B5KF9fcG9zaXRpb24g
KyAxLCBlbmQoKSwgX19wb3NpdGlvbik7CiAgICAtLV9NX2ZpbmlzaDsKICAgIGRlc3Ryb3koX01f
ZmluaXNoKTsKICAgIHJldHVybiBfX3Bvc2l0aW9uOwogIH0KICBpdGVyYXRvciBlcmFzZShpdGVy
YXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsKICAgIGl0ZXJhdG9yIF9faShjb3B5KF9f
bGFzdCwgZW5kKCksIF9fZmlyc3QpKTsKICAgIGRlc3Ryb3koX19pLCBlbmQoKSk7CiAgICBfTV9m
aW5pc2ggPSBfTV9maW5pc2ggLSAoX19sYXN0IC0gX19maXJzdCk7CiAgICByZXR1cm4gX19maXJz
dDsKICB9CgogIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplLCBjb25zdCBfVHAmIF9f
eCkgewogICAgaWYgKF9fbmV3X3NpemUgPCBzaXplKCkpCiAgICAgIGVyYXNlKGJlZ2luKCkgKyBf
X25ld19zaXplLCBlbmQoKSk7CiAgICBlbHNlCiAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6
ZSAtIHNpemUoKSwgX194KTsKICB9CiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUp
IHsgcmVzaXplKF9fbmV3X3NpemUsIF9UcCgpKTsgfQogIHZvaWQgY2xlYXIoKSB7IGVyYXNlKGJl
Z2luKCksIGVuZCgpKTsgfQoKcHJvdGVjdGVkOgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyYXRvcj4KICBwb2ludGVyIF9NX2FsbG9jYXRlX2FuZF9jb3B5KHNpemVfdHlwZSBfX24sIF9G
b3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKICB7CiAgICBwb2ludGVyIF9f
cmVzdWx0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgIHRyeSB7CiAgICAgIHVuaW5pdGlhbGl6ZWRf
Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0Owog
ICAgfQogICAgY2F0Y2goLi4uKSB7IF9NX2RlYWxsb2NhdGUoX19yZXN1bHQsIF9fbik7IHRocm93
OyB9OwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fcmFu
Z2VfaW5pdGlhbGl6ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKICB7CiAg
ICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgIHB1c2hfYmFjaygq
X19maXJzdCk7CiAgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9p
ZCBfTV9yYW5nZV9pbml0aWFsaXplKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIGZvcndhcmRfaXRlcmF0
b3JfdGFnKQogIHsKICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgZGlzdGFuY2UoX19maXJzdCwg
X19sYXN0LCBfX24pOwogICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZW5k
X29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6
ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KTsKICB9CgogIHRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywK
ICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy
YXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsK
CiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbnNl
cnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRv
ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPT0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYg
X194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gX194LnNpemUo
KSA9PSBfX3kuc2l6ZSgpICYmCiAgICAgICAgIGVxdWFsKF9feC5iZWdpbigpLCBfX3guZW5kKCks
IF9feS5iZWdpbigpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxp
bmUgYm9vbApvcGVyYXRvcjwoY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2
ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBh
cmUoX194LmJlZ2luKCksIF9feC5lbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcCh2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIHZlY3Rv
cjxfVHAsIF9BbGxvYz4mIF9feSkKewogIF9feC5zd2FwKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPShjb25zdCB2ZWN0b3I8
X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJl
dHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+
CmlubGluZSBib29sCm9wZXJhdG9yPihjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNv
bnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I8PShj
b25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4m
IF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PShjb25zdCB2ZWN0b3I8X1RwLCBfQWxs
b2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9f
eCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KdmVjdG9yPF9U
cCxfQWxsb2M+Jgp2ZWN0b3I8X1RwLF9BbGxvYz46Om9wZXJhdG9yPShjb25zdCB2ZWN0b3I8X1Rw
LCBfQWxsb2M+JiBfX3gpCnsKICBpZiAoJl9feCAhPSB0aGlzKSB7CiAgICBjb25zdCBzaXplX3R5
cGUgX194bGVuID0gX194LnNpemUoKTsKICAgIGlmIChfX3hsZW4gPiBjYXBhY2l0eSgpKSB7CiAg
ICAgIHBvaW50ZXIgX190bXAgPSBfTV9hbGxvY2F0ZV9hbmRfY29weShfX3hsZW4sIF9feC5iZWdp
bigpLCBfX3guZW5kKCkpOwogICAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAg
ICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsK
ICAgICAgX01fc3RhcnQgPSBfX3RtcDsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFy
dCArIF9feGxlbjsKICAgIH0KICAgIGVsc2UgaWYgKHNpemUoKSA+PSBfX3hsZW4pIHsKICAgICAg
aXRlcmF0b3IgX19pKGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgYmVnaW4oKSkpOwogICAg
ICBkZXN0cm95KF9faSwgZW5kKCkpOwogICAgfQogICAgZWxzZSB7CiAgICAgIGNvcHkoX194LmJl
Z2luKCksIF9feC5iZWdpbigpICsgc2l6ZSgpLCBfTV9zdGFydCk7CiAgICAgIHVuaW5pdGlhbGl6
ZWRfY29weShfX3guYmVnaW4oKSArIHNpemUoKSwgX194LmVuZCgpLCBfTV9maW5pc2gpOwogICAg
fQogICAgX01fZmluaXNoID0gX01fc3RhcnQgKyBfX3hsZW47CiAgfQogIHJldHVybiAqdGhpczsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIHZlY3RvcjxfVHAsIF9B
bGxvYz46Ol9NX2ZpbGxfYXNzaWduKHNpemVfdCBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFs
KQp7CiAgaWYgKF9fbiA+IGNhcGFjaXR5KCkpIHsKICAgIHZlY3RvcjxfVHAsIF9BbGxvYz4gX190
bXAoX19uLCBfX3ZhbCwgZ2V0X2FsbG9jYXRvcigpKTsKICAgIF9fdG1wLnN3YXAoKnRoaXMpOwog
IH0KICBlbHNlIGlmIChfX24gPiBzaXplKCkpIHsKICAgIGZpbGwoYmVnaW4oKSwgZW5kKCksIF9f
dmFsKTsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2ZpbmlzaCwgX19u
IC0gc2l6ZSgpLCBfX3ZhbCk7CiAgfQogIGVsc2UKICAgIGVyYXNlKGZpbGxfbihiZWdpbigpLCBf
X24sIF9fdmFsKSwgZW5kKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+
IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9N
X2Fzc2lnbl9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewog
IGl0ZXJhdG9yIF9fY3VyKGJlZ2luKCkpOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYg
X19jdXIgIT0gZW5kKCk7ICsrX19jdXIsICsrX19maXJzdCkKICAgICpfX2N1ciA9ICpfX2ZpcnN0
OwogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgZWxz
ZQogICAgaW5zZXJ0KGVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+CnZvaWQKdmVj
dG9yPF9UcCwgX0FsbG9jPjo6X01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3
YXJkX2l0ZXJhdG9yX3RhZykgewogIHNpemVfdHlwZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19m
aXJzdCwgX19sYXN0LCBfX2xlbik7CgogIGlmIChfX2xlbiA+IGNhcGFjaXR5KCkpIHsKICAgIHBv
aW50ZXIgX190bXAoX01fYWxsb2NhdGVfYW5kX2NvcHkoX19sZW4sIF9fZmlyc3QsIF9fbGFzdCkp
OwogICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgIF9NX2RlYWxsb2NhdGUoX01f
c3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgX01fc3RhcnQgPSBfX3Rt
cDsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fZmluaXNoID0gX01fc3RhcnQgKyBfX2xlbjsK
ICB9CiAgZWxzZSBpZiAoc2l6ZSgpID49IF9fbGVuKSB7CiAgICBpdGVyYXRvciBfX25ld19maW5p
c2goY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KSk7CiAgICBkZXN0cm95KF9fbmV3X2Zp
bmlzaCwgZW5kKCkpOwogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICB9CiAg
ZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIgX19taWQgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21p
ZCwgc2l6ZSgpKTsKICAgIGNvcHkoX19maXJzdCwgX19taWQsIF9NX3N0YXJ0KTsKICAgIF9NX2Zp
bmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX21pZCwgX19sYXN0LCBfTV9maW5pc2gpOwogIH0K
fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkCnZlY3RvcjxfVHAsIF9B
bGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gp
CnsKICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICBjb25zdHJ1Y3Qo
X01fZmluaXNoLCAqKF9NX2ZpbmlzaCAtIDEpKTsKICAgICsrX01fZmluaXNoOwogICAgX1RwIF9f
eF9jb3B5ID0gX194OwogICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9m
aW5pc2ggLSAyKSwgaXRlcmF0b3IoX01fZmluaXNoLSAxKSk7CiAgICAqX19wb3NpdGlvbiA9IF9f
eF9jb3B5OwogIH0KICBlbHNlIHsKICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6
ZSgpOwogICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSAhPSAwID8gMiAqIF9f
b2xkX3NpemUgOiAxOwogICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4p
KTsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICB0cnkgewogICAg
ICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoaXRlcmF0b3IoX01fc3RhcnQpLCBf
X3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdf
c3RhcnQpOwogICAgICBjb25zdHJ1Y3QoX19uZXdfZmluaXNoLmJhc2UoKSwgX194KTsKICAgICAg
KytfX25ld19maW5pc2g7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShf
X3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2gpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19uZXdfZmluaXNoKTsKICAgIH0KICAgIGNhdGNoKC4uLikgeyAoZGVz
dHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gpLCBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0
LmJhc2UoKSxfX2xlbikpOyB0aHJvdzsgfTsKCiAgICBkZXN0cm95KGJlZ2luKCksIGVuZCgpKTsK
ICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQp
OwogICAgX01fc3RhcnQgPSBfX25ld19zdGFydC5iYXNlKCk7CiAgICBfTV9maW5pc2ggPSBfX25l
d19maW5pc2guYmFzZSgpOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNl
KCkgKyBfX2xlbjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9p
ZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24p
CnsKICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICBjb25zdHJ1Y3Qo
X01fZmluaXNoLCAqKF9NX2ZpbmlzaCAtIDEpKTsKICAgICsrX01fZmluaXNoOwogICAgY29weV9i
YWNrd2FyZChfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2ggLSAyKSwKICAgICAgICAgICAg
ICAgICAgaXRlcmF0b3IoX01fZmluaXNoIC0gMSkpOwogICAgKl9fcG9zaXRpb24gPSBfVHAoKTsK
ICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAg
IGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgIT0gMCA/IDIgKiBfX29sZF9zaXpl
IDogMTsKICAgIHBvaW50ZXIgX19uZXdfc3RhcnQgPSBfTV9hbGxvY2F0ZShfX2xlbik7CiAgICBw
b2ludGVyIF9fbmV3X2ZpbmlzaCA9IF9fbmV3X3N0YXJ0OwogICAgdHJ5IHsKICAgICAgX19uZXdf
ZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGl0ZXJhdG9yKF9NX3N0YXJ0KSwgX19wb3NpdGlv
biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N0YXJ0KTsK
ICAgICAgY29uc3RydWN0KF9fbmV3X2ZpbmlzaCk7CiAgICAgICsrX19uZXdfZmluaXNoOwogICAg
ICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgaXRlcmF0b3Io
X01fZmluaXNoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3
X2ZpbmlzaCk7CiAgICB9CiAgICBjYXRjaCguLi4pIHsgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19u
ZXdfZmluaXNoKSwgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydCxfX2xlbikpOyB0aHJvdzsgfTsK
CiAgICBkZXN0cm95KGJlZ2luKCksIGVuZCgpKTsKICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQs
IF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgX01fc3RhcnQgPSBfX25ld19zdGFy
dDsKICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0g
X19uZXdfc3RhcnQgKyBfX2xlbjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B
bGxvYz4Kdm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9maWxsX2luc2VydChpdGVyYXRvciBf
X3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9UcCYgX194KQp7CiAgaWYgKF9fbiAhPSAwKSB7CiAgICBpZiAoc2l6
ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fZmluaXNoKSA+PSBfX24pIHsKICAgICAgX1Rw
IF9feF9jb3B5ID0gX194OwogICAgICBjb25zdCBzaXplX3R5cGUgX19lbGVtc19hZnRlciA9IGVu
ZCgpIC0gX19wb3NpdGlvbjsKICAgICAgaXRlcmF0b3IgX19vbGRfZmluaXNoKF9NX2ZpbmlzaCk7
CiAgICAgIGlmIChfX2VsZW1zX2FmdGVyID4gX19uKSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9j
b3B5KF9NX2ZpbmlzaCAtIF9fbiwgX01fZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2Zp
bmlzaCArPSBfX247CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBfX29sZF9maW5p
c2ggLSBfX24sIF9fb2xkX2ZpbmlzaCk7CiAgICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX3Bvc2l0
aW9uICsgX19uLCBfX3hfY29weSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgdW5pbml0
aWFsaXplZF9maWxsX24oX01fZmluaXNoLCBfX24gLSBfX2VsZW1zX2FmdGVyLCBfX3hfY29weSk7
CiAgICAgICAgX01fZmluaXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgdW5pbml0
aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAg
ICBfTV9maW5pc2ggKz0gX19lbGVtc19hZnRlcjsKICAgICAgICBmaWxsKF9fcG9zaXRpb24sIF9f
b2xkX2ZpbmlzaCwgX194X2NvcHkpOwogICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgY29u
c3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBf
X2xlbiA9IF9fb2xkX3NpemUgKyBtYXgoX19vbGRfc2l6ZSwgX19uKTsKICAgICAgaXRlcmF0b3Ig
X19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4pKTsKICAgICAgaXRlcmF0b3IgX19uZXdfZmlu
aXNoKF9fbmV3X3N0YXJ0KTsKICAgICAgdHJ5IHsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmlu
aXRpYWxpemVkX2NvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICAg
IF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9fbmV3X2ZpbmlzaCwgX19uLCBf
X3gpOwogICAgICAgIF9fbmV3X2ZpbmlzaAogICAgICAgICAgPSB1bmluaXRpYWxpemVkX2NvcHko
X19wb3NpdGlvbiwgZW5kKCksIF9fbmV3X2ZpbmlzaCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4u
KSB7IChkZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIF9NX2RlYWxsb2NhdGUoX19u
ZXdfc3RhcnQuYmFzZSgpLF9fbGVuKSk7IHRocm93OyB9OwoKICAgICAgZGVzdHJveShfTV9zdGFy
dCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0
b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgpOwog
ICAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2guYmFzZSgpOwogICAgICBfTV9lbmRfb2Zfc3Rv
cmFnZSA9IF9fbmV3X3N0YXJ0LmJhc2UoKSArIF9fbGVuOwogICAgfQogIH0KfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+
CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9z
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19m
aXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9y
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJh
dG9yX3RhZykKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgewogICAg
X19wb3MgPSBpbnNlcnQoX19wb3MsICpfX2ZpcnN0KTsKICAgICsrX19wb3M7CiAgfQp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXJhdG9yPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX3JhbmdlX2luc2VydChpdGVyYXRv
ciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zvcndh
cmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewogIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewog
ICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7
CiAgICBpZiAoc2l6ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fZmluaXNoKSA+PSBfX24p
IHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPSBlbmQoKSAtIF9fcG9zaXRp
b247CiAgICAgIGl0ZXJhdG9yIF9fb2xkX2ZpbmlzaChfTV9maW5pc2gpOwogICAgICBpZiAoX19l
bGVtc19hZnRlciA+IF9fbikgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfTV9maW5pc2gg
LSBfX24sIF9NX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uOwog
ICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29s
ZF9maW5pc2gpOwogICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsKICAg
ICAgfQogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJz
dDsKICAgICAgICBhZHZhbmNlKF9fbWlkLCBfX2VsZW1zX2FmdGVyKTsKICAgICAgICB1bmluaXRp
YWxpemVkX2NvcHkoX19taWQsIF9fbGFzdCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2gg
Kz0gX19uIC0gX19lbGVtc19hZnRlcjsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19wb3Np
dGlvbiwgX19vbGRfZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX2Vs
ZW1zX2FmdGVyOwogICAgICAgIGNvcHkoX19maXJzdCwgX19taWQsIF9fcG9zaXRpb24pOwogICAg
ICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBz
aXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgKyBtYXgoX19v
bGRfc2l6ZSwgX19uKTsKICAgICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19s
ZW4pKTsKICAgICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0KTsKICAgICAgdHJ5
IHsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoaXRlcmF0b3IoX01f
c3RhcnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bvc2l0
aW9uLCBfX25ld19zdGFydCk7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9j
b3B5KF9fZmlyc3QsIF9fbGFzdCwgX19uZXdfZmluaXNoKTsKICAgICAgICBfX25ld19maW5pc2gK
ICAgICAgICAgID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2Zp
bmlzaCksIF9fbmV3X2ZpbmlzaCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKSB7IChkZXN0cm95
KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQuYmFz
ZSgpLF9fbGVuKSk7IHRocm93OyB9OwoKICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNo
KTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9z
dGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgpOwogICAgICBfTV9maW5p
c2ggPSBfX25ld19maW5pc2guYmFzZSgpOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3
X3N0YXJ0LmJhc2UoKSArIF9fbGVuOwogICAgfQogIH0KfQoKfQojIDM4ICIvdXNyL2xvY2FsL2dj
YzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3Rk
X3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2J2ZWN0b3IuaCIgMSAzCiMgMzQgIi91
c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9n
KysvYml0cy9zdGxfYnZlY3Rvci5oIiAzCm5hbWVzcGFjZSBzdGQKewoKc3RhdGljIGNvbnN0IGlu
dCBfX1dPUkRfQklUID0gaW50KDgqc2l6ZW9mKHVuc2lnbmVkIGludCkpOwoKc3RydWN0IF9CaXRf
cmVmZXJlbmNlIHsKICB1bnNpZ25lZCBpbnQqIF9NX3A7CiAgdW5zaWduZWQgaW50IF9NX21hc2s7
CiAgX0JpdF9yZWZlcmVuY2UodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAg
ICA6IF9NX3AoX194KSwgX01fbWFzayhfX3kpIHt9CgpwdWJsaWM6CiAgX0JpdF9yZWZlcmVuY2Uo
KSA6IF9NX3AoMCksIF9NX21hc2soMCkge30KICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gISghKCpfTV9wICYgX01fbWFzaykpOyB9CiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShi
b29sIF9feCkKICB7CiAgICBpZiAoX194KSAqX01fcCB8PSBfTV9tYXNrOwogICAgZWxzZSAqX01f
cCAmPSB+X01fbWFzazsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX0JpdF9yZWZlcmVuY2UmIG9w
ZXJhdG9yPShjb25zdCBfQml0X3JlZmVyZW5jZSYgX194KQogICAgeyByZXR1cm4gKnRoaXMgPSBi
b29sKF9feCk7IH0KICBib29sIG9wZXJhdG9yPT0oY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkg
Y29uc3QKICAgIHsgcmV0dXJuIGJvb2woKnRoaXMpID09IGJvb2woX194KTsgfQogIGJvb2wgb3Bl
cmF0b3I8KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiAhYm9v
bCgqdGhpcykgJiYgYm9vbChfX3gpOwogIH0KICB2b2lkIGZsaXAoKSB7ICpfTV9wIF49IF9NX21h
c2s7IH0KfTsKCmlubGluZSB2b2lkIHN3YXAoX0JpdF9yZWZlcmVuY2UgX194LCBfQml0X3JlZmVy
ZW5jZSBfX3kpCnsKICBib29sIF9fdG1wID0gX194OwogIF9feCA9IF9feTsKICBfX3kgPSBfX3Rt
cDsKfQoKc3RydWN0IF9CaXRfaXRlcmF0b3JfYmFzZSA6IHB1YmxpYyByYW5kb21fYWNjZXNzX2l0
ZXJhdG9yPGJvb2wsIHB0cmRpZmZfdD4KewogIHVuc2lnbmVkIGludCogX01fcDsKICB1bnNpZ25l
ZCBpbnQgX01fb2Zmc2V0OwoKICBfQml0X2l0ZXJhdG9yX2Jhc2UodW5zaWduZWQgaW50KiBfX3gs
IHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9NX3AoX194KSwgX01fb2Zmc2V0KF9feSkge30KCiAg
dm9pZCBfTV9idW1wX3VwKCkgewogICAgaWYgKF9NX29mZnNldCsrID09IF9fV09SRF9CSVQgLSAx
KSB7CiAgICAgIF9NX29mZnNldCA9IDA7CiAgICAgICsrX01fcDsKICAgIH0KICB9CiAgdm9pZCBf
TV9idW1wX2Rvd24oKSB7CiAgICBpZiAoX01fb2Zmc2V0LS0gPT0gMCkgewogICAgICBfTV9vZmZz
ZXQgPSBfX1dPUkRfQklUIC0gMTsKICAgICAgLS1fTV9wOwogICAgfQogIH0KCiAgdm9pZCBfTV9p
bmNyKHB0cmRpZmZfdCBfX2kpIHsKICAgIGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX2kgKyBfTV9v
ZmZzZXQ7CiAgICBfTV9wICs9IF9fbiAvIF9fV09SRF9CSVQ7CiAgICBfX24gPSBfX24gJSBfX1dP
UkRfQklUOwogICAgaWYgKF9fbiA8IDApIHsKICAgICAgX01fb2Zmc2V0ID0gKHVuc2lnbmVkIGlu
dCkgX19uICsgX19XT1JEX0JJVDsKICAgICAgLS1fTV9wOwogICAgfSBlbHNlCiAgICAgIF9NX29m
ZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbjsKICB9CgogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBf
Qml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuIF9NX3AgPT0gX19pLl9N
X3AgJiYgX01fb2Zmc2V0ID09IF9faS5fTV9vZmZzZXQ7CiAgfQogIGJvb2wgb3BlcmF0b3I8KGNv
bnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gX01fcCA8IF9f
aS5fTV9wIHx8IChfTV9wID09IF9faS5fTV9wICYmIF9NX29mZnNldCA8IF9faS5fTV9vZmZzZXQp
OwogIH0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNv
bnN0IHsKICAgIHJldHVybiAhKCp0aGlzID09IF9faSk7CiAgfQogIGJvb2wgb3BlcmF0b3I+KGNv
bnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gX19pIDwgKnRo
aXM7CiAgfQogIGJvb2wgb3BlcmF0b3I8PShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkg
Y29uc3QgewogICAgcmV0dXJuICEoX19pIDwgKnRoaXMpOwogIH0KICBib29sIG9wZXJhdG9yPj0o
Y29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiAhKCp0aGlz
IDwgX19pKTsKICB9Cn07CgppbmxpbmUgcHRyZGlmZl90Cm9wZXJhdG9yLShjb25zdCBfQml0X2l0
ZXJhdG9yX2Jhc2UmIF9feCwgY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX3kpIHsKICByZXR1
cm4gX19XT1JEX0JJVCAqIChfX3guX01fcCAtIF9feS5fTV9wKSArIF9feC5fTV9vZmZzZXQgLSBf
X3kuX01fb2Zmc2V0Owp9CgoKc3RydWN0IF9CaXRfaXRlcmF0b3IgOiBwdWJsaWMgX0JpdF9pdGVy
YXRvcl9iYXNlCnsKICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVm
IF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOwogIHR5cGVkZWYgX0JpdF9pdGVyYXRvciBpdGVyYXRv
cjsKCiAgX0JpdF9pdGVyYXRvcigpIDogX0JpdF9pdGVyYXRvcl9iYXNlKDAsIDApIHt9CiAgX0Jp
dF9pdGVyYXRvcih1bnNpZ25lZCBpbnQqIF9feCwgdW5zaWduZWQgaW50IF9feSkKICAgIDogX0Jp
dF9pdGVyYXRvcl9iYXNlKF9feCwgX195KSB7fQoKICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29u
c3QgeyByZXR1cm4gcmVmZXJlbmNlKF9NX3AsIDFVIDw8IF9NX29mZnNldCk7IH0KICBpdGVyYXRv
ciYgb3BlcmF0b3IrKygpIHsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiAqdGhpczsKICB9
CiAgaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7
CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGl0ZXJhdG9yJiBvcGVy
YXRvci0tKCkgewogICAgX01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0
ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAg
X01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGl0ZXJhdG9yJiBvcGVyYXRv
cis9KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgIF9NX2luY3IoX19pKTsKICAgIHJldHVybiAq
dGhpczsKICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9faSkgewog
ICAgKnRoaXMgKz0gLV9faTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3Igb3BlcmF0
b3IrKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRo
aXM7CiAgICByZXR1cm4gX190bXAgKz0gX19pOwogIH0KICBpdGVyYXRvciBvcGVyYXRvci0oZGlm
ZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAg
IHJldHVybiBfX3RtcCAtPSBfX2k7CiAgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJl
bmNlX3R5cGUgX19pKSB7IHJldHVybiAqKCp0aGlzICsgX19pKTsgfQp9OwoKaW5saW5lIF9CaXRf
aXRlcmF0b3IKb3BlcmF0b3IrKHB0cmRpZmZfdCBfX24sIGNvbnN0IF9CaXRfaXRlcmF0b3ImIF9f
eCkgeyByZXR1cm4gX194ICsgX19uOyB9CgoKc3RydWN0IF9CaXRfY29uc3RfaXRlcmF0b3IgOiBw
dWJsaWMgX0JpdF9pdGVyYXRvcl9iYXNlCnsKICB0eXBlZGVmIGJvb2wgcmVmZXJlbmNlOwogIHR5
cGVkZWYgYm9vbCBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBib29sKiBwb2ludGVy
OwogIHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCiAgX0JpdF9j
b25zdF9pdGVyYXRvcigpIDogX0JpdF9pdGVyYXRvcl9iYXNlKDAsIDApIHt9CiAgX0JpdF9jb25z
dF9pdGVyYXRvcih1bnNpZ25lZCBpbnQqIF9feCwgdW5zaWduZWQgaW50IF9feSkKICAgIDogX0Jp
dF9pdGVyYXRvcl9iYXNlKF9feCwgX195KSB7fQogIF9CaXRfY29uc3RfaXRlcmF0b3IoY29uc3Qg
X0JpdF9pdGVyYXRvciYgX194KQogICAgOiBfQml0X2l0ZXJhdG9yX2Jhc2UoX194Ll9NX3AsIF9f
eC5fTV9vZmZzZXQpIHt9CgogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAg
ICByZXR1cm4gX0JpdF9yZWZlcmVuY2UoX01fcCwgMVUgPDwgX01fb2Zmc2V0KTsKICB9CiAgY29u
c3RfaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4g
KnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBjb25zdF9p
dGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF91cCgpOwogICAgcmV0dXJuIF9fdG1w
OwogIH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3ItLSgpIHsKICAgIF9NX2J1bXBfZG93bigp
OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvci0tKGludCkg
ewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBfZG93bigpOwog
ICAgcmV0dXJuIF9fdG1wOwogIH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3IrPShkaWZmZXJl
bmNlX3R5cGUgX19pKSB7CiAgICBfTV9pbmNyKF9faSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQog
IGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgICp0
aGlzICs9IC1fX2k7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJh
dG9yKyhkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBjb25zdF9pdGVyYXRvciBfX3Rt
cCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wICs9IF9faTsKICB9CiAgY29uc3RfaXRlcmF0b3Ig
b3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGNvbnN0X2l0ZXJhdG9y
IF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgLT0gX19pOwogIH0KICBjb25zdF9yZWZl
cmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICByZXR1cm4gKigqdGhp
cyArIF9faSk7CiAgfQp9OwoKaW5saW5lIF9CaXRfY29uc3RfaXRlcmF0b3IKb3BlcmF0b3IrKHB0
cmRpZmZfdCBfX24sIGNvbnN0IF9CaXRfY29uc3RfaXRlcmF0b3ImIF9feCkgeyByZXR1cm4gX194
ICsgX19uOyB9CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2NhdG9yLCBib29sIF9faXNfc3Rh
dGljPgpjbGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNlIHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5h
bWUgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAg
ICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25z
dCB7IHJldHVybiBfTV9kYXRhX2FsbG9jYXRvcjsgfQoKICBfQnZlY3Rvcl9hbGxvY19iYXNlKGNv
bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX2RhdGFfYWxsb2NhdG9yKF9fYSksIF9N
X3N0YXJ0KCksIF9NX2ZpbmlzaCgpLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKSB7fQoKcHJvdGVjdGVk
OgogIHVuc2lnbmVkIGludCogX01fYml0X2FsbG9jKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBf
TV9kYXRhX2FsbG9jYXRvci5hbGxvY2F0ZSgoX19uICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9C
SVQpOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKCkgewogICAgaWYgKF9NX3N0YXJ0Ll9NX3ApCiAg
ICAgIF9NX2RhdGFfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX01fc3RhcnQuX01fcCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0Ll9N
X3ApOwogIH0KCiAgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czx1bnNpZ25lZCBpbnQsIF9BbGxvY2F0
b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgX01fZGF0YV9hbGxvY2F0b3I7CiAgX0JpdF9p
dGVyYXRvciBfTV9zdGFydDsKICBfQml0X2l0ZXJhdG9yIF9NX2ZpbmlzaDsKICB1bnNpZ25lZCBp
bnQqIF9NX2VuZF9vZl9zdG9yYWdlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2NhdG9yPgpj
bGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvY2F0b3IsIHRydWU+IHsKcHVibGljOgogIHR5
cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9y
X3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxv
Y2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9CgogIF9CdmVjdG9yX2Fs
bG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKQogICAgOiBfTV9zdGFydCgpLCBfTV9maW5p
c2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30KCnByb3RlY3RlZDoKICB0eXBlZGVmIHR5cGVu
YW1lIF9BbGxvY190cmFpdHM8dW5zaWduZWQgaW50LCBfQWxsb2NhdG9yPjo6X0FsbG9jX3R5cGUK
ICAgICAgICAgIF9BbGxvY190eXBlOwoKICB1bnNpZ25lZCBpbnQqIF9NX2JpdF9hbGxvYyhzaXpl
X3QgX19uKQogICAgeyByZXR1cm4gX0FsbG9jX3R5cGU6OmFsbG9jYXRlKChfX24gKyBfX1dPUkRf
QklUIC0gMSkvX19XT1JEX0JJVCk7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUoKSB7CiAgICBpZiAo
X01fc3RhcnQuX01fcCkKICAgICAgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUoX01fc3RhcnQuX01f
cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9z
dGFydC5fTV9wKTsKICB9CgogIF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRv
ciBfTV9maW5pc2g7CiAgdW5zaWduZWQgaW50KiBfTV9lbmRfb2Zfc3RvcmFnZTsKfTsKCnRlbXBs
YXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNzIF9CdmVjdG9yX2Jhc2UKICA6IHB1YmxpYyBfQnZlY3Rv
cl9hbGxvY19iYXNlPF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxv
Y190cmFpdHM8Ym9vbCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgp7CiAgdHlwZWRlZiBfQnZl
Y3Rvcl9hbGxvY19iYXNlPF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Fs
bG9jX3RyYWl0czxib29sLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFz
ZTsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9j
YXRvcl90eXBlOwoKICBfQnZlY3Rvcl9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDog
X0Jhc2UoX19hKSB7fQogIH5fQnZlY3Rvcl9iYXNlKCkgeyBfQmFzZTo6X01fZGVhbGxvY2F0ZSgp
OyB9Cn07Cgp9CgoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51
eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX3ZlY3Rvci5oIiAxIDMKIyAzMTggIi91c3Iv
bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysv
Yml0cy9zdGxfYnZlY3Rvci5oIiAyIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8dHlwZW5h
bWUgX0FsbG9jPgogIGNsYXNzIHZlY3Rvcjxib29sLCBfQWxsb2M+IDogcHVibGljIF9CdmVjdG9y
X2Jhc2U8X0FsbG9jPgogIHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIGJvb2wgdmFsdWVfdHlwZTsK
ICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZl
cmVuY2VfdHlwZTsKICAgIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgdHlw
ZWRlZiBib29sIGNvbnN0X3JlZmVyZW5jZTsKICAgIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UqIHBv
aW50ZXI7CiAgICB0eXBlZGVmIGNvbnN0IGJvb2wqIGNvbnN0X3BvaW50ZXI7CgogICAgdHlwZWRl
ZiBfQml0X2l0ZXJhdG9yIGl0ZXJhdG9yOwogICAgdHlwZWRlZiBfQml0X2NvbnN0X2l0ZXJhdG9y
IGNvbnN0X2l0ZXJhdG9yOwoKICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVy
YXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRv
cjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9CdmVj
dG9yX2Jhc2U8X0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgICBhbGxv
Y2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgewogICAgICByZXR1cm4gX0J2ZWN0b3Jf
YmFzZTxfQWxsb2M+OjpnZXRfYWxsb2NhdG9yKCk7CiAgICB9CgogIHByb3RlY3RlZDoKICAgIHVz
aW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fYml0X2FsbG9jOwogICAgdXNpbmcgX0J2ZWN0
b3JfYmFzZTxfQWxsb2M+OjpfTV9kZWFsbG9jYXRlOwogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxf
QWxsb2M+OjpfTV9zdGFydDsKICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fZmlu
aXNoOwogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9lbmRfb2Zfc3RvcmFnZTsK
CiAgcHJvdGVjdGVkOgogICAgdm9pZCBfTV9pbml0aWFsaXplKHNpemVfdHlwZSBfX24pIHsKICAg
ICAgdW5zaWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19uKTsKICAgICAgX01fZW5kX29m
X3N0b3JhZ2UgPSBfX3EgKyAoX19uICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAg
IF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgX01fZmluaXNoID0gX01fc3RhcnQg
KyBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgIH0KICAgIHZvaWQgX01faW5zZXJ0X2F1eChpdGVy
YXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCkgewogICAgICBpZiAoX01fZmluaXNoLl9NX3AgIT0g
X01fZW5kX29mX3N0b3JhZ2UpIHsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9N
X2ZpbmlzaCwgX01fZmluaXNoICsgMSk7CiAgICAgICAgKl9fcG9zaXRpb24gPSBfX3g7CiAgICAg
ICAgKytfTV9maW5pc2g7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgc2l6ZV90eXBlIF9f
bGVuID0gc2l6ZSgpID8gMiAqIHNpemUoKSA6IF9fV09SRF9CSVQ7CiAgICAgICAgdW5zaWduZWQg
aW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19sZW4pOwogICAgICAgIGl0ZXJhdG9yIF9faSA9IGNv
cHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAgKl9faSsr
ID0gX194OwogICAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSk7
CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19x
ICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAgICAgX01fc3RhcnQg
PSBpdGVyYXRvcihfX3EsIDApOwogICAgICB9CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbml0aWFsaXplX3JhbmdlKF9JbnB1dEl0ZXJhdG9y
IF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcigpOwog
ICAgICBfTV9maW5pc2ggPSBpdGVyYXRvcigpOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IDA7
CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBwdXNo
X2JhY2soKl9fZmlyc3QpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJh
dG9yPgogICAgdm9pZCBfTV9pbml0aWFsaXplX3JhbmdlKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJz
dCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICAgICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICAgIGRp
c3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwog
ICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpOwogICAgfQoKICAgIHRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5zZXJ0X3JhbmdlKGl0ZXJhdG9y
IF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwg
X0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRl
cmF0b3JfdGFnKSB7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkg
ewogICAgICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7CiAgICAgICAgKytfX3Bv
czsKICAgICAgfQogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgog
ICAgdm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewog
ICAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBzaXplX3R5cGUgX19uID0gMDsK
ICAgICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7CiAgICAgICAgaWYgKGNhcGFj
aXR5KCkgLSBzaXplKCkgPj0gX19uKSB7CiAgICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRp
b24sIGVuZCgpLCBfTV9maW5pc2ggKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgICAgICBj
b3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3NpdGlvbik7CiAgICAgICAgICBfTV9maW5pc2ggKz0g
ZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAg
c2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpICsgbWF4KHNpemUoKSwgX19uKTsKICAgICAgICAgIHVu
c2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgICAgIGl0ZXJhdG9y
IF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAg
ICAgICBfX2kgPSBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19pKTsKICAgICAgICAgIF9NX2Zpbmlz
aCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSk7CiAgICAgICAgICBfTV9kZWFsbG9jYXRl
KCk7CiAgICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9fV09SRF9C
SVQgLSAxKS9fX1dPUkRfQklUOwogICAgICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDAp
OwogICAgICAgIH0KICAgICAgfQogICAgfQoKICBwdWJsaWM6CiAgICBpdGVyYXRvciBiZWdpbigp
IHsgcmV0dXJuIF9NX3N0YXJ0OyB9CiAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIF9NX3N0YXJ0OyB9CiAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV9maW5pc2g7
IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQoK
ICAgIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihl
bmQoKSk7IH0KICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgewogICAg
ICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7CiAgICB9CiAgICByZXZlcnNl
X2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CiAg
ICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7CiAgICAgIHJldHVybiBjb25z
dF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOwogICAgfQoKICAgIHNpemVfdHlwZSBzaXplKCkg
Y29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0KICAgIHNpemVfdHlw
ZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZSgtMSk7IH0KICAgIHNpemVfdHlw
ZSBjYXBhY2l0eSgpIGNvbnN0IHsKICAgICAgcmV0dXJuIHNpemVfdHlwZShjb25zdF9pdGVyYXRv
cihfTV9lbmRfb2Zfc3RvcmFnZSwgMCkgLSBiZWdpbigpKTsKICAgIH0KICAgIGJvb2wgZW1wdHko
KSBjb25zdCB7IHJldHVybiBiZWdpbigpID09IGVuZCgpOyB9CgogICAgcmVmZXJlbmNlIG9wZXJh
dG9yW10oc2l6ZV90eXBlIF9fbikKICAgICAgeyByZXR1cm4gKihiZWdpbigpICsgZGlmZmVyZW5j
ZV90eXBlKF9fbikpOyB9CiAgICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUg
X19uKSBjb25zdAogICAgICB7IHJldHVybiAqKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX19u
KSk7IH0KCiAgICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNvbnN0IHsKICAg
ICAgaWYgKF9fbiA+PSB0aGlzLT5zaXplKCkpCiAgICAgICAgX190aHJvd19yYW5nZV9lcnJvcigi
dmVjdG9yPGJvb2w+Iik7CiAgICB9CgogICAgcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pCiAg
ICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQogICAgY29u
c3RfcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgX01fcmFuZ2VfY2hl
Y2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQoKICAgIGV4cGxpY2l0IHZlY3Rvcihjb25z
dCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQnZlY3Rv
cl9iYXNlPF9BbGxvYz4oX19hKSB7fQoKICAgIHZlY3RvcihzaXplX3R5cGUgX19uLCBib29sIF9f
dmFsdWUsCiAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRv
cl90eXBlKCkpCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkKICAgIHsKICAgICAg
X01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9z
dG9yYWdlLCBfX3ZhbHVlID8gfjAgOiAwKTsKICAgIH0KCiAgICBleHBsaWNpdCB2ZWN0b3Ioc2l6
ZV90eXBlIF9fbikKICAgICAgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oYWxsb2NhdG9yX3R5cGUo
KSkKICAgIHsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0Ll9N
X3AsIF9NX2VuZF9vZl9zdG9yYWdlLCAwKTsKICAgIH0KCiAgICB2ZWN0b3IoY29uc3QgdmVjdG9y
JiBfX3gpIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9feC5nZXRfYWxsb2NhdG9yKCkpIHsKICAg
ICAgX01faW5pdGlhbGl6ZShfX3guc2l6ZSgpKTsKICAgICAgY29weShfX3guYmVnaW4oKSwgX194
LmVuZCgpLCBfTV9zdGFydCk7CiAgICB9CgoKCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+
CiAgICB2b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBf
X3gsIF9fdHJ1ZV90eXBlKSB7CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAgICAgZmlsbChf
TV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsKICAgIH0KCiAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2luaXRpYWxpemVf
ZGlzcGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgICBfTV9p
bml0aWFsaXplX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2Zp
cnN0KSk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdmVj
dG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAg
ICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAg
ICA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihfX2EpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAg
ICBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwog
ICAgfQoKICAgIH52ZWN0b3IoKSB7IH0KCiAgICB2ZWN0b3ImIG9wZXJhdG9yPShjb25zdCB2ZWN0
b3ImIF9feCkgewogICAgICBpZiAoJl9feCA9PSB0aGlzKSByZXR1cm4gKnRoaXM7CiAgICAgIGlm
IChfX3guc2l6ZSgpID4gY2FwYWNpdHkoKSkgewogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAg
ICAgICBfTV9pbml0aWFsaXplKF9feC5zaXplKCkpOwogICAgICB9CiAgICAgIGNvcHkoX194LmJl
Z2luKCksIF9feC5lbmQoKSwgYmVnaW4oKSk7CiAgICAgIF9NX2ZpbmlzaCA9IGJlZ2luKCkgKyBk
aWZmZXJlbmNlX3R5cGUoX194LnNpemUoKSk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgoK
CgoKICAgIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBfX3gpIHsKICAgICAg
aWYgKF9fbiA+IHNpemUoKSkgewogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29m
X3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX24gLSBzaXpl
KCksIF9feCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgZXJhc2UoYmVnaW4oKSArIF9f
biwgZW5kKCkpOwogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2Us
IF9feCA/IH4wIDogMCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGFzc2lnbihzaXplX3QgX19u
LCBib29sIF9feCkgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9feCk7IH0KCiAgICB0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2Zp
cnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNf
aW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2Fz
c2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgICB0
ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50
ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAgICAgeyBfTV9maWxsX2Fz
c2lnbigoc2l6ZV90KSBfX24sIChib29sKSBfX3ZhbCk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcj4KICAgIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJz
dCwgX0lucHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgICAgeyBfTV9hc3NpZ25fYXV4
KF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgICB0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lu
cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgICBpdGVyYXRvciBfX2N1ciA9IGJl
Z2luKCk7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7
ICsrX19jdXIsICsrX19maXJzdCkKICAgICAgICAqX19jdXIgPSAqX19maXJzdDsKICAgICAgaWYg
KF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgICAgIGVs
c2UKICAgICAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CgogICAgdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0Zv
cndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgICBzaXplX3R5cGUgX19s
ZW4gPSAwOwogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICAgICAgaWYg
KF9fbGVuIDwgc2l6ZSgpKQogICAgICAgIGVyYXNlKGNvcHkoX19maXJzdCwgX19sYXN0LCBiZWdp
bigpKSwgZW5kKCkpOwogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlk
ID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkLCBzaXplKCkpOwogICAgICAgIGNvcHko
X19maXJzdCwgX19taWQsIGJlZ2luKCkpOwogICAgICAgIGluc2VydChlbmQoKSwgX19taWQsIF9f
bGFzdCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIHJlc2VydmUoc2l6ZV90eXBlIF9fbikgewog
ICAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAgICAgIHVuc2lnbmVkIGludCogX19xID0g
X01fYml0X2FsbG9jKF9fbik7CiAgICAgICAgX01fZmluaXNoID0gY29weShiZWdpbigpLCBlbmQo
KSwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9N
X3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9f
cSArIChfX24gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgICAgfQogICAgfQoKICAg
IHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9CiAgICBjb25zdF9yZWZlcmVu
Y2UgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqYmVnaW4oKTsgfQogICAgcmVmZXJlbmNlIGJhY2so
KSB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29u
c3QgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAgICB2b2lkIHB1c2hfYmFjayhib29sIF9feCkg
ewogICAgICBpZiAoX01fZmluaXNoLl9NX3AgIT0gX01fZW5kX29mX3N0b3JhZ2UpCiAgICAgICAg
Kl9NX2ZpbmlzaCsrID0gX194OwogICAgICBlbHNlCiAgICAgICAgX01faW5zZXJ0X2F1eChlbmQo
KSwgX194KTsKICAgIH0KICAgIHZvaWQgc3dhcCh2ZWN0b3I8Ym9vbCwgX0FsbG9jPiYgX194KSB7
CiAgICAgIHN0ZDo6c3dhcChfTV9zdGFydCwgX194Ll9NX3N0YXJ0KTsKICAgICAgc3RkOjpzd2Fw
KF9NX2ZpbmlzaCwgX194Ll9NX2ZpbmlzaCk7CiAgICAgIHN0ZDo6c3dhcChfTV9lbmRfb2Zfc3Rv
cmFnZSwgX194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICAgIH0KICAgIGl0ZXJhdG9yIGluc2VydChp
dGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCA9IGJvb2woKSkgewogICAgICBkaWZmZXJlbmNl
X3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICAgIGlmIChfTV9maW5pc2guX01f
cCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKQogICAgICAgICpf
TV9maW5pc2grKyA9IF9feDsKICAgICAgZWxzZQogICAgICAgIF9NX2luc2VydF9hdXgoX19wb3Np
dGlvbiwgX194KTsKICAgICAgcmV0dXJuIGJlZ2luKCkgKyBfX247CiAgICB9CgoKCiAgICB0ZW1w
bGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRv
ciBfX3BvcywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX3RydWVfdHlwZSkgewogICAgICBfTV9maWxsX2luc2VydChfX3BvcywgX19uLCBf
X3gpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQg
X01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICAgIF9NX2luc2VydF9y
YW5nZShfX3BvcywgX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3Qp
KTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIGlu
c2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3Ig
X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICBf
TV9pbnNlcnRfZGlzcGF0Y2goX19wb3NpdGlvbiwgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwo
KSk7CiAgICB9CgogICAgdm9pZCBfTV9maWxsX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBz
aXplX3R5cGUgX19uLCBib29sIF9feCkgewogICAgICBpZiAoX19uID09IDApIHJldHVybjsKICAg
ICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19uKSB7CiAgICAgICAgY29weV9iYWNrd2Fy
ZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01fZmluaXNoICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwog
ICAgICAgIGZpbGwoX19wb3NpdGlvbiwgX19wb3NpdGlvbiArIGRpZmZlcmVuY2VfdHlwZShfX24p
LCBfX3gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgICAg
fQogICAgICBlbHNlIHsKICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkgKyBtYXgoc2l6
ZSgpLCBfX24pOwogICAgICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbGVu
KTsKICAgICAgICBpdGVyYXRvciBfX2kgPSBjb3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIGl0ZXJh
dG9yKF9fcSwgMCkpOwogICAgICAgIGZpbGxfbihfX2ksIF9fbiwgX194KTsKICAgICAgICBfTV9m
aW5pc2ggPSBjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kgKyBkaWZmZXJlbmNlX3R5cGUoX19u
KSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0g
X19xICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAgICAgX01fc3Rh
cnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgICB9CiAgICB9CgogICAgdm9pZCBpbnNlcnQoaXRl
cmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3gpIHsKICAgICAgX01fZmls
bF9pbnNlcnQoX19wb3NpdGlvbiwgX19uLCBfX3gpOwogICAgfQoKICAgIHZvaWQgcG9wX2JhY2so
KSB7IC0tX01fZmluaXNoOyB9CiAgICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9u
KSB7CiAgICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkKICAgICAgICBjb3B5KF9fcG9z
aXRpb24gKyAxLCBlbmQoKSwgX19wb3NpdGlvbik7CiAgICAgICAgLS1fTV9maW5pc2g7CiAgICAg
IHJldHVybiBfX3Bvc2l0aW9uOwogICAgfQogICAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19m
aXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19sYXN0LCBl
bmQoKSwgX19maXJzdCk7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQogICAgdm9pZCByZXNp
emUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIGJvb2wgX194ID0gYm9vbCgpKSB7CiAgICAgIGlmIChf
X25ld19zaXplIDwgc2l6ZSgpKQogICAgICAgIGVyYXNlKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5
cGUoX19uZXdfc2l6ZSksIGVuZCgpKTsKICAgICAgZWxzZQogICAgICAgIGluc2VydChlbmQoKSwg
X19uZXdfc2l6ZSAtIHNpemUoKSwgX194KTsKICAgIH0KICAgIHZvaWQgZmxpcCgpIHsKICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQqIF9fcCA9IF9NX3N0YXJ0Ll9NX3A7IF9fcCAhPSBfTV9lbmRfb2Zf
c3RvcmFnZTsgKytfX3ApCiAgICAgICAgKl9fcCA9IH4qX19wOwogICAgfQoKICAgIHZvaWQgY2xl
YXIoKSB7IGVyYXNlKGJlZ2luKCksIGVuZCgpKTsgfQogIH07CgoKdHlwZWRlZiB2ZWN0b3I8Ym9v
bCwgYWxsb2M+IGJpdF92ZWN0b3I7Cgp9CiMgMzkgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfdmVjdG9yLmgiIDIg
MwojIDMgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAv
aW5jbHVkZS9nKysvdmVjdG9yIiAyIDMKIyA2OCAiWGFsYW5Tb3VyY2VUcmVlL0Zvcm1hdHRlclRv
U291cmNlVHJlZS5ocHAiIDIKCgoKCiMgMSAiWE1MU3VwcG9ydC9Gb3JtYXR0ZXJMaXN0ZW5lci5o
cHAiIDEKIyA3MSAiWE1MU3VwcG9ydC9Gb3JtYXR0ZXJMaXN0ZW5lci5ocHAiCiMgMSAiWE1MU3Vw
cG9ydC9YTUxTdXBwb3J0RGVmaW5pdGlvbnMuaHBwIiAxCiMgNjIgIlhNTFN1cHBvcnQvWE1MU3Vw
cG9ydERlZmluaXRpb25zLmhwcCIKIyAxICJJbmNsdWRlL1BsYXRmb3JtRGVmaW5pdGlvbnMuaHBw
IiAxCiMgNjMgIlhNTFN1cHBvcnQvWE1MU3VwcG9ydERlZmluaXRpb25zLmhwcCIgMgojIDcyICJY
TUxTdXBwb3J0L0Zvcm1hdHRlckxpc3RlbmVyLmhwcCIgMgoKCgojIDEgIi93b3JrL3RvdC9may1k
ZXYvZ2NjMy90b29scy94ZXJjZXMvaW5jbHVkZS9zYXgvRG9jdW1lbnRIYW5kbGVyLmhwcCIgMQoj
IDg4ICIvd29yay90b3QvZmstZGV2L2djYzMvdG9vbHMveGVyY2VzL2luY2x1ZGUvc2F4L0RvY3Vt
ZW50SGFuZGxlci5ocHAiCiMgMSAiL3dvcmsvdG90L2ZrLWRldi9nY2MzL3Rvb2xzL3hlcmNlcy9p
bmNsdWRlL3V0aWwvWGVyY2VzRGVmcy5ocHAiIDEKIyAxNTQgIi93b3JrL3RvdC9may1kZXYvZ2Nj
My90b29scy94ZXJjZXMvaW5jbHVkZS91dGlsL1hlcmNlc0RlZnMuaHBwIgpjb25zdCBjaGFyKiBj
b25zdCBnWGVyY2VzVmVyc2lvblN0ciA9ICIxXzQiOwpjb25zdCBjaGFyKiBjb25zdCBnWGVyY2Vz
RnVsbFZlcnNpb25TdHIgPSAiMV80XzAiOwpjb25zdCB1bnNpZ25lZCBpbnQgZ1hlcmNlc01halZl
cnNpb24gPSAxOwpjb25zdCB1bnNpZ25lZCBpbnQgZ1hlcmNlc01pblZlcnNpb24gPSA0Owpjb25z
dCB1bnNpZ25lZCBpbnQgZ1hlcmNlc1JldmlzaW9uID0gMDsKCgoKCgoKIyAxICIvd29yay90b3Qv
ZmstZGV2L2djYzMvdG9vbHMveGVyY2VzL2luY2x1ZGUvdXRpbC9BdXRvU2Vuc2UuaHBwIiAxCiMg
MTY2ICIvd29yay90b3QvZmstZGV2L2djYzMvdG9vbHMveGVyY2VzL2luY2x1ZGUvdXRpbC9YZXJj
ZXNEZWZzLmhwcCIgMgojIDIwMiAiL3dvcmsvdG90L2ZrLWRldi9nY2MzL3Rvb2xzL3hlcmNlcy9p
bmNsdWRlL3V0aWwvWGVyY2VzRGVmcy5ocHAiCiMgMSAiL3dvcmsvdG90L2ZrLWRldi9nY2MzL3Rv
b2xzL3hlcmNlcy9pbmNsdWRlL3V0aWwvUGxhdGZvcm1zL0xpbnV4L0xpbnV4RGVmcy5ocHAiIDEK
IyA4MCAiL3dvcmsvdG90L2ZrLWRldi9nY2MzL3Rvb2xzL3hlcmNlcy9pbmNsdWRlL3V0aWwvUGxh
dGZvcm1zL0xpbnV4L0xpbnV4RGVmcy5ocHAiCnR5cGVkZWYgdm9pZCogRmlsZUhhbmRsZTsKIyAy
MDMgIi93b3JrL3RvdC9may1kZXYvZ2NjMy90b29scy94ZXJjZXMvaW5jbHVkZS91dGlsL1hlcmNl
c0RlZnMuaHBwIiAyCiMgMjcyICIvd29yay90b3QvZmstZGV2L2djYzMvdG9vbHMveGVyY2VzL2lu
Y2x1ZGUvdXRpbC9YZXJjZXNEZWZzLmhwcCIKIyAxICIvd29yay90b3QvZmstZGV2L2djYzMvdG9v
bHMveGVyY2VzL2luY2x1ZGUvdXRpbC9Db21waWxlcnMvR0NDRGVmcy5ocHAiIDEKIyAxMjEgIi93
b3JrL3RvdC9may1kZXYvZ2NjMy90b29scy94ZXJjZXMvaW5jbHVkZS91dGlsL0NvbXBpbGVycy9H
Q0NEZWZzLmhwcCIKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBYTUxDaDsKCgoKCnR5cGVkZWYgdW5z
aWduZWQgc2hvcnQgWE1MVUludDE2Owp0eXBlZGVmIHVuc2lnbmVkIGludCBYTUxVSW50MzI7CiMg
MTQwICIvd29yay90b3QvZmstZGV2L2djYzMvdG9vbHMveGVyY2VzL2luY2x1ZGUvdXRpbC9Db21w
aWxlcnMvR0NDRGVmcy5ocHAiCmlubGluZSBjaGFyIHRvdXBwZXIoY29uc3QgY2hhciB0b1VwcGVy
KQp7CiAgICBpZiAoKHRvVXBwZXIgPj0gJ2EnKSAmJiAodG9VcHBlciA8PSAneicpKQogICAgICAg
IHJldHVybiBjaGFyKHRvVXBwZXIgLSAweDIwKTsKICAgIHJldHVybiB0b1VwcGVyOwp9Cgppbmxp
bmUgY2hhciB0b2xvd2VyKGNvbnN0IGNoYXIgdG9Mb3dlcikKewogICAgaWYgKCh0b0xvd2VyID49
ICdBJykgJiYgKHRvTG93ZXIgPD0gJ1onKSkKICAgICAgICByZXR1cm4gY2hhcih0b0xvd2VyICsg
MHgyMCk7CiAgICByZXR1cm4gdG9Mb3dlcjsKfQoKaW50IHN0cmljbXAoY29uc3QgY2hhciogY29u
c3Qgc3RyMSwgY29uc3QgY2hhciogY29uc3Qgc3RyMik7CmludCBzdHJuaWNtcChjb25zdCBjaGFy
KiBjb25zdCBzdHIxLCBjb25zdCBjaGFyKiBjb25zdCBzdHIyLCBjb25zdCB1bnNpZ25lZCBpbnQg
Y291bnQpOwoKCgoKCgpjb25zdCBjaGFyKiBjb25zdCBYZXJjZXNfRExMTmFtZSA9ICJsaWJ4ZXJj
ZXMtYyI7CiMgMjczICIvd29yay90b3QvZmstZGV2L2djYzMvdG9vbHMveGVyY2VzL2luY2x1ZGUv
dXRpbC9YZXJjZXNEZWZzLmhwcCIgMgojIDMxMyAiL3dvcmsvdG90L2ZrLWRldi9nY2MzL3Rvb2xz
L3hlcmNlcy9pbmNsdWRlL3V0aWwvWGVyY2VzRGVmcy5ocHAiCnR5cGVkZWYgdW5zaWduZWQgY2hh
ciBYTUxCeXRlOwp0eXBlZGVmIFhNTFVJbnQxNiBVVEYxNkNoOwp0eXBlZGVmIFhNTFVJbnQzMiBV
Q1M0Q2g7CiMgODkgIi93b3JrL3RvdC9may1kZXYvZ2NjMy90b29scy94ZXJjZXMvaW5jbHVkZS9z
YXgvRG9jdW1lbnRIYW5kbGVyLmhwcCIgMgoKY2xhc3MgQXR0cmlidXRlTGlzdDsKY2xhc3MgTG9j
YXRvcjsKIyAxMjEgIi93b3JrL3RvdC9may1kZXYvZ2NjMy90b29scy94ZXJjZXMvaW5jbHVkZS9z
YXgvRG9jdW1lbnRIYW5kbGVyLmhwcCIKY2xhc3MgRG9jdW1lbnRIYW5kbGVyCnsKcHVibGljOgoK
CgogICAgRG9jdW1lbnRIYW5kbGVyKCkKICAgIHsKICAgIH0KCgogICAgdmlydHVhbCB+RG9jdW1l
bnRIYW5kbGVyKCkKICAgIHsKICAgIH0KIyAxNjQgIi93b3JrL3RvdC9may1kZXYvZ2NjMy90b29s
cy94ZXJjZXMvaW5jbHVkZS9zYXgvRG9jdW1lbnRIYW5kbGVyLmhwcCIKICAgIHZpcnR1YWwgdm9p
ZCBjaGFyYWN0ZXJzCiAgICAoCiAgICAgICAgY29uc3QgWE1MQ2gqIGNvbnN0IGNoYXJzCiAgICAg
ICAgLCBjb25zdCB1bnNpZ25lZCBpbnQgbGVuZ3RoCiAgICApID0gMDsKIyAxODIgIi93b3JrL3Rv
dC9may1kZXYvZ2NjMy90b29scy94ZXJjZXMvaW5jbHVkZS9zYXgvRG9jdW1lbnRIYW5kbGVyLmhw
cCIKICAgIHZpcnR1YWwgdm9pZCBlbmREb2N1bWVudCAoKSA9IDA7CiMgMTk5ICIvd29yay90b3Qv
ZmstZGV2L2djYzMvdG9vbHMveGVyY2VzL2luY2x1ZGUvc2F4L0RvY3VtZW50SGFuZGxlci5ocHAi
CiAgICB2aXJ0dWFsIHZvaWQgZW5kRWxlbWVudChjb25zdCBYTUxDaCogY29uc3QgbmFtZSkgPSAw
OwojIDIyNCAiL3dvcmsvdG90L2ZrLWRldi9nY2MzL3Rvb2xzL3hlcmNlcy9pbmNsdWRlL3NheC9E
b2N1bWVudEhhbmRsZXIuaHBwIgogICAgdmlydHVhbCB2b2lkIGlnbm9yYWJsZVdoaXRlc3BhY2UK
ICAgICgKICAgICAgICBjb25zdCBYTUxDaCogY29uc3QgY2hhcnMKICAgICAgICAsIGNvbnN0IHVu
c2lnbmVkIGludCBsZW5ndGgKICAgICkgPSAwOwojIDI0NyAiL3dvcmsvdG90L2ZrLWRldi9nY2Mz
L3Rvb2xzL3hlcmNlcy9pbmNsdWRlL3NheC9Eb2N1bWVudEhhbmRsZXIuaHBwIgogICAgdmlydHVh
bCB2b2lkIHByb2Nlc3NpbmdJbnN0cnVjdGlvbgogICAgKAogICAgICAgIGNvbnN0IFhNTENoKiBj
b25zdCB0YXJnZXQKICAgICAgICAsIGNvbnN0IFhNTENoKiBjb25zdCBkYXRhCiAgICApID0gMDsK
IyAyNjAgIi93b3JrL3RvdC9may1kZXYvZ2NjMy90b29scy94ZXJjZXMvaW5jbHVkZS9zYXgvRG9j
dW1lbnRIYW5kbGVyLmhwcCIKICAgIHZpcnR1YWwgdm9pZCByZXNldERvY3VtZW50KCkgPSAwOwoj
IDI5MCAiL3dvcmsvdG90L2ZrLWRldi9nY2MzL3Rvb2xzL3hlcmNlcy9pbmNsdWRlL3NheC9Eb2N1
bWVudEhhbmRsZXIuaHBwIgogICAgdmlydHVhbCB2b2lkIHNldERvY3VtZW50TG9jYXRvcihjb25z
dCBMb2NhdG9yKiBjb25zdCBsb2NhdG9yKSA9IDA7CiMgMzAyICIvd29yay90b3QvZmstZGV2L2dj
YzMvdG9vbHMveGVyY2VzL2luY2x1ZGUvc2F4L0RvY3VtZW50SGFuZGxlci5ocHAiCiAgICB2aXJ0
dWFsIHZvaWQgc3RhcnREb2N1bWVudCgpID0gMDsKIyAzMjYgIi93b3JrL3RvdC9may1kZXYvZ2Nj
My90b29scy94ZXJjZXMvaW5jbHVkZS9zYXgvRG9jdW1lbnRIYW5kbGVyLmhwcCIKICAgIHZpcnR1
YWwgdm9pZCBzdGFydEVsZW1lbnQKICAgICgKICAgICAgICBjb25zdCBYTUxDaCogY29uc3QgbmFt
ZQogICAgICAgICwgQXR0cmlidXRlTGlzdCYgYXR0cnMKICAgICkgPSAwOwoKCgpwcml2YXRlIDoK
CgogICAgRG9jdW1lbnRIYW5kbGVyKGNvbnN0IERvY3VtZW50SGFuZGxlciYpOwoKICAgIHZvaWQg
b3BlcmF0b3I9KGNvbnN0IERvY3VtZW50SGFuZGxlciYpOwp9OwojIDc2ICJYTUxTdXBwb3J0L0Zv
cm1hdHRlckxpc3RlbmVyLmhwcCIgMgoKCgojIDEgIlhhbGFuRE9NL1hhbGFuRE9NU3RyaW5nLmhw
cCIgMQojIDYyICJYYWxhbkRPTS9YYWxhbkRPTVN0cmluZy5ocHAiCiMgMSAiWGFsYW5ET00vWGFs
YW5ET01EZWZpbml0aW9ucy5ocHAiIDEKCgoKCgojIDEgIkluY2x1ZGUvUGxhdGZvcm1EZWZpbml0
aW9ucy5ocHAiIDEKIyA3ICJYYWxhbkRPTS9YYWxhbkRPTURlZmluaXRpb25zLmhwcCIgMgojIDYz
ICJYYWxhbkRPTS9YYWxhbkRPTVN0cmluZy5ocHAiIDIKCgoKIyAxICIvdXNyL2xvY2FsL2djYzMv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL3ZlY3RvciIgMSAz
CiMgNjcgIlhhbGFuRE9NL1hhbGFuRE9NU3RyaW5nLmhwcCIgMgoKCgoKdHlwZWRlZiB1bnNpZ25l
ZCBzaG9ydCBYYWxhbkRPTUNoYXI7CgoKCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvY2Fzc2VydCIgMSAzCgojIDEg
Ii91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk
ZS9nKysvYml0cy9zdGRfY2Fzc2VydC5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jYXNzZXJ0
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUv
YXNzZXJ0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMzYgIi91c3Iv
aW5jbHVkZS9hc3NlcnQuaCIgMiAzCiMgNTggIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwpleHRl
cm4gIkMiIHsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNz
ZXJ0aW9uLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwgdW5zaWduZWQgaW50IF9fbGluZSwgX19jb25z
dCBjaGFyICpfX2Z1bmN0aW9uKSB0aHJvdyAoKQoKCgogICAgIF9fYXR0cmlidXRlX18gKChfX25v
cmV0dXJuX18pKTsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50IF9fZXJy
bnVtLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwgdW5zaWduZWQgaW50IF9fbGluZSwgX19jb25zdCBj
aGFyICpfX2Z1bmN0aW9uKSB0aHJvdyAoKQoKCgogICAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0
dXJuX18pKTsKCn0KIyAzOCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jYXNzZXJ0LmgiIDIgMwojIDMgIi91c3Iv
bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysv
Y2Fzc2VydCIgMiAzCiMgODAgIlhhbGFuRE9NL1hhbGFuRE9NU3RyaW5nLmhwcCIgMgoKCgpjbGFz
cyBYYWxhbkRPTVN0cmluZwp7CnB1YmxpYzoKCgoKCgoKICAgICAgICB0eXBlZGVmIHN0ZDo6dmVj
dG9yPFhhbGFuRE9NQ2hhcj4gWGFsYW5ET01DaGFyVmVjdG9yVHlwZTsKICAgICAgICB0eXBlZGVm
IHN0ZDo6dmVjdG9yPGNoYXI+IENoYXJWZWN0b3JUeXBlOwogICAgICAgIHR5cGVkZWYgc3RkOjp2
ZWN0b3I8d2NoYXJfdD4gV2lkZUNoYXJWZWN0b3JUeXBlOwoKCiAgICAgICAgdHlwZWRlZiBYYWxh
bkRPTUNoYXIgdmFsdWVfdHlwZTsKICAgICAgICB0eXBlZGVmIFhhbGFuRE9NQ2hhciYgcmVmZXJl
bmNlOwogICAgICAgIHR5cGVkZWYgY29uc3QgWGFsYW5ET01DaGFyJiBjb25zdF9yZWZlcmVuY2U7
CgogICAgICAgIHR5cGVkZWYgWGFsYW5ET01DaGFyVmVjdG9yVHlwZTo6c2l6ZV90eXBlIHNpemVf
dHlwZTsKCiAgICAgICAgdHlwZWRlZiBYYWxhbkRPTUNoYXJWZWN0b3JUeXBlOjppdGVyYXRvciBp
dGVyYXRvcjsKICAgICAgICB0eXBlZGVmIFhhbGFuRE9NQ2hhclZlY3RvclR5cGU6OmNvbnN0X2l0
ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogICAgICAgIHR5cGVkZWYgWGFsYW5ET01DaGFyVmVjdG9y
VHlwZTo6cmV2ZXJzZV9pdGVyYXRvciByZXZlcnNlX2l0ZXJhdG9yOwogICAgICAgIHR5cGVkZWYg
WGFsYW5ET01DaGFyVmVjdG9yVHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yOwoKICAgICAgICBlbnVtIHsgbnBvcyA9IC0xIH07CgogICAgICAgIGV4cGxp
Y2l0CiAgICAgICAgWGFsYW5ET01TdHJpbmcoKTsKCiAgICAgICAgZXhwbGljaXQKICAgICAgICBY
YWxhbkRPTVN0cmluZygKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdGhlU3Ry
aW5nLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlQ291bnQgPSBzaXplX3R5
cGUobnBvcykpOwoKICAgICAgICBYYWxhbkRPTVN0cmluZygKICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90eXBlIHRoZVN0YXJ0UG9zaXRpb24gPSAwLAogICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3R5cGUgdGhlQ291bnQgPSBzaXplX3R5cGUobnBvcykpOwoKICAgICAgICBleHBsaWNp
dAogICAgICAgIFhhbGFuRE9NU3RyaW5nKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBY
YWxhbkRPTUNoYXIqIHRoZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBl
IHRoZUNvdW50ID0gc2l6ZV90eXBlKG5wb3MpKTsKCiAgICAgICAgWGFsYW5ET01TdHJpbmcoCiAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSB0aGVDb3VudCwKICAgICAgICAgICAgICAg
ICAgICAgICAgWGFsYW5ET01DaGFyIHRoZUNoYXIpOwoKICAgICAgICB+WGFsYW5ET01TdHJpbmco
KQogICAgICAgIHsKICAgICAgICB9CgogICAgICAgIFhhbGFuRE9NU3RyaW5nJgogICAgICAgIG9w
ZXJhdG9yPShjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlUkhTKQogICAgICAgIHsKICAgICAgICAg
ICAgICAgIGlmICgmdGhlUkhTICE9IHRoaXMpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZGF0YSA9IHRoZVJIUy5tX2RhdGE7CgoKCgogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4g
KnRoaXM7CiAgICAgICAgfQoKICAgICAgICBYYWxhbkRPTVN0cmluZyYKICAgICAgICBvcGVyYXRv
cj0oY29uc3QgWGFsYW5ET01DaGFyKiB0aGVSSFMpOwoKICAgICAgICBYYWxhbkRPTVN0cmluZyYK
ICAgICAgICBvcGVyYXRvcj0oWGFsYW5ET01DaGFyIHRoZVJIUykKICAgICAgICB7CiAgICAgICAg
ICAgICAgICBtX2RhdGEucmVzaXplKDIpOwoKICAgICAgICAgICAgICAgIG1fZGF0YVswXSA9IHRo
ZVJIUzsKICAgICAgICAgICAgICAgIG1fZGF0YVsxXSA9IFhhbGFuRE9NQ2hhcigwKTsKCgoKCgog
ICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwoKICAgICAgICAgICAgICAgIHJldHVybiAqdGhp
czsKICAgICAgICB9CgogICAgICAgIGl0ZXJhdG9yCiAgICAgICAgYmVnaW4oKQogICAgICAgIHsK
ICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gbV9k
YXRhLmJlZ2luKCk7CiAgICAgICAgfQoKICAgICAgICBjb25zdF9pdGVyYXRvcgogICAgICAgIGJl
Z2luKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnZhcmlhbnRzKCk7CgogICAg
ICAgICAgICAgICAgcmV0dXJuIG1fZGF0YS5iZWdpbigpOwogICAgICAgIH0KCiAgICAgICAgcmV2
ZXJzZV9pdGVyYXRvcgogICAgICAgIHJiZWdpbigpCiAgICAgICAgewogICAgICAgICAgICAgICAg
aW52YXJpYW50cygpOwoKICAgICAgICAgICAgICAgIHJldHVybiBtX2RhdGEucmJlZ2luKCk7CiAg
ICAgICAgfQoKICAgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAgICAgICAgcmJlZ2luKCkg
Y29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnZhcmlhbnRzKCk7CgogICAgICAgICAg
ICAgICAgcmV0dXJuIG1fZGF0YS5yYmVnaW4oKTsKICAgICAgICB9CgogICAgICAgIHNpemVfdHlw
ZQogICAgICAgIHNpemUoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgICAgIGludmFyaWFu
dHMoKTsKCgoKCiAgICAgICAgICAgICAgICByZXR1cm4gbV9kYXRhLmVtcHR5KCkgPT0gdHJ1ZSA/
IDAgOiBtX2RhdGEuc2l6ZSgpIC0gMTsKCiAgICAgICAgfQoKICAgICAgICBzaXplX3R5cGUKICAg
ICAgICBsZW5ndGgoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgICAgIGludmFyaWFudHMo
KTsKCiAgICAgICAgICAgICAgICByZXR1cm4gc2l6ZSgpOwogICAgICAgIH0KCiAgICAgICAgc2l6
ZV90eXBlCiAgICAgICAgbWF4X3NpemUoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgICAg
IGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gc2l6ZV90eXBlKH4wKTsKICAg
ICAgICB9CgogICAgICAgIHZvaWQKICAgICAgICByZXNpemUoCiAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdHlwZSB0aGVDb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5ET01D
aGFyIHRoZUNoYXIpCiAgICAgICAgewogICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwoKICAg
ICAgICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSB0aGVPbGRTaXplID0gc2l6ZSgpOwoKICAgICAg
ICAgICAgICAgIGlmICh0aGVPbGRTaXplID09IDApCiAgICAgICAgICAgICAgICB7CgoKICAgICAg
ICAgICAgICAgICAgICAgICAgbV9kYXRhLnJlc2l6ZSh0aGVDb3VudCArIDEsIHRoZUNoYXIpOwog
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewoK
CgogICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGEucmVzaXplKHRoZUNvdW50LCB0aGVDaGFy
KTsKCiAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YVt0aGVPbGRTaXplXSA9IHRoZUNoYXI7
CiAgICAgICAgICAgICAgICB9CgoKCgoKCiAgICAgICAgICAgICAgICBtX2RhdGEuYmFjaygpID0g
MDsKCiAgICAgICAgICAgICAgICBpbnZhcmlhbnRzKCk7CiAgICAgICAgfQoKICAgICAgICB2b2lk
CiAgICAgICAgcmVzaXplKHNpemVfdHlwZSB0aGVDb3VudCkKICAgICAgICB7CiAgICAgICAgICAg
ICAgICBpbnZhcmlhbnRzKCk7CgogICAgICAgICAgICAgICAgcmVzaXplKHRoZUNvdW50LCBYYWxh
bkRPTUNoYXIoMCkpOwogICAgICAgIH0KCiAgICAgICAgc2l6ZV90eXBlCiAgICAgICAgY2FwYWNp
dHkoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsKCiAgICAg
ICAgICAgICAgICByZXR1cm4gbV9kYXRhLmNhcGFjaXR5KCkgLSAxOwogICAgICAgIH0KCiAgICAg
ICAgdm9pZAogICAgICAgIHJlc2VydmUoc2l6ZV90eXBlIHRoZUNvdW50ID0gMCkKICAgICAgICB7
CiAgICAgICAgICAgICAgICBpbnZhcmlhbnRzKCk7CgogICAgICAgICAgICAgICAgbV9kYXRhLnJl
c2VydmUodGhlQ291bnQgKyAxKTsKICAgICAgICB9CgogICAgICAgIHZvaWQKICAgICAgICBjbGVh
cigpCiAgICAgICAgewogICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwoKICAgICAgICAgICAg
ICAgIG1fZGF0YS5lcmFzZShtX2RhdGEuYmVnaW4oKSwgbV9kYXRhLmVuZCgpKTsKCgoKCgogICAg
ICAgICAgICAgICAgaW52YXJpYW50cygpOwogICAgICAgIH0KCiAgICAgICAgdm9pZAogICAgICAg
IGVyYXNlKAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlU3RhcnRQb3NpdGlv
biA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSB0aGVDb3VudCA9IHNpemVf
dHlwZShucG9zKSkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnZhcmlhbnRzKCk7CgogICAg
ICAgICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIHRoZUFjdHVhbENvdW50ID0KICAgICAgICAgICAg
ICAgICAgICAgICAgdGhlQ291bnQgPT0gc2l6ZV90eXBlKG5wb3MpID8gbGVuZ3RoKCkgOiB0aGVD
b3VudDsKCiAgICAgICAgICAgICAgICBpZiAodGhlU3RhcnRQb3NpdGlvbiA9PSAwICYmIHRoZUNv
dW50ID09IHNpemUoKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
bV9kYXRhLmVyYXNlKG1fZGF0YS5iZWdpbigpLCBtX2RhdGEuZW5kKCkpOwoKCgoKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgaXRlcmF0b3IgaSA9IGdldEl0ZXJhdG9yRm9yUG9zaXRpb24o
dGhlU3RhcnRQb3NpdGlvbik7CgogICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGEuZXJhc2Uo
aSwgaSArICh0aGVBY3R1YWxDb3VudCkpOwoKCgoKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICBpbnZhcmlhbnRzKCk7CiAgICAgICAgfQoKICAgICAgICBib29sCiAgICAgICAgZW1w
dHkoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsKCiAgICAg
ICAgICAgICAgICByZXR1cm4gbV9kYXRhLnNpemUoKSA8IDIgPyB0cnVlIDogZmFsc2U7CiAgICAg
ICAgfQoKICAgICAgICBjb25zdF9yZWZlcmVuY2UKICAgICAgICBvcGVyYXRvcltdKHNpemVfdHlw
ZSB0aGVJbmRleCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnZhcmlhbnRzKCk7
CgogICAgICAgICAgICAgICAgcmV0dXJuIG1fZGF0YVt0aGVJbmRleF07CiAgICAgICAgfQoKICAg
ICAgICByZWZlcmVuY2UKICAgICAgICBvcGVyYXRvcltdKHNpemVfdHlwZSB0aGVJbmRleCkKICAg
ICAgICB7CiAgICAgICAgICAgICAgICBpbnZhcmlhbnRzKCk7CgogICAgICAgICAgICAgICAgcmV0
dXJuIG1fZGF0YVt0aGVJbmRleF07CiAgICAgICAgfQojIDM4MiAiWGFsYW5ET00vWGFsYW5ET01T
dHJpbmcuaHBwIgogICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhcioKICAgICAgICBjX3N0cigpIGNv
bnN0CiAgICAgICAgewogICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwoKCgoKCiAgICAgICAg
ICAgICAgICByZXR1cm4gbV9kYXRhLnNpemUoKSA9PSAwID8gJnNfZW1wdHkgOiAmbV9kYXRhWzBd
OwogICAgICAgIH0KCiAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKgogICAgICAgIGRhdGEoKSBj
b25zdAogICAgICAgIHsKICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAg
ICAgICByZXR1cm4gY19zdHIoKTsKICAgICAgICB9CgogICAgICAgIHZvaWQKICAgICAgICBzd2Fw
KFhhbGFuRE9NU3RyaW5nJiB0aGVPdGhlcikKICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnZh
cmlhbnRzKCk7CgogICAgICAgICAgICAgICAgbV9kYXRhLnN3YXAodGhlT3RoZXIubV9kYXRhKTsK
IyA0MTYgIlhhbGFuRE9NL1hhbGFuRE9NU3RyaW5nLmhwcCIKICAgICAgICB9CgogICAgICAgIFhh
bGFuRE9NU3RyaW5nJgogICAgICAgIG9wZXJhdG9yKz0oY29uc3QgWGFsYW5ET01TdHJpbmcmIHRo
ZVNvdXJjZSkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnZhcmlhbnRzKCk7CgogICAgICAg
ICAgICAgICAgcmV0dXJuIGFwcGVuZCh0aGVTb3VyY2UpOwogICAgICAgIH0KCiAgICAgICAgWGFs
YW5ET01TdHJpbmcmCiAgICAgICAgb3BlcmF0b3IrPShjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0
cmluZykKICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnZhcmlhbnRzKCk7CgogICAgICAgICAg
ICAgICAgcmV0dXJuIGFwcGVuZCh0aGVTdHJpbmcpOwogICAgICAgIH0KCiAgICAgICAgWGFsYW5E
T01TdHJpbmcmCiAgICAgICAgb3BlcmF0b3IrPShYYWxhbkRPTUNoYXIgdGhlQ2hhcikKICAgICAg
ICB7CiAgICAgICAgICAgICAgICBpbnZhcmlhbnRzKCk7CgogICAgICAgICAgICAgICAgYXBwZW5k
KDEsIHRoZUNoYXIpOwoKICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9Cgog
ICAgICAgIFhhbGFuRE9NU3RyaW5nJgogICAgICAgIGFzc2lnbihjb25zdCBYYWxhbkRPTUNoYXIq
IHRoZVNvdXJjZSkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnZhcmlhbnRzKCk7CgogICAg
ICAgICAgICAgICAgZXJhc2UoKTsKCiAgICAgICAgICAgICAgICBpbnZhcmlhbnRzKCk7CgogICAg
ICAgICAgICAgICAgcmV0dXJuIGFwcGVuZCh0aGVTb3VyY2UpOwoKICAgICAgICAgICAgICAgIGlu
dmFyaWFudHMoKTsKICAgICAgICB9CgogICAgICAgIFhhbGFuRE9NU3RyaW5nJgogICAgICAgIGFz
c2lnbigKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVTb3Vy
Y2UsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSB0aGVDb3VudCkKICAgICAgICB7
CiAgICAgICAgICAgICAgICBpbnZhcmlhbnRzKCk7CgogICAgICAgICAgICAgICAgZXJhc2UoKTsK
CiAgICAgICAgICAgICAgICBpbnZhcmlhbnRzKCk7CgogICAgICAgICAgICAgICAgcmV0dXJuIGFw
cGVuZCh0aGVTb3VyY2UsIHRoZUNvdW50KTsKICAgICAgICB9CgogICAgICAgIFhhbGFuRE9NU3Ry
aW5nJgogICAgICAgIGFzc2lnbigKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5E
T01TdHJpbmcmIHRoZVNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIHRo
ZVBvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlQ291bnQpCiAg
ICAgICAgewogICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwoKICAgICAgICAgICAgICAgIGVy
YXNlKCk7CgogICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwoKICAgICAgICAgICAgICAgIHJl
dHVybiBhcHBlbmQodGhlU291cmNlLCB0aGVQb3NpdGlvbiwgdGhlQ291bnQpOwogICAgICAgIH0K
CiAgICAgICAgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgYXNzaWduKGNvbnN0IFhhbGFuRE9NU3Ry
aW5nJiB0aGVTb3VyY2UpCiAgICAgICAgewogICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwoK
ICAgICAgICAgICAgICAgIG1fZGF0YSA9IHRoZVNvdXJjZS5tX2RhdGE7CgogICAgICAgICAgICAg
ICAgaW52YXJpYW50cygpOwoKICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9
CgogICAgICAgIFhhbGFuRE9NU3RyaW5nJgogICAgICAgIGFzc2lnbigKICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90eXBlIHRoZUNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICBYYWxh
bkRPTUNoYXIgdGhlQ2hhcikKICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnZhcmlhbnRzKCk7
CgogICAgICAgICAgICAgICAgZXJhc2UoKTsKCiAgICAgICAgICAgICAgICBpbnZhcmlhbnRzKCk7
CgogICAgICAgICAgICAgICAgcmV0dXJuIGFwcGVuZCh0aGVDb3VudCwgdGhlQ2hhcik7CiAgICAg
ICAgfQoKICAgICAgICBYYWxhbkRPTVN0cmluZyYKICAgICAgICBhc3NpZ24oCiAgICAgICAgICAg
ICAgICBjb25zdF9pdGVyYXRvciB0aGVGaXJzdFBvc2l0aW9uLAogICAgICAgICAgICAgICAgY29u
c3RfaXRlcmF0b3IgdGhlTGFzdFBvc2l0aW9uKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGlu
dmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICBlcmFzZSgpOwoKICAgICAgICAgICAgICAgIGlu
dmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICBpbnNlcnQoYmVnaW4oKSwgdGhlRmlyc3RQb3Np
dGlvbiwgdGhlTGFzdFBvc2l0aW9uKTsKCiAgICAgICAgICAgICAgICBpbnZhcmlhbnRzKCk7Cgog
ICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KCiAgICAgICAgWGFsYW5ET01T
dHJpbmcmCiAgICAgICAgYXBwZW5kKGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVTb3VyY2UpCiAg
ICAgICAgewogICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwoKICAgICAgICAgICAgICAgIHJl
dHVybiBhcHBlbmQodGhlU291cmNlLmNfc3RyKCksIHRoZVNvdXJjZS5sZW5ndGgoKSk7CiAgICAg
ICAgfQoKICAgICAgICBYYWxhbkRPTVN0cmluZyYKICAgICAgICBhcHBlbmQoCiAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVTb3VyY2UsCiAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdHlwZSB0aGVQb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90eXBlIHRoZUNvdW50KQogICAgICAgIHsKICAgICAgICAgICAgICAgIGludmFyaWFu
dHMoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gYXBwZW5kKHRoZVNvdXJjZS5jX3N0cigpICsg
dGhlUG9zaXRpb24sIHRoZUNvdW50KTsKICAgICAgICB9CgogICAgICAgIFhhbGFuRE9NU3RyaW5n
JgogICAgICAgIGFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01D
aGFyKiB0aGVTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSB0aGVDb3Vu
dCk7CgogICAgICAgIFhhbGFuRE9NU3RyaW5nJgogICAgICAgIGFwcGVuZChjb25zdCBYYWxhbkRP
TUNoYXIqIHRoZVN0cmluZykKICAgICAgICB7CiAgICAgICAgICAgICAgICAoKHZvaWQpICgodGhl
U3RyaW5nICE9IDApID8gMCA6IChfX2Fzc2VydF9mYWlsICgidGhlU3RyaW5nICE9IDAiLCAiWGFs
YW5ET00vWGFsYW5ET01TdHJpbmcuaHBwIiwgNTU4LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkp
KTsKCiAgICAgICAgICAgICAgICBpbnZhcmlhbnRzKCk7CgogICAgICAgICAgICAgICAgcmV0dXJu
IGFwcGVuZCh0aGVTdHJpbmcsIGxlbmd0aCh0aGVTdHJpbmcpKTsKICAgICAgICB9CgogICAgICAg
IFhhbGFuRE9NU3RyaW5nJgogICAgICAgIGFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90eXBlIHRoZUNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhbkRPTUNoYXIg
dGhlQ2hhcik7CgogICAgICAgIHZvaWQKICAgICAgICBwdXNoX2JhY2soWGFsYW5ET01DaGFyIHRo
ZUNoYXIpCiAgICAgICAgewogICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwoKICAgICAgICAg
ICAgICAgIGFwcGVuZCgxLCB0aGVDaGFyKTsKCiAgICAgICAgICAgICAgICBpbnZhcmlhbnRzKCk7
CiAgICAgICAgfQoKICAgICAgICBYYWxhbkRPTVN0cmluZyYKICAgICAgICBpbnNlcnQoCiAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSB0aGVQb3NpdGlvbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVN0cmluZykKICAgICAgICB7CiAgICAg
ICAgICAgICAgICBpbnZhcmlhbnRzKCk7CgogICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydCh0
aGVQb3NpdGlvbiwgdGhlU3RyaW5nLmNfc3RyKCksIHRoZVN0cmluZy5sZW5ndGgoKSk7CiAgICAg
ICAgfQoKICAgICAgICBYYWxhbkRPTVN0cmluZyYKICAgICAgICBpbnNlcnQoCiAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdHlwZSB0aGVQb3NpdGlvbjEsCiAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdHlwZSB0aGVQb3NpdGlvbjIsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dHlwZSB0aGVDb3VudCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnZhcmlhbnRzKCk7Cgog
ICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydCh0aGVQb3NpdGlvbjEsIHRoZVN0cmluZy5jX3N0
cigpICsgdGhlUG9zaXRpb24yLCB0aGVDb3VudCk7CiAgICAgICAgfQoKICAgICAgICBYYWxhbkRP
TVN0cmluZyYKICAgICAgICBpbnNlcnQoCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlw
ZSB0aGVQb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFy
KiB0aGVTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSB0aGVDb3VudCk7
CgogICAgICAgIFhhbGFuRE9NU3RyaW5nJgogICAgICAgIGluc2VydCgKICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90eXBlIHRoZVBvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZykKICAgICAgICB7CiAgICAgICAgICAgICAgICBp
bnZhcmlhbnRzKCk7CgogICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydCh0aGVQb3NpdGlvbiwg
dGhlU3RyaW5nLCBsZW5ndGgodGhlU3RyaW5nKSk7CiAgICAgICAgfQoKICAgICAgICBYYWxhbkRP
TVN0cmluZyYKICAgICAgICBpbnNlcnQoCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlw
ZSB0aGVQb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIHRoZUNvdW50
LAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhbkRPTUNoYXIgdGhlQ2hhcik7CgogICAgICAg
IGl0ZXJhdG9yCiAgICAgICAgaW5zZXJ0KAogICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRv
ciB0aGVQb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5ET01DaGFyIHRoZUNo
YXIpOwoKICAgICAgICB2b2lkCiAgICAgICAgaW5zZXJ0KAogICAgICAgICAgICAgICAgICAgICAg
ICBpdGVyYXRvciB0aGVQb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBl
IHRoZUNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhbkRPTUNoYXIgdGhlQ2hhcik7
CgogICAgICAgIHZvaWQKICAgICAgICBpbnNlcnQoCiAgICAgICAgICAgICAgICBpdGVyYXRvciB0
aGVJbnNlcnRQb3NpdGlvbiwKICAgICAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIHRoZUZpcnN0
UG9zaXRpb24sCiAgICAgICAgICAgICAgICBjb25zdF9pdGVyYXRvciB0aGVMYXN0UG9zaXRpb24p
OwoKICAgICAgICBYYWxhbkRPTVN0cmluZwogICAgICAgIHN1YnN0cigKICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90eXBlIHRoZVBvc2l0aW9uID0gMCwKICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90eXBlIHRoZUNvdW50ID0gc2l6ZV90eXBlKG5wb3MpKSBjb25zdAogICAgICAgIHsK
ICAgICAgICAgICAgICAgICgodm9pZCkgKCh0aGVDb3VudCA9PSBzaXplX3R5cGUobnBvcykgJiYg
dGhlUG9zaXRpb24gPCBsZW5ndGgoKSB8fCB0aGVQb3NpdGlvbiArIHRoZUNvdW50IDw9IGxlbmd0
aCgpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoInRoZUNvdW50ID09IHNpemVfdHlwZShucG9zKSAm
JiB0aGVQb3NpdGlvbiA8IGxlbmd0aCgpIHx8IHRoZVBvc2l0aW9uICsgdGhlQ291bnQgPD0gbGVu
Z3RoKCkiLCAiWGFsYW5ET00vWGFsYW5ET01TdHJpbmcuaHBwIiwgNjQ2LCBfX1BSRVRUWV9GVU5D
VElPTl9fKSwgMCkpKTsKCgogICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwoKICAgICAgICAg
ICAgICAgIHJldHVybiBYYWxhbkRPTVN0cmluZygqdGhpcywgdGhlUG9zaXRpb24sIHRoZUNvdW50
KTsKICAgICAgICB9CgogICAgICAgIGludAogICAgICAgIGNvbXBhcmUoY29uc3QgWGFsYW5ET01T
dHJpbmcmIHRoZVN0cmluZykgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnZhcmlh
bnRzKCk7CgogICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmUodGhlU3RyaW5nLmNfc3RyKCkp
OwogICAgICAgIH0KCiAgICAgICAgaW50CiAgICAgICAgY29tcGFyZSgKICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90eXBlIHRoZVBvc2l0aW9uMSwKICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90eXBlIHRoZUNvdW50MSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5E
T01TdHJpbmcmIHRoZVN0cmluZykgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnZh
cmlhbnRzKCk7CgogICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmUodGhlUG9zaXRpb24xLCB0
aGVDb3VudDEsIHRoZVN0cmluZy5jX3N0cigpLCB0aGVTdHJpbmcubGVuZ3RoKCkpOwogICAgICAg
IH0KCiAgICAgICAgaW50CiAgICAgICAgY29tcGFyZSgKICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90eXBlIHRoZVBvc2l0aW9uMSwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBl
IHRoZUNvdW50MSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcm
IHRoZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIHRoZVBvc2l0aW9u
MiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIHRoZUNvdW50MikgY29uc3QKICAg
ICAgICB7CiAgICAgICAgICAgICAgICBpbnZhcmlhbnRzKCk7CgogICAgICAgICAgICAgICAgcmV0
dXJuIGNvbXBhcmUodGhlUG9zaXRpb24xLCB0aGVDb3VudDEsIHRoZVN0cmluZy5jX3N0cigpICsg
dGhlUG9zaXRpb24yLCB0aGVDb3VudDIpOwogICAgICAgIH0KCiAgICAgICAgaW50CiAgICAgICAg
Y29tcGFyZShjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZykgY29uc3Q7CgogICAgICAgIGlu
dAogICAgICAgIGNvbXBhcmUoCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSB0aGVQ
b3NpdGlvbjEsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSB0aGVDb3VudDEsCiAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlU3RyaW5nLAogICAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlQ291bnQyID0gc2l6ZV90eXBlKG5wb3Mp
KSBjb25zdDsKCiAgICAgICAgaW50CiAgICAgICAgY29tcGFyZShjb25zdCBjaGFyKiB0aGVTdHJp
bmcpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwoKICAgICAg
ICAgICAgICAgIHJldHVybiBjb21wYXJlKFhhbGFuRE9NU3RyaW5nKHRoZVN0cmluZykpOwogICAg
ICAgIH0KCiAgICAgICAgaW50CiAgICAgICAgY29tcGFyZSgKICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90eXBlIHRoZVBvc2l0aW9uMSwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
eXBlIHRoZUNvdW50MSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdGhlU3Ry
aW5nLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlQ291bnQyID0gc2l6ZV90
eXBlKG5wb3MpKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsK
CiAgICAgICAgICAgICAgICByZXR1cm4gY29tcGFyZSh0aGVQb3NpdGlvbjEsIHRoZUNvdW50MSwg
WGFsYW5ET01TdHJpbmcodGhlU3RyaW5nLCB0aGVDb3VudDIpKTsKICAgICAgICB9CgogICAgICAg
IENoYXJWZWN0b3JUeXBlCiAgICAgICAgdHJhbnNjb2RlKCkgY29uc3Q7CgogICAgICAgIHN0YXRp
YyBib29sCiAgICAgICAgZXF1YWxzKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxh
bkRPTUNoYXIqIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRo
ZUxIU0xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0
aGVSSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0aGVSSFNMZW5ndGgp
OwoKICAgICAgICBzdGF0aWMgYm9vbAogICAgICAgIGVxdWFscygKICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlUkhTKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJl
dHVybiBlcXVhbHModGhlTEhTLCBsZW5ndGgodGhlTEhTKSwgdGhlUkhTLCBsZW5ndGgodGhlUkhT
KSk7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgYm9vbAogICAgICAgIGVxdWFscygKICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZUxIUywKICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVJIUykKICAgICAgICB7CiAg
ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgdGhlTEhTTGVuZ3RoID0gdGhlTEhTLnNp
emUoKTsKICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCB0aGVSSFNMZW5ndGggPSB0
aGVSSFMuc2l6ZSgpOwoKICAgICAgICAgICAgICAgIGlmICh0aGVMSFNMZW5ndGggIT0gdGhlUkhT
TGVuZ3RoKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcXVhbHModGhlTEhTLmNfc3Ry
KCksIHRoZUxIU0xlbmd0aCwgdGhlUkhTLmNfc3RyKCksIHRoZVJIU0xlbmd0aCk7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgYm9vbAogICAgICAgIGVxdWFscygK
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZUxIUywKICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVSSFMpCiAgICAgICAg
ewogICAgICAgICAgICAgICAgcmV0dXJuIGVxdWFscyh0aGVMSFMuY19zdHIoKSwgdGhlUkhTKTsK
ICAgICAgICB9CgogICAgICAgIHN0YXRpYyBib29sCiAgICAgICAgZXF1YWxzKAogICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZUxIUywKICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVJIUykKICAgICAgICB7CiAgICAgICAg
ICAgICAgICByZXR1cm4gZXF1YWxzKHRoZUxIUywgdGhlUkhTLmNfc3RyKCkpOwogICAgICAgIH0K
IyA3NzUgIlhhbGFuRE9NL1hhbGFuRE9NU3RyaW5nLmhwcCIKICAgICAgICBzdGF0aWMgc2l6ZV90
eXBlCiAgICAgICAgbGVuZ3RoKGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlU3RyaW5nKTsKCnByb3Rl
Y3RlZDoKCgoKCgoKICAgICAgICB2b2lkCiAgICAgICAgaW52YXJpYW50cygpIGNvbnN0CiAgICAg
ICAgewoKCgoKCgogICAgICAgICAgICAgICAgKCh2b2lkKSAoKG1fZGF0YS5zaXplKCkgPT0gMCB8
fCBtX2RhdGEuYmFjaygpID09IDApID8gMCA6IChfX2Fzc2VydF9mYWlsICgibV9kYXRhLnNpemUo
KSA9PSAwIHx8IG1fZGF0YS5iYWNrKCkgPT0gMCIsICJYYWxhbkRPTS9YYWxhbkRPTVN0cmluZy5o
cHAiLCA3OTQsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKICAgICAgICB9CgoKCgoKCiAg
ICAgICAgaXRlcmF0b3IKICAgICAgICBnZXRCYWNrSW5zZXJ0SXRlcmF0b3IoKQogICAgICAgIHsK
ICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gbV9k
YXRhLnNpemUoKSA9PSAwID8gbV9kYXRhLmVuZCgpIDogbV9kYXRhLmVuZCgpIC0gMTsKICAgICAg
ICB9CgogICAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgICAgZ2V0QmFja0luc2VydEl0ZXJhdG9y
KCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnZhcmlhbnRzKCk7CgogICAgICAg
ICAgICAgICAgcmV0dXJuIG1fZGF0YS5zaXplKCkgPT0gMCA/IG1fZGF0YS5lbmQoKSA6IG1fZGF0
YS5lbmQoKSAtIDE7CiAgICAgICAgfQoKICAgICAgICBpdGVyYXRvcgogICAgICAgIGdldEl0ZXJh
dG9yRm9yUG9zaXRpb24oc2l6ZV90eXBlIHRoZVBvc2l0aW9uKQogICAgICAgIHsKICAgICAgICAg
ICAgICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gbV9kYXRhLmJlZ2lu
KCkgKyB0aGVQb3NpdGlvbjsKICAgICAgICB9CgogICAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAg
ICAgZ2V0SXRlcmF0b3JGb3JQb3NpdGlvbihzaXplX3R5cGUgdGhlUG9zaXRpb24pIGNvbnN0CiAg
ICAgICAgewogICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwoKICAgICAgICAgICAgICAgIHJl
dHVybiBtX2RhdGEuYmVnaW4oKSArIHRoZVBvc2l0aW9uOwogICAgICAgIH0KCnByaXZhdGU6Cgog
ICAgICAgIFhhbGFuRE9NQ2hhclZlY3RvclR5cGUgbV9kYXRhOwoKCgoKCiAgICAgICAgc3RhdGlj
IGNvbnN0IFhhbGFuRE9NQ2hhciBzX2VtcHR5Owp9OwoKCgppbmxpbmUgYm9vbApvcGVyYXRvcj09
KAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlTEhTLAog
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlUkhTKQp7CiAg
ICAgICAgcmV0dXJuIFhhbGFuRE9NU3RyaW5nOjplcXVhbHModGhlTEhTLCB0aGVSSFMpOwp9CgoK
CmlubGluZSBib29sCm9wZXJhdG9yPT0oCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhh
bGFuRE9NU3RyaW5nJiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFu
RE9NQ2hhciogdGhlUkhTKQp7CiAgICAgICAgcmV0dXJuIFhhbGFuRE9NU3RyaW5nOjplcXVhbHMo
dGhlTEhTLCB0aGVSSFMpOwp9CgoKCmlubGluZSBib29sCm9wZXJhdG9yPT0oCiAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlTEhTLAogICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlUkhTKQp7CgogICAgICAgIHJldHVybiBY
YWxhbkRPTVN0cmluZzo6ZXF1YWxzKHRoZUxIUywgdGhlUkhTKTsKfQoKCgppbmxpbmUgYm9vbApv
cGVyYXRvciE9KAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYg
dGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhl
UkhTKQp7CiAgICAgICAgcmV0dXJuICEodGhlTEhTID09IHRoZVJIUyk7Cn0KCgoKaW5saW5lIGJv
b2wKb3BlcmF0b3IhPSgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFy
KiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0
aGVSSFMpCnsKICAgICAgICByZXR1cm4gISh0aGVMSFMgPT0gdGhlUkhTKTsKfQoKCgppbmxpbmUg
Ym9vbApvcGVyYXRvciE9KAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0
cmluZyYgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIq
IHRoZVJIUykKewogICAgICAgIHJldHVybiAhKHRoZVJIUyA9PSB0aGVMSFMpOwp9CgoKCmlubGlu
ZSBYYWxhbkRPTVN0cmluZwpvcGVyYXRvcisoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFhhbGFuRE9NU3RyaW5nJiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhh
bGFuRE9NU3RyaW5nJiB0aGVSSFMpCnsKICAgICAgICBYYWxhbkRPTVN0cmluZyB0aGVUZW1wKHRo
ZUxIUyk7CgogICAgICAgIHJldHVybiB0aGVUZW1wICs9IHRoZVJIUzsKfQoKCgppbmxpbmUgWGFs
YW5ET01TdHJpbmcKb3BlcmF0b3IrKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxh
bkRPTVN0cmluZyYgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRP
TUNoYXIqIHRoZVJIUykKewogICAgICAgIFhhbGFuRE9NU3RyaW5nIHRoZVRlbXAodGhlTEhTKTsK
CiAgICAgICAgcmV0dXJuIHRoZVRlbXAgKz0gdGhlUkhTOwp9CgoKCmlubGluZSBYYWxhbkRPTVN0
cmluZwpvcGVyYXRvcisoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hh
ciogdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYg
dGhlUkhTKQp7CiAgICAgICAgWGFsYW5ET01TdHJpbmcgdGhlVGVtcCh0aGVMSFMpOwoKICAgICAg
ICByZXR1cm4gdGhlVGVtcCArPSB0aGVSSFM7Cn0KCgoKaW5saW5lIGNvbnN0IFhhbGFuRE9NU3Ry
aW5nCm9wZXJhdG9yKygKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdGhlTEhT
LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlUkhTKQp7
CiAgICAgICAgcmV0dXJuIFhhbGFuRE9NU3RyaW5nKHRoZUxIUykgKyB0aGVSSFM7Cn0KCgoKaW5s
aW5lIGNvbnN0IFhhbGFuRE9NU3RyaW5nCm9wZXJhdG9yKygKICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogdGhlUkhTKQp7CiAgICAgICAgcmV0dXJuIHRoZUxIUyArIFhhbGFuRE9NU3Ry
aW5nKHRoZVJIUyk7Cn0KIyA5NzEgIlhhbGFuRE9NL1hhbGFuRE9NU3RyaW5nLmhwcCIKdHlwZWRl
ZiBzdGQ6OnZlY3RvcjxYYWxhbkRPTUNoYXI+IFhhbGFuRE9NQ2hhclZlY3RvclR5cGU7Cgp0eXBl
ZGVmIHN0ZDo6dmVjdG9yPGNoYXI+IENoYXJWZWN0b3JUeXBlOwojIDk4OSAiWGFsYW5ET00vWGFs
YW5ET01TdHJpbmcuaHBwIgpib29sClRyYW5zY29kZVRvTG9jYWxDb2RlUGFnZSgKICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVTb3VyY2VTdHJpbmcsCiAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0aGVTb3VyY2VTdHJpbmdMZW5ndGgsCiAg
ICAgICAgICAgICAgICAgICAgICAgIENoYXJWZWN0b3JUeXBlJiB0YXJnZXRWZWN0b3IsCiAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgdGVybWluYXRlID0gZmFsc2UpOwojIDEwMDggIlhhbGFu
RE9NL1hhbGFuRE9NU3RyaW5nLmhwcCIKYm9vbApUcmFuc2NvZGVUb0xvY2FsQ29kZVBhZ2UoCiAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlU291cmNlU3RyaW5n
LAogICAgICAgICAgICAgICAgICAgICAgICBDaGFyVmVjdG9yVHlwZSYgdGFyZ2V0VmVjdG9yLAog
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHRlcm1pbmF0ZSA9IGZhbHNlKTsKIyAxMDI0ICJY
YWxhbkRPTS9YYWxhbkRPTVN0cmluZy5ocHAiCmlubGluZSBjb25zdCBDaGFyVmVjdG9yVHlwZQpU
cmFuc2NvZGVUb0xvY2FsQ29kZVBhZ2UoY29uc3QgWGFsYW5ET01DaGFyKiB0aGVTb3VyY2VTdHJp
bmcpCnsKICAgICAgICBDaGFyVmVjdG9yVHlwZSB0aGVSZXN1bHQ7CgogICAgICAgIFRyYW5zY29k
ZVRvTG9jYWxDb2RlUGFnZSh0aGVTb3VyY2VTdHJpbmcsIHRoZVJlc3VsdCwgdHJ1ZSk7CgogICAg
ICAgIHJldHVybiB0aGVSZXN1bHQ7Cn0KIyAxMDQ1ICJYYWxhbkRPTS9YYWxhbkRPTVN0cmluZy5o
cHAiCmlubGluZSBib29sClRyYW5zY29kZVRvTG9jYWxDb2RlUGFnZSgKICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVNvdXJjZVN0cmluZywKICAgICAgICAg
ICAgICAgICAgICAgICAgQ2hhclZlY3RvclR5cGUmIHRhcmdldFZlY3RvciwKICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCB0ZXJtaW5hdGUgPSBmYWxzZSkKewogICAgICAgIHJldHVybiBUcmFu
c2NvZGVUb0xvY2FsQ29kZVBhZ2UodGhlU291cmNlU3RyaW5nLmNfc3RyKCksIHRhcmdldFZlY3Rv
ciwgdGVybWluYXRlKTsKfQojIDEwNjQgIlhhbGFuRE9NL1hhbGFuRE9NU3RyaW5nLmhwcCIKaW5s
aW5lIGNvbnN0IENoYXJWZWN0b3JUeXBlClRyYW5zY29kZVRvTG9jYWxDb2RlUGFnZShjb25zdCBY
YWxhbkRPTVN0cmluZyYgdGhlU291cmNlU3RyaW5nKQp7CiAgICAgICAgQ2hhclZlY3RvclR5cGUg
dGhlUmVzdWx0OwoKICAgICAgICBUcmFuc2NvZGVUb0xvY2FsQ29kZVBhZ2UodGhlU291cmNlU3Ry
aW5nLCB0aGVSZXN1bHQsIHRydWUpOwoKICAgICAgICByZXR1cm4gdGhlUmVzdWx0Owp9CiMgMTA4
NCAiWGFsYW5ET00vWGFsYW5ET01TdHJpbmcuaHBwIgppbmxpbmUgY29uc3QgWGFsYW5ET01TdHJp
bmcKVHJhbnNjb2RlRnJvbUxvY2FsQ29kZVBhZ2UoCiAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIHRoZVNvdXJjZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IHRoZVNvdXJjZVN0cmluZ0xlbmd0aCA9IHVuc2lnbmVkKC0xKSkKewogICAgICAgIHJl
dHVybiBYYWxhbkRPTVN0cmluZyh0aGVTb3VyY2VTdHJpbmcsIHRoZVNvdXJjZVN0cmluZ0xlbmd0
aCk7Cn0KIyAxMTA1ICJYYWxhbkRPTS9YYWxhbkRPTVN0cmluZy5ocHAiCmJvb2wKVHJhbnNjb2Rl
RnJvbUxvY2FsQ29kZVBhZ2UoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHRo
ZVNvdXJjZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRoZVNv
dXJjZVN0cmluZ0xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5ET01DaGFyVmVj
dG9yVHlwZSYgdGhlVGFyZ2V0VmVjdG9yLAogICAgICAgICAgICAgICAgICAgICAgICBib29sIHRl
cm1pbmF0ZSA9IGZhbHNlKTsKIyAxMTI0ICJYYWxhbkRPTS9YYWxhbkRPTVN0cmluZy5ocHAiCmJv
b2wKVHJhbnNjb2RlRnJvbUxvY2FsQ29kZVBhZ2UoCiAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIHRoZVNvdXJjZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5E
T01DaGFyVmVjdG9yVHlwZSYgdGhlVGFyZ2V0VmVjdG9yLAogICAgICAgICAgICAgICAgICAgICAg
ICBib29sIHRlcm1pbmF0ZSA9IGZhbHNlKTsKIyAxMTM5ICJYYWxhbkRPTS9YYWxhbkRPTVN0cmlu
Zy5ocHAiCmlubGluZSBjb25zdCBYYWxhbkRPTVN0cmluZwpUcmFuc2NvZGVGcm9tTG9jYWxDb2Rl
UGFnZShjb25zdCBDaGFyVmVjdG9yVHlwZSYgdGhlU291cmNlU3RyaW5nKQp7CiAgICAgICAgY29u
c3QgQ2hhclZlY3RvclR5cGU6OnNpemVfdHlwZSB0aGVTaXplID0gdGhlU291cmNlU3RyaW5nLnNp
emUoKTsKCiAgICAgICAgaWYgKHRoZVNvdXJjZVN0cmluZ1t0aGVTaXplIC0gMV0gPT0gQ2hhclZl
Y3RvclR5cGU6OnZhbHVlX3R5cGUoMCkpCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJu
IFRyYW5zY29kZUZyb21Mb2NhbENvZGVQYWdlKCYqdGhlU291cmNlU3RyaW5nLmJlZ2luKCksIHRo
ZVNpemUgLSAxKTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAg
ICAgIHJldHVybiBUcmFuc2NvZGVGcm9tTG9jYWxDb2RlUGFnZSgmKnRoZVNvdXJjZVN0cmluZy5i
ZWdpbigpLCB0aGVTaXplKTsKICAgICAgICB9Cn0KIyA4MCAiWE1MU3VwcG9ydC9Gb3JtYXR0ZXJM
aXN0ZW5lci5ocHAiIDIKCgoKCgoKCmNsYXNzIEZvcm1hdHRlckxpc3RlbmVyIDogcHVibGljIERv
Y3VtZW50SGFuZGxlcgp7CnB1YmxpYzoKCgoKCiAgICAgICAgc3RhdGljIHZvaWQKICAgICAgICBp
bml0aWFsaXplKCk7CgoKCgogICAgICAgIHN0YXRpYyB2b2lkCiAgICAgICAgdGVybWluYXRlKCk7
CgoKICAgICAgICBlbnVtIGVGb3JtYXQKICAgICAgICB7CiAgICAgICAgICAgICAgICBPVVRQVVRf
TUVUSE9EX05PTkUgPSAwLAogICAgICAgICAgICAgICAgT1VUUFVUX01FVEhPRF9YTUwgPSAxLAog
ICAgICAgICAgICAgICAgT1VUUFVUX01FVEhPRF9IVE1MID0gMiwKICAgICAgICAgICAgICAgIE9V
VFBVVF9NRVRIT0RfVEVYVCA9IDMsCiAgICAgICAgICAgICAgICBPVVRQVVRfTUVUSE9EX0RPTSA9
IDQsCiAgICAgICAgICAgICAgICBPVVRQVVRfTUVUSE9EX09USEVSID0gNQogICAgICAgIH07Cgog
ICAgICAgIEZvcm1hdHRlckxpc3RlbmVyKGVGb3JtYXQgdGhlRm9ybWF0KTsKCiAgICAgICAgdmly
dHVhbAogICAgICAgIH5Gb3JtYXR0ZXJMaXN0ZW5lcigpOwoKCiAgICAgICAgZUZvcm1hdAogICAg
ICAgIGdldE91dHB1dEZvcm1hdCgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0
dXJuIG1fb3V0cHV0Rm9ybWF0OwogICAgICAgIH0KIyAxMzUgIlhNTFN1cHBvcnQvRm9ybWF0dGVy
TGlzdGVuZXIuaHBwIgogICAgICAgIHZpcnR1YWwgdm9pZAogICAgICAgIGNoYXJhY3RlcnNSYXco
CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTENoKiBjb25zdCBjaGFycywKICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGxlbmd0aCkgPSAwOwoKCgoKCgoK
ICAgICAgICB2aXJ0dWFsIHZvaWQKICAgICAgICBjb21tZW50KGNvbnN0IFhNTENoKiBjb25zdCBk
YXRhKSA9IDA7CiMgMTcwICJYTUxTdXBwb3J0L0Zvcm1hdHRlckxpc3RlbmVyLmhwcCIKICAgICAg
ICB2aXJ0dWFsIHZvaWQKICAgICAgICBjZGF0YSgKICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgWE1MQ2gqIGNvbnN0IGNoLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgbGVuZ3RoKSA9IDA7CgoKCgoKCgogICAgICAgIHZpcnR1YWwgdm9pZAogICAgICAgIGVu
dGl0eVJlZmVyZW5jZShjb25zdCBYTUxDaCogY29uc3QgbmFtZSkgPSAwOwoKCgoKICAgIHZpcnR1
YWwgdm9pZAogICAgICAgIGNoYXJhY3RlcnMoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFhNTENoKiBjb25zdCBjaGFycywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IGxlbmd0aCkgPSAwOwoKICAgIHZpcnR1YWwgdm9pZAogICAgICAgIGVuZERvY3VtZW50
KCkgPSAwOwoKICAgIHZpcnR1YWwgdm9pZAogICAgICAgIGVuZEVsZW1lbnQoY29uc3QgWE1MQ2gq
IGNvbnN0IG5hbWUpID0gMDsKCiAgICAgICAgdmlydHVhbCB2b2lkCiAgICAgICAgaWdub3JhYmxl
V2hpdGVzcGFjZSgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MQ2gqIGNvbnN0IGNo
YXJzLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbGVuZ3RoKSA9
IDA7CgogICAgICAgIHZpcnR1YWwgdm9pZAogICAgICAgIHByb2Nlc3NpbmdJbnN0cnVjdGlvbigK
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MQ2gqIGNvbnN0IHRhcmdldCwKICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgWE1MQ2gqIGNvbnN0IGRhdGEpID0gMDsKCiAgICAgICAg
dmlydHVhbCB2b2lkCiAgICAgICAgcmVzZXREb2N1bWVudCgpID0gMDsKCiAgICAgICAgdmlydHVh
bCB2b2lkCiAgICAgICAgc2V0RG9jdW1lbnRMb2NhdG9yKGNvbnN0IExvY2F0b3IqIGNvbnN0IGxv
Y2F0b3IpID0gMDsKCiAgICAgICAgdmlydHVhbCB2b2lkCiAgICAgICAgc3RhcnREb2N1bWVudCgp
ID0gMDsKCiAgICAgICAgdmlydHVhbCB2b2lkCiAgICAgICAgc3RhcnRFbGVtZW50KAogICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBYTUxDaCogY29uc3QgbmFtZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgQXR0cmlidXRlTGlzdCYgYXR0cnMpID0gMDsKCgoKCiAgICAgICAgc3RhdGljIGNv
bnN0IFhhbGFuRE9NU3RyaW5nJiBzX3hzbHROZXh0SXNSYXdTdHJpbmc7CgogICAgICAgIHN0YXRp
YyBjb25zdCBYYWxhbkRPTVN0cmluZyYgc19mb3JtYXR0ZXJMaXN0ZW5lclN0cmluZzsKCnByaXZh
dGU6CgogICAgICAgIGNvbnN0IGVGb3JtYXQgbV9vdXRwdXRGb3JtYXQ7Cn07CiMgNzMgIlhhbGFu
U291cmNlVHJlZS9Gb3JtYXR0ZXJUb1NvdXJjZVRyZWUuaHBwIiAyCgoKCiMgMSAiWGFsYW5ET00v
WGFsYW5ET01TdHJpbmcuaHBwIiAxCiMgNzcgIlhhbGFuU291cmNlVHJlZS9Gb3JtYXR0ZXJUb1Nv
dXJjZVRyZWUuaHBwIiAyCgoKCmNsYXNzIFhhbGFuRG9jdW1lbnQ7CmNsYXNzIFhhbGFuRG9jdW1l
bnRGcmFnbWVudDsKY2xhc3MgWGFsYW5FbGVtZW50OwpjbGFzcyBYYWxhbk5vZGU7CmNsYXNzIFhh
bGFuU291cmNlVHJlZURvY3VtZW50OwpjbGFzcyBYYWxhblNvdXJjZVRyZWVFbGVtZW50OwoKCgoK
CgoKY2xhc3MgRm9ybWF0dGVyVG9Tb3VyY2VUcmVlIDogcHVibGljIEZvcm1hdHRlckxpc3RlbmVy
CnsKcHVibGljOgoKCgoKICAgICAgICBzdGF0aWMgdm9pZAogICAgICAgIGluaXRpYWxpemUoKTsK
CgoKCiAgICAgICAgc3RhdGljIHZvaWQKICAgICAgICB0ZXJtaW5hdGUoKTsKIyAxMTYgIlhhbGFu
U291cmNlVHJlZS9Gb3JtYXR0ZXJUb1NvdXJjZVRyZWUuaHBwIgogICAgICAgIEZvcm1hdHRlclRv
U291cmNlVHJlZShYYWxhblNvdXJjZVRyZWVEb2N1bWVudCogdGhlRG9jdW1lbnQpOwojIDEyNSAi
WGFsYW5Tb3VyY2VUcmVlL0Zvcm1hdHRlclRvU291cmNlVHJlZS5ocHAiCiAgICAgICAgRm9ybWF0
dGVyVG9Tb3VyY2VUcmVlKAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhblNvdXJjZVRyZWVE
b2N1bWVudCogdGhlRG9jdW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuRG9jdW1l
bnRGcmFnbWVudCogdGhlRG9jdW1lbnRGcmFnbWVudCk7CgogICAgICAgIHZpcnR1YWwKICAgICAg
ICB+Rm9ybWF0dGVyVG9Tb3VyY2VUcmVlKCk7CgoKCgogICAgICAgIHZpcnR1YWwgdm9pZAogICAg
ICAgIGNoYXJhY3RlcnNSYXcoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTENoKiBj
b25zdCBjaGFycywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGxl
bmd0aCk7CgogICAgICAgIHZpcnR1YWwgdm9pZAogICAgICAgIGNvbW1lbnQoY29uc3QgWE1MQ2gq
IGNvbnN0IGRhdGEpOwoKICAgICAgICB2aXJ0dWFsIHZvaWQKICAgICAgICBjZGF0YSgKICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgWE1MQ2gqIGNvbnN0IGNoLAogICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbGVuZ3RoKTsKCiAgICAgICAgdmlydHVhbCB2b2lk
CiAgICAgICAgZW50aXR5UmVmZXJlbmNlKGNvbnN0IFhNTENoKiBjb25zdCBuYW1lKTsKCiAgICAg
ICAgdmlydHVhbCB2b2lkCiAgICAgICAgc2V0RG9jdW1lbnRMb2NhdG9yKGNvbnN0IExvY2F0b3Iq
IGNvbnN0IGxvY2F0b3IpOwoKICAgICAgICB2aXJ0dWFsIHZvaWQKICAgICAgICBzdGFydERvY3Vt
ZW50KCk7CgogICAgICAgIHZpcnR1YWwgdm9pZAogICAgICAgIGVuZERvY3VtZW50KCk7CgogICAg
ICAgIHZpcnR1YWwgdm9pZAogICAgICAgIHN0YXJ0RWxlbWVudCgKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBYTUxDaCogY29uc3QgbmFtZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBdHRyaWJ1dGVMaXN0JiBhdHRycyk7CgogICAgICAgIHZpcnR1YWwgdm9p
ZAogICAgICAgIGVuZEVsZW1lbnQoY29uc3QgWE1MQ2gqIGNvbnN0IG5hbWUpOwoKICAgICAgICB2
aXJ0dWFsIHZvaWQKICAgICAgICBjaGFyYWN0ZXJzKAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFhNTENoKiBjb25zdCBjaGFycywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbGVuZ3RoKTsKCiAgICAgICAgdmlydHVhbCB2b2lk
CiAgICAgICAgaWdub3JhYmxlV2hpdGVzcGFjZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBYTUxDaCogY29uc3QgY2hhcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IGxlbmd0aCk7CgogICAgICAgIHZpcnR1YWwgdm9pZAog
ICAgICAgIHByb2Nlc3NpbmdJbnN0cnVjdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgWE1MQ2gqIGNvbnN0IHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1M
Q2gqIGNvbnN0IGRhdGEpOwoKICAgICAgICB2aXJ0dWFsIHZvaWQKICAgICAgICByZXNldERvY3Vt
ZW50KCk7CgogICAgICAgIFhhbGFuU291cmNlVHJlZURvY3VtZW50KgogICAgICAgIGdldERvY3Vt
ZW50KCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gbV9kb2N1bWVudDsK
ICAgICAgICB9CgogICAgICAgIHZvaWQKICAgICAgICBzZXREb2N1bWVudChYYWxhblNvdXJjZVRy
ZWVEb2N1bWVudCogdGhlRG9jdW1lbnQpCiAgICAgICAgewogICAgICAgICAgICAgICAgbV9kb2N1
bWVudCA9IHRoZURvY3VtZW50OwogICAgICAgIH0KCiAgICAgICAgWGFsYW5Eb2N1bWVudEZyYWdt
ZW50KgogICAgICAgIGdldERvY3VtZW50RnJhZ21lbnQoKSBjb25zdAogICAgICAgIHsKICAgICAg
ICAgICAgICAgIHJldHVybiBtX2RvY3VtZW50RnJhZ21lbnQ7CiAgICAgICAgfQoKICAgICAgICB2
b2lkCiAgICAgICAgc2V0RG9jdW1lbnRGcmFnbWVudChYYWxhbkRvY3VtZW50RnJhZ21lbnQqIHRo
ZURvY3VtZW50RnJhZ21lbnQpCiAgICAgICAgewogICAgICAgICAgICAgICAgbV9kb2N1bWVudEZy
YWdtZW50ID0gdGhlRG9jdW1lbnRGcmFnbWVudDsKICAgICAgICB9CgogICAgICAgIFhhbGFuU291
cmNlVHJlZUVsZW1lbnQqCiAgICAgICAgZ2V0Q3VycmVudEVsZW1lbnQoKSBjb25zdAogICAgICAg
IHsKICAgICAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRFbGVtZW50OwogICAgICAgIH0KCiAg
ICAgICAgdm9pZAogICAgICAgIHNldEN1cnJlbnRFbGVtZW50KFhhbGFuU291cmNlVHJlZUVsZW1l
bnQqIHRoZUVsZW1lbnQpCiAgICAgICAgewogICAgICAgICAgICAgICAgbV9jdXJyZW50RWxlbWVu
dCA9IHRoZUVsZW1lbnQ7CiAgICAgICAgfQoKcHJpdmF0ZToKCgogICAgICAgIHZvaWQKICAgICAg
ICBwcm9jZXNzQWNjdW11bGF0ZWRUZXh0KCk7CgogICAgICAgIHZvaWQKICAgICAgICBkb0NoYXJh
Y3RlcnMoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTENoKiBjaGFycywKICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbmd0aCk7CgogICAgICAgIHZvaWQKICAg
ICAgICBkb1Byb2Nlc3NpbmdJbnN0cnVjdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgWE1MQ2gqIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MQ2gqIGRh
dGEpOwoKCgogICAgICAgIFhhbGFuU291cmNlVHJlZURvY3VtZW50KiBtX2RvY3VtZW50OwoKICAg
ICAgICBYYWxhbkRvY3VtZW50RnJhZ21lbnQqIG1fZG9jdW1lbnRGcmFnbWVudDsKCiAgICAgICAg
WGFsYW5Tb3VyY2VUcmVlRWxlbWVudCogbV9jdXJyZW50RWxlbWVudDsKCgoKCiAgICAgICAgdHlw
ZWRlZiBzdGQ6OnZlY3RvcjxYYWxhblNvdXJjZVRyZWVFbGVtZW50Kj4gRWxlbWVudFN0YWNrVHlw
ZTsKCgogICAgICAgIEVsZW1lbnRTdGFja1R5cGUgbV9lbGVtZW50U3RhY2s7CgogICAgICAgIFhh
bGFuRE9NU3RyaW5nIG1fdGV4dEJ1ZmZlcjsKfTsKIyA1OSAiWGFsYW5Tb3VyY2VUcmVlL0Zvcm1h
dHRlclRvU291cmNlVHJlZS5jcHAiIDIKCgoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2Nhc3NlcnQiIDEgMwoKIyAxICIv
dXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUv
ZysrL2JpdHMvc3RkX2Nhc3NlcnQuaCIgMSAzCiMgMzcgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY2Fzc2VydC5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2Fz
c2VydC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDM2ICIvdXNyL2lu
Y2x1ZGUvYXNzZXJ0LmgiIDIgMwojIDU4ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMKZXh0ZXJu
ICJDIiB7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfZmFpbCAoX19jb25zdCBjaGFyICpfX2Fzc2Vy
dGlvbiwgX19jb25zdCBjaGFyICpfX2ZpbGUsIHVuc2lnbmVkIGludCBfX2xpbmUsIF9fY29uc3Qg
Y2hhciAqX19mdW5jdGlvbikgdGhyb3cgKCkKCgoKICAgICBfX2F0dHJpYnV0ZV9fICgoX19ub3Jl
dHVybl9fKSk7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfcGVycm9yX2ZhaWwgKGludCBfX2Vycm51
bSwgX19jb25zdCBjaGFyICpfX2ZpbGUsIHVuc2lnbmVkIGludCBfX2xpbmUsIF9fY29uc3QgY2hh
ciAqX19mdW5jdGlvbikgdGhyb3cgKCkKCgoKICAgICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVy
bl9fKSk7Cgp9CiMgMzggIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY2Fzc2VydC5oIiAyIDMKIyAzICIvdXNyL2xv
Y2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2Nh
c3NlcnQiIDIgMwojIDYzICJYYWxhblNvdXJjZVRyZWUvRm9ybWF0dGVyVG9Tb3VyY2VUcmVlLmNw
cCIgMgoKCgojIDEgIi93b3JrL3RvdC9may1kZXYvZ2NjMy90b29scy94ZXJjZXMvaW5jbHVkZS9z
YXgvQXR0cmlidXRlTGlzdC5ocHAiIDEKIyA5NCAiL3dvcmsvdG90L2ZrLWRldi9nY2MzL3Rvb2xz
L3hlcmNlcy9pbmNsdWRlL3NheC9BdHRyaWJ1dGVMaXN0LmhwcCIKIyAxICIvd29yay90b3QvZmst
ZGV2L2djYzMvdG9vbHMveGVyY2VzL2luY2x1ZGUvdXRpbC9YZXJjZXNEZWZzLmhwcCIgMQojIDk1
ICIvd29yay90b3QvZmstZGV2L2djYzMvdG9vbHMveGVyY2VzL2luY2x1ZGUvc2F4L0F0dHJpYnV0
ZUxpc3QuaHBwIiAyCiMgMTQ3ICIvd29yay90b3QvZmstZGV2L2djYzMvdG9vbHMveGVyY2VzL2lu
Y2x1ZGUvc2F4L0F0dHJpYnV0ZUxpc3QuaHBwIgpjbGFzcyBBdHRyaWJ1dGVMaXN0CnsKcHVibGlj
OgoKCgoKCgogICAgQXR0cmlidXRlTGlzdCgpCiAgICB7CiAgICB9CgoKICAgIHZpcnR1YWwgfkF0
dHJpYnV0ZUxpc3QoKQogICAgewogICAgfQojIDE3OCAiL3dvcmsvdG90L2ZrLWRldi9nY2MzL3Rv
b2xzL3hlcmNlcy9pbmNsdWRlL3NheC9BdHRyaWJ1dGVMaXN0LmhwcCIKICAgIHZpcnR1YWwgdW5z
aWduZWQgaW50IGdldExlbmd0aCgpIGNvbnN0ID0gMDsKIyAxOTYgIi93b3JrL3RvdC9may1kZXYv
Z2NjMy90b29scy94ZXJjZXMvaW5jbHVkZS9zYXgvQXR0cmlidXRlTGlzdC5ocHAiCiAgICB2aXJ0
dWFsIGNvbnN0IFhNTENoKiBnZXROYW1lKGNvbnN0IHVuc2lnbmVkIGludCBpbmRleCkgY29uc3Qg
PSAwOwojIDIxOSAiL3dvcmsvdG90L2ZrLWRldi9nY2MzL3Rvb2xzL3hlcmNlcy9pbmNsdWRlL3Nh
eC9BdHRyaWJ1dGVMaXN0LmhwcCIKICAgIHZpcnR1YWwgY29uc3QgWE1MQ2gqIGdldFR5cGUoY29u
c3QgdW5zaWduZWQgaW50IGluZGV4KSBjb25zdCA9IDA7CiMgMjM1ICIvd29yay90b3QvZmstZGV2
L2djYzMvdG9vbHMveGVyY2VzL2luY2x1ZGUvc2F4L0F0dHJpYnV0ZUxpc3QuaHBwIgogICAgdmly
dHVhbCBjb25zdCBYTUxDaCogZ2V0VmFsdWUoY29uc3QgdW5zaWduZWQgaW50IGluZGV4KSBjb25z
dCA9IDA7CiMgMjUxICIvd29yay90b3QvZmstZGV2L2djYzMvdG9vbHMveGVyY2VzL2luY2x1ZGUv
c2F4L0F0dHJpYnV0ZUxpc3QuaHBwIgogICAgdmlydHVhbCBjb25zdCBYTUxDaCogZ2V0VHlwZShj
b25zdCBYTUxDaCogY29uc3QgbmFtZSkgY29uc3QgPSAwOwojIDI2OCAiL3dvcmsvdG90L2ZrLWRl
di9nY2MzL3Rvb2xzL3hlcmNlcy9pbmNsdWRlL3NheC9BdHRyaWJ1dGVMaXN0LmhwcCIKICAgIHZp
cnR1YWwgY29uc3QgWE1MQ2gqIGdldFZhbHVlKGNvbnN0IFhNTENoKiBjb25zdCBuYW1lKSBjb25z
dCA9IDA7CiMgMjg1ICIvd29yay90b3QvZmstZGV2L2djYzMvdG9vbHMveGVyY2VzL2luY2x1ZGUv
c2F4L0F0dHJpYnV0ZUxpc3QuaHBwIgogICAgdmlydHVhbCBjb25zdCBYTUxDaCogZ2V0VmFsdWUo
Y29uc3QgY2hhciogY29uc3QgbmFtZSkgY29uc3QgPSAwOwoKCnByaXZhdGUgOgoKCiAgICBBdHRy
aWJ1dGVMaXN0KGNvbnN0IEF0dHJpYnV0ZUxpc3QmKTsKCiAgICB2b2lkIG9wZXJhdG9yPShjb25z
dCBBdHRyaWJ1dGVMaXN0Jik7Cgp9OwojIDY3ICJYYWxhblNvdXJjZVRyZWUvRm9ybWF0dGVyVG9T
b3VyY2VUcmVlLmNwcCIgMgoKCgojIDEgIlhhbGFuRE9NL1hhbGFuRE9NRXhjZXB0aW9uLmhwcCIg
MQojIDYyICJYYWxhbkRPTS9YYWxhbkRPTUV4Y2VwdGlvbi5ocHAiCiMgMSAiWGFsYW5ET00vWGFs
YW5ET01EZWZpbml0aW9ucy5ocHAiIDEKIyA2MyAiWGFsYW5ET00vWGFsYW5ET01FeGNlcHRpb24u
aHBwIiAyCiMgNzQgIlhhbGFuRE9NL1hhbGFuRE9NRXhjZXB0aW9uLmhwcCIKY2xhc3MgWGFsYW5E
T01FeGNlcHRpb24KewpwdWJsaWM6CgoKCiAgICAgICAgZW51bSBFeGNlcHRpb25Db2RlCiAgICAg
ICAgewogICAgICAgICAgICAgICAgSU5ERVhfU0laRV9FUlIgPSAxLAogICAgICAgICAgICAgICAg
RE9NU1RSSU5HX1NJWkVfRVJSID0gMiwKICAgICAgICAgICAgICAgIEhJRVJBUkNIWV9SRVFVRVNU
X0VSUiA9IDMsCiAgICAgICAgICAgICAgICBXUk9OR19ET0NVTUVOVF9FUlIgPSA0LAogICAgICAg
ICAgICAgICAgSU5WQUxJRF9DSEFSQUNURVJfRVJSID0gNSwKICAgICAgICAgICAgICAgIE5PX0RB
VEFfQUxMT1dFRF9FUlIgPSA2LAogICAgICAgICAgICAgICAgTk9fTU9ESUZJQ0FUSU9OX0FMTE9X
RURfRVJSID0gNywKICAgICAgICAgICAgICAgIE5PVF9GT1VORF9FUlIgPSA4LAogICAgICAgICAg
ICAgICAgTk9UX1NVUFBPUlRFRF9FUlIgPSA5LAogICAgICAgICAgICAgICAgSU5VU0VfQVRUUklC
VVRFX0VSUiA9IDEwLAogICAgICAgICAgICAgICAgSU5WQUxJRF9TVEFURV9FUlIgPSAxMSwKICAg
ICAgICAgICAgICAgIFNZTlRBWF9FUlIgPSAxMiwKICAgICAgICAgICAgICAgIElOVkFMSURfTU9E
SUZJQ0FUSU9OX0VSUiA9IDEzLAogICAgICAgICAgICAgICAgTkFNRVNQQUNFX0VSUiA9IDE0LAog
ICAgICAgICAgICAgICAgSU5WQUxJRF9BQ0NFU1NfRVJSID0gMTUsCgoKCiAgICAgICAgICAgICAg
ICBVTktOT1dOID0gMjAxCiAgICAgICAgfTsKIyAxMTIgIlhhbGFuRE9NL1hhbGFuRE9NRXhjZXB0
aW9uLmhwcCIKICAgICAgICBleHBsaWNpdAogICAgICAgIFhhbGFuRE9NRXhjZXB0aW9uKEV4Y2Vw
dGlvbkNvZGUgY29kZSA9IFVOS05PV04pOwoKCgoKCgogICAgICAgIFhhbGFuRE9NRXhjZXB0aW9u
KGNvbnN0IFhhbGFuRE9NRXhjZXB0aW9uJiB0aGVTb3VyY2UpOwojIDEyOSAiWGFsYW5ET00vWGFs
YW5ET01FeGNlcHRpb24uaHBwIgogICAgICAgIHZpcnR1YWwKICAgICAgICB+WGFsYW5ET01FeGNl
cHRpb24oKTsKIyAxNDAgIlhhbGFuRE9NL1hhbGFuRE9NRXhjZXB0aW9uLmhwcCIKICAgICAgICB2
aXJ0dWFsIEV4Y2VwdGlvbkNvZGUKICAgICAgICBnZXRFeGNlcHRpb25Db2RlKCkgY29uc3Q7Cgpw
cml2YXRlOgoKICAgICAgICBjb25zdCBFeGNlcHRpb25Db2RlIG1fY29kZTsKfTsKIyA3MSAiWGFs
YW5Tb3VyY2VUcmVlL0Zvcm1hdHRlclRvU291cmNlVHJlZS5jcHAiIDIKIyAxICJYYWxhbkRPTS9Y
YWxhbkRvY3VtZW50RnJhZ21lbnQuaHBwIiAxCiMgNjIgIlhhbGFuRE9NL1hhbGFuRG9jdW1lbnRG
cmFnbWVudC5ocHAiCiMgMSAiWGFsYW5ET00vWGFsYW5ET01EZWZpbml0aW9ucy5ocHAiIDEKIyA2
MyAiWGFsYW5ET00vWGFsYW5Eb2N1bWVudEZyYWdtZW50LmhwcCIgMgojIDEgIlhhbGFuRE9NL1hh
bGFuTm9kZS5ocHAiIDEKIyA2MiAiWGFsYW5ET00vWGFsYW5Ob2RlLmhwcCIKIyAxICJYYWxhbkRP
TS9YYWxhbkRPTURlZmluaXRpb25zLmhwcCIgMQojIDYzICJYYWxhbkRPTS9YYWxhbk5vZGUuaHBw
IiAyCiMgMSAiWGFsYW5ET00vWGFsYW5ET01TdHJpbmcuaHBwIiAxCiMgNjQgIlhhbGFuRE9NL1hh
bGFuTm9kZS5ocHAiIDIKCgoKY2xhc3MgWGFsYW5Eb2N1bWVudDsKY2xhc3MgWGFsYW5OYW1lZE5v
ZGVNYXA7CmNsYXNzIFhhbGFuTm9kZUxpc3Q7CiMgODEgIlhhbGFuRE9NL1hhbGFuTm9kZS5ocHAi
CmNsYXNzIFhhbGFuTm9kZQp7CnB1YmxpYzoKCiAgICAgICAgWGFsYW5Ob2RlKCk7CgogICAgICAg
IHZpcnR1YWwKICAgICAgICB+WGFsYW5Ob2RlKCk7CgogICAgICAgIGVudW0gTm9kZVR5cGUKICAg
ICAgICB7CiAgICAgICAgICAgICAgICBVTktOT1dOX05PREUgPSAwLAogICAgICAgICAgICAgICAg
RUxFTUVOVF9OT0RFID0gMSwKICAgICAgICAgICAgICAgIEFUVFJJQlVURV9OT0RFID0gMiwKICAg
ICAgICAgICAgICAgIFRFWFRfTk9ERSA9IDMsCiAgICAgICAgICAgICAgICBDREFUQV9TRUNUSU9O
X05PREUgPSA0LAogICAgICAgICAgICAgICAgRU5USVRZX1JFRkVSRU5DRV9OT0RFID0gNSwKICAg
ICAgICAgICAgICAgIEVOVElUWV9OT0RFID0gNiwKICAgICAgICAgICAgICAgIFBST0NFU1NJTkdf
SU5TVFJVQ1RJT05fTk9ERSA9IDcsCiAgICAgICAgICAgICAgICBDT01NRU5UX05PREUgPSA4LAog
ICAgICAgICAgICAgICAgRE9DVU1FTlRfTk9ERSA9IDksCiAgICAgICAgICAgICAgICBET0NVTUVO
VF9UWVBFX05PREUgPSAxMCwKICAgICAgICAgICAgICAgIERPQ1VNRU5UX0ZSQUdNRU5UX05PREUg
PSAxMSwKICAgICAgICAgICAgICAgIE5PVEFUSU9OX05PREUgPSAxMgogICAgICAgIH07CgogICAg
ICAgIHZpcnR1YWwgY29uc3QgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgZ2V0Tm9kZU5hbWUoKSBj
b25zdCA9IDA7CgoKCgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5ET01TdHJpbmcmCiAgICAg
ICAgZ2V0Tm9kZVZhbHVlKCkgY29uc3QgPSAwOwoKCgoKICAgICAgICB2aXJ0dWFsIE5vZGVUeXBl
CiAgICAgICAgZ2V0Tm9kZVR5cGUoKSBjb25zdCA9IDA7CiMgMTMxICJYYWxhbkRPTS9YYWxhbk5v
ZGUuaHBwIgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIGdldFBhcmVudE5vZGUo
KSBjb25zdCA9IDA7CiMgMTQ3ICJYYWxhbkRPTS9YYWxhbk5vZGUuaHBwIgogICAgICAgIHZpcnR1
YWwgY29uc3QgWGFsYW5Ob2RlTGlzdCoKICAgICAgICBnZXRDaGlsZE5vZGVzKCkgY29uc3QgPSAw
OwoKCgoKCgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIGdldEZpcnN0Q2hpbGQo
KSBjb25zdCA9IDA7CgoKCgoKCiAgICAgICAgdmlydHVhbCBYYWxhbk5vZGUqCiAgICAgICAgZ2V0
TGFzdENoaWxkKCkgY29uc3QgPSAwOwoKCgoKCgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgog
ICAgICAgIGdldFByZXZpb3VzU2libGluZygpIGNvbnN0ID0gMDsKCgoKCgoKICAgICAgICB2aXJ0
dWFsIFhhbGFuTm9kZSoKICAgICAgICBnZXROZXh0U2libGluZygpIGNvbnN0ID0gMDsKCgoKCgog
ICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5OYW1lZE5vZGVNYXAqCiAgICAgICAgZ2V0QXR0cmli
dXRlcygpIGNvbnN0ID0gMDsKIyAxOTggIlhhbGFuRE9NL1hhbGFuTm9kZS5ocHAiCiAgICAgICAg
dmlydHVhbCBYYWxhbkRvY3VtZW50KgogICAgICAgIGdldE93bmVyRG9jdW1lbnQoKSBjb25zdCA9
IDA7CiMgMjIzICJYYWxhbkRPTS9YYWxhbk5vZGUuaHBwIgogICAgICAgIHZpcnR1YWwgWGFsYW5O
b2RlKgogICAgICAgIGNsb25lTm9kZShib29sIGRlZXApIGNvbnN0ID0gMDsKIyAyNDYgIlhhbGFu
RE9NL1hhbGFuTm9kZS5ocHAiCiAgICAgICAgdmlydHVhbCBYYWxhbk5vZGUqCiAgICAgICAgaW5z
ZXJ0QmVmb3JlKAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhbk5vZGUqIG5ld0NoaWxkLAog
ICAgICAgICAgICAgICAgICAgICAgICBYYWxhbk5vZGUqIHJlZkNoaWxkKSA9IDA7CiMgMjY0ICJY
YWxhbkRPTS9YYWxhbk5vZGUuaHBwIgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAg
IHJlcGxhY2VDaGlsZCgKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5Ob2RlKiBuZXdDaGls
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5Ob2RlKiBvbGRDaGlsZCkgPSAwOwojIDI3
NiAiWGFsYW5ET00vWGFsYW5Ob2RlLmhwcCIKICAgICAgICB2aXJ0dWFsIFhhbGFuTm9kZSoKICAg
ICAgICByZW1vdmVDaGlsZChYYWxhbk5vZGUqIG9sZENoaWxkKSA9IDA7CiMgMjkwICJYYWxhbkRP
TS9YYWxhbk5vZGUuaHBwIgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIGFwcGVu
ZENoaWxkKFhhbGFuTm9kZSogbmV3Q2hpbGQpID0gMDsKIyAzMDQgIlhhbGFuRE9NL1hhbGFuTm9k
ZS5ocHAiCiAgICAgICAgdmlydHVhbCBib29sCiAgICAgICAgaGFzQ2hpbGROb2RlcygpIGNvbnN0
ID0gMDsKIyAzMjYgIlhhbGFuRE9NL1hhbGFuTm9kZS5ocHAiCiAgICAgICAgdmlydHVhbCB2b2lk
CiAgICAgICAgc2V0Tm9kZVZhbHVlKGNvbnN0IFhhbGFuRE9NU3RyaW5nJiBub2RlVmFsdWUpID0g
MDsKIyAzNDkgIlhhbGFuRE9NL1hhbGFuTm9kZS5ocHAiCiAgICAgICAgdmlydHVhbCB2b2lkCiAg
ICAgICAgbm9ybWFsaXplKCkgPSAwOwojIDM2NSAiWGFsYW5ET00vWGFsYW5Ob2RlLmhwcCIKICAg
ICAgICB2aXJ0dWFsIGJvb2wKICAgICAgICBzdXBwb3J0cygKICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIGZlYXR1cmUsCiAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB2ZXJzaW9uKSBjb25zdCA9IDA7CiMgMzgzICJYYWxhbkRP
TS9YYWxhbk5vZGUuaHBwIgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5ET01TdHJpbmcmCiAg
ICAgICAgZ2V0TmFtZXNwYWNlVVJJKCkgY29uc3QgPSAwOwoKCgoKCiAgICAgICAgdmlydHVhbCBj
b25zdCBYYWxhbkRPTVN0cmluZyYKICAgICAgICBnZXRQcmVmaXgoKSBjb25zdCA9IDA7CiMgNDAw
ICJYYWxhbkRPTS9YYWxhbk5vZGUuaHBwIgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5ET01T
dHJpbmcmCiAgICAgICAgZ2V0TG9jYWxOYW1lKCkgY29uc3QgPSAwOwojIDQzMiAiWGFsYW5ET00v
WGFsYW5Ob2RlLmhwcCIKICAgICAgICB2aXJ0dWFsIHZvaWQKICAgICAgICBzZXRQcmVmaXgoY29u
c3QgWGFsYW5ET01TdHJpbmcmIHByZWZpeCkgPSAwOwoKCgoKCgogICAgICAgIHZpcnR1YWwgYm9v
bAogICAgICAgIGlzSW5kZXhlZCgpIGNvbnN0ID0gMDsKCgoKCgoKCiAgICAgICAgdmlydHVhbCB1
bnNpZ25lZCBsb25nCiAgICAgICAgZ2V0SW5kZXgoKSBjb25zdCA9IDA7CiMgNDYxICJYYWxhbkRP
TS9YYWxhbk5vZGUuaHBwIgogICAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgICBnZXRJbnN0YW5j
ZUNvdW50KCkKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gc19pbnN0YW5jZUNvdW50
OwogICAgICAgIH0KIyA0NzcgIlhhbGFuRE9NL1hhbGFuTm9kZS5ocHAiCiAgICAgICAgc3RhdGlj
IHZvaWQKICAgICAgICBnZXRMaXZlSW5zdGFuY2VzKFhhbGFuTm9kZSogdGhlTm9kZXNbXSk7CgoK
CnByb3RlY3RlZDoKCiAgICAgICAgWGFsYW5Ob2RlKGNvbnN0IFhhbGFuTm9kZSYgdGhlU291cmNl
KTsKCiAgICAgICAgWGFsYW5Ob2RlJgogICAgICAgIG9wZXJhdG9yPShjb25zdCBYYWxhbk5vZGUm
IHRoZVNvdXJjZSk7CgogICAgICAgIGJvb2wKICAgICAgICBvcGVyYXRvcj09KGNvbnN0IFhhbGFu
Tm9kZSYgdGhlUkhTKSBjb25zdDsKCnByaXZhdGU6CgoKICAgICAgICBzdGF0aWMgc2l6ZV90IHNf
aW5zdGFuY2VDb3VudDsKCn07CiMgNjQgIlhhbGFuRE9NL1hhbGFuRG9jdW1lbnRGcmFnbWVudC5o
cHAiIDIKCgoKY2xhc3MgWGFsYW5BdHRyOwpjbGFzcyBYYWxhbkNEQVRBU2VjdGlvbjsKY2xhc3Mg
WGFsYW5Db21tZW50OwpjbGFzcyBYYWxhbkRvY3VtZW50RnJhZ21lbnQ7CmNsYXNzIFhhbGFuRWxl
bWVudDsKY2xhc3MgWGFsYW5FbnRpdHlSZWZlcmVuY2U7CmNsYXNzIFhhbGFuUHJvY2Vzc2luZ0lu
c3RydWN0aW9uOwpjbGFzcyBYYWxhblRleHQ7CiMgODYgIlhhbGFuRE9NL1hhbGFuRG9jdW1lbnRG
cmFnbWVudC5ocHAiCmNsYXNzIFhhbGFuRG9jdW1lbnRGcmFnbWVudCA6IHB1YmxpYyBYYWxhbk5v
ZGUKewpwdWJsaWM6CgogICAgICAgIFhhbGFuRG9jdW1lbnRGcmFnbWVudCgpOwoKICAgICAgICB2
aXJ0dWFsCiAgICAgICAgflhhbGFuRG9jdW1lbnRGcmFnbWVudCgpOwoKCgogICAgICAgIHZpcnR1
YWwgY29uc3QgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgZ2V0Tm9kZU5hbWUoKSBjb25zdCA9IDA7
CgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgZ2V0Tm9kZVZh
bHVlKCkgY29uc3QgPSAwOwoKICAgICAgICB2aXJ0dWFsIE5vZGVUeXBlCiAgICAgICAgZ2V0Tm9k
ZVR5cGUoKSBjb25zdCA9IDA7CgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIGdl
dFBhcmVudE5vZGUoKSBjb25zdCA9IDA7CgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5Ob2Rl
TGlzdCoKICAgICAgICBnZXRDaGlsZE5vZGVzKCkgY29uc3QgPSAwOwoKICAgICAgICB2aXJ0dWFs
IFhhbGFuTm9kZSoKICAgICAgICBnZXRGaXJzdENoaWxkKCkgY29uc3QgPSAwOwoKICAgICAgICB2
aXJ0dWFsIFhhbGFuTm9kZSoKICAgICAgICBnZXRMYXN0Q2hpbGQoKSBjb25zdCA9IDA7CgogICAg
ICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIGdldFByZXZpb3VzU2libGluZygpIGNvbnN0
ID0gMDsKCiAgICAgICAgdmlydHVhbCBYYWxhbk5vZGUqCiAgICAgICAgZ2V0TmV4dFNpYmxpbmco
KSBjb25zdCA9IDA7CgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5OYW1lZE5vZGVNYXAqCiAg
ICAgICAgZ2V0QXR0cmlidXRlcygpIGNvbnN0ID0gMDsKCiAgICAgICAgdmlydHVhbCBYYWxhbkRv
Y3VtZW50KgogICAgICAgIGdldE93bmVyRG9jdW1lbnQoKSBjb25zdCA9IDA7CgoKCgogICAgICAg
IHZpcnR1YWwgWGFsYW5Eb2N1bWVudEZyYWdtZW50KgoKICAgICAgICBjbG9uZU5vZGUoYm9vbCBk
ZWVwKSBjb25zdCA9IDA7CgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIGluc2Vy
dEJlZm9yZSgKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5Ob2RlKiBuZXdDaGlsZCwKICAg
ICAgICAgICAgICAgICAgICAgICAgWGFsYW5Ob2RlKiByZWZDaGlsZCkgPSAwOwoKICAgICAgICB2
aXJ0dWFsIFhhbGFuTm9kZSoKICAgICAgICByZXBsYWNlQ2hpbGQoCiAgICAgICAgICAgICAgICAg
ICAgICAgIFhhbGFuTm9kZSogbmV3Q2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFu
Tm9kZSogb2xkQ2hpbGQpID0gMDsKCiAgICAgICAgdmlydHVhbCBYYWxhbk5vZGUqCiAgICAgICAg
cmVtb3ZlQ2hpbGQoWGFsYW5Ob2RlKiBvbGRDaGlsZCkgPSAwOwoKICAgICAgICB2aXJ0dWFsIFhh
bGFuTm9kZSoKICAgICAgICBhcHBlbmRDaGlsZChYYWxhbk5vZGUqIG5ld0NoaWxkKSA9IDA7Cgog
ICAgICAgIHZpcnR1YWwgYm9vbAogICAgICAgIGhhc0NoaWxkTm9kZXMoKSBjb25zdCA9IDA7Cgog
ICAgICAgIHZpcnR1YWwgdm9pZAogICAgICAgIHNldE5vZGVWYWx1ZShjb25zdCBYYWxhbkRPTVN0
cmluZyYgbm9kZVZhbHVlKSA9IDA7CgogICAgICAgIHZpcnR1YWwgdm9pZAogICAgICAgIG5vcm1h
bGl6ZSgpID0gMDsKCiAgICAgICAgdmlydHVhbCBib29sCiAgICAgICAgc3VwcG9ydHMoCiAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiBmZWF0dXJlLAogICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdmVyc2lvbikgY29uc3QgPSAw
OwoKICAgICAgICB2aXJ0dWFsIGNvbnN0IFhhbGFuRE9NU3RyaW5nJgogICAgICAgIGdldE5hbWVz
cGFjZVVSSSgpIGNvbnN0ID0gMDsKCiAgICAgICAgdmlydHVhbCBjb25zdCBYYWxhbkRPTVN0cmlu
ZyYKICAgICAgICBnZXRQcmVmaXgoKSBjb25zdCA9IDA7CgogICAgICAgIHZpcnR1YWwgY29uc3Qg
WGFsYW5ET01TdHJpbmcmCiAgICAgICAgZ2V0TG9jYWxOYW1lKCkgY29uc3QgPSAwOwoKICAgICAg
ICB2aXJ0dWFsIHZvaWQKICAgICAgICBzZXRQcmVmaXgoY29uc3QgWGFsYW5ET01TdHJpbmcmIHBy
ZWZpeCkgPSAwOwoKICAgICAgICB2aXJ0dWFsIGJvb2wKICAgICAgICBpc0luZGV4ZWQoKSBjb25z
dCA9IDA7CgogICAgICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZwogICAgICAgIGdldEluZGV4KCkg
Y29uc3QgPSAwOwoKcHJvdGVjdGVkOgoKICAgICAgICBYYWxhbkRvY3VtZW50RnJhZ21lbnQoY29u
c3QgWGFsYW5Eb2N1bWVudEZyYWdtZW50JiB0aGVTb3VyY2UpOwoKICAgICAgICBYYWxhbkRvY3Vt
ZW50RnJhZ21lbnQmCiAgICAgICAgb3BlcmF0b3I9KGNvbnN0IFhhbGFuRG9jdW1lbnRGcmFnbWVu
dCYgdGhlU291cmNlKTsKCiAgICAgICAgYm9vbAogICAgICAgIG9wZXJhdG9yPT0oY29uc3QgWGFs
YW5Eb2N1bWVudEZyYWdtZW50JiB0aGVSSFMpIGNvbnN0OwoKcHJpdmF0ZToKfTsKIyA3MiAiWGFs
YW5Tb3VyY2VUcmVlL0Zvcm1hdHRlclRvU291cmNlVHJlZS5jcHAiIDIKCgoKIyAxICJQbGF0Zm9y
bVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIgMQojIDYzICJQbGF0Zm9ybVN1cHBvcnQvRE9N
U3RyaW5nSGVscGVyLmhwcCIKIyAxICJQbGF0Zm9ybVN1cHBvcnQvUGxhdGZvcm1TdXBwb3J0RGVm
aW5pdGlvbnMuaHBwIiAxCiMgNjIgIlBsYXRmb3JtU3VwcG9ydC9QbGF0Zm9ybVN1cHBvcnREZWZp
bml0aW9ucy5ocHAiCiMgMSAiSW5jbHVkZS9QbGF0Zm9ybURlZmluaXRpb25zLmhwcCIgMQojIDYz
ICJQbGF0Zm9ybVN1cHBvcnQvUGxhdGZvcm1TdXBwb3J0RGVmaW5pdGlvbnMuaHBwIiAyCiMgNjQg
IlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIiAyCgoKCiMgMSAiL3Vzci9sb2Nh
bC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9jYXNz
ZXJ0IiAxIDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jYXNzZXJ0LmgiIDEgMwojIDM3ICIvdXNyL2xv
Y2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2Jp
dHMvc3RkX2Nhc3NlcnQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMSAzCiMgMzUg
Ii91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAx
IDMKIyAzNiAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAyIDMKIyA1OCAiL3Vzci9pbmNsdWRlL2Fz
c2VydC5oIiAzCmV4dGVybiAiQyIgewoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X2ZhaWwgKF9fY29u
c3QgY2hhciAqX19hc3NlcnRpb24sIF9fY29uc3QgY2hhciAqX19maWxlLCB1bnNpZ25lZCBpbnQg
X19saW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pIHRocm93ICgpCgoKCiAgICAgX19hdHRy
aWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9m
YWlsIChpbnQgX19lcnJudW0sIF9fY29uc3QgY2hhciAqX19maWxlLCB1bnNpZ25lZCBpbnQgX19s
aW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pIHRocm93ICgpCgoKCiAgICAgX19hdHRyaWJ1
dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKfQojIDM4ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2Nhc3NlcnQuaCIg
MiAzCiMgMyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu
MC9pbmNsdWRlL2crKy9jYXNzZXJ0IiAyIDMKIyA2OCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmlu
Z0hlbHBlci5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2Z1bmN0aW9uYWwiIDEgMwoKIyAxICIvdXNyL2xvY2Fs
L2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMv
c3RkX2Z1bmN0aW9uYWwuaCIgMSAzCiMgMTkgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfZnVuY3Rpb25hbC5oIiAz
CiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9p
bmNsdWRlL2crKy9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAyMCAi
L3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl
L2crKy9iaXRzL3N0ZF9mdW5jdGlvbmFsLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGRl
Zi5oIiAxIDMKIyAyMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9mdW5jdGlvbmFsLmgiIDIgMwojIDEgIi91c3Iv
bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysv
Yml0cy9zdGxfZnVuY3Rpb24uaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfZnVuY3Rpb24uaCIg
MwpuYW1lc3BhY2Ugc3RkCnsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0Pgpz
dHJ1Y3QgdW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZyBhcmd1bWVudF90eXBlOwogIHR5
cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xh
c3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCBiaW5hcnlfZnVuY3Rpb24gewogIHR5cGVk
ZWYgX0FyZzEgZmlyc3RfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9BcmcyIHNlY29uZF9hcmd1
bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBwbHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9U
cD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29u
c3QgeyByZXR1cm4gX194ICsgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qg
bWludXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJh
dG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3gg
LSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtdWx0aXBsaWVzIDogcHVi
bGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0
IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICogX195OyB9Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZGl2aWRlcyA6IHB1YmxpYyBiaW5hcnlfZnVu
Y3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u
c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAvIF9feTsgfQp9OwoKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPiBpbmxpbmUgX1RwIGlkZW50aXR5X2VsZW1lbnQocGx1czxfVHA+KSB7CiAgcmV0
dXJuIF9UcCgwKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBpbmxpbmUgX1RwIGlkZW50aXR5X2Vs
ZW1lbnQobXVsdGlwbGllczxfVHA+KSB7CiAgcmV0dXJuIF9UcCgxKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9UcD4Kc3RydWN0IG1vZHVsdXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAs
X1RwPgp7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBj
b25zdCB7IHJldHVybiBfX3ggJSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj
dCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4KewogIF9UcCBvcGVyYXRv
cigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAtX194OyB9Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgpzdHJ1Y3QgZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxf
VHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBf
X3kpIGNvbnN0IHsgcmV0dXJuIF9feCA9PSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+
CnN0cnVjdCBub3RfZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9v
bD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNv
bnN0IHsgcmV0dXJuIF9feCAhPSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj
dCBncmVhdGVyIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29s
IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVy
biBfX3ggPiBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzIDogcHVi
bGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29u
c3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPCBfX3k7IH0K
fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyX2VxdWFsIDogcHVibGljIGJp
bmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1Rw
JiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPj0gX195OyB9Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzc19lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVu
Y3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBj
b25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IDw9IF9feTsgfQp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfYW5kIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf
VHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9U
cCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggJiYgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPgpzdHJ1Y3QgbG9naWNhbF9vciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxi
b29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkg
Y29uc3QgeyByZXR1cm4gX194IHx8IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry
dWN0IGxvZ2ljYWxfbm90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxib29sPgp7CiAgYm9v
bCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAhX194OyB9Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KY2xhc3MgdW5hcnlfbmVnYXRlCiAgOiBwdWJsaWMg
dW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSwgYm9vbD4g
ewpwcm90ZWN0ZWQ6CiAgX1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgdW5h
cnlfbmVnYXRlKGNvbnN0IF9QcmVkaWNhdGUmIF9feCkgOiBfTV9wcmVkKF9feCkge30KICBib29s
IG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSYgX194
KSBjb25zdCB7CiAgICByZXR1cm4gIV9NX3ByZWQoX194KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1ByZWRpY2F0ZT4KaW5saW5lIHVuYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPgpub3QxKGNvbnN0
IF9QcmVkaWNhdGUmIF9fcHJlZCkKewogIHJldHVybiB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4o
X19wcmVkKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIGJpbmFyeV9uZWdh
dGUKICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0ZTo6Zmlyc3Rf
YXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX1ByZWRp
Y2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgogIGV4cGxpY2l0
IGJpbmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQoX194KSB7fQog
IGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVu
dF90eXBlJiBfX3gsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6
OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpIGNvbnN0CiAgewogICAgcmV0dXJuICFfTV9wcmVk
KF9feCwgX195KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIGJp
bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4Kbm90Mihjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCnsK
ICByZXR1cm4gYmluYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX09wZXJhdGlvbj4KY2xhc3MgYmluZGVyMXN0CiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rp
b248dHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVj
dGVkOgogIF9PcGVyYXRpb24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1l
bnRfdHlwZSB2YWx1ZTsKcHVibGljOgogIGJpbmRlcjFzdChjb25zdCBfT3BlcmF0aW9uJiBfX3gs
CiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5
cGUmIF9feSkKICAgICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJh
dGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246
OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcCh2YWx1ZSwg
X194KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3MgX1RwPgppbmxp
bmUgYmluZGVyMXN0PF9PcGVyYXRpb24+CmJpbmQxc3QoY29uc3QgX09wZXJhdGlvbiYgX19mbiwg
Y29uc3QgX1RwJiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2Fy
Z3VtZW50X3R5cGUgX0FyZzFfdHlwZTsKICByZXR1cm4gYmluZGVyMXN0PF9PcGVyYXRpb24+KF9f
Zm4sIF9BcmcxX3R5cGUoX194KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uPgpjbGFz
cyBiaW5kZXIybmQKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9u
OjpmaXJzdF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1l
IF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9uIG9wOwog
IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIHZhbHVlOwpwdWJsaWM6
CiAgYmluZGVyMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9feCwKICAgICAgICAgICAgY29uc3QgdHlw
ZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feSkKICAgICAgOiBvcChf
X3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBv
cGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUm
IF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKF9feCwgdmFsdWUpOwogIH0KfTsKCnRlbXBsYXRl
IDxjbGFzcyBfT3BlcmF0aW9uLCBjbGFzcyBfVHA+CmlubGluZSBiaW5kZXIybmQ8X09wZXJhdGlv
bj4KYmluZDJuZChjb25zdCBfT3BlcmF0aW9uJiBfX2ZuLCBjb25zdCBfVHAmIF9feCkKewogIHR5
cGVkZWYgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgX0FyZzJfdHlw
ZTsKICByZXR1cm4gYmluZGVyMm5kPF9PcGVyYXRpb24+KF9fZm4sIF9BcmcyX3R5cGUoX194KSk7
Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMj4KY2xh
c3MgdW5hcnlfY29tcG9zZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVy
YXRpb24yOjphcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1l
IF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZT4Kewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbjEgX01f
Zm4xOwogIF9PcGVyYXRpb24yIF9NX2ZuMjsKcHVibGljOgogIHVuYXJ5X2NvbXBvc2UoY29uc3Qg
X09wZXJhdGlvbjEmIF9feCwgY29uc3QgX09wZXJhdGlvbjImIF9feSkKICAgIDogX01fZm4xKF9f
eCksIF9NX2ZuMihfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBlCiAg
b3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSYgX194
KSBjb25zdCB7CiAgICByZXR1cm4gX01fZm4xKF9NX2ZuMihfX3gpKTsKICB9Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRpb24yPgppbmxpbmUgdW5hcnlfY29t
cG9zZTxfT3BlcmF0aW9uMSxfT3BlcmF0aW9uMj4KY29tcG9zZTEoY29uc3QgX09wZXJhdGlvbjEm
IF9fZm4xLCBjb25zdCBfT3BlcmF0aW9uMiYgX19mbjIpCnsKICByZXR1cm4gdW5hcnlfY29tcG9z
ZTxfT3BlcmF0aW9uMSxfT3BlcmF0aW9uMj4oX19mbjEsIF9fZm4yKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMiwgY2xhc3MgX09wZXJhdGlvbjM+CmNs
YXNzIGJpbmFyeV9jb21wb3NlCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09w
ZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5h
bWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBlPiB7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9uMSBf
TV9mbjE7CiAgX09wZXJhdGlvbjIgX01fZm4yOwogIF9PcGVyYXRpb24zIF9NX2ZuMzsKcHVibGlj
OgogIGJpbmFyeV9jb21wb3NlKGNvbnN0IF9PcGVyYXRpb24xJiBfX3gsIGNvbnN0IF9PcGVyYXRp
b24yJiBfX3ksCiAgICAgICAgICAgICAgICAgY29uc3QgX09wZXJhdGlvbjMmIF9feikKICAgIDog
X01fZm4xKF9feCksIF9NX2ZuMihfX3kpLCBfTV9mbjMoX196KSB7IH0KICB0eXBlbmFtZSBfT3Bl
cmF0aW9uMTo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRp
b24yOjphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV9mbjEoX01fZm4y
KF9feCksIF9NX2ZuMyhfX3gpKTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbjEs
IGNsYXNzIF9PcGVyYXRpb24yLCBjbGFzcyBfT3BlcmF0aW9uMz4KaW5saW5lIGJpbmFyeV9jb21w
b3NlPF9PcGVyYXRpb24xLCBfT3BlcmF0aW9uMiwgX09wZXJhdGlvbjM+CmNvbXBvc2UyKGNvbnN0
IF9PcGVyYXRpb24xJiBfX2ZuMSwgY29uc3QgX09wZXJhdGlvbjImIF9fZm4yLAogICAgICAgICBj
b25zdCBfT3BlcmF0aW9uMyYgX19mbjMpCnsKICByZXR1cm4gYmluYXJ5X2NvbXBvc2U8X09wZXJh
dGlvbjEsX09wZXJhdGlvbjIsX09wZXJhdGlvbjM+CiAgICAoX19mbjEsIF9fZm4yLCBfX2ZuMyk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3Rv
X3VuYXJ5X2Z1bmN0aW9uIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHsK
cHJvdGVjdGVkOgogIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcpOwpwdWJsaWM6CiAgcG9pbnRlcl90
b191bmFyeV9mdW5jdGlvbigpIHt9CiAgZXhwbGljaXQgcG9pbnRlcl90b191bmFyeV9mdW5jdGlv
bihfUmVzdWx0ICgqX194KShfQXJnKSkgOiBfTV9wdHIoX194KSB7fQogIF9SZXN1bHQgb3BlcmF0
b3IoKShfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gX01fcHRyKF9feCk7IH0KfTsKCnRlbXBsYXRl
IDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgppbmxpbmUgcG9pbnRlcl90b191bmFyeV9mdW5j
dGlvbjxfQXJnLCBfUmVzdWx0PiBwdHJfZnVuKF9SZXN1bHQgKCpfX3gpKF9BcmcpKQp7CiAgcmV0
dXJuIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4oX194KTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4KY2xhc3MgcG9p
bnRlcl90b19iaW5hcnlfZnVuY3Rpb24gOgogIHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X0FyZzEs
X0FyZzIsX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6CiAgICBfUmVzdWx0ICgqX01fcHRyKShfQXJnMSwg
X0FyZzIpOwpwdWJsaWM6CiAgICBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbigpIHt9CiAgICBl
eHBsaWNpdCBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbihfUmVzdWx0ICgqX194KShfQXJnMSwg
X0FyZzIpKQogICAgICA6IF9NX3B0cihfX3gpIHt9CiAgICBfUmVzdWx0IG9wZXJhdG9yKCkoX0Fy
ZzEgX194LCBfQXJnMiBfX3kpIGNvbnN0IHsKICAgICAgcmV0dXJuIF9NX3B0cihfX3gsIF9feSk7
CiAgICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVz
dWx0PgppbmxpbmUgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3Vs
dD4KcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnMSwgX0FyZzIpKSB7CiAgcmV0dXJuIHBvaW50
ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+KF9feCk7Cn0KCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX0lkZW50aXR5IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PF9UcCxfVHA+IHsKICBfVHAmIG9wZXJhdG9yKCkoX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9f
eDsgfQogIGNvbnN0IF9UcCYgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1
cm4gX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBzdHJ1Y3QgaWRlbnRpdHkgOiBwdWJs
aWMgX0lkZW50aXR5PF9UcD4ge307CgoKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPgpzdHJ1Y3QgX1Nl
bGVjdDFzdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6OmZp
cnN0X3R5cGU+IHsKICB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZSYgb3BlcmF0b3IoKShfUGFp
ciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LmZpcnN0OwogIH0KICBjb25zdCB0eXBlbmFt
ZSBfUGFpcjo6Zmlyc3RfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfUGFpciYgX194KSBjb25zdCB7
CiAgICByZXR1cm4gX194LmZpcnN0OwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4Kc3Ry
dWN0IF9TZWxlY3QybmQgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1BhaXIsIHR5cGVuYW1lIF9Q
YWlyOjpzZWNvbmRfdHlwZT4KewogIHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZSYgb3BlcmF0
b3IoKShfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LnNlY29uZDsKICB9CiAgY29u
c3QgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9QYWlyJiBf
X3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guc2Vjb25kOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFz
cyBfUGFpcj4gc3RydWN0IHNlbGVjdDFzdCA6IHB1YmxpYyBfU2VsZWN0MXN0PF9QYWlyPiB7fTsK
dGVtcGxhdGUgPGNsYXNzIF9QYWlyPiBzdHJ1Y3Qgc2VsZWN0Mm5kIDogcHVibGljIF9TZWxlY3Qy
bmQ8X1BhaXI+IHt9OwoKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzI+CnN0cnVj
dCBfUHJvamVjdDFzdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X0FyZzEsIF9BcmcyLCBfQXJn
MT4gewogIF9BcmcxIG9wZXJhdG9yKCkoY29uc3QgX0FyZzEmIF9feCwgY29uc3QgX0FyZzImKSBj
b25zdCB7IHJldHVybiBfX3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0Fy
ZzI+CnN0cnVjdCBfUHJvamVjdDJuZCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X0FyZzEsIF9B
cmcyLCBfQXJnMj4gewogIF9BcmcyIG9wZXJhdG9yKCkoY29uc3QgX0FyZzEmLCBjb25zdCBfQXJn
MiYgX195KSBjb25zdCB7IHJldHVybiBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwg
Y2xhc3MgX0FyZzI+CnN0cnVjdCBwcm9qZWN0MXN0IDogcHVibGljIF9Qcm9qZWN0MXN0PF9Bcmcx
LCBfQXJnMj4ge307Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3Qg
cHJvamVjdDJuZCA6IHB1YmxpYyBfUHJvamVjdDJuZDxfQXJnMSwgX0FyZzI+IHt9OwoKCgoKCnRl
bXBsYXRlIDxjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgX0NvbnN0YW50X3ZvaWRfZnVuIHsKICB0eXBl
ZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7CiAgcmVzdWx0X3R5cGUgX01fdmFsOwoKICBfQ29uc3Rh
bnRfdm9pZF9mdW4oY29uc3QgcmVzdWx0X3R5cGUmIF9fdikgOiBfTV92YWwoX192KSB7fQogIGNv
bnN0IHJlc3VsdF90eXBlJiBvcGVyYXRvcigpKCkgY29uc3QgeyByZXR1cm4gX01fdmFsOyB9Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdCwgY2xhc3MgX0FyZ3VtZW50PgpzdHJ1Y3QgX0NvbnN0
YW50X3VuYXJ5X2Z1biB7CiAgdHlwZWRlZiBfQXJndW1lbnQgYXJndW1lbnRfdHlwZTsKICB0eXBl
ZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7CiAgcmVzdWx0X3R5cGUgX01fdmFsOwoKICBfQ29uc3Rh
bnRfdW5hcnlfZnVuKGNvbnN0IHJlc3VsdF90eXBlJiBfX3YpIDogX01fdmFsKF9fdikge30KICBj
b25zdCByZXN1bHRfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfQXJndW1lbnQmKSBjb25zdCB7IHJl
dHVybiBfTV92YWw7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0LCBjbGFzcyBfQXJnMSwg
Y2xhc3MgX0FyZzI+CnN0cnVjdCBfQ29uc3RhbnRfYmluYXJ5X2Z1biB7CiAgdHlwZWRlZiBfQXJn
MSBmaXJzdF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX0FyZzIgc2Vjb25kX2FyZ3VtZW50X3R5
cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwogIF9SZXN1bHQgX01fdmFsOwoKICBf
Q29uc3RhbnRfYmluYXJ5X2Z1bihjb25zdCBfUmVzdWx0JiBfX3YpIDogX01fdmFsKF9fdikge30K
ICBjb25zdCByZXN1bHRfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfQXJnMSYsIGNvbnN0IF9Bcmcy
JikgY29uc3QgewogICAgcmV0dXJuIF9NX3ZhbDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jl
c3VsdD4Kc3RydWN0IGNvbnN0YW50X3ZvaWRfZnVuIDogcHVibGljIF9Db25zdGFudF92b2lkX2Z1
bjxfUmVzdWx0PiB7CiAgY29uc3RhbnRfdm9pZF9mdW4oY29uc3QgX1Jlc3VsdCYgX192KSA6IF9D
b25zdGFudF92b2lkX2Z1bjxfUmVzdWx0PihfX3YpIHt9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9S
ZXN1bHQsCiAgICAgICAgICBjbGFzcyBfQXJndW1lbnQgPSBfUmVzdWx0PgpzdHJ1Y3QgY29uc3Rh
bnRfdW5hcnlfZnVuIDogcHVibGljIF9Db25zdGFudF91bmFyeV9mdW48X1Jlc3VsdCwgX0FyZ3Vt
ZW50Pgp7CiAgY29uc3RhbnRfdW5hcnlfZnVuKGNvbnN0IF9SZXN1bHQmIF9fdikKICAgIDogX0Nv
bnN0YW50X3VuYXJ5X2Z1bjxfUmVzdWx0LCBfQXJndW1lbnQ+KF9fdikge30KfTsKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1Jlc3VsdCwKICAgICAgICAgIGNsYXNzIF9BcmcxID0gX1Jlc3VsdCwKICAgICAg
ICAgIGNsYXNzIF9BcmcyID0gX0FyZzE+CnN0cnVjdCBjb25zdGFudF9iaW5hcnlfZnVuCiAgOiBw
dWJsaWMgX0NvbnN0YW50X2JpbmFyeV9mdW48X1Jlc3VsdCwgX0FyZzEsIF9BcmcyPgp7CiAgY29u
c3RhbnRfYmluYXJ5X2Z1bihjb25zdCBfUmVzdWx0JiBfX3YpCiAgICA6IF9Db25zdGFudF9iaW5h
cnlfZnVuPF9SZXN1bHQsIF9BcmcxLCBfQXJnMj4oX192KSB7fQp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9SZXN1bHQ+CmlubGluZSBjb25zdGFudF92b2lkX2Z1bjxfUmVzdWx0PiBjb25zdGFudDAoY29u
c3QgX1Jlc3VsdCYgX192YWwpCnsKICByZXR1cm4gY29uc3RhbnRfdm9pZF9mdW48X1Jlc3VsdD4o
X192YWwpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4KaW5saW5lIGNvbnN0YW50X3VuYXJ5
X2Z1bjxfUmVzdWx0LF9SZXN1bHQ+IGNvbnN0YW50MShjb25zdCBfUmVzdWx0JiBfX3ZhbCkKewog
IHJldHVybiBjb25zdGFudF91bmFyeV9mdW48X1Jlc3VsdCxfUmVzdWx0PihfX3ZhbCk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfUmVzdWx0PgppbmxpbmUgY29uc3RhbnRfYmluYXJ5X2Z1bjxfUmVzdWx0
LF9SZXN1bHQsX1Jlc3VsdD4KY29uc3RhbnQyKGNvbnN0IF9SZXN1bHQmIF9fdmFsKQp7CiAgcmV0
dXJuIGNvbnN0YW50X2JpbmFyeV9mdW48X1Jlc3VsdCxfUmVzdWx0LF9SZXN1bHQ+KF9fdmFsKTsK
fQoKCgpjbGFzcyBzdWJ0cmFjdGl2ZV9ybmcgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dW5zaWdu
ZWQgaW50LCB1bnNpZ25lZCBpbnQ+IHsKcHJpdmF0ZToKICB1bnNpZ25lZCBpbnQgX01fdGFibGVb
NTVdOwogIHNpemVfdCBfTV9pbmRleDE7CiAgc2l6ZV90IF9NX2luZGV4MjsKcHVibGljOgogIHVu
c2lnbmVkIGludCBvcGVyYXRvcigpKHVuc2lnbmVkIGludCBfX2xpbWl0KSB7CiAgICBfTV9pbmRl
eDEgPSAoX01faW5kZXgxICsgMSkgJSA1NTsKICAgIF9NX2luZGV4MiA9IChfTV9pbmRleDIgKyAx
KSAlIDU1OwogICAgX01fdGFibGVbX01faW5kZXgxXSA9IF9NX3RhYmxlW19NX2luZGV4MV0gLSBf
TV90YWJsZVtfTV9pbmRleDJdOwogICAgcmV0dXJuIF9NX3RhYmxlW19NX2luZGV4MV0gJSBfX2xp
bWl0OwogIH0KCiAgdm9pZCBfTV9pbml0aWFsaXplKHVuc2lnbmVkIGludCBfX3NlZWQpCiAgewog
ICAgdW5zaWduZWQgaW50IF9fayA9IDE7CiAgICBfTV90YWJsZVs1NF0gPSBfX3NlZWQ7CiAgICBz
aXplX3QgX19pOwogICAgZm9yIChfX2kgPSAwOyBfX2kgPCA1NDsgX19pKyspIHsKICAgICAgICBz
aXplX3QgX19paSA9ICgyMSAqIChfX2kgKyAxKSAlIDU1KSAtIDE7CiAgICAgICAgX01fdGFibGVb
X19paV0gPSBfX2s7CiAgICAgICAgX19rID0gX19zZWVkIC0gX19rOwogICAgICAgIF9fc2VlZCA9
IF9NX3RhYmxlW19faWldOwogICAgfQogICAgZm9yIChpbnQgX19sb29wID0gMDsgX19sb29wIDwg
NDsgX19sb29wKyspIHsKICAgICAgICBmb3IgKF9faSA9IDA7IF9faSA8IDU1OyBfX2krKykKICAg
ICAgICAgICAgX01fdGFibGVbX19pXSA9IF9NX3RhYmxlW19faV0gLSBfTV90YWJsZVsoMSArIF9f
aSArIDMwKSAlIDU1XTsKICAgIH0KICAgIF9NX2luZGV4MSA9IDA7CiAgICBfTV9pbmRleDIgPSAz
MTsKICB9CgogIHN1YnRyYWN0aXZlX3JuZyh1bnNpZ25lZCBpbnQgX19zZWVkKSB7IF9NX2luaXRp
YWxpemUoX19zZWVkKTsgfQogIHN1YnRyYWN0aXZlX3JuZygpIHsgX01faW5pdGlhbGl6ZSgxNjE4
MDMzOTh1KTsgfQp9OwojIDUxOSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRl
IDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9m
dW5jdGlvbjxfVHAqLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fdChfUmV0IChf
VHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwKiBfX3Ap
IGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoq
X01fZikoKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0
X21lbV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9SZXQ+IHsKcHVi
bGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0
KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0
IHsgcmV0dXJuIChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZiko
KSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1f
ZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBl
eHBsaWNpdCBtZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7
fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZiko
KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JldCwgY2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5
X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3Jl
Zl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3Bl
cmF0b3IoKShjb25zdCBfVHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpw
cml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV90IDogcHVibGljIGJp
bmFyeV9mdW5jdGlvbjxfVHAqLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1
bjFfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVy
YXRvcigpKF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9f
eCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKTsKfTsKCnRlbXBsYXRlIDxj
bGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3Qg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoK
ICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0
KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9Bcmcg
X194KSBjb25zdAogICAgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBf
UmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBj
bGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFy
eV9mdW5jdGlvbjxfVHAsX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV9y
ZWZfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVy
YXRvcigpKF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoX194
KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfcmVm
X3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4
cGxpY2l0IGNvbnN0X21lbV9mdW4xX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0
KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IsIF9Bcmcg
X194KSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAo
X1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBt
ZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLHZvaWQ+IHsK
cHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2Yo
X19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2Yp
KCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVu
Y3Rpb248Y29uc3QgX1RwKix2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVu
X3Qodm9pZCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVy
YXRvcigpKGNvbnN0IF9UcCogX19wKSBjb25zdCB7IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6
CiAgdm9pZCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNs
YXNzIG1lbV9mdW5fcmVmX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAs
dm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl9yZWZfdCh2b2lkIChfVHA6OipfX3Bm
KSgpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3IpIGNvbnN0IHsg
KF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCk7Cn07Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBw
dWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0
X21lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9
CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7
IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+IDog
cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGlj
aXQgbWVtX2Z1bjFfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAg
dm9pZCBvcGVyYXRvcigpKF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QgeyAoX19wLT4qX01fZiko
X194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfdDx2b2lkLCBfVHAs
IF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0FyZyx2b2lkPiB7
CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV90KHZvaWQgKF9UcDo6Kl9fcGYpKF9B
cmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwKiBf
X3AsIF9BcmcgX194KSBjb25zdCB7IChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9p
ZCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMg
YmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9m
dW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICB2b2lk
IG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7
IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwg
X0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6
CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykg
Y29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwg
X0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9U
cDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNs
YXNzIF9UcD4KaW5saW5lIG1lbV9mdW5fdDxfUmV0LF9UcD4gbWVtX2Z1bihfUmV0IChfVHA6Oipf
X2YpKCkpCiAgeyByZXR1cm4gbWVtX2Z1bl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl90PF9SZXQsX1RwPiBt
ZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVu
X3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+Cmlu
bGluZSBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2Yp
KCkpCiAgeyByZXR1cm4gbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUg
PGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxf
VHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoKSBjb25zdCkKICB7IHJldHVybiBjb25z
dF9tZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg
Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBt
ZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfdDxfUmV0
LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFz
cyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuKF9S
ZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfdDxf
UmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBj
bGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bl9y
ZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV9yZWZfdDxfUmV0
LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFz
cyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4KbWVtX2Z1
bl9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1f
ZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg
Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBt
ZW1fZnVuMShfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3Q8X1Jl
dCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xh
c3MgX0FyZz4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bjEo
X1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV90
PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAs
IGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVu
MV9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV9yZWZfdDxf
UmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBj
bGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4KbWVt
X2Z1bjFfcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3Rf
bWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKfQojIDIyICIvdXNyL2xvY2Fs
L2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMv
c3RkX2Z1bmN0aW9uYWwuaCIgMiAzCiMgMyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9mdW5jdGlvbmFsIiAyIDMKIyA2OSAiUGxh
dGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiIDIKCgoKCgoKCiMgMSAiL3Vzci9sb2Nh
bC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9pb3Nm
d2QiIDEgMwojIDc3ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIgMgoKIyAx
ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1
ZGUvZysrL3ZlY3RvciIgMSAzCiMgNzkgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIu
aHBwIiAyCiMgODcgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgojIDEgIi91
c3IvaW5jbHVkZS93Y3R5cGUuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL3djdHlw
ZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAzMSAiL3Vzci9p
bmNsdWRlL3djdHlwZS5oIiAyIDMKCgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNiAiL3Vzci9p
bmNsdWRlL3djdHlwZS5oIiAyIDMKIyA2MSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCnR5cGVk
ZWYgdW5zaWduZWQgbG9uZyBpbnQgd2N0eXBlX3Q7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2Vu
ZGlhbi5oIiAxIDMKIyA2OSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAyIDMKCgoKCgoKCmVudW0K
ewogIF9JU3d1cHBlciA9ICgoMCkgPCA4ID8gKGludCkgKDFVTCA8PCAoMCkgPDwgMjQpIDogKGlu
dCkgKDFVTCA8PCAoKDApICsgOCkpKSwKICBfSVN3bG93ZXIgPSAoKDEpIDwgOCA/IChpbnQpICgx
VUwgPDwgKDEpIDw8IDI0KSA6IChpbnQpICgxVUwgPDwgKCgxKSArIDgpKSksCiAgX0lTd2FscGhh
ID0gKCgyKSA8IDggPyAoaW50KSAoMVVMIDw8ICgyKSA8PCAyNCkgOiAoaW50KSAoMVVMIDw8ICgo
MikgKyA4KSkpLAogIF9JU3dkaWdpdCA9ICgoMykgPCA4ID8gKGludCkgKDFVTCA8PCAoMykgPDwg
MjQpIDogKGludCkgKDFVTCA8PCAoKDMpICsgOCkpKSwKICBfSVN3eGRpZ2l0ID0gKCg0KSA8IDgg
PyAoaW50KSAoMVVMIDw8ICg0KSA8PCAyNCkgOiAoaW50KSAoMVVMIDw8ICgoNCkgKyA4KSkpLAog
IF9JU3dzcGFjZSA9ICgoNSkgPCA4ID8gKGludCkgKDFVTCA8PCAoNSkgPDwgMjQpIDogKGludCkg
KDFVTCA8PCAoKDUpICsgOCkpKSwKICBfSVN3cHJpbnQgPSAoKDYpIDwgOCA/IChpbnQpICgxVUwg
PDwgKDYpIDw8IDI0KSA6IChpbnQpICgxVUwgPDwgKCg2KSArIDgpKSksCiAgX0lTd2dyYXBoID0g
KCg3KSA8IDggPyAoaW50KSAoMVVMIDw8ICg3KSA8PCAyNCkgOiAoaW50KSAoMVVMIDw8ICgoNykg
KyA4KSkpLAogIF9JU3dibGFuayA9ICgoOCkgPCA4ID8gKGludCkgKDFVTCA8PCAoOCkgPDwgMjQp
IDogKGludCkgKDFVTCA8PCAoKDgpICsgOCkpKSwKICBfSVN3Y250cmwgPSAoKDkpIDwgOCA/IChp
bnQpICgxVUwgPDwgKDkpIDw8IDI0KSA6IChpbnQpICgxVUwgPDwgKCg5KSArIDgpKSksCiAgX0lT
d3B1bmN0ID0gKCgxMCkgPCA4ID8gKGludCkgKDFVTCA8PCAoMTApIDw8IDI0KSA6IChpbnQpICgx
VUwgPDwgKCgxMCkgKyA4KSkpLAogIF9JU3dhbG51bSA9ICgoMTEpIDwgOCA/IChpbnQpICgxVUwg
PDwgKDExKSA8PCAyNCkgOiAoaW50KSAoMVVMIDw8ICgoMTEpICsgOCkpKQp9OwoKCgpleHRlcm4g
IkMiIHsKCgoKCgoKCmV4dGVybiBpbnQgaXN3YWxudW0gKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gaW50IGlzd2FscGhhICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBpc3djbnRybCAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlzd2Rp
Z2l0ICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaXN3Z3JhcGggKHdpbnRf
dCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3bG93ZXIgKHdpbnRfdCBfX3djKSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzd3ByaW50ICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoK
CgpleHRlcm4gaW50IGlzd3B1bmN0ICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4g
aW50IGlzd3NwYWNlICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3Vw
cGVyICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3hkaWdpdCAod2lu
dF90IF9fd2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgaXN3YmxhbmsgKHdpbnRfdCBfX3dj
KSB0aHJvdyAoKTsKIyAxNjIgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwpleHRlcm4gd2N0eXBl
X3QgX193Y3R5cGUgKF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSkgdGhyb3cgKCk7CmV4dGVybiB3
Y3R5cGVfdCB3Y3R5cGUgKF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSkgdGhyb3cgKCk7CgoKCmV4
dGVybiBpbnQgX19pc3djdHlwZSAod2ludF90IF9fd2MsIHdjdHlwZV90IF9fZGVzYykgdGhyb3cg
KCk7CmV4dGVybiBpbnQgaXN3Y3R5cGUgKHdpbnRfdCBfX3djLCB3Y3R5cGVfdCBfX2Rlc2MpIHRo
cm93ICgpOwojIDIyNyAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCnR5cGVkZWYgX19jb25zdCBf
X2ludDMyX3QgKndjdHJhbnNfdDsKCgpleHRlcm4gd2ludF90IHRvd2xvd2VyICh3aW50X3QgX193
YykgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCB0b3d1cHBlciAod2ludF90IF9fd2MpIHRocm93
ICgpOwoKCmV4dGVybiB3aW50X3QgX190b3djdHJhbnMgKHdpbnRfdCBfX3djLCB3Y3RyYW5zX3Qg
X19kZXNjKSB0aHJvdyAoKTsKCn0KIyAyNTEgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwpleHRl
cm4gIkMiIHsKCgoKZXh0ZXJuIHdjdHJhbnNfdCB3Y3RyYW5zIChfX2NvbnN0IGNoYXIgKl9fcHJv
cGVydHkpIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgdG93Y3RyYW5zICh3aW50X3QgX193Yywg
d2N0cmFuc190IF9fZGVzYykgdGhyb3cgKCk7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUu
aCIgMSAzCiMgMjYzICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDIgMwoKCgpleHRlcm4gaW50IF9f
aXN3YWxudW1fbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoK
CgoKCmV4dGVybiBpbnQgX19pc3dhbHBoYV9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xv
Y2FsZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX2lzd2NudHJsX2wgKHdpbnRfdCBfX3djLCBf
X2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2lzd2RpZ2l0X2wg
KHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu
dCBfX2lzd2dyYXBoX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBpbnQgX19pc3dsb3dlcl9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBf
X2xvY2FsZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX2lzd3ByaW50X2wgKHdpbnRfdCBfX3dj
LCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc3dwdW5j
dF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRl
cm4gaW50IF9faXN3c3BhY2VfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd3VwcGVyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2Fs
ZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc3d4ZGlnaXRfbCAod2lu
dF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBf
X2lzd2JsYW5rX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIHdjdHlwZV90IF9fd2N0eXBlX2wgKF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSwg
X19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXN3Y3R5cGVf
bCAod2ludF90IF9fd2MsIHdjdHlwZV90IF9fZGVzYywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhy
b3cgKCk7CiMgMzM0ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMKZXh0ZXJuIHdpbnRfdCBfX3Rv
d2xvd2VyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgpl
eHRlcm4gd2ludF90IF9fdG93dXBwZXJfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2Nh
bGUpIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgX190b3djdHJhbnNfbCAod2ludF90IF9fd2Ms
IHdjdHJhbnNfdCBfX2Rlc2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKfQoj
IDg4ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIgMgoKCgojIDEgIlhhbGFu
RE9NL1hhbGFuRE9NU3RyaW5nLmhwcCIgMQojIDkyICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5n
SGVscGVyLmhwcCIgMgoKCgojIDEgIlBsYXRmb3JtU3VwcG9ydC9YYWxhblVuaWNvZGUuaHBwIiAx
CiMgNjMgIlBsYXRmb3JtU3VwcG9ydC9YYWxhblVuaWNvZGUuaHBwIgojIDEgIlBsYXRmb3JtU3Vw
cG9ydC9QbGF0Zm9ybVN1cHBvcnREZWZpbml0aW9ucy5ocHAiIDEKIyA2NCAiUGxhdGZvcm1TdXBw
b3J0L1hhbGFuVW5pY29kZS5ocHAiIDIKCgoKIyAxICJYYWxhbkRPTS9YYWxhbkRPTVN0cmluZy5o
cHAiIDEKIyA2OCAiUGxhdGZvcm1TdXBwb3J0L1hhbGFuVW5pY29kZS5ocHAiIDIKCgoKCgoKbmFt
ZXNwYWNlIFhhbGFuVW5pY29kZQoKewojIDIwOSAiUGxhdGZvcm1TdXBwb3J0L1hhbGFuVW5pY29k
ZS5ocHAiCiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFySFRhYiA9IDB4MDk7
CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyTEYgPSAweDBBOwogICAgICAg
IHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhckNSID0gMHgwRDsKICAgICAgICBzdGF0aWMg
Y29uc3QgWGFsYW5ET01DaGFyIGNoYXJGRiA9IDB4MEM7CiAgICAgICAgc3RhdGljIGNvbnN0IFhh
bGFuRE9NQ2hhciBjaGFyU3BhY2UgPSAweDIwOwoKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5E
T01DaGFyIGNoYXJFeGNsYW1hdGlvbk1hcmsgPSAweDIxOwoKICAgICAgICBzdGF0aWMgY29uc3Qg
WGFsYW5ET01DaGFyIGNoYXJRdW90ZU1hcmsgPSAweDIyOwoKICAgICAgICBzdGF0aWMgY29uc3Qg
WGFsYW5ET01DaGFyIGNoYXJOdW1iZXJTaWduID0gMHgyMzsKCiAgICAgICAgc3RhdGljIGNvbnN0
IFhhbGFuRE9NQ2hhciBjaGFyRG9sbGFyU2lnbiA9IDB4MjQ7CgogICAgICAgIHN0YXRpYyBjb25z
dCBYYWxhbkRPTUNoYXIgY2hhclBlcmNlbnRTaWduID0gMHgyNTsKCiAgICAgICAgc3RhdGljIGNv
bnN0IFhhbGFuRE9NQ2hhciBjaGFyQW1wZXJzYW5kID0gMHgyNjsKCiAgICAgICAgc3RhdGljIGNv
bnN0IFhhbGFuRE9NQ2hhciBjaGFyQXBvc3Ryb3BoZSA9IDB4Mjc7CgogICAgICAgIHN0YXRpYyBj
b25zdCBYYWxhbkRPTUNoYXIgY2hhckxlZnRQYXJlbnRoZXNpcyA9IDB4Mjg7CiAgICAgICAgc3Rh
dGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyUmlnaHRQYXJlbnRoZXNpcyA9IDB4Mjk7CgogICAg
ICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhckFzdGVyaXNrID0gMHgyQTsKCiAgICAg
ICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyUGx1c1NpZ24gPSAweDJCOwoKICAgICAg
ICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJDb21tYSA9IDB4MkM7CgogICAgICAgIHN0
YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhckh5cGhlbk1pbnVzID0gMHgyRDsKCiAgICAgICAg
c3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyRnVsbFN0b3AgPSAweDJFOwoKICAgICAgICBz
dGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJTb2xpZHVzID0gMHgyRjsKCiAgICAgICAgc3Rh
dGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyRGlnaXRfMCA9IDB4MzA7CiAgICAgICAgc3RhdGlj
IGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyRGlnaXRfMSA9IDB4MzE7CiAgICAgICAgc3RhdGljIGNv
bnN0IFhhbGFuRE9NQ2hhciBjaGFyRGlnaXRfMiA9IDB4MzI7CiAgICAgICAgc3RhdGljIGNvbnN0
IFhhbGFuRE9NQ2hhciBjaGFyRGlnaXRfMyA9IDB4MzM7CiAgICAgICAgc3RhdGljIGNvbnN0IFhh
bGFuRE9NQ2hhciBjaGFyRGlnaXRfNCA9IDB4MzQ7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFu
RE9NQ2hhciBjaGFyRGlnaXRfNSA9IDB4MzU7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9N
Q2hhciBjaGFyRGlnaXRfNiA9IDB4MzY7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hh
ciBjaGFyRGlnaXRfNyA9IDB4Mzc7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBj
aGFyRGlnaXRfOCA9IDB4Mzg7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFy
RGlnaXRfOSA9IDB4Mzk7CgogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhckNv
bG9uID0gMHgzQTsKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJTZW1pY29s
b24gPSAweDNCOwoKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJMZXNzVGhh
blNpZ24gPSAweDNDOwoKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJFcXVh
bHNTaWduID0gMHgzRDsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyR3Jl
YXRlclRoYW5TaWduID0gMHgzRTsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBj
aGFyUXVlc3Rpb25NYXJrID0gMHgzRjsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hh
ciBjaGFyQ29tbWVyY2lhbEF0ID0gMHg0MDsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9N
Q2hhciBjaGFyTGV0dGVyX0EgPSAweDQxOwogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNo
YXIgY2hhckxldHRlcl9CID0gMHg0MjsKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFy
IGNoYXJMZXR0ZXJfQyA9IDB4NDM7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBj
aGFyTGV0dGVyX0QgPSAweDQ0OwogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hh
ckxldHRlcl9FID0gMHg0NTsKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJM
ZXR0ZXJfRiA9IDB4NDY7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyTGV0
dGVyX0cgPSAweDQ3OwogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhckxldHRl
cl9IID0gMHg0ODsKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJMZXR0ZXJf
SSA9IDB4NDk7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVyX0og
PSAweDRBOwogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhckxldHRlcl9LID0g
MHg0QjsKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJMZXR0ZXJfTCA9IDB4
NEM7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVyX00gPSAweDRE
OwogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhckxldHRlcl9OID0gMHg0RTsK
ICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJMZXR0ZXJfTyA9IDB4NEY7CiAg
ICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVyX1AgPSAweDUwOwogICAg
ICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhckxldHRlcl9RID0gMHg1MTsKICAgICAg
ICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJMZXR0ZXJfUiA9IDB4NTI7CiAgICAgICAg
c3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVyX1MgPSAweDUzOwogICAgICAgIHN0
YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhckxldHRlcl9UID0gMHg1NDsKICAgICAgICBzdGF0
aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJMZXR0ZXJfVSA9IDB4NTU7CiAgICAgICAgc3RhdGlj
IGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVyX1YgPSAweDU2OwogICAgICAgIHN0YXRpYyBj
b25zdCBYYWxhbkRPTUNoYXIgY2hhckxldHRlcl9XID0gMHg1NzsKICAgICAgICBzdGF0aWMgY29u
c3QgWGFsYW5ET01DaGFyIGNoYXJMZXR0ZXJfWCA9IDB4NTg7CiAgICAgICAgc3RhdGljIGNvbnN0
IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVyX1kgPSAweDU5OwogICAgICAgIHN0YXRpYyBjb25zdCBY
YWxhbkRPTUNoYXIgY2hhckxldHRlcl9aID0gMHg1QTsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhh
bGFuRE9NQ2hhciBjaGFyTGVmdFNxdWFyZUJyYWNrZXQgPSAweDVCOwoKICAgICAgICBzdGF0aWMg
Y29uc3QgWGFsYW5ET01DaGFyIGNoYXJSZXZlcnNlU29saWR1cyA9IDB4NUM7CgogICAgICAgIHN0
YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhclJpZ2h0U3F1YXJlQnJhY2tldCA9IDB4NUQ7Cgog
ICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhckNpcmN1bWZsZXhBY2NlbnQgPSAw
eDVFOwoKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJMb3dMaW5lID0gMHg1
RjsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVyX2EgPSAweDYx
OwogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhckxldHRlcl9iID0gMHg2MjsK
ICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJMZXR0ZXJfYyA9IDB4NjM7CiAg
ICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVyX2QgPSAweDY0OwogICAg
ICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhckxldHRlcl9lID0gMHg2NTsKICAgICAg
ICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJMZXR0ZXJfZiA9IDB4NjY7CiAgICAgICAg
c3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVyX2cgPSAweDY3OwogICAgICAgIHN0
YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhckxldHRlcl9pID0gMHg2OTsKICAgICAgICBzdGF0
aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJMZXR0ZXJfbCA9IDB4NkM7CiAgICAgICAgc3RhdGlj
IGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVyX20gPSAweDZEOwogICAgICAgIHN0YXRpYyBj
b25zdCBYYWxhbkRPTUNoYXIgY2hhckxldHRlcl9uID0gMHg2RTsKICAgICAgICBzdGF0aWMgY29u
c3QgWGFsYW5ET01DaGFyIGNoYXJMZXR0ZXJfbyA9IDB4NkY7CiAgICAgICAgc3RhdGljIGNvbnN0
IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVyX3AgPSAweDcwOwogICAgICAgIHN0YXRpYyBjb25zdCBY
YWxhbkRPTUNoYXIgY2hhckxldHRlcl9xID0gMHg3MTsKICAgICAgICBzdGF0aWMgY29uc3QgWGFs
YW5ET01DaGFyIGNoYXJMZXR0ZXJfciA9IDB4NzI7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFu
RE9NQ2hhciBjaGFyTGV0dGVyX3MgPSAweDczOwogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRP
TUNoYXIgY2hhckxldHRlcl90ID0gMHg3NDsKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01D
aGFyIGNoYXJMZXR0ZXJfdSA9IDB4NzU7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hh
ciBjaGFyTGV0dGVyX3cgPSAweDc3OwogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIg
Y2hhckxldHRlcl94ID0gMHg3ODsKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNo
YXJMZXR0ZXJfeSA9IDB4Nzk7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFy
TGV0dGVyX3ogPSAweDdBOwoKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJM
ZWZ0Q3VybHlCcmFja2V0ID0gMHg3QjsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hh
ciBjaGFyVmVydGljYWxMaW5lID0gMHg3QzsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9N
Q2hhciBjaGFyUmlnaHRDdXJseUJyYWNrZXQgPSAweDdEOwojIDM1MyAiUGxhdGZvcm1TdXBwb3J0
L1hhbGFuVW5pY29kZS5ocHAiCn07CiMgOTYgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxw
ZXIuaHBwIiAyCiMgMSAiUGxhdGZvcm1TdXBwb3J0L1hhbGFuWE1MQ2hhci5ocHAiIDEKIyA2MyAi
UGxhdGZvcm1TdXBwb3J0L1hhbGFuWE1MQ2hhci5ocHAiCiMgMSAiUGxhdGZvcm1TdXBwb3J0L1Bs
YXRmb3JtU3VwcG9ydERlZmluaXRpb25zLmhwcCIgMQojIDY0ICJQbGF0Zm9ybVN1cHBvcnQvWGFs
YW5YTUxDaGFyLmhwcCIgMgoKCgojIDEgIlhhbGFuRE9NL1hhbGFuRE9NU3RyaW5nLmhwcCIgMQoj
IDY4ICJQbGF0Zm9ybVN1cHBvcnQvWGFsYW5YTUxDaGFyLmhwcCIgMgoKCgpzdHJ1Y3QgWGFsYW5Y
TUxDaGFyCnsKCnB1YmxpYzoKCiAgICAgICAgZW51bSBlVHlwZQogICAgICAgIHsKICAgICAgICAg
ICAgICAgIFhNTF9YWCA9IDAsCiAgICAgICAgICAgICAgICBYTUxfQkMgPSAxLAogICAgICAgICAg
ICAgICAgWE1MX0lEID0gMiwKICAgICAgICAgICAgICAgIFhNTF9FWCA9IDMsCiAgICAgICAgICAg
ICAgICBYTUxfREkgPSA0LAogICAgICAgICAgICAgICAgWE1MX0NDID0gNSwKICAgICAgICAgICAg
ICAgIFhNTF9XUyA9IDYKICAgICAgICB9OwoKICAgIHN0YXRpYyBjb25zdCBjaGFyIHRoZVVuaWNv
ZGVUYWJsZVtdOwoKICAgICAgICBzdGF0aWMgYm9vbAogICAgICAgIGlzQmFzZUNoYXIoWGFsYW5E
T01DaGFyIGMpCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoZVVuaWNvZGVUYWJs
ZVtjXSA9PSBYTUxfQkM7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgYm9vbAogICAgICAgIGlz
SWRlb2dyYXBoaWMoWGFsYW5ET01DaGFyIGMpCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0
dXJuIHRoZVVuaWNvZGVUYWJsZVtjXSA9PSBYTUxfSUQ7CiAgICAgICAgfQoKICAgICAgICBzdGF0
aWMgYm9vbAogICAgICAgIGlzRXh0ZW5kZXIoWGFsYW5ET01DaGFyIGMpCiAgICAgICAgewogICAg
ICAgICAgICAgICAgcmV0dXJuIHRoZVVuaWNvZGVUYWJsZVtjXSA9PSBYTUxfRVg7CiAgICAgICAg
fQoKICAgICAgICBzdGF0aWMgYm9vbAogICAgICAgIGlzRGlnaXQoWGFsYW5ET01DaGFyIGMpCiAg
ICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoZVVuaWNvZGVUYWJsZVtjXSA9PSBYTUxf
REk7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgYm9vbAogICAgICAgIGlzQ29tYmluaW5nQ2hh
cihYYWxhbkRPTUNoYXIgYykKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhlVW5p
Y29kZVRhYmxlW2NdID09IFhNTF9DQzsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBib29sCiAg
ICAgICAgaXNXaGl0ZXNwYWNlKFhhbGFuRE9NQ2hhciBjKQogICAgICAgIHsKICAgICAgICAgICAg
ICAgIHJldHVybiB0aGVVbmljb2RlVGFibGVbY10gPT0gWE1MX1dTOwogICAgICAgIH0KCiAgICAg
ICAgc3RhdGljIGJvb2wKICAgICAgICBpc0xldHRlcihYYWxhbkRPTUNoYXIgYykKICAgICAgICB7
CiAgICAgICAgICAgICAgICByZXR1cm4gdGhlVW5pY29kZVRhYmxlW2NdID09IFhNTF9CQyB8fCB0
aGVVbmljb2RlVGFibGVbY10gPT0gWE1MX0lEOwogICAgICAgIH0KCgp9OwojIDk3ICJQbGF0Zm9y
bVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIgMgoKCgpjbGFzcyBYYWxhbk91dHB1dFN0cmVh
bTsKIyAxMzkgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgY29u
c3QgWGFsYW5ET01TdHJpbmcmClN0YXRpY1N0cmluZ1RvRE9NU3RyaW5nKGNvbnN0IFhhbGFuRE9N
U3RyaW5nJiB0aGVTdHJpbmcpCnsKICAgICAgICByZXR1cm4gdGhlU3RyaW5nOwp9CiMgMTUzICJQ
bGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKdm9pZApET01TdHJpbmdIZWxwZXJJ
bml0aWFsaXplKCk7CgoKCgoKCgp2b2lkCkRPTVN0cmluZ0hlbHBlclRlcm1pbmF0ZSgpOwojIDE3
NCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBjb25zdCBYYWxh
bkRPTUNoYXIqCmNfd3N0cihjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlU3RyaW5nKQp7CiAgICAg
ICAgcmV0dXJuIHRoZVN0cmluZy5jX3N0cigpOwp9CiMgMTg5ICJQbGF0Zm9ybVN1cHBvcnQvRE9N
U3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGNvbnN0IGNoYXIqCmNfc3RyKGNvbnN0IENoYXJWZWN0
b3JUeXBlJiB0aGVTdHJpbmcpCnsKICAgICAgICBpZiAodGhlU3RyaW5nLnNpemUoKSA9PSAwKQog
ICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICBlbHNl
CiAgICAgICAgewogICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3QgcHRyID0gJnRoZVN0
cmluZ1swXTsKCiAgICAgICAgICAgICAgICAoKHZvaWQpICgocHRyW3RoZVN0cmluZy5zaXplKCkg
LSAxXSA9PSAnXDAnKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoInB0clt0aGVTdHJpbmcuc2l6ZSgp
IC0gMV0gPT0gJ1xcMCciLCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiLCAy
MDAsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKICAgICAgICAgICAgICAgIHJldHVybiBw
dHI7CiAgICAgICAgfQp9CiMgMjIzICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhw
cCIKaW5saW5lIGNvbnN0IFhhbGFuRE9NQ2hhcioKY193c3RyKGNvbnN0IFhhbGFuRE9NQ2hhciog
dGhlU3RyaW5nKQp7CiAgICAgICAgcmV0dXJuIHRoZVN0cmluZzsKfQojIDIzOCAiUGxhdGZvcm1T
dXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBjb25zdCBYYWxhbkRPTUNoYXIqCnRv
Q2hhckFycmF5KGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmcpCnsKICAgICAgICByZXR1
cm4gdGhlU3RyaW5nLmNfc3RyKCk7Cn0KIyAyNTIgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdI
ZWxwZXIuaHBwIgppbmxpbmUgY29uc3QgWGFsYW5ET01DaGFyKgp0b0NoYXJBcnJheShjb25zdCBY
YWxhbkRPTUNoYXIqIHRoZVN0cmluZykKewogICAgICAgIHJldHVybiB0aGVTdHJpbmc7Cn0KIyAy
NjcgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgY29uc3QgY2hh
cioKdG9DaGFyQXJyYXkoY29uc3QgQ2hhclZlY3RvclR5cGUmIHRoZVN0cmluZykKewogICAgICAg
IHJldHVybiB0aGVTdHJpbmcuc2l6ZSgpID09IDAgPyAwIDogJnRoZVN0cmluZ1swXTsKfQojIDI4
MiAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSB2b2lkCnJlc2Vy
dmUoCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmcsCiAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0aGVDb3VudCkKewogICAgICAgIHRo
ZVN0cmluZy5yZXNlcnZlKHRoZUNvdW50KTsKfQojIDI5OCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0
cmluZ0hlbHBlci5ocHAiCmlubGluZSB1bnNpZ25lZCBpbnQKbGVuZ3RoKGNvbnN0IFhhbGFuRE9N
U3RyaW5nJiB0aGVTdHJpbmcpCnsKICAgICAgICByZXR1cm4gdGhlU3RyaW5nLmxlbmd0aCgpOwp9
CiMgMzEzICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIHVuc2ln
bmVkIGludApsZW5ndGgoY29uc3QgWGFsYW5ET01DaGFyKiB0aGVTdHJpbmcpCnsKICAgICAgICAo
KHZvaWQpICgodGhlU3RyaW5nICE9IDApID8gMCA6IChfX2Fzc2VydF9mYWlsICgidGhlU3RyaW5n
ICE9IDAiLCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiLCAzMTYsIF9fUFJF
VFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZUJ1
ZmZlclBvaW50ZXIgPSB0aGVTdHJpbmc7CgogICAgICAgIHdoaWxlKCp0aGVCdWZmZXJQb2ludGVy
ICE9IDApCiAgICAgICAgewogICAgICAgICAgICAgICAgdGhlQnVmZmVyUG9pbnRlcisrOwogICAg
ICAgIH0KCiAgICAgICAgcmV0dXJuIHRoZUJ1ZmZlclBvaW50ZXIgLSB0aGVTdHJpbmc7Cn0KIyAz
MzYgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgdW5zaWduZWQg
aW50Cmxlbmd0aChjb25zdCBjaGFyKiB0aGVTdHJpbmcpCnsKICAgICAgICAoKHZvaWQpICgodGhl
U3RyaW5nICE9IDApID8gMCA6IChfX2Fzc2VydF9mYWlsICgidGhlU3RyaW5nICE9IDAiLCAiUGxh
dGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiLCAzMzksIF9fUFJFVFRZX0ZVTkNUSU9O
X18pLCAwKSkpOwoKICAgICAgICByZXR1cm4gc3RybGVuKHRoZVN0cmluZyk7Cn0KIyAzNTIgIlBs
YXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgYm9vbAppc0VtcHR5KGNv
bnN0IFhhbGFuRE9NU3RyaW5nJiBzdHIpCnsKICAgICAgICByZXR1cm4gbGVuZ3RoKHN0cikgPT0g
MCA/IHRydWUgOiBmYWxzZTsKfQojIDM2OSAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBl
ci5ocHAiCmlubGluZSB1bnNpZ25lZCBpbnQKaW5kZXhPZigKICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAg
IFhhbGFuRE9NQ2hhciB0aGVDaGFyKQp7CiAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVQ
b2ludGVyID0gdGhlU3RyaW5nOwoKICAgICAgICB3aGlsZSgqdGhlUG9pbnRlciAhPSB0aGVDaGFy
ICYmICp0aGVQb2ludGVyICE9IDApCiAgICAgICAgewogICAgICAgICAgICAgICAgKyt0aGVQb2lu
dGVyOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRoZVBvaW50ZXIgLSB0aGVTdHJpbmc7Cn0K
IyAzOTUgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgdW5zaWdu
ZWQgaW50CmluZGV4T2YoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3Ry
aW5nJiB0aGVTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuRE9NQ2hhciB0aGVD
aGFyKQp7CiAgICAgICAgaWYgKHRoZVN0cmluZy5sZW5ndGgoKSA9PSAwKQogICAgICAgIHsKICAg
ICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewog
ICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4T2YoY193c3RyKHRoZVN0cmluZyksIHRoZUNoYXIp
OwogICAgICAgIH0KfQojIDQyMSAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAi
CnVuc2lnbmVkIGludAppbmRleE9mKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxh
bkRPTUNoYXIqIHRoZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5E
T01DaGFyKiB0aGVTdWJzdHJpbmcpOwojIDQzNiAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hl
bHBlci5ocHAiCnVuc2lnbmVkIGludAppbmRleE9mKAogICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBYYWxhbkRPTVN0cmluZyYgdGhlU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBYYWxhbkRPTVN0cmluZyYgdGhlU3Vic3RyaW5nKTsKIyA0NTMgIlBsYXRmb3JtU3VwcG9y
dC9ET01TdHJpbmdIZWxwZXIuaHBwIgp1bnNpZ25lZCBpbnQKbGFzdEluZGV4T2YoCiAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlU3RyaW5nLAogICAgICAgICAg
ICAgICAgICAgICAgICBYYWxhbkRPTUNoYXIgdGhlQ2hhcik7CiMgNDY5ICJQbGF0Zm9ybVN1cHBv
cnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIHVuc2lnbmVkIGludApsYXN0SW5kZXhPZigK
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVN0cmluZywK
ICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5ET01DaGFyIHRoZUNoYXIpCnsKICAgICAgICBy
ZXR1cm4gbGFzdEluZGV4T2YoY193c3RyKHRoZVN0cmluZyksIHRoZUNoYXIpOwp9CiMgNDg2ICJQ
bGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKYm9vbApzdGFydHNXaXRoKAogICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZywKICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVTdWJzdHJpbmcpOwojIDUw
MCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmJvb2wKc3RhcnRzV2l0aCgK
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVTdHJpbmcsCiAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVTdWJzdHJpbmcp
OwojIDUxNCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmJvb2wKc3RhcnRz
V2l0aCgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVN0
cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVTdWJz
dHJpbmcpOwojIDUyOCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmJvb2wK
c3RhcnRzV2l0aCgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcm
IHRoZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcm
IHRoZVN1YnN0cmluZyk7CiMgNTQyICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhw
cCIKaW5saW5lIGJvb2wKc3RhcnRzV2l0aCgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
WGFsYW5ET01TdHJpbmcmIHRoZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciogdGhlU3Vic3RyaW5nKQp7CiAgICAgICAgcmV0dXJuIHN0YXJ0c1dpdGgoCiAgICAgICAg
ICAgICAgICAgICAgICAgIHRoZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5E
T01TdHJpbmcodGhlU3Vic3RyaW5nKSk7Cn0KIyA1NjEgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJp
bmdIZWxwZXIuaHBwIgpib29sCmVuZHNXaXRoKAogICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
WGFsYW5ET01DaGFyKiB0aGVTdWJzdHJpbmcpOwojIDU3NSAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0
cmluZ0hlbHBlci5ocHAiCmlubGluZSBib29sCmVuZHNXaXRoKAogICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlRE9NU3RyaW5nLAogICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlU3Vic3RyaW5nKQp7CiAgICAgICAgcmV0
dXJuIGVuZHNXaXRoKGNfd3N0cih0aGVET01TdHJpbmcpLCBjX3dzdHIodGhlU3Vic3RyaW5nKSk7
Cn0KIyA1OTIgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgpYYWxhbkRPTVN0
cmluZyAmCkRvdWJsZVRvRE9NU3RyaW5nKAogICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUg
dGhlVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuRE9NU3RyaW5nJiB0aGVSZXN1
bHQpOwojIDYwNSAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBj
b25zdCBYYWxhbkRPTVN0cmluZwpEb3VibGVUb0RPTVN0cmluZyhkb3VibGUgdGhlVmFsdWUpCnsK
ICAgICAgICBYYWxhbkRPTVN0cmluZyB0aGVSZXN1bHQ7CgogICAgICAgIERvdWJsZVRvRE9NU3Ry
aW5nKHRoZVZhbHVlLCB0aGVSZXN1bHQpOwoKICAgICAgICByZXR1cm4gdGhlUmVzdWx0Owp9CiMg
NjI1ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKWGFsYW5ET01TdHJpbmcg
JgpMb25nVG9IZXhET01TdHJpbmcoCiAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdGhlVmFs
dWUsCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuRE9NU3RyaW5nJiB0aGVSZXN1bHQpOwoj
IDYzOSAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBjb25zdCBY
YWxhbkRPTVN0cmluZwpMb25nVG9IZXhET01TdHJpbmcobG9uZyB0aGVWYWx1ZSkKewogICAgICAg
IFhhbGFuRE9NU3RyaW5nIHRoZVJlc3VsdDsKCiAgICAgICAgTG9uZ1RvSGV4RE9NU3RyaW5nKHRo
ZVZhbHVlLCB0aGVSZXN1bHQpOwoKICAgICAgICByZXR1cm4gdGhlUmVzdWx0Owp9CiMgNjU5ICJQ
bGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKWGFsYW5ET01TdHJpbmcgJgpVbnNp
Z25lZExvbmdUb0hleERPTVN0cmluZygKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
bG9uZyB0aGVWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5ET01TdHJpbmcmIHRo
ZVJlc3VsdCk7CiMgNjczICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5s
aW5lIGNvbnN0IFhhbGFuRE9NU3RyaW5nClVuc2lnbmVkTG9uZ1RvSGV4RE9NU3RyaW5nKHVuc2ln
bmVkIGxvbmcgdGhlVmFsdWUpCnsKICAgICAgICBYYWxhbkRPTVN0cmluZyB0aGVSZXN1bHQ7Cgog
ICAgICAgIFVuc2lnbmVkTG9uZ1RvSGV4RE9NU3RyaW5nKHRoZVZhbHVlLCB0aGVSZXN1bHQpOwoK
ICAgICAgICByZXR1cm4gdGhlUmVzdWx0Owp9CiMgNjkyICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3Ry
aW5nSGVscGVyLmhwcCIKWGFsYW5ET01TdHJpbmcgJgpMb25nVG9ET01TdHJpbmcoCiAgICAgICAg
ICAgICAgICAgICAgICAgIGxvbmcgdGhlVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgIFhh
bGFuRE9NU3RyaW5nJiB0aGVSZXN1bHQpOwojIDcwNSAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmlu
Z0hlbHBlci5ocHAiCmlubGluZSBjb25zdCBYYWxhbkRPTVN0cmluZwpMb25nVG9ET01TdHJpbmco
bG9uZyB0aGVWYWx1ZSkKewogICAgICAgIFhhbGFuRE9NU3RyaW5nIHRoZVJlc3VsdDsKCiAgICAg
ICAgTG9uZ1RvRE9NU3RyaW5nKHRoZVZhbHVlLCB0aGVSZXN1bHQpOwoKICAgICAgICByZXR1cm4g
dGhlUmVzdWx0Owp9CiMgNzI1ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIK
WGFsYW5ET01TdHJpbmcgJgpVbnNpZ25lZExvbmdUb0RPTVN0cmluZygKICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgbG9uZyB0aGVWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAg
WGFsYW5ET01TdHJpbmcmIHRoZVJlc3VsdCk7CiMgNzM4ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3Ry
aW5nSGVscGVyLmhwcCIKaW5saW5lIGNvbnN0IFhhbGFuRE9NU3RyaW5nClVuc2lnbmVkTG9uZ1Rv
RE9NU3RyaW5nKHVuc2lnbmVkIGxvbmcgdGhlVmFsdWUpCnsKICAgICAgICBYYWxhbkRPTVN0cmlu
ZyB0aGVSZXN1bHQ7CgogICAgICAgIFVuc2lnbmVkTG9uZ1RvRE9NU3RyaW5nKHRoZVZhbHVlLCB0
aGVSZXN1bHQpOwoKICAgICAgICByZXR1cm4gdGhlUmVzdWx0Owp9CiMgNzU2ICJQbGF0Zm9ybVN1
cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW50CldpZGVTdHJpbmdUb0ludChjb25zdCBYYWxh
bkRPTUNoYXIqIHRoZVN0cmluZyk7CiMgNzY3ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVs
cGVyLmhwcCIKbG9uZwpXaWRlU3RyaW5nVG9Mb25nKGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlU3Ry
aW5nKTsKIyA3NzggIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgp1bnNpZ25l
ZCBsb25nCldpZGVTdHJpbmdUb1Vuc2lnbmVkTG9uZyhjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0
cmluZyk7CiMgNzg5ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKZG91Ymxl
CldpZGVTdHJpbmdUb0RvdWJsZShjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZyk7CiMgODAw
ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGludApET01TdHJp
bmdUb0ludChjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlU3RyaW5nKQp7CiAgICAgICAgcmV0dXJu
IFdpZGVTdHJpbmdUb0ludChjX3dzdHIodGhlU3RyaW5nKSk7Cn0KIyA4MTQgIlBsYXRmb3JtU3Vw
cG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgbG9uZwpET01TdHJpbmdUb0xvbmcoY29u
c3QgWGFsYW5ET01TdHJpbmcmIHRoZVN0cmluZykKewogICAgICAgIHJldHVybiBXaWRlU3RyaW5n
VG9Mb25nKGNfd3N0cih0aGVTdHJpbmcpKTsKfQojIDgyOCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0
cmluZ0hlbHBlci5ocHAiCmlubGluZSB1bnNpZ25lZCBsb25nCkRPTVN0cmluZ1RvVW5zaWduZWRM
b25nKGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmcpCnsKICAgICAgICByZXR1cm4gV2lk
ZVN0cmluZ1RvVW5zaWduZWRMb25nKGNfd3N0cih0aGVTdHJpbmcpKTsKfQojIDg0MiAiUGxhdGZv
cm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBkb3VibGUKRE9NU3RyaW5nVG9E
b3VibGUoY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVN0cmluZykKewogICAgICAgIHJldHVybiBX
aWRlU3RyaW5nVG9Eb3VibGUoY193c3RyKHRoZVN0cmluZykpOwp9CiMgODU3ICJQbGF0Zm9ybVN1
cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKdm9pZApPdXRwdXRTdHJpbmcoCiAgICAgICAgICAg
ICAgICAgICAgICAgIFhhbGFuT3V0cHV0U3RyZWFtJiB0aGVTdHJlYW0sCiAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IENoYXJWZWN0b3JUeXBlJiB0aGVTdHJpbmcpOwojIDg3MSAiUGxhdGZv
cm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCnZvaWQKT3V0cHV0U3RyaW5nKAoKCgogICAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6Om9zdHJlYW0mIHRoZVN0cmVhbSwKCiAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IENoYXJWZWN0b3JUeXBlJiB0aGVTdHJpbmcpOwojIDg4OSAiUGxh
dGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCnZvaWQKT3V0cHV0U3RyaW5nKAogICAg
ICAgICAgICAgICAgICAgICAgICBYYWxhbk91dHB1dFN0cmVhbSYgdGhlU3RyZWFtLAogICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZyk7CiMgOTAzICJQ
bGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKdm9pZApPdXRwdXRTdHJpbmcoCgoK
CiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmVhbSYgdGhlU3RyZWFtLAoKICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVTdHJpbmcpOwojIDkyMSAi
UGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSB2b2lkCk91dHB1dFN0
cmluZygKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5PdXRwdXRTdHJlYW0mIHRoZVN0cmVh
bSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVN0cmlu
ZykKewogICAgICAgIGlmIChpc0VtcHR5KHRoZVN0cmluZykgPT0gZmFsc2UpCiAgICAgICAgewog
ICAgICAgICAgICAgICAgT3V0cHV0U3RyaW5nKHRoZVN0cmVhbSwgY193c3RyKHRoZVN0cmluZykp
OwogICAgICAgIH0KfQojIDk0MSAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAi
CmlubGluZSB2b2lkCk91dHB1dFN0cmluZygKCgoKICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
Ojpvc3RyZWFtJiB0aGVTdHJlYW0sCgogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxh
bkRPTVN0cmluZyYgdGhlU3RyaW5nKQp7CiAgICAgICAgT3V0cHV0U3RyaW5nKHRoZVN0cmVhbSwg
Y193c3RyKHRoZVN0cmluZykpOwp9CiMgOTYyICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVs
cGVyLmhwcCIKaW5saW5lIFhhbGFuT3V0cHV0U3RyZWFtJgpvcGVyYXRvcjw8KAogICAgICAgICAg
ICAgICAgICAgICAgICBYYWxhbk91dHB1dFN0cmVhbSYgdGhlU3RyZWFtLAogICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBDaGFyVmVjdG9yVHlwZSYgdGhlU3RyaW5nKQp7CiAgICAgICAgT3V0
cHV0U3RyaW5nKHRoZVN0cmVhbSwgdGhlU3RyaW5nKTsKCiAgICAgICAgcmV0dXJuIHRoZVN0cmVh
bTsKfQojIDk4NiAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBz
dGQ6Om9zdHJlYW0mCm9wZXJhdG9yPDwoCiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0
cmVhbSYgdGhlU3RyZWFtLAoKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ2hhclZlY3Rv
clR5cGUmIHRoZVN0cmluZykKewogICAgICAgIE91dHB1dFN0cmluZyh0aGVTdHJlYW0sIHRoZVN0
cmluZyk7CgogICAgICAgIHJldHVybiB0aGVTdHJlYW07Cn0KIyAxMDA2ICJQbGF0Zm9ybVN1cHBv
cnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIFhhbGFuT3V0cHV0U3RyZWFtJgpvcGVyYXRv
cjw8KAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhbk91dHB1dFN0cmVhbSYgdGhlU3RyZWFt
LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZykK
ewogICAgICAgIE91dHB1dFN0cmluZyh0aGVTdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoZVN0cmluZyk7CgogICAgICAgIHJldHVybiB0aGVTdHJlYW07Cn0KIyAxMDMx
ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIHN0ZDo6b3N0cmVh
bSYKb3BlcmF0b3I8PCgKICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpvc3RyZWFtJiB0aGVT
dHJlYW0sCgogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0
cmluZykKewogICAgICAgIE91dHB1dFN0cmluZyh0aGVTdHJlYW0sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoZVN0cmluZyk7CgogICAgICAgIHJldHVybiB0aGVTdHJlYW07Cn0K
IyAxMDUyICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIFhhbGFu
T3V0cHV0U3RyZWFtJgpvcGVyYXRvcjw8KAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhbk91
dHB1dFN0cmVhbSYgdGhlU3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxh
bkRPTVN0cmluZyYgdGhlU3RyaW5nKQp7CiAgICAgICAgT3V0cHV0U3RyaW5nKHRoZVN0cmVhbSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlU3RyaW5nKTsKCiAgICAgICAgcmV0
dXJuIHRoZVN0cmVhbTsKfQojIDEwNzcgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIu
aHBwIgppbmxpbmUgc3RkOjpvc3RyZWFtJgpvcGVyYXRvcjw8KAogICAgICAgICAgICAgICAgICAg
ICAgICBzdGQ6Om9zdHJlYW0mIHRoZVN0cmVhbSwKCiAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmcpCnsKICAgICAgICBPdXRwdXRTdHJpbmcodGhl
U3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVTdHJpbmcpOwoKICAg
ICAgICByZXR1cm4gdGhlU3RyZWFtOwp9CiMgMTA5OCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmlu
Z0hlbHBlci5ocHAiCmlubGluZSBYYWxhbkRPTUNoYXIKY2hhckF0KAogICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlU3RyaW5nLAogICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgdGhlSW5kZXgpCnsKICAgICAgICByZXR1cm4gdGhlU3RyaW5n
W3RoZUluZGV4XTsKfQojIDExMTQgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBw
IgppbmxpbmUgYm9vbAppc1hNTFdoaXRlc3BhY2UoWGFsYW5ET01DaGFyIHRoZUNoYXIpCnsKICAg
ICAgICByZXR1cm4gWGFsYW5YTUxDaGFyOjppc1doaXRlc3BhY2UodGhlQ2hhcik7Cn0KIyAxMTI4
ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGJvb2wKaXNYTUxE
aWdpdChYYWxhbkRPTUNoYXIgdGhlQ2hhcikKewogICAgICAgIHJldHVybiBYYWxhblhNTENoYXI6
OmlzRGlnaXQodGhlQ2hhcik7Cn0KIyAxMTQyICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVs
cGVyLmhwcCIKaW5saW5lIGJvb2wKaXNYTUxMZXR0ZXJPckRpZ2l0KFhhbGFuRE9NQ2hhciB0aGVD
aGFyKQp7CiAgICAgICAgcmV0dXJuIFhhbGFuWE1MQ2hhcjo6aXNEaWdpdCh0aGVDaGFyKSB8fAog
ICAgICAgICAgICAgICAgICAgICAgICBYYWxhblhNTENoYXI6OmlzTGV0dGVyKHRoZUNoYXIpOwp9
CiMgMTE2MiAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiClhhbGFuRE9NU3Ry
aW5nCnN1YnN0cmluZygKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFy
KiB0aGVTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0aGVTdGFy
dEluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGhlRW5kSW5kZXgg
PSB1bnNpZ25lZCgtMSkpOwojIDExODEgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIu
aHBwIgpYYWxhbkRPTVN0cmluZwpzdWJzdHJpbmcoCiAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGludCB0aGVTdGFydEluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgdGhlRW5kSW5kZXggPSB1bnNpZ25lZCgtMSkpOwojIDExOTYgIlBsYXRmb3JtU3VwcG9y
dC9ET01TdHJpbmdIZWxwZXIuaHBwIgpYYWxhbkRPTVN0cmluZwp0b0xvd2VyQ2FzZShjb25zdCBY
YWxhbkRPTUNoYXIqIHRoZVN0cmluZyk7CiMgMTIwOCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmlu
Z0hlbHBlci5ocHAiClhhbGFuRE9NU3RyaW5nCnRvTG93ZXJDYXNlKGNvbnN0IFhhbGFuRE9NU3Ry
aW5nJiB0aGVTdHJpbmcpOwojIDEyMjAgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIu
aHBwIgpYYWxhbkRPTVN0cmluZwp0b1VwcGVyQ2FzZShjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0
cmluZyk7CiMgMTIzMiAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiClhhbGFu
RE9NU3RyaW5nCnRvVXBwZXJDYXNlKGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmcpOwoj
IDEyNDUgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgWGFsYW5E
T01DaGFyCnRvTG93ZXJBU0NJSShYYWxhbkRPTUNoYXIgdGhlQ2hhcikKewogICAgICAgIGlmICh0
aGVDaGFyID49IFhhbGFuVW5pY29kZTo6Y2hhckxldHRlcl9BICYmIHRoZUNoYXIgPD0gWGFsYW5V
bmljb2RlOjpjaGFyTGV0dGVyX1opCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIFhh
bGFuRE9NQ2hhcih0aGVDaGFyIC0gKFhhbGFuVW5pY29kZTo6Y2hhckxldHRlcl9BIC0gWGFsYW5V
bmljb2RlOjpjaGFyTGV0dGVyX2EpKTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsK
ICAgICAgICAgICAgICAgIHJldHVybiB0aGVDaGFyOwogICAgICAgIH0KfQojIDEyNjggIlBsYXRm
b3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgWGFsYW5ET01DaGFyCnRvVXBw
ZXJBU0NJSShYYWxhbkRPTUNoYXIgdGhlQ2hhcikKewogICAgICAgIGlmICh0aGVDaGFyID49IFhh
bGFuVW5pY29kZTo6Y2hhckxldHRlcl9hICYmIHRoZUNoYXIgPD0gWGFsYW5Vbmljb2RlOjpjaGFy
TGV0dGVyX3opCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIFhhbGFuRE9NQ2hhcih0
aGVDaGFyICsgKFhhbGFuVW5pY29kZTo6Y2hhckxldHRlcl9BIC0gWGFsYW5Vbmljb2RlOjpjaGFy
TGV0dGVyX2EpKTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAg
ICAgIHJldHVybiB0aGVDaGFyOwogICAgICAgIH0KfQojIDEyOTEgIlBsYXRmb3JtU3VwcG9ydC9E
T01TdHJpbmdIZWxwZXIuaHBwIgpYYWxhbkRPTVN0cmluZwp0b0xvd2VyQ2FzZUFTQ0lJKGNvbnN0
IFhhbGFuRE9NQ2hhciogdGhlU3RyaW5nKTsKIyAxMzA0ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3Ry
aW5nSGVscGVyLmhwcCIKWGFsYW5ET01TdHJpbmcKdG9Mb3dlckNhc2VBU0NJSShjb25zdCBYYWxh
bkRPTVN0cmluZyYgdGhlU3RyaW5nKTsKIyAxMzE3ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5n
SGVscGVyLmhwcCIKWGFsYW5ET01TdHJpbmcKdG9VcHBlckNhc2VBU0NJSShjb25zdCBYYWxhbkRP
TUNoYXIqIHRoZVN0cmluZyk7CiMgMTMzMCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBl
ci5ocHAiClhhbGFuRE9NU3RyaW5nCnRvVXBwZXJDYXNlQVNDSUkoY29uc3QgWGFsYW5ET01TdHJp
bmcmIHRoZVN0cmluZyk7CiMgMTM0NyAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5o
cHAiCmludApjb21wYXJlKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDaGFyVmVjdG9y
VHlwZSYgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDaGFyVmVjdG9yVHlw
ZSYgdGhlUkhTKTsKIyAxMzY3ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIK
aW50CmNvbXBhcmUoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciog
dGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGhlTEhTTGVuZ3Ro
LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVJIUywKICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRoZVJIU0xlbmd0aCk7CiMgMTM4NyAi
UGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBpbnQKY29tcGFyZSgK
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVMSFMsCiAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlUkhTKQp7CiAgICAgICAg
cmV0dXJuIGNvbXBhcmUodGhlTEhTLCBsZW5ndGgodGhlTEhTKSwgdGhlUkhTLCBsZW5ndGgodGhl
UkhTKSk7Cn0KIyAxNDA3ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5s
aW5lIGludApjb21wYXJlKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0
cmluZyYgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmlu
ZyYgdGhlUkhTKQp7CiAgICAgICAgcmV0dXJuIGNvbXBhcmUodG9DaGFyQXJyYXkodGhlTEhTKSwg
bGVuZ3RoKHRoZUxIUyksIHRvQ2hhckFycmF5KHRoZVJIUyksIGxlbmd0aCh0aGVSSFMpKTsKfQoj
IDE0MjggIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgaW50CmNv
bXBhcmUoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlTEhT
LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlUkhTKQp7
CiAgICAgICAgcmV0dXJuIGNvbXBhcmUodGhlTEhTLCBsZW5ndGgodGhlTEhTKSwgdG9DaGFyQXJy
YXkodGhlUkhTKSwgbGVuZ3RoKHRoZVJIUykpOwp9CiMgMTQ0OSAiUGxhdGZvcm1TdXBwb3J0L0RP
TVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBpbnQKY29tcGFyZSgKICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVSSFMpCnsKICAgICAgICByZXR1cm4gY29tcGFyZSh0
b0NoYXJBcnJheSh0aGVMSFMpLCBsZW5ndGgodGhlTEhTKSwgdGhlUkhTLCBsZW5ndGgodGhlUkhT
KSk7Cn0KIyAxNDczICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW50CmNv
bXBhcmVJZ25vcmVDYXNlKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNo
YXIqIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRoZUxIU0xl
bmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVSSFMs
CiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0aGVSSFNMZW5ndGgpOwojIDE0
OTQgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgaW50CmNvbXBh
cmVJZ25vcmVDYXNlKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIq
IHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVS
SFMpCnsKICAgICAgICByZXR1cm4gY29tcGFyZUlnbm9yZUNhc2UodGhlTEhTLCBsZW5ndGgodGhl
TEhTKSwgdGhlUkhTLCBsZW5ndGgodGhlUkhTKSk7Cn0KIyAxNTE1ICJQbGF0Zm9ybVN1cHBvcnQv
RE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGludApjb21wYXJlSWdub3JlQ2FzZSgKICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZUxIUywKICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVJIUykKewogICAgICAgIHJl
dHVybiBjb21wYXJlSWdub3JlQ2FzZSh0b0NoYXJBcnJheSh0aGVMSFMpLCBsZW5ndGgodGhlTEhT
KSwgdG9DaGFyQXJyYXkodGhlUkhTKSwgbGVuZ3RoKHRoZVJIUykpOwp9CiMgMTUzNyAiUGxhdGZv
cm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBpbnQKY29tcGFyZUlnbm9yZUNh
c2UoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlTEhTLAog
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlUkhTKQp7CiAg
ICAgICAgcmV0dXJuIGNvbXBhcmVJZ25vcmVDYXNlKHRoZUxIUywgbGVuZ3RoKHRoZUxIUyksIHRv
Q2hhckFycmF5KHRoZVJIUyksIGxlbmd0aCh0aGVSSFMpKTsKfQojIDE1NTkgIlBsYXRmb3JtU3Vw
cG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgaW50CmNvbXBhcmVJZ25vcmVDYXNlKAog
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlTEhTLAogICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVJIUykKewogICAgICAg
IHJldHVybiBjb21wYXJlSWdub3JlQ2FzZSh0b0NoYXJBcnJheSh0aGVMSFMpLCBsZW5ndGgodGhl
TEhTKSwgdGhlUkhTLCBsZW5ndGgodGhlUkhTKSk7Cn0KIyAxNTgxICJQbGF0Zm9ybVN1cHBvcnQv
RE9NU3RyaW5nSGVscGVyLmhwcCIKaW50CmNvbXBhcmVJZ25vcmVDYXNlQVNDSUkoCiAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlTEhTLAogICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGhlTEhTTGVuZ3RoLAogICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVJIUywKICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IHRoZVJIU0xlbmd0aCk7CiMgMTYwMCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0
cmluZ0hlbHBlci5ocHAiCmlubGluZSBpbnQKY29tcGFyZUlnbm9yZUNhc2VBU0NJSSgKICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVMSFMsCiAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlUkhTKQp7CiAgICAgICAgcmV0dXJu
IGNvbXBhcmVJZ25vcmVDYXNlQVNDSUkodGhlTEhTLCBsZW5ndGgodGhlTEhTKSwgdGhlUkhTLCBs
ZW5ndGgodGhlUkhTKSk7Cn0KIyAxNjIyICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVy
LmhwcCIKaW5saW5lIGludApjb21wYXJlSWdub3JlQ2FzZUFTQ0lJKAogICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlTEhTLAogICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlUkhTKQp7CiAgICAgICAgcmV0dXJuIGNvbXBh
cmVJZ25vcmVDYXNlQVNDSUkodG9DaGFyQXJyYXkodGhlTEhTKSwgbGVuZ3RoKHRoZUxIUyksIHRv
Q2hhckFycmF5KHRoZVJIUyksIGxlbmd0aCh0aGVSSFMpKTsKfQojIDE2NDUgIlBsYXRmb3JtU3Vw
cG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgaW50CmNvbXBhcmVJZ25vcmVDYXNlQVND
SUkoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVMSFMs
CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlUkhTKQp7CiAg
ICAgICAgcmV0dXJuIGNvbXBhcmVJZ25vcmVDYXNlQVNDSUkodG9DaGFyQXJyYXkodGhlTEhTKSwg
bGVuZ3RoKHRoZUxIUyksIHRoZVJIUywgbGVuZ3RoKHRoZVJIUykpOwp9CiMgMTY2OCAiUGxhdGZv
cm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBpbnQKY29tcGFyZUlnbm9yZUNh
c2VBU0NJSSgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVM
SFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVSSFMp
CnsKICAgICAgICByZXR1cm4gY29tcGFyZUlnbm9yZUNhc2VBU0NJSSh0aGVMSFMsIGxlbmd0aCh0
aGVMSFMpLCB0b0NoYXJBcnJheSh0aGVSSFMpLCBsZW5ndGgodGhlUkhTKSk7Cn0KIyAxNjg4ICJQ
bGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW50CmNvbGxhdGlvbkNvbXBhcmUo
CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlTEhTLAogICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGhlTEhTTGVuZ3RoLAogICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVJIUywKICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50IHRoZVJIU0xlbmd0aCk7CiMgMTcwNyAiUGxhdGZvcm1TdXBw
b3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBpbnQKY29sbGF0aW9uQ29tcGFyZSgKICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVMSFMsCiAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlUkhTKQp7CiAgICAgICAgcmV0
dXJuIGNvbGxhdGlvbkNvbXBhcmUodGhlTEhTLCBsZW5ndGgodGhlTEhTKSwgdGhlUkhTLCBsZW5n
dGgodGhlUkhTKSk7Cn0KIyAxNzI3ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhw
cCIKaW5saW5lIGludApjb2xsYXRpb25Db21wYXJlKAogICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBYYWxhbkRPTVN0cmluZyYgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBYYWxhbkRPTVN0cmluZyYgdGhlUkhTKQp7CiAgICAgICAgcmV0dXJuIGNvbGxhdGlvbkNvbXBh
cmUodG9DaGFyQXJyYXkodGhlTEhTKSwgbGVuZ3RoKHRoZUxIUyksIHRvQ2hhckFycmF5KHRoZVJI
UyksIGxlbmd0aCh0aGVSSFMpKTsKfQojIDE3NDUgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdI
ZWxwZXIuaHBwIgppbmxpbmUgaW50CmNvbGxhdGlvbkNvbXBhcmUoCiAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlUkhTKQp7CiAgICAgICAgcmV0dXJuIGNvbGxhdGlv
bkNvbXBhcmUodGhlTEhTLCBsZW5ndGgodGhlTEhTKSwgdG9DaGFyQXJyYXkodGhlUkhTKSwgbGVu
Z3RoKHRoZVJIUykpOwp9CiMgMTc2MyAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5o
cHAiCmlubGluZSBpbnQKY29sbGF0aW9uQ29tcGFyZSgKICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgWGFsYW5ET01DaGFyKiB0aGVSSFMpCnsKICAgICAgICByZXR1cm4gY29sbGF0aW9uQ29tcGFy
ZSh0b0NoYXJBcnJheSh0aGVMSFMpLCBsZW5ndGgodGhlTEhTKSwgdGhlUkhTLCBsZW5ndGgodGhl
UkhTKSk7Cn0KIyAxNzgxICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKYm9v
bAplcXVhbHMoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhl
TEhTLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVJIUywK
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRoZUxlbmd0aCk7CiMgMTc5NiAi
UGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBib29sCmVxdWFscygK
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVMSFMsCiAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlUkhTKQp7CiAgICAgICAg
Y29uc3QgdW5zaWduZWQgaW50IHRoZUxIU0xlbmd0aCA9IGxlbmd0aCh0aGVMSFMpOwoKICAgICAg
ICByZXR1cm4gdGhlTEhTTGVuZ3RoICE9IGxlbmd0aCh0aGVSSFMpID8gZmFsc2UgOiBlcXVhbHMo
dGhlTEhTLCB0aGVSSFMsIHRoZUxIU0xlbmd0aCk7Cn0KIyAxODE1ICJQbGF0Zm9ybVN1cHBvcnQv
RE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGJvb2wKZXF1YWxzKAogICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlTEhTLAogICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlUkhTKQp7CiAgICAgICAgcmV0dXJuIHRoZUxI
UyA9PSB0aGVSSFM7Cn0KIyAxODMyICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhw
cCIKaW5saW5lIGJvb2wKZXF1YWxzKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxh
bkRPTUNoYXIqIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01T
dHJpbmcmIHRoZVJIUykKewogICAgICAgICgodm9pZCkgKCh0aGVMSFMgIT0gMCkgPyAwIDogKF9f
YXNzZXJ0X2ZhaWwgKCJ0aGVMSFMgIT0gMCIsICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVs
cGVyLmhwcCIsIDE4MzcsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKCiAgICAgICAgcmV0
dXJuIHRoZVJIUyA9PSB0aGVMSFM7Cn0KIyAxODUyICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5n
SGVscGVyLmhwcCIKaW5saW5lIGJvb2wKZXF1YWxzKGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVM
SFMsCiAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVSSFMpCnsKICAgICAgICByZXR1
cm4gZXF1YWxzKHRoZVJIUywgdGhlTEhTKTsKfQojIDE4NjggIlBsYXRmb3JtU3VwcG9ydC9ET01T
dHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgYm9vbAplcXVhbHMoY29uc3QgWGFsYW5ET01TdHJpbmcm
IHRoZUxIUywKICAgICAgICAgICBjb25zdCBjaGFyKiB0aGVSSFMpCnsKICAgICAgICAoKHZvaWQp
ICgodGhlUkhTICE9IDApID8gMCA6IChfX2Fzc2VydF9mYWlsICgidGhlUkhTICE9IDAiLCAiUGxh
dGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiLCAxODcyLCBfX1BSRVRUWV9GVU5DVElP
Tl9fKSwgMCkpKTsKCiAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHRoZVJIU0xlbmd0aCA9IGxl
bmd0aCh0aGVSSFMpOwoKICAgICAgICBpZiAodGhlUkhTTGVuZ3RoICE9IGxlbmd0aCh0aGVMSFMp
KQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAg
ICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGVMSFMgPT0gWGFsYW5E
T01TdHJpbmcodGhlUkhTLCB0aGVSSFNMZW5ndGgpOwogICAgICAgIH0KfQojIDE4OTUgIlBsYXRm
b3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgYm9vbAplcXVhbHMoY29uc3Qg
Y2hhciogdGhlTEhTLAogICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVSSFMpCnsK
ICAgICAgICByZXR1cm4gZXF1YWxzKHRoZVJIUywgdGhlTEhTKTsKfQojIDE5MTEgIlBsYXRmb3Jt
U3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgYm9vbAplcXVhbHMoY29uc3QgWGFs
YW5ET01DaGFyKiB0aGVMSFMsCiAgICAgICAgICAgY29uc3QgY2hhciogdGhlUkhTKQp7CiAgICAg
ICAgKCh2b2lkKSAoKHRoZUxIUyAhPSAwKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoInRoZUxIUyAh
PSAwIiwgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIiwgMTkxNSwgX19QUkVU
VFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgICAgKCh2b2lkKSAoKHRoZVJIUyAhPSAwKSA/IDAg
OiAoX19hc3NlcnRfZmFpbCAoInRoZVJIUyAhPSAwIiwgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJp
bmdIZWxwZXIuaHBwIiwgMTkxNiwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CgogICAgICAg
IGNvbnN0IHVuc2lnbmVkIGludCB0aGVSSFNMZW5ndGggPSBsZW5ndGgodGhlUkhTKTsKCiAgICAg
ICAgaWYgKHRoZVJIU0xlbmd0aCAhPSBsZW5ndGgodGhlTEhTKSkKICAgICAgICB7CiAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAg
ICAgICAgICAgICAgICByZXR1cm4gZXF1YWxzKFhhbGFuRE9NU3RyaW5nKHRoZVJIUywgdGhlUkhT
TGVuZ3RoKSwgdGhlTEhTKTsKICAgICAgICB9Cn0KIyAxOTM5ICJQbGF0Zm9ybVN1cHBvcnQvRE9N
U3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGJvb2wKZXF1YWxzKGNvbnN0IGNoYXIqIHRoZUxIUywK
ICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVJIUykKewogICAgICAgIHJldHVybiBl
cXVhbHModGhlUkhTLCB0aGVMSFMpOwp9CiMgMTk1NiAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmlu
Z0hlbHBlci5ocHAiCmJvb2wKZXF1YWxzSWdub3JlQ2FzZSgKICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFhhbGFuRE9NQ2hhciogdGhlUkhTLAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgdGhlTGVuZ3RoKTsKIyAxOTcxICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVy
LmhwcCIKaW5saW5lIGJvb2wKZXF1YWxzSWdub3JlQ2FzZSgKICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFhhbGFuRE9NQ2hhciogdGhlUkhTKQp7CiAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHRo
ZUxlbmd0aCA9IGxlbmd0aCh0aGVMSFMpOwoKICAgICAgICByZXR1cm4gdGhlTGVuZ3RoICE9IGxl
bmd0aCh0aGVSSFMpID8gZmFsc2UgOiBlcXVhbHNJZ25vcmVDYXNlKHRoZUxIUywgdGhlUkhTLCB0
aGVMZW5ndGgpOwp9CiMgMTk5MCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAi
CmlubGluZSBib29sCmVxdWFsc0lnbm9yZUNhc2UoCiAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFhhbGFuRE9NU3RyaW5nJiB0aGVSSFMpCnsKICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgdGhl
TEhTTGVuZ3RoID0gbGVuZ3RoKHRoZUxIUyk7CgogICAgICAgIHJldHVybiB0aGVMSFNMZW5ndGgg
IT0gbGVuZ3RoKHRoZVJIUykgPyBmYWxzZSA6CiAgICAgICAgICAgICAgICBlcXVhbHNJZ25vcmVD
YXNlKHRvQ2hhckFycmF5KHRoZUxIUyksIHRvQ2hhckFycmF5KHRoZVJIUyksIHRoZUxIU0xlbmd0
aCk7Cn0KIyAyMDEwICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5l
IGJvb2wKZXF1YWxzSWdub3JlQ2FzZSgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFs
YW5ET01DaGFyKiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9N
U3RyaW5nJiB0aGVSSFMpCnsKICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgdGhlUkhTTGVuZ3Ro
ID0gbGVuZ3RoKHRoZVJIUyk7CgogICAgICAgIHJldHVybiB0aGVSSFNMZW5ndGggIT0gbGVuZ3Ro
KHRoZUxIUykgPyBmYWxzZSA6CiAgICAgICAgICAgICAgICBlcXVhbHNJZ25vcmVDYXNlKHRoZUxI
UywgdG9DaGFyQXJyYXkodGhlUkhTKSwgdGhlUkhTTGVuZ3RoKTsKfQojIDIwMzAgIlBsYXRmb3Jt
U3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgYm9vbAplcXVhbHNJZ25vcmVDYXNl
KAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlTEhTLAog
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVJIUykKewogICAg
ICAgIHJldHVybiBlcXVhbHNJZ25vcmVDYXNlKHRoZVJIUywgdGhlTEhTKTsKfQojIDIwNDggIlBs
YXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgpib29sCmVxdWFsc0lnbm9yZUNhc2VB
U0NJSSgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVMSFMs
CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlUkhTLAogICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGhlTGVuZ3RoKTsKIyAyMDY0ICJQbGF0
Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGJvb2wKZXF1YWxzSWdub3Jl
Q2FzZUFTQ0lJKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRo
ZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVSSFMp
CnsKICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgdGhlTGVuZ3RoID0gbGVuZ3RoKHRoZUxIUyk7
CgogICAgICAgIHJldHVybiB0aGVMZW5ndGggIT0gbGVuZ3RoKHRoZVJIUykgPyBmYWxzZSA6CiAg
ICAgICAgICAgICAgICBlcXVhbHNJZ25vcmVDYXNlQVNDSUkodGhlTEhTLCB0aGVSSFMsIHRoZUxl
bmd0aCk7Cn0KIyAyMDg1ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5s
aW5lIGJvb2wKZXF1YWxzSWdub3JlQ2FzZUFTQ0lJKAogICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBYYWxhbkRPTVN0cmluZyYgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBYYWxhbkRPTVN0cmluZyYgdGhlUkhTKQp7CiAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHRo
ZUxlbmd0aCA9IGxlbmd0aCh0aGVMSFMpOwoKICAgICAgICByZXR1cm4gdGhlTGVuZ3RoICE9IGxl
bmd0aCh0aGVSSFMpID8gZmFsc2UgOgogICAgICAgICAgICAgICAgZXF1YWxzSWdub3JlQ2FzZUFT
Q0lJKHRvQ2hhckFycmF5KHRoZUxIUyksIHRvQ2hhckFycmF5KHRoZVJIUyksIHRoZUxlbmd0aCk7
Cn0KIyAyMTA2ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGJv
b2wKZXF1YWxzSWdub3JlQ2FzZUFTQ0lJKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBY
YWxhbkRPTUNoYXIqIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5E
T01TdHJpbmcmIHRoZVJIUykKewogICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCB0aGVSSFNMZW5n
dGggPSBsZW5ndGgodGhlUkhTKTsKCiAgICAgICAgcmV0dXJuIHRoZVJIU0xlbmd0aCAhPSBsZW5n
dGgodGhlTEhTKSA/IGZhbHNlIDoKICAgICAgICAgICAgICAgIGVxdWFsc0lnbm9yZUNhc2VBU0NJ
SSh0aGVMSFMsIHRvQ2hhckFycmF5KHRoZVJIUyksIHRoZVJIU0xlbmd0aCk7Cn0KIyAyMTI3ICJQ
bGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGJvb2wKZXF1YWxzSWdu
b3JlQ2FzZUFTQ0lJKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmlu
ZyYgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRo
ZVJIUykKewogICAgICAgIHJldHVybiBlcXVhbHNJZ25vcmVDYXNlQVNDSUkodGhlUkhTLCB0aGVM
SFMpOwp9CiMgMjE0NiAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGlu
ZSBib29sCm9wZXJhdG9yPCgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ2hhclZlY3Rv
clR5cGUmIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ2hhclZlY3RvclR5
cGUmIHRoZVJIUykKewogICAgICAgIHJldHVybiBjb21wYXJlKHRoZUxIUywgdGhlUkhTKSA8IDAg
PyB0cnVlIDogZmFsc2U7Cn0KIyAyMTY1ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVy
LmhwcCIKaW5saW5lIGJvb2wKb3BlcmF0b3I8KAogICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBYYWxhbkRPTVN0cmluZyYgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBY
YWxhbkRPTVN0cmluZyYgdGhlUkhTKQp7CiAgICAgICAgcmV0dXJuIGNvbXBhcmUodGhlTEhTLCB0
aGVSSFMpIDwgMCA/IHRydWUgOiBmYWxzZTsKfQojIDIxODMgIlBsYXRmb3JtU3VwcG9ydC9ET01T
dHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgWGFsYW5ET01TdHJpbmcmCmFzc2lnbigKICAgICAgICAg
ICAgICAgICAgICAgICAgWGFsYW5ET01TdHJpbmcmIHRoZVN0cmluZywKICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVN0cmluZ1RvQXNzaWduKQp7CiAgICAg
ICAgdGhlU3RyaW5nID0gdGhlU3RyaW5nVG9Bc3NpZ247CgogICAgICAgIHJldHVybiB0aGVTdHJp
bmc7Cn0KIyAyMjAzICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5l
IFhhbGFuRE9NU3RyaW5nJgphc3NpZ24oCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuRE9N
U3RyaW5nJiB0aGVTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9N
Q2hhciogdGhlU3RyaW5nVG9Bc3NpZ24sCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCB0aGVTdHJpbmdUb0Fzc2lnbkxlbmd0aCA9IHVuc2lnbmVkKC0xKSkKewogICAgICAgIGlm
ICh0aGVTdHJpbmdUb0Fzc2lnbkxlbmd0aCA9PSB1bnNpZ25lZCgtMSkpCiAgICAgICAgewogICAg
ICAgICAgICAgICAgdGhlU3RyaW5nLmFzc2lnbih0aGVTdHJpbmdUb0Fzc2lnbik7CiAgICAgICAg
fQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGVTdHJpbmcuYXNzaWdu
KHRoZVN0cmluZ1RvQXNzaWduLCB0aGVTdHJpbmdUb0Fzc2lnbkxlbmd0aCk7CiAgICAgICAgfQoK
ICAgICAgICByZXR1cm4gdGhlU3RyaW5nOwp9CiMgMjIzMCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0
cmluZ0hlbHBlci5ocHAiCmlubGluZSBYYWxhbkRPTVN0cmluZyYKYXBwZW5kKAogICAgICAgICAg
ICAgICAgICAgICAgICBYYWxhbkRPTVN0cmluZyYgdGhlU3RyaW5nLAogICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlU3RyaW5nVG9BcHBlbmQpCnsKICAgICAg
ICB0aGVTdHJpbmcuYXBwZW5kKHRoZVN0cmluZ1RvQXBwZW5kKTsKCiAgICAgICAgcmV0dXJuIHRo
ZVN0cmluZzsKfQojIDIyNTAgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgpp
bmxpbmUgWGFsYW5ET01TdHJpbmcmCmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAgICAgWGFs
YW5ET01TdHJpbmcmIHRoZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFs
YW5ET01DaGFyKiB0aGVTdHJpbmdUb0FwcGVuZCwKICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50IHRoZVN0cmluZ1RvQXBwZW5kTGVuZ3RoID0gdW5zaWduZWQoLTEpKQp7CiAgICAg
ICAgKCh2b2lkKSAoKHRoZVN0cmluZ1RvQXBwZW5kICE9IDApID8gMCA6IChfX2Fzc2VydF9mYWls
ICgidGhlU3RyaW5nVG9BcHBlbmQgIT0gMCIsICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVs
cGVyLmhwcCIsIDIyNTYsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKICAgICAgICBpZiAo
dGhlU3RyaW5nVG9BcHBlbmRMZW5ndGggPT0gdW5zaWduZWQoLTEpKQogICAgICAgIHsKICAgICAg
ICAgICAgICAgIHRoZVN0cmluZy5hcHBlbmQodGhlU3RyaW5nVG9BcHBlbmQpOwogICAgICAgIH0K
ICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICAgICAgdGhlU3RyaW5nLmFwcGVuZCh0
aGVTdHJpbmdUb0FwcGVuZCwgdGhlU3RyaW5nVG9BcHBlbmRMZW5ndGgpOwogICAgICAgIH0KCiAg
ICAgICAgcmV0dXJuIHRoZVN0cmluZzsKfQojIDIyODAgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJp
bmdIZWxwZXIuaHBwIgppbmxpbmUgWGFsYW5ET01TdHJpbmcmCmFwcGVuZCgKICAgICAgICAgICAg
ICAgICAgICAgICAgWGFsYW5ET01TdHJpbmcmIHRoZVN0cmluZywKICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogdGhlU3RyaW5nVG9BcHBlbmQsCiAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCB0aGVTdHJpbmdUb0FwcGVuZExlbmd0aCA9IHVuc2lnbmVkKC0xKSkK
ewogICAgICAgIHRoZVN0cmluZy5hcHBlbmQoVHJhbnNjb2RlRnJvbUxvY2FsQ29kZVBhZ2UodGhl
U3RyaW5nVG9BcHBlbmQsIHRoZVN0cmluZ1RvQXBwZW5kTGVuZ3RoKSk7CgogICAgICAgIHJldHVy
biB0aGVTdHJpbmc7Cn0KIyAyMzAwICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhw
cCIKaW5saW5lIFhhbGFuRE9NU3RyaW5nJgphcHBlbmQoCiAgICAgICAgICAgICAgICAgICAgICAg
IFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFhhbGFuRE9NQ2hhciB0aGVDaGFyVG9BcHBlbmQpCnsKICAgICAgICB0aGVTdHJpbmcuYXBwZW5k
KDEsIHRoZUNoYXJUb0FwcGVuZCk7CgogICAgICAgIHJldHVybiB0aGVTdHJpbmc7Cn0KIyAyMzE5
ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIFhhbGFuRE9NU3Ry
aW5nJgphcHBlbmQoCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuRE9NU3RyaW5nJiB0aGVT
dHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgdGhlQ2hhclRvQXBwZW5kKQp7Cgog
ICAgICAgIGNoYXIgdGhlVGVtcEJ1ZmZlcltdID0geyB0aGVDaGFyVG9BcHBlbmQsICdcMCcgfTsK
CiAgICAgICAgcmV0dXJuIGFwcGVuZCh0aGVTdHJpbmcsIHRoZVRlbXBCdWZmZXIpOwp9CiMgMjM0
MCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBYYWxhbkRPTVN0
cmluZyYKaW5zZXJ0KAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhbkRPTVN0cmluZyYgdGhl
U3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGhlUG9zaXRpb24s
CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmdU
b0luc2VydCkKewogICAgICAgIHRoZVN0cmluZy5pbnNlcnQodGhlUG9zaXRpb24sIHRoZVN0cmlu
Z1RvSW5zZXJ0KTsKCiAgICAgICAgcmV0dXJuIHRoZVN0cmluZzsKfQojIDIzNjEgIlBsYXRmb3Jt
U3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgWGFsYW5ET01TdHJpbmcmCmluc2Vy
dCgKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5ET01TdHJpbmcmIHRoZVN0cmluZywKICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRoZVBvc2l0aW9uLAogICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZ1RvSW5zZXJ0KQp7CiAg
ICAgICAgdGhlU3RyaW5nLmluc2VydCh0aGVQb3NpdGlvbiwgdGhlU3RyaW5nVG9JbnNlcnQpOwoK
ICAgICAgICByZXR1cm4gdGhlU3RyaW5nOwp9CiMgMjM4MCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0
cmluZ0hlbHBlci5ocHAiClhhbGFuRE9NU3RyaW5nCnRyaW0oY29uc3QgWGFsYW5ET01TdHJpbmcm
IHRoZVN0cmluZyk7CiMgMjM5MCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAi
CmlubGluZSB2b2lkCmNsZWFyKFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmcpCnsKICAgICAgICB0
aGVTdHJpbmcuY2xlYXIoKTsKfQojIDI0MDMgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxw
ZXIuaHBwIgppbmxpbmUgdm9pZAplcmFzZShYYWxhbkRPTVN0cmluZyYgdGhlU3RyaW5nKQp7CiAg
ICAgICAgdGhlU3RyaW5nLmVyYXNlKCk7Cn0KIyAyNDE3ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3Ry
aW5nSGVscGVyLmhwcCIKaW5saW5lIHZvaWQKcmVsZWFzZU1lbW9yeShYYWxhbkRPTVN0cmluZyYg
dGhlU3RyaW5nKQp7CiAgICAgICAgWGFsYW5ET01TdHJpbmcoKS5zd2FwKHRoZVN0cmluZyk7Cn0K
CgoKdm9pZApDb3B5V2lkZVN0cmluZ1RvVmVjdG9yKAogICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hh
clZlY3RvclR5cGUmIHRoZVZlY3Rvcik7CgoKCnZvaWQKQ29weVN0cmluZ1RvVmVjdG9yKAogICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB0aGVTdHJpbmcsCiAgICAgICAgICAgICAg
ICAgICAgICAgIENoYXJWZWN0b3JUeXBlJiB0aGVWZWN0b3IpOwojIDI0NDcgIlBsYXRmb3JtU3Vw
cG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgpYYWxhbkRPTUNoYXJWZWN0b3JUeXBlCk1ha2VYYWxh
bkRPTUNoYXJWZWN0b3IoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGRhdGEs
CiAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZlRyYW5zY29kZSA9IHRydWUpOwojIDI0NjEg
IlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgpYYWxhbkRPTUNoYXJWZWN0b3JU
eXBlCk1ha2VYYWxhbkRPTUNoYXJWZWN0b3IoY29uc3QgWGFsYW5ET01DaGFyKiBkYXRhKTsKIyAy
NDczICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIFhhbGFuRE9N
Q2hhclZlY3RvclR5cGUKTWFrZVhhbGFuRE9NQ2hhclZlY3Rvcihjb25zdCBYYWxhbkRPTVN0cmlu
ZyYgZGF0YSkKewogICAgICAgIHJldHVybiBNYWtlWGFsYW5ET01DaGFyVmVjdG9yKGNfd3N0cihk
YXRhKSk7Cn0KCgoKCgoKc3RydWN0IGNfd3N0cl9mdW5jdG9yIDogcHVibGljIHN0ZDo6dW5hcnlf
ZnVuY3Rpb248WGFsYW5ET01TdHJpbmcsIGNvbnN0IFhhbGFuRE9NQ2hhcio+Cgp7CiAgICAgICAg
cmVzdWx0X3R5cGUKICAgICAgICBvcGVyYXRvcigpIChjb25zdCBhcmd1bWVudF90eXBlJiB0aGVT
dHJpbmcpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIGNfd3N0cih0aGVT
dHJpbmcpOwogICAgICAgIH0KfTsKIyAyNTA1ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVs
cGVyLmhwcCIKc3RydWN0IERPTVN0cmluZ0hhc2hGdW5jdGlvbiA6IHB1YmxpYyBzdGQ6OnVuYXJ5
X2Z1bmN0aW9uPGNvbnN0IFhhbGFuRE9NU3RyaW5nJiwgc2l6ZV90PgoKewogICAgICAgIHJlc3Vs
dF90eXBlCiAgICAgICAgb3BlcmF0b3IoKSAoYXJndW1lbnRfdHlwZSB0aGVLZXkpIGNvbnN0CiAg
ICAgICAgewogICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVSYXdCdWZmZXIg
PSBjX3dzdHIodGhlS2V5KTsKCiAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRoZUhhc2hW
YWx1ZSA9IDBMOwoKICAgICAgICAgICAgICAgIGlmICh0aGVSYXdCdWZmZXIgIT0gMCkKICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCp0aGVSYXdCdWZmZXIp
CiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aGVIYXNoVmFsdWUgPSA1ICogdGhlSGFzaFZhbHVlICsgKnRoZVJhd0J1ZmZlcjsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlUmF3QnVmZmVyKys7CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0X3R5cGUodGhlSGFzaFZhbHVlKyspOwogICAgICAgIH0KfTsKIyAyNTQxICJQbGF0Zm9ybVN1
cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKc3RydWN0IERPTVN0cmluZ0VxdWFsc0Z1bmN0aW9u
IDogcHVibGljIHN0ZDo6YmluYXJ5X2Z1bmN0aW9uPGNvbnN0IFhhbGFuRE9NU3RyaW5nJiwgY29u
c3QgWGFsYW5ET01TdHJpbmcmLCBib29sPgoKewogICAgICAgIHJlc3VsdF90eXBlCiAgICAgICAg
b3BlcmF0b3IoKSAoZmlyc3RfYXJndW1lbnRfdHlwZSB0aGVMSFMsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2Vjb25kX2FyZ3VtZW50X3R5cGUgdGhlUkhTKSBjb25zdAogICAgICAg
IHsKICAgICAgICAgICAgICAgIHJldHVybiBlcXVhbHModGhlTEhTLCB0aGVSSFMpOwogICAgICAg
IH0KfTsKIyAyNTY0ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKc3RydWN0
IERPTVN0cmluZ0VxdWFsc0lnbm9yZUNhc2VGdW5jdGlvbiA6IHB1YmxpYyBzdGQ6OmJpbmFyeV9m
dW5jdGlvbjxjb25zdCBYYWxhbkRPTVN0cmluZyYsIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiwgYm9v
bD4KCnsKICAgICAgICByZXN1bHRfdHlwZQogICAgICAgIG9wZXJhdG9yKCkgKGZpcnN0X2FyZ3Vt
ZW50X3R5cGUgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZF9h
cmd1bWVudF90eXBlIHRoZVJIUykgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1
cm4gZXF1YWxzSWdub3JlQ2FzZSh0aGVMSFMsIHRoZVJIUyk7CiAgICAgICAgfQp9OwojIDI1ODcg
IlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgpzdHJ1Y3QgRE9NU3RyaW5nTm90
RXF1YWxzRnVuY3Rpb24gOiBwdWJsaWMgc3RkOjpiaW5hcnlfZnVuY3Rpb248Y29uc3QgWGFsYW5E
T01TdHJpbmcmLCBjb25zdCBYYWxhbkRPTVN0cmluZyYsIGJvb2w+Cgp7CiAgICAgICAgcmVzdWx0
X3R5cGUKICAgICAgICBvcGVyYXRvcigpIChmaXJzdF9hcmd1bWVudF90eXBlIHRoZUxIUywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRfYXJndW1lbnRfdHlwZSB0aGVSSFMp
IGNvbnN0CiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuICFlcXVhbHModGhlTEhTLCB0
aGVSSFMpOwogICAgICAgIH0KfTsKIyAyNjEwICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVs
cGVyLmhwcCIKc3RydWN0IERPTVN0cmluZ0xlc3NUaGFuRnVuY3Rpb24gOiBwdWJsaWMgc3RkOjpi
aW5hcnlfZnVuY3Rpb248Y29uc3QgWGFsYW5ET01TdHJpbmcmLCBjb25zdCBYYWxhbkRPTVN0cmlu
ZyYsIGJvb2w+Cgp7CiAgICAgICAgcmVzdWx0X3R5cGUKICAgICAgICBvcGVyYXRvcigpIChmaXJz
dF9hcmd1bWVudF90eXBlIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWNvbmRfYXJndW1lbnRfdHlwZSB0aGVSSFMpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgICAg
ICAgcmV0dXJuIGNvbXBhcmUodGhlTEhTLCB0aGVSSFMpIDwgMCA/IHRydWUgOiBmYWxzZTsKICAg
ICAgICB9Cn07CiMgMjYzMyAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCnN0
cnVjdCBET01TdHJpbmdMZXNzVGhhbklnbm9yZUNhc2VGdW5jdGlvbiA6IHB1YmxpYyBzdGQ6OmJp
bmFyeV9mdW5jdGlvbjxjb25zdCBYYWxhbkRPTVN0cmluZyYsIGNvbnN0IFhhbGFuRE9NU3RyaW5n
JiwgYm9vbD4KCnsKICAgICAgICByZXN1bHRfdHlwZQogICAgICAgIG9wZXJhdG9yKCkgKGZpcnN0
X2FyZ3VtZW50X3R5cGUgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
Y29uZF9hcmd1bWVudF90eXBlIHRoZVJIUykgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAg
ICByZXR1cm4gY29tcGFyZUlnbm9yZUNhc2UodGhlTEhTLCB0aGVSSFMpIDwgMCA/IHRydWUgOiBm
YWxzZTsKICAgICAgICB9Cn07CiMgMjY1NiAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBl
ci5ocHAiCnN0cnVjdCBET01TdHJpbmdMZXNzVGhhbklnbm9yZUNhc2VBU0NJSUZ1bmN0aW9uIDog
cHVibGljIHN0ZDo6YmluYXJ5X2Z1bmN0aW9uPGNvbnN0IFhhbGFuRE9NU3RyaW5nJiwgY29uc3Qg
WGFsYW5ET01TdHJpbmcmLCBib29sPgoKewogICAgICAgIHJlc3VsdF90eXBlCiAgICAgICAgb3Bl
cmF0b3IoKSAoZmlyc3RfYXJndW1lbnRfdHlwZSB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2Vjb25kX2FyZ3VtZW50X3R5cGUgdGhlUkhTKSBjb25zdAogICAgICAgIHsK
ICAgICAgICAgICAgICAgIHJldHVybiBjb21wYXJlSWdub3JlQ2FzZSh0aGVMSFMsIHRoZVJIUykg
PCAwID8gdHJ1ZSA6IGZhbHNlOwogICAgICAgIH0KfTsKIyAyNjc5ICJQbGF0Zm9ybVN1cHBvcnQv
RE9NU3RyaW5nSGVscGVyLmhwcCIKc3RydWN0IERPTVN0cmluZ0xlc3NUaGFuT3JFcXVhbEZ1bmN0
aW9uIDogcHVibGljIHN0ZDo6YmluYXJ5X2Z1bmN0aW9uPGNvbnN0IFhhbGFuRE9NU3RyaW5nJiwg
Y29uc3QgWGFsYW5ET01TdHJpbmcmLCBib29sPgoKewogICAgICAgIHJlc3VsdF90eXBlCiAgICAg
ICAgb3BlcmF0b3IoKSAoZmlyc3RfYXJndW1lbnRfdHlwZSB0aGVMSFMsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2Vjb25kX2FyZ3VtZW50X3R5cGUgdGhlUkhTKSBjb25zdAogICAg
ICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBjb21wYXJlKHRoZUxIUywgdGhlUkhTKSA8PSAw
ID8gdHJ1ZSA6IGZhbHNlOwogICAgICAgIH0KfTsKIyAyNzAyICJQbGF0Zm9ybVN1cHBvcnQvRE9N
U3RyaW5nSGVscGVyLmhwcCIKc3RydWN0IERPTVN0cmluZ0dyZWF0ZXJUaGFuRnVuY3Rpb24gOiBw
dWJsaWMgc3RkOjpiaW5hcnlfZnVuY3Rpb248Y29uc3QgWGFsYW5ET01TdHJpbmcmLCBjb25zdCBY
YWxhbkRPTVN0cmluZyYsIGJvb2w+Cgp7CiAgICAgICAgcmVzdWx0X3R5cGUKICAgICAgICBvcGVy
YXRvcigpIChmaXJzdF9hcmd1bWVudF90eXBlIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWNvbmRfYXJndW1lbnRfdHlwZSB0aGVSSFMpIGNvbnN0CiAgICAgICAgewog
ICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmUodGhlTEhTLCB0aGVSSFMpID4gMCA/IHRydWUg
OiBmYWxzZTsKICAgICAgICB9Cn07CiMgMjcyNSAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hl
bHBlci5ocHAiCnN0cnVjdCBET01TdHJpbmdHcmVhdGVyVGhhbk9yRXF1YWxGdW5jdGlvbiA6IHB1
YmxpYyBzdGQ6OmJpbmFyeV9mdW5jdGlvbjxjb25zdCBYYWxhbkRPTVN0cmluZyYsIGNvbnN0IFhh
bGFuRE9NU3RyaW5nJiwgYm9vbD4KCnsKICAgICAgICByZXN1bHRfdHlwZQogICAgICAgIG9wZXJh
dG9yKCkgKGZpcnN0X2FyZ3VtZW50X3R5cGUgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlY29uZF9hcmd1bWVudF90eXBlIHRoZVJIUykgY29uc3QKICAgICAgICB7CiAg
ICAgICAgICAgICAgICByZXR1cm4gY29tcGFyZSh0aGVMSFMsIHRoZVJIUykgPj0gMCA/IHRydWUg
OiBmYWxzZTsKICAgICAgICB9Cn07CiMgMjc0NiAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hl
bHBlci5ocHAiCnN0cnVjdCBsZXNzX25vX2Nhc2VfYXNjaWlfd2lkZV9zdHJpbmcgOiBwdWJsaWMg
c3RkOjpiaW5hcnlfZnVuY3Rpb248Y29uc3QgWGFsYW5ET01DaGFyKiwgY29uc3QgWGFsYW5ET01D
aGFyKiwgYm9vbD4KCnsKIyAyNzU3ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhw
cCIKICAgICAgICByZXN1bHRfdHlwZQogICAgICAgIG9wZXJhdG9yKCkoCiAgICAgICAgICAgICAg
ICAgICAgICAgIGZpcnN0X2FyZ3VtZW50X3R5cGUgdGhlTEhTLAogICAgICAgICAgICAgICAgICAg
ICAgICBzZWNvbmRfYXJndW1lbnRfdHlwZSB0aGVSSFMpIGNvbnN0CiAgICAgICAgewogICAgICAg
ICAgICAgICAgcmV0dXJuIGNvbXBhcmVJZ25vcmVDYXNlQVNDSUkodGhlTEhTLCB0aGVSSFMpIDwg
MCA/IHRydWUgOiBmYWxzZTsKICAgICAgICB9Cn07CiMgMjc3NCAiUGxhdGZvcm1TdXBwb3J0L0RP
TVN0cmluZ0hlbHBlci5ocHAiCmJvb2wKaXNYTUxXaGl0ZXNwYWNlKGNvbnN0IFhhbGFuRE9NU3Ry
aW5nJiBzdHJpbmcpOwojIDI3ODcgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBw
Igpib29sCmlzWE1MV2hpdGVzcGFjZSgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFs
YW5ET01DaGFyIGNoW10sCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdGFy
dCwKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbmd0aCk7CiMgMjgwMSAi
UGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBib29sCmlzWE1MV2hp
dGVzcGFjZShjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZykKewogICAgICAgICgodm9pZCkg
KCh0aGVTdHJpbmcgIT0gMCkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ0aGVTdHJpbmcgIT0gMCIs
ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIsIDI4MDQsIF9fUFJFVFRZX0ZV
TkNUSU9OX18pLCAwKSkpOwoKICAgICAgICByZXR1cm4gaXNYTUxXaGl0ZXNwYWNlKHRoZVN0cmlu
ZywgMCwgbGVuZ3RoKHRoZVN0cmluZykpOwp9CiMgNzYgIlhhbGFuU291cmNlVHJlZS9Gb3JtYXR0
ZXJUb1NvdXJjZVRyZWUuY3BwIiAyCgoKCiMgMSAiWE1MU3VwcG9ydC9Gb3JtYXR0ZXJUb0RPTS5o
cHAiIDEKIyA2MyAiWE1MU3VwcG9ydC9Gb3JtYXR0ZXJUb0RPTS5ocHAiCiMgMSAiWE1MU3VwcG9y
dC9YTUxTdXBwb3J0RGVmaW5pdGlvbnMuaHBwIiAxCiMgNjQgIlhNTFN1cHBvcnQvRm9ybWF0dGVy
VG9ET00uaHBwIiAyCgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzMuMC9pbmNsdWRlL2crKy92ZWN0b3IiIDEgMwojIDY4ICJYTUxTdXBwb3J0L0Zv
cm1hdHRlclRvRE9NLmhwcCIgMgoKCgoKIyAxICJYTUxTdXBwb3J0L0Zvcm1hdHRlckxpc3RlbmVy
LmhwcCIgMQojIDczICJYTUxTdXBwb3J0L0Zvcm1hdHRlclRvRE9NLmhwcCIgMgoKCgojIDEgIlhh
bGFuRE9NL1hhbGFuRE9NU3RyaW5nLmhwcCIgMQojIDc3ICJYTUxTdXBwb3J0L0Zvcm1hdHRlclRv
RE9NLmhwcCIgMgoKCgpjbGFzcyBYYWxhbkRvY3VtZW50OwpjbGFzcyBYYWxhbkRvY3VtZW50RnJh
Z21lbnQ7CmNsYXNzIFhhbGFuRWxlbWVudDsKY2xhc3MgWGFsYW5Ob2RlOwoKCgoKCgoKY2xhc3Mg
Rm9ybWF0dGVyVG9ET00gOiBwdWJsaWMgRm9ybWF0dGVyTGlzdGVuZXIKewpwdWJsaWM6CiMgMTAz
ICJYTUxTdXBwb3J0L0Zvcm1hdHRlclRvRE9NLmhwcCIKICAgICAgICBGb3JtYXR0ZXJUb0RPTSgK
ICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5Eb2N1bWVudCogZG9jLAogICAgICAgICAgICAg
ICAgICAgICAgICBYYWxhbkRvY3VtZW50RnJhZ21lbnQqIGRvY0ZyYWcsCiAgICAgICAgICAgICAg
ICAgICAgICAgIFhhbGFuRWxlbWVudCogY3VycmVudEVsZW1lbnQpOwojIDExNSAiWE1MU3VwcG9y
dC9Gb3JtYXR0ZXJUb0RPTS5ocHAiCiAgICAgICAgRm9ybWF0dGVyVG9ET00oCiAgICAgICAgICAg
ICAgICAgICAgICAgIFhhbGFuRG9jdW1lbnQqIGRvYywKICAgICAgICAgICAgICAgICAgICAgICAg
WGFsYW5FbGVtZW50KiBlbGVtKTsKCiAgICAgICAgdmlydHVhbAogICAgICAgIH5Gb3JtYXR0ZXJU
b0RPTSgpOwoKCgoKICAgICAgICB2aXJ0dWFsIHZvaWQKICAgICAgICBjaGFyYWN0ZXJzUmF3KAog
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxDaCogY29uc3QgY2hhcnMsCiAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBsZW5ndGgpOwoKICAgICAgICB2aXJ0
dWFsIHZvaWQKICAgICAgICBjb21tZW50KGNvbnN0IFhNTENoKiBjb25zdCBkYXRhKTsKCiAgICAg
ICAgdmlydHVhbCB2b2lkCiAgICAgICAgY2RhdGEoCiAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFhNTENoKiBjb25zdCBjaCwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IGxlbmd0aCk7CgogICAgICAgIHZpcnR1YWwgdm9pZAogICAgICAgIGVudGl0eVJlZmVy
ZW5jZShjb25zdCBYTUxDaCogY29uc3QgbmFtZSk7CgogICAgICAgIHZpcnR1YWwgdm9pZAogICAg
ICAgIHNldERvY3VtZW50TG9jYXRvcihjb25zdCBMb2NhdG9yKiBjb25zdCBsb2NhdG9yKTsKCiAg
ICAgICAgdmlydHVhbCB2b2lkCiAgICAgICAgc3RhcnREb2N1bWVudCgpOwoKICAgICAgICB2aXJ0
dWFsIHZvaWQKICAgICAgICBlbmREb2N1bWVudCgpOwoKICAgICAgICB2aXJ0dWFsIHZvaWQKICAg
ICAgICBzdGFydEVsZW1lbnQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
WE1MQ2gqIGNvbnN0IG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0cmli
dXRlTGlzdCYgYXR0cnMpOwoKICAgICAgICB2aXJ0dWFsIHZvaWQKICAgICAgICBlbmRFbGVtZW50
KGNvbnN0IFhNTENoKiBjb25zdCBuYW1lKTsKCiAgICAgICAgdmlydHVhbCB2b2lkCiAgICAgICAg
Y2hhcmFjdGVycygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxDaCog
Y29uc3QgY2hhcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IGxlbmd0aCk7CgogICAgICAgIHZpcnR1YWwgdm9pZAogICAgICAgIGlnbm9yYWJsZVdo
aXRlc3BhY2UoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MQ2gqIGNv
bnN0IGNoYXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGludCBsZW5ndGgpOwoKICAgICAgICB2aXJ0dWFsIHZvaWQKICAgICAgICBwcm9jZXNzaW5nSW5z
dHJ1Y3Rpb24oCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTENoKiBjb25zdCB0YXJn
ZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTENoKiBjb25zdCBkYXRhKTsKCiAg
ICAgICAgdmlydHVhbCB2b2lkCiAgICAgICAgcmVzZXREb2N1bWVudCgpOwoKICAgICAgICBYYWxh
bkRvY3VtZW50KgogICAgICAgIGdldERvY3VtZW50KCkgY29uc3QKICAgICAgICB7CiAgICAgICAg
ICAgICAgICByZXR1cm4gbV9kb2M7CiAgICAgICAgfQoKICAgICAgICB2b2lkCiAgICAgICAgc2V0
RG9jdW1lbnQoWGFsYW5Eb2N1bWVudCogdGhlRG9jdW1lbnQpCiAgICAgICAgewogICAgICAgICAg
ICAgICAgbV9kb2MgPSB0aGVEb2N1bWVudDsKICAgICAgICB9CgogICAgICAgIFhhbGFuRG9jdW1l
bnRGcmFnbWVudCoKICAgICAgICBnZXREb2N1bWVudEZyYWdtZW50KCkgY29uc3QKICAgICAgICB7
CiAgICAgICAgICAgICAgICByZXR1cm4gbV9kb2NGcmFnOwogICAgICAgIH0KCiAgICAgICAgdm9p
ZAogICAgICAgIHNldERvY3VtZW50RnJhZ21lbnQoWGFsYW5Eb2N1bWVudEZyYWdtZW50KiB0aGVE
b2N1bWVudEZyYWdtZW50KQogICAgICAgIHsKICAgICAgICAgICAgICAgIG1fZG9jRnJhZyA9IHRo
ZURvY3VtZW50RnJhZ21lbnQ7CiAgICAgICAgfQoKICAgICAgICBYYWxhbkVsZW1lbnQqCiAgICAg
ICAgZ2V0Q3VycmVudEVsZW1lbnQoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgICAgIHJl
dHVybiBtX2N1cnJlbnRFbGVtOwogICAgICAgIH0KCiAgICAgICAgdm9pZAogICAgICAgIHNldEN1
cnJlbnRFbGVtZW50KFhhbGFuRWxlbWVudCogdGhlRWxlbWVudCkKICAgICAgICB7CiAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRFbGVtID0gdGhlRWxlbWVudDsKICAgICAgICB9Cgpwcml2YXRlOgoK
CgoKICAgICAgICB2b2lkCiAgICAgICAgYXBwZW5kKFhhbGFuTm9kZSogbmV3Tm9kZSk7CgoKCiAg
ICAgICAgWGFsYW5Eb2N1bWVudCogbV9kb2M7CgogICAgICAgIFhhbGFuRG9jdW1lbnRGcmFnbWVu
dCogbV9kb2NGcmFnOwoKICAgICAgICBYYWxhbkVsZW1lbnQqIG1fY3VycmVudEVsZW07CgoKCgog
ICAgICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8WGFsYW5FbGVtZW50Kj4gRWxlbWVudFN0YWNrVHlw
ZTsKCgogICAgICAgIEVsZW1lbnRTdGFja1R5cGUgbV9lbGVtU3RhY2s7CgogICAgICAgIFhhbGFu
RE9NU3RyaW5nIG1fYnVmZmVyOwp9OwojIDgwICJYYWxhblNvdXJjZVRyZWUvRm9ybWF0dGVyVG9T
b3VyY2VUcmVlLmNwcCIgMgoKCgojIDEgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVD
b21tZW50LmhwcCIgMQojIDYyICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlQ29tbWVu
dC5ocHAiCiMgMSAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZURlZmluaXRpb25zLmhw
cCIgMQojIDYzICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlQ29tbWVudC5ocHAiIDIK
CgoKIyAxICJYYWxhbkRPTS9YYWxhbkNvbW1lbnQuaHBwIiAxCiMgNjIgIlhhbGFuRE9NL1hhbGFu
Q29tbWVudC5ocHAiCiMgMSAiWGFsYW5ET00vWGFsYW5ET01EZWZpbml0aW9ucy5ocHAiIDEKIyA2
MyAiWGFsYW5ET00vWGFsYW5Db21tZW50LmhwcCIgMgojIDEgIlhhbGFuRE9NL1hhbGFuQ2hhcmFj
dGVyRGF0YS5ocHAiIDEKIyA2MiAiWGFsYW5ET00vWGFsYW5DaGFyYWN0ZXJEYXRhLmhwcCIKIyAx
ICJYYWxhbkRPTS9YYWxhbkRPTURlZmluaXRpb25zLmhwcCIgMQojIDYzICJYYWxhbkRPTS9YYWxh
bkNoYXJhY3RlckRhdGEuaHBwIiAyCiMgMSAiWGFsYW5ET00vWGFsYW5Ob2RlLmhwcCIgMQojIDY0
ICJYYWxhbkRPTS9YYWxhbkNoYXJhY3RlckRhdGEuaHBwIiAyCiMgNzUgIlhhbGFuRE9NL1hhbGFu
Q2hhcmFjdGVyRGF0YS5ocHAiCmNsYXNzIFhhbGFuQ2hhcmFjdGVyRGF0YSA6IHB1YmxpYyBYYWxh
bk5vZGUKewpwdWJsaWM6CgogICAgICAgIFhhbGFuQ2hhcmFjdGVyRGF0YSgpOwoKICAgICAgICB2
aXJ0dWFsCiAgICAgICAgflhhbGFuQ2hhcmFjdGVyRGF0YSgpOwoKCiAgICAgICAgdmlydHVhbCBj
b25zdCBYYWxhbkRPTVN0cmluZyYKICAgICAgICBnZXROb2RlTmFtZSgpIGNvbnN0ID0gMDsKCgoK
CiAgICAgICAgdmlydHVhbCBjb25zdCBYYWxhbkRPTVN0cmluZyYKICAgICAgICBnZXROb2RlVmFs
dWUoKSBjb25zdCA9IDA7CgoKCgogICAgICAgIHZpcnR1YWwgTm9kZVR5cGUKICAgICAgICBnZXRO
b2RlVHlwZSgpIGNvbnN0ID0gMDsKIyAxMDkgIlhhbGFuRE9NL1hhbGFuQ2hhcmFjdGVyRGF0YS5o
cHAiCiAgICAgICAgdmlydHVhbCBYYWxhbk5vZGUqCiAgICAgICAgZ2V0UGFyZW50Tm9kZSgpIGNv
bnN0ID0gMDsKIyAxMjUgIlhhbGFuRE9NL1hhbGFuQ2hhcmFjdGVyRGF0YS5ocHAiCiAgICAgICAg
dmlydHVhbCBjb25zdCBYYWxhbk5vZGVMaXN0KgogICAgICAgIGdldENoaWxkTm9kZXMoKSBjb25z
dCA9IDA7CgoKCgoKCiAgICAgICAgdmlydHVhbCBYYWxhbk5vZGUqCiAgICAgICAgZ2V0Rmlyc3RD
aGlsZCgpIGNvbnN0ID0gMDsKCgoKCgoKICAgICAgICB2aXJ0dWFsIFhhbGFuTm9kZSoKICAgICAg
ICBnZXRMYXN0Q2hpbGQoKSBjb25zdCA9IDA7CgoKCgoKCiAgICAgICAgdmlydHVhbCBYYWxhbk5v
ZGUqCiAgICAgICAgZ2V0UHJldmlvdXNTaWJsaW5nKCkgY29uc3QgPSAwOwoKCgoKCgogICAgICAg
IHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIGdldE5leHRTaWJsaW5nKCkgY29uc3QgPSAwOwoK
CgoKCiAgICAgICAgdmlydHVhbCBjb25zdCBYYWxhbk5hbWVkTm9kZU1hcCoKICAgICAgICBnZXRB
dHRyaWJ1dGVzKCkgY29uc3QgPSAwOwojIDE3NiAiWGFsYW5ET00vWGFsYW5DaGFyYWN0ZXJEYXRh
LmhwcCIKICAgICAgICB2aXJ0dWFsIFhhbGFuRG9jdW1lbnQqCiAgICAgICAgZ2V0T3duZXJEb2N1
bWVudCgpIGNvbnN0ID0gMDsKIyAyMDQgIlhhbGFuRE9NL1hhbGFuQ2hhcmFjdGVyRGF0YS5ocHAi
CiAgICAgICAgdmlydHVhbCBYYWxhbkNoYXJhY3RlckRhdGEqCgogICAgICAgIGNsb25lTm9kZShi
b29sIGRlZXApIGNvbnN0ID0gMDsKIyAyMjggIlhhbGFuRE9NL1hhbGFuQ2hhcmFjdGVyRGF0YS5o
cHAiCiAgICAgICAgdmlydHVhbCBYYWxhbk5vZGUqCiAgICAgICAgaW5zZXJ0QmVmb3JlKAogICAg
ICAgICAgICAgICAgICAgICAgICBYYWxhbk5vZGUqIG5ld0NoaWxkLAogICAgICAgICAgICAgICAg
ICAgICAgICBYYWxhbk5vZGUqIHJlZkNoaWxkKSA9IDA7CiMgMjQ2ICJYYWxhbkRPTS9YYWxhbkNo
YXJhY3RlckRhdGEuaHBwIgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIHJlcGxh
Y2VDaGlsZCgKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5Ob2RlKiBuZXdDaGlsZCwKICAg
ICAgICAgICAgICAgICAgICAgICAgWGFsYW5Ob2RlKiBvbGRDaGlsZCkgPSAwOwojIDI1OCAiWGFs
YW5ET00vWGFsYW5DaGFyYWN0ZXJEYXRhLmhwcCIKICAgICAgICB2aXJ0dWFsIFhhbGFuTm9kZSoK
ICAgICAgICByZW1vdmVDaGlsZChYYWxhbk5vZGUqIG9sZENoaWxkKSA9IDA7CiMgMjcyICJYYWxh
bkRPTS9YYWxhbkNoYXJhY3RlckRhdGEuaHBwIgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgog
ICAgICAgIGFwcGVuZENoaWxkKFhhbGFuTm9kZSogbmV3Q2hpbGQpID0gMDsKIyAyODYgIlhhbGFu
RE9NL1hhbGFuQ2hhcmFjdGVyRGF0YS5ocHAiCiAgICAgICAgdmlydHVhbCBib29sCiAgICAgICAg
aGFzQ2hpbGROb2RlcygpIGNvbnN0ID0gMDsKIyAzMDcgIlhhbGFuRE9NL1hhbGFuQ2hhcmFjdGVy
RGF0YS5ocHAiCiAgICAgICAgdmlydHVhbCB2b2lkCiAgICAgICAgc2V0Tm9kZVZhbHVlKGNvbnN0
IFhhbGFuRE9NU3RyaW5nJiBub2RlVmFsdWUpID0gMDsKIyAzMzAgIlhhbGFuRE9NL1hhbGFuQ2hh
cmFjdGVyRGF0YS5ocHAiCiAgICAgICAgdmlydHVhbCB2b2lkCiAgICAgICAgbm9ybWFsaXplKCkg
PSAwOwojIDM0NiAiWGFsYW5ET00vWGFsYW5DaGFyYWN0ZXJEYXRhLmhwcCIKICAgICAgICB2aXJ0
dWFsIGJvb2wKICAgICAgICBzdXBwb3J0cygKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
WGFsYW5ET01TdHJpbmcmIGZlYXR1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhh
bGFuRE9NU3RyaW5nJiB2ZXJzaW9uKSBjb25zdCA9IDA7CiMgMzY0ICJYYWxhbkRPTS9YYWxhbkNo
YXJhY3RlckRhdGEuaHBwIgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5ET01TdHJpbmcmCiAg
ICAgICAgZ2V0TmFtZXNwYWNlVVJJKCkgY29uc3QgPSAwOwoKCgoKCiAgICAgICAgdmlydHVhbCBj
b25zdCBYYWxhbkRPTVN0cmluZyYKICAgICAgICBnZXRQcmVmaXgoKSBjb25zdCA9IDA7CiMgMzgx
ICJYYWxhbkRPTS9YYWxhbkNoYXJhY3RlckRhdGEuaHBwIgogICAgICAgIHZpcnR1YWwgY29uc3Qg
WGFsYW5ET01TdHJpbmcmCiAgICAgICAgZ2V0TG9jYWxOYW1lKCkgY29uc3QgPSAwOwojIDQxMyAi
WGFsYW5ET00vWGFsYW5DaGFyYWN0ZXJEYXRhLmhwcCIKICAgICAgICB2aXJ0dWFsIHZvaWQKICAg
ICAgICBzZXRQcmVmaXgoY29uc3QgWGFsYW5ET01TdHJpbmcmIHByZWZpeCkgPSAwOwoKCgoKCgog
ICAgICAgIHZpcnR1YWwgYm9vbAogICAgICAgIGlzSW5kZXhlZCgpIGNvbnN0ID0gMDsKCgoKCgoK
CiAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nCiAgICAgICAgZ2V0SW5kZXgoKSBjb25zdCA9
IDA7CiMgNDU1ICJYYWxhbkRPTS9YYWxhbkNoYXJhY3RlckRhdGEuaHBwIgogICAgICAgIHZpcnR1
YWwgY29uc3QgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgZ2V0RGF0YSgpIGNvbnN0ID0gMDsKIyA0
NjUgIlhhbGFuRE9NL1hhbGFuQ2hhcmFjdGVyRGF0YS5ocHAiCiAgICAgICAgdmlydHVhbCB1bnNp
Z25lZCBpbnQKICAgICAgICBnZXRMZW5ndGgoKSBjb25zdCA9IDA7CiMgNDgzICJYYWxhbkRPTS9Y
YWxhbkNoYXJhY3RlckRhdGEuaHBwIgogICAgICAgIHZpcnR1YWwgWGFsYW5ET01TdHJpbmcKICAg
ICAgICBzdWJzdHJpbmdEYXRhKAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg
b2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQpIGNvbnN0
ID0gMDsKIyA1MDAgIlhhbGFuRE9NL1hhbGFuQ2hhcmFjdGVyRGF0YS5ocHAiCiAgICAgICAgdmly
dHVhbCB2b2lkCiAgICAgICAgYXBwZW5kRGF0YShjb25zdCBYYWxhbkRPTVN0cmluZyYgYXJnKSA9
IDA7CiMgNTEzICJYYWxhbkRPTS9YYWxhbkNoYXJhY3RlckRhdGEuaHBwIgogICAgICAgIHZpcnR1
YWwgdm9pZAogICAgICAgIGluc2VydERhdGEoCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3Ry
aW5nJiBhcmcpID0gMDsKIyA1MzQgIlhhbGFuRE9NL1hhbGFuQ2hhcmFjdGVyRGF0YS5ocHAiCiAg
ICAgICAgdmlydHVhbCB2b2lkCiAgICAgICAgZGVsZXRlRGF0YSgKICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IGNvdW50KSA9IDA7CiMgNTU3ICJYYWxhbkRPTS9YYWxhbkNoYXJhY3RlckRhdGEuaHBw
IgogICAgICAgIHZpcnR1YWwgdm9pZAogICAgICAgIHJlcGxhY2VEYXRhKAogICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9N
U3RyaW5nJiBhcmcpID0gMDsKCgoKcHJvdGVjdGVkOgoKICAgICAgICBYYWxhbkNoYXJhY3RlckRh
dGEoY29uc3QgWGFsYW5DaGFyYWN0ZXJEYXRhJiB0aGVTb3VyY2UpOwoKICAgICAgICBYYWxhbkNo
YXJhY3RlckRhdGEmCiAgICAgICAgb3BlcmF0b3I9KGNvbnN0IFhhbGFuQ2hhcmFjdGVyRGF0YSYg
dGhlU291cmNlKTsKCiAgICAgICAgYm9vbAogICAgICAgIG9wZXJhdG9yPT0oY29uc3QgWGFsYW5D
aGFyYWN0ZXJEYXRhJiB0aGVSSFMpIGNvbnN0OwoKcHJpdmF0ZToKfTsKIyA2NCAiWGFsYW5ET00v
WGFsYW5Db21tZW50LmhwcCIgMgojIDc1ICJYYWxhbkRPTS9YYWxhbkNvbW1lbnQuaHBwIgpjbGFz
cyBYYWxhbkNvbW1lbnQgOiBwdWJsaWMgWGFsYW5DaGFyYWN0ZXJEYXRhCnsKcHVibGljOgoKICAg
ICAgICBYYWxhbkNvbW1lbnQoKTsKCiAgICAgICAgdmlydHVhbAogICAgICAgIH5YYWxhbkNvbW1l
bnQoKTsKCgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgZ2V0
Tm9kZU5hbWUoKSBjb25zdCA9IDA7CgoKCgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5ET01T
dHJpbmcmCiAgICAgICAgZ2V0Tm9kZVZhbHVlKCkgY29uc3QgPSAwOwoKCgoKICAgICAgICB2aXJ0
dWFsIE5vZGVUeXBlCiAgICAgICAgZ2V0Tm9kZVR5cGUoKSBjb25zdCA9IDA7CiMgMTA5ICJYYWxh
bkRPTS9YYWxhbkNvbW1lbnQuaHBwIgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAg
IGdldFBhcmVudE5vZGUoKSBjb25zdCA9IDA7CiMgMTI1ICJYYWxhbkRPTS9YYWxhbkNvbW1lbnQu
aHBwIgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5Ob2RlTGlzdCoKICAgICAgICBnZXRDaGls
ZE5vZGVzKCkgY29uc3QgPSAwOwoKCgoKCgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgogICAg
ICAgIGdldEZpcnN0Q2hpbGQoKSBjb25zdCA9IDA7CgoKCgoKCiAgICAgICAgdmlydHVhbCBYYWxh
bk5vZGUqCiAgICAgICAgZ2V0TGFzdENoaWxkKCkgY29uc3QgPSAwOwoKCgoKCgogICAgICAgIHZp
cnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIGdldFByZXZpb3VzU2libGluZygpIGNvbnN0ID0gMDsK
CgoKCgoKICAgICAgICB2aXJ0dWFsIFhhbGFuTm9kZSoKICAgICAgICBnZXROZXh0U2libGluZygp
IGNvbnN0ID0gMDsKCgoKCgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5OYW1lZE5vZGVNYXAq
CiAgICAgICAgZ2V0QXR0cmlidXRlcygpIGNvbnN0ID0gMDsKIyAxNzYgIlhhbGFuRE9NL1hhbGFu
Q29tbWVudC5ocHAiCiAgICAgICAgdmlydHVhbCBYYWxhbkRvY3VtZW50KgogICAgICAgIGdldE93
bmVyRG9jdW1lbnQoKSBjb25zdCA9IDA7CiMgMjA0ICJYYWxhbkRPTS9YYWxhbkNvbW1lbnQuaHBw
IgogICAgICAgIHZpcnR1YWwgWGFsYW5Db21tZW50KgoKICAgICAgICBjbG9uZU5vZGUoYm9vbCBk
ZWVwKSBjb25zdCA9IDA7CiMgMjI4ICJYYWxhbkRPTS9YYWxhbkNvbW1lbnQuaHBwIgogICAgICAg
IHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIGluc2VydEJlZm9yZSgKICAgICAgICAgICAgICAg
ICAgICAgICAgWGFsYW5Ob2RlKiBuZXdDaGlsZCwKICAgICAgICAgICAgICAgICAgICAgICAgWGFs
YW5Ob2RlKiByZWZDaGlsZCkgPSAwOwojIDI0NiAiWGFsYW5ET00vWGFsYW5Db21tZW50LmhwcCIK
ICAgICAgICB2aXJ0dWFsIFhhbGFuTm9kZSoKICAgICAgICByZXBsYWNlQ2hpbGQoCiAgICAgICAg
ICAgICAgICAgICAgICAgIFhhbGFuTm9kZSogbmV3Q2hpbGQsCiAgICAgICAgICAgICAgICAgICAg
ICAgIFhhbGFuTm9kZSogb2xkQ2hpbGQpID0gMDsKIyAyNTggIlhhbGFuRE9NL1hhbGFuQ29tbWVu
dC5ocHAiCiAgICAgICAgdmlydHVhbCBYYWxhbk5vZGUqCiAgICAgICAgcmVtb3ZlQ2hpbGQoWGFs
YW5Ob2RlKiBvbGRDaGlsZCkgPSAwOwojIDI3MiAiWGFsYW5ET00vWGFsYW5Db21tZW50LmhwcCIK
ICAgICAgICB2aXJ0dWFsIFhhbGFuTm9kZSoKICAgICAgICBhcHBlbmRDaGlsZChYYWxhbk5vZGUq
IG5ld0NoaWxkKSA9IDA7CiMgMjg2ICJYYWxhbkRPTS9YYWxhbkNvbW1lbnQuaHBwIgogICAgICAg
IHZpcnR1YWwgYm9vbAogICAgICAgIGhhc0NoaWxkTm9kZXMoKSBjb25zdCA9IDA7CiMgMzA4ICJY
YWxhbkRPTS9YYWxhbkNvbW1lbnQuaHBwIgogICAgICAgIHZpcnR1YWwgdm9pZAogICAgICAgIHNl
dE5vZGVWYWx1ZShjb25zdCBYYWxhbkRPTVN0cmluZyYgbm9kZVZhbHVlKSA9IDA7CiMgMzMxICJY
YWxhbkRPTS9YYWxhbkNvbW1lbnQuaHBwIgogICAgICAgIHZpcnR1YWwgdm9pZAogICAgICAgIG5v
cm1hbGl6ZSgpID0gMDsKIyAzNDcgIlhhbGFuRE9NL1hhbGFuQ29tbWVudC5ocHAiCiAgICAgICAg
dmlydHVhbCBib29sCiAgICAgICAgc3VwcG9ydHMoCiAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFhhbGFuRE9NU3RyaW5nJiBmZWF0dXJlLAogICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBYYWxhbkRPTVN0cmluZyYgdmVyc2lvbikgY29uc3QgPSAwOwojIDM2NSAiWGFsYW5ET00vWGFs
YW5Db21tZW50LmhwcCIKICAgICAgICB2aXJ0dWFsIGNvbnN0IFhhbGFuRE9NU3RyaW5nJgogICAg
ICAgIGdldE5hbWVzcGFjZVVSSSgpIGNvbnN0ID0gMDsKCgoKCgogICAgICAgIHZpcnR1YWwgY29u
c3QgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgZ2V0UHJlZml4KCkgY29uc3QgPSAwOwojIDM4MiAi
WGFsYW5ET00vWGFsYW5Db21tZW50LmhwcCIKICAgICAgICB2aXJ0dWFsIGNvbnN0IFhhbGFuRE9N
U3RyaW5nJgogICAgICAgIGdldExvY2FsTmFtZSgpIGNvbnN0ID0gMDsKIyA0MTQgIlhhbGFuRE9N
L1hhbGFuQ29tbWVudC5ocHAiCiAgICAgICAgdmlydHVhbCB2b2lkCiAgICAgICAgc2V0UHJlZml4
KGNvbnN0IFhhbGFuRE9NU3RyaW5nJiBwcmVmaXgpID0gMDsKCgoKCgoKICAgICAgICB2aXJ0dWFs
IGJvb2wKICAgICAgICBpc0luZGV4ZWQoKSBjb25zdCA9IDA7CgoKCgoKCgogICAgICAgIHZpcnR1
YWwgdW5zaWduZWQgbG9uZwogICAgICAgIGdldEluZGV4KCkgY29uc3QgPSAwOwojIDQ1NiAiWGFs
YW5ET00vWGFsYW5Db21tZW50LmhwcCIKICAgICAgICB2aXJ0dWFsIGNvbnN0IFhhbGFuRE9NU3Ry
aW5nJgogICAgICAgIGdldERhdGEoKSBjb25zdCA9IDA7CiMgNDY2ICJYYWxhbkRPTS9YYWxhbkNv
bW1lbnQuaHBwIgogICAgICAgIHZpcnR1YWwgdW5zaWduZWQgaW50CiAgICAgICAgZ2V0TGVuZ3Ro
KCkgY29uc3QgPSAwOwojIDQ4NCAiWGFsYW5ET00vWGFsYW5Db21tZW50LmhwcCIKICAgICAgICB2
aXJ0dWFsIFhhbGFuRE9NU3RyaW5nCiAgICAgICAgc3Vic3RyaW5nRGF0YSgKICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IGNvdW50KSBjb25zdCA9IDA7CiMgNTAxICJYYWxhbkRPTS9YYWxhbkNvbW1l
bnQuaHBwIgogICAgICAgIHZpcnR1YWwgdm9pZAogICAgICAgIGFwcGVuZERhdGEoY29uc3QgWGFs
YW5ET01TdHJpbmcmIGFyZykgPSAwOwojIDUxNCAiWGFsYW5ET00vWGFsYW5Db21tZW50LmhwcCIK
ICAgICAgICB2aXJ0dWFsIHZvaWQKICAgICAgICBpbnNlcnREYXRhKAogICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBYYWxhbkRPTVN0cmluZyYgYXJnKSA9IDA7CiMgNTM1ICJYYWxhbkRPTS9YYWxhbkNvbW1lbnQu
aHBwIgogICAgICAgIHZpcnR1YWwgdm9pZAogICAgICAgIGRlbGV0ZURhdGEoCiAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCBjb3VudCkgPSAwOwojIDU1OCAiWGFsYW5ET00vWGFsYW5Db21tZW50Lmhw
cCIKICAgICAgICB2aXJ0dWFsIHZvaWQKICAgICAgICByZXBsYWNlRGF0YSgKICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IGNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRP
TVN0cmluZyYgYXJnKSA9IDA7CgoKCnByb3RlY3RlZDoKCiAgICAgICAgWGFsYW5Db21tZW50KGNv
bnN0IFhhbGFuQ29tbWVudCYgdGhlU291cmNlKTsKCiAgICAgICAgWGFsYW5Db21tZW50JgogICAg
ICAgIG9wZXJhdG9yPShjb25zdCBYYWxhbkNvbW1lbnQmIHRoZVNvdXJjZSk7CgogICAgICAgIGJv
b2wKICAgICAgICBvcGVyYXRvcj09KGNvbnN0IFhhbGFuQ29tbWVudCYgdGhlUkhTKSBjb25zdDsK
CnByaXZhdGU6Cn07CiMgNjcgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVDb21tZW50
LmhwcCIgMgoKCgojIDEgIlhhbGFuRE9NL1hhbGFuRE9NU3RyaW5nLmhwcCIgMQojIDcxICJYYWxh
blNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlQ29tbWVudC5ocHAiIDIKCgoKY2xhc3MgWGFsYW5T
b3VyY2VUcmVlRG9jdW1lbnQ7CmNsYXNzIFhhbGFuU291cmNlVHJlZUVsZW1lbnQ7CmNsYXNzIFhh
bGFuU291cmNlVHJlZVByb2Nlc3NpbmdJbnN0cnVjdGlvbjsKY2xhc3MgWGFsYW5Tb3VyY2VUcmVl
VGV4dDsKIyA4OSAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZUNvbW1lbnQuaHBwIgpj
bGFzcyBYYWxhblNvdXJjZVRyZWVDb21tZW50IDogcHVibGljIFhhbGFuQ29tbWVudAp7CnB1Ymxp
YzoKIyAxMDMgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVDb21tZW50LmhwcCIKICAg
ICAgICBYYWxhblNvdXJjZVRyZWVDb21tZW50KAogICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBYYWxhbkRPTVN0cmluZyYgdGhlRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5T
b3VyY2VUcmVlRG9jdW1lbnQqIHRoZU93bmVyRG9jdW1lbnQsCiAgICAgICAgICAgICAgICAgICAg
ICAgIFhhbGFuU291cmNlVHJlZUVsZW1lbnQqIHRoZVBhcmVudEVsZW1lbnQgPSAwLAogICAgICAg
ICAgICAgICAgICAgICAgICBYYWxhbk5vZGUqIHRoZVByZXZpb3VzU2libGluZyA9IDAsCiAgICAg
ICAgICAgICAgICAgICAgICAgIFhhbGFuTm9kZSogdGhlTmV4dFNpYmxpbmcgPSAwLAogICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGhlSW5kZXggPSAwKTsKCiAgICAgICAgdmly
dHVhbAogICAgICAgIH5YYWxhblNvdXJjZVRyZWVDb21tZW50KCk7CgoKCgoKICAgICAgICB2aXJ0
dWFsIGNvbnN0IFhhbGFuRE9NU3RyaW5nJgogICAgICAgIGdldE5vZGVOYW1lKCkgY29uc3Q7CgoK
CgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgZ2V0Tm9kZVZh
bHVlKCkgY29uc3Q7CgoKCgogICAgICAgIHZpcnR1YWwgTm9kZVR5cGUKICAgICAgICBnZXROb2Rl
VHlwZSgpIGNvbnN0OwojIDE0MiAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZUNvbW1l
bnQuaHBwIgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIGdldFBhcmVudE5vZGUo
KSBjb25zdDsKIyAxNTggIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVDb21tZW50Lmhw
cCIKICAgICAgICB2aXJ0dWFsIGNvbnN0IFhhbGFuTm9kZUxpc3QqCiAgICAgICAgZ2V0Q2hpbGRO
b2RlcygpIGNvbnN0OwoKCgoKCgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIGdl
dEZpcnN0Q2hpbGQoKSBjb25zdDsKCgoKCgoKICAgICAgICB2aXJ0dWFsIFhhbGFuTm9kZSoKICAg
ICAgICBnZXRMYXN0Q2hpbGQoKSBjb25zdDsKCgoKCgoKICAgICAgICB2aXJ0dWFsIFhhbGFuTm9k
ZSoKICAgICAgICBnZXRQcmV2aW91c1NpYmxpbmcoKSBjb25zdDsKCgoKCgoKICAgICAgICB2aXJ0
dWFsIFhhbGFuTm9kZSoKICAgICAgICBnZXROZXh0U2libGluZygpIGNvbnN0OwoKCgoKCiAgICAg
ICAgdmlydHVhbCBjb25zdCBYYWxhbk5hbWVkTm9kZU1hcCoKICAgICAgICBnZXRBdHRyaWJ1dGVz
KCkgY29uc3Q7CiMgMjA5ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlQ29tbWVudC5o
cHAiCiAgICAgICAgdmlydHVhbCBYYWxhbkRvY3VtZW50KgogICAgICAgIGdldE93bmVyRG9jdW1l
bnQoKSBjb25zdDsKIyAyMzcgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVDb21tZW50
LmhwcCIKICAgICAgICB2aXJ0dWFsIFhhbGFuU291cmNlVHJlZUNvbW1lbnQqCgogICAgICAgIGNs
b25lTm9kZShib29sIGRlZXApIGNvbnN0OwojIDI2MSAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291
cmNlVHJlZUNvbW1lbnQuaHBwIgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIGlu
c2VydEJlZm9yZSgKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5Ob2RlKiBuZXdDaGlsZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5Ob2RlKiByZWZDaGlsZCk7CiMgMjc5ICJYYWxh
blNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlQ29tbWVudC5ocHAiCiAgICAgICAgdmlydHVhbCBY
YWxhbk5vZGUqCiAgICAgICAgcmVwbGFjZUNoaWxkKAogICAgICAgICAgICAgICAgICAgICAgICBY
YWxhbk5vZGUqIG5ld0NoaWxkLAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhbk5vZGUqIG9s
ZENoaWxkKTsKIyAyOTEgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVDb21tZW50Lmhw
cCIKICAgICAgICB2aXJ0dWFsIFhhbGFuTm9kZSoKICAgICAgICByZW1vdmVDaGlsZChYYWxhbk5v
ZGUqIG9sZENoaWxkKTsKIyAzMDUgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVDb21t
ZW50LmhwcCIKICAgICAgICB2aXJ0dWFsIFhhbGFuTm9kZSoKICAgICAgICBhcHBlbmRDaGlsZChY
YWxhbk5vZGUqIG5ld0NoaWxkKTsKIyAzMTkgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRy
ZWVDb21tZW50LmhwcCIKICAgICAgICB2aXJ0dWFsIGJvb2wKICAgICAgICBoYXNDaGlsZE5vZGVz
KCkgY29uc3Q7CiMgMzQwICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlQ29tbWVudC5o
cHAiCiAgICAgICAgdmlydHVhbCB2b2lkCiAgICAgICAgc2V0Tm9kZVZhbHVlKGNvbnN0IFhhbGFu
RE9NU3RyaW5nJiBub2RlVmFsdWUpOwojIDM2MyAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNl
VHJlZUNvbW1lbnQuaHBwIgogICAgICAgIHZpcnR1YWwgdm9pZAogICAgICAgIG5vcm1hbGl6ZSgp
OwojIDM3OSAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZUNvbW1lbnQuaHBwIgogICAg
ICAgIHZpcnR1YWwgYm9vbAogICAgICAgIHN1cHBvcnRzKAogICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBYYWxhbkRPTVN0cmluZyYgZmVhdHVyZSwKICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgWGFsYW5ET01TdHJpbmcmIHZlcnNpb24pIGNvbnN0OwojIDM5NyAiWGFsYW5Tb3VyY2VU
cmVlL1hhbGFuU291cmNlVHJlZUNvbW1lbnQuaHBwIgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFs
YW5ET01TdHJpbmcmCiAgICAgICAgZ2V0TmFtZXNwYWNlVVJJKCkgY29uc3Q7CgoKCgoKICAgICAg
ICB2aXJ0dWFsIGNvbnN0IFhhbGFuRE9NU3RyaW5nJgogICAgICAgIGdldFByZWZpeCgpIGNvbnN0
OwojIDQxNCAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZUNvbW1lbnQuaHBwIgogICAg
ICAgIHZpcnR1YWwgY29uc3QgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgZ2V0TG9jYWxOYW1lKCkg
Y29uc3Q7CiMgNDQ2ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlQ29tbWVudC5ocHAi
CiAgICAgICAgdmlydHVhbCB2b2lkCiAgICAgICAgc2V0UHJlZml4KGNvbnN0IFhhbGFuRE9NU3Ry
aW5nJiBwcmVmaXgpOwoKICAgICAgICB2aXJ0dWFsIGJvb2wKICAgICAgICBpc0luZGV4ZWQoKSBj
b25zdDsKCiAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nCiAgICAgICAgZ2V0SW5kZXgoKSBj
b25zdDsKIyA0NzcgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVDb21tZW50LmhwcCIK
ICAgICAgICB2aXJ0dWFsIGNvbnN0IFhhbGFuRE9NU3RyaW5nJgogICAgICAgIGdldERhdGEoKSBj
b25zdDsKIyA0ODcgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVDb21tZW50LmhwcCIK
ICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludAogICAgICAgIGdldExlbmd0aCgpIGNvbnN0Owoj
IDUwNSAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZUNvbW1lbnQuaHBwIgogICAgICAg
IHZpcnR1YWwgWGFsYW5ET01TdHJpbmcKICAgICAgICBzdWJzdHJpbmdEYXRhKAogICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgY291bnQpIGNvbnN0OwojIDUyMiAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFu
U291cmNlVHJlZUNvbW1lbnQuaHBwIgogICAgICAgIHZpcnR1YWwgdm9pZAogICAgICAgIGFwcGVu
ZERhdGEoY29uc3QgWGFsYW5ET01TdHJpbmcmIGFyZyk7CiMgNTM1ICJYYWxhblNvdXJjZVRyZWUv
WGFsYW5Tb3VyY2VUcmVlQ29tbWVudC5ocHAiCiAgICAgICAgdmlydHVhbCB2b2lkCiAgICAgICAg
aW5zZXJ0RGF0YSgKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCwK
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIGFyZyk7CiMgNTU2
ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlQ29tbWVudC5ocHAiCiAgICAgICAgdmly
dHVhbCB2b2lkCiAgICAgICAgZGVsZXRlRGF0YSgKICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNv
dW50KTsKIyA1NzkgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVDb21tZW50LmhwcCIK
ICAgICAgICB2aXJ0dWFsIHZvaWQKICAgICAgICByZXBsYWNlRGF0YSgKICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50IGNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0
cmluZyYgYXJnKTsKCgoKCgoKICAgICAgICBYYWxhblNvdXJjZVRyZWVFbGVtZW50KgogICAgICAg
IGdldFBhcmVudEVsZW1lbnQoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVy
biBtX3BhcmVudEVsZW1lbnQ7CiAgICAgICAgfQoKICAgICAgICB2b2lkCiAgICAgICAgc2V0UGFy
ZW50RWxlbWVudChYYWxhblNvdXJjZVRyZWVFbGVtZW50KiB0aGVQYXJlbnRFbGVtZW50KQogICAg
ICAgIHsKICAgICAgICAgICAgICAgIG1fcGFyZW50RWxlbWVudCA9IHRoZVBhcmVudEVsZW1lbnQ7
CiAgICAgICAgfQoKICAgICAgICB2b2lkCiAgICAgICAgc2V0UHJldmlvdXNTaWJsaW5nKFhhbGFu
U291cmNlVHJlZUNvbW1lbnQqIHRoZVByZXZpb3VzU2libGluZyk7CgogICAgICAgIHZvaWQKICAg
ICAgICBzZXRQcmV2aW91c1NpYmxpbmcoWGFsYW5Tb3VyY2VUcmVlRWxlbWVudCogdGhlUHJldmlv
dXNTaWJsaW5nKTsKCiAgICAgICAgdm9pZAogICAgICAgIHNldFByZXZpb3VzU2libGluZyhYYWxh
blNvdXJjZVRyZWVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIHRoZVByZXZpb3VzU2libGluZyk7Cgog
ICAgICAgIHZvaWQKICAgICAgICBzZXRQcmV2aW91c1NpYmxpbmcoWGFsYW5Tb3VyY2VUcmVlVGV4
dCogdGhlUHJldmlvdXNTaWJsaW5nKTsKCiAgICAgICAgdm9pZAogICAgICAgIGFwcGVuZFNpYmxp
bmdOb2RlKFhhbGFuU291cmNlVHJlZUNvbW1lbnQqIHRoZVNpYmxpbmcpOwoKICAgICAgICB2b2lk
CiAgICAgICAgYXBwZW5kU2libGluZ05vZGUoWGFsYW5Tb3VyY2VUcmVlRWxlbWVudCogdGhlU2li
bGluZyk7CgogICAgICAgIHZvaWQKICAgICAgICBhcHBlbmRTaWJsaW5nTm9kZShYYWxhblNvdXJj
ZVRyZWVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIHRoZVNpYmxpbmcpOwoKICAgICAgICB2b2lkCiAg
ICAgICAgYXBwZW5kU2libGluZ05vZGUoWGFsYW5Tb3VyY2VUcmVlVGV4dCogdGhlU2libGluZyk7
CgogICAgICAgIHZvaWQKICAgICAgICBzZXRJbmRleCh1bnNpZ25lZCBpbnQgdGhlSW5kZXgpCiAg
ICAgICAgewogICAgICAgICAgICAgICAgbV9pbmRleCA9IHRoZUluZGV4OwogICAgICAgIH0KCnBy
b3RlY3RlZDoKCiAgICAgICAgWGFsYW5Tb3VyY2VUcmVlQ29tbWVudCgKICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgWGFsYW5Tb3VyY2VUcmVlQ29tbWVudCYgdGhlU291cmNlLAogICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGRlZXAgPSBmYWxzZSk7Cgpwcml2YXRlOgoKCiAgICAgICAg
WGFsYW5Tb3VyY2VUcmVlQ29tbWVudCYKICAgICAgICBvcGVyYXRvcj0oY29uc3QgWGFsYW5Tb3Vy
Y2VUcmVlQ29tbWVudCYgdGhlU291cmNlKTsKCiAgICAgICAgYm9vbAogICAgICAgIG9wZXJhdG9y
PT0oY29uc3QgWGFsYW5Tb3VyY2VUcmVlQ29tbWVudCYgdGhlUkhTKSBjb25zdDsKCgoKICAgICAg
ICBjb25zdCBYYWxhbkRPTVN0cmluZyYgbV9kYXRhOwoKICAgICAgICBYYWxhblNvdXJjZVRyZWVE
b2N1bWVudCogbV9vd25lckRvY3VtZW50OwoKICAgICAgICBYYWxhblNvdXJjZVRyZWVFbGVtZW50
KiBtX3BhcmVudEVsZW1lbnQ7CgogICAgICAgIFhhbGFuTm9kZSogbV9wcmV2aW91c1NpYmxpbmc7
CgogICAgICAgIFhhbGFuTm9kZSogbV9uZXh0U2libGluZzsKCiAgICAgICAgdW5zaWduZWQgaW50
IG1faW5kZXg7Cn07CiMgODQgIlhhbGFuU291cmNlVHJlZS9Gb3JtYXR0ZXJUb1NvdXJjZVRyZWUu
Y3BwIiAyCiMgMSAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZURvY3VtZW50LmhwcCIg
MQojIDYyICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRG9jdW1lbnQuaHBwIgojIDEg
IlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVEZWZpbml0aW9ucy5ocHAiIDEKIyA2MyAi
WGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZURvY3VtZW50LmhwcCIgMgoKCgojIDEgIi91
c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9n
KysvZGVxdWUiIDEgMwoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2RlcXVlLmgiIDEgMwojIDMxICIvdXNy
L2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysr
L2JpdHMvc3RkX2RlcXVlLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwoj
IDM0ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvZysrL2JpdHMvZnVuY3RleGNlcHQuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvZXhjZXB0aW9uX2RlZmlu
ZXMuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBz
dGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9f
dGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7
CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19s
b2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJy
b3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChj
b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hh
ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7
CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9p
ZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5k
ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFp
bHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgMzMgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfZGVxdWUuaCIgMiAz
CiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9p
bmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9nY2Mz
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9k
ZXF1ZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51
eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDM1ICIvdXNyL2xv
Y2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2Jp
dHMvc3RkX2RlcXVlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMwoj
IDM2ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvZysrL2JpdHMvc3RkX2RlcXVlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfdW5pbml0
aWFsaXplZC5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9kZXF1ZS5oIiAyIDMKIyAxICIvdXNy
L2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysr
L2JpdHMvc3RsX2RlcXVlLmgiIDEgMwojIDMxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2RlcXVlLmgiIDMKIyAx
ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1
ZGUvZysrL2JpdHMvY29uY2VwdF9jaGVjay5oIiAxIDMKIyAzMiAiL3Vzci9sb2NhbC9nY2MzL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9kZXF1
ZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMSAzCiMg
MzMgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5j
bHVkZS9nKysvYml0cy9zdGxfZGVxdWUuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRv
cl9iYXNlX2Z1bmNzLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2RlcXVlLmgiIDIgMwojIDcy
ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1
ZGUvZysrL2JpdHMvc3RsX2RlcXVlLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCmlubGluZSBzaXpl
X3QgX19kZXF1ZV9idWZfc2l6ZShzaXplX3QgX19zaXplKSB7CiAgcmV0dXJuIF9fc2l6ZSA8IDUx
MiA/IHNpemVfdCg1MTIgLyBfX3NpemUpIDogc2l6ZV90KDEpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfUmVmLCBjbGFzcyBfUHRyPgpzdHJ1Y3QgX0RlcXVlX2l0ZXJhdG9yIHsKICB0
eXBlZGVmIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9UcCYsIF9UcCo+IGl0ZXJhdG9yOwogIHR5cGVk
ZWYgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgY29uc3QgX1RwJiwgY29uc3QgX1RwKj4gY29uc3RfaXRl
cmF0b3I7CiAgc3RhdGljIHNpemVfdCBfU19idWZmZXJfc2l6ZSgpIHsgcmV0dXJuIF9fZGVxdWVf
YnVmX3NpemUoc2l6ZW9mKF9UcCkpOyB9CgogIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRv
cl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBl
ZGVmIF9QdHIgcG9pbnRlcjsKICB0eXBlZGVmIF9SZWYgcmVmZXJlbmNlOwogIHR5cGVkZWYgc2l6
ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlw
ZWRlZiBfVHAqKiBfTWFwX3BvaW50ZXI7CgogIHR5cGVkZWYgX0RlcXVlX2l0ZXJhdG9yIF9TZWxm
OwoKICBfVHAqIF9NX2N1cjsKICBfVHAqIF9NX2ZpcnN0OwogIF9UcCogX01fbGFzdDsKICBfTWFw
X3BvaW50ZXIgX01fbm9kZTsKCiAgX0RlcXVlX2l0ZXJhdG9yKF9UcCogX194LCBfTWFwX3BvaW50
ZXIgX195KQogICAgOiBfTV9jdXIoX194KSwgX01fZmlyc3QoKl9feSksCiAgICAgIF9NX2xhc3Qo
Kl9feSArIF9TX2J1ZmZlcl9zaXplKCkpLCBfTV9ub2RlKF9feSkge30KICBfRGVxdWVfaXRlcmF0
b3IoKSA6IF9NX2N1cigwKSwgX01fZmlyc3QoMCksIF9NX2xhc3QoMCksIF9NX25vZGUoMCkge30K
ICBfRGVxdWVfaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImIF9feCkKICAgIDogX01fY3VyKF9feC5f
TV9jdXIpLCBfTV9maXJzdChfX3guX01fZmlyc3QpLAogICAgICBfTV9sYXN0KF9feC5fTV9sYXN0
KSwgX01fbm9kZShfX3guX01fbm9kZSkge30KCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0
IHsgcmV0dXJuICpfTV9jdXI7IH0KICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVy
biBfTV9jdXI7IH0KCiAgZGlmZmVyZW5jZV90eXBlIG9wZXJhdG9yLShjb25zdCBfU2VsZiYgX194
KSBjb25zdCB7CiAgICByZXR1cm4gZGlmZmVyZW5jZV90eXBlKF9TX2J1ZmZlcl9zaXplKCkpICog
KF9NX25vZGUgLSBfX3guX01fbm9kZSAtIDEpICsKICAgICAgKF9NX2N1ciAtIF9NX2ZpcnN0KSAr
IChfX3guX01fbGFzdCAtIF9feC5fTV9jdXIpOwogIH0KCiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7
CiAgICArK19NX2N1cjsKICAgIGlmIChfTV9jdXIgPT0gX01fbGFzdCkgewogICAgICBfTV9zZXRf
bm9kZShfTV9ub2RlICsgMSk7CiAgICAgIF9NX2N1ciA9IF9NX2ZpcnN0OwogICAgfQogICAgcmV0
dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewogICAgX1NlbGYgX190bXAg
PSAqdGhpczsKICAgICsrKnRoaXM7CiAgICByZXR1cm4gX190bXA7CiAgfQoKICBfU2VsZiYgb3Bl
cmF0b3ItLSgpIHsKICAgIGlmIChfTV9jdXIgPT0gX01fZmlyc3QpIHsKICAgICAgX01fc2V0X25v
ZGUoX01fbm9kZSAtIDEpOwogICAgICBfTV9jdXIgPSBfTV9sYXN0OwogICAgfQogICAgLS1fTV9j
dXI7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBf
U2VsZiBfX3RtcCA9ICp0aGlzOwogICAgLS0qdGhpczsKICAgIHJldHVybiBfX3RtcDsKICB9Cgog
IF9TZWxmJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX24pCiAgewogICAgZGlmZmVyZW5j
ZV90eXBlIF9fb2Zmc2V0ID0gX19uICsgKF9NX2N1ciAtIF9NX2ZpcnN0KTsKICAgIGlmIChfX29m
ZnNldCA+PSAwICYmIF9fb2Zmc2V0IDwgZGlmZmVyZW5jZV90eXBlKF9TX2J1ZmZlcl9zaXplKCkp
KQogICAgICBfTV9jdXIgKz0gX19uOwogICAgZWxzZSB7CiAgICAgIGRpZmZlcmVuY2VfdHlwZSBf
X25vZGVfb2Zmc2V0ID0KICAgICAgICBfX29mZnNldCA+IDAgPyBfX29mZnNldCAvIGRpZmZlcmVu
Y2VfdHlwZShfU19idWZmZXJfc2l6ZSgpKQogICAgICAgICAgICAgICAgICAgOiAtZGlmZmVyZW5j
ZV90eXBlKCgtX19vZmZzZXQgLSAxKSAvIF9TX2J1ZmZlcl9zaXplKCkpIC0gMTsKICAgICAgX01f
c2V0X25vZGUoX01fbm9kZSArIF9fbm9kZV9vZmZzZXQpOwogICAgICBfTV9jdXIgPSBfTV9maXJz
dCArCiAgICAgICAgKF9fb2Zmc2V0IC0gX19ub2RlX29mZnNldCAqIGRpZmZlcmVuY2VfdHlwZShf
U19idWZmZXJfc2l6ZSgpKSk7CiAgICB9CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBfU2VsZiBv
cGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QKICB7CiAgICBfU2VsZiBfX3RtcCA9
ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wICs9IF9fbjsKICB9CgogIF9TZWxmJiBvcGVyYXRvci09
KGRpZmZlcmVuY2VfdHlwZSBfX24pIHsgcmV0dXJuICp0aGlzICs9IC1fX247IH0KCiAgX1NlbGYg
b3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsKICAgIF9TZWxmIF9fdG1wID0g
KnRoaXM7CiAgICByZXR1cm4gX190bXAgLT0gX19uOwogIH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9y
W10oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKigqdGhpcyArIF9fbik7IH0K
CiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9TZWxmJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX2N1
ciA9PSBfX3guX01fY3VyOyB9CiAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9TZWxmJiBfX3gpIGNv
bnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gX194KTsgfQogIGJvb2wgb3BlcmF0b3I8KGNvbnN0IF9T
ZWxmJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiAoX01fbm9kZSA9PSBfX3guX01fbm9kZSkgPwog
ICAgICAoX01fY3VyIDwgX194Ll9NX2N1cikgOiAoX01fbm9kZSA8IF9feC5fTV9ub2RlKTsKICB9
CiAgYm9vbCBvcGVyYXRvcj4oY29uc3QgX1NlbGYmIF9feCkgY29uc3QgeyByZXR1cm4gX194IDwg
KnRoaXM7IH0KICBib29sIG9wZXJhdG9yPD0oY29uc3QgX1NlbGYmIF9feCkgY29uc3QgeyByZXR1
cm4gIShfX3ggPCAqdGhpcyk7IH0KICBib29sIG9wZXJhdG9yPj0oY29uc3QgX1NlbGYmIF9feCkg
Y29uc3QgeyByZXR1cm4gISgqdGhpcyA8IF9feCk7IH0KCiAgdm9pZCBfTV9zZXRfbm9kZShfTWFw
X3BvaW50ZXIgX19uZXdfbm9kZSkgewogICAgX01fbm9kZSA9IF9fbmV3X25vZGU7CiAgICBfTV9m
aXJzdCA9ICpfX25ld19ub2RlOwogICAgX01fbGFzdCA9IF9NX2ZpcnN0ICsgZGlmZmVyZW5jZV90
eXBlKF9TX2J1ZmZlcl9zaXplKCkpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9SZWYsIGNsYXNzIF9QdHI+CmlubGluZSBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmLCBfUHRy
PgpvcGVyYXRvcisocHRyZGlmZl90IF9fbiwgY29uc3QgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1Jl
ZiwgX1B0cj4mIF9feCkKewogIHJldHVybiBfX3ggKyBfX247Cn0KIyAyMDkgIi91c3IvbG9jYWwv
Z2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9z
dGxfZGVxdWUuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2MsIGJvb2wgX19p
c19zdGF0aWM+CmNsYXNzIF9EZXF1ZV9hbGxvY19iYXNlIHsKcHVibGljOgogIHR5cGVkZWYgdHlw
ZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsX0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9y
X3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9N
X25vZGVfYWxsb2NhdG9yOyB9CgogIF9EZXF1ZV9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90
eXBlJiBfX2EpCiAgICA6IF9NX25vZGVfYWxsb2NhdG9yKF9fYSksIF9NX21hcF9hbGxvY2F0b3Io
X19hKSwKICAgICAgX01fbWFwKDApLCBfTV9tYXBfc2l6ZSgwKQogIHt9Cgpwcm90ZWN0ZWQ6CiAg
dHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCosIF9BbGxvYz46OmFsbG9jYXRvcl90
eXBlCiAgICAgICAgICBfTWFwX2FsbG9jYXRvcl90eXBlOwoKICBhbGxvY2F0b3JfdHlwZSBfTV9u
b2RlX2FsbG9jYXRvcjsKICBfTWFwX2FsbG9jYXRvcl90eXBlIF9NX21hcF9hbGxvY2F0b3I7Cgog
IF9UcCogX01fYWxsb2NhdGVfbm9kZSgpIHsKICAgIHJldHVybiBfTV9ub2RlX2FsbG9jYXRvci5h
bGxvY2F0ZShfX2RlcXVlX2J1Zl9zaXplKHNpemVvZihfVHApKSk7CiAgfQogIHZvaWQgX01fZGVh
bGxvY2F0ZV9ub2RlKF9UcCogX19wKSB7CiAgICBfTV9ub2RlX2FsbG9jYXRvci5kZWFsbG9jYXRl
KF9fcCwgX19kZXF1ZV9idWZfc2l6ZShzaXplb2YoX1RwKSkpOwogIH0KICBfVHAqKiBfTV9hbGxv
Y2F0ZV9tYXAoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9NX21hcF9hbGxvY2F0b3IuYWxsb2Nh
dGUoX19uKTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZV9tYXAoX1RwKiogX19wLCBzaXplX3QgX19u
KQogICAgeyBfTV9tYXBfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX19wLCBfX24pOyB9CgogIF9UcCoq
IF9NX21hcDsKICBzaXplX3QgX01fbWFwX3NpemU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX0FsbG9jPgpjbGFzcyBfRGVxdWVfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywgdHJ1ZT4K
ewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCxfQWxsb2M+Ojph
bGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2Nh
dG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQoKICBfRGVxdWVfYWxsb2Nf
YmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpIDogX01fbWFwKDApLCBfTV9tYXBfc2l6ZSgwKSB7
fQoKcHJvdGVjdGVkOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxv
Yz46Ol9BbGxvY190eXBlIF9Ob2RlX2FsbG9jX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxs
b2NfdHJhaXRzPF9UcCosIF9BbGxvYz46Ol9BbGxvY190eXBlIF9NYXBfYWxsb2NfdHlwZTsKCiAg
X1RwKiBfTV9hbGxvY2F0ZV9ub2RlKCkgewogICAgcmV0dXJuIF9Ob2RlX2FsbG9jX3R5cGU6OmFs
bG9jYXRlKF9fZGVxdWVfYnVmX3NpemUoc2l6ZW9mKF9UcCkpKTsKICB9CiAgdm9pZCBfTV9kZWFs
bG9jYXRlX25vZGUoX1RwKiBfX3ApIHsKICAgIF9Ob2RlX2FsbG9jX3R5cGU6OmRlYWxsb2NhdGUo
X19wLCBfX2RlcXVlX2J1Zl9zaXplKHNpemVvZihfVHApKSk7CiAgfQogIF9UcCoqIF9NX2FsbG9j
YXRlX21hcChzaXplX3QgX19uKQogICAgeyByZXR1cm4gX01hcF9hbGxvY190eXBlOjphbGxvY2F0
ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlX21hcChfVHAqKiBfX3AsIHNpemVfdCBfX24p
CiAgICB7IF9NYXBfYWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7IH0KCiAgX1RwKiog
X01fbWFwOwogIHNpemVfdCBfTV9tYXBfc2l6ZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9BbGxvYz4KY2xhc3MgX0RlcXVlX2Jhc2UKICA6IHB1YmxpYyBfRGVxdWVfYWxsb2NfYmFz
ZTxfVHAsX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRz
PF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgp7CnB1YmxpYzoKICB0eXBlZGVmIF9EZXF1
ZV9hbGxvY19iYXNlPF9UcCxfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Fs
bG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgICAgICAgIF9CYXNl
OwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBl
OwogIHR5cGVkZWYgX0RlcXVlX2l0ZXJhdG9yPF9UcCxfVHAmLF9UcCo+IGl0ZXJhdG9yOwogIHR5
cGVkZWYgX0RlcXVlX2l0ZXJhdG9yPF9UcCxjb25zdCBfVHAmLGNvbnN0IF9UcCo+IGNvbnN0X2l0
ZXJhdG9yOwoKICBfRGVxdWVfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hLCBzaXplX3Qg
X19udW1fZWxlbWVudHMpCiAgICA6IF9CYXNlKF9fYSksIF9NX3N0YXJ0KCksIF9NX2ZpbmlzaCgp
CiAgICB7IF9NX2luaXRpYWxpemVfbWFwKF9fbnVtX2VsZW1lbnRzKTsgfQogIF9EZXF1ZV9iYXNl
KGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9CYXNlKF9fYSksIF9NX3N0YXJ0KCks
IF9NX2ZpbmlzaCgpIHt9CiAgfl9EZXF1ZV9iYXNlKCk7Cgpwcm90ZWN0ZWQ6CiAgdm9pZCBfTV9p
bml0aWFsaXplX21hcChzaXplX3QpOwogIHZvaWQgX01fY3JlYXRlX25vZGVzKF9UcCoqIF9fbnN0
YXJ0LCBfVHAqKiBfX25maW5pc2gpOwogIHZvaWQgX01fZGVzdHJveV9ub2RlcyhfVHAqKiBfX25z
dGFydCwgX1RwKiogX19uZmluaXNoKTsKICBlbnVtIHsgX1NfaW5pdGlhbF9tYXBfc2l6ZSA9IDgg
fTsKCnByb3RlY3RlZDoKICBpdGVyYXRvciBfTV9zdGFydDsKICBpdGVyYXRvciBfTV9maW5pc2g7
Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KX0RlcXVlX2Jhc2U8X1Rw
LF9BbGxvYz46On5fRGVxdWVfYmFzZSgpIHsKICBpZiAoX01fbWFwKSB7CiAgICBfTV9kZXN0cm95
X25vZGVzKF9NX3N0YXJ0Ll9NX25vZGUsIF9NX2ZpbmlzaC5fTV9ub2RlICsgMSk7CiAgICBfTV9k
ZWFsbG9jYXRlX21hcChfTV9tYXAsIF9NX21hcF9zaXplKTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZApfRGVxdWVfYmFzZTxfVHAsX0FsbG9jPjo6X01faW5p
dGlhbGl6ZV9tYXAoc2l6ZV90IF9fbnVtX2VsZW1lbnRzKQp7CiAgc2l6ZV90IF9fbnVtX25vZGVz
ID0KICAgIF9fbnVtX2VsZW1lbnRzIC8gX19kZXF1ZV9idWZfc2l6ZShzaXplb2YoX1RwKSkgKyAx
OwoKICBfTV9tYXBfc2l6ZSA9IG1heCgoc2l6ZV90KSBfU19pbml0aWFsX21hcF9zaXplLCBfX251
bV9ub2RlcyArIDIpOwogIF9NX21hcCA9IF9NX2FsbG9jYXRlX21hcChfTV9tYXBfc2l6ZSk7Cgog
IF9UcCoqIF9fbnN0YXJ0ID0gX01fbWFwICsgKF9NX21hcF9zaXplIC0gX19udW1fbm9kZXMpIC8g
MjsKICBfVHAqKiBfX25maW5pc2ggPSBfX25zdGFydCArIF9fbnVtX25vZGVzOwoKICB0cnkgewog
ICAgX01fY3JlYXRlX25vZGVzKF9fbnN0YXJ0LCBfX25maW5pc2gpOwogIH0KICBjYXRjaCguLi4p
IHsgKF9NX2RlYWxsb2NhdGVfbWFwKF9NX21hcCwgX01fbWFwX3NpemUpLCBfTV9tYXAgPSAwLCBf
TV9tYXBfc2l6ZSA9IDApOyB0aHJvdzsgfTsKCiAgX01fc3RhcnQuX01fc2V0X25vZGUoX19uc3Rh
cnQpOwogIF9NX2ZpbmlzaC5fTV9zZXRfbm9kZShfX25maW5pc2ggLSAxKTsKICBfTV9zdGFydC5f
TV9jdXIgPSBfTV9zdGFydC5fTV9maXJzdDsKICBfTV9maW5pc2guX01fY3VyID0gX01fZmluaXNo
Ll9NX2ZpcnN0ICsKICAgICAgICAgICAgICAgX19udW1fZWxlbWVudHMgJSBfX2RlcXVlX2J1Zl9z
aXplKHNpemVvZihfVHApKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2
b2lkIF9EZXF1ZV9iYXNlPF9UcCxfQWxsb2M+OjpfTV9jcmVhdGVfbm9kZXMoX1RwKiogX19uc3Rh
cnQsIF9UcCoqIF9fbmZpbmlzaCkKewogIF9UcCoqIF9fY3VyOwogIHRyeSB7CiAgICBmb3IgKF9f
Y3VyID0gX19uc3RhcnQ7IF9fY3VyIDwgX19uZmluaXNoOyArK19fY3VyKQogICAgICAqX19jdXIg
PSBfTV9hbGxvY2F0ZV9ub2RlKCk7CiAgfQogIGNhdGNoKC4uLikgeyBfTV9kZXN0cm95X25vZGVz
KF9fbnN0YXJ0LCBfX2N1cik7IHRocm93OyB9Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+CnZvaWQKX0RlcXVlX2Jhc2U8X1RwLF9BbGxvYz46Ol9NX2Rlc3Ryb3lfbm9kZXMo
X1RwKiogX19uc3RhcnQsIF9UcCoqIF9fbmZpbmlzaCkKewogIGZvciAoX1RwKiogX19uID0gX19u
c3RhcnQ7IF9fbiA8IF9fbmZpbmlzaDsgKytfX24pCiAgICBfTV9kZWFsbG9jYXRlX25vZGUoKl9f
bik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxfVHA+
ID4KY2xhc3MgZGVxdWUgOiBwcm90ZWN0ZWQgX0RlcXVlX2Jhc2U8X1RwLCBfQWxsb2M+IHsKCgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog
IHR5cGVkZWYgX0RlcXVlX2Jhc2U8X1RwLCBfQWxsb2M+IF9CYXNlOwpwdWJsaWM6CiAgdHlwZWRl
ZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgdHlwZWRl
ZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdmFsdWVfdHlwZSYg
cmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwog
IHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNl
X3R5cGU7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRv
cl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBf
QmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9CgpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFz
ZTo6aXRlcmF0b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfaXRl
cmF0b3IgY29uc3RfaXRlcmF0b3I7CgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9p
dGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0
b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7Cgpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiBwb2lu
dGVyKiBfTWFwX3BvaW50ZXI7CiAgc3RhdGljIHNpemVfdCBfU19idWZmZXJfc2l6ZSgpIHsgcmV0
dXJuIF9fZGVxdWVfYnVmX3NpemUoc2l6ZW9mKF9UcCkpOyB9Cgpwcm90ZWN0ZWQ6CiAgdXNpbmcg
X0Jhc2U6Ol9NX2luaXRpYWxpemVfbWFwOwogIHVzaW5nIF9CYXNlOjpfTV9jcmVhdGVfbm9kZXM7
CiAgdXNpbmcgX0Jhc2U6Ol9NX2Rlc3Ryb3lfbm9kZXM7CiAgdXNpbmcgX0Jhc2U6Ol9NX2FsbG9j
YXRlX25vZGU7CiAgdXNpbmcgX0Jhc2U6Ol9NX2RlYWxsb2NhdGVfbm9kZTsKICB1c2luZyBfQmFz
ZTo6X01fYWxsb2NhdGVfbWFwOwogIHVzaW5nIF9CYXNlOjpfTV9kZWFsbG9jYXRlX21hcDsKCiAg
dXNpbmcgX0Jhc2U6Ol9NX21hcDsKICB1c2luZyBfQmFzZTo6X01fbWFwX3NpemU7CiAgdXNpbmcg
X0Jhc2U6Ol9NX3N0YXJ0OwogIHVzaW5nIF9CYXNlOjpfTV9maW5pc2g7CgpwdWJsaWM6CiAgaXRl
cmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV9zdGFydDsgfQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0
dXJuIF9NX2ZpbmlzaDsgfQogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4g
X01fc3RhcnQ7IH0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV9maW5p
c2g7IH0KCiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJh
dG9yKF9NX2ZpbmlzaCk7IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiByZXZl
cnNlX2l0ZXJhdG9yKF9NX3N0YXJ0KTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2lu
KCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoX01fZmluaXNoKTsg
fQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0CiAgICB7IHJldHVybiBjb25z
dF9yZXZlcnNlX2l0ZXJhdG9yKF9NX3N0YXJ0KTsgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3JbXShz
aXplX3R5cGUgX19uKQogICAgeyByZXR1cm4gX01fc3RhcnRbZGlmZmVyZW5jZV90eXBlKF9fbild
OyB9CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QKICAg
IHsgcmV0dXJuIF9NX3N0YXJ0W2RpZmZlcmVuY2VfdHlwZShfX24pXTsgfQoKICB2b2lkIF9NX3Jh
bmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNvbnN0IHsKICAgIGlmIChfX24gPj0gdGhpcy0+c2l6
ZSgpKQogICAgICBfX3Rocm93X3JhbmdlX2Vycm9yKCJkZXF1ZSIpOwogIH0KCiAgcmVmZXJlbmNl
IGF0KHNpemVfdHlwZSBfX24pCiAgICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7IHJldHVybiAoKnRo
aXMpW19fbl07IH0KICBjb25zdF9yZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKICAg
IHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQoKICByZWZlcmVu
Y2UgZnJvbnQoKSB7IHJldHVybiAqX01fc3RhcnQ7IH0KICByZWZlcmVuY2UgYmFjaygpIHsKICAg
IGl0ZXJhdG9yIF9fdG1wID0gX01fZmluaXNoOwogICAgLS1fX3RtcDsKICAgIHJldHVybiAqX190
bXA7CiAgfQogIGNvbnN0X3JlZmVyZW5jZSBmcm9udCgpIGNvbnN0IHsgcmV0dXJuICpfTV9zdGFy
dDsgfQogIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgewogICAgY29uc3RfaXRlcmF0b3Ig
X190bXAgPSBfTV9maW5pc2g7CiAgICAtLV9fdG1wOwogICAgcmV0dXJuICpfX3RtcDsKICB9Cgog
IHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fZmluaXNoIC0gX01fc3RhcnQ7IH0K
ICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CiAg
Ym9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX2ZpbmlzaCA9PSBfTV9zdGFydDsgfQoKcHVi
bGljOgogIGV4cGxpY2l0IGRlcXVlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0
b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2EsIDApIHt9CiAgZGVxdWUoY29uc3QgZGVxdWUmIF9f
eCkgOiBfQmFzZShfX3guZ2V0X2FsbG9jYXRvcigpLCBfX3guc2l6ZSgpKQogICAgeyB1bmluaXRp
YWxpemVkX2NvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX01fc3RhcnQpOyB9CiAgZGVxdWUo
c2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX192YWx1ZSwKICAgICAgICBjb25zdCBh
bGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFzZShfX2EsIF9fbikK
ICAgIHsgX01fZmlsbF9pbml0aWFsaXplKF9fdmFsdWUpOyB9CiAgZXhwbGljaXQgZGVxdWUoc2l6
ZV90eXBlIF9fbikgOiBfQmFzZShhbGxvY2F0b3JfdHlwZSgpLCBfX24pCiAgICB7IF9NX2ZpbGxf
aW5pdGlhbGl6ZSh2YWx1ZV90eXBlKCkpOyB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
cmF0b3I+CiAgZGVxdWUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s
YXN0LAogICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgp
KSA6IF9CYXNlKF9fYSkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJ
dGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9pbml0aWFsaXplX2Rpc3BhdGNo
KF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9J
bnRlZ2VyPgogIHZvaWQgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRl
Z2VyIF9feCwgX190cnVlX3R5cGUpIHsKICAgIF9NX2luaXRpYWxpemVfbWFwKF9fbik7CiAgICBf
TV9maWxsX2luaXRpYWxpemUoX194KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
PgogIHZvaWQgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUp
IHsKICAgIF9NX3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2Nh
dGVnb3J5KF9fZmlyc3QpKTsKICB9CgogIH5kZXF1ZSgpIHsgZGVzdHJveShfTV9zdGFydCwgX01f
ZmluaXNoKTsgfQoKICBkZXF1ZSYgb3BlcmF0b3I9IChjb25zdCBkZXF1ZSYgX194KSB7CiAgICBj
b25zdCBzaXplX3R5cGUgX19sZW4gPSBzaXplKCk7CiAgICBpZiAoJl9feCAhPSB0aGlzKSB7CiAg
ICAgIGlmIChfX2xlbiA+PSBfX3guc2l6ZSgpKQogICAgICAgIGVyYXNlKGNvcHkoX194LmJlZ2lu
KCksIF9feC5lbmQoKSwgX01fc3RhcnQpLCBfTV9maW5pc2gpOwogICAgICBlbHNlIHsKICAgICAg
ICBjb25zdF9pdGVyYXRvciBfX21pZCA9IF9feC5iZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9f
bGVuKTsKICAgICAgICBjb3B5KF9feC5iZWdpbigpLCBfX21pZCwgX01fc3RhcnQpOwogICAgICAg
IGluc2VydChfTV9maW5pc2gsIF9fbWlkLCBfX3guZW5kKCkpOwogICAgICB9CiAgICB9CiAgICBy
ZXR1cm4gKnRoaXM7CiAgfQoKICB2b2lkIHN3YXAoZGVxdWUmIF9feCkgewogICAgc3RkOjpzd2Fw
KF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOwogICAgc3RkOjpzd2FwKF9NX2ZpbmlzaCwgX194Ll9N
X2ZpbmlzaCk7CiAgICBzdGQ6OnN3YXAoX01fbWFwLCBfX3guX01fbWFwKTsKICAgIHN0ZDo6c3dh
cChfTV9tYXBfc2l6ZSwgX194Ll9NX21hcF9zaXplKTsKICB9CgpwdWJsaWM6CgoKCgoKICB2b2lk
IF9NX2ZpbGxfYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwpIHsKICAgIGlm
IChfX24gPiBzaXplKCkpIHsKICAgICAgZmlsbChiZWdpbigpLCBlbmQoKSwgX192YWwpOwogICAg
ICBpbnNlcnQoZW5kKCksIF9fbiAtIHNpemUoKSwgX192YWwpOwogICAgfQogICAgZWxzZSB7CiAg
ICAgIGVyYXNlKGJlZ2luKCkgKyBfX24sIGVuZCgpKTsKICAgICAgZmlsbChiZWdpbigpLCBlbmQo
KSwgX192YWwpOwogICAgfQogIH0KCiAgdm9pZCBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3Qg
X1RwJiBfX3ZhbCkgewogICAgX01fZmlsbF9hc3NpZ24oX19uLCBfX3ZhbCk7CiAgfQoKICB0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBhc3NpZ24oX0lucHV0SXRlcmF0b3Ig
X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9J
c19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2Fz
c2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9Cgpwcml2YXRl
OgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2go
X0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpCiAgICB7IF9NX2ZpbGxf
YXNzaWduKChzaXplX3R5cGUpIF9fbiwgKF9UcCkgX192YWwpOyB9CgogIHRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyYXRv
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19mYWxzZV90eXBlKSB7CiAgICBfTV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19p
dGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlcmF0b3I+CiAgdm9pZCBfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J
bnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3Jf
dGFnKTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9hc3Np
Z25fYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICBzaXplX3R5
cGUgX19sZW4gPSAwOwogICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgICBp
ZiAoX19sZW4gPiBzaXplKCkpIHsKICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZCA9IF9fZmly
c3Q7CiAgICAgIGFkdmFuY2UoX19taWQsIHNpemUoKSk7CiAgICAgIGNvcHkoX19maXJzdCwgX19t
aWQsIGJlZ2luKCkpOwogICAgICBpbnNlcnQoZW5kKCksIF9fbWlkLCBfX2xhc3QpOwogICAgfQog
ICAgZWxzZQogICAgICBlcmFzZShjb3B5KF9fZmlyc3QsIF9fbGFzdCwgYmVnaW4oKSksIGVuZCgp
KTsKICB9CgpwdWJsaWM6CgogIHZvaWQgcHVzaF9iYWNrKGNvbnN0IHZhbHVlX3R5cGUmIF9fdCkg
ewogICAgaWYgKF9NX2ZpbmlzaC5fTV9jdXIgIT0gX01fZmluaXNoLl9NX2xhc3QgLSAxKSB7CiAg
ICAgIGNvbnN0cnVjdChfTV9maW5pc2guX01fY3VyLCBfX3QpOwogICAgICArK19NX2ZpbmlzaC5f
TV9jdXI7CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX3B1c2hfYmFja19hdXgoX190KTsKICB9Cgog
IHZvaWQgcHVzaF9iYWNrKCkgewogICAgaWYgKF9NX2ZpbmlzaC5fTV9jdXIgIT0gX01fZmluaXNo
Ll9NX2xhc3QgLSAxKSB7CiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2guX01fY3VyKTsKICAgICAg
KytfTV9maW5pc2guX01fY3VyOwogICAgfQogICAgZWxzZQogICAgICBfTV9wdXNoX2JhY2tfYXV4
KCk7CiAgfQoKICB2b2lkIHB1c2hfZnJvbnQoY29uc3QgdmFsdWVfdHlwZSYgX190KSB7CiAgICBp
ZiAoX01fc3RhcnQuX01fY3VyICE9IF9NX3N0YXJ0Ll9NX2ZpcnN0KSB7CiAgICAgIGNvbnN0cnVj
dChfTV9zdGFydC5fTV9jdXIgLSAxLCBfX3QpOwogICAgICAtLV9NX3N0YXJ0Ll9NX2N1cjsKICAg
IH0KICAgIGVsc2UKICAgICAgX01fcHVzaF9mcm9udF9hdXgoX190KTsKICB9CgogIHZvaWQgcHVz
aF9mcm9udCgpIHsKICAgIGlmIChfTV9zdGFydC5fTV9jdXIgIT0gX01fc3RhcnQuX01fZmlyc3Qp
IHsKICAgICAgY29uc3RydWN0KF9NX3N0YXJ0Ll9NX2N1ciAtIDEpOwogICAgICAtLV9NX3N0YXJ0
Ll9NX2N1cjsKICAgIH0KICAgIGVsc2UKICAgICAgX01fcHVzaF9mcm9udF9hdXgoKTsKICB9CgoK
ICB2b2lkIHBvcF9iYWNrKCkgewogICAgaWYgKF9NX2ZpbmlzaC5fTV9jdXIgIT0gX01fZmluaXNo
Ll9NX2ZpcnN0KSB7CiAgICAgIC0tX01fZmluaXNoLl9NX2N1cjsKICAgICAgZGVzdHJveShfTV9m
aW5pc2guX01fY3VyKTsKICAgIH0KICAgIGVsc2UKICAgICAgX01fcG9wX2JhY2tfYXV4KCk7CiAg
fQoKICB2b2lkIHBvcF9mcm9udCgpIHsKICAgIGlmIChfTV9zdGFydC5fTV9jdXIgIT0gX01fc3Rh
cnQuX01fbGFzdCAtIDEpIHsKICAgICAgZGVzdHJveShfTV9zdGFydC5fTV9jdXIpOwogICAgICAr
K19NX3N0YXJ0Ll9NX2N1cjsKICAgIH0KICAgIGVsc2UKICAgICAgX01fcG9wX2Zyb250X2F1eCgp
OwogIH0KCnB1YmxpYzoKCiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIHBvc2l0aW9uLCBjb25z
dCB2YWx1ZV90eXBlJiBfX3gpIHsKICAgIGlmIChwb3NpdGlvbi5fTV9jdXIgPT0gX01fc3RhcnQu
X01fY3VyKSB7CiAgICAgIHB1c2hfZnJvbnQoX194KTsKICAgICAgcmV0dXJuIF9NX3N0YXJ0Owog
ICAgfQogICAgZWxzZSBpZiAocG9zaXRpb24uX01fY3VyID09IF9NX2ZpbmlzaC5fTV9jdXIpIHsK
ICAgICAgcHVzaF9iYWNrKF9feCk7CiAgICAgIGl0ZXJhdG9yIF9fdG1wID0gX01fZmluaXNoOwog
ICAgICAtLV9fdG1wOwogICAgICByZXR1cm4gX190bXA7CiAgICB9CiAgICBlbHNlIHsKICAgICAg
cmV0dXJuIF9NX2luc2VydF9hdXgocG9zaXRpb24sIF9feCk7CiAgICB9CiAgfQoKICBpdGVyYXRv
ciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbikKICAgIHsgcmV0dXJuIGluc2VydChfX3Bvc2l0
aW9uLCB2YWx1ZV90eXBlKCkpOyB9CgogIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBzaXpl
X3R5cGUgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICB7IF9NX2ZpbGxfaW5zZXJ0KF9f
cG9zLCBfX24sIF9feCk7IH0KCiAgdm9pZCBfTV9maWxsX2luc2VydChpdGVyYXRvciBfX3Bvcywg
c2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KTsKCgogIHRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRl
cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVu
YW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAg
IF9NX2luc2VydF9kaXNwYXRjaChfX3BvcywgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7
CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0
Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX194LAogICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKSB7CiAgICBfTV9maWxsX2luc2VydChfX3Bvcywg
KHNpemVfdHlwZSkgX19uLCAodmFsdWVfdHlwZSkgX194KTsKICB9CgogIHRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3Bv
cywKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w
dXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBl
KSB7CiAgICBpbnNlcnQoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29y
eShfX2ZpcnN0KSk7CiAgfQoKICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgY29u
c3QgdmFsdWVfdHlwZSYgX194KSB7CiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBzaXplKCk7
CiAgICBpZiAoX19uZXdfc2l6ZSA8IF9fbGVuKQogICAgICBlcmFzZShfTV9zdGFydCArIF9fbmV3
X3NpemUsIF9NX2ZpbmlzaCk7CiAgICBlbHNlCiAgICAgIGluc2VydChfTV9maW5pc2gsIF9fbmV3
X3NpemUgLSBfX2xlbiwgX194KTsKICB9CgogIHZvaWQgcmVzaXplKHNpemVfdHlwZSBuZXdfc2l6
ZSkgeyByZXNpemUobmV3X3NpemUsIHZhbHVlX3R5cGUoKSk7IH0KCnB1YmxpYzoKICBpdGVyYXRv
ciBlcmFzZShpdGVyYXRvciBfX3BvcykgewogICAgaXRlcmF0b3IgX19uZXh0ID0gX19wb3M7CiAg
ICArK19fbmV4dDsKICAgIHNpemVfdHlwZSBfX2luZGV4ID0gX19wb3MgLSBfTV9zdGFydDsKICAg
IGlmIChfX2luZGV4IDwgKHNpemUoKSA+PiAxKSkgewogICAgICBjb3B5X2JhY2t3YXJkKF9NX3N0
YXJ0LCBfX3BvcywgX19uZXh0KTsKICAgICAgcG9wX2Zyb250KCk7CiAgICB9CiAgICBlbHNlIHsK
ICAgICAgY29weShfX25leHQsIF9NX2ZpbmlzaCwgX19wb3MpOwogICAgICBwb3BfYmFjaygpOwog
ICAgfQogICAgcmV0dXJuIF9NX3N0YXJ0ICsgX19pbmRleDsKICB9CgogIGl0ZXJhdG9yIGVyYXNl
KGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCk7CiAgdm9pZCBjbGVhcigpOwoKcHJv
dGVjdGVkOgoKICB2b2lkIF9NX2ZpbGxfaW5pdGlhbGl6ZShjb25zdCB2YWx1ZV90eXBlJiBfX3Zh
bHVlKTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2Vf
aW5pdGlhbGl6ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBsYXRl
IDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5pdGlhbGl6ZShfRm9y
d2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7Cgpwcm90ZWN0ZWQ6CgogIHZvaWQg
X01fcHVzaF9iYWNrX2F1eChjb25zdCB2YWx1ZV90eXBlJik7CiAgdm9pZCBfTV9wdXNoX2JhY2tf
YXV4KCk7CiAgdm9pZCBfTV9wdXNoX2Zyb250X2F1eChjb25zdCB2YWx1ZV90eXBlJik7CiAgdm9p
ZCBfTV9wdXNoX2Zyb250X2F1eCgpOwogIHZvaWQgX01fcG9wX2JhY2tfYXV4KCk7CiAgdm9pZCBf
TV9wb3BfZnJvbnRfYXV4KCk7Cgpwcm90ZWN0ZWQ6CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyYXRvcj4KICB2b2lkIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRlcmF0b3IgX19m
aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9y
X3RhZyk7CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0
KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwg
X0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90
YWcpOwoKICBpdGVyYXRvciBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zLCBjb25zdCB2YWx1
ZV90eXBlJiBfX3gpOwogIGl0ZXJhdG9yIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3MpOwog
IHZvaWQgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3Qg
dmFsdWVfdHlwZSYgX194KTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAg
dm9pZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICBf
Rm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICBzaXplX3R5cGUgX19uKTsKCiAgaXRlcmF0b3IgX01fcmVzZXJ2ZV9lbGVt
ZW50c19hdF9mcm9udChzaXplX3R5cGUgX19uKSB7CiAgICBzaXplX3R5cGUgX192YWNhbmNpZXMg
PSBfTV9zdGFydC5fTV9jdXIgLSBfTV9zdGFydC5fTV9maXJzdDsKICAgIGlmIChfX24gPiBfX3Zh
Y2FuY2llcykKICAgICAgX01fbmV3X2VsZW1lbnRzX2F0X2Zyb250KF9fbiAtIF9fdmFjYW5jaWVz
KTsKICAgIHJldHVybiBfTV9zdGFydCAtIGRpZmZlcmVuY2VfdHlwZShfX24pOwogIH0KCiAgaXRl
cmF0b3IgX01fcmVzZXJ2ZV9lbGVtZW50c19hdF9iYWNrKHNpemVfdHlwZSBfX24pIHsKICAgIHNp
emVfdHlwZSBfX3ZhY2FuY2llcyA9IChfTV9maW5pc2guX01fbGFzdCAtIF9NX2ZpbmlzaC5fTV9j
dXIpIC0gMTsKICAgIGlmIChfX24gPiBfX3ZhY2FuY2llcykKICAgICAgX01fbmV3X2VsZW1lbnRz
X2F0X2JhY2soX19uIC0gX192YWNhbmNpZXMpOwogICAgcmV0dXJuIF9NX2ZpbmlzaCArIGRpZmZl
cmVuY2VfdHlwZShfX24pOwogIH0KCiAgdm9pZCBfTV9uZXdfZWxlbWVudHNfYXRfZnJvbnQoc2l6
ZV90eXBlIF9fbmV3X2VsZW1lbnRzKTsKICB2b2lkIF9NX25ld19lbGVtZW50c19hdF9iYWNrKHNp
emVfdHlwZSBfX25ld19lbGVtZW50cyk7Cgpwcm90ZWN0ZWQ6CgoKCgoKICB2b2lkIF9NX3Jlc2Vy
dmVfbWFwX2F0X2JhY2sgKHNpemVfdHlwZSBfX25vZGVzX3RvX2FkZCA9IDEpIHsKICAgIGlmIChf
X25vZGVzX3RvX2FkZCArIDEgPiBfTV9tYXBfc2l6ZSAtIChfTV9maW5pc2guX01fbm9kZSAtIF9N
X21hcCkpCiAgICAgIF9NX3JlYWxsb2NhdGVfbWFwKF9fbm9kZXNfdG9fYWRkLCBmYWxzZSk7CiAg
fQoKICB2b2lkIF9NX3Jlc2VydmVfbWFwX2F0X2Zyb250IChzaXplX3R5cGUgX19ub2Rlc190b19h
ZGQgPSAxKSB7CiAgICBpZiAoX19ub2Rlc190b19hZGQgPiBzaXplX3R5cGUoX01fc3RhcnQuX01f
bm9kZSAtIF9NX21hcCkpCiAgICAgIF9NX3JlYWxsb2NhdGVfbWFwKF9fbm9kZXNfdG9fYWRkLCB0
cnVlKTsKICB9CgogIHZvaWQgX01fcmVhbGxvY2F0ZV9tYXAoc2l6ZV90eXBlIF9fbm9kZXNfdG9f
YWRkLCBib29sIF9fYWRkX2F0X2Zyb250KTsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX0FsbG9jPgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4Kdm9pZCBkZXF1ZTxfVHAsIF9B
bGxvYz4KICA6Ol9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgaXRlcmF0b3IgX19jdXIgPSBiZWdpbigpOwog
IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIsICsr
X19maXJzdCkKICAgICpfX2N1ciA9ICpfX2ZpcnN0OwogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkK
ICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgZWxzZQogICAgaW5zZXJ0KGVuZCgpLCBfX2ZpcnN0
LCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgZGVx
dWU8X1RwLCBfQWxsb2M+OjpfTV9maWxsX2luc2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVl
X3R5cGUmIF9feCkKewogIGlmIChfX3Bvcy5fTV9jdXIgPT0gX01fc3RhcnQuX01fY3VyKSB7CiAg
ICBpdGVyYXRvciBfX25ld19zdGFydCA9IF9NX3Jlc2VydmVfZWxlbWVudHNfYXRfZnJvbnQoX19u
KTsKICAgIHRyeSB7CiAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfX25ld19zdGFydCwgX01fc3Rh
cnQsIF9feCk7CiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICB9CiAgICBjYXRjaCgu
Li4pIHsgX01fZGVzdHJveV9ub2RlcyhfX25ld19zdGFydC5fTV9ub2RlLCBfTV9zdGFydC5fTV9u
b2RlKTsgdGhyb3c7IH07CiAgfQogIGVsc2UgaWYgKF9fcG9zLl9NX2N1ciA9PSBfTV9maW5pc2gu
X01fY3VyKSB7CiAgICBpdGVyYXRvciBfX25ld19maW5pc2ggPSBfTV9yZXNlcnZlX2VsZW1lbnRz
X2F0X2JhY2soX19uKTsKICAgIHRyeSB7CiAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfTV9maW5p
c2gsIF9fbmV3X2ZpbmlzaCwgX194KTsKICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoOwog
ICAgfQogICAgY2F0Y2goLi4uKSB7IF9NX2Rlc3Ryb3lfbm9kZXMoX01fZmluaXNoLl9NX25vZGUg
KyAxLCBfX25ld19maW5pc2guX01fbm9kZSArIDEpOyB0aHJvdzsgfTsKCiAgfQogIGVsc2UKICAg
IF9NX2luc2VydF9hdXgoX19wb3MsIF9fbiwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBkZXF1ZTxfVHAsX0FsbG9jPjo6aXRlcmF0b3IKZGVxdWU8
X1RwLF9BbGxvYz46OmVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKewog
IGlmIChfX2ZpcnN0ID09IF9NX3N0YXJ0ICYmIF9fbGFzdCA9PSBfTV9maW5pc2gpIHsKICAgIGNs
ZWFyKCk7CiAgICByZXR1cm4gX01fZmluaXNoOwogIH0KICBlbHNlIHsKICAgIGRpZmZlcmVuY2Vf
dHlwZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgZGlmZmVyZW5jZV90eXBlIF9fZWxlbXNf
YmVmb3JlID0gX19maXJzdCAtIF9NX3N0YXJ0OwogICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdHlw
ZT4oX19lbGVtc19iZWZvcmUpIDwgKHNpemUoKSAtIF9fbikgLyAyKSB7CiAgICAgIGNvcHlfYmFj
a3dhcmQoX01fc3RhcnQsIF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0
YXJ0ID0gX01fc3RhcnQgKyBfX247CiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9fbmV3X3N0YXJ0
KTsKICAgICAgX01fZGVzdHJveV9ub2RlcyhfX25ld19zdGFydC5fTV9ub2RlLCBfTV9zdGFydC5f
TV9ub2RlKTsKICAgICAgX01fc3RhcnQgPSBfX25ld19zdGFydDsKICAgIH0KICAgIGVsc2Ugewog
ICAgICBjb3B5KF9fbGFzdCwgX01fZmluaXNoLCBfX2ZpcnN0KTsKICAgICAgaXRlcmF0b3IgX19u
ZXdfZmluaXNoID0gX01fZmluaXNoIC0gX19uOwogICAgICBkZXN0cm95KF9fbmV3X2ZpbmlzaCwg
X01fZmluaXNoKTsKICAgICAgX01fZGVzdHJveV9ub2RlcyhfX25ld19maW5pc2guX01fbm9kZSAr
IDEsIF9NX2ZpbmlzaC5fTV9ub2RlICsgMSk7CiAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2Zpbmlz
aDsKICAgIH0KICAgIHJldHVybiBfTV9zdGFydCArIF9fZWxlbXNfYmVmb3JlOwogIH0KfQoKdGVt
cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGRlcXVlPF9UcCxfQWxsb2M+Ojpj
bGVhcigpCnsKICBmb3IgKF9NYXBfcG9pbnRlciBfX25vZGUgPSBfTV9zdGFydC5fTV9ub2RlICsg
MTsKICAgICAgIF9fbm9kZSA8IF9NX2ZpbmlzaC5fTV9ub2RlOwogICAgICAgKytfX25vZGUpIHsK
ICAgIGRlc3Ryb3koKl9fbm9kZSwgKl9fbm9kZSArIF9TX2J1ZmZlcl9zaXplKCkpOwogICAgX01f
ZGVhbGxvY2F0ZV9ub2RlKCpfX25vZGUpOwogIH0KCiAgaWYgKF9NX3N0YXJ0Ll9NX25vZGUgIT0g
X01fZmluaXNoLl9NX25vZGUpIHsKICAgIGRlc3Ryb3koX01fc3RhcnQuX01fY3VyLCBfTV9zdGFy
dC5fTV9sYXN0KTsKICAgIGRlc3Ryb3koX01fZmluaXNoLl9NX2ZpcnN0LCBfTV9maW5pc2guX01f
Y3VyKTsKICAgIF9NX2RlYWxsb2NhdGVfbm9kZShfTV9maW5pc2guX01fZmlyc3QpOwogIH0KICBl
bHNlCiAgICBkZXN0cm95KF9NX3N0YXJ0Ll9NX2N1ciwgX01fZmluaXNoLl9NX2N1cik7CgogIF9N
X2ZpbmlzaCA9IF9NX3N0YXJ0Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv
Yz4Kdm9pZCBkZXF1ZTxfVHAsX0FsbG9jPjo6X01fZmlsbF9pbml0aWFsaXplKGNvbnN0IHZhbHVl
X3R5cGUmIF9fdmFsdWUpIHsKICBfTWFwX3BvaW50ZXIgX19jdXI7CiAgdHJ5IHsKICAgIGZvciAo
X19jdXIgPSBfTV9zdGFydC5fTV9ub2RlOyBfX2N1ciA8IF9NX2ZpbmlzaC5fTV9ub2RlOyArK19f
Y3VyKQogICAgICB1bmluaXRpYWxpemVkX2ZpbGwoKl9fY3VyLCAqX19jdXIgKyBfU19idWZmZXJf
c2l6ZSgpLCBfX3ZhbHVlKTsKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfTV9maW5pc2guX01fZmly
c3QsIF9NX2ZpbmlzaC5fTV9jdXIsIF9fdmFsdWUpOwogIH0KICBjYXRjaCguLi4pIHsgZGVzdHJv
eShfTV9zdGFydCwgaXRlcmF0b3IoKl9fY3VyLCBfX2N1cikpOyB0aHJvdzsgfTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CnZvaWQgZGVxdWU8X1RwLF9BbGxvYz46Ol9NX3JhbmdlX2luaXRpYWxpemUoX0lucHV0SXRl
cmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgX01faW5pdGlhbGl6ZV9tYXAoMCk7
CiAgdHJ5IHsKICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAg
cHVzaF9iYWNrKCpfX2ZpcnN0KTsKICB9CiAgY2F0Y2goLi4uKSB7IGNsZWFyKCk7IHRocm93OyB9
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXJhdG9yPgp2b2lkIGRlcXVlPF9UcCxfQWxsb2M+OjpfTV9yYW5nZV9pbml0aWFs
aXplKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewogIHNp
emVfdHlwZSBfX24gPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICBfTV9p
bml0aWFsaXplX21hcChfX24pOwoKICBfTWFwX3BvaW50ZXIgX19jdXJfbm9kZTsKICB0cnkgewog
ICAgZm9yIChfX2N1cl9ub2RlID0gX01fc3RhcnQuX01fbm9kZTsKICAgICAgICAgX19jdXJfbm9k
ZSA8IF9NX2ZpbmlzaC5fTV9ub2RlOwogICAgICAgICArK19fY3VyX25vZGUpIHsKICAgICAgX0Zv
cndhcmRJdGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7CiAgICAgIGFkdmFuY2UoX19taWQsIF9TX2J1
ZmZlcl9zaXplKCkpOwogICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19taWQsICpf
X2N1cl9ub2RlKTsKICAgICAgX19maXJzdCA9IF9fbWlkOwogICAgfQogICAgdW5pbml0aWFsaXpl
ZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fZmluaXNoLl9NX2ZpcnN0KTsKICB9CiAgY2F0Y2go
Li4uKSB7IGRlc3Ryb3koX01fc3RhcnQsIGl0ZXJhdG9yKCpfX2N1cl9ub2RlLCBfX2N1cl9ub2Rl
KSk7IHRocm93OyB9Owp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lk
IGRlcXVlPF9UcCxfQWxsb2M+OjpfTV9wdXNoX2JhY2tfYXV4KGNvbnN0IHZhbHVlX3R5cGUmIF9f
dCkKewogIHZhbHVlX3R5cGUgX190X2NvcHkgPSBfX3Q7CiAgX01fcmVzZXJ2ZV9tYXBfYXRfYmFj
aygpOwogICooX01fZmluaXNoLl9NX25vZGUgKyAxKSA9IF9NX2FsbG9jYXRlX25vZGUoKTsKICB0
cnkgewogICAgY29uc3RydWN0KF9NX2ZpbmlzaC5fTV9jdXIsIF9fdF9jb3B5KTsKICAgIF9NX2Zp
bmlzaC5fTV9zZXRfbm9kZShfTV9maW5pc2guX01fbm9kZSArIDEpOwogICAgX01fZmluaXNoLl9N
X2N1ciA9IF9NX2ZpbmlzaC5fTV9maXJzdDsKICB9CiAgY2F0Y2goLi4uKSB7IF9NX2RlYWxsb2Nh
dGVfbm9kZSgqKF9NX2ZpbmlzaC5fTV9ub2RlICsgMSkpOyB0aHJvdzsgfTsKfQoKCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBkZXF1ZTxfVHAsX0FsbG9jPjo6X01fcHVz
aF9iYWNrX2F1eCgpCnsKICBfTV9yZXNlcnZlX21hcF9hdF9iYWNrKCk7CiAgKihfTV9maW5pc2gu
X01fbm9kZSArIDEpID0gX01fYWxsb2NhdGVfbm9kZSgpOwogIHRyeSB7CiAgICBjb25zdHJ1Y3Qo
X01fZmluaXNoLl9NX2N1cik7CiAgICBfTV9maW5pc2guX01fc2V0X25vZGUoX01fZmluaXNoLl9N
X25vZGUgKyAxKTsKICAgIF9NX2ZpbmlzaC5fTV9jdXIgPSBfTV9maW5pc2guX01fZmlyc3Q7CiAg
fQogIGNhdGNoKC4uLikgeyBfTV9kZWFsbG9jYXRlX25vZGUoKihfTV9maW5pc2guX01fbm9kZSAr
IDEpKTsgdGhyb3c7IH07Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZv
aWQgZGVxdWU8X1RwLF9BbGxvYz46Ol9NX3B1c2hfZnJvbnRfYXV4KGNvbnN0IHZhbHVlX3R5cGUm
IF9fdCkKewogIHZhbHVlX3R5cGUgX190X2NvcHkgPSBfX3Q7CiAgX01fcmVzZXJ2ZV9tYXBfYXRf
ZnJvbnQoKTsKICAqKF9NX3N0YXJ0Ll9NX25vZGUgLSAxKSA9IF9NX2FsbG9jYXRlX25vZGUoKTsK
ICB0cnkgewogICAgX01fc3RhcnQuX01fc2V0X25vZGUoX01fc3RhcnQuX01fbm9kZSAtIDEpOwog
ICAgX01fc3RhcnQuX01fY3VyID0gX01fc3RhcnQuX01fbGFzdCAtIDE7CiAgICBjb25zdHJ1Y3Qo
X01fc3RhcnQuX01fY3VyLCBfX3RfY29weSk7CiAgfQogIGNhdGNoKC4uLikgeyAoKytfTV9zdGFy
dCwgX01fZGVhbGxvY2F0ZV9ub2RlKCooX01fc3RhcnQuX01fbm9kZSAtIDEpKSk7IHRocm93OyB9
Owp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGRlcXVlPF9UcCxf
QWxsb2M+OjpfTV9wdXNoX2Zyb250X2F1eCgpCnsKICBfTV9yZXNlcnZlX21hcF9hdF9mcm9udCgp
OwogICooX01fc3RhcnQuX01fbm9kZSAtIDEpID0gX01fYWxsb2NhdGVfbm9kZSgpOwogIHRyeSB7
CiAgICBfTV9zdGFydC5fTV9zZXRfbm9kZShfTV9zdGFydC5fTV9ub2RlIC0gMSk7CiAgICBfTV9z
dGFydC5fTV9jdXIgPSBfTV9zdGFydC5fTV9sYXN0IC0gMTsKICAgIGNvbnN0cnVjdChfTV9zdGFy
dC5fTV9jdXIpOwogIH0KICBjYXRjaCguLi4pIHsgKCsrX01fc3RhcnQsIF9NX2RlYWxsb2NhdGVf
bm9kZSgqKF9NX3N0YXJ0Ll9NX25vZGUgLSAxKSkpOyB0aHJvdzsgfTsKfQoKCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBkZXF1ZTxfVHAsX0FsbG9jPjo6X01fcG9wX2Jh
Y2tfYXV4KCkKewogIF9NX2RlYWxsb2NhdGVfbm9kZShfTV9maW5pc2guX01fZmlyc3QpOwogIF9N
X2ZpbmlzaC5fTV9zZXRfbm9kZShfTV9maW5pc2guX01fbm9kZSAtIDEpOwogIF9NX2ZpbmlzaC5f
TV9jdXIgPSBfTV9maW5pc2guX01fbGFzdCAtIDE7CiAgZGVzdHJveShfTV9maW5pc2guX01fY3Vy
KTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBkZXF1ZTxf
VHAsX0FsbG9jPjo6X01fcG9wX2Zyb250X2F1eCgpCnsKICBkZXN0cm95KF9NX3N0YXJ0Ll9NX2N1
cik7CiAgX01fZGVhbGxvY2F0ZV9ub2RlKF9NX3N0YXJ0Ll9NX2ZpcnN0KTsKICBfTV9zdGFydC5f
TV9zZXRfbm9kZShfTV9zdGFydC5fTV9ub2RlICsgMSk7CiAgX01fc3RhcnQuX01fY3VyID0gX01f
c3RhcnQuX01fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgp2b2lkIGRlcXVlPF9UcCxfQWxsb2M+OjppbnNl
cnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJ
dGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBjb3B5KF9fZmlyc3QsIF9fbGFz
dCwgaW5zZXJ0ZXIoKnRoaXMsIF9fcG9zKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CnZvaWQKZGVxdWU8X1Rw
LF9BbGxvYz46Omluc2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAg
ICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgc2l6ZV90eXBl
IF9fbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24pOwogIGlmIChfX3Bvcy5f
TV9jdXIgPT0gX01fc3RhcnQuX01fY3VyKSB7CiAgICBpdGVyYXRvciBfX25ld19zdGFydCA9IF9N
X3Jlc2VydmVfZWxlbWVudHNfYXRfZnJvbnQoX19uKTsKICAgIHRyeSB7CiAgICAgIHVuaW5pdGlh
bGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbmV3X3N0YXJ0KTsKICAgICAgX01fc3RhcnQg
PSBfX25ld19zdGFydDsKICAgIH0KICAgIGNhdGNoKC4uLikgeyBfTV9kZXN0cm95X25vZGVzKF9f
bmV3X3N0YXJ0Ll9NX25vZGUsIF9NX3N0YXJ0Ll9NX25vZGUpOyB0aHJvdzsgfTsKICB9CiAgZWxz
ZSBpZiAoX19wb3MuX01fY3VyID09IF9NX2ZpbmlzaC5fTV9jdXIpIHsKICAgIGl0ZXJhdG9yIF9f
bmV3X2ZpbmlzaCA9IF9NX3Jlc2VydmVfZWxlbWVudHNfYXRfYmFjayhfX24pOwogICAgdHJ5IHsK
ICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fZmluaXNoKTsKICAg
ICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoOwogICAgfQogICAgY2F0Y2goLi4uKSB7IF9NX2Rl
c3Ryb3lfbm9kZXMoX01fZmluaXNoLl9NX25vZGUgKyAxLCBfX25ld19maW5pc2guX01fbm9kZSAr
IDEpOyB0aHJvdzsgfTsKCiAgfQogIGVsc2UKICAgIF9NX2luc2VydF9hdXgoX19wb3MsIF9fZmly
c3QsIF9fbGFzdCwgX19uKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp0
eXBlbmFtZSBkZXF1ZTxfVHAsIF9BbGxvYz46Oml0ZXJhdG9yCmRlcXVlPF9UcCxfQWxsb2M+Ojpf
TV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCnsKICBk
aWZmZXJlbmNlX3R5cGUgX19pbmRleCA9IF9fcG9zIC0gX01fc3RhcnQ7CiAgdmFsdWVfdHlwZSBf
X3hfY29weSA9IF9feDsKICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX2luZGV4KSA8IHNp
emUoKSAvIDIpIHsKICAgIHB1c2hfZnJvbnQoZnJvbnQoKSk7CiAgICBpdGVyYXRvciBfX2Zyb250
MSA9IF9NX3N0YXJ0OwogICAgKytfX2Zyb250MTsKICAgIGl0ZXJhdG9yIF9fZnJvbnQyID0gX19m
cm9udDE7CiAgICArK19fZnJvbnQyOwogICAgX19wb3MgPSBfTV9zdGFydCArIF9faW5kZXg7CiAg
ICBpdGVyYXRvciBfX3BvczEgPSBfX3BvczsKICAgICsrX19wb3MxOwogICAgY29weShfX2Zyb250
MiwgX19wb3MxLCBfX2Zyb250MSk7CiAgfQogIGVsc2UgewogICAgcHVzaF9iYWNrKGJhY2soKSk7
CiAgICBpdGVyYXRvciBfX2JhY2sxID0gX01fZmluaXNoOwogICAgLS1fX2JhY2sxOwogICAgaXRl
cmF0b3IgX19iYWNrMiA9IF9fYmFjazE7CiAgICAtLV9fYmFjazI7CiAgICBfX3BvcyA9IF9NX3N0
YXJ0ICsgX19pbmRleDsKICAgIGNvcHlfYmFja3dhcmQoX19wb3MsIF9fYmFjazIsIF9fYmFjazEp
OwogIH0KICAqX19wb3MgPSBfX3hfY29weTsKICByZXR1cm4gX19wb3M7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgZGVxdWU8X1RwLF9BbGxvYz46Oml0ZXJh
dG9yCmRlcXVlPF9UcCxfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zKQp7CiAg
ZGlmZmVyZW5jZV90eXBlIF9faW5kZXggPSBfX3BvcyAtIF9NX3N0YXJ0OwogIGlmIChzdGF0aWNf
Y2FzdDxzaXplX3R5cGU+KF9faW5kZXgpIDwgc2l6ZSgpIC8gMikgewogICAgcHVzaF9mcm9udChm
cm9udCgpKTsKICAgIGl0ZXJhdG9yIF9fZnJvbnQxID0gX01fc3RhcnQ7CiAgICArK19fZnJvbnQx
OwogICAgaXRlcmF0b3IgX19mcm9udDIgPSBfX2Zyb250MTsKICAgICsrX19mcm9udDI7CiAgICBf
X3BvcyA9IF9NX3N0YXJ0ICsgX19pbmRleDsKICAgIGl0ZXJhdG9yIF9fcG9zMSA9IF9fcG9zOwog
ICAgKytfX3BvczE7CiAgICBjb3B5KF9fZnJvbnQyLCBfX3BvczEsIF9fZnJvbnQxKTsKICB9CiAg
ZWxzZSB7CiAgICBwdXNoX2JhY2soYmFjaygpKTsKICAgIGl0ZXJhdG9yIF9fYmFjazEgPSBfTV9m
aW5pc2g7CiAgICAtLV9fYmFjazE7CiAgICBpdGVyYXRvciBfX2JhY2syID0gX19iYWNrMTsKICAg
IC0tX19iYWNrMjsKICAgIF9fcG9zID0gX01fc3RhcnQgKyBfX2luZGV4OwogICAgY29weV9iYWNr
d2FyZChfX3BvcywgX19iYWNrMiwgX19iYWNrMSk7CiAgfQogICpfX3BvcyA9IHZhbHVlX3R5cGUo
KTsKICByZXR1cm4gX19wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K
dm9pZCBkZXF1ZTxfVHAsX0FsbG9jPjo6X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3BvcywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKewog
IGNvbnN0IGRpZmZlcmVuY2VfdHlwZSBfX2VsZW1zX2JlZm9yZSA9IF9fcG9zIC0gX01fc3RhcnQ7
CiAgc2l6ZV90eXBlIF9fbGVuZ3RoID0gdGhpcy0+c2l6ZSgpOwogIHZhbHVlX3R5cGUgX194X2Nv
cHkgPSBfX3g7CiAgaWYgKF9fZWxlbXNfYmVmb3JlIDwgZGlmZmVyZW5jZV90eXBlKF9fbGVuZ3Ro
IC8gMikpIHsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fcmVzZXJ2ZV9lbGVtZW50c19h
dF9mcm9udChfX24pOwogICAgaXRlcmF0b3IgX19vbGRfc3RhcnQgPSBfTV9zdGFydDsKICAgIF9f
cG9zID0gX01fc3RhcnQgKyBfX2VsZW1zX2JlZm9yZTsKICAgIHRyeSB7CiAgICAgIGlmIChfX2Vs
ZW1zX2JlZm9yZSA+PSBkaWZmZXJlbmNlX3R5cGUoX19uKSkgewogICAgICAgIGl0ZXJhdG9yIF9f
c3RhcnRfbiA9IF9NX3N0YXJ0ICsgZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgICAgdW5pbml0
aWFsaXplZF9jb3B5KF9NX3N0YXJ0LCBfX3N0YXJ0X24sIF9fbmV3X3N0YXJ0KTsKICAgICAgICBf
TV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAgICAgIGNvcHkoX19zdGFydF9uLCBfX3BvcywgX19v
bGRfc3RhcnQpOwogICAgICAgIGZpbGwoX19wb3MgLSBkaWZmZXJlbmNlX3R5cGUoX19uKSwgX19w
b3MsIF9feF9jb3B5KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX3VuaW5pdGlhbGl6
ZWRfY29weV9maWxsKF9NX3N0YXJ0LCBfX3BvcywgX19uZXdfc3RhcnQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfTV9zdGFydCwgX194X2NvcHkpOwogICAgICAgIF9NX3N0YXJ0
ID0gX19uZXdfc3RhcnQ7CiAgICAgICAgZmlsbChfX29sZF9zdGFydCwgX19wb3MsIF9feF9jb3B5
KTsKICAgICAgfQogICAgfQogICAgY2F0Y2goLi4uKSB7IF9NX2Rlc3Ryb3lfbm9kZXMoX19uZXdf
c3RhcnQuX01fbm9kZSwgX01fc3RhcnQuX01fbm9kZSk7IHRocm93OyB9OwogIH0KICBlbHNlIHsK
ICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IF9NX3Jlc2VydmVfZWxlbWVudHNfYXRfYmFjayhf
X24pOwogICAgaXRlcmF0b3IgX19vbGRfZmluaXNoID0gX01fZmluaXNoOwogICAgY29uc3QgZGlm
ZmVyZW5jZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPQogICAgICBkaWZmZXJlbmNlX3R5cGUoX19sZW5n
dGgpIC0gX19lbGVtc19iZWZvcmU7CiAgICBfX3BvcyA9IF9NX2ZpbmlzaCAtIF9fZWxlbXNfYWZ0
ZXI7CiAgICB0cnkgewogICAgICBpZiAoX19lbGVtc19hZnRlciA+IGRpZmZlcmVuY2VfdHlwZShf
X24pKSB7CiAgICAgICAgaXRlcmF0b3IgX19maW5pc2hfbiA9IF9NX2ZpbmlzaCAtIGRpZmZlcmVu
Y2VfdHlwZShfX24pOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpbmlzaF9uLCBfTV9m
aW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoOwogICAg
ICAgIGNvcHlfYmFja3dhcmQoX19wb3MsIF9fZmluaXNoX24sIF9fb2xkX2ZpbmlzaCk7CiAgICAg
ICAgZmlsbChfX3BvcywgX19wb3MgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSwgX194X2NvcHkpOwog
ICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2NvcHkoX01f
ZmluaXNoLCBfX3BvcyArIGRpZmZlcmVuY2VfdHlwZShfX24pLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX194X2NvcHksIF9fcG9zLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2Zp
bmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgICAgICBmaWxsKF9fcG9zLCBfX29sZF9maW5pc2gsIF9f
eF9jb3B5KTsKICAgICAgfQogICAgfQogICAgY2F0Y2goLi4uKSB7IF9NX2Rlc3Ryb3lfbm9kZXMo
X01fZmluaXNoLl9NX25vZGUgKyAxLCBfX25ld19maW5pc2guX01fbm9kZSArIDEpOyB0aHJvdzsg
fTsKCiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgp2b2lkIGRlcXVlPF9UcCxfQWxsb2M+OjpfTV9pbnNlcnRf
YXV4KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3R5cGUgX19uKQp7CiAgY29uc3QgZGlmZmVyZW5jZV90eXBlIF9f
ZWxlbXNiZWZvcmUgPSBfX3BvcyAtIF9NX3N0YXJ0OwogIHNpemVfdHlwZSBfX2xlbmd0aCA9IHNp
emUoKTsKICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX2VsZW1zYmVmb3JlKSA8IF9fbGVu
Z3RoIC8gMikgewogICAgaXRlcmF0b3IgX19uZXdfc3RhcnQgPSBfTV9yZXNlcnZlX2VsZW1lbnRz
X2F0X2Zyb250KF9fbik7CiAgICBpdGVyYXRvciBfX29sZF9zdGFydCA9IF9NX3N0YXJ0OwogICAg
X19wb3MgPSBfTV9zdGFydCArIF9fZWxlbXNiZWZvcmU7CiAgICB0cnkgewogICAgICBpZiAoX19l
bGVtc2JlZm9yZSA+PSBkaWZmZXJlbmNlX3R5cGUoX19uKSkgewogICAgICAgIGl0ZXJhdG9yIF9f
c3RhcnRfbiA9IF9NX3N0YXJ0ICsgZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgICAgdW5pbml0
aWFsaXplZF9jb3B5KF9NX3N0YXJ0LCBfX3N0YXJ0X24sIF9fbmV3X3N0YXJ0KTsKICAgICAgICBf
TV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAgICAgIGNvcHkoX19zdGFydF9uLCBfX3BvcywgX19v
bGRfc3RhcnQpOwogICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3BvcyAtIGRpZmZlcmVu
Y2VfdHlwZShfX24pKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXJh
dG9yIF9fbWlkID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkLCBkaWZmZXJlbmNlX3R5
cGUoX19uKSAtIF9fZWxlbXNiZWZvcmUpOwogICAgICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2Nv
cHkoX01fc3RhcnQsIF9fcG9zLCBfX2ZpcnN0LCBfX21pZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fbmV3X3N0YXJ0KTsKICAgICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0
OwogICAgICAgIGNvcHkoX19taWQsIF9fbGFzdCwgX19vbGRfc3RhcnQpOwogICAgICB9CiAgICB9
CiAgICBjYXRjaCguLi4pIHsgX01fZGVzdHJveV9ub2RlcyhfX25ld19zdGFydC5fTV9ub2RlLCBf
TV9zdGFydC5fTV9ub2RlKTsgdGhyb3c7IH07CiAgfQogIGVsc2UgewogICAgaXRlcmF0b3IgX19u
ZXdfZmluaXNoID0gX01fcmVzZXJ2ZV9lbGVtZW50c19hdF9iYWNrKF9fbik7CiAgICBpdGVyYXRv
ciBfX29sZF9maW5pc2ggPSBfTV9maW5pc2g7CiAgICBjb25zdCBkaWZmZXJlbmNlX3R5cGUgX19l
bGVtc2FmdGVyID0KICAgICAgZGlmZmVyZW5jZV90eXBlKF9fbGVuZ3RoKSAtIF9fZWxlbXNiZWZv
cmU7CiAgICBfX3BvcyA9IF9NX2ZpbmlzaCAtIF9fZWxlbXNhZnRlcjsKICAgIHRyeSB7CiAgICAg
IGlmIChfX2VsZW1zYWZ0ZXIgPiBkaWZmZXJlbmNlX3R5cGUoX19uKSkgewogICAgICAgIGl0ZXJh
dG9yIF9fZmluaXNoX24gPSBfTV9maW5pc2ggLSBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgICAg
ICB1bmluaXRpYWxpemVkX2NvcHkoX19maW5pc2hfbiwgX01fZmluaXNoLCBfTV9maW5pc2gpOwog
ICAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9f
cG9zLCBfX2ZpbmlzaF9uLCBfX29sZF9maW5pc2gpOwogICAgICAgIGNvcHkoX19maXJzdCwgX19s
YXN0LCBfX3Bvcyk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyYXRv
ciBfX21pZCA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZCwgX19lbGVtc2FmdGVyKTsK
ICAgICAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5KF9fbWlkLCBfX2xhc3QsIF9fcG9zLCBf
TV9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoOwog
ICAgICAgIGNvcHkoX19maXJzdCwgX19taWQsIF9fcG9zKTsKICAgICAgfQogICAgfQogICAgY2F0
Y2goLi4uKSB7IF9NX2Rlc3Ryb3lfbm9kZXMoX01fZmluaXNoLl9NX25vZGUgKyAxLCBfX25ld19m
aW5pc2guX01fbm9kZSArIDEpOyB0aHJvdzsgfTsKCiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQWxsb2M+CnZvaWQgZGVxdWU8X1RwLF9BbGxvYz46Ol9NX25ld19lbGVtZW50c19h
dF9mcm9udChzaXplX3R5cGUgX19uZXdfZWxlbXMpCnsKICBzaXplX3R5cGUgX19uZXdfbm9kZXMK
ICAgICAgPSAoX19uZXdfZWxlbXMgKyBfU19idWZmZXJfc2l6ZSgpIC0gMSkgLyBfU19idWZmZXJf
c2l6ZSgpOwogIF9NX3Jlc2VydmVfbWFwX2F0X2Zyb250KF9fbmV3X25vZGVzKTsKICBzaXplX3R5
cGUgX19pOwogIHRyeSB7CiAgICBmb3IgKF9faSA9IDE7IF9faSA8PSBfX25ld19ub2RlczsgKytf
X2kpCiAgICAgICooX01fc3RhcnQuX01fbm9kZSAtIF9faSkgPSBfTV9hbGxvY2F0ZV9ub2RlKCk7
CiAgfQoKICBjYXRjaCguLi4pIHsKICAgIGZvciAoc2l6ZV90eXBlIF9faiA9IDE7IF9faiA8IF9f
aTsgKytfX2opCiAgICAgIF9NX2RlYWxsb2NhdGVfbm9kZSgqKF9NX3N0YXJ0Ll9NX25vZGUgLSBf
X2opKTsKICAgIHRocm93OwogIH0KCn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv
Yz4Kdm9pZCBkZXF1ZTxfVHAsX0FsbG9jPjo6X01fbmV3X2VsZW1lbnRzX2F0X2JhY2soc2l6ZV90
eXBlIF9fbmV3X2VsZW1zKQp7CiAgc2l6ZV90eXBlIF9fbmV3X25vZGVzCiAgICAgID0gKF9fbmV3
X2VsZW1zICsgX1NfYnVmZmVyX3NpemUoKSAtIDEpIC8gX1NfYnVmZmVyX3NpemUoKTsKICBfTV9y
ZXNlcnZlX21hcF9hdF9iYWNrKF9fbmV3X25vZGVzKTsKICBzaXplX3R5cGUgX19pOwogIHRyeSB7
CiAgICBmb3IgKF9faSA9IDE7IF9faSA8PSBfX25ld19ub2RlczsgKytfX2kpCiAgICAgICooX01f
ZmluaXNoLl9NX25vZGUgKyBfX2kpID0gX01fYWxsb2NhdGVfbm9kZSgpOwogIH0KCiAgY2F0Y2go
Li4uKSB7CiAgICBmb3IgKHNpemVfdHlwZSBfX2ogPSAxOyBfX2ogPCBfX2k7ICsrX19qKQogICAg
ICBfTV9kZWFsbG9jYXRlX25vZGUoKihfTV9maW5pc2guX01fbm9kZSArIF9faikpOwogICAgdGhy
b3c7CiAgfQoKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGRlcXVl
PF9UcCxfQWxsb2M+OjpfTV9yZWFsbG9jYXRlX21hcChzaXplX3R5cGUgX19ub2Rlc190b19hZGQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgX19hZGRfYXRf
ZnJvbnQpCnsKICBzaXplX3R5cGUgX19vbGRfbnVtX25vZGVzID0gX01fZmluaXNoLl9NX25vZGUg
LSBfTV9zdGFydC5fTV9ub2RlICsgMTsKICBzaXplX3R5cGUgX19uZXdfbnVtX25vZGVzID0gX19v
bGRfbnVtX25vZGVzICsgX19ub2Rlc190b19hZGQ7CgogIF9NYXBfcG9pbnRlciBfX25ld19uc3Rh
cnQ7CiAgaWYgKF9NX21hcF9zaXplID4gMiAqIF9fbmV3X251bV9ub2RlcykgewogICAgX19uZXdf
bnN0YXJ0ID0gX01fbWFwICsgKF9NX21hcF9zaXplIC0gX19uZXdfbnVtX25vZGVzKSAvIDIKICAg
ICAgICAgICAgICAgICAgICAgKyAoX19hZGRfYXRfZnJvbnQgPyBfX25vZGVzX3RvX2FkZCA6IDAp
OwogICAgaWYgKF9fbmV3X25zdGFydCA8IF9NX3N0YXJ0Ll9NX25vZGUpCiAgICAgIGNvcHkoX01f
c3RhcnQuX01fbm9kZSwgX01fZmluaXNoLl9NX25vZGUgKyAxLCBfX25ld19uc3RhcnQpOwogICAg
ZWxzZQogICAgICBjb3B5X2JhY2t3YXJkKF9NX3N0YXJ0Ll9NX25vZGUsIF9NX2ZpbmlzaC5fTV9u
b2RlICsgMSwKICAgICAgICAgICAgICAgICAgICBfX25ld19uc3RhcnQgKyBfX29sZF9udW1fbm9k
ZXMpOwogIH0KICBlbHNlIHsKICAgIHNpemVfdHlwZSBfX25ld19tYXBfc2l6ZSA9CiAgICAgIF9N
X21hcF9zaXplICsgbWF4KF9NX21hcF9zaXplLCBfX25vZGVzX3RvX2FkZCkgKyAyOwoKICAgIF9N
YXBfcG9pbnRlciBfX25ld19tYXAgPSBfTV9hbGxvY2F0ZV9tYXAoX19uZXdfbWFwX3NpemUpOwog
ICAgX19uZXdfbnN0YXJ0ID0gX19uZXdfbWFwICsgKF9fbmV3X21hcF9zaXplIC0gX19uZXdfbnVt
X25vZGVzKSAvIDIKICAgICAgICAgICAgICAgICAgICAgICAgICsgKF9fYWRkX2F0X2Zyb250ID8g
X19ub2Rlc190b19hZGQgOiAwKTsKICAgIGNvcHkoX01fc3RhcnQuX01fbm9kZSwgX01fZmluaXNo
Ll9NX25vZGUgKyAxLCBfX25ld19uc3RhcnQpOwogICAgX01fZGVhbGxvY2F0ZV9tYXAoX01fbWFw
LCBfTV9tYXBfc2l6ZSk7CgogICAgX01fbWFwID0gX19uZXdfbWFwOwogICAgX01fbWFwX3NpemUg
PSBfX25ld19tYXBfc2l6ZTsKICB9CgogIF9NX3N0YXJ0Ll9NX3NldF9ub2RlKF9fbmV3X25zdGFy
dCk7CiAgX01fZmluaXNoLl9NX3NldF9ub2RlKF9fbmV3X25zdGFydCArIF9fb2xkX251bV9ub2Rl
cyAtIDEpOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBi
b29sIG9wZXJhdG9yPT0oY29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3gsCiAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194
LnNpemUoKSA9PSBfX3kuc2l6ZSgpICYmCiAgICAgICAgIGVxdWFsKF9feC5iZWdpbigpLCBfX3gu
ZW5kKCksIF9feS5iZWdpbigpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j
PgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3gsCiAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJl
dHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfX3guYmVnaW4oKSwgX194LmVuZCgpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3kuYmVnaW4oKSwgX195LmVuZCgpKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+
KGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29u
c3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
ZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9CnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25z
dCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBk
ZXF1ZTxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcChkZXF1ZTxfVHAs
X0FsbG9jPiYgX194LCBkZXF1ZTxfVHAsX0FsbG9jPiYgX195KSB7CiAgX194LnN3YXAoX195KTsK
fQoKfQojIDM4ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2RlcXVlLmgiIDIgMwojIDMgIi91c3IvbG9jYWwvZ2Nj
My9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvZGVxdWUiIDIg
MwojIDY3ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRG9jdW1lbnQuaHBwIiAyCiMg
MSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNs
dWRlL2crKy9tYXAiIDEgMwoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1w
Yy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX21hcC5oIiAxIDMKIyAzMSAiL3Vz
ci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2cr
Ky9iaXRzL3N0ZF9tYXAuaCIgMwoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF90cmVlLmgiIDEgMwojIDU2
ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1
ZGUvZysrL2JpdHMvc3RsX3RyZWUuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIg
MSAzCiMgNTcgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjAvaW5jbHVkZS9nKysvYml0cy9zdGxfdHJlZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2Fs
bG9jLmgiIDEgMwojIDU4ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51
eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX3RyZWUuaCIgMiAzCiMgMSAiL3Vzci9sb2Nh
bC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRz
L3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgNTkgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfdHJlZS5oIiAyIDMKIyAx
ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1
ZGUvZysrL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDEgMwojIDYwICIvdXNyL2xvY2FsL2djYzMvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX3RyZWUu
aCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCnR5cGVkZWYgYm9vbCBfUmJfdHJlZV9Db2xvcl90eXBl
Owpjb25zdCBfUmJfdHJlZV9Db2xvcl90eXBlIF9TX3JiX3RyZWVfcmVkID0gZmFsc2U7CmNvbnN0
IF9SYl90cmVlX0NvbG9yX3R5cGUgX1NfcmJfdHJlZV9ibGFjayA9IHRydWU7CgpzdHJ1Y3QgX1Ji
X3RyZWVfbm9kZV9iYXNlCnsKICB0eXBlZGVmIF9SYl90cmVlX0NvbG9yX3R5cGUgX0NvbG9yX3R5
cGU7CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9CYXNlX3B0cjsKCiAgX0NvbG9yX3R5
cGUgX01fY29sb3I7CiAgX0Jhc2VfcHRyIF9NX3BhcmVudDsKICBfQmFzZV9wdHIgX01fbGVmdDsK
ICBfQmFzZV9wdHIgX01fcmlnaHQ7CgogIHN0YXRpYyBfQmFzZV9wdHIgX1NfbWluaW11bShfQmFz
ZV9wdHIgX194KQogIHsKICAgIHdoaWxlIChfX3gtPl9NX2xlZnQgIT0gMCkgX194ID0gX194LT5f
TV9sZWZ0OwogICAgcmV0dXJuIF9feDsKICB9CgogIHN0YXRpYyBfQmFzZV9wdHIgX1NfbWF4aW11
bShfQmFzZV9wdHIgX194KQogIHsKICAgIHdoaWxlIChfX3gtPl9NX3JpZ2h0ICE9IDApIF9feCA9
IF9feC0+X01fcmlnaHQ7CiAgICByZXR1cm4gX194OwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBf
VmFsdWU+CnN0cnVjdCBfUmJfdHJlZV9ub2RlIDogcHVibGljIF9SYl90cmVlX25vZGVfYmFzZQp7
CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWx1ZT4qIF9MaW5rX3R5cGU7CiAgX1ZhbHVlIF9N
X3ZhbHVlX2ZpZWxkOwp9OwoKCnN0cnVjdCBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yCnsKICB0eXBl
ZGVmIF9SYl90cmVlX25vZGVfYmFzZTo6X0Jhc2VfcHRyIF9CYXNlX3B0cjsKICB0eXBlZGVmIGJp
ZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgcHRy
ZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICBfQmFzZV9wdHIgX01fbm9kZTsKCiAgdm9pZCBfTV9p
bmNyZW1lbnQoKQogIHsKICAgIGlmIChfTV9ub2RlLT5fTV9yaWdodCAhPSAwKSB7CiAgICAgIF9N
X25vZGUgPSBfTV9ub2RlLT5fTV9yaWdodDsKICAgICAgd2hpbGUgKF9NX25vZGUtPl9NX2xlZnQg
IT0gMCkKICAgICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01fbGVmdDsKICAgIH0KICAgIGVsc2Ug
ewogICAgICBfQmFzZV9wdHIgX195ID0gX01fbm9kZS0+X01fcGFyZW50OwogICAgICB3aGlsZSAo
X01fbm9kZSA9PSBfX3ktPl9NX3JpZ2h0KSB7CiAgICAgICAgX01fbm9kZSA9IF9feTsKICAgICAg
ICBfX3kgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgfQogICAgICBpZiAoX01fbm9kZS0+X01fcmln
aHQgIT0gX195KQogICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICB9CiAgfQoKICB2b2lkIF9NX2Rl
Y3JlbWVudCgpCiAgewogICAgaWYgKF9NX25vZGUtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfcmVk
ICYmCiAgICAgICAgX01fbm9kZS0+X01fcGFyZW50LT5fTV9wYXJlbnQgPT0gX01fbm9kZSkKICAg
ICAgX01fbm9kZSA9IF9NX25vZGUtPl9NX3JpZ2h0OwogICAgZWxzZSBpZiAoX01fbm9kZS0+X01f
bGVmdCAhPSAwKSB7CiAgICAgIF9CYXNlX3B0ciBfX3kgPSBfTV9ub2RlLT5fTV9sZWZ0OwogICAg
ICB3aGlsZSAoX195LT5fTV9yaWdodCAhPSAwKQogICAgICAgIF9feSA9IF9feS0+X01fcmlnaHQ7
CiAgICAgIF9NX25vZGUgPSBfX3k7CiAgICB9CiAgICBlbHNlIHsKICAgICAgX0Jhc2VfcHRyIF9f
eSA9IF9NX25vZGUtPl9NX3BhcmVudDsKICAgICAgd2hpbGUgKF9NX25vZGUgPT0gX195LT5fTV9s
ZWZ0KSB7CiAgICAgICAgX01fbm9kZSA9IF9feTsKICAgICAgICBfX3kgPSBfX3ktPl9NX3BhcmVu
dDsKICAgICAgfQogICAgICBfTV9ub2RlID0gX195OwogICAgfQogIH0KfTsKCnRlbXBsYXRlIDxj
bGFzcyBfVmFsdWUsIGNsYXNzIF9SZWYsIGNsYXNzIF9QdHI+CnN0cnVjdCBfUmJfdHJlZV9pdGVy
YXRvciA6IHB1YmxpYyBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yCnsKICB0eXBlZGVmIF9WYWx1ZSB2
YWx1ZV90eXBlOwogIHR5cGVkZWYgX1JlZiByZWZlcmVuY2U7CiAgdHlwZWRlZiBfUHRyIHBvaW50
ZXI7CiAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIF9WYWx1ZSYsIF9WYWx1ZSo+
CiAgICBpdGVyYXRvcjsKICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgY29uc3Qg
X1ZhbHVlJiwgY29uc3QgX1ZhbHVlKj4KICAgIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgX1Ji
X3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBfUmVmLCBfUHRyPgogICAgX1NlbGY7CiAgdHlwZWRlZiBf
UmJfdHJlZV9ub2RlPF9WYWx1ZT4qIF9MaW5rX3R5cGU7CgogIF9SYl90cmVlX2l0ZXJhdG9yKCkg
e30KICBfUmJfdHJlZV9pdGVyYXRvcihfTGlua190eXBlIF9feCkgeyBfTV9ub2RlID0gX194OyB9
CiAgX1JiX3RyZWVfaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImIF9faXQpIHsgX01fbm9kZSA9IF9f
aXQuX01fbm9kZTsgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX0xp
bmtfdHlwZShfTV9ub2RlKS0+X01fdmFsdWVfZmllbGQ7IH0KICBwb2ludGVyIG9wZXJhdG9yLT4o
KSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKICBfU2VsZiYgb3BlcmF0b3IrKygp
IHsgX01faW5jcmVtZW50KCk7IHJldHVybiAqdGhpczsgfQogIF9TZWxmIG9wZXJhdG9yKysoaW50
KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgX01faW5jcmVtZW50KCk7CiAgICByZXR1
cm4gX190bXA7CiAgfQoKICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsgX01fZGVjcmVtZW50KCk7IHJl
dHVybiAqdGhpczsgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9
ICp0aGlzOwogICAgX01fZGVjcmVtZW50KCk7CiAgICByZXR1cm4gX190bXA7CiAgfQp9OwoKdGVt
cGxhdGUgPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX1JlZiwgY2xhc3MgX1B0cj4KaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIF9SZWYsIF9QdHI+JiBf
X3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVl
LCBfUmVmLCBfUHRyPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV9ub2RlID09IF9feS5fTV9ub2Rl
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbHVlPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgY29uc3QgX1ZhbHVlJiwgY29uc3QgX1ZhbHVlKj4m
IF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFs
dWUsIF9WYWx1ZSYsIF9WYWx1ZSo+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX25vZGUgPT0gX195
Ll9NX25vZGU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVmFsdWU+CmlubGluZSBib29sIG9wZXJhdG9y
PT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBfVmFsdWUmLCBfVmFsdWUqPiYgX194
LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwg
Y29uc3QgX1ZhbHVlJiwgY29uc3QgX1ZhbHVlKj4mIF9feSkgewogIHJldHVybiBfX3guX01fbm9k
ZSA9PSBfX3kuX01fbm9kZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX1JlZiwg
Y2xhc3MgX1B0cj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfUmJfdHJlZV9pdGVyYXRv
cjxfVmFsdWUsIF9SZWYsIF9QdHI+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
X1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBfUmVmLCBfUHRyPiYgX195KSB7CiAgcmV0dXJuIF9f
eC5fTV9ub2RlICE9IF9feS5fTV9ub2RlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbHVlPgppbmxp
bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgY29uc3Qg
X1ZhbHVlJiwgY29uc3QgX1ZhbHVlKj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIF9WYWx1ZSYsIF9WYWx1ZSo+JiBfX3kpIHsKICBy
ZXR1cm4gX194Ll9NX25vZGUgIT0gX195Ll9NX25vZGU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVmFs
dWU+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVl
LCBfVmFsdWUmLCBfVmFsdWUqPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9S
Yl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgY29uc3QgX1ZhbHVlJiwgY29uc3QgX1ZhbHVlKj4mIF9f
eSkgewogIHJldHVybiBfX3guX01fbm9kZSAhPSBfX3kuX01fbm9kZTsKfQoKaW5saW5lIHZvaWQK
X1JiX3RyZWVfcm90YXRlX2xlZnQoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gsIF9SYl90cmVlX25v
ZGVfYmFzZSomIF9fcm9vdCkKewogIF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX194LT5fTV9y
aWdodDsKICBfX3gtPl9NX3JpZ2h0ID0gX195LT5fTV9sZWZ0OwogIGlmIChfX3ktPl9NX2xlZnQg
IT0wKQogICAgX195LT5fTV9sZWZ0LT5fTV9wYXJlbnQgPSBfX3g7CiAgX195LT5fTV9wYXJlbnQg
PSBfX3gtPl9NX3BhcmVudDsKCiAgaWYgKF9feCA9PSBfX3Jvb3QpCiAgICBfX3Jvb3QgPSBfX3k7
CiAgZWxzZSBpZiAoX194ID09IF9feC0+X01fcGFyZW50LT5fTV9sZWZ0KQogICAgX194LT5fTV9w
YXJlbnQtPl9NX2xlZnQgPSBfX3k7CiAgZWxzZQogICAgX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0
ID0gX195OwogIF9feS0+X01fbGVmdCA9IF9feDsKICBfX3gtPl9NX3BhcmVudCA9IF9feTsKfQoK
aW5saW5lIHZvaWQKX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9SYl90cmVlX25vZGVfYmFzZSogX194
LCBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QpCnsKICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9f
eSA9IF9feC0+X01fbGVmdDsKICBfX3gtPl9NX2xlZnQgPSBfX3ktPl9NX3JpZ2h0OwogIGlmIChf
X3ktPl9NX3JpZ2h0ICE9IDApCiAgICBfX3ktPl9NX3JpZ2h0LT5fTV9wYXJlbnQgPSBfX3g7CiAg
X195LT5fTV9wYXJlbnQgPSBfX3gtPl9NX3BhcmVudDsKCiAgaWYgKF9feCA9PSBfX3Jvb3QpCiAg
ICBfX3Jvb3QgPSBfX3k7CiAgZWxzZSBpZiAoX194ID09IF9feC0+X01fcGFyZW50LT5fTV9yaWdo
dCkKICAgIF9feC0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feTsKICBlbHNlCiAgICBfX3gtPl9N
X3BhcmVudC0+X01fbGVmdCA9IF9feTsKICBfX3ktPl9NX3JpZ2h0ID0gX194OwogIF9feC0+X01f
cGFyZW50ID0gX195Owp9CgppbmxpbmUgdm9pZApfUmJfdHJlZV9yZWJhbGFuY2UoX1JiX3RyZWVf
bm9kZV9iYXNlKiBfX3gsIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCkKewogIF9feC0+X01f
Y29sb3IgPSBfU19yYl90cmVlX3JlZDsKICB3aGlsZSAoX194ICE9IF9fcm9vdCAmJiBfX3gtPl9N
X3BhcmVudC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgIGlmIChfX3gtPl9NX3Bh
cmVudCA9PSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9sZWZ0KSB7CiAgICAgIF9SYl90
cmVlX25vZGVfYmFzZSogX195ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fcmlnaHQ7
CiAgICAgIGlmIChfX3kgJiYgX195LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkgewogICAg
ICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAg
X195LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgX194LT5fTV9wYXJlbnQt
Pl9NX3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICBfX3ggPSBfX3gt
Pl9NX3BhcmVudC0+X01fcGFyZW50OwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIGlmIChf
X3ggPT0gX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0KSB7CiAgICAgICAgICBfX3ggPSBfX3gtPl9N
X3BhcmVudDsKICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feCwgX19yb290KTsKICAg
ICAgICB9CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFj
azsKICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3Ry
ZWVfcmVkOwogICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3gtPl9NX3BhcmVudC0+X01f
cGFyZW50LCBfX3Jvb3QpOwogICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgX1JiX3RyZWVf
bm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9sZWZ0OwogICAg
ICBpZiAoX195ICYmIF9feS0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgICAgICBf
X3gtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgIF9feS0+
X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9w
YXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgX194ID0gX194LT5fTV9w
YXJlbnQtPl9NX3BhcmVudDsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBpZiAoX194ID09
IF9feC0+X01fcGFyZW50LT5fTV9sZWZ0KSB7CiAgICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVu
dDsKICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3gsIF9fcm9vdCk7CiAgICAgICAg
fQogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAg
ICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX3Jl
ZDsKICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50
LCBfX3Jvb3QpOwogICAgICB9CiAgICB9CiAgfQogIF9fcm9vdC0+X01fY29sb3IgPSBfU19yYl90
cmVlX2JsYWNrOwp9CgppbmxpbmUgX1JiX3RyZWVfbm9kZV9iYXNlKgpfUmJfdHJlZV9yZWJhbGFu
Y2VfZm9yX2VyYXNlKF9SYl90cmVlX25vZGVfYmFzZSogX196LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX2xlZnRtb3N0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcmlnaHRtb3N0KQp7CiAgX1Ji
X3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3o7CiAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3ggPSAw
OwogIF9SYl90cmVlX25vZGVfYmFzZSogX194X3BhcmVudCA9IDA7CiAgaWYgKF9feS0+X01fbGVm
dCA9PSAwKQogICAgX194ID0gX195LT5fTV9yaWdodDsKICBlbHNlCiAgICBpZiAoX195LT5fTV9y
aWdodCA9PSAwKQogICAgICBfX3ggPSBfX3ktPl9NX2xlZnQ7CiAgICBlbHNlIHsKICAgICAgX195
ID0gX195LT5fTV9yaWdodDsKICAgICAgd2hpbGUgKF9feS0+X01fbGVmdCAhPSAwKQogICAgICAg
IF9feSA9IF9feS0+X01fbGVmdDsKICAgICAgX194ID0gX195LT5fTV9yaWdodDsKICAgIH0KICBp
ZiAoX195ICE9IF9feikgewogICAgX196LT5fTV9sZWZ0LT5fTV9wYXJlbnQgPSBfX3k7CiAgICBf
X3ktPl9NX2xlZnQgPSBfX3otPl9NX2xlZnQ7CiAgICBpZiAoX195ICE9IF9fei0+X01fcmlnaHQp
IHsKICAgICAgX194X3BhcmVudCA9IF9feS0+X01fcGFyZW50OwogICAgICBpZiAoX194KSBfX3gt
Pl9NX3BhcmVudCA9IF9feS0+X01fcGFyZW50OwogICAgICBfX3ktPl9NX3BhcmVudC0+X01fbGVm
dCA9IF9feDsKICAgICAgX195LT5fTV9yaWdodCA9IF9fei0+X01fcmlnaHQ7CiAgICAgIF9fei0+
X01fcmlnaHQtPl9NX3BhcmVudCA9IF9feTsKICAgIH0KICAgIGVsc2UKICAgICAgX194X3BhcmVu
dCA9IF9feTsKICAgIGlmIChfX3Jvb3QgPT0gX196KQogICAgICBfX3Jvb3QgPSBfX3k7CiAgICBl
bHNlIGlmIChfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9PSBfX3opCiAgICAgIF9fei0+X01fcGFy
ZW50LT5fTV9sZWZ0ID0gX195OwogICAgZWxzZQogICAgICBfX3otPl9NX3BhcmVudC0+X01fcmln
aHQgPSBfX3k7CiAgICBfX3ktPl9NX3BhcmVudCA9IF9fei0+X01fcGFyZW50OwogICAgc3RkOjpz
d2FwKF9feS0+X01fY29sb3IsIF9fei0+X01fY29sb3IpOwogICAgX195ID0gX196OwoKICB9CiAg
ZWxzZSB7CiAgICBfX3hfcGFyZW50ID0gX195LT5fTV9wYXJlbnQ7CiAgICBpZiAoX194KSBfX3gt
Pl9NX3BhcmVudCA9IF9feS0+X01fcGFyZW50OwogICAgaWYgKF9fcm9vdCA9PSBfX3opCiAgICAg
IF9fcm9vdCA9IF9feDsKICAgIGVsc2UKICAgICAgaWYgKF9fei0+X01fcGFyZW50LT5fTV9sZWZ0
ID09IF9feikKICAgICAgICBfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feDsKICAgICAgZWxz
ZQogICAgICAgIF9fei0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feDsKICAgIGlmIChfX2xlZnRt
b3N0ID09IF9feikKICAgICAgaWYgKF9fei0+X01fcmlnaHQgPT0gMCkKICAgICAgICBfX2xlZnRt
b3N0ID0gX196LT5fTV9wYXJlbnQ7CgogICAgICBlbHNlCiAgICAgICAgX19sZWZ0bW9zdCA9IF9S
Yl90cmVlX25vZGVfYmFzZTo6X1NfbWluaW11bShfX3gpOwogICAgaWYgKF9fcmlnaHRtb3N0ID09
IF9feikKICAgICAgaWYgKF9fei0+X01fbGVmdCA9PSAwKQogICAgICAgIF9fcmlnaHRtb3N0ID0g
X196LT5fTV9wYXJlbnQ7CgogICAgICBlbHNlCiAgICAgICAgX19yaWdodG1vc3QgPSBfUmJfdHJl
ZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0oX194KTsKICB9CiAgaWYgKF9feS0+X01fY29sb3IgIT0g
X1NfcmJfdHJlZV9yZWQpIHsKICAgIHdoaWxlIChfX3ggIT0gX19yb290ICYmIChfX3ggPT0gMCB8
fCBfX3gtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2spKQogICAgICBpZiAoX194ID09IF9f
eF9wYXJlbnQtPl9NX2xlZnQpIHsKICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fdyA9IF9f
eF9wYXJlbnQtPl9NX3JpZ2h0OwogICAgICAgIGlmIChfX3ctPl9NX2NvbG9yID09IF9TX3JiX3Ry
ZWVfcmVkKSB7CiAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAg
ICAgICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgICBf
UmJfdHJlZV9yb3RhdGVfbGVmdChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgX193ID0g
X194X3BhcmVudC0+X01fcmlnaHQ7CiAgICAgICAgfQogICAgICAgIGlmICgoX193LT5fTV9sZWZ0
ID09IDAgfHwKICAgICAgICAgICAgIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPT0gX1NfcmJfdHJl
ZV9ibGFjaykgJiYKICAgICAgICAgICAgKF9fdy0+X01fcmlnaHQgPT0gMCB8fAogICAgICAgICAg
ICAgX193LT5fTV9yaWdodC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFjaykpIHsKICAgICAg
ICAgIF9fdy0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICAgIF9feCA9IF9feF9w
YXJlbnQ7CiAgICAgICAgICBfX3hfcGFyZW50ID0gX194X3BhcmVudC0+X01fcGFyZW50OwogICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoX193LT5fTV9yaWdodCA9PSAwIHx8CiAgICAgICAg
ICAgICAgX193LT5fTV9yaWdodC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFjaykgewogICAg
ICAgICAgICBpZiAoX193LT5fTV9sZWZ0KSBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID0gX1NfcmJf
dHJlZV9ibGFjazsKICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwog
ICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX193LCBfX3Jvb3QpOwogICAgICAgICAg
ICBfX3cgPSBfX3hfcGFyZW50LT5fTV9yaWdodDsKICAgICAgICAgIH0KICAgICAgICAgIF9fdy0+
X01fY29sb3IgPSBfX3hfcGFyZW50LT5fTV9jb2xvcjsKICAgICAgICAgIF9feF9wYXJlbnQtPl9N
X2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICAgIGlmIChfX3ctPl9NX3JpZ2h0KSBf
X3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICBfUmJf
dHJlZV9yb3RhdGVfbGVmdChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgYnJlYWs7CiAg
ICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX193ID0g
X194X3BhcmVudC0+X01fbGVmdDsKICAgICAgICBpZiAoX193LT5fTV9jb2xvciA9PSBfU19yYl90
cmVlX3JlZCkgewogICAgICAgICAgX193LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAg
ICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgICAg
X1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICBfX3cg
PSBfX3hfcGFyZW50LT5fTV9sZWZ0OwogICAgICAgIH0KICAgICAgICBpZiAoKF9fdy0+X01fcmln
aHQgPT0gMCB8fAogICAgICAgICAgICAgX193LT5fTV9yaWdodC0+X01fY29sb3IgPT0gX1NfcmJf
dHJlZV9ibGFjaykgJiYKICAgICAgICAgICAgKF9fdy0+X01fbGVmdCA9PSAwIHx8CiAgICAgICAg
ICAgICBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2spKSB7CiAgICAg
ICAgICBfX3ctPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgICBfX3ggPSBfX3hf
cGFyZW50OwogICAgICAgICAgX194X3BhcmVudCA9IF9feF9wYXJlbnQtPl9NX3BhcmVudDsKICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCA9PSAwIHx8CiAgICAgICAg
ICAgICAgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX2JsYWNrKSB7CiAgICAg
ICAgICAgIGlmIChfX3ctPl9NX3JpZ2h0KSBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9IF9TX3Ji
X3RyZWVfYmxhY2s7CiAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsK
ICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX193LCBfX3Jvb3QpOwogICAgICAgICAg
ICBfX3cgPSBfX3hfcGFyZW50LT5fTV9sZWZ0OwogICAgICAgICAgfQogICAgICAgICAgX193LT5f
TV9jb2xvciA9IF9feF9wYXJlbnQtPl9NX2NvbG9yOwogICAgICAgICAgX194X3BhcmVudC0+X01f
Y29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCkgX193
LT5fTV9sZWZ0LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICBfUmJfdHJl
ZV9yb3RhdGVfcmlnaHQoX194X3BhcmVudCwgX19yb290KTsKICAgICAgICAgIGJyZWFrOwogICAg
ICAgIH0KICAgICAgfQogICAgaWYgKF9feCkgX194LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxh
Y2s7CiAgfQogIHJldHVybiBfX3k7Cn0KCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvYywgYm9vbCBfU19pbnN0YW5jZWxlc3M+CmNsYXNzIF9SYl90cmVlX2FsbG9jX2Jhc2Ug
ewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6
YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9j
YXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX25vZGVfYWxsb2NhdG9yOyB9CgogIF9SYl90cmVlX2Fs
bG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX01fbm9kZV9hbGxvY2F0
b3IoX19hKSwgX01faGVhZGVyKDApIHt9Cgpwcm90ZWN0ZWQ6CiAgdHlwZW5hbWUgX0FsbG9jX3Ry
YWl0czxfUmJfdHJlZV9ub2RlPF9UcD4sIF9BbGxvYz46OmFsbG9jYXRvcl90eXBlCiAgICAgICAg
ICAgX01fbm9kZV9hbGxvY2F0b3I7CiAgX1JiX3RyZWVfbm9kZTxfVHA+KiBfTV9oZWFkZXI7Cgog
IF9SYl90cmVlX25vZGU8X1RwPiogX01fZ2V0X25vZGUoKQogICAgeyByZXR1cm4gX01fbm9kZV9h
bGxvY2F0b3IuYWxsb2NhdGUoMSk7IH0KICB2b2lkIF9NX3B1dF9ub2RlKF9SYl90cmVlX25vZGU8
X1RwPiogX19wKQogICAgeyBfTV9ub2RlX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgMSk7IH0K
fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmNsYXNzIF9SYl90cmVlX2Fs
bG9jX2Jhc2U8X1RwLCBfQWxsb2MsIHRydWU+IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUg
X0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBl
OwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0
b3JfdHlwZSgpOyB9CgogIF9SYl90cmVlX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUm
KSA6IF9NX2hlYWRlcigwKSB7fQoKcHJvdGVjdGVkOgogIF9SYl90cmVlX25vZGU8X1RwPiogX01f
aGVhZGVyOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1JiX3RyZWVfbm9kZTxf
VHA+LCBfQWxsb2M+OjpfQWxsb2NfdHlwZQogICAgICAgICAgX0FsbG9jX3R5cGU7CgogIF9SYl90
cmVlX25vZGU8X1RwPiogX01fZ2V0X25vZGUoKQogICAgeyByZXR1cm4gX0FsbG9jX3R5cGU6OmFs
bG9jYXRlKDEpOyB9CiAgdm9pZCBfTV9wdXRfbm9kZShfUmJfdHJlZV9ub2RlPF9UcD4qIF9fcCkK
ICAgIHsgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUoX19wLCAxKTsgfQp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX1JiX3RyZWVfYmFzZQogIDogcHVibGljIF9S
Yl90cmVlX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgp7CiAgdHlw
ZWRlZiBfUmJfdHJlZV9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgog
ICAgICAgICAgX0Jhc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUg
YWxsb2NhdG9yX3R5cGU7CgogIF9SYl90cmVlX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9f
YSkKICAgIDogX0Jhc2UoX19hKSB7IF9NX2hlYWRlciA9IF9NX2dldF9ub2RlKCk7IH0KICB+X1Ji
X3RyZWVfYmFzZSgpIHsgX01fcHV0X25vZGUoX01faGVhZGVyKTsgfQoKfTsKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgY2xhc3MgX0NvbXBh
cmUsCiAgICAgICAgICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8X1ZhbHVlPiA+CmNsYXNzIF9S
Yl90cmVlIDogcHJvdGVjdGVkIF9SYl90cmVlX2Jhc2U8X1ZhbHVlLCBfQWxsb2M+IHsKICB0eXBl
ZGVmIF9SYl90cmVlX2Jhc2U8X1ZhbHVlLCBfQWxsb2M+IF9CYXNlOwpwcm90ZWN0ZWQ6CiAgdHlw
ZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9CYXNlX3B0cjsKICB0eXBlZGVmIF9SYl90cmVlX25v
ZGU8X1ZhbHVlPiBfUmJfdHJlZV9ub2RlOwogIHR5cGVkZWYgX1JiX3RyZWVfQ29sb3JfdHlwZSBf
Q29sb3JfdHlwZTsKcHVibGljOgogIHR5cGVkZWYgX0tleSBrZXlfdHlwZTsKICB0eXBlZGVmIF9W
YWx1ZSB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKICB0eXBlZGVm
IGNvbnN0IHZhbHVlX3R5cGUqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2YWx1ZV90eXBlJiBy
ZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7CiAg
dHlwZWRlZiBfUmJfdHJlZV9ub2RlKiBfTGlua190eXBlOwogIHR5cGVkZWYgc2l6ZV90IHNpemVf
dHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgogIHR5cGVkZWYgdHlw
ZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90
eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigp
OyB9Cgpwcm90ZWN0ZWQ6CiAgdXNpbmcgX0Jhc2U6Ol9NX2dldF9ub2RlOwogIHVzaW5nIF9CYXNl
OjpfTV9wdXRfbm9kZTsKICB1c2luZyBfQmFzZTo6X01faGVhZGVyOwoKcHJvdGVjdGVkOgoKICBf
TGlua190eXBlIF9NX2NyZWF0ZV9ub2RlKGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICB7CiAgICBf
TGlua190eXBlIF9fdG1wID0gX01fZ2V0X25vZGUoKTsKICAgIHRyeSB7CiAgICAgIGNvbnN0cnVj
dCgmX190bXAtPl9NX3ZhbHVlX2ZpZWxkLCBfX3gpOwogICAgfQogICAgY2F0Y2goLi4uKSB7IF9N
X3B1dF9ub2RlKF9fdG1wKTsgdGhyb3c7IH07CiAgICByZXR1cm4gX190bXA7CiAgfQoKICBfTGlu
a190eXBlIF9NX2Nsb25lX25vZGUoX0xpbmtfdHlwZSBfX3gpCiAgewogICAgX0xpbmtfdHlwZSBf
X3RtcCA9IF9NX2NyZWF0ZV9ub2RlKF9feC0+X01fdmFsdWVfZmllbGQpOwogICAgX190bXAtPl9N
X2NvbG9yID0gX194LT5fTV9jb2xvcjsKICAgIF9fdG1wLT5fTV9sZWZ0ID0gMDsKICAgIF9fdG1w
LT5fTV9yaWdodCA9IDA7CiAgICByZXR1cm4gX190bXA7CiAgfQoKICB2b2lkIGRlc3Ryb3lfbm9k
ZShfTGlua190eXBlIF9fcCkKICB7CiAgICBkZXN0cm95KCZfX3AtPl9NX3ZhbHVlX2ZpZWxkKTsK
ICAgIF9NX3B1dF9ub2RlKF9fcCk7CiAgfQoKcHJvdGVjdGVkOgogIHNpemVfdHlwZSBfTV9ub2Rl
X2NvdW50OwogIF9Db21wYXJlIF9NX2tleV9jb21wYXJlOwoKICBfTGlua190eXBlJiBfTV9yb290
KCkgY29uc3QKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikgX01faGVhZGVyLT5fTV9wYXJlbnQ7
IH0KICBfTGlua190eXBlJiBfTV9sZWZ0bW9zdCgpIGNvbnN0CiAgICB7IHJldHVybiAoX0xpbmtf
dHlwZSYpIF9NX2hlYWRlci0+X01fbGVmdDsgfQogIF9MaW5rX3R5cGUmIF9NX3JpZ2h0bW9zdCgp
IGNvbnN0CiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSYpIF9NX2hlYWRlci0+X01fcmlnaHQ7IH0K
CiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX2xlZnQoX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVy
biAoX0xpbmtfdHlwZSYpKF9feC0+X01fbGVmdCk7IH0KICBzdGF0aWMgX0xpbmtfdHlwZSYgX1Nf
cmlnaHQoX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01f
cmlnaHQpOyB9CiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX3BhcmVudChfTGlua190eXBlIF9feCkK
ICAgIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9wYXJlbnQpOyB9CiAgc3RhdGljIHJl
ZmVyZW5jZSBfU192YWx1ZShfTGlua190eXBlIF9feCkKICAgIHsgcmV0dXJuIF9feC0+X01fdmFs
dWVfZmllbGQ7IH0KICBzdGF0aWMgY29uc3QgX0tleSYgX1Nfa2V5KF9MaW5rX3R5cGUgX194KQog
ICAgeyByZXR1cm4gX0tleU9mVmFsdWUoKShfU192YWx1ZShfX3gpKTsgfQogIHN0YXRpYyBfQ29s
b3JfdHlwZSYgX1NfY29sb3IoX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiAoX0NvbG9yX3R5
cGUmKShfX3gtPl9NX2NvbG9yKTsgfQoKICBzdGF0aWMgX0xpbmtfdHlwZSYgX1NfbGVmdChfQmFz
ZV9wdHIgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX2xlZnQpOyB9CiAg
c3RhdGljIF9MaW5rX3R5cGUmIF9TX3JpZ2h0KF9CYXNlX3B0ciBfX3gpCiAgICB7IHJldHVybiAo
X0xpbmtfdHlwZSYpKF9feC0+X01fcmlnaHQpOyB9CiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX3Bh
cmVudChfQmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX3Bh
cmVudCk7IH0KICBzdGF0aWMgcmVmZXJlbmNlIF9TX3ZhbHVlKF9CYXNlX3B0ciBfX3gpCiAgICB7
IHJldHVybiAoKF9MaW5rX3R5cGUpX194KS0+X01fdmFsdWVfZmllbGQ7IH0KICBzdGF0aWMgY29u
c3QgX0tleSYgX1Nfa2V5KF9CYXNlX3B0ciBfX3gpCiAgICB7IHJldHVybiBfS2V5T2ZWYWx1ZSgp
KF9TX3ZhbHVlKF9MaW5rX3R5cGUoX194KSkpO30KICBzdGF0aWMgX0NvbG9yX3R5cGUmIF9TX2Nv
bG9yKF9CYXNlX3B0ciBfX3gpCiAgICB7IHJldHVybiAoX0NvbG9yX3R5cGUmKShfTGlua190eXBl
KF9feCktPl9NX2NvbG9yKTsgfQoKICBzdGF0aWMgX0xpbmtfdHlwZSBfU19taW5pbXVtKF9MaW5r
X3R5cGUgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUpIF9SYl90cmVlX25vZGVfYmFzZTo6
X1NfbWluaW11bShfX3gpOyB9CgogIHN0YXRpYyBfTGlua190eXBlIF9TX21heGltdW0oX0xpbmtf
dHlwZSBfX3gpCiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSkgX1JiX3RyZWVfbm9kZV9iYXNlOjpf
U19tYXhpbXVtKF9feCk7IH0KCnB1YmxpYzoKICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPHZh
bHVlX3R5cGUsIHJlZmVyZW5jZSwgcG9pbnRlcj4gaXRlcmF0b3I7CiAgdHlwZWRlZiBfUmJfdHJl
ZV9pdGVyYXRvcjx2YWx1ZV90eXBlLCBjb25zdF9yZWZlcmVuY2UsIGNvbnN0X3BvaW50ZXI+CiAg
ICAgICAgICBjb25zdF9pdGVyYXRvcjsKCiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0
X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgcmV2ZXJzZV9pdGVy
YXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCnByaXZhdGU6CiAgaXRlcmF0b3IgX01f
aW5zZXJ0KF9CYXNlX3B0ciBfX3gsIF9CYXNlX3B0ciBfX3ksIGNvbnN0IHZhbHVlX3R5cGUmIF9f
dik7CiAgX0xpbmtfdHlwZSBfTV9jb3B5KF9MaW5rX3R5cGUgX194LCBfTGlua190eXBlIF9fcCk7
CiAgdm9pZCBfTV9lcmFzZShfTGlua190eXBlIF9feCk7CgpwdWJsaWM6CgogIF9SYl90cmVlKCkK
ICAgIDogX0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSksIF9NX25vZGVfY291bnQoMCksIF9NX2tleV9j
b21wYXJlKCkKICAgIHsgX01fZW1wdHlfaW5pdGlhbGl6ZSgpOyB9CgogIF9SYl90cmVlKGNvbnN0
IF9Db21wYXJlJiBfX2NvbXApCiAgICA6IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkpLCBfTV9ub2Rl
X2NvdW50KDApLCBfTV9rZXlfY29tcGFyZShfX2NvbXApCiAgICB7IF9NX2VtcHR5X2luaXRpYWxp
emUoKTsgfQoKICBfUmJfdHJlZShjb25zdCBfQ29tcGFyZSYgX19jb21wLCBjb25zdCBhbGxvY2F0
b3JfdHlwZSYgX19hKQogICAgOiBfQmFzZShfX2EpLCBfTV9ub2RlX2NvdW50KDApLCBfTV9rZXlf
Y29tcGFyZShfX2NvbXApCiAgICB7IF9NX2VtcHR5X2luaXRpYWxpemUoKTsgfQoKICBfUmJfdHJl
ZShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+
JiBfX3gpCiAgICA6IF9CYXNlKF9feC5nZXRfYWxsb2NhdG9yKCkpLAogICAgICBfTV9ub2RlX2Nv
dW50KDApLCBfTV9rZXlfY29tcGFyZShfX3guX01fa2V5X2NvbXBhcmUpCiAgewogICAgaWYgKF9f
eC5fTV9yb290KCkgPT0gMCkKICAgICAgX01fZW1wdHlfaW5pdGlhbGl6ZSgpOwogICAgZWxzZSB7
CiAgICAgIF9TX2NvbG9yKF9NX2hlYWRlcikgPSBfU19yYl90cmVlX3JlZDsKICAgICAgX01fcm9v
dCgpID0gX01fY29weShfX3guX01fcm9vdCgpLCBfTV9oZWFkZXIpOwogICAgICBfTV9sZWZ0bW9z
dCgpID0gX1NfbWluaW11bShfTV9yb290KCkpOwogICAgICBfTV9yaWdodG1vc3QoKSA9IF9TX21h
eGltdW0oX01fcm9vdCgpKTsKICAgIH0KICAgIF9NX25vZGVfY291bnQgPSBfX3guX01fbm9kZV9j
b3VudDsKICB9CiAgfl9SYl90cmVlKCkgeyBjbGVhcigpOyB9CiAgX1JiX3RyZWU8X0tleSxfVmFs
dWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYKICBvcGVyYXRvcj0oY29uc3QgX1JiX3Ry
ZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194KTsKCnByaXZh
dGU6CiAgdm9pZCBfTV9lbXB0eV9pbml0aWFsaXplKCkgewogICAgX1NfY29sb3IoX01faGVhZGVy
KSA9IF9TX3JiX3RyZWVfcmVkOwoKICAgIF9NX3Jvb3QoKSA9IDA7CiAgICBfTV9sZWZ0bW9zdCgp
ID0gX01faGVhZGVyOwogICAgX01fcmlnaHRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgfQoKcHVibGlj
OgoKICBfQ29tcGFyZSBrZXlfY29tcCgpIGNvbnN0IHsgcmV0dXJuIF9NX2tleV9jb21wYXJlOyB9
CiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV9sZWZ0bW9zdCgpOyB9CiAgY29uc3RfaXRl
cmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV9sZWZ0bW9zdCgpOyB9CiAgaXRlcmF0b3Ig
ZW5kKCkgeyByZXR1cm4gX01faGVhZGVyOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3Qg
eyByZXR1cm4gX01faGVhZGVyOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVy
biByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJl
Z2luKCkgY29uc3QgewogICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOwog
IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJl
Z2luKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgewogICAgcmV0
dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7CiAgfQogIGJvb2wgZW1wdHkoKSBj
b25zdCB7IHJldHVybiBfTV9ub2RlX2NvdW50ID09IDA7IH0KICBzaXplX3R5cGUgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIF9NX25vZGVfY291bnQ7IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25z
dCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CgogIHZvaWQgc3dhcChfUmJfdHJlZTxfS2V5LF9W
YWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3QpIHsKICAgIHN0ZDo6c3dhcChf
TV9oZWFkZXIsIF9fdC5fTV9oZWFkZXIpOwogICAgc3RkOjpzd2FwKF9NX25vZGVfY291bnQsIF9f
dC5fTV9ub2RlX2NvdW50KTsKICAgIHN0ZDo6c3dhcChfTV9rZXlfY29tcGFyZSwgX190Ll9NX2tl
eV9jb21wYXJlKTsKICB9CgpwdWJsaWM6CgogIHBhaXI8aXRlcmF0b3IsYm9vbD4gaW5zZXJ0X3Vu
aXF1ZShjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwogIGl0ZXJhdG9yIGluc2VydF9lcXVhbChjb25z
dCB2YWx1ZV90eXBlJiBfX3gpOwoKICBpdGVyYXRvciBpbnNlcnRfdW5pcXVlKGl0ZXJhdG9yIF9f
cG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CiAgaXRlcmF0b3IgaW5zZXJ0X2VxdWFs
KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CgogIHRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydF91bmlxdWUoX0lucHV0SXRlcmF0
b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnRfZXF1YWwoX0lucHV0SXRlcmF0b3IgX19maXJzdCwg
X0lucHV0SXRlcmF0b3IgX19sYXN0KTsKCiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9u
KTsKICBzaXplX3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCk7CiAgdm9pZCBlcmFzZShp
dGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpOwogIHZvaWQgZXJhc2UoY29uc3Qga2V5
X3R5cGUqIF9fZmlyc3QsIGNvbnN0IGtleV90eXBlKiBfX2xhc3QpOwogIHZvaWQgY2xlYXIoKSB7
CiAgICBpZiAoX01fbm9kZV9jb3VudCAhPSAwKSB7CiAgICAgIF9NX2VyYXNlKF9NX3Jvb3QoKSk7
CiAgICAgIF9NX2xlZnRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICAgIF9NX3Jvb3QoKSA9IDA7CiAg
ICAgIF9NX3JpZ2h0bW9zdCgpID0gX01faGVhZGVyOwogICAgICBfTV9ub2RlX2NvdW50ID0gMDsK
ICAgIH0KICB9CgpwdWJsaWM6CgogIGl0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCk7
CiAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdDsKICBzaXpl
X3R5cGUgY291bnQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CiAgaXRlcmF0b3IgbG93ZXJf
Ym91bmQoY29uc3Qga2V5X3R5cGUmIF9feCk7CiAgY29uc3RfaXRlcmF0b3IgbG93ZXJfYm91bmQo
Y29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CiAgaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qg
a2V5X3R5cGUmIF9feCk7CiAgY29uc3RfaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5
cGUmIF9feCkgY29uc3Q7CiAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29u
c3Qga2V5X3R5cGUmIF9feCk7CiAgcGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+
IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwoKcHVibGljOgoKICBib29s
IF9fcmJfdmVyaWZ5KCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Zh
bHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBf
QWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPT0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUs
X0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgIGNvbnN0IF9SYl90
cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKewogIHJl
dHVybiBfX3guc2l6ZSgpID09IF9feS5zaXplKCkgJiYKICAgICAgICAgZXF1YWwoX194LmJlZ2lu
KCksIF9feC5lbmQoKSwgX195LmJlZ2luKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xh
c3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBj
bGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPChjb25zdCBfUmJfdHJlZTxfS2V5LF9W
YWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICBjb25zdCBf
UmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCnsK
ICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX194LmJlZ2luKCksIF9feC5lbmQoKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVl
LAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3Bl
cmF0b3IhPShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxf
QWxsb2M+JiBfX3gsCiAgICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9m
VmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAog
ICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0
b3I+KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv
Yz4mIF9feCwKICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVl
LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAg
Y2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I8PShjb25z
dCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gs
CiAgICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBh
cmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFz
cyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj49KGNvbnN0IF9S
Yl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAg
ICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxf
QWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9CgoKdGVtcGxhdGUgPGNsYXNz
IF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBf
Q29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZApzd2FwKF9SYl90cmVlPF9LZXksX1Zh
bHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICBfUmJfdHJlZTxfS2V5
LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCnsKICBfX3guc3dhcChf
X3kpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9m
VmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgpfUmJfdHJlZTxf
S2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JgpfUmJfdHJlZTxfS2V5LF9W
YWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjpvcGVyYXRvcj0oY29uc3QgX1Ji
X3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194KQp7CiAg
aWYgKHRoaXMgIT0gJl9feCkgewoKICAgIGNsZWFyKCk7CiAgICBfTV9ub2RlX2NvdW50ID0gMDsK
ICAgIF9NX2tleV9jb21wYXJlID0gX194Ll9NX2tleV9jb21wYXJlOwogICAgaWYgKF9feC5fTV9y
b290KCkgPT0gMCkgewogICAgICBfTV9yb290KCkgPSAwOwogICAgICBfTV9sZWZ0bW9zdCgpID0g
X01faGVhZGVyOwogICAgICBfTV9yaWdodG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgIH0KICAgIGVs
c2UgewogICAgICBfTV9yb290KCkgPSBfTV9jb3B5KF9feC5fTV9yb290KCksIF9NX2hlYWRlcik7
CiAgICAgIF9NX2xlZnRtb3N0KCkgPSBfU19taW5pbXVtKF9NX3Jvb3QoKSk7CiAgICAgIF9NX3Jp
Z2h0bW9zdCgpID0gX1NfbWF4aW11bShfTV9yb290KCkpOwogICAgICBfTV9ub2RlX2NvdW50ID0g
X194Ll9NX25vZGVfY291bnQ7CiAgICB9CiAgfQogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBj
bGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1
ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgpfUmJfdHJlZTxfS2V5LF9W
YWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjpfTV9pbnNlcnQoX0Jhc2VfcHRy
IF9feF8sIF9CYXNlX3B0ciBfX3lfLCBjb25zdCBfVmFsdWUmIF9fdikKewogIF9MaW5rX3R5cGUg
X194ID0gKF9MaW5rX3R5cGUpIF9feF87CiAgX0xpbmtfdHlwZSBfX3kgPSAoX0xpbmtfdHlwZSkg
X195XzsKICBfTGlua190eXBlIF9fejsKCiAgaWYgKF9feSA9PSBfTV9oZWFkZXIgfHwgX194ICE9
IDAgfHwKICAgICAgX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX195
KSkpIHsKICAgIF9feiA9IF9NX2NyZWF0ZV9ub2RlKF9fdik7CiAgICBfU19sZWZ0KF9feSkgPSBf
X3o7CgogICAgaWYgKF9feSA9PSBfTV9oZWFkZXIpIHsKICAgICAgX01fcm9vdCgpID0gX196Owog
ICAgICBfTV9yaWdodG1vc3QoKSA9IF9fejsKICAgIH0KICAgIGVsc2UgaWYgKF9feSA9PSBfTV9s
ZWZ0bW9zdCgpKQogICAgICBfTV9sZWZ0bW9zdCgpID0gX196OwogIH0KICBlbHNlIHsKICAgIF9f
eiA9IF9NX2NyZWF0ZV9ub2RlKF9fdik7CiAgICBfU19yaWdodChfX3kpID0gX196OwogICAgaWYg
KF9feSA9PSBfTV9yaWdodG1vc3QoKSkKICAgICAgX01fcmlnaHRtb3N0KCkgPSBfX3o7CiAgfQog
IF9TX3BhcmVudChfX3opID0gX195OwogIF9TX2xlZnQoX196KSA9IDA7CiAgX1NfcmlnaHQoX196
KSA9IDA7CiAgX1JiX3RyZWVfcmViYWxhbmNlKF9feiwgX01faGVhZGVyLT5fTV9wYXJlbnQpOwog
ICsrX01fbm9kZV9jb3VudDsKICByZXR1cm4gaXRlcmF0b3IoX196KTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFz
cyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxf
S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgpfUmJfdHJlZTxfS2V5LF9WYWx1
ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjppbnNlcnRfZXF1YWwoY29uc3QgX1Zh
bHVlJiBfX3YpCnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICBfTGlua190eXBlIF9f
eCA9IF9NX3Jvb3QoKTsKICB3aGlsZSAoX194ICE9IDApIHsKICAgIF9feSA9IF9feDsKICAgIF9f
eCA9IF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9feCkpID8KICAg
ICAgICAgICAgX1NfbGVmdChfX3gpIDogX1NfcmlnaHQoX194KTsKICB9CiAgcmV0dXJuIF9NX2lu
c2VydChfX3gsIF9feSwgX192KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFs
dWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9B
bGxvYz4KcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29t
cGFyZSxfQWxsb2M+OjppdGVyYXRvciwKICAgICBib29sPgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxf
S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjppbnNlcnRfdW5pcXVlKGNvbnN0IF9WYWx1
ZSYgX192KQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgX0xpbmtfdHlwZSBfX3gg
PSBfTV9yb290KCk7CiAgYm9vbCBfX2NvbXAgPSB0cnVlOwogIHdoaWxlIChfX3ggIT0gMCkgewog
ICAgX195ID0gX194OwogICAgX19jb21wID0gX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShf
X3YpLCBfU19rZXkoX194KSk7CiAgICBfX3ggPSBfX2NvbXAgPyBfU19sZWZ0KF9feCkgOiBfU19y
aWdodChfX3gpOwogIH0KICBpdGVyYXRvciBfX2ogPSBpdGVyYXRvcihfX3kpOwogIGlmIChfX2Nv
bXApCiAgICBpZiAoX19qID09IGJlZ2luKCkpCiAgICAgIHJldHVybiBwYWlyPGl0ZXJhdG9yLGJv
b2w+KF9NX2luc2VydChfX3gsIF9feSwgX192KSwgdHJ1ZSk7CiAgICBlbHNlCiAgICAgIC0tX19q
OwogIGlmIChfTV9rZXlfY29tcGFyZShfU19rZXkoX19qLl9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgp
KF9fdikpKQogICAgcmV0dXJuIHBhaXI8aXRlcmF0b3IsYm9vbD4oX01faW5zZXJ0KF9feCwgX195
LCBfX3YpLCB0cnVlKTsKICByZXR1cm4gcGFpcjxpdGVyYXRvcixib29sPihfX2osIGZhbHNlKTsK
fQoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsLCBjbGFzcyBfS2V5T2ZWYWx1ZSwK
ICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVl
PF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6aXRlcmF0b3IKX1Ji
X3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+CiAgOjppbnNl
cnRfdW5pcXVlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9WYWwmIF9fdikKewogIGlmIChf
X3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVhZGVyLT5fTV9sZWZ0KSB7CiAgICBpZiAoc2l6ZSgp
ID4gMCAmJgogICAgICAgX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSks
IF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5f
TV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7CgogICAgZWxzZQogICAgICByZXR1cm4g
aW5zZXJ0X3VuaXF1ZShfX3YpLmZpcnN0OwogIH0gZWxzZSBpZiAoX19wb3NpdGlvbi5fTV9ub2Rl
ID09IF9NX2hlYWRlcikgewogICAgaWYgKF9NX2tleV9jb21wYXJlKF9TX2tleShfTV9yaWdodG1v
c3QoKSksIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX01f
cmlnaHRtb3N0KCksIF9fdik7CiAgICBlbHNlCiAgICAgIHJldHVybiBpbnNlcnRfdW5pcXVlKF9f
dikuZmlyc3Q7CiAgfSBlbHNlIHsKICAgIGl0ZXJhdG9yIF9fYmVmb3JlID0gX19wb3NpdGlvbjsK
ICAgIC0tX19iZWZvcmU7CiAgICBpZiAoX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fYmVmb3JlLl9N
X25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpCiAgICAgICAgJiYgX01fa2V5X2NvbXBhcmUoX0tl
eU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSkpIHsKICAgICAgaWYg
KF9TX3JpZ2h0KF9fYmVmb3JlLl9NX25vZGUpID09IDApCiAgICAgICAgcmV0dXJuIF9NX2luc2Vy
dCgwLCBfX2JlZm9yZS5fTV9ub2RlLCBfX3YpOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIF9N
X2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24uX01fbm9kZSwgX192KTsKCiAg
ICB9IGVsc2UKICAgICAgcmV0dXJuIGluc2VydF91bmlxdWUoX192KS5maXJzdDsKICB9Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAg
ICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXks
X1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgpfUmJfdHJlZTxfS2V5
LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6aW5zZXJ0X2VxdWFsKGl0ZXJh
dG9yIF9fcG9zaXRpb24sIGNvbnN0IF9WYWwmIF9fdikKewogIGlmIChfX3Bvc2l0aW9uLl9NX25v
ZGUgPT0gX01faGVhZGVyLT5fTV9sZWZ0KSB7CiAgICBpZiAoc2l6ZSgpID4gMCAmJgogICAgICAg
ICFfTV9rZXlfY29tcGFyZShfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSwgX0tleU9mVmFsdWUo
KShfX3YpKSkKICAgICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9z
aXRpb24uX01fbm9kZSwgX192KTsKCiAgICBlbHNlCiAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwo
X192KTsKICB9IGVsc2UgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXIpIHsKICAg
IGlmICghX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX01fcmlnaHRt
b3N0KCkpKSkKICAgICAgcmV0dXJuIF9NX2luc2VydCgwLCBfTV9yaWdodG1vc3QoKSwgX192KTsK
ICAgIGVsc2UKICAgICAgcmV0dXJuIGluc2VydF9lcXVhbChfX3YpOwogIH0gZWxzZSB7CiAgICBp
dGVyYXRvciBfX2JlZm9yZSA9IF9fcG9zaXRpb247CiAgICAtLV9fYmVmb3JlOwogICAgaWYgKCFf
TV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX2JlZm9yZS5fTV9ub2Rl
KSkKICAgICAgICAmJiAhX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSks
IF9LZXlPZlZhbHVlKCkoX192KSkpIHsKICAgICAgaWYgKF9TX3JpZ2h0KF9fYmVmb3JlLl9NX25v
ZGUpID09IDApCiAgICAgICAgcmV0dXJuIF9NX2luc2VydCgwLCBfX2JlZm9yZS5fTV9ub2RlLCBf
X3YpOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25v
ZGUsIF9fcG9zaXRpb24uX01fbm9kZSwgX192KTsKCiAgICB9IGVsc2UKICAgICAgcmV0dXJuIGlu
c2VydF9lcXVhbChfX3YpOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWws
IGNsYXNzIF9Lb1YsIGNsYXNzIF9DbXAsIGNsYXNzIF9BbGxvYz4KICB0ZW1wbGF0ZTxjbGFzcyBf
SUk+CnZvaWQgX1JiX3RyZWU8X0tleSxfVmFsLF9Lb1YsX0NtcCxfQWxsb2M+CiAgOjppbnNlcnRf
ZXF1YWwoX0lJIF9fZmlyc3QsIF9JSSBfX2xhc3QpCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0OyArK19fZmlyc3QpCiAgICBpbnNlcnRfZXF1YWwoKl9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbCwgY2xhc3MgX0tvViwgY2xhc3MgX0NtcCwgY2xhc3MgX0Fs
bG9jPgogIHRlbXBsYXRlPGNsYXNzIF9JST4Kdm9pZCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tvVixf
Q21wLF9BbGxvYz4KICA6Omluc2VydF91bmlxdWUoX0lJIF9fZmlyc3QsIF9JSSBfX2xhc3QpIHsK
ICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpbnNlcnRfdW5pcXVl
KCpfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3Mg
X0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxp
bmUgdm9pZCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+
CiAgOjplcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQp7CiAgX0xpbmtfdHlwZSBfX3kgPQogICAg
KF9MaW5rX3R5cGUpIF9SYl90cmVlX3JlYmFsYW5jZV9mb3JfZXJhc2UoX19wb3NpdGlvbi5fTV9u
b2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01faGVh
ZGVyLT5fTV9wYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfTV9oZWFkZXItPl9NX2xlZnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfTV9oZWFkZXItPl9NX3JpZ2h0KTsKICBkZXN0cm95X25vZGUoX195KTsK
ICAtLV9NX25vZGVfY291bnQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUs
IGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxv
Yz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs
bG9jPjo6c2l6ZV90eXBlCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJl
LF9BbGxvYz46OmVyYXNlKGNvbnN0IF9LZXkmIF9feCkKewogIHBhaXI8aXRlcmF0b3IsaXRlcmF0
b3I+IF9fcCA9IGVxdWFsX3JhbmdlKF9feCk7CiAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgZGlzdGFu
Y2UoX19wLmZpcnN0LCBfX3Auc2Vjb25kLCBfX24pOwogIGVyYXNlKF9fcC5maXJzdCwgX19wLnNl
Y29uZCk7CiAgcmV0dXJuIF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWws
IGNsYXNzIF9Lb1YsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90
cmVlPF9LZXksIF9WYWwsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+OjpfTGlua190eXBlCl9SYl90
cmVlPF9LZXksX1ZhbCxfS29WLF9Db21wYXJlLF9BbGxvYz4KICA6Ol9NX2NvcHkoX0xpbmtfdHlw
ZSBfX3gsIF9MaW5rX3R5cGUgX19wKQp7CgogIF9MaW5rX3R5cGUgX190b3AgPSBfTV9jbG9uZV9u
b2RlKF9feCk7CiAgX190b3AtPl9NX3BhcmVudCA9IF9fcDsKCiAgdHJ5IHsKICAgIGlmIChfX3gt
Pl9NX3JpZ2h0KQogICAgICBfX3RvcC0+X01fcmlnaHQgPSBfTV9jb3B5KF9TX3JpZ2h0KF9feCks
IF9fdG9wKTsKICAgIF9fcCA9IF9fdG9wOwogICAgX194ID0gX1NfbGVmdChfX3gpOwoKICAgIHdo
aWxlIChfX3ggIT0gMCkgewogICAgICBfTGlua190eXBlIF9feSA9IF9NX2Nsb25lX25vZGUoX194
KTsKICAgICAgX19wLT5fTV9sZWZ0ID0gX195OwogICAgICBfX3ktPl9NX3BhcmVudCA9IF9fcDsK
ICAgICAgaWYgKF9feC0+X01fcmlnaHQpCiAgICAgICAgX195LT5fTV9yaWdodCA9IF9NX2NvcHko
X1NfcmlnaHQoX194KSwgX195KTsKICAgICAgX19wID0gX195OwogICAgICBfX3ggPSBfU19sZWZ0
KF9feCk7CiAgICB9CiAgfQogIGNhdGNoKC4uLikgeyBfTV9lcmFzZShfX3RvcCk7IHRocm93OyB9
OwoKICByZXR1cm4gX190b3A7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUs
IGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxv
Yz4Kdm9pZCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+
CiAgOjpfTV9lcmFzZShfTGlua190eXBlIF9feCkKewoKICB3aGlsZSAoX194ICE9IDApIHsKICAg
IF9NX2VyYXNlKF9TX3JpZ2h0KF9feCkpOwogICAgX0xpbmtfdHlwZSBfX3kgPSBfU19sZWZ0KF9f
eCk7CiAgICBkZXN0cm95X25vZGUoX194KTsKICAgIF9feCA9IF9feTsKICB9Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAg
Y2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4Kdm9pZCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxf
S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjplcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBp
dGVyYXRvciBfX2xhc3QpCnsKICBpZiAoX19maXJzdCA9PSBiZWdpbigpICYmIF9fbGFzdCA9PSBl
bmQoKSkKICAgIGNsZWFyKCk7CiAgZWxzZQogICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSBl
cmFzZShfX2ZpcnN0KyspOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBj
bGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+
CnZvaWQgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgog
IDo6ZXJhc2UoY29uc3QgX0tleSogX19maXJzdCwgY29uc3QgX0tleSogX19sYXN0KQp7CiAgd2hp
bGUgKF9fZmlyc3QgIT0gX19sYXN0KSBlcmFzZSgqX19maXJzdCsrKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFz
cyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxf
S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgpfUmJfdHJlZTxfS2V5LF9WYWx1
ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpmaW5kKGNvbnN0IF9LZXkmIF9faykKewog
IF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgp
OwoKICB3aGlsZSAoX194ICE9IDApCiAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gp
LCBfX2spKQogICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgIGVsc2UKICAg
ICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgaXRlcmF0b3IgX19qID0gaXRlcmF0b3IoX195KTsK
ICByZXR1cm4gKF9faiA9PSBlbmQoKSB8fCBfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX2ou
X01fbm9kZSkpKSA/CiAgICAgZW5kKCkgOiBfX2o7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj
bGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUs
IGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUs
X0NvbXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tl
eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6ZmluZChjb25zdCBfS2V5JiBfX2spIGNvbnN0CnsK
ICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3Qo
KTsKCiAgd2hpbGUgKF9feCAhPSAwKSB7CiAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShf
X3gpLCBfX2spKQogICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgIGVsc2UK
ICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKICB9CiAgY29uc3RfaXRlcmF0b3IgX19qID0gY29u
c3RfaXRlcmF0b3IoX195KTsKICByZXR1cm4gKF9faiA9PSBlbmQoKSB8fCBfTV9rZXlfY29tcGFy
ZShfX2ssIF9TX2tleShfX2ouX01fbm9kZSkpKSA/CiAgICBlbmQoKSA6IF9fajsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAg
ICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9W
YWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpzaXplX3R5cGUKX1JiX3RyZWU8X0tl
eSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6Y291bnQoY29uc3QgX0tl
eSYgX19rKSBjb25zdAp7CiAgcGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+IF9f
cCA9IGVxdWFsX3JhbmdlKF9fayk7CiAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgZGlzdGFuY2UoX19w
LmZpcnN0LCBfX3Auc2Vjb25kLCBfX24pOwogIHJldHVybiBfX247Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3Mg
X0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tl
eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3RyZWU8X0tleSxfVmFsdWUs
X0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6bG93ZXJfYm91bmQoY29uc3QgX0tleSYg
X19rKQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgX0xpbmtfdHlwZSBfX3ggPSBf
TV9yb290KCk7CgogIHdoaWxlIChfX3ggIT0gMCkKICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nf
a2V5KF9feCksIF9faykpCiAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAg
ZWxzZQogICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoKICByZXR1cm4gaXRlcmF0b3IoX195KTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUs
CiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJl
ZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpjb25zdF9pdGVyYXRv
cgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjps
b3dlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spIGNvbnN0CnsKICBfTGlua190eXBlIF9feSA9IF9N
X2hlYWRlcjsKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgd2hpbGUgKF9feCAhPSAw
KQogICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAgICAgX195ID0g
X194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICBlbHNlCiAgICAgIF9feCA9IF9TX3JpZ2h0KF9f
eCk7CgogIHJldHVybiBjb25zdF9pdGVyYXRvcihfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tl
eSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21w
YXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZh
bHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlP
ZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6OnVwcGVyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykK
ewogIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogIF9MaW5rX3R5cGUgX194ID0gX01fcm9v
dCgpOwoKICAgd2hpbGUgKF9feCAhPSAwKQogICAgIGlmIChfTV9rZXlfY29tcGFyZShfX2ssIF9T
X2tleShfX3gpKSkKICAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgIGVs
c2UKICAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CgogICByZXR1cm4gaXRlcmF0b3IoX195KTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUs
CiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJl
ZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpjb25zdF9pdGVyYXRv
cgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjp1
cHBlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spIGNvbnN0CnsKICBfTGlua190eXBlIF9feSA9IF9N
X2hlYWRlcjsKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgIHdoaWxlIChfX3ggIT0g
MCkKICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX194KSkpCiAgICAgICBfX3kg
PSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgICBlbHNlCiAgICAgICBfX3ggPSBfU19yaWdo
dChfX3gpOwoKICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3Mg
X0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lCnBhaXI8dHlwZW5hbWUgX1JiX3RyZWU8X0tl
eSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IsCiAgICAgdHlw
ZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6
aXRlcmF0b3I+Cl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv
Yz4KICA6OmVxdWFsX3JhbmdlKGNvbnN0IF9LZXkmIF9faykKewogIHJldHVybiBwYWlyPGl0ZXJh
dG9yLCBpdGVyYXRvcj4obG93ZXJfYm91bmQoX19rKSwgdXBwZXJfYm91bmQoX19rKSk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9Lb1YsIGNsYXNzIF9Db21w
YXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZQpwYWlyPHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9W
YWx1ZSwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yLAogICAgIHR5cGVu
YW1lIF9SYl90cmVlPF9LZXksIF9WYWx1ZSwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46OmNvbnN0
X2l0ZXJhdG9yPgpfUmJfdHJlZTxfS2V5LCBfVmFsdWUsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+
CiAgOjplcXVhbF9yYW5nZShjb25zdCBfS2V5JiBfX2spIGNvbnN0CnsKICByZXR1cm4gcGFpcjxj
b25zdF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4obG93ZXJfYm91bmQoX19rKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJfYm91bmQoX19rKSk7Cn0K
CmlubGluZSBpbnQKX19ibGFja19jb3VudChfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fbm9kZSwgX1Ji
X3RyZWVfbm9kZV9iYXNlKiBfX3Jvb3QpCnsKICBpZiAoX19ub2RlID09IDApCiAgICByZXR1cm4g
MDsKICBpbnQgX19zdW0gPSAwOwogIGRvIHsKICAgIGlmIChfX25vZGUtPl9NX2NvbG9yID09IF9T
X3JiX3RyZWVfYmxhY2spCiAgICAgICsrX19zdW07CiAgICBpZiAoX19ub2RlID09IF9fcm9vdCkK
ICAgICAgYnJlYWs7CiAgICBfX25vZGUgPSBfX25vZGUtPl9NX3BhcmVudDsKICB9IHdoaWxlICgx
KTsKICByZXR1cm4gX19zdW07Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUs
IGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxv
Yz4KYm9vbCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+
OjpfX3JiX3ZlcmlmeSgpIGNvbnN0CnsKICBpZiAoX01fbm9kZV9jb3VudCA9PSAwIHx8IGJlZ2lu
KCkgPT0gZW5kKCkpCiAgICByZXR1cm4gX01fbm9kZV9jb3VudCA9PSAwICYmIGJlZ2luKCkgPT0g
ZW5kKCkgJiYKICAgICAgX01faGVhZGVyLT5fTV9sZWZ0ID09IF9NX2hlYWRlciAmJiBfTV9oZWFk
ZXItPl9NX3JpZ2h0ID09IF9NX2hlYWRlcjsKCiAgaW50IF9fbGVuID0gX19ibGFja19jb3VudChf
TV9sZWZ0bW9zdCgpLCBfTV9yb290KCkpOwogIGZvciAoY29uc3RfaXRlcmF0b3IgX19pdCA9IGJl
Z2luKCk7IF9faXQgIT0gZW5kKCk7ICsrX19pdCkgewogICAgX0xpbmtfdHlwZSBfX3ggPSAoX0xp
bmtfdHlwZSkgX19pdC5fTV9ub2RlOwogICAgX0xpbmtfdHlwZSBfX0wgPSBfU19sZWZ0KF9feCk7
CiAgICBfTGlua190eXBlIF9fUiA9IF9TX3JpZ2h0KF9feCk7CgogICAgaWYgKF9feC0+X01fY29s
b3IgPT0gX1NfcmJfdHJlZV9yZWQpCiAgICAgIGlmICgoX19MICYmIF9fTC0+X01fY29sb3IgPT0g
X1NfcmJfdHJlZV9yZWQpIHx8CiAgICAgICAgICAoX19SICYmIF9fUi0+X01fY29sb3IgPT0gX1Nf
cmJfdHJlZV9yZWQpKQogICAgICAgIHJldHVybiBmYWxzZTsKCiAgICBpZiAoX19MICYmIF9NX2tl
eV9jb21wYXJlKF9TX2tleShfX3gpLCBfU19rZXkoX19MKSkpCiAgICAgIHJldHVybiBmYWxzZTsK
ICAgIGlmIChfX1IgJiYgX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fUiksIF9TX2tleShfX3gpKSkK
ICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIGlmICghX19MICYmICFfX1IgJiYgX19ibGFja19jb3Vu
dChfX3gsIF9NX3Jvb3QoKSkgIT0gX19sZW4pCiAgICAgIHJldHVybiBmYWxzZTsKICB9CgogIGlm
IChfTV9sZWZ0bW9zdCgpICE9IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWluaW11bShfTV9yb290
KCkpKQogICAgcmV0dXJuIGZhbHNlOwogIGlmIChfTV9yaWdodG1vc3QoKSAhPSBfUmJfdHJlZV9u
b2RlX2Jhc2U6Ol9TX21heGltdW0oX01fcm9vdCgpKSkKICAgIHJldHVybiBmYWxzZTsKCiAgcmV0
dXJuIHRydWU7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNz
IF9LZXlPZlZhbHVlLCBjbGFzcyBfQ29tcGFyZSwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFs
bG9jYXRvcjxfVmFsdWU+ID4Kc3RydWN0IHJiX3RyZWUgOiBwdWJsaWMgX1JiX3RyZWU8X0tleSwg
X1ZhbHVlLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz4KewogIHR5cGVkZWYgX1JiX3Ry
ZWU8X0tleSwgX1ZhbHVlLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz4gX0Jhc2U7CiAg
dHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7Cgog
IHJiX3RyZWUoY29uc3QgX0NvbXBhcmUmIF9fY29tcCA9IF9Db21wYXJlKCksCiAgICAgICAgICBj
b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2Uo
X19jb21wLCBfX2EpIHt9CgogIH5yYl90cmVlKCkge30KfTsKCn0KIyAzNCAiL3Vzci9sb2NhbC9n
Y2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0
ZF9tYXAuaCIgMiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfbWFwLmgiIDEgMwojIDM0ICIvdXNyL2xv
Y2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2Jp
dHMvc3RsX21hcC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgMzUg
Ii91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk
ZS9nKysvYml0cy9zdGxfbWFwLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSA9IGxlc3M8X0tleT4sCiAgICAgICAg
ICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4gPgpjbGFz
cyBtYXAKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKcHVibGljOgoKICB0eXBlZGVmIF9LZXkg
a2V5X3R5cGU7CiAgdHlwZWRlZiBfVHAgZGF0YV90eXBlOwogIHR5cGVkZWYgX1RwIG1hcHBlZF90
eXBlOwogIHR5cGVkZWYgcGFpcjxjb25zdCBfS2V5LCBfVHA+IHZhbHVlX3R5cGU7CiAgdHlwZWRl
ZiBfQ29tcGFyZSBrZXlfY29tcGFyZTsKCiAgY2xhc3MgdmFsdWVfY29tcGFyZQogICAgOiBwdWJs
aWMgYmluYXJ5X2Z1bmN0aW9uPHZhbHVlX3R5cGUsIHZhbHVlX3R5cGUsIGJvb2w+IHsKICBmcmll
bmQgY2xhc3MgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz47CiAgcHJvdGVjdGVkIDoKICAg
IF9Db21wYXJlIGNvbXA7CiAgICB2YWx1ZV9jb21wYXJlKF9Db21wYXJlIF9fYykgOiBjb21wKF9f
Yykge30KICBwdWJsaWM6CiAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgdmFsdWVfdHlwZSYgX194
LCBjb25zdCB2YWx1ZV90eXBlJiBfX3kpIGNvbnN0IHsKICAgICAgcmV0dXJuIGNvbXAoX194LmZp
cnN0LCBfX3kuZmlyc3QpOwogICAgfQogIH07Cgpwcml2YXRlOgogIHR5cGVkZWYgX1JiX3RyZWU8
a2V5X3R5cGUsIHZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICBfU2VsZWN0MXN0PHZhbHVl
X3R5cGU+LCBrZXlfY29tcGFyZSwgX0FsbG9jPiBfUmVwX3R5cGU7CiAgX1JlcF90eXBlIF9NX3Q7
CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cG9pbnRlciBwb2ludGVyOwog
IHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7
CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7
CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yIGl0ZXJhdG9yOwogIHR5cGVk
ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKICB0
eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cmV2ZXJzZV9pdGVyYXRvciByZXZlcnNlX2l0ZXJh
dG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9y
IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnNp
emVfdHlwZSBzaXplX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmRpZmZlcmVu
Y2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmFs
bG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKCgogIG1hcCgpIDogX01fdChfQ29tcGFyZSgp
LCBhbGxvY2F0b3JfdHlwZSgpKSB7fQogIGV4cGxpY2l0IG1hcChjb25zdCBfQ29tcGFyZSYgX19j
b21wLAogICAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9y
X3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkge30KCiAgdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXJhdG9yPgogIG1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv
ciBfX2xhc3QpCiAgICA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsg
X01fdC5pbnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXJhdG9yPgogIG1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy
YXRvciBfX2xhc3QsIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgIGNvbnN0IGFsbG9jYXRv
cl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV90KF9fY29tcCwgX19hKSB7
IF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOyB9CiAgbWFwKGNvbnN0IG1hcDxf
S2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIDogX01fdChfX3guX01fdCkge30KCiAgbWFw
PF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mCiAgb3BlcmF0b3I9KGNvbnN0IG1hcDxfS2V5LCBf
VHAsIF9Db21wYXJlLCBfQWxsb2M+JiBfX3gpCiAgewogICAgX01fdCA9IF9feC5fTV90OwogICAg
cmV0dXJuICp0aGlzOwogIH0KCgoKICBrZXlfY29tcGFyZSBrZXlfY29tcCgpIGNvbnN0IHsgcmV0
dXJuIF9NX3Qua2V5X2NvbXAoKTsgfQogIHZhbHVlX2NvbXBhcmUgdmFsdWVfY29tcCgpIGNvbnN0
IHsgcmV0dXJuIHZhbHVlX2NvbXBhcmUoX01fdC5rZXlfY29tcCgpKTsgfQogIGFsbG9jYXRvcl90
eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV90LmdldF9hbGxvY2F0b3IoKTsg
fQoKICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQogIGNvbnN0X2l0
ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CiAgaXRlcmF0b3Ig
ZW5kKCkgeyByZXR1cm4gX01fdC5lbmQoKTsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0
IHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIHsgcmV0
dXJuIF9NX3QucmJlZ2luKCk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNv
bnN0IHsgcmV0dXJuIF9NX3QucmJlZ2luKCk7IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7
IHJldHVybiBfTV90LnJlbmQoKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNv
bnN0IHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJu
IF9NX3QuZW1wdHkoKTsgfQogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5z
aXplKCk7IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfTV90Lm1heF9z
aXplKCk7IH0KICBfVHAmIG9wZXJhdG9yW10oY29uc3Qga2V5X3R5cGUmIF9faykgewogICAgaXRl
cmF0b3IgX19pID0gbG93ZXJfYm91bmQoX19rKTsKCiAgICBpZiAoX19pID09IGVuZCgpIHx8IGtl
eV9jb21wKCkoX19rLCAoKl9faSkuZmlyc3QpKQogICAgICBfX2kgPSBpbnNlcnQoX19pLCB2YWx1
ZV90eXBlKF9faywgX1RwKCkpKTsKICAgIHJldHVybiAoKl9faSkuc2Vjb25kOwogIH0KICB2b2lk
IHN3YXAobWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCkgeyBfTV90LnN3YXAoX194
Ll9NX3QpOyB9CgoKCiAgcGFpcjxpdGVyYXRvcixib29sPiBpbnNlcnQoY29uc3QgdmFsdWVfdHlw
ZSYgX194KQogICAgeyByZXR1cm4gX01fdC5pbnNlcnRfdW5pcXVlKF9feCk7IH0KICBpdGVyYXRv
ciBpbnNlcnQoaXRlcmF0b3IgcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICAgIHsg
cmV0dXJuIF9NX3QuaW5zZXJ0X3VuaXF1ZShwb3NpdGlvbiwgX194KTsgfQogIHRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0
LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0
LCBfX2xhc3QpOwogIH0KCiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7IF9NX3Qu
ZXJhc2UoX19wb3NpdGlvbik7IH0KICBzaXplX3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9f
eCkgeyByZXR1cm4gX01fdC5lcmFzZShfX3gpOyB9CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2Zp
cnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICB7IF9NX3QuZXJhc2UoX19maXJzdCwgX19sYXN0KTsg
fQogIHZvaWQgY2xlYXIoKSB7IF9NX3QuY2xlYXIoKTsgfQoKCgogIGl0ZXJhdG9yIGZpbmQoY29u
c3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KICBjb25zdF9pdGVy
YXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZmluZChf
X3gpOyB9CiAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAg
IHJldHVybiBfTV90LmZpbmQoX194KSA9PSBfTV90LmVuZCgpID8gMCA6IDE7CiAgfQogIGl0ZXJh
dG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHtyZXR1cm4gX01fdC5sb3dlcl9i
b3VuZChfX3gpOyB9CiAgY29uc3RfaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUm
IF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsKICB9CiAgaXRl
cmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkge3JldHVybiBfTV90LnVwcGVy
X2JvdW5kKF9feCk7IH0KICBjb25zdF9pdGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlw
ZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOwogIH0KCiAg
cGFpcjxpdGVyYXRvcixpdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkg
ewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiAgcGFpcjxjb25zdF9pdGVy
YXRvcixjb25zdF9pdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29u
c3QgewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CgogIHRlbXBsYXRlIDxj
bGFzcyBfSzEsIGNsYXNzIF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wg
b3BlcmF0b3I9PSAoY29uc3QgbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+Jik7CiAgdGVtcGxhdGUg
PGNsYXNzIF9LMSwgY2xhc3MgX1QxLCBjbGFzcyBfQzEsIGNsYXNzIF9BMT4KICBmcmllbmQgYm9v
bCBvcGVyYXRvcjwgKGNvbnN0IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+JiwKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+Jik7Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgpp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+
JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJl
LF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA9PSBfX3kuX01fdDsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4K
aW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+
JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUs
X0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV90IDwgX195Ll9NX3Q7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+Cmlu
bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4m
IF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUs
X0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBi
b29sIG9wZXJhdG9yPihjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAog
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4m
IF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFz
cyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9y
PD0oY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAg
cmV0dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwg
Y2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25z
dCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4g
IShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBf
Q29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCBzd2FwKG1hcDxfS2V5LF9UcCxfQ29t
cGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgbWFwPF9LZXksX1RwLF9Db21wYXJl
LF9BbGxvYz4mIF9feSkgewogIF9feC5zd2FwKF9feSk7Cn0KCn0KIyAzNiAiL3Vzci9sb2NhbC9n
Y2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0
ZF9tYXAuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9tdWx0aW1hcC5oIiAxIDMKIyAzNCAiL3Vz
ci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2cr
Ky9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL2NvbmNlcHRfY2hlY2suaCIg
MSAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjAvaW5jbHVkZS9nKysvYml0cy9zdGxfbXVsdGltYXAuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsK
CgoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9Db21w
YXJlID0gbGVzczxfS2V5PiwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxwYWly
PGNvbnN0IF9LZXksIF9UcD4gPiA+CmNsYXNzIG11bHRpbWFwOwoKdGVtcGxhdGUgPGNsYXNzIF9L
ZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gs
CiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUs
X0FsbG9jPiYgX195KTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9D
b21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBtdWx0aW1h
cDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpOwoKdGVtcGxhdGUg
PGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KY2xh
c3MgbXVsdGltYXAKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKcHVibGljOgoKCgogIHR5cGVk
ZWYgX0tleSBrZXlfdHlwZTsKICB0eXBlZGVmIF9UcCBkYXRhX3R5cGU7CiAgdHlwZWRlZiBfVHAg
bWFwcGVkX3R5cGU7CiAgdHlwZWRlZiBwYWlyPGNvbnN0IF9LZXksIF9UcD4gdmFsdWVfdHlwZTsK
ICB0eXBlZGVmIF9Db21wYXJlIGtleV9jb21wYXJlOwoKICBjbGFzcyB2YWx1ZV9jb21wYXJlIDog
cHVibGljIGJpbmFyeV9mdW5jdGlvbjx2YWx1ZV90eXBlLCB2YWx1ZV90eXBlLCBib29sPiB7CiAg
ZnJpZW5kIGNsYXNzIG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz47CiAgcHJvdGVj
dGVkOgogICAgX0NvbXBhcmUgY29tcDsKICAgIHZhbHVlX2NvbXBhcmUoX0NvbXBhcmUgX19jKSA6
IGNvbXAoX19jKSB7fQogIHB1YmxpYzoKICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCB2YWx1ZV90
eXBlJiBfX3gsIGNvbnN0IHZhbHVlX3R5cGUmIF9feSkgY29uc3QgewogICAgICByZXR1cm4gY29t
cChfX3guZmlyc3QsIF9feS5maXJzdCk7CiAgICB9CiAgfTsKCnByaXZhdGU6CiAgdHlwZWRlZiBf
UmJfdHJlZTxrZXlfdHlwZSwgdmFsdWVfdHlwZSwKICAgICAgICAgICAgICAgICAgX1NlbGVjdDFz
dDx2YWx1ZV90eXBlPiwga2V5X2NvbXBhcmUsIF9BbGxvYz4gX1JlcF90eXBlOwogIF9SZXBfdHlw
ZSBfTV90OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnBvaW50ZXIgcG9p
bnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9w
b2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNl
OwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVm
ZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjppdGVyYXRvciBpdGVyYXRvcjsK
ICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0
b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJz
ZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9p
dGVyYXRvciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90
eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpk
aWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90
eXBlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCgoKICBtdWx0aW1hcCgpIDogX01f
dChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7IH0KICBleHBsaWNpdCBtdWx0aW1hcChj
b25zdCBfQ29tcGFyZSYgX19jb21wLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRv
cl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV90KF9fY29tcCwgX19hKSB7
IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIG11bHRpbWFwKF9JbnB1dEl0
ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgIDogX01fdChfQ29tcGFy
ZSgpLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgeyBfTV90Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBf
X2xhc3QpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBtdWx0aW1hcChf
SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg
Y29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYg
X19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkgeyBfTV90Lmlu
c2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9CiAgbXVsdGltYXAoY29uc3QgbXVsdGltYXA8
X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSA6IF9NX3QoX194Ll9NX3QpIHsgfQoKICBt
dWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JgogIG9wZXJhdG9yPShjb25zdCBtdWx0
aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsKICAgIF9NX3QgPSBfX3guX01f
dDsKICAgIHJldHVybiAqdGhpczsKICB9CgoKCiAga2V5X2NvbXBhcmUga2V5X2NvbXAoKSBjb25z
dCB7IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0KICB2YWx1ZV9jb21wYXJlIHZhbHVlX2NvbXAo
KSBjb25zdCB7IHJldHVybiB2YWx1ZV9jb21wYXJlKF9NX3Qua2V5X2NvbXAoKSk7IH0KICBhbGxv
Y2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fdC5nZXRfYWxsb2Nh
dG9yKCk7IH0KCiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KICBj
b25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQogIGl0
ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KICBjb25zdF9pdGVyYXRvciBlbmQo
KSBjb25zdCB7IHJldHVybiBfTV90LmVuZCgpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4o
KSB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVn
aW4oKSBjb25zdCB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciBy
ZW5kKCkgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJl
bmQoKSBjb25zdCB7IHJldHVybiBfTV90LnJlbmQoKTsgfQogIGJvb2wgZW1wdHkoKSBjb25zdCB7
IHJldHVybiBfTV90LmVtcHR5KCk7IH0KICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IF9NX3Quc2l6ZSgpOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01f
dC5tYXhfc2l6ZSgpOyB9CiAgdm9pZCBzd2FwKG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B
bGxvYz4mIF9feCkgeyBfTV90LnN3YXAoX194Ll9NX3QpOyB9CgoKCiAgaXRlcmF0b3IgaW5zZXJ0
KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5pbnNlcnRfZXF1YWwoX194KTsg
fQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBl
JiBfX3gpIHsKICAgIHJldHVybiBfTV90Lmluc2VydF9lcXVhbChfX3Bvc2l0aW9uLCBfX3gpOwog
IH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnQoX0lucHV0
SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICBfTV90Lmluc2Vy
dF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOwogIH0KICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fcG9z
aXRpb24pIHsgX01fdC5lcmFzZShfX3Bvc2l0aW9uKTsgfQogIHNpemVfdHlwZSBlcmFzZShjb25z
dCBrZXlfdHlwZSYgX194KSB7IHJldHVybiBfTV90LmVyYXNlKF9feCk7IH0KICB2b2lkIGVyYXNl
KGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAgIHsgX01fdC5lcmFzZShfX2Zp
cnN0LCBfX2xhc3QpOyB9CiAgdm9pZCBjbGVhcigpIHsgX01fdC5jbGVhcigpOyB9CgoKCiAgaXRl
cmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSB7IHJldHVybiBfTV90LmZpbmQoX194KTsg
fQogIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgeyByZXR1
cm4gX01fdC5maW5kKF9feCk7IH0KICBzaXplX3R5cGUgY291bnQoY29uc3Qga2V5X3R5cGUmIF9f
eCkgY29uc3QgeyByZXR1cm4gX01fdC5jb3VudChfX3gpOyB9CiAgaXRlcmF0b3IgbG93ZXJfYm91
bmQoY29uc3Qga2V5X3R5cGUmIF9feCkge3JldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7IH0K
ICBjb25zdF9pdGVyYXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7
CiAgICByZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOwogIH0KICBpdGVyYXRvciB1cHBlcl9i
b3VuZChjb25zdCBrZXlfdHlwZSYgX194KSB7cmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsg
fQogIGNvbnN0X2l0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0
IHsKICAgIHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7CiAgfQogICBwYWlyPGl0ZXJhdG9y
LGl0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSB7CiAgICByZXR1cm4g
X01fdC5lcXVhbF9yYW5nZShfX3gpOwogIH0KICBwYWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0
ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1
cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9LMSwgY2xh
c3MgX1QxLCBjbGFzcyBfQzEsIGNsYXNzIF9BMT4KICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IChj
b25zdCBtdWx0aW1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+JiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBtdWx0aW1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+Jik7CiAgdGVtcGxhdGUgPGNs
YXNzIF9LMSwgY2xhc3MgX1QxLCBjbGFzcyBfQzEsIGNsYXNzIF9BMT4KICBmcmllbmQgYm9vbCBv
cGVyYXRvcjwgKGNvbnN0IG11bHRpbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mLAogICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOwp9OwoK
dGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9B
bGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29t
cGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8
X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV90ID09IF9f
eS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFy
ZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgbXVsdGltYXA8X0tl
eSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
bXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5f
TV90IDwgX195Ll9NX3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNz
IF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgbXVs
dGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJl
dHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBj
bGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3Qg
bXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAg
cmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xh
c3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBt
dWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAg
cmV0dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwg
Y2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25z
dCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7
CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9U
cCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcChtdWx0aW1h
cDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgbXVsdGlt
YXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgX194LnN3YXAoX195KTsKfQoK
fQojIDM3ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w
L2luY2x1ZGUvZysrL2JpdHMvc3RkX21hcC5oIiAyIDMKIyAzICIvdXNyL2xvY2FsL2djYzMvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL21hcCIgMiAzCiMgNjgg
IlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVEb2N1bWVudC5ocHAiIDIKCgoKIyAxICJY
YWxhbkRPTS9YYWxhbkRvY3VtZW50LmhwcCIgMQojIDYyICJYYWxhbkRPTS9YYWxhbkRvY3VtZW50
LmhwcCIKIyAxICJYYWxhbkRPTS9YYWxhbkRPTURlZmluaXRpb25zLmhwcCIgMQojIDYzICJYYWxh
bkRPTS9YYWxhbkRvY3VtZW50LmhwcCIgMgojIDEgIlhhbGFuRE9NL1hhbGFuTm9kZS5ocHAiIDEK
IyA2NCAiWGFsYW5ET00vWGFsYW5Eb2N1bWVudC5ocHAiIDIKCgoKY2xhc3MgWGFsYW5BdHRyOwpj
bGFzcyBYYWxhbkNEQVRBU2VjdGlvbjsKY2xhc3MgWGFsYW5Db21tZW50OwpjbGFzcyBYYWxhbkRv
Y3VtZW50RnJhZ21lbnQ7CmNsYXNzIFhhbGFuRG9jdW1lbnRUeXBlOwpjbGFzcyBYYWxhbkRPTUlt
cGxlbWVudGF0aW9uOwpjbGFzcyBYYWxhbkVsZW1lbnQ7CmNsYXNzIFhhbGFuRW50aXR5UmVmZXJl
bmNlOwpjbGFzcyBYYWxhblByb2Nlc3NpbmdJbnN0cnVjdGlvbjsKY2xhc3MgWGFsYW5UZXh0Owoj
IDg4ICJYYWxhbkRPTS9YYWxhbkRvY3VtZW50LmhwcCIKY2xhc3MgWGFsYW5Eb2N1bWVudCA6IHB1
YmxpYyBYYWxhbk5vZGUKewpwdWJsaWM6CgogICAgICAgIFhhbGFuRG9jdW1lbnQoKTsKCiAgICAg
ICAgdmlydHVhbAogICAgICAgIH5YYWxhbkRvY3VtZW50KCk7CgoKCiAgICAgICAgdmlydHVhbCBj
b25zdCBYYWxhbkRPTVN0cmluZyYKICAgICAgICBnZXROb2RlTmFtZSgpIGNvbnN0ID0gMDsKCgoK
CiAgICAgICAgdmlydHVhbCBjb25zdCBYYWxhbkRPTVN0cmluZyYKICAgICAgICBnZXROb2RlVmFs
dWUoKSBjb25zdCA9IDA7CgoKCgogICAgICAgIHZpcnR1YWwgTm9kZVR5cGUKICAgICAgICBnZXRO
b2RlVHlwZSgpIGNvbnN0ID0gMDsKIyAxMjMgIlhhbGFuRE9NL1hhbGFuRG9jdW1lbnQuaHBwIgog
ICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIGdldFBhcmVudE5vZGUoKSBjb25zdCA9
IDA7CiMgMTM5ICJYYWxhbkRPTS9YYWxhbkRvY3VtZW50LmhwcCIKICAgICAgICB2aXJ0dWFsIGNv
bnN0IFhhbGFuTm9kZUxpc3QqCiAgICAgICAgZ2V0Q2hpbGROb2RlcygpIGNvbnN0ID0gMDsKCgoK
CgoKICAgICAgICB2aXJ0dWFsIFhhbGFuTm9kZSoKICAgICAgICBnZXRGaXJzdENoaWxkKCkgY29u
c3QgPSAwOwoKCgoKCgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIGdldExhc3RD
aGlsZCgpIGNvbnN0ID0gMDsKCgoKCgoKICAgICAgICB2aXJ0dWFsIFhhbGFuTm9kZSoKICAgICAg
ICBnZXRQcmV2aW91c1NpYmxpbmcoKSBjb25zdCA9IDA7CgoKCgoKCiAgICAgICAgdmlydHVhbCBY
YWxhbk5vZGUqCiAgICAgICAgZ2V0TmV4dFNpYmxpbmcoKSBjb25zdCA9IDA7CgoKCgoKICAgICAg
ICB2aXJ0dWFsIGNvbnN0IFhhbGFuTmFtZWROb2RlTWFwKgogICAgICAgIGdldEF0dHJpYnV0ZXMo
KSBjb25zdCA9IDA7CiMgMTkwICJYYWxhbkRPTS9YYWxhbkRvY3VtZW50LmhwcCIKICAgICAgICB2
aXJ0dWFsIFhhbGFuRG9jdW1lbnQqCiAgICAgICAgZ2V0T3duZXJEb2N1bWVudCgpIGNvbnN0ID0g
MDsKIyAyMTggIlhhbGFuRE9NL1hhbGFuRG9jdW1lbnQuaHBwIgogICAgICAgIHZpcnR1YWwgWGFs
YW5Eb2N1bWVudCoKCiAgICAgICAgY2xvbmVOb2RlKGJvb2wgZGVlcCkgY29uc3QgPSAwOwojIDI0
MiAiWGFsYW5ET00vWGFsYW5Eb2N1bWVudC5ocHAiCiAgICAgICAgdmlydHVhbCBYYWxhbk5vZGUq
CiAgICAgICAgaW5zZXJ0QmVmb3JlKAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhbk5vZGUq
IG5ld0NoaWxkLAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhbk5vZGUqIHJlZkNoaWxkKSA9
IDA7CiMgMjYwICJYYWxhbkRPTS9YYWxhbkRvY3VtZW50LmhwcCIKICAgICAgICB2aXJ0dWFsIFhh
bGFuTm9kZSoKICAgICAgICByZXBsYWNlQ2hpbGQoCiAgICAgICAgICAgICAgICAgICAgICAgIFhh
bGFuTm9kZSogbmV3Q2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuTm9kZSogb2xk
Q2hpbGQpID0gMDsKIyAyNzIgIlhhbGFuRE9NL1hhbGFuRG9jdW1lbnQuaHBwIgogICAgICAgIHZp
cnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIHJlbW92ZUNoaWxkKFhhbGFuTm9kZSogb2xkQ2hpbGQp
ID0gMDsKIyAyODYgIlhhbGFuRE9NL1hhbGFuRG9jdW1lbnQuaHBwIgogICAgICAgIHZpcnR1YWwg
WGFsYW5Ob2RlKgogICAgICAgIGFwcGVuZENoaWxkKFhhbGFuTm9kZSogbmV3Q2hpbGQpID0gMDsK
IyAzMDAgIlhhbGFuRE9NL1hhbGFuRG9jdW1lbnQuaHBwIgogICAgICAgIHZpcnR1YWwgYm9vbAog
ICAgICAgIGhhc0NoaWxkTm9kZXMoKSBjb25zdCA9IDA7CiMgMzIyICJYYWxhbkRPTS9YYWxhbkRv
Y3VtZW50LmhwcCIKICAgICAgICB2aXJ0dWFsIHZvaWQKICAgICAgICBzZXROb2RlVmFsdWUoY29u
c3QgWGFsYW5ET01TdHJpbmcmIG5vZGVWYWx1ZSkgPSAwOwojIDM0NSAiWGFsYW5ET00vWGFsYW5E
b2N1bWVudC5ocHAiCiAgICAgICAgdmlydHVhbCB2b2lkCiAgICAgICAgbm9ybWFsaXplKCkgPSAw
OwojIDM2MSAiWGFsYW5ET00vWGFsYW5Eb2N1bWVudC5ocHAiCiAgICAgICAgdmlydHVhbCBib29s
CiAgICAgICAgc3VwcG9ydHMoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9N
U3RyaW5nJiBmZWF0dXJlLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0
cmluZyYgdmVyc2lvbikgY29uc3QgPSAwOwojIDM3OSAiWGFsYW5ET00vWGFsYW5Eb2N1bWVudC5o
cHAiCiAgICAgICAgdmlydHVhbCBjb25zdCBYYWxhbkRPTVN0cmluZyYKICAgICAgICBnZXROYW1l
c3BhY2VVUkkoKSBjb25zdCA9IDA7CgoKCgoKICAgICAgICB2aXJ0dWFsIGNvbnN0IFhhbGFuRE9N
U3RyaW5nJgogICAgICAgIGdldFByZWZpeCgpIGNvbnN0ID0gMDsKIyAzOTYgIlhhbGFuRE9NL1hh
bGFuRG9jdW1lbnQuaHBwIgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5ET01TdHJpbmcmCiAg
ICAgICAgZ2V0TG9jYWxOYW1lKCkgY29uc3QgPSAwOwojIDQyOCAiWGFsYW5ET00vWGFsYW5Eb2N1
bWVudC5ocHAiCiAgICAgICAgdmlydHVhbCB2b2lkCiAgICAgICAgc2V0UHJlZml4KGNvbnN0IFhh
bGFuRE9NU3RyaW5nJiBwcmVmaXgpID0gMDsKCgoKCgoKICAgICAgICB2aXJ0dWFsIGJvb2wKICAg
ICAgICBpc0luZGV4ZWQoKSBjb25zdCA9IDA7CgoKCgoKCgogICAgICAgIHZpcnR1YWwgdW5zaWdu
ZWQgbG9uZwogICAgICAgIGdldEluZGV4KCkgY29uc3QgPSAwOwojIDQ2MSAiWGFsYW5ET00vWGFs
YW5Eb2N1bWVudC5ocHAiCiAgICB2aXJ0dWFsIFhhbGFuRWxlbWVudCoKICAgICAgICBjcmVhdGVF
bGVtZW50KGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0YWdOYW1lKSA9IDA7CgoKCgoKCgogICAgICAg
IHZpcnR1YWwgWGFsYW5Eb2N1bWVudEZyYWdtZW50KgogICAgICAgIGNyZWF0ZURvY3VtZW50RnJh
Z21lbnQoKSA9IDA7CiMgNDgwICJYYWxhbkRPTS9YYWxhbkRvY3VtZW50LmhwcCIKICAgIHZpcnR1
YWwgWGFsYW5UZXh0KgogICAgICAgIGNyZWF0ZVRleHROb2RlKGNvbnN0IFhhbGFuRE9NU3RyaW5n
JiBkYXRhKSA9IDA7CiMgNDkwICJYYWxhbkRPTS9YYWxhbkRvY3VtZW50LmhwcCIKICAgIHZpcnR1
YWwgWGFsYW5Db21tZW50KgogICAgICAgIGNyZWF0ZUNvbW1lbnQoY29uc3QgWGFsYW5ET01TdHJp
bmcmIGRhdGEpID0gMDsKIyA1MDIgIlhhbGFuRE9NL1hhbGFuRG9jdW1lbnQuaHBwIgogICAgdmly
dHVhbCBYYWxhbkNEQVRBU2VjdGlvbioKICAgICAgICBjcmVhdGVDREFUQVNlY3Rpb24oY29uc3Qg
WGFsYW5ET01TdHJpbmcmIGRhdGEpID0gMDsKIyA1MTYgIlhhbGFuRE9NL1hhbGFuRG9jdW1lbnQu
aHBwIgogICAgdmlydHVhbCBYYWxhblByb2Nlc3NpbmdJbnN0cnVjdGlvbioKICAgICAgICBjcmVh
dGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhh
bGFuRE9NU3RyaW5nJiB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFu
RE9NU3RyaW5nJiBkYXRhKSA9IDA7CiMgNTM3ICJYYWxhbkRPTS9YYWxhbkRvY3VtZW50LmhwcCIK
ICAgIHZpcnR1YWwgWGFsYW5BdHRyKgogICAgICAgIGNyZWF0ZUF0dHJpYnV0ZShjb25zdCBYYWxh
bkRPTVN0cmluZyYgbmFtZSkgPSAwOwojIDU1MCAiWGFsYW5ET00vWGFsYW5Eb2N1bWVudC5ocHAi
CiAgICB2aXJ0dWFsIFhhbGFuRW50aXR5UmVmZXJlbmNlKgogICAgICAgIGNyZWF0ZUVudGl0eVJl
ZmVyZW5jZShjb25zdCBYYWxhbkRPTVN0cmluZyAmbmFtZSkgPSAwOwojIDU2NSAiWGFsYW5ET00v
WGFsYW5Eb2N1bWVudC5ocHAiCiAgICB2aXJ0dWFsIFhhbGFuRG9jdW1lbnRUeXBlKgogICAgICAg
IGdldERvY3R5cGUoKSBjb25zdCA9IDA7CgoKCgoKICAgIHZpcnR1YWwgWGFsYW5ET01JbXBsZW1l
bnRhdGlvbioKICAgICAgICBnZXRJbXBsZW1lbnRhdGlvbigpIGNvbnN0ID0gMDsKCgoKCgogICAg
dmlydHVhbCBYYWxhbkVsZW1lbnQqCiAgICAgICAgZ2V0RG9jdW1lbnRFbGVtZW50KCkgY29uc3Qg
PSAwOwojIDU5NiAiWGFsYW5ET00vWGFsYW5Eb2N1bWVudC5ocHAiCiAgICB2aXJ0dWFsIFhhbGFu
Tm9kZUxpc3QqCiAgICAgICAgZ2V0RWxlbWVudHNCeVRhZ05hbWUoY29uc3QgWGFsYW5ET01TdHJp
bmcmIHRhZ25hbWUpIGNvbnN0ID0gMDsKIyA2MjUgIlhhbGFuRE9NL1hhbGFuRG9jdW1lbnQuaHBw
IgogICAgdmlydHVhbCBYYWxhbk5vZGUqCiAgICAgICAgaW1wb3J0Tm9kZSgKICAgICAgICAgICAg
ICAgICAgICAgICAgWGFsYW5Ob2RlKiBpbXBvcnRlZE5vZGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgZGVlcCkgPSAwOwojIDY1MiAiWGFsYW5ET00vWGFsYW5Eb2N1bWVudC5ocHAiCiAg
ICB2aXJ0dWFsIFhhbGFuRWxlbWVudCoKICAgICAgICBjcmVhdGVFbGVtZW50TlMoCiAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiBuYW1lc3BhY2VVUkksCiAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiBxdWFsaWZpZWROYW1lKSA9
IDA7CiMgNjg1ICJYYWxhbkRPTS9YYWxhbkRvY3VtZW50LmhwcCIKICAgIHZpcnR1YWwgWGFsYW5B
dHRyKgogICAgICAgIGNyZWF0ZUF0dHJpYnV0ZU5TKAogICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBYYWxhbkRPTVN0cmluZyYgbmFtZXNwYWNlVVJJLAogICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBYYWxhbkRPTVN0cmluZyYgcXVhbGlmaWVkTmFtZSkgPSAwOwojIDcwNiAiWGFsYW5E
T00vWGFsYW5Eb2N1bWVudC5ocHAiCiAgICB2aXJ0dWFsIFhhbGFuTm9kZUxpc3QqCiAgICAgICAg
Z2V0RWxlbWVudHNCeVRhZ05hbWVOUygKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFs
YW5ET01TdHJpbmcmIG5hbWVzcGFjZVVSSSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
WGFsYW5ET01TdHJpbmcmIGxvY2FsTmFtZSkgY29uc3QgPSAwOwojIDcyNiAiWGFsYW5ET00vWGFs
YW5Eb2N1bWVudC5ocHAiCiAgICB2aXJ0dWFsIFhhbGFuRWxlbWVudCoKICAgICAgICBnZXRFbGVt
ZW50QnlJZChjb25zdCBYYWxhbkRPTVN0cmluZyYgZWxlbWVudElkKSBjb25zdCA9IDA7CgoKCgoK
cHJvdGVjdGVkOgoKICAgICAgICBYYWxhbkRvY3VtZW50KGNvbnN0IFhhbGFuRG9jdW1lbnQmIHRo
ZVNvdXJjZSk7CgogICAgICAgIFhhbGFuRG9jdW1lbnQmCiAgICAgICAgb3BlcmF0b3I9KGNvbnN0
IFhhbGFuRG9jdW1lbnQmIHRoZVNvdXJjZSk7CgogICAgICAgIGJvb2wKICAgICAgICBvcGVyYXRv
cj09KGNvbnN0IFhhbGFuRG9jdW1lbnQmIHRoZVJIUykgY29uc3Q7Cgpwcml2YXRlOgp9OwojIDcy
ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRG9jdW1lbnQuaHBwIiAyCgoKCiMgMSAi
UGxhdGZvcm1TdXBwb3J0L1NUTEhlbHBlci5ocHAiIDEKIyA2MyAiUGxhdGZvcm1TdXBwb3J0L1NU
TEhlbHBlci5ocHAiCiMgMSAiUGxhdGZvcm1TdXBwb3J0L1BsYXRmb3JtU3VwcG9ydERlZmluaXRp
b25zLmhwcCIgMQojIDY0ICJQbGF0Zm9ybVN1cHBvcnQvU1RMSGVscGVyLmhwcCIgMgoKCgojIDEg
Ii91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk
ZS9nKysvYWxnb3JpdGhtIiAxIDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9hbGdvcml0aG0uaCIgMSAz
CiMgMzEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAv
aW5jbHVkZS9nKysvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9nY2Mz
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9h
bGdvYmFzZS5oIiAxIDMKIyAzMyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9hbGdvcml0aG0uaCIgMiAzCiMgMSAi
L3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl
L2crKy9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjMy9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfYWxnb3Jp
dGhtLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAxIDMKIyAzNSAi
L3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl
L2crKy9iaXRzL3N0ZF9hbGdvcml0aG0uaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF90ZW1wYnVm
LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX3RlbXBidWYuaCIgMwpuYW1lc3BhY2Ugc3RkCnsK
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnBhaXI8X1RwKiwgcHRyZGlmZl90PgpfX2dldF90ZW1wb3Jh
cnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xlbiwgX1RwKikKewogIGlmIChfX2xlbiA+IHB0cmRpZmZf
dCgyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCkpKQogICAgX19sZW4gPSAyMTQ3NDgzNjQ3IC8gc2l6
ZW9mKF9UcCk7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9UcCogX190bXAgPSAoX1RwKikg
bWFsbG9jKChzaXplX3QpX19sZW4gKiBzaXplb2YoX1RwKSk7CiAgICBpZiAoX190bXAgIT0gMCkK
ICAgICAgcmV0dXJuIHBhaXI8X1RwKiwgcHRyZGlmZl90PihfX3RtcCwgX19sZW4pOwogICAgX19s
ZW4gLz0gMjsKICB9CgogIHJldHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4oKF9UcCopMCwgMCk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBwYWlyPF9UcCosIHB0cmRpZmZfdD4gZ2V0
X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuKSB7CiAgcmV0dXJuIF9fZ2V0X3RlbXBv
cmFyeV9idWZmZXIoX19sZW4sIChfVHAqKSAwKTsKfQoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgppbmxpbmUgcGFpcjxfVHAqLCBwdHJkaWZmX3Q+IGdldF90ZW1wb3JhcnlfYnVmZmVyKHB0cmRp
ZmZfdCBfX2xlbiwgX1RwKikgewogIHJldHVybiBfX2dldF90ZW1wb3JhcnlfYnVmZmVyKF9fbGVu
LCAoX1RwKikgMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnZvaWQgcmV0dXJuX3RlbXBvcmFy
eV9idWZmZXIoX1RwKiBfX3ApIHsKICBmcmVlKF9fcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9y
d2FyZEl0ZXJhdG9yLCBjbGFzcyBfVHA+CmNsYXNzIF9UZW1wb3JhcnlfYnVmZmVyIHsKcHJpdmF0
ZToKICBwdHJkaWZmX3QgX01fb3JpZ2luYWxfbGVuOwogIHB0cmRpZmZfdCBfTV9sZW47CiAgX1Rw
KiBfTV9idWZmZXI7CgogIHZvaWQgX01fYWxsb2NhdGVfYnVmZmVyKCkgewogICAgX01fb3JpZ2lu
YWxfbGVuID0gX01fbGVuOwogICAgX01fYnVmZmVyID0gMDsKCiAgICBpZiAoX01fbGVuID4gKHB0
cmRpZmZfdCkoMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApKSkKICAgICAgX01fbGVuID0gMjE0NzQ4
MzY0NyAvIHNpemVvZihfVHApOwoKICAgIHdoaWxlIChfTV9sZW4gPiAwKSB7CiAgICAgIF9NX2J1
ZmZlciA9IChfVHAqKSBtYWxsb2MoX01fbGVuICogc2l6ZW9mKF9UcCkpOwogICAgICBpZiAoX01f
YnVmZmVyKQogICAgICAgIGJyZWFrOwogICAgICBfTV9sZW4gLz0gMjsKICAgIH0KICB9CgogIHZv
aWQgX01faW5pdGlhbGl6ZV9idWZmZXIoY29uc3QgX1RwJiwgX190cnVlX3R5cGUpIHt9CiAgdm9p
ZCBfTV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAmIHZhbCwgX19mYWxzZV90eXBlKSB7CiAg
ICB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9idWZmZXIsIF9NX2xlbiwgdmFsKTsKICB9CgpwdWJs
aWM6CiAgcHRyZGlmZl90IHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9sZW47IH0KICBwdHJkaWZm
X3QgcmVxdWVzdGVkX3NpemUoKSBjb25zdCB7IHJldHVybiBfTV9vcmlnaW5hbF9sZW47IH0KICBf
VHAqIGJlZ2luKCkgeyByZXR1cm4gX01fYnVmZmVyOyB9CiAgX1RwKiBlbmQoKSB7IHJldHVybiBf
TV9idWZmZXIgKyBfTV9sZW47IH0KCiAgX1RlbXBvcmFyeV9idWZmZXIoX0ZvcndhcmRJdGVyYXRv
ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkgewoKICAgIHR5cGVkZWYgdHlwZW5h
bWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yCiAg
ICAgICAgICAgIF9Ucml2aWFsOwoKICAgIHRyeSB7CiAgICAgIF9NX2xlbiA9IDA7CiAgICAgIGRp
c3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX01fbGVuKTsKICAgICAgX01fYWxsb2NhdGVfYnVmZmVy
KCk7CiAgICAgIGlmIChfTV9sZW4gPiAwKQogICAgICAgIF9NX2luaXRpYWxpemVfYnVmZmVyKCpf
X2ZpcnN0LCBfVHJpdmlhbCgpKTsKICAgIH0KICAgIGNhdGNoKC4uLikgeyBmcmVlKF9NX2J1ZmZl
cik7IF9NX2J1ZmZlciA9IDA7IF9NX2xlbiA9IDA7IHRocm93OyB9OwogIH0KCiAgfl9UZW1wb3Jh
cnlfYnVmZmVyKCkgewogICAgZGVzdHJveShfTV9idWZmZXIsIF9NX2J1ZmZlciArIF9NX2xlbik7
CiAgICBmcmVlKF9NX2J1ZmZlcik7CiAgfQoKcHJpdmF0ZToKCiAgX1RlbXBvcmFyeV9idWZmZXIo
Y29uc3QgX1RlbXBvcmFyeV9idWZmZXImKSB7fQogIHZvaWQgb3BlcmF0b3I9KGNvbnN0IF9UZW1w
b3JhcnlfYnVmZmVyJikge30KfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3Is
CiAgICAgICAgICBjbGFzcyBfVHAKICAgICAgICAgICAgICAgICAgICA9IHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICA+CnN0cnVj
dCB0ZW1wb3JhcnlfYnVmZmVyIDogcHVibGljIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRl
cmF0b3IsIF9UcD4KewogIHRlbXBvcmFyeV9idWZmZXIoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKICAgIDogX1RlbXBvcmFyeV9idWZmZXI8X0Zvcndh
cmRJdGVyYXRvciwgX1RwPihfX2ZpcnN0LCBfX2xhc3QpIHt9CiAgfnRlbXBvcmFyeV9idWZmZXIo
KSB7fQp9OwoKfQojIDM2ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51
eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2FsZ29yaXRobS5oIiAyIDMKIyAxICIvdXNy
L2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysr
L2JpdHMvc3RsX2FsZ28uaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnby5oIiAzCiMgMSAi
L3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl
L2crKy9iaXRzL3N0bF9oZWFwLmgiIDEgMwojIDMzICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2hlYXAuaCIgMwpu
YW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwg
Y2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+CnZvaWQKX19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwgX0Rp
c3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlKQp7CiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0g
KF9faG9sZUluZGV4IC0gMSkgLyAyOwogIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9wSW5kZXgg
JiYgKihfX2ZpcnN0ICsgX19wYXJlbnQpIDwgX192YWx1ZSkgewogICAgKihfX2ZpcnN0ICsgX19o
b2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19wYXJlbnQpOwogICAgX19ob2xlSW5kZXggPSBfX3Bh
cmVudDsKICAgIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogIH0KICAqKF9fZmly
c3QgKyBfX2hvbGVJbmRleCkgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX19w
dXNoX2hlYXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAg
ICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0Rpc3RhbmNlKiwgX1RwKikKewogIF9f
cHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwgX0Rp
c3RhbmNlKDApLAogICAgICAgICAgICAgIF9UcCgqKF9fbGFzdCAtIDEpKSk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CmlubGluZSB2b2lkCnB1c2hfaGVhcChfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkK
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9f
cHVzaF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9fZGlzdGFu
Y2VfdHlwZShfX2ZpcnN0KSwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHAsCiAg
ICAgICAgICBjbGFzcyBfQ29tcGFyZT4Kdm9pZApfX3B1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRl
cmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICBfRGlzdGFu
Y2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKewogIF9EaXN0YW5j
ZSBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICB3aGlsZSAoX19ob2xlSW5kZXgg
PiBfX3RvcEluZGV4ICYmIF9fY29tcCgqKF9fZmlyc3QgKyBfX3BhcmVudCksIF9fdmFsdWUpKSB7
CiAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3BhcmVudCk7CiAg
ICBfX2hvbGVJbmRleCA9IF9fcGFyZW50OwogICAgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAx
KSAvIDI7CiAgfQogICooX19maXJzdCArIF9faG9sZUluZGV4KSA9IF9fdmFsdWU7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlLAogICAgICAg
ICAgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkCl9fcHVzaF9oZWFwX2F1
eChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCwKICAgICAgICAgICAgICAgIF9E
aXN0YW5jZSosIF9UcCopCnsKICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoKF9fbGFz
dCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0YW5jZSgwKSwKICAgICAgICAgICAgICBfVHAoKihfX2xh
c3QgLSAxKSksIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0
b3IsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZApwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICBf
Q29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBf
X3B1c2hfaGVhcF9hdXgoX19maXJzdCwgX19sYXN0LCBfX2NvbXAsCiAgICAgICAgICAgICAgICAg
IF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFz
cyBfVHA+CnZvaWQKX19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwg
X0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1Rw
IF9fdmFsdWUpCnsKICBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4OwogIF9EaXN0
YW5jZSBfX3NlY29uZENoaWxkID0gMiAqIF9faG9sZUluZGV4ICsgMjsKICB3aGlsZSAoX19zZWNv
bmRDaGlsZCA8IF9fbGVuKSB7CiAgICBpZiAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCkgPCAq
KF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKSkKICAgICAgX19zZWNvbmRDaGlsZC0tOwog
ICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCk7
CiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICBfX3NlY29uZENoaWxkID0gMiAq
IChfX3NlY29uZENoaWxkICsgMSk7CiAgfQogIGlmIChfX3NlY29uZENoaWxkID09IF9fbGVuKSB7
CiAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGls
ZCAtIDEpKTsKICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7CiAgfQogIF9fcHVz
aF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVlKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlz
dGFuY2U+CmlubGluZSB2b2lkCl9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192YWx1ZSwgX0Rpc3RhbmNlKikKewogICpfX3Jlc3Vs
dCA9ICpfX2ZpcnN0OwogIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKDApLCBfRGlz
dGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkCl9fcG9wX2hlYXBfYXV4
KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19s
YXN0LAogICAgICAgICAgICAgICBfVHAqKQp7CiAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3Qg
LSAxLCBfX2xhc3QgLSAxLAogICAgICAgICAgICAgX1RwKCooX19sYXN0IC0gMSkpLCBfX2Rpc3Rh
bmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yPgppbmxpbmUgdm9pZCBwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwK
ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9fcG9wX2hl
YXBfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlLAogICAgICAg
ICAgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZApfX2FkanVzdF9oZWFwKF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAg
ICAgX0Rpc3RhbmNlIF9fbGVuLCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQp7CiAgX0Rp
c3RhbmNlIF9fdG9wSW5kZXggPSBfX2hvbGVJbmRleDsKICBfRGlzdGFuY2UgX19zZWNvbmRDaGls
ZCA9IDIgKiBfX2hvbGVJbmRleCArIDI7CiAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCBfX2xlbikg
ewogICAgaWYgKF9fY29tcCgqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKSwgKihfX2ZpcnN0ICsg
KF9fc2Vjb25kQ2hpbGQgLSAxKSkpKQogICAgICBfX3NlY29uZENoaWxkLS07CiAgICAqKF9fZmly
c3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKTsKICAgIF9faG9s
ZUluZGV4ID0gX19zZWNvbmRDaGlsZDsKICAgIF9fc2Vjb25kQ2hpbGQgPSAyICogKF9fc2Vjb25k
Q2hpbGQgKyAxKTsKICB9CiAgaWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsKICAgICooX19m
aXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpOwog
ICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkIC0gMTsKICB9CiAgX19wdXNoX2hlYXAoX19m
aXJzdCwgX19ob2xlSW5kZXgsIF9fdG9wSW5kZXgsIF9fdmFsdWUsIF9fY29tcCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBh
cmUsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkCl9fcG9wX2hlYXAoX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3Qs
CiAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192YWx1ZSwg
X0NvbXBhcmUgX19jb21wLAogICAgICAgICAgIF9EaXN0YW5jZSopCnsKICAqX19yZXN1bHQgPSAq
X19maXJzdDsKICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgwKSwgX0Rpc3RhbmNl
KF9fbGFzdCAtIF9fZmlyc3QpLAogICAgICAgICAgICAgICAgX192YWx1ZSwgX19jb21wKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBf
Q29tcGFyZT4KaW5saW5lIHZvaWQKX19wb3BfaGVhcF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fZmlyc3QsCiAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9U
cCosIF9Db21wYXJlIF9fY29tcCkKewogIF9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0IC0gMSwg
X19sYXN0IC0gMSwgX1RwKCooX19sYXN0IC0gMSkpLCBfX2NvbXAsCiAgICAgICAgICAgICBfX2Rp
c3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQKcG9wX2hlYXAoX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3Qs
IF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgog
IF9fcG9wX2hlYXBfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpLCBf
X2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBf
VHAsIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZApfX21ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0
b3IgX19maXJzdCwKICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX1Rw
KiwgX0Rpc3RhbmNlKikKewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMikgcmV0dXJuOwogIF9E
aXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0g
KF9fbGVuIC0gMikvMjsKCiAgd2hpbGUgKHRydWUpIHsKICAgIF9fYWRqdXN0X2hlYXAoX19maXJz
dCwgX19wYXJlbnQsIF9fbGVuLCBfVHAoKihfX2ZpcnN0ICsgX19wYXJlbnQpKSk7CiAgICBpZiAo
X19wYXJlbnQgPT0gMCkgcmV0dXJuOwogICAgX19wYXJlbnQtLTsKICB9Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CmlubGluZSB2b2lkCm1ha2VfaGVhcChfUmFuZG9t
QWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9fbWFr
ZV9oZWFwKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJz
dCksIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlLAogICAgICAgICAgY2xhc3MgX1RwLCBjbGFz
cyBfRGlzdGFuY2U+CnZvaWQKX19tYWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgIF9Db21wYXJlIF9f
Y29tcCwgX1RwKiwgX0Rpc3RhbmNlKikKewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMikgcmV0
dXJuOwogIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNlIF9f
cGFyZW50ID0gKF9fbGVuIC0gMikvMjsKCiAgd2hpbGUgKHRydWUpIHsKICAgIF9fYWRqdXN0X2hl
YXAoX19maXJzdCwgX19wYXJlbnQsIF9fbGVuLCBfVHAoKihfX2ZpcnN0ICsgX19wYXJlbnQpKSwK
ICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIGlmIChfX3BhcmVudCA9PSAwKSByZXR1cm47
CiAgICBfX3BhcmVudC0tOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
YXRvciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkCm1ha2VfaGVhcChfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3Qs
IF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgog
IF9fbWFrZV9oZWFwKF9fZmlyc3QsIF9fbGFzdCwgX19jb21wLAogICAgICAgICAgICAgIF9fdmFs
dWVfdHlwZShfX2ZpcnN0KSwgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4Kdm9pZCBzb3J0X2hlYXAoX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCnsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19s
YXN0IC0gX19maXJzdCA+IDEpCiAgICBwb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QtLSk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlPgp2b2lk
CnNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgIF9SYW5k
b21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKICAg
IHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tLCBfX2NvbXApOwp9Cgp9CiMgMzUgIi91c3IvbG9j
YWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0
cy9zdGxfYWxnby5oIiAyIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CgoKCnRlbXBsYXRlIDxjbGFzcyBf
VHA+CmlubGluZSBjb25zdCBfVHAmIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAm
IF9fYiwgY29uc3QgX1RwJiBfX2MpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIGlmIChfX2EgPCBfX2IpCiAgICBpZiAo
X19iIDwgX19jKQogICAgICByZXR1cm4gX19iOwogICAgZWxzZSBpZiAoX19hIDwgX19jKQogICAg
ICByZXR1cm4gX19jOwogICAgZWxzZQogICAgICByZXR1cm4gX19hOwogIGVsc2UgaWYgKF9fYSA8
IF9fYykKICAgIHJldHVybiBfX2E7CiAgZWxzZSBpZiAoX19iIDwgX19jKQogICAgcmV0dXJuIF9f
YzsKICBlbHNlCiAgICByZXR1cm4gX19iOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
Q29tcGFyZT4KaW5saW5lIGNvbnN0IF9UcCYKX19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0
IF9UcCYgX19iLCBjb25zdCBfVHAmIF9fYywgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogIGlmIChfX2NvbXAoX19hLCBfX2IpKQogICAgaWYgKF9fY29tcChfX2Is
IF9fYykpCiAgICAgIHJldHVybiBfX2I7CiAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQog
ICAgICByZXR1cm4gX19jOwogICAgZWxzZQogICAgICByZXR1cm4gX19hOwogIGVsc2UgaWYgKF9f
Y29tcChfX2EsIF9fYykpCiAgICByZXR1cm4gX19hOwogIGVsc2UgaWYgKF9fY29tcChfX2IsIF9f
YykpCiAgICByZXR1cm4gX19jOwogIGVsc2UKICAgIHJldHVybiBfX2I7Cn0KCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Z1bmN0aW9uPgpfRnVuY3Rpb24gZm9yX2VhY2goX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX0Z1bmN0aW9uIF9fZikKewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBfX2YoKl9f
Zmlyc3QpOwogIHJldHVybiBfX2Y7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9UcD4KaW5saW5lIF9JbnB1dEl0ZXIgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsCiAg
ICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgd2hpbGUgKF9fZmly
c3QgIT0gX19sYXN0ICYmICEoKl9fZmlyc3QgPT0gX192YWwpKQogICAgKytfX2ZpcnN0OwogIHJl
dHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1ByZWRp
Y2F0ZT4KaW5saW5lIF9JbnB1dEl0ZXIgZmluZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVk
LAogICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIHdoaWxl
IChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhX19wcmVkKCpfX2ZpcnN0KSkKICAgICsrX19maXJzdDsK
ICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj
bGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVyIGZpbmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRv
cl90YWcpCnsKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojpk
aWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAgICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAy
OwoKICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9jb3VudCkgewogICAgaWYg
KCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKCiAgICBp
ZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwoKICAg
IGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7Cgog
ICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsK
ICB9CgogIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7CiAgY2FzZSAzOgogICAgaWYgKCpfX2Zp
cnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICBjYXNlIDI6CiAg
ICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0Owog
IGNhc2UgMToKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAr
K19fZmlyc3Q7CiAgY2FzZSAwOgogIGRlZmF1bHQ6CiAgICByZXR1cm4gX19sYXN0OwogIH0KfQoK
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgpfUmFu
ZG9tQWNjZXNzSXRlciBmaW5kX2lmKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9f
cHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh
ZykKewogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZl
cmVuY2VfdHlwZSBfX3RyaXBfY291bnQKICAgID0gKF9fbGFzdCAtIF9fZmlyc3QpID4+IDI7Cgog
IGZvciAoIDsgX190cmlwX2NvdW50ID4gMCA7IC0tX190cmlwX2NvdW50KSB7CiAgICBpZiAoX19w
cmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CgogICAgaWYgKF9f
cHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwoKICAgIGlmIChf
X3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKCiAgICBpZiAo
X19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgfQoKICBz
d2l0Y2goX19sYXN0IC0gX19maXJzdCkgewogIGNhc2UgMzoKICAgIGlmIChfX3ByZWQoKl9fZmly
c3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICBjYXNlIDI6CiAgICBpZiAoX19w
cmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAxOgog
ICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0Owog
IGNhc2UgMDoKICBkZWZhdWx0OgogICAgcmV0dXJuIF9fbGFzdDsKICB9Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfSW5wdXRJdGVyIGZpbmQoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBfVHAmIF9fdmFsKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gZmluZChf
X2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBfSW5w
dXRJdGVyIGZpbmRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKewoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKICByZXR1cm4gZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9j
YXRlZ29yeShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0Zv
cndhcmRJdGVyIGFkamFjZW50X2ZpbmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
ciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkK
ICAgIHJldHVybiBfX2xhc3Q7CiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgd2hp
bGUoKytfX25leHQgIT0gX19sYXN0KSB7CiAgICBpZiAoKl9fZmlyc3QgPT0gKl9fbmV4dCkKICAg
ICAgcmV0dXJuIF9fZmlyc3Q7CiAgICBfX2ZpcnN0ID0gX19uZXh0OwogIH0KICByZXR1cm4gX19s
YXN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGlj
YXRlPgpfRm9yd2FyZEl0ZXIgYWRqYWNlbnRfZmluZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRp
Y2F0ZSBfX2JpbmFyeV9wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3Qg
PT0gX19sYXN0KQogICAgcmV0dXJuIF9fbGFzdDsKICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19m
aXJzdDsKICB3aGlsZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgIGlmIChfX2JpbmFyeV9wcmVk
KCpfX2ZpcnN0LCAqX19uZXh0KSkKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICBfX2ZpcnN0ID0g
X19uZXh0OwogIH0KICByZXR1cm4gX19sYXN0Owp9CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfU2l6ZT4Kdm9pZCBjb3VudChfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUsCiAgICAgICAgICAg
X1NpemUmIF9fbikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBmb3IgKCA7IF9fZmlyc3QgIT0g
X19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWx1ZSkKICAgICAgKytf
X247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFz
cyBfU2l6ZT4Kdm9pZCBjb3VudF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LCBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICBfU2l6ZSYgX19uKQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAo
X19wcmVkKCpfX2ZpcnN0KSkKICAgICAgKytfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyLCBjbGFzcyBfVHA+CnR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlm
ZmVyZW5jZV90eXBlCmNvdW50KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs
IGNvbnN0IF9UcCYgX192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogIGZv
ciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmICgqX19maXJzdCA9PSBf
X3ZhbHVlKQogICAgICArK19fbjsKICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1
dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKY291bnRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7
CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKF9fcHJlZCgq
X19maXJzdCkpCiAgICAgICsrX19uOwogIHJldHVybiBfX247Cn0KCgoKCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgpfRm9yd2FyZEl0ZXIxIHNlYXJj
aChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg
ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0
MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgogIGlmIChfX2ZpcnN0
MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICByZXR1cm4gX19maXJzdDE7
CgoKICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsKICArK19fdG1wOwogIGlmIChfX3Rt
cCA9PSBfX2xhc3QyKQogICAgcmV0dXJuIGZpbmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0
Mik7CgoKCiAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7CgogIF9fcDEgPSBfX2ZpcnN0MjsgKytf
X3AxOwoKICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9IF9fZmlyc3QxOwoKICB3aGlsZSAoX19m
aXJzdDEgIT0gX19sYXN0MSkgewogICAgX19maXJzdDEgPSBmaW5kKF9fZmlyc3QxLCBfX2xhc3Qx
LCAqX19maXJzdDIpOwogICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgIHJldHVybiBf
X2xhc3QxOwoKICAgIF9fcCA9IF9fcDE7CiAgICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKICAgIGlm
ICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQogICAgICByZXR1cm4gX19sYXN0MTsKCiAgICB3aGls
ZSAoKl9fY3VycmVudCA9PSAqX19wKSB7CiAgICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQogICAg
ICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAg
ICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICB9CgogICAgKytfX2ZpcnN0MTsKICB9CiAgcmV0dXJu
IF9fZmlyc3QxOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0Zvcndh
cmRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWQ+Cl9Gb3J3YXJkSXRlcjEgc2VhcmNoKF9Gb3J3YXJk
SXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAg
ICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAg
ICAgICAgICAgICAgICBfQmluYXJ5UHJlZCBfX3ByZWRpY2F0ZSkKewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKCgogIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmly
c3QyID09IF9fbGFzdDIpCiAgICByZXR1cm4gX19maXJzdDE7CgoKICBfRm9yd2FyZEl0ZXIyIF9f
dG1wKF9fZmlyc3QyKTsKICArK19fdG1wOwogIGlmIChfX3RtcCA9PSBfX2xhc3QyKSB7CiAgICB3
aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19m
aXJzdDIpKQogICAgICArK19fZmlyc3QxOwogICAgcmV0dXJuIF9fZmlyc3QxOwogIH0KCgoKICBf
Rm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogIF9G
b3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19maXJzdDE7CgogIHdoaWxlIChfX2ZpcnN0MSAhPSBf
X2xhc3QxKSB7CiAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgICBpZiAoX19w
cmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgIGJyZWFrOwogICAgICArK19f
Zmlyc3QxOwogICAgfQogICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgIV9fcHJlZGlj
YXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgKytfX2ZpcnN0MTsKICAgIGlmIChfX2Zp
cnN0MSA9PSBfX2xhc3QxKQogICAgICByZXR1cm4gX19sYXN0MTsKCiAgICBfX3AgPSBfX3AxOwog
ICAgX19jdXJyZW50ID0gX19maXJzdDE7CiAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkg
cmV0dXJuIF9fbGFzdDE7CgogICAgd2hpbGUgKF9fcHJlZGljYXRlKCpfX2N1cnJlbnQsICpfX3Ap
KSB7CiAgICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsK
ICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7
CiAgICB9CgogICAgKytfX2ZpcnN0MTsKICB9CiAgcmV0dXJuIF9fZmlyc3QxOwp9CgoKCnRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9JbnRlZ2VyLCBjbGFzcyBfVHA+Cl9Gb3J3
YXJkSXRlciBzZWFyY2hfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192
YWwpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgaWYgKF9fY291bnQgPD0gMCkKICAg
IHJldHVybiBfX2ZpcnN0OwogIGVsc2UgewogICAgX19maXJzdCA9IGZpbmQoX19maXJzdCwgX19s
YXN0LCBfX3ZhbCk7CiAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgX0ludGVn
ZXIgX19uID0gX19jb3VudCAtIDE7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0Owog
ICAgICArK19faTsKICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYgKl9f
aSA9PSBfX3ZhbCkgewogICAgICAgICsrX19pOwogICAgICAgIC0tX19uOwogICAgICB9CiAgICAg
IGlmIChfX24gPT0gMCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZQogICAgICAg
IF9fZmlyc3QgPSBmaW5kKF9faSwgX19sYXN0LCBfX3ZhbCk7CiAgICB9CiAgICByZXR1cm4gX19s
YXN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0ludGVnZXIs
IGNsYXNzIF9UcCwgY2xhc3MgX0JpbmFyeVByZWQ+Cl9Gb3J3YXJkSXRlciBzZWFyY2hfbihfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgICAg
ICAgICBfQmluYXJ5UHJlZCBfX2JpbmFyeV9wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgoKICBpZiAoX19jb3VudCA8PSAwKQogICAgcmV0dXJuIF9fZmlyc3Q7CiAgZWxzZSB7CiAgICB3
aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmly
c3QsIF9fdmFsKSkKICAgICAgICBicmVhazsKICAgICAgKytfX2ZpcnN0OwogICAgfQogICAgd2hp
bGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAx
OwogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIHdo
aWxlIChfX2kgIT0gX19sYXN0ICYmIF9fbiAhPSAwICYmIF9fYmluYXJ5X3ByZWQoKl9faSwgX192
YWwpKSB7CiAgICAgICAgKytfX2k7CiAgICAgICAgLS1fX247CiAgICAgIH0KICAgICAgaWYgKF9f
biA9PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIHsKICAgICAgICB3aGls
ZSAoX19pICE9IF9fbGFzdCkgewogICAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9faSwgX192
YWwpKQogICAgICAgICAgICBicmVhazsKICAgICAgICAgICsrX19pOwogICAgICAgIH0KICAgICAg
ICBfX2ZpcnN0ID0gX19pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gX19sYXN0OwogIH0KfQoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KX0Zv
cndhcmRJdGVyMiBzd2FwX3JhbmdlcyhfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0
ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2Zp
cnN0MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgoKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCAr
K19fZmlyc3QyKQogICAgaXRlcl9zd2FwKF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgcmV0dXJuIF9f
Zmlyc3QyOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRl
ciwgY2xhc3MgX1VuYXJ5T3BlcmF0aW9uPgpfT3V0cHV0SXRlciB0cmFuc2Zvcm0oX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9PdXRw
dXRJdGVyIF9fcmVzdWx0LCBfVW5hcnlPcGVyYXRpb24gX191bmFyeV9vcCkKewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CgoKCgoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQp
CiAgICAqX19yZXN1bHQgPSBfX3VuYXJ5X29wKCpfX2ZpcnN0KTsKICByZXR1cm4gX19yZXN1bHQ7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNz
IF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3MgX0JpbmFyeU9wZXJhdGlvbj4KX091dHB1dEl0
ZXIgdHJhbnNmb3JtKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAog
ICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9PdXRwdXRJdGVyIF9f
cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9v
cCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKCgogIGZvciAoIDsgX19maXJzdDEgIT0gX19s
YXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MiwgKytfX3Jlc3VsdCkKICAgICpfX3Jlc3VsdCA9
IF9fYmluYXJ5X29wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKTsKICByZXR1cm4gX19yZXN1bHQ7Cn0K
CgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lkIHJlcGxhY2Uo
X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICBj
b25zdCBfVHAmIF9fb2xkX3ZhbHVlLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQp7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xh
c3Q7ICsrX19maXJzdCkKICAgIGlmICgqX19maXJzdCA9PSBfX29sZF92YWx1ZSkKICAgICAgKl9f
Zmlyc3QgPSBfX25ld192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh
c3MgX1ByZWRpY2F0ZSwgY2xhc3MgX1RwPgp2b2lkIHJlcGxhY2VfaWYoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9f
cHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYg
KF9fcHJlZCgqX19maXJzdCkpCiAgICAgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1RwPgpfT3V0
cHV0SXRlciByZXBsYWNlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX29sZF92YWx1ZSwgY29uc3QgX1RwJiBfX25l
d192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGZvciAoIDsgX19maXJzdCAhPSBf
X2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0ID09
IF9fb2xkX3ZhbHVlID8gX19uZXdfdmFsdWUgOiAqX19maXJzdDsKICByZXR1cm4gX19yZXN1bHQ7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3Mg
X1ByZWRpY2F0ZSwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciByZXBsYWNlX2NvcHlfaWYoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1By
ZWRpY2F0ZSBfX3ByZWQsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCnsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQog
ICAgKl9fcmVzdWx0ID0gX19wcmVkKCpfX2ZpcnN0KSA/IF9fbmV3X3ZhbHVlIDogKl9fZmlyc3Q7
CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs
YXNzIF9HZW5lcmF0b3I+CnZvaWQgZ2VuZXJhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlciBfX2xhc3QsIF9HZW5lcmF0b3IgX19nZW4pCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK
ICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAqX19maXJzdCA9IF9f
Z2VuKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNz
IF9HZW5lcmF0b3I+Cl9PdXRwdXRJdGVyIGdlbmVyYXRlX24oX091dHB1dEl0ZXIgX19maXJzdCwg
X1NpemUgX19uLCBfR2VuZXJhdG9yIF9fZ2VuKQp7CgoKCgoKCiAgZm9yICggOyBfX24gPiAwOyAt
LV9fbiwgKytfX2ZpcnN0KQogICAgKl9fZmlyc3QgPSBfX2dlbigpOwogIHJldHVybiBfX2ZpcnN0
Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xh
c3MgX1RwPgpfT3V0cHV0SXRlciByZW1vdmVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3Vs
dCwgY29uc3QgX1RwJiBfX3ZhbHVlKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgZm9yICgg
OyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKCEoKl9fZmlyc3QgPT0gX192
YWx1ZSkpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICsrX19yZXN1bHQ7CiAg
ICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh
c3MgX091dHB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+Cl9PdXRwdXRJdGVyIHJlbW92ZV9jb3B5
X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfUHJlZGljYXRlIF9fcHJlZCkKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qp
CiAgICBpZiAoIV9fcHJlZCgqX19maXJzdCkpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7
CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+Cl9Gb3J3YXJkSXRlciByZW1vdmUoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
Y29uc3QgX1RwJiBfX3ZhbHVlKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCgogIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZSk7CiAgX0Zvcndh
cmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJz
dAogICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZV9jb3B5KCsrX19pLCBfX2xhc3Qs
IF9fZmlyc3QsIF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz
cyBfUHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIgcmVtb3ZlX2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUg
X19wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX2ZpcnN0ID0gZmluZF9p
ZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7CiAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7
CiAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJzdAogICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IHJlbW92ZV9jb3B5X2lmKCsrX19pLCBfX2xhc3QsIF9fZmlyc3QsIF9fcHJlZCk7
Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFz
cyBfVHA+Cl9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl
c3VsdCwgX1RwKikKewoKICBfVHAgX192YWx1ZSA9ICpfX2ZpcnN0OwogICpfX3Jlc3VsdCA9IF9f
dmFsdWU7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAoIShfX3ZhbHVlID09
ICpfX2ZpcnN0KSkgewogICAgICBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICorK19fcmVzdWx0
ID0gX192YWx1ZTsKICAgIH0KICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX191bmlx
dWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykKewoKICByZXR1cm4gX191
bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX3ZhbHVlX3R5cGUoX19maXJz
dCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgpf
Rm9yd2FyZEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQs
IGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CgogICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHdoaWxl
ICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKCEoKl9fcmVzdWx0ID09ICpfX2ZpcnN0KSkK
ICAgICAgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1
dEl0ZXIgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0
OwogIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX3Jlc3VsdCkpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9CaW5hcnlQ
cmVkaWNhdGUsCiAgICAgICAgICBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHko
X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBf
QmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQsIF9UcCopCnsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgogIF9UcCBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgKl9fcmVzdWx0ID0gX192YWx1
ZTsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmICghX19iaW5hcnlfcHJlZChf
X3ZhbHVlLCAqX19maXJzdCkpIHsKICAgICAgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAqKytf
X3Jlc3VsdCA9IF9fdmFsdWU7CiAgICB9CiAgcmV0dXJuICsrX19yZXN1bHQ7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0JpbmFyeVByZWRp
Y2F0ZT4KaW5saW5lIF9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5h
cnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykKewoKICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0
LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAgICAgICAg
IF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciBf
X3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICAqX19yZXN1
bHQgPSAqX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmICghX19i
aW5hcnlfcHJlZCgqX19yZXN1bHQsICpfX2ZpcnN0KSkgKisrX19yZXN1bHQgPSAqX19maXJzdDsK
ICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz
IF9PdXRwdXRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgppbmxpbmUgX091dHB1dEl0ZXIg
dW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQp7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAg
cmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19iaW5hcnlf
cHJlZCwKICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fcmVzdWx0
KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciB1bmlxdWUo
X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCgogIF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFz
dCk7CiAgcmV0dXJuIHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3
YXJkSXRlciB1bmlxdWUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQp7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19m
aXJzdCwgX19sYXN0LCBfX2JpbmFyeV9wcmVkKTsKICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJz
dCwgX19sYXN0LCBfX2ZpcnN0LCBfX2JpbmFyeV9wcmVkKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0JpZGlyZWN0aW9uYWxJdGVyPgp2b2lkIF9fcmV2ZXJzZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19m
aXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgYmlkaXJlY3Rp
b25hbF9pdGVyYXRvcl90YWcpIHsKICB3aGlsZSAodHJ1ZSkKICAgIGlmIChfX2ZpcnN0ID09IF9f
bGFzdCB8fCBfX2ZpcnN0ID09IC0tX19sYXN0KQogICAgICByZXR1cm47CiAgICBlbHNlCiAgICAg
IGl0ZXJfc3dhcChfX2ZpcnN0KyssIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlcj4Kdm9pZCBfX3JldmVyc2UoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJh
dG9yX3RhZykgewogIHdoaWxlIChfX2ZpcnN0IDwgX19sYXN0KQogICAgaXRlcl9zd2FwKF9fZmly
c3QrKywgLS1fX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgpp
bmxpbmUgdm9pZCByZXZlcnNlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rp
b25hbEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBfX3Jl
dmVyc2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX091dHB1dEl0ZXI+Cl9P
dXRwdXRJdGVyIHJldmVyc2VfY29weShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgLS1f
X2xhc3Q7CiAgICAqX19yZXN1bHQgPSAqX19sYXN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0
dXJuIF9fcmVzdWx0Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRXVjbGlkZWFuUmluZ0VsZW1lbnQ+
Cl9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX2djZChfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX19tLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbikKewog
IHdoaWxlIChfX24gIT0gMCkgewogICAgX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fdCA9IF9fbSAl
IF9fbjsKICAgIF9fbSA9IF9fbjsKICAgIF9fbiA9IF9fdDsKICB9CiAgcmV0dXJuIF9fbTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0
ZXIgX19yb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBf
Rm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwKICAgICAgICAgICAgICAg
ICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUp
CiAgICByZXR1cm4gX19sYXN0OwogIGlmIChfX2xhc3QgPT0gX19taWRkbGUpCiAgICByZXR1cm4g
X19maXJzdDsKCiAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyID0gX19taWRkbGU7CiAgZG8gewogICAg
c3dhcCgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7CiAgICBpZiAoX19maXJzdCA9PSBfX21pZGRs
ZSkKICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsKICB9IHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xh
c3QpOwoKICBfRm9yd2FyZEl0ZXIgX19uZXdfbWlkZGxlID0gX19maXJzdDsKCiAgX19maXJzdDIg
PSBfX21pZGRsZTsKCiAgd2hpbGUgKF9fZmlyc3QyICE9IF9fbGFzdCkgewogICAgc3dhcCAoKl9f
Zmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICAg
IF9fbWlkZGxlID0gX19maXJzdDI7CiAgICBlbHNlIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QpCiAg
ICAgIF9fZmlyc3QyID0gX19taWRkbGU7CiAgfQoKICByZXR1cm4gX19uZXdfbWlkZGxlOwp9CgoK
dGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgpfQmlk
aXJlY3Rpb25hbEl0ZXIgX19yb3RhdGUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICByZXR1cm4gX19sYXN0Owog
IGlmIChfX2xhc3QgPT0gX19taWRkbGUpCiAgICByZXR1cm4gX19maXJzdDsKCiAgX19yZXZlcnNl
KF9fZmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICBfX3Jl
dmVyc2UoX19taWRkbGUsIF9fbGFzdCwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7Cgog
IHdoaWxlIChfX2ZpcnN0ICE9IF9fbWlkZGxlICYmIF9fbWlkZGxlICE9IF9fbGFzdCkKICAgIHN3
YXAgKCpfX2ZpcnN0KyssICotLV9fbGFzdCk7CgogIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKSB7
CiAgICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90
YWcoKSk7CiAgICByZXR1cm4gX19sYXN0OwogIH0KICBlbHNlIHsKICAgIF9fcmV2ZXJzZShfX2Zp
cnN0LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgICByZXR1cm4g
X19maXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3Mg
X0Rpc3RhbmNlLCBjbGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fcm90YXRlKF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSAqLCBfVHAg
KikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX0Rpc3RhbmNlIF9fbiA9IF9f
bGFzdCAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNlIF9fayA9IF9fbWlkZGxlIC0gX19maXJzdDsKICBf
RGlzdGFuY2UgX19sID0gX19uIC0gX19rOwogIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0ID0g
X19maXJzdCArIChfX2xhc3QgLSBfX21pZGRsZSk7CgogIGlmIChfX2sgPT0gMCkKICAgIHJldHVy
biBfX2xhc3Q7CgogIGVsc2UgaWYgKF9fayA9PSBfX2wpIHsKICAgIHN3YXBfcmFuZ2VzKF9fZmly
c3QsIF9fbWlkZGxlLCBfX21pZGRsZSk7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQoKICBfRGlz
dGFuY2UgX19kID0gX19nY2QoX19uLCBfX2spOwoKICBmb3IgKF9EaXN0YW5jZSBfX2kgPSAwOyBf
X2kgPCBfX2Q7IF9faSsrKSB7CiAgICBfVHAgX190bXAgPSAqX19maXJzdDsKICAgIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fcCA9IF9fZmlyc3Q7CgogICAgaWYgKF9fayA8IF9fbCkgewogICAgICBmb3Ig
KF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2wvX19kOyBfX2orKykgewogICAgICAgIGlmIChf
X3AgPiBfX2ZpcnN0ICsgX19sKSB7CiAgICAgICAgICAqX19wID0gKihfX3AgLSBfX2wpOwogICAg
ICAgICAgX19wIC09IF9fbDsKICAgICAgICB9CgogICAgICAgICpfX3AgPSAqKF9fcCArIF9fayk7
CiAgICAgICAgX19wICs9IF9fazsKICAgICAgfQogICAgfQoKICAgIGVsc2UgewogICAgICBmb3Ig
KF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2svX19kIC0gMTsgX19qICsrKSB7CiAgICAgICAg
aWYgKF9fcCA8IF9fbGFzdCAtIF9faykgewogICAgICAgICAgKl9fcCA9ICooX19wICsgX19rKTsK
ICAgICAgICAgIF9fcCArPSBfX2s7CiAgICAgICAgfQoKICAgICAgICAqX19wID0gKiAoX19wIC0g
X19sKTsKICAgICAgICBfX3AgLT0gX19sOwogICAgICB9CiAgICB9CgogICAgKl9fcCA9IF9fdG1w
OwogICAgKytfX2ZpcnN0OwogIH0KCiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyIHJvdGF0ZShfRm9yd2FyZEl0ZXIg
X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBfRm9yd2FyZEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4g
X19yb3RhdGUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX19k
aXN0YW5jZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVn
b3J5KF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX091
dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHJvdGF0ZV9jb3B5KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl
ciBfX2xhc3QsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg
cmV0dXJuIGNvcHkoX19maXJzdCwgX19taWRkbGUsIGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19y
ZXN1bHQpKTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9EaXN0YW5j
ZSBfX3JhbmRvbV9udW1iZXIoX0Rpc3RhbmNlIF9fbikgewoKICByZXR1cm4gbHJhbmQ0OCgpICUg
X19uOwoKCgp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZv
aWQgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICBmb3Ig
KF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19f
aSkKICAgIGl0ZXJfc3dhcChfX2ksIF9fZmlyc3QgKyBfX3JhbmRvbV9udW1iZXIoKF9faSAtIF9f
Zmlyc3QpICsgMSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz
IF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+CnZvaWQgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKewoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgZm9yIChfUmFu
ZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAg
ICBpdGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsgX19yYW5kKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsK
fQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xh
c3MgX0Rpc3RhbmNlPgpfT3V0cHV0SXRlciByYW5kb21fc2FtcGxlX24oX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
T3V0cHV0SXRlciBfX291dCwgY29uc3QgX0Rpc3RhbmNlIF9fbikKewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCgogIF9EaXN0YW5jZSBfX3JlbWFpbmluZyA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19s
YXN0LCBfX3JlbWFpbmluZyk7CiAgX0Rpc3RhbmNlIF9fbSA9IG1pbihfX24sIF9fcmVtYWluaW5n
KTsKCiAgd2hpbGUgKF9fbSA+IDApIHsKICAgIGlmIChfX3JhbmRvbV9udW1iZXIoX19yZW1haW5p
bmcpIDwgX19tKSB7CiAgICAgICpfX291dCA9ICpfX2ZpcnN0OwogICAgICArK19fb3V0OwogICAg
ICAtLV9fbTsKICAgIH0KCiAgICAtLV9fcmVtYWluaW5nOwogICAgKytfX2ZpcnN0OwogIH0KICBy
ZXR1cm4gX19vdXQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9PdXRw
dXRJdGVyLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAgICAgICBjbGFzcyBfUmFuZG9tTnVtYmVyR2Vu
ZXJhdG9yPgpfT3V0cHV0SXRlciByYW5kb21fc2FtcGxlX24oX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0
SXRlciBfX291dCwgY29uc3QgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKewoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CgogIF9EaXN0YW5jZSBfX3JlbWFpbmluZyA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0
LCBfX3JlbWFpbmluZyk7CiAgX0Rpc3RhbmNlIF9fbSA9IG1pbihfX24sIF9fcmVtYWluaW5nKTsK
CiAgd2hpbGUgKF9fbSA+IDApIHsKICAgIGlmIChfX3JhbmQoX19yZW1haW5pbmcpIDwgX19tKSB7
CiAgICAgICpfX291dCA9ICpfX2ZpcnN0OwogICAgICArK19fb3V0OwogICAgICAtLV9fbTsKICAg
IH0KCiAgICAtLV9fcmVtYWluaW5nOwogICAgKytfX2ZpcnN0OwogIH0KICByZXR1cm4gX19vdXQ7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg
Y2xhc3MgX0Rpc3RhbmNlPgpfUmFuZG9tQWNjZXNzSXRlciBfX3JhbmRvbV9zYW1wbGUoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgX0Rpc3RhbmNlIF9fbikKewogIF9EaXN0YW5jZSBfX20gPSAwOwog
IF9EaXN0YW5jZSBfX3QgPSBfX247CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX20g
PCBfX247ICsrX19tLCArK19fZmlyc3QpCiAgICBfX291dFtfX21dID0gKl9fZmlyc3Q7CgogIHdo
aWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgKytfX3Q7CiAgICBfRGlzdGFuY2UgX19NID0g
X19yYW5kb21fbnVtYmVyKF9fdCk7CiAgICBpZiAoX19NIDwgX19uKQogICAgICBfX291dFtfX01d
ID0gKl9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgfQoKICByZXR1cm4gX19vdXQgKyBfX207Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwKICAg
ICAgICAgIGNsYXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19yYW5kb21fc2FtcGxlKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
ZXNzSXRlciBfX291dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21O
dW1iZXJHZW5lcmF0b3ImIF9fcmFuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IF9EaXN0YW5jZSBfX24pCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9EaXN0YW5jZSBfX20gPSAwOwogIF9EaXN0YW5j
ZSBfX3QgPSBfX247CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX20gPCBfX247ICsr
X19tLCArK19fZmlyc3QpCiAgICBfX291dFtfX21dID0gKl9fZmlyc3Q7CgogIHdoaWxlIChfX2Zp
cnN0ICE9IF9fbGFzdCkgewogICAgKytfX3Q7CiAgICBfRGlzdGFuY2UgX19NID0gX19yYW5kKF9f
dCk7CiAgICBpZiAoX19NIDwgX19uKQogICAgICBfX291dFtfX01dID0gKl9fZmlyc3Q7CiAgICAr
K19fZmlyc3Q7CiAgfQoKICByZXR1cm4gX19vdXQgKyBfX207Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIF9SYW5kb21BY2Nlc3NJ
dGVyCnJhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX291dF9maXJzdCwgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19vdXRfbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKCiAgcmV0dXJuIF9fcmFuZG9tX3NhbXBsZShfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfX291dF9maXJzdCwgX19vdXRfbGFzdCAtIF9fb3V0X2ZpcnN0KTsKfQoK
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwKICAg
ICAgICAgIGNsYXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+CmlubGluZSBfUmFuZG9tQWNjZXNz
SXRlcgpyYW5kb21fc2FtcGxlKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXRfZmlyc3QsIF9SYW5kb21BY2Nl
c3NJdGVyIF9fb3V0X2xhc3QsCiAgICAgICAgICAgICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYg
X19yYW5kKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1
cm4gX19yYW5kb21fc2FtcGxlKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fb3V0X2ZpcnN0LCBfX3JhbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9s
YXN0IC0gX19vdXRfZmlyc3QpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs
YXNzIF9QcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciBfX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19m
aXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSBy
ZXR1cm4gX19maXJzdDsKCiAgd2hpbGUgKF9fcHJlZCgqX19maXJzdCkpCiAgICBpZiAoKytfX2Zp
cnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CgogIF9Gb3J3YXJkSXRlciBfX25leHQgPSBf
X2ZpcnN0OwoKICB3aGlsZSAoKytfX25leHQgIT0gX19sYXN0KQogICAgaWYgKF9fcHJlZCgqX19u
ZXh0KSkgewogICAgICBzd2FwKCpfX2ZpcnN0LCAqX19uZXh0KTsKICAgICAgKytfX2ZpcnN0Owog
ICAgfQoKICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFs
SXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX0JpZGlyZWN0aW9uYWxJdGVyIF9fcGFydGl0aW9uKF9C
aWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaXJl
Y3Rpb25hbF9pdGVyYXRvcl90YWcpCnsKICB3aGlsZSAodHJ1ZSkgewogICAgd2hpbGUgKHRydWUp
CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAg
ICAgZWxzZSBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGVs
c2UKICAgICAgICBicmVhazsKICAgIC0tX19sYXN0OwogICAgd2hpbGUgKHRydWUpCiAgICAgIGlm
IChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZSBp
ZiAoIV9fcHJlZCgqX19sYXN0KSkKICAgICAgICAtLV9fbGFzdDsKICAgICAgZWxzZQogICAgICAg
IGJyZWFrOwogICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICArK19fZmlyc3Q7CiAg
fQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgppbmxp
bmUgX0ZvcndhcmRJdGVyIHBhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCgogIHJldHVybiBfX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19p
dGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX2lu
cGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX0Rpc3Rh
bmNlIF9fbGVuKQp7CiAgaWYgKF9fbGVuID09IDEpCiAgICByZXR1cm4gX19wcmVkKCpfX2ZpcnN0
KSA/IF9fbGFzdCA6IF9fZmlyc3Q7CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19maXJzdDsK
ICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIpOwogIHJldHVybiByb3RhdGUoX19pbnBsYWNl
X3N0YWJsZV9wYXJ0aXRpb24oX19maXJzdCwgX19taWRkbGUsIF9fcHJlZCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMiksCiAgICAgICAgICAgICAg
ICBfX21pZGRsZSwKICAgICAgICAgICAgICAgIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9f
bWlkZGxlLCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAyKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfUHJlZGljYXRlLAogICAgICAgICAgY2xhc3Mg
X0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9Gb3J3
YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9EaXN0YW5jZSBfX2xlbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKewog
IGlmIChfX2xlbiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQx
ID0gX19maXJzdDsKICAgIF9Qb2ludGVyIF9fcmVzdWx0MiA9IF9fYnVmZmVyOwogICAgZm9yICgg
OyBfX2ZpcnN0ICE9IF9fbGFzdCA7ICsrX19maXJzdCkKICAgICAgaWYgKF9fcHJlZCgqX19maXJz
dCkpIHsKICAgICAgICAqX19yZXN1bHQxID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdDE7
CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgKl9fcmVzdWx0MiA9ICpfX2ZpcnN0OwogICAg
ICAgICsrX19yZXN1bHQyOwogICAgICB9CiAgICBjb3B5KF9fYnVmZmVyLCBfX3Jlc3VsdDIsIF9f
cmVzdWx0MSk7CiAgICByZXR1cm4gX19yZXN1bHQxOwogIH0KICBlbHNlIHsKICAgIF9Gb3J3YXJk
SXRlciBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIp
OwogICAgcmV0dXJuIHJvdGF0ZShfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19maXJzdCwgX19taWRkbGUsIF9fcHJlZCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2xlbiAvIDIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKSwKICAgICAg
ICAgICAgICAgICAgICBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICBfX3N0YWJsZV9wYXJ0
aXRpb25fYWRhcHRpdmUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUsIF9fbGFz
dCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAyLCBf
X2J1ZmZlciwgX19idWZmZXJfc2l6ZSkpOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlciwgY2xhc3MgX1ByZWRpY2F0ZSwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGlu
ZSBfRm9yd2FyZEl0ZXIKX19zdGFibGVfcGFydGl0aW9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRl
IF9fcHJlZCwgX1RwKiwgX0Rpc3RhbmNlKikKewogIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJk
SXRlciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChfX2J1Zi5zaXplKCkgPiAw
KQogICAgcmV0dXJuIF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3Qs
IF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNl
KF9fYnVmLnJlcXVlc3RlZF9zaXplKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2J1Zi5iZWdpbigpLCBfX2J1Zi5zaXplKCkpOwogIGVsc2UKICAgIHJldHVybiBf
X2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19idWYucmVxdWVzdGVk
X3NpemUoKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGlj
YXRlPgppbmxpbmUgX0ZvcndhcmRJdGVyIHN0YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBf
X3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9f
bGFzdCkKICAgIHJldHVybiBfX2ZpcnN0OwogIGVsc2UKICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0
aXRpb25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fdW5ndWFy
ZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwIF9fcGl2b3QpCnsKICB3aGlsZSAo
dHJ1ZSkgewogICAgd2hpbGUgKCpfX2ZpcnN0IDwgX19waXZvdCkKICAgICAgKytfX2ZpcnN0Owog
ICAgLS1fX2xhc3Q7CiAgICB3aGlsZSAoX19waXZvdCA8ICpfX2xhc3QpCiAgICAgIC0tX19sYXN0
OwogICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkpCiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAg
aXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICArK19fZmlyc3Q7CiAgfQp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+Cl9S
YW5kb21BY2Nlc3NJdGVyIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1RwIF9fcGl2b3QsIF9Db21wYXJlIF9fY29tcCkKewogIHdoaWxlICh0cnVlKSB7CiAgICB3aGls
ZSAoX19jb21wKCpfX2ZpcnN0LCBfX3Bpdm90KSkKICAgICAgKytfX2ZpcnN0OwogICAgLS1fX2xh
c3Q7CiAgICB3aGlsZSAoX19jb21wKF9fcGl2b3QsICpfX2xhc3QpKQogICAgICAtLV9fbGFzdDsK
ICAgIGlmICghKF9fZmlyc3QgPCBfX2xhc3QpKQogICAgICByZXR1cm4gX19maXJzdDsKICAgIGl0
ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwogICAgKytfX2ZpcnN0OwogIH0KfQoKY29uc3QgaW50
IF9fc3RsX3RocmVzaG9sZCA9IDE2OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXIsIGNsYXNzIF9UcD4Kdm9pZCBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nl
c3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFsKQp7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0g
X19sYXN0OwogIC0tX19uZXh0OwogIHdoaWxlIChfX3ZhbCA8ICpfX25leHQpIHsKICAgICpfX2xh
c3QgPSAqX19uZXh0OwogICAgX19sYXN0ID0gX19uZXh0OwogICAgLS1fX25leHQ7CiAgfQogICpf
X2xhc3QgPSBfX3ZhbDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFz
cyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBf
X2xhc3Q7CiAgLS1fX25leHQ7CiAgd2hpbGUgKF9fY29tcChfX3ZhbCwgKl9fbmV4dCkpIHsKICAg
ICpfX2xhc3QgPSAqX19uZXh0OwogICAgX19sYXN0ID0gX19uZXh0OwogICAgLS1fX25leHQ7CiAg
fQogICpfX2xhc3QgPSBfX3ZhbDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
LCBjbGFzcyBfVHA+CmlubGluZSB2b2lkIF9fbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19sYXN0LCBfVHAqKQp7CiAgX1RwIF9fdmFsID0gKl9fbGFzdDsKICBpZiAoX192YWwgPCAqX19m
aXJzdCkgewogICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCArIDEpOwog
ICAgKl9fZmlyc3QgPSBfX3ZhbDsKICB9CiAgZWxzZQogICAgX191bmd1YXJkZWRfbGluZWFyX2lu
c2VydChfX2xhc3QsIF9fdmFsKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBfX2xpbmVhcl9pbnNlcnQo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21wKQp7CiAgX1RwIF9f
dmFsID0gKl9fbGFzdDsKICBpZiAoX19jb21wKF9fdmFsLCAqX19maXJzdCkpIHsKICAgIGNvcHlf
YmFja3dhcmQoX19maXJzdCwgX19sYXN0LCBfX2xhc3QgKyAxKTsKICAgICpfX2ZpcnN0ID0gX192
YWw7CiAgfQogIGVsc2UKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19sYXN0LCBfX3Zh
bCwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgp2b2lkIF9f
aW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19sYXN0KQp7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgZm9yIChfUmFu
ZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAg
ICBfX2xpbmVhcl9pbnNlcnQoX19maXJzdCwgX19pLCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgp2b2lk
IF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CiAg
aWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBf
X2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBfX2xpbmVhcl9pbnNl
cnQoX19maXJzdCwgX19pLCBfX3ZhbHVlX3R5cGUoX19maXJzdCksIF9fY29tcCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgp2b2lkIF9fdW5ndWFyZGVk
X2luc2VydGlvbl9zb3J0X2F1eChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCop
CnsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7
ICsrX19pKQogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9UcCgqX19pKSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgX191bmd1YXJk
ZWRfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpIHsKICBfX3VuZ3Vh
cmRlZF9pbnNlcnRpb25fc29ydF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19m
aXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwg
Y2xhc3MgX0NvbXBhcmU+CnZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9SYW5k
b21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1RwKiwgX0NvbXBhcmUgX19jb21wKQp7CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBf
X2kgPSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIF9fdW5ndWFyZGVkX2xpbmVh
cl9pbnNlcnQoX19pLCBfVHAoKl9faSksIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIF9fdW5ndWFyZGVkX2lu
c2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CiAgX191bmd1
YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9f
Zmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CnZvaWQgX19maW5hbF9pbnNlcnRpb25fc29y
dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0
bF90aHJlc2hvbGQpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9f
c3RsX3RocmVzaG9sZCk7CiAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsg
X19zdGxfdGhyZXNob2xkLCBfX2xhc3QpOwogIH0KICBlbHNlCiAgICBfX2luc2VydGlvbl9zb3J0
KF9fZmlyc3QsIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg
Y2xhc3MgX0NvbXBhcmU+CnZvaWQgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKICBpZiAoX19sYXN0IC0gX19maXJzdCA+IF9f
c3RsX3RocmVzaG9sZCkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsg
X19zdGxfdGhyZXNob2xkLCBfX2NvbXApOwogICAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQo
X19maXJzdCArIF9fc3RsX3RocmVzaG9sZCwgX19sYXN0LCBfX2NvbXApOwogIH0KICBlbHNlCiAg
ICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9TaXplPgppbmxpbmUgX1NpemUgX19sZyhfU2l6ZSBfX24pCnsKICBfU2l6ZSBfX2s7
CiAgZm9yIChfX2sgPSAwOyBfX24gIT0gMTsgX19uID4+PSAxKSArK19fazsKICByZXR1cm4gX19r
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3Mg
X1NpemU+CnZvaWQgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLAogICAg
ICAgICAgICAgICAgICAgICAgX1NpemUgX19kZXB0aF9saW1pdCkKewogIHdoaWxlIChfX2xhc3Qg
LSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7CiAgICBpZiAoX19kZXB0aF9saW1pdCA9PSAw
KSB7CiAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCk7CiAgICAgIHJl
dHVybjsKICAgIH0KICAgIC0tX19kZXB0aF9saW1pdDsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
Y3V0ID0KICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9UcChfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJz
dCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3Qg
LSAxKSkpKTsKICAgIF9faW50cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgKF9UcCopIDAsIF9f
ZGVwdGhfbGltaXQpOwogICAgX19sYXN0ID0gX19jdXQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1NpemUsIGNsYXNzIF9Db21wYXJl
Pgp2b2lkIF9faW50cm9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwKICAgICAgICAg
ICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQsIF9Db21wYXJlIF9fY29tcCkKewogIHdo
aWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7CiAgICBpZiAoX19kZXB0
aF9saW1pdCA9PSAwKSB7CiAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFz
dCwgX19jb21wKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgLS1fX2RlcHRoX2xpbWl0OwogICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19m
aXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJz
dCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqKF9fbGFzdCAtIDEpLCBfX2NvbXApKSwKICAgICAgIF9fY29tcCk7CiAgICBf
X2ludHJvc29ydF9sb29wKF9fY3V0LCBfX2xhc3QsIChfVHAqKSAwLCBfX2RlcHRoX2xpbWl0LCBf
X2NvbXApOwogICAgX19sYXN0ID0gX19jdXQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv
bUFjY2Vzc0l0ZXI+CmlubGluZSB2b2lkIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgX19pbnRyb3NvcnRf
bG9vcChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShf
X2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIp
OwogICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogIH0KfQoKdGVt
cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZv
aWQgc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAg
IF9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBf
X3ZhbHVlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgIF9fbGcoX19sYXN0IC0g
X19maXJzdCkgKiAyLAogICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgX19maW5hbF9p
bnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgfQp9CgoKCnRlbXBsYXRl
IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4Kdm9pZCBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0KQp7CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkgewogICAg
X19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgcmV0dXJuOwogIH0KICBfUmFu
ZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAy
OwogIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgX19pbnBsYWNl
X3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3QpOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIo
X19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlk
ZGxlIC0gX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxl
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4K
dm9pZCBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFy
ZSBfX2NvbXApCnsKICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDE1KSB7CiAgICBfX2luc2VydGlv
bl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgIHJldHVybjsKICB9CiAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsK
ICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgX19p
bnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3QsIF9fY29tcCk7CiAgX19tZXJnZV93
aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgX19taWRkbGUgLSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19s
YXN0IC0gX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIxLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjIs
CiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+CnZvaWQgX19tZXJnZV9zb3J0X2xvb3AoX1JhbmRv
bUFjY2Vzc0l0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjIg
X19yZXN1bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSkKewogIF9EaXN0YW5jZSBfX3R3b19zdGVw
ID0gMiAqIF9fc3RlcF9zaXplOwoKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19z
dGVwKSB7CiAgICBfX3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6
ZSwKICAgICAgICAgICAgICAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsg
X190d29fc3RlcCwKICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQpOwogICAgX19maXJzdCAr
PSBfX3R3b19zdGVwOwogIH0KCiAgX19zdGVwX3NpemUgPSBtaW4oX0Rpc3RhbmNlKF9fbGFzdCAt
IF9fZmlyc3QpLCBfX3N0ZXBfc2l6ZSk7CiAgbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3Rl
cF9zaXplLCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwKICAgICAgICBfX3Jlc3VsdCk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjEsIGNsYXNzIF9SYW5kb21BY2Nl
c3NJdGVyMiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX0NvbXBhcmU+CnZvaWQg
X19tZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICBfUmFuZG9tQWNjZXNzSXRlcjIgX19yZXN1bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSwK
ICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKICBfRGlzdGFuY2UgX190
d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsKCiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0g
X190d29fc3RlcCkgewogICAgX19yZXN1bHQgPSBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19z
dGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19m
aXJzdCArIF9fdHdvX3N0ZXAsCiAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LAogICAgICAg
ICAgICAgICAgICAgICBfX2NvbXApOwogICAgX19maXJzdCArPSBfX3R3b19zdGVwOwogIH0KICBf
X3N0ZXBfc2l6ZSA9IG1pbihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXpl
KTsKCiAgbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgIF9fZmly
c3QgKyBfX3N0ZXBfc2l6ZSwgX19sYXN0LAogICAgICAgIF9fcmVzdWx0LAogICAgICAgIF9fY29t
cCk7Cn0KCmNvbnN0IGludCBfX3N0bF9jaHVua19zaXplID0gNzsKCnRlbXBsYXRlIDxjbGFzcyBf
UmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9fY2h1bmtfaW5zZXJ0aW9u
X3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6ZSkKewog
IHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkgewogICAgX19pbnNlcnRp
b25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19jaHVua19zaXplKTsKICAgIF9fZmlyc3QgKz0g
X19jaHVua19zaXplOwogIH0KICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFz
cyBfQ29tcGFyZT4Kdm9pZCBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19jaHVua19zaXpl
LCBfQ29tcGFyZSBfX2NvbXApCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5r
X3NpemUpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtf
c2l6ZSwgX19jb21wKTsKICAgIF9fZmlyc3QgKz0gX19jaHVua19zaXplOwogIH0KICBfX2luc2Vy
dGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9S
YW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9f
bWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UqKQp7CiAg
X0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICBfUG9pbnRlciBfX2J1ZmZlcl9s
YXN0ID0gX19idWZmZXIgKyBfX2xlbjsKCiAgX0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX19zdGxf
Y2h1bmtfc2l6ZTsKICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19z
dGVwX3NpemUpOwoKICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xlbikgewogICAgX19tZXJnZV9z
b3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2J1ZmZlciwgX19zdGVwX3NpemUpOwogICAgX19z
dGVwX3NpemUgKj0gMjsKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9s
YXN0LCBfX2ZpcnN0LCBfX3N0ZXBfc2l6ZSk7CiAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogIH0KfQoK
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3Mg
X0Rpc3RhbmNlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19tZXJnZV9zb3J0X3dp
dGhfYnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1BvaW50ZXIgX19idWZmZXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSosIF9Db21wYXJlIF9fY29tcCkK
ewogIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgX1BvaW50ZXIgX19idWZm
ZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47CgogIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9f
c3RsX2NodW5rX3NpemU7CiAgX19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3Qs
IF9fc3RlcF9zaXplLCBfX2NvbXApOwoKICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xlbikgewog
ICAgX19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2J1ZmZlciwgX19zdGVwX3Np
emUsIF9fY29tcCk7CiAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgX19tZXJnZV9zb3J0X2xvb3Ao
X19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmlyc3QsIF9fc3RlcF9zaXplLCBfX2NvbXApOwog
ICAgX19zdGVwX3NpemUgKj0gMjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz
SXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZCBfX3N0YWJsZV9zb3J0
X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Qb2ludGVyIF9fYnVmZmVyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCnsKICBfRGlz
dGFuY2UgX19sZW4gPSAoX19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsKICBfUmFuZG9tQWNjZXNz
SXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9z
aXplKSB7CiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1
ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxl
LCBfX2xhc3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICB9CiAgZWxzZSB7CiAgICBfX21l
cmdlX3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCAoX0Rpc3Rh
bmNlKikwKTsKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBf
X2J1ZmZlciwgKF9EaXN0YW5jZSopMCk7CiAgfQogIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwg
X19taWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNlKF9fbWlkZGxlIC0gX19maXJzdCksCiAgICAgICAg
ICAgICAgICAgICBfRGlzdGFuY2UoX19sYXN0IC0gX19taWRkbGUpLCBfX2J1ZmZlciwgX19idWZm
ZXJfc2l6ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1Bv
aW50ZXIsIGNsYXNzIF9EaXN0YW5jZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9f
c3RhYmxlX3NvcnRfYWRhcHRpdmUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1BvaW50ZXIgX19i
dWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6
ZSwgX0NvbXBhcmUgX19jb21wKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmly
c3QgKyAxKSAvIDI7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgX19s
ZW47CiAgaWYgKF9fbGVuID4gX19idWZmZXJfc2l6ZSkgewogICAgX19zdGFibGVfc29ydF9hZGFw
dGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9f
bWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbXApOwogIH0KICBlbHNlIHsKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1
ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIChfRGlzdGFuY2UqKTAsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVm
ZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCAoX0Rpc3RhbmNlKikwLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICB9CiAgX19tZXJnZV9hZGFwdGl2ZShfX2Zp
cnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRkbGUgLSBfX2ZpcnN0KSwKICAg
ICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBf
X2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5l
IHZvaWQgX19zdGFibGVfc29ydF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBf
RGlzdGFuY2UqKQp7CiAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9UcD4g
YnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgaWYgKGJ1Zi5iZWdpbigpID09IDApCiAgICBfX2lucGxh
Y2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICBlbHNlCiAgICBfX3N0YWJsZV9zb3J0
X2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgYnVmLmJlZ2luKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9EaXN0YW5jZShidWYuc2l6ZSgpKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJl
PgppbmxpbmUgdm9pZCBfX3N0YWJsZV9zb3J0X2F1eChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs
IF9UcCosIF9EaXN0YW5jZSosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJl
IF9fY29tcCkKewogIF9UZW1wb3JhcnlfYnVmZmVyPF9SYW5kb21BY2Nlc3NJdGVyLCBfVHA+IGJ1
ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChidWYuYmVnaW4oKSA9PSAwKQogICAgX19pbnBsYWNl
X3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICBlbHNlCiAgICBfX3N0YWJs
ZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgYnVmLmJlZ2luKCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9EaXN0YW5jZShidWYuc2l6ZSgpKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgpp
bmxpbmUgdm9pZCBzdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19zdGFibGVfc29ydF9hdXgoX19maXJz
dCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwKICAg
ICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBzdGFi
bGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgX19zdGFibGVfc29ydF9hdXgoX19m
aXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwK
ICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAg
ICAgICAgICAgX19jb21wKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIs
IGNsYXNzIF9UcD4Kdm9pZCBfX3BhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0
LCBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICBfUmFuZG9t
QWNjZXNzSXRlciBfX2xhc3QsIF9UcCopCnsKICBtYWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUp
OwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19taWRkbGU7IF9faSA8IF9fbGFzdDsg
KytfX2kpCiAgICBpZiAoKl9faSA8ICpfX2ZpcnN0KQogICAgICBfX3BvcF9oZWFwKF9fZmlyc3Qs
IF9fbWlkZGxlLCBfX2ksIF9UcCgqX19pKSwKICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5
cGUoX19maXJzdCkpOwogIHNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgcGFydGlhbF9zb3J0KF9SYW5k
b21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
ZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK
ICBfX3BhcnRpYWxfc29ydChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX3ZhbHVlX3R5cGUo
X19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9U
cCwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19wYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfQ29tcGFyZSBfX2NvbXApCnsKICBtYWtl
X2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRl
ciBfX2kgPSBfX21pZGRsZTsgX19pIDwgX19sYXN0OyArK19faSkKICAgIGlmIChfX2NvbXAoKl9f
aSwgKl9fZmlyc3QpKQogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2ksIF9U
cCgqX19pKSwgX19jb21wLAogICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0
KSk7CiAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBwYXJ0
aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIF9fcGFydGlhbF9zb3J0KF9fZmlyc3Qs
IF9fbWlkZGxlLCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19jb21wKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBf
RGlzdGFuY2UsCiAgICAgICAgICBjbGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fcGFydGlh
bF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwgX1Rw
KikKewogIGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1
bHRfbGFzdDsKICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3Vs
dF9maXJzdDsKICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3Qg
IT0gX19yZXN1bHRfbGFzdCkgewogICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0Owog
ICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICArK19fZmlyc3Q7CiAgfQogIG1ha2VfaGVhcChf
X3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0KTsKICB3aGlsZSAoX19maXJzdCAhPSBf
X2xhc3QpIHsKICAgIGlmICgqX19maXJzdCA8ICpfX3Jlc3VsdF9maXJzdCkKICAgICAgX19hZGp1
c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlKDApLAogICAgICAgICAgICAgICAgICAg
IF9EaXN0YW5jZShfX3Jlc3VsdF9yZWFsX2xhc3QgLSBfX3Jlc3VsdF9maXJzdCksCiAgICAgICAg
ICAgICAgICAgICAgX1RwKCpfX2ZpcnN0KSk7CiAgICArK19fZmlyc3Q7CiAgfQogIHNvcnRfaGVh
cChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0KTsKICByZXR1cm4gX19yZXN1bHRf
cmVhbF9sYXN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXI+CmlubGluZSBfUmFuZG9tQWNjZXNzSXRlcgpwYXJ0aWFsX3NvcnRfY29weShfSW5w
dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKCiAgcmV0dXJuIF9fcGFydGlhbF9zb3J0X2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jl
c3VsdF9maXJzdCwgX19yZXN1bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2Rpc3RhbmNlX3R5cGUoX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
LCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFz
cyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0ZXIgX19wYXJ0aWFsX3NvcnRf
Y29weShfSW5wdXRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRf
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBf
X2NvbXAsIF9EaXN0YW5jZSosIF9UcCopCnsKICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1
bHRfbGFzdCkgcmV0dXJuIF9fcmVzdWx0X2xhc3Q7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1
bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAgd2hpbGUoX19maXJzdCAhPSBfX2xhc3Qg
JiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICpfX3Jlc3VsdF9y
ZWFsX2xhc3QgPSAqX19maXJzdDsKICAgICsrX19yZXN1bHRfcmVhbF9sYXN0OwogICAgKytfX2Zp
cnN0OwogIH0KICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwg
X19jb21wKTsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIGlmIChfX2NvbXAoKl9f
Zmlyc3QsICpfX3Jlc3VsdF9maXJzdCkpCiAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmly
c3QsIF9EaXN0YW5jZSgwKSwKICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19yZXN1bHRf
cmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9UcCgqX19m
aXJzdCksCiAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICsrX19maXJzdDsKICB9CiAg
c29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QsIF9fY29tcCk7CiAg
cmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs
IGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIF9SYW5kb21B
Y2Nlc3NJdGVyCnBhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2Zp
cnN0LAogICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0LCBf
Q29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHJldHVybiBfX3BhcnRpYWxfc29ydF9jb3B5KF9f
Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19jb21wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
ZGlzdGFuY2VfdHlwZShfX3Jlc3VsdF9maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXIsIGNsYXNzIF9UcD4Kdm9pZCBfX250aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAgICAgICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqKQp7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3Qg
PiAzKSB7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9fdW5ndWFyZGVkX3Bh
cnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAo
X19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSkpKSk7CiAgICBpZiAoX19jdXQgPD0g
X19udGgpCiAgICAgIF9fZmlyc3QgPSBfX2N1dDsKICAgIGVsc2UKICAgICAgX19sYXN0ID0gX19j
dXQ7CiAgfQogIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9pZCBudGhfZWxlbWVudChfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9fbnRoX2VsZW1lbnQoX19maXJzdCwgX19udGgs
IF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k
b21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fbnRoX2VsZW1l
bnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAg
ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCosIF9Db21wYXJl
IF9fY29tcCkKewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMykgewogICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19jdXQgPQogICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xh
c3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqKF9fbGFzdCAtIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29tcCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIGlmIChf
X2N1dCA8PSBfX250aCkKICAgICAgX19maXJzdCA9IF9fY3V0OwogICAgZWxzZQogICAgICBfX2xh
c3QgPSBfX2N1dDsKICB9CiAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29t
cCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+
CmlubGluZSB2b2lkIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgoKCiAgX19udGhfZWxlbWVudChfX2ZpcnN0LCBfX250aCwgX19sYXN0
LCBfX3ZhbHVlX3R5cGUoX19maXJzdCksIF9fY29tcCk7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19s
b3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0Rpc3RhbmNlKikKewog
IF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7
CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChf
X2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmly
c3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKCpfX21pZGRsZSA8IF9f
dmFsKSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBf
X2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICAgIGVsc2UKICAgICAgX19sZW4gPSBf
X2hhbGY7CiAgfQogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIgbG93ZXJfYm91bmQoX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
ICByZXR1cm4gX19sb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLAogICAgICAgICAg
ICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5j
ZT4KX0ZvcndhcmRJdGVyIF9fbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYg
X192YWwsIF9Db21wYXJlIF9fY29tcCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9
IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFs
ZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9f
aGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9f
bWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFsKSkgewogICAg
ICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xl
biAtIF9faGFsZiAtIDE7CiAgICB9CiAgICBlbHNlCiAgICAgIF9fbGVuID0gX19oYWxmOwogIH0K
ICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg
X1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIF9Gb3J3YXJkSXRlciBsb3dlcl9ib3VuZChfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIF9fbG93ZXJfYm91bmQo
X19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wLAogICAgICAgICAgICAgICAgICAgICAgIF9f
ZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs
IGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX191cHBlcl9ib3VuZChf
Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBf
X2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNl
IF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsK
ICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZh
bmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQogICAgICBf
X2xlbiA9IF9faGFsZjsKICAgIGVsc2UgewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAg
ICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9CiAgfQog
IHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf
VHA+CmlubGluZSBfRm9yd2FyZEl0ZXIgdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgX1RwJiBfX3ZhbCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gX191
cHBlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAg
IF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJ
dGVyIF9fdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJl
IF9fY29tcCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2Uo
X19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0
ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+
IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYp
OwogICAgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgX19sZW4gPSBfX2hhbGY7
CiAgICBlbHNlIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7CiAg
ICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogIH0KICByZXR1cm4gX19maXJz
dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29t
cGFyZT4KaW5saW5lIF9Gb3J3YXJkSXRlciB1cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIF9fdXBwZXJfYm91bmQoX19maXJzdCwgX19sYXN0
LCBfX3ZhbCwgX19jb21wLAogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShf
X2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xh
c3MgX0Rpc3RhbmNlPgpwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgpfX2VxdWFsX3Jh
bmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAm
IF9fdmFsLAogICAgICAgICAgICAgIF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSAw
OwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwogIF9EaXN0YW5jZSBfX2hhbGY7
CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7CgogIHdoaWxlIChfX2xl
biA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7
CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKCpfX21pZGRsZSA8IF9fdmFs
KSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xl
biA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICAgIGVsc2UgaWYgKF9fdmFsIDwgKl9fbWlk
ZGxlKQogICAgICBfX2xlbiA9IF9faGFsZjsKICAgIGVsc2UgewogICAgICBfX2xlZnQgPSBsb3dl
cl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgX192YWwpOwogICAgICBhZHZhbmNlKF9fZmlyc3Qs
IF9fbGVuKTsKICAgICAgX19yaWdodCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9fZmlyc3Qs
IF9fdmFsKTsKICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9f
bGVmdCwgX19yaWdodCk7CiAgICB9CiAgfQogIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0Zv
cndhcmRJdGVyPihfX2ZpcnN0LCBfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4K
ZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNv
bnN0IF9UcCYgX192YWwpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIF9f
ZXF1YWxfcmFuZ2UoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAg
ICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfRGlzdGFuY2U+CnBhaXI8X0Zv
cndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9fZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAg
X0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBk
aXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9G
b3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoKICB3aGlsZSAoX19sZW4gPiAw
KSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAg
YWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCBfX3Zh
bCkpIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7CiAgICAgIF9f
bGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogICAgZWxzZSBpZiAoX19jb21wKF9fdmFs
LCAqX19taWRkbGUpKQogICAgICBfX2xlbiA9IF9faGFsZjsKICAgIGVsc2UgewogICAgICBfX2xl
ZnQgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgX192YWwsIF9fY29tcCk7CiAgICAg
IGFkdmFuY2UoX19maXJzdCwgX19sZW4pOwogICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytf
X21pZGRsZSwgX19maXJzdCwgX192YWwsIF9fY29tcCk7CiAgICAgIHJldHVybiBwYWlyPF9Gb3J3
YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2xlZnQsIF9fcmlnaHQpOwogICAgfQogIH0KICByZXR1
cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+
CmlubGluZSBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgplcXVhbF9yYW5nZShfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCwK
ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgogIHJldHVybiBfX2VxdWFsX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX192
YWwsIF9fY29tcCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJz
dCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmJvb2wgYmlu
YXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCiAgX0ZvcndhcmRJdGVyIF9faSA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwg
X192YWwpOwogIHJldHVybiBfX2kgIT0gX19sYXN0ICYmICEoX192YWwgPCAqX19pKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KYm9v
bCBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICAgICAg
IF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKICBfRm9yd2FyZEl0ZXIgX19pID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3Zh
bCwgX19jb21wKTsKICByZXR1cm4gX19pICE9IF9fbGFzdCAmJiAhX19jb21wKF9fdmFsLCAqX19p
KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBj
bGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIgbWVyZ2UoX0lucHV0SXRlcjEgX19maXJzdDEs
IF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmly
c3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf
X3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUg
KF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKCpf
X2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAg
ICsrX19maXJzdDI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qx
OwogICAgICArK19fZmlyc3QxOwogICAgfQogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIGNv
cHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNz
IF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+Cl9PdXRwdXRJdGVyIG1lcmdl
KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg
ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAg
ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh
c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAq
X19maXJzdDEpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0
MjsKICAgIH0KICAgIGVsc2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsr
X19maXJzdDE7CiAgICB9CiAgICArK19fcmVzdWx0OwogIH0KICByZXR1cm4gY29weShfX2ZpcnN0
MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CnZvaWQgX19t
ZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yKQp7CiAg
aWYgKF9fbGVuMSA9PSAwIHx8IF9fbGVuMiA9PSAwKQogICAgcmV0dXJuOwogIGlmIChfX2xlbjEg
KyBfX2xlbjIgPT0gMikgewogICAgaWYgKCpfX21pZGRsZSA8ICpfX2ZpcnN0KQogICAgICBpdGVy
X3N3YXAoX19maXJzdCwgX19taWRkbGUpOwogICAgcmV0dXJuOwogIH0KICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29u
ZF9jdXQgPSBfX21pZGRsZTsKICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgX0Rpc3RhbmNlIF9f
bGVuMjIgPSAwOwogIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgIF9fbGVuMTEgPSBfX2xlbjEg
LyAyOwogICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICBfX3NlY29uZF9jdXQg
PSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwogICAgZGlzdGFu
Y2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgfQogIGVsc2UgewogICAgX19s
ZW4yMiA9IF9fbGVuMiAvIDI7CiAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAg
ICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRf
Y3V0KTsKICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICB9CiAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZQogICAgPSByb3RhdGUoX19maXJzdF9jdXQs
IF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJz
dCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9f
bGVuMTEsIF9fbGVuMjIpOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBf
X3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fbGVuMiAtIF9fbGVuMjIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9u
YWxJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fbWVyZ2Vfd2l0
aG91dF9idWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIGlmIChfX2xlbjEgPT0gMCB8fCBf
X2xlbjIgPT0gMCkKICAgIHJldHVybjsKICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsKICAg
IGlmIChfX2NvbXAoKl9fbWlkZGxlLCAqX19maXJzdCkpCiAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0
LCBfX21pZGRsZSk7CiAgICByZXR1cm47CiAgfQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0
X2N1dCA9IF9fZmlyc3Q7CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlk
ZGxlOwogIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAg
aWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICBhZHZh
bmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5k
KF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCwgX19jb21wKTsKICAgIGRpc3RhbmNlKF9f
bWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogIH0KICBlbHNlIHsKICAgIF9fbGVuMjIg
PSBfX2xlbjIgLyAyOwogICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgX19m
aXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwg
X19jb21wKTsKICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICB9
CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZQogICAgPSByb3RhdGUoX19maXJzdF9j
dXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19m
aXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwgX19sZW4yMiwKICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25l
d19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAg
ICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19jb21wKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAg
ICAgICAgICBjbGFzcyBfRGlzdGFuY2U+Cl9CaWRpcmVjdGlvbmFsSXRlcjEgX19yb3RhdGVfYWRh
cHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19taWRkbGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rp
c3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQp7CiAgX0JpZGlyZWN0aW9uYWxJdGVyMiBf
X2J1ZmZlcl9lbmQ7CiAgaWYgKF9fbGVuMSA+IF9fbGVuMiAmJiBfX2xlbjIgPD0gX19idWZmZXJf
c2l6ZSkgewogICAgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZl
cik7CiAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOwogICAgcmV0
dXJuIGNvcHkoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19maXJzdCk7CiAgfQogIGVsc2UgaWYg
KF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmly
c3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fZmly
c3QpOwogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19s
YXN0KTsKICB9CiAgZWxzZQogICAgcmV0dXJuIHJvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19s
YXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRp
cmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIzPgpfQmlk
aXJlY3Rpb25hbEl0ZXIzIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2Zp
cnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRp
cmVjdGlvbmFsSXRlcjIgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fcmVzdWx0KQp7CiAgaWYgKF9fZmly
c3QxID09IF9fbGFzdDEpCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0
MiwgX19yZXN1bHQpOwogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIGNvcHlf
YmFja3dhcmQoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAtLV9fbGFzdDE7CiAgLS1f
X2xhc3QyOwogIHdoaWxlICh0cnVlKSB7CiAgICBpZiAoKl9fbGFzdDIgPCAqX19sYXN0MSkgewog
ICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0
MSkKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jl
c3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgIH0KICAgIGVsc2UgewogICAgICAqLS1fX3Jlc3Vs
dCA9ICpfX2xhc3QyOwogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1
cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIC0t
X19sYXN0MjsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIx
LCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0JpZGlyZWN0aW9u
YWxJdGVyMywgY2xhc3MgX0NvbXBhcmU+Cl9CaWRpcmVjdGlvbmFsSXRlcjMgX19tZXJnZV9iYWNr
d2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19s
YXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlcjMgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29t
cGFyZSBfX2NvbXApCnsKICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgIHJldHVybiBjb3B5
X2JhY2t3YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgaWYgKF9fZmlyc3QyID09
IF9fbGFzdDIpCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19y
ZXN1bHQpOwogIC0tX19sYXN0MTsKICAtLV9fbGFzdDI7CiAgd2hpbGUgKHRydWUpIHsKICAgIGlm
IChfX2NvbXAoKl9fbGFzdDIsICpfX2xhc3QxKSkgewogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xh
c3QxOwogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gY29weV9i
YWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsK
ICAgIH0KICAgIGVsc2UgewogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICBpZiAo
X19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0
MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MjsKICAgIH0KICB9Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3Mg
X1BvaW50ZXI+CnZvaWQgX19tZXJnZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJz
dCwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAg
ICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQp7
CiAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAg
IF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVy
KTsKICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlkZGxlLCBfX2xhc3QsIF9f
Zmlyc3QpOwogIH0KICBlbHNlIGlmIChfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX1Bv
aW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAg
ICBfX21lcmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJf
ZW5kLCBfX2xhc3QpOwogIH0KICBlbHNlIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0
X2N1dCA9IF9fZmlyc3Q7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19t
aWRkbGU7CiAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICBfRGlzdGFuY2UgX19sZW4yMiA9
IDA7CiAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAy
OwogICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgX19zZWNvbmRfY3V0
ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0KTsKICAgICAgZGlz
dGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICB9CiAgICBlbHNlIHsK
ICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBf
X2xlbjIyKTsKICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRs
ZSwgKl9fc2Vjb25kX2N1dCk7CiAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBf
X2xlbjExKTsKICAgIH0KICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPQogICAg
ICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwg
X19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZm
ZXIsIF9fYnVmZmVyX3NpemUpOwogICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0
X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICBfX2xlbjIy
LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21p
ZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAg
ICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICB9
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwg
Y2xhc3MgX1BvaW50ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX21lcmdlX2Fk
YXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xl
bjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1
ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICBfQ29t
cGFyZSBfX2NvbXApCnsKICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZm
ZXJfc2l6ZSkgewogICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21p
ZGRsZSwgX19idWZmZXIpOwogICAgbWVyZ2UoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19taWRk
bGUsIF9fbGFzdCwgX19maXJzdCwgX19jb21wKTsKICB9CiAgZWxzZSBpZiAoX19sZW4yIDw9IF9f
YnVmZmVyX3NpemUpIHsKICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUs
IF9fbGFzdCwgX19idWZmZXIpOwogICAgX19tZXJnZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRs
ZSwgX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBf
X2NvbXApOwogIH0KICBlbHNlIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9
IF9fZmlyc3Q7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7
CiAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAg
ICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAg
ICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgX19zZWNvbmRfY3V0ID0gbG93
ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0LCBfX2NvbXApOwogICAgICBk
aXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgIH0KICAgIGVsc2Ug
ewogICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQs
IF9fbGVuMjIpOwogICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlk
ZGxlLCAqX19zZWNvbmRfY3V0LCBfX2NvbXApOwogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2Zp
cnN0X2N1dCwgX19sZW4xMSk7CiAgICB9CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlk
ZGxlID0KICAgICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3Nl
Y29uZF9jdXQsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVu
MjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJz
dCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwKICAgICAgICAgICAgICAgICAg
ICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsIF9fY29tcCk7CiAgICBfX21lcmdl
X2FkYXB0aXZlKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9f
bGVuMTEsCiAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBf
X2J1ZmZlcl9zaXplLCBfX2NvbXApOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlv
bmFsSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9faW5wbGFj
ZV9tZXJnZV9hdXgoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsIF9UcCosIF9EaXN0
YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4xID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX21p
ZGRsZSwgX19sZW4xKTsKICBfRGlzdGFuY2UgX19sZW4yID0gMDsKICBkaXN0YW5jZShfX21pZGRs
ZSwgX19sYXN0LCBfX2xlbjIpOwoKICBfVGVtcG9yYXJ5X2J1ZmZlcjxfQmlkaXJlY3Rpb25hbEl0
ZXIsIF9UcD4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICBpZiAoX19idWYuYmVnaW4oKSA9PSAw
KQogICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBf
X2xlbjEsIF9fbGVuMik7CiAgZWxzZQogICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21p
ZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgX19idWYu
YmVnaW4oKSwgX0Rpc3RhbmNlKF9fYnVmLnNpemUoKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Jp
ZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfVHAsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UsIGNs
YXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBfX2lucGxhY2VfbWVyZ2VfYXV4KF9CaWRpcmVjdGlv
bmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIF9EaXN0YW5jZSBfX2xlbjEgPSAw
OwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xlbjEpOwogIF9EaXN0YW5jZSBfX2xl
bjIgPSAwOwogIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMik7CgogIF9UZW1wb3Jh
cnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3Qp
OwogIGlmIChfX2J1Zi5iZWdpbigpID09IDApCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9f
Zmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLCBfX2NvbXApOwogIGVsc2UK
ICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBf
X2xlbjIsCiAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0YW5jZShfX2J1
Zi5zaXplKCkpLAogICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0JpZGlyZWN0aW9uYWxJdGVyPgppbmxpbmUgdm9pZCBpbnBsYWNlX21lcmdlKF9CaWRpcmVj
dGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKCiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQogICAg
cmV0dXJuOwogIF9faW5wbGFjZV9tZXJnZV9hdXgoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19kaXN0YW5jZV90
eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xh
c3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIGlucGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVy
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
bWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xh
c3QsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCgoKICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xh
c3QpCiAgICByZXR1cm47CiAgX19pbnBsYWNlX21lcmdlX2F1eChfX2ZpcnN0LCBfX21pZGRsZSwg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2Rp
c3RhbmNlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9CgoK
CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmJvb2wg
aW5jbHVkZXMoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCnsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0
MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkK
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgZWxzZSBpZigqX19maXJzdDEgPCAqX19maXJzdDIpCiAg
ICAgICsrX19maXJzdDE7CiAgICBlbHNlCiAgICAgICsrX19maXJzdDEsICsrX19maXJzdDI7Cgog
IHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3QyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
cjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBpbmNsdWRlcyhfSW5w
dXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICBfSW5w
dXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwgX0NvbXBhcmUgX19jb21wKQp7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBf
X2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0Miwg
Kl9fZmlyc3QxKSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgZWxzZSBpZihfX2NvbXAoKl9fZmly
c3QxLCAqX19maXJzdDIpKQogICAgICArK19fZmlyc3QxOwogICAgZWxzZQogICAgICArK19fZmly
c3QxLCArK19fZmlyc3QyOwoKICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0MjsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0
ZXI+Cl9PdXRwdXRJdGVyIHNldF91bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl
cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBf
SW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y
ZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChf
X2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlmICgqX19m
aXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAr
K19fZmlyc3QxOwogICAgfQogICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAg
ICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgIGVs
c2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAg
ICsrX19maXJzdDI7CiAgICB9CiAgICArK19fcmVzdWx0OwogIH0KICByZXR1cm4gY29weShfX2Zp
cnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1
dEl0ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4KX091dHB1dEl0ZXIgc2V0X3VuaW9uKF9J
bnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAg
ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQp7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgd2hpbGUgKF9fZmlyc3QxICE9
IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKF9fY29tcCgqX19maXJz
dDEsICpfX2ZpcnN0MikpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19f
Zmlyc3QxOwogICAgfQogICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkg
ewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAg
ICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwog
ICAgICArK19fZmlyc3QyOwogICAgfQogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIGNvcHko
X19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9P
dXRwdXRJdGVyPgpfT3V0cHV0SXRlciBzZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmly
c3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J
bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0
MiAhPSBfX2xhc3QyKQogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgKytfX2Zp
cnN0MTsKICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgKytfX2ZpcnN0
MjsKICAgIGVsc2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJz
dDE7CiAgICAgICsrX19maXJzdDI7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9f
cmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIy
LCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRl
ciBzZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xh
c3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBf
SW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ
dGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAh
PSBfX2xhc3QyKQogICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICsr
X19maXJzdDE7CiAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAg
ICArK19fZmlyc3QyOwogICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAg
ICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0K
ICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3Mg
X0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciBzZXRfZGlmZmVyZW5j
ZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19s
YXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0
MikgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAg
ICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAg
ICAgICsrX19maXJzdDI7CiAgICBlbHNlIHsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2Zp
cnN0MjsKICAgIH0KICByZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBf
T3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRlciBzZXRfZGlm
ZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9f
bGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBf
Q29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoK
ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAg
aWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9f
Zmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxz
ZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgKytfX2ZpcnN0MjsKICAg
IGVsc2UgewogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQogIHJldHVy
biBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0
SXRlcgpzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1
dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp
cnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRw
dXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK
ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAg
aWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7
CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIGlmICgq
X19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAg
ICArK19fZmlyc3QyOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSB7CiAgICAgICsr
X19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDIs
IF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVy
LAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+Cl9PdXRwdXRJdGVyCnNldF9zeW1tZXRyaWNfZGlm
ZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg
ICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xh
c3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2Zp
cnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsK
ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19f
cmVzdWx0OwogICAgfQogICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkg
ewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19maXJzdDI7CiAgICAgICsr
X19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2Zp
cnN0MjsKICAgIH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0
MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
cj4KX0ZvcndhcmRJdGVyIG1heF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19s
YXN0KSByZXR1cm4gX19maXJzdDsKICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0Owog
IHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKCpfX3Jlc3VsdCA8ICpfX2ZpcnN0
KQogICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQ29tcGFyZT4KX0ZvcndhcmRJdGVyIG1heF9l
bGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
CgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgX0ZvcndhcmRJdGVy
IF9fcmVzdWx0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlm
IChfX2NvbXAoKl9fcmVzdWx0LCAqX19maXJzdCkpIF9fcmVzdWx0ID0gX19maXJzdDsKICByZXR1
cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRl
ciBtaW5fZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkK
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9f
Zmlyc3Q7CiAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2Zp
cnN0ICE9IF9fbGFzdCkKICAgIGlmICgqX19maXJzdCA8ICpfX3Jlc3VsdCkKICAgICAgX19yZXN1
bHQgPSBfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlciwgY2xhc3MgX0NvbXBhcmU+Cl9Gb3J3YXJkSXRlciBtaW5fZWxlbWVudChfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBpZiAoX19maXJz
dCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9f
Zmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAoX19jb21wKCpfX2Zp
cnN0LCAqX19yZXN1bHQpKQogICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVz
dWx0Owp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgpib29sIG5leHRf
cGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAo
X19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9faSA9IF9fZmlyc3Q7CiAgKytfX2k7CiAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICByZXR1cm4g
ZmFsc2U7CiAgX19pID0gX19sYXN0OwogIC0tX19pOwoKICBmb3IoOzspIHsKICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgLS1fX2k7CiAgICBpZiAoKl9faSA8ICpfX2lpKSB7
CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgIHdoaWxlICghKCpf
X2kgPCAqLS1fX2opKQogICAgICAgIHt9CiAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAg
IHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAo
X19pID09IF9fZmlyc3QpIHsKICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBy
ZXR1cm4gZmFsc2U7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJ
dGVyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFs
SXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfQmlk
aXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICArK19faTsKICBpZiAoX19pID09IF9fbGFz
dCkKICAgIHJldHVybiBmYWxzZTsKICBfX2kgPSBfX2xhc3Q7CiAgLS1fX2k7CgogIGZvcig7Oykg
ewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAtLV9faTsKICAgIGlmIChf
X2NvbXAoKl9faSwgKl9faWkpKSB7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xh
c3Q7CiAgICAgIHdoaWxlICghX19jb21wKCpfX2ksICotLV9faikpCiAgICAgICAge30KICAgICAg
aXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICBy
ZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICByZXZlcnNl
KF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+CmJvb2wgcHJldl9wZXJtdXRhdGlvbihfQmlk
aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFz
dCkKICAgIHJldHVybiBmYWxzZTsKICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsK
ICArK19faTsKICBpZiAoX19pID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfX2kgPSBf
X2xhc3Q7CiAgLS1fX2k7CgogIGZvcig7OykgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkg
PSBfX2k7CiAgICAtLV9faTsKICAgIGlmICgqX19paSA8ICpfX2kpIHsKICAgICAgX0JpZGlyZWN0
aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgd2hpbGUgKCEoKi0tX19qIDwgKl9faSkpCiAg
ICAgICAge30KICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgcmV2ZXJzZShfX2lpLCBf
X2xhc3QpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChfX2kgPT0gX19maXJzdCkg
ewogICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAg
IH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9Db21w
YXJlPgpib29sIHByZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9C
aWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBf
X2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgaWYgKF9f
Zmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9CaWRpcmVjdGlvbmFsSXRlciBf
X2kgPSBfX2ZpcnN0OwogICsrX19pOwogIGlmIChfX2kgPT0gX19sYXN0KQogICAgcmV0dXJuIGZh
bHNlOwogIF9faSA9IF9fbGFzdDsKICAtLV9faTsKCiAgZm9yKDs7KSB7CiAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIgX19paSA9IF9faTsKICAgIC0tX19pOwogICAgaWYgKF9fY29tcCgqX19paSwgKl9f
aSkpIHsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgd2hpbGUg
KCFfX2NvbXAoKi0tX19qLCAqX19pKSkKICAgICAgICB7fQogICAgICBpdGVyX3N3YXAoX19pLCBf
X2opOwogICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgIHJldHVybiB0cnVlOwogICAg
fQogICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0
KTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgpfSW5wdXRJdGVyIGZpbmRfZmlyc3Rfb2YoX0lu
cHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MikKewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7
ICsrX19maXJzdDEpCiAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIgPSBfX2ZpcnN0MjsgX19p
dGVyICE9IF9fbGFzdDI7ICsrX19pdGVyKQogICAgICBpZiAoKl9fZmlyc3QxID09ICpfX2l0ZXIp
CiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogIHJldHVybiBfX2xhc3QxOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGlj
YXRlPgpfSW5wdXRJdGVyIGZpbmRfZmlyc3Rfb2YoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0
SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmly
c3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5h
cnlQcmVkaWNhdGUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CgoKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEpCiAgICBmb3IgKF9G
b3J3YXJkSXRlciBfX2l0ZXIgPSBfX2ZpcnN0MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVy
KQogICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9faXRlcikpCiAgICAgICAgcmV0dXJuIF9f
Zmlyc3QxOwogIHJldHVybiBfX2xhc3QxOwp9CiMgMzM5MCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvLmgi
IDMKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+Cl9G
b3J3YXJkSXRlcjEgX19maW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0
ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmly
c3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3
YXJkX2l0ZXJhdG9yX3RhZywgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKICBpZiAoX19maXJzdDIg
PT0gX19sYXN0MikKICAgIHJldHVybiBfX2xhc3QxOwogIGVsc2UgewogICAgX0ZvcndhcmRJdGVy
MSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICB3aGlsZSAoMSkgewogICAgICBfRm9yd2FyZEl0ZXIx
IF9fbmV3X3Jlc3VsdAogICAgICAgID0gc2VhcmNoKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0
MiwgX19sYXN0Mik7CiAgICAgIGlmIChfX25ld19yZXN1bHQgPT0gX19sYXN0MSkKICAgICAgICBy
ZXR1cm4gX19yZXN1bHQ7CiAgICAgIGVsc2UgewogICAgICAgIF9fcmVzdWx0ID0gX19uZXdfcmVz
dWx0OwogICAgICAgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAgICAgICsrX19maXJzdDE7
CiAgICAgIH0KICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFz
cyBfRm9yd2FyZEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0Zvcndh
cmRJdGVyMSBfX2ZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEg
X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIs
IF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRf
aXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQp7CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIp
CiAgICByZXR1cm4gX19sYXN0MTsKICBlbHNlIHsKICAgIF9Gb3J3YXJkSXRlcjEgX19yZXN1bHQg
PSBfX2xhc3QxOwogICAgd2hpbGUgKDEpIHsKICAgICAgX0ZvcndhcmRJdGVyMSBfX25ld19yZXN1
bHQKICAgICAgICA9IHNlYXJjaChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIs
IF9fY29tcCk7CiAgICAgIGlmIChfX25ld19yZXN1bHQgPT0gX19sYXN0MSkKICAgICAgICByZXR1
cm4gX19yZXN1bHQ7CiAgICAgIGVsc2UgewogICAgICAgIF9fcmVzdWx0ID0gX19uZXdfcmVzdWx0
OwogICAgICAgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAgICAgICsrX19maXJzdDE7CiAg
ICAgIH0KICAgIH0KICB9Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwg
Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMj4KX0JpZGlyZWN0aW9uYWxJdGVyMQpfX2ZpbmRfZW5k
KF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0
MSwKICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25h
bEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJp
ZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRp
cmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0Jp
ZGlyZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICBfUmV2SXRlcjEgX19ybGFzdDEoX19maXJz
dDEpOwogIF9SZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7CiAgX1Jldkl0ZXIxIF9fcnJlc3Vs
dCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3QxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1Jldkl0ZXIyKF9fbGFzdDIpLCBfX3JsYXN0Mik7CgogIGlmIChfX3Jy
ZXN1bHQgPT0gX19ybGFzdDEpCiAgICByZXR1cm4gX19sYXN0MTsKICBlbHNlIHsKICAgIF9CaWRp
cmVjdGlvbmFsSXRlcjEgX19yZXN1bHQgPSBfX3JyZXN1bHQuYmFzZSgpOwogICAgYWR2YW5jZShf
X3Jlc3VsdCwgLWRpc3RhbmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CiAgICByZXR1cm4gX19yZXN1
bHQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0Jp
ZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9CaWRp
cmVjdGlvbmFsSXRlcjEKX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBf
QmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
MiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgIGJpZGly
ZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywKICAgICAg
ICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxf
QmlkaXJlY3Rpb25hbEl0ZXIxPiBfUmV2SXRlcjE7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9y
PF9CaWRpcmVjdGlvbmFsSXRlcjI+IF9SZXZJdGVyMjsKCiAgX1Jldkl0ZXIxIF9fcmxhc3QxKF9f
Zmlyc3QxKTsKICBfUmV2SXRlcjIgX19ybGFzdDIoX19maXJzdDIpOwogIF9SZXZJdGVyMSBfX3Jy
ZXN1bHQgPSBzZWFyY2goX1Jldkl0ZXIxKF9fbGFzdDEpLCBfX3JsYXN0MSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9SZXZJdGVyMihfX2xhc3QyKSwgX19ybGFzdDIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwoKICBpZiAoX19ycmVzdWx0ID09IF9fcmxh
c3QxKQogICAgcmV0dXJuIF9fbGFzdDE7CiAgZWxzZSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIx
IF9fcmVzdWx0ID0gX19ycmVzdWx0LmJhc2UoKTsKICAgIGFkdmFuY2UoX19yZXN1bHQsIC1kaXN0
YW5jZShfX2ZpcnN0MiwgX19sYXN0MikpOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KfQoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KaW5saW5l
IF9Gb3J3YXJkSXRlcjEKZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJ
dGVyMSBfX2xhc3QxLAogICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0
ZXIyIF9fbGFzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHJl
dHVybiBfX2ZpbmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKICAg
ICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwKICAgICAgICAg
ICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QyKSk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyLAogICAgICAgICAgY2xhc3Mg
X0JpbmFyeVByZWRpY2F0ZT4KaW5saW5lIF9Gb3J3YXJkSXRlcjEKZmluZF9lbmQoX0ZvcndhcmRJ
dGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICBfRm9yd2FyZEl0
ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgIF9CaW5hcnlQcmVk
aWNhdGUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBy
ZXR1cm4gX19maW5kX2VuZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCiAg
ICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSksCiAgICAgICAg
ICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MiksCiAgICAgICAgICAgICAg
ICAgICAgX19jb21wKTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg
Y2xhc3MgX0Rpc3RhbmNlPgpib29sIF9faXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0
LCBfRGlzdGFuY2UgX19uKQp7CiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gMDsKICBmb3IgKF9EaXN0
YW5jZSBfX2NoaWxkID0gMTsgX19jaGlsZCA8IF9fbjsgKytfX2NoaWxkKSB7CiAgICBpZiAoX19m
aXJzdFtfX3BhcmVudF0gPCBfX2ZpcnN0W19fY2hpbGRdKQogICAgICByZXR1cm4gZmFsc2U7CiAg
ICBpZiAoKF9fY2hpbGQgJiAxKSA9PSAwKQogICAgICArK19fcGFyZW50OwogIH0KICByZXR1cm4g
dHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFu
Y2UsIGNsYXNzIF9TdHJpY3RXZWFrT3JkZXJpbmc+CmJvb2wgX19pc19oZWFwKF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wLAogICAgICAgICAgICAg
ICBfRGlzdGFuY2UgX19uKQp7CiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gMDsKICBmb3IgKF9EaXN0
YW5jZSBfX2NoaWxkID0gMTsgX19jaGlsZCA8IF9fbjsgKytfX2NoaWxkKSB7CiAgICBpZiAoX19j
b21wKF9fZmlyc3RbX19wYXJlbnRdLCBfX2ZpcnN0W19fY2hpbGRdKSkKICAgICAgcmV0dXJuIGZh
bHNlOwogICAgaWYgKChfX2NoaWxkICYgMSkgPT0gMCkKICAgICAgKytfX3BhcmVudDsKICB9CiAg
cmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5l
IGJvb2wgaXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1cm4g
X19pc19oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIF9fZmlyc3QpOwp9CgoKdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5nPgppbmxpbmUgYm9v
bCBpc19oZWFwKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICBfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCkKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICByZXR1cm4gX19pc19oZWFwKF9f
Zmlyc3QsIF9fY29tcCwgX19sYXN0IC0gX19maXJzdCk7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyPgpib29sIGlzX3NvcnRlZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh
cmRJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9f
bGFzdCkKICAgIHJldHVybiB0cnVlOwoKICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsK
ICBmb3IgKCsrX19uZXh0OyBfX25leHQgIT0gX19sYXN0OyBfX2ZpcnN0ID0gX19uZXh0LCArK19f
bmV4dCkgewogICAgaWYgKCpfX25leHQgPCAqX19maXJzdCkKICAgICAgcmV0dXJuIGZhbHNlOwog
IH0KCiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz
IF9TdHJpY3RXZWFrT3JkZXJpbmc+CmJvb2wgaXNfc29ydGVkKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfU3RyaWN0V2Vha09yZGVyaW5n
IF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp
CiAgICByZXR1cm4gdHJ1ZTsKCiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgZm9y
ICgrK19fbmV4dDsgX19uZXh0ICE9IF9fbGFzdDsgX19maXJzdCA9IF9fbmV4dCwgKytfX25leHQp
IHsKICAgIGlmIChfX2NvbXAoKl9fbmV4dCwgKl9fZmlyc3QpKQogICAgICByZXR1cm4gZmFsc2U7
CiAgfQoKICByZXR1cm4gdHJ1ZTsKfQoKfQojIDM3ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2FsZ29yaXRobS5o
IiAyIDMKIyAzICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My4wL2luY2x1ZGUvZysrL2FsZ29yaXRobSIgMiAzCiMgNjggIlBsYXRmb3JtU3VwcG9ydC9TVExI
ZWxwZXIuaHBwIiAyCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMC9pbmNsdWRlL2crKy9mdW5jdGlvbmFsIiAxIDMKIyA2OSAiUGxhdGZvcm1TdXBw
b3J0L1NUTEhlbHBlci5ocHAiIDIKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+CgoKCnN0cnVjdCBE
ZWxldGVGdW5jdG9yIDogcHVibGljIHN0ZDo6dW5hcnlfZnVuY3Rpb248Y29uc3QgVCosIHZvaWQ+
Cgp7CgoKCiAgICAgICAgdHlwZWRlZiBzdGQ6OnVuYXJ5X2Z1bmN0aW9uPGNvbnN0IFQqLCB2b2lk
PiBCYXNlQ2xhc3NUeXBlOwoKCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBCYXNlQ2xhc3NUeXBl
OjpyZXN1bHRfdHlwZSByZXN1bHRfdHlwZTsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEJhc2VD
bGFzc1R5cGU6OmFyZ3VtZW50X3R5cGUgYXJndW1lbnRfdHlwZTsKCgoKCgoKICAgICAgICByZXN1
bHRfdHlwZQogICAgICAgIG9wZXJhdG9yKCkoYXJndW1lbnRfdHlwZSB0aGVQb2ludGVyKSBjb25z
dAogICAgICAgIHsKCgoKICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGVQb2ludGVyOwoKICAgICAg
ICB9Cn07CiMgMTkwICJQbGF0Zm9ybVN1cHBvcnQvU1RMSGVscGVyLmhwcCIKdGVtcGxhdGUgPGNs
YXNzIFQ+CgoKCnN0cnVjdCBNYXBWYWx1ZURlbGV0ZUZ1bmN0b3IgOiBwdWJsaWMgc3RkOjp1bmFy
eV9mdW5jdGlvbjxjb25zdCB0eXBlbmFtZSBUOjp2YWx1ZV90eXBlJiwgdm9pZD4KCnsKCgoKICAg
ICAgICB0eXBlZGVmIHN0ZDo6dW5hcnlfZnVuY3Rpb248Y29uc3QgdHlwZW5hbWUgVDo6dmFsdWVf
dHlwZSYsIHZvaWQ+IEJhc2VDbGFzc1R5cGU7CgoKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEJh
c2VDbGFzc1R5cGU6OnJlc3VsdF90eXBlIHJlc3VsdF90eXBlOwogICAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgQmFzZUNsYXNzVHlwZTo6YXJndW1lbnRfdHlwZSBhcmd1bWVudF90eXBlOwoKCgoKCgoK
ICAgICAgICByZXN1bHRfdHlwZQogICAgICAgIG9wZXJhdG9yKCkoYXJndW1lbnRfdHlwZSB0aGVQ
YWlyKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGVQYWlyLnNlY29u
ZDsKICAgICAgICB9Cn07CgoKCnRlbXBsYXRlPGNsYXNzIFQ+Ck1hcFZhbHVlRGVsZXRlRnVuY3Rv
cjxUPgptYWtlTWFwVmFsdWVEZWxldGVGdW5jdG9yKGNvbnN0IFQmICkKewogICAgICAgIHJldHVy
biBNYXBWYWx1ZURlbGV0ZUZ1bmN0b3I8VD4oKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KCgoK
c3RydWN0IE1hcEtleURlbGV0ZUZ1bmN0b3IgOiBwdWJsaWMgc3RkOjp1bmFyeV9mdW5jdGlvbjxj
b25zdCB0eXBlbmFtZSBUOjp2YWx1ZV90eXBlJiwgdm9pZD4KCnsKCgoKICAgICAgICB0eXBlZGVm
IHN0ZDo6dW5hcnlfZnVuY3Rpb248Y29uc3QgdHlwZW5hbWUgVDo6dmFsdWVfdHlwZSYsIHZvaWQ+
IEJhc2VDbGFzc1R5cGU7CgoKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEJhc2VDbGFzc1R5cGU6
OnJlc3VsdF90eXBlIHJlc3VsdF90eXBlOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQmFzZUNs
YXNzVHlwZTo6YXJndW1lbnRfdHlwZSBhcmd1bWVudF90eXBlOwoKCgoKCgoKICAgICAgICByZXN1
bHRfdHlwZQogICAgICAgIG9wZXJhdG9yKCkoYXJndW1lbnRfdHlwZSB0aGVQYWlyKQogICAgICAg
IHsKICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGVQYWlyLmZpcnN0OwogICAgICAgIH0KfTsKCgoK
dGVtcGxhdGU8Y2xhc3MgVD4KTWFwS2V5RGVsZXRlRnVuY3RvcjxUPgptYWtlTWFwS2V5RGVsZXRl
RnVuY3Rvcihjb25zdCBUJiApCnsKICAgICAgICByZXR1cm4gTWFwS2V5RGVsZXRlRnVuY3RvcjxU
PigpOwp9CiMgMjc5ICJQbGF0Zm9ybVN1cHBvcnQvU1RMSGVscGVyLmhwcCIKdGVtcGxhdGU8Y2xh
c3MgVD4KCgoKc3RydWN0IGxlc3NfbnVsbF90ZXJtaW5hdGVkX2FycmF5cyA6IHB1YmxpYyBzdGQ6
OmJpbmFyeV9mdW5jdGlvbjxjb25zdCBUKiwgY29uc3QgVCosIGJvb2w+Cgp7CgoKCiAgICAgICAg
dHlwZWRlZiBzdGQ6OmJpbmFyeV9mdW5jdGlvbjxjb25zdCBUKiwgY29uc3QgVCosIGJvb2w+IEJh
c2VDbGFzc1R5cGU7CgoKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEJhc2VDbGFzc1R5cGU6OnJl
c3VsdF90eXBlIHJlc3VsdF90eXBlOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQmFzZUNsYXNz
VHlwZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSBmaXJzdF9hcmd1bWVudF90eXBlOwogICAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgQmFzZUNsYXNzVHlwZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgc2Vjb25k
X2FyZ3VtZW50X3R5cGU7CiMgMzA0ICJQbGF0Zm9ybVN1cHBvcnQvU1RMSGVscGVyLmhwcCIKICAg
ICAgICByZXN1bHRfdHlwZQogICAgICAgIG9wZXJhdG9yKCkoCiAgICAgICAgICAgICAgICAgICAg
ICAgIGZpcnN0X2FyZ3VtZW50X3R5cGUgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBz
ZWNvbmRfYXJndW1lbnRfdHlwZSB0aGVSSFMpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgICAg
ICAgd2hpbGUoKnRoZUxIUyAmJiAqdGhlUkhTKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoKnRoZUxIUyAhPSAqdGhlUkhTKQogICAgICAgICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlTEhTKys7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlUkhTKys7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gKnRoZUxI
UyA8ICp0aGVSSFMgPyB0cnVlIDogZmFsc2U7CiAgICAgICAgfQp9OwoKCgp0ZW1wbGF0ZTxjbGFz
cyBDb2xsZWN0aW9uVHlwZT4KY2xhc3MgQ29sbGVjdGlvbkNsZWFyR3VhcmQKewpwdWJsaWM6Cgog
ICAgICAgIENvbGxlY3Rpb25DbGVhckd1YXJkKENvbGxlY3Rpb25UeXBlJiB0aGVDb2xsZWN0aW9u
KSA6CiAgICAgICAgICAgICAgICBtX2NvbGxlY3Rpb24oJnRoZUNvbGxlY3Rpb24pCiAgICAgICAg
ewogICAgICAgIH0KCiAgICAgICAgfkNvbGxlY3Rpb25DbGVhckd1YXJkKCkKICAgICAgICB7CiAg
ICAgICAgICAgICAgICBpZiAobV9jb2xsZWN0aW9uICE9IDApCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIG1fY29sbGVjdGlvbi0+Y2xlYXIoKTsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICB9CgogICAgICAgIHZvaWQKICAgICAgICByZWxlYXNlKCkKICAgICAgICB7
CiAgICAgICAgICAgICAgICBtX2NvbGxlY3Rpb24gPSAwOwogICAgICAgIH0KCnByaXZhdGU6CgoK
ICAgICAgICBDb2xsZWN0aW9uQ2xlYXJHdWFyZChjb25zdCBDb2xsZWN0aW9uQ2xlYXJHdWFyZDxD
b2xsZWN0aW9uVHlwZT4mKTsKCiAgICAgICAgQ29sbGVjdGlvbkNsZWFyR3VhcmQ8Q29sbGVjdGlv
blR5cGU+JgogICAgICAgIG9wZXJhdG9yPShjb25zdCBDb2xsZWN0aW9uQ2xlYXJHdWFyZDxDb2xs
ZWN0aW9uVHlwZT4mKTsKCgogICAgICAgIENvbGxlY3Rpb25UeXBlKiBtX2NvbGxlY3Rpb247Cn07
CgoKCnRlbXBsYXRlPGNsYXNzIENvbGxlY3Rpb25UeXBlLCBjbGFzcyBEZWxldGVGdW5jdG9yVHlw
ZT4KY2xhc3MgQ29sbGVjdGlvbkRlbGV0ZUd1YXJkCnsKcHVibGljOgoKICAgICAgICBDb2xsZWN0
aW9uRGVsZXRlR3VhcmQoQ29sbGVjdGlvblR5cGUmIHRoZUNvbGxlY3Rpb24pIDoKICAgICAgICAg
ICAgICAgIG1fY29sbGVjdGlvbigmdGhlQ29sbGVjdGlvbikKICAgICAgICB7CiAgICAgICAgfQoK
ICAgICAgICB+Q29sbGVjdGlvbkRlbGV0ZUd1YXJkKCkKICAgICAgICB7CiAgICAgICAgICAgICAg
ICBpZiAobV9jb2xsZWN0aW9uICE9IDApCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAg
ICAgICAgICAgICB1c2luZyBzdGQ6OmZvcl9lYWNoOwoKCgogICAgICAgICAgICAgICAgICAgICAg
ICBmb3JfZWFjaChtX2NvbGxlY3Rpb24tPmJlZ2luKCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9jb2xsZWN0aW9uLT5lbmQoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBEZWxldGVGdW5jdG9yVHlwZSgpKTsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICB9CgogICAgICAgIHZvaWQKICAgICAgICByZWxlYXNlKCkKICAgICAgICB7
CiAgICAgICAgICAgICAgICBtX2NvbGxlY3Rpb24gPSAwOwogICAgICAgIH0KCnByaXZhdGU6CgoK
ICAgICAgICBDb2xsZWN0aW9uRGVsZXRlR3VhcmQoY29uc3QgQ29sbGVjdGlvbkRlbGV0ZUd1YXJk
PENvbGxlY3Rpb25UeXBlLCBEZWxldGVGdW5jdG9yVHlwZT4mKTsKCiAgICAgICAgQ29sbGVjdGlv
bkRlbGV0ZUd1YXJkPENvbGxlY3Rpb25UeXBlLCBEZWxldGVGdW5jdG9yVHlwZT4mCiAgICAgICAg
b3BlcmF0b3I9KGNvbnN0IENvbGxlY3Rpb25EZWxldGVHdWFyZDxDb2xsZWN0aW9uVHlwZSwgRGVs
ZXRlRnVuY3RvclR5cGU+Jik7CgoKICAgICAgICBDb2xsZWN0aW9uVHlwZSogbV9jb2xsZWN0aW9u
Owp9OwojIDc2ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRG9jdW1lbnQuaHBwIiAy
CiMgMSAiUGxhdGZvcm1TdXBwb3J0L1hhbGFuRE9NU3RyaW5nUG9vbC5ocHAiIDEKIyA2MyAiUGxh
dGZvcm1TdXBwb3J0L1hhbGFuRE9NU3RyaW5nUG9vbC5ocHAiCiMgMSAiUGxhdGZvcm1TdXBwb3J0
L1BsYXRmb3JtU3VwcG9ydERlZmluaXRpb25zLmhwcCIgMQojIDY0ICJQbGF0Zm9ybVN1cHBvcnQv
WGFsYW5ET01TdHJpbmdQb29sLmhwcCIgMgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvZGVxdWUiIDEgMwojIDY4ICJQ
bGF0Zm9ybVN1cHBvcnQvWGFsYW5ET01TdHJpbmdQb29sLmhwcCIgMgojIDEgIi91c3IvbG9jYWwv
Z2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvbWFwIiAx
IDMKIyA2OSAiUGxhdGZvcm1TdXBwb3J0L1hhbGFuRE9NU3RyaW5nUG9vbC5ocHAiIDIKCgoKIyAx
ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIgMQojIDczICJQbGF0Zm9ybVN1
cHBvcnQvWGFsYW5ET01TdHJpbmdQb29sLmhwcCIgMgoKCgpjbGFzcyBYYWxhbkRPTVN0cmluZ1Bv
b2wKewpwdWJsaWM6CgogICAgICAgIGNsYXNzIFN0cmluZ0tleQogICAgICAgIHsKICAgICAgICBw
dWJsaWM6CgogICAgICAgICAgICAgICAgZXhwbGljaXQKICAgICAgICAgICAgICAgIFN0cmluZ0tl
eSgpOwoKICAgICAgICAgICAgICAgIFN0cmluZ0tleSgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGhlTGVuZ3RoKSA6CiAgICAgICAgICAgICAgICAg
ICAgICAgIG1fc3RyaW5nKHRoZVN0cmluZyksCiAgICAgICAgICAgICAgICAgICAgICAgIG1fbGVu
Z3RoKHRoZUxlbmd0aCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICB+U3RyaW5nS2V5KCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICBib29sCiAgICAgICAgICAgICAgICBvcGVyYXRvcjwoY29uc3Qg
U3RyaW5nS2V5JiB0aGVSSFMpIGNvbnN0OwoKICAgICAgICBwcml2YXRlOgoKICAgICAgICAgICAg
ICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogbV9zdHJpbmc7CgogICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IG1fbGVuZ3RoOwogICAgICAgIH07CiMgMTE3ICJQbGF0Zm9ybVN1cHBvcnQvWGFsYW5E
T01TdHJpbmdQb29sLmhwcCIKICAgICAgICB0eXBlZGVmIHN0ZDo6ZGVxdWU8WGFsYW5ET01TdHJp
bmc+IFhhbGFuRE9NU3RyaW5nQ29sbGVjdGlvblR5cGU7CgogICAgICAgIHR5cGVkZWYgc3RkOjpt
YXA8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nS2V5LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFhhbGFuRE9NU3RyaW5nQ29sbGVjdGlvblR5cGU6OmNvbnN0
X2l0ZXJhdG9yPiBJdGVyYXRvck1hcFR5cGU7CgoKICAgICAgICB0eXBlZGVmIFhhbGFuRE9NU3Ry
aW5nQ29sbGVjdGlvblR5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CgogICAgICAgIGV4cGxpY2l0
CiAgICAgICAgWGFsYW5ET01TdHJpbmdQb29sKCk7CgogICAgICAgIHZpcnR1YWwKICAgICAgICB+
WGFsYW5ET01TdHJpbmdQb29sKCk7CgoKCgoKCiAgICAgICAgdmlydHVhbCB2b2lkCiAgICAgICAg
Y2xlYXIoKTsKCgoKCgoKICAgICAgICB2aXJ0dWFsIHNpemVfdHlwZQogICAgICAgIHNpemUoKSBj
b25zdDsKCgoKCgoKCiAgICAgICAgdmlydHVhbCBjb25zdCBYYWxhbkRPTVN0cmluZyYKICAgICAg
ICBnZXQoY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVN0cmluZyk7CiMgMTY0ICJQbGF0Zm9ybVN1
cHBvcnQvWGFsYW5ET01TdHJpbmdQb29sLmhwcCIKICAgICAgICB2aXJ0dWFsIGNvbnN0IFhhbGFu
RE9NU3RyaW5nJgogICAgICAgIGdldCgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFs
YW5ET01DaGFyKiB0aGVTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCB0aGVMZW5ndGggPSB1bnNpZ25lZCgtMSkpOwoKcHJpdmF0ZToKCgogICAgICAgIFhhbGFuRE9N
U3RyaW5nUG9vbChjb25zdCBYYWxhbkRPTVN0cmluZ1Bvb2wmKTsKCiAgICAgICAgWGFsYW5ET01T
dHJpbmdQb29sJgogICAgICAgIG9wZXJhdG9yPShjb25zdCBYYWxhbkRPTVN0cmluZ1Bvb2wmKTsK
CiAgICAgICAgYm9vbAogICAgICAgIG9wZXJhdG9yPT0oY29uc3QgWGFsYW5ET01TdHJpbmdQb29s
JikgY29uc3Q7CgoKICAgICAgICBYYWxhbkRPTVN0cmluZ0NvbGxlY3Rpb25UeXBlIG1fc3RyaW5n
czsKCiAgICAgICAgSXRlcmF0b3JNYXBUeXBlIG1faW5kZXg7CgogICAgICAgIHN0YXRpYyBjb25z
dCBYYWxhbkRPTVN0cmluZyBzX2VtcHR5U3RyaW5nOwp9OwojIDc3ICJYYWxhblNvdXJjZVRyZWUv
WGFsYW5Tb3VyY2VUcmVlRG9jdW1lbnQuaHBwIiAyCgoKCiMgMSAiWGFsYW5Tb3VyY2VUcmVlL1hh
bGFuU291cmNlVHJlZUF0dHJpYnV0ZUFsbG9jYXRvci5ocHAiIDEKIyA2MyAiWGFsYW5Tb3VyY2VU
cmVlL1hhbGFuU291cmNlVHJlZUF0dHJpYnV0ZUFsbG9jYXRvci5ocHAiCiMgMSAiWGFsYW5Tb3Vy
Y2VUcmVlL1hhbGFuU291cmNlVHJlZURlZmluaXRpb25zLmhwcCIgMQojIDY0ICJYYWxhblNvdXJj
ZVRyZWUvWGFsYW5Tb3VyY2VUcmVlQXR0cmlidXRlQWxsb2NhdG9yLmhwcCIgMgoKCgojIDEgIlBs
YXRmb3JtU3VwcG9ydC9BcmVuYUFsbG9jYXRvci5ocHAiIDEKIyA2MyAiUGxhdGZvcm1TdXBwb3J0
L0FyZW5hQWxsb2NhdG9yLmhwcCIKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2FsZ29yaXRobSIgMSAzCiMgNjQgIlBsYXRm
b3JtU3VwcG9ydC9BcmVuYUFsbG9jYXRvci5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL2djYzMvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL3ZlY3RvciIgMSAzCiMg
NjUgIlBsYXRmb3JtU3VwcG9ydC9BcmVuYUFsbG9jYXRvci5ocHAiIDIKCgoKIyAxICJQbGF0Zm9y
bVN1cHBvcnQvQXJlbmFCbG9jay5ocHAiIDEKIyA2MyAiUGxhdGZvcm1TdXBwb3J0L0FyZW5hQmxv
Y2suaHBwIgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8zLjAvaW5jbHVkZS9nKysvYWxnb3JpdGhtIiAxIDMKIyA2NCAiUGxhdGZvcm1TdXBwb3J0L0Fy
ZW5hQmxvY2suaHBwIiAyCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9jYXNzZXJ0IiAxIDMKCiMgMSAiL3Vzci9sb2NhbC9n
Y2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0
ZF9jYXNzZXJ0LmgiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1w
Yy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2Nhc3NlcnQuaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9hc3NlcnQuaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2Fzc2Vy
dC5oIiAyIDMKIyA1OCAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzCmV4dGVybiAiQyIgewoKCmV4
dGVybiB2b2lkIF9fYXNzZXJ0X2ZhaWwgKF9fY29uc3QgY2hhciAqX19hc3NlcnRpb24sIF9fY29u
c3QgY2hhciAqX19maWxlLCB1bnNpZ25lZCBpbnQgX19saW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVu
Y3Rpb24pIHRocm93ICgpCgoKCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoK
CmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0sIF9fY29uc3Qg
Y2hhciAqX19maWxlLCB1bnNpZ25lZCBpbnQgX19saW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rp
b24pIHRocm93ICgpCgoKCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKfQoj
IDM4ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvZysrL2JpdHMvc3RkX2Nhc3NlcnQuaCIgMiAzCiMgMyAiL3Vzci9sb2NhbC9nY2MzL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9jYXNzZXJ0IiAyIDMK
IyA2NSAiUGxhdGZvcm1TdXBwb3J0L0FyZW5hQmxvY2suaHBwIiAyCiMgMSAiL3Vzci9sb2NhbC9n
Y2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9zZXQiIDEg
MwoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w
L2luY2x1ZGUvZysrL2JpdHMvc3RkX3NldC5oIiAxIDMKIyAzMSAiL3Vzci9sb2NhbC9nY2MzL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9zZXQu
aCIgMwoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF90cmVlLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2dj
YzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3Rk
X3NldC5oIiAyIDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9zZXQuaCIgMSAzCiMgMzQgIi91c3IvbG9j
YWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0
cy9zdGxfc2V0LmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvY29uY2VwdF9jaGVjay5oIiAxIDMKIyAzNSAi
L3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl
L2crKy9iaXRzL3N0bF9zZXQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxhdGUgPGNs
YXNzIF9LZXksIGNsYXNzIF9Db21wYXJlID0gbGVzczxfS2V5PiwKICAgICAgICAgIGNsYXNzIF9B
bGxvYyA9IGFsbG9jYXRvcjxfS2V5PiA+CmNsYXNzIHNldDsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5
LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpOwoKdGVtcGxhdGUgPGNsYXNz
IF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9y
PChjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpOwoKCnRlbXBsYXRlIDxj
bGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgpjbGFzcyBzZXQKewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCnB1YmxpYzoKCiAgdHlwZWRlZiBfS2V5IGtleV90eXBlOwog
IHR5cGVkZWYgX0tleSB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0NvbXBhcmUga2V5X2NvbXBhcmU7
CiAgdHlwZWRlZiBfQ29tcGFyZSB2YWx1ZV9jb21wYXJlOwpwcml2YXRlOgogIHR5cGVkZWYgX1Ji
X3RyZWU8a2V5X3R5cGUsIHZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgIF9JZGVudGl0eTx2
YWx1ZV90eXBlPiwga2V5X2NvbXBhcmUsIF9BbGxvYz4gX1JlcF90eXBlOwogIF9SZXBfdHlwZSBf
TV90OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3BvaW50ZXIg
cG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25z
dF9wb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZWZlcmVuY2Ug
cmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZWZlcmVuY2Ug
Y29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9pdGVy
YXRvciBpdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRlcmF0
b3IgY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBf
dHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5
cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYg
dHlwZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5
cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsK
CgoKICBzZXQoKSA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkge30KICBleHBs
aWNpdCBzZXQoY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgICAgICAgICAgY29uc3QgYWxs
b2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBf
X2EpIHt9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBzZXQoX0lucHV0SXRl
cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgOiBfTV90KF9Db21wYXJl
KCksIGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBf
X2xhc3QpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBzZXQoX0lucHV0
SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBjb25zdCBfQ29tcGFyZSYg
X19jb21wLAogICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUo
KSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkgeyBfTV90Lmluc2VydF91bmlxdWUoX19maXJzdCwg
X19sYXN0KTsgfQoKICBzZXQoY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194KSA6
IF9NX3QoX194Ll9NX3QpIHt9CiAgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgb3BlcmF0b3I9
KGNvbnN0IHNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jPiYgX194KQogIHsKICAgIF9NX3QgPSBf
X3guX01fdDsKICAgIHJldHVybiAqdGhpczsKICB9CgoKCiAga2V5X2NvbXBhcmUga2V5X2NvbXAo
KSBjb25zdCB7IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0KICB2YWx1ZV9jb21wYXJlIHZhbHVl
X2NvbXAoKSBjb25zdCB7IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0KICBhbGxvY2F0b3JfdHlw
ZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fdC5nZXRfYWxsb2NhdG9yKCk7IH0K
CiAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KICBpdGVy
YXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV90LmVuZCgpOyB9CiAgcmV2ZXJzZV9pdGVyYXRv
ciByYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CiAgcmV2ZXJzZV9pdGVy
YXRvciByZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KICBib29sIGVtcHR5KCkg
Y29uc3QgeyByZXR1cm4gX01fdC5lbXB0eSgpOyB9CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7
IHJldHVybiBfTV90LnNpemUoKTsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIF9NX3QubWF4X3NpemUoKTsgfQogIHZvaWQgc3dhcChzZXQ8X0tleSxfQ29tcGFyZSxfQWxs
b2M+JiBfX3gpIHsgX01fdC5zd2FwKF9feC5fTV90KTsgfQoKCiAgcGFpcjxpdGVyYXRvcixib29s
PiBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX194KSB7CiAgICBwYWlyPHR5cGVuYW1lIF9SZXBf
dHlwZTo6aXRlcmF0b3IsIGJvb2w+IF9fcCA9IF9NX3QuaW5zZXJ0X3VuaXF1ZShfX3gpOwogICAg
cmV0dXJuIHBhaXI8aXRlcmF0b3IsIGJvb2w+KF9fcC5maXJzdCwgX19wLnNlY29uZCk7CiAgfQog
IGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBf
X3gpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjppdGVyYXRvciBfUmVwX2l0ZXJh
dG9yOwogICAgcmV0dXJuIF9NX3QuaW5zZXJ0X3VuaXF1ZSgoX1JlcF9pdGVyYXRvciYpX19wb3Np
dGlvbiwgX194KTsKICB9CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQg
aW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewog
ICAgX01fdC5pbnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7CiAgfQogIHZvaWQgZXJhc2Uo
aXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6Oml0
ZXJhdG9yIF9SZXBfaXRlcmF0b3I7CiAgICBfTV90LmVyYXNlKChfUmVwX2l0ZXJhdG9yJilfX3Bv
c2l0aW9uKTsKICB9CiAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpIHsKICAg
IHJldHVybiBfTV90LmVyYXNlKF9feCk7CiAgfQogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19maXJz
dCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRl
cmF0b3IgX1JlcF9pdGVyYXRvcjsKICAgIF9NX3QuZXJhc2UoKF9SZXBfaXRlcmF0b3ImKV9fZmly
c3QsIChfUmVwX2l0ZXJhdG9yJilfX2xhc3QpOwogIH0KICB2b2lkIGNsZWFyKCkgeyBfTV90LmNs
ZWFyKCk7IH0KCgoKICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsg
cmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CiAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtleV90eXBl
JiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90LmZpbmQoX194KSA9PSBfTV90LmVuZCgpID8g
MCA6IDE7CiAgfQogIGl0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNv
bnN0IHsKICAgIHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7CiAgfQogIGl0ZXJhdG9yIHVw
cGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90LnVw
cGVyX2JvdW5kKF9feCk7CiAgfQogIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+IGVxdWFsX3Jhbmdl
KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90LmVxdWFsX3Jhbmdl
KF9feCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0sxLCBjbGFzcyBfQzEsIGNsYXNzIF9BMT4K
ICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IChjb25zdCBzZXQ8X0sxLF9DMSxfQTE+JiwgY29uc3Qg
c2V0PF9LMSxfQzEsX0ExPiYpOwogIHRlbXBsYXRlIDxjbGFzcyBfSzEsIGNsYXNzIF9DMSwgY2xh
c3MgX0ExPgogIGZyaWVuZCBib29sIG9wZXJhdG9yPCAoY29uc3Qgc2V0PF9LMSxfQzEsX0ExPiYs
IGNvbnN0IHNldDxfSzEsX0MxLF9BMT4mKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFz
cyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHNl
dDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPT0g
X195Ll9NX3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3Mg
X0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0Fs
bG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUs
X0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV90IDwgX195Ll9NX3Q7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICBy
ZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21w
YXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBzZXQ8X0tleSxf
Q29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXQ8X0tl
eSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wg
b3BlcmF0b3I8PShjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAg
cmV0dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21w
YXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3Qgc2V0PF9LZXks
X0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNldDxf
S2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUg
dm9pZCBzd2FwKHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAg
ICBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICBfX3guc3dhcChfX3kpOwp9Cgp9
CiMgMzYgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAv
aW5jbHVkZS9nKysvYml0cy9zdGRfc2V0LmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfbXVsdGlz
ZXQuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfbXVsdGlzZXQuaCIgMwojIDEgIi91c3IvbG9j
YWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0
cy9jb25jZXB0X2NoZWNrLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX211bHRpc2V0LmgiIDIg
MwoKbmFtZXNwYWNlIHN0ZAp7CgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFy
ZSA9IGxlc3M8X0tleT4sCiAgICAgICAgICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8X0tleT4g
PgpjbGFzcyBtdWx0aXNldDsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwg
Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IG11bHRpc2V0PF9LZXks
X0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRp
c2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj
bGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3Qg
bXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSk7Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KY2xhc3MgbXVsdGlzZXQK
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCnB1YmxpYzoKCgoKICB0eXBlZGVmIF9LZXkga2V5
X3R5cGU7CiAgdHlwZWRlZiBfS2V5IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfQ29tcGFyZSBrZXlf
Y29tcGFyZTsKICB0eXBlZGVmIF9Db21wYXJlIHZhbHVlX2NvbXBhcmU7CnByaXZhdGU6CiAgdHlw
ZWRlZiBfUmJfdHJlZTxrZXlfdHlwZSwgdmFsdWVfdHlwZSwKICAgICAgICAgICAgICAgICAgX0lk
ZW50aXR5PHZhbHVlX3R5cGU+LCBrZXlfY29tcGFyZSwgX0FsbG9jPiBfUmVwX3R5cGU7CiAgX1Jl
cF90eXBlIF9NX3Q7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3Rf
cG9pbnRlciBwb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9wb2lu
dGVyIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3Jl
ZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3Jl
ZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25z
dF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6
Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5h
bWUgX1JlcF90eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0
b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAg
dHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5
cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRv
cl90eXBlOwoKCgogIG11bHRpc2V0KCkgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBl
KCkpIHt9CiAgZXhwbGljaXQgbXVsdGlzZXQoY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAg
ICAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUo
KSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkge30KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXJhdG9yPgogIG11bHRpc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9y
IF9fbGFzdCkKICAgIDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgeyBf
TV90Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyYXRvcj4KICBtdWx0aXNldChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAg
ICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDog
X01fdChfX2NvbXAsIF9fYSkgeyBfTV90Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9
CgogIG11bHRpc2V0KGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194KSA6
IF9NX3QoX194Ll9NX3QpIHt9CgogIG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYKICBv
cGVyYXRvcj0oY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsKICAg
IF9NX3QgPSBfX3guX01fdDsKICAgIHJldHVybiAqdGhpczsKICB9CgoKCiAga2V5X2NvbXBhcmUg
a2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0KICB2YWx1ZV9jb21w
YXJlIHZhbHVlX2NvbXAoKSBjb25zdCB7IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0KICBhbGxv
Y2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fdC5nZXRfYWxsb2Nh
dG9yKCk7IH0KCiAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90LmJlZ2luKCk7
IH0KICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV90LmVuZCgpOyB9CiAgcmV2ZXJz
ZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CiAgcmV2
ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KICBib29s
IGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01fdC5lbXB0eSgpOyB9CiAgc2l6ZV90eXBlIHNpemUo
KSBjb25zdCB7IHJldHVybiBfTV90LnNpemUoKTsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIF9NX3QubWF4X3NpemUoKTsgfQogIHZvaWQgc3dhcChtdWx0aXNldDxfS2V5
LF9Db21wYXJlLF9BbGxvYz4mIF9feCkgeyBfTV90LnN3YXAoX194Ll9NX3QpOyB9CgoKICBpdGVy
YXRvciBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX194KSB7CiAgICByZXR1cm4gX01fdC5pbnNl
cnRfZXF1YWwoX194KTsKICB9CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24s
IGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6
Oml0ZXJhdG9yIF9SZXBfaXRlcmF0b3I7CiAgICByZXR1cm4gX01fdC5pbnNlcnRfZXF1YWwoKF9S
ZXBfaXRlcmF0b3ImKV9fcG9zaXRpb24sIF9feCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0
SXRlcmF0b3IgX19sYXN0KSB7CiAgICBfTV90Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3Qp
OwogIH0KICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX1JlcF90eXBlOjppdGVyYXRvciBfUmVwX2l0ZXJhdG9yOwogICAgX01fdC5lcmFzZSgo
X1JlcF9pdGVyYXRvciYpX19wb3NpdGlvbik7CiAgfQogIHNpemVfdHlwZSBlcmFzZShjb25zdCBr
ZXlfdHlwZSYgX194KSB7CiAgICByZXR1cm4gX01fdC5lcmFzZShfX3gpOwogIH0KICB2b2lkIGVy
YXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAgdHlwZWRlZiB0eXBl
bmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yIF9SZXBfaXRlcmF0b3I7CiAgICBfTV90LmVyYXNlKChf
UmVwX2l0ZXJhdG9yJilfX2ZpcnN0LCAoX1JlcF9pdGVyYXRvciYpX19sYXN0KTsKICB9CiAgdm9p
ZCBjbGVhcigpIHsgX01fdC5jbGVhcigpOyB9CgoKCiAgaXRlcmF0b3IgZmluZChjb25zdCBrZXlf
dHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQogIHNpemVfdHlwZSBj
b3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmNvdW50KF9feCk7
IH0KICBpdGVyYXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAg
ICByZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOwogIH0KICBpdGVyYXRvciB1cHBlcl9ib3Vu
ZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC51cHBlcl9ib3Vu
ZChfX3gpOwogIH0KICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBr
ZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOwog
IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9LMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5k
IGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgbXVsdGlzZXQ8X0sxLF9DMSxfQTE+JiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aXNldDxfSzEsX0MxLF9BMT4mKTsKICB0ZW1wbGF0
ZSA8Y2xhc3MgX0sxLCBjbGFzcyBfQzEsIGNsYXNzIF9BMT4KICBmcmllbmQgYm9vbCBvcGVyYXRv
cjwgKGNvbnN0IG11bHRpc2V0PF9LMSxfQzEsX0ExPiYsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBtdWx0aXNldDxfSzEsX0MxLF9BMT4mKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5
LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0
dXJuIF9feC5fTV90ID09IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3Mg
X0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG11bHRp
c2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29u
c3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9N
X3QgPCBfX3kuX01fdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBj
bGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgbXVsdGlzZXQ8X0tleSxf
Q29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGlz
ZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+Cmlu
bGluZSBib29sIG9wZXJhdG9yPihjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4m
IF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUs
X0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9L
ZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPD0o
Y29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICBy
ZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBh
cmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBtdWx0aXNldDxf
S2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBt
dWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9f
eSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9j
PgppbmxpbmUgdm9pZCBzd2FwKG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAog
ICAgICAgICAgICAgICAgIG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAg
X194LnN3YXAoX195KTsKfQoKfQojIDM3ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX3NldC5oIiAyIDMKIyAzICIv
dXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUv
ZysrL3NldCIgMiAzCiMgNjYgIlBsYXRmb3JtU3VwcG9ydC9BcmVuYUJsb2NrLmhwcCIgMgojIDEg
Ii91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk
ZS9nKysvbWVtb3J5IiAxIDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9tZW1vcnkuaCIgMSAzCiMgMTkg
Ii91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk
ZS9nKysvYml0cy9zdGRfbWVtb3J5LmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvYmFzZS5o
IiAxIDMKIyAyMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9n
Y2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0
bF9hbGxvYy5oIiAxIDMKIyAyMiAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzCiMgMSAiL3Vz
ci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2cr
Ky9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgMjMgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfbWVtb3J5Lmgi
IDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjAvaW5jbHVkZS9nKysvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAxIDMKIyAyNCAi
L3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl
L2crKy9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF90ZW1wYnVmLmgi
IDEgMwojIDI1ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX21lbW9yeS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2dj
YzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3Rs
X3VuaW5pdGlhbGl6ZWQuaCIgMSAzCiMgMjYgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfbWVtb3J5LmgiIDIgMwoj
IDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5j
bHVkZS9nKysvYml0cy9zdGxfcmF3X3N0b3JhZ2VfaXRlci5oIiAxIDMKIyAzNCAiL3Vzci9sb2Nh
bC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRz
L3N0bF9yYXdfc3RvcmFnZV9pdGVyLmgiIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgpjbGFzcyByYXdfc3RvcmFnZV9pdGVyYXRv
ciB7CnByb3RlY3RlZDoKICBfRm9yd2FyZEl0ZXJhdG9yIF9NX2l0ZXI7CnB1YmxpYzoKICB0eXBl
ZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lk
IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZv
aWQgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOwoKICBleHBsaWNpdCByYXdfc3Rv
cmFnZV9pdGVyYXRvcihfRm9yd2FyZEl0ZXJhdG9yIF9feCkgOiBfTV9pdGVyKF9feCkge30KICBy
YXdfc3RvcmFnZV9pdGVyYXRvciYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICByYXdf
c3RvcmFnZV9pdGVyYXRvciYgb3BlcmF0b3I9KGNvbnN0IF9UcCYgX19lbGVtZW50KSB7CiAgICBj
b25zdHJ1Y3QoJipfTV9pdGVyLCBfX2VsZW1lbnQpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBy
YXdfc3RvcmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+JiBvcGVyYXRvcisrKCkg
ewogICAgKytfTV9pdGVyOwogICAgcmV0dXJuICp0aGlzOwogIH0KICByYXdfc3RvcmFnZV9pdGVy
YXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+IG9wZXJhdG9yKysoaW50KSB7CiAgICByYXdfc3Rv
cmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+IF9fdG1wID0gKnRoaXM7CiAgICAr
K19NX2l0ZXI7CiAgICByZXR1cm4gX190bXA7CiAgfQp9OwoKCn0KIyAyNyAiL3Vzci9sb2NhbC9n
Y2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0
ZF9tZW1vcnkuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiB0ZW1wbGF0ZTxjbGFzcyBfVHAxPiBz
dHJ1Y3QgYXV0b19wdHJfcmVmIHsKICAgX1RwMSogX01fcHRyOwogICBhdXRvX3B0cl9yZWYoX1Rw
MSogX19wKSA6IF9NX3B0cihfX3ApIHt9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBjbGFzcyBh
dXRvX3B0ciB7CnByaXZhdGU6CiAgX1RwKiBfTV9wdHI7CgpwdWJsaWM6CiAgdHlwZWRlZiBfVHAg
ZWxlbWVudF90eXBlOwoKICBleHBsaWNpdCBhdXRvX3B0cihfVHAqIF9fcCA9IDApIHRocm93KCkg
OiBfTV9wdHIoX19wKSB7fQogIGF1dG9fcHRyKGF1dG9fcHRyJiBfX2EpIHRocm93KCkgOiBfTV9w
dHIoX19hLnJlbGVhc2UoKSkge30KCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IGF1dG9fcHRyKGF1
dG9fcHRyPF9UcDE+JiBfX2EpIHRocm93KCkKICAgIDogX01fcHRyKF9fYS5yZWxlYXNlKCkpIHt9
CgogIGF1dG9fcHRyJiBvcGVyYXRvcj0oYXV0b19wdHImIF9fYSkgdGhyb3coKSB7CiAgICByZXNl
dChfX2EucmVsZWFzZSgpKTsKICAgIHJldHVybiAqdGhpczsKICB9CgogIHRlbXBsYXRlIDxjbGFz
cyBfVHAxPgogIGF1dG9fcHRyJiBvcGVyYXRvcj0oYXV0b19wdHI8X1RwMT4mIF9fYSkgdGhyb3co
KSB7CiAgICByZXNldChfX2EucmVsZWFzZSgpKTsKICAgIHJldHVybiAqdGhpczsKICB9CgoKCgoK
ICB+YXV0b19wdHIoKSB7IGRlbGV0ZSBfTV9wdHI7IH0KCiAgX1RwJiBvcGVyYXRvciooKSBjb25z
dCB0aHJvdygpIHsKICAgIHJldHVybiAqX01fcHRyOwogIH0KICBfVHAqIG9wZXJhdG9yLT4oKSBj
b25zdCB0aHJvdygpIHsKICAgIHJldHVybiBfTV9wdHI7CiAgfQogIF9UcCogZ2V0KCkgY29uc3Qg
dGhyb3coKSB7CiAgICByZXR1cm4gX01fcHRyOwogIH0KICBfVHAqIHJlbGVhc2UoKSB0aHJvdygp
IHsKICAgIF9UcCogX190bXAgPSBfTV9wdHI7CiAgICBfTV9wdHIgPSAwOwogICAgcmV0dXJuIF9f
dG1wOwogIH0KICB2b2lkIHJlc2V0KF9UcCogX19wID0gMCkgdGhyb3coKSB7CiAgICBpZiAoX19w
ICE9IF9NX3B0cikgewogICAgICBkZWxldGUgX01fcHRyOwogICAgICBfTV9wdHIgPSBfX3A7CiAg
ICB9CiAgfQoKCgoKCnB1YmxpYzoKICBhdXRvX3B0cihhdXRvX3B0cl9yZWY8X1RwPiBfX3JlZikg
dGhyb3coKQogICAgOiBfTV9wdHIoX19yZWYuX01fcHRyKSB7fQoKICBhdXRvX3B0ciYgb3BlcmF0
b3I9KGF1dG9fcHRyX3JlZjxfVHA+IF9fcmVmKSB0aHJvdygpIHsKICAgIGlmIChfX3JlZi5fTV9w
dHIgIT0gdGhpcy0+Z2V0KCkpIHsKICAgICAgZGVsZXRlIF9NX3B0cjsKICAgICAgX01fcHRyID0g
X19yZWYuX01fcHRyOwogICAgfQogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgdGVtcGxhdGUgPGNs
YXNzIF9UcDE+IG9wZXJhdG9yIGF1dG9fcHRyX3JlZjxfVHAxPigpIHRocm93KCkKICAgIHsgcmV0
dXJuIGF1dG9fcHRyX3JlZjxfVHA+KHRoaXMtPnJlbGVhc2UoKSk7IH0KICB0ZW1wbGF0ZSA8Y2xh
c3MgX1RwMT4gb3BlcmF0b3IgYXV0b19wdHI8X1RwMT4oKSB0aHJvdygpCiAgICB7IHJldHVybiBh
dXRvX3B0cjxfVHAxPih0aGlzLT5yZWxlYXNlKCkpOyB9Cn07Cgp9CiMgMyAiL3Vzci9sb2NhbC9n
Y2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9tZW1vcnki
IDIgMwojIDY3ICJQbGF0Zm9ybVN1cHBvcnQvQXJlbmFCbG9jay5ocHAiIDIKIyAxMjMgIlBsYXRm
b3JtU3VwcG9ydC9BcmVuYUJsb2NrLmhwcCIKdGVtcGxhdGU8Y2xhc3MgT2JqZWN0VHlwZT4KY2xh
c3MgQXJlbmFCbG9ja0Rlc3Ryb3kKewpwdWJsaWM6CgogICAgICAgIHZvaWQKICAgICAgICBvcGVy
YXRvcigpKE9iamVjdFR5cGUmIHRoZU9iamVjdCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICAg
ICAgICB0aGVPYmplY3QuT2JqZWN0VHlwZTo6fk9iamVjdFR5cGUoKTsKICAgICAgICB9Cn07CgoK
CnRlbXBsYXRlPGNsYXNzIE9iamVjdFR5cGU+CmNsYXNzIEFyZW5hQmxvY2sKewpwdWJsaWM6CgoK
CgoKCiAgICAgICAgdHlwZWRlZiBzdGQ6OmFsbG9jYXRvcjxPYmplY3RUeXBlPiBBbGxvY2F0b3JU
eXBlOwoKCiAgICAgICAgdHlwZWRlZiBBcmVuYUJsb2NrRGVzdHJveTxPYmplY3RUeXBlPiBEZXN0
cm95RnVuY3Rpb25UeXBlOwoKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEFsbG9jYXRvclR5cGU6
OnNpemVfdHlwZSBzaXplX3R5cGU7CgoKCgoKCgogICAgICAgIEFyZW5hQmxvY2soc2l6ZV90eXBl
IHRoZUJsb2NrU2l6ZSkgOgogICAgICAgICAgICAgICAgbV9kZXN0cm95RnVuY3Rpb24oRGVzdHJv
eUZ1bmN0aW9uVHlwZSgpKSwKICAgICAgICAgICAgICAgIG1fb2JqZWN0Q291bnQoMCksCiAgICAg
ICAgICAgICAgICBtX2Jsb2NrU2l6ZSh0aGVCbG9ja1NpemUpLAogICAgICAgICAgICAgICAgbV9v
YmplY3RCbG9jaygwKSwKICAgICAgICAgICAgICAgIG1fYWxsb2NhdG9yKCkKICAgICAgICB7CiAg
ICAgICAgICAgICAgICAoKHZvaWQpICgodGhlQmxvY2tTaXplID4gMCkgPyAwIDogKF9fYXNzZXJ0
X2ZhaWwgKCJ0aGVCbG9ja1NpemUgPiAwIiwgIlBsYXRmb3JtU3VwcG9ydC9BcmVuYUJsb2NrLmhw
cCIsIDE2NywgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgICAgfQoKICAgICAgICB2
aXJ0dWFsCiAgICAgICAgfkFyZW5hQmxvY2soKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGRl
c3Ryb3lBbGwoKTsKCgogICAgICAgICAgICAgICAgbV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShtX29i
amVjdEJsb2NrLCAwKTsKICAgICAgICB9CgoKCgoKCgogICAgICAgIHZpcnR1YWwgT2JqZWN0VHlw
ZSoKICAgICAgICBhbGxvY2F0ZUJsb2NrKCkKICAgICAgICB7CgogICAgICAgICAgICAgICAgaWYg
KG1fb2JqZWN0Q291bnQgPT0gbV9ibG9ja1NpemUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1f
b2JqZWN0QmxvY2sgPT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fb2JqZWN0QmxvY2sgPSBtX2FsbG9jYXRvci5hbGxvY2F0ZSht
X2Jsb2NrU2l6ZSwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgKCh2b2lkKSAoKG1fb2JqZWN0QmxvY2sgIT0gMCkgPyAwIDogKF9fYXNzZXJ0X2Zh
aWwgKCJtX29iamVjdEJsb2NrICE9IDAiLCAiUGxhdGZvcm1TdXBwb3J0L0FyZW5hQmxvY2suaHBw
IiwgMjAwLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKCiAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBtX29iamVjdEJsb2NrICsgbV9vYmplY3RDb3VudDsKICAgICAgICAgICAgICAg
IH0KICAgICAgICB9CgoKCgoKCiAgICAgICAgdmlydHVhbCB2b2lkCgoKCiAgICAgICAgY29tbWl0
QWxsb2NhdGlvbihPYmplY3RUeXBlKiB0aGVCbG9jaykKCiAgICAgICAgewogICAgICAgICAgICAg
ICAgKCh2b2lkKSAoKHRoZUJsb2NrID09IG1fb2JqZWN0QmxvY2sgKyBtX29iamVjdENvdW50KSA/
IDAgOiAoX19hc3NlcnRfZmFpbCAoInRoZUJsb2NrID09IG1fb2JqZWN0QmxvY2sgKyBtX29iamVj
dENvdW50IiwgIlBsYXRmb3JtU3VwcG9ydC9BcmVuYUJsb2NrLmhwcCIsIDIxOCwgX19QUkVUVFlf
RlVOQ1RJT05fXyksIDApKSk7CiAgICAgICAgICAgICAgICAoKHZvaWQpICgobV9vYmplY3RDb3Vu
dCA8IG1fYmxvY2tTaXplKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIm1fb2JqZWN0Q291bnQgPCBt
X2Jsb2NrU2l6ZSIsICJQbGF0Zm9ybVN1cHBvcnQvQXJlbmFCbG9jay5ocHAiLCAyMTksIF9fUFJF
VFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKICAgICAgICAgICAgICAgIG1fb2JqZWN0Q291bnQrKzsK
ICAgICAgICB9CgoKCgoKCiAgICAgICAgdmlydHVhbCBib29sCiAgICAgICAgYmxvY2tBdmFpbGFi
bGUoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBtX29iamVjdENvdW50
IDwgbV9ibG9ja1NpemUgPyB0cnVlIDogZmFsc2U7CiAgICAgICAgfQoKCgoKCgoKICAgICAgICB2
aXJ0dWFsIHNpemVfdHlwZQogICAgICAgIGdldENvdW50QWxsb2NhdGVkKCkgY29uc3QKICAgICAg
ICB7CiAgICAgICAgICAgICAgICByZXR1cm4gbV9vYmplY3RDb3VudDsKICAgICAgICB9CgoKCgoK
CgogICAgICAgIHNpemVfdHlwZQogICAgICAgIGdldEJsb2NrU2l6ZSgpIGNvbnN0CiAgICAgICAg
ewogICAgICAgICAgICAgICAgcmV0dXJuIG1fYmxvY2tTaXplOwogICAgICAgIH0KIyAyNjggIlBs
YXRmb3JtU3VwcG9ydC9BcmVuYUJsb2NrLmhwcCIKICAgICAgICB2aXJ0dWFsIGJvb2wKICAgICAg
ICBvd25zT2JqZWN0KGNvbnN0IE9iamVjdFR5cGUqIHRoZU9iamVjdCkgY29uc3QKICAgICAgICB7
CgogICAgICAgICAgICAgICAgdXNpbmcgc3RkOjpsZXNzOwoKCgoKICAgICAgICAgICAgICAgIGxl
c3M8Y29uc3QgT2JqZWN0VHlwZSo+IGZ1bmN0b3I7CgogICAgICAgICAgICAgICAgaWYgKGZ1bmN0
b3IodGhlT2JqZWN0LCBtX29iamVjdEJsb2NrKSA9PSBmYWxzZSAmJgogICAgICAgICAgICAgICAg
ICAgICAgICBmdW5jdG9yKHRoZU9iamVjdCwgbV9vYmplY3RCbG9jayArIG1fb2JqZWN0Q291bnQp
ID09IHRydWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgfQojIDI5OCAiUGxhdGZvcm1TdXBwb3J0L0FyZW5hQmxvY2suaHBwIgog
ICAgICAgIGJvb2wKICAgICAgICBvd25zQmxvY2soY29uc3QgT2JqZWN0VHlwZSogdGhlT2JqZWN0
KSBjb25zdAogICAgICAgIHsKCiAgICAgICAgICAgICAgICB1c2luZyBzdGQ6Omxlc3M7CgoKCgog
ICAgICAgICAgICAgICAgbGVzczxjb25zdCBPYmplY3RUeXBlKj4gZnVuY3RvcjsKCiAgICAgICAg
ICAgICAgICBpZiAoZnVuY3Rvcih0aGVPYmplY3QsIG1fb2JqZWN0QmxvY2spID09IGZhbHNlICYm
CiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IodGhlT2JqZWN0LCBtX29iamVjdEJsb2Nr
ICsgbV9ibG9ja1NpemUpID09IHRydWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKCgoKCiAgICAgICAgdm9pZAogICAgICAg
IGRlc3Ryb3lBbGwoKQogICAgICAgIHsKCiAgICAgICAgICAgICAgICB1c2luZyBzdGQ6OmZvcl9l
YWNoOwoKCgogICAgICAgICAgICAgICAgZm9yX2VhY2gobV9vYmplY3RCbG9jaywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9vYmplY3RCbG9jayArIG1fb2JqZWN0Q291bnQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0ZUZ1bmN0b3IoKnRoaXMsIG1fZGVz
dHJveUZ1bmN0aW9uKSk7CgogICAgICAgICAgICAgICAgbV9vYmplY3RDb3VudCA9IDA7CiAgICAg
ICAgfQoKcHJvdGVjdGVkOgojIDM1MCAiUGxhdGZvcm1TdXBwb3J0L0FyZW5hQmxvY2suaHBwIgog
ICAgICAgIHZpcnR1YWwgYm9vbAogICAgICAgIHNob3VsZERlc3Ryb3lCbG9jayhjb25zdCBPYmpl
Y3RUeXBlKiApIGNvbnN0CiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgfQojIDM2NCAiUGxhdGZvcm1TdXBwb3J0L0FyZW5hQmxvY2suaHBwIgogICAgICAgIHNp
emVfdHlwZQogICAgICAgIGdldEJsb2NrT2Zmc2V0KGNvbnN0IE9iamVjdFR5cGUqIHRoZU9iamVj
dCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICAoKHZvaWQpICgoc2l6ZV90eXBlKHRo
ZU9iamVjdCAtIG1fb2JqZWN0QmxvY2spIDwgbV9ibG9ja1NpemUpID8gMCA6IChfX2Fzc2VydF9m
YWlsICgic2l6ZV90eXBlKHRoZU9iamVjdCAtIG1fb2JqZWN0QmxvY2spIDwgbV9ibG9ja1NpemUi
LCAiUGxhdGZvcm1TdXBwb3J0L0FyZW5hQmxvY2suaHBwIiwgMzY3LCBfX1BSRVRUWV9GVU5DVElP
Tl9fKSwgMCkpKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gdGhlT2JqZWN0IC0gbV9vYmplY3RC
bG9jazsKICAgICAgICB9CiMgMzgxICJQbGF0Zm9ybVN1cHBvcnQvQXJlbmFCbG9jay5ocHAiCiAg
ICAgICAgT2JqZWN0VHlwZSoKICAgICAgICBnZXRCbG9ja0FkZHJlc3Moc2l6ZV90eXBlIHRoZU9m
ZnNldCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICAoKHZvaWQpICgodGhlT2Zmc2V0
IDwgbV9ibG9ja1NpemUpID8gMCA6IChfX2Fzc2VydF9mYWlsICgidGhlT2Zmc2V0IDwgbV9ibG9j
a1NpemUiLCAiUGxhdGZvcm1TdXBwb3J0L0FyZW5hQmxvY2suaHBwIiwgMzg0LCBfX1BSRVRUWV9G
VU5DVElPTl9fKSwgMCkpKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gbV9vYmplY3RCbG9jayAr
IHRoZU9mZnNldDsKICAgICAgICB9CgogICAgICAgIHN0cnVjdCBEZWxldGVGdW5jdG9yCiAgICAg
ICAgewogICAgICAgICAgICAgICAgRGVsZXRlRnVuY3RvcigKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBBcmVuYUJsb2NrPE9iamVjdFR5cGU+JiB0aGVBcmVuYUJsb2NrLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERlc3Ryb3lGdW5jdGlvblR5cGUm
IHRoZURlc3Ryb3lGdW5jdGlvbikgOgogICAgICAgICAgICAgICAgICAgICAgICBtX2FyZW5hQmxv
Y2sodGhlQXJlbmFCbG9jayksCiAgICAgICAgICAgICAgICAgICAgICAgIG1fZGVzdHJveUZ1bmN0
aW9uKHRoZURlc3Ryb3lGdW5jdGlvbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICB2b2lkCiAgICAgICAgICAgICAgICBvcGVyYXRvcigpKE9iamVj
dFR5cGUmIHRoZU9iamVjdCkgY29uc3QKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fYXJlbmFCbG9jay5zaG91bGREZXN0cm95QmxvY2soJnRoZU9iamVjdCkg
PT0gdHJ1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZGVzdHJveUZ1bmN0aW9uKHRoZU9iamVjdCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgcHJpdmF0ZToKCiAgICAgICAgICAg
ICAgICBjb25zdCBBcmVuYUJsb2NrPE9iamVjdFR5cGU+JiBtX2FyZW5hQmxvY2s7CiAgICAgICAg
ICAgICAgICBjb25zdCBEZXN0cm95RnVuY3Rpb25UeXBlJiBtX2Rlc3Ryb3lGdW5jdGlvbjsKICAg
ICAgICB9OwoKICAgICAgICBmcmllbmQgc3RydWN0IERlbGV0ZUZ1bmN0b3I7CgogICAgICAgIGNv
bnN0IERlc3Ryb3lGdW5jdGlvblR5cGUgbV9kZXN0cm95RnVuY3Rpb247Cgpwcml2YXRlOgoKCiAg
ICAgICAgQXJlbmFCbG9jayhjb25zdCBBcmVuYUJsb2NrPE9iamVjdFR5cGU+Jik7CgogICAgICAg
IEFyZW5hQmxvY2s8T2JqZWN0VHlwZT4mCiAgICAgICAgb3BlcmF0b3I9KGNvbnN0IEFyZW5hQmxv
Y2s8T2JqZWN0VHlwZT4mKTsKCiAgICAgICAgYm9vbAogICAgICAgIG9wZXJhdG9yPT0oY29uc3Qg
QXJlbmFCbG9jazxPYmplY3RUeXBlPiYpIGNvbnN0OwoKCgogICAgICAgIHNpemVfdHlwZSBtX29i
amVjdENvdW50OwoKICAgICAgICBjb25zdCBzaXplX3R5cGUgbV9ibG9ja1NpemU7CgogICAgICAg
IE9iamVjdFR5cGUqIG1fb2JqZWN0QmxvY2s7CgogICAgICAgIEFsbG9jYXRvclR5cGUgbV9hbGxv
Y2F0b3I7Cn07CiMgNjkgIlBsYXRmb3JtU3VwcG9ydC9BcmVuYUFsbG9jYXRvci5ocHAiIDIKCgoK
dGVtcGxhdGU8Y2xhc3MgVHlwZT4KY2xhc3MgQXJlbmFEZWxldGVGdW5jdG9yCnsKcHVibGljOgoK
ICAgICAgICB2b2lkCiAgICAgICAgb3BlcmF0b3IoKShjb25zdCBUeXBlKiB0aGVUeXBlKSBjb25z
dAogICAgICAgIHsKCgoKICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGVUeXBlOwoKICAgICAgICB9
Cn07CgoKCnRlbXBsYXRlPGNsYXNzIE9iamVjdFR5cGUsCgoKCiAgICAgICAgICAgICAgICAgY2xh
c3MgQXJlbmFCbG9ja1R5cGUgPSBBcmVuYUJsb2NrPE9iamVjdFR5cGU+ID4KCmNsYXNzIEFyZW5h
QWxsb2NhdG9yCnsKcHVibGljOgoKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEFyZW5hQmxvY2tU
eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwoKCgoKCgogICAgICAgIEFyZW5hQWxsb2NhdG9yKHNp
emVfdHlwZSB0aGVCbG9ja1NpemUpIDoKICAgICAgICAgICAgICAgIG1fYmxvY2tTaXplKHRoZUJs
b2NrU2l6ZSksCiAgICAgICAgICAgICAgICBtX2Jsb2NrcygpCiAgICAgICAgewogICAgICAgIH0K
CiAgICAgICAgdmlydHVhbAogICAgICAgIH5BcmVuYUFsbG9jYXRvcigpCiAgICAgICAgewogICAg
ICAgICAgICAgICAgcmVzZXQoKTsKICAgICAgICB9CgoKCgoKCgogICAgICAgIHNpemVfdHlwZQog
ICAgICAgIGdldEJsb2NrU2l6ZSgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0
dXJuIG1fYmxvY2tTaXplOwogICAgICAgIH0KIyAxMzggIlBsYXRmb3JtU3VwcG9ydC9BcmVuYUFs
bG9jYXRvci5ocHAiCiAgICAgICAgdm9pZAogICAgICAgIHNldEJsb2NrU2l6ZShzaXplX3R5cGUg
dGhlU2l6ZSkKICAgICAgICB7CiAgICAgICAgICAgICAgICBtX2Jsb2NrU2l6ZSA9IHRoZVNpemU7
CiAgICAgICAgfQoKCgoKCgogICAgICAgIHNpemVfdHlwZQogICAgICAgIGdldEJsb2NrQ291bnQo
KSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBtX2Jsb2Nrcy5zaXplKCk7
CiAgICAgICAgfQojIDE2MiAiUGxhdGZvcm1TdXBwb3J0L0FyZW5hQWxsb2NhdG9yLmhwcCIKICAg
ICAgICB2aXJ0dWFsIE9iamVjdFR5cGUqCiAgICAgICAgYWxsb2NhdGVCbG9jaygpCiAgICAgICAg
ewogICAgICAgICAgICAgICAgaWYgKG1fYmxvY2tzLnNpemUoKSA9PSAwIHx8CiAgICAgICAgICAg
ICAgICAgICAgICAgIG1fYmxvY2tzLmJhY2soKS0+YmxvY2tBdmFpbGFibGUoKSA9PSBmYWxzZSkK
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgbV9ibG9ja3MucHVzaF9i
YWNrKG5ldyBBcmVuYUJsb2NrVHlwZShtX2Jsb2NrU2l6ZSkpOwogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgKCh2b2lkKSAoKG1fYmxvY2tzLnNpemUoKSA+IDAgJiYgbV9ibG9ja3Mu
YmFjaygpICE9IDAgJiYgbV9ibG9ja3MuYmFjaygpLT5ibG9ja0F2YWlsYWJsZSgpID09IHRydWUp
ID8gMCA6IChfX2Fzc2VydF9mYWlsICgibV9ibG9ja3Muc2l6ZSgpID4gMCAmJiBtX2Jsb2Nrcy5i
YWNrKCkgIT0gMCAmJiBtX2Jsb2Nrcy5iYWNrKCktPmJsb2NrQXZhaWxhYmxlKCkgPT0gdHJ1ZSIs
ICJQbGF0Zm9ybVN1cHBvcnQvQXJlbmFBbGxvY2F0b3IuaHBwIiwgMTcwLCBfX1BSRVRUWV9GVU5D
VElPTl9fKSwgMCkpKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gbV9ibG9ja3MuYmFjaygpLT5h
bGxvY2F0ZUJsb2NrKCk7CiAgICAgICAgfQoKCgoKCgoKICAgICAgICB2aXJ0dWFsIHZvaWQKICAg
ICAgICBjb21taXRBbGxvY2F0aW9uKE9iamVjdFR5cGUqIHRoZU9iamVjdCkKICAgICAgICB7CiAg
ICAgICAgICAgICAgICAoKHZvaWQpICgobV9ibG9ja3Muc2l6ZSgpICE9IDAgJiYgbV9ibG9ja3Mu
YmFjaygpLT5vd25zQmxvY2sodGhlT2JqZWN0KSA9PSB0cnVlKSA/IDAgOiAoX19hc3NlcnRfZmFp
bCAoIm1fYmxvY2tzLnNpemUoKSAhPSAwICYmIG1fYmxvY2tzLmJhY2soKS0+b3duc0Jsb2NrKHRo
ZU9iamVjdCkgPT0gdHJ1ZSIsICJQbGF0Zm9ybVN1cHBvcnQvQXJlbmFBbGxvY2F0b3IuaHBwIiwg
MTg0LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKCiAgICAgICAgICAgICAgICBtX2Jsb2Nr
cy5iYWNrKCktPmNvbW1pdEFsbG9jYXRpb24odGhlT2JqZWN0KTsKICAgICAgICAgICAgICAgICgo
dm9pZCkgKChtX2Jsb2Nrcy5iYWNrKCktPm93bnNPYmplY3QodGhlT2JqZWN0KSA9PSB0cnVlKSA/
IDAgOiAoX19hc3NlcnRfZmFpbCAoIm1fYmxvY2tzLmJhY2soKS0+b3duc09iamVjdCh0aGVPYmpl
Y3QpID09IHRydWUiLCAiUGxhdGZvcm1TdXBwb3J0L0FyZW5hQWxsb2NhdG9yLmhwcCIsIDE4Nywg
X19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgICAgfQoKICAgICAgICB2aXJ0dWFsIHZv
aWQKICAgICAgICByZXNldCgpCiAgICAgICAgewoKICAgICAgICAgICAgICAgIHVzaW5nIHN0ZDo6
Zm9yX2VhY2g7CgoKICAgICAgICAgICAgICAgIGZvcl9lYWNoKG1fYmxvY2tzLmJlZ2luKCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYmxvY2tzLmVuZCgpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBcmVuYURlbGV0ZUZ1bmN0b3I8QXJlbmFCbG9ja1R5cGU+
KCkpOwoKICAgICAgICAgICAgICAgIG1fYmxvY2tzLmNsZWFyKCk7CiAgICAgICAgfQoKcHJvdGVj
dGVkOgoKCgoKCiAgICAgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxBcmVuYUJsb2NrVHlwZSo+IEFy
ZW5hQmxvY2tMaXN0VHlwZTsKCgogICAgICAgIHNpemVfdHlwZSBtX2Jsb2NrU2l6ZTsKCiAgICAg
ICAgQXJlbmFCbG9ja0xpc3RUeXBlIG1fYmxvY2tzOwoKcHJpdmF0ZToKCgogICAgICAgIEFyZW5h
QWxsb2NhdG9yKGNvbnN0IEFyZW5hQWxsb2NhdG9yPE9iamVjdFR5cGUsIEFyZW5hQmxvY2tUeXBl
PiYpOwoKICAgICAgICBBcmVuYUFsbG9jYXRvcjxPYmplY3RUeXBlLCBBcmVuYUJsb2NrVHlwZT4m
CiAgICAgICAgb3BlcmF0b3I9KGNvbnN0IEFyZW5hQWxsb2NhdG9yPE9iamVjdFR5cGUsIEFyZW5h
QmxvY2tUeXBlPiYpOwp9OwojIDY4ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlQXR0
cmlidXRlQWxsb2NhdG9yLmhwcCIgMgoKCgojIDEgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJj
ZVRyZWVBdHRyLmhwcCIgMQojIDYyICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlQXR0
ci5ocHAiCiMgMSAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZURlZmluaXRpb25zLmhw
cCIgMQojIDYzICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlQXR0ci5ocHAiIDIKCgoK
IyAxICJYYWxhbkRPTS9YYWxhbkF0dHIuaHBwIiAxCiMgNjIgIlhhbGFuRE9NL1hhbGFuQXR0ci5o
cHAiCiMgMSAiWGFsYW5ET00vWGFsYW5ET01EZWZpbml0aW9ucy5ocHAiIDEKIyA2MyAiWGFsYW5E
T00vWGFsYW5BdHRyLmhwcCIgMgojIDEgIlhhbGFuRE9NL1hhbGFuTm9kZS5ocHAiIDEKIyA2NCAi
WGFsYW5ET00vWGFsYW5BdHRyLmhwcCIgMgoKCgpjbGFzcyBYYWxhbkVsZW1lbnQ7CiMgNzkgIlhh
bGFuRE9NL1hhbGFuQXR0ci5ocHAiCmNsYXNzIFhhbGFuQXR0ciA6IHB1YmxpYyBYYWxhbk5vZGUK
ewpwdWJsaWM6CgogICAgICAgIFhhbGFuQXR0cigpOwoKICAgICAgICB2aXJ0dWFsCiAgICAgICAg
flhhbGFuQXR0cigpOwoKCgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5ET01TdHJpbmcmCiAg
ICAgICAgZ2V0Tm9kZU5hbWUoKSBjb25zdCA9IDA7CgoKCgogICAgICAgIHZpcnR1YWwgY29uc3Qg
WGFsYW5ET01TdHJpbmcmCiAgICAgICAgZ2V0Tm9kZVZhbHVlKCkgY29uc3QgPSAwOwoKCgoKICAg
ICAgICB2aXJ0dWFsIE5vZGVUeXBlCiAgICAgICAgZ2V0Tm9kZVR5cGUoKSBjb25zdCA9IDA7CiMg
MTE0ICJYYWxhbkRPTS9YYWxhbkF0dHIuaHBwIgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgog
ICAgICAgIGdldFBhcmVudE5vZGUoKSBjb25zdCA9IDA7CiMgMTMwICJYYWxhbkRPTS9YYWxhbkF0
dHIuaHBwIgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5Ob2RlTGlzdCoKICAgICAgICBnZXRD
aGlsZE5vZGVzKCkgY29uc3QgPSAwOwoKCgoKCgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgog
ICAgICAgIGdldEZpcnN0Q2hpbGQoKSBjb25zdCA9IDA7CgoKCgoKCiAgICAgICAgdmlydHVhbCBY
YWxhbk5vZGUqCiAgICAgICAgZ2V0TGFzdENoaWxkKCkgY29uc3QgPSAwOwoKCgoKCgogICAgICAg
IHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIGdldFByZXZpb3VzU2libGluZygpIGNvbnN0ID0g
MDsKCgoKCgoKICAgICAgICB2aXJ0dWFsIFhhbGFuTm9kZSoKICAgICAgICBnZXROZXh0U2libGlu
ZygpIGNvbnN0ID0gMDsKCgoKCgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5OYW1lZE5vZGVN
YXAqCiAgICAgICAgZ2V0QXR0cmlidXRlcygpIGNvbnN0ID0gMDsKIyAxODEgIlhhbGFuRE9NL1hh
bGFuQXR0ci5ocHAiCiAgICAgICAgdmlydHVhbCBYYWxhbkRvY3VtZW50KgogICAgICAgIGdldE93
bmVyRG9jdW1lbnQoKSBjb25zdCA9IDA7CiMgMjA5ICJYYWxhbkRPTS9YYWxhbkF0dHIuaHBwIgog
ICAgICAgIHZpcnR1YWwgWGFsYW5BdHRyKgoKICAgICAgICBjbG9uZU5vZGUoYm9vbCBkZWVwKSBj
b25zdCA9IDA7CiMgMjMzICJYYWxhbkRPTS9YYWxhbkF0dHIuaHBwIgogICAgICAgIHZpcnR1YWwg
WGFsYW5Ob2RlKgogICAgICAgIGluc2VydEJlZm9yZSgKICAgICAgICAgICAgICAgICAgICAgICAg
WGFsYW5Ob2RlKiBuZXdDaGlsZCwKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5Ob2RlKiBy
ZWZDaGlsZCkgPSAwOwojIDI1MSAiWGFsYW5ET00vWGFsYW5BdHRyLmhwcCIKICAgICAgICB2aXJ0
dWFsIFhhbGFuTm9kZSoKICAgICAgICByZXBsYWNlQ2hpbGQoCiAgICAgICAgICAgICAgICAgICAg
ICAgIFhhbGFuTm9kZSogbmV3Q2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuTm9k
ZSogb2xkQ2hpbGQpID0gMDsKIyAyNjMgIlhhbGFuRE9NL1hhbGFuQXR0ci5ocHAiCiAgICAgICAg
dmlydHVhbCBYYWxhbk5vZGUqCiAgICAgICAgcmVtb3ZlQ2hpbGQoWGFsYW5Ob2RlKiBvbGRDaGls
ZCkgPSAwOwojIDI3NyAiWGFsYW5ET00vWGFsYW5BdHRyLmhwcCIKICAgICAgICB2aXJ0dWFsIFhh
bGFuTm9kZSoKICAgICAgICBhcHBlbmRDaGlsZChYYWxhbk5vZGUqIG5ld0NoaWxkKSA9IDA7CiMg
MjkxICJYYWxhbkRPTS9YYWxhbkF0dHIuaHBwIgogICAgICAgIHZpcnR1YWwgYm9vbAogICAgICAg
IGhhc0NoaWxkTm9kZXMoKSBjb25zdCA9IDA7CiMgMzEzICJYYWxhbkRPTS9YYWxhbkF0dHIuaHBw
IgogICAgICAgIHZpcnR1YWwgdm9pZAogICAgICAgIHNldE5vZGVWYWx1ZShjb25zdCBYYWxhbkRP
TVN0cmluZyYgbm9kZVZhbHVlKSA9IDA7CiMgMzM2ICJYYWxhbkRPTS9YYWxhbkF0dHIuaHBwIgog
ICAgICAgIHZpcnR1YWwgdm9pZAogICAgICAgIG5vcm1hbGl6ZSgpID0gMDsKIyAzNTIgIlhhbGFu
RE9NL1hhbGFuQXR0ci5ocHAiCiAgICAgICAgdmlydHVhbCBib29sCiAgICAgICAgc3VwcG9ydHMo
CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiBmZWF0dXJlLAog
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdmVyc2lvbikgY29u
c3QgPSAwOwojIDM3MCAiWGFsYW5ET00vWGFsYW5BdHRyLmhwcCIKICAgICAgICB2aXJ0dWFsIGNv
bnN0IFhhbGFuRE9NU3RyaW5nJgogICAgICAgIGdldE5hbWVzcGFjZVVSSSgpIGNvbnN0ID0gMDsK
CgoKCgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgZ2V0UHJl
Zml4KCkgY29uc3QgPSAwOwojIDM4NyAiWGFsYW5ET00vWGFsYW5BdHRyLmhwcCIKICAgICAgICB2
aXJ0dWFsIGNvbnN0IFhhbGFuRE9NU3RyaW5nJgogICAgICAgIGdldExvY2FsTmFtZSgpIGNvbnN0
ID0gMDsKIyA0MTkgIlhhbGFuRE9NL1hhbGFuQXR0ci5ocHAiCiAgICAgICAgdmlydHVhbCB2b2lk
CiAgICAgICAgc2V0UHJlZml4KGNvbnN0IFhhbGFuRE9NU3RyaW5nJiBwcmVmaXgpID0gMDsKCgoK
CgoKICAgICAgICB2aXJ0dWFsIGJvb2wKICAgICAgICBpc0luZGV4ZWQoKSBjb25zdCA9IDA7CgoK
CgoKCgogICAgICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZwogICAgICAgIGdldEluZGV4KCkgY29u
c3QgPSAwOwojIDQ0OSAiWGFsYW5ET00vWGFsYW5BdHRyLmhwcCIKICAgIHZpcnR1YWwgY29uc3Qg
WGFsYW5ET01TdHJpbmcmCiAgICAgICAgZ2V0TmFtZSgpIGNvbnN0ID0gMDsKIyA0NTkgIlhhbGFu
RE9NL1hhbGFuQXR0ci5ocHAiCiAgICB2aXJ0dWFsIGJvb2wKICAgICAgICBnZXRTcGVjaWZpZWQo
KSBjb25zdCA9IDA7CgoKCgoKCgogICAgdmlydHVhbCBjb25zdCBYYWxhbkRPTVN0cmluZyYKICAg
ICAgICBnZXRWYWx1ZSgpIGNvbnN0ID0gMDsKIyA0ODEgIlhhbGFuRE9NL1hhbGFuQXR0ci5ocHAi
CiAgICB2aXJ0dWFsIHZvaWQKICAgICAgICBzZXRWYWx1ZShjb25zdCBYYWxhbkRPTVN0cmluZyYg
dmFsdWUpID0gMDsKIyA0OTIgIlhhbGFuRE9NL1hhbGFuQXR0ci5ocHAiCiAgICB2aXJ0dWFsIFhh
bGFuRWxlbWVudCoKICAgICAgICBnZXRPd25lckVsZW1lbnQoKSBjb25zdCA9IDA7CgoKcHJvdGVj
dGVkOgoKICAgICAgICBYYWxhbkF0dHIoY29uc3QgWGFsYW5BdHRyJiB0aGVTb3VyY2UpOwoKICAg
ICAgICBYYWxhbkF0dHImCiAgICAgICAgb3BlcmF0b3I9KGNvbnN0IFhhbGFuQXR0ciYgdGhlU291
cmNlKTsKCiAgICAgICAgYm9vbAogICAgICAgIG9wZXJhdG9yPT0oY29uc3QgWGFsYW5BdHRyJiB0
aGVSSFMpIGNvbnN0OwoKcHJpdmF0ZToKfTsKIyA2NyAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291
cmNlVHJlZUF0dHIuaHBwIiAyCgoKCiMgMSAiWGFsYW5ET00vWGFsYW5ET01TdHJpbmcuaHBwIiAx
CiMgNzEgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVBdHRyLmhwcCIgMgojIDEgIlhh
bGFuRE9NL1hhbGFuTm9kZUxpc3REdW1teS5ocHAiIDEKIyA2MiAiWGFsYW5ET00vWGFsYW5Ob2Rl
TGlzdER1bW15LmhwcCIKIyAxICJYYWxhbkRPTS9YYWxhbkRPTURlZmluaXRpb25zLmhwcCIgMQoj
IDYzICJYYWxhbkRPTS9YYWxhbk5vZGVMaXN0RHVtbXkuaHBwIiAyCgoKCiMgMSAiWGFsYW5ET00v
WGFsYW5Ob2RlTGlzdC5ocHAiIDEKCgoKCgojIDEgIlhhbGFuRE9NL1hhbGFuRE9NRGVmaW5pdGlv
bnMuaHBwIiAxCiMgNyAiWGFsYW5ET00vWGFsYW5Ob2RlTGlzdC5ocHAiIDIKCgoKY2xhc3MgWGFs
YW5Ob2RlOwojIDIyICJYYWxhbkRPTS9YYWxhbk5vZGVMaXN0LmhwcCIKY2xhc3MgWGFsYW5Ob2Rl
TGlzdAp7CnB1YmxpYzoKCiAgICAgICAgWGFsYW5Ob2RlTGlzdCgpOwoKICAgICAgICB2aXJ0dWFs
CiAgICAgICAgflhhbGFuTm9kZUxpc3QoKTsKIyA0NCAiWGFsYW5ET00vWGFsYW5Ob2RlTGlzdC5o
cHAiCiAgICAgICAgdmlydHVhbCBYYWxhbk5vZGUqCiAgICAgICAgaXRlbSh1bnNpZ25lZCBpbnQg
aW5kZXgpIGNvbnN0ID0gMDsKCgoKCgoKICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludAogICAg
ICAgIGdldExlbmd0aCgpIGNvbnN0ID0gMDsKCnByb3RlY3RlZDoKCiAgICAgICAgWGFsYW5Ob2Rl
TGlzdChjb25zdCBYYWxhbk5vZGVMaXN0JiB0aGVTb3VyY2UpOwoKICAgICAgICBYYWxhbk5vZGVM
aXN0JgogICAgICAgIG9wZXJhdG9yPShjb25zdCBYYWxhbk5vZGVMaXN0JiB0aGVTb3VyY2UpOwoK
ICAgICAgICBib29sCiAgICAgICAgb3BlcmF0b3I9PShjb25zdCBYYWxhbk5vZGVMaXN0JiB0aGVS
SFMpIGNvbnN0OwoKcHJpdmF0ZToKfTsKIyA2NyAiWGFsYW5ET00vWGFsYW5Ob2RlTGlzdER1bW15
LmhwcCIgMgoKCgpjbGFzcyBYYWxhbk5vZGU7CiMgODIgIlhhbGFuRE9NL1hhbGFuTm9kZUxpc3RE
dW1teS5ocHAiCmNsYXNzIFhhbGFuTm9kZUxpc3REdW1teSA6IHB1YmxpYyBYYWxhbk5vZGVMaXN0
CnsKcHVibGljOgoKICAgICAgICBYYWxhbk5vZGVMaXN0RHVtbXkoKTsKCiAgICAgICAgdmlydHVh
bAogICAgICAgIH5YYWxhbk5vZGVMaXN0RHVtbXkoKTsKCiAgICAgICAgWGFsYW5Ob2RlTGlzdER1
bW15JgogICAgICAgIG9wZXJhdG9yPShjb25zdCBYYWxhbk5vZGVMaXN0RHVtbXkmICkKICAgICAg
ICB7CiAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKICAgICAgICB2aXJ0
dWFsIFhhbGFuTm9kZSoKICAgICAgICBpdGVtKHVuc2lnbmVkIGludCBpbmRleCkgY29uc3Q7Cgog
ICAgICAgIHZpcnR1YWwgdW5zaWduZWQgaW50CiAgICAgICAgZ2V0TGVuZ3RoKCkgY29uc3Q7Cgpw
cml2YXRlOgp9OwojIDcyICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlQXR0ci5ocHAi
IDIKCgoKY2xhc3MgWGFsYW5Tb3VyY2VUcmVlRG9jdW1lbnQ7CmNsYXNzIFhhbGFuU291cmNlVHJl
ZUVsZW1lbnQ7CiMgODggIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVBdHRyLmhwcCIK
Y2xhc3MgWGFsYW5Tb3VyY2VUcmVlQXR0ciA6IHB1YmxpYyBYYWxhbkF0dHIKewpwdWJsaWM6CiMg
MTAxICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlQXR0ci5ocHAiCiAgICAgICAgWGFs
YW5Tb3VyY2VUcmVlQXR0cigKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01T
dHJpbmcmIHRoZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3Ry
aW5nJiB0aGVWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5Tb3VyY2VUcmVlRWxl
bWVudCogdGhlT3duZXJFbGVtZW50ID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IHRoZUluZGV4ID0gMCk7CgogICAgICAgIHZpcnR1YWwKICAgICAgICB+WGFsYW5Tb3Vy
Y2VUcmVlQXR0cigpOwoKCgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5ET01TdHJpbmcmCiAg
ICAgICAgZ2V0Tm9kZU5hbWUoKSBjb25zdDsKCgoKCiAgICAgICAgdmlydHVhbCBjb25zdCBYYWxh
bkRPTVN0cmluZyYKICAgICAgICBnZXROb2RlVmFsdWUoKSBjb25zdDsKCgoKCiAgICAgICAgdmly
dHVhbCBOb2RlVHlwZQogICAgICAgIGdldE5vZGVUeXBlKCkgY29uc3Q7CiMgMTM2ICJYYWxhblNv
dXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlQXR0ci5ocHAiCiAgICAgICAgdmlydHVhbCBYYWxhbk5v
ZGUqCiAgICAgICAgZ2V0UGFyZW50Tm9kZSgpIGNvbnN0OwojIDE1MiAiWGFsYW5Tb3VyY2VUcmVl
L1hhbGFuU291cmNlVHJlZUF0dHIuaHBwIgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5Ob2Rl
TGlzdCoKICAgICAgICBnZXRDaGlsZE5vZGVzKCkgY29uc3Q7CgoKCgoKCiAgICAgICAgdmlydHVh
bCBYYWxhbk5vZGUqCiAgICAgICAgZ2V0Rmlyc3RDaGlsZCgpIGNvbnN0OwoKCgoKCgogICAgICAg
IHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIGdldExhc3RDaGlsZCgpIGNvbnN0OwoKCgoKCgog
ICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIGdldFByZXZpb3VzU2libGluZygpIGNv
bnN0OwoKCgoKCgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIGdldE5leHRTaWJs
aW5nKCkgY29uc3Q7CgoKCgoKICAgICAgICB2aXJ0dWFsIGNvbnN0IFhhbGFuTmFtZWROb2RlTWFw
KgogICAgICAgIGdldEF0dHJpYnV0ZXMoKSBjb25zdDsKIyAyMDMgIlhhbGFuU291cmNlVHJlZS9Y
YWxhblNvdXJjZVRyZWVBdHRyLmhwcCIKICAgICAgICB2aXJ0dWFsIFhhbGFuRG9jdW1lbnQqCiAg
ICAgICAgZ2V0T3duZXJEb2N1bWVudCgpIGNvbnN0OwojIDIzMSAiWGFsYW5Tb3VyY2VUcmVlL1hh
bGFuU291cmNlVHJlZUF0dHIuaHBwIgogICAgICAgIHZpcnR1YWwgWGFsYW5Tb3VyY2VUcmVlQXR0
cioKCiAgICAgICAgY2xvbmVOb2RlKGJvb2wgZGVlcCkgY29uc3Q7CiMgMjU1ICJYYWxhblNvdXJj
ZVRyZWUvWGFsYW5Tb3VyY2VUcmVlQXR0ci5ocHAiCiAgICAgICAgdmlydHVhbCBYYWxhbk5vZGUq
CiAgICAgICAgaW5zZXJ0QmVmb3JlKAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhbk5vZGUq
IG5ld0NoaWxkLAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhbk5vZGUqIHJlZkNoaWxkKTsK
IyAyNzMgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVBdHRyLmhwcCIKICAgICAgICB2
aXJ0dWFsIFhhbGFuTm9kZSoKICAgICAgICByZXBsYWNlQ2hpbGQoCiAgICAgICAgICAgICAgICAg
ICAgICAgIFhhbGFuTm9kZSogbmV3Q2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFu
Tm9kZSogb2xkQ2hpbGQpOwojIDI4NSAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZUF0
dHIuaHBwIgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIHJlbW92ZUNoaWxkKFhh
bGFuTm9kZSogb2xkQ2hpbGQpOwojIDI5OSAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJl
ZUF0dHIuaHBwIgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIGFwcGVuZENoaWxk
KFhhbGFuTm9kZSogbmV3Q2hpbGQpOwojIDMxMyAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNl
VHJlZUF0dHIuaHBwIgogICAgICAgIHZpcnR1YWwgYm9vbAogICAgICAgIGhhc0NoaWxkTm9kZXMo
KSBjb25zdDsKIyAzMzUgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVBdHRyLmhwcCIK
ICAgICAgICB2aXJ0dWFsIHZvaWQKICAgICAgICBzZXROb2RlVmFsdWUoY29uc3QgWGFsYW5ET01T
dHJpbmcmIG5vZGVWYWx1ZSk7CiMgMzU4ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVl
QXR0ci5ocHAiCiAgICAgICAgdmlydHVhbCB2b2lkCiAgICAgICAgbm9ybWFsaXplKCk7CiMgMzc0
ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlQXR0ci5ocHAiCiAgICAgICAgdmlydHVh
bCBib29sCiAgICAgICAgc3VwcG9ydHMoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhh
bGFuRE9NU3RyaW5nJiBmZWF0dXJlLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxh
bkRPTVN0cmluZyYgdmVyc2lvbikgY29uc3Q7CiMgMzkyICJYYWxhblNvdXJjZVRyZWUvWGFsYW5T
b3VyY2VUcmVlQXR0ci5ocHAiCiAgICAgICAgdmlydHVhbCBjb25zdCBYYWxhbkRPTVN0cmluZyYK
ICAgICAgICBnZXROYW1lc3BhY2VVUkkoKSBjb25zdDsKCgoKCgogICAgICAgIHZpcnR1YWwgY29u
c3QgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgZ2V0UHJlZml4KCkgY29uc3Q7CiMgNDA5ICJYYWxh
blNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlQXR0ci5ocHAiCiAgICAgICAgdmlydHVhbCBjb25z
dCBYYWxhbkRPTVN0cmluZyYKICAgICAgICBnZXRMb2NhbE5hbWUoKSBjb25zdDsKIyA0NDEgIlhh
bGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVBdHRyLmhwcCIKICAgICAgICB2aXJ0dWFsIHZv
aWQKICAgICAgICBzZXRQcmVmaXgoY29uc3QgWGFsYW5ET01TdHJpbmcmIHByZWZpeCk7CgoKCgoK
CiAgICAgICAgdmlydHVhbCBib29sCiAgICAgICAgaXNJbmRleGVkKCkgY29uc3Q7CgoKCgoKCgog
ICAgICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZwogICAgICAgIGdldEluZGV4KCkgY29uc3Q7CiMg
NDcxICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlQXR0ci5ocHAiCiAgICB2aXJ0dWFs
IGNvbnN0IFhhbGFuRE9NU3RyaW5nJgogICAgICAgIGdldE5hbWUoKSBjb25zdDsKIyA0ODEgIlhh
bGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVBdHRyLmhwcCIKICAgIHZpcnR1YWwgYm9vbAog
ICAgICAgIGdldFNwZWNpZmllZCgpIGNvbnN0OwoKCgoKCgoKICAgIHZpcnR1YWwgY29uc3QgWGFs
YW5ET01TdHJpbmcmCiAgICAgICAgZ2V0VmFsdWUoKSBjb25zdDsKIyA1MDMgIlhhbGFuU291cmNl
VHJlZS9YYWxhblNvdXJjZVRyZWVBdHRyLmhwcCIKICAgIHZpcnR1YWwgdm9pZAogICAgICAgIHNl
dFZhbHVlKGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB2YWx1ZSk7CiMgNTE0ICJYYWxhblNvdXJjZVRy
ZWUvWGFsYW5Tb3VyY2VUcmVlQXR0ci5ocHAiCiAgICB2aXJ0dWFsIFhhbGFuRWxlbWVudCoKICAg
ICAgICBnZXRPd25lckVsZW1lbnQoKSBjb25zdDsKCgoKCgogICAgICAgIHZvaWQKICAgICAgICBz
ZXRPd25lckVsZW1lbnQoWGFsYW5Tb3VyY2VUcmVlRWxlbWVudCogdGhlRWxlbWVudCkKICAgICAg
ICB7CiAgICAgICAgICAgICAgICBtX293bmVyRWxlbWVudCA9IHRoZUVsZW1lbnQ7CiAgICAgICAg
fQoKICAgICAgICB2b2lkCiAgICAgICAgc2V0SW5kZXgodW5zaWduZWQgaW50IHRoZUluZGV4KQog
ICAgICAgIHsKICAgICAgICAgICAgICAgIG1faW5kZXggPSB0aGVJbmRleDsKICAgICAgICB9Cgpw
cm90ZWN0ZWQ6CgogICAgICAgIFhhbGFuU291cmNlVHJlZUF0dHIoCiAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFhhbGFuU291cmNlVHJlZUF0dHImIHRoZVNvdXJjZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBkZWVwID0gZmFsc2UpOwoKcHJpdmF0ZToKCgogICAgICAgIFhhbGFu
U291cmNlVHJlZUF0dHImCiAgICAgICAgb3BlcmF0b3I9KGNvbnN0IFhhbGFuU291cmNlVHJlZUF0
dHImIHRoZVNvdXJjZSk7CgogICAgICAgIGJvb2wKICAgICAgICBvcGVyYXRvcj09KGNvbnN0IFhh
bGFuU291cmNlVHJlZUF0dHImIHRoZVJIUykgY29uc3Q7CgoKCiAgICAgICAgY29uc3QgWGFsYW5E
T01TdHJpbmcmIG1fbmFtZTsKCiAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIG1fdmFsdWU7
CgogICAgICAgIFhhbGFuU291cmNlVHJlZUVsZW1lbnQqIG1fb3duZXJFbGVtZW50OwoKICAgICAg
ICB1bnNpZ25lZCBpbnQgbV9pbmRleDsKfTsKIyA3MiAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291
cmNlVHJlZUF0dHJpYnV0ZUFsbG9jYXRvci5ocHAiIDIKCgoKY2xhc3MgWGFsYW5Tb3VyY2VUcmVl
QXR0cmlidXRlQWxsb2NhdG9yCnsKcHVibGljOgoKICAgICAgICB0eXBlZGVmIFhhbGFuU291cmNl
VHJlZUF0dHIgT2JqZWN0VHlwZTsKCgoKCgoKCiAgICAgICAgdHlwZWRlZiBBcmVuYUFsbG9jYXRv
cjxPYmplY3RUeXBlPiBBcmVuYUFsbG9jYXRvclR5cGU7CgoKICAgICAgICB0eXBlZGVmIEFyZW5h
QWxsb2NhdG9yVHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKCgoKCgoKICAgICAgICBYYWxhblNv
dXJjZVRyZWVBdHRyaWJ1dGVBbGxvY2F0b3Ioc2l6ZV90eXBlIHRoZUJsb2NrQ291bnQpOwoKICAg
ICAgICB+WGFsYW5Tb3VyY2VUcmVlQXR0cmlidXRlQWxsb2NhdG9yKCk7CiMgMTEyICJYYWxhblNv
dXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlQXR0cmlidXRlQWxsb2NhdG9yLmhwcCIKICAgICAgICBP
YmplY3RUeXBlKgogICAgICAgIGNyZWF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
WGFsYW5ET01TdHJpbmcmIHRoZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhh
bGFuRE9NU3RyaW5nJiB0aGVWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5Tb3Vy
Y2VUcmVlRWxlbWVudCogdGhlT3duZXJFbGVtZW50ID0gMCwKICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW50IHRoZUluZGV4ID0gMCk7CgoKCgogICAgICAgIHZvaWQKICAgICAgICBy
ZXNldCgpOwoKCgoKCgoKICAgICAgICBzaXplX3R5cGUKICAgICAgICBnZXRCbG9ja0NvdW50KCkg
Y29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gbV9hbGxvY2F0b3IuZ2V0Qmxv
Y2tDb3VudCgpOwogICAgICAgIH0KCgoKCgoKICAgICAgICBzaXplX3R5cGUKICAgICAgICBnZXRC
bG9ja1NpemUoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBtX2FsbG9j
YXRvci5nZXRCbG9ja1NpemUoKTsKICAgICAgICB9Cgpwcml2YXRlOgoKCiAgICAgICAgWGFsYW5T
b3VyY2VUcmVlQXR0cmlidXRlQWxsb2NhdG9yKGNvbnN0IFhhbGFuU291cmNlVHJlZUF0dHJpYnV0
ZUFsbG9jYXRvciYpOwoKICAgICAgICBYYWxhblNvdXJjZVRyZWVBdHRyaWJ1dGVBbGxvY2F0b3Im
CiAgICAgICAgb3BlcmF0b3I9KGNvbnN0IFhhbGFuU291cmNlVHJlZUF0dHJpYnV0ZUFsbG9jYXRv
ciYpOwoKCiAgICAgICAgQXJlbmFBbGxvY2F0b3JUeXBlIG1fYWxsb2NhdG9yOwp9OwojIDgxICJY
YWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRG9jdW1lbnQuaHBwIiAyCiMgMSAiWGFsYW5T
b3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZUF0dHJpYnV0ZU5TQWxsb2NhdG9yLmhwcCIgMQojIDYz
ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlQXR0cmlidXRlTlNBbGxvY2F0b3IuaHBw
IgojIDEgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVEZWZpbml0aW9ucy5ocHAiIDEK
IyA2NCAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZUF0dHJpYnV0ZU5TQWxsb2NhdG9y
LmhwcCIgMgoKCgojIDEgIlBsYXRmb3JtU3VwcG9ydC9BcmVuYUFsbG9jYXRvci5ocHAiIDEKIyA2
OCAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZUF0dHJpYnV0ZU5TQWxsb2NhdG9yLmhw
cCIgMgoKCgojIDEgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVBdHRyTlMuaHBwIiAx
CiMgNjIgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVBdHRyTlMuaHBwIgojIDEgIlhh
bGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVEZWZpbml0aW9ucy5ocHAiIDEKIyA2MyAiWGFs
YW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZUF0dHJOUy5ocHAiIDIKCgoKIyAxICJYYWxhblNv
dXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlQXR0ci5ocHAiIDEKIyA2NyAiWGFsYW5Tb3VyY2VUcmVl
L1hhbGFuU291cmNlVHJlZUF0dHJOUy5ocHAiIDIKIyA3OCAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFu
U291cmNlVHJlZUF0dHJOUy5ocHAiCmNsYXNzIFhhbGFuU291cmNlVHJlZUF0dHJOUyA6IHB1Ymxp
YyBYYWxhblNvdXJjZVRyZWVBdHRyCnsKcHVibGljOgojIDkzICJYYWxhblNvdXJjZVRyZWUvWGFs
YW5Tb3VyY2VUcmVlQXR0ck5TLmhwcCIKICAgICAgICBYYWxhblNvdXJjZVRyZWVBdHRyTlMoCiAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVOYW1lLAogICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlTG9jYWxOYW1lLAog
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlTmFtZXNwYWNl
VVJJLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlUHJl
Zml4LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlVmFs
dWUsCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuU291cmNlVHJlZUVsZW1lbnQqIHRoZU93
bmVyRWxlbWVudCA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0aGVJ
bmRleCA9IDApOwoKICAgICAgICB2aXJ0dWFsCiAgICAgICAgflhhbGFuU291cmNlVHJlZUF0dHJO
UygpOwoKCgoKCiAgICAgICAgdmlydHVhbCBYYWxhblNvdXJjZVRyZWVBdHRyTlMqCgogICAgICAg
IGNsb25lTm9kZShib29sIGRlZXApIGNvbnN0OwoKICAgICAgICB2aXJ0dWFsIGNvbnN0IFhhbGFu
RE9NU3RyaW5nJgogICAgICAgIGdldE5hbWVzcGFjZVVSSSgpIGNvbnN0OwoKICAgICAgICB2aXJ0
dWFsIGNvbnN0IFhhbGFuRE9NU3RyaW5nJgogICAgICAgIGdldFByZWZpeCgpIGNvbnN0OwoKICAg
ICAgICB2aXJ0dWFsIGNvbnN0IFhhbGFuRE9NU3RyaW5nJgogICAgICAgIGdldExvY2FsTmFtZSgp
IGNvbnN0OwoKcHJvdGVjdGVkOgoKICAgICAgICBYYWxhblNvdXJjZVRyZWVBdHRyTlMoCiAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuU291cmNlVHJlZUF0dHJOUyYgdGhlU291cmNl
LAogICAgICAgICAgICAgICAgICAgICAgICBib29sIGRlZXAgPSBmYWxzZSk7CgogICAgICAgIFhh
bGFuU291cmNlVHJlZUF0dHJOUygKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5T
b3VyY2VUcmVlQXR0ciYgdGhlU291cmNlLAogICAgICAgICAgICAgICAgICAgICAgICBib29sIGRl
ZXAgPSBmYWxzZSk7Cgpwcml2YXRlOgoKCiAgICAgICAgWGFsYW5Tb3VyY2VUcmVlQXR0ck5TJgog
ICAgICAgIG9wZXJhdG9yPShjb25zdCBYYWxhblNvdXJjZVRyZWVBdHRyTlMmIHRoZVNvdXJjZSk7
CgogICAgICAgIGJvb2wKICAgICAgICBvcGVyYXRvcj09KGNvbnN0IFhhbGFuU291cmNlVHJlZUF0
dHJOUyYgdGhlUkhTKSBjb25zdDsKCgogICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiBtX2xv
Y2FsTmFtZTsKCiAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIG1fcHJlZml4OwoKICAgICAg
ICBjb25zdCBYYWxhbkRPTVN0cmluZyYgbV9uYW1lc3BhY2VVUkk7Cn07CiMgNzIgIlhhbGFuU291
cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVBdHRyaWJ1dGVOU0FsbG9jYXRvci5ocHAiIDIKCgoKY2xh
c3MgWGFsYW5Tb3VyY2VUcmVlQXR0cmlidXRlTlNBbGxvY2F0b3IKewpwdWJsaWM6CgogICAgICAg
IHR5cGVkZWYgWGFsYW5Tb3VyY2VUcmVlQXR0ck5TIE9iamVjdFR5cGU7CgoKCgoKCgogICAgICAg
IHR5cGVkZWYgQXJlbmFBbGxvY2F0b3I8T2JqZWN0VHlwZT4gQXJlbmFBbGxvY2F0b3JUeXBlOwoK
CiAgICAgICAgdHlwZWRlZiBBcmVuYUFsbG9jYXRvclR5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7
CgoKCgoKCiAgICAgICAgWGFsYW5Tb3VyY2VUcmVlQXR0cmlidXRlTlNBbGxvY2F0b3Ioc2l6ZV90
eXBlIHRoZUJsb2NrQ291bnQpOwoKICAgICAgICB+WGFsYW5Tb3VyY2VUcmVlQXR0cmlidXRlTlNB
bGxvY2F0b3IoKTsKIyAxMTQgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVBdHRyaWJ1
dGVOU0FsbG9jYXRvci5ocHAiCiAgICAgICAgT2JqZWN0VHlwZSoKICAgICAgICBjcmVhdGUoCiAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVOYW1lLAogICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlTG9jYWxOYW1lLAog
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlTmFtZXNwYWNl
VVJJLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlUHJl
Zml4LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlVmFs
dWUsCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuU291cmNlVHJlZUVsZW1lbnQqIHRoZU93
bmVyRWxlbWVudCA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0aGVJ
bmRleCA9IDApOwoKCgoKICAgICAgICB2b2lkCiAgICAgICAgcmVzZXQoKTsKCgoKCgoKCiAgICAg
ICAgc2l6ZV90eXBlCiAgICAgICAgZ2V0QmxvY2tDb3VudCgpIGNvbnN0CiAgICAgICAgewogICAg
ICAgICAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yLmdldEJsb2NrQ291bnQoKTsKICAgICAgICB9
CgoKCgoKCiAgICAgICAgc2l6ZV90eXBlCiAgICAgICAgZ2V0QmxvY2tTaXplKCkgY29uc3QKICAg
ICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gbV9hbGxvY2F0b3IuZ2V0QmxvY2tTaXplKCk7
CiAgICAgICAgfQoKcHJpdmF0ZToKCgogICAgICAgIFhhbGFuU291cmNlVHJlZUF0dHJpYnV0ZU5T
QWxsb2NhdG9yKGNvbnN0IFhhbGFuU291cmNlVHJlZUF0dHJpYnV0ZU5TQWxsb2NhdG9yJik7Cgog
ICAgICAgIFhhbGFuU291cmNlVHJlZUF0dHJpYnV0ZU5TQWxsb2NhdG9yJgogICAgICAgIG9wZXJh
dG9yPShjb25zdCBYYWxhblNvdXJjZVRyZWVBdHRyaWJ1dGVOU0FsbG9jYXRvciYpOwoKCiAgICAg
ICAgQXJlbmFBbGxvY2F0b3JUeXBlIG1fYWxsb2NhdG9yOwp9OwojIDgyICJYYWxhblNvdXJjZVRy
ZWUvWGFsYW5Tb3VyY2VUcmVlRG9jdW1lbnQuaHBwIiAyCiMgMSAiWGFsYW5Tb3VyY2VUcmVlL1hh
bGFuU291cmNlVHJlZUF0dHJpYnV0ZXNWZWN0b3IuaHBwIiAxCiMgNjIgIlhhbGFuU291cmNlVHJl
ZS9YYWxhblNvdXJjZVRyZWVBdHRyaWJ1dGVzVmVjdG9yLmhwcCIKIyAxICJYYWxhblNvdXJjZVRy
ZWUvWGFsYW5Tb3VyY2VUcmVlRGVmaW5pdGlvbnMuaHBwIiAxCiMgNjMgIlhhbGFuU291cmNlVHJl
ZS9YYWxhblNvdXJjZVRyZWVBdHRyaWJ1dGVzVmVjdG9yLmhwcCIgMgoKCgojIDEgIi91c3IvbG9j
YWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvbGlz
dCIgMSAzCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfbGlzdC5oIiAxIDMKIyAzMSAiL3Vzci9sb2NhbC9n
Y2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0
ZF9saXN0LmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAxIDMKIyAzMyAiL3Vz
ci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2cr
Ky9iaXRzL3N0ZF9saXN0LmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxsb2MuaCIgMSAzCiMg
MzQgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5j
bHVkZS9nKysvYml0cy9zdGRfbGlzdC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2NvbnN0cnVj
dC5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9saXN0LmgiIDIgMwojIDEgIi91c3IvbG9jYWwv
Z2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9z
dGxfdW5pbml0aWFsaXplZC5oIiAxIDMKIyAzNiAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9saXN0LmgiIDIgMwoj
IDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5j
bHVkZS9nKysvYml0cy9zdGxfbGlzdC5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9saXN0Lmgi
IDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w
L2luY2x1ZGUvZysrL2JpdHMvY29uY2VwdF9jaGVjay5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9n
Y2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0
bF9saXN0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgpzdHJ1Y3QgX0xpc3Rfbm9kZV9iYXNlIHsK
ICBfTGlzdF9ub2RlX2Jhc2UqIF9NX25leHQ7CiAgX0xpc3Rfbm9kZV9iYXNlKiBfTV9wcmV2Owp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9MaXN0X25vZGUgOiBwdWJsaWMgX0xpc3Rf
bm9kZV9iYXNlIHsKICBfVHAgX01fZGF0YTsKfTsKCnN0cnVjdCBfTGlzdF9pdGVyYXRvcl9iYXNl
IHsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVy
ZW5jZV90eXBlOwogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3Jf
Y2F0ZWdvcnk7CgogIF9MaXN0X25vZGVfYmFzZSogX01fbm9kZTsKCiAgX0xpc3RfaXRlcmF0b3Jf
YmFzZShfTGlzdF9ub2RlX2Jhc2UqIF9feCkgOiBfTV9ub2RlKF9feCkge30KICBfTGlzdF9pdGVy
YXRvcl9iYXNlKCkge30KCiAgdm9pZCBfTV9pbmNyKCkgeyBfTV9ub2RlID0gX01fbm9kZS0+X01f
bmV4dDsgfQogIHZvaWQgX01fZGVjcigpIHsgX01fbm9kZSA9IF9NX25vZGUtPl9NX3ByZXY7IH0K
CiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9MaXN0X2l0ZXJhdG9yX2Jhc2UmIF9feCkgY29uc3Qg
ewogICAgcmV0dXJuIF9NX25vZGUgPT0gX194Ll9NX25vZGU7CiAgfQogIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBfTGlzdF9pdGVyYXRvcl9iYXNlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV9u
b2RlICE9IF9feC5fTV9ub2RlOwogIH0KfTsKCnRlbXBsYXRlPGNsYXNzIF9UcCwgY2xhc3MgX1Jl
ZiwgY2xhc3MgX1B0cj4Kc3RydWN0IF9MaXN0X2l0ZXJhdG9yIDogcHVibGljIF9MaXN0X2l0ZXJh
dG9yX2Jhc2UgewogIHR5cGVkZWYgX0xpc3RfaXRlcmF0b3I8X1RwLF9UcCYsX1RwKj4gaXRlcmF0
b3I7CiAgdHlwZWRlZiBfTGlzdF9pdGVyYXRvcjxfVHAsY29uc3QgX1RwJixjb25zdCBfVHAqPiBj
b25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcCxfUmVmLF9QdHI+IF9T
ZWxmOwoKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX1B0ciBwb2ludGVyOwog
IHR5cGVkZWYgX1JlZiByZWZlcmVuY2U7CiAgdHlwZWRlZiBfTGlzdF9ub2RlPF9UcD4gX05vZGU7
CgogIF9MaXN0X2l0ZXJhdG9yKF9Ob2RlKiBfX3gpIDogX0xpc3RfaXRlcmF0b3JfYmFzZShfX3gp
IHt9CiAgX0xpc3RfaXRlcmF0b3IoKSB7fQogIF9MaXN0X2l0ZXJhdG9yKGNvbnN0IGl0ZXJhdG9y
JiBfX3gpIDogX0xpc3RfaXRlcmF0b3JfYmFzZShfX3guX01fbm9kZSkge30KCiAgcmVmZXJlbmNl
IG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICgoX05vZGUqKSBfTV9ub2RlKS0+X01fZGF0YTsg
fQogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9
CgogIF9TZWxmJiBvcGVyYXRvcisrKCkgewogICAgdGhpcy0+X01faW5jcigpOwogICAgcmV0dXJu
ICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewogICAgX1NlbGYgX190bXAgPSAq
dGhpczsKICAgIHRoaXMtPl9NX2luY3IoKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgX1NlbGYm
IG9wZXJhdG9yLS0oKSB7CiAgICB0aGlzLT5fTV9kZWNyKCk7CiAgICByZXR1cm4gKnRoaXM7CiAg
fQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAg
dGhpcy0+X01fZGVjcigpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKIyAxMTggIi91c3IvbG9j
YWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0
cy9zdGxfbGlzdC5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3IsIGJv
b2wgX0lzU3RhdGljPgpjbGFzcyBfTGlzdF9hbGxvY19iYXNlIHsKcHVibGljOgogIHR5cGVkZWYg
dHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQog
ICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigp
IGNvbnN0IHsgcmV0dXJuIF9Ob2RlX2FsbG9jYXRvcjsgfQoKICBfTGlzdF9hbGxvY19iYXNlKGNv
bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX05vZGVfYWxsb2NhdG9yKF9fYSkge30KCnByb3Rl
Y3RlZDoKICBfTGlzdF9ub2RlPF9UcD4qIF9NX2dldF9ub2RlKCkKICAgeyByZXR1cm4gX05vZGVf
YWxsb2NhdG9yLmFsbG9jYXRlKDEpOyB9CiAgdm9pZCBfTV9wdXRfbm9kZShfTGlzdF9ub2RlPF9U
cD4qIF9fcCkKICAgIHsgX05vZGVfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX19wLCAxKTsgfQoKcHJv
dGVjdGVkOgogIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X0xpc3Rfbm9kZTxfVHA+LCBfQWxsb2Nh
dG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgICBfTm9kZV9hbGxvY2F0b3I7CiAgX0xpc3Rf
bm9kZTxfVHA+KiBfTV9ub2RlOwp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxs
b2NhdG9yPgpjbGFzcyBfTGlzdF9hbGxvY19iYXNlPF9UcCwgX0FsbG9jYXRvciwgdHJ1ZT4gewpw
dWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46
OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlw
ZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQoKICBf
TGlzdF9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikge30KCnByb3RlY3RlZDoKICB0
eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X0xpc3Rfbm9kZTxfVHA+LCBfQWxsb2NhdG9y
Pjo6X0FsbG9jX3R5cGUKICAgICAgICAgIF9BbGxvY190eXBlOwogIF9MaXN0X25vZGU8X1RwPiog
X01fZ2V0X25vZGUoKSB7IHJldHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoMSk7IH0KICB2b2lk
IF9NX3B1dF9ub2RlKF9MaXN0X25vZGU8X1RwPiogX19wKSB7IF9BbGxvY190eXBlOjpkZWFsbG9j
YXRlKF9fcCwgMSk7IH0KCnByb3RlY3RlZDoKICBfTGlzdF9ub2RlPF9UcD4qIF9NX25vZGU7Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmNsYXNzIF9MaXN0X2Jhc2UKICA6
IHB1YmxpYyBfTGlzdF9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4Kewpw
dWJsaWM6CiAgdHlwZWRlZiBfTGlzdF9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2Vs
ZXNzPgogICAgICAgICAgX0Jhc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9y
X3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogIF9MaXN0X2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUm
IF9fYSkgOiBfQmFzZShfX2EpIHsKICAgIF9NX25vZGUgPSBfTV9nZXRfbm9kZSgpOwogICAgX01f
bm9kZS0+X01fbmV4dCA9IF9NX25vZGU7CiAgICBfTV9ub2RlLT5fTV9wcmV2ID0gX01fbm9kZTsK
ICB9CiAgfl9MaXN0X2Jhc2UoKSB7CiAgICBjbGVhcigpOwogICAgX01fcHV0X25vZGUoX01fbm9k
ZSk7CiAgfQoKICB2b2lkIGNsZWFyKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0FsbG9jPgp2b2lkCl9MaXN0X2Jhc2U8X1RwLF9BbGxvYz46OmNsZWFyKCkKewogIF9MaXN0X25v
ZGU8X1RwPiogX19jdXIgPSAoX0xpc3Rfbm9kZTxfVHA+KikgX01fbm9kZS0+X01fbmV4dDsKICB3
aGlsZSAoX19jdXIgIT0gX01fbm9kZSkgewogICAgX0xpc3Rfbm9kZTxfVHA+KiBfX3RtcCA9IF9f
Y3VyOwogICAgX19jdXIgPSAoX0xpc3Rfbm9kZTxfVHA+KikgX19jdXItPl9NX25leHQ7CiAgICBf
RGVzdHJveSgmX190bXAtPl9NX2RhdGEpOwogICAgX01fcHV0X25vZGUoX190bXApOwogIH0KICBf
TV9ub2RlLT5fTV9uZXh0ID0gX01fbm9kZTsKICBfTV9ub2RlLT5fTV9wcmV2ID0gX01fbm9kZTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPF9UcD4gPgpj
bGFzcyBsaXN0IDogcHJvdGVjdGVkIF9MaXN0X2Jhc2U8X1RwLCBfQWxsb2M+CnsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgdHlwZWRl
ZiBfTGlzdF9iYXNlPF9UcCwgX0FsbG9jPiBfQmFzZTsKcHJvdGVjdGVkOgogIHR5cGVkZWYgdm9p
ZCogX1ZvaWRfcG9pbnRlcjsKCnB1YmxpYzoKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5
cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqIGNv
bnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBj
b25zdCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBfTGlzdF9ub2RlPF9U
cD4gX05vZGU7CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90
IGRpZmZlcmVuY2VfdHlwZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5
cGUgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0
IHsgcmV0dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0KCnB1YmxpYzoKICB0eXBlZGVmIF9M
aXN0X2l0ZXJhdG9yPF9UcCxfVHAmLF9UcCo+IGl0ZXJhdG9yOwogIHR5cGVkZWYgX0xpc3RfaXRl
cmF0b3I8X1RwLGNvbnN0IF9UcCYsY29uc3QgX1RwKj4gY29uc3RfaXRlcmF0b3I7CgogIHR5cGVk
ZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRv
cjsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7
Cgpwcm90ZWN0ZWQ6CiAgdXNpbmcgX0Jhc2U6Ol9NX25vZGU7CiAgdXNpbmcgX0Jhc2U6Ol9NX3B1
dF9ub2RlOwogIHVzaW5nIF9CYXNlOjpfTV9nZXRfbm9kZTsKCnByb3RlY3RlZDoKICBfTm9kZSog
X01fY3JlYXRlX25vZGUoY29uc3QgX1RwJiBfX3gpCiAgewogICAgX05vZGUqIF9fcCA9IF9NX2dl
dF9ub2RlKCk7CiAgICB0cnkgewogICAgICBfQ29uc3RydWN0KCZfX3AtPl9NX2RhdGEsIF9feCk7
CiAgICB9CiAgICBjYXRjaCguLi4pIHsgX01fcHV0X25vZGUoX19wKTsgdGhyb3c7IH07CiAgICBy
ZXR1cm4gX19wOwogIH0KCiAgX05vZGUqIF9NX2NyZWF0ZV9ub2RlKCkKICB7CiAgICBfTm9kZSog
X19wID0gX01fZ2V0X25vZGUoKTsKICAgIHRyeSB7CiAgICAgIF9Db25zdHJ1Y3QoJl9fcC0+X01f
ZGF0YSk7CiAgICB9CiAgICBjYXRjaCguLi4pIHsgX01fcHV0X25vZGUoX19wKTsgdGhyb3c7IH07
CiAgICByZXR1cm4gX19wOwogIH0KCnB1YmxpYzoKICBleHBsaWNpdCBsaXN0KGNvbnN0IGFsbG9j
YXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKSA6IF9CYXNlKF9fYSkge30KCiAgaXRl
cmF0b3IgYmVnaW4oKSB7IHJldHVybiAoX05vZGUqKShfTV9ub2RlLT5fTV9uZXh0KTsgfQogIGNv
bnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gKF9Ob2RlKikoX01fbm9kZS0+X01f
bmV4dCk7IH0KCiAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gX01fbm9kZTsgfQogIGNvbnN0X2l0
ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX25vZGU7IH0KCiAgcmV2ZXJzZV9pdGVyYXRv
ciByYmVnaW4oKQogICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KICBjb25z
dF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQoKICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKQogICAgeyBy
ZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0
b3IgcmVuZCgpIGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2lu
KCkpOyB9CgogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBfTV9ub2RlLT5fTV9uZXh0ID09
IF9NX25vZGU7IH0KICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsKICAgIHNpemVfdHlwZSBfX3Jl
c3VsdCA9IDA7CiAgICBkaXN0YW5jZShiZWdpbigpLCBlbmQoKSwgX19yZXN1bHQpOwogICAgcmV0
dXJuIF9fcmVzdWx0OwogIH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBz
aXplX3R5cGUoLTEpOyB9CgogIHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9
CiAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1cm4gKmJlZ2luKCk7IH0KICBy
ZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooLS1lbmQoKSk7IH0KICBjb25zdF9yZWZlcmVuY2Ug
YmFjaygpIGNvbnN0IHsgcmV0dXJuICooLS1lbmQoKSk7IH0KCiAgdm9pZCBzd2FwKGxpc3Q8X1Rw
LCBfQWxsb2M+JiBfX3gpIHsgc3RkOjpzd2FwKF9NX25vZGUsIF9feC5fTV9ub2RlKTsgfQoKICBp
dGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpIHsKICAg
IF9Ob2RlKiBfX3RtcCA9IF9NX2NyZWF0ZV9ub2RlKF9feCk7CiAgICBfX3RtcC0+X01fbmV4dCA9
IF9fcG9zaXRpb24uX01fbm9kZTsKICAgIF9fdG1wLT5fTV9wcmV2ID0gX19wb3NpdGlvbi5fTV9u
b2RlLT5fTV9wcmV2OwogICAgX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2LT5fTV9uZXh0ID0g
X190bXA7CiAgICBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXYgPSBfX3RtcDsKICAgIHJldHVy
biBfX3RtcDsKICB9CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsgcmV0
dXJuIGluc2VydChfX3Bvc2l0aW9uLCBfVHAoKSk7IH0KCgogIHRlbXBsYXRlPGNsYXNzIF9JbnRl
Z2VyPgogIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLCBfSW50ZWdlciBf
X24sIF9JbnRlZ2VyIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkg
ewogICAgX01fZmlsbF9pbnNlcnQoX19wb3MsIChzaXplX3R5cGUpIF9fbiwgKF9UcCkgX194KTsK
ICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2luc2VydF9k
aXNwYXRjaChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJ
dGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19mYWxzZV90eXBlKTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
PgogIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf
SW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8
X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01faW5zZXJ0X2Rpc3Bh
dGNoKF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHZvaWQgaW5z
ZXJ0KGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCkKICAgIHsg
X01fZmlsbF9pbnNlcnQoX19wb3MsIF9fbiwgX194KTsgfQogIHZvaWQgX01fZmlsbF9pbnNlcnQo
aXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194KTsKCiAgdm9pZCBw
dXNoX2Zyb250KGNvbnN0IF9UcCYgX194KSB7IGluc2VydChiZWdpbigpLCBfX3gpOyB9CiAgdm9p
ZCBwdXNoX2Zyb250KCkge2luc2VydChiZWdpbigpKTt9CiAgdm9pZCBwdXNoX2JhY2soY29uc3Qg
X1RwJiBfX3gpIHsgaW5zZXJ0KGVuZCgpLCBfX3gpOyB9CiAgdm9pZCBwdXNoX2JhY2soKSB7aW5z
ZXJ0KGVuZCgpKTt9CgogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAg
IF9MaXN0X25vZGVfYmFzZSogX19uZXh0X25vZGUgPSBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX25l
eHQ7CiAgICBfTGlzdF9ub2RlX2Jhc2UqIF9fcHJldl9ub2RlID0gX19wb3NpdGlvbi5fTV9ub2Rl
LT5fTV9wcmV2OwogICAgX05vZGUqIF9fbiA9IChfTm9kZSopIF9fcG9zaXRpb24uX01fbm9kZTsK
ICAgIF9fcHJldl9ub2RlLT5fTV9uZXh0ID0gX19uZXh0X25vZGU7CiAgICBfX25leHRfbm9kZS0+
X01fcHJldiA9IF9fcHJldl9ub2RlOwogICAgX0Rlc3Ryb3koJl9fbi0+X01fZGF0YSk7CiAgICBf
TV9wdXRfbm9kZShfX24pOwogICAgcmV0dXJuIGl0ZXJhdG9yKChfTm9kZSopIF9fbmV4dF9ub2Rl
KTsKICB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0
KTsKICB2b2lkIGNsZWFyKCkgeyBfQmFzZTo6Y2xlYXIoKTsgfQoKICB2b2lkIHJlc2l6ZShzaXpl
X3R5cGUgX19uZXdfc2l6ZSwgY29uc3QgX1RwJiBfX3gpOwogIHZvaWQgcmVzaXplKHNpemVfdHlw
ZSBfX25ld19zaXplKSB7IHRoaXMtPnJlc2l6ZShfX25ld19zaXplLCBfVHAoKSk7IH0KCiAgdm9p
ZCBwb3BfZnJvbnQoKSB7IGVyYXNlKGJlZ2luKCkpOyB9CiAgdm9pZCBwb3BfYmFjaygpIHsKICAg
IGl0ZXJhdG9yIF9fdG1wID0gZW5kKCk7CiAgICBlcmFzZSgtLV9fdG1wKTsKICB9CiAgbGlzdChz
aXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUsCiAgICAgICBjb25zdCBhbGxvY2F0b3Jf
dHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19hKQogICAgeyBpbnNl
cnQoYmVnaW4oKSwgX19uLCBfX3ZhbHVlKTsgfQogIGV4cGxpY2l0IGxpc3Qoc2l6ZV90eXBlIF9f
bikKICAgIDogX0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgaW5zZXJ0KGJlZ2luKCksIF9f
biwgX1RwKCkpOyB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIGxpc3Qo
X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgY29u
c3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9f
YSkKICAgIHsgaW5zZXJ0KGJlZ2luKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgbGlzdChjb25z
dCBsaXN0PF9UcCwgX0FsbG9jPiYgX194KSA6IF9CYXNlKF9feC5nZXRfYWxsb2NhdG9yKCkpCiAg
ICB7IGluc2VydChiZWdpbigpLCBfX3guYmVnaW4oKSwgX194LmVuZCgpKTsgfQoKICB+bGlzdCgp
IHsgfQoKICBsaXN0PF9UcCwgX0FsbG9jPiYgb3BlcmF0b3I9KGNvbnN0IGxpc3Q8X1RwLCBfQWxs
b2M+JiBfX3gpOwoKcHVibGljOgoKCgoKCiAgdm9pZCBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29u
c3QgX1RwJiBfX3ZhbCkgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9fdmFsKTsgfQoKICB2b2lkIF9N
X2ZpbGxfYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwpOwoKICB0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19m
aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19p
bnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2Fzc2ln
bl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRl
IDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50ZWdlciBfX24s
IF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAgIHsgX01fZmlsbF9hc3NpZ24oKHNpemVf
dHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yPgogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J
bnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5
cGUpOwoKcHJvdGVjdGVkOgogIHZvaWQgdHJhbnNmZXIoaXRlcmF0b3IgX19wb3NpdGlvbiwgaXRl
cmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICBpZiAoX19wb3NpdGlvbiAhPSBf
X2xhc3QpIHsKCiAgICAgIF9fbGFzdC5fTV9ub2RlLT5fTV9wcmV2LT5fTV9uZXh0ID0gX19wb3Np
dGlvbi5fTV9ub2RlOwogICAgICBfX2ZpcnN0Ll9NX25vZGUtPl9NX3ByZXYtPl9NX25leHQgPSBf
X2xhc3QuX01fbm9kZTsKICAgICAgX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2LT5fTV9uZXh0
ID0gX19maXJzdC5fTV9ub2RlOwoKCiAgICAgIF9MaXN0X25vZGVfYmFzZSogX190bXAgPSBfX3Bv
c2l0aW9uLl9NX25vZGUtPl9NX3ByZXY7CiAgICAgIF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJl
diA9IF9fbGFzdC5fTV9ub2RlLT5fTV9wcmV2OwogICAgICBfX2xhc3QuX01fbm9kZS0+X01fcHJl
diA9IF9fZmlyc3QuX01fbm9kZS0+X01fcHJldjsKICAgICAgX19maXJzdC5fTV9ub2RlLT5fTV9w
cmV2ID0gX190bXA7CiAgICB9CiAgfQoKcHVibGljOgogIHZvaWQgc3BsaWNlKGl0ZXJhdG9yIF9f
cG9zaXRpb24sIGxpc3QmIF9feCkgewogICAgaWYgKCFfX3guZW1wdHkoKSkKICAgICAgdGhpcy0+
dHJhbnNmZXIoX19wb3NpdGlvbiwgX194LmJlZ2luKCksIF9feC5lbmQoKSk7CiAgfQogIHZvaWQg
c3BsaWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGxpc3QmLCBpdGVyYXRvciBfX2kpIHsKICAgIGl0
ZXJhdG9yIF9faiA9IF9faTsKICAgICsrX19qOwogICAgaWYgKF9fcG9zaXRpb24gPT0gX19pIHx8
IF9fcG9zaXRpb24gPT0gX19qKSByZXR1cm47CiAgICB0aGlzLT50cmFuc2ZlcihfX3Bvc2l0aW9u
LCBfX2ksIF9faik7CiAgfQogIHZvaWQgc3BsaWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGxpc3Qm
LCBpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsKICAgIGlmIChfX2ZpcnN0ICE9
IF9fbGFzdCkKICAgICAgdGhpcy0+dHJhbnNmZXIoX19wb3NpdGlvbiwgX19maXJzdCwgX19sYXN0
KTsKICB9CiAgdm9pZCByZW1vdmUoY29uc3QgX1RwJiBfX3ZhbHVlKTsKICB2b2lkIHVuaXF1ZSgp
OwogIHZvaWQgbWVyZ2UobGlzdCYgX194KTsKICB2b2lkIHJldmVyc2UoKTsKICB2b2lkIHNvcnQo
KTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+IHZvaWQgcmVtb3ZlX2lmKF9QcmVkaWNh
dGUpOwogIHRlbXBsYXRlIDxjbGFzcyBfQmluYXJ5UHJlZGljYXRlPiB2b2lkIHVuaXF1ZShfQmlu
YXJ5UHJlZGljYXRlKTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4gdm9p
ZCBtZXJnZShsaXN0JiwgX1N0cmljdFdlYWtPcmRlcmluZyk7CiAgdGVtcGxhdGUgPGNsYXNzIF9T
dHJpY3RXZWFrT3JkZXJpbmc+IHZvaWQgc29ydChfU3RyaWN0V2Vha09yZGVyaW5nKTsKfTsKCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PShj
b25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3gsIGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feSkK
ewogIHR5cGVkZWYgdHlwZW5hbWUgbGlzdDxfVHAsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IgY29u
c3RfaXRlcmF0b3I7CiAgY29uc3RfaXRlcmF0b3IgX19lbmQxID0gX194LmVuZCgpOwogIGNvbnN0
X2l0ZXJhdG9yIF9fZW5kMiA9IF9feS5lbmQoKTsKCiAgY29uc3RfaXRlcmF0b3IgX19pMSA9IF9f
eC5iZWdpbigpOwogIGNvbnN0X2l0ZXJhdG9yIF9faTIgPSBfX3kuYmVnaW4oKTsKICB3aGlsZSAo
X19pMSAhPSBfX2VuZDEgJiYgX19pMiAhPSBfX2VuZDIgJiYgKl9faTEgPT0gKl9faTIpIHsKICAg
ICsrX19pMTsKICAgICsrX19pMjsKICB9CiAgcmV0dXJuIF9faTEgPT0gX19lbmQxICYmIF9faTIg
PT0gX19lbmQyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBi
b29sIG9wZXJhdG9yPChjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gbGV4aWNvZ3Jh
cGhpY2FsX2NvbXBhcmUoX194LmJlZ2luKCksIF9feC5lbmQoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBsaXN0PF9U
cCxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdDxfVHAsX0Fs
bG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IGxpc3Q8X1RwLF9B
bGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4m
IF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBf
X3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195KSB7
CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Fs
bG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feCwK
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kpIHsKICBy
ZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+
CmlubGluZSB2b2lkCnN3YXAobGlzdDxfVHAsIF9BbGxvYz4mIF9feCwgbGlzdDxfVHAsIF9BbGxv
Yz4mIF9feSkKewogIF9feC5zd2FwKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CnZvaWQKbGlzdDxfVHAsIF9BbGxv
Yz46Ol9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBl
KQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaW5zZXJ0KF9f
cG9zaXRpb24sICpfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j
Pgp2b2lkCmxpc3Q8X1RwLCBfQWxsb2M+OjpfTV9maWxsX2luc2VydChpdGVyYXRvciBfX3Bvc2l0
aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29u
c3QgX1RwJiBfX3gpCnsKICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uKQogICAgaW5zZXJ0KF9fcG9z
aXRpb24sIF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KdHlwZW5h
bWUgbGlzdDxfVHAsX0FsbG9jPjo6aXRlcmF0b3IgbGlzdDxfVHAsIF9BbGxvYz46OmVyYXNlKGl0
ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpdGVyYXRvciBfX2xhc3QpCnsKICB3aGlsZSAoX19maXJzdCAh
PSBfX2xhc3QpCiAgICBlcmFzZShfX2ZpcnN0KyspOwogIHJldHVybiBfX2xhc3Q7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6cmVz
aXplKHNpemVfdHlwZSBfX25ld19zaXplLCBjb25zdCBfVHAmIF9feCkKewogIGl0ZXJhdG9yIF9f
aSA9IGJlZ2luKCk7CiAgc2l6ZV90eXBlIF9fbGVuID0gMDsKICBmb3IgKCA7IF9faSAhPSBlbmQo
KSAmJiBfX2xlbiA8IF9fbmV3X3NpemU7ICsrX19pLCArK19fbGVuKQogICAgOwogIGlmIChfX2xl
biA9PSBfX25ld19zaXplKQogICAgZXJhc2UoX19pLCBlbmQoKSk7CiAgZWxzZQogICAgaW5zZXJ0
KGVuZCgpLCBfX25ld19zaXplIC0gX19sZW4sIF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvYz4KbGlzdDxfVHAsIF9BbGxvYz4mIGxpc3Q8X1RwLCBfQWxsb2M+OjpvcGVy
YXRvcj0oY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9feCkKewogIGlmICh0aGlzICE9ICZfX3gp
IHsKICAgIGl0ZXJhdG9yIF9fZmlyc3QxID0gYmVnaW4oKTsKICAgIGl0ZXJhdG9yIF9fbGFzdDEg
PSBlbmQoKTsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fZmlyc3QyID0gX194LmJlZ2luKCk7CiAgICBj
b25zdF9pdGVyYXRvciBfX2xhc3QyID0gX194LmVuZCgpOwogICAgd2hpbGUgKF9fZmlyc3QxICE9
IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgKl9fZmlyc3QxKysgPSAqX19m
aXJzdDIrKzsKICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICBlcmFzZShfX2ZpcnN0
MSwgX19sYXN0MSk7CiAgICBlbHNlCiAgICAgIGluc2VydChfX2xhc3QxLCBfX2ZpcnN0MiwgX19s
YXN0Mik7CiAgfQogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0FsbG9jPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjpfTV9maWxsX2Fzc2lnbihzaXplX3R5cGUg
X19uLCBjb25zdCBfVHAmIF9fdmFsKSB7CiAgaXRlcmF0b3IgX19pID0gYmVnaW4oKTsKICBmb3Ig
KCA7IF9faSAhPSBlbmQoKSAmJiBfX24gPiAwOyArK19faSwgLS1fX24pCiAgICAqX19pID0gX192
YWw7CiAgaWYgKF9fbiA+IDApCiAgICBpbnNlcnQoZW5kKCksIF9fbiwgX192YWwpOwogIGVsc2UK
ICAgIGVyYXNlKF9faSwgZW5kKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxs
b2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgp2b2lkCmxpc3Q8X1RwLCBfQWxsb2M+Ojpf
TV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0MiwgX0lucHV0SXRlciBfX2xhc3Qy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKewog
IGl0ZXJhdG9yIF9fZmlyc3QxID0gYmVnaW4oKTsKICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7
CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7ICsr
X19maXJzdDEsICsrX19maXJzdDIpCiAgICAqX19maXJzdDEgPSAqX19maXJzdDI7CiAgaWYgKF9f
Zmlyc3QyID09IF9fbGFzdDIpCiAgICBlcmFzZShfX2ZpcnN0MSwgX19sYXN0MSk7CiAgZWxzZQog
ICAgaW5zZXJ0KF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjpyZW1vdmUoY29uc3Qg
X1RwJiBfX3ZhbHVlKQp7CiAgaXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CiAgaXRlcmF0b3Ig
X19sYXN0ID0gZW5kKCk7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBpdGVyYXRv
ciBfX25leHQgPSBfX2ZpcnN0OwogICAgKytfX25leHQ7CiAgICBpZiAoKl9fZmlyc3QgPT0gX192
YWx1ZSkgZXJhc2UoX19maXJzdCk7CiAgICBfX2ZpcnN0ID0gX19uZXh0OwogIH0KfQoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+Ojp1bmlx
dWUoKQp7CiAgaXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CiAgaXRlcmF0b3IgX19sYXN0ID0g
ZW5kKCk7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgaXRlcmF0b3IgX19uZXh0
ID0gX19maXJzdDsKICB3aGlsZSAoKytfX25leHQgIT0gX19sYXN0KSB7CiAgICBpZiAoKl9fZmly
c3QgPT0gKl9fbmV4dCkKICAgICAgZXJhc2UoX19uZXh0KTsKICAgIGVsc2UKICAgICAgX19maXJz
dCA9IF9fbmV4dDsKICAgIF9fbmV4dCA9IF9fZmlyc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgbGlzdDxfVHAsIF9BbGxvYz46Om1lcmdlKGxpc3Q8X1Rw
LCBfQWxsb2M+JiBfX3gpCnsKICBpdGVyYXRvciBfX2ZpcnN0MSA9IGJlZ2luKCk7CiAgaXRlcmF0
b3IgX19sYXN0MSA9IGVuZCgpOwogIGl0ZXJhdG9yIF9fZmlyc3QyID0gX194LmJlZ2luKCk7CiAg
aXRlcmF0b3IgX19sYXN0MiA9IF9feC5lbmQoKTsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0
MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkg
ewogICAgICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0MjsKICAgICAgdHJhbnNmZXIoX19maXJz
dDEsIF9fZmlyc3QyLCArK19fbmV4dCk7CiAgICAgIF9fZmlyc3QyID0gX19uZXh0OwogICAgfQog
ICAgZWxzZQogICAgICArK19fZmlyc3QxOwogIGlmIChfX2ZpcnN0MiAhPSBfX2xhc3QyKSB0cmFu
c2ZlcihfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7Cn0KCmlubGluZSB2b2lkIF9fTGlzdF9i
YXNlX3JldmVyc2UoX0xpc3Rfbm9kZV9iYXNlKiBfX3ApCnsKICBfTGlzdF9ub2RlX2Jhc2UqIF9f
dG1wID0gX19wOwogIGRvIHsKICAgIHN0ZDo6c3dhcChfX3RtcC0+X01fbmV4dCwgX190bXAtPl9N
X3ByZXYpOwogICAgX190bXAgPSBfX3RtcC0+X01fcHJldjsKICB9IHdoaWxlIChfX3RtcCAhPSBf
X3ApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIGxp
c3Q8X1RwLCBfQWxsb2M+OjpyZXZlcnNlKCkKewogIF9fTGlzdF9iYXNlX3JldmVyc2UodGhpcy0+
X01fbm9kZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBsaXN0
PF9UcCwgX0FsbG9jPjo6c29ydCgpCnsKCiAgaWYgKF9NX25vZGUtPl9NX25leHQgIT0gX01fbm9k
ZSAmJiBfTV9ub2RlLT5fTV9uZXh0LT5fTV9uZXh0ICE9IF9NX25vZGUpIHsKICAgIGxpc3Q8X1Rw
LCBfQWxsb2M+IF9fY2Fycnk7CiAgICBsaXN0PF9UcCwgX0FsbG9jPiBfX2NvdW50ZXJbNjRdOwog
ICAgaW50IF9fZmlsbCA9IDA7CiAgICB3aGlsZSAoIWVtcHR5KCkpIHsKICAgICAgX19jYXJyeS5z
cGxpY2UoX19jYXJyeS5iZWdpbigpLCAqdGhpcywgYmVnaW4oKSk7CiAgICAgIGludCBfX2kgPSAw
OwogICAgICB3aGlsZShfX2kgPCBfX2ZpbGwgJiYgIV9fY291bnRlcltfX2ldLmVtcHR5KCkpIHsK
ICAgICAgICBfX2NvdW50ZXJbX19pXS5tZXJnZShfX2NhcnJ5KTsKICAgICAgICBfX2NhcnJ5LnN3
YXAoX19jb3VudGVyW19faSsrXSk7CiAgICAgIH0KICAgICAgX19jYXJyeS5zd2FwKF9fY291bnRl
cltfX2ldKTsKICAgICAgaWYgKF9faSA9PSBfX2ZpbGwpICsrX19maWxsOwogICAgfQoKICAgIGZv
ciAoaW50IF9faSA9IDE7IF9faSA8IF9fZmlsbDsgKytfX2kpCiAgICAgIF9fY291bnRlcltfX2ld
Lm1lcmdlKF9fY291bnRlcltfX2ktMV0pOwogICAgc3dhcChfX2NvdW50ZXJbX19maWxsLTFdKTsK
ICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNz
IF9QcmVkaWNhdGU+CnZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OnJlbW92ZV9pZihfUHJlZGljYXRl
IF9fcHJlZCkKewogIGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigpOwogIGl0ZXJhdG9yIF9fbGFz
dCA9IGVuZCgpOwogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgaXRlcmF0b3IgX19u
ZXh0ID0gX19maXJzdDsKICAgICsrX19uZXh0OwogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIGVy
YXNlKF9fZmlyc3QpOwogICAgX19maXJzdCA9IF9fbmV4dDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CnZv
aWQgbGlzdDxfVHAsIF9BbGxvYz46OnVuaXF1ZShfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3By
ZWQpCnsKICBpdGVyYXRvciBfX2ZpcnN0ID0gYmVnaW4oKTsKICBpdGVyYXRvciBfX2xhc3QgPSBl
bmQoKTsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICBpdGVyYXRvciBfX25leHQg
PSBfX2ZpcnN0OwogIHdoaWxlICgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgIGlmIChfX2JpbmFy
eV9wcmVkKCpfX2ZpcnN0LCAqX19uZXh0KSkKICAgICAgZXJhc2UoX19uZXh0KTsKICAgIGVsc2UK
ICAgICAgX19maXJzdCA9IF9fbmV4dDsKICAgIF9fbmV4dCA9IF9fZmlyc3Q7CiAgfQp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfU3RyaWN0V2Vh
a09yZGVyaW5nPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjptZXJnZShsaXN0PF9UcCwgX0FsbG9j
PiYgX194LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU3RyaWN0V2Vha09yZGVyaW5n
IF9fY29tcCkKewogIGl0ZXJhdG9yIF9fZmlyc3QxID0gYmVnaW4oKTsKICBpdGVyYXRvciBfX2xh
c3QxID0gZW5kKCk7CiAgaXRlcmF0b3IgX19maXJzdDIgPSBfX3guYmVnaW4oKTsKICBpdGVyYXRv
ciBfX2xhc3QyID0gX194LmVuZCgpOwogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9f
Zmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkg
ewogICAgICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0MjsKICAgICAgdHJhbnNmZXIoX19maXJz
dDEsIF9fZmlyc3QyLCArK19fbmV4dCk7CiAgICAgIF9fZmlyc3QyID0gX19uZXh0OwogICAgfQog
ICAgZWxzZQogICAgICArK19fZmlyc3QxOwogIGlmIChfX2ZpcnN0MiAhPSBfX2xhc3QyKSB0cmFu
c2ZlcihfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9TdHJpY3RXZWFrT3JkZXJpbmc+CnZvaWQg
bGlzdDxfVHAsIF9BbGxvYz46OnNvcnQoX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApCnsKCiAg
aWYgKF9NX25vZGUtPl9NX25leHQgIT0gX01fbm9kZSAmJiBfTV9ub2RlLT5fTV9uZXh0LT5fTV9u
ZXh0ICE9IF9NX25vZGUpIHsKICAgIGxpc3Q8X1RwLCBfQWxsb2M+IF9fY2Fycnk7CiAgICBsaXN0
PF9UcCwgX0FsbG9jPiBfX2NvdW50ZXJbNjRdOwogICAgaW50IF9fZmlsbCA9IDA7CiAgICB3aGls
ZSAoIWVtcHR5KCkpIHsKICAgICAgX19jYXJyeS5zcGxpY2UoX19jYXJyeS5iZWdpbigpLCAqdGhp
cywgYmVnaW4oKSk7CiAgICAgIGludCBfX2kgPSAwOwogICAgICB3aGlsZShfX2kgPCBfX2ZpbGwg
JiYgIV9fY291bnRlcltfX2ldLmVtcHR5KCkpIHsKICAgICAgICBfX2NvdW50ZXJbX19pXS5tZXJn
ZShfX2NhcnJ5LCBfX2NvbXApOwogICAgICAgIF9fY2Fycnkuc3dhcChfX2NvdW50ZXJbX19pKytd
KTsKICAgICAgfQogICAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19faV0pOwogICAgICBpZiAo
X19pID09IF9fZmlsbCkgKytfX2ZpbGw7CiAgICB9CgogICAgZm9yIChpbnQgX19pID0gMTsgX19p
IDwgX19maWxsOyArK19faSkKICAgICAgX19jb3VudGVyW19faV0ubWVyZ2UoX19jb3VudGVyW19f
aS0xXSwgX19jb21wKTsKICAgIHN3YXAoX19jb3VudGVyW19fZmlsbC0xXSk7CiAgfQp9Cgp9CiMg
MzcgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5j
bHVkZS9nKysvYml0cy9zdGRfbGlzdC5oIiAyIDMKIyAzICIvdXNyL2xvY2FsL2djYzMvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2xpc3QiIDIgMwojIDY3ICJY
YWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlQXR0cmlidXRlc1ZlY3Rvci5ocHAiIDIKIyAx
ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1
ZGUvZysrL3V0aWxpdHkiIDEgMwoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX3V0aWxpdHkuaCIgMSAzCiMg
MzEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5j
bHVkZS9nKysvYml0cy9zdGRfdXRpbGl0eS5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9pNjg2LXBjLWxpbnV4LWdu
dS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzMiAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF91dGlsaXR5LmgiIDIg
MwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAv
aW5jbHVkZS9nKysvYml0cy9zdGxfcmVsb3BzLmgiIDEgMwojIDQ0ICIvdXNyL2xvY2FsL2djYzMv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX3Jl
bG9wcy5oIiAzCm5hbWVzcGFjZSBzdGQKewogIG5hbWVzcGFjZSByZWxfb3BzCiAgewoKdGVtcGxh
dGUgPGNsYXNzIF9UcD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfVHAmIF9feCwgY29u
c3QgX1RwJiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9f
eSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBi
b29sIG9wZXJhdG9yPD0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSB7CiAgcmV0dXJu
ICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGJvb2wgb3BlcmF0
b3I+PShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBf
X3kpOwp9CgogIH0KfQojIDMzICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX3V0aWxpdHkuaCIgMiAzCiMgMSAiL3Vz
ci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2cr
Ky9iaXRzL3N0bF9wYWlyLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX3V0aWxpdHkuaCIgMiAz
CiMgMyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9p
bmNsdWRlL2crKy91dGlsaXR5IiAyIDMKIyA2OCAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNl
VHJlZUF0dHJpYnV0ZXNWZWN0b3IuaHBwIiAyCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy92ZWN0b3IiIDEgMwojIDY5ICJY
YWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlQXR0cmlidXRlc1ZlY3Rvci5ocHAiIDIKCgoK
Y2xhc3MgWGFsYW5Tb3VyY2VUcmVlQXR0cjsKCgoKY2xhc3MgWGFsYW5Tb3VyY2VUcmVlQXR0cmli
dXRlc1ZlY3Rvcgp7CnB1YmxpYzoKCgoKCgoKCiAgICAgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxY
YWxhblNvdXJjZVRyZWVBdHRyKj4gVmVjdG9yVHlwZTsKICAgICAgICB0eXBlZGVmIFZlY3RvclR5
cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8c2l6ZV90
eXBlLCBWZWN0b3JUeXBlPiBMaXN0RW50cnlUeXBlOwogICAgICAgIHR5cGVkZWYgc3RkOjpsaXN0
PExpc3RFbnRyeVR5cGU+IExpc3RUeXBlOwoKCgogICAgICAgIGVudW0geyBlRGVmYXVsdEJsb2Nr
U2l6ZSA9IDUwMCB9OwoKCgoKCgogICAgICAgIFhhbGFuU291cmNlVHJlZUF0dHJpYnV0ZXNWZWN0
b3Ioc2l6ZV90eXBlIHRoZUJsb2NrU2l6ZSA9IGVEZWZhdWx0QmxvY2tTaXplKTsKCiAgICAgICAg
flhhbGFuU291cmNlVHJlZUF0dHJpYnV0ZXNWZWN0b3IoKTsKIyAxMTEgIlhhbGFuU291cmNlVHJl
ZS9YYWxhblNvdXJjZVRyZWVBdHRyaWJ1dGVzVmVjdG9yLmhwcCIKICAgICAgICBYYWxhblNvdXJj
ZVRyZWVBdHRyKioKICAgICAgICBhbGxvY2F0ZShzaXplX3R5cGUgdGhlQ291bnQpOwoKcHJpdmF0
ZToKCgogICAgICAgIFhhbGFuU291cmNlVHJlZUF0dHIqKgogICAgICAgIGNyZWF0ZUVudHJ5KAog
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlQmxvY2tTaXplLAogICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlQ291bnQpOwoKICAgICAgICBMaXN0RW50cnlUeXBl
KgogICAgICAgIGZpbmRFbnRyeShzaXplX3R5cGUgdGhlQ291bnQpOwoKCiAgICAgICAgWGFsYW5T
b3VyY2VUcmVlQXR0cmlidXRlc1ZlY3Rvcihjb25zdCBYYWxhblNvdXJjZVRyZWVBdHRyaWJ1dGVz
VmVjdG9yJiB0aGVTb3VyY2UpOwoKICAgICAgICBYYWxhblNvdXJjZVRyZWVBdHRyaWJ1dGVzVmVj
dG9yJgogICAgICAgIG9wZXJhdG9yPShjb25zdCBYYWxhblNvdXJjZVRyZWVBdHRyaWJ1dGVzVmVj
dG9yJiB0aGVTb3VyY2UpOwoKICAgICAgICBib29sCiAgICAgICAgb3BlcmF0b3I9PShjb25zdCBY
YWxhblNvdXJjZVRyZWVBdHRyaWJ1dGVzVmVjdG9yJiB0aGVSSFMpIGNvbnN0OwoKCgogICAgICAg
IExpc3RUeXBlIG1fbGlzdDsKCiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIG1fYmxvY2tTaXplOwoK
ICAgICAgICBMaXN0RW50cnlUeXBlKiBtX2xhc3RFbnRyeUZvdW5kOwp9OwojIDgzICJYYWxhblNv
dXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRG9jdW1lbnQuaHBwIiAyCiMgMSAiWGFsYW5Tb3VyY2VU
cmVlL1hhbGFuU291cmNlVHJlZUNvbW1lbnRBbGxvY2F0b3IuaHBwIiAxCiMgNjMgIlhhbGFuU291
cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVDb21tZW50QWxsb2NhdG9yLmhwcCIKIyAxICJYYWxhblNv
dXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRGVmaW5pdGlvbnMuaHBwIiAxCiMgNjQgIlhhbGFuU291
cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVDb21tZW50QWxsb2NhdG9yLmhwcCIgMgoKCgojIDEgIlBs
YXRmb3JtU3VwcG9ydC9BcmVuYUFsbG9jYXRvci5ocHAiIDEKIyA2OCAiWGFsYW5Tb3VyY2VUcmVl
L1hhbGFuU291cmNlVHJlZUNvbW1lbnRBbGxvY2F0b3IuaHBwIiAyCgoKCiMgMSAiWGFsYW5Tb3Vy
Y2VUcmVlL1hhbGFuU291cmNlVHJlZUNvbW1lbnQuaHBwIiAxCiMgNzIgIlhhbGFuU291cmNlVHJl
ZS9YYWxhblNvdXJjZVRyZWVDb21tZW50QWxsb2NhdG9yLmhwcCIgMgoKCgpjbGFzcyBYYWxhblNv
dXJjZVRyZWVDb21tZW50QWxsb2NhdG9yCnsKcHVibGljOgoKICAgICAgICB0eXBlZGVmIFhhbGFu
U291cmNlVHJlZUNvbW1lbnQgT2JqZWN0VHlwZTsKCgoKCgoKCiAgICAgICAgdHlwZWRlZiBBcmVu
YUFsbG9jYXRvcjxPYmplY3RUeXBlPiBBcmVuYUFsbG9jYXRvclR5cGU7CgoKICAgICAgICB0eXBl
ZGVmIEFyZW5hQWxsb2NhdG9yVHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKCgoKCgoKICAgICAg
ICBYYWxhblNvdXJjZVRyZWVDb21tZW50QWxsb2NhdG9yKHNpemVfdHlwZSB0aGVCbG9ja0NvdW50
KTsKCiAgICAgICAgflhhbGFuU291cmNlVHJlZUNvbW1lbnRBbGxvY2F0b3IoKTsKIyAxMTMgIlhh
bGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVDb21tZW50QWxsb2NhdG9yLmhwcCIKICAgICAg
ICBPYmplY3RUeXBlKgogICAgICAgIGNyZWF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgWGFsYW5ET01TdHJpbmcmIHRoZURhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFu
U291cmNlVHJlZURvY3VtZW50KiB0aGVPd25lckRvY3VtZW50LAogICAgICAgICAgICAgICAgICAg
ICAgICBYYWxhblNvdXJjZVRyZWVFbGVtZW50KiB0aGVQYXJlbnRFbGVtZW50ID0gMCwKICAgICAg
ICAgICAgICAgICAgICAgICAgWGFsYW5Ob2RlKiB0aGVQcmV2aW91c1NpYmxpbmcgPSAwLAogICAg
ICAgICAgICAgICAgICAgICAgICBYYWxhbk5vZGUqIHRoZU5leHRTaWJsaW5nID0gMCwKICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRoZUluZGV4ID0gMCk7CgoKCgogICAgICAg
IHZvaWQKICAgICAgICByZXNldCgpOwoKCgoKCgoKICAgICAgICBzaXplX3R5cGUKICAgICAgICBn
ZXRCbG9ja0NvdW50KCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gbV9h
bGxvY2F0b3IuZ2V0QmxvY2tDb3VudCgpOwogICAgICAgIH0KCgoKCgoKICAgICAgICBzaXplX3R5
cGUKICAgICAgICBnZXRCbG9ja1NpemUoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgICAg
IHJldHVybiBtX2FsbG9jYXRvci5nZXRCbG9ja1NpemUoKTsKICAgICAgICB9Cgpwcml2YXRlOgoK
CiAgICAgICAgWGFsYW5Tb3VyY2VUcmVlQ29tbWVudEFsbG9jYXRvcihjb25zdCBYYWxhblNvdXJj
ZVRyZWVDb21tZW50QWxsb2NhdG9yJik7CgogICAgICAgIFhhbGFuU291cmNlVHJlZUNvbW1lbnRB
bGxvY2F0b3ImCiAgICAgICAgb3BlcmF0b3I9KGNvbnN0IFhhbGFuU291cmNlVHJlZUNvbW1lbnRB
bGxvY2F0b3ImKTsKCgogICAgICAgIEFyZW5hQWxsb2NhdG9yVHlwZSBtX2FsbG9jYXRvcjsKfTsK
IyA4NCAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZURvY3VtZW50LmhwcCIgMgojIDEg
IlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVFbGVtZW50QWxsb2NhdG9yLmhwcCIgMQoj
IDYzICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRWxlbWVudEFsbG9jYXRvci5ocHAi
CiMgMSAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZURlZmluaXRpb25zLmhwcCIgMQoj
IDY0ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRWxlbWVudEFsbG9jYXRvci5ocHAi
IDIKCgoKIyAxICJQbGF0Zm9ybVN1cHBvcnQvQXJlbmFBbGxvY2F0b3IuaHBwIiAxCiMgNjggIlhh
bGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVFbGVtZW50QWxsb2NhdG9yLmhwcCIgMgoKCgoj
IDEgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVFbGVtZW50LmhwcCIgMQojIDYyICJY
YWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRWxlbWVudC5ocHAiCiMgMSAiWGFsYW5Tb3Vy
Y2VUcmVlL1hhbGFuU291cmNlVHJlZURlZmluaXRpb25zLmhwcCIgMQojIDYzICJYYWxhblNvdXJj
ZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRWxlbWVudC5ocHAiIDIKCgoKIyAxICJYYWxhbkRPTS9YYWxh
bkRPTVN0cmluZy5ocHAiIDEKIyA2NyAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZUVs
ZW1lbnQuaHBwIiAyCiMgMSAiWGFsYW5ET00vWGFsYW5FbGVtZW50LmhwcCIgMQojIDYyICJYYWxh
bkRPTS9YYWxhbkVsZW1lbnQuaHBwIgojIDEgIlhhbGFuRE9NL1hhbGFuRE9NRGVmaW5pdGlvbnMu
aHBwIiAxCiMgNjMgIlhhbGFuRE9NL1hhbGFuRWxlbWVudC5ocHAiIDIKIyAxICJYYWxhbkRPTS9Y
YWxhbk5vZGUuaHBwIiAxCiMgNjQgIlhhbGFuRE9NL1hhbGFuRWxlbWVudC5ocHAiIDIKCgoKY2xh
c3MgWGFsYW5BdHRyOwojIDc5ICJYYWxhbkRPTS9YYWxhbkVsZW1lbnQuaHBwIgpjbGFzcyBYYWxh
bkVsZW1lbnQgOiBwdWJsaWMgWGFsYW5Ob2RlCnsKcHVibGljOgoKICAgICAgICBYYWxhbkVsZW1l
bnQoKTsKCiAgICAgICAgdmlydHVhbAogICAgICAgIH5YYWxhbkVsZW1lbnQoKTsKCgogICAgICAg
IHZpcnR1YWwgY29uc3QgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgZ2V0Tm9kZU5hbWUoKSBjb25z
dCA9IDA7CgoKCgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5ET01TdHJpbmcmCiAgICAgICAg
Z2V0Tm9kZVZhbHVlKCkgY29uc3QgPSAwOwoKCgoKICAgICAgICB2aXJ0dWFsIE5vZGVUeXBlCiAg
ICAgICAgZ2V0Tm9kZVR5cGUoKSBjb25zdCA9IDA7CiMgMTEzICJYYWxhbkRPTS9YYWxhbkVsZW1l
bnQuaHBwIgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIGdldFBhcmVudE5vZGUo
KSBjb25zdCA9IDA7CiMgMTI5ICJYYWxhbkRPTS9YYWxhbkVsZW1lbnQuaHBwIgogICAgICAgIHZp
cnR1YWwgY29uc3QgWGFsYW5Ob2RlTGlzdCoKICAgICAgICBnZXRDaGlsZE5vZGVzKCkgY29uc3Qg
PSAwOwoKCgoKCgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIGdldEZpcnN0Q2hp
bGQoKSBjb25zdCA9IDA7CgoKCgoKCiAgICAgICAgdmlydHVhbCBYYWxhbk5vZGUqCiAgICAgICAg
Z2V0TGFzdENoaWxkKCkgY29uc3QgPSAwOwoKCgoKCgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2Rl
KgogICAgICAgIGdldFByZXZpb3VzU2libGluZygpIGNvbnN0ID0gMDsKCgoKCgoKICAgICAgICB2
aXJ0dWFsIFhhbGFuTm9kZSoKICAgICAgICBnZXROZXh0U2libGluZygpIGNvbnN0ID0gMDsKCgoK
CgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5OYW1lZE5vZGVNYXAqCiAgICAgICAgZ2V0QXR0
cmlidXRlcygpIGNvbnN0ID0gMDsKIyAxODAgIlhhbGFuRE9NL1hhbGFuRWxlbWVudC5ocHAiCiAg
ICAgICAgdmlydHVhbCBYYWxhbkRvY3VtZW50KgogICAgICAgIGdldE93bmVyRG9jdW1lbnQoKSBj
b25zdCA9IDA7CiMgMjA4ICJYYWxhbkRPTS9YYWxhbkVsZW1lbnQuaHBwIgogICAgICAgIHZpcnR1
YWwgWGFsYW5FbGVtZW50KgoKICAgICAgICBjbG9uZU5vZGUoYm9vbCBkZWVwKSBjb25zdCA9IDA7
CiMgMjMyICJYYWxhbkRPTS9YYWxhbkVsZW1lbnQuaHBwIgogICAgICAgIHZpcnR1YWwgWGFsYW5O
b2RlKgogICAgICAgIGluc2VydEJlZm9yZSgKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5O
b2RlKiBuZXdDaGlsZCwKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5Ob2RlKiByZWZDaGls
ZCkgPSAwOwojIDI1MCAiWGFsYW5ET00vWGFsYW5FbGVtZW50LmhwcCIKICAgICAgICB2aXJ0dWFs
IFhhbGFuTm9kZSoKICAgICAgICByZXBsYWNlQ2hpbGQoCiAgICAgICAgICAgICAgICAgICAgICAg
IFhhbGFuTm9kZSogbmV3Q2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuTm9kZSog
b2xkQ2hpbGQpID0gMDsKIyAyNjIgIlhhbGFuRE9NL1hhbGFuRWxlbWVudC5ocHAiCiAgICAgICAg
dmlydHVhbCBYYWxhbk5vZGUqCiAgICAgICAgcmVtb3ZlQ2hpbGQoWGFsYW5Ob2RlKiBvbGRDaGls
ZCkgPSAwOwojIDI3NiAiWGFsYW5ET00vWGFsYW5FbGVtZW50LmhwcCIKICAgICAgICB2aXJ0dWFs
IFhhbGFuTm9kZSoKICAgICAgICBhcHBlbmRDaGlsZChYYWxhbk5vZGUqIG5ld0NoaWxkKSA9IDA7
CiMgMjkwICJYYWxhbkRPTS9YYWxhbkVsZW1lbnQuaHBwIgogICAgICAgIHZpcnR1YWwgYm9vbAog
ICAgICAgIGhhc0NoaWxkTm9kZXMoKSBjb25zdCA9IDA7CiMgMzEyICJYYWxhbkRPTS9YYWxhbkVs
ZW1lbnQuaHBwIgogICAgICAgIHZpcnR1YWwgdm9pZAogICAgICAgIHNldE5vZGVWYWx1ZShjb25z
dCBYYWxhbkRPTVN0cmluZyYgbm9kZVZhbHVlKSA9IDA7CiMgMzM1ICJYYWxhbkRPTS9YYWxhbkVs
ZW1lbnQuaHBwIgogICAgICAgIHZpcnR1YWwgdm9pZAogICAgICAgIG5vcm1hbGl6ZSgpID0gMDsK
IyAzNTEgIlhhbGFuRE9NL1hhbGFuRWxlbWVudC5ocHAiCiAgICAgICAgdmlydHVhbCBib29sCiAg
ICAgICAgc3VwcG9ydHMoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3Ry
aW5nJiBmZWF0dXJlLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmlu
ZyYgdmVyc2lvbikgY29uc3QgPSAwOwojIDM2OSAiWGFsYW5ET00vWGFsYW5FbGVtZW50LmhwcCIK
ICAgICAgICB2aXJ0dWFsIGNvbnN0IFhhbGFuRE9NU3RyaW5nJgogICAgICAgIGdldE5hbWVzcGFj
ZVVSSSgpIGNvbnN0ID0gMDsKCgoKCgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5ET01TdHJp
bmcmCiAgICAgICAgZ2V0UHJlZml4KCkgY29uc3QgPSAwOwojIDM4NiAiWGFsYW5ET00vWGFsYW5F
bGVtZW50LmhwcCIKICAgICAgICB2aXJ0dWFsIGNvbnN0IFhhbGFuRE9NU3RyaW5nJgogICAgICAg
IGdldExvY2FsTmFtZSgpIGNvbnN0ID0gMDsKIyA0MTggIlhhbGFuRE9NL1hhbGFuRWxlbWVudC5o
cHAiCiAgICAgICAgdmlydHVhbCB2b2lkCiAgICAgICAgc2V0UHJlZml4KGNvbnN0IFhhbGFuRE9N
U3RyaW5nJiBwcmVmaXgpID0gMDsKCgoKCgoKICAgICAgICB2aXJ0dWFsIGJvb2wKICAgICAgICBp
c0luZGV4ZWQoKSBjb25zdCA9IDA7CgoKCgoKCgogICAgICAgIHZpcnR1YWwgdW5zaWduZWQgbG9u
ZwogICAgICAgIGdldEluZGV4KCkgY29uc3QgPSAwOwojIDQ0OSAiWGFsYW5ET00vWGFsYW5FbGVt
ZW50LmhwcCIKICAgICAgICB2aXJ0dWFsIGNvbnN0IFhhbGFuRE9NU3RyaW5nJgogICAgICAgIGdl
dFRhZ05hbWUoKSBjb25zdCA9IDA7CiMgNDU5ICJYYWxhbkRPTS9YYWxhbkVsZW1lbnQuaHBwIgog
ICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgZ2V0QXR0cmlidXRl
KGNvbnN0IFhhbGFuRE9NU3RyaW5nJiBuYW1lKSBjb25zdCA9IDA7CiMgNDY5ICJYYWxhbkRPTS9Y
YWxhbkVsZW1lbnQuaHBwIgogICAgICAgIHZpcnR1YWwgWGFsYW5BdHRyKgogICAgICAgIGdldEF0
dHJpYnV0ZU5vZGUoY29uc3QgWGFsYW5ET01TdHJpbmcmIG5hbWUpIGNvbnN0ID0gMDsKIyA0ODIg
IlhhbGFuRE9NL1hhbGFuRWxlbWVudC5ocHAiCiAgICAgICAgdmlydHVhbCBYYWxhbk5vZGVMaXN0
KgogICAgICAgIGdldEVsZW1lbnRzQnlUYWdOYW1lKGNvbnN0IFhhbGFuRE9NU3RyaW5nJiBuYW1l
KSBjb25zdCA9IDA7CiMgNTEwICJYYWxhbkRPTS9YYWxhbkVsZW1lbnQuaHBwIgogICAgICAgIHZp
cnR1YWwgdm9pZAogICAgICAgIHNldEF0dHJpYnV0ZSgKICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgWGFsYW5ET01TdHJpbmcmIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFhhbGFuRE9NU3RyaW5nJiB2YWx1ZSkgPSAwOwojIDUzNCAiWGFsYW5ET00vWGFsYW5FbGVtZW50
LmhwcCIKICAgICAgICB2aXJ0dWFsIFhhbGFuQXR0cioKICAgICAgICBzZXRBdHRyaWJ1dGVOb2Rl
KFhhbGFuQXR0ciogbmV3QXR0cikgPSAwOwojIDU1NiAiWGFsYW5ET00vWGFsYW5FbGVtZW50Lmhw
cCIKICAgICAgICB2aXJ0dWFsIFhhbGFuQXR0cioKICAgICAgICByZW1vdmVBdHRyaWJ1dGVOb2Rl
KFhhbGFuQXR0ciogb2xkQXR0cikgPSAwOwojIDU3MSAiWGFsYW5ET00vWGFsYW5FbGVtZW50Lmhw
cCIKICAgICAgICB2aXJ0dWFsIHZvaWQKICAgICAgICByZW1vdmVBdHRyaWJ1dGUoY29uc3QgWGFs
YW5ET01TdHJpbmcmIG5hbWUpID0gMDsKIyA1ODggIlhhbGFuRE9NL1hhbGFuRWxlbWVudC5ocHAi
CiAgICAgICAgdmlydHVhbCBjb25zdCBYYWxhbkRPTVN0cmluZyYKICAgICAgICBnZXRBdHRyaWJ1
dGVOUygKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIG5hbWVz
cGFjZVVSSSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIGxv
Y2FsTmFtZSkgY29uc3QgPSAwOwojIDYzMyAiWGFsYW5ET00vWGFsYW5FbGVtZW50LmhwcCIKICAg
ICAgICB2aXJ0dWFsIHZvaWQKICAgICAgICBzZXRBdHRyaWJ1dGVOUygKICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIG5hbWVzcGFjZVVSSSwKICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHF1YWxpZmllZE5hbWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB2YWx1ZSkgPSAwOwojIDY1MyAi
WGFsYW5ET00vWGFsYW5FbGVtZW50LmhwcCIKICAgICAgICB2aXJ0dWFsIHZvaWQKICAgICAgICBy
ZW1vdmVBdHRyaWJ1dGVOUygKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01T
dHJpbmcmIG5hbWVzcGFjZVVSSSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5E
T01TdHJpbmcmIGxvY2FsTmFtZSkgPSAwOwojIDY2OCAiWGFsYW5ET00vWGFsYW5FbGVtZW50Lmhw
cCIKICAgICAgICB2aXJ0dWFsIFhhbGFuQXR0cioKICAgICAgICBnZXRBdHRyaWJ1dGVOb2RlTlMo
CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiBuYW1lc3BhY2VV
UkksCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiBsb2NhbE5h
bWUpIGNvbnN0ID0gMDsKIyA2OTIgIlhhbGFuRE9NL1hhbGFuRWxlbWVudC5ocHAiCiAgICAgICAg
dmlydHVhbCBYYWxhbkF0dHIqCiAgICAgICAgc2V0QXR0cmlidXRlTm9kZU5TKFhhbGFuQXR0ciog
bmV3QXR0cikgPSAwOwojIDcxMCAiWGFsYW5ET00vWGFsYW5FbGVtZW50LmhwcCIKICAgICAgICB2
aXJ0dWFsIFhhbGFuTm9kZUxpc3QqCiAgICAgICAgZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIG5hbWVzcGFjZVVSSSwK
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIGxvY2FsTmFtZSkg
Y29uc3QgPSAwOwoKCgpwcm90ZWN0ZWQ6CgogICAgICAgIFhhbGFuRWxlbWVudChjb25zdCBYYWxh
bkVsZW1lbnQmIHRoZVNvdXJjZSk7CgogICAgICAgIFhhbGFuRWxlbWVudCYKICAgICAgICBvcGVy
YXRvcj0oY29uc3QgWGFsYW5FbGVtZW50JiB0aGVTb3VyY2UpOwoKICAgICAgICBib29sCiAgICAg
ICAgb3BlcmF0b3I9PShjb25zdCBYYWxhbkVsZW1lbnQmIHRoZVJIUykgY29uc3Q7Cgpwcml2YXRl
Ogp9OwojIDY4ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRWxlbWVudC5ocHAiIDIK
IyAxICJYYWxhbkRPTS9YYWxhbk5hbWVkTm9kZU1hcC5ocHAiIDEKIyA2MiAiWGFsYW5ET00vWGFs
YW5OYW1lZE5vZGVNYXAuaHBwIgojIDEgIlhhbGFuRE9NL1hhbGFuRE9NRGVmaW5pdGlvbnMuaHBw
IiAxCiMgNjMgIlhhbGFuRE9NL1hhbGFuTmFtZWROb2RlTWFwLmhwcCIgMgojIDEgIlhhbGFuRE9N
L1hhbGFuRE9NU3RyaW5nLmhwcCIgMQojIDY0ICJYYWxhbkRPTS9YYWxhbk5hbWVkTm9kZU1hcC5o
cHAiIDIKCgoKY2xhc3MgWGFsYW5Ob2RlOwojIDc5ICJYYWxhbkRPTS9YYWxhbk5hbWVkTm9kZU1h
cC5ocHAiCmNsYXNzIFhhbGFuTmFtZWROb2RlTWFwCnsKcHVibGljOgoKICAgICAgICBYYWxhbk5h
bWVkTm9kZU1hcCgpOwoKICAgICAgICB2aXJ0dWFsCiAgICAgICAgflhhbGFuTmFtZWROb2RlTWFw
KCk7CiMgMTE2ICJYYWxhbkRPTS9YYWxhbk5hbWVkTm9kZU1hcC5ocHAiCiAgICAgICAgdmlydHVh
bCBYYWxhbk5vZGUqCiAgICAgICAgc2V0TmFtZWRJdGVtKFhhbGFuTm9kZSogYXJnKSA9IDA7CiMg
MTMwICJYYWxhbkRPTS9YYWxhbk5hbWVkTm9kZU1hcC5ocHAiCiAgICAgICAgdmlydHVhbCBYYWxh
bk5vZGUqCiAgICAgICAgaXRlbSh1bnNpZ25lZCBpbnQgaW5kZXgpIGNvbnN0ID0gMDsKIyAxNDUg
IlhhbGFuRE9NL1hhbGFuTmFtZWROb2RlTWFwLmhwcCIKICAgICAgICB2aXJ0dWFsIFhhbGFuTm9k
ZSoKICAgICAgICBnZXROYW1lZEl0ZW0oY29uc3QgWGFsYW5ET01TdHJpbmcmIG5hbWUpIGNvbnN0
ID0gMDsKCgoKCgoKCiAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQKICAgICAgICBnZXRMZW5n
dGgoKSBjb25zdCA9IDA7CiMgMTc2ICJYYWxhbkRPTS9YYWxhbk5hbWVkTm9kZU1hcC5ocHAiCiAg
ICAgICAgdmlydHVhbCBYYWxhbk5vZGUqCiAgICAgICAgcmVtb3ZlTmFtZWRJdGVtKGNvbnN0IFhh
bGFuRE9NU3RyaW5nJiBuYW1lKSA9IDA7CiMgMTkzICJYYWxhbkRPTS9YYWxhbk5hbWVkTm9kZU1h
cC5ocHAiCiAgICAgICAgdmlydHVhbCBYYWxhbk5vZGUqCiAgICAgICAgZ2V0TmFtZWRJdGVtTlMo
CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiBuYW1lc3BhY2VV
UkksCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiBsb2NhbE5h
bWUpIGNvbnN0ID0gMDsKIyAyMTkgIlhhbGFuRE9NL1hhbGFuTmFtZWROb2RlTWFwLmhwcCIKICAg
ICAgICB2aXJ0dWFsIFhhbGFuTm9kZSoKICAgICAgICBzZXROYW1lZEl0ZW1OUyhYYWxhbk5vZGUq
IGFyZykgPSAwOwojIDI0MyAiWGFsYW5ET00vWGFsYW5OYW1lZE5vZGVNYXAuaHBwIgogICAgICAg
IHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIHJlbW92ZU5hbWVkSXRlbU5TKAogICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgbmFtZXNwYWNlVVJJLAogICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgbG9jYWxOYW1lKSA9IDA7CgoK
CnByb3RlY3RlZDoKCiAgICAgICAgWGFsYW5OYW1lZE5vZGVNYXAoY29uc3QgWGFsYW5OYW1lZE5v
ZGVNYXAmIHRoZVNvdXJjZSk7CgogICAgICAgIFhhbGFuTmFtZWROb2RlTWFwJgogICAgICAgIG9w
ZXJhdG9yPShjb25zdCBYYWxhbk5hbWVkTm9kZU1hcCYgdGhlU291cmNlKTsKCiAgICAgICAgYm9v
bAogICAgICAgIG9wZXJhdG9yPT0oY29uc3QgWGFsYW5OYW1lZE5vZGVNYXAmIHRoZVJIUykgY29u
c3Q7Cgpwcml2YXRlOgp9OwojIDY5ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRWxl
bWVudC5ocHAiIDIKCgoKY2xhc3MgWGFsYW5Tb3VyY2VUcmVlQXR0cjsKY2xhc3MgWGFsYW5Tb3Vy
Y2VUcmVlQ29tbWVudDsKY2xhc3MgWGFsYW5Tb3VyY2VUcmVlRG9jdW1lbnQ7CmNsYXNzIFhhbGFu
U291cmNlVHJlZVByb2Nlc3NpbmdJbnN0cnVjdGlvbjsKY2xhc3MgWGFsYW5Tb3VyY2VUcmVlVGV4
dDsKCgoKY2xhc3MgWGFsYW5Tb3VyY2VUcmVlRWxlbWVudCA6IHB1YmxpYyBYYWxhbkVsZW1lbnQs
IHByaXZhdGUgWGFsYW5OYW1lZE5vZGVNYXAKewpwdWJsaWM6CgogICAgICAgIHR5cGVkZWYgdW5z
aWduZWQgbG9uZyBBdHRyaWJ1dGVzQ291bnRUeXBlOwojIDk4ICJYYWxhblNvdXJjZVRyZWUvWGFs
YW5Tb3VyY2VUcmVlRWxlbWVudC5ocHAiCiAgICAgICAgWGFsYW5Tb3VyY2VUcmVlRWxlbWVudCgK
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVRhZ05hbWUs
CiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuU291cmNlVHJlZURvY3VtZW50KiB0aGVPd25l
ckRvY3VtZW50LAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhblNvdXJjZVRyZWVBdHRyKiog
dGhlQXR0cmlidXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlc0NvdW50VHlw
ZSB0aGVBdHRyaWJ1dGVDb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5Tb3VyY2VU
cmVlRWxlbWVudCogdGhlUGFyZW50RWxlbWVudCA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAg
IFhhbGFuTm9kZSogdGhlUHJldmlvdXNTaWJsaW5nID0gMCwKICAgICAgICAgICAgICAgICAgICAg
ICAgWGFsYW5Ob2RlKiB0aGVOZXh0U2libGluZyA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCB0aGVJbmRleCA9IDApOwoKICAgICAgICB2aXJ0dWFsCiAgICAgICAgflhh
bGFuU291cmNlVHJlZUVsZW1lbnQoKTsKCgoKCgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5E
T01TdHJpbmcmCiAgICAgICAgZ2V0Tm9kZU5hbWUoKSBjb25zdDsKCgoKCiAgICAgICAgdmlydHVh
bCBjb25zdCBYYWxhbkRPTVN0cmluZyYKICAgICAgICBnZXROb2RlVmFsdWUoKSBjb25zdDsKCgoK
CiAgICAgICAgdmlydHVhbCBOb2RlVHlwZQogICAgICAgIGdldE5vZGVUeXBlKCkgY29uc3Q7CiMg
MTM5ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRWxlbWVudC5ocHAiCiAgICAgICAg
dmlydHVhbCBYYWxhbk5vZGUqCiAgICAgICAgZ2V0UGFyZW50Tm9kZSgpIGNvbnN0OwojIDE1NSAi
WGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZUVsZW1lbnQuaHBwIgogICAgICAgIHZpcnR1
YWwgY29uc3QgWGFsYW5Ob2RlTGlzdCoKICAgICAgICBnZXRDaGlsZE5vZGVzKCkgY29uc3Q7CgoK
CgoKCiAgICAgICAgdmlydHVhbCBYYWxhbk5vZGUqCiAgICAgICAgZ2V0Rmlyc3RDaGlsZCgpIGNv
bnN0OwoKCgoKCgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIGdldExhc3RDaGls
ZCgpIGNvbnN0OwoKCgoKCgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIGdldFBy
ZXZpb3VzU2libGluZygpIGNvbnN0OwoKCgoKCgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgog
ICAgICAgIGdldE5leHRTaWJsaW5nKCkgY29uc3Q7CgoKCgoKICAgICAgICB2aXJ0dWFsIGNvbnN0
IFhhbGFuTmFtZWROb2RlTWFwKgogICAgICAgIGdldEF0dHJpYnV0ZXMoKSBjb25zdDsKIyAyMDYg
IlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVFbGVtZW50LmhwcCIKICAgICAgICB2aXJ0
dWFsIFhhbGFuRG9jdW1lbnQqCiAgICAgICAgZ2V0T3duZXJEb2N1bWVudCgpIGNvbnN0OwojIDIz
NCAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZUVsZW1lbnQuaHBwIgogICAgICAgIHZp
cnR1YWwgWGFsYW5Tb3VyY2VUcmVlRWxlbWVudCoKCiAgICAgICAgY2xvbmVOb2RlKGJvb2wgZGVl
cCkgY29uc3Q7CiMgMjU4ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRWxlbWVudC5o
cHAiCiAgICAgICAgdmlydHVhbCBYYWxhbk5vZGUqCiAgICAgICAgaW5zZXJ0QmVmb3JlKAogICAg
ICAgICAgICAgICAgICAgICAgICBYYWxhbk5vZGUqIG5ld0NoaWxkLAogICAgICAgICAgICAgICAg
ICAgICAgICBYYWxhbk5vZGUqIHJlZkNoaWxkKTsKIyAyNzYgIlhhbGFuU291cmNlVHJlZS9YYWxh
blNvdXJjZVRyZWVFbGVtZW50LmhwcCIKICAgICAgICB2aXJ0dWFsIFhhbGFuTm9kZSoKICAgICAg
ICByZXBsYWNlQ2hpbGQoCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuTm9kZSogbmV3Q2hp
bGQsCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuTm9kZSogb2xkQ2hpbGQpOwojIDI4OCAi
WGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZUVsZW1lbnQuaHBwIgogICAgICAgIHZpcnR1
YWwgWGFsYW5Ob2RlKgogICAgICAgIHJlbW92ZUNoaWxkKFhhbGFuTm9kZSogb2xkQ2hpbGQpOwoj
IDMwMiAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZUVsZW1lbnQuaHBwIgogICAgICAg
IHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIGFwcGVuZENoaWxkKFhhbGFuTm9kZSogbmV3Q2hp
bGQpOwojIDMxNiAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZUVsZW1lbnQuaHBwIgog
ICAgICAgIHZpcnR1YWwgYm9vbAogICAgICAgIGhhc0NoaWxkTm9kZXMoKSBjb25zdDsKIyAzMzgg
IlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVFbGVtZW50LmhwcCIKICAgICAgICB2aXJ0
dWFsIHZvaWQKICAgICAgICBzZXROb2RlVmFsdWUoY29uc3QgWGFsYW5ET01TdHJpbmcmIG5vZGVW
YWx1ZSk7CiMgMzYxICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRWxlbWVudC5ocHAi
CiAgICAgICAgdmlydHVhbCB2b2lkCiAgICAgICAgbm9ybWFsaXplKCk7CiMgMzc3ICJYYWxhblNv
dXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRWxlbWVudC5ocHAiCiAgICAgICAgdmlydHVhbCBib29s
CiAgICAgICAgc3VwcG9ydHMoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9N
U3RyaW5nJiBmZWF0dXJlLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0
cmluZyYgdmVyc2lvbikgY29uc3Q7CiMgMzk1ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VU
cmVlRWxlbWVudC5ocHAiCiAgICAgICAgdmlydHVhbCBjb25zdCBYYWxhbkRPTVN0cmluZyYKICAg
ICAgICBnZXROYW1lc3BhY2VVUkkoKSBjb25zdDsKCgoKCgogICAgICAgIHZpcnR1YWwgY29uc3Qg
WGFsYW5ET01TdHJpbmcmCiAgICAgICAgZ2V0UHJlZml4KCkgY29uc3Q7CiMgNDEyICJYYWxhblNv
dXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRWxlbWVudC5ocHAiCiAgICAgICAgdmlydHVhbCBjb25z
dCBYYWxhbkRPTVN0cmluZyYKICAgICAgICBnZXRMb2NhbE5hbWUoKSBjb25zdDsKIyA0NDQgIlhh
bGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVFbGVtZW50LmhwcCIKICAgICAgICB2aXJ0dWFs
IHZvaWQKICAgICAgICBzZXRQcmVmaXgoY29uc3QgWGFsYW5ET01TdHJpbmcmIHByZWZpeCk7Cgog
ICAgICAgIHZpcnR1YWwgYm9vbAogICAgICAgIGlzSW5kZXhlZCgpIGNvbnN0OwoKICAgICAgICB2
aXJ0dWFsIHVuc2lnbmVkIGxvbmcKICAgICAgICBnZXRJbmRleCgpIGNvbnN0OwojIDQ2NSAiWGFs
YW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZUVsZW1lbnQuaHBwIgogICAgICAgIHZpcnR1YWwg
Y29uc3QgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgZ2V0VGFnTmFtZSgpIGNvbnN0OwojIDQ3NSAi
WGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZUVsZW1lbnQuaHBwIgogICAgICAgIHZpcnR1
YWwgY29uc3QgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgZ2V0QXR0cmlidXRlKGNvbnN0IFhhbGFu
RE9NU3RyaW5nJiBuYW1lKSBjb25zdDsKIyA0ODUgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJj
ZVRyZWVFbGVtZW50LmhwcCIKICAgICAgICB2aXJ0dWFsIFhhbGFuQXR0cioKICAgICAgICBnZXRB
dHRyaWJ1dGVOb2RlKGNvbnN0IFhhbGFuRE9NU3RyaW5nJiBuYW1lKSBjb25zdDsKIyA0OTggIlhh
bGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVFbGVtZW50LmhwcCIKICAgICAgICB2aXJ0dWFs
IFhhbGFuTm9kZUxpc3QqCiAgICAgICAgZ2V0RWxlbWVudHNCeVRhZ05hbWUoY29uc3QgWGFsYW5E
T01TdHJpbmcmIG5hbWUpIGNvbnN0OwojIDUyNiAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNl
VHJlZUVsZW1lbnQuaHBwIgogICAgICAgIHZpcnR1YWwgdm9pZAogICAgICAgIHNldEF0dHJpYnV0
ZSgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIG5hbWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB2YWx1ZSk7CiMgNTUw
ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRWxlbWVudC5ocHAiCiAgICAgICAgdmly
dHVhbCBYYWxhbkF0dHIqCiAgICAgICAgc2V0QXR0cmlidXRlTm9kZShYYWxhbkF0dHIqIG5ld0F0
dHIpOwojIDU3MiAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZUVsZW1lbnQuaHBwIgog
ICAgICAgIHZpcnR1YWwgWGFsYW5BdHRyKgogICAgICAgIHJlbW92ZUF0dHJpYnV0ZU5vZGUoWGFs
YW5BdHRyKiBvbGRBdHRyKTsKIyA1ODcgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVF
bGVtZW50LmhwcCIKICAgICAgICB2aXJ0dWFsIHZvaWQKICAgICAgICByZW1vdmVBdHRyaWJ1dGUo
Y29uc3QgWGFsYW5ET01TdHJpbmcmIG5hbWUpOwojIDYwNCAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFu
U291cmNlVHJlZUVsZW1lbnQuaHBwIgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5ET01TdHJp
bmcmCiAgICAgICAgZ2V0QXR0cmlidXRlTlMoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFhhbGFuRE9NU3RyaW5nJiBuYW1lc3BhY2VVUkksCiAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFhhbGFuRE9NU3RyaW5nJiBsb2NhbE5hbWUpIGNvbnN0OwojIDY0OSAiWGFsYW5Tb3VyY2VU
cmVlL1hhbGFuU291cmNlVHJlZUVsZW1lbnQuaHBwIgogICAgICAgIHZpcnR1YWwgdm9pZAogICAg
ICAgIHNldEF0dHJpYnV0ZU5TKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRP
TVN0cmluZyYgbmFtZXNwYWNlVVJJLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxh
bkRPTVN0cmluZyYgcXVhbGlmaWVkTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
WGFsYW5ET01TdHJpbmcmIHZhbHVlKTsKIyA2NjkgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJj
ZVRyZWVFbGVtZW50LmhwcCIKICAgICAgICB2aXJ0dWFsIHZvaWQKICAgICAgICByZW1vdmVBdHRy
aWJ1dGVOUygKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIG5h
bWVzcGFjZVVSSSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcm
IGxvY2FsTmFtZSk7CiMgNjg0ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRWxlbWVu
dC5ocHAiCiAgICAgICAgdmlydHVhbCBYYWxhbkF0dHIqCiAgICAgICAgZ2V0QXR0cmlidXRlTm9k
ZU5TKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgbmFtZXNw
YWNlVVJJLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgbG9j
YWxOYW1lKSBjb25zdDsKIyA3MDggIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVFbGVt
ZW50LmhwcCIKICAgICAgICB2aXJ0dWFsIFhhbGFuQXR0cioKICAgICAgICBzZXRBdHRyaWJ1dGVO
b2RlTlMoWGFsYW5BdHRyKiBuZXdBdHRyKTsKIyA3MjYgIlhhbGFuU291cmNlVHJlZS9YYWxhblNv
dXJjZVRyZWVFbGVtZW50LmhwcCIKICAgICAgICB2aXJ0dWFsIFhhbGFuTm9kZUxpc3QqCiAgICAg
ICAgZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
WGFsYW5ET01TdHJpbmcmIG5hbWVzcGFjZVVSSSwKICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgWGFsYW5ET01TdHJpbmcmIGxvY2FsTmFtZSkgY29uc3Q7CgoKCgoKCiAgICAgICAgWGFsYW5T
b3VyY2VUcmVlRG9jdW1lbnQqCiAgICAgICAgZ2V0RG9jdW1lbnQoKSBjb25zdAogICAgICAgIHsK
ICAgICAgICAgICAgICAgIHJldHVybiBtX293bmVyRG9jdW1lbnQ7CiAgICAgICAgfQoKICAgICAg
ICBYYWxhblNvdXJjZVRyZWVFbGVtZW50KgogICAgICAgIGdldFBhcmVudEVsZW1lbnQoKSBjb25z
dAogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBtX3BhcmVudEVsZW1lbnQ7CiAgICAg
ICAgfQoKICAgICAgICB2b2lkCiAgICAgICAgc2V0UGFyZW50RWxlbWVudChYYWxhblNvdXJjZVRy
ZWVFbGVtZW50KiB0aGVQYXJlbnQpCiAgICAgICAgewogICAgICAgICAgICAgICAgbV9wYXJlbnRF
bGVtZW50ID0gdGhlUGFyZW50OwogICAgICAgIH0KCiAgICAgICAgdm9pZAogICAgICAgIHNldFBy
ZXZpb3VzU2libGluZyhYYWxhblNvdXJjZVRyZWVDb21tZW50KiB0aGVQcmV2aW91c1NpYmxpbmcp
OwoKICAgICAgICB2b2lkCiAgICAgICAgc2V0UHJldmlvdXNTaWJsaW5nKFhhbGFuU291cmNlVHJl
ZUVsZW1lbnQqIHRoZVByZXZpb3VzU2libGluZyk7CgogICAgICAgIHZvaWQKICAgICAgICBzZXRQ
cmV2aW91c1NpYmxpbmcoWGFsYW5Tb3VyY2VUcmVlUHJvY2Vzc2luZ0luc3RydWN0aW9uKiB0aGVQ
cmV2aW91c1NpYmxpbmcpOwoKICAgICAgICB2b2lkCiAgICAgICAgc2V0UHJldmlvdXNTaWJsaW5n
KFhhbGFuU291cmNlVHJlZVRleHQqIHRoZVByZXZpb3VzU2libGluZyk7CgogICAgICAgIHZvaWQK
ICAgICAgICBhcHBlbmRTaWJsaW5nTm9kZShYYWxhblNvdXJjZVRyZWVDb21tZW50KiB0aGVTaWJs
aW5nKTsKCiAgICAgICAgdm9pZAogICAgICAgIGFwcGVuZFNpYmxpbmdOb2RlKFhhbGFuU291cmNl
VHJlZUVsZW1lbnQqIHRoZVNpYmxpbmcpOwoKICAgICAgICB2b2lkCiAgICAgICAgYXBwZW5kU2li
bGluZ05vZGUoWGFsYW5Tb3VyY2VUcmVlUHJvY2Vzc2luZ0luc3RydWN0aW9uKiB0aGVTaWJsaW5n
KTsKCiAgICAgICAgdm9pZAogICAgICAgIGFwcGVuZFNpYmxpbmdOb2RlKFhhbGFuU291cmNlVHJl
ZVRleHQqIHRoZVNpYmxpbmcpOwoKICAgICAgICB2b2lkCiAgICAgICAgYXBwZW5kQ2hpbGROb2Rl
KFhhbGFuU291cmNlVHJlZUNvbW1lbnQqIHRoZUNoaWxkKTsKCiAgICAgICAgdm9pZAogICAgICAg
IGFwcGVuZENoaWxkTm9kZShYYWxhblNvdXJjZVRyZWVFbGVtZW50KiB0aGVDaGlsZCk7CgogICAg
ICAgIHZvaWQKICAgICAgICBhcHBlbmRDaGlsZE5vZGUoWGFsYW5Tb3VyY2VUcmVlUHJvY2Vzc2lu
Z0luc3RydWN0aW9uKiB0aGVDaGlsZCk7CgogICAgICAgIHZvaWQKICAgICAgICBhcHBlbmRDaGls
ZE5vZGUoWGFsYW5Tb3VyY2VUcmVlVGV4dCogdGhlQ2hpbGQpOwoKICAgICAgICB2b2lkCiAgICAg
ICAgc2V0SW5kZXgodW5zaWduZWQgaW50IHRoZUluZGV4KQogICAgICAgIHsKICAgICAgICAgICAg
ICAgIG1faW5kZXggPSB0aGVJbmRleDsKICAgICAgICB9CgogICAgICAgIHVuc2lnbmVkIGludAog
ICAgICAgIGdldEF0dHJpYnV0ZUNvdW50KCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAg
ICByZXR1cm4gbV9hdHRyaWJ1dGVDb3VudDsKICAgICAgICB9CgogICAgICAgIFhhbGFuU291cmNl
VHJlZUF0dHIqCiAgICAgICAgZ2V0QXR0cmlidXRlQnlJbmRleCh1bnNpZ25lZCBpbnQgaW5kZXgp
IGNvbnN0CiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4IDwgbV9hdHRyaWJ1
dGVDb3VudCA/IG1fYXR0cmlidXRlc1tpbmRleF0gOiAwOwogICAgICAgIH0KCnByb3RlY3RlZDoK
CiAgICAgICAgWGFsYW5Tb3VyY2VUcmVlRWxlbWVudCgKICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgWGFsYW5Tb3VyY2VUcmVlRWxlbWVudCYgdGhlU291cmNlLAogICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGRlZXAgPSBmYWxzZSk7Cgpwcml2YXRlOgoKCgogICAgICAgIHZpcnR1YWwg
WGFsYW5Ob2RlKgogICAgICAgIHNldE5hbWVkSXRlbShYYWxhbk5vZGUqIGFyZyk7CgogICAgICAg
IHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIGl0ZW0odW5zaWduZWQgaW50IGluZGV4KSBjb25z
dDsKCiAgICAgICAgdmlydHVhbCBYYWxhbk5vZGUqCiAgICAgICAgZ2V0TmFtZWRJdGVtKGNvbnN0
IFhhbGFuRE9NU3RyaW5nJiBuYW1lKSBjb25zdDsKCiAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQKICAgICAgICBnZXRMZW5ndGgoKSBjb25zdDsKCiAgICAgICAgdmlydHVhbCBYYWxhbk5vZGUq
CiAgICAgICAgcmVtb3ZlTmFtZWRJdGVtKGNvbnN0IFhhbGFuRE9NU3RyaW5nJiBuYW1lKTsKCiAg
ICAgICAgdmlydHVhbCBYYWxhbk5vZGUqCiAgICAgICAgZ2V0TmFtZWRJdGVtTlMoCiAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiBuYW1lc3BhY2VVUkksCiAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiBsb2NhbE5hbWUpIGNvbnN0
OwoKICAgICAgICB2aXJ0dWFsIFhhbGFuTm9kZSoKICAgICAgICBzZXROYW1lZEl0ZW1OUyhYYWxh
bk5vZGUqIGFyZyk7CgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIHJlbW92ZU5h
bWVkSXRlbU5TKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYg
bmFtZXNwYWNlVVJJLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmlu
ZyYgbG9jYWxOYW1lKTsKCgoKICAgICAgICBYYWxhblNvdXJjZVRyZWVFbGVtZW50JgogICAgICAg
IG9wZXJhdG9yPShjb25zdCBYYWxhblNvdXJjZVRyZWVFbGVtZW50JiB0aGVTb3VyY2UpOwoKICAg
ICAgICBib29sCiAgICAgICAgb3BlcmF0b3I9PShjb25zdCBYYWxhblNvdXJjZVRyZWVFbGVtZW50
JiB0aGVSSFMpIGNvbnN0OwoKCgogICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiBtX3RhZ05h
bWU7CgogICAgICAgIFhhbGFuU291cmNlVHJlZURvY3VtZW50KiBtX293bmVyRG9jdW1lbnQ7Cgog
ICAgICAgIFhhbGFuU291cmNlVHJlZUVsZW1lbnQqIG1fcGFyZW50RWxlbWVudDsKCiAgICAgICAg
WGFsYW5Ob2RlKiBtX3ByZXZpb3VzU2libGluZzsKCiAgICAgICAgWGFsYW5Ob2RlKiBtX25leHRT
aWJsaW5nOwoKICAgICAgICBYYWxhbk5vZGUqIG1fZmlyc3RDaGlsZDsKCiAgICAgICAgdW5zaWdu
ZWQgaW50IG1faW5kZXg7CgogICAgICAgIFhhbGFuU291cmNlVHJlZUF0dHIqIGNvbnN0ICogbV9h
dHRyaWJ1dGVzOwoKICAgICAgICBjb25zdCBBdHRyaWJ1dGVzQ291bnRUeXBlIG1fYXR0cmlidXRl
Q291bnQ7Cn07CiMgNzIgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVFbGVtZW50QWxs
b2NhdG9yLmhwcCIgMgoKCgpjbGFzcyBYYWxhblNvdXJjZVRyZWVFbGVtZW50QWxsb2NhdG9yCnsK
cHVibGljOgoKICAgICAgICB0eXBlZGVmIFhhbGFuU291cmNlVHJlZUVsZW1lbnQgT2JqZWN0VHlw
ZTsKCiAgICAgICAgdHlwZWRlZiBPYmplY3RUeXBlOjpBdHRyaWJ1dGVzQ291bnRUeXBlIEF0dHJp
YnV0ZXNDb3VudFR5cGU7CgoKCgoKCgogICAgICAgIHR5cGVkZWYgQXJlbmFBbGxvY2F0b3I8T2Jq
ZWN0VHlwZT4gQXJlbmFBbGxvY2F0b3JUeXBlOwoKCiAgICAgICAgdHlwZWRlZiBBcmVuYUFsbG9j
YXRvclR5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CgoKCgoKCiAgICAgICAgWGFsYW5Tb3VyY2VU
cmVlRWxlbWVudEFsbG9jYXRvcihzaXplX3R5cGUgdGhlQmxvY2tDb3VudCk7CgogICAgICAgIH5Y
YWxhblNvdXJjZVRyZWVFbGVtZW50QWxsb2NhdG9yKCk7CiMgMTE3ICJYYWxhblNvdXJjZVRyZWUv
WGFsYW5Tb3VyY2VUcmVlRWxlbWVudEFsbG9jYXRvci5ocHAiCiAgICAgICAgT2JqZWN0VHlwZSoK
ICAgICAgICBjcmVhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3Ry
aW5nJiB0aGVUYWdOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhblNvdXJjZVRyZWVE
b2N1bWVudCogdGhlT3duZXJEb2N1bWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5T
b3VyY2VUcmVlQXR0cioqIHRoZUF0dHJpYnV0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIEF0
dHJpYnV0ZXNDb3VudFR5cGUgdGhlQXR0cmlidXRlQ291bnQsCiAgICAgICAgICAgICAgICAgICAg
ICAgIFhhbGFuU291cmNlVHJlZUVsZW1lbnQqIHRoZVBhcmVudEVsZW1lbnQgPSAwLAogICAgICAg
ICAgICAgICAgICAgICAgICBYYWxhbk5vZGUqIHRoZVByZXZpb3VzU2libGluZyA9IDAsCiAgICAg
ICAgICAgICAgICAgICAgICAgIFhhbGFuTm9kZSogdGhlTmV4dFNpYmxpbmcgPSAwLAogICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGhlSW5kZXggPSAwKTsKCgoKCiAgICAgICAg
dm9pZAogICAgICAgIHJlc2V0KCk7CgoKCgoKCgogICAgICAgIHNpemVfdHlwZQogICAgICAgIGdl
dEJsb2NrQ291bnQoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBtX2Fs
bG9jYXRvci5nZXRCbG9ja0NvdW50KCk7CiAgICAgICAgfQoKCgoKCgogICAgICAgIHNpemVfdHlw
ZQogICAgICAgIGdldEJsb2NrU2l6ZSgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgICAgICAg
cmV0dXJuIG1fYWxsb2NhdG9yLmdldEJsb2NrU2l6ZSgpOwogICAgICAgIH0KCnByaXZhdGU6CgoK
ICAgICAgICBYYWxhblNvdXJjZVRyZWVFbGVtZW50QWxsb2NhdG9yKGNvbnN0IFhhbGFuU291cmNl
VHJlZUVsZW1lbnRBbGxvY2F0b3ImKTsKCiAgICAgICAgWGFsYW5Tb3VyY2VUcmVlRWxlbWVudEFs
bG9jYXRvciYKICAgICAgICBvcGVyYXRvcj0oY29uc3QgWGFsYW5Tb3VyY2VUcmVlRWxlbWVudEFs
bG9jYXRvciYpOwoKCiAgICAgICAgQXJlbmFBbGxvY2F0b3JUeXBlIG1fYWxsb2NhdG9yOwp9Owoj
IDg1ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRG9jdW1lbnQuaHBwIiAyCiMgMSAi
WGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZUVsZW1lbnROU0FsbG9jYXRvci5ocHAiIDEK
IyA2MyAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZUVsZW1lbnROU0FsbG9jYXRvci5o
cHAiCiMgMSAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZURlZmluaXRpb25zLmhwcCIg
MQojIDY0ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRWxlbWVudE5TQWxsb2NhdG9y
LmhwcCIgMgoKCgojIDEgIlBsYXRmb3JtU3VwcG9ydC9BcmVuYUFsbG9jYXRvci5ocHAiIDEKIyA2
OCAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZUVsZW1lbnROU0FsbG9jYXRvci5ocHAi
IDIKCgoKIyAxICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRWxlbWVudE5TLmhwcCIg
MQojIDYyICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRWxlbWVudE5TLmhwcCIKIyAx
ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRGVmaW5pdGlvbnMuaHBwIiAxCiMgNjMg
IlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVFbGVtZW50TlMuaHBwIiAyCgoKCiMgMSAi
WGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZUVsZW1lbnQuaHBwIiAxCiMgNjcgIlhhbGFu
U291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVFbGVtZW50TlMuaHBwIiAyCgoKCmNsYXNzIFhhbGFu
U291cmNlVHJlZUVsZW1lbnROUyA6IHB1YmxpYyBYYWxhblNvdXJjZVRyZWVFbGVtZW50CnsKcHVi
bGljOgojIDg5ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRWxlbWVudE5TLmhwcCIK
ICAgICAgICBYYWxhblNvdXJjZVRyZWVFbGVtZW50TlMoCiAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVUYWdOYW1lLAogICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlTG9jYWxOYW1lLAogICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlTmFtZXNwYWNlVVJJLAogICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlUHJlZml4LAogICAgICAgICAgICAg
ICAgICAgICAgICBYYWxhblNvdXJjZVRyZWVEb2N1bWVudCogdGhlT3duZXJEb2N1bWVudCwKICAg
ICAgICAgICAgICAgICAgICAgICAgWGFsYW5Tb3VyY2VUcmVlQXR0cioqIHRoZUF0dHJpYnV0ZXMs
CiAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZXNDb3VudFR5cGUgdGhlQXR0cmlidXRl
Q291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuU291cmNlVHJlZUVsZW1lbnQqIHRo
ZVBhcmVudEVsZW1lbnQgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhbk5vZGUqIHRo
ZVByZXZpb3VzU2libGluZyA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuTm9kZSog
dGhlTmV4dFNpYmxpbmcgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg
dGhlSW5kZXggPSAwKTsKCiAgICAgICAgdmlydHVhbAogICAgICAgIH5YYWxhblNvdXJjZVRyZWVF
bGVtZW50TlMoKTsKCgoKCgogICAgICAgIHZpcnR1YWwgWGFsYW5Tb3VyY2VUcmVlRWxlbWVudE5T
KgoKICAgICAgICBjbG9uZU5vZGUoYm9vbCBkZWVwKSBjb25zdDsKCiAgICAgICAgdmlydHVhbCBj
b25zdCBYYWxhbkRPTVN0cmluZyYKICAgICAgICBnZXROYW1lc3BhY2VVUkkoKSBjb25zdDsKCiAg
ICAgICAgdmlydHVhbCBjb25zdCBYYWxhbkRPTVN0cmluZyYKICAgICAgICBnZXRQcmVmaXgoKSBj
b25zdDsKCiAgICAgICAgdmlydHVhbCBjb25zdCBYYWxhbkRPTVN0cmluZyYKICAgICAgICBnZXRM
b2NhbE5hbWUoKSBjb25zdDsKCnByb3RlY3RlZDoKCiAgICAgICAgWGFsYW5Tb3VyY2VUcmVlRWxl
bWVudE5TKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhblNvdXJjZVRyZWVFbGVt
ZW50TlMmIHRoZVNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZWVwKTsKCiAg
ICAgICAgWGFsYW5Tb3VyY2VUcmVlRWxlbWVudE5TKAogICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBYYWxhblNvdXJjZVRyZWVFbGVtZW50JiB0aGVTb3VyY2UsCiAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgZGVlcCk7CnByaXZhdGU6CgoKICAgICAgICBYYWxhblNvdXJjZVRyZWVFbGVt
ZW50TlMmCiAgICAgICAgb3BlcmF0b3I9KGNvbnN0IFhhbGFuU291cmNlVHJlZUVsZW1lbnROUyYg
dGhlU291cmNlKTsKCiAgICAgICAgYm9vbAogICAgICAgIG9wZXJhdG9yPT0oY29uc3QgWGFsYW5T
b3VyY2VUcmVlRWxlbWVudE5TJiB0aGVSSFMpIGNvbnN0OwoKCgogICAgICAgIGNvbnN0IFhhbGFu
RE9NU3RyaW5nJiBtX2xvY2FsTmFtZTsKCiAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIG1f
cHJlZml4OwoKICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgbV9uYW1lc3BhY2VVUkk7Cn07
CiMgNzIgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVFbGVtZW50TlNBbGxvY2F0b3Iu
aHBwIiAyCgoKCmNsYXNzIFhhbGFuU291cmNlVHJlZUVsZW1lbnROU0FsbG9jYXRvcgp7CnB1Ymxp
YzoKCiAgICAgICAgdHlwZWRlZiBYYWxhblNvdXJjZVRyZWVFbGVtZW50TlMgT2JqZWN0VHlwZTsK
CiAgICAgICAgdHlwZWRlZiBPYmplY3RUeXBlOjpBdHRyaWJ1dGVzQ291bnRUeXBlIEF0dHJpYnV0
ZXNDb3VudFR5cGU7CgoKCgoKCgogICAgICAgIHR5cGVkZWYgQXJlbmFBbGxvY2F0b3I8T2JqZWN0
VHlwZT4gQXJlbmFBbGxvY2F0b3JUeXBlOwoKCiAgICAgICAgdHlwZWRlZiBBcmVuYUFsbG9jYXRv
clR5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CgoKCgoKCiAgICAgICAgWGFsYW5Tb3VyY2VUcmVl
RWxlbWVudE5TQWxsb2NhdG9yKHNpemVfdHlwZSB0aGVCbG9ja0NvdW50KTsKCiAgICAgICAgflhh
bGFuU291cmNlVHJlZUVsZW1lbnROU0FsbG9jYXRvcigpOwojIDEyMCAiWGFsYW5Tb3VyY2VUcmVl
L1hhbGFuU291cmNlVHJlZUVsZW1lbnROU0FsbG9jYXRvci5ocHAiCiAgICAgICAgT2JqZWN0VHlw
ZSoKICAgICAgICBjcmVhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9N
U3RyaW5nJiB0aGVUYWdOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRP
TVN0cmluZyYgdGhlTG9jYWxOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxh
bkRPTVN0cmluZyYgdGhlTmFtZXNwYWNlVVJJLAogICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBYYWxhbkRPTVN0cmluZyYgdGhlUHJlZml4LAogICAgICAgICAgICAgICAgICAgICAgICBYYWxh
blNvdXJjZVRyZWVEb2N1bWVudCogdGhlT3duZXJEb2N1bWVudCwKICAgICAgICAgICAgICAgICAg
ICAgICAgWGFsYW5Tb3VyY2VUcmVlQXR0cioqIHRoZUF0dHJpYnV0ZXMsCiAgICAgICAgICAgICAg
ICAgICAgICAgIEF0dHJpYnV0ZXNDb3VudFR5cGUgdGhlQXR0cmlidXRlQ291bnQsCiAgICAgICAg
ICAgICAgICAgICAgICAgIFhhbGFuU291cmNlVHJlZUVsZW1lbnQqIHRoZVBhcmVudEVsZW1lbnQg
PSAwLAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhbk5vZGUqIHRoZVByZXZpb3VzU2libGlu
ZyA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuTm9kZSogdGhlTmV4dFNpYmxpbmcg
PSAwLAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGhlSW5kZXggPSAwKTsK
CgoKCiAgICAgICAgdm9pZAogICAgICAgIHJlc2V0KCk7CgoKCgoKCgogICAgICAgIHNpemVfdHlw
ZQogICAgICAgIGdldEJsb2NrQ291bnQoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgICAg
IHJldHVybiBtX2FsbG9jYXRvci5nZXRCbG9ja0NvdW50KCk7CiAgICAgICAgfQoKCgoKCgogICAg
ICAgIHNpemVfdHlwZQogICAgICAgIGdldEJsb2NrU2l6ZSgpIGNvbnN0CiAgICAgICAgewogICAg
ICAgICAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yLmdldEJsb2NrU2l6ZSgpOwogICAgICAgIH0K
CnByaXZhdGU6CgoKICAgICAgICBYYWxhblNvdXJjZVRyZWVFbGVtZW50TlNBbGxvY2F0b3IoY29u
c3QgWGFsYW5Tb3VyY2VUcmVlRWxlbWVudE5TQWxsb2NhdG9yJik7CgogICAgICAgIFhhbGFuU291
cmNlVHJlZUVsZW1lbnROU0FsbG9jYXRvciYKICAgICAgICBvcGVyYXRvcj0oY29uc3QgWGFsYW5T
b3VyY2VUcmVlRWxlbWVudE5TQWxsb2NhdG9yJik7CgoKICAgICAgICBBcmVuYUFsbG9jYXRvclR5
cGUgbV9hbGxvY2F0b3I7Cn07CiMgODYgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVE
b2N1bWVudC5ocHAiIDIKIyAxICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlUHJvY2Vz
c2luZ0luc3RydWN0aW9uQWxsb2NhdG9yLmhwcCIgMQojIDYzICJYYWxhblNvdXJjZVRyZWUvWGFs
YW5Tb3VyY2VUcmVlUHJvY2Vzc2luZ0luc3RydWN0aW9uQWxsb2NhdG9yLmhwcCIKIyAxICJYYWxh
blNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRGVmaW5pdGlvbnMuaHBwIiAxCiMgNjQgIlhhbGFu
U291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25BbGxvY2F0b3Iu
aHBwIiAyCgoKCiMgMSAiUGxhdGZvcm1TdXBwb3J0L0FyZW5hQWxsb2NhdG9yLmhwcCIgMQojIDY4
ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlUHJvY2Vzc2luZ0luc3RydWN0aW9uQWxs
b2NhdG9yLmhwcCIgMgoKCgojIDEgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24uaHBwIiAxCiMgNjIgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJj
ZVRyZWVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaHBwIgojIDEgIlhhbGFuU291cmNlVHJlZS9YYWxh
blNvdXJjZVRyZWVEZWZpbml0aW9ucy5ocHAiIDEKIyA2MyAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFu
U291cmNlVHJlZVByb2Nlc3NpbmdJbnN0cnVjdGlvbi5ocHAiIDIKCgoKIyAxICJYYWxhbkRPTS9Y
YWxhblByb2Nlc3NpbmdJbnN0cnVjdGlvbi5ocHAiIDEKIyA2MiAiWGFsYW5ET00vWGFsYW5Qcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24uaHBwIgojIDEgIlhhbGFuRE9NL1hhbGFuRE9NRGVmaW5pdGlvbnMu
aHBwIiAxCiMgNjMgIlhhbGFuRE9NL1hhbGFuUHJvY2Vzc2luZ0luc3RydWN0aW9uLmhwcCIgMgoj
IDEgIlhhbGFuRE9NL1hhbGFuTm9kZS5ocHAiIDEKIyA2NCAiWGFsYW5ET00vWGFsYW5Qcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24uaHBwIiAyCiMgNzUgIlhhbGFuRE9NL1hhbGFuUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uLmhwcCIKY2xhc3MgWGFsYW5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gOiBwdWJsaWMgWGFs
YW5Ob2RlCnsKcHVibGljOgoKICAgICAgICBYYWxhblByb2Nlc3NpbmdJbnN0cnVjdGlvbigpOwoK
ICAgICAgICB2aXJ0dWFsCiAgICAgICAgflhhbGFuUHJvY2Vzc2luZ0luc3RydWN0aW9uKCk7CgoK
CiAgICAgICAgdmlydHVhbCBjb25zdCBYYWxhbkRPTVN0cmluZyYKICAgICAgICBnZXROb2RlTmFt
ZSgpIGNvbnN0ID0gMDsKCgoKCiAgICAgICAgdmlydHVhbCBjb25zdCBYYWxhbkRPTVN0cmluZyYK
ICAgICAgICBnZXROb2RlVmFsdWUoKSBjb25zdCA9IDA7CgoKCgogICAgICAgIHZpcnR1YWwgTm9k
ZVR5cGUKICAgICAgICBnZXROb2RlVHlwZSgpIGNvbnN0ID0gMDsKIyAxMTAgIlhhbGFuRE9NL1hh
bGFuUHJvY2Vzc2luZ0luc3RydWN0aW9uLmhwcCIKICAgICAgICB2aXJ0dWFsIFhhbGFuTm9kZSoK
ICAgICAgICBnZXRQYXJlbnROb2RlKCkgY29uc3QgPSAwOwojIDEyNiAiWGFsYW5ET00vWGFsYW5Q
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaHBwIgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5Ob2Rl
TGlzdCoKICAgICAgICBnZXRDaGlsZE5vZGVzKCkgY29uc3QgPSAwOwoKCgoKCgogICAgICAgIHZp
cnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIGdldEZpcnN0Q2hpbGQoKSBjb25zdCA9IDA7CgoKCgoK
CiAgICAgICAgdmlydHVhbCBYYWxhbk5vZGUqCiAgICAgICAgZ2V0TGFzdENoaWxkKCkgY29uc3Qg
PSAwOwoKCgoKCgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIGdldFByZXZpb3Vz
U2libGluZygpIGNvbnN0ID0gMDsKCgoKCgoKICAgICAgICB2aXJ0dWFsIFhhbGFuTm9kZSoKICAg
ICAgICBnZXROZXh0U2libGluZygpIGNvbnN0ID0gMDsKCgoKCgogICAgICAgIHZpcnR1YWwgY29u
c3QgWGFsYW5OYW1lZE5vZGVNYXAqCiAgICAgICAgZ2V0QXR0cmlidXRlcygpIGNvbnN0ID0gMDsK
IyAxNzcgIlhhbGFuRE9NL1hhbGFuUHJvY2Vzc2luZ0luc3RydWN0aW9uLmhwcCIKICAgICAgICB2
aXJ0dWFsIFhhbGFuRG9jdW1lbnQqCiAgICAgICAgZ2V0T3duZXJEb2N1bWVudCgpIGNvbnN0ID0g
MDsKIyAyMDIgIlhhbGFuRE9NL1hhbGFuUHJvY2Vzc2luZ0luc3RydWN0aW9uLmhwcCIKICAgICAg
ICB2aXJ0dWFsIFhhbGFuTm9kZSoKICAgICAgICBjbG9uZU5vZGUoYm9vbCBkZWVwKSBjb25zdCA9
IDA7CiMgMjI1ICJYYWxhbkRPTS9YYWxhblByb2Nlc3NpbmdJbnN0cnVjdGlvbi5ocHAiCiAgICAg
ICAgdmlydHVhbCBYYWxhbk5vZGUqCiAgICAgICAgaW5zZXJ0QmVmb3JlKAogICAgICAgICAgICAg
ICAgICAgICAgICBYYWxhbk5vZGUqIG5ld0NoaWxkLAogICAgICAgICAgICAgICAgICAgICAgICBY
YWxhbk5vZGUqIHJlZkNoaWxkKSA9IDA7CiMgMjQzICJYYWxhbkRPTS9YYWxhblByb2Nlc3NpbmdJ
bnN0cnVjdGlvbi5ocHAiCiAgICAgICAgdmlydHVhbCBYYWxhbk5vZGUqCiAgICAgICAgcmVwbGFj
ZUNoaWxkKAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhbk5vZGUqIG5ld0NoaWxkLAogICAg
ICAgICAgICAgICAgICAgICAgICBYYWxhbk5vZGUqIG9sZENoaWxkKSA9IDA7CiMgMjU1ICJYYWxh
bkRPTS9YYWxhblByb2Nlc3NpbmdJbnN0cnVjdGlvbi5ocHAiCiAgICAgICAgdmlydHVhbCBYYWxh
bk5vZGUqCiAgICAgICAgcmVtb3ZlQ2hpbGQoWGFsYW5Ob2RlKiBvbGRDaGlsZCkgPSAwOwojIDI2
OSAiWGFsYW5ET00vWGFsYW5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaHBwIgogICAgICAgIHZpcnR1
YWwgWGFsYW5Ob2RlKgogICAgICAgIGFwcGVuZENoaWxkKFhhbGFuTm9kZSogbmV3Q2hpbGQpID0g
MDsKIyAyODMgIlhhbGFuRE9NL1hhbGFuUHJvY2Vzc2luZ0luc3RydWN0aW9uLmhwcCIKICAgICAg
ICB2aXJ0dWFsIGJvb2wKICAgICAgICBoYXNDaGlsZE5vZGVzKCkgY29uc3QgPSAwOwojIDMwNSAi
WGFsYW5ET00vWGFsYW5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaHBwIgogICAgICAgIHZpcnR1YWwg
dm9pZAogICAgICAgIHNldE5vZGVWYWx1ZShjb25zdCBYYWxhbkRPTVN0cmluZyYgbm9kZVZhbHVl
KSA9IDA7CiMgMzI4ICJYYWxhbkRPTS9YYWxhblByb2Nlc3NpbmdJbnN0cnVjdGlvbi5ocHAiCiAg
ICAgICAgdmlydHVhbCB2b2lkCiAgICAgICAgbm9ybWFsaXplKCkgPSAwOwojIDM0NCAiWGFsYW5E
T00vWGFsYW5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaHBwIgogICAgICAgIHZpcnR1YWwgYm9vbAog
ICAgICAgIHN1cHBvcnRzKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0
cmluZyYgZmVhdHVyZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJp
bmcmIHZlcnNpb24pIGNvbnN0ID0gMDsKIyAzNjIgIlhhbGFuRE9NL1hhbGFuUHJvY2Vzc2luZ0lu
c3RydWN0aW9uLmhwcCIKICAgICAgICB2aXJ0dWFsIGNvbnN0IFhhbGFuRE9NU3RyaW5nJgogICAg
ICAgIGdldE5hbWVzcGFjZVVSSSgpIGNvbnN0ID0gMDsKCgoKCgogICAgICAgIHZpcnR1YWwgY29u
c3QgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgZ2V0UHJlZml4KCkgY29uc3QgPSAwOwojIDM3OSAi
WGFsYW5ET00vWGFsYW5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaHBwIgogICAgICAgIHZpcnR1YWwg
Y29uc3QgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgZ2V0TG9jYWxOYW1lKCkgY29uc3QgPSAwOwoj
IDQxMSAiWGFsYW5ET00vWGFsYW5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaHBwIgogICAgICAgIHZp
cnR1YWwgdm9pZAogICAgICAgIHNldFByZWZpeChjb25zdCBYYWxhbkRPTVN0cmluZyYgcHJlZml4
KSA9IDA7CgoKCgoKCiAgICAgICAgdmlydHVhbCBib29sCiAgICAgICAgaXNJbmRleGVkKCkgY29u
c3QgPSAwOwoKCgoKCgoKICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcKICAgICAgICBnZXRJ
bmRleCgpIGNvbnN0ID0gMDsKIyA0NDQgIlhhbGFuRE9NL1hhbGFuUHJvY2Vzc2luZ0luc3RydWN0
aW9uLmhwcCIKICAgIHZpcnR1YWwgY29uc3QgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgZ2V0VGFy
Z2V0KCkgY29uc3QgPSAwOwojIDQ1NiAiWGFsYW5ET00vWGFsYW5Qcm9jZXNzaW5nSW5zdHJ1Y3Rp
b24uaHBwIgogICAgdmlydHVhbCBjb25zdCBYYWxhbkRPTVN0cmluZyYKICAgICAgICBnZXREYXRh
KCkgY29uc3QgPSAwOwojIDQ3MCAiWGFsYW5ET00vWGFsYW5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24u
aHBwIgogICAgdmlydHVhbCB2b2lkCiAgICAgICAgc2V0RGF0YShjb25zdCBYYWxhbkRPTVN0cmlu
ZyYgZGF0YSkgPSAwOwoKCnByb3RlY3RlZDoKCiAgICAgICAgWGFsYW5Qcm9jZXNzaW5nSW5zdHJ1
Y3Rpb24oY29uc3QgWGFsYW5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24mIHRoZVNvdXJjZSk7CgogICAg
ICAgIFhhbGFuUHJvY2Vzc2luZ0luc3RydWN0aW9uJgogICAgICAgIG9wZXJhdG9yPShjb25zdCBY
YWxhblByb2Nlc3NpbmdJbnN0cnVjdGlvbiYgdGhlU291cmNlKTsKCiAgICAgICAgYm9vbAogICAg
ICAgIG9wZXJhdG9yPT0oY29uc3QgWGFsYW5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24mIHRoZVJIUykg
Y29uc3Q7Cgpwcml2YXRlOgp9OwojIDY3ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVl
UHJvY2Vzc2luZ0luc3RydWN0aW9uLmhwcCIgMgoKCgojIDEgIlhhbGFuRE9NL1hhbGFuRE9NU3Ry
aW5nLmhwcCIgMQojIDcxICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlUHJvY2Vzc2lu
Z0luc3RydWN0aW9uLmhwcCIgMgoKCgpjbGFzcyBYYWxhblNvdXJjZVRyZWVDb21tZW50OwpjbGFz
cyBYYWxhblNvdXJjZVRyZWVEb2N1bWVudDsKY2xhc3MgWGFsYW5Tb3VyY2VUcmVlRWxlbWVudDsK
Y2xhc3MgWGFsYW5Tb3VyY2VUcmVlVGV4dDsKCgoKY2xhc3MgWGFsYW5Tb3VyY2VUcmVlUHJvY2Vz
c2luZ0luc3RydWN0aW9uIDogcHVibGljIFhhbGFuUHJvY2Vzc2luZ0luc3RydWN0aW9uCnsKcHVi
bGljOgojIDk4ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uLmhwcCIKICAgICAgICBYYWxhblNvdXJjZVRyZWVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24o
CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVUYXJnZXQs
CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVEYXRhLAog
ICAgICAgICAgICAgICAgICAgICAgICBYYWxhblNvdXJjZVRyZWVEb2N1bWVudCogdGhlT3duZXJE
b2N1bWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5Tb3VyY2VUcmVlRWxlbWVudCog
dGhlUGFyZW50RWxlbWVudCA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuTm9kZSog
dGhlUHJldmlvdXNTaWJsaW5nID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5Ob2Rl
KiB0aGVOZXh0U2libGluZyA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCB0aGVJbmRleCA9IDApOwoKICAgICAgICB2aXJ0dWFsCiAgICAgICAgflhhbGFuU291cmNlVHJl
ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbigpOwoKCgoKICAgICAgICB2aXJ0dWFsIGNvbnN0IFhhbGFu
RE9NU3RyaW5nJgogICAgICAgIGdldE5vZGVOYW1lKCkgY29uc3Q7CgoKCgogICAgICAgIHZpcnR1
YWwgY29uc3QgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgZ2V0Tm9kZVZhbHVlKCkgY29uc3Q7CgoK
CgogICAgICAgIHZpcnR1YWwgTm9kZVR5cGUKICAgICAgICBnZXROb2RlVHlwZSgpIGNvbnN0Owoj
IDEzNyAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZVByb2Nlc3NpbmdJbnN0cnVjdGlv
bi5ocHAiCiAgICAgICAgdmlydHVhbCBYYWxhbk5vZGUqCiAgICAgICAgZ2V0UGFyZW50Tm9kZSgp
IGNvbnN0OwojIDE1MyAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZVByb2Nlc3NpbmdJ
bnN0cnVjdGlvbi5ocHAiCiAgICAgICAgdmlydHVhbCBjb25zdCBYYWxhbk5vZGVMaXN0KgogICAg
ICAgIGdldENoaWxkTm9kZXMoKSBjb25zdDsKCgoKCgoKICAgICAgICB2aXJ0dWFsIFhhbGFuTm9k
ZSoKICAgICAgICBnZXRGaXJzdENoaWxkKCkgY29uc3Q7CgoKCgoKCiAgICAgICAgdmlydHVhbCBY
YWxhbk5vZGUqCiAgICAgICAgZ2V0TGFzdENoaWxkKCkgY29uc3Q7CgoKCgoKCiAgICAgICAgdmly
dHVhbCBYYWxhbk5vZGUqCiAgICAgICAgZ2V0UHJldmlvdXNTaWJsaW5nKCkgY29uc3Q7CgoKCgoK
CiAgICAgICAgdmlydHVhbCBYYWxhbk5vZGUqCiAgICAgICAgZ2V0TmV4dFNpYmxpbmcoKSBjb25z
dDsKCgoKCgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5OYW1lZE5vZGVNYXAqCiAgICAgICAg
Z2V0QXR0cmlidXRlcygpIGNvbnN0OwojIDIwNCAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNl
VHJlZVByb2Nlc3NpbmdJbnN0cnVjdGlvbi5ocHAiCiAgICAgICAgdmlydHVhbCBYYWxhbkRvY3Vt
ZW50KgogICAgICAgIGdldE93bmVyRG9jdW1lbnQoKSBjb25zdDsKIyAyMzIgIlhhbGFuU291cmNl
VHJlZS9YYWxhblNvdXJjZVRyZWVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaHBwIgogICAgICAgIHZp
cnR1YWwgWGFsYW5Tb3VyY2VUcmVlUHJvY2Vzc2luZ0luc3RydWN0aW9uKgoKICAgICAgICBjbG9u
ZU5vZGUoYm9vbCBkZWVwKSBjb25zdDsKIyAyNTYgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJj
ZVRyZWVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaHBwIgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2Rl
KgogICAgICAgIGluc2VydEJlZm9yZSgKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5Ob2Rl
KiBuZXdDaGlsZCwKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5Ob2RlKiByZWZDaGlsZCk7
CiMgMjc0ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlUHJvY2Vzc2luZ0luc3RydWN0
aW9uLmhwcCIKICAgICAgICB2aXJ0dWFsIFhhbGFuTm9kZSoKICAgICAgICByZXBsYWNlQ2hpbGQo
CiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuTm9kZSogbmV3Q2hpbGQsCiAgICAgICAgICAg
ICAgICAgICAgICAgIFhhbGFuTm9kZSogb2xkQ2hpbGQpOwojIDI4NiAiWGFsYW5Tb3VyY2VUcmVl
L1hhbGFuU291cmNlVHJlZVByb2Nlc3NpbmdJbnN0cnVjdGlvbi5ocHAiCiAgICAgICAgdmlydHVh
bCBYYWxhbk5vZGUqCiAgICAgICAgcmVtb3ZlQ2hpbGQoWGFsYW5Ob2RlKiBvbGRDaGlsZCk7CiMg
MzAwICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlUHJvY2Vzc2luZ0luc3RydWN0aW9u
LmhwcCIKICAgICAgICB2aXJ0dWFsIFhhbGFuTm9kZSoKICAgICAgICBhcHBlbmRDaGlsZChYYWxh
bk5vZGUqIG5ld0NoaWxkKTsKIyAzMTQgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVQ
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaHBwIgogICAgICAgIHZpcnR1YWwgYm9vbAogICAgICAgIGhh
c0NoaWxkTm9kZXMoKSBjb25zdDsKIyAzMzYgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRy
ZWVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaHBwIgogICAgICAgIHZpcnR1YWwgdm9pZAogICAgICAg
IHNldE5vZGVWYWx1ZShjb25zdCBYYWxhbkRPTVN0cmluZyYgbm9kZVZhbHVlKTsKIyAzNTkgIlhh
bGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaHBwIgog
ICAgICAgIHZpcnR1YWwgdm9pZAogICAgICAgIG5vcm1hbGl6ZSgpOwojIDM3NSAiWGFsYW5Tb3Vy
Y2VUcmVlL1hhbGFuU291cmNlVHJlZVByb2Nlc3NpbmdJbnN0cnVjdGlvbi5ocHAiCiAgICAgICAg
dmlydHVhbCBib29sCiAgICAgICAgc3VwcG9ydHMoCiAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFhhbGFuRE9NU3RyaW5nJiBmZWF0dXJlLAogICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBYYWxhbkRPTVN0cmluZyYgdmVyc2lvbikgY29uc3Q7CiMgMzkzICJYYWxhblNvdXJjZVRyZWUv
WGFsYW5Tb3VyY2VUcmVlUHJvY2Vzc2luZ0luc3RydWN0aW9uLmhwcCIKICAgICAgICB2aXJ0dWFs
IGNvbnN0IFhhbGFuRE9NU3RyaW5nJgogICAgICAgIGdldE5hbWVzcGFjZVVSSSgpIGNvbnN0OwoK
CgoKCiAgICAgICAgdmlydHVhbCBjb25zdCBYYWxhbkRPTVN0cmluZyYKICAgICAgICBnZXRQcmVm
aXgoKSBjb25zdDsKIyA0MTAgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVQcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24uaHBwIgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5ET01TdHJpbmcm
CiAgICAgICAgZ2V0TG9jYWxOYW1lKCkgY29uc3Q7CiMgNDQyICJYYWxhblNvdXJjZVRyZWUvWGFs
YW5Tb3VyY2VUcmVlUHJvY2Vzc2luZ0luc3RydWN0aW9uLmhwcCIKICAgICAgICB2aXJ0dWFsIHZv
aWQKICAgICAgICBzZXRQcmVmaXgoY29uc3QgWGFsYW5ET01TdHJpbmcmIHByZWZpeCk7CgogICAg
ICAgIHZpcnR1YWwgYm9vbAogICAgICAgIGlzSW5kZXhlZCgpIGNvbnN0OwoKICAgICAgICB2aXJ0
dWFsIHVuc2lnbmVkIGxvbmcKICAgICAgICBnZXRJbmRleCgpIGNvbnN0OwojIDQ2NCAiWGFsYW5T
b3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZVByb2Nlc3NpbmdJbnN0cnVjdGlvbi5ocHAiCiAgICB2
aXJ0dWFsIGNvbnN0IFhhbGFuRE9NU3RyaW5nJgogICAgICAgIGdldFRhcmdldCgpIGNvbnN0Owoj
IDQ3NiAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZVByb2Nlc3NpbmdJbnN0cnVjdGlv
bi5ocHAiCiAgICB2aXJ0dWFsIGNvbnN0IFhhbGFuRE9NU3RyaW5nJgogICAgICAgIGdldERhdGEo
KSBjb25zdDsKIyA0OTAgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVQcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24uaHBwIgogICAgdmlydHVhbCB2b2lkCiAgICAgICAgc2V0RGF0YShjb25zdCBY
YWxhbkRPTVN0cmluZyYgZGF0YSk7CgoKCgoKICAgICAgICBYYWxhblNvdXJjZVRyZWVFbGVtZW50
KgogICAgICAgIGdldFBhcmVudEVsZW1lbnQoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAg
ICAgIHJldHVybiBtX3BhcmVudEVsZW1lbnQ7CiAgICAgICAgfQoKICAgICAgICB2b2lkCiAgICAg
ICAgc2V0UGFyZW50RWxlbWVudChYYWxhblNvdXJjZVRyZWVFbGVtZW50KiB0aGVQYXJlbnRFbGVt
ZW50KQogICAgICAgIHsKICAgICAgICAgICAgICAgIG1fcGFyZW50RWxlbWVudCA9IHRoZVBhcmVu
dEVsZW1lbnQ7CiAgICAgICAgfQoKICAgICAgICB2b2lkCiAgICAgICAgc2V0UHJldmlvdXNTaWJs
aW5nKFhhbGFuU291cmNlVHJlZUNvbW1lbnQqIHRoZVByZXZpb3VzU2libGluZyk7CgogICAgICAg
IHZvaWQKICAgICAgICBzZXRQcmV2aW91c1NpYmxpbmcoWGFsYW5Tb3VyY2VUcmVlRWxlbWVudCog
dGhlUHJldmlvdXNTaWJsaW5nKTsKCiAgICAgICAgdm9pZAogICAgICAgIHNldFByZXZpb3VzU2li
bGluZyhYYWxhblNvdXJjZVRyZWVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIHRoZVByZXZpb3VzU2li
bGluZyk7CgogICAgICAgIHZvaWQKICAgICAgICBzZXRQcmV2aW91c1NpYmxpbmcoWGFsYW5Tb3Vy
Y2VUcmVlVGV4dCogdGhlUHJldmlvdXNTaWJsaW5nKTsKCiAgICAgICAgdm9pZAogICAgICAgIGFw
cGVuZFNpYmxpbmdOb2RlKFhhbGFuU291cmNlVHJlZUNvbW1lbnQqIHRoZVNpYmxpbmcpOwoKICAg
ICAgICB2b2lkCiAgICAgICAgYXBwZW5kU2libGluZ05vZGUoWGFsYW5Tb3VyY2VUcmVlRWxlbWVu
dCogdGhlU2libGluZyk7CgogICAgICAgIHZvaWQKICAgICAgICBhcHBlbmRTaWJsaW5nTm9kZShY
YWxhblNvdXJjZVRyZWVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIHRoZVNpYmxpbmcpOwoKICAgICAg
ICB2b2lkCiAgICAgICAgYXBwZW5kU2libGluZ05vZGUoWGFsYW5Tb3VyY2VUcmVlVGV4dCogdGhl
U2libGluZyk7CgogICAgICAgIHZvaWQKICAgICAgICBzZXRJbmRleCh1bnNpZ25lZCBpbnQgdGhl
SW5kZXgpCiAgICAgICAgewogICAgICAgICAgICAgICAgbV9pbmRleCA9IHRoZUluZGV4OwogICAg
ICAgIH0KCnByb3RlY3RlZDoKCiAgICAgICAgWGFsYW5Tb3VyY2VUcmVlUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhblNvdXJjZVRyZWVQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24mIHRoZVNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBkZWVwID0gZmFsc2UpOwoKcHJpdmF0ZToKCgogICAgICAgIFhhbGFuU291cmNlVHJlZVByb2Nl
c3NpbmdJbnN0cnVjdGlvbiYKICAgICAgICBvcGVyYXRvcj0oY29uc3QgWGFsYW5Tb3VyY2VUcmVl
UHJvY2Vzc2luZ0luc3RydWN0aW9uJiB0aGVTb3VyY2UpOwoKICAgICAgICBib29sCiAgICAgICAg
b3BlcmF0b3I9PShjb25zdCBYYWxhblNvdXJjZVRyZWVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24mIHRo
ZVJIUykgY29uc3Q7CgoKCiAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIG1fdGFyZ2V0OwoK
ICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgbV9kYXRhOwoKICAgICAgICBYYWxhblNvdXJj
ZVRyZWVEb2N1bWVudCogbV9vd25lckRvY3VtZW50OwoKICAgICAgICBYYWxhblNvdXJjZVRyZWVF
bGVtZW50KiBtX3BhcmVudEVsZW1lbnQ7CgogICAgICAgIFhhbGFuTm9kZSogbV9wcmV2aW91c1Np
Ymxpbmc7CgogICAgICAgIFhhbGFuTm9kZSogbV9uZXh0U2libGluZzsKCiAgICAgICAgdW5zaWdu
ZWQgaW50IG1faW5kZXg7Cn07CiMgNzIgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVQ
cm9jZXNzaW5nSW5zdHJ1Y3Rpb25BbGxvY2F0b3IuaHBwIiAyCgoKCmNsYXNzIFhhbGFuU291cmNl
VHJlZVByb2Nlc3NpbmdJbnN0cnVjdGlvbkFsbG9jYXRvcgp7CnB1YmxpYzoKCiAgICAgICAgdHlw
ZWRlZiBYYWxhblNvdXJjZVRyZWVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gT2JqZWN0VHlwZTsKCgoK
CgoKCiAgICAgICAgdHlwZWRlZiBBcmVuYUFsbG9jYXRvcjxPYmplY3RUeXBlPiBBcmVuYUFsbG9j
YXRvclR5cGU7CgoKICAgICAgICB0eXBlZGVmIEFyZW5hQWxsb2NhdG9yVHlwZTo6c2l6ZV90eXBl
IHNpemVfdHlwZTsKCgoKCgoKICAgICAgICBYYWxhblNvdXJjZVRyZWVQcm9jZXNzaW5nSW5zdHJ1
Y3Rpb25BbGxvY2F0b3Ioc2l6ZV90eXBlIHRoZUJsb2NrQ291bnQpOwoKICAgICAgICB+WGFsYW5T
b3VyY2VUcmVlUHJvY2Vzc2luZ0luc3RydWN0aW9uQWxsb2NhdG9yKCk7CiMgMTE0ICJYYWxhblNv
dXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlUHJvY2Vzc2luZ0luc3RydWN0aW9uQWxsb2NhdG9yLmhw
cCIKICAgICAgICBPYmplY3RUeXBlKgogICAgICAgIGNyZWF0ZSgKICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVRhcmdldCwKICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZURhdGEsCiAgICAgICAgICAgICAgICAgICAg
ICAgIFhhbGFuU291cmNlVHJlZURvY3VtZW50KiB0aGVPd25lckRvY3VtZW50LAogICAgICAgICAg
ICAgICAgICAgICAgICBYYWxhblNvdXJjZVRyZWVFbGVtZW50KiB0aGVQYXJlbnRFbGVtZW50ID0g
MCwKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5Ob2RlKiB0aGVQcmV2aW91c1NpYmxpbmcg
PSAwLAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhbk5vZGUqIHRoZU5leHRTaWJsaW5nID0g
MCwKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRoZUluZGV4ID0gMCk7CgoK
CgogICAgICAgIHZvaWQKICAgICAgICByZXNldCgpOwoKCgoKCgoKICAgICAgICBzaXplX3R5cGUK
ICAgICAgICBnZXRCbG9ja0NvdW50KCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9hbGxvY2F0b3IuZ2V0QmxvY2tDb3VudCgpOwogICAgICAgIH0KCgoKCgoKICAgICAg
ICBzaXplX3R5cGUKICAgICAgICBnZXRCbG9ja1NpemUoKSBjb25zdAogICAgICAgIHsKICAgICAg
ICAgICAgICAgIHJldHVybiBtX2FsbG9jYXRvci5nZXRCbG9ja1NpemUoKTsKICAgICAgICB9Cgpw
cml2YXRlOgoKCiAgICAgICAgWGFsYW5Tb3VyY2VUcmVlUHJvY2Vzc2luZ0luc3RydWN0aW9uQWxs
b2NhdG9yKGNvbnN0IFhhbGFuU291cmNlVHJlZVByb2Nlc3NpbmdJbnN0cnVjdGlvbkFsbG9jYXRv
ciYpOwoKICAgICAgICBYYWxhblNvdXJjZVRyZWVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25BbGxvY2F0
b3ImCiAgICAgICAgb3BlcmF0b3I9KGNvbnN0IFhhbGFuU291cmNlVHJlZVByb2Nlc3NpbmdJbnN0
cnVjdGlvbkFsbG9jYXRvciYpOwoKCiAgICAgICAgQXJlbmFBbGxvY2F0b3JUeXBlIG1fYWxsb2Nh
dG9yOwp9OwojIDg3ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRG9jdW1lbnQuaHBw
IiAyCiMgMSAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZVRleHRBbGxvY2F0b3IuaHBw
IiAxCiMgNjMgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVUZXh0QWxsb2NhdG9yLmhw
cCIKIyAxICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRGVmaW5pdGlvbnMuaHBwIiAx
CiMgNjQgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVUZXh0QWxsb2NhdG9yLmhwcCIg
MgoKCgojIDEgIlBsYXRmb3JtU3VwcG9ydC9BcmVuYUFsbG9jYXRvci5ocHAiIDEKIyA2OCAiWGFs
YW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZVRleHRBbGxvY2F0b3IuaHBwIiAyCgoKCiMgMSAi
WGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZVRleHQuaHBwIiAxCiMgNjIgIlhhbGFuU291
cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVUZXh0LmhwcCIKIyAxICJYYWxhblNvdXJjZVRyZWUvWGFs
YW5Tb3VyY2VUcmVlRGVmaW5pdGlvbnMuaHBwIiAxCiMgNjMgIlhhbGFuU291cmNlVHJlZS9YYWxh
blNvdXJjZVRyZWVUZXh0LmhwcCIgMgoKCgojIDEgIlhhbGFuRE9NL1hhbGFuVGV4dC5ocHAiIDEK
IyA2MiAiWGFsYW5ET00vWGFsYW5UZXh0LmhwcCIKIyAxICJYYWxhbkRPTS9YYWxhbkRPTURlZmlu
aXRpb25zLmhwcCIgMQojIDYzICJYYWxhbkRPTS9YYWxhblRleHQuaHBwIiAyCiMgMSAiWGFsYW5E
T00vWGFsYW5DaGFyYWN0ZXJEYXRhLmhwcCIgMQojIDY0ICJYYWxhbkRPTS9YYWxhblRleHQuaHBw
IiAyCiMgNzUgIlhhbGFuRE9NL1hhbGFuVGV4dC5ocHAiCmNsYXNzIFhhbGFuVGV4dCA6IHB1Ymxp
YyBYYWxhbkNoYXJhY3RlckRhdGEKewpwdWJsaWM6CgogICAgICAgIFhhbGFuVGV4dCgpOwoKICAg
ICAgICB2aXJ0dWFsCiAgICAgICAgflhhbGFuVGV4dCgpOwoKCiAgICAgICAgdmlydHVhbCBjb25z
dCBYYWxhbkRPTVN0cmluZyYKICAgICAgICBnZXROb2RlTmFtZSgpIGNvbnN0ID0gMDsKCgoKCiAg
ICAgICAgdmlydHVhbCBjb25zdCBYYWxhbkRPTVN0cmluZyYKICAgICAgICBnZXROb2RlVmFsdWUo
KSBjb25zdCA9IDA7CgoKCgogICAgICAgIHZpcnR1YWwgTm9kZVR5cGUKICAgICAgICBnZXROb2Rl
VHlwZSgpIGNvbnN0ID0gMDsKIyAxMDkgIlhhbGFuRE9NL1hhbGFuVGV4dC5ocHAiCiAgICAgICAg
dmlydHVhbCBYYWxhbk5vZGUqCiAgICAgICAgZ2V0UGFyZW50Tm9kZSgpIGNvbnN0ID0gMDsKIyAx
MjUgIlhhbGFuRE9NL1hhbGFuVGV4dC5ocHAiCiAgICAgICAgdmlydHVhbCBjb25zdCBYYWxhbk5v
ZGVMaXN0KgogICAgICAgIGdldENoaWxkTm9kZXMoKSBjb25zdCA9IDA7CgoKCgoKCiAgICAgICAg
dmlydHVhbCBYYWxhbk5vZGUqCiAgICAgICAgZ2V0Rmlyc3RDaGlsZCgpIGNvbnN0ID0gMDsKCgoK
CgoKICAgICAgICB2aXJ0dWFsIFhhbGFuTm9kZSoKICAgICAgICBnZXRMYXN0Q2hpbGQoKSBjb25z
dCA9IDA7CgoKCgoKCiAgICAgICAgdmlydHVhbCBYYWxhbk5vZGUqCiAgICAgICAgZ2V0UHJldmlv
dXNTaWJsaW5nKCkgY29uc3QgPSAwOwoKCgoKCgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgog
ICAgICAgIGdldE5leHRTaWJsaW5nKCkgY29uc3QgPSAwOwoKCgoKCiAgICAgICAgdmlydHVhbCBj
b25zdCBYYWxhbk5hbWVkTm9kZU1hcCoKICAgICAgICBnZXRBdHRyaWJ1dGVzKCkgY29uc3QgPSAw
OwojIDE3NiAiWGFsYW5ET00vWGFsYW5UZXh0LmhwcCIKICAgICAgICB2aXJ0dWFsIFhhbGFuRG9j
dW1lbnQqCiAgICAgICAgZ2V0T3duZXJEb2N1bWVudCgpIGNvbnN0ID0gMDsKIyAyMDQgIlhhbGFu
RE9NL1hhbGFuVGV4dC5ocHAiCiAgICAgICAgdmlydHVhbCBYYWxhblRleHQqCgogICAgICAgIGNs
b25lTm9kZShib29sIGRlZXApIGNvbnN0ID0gMDsKIyAyMjggIlhhbGFuRE9NL1hhbGFuVGV4dC5o
cHAiCiAgICAgICAgdmlydHVhbCBYYWxhbk5vZGUqCiAgICAgICAgaW5zZXJ0QmVmb3JlKAogICAg
ICAgICAgICAgICAgICAgICAgICBYYWxhbk5vZGUqIG5ld0NoaWxkLAogICAgICAgICAgICAgICAg
ICAgICAgICBYYWxhbk5vZGUqIHJlZkNoaWxkKSA9IDA7CiMgMjQ2ICJYYWxhbkRPTS9YYWxhblRl
eHQuaHBwIgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIHJlcGxhY2VDaGlsZCgK
ICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5Ob2RlKiBuZXdDaGlsZCwKICAgICAgICAgICAg
ICAgICAgICAgICAgWGFsYW5Ob2RlKiBvbGRDaGlsZCkgPSAwOwojIDI1OCAiWGFsYW5ET00vWGFs
YW5UZXh0LmhwcCIKICAgICAgICB2aXJ0dWFsIFhhbGFuTm9kZSoKICAgICAgICByZW1vdmVDaGls
ZChYYWxhbk5vZGUqIG9sZENoaWxkKSA9IDA7CiMgMjcyICJYYWxhbkRPTS9YYWxhblRleHQuaHBw
IgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIGFwcGVuZENoaWxkKFhhbGFuTm9k
ZSogbmV3Q2hpbGQpID0gMDsKIyAyODYgIlhhbGFuRE9NL1hhbGFuVGV4dC5ocHAiCiAgICAgICAg
dmlydHVhbCBib29sCiAgICAgICAgaGFzQ2hpbGROb2RlcygpIGNvbnN0ID0gMDsKIyAzMDggIlhh
bGFuRE9NL1hhbGFuVGV4dC5ocHAiCiAgICAgICAgdmlydHVhbCB2b2lkCiAgICAgICAgc2V0Tm9k
ZVZhbHVlKGNvbnN0IFhhbGFuRE9NU3RyaW5nJiBub2RlVmFsdWUpID0gMDsKIyAzMzEgIlhhbGFu
RE9NL1hhbGFuVGV4dC5ocHAiCiAgICAgICAgdmlydHVhbCB2b2lkCiAgICAgICAgbm9ybWFsaXpl
KCkgPSAwOwojIDM0NyAiWGFsYW5ET00vWGFsYW5UZXh0LmhwcCIKICAgICAgICB2aXJ0dWFsIGJv
b2wKICAgICAgICBzdXBwb3J0cygKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5E
T01TdHJpbmcmIGZlYXR1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9N
U3RyaW5nJiB2ZXJzaW9uKSBjb25zdCA9IDA7CiMgMzY1ICJYYWxhbkRPTS9YYWxhblRleHQuaHBw
IgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgZ2V0TmFtZXNw
YWNlVVJJKCkgY29uc3QgPSAwOwoKCgoKCiAgICAgICAgdmlydHVhbCBjb25zdCBYYWxhbkRPTVN0
cmluZyYKICAgICAgICBnZXRQcmVmaXgoKSBjb25zdCA9IDA7CiMgMzgyICJYYWxhbkRPTS9YYWxh
blRleHQuaHBwIgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5ET01TdHJpbmcmCiAgICAgICAg
Z2V0TG9jYWxOYW1lKCkgY29uc3QgPSAwOwojIDQxNCAiWGFsYW5ET00vWGFsYW5UZXh0LmhwcCIK
ICAgICAgICB2aXJ0dWFsIHZvaWQKICAgICAgICBzZXRQcmVmaXgoY29uc3QgWGFsYW5ET01TdHJp
bmcmIHByZWZpeCkgPSAwOwoKCgoKCgogICAgICAgIHZpcnR1YWwgYm9vbAogICAgICAgIGlzSW5k
ZXhlZCgpIGNvbnN0ID0gMDsKCgoKCgoKCiAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nCiAg
ICAgICAgZ2V0SW5kZXgoKSBjb25zdCA9IDA7CiMgNDU2ICJYYWxhbkRPTS9YYWxhblRleHQuaHBw
IgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgZ2V0RGF0YSgp
IGNvbnN0ID0gMDsKIyA0NjYgIlhhbGFuRE9NL1hhbGFuVGV4dC5ocHAiCiAgICAgICAgdmlydHVh
bCB1bnNpZ25lZCBpbnQKICAgICAgICBnZXRMZW5ndGgoKSBjb25zdCA9IDA7CiMgNDg0ICJYYWxh
bkRPTS9YYWxhblRleHQuaHBwIgogICAgICAgIHZpcnR1YWwgWGFsYW5ET01TdHJpbmcKICAgICAg
ICBzdWJzdHJpbmdEYXRhKAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zm
c2V0LAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQpIGNvbnN0ID0g
MDsKIyA1MDEgIlhhbGFuRE9NL1hhbGFuVGV4dC5ocHAiCiAgICAgICAgdmlydHVhbCB2b2lkCiAg
ICAgICAgYXBwZW5kRGF0YShjb25zdCBYYWxhbkRPTVN0cmluZyYgYXJnKSA9IDA7CiMgNTE0ICJY
YWxhbkRPTS9YYWxhblRleHQuaHBwIgogICAgICAgIHZpcnR1YWwgdm9pZAogICAgICAgIGluc2Vy
dERhdGEoCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsCiAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiBhcmcpID0gMDsKIyA1MzUg
IlhhbGFuRE9NL1hhbGFuVGV4dC5ocHAiCiAgICAgICAgdmlydHVhbCB2b2lkCiAgICAgICAgZGVs
ZXRlRGF0YSgKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCwKICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50KSA9IDA7CiMgNTU4ICJYYWxh
bkRPTS9YYWxhblRleHQuaHBwIgogICAgICAgIHZpcnR1YWwgdm9pZAogICAgICAgIHJlcGxhY2VE
YXRhKAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LAogICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQsCiAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiBhcmcpID0gMDsKIyA1ODkgIlhhbGFuRE9NL1hhbGFu
VGV4dC5ocHAiCiAgICB2aXJ0dWFsIFhhbGFuVGV4dCoKICAgICAgICBzcGxpdFRleHQodW5zaWdu
ZWQgaW50IG9mZnNldCkgPSAwOwojIDYwMCAiWGFsYW5ET00vWGFsYW5UZXh0LmhwcCIKICAgICAg
ICB2aXJ0dWFsIGJvb2wKICAgICAgICBpc0lnbm9yYWJsZVdoaXRlc3BhY2UoKSBjb25zdCA9IDA7
Cgpwcm90ZWN0ZWQ6CgogICAgICAgIFhhbGFuVGV4dChjb25zdCBYYWxhblRleHQmIHRoZVNvdXJj
ZSk7CgogICAgICAgIFhhbGFuVGV4dCYKICAgICAgICBvcGVyYXRvcj0oY29uc3QgWGFsYW5UZXh0
JiB0aGVTb3VyY2UpOwoKICAgICAgICBib29sCiAgICAgICAgb3BlcmF0b3I9PShjb25zdCBYYWxh
blRleHQmIHRoZVJIUykgY29uc3Q7Cgpwcml2YXRlOgp9OwojIDY3ICJYYWxhblNvdXJjZVRyZWUv
WGFsYW5Tb3VyY2VUcmVlVGV4dC5ocHAiIDIKCgoKIyAxICJYYWxhbkRPTS9YYWxhbkRPTVN0cmlu
Zy5ocHAiIDEKIyA3MSAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZVRleHQuaHBwIiAy
CgoKCmNsYXNzIFhhbGFuU291cmNlVHJlZUNvbW1lbnQ7CmNsYXNzIFhhbGFuU291cmNlVHJlZUVs
ZW1lbnQ7CmNsYXNzIFhhbGFuU291cmNlVHJlZVByb2Nlc3NpbmdJbnN0cnVjdGlvbjsKCgoKY2xh
c3MgWGFsYW5Tb3VyY2VUcmVlVGV4dCA6IHB1YmxpYyBYYWxhblRleHQKewpwdWJsaWM6CgoKCgog
ICAgICAgIHN0YXRpYyB2b2lkCiAgICAgICAgaW5pdGlhbGl6ZSgpOwoKCgoKICAgICAgICBzdGF0
aWMgdm9pZAogICAgICAgIHRlcm1pbmF0ZSgpOwojIDEwNiAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFu
U291cmNlVHJlZVRleHQuaHBwIgogICAgICAgIFhhbGFuU291cmNlVHJlZVRleHQoCiAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVEYXRhLAogICAgICAgICAg
ICAgICAgICAgICAgICBYYWxhblNvdXJjZVRyZWVFbGVtZW50KiB0aGVQYXJlbnRFbGVtZW50ID0g
MCwKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5Ob2RlKiB0aGVQcmV2aW91c1NpYmxpbmcg
PSAwLAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhbk5vZGUqIHRoZU5leHRTaWJsaW5nID0g
MCwKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRoZUluZGV4ID0gMCk7Cgog
ICAgICAgIHZpcnR1YWwKICAgICAgICB+WGFsYW5Tb3VyY2VUcmVlVGV4dCgpOwoKCgoKCiAgICAg
ICAgdmlydHVhbCBjb25zdCBYYWxhbkRPTVN0cmluZyYKICAgICAgICBnZXROb2RlTmFtZSgpIGNv
bnN0OwoKCgoKICAgICAgICB2aXJ0dWFsIGNvbnN0IFhhbGFuRE9NU3RyaW5nJgogICAgICAgIGdl
dE5vZGVWYWx1ZSgpIGNvbnN0OwoKCgoKICAgICAgICB2aXJ0dWFsIE5vZGVUeXBlCiAgICAgICAg
Z2V0Tm9kZVR5cGUoKSBjb25zdDsKIyAxNDQgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRy
ZWVUZXh0LmhwcCIKICAgICAgICB2aXJ0dWFsIFhhbGFuTm9kZSoKICAgICAgICBnZXRQYXJlbnRO
b2RlKCkgY29uc3Q7CiMgMTYwICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlVGV4dC5o
cHAiCiAgICAgICAgdmlydHVhbCBjb25zdCBYYWxhbk5vZGVMaXN0KgogICAgICAgIGdldENoaWxk
Tm9kZXMoKSBjb25zdDsKCgoKCgoKICAgICAgICB2aXJ0dWFsIFhhbGFuTm9kZSoKICAgICAgICBn
ZXRGaXJzdENoaWxkKCkgY29uc3Q7CgoKCgoKCiAgICAgICAgdmlydHVhbCBYYWxhbk5vZGUqCiAg
ICAgICAgZ2V0TGFzdENoaWxkKCkgY29uc3Q7CgoKCgoKCiAgICAgICAgdmlydHVhbCBYYWxhbk5v
ZGUqCiAgICAgICAgZ2V0UHJldmlvdXNTaWJsaW5nKCkgY29uc3Q7CgoKCgoKCiAgICAgICAgdmly
dHVhbCBYYWxhbk5vZGUqCiAgICAgICAgZ2V0TmV4dFNpYmxpbmcoKSBjb25zdDsKCgoKCgogICAg
ICAgIHZpcnR1YWwgY29uc3QgWGFsYW5OYW1lZE5vZGVNYXAqCiAgICAgICAgZ2V0QXR0cmlidXRl
cygpIGNvbnN0OwojIDIxMSAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZVRleHQuaHBw
IgogICAgICAgIHZpcnR1YWwgWGFsYW5Eb2N1bWVudCoKICAgICAgICBnZXRPd25lckRvY3VtZW50
KCkgY29uc3Q7CiMgMjM5ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlVGV4dC5ocHAi
CiAgICAgICAgdmlydHVhbCBYYWxhblNvdXJjZVRyZWVUZXh0KgoKICAgICAgICBjbG9uZU5vZGUo
Ym9vbCBkZWVwKSBjb25zdDsKIyAyNjMgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVU
ZXh0LmhwcCIKICAgICAgICB2aXJ0dWFsIFhhbGFuTm9kZSoKICAgICAgICBpbnNlcnRCZWZvcmUo
CiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuTm9kZSogbmV3Q2hpbGQsCiAgICAgICAgICAg
ICAgICAgICAgICAgIFhhbGFuTm9kZSogcmVmQ2hpbGQpOwojIDI4MSAiWGFsYW5Tb3VyY2VUcmVl
L1hhbGFuU291cmNlVHJlZVRleHQuaHBwIgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgogICAg
ICAgIHJlcGxhY2VDaGlsZCgKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5Ob2RlKiBuZXdD
aGlsZCwKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5Ob2RlKiBvbGRDaGlsZCk7CiMgMjkz
ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlVGV4dC5ocHAiCiAgICAgICAgdmlydHVh
bCBYYWxhbk5vZGUqCiAgICAgICAgcmVtb3ZlQ2hpbGQoWGFsYW5Ob2RlKiBvbGRDaGlsZCk7CiMg
MzA3ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlVGV4dC5ocHAiCiAgICAgICAgdmly
dHVhbCBYYWxhbk5vZGUqCiAgICAgICAgYXBwZW5kQ2hpbGQoWGFsYW5Ob2RlKiBuZXdDaGlsZCk7
CiMgMzIxICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlVGV4dC5ocHAiCiAgICAgICAg
dmlydHVhbCBib29sCiAgICAgICAgaGFzQ2hpbGROb2RlcygpIGNvbnN0OwojIDM0MyAiWGFsYW5T
b3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZVRleHQuaHBwIgogICAgICAgIHZpcnR1YWwgdm9pZAog
ICAgICAgIHNldE5vZGVWYWx1ZShjb25zdCBYYWxhbkRPTVN0cmluZyYgbm9kZVZhbHVlKTsKIyAz
NjYgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVUZXh0LmhwcCIKICAgICAgICB2aXJ0
dWFsIHZvaWQKICAgICAgICBub3JtYWxpemUoKTsKIyAzODIgIlhhbGFuU291cmNlVHJlZS9YYWxh
blNvdXJjZVRyZWVUZXh0LmhwcCIKICAgICAgICB2aXJ0dWFsIGJvb2wKICAgICAgICBzdXBwb3J0
cygKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIGZlYXR1cmUs
CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB2ZXJzaW9uKSBj
b25zdDsKIyA0MDAgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVUZXh0LmhwcCIKICAg
ICAgICB2aXJ0dWFsIGNvbnN0IFhhbGFuRE9NU3RyaW5nJgogICAgICAgIGdldE5hbWVzcGFjZVVS
SSgpIGNvbnN0OwoKCgoKCiAgICAgICAgdmlydHVhbCBjb25zdCBYYWxhbkRPTVN0cmluZyYKICAg
ICAgICBnZXRQcmVmaXgoKSBjb25zdDsKIyA0MTcgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJj
ZVRyZWVUZXh0LmhwcCIKICAgICAgICB2aXJ0dWFsIGNvbnN0IFhhbGFuRE9NU3RyaW5nJgogICAg
ICAgIGdldExvY2FsTmFtZSgpIGNvbnN0OwojIDQ0OSAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291
cmNlVHJlZVRleHQuaHBwIgogICAgICAgIHZpcnR1YWwgdm9pZAogICAgICAgIHNldFByZWZpeChj
b25zdCBYYWxhbkRPTVN0cmluZyYgcHJlZml4KTsKCiAgICAgICAgdmlydHVhbCBib29sCiAgICAg
ICAgaXNJbmRleGVkKCkgY29uc3Q7CgogICAgICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZwogICAg
ICAgIGdldEluZGV4KCkgY29uc3Q7CiMgNDgwICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VU
cmVlVGV4dC5ocHAiCiAgICAgICAgdmlydHVhbCBjb25zdCBYYWxhbkRPTVN0cmluZyYKICAgICAg
ICBnZXREYXRhKCkgY29uc3Q7CiMgNDkwICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVl
VGV4dC5ocHAiCiAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQKICAgICAgICBnZXRMZW5ndGgo
KSBjb25zdDsKIyA1MDggIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVUZXh0LmhwcCIK
ICAgICAgICB2aXJ0dWFsIFhhbGFuRE9NU3RyaW5nCiAgICAgICAgc3Vic3RyaW5nRGF0YSgKICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCwKICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50KSBjb25zdDsKIyA1MjUgIlhhbGFuU291cmNlVHJl
ZS9YYWxhblNvdXJjZVRyZWVUZXh0LmhwcCIKICAgICAgICB2aXJ0dWFsIHZvaWQKICAgICAgICBh
cHBlbmREYXRhKGNvbnN0IFhhbGFuRE9NU3RyaW5nJiBhcmcpOwojIDUzOCAiWGFsYW5Tb3VyY2VU
cmVlL1hhbGFuU291cmNlVHJlZVRleHQuaHBwIgogICAgICAgIHZpcnR1YWwgdm9pZAogICAgICAg
IGluc2VydERhdGEoCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQs
CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiBhcmcpOwojIDU1
OSAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZVRleHQuaHBwIgogICAgICAgIHZpcnR1
YWwgdm9pZAogICAgICAgIGRlbGV0ZURhdGEoCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3Vu
dCk7CiMgNTgyICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlVGV4dC5ocHAiCiAgICAg
ICAgdmlydHVhbCB2b2lkCiAgICAgICAgcmVwbGFjZURhdGEoCiAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBjb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcm
IGFyZyk7CiMgNjExICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlVGV4dC5ocHAiCiAg
ICB2aXJ0dWFsIFhhbGFuVGV4dCoKICAgICAgICBzcGxpdFRleHQodW5zaWduZWQgaW50IG9mZnNl
dCk7CgoKCiAgICAgICAgdmlydHVhbCBib29sCiAgICAgICAgaXNJZ25vcmFibGVXaGl0ZXNwYWNl
KCkgY29uc3Q7CgoKCgogICAgICAgIFhhbGFuU291cmNlVHJlZUVsZW1lbnQqCiAgICAgICAgZ2V0
UGFyZW50RWxlbWVudCgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIG1f
cGFyZW50RWxlbWVudDsKICAgICAgICB9CgogICAgICAgIHZvaWQKICAgICAgICBzZXRQYXJlbnRF
bGVtZW50KFhhbGFuU291cmNlVHJlZUVsZW1lbnQqIHRoZVBhcmVudEVsZW1lbnQpCiAgICAgICAg
ewogICAgICAgICAgICAgICAgbV9wYXJlbnRFbGVtZW50ID0gdGhlUGFyZW50RWxlbWVudDsKICAg
ICAgICB9CgogICAgICAgIHZvaWQKICAgICAgICBzZXRQcmV2aW91c1NpYmxpbmcoWGFsYW5Tb3Vy
Y2VUcmVlQ29tbWVudCogdGhlUHJldmlvdXNTaWJsaW5nKTsKCiAgICAgICAgdm9pZAogICAgICAg
IHNldFByZXZpb3VzU2libGluZyhYYWxhblNvdXJjZVRyZWVFbGVtZW50KiB0aGVQcmV2aW91c1Np
YmxpbmcpOwoKICAgICAgICB2b2lkCiAgICAgICAgc2V0UHJldmlvdXNTaWJsaW5nKFhhbGFuU291
cmNlVHJlZVByb2Nlc3NpbmdJbnN0cnVjdGlvbiogdGhlUHJldmlvdXNTaWJsaW5nKTsKCiAgICAg
ICAgdm9pZAogICAgICAgIHNldFByZXZpb3VzU2libGluZyhYYWxhblNvdXJjZVRyZWVUZXh0KiB0
aGVQcmV2aW91c1NpYmxpbmcpOwoKICAgICAgICB2b2lkCiAgICAgICAgYXBwZW5kU2libGluZ05v
ZGUoWGFsYW5Tb3VyY2VUcmVlQ29tbWVudCogdGhlU2libGluZyk7CgogICAgICAgIHZvaWQKICAg
ICAgICBhcHBlbmRTaWJsaW5nTm9kZShYYWxhblNvdXJjZVRyZWVFbGVtZW50KiB0aGVTaWJsaW5n
KTsKCiAgICAgICAgdm9pZAogICAgICAgIGFwcGVuZFNpYmxpbmdOb2RlKFhhbGFuU291cmNlVHJl
ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbiogdGhlU2libGluZyk7CgogICAgICAgIHZvaWQKICAgICAg
ICBhcHBlbmRTaWJsaW5nTm9kZShYYWxhblNvdXJjZVRyZWVUZXh0KiB0aGVTaWJsaW5nKTsKCiAg
ICAgICAgdm9pZAogICAgICAgIHNldEluZGV4KHVuc2lnbmVkIGludCB0aGVJbmRleCkKICAgICAg
ICB7CiAgICAgICAgICAgICAgICBtX2luZGV4ID0gdGhlSW5kZXg7CiAgICAgICAgfQoKcHJvdGVj
dGVkOgoKICAgICAgICBYYWxhblNvdXJjZVRyZWVUZXh0KAogICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBYYWxhblNvdXJjZVRyZWVUZXh0JiB0aGVTb3VyY2UsCiAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgKTsKCnByaXZhdGU6CgoKICAgICAgICBYYWxhblNvdXJjZVRyZWVUZXh0Jgog
ICAgICAgIG9wZXJhdG9yPShjb25zdCBYYWxhblNvdXJjZVRyZWVUZXh0JiB0aGVTb3VyY2UpOwoK
ICAgICAgICBib29sCiAgICAgICAgb3BlcmF0b3I9PShjb25zdCBYYWxhblNvdXJjZVRyZWVUZXh0
JiB0aGVSSFMpIGNvbnN0OwoKCgogICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiBtX2RhdGE7
CgogICAgICAgIFhhbGFuU291cmNlVHJlZUVsZW1lbnQqIG1fcGFyZW50RWxlbWVudDsKCiAgICAg
ICAgWGFsYW5Ob2RlKiBtX3ByZXZpb3VzU2libGluZzsKCiAgICAgICAgWGFsYW5Ob2RlKiBtX25l
eHRTaWJsaW5nOwoKICAgICAgICB1bnNpZ25lZCBpbnQgbV9pbmRleDsKCiAgICAgICAgc3RhdGlj
IGNvbnN0IFhhbGFuRE9NU3RyaW5nJiBzX25hbWVTdHJpbmc7Cn07CiMgNzIgIlhhbGFuU291cmNl
VHJlZS9YYWxhblNvdXJjZVRyZWVUZXh0QWxsb2NhdG9yLmhwcCIgMgoKCgpjbGFzcyBYYWxhblNv
dXJjZVRyZWVUZXh0QWxsb2NhdG9yCnsKcHVibGljOgoKICAgICAgICB0eXBlZGVmIFhhbGFuU291
cmNlVHJlZVRleHQgT2JqZWN0VHlwZTsKCgoKCgoKCiAgICAgICAgdHlwZWRlZiBBcmVuYUFsbG9j
YXRvcjxPYmplY3RUeXBlPiBBcmVuYUFsbG9jYXRvclR5cGU7CgoKICAgICAgICB0eXBlZGVmIEFy
ZW5hQWxsb2NhdG9yVHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKCgoKCgoKICAgICAgICBYYWxh
blNvdXJjZVRyZWVUZXh0QWxsb2NhdG9yKHNpemVfdHlwZSB0aGVCbG9ja0NvdW50KTsKCiAgICAg
ICAgflhhbGFuU291cmNlVHJlZVRleHRBbGxvY2F0b3IoKTsKIyAxMTIgIlhhbGFuU291cmNlVHJl
ZS9YYWxhblNvdXJjZVRyZWVUZXh0QWxsb2NhdG9yLmhwcCIKICAgICAgICBPYmplY3RUeXBlKgog
ICAgICAgIGNyZWF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJp
bmcmIHRoZURhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuU291cmNlVHJlZUVsZW1l
bnQqIHRoZVBhcmVudEVsZW1lbnQgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhbk5v
ZGUqIHRoZVByZXZpb3VzU2libGluZyA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFu
Tm9kZSogdGhlTmV4dFNpYmxpbmcgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgdGhlSW5kZXggPSAwKTsKCgoKCiAgICAgICAgdm9pZAogICAgICAgIHJlc2V0KCk7CgoK
CgoKCgogICAgICAgIHNpemVfdHlwZQogICAgICAgIGdldEJsb2NrQ291bnQoKSBjb25zdAogICAg
ICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBtX2FsbG9jYXRvci5nZXRCbG9ja0NvdW50KCk7
CiAgICAgICAgfQoKCgoKCgogICAgICAgIHNpemVfdHlwZQogICAgICAgIGdldEJsb2NrU2l6ZSgp
IGNvbnN0CiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yLmdldEJs
b2NrU2l6ZSgpOwogICAgICAgIH0KCnByaXZhdGU6CgoKICAgICAgICBYYWxhblNvdXJjZVRyZWVU
ZXh0QWxsb2NhdG9yKGNvbnN0IFhhbGFuU291cmNlVHJlZVRleHRBbGxvY2F0b3ImKTsKCiAgICAg
ICAgWGFsYW5Tb3VyY2VUcmVlVGV4dEFsbG9jYXRvciYKICAgICAgICBvcGVyYXRvcj0oY29uc3Qg
WGFsYW5Tb3VyY2VUcmVlVGV4dEFsbG9jYXRvciYpOwoKCiAgICAgICAgQXJlbmFBbGxvY2F0b3JU
eXBlIG1fYWxsb2NhdG9yOwp9OwojIDg4ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVl
RG9jdW1lbnQuaHBwIiAyCiMgMSAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZVRleHRJ
V1NBbGxvY2F0b3IuaHBwIiAxCiMgNjMgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVU
ZXh0SVdTQWxsb2NhdG9yLmhwcCIKIyAxICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVl
RGVmaW5pdGlvbnMuaHBwIiAxCiMgNjQgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVU
ZXh0SVdTQWxsb2NhdG9yLmhwcCIgMgoKCgojIDEgIlBsYXRmb3JtU3VwcG9ydC9BcmVuYUFsbG9j
YXRvci5ocHAiIDEKIyA2OCAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZVRleHRJV1NB
bGxvY2F0b3IuaHBwIiAyCgoKCiMgMSAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJlZVRl
eHRJV1MuaHBwIiAxCiMgNjIgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVUZXh0SVdT
LmhwcCIKIyAxICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRGVmaW5pdGlvbnMuaHBw
IiAxCiMgNjMgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVUZXh0SVdTLmhwcCIgMgoK
CgojIDEgIlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVUZXh0LmhwcCIgMQojIDY3ICJY
YWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlVGV4dElXUy5ocHAiIDIKCgoKY2xhc3MgWGFs
YW5Tb3VyY2VUcmVlVGV4dElXUyA6IHB1YmxpYyBYYWxhblNvdXJjZVRyZWVUZXh0CnsKcHVibGlj
OgojIDgzICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlVGV4dElXUy5ocHAiCiAgICAg
ICAgWGFsYW5Tb3VyY2VUcmVlVGV4dElXUygKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
WGFsYW5ET01TdHJpbmcmIHRoZURhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuU291
cmNlVHJlZUVsZW1lbnQqIHRoZVBhcmVudEVsZW1lbnQgPSAwLAogICAgICAgICAgICAgICAgICAg
ICAgICBYYWxhbk5vZGUqIHRoZVByZXZpb3VzU2libGluZyA9IDAsCiAgICAgICAgICAgICAgICAg
ICAgICAgIFhhbGFuTm9kZSogdGhlTmV4dFNpYmxpbmcgPSAwLAogICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgdGhlSW5kZXggPSAwKTsKCiAgICAgICAgdmlydHVhbAogICAgICAg
IH5YYWxhblNvdXJjZVRyZWVUZXh0SVdTKCk7CgoKICAgICAgICB2aXJ0dWFsIGJvb2wKICAgICAg
ICBpc0lnbm9yYWJsZVdoaXRlc3BhY2UoKSBjb25zdDsKCnByb3RlY3RlZDoKCiAgICAgICAgWGFs
YW5Tb3VyY2VUcmVlVGV4dElXUygKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5T
b3VyY2VUcmVlVGV4dElXUyYgdGhlU291cmNlLAogICAgICAgICAgICAgICAgICAgICAgICBib29s
ICk7Cgpwcml2YXRlOgoKCiAgICAgICAgWGFsYW5Tb3VyY2VUcmVlVGV4dElXUyYKICAgICAgICBv
cGVyYXRvcj0oY29uc3QgWGFsYW5Tb3VyY2VUcmVlVGV4dElXUyYgdGhlU291cmNlKTsKCiAgICAg
ICAgYm9vbAogICAgICAgIG9wZXJhdG9yPT0oY29uc3QgWGFsYW5Tb3VyY2VUcmVlVGV4dElXUyYg
dGhlUkhTKSBjb25zdDsKCgoKfTsKIyA3MiAiWGFsYW5Tb3VyY2VUcmVlL1hhbGFuU291cmNlVHJl
ZVRleHRJV1NBbGxvY2F0b3IuaHBwIiAyCgoKCmNsYXNzIFhhbGFuU291cmNlVHJlZVRleHRJV1NB
bGxvY2F0b3IKewpwdWJsaWM6CgogICAgICAgIHR5cGVkZWYgWGFsYW5Tb3VyY2VUcmVlVGV4dElX
UyBPYmplY3RUeXBlOwoKCgoKCgoKICAgICAgICB0eXBlZGVmIEFyZW5hQWxsb2NhdG9yPE9iamVj
dFR5cGU+IEFyZW5hQWxsb2NhdG9yVHlwZTsKCgogICAgICAgIHR5cGVkZWYgQXJlbmFBbGxvY2F0
b3JUeXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwoKCgoKCgogICAgICAgIFhhbGFuU291cmNlVHJl
ZVRleHRJV1NBbGxvY2F0b3Ioc2l6ZV90eXBlIHRoZUJsb2NrQ291bnQpOwoKICAgICAgICB+WGFs
YW5Tb3VyY2VUcmVlVGV4dElXU0FsbG9jYXRvcigpOwojIDExMiAiWGFsYW5Tb3VyY2VUcmVlL1hh
bGFuU291cmNlVHJlZVRleHRJV1NBbGxvY2F0b3IuaHBwIgogICAgICAgIE9iamVjdFR5cGUqCiAg
ICAgICAgY3JlYXRlKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmlu
ZyYgdGhlRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5Tb3VyY2VUcmVlRWxlbWVu
dCogdGhlUGFyZW50RWxlbWVudCA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuTm9k
ZSogdGhlUHJldmlvdXNTaWJsaW5nID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5O
b2RlKiB0aGVOZXh0U2libGluZyA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCB0aGVJbmRleCA9IDApOwoKCgoKICAgICAgICB2b2lkCiAgICAgICAgcmVzZXQoKTsKCgoK
CgoKCiAgICAgICAgc2l6ZV90eXBlCiAgICAgICAgZ2V0QmxvY2tDb3VudCgpIGNvbnN0CiAgICAg
ICAgewogICAgICAgICAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yLmdldEJsb2NrQ291bnQoKTsK
ICAgICAgICB9CgoKCgoKCiAgICAgICAgc2l6ZV90eXBlCiAgICAgICAgZ2V0QmxvY2tTaXplKCkg
Y29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gbV9hbGxvY2F0b3IuZ2V0Qmxv
Y2tTaXplKCk7CiAgICAgICAgfQoKcHJpdmF0ZToKCgogICAgICAgIFhhbGFuU291cmNlVHJlZVRl
eHRJV1NBbGxvY2F0b3IoY29uc3QgWGFsYW5Tb3VyY2VUcmVlVGV4dElXU0FsbG9jYXRvciYpOwoK
ICAgICAgICBYYWxhblNvdXJjZVRyZWVUZXh0SVdTQWxsb2NhdG9yJgogICAgICAgIG9wZXJhdG9y
PShjb25zdCBYYWxhblNvdXJjZVRyZWVUZXh0SVdTQWxsb2NhdG9yJik7CgoKICAgICAgICBBcmVu
YUFsbG9jYXRvclR5cGUgbV9hbGxvY2F0b3I7Cn07CiMgODkgIlhhbGFuU291cmNlVHJlZS9YYWxh
blNvdXJjZVRyZWVEb2N1bWVudC5ocHAiIDIKCgoKY2xhc3MgQXR0cmlidXRlTGlzdDsKY2xhc3Mg
QXR0cmlidXRlczsKCgoKY2xhc3MgWGFsYW5Tb3VyY2VUcmVlRG9jdW1lbnQgOiBwdWJsaWMgWGFs
YW5Eb2N1bWVudAp7CnB1YmxpYzoKCiAgICAgICAgdHlwZWRlZiBYYWxhblNvdXJjZVRyZWVFbGVt
ZW50OjpBdHRyaWJ1dGVzQ291bnRUeXBlIEF0dHJpYnV0ZXNDb3VudFR5cGU7CiMgMTE2ICJYYWxh
blNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRG9jdW1lbnQuaHBwIgogICAgICAgIHR5cGVkZWYg
c3RkOjptYXA8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01D
aGFyKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYYWxhblNvdXJjZVRyZWVFbGVt
ZW50KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXNzX251bGxfdGVybWluYXRl
ZF9hcnJheXM8WGFsYW5ET01DaGFyPiA+IEVsZW1lbnRCeUlETWFwVHlwZTsKCiAgICAgICAgdHlw
ZWRlZiBzdGQ6Om1hcDwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYYWxhbkRPTVN0
cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYYWxhbkRPTVN0cmluZz4gVW5w
YXJzZWRFbnRpdHlVUklNYXBUeXBlOwoKICAgICAgICB0eXBlZGVmIHN0ZDo6ZGVxdWU8WGFsYW5E
T01TdHJpbmc+IFN0cmluZ0NvbGxlY3Rpb25UeXBlOwoKCgoKCiAgICAgICAgc3RhdGljIHZvaWQK
ICAgICAgICBpbml0aWFsaXplKCk7CgoKCgogICAgICAgIHN0YXRpYyB2b2lkCiAgICAgICAgdGVy
bWluYXRlKCk7CiMgMTQ4ICJYYWxhblNvdXJjZVRyZWUvWGFsYW5Tb3VyY2VUcmVlRG9jdW1lbnQu
aHBwIgogICAgICAgIFhhbGFuU291cmNlVHJlZURvY3VtZW50KGJvb2wgZlBvb2xBbGxUZXh0ID0g
dHJ1ZSk7CgogICAgICAgIHZpcnR1YWwKICAgICAgICB+WGFsYW5Tb3VyY2VUcmVlRG9jdW1lbnQo
KTsKCgoKICAgICAgICB2aXJ0dWFsIGNvbnN0IFhhbGFuRE9NU3RyaW5nJgogICAgICAgIGdldE5v
ZGVOYW1lKCkgY29uc3Q7CgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5ET01TdHJpbmcmCiAg
ICAgICAgZ2V0Tm9kZVZhbHVlKCkgY29uc3Q7CgogICAgICAgIHZpcnR1YWwgTm9kZVR5cGUKICAg
ICAgICBnZXROb2RlVHlwZSgpIGNvbnN0OwoKICAgICAgICB2aXJ0dWFsIFhhbGFuTm9kZSoKICAg
ICAgICBnZXRQYXJlbnROb2RlKCkgY29uc3Q7CgogICAgICAgIHZpcnR1YWwgY29uc3QgWGFsYW5O
b2RlTGlzdCoKICAgICAgICBnZXRDaGlsZE5vZGVzKCkgY29uc3Q7CgogICAgICAgIHZpcnR1YWwg
WGFsYW5Ob2RlKgogICAgICAgIGdldEZpcnN0Q2hpbGQoKSBjb25zdDsKCiAgICAgICAgdmlydHVh
bCBYYWxhbk5vZGUqCiAgICAgICAgZ2V0TGFzdENoaWxkKCkgY29uc3Q7CgogICAgICAgIHZpcnR1
YWwgWGFsYW5Ob2RlKgogICAgICAgIGdldFByZXZpb3VzU2libGluZygpIGNvbnN0OwoKICAgICAg
ICB2aXJ0dWFsIFhhbGFuTm9kZSoKICAgICAgICBnZXROZXh0U2libGluZygpIGNvbnN0OwoKICAg
ICAgICB2aXJ0dWFsIGNvbnN0IFhhbGFuTmFtZWROb2RlTWFwKgogICAgICAgIGdldEF0dHJpYnV0
ZXMoKSBjb25zdDsKCiAgICAgICAgdmlydHVhbCBYYWxhbkRvY3VtZW50KgogICAgICAgIGdldE93
bmVyRG9jdW1lbnQoKSBjb25zdDsKCgoKCiAgICAgICAgdmlydHVhbCBYYWxhblNvdXJjZVRyZWVE
b2N1bWVudCoKCiAgICAgICAgY2xvbmVOb2RlKGJvb2wgZGVlcCkgY29uc3Q7CgogICAgICAgIHZp
cnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIGluc2VydEJlZm9yZSgKICAgICAgICAgICAgICAgICAg
ICAgICAgWGFsYW5Ob2RlKiBuZXdDaGlsZCwKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5O
b2RlKiByZWZDaGlsZCk7CgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIHJlcGxh
Y2VDaGlsZCgKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5Ob2RlKiBuZXdDaGlsZCwKICAg
ICAgICAgICAgICAgICAgICAgICAgWGFsYW5Ob2RlKiBvbGRDaGlsZCk7CgogICAgICAgIHZpcnR1
YWwgWGFsYW5Ob2RlKgogICAgICAgIHJlbW92ZUNoaWxkKFhhbGFuTm9kZSogb2xkQ2hpbGQpOwoK
ICAgICAgICB2aXJ0dWFsIFhhbGFuTm9kZSoKICAgICAgICBhcHBlbmRDaGlsZChYYWxhbk5vZGUq
IG5ld0NoaWxkKTsKCiAgICAgICAgdmlydHVhbCBib29sCiAgICAgICAgaGFzQ2hpbGROb2Rlcygp
IGNvbnN0OwoKICAgICAgICB2aXJ0dWFsIHZvaWQKICAgICAgICBzZXROb2RlVmFsdWUoY29uc3Qg
WGFsYW5ET01TdHJpbmcmIG5vZGVWYWx1ZSk7CgogICAgICAgIHZpcnR1YWwgdm9pZAogICAgICAg
IG5vcm1hbGl6ZSgpOwoKICAgICAgICB2aXJ0dWFsIGJvb2wKICAgICAgICBzdXBwb3J0cygKICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIGZlYXR1cmUsCiAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB2ZXJzaW9uKSBjb25zdDsK
CiAgICAgICAgdmlydHVhbCBjb25zdCBYYWxhbkRPTVN0cmluZyYKICAgICAgICBnZXROYW1lc3Bh
Y2VVUkkoKSBjb25zdDsKCiAgICAgICAgdmlydHVhbCBjb25zdCBYYWxhbkRPTVN0cmluZyYKICAg
ICAgICBnZXRQcmVmaXgoKSBjb25zdDsKCiAgICAgICAgdmlydHVhbCBjb25zdCBYYWxhbkRPTVN0
cmluZyYKICAgICAgICBnZXRMb2NhbE5hbWUoKSBjb25zdDsKCiAgICAgICAgdmlydHVhbCB2b2lk
CiAgICAgICAgc2V0UHJlZml4KGNvbnN0IFhhbGFuRE9NU3RyaW5nJiBwcmVmaXgpOwoKICAgICAg
ICB2aXJ0dWFsIGJvb2wKICAgICAgICBpc0luZGV4ZWQoKSBjb25zdDsKCiAgICAgICAgdmlydHVh
bCB1bnNpZ25lZCBsb25nCiAgICAgICAgZ2V0SW5kZXgoKSBjb25zdDsKCiAgICAgICAgdmlydHVh
bCBYYWxhbkVsZW1lbnQqCiAgICAgICAgY3JlYXRlRWxlbWVudChjb25zdCBYYWxhbkRPTVN0cmlu
ZyYgdGFnTmFtZSk7CgogICAgICAgIHZpcnR1YWwgWGFsYW5Eb2N1bWVudEZyYWdtZW50KgogICAg
ICAgIGNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKCiAgICAgICAgdmlydHVhbCBYYWxhblRleHQq
CiAgICAgICAgY3JlYXRlVGV4dE5vZGUoY29uc3QgWGFsYW5ET01TdHJpbmcmIGRhdGEpOwoKICAg
ICAgICB2aXJ0dWFsIFhhbGFuQ29tbWVudCoKICAgICAgICBjcmVhdGVDb21tZW50KGNvbnN0IFhh
bGFuRE9NU3RyaW5nJiBkYXRhKTsKCiAgICAgICAgdmlydHVhbCBYYWxhbkNEQVRBU2VjdGlvbioK
ICAgICAgICBjcmVhdGVDREFUQVNlY3Rpb24oY29uc3QgWGFsYW5ET01TdHJpbmcmIGRhdGEpOwoK
ICAgICAgICB2aXJ0dWFsIFhhbGFuUHJvY2Vzc2luZ0luc3RydWN0aW9uKgogICAgICAgIGNyZWF0
ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFs
YW5ET01TdHJpbmcmIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5E
T01TdHJpbmcmIGRhdGEpOwoKICAgICAgICB2aXJ0dWFsIFhhbGFuQXR0cioKICAgICAgICBjcmVh
dGVBdHRyaWJ1dGUoY29uc3QgWGFsYW5ET01TdHJpbmcmIG5hbWUpOwoKICAgICAgICB2aXJ0dWFs
IFhhbGFuRW50aXR5UmVmZXJlbmNlKgogICAgICAgIGNyZWF0ZUVudGl0eVJlZmVyZW5jZShjb25z
dCBYYWxhbkRPTVN0cmluZyYgbmFtZSk7CgogICAgICAgIHZpcnR1YWwgWGFsYW5Eb2N1bWVudFR5
cGUqCiAgICAgICAgZ2V0RG9jdHlwZSgpIGNvbnN0OwoKICAgICAgICB2aXJ0dWFsIFhhbGFuRE9N
SW1wbGVtZW50YXRpb24qCiAgICAgICAgZ2V0SW1wbGVtZW50YXRpb24oKSBjb25zdDsKCiAgICAg
ICAgdmlydHVhbCBYYWxhbkVsZW1lbnQqCiAgICAgICAgZ2V0RG9jdW1lbnRFbGVtZW50KCkgY29u
c3Q7CgogICAgICAgIHZpcnR1YWwgWGFsYW5Ob2RlTGlzdCoKICAgICAgICBnZXRFbGVtZW50c0J5
VGFnTmFtZShjb25zdCBYYWxhbkRPTVN0cmluZyYgdGFnbmFtZSkgY29uc3Q7CgogICAgICAgIHZp
cnR1YWwgWGFsYW5Ob2RlKgogICAgICAgIGltcG9ydE5vZGUoCiAgICAgICAgICAgICAgICAgICAg
ICAgIFhhbGFuTm9kZSogaW1wb3J0ZWROb2RlLAogICAgICAgICAgICAgICAgICAgICAgICBib29s
IGRlZXApOwoKICAgICAgICB2aXJ0dWFsIFhhbGFuRWxlbWVudCoKICAgICAgICBjcmVhdGVFbGVt
ZW50TlMoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiBuYW1l
c3BhY2VVUkksCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiBx
dWFsaWZpZWROYW1lKTsKCiAgICAgICAgdmlydHVhbCBYYWxhbkF0dHIqCiAgICAgICAgY3JlYXRl
QXR0cmlidXRlTlMoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5n
JiBuYW1lc3BhY2VVUkksCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3Ry
aW5nJiBxdWFsaWZpZWROYW1lKTsKCiAgICAgICAgdmlydHVhbCBYYWxhbk5vZGVMaXN0KgogICAg
ICAgIGdldEVsZW1lbnRzQnlUYWdOYW1lTlMoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFhhbGFuRE9NU3RyaW5nJiBuYW1lc3BhY2VVUkksCiAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFhhbGFuRE9NU3RyaW5nJiBsb2NhbE5hbWUpIGNvbnN0OwoKICAgICAgICB2aXJ0dWFsIFhh
bGFuRWxlbWVudCoKICAgICAgICBnZXRFbGVtZW50QnlJZChjb25zdCBYYWxhbkRPTVN0cmluZyYg
ZWxlbWVudElkKSBjb25zdDsKCgoKCiAgICAgICAgWGFsYW5Tb3VyY2VUcmVlRWxlbWVudCoKICAg
ICAgICBjcmVhdGVFbGVtZW50Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFs
YW5ET01DaGFyKiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBdHRyaWJ1dGVM
aXN0JiBhdHRycywKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5Tb3VyY2VUcmVlRWxlbWVu
dCogdGhlUGFyZW50RWxlbWVudCA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuTm9k
ZSogdGhlUHJldmlvdXNTaWJsaW5nID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5O
b2RlKiB0aGVOZXh0U2libGluZyA9IDApOwoKICAgICAgICBYYWxhblNvdXJjZVRyZWVFbGVtZW50
KgogICAgICAgIGNyZWF0ZUVsZW1lbnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBYYWxhbkRPTUNoYXIqIHVyaSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5E
T01DaGFyKiBsb2NhbG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9N
Q2hhciogcW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0dHJpYnV0ZXMmIGF0
dHJzLAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhblNvdXJjZVRyZWVFbGVtZW50KiB0aGVQ
YXJlbnRFbGVtZW50ID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5Ob2RlKiB0aGVQ
cmV2aW91c1NpYmxpbmcgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhbk5vZGUqIHRo
ZU5leHRTaWJsaW5nID0gMCk7CgogICAgICAgIFhhbGFuU291cmNlVHJlZUVsZW1lbnQqCiAgICAg
ICAgY3JlYXRlRWxlbWVudE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFu
RE9NQ2hhciogbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXR0cmlidXRlcyYg
YXR0cnMsCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuU291cmNlVHJlZUVsZW1lbnQqIHRo
ZVBhcmVudEVsZW1lbnQgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhbk5vZGUqIHRo
ZVByZXZpb3VzU2libGluZyA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuTm9kZSog
dGhlTmV4dFNpYmxpbmcgPSAwKTsKCiAgICAgICAgWGFsYW5Tb3VyY2VUcmVlQ29tbWVudCoKICAg
ICAgICBjcmVhdGVDb21tZW50Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFs
YW5ET01DaGFyKiBkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVu
Z3RoLAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhblNvdXJjZVRyZWVFbGVtZW50KiB0aGVQ
YXJlbnRFbGVtZW50ID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5Ob2RlKiB0aGVQ
cmV2aW91c1NpYmxpbmcgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhbk5vZGUqIHRo
ZU5leHRTaWJsaW5nID0gMCk7CgogICAgICAgIFhhbGFuU291cmNlVHJlZVByb2Nlc3NpbmdJbnN0
cnVjdGlvbioKICAgICAgICBjcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25Ob2RlKAogICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRhcmdldCwKICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiBkYXRhLAogICAgICAgICAgICAgICAgICAg
ICAgICBYYWxhblNvdXJjZVRyZWVFbGVtZW50KiB0aGVQYXJlbnRFbGVtZW50ID0gMCwKICAgICAg
ICAgICAgICAgICAgICAgICAgWGFsYW5Ob2RlKiB0aGVQcmV2aW91c1NpYmxpbmcgPSAwLAogICAg
ICAgICAgICAgICAgICAgICAgICBYYWxhbk5vZGUqIHRoZU5leHRTaWJsaW5nID0gMCk7CgogICAg
ICAgIFhhbGFuU291cmNlVHJlZVRleHQqCiAgICAgICAgY3JlYXRlVGV4dE5vZGUoCiAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogY2hhcnMsCiAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgIFhh
bGFuU291cmNlVHJlZUVsZW1lbnQqIHRoZVBhcmVudEVsZW1lbnQgPSAwLAogICAgICAgICAgICAg
ICAgICAgICAgICBYYWxhbk5vZGUqIHRoZVByZXZpb3VzU2libGluZyA9IDAsCiAgICAgICAgICAg
ICAgICAgICAgICAgIFhhbGFuTm9kZSogdGhlTmV4dFNpYmxpbmcgPSAwKTsKCiAgICAgICAgWGFs
YW5Tb3VyY2VUcmVlVGV4dCoKICAgICAgICBjcmVhdGVUZXh0SVdTTm9kZSgKICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiBjaGFycywKICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5T
b3VyY2VUcmVlRWxlbWVudCogdGhlUGFyZW50RWxlbWVudCA9IDAsCiAgICAgICAgICAgICAgICAg
ICAgICAgIFhhbGFuTm9kZSogdGhlUHJldmlvdXNTaWJsaW5nID0gMCwKICAgICAgICAgICAgICAg
ICAgICAgICAgWGFsYW5Ob2RlKiB0aGVOZXh0U2libGluZyA9IDApOwoKICAgICAgICB2b2lkCiAg
ICAgICAgdW5wYXJzZWRFbnRpdHlEZWNsYXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgWGFsYW5ET01DaGFyKiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBY
YWxhbkRPTUNoYXIqIHB1YmxpY0lkLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxh
bkRPTUNoYXIqIHN5c3RlbUlkLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRP
TUNoYXIqIG5vdGF0aW9uTmFtZSk7CgogICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJgogICAg
ICAgIGdldFVucGFyc2VkRW50aXR5VVJJKGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVOYW1lKSBj
b25zdDsKCgogICAgICAgIHZvaWQKICAgICAgICBhcHBlbmRDaGlsZE5vZGUoWGFsYW5Tb3VyY2VU
cmVlQ29tbWVudCogdGhlQ2hpbGQpOwoKICAgICAgICB2b2lkCiAgICAgICAgYXBwZW5kQ2hpbGRO
b2RlKFhhbGFuU291cmNlVHJlZUVsZW1lbnQqIHRoZUNoaWxkKTsKCiAgICAgICAgdm9pZAogICAg
ICAgIGFwcGVuZENoaWxkTm9kZShYYWxhblNvdXJjZVRyZWVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24q
IHRoZUNoaWxkKTsKCnByaXZhdGU6CgoKICAgICAgICBYYWxhblNvdXJjZVRyZWVBdHRyKgogICAg
ICAgIGNyZWF0ZUF0dHJpYnV0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5E
T01DaGFyKiB0aGVOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNo
YXIqIHRoZVZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhblNvdXJjZVRyZWVFbGVt
ZW50KiB0aGVPd25lckVsZW1lbnQpOwoKICAgICAgICBYYWxhblNvdXJjZVRyZWVFbGVtZW50Kgog
ICAgICAgIGNyZWF0ZUVsZW1lbnQoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFu
RE9NQ2hhciogdGhlVGFnTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5Tb3VyY2VU
cmVlQXR0cioqIHRoZUF0dHJpYnV0ZVZlY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgQXR0
cmlidXRlc0NvdW50VHlwZSB0aGVBdHRyaWJ1dGVDb3VudCwKICAgICAgICAgICAgICAgICAgICAg
ICAgWGFsYW5Tb3VyY2VUcmVlRWxlbWVudCogdGhlUGFyZW50RWxlbWVudCwKICAgICAgICAgICAg
ICAgICAgICAgICAgWGFsYW5Ob2RlKiB0aGVQcmV2aW91c1NpYmxpbmcsCiAgICAgICAgICAgICAg
ICAgICAgICAgIFhhbGFuTm9kZSogdGhlTmV4dFNpYmxpbmcpOwoKICAgICAgICB2b2lkCiAgICAg
ICAgY3JlYXRlQXR0cmlidXRlcygKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXR0cmli
dXRlcyYgdGhlQXR0cmlidXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5Tb3VyY2VU
cmVlQXR0cioqIHRoZUF0dHJpYnV0ZVZlY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgQXR0
cmlidXRlc0NvdW50VHlwZSB0aGVBdHRyaWJ1dGVDb3VudCwKICAgICAgICAgICAgICAgICAgICAg
ICAgWGFsYW5Tb3VyY2VUcmVlRWxlbWVudCogdGhlT3duZXJFbGVtZW50KTsKCiAgICAgICAgY29u
c3QgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgZ2V0VGV4dE5vZGVTdHJpbmcoCiAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogY2hhcnMsCiAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBsZW5ndGgpOwoKCgogICAgICAgIFhhbGFuU291cmNlVHJlZURv
Y3VtZW50KGNvbnN0IFhhbGFuU291cmNlVHJlZURvY3VtZW50JiB0aGVTb3VyY2UpOwoKICAgICAg
ICBYYWxhblNvdXJjZVRyZWVEb2N1bWVudCYKICAgICAgICBvcGVyYXRvcj0oY29uc3QgWGFsYW5T
b3VyY2VUcmVlRG9jdW1lbnQmIHRoZVJIUyk7CgogICAgICAgIGJvb2wKICAgICAgICBvcGVyYXRv
cj09KGNvbnN0IFhhbGFuU291cmNlVHJlZURvY3VtZW50JiB0aGVSSFMpIGNvbnN0OwoKCgogICAg
ICAgIFhhbGFuTm9kZSogbV9maXJzdENoaWxkOwoKICAgICAgICBYYWxhblNvdXJjZVRyZWVFbGVt
ZW50KiBtX2RvY3VtZW50RWxlbWVudDsKCiAgICAgICAgWGFsYW5Tb3VyY2VUcmVlQXR0cmlidXRl
QWxsb2NhdG9yIG1fYXR0cmlidXRlQWxsb2NhdG9yOwoKICAgICAgICBYYWxhblNvdXJjZVRyZWVB
dHRyaWJ1dGVOU0FsbG9jYXRvciBtX2F0dHJpYnV0ZU5TQWxsb2NhdG9yOwoKICAgICAgICBYYWxh
blNvdXJjZVRyZWVDb21tZW50QWxsb2NhdG9yIG1fY29tbWVudEFsbG9jYXRvcjsKCiAgICAgICAg
WGFsYW5Tb3VyY2VUcmVlRWxlbWVudEFsbG9jYXRvciBtX2VsZW1lbnRBbGxvY2F0b3I7CgogICAg
ICAgIFhhbGFuU291cmNlVHJlZUVsZW1lbnROU0FsbG9jYXRvciBtX2VsZW1lbnROU0FsbG9jYXRv
cjsKCiAgICAgICAgWGFsYW5Tb3VyY2VUcmVlUHJvY2Vzc2luZ0luc3RydWN0aW9uQWxsb2NhdG9y
IG1fcGlBbGxvY2F0b3I7CgogICAgICAgIFhhbGFuU291cmNlVHJlZVRleHRBbGxvY2F0b3IgbV90
ZXh0QWxsb2NhdG9yOwoKICAgICAgICBYYWxhblNvdXJjZVRyZWVUZXh0SVdTQWxsb2NhdG9yIG1f
dGV4dElXU0FsbG9jYXRvcjsKCiAgICAgICAgWGFsYW5ET01TdHJpbmdQb29sIG1fc3RyaW5nUG9v
bDsKCiAgICAgICAgWGFsYW5Tb3VyY2VUcmVlQXR0cmlidXRlc1ZlY3RvciBtX2F0dHJpYnV0ZXNW
ZWN0b3I7CgogICAgICAgIHVuc2lnbmVkIGludCBtX25leHRJbmRleFZhbHVlOwoKICAgICAgICBj
b25zdCBib29sIG1fcG9vbEFsbFRleHQ7CgogICAgICAgIEVsZW1lbnRCeUlETWFwVHlwZSBtX2Vs
ZW1lbnRzQnlJRDsKCiAgICAgICAgVW5wYXJzZWRFbnRpdHlVUklNYXBUeXBlIG1fdW5wYXJzZWRF
bnRpdHlVUklzOwoKICAgICAgICBTdHJpbmdDb2xsZWN0aW9uVHlwZSBtX25vblBvb2xlZFN0cmlu
Z3M7CgogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTVN0cmluZyYgc19uYW1lU3RyaW5nOwp9
OwojIDg1ICJYYWxhblNvdXJjZVRyZWUvRm9ybWF0dGVyVG9Tb3VyY2VUcmVlLmNwcCIgMgojIDEg
IlhhbGFuU291cmNlVHJlZS9YYWxhblNvdXJjZVRyZWVFbGVtZW50LmhwcCIgMQojIDg2ICJYYWxh
blNvdXJjZVRyZWUvRm9ybWF0dGVyVG9Tb3VyY2VUcmVlLmNwcCIgMgojIDEgIlhhbGFuU291cmNl
VHJlZS9YYWxhblNvdXJjZVRyZWVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaHBwIiAxCiMgODcgIlhh
bGFuU291cmNlVHJlZS9Gb3JtYXR0ZXJUb1NvdXJjZVRyZWUuY3BwIiAyCiMgMSAiWGFsYW5Tb3Vy
Y2VUcmVlL1hhbGFuU291cmNlVHJlZVRleHQuaHBwIiAxCiMgODggIlhhbGFuU291cmNlVHJlZS9G
b3JtYXR0ZXJUb1NvdXJjZVRyZWUuY3BwIiAyCgoKCkZvcm1hdHRlclRvU291cmNlVHJlZTo6Rm9y
bWF0dGVyVG9Tb3VyY2VUcmVlKFhhbGFuU291cmNlVHJlZURvY3VtZW50KiB0aGVEb2N1bWVudCkg
OgogICAgICAgIEZvcm1hdHRlckxpc3RlbmVyKE9VVFBVVF9NRVRIT0RfRE9NKSwKICAgICAgICBt
X2RvY3VtZW50KHRoZURvY3VtZW50KSwKICAgICAgICBtX2RvY3VtZW50RnJhZ21lbnQoMCksCiAg
ICAgICAgbV9jdXJyZW50RWxlbWVudCgwKSwKICAgICAgICBtX2VsZW1lbnRTdGFjaygpLAogICAg
ICAgIG1fdGV4dEJ1ZmZlcigpCnsKICAgICAgICAoKHZvaWQpICgobV9kb2N1bWVudCAhPSAwKSA/
IDAgOiAoX19hc3NlcnRfZmFpbCAoIm1fZG9jdW1lbnQgIT0gMCIsICJYYWxhblNvdXJjZVRyZWUv
Rm9ybWF0dGVyVG9Tb3VyY2VUcmVlLmNwcCIsIDk5LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkp
KTsKfQoKCgpGb3JtYXR0ZXJUb1NvdXJjZVRyZWU6OkZvcm1hdHRlclRvU291cmNlVHJlZSgKICAg
ICAgICAgICAgICAgICAgICAgICAgWGFsYW5Tb3VyY2VUcmVlRG9jdW1lbnQqIHRoZURvY3VtZW50
LAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhbkRvY3VtZW50RnJhZ21lbnQqIHRoZURvY3Vt
ZW50RnJhZ21lbnQpIDoKICAgICAgICBGb3JtYXR0ZXJMaXN0ZW5lcihPVVRQVVRfTUVUSE9EX0RP
TSksCiAgICAgICAgbV9kb2N1bWVudCh0aGVEb2N1bWVudCksCiAgICAgICAgbV9kb2N1bWVudEZy
YWdtZW50KHRoZURvY3VtZW50RnJhZ21lbnQpLAogICAgICAgIG1fY3VycmVudEVsZW1lbnQoMCks
CiAgICAgICAgbV9lbGVtZW50U3RhY2soKSwKICAgICAgICBtX3RleHRCdWZmZXIoKQp7CiAgICAg
ICAgKCh2b2lkKSAoKG1fZG9jdW1lbnQgIT0gMCkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJtX2Rv
Y3VtZW50ICE9IDAiLCAiWGFsYW5Tb3VyY2VUcmVlL0Zvcm1hdHRlclRvU291cmNlVHJlZS5jcHAi
LCAxMTQsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgICAgICgodm9pZCkgKChtX2Rv
Y3VtZW50RnJhZ21lbnQgIT0gMCkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJtX2RvY3VtZW50RnJh
Z21lbnQgIT0gMCIsICJYYWxhblNvdXJjZVRyZWUvRm9ybWF0dGVyVG9Tb3VyY2VUcmVlLmNwcCIs
IDExNSwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7Cn0KCgoKRm9ybWF0dGVyVG9Tb3VyY2VU
cmVlOjp+Rm9ybWF0dGVyVG9Tb3VyY2VUcmVlKCkKewp9CgoKCnZvaWQKRm9ybWF0dGVyVG9Tb3Vy
Y2VUcmVlOjpzZXREb2N1bWVudExvY2F0b3IoY29uc3QgTG9jYXRvciogY29uc3QgKQp7Cn0KCgoK
dm9pZApGb3JtYXR0ZXJUb1NvdXJjZVRyZWU6OnN0YXJ0RG9jdW1lbnQoKQp7Cn0KCgoKdm9pZApG
b3JtYXR0ZXJUb1NvdXJjZVRyZWU6OmVuZERvY3VtZW50KCkKewogICAgICAgICgodm9pZCkgKCht
X2VsZW1lbnRTdGFjay5lbXB0eSgpID09IHRydWUpID8gMCA6IChfX2Fzc2VydF9mYWlsICgibV9l
bGVtZW50U3RhY2suZW1wdHkoKSA9PSB0cnVlIiwgIlhhbGFuU291cmNlVHJlZS9Gb3JtYXR0ZXJU
b1NvdXJjZVRyZWUuY3BwIiwgMTQzLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKCiAgICAg
ICAgKCh2b2lkKSAoKGlzRW1wdHkobV90ZXh0QnVmZmVyKSA9PSB0cnVlKSA/IDAgOiAoX19hc3Nl
cnRfZmFpbCAoImlzRW1wdHkobV90ZXh0QnVmZmVyKSA9PSB0cnVlIiwgIlhhbGFuU291cmNlVHJl
ZS9Gb3JtYXR0ZXJUb1NvdXJjZVRyZWUuY3BwIiwgMTQ1LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwg
MCkpKTsKfQoKCgp2b2lkCkZvcm1hdHRlclRvU291cmNlVHJlZTo6c3RhcnRFbGVtZW50KAogICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxDaCogY29uc3QgbmFtZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgQXR0cmlidXRlTGlzdCYgYXR0cnMpCnsKICAgICAgICBYYWxhblNvdXJjZVRy
ZWVFbGVtZW50KiBjb25zdCB0aGVOZXdFbGVtZW50ID0KICAgICAgICAgICAgICAgIG1fZG9jdW1l
bnQtPmNyZWF0ZUVsZW1lbnROb2RlKG5hbWUsIGF0dHJzLCBtX2N1cnJlbnRFbGVtZW50KTsKCiAg
ICAgICAgaWYgKG1fY3VycmVudEVsZW1lbnQgIT0gMCkKICAgICAgICB7CiAgICAgICAgICAgICAg
ICBtX2N1cnJlbnRFbGVtZW50LT5hcHBlbmRDaGlsZE5vZGUodGhlTmV3RWxlbWVudCk7CiAgICAg
ICAgfQogICAgICAgIGVsc2UgaWYobV9kb2N1bWVudEZyYWdtZW50ICE9IDApCiAgICAgICAgewog
ICAgICAgICAgICAgICAgbV9kb2N1bWVudEZyYWdtZW50LT5hcHBlbmRDaGlsZCh0aGVOZXdFbGVt
ZW50KTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgICAgIG1f
ZG9jdW1lbnQtPmFwcGVuZENoaWxkTm9kZSh0aGVOZXdFbGVtZW50KTsKICAgICAgICB9CgogICAg
ICAgIG1fZWxlbWVudFN0YWNrLnB1c2hfYmFjayh0aGVOZXdFbGVtZW50KTsKCiAgICAgICAgbV9j
dXJyZW50RWxlbWVudCA9IHRoZU5ld0VsZW1lbnQ7Cn0KCgoKdm9pZApGb3JtYXR0ZXJUb1NvdXJj
ZVRyZWU6OmVuZEVsZW1lbnQoY29uc3QgWE1MQ2gqIGNvbnN0ICkKewogICAgICAgIHByb2Nlc3NB
Y2N1bXVsYXRlZFRleHQoKTsKCiAgICAgICAgKCh2b2lkKSAoKG1fZWxlbWVudFN0YWNrLmVtcHR5
KCkgPT0gZmFsc2UpID8gMCA6IChfX2Fzc2VydF9mYWlsICgibV9lbGVtZW50U3RhY2suZW1wdHko
KSA9PSBmYWxzZSIsICJYYWxhblNvdXJjZVRyZWUvRm9ybWF0dGVyVG9Tb3VyY2VUcmVlLmNwcCIs
IDE4MywgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CgoKICAgICAgICBtX2VsZW1lbnRTdGFj
ay5wb3BfYmFjaygpOwoKCgogICAgICAgIGlmIChtX2VsZW1lbnRTdGFjay5lbXB0eSgpID09IGZh
bHNlKQogICAgICAgIHsKICAgICAgICAgICAgICAgIG1fY3VycmVudEVsZW1lbnQgPSBtX2VsZW1l
bnRTdGFjay5iYWNrKCk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRFbGVtZW50ID0gMDsKICAgICAgICB9Cn0KCgoKdm9pZApGb3JtYXR0
ZXJUb1NvdXJjZVRyZWU6OmNoYXJhY3RlcnMoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFhNTENoKiBjb25zdCBjaGFycywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IGxlbmd0aCkKewogICAgICAgIGlmIChtX2RvY3VtZW50RnJhZ21lbnQgIT0gMCkKICAg
ICAgICB7CiAgICAgICAgICAgICAgICBkb0NoYXJhY3RlcnMoY2hhcnMsIGxlbmd0aCk7CiAgICAg
ICAgfQogICAgICAgIGVsc2UgaWYgKG1fY3VycmVudEVsZW1lbnQgPT0gMCkKICAgICAgICB7CiAg
ICAgICAgICAgICAgICBpZiAoaXNYTUxXaGl0ZXNwYWNlKGNoYXJzKSA9PSBmYWxzZSkKICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgWGFsYW5ET01FeGNlcHRp
b24oWGFsYW5ET01FeGNlcHRpb246OkhJRVJBUkNIWV9SRVFVRVNUX0VSUik7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICAgICBh
cHBlbmQobV90ZXh0QnVmZmVyLCBjaGFycywgbGVuZ3RoKTsKICAgICAgICB9Cn0KCgoKdm9pZApG
b3JtYXR0ZXJUb1NvdXJjZVRyZWU6OmNoYXJhY3RlcnNSYXcoCiAgICAgICAgICAgICAgICBjb25z
dCBYTUxDaCogY29uc3QgY2hhcnMsCiAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
bGVuZ3RoKQp7CiAgICAgICAgKCh2b2lkKSAoKG1fZG9jdW1lbnQgIT0gMCkgPyAwIDogKF9fYXNz
ZXJ0X2ZhaWwgKCJtX2RvY3VtZW50ICE9IDAiLCAiWGFsYW5Tb3VyY2VUcmVlL0Zvcm1hdHRlclRv
U291cmNlVHJlZS5jcHAiLCAyMzEsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKICAgICAg
ICBwcm9jZXNzQWNjdW11bGF0ZWRUZXh0KCk7CgogICAgICAgIGRvUHJvY2Vzc2luZ0luc3RydWN0
aW9uKGNfd3N0cihzX3hzbHROZXh0SXNSYXdTdHJpbmcpLCBjX3dzdHIoc19mb3JtYXR0ZXJMaXN0
ZW5lclN0cmluZykpOwoKICAgICAgICBjaGFyYWN0ZXJzKGNoYXJzLCBsZW5ndGgpOwp9CgoKCnZv
aWQKRm9ybWF0dGVyVG9Tb3VyY2VUcmVlOjplbnRpdHlSZWZlcmVuY2UoY29uc3QgWE1MQ2gqIGNv
bnN0ICkKewp9CgoKCnZvaWQKRm9ybWF0dGVyVG9Tb3VyY2VUcmVlOjppZ25vcmFibGVXaGl0ZXNw
YWNlKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxDaCogY29uc3QgY2hhcnMsCiAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBsZW5ndGgpCnsKICAgICAg
ICAoKHZvaWQpICgobV9kb2N1bWVudCAhPSAwKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIm1fZG9j
dW1lbnQgIT0gMCIsICJYYWxhblNvdXJjZVRyZWUvRm9ybWF0dGVyVG9Tb3VyY2VUcmVlLmNwcCIs
IDI1NCwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CgoKICAgICAgICBpZiAobV9lbGVtZW50
U3RhY2suZW1wdHkoKSA9PSBmYWxzZSkKICAgICAgICB7CiAgICAgICAgICAgICAgICAoKHZvaWQp
ICgobV9kb2N1bWVudEZyYWdtZW50ICE9IDAgfHwgbV9kb2N1bWVudC0+Z2V0RG9jdW1lbnRFbGVt
ZW50KCkgIT0gMCkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJtX2RvY3VtZW50RnJhZ21lbnQgIT0g
MCB8fCBtX2RvY3VtZW50LT5nZXREb2N1bWVudEVsZW1lbnQoKSAhPSAwIiwgIlhhbGFuU291cmNl
VHJlZS9Gb3JtYXR0ZXJUb1NvdXJjZVRyZWUuY3BwIiwgMjU5LCBfX1BSRVRUWV9GVU5DVElPTl9f
KSwgMCkpKTsKCiAgICAgICAgICAgICAgICBwcm9jZXNzQWNjdW11bGF0ZWRUZXh0KCk7CgogICAg
ICAgICAgICAgICAgWGFsYW5Tb3VyY2VUcmVlVGV4dCogY29uc3QgdGhlTmV3VGV4dE5vZGUgPQog
ICAgICAgICAgICAgICAgICAgICAgICBtX2RvY3VtZW50LT5jcmVhdGVUZXh0SVdTTm9kZShjaGFy
cywgbGVuZ3RoLCBtX2N1cnJlbnRFbGVtZW50KTsKCiAgICAgICAgICAgICAgICBpZiAobV9jdXJy
ZW50RWxlbWVudCAhPSAwKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICBtX2N1cnJlbnRFbGVtZW50LT5hcHBlbmRDaGlsZE5vZGUodGhlTmV3VGV4dE5vZGUpOwogICAg
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIGlmKG1fZG9jdW1lbnRGcmFnbWVu
dCAhPSAwKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHByb2Nlc3NBY2N1bXVsYXRlZFRleHQo
KTsKCiAgICAgICAgICAgICAgICBYYWxhblNvdXJjZVRyZWVUZXh0KiBjb25zdCB0aGVOZXdUZXh0
Tm9kZSA9CiAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQtPmNyZWF0ZVRleHRJV1NO
b2RlKGNoYXJzLCBsZW5ndGgsIG1fY3VycmVudEVsZW1lbnQpOwoKICAgICAgICAgICAgICAgIG1f
ZG9jdW1lbnRGcmFnbWVudC0+YXBwZW5kQ2hpbGQodGhlTmV3VGV4dE5vZGUpOwogICAgICAgIH0K
fQoKCgp2b2lkCkZvcm1hdHRlclRvU291cmNlVHJlZTo6cHJvY2Vzc2luZ0luc3RydWN0aW9uKAog
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxDaCogY29uc3QgdGFyZ2V0LAogICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBYTUxDaCogY29uc3QgZGF0YSkKewogICAgICAgICgodm9p
ZCkgKChtX2RvY3VtZW50ICE9IDApID8gMCA6IChfX2Fzc2VydF9mYWlsICgibV9kb2N1bWVudCAh
PSAwIiwgIlhhbGFuU291cmNlVHJlZS9Gb3JtYXR0ZXJUb1NvdXJjZVRyZWUuY3BwIiwgMjg5LCBf
X1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKCiAgICAgICAgcHJvY2Vzc0FjY3VtdWxhdGVkVGV4
dCgpOwoKICAgICAgICBkb1Byb2Nlc3NpbmdJbnN0cnVjdGlvbih0YXJnZXQsIGRhdGEpOwp9CgoK
CnZvaWQKRm9ybWF0dGVyVG9Tb3VyY2VUcmVlOjpyZXNldERvY3VtZW50KCkKewp9CgoKCnZvaWQK
Rm9ybWF0dGVyVG9Tb3VyY2VUcmVlOjpjb21tZW50KGNvbnN0IFhNTENoKiBjb25zdCBkYXRhKQp7
CiAgICAgICAgKCh2b2lkKSAoKG1fZG9jdW1lbnQgIT0gMCkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwg
KCJtX2RvY3VtZW50ICE9IDAiLCAiWGFsYW5Tb3VyY2VUcmVlL0Zvcm1hdHRlclRvU291cmNlVHJl
ZS5jcHAiLCAzMDgsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKICAgICAgICBwcm9jZXNz
QWNjdW11bGF0ZWRUZXh0KCk7CgogICAgICAgIFhhbGFuU291cmNlVHJlZUNvbW1lbnQqIGNvbnN0
IHRoZU5ld0NvbW1lbnQgPQogICAgICAgICAgICAgICAgbV9kb2N1bWVudC0+Y3JlYXRlQ29tbWVu
dE5vZGUoZGF0YSwgbGVuZ3RoKGRhdGEpLCBtX2N1cnJlbnRFbGVtZW50KTsKCiAgICAgICAgaWYg
KG1fY3VycmVudEVsZW1lbnQgIT0gMCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBtX2N1cnJl
bnRFbGVtZW50LT5hcHBlbmRDaGlsZE5vZGUodGhlTmV3Q29tbWVudCk7CiAgICAgICAgfQogICAg
ICAgIGVsc2UgaWYobV9kb2N1bWVudEZyYWdtZW50ICE9IDApCiAgICAgICAgewogICAgICAgICAg
ICAgICAgbV9kb2N1bWVudEZyYWdtZW50LT5hcHBlbmRDaGlsZCh0aGVOZXdDb21tZW50KTsKICAg
ICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQt
PmFwcGVuZENoaWxkTm9kZSh0aGVOZXdDb21tZW50KTsKICAgICAgICB9Cn0KCgoKdm9pZApGb3Jt
YXR0ZXJUb1NvdXJjZVRyZWU6OmNkYXRhKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBY
TUxDaCogY29uc3QgLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
KQp7Cn0KCgoKdm9pZApGb3JtYXR0ZXJUb1NvdXJjZVRyZWU6OnByb2Nlc3NBY2N1bXVsYXRlZFRl
eHQoKQp7CiAgICAgICAgaWYgKGlzRW1wdHkobV90ZXh0QnVmZmVyKSA9PSBmYWxzZSkKICAgICAg
ICB7CiAgICAgICAgICAgICAgICBkb0NoYXJhY3RlcnMoY193c3RyKG1fdGV4dEJ1ZmZlciksIGxl
bmd0aChtX3RleHRCdWZmZXIpKTsKCiAgICAgICAgICAgICAgICBjbGVhcihtX3RleHRCdWZmZXIp
OwogICAgICAgIH0KfQoKCgp2b2lkCkZvcm1hdHRlclRvU291cmNlVHJlZTo6ZG9DaGFyYWN0ZXJz
KAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxDaCogY2hhcnMsCiAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW5ndGgpCnsKICAgICAgICBpZiAobV9jdXJyZW50
RWxlbWVudCAhPSAwKQogICAgICAgIHsKICAgICAgICAgICAgICAgIG1fY3VycmVudEVsZW1lbnQt
PmFwcGVuZENoaWxkTm9kZShtX2RvY3VtZW50LT5jcmVhdGVUZXh0Tm9kZShjaGFycywgbGVuZ3Ro
LCBtX2N1cnJlbnRFbGVtZW50KSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYobV9kb2N1bWVu
dEZyYWdtZW50ICE9IDApCiAgICAgICAgewogICAgICAgICAgICAgICAgbV9kb2N1bWVudEZyYWdt
ZW50LT5hcHBlbmRDaGlsZChtX2RvY3VtZW50LT5jcmVhdGVUZXh0Tm9kZShjaGFycywgbGVuZ3Ro
LCBtX2N1cnJlbnRFbGVtZW50KSk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAg
ICAgICAgICAgICAgICB0aHJvdyBYYWxhbkRPTUV4Y2VwdGlvbihYYWxhbkRPTUV4Y2VwdGlvbjo6
SElFUkFSQ0hZX1JFUVVFU1RfRVJSKTsKICAgICAgICB9Cn0KCgoKdm9pZApGb3JtYXR0ZXJUb1Nv
dXJjZVRyZWU6OmRvUHJvY2Vzc2luZ0luc3RydWN0aW9uKAogICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBYTUxDaCogdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYTUxD
aCogZGF0YSkKewogICAgICAgIFhhbGFuU291cmNlVHJlZVByb2Nlc3NpbmdJbnN0cnVjdGlvbiog
Y29uc3QgdGhlTmV3UEkgPQogICAgICAgICAgICAgICAgbV9kb2N1bWVudC0+Y3JlYXRlUHJvY2Vz
c2luZ0luc3RydWN0aW9uTm9kZSh0YXJnZXQsIGRhdGEpOwoKICAgICAgICBpZiAobV9jdXJyZW50
RWxlbWVudCAhPSAwKQogICAgICAgIHsKICAgICAgICAgICAgICAgIG1fY3VycmVudEVsZW1lbnQt
PmFwcGVuZENoaWxkTm9kZShtX2RvY3VtZW50LT5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25O
b2RlKHRhcmdldCwgZGF0YSwgbV9jdXJyZW50RWxlbWVudCkpOwogICAgICAgIH0KICAgICAgICBl
bHNlIGlmKG1fZG9jdW1lbnRGcmFnbWVudCAhPSAwKQogICAgICAgIHsKICAgICAgICAgICAgICAg
IG1fZG9jdW1lbnRGcmFnbWVudC0+YXBwZW5kQ2hpbGQodGhlTmV3UEkpOwogICAgICAgIH0KICAg
ICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICAgICAgbV9kb2N1bWVudC0+YXBwZW5kQ2hp
bGROb2RlKHRoZU5ld1BJKTsKICAgICAgICB9Cn0K


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2001-05-23  8:26 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-05-23  8:26 c++/2915: gcc 3.0 using std::less is ignored tot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).