public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: c++/2742: Internal compiler error in dwarfout_finish, at  dwarfout.c:6067
@ 2001-06-12 21:06 rodrigc
  0 siblings, 0 replies; 2+ messages in thread
From: rodrigc @ 2001-06-12 21:06 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, matt, nobody, rodrigc, nathan

Synopsis: Internal compiler error in dwarfout_finish, at  dwarfout.c:6067

State-Changed-From-To: feedback->closed
State-Changed-By: rodrigc
State-Changed-When: Tue Jun 12 21:06:28 2001
State-Changed-Why:
    Feedback not received.  Preprocessed source does not compile
    with gcc 3.0.
    Please try an updated compiler, such as the one
    provided at:
    http://www.codesourcery.com/gcc-snapshots/

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view&pr=2742&database=gcc


^ permalink raw reply	[flat|nested] 2+ messages in thread

* c++/2742: Internal compiler error in dwarfout_finish, at  dwarfout.c:6067
@ 2001-05-04 13:36 matt
  0 siblings, 0 replies; 2+ messages in thread
From: matt @ 2001-05-04 13:36 UTC (permalink / raw)
  To: gcc-gnats

>Number:         2742
>Category:       c++
>Synopsis:       Internal compiler error in dwarfout_finish, at  dwarfout.c:6067
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri May 04 13:36:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     matt bettencourt
>Release:        gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-81)
>Organization:
>Environment:
RH linux 7.1 i586	
>Description:
The code at ftp://attica.ssc.usm.edu:2121/pub/matt/Servers.ii 
causes g++ to crash when compiled with -gdwarf -c
{attica} 44 % g++ -gdwarf -c Servers.ii
Servers.cc:1140: Internal compiler error in dwarfout_finish, at 
dwarfout.c:6067
Please submit a full bug report.
See <URL: http://bugzilla.redhat.com/bugzilla/ > for instructions.
>How-To-Repeat:
g++ -gdwarf -c Servers.ii
>Fix:
Don't have one yet :>
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="Servers.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="Servers.ii"

IyAxNSAiU2VydmVycy5jYyIKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvQ09SQkFDbGll
bnQuaCIgMQojIDE0ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvQ09SQkFDbGllbnQuaCIKIyAx
ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvTmF0aXZlVHlwZXMuaCIgMQojIDMzICIvaG9tZS9t
YXR0L29iL2luY2x1ZGUvT0IvTmF0aXZlVHlwZXMuaCIKbmFtZXNwYWNlIENPUkJBCnsKCmNsYXNz
IFZhbHVlRmFjdG9yeUJhc2U7Cgp9CgpuYW1lc3BhY2UgT0JOYXRpdmVfQ09SQkEKewoKdHlwZWRl
ZiBDT1JCQTo6VmFsdWVGYWN0b3J5QmFzZSogVmFsdWVGYWN0b3J5OwoKfQoKbmFtZXNwYWNlIFBv
cnRhYmxlU2VydmVyCnsKCmNsYXNzIFNlcnZhbnRCYXNlOwoKfQoKCm5hbWVzcGFjZSBPQk5hdGl2
ZV9Qb3J0YWJsZVNlcnZlcgp7Cgp0eXBlZGVmIFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50QmFzZSog
U2VydmFudDsKCmNsYXNzIFNlcnZhbnRMb2NhdG9yCnsKcHVibGljOgogICAgdHlwZWRlZiB2b2lk
KiBDb29raWU7Cn07Cgp9CgpuYW1lc3BhY2UgT0IKewoKY2xhc3MgUHJvcGVydGllczsKCmNsYXNz
IEV2ZW50SGFuZGxlckJhc2U7Cgp9CgpuYW1lc3BhY2UgT0JOYXRpdmVfT0IKewoKdHlwZWRlZiBP
Qjo6UHJvcGVydGllcyogUHJvcGVydHlTZXQ7Cgp0eXBlZGVmIE9COjpFdmVudEhhbmRsZXJCYXNl
KiBFdmVudEhhbmRsZXI7Cgp9CiMgMTUgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9DT1JCQUNs
aWVudC5oIiAyCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1R5cGVDb2RlLmgiIDEKIyAx
NCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1R5cGVDb2RlLmgiCiMgMSAiL2hvbWUvbWF0dC9v
Yi9pbmNsdWRlL09CL0FueS5oIiAxCiMgMTQgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9Bbnku
aCIKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvUHJpbmNpcGFsX2Z3ZC5oIiAxCiMgMTQg
Ii9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9QcmluY2lwYWxfZndkLmgiCiMgMSAiL2hvbWUvbWF0
dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlLmgiIDEKIyAxNCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRl
L09CL1RlbXBsYXRlLmgiCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0Jhc2ljLmgiIDEK
IyAyMiAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0Jhc2ljLmgiCiMgMSAiL2hvbWUvbWF0dC9v
Yi9pbmNsdWRlL09CL0NvbmZpZy5oIiAxCiMgMjMgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9C
YXNpYy5oIiAyCiMgMTE1ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvQmFzaWMuaCIKbmFtZXNw
YWNlIE9CCnsKCiAgICAgICAgICBleHRlcm4gY29uc3QgY2hhciogVmVyc2lvbjsKICAgICAgICAg
IGV4dGVybiB1bnNpZ25lZCBsb25nIEludGVnZXJWZXJzaW9uOwoKfQojIDE5MyAiL2hvbWUvbWF0
dC9vYi9pbmNsdWRlL09CL0Jhc2ljLmgiCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMK
IyAyNiAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVz
LmgiIDEgMwojIDI4MyAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvc3lzL2NkZWZzLmgiIDEgMwojIDI4NCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwoj
IDMxMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ251L3N0
dWJzLmgiIDEgMwojIDMxMiAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDI3ICIvdXNy
L2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgojIDEgIi91c3IvbGliL2dj
Yy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAxOTkg
Ii91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL3N0ZGRlZi5o
IiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsKIyAzNCAiL3Vzci9pbmNsdWRlL3N0cmlu
Zy5oIiAyIDMKCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3Qs
CiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6
ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUgKHZvaWQgKl9fZGVzdCwg
X19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gdm9pZCAqbWVtY2NweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAq
X19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIGludCBfX2MsIHNpemVfdCBf
X24pCiAgICAgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCAqbWVtc2V0ICh2b2lkICpfX3MsIGlu
dCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWVtY21wIChfX2NvbnN0
IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtY2hyIChfX2Nv
bnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CiMgNzcgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRl
cm4gY2hhciAqc3RyY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNo
YXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAq
c3RyY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVz
dHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHN0cmNtcCAoX19j
b25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5jbXAgKF9fY29uc3QgY2hhciAq
X19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RyY29sbCAoX19jb25zdCBjaGFy
ICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3QgX19k
ZXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Ny
Yywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CiMgMTIwICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMK
ZXh0ZXJuIGNoYXIgKnN0cmR1cCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX21hbGxvY19fKSk7CiMgMTU1ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0
ZXJuIGNoYXIgKnN0cmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnJjaHIgKF9fY29uc3Qg
Y2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
IyAxNjcgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gc2l6ZV90IHN0cmNzcG4gKF9f
Y29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0KQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgc3Ryc3BuIChfX2NvbnN0
IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJwYnJrIChfX2NvbnN0IGNoYXIg
Kl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJzdHIgKF9fY29uc3QgY2hhciAqX19oYXlz
dGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19wdXJlX18pKTsKIyAxODcgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hh
ciAqc3RydG9rIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fZGVsaW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpfX3N0cnRva19yIChjaGFy
ICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz
dHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RydG9rX3IgKGNoYXIg
Kl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAg
ICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsK
IyAyMTggIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gc2l6ZV90IHN0cmxlbiAoX19j
b25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwojIDIy
OSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJlcnJvciAoaW50IF9f
ZXJybnVtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKGludCBfX2Vycm51
bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9p
ZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gdm9p
ZCBiY29weSAoX19jb25zdCB2b2lkICpfX3NyYywgdm9pZCAqX19kZXN0LCBzaXplX3QgX19uKSB0
aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBiemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lk
ICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpyaW5kZXgg
KF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKCgoKZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChjb25zdCkpOwojIDI3MiAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBpbnQg
c3RyY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJuY2Fz
ZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24p
CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CiMgMjk0ICIvdXNyL2lu
Y2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hhciAqKl9fcmVzdHJpY3Qg
X19zdHJpbmdwLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19kZWxpbSkgdGhyb3cgKCk7CiMgMzYzICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKfQojIDE5
NCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0Jhc2ljLmgiIDIKIyAxICIvdXNyL2luY2x1ZGUv
YXNzZXJ0LmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMiAzCiMg
NjUgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwpleHRlcm4gIkMiIHsKCgpleHRlcm4gdm9pZCBf
X2Fzc2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBfX2NvbnN0IGNoYXIgKl9f
ZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwgX19j
b25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25v
cmV0dXJuX18pKTsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50IF9fZXJy
bnVtLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBfX2xpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0IGNoYXIgKl9f
YXNzZXJ0aW9uLCBjb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX2xpbmUpCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCn0KIyAxOTUgIi9ob21lL21hdHQvb2Iv
aW5jbHVkZS9PQi9CYXNpYy5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMKIyAy
NSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgi
IDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKCgoKIyAxICIvdXNyL2xp
Yi9nY2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzIuOTYvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg
MzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgpleHRlcm4gIkMiIHsKIyA5NCAiL3Vzci9p
bmNsdWRlL3N0ZGxpYi5oIiAzCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IHF1b3Q7CiAgICBp
bnQgcmVtOwogIH0gZGl2X3Q7CgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBpbnQgcXVv
dDsKICAgIGxvbmcgaW50IHJlbTsKICB9IGxkaXZfdDsKIyAxMzMgIi91c3IvaW5jbHVkZS9zdGRs
aWIuaCIgMwpleHRlcm4gc2l6ZV90IF9fY3R5cGVfZ2V0X21iX2N1cl9tYXggKHZvaWQpIHRocm93
ICgpOwoKCgpleHRlcm4gZG91YmxlIGF0b2YgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgYXRvaSAoX19jb25zdCBj
aGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJu
IGxvbmcgaW50IGF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsKCgoKX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBsb25nIGludCBh
dG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgoKCmV4dGVybiBkb3VibGUgc3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIpIHRocm93ICgpOwojIDE2MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBs
b25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0
aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsIChfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9f
ZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9xIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0
ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCgoKCl9f
ZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpl
eHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwojIDI1
MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBkb3VibGUgX19zdHJ0b2RfaW50ZXJu
YWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAg
ICB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVybmFsIChfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJu
IGxvbmcgZG91YmxlIF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5h
bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoK
CmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfaW50ZXJuYWwgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cg
KCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9sbF9pbnRl
cm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91
cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBp
bnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKIyAzODUg
Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbDY0YSAobG9uZyBpbnQgX19u
KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgYTY0bCAoX19jb25zdCBjaGFyICpfX3MpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5
cy90eXBlcy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgi
IDIgMwoKZXh0ZXJuICJDIiB7CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwoj
IDI2ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1
cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgojIDEgIi91
c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL3N0ZGRlZi5oIiAx
IDMKIyAzMCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKdHlwZWRlZiB1bnNpZ25l
ZCBjaGFyIF9fdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdV9zaG9ydDsKdHlwZWRl
ZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdV9sb25nOwoK
X19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRfdDsK
X19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19xdWFkX3Q7CiMgNDkgIi91c3Iv
aW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKdHlwZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdDsKdHlw
ZWRlZiB1bnNpZ25lZCBjaGFyIF9fdWludDhfdDsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50IF9f
aW50MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZfdDsKdHlwZWRlZiBz
aWduZWQgaW50IF9faW50MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsKCl9f
ZXh0ZW5zaW9uX18gdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGludCBfX2ludDY0X3Q7Cl9fZXh0
ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdWludDY0X3Q7Cgp0eXBl
ZGVmIF9fcXVhZF90ICpfX3FhZGRyX3Q7Cgp0eXBlZGVmIF9fdV9xdWFkX3QgX19kZXZfdDsKdHlw
ZWRlZiBfX3VfaW50IF9fdWlkX3Q7CnR5cGVkZWYgX191X2ludCBfX2dpZF90Owp0eXBlZGVmIF9f
dV9sb25nIF9faW5vX3Q7CnR5cGVkZWYgX191X2ludCBfX21vZGVfdDsKdHlwZWRlZiBfX3VfaW50
IF9fbmxpbmtfdDsKdHlwZWRlZiBsb25nIGludCBfX29mZl90Owp0eXBlZGVmIF9fcXVhZF90IF9f
bG9mZl90Owp0eXBlZGVmIGludCBfX3BpZF90Owp0eXBlZGVmIGludCBfX3NzaXplX3Q7CnR5cGVk
ZWYgX191X2xvbmcgX19ybGltX3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX3JsaW02NF90Owp0eXBl
ZGVmIF9fdV9pbnQgX19pZF90OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxbMl07
CiAgfSBfX2ZzaWRfdDsKCgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAqX19j
YWRkcl90Owp0eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBf
X3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zdXNlY29uZHNfdDsKdHlwZWRlZiBsb25n
IGludCBfX3N3YmxrX3Q7Cgp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsKCgp0eXBlZGVmIGlu
dCBfX2Nsb2NraWRfdDsKCgp0eXBlZGVmIGludCBfX3RpbWVyX3Q7CgoKCgoKCnR5cGVkZWYgaW50
IF9fa2V5X3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoKCnR5
cGVkZWYgbG9uZyBpbnQgX19ibGtzaXplX3Q7CgoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrY250
X3Q7CnR5cGVkZWYgX19xdWFkX3QgX19ibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19m
c2Jsa2NudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBf
X3VfbG9uZyBfX2ZzZmlsY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzZmlsY250NjRfdDsK
Cgp0eXBlZGVmIF9fdV9xdWFkX3QgX19pbm82NF90OwoKCnR5cGVkZWYgX19sb2ZmX3QgX19vZmY2
NF90OwoKCnR5cGVkZWYgbG9uZyBpbnQgX190X3NjYWxhcl90Owp0eXBlZGVmIHVuc2lnbmVkIGxv
bmcgaW50IF9fdF91c2NhbGFyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKCgp0eXBlZGVm
IHVuc2lnbmVkIGludCBfX3NvY2tsZW5fdDsKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRo
cmVhZHR5cGVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIg
MwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDY4ICIvdXNyL2luY2x1ZGUv
Yml0cy9zY2hlZC5oIiAzCnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2NoZWRf
cHJpb3JpdHk7CiAgfTsKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDIg
MwoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQgX19zdGF0dXM7CiAgaW50
IF9fc3BpbmxvY2s7Cgp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1Y3Qg
Kl9wdGhyZWFkX2Rlc2NyOwoKCgoKCnR5cGVkZWYgc3RydWN0IF9fcHRocmVhZF9hdHRyX3MKewog
IGludCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3NjaGVk
X3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2NvcGU7
CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAqX19z
dGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCgp0eXBl
ZGVmIHN0cnVjdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fY19sb2NrOwogIF9wdGhy
ZWFkX2Rlc2NyIF9fY193YWl0aW5nOwp9IHB0aHJlYWRfY29uZF90OwoKCgp0eXBlZGVmIHN0cnVj
dAp7CiAgaW50IF9fZHVtbXk7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKCnR5cGVkZWYgdW5zaWdu
ZWQgaW50IHB0aHJlYWRfa2V5X3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX21fcmVz
ZXJ2ZWQ7CiAgaW50IF9fbV9jb3VudDsKICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7CiAgaW50
IF9fbV9raW5kOwogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX21fbG9jazsKfSBwdGhyZWFk
X211dGV4X3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tdXRleGtpbmQ7Cn0gcHRocmVh
ZF9tdXRleGF0dHJfdDsKCgoKdHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7CiMgMTQwICIvdXNy
L2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50
IHB0aHJlYWRfdDsKIyAxNDQgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwojIDMxICIv
dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYgX191X2NoYXIgdV9jaGFyOwp0
eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVkZWYg
X191X2xvbmcgdV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3VfcXVh
ZF90IHVfcXVhZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgp0eXBlZGVmIF9fbG9mZl90
IGxvZmZfdDsKCgoKdHlwZWRlZiBfX2lub190IGlub190OwojIDU4ICIvdXNyL2luY2x1ZGUvc3lz
L3R5cGVzLmgiIDMKdHlwZWRlZiBfX2Rldl90IGRldl90OwoKCgoKdHlwZWRlZiBfX2dpZF90IGdp
ZF90OwoKCgoKdHlwZWRlZiBfX21vZGVfdCBtb2RlX3Q7CgoKCgp0eXBlZGVmIF9fbmxpbmtfdCBu
bGlua190OwoKCgoKdHlwZWRlZiBfX3VpZF90IHVpZF90OwoKCgoKCnR5cGVkZWYgX19vZmZfdCBv
ZmZfdDsKIyA5NiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19waWRfdCBw
aWRfdDsKCgoKCnR5cGVkZWYgX19pZF90IGlkX3Q7CgoKCgp0eXBlZGVmIF9fc3NpemVfdCBzc2l6
ZV90OwoKCgoKdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRlZiBfX2NhZGRyX3QgY2Fk
ZHJfdDsKCgoKdHlwZWRlZiBfX2tleV90IGtleV90OwojIDEyNiAiL3Vzci9pbmNsdWRlL3N5cy90
eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgNjcgIi91c3IvaW5jbHVk
ZS90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA2OCAiL3Vz
ci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKdHlwZWRlZiBfX3RpbWVfdCB0aW1lX3Q7CiMgNzkgIi91
c3IvaW5jbHVkZS90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMK
IyA4MCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKdHlwZWRlZiBfX2Nsb2NraWRfdCBjbG9j
a2lkX3Q7CiMgOTEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy90eXBlcy5oIiAxIDMKIyA5MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKdHlwZWRlZiBf
X3RpbWVyX3QgdGltZXJfdDsKIyAxMjcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCiMg
MTQwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kz
ODYtcmVkaGF0LWxpbnV4LzIuOTYvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQxICIvdXNyL2lu
Y2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVsb25n
Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50
IHVpbnQ7CiMgMTg0ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBpbnQgaW50
OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIGludCBpbnQx
Nl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBpbnQz
Ml90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2
NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVkZWYgdW5zaWdu
ZWQgaW50IHVfaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBl
ZGVmIHVuc2lnbmVkIGludCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJ
X18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19t
b2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmli
dXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0
dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fd29yZF9fKSkpOwojIDIwNiAiL3Vzci9pbmNsdWRlL3N5
cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAyMiAiL3Vzci9p
bmNsdWRlL2VuZGlhbi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIz
ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIgMwojIDM3ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiMgMzggIi91c3IvaW5jbHVk
ZS9lbmRpYW4uaCIgMiAzCiMgMjA3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMg
MSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9zeXMv
c2VsZWN0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjYgIi91c3Iv
aW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMu
aCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5o
IiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMKIyAyMyAiL3Vzci9p
bmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKdHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7CgoKCgp0
eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdmFsWygxMDI0IC8gKDgg
KiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9fc2lnc2V0X3Q7CiMgMzUgIi91
c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCgp0eXBlZGVmIF9fc2lnc2V0X3Qgc2lnc2V0
X3Q7CgoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDEwNiAiL3Vzci9pbmNsdWRl
L3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBsb25nIGludCB0dl9zZWM7CiAgICBs
b25nIGludCB0dl9uc2VjOwogIH07CiMgNDQgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIg
MwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDYzICIvdXNyL2luY2x1ZGUv
Yml0cy90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA2NCAi
L3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAyIDMKCgoKc3RydWN0IHRpbWV2YWwKICB7CiAgICBf
X3RpbWVfdCB0dl9zZWM7CiAgICBfX3N1c2Vjb25kc190IHR2X3VzZWM7CiAgfTsKIyA0NiAiL3Vz
ci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19mZF9tYXNr
OwoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CgoKCgoKCiAgICBfX2ZkX21hc2sgX19mZHNfYml0
c1sxMDI0IC8gKDggKiBzaXplb2YgKF9fZmRfbWFzaykpXTsKCgogIH0gZmRfc2V0OwoKCgoKCgp0
eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOwojIDg5ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5o
IiAzCmV4dGVybiAiQyIgewoKCgoKCgpleHRlcm4gaW50IHNlbGVjdCAoaW50IF9fbmZkcywgZmRf
c2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19y
ZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0
IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJp
Y3QgX190aW1lb3V0KSB0aHJvdyAoKTsKIyAxMTIgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0Lmgi
IDMKfQojIDIxMCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgojIDEgIi91c3IvaW5j
bHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMwojIDIxMyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5o
IiAyIDMKIyAyMjQgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fYmxrY250
X3QgYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7CgoKCnR5cGVk
ZWYgX19mc2ZpbGNudF90IGZzZmlsY250X3Q7CiMgMjU2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz
LmgiIDMKfQojIDM5MiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoKZXh0ZXJuIGxv
bmcgaW50IHJhbmRvbSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmRvbSAodW5z
aWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmluaXRzdGF0ZSAo
dW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IF9fc3RhdGVsZW4pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqc2V0c3Rh
dGUgKGNoYXIgKl9fc3RhdGVidWYpIHRocm93ICgpOwoKCgoKCgoKc3RydWN0IHJhbmRvbV9kYXRh
CiAgewogICAgaW50MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7CiAgICBpbnQzMl90ICpz
dGF0ZTsKICAgIGludCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7CiAgICBpbnQgcmFuZF9z
ZXA7CiAgICBpbnQzMl90ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yIChzdHJ1
Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgIGlu
dDMyX3QgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcmFuZG9t
X3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYpIHRocm93
ICgpOwoKZXh0ZXJuIGludCBpbml0c3RhdGVfciAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAq
X19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19z
dGF0ZWxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jl
c3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2V0c3RhdGVfciAoY2hhciAqX19y
ZXN0cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21f
ZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCByYW5kICh2
b2lkKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIHNyYW5kICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGludCAqX19zZWVkKSB0aHJv
dyAoKTsKCgoKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVy
biBkb3VibGUgZXJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgp
OwoKCmV4dGVybiBsb25nIGludCBscmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcg
aW50IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpl
eHRlcm4gbG9uZyBpbnQgbXJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBq
cmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJu
IHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQgX19zZWVkdmFsKSB0aHJvdyAoKTsKZXh0ZXJuIHVuc2ln
bmVkIHNob3J0IGludCAqc2VlZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdKSB0
aHJvdyAoKTsKZXh0ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1b
N10pIHRocm93ICgpOwoKCgoKCnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBz
aG9ydCBpbnQgX194WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fb2xkX3hbM107CiAgICB1
bnNpZ25lZCBzaG9ydCBpbnQgX19jOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9faW5pdDsKICAg
IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19hOwogIH07CgoKZXh0ZXJuIGludCBkcmFuZDQ4X3Ig
KHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAg
ICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50
IGVyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAg
ICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IGxyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1
ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBucmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hz
dWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0
cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0
IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1yYW5kNDhfciAoc3RydWN0IGRyYW5k
NDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcg
aW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBqcmFuZDQ4X3Ig
KHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAg
ICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHNyYW5kNDhfciAobG9uZyBpbnQgX19zZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1
ZmZlcikKICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2VlZDQ4X3IgKHVuc2lnbmVkIHNob3J0
IGludCBfX3NlZWQxNnZbM10sCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2Rh
dGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBz
aG9ydCBpbnQgX19wYXJhbVs3XSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4
X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsKIyA1MjggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg
MwpleHRlcm4gdm9pZCAqbWFsbG9jIChzaXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgKmNhbGxvYyAoc2l6ZV90IF9fbm1lbWIs
IHNpemVfdCBfX3NpemUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18p
KTsKCgoKCgpleHRlcm4gdm9pZCAqcmVhbGxvYyAodm9pZCAqX19wdHIsIHNpemVfdCBfX3NpemUp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCBmcmVl
ICh2b2lkICpfX3B0cikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGNmcmVlICh2b2lkICpfX3B0
cikgdGhyb3cgKCk7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAxIDMKIyAyMiAiL3Vz
ci9pbmNsdWRlL2FsbG9jYS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwoj
IDIzICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDIgMwoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9p
Mzg2LXJlZGhhdC1saW51eC8yLjk2L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI2ICIvdXNyL2lu
Y2x1ZGUvYWxsb2NhLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKZXh0ZXJuIHZvaWQgKmFsbG9j
YSAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoKfQojIDU0OCAiL3Vzci9pbmNsdWRlL3N0
ZGxpYi5oIiAyIDMKCgoKCmV4dGVybiB2b2lkICp2YWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CiMgNTYyICIvdXNyL2luY2x1ZGUvc3Rk
bGliLmgiIDMKZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX25vcmV0dXJuX18pKTsKCgoKZXh0ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpICh2
b2lkKSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChp
bnQgX19zdGF0dXMsIHZvaWQgKl9fYXJnKSwgdm9pZCAqX19hcmcpCiAgICAgdGhyb3cgKCk7CgoK
CgoKZXh0ZXJuIHZvaWQgZXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19ub3JldHVybl9fKSk7CiMgNTg4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJu
IGNoYXIgKmdldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgpleHRlcm4g
Y2hhciAqX19zZWN1cmVfZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoK
CgoKZXh0ZXJuIGludCBwdXRlbnYgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gaW50IHNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1
ZSwgaW50IF9fcmVwbGFjZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHVuc2V0ZW52IChf
X2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJlbnYg
KHZvaWQpIHRocm93ICgpOwojIDYyNCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBj
aGFyICpta3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGlu
dCBta3N0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKIyA2NTEgIi91c3IvaW5jbHVk
ZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbWtkdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhy
b3cgKCk7CgoKCgpleHRlcm4gaW50IHN5c3RlbSAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQpIHRo
cm93ICgpOwojIDY3MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpyZWFs
cGF0aCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAg
ICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fcmVzb2x2ZWQpIHRocm93ICgpOwoKCgoKCgp0eXBlZGVm
IGludCAoKl9fY29tcGFyX2ZuX3QpIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopOwoj
IDY5MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiB2b2lkICpic2VhcmNoIChfX2Nv
bnN0IHZvaWQgKl9fa2V5LCBfX2NvbnN0IHZvaWQgKl9fYmFzZSwKICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29tcGFy
KTsKCgoKZXh0ZXJuIHZvaWQgcXNvcnQgKHZvaWQgKl9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNp
emVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsK
CgoKZXh0ZXJuIGludCBhYnMgKGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMgKGxvbmcgaW50IF9feCkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDcxMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAz
CmV4dGVybiBkaXZfdCBkaXYgKGludCBfX251bWVyLCBpbnQgX19kZW5vbSkKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsZGl2X3QgbGRpdiAobG9uZyBp
bnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CiMgNzI5ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNo
YXIgKmVjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBf
X2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cg
KCk7CgoKCgpleHRlcm4gY2hhciAqZmN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwg
aW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJp
Y3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpnY3Z0IChkb3VibGUgX192YWx1
ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAq
cWVjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAg
ICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhy
b3cgKCk7CmV4dGVybiBjaGFyICpxZmN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRp
Z2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9f
cmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFnY3Z0IChsb25nIGRvdWJs
ZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBpbnQgZWN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJp
Y3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNo
YXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIHRo
cm93ICgpOwpleHRlcm4gaW50IGZjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwg
aW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJp
Y3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgc2l6
ZV90IF9fbGVuKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcWVjdnRfciAobG9uZyBkb3VibGUgX192
YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBf
X2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAogICAgICAgICAgICAgICAgICAgIGNoYXIg
Kl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4dGVybiBpbnQgcWZj
dnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAg
ICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAogICAg
ICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhy
b3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgbWJsZW4gKF9fY29uc3QgY2hhciAqX19zLCBzaXplX3Qg
X19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1idG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBf
X3B3YywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNp
emVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2N0b21iIChjaGFyICpfX3MsIHdjaGFy
X3QgX193Y2hhcikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgbWJzdG93Y3MgKHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19wd2NzLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiBzaXplX3Qgd2Nz
dG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLCBzaXplX3QgX19uKQogICAgIHRocm93ICgp
OwoKCgoKCgoKZXh0ZXJuIGludCBycG1hdGNoIChfX2NvbnN0IGNoYXIgKl9fcmVzcG9uc2UpIHRo
cm93ICgpOwojIDg1OSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQgZ2V0bG9h
ZGF2ZyAoZG91YmxlIF9fbG9hZGF2Z1tdLCBpbnQgX19uZWxlbSkgdGhyb3cgKCk7CgoKCgoKfQoj
IDE5NiAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0Jhc2ljLmgiIDIKCgojIDEgIi91c3IvaW5j
bHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMTk5ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvQmFz
aWMuaCIgMgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAxIDMKIyAyMiAiL3Vzci9p
bmNsdWRlL3N5cy90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMg
MjMgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
dHlwZXMuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAyIDMKCiMgMSAiL3Vz
ci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAyIDMK
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3N5
cy90aW1lLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMKIyAzMSAi
L3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDIgMwoKCnR5cGVkZWYgX19zdXNlY29uZHNfdCBzdXNl
Y29uZHNfdDsKCgoKCmV4dGVybiAiQyIgewojIDU2ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIg
MwpzdHJ1Y3QgdGltZXpvbmUKICB7CiAgICBpbnQgdHpfbWludXRlc3dlc3Q7CiAgICBpbnQgdHpf
ZHN0dGltZTsKICB9OwoKdHlwZWRlZiBzdHJ1Y3QgdGltZXpvbmUgKl9fcmVzdHJpY3QgX190aW1l
em9uZV9wdHJfdDsKIyA3MiAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMKZXh0ZXJuIGludCBn
ZXR0aW1lb2ZkYXkgKHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdHYsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfX3RpbWV6b25lX3B0cl90IF9fdHopIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGludCBzZXR0aW1lb2ZkYXkgKF9fY29uc3Qgc3RydWN0IHRpbWV2YWwgKl9fdHYsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lem9uZSAqX190eikgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIGludCBhZGp0aW1lIChfX2NvbnN0IHN0cnVjdCB0aW1ldmFsICpfX2RlbHRh
LAogICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpfX29sZGRlbHRhKSB0aHJvdyAo
KTsKCgoKCmVudW0gX19pdGltZXJfd2hpY2gKICB7CgogICAgSVRJTUVSX1JFQUwgPSAwLAoKCiAg
ICBJVElNRVJfVklSVFVBTCA9IDEsCgoKCiAgICBJVElNRVJfUFJPRiA9IDIKCiAgfTsKCgoKc3Ry
dWN0IGl0aW1lcnZhbAogIHsKCiAgICBzdHJ1Y3QgdGltZXZhbCBpdF9pbnRlcnZhbDsKCiAgICBz
dHJ1Y3QgdGltZXZhbCBpdF92YWx1ZTsKICB9OwoKCgoKdHlwZWRlZiBpbnQgX19pdGltZXJfd2hp
Y2hfdDsKCgoKCmV4dGVybiBpbnQgZ2V0aXRpbWVyIChfX2l0aW1lcl93aGljaF90IF9fd2hpY2gs
CiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXRpbWVydmFsICpfX3ZhbHVlKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBpbnQgc2V0aXRpbWVyIChfX2l0aW1lcl93aGljaF90IF9fd2hpY2gsCiAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBpdGltZXJ2YWwgKl9fcmVzdHJpY3Qg
X19uZXcsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXRpbWVydmFsICpfX3Jlc3RyaWN0
IF9fb2xkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1dGltZXMgKF9fY29uc3QgY2hhciAqX19m
aWxlLCBfX2NvbnN0IHN0cnVjdCB0aW1ldmFsIF9fdHZwWzJdKQogICAgIHRocm93ICgpOwojIDE2
OSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMKfQojIDIwMyAiL2hvbWUvbWF0dC9vYi9pbmNs
dWRlL09CL0Jhc2ljLmgiIDIKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLTMvaW9zdHJlYW0iIDEg
MwoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy0zL2lvc3RyZWFtLmgiIDEgMwojIDI3ICIvdXNy
L2luY2x1ZGUvZysrLTMvaW9zdHJlYW0uaCIgMwojcHJhZ21hIGludGVyZmFjZQoKCgojIDEgIi91
c3IvaW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9nKyst
My9zdHJlYW1idWYuaCIgMwojcHJhZ21hIGludGVyZmFjZQoKCgoKCgpleHRlcm4gIkMiIHsKIyAx
ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAz
CiMgMSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMKIyA5ICIvdXNyL2luY2x1ZGUvX0df
Y29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAxMCAiL3Vz
ci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2
LXJlZGhhdC1saW51eC8yLjk2L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMxMiAiL3Vzci9saWIv
Z2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8yLjk2L2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRl
ZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIg
MwojIDI0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2No
YXIuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9saWIvZ2Nj
LWxpYi9pMzg2LXJlZGhhdC1saW51eC8yLjk2L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIv
dXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3djaGFyLmgi
IDEgMwojIDUxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCiMgNjcgIi91c3IvaW5jbHVkZS93
Y2hhci5oIiAzCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19jb3VudDsKICB1bmlvbgogIHsKICAg
IHdpbnRfdCBfX3djaDsKICAgIGNoYXIgX193Y2hiWzRdOwogIH0gX192YWx1ZTsKfSBfX21ic3Rh
dGVfdDsKIyAyNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKCnR5cGVkZWYgc3RydWN0
CnsKICBfX29mZl90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvc190Owp0
eXBlZGVmIHN0cnVjdAp7CiAgX19vZmY2NF90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7
Cn0gX0dfZnBvczY0X3Q7CiMgNDQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9nY29udi5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2djb252LmgiIDMKIyAx
ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9nY29udi5o
IiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUv
d2NoYXIuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9p
bmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAxIDMKIyA1MSAiL3Vzci9pbmNsdWRlL3djaGFy
LmgiIDIgMwojIDI5ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgojIDEgIi91c3IvbGliL2dj
Yy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMSAi
L3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKCgoKCmVudW0KewogIF9fR0NPTlZfT0sgPSAwLAog
IF9fR0NPTlZfTk9DT05WLAogIF9fR0NPTlZfTk9EQiwKICBfX0dDT05WX05PTUVNLAoKICBfX0dD
T05WX0VNUFRZX0lOUFVULAogIF9fR0NPTlZfRlVMTF9PVVRQVVQsCiAgX19HQ09OVl9JTExFR0FM
X0lOUFVULAogIF9fR0NPTlZfSU5DT01QTEVURV9JTlBVVCwKCiAgX19HQ09OVl9JTExFR0FMX0RF
U0NSSVBUT1IsCiAgX19HQ09OVl9JTlRFUk5BTF9FUlJPUgp9OwoKCgplbnVtCnsKICBfX0dDT05W
X0lTX0xBU1QgPSAweDAwMDEsCiAgX19HQ09OVl9JR05PUkVfRVJST1JTID0gMHgwMDAyCn07CgoK
CnN0cnVjdCBfX2djb252X3N0ZXA7CnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YTsKc3RydWN0IF9f
Z2NvbnZfbG9hZGVkX29iamVjdDsKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YTsKCgoKdHlwZWRl
ZiBpbnQgKCpfX2djb252X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwgc3RydWN0IF9fZ2Nv
bnZfc3RlcF9kYXRhICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2ln
bmVkIGNoYXIgKiosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgY2hhciAqKiwgc2l6ZV90ICosIGludCwgaW50KTsKCgp0eXBlZGVm
IGludCAoKl9fZ2NvbnZfaW5pdF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwp0eXBlZGVm
IHZvaWQgKCpfX2djb252X2VuZF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwoKCgp0eXBl
ZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICos
IHZvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWdu
ZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNp
Z25lZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1
bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2NvbnRl
eHRfZmN0KSAodm9pZCAqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiwgdW5z
aWduZWQgY2hhciAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfcXVlcnlfZmN0KSAo
X19jb25zdCBjaGFyICosIF9fY29uc3QgY2hhciAqKiosCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5z
X2luaXRfZmN0KSAodm9pZCAqKiwgY29uc3QgY2hhciAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29u
dl90cmFuc19lbmRfZmN0KSAodm9pZCAqKTsKCnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEKewoK
ICBfX2djb252X3RyYW5zX2ZjdCBfX3RyYW5zX2ZjdDsKICBfX2djb252X3RyYW5zX2NvbnRleHRf
ZmN0IF9fdHJhbnNfY29udGV4dF9mY3Q7CiAgX19nY29udl90cmFuc19lbmRfZmN0IF9fdHJhbnNf
ZW5kX2ZjdDsKICB2b2lkICpfX2RhdGE7CiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX19u
ZXh0Owp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwCnsKICBzdHJ1Y3QgX19nY29udl9sb2FkZWRf
b2JqZWN0ICpfX3NobGliX2hhbmRsZTsKICBfX2NvbnN0IGNoYXIgKl9fbW9kbmFtZTsKCiAgaW50
IF9fY291bnRlcjsKCiAgY2hhciAqX19mcm9tX25hbWU7CiAgY2hhciAqX190b19uYW1lOwoKICBf
X2djb252X2ZjdCBfX2ZjdDsKICBfX2djb252X2luaXRfZmN0IF9faW5pdF9mY3Q7CiAgX19nY29u
dl9lbmRfZmN0IF9fZW5kX2ZjdDsKCgoKICBpbnQgX19taW5fbmVlZGVkX2Zyb207CiAgaW50IF9f
bWF4X25lZWRlZF9mcm9tOwogIGludCBfX21pbl9uZWVkZWRfdG87CiAgaW50IF9fbWF4X25lZWRl
ZF90bzsKCgogIGludCBfX3N0YXRlZnVsOwoKICB2b2lkICpfX2RhdGE7Cn07CgoKCnN0cnVjdCBf
X2djb252X3N0ZXBfZGF0YQp7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWY7CiAgdW5zaWduZWQg
Y2hhciAqX19vdXRidWZlbmQ7CgoKCiAgaW50IF9fZmxhZ3M7CgoKCiAgaW50IF9faW52b2NhdGlv
bl9jb3VudGVyOwoKCgogIGludCBfX2ludGVybmFsX3VzZTsKCiAgX19tYnN0YXRlX3QgKl9fc3Rh
dGVwOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7CgoKCiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0
YSAqX190cmFuczsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX19nY29udl9pbmZvCnsKICBzaXplX3Qg
X19uc3RlcHM7CiAgc3RydWN0IF9fZ2NvbnZfc3RlcCAqX19zdGVwczsKICBfX2V4dGVuc2lvbl9f
IHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGEgWzBdOwp9ICpfX2djb252X3Q7CiMgNDUg
Ii91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCnR5cGVkZWYgdW5pb24KewogIHN0cnVjdCBf
X2djb252X2luZm8gX19jZDsKICBzdHJ1Y3QKICB7CiAgICBzdHJ1Y3QgX19nY29udl9pbmZvIF9f
Y2Q7CiAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhOwogIH0gX19jb21iaW5lZDsK
fSBfR19pY29udl90OwoKdHlwZWRlZiBpbnQgX0dfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19t
b2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgX0dfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgo
X19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3QgX19h
dHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9H
X3VpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwojIDMxICIvdXNy
L2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgNTEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMgMSAi
L3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8yLjk2L2luY2x1ZGUvc3RkYXJnLmgi
IDEgMwojIDQzICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzIuOTYvaW5jbHVk
ZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0Owoj
IDUyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgMTU4ICIvdXNyL2luY2x1ZGUvbGliaW8u
aCIgMwpzdHJ1Y3QgX0lPX2p1bXBfdDsgc3RydWN0IF9JT19GSUxFOwojIDE2OCAiL3Vzci9pbmNs
dWRlL2xpYmlvLmgiIDMKdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoKCgoKc3RydWN0IF9JT19t
YXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9z
YnVmOwoKCgogIGludCBfcG9zOwojIDE5MSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKfTsKCgpl
bnVtIF9fY29kZWN2dF9yZXN1bHQKewogIF9fY29kZWN2dF9vaywKICBfX2NvZGVjdnRfcGFydGlh
bCwKICBfX2NvZGVjdnRfZXJyb3IsCiAgX19jb2RlY3Z0X25vY29udgp9OwojIDI1OSAiL3Vzci9p
bmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwoKCgoKICBj
aGFyKiBfSU9fcmVhZF9wdHI7CiAgY2hhciogX0lPX3JlYWRfZW5kOwogIGNoYXIqIF9JT19yZWFk
X2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX3B0cjsKICBj
aGFyKiBfSU9fd3JpdGVfZW5kOwogIGNoYXIqIF9JT19idWZfYmFzZTsKICBjaGFyKiBfSU9fYnVm
X2VuZDsKCiAgY2hhciAqX0lPX3NhdmVfYmFzZTsKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7CiAg
Y2hhciAqX0lPX3NhdmVfZW5kOwoKICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7CgogIHN0
cnVjdCBfSU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsKICBpbnQgX2Jsa3NpemU7CiAg
X19vZmZfdCBfb2xkX29mZnNldDsKCgoKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBz
aWduZWQgY2hhciBfdnRhYmxlX29mZnNldDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsKCgoKICBfSU9f
bG9ja190ICpfbG9jazsKIyAzMDMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiAgX19vZmY2NF90
IF9vZmZzZXQ7CgoKCgoKICB2b2lkICpfX3BhZDE7CiAgdm9pZCAqX19wYWQyOwoKICBpbnQgX21v
ZGU7CgogIGNoYXIgX3VudXNlZDJbMTUgKiBzaXplb2YgKGludCkgLSAyICogc2l6ZW9mICh2b2lk
ICopXTsKCn07CgoKCgoKc3RydWN0IF9JT19GSUxFX3BsdXM7CgpleHRlcm4gc3RydWN0IF9JT19G
SUxFX3BsdXMgX0lPXzJfMV9zdGRpbl87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9f
Ml8xX3N0ZG91dF87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87
CiMgMzQyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3Jl
YWRfZm4gKHZvaWQgKl9fY29va2llLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKTsKCgoK
CgoKCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fd3JpdGVfZm4gKHZvaWQgKl9fY29va2llLCBfX2Nv
bnN0IGNoYXIgKl9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
X19uKTsKCgoKCgoKCnR5cGVkZWYgaW50IF9faW9fc2Vla19mbiAodm9pZCAqX19jb29raWUsIF9f
b2ZmNjRfdCAqX19wb3MsIGludCBfX3cpOwoKCnR5cGVkZWYgaW50IF9faW9fY2xvc2VfZm4gKHZv
aWQgKl9fY29va2llKTsKIyAzOTEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiAiQyIg
ewoKCmV4dGVybiBpbnQgX191bmRlcmZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4g
aW50IF9fdWZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9fb3ZlcmZsb3cg
KF9JT19GSUxFICosIGludCkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193dW5kZXJmbG93IChf
SU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3d1ZmxvdyAoX0lPX0ZJTEUgKikg
dGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193b3ZlcmZsb3cgKF9JT19GSUxFICosIHdpbnRfdCkg
dGhyb3cgKCk7CiMgNDI0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT19n
ZXRjIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3B1dGMgKGludCBf
X2MsIF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVvZiAoX0lPX0ZJ
TEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mZXJyb3IgKF9JT19GSUxFICpfX2Zw
KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX0lPX3BlZWtjX2xvY2tlZCAoX0lPX0ZJTEUgKl9fZnAp
IHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUgKF9JT19GSUxFICopIHRo
cm93ICgpOwpleHRlcm4gdm9pZCBfSU9fZnVubG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgp
OwpleHRlcm4gaW50IF9JT19mdHJ5bG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwojIDQ1
NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAoX0lPX0ZJ
TEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cgKCk7CmV4dGVy
biBpbnQgX0lPX3ZmcHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmljdCwgY29uc3QgY2hhciAqX19y
ZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0KSB0aHJvdyAo
KTsKZXh0ZXJuIF9fc3NpemVfdCBfSU9fcGFkbiAoX0lPX0ZJTEUgKiwgaW50LCBfX3NzaXplX3Qp
IHRocm93ICgpOwpleHRlcm4gc2l6ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBz
aXplX3QpIHRocm93ICgpOwoKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla29mZiAoX0lPX0ZJTEUg
KiwgX19vZmY2NF90LCBpbnQsIGludCkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3QgX0lPX3Nl
ZWtwb3MgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50KSB0aHJvdyAoKTsKCmV4dGVybiB2b2lk
IF9JT19mcmVlX2JhY2t1cF9hcmVhIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKIyA1MTAgIi91c3Iv
aW5jbHVkZS9saWJpby5oIiAzCn0KIyAzNyAiL3Vzci9pbmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5o
IiAyIDMKfQoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8yLjk2L2lu
Y2x1ZGUvc3RkYXJnLmgiIDEgMwojIDExMCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1s
aW51eC8yLjk2L2luY2x1ZGUvc3RkYXJnLmgiIDMKdHlwZWRlZiBfX2dudWNfdmFfbGlzdCB2YV9s
aXN0OwojIDQxICIvdXNyL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDIgMwojIDY1ICIvdXNy
L2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDMKZXh0ZXJuICJDKysiIHsKY2xhc3MgaXN0cmVh
bTsKY2xhc3Mgb3N0cmVhbTsgY2xhc3Mgc3RyZWFtYnVmOwoKCgoKCgp0eXBlZGVmIF9fb2ZmNjRf
dCBzdHJlYW1vZmY7CnR5cGVkZWYgX19vZmY2NF90IHN0cmVhbXBvczsKCgoKCnR5cGVkZWYgX19z
c2l6ZV90IHN0cmVhbXNpemU7Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX19mbXRmbGFnczsKdHlw
ZWRlZiB1bnNpZ25lZCBjaGFyIF9faW9zdGF0ZTsKCnN0cnVjdCBfaW9zX2ZpZWxkcwp7CiAgICBz
dHJlYW1idWYgKl9zdHJidWY7CiAgICBvc3RyZWFtKiBfdGllOwogICAgaW50IF93aWR0aDsKICAg
IF9fZm10ZmxhZ3MgX2ZsYWdzOwogICAgd2NoYXJfdCBfZmlsbDsKICAgIF9faW9zdGF0ZSBfc3Rh
dGU7CiAgICBfX2lvc3RhdGUgX2V4Y2VwdGlvbnM7CiAgICBpbnQgX3ByZWNpc2lvbjsKCiAgICB2
b2lkICpfYXJyYXlzOwp9OwojIDEyNiAiL3Vzci9pbmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAz
CmNsYXNzIGlvcyA6IHB1YmxpYyBfaW9zX2ZpZWxkcyB7CiAgaW9zJiBvcGVyYXRvcj0oaW9zJik7
CiAgaW9zIChjb25zdCBpb3MmKTsKICBwdWJsaWM6CiAgICB0eXBlZGVmIF9fZm10ZmxhZ3MgZm10
ZmxhZ3M7CiAgICB0eXBlZGVmIGludCBpb3N0YXRlOwogICAgdHlwZWRlZiBpbnQgb3Blbm1vZGU7
CiAgICB0eXBlZGVmIF9fc3NpemVfdCBzdHJlYW1zaXplOwogICAgZW51bSBpb19zdGF0ZSB7CiAg
ICAgICAgZ29vZGJpdCA9IDAsCiAgICAgICAgZW9mYml0ID0gMSwKICAgICAgICBmYWlsYml0ID0g
MiwKICAgICAgICBiYWRiaXQgPSA0IH07CiAgICBlbnVtIG9wZW5fbW9kZSB7CiAgICAgICAgaW4g
PSAxLAogICAgICAgIG91dCA9IDIsCiAgICAgICAgYXRlID0gNCwKICAgICAgICBhcHAgPSA4LAog
ICAgICAgIHRydW5jID0gMTYsCiAgICAgICAgbm9jcmVhdGUgPSAzMiwKICAgICAgICBub3JlcGxh
Y2UgPSA2NCwKICAgICAgICBiaW4gPSAxMjgsCiAgICAgICAgYmluYXJ5ID0gMTI4IH07CiAgICBl
bnVtIHNlZWtfZGlyIHsgYmVnLCBjdXIsIGVuZH07CiAgICB0eXBlZGVmIGVudW0gc2Vla19kaXIg
c2Vla2RpcjsKCiAgICBlbnVtIHsgc2tpcHdzPTAxLAogICAgICAgICAgIGxlZnQ9MDIsIHJpZ2h0
PTA0LCBpbnRlcm5hbD0wMTAsCiAgICAgICAgICAgZGVjPTAyMCwgb2N0PTA0MCwgaGV4PTAxMDAs
CiAgICAgICAgICAgc2hvd2Jhc2U9MDIwMCwgc2hvd3BvaW50PTA0MDAsCiAgICAgICAgICAgdXBw
ZXJjYXNlPTAxMDAwLCBzaG93cG9zPTAyMDAwLAogICAgICAgICAgIHNjaWVudGlmaWM9MDQwMDAs
IGZpeGVkPTAxMDAwMCwKICAgICAgICAgICB1bml0YnVmPTAyMDAwMCwgc3RkaW89MDQwMDAwCgoK
CiAgICAgICAgICAgfTsKICAgIGVudW0gewogICAgICAgIGJhc2VmaWVsZD1kZWMrb2N0K2hleCwK
ICAgICAgICBmbG9hdGZpZWxkID0gc2NpZW50aWZpYytmaXhlZCwKICAgICAgICBhZGp1c3RmaWVs
ZCA9IGxlZnQrcmlnaHQraW50ZXJuYWwKICAgIH07CiMgMTc5ICIvdXNyL2luY2x1ZGUvZysrLTMv
c3RyZWFtYnVmLmgiIDMKICAgIG9zdHJlYW0qIHRpZSgpIGNvbnN0IHsgcmV0dXJuIF90aWU7IH0K
ICAgIG9zdHJlYW0qIHRpZShvc3RyZWFtKiB2YWwpIHsgb3N0cmVhbSogc2F2ZT1fdGllOyBfdGll
PXZhbDsgcmV0dXJuIHNhdmU7IH0KCgogICAgd2NoYXJfdCBmaWxsKCkgY29uc3QgeyByZXR1cm4g
X2ZpbGw7IH0KICAgIHdjaGFyX3QgZmlsbCh3Y2hhcl90IG5ld2YpCiAgICAgICAge3djaGFyX3Qg
b2xkZiA9IF9maWxsOyBfZmlsbCA9IG5ld2Y7IHJldHVybiBvbGRmO30KICAgIGZtdGZsYWdzIGZs
YWdzKCkgY29uc3QgeyByZXR1cm4gX2ZsYWdzOyB9CiAgICBmbXRmbGFncyBmbGFncyhmbXRmbGFn
cyBuZXdfdmFsKSB7CiAgICAgICAgZm10ZmxhZ3Mgb2xkX3ZhbCA9IF9mbGFnczsgX2ZsYWdzID0g
bmV3X3ZhbDsgcmV0dXJuIG9sZF92YWw7IH0KICAgIGludCBwcmVjaXNpb24oKSBjb25zdCB7IHJl
dHVybiBfcHJlY2lzaW9uOyB9CiAgICBpbnQgcHJlY2lzaW9uKGludCBuZXdwKSB7CiAgICAgICAg
dW5zaWduZWQgc2hvcnQgb2xkcCA9IF9wcmVjaXNpb247IF9wcmVjaXNpb24gPSAodW5zaWduZWQg
c2hvcnQpbmV3cDsKICAgICAgICByZXR1cm4gb2xkcDsgfQogICAgZm10ZmxhZ3Mgc2V0ZihmbXRm
bGFncyB2YWwpIHsKICAgICAgICBmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwogICAgICAgIF9m
bGFncyB8PSB2YWw7IHJldHVybiBvbGRiaXRzOyB9CiAgICBmbXRmbGFncyBzZXRmKGZtdGZsYWdz
IHZhbCwgZm10ZmxhZ3MgbWFzaykgewogICAgICAgIGZtdGZsYWdzIG9sZGJpdHMgPSBfZmxhZ3M7
CiAgICAgICAgX2ZsYWdzID0gKF9mbGFncyAmIH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsgcmV0dXJu
IG9sZGJpdHM7IH0KICAgIGZtdGZsYWdzIHVuc2V0ZihmbXRmbGFncyBtYXNrKSB7CiAgICAgICAg
Zm10ZmxhZ3Mgb2xkYml0cyA9IF9mbGFnczsKICAgICAgICBfZmxhZ3MgJj0gfm1hc2s7IHJldHVy
biBvbGRiaXRzOyB9CiAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBfd2lkdGg7IH0KICAg
IGludCB3aWR0aChpbnQgdmFsKSB7IGludCBzYXZlID0gX3dpZHRoOyBfd2lkdGggPSB2YWw7IHJl
dHVybiBzYXZlOyB9CgoKCgogICAgdm9pZCBfdGhyb3dfZmFpbHVyZSgpIGNvbnN0IHsgfQoKICAg
IHZvaWQgY2xlYXIoaW9zdGF0ZSBzdGF0ZSA9IDApIHsKICAgICAgICBfc3RhdGUgPSBfc3RyYnVm
ID8gc3RhdGUgOiBzdGF0ZXxiYWRiaXQ7CiAgICAgICAgaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25z
KSBfdGhyb3dfZmFpbHVyZSgpOyB9CiAgICB2b2lkIHNldChpb3N0YXRlIGZsYWcpIHsgX3N0YXRl
IHw9IGZsYWc7CiAgICAgICAgaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVy
ZSgpOyB9CiAgICB2b2lkIHNldHN0YXRlKGlvc3RhdGUgZmxhZykgeyBfc3RhdGUgfD0gZmxhZzsK
ICAgICAgICBpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KICAg
IGludCBnb29kKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlID09IDA7IH0KICAgIGludCBlb2YoKSBj
b25zdCB7IHJldHVybiBfc3RhdGUgJiBpb3M6OmVvZmJpdDsgfQogICAgaW50IGZhaWwoKSBjb25z
dCB7IHJldHVybiBfc3RhdGUgJiAoaW9zOjpiYWRiaXR8aW9zOjpmYWlsYml0KTsgfQogICAgaW50
IGJhZCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAmIGlvczo6YmFkYml0OyB9CiAgICBpb3N0YXRl
IHJkc3RhdGUoKSBjb25zdCB7IHJldHVybiBfc3RhdGU7IH0KICAgIG9wZXJhdG9yIHZvaWQqKCkg
Y29uc3QgeyByZXR1cm4gZmFpbCgpID8gKHZvaWQqKTAgOiAodm9pZCopKC0xKTsgfQogICAgaW50
IG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIGZhaWwoKTsgfQogICAgaW9zdGF0ZSBleGNlcHRp
b25zKCkgY29uc3QgeyByZXR1cm4gX2V4Y2VwdGlvbnM7IH0KICAgIHZvaWQgZXhjZXB0aW9ucyhp
b3N0YXRlIGVuYWJsZSkgewogICAgICAgIF9leGNlcHRpb25zID0gZW5hYmxlOwogICAgICAgIGlm
IChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQoKICAgIHN0cmVhbWJ1
ZiogcmRidWYoKSBjb25zdCB7IHJldHVybiBfc3RyYnVmOyB9CiAgICBzdHJlYW1idWYqIHJkYnVm
KHN0cmVhbWJ1ZiAqX3MpIHsKICAgICAgc3RyZWFtYnVmICpfb2xkID0gX3N0cmJ1ZjsgX3N0cmJ1
ZiA9IF9zOyBjbGVhciAoKTsgcmV0dXJuIF9vbGQ7IH0KCiAgICBzdGF0aWMgaW50IHN5bmNfd2l0
aF9zdGRpbyhpbnQgb24pOwogICAgc3RhdGljIHZvaWQgc3luY193aXRoX3N0ZGlvKCkgeyBzeW5j
X3dpdGhfc3RkaW8oMSk7IH0KICAgIHN0YXRpYyBmbXRmbGFncyBiaXRhbGxvYygpOwogICAgc3Rh
dGljIGludCB4YWxsb2MoKTsKICAgIHZvaWQqJiBwd29yZChpbnQpOwogICAgdm9pZCogcHdvcmQo
aW50KSBjb25zdDsKICAgIGxvbmcmIGl3b3JkKGludCk7CiAgICBsb25nIGl3b3JkKGludCkgY29u
c3Q7CiMgMjUxICIvdXNyL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDMKICAgIGNsYXNzIElu
aXQgewogICAgcHVibGljOgogICAgICBJbml0ICgpIHsgfQogICAgfTsKCiAgcHJvdGVjdGVkOgog
ICAgaW5saW5lIGlvcyhzdHJlYW1idWYqIHNiID0gMCwgb3N0cmVhbSogdGllX3RvID0gMCk7CiAg
ICBpbmxpbmUgdmlydHVhbCB+aW9zKCk7CiAgICBpbmxpbmUgdm9pZCBpbml0KHN0cmVhbWJ1Ziog
c2IsIG9zdHJlYW0qIHRpZSA9IDApOwp9OwoKCgoKdHlwZWRlZiBpb3M6OnNlZWtfZGlyIF9zZWVr
X2RpcjsKIyAyNzYgIi91c3IvaW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMwpjbGFzcyBzdHJl
YW1tYXJrZXIgOiBwcml2YXRlIF9JT19tYXJrZXIgewogICAgZnJpZW5kIGNsYXNzIHN0cmVhbWJ1
ZjsKICAgIHZvaWQgc2V0X29mZnNldChpbnQgb2Zmc2V0KSB7IF9wb3MgPSBvZmZzZXQ7IH0KICBw
dWJsaWM6CiAgICBzdHJlYW1tYXJrZXIoc3RyZWFtYnVmICpzYik7CiAgICB+c3RyZWFtbWFya2Vy
KCk7CiAgICBpbnQgc2F2aW5nKCkgeyByZXR1cm4gMTsgfQogICAgaW50IGRlbHRhKHN0cmVhbW1h
cmtlciYpOwogICAgaW50IGRlbHRhKCk7Cn07CgpzdHJ1Y3Qgc3RyZWFtYnVmIDogcHVibGljIF9J
T19GSUxFIHsKICAgIGZyaWVuZCBjbGFzcyBpb3M7CiAgICBmcmllbmQgY2xhc3MgaXN0cmVhbTsK
ICAgIGZyaWVuZCBjbGFzcyBvc3RyZWFtOwogICAgZnJpZW5kIGNsYXNzIHN0cmVhbW1hcmtlcjsK
ICAgIGNvbnN0IHZvaWQgKiZfdnRhYmxlKCkgeyByZXR1cm4gKihjb25zdCB2b2lkKiopKChfSU9f
RklMRSopdGhpcyArIDEpOyB9CiAgcHJvdGVjdGVkOgogICAgc3RhdGljIHN0cmVhbWJ1ZiogX2xp
c3RfYWxsOwogICAgX0lPX0ZJTEUqJiB4Y2hhaW4oKSB7IHJldHVybiBfY2hhaW47IH0KICAgIHZv
aWQgX3VuX2xpbmsoKTsKICAgIHZvaWQgX2xpbmtfaW4oKTsKICAgIGNoYXIqIGdwdHIoKSBjb25z
dAogICAgICB7IHJldHVybiBfZmxhZ3MgJiAweDEwMCA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVh
ZF9wdHI7IH0KICAgIGNoYXIqIHBwdHIoKSBjb25zdCB7IHJldHVybiBfSU9fd3JpdGVfcHRyOyB9
CiAgICBjaGFyKiBlZ3B0cigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9mbGFncyAmIDB4MTAwID8g
X0lPX3NhdmVfZW5kIDogX0lPX3JlYWRfZW5kOyB9CiAgICBjaGFyKiBlcHB0cigpIGNvbnN0IHsg
cmV0dXJuIF9JT193cml0ZV9lbmQ7IH0KICAgIGNoYXIqIHBiYXNlKCkgY29uc3QgeyByZXR1cm4g
X0lPX3dyaXRlX2Jhc2U7IH0KICAgIGNoYXIqIGViYWNrKCkgY29uc3QKICAgICAgeyByZXR1cm4g
X2ZsYWdzICYgMHgxMDAgPyBfSU9fc2F2ZV9iYXNlIDogX0lPX3JlYWRfYmFzZTt9CiAgICBjaGFy
KiBiYXNlKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1Zl9iYXNlOyB9CiAgICBjaGFyKiBlYnVmKCkg
Y29uc3QgeyByZXR1cm4gX0lPX2J1Zl9lbmQ7IH0KICAgIGludCBibGVuKCkgY29uc3QgeyByZXR1
cm4gX0lPX2J1Zl9lbmQgLSBfSU9fYnVmX2Jhc2U7IH0KICAgIHZvaWQgeHB1dF9jaGFyKGNoYXIg
YykgeyAqX0lPX3dyaXRlX3B0cisrID0gYzsgfQogICAgaW50IHhmbGFncygpIHsgcmV0dXJuIF9m
bGFnczsgfQogICAgaW50IHhmbGFncyhpbnQgZikge2ludCBmbCA9IF9mbGFnczsgX2ZsYWdzID0g
ZjsgcmV0dXJuIGZsO30KICAgIHZvaWQgeHNldGZsYWdzKGludCBmKSB7IF9mbGFncyB8PSBmOyB9
CiAgICB2b2lkIHhzZXRmbGFncyhpbnQgZiwgaW50IG1hc2spCiAgICAgIHsgX2ZsYWdzID0gKF9m
bGFncyAmIH5tYXNrKSB8IChmICYgbWFzayk7IH0KICAgIHZvaWQgZ2J1bXAoaW50IG4pCiAgICAg
IHsgX2ZsYWdzICYgMHgxMDAgPyAoX0lPX3NhdmVfYmFzZSs9bik6KF9JT19yZWFkX3B0cis9bik7
fQogICAgdm9pZCBwYnVtcChpbnQgbikgeyBfSU9fd3JpdGVfcHRyICs9IG47IH0KICAgIHZvaWQg
c2V0YihjaGFyKiBiLCBjaGFyKiBlYiwgaW50IGE9MCk7CiAgICB2b2lkIHNldHAoY2hhciogcCwg
Y2hhciogZXApCiAgICAgIHsgX0lPX3dyaXRlX2Jhc2U9X0lPX3dyaXRlX3B0cj1wOyBfSU9fd3Jp
dGVfZW5kPWVwOyB9CiAgICB2b2lkIHNldGcoY2hhciogZWIsIGNoYXIqIGcsIGNoYXIgKmVnKSB7
CiAgICAgIGlmIChfZmxhZ3MgJiAweDEwMCkgX0lPX2ZyZWVfYmFja3VwX2FyZWEodGhpcyk7CiAg
ICAgIF9JT19yZWFkX2Jhc2UgPSBlYjsgX0lPX3JlYWRfcHRyID0gZzsgX0lPX3JlYWRfZW5kID0g
ZWc7IH0KICAgIGNoYXIgKnNob3J0YnVmKCkgeyByZXR1cm4gX3Nob3J0YnVmOyB9CgogICAgaW50
IGluX2JhY2t1cCgpIHsgcmV0dXJuIF9mbGFncyAmIDB4MTAwOyB9CgogICAgY2hhciAqR2Jhc2Uo
KSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVhZF9iYXNlOyB9
CgogICAgY2hhciAqZUdwdHIoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19zYXZlX2VuZCA6
IF9JT19yZWFkX2VuZDsgfQoKICAgIGNoYXIgKkJiYXNlKCkgeyByZXR1cm4gaW5fYmFja3VwKCkg
PyBfSU9fcmVhZF9iYXNlIDogX0lPX3NhdmVfYmFzZTsgfQogICAgY2hhciAqQnB0cigpIHsgcmV0
dXJuIF9JT19iYWNrdXBfYmFzZTsgfQoKICAgIGNoYXIgKmVCcHRyKCkgeyByZXR1cm4gaW5fYmFj
a3VwKCkgPyBfSU9fcmVhZF9lbmQgOiBfSU9fc2F2ZV9lbmQ7IH0KICAgIGNoYXIgKk5iYXNlKCkg
eyByZXR1cm4gX0lPX3NhdmVfYmFzZTsgfQogICAgY2hhciAqZU5wdHIoKSB7IHJldHVybiBfSU9f
c2F2ZV9lbmQ7IH0KICAgIGludCBoYXZlX2JhY2t1cCgpIHsgcmV0dXJuIF9JT19zYXZlX2Jhc2Ug
IT0gX19udWxsOyB9CiAgICBpbnQgaGF2ZV9tYXJrZXJzKCkgeyByZXR1cm4gX21hcmtlcnMgIT0g
X19udWxsOyB9CiAgICB2b2lkIGZyZWVfYmFja3VwX2FyZWEoKTsKICAgIHZvaWQgdW5zYXZlX21h
cmtlcnMoKTsKICAgIGludCBwdXRfbW9kZSgpIHsgcmV0dXJuIF9mbGFncyAmIDB4ODAwOyB9CiAg
ICBpbnQgc3dpdGNoX3RvX2dldF9tb2RlKCk7CgogICAgc3RyZWFtYnVmKGludCBmbGFncz0wKTsK
ICBwdWJsaWM6CiAgICBzdGF0aWMgaW50IGZsdXNoX2FsbCgpOwogICAgc3RhdGljIHZvaWQgZmx1
c2hfYWxsX2xpbmVidWZmZXJlZCgpOwogICAgdmlydHVhbCB+c3RyZWFtYnVmKCk7CiAgICB2aXJ0
dWFsIGludCBvdmVyZmxvdyhpbnQgYyA9ICgtMSkpOwogICAgdmlydHVhbCBpbnQgdW5kZXJmbG93
KCk7CiAgICB2aXJ0dWFsIGludCB1ZmxvdygpOwogICAgdmlydHVhbCBpbnQgcGJhY2tmYWlsKGlu
dCBjKTsKCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgeHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVh
bXNpemUgbik7CiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgeHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNp
emUgbik7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGly
LCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtw
b3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KTsKCiAgICBzdHJl
YW1wb3MgcHVic2Vla29mZihzdHJlYW1vZmYgbywgX3NlZWtfZGlyIGQsIGludCBtb2RlPWlvczo6
aW58aW9zOjpvdXQpCiAgICAgIHsgcmV0dXJuIF9JT19zZWVrb2ZmICh0aGlzLCBvLCBkLCBtb2Rl
KTsgfQogICAgc3RyZWFtcG9zIHB1YnNlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBp
b3M6OmlufGlvczo6b3V0KQogICAgICB7IHJldHVybiBfSU9fc2Vla3BvcyAodGhpcywgcG9zLCBt
b2RlKTsgfQogICAgc3RyZWFtcG9zIHNzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQg
bW9kZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHN0cmVhbXBvcyBzc2Vla3BvcyhzdHJlYW1wb3Mg
cG9zLCBpbnQgbW9kZSA9IGlvczo6aW58aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1idWYq
IHNldGJ1ZihjaGFyKiBwLCBpbnQgbGVuKTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICAgIHZp
cnR1YWwgaW50IGRvYWxsb2NhdGUoKTsKCiAgICBpbnQgc2Vla21hcmsoc3RyZWFtbWFya2VyJiBt
YXJrLCBpbnQgZGVsdGEgPSAwKTsKICAgIGludCBzcHV0YmFja2MoY2hhciBjKTsKICAgIGludCBz
dW5nZXRjKCk7CiAgICBpbnQgdW5idWZmZXJlZCgpIHsgcmV0dXJuIF9mbGFncyAmIDIgPyAxIDog
MDsgfQogICAgaW50IGxpbmVidWZmZXJlZCgpIHsgcmV0dXJuIF9mbGFncyAmIDB4MjAwID8gMSA6
IDA7IH0KICAgIHZvaWQgdW5idWZmZXJlZChpbnQgaSkKICAgICAgICB7IGlmIChpKSBfZmxhZ3Mg
fD0gMjsgZWxzZSBfZmxhZ3MgJj0gfjI7IH0KICAgIHZvaWQgbGluZWJ1ZmZlcmVkKGludCBpKQog
ICAgICAgIHsgaWYgKGkpIF9mbGFncyB8PSAweDIwMDsgZWxzZSBfZmxhZ3MgJj0gfjB4MjAwOyB9
CiAgICBpbnQgYWxsb2NhdGUoKSB7CiAgICAgICAgaWYgKGJhc2UoKSB8fCB1bmJ1ZmZlcmVkKCkp
IHJldHVybiAwOwogICAgICAgIGVsc2UgcmV0dXJuIGRvYWxsb2NhdGUoKTsgfQoKICAgIHZvaWQg
YWxsb2NidWYoKSB7IGlmIChiYXNlKCkgPT0gX19udWxsKSBkb2FsbG9jYnVmKCk7IH0KICAgIHZv
aWQgZG9hbGxvY2J1ZigpOwogICAgaW50IGluX2F2YWlsKCkgeyByZXR1cm4gX0lPX3JlYWRfZW5k
IC0gX0lPX3JlYWRfcHRyOyB9CiAgICBpbnQgb3V0X3dhaXRpbmcoKSB7IHJldHVybiBfSU9fd3Jp
dGVfcHRyIC0gX0lPX3dyaXRlX2Jhc2U7IH0KICAgIHN0cmVhbXNpemUgc3B1dG4oY29uc3QgY2hh
ciogcywgc3RyZWFtc2l6ZSBuKSB7IHJldHVybiB4c3B1dG4ocywgbik7IH0KICAgIHN0cmVhbXNp
emUgcGFkbihjaGFyIHBhZCwgc3RyZWFtc2l6ZSBuKSB7IHJldHVybiBfSU9fcGFkbih0aGlzLCBw
YWQsIG4pOyB9CiAgICBzdHJlYW1zaXplIHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbikgeyBy
ZXR1cm4gX0lPX3NnZXRuKHRoaXMsIHMsIG4pOyB9CiAgICBpbnQgaWdub3JlKGludCk7CiAgICBp
bnQgZ2V0X2NvbHVtbigpOwogICAgaW50IHNldF9jb2x1bW4oaW50KTsKICAgIGxvbmcgc2dldGxp
bmUoY2hhciogYnVmLCBzaXplX3QgbiwgY2hhciBkZWxpbSwgaW50IHB1dGJhY2tfZGVsaW0pOwog
ICAgaW50IHNwdXRjKGludCBjKSB7IHJldHVybiBfSU9fcHV0YyhjLCB0aGlzKTsgfQogICAgaW50
IHNidW1wYygpIHsgcmV0dXJuIF9JT19nZXRjKHRoaXMpOyB9CiAgICBpbnQgc2dldGMoKSB7IHJl
dHVybiAoKHRoaXMpLT5fSU9fcmVhZF9wdHIgPj0gKHRoaXMpLT5fSU9fcmVhZF9lbmQgJiYgX191
bmRlcmZsb3cgKHRoaXMpID09ICgtMSkgPyAoLTEpIDogKih1bnNpZ25lZCBjaGFyICopICh0aGlz
KS0+X0lPX3JlYWRfcHRyKTsgfQogICAgaW50IHNuZXh0YygpIHsKICAgICAgICBpZiAoX0lPX3Jl
YWRfcHRyID49IF9JT19yZWFkX2VuZCAmJiBfX3VuZGVyZmxvdyh0aGlzKSA9PSAoLTEpKQogICAg
ICAgICAgcmV0dXJuICgtMSk7CiAgICAgICAgZWxzZSByZXR1cm4gX0lPX3JlYWRfcHRyKyssIHNn
ZXRjKCk7IH0KICAgIHZvaWQgc3Rvc3NjKCkgeyBpZiAoX0lPX3JlYWRfcHRyIDwgX0lPX3JlYWRf
ZW5kKSBfSU9fcmVhZF9wdHIrKzsgfQogICAgaW50IHZzY2FuKGNoYXIgY29uc3QgKmZtdDAsIF9f
Z251Y192YV9saXN0IGFwLCBpb3MqIHN0cmVhbSA9IF9fbnVsbCk7CiAgICBpbnQgc2NhbihjaGFy
IGNvbnN0ICpmbXQwIC4uLik7CiAgICBpbnQgdmZvcm0oY2hhciBjb25zdCAqZm10MCwgX19nbnVj
X3ZhX2xpc3QgYXApOwogICAgaW50IGZvcm0oY2hhciBjb25zdCAqZm10MCAuLi4pOwoKCgoKICAg
IHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfcmVhZChjaGFyKiBidWYsIHN0cmVhbXNpemUgc2l6ZSk7
CiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3dyaXRlKGNvbnN0IGNoYXIqLCBzdHJlYW1zaXpl
KTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHN5c19zZWVrKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsK
ICAgIHZpcnR1YWwgaW50IHN5c19jbG9zZSgpOwogICAgdmlydHVhbCBpbnQgc3lzX3N0YXQodm9p
ZCopOwoKICAgIHZpcnR1YWwgaW50IHNob3dtYW55YygpOwogICAgdmlydHVhbCB2b2lkIGltYnVl
KHZvaWQgKik7Cgp9OwoKCgoKY2xhc3MgZmlsZWJ1ZiA6IHB1YmxpYyBzdHJlYW1idWYgewogIHBy
b3RlY3RlZDoKICAgIHZvaWQgaW5pdCgpOwogIHB1YmxpYzoKICAgIHN0YXRpYyBjb25zdCBpbnQg
b3BlbnByb3Q7CiAgICBmaWxlYnVmKCk7CiAgICBmaWxlYnVmKGludCBmZCk7CiAgICBmaWxlYnVm
KGludCBmZCwgY2hhciogcCwgaW50IGxlbik7CgoKCiAgICB+ZmlsZWJ1ZigpOwogICAgZmlsZWJ1
ZiogYXR0YWNoKGludCBmZCk7CiAgICBmaWxlYnVmKiBvcGVuKGNvbnN0IGNoYXIgKmZpbGVuYW1l
LCBjb25zdCBjaGFyICptb2RlKTsKICAgIGZpbGVidWYqIG9wZW4oY29uc3QgY2hhciAqZmlsZW5h
bWUsIGlvczo6b3Blbm1vZGUgbW9kZSwgaW50IHByb3QgPSAwNjY0KTsKICAgIHZpcnR1YWwgaW50
IHVuZGVyZmxvdygpOwogICAgdmlydHVhbCBpbnQgb3ZlcmZsb3coaW50IGMgPSAoLTEpKTsKICAg
IGludCBpc19vcGVuKCkgY29uc3QgeyByZXR1cm4gX2ZpbGVubyA+PSAwOyB9CiAgICBpbnQgZmQo
KSBjb25zdCB7IHJldHVybiBpc19vcGVuKCkgPyBfZmlsZW5vIDogKC0xKTsgfQogICAgZmlsZWJ1
ZiogY2xvc2UoKTsKICAgIHZpcnR1YWwgaW50IGRvYWxsb2NhdGUoKTsKICAgIHZpcnR1YWwgc3Ry
ZWFtcG9zIHNlZWtvZmYoc3RyZWFtb2ZmLCBfc2Vla19kaXIsIGludCBtb2RlPWlvczo6aW58aW9z
OjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1idWYqIHNldGJ1ZihjaGFyKiBwLCBpbnQgbGVuKTsK
ICAgIHN0cmVhbXNpemUgeHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICBz
dHJlYW1zaXplIHhzZ2V0bihjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgdmlydHVhbCBpbnQg
c3luYygpOwogIHByb3RlY3RlZDoKCiAgICBpbnQgaXNfcmVhZGluZygpIHsgcmV0dXJuIGViYWNr
KCkgIT0gZWdwdHIoKTsgfQogICAgY2hhciogY3VyX3B0cigpIHsgcmV0dXJuIGlzX3JlYWRpbmco
KSA/IGdwdHIoKSA6IHBwdHIoKTsgfQoKICAgIGNoYXIqIGZpbGVfcHRyKCkgeyByZXR1cm4gZUdw
dHIoKTsgfQoKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfcmVhZChjaGFyKiBidWYsIHN0cmVh
bXNpemUgc2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzeXNfc2VlayhzdHJlYW1vZmYsIF9z
ZWVrX2Rpcik7CiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3dyaXRlKGNvbnN0IGNoYXIqLCBz
dHJlYW1zaXplKTsKICAgIHZpcnR1YWwgaW50IHN5c19zdGF0KHZvaWQqKTsKICAgIHZpcnR1YWwg
aW50IHN5c19jbG9zZSgpOwoKCgoKfTsKCmlubGluZSB2b2lkIGlvczo6aW5pdChzdHJlYW1idWYq
IHNiLCBvc3RyZWFtKiB0aWVfdG8pIHsKICAgICAgICAgICAgICAgIF9zdGF0ZSA9IHNiID8gaW9z
Ojpnb29kYml0IDogaW9zOjpiYWRiaXQ7IF9leGNlcHRpb25zPTA7CiAgICAgICAgICAgICAgICBf
c3RyYnVmPXNiOyBfdGllID0gdGllX3RvOyBfd2lkdGg9MDsgX2ZpbGw9JyAnOwoKICAgICAgICAg
ICAgICAgIF9mbGFncz1pb3M6OnNraXB3c3xpb3M6OmRlYzsKCgoKICAgICAgICAgICAgICAgIF9w
cmVjaXNpb249NjsgX2FycmF5cyA9IDA7IH0KCmlubGluZSBpb3M6OmlvcyhzdHJlYW1idWYqIHNi
LCBvc3RyZWFtKiB0aWVfdG8pIHsgaW5pdChzYiwgdGllX3RvKTsgfQoKaW5saW5lIGlvczo6fmlv
cygpIHsKCgoKCgogICAgb3BlcmF0b3IgZGVsZXRlW10gKF9hcnJheXMpOwp9Cn0KIyAzMiAiL3Vz
ci9pbmNsdWRlL2crKy0zL2lvc3RyZWFtLmgiIDIgMwoKZXh0ZXJuICJDKysiIHsKY2xhc3MgaXN0
cmVhbTsgY2xhc3Mgb3N0cmVhbTsKdHlwZWRlZiBpb3MmICgqX19tYW5pcCkoaW9zJik7CnR5cGVk
ZWYgaXN0cmVhbSYgKCpfX2ltYW5pcCkoaXN0cmVhbSYpOwp0eXBlZGVmIG9zdHJlYW0mICgqX19v
bWFuaXApKG9zdHJlYW0mKTsKCmV4dGVybiBpc3RyZWFtJiB3cyhpc3RyZWFtJiBpbnMpOwpleHRl
cm4gb3N0cmVhbSYgZmx1c2gob3N0cmVhbSYgb3V0cyk7CmV4dGVybiBvc3RyZWFtJiBlbmRsKG9z
dHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgZW5kcyhvc3RyZWFtJiBvdXRzKTsKCmNsYXNz
IG9zdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBpb3MKewoKICAgIHZvaWQgZG9fb3NmeCgpOwogIHB1
YmxpYzoKICAgIG9zdHJlYW0oKSB7IH0KICAgIG9zdHJlYW0oc3RyZWFtYnVmKiBzYiwgb3N0cmVh
bSogdGllZD1fX251bGwpOwogICAgaW50IG9wZngoKSB7CiAgICAgICAgaWYgKCFnb29kKCkpIHJl
dHVybiAwOwogICAgICAgIGVsc2UgeyBpZiAoX3RpZSkgX3RpZS0+Zmx1c2goKTsgOyByZXR1cm4g
MTt9IH0KICAgIHZvaWQgb3NmeCgpIHsgOwogICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MoKSAm
IChpb3M6OnVuaXRidWZ8aW9zOjpzdGRpbykpCiAgICAgICAgICAgICAgICAgICAgICBkb19vc2Z4
KCk7IH0KICAgIG9zdHJlYW0mIGZsdXNoKCk7CiAgICBvc3RyZWFtJiBwdXQoY2hhciBjKSB7IF9z
dHJidWYtPnNwdXRjKGMpOyByZXR1cm4gKnRoaXM7IH0KCgoKCgogICAgb3N0cmVhbSYgd3JpdGUo
Y29uc3QgY2hhciAqcywgc3RyZWFtc2l6ZSBuKTsKICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHVu
c2lnbmVkIGNoYXIgKnMsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gd3JpdGUoKGNvbnN0
IGNoYXIqKXMsIG4pO30KICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHNpZ25lZCBjaGFyICpzLCBz
dHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFyKilzLCBuKTt9CiAg
ICBvc3RyZWFtJiB3cml0ZShjb25zdCB2b2lkICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0
dXJuIHdyaXRlKChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiBzZWVrcChzdHJlYW1w
b3MpOwogICAgb3N0cmVhbSYgc2Vla3Aoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgc3RyZWFt
cG9zIHRlbGxwKCk7CiAgICBvc3RyZWFtJiBmb3JtKGNvbnN0IGNoYXIgKmZvcm1hdCAuLi4pOwog
ICAgb3N0cmVhbSYgdmZvcm0oY29uc3QgY2hhciAqZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBhcmdz
KTsKCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNoYXIgYyk7CiAgICBvc3RyZWFtJiBvcGVyYXRv
cjw8KHVuc2lnbmVkIGNoYXIgYykgeyByZXR1cm4gKCp0aGlzKSA8PCAoY2hhciljOyB9CiAgICBv
c3RyZWFtJiBvcGVyYXRvcjw8KHNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykgPDwgKGNo
YXIpYzsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCBjaGFyICpzKTsKICAgIG9zdHJl
YW0mIG9wZXJhdG9yPDwoY29uc3QgdW5zaWduZWQgY2hhciAqcykKICAgICAgICB7IHJldHVybiAo
KnRoaXMpIDw8IChjb25zdCBjaGFyKilzOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0
IHNpZ25lZCBjaGFyICpzKQogICAgICAgIHsgcmV0dXJuICgqdGhpcykgPDwgKGNvbnN0IGNoYXIq
KXM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qgdm9pZCAqcCk7CiAgICBvc3RyZWFt
JiBvcGVyYXRvcjw8KGludCBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgaW50
IG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChsb25nIG4pOwogICAgb3N0cmVhbSYgb3BlcmF0
b3I8PCh1bnNpZ25lZCBsb25nIG4pOwoKICAgIF9fZXh0ZW5zaW9uX18gb3N0cmVhbSYgb3BlcmF0
b3I8PChsb25nIGxvbmcgbik7CiAgICBfX2V4dGVuc2lvbl9fIG9zdHJlYW0mIG9wZXJhdG9yPDwo
dW5zaWduZWQgbG9uZyBsb25nIG4pOwoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoc2hvcnQgbikg
e3JldHVybiBvcGVyYXRvcjw8KChpbnQpbik7fQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNp
Z25lZCBzaG9ydCBuKSB7cmV0dXJuIG9wZXJhdG9yPDwoKHVuc2lnbmVkIGludCluKTt9CgogICAg
b3N0cmVhbSYgb3BlcmF0b3I8PChib29sIGIpIHsgcmV0dXJuIG9wZXJhdG9yPDwoKGludCliKTsg
fQoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoZG91YmxlIG4pOwogICAgb3N0cmVhbSYgb3BlcmF0
b3I8PChmbG9hdCBuKSB7IHJldHVybiBvcGVyYXRvcjw8KChkb3VibGUpbik7IH0KCiAgICBvc3Ry
ZWFtJiBvcGVyYXRvcjw8KGxvbmcgZG91YmxlIG4pOwoKCgogICAgb3N0cmVhbSYgb3BlcmF0b3I8
PChfX29tYW5pcCBmdW5jKSB7IHJldHVybiAoKmZ1bmMpKCp0aGlzKTsgfQogICAgb3N0cmVhbSYg
b3BlcmF0b3I8PChfX21hbmlwIGZ1bmMpIHsoKmZ1bmMpKCp0aGlzKTsgcmV0dXJuICp0aGlzO30K
ICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoc3RyZWFtYnVmKik7CgoKCn07CgpjbGFzcyBpc3RyZWFt
IDogdmlydHVhbCBwdWJsaWMgaW9zCnsKCnByb3RlY3RlZDoKICAgIHNpemVfdCBfZ2NvdW50OwoK
ICAgIGludCBfc2tpcF93cygpOwogIHB1YmxpYzoKICAgIGlzdHJlYW0oKTogX2djb3VudCAoMCkg
eyB9CiAgICBpc3RyZWFtKHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qdGllZD1fX251bGwpOwogICAg
aXN0cmVhbSYgZ2V0KGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpOwogICAg
aXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdc
bicpCiAgICAgICAgeyByZXR1cm4gZ2V0KChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBp
c3RyZWFtJiBnZXQoY2hhciYgYyk7CiAgICBpc3RyZWFtJiBnZXQodW5zaWduZWQgY2hhciYgYykg
eyByZXR1cm4gZ2V0KChjaGFyJiljKTsgfQogICAgaXN0cmVhbSYgZ2V0bGluZShjaGFyKiBwdHIs
IGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlzdHJlYW0mIGdldGxpbmUodW5zaWdu
ZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJykKICAgICAgICB7IHJldHVy
biBnZXRsaW5lKChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXQoc2ln
bmVkIGNoYXImIGMpIHsgcmV0dXJuIGdldCgoY2hhciYpYyk7IH0KICAgIGlzdHJlYW0mIGdldChz
aWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJykKICAgICAgICB7IHJl
dHVybiBnZXQoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0KICAgIGlzdHJlYW0mIGdldGxpbmUo
c2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpCiAgICAgICAgeyBy
ZXR1cm4gZ2V0bGluZSgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgcmVh
ZChjaGFyICpwdHIsIHN0cmVhbXNpemUgbik7CiAgICBpc3RyZWFtJiByZWFkKHVuc2lnbmVkIGNo
YXIgKnB0ciwgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4p
OyB9CiAgICBpc3RyZWFtJiByZWFkKHNpZ25lZCBjaGFyICpwdHIsIHN0cmVhbXNpemUgbikKICAg
ICAgeyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYgcmVhZCh2b2lk
ICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBuKTsg
fQogICAgaXN0cmVhbSYgZ2V0KHN0cmVhbWJ1ZiYgc2IsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAg
IGlzdHJlYW0mIGdldHMoY2hhciAqKnMsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGludCBpcGZ4
KGludCBuZWVkID0gMCkgewogICAgICAgIGlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQp
OyByZXR1cm4gMDsgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICAgICAgICAgIGlmIChfdGllICYmIChuZWVkID09IDAgfHwgcmRidWYoKS0+aW5fYXZh
aWwoKSA8IG5lZWQpKSBfdGllLT5mbHVzaCgpOwogICAgICAgICAgaWYgKCFuZWVkICYmIChmbGFn
cygpICYgaW9zOjpza2lwd3MpKSByZXR1cm4gX3NraXBfd3MoKTsKICAgICAgICAgIGVsc2UgcmV0
dXJuIDE7CiAgICAgICAgfQogICAgfQogICAgaW50IGlwZngwKCkgewogICAgICAgIGlmICghZ29v
ZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyByZXR1cm4gMDsgfQogICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgIGlmIChfdGllKSBfdGllLT5m
bHVzaCgpOwogICAgICAgICAgaWYgKGZsYWdzKCkgJiBpb3M6OnNraXB3cykgcmV0dXJuIF9za2lw
X3dzKCk7CiAgICAgICAgICBlbHNlIHJldHVybiAxOwogICAgICAgIH0KICAgIH0KICAgIGludCBp
cGZ4MSgpIHsKICAgICAgICBpZiAoIWdvb2QoKSkgeyBzZXQoaW9zOjpmYWlsYml0KTsgcmV0dXJu
IDA7IH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgICAgICBpZiAoX3RpZSAmJiByZGJ1ZigpLT5pbl9hdmFpbCgpID09IDApIF90aWUtPmZsdXNo
KCk7CiAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CiAgICB9CiAgICB2b2lkIGlzZngoKSB7
IDsgfQogICAgaW50IGdldCgpIHsgaWYgKCFpcGZ4MSgpKSByZXR1cm4gKC0xKTsKICAgICAgICAg
ICAgICAgIGVsc2UgeyBpbnQgY2ggPSBfc3RyYnVmLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoY2ggPT0gKC0xKSkgc2V0KGlvczo6ZW9mYml0KTsKICAgICAgICAgICAgICAg
ICAgICAgICBpc2Z4KCk7CiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoOwogICAgICAg
ICAgICAgICAgICAgICB9IH0KICAgIGludCBwZWVrKCk7CiAgICBzaXplX3QgZ2NvdW50KCkgeyBy
ZXR1cm4gX2djb3VudDsgfQogICAgaXN0cmVhbSYgaWdub3JlKGludCBuPTEsIGludCBkZWxpbSA9
ICgtMSkpOwogICAgaW50IHN5bmMgKCk7CiAgICBpc3RyZWFtJiBzZWVrZyhzdHJlYW1wb3MpOwog
ICAgaXN0cmVhbSYgc2Vla2coc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgc3RyZWFtcG9zIHRl
bGxnKCk7CiAgICBpc3RyZWFtJiBwdXRiYWNrKGNoYXIgY2gpIHsKICAgICAgICBpZiAoZ29vZCgp
ICYmIF9zdHJidWYtPnNwdXRiYWNrYyhjaCkgPT0gKC0xKSkgY2xlYXIoaW9zOjpiYWRiaXQpOwog
ICAgICAgIHJldHVybiAqdGhpczt9CiAgICBpc3RyZWFtJiB1bmdldCgpIHsKICAgICAgICBpZiAo
Z29vZCgpICYmIF9zdHJidWYtPnN1bmdldGMoKSA9PSAoLTEpKSBjbGVhcihpb3M6OmJhZGJpdCk7
CiAgICAgICAgcmV0dXJuICp0aGlzO30KICAgIGlzdHJlYW0mIHNjYW4oY29uc3QgY2hhciAqZm9y
bWF0IC4uLik7CiAgICBpc3RyZWFtJiB2c2Nhbihjb25zdCBjaGFyICpmb3JtYXQsIF9fZ251Y192
YV9saXN0IGFyZ3MpOwoKCgoKCgogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihjaGFyKik7CiAgICBp
c3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGNoYXIqIHApIHsgcmV0dXJuIG9wZXJhdG9yPj4o
KGNoYXIqKXApOyB9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNpZ25lZCBjaGFyKnApIHsgcmV0
dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXApOyB9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGNoYXIm
IGMpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBjaGFyJiBjKSB7cmV0dXJuIG9w
ZXJhdG9yPj4oKGNoYXImKWMpO30KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc2lnbmVkIGNoYXIm
IGMpIHtyZXR1cm4gb3BlcmF0b3I+PigoY2hhciYpYyk7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+
PihpbnQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4obG9uZyYpOwoKICAgIF9fZXh0ZW5zaW9u
X18gaXN0cmVhbSYgb3BlcmF0b3I+Pihsb25nIGxvbmcmKTsKICAgIF9fZXh0ZW5zaW9uX18gaXN0
cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nIGxvbmcmKTsKCiAgICBpc3RyZWFtJiBvcGVy
YXRvcj4+KHNob3J0Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYpOwog
ICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJik7CiAgICBpc3RyZWFtJiBvcGVy
YXRvcj4+KHVuc2lnbmVkIHNob3J0Jik7CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihib29sJik7
CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihmbG9hdCYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+
Pihkb3VibGUmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4obG9uZyBkb3VibGUmKTsKICAgIGlz
dHJlYW0mIG9wZXJhdG9yPj4oIF9fbWFuaXAgZnVuYykgeygqZnVuYykoKnRoaXMpOyByZXR1cm4g
KnRoaXM7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihfX2ltYW5pcCBmdW5jKSB7IHJldHVybiAo
KmZ1bmMpKCp0aGlzKTsgfQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzdHJlYW1idWYqKTsKfTsK
CmNsYXNzIGlvc3RyZWFtIDogcHVibGljIGlzdHJlYW0sIHB1YmxpYyBvc3RyZWFtCnsKICBwdWJs
aWM6CiAgICBpb3N0cmVhbSgpIHsgfQogICAgaW9zdHJlYW0oc3RyZWFtYnVmKiBzYiwgb3N0cmVh
bSp0aWVkPV9fbnVsbCk7Cn07CgpjbGFzcyBfSU9faXN0cmVhbV93aXRoYXNzaWduIDogcHVibGlj
IGlzdHJlYW0gewpwdWJsaWM6CiAgX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KGlz
dHJlYW0mKTsKICBfSU9faXN0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0oX0lPX2lzdHJlYW1f
d2l0aGFzc2lnbiYgcmhzKQogICAgeyByZXR1cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxpc3Ry
ZWFtJj4gKHJocykpOyB9Cn07CgpjbGFzcyBfSU9fb3N0cmVhbV93aXRoYXNzaWduIDogcHVibGlj
IG9zdHJlYW0gewpwdWJsaWM6CiAgX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KG9z
dHJlYW0mKTsKICBfSU9fb3N0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0oX0lPX29zdHJlYW1f
d2l0aGFzc2lnbiYgcmhzKQogICAgeyByZXR1cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxvc3Ry
ZWFtJj4gKHJocykpOyB9Cn07CgpleHRlcm4gX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiBjaW47Cgpl
eHRlcm4gX0lPX29zdHJlYW1fd2l0aGFzc2lnbiBjb3V0LCBjZXJyOwoKZXh0ZXJuIF9JT19vc3Ry
ZWFtX3dpdGhhc3NpZ24gY2xvZwoKCgo7CgpleHRlcm4gaXN0cmVhbSYgbG9jayhpc3RyZWFtJiBp
bnMpOwpleHRlcm4gaXN0cmVhbSYgdW5sb2NrKGlzdHJlYW0mIGlucyk7CmV4dGVybiBvc3RyZWFt
JiBsb2NrKG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgdW5sb2NrKG9zdHJlYW0mIG91
dHMpOwoKc3RydWN0IElvc3RyZWFtX2luaXQgeyB9IDsKCmlubGluZSBpb3MmIGRlYyhpb3MmIGkp
CnsgaS5zZXRmKGlvczo6ZGVjLCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBp
OyB9CmlubGluZSBpb3MmIGhleChpb3MmIGkpCnsgaS5zZXRmKGlvczo6aGV4LCBpb3M6OmRlY3xp
b3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9CmlubGluZSBpb3MmIG9jdChpb3MmIGkpCnsg
aS5zZXRmKGlvczo6b2N0LCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9
Cn0KIyA3ICIvdXNyL2luY2x1ZGUvZysrLTMvaW9zdHJlYW0iIDIgMwojIDIwNyAiL2hvbWUvbWF0
dC9vYi9pbmNsdWRlL09CL0Jhc2ljLmgiIDIKIyAyNDkgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9P
Qi9CYXNpYy5oIgpuYW1lc3BhY2UgT0IKewoKCgoKZW51bSBOQ0FSZWFzb24KewogICAgTkNBTm90
SW1wbCwKICAgIE5DQURlcHJlY2F0ZWQsCgogICAgTkNBV3JvbmdBbGxvYywKICAgIE5DQURvdWJs
ZUZyZWUsCgogICAgTkNBUmVmQ291bnROb3RaZXJvLAogICAgTkNBUmVmQ291bnRaZXJvLAoKICAg
IE5DQVNlcUxlbkdyTWF4LAogICAgTkNBU2VxUmFuZ2UsCgogICAgTkNBU2VxQm91bmQsCgogICAg
TkNBTnVsbEluaXQsCiAgICBOQ0FOdWxsUHRyLAogICAgTkNBTnVsbERlcmVmLAogICAgTkNBTnVs
bFN0cmluZywKICAgIE5DQU51bGxWYWx1ZSwKCiAgICBOQ0FTZWxmQXNzaWduLAoKICAgIE5DQUFu
eVNlbGZSZXBsYWNlLAoKICAgIE5DQURpc2NUeXBlLAogICAgTkNBRGlzY01pc21hdGNoLAogICAg
TkNBVW5pb25Jbml0LAoKICAgIE5DQU5vRXhjZXB0aW9uVEMsCgoKICAgIE5DQVVuZW1iZWRkZWRS
ZWNUQywKCiAgICBOQ0FFbWJlZGRlZFJlY1RDLAoKICAgIE5DQU5vTG9uZ0RvdWJsZQp9OwoKdm9p
ZCBOQ0EoTkNBUmVhc29uLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIHVuc2lnbmVkIGludCk7
CiMgMzEzICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvQmFzaWMuaCIKc2l6ZV90IHdjc2xlbihj
b25zdCB3Y2hhcl90Kik7CndjaGFyX3QqIHdjc2NweSh3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCop
Owp3Y2hhcl90KiB3Y3NjYXQod2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqKTsKaW50IHdjc2NtcChj
b25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopOwoKCgoKY2xhc3MgU3RyRm9yU3RydWN0Owpj
bGFzcyBTdHJGb3JTZXE7CgoKCgpjbGFzcyBXU3RyRm9yU3RydWN0OwpjbGFzcyBXU3RyRm9yU2Vx
OwoKCgoKCiAgICAgICAgICBleHRlcm4gY2hhciogRW1wdHlTdHJpbmc7CiAgICAgICAgICBleHRl
cm4gd2NoYXJfdCogRW1wdHlXU3RyaW5nOwoKfQoKbmFtZXNwYWNlIENPUkJBCnsKCgoKCnR5cGVk
ZWYgYm9vbCBCb29sZWFuOwoKCnR5cGVkZWYgY2hhciBDaGFyOwp0eXBlZGVmIHVuc2lnbmVkIGNo
YXIgT2N0ZXQ7CgoKCgoKdHlwZWRlZiB3Y2hhcl90IFdDaGFyOwoKCgoKCnR5cGVkZWYgc2lnbmVk
IHNob3J0IFNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFVTaG9ydDsKIyAzNzMgIi9ob21l
L21hdHQvb2IvaW5jbHVkZS9PQi9CYXNpYy5oIgp0eXBlZGVmIHNpZ25lZCBsb25nIExvbmc7CnR5
cGVkZWYgdW5zaWduZWQgbG9uZyBVTG9uZzsKIyAzODYgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9P
Qi9CYXNpYy5oIgp0eXBlZGVmIGxvbmcgbG9uZyBMb25nTG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBs
b25nIGxvbmcgVUxvbmdMb25nOwojIDQxMCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0Jhc2lj
LmgiCnR5cGVkZWYgZmxvYXQgRmxvYXQ7CgoKCgoKdHlwZWRlZiBkb3VibGUgRG91YmxlOwoKCgoK
CnR5cGVkZWYgbG9uZyBkb3VibGUgTG9uZ0RvdWJsZTsKCgoKCgoKCnR5cGVkZWYgU2hvcnQmIFNo
b3J0X291dDsKdHlwZWRlZiBMb25nJiBMb25nX291dDsKdHlwZWRlZiBMb25nTG9uZyYgTG9uZ0xv
bmdfb3V0Owp0eXBlZGVmIFVMb25nTG9uZyYgVUxvbmdMb25nX291dDsKdHlwZWRlZiBVU2hvcnQm
IFVTaG9ydF9vdXQ7CnR5cGVkZWYgVUxvbmcmIFVMb25nX291dDsKdHlwZWRlZiBGbG9hdCYgRmxv
YXRfb3V0Owp0eXBlZGVmIERvdWJsZSYgRG91YmxlX291dDsKdHlwZWRlZiBMb25nRG91YmxlJiBM
b25nRG91YmxlX291dDsKdHlwZWRlZiBDaGFyJiBDaGFyX291dDsKdHlwZWRlZiBXQ2hhciYgV0No
YXJfb3V0Owp0eXBlZGVmIEJvb2xlYW4mIEJvb2xlYW5fb3V0Owp0eXBlZGVmIE9jdGV0JiBPY3Rl
dF9vdXQ7CgoKCgp0eXBlZGVmIFVMb25nIEZsYWdzOwpjb25zdCBGbGFncyBBUkdfSU4gPSAxOwpj
b25zdCBGbGFncyBBUkdfT1VUID0gMjsKY29uc3QgRmxhZ3MgQVJHX0lOT1VUID0gMzsKY29uc3Qg
RmxhZ3MgT1VUX0xJU1RfTUVNT1JZID0gNDsKY29uc3QgRmxhZ3MgSU5fQ09QWV9WQUxVRSA9IDU7
CmNvbnN0IEZsYWdzIENUWF9SRVNUUklDVF9TQ09QRSA9IDY7CiMgNDY4ICIvaG9tZS9tYXR0L29i
L2luY2x1ZGUvT0IvQmFzaWMuaCIKY2hhciogc3RyaW5nX2FsbG9jKFVMb25nKTsKd2NoYXJfdCog
d3N0cmluZ19hbGxvYyhVTG9uZyk7Cgp2b2lkIHN0cmluZ19mcmVlKGNoYXIqKTsKdm9pZCB3c3Ry
aW5nX2ZyZWUod2NoYXJfdCopOwoKY2hhciogc3RyaW5nX2R1cChjb25zdCBjaGFyKik7CndjaGFy
X3QqIHdzdHJpbmdfZHVwKGNvbnN0IHdjaGFyX3QqKTsKCgoKCmNsYXNzIFN0cmluZ192YXIKewpw
cm90ZWN0ZWQ6CgogICAgY2hhciogcHRyXzsKCnB1YmxpYzoKCgoKCiAgICBTdHJpbmdfdmFyKCkg
OiBwdHJfKDApIHsgfQogICAgU3RyaW5nX3ZhcihjaGFyKik7CiAgICBTdHJpbmdfdmFyKGNvbnN0
IGNoYXIqIHApIDogcHRyXyhzdHJpbmdfZHVwKHApKSB7IH0KICAgIFN0cmluZ192YXIoY29uc3Qg
U3RyaW5nX3ZhciYpOwogICAgU3RyaW5nX3Zhcihjb25zdCBPQjo6U3RyRm9yU2VxJik7CiAgICBT
dHJpbmdfdmFyKGNvbnN0IE9COjpTdHJGb3JTdHJ1Y3QmKTsKICAgIH5TdHJpbmdfdmFyKCkgeyBz
dHJpbmdfZnJlZShwdHJfKTsgfQoKICAgIFN0cmluZ192YXImIG9wZXJhdG9yPShjaGFyKik7CiAg
ICBTdHJpbmdfdmFyJiBvcGVyYXRvcj0oY29uc3QgY2hhciopOwogICAgU3RyaW5nX3ZhciYgb3Bl
cmF0b3I9KGNvbnN0IFN0cmluZ192YXImKTsKICAgIFN0cmluZ192YXImIG9wZXJhdG9yPShjb25z
dCBPQjo6U3RyRm9yU3RydWN0Jik7CiAgICBTdHJpbmdfdmFyJiBvcGVyYXRvcj0oY29uc3QgT0I6
OlN0ckZvclNlcSYpOwoKICAgIGNoYXImIG9wZXJhdG9yW10oc2hvcnQgaWR4KSB7IHJldHVybiBw
dHJfW2lkeF07IH0KICAgIGNoYXIgb3BlcmF0b3JbXShzaG9ydCBpZHgpIGNvbnN0IHsgcmV0dXJu
IHB0cl9baWR4XTsgfQogICAgY2hhciYgb3BlcmF0b3JbXSh1bnNpZ25lZCBzaG9ydCBpZHgpIHsg
cmV0dXJuIHB0cl9baWR4XTsgfQogICAgY2hhciBvcGVyYXRvcltdKHVuc2lnbmVkIHNob3J0IGlk
eCkgY29uc3QgeyByZXR1cm4gcHRyX1tpZHhdOyB9CiAgICBjaGFyJiBvcGVyYXRvcltdKGludCBp
ZHgpIHsgcmV0dXJuIHB0cl9baWR4XTsgfQogICAgY2hhciBvcGVyYXRvcltdKGludCBpZHgpIGNv
bnN0IHsgcmV0dXJuIHB0cl9baWR4XTsgfQogICAgY2hhciYgb3BlcmF0b3JbXSh1bnNpZ25lZCBp
bnQgaWR4KSB7IHJldHVybiBwdHJfW2lkeF07IH0KICAgIGNoYXIgb3BlcmF0b3JbXSh1bnNpZ25l
ZCBpbnQgaWR4KSBjb25zdCB7IHJldHVybiBwdHJfW2lkeF07IH0KICAgIGNoYXImIG9wZXJhdG9y
W10obG9uZyBpZHgpIHsgcmV0dXJuIHB0cl9baWR4XTsgfQogICAgY2hhciBvcGVyYXRvcltdKGxv
bmcgaWR4KSBjb25zdCB7IHJldHVybiBwdHJfW2lkeF07IH0KICAgIGNoYXImIG9wZXJhdG9yW10o
dW5zaWduZWQgbG9uZyBpZHgpIHsgcmV0dXJuIHB0cl9baWR4XTsgfQogICAgY2hhciBvcGVyYXRv
cltdKHVuc2lnbmVkIGxvbmcgaWR4KSBjb25zdCB7IHJldHVybiBwdHJfW2lkeF07IH0KCgoKCgog
ICAgb3BlcmF0b3IgY2hhciomKCkgY29uc3QgeyByZXR1cm4gKGNoYXIqJilwdHJfOyB9CgoKCgoK
CiAgICBjb25zdCBjaGFyKiBpbigpIGNvbnN0IHsgcmV0dXJuIHB0cl87IH0KICAgIGNoYXIqJiBp
bm91dCgpIHsgcmV0dXJuIHB0cl87IH0KICAgIGNoYXIqJiBvdXQoKTsKICAgIGNoYXIqIF9yZXRu
KCk7CgoKCgogICAgY2hhciomIHB0cigpIHsgcmV0dXJuIHB0cl87IH0KCgoKCiAgICBTdHJpbmdf
dmFyJiBvcGVyYXRvcis9KGNvbnN0IGNoYXIqKTsKICAgIFN0cmluZ192YXImIG9wZXJhdG9yKz0o
Y2hhcik7CiAgICBTdHJpbmdfdmFyJiBvcGVyYXRvcis9KHVuc2lnbmVkIGNoYXIpOwoKICAgIFN0
cmluZ192YXImIG9wZXJhdG9yKz0oTG9uZ0xvbmcpOwogICAgU3RyaW5nX3ZhciYgb3BlcmF0b3Ir
PShVTG9uZ0xvbmcpOwoKICAgIFN0cmluZ192YXImIG9wZXJhdG9yKz0obG9uZyBuKQogICAgeyBy
ZXR1cm4gb3BlcmF0b3IrPSgoTG9uZ0xvbmcpbik7IH0KICAgIFN0cmluZ192YXImIG9wZXJhdG9y
Kz0odW5zaWduZWQgbG9uZyBuKQogICAgeyByZXR1cm4gb3BlcmF0b3IrPSgoVUxvbmdMb25nKW4p
OyB9CgogICAgU3RyaW5nX3ZhciYgb3BlcmF0b3IrPShzaG9ydCBuKQogICAgeyByZXR1cm4gb3Bl
cmF0b3IrPSgoTG9uZ0xvbmcpbik7IH0KICAgIFN0cmluZ192YXImIG9wZXJhdG9yKz0odW5zaWdu
ZWQgc2hvcnQgbikKICAgIHsgcmV0dXJuIG9wZXJhdG9yKz0oKFVMb25nTG9uZyluKTsgfQoKICAg
IFN0cmluZ192YXImIG9wZXJhdG9yKz0oaW50IG4pCiAgICB7IHJldHVybiBvcGVyYXRvcis9KChM
b25nTG9uZyluKTsgfQogICAgU3RyaW5nX3ZhciYgb3BlcmF0b3IrPSh1bnNpZ25lZCBpbnQgbikK
ICAgIHsgcmV0dXJuIG9wZXJhdG9yKz0oKFVMb25nTG9uZyluKTsgfQoKCgoKICAgIGZyaWVuZCBj
bGFzcyBTdHJpbmdfb3V0Owp9OwoKY2xhc3MgU3RyaW5nX291dDsKCn0KCgpuYW1lc3BhY2UgT0IK
ewoKCgoKY2xhc3MgU3RyRm9yU3RydWN0IDogcHVibGljIENPUkJBOjpTdHJpbmdfdmFyCnsKcHVi
bGljOgoKCgoKICAgIFN0ckZvclN0cnVjdCgpIDogQ09SQkE6OlN0cmluZ192YXIoT0I6OkVtcHR5
U3RyaW5nKSB7IH0KICAgIFN0ckZvclN0cnVjdChjaGFyKiBwKSA6IENPUkJBOjpTdHJpbmdfdmFy
KHApIHsgfQogICAgU3RyRm9yU3RydWN0KGNvbnN0IGNoYXIqIHApIDogQ09SQkE6OlN0cmluZ192
YXIocCkgeyB9CiAgICBTdHJGb3JTdHJ1Y3QoY29uc3QgU3RyRm9yU3RydWN0JiByKSA6IENPUkJB
OjpTdHJpbmdfdmFyKHIpIHsgfQogICAgU3RyRm9yU3RydWN0KGNvbnN0IFN0ckZvclNlcSYgcikg
OiBDT1JCQTo6U3RyaW5nX3ZhcihyKSB7IH0KIyA2MDYgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9P
Qi9CYXNpYy5oIgogICAgU3RyRm9yU3RydWN0JiBvcGVyYXRvcj0oY2hhciogcCkKICAgIHsgQ09S
QkE6OlN0cmluZ192YXI6Om9wZXJhdG9yPShwKTsgcmV0dXJuICp0aGlzOyB9CiAgICBTdHJGb3JT
dHJ1Y3QmIG9wZXJhdG9yPShjb25zdCBjaGFyKiBwKQogICAgeyBDT1JCQTo6U3RyaW5nX3Zhcjo6
b3BlcmF0b3I9KHApOyByZXR1cm4gKnRoaXM7IH0KICAgIFN0ckZvclN0cnVjdCYgb3BlcmF0b3I9
KGNvbnN0IENPUkJBOjpTdHJpbmdfdmFyJiByKQogICAgeyBDT1JCQTo6U3RyaW5nX3Zhcjo6b3Bl
cmF0b3I9KHIpOyByZXR1cm4gKnRoaXM7IH0KICAgIFN0ckZvclN0cnVjdCYgb3BlcmF0b3I9KGNv
bnN0IFN0ckZvclN0cnVjdCYgcikKICAgIHsgQ09SQkE6OlN0cmluZ192YXI6Om9wZXJhdG9yPShy
KTsgcmV0dXJuICp0aGlzOyB9CiAgICBTdHJGb3JTdHJ1Y3QmIG9wZXJhdG9yPShjb25zdCBTdHJG
b3JTZXEmIHIpCiAgICB7IENPUkJBOjpTdHJpbmdfdmFyOjpvcGVyYXRvcj0ocik7IHJldHVybiAq
dGhpczsgfQoKfTsKCgoKCmNsYXNzIFN0ckZvclNlcQp7CiAgICBjaGFyKiogcHRyXzsKICAgIENP
UkJBOjpCb29sZWFuIHJlbF87CgpwdWJsaWM6CgoKCgoKICAgIFN0ckZvclNlcShjaGFyKiogcCwg
Q09SQkE6OkJvb2xlYW4gcmVsKSA6IHB0cl8ocCksIHJlbF8ocmVsKSB7IH0KICAgIFN0ckZvclNl
cShjb25zdCBTdHJGb3JTZXEmIHIpIDogcHRyXyhyLnB0cl8pLCByZWxfKHIucmVsXykgeyB9CgoK
CgogICAgU3RyRm9yU2VxJiBvcGVyYXRvcj0oY2hhciopOwogICAgU3RyRm9yU2VxJiBvcGVyYXRv
cj0oY29uc3QgY2hhciopOwogICAgU3RyRm9yU2VxJiBvcGVyYXRvcj0oY29uc3QgQ09SQkE6OlN0
cmluZ192YXImKTsKICAgIFN0ckZvclNlcSYgb3BlcmF0b3I9KGNvbnN0IFN0ckZvclN0cnVjdCYp
OwogICAgU3RyRm9yU2VxJiBvcGVyYXRvcj0oY29uc3QgU3RyRm9yU2VxJik7CgogICAgY2hhciYg
b3BlcmF0b3JbXShzaG9ydCBpZHgpIHsgcmV0dXJuICgqcHRyXylbaWR4XTsgfQogICAgY2hhciBv
cGVyYXRvcltdKHNob3J0IGlkeCkgY29uc3QgeyByZXR1cm4gKCpwdHJfKVtpZHhdOyB9CiAgICBj
aGFyJiBvcGVyYXRvcltdKHVuc2lnbmVkIHNob3J0IGlkeCkgeyByZXR1cm4gKCpwdHJfKVtpZHhd
OyB9CiAgICBjaGFyIG9wZXJhdG9yW10odW5zaWduZWQgc2hvcnQgaWR4KSBjb25zdCB7IHJldHVy
biAoKnB0cl8pW2lkeF07IH0KICAgIGNoYXImIG9wZXJhdG9yW10oaW50IGlkeCkgeyByZXR1cm4g
KCpwdHJfKVtpZHhdOyB9CiAgICBjaGFyIG9wZXJhdG9yW10oaW50IGlkeCkgY29uc3QgeyByZXR1
cm4gKCpwdHJfKVtpZHhdOyB9CiAgICBjaGFyJiBvcGVyYXRvcltdKHVuc2lnbmVkIGludCBpZHgp
IHsgcmV0dXJuICgqcHRyXylbaWR4XTsgfQogICAgY2hhciBvcGVyYXRvcltdKHVuc2lnbmVkIGlu
dCBpZHgpIGNvbnN0IHsgcmV0dXJuICgqcHRyXylbaWR4XTsgfQogICAgY2hhciYgb3BlcmF0b3Jb
XShsb25nIGlkeCkgeyByZXR1cm4gKCpwdHJfKVtpZHhdOyB9CiAgICBjaGFyIG9wZXJhdG9yW10o
bG9uZyBpZHgpIGNvbnN0IHsgcmV0dXJuICgqcHRyXylbaWR4XTsgfQogICAgY2hhciYgb3BlcmF0
b3JbXSh1bnNpZ25lZCBsb25nIGlkeCkgeyByZXR1cm4gKCpwdHJfKVtpZHhdOyB9CiAgICBjaGFy
IG9wZXJhdG9yW10odW5zaWduZWQgbG9uZyBpZHgpIGNvbnN0IHsgcmV0dXJuICgqcHRyXylbaWR4
XTsgfQoKCgoKCiAgICBvcGVyYXRvciBjaGFyKiYoKSBjb25zdCB7IHJldHVybiAoY2hhciomKSpw
dHJfOyB9CgoKCgoKCiAgICBjb25zdCBjaGFyKiBpbigpIGNvbnN0IHsgcmV0dXJuICpwdHJfOyB9
CiAgICBjaGFyKiYgaW5vdXQoKSB7IHJldHVybiAqcHRyXzsgfQogICAgY2hhciomIG91dCgpOwog
ICAgY2hhciogX3JldG4oKTsKCgoKCiAgICBjaGFyKiYgcHRyKCkgeyByZXR1cm4gKnB0cl87IH0K
CgoKCiAgICBmcmllbmQgY2xhc3MgQ09SQkE6OlN0cmluZ19vdXQ7Cn07Cgp9CgoKbmFtZXNwYWNl
IENPUkJBCnsKCgoKCmNsYXNzIFN0cmluZ19vdXQKewoKICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0
IFN0cmluZ192YXImKTsKICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IE9COjpTdHJGb3JTZXEmKTsK
CiAgICBjaGFyKiYgcHRyXzsKCnB1YmxpYzoKCiAgICBTdHJpbmdfb3V0KGNoYXIqJiBwKQogICAg
ICAgIDogcHRyXyhwKQogICAgewogICAgICAgIHB0cl8gPSAwOwogICAgfQoKICAgIFN0cmluZ19v
dXQoU3RyaW5nX3ZhciYgcCkKICAgICAgICA6IHB0cl8ocC5wdHJfKQogICAgewogICAgICAgIHN0
cmluZ19mcmVlKHB0cl8pOwogICAgICAgIHB0cl8gPSAwOwogICAgfQoKICAgIFN0cmluZ19vdXQo
T0I6OlN0ckZvclNlcSYgcCkKICAgICAgICA6IHB0cl8oKnAucHRyXykKICAgIHsKICAgICAgICBz
dHJpbmdfZnJlZShwdHJfKTsKICAgICAgICBwdHJfID0gMDsKICAgIH0KCiAgICBTdHJpbmdfb3V0
KGNvbnN0IFN0cmluZ19vdXQmIHApCiAgICAgICAgOiBwdHJfKHAucHRyXykKICAgIHsKICAgIH0K
CiAgICBTdHJpbmdfb3V0JiBvcGVyYXRvcj0oY29uc3QgU3RyaW5nX291dCYgcCkKICAgIHsKICAg
ICAgICBwdHJfID0gcC5wdHJfOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBTdHJp
bmdfb3V0JiBvcGVyYXRvcj0oY2hhciogcCkKICAgIHsKICAgICAgICBwdHJfID0gcDsKICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgU3RyaW5nX291dCYgb3BlcmF0b3I9KGNvbnN0IGNo
YXIqIHApCiAgICB7CiAgICAgICAgcHRyXyA9IHN0cmluZ19kdXAocCk7CiAgICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKICAgIGNoYXImIG9wZXJhdG9yW10oc2hvcnQgaWR4KSB7IHJldHVybiBw
dHJfW2lkeF07IH0KICAgIGNoYXImIG9wZXJhdG9yW10odW5zaWduZWQgc2hvcnQgaWR4KSB7IHJl
dHVybiBwdHJfW2lkeF07IH0KICAgIGNoYXImIG9wZXJhdG9yW10oaW50IGlkeCkgeyByZXR1cm4g
cHRyX1tpZHhdOyB9CiAgICBjaGFyJiBvcGVyYXRvcltdKHVuc2lnbmVkIGludCBpZHgpIHsgcmV0
dXJuIHB0cl9baWR4XTsgfQogICAgY2hhciYgb3BlcmF0b3JbXShsb25nIGlkeCkgeyByZXR1cm4g
cHRyX1tpZHhdOyB9CiAgICBjaGFyJiBvcGVyYXRvcltdKHVuc2lnbmVkIGxvbmcgaWR4KSB7IHJl
dHVybiBwdHJfW2lkeF07IH0KCgoKCiAgICBvcGVyYXRvciBjaGFyKiYoKSB7IHJldHVybiBwdHJf
OyB9CgoKICAgIGNoYXIqJiBwdHIoKSB7IHJldHVybiBwdHJfOyB9Cn07CgoKCgpjbGFzcyBXU3Ry
aW5nX3Zhcgp7CnByb3RlY3RlZDoKCiAgICB3Y2hhcl90KiBwdHJfOwoKcHVibGljOgoKCgoKICAg
IFdTdHJpbmdfdmFyKCkgOiBwdHJfKDApIHsgfQogICAgV1N0cmluZ192YXIod2NoYXJfdCopOwog
ICAgV1N0cmluZ192YXIoY29uc3Qgd2NoYXJfdCogcCkgOiBwdHJfKHdzdHJpbmdfZHVwKHApKSB7
IH0KICAgIFdTdHJpbmdfdmFyKGNvbnN0IFdTdHJpbmdfdmFyJik7CiAgICBXU3RyaW5nX3Zhcihj
b25zdCBPQjo6V1N0ckZvclNlcSYpOwogICAgV1N0cmluZ192YXIoY29uc3QgT0I6OldTdHJGb3JT
dHJ1Y3QmKTsKICAgIH5XU3RyaW5nX3ZhcigpIHsgd3N0cmluZ19mcmVlKHB0cl8pOyB9CgogICAg
V1N0cmluZ192YXImIG9wZXJhdG9yPSh3Y2hhcl90Kik7CiAgICBXU3RyaW5nX3ZhciYgb3BlcmF0
b3I9KGNvbnN0IHdjaGFyX3QqKTsKICAgIFdTdHJpbmdfdmFyJiBvcGVyYXRvcj0oY29uc3QgV1N0
cmluZ192YXImKTsKICAgIFdTdHJpbmdfdmFyJiBvcGVyYXRvcj0oY29uc3QgT0I6OldTdHJGb3JT
dHJ1Y3QmKTsKICAgIFdTdHJpbmdfdmFyJiBvcGVyYXRvcj0oY29uc3QgT0I6OldTdHJGb3JTZXEm
KTsKCiAgICB3Y2hhcl90JiBvcGVyYXRvcltdKHNob3J0IGlkeCkgeyByZXR1cm4gcHRyX1tpZHhd
OyB9CiAgICB3Y2hhcl90IG9wZXJhdG9yW10oc2hvcnQgaWR4KSBjb25zdCB7IHJldHVybiBwdHJf
W2lkeF07IH0KICAgIHdjaGFyX3QmIG9wZXJhdG9yW10odW5zaWduZWQgc2hvcnQgaWR4KSB7IHJl
dHVybiBwdHJfW2lkeF07IH0KICAgIHdjaGFyX3Qgb3BlcmF0b3JbXSh1bnNpZ25lZCBzaG9ydCBp
ZHgpIGNvbnN0IHsgcmV0dXJuIHB0cl9baWR4XTsgfQogICAgd2NoYXJfdCYgb3BlcmF0b3JbXShp
bnQgaWR4KSB7IHJldHVybiBwdHJfW2lkeF07IH0KICAgIHdjaGFyX3Qgb3BlcmF0b3JbXShpbnQg
aWR4KSBjb25zdCB7IHJldHVybiBwdHJfW2lkeF07IH0KICAgIHdjaGFyX3QmIG9wZXJhdG9yW10o
dW5zaWduZWQgaW50IGlkeCkgeyByZXR1cm4gcHRyX1tpZHhdOyB9CiAgICB3Y2hhcl90IG9wZXJh
dG9yW10odW5zaWduZWQgaW50IGlkeCkgY29uc3QgeyByZXR1cm4gcHRyX1tpZHhdOyB9CiAgICB3
Y2hhcl90JiBvcGVyYXRvcltdKGxvbmcgaWR4KSB7IHJldHVybiBwdHJfW2lkeF07IH0KICAgIHdj
aGFyX3Qgb3BlcmF0b3JbXShsb25nIGlkeCkgY29uc3QgeyByZXR1cm4gcHRyX1tpZHhdOyB9CiAg
ICB3Y2hhcl90JiBvcGVyYXRvcltdKHVuc2lnbmVkIGxvbmcgaWR4KSB7IHJldHVybiBwdHJfW2lk
eF07IH0KICAgIHdjaGFyX3Qgb3BlcmF0b3JbXSh1bnNpZ25lZCBsb25nIGlkeCkgY29uc3QgeyBy
ZXR1cm4gcHRyX1tpZHhdOyB9CgoKCgoKICAgIG9wZXJhdG9yIHdjaGFyX3QqJigpIGNvbnN0IHsg
cmV0dXJuICh3Y2hhcl90KiYpcHRyXzsgfQoKCgoKCgogICAgY29uc3Qgd2NoYXJfdCogaW4oKSBj
b25zdCB7IHJldHVybiBwdHJfOyB9CiAgICB3Y2hhcl90KiYgaW5vdXQoKSB7IHJldHVybiBwdHJf
OyB9CiAgICB3Y2hhcl90KiYgb3V0KCk7CiAgICB3Y2hhcl90KiBfcmV0bigpOwoKCgoKICAgIHdj
aGFyX3QqJiBwdHIoKSB7IHJldHVybiBwdHJfOyB9CgoKCgogICAgV1N0cmluZ192YXImIG9wZXJh
dG9yKz0oY29uc3Qgd2NoYXJfdCopOwogICAgV1N0cmluZ192YXImIG9wZXJhdG9yKz0od2NoYXJf
dCk7CgoKCgogICAgZnJpZW5kIGNsYXNzIFdTdHJpbmdfb3V0Owp9OwoKY2xhc3MgV1N0cmluZ19v
dXQ7Cgp9CgoKbmFtZXNwYWNlIE9CCnsKCgoKCmNsYXNzIFdTdHJGb3JTdHJ1Y3QgOiBwdWJsaWMg
Q09SQkE6OldTdHJpbmdfdmFyCnsKcHVibGljOgoKCgoKICAgIFdTdHJGb3JTdHJ1Y3QoKSA6IENP
UkJBOjpXU3RyaW5nX3ZhcihPQjo6RW1wdHlXU3RyaW5nKSB7IH0KICAgIFdTdHJGb3JTdHJ1Y3Qo
d2NoYXJfdCogcCkgOiBDT1JCQTo6V1N0cmluZ192YXIocCkgeyB9CiAgICBXU3RyRm9yU3RydWN0
KGNvbnN0IHdjaGFyX3QqIHApIDogQ09SQkE6OldTdHJpbmdfdmFyKHApIHsgfQogICAgV1N0ckZv
clN0cnVjdChjb25zdCBXU3RyRm9yU3RydWN0JiByKSA6IENPUkJBOjpXU3RyaW5nX3ZhcihyKSB7
IH0KICAgIFdTdHJGb3JTdHJ1Y3QoY29uc3QgV1N0ckZvclNlcSYgcikgOiBDT1JCQTo6V1N0cmlu
Z192YXIocikgeyB9CiMgODczICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvQmFzaWMuaCIKICAg
IFdTdHJGb3JTdHJ1Y3QmIG9wZXJhdG9yPSh3Y2hhcl90KiBwKQogICAgeyBDT1JCQTo6V1N0cmlu
Z192YXI6Om9wZXJhdG9yPShwKTsgcmV0dXJuICp0aGlzOyB9CiAgICBXU3RyRm9yU3RydWN0JiBv
cGVyYXRvcj0oY29uc3Qgd2NoYXJfdCogcCkKICAgIHsgQ09SQkE6OldTdHJpbmdfdmFyOjpvcGVy
YXRvcj0ocCk7IHJldHVybiAqdGhpczsgfQogICAgV1N0ckZvclN0cnVjdCYgb3BlcmF0b3I9KGNv
bnN0IENPUkJBOjpXU3RyaW5nX3ZhciYgcikKICAgIHsgQ09SQkE6OldTdHJpbmdfdmFyOjpvcGVy
YXRvcj0ocik7IHJldHVybiAqdGhpczsgfQogICAgV1N0ckZvclN0cnVjdCYgb3BlcmF0b3I9KGNv
bnN0IFdTdHJGb3JTdHJ1Y3QmIHIpCiAgICB7IENPUkJBOjpXU3RyaW5nX3Zhcjo6b3BlcmF0b3I9
KHIpOyByZXR1cm4gKnRoaXM7IH0KICAgIFdTdHJGb3JTdHJ1Y3QmIG9wZXJhdG9yPShjb25zdCBX
U3RyRm9yU2VxJiByKQogICAgeyBDT1JCQTo6V1N0cmluZ192YXI6Om9wZXJhdG9yPShyKTsgcmV0
dXJuICp0aGlzOyB9Cgp9OwoKCgoKY2xhc3MgV1N0ckZvclNlcQp7CiAgICB3Y2hhcl90KiogcHRy
XzsKICAgIENPUkJBOjpCb29sZWFuIHJlbF87CgpwdWJsaWM6CgoKCgoKICAgIFdTdHJGb3JTZXEo
d2NoYXJfdCoqIHAsIENPUkJBOjpCb29sZWFuIHJlbCkgOiBwdHJfKHApLCByZWxfKHJlbCkgeyB9
CiAgICBXU3RyRm9yU2VxKGNvbnN0IFdTdHJGb3JTZXEmIHIpIDogcHRyXyhyLnB0cl8pLCByZWxf
KHIucmVsXykgeyB9CgoKCgogICAgV1N0ckZvclNlcSYgb3BlcmF0b3I9KHdjaGFyX3QqKTsKICAg
IFdTdHJGb3JTZXEmIG9wZXJhdG9yPShjb25zdCB3Y2hhcl90Kik7CiAgICBXU3RyRm9yU2VxJiBv
cGVyYXRvcj0oY29uc3QgQ09SQkE6OldTdHJpbmdfdmFyJik7CiAgICBXU3RyRm9yU2VxJiBvcGVy
YXRvcj0oY29uc3QgV1N0ckZvclN0cnVjdCYpOwogICAgV1N0ckZvclNlcSYgb3BlcmF0b3I9KGNv
bnN0IFdTdHJGb3JTZXEmKTsKCiAgICB3Y2hhcl90JiBvcGVyYXRvcltdKHNob3J0IGlkeCkgeyBy
ZXR1cm4gKCpwdHJfKVtpZHhdOyB9CiAgICB3Y2hhcl90IG9wZXJhdG9yW10oc2hvcnQgaWR4KSBj
b25zdCB7IHJldHVybiAoKnB0cl8pW2lkeF07IH0KICAgIHdjaGFyX3QmIG9wZXJhdG9yW10odW5z
aWduZWQgc2hvcnQgaWR4KSB7IHJldHVybiAoKnB0cl8pW2lkeF07IH0KICAgIHdjaGFyX3Qgb3Bl
cmF0b3JbXSh1bnNpZ25lZCBzaG9ydCBpZHgpIGNvbnN0IHsgcmV0dXJuICgqcHRyXylbaWR4XTsg
fQogICAgd2NoYXJfdCYgb3BlcmF0b3JbXShpbnQgaWR4KSB7IHJldHVybiAoKnB0cl8pW2lkeF07
IH0KICAgIHdjaGFyX3Qgb3BlcmF0b3JbXShpbnQgaWR4KSBjb25zdCB7IHJldHVybiAoKnB0cl8p
W2lkeF07IH0KICAgIHdjaGFyX3QmIG9wZXJhdG9yW10odW5zaWduZWQgaW50IGlkeCkgeyByZXR1
cm4gKCpwdHJfKVtpZHhdOyB9CiAgICB3Y2hhcl90IG9wZXJhdG9yW10odW5zaWduZWQgaW50IGlk
eCkgY29uc3QgeyByZXR1cm4gKCpwdHJfKVtpZHhdOyB9CiAgICB3Y2hhcl90JiBvcGVyYXRvcltd
KGxvbmcgaWR4KSB7IHJldHVybiAoKnB0cl8pW2lkeF07IH0KICAgIHdjaGFyX3Qgb3BlcmF0b3Jb
XShsb25nIGlkeCkgY29uc3QgeyByZXR1cm4gKCpwdHJfKVtpZHhdOyB9CiAgICB3Y2hhcl90JiBv
cGVyYXRvcltdKHVuc2lnbmVkIGxvbmcgaWR4KSB7IHJldHVybiAoKnB0cl8pW2lkeF07IH0KICAg
IHdjaGFyX3Qgb3BlcmF0b3JbXSh1bnNpZ25lZCBsb25nIGlkeCkgY29uc3QgeyByZXR1cm4gKCpw
dHJfKVtpZHhdOyB9CgoKCgoKICAgIG9wZXJhdG9yIHdjaGFyX3QqJigpIGNvbnN0IHsgcmV0dXJu
ICh3Y2hhcl90KiYpKnB0cl87IH0KCgoKCgoKICAgIGNvbnN0IHdjaGFyX3QqIGluKCkgY29uc3Qg
eyByZXR1cm4gKnB0cl87IH0KICAgIHdjaGFyX3QqJiBpbm91dCgpIHsgcmV0dXJuICpwdHJfOyB9
CiAgICB3Y2hhcl90KiYgb3V0KCk7CiAgICB3Y2hhcl90KiBfcmV0bigpOwoKCgoKICAgIHdjaGFy
X3QqJiBwdHIoKSB7IHJldHVybiAqcHRyXzsgfQoKCgoKICAgIGZyaWVuZCBjbGFzcyBDT1JCQTo6
V1N0cmluZ19vdXQ7Cn07Cgp9CgoKbmFtZXNwYWNlIENPUkJBCnsKCgoKCmNsYXNzIFdTdHJpbmdf
b3V0CnsKCiAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBXU3RyaW5nX3ZhciYpOwogICAgdm9pZCBv
cGVyYXRvcj0oY29uc3QgT0I6OldTdHJGb3JTZXEmKTsKCiAgICBXQ2hhciomIHB0cl87CgpwdWJs
aWM6CgogICAgV1N0cmluZ19vdXQoV0NoYXIqJiBwKQogICAgICAgIDogcHRyXyhwKQogICAgewog
ICAgICAgIHB0cl8gPSAwOwogICAgfQoKICAgIFdTdHJpbmdfb3V0KFdTdHJpbmdfdmFyJiBwKQog
ICAgICAgIDogcHRyXyhwLnB0cl8pCiAgICB7CiAgICAgICAgd3N0cmluZ19mcmVlKHB0cl8pOwog
ICAgICAgIHB0cl8gPSAwOwogICAgfQoKICAgIFdTdHJpbmdfb3V0KE9COjpXU3RyRm9yU2VxJiBw
KQogICAgICAgIDogcHRyXygqcC5wdHJfKQogICAgewogICAgICAgIHdzdHJpbmdfZnJlZShwdHJf
KTsKICAgICAgICBwdHJfID0gMDsKICAgIH0KCiAgICBXU3RyaW5nX291dChjb25zdCBXU3RyaW5n
X291dCYgcCkKICAgICAgICA6IHB0cl8ocC5wdHJfKQogICAgewogICAgfQoKICAgIFdTdHJpbmdf
b3V0JiBvcGVyYXRvcj0oY29uc3QgV1N0cmluZ19vdXQmIHApCiAgICB7CiAgICAgICAgcHRyXyA9
IHAucHRyXzsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgV1N0cmluZ19vdXQmIG9w
ZXJhdG9yPShXQ2hhciogcCkKICAgIHsKICAgICAgICBwdHJfID0gcDsKICAgICAgICByZXR1cm4g
KnRoaXM7CiAgICB9CgogICAgV1N0cmluZ19vdXQmIG9wZXJhdG9yPShjb25zdCBXQ2hhciogcCkK
ICAgIHsKICAgICAgICBwdHJfID0gd3N0cmluZ19kdXAocCk7CiAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKICAgIHdjaGFyX3QmIG9wZXJhdG9yW10oc2hvcnQgaWR4KSB7IHJldHVybiBwdHJf
W2lkeF07IH0KICAgIHdjaGFyX3QmIG9wZXJhdG9yW10odW5zaWduZWQgc2hvcnQgaWR4KSB7IHJl
dHVybiBwdHJfW2lkeF07IH0KICAgIHdjaGFyX3QmIG9wZXJhdG9yW10oaW50IGlkeCkgeyByZXR1
cm4gcHRyX1tpZHhdOyB9CiAgICB3Y2hhcl90JiBvcGVyYXRvcltdKHVuc2lnbmVkIGludCBpZHgp
IHsgcmV0dXJuIHB0cl9baWR4XTsgfQogICAgd2NoYXJfdCYgb3BlcmF0b3JbXShsb25nIGlkeCkg
eyByZXR1cm4gcHRyX1tpZHhdOyB9CiAgICB3Y2hhcl90JiBvcGVyYXRvcltdKHVuc2lnbmVkIGxv
bmcgaWR4KSB7IHJldHVybiBwdHJfW2lkeF07IH0KCgoKCiAgICBvcGVyYXRvciB3Y2hhcl90KiYo
KSB7IHJldHVybiBwdHJfOyB9CgoKICAgIHdjaGFyX3QqJiBwdHIoKSB7IHJldHVybiBwdHJfOyB9
Cn07Cgp9CgoKCgoKc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYsIGNvbnN0
IENPUkJBOjpTdHJpbmdfdmFyJik7CnN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJl
YW0mLCBDT1JCQTo6U3RyaW5nX291dCYpOwpzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpv
c3RyZWFtJiwgY29uc3QgT0I6OlN0ckZvclNlcSYpOwpzdGQ6OmlzdHJlYW0mIG9wZXJhdG9yPj4o
c3RkOjppc3RyZWFtJiwgQ09SQkE6OlN0cmluZ192YXImKTsKc3RkOjppc3RyZWFtJiBvcGVyYXRv
cj4+KHN0ZDo6aXN0cmVhbSYsIENPUkJBOjpTdHJpbmdfb3V0Jik7CnN0ZDo6aXN0cmVhbSYgb3Bl
cmF0b3I+PihzdGQ6OmlzdHJlYW0mLCBPQjo6U3RyRm9yU2VxJik7CgoKCgoKc3RkOjpvc3RyZWFt
JiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYsIGNvbnN0IENPUkJBOjpXU3RyaW5nX3ZhciYpOwpz
dGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiwgQ09SQkE6OldTdHJpbmdfb3V0
Jik7CnN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mLCBjb25zdCBPQjo6V1N0
ckZvclNlcSYpOwojIDEwNjAgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9CYXNpYy5oIgpuYW1l
c3BhY2UgT0IKewojIDEwNzIgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9CYXNpYy5oIgpjb25z
dCBDT1JCQTo6Qm9vbGVhbiBFbmRpYW4gPSB0cnVlOwojIDEwOTEgIi9ob21lL21hdHQvb2IvaW5j
bHVkZS9PQi9CYXNpYy5oIgp2b2lkKiBBbGxvYyhzaXplX3QsIENPUkJBOjpVTG9uZyk7CnZvaWQg
RnJlZSh2b2lkKik7CkNPUkJBOjpVTG9uZyBBbGxvY2F0ZWQoY29uc3Qgdm9pZCopOwoKCgpib29s
IEFsbG9jQ2hlY2soY29uc3Qgdm9pZCopOwoKCgoKCmNoYXIqKiBTdHJTZXFBbGxvY2J1ZihDT1JC
QTo6VUxvbmcpOwp2b2lkIFN0clNlcUZyZWVidWYoY2hhcioqKTsKd2NoYXJfdCoqIFdTdHJTZXFB
bGxvY2J1ZihDT1JCQTo6VUxvbmcpOwp2b2lkIFdTdHJTZXFGcmVlYnVmKHdjaGFyX3QqKik7CgoK
CgpjaGFyKiBPY3RldHNUb0FzY2lpKGNvbnN0IENPUkJBOjpPY3RldCosIENPUkJBOjpVTG9uZyk7
CkNPUkJBOjpPY3RldCogQXNjaWlUb09jdGV0cyhjb25zdCBjaGFyKik7CgoKCgoKYm9vbCBTdHJp
bmdUb1VMb25nTG9uZyhjb25zdCBjaGFyKiwgY29uc3QgY2hhcioqLCBDT1JCQTo6VVNob3J0LAog
ICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZ0xvbmcmKTsKYm9vbCBTdHJpbmdUb0xv
bmdMb25nKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiosIENPUkJBOjpVU2hvcnQsCiAgICAgICAg
ICAgICAgICAgICAgICBDT1JCQTo6TG9uZ0xvbmcmKTsKY2hhciogVUxvbmdMb25nVG9TdHJpbmco
Q09SQkE6OlVMb25nTG9uZyk7CmNoYXIqIExvbmdMb25nVG9TdHJpbmcoQ09SQkE6OkxvbmdMb25n
KTsKCgoKCmNsYXNzIFNpbXBsZVJlZkNvdW50CnsKICAgIENPUkJBOjpMb25nIHJlZl87CgoKCgog
ICAgU2ltcGxlUmVmQ291bnQoY29uc3QgU2ltcGxlUmVmQ291bnQmKTsKICAgIHZvaWQgb3BlcmF0
b3I9KGNvbnN0IFNpbXBsZVJlZkNvdW50Jik7CgpwdWJsaWM6CgogICAgU2ltcGxlUmVmQ291bnQo
KSA6IHJlZl8oMSkgeyB9CiAgICB2aXJ0dWFsIH5TaW1wbGVSZWZDb3VudCgpCiAgICB7ICggKGlu
dCkocmVmXyA9PSAwKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FSZWZDb3VudE5vdFplcm8sICJy
ZWZfID09IDAiLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0Jhc2ljLmgiLCAxMTQyKSwgYWJv
cnQoKSkgKTsgfQoKCgoKICAgIHZvaWQgX09CX2luY1JlZigpIHsgKytyZWZfOyB9CgoKCgoKICAg
IHZvaWQgX09CX2RlY1JlZigpCiAgICB7CiAgICAgICAgKCAoaW50KShyZWZfID4gMCkgPyAodm9p
ZCkwIDogKE9COjpOQ0EoTkNBUmVmQ291bnRaZXJvLCAicmVmXyA+IDAiLCAiL2hvbWUvbWF0dC9v
Yi9pbmNsdWRlL09CL0Jhc2ljLmgiLCAxMTU1KSwgYWJvcnQoKSkgKTsKICAgICAgICBpZigtLXJl
Zl8gPT0gMCkKICAgICAgICAgICAgZGVsZXRlIHRoaXM7CiAgICB9CgoKCgogICAgQ09SQkE6OlVM
b25nIF9PQl9nZXRSZWYoKSBjb25zdCB7IHJldHVybiAoQ09SQkE6OlVMb25nKXJlZl87IH0KICAg
IHZvaWQgX09CX3NldFJlZihDT1JCQTo6VUxvbmcgcmVmKQogICAgeyByZWZfID0gKENPUkJBOjpM
b25nKXJlZjsgKHN0YXRpY19jYXN0PHZvaWQ+ICgocmVmXyA+PSAwKSA/IDAgOiAoX19hc3NlcnRf
ZmFpbCAoInJlZl8gPj0gMCIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvQmFzaWMuaCIsIDEx
NjUsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOyB9Cn07CgoKCgoKCnR5cGVkZWYgU2ltcGxl
UmVmQ291bnQgUmVmQ291bnQ7CiMgMTI3NyAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0Jhc2lj
LmgiCn0KIyAxNSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlLmgiIDIKCm5hbWVz
cGFjZSBPQgp7CgoKCgpjbGFzcyBJbnB1dFN0cmVhbUltcGw7CmNsYXNzIE91dHB1dFN0cmVhbUlt
cGw7CiMgMzIgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5oIgp0ZW1wbGF0ZTxj
bGFzcyBUPgpjbGFzcyBGaXhWYXIKewogICAgVCogcHRyXzsKCnB1YmxpYzoKCgoKCiAgICBGaXhW
YXIoKSA6IHB0cl8oMCkgeyB9CiAgICBGaXhWYXIoVCogcCkgOiBwdHJfKHApIHsgKCAoaW50KShw
ICE9IDApID8gKHZvaWQpMCA6IChPQjo6TkNBKE5DQU51bGxJbml0LCAicCAhPSAwIiwgIi9ob21l
L21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5oIiwgNDMpLCBhYm9ydCgpKSApOyB9CiAgICBG
aXhWYXIoY29uc3QgVCYgcikgOiBwdHJfKG5ldyBUKHIpKSB7IH0KCgoKCiAgICBGaXhWYXIoY29u
c3QgRml4VmFyPFQ+JiByKQogICAgICAgIDogcHRyXyhyLnB0cl8gPyBuZXcgVCgqci5wdHJfKSA6
IDApIHsgfQoKICAgIH5GaXhWYXIoKSB7IGRlbGV0ZSBwdHJfOyB9CgogICAgRml4VmFyPFQ+JiBv
cGVyYXRvcj0oVCopOwogICAgRml4VmFyPFQ+JiBvcGVyYXRvcj0oY29uc3QgVCYpOwogICAgRml4
VmFyPFQ+JiBvcGVyYXRvcj0oY29uc3QgRml4VmFyPFQ+Jik7CgoKICAgIFQqIG9wZXJhdG9yLT4o
KSBjb25zdCB7ICggKGludCkocHRyXyAhPSAwKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FOdWxs
UHRyLCAicHRyXyAhPSAwIiwgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5oIiwg
NTkpLCBhYm9ydCgpKSApOyByZXR1cm4gcHRyXzsgfQojIDY5ICIvaG9tZS9tYXR0L29iL2luY2x1
ZGUvT0IvVGVtcGxhdGUuaCIKICAgIG9wZXJhdG9yIFQmKCkgY29uc3QgeyAoIChpbnQpKHB0cl8g
IT0gMCkgPyAodm9pZCkwIDogKE9COjpOQ0EoTkNBTnVsbERlcmVmLCAicHRyXyAhPSAwIiwgIi9o
b21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5oIiwgNjkpLCBhYm9ydCgpKSApOyByZXR1
cm4gKnB0cl87IH0KCgoKCgoKICAgIGNvbnN0IFQmIGluKCkgY29uc3QgeyAoIChpbnQpKHB0cl8g
IT0gMCkgPyAodm9pZCkwIDogKE9COjpOQ0EoTkNBTnVsbERlcmVmLCAicHRyXyAhPSAwIiwgIi9o
b21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5oIiwgNzYpLCBhYm9ydCgpKSApOyByZXR1
cm4gKnB0cl87IH0KICAgIFQmIGlub3V0KCkgeyAoIChpbnQpKHB0cl8gIT0gMCkgPyAodm9pZCkw
IDogKE9COjpOQ0EoTkNBTnVsbERlcmVmLCAicHRyXyAhPSAwIiwgIi9ob21lL21hdHQvb2IvaW5j
bHVkZS9PQi9UZW1wbGF0ZS5oIiwgNzcpLCBhYm9ydCgpKSApOyByZXR1cm4gKnB0cl87IH0KICAg
IFQmIG91dCgpCiAgICB7CiAgICAgICAgaWYocHRyXyA9PSAwKQogICAgICAgICAgICBwdHJfID0g
bmV3IFQ7CiAgICAgICAgcmV0dXJuICpwdHJfOwogICAgfQogICAgY29uc3QgVCYgX3JldG4oKSB7
ICggKGludCkocHRyXyAhPSAwKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FOdWxsRGVyZWYsICJw
dHJfICE9IDAiLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlLmgiLCA4NCksIGFi
b3J0KCkpICk7IHJldHVybiAqcHRyXzsgfQoKCgoKICAgIFQqJiBwdHIoKSB7IHJldHVybiBwdHJf
OyB9Cn07CgoKCgp0ZW1wbGF0ZTxjbGFzcyBUPiBjbGFzcyBWYXJPdXQ7Cgp0ZW1wbGF0ZTxjbGFz
cyBUPgpjbGFzcyBWYXJWYXIKewogICAgZnJpZW5kIGNsYXNzIFZhck91dDxUPjsKICAgIFQqIHB0
cl87CgpwdWJsaWM6CgoKCgogICAgVmFyVmFyKCkgOiBwdHJfKDApIHsgfQogICAgVmFyVmFyKFQq
IHApIDogcHRyXyhwKSB7ICggKGludCkocCAhPSAwKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FO
dWxsSW5pdCwgInAgIT0gMCIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGUuaCIs
IDEwOSksIGFib3J0KCkpICk7IH0KCgoKCiAgICBWYXJWYXIoY29uc3QgVmFyVmFyPFQ+JiByKQog
ICAgICAgIDogcHRyXyhyLnB0cl8gPyBuZXcgVCgqci5wdHJfKSA6IDApIHsgfQoKICAgIH5WYXJW
YXIoKSB7IGRlbGV0ZSBwdHJfOyB9CgogICAgVmFyVmFyPFQ+JiBvcGVyYXRvcj0oVCopOwogICAg
VmFyVmFyPFQ+JiBvcGVyYXRvcj0oY29uc3QgVmFyVmFyPFQ+Jik7CgoKICAgIFQqIG9wZXJhdG9y
LT4oKSBjb25zdCB7ICggKGludCkocHRyXyAhPSAwKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FO
dWxsUHRyLCAicHRyXyAhPSAwIiwgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5o
IiwgMTIzKSwgYWJvcnQoKSkgKTsgcmV0dXJuIHB0cl87IH0KIyAxMzMgIi9ob21lL21hdHQvb2Iv
aW5jbHVkZS9PQi9UZW1wbGF0ZS5oIgogICAgb3BlcmF0b3IgVCYoKSBjb25zdCB7ICggKGludCko
cHRyXyAhPSAwKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FOdWxsRGVyZWYsICJwdHJfICE9IDAi
LCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlLmgiLCAxMzMpLCBhYm9ydCgpKSAp
OyByZXR1cm4gKnB0cl87IH0KCgoKCiAgICBvcGVyYXRvciBUKiYoKSB7IHJldHVybiBwdHJfOyB9
CgoKICAgIGNvbnN0IFQmIGluKCkgY29uc3QgeyAoIChpbnQpKHB0cl8gIT0gMCkgPyAodm9pZCkw
IDogKE9COjpOQ0EoTkNBTnVsbERlcmVmLCAicHRyXyAhPSAwIiwgIi9ob21lL21hdHQvb2IvaW5j
bHVkZS9PQi9UZW1wbGF0ZS5oIiwgMTQxKSwgYWJvcnQoKSkgKTsgcmV0dXJuICpwdHJfOyB9CiAg
ICBUJiBpbm91dCgpIHsgKCAoaW50KShwdHJfICE9IDApID8gKHZvaWQpMCA6IChPQjo6TkNBKE5D
QU51bGxEZXJlZiwgInB0cl8gIT0gMCIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxh
dGUuaCIsIDE0MiksIGFib3J0KCkpICk7IHJldHVybiAqcHRyXzsgfQogICAgVComIG91dCgpIHsg
ZGVsZXRlIHB0cl87IHB0cl8gPSAwOyByZXR1cm4gcHRyXzsgfQogICAgVCogX3JldG4oKSB7IFQq
IHJldCA9IHB0cl87IHB0cl8gPSAwOyByZXR1cm4gcmV0OyB9CgoKCgogICAgVComIHB0cigpIHsg
cmV0dXJuIHB0cl87IH0KfTsKCgoKCnRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBTZXFPdXQ7Cgp0
ZW1wbGF0ZTxjbGFzcyBUPgpjbGFzcyBTZXFWYXIKewogICAgZnJpZW5kIGNsYXNzIFNlcU91dDxU
PjsKICAgIFQqIHB0cl87CgpwdWJsaWM6CgoKCgogICAgU2VxVmFyKCkgOiBwdHJfKDApIHsgfQog
ICAgU2VxVmFyKFQqIHApIDogcHRyXyhwKSB7ICggKGludCkocCAhPSAwKSA/ICh2b2lkKTAgOiAo
T0I6Ok5DQShOQ0FOdWxsSW5pdCwgInAgIT0gMCIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0Iv
VGVtcGxhdGUuaCIsIDE2OSksIGFib3J0KCkpICk7IH0KCgoKCiAgICBTZXFWYXIoY29uc3QgU2Vx
VmFyPFQ+JiByKQogICAgICAgIDogcHRyXyhyLnB0cl8gPyBuZXcgVCgqci5wdHJfKSA6IDApIHsg
fQoKICAgIH5TZXFWYXIoKSB7IGRlbGV0ZSBwdHJfOyB9CgogICAgU2VxVmFyPFQ+JiBvcGVyYXRv
cj0oVCopOwogICAgU2VxVmFyPFQ+JiBvcGVyYXRvcj0oY29uc3QgU2VxVmFyPFQ+Jik7CgoKICAg
IFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7ICggKGludCkocHRyXyAhPSAwKSA/ICh2b2lkKTAgOiAo
T0I6Ok5DQShOQ0FOdWxsUHRyLCAicHRyXyAhPSAwIiwgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9P
Qi9UZW1wbGF0ZS5oIiwgMTgzKSwgYWJvcnQoKSkgKTsgcmV0dXJuIHB0cl87IH0KIyAxOTMgIi9o
b21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5oIgogICAgdHlwZWRlZiB0eXBlbmFtZSBU
OjpTdWJUeXBlIFN1YlR5cGU7CiAgICB0eXBlZGVmIHR5cGVuYW1lIFQ6OkNvbnN0U3ViVHlwZSBD
b25zdFN1YlR5cGU7CgoKICAgIFN1YlR5cGUgb3BlcmF0b3JbXShzaG9ydCBpZHgpCiAgICB7ICgg
KGludCkocHRyXyAhPSAwKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FOdWxsUHRyLCAicHRyXyAh
PSAwIiwgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5oIiwgMTk4KSwgYWJvcnQo
KSkgKTsgcmV0dXJuIHB0cl8gLT4gb3BlcmF0b3JbXShpZHgpOyB9CiAgICBTdWJUeXBlIG9wZXJh
dG9yW10odW5zaWduZWQgc2hvcnQgaWR4KQogICAgeyAoIChpbnQpKHB0cl8gIT0gMCkgPyAodm9p
ZCkwIDogKE9COjpOQ0EoTkNBTnVsbFB0ciwgInB0cl8gIT0gMCIsICIvaG9tZS9tYXR0L29iL2lu
Y2x1ZGUvT0IvVGVtcGxhdGUuaCIsIDIwMCksIGFib3J0KCkpICk7IHJldHVybiBwdHJfIC0+IG9w
ZXJhdG9yW10oaWR4KTsgfQojIDIwOSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRl
LmgiCiAgICBDb25zdFN1YlR5cGUgb3BlcmF0b3JbXShzaG9ydCBpZHgpIGNvbnN0CiAgICB7ICgg
KGludCkocHRyXyAhPSAwKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FOdWxsUHRyLCAicHRyXyAh
PSAwIiwgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5oIiwgMjEwKSwgYWJvcnQo
KSkgKTsgcmV0dXJuIHB0cl8gLT4gb3BlcmF0b3JbXShpZHgpOyB9CiAgICBDb25zdFN1YlR5cGUg
b3BlcmF0b3JbXSh1bnNpZ25lZCBzaG9ydCBpZHgpIGNvbnN0CiAgICB7ICggKGludCkocHRyXyAh
PSAwKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FOdWxsUHRyLCAicHRyXyAhPSAwIiwgIi9ob21l
L21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5oIiwgMjEyKSwgYWJvcnQoKSkgKTsgcmV0dXJu
IHB0cl8gLT4gb3BlcmF0b3JbXShpZHgpOyB9CgoKICAgIFN1YlR5cGUgb3BlcmF0b3JbXShpbnQg
aWR4KQogICAgeyAoIChpbnQpKHB0cl8gIT0gMCkgPyAodm9pZCkwIDogKE9COjpOQ0EoTkNBTnVs
bFB0ciwgInB0cl8gIT0gMCIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGUuaCIs
IDIxNiksIGFib3J0KCkpICk7IHJldHVybiBwdHJfIC0+IG9wZXJhdG9yW10oaWR4KTsgfQogICAg
U3ViVHlwZSBvcGVyYXRvcltdKHVuc2lnbmVkIGludCBpZHgpCiAgICB7ICggKGludCkocHRyXyAh
PSAwKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FOdWxsUHRyLCAicHRyXyAhPSAwIiwgIi9ob21l
L21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5oIiwgMjE4KSwgYWJvcnQoKSkgKTsgcmV0dXJu
IHB0cl8gLT4gb3BlcmF0b3JbXShpZHgpOyB9CiMgMjI3ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUv
T0IvVGVtcGxhdGUuaCIKICAgIENvbnN0U3ViVHlwZSBvcGVyYXRvcltdKGludCBpZHgpIGNvbnN0
CiAgICB7ICggKGludCkocHRyXyAhPSAwKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FOdWxsUHRy
LCAicHRyXyAhPSAwIiwgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5oIiwgMjI4
KSwgYWJvcnQoKSkgKTsgcmV0dXJuIHB0cl8gLT4gb3BlcmF0b3JbXShpZHgpOyB9CiAgICBDb25z
dFN1YlR5cGUgb3BlcmF0b3JbXSh1bnNpZ25lZCBpbnQgaWR4KSBjb25zdAogICAgeyAoIChpbnQp
KHB0cl8gIT0gMCkgPyAodm9pZCkwIDogKE9COjpOQ0EoTkNBTnVsbFB0ciwgInB0cl8gIT0gMCIs
ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGUuaCIsIDIzMCksIGFib3J0KCkpICk7
IHJldHVybiBwdHJfIC0+IG9wZXJhdG9yW10oaWR4KTsgfQoKCiAgICBTdWJUeXBlIG9wZXJhdG9y
W10obG9uZyBpZHgpCiAgICB7ICggKGludCkocHRyXyAhPSAwKSA/ICh2b2lkKTAgOiAoT0I6Ok5D
QShOQ0FOdWxsUHRyLCAicHRyXyAhPSAwIiwgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1w
bGF0ZS5oIiwgMjM0KSwgYWJvcnQoKSkgKTsgcmV0dXJuIHB0cl8gLT4gb3BlcmF0b3JbXShpZHgp
OyB9CiAgICBTdWJUeXBlIG9wZXJhdG9yW10odW5zaWduZWQgbG9uZyBpZHgpCiAgICB7ICggKGlu
dCkocHRyXyAhPSAwKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FOdWxsUHRyLCAicHRyXyAhPSAw
IiwgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5oIiwgMjM2KSwgYWJvcnQoKSkg
KTsgcmV0dXJuIHB0cl8gLT4gb3BlcmF0b3JbXShpZHgpOyB9CiMgMjQ1ICIvaG9tZS9tYXR0L29i
L2luY2x1ZGUvT0IvVGVtcGxhdGUuaCIKICAgIENvbnN0U3ViVHlwZSBvcGVyYXRvcltdKGxvbmcg
aWR4KSBjb25zdAogICAgeyAoIChpbnQpKHB0cl8gIT0gMCkgPyAodm9pZCkwIDogKE9COjpOQ0Eo
TkNBTnVsbFB0ciwgInB0cl8gIT0gMCIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxh
dGUuaCIsIDI0NiksIGFib3J0KCkpICk7IHJldHVybiBwdHJfIC0+IG9wZXJhdG9yW10oaWR4KTsg
fQogICAgQ29uc3RTdWJUeXBlIG9wZXJhdG9yW10odW5zaWduZWQgbG9uZyBpZHgpIGNvbnN0CiAg
ICB7ICggKGludCkocHRyXyAhPSAwKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FOdWxsUHRyLCAi
cHRyXyAhPSAwIiwgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5oIiwgMjQ4KSwg
YWJvcnQoKSkgKTsgcmV0dXJuIHB0cl8gLT4gb3BlcmF0b3JbXShpZHgpOyB9CgoKCgoKCiAgICBv
cGVyYXRvciBUJigpIGNvbnN0IHsgKCAoaW50KShwdHJfICE9IDApID8gKHZvaWQpMCA6IChPQjo6
TkNBKE5DQU51bGxEZXJlZiwgInB0cl8gIT0gMCIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0Iv
VGVtcGxhdGUuaCIsIDI1NSksIGFib3J0KCkpICk7IHJldHVybiAqcHRyXzsgfQoKCgoKICAgIG9w
ZXJhdG9yIFQqJigpIHsgcmV0dXJuIHB0cl87IH0KCgogICAgY29uc3QgVCYgaW4oKSBjb25zdCB7
ICggKGludCkocHRyXyAhPSAwKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FOdWxsRGVyZWYsICJw
dHJfICE9IDAiLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlLmgiLCAyNjMpLCBh
Ym9ydCgpKSApOyByZXR1cm4gKnB0cl87IH0KICAgIFQmIGlub3V0KCkgeyAoIChpbnQpKHB0cl8g
IT0gMCkgPyAodm9pZCkwIDogKE9COjpOQ0EoTkNBTnVsbERlcmVmLCAicHRyXyAhPSAwIiwgIi9o
b21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5oIiwgMjY0KSwgYWJvcnQoKSkgKTsgcmV0
dXJuICpwdHJfOyB9CiAgICBUKiYgb3V0KCkgeyBkZWxldGUgcHRyXzsgcHRyXyA9IDA7IHJldHVy
biBwdHJfOyB9CiAgICBUKiBfcmV0bigpIHsgVCogcmV0ID0gcHRyXzsgcHRyXyA9IDA7IHJldHVy
biByZXQ7IH0KCgoKCiAgICBUKiYgcHRyKCkgeyByZXR1cm4gcHRyXzsgfQp9OwoKCgoKdGVtcGxh
dGU8Y2xhc3MgVF9zbGljZSwgY2xhc3MgVCwgQ09SQkE6OlVMb25nIG4+CmNsYXNzIEZpeEFycmF5
VmFyCnsKICAgIFRfc2xpY2UqIHB0cl87CgpwdWJsaWM6CgogICAgRml4QXJyYXlWYXIoKSA6IHB0
cl8oMCkgeyB9CiAgICBGaXhBcnJheVZhcihUX3NsaWNlKiBwKSA6IHB0cl8ocCkgeyAoIChpbnQp
KHAgIT0gMCkgPyAodm9pZCkwIDogKE9COjpOQ0EoTkNBTnVsbEluaXQsICJwICE9IDAiLCAiL2hv
bWUvbWF0dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlLmgiLCAyODUpLCBhYm9ydCgpKSApOyB9CiAg
ICBGaXhBcnJheVZhcihjb25zdCBGaXhBcnJheVZhcjxUX3NsaWNlLCBULCBuPiYpOwogICAgfkZp
eEFycmF5VmFyKCkgeyBkZWxldGUgW10gKFQqKSBwdHJfOyB9CgogICAgRml4QXJyYXlWYXI8VF9z
bGljZSwgVCwgbj4mIG9wZXJhdG9yPShUX3NsaWNlKik7CiAgICBGaXhBcnJheVZhcjxUX3NsaWNl
LCBULCBuPiYKICAgIG9wZXJhdG9yPShjb25zdCBGaXhBcnJheVZhcjxUX3NsaWNlLCBULCBuPiYp
OwoKICAgIFRfc2xpY2UmIG9wZXJhdG9yW10oc2hvcnQgaWR4KSB7IHJldHVybiBwdHJfW2lkeF07
IH0KICAgIGNvbnN0IFRfc2xpY2UmIG9wZXJhdG9yW10oc2hvcnQgaWR4KSBjb25zdAogICAgeyBy
ZXR1cm4gKChjb25zdCBUX3NsaWNlKilwdHJfKVtpZHhdOyB9CiAgICBUX3NsaWNlJiBvcGVyYXRv
cltdKHVuc2lnbmVkIHNob3J0IGlkeCkgeyByZXR1cm4gcHRyX1tpZHhdOyB9CiAgICBjb25zdCBU
X3NsaWNlJiBvcGVyYXRvcltdKHVuc2lnbmVkIHNob3J0IGlkeCkgY29uc3QKICAgIHsgcmV0dXJu
ICgoY29uc3QgVF9zbGljZSopcHRyXylbaWR4XTsgfQogICAgVF9zbGljZSYgb3BlcmF0b3JbXShp
bnQgaWR4KSB7IHJldHVybiBwdHJfW2lkeF07IH0KICAgIGNvbnN0IFRfc2xpY2UmIG9wZXJhdG9y
W10oaW50IGlkeCkgY29uc3QKICAgIHsgcmV0dXJuICgoY29uc3QgVF9zbGljZSopcHRyXylbaWR4
XTsgfQogICAgVF9zbGljZSYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpbnQgaWR4KSB7IHJldHVybiBw
dHJfW2lkeF07IH0KICAgIGNvbnN0IFRfc2xpY2UmIG9wZXJhdG9yW10odW5zaWduZWQgaW50IGlk
eCkgY29uc3QKICAgIHsgcmV0dXJuICgoY29uc3QgVF9zbGljZSopcHRyXylbaWR4XTsgfQogICAg
VF9zbGljZSYgb3BlcmF0b3JbXShsb25nIGlkeCkgeyByZXR1cm4gcHRyX1tpZHhdOyB9CiAgICBj
b25zdCBUX3NsaWNlJiBvcGVyYXRvcltdKGxvbmcgaWR4KSBjb25zdAogICAgeyByZXR1cm4gKChj
b25zdCBUX3NsaWNlKilwdHJfKVtpZHhdOyB9CiAgICBUX3NsaWNlJiBvcGVyYXRvcltdKHVuc2ln
bmVkIGxvbmcgaWR4KSB7IHJldHVybiBwdHJfW2lkeF07IH0KICAgIGNvbnN0IFRfc2xpY2UmIG9w
ZXJhdG9yW10odW5zaWduZWQgbG9uZyBpZHgpIGNvbnN0CiAgICB7IHJldHVybiAoKGNvbnN0IFRf
c2xpY2UqKXB0cl8pW2lkeF07IH0KIyAzMjAgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1w
bGF0ZS5oIgogICAgb3BlcmF0b3IgVF9zbGljZSooKSBjb25zdCB7IHJldHVybiBwdHJfOyB9CiMg
MzM0ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGUuaCIKICAgIGNvbnN0IFRfc2xp
Y2UqIGluKCkgY29uc3QgeyByZXR1cm4gcHRyXzsgfQoKICAgIFRfc2xpY2UqIGlub3V0KCkgeyBy
ZXR1cm4gcHRyXzsgfQogICAgVF9zbGljZSogb3V0KCkgeyBkZWxldGUgW10gKFQqKSBwdHJfOyBw
dHJfID0gMDsgcmV0dXJuIHB0cl87IH0KICAgIFRfc2xpY2UqIF9yZXRuKCkgeyBUX3NsaWNlKiBy
ZXQgPSBwdHJfOyBwdHJfID0gMDsgcmV0dXJuIHJldDsgfQoKCgoKICAgIFRfc2xpY2UqIHB0cigp
IHsgcmV0dXJuIHB0cl87IH0KfTsKCgoKCnRlbXBsYXRlPGNsYXNzIFRfc2xpY2UsIGNsYXNzIFQs
IENPUkJBOjpVTG9uZyBuPiBjbGFzcyBWYXJBcnJheU91dDsKCnRlbXBsYXRlPGNsYXNzIFRfc2xp
Y2UsIGNsYXNzIFQsIENPUkJBOjpVTG9uZyBuPgpjbGFzcyBWYXJBcnJheVZhcgp7CiAgICBmcmll
bmQgY2xhc3MgVmFyQXJyYXlPdXQ8VF9zbGljZSwgVCwgbj47CiAgICBUX3NsaWNlKiBwdHJfOwoK
cHVibGljOgoKICAgIFZhckFycmF5VmFyKCkgOiBwdHJfKDApIHsgfQogICAgVmFyQXJyYXlWYXIo
VF9zbGljZSogcCkgOiBwdHJfKHApIHsgKCAoaW50KShwICE9IDApID8gKHZvaWQpMCA6IChPQjo6
TkNBKE5DQU51bGxJbml0LCAicCAhPSAwIiwgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1w
bGF0ZS5oIiwgMzYwKSwgYWJvcnQoKSkgKTsgfQogICAgVmFyQXJyYXlWYXIoY29uc3QgVmFyQXJy
YXlWYXI8VF9zbGljZSwgVCwgbj4mKTsKICAgIH5WYXJBcnJheVZhcigpIHsgZGVsZXRlIFtdIChU
KikgcHRyXzsgfQoKICAgIFZhckFycmF5VmFyPFRfc2xpY2UsIFQsIG4+JiBvcGVyYXRvcj0oVF9z
bGljZSopOwogICAgVmFyQXJyYXlWYXI8VF9zbGljZSwgVCwgbj4mCiAgICBvcGVyYXRvcj0oY29u
c3QgVmFyQXJyYXlWYXI8VF9zbGljZSwgVCwgbj4mKTsKCiAgICBUX3NsaWNlJiBvcGVyYXRvcltd
KHNob3J0IGlkeCkgeyByZXR1cm4gcHRyX1tpZHhdOyB9CiAgICBjb25zdCBUX3NsaWNlJiBvcGVy
YXRvcltdKHNob3J0IGlkeCkgY29uc3QKICAgIHsgcmV0dXJuICgoY29uc3QgVF9zbGljZSopcHRy
XylbaWR4XTsgfQogICAgVF9zbGljZSYgb3BlcmF0b3JbXSh1bnNpZ25lZCBzaG9ydCBpZHgpIHsg
cmV0dXJuIHB0cl9baWR4XTsgfQogICAgY29uc3QgVF9zbGljZSYgb3BlcmF0b3JbXSh1bnNpZ25l
ZCBzaG9ydCBpZHgpIGNvbnN0CiAgICB7IHJldHVybiAoKGNvbnN0IFRfc2xpY2UqKXB0cl8pW2lk
eF07IH0KICAgIFRfc2xpY2UmIG9wZXJhdG9yW10oaW50IGlkeCkgeyByZXR1cm4gcHRyX1tpZHhd
OyB9CiAgICBjb25zdCBUX3NsaWNlJiBvcGVyYXRvcltdKGludCBpZHgpIGNvbnN0CiAgICB7IHJl
dHVybiAoKGNvbnN0IFRfc2xpY2UqKXB0cl8pW2lkeF07IH0KICAgIFRfc2xpY2UmIG9wZXJhdG9y
W10odW5zaWduZWQgaW50IGlkeCkgeyByZXR1cm4gcHRyX1tpZHhdOyB9CiAgICBjb25zdCBUX3Ns
aWNlJiBvcGVyYXRvcltdKHVuc2lnbmVkIGludCBpZHgpIGNvbnN0CiAgICB7IHJldHVybiAoKGNv
bnN0IFRfc2xpY2UqKXB0cl8pW2lkeF07IH0KICAgIFRfc2xpY2UmIG9wZXJhdG9yW10obG9uZyBp
ZHgpIHsgcmV0dXJuIHB0cl9baWR4XTsgfQogICAgY29uc3QgVF9zbGljZSYgb3BlcmF0b3JbXShs
b25nIGlkeCkgY29uc3QKICAgIHsgcmV0dXJuICgoY29uc3QgVF9zbGljZSopcHRyXylbaWR4XTsg
fQogICAgVF9zbGljZSYgb3BlcmF0b3JbXSh1bnNpZ25lZCBsb25nIGlkeCkgeyByZXR1cm4gcHRy
X1tpZHhdOyB9CiAgICBjb25zdCBUX3NsaWNlJiBvcGVyYXRvcltdKHVuc2lnbmVkIGxvbmcgaWR4
KSBjb25zdAogICAgeyByZXR1cm4gKChjb25zdCBUX3NsaWNlKilwdHJfKVtpZHhdOyB9CiMgMzk1
ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGUuaCIKICAgIG9wZXJhdG9yIFRfc2xp
Y2UqJigpIGNvbnN0IHsgcmV0dXJuIChUX3NsaWNlKiYpcHRyXzsgfQojIDQwOSAiL2hvbWUvbWF0
dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlLmgiCiAgICBjb25zdCBUX3NsaWNlKiBpbigpIGNvbnN0
IHsgcmV0dXJuIHB0cl87IH0KCiAgICBUX3NsaWNlKiBpbm91dCgpIHsgcmV0dXJuIHB0cl87IH0K
ICAgIFRfc2xpY2UqJiBvdXQoKSB7IGRlbGV0ZSBbXSAoVCopIHB0cl87IHB0cl8gPSAwOyByZXR1
cm4gcHRyXzsgfQogICAgVF9zbGljZSogX3JldG4oKSB7IFRfc2xpY2UqIHJldCA9IHB0cl87IHB0
cl8gPSAwOyByZXR1cm4gcmV0OyB9CgoKCgogICAgVF9zbGljZSogcHRyKCkgeyByZXR1cm4gcHRy
XzsgfQp9OwoKCgoKdGVtcGxhdGU8Y2xhc3MgVF9zbGljZSwgY2xhc3MgVCwgQ09SQkE6OlVMb25n
IG4sIGNsYXNzIFU+CmNsYXNzIEZpeEFycmF5Rm9yQW55CnsKCgoKCgogICAgdHlwZWRlZiBVIFVu
aXF1ZTsKCiAgICBUX3NsaWNlKiBwdHJfOwogICAgQ09SQkE6OkJvb2xlYW4gbm9jb3B5XzsKCnB1
YmxpYzoKCiAgICBGaXhBcnJheUZvckFueSgpIDogcHRyXygwKSwgbm9jb3B5XyhmYWxzZSkgeyB9
CiAgICBGaXhBcnJheUZvckFueShUX3NsaWNlKiBwLCBDT1JCQTo6Qm9vbGVhbiBuYyA9IGZhbHNl
KQogICAgICAgIDogcHRyXyhwKSwgbm9jb3B5XyhuYykgeyB9OwogICAgRml4QXJyYXlGb3JBbnko
Y29uc3QgRml4QXJyYXlGb3JBbnk8VF9zbGljZSwgVCwgbiwgVT4mIHIsCiAgICAgICAgICAgICAg
ICAgIENPUkJBOjpCb29sZWFuIG5jID0gZmFsc2UpCiAgICAgICAgOiBwdHJfKHIucHRyXyksIG5v
Y29weV8obmMpIHsgfTsKCiAgICBDT1JCQTo6Qm9vbGVhbiBub2NvcHkoKSBjb25zdCB7IHJldHVy
biBub2NvcHlfOyB9CgogICAgRml4QXJyYXlGb3JBbnk8VF9zbGljZSwgVCwgbiwgVT4mIG9wZXJh
dG9yPShUX3NsaWNlKiBwKQogICAgeyBwdHJfID0gcDsgcmV0dXJuICp0aGlzOyB9CiAgICBGaXhB
cnJheUZvckFueTxUX3NsaWNlLCBULCBuLCBVPiYKICAgIG9wZXJhdG9yPShjb25zdCBGaXhBcnJh
eUZvckFueTxUX3NsaWNlLCBULCBuLCBVPiYgcikKICAgIHsgcHRyXyA9IHIucHRyXzsgcmV0dXJu
ICp0aGlzOyB9CgogICAgVF9zbGljZSYgb3BlcmF0b3JbXShzaG9ydCBpZHgpIHsgcmV0dXJuIHB0
cl9baWR4XTsgfQogICAgY29uc3QgVF9zbGljZSYgb3BlcmF0b3JbXShzaG9ydCBpZHgpIGNvbnN0
CiAgICB7IHJldHVybiAoKGNvbnN0IFRfc2xpY2UqKXB0cl8pW2lkeF07IH0KICAgIFRfc2xpY2Um
IG9wZXJhdG9yW10odW5zaWduZWQgc2hvcnQgaWR4KSB7IHJldHVybiBwdHJfW2lkeF07IH0KICAg
IGNvbnN0IFRfc2xpY2UmIG9wZXJhdG9yW10odW5zaWduZWQgc2hvcnQgaWR4KSBjb25zdAogICAg
eyByZXR1cm4gKChjb25zdCBUX3NsaWNlKilwdHJfKVtpZHhdOyB9CiAgICBUX3NsaWNlJiBvcGVy
YXRvcltdKGludCBpZHgpIHsgcmV0dXJuIHB0cl9baWR4XTsgfQogICAgY29uc3QgVF9zbGljZSYg
b3BlcmF0b3JbXShpbnQgaWR4KSBjb25zdAogICAgeyByZXR1cm4gKChjb25zdCBUX3NsaWNlKilw
dHJfKVtpZHhdOyB9CiAgICBUX3NsaWNlJiBvcGVyYXRvcltdKHVuc2lnbmVkIGludCBpZHgpIHsg
cmV0dXJuIHB0cl9baWR4XTsgfQogICAgY29uc3QgVF9zbGljZSYgb3BlcmF0b3JbXSh1bnNpZ25l
ZCBpbnQgaWR4KSBjb25zdAogICAgeyByZXR1cm4gKChjb25zdCBUX3NsaWNlKilwdHJfKVtpZHhd
OyB9CiAgICBUX3NsaWNlJiBvcGVyYXRvcltdKGxvbmcgaWR4KSB7IHJldHVybiBwdHJfW2lkeF07
IH0KICAgIGNvbnN0IFRfc2xpY2UmIG9wZXJhdG9yW10obG9uZyBpZHgpIGNvbnN0CiAgICB7IHJl
dHVybiAoKGNvbnN0IFRfc2xpY2UqKXB0cl8pW2lkeF07IH0KICAgIFRfc2xpY2UmIG9wZXJhdG9y
W10odW5zaWduZWQgbG9uZyBpZHgpIHsgcmV0dXJuIHB0cl9baWR4XTsgfQogICAgY29uc3QgVF9z
bGljZSYgb3BlcmF0b3JbXSh1bnNpZ25lZCBsb25nIGlkeCkgY29uc3QKICAgIHsgcmV0dXJuICgo
Y29uc3QgVF9zbGljZSopcHRyXylbaWR4XTsgfQojIDQ4MSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRl
L09CL1RlbXBsYXRlLmgiCiAgICBvcGVyYXRvciBUX3NsaWNlKigpIGNvbnN0IHsgcmV0dXJuIHB0
cl87IH0KIyA0OTUgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5oIgogICAgY29u
c3QgVF9zbGljZSogaW4oKSBjb25zdCB7IHJldHVybiBwdHJfOyB9CgogICAgVF9zbGljZSogaW5v
dXQoKSB7IHJldHVybiBwdHJfOyB9CiAgICBUX3NsaWNlKiBvdXQoKSB7IGRlbGV0ZSBbXSAoVCop
IHB0cl87IHB0cl8gPSAwOyByZXR1cm4gcHRyXzsgfQogICAgVF9zbGljZSogX3JldG4oKSB7IFRf
c2xpY2UqIHJldCA9IHB0cl87IHB0cl8gPSAwOyByZXR1cm4gcmV0OyB9CgoKCgogICAgVF9zbGlj
ZSogcHRyKCkgeyByZXR1cm4gcHRyXzsgfQp9OwoKCgoKdGVtcGxhdGU8Y2xhc3MgVF9zbGljZSwg
Y2xhc3MgVCwgQ09SQkE6OlVMb25nIG4sIGNsYXNzIFU+CmNsYXNzIFZhckFycmF5Rm9yQW55CnsK
CgoKCgogICAgdHlwZWRlZiBVIFVuaXF1ZTsKCiAgICBUX3NsaWNlKiBwdHJfOwogICAgQ09SQkE6
OkJvb2xlYW4gbm9jb3B5XzsKCnB1YmxpYzoKCiAgICBWYXJBcnJheUZvckFueSgpIDogcHRyXygw
KSwgbm9jb3B5XyhmYWxzZSkgeyB9CiAgICBWYXJBcnJheUZvckFueShUX3NsaWNlKiBwLCBDT1JC
QTo6Qm9vbGVhbiBuYyA9IGZhbHNlKQogICAgICAgIDogcHRyXyhwKSwgbm9jb3B5XyhuYykgeyB9
OwogICAgVmFyQXJyYXlGb3JBbnkoY29uc3QgVmFyQXJyYXlGb3JBbnk8VF9zbGljZSwgVCwgbiwg
VT4mIHIsCiAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIG5jID0gZmFsc2UpCiAgICAg
ICAgOiBwdHJfKHIucHRyXyksIG5vY29weV8obmMpIHsgfTsKCiAgICBDT1JCQTo6Qm9vbGVhbiBu
b2NvcHkoKSBjb25zdCB7IHJldHVybiBub2NvcHlfOyB9CgogICAgVmFyQXJyYXlGb3JBbnk8VF9z
bGljZSwgVCwgbiwgVT4mIG9wZXJhdG9yPShUX3NsaWNlKiBwKQogICAgeyBwdHJfID0gcDsgcmV0
dXJuICp0aGlzOyB9CiAgICBWYXJBcnJheUZvckFueTxUX3NsaWNlLCBULCBuLCBVPiYKICAgIG9w
ZXJhdG9yPShjb25zdCBWYXJBcnJheUZvckFueTxUX3NsaWNlLCBULCBuLCBVPiYgcikKICAgIHsg
cHRyXyA9IHIucHRyXzsgcmV0dXJuICp0aGlzOyB9CgogICAgVF9zbGljZSYgb3BlcmF0b3JbXShz
aG9ydCBpZHgpIHsgcmV0dXJuIHB0cl9baWR4XTsgfQogICAgY29uc3QgVF9zbGljZSYgb3BlcmF0
b3JbXShzaG9ydCBpZHgpIGNvbnN0CiAgICB7IHJldHVybiAoKGNvbnN0IFRfc2xpY2UqKXB0cl8p
W2lkeF07IH0KICAgIFRfc2xpY2UmIG9wZXJhdG9yW10odW5zaWduZWQgc2hvcnQgaWR4KSB7IHJl
dHVybiBwdHJfW2lkeF07IH0KICAgIGNvbnN0IFRfc2xpY2UmIG9wZXJhdG9yW10odW5zaWduZWQg
c2hvcnQgaWR4KSBjb25zdAogICAgeyByZXR1cm4gKChjb25zdCBUX3NsaWNlKilwdHJfKVtpZHhd
OyB9CiAgICBUX3NsaWNlJiBvcGVyYXRvcltdKGludCBpZHgpIHsgcmV0dXJuIHB0cl9baWR4XTsg
fQogICAgY29uc3QgVF9zbGljZSYgb3BlcmF0b3JbXShpbnQgaWR4KSBjb25zdAogICAgeyByZXR1
cm4gKChjb25zdCBUX3NsaWNlKilwdHJfKVtpZHhdOyB9CiAgICBUX3NsaWNlJiBvcGVyYXRvcltd
KHVuc2lnbmVkIGludCBpZHgpIHsgcmV0dXJuIHB0cl9baWR4XTsgfQogICAgY29uc3QgVF9zbGlj
ZSYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpbnQgaWR4KSBjb25zdAogICAgeyByZXR1cm4gKChjb25z
dCBUX3NsaWNlKilwdHJfKVtpZHhdOyB9CiAgICBUX3NsaWNlJiBvcGVyYXRvcltdKGxvbmcgaWR4
KSB7IHJldHVybiBwdHJfW2lkeF07IH0KICAgIGNvbnN0IFRfc2xpY2UmIG9wZXJhdG9yW10obG9u
ZyBpZHgpIGNvbnN0CiAgICB7IHJldHVybiAoKGNvbnN0IFRfc2xpY2UqKXB0cl8pW2lkeF07IH0K
ICAgIFRfc2xpY2UmIG9wZXJhdG9yW10odW5zaWduZWQgbG9uZyBpZHgpIHsgcmV0dXJuIHB0cl9b
aWR4XTsgfQogICAgY29uc3QgVF9zbGljZSYgb3BlcmF0b3JbXSh1bnNpZ25lZCBsb25nIGlkeCkg
Y29uc3QKICAgIHsgcmV0dXJuICgoY29uc3QgVF9zbGljZSopcHRyXylbaWR4XTsgfQojIDU2NyAi
L2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlLmgiCiAgICBvcGVyYXRvciBUX3NsaWNl
KiYoKSBjb25zdCB7IHJldHVybiAoVF9zbGljZSomKXB0cl87IH0KIyA1ODEgIi9ob21lL21hdHQv
b2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5oIgogICAgY29uc3QgVF9zbGljZSogaW4oKSBjb25zdCB7
IHJldHVybiBwdHJfOyB9CgogICAgVF9zbGljZSogaW5vdXQoKSB7IHJldHVybiBwdHJfOyB9CiAg
ICBUX3NsaWNlKiYgb3V0KCkgeyBkZWxldGUgW10gKFQqKSBwdHJfOyBwdHJfID0gMDsgcmV0dXJu
IHB0cl87IH0KICAgIFRfc2xpY2UqIF9yZXRuKCkgeyBUX3NsaWNlKiByZXQgPSBwdHJfOyBwdHJf
ID0gMDsgcmV0dXJuIHJldDsgfQoKCgoKICAgIFRfc2xpY2UqIHB0cigpIHsgcmV0dXJuIHB0cl87
IH0KfTsKCgoKCmNsYXNzIE9iakJhc2UKewp9OwoKdGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3MgT2Jq
Rm9yU2VxOwp0ZW1wbGF0ZTxjbGFzcyBUPiBjbGFzcyBPYmpPdXQ7Cgp0ZW1wbGF0ZTxjbGFzcyBU
PgpjbGFzcyBPYmpWYXIgOiBwdWJsaWMgT2JqQmFzZQp7CgoKCgogICAgT2JqVmFyKGNvbnN0IE9i
akJhc2UmKSB7IH0KICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IE9iakJhc2UmKSB7IH0KCgoKCgog
ICAgZnJpZW5kIGNsYXNzIE9iak91dDxUPjsKCiAgICBUKiBwdHJfOwoKcHVibGljOgoKCgogICAg
T2JqVmFyKCkgOiBwdHJfKDApIHsgfQogICAgT2JqVmFyKFQqIHApIDogcHRyXyhwKSB7IH0KICAg
IE9ialZhcihjb25zdCBPYmpWYXI8VD4mIHIpIDogcHRyXyhyLnB0cl8pIHsgT0JEdXBsaWNhdGUo
cHRyXyk7IH0KICAgIE9ialZhcihjb25zdCBPYmpGb3JTZXE8VD4mKTsKICAgIH5PYmpWYXIoKSB7
IE9CUmVsZWFzZShwdHJfKTsgfQoKICAgIE9ialZhcjxUPiYgb3BlcmF0b3I9KFQqIHApCiAgICB7
CiAgICAgICAgVCogb2xkID0gcHRyXzsKICAgICAgICBwdHJfID0gcDsKICAgICAgICBPQlJlbGVh
c2Uob2xkKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiAgICBPYmpWYXI8VD4mIG9wZXJh
dG9yPShjb25zdCBPYmpWYXI8VD4mIHIpCiAgICB7CiAgICAgICAgaWYoci5wdHJfICE9IHB0cl8p
CiAgICAgICAgewogICAgICAgICAgICBUKiBvbGQgPSBwdHJfOwogICAgICAgICAgICBwdHJfID0g
ci5wdHJfOwogICAgICAgICAgICBPQkR1cGxpY2F0ZShwdHJfKTsKICAgICAgICAgICAgT0JSZWxl
YXNlKG9sZCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KICAgIE9ialZh
cjxUPiYgb3BlcmF0b3I9KGNvbnN0IE9iakZvclNlcTxUPiYpOwoKICAgIFQqIG9wZXJhdG9yLT4o
KSBjb25zdCB7ICggKGludCkocHRyXyAhPSAwKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FOdWxs
UHRyLCAicHRyXyAhPSAwIiwgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5oIiwg
NjUxKSwgYWJvcnQoKSkgKTsgcmV0dXJuIHB0cl87IH0KCgoKCgogICAgb3BlcmF0b3IgVComKCkg
Y29uc3QgeyByZXR1cm4gKFQqJilwdHJfOyB9CgoKCgoKCiAgICBUKiBpbigpIGNvbnN0IHsgcmV0
dXJuIHB0cl87IH0KICAgIFQqJiBpbm91dCgpIHsgcmV0dXJuIHB0cl87IH0KICAgIFQqJiBvdXQo
KSB7IFQqIG9sZCA9IHB0cl87IHB0cl8gPSAwOyBPQlJlbGVhc2Uob2xkKTsgcmV0dXJuIHB0cl87
IH0KICAgIFQqIF9yZXRuKCkgeyBUKiByZXQgPSBwdHJfOyBwdHJfID0gMDsgcmV0dXJuIHJldDsg
fQoKCgoKICAgIFQqJiBwdHIoKSB7IHJldHVybiBwdHJfOyB9Cn07CgoKCgp0ZW1wbGF0ZTxjbGFz
cyBUPgpjbGFzcyBPYmpGb3JTZXEgOiBwdWJsaWMgT2JqQmFzZQp7CgoKCgogICAgdm9pZCBvcGVy
YXRvcj0oY29uc3QgT2JqQmFzZSYpIHsgfQogICAgT2JqRm9yU2VxKGNvbnN0IE9iakJhc2UmKSB7
IH0KCiAgICBUKiogcHRyXzsKICAgIENPUkJBOjpCb29sZWFuIHJlbF87CgpwdWJsaWM6CgoKCgoK
ICAgIE9iakZvclNlcShUKiogcCwgQ09SQkE6OkJvb2xlYW4gcmVsKSA6IHB0cl8ocCksIHJlbF8o
cmVsKSB7IH0KICAgIE9iakZvclNlcShjb25zdCBPYmpGb3JTZXE8VD4mIHIpIDogcHRyXyhyLnB0
cl8pLCByZWxfKHIucmVsXykgeyB9CgoKCgogICAgT2JqRm9yU2VxPFQ+JiBvcGVyYXRvcj0oVCog
cCkKICAgIHsKICAgICAgICBpZihyZWxfKQogICAgICAgIHsKICAgICAgICAgICAgVCogb2xkID0g
KnB0cl87CiAgICAgICAgICAgICpwdHJfID0gcDsKICAgICAgICAgICAgT0JSZWxlYXNlKG9sZCk7
CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgICAgKnB0cl8gPSBwOwogICAgICAgIHJl
dHVybiAqdGhpczsKICAgIH0KICAgIE9iakZvclNlcTxUPiYgb3BlcmF0b3I9KGNvbnN0IE9ialZh
cjxUPiYgcikKICAgIHsKICAgICAgICBpZihyLmluKCkgIT0gKnB0cl8pCiAgICAgICAgewogICAg
ICAgICAgICBpZihyZWxfKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBUKiBvbGQgPSAq
cHRyXzsKICAgICAgICAgICAgICAgICpwdHJfID0gci5pbigpOwogICAgICAgICAgICAgICAgT0JE
dXBsaWNhdGUoKnB0cl8pOwogICAgICAgICAgICAgICAgT0JSZWxlYXNlKG9sZCk7CiAgICAgICAg
ICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAqcHRy
XyA9IHIuaW4oKTsKICAgICAgICAgICAgICAgIE9CRHVwbGljYXRlKCpwdHJfKTsKICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiAgICBPYmpGb3JTZXE8
VD4mIG9wZXJhdG9yPShjb25zdCBPYmpGb3JTZXE8VD4mIHIpCiAgICB7CiAgICAgICAgaWYoKnIu
cHRyXyAhPSAqcHRyXykKICAgICAgICB7CiAgICAgICAgICAgIGlmKHJlbF8pCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgIFQqIG9sZCA9ICpwdHJfOwogICAgICAgICAgICAgICAgKnB0cl8g
PSAqci5wdHJfOwogICAgICAgICAgICAgICAgT0JEdXBsaWNhdGUoKnB0cl8pOwogICAgICAgICAg
ICAgICAgT0JSZWxlYXNlKG9sZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAqcHRyXyA9ICpyLnB0cl87CiAgICAgICAgICAgICAg
ICBPQkR1cGxpY2F0ZSgqcHRyXyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0
dXJuICp0aGlzOwogICAgfQoKICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7ICggKGludCkoKnB0
cl8gIT0gMCkgPyAodm9pZCkwIDogKE9COjpOQ0EoTkNBTnVsbFB0ciwgIipwdHJfICE9IDAiLCAi
L2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlLmgiLCA3NTQpLCBhYm9ydCgpKSApOyBy
ZXR1cm4gKnB0cl87IH0KCgoKCgogICAgb3BlcmF0b3IgVComKCkgY29uc3QgeyByZXR1cm4gKFQq
JikqcHRyXzsgfQoKCgoKCgogICAgVCogaW4oKSBjb25zdCB7IHJldHVybiAqcHRyXzsgfQogICAg
VComIGlub3V0KCkgeyByZXR1cm4gKnB0cl87IH0KICAgIFQqJiBvdXQoKQogICAgewogICAgICAg
IGlmKHJlbF8pCiAgICAgICAgewogICAgICAgICAgICBUKiBvbGQgPSAqcHRyXzsKICAgICAgICAg
ICAgKnB0cl8gPSAwOwogICAgICAgICAgICBPQlJlbGVhc2Uob2xkKTsKICAgICAgICB9CiAgICAg
ICAgZWxzZQogICAgICAgICAgICAqcHRyXyA9IDA7CiAgICAgICAgcmV0dXJuICpwdHJfOwogICAg
fQogICAgVCogX3JldG4oKSB7IFQqIHJldCA9ICpwdHJfOyAqcHRyXyA9IDA7IHJldHVybiByZXQ7
IH0KCgoKCiAgICBUKiYgcHRyKCkgeyByZXR1cm4gKnB0cl87IH0KfTsKCnRlbXBsYXRlPGNsYXNz
IFQ+CmlubGluZQpPYmpWYXI8VD46Ok9ialZhcihjb25zdCBPYmpGb3JTZXE8VD4mIHIpCiAgICA6
IHB0cl8oci5pbigpKQp7CiAgICBPQkR1cGxpY2F0ZShwdHJfKTsKfQoKdGVtcGxhdGU8Y2xhc3Mg
VD4KaW5saW5lIE9ialZhcjxUPiYKT2JqVmFyPFQ+OjpvcGVyYXRvcj0oY29uc3QgT2JqRm9yU2Vx
PFQ+JiByKQp7CiAgICBpZihyLmluKCkgIT0gcHRyXykKICAgIHsKICAgICAgICBUKiBvbGQgPSBw
dHJfOwogICAgICAgIHB0cl8gPSByLmluKCk7CiAgICAgICAgT0JEdXBsaWNhdGUocHRyXyk7CiAg
ICAgICAgT0JSZWxlYXNlKG9sZCk7CiAgICB9CiAgICByZXR1cm4gKnRoaXM7Cn0KIyA4MjMgIi9o
b21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5oIgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xh
c3MgVmFyT3V0CnsKCgoKICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFZhclZhcjxUPiYpIHsgfQoK
ICAgIFQqJiBwdHJfOwoKcHVibGljOgoKCgoKICAgIFZhck91dChUKiYgcCkKICAgICAgICA6IHB0
cl8ocCkKICAgIHsKICAgICAgICBwdHJfID0gMDsKICAgIH0KCiAgICBWYXJPdXQoVmFyVmFyPFQ+
JiBwKQogICAgICAgIDogcHRyXyhwLnB0cl8pCiAgICB7CiAgICAgICAgZGVsZXRlIHB0cl87CiAg
ICAgICAgcHRyXyA9IDA7CiAgICB9CgogICAgVmFyT3V0KGNvbnN0IFZhck91dDxUPiYgcCkKICAg
ICAgICA6IHB0cl8ocC5wdHJfKQogICAgewogICAgfQoKICAgIFZhck91dDxUPiYgb3BlcmF0b3I9
KGNvbnN0IFZhck91dDxUPiYgcCkKICAgIHsKICAgICAgICBwdHJfID0gcC5wdHJfOwogICAgICAg
IHJldHVybiAqdGhpczsKICAgIH0KCiAgICBWYXJPdXQ8VD4mIG9wZXJhdG9yPShUKiBwKQogICAg
ewogICAgICAgIHB0cl8gPSBwOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBUKiBv
cGVyYXRvci0+KCkgeyAoIChpbnQpKHB0cl8gIT0gMCkgPyAodm9pZCkwIDogKE9COjpOQ0EoTkNB
TnVsbFB0ciwgInB0cl8gIT0gMCIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGUu
aCIsIDg2OCksIGFib3J0KCkpICk7IHJldHVybiBwdHJfOyB9CgoKCgogICAgb3BlcmF0b3IgVCYo
KSB7ICggKGludCkocHRyXyAhPSAwKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FOdWxsRGVyZWYs
ICJwdHJfICE9IDAiLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlLmgiLCA4NzMp
LCBhYm9ydCgpKSApOyByZXR1cm4gKnB0cl87IH0KICAgIG9wZXJhdG9yIFQqJigpIHsgcmV0dXJu
IHB0cl87IH0KCgogICAgVComIHB0cigpIHsgcmV0dXJuIHB0cl87IH0KfTsKCgoKCnRlbXBsYXRl
PGNsYXNzIFQ+CmNsYXNzIFNlcU91dAp7CgoKCiAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBTZXFW
YXI8VD4mKSB7IH0KCiAgICBUKiYgcHRyXzsKCnB1YmxpYzoKCgoKCiAgICBTZXFPdXQoVComIHAp
CiAgICAgICAgOiBwdHJfKHApCiAgICB7CiAgICAgICAgcHRyXyA9IDA7CiAgICB9CgogICAgU2Vx
T3V0KFNlcVZhcjxUPiYgcCkKICAgICAgICA6IHB0cl8ocC5wdHJfKQogICAgewogICAgICAgIGRl
bGV0ZSBwdHJfOwogICAgICAgIHB0cl8gPSAwOwogICAgfQoKICAgIFNlcU91dChjb25zdCBTZXFP
dXQ8VD4mIHApCiAgICAgICAgOiBwdHJfKHAucHRyXykKICAgIHsKICAgIH0KCiAgICBTZXFPdXQ8
VD4mIG9wZXJhdG9yPShjb25zdCBTZXFPdXQ8VD4mIHApCiAgICB7CiAgICAgICAgcHRyXyA9IHAu
cHRyXzsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgU2VxT3V0PFQ+JiBvcGVyYXRv
cj0oVCogcCkKICAgIHsKICAgICAgICBwdHJfID0gcDsKICAgICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9CgogICAgVCogb3BlcmF0b3ItPigpIHsgKCAoaW50KShwdHJfICE9IDApID8gKHZvaWQpMCA6
IChPQjo6TkNBKE5DQU51bGxQdHIsICJwdHJfICE9IDAiLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRl
L09CL1RlbXBsYXRlLmgiLCA5MjgpLCBhYm9ydCgpKSApOyByZXR1cm4gcHRyXzsgfQoKCgoKCiAg
ICB0eXBlZGVmIHR5cGVuYW1lIFQ6OlN1YlR5cGUgU3ViVHlwZTsKICAgIHR5cGVkZWYgdHlwZW5h
bWUgVDo6Q29uc3RTdWJUeXBlIENvbnN0U3ViVHlwZTsKCgogICAgU3ViVHlwZSBvcGVyYXRvcltd
KHNob3J0IGlkeCkKICAgIHsgKCAoaW50KShwdHJfICE9IDApID8gKHZvaWQpMCA6IChPQjo6TkNB
KE5DQU51bGxQdHIsICJwdHJfICE9IDAiLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1RlbXBs
YXRlLmgiLCA5MzkpLCBhYm9ydCgpKSApOyByZXR1cm4gcHRyXyAtPiBvcGVyYXRvcltdKGlkeCk7
IH0KICAgIFN1YlR5cGUgb3BlcmF0b3JbXSh1bnNpZ25lZCBzaG9ydCBpZHgpCiAgICB7ICggKGlu
dCkocHRyXyAhPSAwKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FOdWxsUHRyLCAicHRyXyAhPSAw
IiwgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5oIiwgOTQxKSwgYWJvcnQoKSkg
KTsgcmV0dXJuIHB0cl8gLT4gb3BlcmF0b3JbXShpZHgpOyB9CiAgICBTdWJUeXBlIG9wZXJhdG9y
W10oaW50IGlkeCkKICAgIHsgKCAoaW50KShwdHJfICE9IDApID8gKHZvaWQpMCA6IChPQjo6TkNB
KE5DQU51bGxQdHIsICJwdHJfICE9IDAiLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1RlbXBs
YXRlLmgiLCA5NDMpLCBhYm9ydCgpKSApOyByZXR1cm4gcHRyXyAtPiBvcGVyYXRvcltdKGlkeCk7
IH0KICAgIFN1YlR5cGUgb3BlcmF0b3JbXSh1bnNpZ25lZCBpbnQgaWR4KQogICAgeyAoIChpbnQp
KHB0cl8gIT0gMCkgPyAodm9pZCkwIDogKE9COjpOQ0EoTkNBTnVsbFB0ciwgInB0cl8gIT0gMCIs
ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGUuaCIsIDk0NSksIGFib3J0KCkpICk7
IHJldHVybiBwdHJfIC0+IG9wZXJhdG9yW10oaWR4KTsgfQogICAgU3ViVHlwZSBvcGVyYXRvcltd
KGxvbmcgaWR4KQogICAgeyAoIChpbnQpKHB0cl8gIT0gMCkgPyAodm9pZCkwIDogKE9COjpOQ0Eo
TkNBTnVsbFB0ciwgInB0cl8gIT0gMCIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxh
dGUuaCIsIDk0NyksIGFib3J0KCkpICk7IHJldHVybiBwdHJfIC0+IG9wZXJhdG9yW10oaWR4KTsg
fQogICAgU3ViVHlwZSBvcGVyYXRvcltdKHVuc2lnbmVkIGxvbmcgaWR4KQogICAgeyAoIChpbnQp
KHB0cl8gIT0gMCkgPyAodm9pZCkwIDogKE9COjpOQ0EoTkNBTnVsbFB0ciwgInB0cl8gIT0gMCIs
ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGUuaCIsIDk0OSksIGFib3J0KCkpICk7
IHJldHVybiBwdHJfIC0+IG9wZXJhdG9yW10oaWR4KTsgfQoKCgoKICAgIG9wZXJhdG9yIFQmKCkg
eyAoIChpbnQpKHB0cl8gIT0gMCkgPyAodm9pZCkwIDogKE9COjpOQ0EoTkNBTnVsbERlcmVmLCAi
cHRyXyAhPSAwIiwgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5oIiwgOTU0KSwg
YWJvcnQoKSkgKTsgcmV0dXJuICpwdHJfOyB9CiAgICBvcGVyYXRvciBUKiYoKSB7IHJldHVybiBw
dHJfOyB9CgoKICAgIFQqJiBwdHIoKSB7IHJldHVybiBwdHJfOyB9Cn07CgoKCgp0ZW1wbGF0ZTxj
bGFzcyBUX3NsaWNlLCBjbGFzcyBULCBDT1JCQTo6VUxvbmcgbj4KY2xhc3MgVmFyQXJyYXlPdXQK
ewoKCgogICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVmFyQXJyYXlWYXI8VF9zbGljZSwgVCwgbj4m
KSB7IH0KICAgIFRfc2xpY2UqJiBwdHJfOwoKcHVibGljOgoKCgoKICAgIFZhckFycmF5T3V0KFRf
c2xpY2UqJiBwKQogICAgICAgIDogcHRyXyhwKQogICAgewogICAgICAgIHB0cl8gPSAwOwogICAg
fQoKICAgIFZhckFycmF5T3V0KFZhckFycmF5VmFyPFRfc2xpY2UsIFQsIG4+JiBwKQogICAgICAg
IDogcHRyXyhwLnB0cl8pCiAgICB7CiAgICAgICAgZGVsZXRlW10gcHRyXzsKICAgICAgICBwdHJf
ID0gMDsKICAgIH0KCiAgICBWYXJBcnJheU91dChjb25zdCBWYXJBcnJheU91dDxUX3NsaWNlLCBU
LCBuPiYgcCkKICAgICAgICA6IHB0cl8ocC5wdHJfKQogICAgewogICAgfQoKICAgIFZhckFycmF5
T3V0PFRfc2xpY2UsIFQsIG4+JiBvcGVyYXRvcj0oY29uc3QgVmFyQXJyYXlPdXQ8VF9zbGljZSwg
VCwgbj4mIHApCiAgICB7CiAgICAgICAgcHRyXyA9IHAucHRyXzsKICAgICAgICByZXR1cm4gKnRo
aXM7CiAgICB9CgogICAgVmFyQXJyYXlPdXQ8VF9zbGljZSwgVCwgbj4mIG9wZXJhdG9yPShUX3Ns
aWNlKiBwKQogICAgewogICAgICAgIHB0cl8gPSBwOwogICAgICAgIHJldHVybiAqdGhpczsKICAg
IH0KCiAgICBUX3NsaWNlJiBvcGVyYXRvcltdKHNob3J0IGlkeCkgeyByZXR1cm4gcHRyX1tpZHhd
OyB9CiAgICBUX3NsaWNlJiBvcGVyYXRvcltdKHVuc2lnbmVkIHNob3J0IGlkeCkgeyByZXR1cm4g
cHRyX1tpZHhdOyB9CiAgICBUX3NsaWNlJiBvcGVyYXRvcltdKGludCBpZHgpIHsgcmV0dXJuIHB0
cl9baWR4XTsgfQogICAgVF9zbGljZSYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpbnQgaWR4KSB7IHJl
dHVybiBwdHJfW2lkeF07IH0KICAgIFRfc2xpY2UmIG9wZXJhdG9yW10obG9uZyBpZHgpIHsgcmV0
dXJuIHB0cl9baWR4XTsgfQogICAgVF9zbGljZSYgb3BlcmF0b3JbXSh1bnNpZ25lZCBsb25nIGlk
eCkgeyByZXR1cm4gcHRyX1tpZHhdOyB9CgoKCgogICAgb3BlcmF0b3IgVF9zbGljZSomKCkgeyBy
ZXR1cm4gcHRyXzsgfQoKCiAgICBUX3NsaWNlKiYgcHRyKCkgeyByZXR1cm4gcHRyXzsgfQp9OwoK
CgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIE9iak91dAp7CiAgICBUKiYgcHRyXzsKCnB1Ymxp
YzoKCgoKCiAgICBPYmpPdXQoVComIHApCiAgICAgICAgOiBwdHJfKHApCiAgICB7CiAgICAgICAg
cHRyXyA9IDA7CiAgICB9CgogICAgT2JqT3V0KE9ialZhcjxUPiYgcCkKICAgICAgICA6IHB0cl8o
cC5wdHJfKQogICAgewogICAgICAgIFQqIG9sZCA9IHB0cl87CiAgICAgICAgcHRyXyA9IDA7CiAg
ICAgICAgT0JSZWxlYXNlKG9sZCk7CiAgICB9CgogICAgT2JqT3V0KGNvbnN0IE9iak91dDxUPiYg
cCkKICAgICAgICA6IHB0cl8ocC5wdHJfKQogICAgewogICAgfQoKICAgIE9iak91dDxUPiYgb3Bl
cmF0b3I9KGNvbnN0IE9iak91dDxUPiYgcCkKICAgIHsKICAgICAgICBwdHJfID0gcC5wdHJfOwog
ICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBPYmpPdXQ8VD4mIG9wZXJhdG9yPShjb25z
dCBPYmpWYXI8VD4mIHApCiAgICB7CiAgICAgICAgT0JEdXBsaWNhdGUocCk7CiAgICAgICAgcHRy
XyA9IHAuaW4oKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgT2JqT3V0PFQ+JiBv
cGVyYXRvcj0oVCogcCkKICAgIHsKICAgICAgICBwdHJfID0gcDsKICAgICAgICByZXR1cm4gKnRo
aXM7CiAgICB9CgogICAgVCogb3BlcmF0b3ItPigpIHsgKCAoaW50KShwdHJfICE9IDApID8gKHZv
aWQpMCA6IChPQjo6TkNBKE5DQU51bGxQdHIsICJwdHJfICE9IDAiLCAiL2hvbWUvbWF0dC9vYi9p
bmNsdWRlL09CL1RlbXBsYXRlLmgiLCAxMDc1KSwgYWJvcnQoKSkgKTsgcmV0dXJuIHB0cl87IH0K
CgoKCiAgICBvcGVyYXRvciBUKiYoKSB7IHJldHVybiBwdHJfOyB9CgoKICAgIFQqJiBwdHIoKSB7
IHJldHVybiBwdHJfOyB9Cn07CiMgMTA5MyAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1RlbXBs
YXRlLmgiCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFU+CmNsYXNzIEZpeFNlcQp7CgoKCgoKICAg
IHR5cGVkZWYgVSBVbmlxdWU7CgogICAgQ09SQkE6OlVMb25nIG1heF87CiAgICBDT1JCQTo6VUxv
bmcgbGVuXzsKICAgIENPUkJBOjpCb29sZWFuIHJlbF87CiAgICBUKiBkYXRhXzsKCnB1YmxpYzoK
CgoKCiAgICBzdGF0aWMgVCogYWxsb2NidWYoQ09SQkE6OlVMb25nIG4pIHsgcmV0dXJuIG5ldyBU
W25dOyB9CiAgICBzdGF0aWMgdm9pZCBmcmVlYnVmKFQqIHApIHsgZGVsZXRlIFtdIHA7IH0KCiAg
ICBGaXhTZXEoKTsKICAgIEZpeFNlcShDT1JCQTo6VUxvbmcpOwogICAgRml4U2VxKENPUkJBOjpV
TG9uZywgQ09SQkE6OlVMb25nLCBUKiwgQ09SQkE6OkJvb2xlYW4gPSBmYWxzZSk7CiAgICBGaXhT
ZXEoY29uc3QgRml4U2VxPFQsIFU+Jik7CiAgICB+Rml4U2VxKCkgeyBpZihyZWxfKSBmcmVlYnVm
KGRhdGFfKTsgfQoKICAgIEZpeFNlcTxULCBVPiYgb3BlcmF0b3I9KGNvbnN0IEZpeFNlcTxULCBV
PiYpOwoKICAgIENPUkJBOjpVTG9uZyBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbWF4XzsgfQoK
ICAgIHZvaWQgbGVuZ3RoKENPUkJBOjpVTG9uZyk7CiAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gbGVuXzsgfQoKICAgIHR5cGVkZWYgVCYgU3ViVHlwZTsKICAgIHR5cGVk
ZWYgY29uc3QgVCYgQ29uc3RTdWJUeXBlOwoKICAgIFQmIG9wZXJhdG9yW10oQ09SQkE6OlVMb25n
IGlkeCkKICAgIHsgKCAoaW50KShpZHggPCBsZW5fKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FT
ZXFSYW5nZSwgImlkeCA8IGxlbl8iLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRl
LmgiLCAxMTMzKSwgYWJvcnQoKSkgKTsgcmV0dXJuIGRhdGFfW2lkeF07IH0KICAgIGNvbnN0IFQm
IG9wZXJhdG9yW10oQ09SQkE6OlVMb25nIGlkeCkgY29uc3QKICAgIHsgKCAoaW50KShpZHggPCBs
ZW5fKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FTZXFSYW5nZSwgImlkeCA8IGxlbl8iLCAiL2hv
bWUvbWF0dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlLmgiLCAxMTM1KSwgYWJvcnQoKSkgKTsgcmV0
dXJuIGRhdGFfW2lkeF07IH0KCiAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlKCkgY29uc3QgeyBy
ZXR1cm4gcmVsXzsgfQogICAgdm9pZCByZXBsYWNlKENPUkJBOjpVTG9uZywgQ09SQkE6OlVMb25n
LCBUKiwKICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiA9IGZhbHNlKTsKICAgIFQqIGdl
dF9idWZmZXIoQ09SQkE6OkJvb2xlYW4gPSBmYWxzZSk7CiAgICBjb25zdCBUKiBnZXRfYnVmZmVy
KCkgY29uc3QgeyByZXR1cm4gZGF0YV87IH0KfTsKCgoKCnRlbXBsYXRlPGNsYXNzIFQsIENPUkJB
OjpVTG9uZyBtYXgsIGNsYXNzIFU+CmNsYXNzIEJuZEZpeFNlcQp7CgoKCgoKICAgIHR5cGVkZWYg
VSBVbmlxdWU7CgogICAgQ09SQkE6OlVMb25nIGxlbl87CiAgICBDT1JCQTo6Qm9vbGVhbiByZWxf
OwogICAgVCogZGF0YV87CgpwdWJsaWM6CgoKCgogICAgc3RhdGljIFQqIGFsbG9jYnVmKENPUkJB
OjpVTG9uZyk7CiAgICBzdGF0aWMgdm9pZCBmcmVlYnVmKFQqIHApIHsgZGVsZXRlIFtdIHA7IH0K
CiAgICBCbmRGaXhTZXEoKTsKICAgIEJuZEZpeFNlcShDT1JCQTo6VUxvbmcsIFQqLCBDT1JCQTo6
Qm9vbGVhbiA9IGZhbHNlKTsKICAgIEJuZEZpeFNlcShjb25zdCBCbmRGaXhTZXE8VCwgbWF4LCBV
PiYpOwogICAgfkJuZEZpeFNlcSgpIHsgaWYocmVsXykgZnJlZWJ1ZihkYXRhXyk7IH0KCiAgICBC
bmRGaXhTZXE8VCwgbWF4LCBVPiYgb3BlcmF0b3I9KGNvbnN0IEJuZEZpeFNlcTxULCBtYXgsIFU+
Jik7CgogICAgQ09SQkE6OlVMb25nIG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtYXg7IH0KCiAg
ICB2b2lkIGxlbmd0aChDT1JCQTo6VUxvbmcpOwogICAgQ09SQkE6OlVMb25nIGxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIGxlbl87IH0KCiAgICB0eXBlZGVmIFQmIFN1YlR5cGU7CiAgICB0eXBlZGVm
IGNvbnN0IFQmIENvbnN0U3ViVHlwZTsKCiAgICBUJiBvcGVyYXRvcltdKENPUkJBOjpVTG9uZyBp
ZHgpCiAgICB7ICggKGludCkoaWR4IDwgbGVuXykgPyAodm9pZCkwIDogKE9COjpOQ0EoTkNBU2Vx
UmFuZ2UsICJpZHggPCBsZW5fIiwgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5o
IiwgMTE4NSksIGFib3J0KCkpICk7IHJldHVybiBkYXRhX1tpZHhdOyB9CiAgICBjb25zdCBUJiBv
cGVyYXRvcltdKENPUkJBOjpVTG9uZyBpZHgpIGNvbnN0CiAgICB7ICggKGludCkoaWR4IDwgbGVu
XykgPyAodm9pZCkwIDogKE9COjpOQ0EoTkNBU2VxUmFuZ2UsICJpZHggPCBsZW5fIiwgIi9ob21l
L21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5oIiwgMTE4NyksIGFib3J0KCkpICk7IHJldHVy
biBkYXRhX1tpZHhdOyB9CgogICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSgpIGNvbnN0IHsgcmV0
dXJuIHJlbF87IH0KICAgIHZvaWQgcmVwbGFjZShDT1JCQTo6VUxvbmcsIFQqLCBDT1JCQTo6Qm9v
bGVhbiA9IGZhbHNlKTsKICAgIFQqIGdldF9idWZmZXIoQ09SQkE6OkJvb2xlYW4gPSBmYWxzZSk7
CiAgICBjb25zdCBUKiBnZXRfYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gZGF0YV87IH0KfTsKCgoK
CnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFU+CmNsYXNzIFZhclNlcQp7CgoKCgoKICAgIHR5cGVk
ZWYgVSBVbmlxdWU7CgogICAgQ09SQkE6OlVMb25nIG1heF87CiAgICBDT1JCQTo6VUxvbmcgbGVu
XzsKICAgIENPUkJBOjpCb29sZWFuIHJlbF87CiAgICBUKiBkYXRhXzsKCnB1YmxpYzoKCgoKCiAg
ICBzdGF0aWMgVCogYWxsb2NidWYoQ09SQkE6OlVMb25nIG4pIHsgcmV0dXJuIG5ldyBUW25dOyB9
CiAgICBzdGF0aWMgdm9pZCBmcmVlYnVmKFQqIHApIHsgZGVsZXRlIFtdIHA7IH0KCiAgICBWYXJT
ZXEoKTsKICAgIFZhclNlcShDT1JCQTo6VUxvbmcpOwogICAgVmFyU2VxKENPUkJBOjpVTG9uZywg
Q09SQkE6OlVMb25nLCBUKiwgQ09SQkE6OkJvb2xlYW4gPSBmYWxzZSk7CiAgICBWYXJTZXEoY29u
c3QgVmFyU2VxPFQsIFU+Jik7CiAgICB+VmFyU2VxKCkgeyBpZihyZWxfKSBmcmVlYnVmKGRhdGFf
KTsgfQoKICAgIFZhclNlcTxULCBVPiYgb3BlcmF0b3I9KGNvbnN0IFZhclNlcTxULCBVPiYpOwoK
ICAgIENPUkJBOjpVTG9uZyBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbWF4XzsgfQoKICAgIHZv
aWQgbGVuZ3RoKENPUkJBOjpVTG9uZyk7CiAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gbGVuXzsgfQoKICAgIHR5cGVkZWYgVCYgU3ViVHlwZTsKICAgIHR5cGVkZWYgY29u
c3QgVCYgQ29uc3RTdWJUeXBlOwoKICAgIFQmIG9wZXJhdG9yW10oQ09SQkE6OlVMb25nIGlkeCkK
ICAgIHsgKCAoaW50KShpZHggPCBsZW5fKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FTZXFSYW5n
ZSwgImlkeCA8IGxlbl8iLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlLmgiLCAx
MjM4KSwgYWJvcnQoKSkgKTsgcmV0dXJuIGRhdGFfW2lkeF07IH0KICAgIGNvbnN0IFQmIG9wZXJh
dG9yW10oQ09SQkE6OlVMb25nIGlkeCkgY29uc3QKICAgIHsgKCAoaW50KShpZHggPCBsZW5fKSA/
ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FTZXFSYW5nZSwgImlkeCA8IGxlbl8iLCAiL2hvbWUvbWF0
dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlLmgiLCAxMjQwKSwgYWJvcnQoKSkgKTsgcmV0dXJuIGRh
dGFfW2lkeF07IH0KCiAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlKCkgY29uc3QgeyByZXR1cm4g
cmVsXzsgfQogICAgdm9pZCByZXBsYWNlKENPUkJBOjpVTG9uZywgQ09SQkE6OlVMb25nLCBUKiwg
Q09SQkE6OkJvb2xlYW4gPSBmYWxzZSk7CiAgICBUKiBnZXRfYnVmZmVyKENPUkJBOjpCb29sZWFu
ID0gZmFsc2UpOwogICAgY29uc3QgVCogZ2V0X2J1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIGRhdGFf
OyB9Cn07CgoKCgp0ZW1wbGF0ZTxjbGFzcyBULCBDT1JCQTo6VUxvbmcgbWF4LCBjbGFzcyBVPgpj
bGFzcyBCbmRWYXJTZXEKewoKCgoKCiAgICB0eXBlZGVmIFUgVW5pcXVlOwoKICAgIENPUkJBOjpV
TG9uZyBsZW5fOwogICAgQ09SQkE6OkJvb2xlYW4gcmVsXzsKICAgIFQqIGRhdGFfOwoKcHVibGlj
OgoKCgoKICAgIHN0YXRpYyBUKiBhbGxvY2J1ZihDT1JCQTo6VUxvbmcpOwogICAgc3RhdGljIHZv
aWQgZnJlZWJ1ZihUKiBwKSB7IGRlbGV0ZSBbXSBwOyB9CgogICAgQm5kVmFyU2VxKCk7CiAgICBC
bmRWYXJTZXEoQ09SQkE6OlVMb25nLCBUKiwgQ09SQkE6OkJvb2xlYW4gPSBmYWxzZSk7CiAgICBC
bmRWYXJTZXEoY29uc3QgQm5kVmFyU2VxPFQsIG1heCwgVT4mKTsKICAgIH5CbmRWYXJTZXEoKSB7
IGlmKHJlbF8pIGZyZWVidWYoZGF0YV8pOyB9CgogICAgQm5kVmFyU2VxPFQsIG1heCwgVT4mIG9w
ZXJhdG9yPShjb25zdCBCbmRWYXJTZXE8VCwgbWF4LCBVPiYpOwoKICAgIENPUkJBOjpVTG9uZyBt
YXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbWF4OyB9CgogICAgdm9pZCBsZW5ndGgoQ09SQkE6OlVM
b25nKTsKICAgIENPUkJBOjpVTG9uZyBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBsZW5fOyB9Cgog
ICAgdHlwZWRlZiBUJiBTdWJUeXBlOwogICAgdHlwZWRlZiBjb25zdCBUJiBDb25zdFN1YlR5cGU7
CgogICAgVCYgb3BlcmF0b3JbXShDT1JCQTo6VUxvbmcgaWR4KQogICAgeyAoIChpbnQpKGlkeCA8
IGxlbl8pID8gKHZvaWQpMCA6IChPQjo6TkNBKE5DQVNlcVJhbmdlLCAiaWR4IDwgbGVuXyIsICIv
aG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGUuaCIsIDEyODkpLCBhYm9ydCgpKSApOyBy
ZXR1cm4gZGF0YV9baWR4XTsgfQogICAgY29uc3QgVCYgb3BlcmF0b3JbXShDT1JCQTo6VUxvbmcg
aWR4KSBjb25zdAogICAgeyAoIChpbnQpKGlkeCA8IGxlbl8pID8gKHZvaWQpMCA6IChPQjo6TkNB
KE5DQVNlcVJhbmdlLCAiaWR4IDwgbGVuXyIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVt
cGxhdGUuaCIsIDEyOTEpLCBhYm9ydCgpKSApOyByZXR1cm4gZGF0YV9baWR4XTsgfQoKICAgIENP
UkJBOjpCb29sZWFuIHJlbGVhc2UoKSBjb25zdCB7IHJldHVybiByZWxfOyB9CiAgICB2b2lkIHJl
cGxhY2UoQ09SQkE6OlVMb25nLCBUKiwgQ09SQkE6OkJvb2xlYW4gPSBmYWxzZSk7CiAgICBUKiBn
ZXRfYnVmZmVyKENPUkJBOjpCb29sZWFuID0gZmFsc2UpOwogICAgY29uc3QgVCogZ2V0X2J1ZmZl
cigpIGNvbnN0IHsgcmV0dXJuIGRhdGFfOyB9Cn07CgoKCgp0ZW1wbGF0ZTxjbGFzcyBUX3NsaWNl
LCBjbGFzcyBULCBDT1JCQTo6VUxvbmcgbiwgY2xhc3MgVT4KY2xhc3MgRml4QXJyYXlTZXEKewoK
CgoKCiAgICB0eXBlZGVmIFUgVW5pcXVlOwoKICAgIENPUkJBOjpVTG9uZyBtYXhfOwogICAgQ09S
QkE6OlVMb25nIGxlbl87CiAgICBDT1JCQTo6Qm9vbGVhbiByZWxfOwogICAgVF9zbGljZSoqIGRh
dGFfOwoKcHVibGljOgoKCgoKICAgIHN0YXRpYyBUX3NsaWNlKiogYWxsb2NidWYoQ09SQkE6OlVM
b25nKTsKICAgIHN0YXRpYyB2b2lkIGZyZWVidWYoVF9zbGljZSoqKTsKCiAgICBGaXhBcnJheVNl
cSgpOwogICAgRml4QXJyYXlTZXEoQ09SQkE6OlVMb25nKTsKICAgIEZpeEFycmF5U2VxKENPUkJB
OjpVTG9uZywgQ09SQkE6OlVMb25nLCBUX3NsaWNlKiosIENPUkJBOjpCb29sZWFuID0gZmFsc2Up
OwogICAgRml4QXJyYXlTZXEoY29uc3QgRml4QXJyYXlTZXE8VF9zbGljZSwgVCwgbiwgVT4mKTsK
ICAgIH5GaXhBcnJheVNlcSgpIHsgaWYocmVsXykgZnJlZWJ1ZihkYXRhXyk7IH0KCiAgICBGaXhB
cnJheVNlcTxUX3NsaWNlLCBULCBuLCBVPiYKICAgIG9wZXJhdG9yPShjb25zdCBGaXhBcnJheVNl
cTxUX3NsaWNlLCBULCBuLCBVPiYpOwoKICAgIENPUkJBOjpVTG9uZyBtYXhpbXVtKCkgY29uc3Qg
eyByZXR1cm4gbWF4XzsgfQoKICAgIHZvaWQgbGVuZ3RoKENPUkJBOjpVTG9uZyk7CiAgICBDT1JC
QTo6VUxvbmcgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbGVuXzsgfQoKICAgIHR5cGVkZWYgVF9z
bGljZSomIFN1YlR5cGU7CiAgICB0eXBlZGVmIGNvbnN0IFRfc2xpY2UqIENvbnN0U3ViVHlwZTsK
CiAgICBUX3NsaWNlKiYgb3BlcmF0b3JbXShDT1JCQTo6VUxvbmcgaWR4KQogICAgeyAoIChpbnQp
KGlkeCA8IGxlbl8pID8gKHZvaWQpMCA6IChPQjo6TkNBKE5DQVNlcVJhbmdlLCAiaWR4IDwgbGVu
XyIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGUuaCIsIDEzNDMpLCBhYm9ydCgp
KSApOyByZXR1cm4gZGF0YV9baWR4XTsgfQoKCgoKCiAgICBjb25zdCBUX3NsaWNlKiBvcGVyYXRv
cltdKENPUkJBOjpVTG9uZyBpZHgpIGNvbnN0CiAgICB7ICggKGludCkoaWR4IDwgbGVuXykgPyAo
dm9pZCkwIDogKE9COjpOQ0EoTkNBU2VxUmFuZ2UsICJpZHggPCBsZW5fIiwgIi9ob21lL21hdHQv
b2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5oIiwgMTM1MCksIGFib3J0KCkpICk7IHJldHVybiBkYXRh
X1tpZHhdOyB9CgoKICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UoKSBjb25zdCB7IHJldHVybiBy
ZWxfOyB9CiAgICB2b2lkIHJlcGxhY2UoQ09SQkE6OlVMb25nLCBDT1JCQTo6VUxvbmcsIFRfc2xp
Y2UqKiwKICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiA9IGZhbHNlKTsKICAgIFRfc2xp
Y2UqKiBnZXRfYnVmZmVyKENPUkJBOjpCb29sZWFuID0gZmFsc2UpOwogICAgVF9zbGljZSogY29u
c3QgKiBnZXRfYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gZGF0YV87IH0KfTsKCgoKCnRlbXBsYXRl
PGNsYXNzIFRfc2xpY2UsIGNsYXNzIFQsIENPUkJBOjpVTG9uZyBuLCBDT1JCQTo6VUxvbmcgbWF4
LCBjbGFzcyBVPgpjbGFzcyBCbmRGaXhBcnJheVNlcQp7CgoKCgoKICAgIHR5cGVkZWYgVSBVbmlx
dWU7CgogICAgQ09SQkE6OlVMb25nIGxlbl87CiAgICBDT1JCQTo6Qm9vbGVhbiByZWxfOwogICAg
VF9zbGljZSoqIGRhdGFfOwoKcHVibGljOgoKCgoKICAgIHN0YXRpYyBUX3NsaWNlKiogYWxsb2Ni
dWYoQ09SQkE6OlVMb25nKTsKICAgIHN0YXRpYyB2b2lkIGZyZWVidWYoVF9zbGljZSoqKTsKCiAg
ICBCbmRGaXhBcnJheVNlcSgpOwogICAgQm5kRml4QXJyYXlTZXEoQ09SQkE6OlVMb25nLCBUX3Ns
aWNlKiosIENPUkJBOjpCb29sZWFuID0gZmFsc2UpOwogICAgQm5kRml4QXJyYXlTZXEoY29uc3Qg
Qm5kRml4QXJyYXlTZXE8VF9zbGljZSwgVCwgbiwgbWF4LCBVPiYpOwogICAgfkJuZEZpeEFycmF5
U2VxKCkgeyBpZihyZWxfKSBmcmVlYnVmKGRhdGFfKTsgfQoKICAgIEJuZEZpeEFycmF5U2VxPFRf
c2xpY2UsIFQsIG4sIG1heCwgVT4mCiAgICBvcGVyYXRvcj0oY29uc3QgQm5kRml4QXJyYXlTZXE8
VF9zbGljZSwgVCwgbiwgbWF4LCBVPiYpOwoKICAgIENPUkJBOjpVTG9uZyBtYXhpbXVtKCkgY29u
c3QgeyByZXR1cm4gbWF4OyB9CgogICAgdm9pZCBsZW5ndGgoQ09SQkE6OlVMb25nKTsKICAgIENP
UkJBOjpVTG9uZyBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBsZW5fOyB9CgogICAgdHlwZWRlZiBU
X3NsaWNlKiYgU3ViVHlwZTsKICAgIHR5cGVkZWYgY29uc3QgVF9zbGljZSogQ29uc3RTdWJUeXBl
OwoKICAgIFRfc2xpY2UqJiBvcGVyYXRvcltdKENPUkJBOjpVTG9uZyBpZHgpCiAgICB7ICggKGlu
dCkoaWR4IDwgbGVuXykgPyAodm9pZCkwIDogKE9COjpOQ0EoTkNBU2VxUmFuZ2UsICJpZHggPCBs
ZW5fIiwgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5oIiwgMTQwMiksIGFib3J0
KCkpICk7IHJldHVybiBkYXRhX1tpZHhdOyB9CgoKCgoKICAgIGNvbnN0IFRfc2xpY2UqIG9wZXJh
dG9yW10oQ09SQkE6OlVMb25nIGlkeCkgY29uc3QKICAgIHsgKCAoaW50KShpZHggPCBsZW5fKSA/
ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FTZXFSYW5nZSwgImlkeCA8IGxlbl8iLCAiL2hvbWUvbWF0
dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlLmgiLCAxNDA5KSwgYWJvcnQoKSkgKTsgcmV0dXJuIGRh
dGFfW2lkeF07IH0KCgogICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSgpIGNvbnN0IHsgcmV0dXJu
IHJlbF87IH0KICAgIHZvaWQgcmVwbGFjZShDT1JCQTo6VUxvbmcsIFRfc2xpY2UqKiwgQ09SQkE6
OkJvb2xlYW4gPSBmYWxzZSk7CiAgICBUX3NsaWNlKiogZ2V0X2J1ZmZlcihDT1JCQTo6Qm9vbGVh
biA9IGZhbHNlKTsKICAgIFRfc2xpY2UqIGNvbnN0ICogZ2V0X2J1ZmZlcigpIGNvbnN0IHsgcmV0
dXJuIGRhdGFfOyB9Cn07CgoKCgp0ZW1wbGF0ZTxjbGFzcyBUX3NsaWNlLCBjbGFzcyBULCBDT1JC
QTo6VUxvbmcgbiwgY2xhc3MgVT4KY2xhc3MgVmFyQXJyYXlTZXEKewoKCgoKCiAgICB0eXBlZGVm
IFUgVW5pcXVlOwoKICAgIENPUkJBOjpVTG9uZyBtYXhfOwogICAgQ09SQkE6OlVMb25nIGxlbl87
CiAgICBDT1JCQTo6Qm9vbGVhbiByZWxfOwogICAgVF9zbGljZSoqIGRhdGFfOwoKcHVibGljOgoK
CgoKICAgIHN0YXRpYyBUX3NsaWNlKiogYWxsb2NidWYoQ09SQkE6OlVMb25nKTsKICAgIHN0YXRp
YyB2b2lkIGZyZWVidWYoVF9zbGljZSoqKTsKCiAgICBWYXJBcnJheVNlcSgpOwogICAgVmFyQXJy
YXlTZXEoQ09SQkE6OlVMb25nKTsKICAgIFZhckFycmF5U2VxKENPUkJBOjpVTG9uZywgQ09SQkE6
OlVMb25nLCBUX3NsaWNlKiosIENPUkJBOjpCb29sZWFuID0gZmFsc2UpOwogICAgVmFyQXJyYXlT
ZXEoY29uc3QgVmFyQXJyYXlTZXE8VF9zbGljZSwgVCwgbiwgVT4mKTsKICAgIH5WYXJBcnJheVNl
cSgpIHsgaWYocmVsXykgZnJlZWJ1ZihkYXRhXyk7IH0KCiAgICBWYXJBcnJheVNlcTxUX3NsaWNl
LCBULCBuLCBVPiYKICAgIG9wZXJhdG9yPShjb25zdCBWYXJBcnJheVNlcTxUX3NsaWNlLCBULCBu
LCBVPiYpOwoKICAgIENPUkJBOjpVTG9uZyBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbWF4Xzsg
fQoKICAgIHZvaWQgbGVuZ3RoKENPUkJBOjpVTG9uZyk7CiAgICBDT1JCQTo6VUxvbmcgbGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gbGVuXzsgfQoKICAgIHR5cGVkZWYgVF9zbGljZSomIFN1YlR5cGU7
CiAgICB0eXBlZGVmIGNvbnN0IFRfc2xpY2UqIENvbnN0U3ViVHlwZTsKCiAgICBUX3NsaWNlKiYg
b3BlcmF0b3JbXShDT1JCQTo6VUxvbmcgaWR4KQogICAgeyAoIChpbnQpKGlkeCA8IGxlbl8pID8g
KHZvaWQpMCA6IChPQjo6TkNBKE5DQVNlcVJhbmdlLCAiaWR4IDwgbGVuXyIsICIvaG9tZS9tYXR0
L29iL2luY2x1ZGUvT0IvVGVtcGxhdGUuaCIsIDE0NjIpLCBhYm9ydCgpKSApOyByZXR1cm4gZGF0
YV9baWR4XTsgfQoKCgoKCiAgICBjb25zdCBUX3NsaWNlKiBvcGVyYXRvcltdKENPUkJBOjpVTG9u
ZyBpZHgpIGNvbnN0CiAgICB7ICggKGludCkoaWR4IDwgbGVuXykgPyAodm9pZCkwIDogKE9COjpO
Q0EoTkNBU2VxUmFuZ2UsICJpZHggPCBsZW5fIiwgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9U
ZW1wbGF0ZS5oIiwgMTQ2OSksIGFib3J0KCkpICk7IHJldHVybiBkYXRhX1tpZHhdOyB9CgoKICAg
IENPUkJBOjpCb29sZWFuIHJlbGVhc2UoKSBjb25zdCB7IHJldHVybiByZWxfOyB9CiAgICB2b2lk
IHJlcGxhY2UoQ09SQkE6OlVMb25nLCBDT1JCQTo6VUxvbmcsIFRfc2xpY2UqKiwKICAgICAgICAg
ICAgICAgICBDT1JCQTo6Qm9vbGVhbiA9IGZhbHNlKTsKICAgIFRfc2xpY2UqKiBnZXRfYnVmZmVy
KENPUkJBOjpCb29sZWFuID0gZmFsc2UpOwogICAgVF9zbGljZSogY29uc3QgKiBnZXRfYnVmZmVy
KCkgY29uc3QgeyByZXR1cm4gZGF0YV87IH0KfTsKCgoKCnRlbXBsYXRlPGNsYXNzIFRfc2xpY2Us
IGNsYXNzIFQsIENPUkJBOjpVTG9uZyBuLCBDT1JCQTo6VUxvbmcgbWF4LCBjbGFzcyBVPgpjbGFz
cyBCbmRWYXJBcnJheVNlcQp7CgoKCgoKICAgIHR5cGVkZWYgVSBVbmlxdWU7CgogICAgQ09SQkE6
OlVMb25nIGxlbl87CiAgICBDT1JCQTo6Qm9vbGVhbiByZWxfOwogICAgVF9zbGljZSoqIGRhdGFf
OwoKcHVibGljOgoKCgoKICAgIHN0YXRpYyBUX3NsaWNlKiogYWxsb2NidWYoQ09SQkE6OlVMb25n
KTsKICAgIHN0YXRpYyB2b2lkIGZyZWVidWYoVF9zbGljZSoqKTsKCiAgICBCbmRWYXJBcnJheVNl
cSgpOwogICAgQm5kVmFyQXJyYXlTZXEoQ09SQkE6OlVMb25nLCBUX3NsaWNlKiosIENPUkJBOjpC
b29sZWFuID0gZmFsc2UpOwogICAgQm5kVmFyQXJyYXlTZXEoY29uc3QgQm5kVmFyQXJyYXlTZXE8
VF9zbGljZSwgVCwgbiwgbWF4LCBVPiYpOwogICAgfkJuZFZhckFycmF5U2VxKCkgeyBpZihyZWxf
KSBmcmVlYnVmKGRhdGFfKTsgfQoKICAgIEJuZFZhckFycmF5U2VxPFRfc2xpY2UsIFQsIG4sIG1h
eCwgVT4mCiAgICBvcGVyYXRvcj0oY29uc3QgQm5kVmFyQXJyYXlTZXE8VF9zbGljZSwgVCwgbiwg
bWF4LCBVPiYpOwoKICAgIENPUkJBOjpVTG9uZyBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbWF4
OyB9CgogICAgdm9pZCBsZW5ndGgoQ09SQkE6OlVMb25nKTsKICAgIENPUkJBOjpVTG9uZyBsZW5n
dGgoKSBjb25zdCB7IHJldHVybiBsZW5fOyB9CgogICAgdHlwZWRlZiBUX3NsaWNlKiYgU3ViVHlw
ZTsKICAgIHR5cGVkZWYgY29uc3QgVF9zbGljZSogQ29uc3RTdWJUeXBlOwoKICAgIFRfc2xpY2Uq
JiBvcGVyYXRvcltdKENPUkJBOjpVTG9uZyBpZHgpCiAgICB7ICggKGludCkoaWR4IDwgbGVuXykg
PyAodm9pZCkwIDogKE9COjpOQ0EoTkNBU2VxUmFuZ2UsICJpZHggPCBsZW5fIiwgIi9ob21lL21h
dHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5oIiwgMTUyMSksIGFib3J0KCkpICk7IHJldHVybiBk
YXRhX1tpZHhdOyB9CgoKCgoKICAgIGNvbnN0IFRfc2xpY2UqIG9wZXJhdG9yW10oQ09SQkE6OlVM
b25nIGlkeCkgY29uc3QKICAgIHsgKCAoaW50KShpZHggPCBsZW5fKSA/ICh2b2lkKTAgOiAoT0I6
Ok5DQShOQ0FTZXFSYW5nZSwgImlkeCA8IGxlbl8iLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09C
L1RlbXBsYXRlLmgiLCAxNTI4KSwgYWJvcnQoKSkgKTsgcmV0dXJuIGRhdGFfW2lkeF07IH0KCgog
ICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSgpIGNvbnN0IHsgcmV0dXJuIHJlbF87IH0KICAgIHZv
aWQgcmVwbGFjZShDT1JCQTo6VUxvbmcsIFRfc2xpY2UqKiwgQ09SQkE6OkJvb2xlYW4gPSBmYWxz
ZSk7CiAgICBUX3NsaWNlKiogZ2V0X2J1ZmZlcihDT1JCQTo6Qm9vbGVhbiA9IGZhbHNlKTsKICAg
IFRfc2xpY2UqIGNvbnN0ICogZ2V0X2J1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIGRhdGFfOyB9Cn07
CgoKCgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBVPgpjbGFzcyBPYmpTZXEKewoKCgoKCiAgICB0
eXBlZGVmIFUgVW5pcXVlOwoKICAgIENPUkJBOjpVTG9uZyBtYXhfOwogICAgQ09SQkE6OlVMb25n
IGxlbl87CiAgICBDT1JCQTo6Qm9vbGVhbiByZWxfOwogICAgVCoqIGRhdGFfOwoKcHVibGljOgoK
CgoKICAgIHN0YXRpYyBUKiogYWxsb2NidWYoQ09SQkE6OlVMb25nKTsKICAgIHN0YXRpYyB2b2lk
IGZyZWVidWYoVCoqKTsKCiAgICBPYmpTZXEoKTsKICAgIE9ialNlcShDT1JCQTo6VUxvbmcpOwog
ICAgT2JqU2VxKENPUkJBOjpVTG9uZywgQ09SQkE6OlVMb25nLCBUKiosIENPUkJBOjpCb29sZWFu
ID0gZmFsc2UpOwogICAgT2JqU2VxKGNvbnN0IE9ialNlcTxULCBVPiYpOwogICAgfk9ialNlcSgp
IHsgaWYocmVsXykgZnJlZWJ1ZihkYXRhXyk7IH0KCiAgICBPYmpTZXE8VCwgVT4mIG9wZXJhdG9y
PShjb25zdCBPYmpTZXE8VCwgVT4mKTsKCiAgICBDT1JCQTo6VUxvbmcgbWF4aW11bSgpIGNvbnN0
IHsgcmV0dXJuIG1heF87IH0KCiAgICB2b2lkIGxlbmd0aChDT1JCQTo6VUxvbmcpOwogICAgQ09S
QkE6OlVMb25nIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIGxlbl87IH0KCiAgICB0eXBlZGVmIE9i
akZvclNlcTxUPiBTdWJUeXBlOwogICAgdHlwZWRlZiBPYmpGb3JTZXE8VD4gQ29uc3RTdWJUeXBl
OwojIDE1ODcgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5oIgogICAgT2JqRm9y
U2VxPFQ+IG9wZXJhdG9yW10oQ09SQkE6OlVMb25nIGlkeCkgY29uc3QKICAgIHsKICAgICAgICAo
IChpbnQpKGlkeCA8IGxlbl8pID8gKHZvaWQpMCA6IChPQjo6TkNBKE5DQVNlcVJhbmdlLCAiaWR4
IDwgbGVuXyIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGUuaCIsIDE1ODkpLCBh
Ym9ydCgpKSApOwogICAgICAgIHJldHVybiBPYmpGb3JTZXE8VD4oJmRhdGFfW2lkeF0sIHJlbF8p
OwogICAgfQoKICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UoKSBjb25zdCB7IHJldHVybiByZWxf
OyB9CiAgICB2b2lkIHJlcGxhY2UoQ09SQkE6OlVMb25nLCBDT1JCQTo6VUxvbmcsIFQqKiwKICAg
ICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiA9IGZhbHNlKTsKICAgIFQqKiBnZXRfYnVmZmVy
KENPUkJBOjpCb29sZWFuID0gZmFsc2UpOwogICAgVCogY29uc3QgKiBnZXRfYnVmZmVyKCkgY29u
c3QgeyByZXR1cm4gZGF0YV87IH0KfTsKCgoKCnRlbXBsYXRlPGNsYXNzIFQsIENPUkJBOjpVTG9u
ZyBtYXgsIGNsYXNzIFU+CmNsYXNzIEJuZE9ialNlcQp7CgoKCgoKICAgIHR5cGVkZWYgVSBVbmlx
dWU7CgogICAgQ09SQkE6OlVMb25nIGxlbl87CiAgICBDT1JCQTo6Qm9vbGVhbiByZWxfOwogICAg
VCoqIGRhdGFfOwoKcHVibGljOgoKCgoKICAgIHN0YXRpYyBUKiogYWxsb2NidWYoQ09SQkE6OlVM
b25nKTsKICAgIHN0YXRpYyB2b2lkIGZyZWVidWYoVCoqKTsKCiAgICBCbmRPYmpTZXEoKTsKICAg
IEJuZE9ialNlcShDT1JCQTo6VUxvbmcsIFQqKiwgQ09SQkE6OkJvb2xlYW4gPSBmYWxzZSk7CiAg
ICBCbmRPYmpTZXEoY29uc3QgQm5kT2JqU2VxPFQsIG1heCwgVT4mKTsKICAgIH5CbmRPYmpTZXEo
KSB7IGlmKHJlbF8pIGZyZWVidWYoZGF0YV8pOyB9CgogICAgQm5kT2JqU2VxPFQsIG1heCwgVT4m
CiAgICBvcGVyYXRvcj0oY29uc3QgQm5kT2JqU2VxPFQsIG1heCwgVT4mKTsKCiAgICBDT1JCQTo6
VUxvbmcgbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1heDsgfQoKICAgIHZvaWQgbGVuZ3RoKENP
UkJBOjpVTG9uZyk7CiAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbGVu
XzsgfQoKICAgIHR5cGVkZWYgT2JqRm9yU2VxPFQ+IFN1YlR5cGU7CiAgICB0eXBlZGVmIE9iakZv
clNlcTxUPiBDb25zdFN1YlR5cGU7CgoKCgogICAgT2JqRm9yU2VxPFQ+IG9wZXJhdG9yW10oQ09S
QkE6OlVMb25nIGlkeCkgY29uc3QKICAgIHsKICAgICAgICAoIChpbnQpKGlkeCA8IGxlbl8pID8g
KHZvaWQpMCA6IChPQjo6TkNBKE5DQVNlcVJhbmdlLCAiaWR4IDwgbGVuXyIsICIvaG9tZS9tYXR0
L29iL2luY2x1ZGUvT0IvVGVtcGxhdGUuaCIsIDE2NDYpLCBhYm9ydCgpKSApOwogICAgICAgIHJl
dHVybiBPYmpGb3JTZXE8VD4oJmRhdGFfW2lkeF0sIHJlbF8pOwogICAgfQoKICAgIENPUkJBOjpC
b29sZWFuIHJlbGVhc2UoKSBjb25zdCB7IHJldHVybiByZWxfOyB9CiAgICB2b2lkIHJlcGxhY2Uo
Q09SQkE6OlVMb25nLCBUKiosCiAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gPSBmYWxz
ZSk7CiAgICBUKiogZ2V0X2J1ZmZlcihDT1JCQTo6Qm9vbGVhbiA9IGZhbHNlKTsKICAgIFQqIGNv
bnN0ICogZ2V0X2J1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIGRhdGFfOyB9Cn07CgoKCgp0ZW1wbGF0
ZTxjbGFzcyBVPgpjbGFzcyBTdHJTZXEKewoKCgoKCiAgICB0eXBlZGVmIFUgVW5pcXVlOwoKICAg
IENPUkJBOjpVTG9uZyBtYXhfOwogICAgQ09SQkE6OlVMb25nIGxlbl87CiAgICBDT1JCQTo6Qm9v
bGVhbiByZWxfOwogICAgY2hhcioqIGRhdGFfOwoKcHVibGljOgoKCgoKICAgIHN0YXRpYyBjaGFy
KiogYWxsb2NidWYoQ09SQkE6OlVMb25nIG4pCiAgICB7IHJldHVybiBPQjo6U3RyU2VxQWxsb2Ni
dWYobik7IH0KICAgIHN0YXRpYyB2b2lkIGZyZWVidWYoY2hhcioqIHApCiAgICB7IE9COjpTdHJT
ZXFGcmVlYnVmKHApOyB9CgogICAgU3RyU2VxKCk7CiAgICBTdHJTZXEoQ09SQkE6OlVMb25nKTsK
ICAgIFN0clNlcShDT1JCQTo6VUxvbmcsIENPUkJBOjpVTG9uZywgY2hhcioqLCBDT1JCQTo6Qm9v
bGVhbiA9IGZhbHNlKTsKICAgIFN0clNlcShjb25zdCBTdHJTZXE8VT4mKTsKICAgIH5TdHJTZXEo
KSB7IGlmKHJlbF8pIGZyZWVidWYoZGF0YV8pOyB9CgogICAgU3RyU2VxJiBvcGVyYXRvcj0oY29u
c3QgU3RyU2VxPFU+Jik7CgogICAgQ09SQkE6OlVMb25nIG1heGltdW0oKSBjb25zdCB7IHJldHVy
biBtYXhfOyB9CgogICAgdm9pZCBsZW5ndGgoQ09SQkE6OlVMb25nKTsKICAgIENPUkJBOjpVTG9u
ZyBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBsZW5fOyB9CgogICAgdHlwZWRlZiBTdHJGb3JTZXEg
U3ViVHlwZTsKICAgIHR5cGVkZWYgY29uc3QgY2hhciogQ29uc3RTdWJUeXBlOwoKICAgIFN0ckZv
clNlcSBvcGVyYXRvcltdKENPUkJBOjpVTG9uZyBpZHgpCiAgICB7CiAgICAgICAgKCAoaW50KShp
ZHggPCBsZW5fKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FTZXFSYW5nZSwgImlkeCA8IGxlbl8i
LCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlLmgiLCAxNzAzKSwgYWJvcnQoKSkg
KTsKICAgICAgICByZXR1cm4gU3RyRm9yU2VxKCZkYXRhX1tpZHhdLCByZWxfKTsKICAgIH0KCiAg
ICBjb25zdCBjaGFyKiBvcGVyYXRvcltdKENPUkJBOjpVTG9uZyBpZHgpIGNvbnN0CiAgICB7CiAg
ICAgICAgKCAoaW50KShpZHggPCBsZW5fKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FTZXFSYW5n
ZSwgImlkeCA8IGxlbl8iLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlLmgiLCAx
NzA5KSwgYWJvcnQoKSkgKTsKICAgICAgICByZXR1cm4gZGF0YV9baWR4XTsKICAgIH0KCiAgICBD
T1JCQTo6Qm9vbGVhbiByZWxlYXNlKCkgY29uc3QgeyByZXR1cm4gcmVsXzsgfQogICAgdm9pZCBy
ZXBsYWNlKENPUkJBOjpVTG9uZywgQ09SQkE6OlVMb25nLCBjaGFyKiosCiAgICAgICAgICAgICAg
ICAgQ09SQkE6OkJvb2xlYW4gPSBmYWxzZSk7CiAgICBjaGFyKiogZ2V0X2J1ZmZlcihDT1JCQTo6
Qm9vbGVhbiA9IGZhbHNlKTsKICAgIGNvbnN0IGNoYXIqIGNvbnN0ICogZ2V0X2J1ZmZlcigpIGNv
bnN0IHsgcmV0dXJuIGRhdGFfOyB9Cn07CgoKCgp0ZW1wbGF0ZTxDT1JCQTo6VUxvbmcgbWF4LCBj
bGFzcyBVPgpjbGFzcyBCbmRTdHJTZXEKewoKCgoKCiAgICB0eXBlZGVmIFUgVW5pcXVlOwoKICAg
IENPUkJBOjpVTG9uZyBsZW5fOwogICAgQ09SQkE6OkJvb2xlYW4gcmVsXzsKICAgIGNoYXIqKiBk
YXRhXzsKCnB1YmxpYzoKCgoKCiAgICBzdGF0aWMgY2hhcioqIGFsbG9jYnVmKENPUkJBOjpVTG9u
Zyk7CiAgICBzdGF0aWMgdm9pZCBmcmVlYnVmKGNoYXIqKiBwKQogICAgeyBPQjo6U3RyU2VxRnJl
ZWJ1ZihwKTsgfQoKICAgIEJuZFN0clNlcSgpOwogICAgQm5kU3RyU2VxKENPUkJBOjpVTG9uZywg
Y2hhcioqLCBDT1JCQTo6Qm9vbGVhbiA9IGZhbHNlKTsKICAgIEJuZFN0clNlcShjb25zdCBCbmRT
dHJTZXE8bWF4LCBVPiYpOwogICAgfkJuZFN0clNlcSgpIHsgaWYocmVsXykgZnJlZWJ1ZihkYXRh
Xyk7IH0KCiAgICBCbmRTdHJTZXE8bWF4LCBVPiYgb3BlcmF0b3I9KGNvbnN0IEJuZFN0clNlcTxt
YXgsIFU+Jik7CgogICAgQ09SQkE6OlVMb25nIG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtYXg7
IH0KCiAgICB2b2lkIGxlbmd0aChDT1JCQTo6VUxvbmcpOwogICAgQ09SQkE6OlVMb25nIGxlbmd0
aCgpIGNvbnN0IHsgcmV0dXJuIGxlbl87IH0KCiAgICB0eXBlZGVmIFN0ckZvclNlcSBTdWJUeXBl
OwogICAgdHlwZWRlZiBjb25zdCBjaGFyKiBDb25zdFN1YlR5cGU7CgogICAgU3RyRm9yU2VxIG9w
ZXJhdG9yW10oQ09SQkE6OlVMb25nIGlkeCkKICAgIHsKICAgICAgICAoIChpbnQpKGlkeCA8IGxl
bl8pID8gKHZvaWQpMCA6IChPQjo6TkNBKE5DQVNlcVJhbmdlLCAiaWR4IDwgbGVuXyIsICIvaG9t
ZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGUuaCIsIDE3NjMpLCBhYm9ydCgpKSApOwogICAg
ICAgIHJldHVybiBTdHJGb3JTZXEoJmRhdGFfW2lkeF0sIHJlbF8pOwogICAgfQoKICAgIGNvbnN0
IGNoYXIqIG9wZXJhdG9yW10oQ09SQkE6OlVMb25nIGlkeCkgY29uc3QKICAgIHsKICAgICAgICAo
IChpbnQpKGlkeCA8IGxlbl8pID8gKHZvaWQpMCA6IChPQjo6TkNBKE5DQVNlcVJhbmdlLCAiaWR4
IDwgbGVuXyIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGUuaCIsIDE3NjkpLCBh
Ym9ydCgpKSApOwogICAgICAgIHJldHVybiBkYXRhX1tpZHhdOwogICAgfQoKICAgIENPUkJBOjpC
b29sZWFuIHJlbGVhc2UoKSBjb25zdCB7IHJldHVybiByZWxfOyB9CiAgICB2b2lkIHJlcGxhY2Uo
Q09SQkE6OlVMb25nLCBjaGFyKiosCiAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gPSBm
YWxzZSk7CiAgICBjaGFyKiogZ2V0X2J1ZmZlcihDT1JCQTo6Qm9vbGVhbiA9IGZhbHNlKTsKICAg
IGNvbnN0IGNoYXIqIGNvbnN0ICogZ2V0X2J1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIGRhdGFfOyB9
Cn07CgoKCgp0ZW1wbGF0ZTxjbGFzcyBVPgpjbGFzcyBXU3RyU2VxCnsKCgoKCgogICAgdHlwZWRl
ZiBVIFVuaXF1ZTsKCiAgICBDT1JCQTo6VUxvbmcgbWF4XzsKICAgIENPUkJBOjpVTG9uZyBsZW5f
OwogICAgQ09SQkE6OkJvb2xlYW4gcmVsXzsKICAgIHdjaGFyX3QqKiBkYXRhXzsKCnB1YmxpYzoK
CgoKCiAgICBzdGF0aWMgd2NoYXJfdCoqIGFsbG9jYnVmKENPUkJBOjpVTG9uZyBuKQogICAgeyBy
ZXR1cm4gT0I6OldTdHJTZXFBbGxvY2J1ZihuKTsgfQogICAgc3RhdGljIHZvaWQgZnJlZWJ1Zih3
Y2hhcl90KiogcCkKICAgIHsgT0I6OldTdHJTZXFGcmVlYnVmKHApOyB9CgogICAgV1N0clNlcSgp
OwogICAgV1N0clNlcShDT1JCQTo6VUxvbmcpOwogICAgV1N0clNlcShDT1JCQTo6VUxvbmcsIENP
UkJBOjpVTG9uZywgd2NoYXJfdCoqLCBDT1JCQTo6Qm9vbGVhbiA9IGZhbHNlKTsKICAgIFdTdHJT
ZXEoY29uc3QgV1N0clNlcTxVPiYpOwogICAgfldTdHJTZXEoKSB7IGlmKHJlbF8pIGZyZWVidWYo
ZGF0YV8pOyB9CgogICAgV1N0clNlcSYgb3BlcmF0b3I9KGNvbnN0IFdTdHJTZXE8VT4mKTsKCiAg
ICBDT1JCQTo6VUxvbmcgbWF4aW11bSgpIGNvbnN0IHsgcmV0dXJuIG1heF87IH0KCiAgICB2b2lk
IGxlbmd0aChDT1JCQTo6VUxvbmcpOwogICAgQ09SQkE6OlVMb25nIGxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIGxlbl87IH0KCiAgICB0eXBlZGVmIFdTdHJGb3JTZXEgU3ViVHlwZTsKICAgIHR5cGVk
ZWYgY29uc3Qgd2NoYXJfdCogQ29uc3RTdWJUeXBlOwoKICAgIFdTdHJGb3JTZXEgb3BlcmF0b3Jb
XShDT1JCQTo6VUxvbmcgaWR4KQogICAgewogICAgICAgICggKGludCkoaWR4IDwgbGVuXykgPyAo
dm9pZCkwIDogKE9COjpOQ0EoTkNBU2VxUmFuZ2UsICJpZHggPCBsZW5fIiwgIi9ob21lL21hdHQv
b2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5oIiwgMTgyNiksIGFib3J0KCkpICk7CiAgICAgICAgcmV0
dXJuIFdTdHJGb3JTZXEoJmRhdGFfW2lkeF0sIHJlbF8pOwogICAgfQoKICAgIGNvbnN0IHdjaGFy
X3QqIG9wZXJhdG9yW10oQ09SQkE6OlVMb25nIGlkeCkgY29uc3QKICAgIHsKICAgICAgICAoIChp
bnQpKGlkeCA8IGxlbl8pID8gKHZvaWQpMCA6IChPQjo6TkNBKE5DQVNlcVJhbmdlLCAiaWR4IDwg
bGVuXyIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGUuaCIsIDE4MzIpLCBhYm9y
dCgpKSApOwogICAgICAgIHJldHVybiBkYXRhX1tpZHhdOwogICAgfQoKICAgIENPUkJBOjpCb29s
ZWFuIHJlbGVhc2UoKSBjb25zdCB7IHJldHVybiByZWxfOyB9CiAgICB2b2lkIHJlcGxhY2UoQ09S
QkE6OlVMb25nLCBDT1JCQTo6VUxvbmcsIHdjaGFyX3QqKiwKICAgICAgICAgICAgICAgICBDT1JC
QTo6Qm9vbGVhbiA9IGZhbHNlKTsKICAgIHdjaGFyX3QqKiBnZXRfYnVmZmVyKENPUkJBOjpCb29s
ZWFuID0gZmFsc2UpOwogICAgY29uc3Qgd2NoYXJfdCogY29uc3QgKiBnZXRfYnVmZmVyKCkgY29u
c3QgeyByZXR1cm4gZGF0YV87IH0KfTsKCgoKCnRlbXBsYXRlPENPUkJBOjpVTG9uZyBtYXgsIGNs
YXNzIFU+CmNsYXNzIEJuZFdTdHJTZXEKewoKCgoKCiAgICB0eXBlZGVmIFUgVW5pcXVlOwoKICAg
IENPUkJBOjpVTG9uZyBsZW5fOwogICAgQ09SQkE6OkJvb2xlYW4gcmVsXzsKICAgIHdjaGFyX3Qq
KiBkYXRhXzsKCnB1YmxpYzoKCgoKCiAgICBzdGF0aWMgd2NoYXJfdCoqIGFsbG9jYnVmKENPUkJB
OjpVTG9uZyk7CiAgICBzdGF0aWMgdm9pZCBmcmVlYnVmKHdjaGFyX3QqKiBwKQogICAgeyBPQjo6
V1N0clNlcUZyZWVidWYocCk7IH0KCiAgICBCbmRXU3RyU2VxKCk7CiAgICBCbmRXU3RyU2VxKENP
UkJBOjpVTG9uZywgd2NoYXJfdCoqLCBDT1JCQTo6Qm9vbGVhbiA9IGZhbHNlKTsKICAgIEJuZFdT
dHJTZXEoY29uc3QgQm5kV1N0clNlcTxtYXgsIFU+Jik7CiAgICB+Qm5kV1N0clNlcSgpIHsgaWYo
cmVsXykgZnJlZWJ1ZihkYXRhXyk7IH0KCiAgICBCbmRXU3RyU2VxPG1heCwgVT4mIG9wZXJhdG9y
PShjb25zdCBCbmRXU3RyU2VxPG1heCwgVT4mKTsKCiAgICBDT1JCQTo6VUxvbmcgbWF4aW11bSgp
IGNvbnN0IHsgcmV0dXJuIG1heDsgfQoKICAgIHZvaWQgbGVuZ3RoKENPUkJBOjpVTG9uZyk7CiAg
ICBDT1JCQTo6VUxvbmcgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbGVuXzsgfQoKICAgIHR5cGVk
ZWYgV1N0ckZvclNlcSBTdWJUeXBlOwogICAgdHlwZWRlZiBjb25zdCB3Y2hhcl90KiBDb25zdFN1
YlR5cGU7CgogICAgV1N0ckZvclNlcSBvcGVyYXRvcltdKENPUkJBOjpVTG9uZyBpZHgpCiAgICB7
CiAgICAgICAgKCAoaW50KShpZHggPCBsZW5fKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FTZXFS
YW5nZSwgImlkeCA8IGxlbl8iLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlLmgi
LCAxODg2KSwgYWJvcnQoKSkgKTsKICAgICAgICByZXR1cm4gV1N0ckZvclNlcSgmZGF0YV9baWR4
XSwgcmVsXyk7CiAgICB9CgogICAgY29uc3Qgd2NoYXJfdCogb3BlcmF0b3JbXShDT1JCQTo6VUxv
bmcgaWR4KSBjb25zdAogICAgewogICAgICAgICggKGludCkoaWR4IDwgbGVuXykgPyAodm9pZCkw
IDogKE9COjpOQ0EoTkNBU2VxUmFuZ2UsICJpZHggPCBsZW5fIiwgIi9ob21lL21hdHQvb2IvaW5j
bHVkZS9PQi9UZW1wbGF0ZS5oIiwgMTg5MiksIGFib3J0KCkpICk7CiAgICAgICAgcmV0dXJuIGRh
dGFfW2lkeF07CiAgICB9CgogICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSgpIGNvbnN0IHsgcmV0
dXJuIHJlbF87IH0KICAgIHZvaWQgcmVwbGFjZShDT1JCQTo6VUxvbmcsIHdjaGFyX3QqKiwKICAg
ICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiA9IGZhbHNlKTsKICAgIHdjaGFyX3QqKiBnZXRf
YnVmZmVyKENPUkJBOjpCb29sZWFuID0gZmFsc2UpOwogICAgY29uc3Qgd2NoYXJfdCogY29uc3Qg
KiBnZXRfYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gZGF0YV87IH0KfTsKCgoKCgpjbGFzcyBDb25z
dHJ1Y3RlZEluZm8KewoKCgogICAgQ29uc3RydWN0ZWRJbmZvKGNvbnN0IENvbnN0cnVjdGVkSW5m
byYpOwogICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgQ29uc3RydWN0ZWRJbmZvJik7CiAgICB2b2lk
IG9wZXJhdG9yPT0oY29uc3QgQ29uc3RydWN0ZWRJbmZvJik7CgpwdWJsaWM6CgogICAgQ29uc3Ry
dWN0ZWRJbmZvKCkgeyB9OwogICAgdmlydHVhbCB+Q29uc3RydWN0ZWRJbmZvKCkgeyB9OwoKCgoK
ICAgIHZpcnR1YWwgdm9pZCBmcmVlKHZvaWQqKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFsIHZvaWQq
IGR1cChjb25zdCB2b2lkKikgY29uc3QgPSAwOwoKCgoKICAgIHZpcnR1YWwgdm9pZCBtYXJzaGFs
KGNvbnN0IHZvaWQqLCBPdXRwdXRTdHJlYW1JbXBsKikgY29uc3QgPSAwOwogICAgdmlydHVhbCB2
b2lkIHVubWFyc2hhbCh2b2lkKiwgSW5wdXRTdHJlYW1JbXBsKikgY29uc3QgPSAwOwp9OwojIDE5
NDEgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5oIgp0ZW1wbGF0ZTxjbGFzcyBU
PgpjbGFzcyBJbmZvIDogcHVibGljIENvbnN0cnVjdGVkSW5mbwp7CnB1YmxpYzoKCiAgICBJbmZv
KCkgeyB9OwoKICAgIHZpcnR1YWwgdm9pZCBmcmVlKHZvaWQqIHApIGNvbnN0CiAgICB7IGRlbGV0
ZSAoVCopcDsgfQoKICAgIHZpcnR1YWwgdm9pZCogZHVwKGNvbnN0IHZvaWQqIHApIGNvbnN0CiAg
ICB7IHJldHVybiBuZXcgVCgqKGNvbnN0IFQqKXApOyB9CgogICAgdmlydHVhbCB2b2lkIG1hcnNo
YWwoY29uc3Qgdm9pZCogcCwgT3V0cHV0U3RyZWFtSW1wbCogb3V0KSBjb25zdAogICAgeyAoKGNv
bnN0IFQqKXApIC0+IF9PQl9tYXJzaGFsKG91dCk7IH0KCiAgICB2aXJ0dWFsIHZvaWQgdW5tYXJz
aGFsKHZvaWQqIHAsIElucHV0U3RyZWFtSW1wbCogaW4pIGNvbnN0CiAgICB7IFQ6Ol9PQl91bm1h
cnNoYWwoKihUKilwLCBpbik7IH0KfTsKCn0KCgoKCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRl
L09CL1RlbXBsYXRlSS5oIiAxCiMgMTQgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0
ZUkuaCIKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGUuaCIgMQojIDE1ICIv
aG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGVJLmgiIDIKCm5hbWVzcGFjZSBPQgp7CiMg
MjYgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZUkuaCIKdGVtcGxhdGU8Y2xhc3Mg
VD4KRml4VmFyPFQ+JgpGaXhWYXI8VD46Om9wZXJhdG9yPShUKiBwKQp7CiAgICAoIChpbnQpKHB0
cl8gPT0gMCB8fCBwICE9IHB0cl8pID8gKHZvaWQpMCA6IChPQjo6TkNBKE5DQVNlbGZBc3NpZ24s
ICJwdHJfID09IDAgfHwgcCAhPSBwdHJfIiwgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1w
bGF0ZUkuaCIsIDMwKSwgYWJvcnQoKSkgKTsKICAgIGRlbGV0ZSBwdHJfOwogICAgcHRyXyA9IHA7
CiAgICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlPGNsYXNzIFQ+CkZpeFZhcjxUPiYKRml4VmFy
PFQ+OjpvcGVyYXRvcj0oY29uc3QgVCYgdCkKewogICAgaWYoJnQgIT0gcHRyXykKICAgIHsKICAg
ICAgICBUKiBvbGRQdHIgPSBwdHJfOwogICAgICAgIHB0cl8gPSBuZXcgVCh0KTsKICAgICAgICBk
ZWxldGUgb2xkUHRyOwogICAgfQogICAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBU
PgpGaXhWYXI8VD4mCkZpeFZhcjxUPjo6b3BlcmF0b3I9KGNvbnN0IEZpeFZhcjxUPiYgcikKewog
ICAgVCogbmV3UHRyOwoKICAgIGlmKHIucHRyXykKICAgICAgICBuZXdQdHIgPSBuZXcgVCgqci5w
dHJfKTsKICAgIGVsc2UKICAgICAgICBuZXdQdHIgPSAwOwoKICAgIGlmKHB0cl8pCiAgICAgICAg
ZGVsZXRlIHB0cl87CgogICAgcHRyXyA9IG5ld1B0cjsKCiAgICByZXR1cm4gKnRoaXM7Cn0KCgoK
CnRlbXBsYXRlPGNsYXNzIFQ+ClZhclZhcjxUPiYKVmFyVmFyPFQ+OjpvcGVyYXRvcj0oVCogcCkK
ewogICAgKCAoaW50KShwdHJfID09IDAgfHwgcCAhPSBwdHJfKSA/ICh2b2lkKTAgOiAoT0I6Ok5D
QShOQ0FTZWxmQXNzaWduLCAicHRyXyA9PSAwIHx8IHAgIT0gcHRyXyIsICIvaG9tZS9tYXR0L29i
L2luY2x1ZGUvT0IvVGVtcGxhdGVJLmgiLCA3NSksIGFib3J0KCkpICk7CiAgICBkZWxldGUgcHRy
XzsKICAgIHB0cl8gPSBwOwogICAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBUPgpW
YXJWYXI8VD4mClZhclZhcjxUPjo6b3BlcmF0b3I9KGNvbnN0IFZhclZhcjxUPiYgcikKewogICAg
VCogbmV3UHRyOwoKICAgIGlmKHIucHRyXykKICAgICAgICBuZXdQdHIgPSBuZXcgVCgqci5wdHJf
KTsKICAgIGVsc2UKICAgICAgICBuZXdQdHIgPSAwOwoKICAgIGlmKHB0cl8pCiAgICAgICAgZGVs
ZXRlIHB0cl87CgogICAgcHRyXyA9IG5ld1B0cjsKCiAgICByZXR1cm4gKnRoaXM7Cn0KCgoKCnRl
bXBsYXRlPGNsYXNzIFQ+ClNlcVZhcjxUPiYKU2VxVmFyPFQ+OjpvcGVyYXRvcj0oVCogcCkKewog
ICAgKCAoaW50KShwdHJfID09IDAgfHwgcCAhPSBwdHJfKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShO
Q0FTZWxmQXNzaWduLCAicHRyXyA9PSAwIHx8IHAgIT0gcHRyXyIsICIvaG9tZS9tYXR0L29iL2lu
Y2x1ZGUvT0IvVGVtcGxhdGVJLmgiLCAxMDcpLCBhYm9ydCgpKSApOwogICAgZGVsZXRlIHB0cl87
CiAgICBwdHJfID0gcDsKICAgIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGU8Y2xhc3MgVD4KU2Vx
VmFyPFQ+JgpTZXFWYXI8VD46Om9wZXJhdG9yPShjb25zdCBTZXFWYXI8VD4mIHIpCnsKICAgIFQq
IG5ld1B0cjsKCiAgICBpZihyLnB0cl8pCiAgICAgICAgbmV3UHRyID0gbmV3IFQoKnIucHRyXyk7
CiAgICBlbHNlCiAgICAgICAgbmV3UHRyID0gMDsKCiAgICBpZihwdHJfKQogICAgICAgIGRlbGV0
ZSBwdHJfOwoKICAgIHB0cl8gPSBuZXdQdHI7CgogICAgcmV0dXJuICp0aGlzOwp9CgoKCgp0ZW1w
bGF0ZTxjbGFzcyBUX3NsaWNlLCBjbGFzcyBULCBDT1JCQTo6VUxvbmcgbj4KRml4QXJyYXlWYXI8
VF9zbGljZSwgVCwgbj46OgpGaXhBcnJheVZhcihjb25zdCBGaXhBcnJheVZhcjxUX3NsaWNlLCBU
LCBuPiYgcikKewogICAgaWYoci5wdHJfKQogICAgewogICAgICAgIHB0cl8gPSAoVF9zbGljZSop
IG5ldyBUW25dOwogICAgICAgIG1lbWNweShwdHJfLCByLnB0cl8sIG4gKiBzaXplb2YoVCkpOwog
ICAgfQogICAgZWxzZQogICAgICAgIHB0cl8gPSAwOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBUX3NsaWNl
LCBjbGFzcyBULCBDT1JCQTo6VUxvbmcgbj4KRml4QXJyYXlWYXI8VF9zbGljZSwgVCwgbj4mCkZp
eEFycmF5VmFyPFRfc2xpY2UsIFQsIG4+OjpvcGVyYXRvcj0oVF9zbGljZSogcCkKewogICAgKCAo
aW50KShwdHJfID09IDAgfHwgcCAhPSBwdHJfKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FTZWxm
QXNzaWduLCAicHRyXyA9PSAwIHx8IHAgIT0gcHRyXyIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUv
T0IvVGVtcGxhdGVJLmgiLCAxNTIpLCBhYm9ydCgpKSApOwogICAgZGVsZXRlIFtdIChUKikgcHRy
XzsKICAgIHB0cl8gPSBwOwogICAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBUX3Ns
aWNlLCBjbGFzcyBULCBDT1JCQTo6VUxvbmcgbj4KRml4QXJyYXlWYXI8VF9zbGljZSwgVCwgbj4m
CkZpeEFycmF5VmFyPFRfc2xpY2UsIFQsIG4+OjoKb3BlcmF0b3I9KGNvbnN0IEZpeEFycmF5VmFy
PFRfc2xpY2UsIFQsIG4+JiByKQp7CiAgICBpZih0aGlzICE9ICZyKQogICAgewogICAgICAgIGRl
bGV0ZSBbXSAoVCopIHB0cl87CgogICAgICAgIGlmKHIucHRyXykKICAgICAgICB7CiAgICAgICAg
ICAgIHB0cl8gPSAoVF9zbGljZSopIG5ldyBUW25dOwogICAgICAgICAgICBtZW1jcHkocHRyXywg
ci5wdHJfLCBuICogc2l6ZW9mKFQpKTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAg
ICBwdHJfID0gMDsKICAgIH0KCiAgICByZXR1cm4gKnRoaXM7Cn0KCgoKCnRlbXBsYXRlPGNsYXNz
IFRfc2xpY2UsIGNsYXNzIFQsIENPUkJBOjpVTG9uZyBuPgpWYXJBcnJheVZhcjxUX3NsaWNlLCBU
LCBuPjo6ClZhckFycmF5VmFyKGNvbnN0IFZhckFycmF5VmFyPFRfc2xpY2UsIFQsIG4+JiByKQp7
CiAgICBpZihyLnB0cl8pCiAgICB7CiAgICAgICAgcHRyXyA9IChUX3NsaWNlKikgbmV3IFRbbl07
CiAgICAgICAgVCogdG8gPSAoVCopIHB0cl87CiAgICAgICAgVCogZnJvbSA9IChUKikgci5wdHJf
OwogICAgICAgIGZvcihDT1JCQTo6VUxvbmcgaSA9IDAgOyBpIDwgbiA7IGkrKykKICAgICAgICAg
ICAgdG9baV0gPSBmcm9tW2ldOwogICAgfQogICAgZWxzZQogICAgICAgIHB0cl8gPSAwOwp9Cgp0
ZW1wbGF0ZTxjbGFzcyBUX3NsaWNlLCBjbGFzcyBULCBDT1JCQTo6VUxvbmcgbj4KVmFyQXJyYXlW
YXI8VF9zbGljZSwgVCwgbj4mClZhckFycmF5VmFyPFRfc2xpY2UsIFQsIG4+OjpvcGVyYXRvcj0o
VF9zbGljZSogcCkKewogICAgKCAoaW50KShwdHJfID09IDAgfHwgcCAhPSBwdHJfKSA/ICh2b2lk
KTAgOiAoT0I6Ok5DQShOQ0FTZWxmQXNzaWduLCAicHRyXyA9PSAwIHx8IHAgIT0gcHRyXyIsICIv
aG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGVJLmgiLCAyMDIpLCBhYm9ydCgpKSApOwog
ICAgZGVsZXRlIFtdIChUKikgcHRyXzsKICAgIHB0cl8gPSBwOwogICAgcmV0dXJuICp0aGlzOwp9
Cgp0ZW1wbGF0ZTxjbGFzcyBUX3NsaWNlLCBjbGFzcyBULCBDT1JCQTo6VUxvbmcgbj4KVmFyQXJy
YXlWYXI8VF9zbGljZSwgVCwgbj4mClZhckFycmF5VmFyPFRfc2xpY2UsIFQsIG4+OjoKb3BlcmF0
b3I9KGNvbnN0IFZhckFycmF5VmFyPFRfc2xpY2UsIFQsIG4+JiByKQp7CiAgICBpZih0aGlzICE9
ICZyKQogICAgewogICAgICAgIGRlbGV0ZSBbXSAoVCopIHB0cl87CgogICAgICAgIGlmKHIucHRy
XykKICAgICAgICB7CiAgICAgICAgICAgIHB0cl8gPSAoVF9zbGljZSopIG5ldyBUW25dOwogICAg
ICAgICAgICBUKiB0byA9IChUKikgcHRyXzsKICAgICAgICAgICAgVCogZnJvbSA9IChUKikgci5w
dHJfOwogICAgICAgICAgICBmb3IoQ09SQkE6OlVMb25nIGkgPSAwIDsgaSA8IG4gOyBpKyspCiAg
ICAgICAgICAgICAgICB0b1tpXSA9IGZyb21baV07CiAgICAgICAgfQogICAgICAgIGVsc2UKICAg
ICAgICAgICAgcHRyXyA9IDA7CiAgICB9CgogICAgcmV0dXJuICp0aGlzOwp9CiMgMjQ1ICIvaG9t
ZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGVJLmgiCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNz
IFU+CkZpeFNlcTxULCBVPjo6Rml4U2VxKCkKICAgIDogbWF4XygwKSwgbGVuXygwKSwgcmVsXyh0
cnVlKSwgZGF0YV8oMCkKewp9Cgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBVPgpGaXhTZXE8VCwg
VT46OkZpeFNlcShDT1JCQTo6VUxvbmcgbSkKICAgIDogbWF4XyhtKSwgbGVuXygwKSwgcmVsXyh0
cnVlKQp7CiAgICBpZihtYXhfID4gMCkKICAgICAgICBkYXRhXyA9IGFsbG9jYnVmKG1heF8pOwog
ICAgZWxzZQogICAgICAgIGRhdGFfID0gMDsKfQoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVT4K
Rml4U2VxPFQsIFU+OjpGaXhTZXEoQ09SQkE6OlVMb25nIG0sIENPUkJBOjpVTG9uZyBsLCBUKiBk
LCBDT1JCQTo6Qm9vbGVhbiByKQogICAgOiBtYXhfKG0pLCBsZW5fKGwpLCByZWxfKHIpCnsKICAg
ICggKGludCkobGVuXyA8PSBtYXhfKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FTZXFMZW5Hck1h
eCwgImxlbl8gPD0gbWF4XyIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGVJLmgi
LCAyNjUpLCBhYm9ydCgpKSApOwogICAgZGF0YV8gPSBkOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBULCBj
bGFzcyBVPgpGaXhTZXE8VCwgVT46OkZpeFNlcShjb25zdCBGaXhTZXE8VCwgVT4mIHIpCiAgICA6
IG1heF8oMCksIGxlbl8oMCksIHJlbF8odHJ1ZSksIGRhdGFfKDApCnsKICAgICp0aGlzID0gcjsK
fQoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVT4KRml4U2VxPFQsIFU+JgpGaXhTZXE8VCwgVT46
Om9wZXJhdG9yPShjb25zdCBGaXhTZXE8VCwgVT4mIHIpCnsKICAgIGlmKHRoaXMgIT0gJnIpCiAg
ICB7CiAgICAgICAgaWYocmVsXykKICAgICAgICAgICAgZnJlZWJ1ZihkYXRhXyk7CgogICAgICAg
IG1heF8gPSByLm1heF87CiAgICAgICAgbGVuXyA9IHIubGVuXzsKICAgICAgICByZWxfID0gdHJ1
ZTsKCiAgICAgICAgaWYobWF4XyA+IDApCiAgICAgICAgewogICAgICAgICAgICBkYXRhXyA9IGFs
bG9jYnVmKG1heF8pOwoKICAgICAgICAgICAgaWYobGVuXykKICAgICAgICAgICAgICAgIG1lbWNw
eShkYXRhXywgci5kYXRhXywgbGVuXyAqIHNpemVvZihUKSk7CiAgICAgICAgfQogICAgICAgIGVs
c2UKICAgICAgICAgICAgZGF0YV8gPSAwOwogICAgfQoKICAgIHJldHVybiAqdGhpczsKfQoKdGVt
cGxhdGU8Y2xhc3MgVCwgY2xhc3MgVT4Kdm9pZApGaXhTZXE8VCwgVT46Omxlbmd0aChDT1JCQTo6
VUxvbmcgbmV3TGVuKQp7CiAgICBpZihuZXdMZW4gPiBtYXhfKQogICAgewogICAgICAgIFQqIG9s
ZCA9IGRhdGFfOwoKICAgICAgICBtYXhfID0gbmV3TGVuID4gbWF4XyAqIDIgPyBuZXdMZW4gOiBt
YXhfICogMjsKICAgICAgICBkYXRhXyA9IGFsbG9jYnVmKG1heF8pOwoKICAgICAgICBpZihsZW5f
KQogICAgICAgICAgICBtZW1jcHkoZGF0YV8sIG9sZCwgbGVuXyAqIHNpemVvZihUKSk7CgogICAg
ICAgIGlmKHJlbF8pCiAgICAgICAgICAgIGZyZWVidWYob2xkKTsKCiAgICAgICAgcmVsXyA9IHRy
dWU7CiAgICB9CgogICAgbGVuXyA9IG5ld0xlbjsKfQoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3Mg
VT4Kdm9pZApGaXhTZXE8VCwgVT46OnJlcGxhY2UoQ09SQkE6OlVMb25nIG1heCwgQ09SQkE6OlVM
b25nIGxlbiwgVCogZGF0YSwKICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIHJl
bGVhc2UpCnsKICAgIGlmKHJlbF8pCiAgICAgICAgZnJlZWJ1ZihkYXRhXyk7CgogICAgbWF4XyA9
IG1heDsKICAgIGxlbl8gPSBsZW47CiAgICByZWxfID0gcmVsZWFzZTsKCiAgICAoIChpbnQpKGxl
bl8gPD0gbWF4XykgPyAodm9pZCkwIDogKE9COjpOQ0EoTkNBU2VxTGVuR3JNYXgsICJsZW5fIDw9
IG1heF8iLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlSS5oIiwgMzM4KSwgYWJv
cnQoKSkgKTsKICAgIGRhdGFfID0gZGF0YTsKfQoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVT4K
VCoKRml4U2VxPFQsIFU+OjpnZXRfYnVmZmVyKENPUkJBOjpCb29sZWFuIG9ycGhhbikKewoKCgoK
ICAgIGlmKCFvcnBoYW4pCiAgICAgICAgcmV0dXJuIGRhdGFfOwoKCgoKCiAgICBpZighcmVsXykK
ICAgICAgICByZXR1cm4gMDsKCgoKCgogICAgVCogcmMgPSBkYXRhXzsKCgoKCiAgICBtYXhfID0g
MDsKICAgIGxlbl8gPSAwOwogICAgcmVsXyA9IHRydWU7CiAgICBkYXRhXyA9IDA7CgogICAgcmV0
dXJuIHJjOwp9CgoKCgp0ZW1wbGF0ZTxjbGFzcyBULCBDT1JCQTo6VUxvbmcgbWF4LCBjbGFzcyBV
PgpUKgpCbmRGaXhTZXE8VCwgbWF4LCBVPjo6YWxsb2NidWYoQ09SQkE6OlVMb25nIG4pCnsKICAg
ICggKGludCkobiA9PSBtYXgpID8gKHZvaWQpMCA6IChPQjo6TkNBKE5DQVNlcUJvdW5kLCAibiA9
PSBtYXgiLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlSS5oIiwgMzg0KSwgYWJv
cnQoKSkgKTsKICAgIHJldHVybiBuZXcgVFtuXTsKfQoKdGVtcGxhdGU8Y2xhc3MgVCwgQ09SQkE6
OlVMb25nIG1heCwgY2xhc3MgVT4KQm5kRml4U2VxPFQsIG1heCwgVT46OkJuZEZpeFNlcSgpCiAg
ICA6IGxlbl8oMCksIHJlbF8odHJ1ZSksIGRhdGFfKDApCnsKfQoKdGVtcGxhdGU8Y2xhc3MgVCwg
Q09SQkE6OlVMb25nIG1heCwgY2xhc3MgVT4KQm5kRml4U2VxPFQsIG1heCwgVT46OkJuZEZpeFNl
cShDT1JCQTo6VUxvbmcgbCwgVCogZCwgQ09SQkE6OkJvb2xlYW4gcikKICAgIDogbGVuXyhsKSwg
cmVsXyhyKQp7CiAgICAoIChpbnQpKGxlbl8gPD0gbWF4KSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShO
Q0FTZXFMZW5Hck1heCwgImxlbl8gPD0gbWF4IiwgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9U
ZW1wbGF0ZUkuaCIsIDM5OCksIGFib3J0KCkpICk7CiAgICBkYXRhXyA9IGQ7Cn0KCnRlbXBsYXRl
PGNsYXNzIFQsIENPUkJBOjpVTG9uZyBtYXgsIGNsYXNzIFU+CkJuZEZpeFNlcTxULCBtYXgsIFU+
OjpCbmRGaXhTZXEoY29uc3QgQm5kRml4U2VxPFQsIG1heCwgVT4mIHIpCiAgICA6IGxlbl8oMCks
IHJlbF8odHJ1ZSksIGRhdGFfKDApCnsKICAgICp0aGlzID0gcjsKfQoKdGVtcGxhdGU8Y2xhc3Mg
VCwgQ09SQkE6OlVMb25nIG1heCwgY2xhc3MgVT4KQm5kRml4U2VxPFQsIG1heCwgVT4mCkJuZEZp
eFNlcTxULCBtYXgsIFU+OjpvcGVyYXRvcj0oY29uc3QgQm5kRml4U2VxPFQsIG1heCwgVT4mIHIp
CnsKICAgIGlmKHRoaXMgIT0gJnIpCiAgICB7CiAgICAgICAgaWYocmVsXykKICAgICAgICAgICAg
ZnJlZWJ1ZihkYXRhXyk7CgogICAgICAgIGxlbl8gPSByLmxlbl87CiAgICAgICAgcmVsXyA9IHRy
dWU7CgogICAgICAgIGRhdGFfID0gYWxsb2NidWYobWF4KTsKCiAgICAgICAgaWYobGVuXykKICAg
ICAgICAgICAgbWVtY3B5KGRhdGFfLCByLmRhdGFfLCBsZW5fICogc2l6ZW9mKFQpKTsKICAgIH0K
CiAgICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlPGNsYXNzIFQsIENPUkJBOjpVTG9uZyBtYXgs
IGNsYXNzIFU+CnZvaWQKQm5kRml4U2VxPFQsIG1heCwgVT46Omxlbmd0aChDT1JCQTo6VUxvbmcg
bmV3TGVuKQp7CiAgICAoIChpbnQpKG5ld0xlbiA8PSBtYXgpID8gKHZvaWQpMCA6IChPQjo6TkNB
KE5DQVNlcUxlbkdyTWF4LCAibmV3TGVuIDw9IG1heCIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUv
T0IvVGVtcGxhdGVJLmgiLCA0MzQpLCBhYm9ydCgpKSApOwoKICAgIGlmKCFkYXRhXykKICAgICAg
ICBkYXRhXyA9IGFsbG9jYnVmKG1heCk7CgogICAgbGVuXyA9IG5ld0xlbjsKfQoKdGVtcGxhdGU8
Y2xhc3MgVCwgQ09SQkE6OlVMb25nIG1heCwgY2xhc3MgVT4Kdm9pZApCbmRGaXhTZXE8VCwgbWF4
LCBVPjo6cmVwbGFjZShDT1JCQTo6VUxvbmcgbGVuLCBUKiBkYXRhLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlKQp7CiAgICBpZihyZWxfKQogICAg
ICAgIGZyZWVidWYoZGF0YV8pOwoKICAgIGxlbl8gPSBsZW47CiAgICByZWxfID0gcmVsZWFzZTsK
CiAgICAoIChpbnQpKGxlbl8gPD0gbWF4KSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FTZXFMZW5H
ck1heCwgImxlbl8gPD0gbWF4IiwgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZUku
aCIsIDQ1MyksIGFib3J0KCkpICk7CiAgICBkYXRhXyA9IGRhdGE7Cn0KCnRlbXBsYXRlPGNsYXNz
IFQsIENPUkJBOjpVTG9uZyBtYXgsIGNsYXNzIFU+ClQqCkJuZEZpeFNlcTxULCBtYXgsIFU+Ojpn
ZXRfYnVmZmVyKENPUkJBOjpCb29sZWFuIG9ycGhhbikKewogICAgaWYoIWRhdGFfKQogICAgICAg
IGRhdGFfID0gYWxsb2NidWYobWF4KTsKCgoKCgogICAgaWYoIW9ycGhhbikKICAgICAgICByZXR1
cm4gZGF0YV87CgoKCgoKICAgIGlmKCFyZWxfKQogICAgICAgIHJldHVybiAwOwoKCgoKCiAgICBU
KiByYyA9IGRhdGFfOwoKCgoKICAgIGxlbl8gPSAwOwogICAgcmVsXyA9IHRydWU7CiAgICBkYXRh
XyA9IGFsbG9jYnVmKG1heCk7CgogICAgcmV0dXJuIHJjOwp9CgoKCgp0ZW1wbGF0ZTxjbGFzcyBU
LCBjbGFzcyBVPgpWYXJTZXE8VCwgVT46OlZhclNlcSgpCiAgICA6IG1heF8oMCksIGxlbl8oMCks
IHJlbF8odHJ1ZSksIGRhdGFfKDApCnsKfQoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVT4KVmFy
U2VxPFQsIFU+OjpWYXJTZXEoQ09SQkE6OlVMb25nIG0pCiAgICA6IG1heF8obSksIGxlbl8oMCks
IHJlbF8odHJ1ZSkKewogICAgaWYobWF4XyA+IDApCiAgICAgICAgZGF0YV8gPSBhbGxvY2J1Ziht
YXhfKTsKICAgIGVsc2UKICAgICAgICBkYXRhXyA9IDA7Cn0KCnRlbXBsYXRlPGNsYXNzIFQsIGNs
YXNzIFU+ClZhclNlcTxULCBVPjo6VmFyU2VxKENPUkJBOjpVTG9uZyBtLCBDT1JCQTo6VUxvbmcg
bCwgVCogZCwgQ09SQkE6OkJvb2xlYW4gcikKICAgIDogbWF4XyhtKSwgbGVuXyhsKSwgcmVsXyhy
KQp7CiAgICAoIChpbnQpKGxlbl8gPD0gbWF4XykgPyAodm9pZCkwIDogKE9COjpOQ0EoTkNBU2Vx
TGVuR3JNYXgsICJsZW5fIDw9IG1heF8iLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1RlbXBs
YXRlSS5oIiwgNTE3KSwgYWJvcnQoKSkgKTsKICAgIGRhdGFfID0gZDsKfQoKdGVtcGxhdGU8Y2xh
c3MgVCwgY2xhc3MgVT4KVmFyU2VxPFQsIFU+OjpWYXJTZXEoY29uc3QgVmFyU2VxPFQsIFU+JiBy
KQogICAgOiBtYXhfKDApLCBsZW5fKDApLCByZWxfKHRydWUpLCBkYXRhXygwKQp7CiAgICAqdGhp
cyA9IHI7Cn0KCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFU+ClZhclNlcTxULCBVPiYKVmFyU2Vx
PFQsIFU+OjpvcGVyYXRvcj0oY29uc3QgVmFyU2VxPFQsIFU+JiByKQp7CiAgICBpZih0aGlzICE9
ICZyKQogICAgewogICAgICAgIGlmKHJlbF8pCiAgICAgICAgICAgIGZyZWVidWYoZGF0YV8pOwoK
ICAgICAgICBtYXhfID0gci5tYXhfOwogICAgICAgIGxlbl8gPSByLmxlbl87CiAgICAgICAgcmVs
XyA9IHRydWU7CgogICAgICAgIGlmKG1heF8gPiAwKQogICAgICAgICAgICBkYXRhXyA9IGFsbG9j
YnVmKG1heF8pOwogICAgICAgIGVsc2UKICAgICAgICAgICAgZGF0YV8gPSAwOwoKICAgICAgICBm
b3IoQ09SQkE6OlVMb25nIGkgPSAwIDsgaSA8IGxlbl8gOyBpKyspCiAgICAgICAgICAgIGRhdGFf
W2ldID0gci5kYXRhX1tpXTsKICAgIH0KCiAgICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlPGNs
YXNzIFQsIGNsYXNzIFU+CnZvaWQKVmFyU2VxPFQsIFU+OjpsZW5ndGgoQ09SQkE6OlVMb25nIG5l
d0xlbikKewogICAgaWYobmV3TGVuIDwgbGVuXyAmJiByZWxfKQogICAgewogICAgICAgIGZvcihD
T1JCQTo6VUxvbmcgaSA9IG5ld0xlbiA7IGkgPCBsZW5fIDsgaSsrKQogICAgICAgICAgICBkYXRh
X1tpXSA9IFQoKTsKICAgIH0KICAgIGVsc2UgaWYobmV3TGVuID4gbWF4XykKICAgIHsKICAgICAg
ICBUKiBvbGQgPSBkYXRhXzsKCiAgICAgICAgbWF4XyA9IG5ld0xlbiA+IG1heF8gKiAyID8gbmV3
TGVuIDogbWF4XyAqIDI7CiAgICAgICAgZGF0YV8gPSBhbGxvY2J1ZihtYXhfKTsKCiAgICAgICAg
Zm9yKENPUkJBOjpVTG9uZyBpID0gMCA7IGkgPCBsZW5fIDsgaSsrKQogICAgICAgICAgICBkYXRh
X1tpXSA9IG9sZFtpXTsKCiAgICAgICAgaWYocmVsXykKICAgICAgICAgICAgZnJlZWJ1ZihvbGQp
OwoKICAgICAgICByZWxfID0gdHJ1ZTsKICAgIH0KCiAgICBsZW5fID0gbmV3TGVuOwp9Cgp0ZW1w
bGF0ZTxjbGFzcyBULCBjbGFzcyBVPgp2b2lkClZhclNlcTxULCBVPjo6cmVwbGFjZShDT1JCQTo6
VUxvbmcgbWF4LCBDT1JCQTo6VUxvbmcgbGVuLCBUKiBkYXRhLAogICAgICAgICAgICAgICAgICAg
ICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKewogICAgaWYocmVsXykKICAgICAgICBmcmVlYnVm
KGRhdGFfKTsKCiAgICBtYXhfID0gbWF4OwogICAgbGVuXyA9IGxlbjsKICAgIHJlbF8gPSByZWxl
YXNlOwoKICAgICggKGludCkobGVuXyA8PSBtYXhfKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FT
ZXFMZW5Hck1heCwgImxlbl8gPD0gbWF4XyIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVt
cGxhdGVJLmgiLCA1OTMpLCBhYm9ydCgpKSApOwogICAgZGF0YV8gPSBkYXRhOwp9Cgp0ZW1wbGF0
ZTxjbGFzcyBULCBjbGFzcyBVPgpUKgpWYXJTZXE8VCwgVT46OmdldF9idWZmZXIoQ09SQkE6OkJv
b2xlYW4gb3JwaGFuKQp7CgoKCgogICAgaWYoIW9ycGhhbikKICAgICAgICByZXR1cm4gZGF0YV87
CgoKCgoKICAgIGlmKCFyZWxfKQogICAgICAgIHJldHVybiAwOwoKCgoKCiAgICBUKiByYyA9IGRh
dGFfOwoKCgoKICAgIG1heF8gPSAwOwogICAgbGVuXyA9IDA7CiAgICByZWxfID0gdHJ1ZTsKICAg
IGRhdGFfID0gMDsKCiAgICByZXR1cm4gcmM7Cn0KCgoKCnRlbXBsYXRlPGNsYXNzIFQsIENPUkJB
OjpVTG9uZyBtYXgsIGNsYXNzIFU+ClQqCkJuZFZhclNlcTxULCBtYXgsIFU+OjphbGxvY2J1ZihD
T1JCQTo6VUxvbmcgbikKewogICAgKCAoaW50KShuID09IG1heCkgPyAodm9pZCkwIDogKE9COjpO
Q0EoTkNBU2VxQm91bmQsICJuID09IG1heCIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVt
cGxhdGVJLmgiLCA2MzkpLCBhYm9ydCgpKSApOwogICAgcmV0dXJuIG5ldyBUW25dOwp9Cgp0ZW1w
bGF0ZTxjbGFzcyBULCBDT1JCQTo6VUxvbmcgbWF4LCBjbGFzcyBVPgpCbmRWYXJTZXE8VCwgbWF4
LCBVPjo6Qm5kVmFyU2VxKCkKICAgIDogbGVuXygwKSwgcmVsXyh0cnVlKSwgZGF0YV8oMCkKewp9
Cgp0ZW1wbGF0ZTxjbGFzcyBULCBDT1JCQTo6VUxvbmcgbWF4LCBjbGFzcyBVPgpCbmRWYXJTZXE8
VCwgbWF4LCBVPjo6Qm5kVmFyU2VxKENPUkJBOjpVTG9uZyBsLCBUKiBkLCBDT1JCQTo6Qm9vbGVh
biByKQogICAgOiBsZW5fKGwpLCByZWxfKHIpCnsKICAgICggKGludCkobGVuXyA8PSBtYXgpID8g
KHZvaWQpMCA6IChPQjo6TkNBKE5DQVNlcUxlbkdyTWF4LCAibGVuXyA8PSBtYXgiLCAiL2hvbWUv
bWF0dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlSS5oIiwgNjUzKSwgYWJvcnQoKSkgKTsKICAgIGRh
dGFfID0gZDsKfQoKdGVtcGxhdGU8Y2xhc3MgVCwgQ09SQkE6OlVMb25nIG1heCwgY2xhc3MgVT4K
Qm5kVmFyU2VxPFQsIG1heCwgVT46OkJuZFZhclNlcShjb25zdCBCbmRWYXJTZXE8VCwgbWF4LCBV
PiYgcikKICAgIDogbGVuXygwKSwgcmVsXyh0cnVlKSwgZGF0YV8oMCkKewogICAgKnRoaXMgPSBy
Owp9Cgp0ZW1wbGF0ZTxjbGFzcyBULCBDT1JCQTo6VUxvbmcgbWF4LCBjbGFzcyBVPgpCbmRWYXJT
ZXE8VCwgbWF4LCBVPiYKQm5kVmFyU2VxPFQsIG1heCwgVT46Om9wZXJhdG9yPShjb25zdCBCbmRW
YXJTZXE8VCwgbWF4LCBVPiYgcikKewogICAgaWYodGhpcyAhPSAmcikKICAgIHsKICAgICAgICBp
ZihyZWxfKQogICAgICAgICAgICBmcmVlYnVmKGRhdGFfKTsKCiAgICAgICAgbGVuXyA9IHIubGVu
XzsKICAgICAgICByZWxfID0gdHJ1ZTsKCiAgICAgICAgZGF0YV8gPSBhbGxvY2J1ZihtYXgpOwoK
ICAgICAgICBmb3IoQ09SQkE6OlVMb25nIGkgPSAwIDsgaSA8IGxlbl8gOyBpKyspCiAgICAgICAg
ICAgIGRhdGFfW2ldID0gci5kYXRhX1tpXTsKICAgIH0KCiAgICByZXR1cm4gKnRoaXM7Cn0KCnRl
bXBsYXRlPGNsYXNzIFQsIENPUkJBOjpVTG9uZyBtYXgsIGNsYXNzIFU+CnZvaWQKQm5kVmFyU2Vx
PFQsIG1heCwgVT46Omxlbmd0aChDT1JCQTo6VUxvbmcgbmV3TGVuKQp7CiAgICAoIChpbnQpKG5l
d0xlbiA8PSBtYXgpID8gKHZvaWQpMCA6IChPQjo6TkNBKE5DQVNlcUxlbkdyTWF4LCAibmV3TGVu
IDw9IG1heCIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGVJLmgiLCA2ODkpLCBh
Ym9ydCgpKSApOwoKICAgIGlmKCFkYXRhXykKICAgICAgICBkYXRhXyA9IGFsbG9jYnVmKG1heCk7
CgogICAgaWYobmV3TGVuIDwgbGVuXyAmJiByZWxfKQogICAgewogICAgICAgIGZvcihDT1JCQTo6
VUxvbmcgaSA9IG5ld0xlbiA7IGkgPCBsZW5fIDsgaSsrKQogICAgICAgICAgICBkYXRhX1tpXSA9
IFQoKTsKICAgIH0KCiAgICBsZW5fID0gbmV3TGVuOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBULCBDT1JC
QTo6VUxvbmcgbWF4LCBjbGFzcyBVPgp2b2lkCkJuZFZhclNlcTxULCBtYXgsIFU+OjpyZXBsYWNl
KENPUkJBOjpVTG9uZyBsZW4sIFQqIGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCnsKICAgIGlmKHJlbF8pCiAgICAgICAgZnJlZWJ1Zihk
YXRhXyk7CgogICAgbGVuXyA9IGxlbjsKICAgIHJlbF8gPSByZWxlYXNlOwoKICAgICggKGludCko
bGVuXyA8PSBtYXgpID8gKHZvaWQpMCA6IChPQjo6TkNBKE5DQVNlcUxlbkdyTWF4LCAibGVuXyA8
PSBtYXgiLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlSS5oIiwgNzE0KSwgYWJv
cnQoKSkgKTsKICAgIGRhdGFfID0gZGF0YTsKfQoKdGVtcGxhdGU8Y2xhc3MgVCwgQ09SQkE6OlVM
b25nIG1heCwgY2xhc3MgVT4KVCoKQm5kVmFyU2VxPFQsIG1heCwgVT46OmdldF9idWZmZXIoQ09S
QkE6OkJvb2xlYW4gb3JwaGFuKQp7CiAgICBpZighZGF0YV8pCiAgICAgICAgZGF0YV8gPSBhbGxv
Y2J1ZihtYXgpOwoKCgoKCiAgICBpZighb3JwaGFuKQogICAgICAgIHJldHVybiBkYXRhXzsKCgoK
CgogICAgaWYoIXJlbF8pCiAgICAgICAgcmV0dXJuIDA7CgoKCgoKICAgIFQqIHJjID0gZGF0YV87
CgoKCgogICAgbGVuXyA9IDA7CiAgICByZWxfID0gdHJ1ZTsKICAgIGRhdGFfID0gYWxsb2NidWYo
bWF4KTsKCiAgICByZXR1cm4gcmM7Cn0KCgoKCnRlbXBsYXRlPGNsYXNzIFRfc2xpY2UsIGNsYXNz
IFQsIENPUkJBOjpVTG9uZyBuLCBjbGFzcyBVPgpUX3NsaWNlKioKRml4QXJyYXlTZXE8VF9zbGlj
ZSwgVCwgbiwgVT46OmFsbG9jYnVmKENPUkJBOjpVTG9uZyBubikKewogICAgVF9zbGljZSoqIHAg
PSAoVF9zbGljZSoqKSBBbGxvYyhzaXplb2YoVF9zbGljZSopLCBubik7CgogICAgZm9yKENPUkJB
OjpVTG9uZyBpID0gMCA7IGkgPCBubiA7IGkrKykKICAgICAgICBwW2ldID0gKFRfc2xpY2UqKSBu
ZXcgVFtuXTsKCiAgICByZXR1cm4gcDsKfQoKdGVtcGxhdGU8Y2xhc3MgVF9zbGljZSwgY2xhc3Mg
VCwgQ09SQkE6OlVMb25nIG4sIGNsYXNzIFU+CnZvaWQKRml4QXJyYXlTZXE8VF9zbGljZSwgVCwg
biwgVT46OmZyZWVidWYoVF9zbGljZSoqIHApCnsKICAgIGlmKHApCiAgICB7CiAgICAgICAgQ09S
QkE6OlVMb25nIG5uID0gQWxsb2NhdGVkKHApOwoKICAgICAgICBmb3IoQ09SQkE6OlVMb25nIGkg
PSAwIDsgaSA8IG5uIDsgaSsrKQogICAgICAgICAgICBkZWxldGUgW10gKFQqKSBwW2ldOwoKICAg
ICAgICBGcmVlKHApOwogICAgfQp9Cgp0ZW1wbGF0ZTxjbGFzcyBUX3NsaWNlLCBjbGFzcyBULCBD
T1JCQTo6VUxvbmcgbiwgY2xhc3MgVT4KRml4QXJyYXlTZXE8VF9zbGljZSwgVCwgbiwgVT46OkZp
eEFycmF5U2VxKCkKICAgIDogbWF4XygwKSwgbGVuXygwKSwgcmVsXyh0cnVlKSwgZGF0YV8oMCkK
ewp9Cgp0ZW1wbGF0ZTxjbGFzcyBUX3NsaWNlLCBjbGFzcyBULCBDT1JCQTo6VUxvbmcgbiwgY2xh
c3MgVT4KRml4QXJyYXlTZXE8VF9zbGljZSwgVCwgbiwgVT46OkZpeEFycmF5U2VxKENPUkJBOjpV
TG9uZyBtKQogICAgOiBtYXhfKG0pLCBsZW5fKDApLCByZWxfKHRydWUpCnsKICAgIGlmKG1heF8g
PiAwKQogICAgICAgIGRhdGFfID0gYWxsb2NidWYobWF4Xyk7CiAgICBlbHNlCiAgICAgICAgZGF0
YV8gPSAwOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBUX3NsaWNlLCBjbGFzcyBULCBDT1JCQTo6VUxvbmcg
biwgY2xhc3MgVT4KRml4QXJyYXlTZXE8VF9zbGljZSwgVCwgbiwgVT46OgpGaXhBcnJheVNlcShD
T1JCQTo6VUxvbmcgbSwgQ09SQkE6OlVMb25nIGwsIFRfc2xpY2UqKiBkLCBDT1JCQTo6Qm9vbGVh
biByKQogICAgOiBtYXhfKG0pLCBsZW5fKGwpLCByZWxfKHIpCnsKICAgICggKGludCkobGVuXyA8
PSBtYXhfKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FTZXFMZW5Hck1heCwgImxlbl8gPD0gbWF4
XyIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGVJLmgiLCA4MDYpLCBhYm9ydCgp
KSApOwogICAgZGF0YV8gPSBkOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBUX3NsaWNlLCBjbGFzcyBULCBD
T1JCQTo6VUxvbmcgbiwgY2xhc3MgVT4KRml4QXJyYXlTZXE8VF9zbGljZSwgVCwgbiwgVT46OgpG
aXhBcnJheVNlcShjb25zdCBGaXhBcnJheVNlcTxUX3NsaWNlLCBULCBuLCBVPiYgcikKICAgIDog
bWF4XygwKSwgbGVuXygwKSwgcmVsXyh0cnVlKSwgZGF0YV8oMCkKewogICAgKnRoaXMgPSByOwp9
Cgp0ZW1wbGF0ZTxjbGFzcyBUX3NsaWNlLCBjbGFzcyBULCBDT1JCQTo6VUxvbmcgbiwgY2xhc3Mg
VT4KRml4QXJyYXlTZXE8VF9zbGljZSwgVCwgbiwgVT4mCkZpeEFycmF5U2VxPFRfc2xpY2UsIFQs
IG4sIFU+OjpvcGVyYXRvcj0oY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEZpeEFycmF5U2VxPFRfc2xpY2UsIFQsIG4sIFU+JiByKQp7CiAgICBpZih0aGlz
ICE9ICZyKQogICAgewogICAgICAgIGlmKHJlbF8pCiAgICAgICAgICAgIGZyZWVidWYoZGF0YV8p
OwoKICAgICAgICBtYXhfID0gci5tYXhfOwogICAgICAgIGxlbl8gPSByLmxlbl87CiAgICAgICAg
cmVsXyA9IHRydWU7CgogICAgICAgIGlmKG1heF8gPiAwKQogICAgICAgICAgICBkYXRhXyA9IGFs
bG9jYnVmKG1heF8pOwogICAgICAgIGVsc2UKICAgICAgICAgICAgZGF0YV8gPSAwOwoKICAgICAg
ICBmb3IoQ09SQkE6OlVMb25nIGkgPSAwIDsgaSA8IGxlbl8gOyBpKyspCiAgICAgICAgICAgIG1l
bWNweShkYXRhX1tpXSwgci5kYXRhX1tpXSwgbiAqIHNpemVvZihUKSk7CiAgICB9CgogICAgcmV0
dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBUX3NsaWNlLCBjbGFzcyBULCBDT1JCQTo6VUxv
bmcgbiwgY2xhc3MgVT4Kdm9pZApGaXhBcnJheVNlcTxUX3NsaWNlLCBULCBuLCBVPjo6bGVuZ3Ro
KENPUkJBOjpVTG9uZyBuZXdMZW4pCnsKICAgIGlmKG5ld0xlbiA+IG1heF8pCiAgICB7CiAgICAg
ICAgVF9zbGljZSoqIG9sZCA9IGRhdGFfOwoKICAgICAgICBtYXhfID0gbmV3TGVuID4gbWF4XyAq
IDIgPyBuZXdMZW4gOiBtYXhfICogMjsKICAgICAgICBkYXRhXyA9IGFsbG9jYnVmKG1heF8pOwoK
ICAgICAgICBmb3IoQ09SQkE6OlVMb25nIGkgPSAwIDsgaSA8IGxlbl8gOyBpKyspCiAgICAgICAg
ICAgIG1lbWNweShkYXRhX1tpXSwgb2xkW2ldLCBuICogc2l6ZW9mKFQpKTsKCiAgICAgICAgaWYo
cmVsXykKICAgICAgICAgICAgZnJlZWJ1ZihvbGQpOwoKICAgICAgICByZWxfID0gdHJ1ZTsKICAg
IH0KCiAgICBsZW5fID0gbmV3TGVuOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBUX3NsaWNlLCBjbGFzcyBU
LCBDT1JCQTo6VUxvbmcgbiwgY2xhc3MgVT4Kdm9pZApGaXhBcnJheVNlcTxUX3NsaWNlLCBULCBu
LCBVPjo6cmVwbGFjZShDT1JCQTo6VUxvbmcgbWF4LCBDT1JCQTo6VUxvbmcgbGVuLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUX3NsaWNlKiogZGF0YSwgQ09SQkE6OkJv
b2xlYW4gcmVsZWFzZSkKewogICAgaWYocmVsXykKICAgICAgICBmcmVlYnVmKGRhdGFfKTsKCiAg
ICBtYXhfID0gbWF4OwogICAgbGVuXyA9IGxlbjsKICAgIHJlbF8gPSByZWxlYXNlOwoKICAgICgg
KGludCkobGVuXyA8PSBtYXhfKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FTZXFMZW5Hck1heCwg
Imxlbl8gPD0gbWF4XyIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGVJLmgiLCA4
NzkpLCBhYm9ydCgpKSApOwogICAgZGF0YV8gPSBkYXRhOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBUX3Ns
aWNlLCBjbGFzcyBULCBDT1JCQTo6VUxvbmcgbiwgY2xhc3MgVT4KVF9zbGljZSoqCkZpeEFycmF5
U2VxPFRfc2xpY2UsIFQsIG4sIFU+OjpnZXRfYnVmZmVyKENPUkJBOjpCb29sZWFuIG9ycGhhbikK
ewoKCgoKICAgIGlmKCFvcnBoYW4pCiAgICAgICAgcmV0dXJuIGRhdGFfOwoKCgoKCiAgICBpZigh
cmVsXykKICAgICAgICByZXR1cm4gMDsKCgoKCgogICAgVF9zbGljZSoqIHJjID0gZGF0YV87CgoK
CgogICAgbWF4XyA9IDA7CiAgICBsZW5fID0gMDsKICAgIHJlbF8gPSB0cnVlOwogICAgZGF0YV8g
PSAwOwoKICAgIHJldHVybiByYzsKfQoKCgoKdGVtcGxhdGU8Y2xhc3MgVF9zbGljZSwgY2xhc3Mg
VCwgQ09SQkE6OlVMb25nIG4sIENPUkJBOjpVTG9uZyBtYXgsIGNsYXNzIFU+ClRfc2xpY2UqKgpC
bmRGaXhBcnJheVNlcTxUX3NsaWNlLCBULCBuLCBtYXgsIFU+OjphbGxvY2J1ZihDT1JCQTo6VUxv
bmcgbm4pCnsKICAgICggKGludCkobm4gPT0gbWF4KSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FT
ZXFCb3VuZCwgIm5uID09IG1heCIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGVJ
LmgiLCA5MjUpLCBhYm9ydCgpKSApOwoKICAgIFRfc2xpY2UqKiBwID0gKFRfc2xpY2UqKikgQWxs
b2Moc2l6ZW9mKFRfc2xpY2UqKSwgbm4pOwoKICAgIGZvcihDT1JCQTo6VUxvbmcgaSA9IDAgOyBp
IDwgbm4gOyBpKyspCiAgICAgICAgcFtpXSA9IChUX3NsaWNlKikgbmV3IFRbbl07CgogICAgcmV0
dXJuIHA7Cn0KCnRlbXBsYXRlPGNsYXNzIFRfc2xpY2UsIGNsYXNzIFQsIENPUkJBOjpVTG9uZyBu
LCBDT1JCQTo6VUxvbmcgbWF4LCBjbGFzcyBVPgp2b2lkCkJuZEZpeEFycmF5U2VxPFRfc2xpY2Us
IFQsIG4sIG1heCwgVT46OmZyZWVidWYoVF9zbGljZSoqIHApCnsKICAgIGlmKHApCiAgICB7CiAg
ICAgICAgQ09SQkE6OlVMb25nIG51bSA9IEFsbG9jYXRlZChwKTsKCiAgICAgICAgZm9yKENPUkJB
OjpVTG9uZyBpID0gMCA7IGkgPCBudW0gOyBpKyspCiAgICAgICAgICAgIGRlbGV0ZSBbXSAoVCop
IHBbaV07CgogICAgICAgIEZyZWUocCk7CiAgICB9Cn0KCnRlbXBsYXRlPGNsYXNzIFRfc2xpY2Us
IGNsYXNzIFQsIENPUkJBOjpVTG9uZyBuLCBDT1JCQTo6VUxvbmcgbWF4LCBjbGFzcyBVPgpCbmRG
aXhBcnJheVNlcTxUX3NsaWNlLCBULCBuLCBtYXgsIFU+OjpCbmRGaXhBcnJheVNlcSgpCiAgICA6
IGxlbl8oMCksIHJlbF8odHJ1ZSksIGRhdGFfKDApCnsKfQoKdGVtcGxhdGU8Y2xhc3MgVF9zbGlj
ZSwgY2xhc3MgVCwgQ09SQkE6OlVMb25nIG4sIENPUkJBOjpVTG9uZyBtYXgsIGNsYXNzIFU+CkJu
ZEZpeEFycmF5U2VxPFRfc2xpY2UsIFQsIG4sIG1heCwgVT46OkJuZEZpeEFycmF5U2VxKENPUkJB
OjpVTG9uZyBsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVF9zbGljZSoqIGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiByKQogICAgOiBsZW5fKGwp
LCByZWxfKHIpCnsKICAgICggKGludCkobGVuXyA8PSBtYXgpID8gKHZvaWQpMCA6IChPQjo6TkNB
KE5DQVNlcUxlbkdyTWF4LCAibGVuXyA8PSBtYXgiLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09C
L1RlbXBsYXRlSS5oIiwgOTYyKSwgYWJvcnQoKSkgKTsKICAgIGRhdGFfID0gZDsKfQoKdGVtcGxh
dGU8Y2xhc3MgVF9zbGljZSwgY2xhc3MgVCwgQ09SQkE6OlVMb25nIG4sIENPUkJBOjpVTG9uZyBt
YXgsIGNsYXNzIFU+CkJuZEZpeEFycmF5U2VxPFRfc2xpY2UsIFQsIG4sIG1heCwgVT46OgpCbmRG
aXhBcnJheVNlcShjb25zdCBCbmRGaXhBcnJheVNlcTxUX3NsaWNlLCBULCBuLCBtYXgsIFU+JiBy
KQogICAgOiBsZW5fKDApLCByZWxfKHRydWUpLCBkYXRhXygwKQp7CiAgICAqdGhpcyA9IHI7Cn0K
CnRlbXBsYXRlPGNsYXNzIFRfc2xpY2UsIGNsYXNzIFQsIENPUkJBOjpVTG9uZyBuLCBDT1JCQTo6
VUxvbmcgbWF4LCBjbGFzcyBVPgpCbmRGaXhBcnJheVNlcTxUX3NsaWNlLCBULCBuLCBtYXgsIFU+
JgpCbmRGaXhBcnJheVNlcTxUX3NsaWNlLCBULCBuLCBtYXgsIFU+OjoKb3BlcmF0b3I9KGNvbnN0
IEJuZEZpeEFycmF5U2VxPFRfc2xpY2UsIFQsIG4sIG1heCwgVT4mIHIpCnsKICAgIGlmKHRoaXMg
IT0gJnIpCiAgICB7CiAgICAgICAgaWYocmVsXykKICAgICAgICAgICAgZnJlZWJ1ZihkYXRhXyk7
CgogICAgICAgIGxlbl8gPSByLmxlbl87CiAgICAgICAgcmVsXyA9IHRydWU7CgogICAgICAgIGRh
dGFfID0gYWxsb2NidWYobWF4KTsKCiAgICAgICAgZm9yKENPUkJBOjpVTG9uZyBpID0gMCA7IGkg
PCBsZW5fIDsgaSsrKQogICAgICAgICAgICBtZW1jcHkoZGF0YV9baV0sIHIuZGF0YV9baV0sIG4g
KiBzaXplb2YoVCkpOwogICAgfQoKICAgIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGU8Y2xhc3Mg
VF9zbGljZSwgY2xhc3MgVCwgQ09SQkE6OlVMb25nIG4sIENPUkJBOjpVTG9uZyBtYXgsIGNsYXNz
IFU+CnZvaWQKQm5kRml4QXJyYXlTZXE8VF9zbGljZSwgVCwgbiwgbWF4LCBVPjo6bGVuZ3RoKENP
UkJBOjpVTG9uZyBuZXdMZW4pCnsKICAgICggKGludCkobmV3TGVuIDw9IG1heCkgPyAodm9pZCkw
IDogKE9COjpOQ0EoTkNBU2VxTGVuR3JNYXgsICJuZXdMZW4gPD0gbWF4IiwgIi9ob21lL21hdHQv
b2IvaW5jbHVkZS9PQi9UZW1wbGF0ZUkuaCIsIDEwMDApLCBhYm9ydCgpKSApOwoKICAgIGlmKCFk
YXRhXykKICAgICAgICBkYXRhXyA9IGFsbG9jYnVmKG1heCk7CgogICAgbGVuXyA9IG5ld0xlbjsK
fQoKdGVtcGxhdGU8Y2xhc3MgVF9zbGljZSwgY2xhc3MgVCwgQ09SQkE6OlVMb25nIG4sIENPUkJB
OjpVTG9uZyBtYXgsIGNsYXNzIFU+CnZvaWQKQm5kRml4QXJyYXlTZXE8VF9zbGljZSwgVCwgbiwg
bWF4LCBVPjo6cmVwbGFjZShDT1JCQTo6VUxvbmcgbGVuLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRfc2xpY2UqKiBkYXRhLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCnsK
ICAgIGlmKHJlbF8pCiAgICAgICAgZnJlZWJ1ZihkYXRhXyk7CgogICAgbGVuXyA9IGxlbjsKICAg
IHJlbF8gPSByZWxlYXNlOwoKICAgICggKGludCkobGVuXyA8PSBtYXgpID8gKHZvaWQpMCA6IChP
Qjo6TkNBKE5DQVNlcUxlbkdyTWF4LCAibGVuXyA8PSBtYXgiLCAiL2hvbWUvbWF0dC9vYi9pbmNs
dWRlL09CL1RlbXBsYXRlSS5oIiwgMTAyMCksIGFib3J0KCkpICk7CiAgICBkYXRhXyA9IGRhdGE7
Cn0KCnRlbXBsYXRlPGNsYXNzIFRfc2xpY2UsIGNsYXNzIFQsIENPUkJBOjpVTG9uZyBuLCBDT1JC
QTo6VUxvbmcgbWF4LCBjbGFzcyBVPgpUX3NsaWNlKioKQm5kRml4QXJyYXlTZXE8VF9zbGljZSwg
VCwgbiwgbWF4LCBVPjo6Z2V0X2J1ZmZlcihDT1JCQTo6Qm9vbGVhbiBvcnBoYW4pCnsKICAgIGlm
KCFkYXRhXykKICAgICAgICBkYXRhXyA9IGFsbG9jYnVmKG1heCk7CgoKCgoKICAgIGlmKCFvcnBo
YW4pCiAgICAgICAgcmV0dXJuIGRhdGFfOwoKCgoKCiAgICBpZighcmVsXykKICAgICAgICByZXR1
cm4gMDsKCgoKCgogICAgVF9zbGljZSoqIHJjID0gZGF0YV87CgoKCgogICAgbGVuXyA9IDA7CiAg
ICByZWxfID0gdHJ1ZTsKICAgIGRhdGFfID0gYWxsb2NidWYobWF4KTsKCiAgICByZXR1cm4gcmM7
Cn0KCgoKCnRlbXBsYXRlPGNsYXNzIFRfc2xpY2UsIGNsYXNzIFQsIENPUkJBOjpVTG9uZyBuLCBj
bGFzcyBVPgpUX3NsaWNlKioKVmFyQXJyYXlTZXE8VF9zbGljZSwgVCwgbiwgVT46OmFsbG9jYnVm
KENPUkJBOjpVTG9uZyBubikKewogICAgVF9zbGljZSoqIHAgPSAoVF9zbGljZSoqKSBBbGxvYyhz
aXplb2YoVF9zbGljZSopLCBubik7CgogICAgZm9yKENPUkJBOjpVTG9uZyBpID0gMCA7IGkgPCBu
biA7IGkrKykKICAgICAgICBwW2ldID0gKFRfc2xpY2UqKSBuZXcgVFtuXTsKCiAgICByZXR1cm4g
cDsKfQoKdGVtcGxhdGU8Y2xhc3MgVF9zbGljZSwgY2xhc3MgVCwgQ09SQkE6OlVMb25nIG4sIGNs
YXNzIFU+CnZvaWQKVmFyQXJyYXlTZXE8VF9zbGljZSwgVCwgbiwgVT46OmZyZWVidWYoVF9zbGlj
ZSoqIHApCnsKICAgIGlmKHApCiAgICB7CiAgICAgICAgQ09SQkE6OlVMb25nIG5uID0gQWxsb2Nh
dGVkKHApOwoKICAgICAgICBmb3IoQ09SQkE6OlVMb25nIGkgPSAwIDsgaSA8IG5uIDsgaSsrKQog
ICAgICAgICAgICBkZWxldGUgW10gKFQqKSBwW2ldOwoKICAgICAgICBGcmVlKHApOwogICAgfQp9
Cgp0ZW1wbGF0ZTxjbGFzcyBUX3NsaWNlLCBjbGFzcyBULCBDT1JCQTo6VUxvbmcgbiwgY2xhc3Mg
VT4KVmFyQXJyYXlTZXE8VF9zbGljZSwgVCwgbiwgVT46OlZhckFycmF5U2VxKCkKICAgIDogbWF4
XygwKSwgbGVuXygwKSwgcmVsXyh0cnVlKSwgZGF0YV8oMCkKewp9Cgp0ZW1wbGF0ZTxjbGFzcyBU
X3NsaWNlLCBjbGFzcyBULCBDT1JCQTo6VUxvbmcgbiwgY2xhc3MgVT4KVmFyQXJyYXlTZXE8VF9z
bGljZSwgVCwgbiwgVT46OlZhckFycmF5U2VxKENPUkJBOjpVTG9uZyBtKQogICAgOiBtYXhfKG0p
LCBsZW5fKDApLCByZWxfKHRydWUpCnsKICAgIGlmKG1heF8gPiAwKQogICAgICAgIGRhdGFfID0g
YWxsb2NidWYobWF4Xyk7CiAgICBlbHNlCiAgICAgICAgZGF0YV8gPSAwOwp9Cgp0ZW1wbGF0ZTxj
bGFzcyBUX3NsaWNlLCBjbGFzcyBULCBDT1JCQTo6VUxvbmcgbiwgY2xhc3MgVT4KVmFyQXJyYXlT
ZXE8VF9zbGljZSwgVCwgbiwgVT46OlZhckFycmF5U2VxKENPUkJBOjpVTG9uZyBtLCBDT1JCQTo6
VUxvbmcgbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
X3NsaWNlKiogZCwgQ09SQkE6OkJvb2xlYW4gcikKICAgIDogbWF4XyhtKSwgbGVuXyhsKSwgcmVs
XyhyKQp7CiAgICAoIChpbnQpKGxlbl8gPD0gbWF4XykgPyAodm9pZCkwIDogKE9COjpOQ0EoTkNB
U2VxTGVuR3JNYXgsICJsZW5fIDw9IG1heF8iLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1Rl
bXBsYXRlSS5oIiwgMTExMiksIGFib3J0KCkpICk7CiAgICBkYXRhXyA9IGQ7Cn0KCnRlbXBsYXRl
PGNsYXNzIFRfc2xpY2UsIGNsYXNzIFQsIENPUkJBOjpVTG9uZyBuLCBjbGFzcyBVPgpWYXJBcnJh
eVNlcTxUX3NsaWNlLCBULCBuLCBVPjo6ClZhckFycmF5U2VxKGNvbnN0IFZhckFycmF5U2VxPFRf
c2xpY2UsIFQsIG4sIFU+JiByKQogICAgOiBtYXhfKDApLCBsZW5fKDApLCByZWxfKHRydWUpLCBk
YXRhXygwKQp7CiAgICAqdGhpcyA9IHI7Cn0KCnRlbXBsYXRlPGNsYXNzIFRfc2xpY2UsIGNsYXNz
IFQsIENPUkJBOjpVTG9uZyBuLCBjbGFzcyBVPgpWYXJBcnJheVNlcTxUX3NsaWNlLCBULCBuLCBV
PiYKVmFyQXJyYXlTZXE8VF9zbGljZSwgVCwgbiwgVT46OgpvcGVyYXRvcj0oY29uc3QgVmFyQXJy
YXlTZXE8VF9zbGljZSwgVCwgbiwgVT4mIHIpCnsKICAgIGlmKHRoaXMgIT0gJnIpCiAgICB7CiAg
ICAgICAgaWYocmVsXykKICAgICAgICAgICAgZnJlZWJ1ZihkYXRhXyk7CgogICAgICAgIG1heF8g
PSByLm1heF87CiAgICAgICAgbGVuXyA9IHIubGVuXzsKICAgICAgICByZWxfID0gdHJ1ZTsKCiAg
ICAgICAgaWYobWF4XyA+IDApCiAgICAgICAgICAgIGRhdGFfID0gYWxsb2NidWYobWF4Xyk7CiAg
ICAgICAgZWxzZQogICAgICAgICAgICBkYXRhXyA9IDA7CgogICAgICAgIGZvcihDT1JCQTo6VUxv
bmcgaSA9IDAgOyBpIDwgbGVuXyA7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIFQqIHRvID0g
KFQqKSBkYXRhX1tpXTsKICAgICAgICAgICAgVCogZnJvbSA9IChUKikgci5kYXRhX1tpXTsKICAg
ICAgICAgICAgZm9yKENPUkJBOjpVTG9uZyBqID0gMCA7IGogPCBuIDsgaisrKQogICAgICAgICAg
ICAgICAgdG9bal0gPSBmcm9tW2pdOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gKnRoaXM7
Cn0KCnRlbXBsYXRlPGNsYXNzIFRfc2xpY2UsIGNsYXNzIFQsIENPUkJBOjpVTG9uZyBuLCBjbGFz
cyBVPgp2b2lkClZhckFycmF5U2VxPFRfc2xpY2UsIFQsIG4sIFU+OjpsZW5ndGgoQ09SQkE6OlVM
b25nIG5ld0xlbikKewogICAgaWYobmV3TGVuIDwgbGVuXyAmJiByZWxfKQogICAgewogICAgICAg
IGZvcihDT1JCQTo6VUxvbmcgaSA9IG5ld0xlbiA7IGkgPCBsZW5fIDsgaSsrKQogICAgICAgIHsK
ICAgICAgICAgICAgVCogcCA9IChUKikgZGF0YV9baV07CiAgICAgICAgICAgIGZvcihDT1JCQTo6
VUxvbmcgaiA9IDAgOyBqIDwgbiA7IGorKykKICAgICAgICAgICAgICAgIHBbal0gPSBUKCk7CiAg
ICAgICAgfQogICAgfQogICAgZWxzZSBpZihuZXdMZW4gPiBtYXhfKQogICAgewogICAgICAgIFRf
c2xpY2UqKiBvbGQgPSBkYXRhXzsKCiAgICAgICAgbWF4XyA9IG5ld0xlbiA+IG1heF8gKiAyID8g
bmV3TGVuIDogbWF4XyAqIDI7CiAgICAgICAgZGF0YV8gPSBhbGxvY2J1ZihtYXhfKTsKCiAgICAg
ICAgZm9yKENPUkJBOjpVTG9uZyBpID0gMCA7IGkgPCBsZW5fIDsgaSsrKQogICAgICAgIHsKICAg
ICAgICAgICAgVCogdG8gPSAoVCopIGRhdGFfW2ldOwogICAgICAgICAgICBUKiBmcm9tID0gKFQq
KSBvbGRbaV07CiAgICAgICAgICAgIGZvcihDT1JCQTo6VUxvbmcgaiA9IDAgOyBqIDwgbiA7IGor
KykKICAgICAgICAgICAgICAgIHRvW2pdID0gZnJvbVtqXTsKICAgICAgICB9CgogICAgICAgIGlm
KHJlbF8pCiAgICAgICAgICAgIGZyZWVidWYob2xkKTsKCiAgICAgICAgcmVsXyA9IHRydWU7CiAg
ICB9CgogICAgbGVuXyA9IG5ld0xlbjsKfQoKdGVtcGxhdGU8Y2xhc3MgVF9zbGljZSwgY2xhc3Mg
VCwgQ09SQkE6OlVMb25nIG4sIGNsYXNzIFU+CnZvaWQKVmFyQXJyYXlTZXE8VF9zbGljZSwgVCwg
biwgVT46OnJlcGxhY2UoQ09SQkE6OlVMb25nIG1heCwgQ09SQkE6OlVMb25nIGxlbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVF9zbGljZSoqIGRhdGEsIENPUkJBOjpC
b29sZWFuIHJlbGVhc2UpCnsKICAgIGlmKHJlbF8pCiAgICAgICAgZnJlZWJ1ZihkYXRhXyk7Cgog
ICAgbWF4XyA9IG1heDsKICAgIGxlbl8gPSBsZW47CiAgICByZWxfID0gcmVsZWFzZTsKCiAgICAo
IChpbnQpKGxlbl8gPD0gbWF4XykgPyAodm9pZCkwIDogKE9COjpOQ0EoTkNBU2VxTGVuR3JNYXgs
ICJsZW5fIDw9IG1heF8iLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlSS5oIiwg
MTIwNCksIGFib3J0KCkpICk7CiAgICBkYXRhXyA9IGRhdGE7Cn0KCnRlbXBsYXRlPGNsYXNzIFRf
c2xpY2UsIGNsYXNzIFQsIENPUkJBOjpVTG9uZyBuLCBjbGFzcyBVPgpUX3NsaWNlKioKVmFyQXJy
YXlTZXE8VF9zbGljZSwgVCwgbiwgVT46OmdldF9idWZmZXIoQ09SQkE6OkJvb2xlYW4gb3JwaGFu
KQp7CgoKCgogICAgaWYoIW9ycGhhbikKICAgICAgICByZXR1cm4gZGF0YV87CgoKCgoKICAgIGlm
KCFyZWxfKQogICAgICAgIHJldHVybiAwOwoKCgoKCiAgICBUX3NsaWNlKiogcmMgPSBkYXRhXzsK
CgoKCiAgICBtYXhfID0gMDsKICAgIGxlbl8gPSAwOwogICAgcmVsXyA9IHRydWU7CiAgICBkYXRh
XyA9IDA7CgogICAgcmV0dXJuIHJjOwp9CgoKCgp0ZW1wbGF0ZTxjbGFzcyBUX3NsaWNlLCBjbGFz
cyBULCBDT1JCQTo6VUxvbmcgbiwgQ09SQkE6OlVMb25nIG1heCwgY2xhc3MgVT4KVF9zbGljZSoq
CkJuZFZhckFycmF5U2VxPFRfc2xpY2UsIFQsIG4sIG1heCwgVT46OmFsbG9jYnVmKENPUkJBOjpV
TG9uZyBubikKewogICAgKCAoaW50KShubiA9PSBtYXgpID8gKHZvaWQpMCA6IChPQjo6TkNBKE5D
QVNlcUJvdW5kLCAibm4gPT0gbWF4IiwgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0
ZUkuaCIsIDEyNTApLCBhYm9ydCgpKSApOwoKICAgIFRfc2xpY2UqKiBwID0gKFRfc2xpY2UqKikg
QWxsb2Moc2l6ZW9mKFRfc2xpY2UqKSwgbm4pOwoKICAgIGZvcihDT1JCQTo6VUxvbmcgaSA9IDAg
OyBpIDwgbm4gOyBpKyspCiAgICAgICAgcFtpXSA9IChUX3NsaWNlKikgbmV3IFRbbl07CgogICAg
cmV0dXJuIHA7Cn0KCnRlbXBsYXRlPGNsYXNzIFRfc2xpY2UsIGNsYXNzIFQsIENPUkJBOjpVTG9u
ZyBuLCBDT1JCQTo6VUxvbmcgbWF4LCBjbGFzcyBVPgp2b2lkCkJuZFZhckFycmF5U2VxPFRfc2xp
Y2UsIFQsIG4sIG1heCwgVT46OmZyZWVidWYoVF9zbGljZSoqIHApCnsKICAgIGlmKHApCiAgICB7
CiAgICAgICAgQ09SQkE6OlVMb25nIG51bSA9IEFsbG9jYXRlZChwKTsKCiAgICAgICAgZm9yKENP
UkJBOjpVTG9uZyBpID0gMCA7IGkgPCBudW0gOyBpKyspCiAgICAgICAgICAgIGRlbGV0ZSBbXSAo
VCopIHBbaV07CgogICAgICAgIEZyZWUocCk7CiAgICB9Cn0KCnRlbXBsYXRlPGNsYXNzIFRfc2xp
Y2UsIGNsYXNzIFQsIENPUkJBOjpVTG9uZyBuLCBDT1JCQTo6VUxvbmcgbWF4LCBjbGFzcyBVPgpC
bmRWYXJBcnJheVNlcTxUX3NsaWNlLCBULCBuLCBtYXgsIFU+OjpCbmRWYXJBcnJheVNlcSgpCiAg
ICA6IGxlbl8oMCksIHJlbF8odHJ1ZSksIGRhdGFfKDApCnsKfQoKdGVtcGxhdGU8Y2xhc3MgVF9z
bGljZSwgY2xhc3MgVCwgQ09SQkE6OlVMb25nIG4sIENPUkJBOjpVTG9uZyBtYXgsIGNsYXNzIFU+
CkJuZFZhckFycmF5U2VxPFRfc2xpY2UsIFQsIG4sIG1heCwgVT46OgpCbmRWYXJBcnJheVNlcShD
T1JCQTo6VUxvbmcgbCwgVF9zbGljZSoqIGQsIENPUkJBOjpCb29sZWFuIHIpCiAgICA6IGxlbl8o
bCksIHJlbF8ocikKewogICAgKCAoaW50KShsZW5fIDw9IG1heCkgPyAodm9pZCkwIDogKE9COjpO
Q0EoTkNBU2VxTGVuR3JNYXgsICJsZW5fIDw9IG1heCIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUv
T0IvVGVtcGxhdGVJLmgiLCAxMjg2KSwgYWJvcnQoKSkgKTsKICAgIGRhdGFfID0gZDsKfQoKdGVt
cGxhdGU8Y2xhc3MgVF9zbGljZSwgY2xhc3MgVCwgQ09SQkE6OlVMb25nIG4sIENPUkJBOjpVTG9u
ZyBtYXgsIGNsYXNzIFU+CkJuZFZhckFycmF5U2VxPFRfc2xpY2UsIFQsIG4sIG1heCwgVT46OgpC
bmRWYXJBcnJheVNlcShjb25zdCBCbmRWYXJBcnJheVNlcTxUX3NsaWNlLCBULCBuLCBtYXgsIFU+
JiByKQogICAgOiBsZW5fKDApLCByZWxfKHRydWUpLCBkYXRhXygwKQp7CiAgICAqdGhpcyA9IHI7
Cn0KCnRlbXBsYXRlPGNsYXNzIFRfc2xpY2UsIGNsYXNzIFQsIENPUkJBOjpVTG9uZyBuLCBDT1JC
QTo6VUxvbmcgbWF4LCBjbGFzcyBVPgpCbmRWYXJBcnJheVNlcTxUX3NsaWNlLCBULCBuLCBtYXgs
IFU+JgpCbmRWYXJBcnJheVNlcTxUX3NsaWNlLCBULCBuLCBtYXgsIFU+OjoKb3BlcmF0b3I9KGNv
bnN0IEJuZFZhckFycmF5U2VxPFRfc2xpY2UsIFQsIG4sIG1heCwgVT4mIHIpCnsKICAgIGlmKHRo
aXMgIT0gJnIpCiAgICB7CiAgICAgICAgaWYocmVsXykKICAgICAgICAgICAgZnJlZWJ1ZihkYXRh
Xyk7CgogICAgICAgIGxlbl8gPSByLmxlbl87CiAgICAgICAgcmVsXyA9IHRydWU7CgogICAgICAg
IGRhdGFfID0gYWxsb2NidWYobWF4KTsKCiAgICAgICAgZm9yKENPUkJBOjpVTG9uZyBpID0gMCA7
IGkgPCBsZW5fIDsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgVCogdG8gPSAoVCopIGRhdGFf
W2ldOwogICAgICAgICAgICBUKiBmcm9tID0gKFQqKSByLmRhdGFfW2ldOwogICAgICAgICAgICBm
b3IoQ09SQkE6OlVMb25nIGogPSAwIDsgaiA8IG4gOyBqKyspCiAgICAgICAgICAgICAgICB0b1tq
XSA9IGZyb21bal07CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAqdGhpczsKfQoKdGVtcGxh
dGU8Y2xhc3MgVF9zbGljZSwgY2xhc3MgVCwgQ09SQkE6OlVMb25nIG4sIENPUkJBOjpVTG9uZyBt
YXgsIGNsYXNzIFU+CnZvaWQKQm5kVmFyQXJyYXlTZXE8VF9zbGljZSwgVCwgbiwgbWF4LCBVPjo6
bGVuZ3RoKENPUkJBOjpVTG9uZyBuZXdMZW4pCnsKICAgICggKGludCkobmV3TGVuIDw9IG1heCkg
PyAodm9pZCkwIDogKE9COjpOQ0EoTkNBU2VxTGVuR3JNYXgsICJuZXdMZW4gPD0gbWF4IiwgIi9o
b21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZUkuaCIsIDEzMjkpLCBhYm9ydCgpKSApOwoK
ICAgIGlmKCFkYXRhXykKICAgICAgICBkYXRhXyA9IGFsbG9jYnVmKG1heCk7CgogICAgaWYobmV3
TGVuIDwgbGVuXyAmJiByZWxfKQogICAgewogICAgICAgIGZvcihDT1JCQTo6VUxvbmcgaSA9IG5l
d0xlbiA7IGkgPCBsZW5fIDsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgVCogcCA9IChUKikg
ZGF0YV9baV07CiAgICAgICAgICAgIGZvcihDT1JCQTo6VUxvbmcgaiA9IDAgOyBqIDwgbiA7IGor
KykKICAgICAgICAgICAgICAgIHBbal0gPSBUKCk7CiAgICAgICAgfQogICAgfQoKICAgIGxlbl8g
PSBuZXdMZW47Cn0KCnRlbXBsYXRlPGNsYXNzIFRfc2xpY2UsIGNsYXNzIFQsIENPUkJBOjpVTG9u
ZyBuLCBDT1JCQTo6VUxvbmcgbWF4LCBjbGFzcyBVPgp2b2lkCkJuZFZhckFycmF5U2VxPFRfc2xp
Y2UsIFQsIG4sIG1heCwgVT46OnJlcGxhY2UoQ09SQkE6OlVMb25nIGxlbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUX3NsaWNlKiogZGF0YSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBy
ZWxlYXNlKQp7CiAgICBpZihyZWxfKQogICAgICAgIGZyZWVidWYoZGF0YV8pOwoKICAgIGxlbl8g
PSBsZW47CiAgICByZWxfID0gcmVsZWFzZTsKCiAgICAoIChpbnQpKGxlbl8gPD0gbWF4KSA/ICh2
b2lkKTAgOiAoT0I6Ok5DQShOQ0FTZXFMZW5Hck1heCwgImxlbl8gPD0gbWF4IiwgIi9ob21lL21h
dHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZUkuaCIsIDEzNTkpLCBhYm9ydCgpKSApOwogICAgZGF0
YV8gPSBkYXRhOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBUX3NsaWNlLCBjbGFzcyBULCBDT1JCQTo6VUxv
bmcgbiwgQ09SQkE6OlVMb25nIG1heCwgY2xhc3MgVT4KVF9zbGljZSoqCkJuZFZhckFycmF5U2Vx
PFRfc2xpY2UsIFQsIG4sIG1heCwgVT46OmdldF9idWZmZXIoQ09SQkE6OkJvb2xlYW4gb3JwaGFu
KQp7CiAgICBpZighZGF0YV8pCiAgICAgICAgZGF0YV8gPSBhbGxvY2J1ZihtYXgpOwoKCgoKCiAg
ICBpZighb3JwaGFuKQogICAgICAgIHJldHVybiBkYXRhXzsKCgoKCgogICAgaWYoIXJlbF8pCiAg
ICAgICAgcmV0dXJuIDA7CgoKCgoKICAgIFRfc2xpY2UqKiByYyA9IGRhdGFfOwoKCgoKICAgIGxl
bl8gPSAwOwogICAgcmVsXyA9IHRydWU7CiAgICBkYXRhXyA9IGFsbG9jYnVmKG1heCk7CgogICAg
cmV0dXJuIHJjOwp9CgoKCgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBVPgpUKioKT2JqU2VxPFQs
IFU+OjphbGxvY2J1ZihDT1JCQTo6VUxvbmcgbikKewogICAgVCoqIHAgPSAoVCoqKSBBbGxvYyhz
aXplb2YoVCopLCBuKTsKCiAgICBmb3IoQ09SQkE6OlVMb25nIGkgPSAwIDsgaSA8IG4gOyBpKysp
CiAgICAgICAgcFtpXSA9IDA7CgogICAgcmV0dXJuIHA7Cn0KCnRlbXBsYXRlPGNsYXNzIFQsIGNs
YXNzIFU+CnZvaWQKT2JqU2VxPFQsIFU+OjpmcmVlYnVmKFQqKiBwKQp7CiAgICBpZihwKQogICAg
ewogICAgICAgIENPUkJBOjpVTG9uZyBuID0gQWxsb2NhdGVkKHApOwoKICAgICAgICBmb3IoQ09S
QkE6OlVMb25nIGkgPSAwIDsgaSA8IG4gOyBpKyspCiAgICAgICAgICAgIE9CUmVsZWFzZShwW2ld
KTsKCiAgICAgICAgRnJlZShwKTsKICAgIH0KfQoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVT4K
T2JqU2VxPFQsIFU+OjpPYmpTZXEoKQogICAgOiBtYXhfKDApLCBsZW5fKDApLCByZWxfKHRydWUp
LCBkYXRhXygwKQp7Cn0KCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFU+Ck9ialNlcTxULCBVPjo6
T2JqU2VxKENPUkJBOjpVTG9uZyBtKQogICAgOiBtYXhfKG0pLCBsZW5fKDApLCByZWxfKHRydWUp
CnsKICAgIGlmKG1heF8gPiAwKQogICAgICAgIGRhdGFfID0gYWxsb2NidWYobWF4Xyk7CiAgICBl
bHNlCiAgICAgICAgZGF0YV8gPSAwOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBVPgpPYmpT
ZXE8VCwgVT46Ok9ialNlcShDT1JCQTo6VUxvbmcgbSwgQ09SQkE6OlVMb25nIGwsIFQqKiBkLCBD
T1JCQTo6Qm9vbGVhbiByKQogICAgOiBtYXhfKG0pLCBsZW5fKGwpLCByZWxfKHIpCnsKICAgICgg
KGludCkobGVuXyA8PSBtYXhfKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FTZXFMZW5Hck1heCwg
Imxlbl8gPD0gbWF4XyIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGVJLmgiLCAx
NDUwKSwgYWJvcnQoKSkgKTsKICAgIGRhdGFfID0gZDsKfQoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xh
c3MgVT4KT2JqU2VxPFQsIFU+OjpPYmpTZXEoY29uc3QgT2JqU2VxPFQsIFU+JiByKQogICAgOiBt
YXhfKDApLCBsZW5fKDApLCByZWxfKHRydWUpLCBkYXRhXygwKQp7CiAgICAqdGhpcyA9IHI7Cn0K
CnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFU+Ck9ialNlcTxULCBVPiYKT2JqU2VxPFQsIFU+Ojpv
cGVyYXRvcj0oY29uc3QgT2JqU2VxPFQsIFU+JiByKQp7CiAgICBpZih0aGlzICE9ICZyKQogICAg
ewogICAgICAgIGlmKHJlbF8pCiAgICAgICAgICAgIGZyZWVidWYoZGF0YV8pOwoKICAgICAgICBt
YXhfID0gci5tYXhfOwogICAgICAgIGxlbl8gPSByLmxlbl87CiAgICAgICAgcmVsXyA9IHRydWU7
CgogICAgICAgIGlmKG1heF8gPiAwKQogICAgICAgICAgICBkYXRhXyA9IGFsbG9jYnVmKG1heF8p
OwogICAgICAgIGVsc2UKICAgICAgICAgICAgZGF0YV8gPSAwOwoKICAgICAgICBmb3IoQ09SQkE6
OlVMb25nIGkgPSAwIDsgaSA8IGxlbl8gOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBkYXRh
X1tpXSA9IHIuZGF0YV9baV07CiAgICAgICAgICAgIE9CRHVwbGljYXRlKGRhdGFfW2ldKTsKICAg
ICAgICB9CiAgICB9CgogICAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFz
cyBVPgp2b2lkCk9ialNlcTxULCBVPjo6bGVuZ3RoKENPUkJBOjpVTG9uZyBuZXdMZW4pCnsKICAg
IGlmKG5ld0xlbiA8IGxlbl8gJiYgcmVsXykKICAgIHsKICAgICAgICBmb3IoQ09SQkE6OlVMb25n
IGkgPSBuZXdMZW4gOyBpIDwgbGVuXyA7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIFQqIG9s
ZCA9IGRhdGFfW2ldOwogICAgICAgICAgICBkYXRhX1tpXSA9IDA7CiAgICAgICAgICAgIE9CUmVs
ZWFzZShvbGQpOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYobmV3TGVuID4gbWF4XykKICAg
IHsKICAgICAgICBUKiogb2xkID0gZGF0YV87CgogICAgICAgIG1heF8gPSBuZXdMZW4gPiBtYXhf
ICogMiA/IG5ld0xlbiA6IG1heF8gKiAyOwogICAgICAgIGRhdGFfID0gYWxsb2NidWYobWF4Xyk7
CgogICAgICAgIGZvcihDT1JCQTo6VUxvbmcgaSA9IDAgOyBpIDwgbGVuXyA7IGkrKykKICAgICAg
ICB7CiAgICAgICAgICAgIGlmKHJlbF8pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGRh
dGFfW2ldID0gb2xkW2ldOwogICAgICAgICAgICAgICAgb2xkW2ldID0gMDsKICAgICAgICAgICAg
fQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGRhdGFfW2ld
ID0gb2xkW2ldOwogICAgICAgICAgICAgICAgT0JEdXBsaWNhdGUoZGF0YV9baV0pOwogICAgICAg
ICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZihyZWxfKQogICAgICAgICAgICBmcmVlYnVmKG9s
ZCk7CgogICAgICAgIHJlbF8gPSB0cnVlOwogICAgfQoKICAgIGxlbl8gPSBuZXdMZW47Cn0KCnRl
bXBsYXRlPGNsYXNzIFQsIGNsYXNzIFU+CnZvaWQKT2JqU2VxPFQsIFU+OjpyZXBsYWNlKENPUkJB
OjpVTG9uZyBtYXgsIENPUkJBOjpVTG9uZyBsZW4sIFQqKiBkYXRhLAogICAgICAgICAgICAgICAg
ICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKewogICAgaWYocmVsXykKICAgICAgICBmcmVl
YnVmKGRhdGFfKTsKCiAgICBtYXhfID0gbWF4OwogICAgbGVuXyA9IGxlbjsKICAgIHJlbF8gPSBy
ZWxlYXNlOwoKICAgICggKGludCkobGVuXyA8PSBtYXhfKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShO
Q0FTZXFMZW5Hck1heCwgImxlbl8gPD0gbWF4XyIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0Iv
VGVtcGxhdGVJLmgiLCAxNTQ0KSwgYWJvcnQoKSkgKTsKICAgIGRhdGFfID0gZGF0YTsKfQoKdGVt
cGxhdGU8Y2xhc3MgVCwgY2xhc3MgVT4KVCoqCk9ialNlcTxULCBVPjo6Z2V0X2J1ZmZlcihDT1JC
QTo6Qm9vbGVhbiBvcnBoYW4pCnsKCgoKCiAgICBpZighb3JwaGFuKQogICAgICAgIHJldHVybiBk
YXRhXzsKCgoKCgogICAgaWYoIXJlbF8pCiAgICAgICAgcmV0dXJuIDA7CgoKCgoKICAgIFQqKiBy
YyA9IGRhdGFfOwoKCgoKICAgIG1heF8gPSAwOwogICAgbGVuXyA9IDA7CiAgICByZWxfID0gdHJ1
ZTsKICAgIGRhdGFfID0gMDsKCiAgICByZXR1cm4gcmM7Cn0KCgoKCnRlbXBsYXRlPGNsYXNzIFQs
IENPUkJBOjpVTG9uZyBtYXgsIGNsYXNzIFU+ClQqKgpCbmRPYmpTZXE8VCwgbWF4LCBVPjo6YWxs
b2NidWYoQ09SQkE6OlVMb25nIG4pCnsKICAgICggKGludCkobiA9PSBtYXgpID8gKHZvaWQpMCA6
IChPQjo6TkNBKE5DQVNlcUJvdW5kLCAibiA9PSBtYXgiLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRl
L09CL1RlbXBsYXRlSS5oIiwgMTU5MCksIGFib3J0KCkpICk7CgogICAgVCoqIHAgPSAoVCoqKSBB
bGxvYyhzaXplb2YoVCopLCBuKTsKCiAgICBmb3IoQ09SQkE6OlVMb25nIGkgPSAwIDsgaSA8IG4g
OyBpKyspCiAgICAgICAgcFtpXSA9IDA7CgogICAgcmV0dXJuIHA7Cn0KCnRlbXBsYXRlPGNsYXNz
IFQsIENPUkJBOjpVTG9uZyBtYXgsIGNsYXNzIFU+CnZvaWQKQm5kT2JqU2VxPFQsIG1heCwgVT46
OmZyZWVidWYoVCoqIHApCnsKICAgIGlmKHApCiAgICB7CiAgICAgICAgQ09SQkE6OlVMb25nIG4g
PSBBbGxvY2F0ZWQocCk7CgogICAgICAgIGZvcihDT1JCQTo6VUxvbmcgaSA9IDAgOyBpIDwgbiA7
IGkrKykKICAgICAgICAgICAgT0JSZWxlYXNlKHBbaV0pOwoKICAgICAgICBGcmVlKHApOwogICAg
fQp9Cgp0ZW1wbGF0ZTxjbGFzcyBULCBDT1JCQTo6VUxvbmcgbWF4LCBjbGFzcyBVPgpCbmRPYmpT
ZXE8VCwgbWF4LCBVPjo6Qm5kT2JqU2VxKCkKICAgIDogbGVuXygwKSwgcmVsXyh0cnVlKSwgZGF0
YV8oMCkKewp9Cgp0ZW1wbGF0ZTxjbGFzcyBULCBDT1JCQTo6VUxvbmcgbWF4LCBjbGFzcyBVPgpC
bmRPYmpTZXE8VCwgbWF4LCBVPgo6OkJuZE9ialNlcShDT1JCQTo6VUxvbmcgbCwgVCoqIGQsIENP
UkJBOjpCb29sZWFuIHIpCiAgICA6IGxlbl8obCksIHJlbF8ocikKewogICAgKCAoaW50KShsZW5f
IDw9IG1heCkgPyAodm9pZCkwIDogKE9COjpOQ0EoTkNBU2VxTGVuR3JNYXgsICJsZW5fIDw9IG1h
eCIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGVJLmgiLCAxNjI2KSwgYWJvcnQo
KSkgKTsKICAgIGRhdGFfID0gZDsKfQoKdGVtcGxhdGU8Y2xhc3MgVCwgQ09SQkE6OlVMb25nIG1h
eCwgY2xhc3MgVT4KQm5kT2JqU2VxPFQsIG1heCwgVT4KOjpCbmRPYmpTZXEoY29uc3QgQm5kT2Jq
U2VxPFQsIG1heCwgVT4mIHIpCiAgICA6IGxlbl8oMCksIHJlbF8odHJ1ZSksIGRhdGFfKDApCnsK
ICAgICp0aGlzID0gcjsKfQoKdGVtcGxhdGU8Y2xhc3MgVCwgQ09SQkE6OlVMb25nIG1heCwgY2xh
c3MgVT4KQm5kT2JqU2VxPFQsIG1heCwgVT4mCkJuZE9ialNlcTxULCBtYXgsIFU+OjoKb3BlcmF0
b3I9KGNvbnN0IEJuZE9ialNlcTxULCBtYXgsIFU+JiByKQp7CiAgICBpZih0aGlzICE9ICZyKQog
ICAgewogICAgICAgIGlmKHJlbF8pCiAgICAgICAgICAgIGZyZWVidWYoZGF0YV8pOwoKICAgICAg
ICBsZW5fID0gci5sZW5fOwogICAgICAgIHJlbF8gPSB0cnVlOwoKICAgICAgICBkYXRhXyA9IGFs
bG9jYnVmKG1heCk7CgogICAgICAgIGZvcihDT1JCQTo6VUxvbmcgaSA9IDAgOyBpIDwgbGVuXyA7
IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGRhdGFfW2ldID0gci5kYXRhX1tpXTsKICAgICAg
ICAgICAgT0JEdXBsaWNhdGUoZGF0YV9baV0pOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4g
KnRoaXM7Cn0KCnRlbXBsYXRlPGNsYXNzIFQsIENPUkJBOjpVTG9uZyBtYXgsIGNsYXNzIFU+CnZv
aWQKQm5kT2JqU2VxPFQsIG1heCwgVT46Omxlbmd0aChDT1JCQTo6VUxvbmcgbmV3TGVuKQp7CiAg
ICAoIChpbnQpKG5ld0xlbiA8PSBtYXgpID8gKHZvaWQpMCA6IChPQjo6TkNBKE5DQVNlcUxlbkdy
TWF4LCAibmV3TGVuIDw9IG1heCIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGVJ
LmgiLCAxNjY3KSwgYWJvcnQoKSkgKTsKCiAgICBpZighZGF0YV8pCiAgICAgICAgZGF0YV8gPSBh
bGxvY2J1ZihtYXgpOwoKICAgIGlmKG5ld0xlbiA8IGxlbl8gJiYgcmVsXykKICAgIHsKICAgICAg
ICBmb3IoQ09SQkE6OlVMb25nIGkgPSBuZXdMZW4gOyBpIDwgbGVuXyA7IGkrKykKICAgICAgICB7
CiAgICAgICAgICAgIFQqIG9sZCA9IGRhdGFfW2ldOwogICAgICAgICAgICBkYXRhX1tpXSA9IDA7
CiAgICAgICAgICAgIE9CUmVsZWFzZShvbGQpOwogICAgICAgIH0KICAgIH0KCiAgICBsZW5fID0g
bmV3TGVuOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBULCBDT1JCQTo6VUxvbmcgbWF4LCBjbGFzcyBVPgp2
b2lkCkJuZE9ialNlcTxULCBtYXgsIFU+OjpyZXBsYWNlKENPUkJBOjpVTG9uZyBsZW4sIFQqKiBk
YXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNl
KQp7CiAgICBpZihyZWxfKQogICAgICAgIGZyZWVidWYoZGF0YV8pOwoKICAgIGxlbl8gPSBsZW47
CiAgICByZWxfID0gcmVsZWFzZTsKCiAgICAoIChpbnQpKGxlbl8gPD0gbWF4KSA/ICh2b2lkKTAg
OiAoT0I6Ok5DQShOQ0FTZXFMZW5Hck1heCwgImxlbl8gPD0gbWF4IiwgIi9ob21lL21hdHQvb2Iv
aW5jbHVkZS9PQi9UZW1wbGF0ZUkuaCIsIDE2OTYpLCBhYm9ydCgpKSApOwogICAgZGF0YV8gPSBk
YXRhOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBULCBDT1JCQTo6VUxvbmcgbWF4LCBjbGFzcyBVPgpUKioK
Qm5kT2JqU2VxPFQsIG1heCwgVT46OmdldF9idWZmZXIoQ09SQkE6OkJvb2xlYW4gb3JwaGFuKQp7
CiAgICBpZighZGF0YV8pCiAgICAgICAgZGF0YV8gPSBhbGxvY2J1ZihtYXgpOwoKCgoKCiAgICBp
Zighb3JwaGFuKQogICAgICAgIHJldHVybiBkYXRhXzsKCgoKCgogICAgaWYoIXJlbF8pCiAgICAg
ICAgcmV0dXJuIDA7CgoKCgoKICAgIFQqKiByYyA9IGRhdGFfOwoKCgoKICAgIGxlbl8gPSAwOwog
ICAgcmVsXyA9IHRydWU7CiAgICBkYXRhXyA9IGFsbG9jYnVmKG1heCk7CgogICAgcmV0dXJuIHJj
Owp9CgoKCgp0ZW1wbGF0ZTxjbGFzcyBVPgpTdHJTZXE8VT46OlN0clNlcSgpCiAgICA6IG1heF8o
MCksIGxlbl8oMCksIHJlbF8odHJ1ZSksIGRhdGFfKDApCnsKfQoKdGVtcGxhdGU8Y2xhc3MgVT4K
U3RyU2VxPFU+OjpTdHJTZXEoQ09SQkE6OlVMb25nIG0pCiAgICA6IG1heF8obSksIGxlbl8oMCks
IHJlbF8odHJ1ZSkKewogICAgaWYobWF4XyA+IDApCiAgICAgICAgZGF0YV8gPSBhbGxvY2J1Ziht
YXhfKTsKICAgIGVsc2UKICAgICAgICBkYXRhXyA9IDA7Cgp9Cgp0ZW1wbGF0ZTxjbGFzcyBVPgpT
dHJTZXE8VT46OlN0clNlcShDT1JCQTo6VUxvbmcgbSwgQ09SQkE6OlVMb25nIGwsIGNoYXIqKiBk
LCBDT1JCQTo6Qm9vbGVhbiByKQogICAgOiBtYXhfKG0pLCBsZW5fKGwpLCByZWxfKHIpCnsKICAg
ICggKGludCkobGVuXyA8PSBtYXhfKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FTZXFMZW5Hck1h
eCwgImxlbl8gPD0gbWF4XyIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGVJLmgi
LCAxNzYxKSwgYWJvcnQoKSkgKTsKICAgIGRhdGFfID0gZDsKfQoKdGVtcGxhdGU8Y2xhc3MgVT4K
U3RyU2VxPFU+OjpTdHJTZXEoY29uc3QgU3RyU2VxPFU+JiByKQogICAgOiBtYXhfKDApLCBsZW5f
KDApLCByZWxfKHRydWUpLCBkYXRhXygwKQp7CiAgICAqdGhpcyA9IHI7Cn0KCnRlbXBsYXRlPGNs
YXNzIFU+ClN0clNlcTxVPiYKU3RyU2VxPFU+OjpvcGVyYXRvcj0oY29uc3QgU3RyU2VxPFU+JiBy
KQp7CiAgICBpZih0aGlzICE9ICZyKQogICAgewogICAgICAgIGlmKHJlbF8pCiAgICAgICAgICAg
IGZyZWVidWYoZGF0YV8pOwoKICAgICAgICBtYXhfID0gci5tYXhfOwogICAgICAgIGxlbl8gPSBy
Lmxlbl87CiAgICAgICAgcmVsXyA9IHRydWU7CgogICAgICAgIGlmKG1heF8gPiAwKQogICAgICAg
ICAgICBkYXRhXyA9IGFsbG9jYnVmKG1heF8pOwogICAgICAgIGVsc2UKICAgICAgICAgICAgZGF0
YV8gPSAwOwoKICAgICAgICBmb3IoQ09SQkE6OlVMb25nIGkgPSAwIDsgaSA8IGxlbl8gOyBpKysp
CiAgICAgICAgICAgIGRhdGFfW2ldID0gQ09SQkE6OnN0cmluZ19kdXAoci5kYXRhX1tpXSk7CiAg
ICB9CgogICAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBVPgp2b2lkClN0clNlcTxV
Pjo6bGVuZ3RoKENPUkJBOjpVTG9uZyBuZXdMZW4pCnsKICAgIGlmKG5ld0xlbiA8IGxlbl8gJiYg
cmVsXykKICAgIHsKICAgICAgICBmb3IoQ09SQkE6OlVMb25nIGkgPSBuZXdMZW4gOyBpIDwgbGVu
XyA7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIENPUkJBOjpzdHJpbmdfZnJlZShkYXRhX1tp
XSk7CiAgICAgICAgICAgIGRhdGFfW2ldID0gT0I6OkVtcHR5U3RyaW5nOwogICAgICAgIH0KICAg
IH0KICAgIGVsc2UgaWYobWF4XyA8IG5ld0xlbikKICAgIHsKICAgICAgICBjaGFyKiogb2xkID0g
ZGF0YV87CgogICAgICAgIG1heF8gPSBuZXdMZW4gPiBtYXhfICogMiA/IG5ld0xlbiA6IG1heF8g
KiAyOwogICAgICAgIGRhdGFfID0gYWxsb2NidWYobWF4Xyk7CgogICAgICAgIGZvcihDT1JCQTo6
VUxvbmcgaSA9IDAgOyBpIDwgbGVuXyA7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGlmKHJl
bF8pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGRhdGFfW2ldID0gb2xkW2ldOwogICAg
ICAgICAgICAgICAgb2xkW2ldID0gT0I6OkVtcHR5U3RyaW5nOwogICAgICAgICAgICB9CiAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGRhdGFfW2ldID0gQ09SQkE6OnN0cmluZ19kdXAo
b2xkW2ldKTsKICAgICAgICB9CgogICAgICAgIGlmKHJlbF8pCiAgICAgICAgICAgIGZyZWVidWYo
b2xkKTsKCiAgICAgICAgcmVsXyA9IHRydWU7CiAgICB9CgoKCgoKCiAgICBsZW5fID0gbmV3TGVu
Owp9Cgp0ZW1wbGF0ZTxjbGFzcyBVPgp2b2lkClN0clNlcTxVPjo6cmVwbGFjZShDT1JCQTo6VUxv
bmcgbWF4LCBDT1JCQTo6VUxvbmcgbGVuLCBjaGFyKiogZGF0YSwKICAgICAgICAgICAgICAgICAg
IENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCnsKICAgIGlmKHJlbF8pCiAgICAgICAgZnJlZWJ1Zihk
YXRhXyk7CgogICAgbWF4XyA9IG1heDsKICAgIGxlbl8gPSBsZW47CiAgICByZWxfID0gcmVsZWFz
ZTsKCiAgICAoIChpbnQpKGxlbl8gPD0gbWF4XykgPyAodm9pZCkwIDogKE9COjpOQ0EoTkNBU2Vx
TGVuR3JNYXgsICJsZW5fIDw9IG1heF8iLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1RlbXBs
YXRlSS5oIiwgMTg1MyksIGFib3J0KCkpICk7CiAgICBkYXRhXyA9IGRhdGE7Cn0KCnRlbXBsYXRl
PGNsYXNzIFU+CmNoYXIqKgpTdHJTZXE8VT46OmdldF9idWZmZXIoQ09SQkE6OkJvb2xlYW4gb3Jw
aGFuKQp7CgoKCgogICAgaWYoIW9ycGhhbikKICAgICAgICByZXR1cm4gZGF0YV87CgoKCgoKICAg
IGlmKCFyZWxfKQogICAgICAgIHJldHVybiAwOwoKCgoKCiAgICBjaGFyKiogcmMgPSBkYXRhXzsK
CgoKCiAgICBtYXhfID0gMDsKICAgIGxlbl8gPSAwOwogICAgcmVsXyA9IHRydWU7CiAgICBkYXRh
XyA9IDA7CgogICAgcmV0dXJuIHJjOwp9CgoKCgp0ZW1wbGF0ZTxDT1JCQTo6VUxvbmcgbWF4LCBj
bGFzcyBVPgpjaGFyKioKQm5kU3RyU2VxPG1heCwgVT46OmFsbG9jYnVmKENPUkJBOjpVTG9uZyBu
KQp7CiAgICAoIChpbnQpKG4gPT0gbWF4KSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FTZXFCb3Vu
ZCwgIm4gPT0gbWF4IiwgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZUkuaCIsIDE4
OTkpLCBhYm9ydCgpKSApOwogICAgcmV0dXJuIE9COjpTdHJTZXFBbGxvY2J1ZihuKTsKfQoKdGVt
cGxhdGU8Q09SQkE6OlVMb25nIG1heCwgY2xhc3MgVT4KQm5kU3RyU2VxPG1heCwgVT46OkJuZFN0
clNlcSgpCiAgICA6IGxlbl8oMCksIHJlbF8odHJ1ZSksIGRhdGFfKDApCnsKfQoKdGVtcGxhdGU8
Q09SQkE6OlVMb25nIG1heCwgY2xhc3MgVT4KQm5kU3RyU2VxPG1heCwgVT46OkJuZFN0clNlcShD
T1JCQTo6VUxvbmcgbCwgY2hhcioqIGQsIENPUkJBOjpCb29sZWFuIHIpCiAgICA6IGxlbl8obCks
IHJlbF8ocikKewogICAgKCAoaW50KShsZW5fIDw9IG1heCkgPyAodm9pZCkwIDogKE9COjpOQ0Eo
TkNBU2VxTGVuR3JNYXgsICJsZW5fIDw9IG1heCIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0Iv
VGVtcGxhdGVJLmgiLCAxOTEzKSwgYWJvcnQoKSkgKTsKICAgIGRhdGFfID0gZDsKfQoKdGVtcGxh
dGU8Q09SQkE6OlVMb25nIG1heCwgY2xhc3MgVT4KQm5kU3RyU2VxPG1heCwgVT46OkJuZFN0clNl
cShjb25zdCBCbmRTdHJTZXE8bWF4LCBVPiYgcikKICAgIDogbGVuXygwKSwgcmVsXyh0cnVlKSwg
ZGF0YV8oMCkKewogICAgKnRoaXMgPSByOwp9Cgp0ZW1wbGF0ZTxDT1JCQTo6VUxvbmcgbWF4LCBj
bGFzcyBVPgpCbmRTdHJTZXE8bWF4LCBVPiYKQm5kU3RyU2VxPG1heCwgVT46Om9wZXJhdG9yPShj
b25zdCBCbmRTdHJTZXE8bWF4LCBVPiYgcikKewogICAgaWYodGhpcyAhPSAmcikKICAgIHsKICAg
ICAgICBpZihyZWxfKQogICAgICAgICAgICBmcmVlYnVmKGRhdGFfKTsKCiAgICAgICAgbGVuXyA9
IHIubGVuXzsKICAgICAgICByZWxfID0gdHJ1ZTsKCiAgICAgICAgZGF0YV8gPSBhbGxvY2J1Ziht
YXgpOwoKICAgICAgICBmb3IoQ09SQkE6OlVMb25nIGkgPSAwIDsgaSA8IGxlbl8gOyBpKyspCiAg
ICAgICAgICAgIGRhdGFfW2ldID0gQ09SQkE6OnN0cmluZ19kdXAoci5kYXRhX1tpXSk7CiAgICB9
CgogICAgcmV0dXJuICp0aGlzOwp9CgoKdGVtcGxhdGU8Q09SQkE6OlVMb25nIG1heCwgY2xhc3Mg
VT4Kdm9pZApCbmRTdHJTZXE8bWF4LCBVPjo6bGVuZ3RoKENPUkJBOjpVTG9uZyBuZXdMZW4pCnsK
ICAgICggKGludCkobmV3TGVuIDw9IG1heCkgPyAodm9pZCkwIDogKE9COjpOQ0EoTkNBU2VxTGVu
R3JNYXgsICJuZXdMZW4gPD0gbWF4IiwgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0
ZUkuaCIsIDE5NTApLCBhYm9ydCgpKSApOwoKICAgIGlmKCFkYXRhXykKICAgICAgICBkYXRhXyA9
IGFsbG9jYnVmKG1heCk7CgogICAgaWYobmV3TGVuIDwgbGVuXyAmJiByZWxfKQogICAgewogICAg
ICAgIGZvcihDT1JCQTo6VUxvbmcgaSA9IG5ld0xlbiA7IGkgPCBsZW5fIDsgaSsrKQogICAgICAg
IHsKICAgICAgICAgICAgQ09SQkE6OnN0cmluZ19mcmVlKGRhdGFfW2ldKTsKICAgICAgICAgICAg
ZGF0YV9baV0gPSBPQjo6RW1wdHlTdHJpbmc7CiAgICAgICAgfQogICAgfQoKCgoKCgogICAgbGVu
XyA9IG5ld0xlbjsKfQoKdGVtcGxhdGU8Q09SQkE6OlVMb25nIG1heCwgY2xhc3MgVT4Kdm9pZApC
bmRTdHJTZXE8bWF4LCBVPjo6cmVwbGFjZShDT1JCQTo6VUxvbmcgbGVuLCBjaGFyKiogZGF0YSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKewogICAg
aWYocmVsXykKICAgICAgICBmcmVlYnVmKGRhdGFfKTsKCiAgICBsZW5fID0gbGVuOwogICAgcmVs
XyA9IHJlbGVhc2U7CgogICAgKCAoaW50KShsZW5fIDw9IG1heCkgPyAodm9pZCkwIDogKE9COjpO
Q0EoTkNBU2VxTGVuR3JNYXgsICJsZW5fIDw9IG1heCIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUv
T0IvVGVtcGxhdGVJLmgiLCAxOTgzKSwgYWJvcnQoKSkgKTsKICAgIGRhdGFfID0gZGF0YTsKfQoK
dGVtcGxhdGU8Q09SQkE6OlVMb25nIG1heCwgY2xhc3MgVT4KY2hhcioqCkJuZFN0clNlcTxtYXgs
IFU+OjpnZXRfYnVmZmVyKENPUkJBOjpCb29sZWFuIG9ycGhhbikKewogICAgaWYoIWRhdGFfKQog
ICAgICAgIGRhdGFfID0gYWxsb2NidWYobWF4KTsKCgoKCgogICAgaWYoIW9ycGhhbikKICAgICAg
ICByZXR1cm4gZGF0YV87CgoKCgoKICAgIGlmKCFyZWxfKQogICAgICAgIHJldHVybiAwOwoKCgoK
CiAgICBjaGFyKiogcmMgPSBkYXRhXzsKCgoKCiAgICBsZW5fID0gMDsKICAgIHJlbF8gPSB0cnVl
OwogICAgZGF0YV8gPSBhbGxvY2J1ZihtYXgpOwoKICAgIHJldHVybiByYzsKfQoKCgoKdGVtcGxh
dGU8Y2xhc3MgVT4KV1N0clNlcTxVPjo6V1N0clNlcSgpCiAgICA6IG1heF8oMCksIGxlbl8oMCks
IHJlbF8odHJ1ZSksIGRhdGFfKDApCnsKfQoKdGVtcGxhdGU8Y2xhc3MgVT4KV1N0clNlcTxVPjo6
V1N0clNlcShDT1JCQTo6VUxvbmcgbSkKICAgIDogbWF4XyhtKSwgbGVuXygwKSwgcmVsXyh0cnVl
KQp7CiAgICBpZihtYXhfID4gMCkKICAgICAgICBkYXRhXyA9IGFsbG9jYnVmKG1heF8pOwogICAg
ZWxzZQogICAgICAgIGRhdGFfID0gMDsKCn0KCnRlbXBsYXRlPGNsYXNzIFU+CldTdHJTZXE8VT46
OldTdHJTZXEoQ09SQkE6OlVMb25nIG0sIENPUkJBOjpVTG9uZyBsLCB3Y2hhcl90KiogZCwKICAg
ICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gcikKICAgIDogbWF4XyhtKSwgbGVuXyhs
KSwgcmVsXyhyKQp7CiAgICAoIChpbnQpKGxlbl8gPD0gbWF4XykgPyAodm9pZCkwIDogKE9COjpO
Q0EoTkNBU2VxTGVuR3JNYXgsICJsZW5fIDw9IG1heF8iLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRl
L09CL1RlbXBsYXRlSS5oIiwgMjA0OSksIGFib3J0KCkpICk7CiAgICBkYXRhXyA9IGQ7Cn0KCnRl
bXBsYXRlPGNsYXNzIFU+CldTdHJTZXE8VT46OldTdHJTZXEoY29uc3QgV1N0clNlcTxVPiYgcikK
ICAgIDogbWF4XygwKSwgbGVuXygwKSwgcmVsXyh0cnVlKSwgZGF0YV8oMCkKewogICAgKnRoaXMg
PSByOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBVPgpXU3RyU2VxPFU+JgpXU3RyU2VxPFU+OjpvcGVyYXRv
cj0oY29uc3QgV1N0clNlcTxVPiYgcikKewogICAgaWYodGhpcyAhPSAmcikKICAgIHsKICAgICAg
ICBpZihyZWxfKQogICAgICAgICAgICBmcmVlYnVmKGRhdGFfKTsKCiAgICAgICAgbWF4XyA9IHIu
bWF4XzsKICAgICAgICBsZW5fID0gci5sZW5fOwogICAgICAgIHJlbF8gPSB0cnVlOwoKICAgICAg
ICBpZihtYXhfID4gMCkKICAgICAgICAgICAgZGF0YV8gPSBhbGxvY2J1ZihtYXhfKTsKICAgICAg
ICBlbHNlCiAgICAgICAgICAgIGRhdGFfID0gMDsKCiAgICAgICAgZm9yKENPUkJBOjpVTG9uZyBp
ID0gMCA7IGkgPCBsZW5fIDsgaSsrKQogICAgICAgICAgICBkYXRhX1tpXSA9IENPUkJBOjp3c3Ry
aW5nX2R1cChyLmRhdGFfW2ldKTsKICAgIH0KCiAgICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRl
PGNsYXNzIFU+CnZvaWQKV1N0clNlcTxVPjo6bGVuZ3RoKENPUkJBOjpVTG9uZyBuZXdMZW4pCnsK
ICAgIGlmKG5ld0xlbiA8IGxlbl8gJiYgcmVsXykKICAgIHsKICAgICAgICBmb3IoQ09SQkE6OlVM
b25nIGkgPSBuZXdMZW4gOyBpIDwgbGVuXyA7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIENP
UkJBOjp3c3RyaW5nX2ZyZWUoZGF0YV9baV0pOwogICAgICAgICAgICBkYXRhX1tpXSA9IE9COjpF
bXB0eVdTdHJpbmc7CiAgICAgICAgfQogICAgfQogICAgZWxzZSBpZihtYXhfIDwgbmV3TGVuKQog
ICAgewogICAgICAgIHdjaGFyX3QqKiBvbGQgPSBkYXRhXzsKCiAgICAgICAgbWF4XyA9IG5ld0xl
biA+IG1heF8gKiAyID8gbmV3TGVuIDogbWF4XyAqIDI7CiAgICAgICAgZGF0YV8gPSBhbGxvY2J1
ZihtYXhfKTsKCiAgICAgICAgZm9yKENPUkJBOjpVTG9uZyBpID0gMCA7IGkgPCBsZW5fIDsgaSsr
KQogICAgICAgIHsKICAgICAgICAgICAgaWYocmVsXykKICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgZGF0YV9baV0gPSBvbGRbaV07CiAgICAgICAgICAgICAgICBvbGRbaV0gPSBPQjo6RW1w
dHlXU3RyaW5nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
IGRhdGFfW2ldID0gQ09SQkE6OndzdHJpbmdfZHVwKG9sZFtpXSk7CiAgICAgICAgfQoKICAgICAg
ICBpZihyZWxfKQogICAgICAgICAgICBmcmVlYnVmKG9sZCk7CgogICAgICAgIHJlbF8gPSB0cnVl
OwogICAgfQoKCgoKCgogICAgbGVuXyA9IG5ld0xlbjsKfQoKdGVtcGxhdGU8Y2xhc3MgVT4Kdm9p
ZApXU3RyU2VxPFU+OjpyZXBsYWNlKENPUkJBOjpVTG9uZyBtYXgsIENPUkJBOjpVTG9uZyBsZW4s
IHdjaGFyX3QqKiBkYXRhLAogICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVh
c2UpCnsKICAgIGlmKHJlbF8pCiAgICAgICAgZnJlZWJ1ZihkYXRhXyk7CgogICAgbWF4XyA9IG1h
eDsKICAgIGxlbl8gPSBsZW47CiAgICByZWxfID0gcmVsZWFzZTsKCiAgICAoIChpbnQpKGxlbl8g
PD0gbWF4XykgPyAodm9pZCkwIDogKE9COjpOQ0EoTkNBU2VxTGVuR3JNYXgsICJsZW5fIDw9IG1h
eF8iLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlSS5oIiwgMjE0MSksIGFib3J0
KCkpICk7CiAgICBkYXRhXyA9IGRhdGE7Cn0KCnRlbXBsYXRlPGNsYXNzIFU+CndjaGFyX3QqKgpX
U3RyU2VxPFU+OjpnZXRfYnVmZmVyKENPUkJBOjpCb29sZWFuIG9ycGhhbikKewoKCgoKICAgIGlm
KCFvcnBoYW4pCiAgICAgICAgcmV0dXJuIGRhdGFfOwoKCgoKCiAgICBpZighcmVsXykKICAgICAg
ICByZXR1cm4gMDsKCgoKCgogICAgd2NoYXJfdCoqIHJjID0gZGF0YV87CgoKCgogICAgbWF4XyA9
IDA7CiAgICBsZW5fID0gMDsKICAgIHJlbF8gPSB0cnVlOwogICAgZGF0YV8gPSAwOwoKICAgIHJl
dHVybiByYzsKfQoKCgoKdGVtcGxhdGU8Q09SQkE6OlVMb25nIG1heCwgY2xhc3MgVT4Kd2NoYXJf
dCoqCkJuZFdTdHJTZXE8bWF4LCBVPjo6YWxsb2NidWYoQ09SQkE6OlVMb25nIG4pCnsKICAgICgg
KGludCkobiA9PSBtYXgpID8gKHZvaWQpMCA6IChPQjo6TkNBKE5DQVNlcUJvdW5kLCAibiA9PSBt
YXgiLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlSS5oIiwgMjE4NyksIGFib3J0
KCkpICk7CiAgICByZXR1cm4gT0I6OldTdHJTZXFBbGxvY2J1ZihuKTsKfQoKdGVtcGxhdGU8Q09S
QkE6OlVMb25nIG1heCwgY2xhc3MgVT4KQm5kV1N0clNlcTxtYXgsIFU+OjpCbmRXU3RyU2VxKCkK
ICAgIDogbGVuXygwKSwgcmVsXyh0cnVlKSwgZGF0YV8oMCkKewp9Cgp0ZW1wbGF0ZTxDT1JCQTo6
VUxvbmcgbWF4LCBjbGFzcyBVPgpCbmRXU3RyU2VxPG1heCwgVT46OkJuZFdTdHJTZXEoQ09SQkE6
OlVMb25nIGwsIHdjaGFyX3QqKiBkLCBDT1JCQTo6Qm9vbGVhbiByKQogICAgOiBsZW5fKGwpLCBy
ZWxfKHIpCnsKICAgICggKGludCkobGVuXyA8PSBtYXgpID8gKHZvaWQpMCA6IChPQjo6TkNBKE5D
QVNlcUxlbkdyTWF4LCAibGVuXyA8PSBtYXgiLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1Rl
bXBsYXRlSS5oIiwgMjIwMSksIGFib3J0KCkpICk7CiAgICBkYXRhXyA9IGQ7Cn0KCnRlbXBsYXRl
PENPUkJBOjpVTG9uZyBtYXgsIGNsYXNzIFU+CkJuZFdTdHJTZXE8bWF4LCBVPjo6Qm5kV1N0clNl
cShjb25zdCBCbmRXU3RyU2VxPG1heCwgVT4mIHIpCiAgICA6IGxlbl8oMCksIHJlbF8odHJ1ZSks
IGRhdGFfKDApCnsKICAgICp0aGlzID0gcjsKfQoKdGVtcGxhdGU8Q09SQkE6OlVMb25nIG1heCwg
Y2xhc3MgVT4KQm5kV1N0clNlcTxtYXgsIFU+JgpCbmRXU3RyU2VxPG1heCwgVT46Om9wZXJhdG9y
PShjb25zdCBCbmRXU3RyU2VxPG1heCwgVT4mIHIpCnsKICAgIGlmKHRoaXMgIT0gJnIpCiAgICB7
CiAgICAgICAgaWYocmVsXykKICAgICAgICAgICAgZnJlZWJ1ZihkYXRhXyk7CgogICAgICAgIGxl
bl8gPSByLmxlbl87CiAgICAgICAgcmVsXyA9IHRydWU7CgogICAgICAgIGRhdGFfID0gYWxsb2Ni
dWYobWF4KTsKCiAgICAgICAgZm9yKENPUkJBOjpVTG9uZyBpID0gMCA7IGkgPCBsZW5fIDsgaSsr
KQogICAgICAgICAgICBkYXRhX1tpXSA9IENPUkJBOjp3c3RyaW5nX2R1cChyLmRhdGFfW2ldKTsK
ICAgIH0KCiAgICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlPENPUkJBOjpVTG9uZyBtYXgsIGNs
YXNzIFU+CnZvaWQKQm5kV1N0clNlcTxtYXgsIFU+OjpsZW5ndGgoQ09SQkE6OlVMb25nIG5ld0xl
bikKewogICAgKCAoaW50KShuZXdMZW4gPD0gbWF4KSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FT
ZXFMZW5Hck1heCwgIm5ld0xlbiA8PSBtYXgiLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1Rl
bXBsYXRlSS5oIiwgMjIzNyksIGFib3J0KCkpICk7CgogICAgaWYoIWRhdGFfKQogICAgICAgIGRh
dGFfID0gYWxsb2NidWYobWF4KTsKCiAgICBpZihuZXdMZW4gPCBsZW5fICYmIHJlbF8pCiAgICB7
CiAgICAgICAgZm9yKENPUkJBOjpVTG9uZyBpID0gbmV3TGVuIDsgaSA8IGxlbl8gOyBpKyspCiAg
ICAgICAgewogICAgICAgICAgICBDT1JCQTo6d3N0cmluZ19mcmVlKGRhdGFfW2ldKTsKICAgICAg
ICAgICAgZGF0YV9baV0gPSBPQjo6RW1wdHlXU3RyaW5nOwogICAgICAgIH0KICAgIH0KCgoKCgoK
ICAgIGxlbl8gPSBuZXdMZW47Cn0KCnRlbXBsYXRlPENPUkJBOjpVTG9uZyBtYXgsIGNsYXNzIFU+
CnZvaWQKQm5kV1N0clNlcTxtYXgsIFU+OjpyZXBsYWNlKENPUkJBOjpVTG9uZyBsZW4sIHdjaGFy
X3QqKiBkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVs
ZWFzZSkKewogICAgaWYocmVsXykKICAgICAgICBmcmVlYnVmKGRhdGFfKTsKCiAgICBsZW5fID0g
bGVuOwogICAgcmVsXyA9IHJlbGVhc2U7CgogICAgKCAoaW50KShsZW5fIDw9IG1heCkgPyAodm9p
ZCkwIDogKE9COjpOQ0EoTkNBU2VxTGVuR3JNYXgsICJsZW5fIDw9IG1heCIsICIvaG9tZS9tYXR0
L29iL2luY2x1ZGUvT0IvVGVtcGxhdGVJLmgiLCAyMjcwKSwgYWJvcnQoKSkgKTsKICAgIGRhdGFf
ID0gZGF0YTsKfQoKdGVtcGxhdGU8Q09SQkE6OlVMb25nIG1heCwgY2xhc3MgVT4Kd2NoYXJfdCoq
CkJuZFdTdHJTZXE8bWF4LCBVPjo6Z2V0X2J1ZmZlcihDT1JCQTo6Qm9vbGVhbiBvcnBoYW4pCnsK
ICAgIGlmKCFkYXRhXykKICAgICAgICBkYXRhXyA9IGFsbG9jYnVmKG1heCk7CgoKCgoKICAgIGlm
KCFvcnBoYW4pCiAgICAgICAgcmV0dXJuIGRhdGFfOwoKCgoKCiAgICBpZighcmVsXykKICAgICAg
ICByZXR1cm4gMDsKCgoKCgogICAgd2NoYXJfdCoqIHJjID0gZGF0YV87CgoKCgogICAgbGVuXyA9
IDA7CiAgICByZWxfID0gdHJ1ZTsKICAgIGRhdGFfID0gYWxsb2NidWYobWF4KTsKCiAgICByZXR1
cm4gcmM7Cn0KCn0KIyAxOTY3ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGUuaCIg
MgojIDE1ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvUHJpbmNpcGFsX2Z3ZC5oIiAyCgpuYW1l
c3BhY2UgQ09SQkEKewoKY2xhc3MgUHJpbmNpcGFsOwp0eXBlZGVmIFByaW5jaXBhbCogUHJpbmNp
cGFsX3B0cjsKdHlwZWRlZiBQcmluY2lwYWxfcHRyIFByaW5jaXBhbFJlZjsKCn0KCnZvaWQgT0JE
dXBsaWNhdGUoQ09SQkE6OlByaW5jaXBhbF9wdHIpOwp2b2lkIE9CUmVsZWFzZShDT1JCQTo6UHJp
bmNpcGFsX3B0cik7CgpuYW1lc3BhY2UgQ09SQkEKewoKdHlwZWRlZiBPQjo6T2JqVmFyPCBQcmlu
Y2lwYWwgPiBQcmluY2lwYWxfdmFyOwoKfQojIDE1ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0Iv
QW55LmgiIDIKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvT2JqZWN0X2Z3ZC5oIiAxCiMg
MTQgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9PYmplY3RfZndkLmgiCiMgMSAiL2hvbWUvbWF0
dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlLmgiIDEKIyAxNSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRl
L09CL09iamVjdF9md2QuaCIgMgoKbmFtZXNwYWNlIENPUkJBCnsKCmNsYXNzIE9iamVjdDsKdHlw
ZWRlZiBPYmplY3QqIE9iamVjdF9wdHI7CnR5cGVkZWYgT2JqZWN0X3B0ciBPYmplY3RSZWY7Cgp9
CgpuYW1lc3BhY2UgT0IKewoKY2xhc3MgT2JqZWN0RmFjdG9yeTsKdHlwZWRlZiBPYmplY3RGYWN0
b3J5KiBPYmplY3RGYWN0b3J5X3B0cjsKCn0KCnZvaWQgT0JEdXBsaWNhdGUoQ09SQkE6Ok9iamVj
dF9wdHIpOwp2b2lkIE9CUmVsZWFzZShDT1JCQTo6T2JqZWN0X3B0cik7Cgp2b2lkIE9CRHVwbGlj
YXRlKE9COjpPYmplY3RGYWN0b3J5X3B0cik7CnZvaWQgT0JSZWxlYXNlKE9COjpPYmplY3RGYWN0
b3J5X3B0cik7CgpuYW1lc3BhY2UgQ09SQkEKewoKdHlwZWRlZiBPQjo6T2JqVmFyPCBPYmplY3Qg
PiBPYmplY3RfdmFyOwp0eXBlZGVmIE9COjpPYmpPdXQ8IE9iamVjdCA+IE9iamVjdF9vdXQ7Cgp9
CgpuYW1lc3BhY2UgT0IKewoKdHlwZWRlZiBPQjo6T2JqVmFyPCBPYmplY3RGYWN0b3J5ID4gT2Jq
ZWN0RmFjdG9yeV92YXI7CnR5cGVkZWYgT0I6Ok9iak91dDwgT2JqZWN0RmFjdG9yeSA+IE9iamVj
dEZhY3Rvcnlfb3V0OwoKfQojIDE2ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvQW55LmgiIDIK
IyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvQWJzdHJhY3RCYXNlX2Z3ZC5oIiAxCiMgMTQg
Ii9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9BYnN0cmFjdEJhc2VfZndkLmgiCiMgMSAiL2hvbWUv
bWF0dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlLmgiIDEKIyAxNSAiL2hvbWUvbWF0dC9vYi9pbmNs
dWRlL09CL0Fic3RyYWN0QmFzZV9md2QuaCIgMgoKbmFtZXNwYWNlIENPUkJBCnsKCmNsYXNzIEFi
c3RyYWN0QmFzZTsKdHlwZWRlZiBBYnN0cmFjdEJhc2UqIEFic3RyYWN0QmFzZV9wdHI7Cgp9Cgp2
b2lkIE9CUmVsZWFzZShDT1JCQTo6QWJzdHJhY3RCYXNlX3B0cik7CnZvaWQgT0JEdXBsaWNhdGUo
Q09SQkE6OkFic3RyYWN0QmFzZV9wdHIpOwoKbmFtZXNwYWNlIENPUkJBCnsKCnR5cGVkZWYgT0I6
Ok9ialZhcjwgQWJzdHJhY3RCYXNlID4gQWJzdHJhY3RCYXNlX3ZhcjsKdHlwZWRlZiBPQjo6T2Jq
T3V0PCBBYnN0cmFjdEJhc2UgPiBBYnN0cmFjdEJhc2Vfb3V0OwoKfQojIDE3ICIvaG9tZS9tYXR0
L29iL2luY2x1ZGUvT0IvQW55LmgiIDIKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVmFs
dWVCYXNlX2Z3ZC5oIiAxCiMgMTQgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9WYWx1ZUJhc2Vf
ZndkLmgiCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlLmgiIDEKIyAxNSAi
L2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1ZhbHVlQmFzZV9md2QuaCIgMgoKbmFtZXNwYWNlIENP
UkJBCnsKCmNsYXNzIFZhbHVlQmFzZTsKCn0KCnZvaWQgT0JSZWxlYXNlKENPUkJBOjpWYWx1ZUJh
c2UqKTsKdm9pZCBPQkR1cGxpY2F0ZShDT1JCQTo6VmFsdWVCYXNlKik7Cgp2b2lkIE9CTWFyc2hh
bChDT1JCQTo6VmFsdWVCYXNlKiwgT0I6Ok91dHB1dFN0cmVhbUltcGwqKTsKdm9pZCBPQlVubWFy
c2hhbChDT1JCQTo6VmFsdWVCYXNlKiYsIE9COjpJbnB1dFN0cmVhbUltcGwqKTsKCm5hbWVzcGFj
ZSBDT1JCQQp7Cgp0eXBlZGVmIE9COjpPYmpWYXI8IFZhbHVlQmFzZSA+IFZhbHVlQmFzZV92YXI7
CnR5cGVkZWYgT0I6Ok9iak91dDwgVmFsdWVCYXNlID4gVmFsdWVCYXNlX291dDsKCn0KIyAxOCAi
L2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0FueS5oIiAyCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNs
dWRlL09CL09SQkluc3RhbmNlX2Z3ZC5oIiAxCiMgMTQgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9P
Qi9PUkJJbnN0YW5jZV9md2QuaCIKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxh
dGUuaCIgMQojIDE1ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvT1JCSW5zdGFuY2VfZndkLmgi
IDIKCm5hbWVzcGFjZSBPQgp7CgpjbGFzcyBPUkJJbnN0YW5jZTsKdHlwZWRlZiBPUkJJbnN0YW5j
ZSogT1JCSW5zdGFuY2VfcHRyOwp0eXBlZGVmIE9SQkluc3RhbmNlX3B0ciBPUkJJbnN0YW5jZVJl
ZjsKCn0KCnZvaWQgT0JEdXBsaWNhdGUoT0I6Ok9SQkluc3RhbmNlX3B0cik7CnZvaWQgT0JSZWxl
YXNlKE9COjpPUkJJbnN0YW5jZV9wdHIpOwoKbmFtZXNwYWNlIE9CCnsKCnR5cGVkZWYgT0I6Ok9i
alZhcjwgT1JCSW5zdGFuY2UgPiBPUkJJbnN0YW5jZV92YXI7CnR5cGVkZWYgT0I6Ok9iak91dDwg
T1JCSW5zdGFuY2UgPiBPUkJJbnN0YW5jZV9vdXQ7Cgp9CiMgMTkgIi9ob21lL21hdHQvb2IvaW5j
bHVkZS9PQi9BbnkuaCIgMgojIDEgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UeXBlQ29kZV9m
d2QuaCIgMQojIDE0ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVHlwZUNvZGVfZndkLmgiCiMg
MSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlLmgiIDEKIyAxNSAiL2hvbWUvbWF0
dC9vYi9pbmNsdWRlL09CL1R5cGVDb2RlX2Z3ZC5oIiAyCgpuYW1lc3BhY2UgQ09SQkEKewoKY2xh
c3MgVHlwZUNvZGU7CnR5cGVkZWYgVHlwZUNvZGUqIFR5cGVDb2RlX3B0cjsKdHlwZWRlZiBUeXBl
Q29kZV9wdHIgVHlwZUNvZGVSZWY7Cgp9Cgp2b2lkIE9CRHVwbGljYXRlKENPUkJBOjpUeXBlQ29k
ZV9wdHIpOwp2b2lkIE9CUmVsZWFzZShDT1JCQTo6VHlwZUNvZGVfcHRyKTsKCm5hbWVzcGFjZSBD
T1JCQQp7Cgp0eXBlZGVmIE9COjpPYmpWYXI8IFR5cGVDb2RlID4gVHlwZUNvZGVfdmFyOwp0eXBl
ZGVmIE9COjpPYmpPdXQ8IFR5cGVDb2RlID4gVHlwZUNvZGVfb3V0OwoKfQojIDIwICIvaG9tZS9t
YXR0L29iL2luY2x1ZGUvT0IvQW55LmgiIDIKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0Iv
U3RyZWFtX2Z3ZC5oIiAxCiMgMTQgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9TdHJlYW1fZndk
LmgiCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlLmgiIDEKIyAxNSAiL2hv
bWUvbWF0dC9vYi9pbmNsdWRlL09CL1N0cmVhbV9md2QuaCIgMgoKbmFtZXNwYWNlIE9CCnsKCmNs
YXNzIElucHV0U3RyZWFtOwp0eXBlZGVmIElucHV0U3RyZWFtKiBJbnB1dFN0cmVhbV9wdHI7Cgpj
bGFzcyBPdXRwdXRTdHJlYW07CnR5cGVkZWYgT3V0cHV0U3RyZWFtKiBPdXRwdXRTdHJlYW1fcHRy
OwoKfQoKdm9pZCBPQkR1cGxpY2F0ZShPQjo6SW5wdXRTdHJlYW1fcHRyKTsKdm9pZCBPQlJlbGVh
c2UoT0I6OklucHV0U3RyZWFtX3B0cik7Cgp2b2lkIE9CRHVwbGljYXRlKE9COjpPdXRwdXRTdHJl
YW1fcHRyKTsKdm9pZCBPQlJlbGVhc2UoT0I6Ok91dHB1dFN0cmVhbV9wdHIpOwoKbmFtZXNwYWNl
IE9CCnsKCnR5cGVkZWYgT0I6Ok9ialZhcjwgSW5wdXRTdHJlYW0gPiBJbnB1dFN0cmVhbV92YXI7
CnR5cGVkZWYgT0I6Ok9iak91dDwgSW5wdXRTdHJlYW0gPiBJbnB1dFN0cmVhbV9vdXQ7Cgp0eXBl
ZGVmIE9COjpPYmpWYXI8IE91dHB1dFN0cmVhbSA+IE91dHB1dFN0cmVhbV92YXI7CnR5cGVkZWYg
T0I6Ok9iak91dDwgT3V0cHV0U3RyZWFtID4gT3V0cHV0U3RyZWFtX291dDsKCn0KIyAyMSAiL2hv
bWUvbWF0dC9vYi9pbmNsdWRlL09CL0FueS5oIiAyCgojIDEgIi9ob21lL21hdHQvb2IvaW5jbHVk
ZS9PQi9GaXhlZC5oIiAxCiMgMTQgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9GaXhlZC5oIgoj
IDEgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9CYXNpYy5oIiAxCiMgMTUgIi9ob21lL21hdHQv
b2IvaW5jbHVkZS9PQi9GaXhlZC5oIiAyCgpuYW1lc3BhY2UgQ09SQkEKewoKY2xhc3MgRml4ZWQK
ewoKCgogICAgdm9pZCBmcm9tTG9uZ0xvbmcoTG9uZ0xvbmcpOwogICAgdm9pZCBmcm9tVUxvbmdM
b25nKFVMb25nTG9uZywgU2hvcnQgPSAxKTsKICAgIHZvaWQgZnJvbVN0cmluZyhjb25zdCBjaGFy
Kik7CgoKCgogICAgc3RhdGljIHZvaWQgbXVsMTAoRml4ZWQmLCBVTG9uZyk7CiAgICBzdGF0aWMg
dm9pZCBkaXYxMChGaXhlZCYsIFVMb25nKTsKCnB1YmxpYzoKCgoKICAgIE9jdGV0IHZhbHVlX1s2
NF07CgoKCgogICAgU2hvcnQgc2lnbnVtXzsKCgoKCiAgICBVU2hvcnQgc2NhbGVfOwoKcHVibGlj
OgoKCgogICAgRml4ZWQoaW50IHZhbCA9IDApIHsgZnJvbUxvbmdMb25nKHZhbCk7IH0KICAgIEZp
eGVkKHVuc2lnbmVkIGludCB2YWwpIHsgZnJvbVVMb25nTG9uZyh2YWwpOyB9CiAgICBGaXhlZChM
b25nIHZhbCkgeyBmcm9tTG9uZ0xvbmcodmFsKTsgfQoKCgogICAgRml4ZWQoVUxvbmcgdmFsKSB7
IGZyb21VTG9uZ0xvbmcodmFsKTsgfQogICAgRml4ZWQoTG9uZ0xvbmcgdmFsKSB7IGZyb21Mb25n
TG9uZyh2YWwpOyB9CiAgICBGaXhlZChVTG9uZ0xvbmcgdmFsKSB7IGZyb21VTG9uZ0xvbmcodmFs
KTsgfQogICAgRml4ZWQoRG91YmxlKTsKICAgIEZpeGVkKExvbmdEb3VibGUpOwogICAgRml4ZWQo
Y29uc3QgRml4ZWQmKTsKICAgIEZpeGVkKGNvbnN0IGNoYXIqIHZhbCkgeyBmcm9tU3RyaW5nKHZh
bCk7IH0KICAgIH5GaXhlZCgpIHsgfTsKCgoKCiAgICBGaXhlZChjb25zdCBGaXhlZCYsIFVTaG9y
dCk7CgoKICAgIG9wZXJhdG9yIExvbmdMb25nKCkgY29uc3Q7CiAgICBvcGVyYXRvciBMb25nRG91
YmxlKCkgY29uc3Q7CiAgICBGaXhlZCByb3VuZChVU2hvcnQpIGNvbnN0OwogICAgRml4ZWQgdHJ1
bmNhdGUoVVNob3J0KSBjb25zdDsKCgogICAgRml4ZWQmIG9wZXJhdG9yPShjb25zdCBGaXhlZCYp
OwogICAgRml4ZWQmIG9wZXJhdG9yKz0oY29uc3QgRml4ZWQmKTsKICAgIEZpeGVkJiBvcGVyYXRv
ci09KGNvbnN0IEZpeGVkJik7CiAgICBGaXhlZCYgb3BlcmF0b3IqPShjb25zdCBGaXhlZCYpOwog
ICAgRml4ZWQmIG9wZXJhdG9yLz0oY29uc3QgRml4ZWQmKTsKCiAgICBGaXhlZCYgb3BlcmF0b3Ir
KygpOwogICAgRml4ZWQgb3BlcmF0b3IrKyhpbnQpOwogICAgRml4ZWQmIG9wZXJhdG9yLS0oKTsK
ICAgIEZpeGVkIG9wZXJhdG9yLS0oaW50KTsKICAgIEZpeGVkIG9wZXJhdG9yKygpIGNvbnN0Owog
ICAgRml4ZWQgb3BlcmF0b3ItKCkgY29uc3Q7CiAgICBCb29sZWFuIG9wZXJhdG9yISgpIGNvbnN0
OwoKICAgIFVTaG9ydCBmaXhlZF9kaWdpdHMoKSBjb25zdDsKICAgIFVTaG9ydCBmaXhlZF9zY2Fs
ZSgpIGNvbnN0OwojIDEwNSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0ZpeGVkLmgiCiAgICBG
aXhlZCBhYnMoKSBjb25zdDsKCgoKCiAgICBTaG9ydCBzaWdudW0oKSBjb25zdDsKCgoKCiAgICBG
aXhlZCBzZXRTY2FsZShVU2hvcnQpIGNvbnN0OwoKCgoKICAgIEZpeGVkIG1vdmVQb2ludExlZnQo
U2hvcnQpIGNvbnN0OwogICAgRml4ZWQgbW92ZVBvaW50UmlnaHQoU2hvcnQpIGNvbnN0OwoKICAg
IGNoYXIqIHRvU3RyaW5nKCkgY29uc3Q7CgoKCgogICAgc3RhdGljIENPUkJBOjpGaXhlZCBvcEFk
ZChjb25zdCBDT1JCQTo6Rml4ZWQmLCBjb25zdCBDT1JCQTo6Rml4ZWQmKTsKICAgIHN0YXRpYyBD
T1JCQTo6Rml4ZWQgb3BTdWIoY29uc3QgQ09SQkE6OkZpeGVkJiwgY29uc3QgQ09SQkE6OkZpeGVk
Jik7CiAgICBzdGF0aWMgQ09SQkE6OkZpeGVkIG9wTXVsKGNvbnN0IENPUkJBOjpGaXhlZCYsIGNv
bnN0IENPUkJBOjpGaXhlZCYpOwogICAgc3RhdGljIENPUkJBOjpGaXhlZCBvcERpdihjb25zdCBD
T1JCQTo6Rml4ZWQmLCBjb25zdCBDT1JCQTo6Rml4ZWQmKTsKCiAgICBzdGF0aWMgQ09SQkE6OkJv
b2xlYW4gb3BHdChjb25zdCBDT1JCQTo6Rml4ZWQmLCBjb25zdCBDT1JCQTo6Rml4ZWQmKTsKfTsK
CnR5cGVkZWYgRml4ZWQmIEZpeGVkX291dDsKCn0KCnN0ZDo6aXN0cmVhbSYgb3BlcmF0b3I+Pihz
dGQ6OmlzdHJlYW0mLCBDT1JCQTo6Rml4ZWQmKTsKc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0
ZDo6b3N0cmVhbSYsIGNvbnN0IENPUkJBOjpGaXhlZCYpOwoKQ09SQkE6OkZpeGVkIG9wZXJhdG9y
Kyhjb25zdCBDT1JCQTo6Rml4ZWQmLCBjb25zdCBDT1JCQTo6Rml4ZWQmKTsKQ09SQkE6OkZpeGVk
IG9wZXJhdG9yLShjb25zdCBDT1JCQTo6Rml4ZWQmLCBjb25zdCBDT1JCQTo6Rml4ZWQmKTsKQ09S
QkE6OkZpeGVkIG9wZXJhdG9yKihjb25zdCBDT1JCQTo6Rml4ZWQmLCBjb25zdCBDT1JCQTo6Rml4
ZWQmKTsKQ09SQkE6OkZpeGVkIG9wZXJhdG9yLyhjb25zdCBDT1JCQTo6Rml4ZWQmLCBjb25zdCBD
T1JCQTo6Rml4ZWQmKTsKCkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPihjb25zdCBDT1JCQTo6Rml4
ZWQmLCBjb25zdCBDT1JCQTo6Rml4ZWQmKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8KGNvbnN0
IENPUkJBOjpGaXhlZCYsIGNvbnN0IENPUkJBOjpGaXhlZCYpOwpDT1JCQTo6Qm9vbGVhbiBvcGVy
YXRvcj49KGNvbnN0IENPUkJBOjpGaXhlZCYsIGNvbnN0IENPUkJBOjpGaXhlZCYpOwpDT1JCQTo6
Qm9vbGVhbiBvcGVyYXRvcjw9KGNvbnN0IENPUkJBOjpGaXhlZCYsIGNvbnN0IENPUkJBOjpGaXhl
ZCYpOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj09KGNvbnN0IENPUkJBOjpGaXhlZCYsIGNvbnN0
IENPUkJBOjpGaXhlZCYpOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvciE9KGNvbnN0IENPUkJBOjpG
aXhlZCYsIGNvbnN0IENPUkJBOjpGaXhlZCYpOwojIDIzICIvaG9tZS9tYXR0L29iL2luY2x1ZGUv
T0IvQW55LmgiIDIKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvRXhjZXB0LmgiIDEKIyAx
NCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0V4Y2VwdC5oIgojIDEgIi9ob21lL21hdHQvb2Iv
aW5jbHVkZS9PQi9SZWZDb3VudGVkX2Z3ZC5oIiAxCiMgMTQgIi9ob21lL21hdHQvb2IvaW5jbHVk
ZS9PQi9SZWZDb3VudGVkX2Z3ZC5oIgojIDEgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1w
bGF0ZS5oIiAxCiMgMTUgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9SZWZDb3VudGVkX2Z3ZC5o
IiAyCgpuYW1lc3BhY2UgT0IKewoKY2xhc3MgUmVmQ291bnRJT1I7CnR5cGVkZWYgUmVmQ291bnRJ
T1IqIFJlZkNvdW50SU9SX3B0cjsKCmNsYXNzIFJlZkNvdW50UG9saWN5TGlzdDsKdHlwZWRlZiBS
ZWZDb3VudFBvbGljeUxpc3QqIFJlZkNvdW50UG9saWN5TGlzdF9wdHI7CgpjbGFzcyBSZWZDb3Vu
dFByb2ZpbGVJbmZvOwp0eXBlZGVmIFJlZkNvdW50UHJvZmlsZUluZm8qIFJlZkNvdW50UHJvZmls
ZUluZm9fcHRyOwoKfQoKdm9pZCBPQkR1cGxpY2F0ZShPQjo6UmVmQ291bnRJT1JfcHRyKTsKdm9p
ZCBPQlJlbGVhc2UoT0I6OlJlZkNvdW50SU9SX3B0cik7Cgp2b2lkIE9CRHVwbGljYXRlKE9COjpS
ZWZDb3VudFBvbGljeUxpc3RfcHRyKTsKdm9pZCBPQlJlbGVhc2UoT0I6OlJlZkNvdW50UG9saWN5
TGlzdF9wdHIpOwoKdm9pZCBPQkR1cGxpY2F0ZShPQjo6UmVmQ291bnRQcm9maWxlSW5mb19wdHIp
Owp2b2lkIE9CUmVsZWFzZShPQjo6UmVmQ291bnRQcm9maWxlSW5mb19wdHIpOwoKbmFtZXNwYWNl
IE9CCnsKCnR5cGVkZWYgT0I6Ok9ialZhcjwgUmVmQ291bnRJT1IgPiBSZWZDb3VudElPUl92YXI7
CnR5cGVkZWYgT0I6Ok9iak91dDwgUmVmQ291bnRJT1IgPiBSZWZDb3VudElPUl9vdXQ7Cgp0eXBl
ZGVmIE9COjpPYmpWYXI8IFJlZkNvdW50UG9saWN5TGlzdCA+IFJlZkNvdW50UG9saWN5TGlzdF92
YXI7CnR5cGVkZWYgT0I6Ok9iak91dDwgUmVmQ291bnRQb2xpY3lMaXN0ID4gUmVmQ291bnRQb2xp
Y3lMaXN0X291dDsKCnR5cGVkZWYgT0I6Ok9ialZhcjwgUmVmQ291bnRQcm9maWxlSW5mbyA+IFJl
ZkNvdW50UHJvZmlsZUluZm9fdmFyOwp0eXBlZGVmIE9COjpPYmpPdXQ8IFJlZkNvdW50UHJvZmls
ZUluZm8gPiBSZWZDb3VudFByb2ZpbGVJbmZvX291dDsKCn0KIyAxNSAiL2hvbWUvbWF0dC9vYi9p
bmNsdWRlL09CL0V4Y2VwdC5oIiAyCgojIDEgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9CYXNp
Yy5oIiAxCiMgMTcgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9FeGNlcHQuaCIgMgojIDEgIi9o
b21lL21hdHQvb2IvaW5jbHVkZS9PQi9GaXhlZC5oIiAxCiMgMTggIi9ob21lL21hdHQvb2IvaW5j
bHVkZS9PQi9FeGNlcHQuaCIgMgojIDEgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9BbnlEZWNs
YXJhdGlvbi5oIiAxCiMgMTQgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9BbnlEZWNsYXJhdGlv
bi5oIgpuYW1lc3BhY2UgT0IKewoKdGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIFZhclZhcjsKdGVt
cGxhdGUgPGNsYXNzIFQ+IGNsYXNzIFZhck91dDsKCn0KCm5hbWVzcGFjZSBDT1JCQQp7CgpjbGFz
cyBBbnk7Cgp0eXBlZGVmIE9COjpWYXJWYXI8IEFueSA+IEFueV92YXI7CnR5cGVkZWYgT0I6OlZh
ck91dDwgQW55ID4gQW55X291dDsKCn0KIyAxOSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0V4
Y2VwdC5oIiAyCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1R5cGVDb2RlQ29uc3QuaCIg
MQojIDE0ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVHlwZUNvZGVDb25zdC5oIgojIDEgIi9o
b21lL21hdHQvb2IvaW5jbHVkZS9PQi9UeXBlQ29kZV9md2QuaCIgMQojIDE1ICIvaG9tZS9tYXR0
L29iL2luY2x1ZGUvT0IvVHlwZUNvZGVDb25zdC5oIiAyCgpuYW1lc3BhY2UgT0IKewoKY2xhc3Mg
VHlwZUNvZGVDb25zdAp7CiAgICBUeXBlQ29kZUNvbnN0KGNvbnN0IFR5cGVDb2RlQ29uc3QmKTsK
ICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFR5cGVDb2RlQ29uc3QmKTsKCiAgICBDT1JCQTo6VHlw
ZUNvZGVfdmFyIHR5cGVDb2RlXzsKICAgIGNvbnN0IGNoYXIqIHN0cl87CiAgICBjb25zdCBjaGFy
KiogYXJyXzsKCnB1YmxpYzoKCiAgICBUeXBlQ29kZUNvbnN0KGNvbnN0IGNoYXIqIHMpIDogc3Ry
XyhzKSwgYXJyXygwKSB7IH0KICAgIFR5cGVDb2RlQ29uc3QoY29uc3QgY2hhcioqIGFycikgOiBz
dHJfKDApLCBhcnJfKGFycikgeyB9CgogICAgb3BlcmF0b3IgQ09SQkE6OlR5cGVDb2RlX3B0cigp
OwogICAgQ09SQkE6OlR5cGVDb2RlX3B0ciBvcGVyYXRvci0+KCkKICAgIHsgcmV0dXJuIG9wZXJh
dG9yIENPUkJBOjpUeXBlQ29kZV9wdHIoKTsgfQp9OwoKfQojIDIwICIvaG9tZS9tYXR0L29iL2lu
Y2x1ZGUvT0IvRXhjZXB0LmgiIDIKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvQ29tcGxl
dGlvblN0YXR1cy5oIiAxCiMgMzcgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9Db21wbGV0aW9u
U3RhdHVzLmgiCm5hbWVzcGFjZSBDT1JCQQp7Cgp9CgpuYW1lc3BhY2UgQ09SQkEKewoKfQoKbmFt
ZXNwYWNlIE9CU3R1YkltcGxfQ09SQkEKewoKfQoKbmFtZXNwYWNlIE9CU3R1YkltcGxfQ09SQkEK
ewoKfQoKCgoKbmFtZXNwYWNlIENPUkJBCnsKCgoKCmVudW0gQ29tcGxldGlvblN0YXR1cwp7CiAg
ICBDT01QTEVURURfWUVTLAogICAgQ09NUExFVEVEX05PLAogICAgQ09NUExFVEVEX01BWUJFCn07
Cgp0eXBlZGVmIENvbXBsZXRpb25TdGF0dXMmIENvbXBsZXRpb25TdGF0dXNfb3V0OwoKICAgICAg
ICAgIGV4dGVybiBPQjo6VHlwZUNvZGVDb25zdCBfdGNfY29tcGxldGlvbl9zdGF0dXM7Cgp9CgoK
CgpuYW1lc3BhY2UgT0JTdHViSW1wbF9DT1JCQQp7Cgp9CgoKCgpuYW1lc3BhY2UgT0JNYXJzaGFs
U3R1YkltcGxfQ09SQkEKewoKfQoKCgoKbmFtZXNwYWNlIE9CVl9DT1JCQQp7Cgp9CgoKCgp2b2lk
IG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBDT1JCQTo6Q29tcGxldGlvblN0YXR1cyk7CkNPUkJB
OjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmLCBDT1JCQTo6Q29tcGxldGlv
blN0YXR1cyYpOwoKaW5saW5lIHZvaWQKb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImIGFueSwg
Q09SQkE6OkNvbXBsZXRpb25TdGF0dXMgdmFsKQp7CiAgICBhbnkuaW5vdXQoKSA8PD0gdmFsOwp9
CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4Kb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueV92YXIm
IGFueSwgQ09SQkE6OkNvbXBsZXRpb25TdGF0dXMmIHZhbCkKewogICAgcmV0dXJuIGFueS5pbigp
ID4+PSB2YWw7Cn0KIyAyMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0V4Y2VwdC5oIiAyCgpu
YW1lc3BhY2UgQ09SQkEKewoKCgoKY2xhc3MgU3lzdGVtRXhjZXB0aW9uOwoKfQoKbmFtZXNwYWNl
IE9CCnsKCgoKCmNsYXNzIEV4Y2VwdGlvbkJhc2UKewpwdWJsaWM6CiAgICB2aXJ0dWFsIH5FeGNl
cHRpb25CYXNlKCkgeyB9CiAgICB2aXJ0dWFsIHZvaWQgX3JhaXNlKCkgY29uc3QgPSAwOwp9OwoK
CgoKY2xhc3MgU3R1YkltcGxDaGFuZ2VkIDogcHVibGljIEV4Y2VwdGlvbkJhc2UKewpwdWJsaWM6
CgogICAgdmlydHVhbCB2b2lkIF9yYWlzZSgpIGNvbnN0IHsgdGhyb3cgKnRoaXM7IH0KfTsKCgoK
CmNsYXNzIExvY2F0aW9uRm9yd2FyZCA6IHB1YmxpYyBFeGNlcHRpb25CYXNlCnsKcHVibGljOgoK
ICAgIFJlZkNvdW50SU9SX3ZhciBpb3I7CiAgICBib29sIHBlcm07CgogICAgTG9jYXRpb25Gb3J3
YXJkKFJlZkNvdW50SU9SX3B0ciwgYm9vbCk7CgogICAgdmlydHVhbCB2b2lkIF9yYWlzZSgpIGNv
bnN0IHsgdGhyb3cgKnRoaXM7IH0KfTsKCgoKCmNsYXNzIEZhaWx1cmVFeGNlcHRpb24gOiBwdWJs
aWMgRXhjZXB0aW9uQmFzZQp7CnB1YmxpYzoKCgoKCiAgICBDT1JCQTo6U3lzdGVtRXhjZXB0aW9u
KiBleGNlcHRpb247CgogICAgRmFpbHVyZUV4Y2VwdGlvbigpIDogZXhjZXB0aW9uKDApIHsgfQog
ICAgRmFpbHVyZUV4Y2VwdGlvbihjb25zdCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uJik7CiAgICBG
YWlsdXJlRXhjZXB0aW9uKGNvbnN0IEZhaWx1cmVFeGNlcHRpb24mKTsKICAgIHZpcnR1YWwgfkZh
aWx1cmVFeGNlcHRpb24oKTsKCiAgICBGYWlsdXJlRXhjZXB0aW9uJiBvcGVyYXRvcj0oY29uc3Qg
RmFpbHVyZUV4Y2VwdGlvbiYpOwoKICAgIHZpcnR1YWwgdm9pZCBfcmFpc2UoKSBjb25zdCB7IHRo
cm93ICp0aGlzOyB9Cn07Cgp9CgoKbmFtZXNwYWNlIENPUkJBCnsKCgoKCmNsYXNzIEV4Y2VwdGlv
biA6IHB1YmxpYyBPQjo6RXhjZXB0aW9uQmFzZQp7CnByb3RlY3RlZDoKCiAgICBFeGNlcHRpb24o
KSB7IH0KCnB1YmxpYzoKCgoKCiAgICBFeGNlcHRpb24oY29uc3QgRXhjZXB0aW9uJikgeyB9CiAg
ICB2aXJ0dWFsIH5FeGNlcHRpb24oKSB7IH0KICAgIEV4Y2VwdGlvbiYgb3BlcmF0b3I9KGNvbnN0
IEV4Y2VwdGlvbiYpIHsgcmV0dXJuICp0aGlzOyB9CgogICAgdmlydHVhbCB2b2lkIF9yYWlzZSgp
IGNvbnN0ID0gMDsKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX25hbWUoKSBjb25zdDsKICAgIHZp
cnR1YWwgY29uc3QgY2hhciogX3JlcF9pZCgpIGNvbnN0OwoKCgoKICAgIHZpcnR1YWwgY2hhciog
X3RvX3N0cmluZygpIGNvbnN0ID0gMDsKCgoKCgogICAgdmlydHVhbCBFeGNlcHRpb24qIF9PQl9j
bG9uZSgpIGNvbnN0ID0gMDsKICAgIHZpcnR1YWwgdm9pZCBfT0JfaW5zZXJ0SW5BbnkoQW55Jikg
PSAwOwogICAgdmlydHVhbCB2b2lkIF9PQl9tYXJzaGFsKE9COjpPdXRwdXRTdHJlYW1JbXBsKikg
Y29uc3QgPSAwOwp9OwoKfQoKCgoKc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVh
bSYsIGNvbnN0IENPUkJBOjpFeGNlcHRpb24mKTsKCm5hbWVzcGFjZSBPQgp7CgoKCgoKCn0KCm5h
bWVzcGFjZSBDT1JCQQp7CiMgMTkyICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvRXhjZXB0Lmgi
CmNsYXNzIFN5c3RlbUV4Y2VwdGlvbiA6IHB1YmxpYyBFeGNlcHRpb24KewoKCgogICAgU3RyaW5n
X3ZhciByZWFzb25fOwoKCgoKCiAgICBib29sIHJlbW90ZV87CgoKCgogICAgVUxvbmcgbWlub3Jf
OwogICAgQ29tcGxldGlvblN0YXR1cyBzdGF0dXNfOwoKcHVibGljOgoKCgoKICAgIFN5c3RlbUV4
Y2VwdGlvbihjb25zdCBjaGFyKiA9ICIiKTsKICAgIFN5c3RlbUV4Y2VwdGlvbihVTG9uZywgQ29t
cGxldGlvblN0YXR1cyk7CiAgICBTeXN0ZW1FeGNlcHRpb24oY29uc3QgY2hhciosIFVMb25nLCBD
b21wbGV0aW9uU3RhdHVzKTsKICAgIFN5c3RlbUV4Y2VwdGlvbihjb25zdCBTeXN0ZW1FeGNlcHRp
b24mKTsKICAgIFN5c3RlbUV4Y2VwdGlvbiYgb3BlcmF0b3I9KGNvbnN0IFN5c3RlbUV4Y2VwdGlv
biYpOwoKICAgIFVMb25nIG1pbm9yKCkgY29uc3QgeyByZXR1cm4gbWlub3JfOyB9CiAgICB2b2lk
IG1pbm9yKFVMb25nIG1pbm9yKSB7IG1pbm9yXyA9IG1pbm9yOyB9CgogICAgQ29tcGxldGlvblN0
YXR1cyBjb21wbGV0ZWQoKSBjb25zdCB7IHJldHVybiBzdGF0dXNfOyB9CiAgICB2b2lkIGNvbXBs
ZXRlZChDb21wbGV0aW9uU3RhdHVzIHN0YXR1cykgeyBzdGF0dXNfID0gc3RhdHVzOyB9CgogICAg
c3RhdGljIFN5c3RlbUV4Y2VwdGlvbiogX2Rvd25jYXN0KEV4Y2VwdGlvbiogcCkKICAgIHsgcmV0
dXJuIGR5bmFtaWNfY2FzdDxTeXN0ZW1FeGNlcHRpb24qPihwKTsgfQogICAgc3RhdGljIGNvbnN0
IFN5c3RlbUV4Y2VwdGlvbiogX2Rvd25jYXN0KGNvbnN0IEV4Y2VwdGlvbiogcCkKICAgIHsgcmV0
dXJuIGR5bmFtaWNfY2FzdDxjb25zdCBTeXN0ZW1FeGNlcHRpb24qPihwKTsgfQoKCgoKICAgIGNv
bnN0IGNoYXIqIHJlYXNvbigpIGNvbnN0IHsgcmV0dXJuIHJlYXNvbl87IH0KICAgIHZvaWQgcmVh
c29uKGNvbnN0IGNoYXIqIHJlYXNvbikgeyByZWFzb25fID0gcmVhc29uOyB9CiAgICBib29sIHJl
bW90ZSgpIGNvbnN0IHsgcmV0dXJuIHJlbW90ZV87IH0KICAgIHZvaWQgcmVtb3RlKGJvb2wgcmVt
b3RlKSB7IHJlbW90ZV8gPSByZW1vdGU7IH0KCgoKCgogICAgY2hhciogX09CX2RlZmF1bHRUb1N0
cmluZyhjb25zdCBjaGFyKikgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgX09CX21hcnNoYWwoT0I6
Ok91dHB1dFN0cmVhbUltcGwqKSBjb25zdDsKICAgIHN0YXRpYyBTeXN0ZW1FeGNlcHRpb24qIF9P
Ql91bm1hcnNoYWwoT0I6OklucHV0U3RyZWFtSW1wbCopOwp9OwoKY2xhc3MgVXNlckV4Y2VwdGlv
biA6IHB1YmxpYyBFeGNlcHRpb24KewpwdWJsaWM6CgoKCgogICAgVXNlckV4Y2VwdGlvbigpIHsg
fQogICAgVXNlckV4Y2VwdGlvbihjb25zdCBVc2VyRXhjZXB0aW9uJikgeyB9CiAgICBVc2VyRXhj
ZXB0aW9uJiBvcGVyYXRvcj0oY29uc3QgVXNlckV4Y2VwdGlvbiYpCiAgICB7IHJldHVybiAqdGhp
czsgfQoKICAgIHN0YXRpYyBVc2VyRXhjZXB0aW9uKiBfZG93bmNhc3QoRXhjZXB0aW9uKiBwKQog
ICAgeyByZXR1cm4gZHluYW1pY19jYXN0PFVzZXJFeGNlcHRpb24qPihwKTsgfQogICAgc3RhdGlj
IGNvbnN0IFVzZXJFeGNlcHRpb24qIF9kb3duY2FzdChjb25zdCBFeGNlcHRpb24qIHApCiAgICB7
IHJldHVybiBkeW5hbWljX2Nhc3Q8Y29uc3QgVXNlckV4Y2VwdGlvbio+KHApOyB9CgoKCgoKICAg
IGNoYXIqIF9PQl9kZWZhdWx0VG9TdHJpbmcoY29uc3QgY2hhciopIGNvbnN0OwogICAgdmlydHVh
bCB2b2lkIF9PQl9tYXJzaGFsKE9COjpPdXRwdXRTdHJlYW1JbXBsKikgY29uc3Q7Cn07CiMgMjk4
ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvRXhjZXB0LmgiCmNsYXNzIFVOS05PV04gOiBwdWJs
aWMgU3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBVTktOT1dOKGNvbnN0IGNoYXIqIHIgPSAiIik7
IFVOS05PV04oVUxvbmcsIENvbXBsZXRpb25TdGF0dXMpOyBVTktOT1dOKGNvbnN0IGNoYXIqLCBV
TG9uZywgQ29tcGxldGlvblN0YXR1cyk7IFVOS05PV04oY29uc3QgVU5LTk9XTiYpOyB2aXJ0dWFs
IHZvaWQgX3JhaXNlKCkgY29uc3QgeyB0aHJvdyAqdGhpczsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIq
IF9uYW1lKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciogX3JlcF9pZCgpIGNvbnN0OyB2aXJ0
dWFsIGNoYXIqIF90b19zdHJpbmcoKSBjb25zdDsgc3RhdGljIFVOS05PV04qIF9kb3duY2FzdChF
eGNlcHRpb24qIHApIHsgcmV0dXJuIGR5bmFtaWNfY2FzdDxVTktOT1dOKj4ocCk7IH0gc3RhdGlj
IGNvbnN0IFVOS05PV04qIF9kb3duY2FzdChjb25zdCBFeGNlcHRpb24qIHApIHsgcmV0dXJuIGR5
bmFtaWNfY2FzdDxjb25zdCBVTktOT1dOKj4ocCk7IH0gdmlydHVhbCBFeGNlcHRpb24qIF9PQl9j
bG9uZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQgX09CX2luc2VydEluQW55KEFueSYpOyB9OwpjbGFz
cyBCQURfUEFSQU0gOiBwdWJsaWMgU3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBCQURfUEFSQU0o
Y29uc3QgY2hhciogciA9ICIiKTsgQkFEX1BBUkFNKFVMb25nLCBDb21wbGV0aW9uU3RhdHVzKTsg
QkFEX1BBUkFNKGNvbnN0IGNoYXIqLCBVTG9uZywgQ29tcGxldGlvblN0YXR1cyk7IEJBRF9QQVJB
TShjb25zdCBCQURfUEFSQU0mKTsgdmlydHVhbCB2b2lkIF9yYWlzZSgpIGNvbnN0IHsgdGhyb3cg
KnRoaXM7IH0gdmlydHVhbCBjb25zdCBjaGFyKiBfbmFtZSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0
IGNoYXIqIF9yZXBfaWQoKSBjb25zdDsgdmlydHVhbCBjaGFyKiBfdG9fc3RyaW5nKCkgY29uc3Q7
IHN0YXRpYyBCQURfUEFSQU0qIF9kb3duY2FzdChFeGNlcHRpb24qIHApIHsgcmV0dXJuIGR5bmFt
aWNfY2FzdDxCQURfUEFSQU0qPihwKTsgfSBzdGF0aWMgY29uc3QgQkFEX1BBUkFNKiBfZG93bmNh
c3QoY29uc3QgRXhjZXB0aW9uKiBwKSB7IHJldHVybiBkeW5hbWljX2Nhc3Q8Y29uc3QgQkFEX1BB
UkFNKj4ocCk7IH0gdmlydHVhbCBFeGNlcHRpb24qIF9PQl9jbG9uZSgpIGNvbnN0OyB2aXJ0dWFs
IHZvaWQgX09CX2luc2VydEluQW55KEFueSYpOyB9OwpjbGFzcyBOT19NRU1PUlkgOiBwdWJsaWMg
U3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBOT19NRU1PUlkoY29uc3QgY2hhciogciA9ICIiKTsg
Tk9fTUVNT1JZKFVMb25nLCBDb21wbGV0aW9uU3RhdHVzKTsgTk9fTUVNT1JZKGNvbnN0IGNoYXIq
LCBVTG9uZywgQ29tcGxldGlvblN0YXR1cyk7IE5PX01FTU9SWShjb25zdCBOT19NRU1PUlkmKTsg
dmlydHVhbCB2b2lkIF9yYWlzZSgpIGNvbnN0IHsgdGhyb3cgKnRoaXM7IH0gdmlydHVhbCBjb25z
dCBjaGFyKiBfbmFtZSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9yZXBfaWQoKSBjb25z
dDsgdmlydHVhbCBjaGFyKiBfdG9fc3RyaW5nKCkgY29uc3Q7IHN0YXRpYyBOT19NRU1PUlkqIF9k
b3duY2FzdChFeGNlcHRpb24qIHApIHsgcmV0dXJuIGR5bmFtaWNfY2FzdDxOT19NRU1PUlkqPihw
KTsgfSBzdGF0aWMgY29uc3QgTk9fTUVNT1JZKiBfZG93bmNhc3QoY29uc3QgRXhjZXB0aW9uKiBw
KSB7IHJldHVybiBkeW5hbWljX2Nhc3Q8Y29uc3QgTk9fTUVNT1JZKj4ocCk7IH0gdmlydHVhbCBF
eGNlcHRpb24qIF9PQl9jbG9uZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQgX09CX2luc2VydEluQW55
KEFueSYpOyB9OwpjbGFzcyBJTVBfTElNSVQgOiBwdWJsaWMgU3lzdGVtRXhjZXB0aW9uIHsgcHVi
bGljOiBJTVBfTElNSVQoY29uc3QgY2hhciogciA9ICIiKTsgSU1QX0xJTUlUKFVMb25nLCBDb21w
bGV0aW9uU3RhdHVzKTsgSU1QX0xJTUlUKGNvbnN0IGNoYXIqLCBVTG9uZywgQ29tcGxldGlvblN0
YXR1cyk7IElNUF9MSU1JVChjb25zdCBJTVBfTElNSVQmKTsgdmlydHVhbCB2b2lkIF9yYWlzZSgp
IGNvbnN0IHsgdGhyb3cgKnRoaXM7IH0gdmlydHVhbCBjb25zdCBjaGFyKiBfbmFtZSgpIGNvbnN0
OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9yZXBfaWQoKSBjb25zdDsgdmlydHVhbCBjaGFyKiBfdG9f
c3RyaW5nKCkgY29uc3Q7IHN0YXRpYyBJTVBfTElNSVQqIF9kb3duY2FzdChFeGNlcHRpb24qIHAp
IHsgcmV0dXJuIGR5bmFtaWNfY2FzdDxJTVBfTElNSVQqPihwKTsgfSBzdGF0aWMgY29uc3QgSU1Q
X0xJTUlUKiBfZG93bmNhc3QoY29uc3QgRXhjZXB0aW9uKiBwKSB7IHJldHVybiBkeW5hbWljX2Nh
c3Q8Y29uc3QgSU1QX0xJTUlUKj4ocCk7IH0gdmlydHVhbCBFeGNlcHRpb24qIF9PQl9jbG9uZSgp
IGNvbnN0OyB2aXJ0dWFsIHZvaWQgX09CX2luc2VydEluQW55KEFueSYpOyB9OwpjbGFzcyBDT01N
X0ZBSUxVUkUgOiBwdWJsaWMgU3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBDT01NX0ZBSUxVUkUo
Y29uc3QgY2hhciogciA9ICIiKTsgQ09NTV9GQUlMVVJFKFVMb25nLCBDb21wbGV0aW9uU3RhdHVz
KTsgQ09NTV9GQUlMVVJFKGNvbnN0IGNoYXIqLCBVTG9uZywgQ29tcGxldGlvblN0YXR1cyk7IENP
TU1fRkFJTFVSRShjb25zdCBDT01NX0ZBSUxVUkUmKTsgdmlydHVhbCB2b2lkIF9yYWlzZSgpIGNv
bnN0IHsgdGhyb3cgKnRoaXM7IH0gdmlydHVhbCBjb25zdCBjaGFyKiBfbmFtZSgpIGNvbnN0OyB2
aXJ0dWFsIGNvbnN0IGNoYXIqIF9yZXBfaWQoKSBjb25zdDsgdmlydHVhbCBjaGFyKiBfdG9fc3Ry
aW5nKCkgY29uc3Q7IHN0YXRpYyBDT01NX0ZBSUxVUkUqIF9kb3duY2FzdChFeGNlcHRpb24qIHAp
IHsgcmV0dXJuIGR5bmFtaWNfY2FzdDxDT01NX0ZBSUxVUkUqPihwKTsgfSBzdGF0aWMgY29uc3Qg
Q09NTV9GQUlMVVJFKiBfZG93bmNhc3QoY29uc3QgRXhjZXB0aW9uKiBwKSB7IHJldHVybiBkeW5h
bWljX2Nhc3Q8Y29uc3QgQ09NTV9GQUlMVVJFKj4ocCk7IH0gdmlydHVhbCBFeGNlcHRpb24qIF9P
Ql9jbG9uZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQgX09CX2luc2VydEluQW55KEFueSYpOyB9Owpj
bGFzcyBJTlZfT0JKUkVGIDogcHVibGljIFN5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzogSU5WX09C
SlJFRihjb25zdCBjaGFyKiByID0gIiIpOyBJTlZfT0JKUkVGKFVMb25nLCBDb21wbGV0aW9uU3Rh
dHVzKTsgSU5WX09CSlJFRihjb25zdCBjaGFyKiwgVUxvbmcsIENvbXBsZXRpb25TdGF0dXMpOyBJ
TlZfT0JKUkVGKGNvbnN0IElOVl9PQkpSRUYmKTsgdmlydHVhbCB2b2lkIF9yYWlzZSgpIGNvbnN0
IHsgdGhyb3cgKnRoaXM7IH0gdmlydHVhbCBjb25zdCBjaGFyKiBfbmFtZSgpIGNvbnN0OyB2aXJ0
dWFsIGNvbnN0IGNoYXIqIF9yZXBfaWQoKSBjb25zdDsgdmlydHVhbCBjaGFyKiBfdG9fc3RyaW5n
KCkgY29uc3Q7IHN0YXRpYyBJTlZfT0JKUkVGKiBfZG93bmNhc3QoRXhjZXB0aW9uKiBwKSB7IHJl
dHVybiBkeW5hbWljX2Nhc3Q8SU5WX09CSlJFRio+KHApOyB9IHN0YXRpYyBjb25zdCBJTlZfT0JK
UkVGKiBfZG93bmNhc3QoY29uc3QgRXhjZXB0aW9uKiBwKSB7IHJldHVybiBkeW5hbWljX2Nhc3Q8
Y29uc3QgSU5WX09CSlJFRio+KHApOyB9IHZpcnR1YWwgRXhjZXB0aW9uKiBfT0JfY2xvbmUoKSBj
b25zdDsgdmlydHVhbCB2b2lkIF9PQl9pbnNlcnRJbkFueShBbnkmKTsgfTsKY2xhc3MgTk9fUEVS
TUlTU0lPTiA6IHB1YmxpYyBTeXN0ZW1FeGNlcHRpb24geyBwdWJsaWM6IE5PX1BFUk1JU1NJT04o
Y29uc3QgY2hhciogciA9ICIiKTsgTk9fUEVSTUlTU0lPTihVTG9uZywgQ29tcGxldGlvblN0YXR1
cyk7IE5PX1BFUk1JU1NJT04oY29uc3QgY2hhciosIFVMb25nLCBDb21wbGV0aW9uU3RhdHVzKTsg
Tk9fUEVSTUlTU0lPTihjb25zdCBOT19QRVJNSVNTSU9OJik7IHZpcnR1YWwgdm9pZCBfcmFpc2Uo
KSBjb25zdCB7IHRocm93ICp0aGlzOyB9IHZpcnR1YWwgY29uc3QgY2hhciogX25hbWUoKSBjb25z
dDsgdmlydHVhbCBjb25zdCBjaGFyKiBfcmVwX2lkKCkgY29uc3Q7IHZpcnR1YWwgY2hhciogX3Rv
X3N0cmluZygpIGNvbnN0OyBzdGF0aWMgTk9fUEVSTUlTU0lPTiogX2Rvd25jYXN0KEV4Y2VwdGlv
biogcCkgeyByZXR1cm4gZHluYW1pY19jYXN0PE5PX1BFUk1JU1NJT04qPihwKTsgfSBzdGF0aWMg
Y29uc3QgTk9fUEVSTUlTU0lPTiogX2Rvd25jYXN0KGNvbnN0IEV4Y2VwdGlvbiogcCkgeyByZXR1
cm4gZHluYW1pY19jYXN0PGNvbnN0IE5PX1BFUk1JU1NJT04qPihwKTsgfSB2aXJ0dWFsIEV4Y2Vw
dGlvbiogX09CX2Nsb25lKCkgY29uc3Q7IHZpcnR1YWwgdm9pZCBfT0JfaW5zZXJ0SW5BbnkoQW55
Jik7IH07CmNsYXNzIElOVEVSTkFMIDogcHVibGljIFN5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzog
SU5URVJOQUwoY29uc3QgY2hhciogciA9ICIiKTsgSU5URVJOQUwoVUxvbmcsIENvbXBsZXRpb25T
dGF0dXMpOyBJTlRFUk5BTChjb25zdCBjaGFyKiwgVUxvbmcsIENvbXBsZXRpb25TdGF0dXMpOyBJ
TlRFUk5BTChjb25zdCBJTlRFUk5BTCYpOyB2aXJ0dWFsIHZvaWQgX3JhaXNlKCkgY29uc3QgeyB0
aHJvdyAqdGhpczsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9uYW1lKCkgY29uc3Q7IHZpcnR1YWwg
Y29uc3QgY2hhciogX3JlcF9pZCgpIGNvbnN0OyB2aXJ0dWFsIGNoYXIqIF90b19zdHJpbmcoKSBj
b25zdDsgc3RhdGljIElOVEVSTkFMKiBfZG93bmNhc3QoRXhjZXB0aW9uKiBwKSB7IHJldHVybiBk
eW5hbWljX2Nhc3Q8SU5URVJOQUwqPihwKTsgfSBzdGF0aWMgY29uc3QgSU5URVJOQUwqIF9kb3du
Y2FzdChjb25zdCBFeGNlcHRpb24qIHApIHsgcmV0dXJuIGR5bmFtaWNfY2FzdDxjb25zdCBJTlRF
Uk5BTCo+KHApOyB9IHZpcnR1YWwgRXhjZXB0aW9uKiBfT0JfY2xvbmUoKSBjb25zdDsgdmlydHVh
bCB2b2lkIF9PQl9pbnNlcnRJbkFueShBbnkmKTsgfTsKY2xhc3MgTUFSU0hBTCA6IHB1YmxpYyBT
eXN0ZW1FeGNlcHRpb24geyBwdWJsaWM6IE1BUlNIQUwoY29uc3QgY2hhciogciA9ICIiKTsgTUFS
U0hBTChVTG9uZywgQ29tcGxldGlvblN0YXR1cyk7IE1BUlNIQUwoY29uc3QgY2hhciosIFVMb25n
LCBDb21wbGV0aW9uU3RhdHVzKTsgTUFSU0hBTChjb25zdCBNQVJTSEFMJik7IHZpcnR1YWwgdm9p
ZCBfcmFpc2UoKSBjb25zdCB7IHRocm93ICp0aGlzOyB9IHZpcnR1YWwgY29uc3QgY2hhciogX25h
bWUoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfcmVwX2lkKCkgY29uc3Q7IHZpcnR1YWwg
Y2hhciogX3RvX3N0cmluZygpIGNvbnN0OyBzdGF0aWMgTUFSU0hBTCogX2Rvd25jYXN0KEV4Y2Vw
dGlvbiogcCkgeyByZXR1cm4gZHluYW1pY19jYXN0PE1BUlNIQUwqPihwKTsgfSBzdGF0aWMgY29u
c3QgTUFSU0hBTCogX2Rvd25jYXN0KGNvbnN0IEV4Y2VwdGlvbiogcCkgeyByZXR1cm4gZHluYW1p
Y19jYXN0PGNvbnN0IE1BUlNIQUwqPihwKTsgfSB2aXJ0dWFsIEV4Y2VwdGlvbiogX09CX2Nsb25l
KCkgY29uc3Q7IHZpcnR1YWwgdm9pZCBfT0JfaW5zZXJ0SW5BbnkoQW55Jik7IH07CmNsYXNzIElO
SVRJQUxJWkUgOiBwdWJsaWMgU3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBJTklUSUFMSVpFKGNv
bnN0IGNoYXIqIHIgPSAiIik7IElOSVRJQUxJWkUoVUxvbmcsIENvbXBsZXRpb25TdGF0dXMpOyBJ
TklUSUFMSVpFKGNvbnN0IGNoYXIqLCBVTG9uZywgQ29tcGxldGlvblN0YXR1cyk7IElOSVRJQUxJ
WkUoY29uc3QgSU5JVElBTElaRSYpOyB2aXJ0dWFsIHZvaWQgX3JhaXNlKCkgY29uc3QgeyB0aHJv
dyAqdGhpczsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9uYW1lKCkgY29uc3Q7IHZpcnR1YWwgY29u
c3QgY2hhciogX3JlcF9pZCgpIGNvbnN0OyB2aXJ0dWFsIGNoYXIqIF90b19zdHJpbmcoKSBjb25z
dDsgc3RhdGljIElOSVRJQUxJWkUqIF9kb3duY2FzdChFeGNlcHRpb24qIHApIHsgcmV0dXJuIGR5
bmFtaWNfY2FzdDxJTklUSUFMSVpFKj4ocCk7IH0gc3RhdGljIGNvbnN0IElOSVRJQUxJWkUqIF9k
b3duY2FzdChjb25zdCBFeGNlcHRpb24qIHApIHsgcmV0dXJuIGR5bmFtaWNfY2FzdDxjb25zdCBJ
TklUSUFMSVpFKj4ocCk7IH0gdmlydHVhbCBFeGNlcHRpb24qIF9PQl9jbG9uZSgpIGNvbnN0OyB2
aXJ0dWFsIHZvaWQgX09CX2luc2VydEluQW55KEFueSYpOyB9OwpjbGFzcyBOT19JTVBMRU1FTlQg
OiBwdWJsaWMgU3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBOT19JTVBMRU1FTlQoY29uc3QgY2hh
ciogciA9ICIiKTsgTk9fSU1QTEVNRU5UKFVMb25nLCBDb21wbGV0aW9uU3RhdHVzKTsgTk9fSU1Q
TEVNRU5UKGNvbnN0IGNoYXIqLCBVTG9uZywgQ29tcGxldGlvblN0YXR1cyk7IE5PX0lNUExFTUVO
VChjb25zdCBOT19JTVBMRU1FTlQmKTsgdmlydHVhbCB2b2lkIF9yYWlzZSgpIGNvbnN0IHsgdGhy
b3cgKnRoaXM7IH0gdmlydHVhbCBjb25zdCBjaGFyKiBfbmFtZSgpIGNvbnN0OyB2aXJ0dWFsIGNv
bnN0IGNoYXIqIF9yZXBfaWQoKSBjb25zdDsgdmlydHVhbCBjaGFyKiBfdG9fc3RyaW5nKCkgY29u
c3Q7IHN0YXRpYyBOT19JTVBMRU1FTlQqIF9kb3duY2FzdChFeGNlcHRpb24qIHApIHsgcmV0dXJu
IGR5bmFtaWNfY2FzdDxOT19JTVBMRU1FTlQqPihwKTsgfSBzdGF0aWMgY29uc3QgTk9fSU1QTEVN
RU5UKiBfZG93bmNhc3QoY29uc3QgRXhjZXB0aW9uKiBwKSB7IHJldHVybiBkeW5hbWljX2Nhc3Q8
Y29uc3QgTk9fSU1QTEVNRU5UKj4ocCk7IH0gdmlydHVhbCBFeGNlcHRpb24qIF9PQl9jbG9uZSgp
IGNvbnN0OyB2aXJ0dWFsIHZvaWQgX09CX2luc2VydEluQW55KEFueSYpOyB9OwpjbGFzcyBCQURf
VFlQRUNPREUgOiBwdWJsaWMgU3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBCQURfVFlQRUNPREUo
Y29uc3QgY2hhciogciA9ICIiKTsgQkFEX1RZUEVDT0RFKFVMb25nLCBDb21wbGV0aW9uU3RhdHVz
KTsgQkFEX1RZUEVDT0RFKGNvbnN0IGNoYXIqLCBVTG9uZywgQ29tcGxldGlvblN0YXR1cyk7IEJB
RF9UWVBFQ09ERShjb25zdCBCQURfVFlQRUNPREUmKTsgdmlydHVhbCB2b2lkIF9yYWlzZSgpIGNv
bnN0IHsgdGhyb3cgKnRoaXM7IH0gdmlydHVhbCBjb25zdCBjaGFyKiBfbmFtZSgpIGNvbnN0OyB2
aXJ0dWFsIGNvbnN0IGNoYXIqIF9yZXBfaWQoKSBjb25zdDsgdmlydHVhbCBjaGFyKiBfdG9fc3Ry
aW5nKCkgY29uc3Q7IHN0YXRpYyBCQURfVFlQRUNPREUqIF9kb3duY2FzdChFeGNlcHRpb24qIHAp
IHsgcmV0dXJuIGR5bmFtaWNfY2FzdDxCQURfVFlQRUNPREUqPihwKTsgfSBzdGF0aWMgY29uc3Qg
QkFEX1RZUEVDT0RFKiBfZG93bmNhc3QoY29uc3QgRXhjZXB0aW9uKiBwKSB7IHJldHVybiBkeW5h
bWljX2Nhc3Q8Y29uc3QgQkFEX1RZUEVDT0RFKj4ocCk7IH0gdmlydHVhbCBFeGNlcHRpb24qIF9P
Ql9jbG9uZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQgX09CX2luc2VydEluQW55KEFueSYpOyB9Owpj
bGFzcyBCQURfT1BFUkFUSU9OIDogcHVibGljIFN5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzogQkFE
X09QRVJBVElPTihjb25zdCBjaGFyKiByID0gIiIpOyBCQURfT1BFUkFUSU9OKFVMb25nLCBDb21w
bGV0aW9uU3RhdHVzKTsgQkFEX09QRVJBVElPTihjb25zdCBjaGFyKiwgVUxvbmcsIENvbXBsZXRp
b25TdGF0dXMpOyBCQURfT1BFUkFUSU9OKGNvbnN0IEJBRF9PUEVSQVRJT04mKTsgdmlydHVhbCB2
b2lkIF9yYWlzZSgpIGNvbnN0IHsgdGhyb3cgKnRoaXM7IH0gdmlydHVhbCBjb25zdCBjaGFyKiBf
bmFtZSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9yZXBfaWQoKSBjb25zdDsgdmlydHVh
bCBjaGFyKiBfdG9fc3RyaW5nKCkgY29uc3Q7IHN0YXRpYyBCQURfT1BFUkFUSU9OKiBfZG93bmNh
c3QoRXhjZXB0aW9uKiBwKSB7IHJldHVybiBkeW5hbWljX2Nhc3Q8QkFEX09QRVJBVElPTio+KHAp
OyB9IHN0YXRpYyBjb25zdCBCQURfT1BFUkFUSU9OKiBfZG93bmNhc3QoY29uc3QgRXhjZXB0aW9u
KiBwKSB7IHJldHVybiBkeW5hbWljX2Nhc3Q8Y29uc3QgQkFEX09QRVJBVElPTio+KHApOyB9IHZp
cnR1YWwgRXhjZXB0aW9uKiBfT0JfY2xvbmUoKSBjb25zdDsgdmlydHVhbCB2b2lkIF9PQl9pbnNl
cnRJbkFueShBbnkmKTsgfTsKY2xhc3MgTk9fUkVTT1VSQ0VTIDogcHVibGljIFN5c3RlbUV4Y2Vw
dGlvbiB7IHB1YmxpYzogTk9fUkVTT1VSQ0VTKGNvbnN0IGNoYXIqIHIgPSAiIik7IE5PX1JFU09V
UkNFUyhVTG9uZywgQ29tcGxldGlvblN0YXR1cyk7IE5PX1JFU09VUkNFUyhjb25zdCBjaGFyKiwg
VUxvbmcsIENvbXBsZXRpb25TdGF0dXMpOyBOT19SRVNPVVJDRVMoY29uc3QgTk9fUkVTT1VSQ0VT
Jik7IHZpcnR1YWwgdm9pZCBfcmFpc2UoKSBjb25zdCB7IHRocm93ICp0aGlzOyB9IHZpcnR1YWwg
Y29uc3QgY2hhciogX25hbWUoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfcmVwX2lkKCkg
Y29uc3Q7IHZpcnR1YWwgY2hhciogX3RvX3N0cmluZygpIGNvbnN0OyBzdGF0aWMgTk9fUkVTT1VS
Q0VTKiBfZG93bmNhc3QoRXhjZXB0aW9uKiBwKSB7IHJldHVybiBkeW5hbWljX2Nhc3Q8Tk9fUkVT
T1VSQ0VTKj4ocCk7IH0gc3RhdGljIGNvbnN0IE5PX1JFU09VUkNFUyogX2Rvd25jYXN0KGNvbnN0
IEV4Y2VwdGlvbiogcCkgeyByZXR1cm4gZHluYW1pY19jYXN0PGNvbnN0IE5PX1JFU09VUkNFUyo+
KHApOyB9IHZpcnR1YWwgRXhjZXB0aW9uKiBfT0JfY2xvbmUoKSBjb25zdDsgdmlydHVhbCB2b2lk
IF9PQl9pbnNlcnRJbkFueShBbnkmKTsgfTsKY2xhc3MgTk9fUkVTUE9OU0UgOiBwdWJsaWMgU3lz
dGVtRXhjZXB0aW9uIHsgcHVibGljOiBOT19SRVNQT05TRShjb25zdCBjaGFyKiByID0gIiIpOyBO
T19SRVNQT05TRShVTG9uZywgQ29tcGxldGlvblN0YXR1cyk7IE5PX1JFU1BPTlNFKGNvbnN0IGNo
YXIqLCBVTG9uZywgQ29tcGxldGlvblN0YXR1cyk7IE5PX1JFU1BPTlNFKGNvbnN0IE5PX1JFU1BP
TlNFJik7IHZpcnR1YWwgdm9pZCBfcmFpc2UoKSBjb25zdCB7IHRocm93ICp0aGlzOyB9IHZpcnR1
YWwgY29uc3QgY2hhciogX25hbWUoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfcmVwX2lk
KCkgY29uc3Q7IHZpcnR1YWwgY2hhciogX3RvX3N0cmluZygpIGNvbnN0OyBzdGF0aWMgTk9fUkVT
UE9OU0UqIF9kb3duY2FzdChFeGNlcHRpb24qIHApIHsgcmV0dXJuIGR5bmFtaWNfY2FzdDxOT19S
RVNQT05TRSo+KHApOyB9IHN0YXRpYyBjb25zdCBOT19SRVNQT05TRSogX2Rvd25jYXN0KGNvbnN0
IEV4Y2VwdGlvbiogcCkgeyByZXR1cm4gZHluYW1pY19jYXN0PGNvbnN0IE5PX1JFU1BPTlNFKj4o
cCk7IH0gdmlydHVhbCBFeGNlcHRpb24qIF9PQl9jbG9uZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQg
X09CX2luc2VydEluQW55KEFueSYpOyB9OwpjbGFzcyBQRVJTSVNUX1NUT1JFIDogcHVibGljIFN5
c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzogUEVSU0lTVF9TVE9SRShjb25zdCBjaGFyKiByID0gIiIp
OyBQRVJTSVNUX1NUT1JFKFVMb25nLCBDb21wbGV0aW9uU3RhdHVzKTsgUEVSU0lTVF9TVE9SRShj
b25zdCBjaGFyKiwgVUxvbmcsIENvbXBsZXRpb25TdGF0dXMpOyBQRVJTSVNUX1NUT1JFKGNvbnN0
IFBFUlNJU1RfU1RPUkUmKTsgdmlydHVhbCB2b2lkIF9yYWlzZSgpIGNvbnN0IHsgdGhyb3cgKnRo
aXM7IH0gdmlydHVhbCBjb25zdCBjaGFyKiBfbmFtZSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNo
YXIqIF9yZXBfaWQoKSBjb25zdDsgdmlydHVhbCBjaGFyKiBfdG9fc3RyaW5nKCkgY29uc3Q7IHN0
YXRpYyBQRVJTSVNUX1NUT1JFKiBfZG93bmNhc3QoRXhjZXB0aW9uKiBwKSB7IHJldHVybiBkeW5h
bWljX2Nhc3Q8UEVSU0lTVF9TVE9SRSo+KHApOyB9IHN0YXRpYyBjb25zdCBQRVJTSVNUX1NUT1JF
KiBfZG93bmNhc3QoY29uc3QgRXhjZXB0aW9uKiBwKSB7IHJldHVybiBkeW5hbWljX2Nhc3Q8Y29u
c3QgUEVSU0lTVF9TVE9SRSo+KHApOyB9IHZpcnR1YWwgRXhjZXB0aW9uKiBfT0JfY2xvbmUoKSBj
b25zdDsgdmlydHVhbCB2b2lkIF9PQl9pbnNlcnRJbkFueShBbnkmKTsgfTsKY2xhc3MgQkFEX0lO
Vl9PUkRFUiA6IHB1YmxpYyBTeXN0ZW1FeGNlcHRpb24geyBwdWJsaWM6IEJBRF9JTlZfT1JERVIo
Y29uc3QgY2hhciogciA9ICIiKTsgQkFEX0lOVl9PUkRFUihVTG9uZywgQ29tcGxldGlvblN0YXR1
cyk7IEJBRF9JTlZfT1JERVIoY29uc3QgY2hhciosIFVMb25nLCBDb21wbGV0aW9uU3RhdHVzKTsg
QkFEX0lOVl9PUkRFUihjb25zdCBCQURfSU5WX09SREVSJik7IHZpcnR1YWwgdm9pZCBfcmFpc2Uo
KSBjb25zdCB7IHRocm93ICp0aGlzOyB9IHZpcnR1YWwgY29uc3QgY2hhciogX25hbWUoKSBjb25z
dDsgdmlydHVhbCBjb25zdCBjaGFyKiBfcmVwX2lkKCkgY29uc3Q7IHZpcnR1YWwgY2hhciogX3Rv
X3N0cmluZygpIGNvbnN0OyBzdGF0aWMgQkFEX0lOVl9PUkRFUiogX2Rvd25jYXN0KEV4Y2VwdGlv
biogcCkgeyByZXR1cm4gZHluYW1pY19jYXN0PEJBRF9JTlZfT1JERVIqPihwKTsgfSBzdGF0aWMg
Y29uc3QgQkFEX0lOVl9PUkRFUiogX2Rvd25jYXN0KGNvbnN0IEV4Y2VwdGlvbiogcCkgeyByZXR1
cm4gZHluYW1pY19jYXN0PGNvbnN0IEJBRF9JTlZfT1JERVIqPihwKTsgfSB2aXJ0dWFsIEV4Y2Vw
dGlvbiogX09CX2Nsb25lKCkgY29uc3Q7IHZpcnR1YWwgdm9pZCBfT0JfaW5zZXJ0SW5BbnkoQW55
Jik7IH07CmNsYXNzIFRSQU5TSUVOVCA6IHB1YmxpYyBTeXN0ZW1FeGNlcHRpb24geyBwdWJsaWM6
IFRSQU5TSUVOVChjb25zdCBjaGFyKiByID0gIiIpOyBUUkFOU0lFTlQoVUxvbmcsIENvbXBsZXRp
b25TdGF0dXMpOyBUUkFOU0lFTlQoY29uc3QgY2hhciosIFVMb25nLCBDb21wbGV0aW9uU3RhdHVz
KTsgVFJBTlNJRU5UKGNvbnN0IFRSQU5TSUVOVCYpOyB2aXJ0dWFsIHZvaWQgX3JhaXNlKCkgY29u
c3QgeyB0aHJvdyAqdGhpczsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9uYW1lKCkgY29uc3Q7IHZp
cnR1YWwgY29uc3QgY2hhciogX3JlcF9pZCgpIGNvbnN0OyB2aXJ0dWFsIGNoYXIqIF90b19zdHJp
bmcoKSBjb25zdDsgc3RhdGljIFRSQU5TSUVOVCogX2Rvd25jYXN0KEV4Y2VwdGlvbiogcCkgeyBy
ZXR1cm4gZHluYW1pY19jYXN0PFRSQU5TSUVOVCo+KHApOyB9IHN0YXRpYyBjb25zdCBUUkFOU0lF
TlQqIF9kb3duY2FzdChjb25zdCBFeGNlcHRpb24qIHApIHsgcmV0dXJuIGR5bmFtaWNfY2FzdDxj
b25zdCBUUkFOU0lFTlQqPihwKTsgfSB2aXJ0dWFsIEV4Y2VwdGlvbiogX09CX2Nsb25lKCkgY29u
c3Q7IHZpcnR1YWwgdm9pZCBfT0JfaW5zZXJ0SW5BbnkoQW55Jik7IH07CmNsYXNzIEZSRUVfTUVN
IDogcHVibGljIFN5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzogRlJFRV9NRU0oY29uc3QgY2hhciog
ciA9ICIiKTsgRlJFRV9NRU0oVUxvbmcsIENvbXBsZXRpb25TdGF0dXMpOyBGUkVFX01FTShjb25z
dCBjaGFyKiwgVUxvbmcsIENvbXBsZXRpb25TdGF0dXMpOyBGUkVFX01FTShjb25zdCBGUkVFX01F
TSYpOyB2aXJ0dWFsIHZvaWQgX3JhaXNlKCkgY29uc3QgeyB0aHJvdyAqdGhpczsgfSB2aXJ0dWFs
IGNvbnN0IGNoYXIqIF9uYW1lKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciogX3JlcF9pZCgp
IGNvbnN0OyB2aXJ0dWFsIGNoYXIqIF90b19zdHJpbmcoKSBjb25zdDsgc3RhdGljIEZSRUVfTUVN
KiBfZG93bmNhc3QoRXhjZXB0aW9uKiBwKSB7IHJldHVybiBkeW5hbWljX2Nhc3Q8RlJFRV9NRU0q
PihwKTsgfSBzdGF0aWMgY29uc3QgRlJFRV9NRU0qIF9kb3duY2FzdChjb25zdCBFeGNlcHRpb24q
IHApIHsgcmV0dXJuIGR5bmFtaWNfY2FzdDxjb25zdCBGUkVFX01FTSo+KHApOyB9IHZpcnR1YWwg
RXhjZXB0aW9uKiBfT0JfY2xvbmUoKSBjb25zdDsgdmlydHVhbCB2b2lkIF9PQl9pbnNlcnRJbkFu
eShBbnkmKTsgfTsKY2xhc3MgSU5WX0lERU5UIDogcHVibGljIFN5c3RlbUV4Y2VwdGlvbiB7IHB1
YmxpYzogSU5WX0lERU5UKGNvbnN0IGNoYXIqIHIgPSAiIik7IElOVl9JREVOVChVTG9uZywgQ29t
cGxldGlvblN0YXR1cyk7IElOVl9JREVOVChjb25zdCBjaGFyKiwgVUxvbmcsIENvbXBsZXRpb25T
dGF0dXMpOyBJTlZfSURFTlQoY29uc3QgSU5WX0lERU5UJik7IHZpcnR1YWwgdm9pZCBfcmFpc2Uo
KSBjb25zdCB7IHRocm93ICp0aGlzOyB9IHZpcnR1YWwgY29uc3QgY2hhciogX25hbWUoKSBjb25z
dDsgdmlydHVhbCBjb25zdCBjaGFyKiBfcmVwX2lkKCkgY29uc3Q7IHZpcnR1YWwgY2hhciogX3Rv
X3N0cmluZygpIGNvbnN0OyBzdGF0aWMgSU5WX0lERU5UKiBfZG93bmNhc3QoRXhjZXB0aW9uKiBw
KSB7IHJldHVybiBkeW5hbWljX2Nhc3Q8SU5WX0lERU5UKj4ocCk7IH0gc3RhdGljIGNvbnN0IElO
Vl9JREVOVCogX2Rvd25jYXN0KGNvbnN0IEV4Y2VwdGlvbiogcCkgeyByZXR1cm4gZHluYW1pY19j
YXN0PGNvbnN0IElOVl9JREVOVCo+KHApOyB9IHZpcnR1YWwgRXhjZXB0aW9uKiBfT0JfY2xvbmUo
KSBjb25zdDsgdmlydHVhbCB2b2lkIF9PQl9pbnNlcnRJbkFueShBbnkmKTsgfTsKY2xhc3MgSU5W
X0ZMQUcgOiBwdWJsaWMgU3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBJTlZfRkxBRyhjb25zdCBj
aGFyKiByID0gIiIpOyBJTlZfRkxBRyhVTG9uZywgQ29tcGxldGlvblN0YXR1cyk7IElOVl9GTEFH
KGNvbnN0IGNoYXIqLCBVTG9uZywgQ29tcGxldGlvblN0YXR1cyk7IElOVl9GTEFHKGNvbnN0IElO
Vl9GTEFHJik7IHZpcnR1YWwgdm9pZCBfcmFpc2UoKSBjb25zdCB7IHRocm93ICp0aGlzOyB9IHZp
cnR1YWwgY29uc3QgY2hhciogX25hbWUoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfcmVw
X2lkKCkgY29uc3Q7IHZpcnR1YWwgY2hhciogX3RvX3N0cmluZygpIGNvbnN0OyBzdGF0aWMgSU5W
X0ZMQUcqIF9kb3duY2FzdChFeGNlcHRpb24qIHApIHsgcmV0dXJuIGR5bmFtaWNfY2FzdDxJTlZf
RkxBRyo+KHApOyB9IHN0YXRpYyBjb25zdCBJTlZfRkxBRyogX2Rvd25jYXN0KGNvbnN0IEV4Y2Vw
dGlvbiogcCkgeyByZXR1cm4gZHluYW1pY19jYXN0PGNvbnN0IElOVl9GTEFHKj4ocCk7IH0gdmly
dHVhbCBFeGNlcHRpb24qIF9PQl9jbG9uZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQgX09CX2luc2Vy
dEluQW55KEFueSYpOyB9OwpjbGFzcyBJTlRGX1JFUE9TIDogcHVibGljIFN5c3RlbUV4Y2VwdGlv
biB7IHB1YmxpYzogSU5URl9SRVBPUyhjb25zdCBjaGFyKiByID0gIiIpOyBJTlRGX1JFUE9TKFVM
b25nLCBDb21wbGV0aW9uU3RhdHVzKTsgSU5URl9SRVBPUyhjb25zdCBjaGFyKiwgVUxvbmcsIENv
bXBsZXRpb25TdGF0dXMpOyBJTlRGX1JFUE9TKGNvbnN0IElOVEZfUkVQT1MmKTsgdmlydHVhbCB2
b2lkIF9yYWlzZSgpIGNvbnN0IHsgdGhyb3cgKnRoaXM7IH0gdmlydHVhbCBjb25zdCBjaGFyKiBf
bmFtZSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9yZXBfaWQoKSBjb25zdDsgdmlydHVh
bCBjaGFyKiBfdG9fc3RyaW5nKCkgY29uc3Q7IHN0YXRpYyBJTlRGX1JFUE9TKiBfZG93bmNhc3Qo
RXhjZXB0aW9uKiBwKSB7IHJldHVybiBkeW5hbWljX2Nhc3Q8SU5URl9SRVBPUyo+KHApOyB9IHN0
YXRpYyBjb25zdCBJTlRGX1JFUE9TKiBfZG93bmNhc3QoY29uc3QgRXhjZXB0aW9uKiBwKSB7IHJl
dHVybiBkeW5hbWljX2Nhc3Q8Y29uc3QgSU5URl9SRVBPUyo+KHApOyB9IHZpcnR1YWwgRXhjZXB0
aW9uKiBfT0JfY2xvbmUoKSBjb25zdDsgdmlydHVhbCB2b2lkIF9PQl9pbnNlcnRJbkFueShBbnkm
KTsgfTsKY2xhc3MgQkFEX0NPTlRFWFQgOiBwdWJsaWMgU3lzdGVtRXhjZXB0aW9uIHsgcHVibGlj
OiBCQURfQ09OVEVYVChjb25zdCBjaGFyKiByID0gIiIpOyBCQURfQ09OVEVYVChVTG9uZywgQ29t
cGxldGlvblN0YXR1cyk7IEJBRF9DT05URVhUKGNvbnN0IGNoYXIqLCBVTG9uZywgQ29tcGxldGlv
blN0YXR1cyk7IEJBRF9DT05URVhUKGNvbnN0IEJBRF9DT05URVhUJik7IHZpcnR1YWwgdm9pZCBf
cmFpc2UoKSBjb25zdCB7IHRocm93ICp0aGlzOyB9IHZpcnR1YWwgY29uc3QgY2hhciogX25hbWUo
KSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfcmVwX2lkKCkgY29uc3Q7IHZpcnR1YWwgY2hh
ciogX3RvX3N0cmluZygpIGNvbnN0OyBzdGF0aWMgQkFEX0NPTlRFWFQqIF9kb3duY2FzdChFeGNl
cHRpb24qIHApIHsgcmV0dXJuIGR5bmFtaWNfY2FzdDxCQURfQ09OVEVYVCo+KHApOyB9IHN0YXRp
YyBjb25zdCBCQURfQ09OVEVYVCogX2Rvd25jYXN0KGNvbnN0IEV4Y2VwdGlvbiogcCkgeyByZXR1
cm4gZHluYW1pY19jYXN0PGNvbnN0IEJBRF9DT05URVhUKj4ocCk7IH0gdmlydHVhbCBFeGNlcHRp
b24qIF9PQl9jbG9uZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQgX09CX2luc2VydEluQW55KEFueSYp
OyB9OwpjbGFzcyBPQkpfQURBUFRFUiA6IHB1YmxpYyBTeXN0ZW1FeGNlcHRpb24geyBwdWJsaWM6
IE9CSl9BREFQVEVSKGNvbnN0IGNoYXIqIHIgPSAiIik7IE9CSl9BREFQVEVSKFVMb25nLCBDb21w
bGV0aW9uU3RhdHVzKTsgT0JKX0FEQVBURVIoY29uc3QgY2hhciosIFVMb25nLCBDb21wbGV0aW9u
U3RhdHVzKTsgT0JKX0FEQVBURVIoY29uc3QgT0JKX0FEQVBURVImKTsgdmlydHVhbCB2b2lkIF9y
YWlzZSgpIGNvbnN0IHsgdGhyb3cgKnRoaXM7IH0gdmlydHVhbCBjb25zdCBjaGFyKiBfbmFtZSgp
IGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9yZXBfaWQoKSBjb25zdDsgdmlydHVhbCBjaGFy
KiBfdG9fc3RyaW5nKCkgY29uc3Q7IHN0YXRpYyBPQkpfQURBUFRFUiogX2Rvd25jYXN0KEV4Y2Vw
dGlvbiogcCkgeyByZXR1cm4gZHluYW1pY19jYXN0PE9CSl9BREFQVEVSKj4ocCk7IH0gc3RhdGlj
IGNvbnN0IE9CSl9BREFQVEVSKiBfZG93bmNhc3QoY29uc3QgRXhjZXB0aW9uKiBwKSB7IHJldHVy
biBkeW5hbWljX2Nhc3Q8Y29uc3QgT0JKX0FEQVBURVIqPihwKTsgfSB2aXJ0dWFsIEV4Y2VwdGlv
biogX09CX2Nsb25lKCkgY29uc3Q7IHZpcnR1YWwgdm9pZCBfT0JfaW5zZXJ0SW5BbnkoQW55Jik7
IH07CmNsYXNzIERBVEFfQ09OVkVSU0lPTiA6IHB1YmxpYyBTeXN0ZW1FeGNlcHRpb24geyBwdWJs
aWM6IERBVEFfQ09OVkVSU0lPTihjb25zdCBjaGFyKiByID0gIiIpOyBEQVRBX0NPTlZFUlNJT04o
VUxvbmcsIENvbXBsZXRpb25TdGF0dXMpOyBEQVRBX0NPTlZFUlNJT04oY29uc3QgY2hhciosIFVM
b25nLCBDb21wbGV0aW9uU3RhdHVzKTsgREFUQV9DT05WRVJTSU9OKGNvbnN0IERBVEFfQ09OVkVS
U0lPTiYpOyB2aXJ0dWFsIHZvaWQgX3JhaXNlKCkgY29uc3QgeyB0aHJvdyAqdGhpczsgfSB2aXJ0
dWFsIGNvbnN0IGNoYXIqIF9uYW1lKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciogX3JlcF9p
ZCgpIGNvbnN0OyB2aXJ0dWFsIGNoYXIqIF90b19zdHJpbmcoKSBjb25zdDsgc3RhdGljIERBVEFf
Q09OVkVSU0lPTiogX2Rvd25jYXN0KEV4Y2VwdGlvbiogcCkgeyByZXR1cm4gZHluYW1pY19jYXN0
PERBVEFfQ09OVkVSU0lPTio+KHApOyB9IHN0YXRpYyBjb25zdCBEQVRBX0NPTlZFUlNJT04qIF9k
b3duY2FzdChjb25zdCBFeGNlcHRpb24qIHApIHsgcmV0dXJuIGR5bmFtaWNfY2FzdDxjb25zdCBE
QVRBX0NPTlZFUlNJT04qPihwKTsgfSB2aXJ0dWFsIEV4Y2VwdGlvbiogX09CX2Nsb25lKCkgY29u
c3Q7IHZpcnR1YWwgdm9pZCBfT0JfaW5zZXJ0SW5BbnkoQW55Jik7IH07CmNsYXNzIE9CSkVDVF9O
T1RfRVhJU1QgOiBwdWJsaWMgU3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBPQkpFQ1RfTk9UX0VY
SVNUKGNvbnN0IGNoYXIqIHIgPSAiIik7IE9CSkVDVF9OT1RfRVhJU1QoVUxvbmcsIENvbXBsZXRp
b25TdGF0dXMpOyBPQkpFQ1RfTk9UX0VYSVNUKGNvbnN0IGNoYXIqLCBVTG9uZywgQ29tcGxldGlv
blN0YXR1cyk7IE9CSkVDVF9OT1RfRVhJU1QoY29uc3QgT0JKRUNUX05PVF9FWElTVCYpOyB2aXJ0
dWFsIHZvaWQgX3JhaXNlKCkgY29uc3QgeyB0aHJvdyAqdGhpczsgfSB2aXJ0dWFsIGNvbnN0IGNo
YXIqIF9uYW1lKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciogX3JlcF9pZCgpIGNvbnN0OyB2
aXJ0dWFsIGNoYXIqIF90b19zdHJpbmcoKSBjb25zdDsgc3RhdGljIE9CSkVDVF9OT1RfRVhJU1Qq
IF9kb3duY2FzdChFeGNlcHRpb24qIHApIHsgcmV0dXJuIGR5bmFtaWNfY2FzdDxPQkpFQ1RfTk9U
X0VYSVNUKj4ocCk7IH0gc3RhdGljIGNvbnN0IE9CSkVDVF9OT1RfRVhJU1QqIF9kb3duY2FzdChj
b25zdCBFeGNlcHRpb24qIHApIHsgcmV0dXJuIGR5bmFtaWNfY2FzdDxjb25zdCBPQkpFQ1RfTk9U
X0VYSVNUKj4ocCk7IH0gdmlydHVhbCBFeGNlcHRpb24qIF9PQl9jbG9uZSgpIGNvbnN0OyB2aXJ0
dWFsIHZvaWQgX09CX2luc2VydEluQW55KEFueSYpOyB9OwpjbGFzcyBUUkFOU0FDVElPTl9SRVFV
SVJFRCA6IHB1YmxpYyBTeXN0ZW1FeGNlcHRpb24geyBwdWJsaWM6IFRSQU5TQUNUSU9OX1JFUVVJ
UkVEKGNvbnN0IGNoYXIqIHIgPSAiIik7IFRSQU5TQUNUSU9OX1JFUVVJUkVEKFVMb25nLCBDb21w
bGV0aW9uU3RhdHVzKTsgVFJBTlNBQ1RJT05fUkVRVUlSRUQoY29uc3QgY2hhciosIFVMb25nLCBD
b21wbGV0aW9uU3RhdHVzKTsgVFJBTlNBQ1RJT05fUkVRVUlSRUQoY29uc3QgVFJBTlNBQ1RJT05f
UkVRVUlSRUQmKTsgdmlydHVhbCB2b2lkIF9yYWlzZSgpIGNvbnN0IHsgdGhyb3cgKnRoaXM7IH0g
dmlydHVhbCBjb25zdCBjaGFyKiBfbmFtZSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9y
ZXBfaWQoKSBjb25zdDsgdmlydHVhbCBjaGFyKiBfdG9fc3RyaW5nKCkgY29uc3Q7IHN0YXRpYyBU
UkFOU0FDVElPTl9SRVFVSVJFRCogX2Rvd25jYXN0KEV4Y2VwdGlvbiogcCkgeyByZXR1cm4gZHlu
YW1pY19jYXN0PFRSQU5TQUNUSU9OX1JFUVVJUkVEKj4ocCk7IH0gc3RhdGljIGNvbnN0IFRSQU5T
QUNUSU9OX1JFUVVJUkVEKiBfZG93bmNhc3QoY29uc3QgRXhjZXB0aW9uKiBwKSB7IHJldHVybiBk
eW5hbWljX2Nhc3Q8Y29uc3QgVFJBTlNBQ1RJT05fUkVRVUlSRUQqPihwKTsgfSB2aXJ0dWFsIEV4
Y2VwdGlvbiogX09CX2Nsb25lKCkgY29uc3Q7IHZpcnR1YWwgdm9pZCBfT0JfaW5zZXJ0SW5Bbnko
QW55Jik7IH07CmNsYXNzIFRSQU5TQUNUSU9OX1JPTExFREJBQ0sgOiBwdWJsaWMgU3lzdGVtRXhj
ZXB0aW9uIHsgcHVibGljOiBUUkFOU0FDVElPTl9ST0xMRURCQUNLKGNvbnN0IGNoYXIqIHIgPSAi
Iik7IFRSQU5TQUNUSU9OX1JPTExFREJBQ0soVUxvbmcsIENvbXBsZXRpb25TdGF0dXMpOyBUUkFO
U0FDVElPTl9ST0xMRURCQUNLKGNvbnN0IGNoYXIqLCBVTG9uZywgQ29tcGxldGlvblN0YXR1cyk7
IFRSQU5TQUNUSU9OX1JPTExFREJBQ0soY29uc3QgVFJBTlNBQ1RJT05fUk9MTEVEQkFDSyYpOyB2
aXJ0dWFsIHZvaWQgX3JhaXNlKCkgY29uc3QgeyB0aHJvdyAqdGhpczsgfSB2aXJ0dWFsIGNvbnN0
IGNoYXIqIF9uYW1lKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciogX3JlcF9pZCgpIGNvbnN0
OyB2aXJ0dWFsIGNoYXIqIF90b19zdHJpbmcoKSBjb25zdDsgc3RhdGljIFRSQU5TQUNUSU9OX1JP
TExFREJBQ0sqIF9kb3duY2FzdChFeGNlcHRpb24qIHApIHsgcmV0dXJuIGR5bmFtaWNfY2FzdDxU
UkFOU0FDVElPTl9ST0xMRURCQUNLKj4ocCk7IH0gc3RhdGljIGNvbnN0IFRSQU5TQUNUSU9OX1JP
TExFREJBQ0sqIF9kb3duY2FzdChjb25zdCBFeGNlcHRpb24qIHApIHsgcmV0dXJuIGR5bmFtaWNf
Y2FzdDxjb25zdCBUUkFOU0FDVElPTl9ST0xMRURCQUNLKj4ocCk7IH0gdmlydHVhbCBFeGNlcHRp
b24qIF9PQl9jbG9uZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQgX09CX2luc2VydEluQW55KEFueSYp
OyB9OwpjbGFzcyBJTlZBTElEX1RSQU5TQUNUSU9OIDogcHVibGljIFN5c3RlbUV4Y2VwdGlvbiB7
IHB1YmxpYzogSU5WQUxJRF9UUkFOU0FDVElPTihjb25zdCBjaGFyKiByID0gIiIpOyBJTlZBTElE
X1RSQU5TQUNUSU9OKFVMb25nLCBDb21wbGV0aW9uU3RhdHVzKTsgSU5WQUxJRF9UUkFOU0FDVElP
Tihjb25zdCBjaGFyKiwgVUxvbmcsIENvbXBsZXRpb25TdGF0dXMpOyBJTlZBTElEX1RSQU5TQUNU
SU9OKGNvbnN0IElOVkFMSURfVFJBTlNBQ1RJT04mKTsgdmlydHVhbCB2b2lkIF9yYWlzZSgpIGNv
bnN0IHsgdGhyb3cgKnRoaXM7IH0gdmlydHVhbCBjb25zdCBjaGFyKiBfbmFtZSgpIGNvbnN0OyB2
aXJ0dWFsIGNvbnN0IGNoYXIqIF9yZXBfaWQoKSBjb25zdDsgdmlydHVhbCBjaGFyKiBfdG9fc3Ry
aW5nKCkgY29uc3Q7IHN0YXRpYyBJTlZBTElEX1RSQU5TQUNUSU9OKiBfZG93bmNhc3QoRXhjZXB0
aW9uKiBwKSB7IHJldHVybiBkeW5hbWljX2Nhc3Q8SU5WQUxJRF9UUkFOU0FDVElPTio+KHApOyB9
IHN0YXRpYyBjb25zdCBJTlZBTElEX1RSQU5TQUNUSU9OKiBfZG93bmNhc3QoY29uc3QgRXhjZXB0
aW9uKiBwKSB7IHJldHVybiBkeW5hbWljX2Nhc3Q8Y29uc3QgSU5WQUxJRF9UUkFOU0FDVElPTio+
KHApOyB9IHZpcnR1YWwgRXhjZXB0aW9uKiBfT0JfY2xvbmUoKSBjb25zdDsgdmlydHVhbCB2b2lk
IF9PQl9pbnNlcnRJbkFueShBbnkmKTsgfTsKY2xhc3MgSU5WX1BPTElDWSA6IHB1YmxpYyBTeXN0
ZW1FeGNlcHRpb24geyBwdWJsaWM6IElOVl9QT0xJQ1koY29uc3QgY2hhciogciA9ICIiKTsgSU5W
X1BPTElDWShVTG9uZywgQ29tcGxldGlvblN0YXR1cyk7IElOVl9QT0xJQ1koY29uc3QgY2hhcios
IFVMb25nLCBDb21wbGV0aW9uU3RhdHVzKTsgSU5WX1BPTElDWShjb25zdCBJTlZfUE9MSUNZJik7
IHZpcnR1YWwgdm9pZCBfcmFpc2UoKSBjb25zdCB7IHRocm93ICp0aGlzOyB9IHZpcnR1YWwgY29u
c3QgY2hhciogX25hbWUoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfcmVwX2lkKCkgY29u
c3Q7IHZpcnR1YWwgY2hhciogX3RvX3N0cmluZygpIGNvbnN0OyBzdGF0aWMgSU5WX1BPTElDWSog
X2Rvd25jYXN0KEV4Y2VwdGlvbiogcCkgeyByZXR1cm4gZHluYW1pY19jYXN0PElOVl9QT0xJQ1kq
PihwKTsgfSBzdGF0aWMgY29uc3QgSU5WX1BPTElDWSogX2Rvd25jYXN0KGNvbnN0IEV4Y2VwdGlv
biogcCkgeyByZXR1cm4gZHluYW1pY19jYXN0PGNvbnN0IElOVl9QT0xJQ1kqPihwKTsgfSB2aXJ0
dWFsIEV4Y2VwdGlvbiogX09CX2Nsb25lKCkgY29uc3Q7IHZpcnR1YWwgdm9pZCBfT0JfaW5zZXJ0
SW5BbnkoQW55Jik7IH07CmNsYXNzIENPREVTRVRfSU5DT01QQVRJQkxFIDogcHVibGljIFN5c3Rl
bUV4Y2VwdGlvbiB7IHB1YmxpYzogQ09ERVNFVF9JTkNPTVBBVElCTEUoY29uc3QgY2hhciogciA9
ICIiKTsgQ09ERVNFVF9JTkNPTVBBVElCTEUoVUxvbmcsIENvbXBsZXRpb25TdGF0dXMpOyBDT0RF
U0VUX0lOQ09NUEFUSUJMRShjb25zdCBjaGFyKiwgVUxvbmcsIENvbXBsZXRpb25TdGF0dXMpOyBD
T0RFU0VUX0lOQ09NUEFUSUJMRShjb25zdCBDT0RFU0VUX0lOQ09NUEFUSUJMRSYpOyB2aXJ0dWFs
IHZvaWQgX3JhaXNlKCkgY29uc3QgeyB0aHJvdyAqdGhpczsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIq
IF9uYW1lKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciogX3JlcF9pZCgpIGNvbnN0OyB2aXJ0
dWFsIGNoYXIqIF90b19zdHJpbmcoKSBjb25zdDsgc3RhdGljIENPREVTRVRfSU5DT01QQVRJQkxF
KiBfZG93bmNhc3QoRXhjZXB0aW9uKiBwKSB7IHJldHVybiBkeW5hbWljX2Nhc3Q8Q09ERVNFVF9J
TkNPTVBBVElCTEUqPihwKTsgfSBzdGF0aWMgY29uc3QgQ09ERVNFVF9JTkNPTVBBVElCTEUqIF9k
b3duY2FzdChjb25zdCBFeGNlcHRpb24qIHApIHsgcmV0dXJuIGR5bmFtaWNfY2FzdDxjb25zdCBD
T0RFU0VUX0lOQ09NUEFUSUJMRSo+KHApOyB9IHZpcnR1YWwgRXhjZXB0aW9uKiBfT0JfY2xvbmUo
KSBjb25zdDsgdmlydHVhbCB2b2lkIF9PQl9pbnNlcnRJbkFueShBbnkmKTsgfTsKY2xhc3MgUkVC
SU5EIDogcHVibGljIFN5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzogUkVCSU5EKGNvbnN0IGNoYXIq
IHIgPSAiIik7IFJFQklORChVTG9uZywgQ29tcGxldGlvblN0YXR1cyk7IFJFQklORChjb25zdCBj
aGFyKiwgVUxvbmcsIENvbXBsZXRpb25TdGF0dXMpOyBSRUJJTkQoY29uc3QgUkVCSU5EJik7IHZp
cnR1YWwgdm9pZCBfcmFpc2UoKSBjb25zdCB7IHRocm93ICp0aGlzOyB9IHZpcnR1YWwgY29uc3Qg
Y2hhciogX25hbWUoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfcmVwX2lkKCkgY29uc3Q7
IHZpcnR1YWwgY2hhciogX3RvX3N0cmluZygpIGNvbnN0OyBzdGF0aWMgUkVCSU5EKiBfZG93bmNh
c3QoRXhjZXB0aW9uKiBwKSB7IHJldHVybiBkeW5hbWljX2Nhc3Q8UkVCSU5EKj4ocCk7IH0gc3Rh
dGljIGNvbnN0IFJFQklORCogX2Rvd25jYXN0KGNvbnN0IEV4Y2VwdGlvbiogcCkgeyByZXR1cm4g
ZHluYW1pY19jYXN0PGNvbnN0IFJFQklORCo+KHApOyB9IHZpcnR1YWwgRXhjZXB0aW9uKiBfT0Jf
Y2xvbmUoKSBjb25zdDsgdmlydHVhbCB2b2lkIF9PQl9pbnNlcnRJbkFueShBbnkmKTsgfTsKY2xh
c3MgVElNRU9VVCA6IHB1YmxpYyBTeXN0ZW1FeGNlcHRpb24geyBwdWJsaWM6IFRJTUVPVVQoY29u
c3QgY2hhciogciA9ICIiKTsgVElNRU9VVChVTG9uZywgQ29tcGxldGlvblN0YXR1cyk7IFRJTUVP
VVQoY29uc3QgY2hhciosIFVMb25nLCBDb21wbGV0aW9uU3RhdHVzKTsgVElNRU9VVChjb25zdCBU
SU1FT1VUJik7IHZpcnR1YWwgdm9pZCBfcmFpc2UoKSBjb25zdCB7IHRocm93ICp0aGlzOyB9IHZp
cnR1YWwgY29uc3QgY2hhciogX25hbWUoKSBjb25zdDsgdmlydHVhbCBjb25zdCBjaGFyKiBfcmVw
X2lkKCkgY29uc3Q7IHZpcnR1YWwgY2hhciogX3RvX3N0cmluZygpIGNvbnN0OyBzdGF0aWMgVElN
RU9VVCogX2Rvd25jYXN0KEV4Y2VwdGlvbiogcCkgeyByZXR1cm4gZHluYW1pY19jYXN0PFRJTUVP
VVQqPihwKTsgfSBzdGF0aWMgY29uc3QgVElNRU9VVCogX2Rvd25jYXN0KGNvbnN0IEV4Y2VwdGlv
biogcCkgeyByZXR1cm4gZHluYW1pY19jYXN0PGNvbnN0IFRJTUVPVVQqPihwKTsgfSB2aXJ0dWFs
IEV4Y2VwdGlvbiogX09CX2Nsb25lKCkgY29uc3Q7IHZpcnR1YWwgdm9pZCBfT0JfaW5zZXJ0SW5B
bnkoQW55Jik7IH07CmNsYXNzIFRSQU5TQUNUSU9OX1VOQVZBSUxBQkxFIDogcHVibGljIFN5c3Rl
bUV4Y2VwdGlvbiB7IHB1YmxpYzogVFJBTlNBQ1RJT05fVU5BVkFJTEFCTEUoY29uc3QgY2hhciog
ciA9ICIiKTsgVFJBTlNBQ1RJT05fVU5BVkFJTEFCTEUoVUxvbmcsIENvbXBsZXRpb25TdGF0dXMp
OyBUUkFOU0FDVElPTl9VTkFWQUlMQUJMRShjb25zdCBjaGFyKiwgVUxvbmcsIENvbXBsZXRpb25T
dGF0dXMpOyBUUkFOU0FDVElPTl9VTkFWQUlMQUJMRShjb25zdCBUUkFOU0FDVElPTl9VTkFWQUlM
QUJMRSYpOyB2aXJ0dWFsIHZvaWQgX3JhaXNlKCkgY29uc3QgeyB0aHJvdyAqdGhpczsgfSB2aXJ0
dWFsIGNvbnN0IGNoYXIqIF9uYW1lKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgY2hhciogX3JlcF9p
ZCgpIGNvbnN0OyB2aXJ0dWFsIGNoYXIqIF90b19zdHJpbmcoKSBjb25zdDsgc3RhdGljIFRSQU5T
QUNUSU9OX1VOQVZBSUxBQkxFKiBfZG93bmNhc3QoRXhjZXB0aW9uKiBwKSB7IHJldHVybiBkeW5h
bWljX2Nhc3Q8VFJBTlNBQ1RJT05fVU5BVkFJTEFCTEUqPihwKTsgfSBzdGF0aWMgY29uc3QgVFJB
TlNBQ1RJT05fVU5BVkFJTEFCTEUqIF9kb3duY2FzdChjb25zdCBFeGNlcHRpb24qIHApIHsgcmV0
dXJuIGR5bmFtaWNfY2FzdDxjb25zdCBUUkFOU0FDVElPTl9VTkFWQUlMQUJMRSo+KHApOyB9IHZp
cnR1YWwgRXhjZXB0aW9uKiBfT0JfY2xvbmUoKSBjb25zdDsgdmlydHVhbCB2b2lkIF9PQl9pbnNl
cnRJbkFueShBbnkmKTsgfTsKY2xhc3MgVFJBTlNBQ1RJT05fTU9ERSA6IHB1YmxpYyBTeXN0ZW1F
eGNlcHRpb24geyBwdWJsaWM6IFRSQU5TQUNUSU9OX01PREUoY29uc3QgY2hhciogciA9ICIiKTsg
VFJBTlNBQ1RJT05fTU9ERShVTG9uZywgQ29tcGxldGlvblN0YXR1cyk7IFRSQU5TQUNUSU9OX01P
REUoY29uc3QgY2hhciosIFVMb25nLCBDb21wbGV0aW9uU3RhdHVzKTsgVFJBTlNBQ1RJT05fTU9E
RShjb25zdCBUUkFOU0FDVElPTl9NT0RFJik7IHZpcnR1YWwgdm9pZCBfcmFpc2UoKSBjb25zdCB7
IHRocm93ICp0aGlzOyB9IHZpcnR1YWwgY29uc3QgY2hhciogX25hbWUoKSBjb25zdDsgdmlydHVh
bCBjb25zdCBjaGFyKiBfcmVwX2lkKCkgY29uc3Q7IHZpcnR1YWwgY2hhciogX3RvX3N0cmluZygp
IGNvbnN0OyBzdGF0aWMgVFJBTlNBQ1RJT05fTU9ERSogX2Rvd25jYXN0KEV4Y2VwdGlvbiogcCkg
eyByZXR1cm4gZHluYW1pY19jYXN0PFRSQU5TQUNUSU9OX01PREUqPihwKTsgfSBzdGF0aWMgY29u
c3QgVFJBTlNBQ1RJT05fTU9ERSogX2Rvd25jYXN0KGNvbnN0IEV4Y2VwdGlvbiogcCkgeyByZXR1
cm4gZHluYW1pY19jYXN0PGNvbnN0IFRSQU5TQUNUSU9OX01PREUqPihwKTsgfSB2aXJ0dWFsIEV4
Y2VwdGlvbiogX09CX2Nsb25lKCkgY29uc3Q7IHZpcnR1YWwgdm9pZCBfT0JfaW5zZXJ0SW5Bbnko
QW55Jik7IH07CmNsYXNzIEJBRF9RT1MgOiBwdWJsaWMgU3lzdGVtRXhjZXB0aW9uIHsgcHVibGlj
OiBCQURfUU9TKGNvbnN0IGNoYXIqIHIgPSAiIik7IEJBRF9RT1MoVUxvbmcsIENvbXBsZXRpb25T
dGF0dXMpOyBCQURfUU9TKGNvbnN0IGNoYXIqLCBVTG9uZywgQ29tcGxldGlvblN0YXR1cyk7IEJB
RF9RT1MoY29uc3QgQkFEX1FPUyYpOyB2aXJ0dWFsIHZvaWQgX3JhaXNlKCkgY29uc3QgeyB0aHJv
dyAqdGhpczsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9uYW1lKCkgY29uc3Q7IHZpcnR1YWwgY29u
c3QgY2hhciogX3JlcF9pZCgpIGNvbnN0OyB2aXJ0dWFsIGNoYXIqIF90b19zdHJpbmcoKSBjb25z
dDsgc3RhdGljIEJBRF9RT1MqIF9kb3duY2FzdChFeGNlcHRpb24qIHApIHsgcmV0dXJuIGR5bmFt
aWNfY2FzdDxCQURfUU9TKj4ocCk7IH0gc3RhdGljIGNvbnN0IEJBRF9RT1MqIF9kb3duY2FzdChj
b25zdCBFeGNlcHRpb24qIHApIHsgcmV0dXJuIGR5bmFtaWNfY2FzdDxjb25zdCBCQURfUU9TKj4o
cCk7IH0gdmlydHVhbCBFeGNlcHRpb24qIF9PQl9jbG9uZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQg
X09CX2luc2VydEluQW55KEFueSYpOyB9OwoKCgoKY2xhc3MgVW5rbm93blVzZXJFeGNlcHRpb24g
OiBwdWJsaWMgVXNlckV4Y2VwdGlvbgp7CiAgICBBbnkqIGFueV87CgpwdWJsaWM6CgoKCgogICAg
VW5rbm93blVzZXJFeGNlcHRpb24oKTsKICAgIFVua25vd25Vc2VyRXhjZXB0aW9uKGNvbnN0IFVu
a25vd25Vc2VyRXhjZXB0aW9uJik7CiAgICBVbmtub3duVXNlckV4Y2VwdGlvbihjb25zdCBBbnkm
KTsKICAgIFVua25vd25Vc2VyRXhjZXB0aW9uJiBvcGVyYXRvcj0oY29uc3QgVW5rbm93blVzZXJF
eGNlcHRpb24mKTsKICAgIH5Vbmtub3duVXNlckV4Y2VwdGlvbigpOwoKICAgIEFueSYgZXhjZXB0
aW9uKCk7CgogICAgc3RhdGljIFVua25vd25Vc2VyRXhjZXB0aW9uKiBfZG93bmNhc3QoRXhjZXB0
aW9uKiBwKQogICAgeyByZXR1cm4gZHluYW1pY19jYXN0PFVua25vd25Vc2VyRXhjZXB0aW9uKj4o
cCk7IH0KICAgIHN0YXRpYyBjb25zdCBVbmtub3duVXNlckV4Y2VwdGlvbioKICAgIF9kb3duY2Fz
dChjb25zdCBFeGNlcHRpb24qIHApCiAgICB7IHJldHVybiBkeW5hbWljX2Nhc3Q8Y29uc3QgVW5r
bm93blVzZXJFeGNlcHRpb24qPihwKTsgfQogICAgdmlydHVhbCB2b2lkIF9yYWlzZSgpIGNvbnN0
IHsgdGhyb3cgKnRoaXM7IH0KICAgIHZpcnR1YWwgY29uc3QgY2hhciogX25hbWUoKSBjb25zdCB7
IHJldHVybiAiVW5rbm93blVzZXJFeGNlcHRpb24iOyB9CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IF9yZXBfaWQoKSBjb25zdAogICAgeyByZXR1cm4gIklETDpvbWcub3JnL0NPUkJBL1Vua25vd25V
c2VyRXhjZXB0aW9uOjEuMCI7IH0KCgoKCiAgICB2aXJ0dWFsIGNoYXIqIF90b19zdHJpbmcoKSBj
b25zdAogICAgeyByZXR1cm4gX09CX2RlZmF1bHRUb1N0cmluZygiQ09SQkE6OlVua25vd25Vc2Vy
RXhjZXB0aW9uIik7IH0KCgoKCgogICAgdmlydHVhbCBFeGNlcHRpb24qIF9PQl9jbG9uZSgpIGNv
bnN0CiAgICB7IHJldHVybiBuZXcgVW5rbm93blVzZXJFeGNlcHRpb24oKnRoaXMpOyB9CiAgICB2
aXJ0dWFsIHZvaWQgX09CX2luc2VydEluQW55KEFueSYpOwogICAgdmlydHVhbCB2b2lkIF9PQl9t
YXJzaGFsKE9COjpPdXRwdXRTdHJlYW1JbXBsKikgY29uc3Q7CiAgICBzdGF0aWMgdm9pZCBfT0Jf
dW5tYXJzaGFsKFVua25vd25Vc2VyRXhjZXB0aW9uJiwgT0I6OklucHV0U3RyZWFtSW1wbCopOwp9
OwoKfQoKCgoKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgQ09SQkE6OlVua25vd25Vc2Vy
RXhjZXB0aW9uKik7CnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpV
bmtub3duVXNlckV4Y2VwdGlvbiYpOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBD
T1JCQTo6QW55JiwgQ09SQkE6OlVua25vd25Vc2VyRXhjZXB0aW9uKiYpOwoKaW5saW5lIHZvaWQK
b3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImIGFueSwgQ09SQkE6OlVua25vd25Vc2VyRXhjZXB0
aW9uKiB2YWwpCnsKICAgIGFueS5pbm91dCgpIDw8PSB2YWw7Cn0KCmlubGluZSB2b2lkCm9wZXJh
dG9yPDw9KENPUkJBOjpBbnlfdmFyJiBhbnksIGNvbnN0IENPUkJBOjpVbmtub3duVXNlckV4Y2Vw
dGlvbiYgdmFsKQp7CiAgICBhbnkuaW5vdXQoKSA8PD0gdmFsOwp9CgppbmxpbmUgQ09SQkE6OkJv
b2xlYW4Kb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueV92YXImIGFueSwgQ09SQkE6OlVua25v
d25Vc2VyRXhjZXB0aW9uKiYgdmFsKQp7CiAgICByZXR1cm4gYW55LmluKCkgPj49IHZhbDsKfQoK
bmFtZXNwYWNlIE9CCnsKCmVudW0gVk1DSUQKewogICAgT01HVk1DSUQgPSAweDRmNGQwMDAwLAog
ICAgT09DVk1DSUQgPSAweDRmNGYwMDAwCn07CiMgNDI1ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUv
T0IvRXhjZXB0LmgiCmVudW0gTWlub3JJbml0aWFsaXplCnsKCgoKICAgIE1pbm9yT1JCRGVzdHJv
eWVkID0gMSB8IE9PQ1ZNQ0lECn07CiMgNDQwICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvRXhj
ZXB0LmgiCmVudW0gTWlub3JOb0ltcGxlbWVudAp7CgoKCiAgICBNaW5vck1pc3NpbmdMb2NhbFZh
bHVlSW1wbGVtZW50YXRpb24gPSAxIHwgT01HVk1DSUQsCiAgICBNaW5vckluY29tcGF0aWJsZVZh
bHVlSW1wbGVtZW50YXRpb25WZXJzaW9uID0gMiB8IE9NR1ZNQ0lECn07CiMgNDU2ICIvaG9tZS9t
YXR0L29iL2luY2x1ZGUvT0IvRXhjZXB0LmgiCmVudW0gTWlub3JPYmplY3ROb3RFeGlzdAp7CgoK
CiAgICBNaW5vclVucmVnaXN0ZXJlZFZhbHVlID0gMSB8IE9NR1ZNQ0lECn07CiMgNDcxICIvaG9t
ZS9tYXR0L29iL2luY2x1ZGUvT0IvRXhjZXB0LmgiCmVudW0gTWlub3JCYWRQYXJhbQp7CgoKCiAg
ICBNaW5vclZhbHVlRmFjdG9yeUVycm9yID0gMSB8IE9NR1ZNQ0lELAogICAgTWlub3JSZXBvc2l0
b3J5SWRFeGlzdHMgPSAyIHwgT01HVk1DSUQsCiAgICBNaW5vck5hbWVFeGlzdHMgPSAzIHwgT01H
Vk1DSUQsCiAgICBNaW5vckludmFsaWRDb250YWluZXIgPSA0IHwgT01HVk1DSUQsCiAgICBNaW5v
ck5hbWVDbGFzaEluSW5oZXJpdGVkQ29udGV4dCA9IDUgfCBPTUdWTUNJRCwKICAgIE1pbm9yQmFk
QWJzdHJhY3RJbnRlcmZhY2VUeXBlID0gNiB8IE9NR1ZNQ0lELAogICAgTWlub3JCYWRTY2hlbWVO
YW1lID0gNyB8IE9NR1ZNQ0lELAogICAgTWlub3JCYWRBZGRyZXNzID0gOCB8IE9NR1ZNQ0lELAog
ICAgTWlub3JCYWRTY2hlbWVTcGVjaWZpY1BhcnQgPSA5IHwgT01HVk1DSUQsCiAgICBNaW5vck90
aGVyID0gMTAgfCBPTUdWTUNJRCwKICAgIE1pbm9ySW52YWxpZEFic3RyYWN0SW50ZXJmYWNlSW5o
ZXJpdGFuY2UgPSAxMSB8IE9NR1ZNQ0lELAogICAgTWlub3JJbnZhbGlkVmFsdWVJbmhlcml0YW5j
ZSA9IDEyIHwgT01HVk1DSUQsCgoKCgogICAgTWlub3JJbnZhbGlkU2VydmljZUNvbnRleHRJZCA9
IDIwIHwgT01HVk1DSUQsCiAgICBNaW5vck9iamVjdElzTnVsbCA9IDIxIHwgT01HVk1DSUQsCiAg
ICBNaW5vckludmFsaWRDb21wb25lbnRJZCA9IDIyIHwgT01HVk1DSUQsCiAgICBNaW5vckludmFs
aWRQcm9maWxlSWQgPSAyMyB8IE9NR1ZNQ0lELAoKCgoKICAgIE1pbm9yRHVwbGljYXRlRGVjbGFy
YXRvciA9IDEgfCBPT0NWTUNJRCwKICAgIE1pbm9ySW52YWxpZFZhbHVlTW9kaWZpZXIgPSAyIHwg
T09DVk1DSUQsCiAgICBNaW5vckR1cGxpY2F0ZVZhbHVlSW5pdCA9IDMgfCBPT0NWTUNJRCwKICAg
IE1pbm9yQWJzdHJhY3RWYWx1ZUluaXQgPSA0IHwgT09DVk1DSUQsCiAgICBNaW5vckR1cGxpY2F0
ZUJhc2VUeXBlID0gNSB8IE9PQ1ZNQ0lELAogICAgTWlub3JTaW5nbGVUaHJlYWRlZE9ubHkgPSA2
IHwgT09DVk1DSUQsCiAgICBNaW5vck5hbWVSZWRlZmluaXRpb25JbkltbWVkaWF0ZVNjb3BlID0g
NyB8IE9PQ1ZNQ0lELAogICAgTWlub3JJbnZhbGlkVmFsdWVCb3hUeXBlID0gOCB8IE9PQ1ZNQ0lE
Cn07CiMgNTE3ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvRXhjZXB0LmgiCmVudW0gTWlub3JC
YWRJbnZPcmRlcgp7CgoKCiAgICBNaW5vckRlcGVuZGVuY3lQcmV2ZW50c0Rlc3RydWN0aW9uID0g
MSB8IE9NR1ZNQ0lELAogICAgTWlub3JJbmRlc3RydWN0aWJsZU9iamVjdCA9IDIgfCBPTUdWTUNJ
RCwKICAgIE1pbm9yRGVzdHJveVdvdWxkQmxvY2sgPSAzIHwgT01HVk1DSUQsCiAgICBNaW5vclNo
dXRkb3duQ2FsbGVkID0gNCB8IE9NR1ZNQ0lELAoKCgoKICAgIE1pbm9ySW52YWxpZFBJQ2FsbCA9
IDEwIHwgT01HVk1DSUQsCiAgICBNaW5vclNlcnZpY2VDb250ZXh0RXhpc3RzID0gMTEgfCBPTUdW
TUNJRCwKICAgIE1pbm9yUG9saWN5RmFjdG9yeUV4aXN0cyA9IDEyIHwgT01HVk1DSUQsCgoKCgog
ICAgTWlub3JCYWRDb25jTW9kZWwgPSAxIHwgT09DVk1DSUQsCiAgICBNaW5vck9SQlJ1bm5pbmcg
PSAyIHwgT09DVk1DSUQsCiAgICBNaW5vclJlcXVlc3RBbHJlYWR5U2VudCA9IDMgfCBPT0NWTUNJ
RCwKICAgIE1pbm9yUmVxdWVzdE5vdFNlbnQgPSA0IHwgT09DVk1DSUQsCiAgICBNaW5vclJlc3Bv
bnNlQWxyZWFkeVJlY2VpdmVkID0gNSB8IE9PQ1ZNQ0lECn07CiMgNTUxICIvaG9tZS9tYXR0L29i
L2luY2x1ZGUvT0IvRXhjZXB0LmgiCmVudW0gTWlub3JDb21tRmFpbHVyZQp7CiMgNTYxICIvaG9t
ZS9tYXR0L29iL2luY2x1ZGUvT0IvRXhjZXB0LmgiCiAgICBNaW5vclJlY3YgPSAxIHwgT09DVk1D
SUQsCiAgICBNaW5vclNlbmQgPSAyIHwgT09DVk1DSUQsCiAgICBNaW5vclJlY3ZaZXJvID0gMyB8
IE9PQ1ZNQ0lELAogICAgTWlub3JTZW5kWmVybyA9IDQgfCBPT0NWTUNJRCwKICAgIE1pbm9yU29j
a2V0ID0gNSB8IE9PQ1ZNQ0lELAogICAgTWlub3JTZXRzb2Nrb3B0ID0gNiB8IE9PQ1ZNQ0lELAog
ICAgTWlub3JHZXRzb2Nrb3B0ID0gNyB8IE9PQ1ZNQ0lELAogICAgTWlub3JCaW5kID0gOCB8IE9P
Q1ZNQ0lELAogICAgTWlub3JMaXN0ZW4gPSA5IHwgT09DVk1DSUQsCiAgICBNaW5vckNvbm5lY3Qg
PSAxMCB8IE9PQ1ZNQ0lELAogICAgTWlub3JBY2NlcHQgPSAxMSB8IE9PQ1ZNQ0lELAogICAgTWlu
b3JTZWxlY3QgPSAxMiB8IE9PQ1ZNQ0lELAogICAgTWlub3JTZXRTb1RpbWVvdXQgPSAyNiB8IE9P
Q1ZNQ0lELAoKICAgIE1pbm9yR2V0aG9zdG5hbWUgPSAxMyB8IE9PQ1ZNQ0lELAogICAgTWlub3JH
ZXRob3N0YnluYW1lID0gMTQgfCBPT0NWTUNJRCwKCiAgICBNaW5vcldTQVN0YXJ0dXAgPSAxNSB8
IE9PQ1ZNQ0lELAogICAgTWlub3JXU0FDbGVhbnVwID0gMTYgfCBPT0NWTUNJRCwKCiAgICBNaW5v
ck5vR0lPUCA9IDE3IHwgT09DVk1DSUQsCiAgICBNaW5vclVua25vd25NZXNzYWdlID0gMTggfCBP
T0NWTUNJRCwKICAgIE1pbm9yV3JvbmdNZXNzYWdlID0gMTkgfCBPT0NWTUNJRCwKICAgIE1pbm9y
TWVzc2FnZUVycm9yID0gMjEgfCBPT0NWTUNJRCwKICAgIE1pbm9yRnJhZ21lbnQgPSAyMiB8IE9P
Q1ZNQ0lELAogICAgTWlub3JVbmtub3duUmVxSWQgPSAyNCB8IE9PQ1ZNQ0lELAogICAgTWlub3JW
ZXJzaW9uID0gMjUgfCBPT0NWTUNJRCwKCiAgICBNaW5vclBpcGUgPSAyMyB8IE9PQ1ZNQ0lELAoK
CgoKICAgIE1pbm9yRGVwcmVjYXRlZENsb3NlQ29ubmVjdGlvbiA9IDIwIHwgT09DVk1DSUQKfTsK
IyA2MDQgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9FeGNlcHQuaCIKZW51bSBNaW5vckludGZS
ZXBvcwp7CiMgNjE0ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvRXhjZXB0LmgiCiAgICBNaW5v
ck5vSW50ZlJlcG9zID0gMSB8IE9PQ1ZNQ0lELAogICAgTWlub3JMb29rdXBBbWJpZ3VvdXMgPSAy
IHwgT09DVk1DSUQsCiAgICBNaW5vcklsbGVnYWxSZWN1cnNpb24gPSAzIHwgT09DVk1DSUQsCiAg
ICBNaW5vck5vRW50cnkgPSA0IHwgT09DVk1DSUQKfTsKIyA2MjcgIi9ob21lL21hdHQvb2IvaW5j
bHVkZS9PQi9FeGNlcHQuaCIKZW51bSBNaW5vck1hcnNoYWwKewoKCgogICAgTWlub3JOb1ZhbHVl
RmFjdG9yeSA9IDEgfCBPTUdWTUNJRCwKCgoKCiAgICBNaW5vclJlYWRPdmVyZmxvdyA9IDEgfCBP
T0NWTUNJRCwKICAgIE1pbm9yUmVhZEJvb2xlYW5PdmVyZmxvdyA9IDIgfCBPT0NWTUNJRCwKICAg
IE1pbm9yUmVhZENoYXJPdmVyZmxvdyA9IDMgfCBPT0NWTUNJRCwKICAgIE1pbm9yUmVhZFdDaGFy
T3ZlcmZsb3cgPSA0IHwgT09DVk1DSUQsCiAgICBNaW5vclJlYWRPY3RldE92ZXJmbG93ID0gNSB8
IE9PQ1ZNQ0lELAogICAgTWlub3JSZWFkU2hvcnRPdmVyZmxvdyA9IDYgfCBPT0NWTUNJRCwKICAg
IE1pbm9yUmVhZFVTaG9ydE92ZXJmbG93ID0gNyB8IE9PQ1ZNQ0lELAogICAgTWlub3JSZWFkTG9u
Z092ZXJmbG93ID0gOCB8IE9PQ1ZNQ0lELAogICAgTWlub3JSZWFkVUxvbmdPdmVyZmxvdyA9IDkg
fCBPT0NWTUNJRCwKICAgIE1pbm9yUmVhZExvbmdMb25nT3ZlcmZsb3cgPSAxMCB8IE9PQ1ZNQ0lE
LAogICAgTWlub3JSZWFkVUxvbmdMb25nT3ZlcmZsb3cgPSAxMSB8IE9PQ1ZNQ0lELAogICAgTWlu
b3JSZWFkRmxvYXRPdmVyZmxvdyA9IDEyIHwgT09DVk1DSUQsCiAgICBNaW5vclJlYWREb3VibGVP
dmVyZmxvdyA9IDEzIHwgT09DVk1DSUQsCiAgICBNaW5vclJlYWRMb25nRG91YmxlT3ZlcmZsb3cg
PSAxNCB8IE9PQ1ZNQ0lELAogICAgTWlub3JSZWFkU3RyaW5nT3ZlcmZsb3cgPSAxNSB8IE9PQ1ZN
Q0lELAogICAgTWlub3JSZWFkU3RyaW5nWmVyb0xlbmd0aCA9IDE2IHwgT09DVk1DSUQsCiAgICBN
aW5vclJlYWRTdHJpbmdOdWxsQ2hhciA9IDE3IHwgT09DVk1DSUQsCiAgICBNaW5vclJlYWRTdHJp
bmdOb1Rlcm1pbmF0b3IgPSAxOCB8IE9PQ1ZNQ0lELAogICAgTWlub3JSZWFkV1N0cmluZ092ZXJm
bG93ID0gMTkgfCBPT0NWTUNJRCwKICAgIE1pbm9yUmVhZFdTdHJpbmdaZXJvTGVuZ3RoID0gMjAg
fCBPT0NWTUNJRCwKICAgIE1pbm9yUmVhZFdTdHJpbmdOdWxsV0NoYXIgPSAyMSB8IE9PQ1ZNQ0lE
LAogICAgTWlub3JSZWFkV1N0cmluZ05vVGVybWluYXRvciA9IDIyIHwgT09DVk1DSUQsCiAgICBN
aW5vclJlYWRGaXhlZE92ZXJmbG93ID0gMjMgfCBPT0NWTUNJRCwKICAgIE1pbm9yUmVhZEZpeGVk
SW52YWxpZCA9IDI0IHwgT09DVk1DSUQsCiAgICBNaW5vclJlYWRCb29sZWFuQXJyYXlPdmVyZmxv
dyA9IDI1IHwgT09DVk1DSUQsCiAgICBNaW5vclJlYWRDaGFyQXJyYXlPdmVyZmxvdyA9IDI2IHwg
T09DVk1DSUQsCiAgICBNaW5vclJlYWRXQ2hhckFycmF5T3ZlcmZsb3cgPSAyNyB8IE9PQ1ZNQ0lE
LAogICAgTWlub3JSZWFkT2N0ZXRBcnJheU92ZXJmbG93ID0gMjggfCBPT0NWTUNJRCwKICAgIE1p
bm9yUmVhZFNob3J0QXJyYXlPdmVyZmxvdyA9IDI5IHwgT09DVk1DSUQsCiAgICBNaW5vclJlYWRV
U2hvcnRBcnJheU92ZXJmbG93ID0gMzAgfCBPT0NWTUNJRCwKICAgIE1pbm9yUmVhZExvbmdBcnJh
eU92ZXJmbG93ID0gMzEgfCBPT0NWTUNJRCwKICAgIE1pbm9yUmVhZFVMb25nQXJyYXlPdmVyZmxv
dyA9IDMyIHwgT09DVk1DSUQsCiAgICBNaW5vclJlYWRMb25nTG9uZ0FycmF5T3ZlcmZsb3cgPSAz
MyB8IE9PQ1ZNQ0lELAogICAgTWlub3JSZWFkVUxvbmdMb25nQXJyYXlPdmVyZmxvdyA9IDM0IHwg
T09DVk1DSUQsCiAgICBNaW5vclJlYWRGbG9hdEFycmF5T3ZlcmZsb3cgPSAzNSB8IE9PQ1ZNQ0lE
LAogICAgTWlub3JSZWFkRG91YmxlQXJyYXlPdmVyZmxvdyA9IDM2IHwgT09DVk1DSUQsCiAgICBN
aW5vclJlYWRMb25nRG91YmxlQXJyYXlPdmVyZmxvdyA9IDM3IHwgT09DVk1DSUQsCiAgICBNaW5v
clJlYWRJbnZUeXBlQ29kZUluZGlyZWN0aW9uID0gMzggfCBPT0NWTUNJRCwKICAgIE1pbm9yV3Jp
dGVPYmplY3RMb2NhbCA9IDM5IHwgT09DVk1DSUQsCiAgICBNaW5vckxvbmdEb3VibGVOb3RTdXBw
b3J0ZWQgPSA0MCB8IE9PQ1ZNQ0lECn07CiMgNjg2ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0Iv
RXhjZXB0LmgiCmVudW0gTWlub3JJbXBMaW1pdAp7CgoKCiAgICBNaW5vck1lc3NhZ2VTaXplTGlt
aXQgPSAxIHwgT09DVk1DSUQsCiAgICBNaW5vclRocmVhZExpbWl0ID0gMiB8IE9PQ1ZNQ0lECn07
CiMgNzAyICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvRXhjZXB0LmgiCmVudW0gTWlub3JOb01l
bW9yeQp7CgoKCiAgICBNaW5vckFsbG9jYXRpb25GYWlsdXJlID0gMSB8IE9PQ1ZNQ0lECn07CiMg
NzE3ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvRXhjZXB0LmgiCmVudW0gTWlub3JUcmFuc2ll
bnQKewoKCgogICAgTWlub3JSZXF1ZXN0Q2FuY2VsbGVkID0gMSB8IE9NR1ZNQ0lELAoKCgoKICAg
IE1pbm9yQ29ubmVjdEZhaWxlZCA9IDEgfCBPT0NWTUNJRCwKICAgIE1pbm9yQ2xvc2VDb25uZWN0
aW9uID0gMiB8IE9PQ1ZNQ0lELAogICAgTWlub3JBY3RpdmVDb25uZWN0aW9uTWFuYWdlbWVudCA9
IDMgfCBPT0NWTUNJRCwKICAgIE1pbm9yRm9yY2VkU2h1dGRvd24gPSA0IHwgT09DVk1DSUQKfTsK
IyA3NDAgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9FeGNlcHQuaCIKZW51bSBNaW5vck5vUmVz
b3VyY2VzCnsKCgoKICAgIE1pbm9ySW52YWxpZEJpbmRpbmcgPSAxIHwgT01HVk1DSUQKfTsKIyA3
NTUgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9FeGNlcHQuaCIKZW51bSBNaW5vclVua25vd24K
ewoKCgogICAgTWlub3JVbmtub3duVXNlckV4Y2VwdGlvbiA9IDEgfCBPTUdWTUNJRAp9OwojIDc3
MCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0V4Y2VwdC5oIgplbnVtIE1pbm9ySW52UG9saWN5
CnsKCgoKICAgIE1pbm9yTm9Qb2xpY3lGYWN0b3J5ID0gMSB8IE9NR1ZNQ0lECn07Cgp9CiMgMjQg
Ii9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9BbnkuaCIgMgoKbmFtZXNwYWNlIENPUkJBCnsKCgoK
CmNsYXNzIEFueQp7CiAgICBUeXBlQ29kZV92YXIgdHlwZV87CiAgICB2b2lkKiB2YWx1ZV87CiAg
ICBCb29sZWFuIHJlbF87CiAgICBjb25zdCBPQjo6Q29uc3RydWN0ZWRJbmZvKiBpbmZvXzsKICAg
IE9COjpPUkJJbnN0YW5jZV92YXIgb3JiSW5zdGFuY2VfOwoKCgoKCiAgICB2b2lkIG9wZXJhdG9y
PDw9KHVuc2lnbmVkIGNoYXIpOwogICAgQm9vbGVhbiBvcGVyYXRvcj4+PSh1bnNpZ25lZCBjaGFy
JikgY29uc3Q7CgpwdWJsaWM6CgogICAgQW55KCk7CiAgICBBbnkoY29uc3QgQW55Jik7CiAgICBB
bnkoVHlwZUNvZGVfcHRyLCB2b2lkKiwgQm9vbGVhbiA9IGZhbHNlKTsKICAgIH5BbnkoKTsKCiAg
ICBBbnkmIG9wZXJhdG9yPShjb25zdCBBbnkmKTsKCiAgICB2b2lkIG9wZXJhdG9yPDw9KFNob3J0
KTsKICAgIHZvaWQgb3BlcmF0b3I8PD0oVVNob3J0KTsKICAgIHZvaWQgb3BlcmF0b3I8PD0oTG9u
Zyk7CiAgICB2b2lkIG9wZXJhdG9yPDw9KFVMb25nKTsKICAgIHZvaWQgb3BlcmF0b3I8PD0oTG9u
Z0xvbmcpOwogICAgdm9pZCBvcGVyYXRvcjw8PShVTG9uZ0xvbmcpOwogICAgdm9pZCBvcGVyYXRv
cjw8PShGbG9hdCk7CiAgICB2b2lkIG9wZXJhdG9yPDw9KERvdWJsZSk7CiAgICB2b2lkIG9wZXJh
dG9yPDw9KExvbmdEb3VibGUpOwogICAgdm9pZCBvcGVyYXRvcjw8PShjb25zdCBjaGFyKik7CiAg
ICB2b2lkIG9wZXJhdG9yPDw9KGNvbnN0IENPUkJBOjpTdHJpbmdfdmFyJik7CiAgICB2b2lkIG9w
ZXJhdG9yPDw9KGNvbnN0IE9COjpTdHJGb3JTZXEmKTsKICAgIHZvaWQgb3BlcmF0b3I8PD0oY29u
c3Qgd2NoYXJfdCopOwogICAgdm9pZCBvcGVyYXRvcjw8PShjb25zdCBDT1JCQTo6V1N0cmluZ192
YXImKTsKICAgIHZvaWQgb3BlcmF0b3I8PD0oY29uc3QgT0I6OldTdHJGb3JTZXEmKTsKICAgIHZv
aWQgb3BlcmF0b3I8PD0oY29uc3QgQW55Jik7CiAgICB2b2lkIG9wZXJhdG9yPDw9KEFueSopOwog
ICAgdm9pZCBvcGVyYXRvcjw8PShjb25zdCBFeGNlcHRpb24mKTsKICAgIHZvaWQgb3BlcmF0b3I8
PD0oRXhjZXB0aW9uKik7CiAgICB2b2lkIG9wZXJhdG9yPDw9KFR5cGVDb2RlX3B0cik7CiAgICB2
b2lkIG9wZXJhdG9yPDw9KFR5cGVDb2RlX3B0ciopOwogICAgdm9pZCBvcGVyYXRvcjw8PShQcmlu
Y2lwYWxfcHRyKTsKICAgIHZvaWQgb3BlcmF0b3I8PD0oUHJpbmNpcGFsX3B0ciopOwogICAgdm9p
ZCBvcGVyYXRvcjw8PShPYmplY3RfcHRyKTsKICAgIHZvaWQgb3BlcmF0b3I8PD0oT2JqZWN0X3B0
ciopOwoKICAgIEJvb2xlYW4gb3BlcmF0b3I+Pj0oU2hvcnQmKSBjb25zdDsKICAgIEJvb2xlYW4g
b3BlcmF0b3I+Pj0oVVNob3J0JikgY29uc3Q7CiAgICBCb29sZWFuIG9wZXJhdG9yPj49KExvbmcm
KSBjb25zdDsKICAgIEJvb2xlYW4gb3BlcmF0b3I+Pj0oVUxvbmcmKSBjb25zdDsKICAgIEJvb2xl
YW4gb3BlcmF0b3I+Pj0oTG9uZ0xvbmcmKSBjb25zdDsKICAgIEJvb2xlYW4gb3BlcmF0b3I+Pj0o
VUxvbmdMb25nJikgY29uc3Q7CiAgICBCb29sZWFuIG9wZXJhdG9yPj49KEZsb2F0JikgY29uc3Q7
CiAgICBCb29sZWFuIG9wZXJhdG9yPj49KERvdWJsZSYpIGNvbnN0OwogICAgQm9vbGVhbiBvcGVy
YXRvcj4+PShMb25nRG91YmxlJikgY29uc3Q7CiAgICBCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0
IGNoYXIqJikgY29uc3Q7CiAgICBCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IHdjaGFyX3QqJikg
Y29uc3Q7CiAgICBCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IEFueSomKSBjb25zdDsKICAgIEJv
b2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgU3lzdGVtRXhjZXB0aW9uKiYpIGNvbnN0OwogICAgQm9v
bGVhbiBvcGVyYXRvcj4+PShUeXBlQ29kZV9wdHImKSBjb25zdDsKICAgIEJvb2xlYW4gb3BlcmF0
b3I+Pj0oUHJpbmNpcGFsX3B0ciYpIGNvbnN0OwogICAgQm9vbGVhbiBvcGVyYXRvcj4+PShPYmpl
Y3RfcHRyJikgY29uc3Q7CgoKCgogICAgc3RydWN0IGZyb21fYm9vbGVhbgogICAgewogICAgICAg
IEJvb2xlYW4gdmFsOwoKICAgICAgICBmcm9tX2Jvb2xlYW4oQm9vbGVhbiB2KSA6IHZhbCh2KSB7
fQogICAgICAgIGZyb21fYm9vbGVhbihjb25zdCBmcm9tX2Jvb2xlYW4mIHYpIDogdmFsKHYudmFs
KSB7fQogICAgfTsKCiAgICBzdHJ1Y3QgZnJvbV9vY3RldAogICAgewogICAgICAgIE9jdGV0IHZh
bDsKCiAgICAgICAgZnJvbV9vY3RldChPY3RldCB2KSA6IHZhbCh2KSB7fQogICAgICAgIGZyb21f
b2N0ZXQoY29uc3QgZnJvbV9vY3RldCYgdikgOiB2YWwodi52YWwpIHt9CiAgICB9OwoKICAgIHN0
cnVjdCBmcm9tX2NoYXIKICAgIHsKICAgICAgICBDaGFyIHZhbDsKCiAgICAgICAgZnJvbV9jaGFy
KENoYXIgdikgOiB2YWwodikge30KICAgICAgICBmcm9tX2NoYXIoY29uc3QgZnJvbV9jaGFyJiB2
KSA6IHZhbCh2LnZhbCkge30KICAgIH07CgogICAgc3RydWN0IGZyb21fd2NoYXIKICAgIHsKICAg
ICAgICBXQ2hhciB2YWw7CgogICAgICAgIGZyb21fd2NoYXIoV0NoYXIgdikgOiB2YWwodikge30K
ICAgICAgICBmcm9tX3djaGFyKGNvbnN0IGZyb21fd2NoYXImIHYpIDogdmFsKHYudmFsKSB7fQog
ICAgfTsKCiAgICBzdHJ1Y3QgZnJvbV9zdHJpbmcKICAgIHsKICAgICAgICBjaGFyKiB2YWw7CiAg
ICAgICAgVUxvbmcgYm91bmQ7CiAgICAgICAgQm9vbGVhbiBub2NvcHk7CgogICAgICAgIGZyb21f
c3RyaW5nKGNoYXIqIHYsIFVMb25nIGIsIEJvb2xlYW4gbmMgPSBmYWxzZSkKICAgICAgICAgICAg
OiB2YWwodiksIGJvdW5kKGIpLCBub2NvcHkobmMpIHt9CiAgICAgICAgZnJvbV9zdHJpbmcoY29u
c3QgY2hhciogdiwgVUxvbmcgYikKICAgICAgICAgICAgOiB2YWwoY29uc3RfY2FzdDxjaGFyKj4o
dikpLCBib3VuZChiKSwgbm9jb3B5KGZhbHNlKSB7fQogICAgICAgIGZyb21fc3RyaW5nKGNvbnN0
IGZyb21fc3RyaW5nJiB2KQogICAgICAgICAgICA6IHZhbCh2LnZhbCksIGJvdW5kKHYuYm91bmQp
LCBub2NvcHkodi5ub2NvcHkpIHt9CiAgICB9OwoKICAgIHN0cnVjdCBmcm9tX3dzdHJpbmcKICAg
IHsKICAgICAgICB3Y2hhcl90KiB2YWw7CiAgICAgICAgVUxvbmcgYm91bmQ7CiAgICAgICAgQm9v
bGVhbiBub2NvcHk7CgogICAgICAgIGZyb21fd3N0cmluZyh3Y2hhcl90KiB2LCBVTG9uZyBiLCBC
b29sZWFuIG5jID0gZmFsc2UpCiAgICAgICAgICAgIDogdmFsKHYpLCBib3VuZChiKSwgbm9jb3B5
KG5jKSB7fQogICAgICAgIGZyb21fd3N0cmluZyhjb25zdCB3Y2hhcl90KiB2LCBVTG9uZyBiKQog
ICAgICAgICAgICA6IHZhbChjb25zdF9jYXN0PHdjaGFyX3QqPih2KSksIGJvdW5kKGIpLCBub2Nv
cHkoZmFsc2UpIHt9CiAgICAgICAgZnJvbV93c3RyaW5nKGNvbnN0IGZyb21fd3N0cmluZyYgdikK
ICAgICAgICAgICAgOiB2YWwodi52YWwpLCBib3VuZCh2LmJvdW5kKSwgbm9jb3B5KHYubm9jb3B5
KSB7fQogICAgfTsKCiAgICBzdHJ1Y3QgZnJvbV9maXhlZAogICAgewogICAgICAgIGNvbnN0IEZp
eGVkJiB2YWw7CiAgICAgICAgVVNob3J0IGRpZ2l0czsKICAgICAgICBVU2hvcnQgc2NhbGU7Cgog
ICAgICAgIGZyb21fZml4ZWQoY29uc3QgRml4ZWQmIGYsIFVTaG9ydCBkLCBVU2hvcnQgcykKICAg
ICAgICAgICAgOiB2YWwoZiksIGRpZ2l0cyhkKSwgc2NhbGUocykge30KICAgICAgICBmcm9tX2Zp
eGVkKGNvbnN0IGZyb21fZml4ZWQmIHYpIDogdmFsKHYudmFsKSwgZGlnaXRzKHYuZGlnaXRzKSwK
ICAgICAgICAgICAgc2NhbGUodi5zY2FsZSkge30KICAgIH07CgogICAgdm9pZCBvcGVyYXRvcjw8
PShmcm9tX2Jvb2xlYW4pOwogICAgdm9pZCBvcGVyYXRvcjw8PShmcm9tX29jdGV0KTsKICAgIHZv
aWQgb3BlcmF0b3I8PD0oZnJvbV9jaGFyKTsKICAgIHZvaWQgb3BlcmF0b3I8PD0oZnJvbV93Y2hh
cik7CiAgICB2b2lkIG9wZXJhdG9yPDw9KGZyb21fc3RyaW5nKTsKICAgIHZvaWQgb3BlcmF0b3I8
PD0oZnJvbV93c3RyaW5nKTsKICAgIHZvaWQgb3BlcmF0b3I8PD0oZnJvbV9maXhlZCk7CgogICAg
c3RydWN0IHRvX2Jvb2xlYW4KICAgIHsKICAgICAgICBCb29sZWFuJiB2YWw7CgogICAgICAgIHRv
X2Jvb2xlYW4oQm9vbGVhbiYgdikgOiB2YWwodikge30KICAgICAgICB0b19ib29sZWFuKGNvbnN0
IHRvX2Jvb2xlYW4mIHYpIDogdmFsKHYudmFsKSB7fQogICAgfTsKCiAgICBzdHJ1Y3QgdG9fb2N0
ZXQKICAgIHsKICAgICAgICBPY3RldCYgdmFsOwoKICAgICAgICB0b19vY3RldChPY3RldCYgdikg
OiB2YWwodikge30KICAgICAgICB0b19vY3RldChjb25zdCB0b19vY3RldCYgdikgOiB2YWwodi52
YWwpIHt9CiAgICB9OwoKICAgIHN0cnVjdCB0b19jaGFyCiAgICB7CiAgICAgICAgQ2hhciYgdmFs
OwoKICAgICAgICB0b19jaGFyKENoYXImIHYpIDogdmFsKHYpIHt9CiAgICAgICAgdG9fY2hhcihj
b25zdCB0b19jaGFyJiB2KSA6IHZhbCh2LnZhbCkge30KICAgIH07CgogICAgc3RydWN0IHRvX3dj
aGFyCiAgICB7CiAgICAgICAgV0NoYXImIHZhbDsKCiAgICAgICAgdG9fd2NoYXIoV0NoYXImIHYp
IDogdmFsKHYpIHt9CiAgICAgICAgdG9fd2NoYXIoY29uc3QgdG9fd2NoYXImIHYpIDogdmFsKHYu
dmFsKSB7fQogICAgfTsKCiAgICBzdHJ1Y3QgdG9fc3RyaW5nCiAgICB7CiAgICAgICAgY29uc3Qg
Y2hhciomIHZhbDsKICAgICAgICBVTG9uZyBib3VuZDsKCiAgICAgICAgdG9fc3RyaW5nKGNvbnN0
IGNoYXIqJiB2LCBVTG9uZyBiKSA6IHZhbCh2KSwgYm91bmQoYikge30KICAgICAgICB0b19zdHJp
bmcoY29uc3QgdG9fc3RyaW5nJiB2KSA6IHZhbCh2LnZhbCksIGJvdW5kKHYuYm91bmQpIHt9CgoK
ICAgICAgICB0b19zdHJpbmcoY2hhciomIHYsIFVMb25nIGIpIDogdmFsKChjb25zdCBjaGFyKiYp
diksIGJvdW5kKGIpIHt9CiAgICB9OwoKICAgIHN0cnVjdCB0b193c3RyaW5nCiAgICB7CiAgICAg
ICAgY29uc3Qgd2NoYXJfdComIHZhbDsKICAgICAgICBVTG9uZyBib3VuZDsKCiAgICAgICAgdG9f
d3N0cmluZyhjb25zdCB3Y2hhcl90KiYgdiwgVUxvbmcgYikgOiB2YWwodiksIGJvdW5kKGIpIHt9
CiAgICAgICAgdG9fd3N0cmluZyhjb25zdCB0b193c3RyaW5nJiB2KSA6IHZhbCh2LnZhbCksIGJv
dW5kKHYuYm91bmQpIHt9CgoKICAgICAgICB0b193c3RyaW5nKHdjaGFyX3QqJiB2LCBVTG9uZyBi
KSA6IHZhbCgoY29uc3Qgd2NoYXJfdComKXYpLCBib3VuZChiKSB7fQogICAgfTsKCiAgICBzdHJ1
Y3QgdG9fZml4ZWQKICAgIHsKICAgICAgICBGaXhlZCYgdmFsOwogICAgICAgIFVTaG9ydCBkaWdp
dHM7CiAgICAgICAgVVNob3J0IHNjYWxlOwoKICAgICAgICB0b19maXhlZChGaXhlZCYgZiwgVVNo
b3J0IGQsIFVTaG9ydCBzKQogICAgICAgICAgICA6IHZhbChmKSwgZGlnaXRzKGQpLCBzY2FsZShz
KSB7fQogICAgICAgIHRvX2ZpeGVkKGNvbnN0IHRvX2ZpeGVkJiB2KSA6IHZhbCh2LnZhbCksIGRp
Z2l0cyh2LmRpZ2l0cyksCiAgICAgICAgICAgIHNjYWxlKHYuc2NhbGUpIHt9CiAgICB9OwoKICAg
IHN0cnVjdCB0b19vYmplY3QKICAgIHsKICAgICAgICBPYmplY3RfcHRyJiB2YWw7CgogICAgICAg
IHRvX29iamVjdChPYmplY3Rfb3V0IHYpIDogdmFsKHYucHRyKCkpIHt9CiAgICAgICAgdG9fb2Jq
ZWN0KGNvbnN0IHRvX29iamVjdCYgdikgOiB2YWwodi52YWwpIHt9CiAgICB9OwoKICAgIHN0cnVj
dCB0b19hYnN0cmFjdF9iYXNlCiAgICB7CiAgICAgICAgQWJzdHJhY3RCYXNlX3B0ciYgdmFsOwoK
ICAgICAgICB0b19hYnN0cmFjdF9iYXNlKEFic3RyYWN0QmFzZV9wdHImIHYpIDogdmFsKHYpIHt9
CiAgICAgICAgdG9fYWJzdHJhY3RfYmFzZShjb25zdCB0b19hYnN0cmFjdF9iYXNlJiB2KSA6IHZh
bCh2LnZhbCkge30KICAgIH07CgogICAgc3RydWN0IHRvX3ZhbHVlCiAgICB7CiAgICAgICAgVmFs
dWVCYXNlKiYgdmFsOwoKICAgICAgICB0b192YWx1ZShWYWx1ZUJhc2UqJiB2KSA6IHZhbCh2KSB7
fQogICAgICAgIHRvX3ZhbHVlKGNvbnN0IHRvX3ZhbHVlJiB2KSA6IHZhbCh2LnZhbCkge30KICAg
IH07CgogICAgQm9vbGVhbiBvcGVyYXRvcj4+PSh0b19ib29sZWFuKSBjb25zdDsKICAgIEJvb2xl
YW4gb3BlcmF0b3I+Pj0odG9fb2N0ZXQpIGNvbnN0OwogICAgQm9vbGVhbiBvcGVyYXRvcj4+PSh0
b19jaGFyKSBjb25zdDsKICAgIEJvb2xlYW4gb3BlcmF0b3I+Pj0odG9fd2NoYXIpIGNvbnN0Owog
ICAgQm9vbGVhbiBvcGVyYXRvcj4+PSh0b19zdHJpbmcpIGNvbnN0OwogICAgQm9vbGVhbiBvcGVy
YXRvcj4+PSh0b193c3RyaW5nKSBjb25zdDsKICAgIEJvb2xlYW4gb3BlcmF0b3I+Pj0odG9fZml4
ZWQpIGNvbnN0OwogICAgQm9vbGVhbiBvcGVyYXRvcj4+PSh0b19vYmplY3QpIGNvbnN0OwogICAg
Qm9vbGVhbiBvcGVyYXRvcj4+PSh0b19hYnN0cmFjdF9iYXNlKSBjb25zdDsKICAgIEJvb2xlYW4g
b3BlcmF0b3I+Pj0odG9fdmFsdWUpIGNvbnN0OwoKICAgIHZvaWQgcmVwbGFjZShUeXBlQ29kZV9w
dHIsIHZvaWQqLCBCb29sZWFuID0gZmFsc2UpOwogICAgVHlwZUNvZGVfcHRyIHR5cGUoKSBjb25z
dDsKICAgIHZvaWQgdHlwZShUeXBlQ29kZV9wdHIpOwogICAgY29uc3Qgdm9pZCogdmFsdWUoKSBj
b25zdDsKCgoKCiAgICB2b2lkIHJlcGxhY2UoVHlwZUNvZGVfcHRyLCB2b2lkKiwgQm9vbGVhbiwg
Y29uc3QgT0I6OkNvbnN0cnVjdGVkSW5mbyopOwogICAgQm9vbGVhbiBjaGVja190eXBlKFR5cGVD
b2RlX3B0cikgY29uc3Q7CiAgICBjb25zdCBPQjo6Q29uc3RydWN0ZWRJbmZvKiBpbmZvKCkgY29u
c3QgeyByZXR1cm4gaW5mb187IH0KICAgIE9COjpJbnB1dFN0cmVhbV9wdHIgY3JlYXRlX2lucHV0
X3N0cmVhbSgpIGNvbnN0OwoKCgoKCiAgICB2b2lkIF9PQl9PUkJJbnN0YW5jZShPQjo6T1JCSW5z
dGFuY2VfcHRyKTsKICAgIE9COjpPUkJJbnN0YW5jZV9wdHIgX09CX09SQkluc3RhbmNlKCk7Cgog
ICAgVHlwZUNvZGVfcHRyIF9PQl90eXBlX25vZHVwKCkgY29uc3Q7CgoKCgogICAgZnJpZW5kIGNs
YXNzIDo6T0I6OklucHV0U3RyZWFtSW1wbDsKICAgIGZyaWVuZCBjbGFzcyA6Ok9COjpPdXRwdXRT
dHJlYW1JbXBsOwp9OwoKCgoKdHlwZWRlZiBPQjo6VmFyVmFyPCBBbnkgPiBBbnlfdmFyOwp0eXBl
ZGVmIE9COjpWYXJPdXQ8IEFueSA+IEFueV9vdXQ7Cgp9CgoKCgp2b2lkIG9wZXJhdG9yPDw9KENP
UkJBOjpBbnlfdmFyJiwgQ09SQkE6OlNob3J0KTsKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55
X3ZhciYsIENPUkJBOjpVU2hvcnQpOwp2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnlfdmFyJiwg
Q09SQkE6OkxvbmcpOwp2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnlfdmFyJiwgQ09SQkE6OlVM
b25nKTsKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYsIENPUkJBOjpMb25nTG9uZyk7
CnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImLCBDT1JCQTo6VUxvbmdMb25nKTsKdm9p
ZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYsIENPUkJBOjpGbG9hdCk7CnZvaWQgb3BlcmF0
b3I8PD0oQ09SQkE6OkFueV92YXImLCBDT1JCQTo6RG91YmxlKTsKdm9pZCBvcGVyYXRvcjw8PShD
T1JCQTo6QW55X3ZhciYsIENPUkJBOjpMb25nRG91YmxlKTsKdm9pZCBvcGVyYXRvcjw8PShDT1JC
QTo6QW55X3ZhciYsIGNvbnN0IGNoYXIqKTsKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55X3Zh
ciYsIGNoYXIqKTsKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYsIGNvbnN0IENPUkJB
OjpTdHJpbmdfdmFyJik7CnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImLCBjb25zdCBP
Qjo6U3RyRm9yU2VxJik7CnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImLCBjb25zdCB3
Y2hhcl90Kik7CnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImLCB3Y2hhcl90Kik7CnZv
aWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImLCBjb25zdCBDT1JCQTo6V1N0cmluZ192YXIm
KTsKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYsIGNvbnN0IE9COjpXU3RyRm9yU2Vx
Jik7CnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImLCBjb25zdCBDT1JCQTo6QW55Jik7
CnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImLCBDT1JCQTo6QW55Kik7CnZvaWQgb3Bl
cmF0b3I8PD0oQ09SQkE6OkFueV92YXImLCBDT1JCQTo6VHlwZUNvZGVfcHRyKTsKdm9pZCBvcGVy
YXRvcjw8PShDT1JCQTo6QW55X3ZhciYsIENPUkJBOjpUeXBlQ29kZV9wdHIqKTsKdm9pZCBvcGVy
YXRvcjw8PShDT1JCQTo6QW55X3ZhciYsIENPUkJBOjpQcmluY2lwYWxfcHRyKTsKdm9pZCBvcGVy
YXRvcjw8PShDT1JCQTo6QW55X3ZhciYsIENPUkJBOjpQcmluY2lwYWxfcHRyKik7CnZvaWQgb3Bl
cmF0b3I8PD0oQ09SQkE6OkFueV92YXImLCBDT1JCQTo6T2JqZWN0X3B0cik7CnZvaWQgb3BlcmF0
b3I8PD0oQ09SQkE6OkFueV92YXImLCBDT1JCQTo6T2JqZWN0X3B0ciopOwoKQ09SQkE6OkJvb2xl
YW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueV92YXImLCBDT1JCQTo6U2hvcnQmKTsKQ09S
QkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueV92YXImLCBDT1JCQTo6VVNo
b3J0Jik7CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnlfdmFyJiwg
Q09SQkE6OkxvbmcmKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFu
eV92YXImLCBDT1JCQTo6VUxvbmcmKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3Qg
Q09SQkE6OkFueV92YXImLCBDT1JCQTo6TG9uZ0xvbmcmKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0
b3I+Pj0oY29uc3QgQ09SQkE6OkFueV92YXImLCBDT1JCQTo6VUxvbmdMb25nJik7CkNPUkJBOjpC
b29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnlfdmFyJiwgQ09SQkE6OkZsb2F0Jik7
CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnlfdmFyJiwgQ09SQkE6
OkRvdWJsZSYpOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55X3Zh
ciYsIENPUkJBOjpMb25nRG91YmxlJik7CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0
IENPUkJBOjpBbnlfdmFyJiwgY29uc3QgY2hhciomKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+
Pj0oY29uc3QgQ09SQkE6OkFueV92YXImLCBjb25zdCB3Y2hhcl90KiYpOwpDT1JCQTo6Qm9vbGVh
biBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55X3ZhciYsIGNvbnN0IENPUkJBOjpBbnkqJik7
CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnlfdmFyJiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiomKTsKQ09S
QkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueV92YXImLCBDT1JCQTo6VHlw
ZUNvZGVfcHRyJik7CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnlf
dmFyJiwgQ09SQkE6OlByaW5jaXBhbF9wdHImKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0o
Y29uc3QgQ09SQkE6OkFueV92YXImLCBDT1JCQTo6T2JqZWN0X3B0ciYpOwoKdm9pZCBvcGVyYXRv
cjw8PShDT1JCQTo6QW55X3ZhciYsIENPUkJBOjpBbnk6OmZyb21fYm9vbGVhbik7CnZvaWQgb3Bl
cmF0b3I8PD0oQ09SQkE6OkFueV92YXImLCBDT1JCQTo6QW55Ojpmcm9tX29jdGV0KTsKdm9pZCBv
cGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYsIENPUkJBOjpBbnk6OmZyb21fY2hhcik7CnZvaWQg
b3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImLCBDT1JCQTo6QW55Ojpmcm9tX3djaGFyKTsKdm9p
ZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYsIENPUkJBOjpBbnk6OmZyb21fc3RyaW5nKTsK
dm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYsIENPUkJBOjpBbnk6OmZyb21fd3N0cmlu
Zyk7CnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImLCBDT1JCQTo6QW55Ojpmcm9tX2Zp
eGVkKTsKCkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnlfdmFyJiwg
Q09SQkE6OkFueTo6dG9fYm9vbGVhbik7CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0
IENPUkJBOjpBbnlfdmFyJiwgQ09SQkE6OkFueTo6dG9fb2N0ZXQpOwpDT1JCQTo6Qm9vbGVhbiBv
cGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55X3ZhciYsIENPUkJBOjpBbnk6OnRvX2NoYXIpOwpD
T1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55X3ZhciYsIENPUkJBOjpB
bnk6OnRvX3djaGFyKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFu
eV92YXImLCBDT1JCQTo6QW55Ojp0b19zdHJpbmcpOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+
PShjb25zdCBDT1JCQTo6QW55X3ZhciYsIENPUkJBOjpBbnk6OnRvX3dzdHJpbmcpOwpDT1JCQTo6
Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55X3ZhciYsIENPUkJBOjpBbnk6OnRv
X2ZpeGVkKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueV92YXIm
LCBDT1JCQTo6QW55Ojp0b19vYmplY3QpOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25z
dCBDT1JCQTo6QW55X3ZhciYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpBbnk6
OnRvX2Fic3RyYWN0X2Jhc2UpOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JC
QTo6QW55X3ZhciYsIENPUkJBOjpBbnk6OnRvX3ZhbHVlKTsKIyA0MDkgIi9ob21lL21hdHQvb2Iv
aW5jbHVkZS9PQi9BbnkuaCIKbmFtZXNwYWNlIENPUkJBIHsgY2xhc3MgVU5LTk9XTjsgfSB2b2lk
IG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBDT1JCQTo6VU5LTk9XTiopOyB2b2lkIG9wZXJhdG9y
PDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6VU5LTk9XTiYpOyBDT1JCQTo6Qm9vbGVhbiBv
cGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OlVOS05PV04qJik7IGlu
bGluZSB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnlfdmFyJiBhLCBDT1JCQTo6VU5LTk9XTiog
dikgeyBhLmlub3V0KCkgPDw9IHY7IH0gaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFu
eV92YXImIGEsIGNvbnN0IENPUkJBOjpVTktOT1dOJiB2KSB7IGEuaW5vdXQoKSA8PD0gdjsgfSBp
bmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueV92YXImIGEs
IGNvbnN0IENPUkJBOjpVTktOT1dOKiYgdikgeyByZXR1cm4gYS5pbigpID4+PSB2OyB9Cm5hbWVz
cGFjZSBDT1JCQSB7IGNsYXNzIEJBRF9QQVJBTTsgfSB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpB
bnkmLCBDT1JCQTo6QkFEX1BBUkFNKik7IHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNv
bnN0IENPUkJBOjpCQURfUEFSQU0mKTsgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3Qg
Q09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpCQURfUEFSQU0qJik7IGlubGluZSB2b2lkIG9wZXJh
dG9yPDw9KENPUkJBOjpBbnlfdmFyJiBhLCBDT1JCQTo6QkFEX1BBUkFNKiB2KSB7IGEuaW5vdXQo
KSA8PD0gdjsgfSBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYSwgY29u
c3QgQ09SQkE6OkJBRF9QQVJBTSYgdikgeyBhLmlub3V0KCkgPDw9IHY7IH0gaW5saW5lIENPUkJB
OjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnlfdmFyJiBhLCBjb25zdCBDT1JC
QTo6QkFEX1BBUkFNKiYgdikgeyByZXR1cm4gYS5pbigpID4+PSB2OyB9Cm5hbWVzcGFjZSBDT1JC
QSB7IGNsYXNzIE5PX01FTU9SWTsgfSB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBDT1JC
QTo6Tk9fTUVNT1JZKik7IHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJB
OjpOT19NRU1PUlkmKTsgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFu
eSYsIGNvbnN0IENPUkJBOjpOT19NRU1PUlkqJik7IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KENP
UkJBOjpBbnlfdmFyJiBhLCBDT1JCQTo6Tk9fTUVNT1JZKiB2KSB7IGEuaW5vdXQoKSA8PD0gdjsg
fSBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYSwgY29uc3QgQ09SQkE6
Ok5PX01FTU9SWSYgdikgeyBhLmlub3V0KCkgPDw9IHY7IH0gaW5saW5lIENPUkJBOjpCb29sZWFu
IG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnlfdmFyJiBhLCBjb25zdCBDT1JCQTo6Tk9fTUVN
T1JZKiYgdikgeyByZXR1cm4gYS5pbigpID4+PSB2OyB9Cm5hbWVzcGFjZSBDT1JCQSB7IGNsYXNz
IElNUF9MSU1JVDsgfSB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBDT1JCQTo6SU1QX0xJ
TUlUKik7IHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpJTVBfTElN
SVQmKTsgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYsIGNvbnN0
IENPUkJBOjpJTVBfTElNSVQqJik7IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnlf
dmFyJiBhLCBDT1JCQTo6SU1QX0xJTUlUKiB2KSB7IGEuaW5vdXQoKSA8PD0gdjsgfSBpbmxpbmUg
dm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYSwgY29uc3QgQ09SQkE6OklNUF9MSU1J
VCYgdikgeyBhLmlub3V0KCkgPDw9IHY7IH0gaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9y
Pj49KGNvbnN0IENPUkJBOjpBbnlfdmFyJiBhLCBjb25zdCBDT1JCQTo6SU1QX0xJTUlUKiYgdikg
eyByZXR1cm4gYS5pbigpID4+PSB2OyB9Cm5hbWVzcGFjZSBDT1JCQSB7IGNsYXNzIENPTU1fRkFJ
TFVSRTsgfSB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBDT1JCQTo6Q09NTV9GQUlMVVJF
Kik7IHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpDT01NX0ZBSUxV
UkUmKTsgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYsIGNvbnN0
IENPUkJBOjpDT01NX0ZBSUxVUkUqJik7IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpB
bnlfdmFyJiBhLCBDT1JCQTo6Q09NTV9GQUlMVVJFKiB2KSB7IGEuaW5vdXQoKSA8PD0gdjsgfSBp
bmxpbmUgdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYSwgY29uc3QgQ09SQkE6OkNP
TU1fRkFJTFVSRSYgdikgeyBhLmlub3V0KCkgPDw9IHY7IH0gaW5saW5lIENPUkJBOjpCb29sZWFu
IG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnlfdmFyJiBhLCBjb25zdCBDT1JCQTo6Q09NTV9G
QUlMVVJFKiYgdikgeyByZXR1cm4gYS5pbigpID4+PSB2OyB9Cm5hbWVzcGFjZSBDT1JCQSB7IGNs
YXNzIElOVl9PQkpSRUY7IH0gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgQ09SQkE6OklO
Vl9PQkpSRUYqKTsgdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OklO
Vl9PQkpSRUYmKTsgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYs
IGNvbnN0IENPUkJBOjpJTlZfT0JKUkVGKiYpOyBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShDT1JC
QTo6QW55X3ZhciYgYSwgQ09SQkE6OklOVl9PQkpSRUYqIHYpIHsgYS5pbm91dCgpIDw8PSB2OyB9
IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnlfdmFyJiBhLCBjb25zdCBDT1JCQTo6
SU5WX09CSlJFRiYgdikgeyBhLmlub3V0KCkgPDw9IHY7IH0gaW5saW5lIENPUkJBOjpCb29sZWFu
IG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnlfdmFyJiBhLCBjb25zdCBDT1JCQTo6SU5WX09C
SlJFRiomIHYpIHsgcmV0dXJuIGEuaW4oKSA+Pj0gdjsgfQpuYW1lc3BhY2UgQ09SQkEgeyBjbGFz
cyBOT19QRVJNSVNTSU9OOyB9IHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIENPUkJBOjpO
T19QRVJNSVNTSU9OKik7IHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJB
OjpOT19QRVJNSVNTSU9OJik7IENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJB
OjpBbnkmLCBjb25zdCBDT1JCQTo6Tk9fUEVSTUlTU0lPTiomKTsgaW5saW5lIHZvaWQgb3BlcmF0
b3I8PD0oQ09SQkE6OkFueV92YXImIGEsIENPUkJBOjpOT19QRVJNSVNTSU9OKiB2KSB7IGEuaW5v
dXQoKSA8PD0gdjsgfSBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYSwg
Y29uc3QgQ09SQkE6Ok5PX1BFUk1JU1NJT04mIHYpIHsgYS5pbm91dCgpIDw8PSB2OyB9IGlubGlu
ZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55X3ZhciYgYSwgY29u
c3QgQ09SQkE6Ok5PX1BFUk1JU1NJT04qJiB2KSB7IHJldHVybiBhLmluKCkgPj49IHY7IH0KbmFt
ZXNwYWNlIENPUkJBIHsgY2xhc3MgSU5URVJOQUw7IH0gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6
QW55JiwgQ09SQkE6OklOVEVSTkFMKik7IHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNv
bnN0IENPUkJBOjpJTlRFUk5BTCYpOyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBD
T1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OklOVEVSTkFMKiYpOyBpbmxpbmUgdm9pZCBvcGVyYXRv
cjw8PShDT1JCQTo6QW55X3ZhciYgYSwgQ09SQkE6OklOVEVSTkFMKiB2KSB7IGEuaW5vdXQoKSA8
PD0gdjsgfSBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYSwgY29uc3Qg
Q09SQkE6OklOVEVSTkFMJiB2KSB7IGEuaW5vdXQoKSA8PD0gdjsgfSBpbmxpbmUgQ09SQkE6OkJv
b2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueV92YXImIGEsIGNvbnN0IENPUkJBOjpJ
TlRFUk5BTComIHYpIHsgcmV0dXJuIGEuaW4oKSA+Pj0gdjsgfQpuYW1lc3BhY2UgQ09SQkEgeyBj
bGFzcyBNQVJTSEFMOyB9IHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIENPUkJBOjpNQVJT
SEFMKik7IHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpNQVJTSEFM
Jik7IENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmLCBjb25zdCBD
T1JCQTo6TUFSU0hBTComKTsgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXIm
IGEsIENPUkJBOjpNQVJTSEFMKiB2KSB7IGEuaW5vdXQoKSA8PD0gdjsgfSBpbmxpbmUgdm9pZCBv
cGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYSwgY29uc3QgQ09SQkE6Ok1BUlNIQUwmIHYpIHsg
YS5pbm91dCgpIDw8PSB2OyB9IGlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25z
dCBDT1JCQTo6QW55X3ZhciYgYSwgY29uc3QgQ09SQkE6Ok1BUlNIQUwqJiB2KSB7IHJldHVybiBh
LmluKCkgPj49IHY7IH0KbmFtZXNwYWNlIENPUkJBIHsgY2xhc3MgSU5JVElBTElaRTsgfSB2b2lk
IG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBDT1JCQTo6SU5JVElBTElaRSopOyB2b2lkIG9wZXJh
dG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6SU5JVElBTElaRSYpOyBDT1JCQTo6Qm9v
bGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OklOSVRJQUxJ
WkUqJik7IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnlfdmFyJiBhLCBDT1JCQTo6
SU5JVElBTElaRSogdikgeyBhLmlub3V0KCkgPDw9IHY7IH0gaW5saW5lIHZvaWQgb3BlcmF0b3I8
PD0oQ09SQkE6OkFueV92YXImIGEsIGNvbnN0IENPUkJBOjpJTklUSUFMSVpFJiB2KSB7IGEuaW5v
dXQoKSA8PD0gdjsgfSBpbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09S
QkE6OkFueV92YXImIGEsIGNvbnN0IENPUkJBOjpJTklUSUFMSVpFKiYgdikgeyByZXR1cm4gYS5p
bigpID4+PSB2OyB9Cm5hbWVzcGFjZSBDT1JCQSB7IGNsYXNzIE5PX0lNUExFTUVOVDsgfSB2b2lk
IG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBDT1JCQTo6Tk9fSU1QTEVNRU5UKik7IHZvaWQgb3Bl
cmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpOT19JTVBMRU1FTlQmKTsgQ09SQkE6
OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpOT19J
TVBMRU1FTlQqJik7IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnlfdmFyJiBhLCBD
T1JCQTo6Tk9fSU1QTEVNRU5UKiB2KSB7IGEuaW5vdXQoKSA8PD0gdjsgfSBpbmxpbmUgdm9pZCBv
cGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYSwgY29uc3QgQ09SQkE6Ok5PX0lNUExFTUVOVCYg
dikgeyBhLmlub3V0KCkgPDw9IHY7IH0gaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49
KGNvbnN0IENPUkJBOjpBbnlfdmFyJiBhLCBjb25zdCBDT1JCQTo6Tk9fSU1QTEVNRU5UKiYgdikg
eyByZXR1cm4gYS5pbigpID4+PSB2OyB9Cm5hbWVzcGFjZSBDT1JCQSB7IGNsYXNzIEJBRF9UWVBF
Q09ERTsgfSB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBDT1JCQTo6QkFEX1RZUEVDT0RF
Kik7IHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpCQURfVFlQRUNP
REUmKTsgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYsIGNvbnN0
IENPUkJBOjpCQURfVFlQRUNPREUqJik7IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpB
bnlfdmFyJiBhLCBDT1JCQTo6QkFEX1RZUEVDT0RFKiB2KSB7IGEuaW5vdXQoKSA8PD0gdjsgfSBp
bmxpbmUgdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYSwgY29uc3QgQ09SQkE6OkJB
RF9UWVBFQ09ERSYgdikgeyBhLmlub3V0KCkgPDw9IHY7IH0gaW5saW5lIENPUkJBOjpCb29sZWFu
IG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnlfdmFyJiBhLCBjb25zdCBDT1JCQTo6QkFEX1RZ
UEVDT0RFKiYgdikgeyByZXR1cm4gYS5pbigpID4+PSB2OyB9Cm5hbWVzcGFjZSBDT1JCQSB7IGNs
YXNzIEJBRF9PUEVSQVRJT047IH0gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgQ09SQkE6
OkJBRF9PUEVSQVRJT04qKTsgdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09S
QkE6OkJBRF9PUEVSQVRJT04mKTsgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09S
QkE6OkFueSYsIGNvbnN0IENPUkJBOjpCQURfT1BFUkFUSU9OKiYpOyBpbmxpbmUgdm9pZCBvcGVy
YXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYSwgQ09SQkE6OkJBRF9PUEVSQVRJT04qIHYpIHsgYS5p
bm91dCgpIDw8PSB2OyB9IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnlfdmFyJiBh
LCBjb25zdCBDT1JCQTo6QkFEX09QRVJBVElPTiYgdikgeyBhLmlub3V0KCkgPDw9IHY7IH0gaW5s
aW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnlfdmFyJiBhLCBj
b25zdCBDT1JCQTo6QkFEX09QRVJBVElPTiomIHYpIHsgcmV0dXJuIGEuaW4oKSA+Pj0gdjsgfQpu
YW1lc3BhY2UgQ09SQkEgeyBjbGFzcyBOT19SRVNPVVJDRVM7IH0gdm9pZCBvcGVyYXRvcjw8PShD
T1JCQTo6QW55JiwgQ09SQkE6Ok5PX1JFU09VUkNFUyopOyB2b2lkIG9wZXJhdG9yPDw9KENPUkJB
OjpBbnkmLCBjb25zdCBDT1JCQTo6Tk9fUkVTT1VSQ0VTJik7IENPUkJBOjpCb29sZWFuIG9wZXJh
dG9yPj49KGNvbnN0IENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6Tk9fUkVTT1VSQ0VTKiYpOyBp
bmxpbmUgdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYSwgQ09SQkE6Ok5PX1JFU09V
UkNFUyogdikgeyBhLmlub3V0KCkgPDw9IHY7IH0gaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oQ09S
QkE6OkFueV92YXImIGEsIGNvbnN0IENPUkJBOjpOT19SRVNPVVJDRVMmIHYpIHsgYS5pbm91dCgp
IDw8PSB2OyB9IGlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6
QW55X3ZhciYgYSwgY29uc3QgQ09SQkE6Ok5PX1JFU09VUkNFUyomIHYpIHsgcmV0dXJuIGEuaW4o
KSA+Pj0gdjsgfQpuYW1lc3BhY2UgQ09SQkEgeyBjbGFzcyBOT19SRVNQT05TRTsgfSB2b2lkIG9w
ZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBDT1JCQTo6Tk9fUkVTUE9OU0UqKTsgdm9pZCBvcGVyYXRv
cjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6Ok5PX1JFU1BPTlNFJik7IENPUkJBOjpCb29s
ZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6Tk9fUkVTUE9O
U0UqJik7IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnlfdmFyJiBhLCBDT1JCQTo6
Tk9fUkVTUE9OU0UqIHYpIHsgYS5pbm91dCgpIDw8PSB2OyB9IGlubGluZSB2b2lkIG9wZXJhdG9y
PDw9KENPUkJBOjpBbnlfdmFyJiBhLCBjb25zdCBDT1JCQTo6Tk9fUkVTUE9OU0UmIHYpIHsgYS5p
bm91dCgpIDw8PSB2OyB9IGlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBD
T1JCQTo6QW55X3ZhciYgYSwgY29uc3QgQ09SQkE6Ok5PX1JFU1BPTlNFKiYgdikgeyByZXR1cm4g
YS5pbigpID4+PSB2OyB9Cm5hbWVzcGFjZSBDT1JCQSB7IGNsYXNzIFBFUlNJU1RfU1RPUkU7IH0g
dm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgQ09SQkE6OlBFUlNJU1RfU1RPUkUqKTsgdm9p
ZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OlBFUlNJU1RfU1RPUkUmKTsg
Q09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYsIGNvbnN0IENPUkJB
OjpQRVJTSVNUX1NUT1JFKiYpOyBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55X3Zh
ciYgYSwgQ09SQkE6OlBFUlNJU1RfU1RPUkUqIHYpIHsgYS5pbm91dCgpIDw8PSB2OyB9IGlubGlu
ZSB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnlfdmFyJiBhLCBjb25zdCBDT1JCQTo6UEVSU0lT
VF9TVE9SRSYgdikgeyBhLmlub3V0KCkgPDw9IHY7IH0gaW5saW5lIENPUkJBOjpCb29sZWFuIG9w
ZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnlfdmFyJiBhLCBjb25zdCBDT1JCQTo6UEVSU0lTVF9T
VE9SRSomIHYpIHsgcmV0dXJuIGEuaW4oKSA+Pj0gdjsgfQpuYW1lc3BhY2UgQ09SQkEgeyBjbGFz
cyBCQURfSU5WX09SREVSOyB9IHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIENPUkJBOjpC
QURfSU5WX09SREVSKik7IHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJB
OjpCQURfSU5WX09SREVSJik7IENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJB
OjpBbnkmLCBjb25zdCBDT1JCQTo6QkFEX0lOVl9PUkRFUiomKTsgaW5saW5lIHZvaWQgb3BlcmF0
b3I8PD0oQ09SQkE6OkFueV92YXImIGEsIENPUkJBOjpCQURfSU5WX09SREVSKiB2KSB7IGEuaW5v
dXQoKSA8PD0gdjsgfSBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYSwg
Y29uc3QgQ09SQkE6OkJBRF9JTlZfT1JERVImIHYpIHsgYS5pbm91dCgpIDw8PSB2OyB9IGlubGlu
ZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55X3ZhciYgYSwgY29u
c3QgQ09SQkE6OkJBRF9JTlZfT1JERVIqJiB2KSB7IHJldHVybiBhLmluKCkgPj49IHY7IH0KbmFt
ZXNwYWNlIENPUkJBIHsgY2xhc3MgVFJBTlNJRU5UOyB9IHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6
OkFueSYsIENPUkJBOjpUUkFOU0lFTlQqKTsgdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55Jiwg
Y29uc3QgQ09SQkE6OlRSQU5TSUVOVCYpOyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25z
dCBDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OlRSQU5TSUVOVComKTsgaW5saW5lIHZvaWQgb3Bl
cmF0b3I8PD0oQ09SQkE6OkFueV92YXImIGEsIENPUkJBOjpUUkFOU0lFTlQqIHYpIHsgYS5pbm91
dCgpIDw8PSB2OyB9IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnlfdmFyJiBhLCBj
b25zdCBDT1JCQTo6VFJBTlNJRU5UJiB2KSB7IGEuaW5vdXQoKSA8PD0gdjsgfSBpbmxpbmUgQ09S
QkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueV92YXImIGEsIGNvbnN0IENP
UkJBOjpUUkFOU0lFTlQqJiB2KSB7IHJldHVybiBhLmluKCkgPj49IHY7IH0KbmFtZXNwYWNlIENP
UkJBIHsgY2xhc3MgRlJFRV9NRU07IH0gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgQ09S
QkE6OkZSRUVfTUVNKik7IHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJB
OjpGUkVFX01FTSYpOyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55
JiwgY29uc3QgQ09SQkE6OkZSRUVfTUVNKiYpOyBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShDT1JC
QTo6QW55X3ZhciYgYSwgQ09SQkE6OkZSRUVfTUVNKiB2KSB7IGEuaW5vdXQoKSA8PD0gdjsgfSBp
bmxpbmUgdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYSwgY29uc3QgQ09SQkE6OkZS
RUVfTUVNJiB2KSB7IGEuaW5vdXQoKSA8PD0gdjsgfSBpbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3Bl
cmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueV92YXImIGEsIGNvbnN0IENPUkJBOjpGUkVFX01FTSom
IHYpIHsgcmV0dXJuIGEuaW4oKSA+Pj0gdjsgfQpuYW1lc3BhY2UgQ09SQkEgeyBjbGFzcyBJTlZf
SURFTlQ7IH0gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgQ09SQkE6OklOVl9JREVOVCop
OyB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6SU5WX0lERU5UJik7
IENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmLCBjb25zdCBDT1JC
QTo6SU5WX0lERU5UKiYpOyBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYg
YSwgQ09SQkE6OklOVl9JREVOVCogdikgeyBhLmlub3V0KCkgPDw9IHY7IH0gaW5saW5lIHZvaWQg
b3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImIGEsIGNvbnN0IENPUkJBOjpJTlZfSURFTlQmIHYp
IHsgYS5pbm91dCgpIDw8PSB2OyB9IGlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShj
b25zdCBDT1JCQTo6QW55X3ZhciYgYSwgY29uc3QgQ09SQkE6OklOVl9JREVOVComIHYpIHsgcmV0
dXJuIGEuaW4oKSA+Pj0gdjsgfQpuYW1lc3BhY2UgQ09SQkEgeyBjbGFzcyBJTlZfRkxBRzsgfSB2
b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBDT1JCQTo6SU5WX0ZMQUcqKTsgdm9pZCBvcGVy
YXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OklOVl9GTEFHJik7IENPUkJBOjpCb29s
ZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6SU5WX0ZMQUcq
Jik7IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnlfdmFyJiBhLCBDT1JCQTo6SU5W
X0ZMQUcqIHYpIHsgYS5pbm91dCgpIDw8PSB2OyB9IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KENP
UkJBOjpBbnlfdmFyJiBhLCBjb25zdCBDT1JCQTo6SU5WX0ZMQUcmIHYpIHsgYS5pbm91dCgpIDw8
PSB2OyB9IGlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55
X3ZhciYgYSwgY29uc3QgQ09SQkE6OklOVl9GTEFHKiYgdikgeyByZXR1cm4gYS5pbigpID4+PSB2
OyB9Cm5hbWVzcGFjZSBDT1JCQSB7IGNsYXNzIElOVEZfUkVQT1M7IH0gdm9pZCBvcGVyYXRvcjw8
PShDT1JCQTo6QW55JiwgQ09SQkE6OklOVEZfUkVQT1MqKTsgdm9pZCBvcGVyYXRvcjw8PShDT1JC
QTo6QW55JiwgY29uc3QgQ09SQkE6OklOVEZfUkVQT1MmKTsgQ09SQkE6OkJvb2xlYW4gb3BlcmF0
b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpJTlRGX1JFUE9TKiYpOyBpbmxp
bmUgdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYSwgQ09SQkE6OklOVEZfUkVQT1Mq
IHYpIHsgYS5pbm91dCgpIDw8PSB2OyB9IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpB
bnlfdmFyJiBhLCBjb25zdCBDT1JCQTo6SU5URl9SRVBPUyYgdikgeyBhLmlub3V0KCkgPDw9IHY7
IH0gaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnlfdmFy
JiBhLCBjb25zdCBDT1JCQTo6SU5URl9SRVBPUyomIHYpIHsgcmV0dXJuIGEuaW4oKSA+Pj0gdjsg
fQpuYW1lc3BhY2UgQ09SQkEgeyBjbGFzcyBCQURfQ09OVEVYVDsgfSB2b2lkIG9wZXJhdG9yPDw9
KENPUkJBOjpBbnkmLCBDT1JCQTo6QkFEX0NPTlRFWFQqKTsgdm9pZCBvcGVyYXRvcjw8PShDT1JC
QTo6QW55JiwgY29uc3QgQ09SQkE6OkJBRF9DT05URVhUJik7IENPUkJBOjpCb29sZWFuIG9wZXJh
dG9yPj49KGNvbnN0IENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6QkFEX0NPTlRFWFQqJik7IGlu
bGluZSB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnlfdmFyJiBhLCBDT1JCQTo6QkFEX0NPTlRF
WFQqIHYpIHsgYS5pbm91dCgpIDw8PSB2OyB9IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KENPUkJB
OjpBbnlfdmFyJiBhLCBjb25zdCBDT1JCQTo6QkFEX0NPTlRFWFQmIHYpIHsgYS5pbm91dCgpIDw8
PSB2OyB9IGlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55
X3ZhciYgYSwgY29uc3QgQ09SQkE6OkJBRF9DT05URVhUKiYgdikgeyByZXR1cm4gYS5pbigpID4+
PSB2OyB9Cm5hbWVzcGFjZSBDT1JCQSB7IGNsYXNzIE9CSl9BREFQVEVSOyB9IHZvaWQgb3BlcmF0
b3I8PD0oQ09SQkE6OkFueSYsIENPUkJBOjpPQkpfQURBUFRFUiopOyB2b2lkIG9wZXJhdG9yPDw9
KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6T0JKX0FEQVBURVImKTsgQ09SQkE6OkJvb2xlYW4g
b3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpPQkpfQURBUFRFUiom
KTsgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImIGEsIENPUkJBOjpPQkpf
QURBUFRFUiogdikgeyBhLmlub3V0KCkgPDw9IHY7IH0gaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0o
Q09SQkE6OkFueV92YXImIGEsIGNvbnN0IENPUkJBOjpPQkpfQURBUFRFUiYgdikgeyBhLmlub3V0
KCkgPDw9IHY7IH0gaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJB
OjpBbnlfdmFyJiBhLCBjb25zdCBDT1JCQTo6T0JKX0FEQVBURVIqJiB2KSB7IHJldHVybiBhLmlu
KCkgPj49IHY7IH0KbmFtZXNwYWNlIENPUkJBIHsgY2xhc3MgREFUQV9DT05WRVJTSU9OOyB9IHZv
aWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIENPUkJBOjpEQVRBX0NPTlZFUlNJT04qKTsgdm9p
ZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkRBVEFfQ09OVkVSU0lPTiYp
OyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiwgY29uc3QgQ09S
QkE6OkRBVEFfQ09OVkVSU0lPTiomKTsgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFu
eV92YXImIGEsIENPUkJBOjpEQVRBX0NPTlZFUlNJT04qIHYpIHsgYS5pbm91dCgpIDw8PSB2OyB9
IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnlfdmFyJiBhLCBjb25zdCBDT1JCQTo6
REFUQV9DT05WRVJTSU9OJiB2KSB7IGEuaW5vdXQoKSA8PD0gdjsgfSBpbmxpbmUgQ09SQkE6OkJv
b2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueV92YXImIGEsIGNvbnN0IENPUkJBOjpE
QVRBX0NPTlZFUlNJT04qJiB2KSB7IHJldHVybiBhLmluKCkgPj49IHY7IH0KbmFtZXNwYWNlIENP
UkJBIHsgY2xhc3MgT0JKRUNUX05PVF9FWElTVDsgfSB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpB
bnkmLCBDT1JCQTo6T0JKRUNUX05PVF9FWElTVCopOyB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpB
bnkmLCBjb25zdCBDT1JCQTo6T0JKRUNUX05PVF9FWElTVCYpOyBDT1JCQTo6Qm9vbGVhbiBvcGVy
YXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6Ok9CSkVDVF9OT1RfRVhJU1Qq
Jik7IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnlfdmFyJiBhLCBDT1JCQTo6T0JK
RUNUX05PVF9FWElTVCogdikgeyBhLmlub3V0KCkgPDw9IHY7IH0gaW5saW5lIHZvaWQgb3BlcmF0
b3I8PD0oQ09SQkE6OkFueV92YXImIGEsIGNvbnN0IENPUkJBOjpPQkpFQ1RfTk9UX0VYSVNUJiB2
KSB7IGEuaW5vdXQoKSA8PD0gdjsgfSBpbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0o
Y29uc3QgQ09SQkE6OkFueV92YXImIGEsIGNvbnN0IENPUkJBOjpPQkpFQ1RfTk9UX0VYSVNUKiYg
dikgeyByZXR1cm4gYS5pbigpID4+PSB2OyB9Cm5hbWVzcGFjZSBDT1JCQSB7IGNsYXNzIFRSQU5T
QUNUSU9OX1JFUVVJUkVEOyB9IHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIENPUkJBOjpU
UkFOU0FDVElPTl9SRVFVSVJFRCopOyB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25z
dCBDT1JCQTo6VFJBTlNBQ1RJT05fUkVRVUlSRUQmKTsgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+
Pj0oY29uc3QgQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpUUkFOU0FDVElPTl9SRVFVSVJFRCom
KTsgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImIGEsIENPUkJBOjpUUkFO
U0FDVElPTl9SRVFVSVJFRCogdikgeyBhLmlub3V0KCkgPDw9IHY7IH0gaW5saW5lIHZvaWQgb3Bl
cmF0b3I8PD0oQ09SQkE6OkFueV92YXImIGEsIGNvbnN0IENPUkJBOjpUUkFOU0FDVElPTl9SRVFV
SVJFRCYgdikgeyBhLmlub3V0KCkgPDw9IHY7IH0gaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJh
dG9yPj49KGNvbnN0IENPUkJBOjpBbnlfdmFyJiBhLCBjb25zdCBDT1JCQTo6VFJBTlNBQ1RJT05f
UkVRVUlSRUQqJiB2KSB7IHJldHVybiBhLmluKCkgPj49IHY7IH0KbmFtZXNwYWNlIENPUkJBIHsg
Y2xhc3MgVFJBTlNBQ1RJT05fUk9MTEVEQkFDSzsgfSB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpB
bnkmLCBDT1JCQTo6VFJBTlNBQ1RJT05fUk9MTEVEQkFDSyopOyB2b2lkIG9wZXJhdG9yPDw9KENP
UkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6VFJBTlNBQ1RJT05fUk9MTEVEQkFDSyYpOyBDT1JCQTo6
Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OlRSQU5T
QUNUSU9OX1JPTExFREJBQ0sqJik7IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnlf
dmFyJiBhLCBDT1JCQTo6VFJBTlNBQ1RJT05fUk9MTEVEQkFDSyogdikgeyBhLmlub3V0KCkgPDw9
IHY7IH0gaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImIGEsIGNvbnN0IENP
UkJBOjpUUkFOU0FDVElPTl9ST0xMRURCQUNLJiB2KSB7IGEuaW5vdXQoKSA8PD0gdjsgfSBpbmxp
bmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueV92YXImIGEsIGNv
bnN0IENPUkJBOjpUUkFOU0FDVElPTl9ST0xMRURCQUNLKiYgdikgeyByZXR1cm4gYS5pbigpID4+
PSB2OyB9Cm5hbWVzcGFjZSBDT1JCQSB7IGNsYXNzIElOVkFMSURfVFJBTlNBQ1RJT047IH0gdm9p
ZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgQ09SQkE6OklOVkFMSURfVFJBTlNBQ1RJT04qKTsg
dm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OklOVkFMSURfVFJBTlNB
Q1RJT04mKTsgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYsIGNv
bnN0IENPUkJBOjpJTlZBTElEX1RSQU5TQUNUSU9OKiYpOyBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8
PShDT1JCQTo6QW55X3ZhciYgYSwgQ09SQkE6OklOVkFMSURfVFJBTlNBQ1RJT04qIHYpIHsgYS5p
bm91dCgpIDw8PSB2OyB9IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnlfdmFyJiBh
LCBjb25zdCBDT1JCQTo6SU5WQUxJRF9UUkFOU0FDVElPTiYgdikgeyBhLmlub3V0KCkgPDw9IHY7
IH0gaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnlfdmFy
JiBhLCBjb25zdCBDT1JCQTo6SU5WQUxJRF9UUkFOU0FDVElPTiomIHYpIHsgcmV0dXJuIGEuaW4o
KSA+Pj0gdjsgfQpuYW1lc3BhY2UgQ09SQkEgeyBjbGFzcyBJTlZfUE9MSUNZOyB9IHZvaWQgb3Bl
cmF0b3I8PD0oQ09SQkE6OkFueSYsIENPUkJBOjpJTlZfUE9MSUNZKik7IHZvaWQgb3BlcmF0b3I8
PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpJTlZfUE9MSUNZJik7IENPUkJBOjpCb29sZWFu
IG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6SU5WX1BPTElDWSom
KTsgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImIGEsIENPUkJBOjpJTlZf
UE9MSUNZKiB2KSB7IGEuaW5vdXQoKSA8PD0gdjsgfSBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShD
T1JCQTo6QW55X3ZhciYgYSwgY29uc3QgQ09SQkE6OklOVl9QT0xJQ1kmIHYpIHsgYS5pbm91dCgp
IDw8PSB2OyB9IGlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6
QW55X3ZhciYgYSwgY29uc3QgQ09SQkE6OklOVl9QT0xJQ1kqJiB2KSB7IHJldHVybiBhLmluKCkg
Pj49IHY7IH0KbmFtZXNwYWNlIENPUkJBIHsgY2xhc3MgQ09ERVNFVF9JTkNPTVBBVElCTEU7IH0g
dm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgQ09SQkE6OkNPREVTRVRfSU5DT01QQVRJQkxF
Kik7IHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpDT0RFU0VUX0lO
Q09NUEFUSUJMRSYpOyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55
JiwgY29uc3QgQ09SQkE6OkNPREVTRVRfSU5DT01QQVRJQkxFKiYpOyBpbmxpbmUgdm9pZCBvcGVy
YXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYSwgQ09SQkE6OkNPREVTRVRfSU5DT01QQVRJQkxFKiB2
KSB7IGEuaW5vdXQoKSA8PD0gdjsgfSBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55
X3ZhciYgYSwgY29uc3QgQ09SQkE6OkNPREVTRVRfSU5DT01QQVRJQkxFJiB2KSB7IGEuaW5vdXQo
KSA8PD0gdjsgfSBpbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6
OkFueV92YXImIGEsIGNvbnN0IENPUkJBOjpDT0RFU0VUX0lOQ09NUEFUSUJMRSomIHYpIHsgcmV0
dXJuIGEuaW4oKSA+Pj0gdjsgfQpuYW1lc3BhY2UgQ09SQkEgeyBjbGFzcyBSRUJJTkQ7IH0gdm9p
ZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgQ09SQkE6OlJFQklORCopOyB2b2lkIG9wZXJhdG9y
PDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6UkVCSU5EJik7IENPUkJBOjpCb29sZWFuIG9w
ZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6UkVCSU5EKiYpOyBpbmxp
bmUgdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYSwgQ09SQkE6OlJFQklORCogdikg
eyBhLmlub3V0KCkgPDw9IHY7IH0gaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92
YXImIGEsIGNvbnN0IENPUkJBOjpSRUJJTkQmIHYpIHsgYS5pbm91dCgpIDw8PSB2OyB9IGlubGlu
ZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55X3ZhciYgYSwgY29u
c3QgQ09SQkE6OlJFQklORComIHYpIHsgcmV0dXJuIGEuaW4oKSA+Pj0gdjsgfQpuYW1lc3BhY2Ug
Q09SQkEgeyBjbGFzcyBUSU1FT1VUOyB9IHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIENP
UkJBOjpUSU1FT1VUKik7IHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJB
OjpUSU1FT1VUJik7IENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkm
LCBjb25zdCBDT1JCQTo6VElNRU9VVComKTsgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6
OkFueV92YXImIGEsIENPUkJBOjpUSU1FT1VUKiB2KSB7IGEuaW5vdXQoKSA8PD0gdjsgfSBpbmxp
bmUgdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYSwgY29uc3QgQ09SQkE6OlRJTUVP
VVQmIHYpIHsgYS5pbm91dCgpIDw8PSB2OyB9IGlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRv
cj4+PShjb25zdCBDT1JCQTo6QW55X3ZhciYgYSwgY29uc3QgQ09SQkE6OlRJTUVPVVQqJiB2KSB7
IHJldHVybiBhLmluKCkgPj49IHY7IH0KbmFtZXNwYWNlIENPUkJBIHsgY2xhc3MgVFJBTlNBQ1RJ
T05fVU5BVkFJTEFCTEU7IH0gdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgQ09SQkE6OlRS
QU5TQUNUSU9OX1VOQVZBSUxBQkxFKik7IHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNv
bnN0IENPUkJBOjpUUkFOU0FDVElPTl9VTkFWQUlMQUJMRSYpOyBDT1JCQTo6Qm9vbGVhbiBvcGVy
YXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OlRSQU5TQUNUSU9OX1VOQVZB
SUxBQkxFKiYpOyBpbmxpbmUgdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYSwgQ09S
QkE6OlRSQU5TQUNUSU9OX1VOQVZBSUxBQkxFKiB2KSB7IGEuaW5vdXQoKSA8PD0gdjsgfSBpbmxp
bmUgdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYSwgY29uc3QgQ09SQkE6OlRSQU5T
QUNUSU9OX1VOQVZBSUxBQkxFJiB2KSB7IGEuaW5vdXQoKSA8PD0gdjsgfSBpbmxpbmUgQ09SQkE6
OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueV92YXImIGEsIGNvbnN0IENPUkJB
OjpUUkFOU0FDVElPTl9VTkFWQUlMQUJMRSomIHYpIHsgcmV0dXJuIGEuaW4oKSA+Pj0gdjsgfQpu
YW1lc3BhY2UgQ09SQkEgeyBjbGFzcyBUUkFOU0FDVElPTl9NT0RFOyB9IHZvaWQgb3BlcmF0b3I8
PD0oQ09SQkE6OkFueSYsIENPUkJBOjpUUkFOU0FDVElPTl9NT0RFKik7IHZvaWQgb3BlcmF0b3I8
PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpUUkFOU0FDVElPTl9NT0RFJik7IENPUkJBOjpC
b29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6VFJBTlNB
Q1RJT05fTU9ERSomKTsgaW5saW5lIHZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImIGEs
IENPUkJBOjpUUkFOU0FDVElPTl9NT0RFKiB2KSB7IGEuaW5vdXQoKSA8PD0gdjsgfSBpbmxpbmUg
dm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYSwgY29uc3QgQ09SQkE6OlRSQU5TQUNU
SU9OX01PREUmIHYpIHsgYS5pbm91dCgpIDw8PSB2OyB9IGlubGluZSBDT1JCQTo6Qm9vbGVhbiBv
cGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55X3ZhciYgYSwgY29uc3QgQ09SQkE6OlRSQU5TQUNU
SU9OX01PREUqJiB2KSB7IHJldHVybiBhLmluKCkgPj49IHY7IH0KbmFtZXNwYWNlIENPUkJBIHsg
Y2xhc3MgQkFEX1FPUzsgfSB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBDT1JCQTo6QkFE
X1FPUyopOyB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6QkFEX1FP
UyYpOyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiwgY29uc3Qg
Q09SQkE6OkJBRF9RT1MqJik7IGlubGluZSB2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnlfdmFy
JiBhLCBDT1JCQTo6QkFEX1FPUyogdikgeyBhLmlub3V0KCkgPDw9IHY7IH0gaW5saW5lIHZvaWQg
b3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImIGEsIGNvbnN0IENPUkJBOjpCQURfUU9TJiB2KSB7
IGEuaW5vdXQoKSA8PD0gdjsgfSBpbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29u
c3QgQ09SQkE6OkFueV92YXImIGEsIGNvbnN0IENPUkJBOjpCQURfUU9TKiYgdikgeyByZXR1cm4g
YS5pbigpID4+PSB2OyB9CiMgMTUgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UeXBlQ29kZS5o
IiAyCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1R5cGVDb2RlQ29uc3QuaCIgMQojIDE2
ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVHlwZUNvZGUuaCIgMgojIDEgIi9ob21lL21hdHQv
b2IvaW5jbHVkZS9PQi9UQ0tpbmQuaCIgMQojIDM3ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0Iv
VENLaW5kLmgiCm5hbWVzcGFjZSBDT1JCQQp7Cgp9CgpuYW1lc3BhY2UgQ09SQkEKewoKfQoKbmFt
ZXNwYWNlIE9CU3R1YkltcGxfQ09SQkEKewoKfQoKbmFtZXNwYWNlIE9CU3R1YkltcGxfQ09SQkEK
ewoKfQoKCgoKbmFtZXNwYWNlIENPUkJBCnsKCgoKCmVudW0gVENLaW5kCnsKICAgIHRrX251bGws
CiAgICB0a192b2lkLAogICAgdGtfc2hvcnQsCiAgICB0a19sb25nLAogICAgdGtfdXNob3J0LAog
ICAgdGtfdWxvbmcsCiAgICB0a19mbG9hdCwKICAgIHRrX2RvdWJsZSwKICAgIHRrX2Jvb2xlYW4s
CiAgICB0a19jaGFyLAogICAgdGtfb2N0ZXQsCiAgICB0a19hbnksCiAgICB0a19UeXBlQ29kZSwK
ICAgIHRrX1ByaW5jaXBhbCwKICAgIHRrX29ianJlZiwKICAgIHRrX3N0cnVjdCwKICAgIHRrX3Vu
aW9uLAogICAgdGtfZW51bSwKICAgIHRrX3N0cmluZywKICAgIHRrX3NlcXVlbmNlLAogICAgdGtf
YXJyYXksCiAgICB0a19hbGlhcywKICAgIHRrX2V4Y2VwdCwKICAgIHRrX2xvbmdsb25nLAogICAg
dGtfdWxvbmdsb25nLAogICAgdGtfbG9uZ2RvdWJsZSwKICAgIHRrX3djaGFyLAogICAgdGtfd3N0
cmluZywKICAgIHRrX2ZpeGVkLAogICAgdGtfdmFsdWUsCiAgICB0a192YWx1ZV9ib3gsCiAgICB0
a19uYXRpdmUsCiAgICB0a19hYnN0cmFjdF9pbnRlcmZhY2UKfTsKCnR5cGVkZWYgVENLaW5kJiBU
Q0tpbmRfb3V0OwoKICAgICAgICAgIGV4dGVybiBPQjo6VHlwZUNvZGVDb25zdCBfdGNfVENLaW5k
OwoKfQoKCgoKbmFtZXNwYWNlIE9CU3R1YkltcGxfQ09SQkEKewoKfQoKCgoKbmFtZXNwYWNlIE9C
TWFyc2hhbFN0dWJJbXBsX0NPUkJBCnsKCn0KCgoKCm5hbWVzcGFjZSBPQlZfQ09SQkEKewoKfQoK
CgoKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgQ09SQkE6OlRDS2luZCk7CkNPUkJBOjpC
b29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmLCBDT1JCQTo6VENLaW5kJik7Cgpp
bmxpbmUgdm9pZApvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYW55LCBDT1JCQTo6VENLaW5k
IHZhbCkKewogICAgYW55Lmlub3V0KCkgPDw9IHZhbDsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFu
Cm9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnlfdmFyJiBhbnksIENPUkJBOjpUQ0tpbmQmIHZh
bCkKewogICAgcmV0dXJuIGFueS5pbigpID4+PSB2YWw7Cn0KIyAxNyAiL2hvbWUvbWF0dC9vYi9p
bmNsdWRlL09CL1R5cGVDb2RlLmgiIDIKCm5hbWVzcGFjZSBPQgp7CgoKCgpjbGFzcyBUeXBlQ29k
ZUNvbnN0OwpjbGFzcyBUeXBlQ29kZUZhY3Rvcnk7Cgp9CgpuYW1lc3BhY2UgQ09SQkEKewoKCgoK
dHlwZWRlZiBDT1JCQTo6U2hvcnQgVmFsdWVNb2RpZmllcjsKdHlwZWRlZiBDT1JCQTo6U2hvcnQg
VmlzaWJpbGl0eTsKIyA0NSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1R5cGVDb2RlLmgiCmNs
YXNzIFR5cGVDb2RlIDogcHVibGljIE9COjpTaW1wbGVSZWZDb3VudAp7CgoKCiAgICBUQ0tpbmQg
a2luZF87CgoKCgoKICAgIFN0cmluZ192YXIgaWRfOwogICAgU3RyaW5nX3ZhciBuYW1lXzsKCgoK
CiAgICBPQjo6U3RyU2VxPCBpbnQgPiBtZW1iZXJOYW1lc187CgoKCgogICAgT0I6Ok9ialNlcTwg
VHlwZUNvZGUsIGludCA+IG1lbWJlclR5cGVzXzsKCgoKCiAgICBPQjo6VmFyU2VxPCBBbnksIGlu
dCA+IGxhYmVsc187CgoKCgogICAgVHlwZUNvZGVfdmFyIGRpc2NyaW1pbmF0b3JUeXBlXzsKCgoK
CiAgICBVTG9uZyBsZW5ndGhfOwoKCgoKICAgIFR5cGVDb2RlX3ZhciBjb250ZW50VHlwZV87CgoK
CgogICAgVVNob3J0IGZpeGVkRGlnaXRzXzsKICAgIFNob3J0IGZpeGVkU2NhbGVfOwoKCgoKICAg
IE9COjpGaXhTZXE8IFNob3J0LCBpbnQgPiBtZW1iZXJWaXNpYmlsaXR5XzsKICAgIFZhbHVlTW9k
aWZpZXIgdHlwZU1vZGlmaWVyXzsKICAgIFR5cGVDb2RlX3ZhciBjb25jcmV0ZUJhc2VUeXBlXzsK
CgoKCgoKCiAgICBTdHJpbmdfdmFyIHJlY0lkXzsKICAgIFR5cGVDb2RlX3ZhciByZWNUeXBlXzsK
CgoKCiAgICBib29sIGVxdWl2YWxlbnRSZWNIZWxwZXIoVHlwZUNvZGVfcHRyLCBPQjo6Rml4U2Vx
PCBUeXBlQ29kZV9wdHIsIGludCA+JiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQjo6
Rml4U2VxPCBUeXBlQ29kZV9wdHIsIGludCA+JikgY29uc3Q7CiAgICBib29sIGVxdWl2YWxlbnRS
ZWMoVHlwZUNvZGVfcHRyLCBPQjo6Rml4U2VxPCBUeXBlQ29kZV9wdHIsIGludCA+JiwKICAgICAg
ICAgICAgICAgICAgICAgICBPQjo6Rml4U2VxPCBUeXBlQ29kZV9wdHIsIGludCA+JikgY29uc3Q7
CgoKCgogICAgVHlwZUNvZGVfcHRyIGdldENvbXBhY3RUeXBlQ29kZVJlYyhPQjo6Rml4U2VxPCBU
eXBlQ29kZV9wdHIsIGludCA+JiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgT0I6OkZpeFNlcTwgVHlwZUNvZGVfcHRyLCBpbnQgPiYpIGNvbnN0OwoKCgoKICAgIFVMb25n
IHRyeVJlZkNvdW50XzsKICAgIGJvb2wgcmVsZWFzZVZpc2l0XzsKICAgIGJvb2wgdHJ5UmVsZWFz
ZVZpc2l0XzsKICAgIGJvb2wgcmVhY2hhYmxlVmlzaXRfOwogICAgdm9pZCByZXNldFRyeVJlbGVh
c2UoKTsKICAgIHZvaWQgdHJ5UmVsZWFzZSgpOwogICAgYm9vbCBjaGVja1RyeVJlbGVhc2UoVHlw
ZUNvZGVfcHRyKTsKICAgIGJvb2wgaXNSZWFjaGFibGUoVHlwZUNvZGVfcHRyKTsKCgoKCiAgICBU
eXBlQ29kZShjb25zdCBUeXBlQ29kZSYpOwogICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVHlwZUNv
ZGUmKTsKCnByb3RlY3RlZDoKCgoKCiAgICBmcmllbmQgY2xhc3MgOjpPQjo6VHlwZUNvZGVDb25z
dDsKICAgIGZyaWVuZCBjbGFzcyA6Ok9COjpUeXBlQ29kZUZhY3Rvcnk7CgoKCgogICAgZnJpZW5k
IGNsYXNzIDo6T0I6OklucHV0U3RyZWFtSW1wbDsKICAgIGZyaWVuZCBjbGFzcyA6Ok9COjpPdXRw
dXRTdHJlYW1JbXBsOwoKICAgIFR5cGVDb2RlKCk7CiAgICB2aXJ0dWFsIH5UeXBlQ29kZSgpOwoK
cHVibGljOgoKCgoKICAgIHN0YXRpYyBpbmxpbmUgVHlwZUNvZGVfcHRyIF9kdXBsaWNhdGUoVHlw
ZUNvZGVfcHRyIHApCiAgICB7CiAgICAgICAgaWYocCkKICAgICAgICB7CgoKCgogICAgICAgICAg
ICBwIC0+IF9PQl9kdXBsaWNhdGVXaXRoR0MoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBw
OwogICAgfQoKICAgIHN0YXRpYyBpbmxpbmUgVHlwZUNvZGVfcHRyIF9uaWwoKQogICAgeyByZXR1
cm4gMDsgfQoKICAgIHN0cnVjdCBCb3VuZHMgOiBwdWJsaWMgVXNlckV4Y2VwdGlvbgogICAgewoK
CgogICAgICAgIEJvdW5kcygpIHsgfQogICAgICAgIEJvdW5kcyhjb25zdCBCb3VuZHMmIGV4KSA6
IFVzZXJFeGNlcHRpb24oZXgpIHsgfQogICAgICAgIEJvdW5kcyYgb3BlcmF0b3I9KGNvbnN0IEJv
dW5kcyYpIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICAgIHN0YXRpYyBCb3VuZHMqIF9kb3duY2Fz
dChFeGNlcHRpb24qIHApCiAgICAgICAgeyByZXR1cm4gZHluYW1pY19jYXN0PEJvdW5kcyo+KHAp
OyB9CiAgICAgICAgc3RhdGljIGNvbnN0IEJvdW5kcyogX2Rvd25jYXN0KGNvbnN0IEV4Y2VwdGlv
biogcCkKICAgICAgICB7IHJldHVybiBkeW5hbWljX2Nhc3Q8Y29uc3QgQm91bmRzKj4ocCk7IH0K
ICAgICAgICB2aXJ0dWFsIHZvaWQgX3JhaXNlKCkgY29uc3QgeyB0aHJvdyAqdGhpczsgfQogICAg
ICAgIHZpcnR1YWwgY29uc3QgY2hhciogX25hbWUoKSBjb25zdCB7IHJldHVybiAiQm91bmRzIjsg
fQogICAgICAgIHZpcnR1YWwgY29uc3QgY2hhciogX3JlcF9pZCgpIGNvbnN0CiAgICAgICAgeyBy
ZXR1cm4gIklETDpvbWcub3JnL0NPUkJBL1R5cGVDb2RlL0JvdW5kczoxLjAiOyB9CgoKCgogICAg
ICAgIHZpcnR1YWwgY2hhciogX3RvX3N0cmluZygpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gX09C
X2RlZmF1bHRUb1N0cmluZygiQ09SQkE6OlR5cGVDb2RlOjpCb3VuZHMiKTsgfQoKCgoKCiAgICAg
ICAgdmlydHVhbCBFeGNlcHRpb24qIF9PQl9jbG9uZSgpIGNvbnN0IHsgcmV0dXJuIG5ldyBCb3Vu
ZHMoKnRoaXMpOyB9CiAgICAgICAgdmlydHVhbCB2b2lkIF9PQl9pbnNlcnRJbkFueShBbnkmKTsK
ICAgICAgICBzdGF0aWMgdm9pZCBfT0JfdW5tYXJzaGFsKEJvdW5kcyYsIE9COjpJbnB1dFN0cmVh
bUltcGwqKTsKICAgIH07CgogICAgY2xhc3MgVHlwZUNvZGVDb25zdEZvckJvdW5kcwogICAgewog
ICAgICAgIFR5cGVDb2RlQ29uc3RGb3JCb3VuZHMoY29uc3QgVHlwZUNvZGVDb25zdEZvckJvdW5k
cyYpOwogICAgICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFR5cGVDb2RlQ29uc3RGb3JCb3VuZHMm
KTsKCiAgICAgICAgQ09SQkE6OlR5cGVDb2RlX3ZhciB0eXBlQ29kZV87CgogICAgcHVibGljOgoK
ICAgICAgICBUeXBlQ29kZUNvbnN0Rm9yQm91bmRzKCkgeyB9CgogICAgICAgIG9wZXJhdG9yIENP
UkJBOjpUeXBlQ29kZV9wdHIoKTsKICAgICAgICBDT1JCQTo6VHlwZUNvZGVfcHRyIG9wZXJhdG9y
LT4oKQogICAgICAgIHsgcmV0dXJuIG9wZXJhdG9yIENPUkJBOjpUeXBlQ29kZV9wdHIoKTsgfQog
ICAgfTsKICAgIHN0YXRpYyBUeXBlQ29kZUNvbnN0Rm9yQm91bmRzIF90Y19Cb3VuZHM7CgogICAg
c3RydWN0IEJhZEtpbmQgOiBwdWJsaWMgVXNlckV4Y2VwdGlvbgogICAgewoKCgogICAgICAgIEJh
ZEtpbmQoKSB7IH0KICAgICAgICBCYWRLaW5kKGNvbnN0IEJhZEtpbmQmIGV4KSA6IFVzZXJFeGNl
cHRpb24oZXgpIHsgfQogICAgICAgIEJhZEtpbmQmIG9wZXJhdG9yPShjb25zdCBCYWRLaW5kJikg
eyByZXR1cm4gKnRoaXM7IH0KCiAgICAgICAgc3RhdGljIEJhZEtpbmQqIF9kb3duY2FzdChFeGNl
cHRpb24qIHApCiAgICAgICAgeyByZXR1cm4gZHluYW1pY19jYXN0PEJhZEtpbmQqPihwKTsgfQog
ICAgICAgIHN0YXRpYyBjb25zdCBCYWRLaW5kKiBfZG93bmNhc3QoY29uc3QgRXhjZXB0aW9uKiBw
KQogICAgICAgIHsgcmV0dXJuIGR5bmFtaWNfY2FzdDxjb25zdCBCYWRLaW5kKj4ocCk7IH0KICAg
ICAgICB2aXJ0dWFsIHZvaWQgX3JhaXNlKCkgY29uc3QgeyB0aHJvdyAqdGhpczsgfQogICAgICAg
IHZpcnR1YWwgY29uc3QgY2hhciogX25hbWUoKSBjb25zdCB7IHJldHVybiAiQmFkS2luZCI7IH0K
ICAgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9yZXBfaWQoKSBjb25zdAogICAgICAgIHsgcmV0
dXJuICJJREw6b21nLm9yZy9DT1JCQS9UeXBlQ29kZS9CYWRLaW5kOjEuMCI7IH0KCgoKCiAgICAg
ICAgdmlydHVhbCBjaGFyKiBfdG9fc3RyaW5nKCkgY29uc3QKICAgICAgICB7IHJldHVybiBfT0Jf
ZGVmYXVsdFRvU3RyaW5nKCJDT1JCQTo6VHlwZUNvZGU6OkJhZEtpbmQiKTsgfQoKCgoKCiAgICAg
ICAgdmlydHVhbCBFeGNlcHRpb24qIF9PQl9jbG9uZSgpIGNvbnN0IHsgcmV0dXJuIG5ldyBCYWRL
aW5kKCp0aGlzKTsgfQogICAgICAgIHZpcnR1YWwgdm9pZCBfT0JfaW5zZXJ0SW5BbnkoQW55Jik7
CiAgICAgICAgc3RhdGljIHZvaWQgX09CX3VubWFyc2hhbChCYWRLaW5kJiwgT0I6OklucHV0U3Ry
ZWFtSW1wbCopOwogICAgfTsKCiAgICBjbGFzcyBUeXBlQ29kZUNvbnN0Rm9yQmFkS2luZAogICAg
ewogICAgICAgIFR5cGVDb2RlQ29uc3RGb3JCYWRLaW5kKGNvbnN0IFR5cGVDb2RlQ29uc3RGb3JC
YWRLaW5kJik7CiAgICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVHlwZUNvZGVDb25zdEZvckJh
ZEtpbmQmKTsKCiAgICAgICAgQ09SQkE6OlR5cGVDb2RlX3ZhciB0eXBlQ29kZV87CgogICAgcHVi
bGljOgoKICAgICAgICBUeXBlQ29kZUNvbnN0Rm9yQmFkS2luZCgpIHsgfQoKICAgICAgICBvcGVy
YXRvciBDT1JCQTo6VHlwZUNvZGVfcHRyKCk7CiAgICAgICAgQ09SQkE6OlR5cGVDb2RlX3B0ciBv
cGVyYXRvci0+KCkKICAgICAgICB7IHJldHVybiBvcGVyYXRvciBDT1JCQTo6VHlwZUNvZGVfcHRy
KCk7IH0KICAgIH07CiAgICBzdGF0aWMgVHlwZUNvZGVDb25zdEZvckJhZEtpbmQgX3RjX0JhZEtp
bmQ7CgogICAgQm9vbGVhbiBlcXVhbChUeXBlQ29kZV9wdHIpIGNvbnN0OwogICAgQm9vbGVhbiBl
cXVpdmFsZW50KFR5cGVDb2RlX3B0cikgY29uc3Q7CiAgICBUeXBlQ29kZV9wdHIgZ2V0X2NvbXBh
Y3RfdHlwZWNvZGUoKSBjb25zdDsKICAgIFRDS2luZCBraW5kKCkgY29uc3Q7CgogICAgY29uc3Qg
Y2hhciogaWQoKSBjb25zdDsKICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdDsKCiAgICBVTG9u
ZyBtZW1iZXJfY291bnQoKSBjb25zdDsKICAgIGNvbnN0IGNoYXIqIG1lbWJlcl9uYW1lKFVMb25n
IGluZGV4KSBjb25zdDsKCiAgICBUeXBlQ29kZV9wdHIgbWVtYmVyX3R5cGUoVUxvbmcgaW5kZXgp
IGNvbnN0OwoKICAgIEFueSogbWVtYmVyX2xhYmVsKFVMb25nIGluZGV4KSBjb25zdDsKICAgIFR5
cGVDb2RlX3B0ciBkaXNjcmltaW5hdG9yX3R5cGUoKSBjb25zdDsKICAgIExvbmcgZGVmYXVsdF9p
bmRleCgpIGNvbnN0OwoKICAgIFVMb25nIGxlbmd0aCgpIGNvbnN0OwoKICAgIFR5cGVDb2RlX3B0
ciBjb250ZW50X3R5cGUoKSBjb25zdDsKCiAgICBVU2hvcnQgZml4ZWRfZGlnaXRzKCkgY29uc3Q7
CiAgICBTaG9ydCBmaXhlZF9zY2FsZSgpIGNvbnN0OwoKICAgIFZpc2liaWxpdHkgbWVtYmVyX3Zp
c2liaWxpdHkoVUxvbmcpIGNvbnN0OwogICAgVmFsdWVNb2RpZmllciB0eXBlX21vZGlmaWVyKCkg
Y29uc3Q7CiAgICBUeXBlQ29kZV9wdHIgY29uY3JldGVfYmFzZV90eXBlKCkgY29uc3Q7CgoKCgoK
ICAgIGJvb2wgX09CX2lzU3lzdGVtRXhjZXB0aW9uKCkgY29uc3Q7CiAgICBib29sIF9PQl9pc1Jl
Y3Vyc2l2ZSgpIGNvbnN0IHsgcmV0dXJuIHJlY0lkXy5pbigpID8gdHJ1ZSA6IGZhbHNlOyB9CiAg
ICB2b2lkIF9PQl9kdXBsaWNhdGVXaXRoR0MoKTsKICAgIHZvaWQgX09CX3JlbGVhc2VXaXRoR0Mo
KTsKCiAgICBUeXBlQ29kZV9wdHIgX09CX2NvbnRlbnRUeXBlX25vZHVwKCkgY29uc3Q7CiAgICBU
eXBlQ29kZV9wdHIgX09CX21lbWJlclR5cGVfbm9kdXAoVUxvbmcgaW5kZXgpIGNvbnN0OwogICAg
VHlwZUNvZGVfcHRyIF9PQl9kaXNjcmltaW5hdG9yVHlwZV9ub2R1cCgpIGNvbnN0OwogICAgVHlw
ZUNvZGVfcHRyIF9PQl9jb25jcmV0ZUJhc2VUeXBlX25vZHVwKCkgY29uc3Q7CgoKCgogICAgc3Rh
dGljIHZvaWQgX09CX2VtYmVkUmVjVEMoVHlwZUNvZGVfcHRyKTsKICAgIHN0YXRpYyB2b2lkIF9P
Ql9lbWJlZFJlY1RDKFR5cGVDb2RlX3B0ciwgVHlwZUNvZGVfcHRyKTsKfTsKCmlubGluZSBCb29s
ZWFuCmlzX25pbChUeXBlQ29kZV9wdHIgcCkKewogICAgcmV0dXJuIHAgPT0gMDsKfQoKaW5saW5l
IHZvaWQKcmVsZWFzZShUeXBlQ29kZV9wdHIgcCkKewogICAgaWYoIWlzX25pbChwKSkKICAgIHsK
CgoKCiAgICAgICAgcCAtPiBfT0JfcmVsZWFzZVdpdGhHQygpOwogICAgfQp9Cgp9CgoKCgp2b2lk
IG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBDT1JCQTo6VHlwZUNvZGU6OkJvdW5kcyopOwp2b2lk
IG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6VHlwZUNvZGU6OkJvdW5kcyYp
OwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiwgQ09SQkE6OlR5
cGVDb2RlOjpCb3VuZHMqJik7CgppbmxpbmUgdm9pZApvcGVyYXRvcjw8PShDT1JCQTo6QW55X3Zh
ciYgYW55LCBDT1JCQTo6VHlwZUNvZGU6OkJvdW5kcyogdmFsKQp7CiAgICBhbnkuaW5vdXQoKSA8
PD0gdmFsOwp9CgppbmxpbmUgdm9pZApvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYW55LCBj
b25zdCBDT1JCQTo6VHlwZUNvZGU6OkJvdW5kcyYgdmFsKQp7CiAgICBhbnkuaW5vdXQoKSA8PD0g
dmFsOwp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4Kb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFu
eV92YXImIGFueSwgQ09SQkE6OlR5cGVDb2RlOjpCb3VuZHMqJiB2YWwpCnsKICAgIHJldHVybiBh
bnkuaW4oKSA+Pj0gdmFsOwp9CgoKCgp2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBDT1JC
QTo6VHlwZUNvZGU6OkJhZEtpbmQqKTsKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29u
c3QgQ09SQkE6OlR5cGVDb2RlOjpCYWRLaW5kJik7CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49
KGNvbnN0IENPUkJBOjpBbnkmLCBDT1JCQTo6VHlwZUNvZGU6OkJhZEtpbmQqJik7CgppbmxpbmUg
dm9pZApvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYW55LCBDT1JCQTo6VHlwZUNvZGU6OkJh
ZEtpbmQqIHZhbCkKewogICAgYW55Lmlub3V0KCkgPDw9IHZhbDsKfQoKaW5saW5lIHZvaWQKb3Bl
cmF0b3I8PD0oQ09SQkE6OkFueV92YXImIGFueSwgY29uc3QgQ09SQkE6OlR5cGVDb2RlOjpCYWRL
aW5kJiB2YWwpCnsKICAgIGFueS5pbm91dCgpIDw8PSB2YWw7Cn0KCmlubGluZSBDT1JCQTo6Qm9v
bGVhbgpvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55X3ZhciYgYW55LCBDT1JCQTo6VHlwZUNv
ZGU6OkJhZEtpbmQqJiB2YWwpCnsKICAgIHJldHVybiBhbnkuaW4oKSA+Pj0gdmFsOwp9CgpuYW1l
c3BhY2UgT0IKewoKCgoKY2xhc3MgVHlwZUNvZGVQcmltaXRpdmVDb25zdAp7CiAgICBUeXBlQ29k
ZVByaW1pdGl2ZUNvbnN0KGNvbnN0IFR5cGVDb2RlUHJpbWl0aXZlQ29uc3QmKTsKICAgIHZvaWQg
b3BlcmF0b3I9KGNvbnN0IFR5cGVDb2RlUHJpbWl0aXZlQ29uc3QmKTsKCiAgICBDT1JCQTo6VHlw
ZUNvZGVfdmFyIHR5cGVDb2RlXzsKICAgIENPUkJBOjpUQ0tpbmQga2luZF87CgpwdWJsaWM6Cgog
ICAgVHlwZUNvZGVQcmltaXRpdmVDb25zdChDT1JCQTo6VENLaW5kIGtpbmQpIDoga2luZF8oa2lu
ZCkgeyB9CgogICAgb3BlcmF0b3IgQ09SQkE6OlR5cGVDb2RlX3B0cigpOwogICAgQ09SQkE6OlR5
cGVDb2RlX3B0ciBvcGVyYXRvci0+KCkKICAgIHsgcmV0dXJuIG9wZXJhdG9yIENPUkJBOjpUeXBl
Q29kZV9wdHIoKTsgfQp9OwoKY2xhc3MgVHlwZUNvZGVTdHJpbmdDb25zdAp7CiAgICBUeXBlQ29k
ZVN0cmluZ0NvbnN0KGNvbnN0IFR5cGVDb2RlU3RyaW5nQ29uc3QmKTsKICAgIHZvaWQgb3BlcmF0
b3I9KGNvbnN0IFR5cGVDb2RlU3RyaW5nQ29uc3QmKTsKCiAgICBDT1JCQTo6VHlwZUNvZGVfdmFy
IHR5cGVDb2RlXzsKICAgIGJvb2wgd2lkZV87CgpwdWJsaWM6CgogICAgVHlwZUNvZGVTdHJpbmdD
b25zdChib29sIHdpZGUpIDogd2lkZV8od2lkZSkgeyB9CgogICAgb3BlcmF0b3IgQ09SQkE6OlR5
cGVDb2RlX3B0cigpOwogICAgQ09SQkE6OlR5cGVDb2RlX3B0ciBvcGVyYXRvci0+KCkKICAgIHsg
cmV0dXJuIG9wZXJhdG9yIENPUkJBOjpUeXBlQ29kZV9wdHIoKTsgfQoKCgoKCiAgICBDT1JCQTo6
VHlwZUNvZGVfcHRyIF9PQl9ib3VuZGVkKENPUkJBOjpVTG9uZyk7Cn07CgpjbGFzcyBUeXBlQ29k
ZUZpeGVkQ29uc3QKewogICAgVHlwZUNvZGVGaXhlZENvbnN0KGNvbnN0IFR5cGVDb2RlRml4ZWRD
b25zdCYpOwogICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVHlwZUNvZGVGaXhlZENvbnN0Jik7Cgog
ICAgQ09SQkE6OlR5cGVDb2RlX3ZhciB0eXBlQ29kZV87CgpwdWJsaWM6CgogICAgVHlwZUNvZGVG
aXhlZENvbnN0KCkgeyB9CgogICAgb3BlcmF0b3IgQ09SQkE6OlR5cGVDb2RlX3B0cigpOwogICAg
Q09SQkE6OlR5cGVDb2RlX3B0ciBvcGVyYXRvci0+KCkKICAgIHsgcmV0dXJuIG9wZXJhdG9yIENP
UkJBOjpUeXBlQ29kZV9wdHIoKTsgfQoKCgoKCiAgICBDT1JCQTo6VHlwZUNvZGVfcHRyIF9PQl9m
aXhlZChDT1JCQTo6VVNob3J0LCBDT1JCQTo6VVNob3J0KTsKfTsKCmNsYXNzIFR5cGVDb2RlT2Jq
ZWN0Q29uc3QKewogICAgVHlwZUNvZGVPYmplY3RDb25zdChjb25zdCBUeXBlQ29kZU9iamVjdENv
bnN0Jik7CiAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBUeXBlQ29kZU9iamVjdENvbnN0Jik7Cgog
ICAgQ09SQkE6OlR5cGVDb2RlX3ZhciB0eXBlQ29kZV87CgpwdWJsaWM6CgogICAgVHlwZUNvZGVP
YmplY3RDb25zdCgpIHsgfQoKICAgIG9wZXJhdG9yIENPUkJBOjpUeXBlQ29kZV9wdHIoKTsKICAg
IENPUkJBOjpUeXBlQ29kZV9wdHIgb3BlcmF0b3ItPigpCiAgICB7IHJldHVybiBvcGVyYXRvciBD
T1JCQTo6VHlwZUNvZGVfcHRyKCk7IH0KfTsKCmNsYXNzIFR5cGVDb2RlQWJzdHJhY3RCYXNlQ29u
c3QKewogICAgVHlwZUNvZGVBYnN0cmFjdEJhc2VDb25zdChjb25zdCBUeXBlQ29kZUFic3RyYWN0
QmFzZUNvbnN0Jik7CiAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBUeXBlQ29kZUFic3RyYWN0QmFz
ZUNvbnN0Jik7CgogICAgQ09SQkE6OlR5cGVDb2RlX3ZhciB0eXBlQ29kZV87CgpwdWJsaWM6Cgog
ICAgVHlwZUNvZGVBYnN0cmFjdEJhc2VDb25zdCgpIHsgfQoKICAgIG9wZXJhdG9yIENPUkJBOjpU
eXBlQ29kZV9wdHIoKTsKICAgIENPUkJBOjpUeXBlQ29kZV9wdHIgb3BlcmF0b3ItPigpCiAgICB7
IHJldHVybiBvcGVyYXRvciBDT1JCQTo6VHlwZUNvZGVfcHRyKCk7IH0KfTsKCmNsYXNzIFR5cGVD
b2RlVmFsdWVCYXNlQ29uc3QKewogICAgVHlwZUNvZGVWYWx1ZUJhc2VDb25zdChjb25zdCBUeXBl
Q29kZVZhbHVlQmFzZUNvbnN0Jik7CiAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBUeXBlQ29kZVZh
bHVlQmFzZUNvbnN0Jik7CgogICAgQ09SQkE6OlR5cGVDb2RlX3ZhciB0eXBlQ29kZV87CgpwdWJs
aWM6CgogICAgVHlwZUNvZGVWYWx1ZUJhc2VDb25zdCgpIHsgfQoKICAgIG9wZXJhdG9yIENPUkJB
OjpUeXBlQ29kZV9wdHIoKTsKICAgIENPUkJBOjpUeXBlQ29kZV9wdHIgb3BlcmF0b3ItPigpCiAg
ICB7IHJldHVybiBvcGVyYXRvciBDT1JCQTo6VHlwZUNvZGVfcHRyKCk7IH0KfTsKCmNsYXNzIFR5
cGVDb2RlU3lzRXhDb25zdAp7CiAgICBUeXBlQ29kZVN5c0V4Q29uc3QoY29uc3QgVHlwZUNvZGVT
eXNFeENvbnN0Jik7CiAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBUeXBlQ29kZVN5c0V4Q29uc3Qm
KTsKCiAgICBDT1JCQTo6VHlwZUNvZGVfdmFyIHR5cGVDb2RlXzsKICAgIGNvbnN0IGNoYXIqIG5h
bWVfOwoKcHVibGljOgoKICAgIFR5cGVDb2RlU3lzRXhDb25zdChjb25zdCBjaGFyKiBuYW1lKSA6
IG5hbWVfKG5hbWUpIHsgfQoKICAgIG9wZXJhdG9yIENPUkJBOjpUeXBlQ29kZV9wdHIoKTsKICAg
IENPUkJBOjpUeXBlQ29kZV9wdHIgb3BlcmF0b3ItPigpCiAgICB7IHJldHVybiBvcGVyYXRvciBD
T1JCQTo6VHlwZUNvZGVfcHRyKCk7IH0KfTsKCgoKCkNPUkJBOjpUeXBlQ29kZV9wdHIgR2V0T3Jp
Z1R5cGUoQ09SQkE6OlR5cGVDb2RlX3B0cik7CkNPUkJBOjpUeXBlQ29kZV9wdHIgR2V0T3JpZ1R5
cGVfbm9kdXAoQ09SQkE6OlR5cGVDb2RlX3B0cik7Cgp9CgpuYW1lc3BhY2UgQ09SQkEKewoKCgoK
ICAgICAgICAgIGV4dGVybiBPQjo6VHlwZUNvZGVQcmltaXRpdmVDb25zdCBfdGNfbnVsbDsKICAg
ICAgICAgIGV4dGVybiBPQjo6VHlwZUNvZGVQcmltaXRpdmVDb25zdCBfdGNfdm9pZDsKICAgICAg
ICAgIGV4dGVybiBPQjo6VHlwZUNvZGVQcmltaXRpdmVDb25zdCBfdGNfc2hvcnQ7CiAgICAgICAg
ICBleHRlcm4gT0I6OlR5cGVDb2RlUHJpbWl0aXZlQ29uc3QgX3RjX2xvbmc7CiAgICAgICAgICBl
eHRlcm4gT0I6OlR5cGVDb2RlUHJpbWl0aXZlQ29uc3QgX3RjX2xvbmdsb25nOwogICAgICAgICAg
ZXh0ZXJuIE9COjpUeXBlQ29kZVByaW1pdGl2ZUNvbnN0IF90Y191c2hvcnQ7CiAgICAgICAgICBl
eHRlcm4gT0I6OlR5cGVDb2RlUHJpbWl0aXZlQ29uc3QgX3RjX3Vsb25nOwogICAgICAgICAgZXh0
ZXJuIE9COjpUeXBlQ29kZVByaW1pdGl2ZUNvbnN0IF90Y191bG9uZ2xvbmc7CiAgICAgICAgICBl
eHRlcm4gT0I6OlR5cGVDb2RlUHJpbWl0aXZlQ29uc3QgX3RjX2Zsb2F0OwogICAgICAgICAgZXh0
ZXJuIE9COjpUeXBlQ29kZVByaW1pdGl2ZUNvbnN0IF90Y19kb3VibGU7CiAgICAgICAgICBleHRl
cm4gT0I6OlR5cGVDb2RlUHJpbWl0aXZlQ29uc3QgX3RjX2xvbmdkb3VibGU7CiAgICAgICAgICBl
eHRlcm4gT0I6OlR5cGVDb2RlUHJpbWl0aXZlQ29uc3QgX3RjX2Jvb2xlYW47CiAgICAgICAgICBl
eHRlcm4gT0I6OlR5cGVDb2RlUHJpbWl0aXZlQ29uc3QgX3RjX2NoYXI7CiAgICAgICAgICBleHRl
cm4gT0I6OlR5cGVDb2RlUHJpbWl0aXZlQ29uc3QgX3RjX3djaGFyOwogICAgICAgICAgZXh0ZXJu
IE9COjpUeXBlQ29kZVByaW1pdGl2ZUNvbnN0IF90Y19vY3RldDsKICAgICAgICAgIGV4dGVybiBP
Qjo6VHlwZUNvZGVQcmltaXRpdmVDb25zdCBfdGNfYW55OwogICAgICAgICAgZXh0ZXJuIE9COjpU
eXBlQ29kZVByaW1pdGl2ZUNvbnN0IF90Y19UeXBlQ29kZTsKICAgICAgICAgIGV4dGVybiBPQjo6
VHlwZUNvZGVQcmltaXRpdmVDb25zdCBfdGNfUHJpbmNpcGFsOwoKICAgICAgICAgIGV4dGVybiBP
Qjo6VHlwZUNvZGVTdHJpbmdDb25zdCBfdGNfc3RyaW5nOwogICAgICAgICAgZXh0ZXJuIE9COjpU
eXBlQ29kZVN0cmluZ0NvbnN0IF90Y193c3RyaW5nOwoKICAgICAgICAgIGV4dGVybiBPQjo6VHlw
ZUNvZGVGaXhlZENvbnN0IF90Y19maXhlZDsKCiAgICAgICAgICBleHRlcm4gT0I6OlR5cGVDb2Rl
T2JqZWN0Q29uc3QgX3RjX09iamVjdDsKCiAgICAgICAgICBleHRlcm4gT0I6OlR5cGVDb2RlQWJz
dHJhY3RCYXNlQ29uc3QgX3RjX0Fic3RyYWN0QmFzZTsKCiAgICAgICAgICBleHRlcm4gT0I6OlR5
cGVDb2RlVmFsdWVCYXNlQ29uc3QgX3RjX1ZhbHVlQmFzZTsKCiAgICAgICAgICBleHRlcm4gT0I6
OlR5cGVDb2RlU3lzRXhDb25zdCBfdGNfVU5LTk9XTjsKICAgICAgICAgIGV4dGVybiBPQjo6VHlw
ZUNvZGVTeXNFeENvbnN0IF90Y19CQURfUEFSQU07CiAgICAgICAgICBleHRlcm4gT0I6OlR5cGVD
b2RlU3lzRXhDb25zdCBfdGNfTk9fTUVNT1JZOwogICAgICAgICAgZXh0ZXJuIE9COjpUeXBlQ29k
ZVN5c0V4Q29uc3QgX3RjX0lNUF9MSU1JVDsKICAgICAgICAgIGV4dGVybiBPQjo6VHlwZUNvZGVT
eXNFeENvbnN0IF90Y19DT01NX0ZBSUxVUkU7CiAgICAgICAgICBleHRlcm4gT0I6OlR5cGVDb2Rl
U3lzRXhDb25zdCBfdGNfSU5WX09CSlJFRjsKICAgICAgICAgIGV4dGVybiBPQjo6VHlwZUNvZGVT
eXNFeENvbnN0IF90Y19OT19QRVJNSVNTSU9OOwogICAgICAgICAgZXh0ZXJuIE9COjpUeXBlQ29k
ZVN5c0V4Q29uc3QgX3RjX0lOVEVSTkFMOwogICAgICAgICAgZXh0ZXJuIE9COjpUeXBlQ29kZVN5
c0V4Q29uc3QgX3RjX01BUlNIQUw7CiAgICAgICAgICBleHRlcm4gT0I6OlR5cGVDb2RlU3lzRXhD
b25zdCBfdGNfSU5JVElBTElaRTsKICAgICAgICAgIGV4dGVybiBPQjo6VHlwZUNvZGVTeXNFeENv
bnN0IF90Y19OT19JTVBMRU1FTlQ7CiAgICAgICAgICBleHRlcm4gT0I6OlR5cGVDb2RlU3lzRXhD
b25zdCBfdGNfQkFEX1RZUEVDT0RFOwogICAgICAgICAgZXh0ZXJuIE9COjpUeXBlQ29kZVN5c0V4
Q29uc3QgX3RjX0JBRF9PUEVSQVRJT047CiAgICAgICAgICBleHRlcm4gT0I6OlR5cGVDb2RlU3lz
RXhDb25zdCBfdGNfTk9fUkVTT1VSQ0VTOwogICAgICAgICAgZXh0ZXJuIE9COjpUeXBlQ29kZVN5
c0V4Q29uc3QgX3RjX05PX1JFU1BPTlNFOwogICAgICAgICAgZXh0ZXJuIE9COjpUeXBlQ29kZVN5
c0V4Q29uc3QgX3RjX1BFUlNJU1RfU1RPUkU7CiAgICAgICAgICBleHRlcm4gT0I6OlR5cGVDb2Rl
U3lzRXhDb25zdCBfdGNfQkFEX0lOVl9PUkRFUjsKICAgICAgICAgIGV4dGVybiBPQjo6VHlwZUNv
ZGVTeXNFeENvbnN0IF90Y19UUkFOU0lFTlQ7CiAgICAgICAgICBleHRlcm4gT0I6OlR5cGVDb2Rl
U3lzRXhDb25zdCBfdGNfRlJFRV9NRU07CiAgICAgICAgICBleHRlcm4gT0I6OlR5cGVDb2RlU3lz
RXhDb25zdCBfdGNfSU5WX0lERU5UOwogICAgICAgICAgZXh0ZXJuIE9COjpUeXBlQ29kZVN5c0V4
Q29uc3QgX3RjX0lOVl9GTEFHOwogICAgICAgICAgZXh0ZXJuIE9COjpUeXBlQ29kZVN5c0V4Q29u
c3QgX3RjX0lOVEZfUkVQT1M7CiAgICAgICAgICBleHRlcm4gT0I6OlR5cGVDb2RlU3lzRXhDb25z
dCBfdGNfQkFEX0NPTlRFWFQ7CiAgICAgICAgICBleHRlcm4gT0I6OlR5cGVDb2RlU3lzRXhDb25z
dCBfdGNfT0JKX0FEQVBURVI7CiAgICAgICAgICBleHRlcm4gT0I6OlR5cGVDb2RlU3lzRXhDb25z
dCBfdGNfREFUQV9DT05WRVJTSU9OOwogICAgICAgICAgZXh0ZXJuIE9COjpUeXBlQ29kZVN5c0V4
Q29uc3QgX3RjX09CSkVDVF9OT1RfRVhJU1Q7CiAgICAgICAgICBleHRlcm4gT0I6OlR5cGVDb2Rl
U3lzRXhDb25zdCBfdGNfVFJBTlNBQ1RJT05fUkVRVUlSRUQ7CiAgICAgICAgICBleHRlcm4gT0I6
OlR5cGVDb2RlU3lzRXhDb25zdCBfdGNfVFJBTlNBQ1RJT05fUk9MTEVEQkFDSzsKICAgICAgICAg
IGV4dGVybiBPQjo6VHlwZUNvZGVTeXNFeENvbnN0IF90Y19JTlZBTElEX1RSQU5TQUNUSU9OOwog
ICAgICAgICAgZXh0ZXJuIE9COjpUeXBlQ29kZVN5c0V4Q29uc3QgX3RjX0lOVl9QT0xJQ1k7CiAg
ICAgICAgICBleHRlcm4gT0I6OlR5cGVDb2RlU3lzRXhDb25zdCBfdGNfQ09ERVNFVF9JTkNPTVBB
VElCTEU7CiAgICAgICAgICBleHRlcm4gT0I6OlR5cGVDb2RlU3lzRXhDb25zdCBfdGNfUkVCSU5E
OwogICAgICAgICAgZXh0ZXJuIE9COjpUeXBlQ29kZVN5c0V4Q29uc3QgX3RjX1RJTUVPVVQ7CiAg
ICAgICAgICBleHRlcm4gT0I6OlR5cGVDb2RlU3lzRXhDb25zdCBfdGNfVFJBTlNBQ1RJT05fVU5B
VkFJTEFCTEU7CiAgICAgICAgICBleHRlcm4gT0I6OlR5cGVDb2RlU3lzRXhDb25zdCBfdGNfVFJB
TlNBQ1RJT05fTU9ERTsKICAgICAgICAgIGV4dGVybiBPQjo6VHlwZUNvZGVTeXNFeENvbnN0IF90
Y19CQURfUU9TOwoKfQojIDE2ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvQ09SQkFDbGllbnQu
aCIgMgojIDEgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9Db250ZXh0LmgiIDEKIyAxNCAiL2hv
bWUvbWF0dC9vYi9pbmNsdWRlL09CL0NvbnRleHQuaCIKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1
ZGUvT0IvQ29udGV4dF9md2QuaCIgMQojIDE0ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvQ29u
dGV4dF9md2QuaCIKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGUuaCIgMQoj
IDE1ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvQ29udGV4dF9md2QuaCIgMgoKbmFtZXNwYWNl
IENPUkJBCnsKCmNsYXNzIENvbnRleHQ7CnR5cGVkZWYgQ29udGV4dCogQ29udGV4dF9wdHI7CnR5
cGVkZWYgQ29udGV4dF9wdHIgQ29udGV4dFJlZjsKCn0KCnZvaWQgT0JEdXBsaWNhdGUoQ09SQkE6
OkNvbnRleHRfcHRyKTsKdm9pZCBPQlJlbGVhc2UoQ09SQkE6OkNvbnRleHRfcHRyKTsKCm5hbWVz
cGFjZSBDT1JCQQp7Cgp0eXBlZGVmIE9COjpPYmpWYXI8IENvbnRleHQgPiBDb250ZXh0X3ZhcjsK
dHlwZWRlZiBPQjo6T2JqT3V0PCBDb250ZXh0ID4gQ29udGV4dF9vdXQ7Cgp9CiMgMTUgIi9ob21l
L21hdHQvb2IvaW5jbHVkZS9PQi9Db250ZXh0LmgiIDIKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1
ZGUvT0IvTmFtZWRWYWx1ZV9md2QuaCIgMQojIDE0ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0Iv
TmFtZWRWYWx1ZV9md2QuaCIKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGUu
aCIgMQojIDE1ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvTmFtZWRWYWx1ZV9md2QuaCIgMgoK
bmFtZXNwYWNlIENPUkJBCnsKCmNsYXNzIE5hbWVkVmFsdWU7CnR5cGVkZWYgTmFtZWRWYWx1ZSog
TmFtZWRWYWx1ZV9wdHI7CnR5cGVkZWYgTmFtZWRWYWx1ZV9wdHIgTmFtZWRWYWx1ZVJlZjsKCmNs
YXNzIE5WTGlzdDsKdHlwZWRlZiBOVkxpc3QqIE5WTGlzdF9wdHI7CnR5cGVkZWYgTlZMaXN0X3B0
ciBOVkxpc3RSZWY7Cgp9Cgp2b2lkIE9CRHVwbGljYXRlKENPUkJBOjpOYW1lZFZhbHVlX3B0cik7
CnZvaWQgT0JSZWxlYXNlKENPUkJBOjpOYW1lZFZhbHVlX3B0cik7Cgp2b2lkIE9CRHVwbGljYXRl
KENPUkJBOjpOVkxpc3RfcHRyKTsKdm9pZCBPQlJlbGVhc2UoQ09SQkE6Ok5WTGlzdF9wdHIpOwoK
bmFtZXNwYWNlIENPUkJBCnsKCnR5cGVkZWYgT0I6Ok9ialZhcjwgTmFtZWRWYWx1ZSA+IE5hbWVk
VmFsdWVfdmFyOwp0eXBlZGVmIE9COjpPYmpPdXQ8IE5hbWVkVmFsdWUgPiBOYW1lZFZhbHVlX291
dDsKCnR5cGVkZWYgT0I6Ok9ialZhcjwgTlZMaXN0ID4gTlZMaXN0X3ZhcjsKdHlwZWRlZiBPQjo6
T2JqT3V0PCBOVkxpc3QgPiBOVkxpc3Rfb3V0OwoKfQojIDE2ICIvaG9tZS9tYXR0L29iL2luY2x1
ZGUvT0IvQ29udGV4dC5oIiAyCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0FueURlY2xh
cmF0aW9uLmgiIDEKIyAxNyAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0NvbnRleHQuaCIgMgoj
IDEgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9IYXNodGFibGUuaCIgMQojIDE0ICIvaG9tZS9t
YXR0L29iL2luY2x1ZGUvT0IvSGFzaHRhYmxlLmgiCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRl
L09CL0Jhc2ljLmgiIDEKIyAxNSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0hhc2h0YWJsZS5o
IiAyCgpuYW1lc3BhY2UgT0IKewoKCgoKdGVtcGxhdGU8Y2xhc3MgSywgY2xhc3MgVCwgY2xhc3Mg
SD4Kc3RydWN0IEhhc2h0YWJsZU5vZGUKewogICAgSyBrZXk7CiAgICBUIHZhbHVlOwogICAgQ09S
QkE6OlVMb25nIGZ1bGxIYXNoOwogICAgSGFzaHRhYmxlTm9kZTxLLCBULCBIPiogbmV4dDsKCiAg
ICBIYXNodGFibGVOb2RlKCkKICAgIHsKICAgIH0KCiAgICBIYXNodGFibGVOb2RlKGNvbnN0IEsm
IGssIGNvbnN0IFQmIHZhbCwgSGFzaHRhYmxlTm9kZTxLLCBULCBIPiogbiA9IDApCiAgICAgICAg
OiBrZXkoayksIHZhbHVlKHZhbCksIG5leHQobikKICAgIHsKICAgICAgICBmdWxsSGFzaCA9IEg6
Omhhc2goayk7CiAgICB9Cn07CgoKCgp0ZW1wbGF0ZTxjbGFzcyBLPgpjbGFzcyBIYXNoRW51bWVy
YXRvcgp7CiAgIEsqIGtleXNfOwogICBDT1JCQTo6VUxvbmcgbGVuZ3RoXzsKICAgQ09SQkE6OlVM
b25nICpyZWZfOwoKICAgdm9pZCBkZWMoKQogICB7CiAgICAgICBpZihyZWZfICE9IDApCiAgICAg
ICB7CiAgICAgICAgICAgKCpyZWZfKS0tOwogICAgICAgICAgIGlmKCpyZWZfID09IDApCiAgICAg
ICAgICAgewogICAgICAgICAgICAgICBkZWxldGUgW11rZXlzXzsKICAgICAgICAgICAgICAgZGVs
ZXRlIHJlZl87CiAgICAgICAgICAgfQogICAgICAgfQogICB9CgpwdWJsaWM6CgogICBIYXNoRW51
bWVyYXRvcigpIDoga2V5c18oMCksIGxlbmd0aF8oMCksIHJlZl8oMCkKICAgewogICB9CgogICBI
YXNoRW51bWVyYXRvcihLKiBrZXlzLCBDT1JCQTo6VUxvbmcgbGVuKQogICAgICAgOiBrZXlzXyhr
ZXlzKSwgbGVuZ3RoXyhsZW4pCiAgIHsKICAgICAgIHJlZl8gPSBuZXcgQ09SQkE6OlVMb25nKDAp
OwogICAgICAgKnJlZl8gPSAxOwogICB9CgogICBIYXNoRW51bWVyYXRvcihjb25zdCBIYXNoRW51
bWVyYXRvcjxLPiYgZSkKICAgewogICAgICAga2V5c18gPSBlLmtleXNfOwogICAgICAgbGVuZ3Ro
XyA9IGUubGVuZ3RoXzsKICAgICAgIHJlZl8gPSBlLnJlZl87CiAgICAgICAoKnJlZl8pKys7CiAg
IH0KCiAgIH5IYXNoRW51bWVyYXRvcigpCiAgIHsKICAgICAgIGRlYygpOwogICB9CgogICBIYXNo
RW51bWVyYXRvcjxLPiYgb3BlcmF0b3I9KGNvbnN0IEhhc2hFbnVtZXJhdG9yPEs+JiBlKQogICB7
CiAgICAgICBpZihrZXlzXyAhPSBlLmtleXNfKQogICAgICAgewogICAgICAgICAgIGRlYygpOwog
ICAgICAgICAgIGtleXNfID0gZS5rZXlzXzsKICAgICAgICAgICBsZW5ndGhfID0gZS5sZW5ndGhf
OwogICAgICAgICAgIHJlZl8gPSBlLnJlZl87CiAgICAgICAgICAgKCpyZWZfKSsrOwogICAgICAg
fQogICAgICAgcmV0dXJuICp0aGlzOwogICB9CgogICBDT1JCQTo6VUxvbmcgbGVuZ3RoKCkgY29u
c3QKICAgewogICAgICAgcmV0dXJuIGxlbmd0aF87CiAgIH0KCiAgIEsgb3BlcmF0b3JbXShDT1JC
QTo6VUxvbmcgaSkKICAgewogICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoaSA8IGxlbmd0aF8p
ID8gMCA6IChfX2Fzc2VydF9mYWlsICgiaSA8IGxlbmd0aF8iLCAiL2hvbWUvbWF0dC9vYi9pbmNs
dWRlL09CL0hhc2h0YWJsZS5oIiwgMTEwLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAg
ICAgIHJldHVybiBrZXlzX1tpXTsKICAgfQp9OwoKCgoKdGVtcGxhdGU8Y2xhc3MgSywgY2xhc3Mg
VCwgY2xhc3MgSCwgY2xhc3MgTEM+CmNsYXNzIEhhc2h0YWJsZQp7CgoKCiAgICBIYXNodGFibGUo
Y29uc3QgSGFzaHRhYmxlJik7CiAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBIYXNodGFibGUmKTsK
CgoKCiAgICB0eXBlZGVmIEhhc2h0YWJsZU5vZGU8SywgVCwgSD4gbm9kZTsKICAgIG5vZGUqKiB0
YWJsZV87CiAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoXzsKICAgIENPUkJBOjpGbG9hdCBsb2FkXzsK
ICAgIENPUkJBOjpVTG9uZyBjb3VudF87CiAgICBDT1JCQTo6VUxvbmcgdGhyZXNob2xkXzsKCiAg
ICB2b2lkIHJlbW92ZUFsbCgpOwogICAgdm9pZCByZXNpemUoKTsKCnB1YmxpYzoKCiAgICB0eXBl
ZGVmIEhhc2hFbnVtZXJhdG9yPEs+IEVudW1lcmF0b3I7CgoKCgogICAgSGFzaHRhYmxlKENPUkJB
OjpVTG9uZyBsZW4gPSAxNSwgQ09SQkE6OkZsb2F0IGxvYWQgPSAwLjc1KTsKCgoKCiAgICB+SGFz
aHRhYmxlKCk7CgoKCgogICAgdm9pZCBjbGVhcigpOwoKCgoKICAgIGJvb2wgY29udGFpbnNLZXko
Y29uc3QgSyYga2V5KSBjb25zdDsKCgoKCiAgICB2b2lkIHB1dChjb25zdCBLJiBrZXksIGNvbnN0
IFQmIHZhbHVlKTsKCgoKCiAgICB2b2lkIHJlbW92ZShjb25zdCBLJiBrZXkpOwoKCgoKICAgIGJv
b2wgZ2V0KGNvbnN0IEsmIGtleSwgVCYgdmFsdWUpIGNvbnN0OwoKCgoKICAgIEVudW1lcmF0b3Ig
a2V5cygpIGNvbnN0OwoKCgoKICAgIENPUkJBOjpVTG9uZyBzaXplKCkgY29uc3Q7CgoKCgogICAg
dm9pZCBkaXNwbGF5U3RhdHMoc3RkOjpvc3RyZWFtJik7Cn07CgoKCgpzdHJ1Y3QgTG9uZ0hhc2hl
cgp7CiAgICBzdGF0aWMgQ09SQkE6OlVMb25nIGhhc2goQ09SQkE6OkxvbmcgaykgeyByZXR1cm4g
KENPUkJBOjpVTG9uZylrOyB9CiAgICBzdGF0aWMgYm9vbCBjb21wKENPUkJBOjpMb25nIGsxLCBD
T1JCQTo6TG9uZyBrMikgeyByZXR1cm4gazEgPT0gazI7IH0KfTsKCnN0cnVjdCBVTG9uZ0hhc2hl
cgp7CiAgICBzdGF0aWMgQ09SQkE6OlVMb25nIGhhc2goQ09SQkE6OlVMb25nIGspIHsgcmV0dXJu
IGs7IH0KICAgIHN0YXRpYyBib29sIGNvbXAoQ09SQkE6OlVMb25nIGsxLCBDT1JCQTo6VUxvbmcg
azIpIHsgcmV0dXJuIGsxID09IGsyOyB9Cn07CgpzdHJ1Y3QgU3RyaW5nSGFzaGVyCnsKICAgIHN0
YXRpYyBDT1JCQTo6VUxvbmcgaGFzaChjb25zdCBjaGFyKik7CiAgICBzdGF0aWMgYm9vbCBjb21w
KGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBUPiBjbGFzcyBT
dHJTZXE7CgpzdHJ1Y3QgU3RyaW5nU2VxSGFzaGVyCnsKICAgIHN0YXRpYyBDT1JCQTo6VUxvbmcg
aGFzaChjb25zdCBTdHJTZXE8IGludCA+Jik7CiAgICBzdGF0aWMgYm9vbCBjb21wKGNvbnN0IFN0
clNlcTwgaW50ID4mLCBjb25zdCBTdHJTZXE8IGludCA+Jik7Cn07CiMgMjU4ICIvaG9tZS9tYXR0
L29iL2luY2x1ZGUvT0IvSGFzaHRhYmxlLmgiCmNsYXNzIExvY2tTdHJhdGVneU51bGwKewpwdWJs
aWM6CgogICAgTG9ja1N0cmF0ZWd5TnVsbChjb25zdCB2b2lkKikgeyB9CiAgICB+TG9ja1N0cmF0
ZWd5TnVsbCgpIHsgfQp9OwoKfQoKCgoKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvSGFz
aHRhYmxlSS5oIiAxCiMgMTQgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9IYXNodGFibGVJLmgi
CiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0hhc2h0YWJsZS5oIiAxCiMgMTUgIi9ob21l
L21hdHQvb2IvaW5jbHVkZS9PQi9IYXNodGFibGVJLmgiIDIKCm5hbWVzcGFjZSBPQgp7CgoKCgoK
dGVtcGxhdGU8Y2xhc3MgSywgY2xhc3MgVCwgY2xhc3MgSCwgY2xhc3MgTFM+Ckhhc2h0YWJsZTxL
LCBULCBILCBMUz46Okhhc2h0YWJsZShDT1JCQTo6VUxvbmcgbGVuLCBDT1JCQTo6RmxvYXQgbG9h
ZCkKICAgIDogbGVuZ3RoXyhsZW4pLCBsb2FkXyhsb2FkKSwgY291bnRfKDApCnsKICAgIHRocmVz
aG9sZF8gPSAoQ09SQkE6OlVMb25nKShsZW5ndGhfICogbG9hZF8pOwogICAgdGFibGVfID0gbmV3
IG5vZGUqW2xlbmd0aF9dOwogICAgZm9yKENPUkJBOjpVTG9uZyBpID0gMCA7IGkgPCBsZW5ndGhf
IDsgaSsrKQogICAgICAgIHRhYmxlX1tpXSA9IDA7Cn0KCnRlbXBsYXRlPGNsYXNzIEssIGNsYXNz
IFQsIGNsYXNzIEgsIGNsYXNzIExTPgpIYXNodGFibGU8SywgVCwgSCwgTFM+Ojp+SGFzaHRhYmxl
KCkKewogICAgcmVtb3ZlQWxsKCk7CiAgICBkZWxldGUgW110YWJsZV87Cn0KCgoKCgp0ZW1wbGF0
ZTxjbGFzcyBLLCBjbGFzcyBULCBjbGFzcyBILCBjbGFzcyBMUz4Kdm9pZApIYXNodGFibGU8Sywg
VCwgSCwgTFM+OjpjbGVhcigpCnsKICAgIExTIHN5bmModGhpcyk7CgogICAgcmVtb3ZlQWxsKCk7
CgogICAgZm9yKENPUkJBOjpVTG9uZyBpID0gMCA7IGkgPCBsZW5ndGhfIDsgaSsrKQogICAgICAg
IHRhYmxlX1tpXSA9IDA7Cn0KCnRlbXBsYXRlPGNsYXNzIEssIGNsYXNzIFQsIGNsYXNzIEgsIGNs
YXNzIExTPgpib29sCkhhc2h0YWJsZTxLLCBULCBILCBMUz46OmNvbnRhaW5zS2V5KGNvbnN0IEsm
IGtleSkgY29uc3QKewogICAgTFMgc3luYyh0aGlzKTsKCiAgICBDT1JCQTo6VUxvbmcgZnVsbEhh
c2ggPSBIOjpoYXNoKGtleSk7CiAgICBDT1JCQTo6VUxvbmcgaCA9IGZ1bGxIYXNoICUgbGVuZ3Ro
XzsKCiAgICBub2RlKiBuID0gdGFibGVfW2hdOwogICAgd2hpbGUobiAhPSAwKQogICAgewogICAg
ICAgIGlmKG4gLT4gZnVsbEhhc2ggPT0gZnVsbEhhc2ggJiYgSDo6Y29tcChuIC0+IGtleSwga2V5
KSkKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgbiA9IG4gLT4gbmV4dDsKICAgIH0K
CiAgICByZXR1cm4gZmFsc2U7Cn0KCnRlbXBsYXRlPGNsYXNzIEssIGNsYXNzIFQsIGNsYXNzIEgs
IGNsYXNzIExTPgp2b2lkCkhhc2h0YWJsZTxLLCBULCBILCBMUz46OnB1dChjb25zdCBLJiBrZXks
IGNvbnN0IFQmIHZhbHVlKQp7CiAgICBMUyBzeW5jKHRoaXMpOwoKICAgIENPUkJBOjpVTG9uZyBm
dWxsSGFzaCA9IEg6Omhhc2goa2V5KTsKICAgIENPUkJBOjpVTG9uZyBoID0gZnVsbEhhc2ggJSBs
ZW5ndGhfOwoKICAgIG5vZGUqIG4gPSB0YWJsZV9baF07CiAgICB3aGlsZShuICE9IDApCiAgICB7
CiAgICAgICAgaWYobiAtPiBmdWxsSGFzaCA9PSBmdWxsSGFzaCAmJiBIOjpjb21wKG4gLT4ga2V5
LCBrZXkpKQogICAgICAgIHsKICAgICAgICAgICAgbiAtPiB2YWx1ZSA9IHZhbHVlOwogICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBuID0gbiAtPiBuZXh0OwogICAgfQoKCgoK
ICAgIG4gPSBuZXcgbm9kZShrZXksIHZhbHVlLCB0YWJsZV9baF0pOwogICAgdGFibGVfW2hdID0g
bjsKCiAgICBjb3VudF8rKzsKICAgIGlmKGNvdW50XyA+IHRocmVzaG9sZF8pCiAgICAgICAgcmVz
aXplKCk7Cn0KCnRlbXBsYXRlPGNsYXNzIEssIGNsYXNzIFQsIGNsYXNzIEgsIGNsYXNzIExTPgp2
b2lkCkhhc2h0YWJsZTxLLCBULCBILCBMUz46OnJlbW92ZShjb25zdCBLJiBrZXkpCnsKICAgIExT
IHN5bmModGhpcyk7CgogICAgQ09SQkE6OlVMb25nIGZ1bGxIYXNoID0gSDo6aGFzaChrZXkpOwog
ICAgQ09SQkE6OlVMb25nIGggPSBmdWxsSGFzaCAlIGxlbmd0aF87CgogICAgbm9kZSogcHJldiA9
IDA7CiAgICBub2RlKiBuID0gdGFibGVfW2hdOwoKICAgIHdoaWxlKG4gIT0gMCkKICAgIHsKICAg
ICAgICBpZihuIC0+IGZ1bGxIYXNoID09IGZ1bGxIYXNoICYmIEg6OmNvbXAobiAtPiBrZXksIGtl
eSkpCiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBwcmV2ID0gbjsKICAgICAgICBuID0gbiAt
PiBuZXh0OwogICAgfQoKICAgIGlmKG4gIT0gMCkKICAgIHsKICAgICAgICBpZihwcmV2ICE9IDAp
CiAgICAgICAgICAgIHByZXYgLT4gbmV4dCA9IG4gLT4gbmV4dDsKICAgICAgICBlbHNlCiAgICAg
ICAgICAgIHRhYmxlX1toXSA9IG4gLT4gbmV4dDsKCiAgICAgICAgY291bnRfLS07CiAgICAgICAg
ZGVsZXRlIG47CiAgICB9Cn0KCnRlbXBsYXRlPGNsYXNzIEssIGNsYXNzIFQsIGNsYXNzIEgsIGNs
YXNzIExTPgpib29sCkhhc2h0YWJsZTxLLCBULCBILCBMUz46OmdldChjb25zdCBLJiBrZXksIFQm
IHZhbHVlKSBjb25zdAp7CiAgICBMUyBzeW5jKHRoaXMpOwoKICAgIENPUkJBOjpVTG9uZyBmdWxs
SGFzaCA9IEg6Omhhc2goa2V5KTsKICAgIENPUkJBOjpVTG9uZyBoID0gZnVsbEhhc2ggJSBsZW5n
dGhfOwoKICAgIG5vZGUqIG4gPSB0YWJsZV9baF07CiAgICB3aGlsZShuICE9IDApCiAgICB7CiAg
ICAgICAgaWYobiAtPiBmdWxsSGFzaCA9PSBmdWxsSGFzaCAmJiBIOjpjb21wKG4gLT4ga2V5LCBr
ZXkpKQogICAgICAgIHsKICAgICAgICAgICAgdmFsdWUgPSBuIC0+IHZhbHVlOwogICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIG4gPSBuIC0+IG5leHQ7CiAgICB9Cgog
ICAgcmV0dXJuIGZhbHNlOwp9CgoKCgoKCnRlbXBsYXRlPGNsYXNzIEssIGNsYXNzIFQsIGNsYXNz
IEgsIGNsYXNzIExTPgp0eXBlbmFtZSBIYXNodGFibGU8SywgVCwgSCwgTFM+OjpFbnVtZXJhdG9y
Ckhhc2h0YWJsZTxLLCBULCBILCBMUz46OmtleXMoKSBjb25zdAoKewogICAgTFMgc3luYyh0aGlz
KTsKCiAgICBDT1JCQTo6VUxvbmcgaW5kZXggPSAwOwogICAgSyoga2V5cyA9IG5ldyBLW2NvdW50
X107CgogICAgZm9yKENPUkJBOjpVTG9uZyBpID0gMCA7IGkgPCBsZW5ndGhfIDsgaSsrKQogICAg
ewogICAgICAgIGZvcihub2RlKiBuID0gdGFibGVfW2ldIDsgbiAhPSAwIDsgbiA9IG4gLT4gbmV4
dCkKICAgICAgICAgICAga2V5c1tpbmRleCsrXSA9IG4gLT4ga2V5OwogICAgfQoKICAgIEVudW1l
cmF0b3IgZShrZXlzLCBjb3VudF8pOwoKICAgIHJldHVybiBlOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBL
LCBjbGFzcyBULCBjbGFzcyBILCBjbGFzcyBMUz4KQ09SQkE6OlVMb25nCkhhc2h0YWJsZTxLLCBU
LCBILCBMUz46OnNpemUoKSBjb25zdAp7CiAgICBMUyBzeW5jKHRoaXMpOwogICAgcmV0dXJuIGNv
dW50XzsKfQoKdGVtcGxhdGU8Y2xhc3MgSywgY2xhc3MgVCwgY2xhc3MgSCwgY2xhc3MgTFM+CnZv
aWQKSGFzaHRhYmxlPEssIFQsIEgsIExTPjo6ZGlzcGxheVN0YXRzKHN0ZDo6b3N0cmVhbSYgb3Mp
CnsKICAgIExTIHN5bmModGhpcyk7CgogICAgQ09SQkE6OlVMb25nIG1vc3QgPSAwOwogICAgQ09S
QkE6OlVMb25nIG9jY3VwaWVkID0gMDsKICAgIGZvcihDT1JCQTo6VUxvbmcgaSA9IDAgOyBpIDwg
bGVuZ3RoXyA7IGkrKykKICAgIHsKICAgICAgICBDT1JCQTo6VUxvbmcgYnVja2V0TGVuID0gMDsK
ICAgICAgICBmb3Iobm9kZSogbiA9IHRhYmxlX1tpXSA7IG4gIT0gMCA7IG4gPSBuIC0+IG5leHQs
IGJ1Y2tldExlbisrKQogICAgICAgICAgICA7CiAgICAgICAgaWYoYnVja2V0TGVuID4gbW9zdCkK
ICAgICAgICAgICAgbW9zdCA9IGJ1Y2tldExlbjsKICAgICAgICBpZihidWNrZXRMZW4gPiAwKQog
ICAgICAgICAgICBvY2N1cGllZCsrOwogICAgfQogICAgb3MgPDwgIkhhc2ggdGFibGU6ICIgPDwg
bGVuZ3RoXyA8PCAiIGJ1Y2tldHMuXG4iOwogICAgb3MgPDwgIktleXMgICAgICA6ICIgPDwgY291
bnRfIDw8ICJcbiI7CiAgICBvcyA8PCAiQXZlcmFnZSAgIDogIiA8PCAoZG91YmxlKWNvdW50Xy8o
ZG91YmxlKW9jY3VwaWVkIDw8ICJcbiI7CiAgICBvcyA8PCAiTGFyZ2VzdCAgIDogIiA8PCBtb3N0
IDw8ICJcbiI7CiAgICBvcyA8PCBzdGQ6OmZsdXNoOwp9CgoKCgoKdGVtcGxhdGU8Y2xhc3MgSywg
Y2xhc3MgVCwgY2xhc3MgSCwgY2xhc3MgTFM+CnZvaWQKSGFzaHRhYmxlPEssIFQsIEgsIExTPjo6
cmVtb3ZlQWxsKCkKewogICAgQ09SQkE6OlVMb25nIGxlbiA9IGxlbmd0aF87CiAgICBDT1JCQTo6
VUxvbmcgbnVtID0gY291bnRfOwogICAgQ09SQkE6OlVMb25nIGksIGo7CgogICAgaWYodGFibGVf
ICE9IDApCiAgICB7CgoKCgogICAgICAgIG5vZGUqKiB0ZW1wID0gbmV3IG5vZGUqW251bV07CiAg
ICAgICAgaiA9IDA7CiAgICAgICAgZm9yKGkgPSAwIDsgaSA8IGxlbiA7IGkrKykKICAgICAgICB7
CiAgICAgICAgICAgIGZvcihub2RlKiBuID0gdGFibGVfW2ldIDsgbiAhPSAwIDsgbiA9IG4gLT4g
bmV4dCkKICAgICAgICAgICAgICAgIHRlbXBbaisrXSA9IG47CiAgICAgICAgfQoKCgoKICAgICAg
ICBmb3IoaSA9IDAgOyBpIDwgbGVuIDsgaSsrKQogICAgICAgICAgICB0YWJsZV9baV0gPSAwOwoK
ICAgICAgICBjb3VudF8gPSAwOwoKCgoKICAgICAgICBmb3IoaSA9IDAgOyBpIDwgbnVtIDsgaSsr
KQogICAgICAgICAgICBkZWxldGUgdGVtcFtpXTsKCiAgICAgICAgZGVsZXRlIFtddGVtcDsKICAg
IH0KfQoKdGVtcGxhdGU8Y2xhc3MgSywgY2xhc3MgVCwgY2xhc3MgSCwgY2xhc3MgTFM+CnZvaWQK
SGFzaHRhYmxlPEssIFQsIEgsIExTPjo6cmVzaXplKCkKewogICAgQ09SQkE6OlVMb25nIGk7CiAg
ICBDT1JCQTo6VUxvbmcgc2l6ZSA9IGxlbmd0aF8gKiAyICsgMTsKCgoKCiAgICBub2RlKiogdGFi
bGUgPSBuZXcgbm9kZSpbc2l6ZV07CiAgICBmb3IoaSA9IDAgOyBpIDwgc2l6ZSA7IGkrKykKICAg
ICAgICB0YWJsZVtpXSA9IDA7CgoKCgogICAgZm9yKGkgPSAwIDsgaSA8IGxlbmd0aF8gOyBpKysp
CiAgICB7CiAgICAgICAgbm9kZSogbiA9IHRhYmxlX1tpXTsKICAgICAgICB3aGlsZShuICE9IDAp
CiAgICAgICAgewogICAgICAgICAgICBub2RlKiBuZXh0ID0gbiAtPiBuZXh0OwogICAgICAgICAg
ICBDT1JCQTo6VUxvbmcgaCA9IG4gLT4gZnVsbEhhc2ggJSBzaXplOwogICAgICAgICAgICBuIC0+
IG5leHQgPSB0YWJsZVtoXTsKICAgICAgICAgICAgdGFibGVbaF0gPSBuOwogICAgICAgICAgICBu
ID0gbmV4dDsKICAgICAgICB9CiAgICB9CgoKCgogICAgbGVuZ3RoXyA9IHNpemU7CiAgICB0aHJl
c2hvbGRfID0gKENPUkJBOjpVTG9uZykobGVuZ3RoXyAqIGxvYWRfKTsKICAgIGRlbGV0ZSBbXXRh
YmxlXzsKICAgIHRhYmxlXyA9IHRhYmxlOwp9Cgp9CiMgMjcyICIvaG9tZS9tYXR0L29iL2luY2x1
ZGUvT0IvSGFzaHRhYmxlLmgiIDIKIyAxOCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0NvbnRl
eHQuaCIgMgoKbmFtZXNwYWNlIE9CQ09SQkEKewoKY2xhc3MgT1JCX2ltcGw7Cgp9CgpuYW1lc3Bh
Y2UgQ09SQkEKewoKCgoKY2xhc3MgQ29udGV4dCA6IHB1YmxpYyBPQjo6UmVmQ291bnQKewogICAg
U3RyaW5nX3ZhciBuYW1lXzsKICAgIENvbnRleHRfdmFyIHBhcmVudF87CgogICAgdHlwZWRlZiBP
Qjo6SGFzaHRhYmxlPFN0cmluZ192YXIsIFN0cmluZ192YXIsIE9COjpTdHJpbmdIYXNoZXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgT0I6OkxvY2tTdHJhdGVneU51bGw+IFZhbHVlSGFzaDsK
ICAgIFZhbHVlSGFzaCB2YWx1ZXNfOwoKCgoKCgoKICAgIENvbnRleHQoY29uc3QgQ29udGV4dCYp
OwogICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgQ29udGV4dCYpOwoKcHJvdGVjdGVkOgoKICAgIENv
bnRleHQoY29uc3QgY2hhciopOwogICAgQ29udGV4dChjb25zdCBjaGFyKiwgQ29udGV4dF9wdHIp
OwogICAgZnJpZW5kIGNsYXNzIDo6T0JDT1JCQTo6T1JCX2ltcGw7CgpwdWJsaWM6CgoKCgogICAg
c3RhdGljIGlubGluZSBDb250ZXh0X3B0ciBfZHVwbGljYXRlKENvbnRleHRfcHRyIHApCiAgICB7
IGlmKHApIHAgLT4gX09CX2luY1JlZigpOyByZXR1cm4gcDsgfQogICAgc3RhdGljIGlubGluZSBD
b250ZXh0X3B0ciBfbmlsKCkKICAgIHsgcmV0dXJuIDA7IH0KCiAgICBjb25zdCBjaGFyKiBjb250
ZXh0X25hbWUoKSBjb25zdCB7IHJldHVybiBuYW1lXzsgfQogICAgQ29udGV4dF9wdHIgcGFyZW50
KCkgY29uc3QgeyByZXR1cm4gcGFyZW50XzsgfQoKICAgIHZvaWQgY3JlYXRlX2NoaWxkKGNvbnN0
IGNoYXIqLCBDb250ZXh0X291dCk7CgogICAgdm9pZCBzZXRfb25lX3ZhbHVlKGNvbnN0IGNoYXIq
LCBjb25zdCBBbnkmKTsKICAgIHZvaWQgc2V0X3ZhbHVlcyhOVkxpc3RfcHRyKTsKICAgIHZvaWQg
ZGVsZXRlX3ZhbHVlcyhjb25zdCBjaGFyKik7CiAgICB2b2lkIGdldF92YWx1ZXMoY29uc3QgY2hh
ciosIEZsYWdzLCBjb25zdCBjaGFyKiwgTlZMaXN0X291dCk7CgoKCgoKICAgIHZvaWQgX09CX2dl
dFZhbHVlcyhjb25zdCBjaGFyKiwgRmxhZ3MsIGNvbnN0IGNoYXIqLCBPQjo6U3RyU2VxPCBpbnQg
PiYpOwogICAgc3RhdGljIENvbnRleHQqIF9PQl9jcmVhdGUoY29uc3QgT0I6OlN0clNlcTwgaW50
ID4mKTsKfTsKCmlubGluZSB2b2lkCnJlbGVhc2UoQ29udGV4dF9wdHIgcCkKewogICAgaWYocCkK
ICAgICAgICBwIC0+IF9PQl9kZWNSZWYoKTsKfQoKaW5saW5lIEJvb2xlYW4KaXNfbmlsKENvbnRl
eHRfcHRyIHApCnsKICAgIHJldHVybiBwID09IDA7Cn0KCn0KIyAxNyAiL2hvbWUvbWF0dC9vYi9p
bmNsdWRlL09CL0NPUkJBQ2xpZW50LmgiIDIKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0Iv
UHJpbmNpcGFsLmgiIDEKIyAxNCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1ByaW5jaXBhbC5o
IgojIDEgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9QcmluY2lwYWxfZndkLmgiIDEKIyAxNSAi
L2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1ByaW5jaXBhbC5oIiAyCgpuYW1lc3BhY2UgQ09SQkEK
ewoKCgoKY2xhc3MgUHJpbmNpcGFsIDogcHVibGljIE9COjpSZWZDb3VudAp7CgoKCiAgICBQcmlu
Y2lwYWwoY29uc3QgUHJpbmNpcGFsJik7CiAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBQcmluY2lw
YWwmKTsKCnByb3RlY3RlZDoKCiAgICBQcmluY2lwYWwoKSB7IH07CgpwdWJsaWM6CgoKCgogICAg
c3RhdGljIGlubGluZSBQcmluY2lwYWxfcHRyIF9kdXBsaWNhdGUoUHJpbmNpcGFsX3B0ciBwKQog
ICAgeyBpZihwKSBwIC0+IF9PQl9pbmNSZWYoKTsgcmV0dXJuIHA7IH0KICAgIHN0YXRpYyBpbmxp
bmUgUHJpbmNpcGFsX3B0ciBfbmlsKCkKICAgIHsgcmV0dXJuIDA7IH0KfTsKCmlubGluZSB2b2lk
CnJlbGVhc2UoUHJpbmNpcGFsX3B0ciBwKQp7CiAgICBpZihwKQogICAgICAgIHAgLT4gX09CX2Rl
Y1JlZigpOwp9CgppbmxpbmUgQm9vbGVhbgppc19uaWwoUHJpbmNpcGFsX3B0ciBwKQp7CiAgICBy
ZXR1cm4gcCA9PSAwOwp9Cgp9CiMgMTggIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9DT1JCQUNs
aWVudC5oIiAyCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL01hcnNoYWxTdHViSW1wbC5o
IiAxCiMgMTQgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9NYXJzaGFsU3R1YkltcGwuaCIKIyAx
ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvTWFyc2hhbFN0dWJJbXBsX2Z3ZC5oIiAxCiMgMTQg
Ii9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9NYXJzaGFsU3R1YkltcGxfZndkLmgiCiMgMSAiL2hv
bWUvbWF0dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlLmgiIDEKIyAxNSAiL2hvbWUvbWF0dC9vYi9p
bmNsdWRlL09CL01hcnNoYWxTdHViSW1wbF9md2QuaCIgMgoKbmFtZXNwYWNlIE9CCnsKCmNsYXNz
IE1hcnNoYWxTdHViSW1wbDsKdHlwZWRlZiBNYXJzaGFsU3R1YkltcGwqIE1hcnNoYWxTdHViSW1w
bF9wdHI7Cgp9Cgp2b2lkIE9CRHVwbGljYXRlKE9COjpNYXJzaGFsU3R1YkltcGxfcHRyKTsKdm9p
ZCBPQlJlbGVhc2UoT0I6Ok1hcnNoYWxTdHViSW1wbF9wdHIpOwoKbmFtZXNwYWNlIE9CCnsKCnR5
cGVkZWYgT2JqVmFyPCBNYXJzaGFsU3R1YkltcGwgPiBNYXJzaGFsU3R1YkltcGxfdmFyOwoKfQoj
IDE1ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvTWFyc2hhbFN0dWJJbXBsLmgiIDIKIyAxICIv
aG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvQ2xpZW50X2Z3ZC5oIiAxCiMgMTQgIi9ob21lL21hdHQv
b2IvaW5jbHVkZS9PQi9DbGllbnRfZndkLmgiCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09C
L1RlbXBsYXRlLmgiIDEKIyAxNSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0NsaWVudF9md2Qu
aCIgMgoKbmFtZXNwYWNlIE9CCnsKCmNsYXNzIENsaWVudDsKdHlwZWRlZiBDbGllbnQqIENsaWVu
dF9wdHI7CgpzdHJ1Y3QgQ2xpZW50UHJvZmlsZVBhaXI7CnR5cGVkZWYgVmFyVmFyPCBDbGllbnRQ
cm9maWxlUGFpciA+IENsaWVudFByb2ZpbGVQYWlyX3ZhcjsKCmNsYXNzIENsaWVudE1hbmFnZXI7
CnR5cGVkZWYgQ2xpZW50TWFuYWdlciogQ2xpZW50TWFuYWdlcl9wdHI7Cgp9Cgp2b2lkIE9CRHVw
bGljYXRlKE9COjpDbGllbnRfcHRyKTsKdm9pZCBPQlJlbGVhc2UoT0I6OkNsaWVudF9wdHIpOwoK
dm9pZCBPQkR1cGxpY2F0ZShPQjo6Q2xpZW50TWFuYWdlcl9wdHIpOwp2b2lkIE9CUmVsZWFzZShP
Qjo6Q2xpZW50TWFuYWdlcl9wdHIpOwoKbmFtZXNwYWNlIE9CCnsKCnR5cGVkZWYgT2JqVmFyPCBD
bGllbnQgPiBDbGllbnRfdmFyOwoKdHlwZWRlZiBPYmpWYXI8IENsaWVudE1hbmFnZXIgPiBDbGll
bnRNYW5hZ2VyX3ZhcjsKCn0KIyAxNiAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL01hcnNoYWxT
dHViSW1wbC5oIiAyCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0Rvd25jYWxsX2Z3ZC5o
IiAxCiMgMTQgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9Eb3duY2FsbF9md2QuaCIKIyAxICIv
aG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGUuaCIgMQojIDE1ICIvaG9tZS9tYXR0L29i
L2luY2x1ZGUvT0IvRG93bmNhbGxfZndkLmgiIDIKCm5hbWVzcGFjZSBPQgp7CgpjbGFzcyBEb3du
Y2FsbDsKdHlwZWRlZiBEb3duY2FsbCogRG93bmNhbGxfcHRyOwoKY2xhc3MgUElEb3duY2FsbDsK
dHlwZWRlZiBQSURvd25jYWxsKiBQSURvd25jYWxsX3B0cjsKCmNsYXNzIFBJQXJnc0Rvd25jYWxs
Owp0eXBlZGVmIFBJQXJnc0Rvd25jYWxsKiBQSUFyZ3NEb3duY2FsbF9wdHI7CgpjbGFzcyBQSURJ
SURvd25jYWxsOwp0eXBlZGVmIFBJRElJRG93bmNhbGwqIFBJRElJRG93bmNhbGxfcHRyOwoKY2xh
c3MgRG93bmNhbGxFbWl0dGVyOwp0eXBlZGVmIERvd25jYWxsRW1pdHRlciogRG93bmNhbGxFbWl0
dGVyX3B0cjsKCn0KCnZvaWQgT0JEdXBsaWNhdGUoT0I6OkRvd25jYWxsX3B0cik7CnZvaWQgT0JS
ZWxlYXNlKE9COjpEb3duY2FsbF9wdHIpOwojIDUwICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0Iv
RG93bmNhbGxfZndkLmgiCnZvaWQgT0JEdXBsaWNhdGUoT0I6OkRvd25jYWxsRW1pdHRlcl9wdHIp
Owp2b2lkIE9CUmVsZWFzZShPQjo6RG93bmNhbGxFbWl0dGVyX3B0cik7CgpuYW1lc3BhY2UgT0IK
ewoKdHlwZWRlZiBPYmpWYXI8IERvd25jYWxsID4gRG93bmNhbGxfdmFyOwojIDY2ICIvaG9tZS9t
YXR0L29iL2luY2x1ZGUvT0IvRG93bmNhbGxfZndkLmgiCnR5cGVkZWYgT2JqVmFyPCBEb3duY2Fs
bEVtaXR0ZXIgPiBEb3duY2FsbEVtaXR0ZXJfdmFyOwoKfQojIDE3ICIvaG9tZS9tYXR0L29iL2lu
Y2x1ZGUvT0IvTWFyc2hhbFN0dWJJbXBsLmgiIDIKCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRl
L09CL09iamVjdC5oIiAxCiMgMTQgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9PYmplY3QuaCIK
IyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVHlwZUNvZGVDb25zdC5oIiAxCiMgMTUgIi9o
b21lL21hdHQvb2IvaW5jbHVkZS9PQi9PYmplY3QuaCIgMgojIDEgIi9ob21lL21hdHQvb2IvaW5j
bHVkZS9PQi9PYmplY3RfZndkLmgiIDEKIyAxNiAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL09i
amVjdC5oIiAyCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1N0dWJJbXBsX2Z3ZC5oIiAx
CiMgMTQgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9TdHViSW1wbF9md2QuaCIKIyAxICIvaG9t
ZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVtcGxhdGUuaCIgMQojIDE1ICIvaG9tZS9tYXR0L29iL2lu
Y2x1ZGUvT0IvU3R1YkltcGxfZndkLmgiIDIKCm5hbWVzcGFjZSBPQgp7CgpjbGFzcyBTdHViSW1w
bEJhc2U7CnR5cGVkZWYgU3R1YkltcGxCYXNlKiBTdHViSW1wbEJhc2VfcHRyOwoKfQoKdm9pZCBP
QkR1cGxpY2F0ZShPQjo6U3R1YkltcGxCYXNlX3B0cik7CnZvaWQgT0JSZWxlYXNlKE9COjpTdHVi
SW1wbEJhc2VfcHRyKTsKCm5hbWVzcGFjZSBPQgp7Cgp0eXBlZGVmIE9ialZhcjwgU3R1YkltcGxC
YXNlID4gU3R1YkltcGxCYXNlX3ZhcjsKCn0KIyAxNyAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09C
L09iamVjdC5oIiAyCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL01hcnNoYWxTdHViSW1w
bF9md2QuaCIgMQojIDE4ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvT2JqZWN0LmgiIDIKIyAx
ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvSUZSMl9md2QuaCIgMQojIDE4ICIvaG9tZS9tYXR0
L29iL2luY2x1ZGUvT0IvSUZSMl9md2QuaCIKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0Iv
VGVtcGxhdGUuaCIgMQojIDE5ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvSUZSMl9md2QuaCIg
MgojIDMwICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvSUZSMl9md2QuaCIKbmFtZXNwYWNlIENP
UkJBCnsKCmNsYXNzIFJlcG9zaXRvcnk7CnR5cGVkZWYgUmVwb3NpdG9yeSogUmVwb3NpdG9yeV9w
dHI7CnR5cGVkZWYgUmVwb3NpdG9yeSogUmVwb3NpdG9yeVJlZjsKCiAgICAgICAgICBleHRlcm4g
T0I6OlR5cGVDb2RlQ29uc3QgX3RjX1JlcG9zaXRvcnk7CgpjbGFzcyBDb250YWluZWQ7CnR5cGVk
ZWYgQ29udGFpbmVkKiBDb250YWluZWRfcHRyOwp0eXBlZGVmIENvbnRhaW5lZCogQ29udGFpbmVk
UmVmOwoKICAgICAgICAgIGV4dGVybiBPQjo6VHlwZUNvZGVDb25zdCBfdGNfQ29udGFpbmVkOwoK
Y2xhc3MgTW9kdWxlRGVmOwp0eXBlZGVmIE1vZHVsZURlZiogTW9kdWxlRGVmX3B0cjsKdHlwZWRl
ZiBNb2R1bGVEZWYqIE1vZHVsZURlZlJlZjsKCiAgICAgICAgICBleHRlcm4gT0I6OlR5cGVDb2Rl
Q29uc3QgX3RjX01vZHVsZURlZjsKCmNsYXNzIENvbnN0YW50RGVmOwp0eXBlZGVmIENvbnN0YW50
RGVmKiBDb25zdGFudERlZl9wdHI7CnR5cGVkZWYgQ29uc3RhbnREZWYqIENvbnN0YW50RGVmUmVm
OwoKICAgICAgICAgIGV4dGVybiBPQjo6VHlwZUNvZGVDb25zdCBfdGNfQ29uc3RhbnREZWY7Cgpj
bGFzcyBTdHJ1Y3REZWY7CnR5cGVkZWYgU3RydWN0RGVmKiBTdHJ1Y3REZWZfcHRyOwp0eXBlZGVm
IFN0cnVjdERlZiogU3RydWN0RGVmUmVmOwoKICAgICAgICAgIGV4dGVybiBPQjo6VHlwZUNvZGVD
b25zdCBfdGNfU3RydWN0RGVmOwoKY2xhc3MgVW5pb25EZWY7CnR5cGVkZWYgVW5pb25EZWYqIFVu
aW9uRGVmX3B0cjsKdHlwZWRlZiBVbmlvbkRlZiogVW5pb25EZWZSZWY7CgogICAgICAgICAgZXh0
ZXJuIE9COjpUeXBlQ29kZUNvbnN0IF90Y19VbmlvbkRlZjsKCmNsYXNzIEVudW1EZWY7CnR5cGVk
ZWYgRW51bURlZiogRW51bURlZl9wdHI7CnR5cGVkZWYgRW51bURlZiogRW51bURlZlJlZjsKCiAg
ICAgICAgICBleHRlcm4gT0I6OlR5cGVDb2RlQ29uc3QgX3RjX0VudW1EZWY7CgpjbGFzcyBBbGlh
c0RlZjsKdHlwZWRlZiBBbGlhc0RlZiogQWxpYXNEZWZfcHRyOwp0eXBlZGVmIEFsaWFzRGVmKiBB
bGlhc0RlZlJlZjsKCiAgICAgICAgICBleHRlcm4gT0I6OlR5cGVDb2RlQ29uc3QgX3RjX0FsaWFz
RGVmOwoKY2xhc3MgQWJzdHJhY3RJbnRlcmZhY2VEZWY7CnR5cGVkZWYgQWJzdHJhY3RJbnRlcmZh
Y2VEZWYqIEFic3RyYWN0SW50ZXJmYWNlRGVmX3B0cjsKdHlwZWRlZiBBYnN0cmFjdEludGVyZmFj
ZURlZiogQWJzdHJhY3RJbnRlcmZhY2VEZWZSZWY7CgogICAgICAgICAgZXh0ZXJuIE9COjpUeXBl
Q29kZUNvbnN0IF90Y19BYnN0cmFjdEludGVyZmFjZURlZjsKCmNsYXNzIE5hdGl2ZURlZjsKdHlw
ZWRlZiBOYXRpdmVEZWYqIE5hdGl2ZURlZl9wdHI7CnR5cGVkZWYgTmF0aXZlRGVmKiBOYXRpdmVE
ZWZSZWY7CgogICAgICAgICAgZXh0ZXJuIE9COjpUeXBlQ29kZUNvbnN0IF90Y19OYXRpdmVEZWY7
CgpjbGFzcyBWYWx1ZURlZjsKdHlwZWRlZiBWYWx1ZURlZiogVmFsdWVEZWZfcHRyOwp0eXBlZGVm
IFZhbHVlRGVmKiBWYWx1ZURlZlJlZjsKCiAgICAgICAgICBleHRlcm4gT0I6OlR5cGVDb2RlQ29u
c3QgX3RjX1ZhbHVlRGVmOwoKY2xhc3MgVmFsdWVCb3hEZWY7CnR5cGVkZWYgVmFsdWVCb3hEZWYq
IFZhbHVlQm94RGVmX3B0cjsKdHlwZWRlZiBWYWx1ZUJveERlZiogVmFsdWVCb3hEZWZSZWY7Cgog
ICAgICAgICAgZXh0ZXJuIE9COjpUeXBlQ29kZUNvbnN0IF90Y19WYWx1ZUJveERlZjsKCmNsYXNz
IENvbnRhaW5lcjsKdHlwZWRlZiBDb250YWluZXIqIENvbnRhaW5lcl9wdHI7CnR5cGVkZWYgQ29u
dGFpbmVyKiBDb250YWluZXJSZWY7CgogICAgICAgICAgZXh0ZXJuIE9COjpUeXBlQ29kZUNvbnN0
IF90Y19Db250YWluZXI7CgpjbGFzcyBBdHRyaWJ1dGVEZWY7CnR5cGVkZWYgQXR0cmlidXRlRGVm
KiBBdHRyaWJ1dGVEZWZfcHRyOwp0eXBlZGVmIEF0dHJpYnV0ZURlZiogQXR0cmlidXRlRGVmUmVm
OwoKICAgICAgICAgIGV4dGVybiBPQjo6VHlwZUNvZGVDb25zdCBfdGNfQXR0cmlidXRlRGVmOwoK
Y2xhc3MgRXhjZXB0aW9uRGVmOwp0eXBlZGVmIEV4Y2VwdGlvbkRlZiogRXhjZXB0aW9uRGVmX3B0
cjsKdHlwZWRlZiBFeGNlcHRpb25EZWYqIEV4Y2VwdGlvbkRlZlJlZjsKCiAgICAgICAgICBleHRl
cm4gT0I6OlR5cGVDb2RlQ29uc3QgX3RjX0V4Y2VwdGlvbkRlZjsKCmNsYXNzIE9wZXJhdGlvbkRl
ZjsKdHlwZWRlZiBPcGVyYXRpb25EZWYqIE9wZXJhdGlvbkRlZl9wdHI7CnR5cGVkZWYgT3BlcmF0
aW9uRGVmKiBPcGVyYXRpb25EZWZSZWY7CgogICAgICAgICAgZXh0ZXJuIE9COjpUeXBlQ29kZUNv
bnN0IF90Y19PcGVyYXRpb25EZWY7CgpjbGFzcyBJbnRlcmZhY2VEZWY7CnR5cGVkZWYgSW50ZXJm
YWNlRGVmKiBJbnRlcmZhY2VEZWZfcHRyOwp0eXBlZGVmIEludGVyZmFjZURlZiogSW50ZXJmYWNl
RGVmUmVmOwoKICAgICAgICAgIGV4dGVybiBPQjo6VHlwZUNvZGVDb25zdCBfdGNfSW50ZXJmYWNl
RGVmOwoKfQoKdm9pZCBPQkR1cGxpY2F0ZShDT1JCQTo6UmVwb3NpdG9yeV9wdHIpOwp2b2lkIE9C
UmVsZWFzZShDT1JCQTo6UmVwb3NpdG9yeV9wdHIpOwoKdm9pZCBPQk1hcnNoYWwoQ09SQkE6OlJl
cG9zaXRvcnlfcHRyLCBPQjo6T3V0cHV0U3RyZWFtSW1wbCopOwp2b2lkIE9CVW5tYXJzaGFsKENP
UkJBOjpSZXBvc2l0b3J5X3B0ciYsIE9COjpJbnB1dFN0cmVhbUltcGwqKTsKCnZvaWQgT0JEdXBs
aWNhdGUoQ09SQkE6OkNvbnRhaW5lZF9wdHIpOwp2b2lkIE9CUmVsZWFzZShDT1JCQTo6Q29udGFp
bmVkX3B0cik7Cgp2b2lkIE9CTWFyc2hhbChDT1JCQTo6Q29udGFpbmVkX3B0ciwgT0I6Ok91dHB1
dFN0cmVhbUltcGwqKTsKdm9pZCBPQlVubWFyc2hhbChDT1JCQTo6Q29udGFpbmVkX3B0ciYsIE9C
OjpJbnB1dFN0cmVhbUltcGwqKTsKCnZvaWQgT0JEdXBsaWNhdGUoQ09SQkE6Ok1vZHVsZURlZl9w
dHIpOwp2b2lkIE9CUmVsZWFzZShDT1JCQTo6TW9kdWxlRGVmX3B0cik7Cgp2b2lkIE9CTWFyc2hh
bChDT1JCQTo6TW9kdWxlRGVmX3B0ciwgT0I6Ok91dHB1dFN0cmVhbUltcGwqKTsKdm9pZCBPQlVu
bWFyc2hhbChDT1JCQTo6TW9kdWxlRGVmX3B0ciYsIE9COjpJbnB1dFN0cmVhbUltcGwqKTsKCnZv
aWQgT0JEdXBsaWNhdGUoQ09SQkE6OkNvbnN0YW50RGVmX3B0cik7CnZvaWQgT0JSZWxlYXNlKENP
UkJBOjpDb25zdGFudERlZl9wdHIpOwoKdm9pZCBPQk1hcnNoYWwoQ09SQkE6OkNvbnN0YW50RGVm
X3B0ciwgT0I6Ok91dHB1dFN0cmVhbUltcGwqKTsKdm9pZCBPQlVubWFyc2hhbChDT1JCQTo6Q29u
c3RhbnREZWZfcHRyJiwgT0I6OklucHV0U3RyZWFtSW1wbCopOwoKdm9pZCBPQkR1cGxpY2F0ZShD
T1JCQTo6U3RydWN0RGVmX3B0cik7CnZvaWQgT0JSZWxlYXNlKENPUkJBOjpTdHJ1Y3REZWZfcHRy
KTsKCnZvaWQgT0JNYXJzaGFsKENPUkJBOjpTdHJ1Y3REZWZfcHRyLCBPQjo6T3V0cHV0U3RyZWFt
SW1wbCopOwp2b2lkIE9CVW5tYXJzaGFsKENPUkJBOjpTdHJ1Y3REZWZfcHRyJiwgT0I6OklucHV0
U3RyZWFtSW1wbCopOwoKdm9pZCBPQkR1cGxpY2F0ZShDT1JCQTo6VW5pb25EZWZfcHRyKTsKdm9p
ZCBPQlJlbGVhc2UoQ09SQkE6OlVuaW9uRGVmX3B0cik7Cgp2b2lkIE9CTWFyc2hhbChDT1JCQTo6
VW5pb25EZWZfcHRyLCBPQjo6T3V0cHV0U3RyZWFtSW1wbCopOwp2b2lkIE9CVW5tYXJzaGFsKENP
UkJBOjpVbmlvbkRlZl9wdHImLCBPQjo6SW5wdXRTdHJlYW1JbXBsKik7Cgp2b2lkIE9CRHVwbGlj
YXRlKENPUkJBOjpFbnVtRGVmX3B0cik7CnZvaWQgT0JSZWxlYXNlKENPUkJBOjpFbnVtRGVmX3B0
cik7Cgp2b2lkIE9CTWFyc2hhbChDT1JCQTo6RW51bURlZl9wdHIsIE9COjpPdXRwdXRTdHJlYW1J
bXBsKik7CnZvaWQgT0JVbm1hcnNoYWwoQ09SQkE6OkVudW1EZWZfcHRyJiwgT0I6OklucHV0U3Ry
ZWFtSW1wbCopOwoKdm9pZCBPQkR1cGxpY2F0ZShDT1JCQTo6QWxpYXNEZWZfcHRyKTsKdm9pZCBP
QlJlbGVhc2UoQ09SQkE6OkFsaWFzRGVmX3B0cik7Cgp2b2lkIE9CTWFyc2hhbChDT1JCQTo6QWxp
YXNEZWZfcHRyLCBPQjo6T3V0cHV0U3RyZWFtSW1wbCopOwp2b2lkIE9CVW5tYXJzaGFsKENPUkJB
OjpBbGlhc0RlZl9wdHImLCBPQjo6SW5wdXRTdHJlYW1JbXBsKik7Cgp2b2lkIE9CRHVwbGljYXRl
KENPUkJBOjpBYnN0cmFjdEludGVyZmFjZURlZl9wdHIpOwp2b2lkIE9CUmVsZWFzZShDT1JCQTo6
QWJzdHJhY3RJbnRlcmZhY2VEZWZfcHRyKTsKCnZvaWQgT0JNYXJzaGFsKENPUkJBOjpBYnN0cmFj
dEludGVyZmFjZURlZl9wdHIsIE9COjpPdXRwdXRTdHJlYW1JbXBsKik7CnZvaWQgT0JVbm1hcnNo
YWwoQ09SQkE6OkFic3RyYWN0SW50ZXJmYWNlRGVmX3B0ciYsIE9COjpJbnB1dFN0cmVhbUltcGwq
KTsKCnZvaWQgT0JEdXBsaWNhdGUoQ09SQkE6Ok5hdGl2ZURlZl9wdHIpOwp2b2lkIE9CUmVsZWFz
ZShDT1JCQTo6TmF0aXZlRGVmX3B0cik7Cgp2b2lkIE9CTWFyc2hhbChDT1JCQTo6TmF0aXZlRGVm
X3B0ciwgT0I6Ok91dHB1dFN0cmVhbUltcGwqKTsKdm9pZCBPQlVubWFyc2hhbChDT1JCQTo6TmF0
aXZlRGVmX3B0ciYsIE9COjpJbnB1dFN0cmVhbUltcGwqKTsKCnZvaWQgT0JEdXBsaWNhdGUoQ09S
QkE6OlZhbHVlRGVmX3B0cik7CnZvaWQgT0JSZWxlYXNlKENPUkJBOjpWYWx1ZURlZl9wdHIpOwoK
dm9pZCBPQk1hcnNoYWwoQ09SQkE6OlZhbHVlRGVmX3B0ciwgT0I6Ok91dHB1dFN0cmVhbUltcGwq
KTsKdm9pZCBPQlVubWFyc2hhbChDT1JCQTo6VmFsdWVEZWZfcHRyJiwgT0I6OklucHV0U3RyZWFt
SW1wbCopOwoKdm9pZCBPQkR1cGxpY2F0ZShDT1JCQTo6VmFsdWVCb3hEZWZfcHRyKTsKdm9pZCBP
QlJlbGVhc2UoQ09SQkE6OlZhbHVlQm94RGVmX3B0cik7Cgp2b2lkIE9CTWFyc2hhbChDT1JCQTo6
VmFsdWVCb3hEZWZfcHRyLCBPQjo6T3V0cHV0U3RyZWFtSW1wbCopOwp2b2lkIE9CVW5tYXJzaGFs
KENPUkJBOjpWYWx1ZUJveERlZl9wdHImLCBPQjo6SW5wdXRTdHJlYW1JbXBsKik7Cgp2b2lkIE9C
RHVwbGljYXRlKENPUkJBOjpDb250YWluZXJfcHRyKTsKdm9pZCBPQlJlbGVhc2UoQ09SQkE6OkNv
bnRhaW5lcl9wdHIpOwoKdm9pZCBPQk1hcnNoYWwoQ09SQkE6OkNvbnRhaW5lcl9wdHIsIE9COjpP
dXRwdXRTdHJlYW1JbXBsKik7CnZvaWQgT0JVbm1hcnNoYWwoQ09SQkE6OkNvbnRhaW5lcl9wdHIm
LCBPQjo6SW5wdXRTdHJlYW1JbXBsKik7Cgp2b2lkIE9CRHVwbGljYXRlKENPUkJBOjpBdHRyaWJ1
dGVEZWZfcHRyKTsKdm9pZCBPQlJlbGVhc2UoQ09SQkE6OkF0dHJpYnV0ZURlZl9wdHIpOwoKdm9p
ZCBPQk1hcnNoYWwoQ09SQkE6OkF0dHJpYnV0ZURlZl9wdHIsIE9COjpPdXRwdXRTdHJlYW1JbXBs
Kik7CnZvaWQgT0JVbm1hcnNoYWwoQ09SQkE6OkF0dHJpYnV0ZURlZl9wdHImLCBPQjo6SW5wdXRT
dHJlYW1JbXBsKik7Cgp2b2lkIE9CRHVwbGljYXRlKENPUkJBOjpFeGNlcHRpb25EZWZfcHRyKTsK
dm9pZCBPQlJlbGVhc2UoQ09SQkE6OkV4Y2VwdGlvbkRlZl9wdHIpOwoKdm9pZCBPQk1hcnNoYWwo
Q09SQkE6OkV4Y2VwdGlvbkRlZl9wdHIsIE9COjpPdXRwdXRTdHJlYW1JbXBsKik7CnZvaWQgT0JV
bm1hcnNoYWwoQ09SQkE6OkV4Y2VwdGlvbkRlZl9wdHImLCBPQjo6SW5wdXRTdHJlYW1JbXBsKik7
Cgp2b2lkIE9CRHVwbGljYXRlKENPUkJBOjpPcGVyYXRpb25EZWZfcHRyKTsKdm9pZCBPQlJlbGVh
c2UoQ09SQkE6Ok9wZXJhdGlvbkRlZl9wdHIpOwoKdm9pZCBPQk1hcnNoYWwoQ09SQkE6Ok9wZXJh
dGlvbkRlZl9wdHIsIE9COjpPdXRwdXRTdHJlYW1JbXBsKik7CnZvaWQgT0JVbm1hcnNoYWwoQ09S
QkE6Ok9wZXJhdGlvbkRlZl9wdHImLCBPQjo6SW5wdXRTdHJlYW1JbXBsKik7Cgp2b2lkIE9CRHVw
bGljYXRlKENPUkJBOjpJbnRlcmZhY2VEZWZfcHRyKTsKdm9pZCBPQlJlbGVhc2UoQ09SQkE6Oklu
dGVyZmFjZURlZl9wdHIpOwoKdm9pZCBPQk1hcnNoYWwoQ09SQkE6OkludGVyZmFjZURlZl9wdHIs
IE9COjpPdXRwdXRTdHJlYW1JbXBsKik7CnZvaWQgT0JVbm1hcnNoYWwoQ09SQkE6OkludGVyZmFj
ZURlZl9wdHImLCBPQjo6SW5wdXRTdHJlYW1JbXBsKik7CgpuYW1lc3BhY2UgQ09SQkEKewoKdHlw
ZWRlZiBPQjo6T2JqVmFyPCBSZXBvc2l0b3J5ID4gUmVwb3NpdG9yeV92YXI7CnR5cGVkZWYgT0I6
Ok9iak91dDwgUmVwb3NpdG9yeSA+IFJlcG9zaXRvcnlfb3V0OwoKdHlwZWRlZiBPQjo6T2JqVmFy
PCBDb250YWluZWQgPiBDb250YWluZWRfdmFyOwp0eXBlZGVmIE9COjpPYmpPdXQ8IENvbnRhaW5l
ZCA+IENvbnRhaW5lZF9vdXQ7Cgp0eXBlZGVmIE9COjpPYmpWYXI8IE1vZHVsZURlZiA+IE1vZHVs
ZURlZl92YXI7CnR5cGVkZWYgT0I6Ok9iak91dDwgTW9kdWxlRGVmID4gTW9kdWxlRGVmX291dDsK
CnR5cGVkZWYgT0I6Ok9ialZhcjwgQ29uc3RhbnREZWYgPiBDb25zdGFudERlZl92YXI7CnR5cGVk
ZWYgT0I6Ok9iak91dDwgQ29uc3RhbnREZWYgPiBDb25zdGFudERlZl9vdXQ7Cgp0eXBlZGVmIE9C
OjpPYmpWYXI8IFN0cnVjdERlZiA+IFN0cnVjdERlZl92YXI7CnR5cGVkZWYgT0I6Ok9iak91dDwg
U3RydWN0RGVmID4gU3RydWN0RGVmX291dDsKCnR5cGVkZWYgT0I6Ok9ialZhcjwgVW5pb25EZWYg
PiBVbmlvbkRlZl92YXI7CnR5cGVkZWYgT0I6Ok9iak91dDwgVW5pb25EZWYgPiBVbmlvbkRlZl9v
dXQ7Cgp0eXBlZGVmIE9COjpPYmpWYXI8IEVudW1EZWYgPiBFbnVtRGVmX3ZhcjsKdHlwZWRlZiBP
Qjo6T2JqT3V0PCBFbnVtRGVmID4gRW51bURlZl9vdXQ7Cgp0eXBlZGVmIE9COjpPYmpWYXI8IEFs
aWFzRGVmID4gQWxpYXNEZWZfdmFyOwp0eXBlZGVmIE9COjpPYmpPdXQ8IEFsaWFzRGVmID4gQWxp
YXNEZWZfb3V0OwoKdHlwZWRlZiBPQjo6T2JqVmFyPCBBYnN0cmFjdEludGVyZmFjZURlZiA+IEFi
c3RyYWN0SW50ZXJmYWNlRGVmX3ZhcjsKdHlwZWRlZiBPQjo6T2JqT3V0PCBBYnN0cmFjdEludGVy
ZmFjZURlZiA+IEFic3RyYWN0SW50ZXJmYWNlRGVmX291dDsKCnR5cGVkZWYgT0I6Ok9ialZhcjwg
TmF0aXZlRGVmID4gTmF0aXZlRGVmX3ZhcjsKdHlwZWRlZiBPQjo6T2JqT3V0PCBOYXRpdmVEZWYg
PiBOYXRpdmVEZWZfb3V0OwoKdHlwZWRlZiBPQjo6T2JqVmFyPCBWYWx1ZURlZiA+IFZhbHVlRGVm
X3ZhcjsKdHlwZWRlZiBPQjo6T2JqT3V0PCBWYWx1ZURlZiA+IFZhbHVlRGVmX291dDsKCnR5cGVk
ZWYgT0I6Ok9ialZhcjwgVmFsdWVCb3hEZWYgPiBWYWx1ZUJveERlZl92YXI7CnR5cGVkZWYgT0I6
Ok9iak91dDwgVmFsdWVCb3hEZWYgPiBWYWx1ZUJveERlZl9vdXQ7Cgp0eXBlZGVmIE9COjpPYmpW
YXI8IENvbnRhaW5lciA+IENvbnRhaW5lcl92YXI7CnR5cGVkZWYgT0I6Ok9iak91dDwgQ29udGFp
bmVyID4gQ29udGFpbmVyX291dDsKCnR5cGVkZWYgT0I6Ok9ialZhcjwgQXR0cmlidXRlRGVmID4g
QXR0cmlidXRlRGVmX3ZhcjsKdHlwZWRlZiBPQjo6T2JqT3V0PCBBdHRyaWJ1dGVEZWYgPiBBdHRy
aWJ1dGVEZWZfb3V0OwoKdHlwZWRlZiBPQjo6T2JqVmFyPCBFeGNlcHRpb25EZWYgPiBFeGNlcHRp
b25EZWZfdmFyOwp0eXBlZGVmIE9COjpPYmpPdXQ8IEV4Y2VwdGlvbkRlZiA+IEV4Y2VwdGlvbkRl
Zl9vdXQ7Cgp0eXBlZGVmIE9COjpPYmpWYXI8IE9wZXJhdGlvbkRlZiA+IE9wZXJhdGlvbkRlZl92
YXI7CnR5cGVkZWYgT0I6Ok9iak91dDwgT3BlcmF0aW9uRGVmID4gT3BlcmF0aW9uRGVmX291dDsK
CnR5cGVkZWYgT0I6Ok9ialZhcjwgSW50ZXJmYWNlRGVmID4gSW50ZXJmYWNlRGVmX3ZhcjsKdHlw
ZWRlZiBPQjo6T2JqT3V0PCBJbnRlcmZhY2VEZWYgPiBJbnRlcmZhY2VEZWZfb3V0OwoKfQojIDE5
ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvT2JqZWN0LmgiIDIKIyAxICIvaG9tZS9tYXR0L29i
L2luY2x1ZGUvT0IvQ29udGV4dF9md2QuaCIgMQojIDIwICIvaG9tZS9tYXR0L29iL2luY2x1ZGUv
T0IvT2JqZWN0LmgiIDIKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvTmFtZWRWYWx1ZV9m
d2QuaCIgMQojIDIxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvT2JqZWN0LmgiIDIKIyAxICIv
aG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvRElJX2Z3ZC5oIiAxCiMgMTQgIi9ob21lL21hdHQvb2Iv
aW5jbHVkZS9PQi9ESUlfZndkLmgiCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1RlbXBs
YXRlLmgiIDEKIyAxNSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0RJSV9md2QuaCIgMgoKbmFt
ZXNwYWNlIENPUkJBCnsKCmNsYXNzIEV4Y2VwdGlvbkxpc3Q7CnR5cGVkZWYgRXhjZXB0aW9uTGlz
dCogRXhjZXB0aW9uTGlzdF9wdHI7CnR5cGVkZWYgRXhjZXB0aW9uTGlzdF9wdHIgRXhjZXB0aW9u
TGlzdFJlZjsKCmNsYXNzIENvbnRleHRMaXN0Owp0eXBlZGVmIENvbnRleHRMaXN0KiBDb250ZXh0
TGlzdF9wdHI7CnR5cGVkZWYgQ29udGV4dExpc3RfcHRyIENvbnRleHRMaXN0UmVmOwoKY2xhc3Mg
UmVxdWVzdDsKdHlwZWRlZiBSZXF1ZXN0KiBSZXF1ZXN0X3B0cjsKdHlwZWRlZiBSZXF1ZXN0X3B0
ciBSZXF1ZXN0UmVmOwoKfQoKdm9pZCBPQkR1cGxpY2F0ZShDT1JCQTo6RXhjZXB0aW9uTGlzdF9w
dHIpOwp2b2lkIE9CUmVsZWFzZShDT1JCQTo6RXhjZXB0aW9uTGlzdF9wdHIpOwoKdm9pZCBPQkR1
cGxpY2F0ZShDT1JCQTo6Q29udGV4dExpc3RfcHRyKTsKdm9pZCBPQlJlbGVhc2UoQ09SQkE6OkNv
bnRleHRMaXN0X3B0cik7Cgp2b2lkIE9CRHVwbGljYXRlKENPUkJBOjpSZXF1ZXN0X3B0cik7CnZv
aWQgT0JSZWxlYXNlKENPUkJBOjpSZXF1ZXN0X3B0cik7CgpuYW1lc3BhY2UgQ09SQkEKewoKdHlw
ZWRlZiBPQjo6T2JqVmFyPCBFeGNlcHRpb25MaXN0ID4gRXhjZXB0aW9uTGlzdF92YXI7CnR5cGVk
ZWYgT0I6Ok9iak91dDwgRXhjZXB0aW9uTGlzdCA+IEV4Y2VwdGlvbkxpc3Rfb3V0OwoKdHlwZWRl
ZiBPQjo6T2JqVmFyPCBDb250ZXh0TGlzdCA+IENvbnRleHRMaXN0X3ZhcjsKdHlwZWRlZiBPQjo6
T2JqT3V0PCBDb250ZXh0TGlzdCA+IENvbnRleHRMaXN0X291dDsKCnR5cGVkZWYgT0I6Ok9ialZh
cjwgUmVxdWVzdCA+IFJlcXVlc3RfdmFyOwp0eXBlZGVmIE9COjpPYmpPdXQ8IFJlcXVlc3QgPiBS
ZXF1ZXN0X291dDsKCn0KIyAyMiAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL09iamVjdC5oIiAy
CiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1BvbGljeV9md2QuaCIgMQojIDE4ICIvaG9t
ZS9tYXR0L29iL2luY2x1ZGUvT0IvUG9saWN5X2Z3ZC5oIgojIDEgIi9ob21lL21hdHQvb2IvaW5j
bHVkZS9PQi9UZW1wbGF0ZS5oIiAxCiMgMTkgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9Qb2xp
Y3lfZndkLmgiIDIKIyAzMCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1BvbGljeV9md2QuaCIK
bmFtZXNwYWNlIENPUkJBCnsKCmNsYXNzIFBvbGljeTsKdHlwZWRlZiBQb2xpY3kqIFBvbGljeV9w
dHI7CnR5cGVkZWYgUG9saWN5KiBQb2xpY3lSZWY7CgpjbGFzcyBQb2xpY3lNYW5hZ2VyOwp0eXBl
ZGVmIFBvbGljeU1hbmFnZXIqIFBvbGljeU1hbmFnZXJfcHRyOwp0eXBlZGVmIFBvbGljeU1hbmFn
ZXIqIFBvbGljeU1hbmFnZXJSZWY7Cgp9Cgp2b2lkIE9CRHVwbGljYXRlKENPUkJBOjpQb2xpY3lf
cHRyKTsKdm9pZCBPQlJlbGVhc2UoQ09SQkE6OlBvbGljeV9wdHIpOwoKdm9pZCBPQk1hcnNoYWwo
Q09SQkE6OlBvbGljeV9wdHIsIE9COjpPdXRwdXRTdHJlYW1JbXBsKik7CnZvaWQgT0JVbm1hcnNo
YWwoQ09SQkE6OlBvbGljeV9wdHImLCBPQjo6SW5wdXRTdHJlYW1JbXBsKik7Cgp2b2lkIE9CRHVw
bGljYXRlKENPUkJBOjpQb2xpY3lNYW5hZ2VyX3B0cik7CnZvaWQgT0JSZWxlYXNlKENPUkJBOjpQ
b2xpY3lNYW5hZ2VyX3B0cik7Cgp2b2lkIE9CTWFyc2hhbChDT1JCQTo6UG9saWN5TWFuYWdlcl9w
dHIsIE9COjpPdXRwdXRTdHJlYW1JbXBsKik7CnZvaWQgT0JVbm1hcnNoYWwoQ09SQkE6OlBvbGlj
eU1hbmFnZXJfcHRyJiwgT0I6OklucHV0U3RyZWFtSW1wbCopOwoKbmFtZXNwYWNlIENPUkJBCnsK
CnR5cGVkZWYgT0I6Ok9ialZhcjwgUG9saWN5ID4gUG9saWN5X3ZhcjsKdHlwZWRlZiBPQjo6T2Jq
T3V0PCBQb2xpY3kgPiBQb2xpY3lfb3V0OwoKdHlwZWRlZiBPQjo6T2JqVmFyPCBQb2xpY3lNYW5h
Z2VyID4gUG9saWN5TWFuYWdlcl92YXI7CnR5cGVkZWYgT0I6Ok9iak91dDwgUG9saWN5TWFuYWdl
ciA+IFBvbGljeU1hbmFnZXJfb3V0OwoKfQojIDIzICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0Iv
T2JqZWN0LmgiIDIKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvT0NJX2Z3ZC5oIiAxCiMg
MTggIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9PQ0lfZndkLmgiCiMgMSAiL2hvbWUvbWF0dC9v
Yi9pbmNsdWRlL09CL1RlbXBsYXRlLmgiIDEKIyAxOSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09C
L09DSV9md2QuaCIgMgojIDMwICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvT0NJX2Z3ZC5oIgpu
YW1lc3BhY2UgT0NJCnsKCmNsYXNzIFRyYW5zcG9ydDsKdHlwZWRlZiBUcmFuc3BvcnQqIFRyYW5z
cG9ydF9wdHI7CnR5cGVkZWYgVHJhbnNwb3J0KiBUcmFuc3BvcnRSZWY7CgpjbGFzcyBUcmFuc3Bv
cnRJbmZvOwp0eXBlZGVmIFRyYW5zcG9ydEluZm8qIFRyYW5zcG9ydEluZm9fcHRyOwp0eXBlZGVm
IFRyYW5zcG9ydEluZm8qIFRyYW5zcG9ydEluZm9SZWY7CgpjbGFzcyBDbG9zZUNCOwp0eXBlZGVm
IENsb3NlQ0IqIENsb3NlQ0JfcHRyOwp0eXBlZGVmIENsb3NlQ0IqIENsb3NlQ0JSZWY7CgpjbGFz
cyBDb25uZWN0b3I7CnR5cGVkZWYgQ29ubmVjdG9yKiBDb25uZWN0b3JfcHRyOwp0eXBlZGVmIENv
bm5lY3RvciogQ29ubmVjdG9yUmVmOwoKY2xhc3MgQ29ubmVjdG9ySW5mbzsKdHlwZWRlZiBDb25u
ZWN0b3JJbmZvKiBDb25uZWN0b3JJbmZvX3B0cjsKdHlwZWRlZiBDb25uZWN0b3JJbmZvKiBDb25u
ZWN0b3JJbmZvUmVmOwoKY2xhc3MgQ29ubmVjdENCOwp0eXBlZGVmIENvbm5lY3RDQiogQ29ubmVj
dENCX3B0cjsKdHlwZWRlZiBDb25uZWN0Q0IqIENvbm5lY3RDQlJlZjsKCmNsYXNzIEFjY2VwdG9y
Owp0eXBlZGVmIEFjY2VwdG9yKiBBY2NlcHRvcl9wdHI7CnR5cGVkZWYgQWNjZXB0b3IqIEFjY2Vw
dG9yUmVmOwoKY2xhc3MgQWNjZXB0b3JJbmZvOwp0eXBlZGVmIEFjY2VwdG9ySW5mbyogQWNjZXB0
b3JJbmZvX3B0cjsKdHlwZWRlZiBBY2NlcHRvckluZm8qIEFjY2VwdG9ySW5mb1JlZjsKCmNsYXNz
IEFjY2VwdENCOwp0eXBlZGVmIEFjY2VwdENCKiBBY2NlcHRDQl9wdHI7CnR5cGVkZWYgQWNjZXB0
Q0IqIEFjY2VwdENCUmVmOwoKY2xhc3MgQWNjRmFjdG9yeTsKdHlwZWRlZiBBY2NGYWN0b3J5KiBB
Y2NGYWN0b3J5X3B0cjsKdHlwZWRlZiBBY2NGYWN0b3J5KiBBY2NGYWN0b3J5UmVmOwoKY2xhc3Mg
QWNjRmFjdG9yeUluZm87CnR5cGVkZWYgQWNjRmFjdG9yeUluZm8qIEFjY0ZhY3RvcnlJbmZvX3B0
cjsKdHlwZWRlZiBBY2NGYWN0b3J5SW5mbyogQWNjRmFjdG9yeUluZm9SZWY7CgpjbGFzcyBBY2NG
YWN0b3J5UmVnaXN0cnk7CnR5cGVkZWYgQWNjRmFjdG9yeVJlZ2lzdHJ5KiBBY2NGYWN0b3J5UmVn
aXN0cnlfcHRyOwp0eXBlZGVmIEFjY0ZhY3RvcnlSZWdpc3RyeSogQWNjRmFjdG9yeVJlZ2lzdHJ5
UmVmOwoKY2xhc3MgQ29uRmFjdG9yeTsKdHlwZWRlZiBDb25GYWN0b3J5KiBDb25GYWN0b3J5X3B0
cjsKdHlwZWRlZiBDb25GYWN0b3J5KiBDb25GYWN0b3J5UmVmOwoKY2xhc3MgQ29uRmFjdG9yeUlu
Zm87CnR5cGVkZWYgQ29uRmFjdG9yeUluZm8qIENvbkZhY3RvcnlJbmZvX3B0cjsKdHlwZWRlZiBD
b25GYWN0b3J5SW5mbyogQ29uRmFjdG9yeUluZm9SZWY7CgpjbGFzcyBDb25GYWN0b3J5UmVnaXN0
cnk7CnR5cGVkZWYgQ29uRmFjdG9yeVJlZ2lzdHJ5KiBDb25GYWN0b3J5UmVnaXN0cnlfcHRyOwp0
eXBlZGVmIENvbkZhY3RvcnlSZWdpc3RyeSogQ29uRmFjdG9yeVJlZ2lzdHJ5UmVmOwoKY2xhc3Mg
Q3VycmVudDsKdHlwZWRlZiBDdXJyZW50KiBDdXJyZW50X3B0cjsKdHlwZWRlZiBDdXJyZW50KiBD
dXJyZW50UmVmOwoKfQoKdm9pZCBPQkR1cGxpY2F0ZShPQ0k6OlRyYW5zcG9ydF9wdHIpOwp2b2lk
IE9CUmVsZWFzZShPQ0k6OlRyYW5zcG9ydF9wdHIpOwoKdm9pZCBPQk1hcnNoYWwoT0NJOjpUcmFu
c3BvcnRfcHRyLCBPQjo6T3V0cHV0U3RyZWFtSW1wbCopOwp2b2lkIE9CVW5tYXJzaGFsKE9DSTo6
VHJhbnNwb3J0X3B0ciYsIE9COjpJbnB1dFN0cmVhbUltcGwqKTsKCnZvaWQgT0JEdXBsaWNhdGUo
T0NJOjpUcmFuc3BvcnRJbmZvX3B0cik7CnZvaWQgT0JSZWxlYXNlKE9DSTo6VHJhbnNwb3J0SW5m
b19wdHIpOwoKdm9pZCBPQk1hcnNoYWwoT0NJOjpUcmFuc3BvcnRJbmZvX3B0ciwgT0I6Ok91dHB1
dFN0cmVhbUltcGwqKTsKdm9pZCBPQlVubWFyc2hhbChPQ0k6OlRyYW5zcG9ydEluZm9fcHRyJiwg
T0I6OklucHV0U3RyZWFtSW1wbCopOwoKdm9pZCBPQkR1cGxpY2F0ZShPQ0k6OkNsb3NlQ0JfcHRy
KTsKdm9pZCBPQlJlbGVhc2UoT0NJOjpDbG9zZUNCX3B0cik7Cgp2b2lkIE9CTWFyc2hhbChPQ0k6
OkNsb3NlQ0JfcHRyLCBPQjo6T3V0cHV0U3RyZWFtSW1wbCopOwp2b2lkIE9CVW5tYXJzaGFsKE9D
STo6Q2xvc2VDQl9wdHImLCBPQjo6SW5wdXRTdHJlYW1JbXBsKik7Cgp2b2lkIE9CRHVwbGljYXRl
KE9DSTo6Q29ubmVjdG9yX3B0cik7CnZvaWQgT0JSZWxlYXNlKE9DSTo6Q29ubmVjdG9yX3B0cik7
Cgp2b2lkIE9CTWFyc2hhbChPQ0k6OkNvbm5lY3Rvcl9wdHIsIE9COjpPdXRwdXRTdHJlYW1JbXBs
Kik7CnZvaWQgT0JVbm1hcnNoYWwoT0NJOjpDb25uZWN0b3JfcHRyJiwgT0I6OklucHV0U3RyZWFt
SW1wbCopOwoKdm9pZCBPQkR1cGxpY2F0ZShPQ0k6OkNvbm5lY3RvckluZm9fcHRyKTsKdm9pZCBP
QlJlbGVhc2UoT0NJOjpDb25uZWN0b3JJbmZvX3B0cik7Cgp2b2lkIE9CTWFyc2hhbChPQ0k6OkNv
bm5lY3RvckluZm9fcHRyLCBPQjo6T3V0cHV0U3RyZWFtSW1wbCopOwp2b2lkIE9CVW5tYXJzaGFs
KE9DSTo6Q29ubmVjdG9ySW5mb19wdHImLCBPQjo6SW5wdXRTdHJlYW1JbXBsKik7Cgp2b2lkIE9C
RHVwbGljYXRlKE9DSTo6Q29ubmVjdENCX3B0cik7CnZvaWQgT0JSZWxlYXNlKE9DSTo6Q29ubmVj
dENCX3B0cik7Cgp2b2lkIE9CTWFyc2hhbChPQ0k6OkNvbm5lY3RDQl9wdHIsIE9COjpPdXRwdXRT
dHJlYW1JbXBsKik7CnZvaWQgT0JVbm1hcnNoYWwoT0NJOjpDb25uZWN0Q0JfcHRyJiwgT0I6Oklu
cHV0U3RyZWFtSW1wbCopOwoKdm9pZCBPQkR1cGxpY2F0ZShPQ0k6OkFjY2VwdG9yX3B0cik7CnZv
aWQgT0JSZWxlYXNlKE9DSTo6QWNjZXB0b3JfcHRyKTsKCnZvaWQgT0JNYXJzaGFsKE9DSTo6QWNj
ZXB0b3JfcHRyLCBPQjo6T3V0cHV0U3RyZWFtSW1wbCopOwp2b2lkIE9CVW5tYXJzaGFsKE9DSTo6
QWNjZXB0b3JfcHRyJiwgT0I6OklucHV0U3RyZWFtSW1wbCopOwoKdm9pZCBPQkR1cGxpY2F0ZShP
Q0k6OkFjY2VwdG9ySW5mb19wdHIpOwp2b2lkIE9CUmVsZWFzZShPQ0k6OkFjY2VwdG9ySW5mb19w
dHIpOwoKdm9pZCBPQk1hcnNoYWwoT0NJOjpBY2NlcHRvckluZm9fcHRyLCBPQjo6T3V0cHV0U3Ry
ZWFtSW1wbCopOwp2b2lkIE9CVW5tYXJzaGFsKE9DSTo6QWNjZXB0b3JJbmZvX3B0ciYsIE9COjpJ
bnB1dFN0cmVhbUltcGwqKTsKCnZvaWQgT0JEdXBsaWNhdGUoT0NJOjpBY2NlcHRDQl9wdHIpOwp2
b2lkIE9CUmVsZWFzZShPQ0k6OkFjY2VwdENCX3B0cik7Cgp2b2lkIE9CTWFyc2hhbChPQ0k6OkFj
Y2VwdENCX3B0ciwgT0I6Ok91dHB1dFN0cmVhbUltcGwqKTsKdm9pZCBPQlVubWFyc2hhbChPQ0k6
OkFjY2VwdENCX3B0ciYsIE9COjpJbnB1dFN0cmVhbUltcGwqKTsKCnZvaWQgT0JEdXBsaWNhdGUo
T0NJOjpBY2NGYWN0b3J5X3B0cik7CnZvaWQgT0JSZWxlYXNlKE9DSTo6QWNjRmFjdG9yeV9wdHIp
OwoKdm9pZCBPQk1hcnNoYWwoT0NJOjpBY2NGYWN0b3J5X3B0ciwgT0I6Ok91dHB1dFN0cmVhbUlt
cGwqKTsKdm9pZCBPQlVubWFyc2hhbChPQ0k6OkFjY0ZhY3RvcnlfcHRyJiwgT0I6OklucHV0U3Ry
ZWFtSW1wbCopOwoKdm9pZCBPQkR1cGxpY2F0ZShPQ0k6OkFjY0ZhY3RvcnlJbmZvX3B0cik7CnZv
aWQgT0JSZWxlYXNlKE9DSTo6QWNjRmFjdG9yeUluZm9fcHRyKTsKCnZvaWQgT0JNYXJzaGFsKE9D
STo6QWNjRmFjdG9yeUluZm9fcHRyLCBPQjo6T3V0cHV0U3RyZWFtSW1wbCopOwp2b2lkIE9CVW5t
YXJzaGFsKE9DSTo6QWNjRmFjdG9yeUluZm9fcHRyJiwgT0I6OklucHV0U3RyZWFtSW1wbCopOwoK
dm9pZCBPQkR1cGxpY2F0ZShPQ0k6OkFjY0ZhY3RvcnlSZWdpc3RyeV9wdHIpOwp2b2lkIE9CUmVs
ZWFzZShPQ0k6OkFjY0ZhY3RvcnlSZWdpc3RyeV9wdHIpOwoKdm9pZCBPQk1hcnNoYWwoT0NJOjpB
Y2NGYWN0b3J5UmVnaXN0cnlfcHRyLCBPQjo6T3V0cHV0U3RyZWFtSW1wbCopOwp2b2lkIE9CVW5t
YXJzaGFsKE9DSTo6QWNjRmFjdG9yeVJlZ2lzdHJ5X3B0ciYsIE9COjpJbnB1dFN0cmVhbUltcGwq
KTsKCnZvaWQgT0JEdXBsaWNhdGUoT0NJOjpDb25GYWN0b3J5X3B0cik7CnZvaWQgT0JSZWxlYXNl
KE9DSTo6Q29uRmFjdG9yeV9wdHIpOwoKdm9pZCBPQk1hcnNoYWwoT0NJOjpDb25GYWN0b3J5X3B0
ciwgT0I6Ok91dHB1dFN0cmVhbUltcGwqKTsKdm9pZCBPQlVubWFyc2hhbChPQ0k6OkNvbkZhY3Rv
cnlfcHRyJiwgT0I6OklucHV0U3RyZWFtSW1wbCopOwoKdm9pZCBPQkR1cGxpY2F0ZShPQ0k6OkNv
bkZhY3RvcnlJbmZvX3B0cik7CnZvaWQgT0JSZWxlYXNlKE9DSTo6Q29uRmFjdG9yeUluZm9fcHRy
KTsKCnZvaWQgT0JNYXJzaGFsKE9DSTo6Q29uRmFjdG9yeUluZm9fcHRyLCBPQjo6T3V0cHV0U3Ry
ZWFtSW1wbCopOwp2b2lkIE9CVW5tYXJzaGFsKE9DSTo6Q29uRmFjdG9yeUluZm9fcHRyJiwgT0I6
OklucHV0U3RyZWFtSW1wbCopOwoKdm9pZCBPQkR1cGxpY2F0ZShPQ0k6OkNvbkZhY3RvcnlSZWdp
c3RyeV9wdHIpOwp2b2lkIE9CUmVsZWFzZShPQ0k6OkNvbkZhY3RvcnlSZWdpc3RyeV9wdHIpOwoK
dm9pZCBPQk1hcnNoYWwoT0NJOjpDb25GYWN0b3J5UmVnaXN0cnlfcHRyLCBPQjo6T3V0cHV0U3Ry
ZWFtSW1wbCopOwp2b2lkIE9CVW5tYXJzaGFsKE9DSTo6Q29uRmFjdG9yeVJlZ2lzdHJ5X3B0ciYs
IE9COjpJbnB1dFN0cmVhbUltcGwqKTsKCnZvaWQgT0JEdXBsaWNhdGUoT0NJOjpDdXJyZW50X3B0
cik7CnZvaWQgT0JSZWxlYXNlKE9DSTo6Q3VycmVudF9wdHIpOwoKdm9pZCBPQk1hcnNoYWwoT0NJ
OjpDdXJyZW50X3B0ciwgT0I6Ok91dHB1dFN0cmVhbUltcGwqKTsKdm9pZCBPQlVubWFyc2hhbChP
Q0k6OkN1cnJlbnRfcHRyJiwgT0I6OklucHV0U3RyZWFtSW1wbCopOwoKbmFtZXNwYWNlIE9DSQp7
Cgp0eXBlZGVmIE9COjpPYmpWYXI8IFRyYW5zcG9ydCA+IFRyYW5zcG9ydF92YXI7CnR5cGVkZWYg
T0I6Ok9iak91dDwgVHJhbnNwb3J0ID4gVHJhbnNwb3J0X291dDsKCnR5cGVkZWYgT0I6Ok9ialZh
cjwgVHJhbnNwb3J0SW5mbyA+IFRyYW5zcG9ydEluZm9fdmFyOwp0eXBlZGVmIE9COjpPYmpPdXQ8
IFRyYW5zcG9ydEluZm8gPiBUcmFuc3BvcnRJbmZvX291dDsKCnR5cGVkZWYgT0I6Ok9ialZhcjwg
Q2xvc2VDQiA+IENsb3NlQ0JfdmFyOwp0eXBlZGVmIE9COjpPYmpPdXQ8IENsb3NlQ0IgPiBDbG9z
ZUNCX291dDsKCnR5cGVkZWYgT0I6Ok9ialZhcjwgQ29ubmVjdG9yID4gQ29ubmVjdG9yX3ZhcjsK
dHlwZWRlZiBPQjo6T2JqT3V0PCBDb25uZWN0b3IgPiBDb25uZWN0b3Jfb3V0OwoKdHlwZWRlZiBP
Qjo6T2JqVmFyPCBDb25uZWN0b3JJbmZvID4gQ29ubmVjdG9ySW5mb192YXI7CnR5cGVkZWYgT0I6
Ok9iak91dDwgQ29ubmVjdG9ySW5mbyA+IENvbm5lY3RvckluZm9fb3V0OwoKdHlwZWRlZiBPQjo6
T2JqVmFyPCBDb25uZWN0Q0IgPiBDb25uZWN0Q0JfdmFyOwp0eXBlZGVmIE9COjpPYmpPdXQ8IENv
bm5lY3RDQiA+IENvbm5lY3RDQl9vdXQ7Cgp0eXBlZGVmIE9COjpPYmpWYXI8IEFjY2VwdG9yID4g
QWNjZXB0b3JfdmFyOwp0eXBlZGVmIE9COjpPYmpPdXQ8IEFjY2VwdG9yID4gQWNjZXB0b3Jfb3V0
OwoKdHlwZWRlZiBPQjo6T2JqVmFyPCBBY2NlcHRvckluZm8gPiBBY2NlcHRvckluZm9fdmFyOwp0
eXBlZGVmIE9COjpPYmpPdXQ8IEFjY2VwdG9ySW5mbyA+IEFjY2VwdG9ySW5mb19vdXQ7Cgp0eXBl
ZGVmIE9COjpPYmpWYXI8IEFjY2VwdENCID4gQWNjZXB0Q0JfdmFyOwp0eXBlZGVmIE9COjpPYmpP
dXQ8IEFjY2VwdENCID4gQWNjZXB0Q0Jfb3V0OwoKdHlwZWRlZiBPQjo6T2JqVmFyPCBBY2NGYWN0
b3J5ID4gQWNjRmFjdG9yeV92YXI7CnR5cGVkZWYgT0I6Ok9iak91dDwgQWNjRmFjdG9yeSA+IEFj
Y0ZhY3Rvcnlfb3V0OwoKdHlwZWRlZiBPQjo6T2JqVmFyPCBBY2NGYWN0b3J5SW5mbyA+IEFjY0Zh
Y3RvcnlJbmZvX3ZhcjsKdHlwZWRlZiBPQjo6T2JqT3V0PCBBY2NGYWN0b3J5SW5mbyA+IEFjY0Zh
Y3RvcnlJbmZvX291dDsKCnR5cGVkZWYgT0I6Ok9ialZhcjwgQWNjRmFjdG9yeVJlZ2lzdHJ5ID4g
QWNjRmFjdG9yeVJlZ2lzdHJ5X3ZhcjsKdHlwZWRlZiBPQjo6T2JqT3V0PCBBY2NGYWN0b3J5UmVn
aXN0cnkgPiBBY2NGYWN0b3J5UmVnaXN0cnlfb3V0OwoKdHlwZWRlZiBPQjo6T2JqVmFyPCBDb25G
YWN0b3J5ID4gQ29uRmFjdG9yeV92YXI7CnR5cGVkZWYgT0I6Ok9iak91dDwgQ29uRmFjdG9yeSA+
IENvbkZhY3Rvcnlfb3V0OwoKdHlwZWRlZiBPQjo6T2JqVmFyPCBDb25GYWN0b3J5SW5mbyA+IENv
bkZhY3RvcnlJbmZvX3ZhcjsKdHlwZWRlZiBPQjo6T2JqT3V0PCBDb25GYWN0b3J5SW5mbyA+IENv
bkZhY3RvcnlJbmZvX291dDsKCnR5cGVkZWYgT0I6Ok9ialZhcjwgQ29uRmFjdG9yeVJlZ2lzdHJ5
ID4gQ29uRmFjdG9yeVJlZ2lzdHJ5X3ZhcjsKdHlwZWRlZiBPQjo6T2JqT3V0PCBDb25GYWN0b3J5
UmVnaXN0cnkgPiBDb25GYWN0b3J5UmVnaXN0cnlfb3V0OwoKdHlwZWRlZiBPQjo6T2JqVmFyPCBD
dXJyZW50ID4gQ3VycmVudF92YXI7CnR5cGVkZWYgT0I6Ok9iak91dDwgQ3VycmVudCA+IEN1cnJl
bnRfb3V0OwoKfQojIDI0ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvT2JqZWN0LmgiIDIKIyAx
ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvQWJzdHJhY3RCYXNlX2Z3ZC5oIiAxCiMgMjUgIi9o
b21lL21hdHQvb2IvaW5jbHVkZS9PQi9PYmplY3QuaCIgMgojIDEgIi9ob21lL21hdHQvb2IvaW5j
bHVkZS9PQi9PQlBPQU1hbmFnZXJfZndkLmgiIDEKIyAxOCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRl
L09CL09CUE9BTWFuYWdlcl9md2QuaCIKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVt
cGxhdGUuaCIgMQojIDE5ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvT0JQT0FNYW5hZ2VyX2Z3
ZC5oIiAyCiMgMzAgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9PQlBPQU1hbmFnZXJfZndkLmgi
Cm5hbWVzcGFjZSBPQlBvcnRhYmxlU2VydmVyCnsKCmNsYXNzIFBPQU1hbmFnZXI7CnR5cGVkZWYg
UE9BTWFuYWdlciogUE9BTWFuYWdlcl9wdHI7CnR5cGVkZWYgUE9BTWFuYWdlciogUE9BTWFuYWdl
clJlZjsKCmNsYXNzIFBPQU1hbmFnZXJGYWN0b3J5Owp0eXBlZGVmIFBPQU1hbmFnZXJGYWN0b3J5
KiBQT0FNYW5hZ2VyRmFjdG9yeV9wdHI7CnR5cGVkZWYgUE9BTWFuYWdlckZhY3RvcnkqIFBPQU1h
bmFnZXJGYWN0b3J5UmVmOwoKfQoKdm9pZCBPQkR1cGxpY2F0ZShPQlBvcnRhYmxlU2VydmVyOjpQ
T0FNYW5hZ2VyX3B0cik7CnZvaWQgT0JSZWxlYXNlKE9CUG9ydGFibGVTZXJ2ZXI6OlBPQU1hbmFn
ZXJfcHRyKTsKCnZvaWQgT0JNYXJzaGFsKE9CUG9ydGFibGVTZXJ2ZXI6OlBPQU1hbmFnZXJfcHRy
LCBPQjo6T3V0cHV0U3RyZWFtSW1wbCopOwp2b2lkIE9CVW5tYXJzaGFsKE9CUG9ydGFibGVTZXJ2
ZXI6OlBPQU1hbmFnZXJfcHRyJiwgT0I6OklucHV0U3RyZWFtSW1wbCopOwoKdm9pZCBPQkR1cGxp
Y2F0ZShPQlBvcnRhYmxlU2VydmVyOjpQT0FNYW5hZ2VyRmFjdG9yeV9wdHIpOwp2b2lkIE9CUmVs
ZWFzZShPQlBvcnRhYmxlU2VydmVyOjpQT0FNYW5hZ2VyRmFjdG9yeV9wdHIpOwoKdm9pZCBPQk1h
cnNoYWwoT0JQb3J0YWJsZVNlcnZlcjo6UE9BTWFuYWdlckZhY3RvcnlfcHRyLCBPQjo6T3V0cHV0
U3RyZWFtSW1wbCopOwp2b2lkIE9CVW5tYXJzaGFsKE9CUG9ydGFibGVTZXJ2ZXI6OlBPQU1hbmFn
ZXJGYWN0b3J5X3B0ciYsIE9COjpJbnB1dFN0cmVhbUltcGwqKTsKCm5hbWVzcGFjZSBPQlBvcnRh
YmxlU2VydmVyCnsKCnR5cGVkZWYgT0I6Ok9ialZhcjwgUE9BTWFuYWdlciA+IFBPQU1hbmFnZXJf
dmFyOwp0eXBlZGVmIE9COjpPYmpPdXQ8IFBPQU1hbmFnZXIgPiBQT0FNYW5hZ2VyX291dDsKCnR5
cGVkZWYgT0I6Ok9ialZhcjwgUE9BTWFuYWdlckZhY3RvcnkgPiBQT0FNYW5hZ2VyRmFjdG9yeV92
YXI7CnR5cGVkZWYgT0I6Ok9iak91dDwgUE9BTWFuYWdlckZhY3RvcnkgPiBQT0FNYW5hZ2VyRmFj
dG9yeV9vdXQ7Cgp9CiMgMjYgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9PYmplY3QuaCIgMgoj
IDEgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9PUkJJbnN0YW5jZV9md2QuaCIgMQojIDI3ICIv
aG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvT2JqZWN0LmgiIDIKIyAxICIvaG9tZS9tYXR0L29iL2lu
Y2x1ZGUvT0IvUmVmQ291bnRlZF9md2QuaCIgMQojIDI4ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUv
T0IvT2JqZWN0LmgiIDIKCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0FueS5oIiAxCiMg
MzAgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9PYmplY3QuaCIgMgojIDEgIi9ob21lL21hdHQv
b2IvaW5jbHVkZS9PQi9UeXBlQ29kZUNvbnN0LmgiIDEKIyAzMSAiL2hvbWUvbWF0dC9vYi9pbmNs
dWRlL09CL09iamVjdC5oIiAyCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL09DSVR5cGVz
LmgiIDEKIyAyNyAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL09DSVR5cGVzLmgiCiMgMSAiL2hv
bWUvbWF0dC9vYi9pbmNsdWRlL09CL0lPUC5oIiAxCiMgMzcgIi9ob21lL21hdHQvb2IvaW5jbHVk
ZS9PQi9JT1AuaCIKbmFtZXNwYWNlIElPUAp7Cgp9CgpuYW1lc3BhY2UgSU9QCnsKCn0KCm5hbWVz
cGFjZSBPQlN0dWJJbXBsX0lPUAp7Cgp9CgpuYW1lc3BhY2UgT0JTdHViSW1wbF9JT1AKewoKfQoK
CgoKbmFtZXNwYWNlIElPUAp7CgoKCgp0eXBlZGVmIENPUkJBOjpVTG9uZyBQcm9maWxlSWQ7CnR5
cGVkZWYgQ09SQkE6OlVMb25nX291dCBQcm9maWxlSWRfb3V0OwoKCgoKY29uc3QgUHJvZmlsZUlk
IFRBR19JTlRFUk5FVF9JT1AgPSAwVTsKCgoKCmNvbnN0IFByb2ZpbGVJZCBUQUdfTVVMVElQTEVf
Q09NUE9ORU5UUyA9IDFVOwoKCgoKc3RydWN0IFRhZ2dlZFByb2ZpbGU7CnR5cGVkZWYgT0I6OlZh
clZhcjwgVGFnZ2VkUHJvZmlsZSA+IFRhZ2dlZFByb2ZpbGVfdmFyOwp0eXBlZGVmIE9COjpWYXJP
dXQ8IFRhZ2dlZFByb2ZpbGUgPiBUYWdnZWRQcm9maWxlX291dDsKCnN0cnVjdCBUYWdnZWRQcm9m
aWxlCnsKCgoKICAgIFRhZ2dlZFByb2ZpbGUoKSB7IH0KCiAgICBUYWdnZWRQcm9maWxlKGNvbnN0
IFRhZ2dlZFByb2ZpbGUmKTsKICAgIFRhZ2dlZFByb2ZpbGUmIG9wZXJhdG9yPShjb25zdCBUYWdn
ZWRQcm9maWxlJik7CgogICAgdHlwZWRlZiBUYWdnZWRQcm9maWxlX3ZhciBfdmFyX3R5cGU7Cgog
ICAgUHJvZmlsZUlkIHRhZzsKICAgIGNsYXNzIE9CVW5pcXVlX3Byb2ZpbGVfZGF0YSB7IH07CgoK
CiAgICB0eXBlZGVmIE9COjpGaXhTZXE8IENPUkJBOjpPY3RldCwgT0JVbmlxdWVfcHJvZmlsZV9k
YXRhID4gX3Byb2ZpbGVfZGF0YV9zZXE7CgogICAgX3Byb2ZpbGVfZGF0YV9zZXEgcHJvZmlsZV9k
YXRhOwoKICAgIHZvaWQgX09CX21hcnNoYWwoT0I6Ok91dHB1dFN0cmVhbUltcGwqKSBjb25zdDsK
ICAgIHN0YXRpYyB2b2lkIF9PQl91bm1hcnNoYWwoVGFnZ2VkUHJvZmlsZSYsIE9COjpJbnB1dFN0
cmVhbUltcGwqKTsKfTsKCgoKCnN0cnVjdCBJT1I7CnR5cGVkZWYgT0I6OlZhclZhcjwgSU9SID4g
SU9SX3ZhcjsKdHlwZWRlZiBPQjo6VmFyT3V0PCBJT1IgPiBJT1Jfb3V0OwoKc3RydWN0IElPUgp7
CiAgICBJT1IoKSB7IH0KICAgIElPUihjb25zdCBJT1ImKTsKICAgIElPUiYgb3BlcmF0b3I9KGNv
bnN0IElPUiYpOwoKICAgIHR5cGVkZWYgSU9SX3ZhciBfdmFyX3R5cGU7CgogICAgT0I6OlN0ckZv
clN0cnVjdCB0eXBlX2lkOwogICAgY2xhc3MgT0JVbmlxdWVfcHJvZmlsZXMgeyB9OwoKCgogICAg
dHlwZWRlZiBPQjo6VmFyU2VxPCBJT1A6OlRhZ2dlZFByb2ZpbGUsIE9CVW5pcXVlX3Byb2ZpbGVz
ID4gX3Byb2ZpbGVzX3NlcTsKCiAgICBfcHJvZmlsZXNfc2VxIHByb2ZpbGVzOwoKICAgIHZvaWQg
X09CX21hcnNoYWwoT0I6Ok91dHB1dFN0cmVhbUltcGwqKSBjb25zdDsKICAgIHN0YXRpYyB2b2lk
IF9PQl91bm1hcnNoYWwoSU9SJiwgT0I6OklucHV0U3RyZWFtSW1wbCopOwp9OwoKCgoKdHlwZWRl
ZiBDT1JCQTo6VUxvbmcgQ29tcG9uZW50SWQ7CnR5cGVkZWYgQ09SQkE6OlVMb25nX291dCBDb21w
b25lbnRJZF9vdXQ7CgoKCgpzdHJ1Y3QgVGFnZ2VkQ29tcG9uZW50Owp0eXBlZGVmIE9COjpWYXJW
YXI8IFRhZ2dlZENvbXBvbmVudCA+IFRhZ2dlZENvbXBvbmVudF92YXI7CnR5cGVkZWYgT0I6OlZh
ck91dDwgVGFnZ2VkQ29tcG9uZW50ID4gVGFnZ2VkQ29tcG9uZW50X291dDsKCnN0cnVjdCBUYWdn
ZWRDb21wb25lbnQKewoKCgogICAgVGFnZ2VkQ29tcG9uZW50KCkgeyB9CgogICAgVGFnZ2VkQ29t
cG9uZW50KGNvbnN0IFRhZ2dlZENvbXBvbmVudCYpOwogICAgVGFnZ2VkQ29tcG9uZW50JiBvcGVy
YXRvcj0oY29uc3QgVGFnZ2VkQ29tcG9uZW50Jik7CgogICAgdHlwZWRlZiBUYWdnZWRDb21wb25l
bnRfdmFyIF92YXJfdHlwZTsKCiAgICBDb21wb25lbnRJZCB0YWc7CiAgICBjbGFzcyBPQlVuaXF1
ZV9jb21wb25lbnRfZGF0YSB7IH07CgoKCiAgICB0eXBlZGVmIE9COjpGaXhTZXE8IENPUkJBOjpP
Y3RldCwgT0JVbmlxdWVfY29tcG9uZW50X2RhdGEgPiBfY29tcG9uZW50X2RhdGFfc2VxOwoKICAg
IF9jb21wb25lbnRfZGF0YV9zZXEgY29tcG9uZW50X2RhdGE7CgogICAgdm9pZCBfT0JfbWFyc2hh
bChPQjo6T3V0cHV0U3RyZWFtSW1wbCopIGNvbnN0OwogICAgc3RhdGljIHZvaWQgX09CX3VubWFy
c2hhbChUYWdnZWRDb21wb25lbnQmLCBPQjo6SW5wdXRTdHJlYW1JbXBsKik7Cn07CgoKCgpjbGFz
cyBPQlVuaXF1ZV9NdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgeyB9OwoKdHlwZWRlZiBPQjo6VmFy
U2VxPCBUYWdnZWRDb21wb25lbnQsIE9CVW5pcXVlX011bHRpcGxlQ29tcG9uZW50UHJvZmlsZSA+
IE11bHRpcGxlQ29tcG9uZW50UHJvZmlsZTsKdHlwZWRlZiBPQjo6U2VxVmFyPCBPQjo6VmFyU2Vx
PCBUYWdnZWRDb21wb25lbnQsIE9CVW5pcXVlX011bHRpcGxlQ29tcG9uZW50UHJvZmlsZSA+ID4g
TXVsdGlwbGVDb21wb25lbnRQcm9maWxlX3ZhcjsKdHlwZWRlZiBPQjo6U2VxT3V0PCBPQjo6VmFy
U2VxPCBUYWdnZWRDb21wb25lbnQsIE9CVW5pcXVlX011bHRpcGxlQ29tcG9uZW50UHJvZmlsZSA+
ID4gTXVsdGlwbGVDb21wb25lbnRQcm9maWxlX291dDsKCgoKCmNsYXNzIE9CVW5pcXVlX1RhZ2dl
ZENvbXBvbmVudFNlcSB7IH07Cgp0eXBlZGVmIE9COjpWYXJTZXE8IFRhZ2dlZENvbXBvbmVudCwg
T0JVbmlxdWVfVGFnZ2VkQ29tcG9uZW50U2VxID4gVGFnZ2VkQ29tcG9uZW50U2VxOwp0eXBlZGVm
IE9COjpTZXFWYXI8IE9COjpWYXJTZXE8IFRhZ2dlZENvbXBvbmVudCwgT0JVbmlxdWVfVGFnZ2Vk
Q29tcG9uZW50U2VxID4gPiBUYWdnZWRDb21wb25lbnRTZXFfdmFyOwp0eXBlZGVmIE9COjpTZXFP
dXQ8IE9COjpWYXJTZXE8IFRhZ2dlZENvbXBvbmVudCwgT0JVbmlxdWVfVGFnZ2VkQ29tcG9uZW50
U2VxID4gPiBUYWdnZWRDb21wb25lbnRTZXFfb3V0OwoKCgoKY29uc3QgQ29tcG9uZW50SWQgVEFH
X09SQl9UWVBFID0gMFU7CgoKCgpjb25zdCBDb21wb25lbnRJZCBUQUdfQ09ERV9TRVRTID0gMVU7
CgoKCgpjb25zdCBDb21wb25lbnRJZCBUQUdfUE9MSUNJRVMgPSAyVTsKCgoKCmNvbnN0IENvbXBv
bmVudElkIFRBR19BTFRFUk5BVEVfSUlPUF9BRERSRVNTID0gM1U7CgoKCgpjb25zdCBDb21wb25l
bnRJZCBUQUdfQVNTT0NJQVRJT05fT1BUSU9OUyA9IDEzVTsKCgoKCmNvbnN0IENvbXBvbmVudElk
IFRBR19TRUNfTkFNRSA9IDE0VTsKCgoKCmNvbnN0IENvbXBvbmVudElkIFRBR19TUEtNXzFfU0VD
X01FQ0ggPSAxNVU7CgoKCgpjb25zdCBDb21wb25lbnRJZCBUQUdfU1BLTV8yX1NFQ19NRUNIID0g
MTZVOwoKCgoKY29uc3QgQ29tcG9uZW50SWQgVEFHX0tlcmJlcm9zVjVfU0VDX01FQ0ggPSAxN1U7
CgoKCgpjb25zdCBDb21wb25lbnRJZCBUQUdfQ1NJX0VDTUFfU2VjcmV0X1NFQ19NRUNIID0gMThV
OwoKCgoKY29uc3QgQ29tcG9uZW50SWQgVEFHX0NTSV9FQ01BX0h5YnJpZF9TRUNfTUVDSCA9IDE5
VTsKCgoKCmNvbnN0IENvbXBvbmVudElkIFRBR19TU0xfU0VDX1RSQU5TID0gMjBVOwoKCgoKY29u
c3QgQ29tcG9uZW50SWQgVEFHX0NTSV9FQ01BX1B1YmxpY19TRUNfTUVDSCA9IDIxVTsKCgoKCmNv
bnN0IENvbXBvbmVudElkIFRBR19HRU5FUklDX1NFQ19NRUNIID0gMjJVOwoKCgoKY29uc3QgQ29t
cG9uZW50SWQgVEFHX0pBVkFfQ09ERUJBU0UgPSAyNVU7CgoKCgpjb25zdCBDb21wb25lbnRJZCBU
QUdfQ09NUExFVEVfT0JKRUNUX0tFWSA9IDVVOwoKCgoKY29uc3QgQ29tcG9uZW50SWQgVEFHX0VO
RFBPSU5UX0lEX1BPU0lUSU9OID0gNlU7CgoKCgpjb25zdCBDb21wb25lbnRJZCBUQUdfTE9DQVRJ
T05fUE9MSUNZID0gMTJVOwoKCgoKY29uc3QgQ29tcG9uZW50SWQgVEFHX0RDRV9TVFJJTkdfQklO
RElORyA9IDEwMFU7CgoKCgpjb25zdCBDb21wb25lbnRJZCBUQUdfRENFX0JJTkRJTkdfTkFNRSA9
IDEwMVU7CgoKCgpjb25zdCBDb21wb25lbnRJZCBUQUdfRENFX05PX1BJUEVTID0gMTAyVTsKCgoK
CmNvbnN0IENvbXBvbmVudElkIFRBR19EQ0VfU0VDX01FQ0ggPSAxMDNVOwoKCgoKdHlwZWRlZiBD
T1JCQTo6VUxvbmcgU2VydmljZUlkOwp0eXBlZGVmIENPUkJBOjpVTG9uZ19vdXQgU2VydmljZUlk
X291dDsKCgoKCnN0cnVjdCBTZXJ2aWNlQ29udGV4dDsKdHlwZWRlZiBPQjo6VmFyVmFyPCBTZXJ2
aWNlQ29udGV4dCA+IFNlcnZpY2VDb250ZXh0X3ZhcjsKdHlwZWRlZiBPQjo6VmFyT3V0PCBTZXJ2
aWNlQ29udGV4dCA+IFNlcnZpY2VDb250ZXh0X291dDsKCnN0cnVjdCBTZXJ2aWNlQ29udGV4dAp7
CgoKCiAgICBTZXJ2aWNlQ29udGV4dCgpIHsgfQoKICAgIFNlcnZpY2VDb250ZXh0KGNvbnN0IFNl
cnZpY2VDb250ZXh0Jik7CiAgICBTZXJ2aWNlQ29udGV4dCYgb3BlcmF0b3I9KGNvbnN0IFNlcnZp
Y2VDb250ZXh0Jik7CgogICAgdHlwZWRlZiBTZXJ2aWNlQ29udGV4dF92YXIgX3Zhcl90eXBlOwoK
ICAgIFNlcnZpY2VJZCBjb250ZXh0X2lkOwogICAgY2xhc3MgT0JVbmlxdWVfY29udGV4dF9kYXRh
IHsgfTsKCgoKICAgIHR5cGVkZWYgT0I6OkZpeFNlcTwgQ09SQkE6Ok9jdGV0LCBPQlVuaXF1ZV9j
b250ZXh0X2RhdGEgPiBfY29udGV4dF9kYXRhX3NlcTsKCiAgICBfY29udGV4dF9kYXRhX3NlcSBj
b250ZXh0X2RhdGE7CgogICAgdm9pZCBfT0JfbWFyc2hhbChPQjo6T3V0cHV0U3RyZWFtSW1wbCop
IGNvbnN0OwogICAgc3RhdGljIHZvaWQgX09CX3VubWFyc2hhbChTZXJ2aWNlQ29udGV4dCYsIE9C
OjpJbnB1dFN0cmVhbUltcGwqKTsKfTsKCgoKCmNsYXNzIE9CVW5pcXVlX1NlcnZpY2VDb250ZXh0
TGlzdCB7IH07Cgp0eXBlZGVmIE9COjpWYXJTZXE8IFNlcnZpY2VDb250ZXh0LCBPQlVuaXF1ZV9T
ZXJ2aWNlQ29udGV4dExpc3QgPiBTZXJ2aWNlQ29udGV4dExpc3Q7CnR5cGVkZWYgT0I6OlNlcVZh
cjwgT0I6OlZhclNlcTwgU2VydmljZUNvbnRleHQsIE9CVW5pcXVlX1NlcnZpY2VDb250ZXh0TGlz
dCA+ID4gU2VydmljZUNvbnRleHRMaXN0X3ZhcjsKdHlwZWRlZiBPQjo6U2VxT3V0PCBPQjo6VmFy
U2VxPCBTZXJ2aWNlQ29udGV4dCwgT0JVbmlxdWVfU2VydmljZUNvbnRleHRMaXN0ID4gPiBTZXJ2
aWNlQ29udGV4dExpc3Rfb3V0OwoKCgoKY29uc3QgU2VydmljZUlkIFRyYW5zYWN0aW9uU2Vydmlj
ZSA9IDBVOwoKCgoKY29uc3QgU2VydmljZUlkIENvZGVTZXRzID0gMVU7CgoKCgpjb25zdCBTZXJ2
aWNlSWQgQ2hhaW5CeXBhc3NDaGVjayA9IDJVOwoKCgoKY29uc3QgU2VydmljZUlkIENoYWluQnlw
YXNzSW5mbyA9IDNVOwoKCgoKY29uc3QgU2VydmljZUlkIExvZ2ljYWxUaHJlYWRJZCA9IDRVOwoK
CgoKY29uc3QgU2VydmljZUlkIEJJX0RJUl9JSU9QID0gNVU7CgoKCgpjb25zdCBTZXJ2aWNlSWQg
U2VuZGluZ0NvbnRleHRSdW5UaW1lID0gNlU7CgoKCgpjb25zdCBTZXJ2aWNlSWQgSU5WT0NBVElP
Tl9QT0xJQ0lFUyA9IDdVOwoKCgoKY29uc3QgU2VydmljZUlkIEZPUldBUkRFRF9JREVOVElUWSA9
IDhVOwoKCgoKY29uc3QgU2VydmljZUlkIFVua25vd25FeGNlcHRpb25JbmZvID0gOVU7Cgp9CgoK
CgpuYW1lc3BhY2UgT0JTdHViSW1wbF9JT1AKewoKfQoKCgoKbmFtZXNwYWNlIE9CTWFyc2hhbFN0
dWJJbXBsX0lPUAp7Cgp9CgoKCgpuYW1lc3BhY2UgT0JWX0lPUAp7Cgp9CiMgMjggIi9ob21lL21h
dHQvb2IvaW5jbHVkZS9PQi9PQ0lUeXBlcy5oIiAyCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRl
L09CL09DSUJ1ZmZlci5oIiAxCiMgMTQgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9PQ0lCdWZm
ZXIuaCIKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvT0NJQnVmZmVyX2Z3ZC5oIiAxCiMg
MTQgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9PQ0lCdWZmZXJfZndkLmgiCiMgMSAiL2hvbWUv
bWF0dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlLmgiIDEKIyAxNSAiL2hvbWUvbWF0dC9vYi9pbmNs
dWRlL09CL09DSUJ1ZmZlcl9md2QuaCIgMgoKbmFtZXNwYWNlIE9DSQp7CgpjbGFzcyBCdWZmZXI7
CnR5cGVkZWYgQnVmZmVyKiBCdWZmZXJfcHRyOwp0eXBlZGVmIEJ1ZmZlcl9wdHIgQnVmZmVyUmVm
OwoKfQoKdm9pZCBPQkR1cGxpY2F0ZShPQ0k6OkJ1ZmZlcl9wdHIpOwp2b2lkIE9CUmVsZWFzZShP
Q0k6OkJ1ZmZlcl9wdHIpOwoKbmFtZXNwYWNlIE9DSQp7Cgp0eXBlZGVmIE9COjpPYmpWYXI8IEJ1
ZmZlciA+IEJ1ZmZlcl92YXI7Cgp9CiMgMTUgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9PQ0lC
dWZmZXIuaCIgMgoKbmFtZXNwYWNlIE9DSQp7CiMgMjggIi9ob21lL21hdHQvb2IvaW5jbHVkZS9P
Qi9PQ0lCdWZmZXIuaCIKY2xhc3MgQnVmZmVySW1wbAp7CgoKCgoKCiAgICBDT1JCQTo6T2N0ZXQg
ZGVmQnVmX1sxMjAwXTsKCiAgICBib29sIHJlbF87CiAgICBDT1JCQTo6T2N0ZXQqIHJlYWxfOwog
ICAgQ09SQkE6OlVMb25nIG1heF87CgpwdWJsaWM6CgogICAgQ09SQkE6Ok9jdGV0KiBkYXRhXzsK
ICAgIENPUkJBOjpVTG9uZyBsZW5fOwogICAgQ09SQkE6Ok9jdGV0KiBjdXJfOwogICAgQ09SQkE6
Ok9jdGV0KiBsYXN0XzsKCiAgICB2b2lkIGRvUmVhbGxvYyhDT1JCQTo6VUxvbmcpOwoKcHVibGlj
OgoKICAgIEJ1ZmZlckltcGwoKQogICAgICAgIDogcmVsXyhmYWxzZSksIHJlYWxfKDApLCBtYXhf
KDApLCBkYXRhXygwKSwgbGVuXygwKSwgY3VyXygwKSwgbGFzdF8oMCkKICAgIHsKICAgIH0KCiAg
ICBCdWZmZXJJbXBsKENPUkJBOjpPY3RldCogZGF0YSwgQ09SQkE6OlVMb25nIGxlbikKICAgICAg
ICA6IHJlbF8oZmFsc2UpLCByZWFsXyhkYXRhKSwgbWF4XyhsZW4pLCBkYXRhXyhkYXRhKSwgbGVu
XyhsZW4pLAogICAgICAgICAgY3VyXyhkYXRhKSwgbGFzdF8oZGF0YV8gKyBsZW5fKQogICAgewog
ICAgfQoKICAgIEJ1ZmZlckltcGwoQ09SQkE6OlVMb25nKTsKCiAgICB2aXJ0dWFsIH5CdWZmZXJJ
bXBsKCk7CgoKCgogICAgQ09SQkE6Ok9jdGV0KiBkYXRhKCkgeyByZXR1cm4gZGF0YV87IH0KICAg
IENPUkJBOjpPY3RldCogcmVzdCgpIHsgcmV0dXJuIGN1cl87IH0KCiAgICBDT1JCQTo6VUxvbmcg
bGVuZ3RoKCkgeyByZXR1cm4gbGVuXzsgfQogICAgQ09SQkE6OlVMb25nIHJlc3RfbGVuZ3RoKCkg
eyByZXR1cm4gbGVuXyAtIChjdXJfIC0gZGF0YV8pOyB9CgogICAgQ09SQkE6OlVMb25nIHBvcygp
IHsgcmV0dXJuIChjdXJfIC0gZGF0YV8pOyB9CiAgICB2b2lkIHBvcyhDT1JCQTo6VUxvbmcgcG9z
KSB7IGN1cl8gPSBkYXRhXyArIHBvczsgfQogICAgdm9pZCBhZHZhbmNlKENPUkJBOjpVTG9uZyBk
ZWx0YSkgeyBjdXJfICs9IGRlbHRhOyB9CgogICAgQ09SQkE6OkJvb2xlYW4gaXNfZnVsbCgpIHsg
cmV0dXJuIGN1cl8gPj0gbGFzdF87IH0KCgoKCiAgICB2b2lkIGFsbG9jKENPUkJBOjpVTG9uZyk7
CgogICAgdm9pZCByZWFsbG9jKENPUkJBOjpVTG9uZyBuKQogICAgewoKCgogICAgICAgIChzdGF0
aWNfY2FzdDx2b2lkPiAoKG4gPj0gbGVuXykgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJuID49IGxl
bl8iLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL09DSUJ1ZmZlci5oIiwgOTMsIF9fUFJFVFRZ
X0ZVTkNUSU9OX18pLCAwKSkpOwoKICAgICAgICBpZihuID4gbWF4XykKICAgICAgICB7CiAgICAg
ICAgICAgIGRvUmVhbGxvYyhuKTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKCgoK
ICAgICAgICAgICAgbGVuXyA9IG47CiAgICAgICAgICAgIGxhc3RfID0gZGF0YV8gKyBsZW5fOwog
ICAgICAgIH0KICAgIH0KCiAgICB2b2lkIGNvbnN1bWUoQnVmZmVySW1wbCopOwp9OwoKCgoKY2xh
c3MgQnVmZmVyIDogcHVibGljIEJ1ZmZlckltcGwsIHB1YmxpYyBPQjo6U2ltcGxlUmVmQ291bnQK
ewpwdWJsaWM6CgogICAgQnVmZmVyKCkgeyB9CiAgICBCdWZmZXIoQ09SQkE6Ok9jdGV0KiBkYXRh
LCBDT1JCQTo6VUxvbmcgbGVuKSA6IEJ1ZmZlckltcGwoZGF0YSwgbGVuKSB7IH0KICAgIEJ1ZmZl
cihDT1JCQTo6VUxvbmcgbikgOiBCdWZmZXJJbXBsKG4pIHsgfQoKCgoKICAgIHN0YXRpYyBpbmxp
bmUgQnVmZmVyX3B0ciBfZHVwbGljYXRlKEJ1ZmZlcl9wdHIgcCkKICAgIHsgaWYocCkgcCAtPiBf
T0JfaW5jUmVmKCk7IHJldHVybiBwOyB9CiAgICBzdGF0aWMgaW5saW5lIEJ1ZmZlcl9wdHIgX25p
bCgpCiAgICB7IHJldHVybiAwOyB9Cn07Cgp0eXBlZGVmIE9COjpPYmpTZXE8IEJ1ZmZlciwgaW50
ID4gQnVmZmVyU2VxOwp0eXBlZGVmIE9COjpTZXFWYXI8IE9COjpPYmpTZXE8IEJ1ZmZlciwgaW50
ID4gPiBCdWZmZXJTZXFfdmFyOwoKfQoKbmFtZXNwYWNlIENPUkJBCnsKCmlubGluZSB2b2lkCnJl
bGVhc2UoT0NJOjpCdWZmZXJfcHRyIHApCnsKICAgIGlmKHApCiAgICAgICAgcCAtPiBfT0JfZGVj
UmVmKCk7Cn0KCmlubGluZSBCb29sZWFuCmlzX25pbChPQ0k6OkJ1ZmZlcl9wdHIgcCkKewogICAg
cmV0dXJuIHAgPT0gMDsKfQoKfQojIDI5ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvT0NJVHlw
ZXMuaCIgMgojIDEgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UeXBlcy5oIiAxCiMgMzcgIi9o
b21lL21hdHQvb2IvaW5jbHVkZS9PQi9UeXBlcy5oIgpuYW1lc3BhY2UgQ09SQkEKewoKfQoKbmFt
ZXNwYWNlIENPUkJBCnsKCn0KCm5hbWVzcGFjZSBPQlN0dWJJbXBsX0NPUkJBCnsKCn0KCm5hbWVz
cGFjZSBPQlN0dWJJbXBsX0NPUkJBCnsKCn0KCgoKCm5hbWVzcGFjZSBDT1JCQQp7CgoKCgpjbGFz
cyBPQlVuaXF1ZV9BbnlTZXEgeyB9OwoKdHlwZWRlZiBPQjo6VmFyU2VxPCBDT1JCQTo6QW55LCBP
QlVuaXF1ZV9BbnlTZXEgPiBBbnlTZXE7CnR5cGVkZWYgT0I6OlNlcVZhcjwgT0I6OlZhclNlcTwg
Q09SQkE6OkFueSwgT0JVbmlxdWVfQW55U2VxID4gPiBBbnlTZXFfdmFyOwp0eXBlZGVmIE9COjpT
ZXFPdXQ8IE9COjpWYXJTZXE8IENPUkJBOjpBbnksIE9CVW5pcXVlX0FueVNlcSA+ID4gQW55U2Vx
X291dDsKICAgICAgICAgIGV4dGVybiBPQjo6VHlwZUNvZGVDb25zdCBfdGNfQW55U2VxOwoKc3Ry
dWN0IE9CSW5mb19BbnlTZXEgOiBwdWJsaWMgT0I6OkNvbnN0cnVjdGVkSW5mbwp7CiAgICBPQklu
Zm9fQW55U2VxKCkgeyB9CgogICAgdmlydHVhbCB2b2lkIGZyZWUodm9pZCogcCkgY29uc3QKICAg
IHsKICAgICAgICBkZWxldGUgKEFueVNlcSopcDsKICAgIH0KCiAgICB2aXJ0dWFsIHZvaWQqIGR1
cChjb25zdCB2b2lkKiBwKSBjb25zdAogICAgewogICAgICAgIHJldHVybiBuZXcgQW55U2VxKCoo
Y29uc3QgQW55U2VxKilwKTsKICAgIH0KCiAgICB2aXJ0dWFsIHZvaWQgbWFyc2hhbChjb25zdCB2
b2lkKiwgT0I6Ok91dHB1dFN0cmVhbUltcGwqKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCB1bm1h
cnNoYWwodm9pZCosIE9COjpJbnB1dFN0cmVhbUltcGwqKSBjb25zdDsKfTsKCgoKCmNsYXNzIE9C
VW5pcXVlX0Jvb2xlYW5TZXEgeyB9OwoKdHlwZWRlZiBPQjo6Rml4U2VxPCBDT1JCQTo6Qm9vbGVh
biwgT0JVbmlxdWVfQm9vbGVhblNlcSA+IEJvb2xlYW5TZXE7CnR5cGVkZWYgT0I6OlNlcVZhcjwg
T0I6OkZpeFNlcTwgQ09SQkE6OkJvb2xlYW4sIE9CVW5pcXVlX0Jvb2xlYW5TZXEgPiA+IEJvb2xl
YW5TZXFfdmFyOwp0eXBlZGVmIE9COjpTZXFPdXQ8IE9COjpGaXhTZXE8IENPUkJBOjpCb29sZWFu
LCBPQlVuaXF1ZV9Cb29sZWFuU2VxID4gPiBCb29sZWFuU2VxX291dDsKICAgICAgICAgIGV4dGVy
biBPQjo6VHlwZUNvZGVDb25zdCBfdGNfQm9vbGVhblNlcTsKCnN0cnVjdCBPQkluZm9fQm9vbGVh
blNlcSA6IHB1YmxpYyBPQjo6Q29uc3RydWN0ZWRJbmZvCnsKICAgIE9CSW5mb19Cb29sZWFuU2Vx
KCkgeyB9CgogICAgdmlydHVhbCB2b2lkIGZyZWUodm9pZCogcCkgY29uc3QKICAgIHsKICAgICAg
ICBkZWxldGUgKEJvb2xlYW5TZXEqKXA7CiAgICB9CgogICAgdmlydHVhbCB2b2lkKiBkdXAoY29u
c3Qgdm9pZCogcCkgY29uc3QKICAgIHsKICAgICAgICByZXR1cm4gbmV3IEJvb2xlYW5TZXEoKihj
b25zdCBCb29sZWFuU2VxKilwKTsKICAgIH0KCiAgICB2aXJ0dWFsIHZvaWQgbWFyc2hhbChjb25z
dCB2b2lkKiwgT0I6Ok91dHB1dFN0cmVhbUltcGwqKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCB1
bm1hcnNoYWwodm9pZCosIE9COjpJbnB1dFN0cmVhbUltcGwqKSBjb25zdDsKfTsKCgoKCmNsYXNz
IE9CVW5pcXVlX0NoYXJTZXEgeyB9OwoKdHlwZWRlZiBPQjo6Rml4U2VxPCBDT1JCQTo6Q2hhciwg
T0JVbmlxdWVfQ2hhclNlcSA+IENoYXJTZXE7CnR5cGVkZWYgT0I6OlNlcVZhcjwgT0I6OkZpeFNl
cTwgQ09SQkE6OkNoYXIsIE9CVW5pcXVlX0NoYXJTZXEgPiA+IENoYXJTZXFfdmFyOwp0eXBlZGVm
IE9COjpTZXFPdXQ8IE9COjpGaXhTZXE8IENPUkJBOjpDaGFyLCBPQlVuaXF1ZV9DaGFyU2VxID4g
PiBDaGFyU2VxX291dDsKICAgICAgICAgIGV4dGVybiBPQjo6VHlwZUNvZGVDb25zdCBfdGNfQ2hh
clNlcTsKCnN0cnVjdCBPQkluZm9fQ2hhclNlcSA6IHB1YmxpYyBPQjo6Q29uc3RydWN0ZWRJbmZv
CnsKICAgIE9CSW5mb19DaGFyU2VxKCkgeyB9CgogICAgdmlydHVhbCB2b2lkIGZyZWUodm9pZCog
cCkgY29uc3QKICAgIHsKICAgICAgICBkZWxldGUgKENoYXJTZXEqKXA7CiAgICB9CgogICAgdmly
dHVhbCB2b2lkKiBkdXAoY29uc3Qgdm9pZCogcCkgY29uc3QKICAgIHsKICAgICAgICByZXR1cm4g
bmV3IENoYXJTZXEoKihjb25zdCBDaGFyU2VxKilwKTsKICAgIH0KCiAgICB2aXJ0dWFsIHZvaWQg
bWFyc2hhbChjb25zdCB2b2lkKiwgT0I6Ok91dHB1dFN0cmVhbUltcGwqKSBjb25zdDsKICAgIHZp
cnR1YWwgdm9pZCB1bm1hcnNoYWwodm9pZCosIE9COjpJbnB1dFN0cmVhbUltcGwqKSBjb25zdDsK
fTsKCgoKCmNsYXNzIE9CVW5pcXVlX1dDaGFyU2VxIHsgfTsKCnR5cGVkZWYgT0I6OkZpeFNlcTwg
Q09SQkE6OldDaGFyLCBPQlVuaXF1ZV9XQ2hhclNlcSA+IFdDaGFyU2VxOwp0eXBlZGVmIE9COjpT
ZXFWYXI8IE9COjpGaXhTZXE8IENPUkJBOjpXQ2hhciwgT0JVbmlxdWVfV0NoYXJTZXEgPiA+IFdD
aGFyU2VxX3ZhcjsKdHlwZWRlZiBPQjo6U2VxT3V0PCBPQjo6Rml4U2VxPCBDT1JCQTo6V0NoYXIs
IE9CVW5pcXVlX1dDaGFyU2VxID4gPiBXQ2hhclNlcV9vdXQ7CiAgICAgICAgICBleHRlcm4gT0I6
OlR5cGVDb2RlQ29uc3QgX3RjX1dDaGFyU2VxOwoKc3RydWN0IE9CSW5mb19XQ2hhclNlcSA6IHB1
YmxpYyBPQjo6Q29uc3RydWN0ZWRJbmZvCnsKICAgIE9CSW5mb19XQ2hhclNlcSgpIHsgfQoKICAg
IHZpcnR1YWwgdm9pZCBmcmVlKHZvaWQqIHApIGNvbnN0CiAgICB7CiAgICAgICAgZGVsZXRlIChX
Q2hhclNlcSopcDsKICAgIH0KCiAgICB2aXJ0dWFsIHZvaWQqIGR1cChjb25zdCB2b2lkKiBwKSBj
b25zdAogICAgewogICAgICAgIHJldHVybiBuZXcgV0NoYXJTZXEoKihjb25zdCBXQ2hhclNlcSop
cCk7CiAgICB9CgogICAgdmlydHVhbCB2b2lkIG1hcnNoYWwoY29uc3Qgdm9pZCosIE9COjpPdXRw
dXRTdHJlYW1JbXBsKikgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgdW5tYXJzaGFsKHZvaWQqLCBP
Qjo6SW5wdXRTdHJlYW1JbXBsKikgY29uc3Q7Cn07CgoKCgpjbGFzcyBPQlVuaXF1ZV9PY3RldFNl
cSB7IH07Cgp0eXBlZGVmIE9COjpGaXhTZXE8IENPUkJBOjpPY3RldCwgT0JVbmlxdWVfT2N0ZXRT
ZXEgPiBPY3RldFNlcTsKdHlwZWRlZiBPQjo6U2VxVmFyPCBPQjo6Rml4U2VxPCBDT1JCQTo6T2N0
ZXQsIE9CVW5pcXVlX09jdGV0U2VxID4gPiBPY3RldFNlcV92YXI7CnR5cGVkZWYgT0I6OlNlcU91
dDwgT0I6OkZpeFNlcTwgQ09SQkE6Ok9jdGV0LCBPQlVuaXF1ZV9PY3RldFNlcSA+ID4gT2N0ZXRT
ZXFfb3V0OwogICAgICAgICAgZXh0ZXJuIE9COjpUeXBlQ29kZUNvbnN0IF90Y19PY3RldFNlcTsK
CnN0cnVjdCBPQkluZm9fT2N0ZXRTZXEgOiBwdWJsaWMgT0I6OkNvbnN0cnVjdGVkSW5mbwp7CiAg
ICBPQkluZm9fT2N0ZXRTZXEoKSB7IH0KCiAgICB2aXJ0dWFsIHZvaWQgZnJlZSh2b2lkKiBwKSBj
b25zdAogICAgewogICAgICAgIGRlbGV0ZSAoT2N0ZXRTZXEqKXA7CiAgICB9CgogICAgdmlydHVh
bCB2b2lkKiBkdXAoY29uc3Qgdm9pZCogcCkgY29uc3QKICAgIHsKICAgICAgICByZXR1cm4gbmV3
IE9jdGV0U2VxKCooY29uc3QgT2N0ZXRTZXEqKXApOwogICAgfQoKICAgIHZpcnR1YWwgdm9pZCBt
YXJzaGFsKGNvbnN0IHZvaWQqLCBPQjo6T3V0cHV0U3RyZWFtSW1wbCopIGNvbnN0OwogICAgdmly
dHVhbCB2b2lkIHVubWFyc2hhbCh2b2lkKiwgT0I6OklucHV0U3RyZWFtSW1wbCopIGNvbnN0Owp9
OwoKCgoKY2xhc3MgT0JVbmlxdWVfU2hvcnRTZXEgeyB9OwoKdHlwZWRlZiBPQjo6Rml4U2VxPCBD
T1JCQTo6U2hvcnQsIE9CVW5pcXVlX1Nob3J0U2VxID4gU2hvcnRTZXE7CnR5cGVkZWYgT0I6OlNl
cVZhcjwgT0I6OkZpeFNlcTwgQ09SQkE6OlNob3J0LCBPQlVuaXF1ZV9TaG9ydFNlcSA+ID4gU2hv
cnRTZXFfdmFyOwp0eXBlZGVmIE9COjpTZXFPdXQ8IE9COjpGaXhTZXE8IENPUkJBOjpTaG9ydCwg
T0JVbmlxdWVfU2hvcnRTZXEgPiA+IFNob3J0U2VxX291dDsKICAgICAgICAgIGV4dGVybiBPQjo6
VHlwZUNvZGVDb25zdCBfdGNfU2hvcnRTZXE7CgpzdHJ1Y3QgT0JJbmZvX1Nob3J0U2VxIDogcHVi
bGljIE9COjpDb25zdHJ1Y3RlZEluZm8KewogICAgT0JJbmZvX1Nob3J0U2VxKCkgeyB9CgogICAg
dmlydHVhbCB2b2lkIGZyZWUodm9pZCogcCkgY29uc3QKICAgIHsKICAgICAgICBkZWxldGUgKFNo
b3J0U2VxKilwOwogICAgfQoKICAgIHZpcnR1YWwgdm9pZCogZHVwKGNvbnN0IHZvaWQqIHApIGNv
bnN0CiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBTaG9ydFNlcSgqKGNvbnN0IFNob3J0U2VxKilw
KTsKICAgIH0KCiAgICB2aXJ0dWFsIHZvaWQgbWFyc2hhbChjb25zdCB2b2lkKiwgT0I6Ok91dHB1
dFN0cmVhbUltcGwqKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCB1bm1hcnNoYWwodm9pZCosIE9C
OjpJbnB1dFN0cmVhbUltcGwqKSBjb25zdDsKfTsKCgoKCmNsYXNzIE9CVW5pcXVlX1VTaG9ydFNl
cSB7IH07Cgp0eXBlZGVmIE9COjpGaXhTZXE8IENPUkJBOjpVU2hvcnQsIE9CVW5pcXVlX1VTaG9y
dFNlcSA+IFVTaG9ydFNlcTsKdHlwZWRlZiBPQjo6U2VxVmFyPCBPQjo6Rml4U2VxPCBDT1JCQTo6
VVNob3J0LCBPQlVuaXF1ZV9VU2hvcnRTZXEgPiA+IFVTaG9ydFNlcV92YXI7CnR5cGVkZWYgT0I6
OlNlcU91dDwgT0I6OkZpeFNlcTwgQ09SQkE6OlVTaG9ydCwgT0JVbmlxdWVfVVNob3J0U2VxID4g
PiBVU2hvcnRTZXFfb3V0OwogICAgICAgICAgZXh0ZXJuIE9COjpUeXBlQ29kZUNvbnN0IF90Y19V
U2hvcnRTZXE7CgpzdHJ1Y3QgT0JJbmZvX1VTaG9ydFNlcSA6IHB1YmxpYyBPQjo6Q29uc3RydWN0
ZWRJbmZvCnsKICAgIE9CSW5mb19VU2hvcnRTZXEoKSB7IH0KCiAgICB2aXJ0dWFsIHZvaWQgZnJl
ZSh2b2lkKiBwKSBjb25zdAogICAgewogICAgICAgIGRlbGV0ZSAoVVNob3J0U2VxKilwOwogICAg
fQoKICAgIHZpcnR1YWwgdm9pZCogZHVwKGNvbnN0IHZvaWQqIHApIGNvbnN0CiAgICB7CiAgICAg
ICAgcmV0dXJuIG5ldyBVU2hvcnRTZXEoKihjb25zdCBVU2hvcnRTZXEqKXApOwogICAgfQoKICAg
IHZpcnR1YWwgdm9pZCBtYXJzaGFsKGNvbnN0IHZvaWQqLCBPQjo6T3V0cHV0U3RyZWFtSW1wbCop
IGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHVubWFyc2hhbCh2b2lkKiwgT0I6OklucHV0U3RyZWFt
SW1wbCopIGNvbnN0Owp9OwoKCgoKY2xhc3MgT0JVbmlxdWVfTG9uZ1NlcSB7IH07Cgp0eXBlZGVm
IE9COjpGaXhTZXE8IENPUkJBOjpMb25nLCBPQlVuaXF1ZV9Mb25nU2VxID4gTG9uZ1NlcTsKdHlw
ZWRlZiBPQjo6U2VxVmFyPCBPQjo6Rml4U2VxPCBDT1JCQTo6TG9uZywgT0JVbmlxdWVfTG9uZ1Nl
cSA+ID4gTG9uZ1NlcV92YXI7CnR5cGVkZWYgT0I6OlNlcU91dDwgT0I6OkZpeFNlcTwgQ09SQkE6
OkxvbmcsIE9CVW5pcXVlX0xvbmdTZXEgPiA+IExvbmdTZXFfb3V0OwogICAgICAgICAgZXh0ZXJu
IE9COjpUeXBlQ29kZUNvbnN0IF90Y19Mb25nU2VxOwoKc3RydWN0IE9CSW5mb19Mb25nU2VxIDog
cHVibGljIE9COjpDb25zdHJ1Y3RlZEluZm8KewogICAgT0JJbmZvX0xvbmdTZXEoKSB7IH0KCiAg
ICB2aXJ0dWFsIHZvaWQgZnJlZSh2b2lkKiBwKSBjb25zdAogICAgewogICAgICAgIGRlbGV0ZSAo
TG9uZ1NlcSopcDsKICAgIH0KCiAgICB2aXJ0dWFsIHZvaWQqIGR1cChjb25zdCB2b2lkKiBwKSBj
b25zdAogICAgewogICAgICAgIHJldHVybiBuZXcgTG9uZ1NlcSgqKGNvbnN0IExvbmdTZXEqKXAp
OwogICAgfQoKICAgIHZpcnR1YWwgdm9pZCBtYXJzaGFsKGNvbnN0IHZvaWQqLCBPQjo6T3V0cHV0
U3RyZWFtSW1wbCopIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHVubWFyc2hhbCh2b2lkKiwgT0I6
OklucHV0U3RyZWFtSW1wbCopIGNvbnN0Owp9OwoKCgoKY2xhc3MgT0JVbmlxdWVfVUxvbmdTZXEg
eyB9OwoKdHlwZWRlZiBPQjo6Rml4U2VxPCBDT1JCQTo6VUxvbmcsIE9CVW5pcXVlX1VMb25nU2Vx
ID4gVUxvbmdTZXE7CnR5cGVkZWYgT0I6OlNlcVZhcjwgT0I6OkZpeFNlcTwgQ09SQkE6OlVMb25n
LCBPQlVuaXF1ZV9VTG9uZ1NlcSA+ID4gVUxvbmdTZXFfdmFyOwp0eXBlZGVmIE9COjpTZXFPdXQ8
IE9COjpGaXhTZXE8IENPUkJBOjpVTG9uZywgT0JVbmlxdWVfVUxvbmdTZXEgPiA+IFVMb25nU2Vx
X291dDsKICAgICAgICAgIGV4dGVybiBPQjo6VHlwZUNvZGVDb25zdCBfdGNfVUxvbmdTZXE7Cgpz
dHJ1Y3QgT0JJbmZvX1VMb25nU2VxIDogcHVibGljIE9COjpDb25zdHJ1Y3RlZEluZm8KewogICAg
T0JJbmZvX1VMb25nU2VxKCkgeyB9CgogICAgdmlydHVhbCB2b2lkIGZyZWUodm9pZCogcCkgY29u
c3QKICAgIHsKICAgICAgICBkZWxldGUgKFVMb25nU2VxKilwOwogICAgfQoKICAgIHZpcnR1YWwg
dm9pZCogZHVwKGNvbnN0IHZvaWQqIHApIGNvbnN0CiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBV
TG9uZ1NlcSgqKGNvbnN0IFVMb25nU2VxKilwKTsKICAgIH0KCiAgICB2aXJ0dWFsIHZvaWQgbWFy
c2hhbChjb25zdCB2b2lkKiwgT0I6Ok91dHB1dFN0cmVhbUltcGwqKSBjb25zdDsKICAgIHZpcnR1
YWwgdm9pZCB1bm1hcnNoYWwodm9pZCosIE9COjpJbnB1dFN0cmVhbUltcGwqKSBjb25zdDsKfTsK
CgoKCmNsYXNzIE9CVW5pcXVlX0xvbmdMb25nU2VxIHsgfTsKCnR5cGVkZWYgT0I6OkZpeFNlcTwg
Q09SQkE6OkxvbmdMb25nLCBPQlVuaXF1ZV9Mb25nTG9uZ1NlcSA+IExvbmdMb25nU2VxOwp0eXBl
ZGVmIE9COjpTZXFWYXI8IE9COjpGaXhTZXE8IENPUkJBOjpMb25nTG9uZywgT0JVbmlxdWVfTG9u
Z0xvbmdTZXEgPiA+IExvbmdMb25nU2VxX3ZhcjsKdHlwZWRlZiBPQjo6U2VxT3V0PCBPQjo6Rml4
U2VxPCBDT1JCQTo6TG9uZ0xvbmcsIE9CVW5pcXVlX0xvbmdMb25nU2VxID4gPiBMb25nTG9uZ1Nl
cV9vdXQ7CiAgICAgICAgICBleHRlcm4gT0I6OlR5cGVDb2RlQ29uc3QgX3RjX0xvbmdMb25nU2Vx
OwoKc3RydWN0IE9CSW5mb19Mb25nTG9uZ1NlcSA6IHB1YmxpYyBPQjo6Q29uc3RydWN0ZWRJbmZv
CnsKICAgIE9CSW5mb19Mb25nTG9uZ1NlcSgpIHsgfQoKICAgIHZpcnR1YWwgdm9pZCBmcmVlKHZv
aWQqIHApIGNvbnN0CiAgICB7CiAgICAgICAgZGVsZXRlIChMb25nTG9uZ1NlcSopcDsKICAgIH0K
CiAgICB2aXJ0dWFsIHZvaWQqIGR1cChjb25zdCB2b2lkKiBwKSBjb25zdAogICAgewogICAgICAg
IHJldHVybiBuZXcgTG9uZ0xvbmdTZXEoKihjb25zdCBMb25nTG9uZ1NlcSopcCk7CiAgICB9Cgog
ICAgdmlydHVhbCB2b2lkIG1hcnNoYWwoY29uc3Qgdm9pZCosIE9COjpPdXRwdXRTdHJlYW1JbXBs
KikgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgdW5tYXJzaGFsKHZvaWQqLCBPQjo6SW5wdXRTdHJl
YW1JbXBsKikgY29uc3Q7Cn07CgoKCgpjbGFzcyBPQlVuaXF1ZV9VTG9uZ0xvbmdTZXEgeyB9OwoK
dHlwZWRlZiBPQjo6Rml4U2VxPCBDT1JCQTo6VUxvbmdMb25nLCBPQlVuaXF1ZV9VTG9uZ0xvbmdT
ZXEgPiBVTG9uZ0xvbmdTZXE7CnR5cGVkZWYgT0I6OlNlcVZhcjwgT0I6OkZpeFNlcTwgQ09SQkE6
OlVMb25nTG9uZywgT0JVbmlxdWVfVUxvbmdMb25nU2VxID4gPiBVTG9uZ0xvbmdTZXFfdmFyOwp0
eXBlZGVmIE9COjpTZXFPdXQ8IE9COjpGaXhTZXE8IENPUkJBOjpVTG9uZ0xvbmcsIE9CVW5pcXVl
X1VMb25nTG9uZ1NlcSA+ID4gVUxvbmdMb25nU2VxX291dDsKICAgICAgICAgIGV4dGVybiBPQjo6
VHlwZUNvZGVDb25zdCBfdGNfVUxvbmdMb25nU2VxOwoKc3RydWN0IE9CSW5mb19VTG9uZ0xvbmdT
ZXEgOiBwdWJsaWMgT0I6OkNvbnN0cnVjdGVkSW5mbwp7CiAgICBPQkluZm9fVUxvbmdMb25nU2Vx
KCkgeyB9CgogICAgdmlydHVhbCB2b2lkIGZyZWUodm9pZCogcCkgY29uc3QKICAgIHsKICAgICAg
ICBkZWxldGUgKFVMb25nTG9uZ1NlcSopcDsKICAgIH0KCiAgICB2aXJ0dWFsIHZvaWQqIGR1cChj
b25zdCB2b2lkKiBwKSBjb25zdAogICAgewogICAgICAgIHJldHVybiBuZXcgVUxvbmdMb25nU2Vx
KCooY29uc3QgVUxvbmdMb25nU2VxKilwKTsKICAgIH0KCiAgICB2aXJ0dWFsIHZvaWQgbWFyc2hh
bChjb25zdCB2b2lkKiwgT0I6Ok91dHB1dFN0cmVhbUltcGwqKSBjb25zdDsKICAgIHZpcnR1YWwg
dm9pZCB1bm1hcnNoYWwodm9pZCosIE9COjpJbnB1dFN0cmVhbUltcGwqKSBjb25zdDsKfTsKCgoK
CmNsYXNzIE9CVW5pcXVlX0Zsb2F0U2VxIHsgfTsKCnR5cGVkZWYgT0I6OkZpeFNlcTwgQ09SQkE6
OkZsb2F0LCBPQlVuaXF1ZV9GbG9hdFNlcSA+IEZsb2F0U2VxOwp0eXBlZGVmIE9COjpTZXFWYXI8
IE9COjpGaXhTZXE8IENPUkJBOjpGbG9hdCwgT0JVbmlxdWVfRmxvYXRTZXEgPiA+IEZsb2F0U2Vx
X3ZhcjsKdHlwZWRlZiBPQjo6U2VxT3V0PCBPQjo6Rml4U2VxPCBDT1JCQTo6RmxvYXQsIE9CVW5p
cXVlX0Zsb2F0U2VxID4gPiBGbG9hdFNlcV9vdXQ7CiAgICAgICAgICBleHRlcm4gT0I6OlR5cGVD
b2RlQ29uc3QgX3RjX0Zsb2F0U2VxOwoKc3RydWN0IE9CSW5mb19GbG9hdFNlcSA6IHB1YmxpYyBP
Qjo6Q29uc3RydWN0ZWRJbmZvCnsKICAgIE9CSW5mb19GbG9hdFNlcSgpIHsgfQoKICAgIHZpcnR1
YWwgdm9pZCBmcmVlKHZvaWQqIHApIGNvbnN0CiAgICB7CiAgICAgICAgZGVsZXRlIChGbG9hdFNl
cSopcDsKICAgIH0KCiAgICB2aXJ0dWFsIHZvaWQqIGR1cChjb25zdCB2b2lkKiBwKSBjb25zdAog
ICAgewogICAgICAgIHJldHVybiBuZXcgRmxvYXRTZXEoKihjb25zdCBGbG9hdFNlcSopcCk7CiAg
ICB9CgogICAgdmlydHVhbCB2b2lkIG1hcnNoYWwoY29uc3Qgdm9pZCosIE9COjpPdXRwdXRTdHJl
YW1JbXBsKikgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgdW5tYXJzaGFsKHZvaWQqLCBPQjo6SW5w
dXRTdHJlYW1JbXBsKikgY29uc3Q7Cn07CgoKCgpjbGFzcyBPQlVuaXF1ZV9Eb3VibGVTZXEgeyB9
OwoKdHlwZWRlZiBPQjo6Rml4U2VxPCBDT1JCQTo6RG91YmxlLCBPQlVuaXF1ZV9Eb3VibGVTZXEg
PiBEb3VibGVTZXE7CnR5cGVkZWYgT0I6OlNlcVZhcjwgT0I6OkZpeFNlcTwgQ09SQkE6OkRvdWJs
ZSwgT0JVbmlxdWVfRG91YmxlU2VxID4gPiBEb3VibGVTZXFfdmFyOwp0eXBlZGVmIE9COjpTZXFP
dXQ8IE9COjpGaXhTZXE8IENPUkJBOjpEb3VibGUsIE9CVW5pcXVlX0RvdWJsZVNlcSA+ID4gRG91
YmxlU2VxX291dDsKICAgICAgICAgIGV4dGVybiBPQjo6VHlwZUNvZGVDb25zdCBfdGNfRG91Ymxl
U2VxOwoKc3RydWN0IE9CSW5mb19Eb3VibGVTZXEgOiBwdWJsaWMgT0I6OkNvbnN0cnVjdGVkSW5m
bwp7CiAgICBPQkluZm9fRG91YmxlU2VxKCkgeyB9CgogICAgdmlydHVhbCB2b2lkIGZyZWUodm9p
ZCogcCkgY29uc3QKICAgIHsKICAgICAgICBkZWxldGUgKERvdWJsZVNlcSopcDsKICAgIH0KCiAg
ICB2aXJ0dWFsIHZvaWQqIGR1cChjb25zdCB2b2lkKiBwKSBjb25zdAogICAgewogICAgICAgIHJl
dHVybiBuZXcgRG91YmxlU2VxKCooY29uc3QgRG91YmxlU2VxKilwKTsKICAgIH0KCiAgICB2aXJ0
dWFsIHZvaWQgbWFyc2hhbChjb25zdCB2b2lkKiwgT0I6Ok91dHB1dFN0cmVhbUltcGwqKSBjb25z
dDsKICAgIHZpcnR1YWwgdm9pZCB1bm1hcnNoYWwodm9pZCosIE9COjpJbnB1dFN0cmVhbUltcGwq
KSBjb25zdDsKfTsKCgoKCmNsYXNzIE9CVW5pcXVlX1N0cmluZ1NlcSB7IH07Cgp0eXBlZGVmIE9C
OjpTdHJTZXE8IE9CVW5pcXVlX1N0cmluZ1NlcSA+IFN0cmluZ1NlcTsKdHlwZWRlZiBPQjo6U2Vx
VmFyPCBPQjo6U3RyU2VxPCBPQlVuaXF1ZV9TdHJpbmdTZXEgPiA+IFN0cmluZ1NlcV92YXI7CnR5
cGVkZWYgT0I6OlNlcU91dDwgT0I6OlN0clNlcTwgT0JVbmlxdWVfU3RyaW5nU2VxID4gPiBTdHJp
bmdTZXFfb3V0OwogICAgICAgICAgZXh0ZXJuIE9COjpUeXBlQ29kZUNvbnN0IF90Y19TdHJpbmdT
ZXE7CgpzdHJ1Y3QgT0JJbmZvX1N0cmluZ1NlcSA6IHB1YmxpYyBPQjo6Q29uc3RydWN0ZWRJbmZv
CnsKICAgIE9CSW5mb19TdHJpbmdTZXEoKSB7IH0KCiAgICB2aXJ0dWFsIHZvaWQgZnJlZSh2b2lk
KiBwKSBjb25zdAogICAgewogICAgICAgIGRlbGV0ZSAoU3RyaW5nU2VxKilwOwogICAgfQoKICAg
IHZpcnR1YWwgdm9pZCogZHVwKGNvbnN0IHZvaWQqIHApIGNvbnN0CiAgICB7CiAgICAgICAgcmV0
dXJuIG5ldyBTdHJpbmdTZXEoKihjb25zdCBTdHJpbmdTZXEqKXApOwogICAgfQoKICAgIHZpcnR1
YWwgdm9pZCBtYXJzaGFsKGNvbnN0IHZvaWQqLCBPQjo6T3V0cHV0U3RyZWFtSW1wbCopIGNvbnN0
OwogICAgdmlydHVhbCB2b2lkIHVubWFyc2hhbCh2b2lkKiwgT0I6OklucHV0U3RyZWFtSW1wbCop
IGNvbnN0Owp9OwoKCgoKY2xhc3MgT0JVbmlxdWVfV1N0cmluZ1NlcSB7IH07Cgp0eXBlZGVmIE9C
OjpXU3RyU2VxPCBPQlVuaXF1ZV9XU3RyaW5nU2VxID4gV1N0cmluZ1NlcTsKdHlwZWRlZiBPQjo6
U2VxVmFyPCBPQjo6V1N0clNlcTwgT0JVbmlxdWVfV1N0cmluZ1NlcSA+ID4gV1N0cmluZ1NlcV92
YXI7CnR5cGVkZWYgT0I6OlNlcU91dDwgT0I6OldTdHJTZXE8IE9CVW5pcXVlX1dTdHJpbmdTZXEg
PiA+IFdTdHJpbmdTZXFfb3V0OwogICAgICAgICAgZXh0ZXJuIE9COjpUeXBlQ29kZUNvbnN0IF90
Y19XU3RyaW5nU2VxOwoKc3RydWN0IE9CSW5mb19XU3RyaW5nU2VxIDogcHVibGljIE9COjpDb25z
dHJ1Y3RlZEluZm8KewogICAgT0JJbmZvX1dTdHJpbmdTZXEoKSB7IH0KCiAgICB2aXJ0dWFsIHZv
aWQgZnJlZSh2b2lkKiBwKSBjb25zdAogICAgewogICAgICAgIGRlbGV0ZSAoV1N0cmluZ1NlcSop
cDsKICAgIH0KCiAgICB2aXJ0dWFsIHZvaWQqIGR1cChjb25zdCB2b2lkKiBwKSBjb25zdAogICAg
ewogICAgICAgIHJldHVybiBuZXcgV1N0cmluZ1NlcSgqKGNvbnN0IFdTdHJpbmdTZXEqKXApOwog
ICAgfQoKICAgIHZpcnR1YWwgdm9pZCBtYXJzaGFsKGNvbnN0IHZvaWQqLCBPQjo6T3V0cHV0U3Ry
ZWFtSW1wbCopIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHVubWFyc2hhbCh2b2lkKiwgT0I6Oklu
cHV0U3RyZWFtSW1wbCopIGNvbnN0Owp9OwoKCgoKdHlwZWRlZiBjaGFyKiBSZXBvc2l0b3J5SWQ7
CnR5cGVkZWYgQ09SQkE6OlN0cmluZ192YXIgUmVwb3NpdG9yeUlkX3ZhcjsKdHlwZWRlZiBDT1JC
QTo6U3RyaW5nX291dCBSZXBvc2l0b3J5SWRfb3V0OwogICAgICAgICAgZXh0ZXJuIE9COjpUeXBl
Q29kZUNvbnN0IF90Y19SZXBvc2l0b3J5SWQ7CgoKCgp0eXBlZGVmIGNoYXIqIFNjb3BlZE5hbWU7
CnR5cGVkZWYgQ09SQkE6OlN0cmluZ192YXIgU2NvcGVkTmFtZV92YXI7CnR5cGVkZWYgQ09SQkE6
OlN0cmluZ19vdXQgU2NvcGVkTmFtZV9vdXQ7CiAgICAgICAgICBleHRlcm4gT0I6OlR5cGVDb2Rl
Q29uc3QgX3RjX1Njb3BlZE5hbWU7CgoKCgp0eXBlZGVmIGNoYXIqIElkZW50aWZpZXI7CnR5cGVk
ZWYgQ09SQkE6OlN0cmluZ192YXIgSWRlbnRpZmllcl92YXI7CnR5cGVkZWYgQ09SQkE6OlN0cmlu
Z19vdXQgSWRlbnRpZmllcl9vdXQ7CiAgICAgICAgICBleHRlcm4gT0I6OlR5cGVDb2RlQ29uc3Qg
X3RjX0lkZW50aWZpZXI7CgoKCgp0eXBlZGVmIGNoYXIqIFZlcnNpb25TcGVjOwp0eXBlZGVmIENP
UkJBOjpTdHJpbmdfdmFyIFZlcnNpb25TcGVjX3ZhcjsKdHlwZWRlZiBDT1JCQTo6U3RyaW5nX291
dCBWZXJzaW9uU3BlY19vdXQ7CiAgICAgICAgICBleHRlcm4gT0I6OlR5cGVDb2RlQ29uc3QgX3Rj
X1ZlcnNpb25TcGVjOwoKCgoKZW51bSBQYXJhbWV0ZXJNb2RlCnsKICAgIFBBUkFNX0lOLAogICAg
UEFSQU1fT1VULAogICAgUEFSQU1fSU5PVVQKfTsKCnR5cGVkZWYgUGFyYW1ldGVyTW9kZSYgUGFy
YW1ldGVyTW9kZV9vdXQ7CgogICAgICAgICAgZXh0ZXJuIE9COjpUeXBlQ29kZUNvbnN0IF90Y19Q
YXJhbWV0ZXJNb2RlOwoKfQoKCgoKbmFtZXNwYWNlIE9CU3R1YkltcGxfQ09SQkEKewoKfQoKCgoK
bmFtZXNwYWNlIE9CTWFyc2hhbFN0dWJJbXBsX0NPUkJBCnsKCn0KCgoKCm5hbWVzcGFjZSBPQlZf
Q09SQkEKewoKfQoKCgoKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgQ09SQkE6OkFueVNl
cSopOwp2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6QW55U2VxJik7
CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmLCBjb25zdCBDT1JC
QTo6QW55U2VxKiYpOwoKaW5saW5lIHZvaWQKb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImIGFu
eSwgQ09SQkE6OkFueVNlcSogdmFsKQp7CiAgICBhbnkuaW5vdXQoKSA8PD0gdmFsOwp9Cgppbmxp
bmUgdm9pZApvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYW55LCBjb25zdCBDT1JCQTo6QW55
U2VxJiB2YWwpCnsKICAgIGFueS5pbm91dCgpIDw8PSB2YWw7Cn0KCmlubGluZSBDT1JCQTo6Qm9v
bGVhbgpvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55X3ZhciYgYW55LCBjb25zdCBDT1JCQTo6
QW55U2VxKiYgdmFsKQp7CiAgICByZXR1cm4gYW55LmluKCkgPj49IHZhbDsKfQoKCgoKdm9pZCBv
cGVyYXRvcjw8PShDT1JCQTo6QW55JiwgQ09SQkE6OkJvb2xlYW5TZXEqKTsKdm9pZCBvcGVyYXRv
cjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkJvb2xlYW5TZXEmKTsKQ09SQkE6OkJvb2xl
YW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpCb29sZWFuU2Vx
KiYpOwoKaW5saW5lIHZvaWQKb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImIGFueSwgQ09SQkE6
OkJvb2xlYW5TZXEqIHZhbCkKewogICAgYW55Lmlub3V0KCkgPDw9IHZhbDsKfQoKaW5saW5lIHZv
aWQKb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImIGFueSwgY29uc3QgQ09SQkE6OkJvb2xlYW5T
ZXEmIHZhbCkKewogICAgYW55Lmlub3V0KCkgPDw9IHZhbDsKfQoKaW5saW5lIENPUkJBOjpCb29s
ZWFuCm9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnlfdmFyJiBhbnksIGNvbnN0IENPUkJBOjpC
b29sZWFuU2VxKiYgdmFsKQp7CiAgICByZXR1cm4gYW55LmluKCkgPj49IHZhbDsKfQoKCgoKdm9p
ZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgQ09SQkE6OkNoYXJTZXEqKTsKdm9pZCBvcGVyYXRv
cjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkNoYXJTZXEmKTsKQ09SQkE6OkJvb2xlYW4g
b3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpDaGFyU2VxKiYpOwoK
aW5saW5lIHZvaWQKb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImIGFueSwgQ09SQkE6OkNoYXJT
ZXEqIHZhbCkKewogICAgYW55Lmlub3V0KCkgPDw9IHZhbDsKfQoKaW5saW5lIHZvaWQKb3BlcmF0
b3I8PD0oQ09SQkE6OkFueV92YXImIGFueSwgY29uc3QgQ09SQkE6OkNoYXJTZXEmIHZhbCkKewog
ICAgYW55Lmlub3V0KCkgPDw9IHZhbDsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuCm9wZXJhdG9y
Pj49KGNvbnN0IENPUkJBOjpBbnlfdmFyJiBhbnksIGNvbnN0IENPUkJBOjpDaGFyU2VxKiYgdmFs
KQp7CiAgICByZXR1cm4gYW55LmluKCkgPj49IHZhbDsKfQoKCgoKdm9pZCBvcGVyYXRvcjw8PShD
T1JCQTo6QW55JiwgQ09SQkE6OldDaGFyU2VxKik7CnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFu
eSYsIGNvbnN0IENPUkJBOjpXQ2hhclNlcSYpOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShj
b25zdCBDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OldDaGFyU2VxKiYpOwoKaW5saW5lIHZvaWQK
b3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImIGFueSwgQ09SQkE6OldDaGFyU2VxKiB2YWwpCnsK
ICAgIGFueS5pbm91dCgpIDw8PSB2YWw7Cn0KCmlubGluZSB2b2lkCm9wZXJhdG9yPDw9KENPUkJB
OjpBbnlfdmFyJiBhbnksIGNvbnN0IENPUkJBOjpXQ2hhclNlcSYgdmFsKQp7CiAgICBhbnkuaW5v
dXQoKSA8PD0gdmFsOwp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4Kb3BlcmF0b3I+Pj0oY29uc3Qg
Q09SQkE6OkFueV92YXImIGFueSwgY29uc3QgQ09SQkE6OldDaGFyU2VxKiYgdmFsKQp7CiAgICBy
ZXR1cm4gYW55LmluKCkgPj49IHZhbDsKfQoKCgoKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55
JiwgQ09SQkE6Ok9jdGV0U2VxKik7CnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0
IENPUkJBOjpPY3RldFNlcSYpOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JC
QTo6QW55JiwgY29uc3QgQ09SQkE6Ok9jdGV0U2VxKiYpOwoKaW5saW5lIHZvaWQKb3BlcmF0b3I8
PD0oQ09SQkE6OkFueV92YXImIGFueSwgQ09SQkE6Ok9jdGV0U2VxKiB2YWwpCnsKICAgIGFueS5p
bm91dCgpIDw8PSB2YWw7Cn0KCmlubGluZSB2b2lkCm9wZXJhdG9yPDw9KENPUkJBOjpBbnlfdmFy
JiBhbnksIGNvbnN0IENPUkJBOjpPY3RldFNlcSYgdmFsKQp7CiAgICBhbnkuaW5vdXQoKSA8PD0g
dmFsOwp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4Kb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFu
eV92YXImIGFueSwgY29uc3QgQ09SQkE6Ok9jdGV0U2VxKiYgdmFsKQp7CiAgICByZXR1cm4gYW55
LmluKCkgPj49IHZhbDsKfQoKCgoKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgQ09SQkE6
OlNob3J0U2VxKik7CnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpT
aG9ydFNlcSYpOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55Jiwg
Y29uc3QgQ09SQkE6OlNob3J0U2VxKiYpOwoKaW5saW5lIHZvaWQKb3BlcmF0b3I8PD0oQ09SQkE6
OkFueV92YXImIGFueSwgQ09SQkE6OlNob3J0U2VxKiB2YWwpCnsKICAgIGFueS5pbm91dCgpIDw8
PSB2YWw7Cn0KCmlubGluZSB2b2lkCm9wZXJhdG9yPDw9KENPUkJBOjpBbnlfdmFyJiBhbnksIGNv
bnN0IENPUkJBOjpTaG9ydFNlcSYgdmFsKQp7CiAgICBhbnkuaW5vdXQoKSA8PD0gdmFsOwp9Cgpp
bmxpbmUgQ09SQkE6OkJvb2xlYW4Kb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueV92YXImIGFu
eSwgY29uc3QgQ09SQkE6OlNob3J0U2VxKiYgdmFsKQp7CiAgICByZXR1cm4gYW55LmluKCkgPj49
IHZhbDsKfQoKCgoKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgQ09SQkE6OlVTaG9ydFNl
cSopOwp2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6VVNob3J0U2Vx
Jik7CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmLCBjb25zdCBD
T1JCQTo6VVNob3J0U2VxKiYpOwoKaW5saW5lIHZvaWQKb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92
YXImIGFueSwgQ09SQkE6OlVTaG9ydFNlcSogdmFsKQp7CiAgICBhbnkuaW5vdXQoKSA8PD0gdmFs
Owp9CgppbmxpbmUgdm9pZApvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYW55LCBjb25zdCBD
T1JCQTo6VVNob3J0U2VxJiB2YWwpCnsKICAgIGFueS5pbm91dCgpIDw8PSB2YWw7Cn0KCmlubGlu
ZSBDT1JCQTo6Qm9vbGVhbgpvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55X3ZhciYgYW55LCBj
b25zdCBDT1JCQTo6VVNob3J0U2VxKiYgdmFsKQp7CiAgICByZXR1cm4gYW55LmluKCkgPj49IHZh
bDsKfQoKCgoKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgQ09SQkE6OkxvbmdTZXEqKTsK
dm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkxvbmdTZXEmKTsKQ09S
QkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpM
b25nU2VxKiYpOwoKaW5saW5lIHZvaWQKb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImIGFueSwg
Q09SQkE6OkxvbmdTZXEqIHZhbCkKewogICAgYW55Lmlub3V0KCkgPDw9IHZhbDsKfQoKaW5saW5l
IHZvaWQKb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImIGFueSwgY29uc3QgQ09SQkE6OkxvbmdT
ZXEmIHZhbCkKewogICAgYW55Lmlub3V0KCkgPDw9IHZhbDsKfQoKaW5saW5lIENPUkJBOjpCb29s
ZWFuCm9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnlfdmFyJiBhbnksIGNvbnN0IENPUkJBOjpM
b25nU2VxKiYgdmFsKQp7CiAgICByZXR1cm4gYW55LmluKCkgPj49IHZhbDsKfQoKCgoKdm9pZCBv
cGVyYXRvcjw8PShDT1JCQTo6QW55JiwgQ09SQkE6OlVMb25nU2VxKik7CnZvaWQgb3BlcmF0b3I8
PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpVTG9uZ1NlcSYpOwpDT1JCQTo6Qm9vbGVhbiBv
cGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OlVMb25nU2VxKiYpOwoK
aW5saW5lIHZvaWQKb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImIGFueSwgQ09SQkE6OlVMb25n
U2VxKiB2YWwpCnsKICAgIGFueS5pbm91dCgpIDw8PSB2YWw7Cn0KCmlubGluZSB2b2lkCm9wZXJh
dG9yPDw9KENPUkJBOjpBbnlfdmFyJiBhbnksIGNvbnN0IENPUkJBOjpVTG9uZ1NlcSYgdmFsKQp7
CiAgICBhbnkuaW5vdXQoKSA8PD0gdmFsOwp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4Kb3BlcmF0
b3I+Pj0oY29uc3QgQ09SQkE6OkFueV92YXImIGFueSwgY29uc3QgQ09SQkE6OlVMb25nU2VxKiYg
dmFsKQp7CiAgICByZXR1cm4gYW55LmluKCkgPj49IHZhbDsKfQoKCgoKdm9pZCBvcGVyYXRvcjw8
PShDT1JCQTo6QW55JiwgQ09SQkE6OkxvbmdMb25nU2VxKik7CnZvaWQgb3BlcmF0b3I8PD0oQ09S
QkE6OkFueSYsIGNvbnN0IENPUkJBOjpMb25nTG9uZ1NlcSYpOwpDT1JCQTo6Qm9vbGVhbiBvcGVy
YXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OkxvbmdMb25nU2VxKiYpOwoK
aW5saW5lIHZvaWQKb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImIGFueSwgQ09SQkE6OkxvbmdM
b25nU2VxKiB2YWwpCnsKICAgIGFueS5pbm91dCgpIDw8PSB2YWw7Cn0KCmlubGluZSB2b2lkCm9w
ZXJhdG9yPDw9KENPUkJBOjpBbnlfdmFyJiBhbnksIGNvbnN0IENPUkJBOjpMb25nTG9uZ1NlcSYg
dmFsKQp7CiAgICBhbnkuaW5vdXQoKSA8PD0gdmFsOwp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4K
b3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueV92YXImIGFueSwgY29uc3QgQ09SQkE6OkxvbmdM
b25nU2VxKiYgdmFsKQp7CiAgICByZXR1cm4gYW55LmluKCkgPj49IHZhbDsKfQoKCgoKdm9pZCBv
cGVyYXRvcjw8PShDT1JCQTo6QW55JiwgQ09SQkE6OlVMb25nTG9uZ1NlcSopOwp2b2lkIG9wZXJh
dG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6VUxvbmdMb25nU2VxJik7CkNPUkJBOjpC
b29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6VUxvbmdM
b25nU2VxKiYpOwoKaW5saW5lIHZvaWQKb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImIGFueSwg
Q09SQkE6OlVMb25nTG9uZ1NlcSogdmFsKQp7CiAgICBhbnkuaW5vdXQoKSA8PD0gdmFsOwp9Cgpp
bmxpbmUgdm9pZApvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYW55LCBjb25zdCBDT1JCQTo6
VUxvbmdMb25nU2VxJiB2YWwpCnsKICAgIGFueS5pbm91dCgpIDw8PSB2YWw7Cn0KCmlubGluZSBD
T1JCQTo6Qm9vbGVhbgpvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55X3ZhciYgYW55LCBjb25z
dCBDT1JCQTo6VUxvbmdMb25nU2VxKiYgdmFsKQp7CiAgICByZXR1cm4gYW55LmluKCkgPj49IHZh
bDsKfQoKCgoKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgQ09SQkE6OkZsb2F0U2VxKik7
CnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpGbG9hdFNlcSYpOwpD
T1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6
OkZsb2F0U2VxKiYpOwoKaW5saW5lIHZvaWQKb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImIGFu
eSwgQ09SQkE6OkZsb2F0U2VxKiB2YWwpCnsKICAgIGFueS5pbm91dCgpIDw8PSB2YWw7Cn0KCmlu
bGluZSB2b2lkCm9wZXJhdG9yPDw9KENPUkJBOjpBbnlfdmFyJiBhbnksIGNvbnN0IENPUkJBOjpG
bG9hdFNlcSYgdmFsKQp7CiAgICBhbnkuaW5vdXQoKSA8PD0gdmFsOwp9CgppbmxpbmUgQ09SQkE6
OkJvb2xlYW4Kb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueV92YXImIGFueSwgY29uc3QgQ09S
QkE6OkZsb2F0U2VxKiYgdmFsKQp7CiAgICByZXR1cm4gYW55LmluKCkgPj49IHZhbDsKfQoKCgoK
dm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgQ09SQkE6OkRvdWJsZVNlcSopOwp2b2lkIG9w
ZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6RG91YmxlU2VxJik7CkNPUkJBOjpC
b29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6RG91Ymxl
U2VxKiYpOwoKaW5saW5lIHZvaWQKb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImIGFueSwgQ09S
QkE6OkRvdWJsZVNlcSogdmFsKQp7CiAgICBhbnkuaW5vdXQoKSA8PD0gdmFsOwp9CgppbmxpbmUg
dm9pZApvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYW55LCBjb25zdCBDT1JCQTo6RG91Ymxl
U2VxJiB2YWwpCnsKICAgIGFueS5pbm91dCgpIDw8PSB2YWw7Cn0KCmlubGluZSBDT1JCQTo6Qm9v
bGVhbgpvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55X3ZhciYgYW55LCBjb25zdCBDT1JCQTo6
RG91YmxlU2VxKiYgdmFsKQp7CiAgICByZXR1cm4gYW55LmluKCkgPj49IHZhbDsKfQoKCgoKdm9p
ZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgQ09SQkE6OlN0cmluZ1NlcSopOwp2b2lkIG9wZXJh
dG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6U3RyaW5nU2VxJik7CkNPUkJBOjpCb29s
ZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmLCBjb25zdCBDT1JCQTo6U3RyaW5nU2Vx
KiYpOwoKaW5saW5lIHZvaWQKb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImIGFueSwgQ09SQkE6
OlN0cmluZ1NlcSogdmFsKQp7CiAgICBhbnkuaW5vdXQoKSA8PD0gdmFsOwp9CgppbmxpbmUgdm9p
ZApvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYW55LCBjb25zdCBDT1JCQTo6U3RyaW5nU2Vx
JiB2YWwpCnsKICAgIGFueS5pbm91dCgpIDw8PSB2YWw7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVh
bgpvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55X3ZhciYgYW55LCBjb25zdCBDT1JCQTo6U3Ry
aW5nU2VxKiYgdmFsKQp7CiAgICByZXR1cm4gYW55LmluKCkgPj49IHZhbDsKfQoKCgoKdm9pZCBv
cGVyYXRvcjw8PShDT1JCQTo6QW55JiwgQ09SQkE6OldTdHJpbmdTZXEqKTsKdm9pZCBvcGVyYXRv
cjw8PShDT1JCQTo6QW55JiwgY29uc3QgQ09SQkE6OldTdHJpbmdTZXEmKTsKQ09SQkE6OkJvb2xl
YW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYsIGNvbnN0IENPUkJBOjpXU3RyaW5nU2Vx
KiYpOwoKaW5saW5lIHZvaWQKb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImIGFueSwgQ09SQkE6
OldTdHJpbmdTZXEqIHZhbCkKewogICAgYW55Lmlub3V0KCkgPDw9IHZhbDsKfQoKaW5saW5lIHZv
aWQKb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImIGFueSwgY29uc3QgQ09SQkE6OldTdHJpbmdT
ZXEmIHZhbCkKewogICAgYW55Lmlub3V0KCkgPDw9IHZhbDsKfQoKaW5saW5lIENPUkJBOjpCb29s
ZWFuCm9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnlfdmFyJiBhbnksIGNvbnN0IENPUkJBOjpX
U3RyaW5nU2VxKiYgdmFsKQp7CiAgICByZXR1cm4gYW55LmluKCkgPj49IHZhbDsKfQoKCgoKdm9p
ZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgQ09SQkE6OlBhcmFtZXRlck1vZGUpOwpDT1JCQTo6
Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiwgQ09SQkE6OlBhcmFtZXRlck1v
ZGUmKTsKCmlubGluZSB2b2lkCm9wZXJhdG9yPDw9KENPUkJBOjpBbnlfdmFyJiBhbnksIENPUkJB
OjpQYXJhbWV0ZXJNb2RlIHZhbCkKewogICAgYW55Lmlub3V0KCkgPDw9IHZhbDsKfQoKaW5saW5l
IENPUkJBOjpCb29sZWFuCm9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnlfdmFyJiBhbnksIENP
UkJBOjpQYXJhbWV0ZXJNb2RlJiB2YWwpCnsKICAgIHJldHVybiBhbnkuaW4oKSA+Pj0gdmFsOwp9
CiMgMzAgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9PQ0lUeXBlcy5oIiAyCiMgNDEgIi9ob21l
L21hdHQvb2IvaW5jbHVkZS9PQi9PQ0lUeXBlcy5oIgpuYW1lc3BhY2UgT0NJCnsKCn0KCm5hbWVz
cGFjZSBPQ0kKewoKfQoKbmFtZXNwYWNlIE9CU3R1YkltcGxfT0NJCnsKCn0KCm5hbWVzcGFjZSBP
QlN0dWJJbXBsX09DSQp7Cgp9CgoKCgpuYW1lc3BhY2UgT0NJCnsKCgoKCnR5cGVkZWYgSU9QOjpJ
T1IgSU9SOwp0eXBlZGVmIElPUDo6SU9SX3ZhciBJT1JfdmFyOwp0eXBlZGVmIElPUDo6SU9SX291
dCBJT1Jfb3V0OwogICAgICAgICAgZXh0ZXJuIE9COjpUeXBlQ29kZUNvbnN0IF90Y19JT1I7CgoK
Cgp0eXBlZGVmIENPUkJBOjpVTG9uZyBQcm9maWxlSWQ7CnR5cGVkZWYgQ09SQkE6OlVMb25nX291
dCBQcm9maWxlSWRfb3V0OwogICAgICAgICAgZXh0ZXJuIE9COjpUeXBlQ29kZUNvbnN0IF90Y19Q
cm9maWxlSWQ7CgoKCgpjbGFzcyBPQlVuaXF1ZV9Qcm9maWxlSWRTZXEgeyB9OwoKdHlwZWRlZiBP
Qjo6Rml4U2VxPCBDT1JCQTo6VUxvbmcsIE9CVW5pcXVlX1Byb2ZpbGVJZFNlcSA+IFByb2ZpbGVJ
ZFNlcTsKdHlwZWRlZiBPQjo6U2VxVmFyPCBPQjo6Rml4U2VxPCBDT1JCQTo6VUxvbmcsIE9CVW5p
cXVlX1Byb2ZpbGVJZFNlcSA+ID4gUHJvZmlsZUlkU2VxX3ZhcjsKdHlwZWRlZiBPQjo6U2VxT3V0
PCBPQjo6Rml4U2VxPCBDT1JCQTo6VUxvbmcsIE9CVW5pcXVlX1Byb2ZpbGVJZFNlcSA+ID4gUHJv
ZmlsZUlkU2VxX291dDsKICAgICAgICAgIGV4dGVybiBPQjo6VHlwZUNvZGVDb25zdCBfdGNfUHJv
ZmlsZUlkU2VxOwoKc3RydWN0IE9CSW5mb19Qcm9maWxlSWRTZXEgOiBwdWJsaWMgT0I6OkNvbnN0
cnVjdGVkSW5mbwp7CiAgICBPQkluZm9fUHJvZmlsZUlkU2VxKCkgeyB9CgogICAgdmlydHVhbCB2
b2lkIGZyZWUodm9pZCogcCkgY29uc3QKICAgIHsKICAgICAgICBkZWxldGUgKFByb2ZpbGVJZFNl
cSopcDsKICAgIH0KCiAgICB2aXJ0dWFsIHZvaWQqIGR1cChjb25zdCB2b2lkKiBwKSBjb25zdAog
ICAgewogICAgICAgIHJldHVybiBuZXcgUHJvZmlsZUlkU2VxKCooY29uc3QgUHJvZmlsZUlkU2Vx
KilwKTsKICAgIH0KCiAgICB2aXJ0dWFsIHZvaWQgbWFyc2hhbChjb25zdCB2b2lkKiwgT0I6Ok91
dHB1dFN0cmVhbUltcGwqKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCB1bm1hcnNoYWwodm9pZCos
IE9COjpJbnB1dFN0cmVhbUltcGwqKSBjb25zdDsKfTsKCgoKCnR5cGVkZWYgT0I6OkZpeFNlcTwg
Q09SQkE6Ok9jdGV0LCBDT1JCQTo6T0JVbmlxdWVfT2N0ZXRTZXEgPiBPYmplY3RLZXk7CnR5cGVk
ZWYgT0I6OlNlcVZhcjwgT0I6OkZpeFNlcTwgQ09SQkE6Ok9jdGV0LCBDT1JCQTo6T0JVbmlxdWVf
T2N0ZXRTZXEgPiA+IE9iamVjdEtleV92YXI7CnR5cGVkZWYgT0I6OlNlcU91dDwgT0I6OkZpeFNl
cTwgQ09SQkE6Ok9jdGV0LCBDT1JCQTo6T0JVbmlxdWVfT2N0ZXRTZXEgPiA+IE9iamVjdEtleV9v
dXQ7CiAgICAgICAgICBleHRlcm4gT0I6OlR5cGVDb2RlQ29uc3QgX3RjX09iamVjdEtleTsKCnN0
cnVjdCBPQkluZm9fT2JqZWN0S2V5IDogcHVibGljIE9COjpDb25zdHJ1Y3RlZEluZm8KewogICAg
T0JJbmZvX09iamVjdEtleSgpIHsgfQoKICAgIHZpcnR1YWwgdm9pZCBmcmVlKHZvaWQqIHApIGNv
bnN0CiAgICB7CiAgICAgICAgZGVsZXRlIChPYmplY3RLZXkqKXA7CiAgICB9CgogICAgdmlydHVh
bCB2b2lkKiBkdXAoY29uc3Qgdm9pZCogcCkgY29uc3QKICAgIHsKICAgICAgICByZXR1cm4gbmV3
IE9iamVjdEtleSgqKGNvbnN0IE9iamVjdEtleSopcCk7CiAgICB9CgogICAgdmlydHVhbCB2b2lk
IG1hcnNoYWwoY29uc3Qgdm9pZCosIE9COjpPdXRwdXRTdHJlYW1JbXBsKikgY29uc3Q7CiAgICB2
aXJ0dWFsIHZvaWQgdW5tYXJzaGFsKHZvaWQqLCBPQjo6SW5wdXRTdHJlYW1JbXBsKikgY29uc3Q7
Cn07CgoKCgp0eXBlZGVmIE9COjpWYXJTZXE8IElPUDo6VGFnZ2VkQ29tcG9uZW50LCBJT1A6Ok9C
VW5pcXVlX1RhZ2dlZENvbXBvbmVudFNlcSA+IFRhZ2dlZENvbXBvbmVudFNlcTsKdHlwZWRlZiBP
Qjo6U2VxVmFyPCBPQjo6VmFyU2VxPCBJT1A6OlRhZ2dlZENvbXBvbmVudCwgSU9QOjpPQlVuaXF1
ZV9UYWdnZWRDb21wb25lbnRTZXEgPiA+IFRhZ2dlZENvbXBvbmVudFNlcV92YXI7CnR5cGVkZWYg
T0I6OlNlcU91dDwgT0I6OlZhclNlcTwgSU9QOjpUYWdnZWRDb21wb25lbnQsIElPUDo6T0JVbmlx
dWVfVGFnZ2VkQ29tcG9uZW50U2VxID4gPiBUYWdnZWRDb21wb25lbnRTZXFfb3V0OwogICAgICAg
ICAgZXh0ZXJuIE9COjpUeXBlQ29kZUNvbnN0IF90Y19UYWdnZWRDb21wb25lbnRTZXE7CgpzdHJ1
Y3QgT0JJbmZvX1RhZ2dlZENvbXBvbmVudFNlcSA6IHB1YmxpYyBPQjo6Q29uc3RydWN0ZWRJbmZv
CnsKICAgIE9CSW5mb19UYWdnZWRDb21wb25lbnRTZXEoKSB7IH0KCiAgICB2aXJ0dWFsIHZvaWQg
ZnJlZSh2b2lkKiBwKSBjb25zdAogICAgewogICAgICAgIGRlbGV0ZSAoVGFnZ2VkQ29tcG9uZW50
U2VxKilwOwogICAgfQoKICAgIHZpcnR1YWwgdm9pZCogZHVwKGNvbnN0IHZvaWQqIHApIGNvbnN0
CiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBUYWdnZWRDb21wb25lbnRTZXEoKihjb25zdCBUYWdn
ZWRDb21wb25lbnRTZXEqKXApOwogICAgfQoKICAgIHZpcnR1YWwgdm9pZCBtYXJzaGFsKGNvbnN0
IHZvaWQqLCBPQjo6T3V0cHV0U3RyZWFtSW1wbCopIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHVu
bWFyc2hhbCh2b2lkKiwgT0I6OklucHV0U3RyZWFtSW1wbCopIGNvbnN0Owp9OwoKCgoKdHlwZWRl
ZiBDT1JCQTo6TG9uZyBIYW5kbGU7CnR5cGVkZWYgQ09SQkE6Okxvbmdfb3V0IEhhbmRsZV9vdXQ7
CiAgICAgICAgICBleHRlcm4gT0I6OlR5cGVDb2RlQ29uc3QgX3RjX0hhbmRsZTsKCgoKCnR5cGVk
ZWYgQ09SQkE6OlVMb25nIFByb3RvY29sSWQ7CnR5cGVkZWYgQ09SQkE6OlVMb25nX291dCBQcm90
b2NvbElkX291dDsKICAgICAgICAgIGV4dGVybiBPQjo6VHlwZUNvZGVDb25zdCBfdGNfUHJvdG9j
b2xJZDsKCgoKCnN0cnVjdCBQcm9maWxlSW5mbzsKdHlwZWRlZiBPQjo6VmFyVmFyPCBQcm9maWxl
SW5mbyA+IFByb2ZpbGVJbmZvX3ZhcjsKdHlwZWRlZiBPQjo6VmFyT3V0PCBQcm9maWxlSW5mbyA+
IFByb2ZpbGVJbmZvX291dDsKCnN0cnVjdCBQcm9maWxlSW5mbwp7CgoKCiAgICBQcm9maWxlSW5m
bygpIHsgfQoKICAgIFByb2ZpbGVJbmZvKGNvbnN0IFByb2ZpbGVJbmZvJik7CiAgICBQcm9maWxl
SW5mbyYgb3BlcmF0b3I9KGNvbnN0IFByb2ZpbGVJbmZvJik7CgogICAgdHlwZWRlZiBQcm9maWxl
SW5mb192YXIgX3Zhcl90eXBlOwoKICAgIE9iamVjdEtleSBrZXk7CiAgICBDT1JCQTo6T2N0ZXQg
bWFqb3I7CiAgICBDT1JCQTo6T2N0ZXQgbWlub3I7CiAgICBQcm9maWxlSWQgaWQ7CiAgICBDT1JC
QTo6VUxvbmcgaW5kZXg7CiAgICBUYWdnZWRDb21wb25lbnRTZXEgY29tcG9uZW50czsKCiAgICB2
b2lkIF9PQl9tYXJzaGFsKE9COjpPdXRwdXRTdHJlYW1JbXBsKikgY29uc3Q7CiAgICBzdGF0aWMg
dm9pZCBfT0JfdW5tYXJzaGFsKFByb2ZpbGVJbmZvJiwgT0I6OklucHV0U3RyZWFtSW1wbCopOwp9
OwoKICAgICAgICAgIGV4dGVybiBPQjo6VHlwZUNvZGVDb25zdCBfdGNfUHJvZmlsZUluZm87CgoK
CgpjbGFzcyBPQlVuaXF1ZV9Qcm9maWxlSW5mb1NlcSB7IH07Cgp0eXBlZGVmIE9COjpWYXJTZXE8
IFByb2ZpbGVJbmZvLCBPQlVuaXF1ZV9Qcm9maWxlSW5mb1NlcSA+IFByb2ZpbGVJbmZvU2VxOwp0
eXBlZGVmIE9COjpTZXFWYXI8IE9COjpWYXJTZXE8IFByb2ZpbGVJbmZvLCBPQlVuaXF1ZV9Qcm9m
aWxlSW5mb1NlcSA+ID4gUHJvZmlsZUluZm9TZXFfdmFyOwp0eXBlZGVmIE9COjpTZXFPdXQ8IE9C
OjpWYXJTZXE8IFByb2ZpbGVJbmZvLCBPQlVuaXF1ZV9Qcm9maWxlSW5mb1NlcSA+ID4gUHJvZmls
ZUluZm9TZXFfb3V0OwogICAgICAgICAgZXh0ZXJuIE9COjpUeXBlQ29kZUNvbnN0IF90Y19Qcm9m
aWxlSW5mb1NlcTsKCnN0cnVjdCBPQkluZm9fUHJvZmlsZUluZm9TZXEgOiBwdWJsaWMgT0I6OkNv
bnN0cnVjdGVkSW5mbwp7CiAgICBPQkluZm9fUHJvZmlsZUluZm9TZXEoKSB7IH0KCiAgICB2aXJ0
dWFsIHZvaWQgZnJlZSh2b2lkKiBwKSBjb25zdAogICAgewogICAgICAgIGRlbGV0ZSAoUHJvZmls
ZUluZm9TZXEqKXA7CiAgICB9CgogICAgdmlydHVhbCB2b2lkKiBkdXAoY29uc3Qgdm9pZCogcCkg
Y29uc3QKICAgIHsKICAgICAgICByZXR1cm4gbmV3IFByb2ZpbGVJbmZvU2VxKCooY29uc3QgUHJv
ZmlsZUluZm9TZXEqKXApOwogICAgfQoKICAgIHZpcnR1YWwgdm9pZCBtYXJzaGFsKGNvbnN0IHZv
aWQqLCBPQjo6T3V0cHV0U3RyZWFtSW1wbCopIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHVubWFy
c2hhbCh2b2lkKiwgT0I6OklucHV0U3RyZWFtSW1wbCopIGNvbnN0Owp9OwoKCgoKc3RydWN0IFBh
cmFtOwp0eXBlZGVmIE9COjpWYXJWYXI8IFBhcmFtID4gUGFyYW1fdmFyOwp0eXBlZGVmIE9COjpW
YXJPdXQ8IFBhcmFtID4gUGFyYW1fb3V0OwoKc3RydWN0IFBhcmFtCnsKICAgIFBhcmFtKCkgeyB9
CiAgICBQYXJhbShjb25zdCBQYXJhbSYpOwogICAgUGFyYW0mIG9wZXJhdG9yPShjb25zdCBQYXJh
bSYpOwoKICAgIHR5cGVkZWYgUGFyYW1fdmFyIF92YXJfdHlwZTsKCiAgICBPQjo6U3RyRm9yU3Ry
dWN0IG5hbWU7CiAgICBDT1JCQTo6QW55IHZhbHVlOwoKICAgIHZvaWQgX09CX21hcnNoYWwoT0I6
Ok91dHB1dFN0cmVhbUltcGwqKSBjb25zdDsKICAgIHN0YXRpYyB2b2lkIF9PQl91bm1hcnNoYWwo
UGFyYW0mLCBPQjo6SW5wdXRTdHJlYW1JbXBsKik7Cn07CgogICAgICAgICAgZXh0ZXJuIE9COjpU
eXBlQ29kZUNvbnN0IF90Y19QYXJhbTsKCgoKCmNsYXNzIE9CVW5pcXVlX1BhcmFtU2VxIHsgfTsK
CnR5cGVkZWYgT0I6OlZhclNlcTwgUGFyYW0sIE9CVW5pcXVlX1BhcmFtU2VxID4gUGFyYW1TZXE7
CnR5cGVkZWYgT0I6OlNlcVZhcjwgT0I6OlZhclNlcTwgUGFyYW0sIE9CVW5pcXVlX1BhcmFtU2Vx
ID4gPiBQYXJhbVNlcV92YXI7CnR5cGVkZWYgT0I6OlNlcU91dDwgT0I6OlZhclNlcTwgUGFyYW0s
IE9CVW5pcXVlX1BhcmFtU2VxID4gPiBQYXJhbVNlcV9vdXQ7CiAgICAgICAgICBleHRlcm4gT0I6
OlR5cGVDb2RlQ29uc3QgX3RjX1BhcmFtU2VxOwoKc3RydWN0IE9CSW5mb19QYXJhbVNlcSA6IHB1
YmxpYyBPQjo6Q29uc3RydWN0ZWRJbmZvCnsKICAgIE9CSW5mb19QYXJhbVNlcSgpIHsgfQoKICAg
IHZpcnR1YWwgdm9pZCBmcmVlKHZvaWQqIHApIGNvbnN0CiAgICB7CiAgICAgICAgZGVsZXRlIChQ
YXJhbVNlcSopcDsKICAgIH0KCiAgICB2aXJ0dWFsIHZvaWQqIGR1cChjb25zdCB2b2lkKiBwKSBj
b25zdAogICAgewogICAgICAgIHJldHVybiBuZXcgUGFyYW1TZXEoKihjb25zdCBQYXJhbVNlcSop
cCk7CiAgICB9CgogICAgdmlydHVhbCB2b2lkIG1hcnNoYWwoY29uc3Qgdm9pZCosIE9COjpPdXRw
dXRTdHJlYW1JbXBsKikgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgdW5tYXJzaGFsKHZvaWQqLCBP
Qjo6SW5wdXRTdHJlYW1JbXBsKikgY29uc3Q7Cn07Cgp9CgoKCgpuYW1lc3BhY2UgT0JTdHViSW1w
bF9PQ0kKewoKfQoKCgoKbmFtZXNwYWNlIE9CTWFyc2hhbFN0dWJJbXBsX09DSQp7Cgp9CgoKCgpu
YW1lc3BhY2UgT0JWX09DSQp7Cgp9CgoKCgp2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBP
Q0k6OlByb2ZpbGVJZFNlcSopOwp2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBP
Q0k6OlByb2ZpbGVJZFNlcSYpOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JC
QTo6QW55JiwgY29uc3QgT0NJOjpQcm9maWxlSWRTZXEqJik7CgppbmxpbmUgdm9pZApvcGVyYXRv
cjw8PShDT1JCQTo6QW55X3ZhciYgYW55LCBPQ0k6OlByb2ZpbGVJZFNlcSogdmFsKQp7CiAgICBh
bnkuaW5vdXQoKSA8PD0gdmFsOwp9CgppbmxpbmUgdm9pZApvcGVyYXRvcjw8PShDT1JCQTo6QW55
X3ZhciYgYW55LCBjb25zdCBPQ0k6OlByb2ZpbGVJZFNlcSYgdmFsKQp7CiAgICBhbnkuaW5vdXQo
KSA8PD0gdmFsOwp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4Kb3BlcmF0b3I+Pj0oY29uc3QgQ09S
QkE6OkFueV92YXImIGFueSwgY29uc3QgT0NJOjpQcm9maWxlSWRTZXEqJiB2YWwpCnsKICAgIHJl
dHVybiBhbnkuaW4oKSA+Pj0gdmFsOwp9CgoKCgp2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkm
LCBPQ0k6OlByb2ZpbGVJbmZvKik7CnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0
IE9DSTo6UHJvZmlsZUluZm8mKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09S
QkE6OkFueSYsIGNvbnN0IE9DSTo6UHJvZmlsZUluZm8qJik7CgppbmxpbmUgdm9pZApvcGVyYXRv
cjw8PShDT1JCQTo6QW55X3ZhciYgYW55LCBPQ0k6OlByb2ZpbGVJbmZvKiB2YWwpCnsKICAgIGFu
eS5pbm91dCgpIDw8PSB2YWw7Cn0KCmlubGluZSB2b2lkCm9wZXJhdG9yPDw9KENPUkJBOjpBbnlf
dmFyJiBhbnksIGNvbnN0IE9DSTo6UHJvZmlsZUluZm8mIHZhbCkKewogICAgYW55Lmlub3V0KCkg
PDw9IHZhbDsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuCm9wZXJhdG9yPj49KGNvbnN0IENPUkJB
OjpBbnlfdmFyJiBhbnksIGNvbnN0IE9DSTo6UHJvZmlsZUluZm8qJiB2YWwpCnsKICAgIHJldHVy
biBhbnkuaW4oKSA+Pj0gdmFsOwp9CgoKCgp2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBP
Q0k6OlByb2ZpbGVJbmZvU2VxKik7CnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0
IE9DSTo6UHJvZmlsZUluZm9TZXEmKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3Qg
Q09SQkE6OkFueSYsIGNvbnN0IE9DSTo6UHJvZmlsZUluZm9TZXEqJik7CgppbmxpbmUgdm9pZApv
cGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYW55LCBPQ0k6OlByb2ZpbGVJbmZvU2VxKiB2YWwp
CnsKICAgIGFueS5pbm91dCgpIDw8PSB2YWw7Cn0KCmlubGluZSB2b2lkCm9wZXJhdG9yPDw9KENP
UkJBOjpBbnlfdmFyJiBhbnksIGNvbnN0IE9DSTo6UHJvZmlsZUluZm9TZXEmIHZhbCkKewogICAg
YW55Lmlub3V0KCkgPDw9IHZhbDsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuCm9wZXJhdG9yPj49
KGNvbnN0IENPUkJBOjpBbnlfdmFyJiBhbnksIGNvbnN0IE9DSTo6UHJvZmlsZUluZm9TZXEqJiB2
YWwpCnsKICAgIHJldHVybiBhbnkuaW4oKSA+Pj0gdmFsOwp9CgoKCgp2b2lkIG9wZXJhdG9yPDw9
KENPUkJBOjpBbnkmLCBPQ0k6OlBhcmFtKik7CnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYs
IGNvbnN0IE9DSTo6UGFyYW0mKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09S
QkE6OkFueSYsIGNvbnN0IE9DSTo6UGFyYW0qJik7CgppbmxpbmUgdm9pZApvcGVyYXRvcjw8PShD
T1JCQTo6QW55X3ZhciYgYW55LCBPQ0k6OlBhcmFtKiB2YWwpCnsKICAgIGFueS5pbm91dCgpIDw8
PSB2YWw7Cn0KCmlubGluZSB2b2lkCm9wZXJhdG9yPDw9KENPUkJBOjpBbnlfdmFyJiBhbnksIGNv
bnN0IE9DSTo6UGFyYW0mIHZhbCkKewogICAgYW55Lmlub3V0KCkgPDw9IHZhbDsKfQoKaW5saW5l
IENPUkJBOjpCb29sZWFuCm9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnlfdmFyJiBhbnksIGNv
bnN0IE9DSTo6UGFyYW0qJiB2YWwpCnsKICAgIHJldHVybiBhbnkuaW4oKSA+Pj0gdmFsOwp9CgoK
Cgp2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBPQ0k6OlBhcmFtU2VxKik7CnZvaWQgb3Bl
cmF0b3I8PD0oQ09SQkE6OkFueSYsIGNvbnN0IE9DSTo6UGFyYW1TZXEmKTsKQ09SQkE6OkJvb2xl
YW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYsIGNvbnN0IE9DSTo6UGFyYW1TZXEqJik7
CgppbmxpbmUgdm9pZApvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYW55LCBPQ0k6OlBhcmFt
U2VxKiB2YWwpCnsKICAgIGFueS5pbm91dCgpIDw8PSB2YWw7Cn0KCmlubGluZSB2b2lkCm9wZXJh
dG9yPDw9KENPUkJBOjpBbnlfdmFyJiBhbnksIGNvbnN0IE9DSTo6UGFyYW1TZXEmIHZhbCkKewog
ICAgYW55Lmlub3V0KCkgPDw9IHZhbDsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuCm9wZXJhdG9y
Pj49KGNvbnN0IENPUkJBOjpBbnlfdmFyJiBhbnksIGNvbnN0IE9DSTo6UGFyYW1TZXEqJiB2YWwp
CnsKICAgIHJldHVybiBhbnkuaW4oKSA+Pj0gdmFsOwp9CiMgMzIgIi9ob21lL21hdHQvb2IvaW5j
bHVkZS9PQi9PYmplY3QuaCIgMgoKbmFtZXNwYWNlIENPUkJBCnsKCgoKCmNsYXNzIE9CVW5pcXVl
X1BvbGljeUxpc3Q7CnR5cGVkZWYgT0I6Ok9ialNlcTwgUG9saWN5LCBPQlVuaXF1ZV9Qb2xpY3lM
aXN0ID4gUG9saWN5TGlzdDsKCgoKCnR5cGVkZWYgVUxvbmcgUG9saWN5VHlwZTsKdHlwZWRlZiBV
TG9uZ19vdXQgUG9saWN5VHlwZV9vdXQ7CgoKCgpjbGFzcyBPQlVuaXF1ZV9Qb2xpY3lUeXBlU2Vx
Owp0eXBlZGVmIE9COjpGaXhTZXE8IENPUkJBOjpVTG9uZywgT0JVbmlxdWVfUG9saWN5VHlwZVNl
cSA+IFBvbGljeVR5cGVTZXE7CgoKCgplbnVtIFNldE92ZXJyaWRlVHlwZQp7CiAgICBTRVRfT1ZF
UlJJREUsCiAgICBBRERfT1ZFUlJJREUKfTsKCn0KCm5hbWVzcGFjZSBDT1JCQQp7CgoKCgpjbGFz
cyBPYmplY3QgOiBwdWJsaWMgT0I6OlJlZkNvdW50CnsKCgoKICAgIE9iamVjdChjb25zdCBPYmpl
Y3QmKTsKICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IE9iamVjdCYpOwoKCgoKCiAgICBzdGF0aWMg
Y29uc3QgY2hhciogaWRzX1tdOwojIDk3ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvT2JqZWN0
LmgiCiAgICBPQjo6T1JCSW5zdGFuY2VfdmFyIG9yYkluc3RhbmNlXzsKCgoKCiAgICBPQjo6UmVm
Q291bnRJT1JfdmFyIElPUl87CiAgICBPQjo6UmVmQ291bnRJT1JfdmFyIG9yaWdJT1JfOwoKCgoK
ICAgIE9COjpSZWZDb3VudFBvbGljeUxpc3RfdmFyIHBvbGljaWVzXzsKCgoKCiAgICBPQjo6U3R1
YkltcGxCYXNlX3ZhciBzdHViSW1wbF87CgoKCgogICAgdm9pZCBjaGVja1JldHJ5KGJvb2wsIGNv
bnN0IENPUkJBOjpTeXN0ZW1FeGNlcHRpb24mKTsKCnByb3RlY3RlZDoKCgoKCiAgICBPQjo6U3R1
YkltcGxCYXNlX3B0ciBfT0JfZ2V0U3R1YkltcGwoKTsKICAgIE9COjpNYXJzaGFsU3R1YkltcGxf
cHRyIF9PQl9nZXRNYXJzaGFsU3R1YkltcGwoKTsKCgoKCgoKICAgIHZpcnR1YWwgT0I6Ok1hcnNo
YWxTdHViSW1wbF9wdHIgX09CX2NyZWF0ZU1hcnNoYWxTdHViSW1wbCgpOwoKCgoKICAgIE9iamVj
dCgpOwoKCgoKICAgIGZyaWVuZCBjbGFzcyA6Ok9COjpPYmplY3RGYWN0b3J5OwoKCgoKICAgIGZy
aWVuZCBjbGFzcyBSZXF1ZXN0OwoKcHVibGljOgoKICAgIHZpcnR1YWwgfk9iamVjdCgpOwoKCgoK
ICAgIHN0YXRpYyBpbmxpbmUgT2JqZWN0X3B0ciBfZHVwbGljYXRlKE9iamVjdF9wdHIgcCkKICAg
IHsgaWYocCkgcCAtPiBfT0JfaW5jUmVmKCk7IHJldHVybiBwOyB9CiAgICBzdGF0aWMgaW5saW5l
IE9iamVjdF9wdHIgX25pbCgpCiAgICB7IHJldHVybiAwOyB9CgogICAgSW50ZXJmYWNlRGVmX3B0
ciBfZ2V0X2ludGVyZmFjZSgpOwogICAgQm9vbGVhbiBfaXNfYShjb25zdCBjaGFyKik7CiAgICBC
b29sZWFuIF9ub25fZXhpc3RlbnQoKTsKCiAgICBCb29sZWFuIF9pc19lcXVpdmFsZW50KE9iamVj
dF9wdHIpOwogICAgVUxvbmcgX2hhc2goVUxvbmcpOwoKICAgIHN0YXRpYyBPYmplY3RfcHRyIF9u
YXJyb3coQWJzdHJhY3RCYXNlX3B0cik7CgogICAgdm9pZCBfY3JlYXRlX3JlcXVlc3QoQ29udGV4
dF9wdHIsIGNvbnN0IGNoYXIqLCBOVkxpc3RfcHRyLCBOYW1lZFZhbHVlX3B0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgIFJlcXVlc3Rfb3V0LCBGbGFncyk7CgogICAgdm9pZCBfY3JlYXRlX3Jl
cXVlc3QoQ29udGV4dF9wdHIsIGNvbnN0IGNoYXIqLCBOVkxpc3RfcHRyLCBOYW1lZFZhbHVlX3B0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkxpc3RfcHRyLCBDb250ZXh0TGlz
dF9wdHIsIFJlcXVlc3Rfb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgRmxhZ3MpOwoKICAg
IFJlcXVlc3RfcHRyIF9yZXF1ZXN0KGNvbnN0IGNoYXIqIG9wZXJhdGlvbik7CgogICAgUG9saWN5
X3B0ciBfZ2V0X3BvbGljeShQb2xpY3lUeXBlKTsKICAgIE9iamVjdF9wdHIgX3NldF9wb2xpY3lf
b3ZlcnJpZGVzKGNvbnN0IFBvbGljeUxpc3QmLCBTZXRPdmVycmlkZVR5cGUpOwoKCgoKCiAgICBQ
b2xpY3lfcHRyIF9nZXRfZWZmZWN0aXZlX3BvbGljeV9vdmVycmlkZShQb2xpY3lUeXBlKTsKICAg
IFBvbGljeUxpc3QqIF9nZXRfcG9saWN5X292ZXJyaWRlcyhjb25zdCBQb2xpY3lUeXBlU2VxJik7
CiAgICBCb29sZWFuIF92YWxpZGF0ZV9wb2xpY2llcyhjb25zdCBQb2xpY3lMaXN0Jik7CgoKCgog
ICAgT0NJOjpDb25uZWN0b3JJbmZvX3B0ciBfZ2V0X29jaV9jb25uZWN0b3JfaW5mbygpOwogICAg
T0NJOjpUcmFuc3BvcnRJbmZvX3B0ciBfZ2V0X29jaV90cmFuc3BvcnRfaW5mbygpOwoKCgoKCiAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqKiBfT0JfaWRzKCkgY29uc3Q7CiAgICBzdGF0aWMgY29uc3Qg
Y2hhcioqIF9PQl9zdGF0aWNJZHMoKTsKCiAgICB2b2lkIF9PQl9zZXR1cChPQjo6T1JCSW5zdGFu
Y2VfcHRyLCBPQjo6UmVmQ291bnRJT1JfcHRyLAogICAgICAgICAgICAgICAgICAgT0I6OlJlZkNv
dW50UG9saWN5TGlzdF9wdHIpOwogICAgdm9pZCBfT0JfY29weUZyb20oT2JqZWN0X3B0cik7Cgog
ICAgT0I6Ok9SQkluc3RhbmNlX3B0ciBfT0JfT1JCSW5zdGFuY2UoKSBjb25zdDsKICAgIE9COjpS
ZWZDb3VudElPUl9wdHIgX09CX0lPUigpIGNvbnN0OwogICAgT0I6OlJlZkNvdW50SU9SX3B0ciBf
T0Jfb3JpZ0lPUigpIGNvbnN0OwogICAgdm9pZCBfT0JfbWFyc2hhbE9yaWdJT1IoT0I6Ok91dHB1
dFN0cmVhbUltcGwqKSBjb25zdDsKICAgIE9COjpSZWZDb3VudFBvbGljeUxpc3RfcHRyIF9PQl9w
b2xpY2llcygpIGNvbnN0OwogICAgUG9saWN5X3B0ciBfT0JfZ2V0UG9saWN5KFBvbGljeVR5cGUg
cG9saWN5VHlwZSkgY29uc3Q7CgogICAgdm9pZCBfT0JfaGFuZGxlRXhjZXB0aW9uKGNvbnN0IE9C
OjpFeGNlcHRpb25CYXNlJiwgYm9vbCYpOwoKICAgIHZpcnR1YWwgYm9vbCBfT0JfaXNMQygpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CgogICAgdmlydHVhbCBBYnN0cmFjdEJhc2VfcHRyIF9PQl90
b0Fic3RyYWN0QmFzZSgpOwoKICAgIGZyaWVuZCBjbGFzcyBPQjo6SW5wdXRTdHJlYW07CiAgICBm
cmllbmQgY2xhc3MgT0I6Ok91dHB1dFN0cmVhbTsKfTsKCgoKCmlubGluZSB2b2lkCnJlbGVhc2Uo
T2JqZWN0X3B0ciBwKQp7CiAgICBpZihwKQogICAgICAgIHAgLT4gX09CX2RlY1JlZigpOwp9Cgpp
bmxpbmUgQm9vbGVhbgppc19uaWwoT2JqZWN0X3B0ciBwKQp7CiAgICByZXR1cm4gcCA9PSAwOwp9
Cgp9CgpuYW1lc3BhY2UgT0JDT1JCQQp7CgpjbGFzcyBPUkJfaW1wbDsKCn0KCm5hbWVzcGFjZSBP
Qgp7CgoKCgpjbGFzcyBPYmplY3RGYWN0b3J5IDogcHVibGljIFJlZkNvdW50CnsKCgoKICAgIE9i
amVjdEZhY3RvcnkoY29uc3QgT2JqZWN0RmFjdG9yeSYpOwogICAgdm9pZCBvcGVyYXRvcj0oY29u
c3QgT2JqZWN0RmFjdG9yeSYpOwoKICAgIGJvb2wgZGVzdHJveV87CiAgICBPUkJJbnN0YW5jZV92
YXIgb3JiSW5zdGFuY2VfOwogICAgQ09SQkE6OlBvbGljeU1hbmFnZXJfdmFyIHBvbGljeU1hbmFn
ZXJfOwoKICAgIE9iamVjdEZhY3RvcnkoKTsKICAgIH5PYmplY3RGYWN0b3J5KCk7CiAgICBmcmll
bmQgY2xhc3MgOjpPQkNPUkJBOjpPUkJfaW1wbDsKCnB1YmxpYzoKCiAgICBzdGF0aWMgaW5saW5l
IE9iamVjdEZhY3RvcnlfcHRyIF9kdXBsaWNhdGUoT2JqZWN0RmFjdG9yeV9wdHIgcCkKICAgIHsg
aWYocCkgcCAtPiBfT0JfaW5jUmVmKCk7IHJldHVybiBwOyB9CiAgICBzdGF0aWMgaW5saW5lIE9i
amVjdEZhY3RvcnlfcHRyIF9uaWwoKQogICAgeyByZXR1cm4gMDsgfQoKCgoKICAgIHZvaWQgZGVz
dHJveSgpOwoKCgoKICAgIHZvaWQgc2V0T1JCSW5zdGFuY2UoT1JCSW5zdGFuY2VfcHRyKTsKCgoK
CiAgICB2b2lkIHNldFBvbGljeU1hbmFnZXIoQ09SQkE6OlBvbGljeU1hbmFnZXJfcHRyKTsKCgoK
CiAgICBDT1JCQTo6T2JqZWN0X3B0ciBjcmVhdGVPYmplY3QoT0I6OlJlZkNvdW50SU9SX3B0cik7
CgoKCgogICAgQ09SQkE6Ok9iamVjdF9wdHIgc3RyaW5nVG9PYmplY3QoY29uc3QgY2hhciopOwoK
CgoKICAgIE9COjpSZWZDb3VudFBvbGljeUxpc3RfcHRyIHBvbGljaWVzKCk7Cn07Cgp9CgpuYW1l
c3BhY2UgQ09SQkEKewoKaW5saW5lIHZvaWQKcmVsZWFzZShPQjo6T2JqZWN0RmFjdG9yeV9wdHIg
cCkKewogICAgaWYocCkKICAgICAgICBwIC0+IF9PQl9kZWNSZWYoKTsKfQoKaW5saW5lIEJvb2xl
YW4KaXNfbmlsKE9COjpPYmplY3RGYWN0b3J5X3B0ciBwKQp7CiAgICByZXR1cm4gcCA9PSAwOwp9
Cgp9CiMgMTkgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9NYXJzaGFsU3R1YkltcGwuaCIgMgoj
IDEgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9TdHViSW1wbC5oIiAxCiMgMTQgIi9ob21lL21h
dHQvb2IvaW5jbHVkZS9PQi9TdHViSW1wbC5oIgojIDEgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9P
Qi9UeXBlQ29kZUNvbnN0LmgiIDEKIyAxNSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1N0dWJJ
bXBsLmgiIDIKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvU3R1YkltcGxfZndkLmgiIDEK
IyAxNiAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1N0dWJJbXBsLmgiIDIKIyAxICIvaG9tZS9t
YXR0L29iL2luY2x1ZGUvT0IvUmVmQ291bnRlZF9md2QuaCIgMQojIDE3ICIvaG9tZS9tYXR0L29i
L2luY2x1ZGUvT0IvU3R1YkltcGwuaCIgMgojIDEgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9J
RlIyX2Z3ZC5oIiAxCiMgMTggIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9TdHViSW1wbC5oIiAy
CiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL09DSV9md2QuaCIgMQojIDE5ICIvaG9tZS9t
YXR0L29iL2luY2x1ZGUvT0IvU3R1YkltcGwuaCIgMgoKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1
ZGUvT0IvRXhjZXB0LmgiIDEKIyAyMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1N0dWJJbXBs
LmgiIDIKCm5hbWVzcGFjZSBPQgp7CgoKCgpjbGFzcyBTdHViSW1wbEJhc2UgOiBwdWJsaWMgUmVm
Q291bnQKewoKCgogICAgU3R1YkltcGxCYXNlKGNvbnN0IFN0dWJJbXBsQmFzZSYpOwogICAgdm9p
ZCBvcGVyYXRvcj0oY29uc3QgU3R1YkltcGxCYXNlJik7CgpwdWJsaWM6CgogICAgU3R1YkltcGxC
YXNlKCkgeyB9CiAgICB2aXJ0dWFsIH5TdHViSW1wbEJhc2UoKSB7IH0KCiAgICBzdGF0aWMgaW5s
aW5lIFN0dWJJbXBsQmFzZV9wdHIgX2R1cGxpY2F0ZShTdHViSW1wbEJhc2VfcHRyIHApCiAgICB7
IGlmKHApIHAgLT4gX09CX2luY1JlZigpOyByZXR1cm4gcDsgfQogICAgc3RhdGljIGlubGluZSBT
dHViSW1wbEJhc2VfcHRyIF9uaWwoKQogICAgeyByZXR1cm4gMDsgfQoKICAgIHZpcnR1YWwgQ09S
QkE6OkludGVyZmFjZURlZl9wdHIgX2dldF9pbnRlcmZhY2UoKSA9IDA7CiAgICB2aXJ0dWFsIENP
UkJBOjpCb29sZWFuIF9pc19hKGNvbnN0IGNoYXIqKSA9IDA7CiAgICB2aXJ0dWFsIENPUkJBOjpC
b29sZWFuIF9ub25fZXhpc3RlbnQoKSA9IDA7CgogICAgdmlydHVhbCBPQ0k6OkNvbm5lY3Rvcklu
Zm9fcHRyIF9nZXRfb2NpX2Nvbm5lY3Rvcl9pbmZvKCkgPSAwOwogICAgdmlydHVhbCBPQ0k6OlRy
YW5zcG9ydEluZm9fcHRyIF9nZXRfb2NpX3RyYW5zcG9ydF9pbmZvKCkgPSAwOwp9OwoKfQoKbmFt
ZXNwYWNlIENPUkJBCnsKCmlubGluZSB2b2lkCnJlbGVhc2UoT0I6OlN0dWJJbXBsQmFzZV9wdHIg
cCkKewogICAgaWYocCkKICAgICAgICBwIC0+IF9PQl9kZWNSZWYoKTsKfQoKaW5saW5lIEJvb2xl
YW4KaXNfbmlsKE9COjpTdHViSW1wbEJhc2VfcHRyIHApCnsKICAgIHJldHVybiBwID09IDA7Cn0K
Cn0KIyAyMCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL01hcnNoYWxTdHViSW1wbC5oIiAyCiMg
MSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL2xpc3QuaCIgMQojIDIyICIvaG9tZS9tYXR0L29i
L2luY2x1ZGUvT0IvbGlzdC5oIgojIDEgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9TVExDb25m
aWcuaCIgMQojIDIzICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvbGlzdC5oIiAyCgojIDEgIi9o
b21lL21hdHQvb2IvaW5jbHVkZS9PQi9hbGxvY2F0b3IuaCIgMQojIDE1ICIvaG9tZS9tYXR0L29i
L2luY2x1ZGUvT0IvYWxsb2NhdG9yLmgiCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhh
dC1saW51eC8yLjk2L2luY2x1ZGUvbmV3LmgiIDEgMwojIDMzICIvdXNyL2xpYi9nY2MtbGliL2kz
ODYtcmVkaGF0LWxpbnV4LzIuOTYvaW5jbHVkZS9uZXcuaCIgMwojIDEgIi91c3IvbGliL2djYy1s
aWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL25ldyIgMSAzCiMgMzMgIi91c3IvbGli
L2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL25ldyIgMwojcHJhZ21hIGlu
dGVyZmFjZSAibmV3IgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45
Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAxNDcgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRo
YXQtbGludXgvMi45Ni9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgaW50IHB0cmRpZmZfdDsK
IyAzNSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8yLjk2L2luY2x1ZGUvbmV3
IiAyIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzIuOTYvaW5jbHVk
ZS9leGNlcHRpb24iIDEgMwojIDMzICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxpbnV4
LzIuOTYvaW5jbHVkZS9leGNlcHRpb24iIDMKI3ByYWdtYSBpbnRlcmZhY2UgImV4Y2VwdGlvbiIK
CmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkIHsKCmNsYXNzIGV4Y2VwdGlvbiB7CnB1Ymxp
YzoKICBleGNlcHRpb24gKCkgeyB9CiAgdmlydHVhbCB+ZXhjZXB0aW9uICgpIHsgfQogIHZpcnR1
YWwgY29uc3QgY2hhciogd2hhdCAoKSBjb25zdDsKfTsKCmNsYXNzIGJhZF9leGNlcHRpb24gOiBw
dWJsaWMgZXhjZXB0aW9uIHsKcHVibGljOgogIGJhZF9leGNlcHRpb24gKCkgeyB9CiAgdmlydHVh
bCB+YmFkX2V4Y2VwdGlvbiAoKSB7IH0KfTsKCnR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5k
bGVyKSAoKTsKdHlwZWRlZiB2b2lkICgqdW5leHBlY3RlZF9oYW5kbGVyKSAoKTsKCnRlcm1pbmF0
ZV9oYW5kbGVyIHNldF90ZXJtaW5hdGUgKHRlcm1pbmF0ZV9oYW5kbGVyKTsKdm9pZCB0ZXJtaW5h
dGUgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwp1bmV4cGVjdGVkX2hhbmRsZXIg
c2V0X3VuZXhwZWN0ZWQgKHVuZXhwZWN0ZWRfaGFuZGxlcik7CnZvaWQgdW5leHBlY3RlZCAoKSBf
X2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CmJvb2wgdW5jYXVnaHRfZXhjZXB0aW9uICgp
OwoKfQoKfQojIDM2ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzIuOTYvaW5j
bHVkZS9uZXciIDIgMwoKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQgewoKICBjbGFzcyBi
YWRfYWxsb2MgOiBwdWJsaWMgZXhjZXB0aW9uIHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIHdoYXQoKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuICJiYWRfYWxsb2MiOyB9CiAgfTsK
CiAgc3RydWN0IG5vdGhyb3dfdCB7fTsKICBleHRlcm4gY29uc3Qgbm90aHJvd190IG5vdGhyb3c7
CiAgdHlwZWRlZiB2b2lkICgqbmV3X2hhbmRsZXIpKCk7CiAgbmV3X2hhbmRsZXIgc2V0X25ld19o
YW5kbGVyIChuZXdfaGFuZGxlcik7Cgp9CgoKdm9pZCAqb3BlcmF0b3IgbmV3IChzaXplX3QpIHRo
cm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQgKm9wZXJhdG9yIG5ld1tdIChzaXplX3QpIHRocm93
IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlICh2b2lkICopIHRocm93KCk7
CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10gKHZvaWQgKikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3Ig
bmV3IChzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCAqb3BlcmF0
b3IgbmV3W10gKHNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9w
ZXJhdG9yIGRlbGV0ZSAodm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZv
aWQgb3BlcmF0b3IgZGVsZXRlW10gKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJv
dygpOwoKCmlubGluZSB2b2lkICpvcGVyYXRvciBuZXcoc2l6ZV90LCB2b2lkICpwbGFjZSkgdGhy
b3coKSB7IHJldHVybiBwbGFjZTsgfQppbmxpbmUgdm9pZCAqb3BlcmF0b3IgbmV3W10oc2l6ZV90
LCB2b2lkICpwbGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQp9CiMgMzQgIi91c3IvbGli
L2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL25ldy5oIiAyIDMKCnVzaW5n
IHN0ZDo6bmV3X2hhbmRsZXI7CnVzaW5nIHN0ZDo6c2V0X25ld19oYW5kbGVyOwojIDE2ICIvaG9t
ZS9tYXR0L29iL2luY2x1ZGUvT0IvYWxsb2NhdG9yLmgiIDIKIyAxICIvdXNyL2luY2x1ZGUvYXNz
ZXJ0LmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMiAzCiMgNjUg
Ii91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwpleHRlcm4gIkMiIHsKCgpleHRlcm4gdm9pZCBfX2Fz
c2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBfX2NvbnN0IGNoYXIgKl9fZmls
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwgX19jb25z
dCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0
dXJuX18pKTsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50IF9fZXJybnVt
LCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCBfX2xpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
bm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0IGNoYXIgKl9fYXNz
ZXJ0aW9uLCBjb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX2xpbmUpCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCn0KIyAxNyAiL2hvbWUvbWF0dC9vYi9pbmNs
dWRlL09CL2FsbG9jYXRvci5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMKIyAx
OCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL2FsbG9jYXRvci5oIiAyCgojIDEgIi9ob21lL21h
dHQvb2IvaW5jbHVkZS9PQi9TVExDb25maWcuaCIgMQojIDIwICIvaG9tZS9tYXR0L29iL2luY2x1
ZGUvT0IvYWxsb2NhdG9yLmgiIDIKCgoKCm5hbWVzcGFjZSBPQgp7CgpuYW1lc3BhY2Ugc3RsCnsK
CgoKCgpjbGFzcyBMaW5rCnsKcHVibGljOgogICAgTGluayAqbmV4dDsKfTsKIyA1MCAiL2hvbWUv
bWF0dC9vYi9pbmNsdWRlL09CL2FsbG9jYXRvci5oIgp0ZW1wbGF0ZTxjbGFzcyBUPgpjbGFzcyBh
bGxvY2F0b3IKewoKCgoKcHJpdmF0ZToKCgoKICAgIHVuaW9uIEFsaWduCiAgICB7CgogICAgICAg
IHVuc2lnbmVkIGxvbmcgbG9uZyBkdW1teTsKCgoKICAgICAgICBjaGFyIG1lbVsxMCAqICgoc2l6
ZW9mKFQpIDwgc2l6ZW9mKExpbmspKSA/IHNpemVvZihMaW5rKSA6IHNpemVvZihUKSldOwogICAg
fTsKCnByaXZhdGU6CgoKCgoKICAgIHN0cnVjdCBDaHVuawogICAgewogICAgICAgIENodW5rKiBu
ZXh0OwogICAgICAgIEFsaWduIG1lbTsKICAgIH07CgoKCiAgICBMaW5rKiBoZWFkXzsKCgogICAg
Q2h1bmsqIGNodW5rc187CgoKCgoKCiAgICB2b2lkIGdyb3coKQogICAgewogICAgICAgIENodW5r
KiBuID0gbmV3IENodW5rOwoKICAgICAgICBuIC0+IG5leHQgPSBjaHVua3NfOwogICAgICAgIGNo
dW5rc18gPSBuOwoKICAgICAgICBjaGFyKiBzdGFydCA9IG4gLT4gbWVtLm1lbTsKICAgICAgICBj
aGFyKiBsYXN0ID0gJnN0YXJ0WygxMCAtMSkgKiAoKHNpemVvZihUKSA8IHNpemVvZihMaW5rKSkg
PyBzaXplb2YoTGluaykgOiBzaXplb2YoVCkpXTsKCiAgICAgICAgZm9yIChjaGFyKiBwID0gc3Rh
cnQ7IHAgPCBsYXN0OyBwICs9ICgoc2l6ZW9mKFQpIDwgc2l6ZW9mKExpbmspKSA/IHNpemVvZihM
aW5rKSA6IHNpemVvZihUKSkpCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8TGluayo+KHAp
IC0+IG5leHQgPQogICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxMaW5rKj4ocCArICgo
c2l6ZW9mKFQpIDwgc2l6ZW9mKExpbmspKSA/IHNpemVvZihMaW5rKSA6IHNpemVvZihUKSkpOwoK
ICAgICAgICByZWludGVycHJldF9jYXN0PExpbmsqPihsYXN0KSAtPiBuZXh0ID0gMDsKICAgICAg
ICBoZWFkXyA9IHJlaW50ZXJwcmV0X2Nhc3Q8TGluayo+KHN0YXJ0KTsKICAgIH0KCnB1YmxpYzoK
ICAgIHR5cGVkZWYgVCB2YWx1ZV90eXBlOwogICAgdHlwZWRlZiBUKiBwb2ludGVyOwogICAgdHlw
ZWRlZiBjb25zdCBUKiBjb25zdF9wb2ludGVyOwogICAgdHlwZWRlZiBUJiByZWZlcmVuY2U7CiAg
ICB0eXBlZGVmIGNvbnN0IFQmIGNvbnN0X3JlZmVyZW5jZTsKICAgIHR5cGVkZWYgdW5zaWduZWQg
bG9uZyBzaXplX3R5cGU7CgoKCgogICAgYWxsb2NhdG9yKCkgOiBoZWFkXygwKSwgY2h1bmtzXygw
KQogICAgewogICAgfQoKCgoKICAgIH5hbGxvY2F0b3IoKQogICAgewogICAgICAgIENodW5rKiBu
ID0gY2h1bmtzXzsKCiAgICAgICAgd2hpbGUgKG4pCiAgICAgICAgewogICAgICAgICAgICBDaHVu
ayogcCA9IG47CiAgICAgICAgICAgIG4gPSBuIC0+IG5leHQ7CiAgICAgICAgICAgIGRlbGV0ZSBw
OwogICAgICAgIH0KICAgIH0KCgoKCgogICAgcG9pbnRlciBhbGxvY2F0ZShzaXplX3R5cGUgbikK
ICAgIHsKICAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gKChuIDw9IG1heF9zaXplKCkpID8gMCA6
IChfX2Fzc2VydF9mYWlsICgibiA8PSBtYXhfc2l6ZSgpIiwgIi9ob21lL21hdHQvb2IvaW5jbHVk
ZS9PQi9hbGxvY2F0b3IuaCIsIDE0OSwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CgogICAg
ICAgIGlmKGhlYWRfID09IDApCiAgICAgICAgICAgIGdyb3coKTsKCiAgICAgICAgTGluayogcCA9
IGhlYWRfOwogICAgICAgIGhlYWRfID0gcCAtPiBuZXh0OwoKICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxwb2ludGVyPihwKTsKICAgIH0KCgoKCgogICAgdm9pZCBkZWFsbG9jYXRlKHBv
aW50ZXIgcCwgc2l6ZV90eXBlIG4pCiAgICB7CgogICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAo
KG4gPD0gbWF4X3NpemUoKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJuIDw9IG1heF9zaXplKCki
LCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL2FsbG9jYXRvci5oIiwgMTY3LCBfX1BSRVRUWV9G
VU5DVElPTl9fKSwgMCkpKTsKCiAgICAgICAgTGluayAqYiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TGlu
ayo+KHApOwogICAgICAgIGIgLT4gbmV4dCA9IGhlYWRfOwogICAgICAgIGhlYWRfID0gYjsKICAg
IH0KCgoKCgogICAgc2l6ZV90eXBlIG1heF9zaXplKCkKICAgIHsKICAgICAgICByZXR1cm4gMTsK
ICAgIH0KCgoKCiAgICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIHAsIGNvbnN0IFQmIHQpCiAgICB7
CiAgICAgICAgbmV3ICgodm9pZCopIHApIFQodCk7CiAgICB9CgoKCgogICAgdm9pZCBkZXN0cm95
KHBvaW50ZXIgcCkKICAgIHsKICAgICAgICAoKFQqKSBwKSAtPiB+VCgpOwogICAgfQoKCgoKICAg
IHBvaW50ZXIgYWRkcmVzcyhUJiByKQogICAgewogICAgICAgIHJldHVybiAmcjsKICAgIH0KCgoK
CiAgICBjb25zdF9wb2ludGVyIGFkZHJlc3MoY29uc3QgVCYgcikKICAgIHsKICAgICAgICByZXR1
cm4gJnI7CiAgICB9Cn07Cgp9Cgp9CiMgMjUgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9saXN0
LmgiIDIKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvYWxnb3JpdGhtcy5oIiAxCiMgMTQg
Ii9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9hbGdvcml0aG1zLmgiCiMgMSAiL2hvbWUvbWF0dC9v
Yi9pbmNsdWRlL09CL1NUTENvbmZpZy5oIiAxCiMgMTUgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9P
Qi9hbGdvcml0aG1zLmgiIDIKCm5hbWVzcGFjZSBPQgp7CgpuYW1lc3BhY2Ugc3RsCnsKCnRlbXBs
YXRlPGNsYXNzIElucHV0SXRlcmF0b3IsIGNsYXNzIE91dHB1dEl0ZXJhdG9yPgpPdXRwdXRJdGVy
YXRvciBjb3B5KElucHV0SXRlcmF0b3IgZmlyc3QxLCBJbnB1dEl0ZXJhdG9yIGxhc3QxLAogICAg
ICAgICAgICAgICAgICAgIE91dHB1dEl0ZXJhdG9yIGZpcnN0MikKewogICAgd2hpbGUgKGZpcnN0
MSAhPSBsYXN0MSkKICAgIHsKICAgICAgICAqZmlyc3QyID0gKmZpcnN0MTsKICAgICAgICBmaXJz
dDErKzsKICAgICAgICBmaXJzdDIrKzsKICAgIH0KCiAgICByZXR1cm4gZmlyc3QyOwp9Cgp0ZW1w
bGF0ZTxjbGFzcyBJbnB1dEl0ZXJhdG9yPgpJbnB1dEl0ZXJhdG9yIGZpbmQoSW5wdXRJdGVyYXRv
ciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0LAogICAgICAgICAgICAgICAgICAgdHlwZW5hbWUg
SW5wdXRJdGVyYXRvcjo6dmFsdWVfdHlwZSB2YWx1ZSkKewogICAgd2hpbGUgKGZpcnN0ICE9IGxh
c3QpCiAgICB7CiAgICAgICAgaWYgKCpmaXJzdCA9PSB2YWx1ZSkKICAgICAgICAgICAgcmV0dXJu
IGZpcnN0OwoKICAgICAgICBmaXJzdCsrOwogICAgfQoKICAgIHJldHVybiBmaXJzdDsKfQoKdGVt
cGxhdGU8Y2xhc3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgUHJlZGljYXRlPgpJbnB1dEl0ZXJhdG9y
IGZpbmRfaWYoSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0LCBQcmVkaWNh
dGUgcHJlZCkKewogICAgd2hpbGUgKGZpcnN0ICE9IGxhc3QpCiAgICB7CiAgICAgICAgaWYgKHBy
ZWQoKmZpcnN0KSkKICAgICAgICAgICAgcmV0dXJuIGZpcnN0OwoKICAgICAgICBmaXJzdCsrOwog
ICAgfQoKICAgIHJldHVybiBmaXJzdDsKfQoKdGVtcGxhdGU8Y2xhc3MgSW5wdXRJdGVyYXRvciwg
Y2xhc3MgVD4KVCBhY2N1bXVsYXRlKElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3Ig
bGFzdCwgVCBpbml0aWFsX3ZhbHVlKQp7CiAgICBUIHJlc3VsdCA9IGluaXRpYWxfdmFsdWU7Cgog
ICAgd2hpbGUgKGZpcnN0ICE9IGxhc3QpCiAgICB7CiAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsg
KmZpcnN0OwogICAgICAgIGZpcnN0Kys7CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKfQoKCnRl
bXBsYXRlPGNsYXNzIElucHV0SXRlcmF0b3IsIGNsYXNzIFQsIGNsYXNzIEJpbmFyeU9wZXJhdGlv
bj4KVCBhY2N1bXVsYXRlKElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCwK
ICAgICAgICAgICAgVCBpbml0aWFsX3ZhbHVlLCBCaW5hcnlPcGVyYXRpb24gYmluYXJ5X29wKQp7
CiAgICBUIHJlc3VsdCA9IGluaXRpYWxfdmFsdWU7CgogICAgd2hpbGUgKGZpcnN0ICE9IGxhc3Qp
CiAgICB7CiAgICAgICAgcmVzdWx0ID0gYmluYXJ5X29wKHJlc3VsdCwgKmZpcnN0KTsKICAgICAg
ICBmaXJzdCsrOwogICAgfQoKICAgIHJldHVybiByZXN1bHQ7Cn0KCgp0ZW1wbGF0ZTxjbGFzcyBG
b3J3YXJkSXRlcmF0b3IsIGNsYXNzIFByZWRpY2F0ZT4KRm9yd2FyZEl0ZXJhdG9yIHJlbW92ZV9p
ZihGb3J3YXJkSXRlcmF0b3IgZmlyc3QsIEZvcndhcmRJdGVyYXRvciBsYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgIFByZWRpY2F0ZSBwcmVkKQp7CiAgICB3aGlsZSAoZmlyc3QgIT0gbGFz
dCkKICAgIHsKICAgICAgICBpZiAoIXByZWQoKmZpcnN0KSkKICAgICAgICB7CiAgICAgICAgICAg
IHR5cGVuYW1lIEZvcndhcmRJdGVyYXRvcjo6dmFsdWVfdHlwZSB2YWx1ZSA9ICpmaXJzdDsKICAg
ICAgICAgICAgbGFzdC0tOwogICAgICAgICAgICAqZmlyc3QgPSAqbGFzdDsKICAgICAgICAgICAg
Kmxhc3QgPSB2YWx1ZTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQoKICAgICAgICBm
aXJzdCsrOwogICAgfQoKICAgIHJldHVybiBmaXJzdDsKfQoKCnRlbXBsYXRlPGNsYXNzIElucHV0
SXRlcmF0b3IsIGNsYXNzIFVuYXJ5RnVuY3Rpb24+CnZvaWQgZm9yX2VhY2goSW5wdXRJdGVyYXRv
ciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0LAogICAgICAgICAgICAgICAgICAgICAgIFVuYXJ5
RnVuY3Rpb24gZikKewogICAgd2hpbGUgKGZpcnN0ICE9IGxhc3QpCiAgICB7CiAgICAgICAgZigq
Zmlyc3QpOwogICAgICAgIGZpcnN0Kys7CiAgICB9Cn0KCn0KCn0KIyAyNiAiL2hvbWUvbWF0dC9v
Yi9pbmNsdWRlL09CL2xpc3QuaCIgMgojIDEgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9pdGVy
YXRvci5oIiAxCiMgMTQgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9pdGVyYXRvci5oIgojIDEg
Ii9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9TVExDb25maWcuaCIgMQojIDE1ICIvaG9tZS9tYXR0
L29iL2luY2x1ZGUvT0IvaXRlcmF0b3IuaCIgMgoKbmFtZXNwYWNlIE9CCnsKCm5hbWVzcGFjZSBz
dGwKewojIDMyICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvaXRlcmF0b3IuaCIKdGVtcGxhdGU8
Y2xhc3MgQ29udGFpbmVyVD4KY2xhc3MgYmFja19pbnNlcnRfaXRlcmF0b3IKewpwcml2YXRlOgog
ICAgQ29udGFpbmVyVCAmY29udGFpbmVyXzsKCnB1YmxpYzoKICAgIGV4cGxpY2l0IGJhY2tfaW5z
ZXJ0X2l0ZXJhdG9yKENvbnRhaW5lclQgJmNvbnRhaW5lcikKICAgICAgICA6IGNvbnRhaW5lcl8o
Y29udGFpbmVyKQogICAgewogICAgfQoKICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJiBvcGVyYXRv
cj0oCiAgICAgICAgY29uc3QgdHlwZW5hbWUgQ29udGFpbmVyVDo6dmFsdWVfdHlwZSYgdmFsdWUp
CiAgICB7CiAgICAgICAgY29udGFpbmVyXy5wdXNoX2JhY2sodmFsdWUpOwogICAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCiAgICBiYWNrX2luc2VydF9pdGVyYXRvciYgb3BlcmF0b3IqKCkKICAg
IHsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgYmFja19pbnNlcnRfaXRlcmF0b3Im
IG9wZXJhdG9yKysoKQogICAgewogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBiYWNr
X2luc2VydF9pdGVyYXRvciYgb3BlcmF0b3IrKyhpbnQpCiAgICB7CiAgICAgICAgcmV0dXJuICp0
aGlzOwogICAgfQp9OwoKCgoKdGVtcGxhdGU8Y2xhc3MgQ29udGFpbmVyVD4KYmFja19pbnNlcnRf
aXRlcmF0b3I8Q29udGFpbmVyVD4gYmFja19pbnNlcnRlcihDb250YWluZXJUJiBjb250YWluZXIp
CnsKICAgIHJldHVybiBiYWNrX2luc2VydF9pdGVyYXRvcjxDb250YWluZXJUPihjb250YWluZXIp
Owp9Cgp9Cgp9CiMgMjcgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9saXN0LmgiIDIKIyAxICIv
dXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9hc3Nl
cnQuaCIgMiAzCiMgNjUgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwpleHRlcm4gIkMiIHsKCgpl
eHRlcm4gdm9pZCBfX2Fzc2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBfX2Nv
bnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
IF9fbGluZSwgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX25vcmV0dXJuX18pKTsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFp
bCAoaW50IF9fZXJybnVtLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX19hc3NlcnQgKGNv
bnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBjb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX2xpbmUpCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCn0KIyAyOCAiL2hv
bWUvbWF0dC9vYi9pbmNsdWRlL09CL2xpc3QuaCIgMgoKCm5hbWVzcGFjZSBPQgp7CgoKbmFtZXNw
YWNlIHN0bAp7CgoKdGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3MgbGlzdDsKIyA0OSAiL2hvbWUvbWF0
dC9vYi9pbmNsdWRlL09CL2xpc3QuaCIKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgUmVmLCBjbGFz
cyBOb2RlUHRyLCBjbGFzcyBMaXN0UHRyPgpjbGFzcyBpdGVyYXRvcl90ZW1wbGF0ZQp7CiAgICBM
aXN0UHRyIGxpc3RfOwogICAgTm9kZVB0ciBjdXJyZW50X25vZGVfOwoKICAgIGZyaWVuZCBjbGFz
cyBsaXN0PFQ+OwoKCgoKCiAgICBpdGVyYXRvcl90ZW1wbGF0ZShMaXN0UHRyIGxpc3QsIE5vZGVQ
dHIgcG9zaXRpb24pIDoKICAgICAgICBsaXN0XyhsaXN0KSwgY3VycmVudF9ub2RlXyhwb3NpdGlv
bikKICAgIHsKICAgIH0KCnB1YmxpYzoKICAgIHR5cGVkZWYgVCB2YWx1ZV90eXBlOwoKCgoKCgog
ICAgaXRlcmF0b3JfdGVtcGxhdGUoKSA6IGxpc3RfKDApLCBjdXJyZW50X25vZGVfKDApCiAgICB7
CiAgICB9CgoKCgoKICAgIGl0ZXJhdG9yX3RlbXBsYXRlKGNvbnN0IGl0ZXJhdG9yX3RlbXBsYXRl
JiBvdGhlcl9pdGVyYXRvcikgOgogICAgICAgIGxpc3RfKG90aGVyX2l0ZXJhdG9yLmxpc3RfKSwK
ICAgICAgICBjdXJyZW50X25vZGVfKG90aGVyX2l0ZXJhdG9yLmN1cnJlbnRfbm9kZV8pCiAgICB7
CiAgICB9CgoKCgogICAgfml0ZXJhdG9yX3RlbXBsYXRlKCkKICAgIHsKICAgIH0KCgoKCgoKICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvcl90ZW1wbGF0ZSYgb3RoZXJfaXRlcmF0b3Ip
IGNvbnN0CiAgICB7CiAgICAgICAgcmV0dXJuIG90aGVyX2l0ZXJhdG9yLmN1cnJlbnRfbm9kZV8g
PT0gY3VycmVudF9ub2RlXzsKICAgIH0KCgoKCgoKICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBp
dGVyYXRvcl90ZW1wbGF0ZSYgb3RoZXJfaXRlcmF0b3IpIGNvbnN0CiAgICB7CiAgICAgICAgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXJfaXRlcmF0b3IpOwogICAgfQoKCgoKCgogICAgY29uc3QgaXRl
cmF0b3JfdGVtcGxhdGUmIG9wZXJhdG9yPShjb25zdCBpdGVyYXRvcl90ZW1wbGF0ZSYgb3RoZXJf
aXRlcmF0b3IpCiAgICB7CiAgICAgICAgbGlzdF8gPSBvdGhlcl9pdGVyYXRvci5saXN0XzsKICAg
ICAgICBjdXJyZW50X25vZGVfID0gb3RoZXJfaXRlcmF0b3IuY3VycmVudF9ub2RlXzsKICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgoKCgogICAgUmVmIG9wZXJhdG9yKigpIGNvbnN0CiAgICB7
CiAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoY3VycmVudF9ub2RlXyAhPSAwKSA/IDAgOiAo
X19hc3NlcnRfZmFpbCAoImN1cnJlbnRfbm9kZV8gIT0gMCIsICIvaG9tZS9tYXR0L29iL2luY2x1
ZGUvT0IvbGlzdC5oIiwgMTMyLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAgICAgICAo
c3RhdGljX2Nhc3Q8dm9pZD4gKChjdXJyZW50X25vZGVfICE9IGxpc3RfIC0+IGhlYWRfKSA/IDAg
OiAoX19hc3NlcnRfZmFpbCAoImN1cnJlbnRfbm9kZV8gIT0gbGlzdF8gLT4gaGVhZF8iLCAiL2hv
bWUvbWF0dC9vYi9pbmNsdWRlL09CL2xpc3QuaCIsIDEzMywgX19QUkVUVFlfRlVOQ1RJT05fXyks
IDApKSk7CiAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoY3VycmVudF9ub2RlXyAhPSBsaXN0
XyAtPiB0YWlsXykgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJjdXJyZW50X25vZGVfICE9IGxpc3Rf
IC0+IHRhaWxfIiwgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9saXN0LmgiLCAxMzQsIF9fUFJF
VFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKICAgICAgICByZXR1cm4gY3VycmVudF9ub2RlXy0+aXRl
bSgpOwogICAgfQoKCgoKICAgIGl0ZXJhdG9yX3RlbXBsYXRlJiBvcGVyYXRvcisrKCkKICAgIHsK
ICAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gKChjdXJyZW50X25vZGVfICE9IDApID8gMCA6IChf
X2Fzc2VydF9mYWlsICgiY3VycmVudF9ub2RlXyAhPSAwIiwgIi9ob21lL21hdHQvb2IvaW5jbHVk
ZS9PQi9saXN0LmgiLCAxNDQsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgICAgIChz
dGF0aWNfY2FzdDx2b2lkPiAoKGN1cnJlbnRfbm9kZV8gIT0gbGlzdF8gLT4gdGFpbF8pID8gMCA6
IChfX2Fzc2VydF9mYWlsICgiY3VycmVudF9ub2RlXyAhPSBsaXN0XyAtPiB0YWlsXyIsICIvaG9t
ZS9tYXR0L29iL2luY2x1ZGUvT0IvbGlzdC5oIiwgMTQ1LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwg
MCkpKTsKCiAgICAgICAgY3VycmVudF9ub2RlXyA9IGN1cnJlbnRfbm9kZV8tPm5leHQoKTsKICAg
ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKCgoKICAgIGl0ZXJhdG9yX3RlbXBsYXRlIG9wZXJh
dG9yKysoaW50KQogICAgewogICAgICAgIGl0ZXJhdG9yX3RlbXBsYXRlIHByZXZpb3VzX3N0YXRl
ID0gKnRoaXM7CiAgICAgICAgKysoKnRoaXMpOwogICAgICAgIHJldHVybiBwcmV2aW91c19zdGF0
ZTsKICAgIH0KCgoKCiAgICBpdGVyYXRvcl90ZW1wbGF0ZSYgb3BlcmF0b3ItLSgpCiAgICB7CiAg
ICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoY3VycmVudF9ub2RlXyAhPSAwKSA/IDAgOiAoX19h
c3NlcnRfZmFpbCAoImN1cnJlbnRfbm9kZV8gIT0gMCIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUv
T0IvbGlzdC5oIiwgMTY3LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAgICAgICAoc3Rh
dGljX2Nhc3Q8dm9pZD4gKChjdXJyZW50X25vZGVfICE9IGxpc3RfIC0+IGhlYWRfKSA/IDAgOiAo
X19hc3NlcnRfZmFpbCAoImN1cnJlbnRfbm9kZV8gIT0gbGlzdF8gLT4gaGVhZF8iLCAiL2hvbWUv
bWF0dC9vYi9pbmNsdWRlL09CL2xpc3QuaCIsIDE2OCwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDAp
KSk7CgogICAgICAgIGN1cnJlbnRfbm9kZV8gPSBjdXJyZW50X25vZGVfLT5wcmV2KCk7CiAgICAg
ICAgcmV0dXJuICp0aGlzOwogICAgfQoKCgoKCiAgICBpdGVyYXRvcl90ZW1wbGF0ZSBvcGVyYXRv
ci0tKGludCkKICAgIHsKICAgICAgICBpdGVyYXRvcl90ZW1wbGF0ZSBwcmV2aW91c19zdGF0ZSA9
ICp0aGlzOwogICAgICAgIC0tKCp0aGlzKTsKICAgICAgICByZXR1cm4gcHJldmlvdXNfc3RhdGU7
CiAgICB9Cn07CiMgMTk2ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvbGlzdC5oIgp0ZW1wbGF0
ZTxjbGFzcyBULCBjbGFzcyBSZWYsIGNsYXNzIEl0ZXJhdG9yLCBjbGFzcyBMaXN0UHRyPgpjbGFz
cyByZXZlcnNlX2l0ZXJhdG9yX3RlbXBsYXRlCnsKcHJpdmF0ZToKICAgIGZyaWVuZCBjbGFzcyBs
aXN0PFQ+OwoKCgoKCiAgICBJdGVyYXRvciBjdXJyZW50XzsKCgoKCiAgICByZXZlcnNlX2l0ZXJh
dG9yX3RlbXBsYXRlKGNvbnN0IEl0ZXJhdG9yJiBjdXJyZW50KQogICAgICAgIDogY3VycmVudF8o
Y3VycmVudCkKICAgIHsKICAgIH0KCnB1YmxpYzoKICAgIHR5cGVkZWYgVCB2YWx1ZV90eXBlOwoK
CgoKCgogICAgcmV2ZXJzZV9pdGVyYXRvcl90ZW1wbGF0ZSgpCiAgICB7CiAgICB9CgoKCgoKICAg
IHJldmVyc2VfaXRlcmF0b3JfdGVtcGxhdGUoCiAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRv
cl90ZW1wbGF0ZSYgb3RoZXJfaXRlcmF0b3IpCiAgICAgICAgOiBjdXJyZW50XyhvdGhlcl9pdGVy
YXRvci5jdXJyZW50XykKICAgIHsKICAgIH0KCgoKCiAgICB+cmV2ZXJzZV9pdGVyYXRvcl90ZW1w
bGF0ZSgpCiAgICB7CiAgICB9CgoKCgoKCiAgICBib29sIG9wZXJhdG9yPT0oCiAgICAgICAgY29u
c3QgcmV2ZXJzZV9pdGVyYXRvcl90ZW1wbGF0ZSYgb3RoZXJfaXRlcmF0b3IpIGNvbnN0CiAgICB7
CiAgICAgICAgcmV0dXJuIG90aGVyX2l0ZXJhdG9yLmN1cnJlbnRfID09IGN1cnJlbnRfOwogICAg
fQoKCgoKCgogICAgYm9vbCBvcGVyYXRvciE9KAogICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0
b3JfdGVtcGxhdGUmIG90aGVyX2l0ZXJhdG9yKSBjb25zdAogICAgewogICAgICAgIHJldHVybiAh
KCp0aGlzID09IG90aGVyX2l0ZXJhdG9yKTsKICAgIH0KCgoKCgoKICAgIGNvbnN0IHJldmVyc2Vf
aXRlcmF0b3JfdGVtcGxhdGUmIG9wZXJhdG9yPSgKICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJh
dG9yX3RlbXBsYXRlJiBvdGhlcl9pdGVyYXRvcikKICAgIHsKICAgICAgICBjdXJyZW50XyA9IG90
aGVyX2l0ZXJhdG9yLmN1cnJlbnRfOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgoKCiAg
ICBSZWYgb3BlcmF0b3IqKCkgY29uc3QKICAgIHsKICAgICAgICByZXR1cm4gKmN1cnJlbnRfOwog
ICAgfQoKCgoKICAgIHJldmVyc2VfaXRlcmF0b3JfdGVtcGxhdGUmIG9wZXJhdG9yKysoKQogICAg
ewogICAgICAgIC0tY3VycmVudF87CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCgoKCiAg
ICByZXZlcnNlX2l0ZXJhdG9yX3RlbXBsYXRlIG9wZXJhdG9yKysoaW50KQogICAgewogICAgICAg
IHJldmVyc2VfaXRlcmF0b3JfdGVtcGxhdGUgcHJldmlvdXNfc3RhdGUgPSAqdGhpczsKICAgICAg
ICBjdXJyZW50Xy0tOwogICAgICAgIHJldHVybiBwcmV2aW91c19zdGF0ZTsKICAgIH0KCgoKCiAg
ICByZXZlcnNlX2l0ZXJhdG9yX3RlbXBsYXRlJiBvcGVyYXRvci0tKCkKICAgIHsKICAgICAgICAr
K2N1cnJlbnRfOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgoKCgogICAgcmV2ZXJzZV9p
dGVyYXRvcl90ZW1wbGF0ZSBvcGVyYXRvci0tKGludCkKICAgIHsKICAgICAgICByZXZlcnNlX2l0
ZXJhdG9yX3RlbXBsYXRlIHByZXZpb3VzX3N0YXRlID0gKnRoaXM7CiAgICAgICAgY3VycmVudF8r
KzsKICAgICAgICByZXR1cm4gcHJldmlvdXNfc3RhdGU7CiAgICB9Cn07CiMgMzYwICIvaG9tZS9t
YXR0L29iL2luY2x1ZGUvT0IvbGlzdC5oIgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgbGlzdAp7
CnByaXZhdGU6CiMgMzczICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvbGlzdC5oIgogICAgY2xh
c3MgTGlzdE5vZGUKICAgIHsKICAgICAgICBUIGl0ZW1fOwogICAgICAgIExpc3ROb2RlICpuZXh0
XzsKICAgICAgICBMaXN0Tm9kZSAqcHJldl87CgogICAgcHVibGljOgogICAgICAgIExpc3ROb2Rl
KCkgOiBuZXh0XygwKSwgcHJldl8oMCkKICAgICAgICB7CiAgICAgICAgfQoKICAgICAgICBMaXN0
Tm9kZShjb25zdCBUJiBpdGVtLCBMaXN0Tm9kZSAqbmV4dCwgTGlzdE5vZGUgKnByZXYpCiAgICAg
ICAgICAgIDogaXRlbV8oaXRlbSksIG5leHRfKG5leHQpLCBwcmV2XyhwcmV2KQogICAgICAgIHsK
ICAgICAgICB9CgogICAgICAgIH5MaXN0Tm9kZSgpCiAgICAgICAgewogICAgICAgIH0KCiAgICAg
ICAgVCYgaXRlbSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gaXRlbV87CiAgICAgICAg
fQoKICAgICAgICBjb25zdCBUJiBpdGVtKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgIHJl
dHVybiBpdGVtXzsKICAgICAgICB9CgogICAgICAgIExpc3ROb2RlKiBuZXh0KCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiBuZXh0XzsKICAgICAgICB9CgogICAgICAgIGNvbnN0IExpc3RO
b2RlKiBuZXh0KCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBuZXh0XzsKICAg
ICAgICB9CgogICAgICAgIHZvaWQgbmV4dChMaXN0Tm9kZSogbm9kZSkKICAgICAgICB7CiAgICAg
ICAgICAgIG5leHRfID0gbm9kZTsKICAgICAgICB9CgogICAgICAgIExpc3ROb2RlKiBwcmV2KCkK
ICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBwcmV2XzsKICAgICAgICB9CgogICAgICAgIGNv
bnN0IExpc3ROb2RlKiBwcmV2KCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBw
cmV2XzsKICAgICAgICB9CgogICAgICAgIHZvaWQgcHJldihMaXN0Tm9kZSogbm9kZSkKICAgICAg
ICB7CiAgICAgICAgICAgIHByZXZfID0gbm9kZTsKICAgICAgICB9CiAgICB9OwojIDQ0MSAiL2hv
bWUvbWF0dC9vYi9pbmNsdWRlL09CL2xpc3QuaCIKICAgIGFsbG9jYXRvcjxMaXN0Tm9kZT4gbm9k
ZV9hbGxvY2F0b3I7CgpwdWJsaWM6CgogICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIHNpemVfdHlw
ZTsKICAgIHR5cGVkZWYgVCYgcmVmZXJlbmNlOwogICAgdHlwZWRlZiBjb25zdCBUJiBjb25zdF9y
ZWZlcmVuY2U7CiAgICB0eXBlZGVmIFQgdmFsdWVfdHlwZTsKCgoKCgogICAgdHlwZWRlZiBpdGVy
YXRvcl90ZW1wbGF0ZTxULCBUJiwgTGlzdE5vZGUqLCBsaXN0Kj4KICAgIGl0ZXJhdG9yOwoKICAg
IHR5cGVkZWYgaXRlcmF0b3JfdGVtcGxhdGU8VCwgY29uc3QgVCYsIGNvbnN0IExpc3ROb2RlKiwg
Y29uc3QgbGlzdCo+CiAgICBjb25zdF9pdGVyYXRvcjsKCgoKCgoKICAgIHR5cGVkZWYgcmV2ZXJz
ZV9pdGVyYXRvcl90ZW1wbGF0ZQogICAgPFQsIFQmLCBpdGVyYXRvciwgbGlzdCo+CiAgICByZXZl
cnNlX2l0ZXJhdG9yOwoKICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcl90ZW1wbGF0ZQogICAg
PFQsIGNvbnN0IFQmLCBjb25zdF9pdGVyYXRvciwgY29uc3QgbGlzdCo+CiAgICBjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yOwoKcHJpdmF0ZToKCgogICAgZnJpZW5kIGNsYXNzCiAgICAgICAgaXRlcmF0
b3JfdGVtcGxhdGU8VCwgVCYsIExpc3ROb2RlKiwgbGlzdCo+OwoKICAgIGZyaWVuZCBjbGFzcwog
ICAgICAgIHJldmVyc2VfaXRlcmF0b3JfdGVtcGxhdGU8VCwgVCYsIGl0ZXJhdG9yLCBsaXN0Kj47
CgogICAgZnJpZW5kIGNsYXNzCiAgICAgICAgaXRlcmF0b3JfdGVtcGxhdGU8VCwgY29uc3QgVCYs
IGNvbnN0IExpc3ROb2RlKiwgY29uc3QgbGlzdCo+OwoKICAgIGZyaWVuZCBjbGFzcwogICAgICAg
IHJldmVyc2VfaXRlcmF0b3JfdGVtcGxhdGU8VCwgY29uc3QgVCYsIGNvbnN0X2l0ZXJhdG9yLCBj
b25zdCBsaXN0Kj47CgoKICAgIExpc3ROb2RlICpoZWFkXzsKICAgIExpc3ROb2RlICp0YWlsXzsK
CgogICAgc2l6ZV90eXBlIHNpemVfOwoKcHVibGljOgoKCgoKICAgIGxpc3QoKSA6CiAgICAgICAg
aGVhZF8obmV3IExpc3ROb2RlKFQoKSwgMCwgMCkpLAogICAgICAgIHRhaWxfKG5ldyBMaXN0Tm9k
ZShUKCksIDAsIDApKSwKICAgICAgICBzaXplXygwKQogICAgewogICAgICAgIGhlYWRfIC0+IG5l
eHQodGFpbF8pOwogICAgICAgIHRhaWxfIC0+IHByZXYoaGVhZF8pOwogICAgfQoKCgoKICAgIH5s
aXN0KCkKICAgIHsKICAgICAgICBlcmFzZShiZWdpbigpLCBlbmQoKSk7CiAgICAgICAgZGVsZXRl
IGhlYWRfOwogICAgICAgIGRlbGV0ZSB0YWlsXzsKICAgIH0KCgoKCgogICAgbGlzdChjb25zdCBs
aXN0JiBvdGhlcl9saXN0KSA6CiAgICAgICAgaGVhZF8obmV3IExpc3ROb2RlKFQoKSwgMCwgMCkp
LAogICAgICAgIHRhaWxfKG5ldyBMaXN0Tm9kZShUKCksIDAsIDApKSwKICAgICAgICBzaXplXygw
KQogICAgewogICAgICAgIGhlYWRfIC0+IG5leHQodGFpbF8pOwogICAgICAgIHRhaWxfIC0+IHBy
ZXYoaGVhZF8pOwogICAgICAgIE9COjpzdGw6OmNvcHkob3RoZXJfbGlzdC5iZWdpbigpLCBvdGhl
cl9saXN0LmVuZCgpLAogICAgICAgICAgICAgICAgICAgICBPQjo6c3RsOjpiYWNrX2luc2VydGVy
KCp0aGlzKSk7CiAgICB9CgoKCgoKCiAgICBjb25zdCBsaXN0JiBvcGVyYXRvcj0oY29uc3QgbGlz
dCYgb3RoZXJfbGlzdCkKICAgIHsKICAgICAgICBlcmFzZShiZWdpbigpLCBlbmQoKSk7CiAgICAg
ICAgT0I6OnN0bDo6Y29weShvdGhlcl9saXN0LmJlZ2luKCksIG90aGVyX2xpc3QuZW5kKCksCiAg
ICAgICAgICAgICAgICAgICAgIE9COjpzdGw6OmJhY2tfaW5zZXJ0ZXIoKnRoaXMpKTsKICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgoKCgogICAgaXRlcmF0b3IgYmVnaW4oKQogICAgewogICAg
ICAgIHJldHVybiBpdGVyYXRvcih0aGlzLCBoZWFkXyAtPiBuZXh0KCkpOwogICAgfQoKCgoKICAg
IGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QKICAgIHsKICAgICAgICByZXR1cm4gY29uc3Rf
aXRlcmF0b3IodGhpcywgaGVhZF8gLT4gbmV4dCgpKTsKICAgIH0KCgoKCiAgICBpdGVyYXRvciBl
bmQoKQogICAgewogICAgICAgIHJldHVybiBpdGVyYXRvcih0aGlzLCB0YWlsXyk7CiAgICB9CgoK
CgogICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QKICAgIHsKICAgICAgICByZXR1cm4gY29u
c3RfaXRlcmF0b3IodGhpcywgdGFpbF8pOwogICAgfQoKCgoKICAgIHJldmVyc2VfaXRlcmF0b3Ig
cmJlZ2luKCkKICAgIHsKICAgICAgICByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcigtLWVuZCgpKTsK
ICAgIH0KCgoKCiAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0CiAgICB7
CiAgICAgICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoLS1lbmQoKSk7CiAgICB9CgoK
CgogICAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkKICAgIHsKICAgICAgICByZXR1cm4gcmV2ZXJz
ZV9pdGVyYXRvcigtLWJlZ2luKCkpOwogICAgfQoKCgoKICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0
b3IgcmVuZCgpIGNvbnN0CiAgICB7CiAgICAgICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0
b3IoLS1iZWdpbigpKTsKICAgIH0KCgoKCiAgICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0CiAgICB7
CiAgICAgICAgcmV0dXJuIHNpemVfOwogICAgfQoKCgoKICAgIGJvb2wgZW1wdHkoKSBjb25zdAog
ICAgewogICAgICAgIHJldHVybiBzaXplXyA9PSAwOwogICAgfQoKCgoKCiAgICByZWZlcmVuY2Ug
ZnJvbnQoKQogICAgewogICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAoKHNpemVfICE9IDApID8g
MCA6IChfX2Fzc2VydF9mYWlsICgic2l6ZV8gIT0gMCIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUv
T0IvbGlzdC5oIiwgNjMzLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAgICAgICByZXR1
cm4gKmJlZ2luKCk7CiAgICB9CgoKCgoKICAgIGNvbnN0X3JlZmVyZW5jZSBmcm9udCgpIGNvbnN0
CiAgICB7CiAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoc2l6ZV8gIT0gMCkgPyAwIDogKF9f
YXNzZXJ0X2ZhaWwgKCJzaXplXyAhPSAwIiwgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9saXN0
LmgiLCA2NDMsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgICAgIHJldHVybiAqYmVn
aW4oKTsKICAgIH0KCgoKCgogICAgcmVmZXJlbmNlIGJhY2soKQogICAgewogICAgICAgIChzdGF0
aWNfY2FzdDx2b2lkPiAoKHNpemVfICE9IDApID8gMCA6IChfX2Fzc2VydF9mYWlsICgic2l6ZV8g
IT0gMCIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvbGlzdC5oIiwgNjUzLCBfX1BSRVRUWV9G
VU5DVElPTl9fKSwgMCkpKTsKICAgICAgICByZXR1cm4gKigtLWVuZCgpKTsKICAgIH0KCgoKCgog
ICAgY29uc3RfcmVmZXJlbmNlIGJhY2soKSBjb25zdAogICAgewogICAgICAgIChzdGF0aWNfY2Fz
dDx2b2lkPiAoKHNpemVfICE9IDApID8gMCA6IChfX2Fzc2VydF9mYWlsICgic2l6ZV8gIT0gMCIs
ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvbGlzdC5oIiwgNjYzLCBfX1BSRVRUWV9GVU5DVElP
Tl9fKSwgMCkpKTsKICAgICAgICByZXR1cm4gKigtLWVuZCgpKTsKICAgIH0KCgoKCiAgICB2b2lk
IHB1c2hfZnJvbnQoY29uc3QgVCYgeCkKICAgIHsKICAgICAgICBpbnNlcnQoYmVnaW4oKSwgeCk7
CiAgICB9CgoKCgogICAgdm9pZCBwdXNoX2JhY2soY29uc3QgVCYgeCkKICAgIHsKICAgICAgICBp
bnNlcnQoZW5kKCksIHgpOwogICAgfQoKCgoKCiAgICB2b2lkIHNwbGljZShjb25zdCBpdGVyYXRv
ciYgcG9zaXRpb24sIGxpc3Q8VD4mIHgpCiAgICB7CiAgICAgICAgc3BsaWNlKHBvc2l0aW9uLCB4
LCB4LmJlZ2luKCksIHguZW5kKCkpOwogICAgfQoKCgoKCiAgICB2b2lkIHNwbGljZShjb25zdCBp
dGVyYXRvciYgcG9zaXRpb24sIGxpc3Q8VD4mIHgsIGl0ZXJhdG9yIGkpCiAgICB7CiAgICAgICAg
aW5zZXJ0KHBvc2l0aW9uLCAqaSk7CiAgICAgICAgeC5lcmFzZShpKTsKICAgIH0KCgoKCgoKICAg
IHZvaWQgc3BsaWNlKGNvbnN0IGl0ZXJhdG9yJiBwb3NpdGlvbiwgbGlzdDxUPiYgeCwKICAgICAg
ICAgICAgICAgIGl0ZXJhdG9yIGZpcnN0LCBpdGVyYXRvciBsYXN0KQogICAgewogICAgICAgIGZv
ciAoaXRlcmF0b3IgeF9pdGVyID0gZmlyc3Q7IHhfaXRlciAhPSBsYXN0OyB4X2l0ZXIrKykKICAg
ICAgICB7CiAgICAgICAgICAgIGluc2VydChwb3NpdGlvbiwgKnhfaXRlcik7CiAgICAgICAgfQoK
ICAgICAgICB4LmVyYXNlKGZpcnN0LCBsYXN0KTsKICAgIH0KCgoKCgoKICAgIGl0ZXJhdG9yIGlu
c2VydChjb25zdCBpdGVyYXRvciYgcG9zaXRpb24sIGNvbnN0IFQmIHgpCiAgICB7CiAgICAgICAg
KHN0YXRpY19jYXN0PHZvaWQ+ICgocG9zaXRpb24gIT0gLS1iZWdpbigpKSA/IDAgOiAoX19hc3Nl
cnRfZmFpbCAoInBvc2l0aW9uICE9IC0tYmVnaW4oKSIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUv
T0IvbGlzdC5oIiwgNzI1LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKCiAgICAgICAgTGlz
dE5vZGUqIGN1cnJlbnRfbm9kZSA9IHBvc2l0aW9uLmN1cnJlbnRfbm9kZV87CgogICAgICAgIHR5
cGVuYW1lIGFsbG9jYXRvcjxMaXN0Tm9kZT46OnBvaW50ZXIgbmV3X25vZGUgPQogICAgICAgICAg
ICBub2RlX2FsbG9jYXRvci5hbGxvY2F0ZSgxKTsKICAgICAgICBub2RlX2FsbG9jYXRvci5jb25z
dHJ1Y3QobmV3X25vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3ROb2Rl
KHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfbm9k
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9ub2Rl
LT5wcmV2KCkpKTsKCiAgICAgICAgY3VycmVudF9ub2RlLT5wcmV2KCktPm5leHQobmV3X25vZGUp
OwogICAgICAgIGN1cnJlbnRfbm9kZS0+cHJldihuZXdfbm9kZSk7CgogICAgICAgIHNpemVfKys7
CgogICAgICAgIHJldHVybiBpdGVyYXRvcih0aGlzLCBuZXdfbm9kZSk7CiAgICB9CgoKCgoKICAg
IHZvaWQgcG9wX2Zyb250KCkKICAgIHsKICAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gKChzaXpl
XyAhPSAwKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoInNpemVfICE9IDAiLCAiL2hvbWUvbWF0dC9v
Yi9pbmNsdWRlL09CL2xpc3QuaCIsIDc1MCwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAg
ICAgICAgZXJhc2UoYmVnaW4oKSk7CiAgICB9CgoKCgoKICAgIHZvaWQgcG9wX2JhY2soKQogICAg
ewogICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAoKHNpemVfICE9IDApID8gMCA6IChfX2Fzc2Vy
dF9mYWlsICgic2l6ZV8gIT0gMCIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvbGlzdC5oIiwg
NzYwLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAgICAgICBlcmFzZSgtLWVuZCgpKTsK
ICAgIH0KCgoKCiAgICB2b2lkIGVyYXNlKGNvbnN0IGl0ZXJhdG9yICZwb3NpdGlvbikKICAgIHsK
ICAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gKChzaXplXyAhPSAwKSA/IDAgOiAoX19hc3NlcnRf
ZmFpbCAoInNpemVfICE9IDAiLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL2xpc3QuaCIsIDc2
OSwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+
ICgocG9zaXRpb24gIT0gZW5kKCkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgicG9zaXRpb24gIT0g
ZW5kKCkiLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL2xpc3QuaCIsIDc3MCwgX19QUkVUVFlf
RlVOQ1RJT05fXyksIDApKSk7CiAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgocG9zaXRpb24g
IT0gLS1iZWdpbigpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoInBvc2l0aW9uICE9IC0tYmVnaW4o
KSIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvbGlzdC5oIiwgNzcxLCBfX1BSRVRUWV9GVU5D
VElPTl9fKSwgMCkpKTsKCiAgICAgICAgTGlzdE5vZGUqIGN1cnJlbnRfbm9kZSA9IHBvc2l0aW9u
LmN1cnJlbnRfbm9kZV87CgogICAgICAgIGN1cnJlbnRfbm9kZS0+cHJldigpLT5uZXh0KGN1cnJl
bnRfbm9kZS0+bmV4dCgpKTsKICAgICAgICBjdXJyZW50X25vZGUtPm5leHQoKS0+cHJldihjdXJy
ZW50X25vZGUtPnByZXYoKSk7CgogICAgICAgIHNpemVfLS07CgogICAgICAgIG5vZGVfYWxsb2Nh
dG9yLmRlc3Ryb3koY3VycmVudF9ub2RlKTsKICAgICAgICBub2RlX2FsbG9jYXRvci5kZWFsbG9j
YXRlKGN1cnJlbnRfbm9kZSwgMSk7CiAgICB9CgoKCgogICAgdm9pZCBlcmFzZShjb25zdCBpdGVy
YXRvciYgZmlyc3QsIGNvbnN0IGl0ZXJhdG9yJiBsYXN0KQogICAgewogICAgICAgIGl0ZXJhdG9y
IHBvc2l0aW9uID0gZmlyc3Q7CiAgICAgICAgd2hpbGUocG9zaXRpb24gIT0gbGFzdCkKICAgICAg
ICB7CiAgICAgICAgICAgIGl0ZXJhdG9yIHZpY3RpbSA9IHBvc2l0aW9uOwogICAgICAgICAgICBw
b3NpdGlvbisrOwogICAgICAgICAgICBlcmFzZSh2aWN0aW0pOwogICAgICAgIH0KICAgIH0KCgog
ICAgdm9pZCBjbGVhcigpCiAgICB7CiAgICAgICAgZXJhc2UoYmVnaW4oKSwgZW5kKCkpOwogICAg
fQoKfTsKCgp9Cgp9CiMgMjEgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9NYXJzaGFsU3R1Yklt
cGwuaCIgMgoKbmFtZXNwYWNlIE9CCnsKCgoKCnR5cGVkZWYgT2JqU2VxPCBDbGllbnQsIGludCA+
IENsaWVudFNlcTsKdHlwZWRlZiBTZXFWYXI8IENsaWVudFNlcSA+IENsaWVudFNlcV92YXI7CgoK
Cgp0eXBlZGVmIE9ialNlcTwgUmVmQ291bnRQcm9maWxlSW5mbywgaW50ID4gUmVmQ291bnRQcm9m
aWxlSW5mb1NlcTsKdHlwZWRlZiBTZXFWYXI8IFJlZkNvdW50UHJvZmlsZUluZm9TZXEgPiBSZWZD
b3VudFByb2ZpbGVJbmZvU2VxX3ZhcjsKCgoKCnN0cnVjdCBQYXJhbWV0ZXJEZXNjOwoKCgoKY2xh
c3MgTWFyc2hhbFN0dWJJbXBsIDogdmlydHVhbCBwdWJsaWMgU3R1YkltcGxCYXNlCnsKCgoKICAg
IE1hcnNoYWxTdHViSW1wbChjb25zdCBNYXJzaGFsU3R1YkltcGwmKTsKICAgIHZvaWQgb3BlcmF0
b3I9KGNvbnN0IE1hcnNoYWxTdHViSW1wbCYpOwoKCgoKICAgIE9SQkluc3RhbmNlX3ZhciBvcmJJ
bnN0YW5jZV87CgoKCgogICAgUmVmQ291bnRJT1JfdmFyIElPUl87CiAgICBSZWZDb3VudElPUl92
YXIgb3JpZ0lPUl87CgoKCgogICAgUmVmQ291bnRQb2xpY3lMaXN0X3ZhciBwb2xpY2llc187CgoK
CgogICAgT0I6OnN0bDo6bGlzdDxDbGllbnRQcm9maWxlUGFpcl92YXI+KiBjbGllbnRQcm9maWxl
UGFpcnNfOwoKCgoKICAgIENsaWVudF9wdHIgZ2V0Q2xpZW50UHJvZmlsZVBhaXIoUmVmQ291bnRQ
cm9maWxlSW5mb19vdXQpOwoKcHJvdGVjdGVkOgoKCgoKICAgIERvd25jYWxsX3B0ciBfT0JfY3Jl
YXRlRG93bmNhbGwoY29uc3QgY2hhciosIGJvb2wpOwogICAgRG93bmNhbGxfcHRyIF9PQl9jcmVh
dGVQSUFyZ3NEb3duY2FsbChjb25zdCBjaGFyKiwgYm9vbCwgUGFyYW1ldGVyRGVzY1tdLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6VUxvbmcsIFBhcmFt
ZXRlckRlc2MqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JC
QTo6VHlwZUNvZGVfcHRyKiwgQ09SQkE6OlVMb25nKTsKICAgIERvd25jYWxsX3B0ciBfT0JfY3Jl
YXRlUElESUlEb3duY2FsbChjb25zdCBjaGFyKiwgYm9vbCwgQ09SQkE6Ok5WTGlzdF9wdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6Ok5hbWVkVmFsdWVf
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpFeGNl
cHRpb25MaXN0X3B0cik7CgoKCgogICAgc3RhdGljIE91dHB1dFN0cmVhbV9wdHIgX09CX3ByZU1h
cnNoYWwoRG93bmNhbGxfcHRyKTsKICAgIHN0YXRpYyB2b2lkIF9PQl9tYXJzaGFsRXgoRG93bmNh
bGxfcHRyLCBjb25zdCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uJik7CiAgICBzdGF0aWMgdm9pZCBf
T0JfcG9zdE1hcnNoYWwoRG93bmNhbGxfcHRyKTsKCgoKCiAgICBzdGF0aWMgdm9pZCBfT0JfcmVx
dWVzdChEb3duY2FsbF9wdHIpOwogICAgc3RhdGljIHZvaWQgX09CX29uZXdheShEb3duY2FsbF9w
dHIpOwogICAgc3RhdGljIHZvaWQgX09CX2RlZmVycmVkKERvd25jYWxsX3B0cik7CiAgICBzdGF0
aWMgdm9pZCBfT0JfcmVzcG9uc2UoRG93bmNhbGxfcHRyKTsKICAgIHN0YXRpYyBib29sIF9PQl9w
b2xsKERvd25jYWxsX3B0cik7CgoKCgogICAgc3RhdGljIElucHV0U3RyZWFtX3B0ciBfT0JfcHJl
VW5tYXJzaGFsKERvd25jYWxsX3B0cik7CiAgICBzdGF0aWMgSW5wdXRTdHJlYW1fcHRyIF9PQl9w
cmVVbm1hcnNoYWwoRG93bmNhbGxfcHRyLCBib29sJik7CiAgICBzdGF0aWMgdm9pZCBfT0JfdW5t
YXJzaGFsRXgoRG93bmNhbGxfcHRyLCBjb25zdCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uJik7CiAg
ICBzdGF0aWMgdm9pZCBfT0JfcG9zdFVubWFyc2hhbChEb3duY2FsbF9wdHIpOwoKCgoKICAgIHN0
YXRpYyBjaGFyKiBfT0JfdW5tYXJzaGFsRXhjZXB0aW9uSWQoRG93bmNhbGxfcHRyKTsKICAgIHN0
YXRpYyB2b2lkIF9PQl9zZXRVc2VyRXhjZXB0aW9uKERvd25jYWxsX3B0ciwgQ09SQkE6OlVzZXJF
eGNlcHRpb24qLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciopOwogICAgc3RhdGljIHZvaWQgX09CX3NldFVzZXJFeGNlcHRpb24oRG93bmNhbGxfcHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ09SQkE6OlVzZXJFeGNl
cHRpb24mKTsKCgoKCiAgICB2b2lkIF9PQl9oYW5kbGVGYWlsdXJlRXhjZXB0aW9uKERvd25jYWxs
X3B0ciwgY29uc3QgRmFpbHVyZUV4Y2VwdGlvbiYpOwoKCgoKICAgIGZyaWVuZCBjbGFzcyA6OkNP
UkJBOjpSZXF1ZXN0OwoKcHVibGljOgoKICAgIE1hcnNoYWxTdHViSW1wbCgpOwogICAgdmlydHVh
bCB+TWFyc2hhbFN0dWJJbXBsKCk7CgogICAgc3RhdGljIGlubGluZSBNYXJzaGFsU3R1YkltcGxf
cHRyIF9kdXBsaWNhdGUoTWFyc2hhbFN0dWJJbXBsX3B0ciBwKQogICAgeyBpZihwKSBwIC0+IF9P
Ql9pbmNSZWYoKTsgcmV0dXJuIHA7IH0KICAgIHN0YXRpYyBpbmxpbmUgTWFyc2hhbFN0dWJJbXBs
X3B0ciBfbmlsKCkKICAgIHsgcmV0dXJuIDA7IH0KCiAgICB2aXJ0dWFsIENPUkJBOjpJbnRlcmZh
Y2VEZWZfcHRyIF9nZXRfaW50ZXJmYWNlKCk7CiAgICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9p
c19hKGNvbnN0IGNoYXIqKTsKICAgIHZpcnR1YWwgQ09SQkE6OkJvb2xlYW4gX25vbl9leGlzdGVu
dCgpOwoKICAgIHZpcnR1YWwgT0NJOjpDb25uZWN0b3JJbmZvX3B0ciBfZ2V0X29jaV9jb25uZWN0
b3JfaW5mbygpOwogICAgdmlydHVhbCBPQ0k6OlRyYW5zcG9ydEluZm9fcHRyIF9nZXRfb2NpX3Ry
YW5zcG9ydF9pbmZvKCk7CgoKCgoKICAgIHZvaWQgX09CX3NldHVwKE9SQkluc3RhbmNlX3B0ciwg
UmVmQ291bnRJT1JfcHRyLCBSZWZDb3VudElPUl9wdHIsCiAgICAgICAgICAgICAgICAgICBSZWZD
b3VudFBvbGljeUxpc3RfcHRyKTsKfTsKCn0KCm5hbWVzcGFjZSBDT1JCQQp7CgppbmxpbmUgdm9p
ZApyZWxlYXNlKE9COjpNYXJzaGFsU3R1YkltcGxfcHRyIHApCnsKICAgIGlmKHApCiAgICAgICAg
cCAtPiBfT0JfZGVjUmVmKCk7Cn0KCmlubGluZSBCb29sZWFuCmlzX25pbChPQjo6TWFyc2hhbFN0
dWJJbXBsX3B0ciBwKQp7CiAgICByZXR1cm4gcCA9PSAwOwp9Cgp9CiMgMTkgIi9ob21lL21hdHQv
b2IvaW5jbHVkZS9PQi9DT1JCQUNsaWVudC5oIiAyCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRl
L09CL1BJQXJncy5oIiAxCiMgMTQgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9QSUFyZ3MuaCIK
IyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVHlwZUNvZGVfZndkLmgiIDEKIyAxNSAiL2hv
bWUvbWF0dC9vYi9pbmNsdWRlL09CL1BJQXJncy5oIiAyCgpuYW1lc3BhY2UgT0IKewoKCgoKCnN0
cnVjdCBQYXJhbWV0ZXJEZXNjCnsKICAgIHZvaWQqIHBhcmFtOwogICAgQ09SQkE6OlR5cGVDb2Rl
X3B0ciB0YzsKICAgIGNvbnN0IE9COjpDb25zdHJ1Y3RlZEluZm8qIGluZm87CiAgICBpbnQgbW9k
ZTsKfTsKCn0KIyAyMCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0NPUkJBQ2xpZW50LmgiIDIK
IyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvQWJzdHJhY3RCYXNlLmgiIDEKIyAxNCAiL2hv
bWUvbWF0dC9vYi9pbmNsdWRlL09CL0Fic3RyYWN0QmFzZS5oIgojIDEgIi9ob21lL21hdHQvb2Iv
aW5jbHVkZS9PQi9PYmplY3RfZndkLmgiIDEKIyAxNSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09C
L0Fic3RyYWN0QmFzZS5oIiAyCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0Fic3RyYWN0
QmFzZV9md2QuaCIgMQojIDE2ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvQWJzdHJhY3RCYXNl
LmgiIDIKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVmFsdWVCYXNlX2Z3ZC5oIiAxCiMg
MTcgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9BYnN0cmFjdEJhc2UuaCIgMgoKIyAxICIvaG9t
ZS9tYXR0L29iL2luY2x1ZGUvT0IvQW55RGVjbGFyYXRpb24uaCIgMQojIDE5ICIvaG9tZS9tYXR0
L29iL2luY2x1ZGUvT0IvQWJzdHJhY3RCYXNlLmgiIDIKCm5hbWVzcGFjZSBPQgp7CgpjbGFzcyBB
YnN0cmFjdEJhc2VJbmZvIDogcHVibGljIENvbnN0cnVjdGVkSW5mbwp7CnB1YmxpYzoKCiAgICBB
YnN0cmFjdEJhc2VJbmZvKCkgeyB9CiAgICB2aXJ0dWFsIH5BYnN0cmFjdEJhc2VJbmZvKCkgeyB9
CgoKCgogICAgdmlydHVhbCB2b2lkIGZyZWUodm9pZCopIGNvbnN0OwogICAgdmlydHVhbCB2b2lk
KiBkdXAoY29uc3Qgdm9pZCopIGNvbnN0OwoKCgoKICAgIHZpcnR1YWwgdm9pZCBtYXJzaGFsKGNv
bnN0IHZvaWQqLCBPdXRwdXRTdHJlYW1JbXBsKikgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgdW5t
YXJzaGFsKHZvaWQqLCBJbnB1dFN0cmVhbUltcGwqKSBjb25zdDsKfTsKCn0KCm5hbWVzcGFjZSBD
T1JCQQp7CgpjbGFzcyBBYnN0cmFjdEJhc2UKewoKCgogICAgdm9pZCBvcGVyYXRvcj0oY29uc3Qg
QWJzdHJhY3RCYXNlJik7CiMgNjMgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9BYnN0cmFjdEJh
c2UuaCIKcHJvdGVjdGVkOgoKICAgIEFic3RyYWN0QmFzZSgpOwogICAgQWJzdHJhY3RCYXNlKGNv
bnN0IEFic3RyYWN0QmFzZSYpOwoKICAgIHZpcnR1YWwgfkFic3RyYWN0QmFzZSgpID0gMDsKCnB1
YmxpYzoKCiAgICBzdGF0aWMgT0I6OkFic3RyYWN0QmFzZUluZm8gX09CX2Fic3RyYWN0QmFzZUlu
Zm87CgogICAgc3RhdGljIEFic3RyYWN0QmFzZV9wdHIgX2R1cGxpY2F0ZShBYnN0cmFjdEJhc2Vf
cHRyKTsKICAgIHN0YXRpYyBBYnN0cmFjdEJhc2VfcHRyIF9uYXJyb3coQWJzdHJhY3RCYXNlX3B0
cik7CiAgICBzdGF0aWMgQWJzdHJhY3RCYXNlX3B0ciBfbmlsKCk7CgogICAgdmlydHVhbCBPYmpl
Y3RfcHRyIF90b19vYmplY3QoKTsKICAgIHZpcnR1YWwgVmFsdWVCYXNlKiBfdG9fdmFsdWUoKTsK
fTsKCkJvb2xlYW4gaXNfbmlsKEFic3RyYWN0QmFzZV9wdHIpOwp2b2lkIHJlbGVhc2UoQWJzdHJh
Y3RCYXNlX3B0cik7Cgp9CgoKCgoKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgQ09SQkE6
OkFic3RyYWN0QmFzZV9wdHIqKTsKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgQ09SQkE6
OkFic3RyYWN0QmFzZV9wdHIpOwoKaW5saW5lIHZvaWQKb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92
YXImIGFueSwgQ09SQkE6OkFic3RyYWN0QmFzZV9wdHIqIHZhbCkKewogICAgYW55Lmlub3V0KCkg
PDw9IHZhbDsKfQoKaW5saW5lIHZvaWQKb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImIGFueSwg
Q09SQkE6OkFic3RyYWN0QmFzZV9wdHIgdmFsKQp7CiAgICBhbnkuaW5vdXQoKSA8PD0gdmFsOwp9
CiMgMjEgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9DT1JCQUNsaWVudC5oIiAyCiMgMSAiL2hv
bWUvbWF0dC9vYi9pbmNsdWRlL09CL1ZhbHVlQmFzZS5oIiAxCiMgMTQgIi9ob21lL21hdHQvb2Iv
aW5jbHVkZS9PQi9WYWx1ZUJhc2UuaCIKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVmFs
dWVCYXNlX2Z3ZC5oIiAxCiMgMTUgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9WYWx1ZUJhc2Uu
aCIgMgojIDEgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9WYWx1ZUZhY3RvcnlCYXNlX2Z3ZC5o
IiAxCiMgMTQgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9WYWx1ZUZhY3RvcnlCYXNlX2Z3ZC5o
IgojIDEgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5oIiAxCiMgMTUgIi9ob21l
L21hdHQvb2IvaW5jbHVkZS9PQi9WYWx1ZUZhY3RvcnlCYXNlX2Z3ZC5oIiAyCgpuYW1lc3BhY2Ug
Q09SQkEKewoKY2xhc3MgVmFsdWVGYWN0b3J5QmFzZTsKCn0KCnZvaWQgT0JSZWxlYXNlKENPUkJB
OjpWYWx1ZUZhY3RvcnlCYXNlKik7CnZvaWQgT0JEdXBsaWNhdGUoQ09SQkE6OlZhbHVlRmFjdG9y
eUJhc2UqKTsKCm5hbWVzcGFjZSBDT1JCQQp7Cgp0eXBlZGVmIE9COjpPYmpWYXI8IFZhbHVlRmFj
dG9yeUJhc2UgPiBWYWx1ZUZhY3RvcnlCYXNlX3ZhcjsKCn0KIyAxNiAiL2hvbWUvbWF0dC9vYi9p
bmNsdWRlL09CL1ZhbHVlQmFzZS5oIiAyCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0Fi
c3RyYWN0QmFzZV9md2QuaCIgMQojIDE3ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVmFsdWVC
YXNlLmgiIDIKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvT1JCSW5zdGFuY2VfZndkLmgi
IDEKIyAxOCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1ZhbHVlQmFzZS5oIiAyCgojIDEgIi9o
b21lL21hdHQvb2IvaW5jbHVkZS9PQi9QT0FTZXJ2YW50QmFzZS5oIiAxCiMgMTQgIi9ob21lL21h
dHQvb2IvaW5jbHVkZS9PQi9QT0FTZXJ2YW50QmFzZS5oIgojIDEgIi9ob21lL21hdHQvb2IvaW5j
bHVkZS9PQi9UeXBlQ29kZUNvbnN0LmgiIDEKIyAxNSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09C
L1BPQVNlcnZhbnRCYXNlLmgiIDIKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvUE9BU2Vy
dmFudEJhc2VfZndkLmgiIDEKIyAxNCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1BPQVNlcnZh
bnRCYXNlX2Z3ZC5oIgojIDEgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5oIiAx
CiMgMTUgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9QT0FTZXJ2YW50QmFzZV9md2QuaCIgMgoK
bmFtZXNwYWNlIFBvcnRhYmxlU2VydmVyCnsKCmNsYXNzIFNlcnZhbnRCYXNlOwoKCn0KCnZvaWQg
T0JSZWxlYXNlKFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50QmFzZSopOwp2b2lkIE9CRHVwbGljYXRl
KFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50QmFzZSopOwoKbmFtZXNwYWNlIFBvcnRhYmxlU2VydmVy
CnsKCnR5cGVkZWYgT0I6Ok9ialZhcjwgU2VydmFudEJhc2UgPiBTZXJ2YW50QmFzZV92YXI7Cgp9
CiMgMTYgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9QT0FTZXJ2YW50QmFzZS5oIiAyCiMgMSAi
L2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL09iamVjdF9md2QuaCIgMQojIDE3ICIvaG9tZS9tYXR0
L29iL2luY2x1ZGUvT0IvUE9BU2VydmFudEJhc2UuaCIgMgojIDEgIi9ob21lL21hdHQvb2IvaW5j
bHVkZS9PQi9QT0FJbnRlcmZhY2VfZndkLmgiIDEKIyAxOCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRl
L09CL1BPQUludGVyZmFjZV9md2QuaCIKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVGVt
cGxhdGUuaCIgMQojIDE5ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvUE9BSW50ZXJmYWNlX2Z3
ZC5oIiAyCiMgMzAgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9QT0FJbnRlcmZhY2VfZndkLmgi
Cm5hbWVzcGFjZSBQb3J0YWJsZVNlcnZlcgp7CgpjbGFzcyBQT0E7CnR5cGVkZWYgUE9BKiBQT0Ff
cHRyOwp0eXBlZGVmIFBPQSogUE9BUmVmOwoKfQoKdm9pZCBPQkR1cGxpY2F0ZShQb3J0YWJsZVNl
cnZlcjo6UE9BX3B0cik7CnZvaWQgT0JSZWxlYXNlKFBvcnRhYmxlU2VydmVyOjpQT0FfcHRyKTsK
CnZvaWQgT0JNYXJzaGFsKFBvcnRhYmxlU2VydmVyOjpQT0FfcHRyLCBPQjo6T3V0cHV0U3RyZWFt
SW1wbCopOwp2b2lkIE9CVW5tYXJzaGFsKFBvcnRhYmxlU2VydmVyOjpQT0FfcHRyJiwgT0I6Oklu
cHV0U3RyZWFtSW1wbCopOwoKbmFtZXNwYWNlIFBvcnRhYmxlU2VydmVyCnsKCnR5cGVkZWYgT0I6
Ok9ialZhcjwgUE9BID4gUE9BX3ZhcjsKdHlwZWRlZiBPQjo6T2JqT3V0PCBQT0EgPiBQT0Ffb3V0
OwoKfQojIDE4ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvUE9BU2VydmFudEJhc2UuaCIgMgoj
IDEgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9VcGNhbGxfZndkLmgiIDEKIyAxNCAiL2hvbWUv
bWF0dC9vYi9pbmNsdWRlL09CL1VwY2FsbF9md2QuaCIKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1
ZGUvT0IvVGVtcGxhdGUuaCIgMQojIDE1ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVXBjYWxs
X2Z3ZC5oIiAyCgpuYW1lc3BhY2UgT0IKewoKY2xhc3MgVXBjYWxsOwp0eXBlZGVmIFVwY2FsbCog
VXBjYWxsX3B0cjsKCmNsYXNzIFBJVXBjYWxsOwp0eXBlZGVmIFBJVXBjYWxsKiBQSVVwY2FsbF9w
dHI7CgpjbGFzcyBVcGNhbGxSZXR1cm47CnR5cGVkZWYgVXBjYWxsUmV0dXJuKiBVcGNhbGxSZXR1
cm5fcHRyOwoKfQoKdm9pZCBPQkR1cGxpY2F0ZShPQjo6VXBjYWxsX3B0cik7CnZvaWQgT0JSZWxl
YXNlKE9COjpVcGNhbGxfcHRyKTsKCnZvaWQgT0JEdXBsaWNhdGUoT0I6OlBJVXBjYWxsX3B0cik7
CnZvaWQgT0JSZWxlYXNlKE9COjpQSVVwY2FsbF9wdHIpOwoKdm9pZCBPQkR1cGxpY2F0ZShPQjo6
VXBjYWxsUmV0dXJuX3B0cik7CnZvaWQgT0JSZWxlYXNlKE9COjpVcGNhbGxSZXR1cm5fcHRyKTsK
Cm5hbWVzcGFjZSBPQgp7Cgp0eXBlZGVmIE9COjpPYmpWYXI8IFVwY2FsbCA+IFVwY2FsbF92YXI7
Cgp0eXBlZGVmIE9COjpPYmpWYXI8IFBJVXBjYWxsID4gUElVcGNhbGxfdmFyOwoKdHlwZWRlZiBP
Qjo6T2JqVmFyPCBVcGNhbGxSZXR1cm4gPiBVcGNhbGxSZXR1cm5fdmFyOwoKfQojIDE5ICIvaG9t
ZS9tYXR0L29iL2luY2x1ZGUvT0IvUE9BU2VydmFudEJhc2UuaCIgMgojIDEgIi9ob21lL21hdHQv
b2IvaW5jbHVkZS9PQi9EaXJlY3RTdHViSW1wbF9md2QuaCIgMQojIDE0ICIvaG9tZS9tYXR0L29i
L2luY2x1ZGUvT0IvRGlyZWN0U3R1YkltcGxfZndkLmgiCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNs
dWRlL09CL1RlbXBsYXRlLmgiIDEKIyAxNSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0RpcmVj
dFN0dWJJbXBsX2Z3ZC5oIiAyCgpuYW1lc3BhY2UgT0IKewoKY2xhc3MgRGlyZWN0U3R1YkltcGw7
CnR5cGVkZWYgRGlyZWN0U3R1YkltcGwqIERpcmVjdFN0dWJJbXBsX3B0cjsKCmNsYXNzIERpcmVj
dFN0dWJJbXBsRmFjdG9yeTsKdHlwZWRlZiBEaXJlY3RTdHViSW1wbEZhY3RvcnkqIERpcmVjdFN0
dWJJbXBsRmFjdG9yeV9wdHI7Cgp9CgoKCgp2b2lkIE9CRHVwbGljYXRlKE9COjpEaXJlY3RTdHVi
SW1wbEZhY3RvcnlfcHRyKTsKdm9pZCBPQlJlbGVhc2UoT0I6OkRpcmVjdFN0dWJJbXBsRmFjdG9y
eV9wdHIpOwoKbmFtZXNwYWNlIE9CCnsKCgoKdHlwZWRlZiBPYmpWYXI8IERpcmVjdFN0dWJJbXBs
RmFjdG9yeSA+IERpcmVjdFN0dWJJbXBsRmFjdG9yeV92YXI7Cgp9CiMgMjAgIi9ob21lL21hdHQv
b2IvaW5jbHVkZS9PQi9QT0FTZXJ2YW50QmFzZS5oIiAyCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNs
dWRlL09CL0lGUjJfZndkLmgiIDEKIyAyMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1BPQVNl
cnZhbnRCYXNlLmgiIDIKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvT0JQT0FNYW5hZ2Vy
X2Z3ZC5oIiAxCiMgMjIgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9QT0FTZXJ2YW50QmFzZS5o
IiAyCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1N0cmVhbV9md2QuaCIgMQojIDIzICIv
aG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvUE9BU2VydmFudEJhc2UuaCIgMgoKIyAxICIvaG9tZS9t
YXR0L29iL2luY2x1ZGUvT0IvUElBcmdzLmgiIDEKIyAyNSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRl
L09CL1BPQVNlcnZhbnRCYXNlLmgiIDIKCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0Jh
c2ljLmgiIDEKIyAyNyAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1BPQVNlcnZhbnRCYXNlLmgi
IDIKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvRXhjZXB0LmgiIDEKIyAyOCAiL2hvbWUv
bWF0dC9vYi9pbmNsdWRlL09CL1BPQVNlcnZhbnRCYXNlLmgiIDIKCm5hbWVzcGFjZSBDT1JCQQp7
CgpjbGFzcyBTZXJ2ZXJSZXF1ZXN0OwoKCgoKdHlwZWRlZiBjaGFyKiBSZXBvc2l0b3J5SWQ7Cgp9
CgpuYW1lc3BhY2UgUG9ydGFibGVTZXJ2ZXIKewoKCgoKY2xhc3MgT0JVbmlxdWVfT2JqZWN0SWQ7
CnR5cGVkZWYgT0I6OkZpeFNlcTwgQ09SQkE6Ok9jdGV0LCBPQlVuaXF1ZV9PYmplY3RJZCA+IE9i
amVjdElkOwp0eXBlZGVmIE9COjpTZXFWYXI8IE9COjpGaXhTZXE8IENPUkJBOjpPY3RldCwgT0JV
bmlxdWVfT2JqZWN0SWQgPiA+CiAgICBPYmplY3RJZF92YXI7CgoKCgpjaGFyKiBPYmplY3RJZF90
b19zdHJpbmcoY29uc3QgT2JqZWN0SWQmKTsKQ09SQkE6OldDaGFyKiBPYmplY3RJZF90b193c3Ry
aW5nKGNvbnN0IE9iamVjdElkJik7CgpPYmplY3RJZCogc3RyaW5nX3RvX09iamVjdElkKGNvbnN0
IGNoYXIqKTsKT2JqZWN0SWQqIHdzdHJpbmdfdG9fT2JqZWN0SWQoY29uc3QgQ09SQkE6OldDaGFy
Kik7CgoKCgoKY2xhc3MgU2VydmFudEJhc2UKewojIDc2ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUv
T0IvUE9BU2VydmFudEJhc2UuaCIKcHJvdGVjdGVkOgoKCgoKICAgIHZvaWQgX09CX2Rpc3BhdGNo
QmFzZShPQjo6VXBjYWxsX3B0cik7CgoKCgogICAgc3RhdGljIENPUkJBOjpMb25nIF9PQl9maW5k
T3BlcmF0aW9uKE9COjpVcGNhbGxfcHRyLCBjb25zdCBjaGFyKltdLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyk7CgoKCgogICAgc3RhdGljIE9C
OjpJbnB1dFN0cmVhbV9wdHIgX09CX3ByZVVubWFyc2hhbChPQjo6VXBjYWxsX3B0cik7CiAgICBz
dGF0aWMgdm9pZCBfT0JfdW5tYXJzaGFsRXgoT0I6OlVwY2FsbF9wdHIsIGNvbnN0IENPUkJBOjpT
eXN0ZW1FeGNlcHRpb24mKTsKICAgIHN0YXRpYyB2b2lkIF9PQl9wb3N0VW5tYXJzaGFsKE9COjpV
cGNhbGxfcHRyKTsKCgoKCiAgICBzdGF0aWMgT0I6Ok91dHB1dFN0cmVhbV9wdHIgX09CX3ByZU1h
cnNoYWwoT0I6OlVwY2FsbF9wdHIpOwogICAgc3RhdGljIHZvaWQgX09CX21hcnNoYWxFeChPQjo6
VXBjYWxsX3B0ciwgY29uc3QgQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiYpOwogICAgc3RhdGljIHZv
aWQgX09CX3Bvc3RNYXJzaGFsKE9COjpVcGNhbGxfcHRyKTsKCgoKCiAgICBzdGF0aWMgdm9pZCBf
T0Jfc2V0QXJnRGVzYyhPQjo6VXBjYWxsX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgT0I6
OlBhcmFtZXRlckRlc2MqLCBDT1JCQTo6VUxvbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIE9C
OjpQYXJhbWV0ZXJEZXNjKiwKICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlR5cGVDb2Rl
X3B0ciosIENPUkJBOjpVTG9uZyk7CgoKCgogICAgZnJpZW5kIGNsYXNzIDo6Q09SQkE6OlNlcnZl
clJlcXVlc3Q7CgogICAgU2VydmFudEJhc2UoKSB7IH0KICAgIFNlcnZhbnRCYXNlKGNvbnN0IFNl
cnZhbnRCYXNlJikgeyB9CiAgICBTZXJ2YW50QmFzZSYgb3BlcmF0b3I9KGNvbnN0IFNlcnZhbnRC
YXNlJikgeyByZXR1cm4gKnRoaXM7IH0KCnB1YmxpYzoKCiAgICB2aXJ0dWFsIH5TZXJ2YW50QmFz
ZSgpIHsgfQoKICAgIHZpcnR1YWwgUE9BX3B0ciBfZGVmYXVsdF9QT0EoKTsKCiAgICB2aXJ0dWFs
IENPUkJBOjpJbnRlcmZhY2VEZWZfcHRyIF9nZXRfaW50ZXJmYWNlKCkKICAgICAgICB0aHJvdyhD
T1JCQTo6U3lzdGVtRXhjZXB0aW9uKTsKCiAgICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9pc19h
KGNvbnN0IGNoYXIqIGxvZ2ljYWxfdHlwZV9pZCkKICAgICAgICB0aHJvdyhDT1JCQTo6U3lzdGVt
RXhjZXB0aW9uKTsKCiAgICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9ub25fZXhpc3RlbnQoKQog
ICAgICAgIHRocm93KENPUkJBOjpTeXN0ZW1FeGNlcHRpb24pOwoKICAgIHZpcnR1YWwgQ09SQkE6
OlJlcG9zaXRvcnlJZCBfcHJpbWFyeV9pbnRlcmZhY2UoY29uc3QgT2JqZWN0SWQmLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQT0FfcHRyKSA9IDA7
CgogICAgdmlydHVhbCB2b2lkIF9hZGRfcmVmKCkgeyB9CiAgICB2aXJ0dWFsIHZvaWQgX3JlbW92
ZV9yZWYoKSB7IH0KCgoKCgogICAgdmlydHVhbCB2b2lkIF9PQl9kaXNwYXRjaChPQjo6VXBjYWxs
X3B0cikgPSAwOwoKICAgIENPUkJBOjpPYmplY3RfcHRyIF9PQl9jcmVhdGVSZWZlcmVuY2UoKTsK
ICAgIHZpcnR1YWwgT0I6OkRpcmVjdFN0dWJJbXBsX3B0ciBfT0JfY3JlYXRlRGlyZWN0U3R1Yklt
cGwoUE9BX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgT2JqZWN0SWQmKTsKICAgIHZpcnR1YWwgQ09SQkE6OlVMb25n
IF9PQl9nZXRSZWZDb3VudCgpOwoKICAgIHZpcnR1YWwgYm9vbCBfT0JfaGFzTmF0aXZlVHlwZXMo
KTsKfTsKCgoKCgpjbGFzcyBSZWZDb3VudFNlcnZhbnRCYXNlIDogcHVibGljIHZpcnR1YWwgU2Vy
dmFudEJhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdmlydHVhbCBPQjo6
UmVmQ291bnQKewpwcm90ZWN0ZWQ6CgogICAgUmVmQ291bnRTZXJ2YW50QmFzZSgpIHsgfQogICAg
UmVmQ291bnRTZXJ2YW50QmFzZShjb25zdCBSZWZDb3VudFNlcnZhbnRCYXNlJikgeyB9CiAgICBS
ZWZDb3VudFNlcnZhbnRCYXNlJgogICAgb3BlcmF0b3I9KGNvbnN0IFJlZkNvdW50U2VydmFudEJh
c2UmKSB7IHJldHVybiAqdGhpczsgfQoKcHVibGljOgoKICAgIHZpcnR1YWwgdm9pZCBfYWRkX3Jl
ZigpOwogICAgdmlydHVhbCB2b2lkIF9yZW1vdmVfcmVmKCk7CiAgICB2aXJ0dWFsIENPUkJBOjpV
TG9uZyBfT0JfZ2V0UmVmQ291bnQoKTsKfTsKCn0KIyAyMCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRl
L09CL1ZhbHVlQmFzZS5oIiAyCgpuYW1lc3BhY2UgT0IKewoKY2xhc3MgVmFsdWVCYXNlSW5mbyA6
IHB1YmxpYyBDb25zdHJ1Y3RlZEluZm8KewpwdWJsaWM6CgogICAgVmFsdWVCYXNlSW5mbygpIHsg
fQogICAgdmlydHVhbCB+VmFsdWVCYXNlSW5mbygpIHsgfQoKCgoKICAgIHZpcnR1YWwgdm9pZCBm
cmVlKHZvaWQqKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCogZHVwKGNvbnN0IHZvaWQqKSBjb25z
dDsKCgoKCiAgICB2aXJ0dWFsIHZvaWQgbWFyc2hhbChjb25zdCB2b2lkKiwgT3V0cHV0U3RyZWFt
SW1wbCopIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHVubWFyc2hhbCh2b2lkKiwgSW5wdXRTdHJl
YW1JbXBsKikgY29uc3Q7Cn07Cgp9CgpuYW1lc3BhY2UgQ09SQkEKewoKY2xhc3MgVmFsdWVCYXNl
CnsKCgoKICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFZhbHVlQmFzZSYpOwojIDY0ICIvaG9tZS9t
YXR0L29iL2luY2x1ZGUvT0IvVmFsdWVCYXNlLmgiCiAgICBzdGF0aWMgY29uc3QgY2hhciogX29i
X2lkXzsKICAgIHN0YXRpYyBjb25zdCBjaGFyKiBfb2JfdHJ1bmNhdGFibGVfaWRzX1tdOwoKcHJv
dGVjdGVkOgoKICAgIFZhbHVlQmFzZSgpOwogICAgVmFsdWVCYXNlKGNvbnN0IFZhbHVlQmFzZSYp
OwoKICAgIHZpcnR1YWwgflZhbHVlQmFzZSgpOwoKcHVibGljOgoKICAgIHN0YXRpYyBPQjo6VmFs
dWVCYXNlSW5mbyBfT0JfdmFsdWVCYXNlSW5mbzsKCiAgICB2aXJ0dWFsIFZhbHVlQmFzZSogX2Fk
ZF9yZWYoKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgX3JlbW92ZV9yZWYoKSA9IDA7CiAgICB2aXJ0
dWFsIFVMb25nIF9yZWZjb3VudF92YWx1ZSgpID0gMDsKICAgIHZpcnR1YWwgVmFsdWVCYXNlKiBf
Y29weV92YWx1ZSgpID0gMDsKCiAgICB2aXJ0dWFsIFZhbHVlRGVmX3B0ciBfZ2V0X3ZhbHVlX2Rl
ZigpOwoKICAgIHN0YXRpYyBWYWx1ZUJhc2UqIF9kb3duY2FzdChWYWx1ZUJhc2UqKTsKICAgIHN0
YXRpYyBWYWx1ZUJhc2UqIF9kb3duY2FzdChBYnN0cmFjdEJhc2VfcHRyKTsKCiAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqIF9PQl90eXBlSWQoKSBjb25zdDsKICAgIHN0YXRpYyBjb25zdCBjaGFyKiBf
T0JfaWQoKTsKICAgIHZpcnR1YWwgY29uc3QgY2hhcioqIF9PQl90cnVuY2F0YWJsZUlkcygpIGNv
bnN0OwoKICAgIHZpcnR1YWwgQm9vbGVhbiBfT0JfaXNDdXN0b20oKSBjb25zdDsKICAgIHZpcnR1
YWwgQm9vbGVhbiBfT0JfaXNUcnVuY2F0YWJsZSgpIGNvbnN0OwoKICAgIHZpcnR1YWwgQWJzdHJh
Y3RCYXNlX3B0ciBfT0JfdG9BYnN0cmFjdEJhc2UoKTsKCiAgICB2aXJ0dWFsIHZvaWQgX09CX21h
cnNoYWwoT0I6Ok91dHB1dFN0cmVhbUltcGwqKTsKICAgIHZpcnR1YWwgdm9pZCBfT0JfdW5tYXJz
aGFsKE9COjpJbnB1dFN0cmVhbUltcGwqKTsKCiAgICBzdGF0aWMgVmFsdWVCYXNlKiBfT0JfY3Jl
YXRlVmFsdWUoT0I6Ok9SQkluc3RhbmNlX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBPQjo6U3RyU2VxPCBpbnQgPiYsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciopOwogICAgc3RhdGljIFZhbHVlQmFzZSogX09C
X2NyZWF0ZVZhbHVlKENPUkJBOjpWYWx1ZUZhY3RvcnlCYXNlKik7Cn07CgppbmxpbmUgdm9pZAph
ZGRfcmVmKFZhbHVlQmFzZSogdmIpCnsKICAgIGlmKHZiICE9IDApCiAgICAgICAgdmIgLT4gX2Fk
ZF9yZWYoKTsKfQoKaW5saW5lIHZvaWQKcmVtb3ZlX3JlZihWYWx1ZUJhc2UqIHZiKQp7CiAgICBp
Zih2YiAhPSAwKQogICAgICAgIHZiIC0+IF9yZW1vdmVfcmVmKCk7Cn0KCmNsYXNzIERlZmF1bHRW
YWx1ZVJlZkNvdW50QmFzZSA6IHB1YmxpYyB2aXJ0dWFsIFZhbHVlQmFzZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZpcnR1YWwgT0I6OlJlZkNvdW50CnsKcHJpdmF0
ZToKCgoKCiAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBEZWZhdWx0VmFsdWVSZWZDb3VudEJhc2Um
KTsKCnByb3RlY3RlZDoKCiAgICBEZWZhdWx0VmFsdWVSZWZDb3VudEJhc2UoKTsKICAgIERlZmF1
bHRWYWx1ZVJlZkNvdW50QmFzZShjb25zdCBEZWZhdWx0VmFsdWVSZWZDb3VudEJhc2UmKTsKICAg
IHZpcnR1YWwgfkRlZmF1bHRWYWx1ZVJlZkNvdW50QmFzZSgpOwoKcHVibGljOgoKICAgIHZpcnR1
YWwgVmFsdWVCYXNlKiBfYWRkX3JlZigpOwogICAgdmlydHVhbCB2b2lkIF9yZW1vdmVfcmVmKCk7
CiAgICB2aXJ0dWFsIFVMb25nIF9yZWZjb3VudF92YWx1ZSgpOwp9OwoKfQoKbmFtZXNwYWNlIE9C
CnsKCgoKCgoKY2xhc3MgVmFsdWVSZWZDb3VudEJhc2VIZWxwZXIgOiBwdWJsaWMgdmlydHVhbCBD
T1JCQTo6VmFsdWVCYXNlCnsKcHJpdmF0ZToKCgoKCiAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBW
YWx1ZVJlZkNvdW50QmFzZUhlbHBlciYpOwoKICAgIHZpcnR1YWwgdm9pZCBzZXJ2YW50QWRkUmVm
SW1wbCgpID0gMDsKCnB1YmxpYzoKCiAgICB2aXJ0dWFsIENPUkJBOjpWYWx1ZUJhc2UqIF9hZGRf
cmVmKCkKICAgIHsKICAgICAgICBzZXJ2YW50QWRkUmVmSW1wbCgpOwogICAgICAgIHJldHVybiB0
aGlzOwogICAgfQp9OwoKfQoKbmFtZXNwYWNlIFBvcnRhYmxlU2VydmVyCnsKCgoKCgpjbGFzcyBW
YWx1ZVJlZkNvdW50QmFzZSA6IHB1YmxpYyB2aXJ0dWFsIE9COjpWYWx1ZVJlZkNvdW50QmFzZUhl
bHBlciwKICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdmlydHVhbCBSZWZDb3VudFNl
cnZhbnRCYXNlCnsKcHJpdmF0ZToKCgoKCiAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBWYWx1ZVJl
ZkNvdW50QmFzZSYpOwoKICAgIHZpcnR1YWwgdm9pZCBzZXJ2YW50QWRkUmVmSW1wbCgpOwoKcHJv
dGVjdGVkOgoKICAgIFZhbHVlUmVmQ291bnRCYXNlKCk7CiAgICBWYWx1ZVJlZkNvdW50QmFzZShj
b25zdCBWYWx1ZVJlZkNvdW50QmFzZSYpOwogICAgdmlydHVhbCB+VmFsdWVSZWZDb3VudEJhc2Uo
KTsKCnB1YmxpYzoKCiAgICB2aXJ0dWFsIHZvaWQgX3JlbW92ZV9yZWYoKTsKICAgIHZpcnR1YWwg
Q09SQkE6OlVMb25nIF9yZWZjb3VudF92YWx1ZSgpOwp9OwoKfQojIDIyICIvaG9tZS9tYXR0L29i
L2luY2x1ZGUvT0IvQ09SQkFDbGllbnQuaCIgMgojIDEgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9P
Qi9WYWx1ZUZhY3RvcnlCYXNlLmgiIDEKIyAxNCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1Zh
bHVlRmFjdG9yeUJhc2UuaCIKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVmFsdWVGYWN0
b3J5QmFzZV9md2QuaCIgMQojIDE1ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVmFsdWVGYWN0
b3J5QmFzZS5oIiAyCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1ZhbHVlQmFzZV9md2Qu
aCIgMQojIDE2ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvVmFsdWVGYWN0b3J5QmFzZS5oIiAy
CgpuYW1lc3BhY2UgQ09SQkEKewoKY2xhc3MgVmFsdWVGYWN0b3J5QmFzZSA6IHB1YmxpYyB2aXJ0
dWFsIE9COjpSZWZDb3VudAp7CiAgICB2aXJ0dWFsIFZhbHVlQmFzZSogY3JlYXRlX2Zvcl91bm1h
cnNoYWwoKSA9IDA7CiAgICBmcmllbmQgY2xhc3MgQ09SQkE6OlZhbHVlQmFzZTsKCnByb3RlY3Rl
ZDoKCiAgICBWYWx1ZUZhY3RvcnlCYXNlKCk7CgpwdWJsaWM6CgogICAgdmlydHVhbCB+VmFsdWVG
YWN0b3J5QmFzZSgpOwogICAgdmlydHVhbCB2b2lkIF9hZGRfcmVmKCk7CiAgICB2aXJ0dWFsIHZv
aWQgX3JlbW92ZV9yZWYoKTsKCiAgICBzdGF0aWMgVmFsdWVGYWN0b3J5QmFzZSogX2Rvd25jYXN0
KFZhbHVlRmFjdG9yeUJhc2UqKTsKCiAgICBzdHJ1Y3QgQm9vbGVhblZhbHVlCiAgICB7CiAgICAg
ICAgQm9vbGVhblZhbHVlKEJvb2xlYW4gYikgOiB2YWx1ZShiKSB7fQogICAgICAgIEJvb2xlYW4g
dmFsdWU7CiAgICB9OwoKICAgIHN0cnVjdCBDaGFyVmFsdWUKICAgIHsKICAgICAgICBDaGFyVmFs
dWUoQ2hhciBjKSA6IHZhbHVlKGMpIHt9CiAgICAgICAgQ2hhciB2YWx1ZTsKICAgIH07CgogICAg
c3RydWN0IE9jdGV0VmFsdWUKICAgIHsKICAgICAgICBPY3RldFZhbHVlKE9jdGV0IG8pIDogdmFs
dWUobykge30KICAgICAgICBPY3RldCB2YWx1ZTsKICAgIH07CgogICAgc3RydWN0IFdDaGFyVmFs
dWUKICAgIHsKICAgICAgICBXQ2hhclZhbHVlKFdDaGFyIHdjKSA6IHZhbHVlKHdjKSB7fQogICAg
ICAgIFdDaGFyIHZhbHVlOwogICAgfTsKfTsKCnR5cGVkZWYgVmFsdWVGYWN0b3J5QmFzZSogVmFs
dWVGYWN0b3J5OwoKfQojIDIzICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvQ09SQkFDbGllbnQu
aCIgMgojIDEgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9DdXN0b20uaCIgMQojIDI3ICIvaG9t
ZS9tYXR0L29iL2luY2x1ZGUvT0IvQ3VzdG9tLmgiCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRl
L09CL1R5cGVzLmgiIDEKIyAyOCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0N1c3RvbS5oIiAy
CiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL05hdGl2ZS5oIiAxCiMgMzcgIi9ob21lL21h
dHQvb2IvaW5jbHVkZS9PQi9OYXRpdmUuaCIKbmFtZXNwYWNlIENPUkJBCnsKCn0KCm5hbWVzcGFj
ZSBDT1JCQQp7Cgp9CgpuYW1lc3BhY2UgT0JTdHViSW1wbF9DT1JCQQp7Cgp9CgpuYW1lc3BhY2Ug
T0JTdHViSW1wbF9DT1JCQQp7Cgp9CgoKCgpuYW1lc3BhY2UgQ09SQkEKewoKCgoKdHlwZWRlZiBP
Qk5hdGl2ZV9DT1JCQTo6VmFsdWVGYWN0b3J5IFZhbHVlRmFjdG9yeTsKCn0KCgoKCm5hbWVzcGFj
ZSBPQlN0dWJJbXBsX0NPUkJBCnsKCn0KCgoKCm5hbWVzcGFjZSBPQk1hcnNoYWxTdHViSW1wbF9D
T1JCQQp7Cgp9CgoKCgpuYW1lc3BhY2UgT0JWX0NPUkJBCnsKCn0KIyAyOSAiL2hvbWUvbWF0dC9v
Yi9pbmNsdWRlL09CL0N1c3RvbS5oIiAyCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0N1
c3RvbV9md2QuaCIgMQojIDE4ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvQ3VzdG9tX2Z3ZC5o
IgojIDEgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UZW1wbGF0ZS5oIiAxCiMgMTkgIi9ob21l
L21hdHQvb2IvaW5jbHVkZS9PQi9DdXN0b21fZndkLmgiIDIKIyAzMCAiL2hvbWUvbWF0dC9vYi9p
bmNsdWRlL09CL0N1c3RvbV9md2QuaCIKbmFtZXNwYWNlIENPUkJBCnsKCmNsYXNzIERhdGFPdXRw
dXRTdHJlYW07CgpjbGFzcyBEYXRhSW5wdXRTdHJlYW07CgpjbGFzcyBDdXN0b21NYXJzaGFsOwoK
fQoKdm9pZCBPQkR1cGxpY2F0ZShDT1JCQTo6RGF0YU91dHB1dFN0cmVhbSopOwp2b2lkIE9CUmVs
ZWFzZShDT1JCQTo6RGF0YU91dHB1dFN0cmVhbSopOwoKdm9pZCBPQk1hcnNoYWwoQ09SQkE6OkRh
dGFPdXRwdXRTdHJlYW0qLCBPQjo6T3V0cHV0U3RyZWFtSW1wbCopOwp2b2lkIE9CVW5tYXJzaGFs
KENPUkJBOjpEYXRhT3V0cHV0U3RyZWFtKiYsIE9COjpJbnB1dFN0cmVhbUltcGwqKTsKCnZvaWQg
T0JEdXBsaWNhdGUoQ09SQkE6OkRhdGFJbnB1dFN0cmVhbSopOwp2b2lkIE9CUmVsZWFzZShDT1JC
QTo6RGF0YUlucHV0U3RyZWFtKik7Cgp2b2lkIE9CTWFyc2hhbChDT1JCQTo6RGF0YUlucHV0U3Ry
ZWFtKiwgT0I6Ok91dHB1dFN0cmVhbUltcGwqKTsKdm9pZCBPQlVubWFyc2hhbChDT1JCQTo6RGF0
YUlucHV0U3RyZWFtKiYsIE9COjpJbnB1dFN0cmVhbUltcGwqKTsKCnZvaWQgT0JEdXBsaWNhdGUo
Q09SQkE6OkN1c3RvbU1hcnNoYWwqKTsKdm9pZCBPQlJlbGVhc2UoQ09SQkE6OkN1c3RvbU1hcnNo
YWwqKTsKCnZvaWQgT0JNYXJzaGFsKENPUkJBOjpDdXN0b21NYXJzaGFsKiwgT0I6Ok91dHB1dFN0
cmVhbUltcGwqKTsKdm9pZCBPQlVubWFyc2hhbChDT1JCQTo6Q3VzdG9tTWFyc2hhbComLCBPQjo6
SW5wdXRTdHJlYW1JbXBsKik7CgpuYW1lc3BhY2UgQ09SQkEKewoKdHlwZWRlZiBPQjo6T2JqVmFy
PCBEYXRhT3V0cHV0U3RyZWFtID4gRGF0YU91dHB1dFN0cmVhbV92YXI7CnR5cGVkZWYgT0I6Ok9i
ak91dDwgRGF0YU91dHB1dFN0cmVhbSA+IERhdGFPdXRwdXRTdHJlYW1fb3V0OwoKdHlwZWRlZiBP
Qjo6T2JqVmFyPCBEYXRhSW5wdXRTdHJlYW0gPiBEYXRhSW5wdXRTdHJlYW1fdmFyOwp0eXBlZGVm
IE9COjpPYmpPdXQ8IERhdGFJbnB1dFN0cmVhbSA+IERhdGFJbnB1dFN0cmVhbV9vdXQ7Cgp0eXBl
ZGVmIE9COjpPYmpWYXI8IEN1c3RvbU1hcnNoYWwgPiBDdXN0b21NYXJzaGFsX3ZhcjsKdHlwZWRl
ZiBPQjo6T2JqT3V0PCBDdXN0b21NYXJzaGFsID4gQ3VzdG9tTWFyc2hhbF9vdXQ7Cgp9CiMgMzAg
Ii9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9DdXN0b20uaCIgMgojIDQxICIvaG9tZS9tYXR0L29i
L2luY2x1ZGUvT0IvQ3VzdG9tLmgiCm5hbWVzcGFjZSBPQlN0dWJJbXBsX0NPUkJBCnsKCn0KCm5h
bWVzcGFjZSBPQlN0dWJJbXBsX0NPUkJBCnsKCn0KCgoKCm5hbWVzcGFjZSBDT1JCQQp7CgoKCgpj
bGFzcyBEYXRhT3V0cHV0U3RyZWFtIDogdmlydHVhbCBwdWJsaWMgQ09SQkE6OlZhbHVlQmFzZQp7
CiAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBEYXRhT3V0cHV0U3RyZWFtJik7CgogICAgc3RhdGlj
IGNvbnN0IGNoYXIqIF9vYl9pZF87Cgpwcm90ZWN0ZWQ6CgogICAgRGF0YU91dHB1dFN0cmVhbSgp
IHsgfQogICAgdmlydHVhbCB+RGF0YU91dHB1dFN0cmVhbSgpIHsgfQoKcHVibGljOgoKICAgIHR5
cGVkZWYgRGF0YU91dHB1dFN0cmVhbV92YXIgX3Zhcl90eXBlOwoKICAgIHN0YXRpYyBEYXRhT3V0
cHV0U3RyZWFtKiBfZG93bmNhc3QoQ09SQkE6OlZhbHVlQmFzZSopOwogICAgc3RhdGljIERhdGFP
dXRwdXRTdHJlYW0qIF9kb3duY2FzdChDT1JCQTo6QWJzdHJhY3RCYXNlX3B0cik7CgoKCgogICAg
dmlydHVhbCB2b2lkIHdyaXRlX2FueShjb25zdCBDT1JCQTo6QW55JiB2YWx1ZSkgPSAwOwoKCgoK
ICAgIHZpcnR1YWwgdm9pZCB3cml0ZV9ib29sZWFuKENPUkJBOjpCb29sZWFuIHZhbHVlKSA9IDA7
CgoKCgogICAgdmlydHVhbCB2b2lkIHdyaXRlX2NoYXIoQ09SQkE6OkNoYXIgdmFsdWUpID0gMDsK
CgoKCiAgICB2aXJ0dWFsIHZvaWQgd3JpdGVfd2NoYXIoQ09SQkE6OldDaGFyIHZhbHVlKSA9IDA7
CgoKCgogICAgdmlydHVhbCB2b2lkIHdyaXRlX29jdGV0KENPUkJBOjpPY3RldCB2YWx1ZSkgPSAw
OwoKCgoKICAgIHZpcnR1YWwgdm9pZCB3cml0ZV9zaG9ydChDT1JCQTo6U2hvcnQgdmFsdWUpID0g
MDsKCgoKCiAgICB2aXJ0dWFsIHZvaWQgd3JpdGVfdXNob3J0KENPUkJBOjpVU2hvcnQgdmFsdWUp
ID0gMDsKCgoKCiAgICB2aXJ0dWFsIHZvaWQgd3JpdGVfbG9uZyhDT1JCQTo6TG9uZyB2YWx1ZSkg
PSAwOwoKCgoKICAgIHZpcnR1YWwgdm9pZCB3cml0ZV91bG9uZyhDT1JCQTo6VUxvbmcgdmFsdWUp
ID0gMDsKCgoKCiAgICB2aXJ0dWFsIHZvaWQgd3JpdGVfbG9uZ2xvbmcoQ09SQkE6OkxvbmdMb25n
IHZhbHVlKSA9IDA7CgoKCgogICAgdmlydHVhbCB2b2lkIHdyaXRlX3Vsb25nbG9uZyhDT1JCQTo6
VUxvbmdMb25nIHZhbHVlKSA9IDA7CgoKCgogICAgdmlydHVhbCB2b2lkIHdyaXRlX2Zsb2F0KENP
UkJBOjpGbG9hdCB2YWx1ZSkgPSAwOwoKCgoKICAgIHZpcnR1YWwgdm9pZCB3cml0ZV9kb3VibGUo
Q09SQkE6OkRvdWJsZSB2YWx1ZSkgPSAwOwoKCgoKICAgIHZpcnR1YWwgdm9pZCB3cml0ZV9sb25n
ZG91YmxlKENPUkJBOjpMb25nRG91YmxlIHZhbHVlKSA9IDA7CgoKCgogICAgdmlydHVhbCB2b2lk
IHdyaXRlX3N0cmluZyhjb25zdCBjaGFyKiB2YWx1ZSkgPSAwOwoKCgoKICAgIHZpcnR1YWwgdm9p
ZCB3cml0ZV93c3RyaW5nKGNvbnN0IENPUkJBOjpXQ2hhciogdmFsdWUpID0gMDsKCgoKCiAgICB2
aXJ0dWFsIHZvaWQgd3JpdGVfT2JqZWN0KENPUkJBOjpPYmplY3RfcHRyIHZhbHVlKSA9IDA7CgoK
CgogICAgdmlydHVhbCB2b2lkIHdyaXRlX0Fic3RyYWN0KEFic3RyYWN0QmFzZV9wdHIgdmFsdWUp
ID0gMDsKCgoKCiAgICB2aXJ0dWFsIHZvaWQgd3JpdGVfVmFsdWUoQ09SQkE6OlZhbHVlQmFzZSog
dmFsdWUpID0gMDsKCgoKCiAgICB2aXJ0dWFsIHZvaWQgd3JpdGVfVHlwZUNvZGUoQ09SQkE6OlR5
cGVDb2RlX3B0ciB2YWx1ZSkgPSAwOwoKCgoKICAgIHZpcnR1YWwgdm9pZCB3cml0ZV9hbnlfYXJy
YXkoY29uc3QgQW55U2VxJiBzZXEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENP
UkJBOjpVTG9uZyBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJB
OjpVTG9uZyBsZW5ndGgpID0gMDsKCgoKCiAgICB2aXJ0dWFsIHZvaWQgd3JpdGVfYm9vbGVhbl9h
cnJheShjb25zdCBCb29sZWFuU2VxJiBzZXEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDT1JCQTo6VUxvbmcgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCkgPSAwOwoKCgoKICAgIHZpcnR1YWwgdm9pZCB3
cml0ZV9jaGFyX2FycmF5KGNvbnN0IENoYXJTZXEmIHNlcSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoKSA9IDA7CgoKCgogICAgdmlydHVhbCB2b2lk
IHdyaXRlX3djaGFyX2FycmF5KGNvbnN0IFdDaGFyU2VxJiBzZXEsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIG9mZnNldCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoKSA9IDA7CgoKCgogICAgdmlydHVh
bCB2b2lkIHdyaXRlX29jdGV0X2FycmF5KGNvbnN0IE9jdGV0U2VxJiBzZXEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIG9mZnNldCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoKSA9IDA7CgoKCgogICAg
dmlydHVhbCB2b2lkIHdyaXRlX3Nob3J0X2FycmF5KGNvbnN0IFNob3J0U2VxJiBzZXEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIG9mZnNldCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoKSA9IDA7CgoK
CgogICAgdmlydHVhbCB2b2lkIHdyaXRlX3VzaG9ydF9hcnJheShjb25zdCBVU2hvcnRTZXEmIHNl
cSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIG9mZnNl
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0
aCkgPSAwOwoKCgoKICAgIHZpcnR1YWwgdm9pZCB3cml0ZV9sb25nX2FycmF5KGNvbnN0IExvbmdT
ZXEmIHNlcSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBv
ZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6VUxvbmcgbGVu
Z3RoKSA9IDA7CgoKCgogICAgdmlydHVhbCB2b2lkIHdyaXRlX3Vsb25nX2FycmF5KGNvbnN0IFVM
b25nU2VxJiBzZXEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVM
b25nIG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6VUxv
bmcgbGVuZ3RoKSA9IDA7CgoKCgogICAgdmlydHVhbCB2b2lkIHdyaXRlX3Vsb25nbG9uZ19hcnJh
eShjb25zdCBVTG9uZ0xvbmdTZXEmIHNlcSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ09SQkE6OlVMb25nIG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCkgPSAwOwoKCgoKICAgIHZpcnR1YWwgdm9p
ZCB3cml0ZV9sb25nbG9uZ19hcnJheShjb25zdCBMb25nTG9uZ1NlcSYgc2VxLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBvZmZzZXQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCkgPSAwOwoK
CgoKICAgIHZpcnR1YWwgdm9pZCB3cml0ZV9mbG9hdF9hcnJheShjb25zdCBGbG9hdFNlcSYgc2Vx
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBvZmZzZXQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCkg
PSAwOwoKCgoKICAgIHZpcnR1YWwgdm9pZCB3cml0ZV9kb3VibGVfYXJyYXkoY29uc3QgRG91Ymxl
U2VxJiBzZXEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9u
ZyBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9u
ZyBsZW5ndGgpID0gMDsKCiAgICBzdGF0aWMgY29uc3QgY2hhciogX09CX2lkKCk7CgogICAgdmly
dHVhbCBjb25zdCBjaGFyKiBfT0JfdHlwZUlkKCkgY29uc3Q7Cn07CgoKCgpjbGFzcyBEYXRhSW5w
dXRTdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBDT1JCQTo6VmFsdWVCYXNlCnsKICAgIHZvaWQgb3Bl
cmF0b3I9KGNvbnN0IERhdGFJbnB1dFN0cmVhbSYpOwoKICAgIHN0YXRpYyBjb25zdCBjaGFyKiBf
b2JfaWRfOwoKcHJvdGVjdGVkOgoKICAgIERhdGFJbnB1dFN0cmVhbSgpIHsgfQogICAgdmlydHVh
bCB+RGF0YUlucHV0U3RyZWFtKCkgeyB9CgpwdWJsaWM6CgogICAgdHlwZWRlZiBEYXRhSW5wdXRT
dHJlYW1fdmFyIF92YXJfdHlwZTsKCiAgICBzdGF0aWMgRGF0YUlucHV0U3RyZWFtKiBfZG93bmNh
c3QoQ09SQkE6OlZhbHVlQmFzZSopOwogICAgc3RhdGljIERhdGFJbnB1dFN0cmVhbSogX2Rvd25j
YXN0KENPUkJBOjpBYnN0cmFjdEJhc2VfcHRyKTsKCgoKCiAgICB2aXJ0dWFsIENPUkJBOjpBbnkq
IHJlYWRfYW55KCkgPSAwOwoKCgoKICAgIHZpcnR1YWwgQ09SQkE6OkJvb2xlYW4gcmVhZF9ib29s
ZWFuKCkgPSAwOwoKCgoKICAgIHZpcnR1YWwgQ09SQkE6OkNoYXIgcmVhZF9jaGFyKCkgPSAwOwoK
CgoKICAgIHZpcnR1YWwgQ09SQkE6OldDaGFyIHJlYWRfd2NoYXIoKSA9IDA7CgoKCgogICAgdmly
dHVhbCBDT1JCQTo6T2N0ZXQgcmVhZF9vY3RldCgpID0gMDsKCgoKCiAgICB2aXJ0dWFsIENPUkJB
OjpTaG9ydCByZWFkX3Nob3J0KCkgPSAwOwoKCgoKICAgIHZpcnR1YWwgQ09SQkE6OlVTaG9ydCBy
ZWFkX3VzaG9ydCgpID0gMDsKCgoKCiAgICB2aXJ0dWFsIENPUkJBOjpMb25nIHJlYWRfbG9uZygp
ID0gMDsKCgoKCiAgICB2aXJ0dWFsIENPUkJBOjpVTG9uZyByZWFkX3Vsb25nKCkgPSAwOwoKCgoK
ICAgIHZpcnR1YWwgQ09SQkE6OkxvbmdMb25nIHJlYWRfbG9uZ2xvbmcoKSA9IDA7CgoKCgogICAg
dmlydHVhbCBDT1JCQTo6VUxvbmdMb25nIHJlYWRfdWxvbmdsb25nKCkgPSAwOwoKCgoKICAgIHZp
cnR1YWwgQ09SQkE6OkZsb2F0IHJlYWRfZmxvYXQoKSA9IDA7CgoKCgogICAgdmlydHVhbCBDT1JC
QTo6RG91YmxlIHJlYWRfZG91YmxlKCkgPSAwOwoKCgoKICAgIHZpcnR1YWwgQ09SQkE6OkxvbmdE
b3VibGUgcmVhZF9sb25nZG91YmxlKCkgPSAwOwoKCgoKICAgIHZpcnR1YWwgY2hhciogcmVhZF9z
dHJpbmcoKSA9IDA7CgoKCgogICAgdmlydHVhbCBDT1JCQTo6V0NoYXIqIHJlYWRfd3N0cmluZygp
ID0gMDsKCgoKCiAgICB2aXJ0dWFsIENPUkJBOjpPYmplY3RfcHRyIHJlYWRfT2JqZWN0KCkgPSAw
OwoKCgoKICAgIHZpcnR1YWwgQWJzdHJhY3RCYXNlX3B0ciByZWFkX0Fic3RyYWN0KCkgPSAwOwoK
CgoKICAgIHZpcnR1YWwgQ09SQkE6OlZhbHVlQmFzZSogcmVhZF9WYWx1ZSgpID0gMDsKCgoKCiAg
ICB2aXJ0dWFsIENPUkJBOjpUeXBlQ29kZV9wdHIgcmVhZF9UeXBlQ29kZSgpID0gMDsKCgoKCiAg
ICB2aXJ0dWFsIHZvaWQgcmVhZF9hbnlfYXJyYXkoQW55U2VxJiBzZXEsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIG9mZnNldCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoKSA9IDA7CgoKCgogICAgdmlydHVhbCB2
b2lkIHJlYWRfYm9vbGVhbl9hcnJheShCb29sZWFuU2VxJiBzZXEsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBvZmZzZXQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgpID0gMDsKCgoKCiAgICB2aXJ0
dWFsIHZvaWQgcmVhZF9jaGFyX2FycmF5KENoYXJTZXEmIHNlcSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCkgPSAwOwoKCgoKICAgIHZpcnR1YWwgdm9p
ZCByZWFkX3djaGFyX2FycmF5KFdDaGFyU2VxJiBzZXEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDT1JCQTo6VUxvbmcgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCkgPSAwOwoKCgoKICAgIHZpcnR1YWwgdm9pZCBy
ZWFkX29jdGV0X2FycmF5KE9jdGV0U2VxJiBzZXEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDT1JCQTo6VUxvbmcgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCkgPSAwOwoKCgoKICAgIHZpcnR1YWwgdm9pZCByZWFk
X3Nob3J0X2FycmF5KFNob3J0U2VxJiBzZXEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDT1JCQTo6VUxvbmcgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ09SQkE6OlVMb25nIGxlbmd0aCkgPSAwOwoKCgoKICAgIHZpcnR1YWwgdm9pZCByZWFkX3Vz
aG9ydF9hcnJheShVU2hvcnRTZXEmIHNlcSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDT1JCQTo6VUxvbmcgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENPUkJBOjpVTG9uZyBsZW5ndGgpID0gMDsKCgoKCiAgICB2aXJ0dWFsIHZvaWQgcmVhZF9s
b25nX2FycmF5KExvbmdTZXEmIHNlcSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q09SQkE6OlVMb25nIG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09S
QkE6OlVMb25nIGxlbmd0aCkgPSAwOwoKCgoKICAgIHZpcnR1YWwgdm9pZCByZWFkX3Vsb25nX2Fy
cmF5KFVMb25nU2VxJiBzZXEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JC
QTo6VUxvbmcgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6
OlVMb25nIGxlbmd0aCkgPSAwOwoKCgoKICAgIHZpcnR1YWwgdm9pZCByZWFkX3Vsb25nbG9uZ19h
cnJheShVTG9uZ0xvbmdTZXEmIHNlcSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDT1JCQTo6VUxvbmcgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgpID0gMDsKCgoKCiAgICB2aXJ0dWFsIHZvaWQgcmVh
ZF9sb25nbG9uZ19hcnJheShMb25nTG9uZ1NlcSYgc2VxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgpID0gMDsKCgoKCiAgICB2aXJ0dWFs
IHZvaWQgcmVhZF9mbG9hdF9hcnJheShGbG9hdFNlcSYgc2VxLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgpID0gMDsKCgoKCiAgICB2aXJ0dWFsIHZv
aWQgcmVhZF9kb3VibGVfYXJyYXkoRG91YmxlU2VxJiBzZXEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoKSA9IDA7CgogICAgc3RhdGljIGNvbnN0
IGNoYXIqIF9PQl9pZCgpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX09CX3R5cGVJZCgpIGNv
bnN0Owp9OwoKCgoKY2xhc3MgQ3VzdG9tTWFyc2hhbCA6IHZpcnR1YWwgcHVibGljIENPUkJBOjpW
YWx1ZUJhc2UKewogICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgQ3VzdG9tTWFyc2hhbCYpOwoKICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBfb2JfaWRfOwoKcHJvdGVjdGVkOgoKICAgIEN1c3RvbU1hcnNo
YWwoKSB7IH0KICAgIHZpcnR1YWwgfkN1c3RvbU1hcnNoYWwoKSB7IH0KCnB1YmxpYzoKCiAgICB0
eXBlZGVmIEN1c3RvbU1hcnNoYWxfdmFyIF92YXJfdHlwZTsKCiAgICBzdGF0aWMgQ3VzdG9tTWFy
c2hhbCogX2Rvd25jYXN0KENPUkJBOjpWYWx1ZUJhc2UqKTsKICAgIHN0YXRpYyBDdXN0b21NYXJz
aGFsKiBfZG93bmNhc3QoQ09SQkE6OkFic3RyYWN0QmFzZV9wdHIpOwoKCgoKICAgIHZpcnR1YWwg
dm9pZCBtYXJzaGFsKERhdGFPdXRwdXRTdHJlYW0qIG9zKSA9IDA7CgoKCgogICAgdmlydHVhbCB2
b2lkIHVubWFyc2hhbChEYXRhSW5wdXRTdHJlYW0qIGlzKSA9IDA7CgogICAgc3RhdGljIGNvbnN0
IGNoYXIqIF9PQl9pZCgpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX09CX3R5cGVJZCgpIGNv
bnN0Owp9OwoKfQoKCgoKbmFtZXNwYWNlIE9CU3R1YkltcGxfQ09SQkEKewoKfQoKCgoKbmFtZXNw
YWNlIE9CTWFyc2hhbFN0dWJJbXBsX0NPUkJBCnsKCn0KCgoKCm5hbWVzcGFjZSBPQlZfQ09SQkEK
ewoKfQojIDI0ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvQ09SQkFDbGllbnQuaCIgMgojIDEg
Ii9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9TdHJlYW0uaCIgMQojIDE0ICIvaG9tZS9tYXR0L29i
L2luY2x1ZGUvT0IvU3RyZWFtLmgiCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1N0cmVh
bV9md2QuaCIgMQojIDE1ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvU3RyZWFtLmgiIDIKIyAx
ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvUHJpbmNpcGFsX2Z3ZC5oIiAxCiMgMTYgIi9ob21l
L21hdHQvb2IvaW5jbHVkZS9PQi9TdHJlYW0uaCIgMgojIDEgIi9ob21lL21hdHQvb2IvaW5jbHVk
ZS9PQi9PYmplY3RfZndkLmgiIDEKIyAxNyAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1N0cmVh
bS5oIiAyCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1ZhbHVlQmFzZV9md2QuaCIgMQoj
IDE4ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvU3RyZWFtLmgiIDIKIyAxICIvaG9tZS9tYXR0
L29iL2luY2x1ZGUvT0IvQWJzdHJhY3RCYXNlX2Z3ZC5oIiAxCiMgMTkgIi9ob21lL21hdHQvb2Iv
aW5jbHVkZS9PQi9TdHJlYW0uaCIgMgojIDEgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9DdXN0
b21fZndkLmgiIDEKIyAyMCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1N0cmVhbS5oIiAyCiMg
MSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1R5cGVDb2RlX2Z3ZC5oIiAxCiMgMjEgIi9ob21l
L21hdHQvb2IvaW5jbHVkZS9PQi9TdHJlYW0uaCIgMgojIDEgIi9ob21lL21hdHQvb2IvaW5jbHVk
ZS9PQi9PUkJJbnN0YW5jZV9md2QuaCIgMQojIDIyICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0Iv
U3RyZWFtLmgiIDIKIyAxICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvT0NJQnVmZmVyX2Z3ZC5o
IiAxCiMgMjMgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9TdHJlYW0uaCIgMgojIDEgIi9ob21l
L21hdHQvb2IvaW5jbHVkZS9PQi9WYWx1ZVJlYWRlcldyaXRlcl9md2QuaCIgMQojIDE0ICIvaG9t
ZS9tYXR0L29iL2luY2x1ZGUvT0IvVmFsdWVSZWFkZXJXcml0ZXJfZndkLmgiCiMgMSAiL2hvbWUv
bWF0dC9vYi9pbmNsdWRlL09CL1RlbXBsYXRlLmgiIDEKIyAxNSAiL2hvbWUvbWF0dC9vYi9pbmNs
dWRlL09CL1ZhbHVlUmVhZGVyV3JpdGVyX2Z3ZC5oIiAyCgpuYW1lc3BhY2UgT0IKewoKY2xhc3Mg
VmFsdWVSZWFkZXI7CnR5cGVkZWYgVmFsdWVSZWFkZXIqIFZhbHVlUmVhZGVyX3B0cjsKCmNsYXNz
IFZhbHVlV3JpdGVyOwp0eXBlZGVmIFZhbHVlV3JpdGVyKiBWYWx1ZVdyaXRlcl9wdHI7Cgp9Cgp2
b2lkIE9CRHVwbGljYXRlKE9COjpWYWx1ZVJlYWRlcl9wdHIpOwp2b2lkIE9CUmVsZWFzZShPQjo6
VmFsdWVSZWFkZXJfcHRyKTsKCnZvaWQgT0JEdXBsaWNhdGUoT0I6OlZhbHVlV3JpdGVyX3B0cik7
CnZvaWQgT0JSZWxlYXNlKE9COjpWYWx1ZVdyaXRlcl9wdHIpOwoKbmFtZXNwYWNlIE9CCnsKCnR5
cGVkZWYgT0I6Ok9ialZhcjwgVmFsdWVSZWFkZXIgPiBWYWx1ZVJlYWRlcl92YXI7Cgp0eXBlZGVm
IE9COjpPYmpWYXI8IFZhbHVlV3JpdGVyID4gVmFsdWVXcml0ZXJfdmFyOwoKfQojIDI0ICIvaG9t
ZS9tYXR0L29iL2luY2x1ZGUvT0IvU3RyZWFtLmgiIDIKCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNs
dWRlL09CL0FueS5oIiAxCiMgMjYgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9TdHJlYW0uaCIg
MgojIDEgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9UeXBlQ29kZUNvbnN0LmgiIDEKIyAyNyAi
L2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1N0cmVhbS5oIiAyCiMgMSAiL2hvbWUvbWF0dC9vYi9p
bmNsdWRlL09CL09DSVR5cGVzLmgiIDEKIyAyOCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1N0
cmVhbS5oIiAyCiMgMSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0NvZGVDb252ZXJ0ZXJzLmgi
IDEKIyAxNCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0NvZGVDb252ZXJ0ZXJzLmgiCm5hbWVz
cGFjZSBPQgp7CgoKCgpjbGFzcyBDb2RlQ29udmVydGVyQmFzZTsKCgoKCnN0cnVjdCBDb2RlQ29u
dmVydGVycwp7CiAgICBDb2RlQ29udmVydGVyQmFzZSogaW5wdXRDaGFyQ29udmVydGVyOwogICAg
Q29kZUNvbnZlcnRlckJhc2UqIG91dHB1dENoYXJDb252ZXJ0ZXI7CiAgICBDb2RlQ29udmVydGVy
QmFzZSogd2NoYXJDb252ZXJ0ZXI7CgoKCgogICAgYm9vbCBlcXVhbChjb25zdCBDb2RlQ29udmVy
dGVycyYgb3RoZXIpIGNvbnN0CiAgICB7CiAgICAgICAgcmV0dXJuIGlucHV0Q2hhckNvbnZlcnRl
ciA9PSBvdGhlci5pbnB1dENoYXJDb252ZXJ0ZXIgJiYKICAgICAgICAgICAgICAgb3V0cHV0Q2hh
ckNvbnZlcnRlciA9PSBvdGhlci5vdXRwdXRDaGFyQ29udmVydGVyICYmCiAgICAgICAgICAgICAg
IHdjaGFyQ29udmVydGVyID09IG90aGVyLndjaGFyQ29udmVydGVyOwogICAgfQp9OwoKfQojIDI5
ICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvU3RyZWFtLmgiIDIKIyAxICIvaG9tZS9tYXR0L29i
L2luY2x1ZGUvT0IvSGFzaHRhYmxlLmgiIDEKIyAzMCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09C
L1N0cmVhbS5oIiAyCgpuYW1lc3BhY2UgT0IKewoKCgoKY2xhc3MgSW5wdXRTdHJlYW1JbXBsCnsK
CgoKICAgIElucHV0U3RyZWFtSW1wbChjb25zdCBJbnB1dFN0cmVhbUltcGwmKTsKICAgIElucHV0
U3RyZWFtSW1wbCYgb3BlcmF0b3I9KGNvbnN0IElucHV0U3RyZWFtSW1wbCYpOwoKcHJvdGVjdGVk
OgoKICAgIE9SQkluc3RhbmNlX3ZhciBvcmJJbnN0YW5jZV87CiAgICBPQ0k6OkJ1ZmZlckltcGwq
IGJ1Zl87CiAgICBDT1JCQTo6T2N0ZXQqIG9yaWdDdXJfOwogICAgYm9vbCBvcmlnU3dhcF87CiAg
ICBib29sIHN3YXBfOwogICAgQ29kZUNvbnZlcnRlcnMgY29kZUNvbnZlcnRlcnNfOwogICAgYm9v
bCBvbGRHSU9QXzsKICAgIFZhbHVlUmVhZGVyX3ZhciB2YWx1ZVJlYWRlcl87CiAgICBDT1JCQTo6
VUxvbmcgY2hhckNvbnZlcnNpb25UeXBlXzsKCiAgICBzdHJ1Y3QgT2N0ZXRQdHJIYXNoZXIKICAg
IHsKICAgICAgICBzdGF0aWMgQ09SQkE6OlVMb25nCiAgICAgICAgaGFzaChjb25zdCBDT1JCQTo6
T2N0ZXQqIGspCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKENPUkJBOjpVTG9uZykoKGxv
bmcpayk7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgYm9vbAogICAgICAgIGNvbXAoY29uc3Qg
Q09SQkE6Ok9jdGV0KiBrMSwgY29uc3QgQ09SQkE6Ok9jdGV0KiBrMikKICAgICAgICB7CiAgICAg
ICAgICAgIHJldHVybiBrMSA9PSBrMjsKICAgICAgICB9CiAgICB9OwogICAgdHlwZWRlZiBIYXNo
dGFibGU8Y29uc3QgQ09SQkE6Ok9jdGV0KiwgQ09SQkE6OlR5cGVDb2RlX3B0ciwKICAgICAgICBP
Y3RldFB0ckhhc2hlciwgT0I6OkxvY2tTdHJhdGVneU51bGw+IFJlYWRUQ0hpc3Rvcnk7CgogICAg
Q09SQkE6OlR5cGVDb2RlX3B0ciByZWFkVHlwZUNvZGVJbXBsKFJlYWRUQ0hpc3RvcnkmKTsKICAg
IFZhbHVlUmVhZGVyX3B0ciB2YWx1ZVJlYWRlcigpOwogICAgdm9pZCBjaGVja0NodW5rKCk7Cgog
ICAgZnJpZW5kIGNsYXNzIE91dHB1dFN0cmVhbUltcGw7CgpwdWJsaWM6CgogICAgSW5wdXRTdHJl
YW1JbXBsKE9DSTo6QnVmZmVySW1wbCosIENPUkJBOjpVTG9uZywgYm9vbCwKICAgICAgICAgICAg
ICAgICAgICBjb25zdCBDb2RlQ29udmVydGVycyogPSAwLCBib29sID0gMCk7CiAgICB2aXJ0dWFs
IH5JbnB1dFN0cmVhbUltcGwoKTsKCiAgICB2b2lkIF9PQl9jb2RlQ29udmVydGVycyhjb25zdCBD
b2RlQ29udmVydGVycyosIGJvb2wpOwogICAgY29uc3QgQ29kZUNvbnZlcnRlcnMqIF9PQl9jb2Rl
Q29udmVydGVycygpCiAgICB7IHJldHVybiAmY29kZUNvbnZlcnRlcnNfOyB9CgogICAgT0NJOjpC
dWZmZXJJbXBsKiBfT0JfYnVmZmVySW1wbCgpIHsgcmV0dXJuIGJ1Zl87IH0KCiAgICBDT1JCQTo6
VUxvbmcgX09CX3BvcygpIHsgcmV0dXJuIGJ1Zl8gLT4gcG9zKCk7IH0KICAgIHZvaWQgX09CX3Bv
cyhDT1JCQTo6VUxvbmcgcG9zKSB7IGJ1Zl8gLT4gcG9zKHBvcyk7IH0KCiAgICBib29sIF9PQl9z
d2FwKCkgY29uc3QgeyByZXR1cm4gc3dhcF87IH0KICAgIHZvaWQgX09CX3N3YXAoYm9vbCBzKSB7
IHN3YXBfID0gczsgfQoKICAgIHZvaWQgX09CX3Jlc2V0KCk7CgogICAgdm9pZCBfT0Jfc2tpcChD
T1JCQTo6VUxvbmcgbGVuZ3RoKQogICAgewogICAgICAgIHJlZ2lzdGVyIENPUkJBOjpPY3RldCog
bmV3Q3VyID0gYnVmXyAtPiBjdXJfICsgbGVuZ3RoOwogICAgICAgIGlmKG5ld0N1ciA+IGJ1Zl8g
LT4gbGFzdF8pCiAgICAgICAgICAgIHRocm93IENPUkJBOjpNQVJTSEFMKE1pbm9yUmVhZE92ZXJm
bG93LCBDT1JCQTo6Q09NUExFVEVEX05PKTsKICAgICAgICBidWZfIC0+IGN1cl8gPSBuZXdDdXI7
CiAgICB9CgogICAgdm9pZCBfT0Jfc2tpcEFsaWduKENPUkJBOjpVTG9uZyBhbGlnbikKICAgIHsK
ICAgICAgICByZWdpc3RlciBDT1JCQTo6T2N0ZXQqIG5ld0N1ciA9IGJ1Zl8gLT4gY3VyXyArIGFs
aWduIC0gMTsKICAgICAgICBuZXdDdXIgLT0gKHVuc2lnbmVkIGxvbmcpbmV3Q3VyICUgYWxpZ247
CiAgICAgICAgaWYobmV3Q3VyID4gYnVmXyAtPiBsYXN0XykKICAgICAgICAgICAgdGhyb3cgQ09S
QkE6Ok1BUlNIQUwoTWlub3JSZWFkT3ZlcmZsb3csIENPUkJBOjpDT01QTEVURURfTk8pOwogICAg
ICAgIGJ1Zl8gLT4gY3VyXyA9IG5ld0N1cjsKICAgIH0KCiAgICB2b2lkIF9PQl9PUkJJbnN0YW5j
ZShPUkJJbnN0YW5jZV9wdHIpOwogICAgT1JCSW5zdGFuY2VfcHRyIF9PQl9PUkJJbnN0YW5jZSgp
OwoKICAgIHZvaWQgX09CX3JlYWRFbmRpYW4oKTsKCiAgICBDT1JCQTo6TG9uZyBfT0JfcmVhZExv
bmdVbmNoZWNrZWQoKTsKCiAgICB2b2lkIF9PQl9iZWdpblZhbHVlKCk7CiAgICB2b2lkIF9PQl9l
bmRWYWx1ZSgpOwogICAgdm9pZCBfT0JfcmVtYXJzaGFsVmFsdWUoQ09SQkE6OlR5cGVDb2RlX3B0
ciwgT3V0cHV0U3RyZWFtSW1wbCopOwoKICAgIENPUkJBOjpEYXRhSW5wdXRTdHJlYW0qIF9PQl9j
cmVhdGVEYXRhSW5wdXRTdHJlYW0oKTsKCiAgICBDT1JCQTo6Qm9vbGVhbiByZWFkX2Jvb2xlYW4o
KQogICAgewogICAgICAgIGlmKHZhbHVlUmVhZGVyXy5pbigpKQogICAgICAgICAgICBjaGVja0No
dW5rKCk7CgogICAgICAgIGlmKGJ1Zl8gLT4gY3VyXyA+IGJ1Zl8gLT4gbGFzdF8pCiAgICAgICAg
ICAgIHRocm93IENPUkJBOjpNQVJTSEFMKE1pbm9yUmVhZEJvb2xlYW5PdmVyZmxvdywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkNPTVBMRVRFRF9OTyk7CgogICAgICAg
IENPUkJBOjpCb29sZWFuIHZhbCA9ICgqKGJ1Zl8gLT4gY3VyXykrKykgPyB0cnVlIDogZmFsc2U7
CiAgICAgICAgcmV0dXJuIHZhbDsKICAgIH0KCiAgICBDT1JCQTo6T2N0ZXQgcmVhZF9vY3RldCgp
CiAgICB7CiAgICAgICAgaWYodmFsdWVSZWFkZXJfLmluKCkpCiAgICAgICAgICAgIGNoZWNrQ2h1
bmsoKTsKCiAgICAgICAgaWYoYnVmXyAtPiBjdXJfID4gYnVmXyAtPiBsYXN0XykKICAgICAgICAg
ICAgdGhyb3cgQ09SQkE6Ok1BUlNIQUwoTWlub3JSZWFkT2N0ZXRPdmVyZmxvdywgQ09SQkE6OkNP
TVBMRVRFRF9OTyk7CgogICAgICAgIENPUkJBOjpPY3RldCB2YWwgPSAqKGJ1Zl8gLT4gY3VyXykr
KzsKICAgICAgICByZXR1cm4gdmFsOwogICAgfQoKICAgIENPUkJBOjpTaG9ydCByZWFkX3Nob3J0
KCk7CiAgICBDT1JCQTo6VVNob3J0IHJlYWRfdXNob3J0KCk7CiAgICBDT1JCQTo6TG9uZyByZWFk
X2xvbmcoKTsKICAgIENPUkJBOjpVTG9uZyByZWFkX3Vsb25nKCk7CiAgICBDT1JCQTo6TG9uZ0xv
bmcgcmVhZF9sb25nbG9uZygpOwogICAgQ09SQkE6OlVMb25nTG9uZyByZWFkX3Vsb25nbG9uZygp
OwogICAgQ09SQkE6OkZsb2F0IHJlYWRfZmxvYXQoKTsKICAgIENPUkJBOjpEb3VibGUgcmVhZF9k
b3VibGUoKTsKICAgIENPUkJBOjpMb25nRG91YmxlIHJlYWRfbG9uZ2RvdWJsZSgpOwogICAgQ09S
QkE6OkNoYXIgcmVhZF9jaGFyKCk7CiAgICB2b2lkIHJlYWRfY2hhcl9hcnJheShDT1JCQTo6Q2hh
ciosIENPUkJBOjpVTG9uZyk7CiAgICBDT1JCQTo6V0NoYXIgcmVhZF93Y2hhcigpOwogICAgY2hh
ciogcmVhZF9zdHJpbmcoKTsKICAgIHdjaGFyX3QqIHJlYWRfd3N0cmluZygpOwogICAgQ09SQkE6
Ok9iamVjdF9wdHIgcmVhZF9PYmplY3QoKTsKICAgIENPUkJBOjpUeXBlQ29kZV9wdHIgcmVhZF9U
eXBlQ29kZSgpOwogICAgQ09SQkE6OlByaW5jaXBhbF9wdHIgcmVhZF9QcmluY2lwYWwoKTsKICAg
IENPUkJBOjpBbnkqIHJlYWRfYW55KCk7CiAgICB2b2lkIHJlYWRfYW55KENPUkJBOjpBbnkmKTsK
ICAgIENPUkJBOjpGaXhlZCByZWFkX2ZpeGVkKCk7CgoKCgoKICAgIENPUkJBOjpWYWx1ZUJhc2Uq
IHJlYWRfdmFsdWUoY29uc3QgY2hhciogPSAwKTsKCiAgICB2b2lkIHJlYWRfdmFsdWUoQ09SQkE6
OkFueSYsIENPUkJBOjpUeXBlQ29kZV9wdHIpOwoKICAgIENPUkJBOjpBYnN0cmFjdEJhc2VfcHRy
IHJlYWRfYWJzdHJhY3RfaW50ZXJmYWNlKCk7CgogICAgdm9pZCByZWFkX2Jvb2xlYW5fYXJyYXko
Q09SQkE6OkJvb2xlYW4qLCBDT1JCQTo6VUxvbmcpOwoKICAgIHZvaWQgcmVhZF9vY3RldF9hcnJh
eShDT1JCQTo6T2N0ZXQqIHZhbHVlLCBDT1JCQTo6VUxvbmcgbGVuZ3RoKQogICAgewogICAgICAg
IGlmKGxlbmd0aCkKICAgICAgICB7CiAgICAgICAgICAgICggKGludCkodmFsdWUgIT0gMCkgPyAo
dm9pZCkwIDogKE9COjpOQ0EoTkNBTnVsbFZhbHVlLCAidmFsdWUgIT0gMCIsICIvaG9tZS9tYXR0
L29iL2luY2x1ZGUvT0IvU3RyZWFtLmgiLCAxOTIpLCBhYm9ydCgpKSApOwoKICAgICAgICAgICAg
aWYodmFsdWVSZWFkZXJfLmluKCkpCiAgICAgICAgICAgICAgICBjaGVja0NodW5rKCk7CgogICAg
ICAgICAgICByZWdpc3RlciBDT1JCQTo6T2N0ZXQqIG5leHRDdXIgPSBidWZfIC0+IGN1cl8gKyBs
ZW5ndGg7CiAgICAgICAgICAgIGlmKG5leHRDdXIgPiBidWZfIC0+IGxhc3RfKQogICAgICAgICAg
ICAgICAgdGhyb3cgQ09SQkE6Ok1BUlNIQUwoTWlub3JSZWFkT2N0ZXRBcnJheU92ZXJmbG93LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkNPTVBMRVRFRF9OTyk7
CgogICAgICAgICAgICBtZW1jcHkodmFsdWUsIGJ1Zl8gLT4gY3VyXywgbGVuZ3RoKTsKICAgICAg
ICAgICAgYnVmXyAtPiBjdXJfID0gbmV4dEN1cjsKICAgICAgICB9CiAgICB9CgogICAgdm9pZCBy
ZWFkX3djaGFyX2FycmF5KENPUkJBOjpXQ2hhciosIENPUkJBOjpVTG9uZyk7CiAgICB2b2lkIHJl
YWRfc2hvcnRfYXJyYXkoQ09SQkE6OlNob3J0KiwgQ09SQkE6OlVMb25nKTsKICAgIHZvaWQgcmVh
ZF91c2hvcnRfYXJyYXkoQ09SQkE6OlVTaG9ydCosIENPUkJBOjpVTG9uZyk7CiAgICB2b2lkIHJl
YWRfbG9uZ19hcnJheShDT1JCQTo6TG9uZyosIENPUkJBOjpVTG9uZyk7CiAgICB2b2lkIHJlYWRf
dWxvbmdfYXJyYXkoQ09SQkE6OlVMb25nKiwgQ09SQkE6OlVMb25nKTsKICAgIHZvaWQgcmVhZF9s
b25nbG9uZ19hcnJheShDT1JCQTo6TG9uZ0xvbmcqLCBDT1JCQTo6VUxvbmcpOwogICAgdm9pZCBy
ZWFkX3Vsb25nbG9uZ19hcnJheShDT1JCQTo6VUxvbmdMb25nKiwgQ09SQkE6OlVMb25nKTsKICAg
IHZvaWQgcmVhZF9mbG9hdF9hcnJheShDT1JCQTo6RmxvYXQqLCBDT1JCQTo6VUxvbmcpOwogICAg
dm9pZCByZWFkX2RvdWJsZV9hcnJheShDT1JCQTo6RG91YmxlKiwgQ09SQkE6OlVMb25nKTsKICAg
IHZvaWQgcmVhZF9sb25nZG91YmxlX2FycmF5KENPUkJBOjpMb25nRG91YmxlKiwgQ09SQkE6OlVM
b25nKTsKCiAgICB2b2lkIHJlYWRfYW55X05vVHlwZUNvZGUoQ09SQkE6OkFueSYsIENPUkJBOjpU
eXBlQ29kZV9wdHIpOwp9OwoKCgoKY2xhc3MgT3V0cHV0U3RyZWFtSW1wbAp7CgoKCiAgICBPdXRw
dXRTdHJlYW1JbXBsKGNvbnN0IE91dHB1dFN0cmVhbUltcGwmKTsKICAgIE91dHB1dFN0cmVhbUlt
cGwmIG9wZXJhdG9yPShjb25zdCBPdXRwdXRTdHJlYW1JbXBsJik7Cgpwcm90ZWN0ZWQ6CgogICAg
T0NJOjpCdWZmZXJJbXBsKiBidWZfOwogICAgQ29kZUNvbnZlcnRlcnMgY29kZUNvbnZlcnRlcnNf
OwogICAgYm9vbCBvbGRHSU9QXzsKICAgIENPUkJBOjpVTG9uZyBjaGFyQ29udmVyc2lvblR5cGVf
OwoKCgoKICAgIFZhbHVlV3JpdGVyX3ZhciB2YWx1ZVdyaXRlcl87CgoKCgoKICAgIENPUkJBOjpV
TG9uZyBhbGlnbk5leHRfOwoKICAgIHN0cnVjdCBUeXBlQ29kZVB0ckhhc2hlcgogICAgewogICAg
ICAgIHN0YXRpYyBDT1JCQTo6VUxvbmcKICAgICAgICBoYXNoKGNvbnN0IENPUkJBOjpUeXBlQ29k
ZV9wdHIgaykKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoQ09SQkE6OlVMb25nKSgobG9u
ZylrKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBib29sCiAgICAgICAgY29tcChjb25zdCBD
T1JCQTo6VHlwZUNvZGVfcHRyIGsxLCBjb25zdCBDT1JCQTo6VHlwZUNvZGVfcHRyIGsyKQogICAg
ICAgIHsKICAgICAgICAgICAgcmV0dXJuIGsxID09IGsyOwogICAgICAgIH0KICAgIH07CiAgICB0
eXBlZGVmIEhhc2h0YWJsZTxDT1JCQTo6VHlwZUNvZGVfcHRyLCBDT1JCQTo6TG9uZywKICAgICAg
ICBUeXBlQ29kZVB0ckhhc2hlciwgT0I6OkxvY2tTdHJhdGVneU51bGw+IFdyaXRlVENIaXN0b3J5
OwoKICAgIENPUkJBOjpVTG9uZyB3cml0ZUdhcCgpOwogICAgdm9pZCB3cml0ZUxlbmd0aChDT1JC
QTo6VUxvbmcpOwogICAgdm9pZCB3cml0ZVR5cGVDb2RlSW1wbChDT1JCQTo6VHlwZUNvZGVfcHRy
LCBXcml0ZVRDSGlzdG9yeSYpOwoKICAgIHZvaWQgY2hlY2tCZWdpbkNodW5rKCk7CiAgICBWYWx1
ZVdyaXRlcl9wdHIgdmFsdWVXcml0ZXIoKTsKCiAgICB2b2lkIGFkZENhcGFjaXR5KENPUkJBOjpV
TG9uZyBzaXplKQogICAgewojIDI4NyAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1N0cmVhbS5o
IgogICAgICAgIGlmKGFsaWduTmV4dF8gPiAwKQogICAgICAgIHsKICAgICAgICAgICAgQ09SQkE6
OlVMb25nIGFsaWduID0gYWxpZ25OZXh0XzsKICAgICAgICAgICAgYWxpZ25OZXh0XyA9IDA7CiAg
ICAgICAgICAgIGFkZENhcGFjaXR5KHNpemUsIGFsaWduKTsKICAgICAgICB9CiAgICAgICAgZWxz
ZQogICAgICAgIHsKCgoKCgogICAgICAgICAgICBpZihidWZfIC0+IGN1cl8gPT0gYnVmXyAtPiBs
YXN0XyAmJiB2YWx1ZVdyaXRlcl8uaW4oKSkKICAgICAgICAgICAgICAgIGNoZWNrQmVnaW5DaHVu
aygpOwoKCgoKICAgICAgICAgICAgQ09SQkE6OlVMb25nIGxlbiA9IGJ1Zl8gLT4gY3VyXyAtIGJ1
Zl8gLT4gZGF0YV8gKyBzaXplOwogICAgICAgICAgICBpZihsZW4gPiBidWZfIC0+IGxlbl8pCiAg
ICAgICAgICAgICAgICBidWZfIC0+IHJlYWxsb2MobGVuKTsKICAgICAgICB9CiAgICB9CgogICAg
dm9pZCBhZGRDYXBhY2l0eShDT1JCQTo6VUxvbmcgc2l6ZSwgQ09SQkE6OlVMb25nIGFsaWduKQog
ICAgewogICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAoKGFsaWduID4gMCkgPyAwIDogKF9fYXNz
ZXJ0X2ZhaWwgKCJhbGlnbiA+IDAiLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1N0cmVhbS5o
IiwgMzE0LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKCgoKCgoKICAgICAgICBpZihidWZf
IC0+IGN1cl8gPT0gYnVmXyAtPiBsYXN0XyAmJiB2YWx1ZVdyaXRlcl8uaW4oKSkKICAgICAgICAg
ICAgY2hlY2tCZWdpbkNodW5rKCk7CgoKCgogICAgICAgIGlmKGFsaWduTmV4dF8gPiAwKQogICAg
ICAgIHsKICAgICAgICAgICAgYWxpZ24gPSAoYWxpZ25OZXh0XyA+IGFsaWduID8gYWxpZ25OZXh0
XyA6IGFsaWduKTsKICAgICAgICAgICAgYWxpZ25OZXh0XyA9IDA7CiAgICAgICAgfQoKCgoKICAg
ICAgICByZWdpc3RlciBDT1JCQTo6T2N0ZXQqIG5ld0N1ciA9IGJ1Zl8gLT4gY3VyXyArIGFsaWdu
IC0gMTsKICAgICAgICBuZXdDdXIgLT0gQ09SQkE6OlVMb25nKChsb25nKW5ld0N1cikgJSBhbGln
bjsKICAgICAgICBidWZfIC0+IGN1cl8gPSBuZXdDdXI7CgoKCgogICAgICAgIGlmKG5ld0N1ciAr
IHNpemUgPiBidWZfIC0+IGxhc3RfKQogICAgICAgICAgICBidWZfIC0+IHJlYWxsb2MobmV3Q3Vy
IC0gYnVmXyAtPiBkYXRhXyArIHNpemUpOwogICAgfQoKICAgIGZyaWVuZCBjbGFzcyBJbnB1dFN0
cmVhbUltcGw7CgpwdWJsaWM6CgogICAgT3V0cHV0U3RyZWFtSW1wbChPQ0k6OkJ1ZmZlckltcGwq
LCBjb25zdCBDb2RlQ29udmVydGVycyogPSAwLAogICAgICAgICAgICAgICAgICAgICBib29sID0g
ZmFsc2UpOwogICAgdmlydHVhbCB+T3V0cHV0U3RyZWFtSW1wbCgpOwoKICAgIHZvaWQgX09CX2Nv
ZGVDb252ZXJ0ZXJzKGNvbnN0IENvZGVDb252ZXJ0ZXJzKiwgYm9vbCk7CiAgICBjb25zdCBDb2Rl
Q29udmVydGVycyogX09CX2NvZGVDb252ZXJ0ZXJzKCkgY29uc3QKICAgIHsgcmV0dXJuICZjb2Rl
Q29udmVydGVyc187IH0KCiAgICBPQ0k6OkJ1ZmZlckltcGwqIF9PQl9idWZmZXJJbXBsKCkgeyBy
ZXR1cm4gYnVmXzsgfQoKICAgIENPUkJBOjpVTG9uZyBfT0JfcG9zKCkgeyByZXR1cm4gYnVmXyAt
PiBwb3MoKTsgfQogICAgdm9pZCBfT0JfcG9zKENPUkJBOjpVTG9uZyBwb3MpIHsgYnVmXyAtPiBw
b3MocG9zKTsgfQoKICAgIHZvaWQgX09CX2FsaWduKENPUkJBOjpVTG9uZyBuKQogICAgewogICAg
ICAgIGlmKENPUkJBOjpVTG9uZygobG9uZykoYnVmXyAtPiBjdXJfKSkgJSBuICE9IDApCiAgICAg
ICAgICAgIGFkZENhcGFjaXR5KDAsIG4pOwogICAgfQoKICAgIHZvaWQgX09CX2FsaWduTmV4dChD
T1JCQTo6VUxvbmcgbikKICAgIHsKICAgICAgICBhbGlnbk5leHRfID0gbjsKICAgIH0KCiAgICB2
b2lkIF9PQl9iZWdpblZhbHVlKENPUkJBOjpMb25nLCBjb25zdCBPQjo6U3RyU2VxPCBpbnQgPiYs
IGJvb2wpOwogICAgdm9pZCBfT0JfZW5kVmFsdWUoKTsKCiAgICBDT1JCQTo6RGF0YU91dHB1dFN0
cmVhbSogX09CX2NyZWF0ZURhdGFPdXRwdXRTdHJlYW0oKTsKCiAgICB2b2lkIF9PQl93cml0ZUVu
ZGlhbigpIHsgd3JpdGVfYm9vbGVhbihFbmRpYW4pOyB9CgogICAgSW5wdXRTdHJlYW1fcHRyIGNy
ZWF0ZV9pbnB1dF9zdHJlYW0oKTsKCiAgICB2b2lkIHdyaXRlX2Jvb2xlYW4oQ09SQkE6OkJvb2xl
YW4gdmFsdWUpCiAgICB7CiAgICAgICAgYWRkQ2FwYWNpdHkoMSk7CiAgICAgICAgKihidWZfIC0+
IGN1cl8pID0gdmFsdWU7CiAgICAgICAgYnVmXyAtPiBjdXJfICs9IDE7CiAgICB9CgogICAgdm9p
ZCB3cml0ZV9vY3RldChDT1JCQTo6T2N0ZXQgdmFsdWUpCiAgICB7CiAgICAgICAgYWRkQ2FwYWNp
dHkoMSk7CiAgICAgICAgKihidWZfIC0+IGN1cl8pID0gdmFsdWU7CiAgICAgICAgYnVmXyAtPiBj
dXJfICs9IDE7CiAgICB9CgogICAgdm9pZCB3cml0ZV9zaG9ydChDT1JCQTo6U2hvcnQgdmFsdWUp
CiAgICB7CiAgICAgICAgYWRkQ2FwYWNpdHkoMiwgMik7CiAgICAgICAgKihDT1JCQTo6U2hvcnQq
KShidWZfIC0+IGN1cl8pID0gdmFsdWU7CiAgICAgICAgYnVmXyAtPiBjdXJfICs9IDI7CiAgICB9
CgogICAgdm9pZCB3cml0ZV91c2hvcnQoQ09SQkE6OlVTaG9ydCB2YWx1ZSkKICAgIHsKICAgICAg
ICBhZGRDYXBhY2l0eSgyLCAyKTsKICAgICAgICAqKENPUkJBOjpVU2hvcnQqKShidWZfIC0+IGN1
cl8pID0gdmFsdWU7CiAgICAgICAgYnVmXyAtPiBjdXJfICs9IDI7CiAgICB9CgogICAgdm9pZCB3
cml0ZV9sb25nKENPUkJBOjpMb25nIHZhbHVlKQogICAgewogICAgICAgIGFkZENhcGFjaXR5KDQs
IDQpOwogICAgICAgICooQ09SQkE6OkxvbmcqKShidWZfIC0+IGN1cl8pID0gdmFsdWU7CiAgICAg
ICAgYnVmXyAtPiBjdXJfICs9IDQ7CiAgICB9CgogICAgdm9pZCB3cml0ZV91bG9uZyhDT1JCQTo6
VUxvbmcgdmFsdWUpCiAgICB7CiAgICAgICAgYWRkQ2FwYWNpdHkoNCwgNCk7CiAgICAgICAgKihD
T1JCQTo6VUxvbmcqKShidWZfIC0+IGN1cl8pID0gdmFsdWU7CiAgICAgICAgYnVmXyAtPiBjdXJf
ICs9IDQ7CiAgICB9CgogICAgdm9pZCB3cml0ZV9sb25nbG9uZyhDT1JCQTo6TG9uZ0xvbmcgdmFs
dWUpCiAgICB7CiAgICAgICAgYWRkQ2FwYWNpdHkoOCwgOCk7CiAgICAgICAgKihDT1JCQTo6TG9u
Z0xvbmcqKShidWZfIC0+IGN1cl8pID0gdmFsdWU7CiAgICAgICAgYnVmXyAtPiBjdXJfICs9IDg7
CiAgICB9CgogICAgdm9pZCB3cml0ZV91bG9uZ2xvbmcoQ09SQkE6OlVMb25nTG9uZyB2YWx1ZSkK
ICAgIHsKICAgICAgICBhZGRDYXBhY2l0eSg4LCA4KTsKICAgICAgICAqKENPUkJBOjpVTG9uZ0xv
bmcqKShidWZfIC0+IGN1cl8pID0gdmFsdWU7CiAgICAgICAgYnVmXyAtPiBjdXJfICs9IDg7CiAg
ICB9CgogICAgdm9pZCB3cml0ZV9mbG9hdChDT1JCQTo6RmxvYXQgdmFsdWUpCiAgICB7CiAgICAg
ICAgYWRkQ2FwYWNpdHkoNCwgNCk7CiAgICAgICAgKihDT1JCQTo6RmxvYXQqKShidWZfIC0+IGN1
cl8pID0gdmFsdWU7CiAgICAgICAgYnVmXyAtPiBjdXJfICs9IDQ7CiAgICB9CgogICAgdm9pZCB3
cml0ZV9kb3VibGUoQ09SQkE6OkRvdWJsZSB2YWx1ZSkKICAgIHsKICAgICAgICBhZGRDYXBhY2l0
eSg4LCA4KTsKICAgICAgICAqKENPUkJBOjpEb3VibGUqKShidWZfIC0+IGN1cl8pID0gdmFsdWU7
CiAgICAgICAgYnVmXyAtPiBjdXJfICs9IDg7CiAgICB9CgogICAgdm9pZCB3cml0ZV9sb25nZG91
YmxlKENPUkJBOjpMb25nRG91YmxlKTsKICAgIHZvaWQgd3JpdGVfY2hhcihDT1JCQTo6Q2hhcik7
CiAgICB2b2lkIHdyaXRlX2NoYXJfYXJyYXkoY29uc3QgQ09SQkE6OkNoYXIqLCBDT1JCQTo6VUxv
bmcpOwogICAgdm9pZCB3cml0ZV93Y2hhcihDT1JCQTo6V0NoYXIpOwogICAgdm9pZCB3cml0ZV9z
dHJpbmcoY29uc3QgY2hhciopOwogICAgdm9pZCB3cml0ZV93c3RyaW5nKGNvbnN0IHdjaGFyX3Qq
KTsKICAgIHZvaWQgd3JpdGVfT2JqZWN0KENPUkJBOjpPYmplY3RfcHRyKTsKICAgIHZvaWQgd3Jp
dGVfVHlwZUNvZGUoQ09SQkE6OlR5cGVDb2RlX3B0cik7CiAgICB2b2lkIHdyaXRlX1ByaW5jaXBh
bChDT1JCQTo6UHJpbmNpcGFsX3B0cik7CiAgICB2b2lkIHdyaXRlX2FueShjb25zdCBDT1JCQTo6
QW55Jik7CiAgICB2b2lkIHdyaXRlX2ZpeGVkKGNvbnN0IENPUkJBOjpGaXhlZCYpOwoKCgoKCiAg
ICB2b2lkIHdyaXRlX3ZhbHVlKENPUkJBOjpWYWx1ZUJhc2UqLCBjb25zdCBjaGFyKiA9IDApOwoK
ICAgIHZvaWQgd3JpdGVfYWJzdHJhY3RfaW50ZXJmYWNlKENPUkJBOjpBYnN0cmFjdEJhc2VfcHRy
KTsKCiAgICB2b2lkIHdyaXRlX2Jvb2xlYW5fYXJyYXkoY29uc3QgQ09SQkE6OkJvb2xlYW4qLCBD
T1JCQTo6VUxvbmcpOwoKICAgIHZvaWQgd3JpdGVfb2N0ZXRfYXJyYXkoY29uc3QgQ09SQkE6Ok9j
dGV0KiB2YWx1ZSwgQ09SQkE6OlVMb25nIGxlbmd0aCkKICAgIHsKICAgICAgICBpZihsZW5ndGgp
CiAgICAgICAgewogICAgICAgICAgICAoIChpbnQpKHZhbHVlICE9IDApID8gKHZvaWQpMCA6IChP
Qjo6TkNBKE5DQU51bGxWYWx1ZSwgInZhbHVlICE9IDAiLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRl
L09CL1N0cmVhbS5oIiwgNDgwKSwgYWJvcnQoKSkgKTsKICAgICAgICAgICAgYWRkQ2FwYWNpdHko
bGVuZ3RoKTsKICAgICAgICAgICAgbWVtY3B5KGJ1Zl8gLT4gY3VyXywgdmFsdWUsIGxlbmd0aCk7
CiAgICAgICAgICAgIGJ1Zl8gLT4gY3VyXyArPSBsZW5ndGg7CiAgICAgICAgfQogICAgfQoKICAg
IHZvaWQgd3JpdGVfc2hvcnRfYXJyYXkoY29uc3QgQ09SQkE6OlNob3J0KiB2YWx1ZSwgQ09SQkE6
OlVMb25nIGxlbmd0aCkKICAgIHsKICAgICAgICBpZihsZW5ndGgpCiAgICAgICAgewogICAgICAg
ICAgICAoIChpbnQpKHZhbHVlICE9IDApID8gKHZvaWQpMCA6IChPQjo6TkNBKE5DQU51bGxWYWx1
ZSwgInZhbHVlICE9IDAiLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1N0cmVhbS5oIiwgNDkx
KSwgYWJvcnQoKSkgKTsKICAgICAgICAgICAgQ09SQkE6OlVMb25nIGFycnNpemUgPSBsZW5ndGgg
KiAyOwogICAgICAgICAgICBhZGRDYXBhY2l0eShhcnJzaXplLCAyKTsKICAgICAgICAgICAgbWVt
Y3B5KGJ1Zl8gLT4gY3VyXywgdmFsdWUsIGFycnNpemUpOwogICAgICAgICAgICBidWZfIC0+IGN1
cl8gKz0gYXJyc2l6ZTsKICAgICAgICB9CiAgICB9CgogICAgdm9pZCB3cml0ZV91c2hvcnRfYXJy
YXkoY29uc3QgQ09SQkE6OlVTaG9ydCogdmFsdWUsIENPUkJBOjpVTG9uZyBsZW5ndGgpCiAgICB7
CiAgICAgICAgaWYobGVuZ3RoKQogICAgICAgIHsKICAgICAgICAgICAgKCAoaW50KSh2YWx1ZSAh
PSAwKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FOdWxsVmFsdWUsICJ2YWx1ZSAhPSAwIiwgIi9o
b21lL21hdHQvb2IvaW5jbHVkZS9PQi9TdHJlYW0uaCIsIDUwMyksIGFib3J0KCkpICk7CiAgICAg
ICAgICAgIENPUkJBOjpVTG9uZyBhcnJzaXplID0gbGVuZ3RoICogMjsKICAgICAgICAgICAgYWRk
Q2FwYWNpdHkoYXJyc2l6ZSwgMik7CiAgICAgICAgICAgIG1lbWNweShidWZfIC0+IGN1cl8sIHZh
bHVlLCBhcnJzaXplKTsKICAgICAgICAgICAgYnVmXyAtPiBjdXJfICs9IGFycnNpemU7CiAgICAg
ICAgfQogICAgfQoKICAgIHZvaWQgd3JpdGVfbG9uZ19hcnJheShjb25zdCBDT1JCQTo6TG9uZyog
dmFsdWUsIENPUkJBOjpVTG9uZyBsZW5ndGgpCiAgICB7CiAgICAgICAgaWYobGVuZ3RoKQogICAg
ICAgIHsKICAgICAgICAgICAgKCAoaW50KSh2YWx1ZSAhPSAwKSA/ICh2b2lkKTAgOiAoT0I6Ok5D
QShOQ0FOdWxsVmFsdWUsICJ2YWx1ZSAhPSAwIiwgIi9ob21lL21hdHQvb2IvaW5jbHVkZS9PQi9T
dHJlYW0uaCIsIDUxNSksIGFib3J0KCkpICk7CiAgICAgICAgICAgIENPUkJBOjpVTG9uZyBhcnJz
aXplID0gbGVuZ3RoICogNDsKICAgICAgICAgICAgYWRkQ2FwYWNpdHkoYXJyc2l6ZSwgNCk7CiAg
ICAgICAgICAgIG1lbWNweShidWZfIC0+IGN1cl8sIHZhbHVlLCBhcnJzaXplKTsKICAgICAgICAg
ICAgYnVmXyAtPiBjdXJfICs9IGFycnNpemU7CiAgICAgICAgfQogICAgfQoKICAgIHZvaWQgd3Jp
dGVfdWxvbmdfYXJyYXkoY29uc3QgQ09SQkE6OlVMb25nKiB2YWx1ZSwgQ09SQkE6OlVMb25nIGxl
bmd0aCkKICAgIHsKICAgICAgICBpZihsZW5ndGgpCiAgICAgICAgewogICAgICAgICAgICAoIChp
bnQpKHZhbHVlICE9IDApID8gKHZvaWQpMCA6IChPQjo6TkNBKE5DQU51bGxWYWx1ZSwgInZhbHVl
ICE9IDAiLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1N0cmVhbS5oIiwgNTI3KSwgYWJvcnQo
KSkgKTsKICAgICAgICAgICAgQ09SQkE6OlVMb25nIGFycnNpemUgPSBsZW5ndGggKiA0OwogICAg
ICAgICAgICBhZGRDYXBhY2l0eShhcnJzaXplLCA0KTsKICAgICAgICAgICAgbWVtY3B5KGJ1Zl8g
LT4gY3VyXywgdmFsdWUsIGFycnNpemUpOwogICAgICAgICAgICBidWZfIC0+IGN1cl8gKz0gYXJy
c2l6ZTsKICAgICAgICB9CiAgICB9CgogICAgdm9pZCB3cml0ZV9sb25nbG9uZ19hcnJheShjb25z
dCBDT1JCQTo6TG9uZ0xvbmcqIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
T1JCQTo6VUxvbmcgbGVuZ3RoKQogICAgewogICAgICAgIGlmKGxlbmd0aCkKICAgICAgICB7CiAg
ICAgICAgICAgICggKGludCkodmFsdWUgIT0gMCkgPyAodm9pZCkwIDogKE9COjpOQ0EoTkNBTnVs
bFZhbHVlLCAidmFsdWUgIT0gMCIsICIvaG9tZS9tYXR0L29iL2luY2x1ZGUvT0IvU3RyZWFtLmgi
LCA1NDApLCBhYm9ydCgpKSApOwogICAgICAgICAgICBDT1JCQTo6VUxvbmcgYXJyc2l6ZSA9IGxl
bmd0aCAqIDg7CiAgICAgICAgICAgIGFkZENhcGFjaXR5KGFycnNpemUsIDgpOwogICAgICAgICAg
ICBtZW1jcHkoYnVmXyAtPiBjdXJfLCB2YWx1ZSwgYXJyc2l6ZSk7CiAgICAgICAgICAgIGJ1Zl8g
LT4gY3VyXyArPSBhcnJzaXplOwogICAgICAgIH0KICAgIH0KCiAgICB2b2lkIHdyaXRlX3Vsb25n
bG9uZ19hcnJheShjb25zdCBDT1JCQTo6VUxvbmdMb25nKiB2YWx1ZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgpCiAgICB7CiAgICAgICAgaWYobGVu
Z3RoKQogICAgICAgIHsKICAgICAgICAgICAgKCAoaW50KSh2YWx1ZSAhPSAwKSA/ICh2b2lkKTAg
OiAoT0I6Ok5DQShOQ0FOdWxsVmFsdWUsICJ2YWx1ZSAhPSAwIiwgIi9ob21lL21hdHQvb2IvaW5j
bHVkZS9PQi9TdHJlYW0uaCIsIDU1MyksIGFib3J0KCkpICk7CiAgICAgICAgICAgIENPUkJBOjpV
TG9uZyBhcnJzaXplID0gbGVuZ3RoICogODsKICAgICAgICAgICAgYWRkQ2FwYWNpdHkoYXJyc2l6
ZSwgOCk7CiAgICAgICAgICAgIG1lbWNweShidWZfIC0+IGN1cl8sIHZhbHVlLCBhcnJzaXplKTsK
ICAgICAgICAgICAgYnVmXyAtPiBjdXJfICs9IGFycnNpemU7CiAgICAgICAgfQogICAgfQoKICAg
IHZvaWQgd3JpdGVfZmxvYXRfYXJyYXkoY29uc3QgQ09SQkE6OkZsb2F0KiB2YWx1ZSwgQ09SQkE6
OlVMb25nIGxlbmd0aCkKICAgIHsKICAgICAgICBpZihsZW5ndGgpCiAgICAgICAgewogICAgICAg
ICAgICAoIChpbnQpKHZhbHVlICE9IDApID8gKHZvaWQpMCA6IChPQjo6TkNBKE5DQU51bGxWYWx1
ZSwgInZhbHVlICE9IDAiLCAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL1N0cmVhbS5oIiwgNTY1
KSwgYWJvcnQoKSkgKTsKICAgICAgICAgICAgQ09SQkE6OlVMb25nIGFycnNpemUgPSBsZW5ndGgg
KiA0OwogICAgICAgICAgICBhZGRDYXBhY2l0eShhcnJzaXplLCA0KTsKICAgICAgICAgICAgbWVt
Y3B5KGJ1Zl8gLT4gY3VyXywgdmFsdWUsIGFycnNpemUpOwogICAgICAgICAgICBidWZfIC0+IGN1
cl8gKz0gYXJyc2l6ZTsKICAgICAgICB9CiAgICB9CgogICAgdm9pZCB3cml0ZV9kb3VibGVfYXJy
YXkoY29uc3QgQ09SQkE6OkRvdWJsZSogdmFsdWUsIENPUkJBOjpVTG9uZyBsZW5ndGgpCiAgICB7
CiAgICAgICAgaWYobGVuZ3RoKQogICAgICAgIHsKICAgICAgICAgICAgKCAoaW50KSh2YWx1ZSAh
PSAwKSA/ICh2b2lkKTAgOiAoT0I6Ok5DQShOQ0FOdWxsVmFsdWUsICJ2YWx1ZSAhPSAwIiwgIi9o
b21lL21hdHQvb2IvaW5jbHVkZS9PQi9TdHJlYW0uaCIsIDU3NyksIGFib3J0KCkpICk7CiAgICAg
ICAgICAgIENPUkJBOjpVTG9uZyBhcnJzaXplID0gbGVuZ3RoICogODsKICAgICAgICAgICAgYWRk
Q2FwYWNpdHkoYXJyc2l6ZSwgOCk7CiAgICAgICAgICAgIG1lbWNweShidWZfIC0+IGN1cl8sIHZh
bHVlLCBhcnJzaXplKTsKICAgICAgICAgICAgYnVmXyAtPiBjdXJfICs9IGFycnNpemU7CiAgICAg
ICAgfQogICAgfQoKICAgIHZvaWQgd3JpdGVfd2NoYXJfYXJyYXkoY29uc3QgQ09SQkE6OldDaGFy
KiwgQ09SQkE6OlVMb25nKTsKICAgIHZvaWQgd3JpdGVfbG9uZ2RvdWJsZV9hcnJheShjb25zdCBD
T1JCQTo6TG9uZ0RvdWJsZSosIENPUkJBOjpVTG9uZyk7CgogICAgdm9pZCB3cml0ZV9hbnlfTm9U
eXBlQ29kZShjb25zdCBDT1JCQTo6QW55Jik7CiAgICB2b2lkIHdyaXRlX0lucHV0U3RyZWFtSW1w
bChJbnB1dFN0cmVhbUltcGwqLCBDT1JCQTo6VHlwZUNvZGVfcHRyKTsKfTsKCgoKCmNsYXNzIElu
cHV0U3RyZWFtIDogcHVibGljIElucHV0U3RyZWFtSW1wbCwgcHVibGljIFNpbXBsZVJlZkNvdW50
CnsKICAgIE9DSTo6QnVmZmVyX3ZhciBidWZWYXJfOwoKcHVibGljOgoKICAgIElucHV0U3RyZWFt
KE9DSTo6QnVmZmVyX3B0ciwgQ09SQkE6OlVMb25nLCBib29sLCBjb25zdCBDb2RlQ29udmVydGVy
cyogPSAwLAogICAgICAgICAgICAgICAgYm9vbCA9IDApOwogICAgdmlydHVhbCB+SW5wdXRTdHJl
YW0oKTsKCiAgICBzdGF0aWMgaW5saW5lIElucHV0U3RyZWFtX3B0ciBfZHVwbGljYXRlKElucHV0
U3RyZWFtX3B0ciBwKQogICAgeyBpZihwKSBwIC0+IF9PQl9pbmNSZWYoKTsgcmV0dXJuIHA7IH0K
ICAgIHN0YXRpYyBpbmxpbmUgSW5wdXRTdHJlYW1fcHRyIF9uaWwoKQogICAgeyByZXR1cm4gMDsg
fQoKICAgIElucHV0U3RyZWFtX3B0ciBfT0JfY2xvbmUoKTsKICAgIE9DSTo6QnVmZmVyX3B0ciBf
T0JfYnVmZmVyX25vZHVwKCkgeyByZXR1cm4gYnVmVmFyXy5pbigpOyB9CiAgICBPQ0k6OkJ1ZmZl
cl9wdHIgX09CX2J1ZmZlcl9yZXRuKCkgeyByZXR1cm4gYnVmVmFyXy5fcmV0bigpOyB9Cn07CgoK
CgpjbGFzcyBPdXRwdXRTdHJlYW0gOiBwdWJsaWMgT3V0cHV0U3RyZWFtSW1wbCwgcHVibGljIFNp
bXBsZVJlZkNvdW50CnsKICAgIE9DSTo6QnVmZmVyX3ZhciBidWZWYXJfOwoKcHVibGljOgoKICAg
IE91dHB1dFN0cmVhbShPQ0k6OkJ1ZmZlcl9wdHIsIGNvbnN0IENvZGVDb252ZXJ0ZXJzKiA9IDAs
IGJvb2wgPSBmYWxzZSk7CiAgICB2aXJ0dWFsIH5PdXRwdXRTdHJlYW0oKTsKCiAgICBzdGF0aWMg
aW5saW5lIE91dHB1dFN0cmVhbV9wdHIgX2R1cGxpY2F0ZShPdXRwdXRTdHJlYW1fcHRyIHApCiAg
ICB7IGlmKHApIHAgLT4gX09CX2luY1JlZigpOyByZXR1cm4gcDsgfQogICAgc3RhdGljIGlubGlu
ZSBPdXRwdXRTdHJlYW1fcHRyIF9uaWwoKQogICAgeyByZXR1cm4gMDsgfQoKICAgIE9DSTo6QnVm
ZmVyX3B0ciBfT0JfYnVmZmVyX25vZHVwKCkgeyByZXR1cm4gYnVmVmFyXy5pbigpOyB9CiAgICBP
Q0k6OkJ1ZmZlcl9wdHIgX09CX2J1ZmZlcl9yZXRuKCkgeyByZXR1cm4gYnVmVmFyXy5fcmV0bigp
OyB9Cn07Cgp9CgpuYW1lc3BhY2UgQ09SQkEKewoKaW5saW5lIHZvaWQKcmVsZWFzZShPQjo6SW5w
dXRTdHJlYW1fcHRyIHApCnsKICAgIGlmKHApCiAgICAgICAgcCAtPiBfT0JfZGVjUmVmKCk7Cn0K
CmlubGluZSBCb29sZWFuCmlzX25pbChPQjo6SW5wdXRTdHJlYW1fcHRyIHApCnsKICAgIHJldHVy
biBwID09IDA7Cn0KCmlubGluZSB2b2lkCnJlbGVhc2UoT0I6Ok91dHB1dFN0cmVhbV9wdHIgcCkK
ewogICAgaWYocCkKICAgICAgICBwIC0+IF9PQl9kZWNSZWYoKTsKfQoKaW5saW5lIEJvb2xlYW4K
aXNfbmlsKE9COjpPdXRwdXRTdHJlYW1fcHRyIHApCnsKICAgIHJldHVybiBwID09IDA7Cn0KCn0K
IyAyNSAiL2hvbWUvbWF0dC9vYi9pbmNsdWRlL09CL0NPUkJBQ2xpZW50LmgiIDIKIyAxNiAiU2Vy
dmVycy5jYyIgMgojIDEgIlNlcnZlcnMuaCIgMQojIDI4ICJTZXJ2ZXJzLmgiCmNsYXNzIFN0b3Jh
Z2U7CnR5cGVkZWYgU3RvcmFnZSogU3RvcmFnZV9wdHI7CnR5cGVkZWYgU3RvcmFnZSogU3RvcmFn
ZVJlZjsKCmV4dGVybiBPQjo6VHlwZUNvZGVDb25zdCBfdGNfU3RvcmFnZTsKCmNsYXNzIEludGVy
cDsKdHlwZWRlZiBJbnRlcnAqIEludGVycF9wdHI7CnR5cGVkZWYgSW50ZXJwKiBJbnRlcnBSZWY7
CgpleHRlcm4gT0I6OlR5cGVDb2RlQ29uc3QgX3RjX0ludGVycDsKCmNsYXNzIEludGVycEZhcm07
CnR5cGVkZWYgSW50ZXJwRmFybSogSW50ZXJwRmFybV9wdHI7CnR5cGVkZWYgSW50ZXJwRmFybSog
SW50ZXJwRmFybVJlZjsKCmV4dGVybiBPQjo6VHlwZUNvZGVDb25zdCBfdGNfSW50ZXJwRmFybTsK
CnZvaWQgT0JEdXBsaWNhdGUoU3RvcmFnZV9wdHIpOwp2b2lkIE9CUmVsZWFzZShTdG9yYWdlX3B0
cik7Cgp2b2lkIE9CTWFyc2hhbChTdG9yYWdlX3B0ciwgT0I6Ok91dHB1dFN0cmVhbUltcGwqKTsK
dm9pZCBPQlVubWFyc2hhbChTdG9yYWdlX3B0ciYsIE9COjpJbnB1dFN0cmVhbUltcGwqKTsKCnZv
aWQgT0JEdXBsaWNhdGUoSW50ZXJwX3B0cik7CnZvaWQgT0JSZWxlYXNlKEludGVycF9wdHIpOwoK
dm9pZCBPQk1hcnNoYWwoSW50ZXJwX3B0ciwgT0I6Ok91dHB1dFN0cmVhbUltcGwqKTsKdm9pZCBP
QlVubWFyc2hhbChJbnRlcnBfcHRyJiwgT0I6OklucHV0U3RyZWFtSW1wbCopOwoKdm9pZCBPQkR1
cGxpY2F0ZShJbnRlcnBGYXJtX3B0cik7CnZvaWQgT0JSZWxlYXNlKEludGVycEZhcm1fcHRyKTsK
CnZvaWQgT0JNYXJzaGFsKEludGVycEZhcm1fcHRyLCBPQjo6T3V0cHV0U3RyZWFtSW1wbCopOwp2
b2lkIE9CVW5tYXJzaGFsKEludGVycEZhcm1fcHRyJiwgT0I6OklucHV0U3RyZWFtSW1wbCopOwoK
dHlwZWRlZiBPQjo6T2JqVmFyPCBTdG9yYWdlID4gU3RvcmFnZV92YXI7CnR5cGVkZWYgT0I6Ok9i
ak91dDwgU3RvcmFnZSA+IFN0b3JhZ2Vfb3V0OwoKdHlwZWRlZiBPQjo6T2JqVmFyPCBJbnRlcnAg
PiBJbnRlcnBfdmFyOwp0eXBlZGVmIE9COjpPYmpPdXQ8IEludGVycCA+IEludGVycF9vdXQ7Cgp0
eXBlZGVmIE9COjpPYmpWYXI8IEludGVycEZhcm0gPiBJbnRlcnBGYXJtX3ZhcjsKdHlwZWRlZiBP
Qjo6T2JqT3V0PCBJbnRlcnBGYXJtID4gSW50ZXJwRmFybV9vdXQ7CgpjbGFzcyBPQlN0dWJJbXBs
X1N0b3JhZ2U7CnR5cGVkZWYgT0JTdHViSW1wbF9TdG9yYWdlKiBPQlN0dWJJbXBsX1N0b3JhZ2Vf
cHRyOwoKY2xhc3MgT0JTdHViSW1wbF9JbnRlcnA7CnR5cGVkZWYgT0JTdHViSW1wbF9JbnRlcnAq
IE9CU3R1YkltcGxfSW50ZXJwX3B0cjsKCmNsYXNzIE9CU3R1YkltcGxfSW50ZXJwRmFybTsKdHlw
ZWRlZiBPQlN0dWJJbXBsX0ludGVycEZhcm0qIE9CU3R1YkltcGxfSW50ZXJwRmFybV9wdHI7Cgp2
b2lkIE9CRHVwbGljYXRlKE9CU3R1YkltcGxfU3RvcmFnZV9wdHIpOwp2b2lkIE9CUmVsZWFzZShP
QlN0dWJJbXBsX1N0b3JhZ2VfcHRyKTsKCnZvaWQgT0JEdXBsaWNhdGUoT0JTdHViSW1wbF9JbnRl
cnBfcHRyKTsKdm9pZCBPQlJlbGVhc2UoT0JTdHViSW1wbF9JbnRlcnBfcHRyKTsKCnZvaWQgT0JE
dXBsaWNhdGUoT0JTdHViSW1wbF9JbnRlcnBGYXJtX3B0cik7CnZvaWQgT0JSZWxlYXNlKE9CU3R1
YkltcGxfSW50ZXJwRmFybV9wdHIpOwoKdHlwZWRlZiBPQjo6T2JqVmFyPCBPQlN0dWJJbXBsX1N0
b3JhZ2UgPiBPQlN0dWJJbXBsX1N0b3JhZ2VfdmFyOwoKdHlwZWRlZiBPQjo6T2JqVmFyPCBPQlN0
dWJJbXBsX0ludGVycCA+IE9CU3R1YkltcGxfSW50ZXJwX3ZhcjsKCnR5cGVkZWYgT0I6Ok9ialZh
cjwgT0JTdHViSW1wbF9JbnRlcnBGYXJtID4gT0JTdHViSW1wbF9JbnRlcnBGYXJtX3ZhcjsKCgoK
CmNsYXNzIE9CVW5pcXVlX2Zsb2F0X2FycmF5IHsgfTsKCnR5cGVkZWYgT0I6OkZpeFNlcTwgQ09S
QkE6OkZsb2F0LCBPQlVuaXF1ZV9mbG9hdF9hcnJheSA+IGZsb2F0X2FycmF5Owp0eXBlZGVmIE9C
OjpTZXFWYXI8IE9COjpGaXhTZXE8IENPUkJBOjpGbG9hdCwgT0JVbmlxdWVfZmxvYXRfYXJyYXkg
PiA+IGZsb2F0X2FycmF5X3ZhcjsKdHlwZWRlZiBPQjo6U2VxT3V0PCBPQjo6Rml4U2VxPCBDT1JC
QTo6RmxvYXQsIE9CVW5pcXVlX2Zsb2F0X2FycmF5ID4gPiBmbG9hdF9hcnJheV9vdXQ7CmV4dGVy
biBPQjo6VHlwZUNvZGVDb25zdCBfdGNfZmxvYXRfYXJyYXk7CgpzdHJ1Y3QgT0JJbmZvX2Zsb2F0
X2FycmF5IDogcHVibGljIE9COjpDb25zdHJ1Y3RlZEluZm8KewogICAgT0JJbmZvX2Zsb2F0X2Fy
cmF5KCkgeyB9CgogICAgdmlydHVhbCB2b2lkIGZyZWUodm9pZCogcCkgY29uc3QKICAgIHsKICAg
ICAgICBkZWxldGUgKGZsb2F0X2FycmF5KilwOwogICAgfQoKICAgIHZpcnR1YWwgdm9pZCogZHVw
KGNvbnN0IHZvaWQqIHApIGNvbnN0CiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBmbG9hdF9hcnJh
eSgqKGNvbnN0IGZsb2F0X2FycmF5KilwKTsKICAgIH0KCiAgICB2aXJ0dWFsIHZvaWQgbWFyc2hh
bChjb25zdCB2b2lkKiwgT0I6Ok91dHB1dFN0cmVhbUltcGwqKSBjb25zdDsKICAgIHZpcnR1YWwg
dm9pZCB1bm1hcnNoYWwodm9pZCosIE9COjpJbnB1dFN0cmVhbUltcGwqKSBjb25zdDsKfTsKCgoK
CmNsYXNzIE9CVW5pcXVlX2xvbmdfYXJyYXkgeyB9OwoKdHlwZWRlZiBPQjo6Rml4U2VxPCBDT1JC
QTo6TG9uZywgT0JVbmlxdWVfbG9uZ19hcnJheSA+IGxvbmdfYXJyYXk7CnR5cGVkZWYgT0I6OlNl
cVZhcjwgT0I6OkZpeFNlcTwgQ09SQkE6OkxvbmcsIE9CVW5pcXVlX2xvbmdfYXJyYXkgPiA+IGxv
bmdfYXJyYXlfdmFyOwp0eXBlZGVmIE9COjpTZXFPdXQ8IE9COjpGaXhTZXE8IENPUkJBOjpMb25n
LCBPQlVuaXF1ZV9sb25nX2FycmF5ID4gPiBsb25nX2FycmF5X291dDsKZXh0ZXJuIE9COjpUeXBl
Q29kZUNvbnN0IF90Y19sb25nX2FycmF5OwoKc3RydWN0IE9CSW5mb19sb25nX2FycmF5IDogcHVi
bGljIE9COjpDb25zdHJ1Y3RlZEluZm8KewogICAgT0JJbmZvX2xvbmdfYXJyYXkoKSB7IH0KCiAg
ICB2aXJ0dWFsIHZvaWQgZnJlZSh2b2lkKiBwKSBjb25zdAogICAgewogICAgICAgIGRlbGV0ZSAo
bG9uZ19hcnJheSopcDsKICAgIH0KCiAgICB2aXJ0dWFsIHZvaWQqIGR1cChjb25zdCB2b2lkKiBw
KSBjb25zdAogICAgewogICAgICAgIHJldHVybiBuZXcgbG9uZ19hcnJheSgqKGNvbnN0IGxvbmdf
YXJyYXkqKXApOwogICAgfQoKICAgIHZpcnR1YWwgdm9pZCBtYXJzaGFsKGNvbnN0IHZvaWQqLCBP
Qjo6T3V0cHV0U3RyZWFtSW1wbCopIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHVubWFyc2hhbCh2
b2lkKiwgT0I6OklucHV0U3RyZWFtSW1wbCopIGNvbnN0Owp9OwoKCgoKY2xhc3MgT0JVbmlxdWVf
Y2hhcl9hcnJheSB7IH07Cgp0eXBlZGVmIE9COjpGaXhTZXE8IENPUkJBOjpDaGFyLCBPQlVuaXF1
ZV9jaGFyX2FycmF5ID4gY2hhcl9hcnJheTsKdHlwZWRlZiBPQjo6U2VxVmFyPCBPQjo6Rml4U2Vx
PCBDT1JCQTo6Q2hhciwgT0JVbmlxdWVfY2hhcl9hcnJheSA+ID4gY2hhcl9hcnJheV92YXI7CnR5
cGVkZWYgT0I6OlNlcU91dDwgT0I6OkZpeFNlcTwgQ09SQkE6OkNoYXIsIE9CVW5pcXVlX2NoYXJf
YXJyYXkgPiA+IGNoYXJfYXJyYXlfb3V0OwpleHRlcm4gT0I6OlR5cGVDb2RlQ29uc3QgX3RjX2No
YXJfYXJyYXk7CgpzdHJ1Y3QgT0JJbmZvX2NoYXJfYXJyYXkgOiBwdWJsaWMgT0I6OkNvbnN0cnVj
dGVkSW5mbwp7CiAgICBPQkluZm9fY2hhcl9hcnJheSgpIHsgfQoKICAgIHZpcnR1YWwgdm9pZCBm
cmVlKHZvaWQqIHApIGNvbnN0CiAgICB7CiAgICAgICAgZGVsZXRlIChjaGFyX2FycmF5KilwOwog
ICAgfQoKICAgIHZpcnR1YWwgdm9pZCogZHVwKGNvbnN0IHZvaWQqIHApIGNvbnN0CiAgICB7CiAg
ICAgICAgcmV0dXJuIG5ldyBjaGFyX2FycmF5KCooY29uc3QgY2hhcl9hcnJheSopcCk7CiAgICB9
CgogICAgdmlydHVhbCB2b2lkIG1hcnNoYWwoY29uc3Qgdm9pZCosIE9COjpPdXRwdXRTdHJlYW1J
bXBsKikgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgdW5tYXJzaGFsKHZvaWQqLCBPQjo6SW5wdXRT
dHJlYW1JbXBsKikgY29uc3Q7Cn07CgoKCgpjbGFzcyBTdG9yYWdlIDogdmlydHVhbCBwdWJsaWMg
Q09SQkE6Ok9iamVjdAp7CiAgICBTdG9yYWdlKGNvbnN0IFN0b3JhZ2UmKTsKICAgIHZvaWQgb3Bl
cmF0b3I9KGNvbnN0IFN0b3JhZ2UmKTsKCiAgICBzdGF0aWMgY29uc3QgY2hhciogaWRzX1tdOwoK
cHJvdGVjdGVkOgoKICAgIHZpcnR1YWwgT0I6Ok1hcnNoYWxTdHViSW1wbF9wdHIgX09CX2NyZWF0
ZU1hcnNoYWxTdHViSW1wbCgpOwoKcHVibGljOgoKICAgIFN0b3JhZ2UoKSB7IH0KICAgIHZpcnR1
YWwgflN0b3JhZ2UoKSB7IH0KCiAgICB0eXBlZGVmIFN0b3JhZ2VfcHRyIF9wdHJfdHlwZTsKICAg
IHR5cGVkZWYgU3RvcmFnZV92YXIgX3Zhcl90eXBlOwoKICAgIHN0YXRpYyBpbmxpbmUgU3RvcmFn
ZV9wdHIKICAgIF9kdXBsaWNhdGUoU3RvcmFnZV9wdHIgcCkKICAgIHsKICAgICAgICBpZihwKQog
ICAgICAgICAgICBwIC0+IF9PQl9pbmNSZWYoKTsKICAgICAgICByZXR1cm4gcDsKICAgIH0KCiAg
ICBzdGF0aWMgaW5saW5lIFN0b3JhZ2VfcHRyCiAgICBfbmlsKCkKICAgIHsKICAgICAgICByZXR1
cm4gMDsKICAgIH0KCiAgICBzdGF0aWMgU3RvcmFnZV9wdHIgX25hcnJvdyhDT1JCQTo6T2JqZWN0
X3B0cik7CiAgICBzdGF0aWMgU3RvcmFnZV9wdHIgX25hcnJvdyhDT1JCQTo6QWJzdHJhY3RCYXNl
X3B0cik7CgogICAgdmlydHVhbCBjb25zdCBjaGFyKiogX09CX2lkcygpIGNvbnN0OwogICAgc3Rh
dGljIGNvbnN0IGNoYXIqKiBfT0Jfc3RhdGljSWRzKCk7CgoKCgogICAgQ09SQkE6OkxvbmcgYWRk
TmFtZXMoY29uc3QgY2hhcl9hcnJheSYgcHJvZ3JhbV9uYW1lLAogICAgICAgICAgICAgICAgICAg
ICAgICAgQ09SQkE6OkxvbmcgcHJvY2Vzc19udW1iZXIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBDT1JCQTo6TG9uZyBtLAogICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkxvbmcgbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0X2FycmF5JiBsYXRpdHVkZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0X2FycmF5JiBsb25naXR1ZGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBsb25nX2FycmF5JiB2YWxpZF9mbGFncywKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfYXJyYXkmIHZhcl9uYW1lc19pbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgIENPUkJBOjpMb25nIG5fdmFyc19pbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXJfYXJyYXkmIHZhcl9uYW1lc19vdXQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBDT1JCQTo6TG9uZyBuX3ZhcnNfb3V0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhcl9hcnJheSYgb2JqX25hbWVzKTsKCgoKCiAgICBDT1JCQTo6TG9uZyBzdG9yZU9uZShD
T1JCQTo6TG9uZyBwcm9jZXNzX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkRv
dWJsZSB0aW1lX2EsCiAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6RG91YmxlIHRpbWVf
YiwKICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpMb25nIHRpbWVfZmxhZ3MsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdF9hcnJheSYgZGF0YSwKICAgICAgICAgICAg
ICAgICAgICAgICAgIENPUkJBOjpMb25nIHN0YXJ0LAogICAgICAgICAgICAgICAgICAgICAgICAg
Q09SQkE6OkxvbmcgbiwKICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpMb25nIG1pLAog
ICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkxvbmcgbmksCiAgICAgICAgICAgICAgICAg
ICAgICAgICBDT1JCQTo6TG9uZyBuX3ZhcnMpOwoKCgoKICAgIENPUkJBOjpMb25nIGdldE9uZShD
T1JCQTo6TG9uZyBwcm9jZXNzX2lkLAogICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpEb3Vi
bGUgdGltZV9hLAogICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpEb3VibGUgdGltZV9iLAog
ICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpMb25nIHRpbWVfZmxhZ3MsCiAgICAgICAgICAg
ICAgICAgICAgICAgZmxvYXRfYXJyYXkmIGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgQ09S
QkE6Okxvbmcgc3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkxvbmcgbiwKICAg
ICAgICAgICAgICAgICAgICAgICBDT1JCQTo6TG9uZyBtaSwKICAgICAgICAgICAgICAgICAgICAg
ICBDT1JCQTo6TG9uZyBuaSwKICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6TG9uZyBuX3Zh
cnMsCiAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkxvbmcgYnVmZmVyKTsKfTsKCgoKCmNs
YXNzIEludGVycCA6IHZpcnR1YWwgcHVibGljIENPUkJBOjpPYmplY3QKewogICAgSW50ZXJwKGNv
bnN0IEludGVycCYpOwogICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgSW50ZXJwJik7CgogICAgc3Rh
dGljIGNvbnN0IGNoYXIqIGlkc19bXTsKCnByb3RlY3RlZDoKCiAgICB2aXJ0dWFsIE9COjpNYXJz
aGFsU3R1YkltcGxfcHRyIF9PQl9jcmVhdGVNYXJzaGFsU3R1YkltcGwoKTsKCnB1YmxpYzoKCiAg
ICBJbnRlcnAoKSB7IH0KICAgIHZpcnR1YWwgfkludGVycCgpIHsgfQoKICAgIHR5cGVkZWYgSW50
ZXJwX3B0ciBfcHRyX3R5cGU7CiAgICB0eXBlZGVmIEludGVycF92YXIgX3Zhcl90eXBlOwoKICAg
IHN0YXRpYyBpbmxpbmUgSW50ZXJwX3B0cgogICAgX2R1cGxpY2F0ZShJbnRlcnBfcHRyIHApCiAg
ICB7CiAgICAgICAgaWYocCkKICAgICAgICAgICAgcCAtPiBfT0JfaW5jUmVmKCk7CiAgICAgICAg
cmV0dXJuIHA7CiAgICB9CgogICAgc3RhdGljIGlubGluZSBJbnRlcnBfcHRyCiAgICBfbmlsKCkK
ICAgIHsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICBzdGF0aWMgSW50ZXJwX3B0ciBfbmFy
cm93KENPUkJBOjpPYmplY3RfcHRyKTsKICAgIHN0YXRpYyBJbnRlcnBfcHRyIF9uYXJyb3coQ09S
QkE6OkFic3RyYWN0QmFzZV9wdHIpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhcioqIF9PQl9pZHMo
KSBjb25zdDsKICAgIHN0YXRpYyBjb25zdCBjaGFyKiogX09CX3N0YXRpY0lkcygpOwoKCgoKICAg
IENPUkJBOjpMb25nIFNwYWNlSW50ZXJwU2V0dXAoQ09SQkE6OkxvbmcgZnJvbWwsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0X2FycmF5JiBmbGF0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdF9hcnJheSYgZmxvbik7CgoKCgog
ICAgQ09SQkE6OkxvbmcgU3BhY2VJbnRlcnBvbGF0ZShDT1JCQTo6RG91YmxlIHRpbWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpMb25nIHRvbSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkxvbmcgdG9uLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDT1JCQTo6TG9uZyB0b2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGZsb2F0X2FycmF5JiB0b2xhdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZmxvYXRfYXJyYXkmIHRvbG9uLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBsb25nX2FycmF5JiB0b2ZsYWdzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDT1JCQTo6TG9uZyBmcm9tbCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZmxvYXRfYXJyYXkmIGZyb20pOwoKCgoKICAgIENPUkJBOjpMb25nIEdl
dEludGVycG9sYXRlKENPUkJBOjpEb3VibGUgdGltZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENPUkJBOjpMb25nIHRvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENP
UkJBOjpMb25nIHRvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0X2FycmF5
JiB0byk7Cn07CgoKCgpjbGFzcyBJbnRlcnBGYXJtIDogdmlydHVhbCBwdWJsaWMgQ09SQkE6Ok9i
amVjdAp7CiAgICBJbnRlcnBGYXJtKGNvbnN0IEludGVycEZhcm0mKTsKICAgIHZvaWQgb3BlcmF0
b3I9KGNvbnN0IEludGVycEZhcm0mKTsKCiAgICBzdGF0aWMgY29uc3QgY2hhciogaWRzX1tdOwoK
cHJvdGVjdGVkOgoKICAgIHZpcnR1YWwgT0I6Ok1hcnNoYWxTdHViSW1wbF9wdHIgX09CX2NyZWF0
ZU1hcnNoYWxTdHViSW1wbCgpOwoKcHVibGljOgoKICAgIEludGVycEZhcm0oKSB7IH0KICAgIHZp
cnR1YWwgfkludGVycEZhcm0oKSB7IH0KCiAgICB0eXBlZGVmIEludGVycEZhcm1fcHRyIF9wdHJf
dHlwZTsKICAgIHR5cGVkZWYgSW50ZXJwRmFybV92YXIgX3Zhcl90eXBlOwoKICAgIHN0YXRpYyBp
bmxpbmUgSW50ZXJwRmFybV9wdHIKICAgIF9kdXBsaWNhdGUoSW50ZXJwRmFybV9wdHIgcCkKICAg
IHsKICAgICAgICBpZihwKQogICAgICAgICAgICBwIC0+IF9PQl9pbmNSZWYoKTsKICAgICAgICBy
ZXR1cm4gcDsKICAgIH0KCiAgICBzdGF0aWMgaW5saW5lIEludGVycEZhcm1fcHRyCiAgICBfbmls
KCkKICAgIHsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICBzdGF0aWMgSW50ZXJwRmFybV9w
dHIgX25hcnJvdyhDT1JCQTo6T2JqZWN0X3B0cik7CiAgICBzdGF0aWMgSW50ZXJwRmFybV9wdHIg
X25hcnJvdyhDT1JCQTo6QWJzdHJhY3RCYXNlX3B0cik7CgogICAgdmlydHVhbCBjb25zdCBjaGFy
KiogX09CX2lkcygpIGNvbnN0OwogICAgc3RhdGljIGNvbnN0IGNoYXIqKiBfT0Jfc3RhdGljSWRz
KCk7CgoKCgogICAgSW50ZXJwX3B0ciBjcmVhdGUoKTsKCgoKCiAgICBJbnRlcnBfcHRyIGdldFJl
ZmVyZW5jZShDT1JCQTo6TG9uZyBpZCk7Cn07CgoKCgpjbGFzcyBPQlN0dWJJbXBsX1N0b3JhZ2Ug
OiB2aXJ0dWFsIHB1YmxpYyBPQjo6U3R1YkltcGxCYXNlCnsKICAgIE9CU3R1YkltcGxfU3RvcmFn
ZShjb25zdCBPQlN0dWJJbXBsX1N0b3JhZ2UmKTsKICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IE9C
U3R1YkltcGxfU3RvcmFnZSYpOwoKcHJvdGVjdGVkOgoKICAgIE9CU3R1YkltcGxfU3RvcmFnZSgp
IHsgfQoKcHVibGljOgoKICAgIHN0YXRpYyBpbmxpbmUgT0JTdHViSW1wbF9TdG9yYWdlX3B0cgog
ICAgX2R1cGxpY2F0ZShPQlN0dWJJbXBsX1N0b3JhZ2VfcHRyIHApCiAgICB7CiAgICAgICAgaWYo
cCkKICAgICAgICAgICAgcCAtPiBfT0JfaW5jUmVmKCk7CiAgICAgICAgcmV0dXJuIHA7CiAgICB9
CgogICAgc3RhdGljIGlubGluZSBPQlN0dWJJbXBsX1N0b3JhZ2VfcHRyCiAgICBfbmlsKCkKICAg
IHsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCgoKCiAgICB2aXJ0dWFsIENPUkJBOjpMb25nIGFk
ZE5hbWVzKGNvbnN0IGNoYXJfYXJyYXkmIHByb2dyYW1fbmFtZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ09SQkE6OkxvbmcgcHJvY2Vzc19udW1iZXIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENPUkJBOjpMb25nIG0sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENPUkJBOjpMb25nIG4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGZsb2F0X2FycmF5JiBsYXRpdHVkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZmxvYXRfYXJyYXkmIGxvbmdpdHVkZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgbG9uZ19hcnJheSYgdmFsaWRfZmxhZ3MsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfYXJyYXkmIHZhcl9uYW1lc19pbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6Okxvbmcgbl92YXJzX2luLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX2FycmF5JiB2YXJfbmFtZXNfb3V0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6TG9uZyBuX3ZhcnNfb3V0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyX2FycmF5JiBvYmpfbmFtZXMp
ID0gMDsKCgoKCiAgICB2aXJ0dWFsIENPUkJBOjpMb25nIHN0b3JlT25lKENPUkJBOjpMb25nIHBy
b2Nlc3NfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpEb3VibGUg
dGltZV9hLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6RG91YmxlIHRp
bWVfYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkxvbmcgdGltZV9m
bGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXRfYXJyYXkm
IGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpMb25nIHN0YXJ0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6TG9uZyBuLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6TG9uZyBtaSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ09SQkE6OkxvbmcgbmksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENPUkJBOjpMb25nIG5fdmFycykgPSAwOwoKCgoKICAgIHZpcnR1YWwgQ09SQkE6
OkxvbmcgZ2V0T25lKENPUkJBOjpMb25nIHByb2Nlc3NfaWQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDT1JCQTo6RG91YmxlIHRpbWVfYSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENPUkJBOjpEb3VibGUgdGltZV9iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ09SQkE6OkxvbmcgdGltZV9mbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZsb2F0X2FycmF5JiBkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6
Okxvbmcgc3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6TG9uZyBu
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkxvbmcgbWksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6TG9uZyBuaSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENPUkJBOjpMb25nIG5fdmFycywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENPUkJBOjpMb25nIGJ1ZmZlcikgPSAwOwp9OwoKCgoKY2xhc3MgT0JTdHViSW1wbF9J
bnRlcnAgOiB2aXJ0dWFsIHB1YmxpYyBPQjo6U3R1YkltcGxCYXNlCnsKICAgIE9CU3R1YkltcGxf
SW50ZXJwKGNvbnN0IE9CU3R1YkltcGxfSW50ZXJwJik7CiAgICB2b2lkIG9wZXJhdG9yPShjb25z
dCBPQlN0dWJJbXBsX0ludGVycCYpOwoKcHJvdGVjdGVkOgoKICAgIE9CU3R1YkltcGxfSW50ZXJw
KCkgeyB9CgpwdWJsaWM6CgogICAgc3RhdGljIGlubGluZSBPQlN0dWJJbXBsX0ludGVycF9wdHIK
ICAgIF9kdXBsaWNhdGUoT0JTdHViSW1wbF9JbnRlcnBfcHRyIHApCiAgICB7CiAgICAgICAgaWYo
cCkKICAgICAgICAgICAgcCAtPiBfT0JfaW5jUmVmKCk7CiAgICAgICAgcmV0dXJuIHA7CiAgICB9
CgogICAgc3RhdGljIGlubGluZSBPQlN0dWJJbXBsX0ludGVycF9wdHIKICAgIF9uaWwoKQogICAg
ewogICAgICAgIHJldHVybiAwOwogICAgfQoKCgoKICAgIHZpcnR1YWwgQ09SQkE6OkxvbmcgU3Bh
Y2VJbnRlcnBTZXR1cChDT1JCQTo6TG9uZyBmcm9tbCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdF9hcnJheSYgZmxhdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdF9hcnJheSYgZmxvbikgPSAwOwoK
CgoKICAgIHZpcnR1YWwgQ09SQkE6OkxvbmcgU3BhY2VJbnRlcnBvbGF0ZShDT1JCQTo6RG91Ymxl
IHRpbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6Okxv
bmcgdG9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpM
b25nIHRvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6
TG9uZyB0b2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
ZmxvYXRfYXJyYXkmIHRvbGF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGZsb2F0X2FycmF5JiB0b2xvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBsb25nX2FycmF5JiB0b2ZsYWdzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpMb25nIGZyb21sLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0X2FycmF5JiBmcm9tKSA9IDA7
CgoKCgogICAgdmlydHVhbCBDT1JCQTo6TG9uZyBHZXRJbnRlcnBvbGF0ZShDT1JCQTo6RG91Ymxl
IHRpbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpMb25n
IHRvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6Okxvbmcg
dG9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdF9hcnJheSYg
dG8pID0gMDsKfTsKCgoKCmNsYXNzIE9CU3R1YkltcGxfSW50ZXJwRmFybSA6IHZpcnR1YWwgcHVi
bGljIE9COjpTdHViSW1wbEJhc2UKewogICAgT0JTdHViSW1wbF9JbnRlcnBGYXJtKGNvbnN0IE9C
U3R1YkltcGxfSW50ZXJwRmFybSYpOwogICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgT0JTdHViSW1w
bF9JbnRlcnBGYXJtJik7Cgpwcm90ZWN0ZWQ6CgogICAgT0JTdHViSW1wbF9JbnRlcnBGYXJtKCkg
eyB9CgpwdWJsaWM6CgogICAgc3RhdGljIGlubGluZSBPQlN0dWJJbXBsX0ludGVycEZhcm1fcHRy
CiAgICBfZHVwbGljYXRlKE9CU3R1YkltcGxfSW50ZXJwRmFybV9wdHIgcCkKICAgIHsKICAgICAg
ICBpZihwKQogICAgICAgICAgICBwIC0+IF9PQl9pbmNSZWYoKTsKICAgICAgICByZXR1cm4gcDsK
ICAgIH0KCiAgICBzdGF0aWMgaW5saW5lIE9CU3R1YkltcGxfSW50ZXJwRmFybV9wdHIKICAgIF9u
aWwoKQogICAgewogICAgICAgIHJldHVybiAwOwogICAgfQoKCgoKICAgIHZpcnR1YWwgSW50ZXJw
X3B0ciBjcmVhdGUoKSA9IDA7CgoKCgogICAgdmlydHVhbCBJbnRlcnBfcHRyIGdldFJlZmVyZW5j
ZShDT1JCQTo6TG9uZyBpZCkgPSAwOwp9OwoKCgoKY2xhc3MgT0JNYXJzaGFsU3R1YkltcGxfU3Rv
cmFnZSA6IHZpcnR1YWwgcHVibGljIE9CU3R1YkltcGxfU3RvcmFnZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZpcnR1YWwgcHVibGljIE9COjpNYXJzaGFsU3R1YkltcGwKewog
ICAgT0JNYXJzaGFsU3R1YkltcGxfU3RvcmFnZShjb25zdCBPQk1hcnNoYWxTdHViSW1wbF9TdG9y
YWdlJik7CiAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBPQk1hcnNoYWxTdHViSW1wbF9TdG9yYWdl
Jik7Cgpwcm90ZWN0ZWQ6CgogICAgT0JNYXJzaGFsU3R1YkltcGxfU3RvcmFnZSgpIHsgfQogICAg
ZnJpZW5kIGNsYXNzIFN0b3JhZ2U7CgpwdWJsaWM6CgoKCgogICAgdmlydHVhbCBDT1JCQTo6TG9u
ZyBhZGROYW1lcyhjb25zdCBjaGFyX2FycmF5JiBwcm9ncmFtX25hbWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENPUkJBOjpMb25nIHByb2Nlc3NfbnVtYmVyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6TG9uZyBtLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDT1JCQTo6TG9uZyBuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBmbG9hdF9hcnJheSYgbGF0aXR1ZGUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGZsb2F0X2FycmF5JiBsb25naXR1ZGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGxvbmdfYXJyYXkmIHZhbGlkX2ZsYWdzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX2FycmF5JiB2YXJfbmFtZXNfaW4sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpMb25nIG5fdmFyc19pbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl9hcnJheSYgdmFyX25hbWVz
X291dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6Okxvbmcgbl92YXJz
X291dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcl9hcnJheSYgb2JqX25h
bWVzKTsKCgoKCiAgICB2aXJ0dWFsIENPUkJBOjpMb25nIHN0b3JlT25lKENPUkJBOjpMb25nIHBy
b2Nlc3NfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpEb3VibGUg
dGltZV9hLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6RG91YmxlIHRp
bWVfYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkxvbmcgdGltZV9m
bGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXRfYXJyYXkm
IGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpMb25nIHN0YXJ0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6TG9uZyBuLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6TG9uZyBtaSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ09SQkE6OkxvbmcgbmksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENPUkJBOjpMb25nIG5fdmFycyk7CgoKCgogICAgdmlydHVhbCBDT1JCQTo6TG9u
ZyBnZXRPbmUoQ09SQkE6OkxvbmcgcHJvY2Vzc19pZCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENPUkJBOjpEb3VibGUgdGltZV9hLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ09SQkE6OkRvdWJsZSB0aW1lX2IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
T1JCQTo6TG9uZyB0aW1lX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxv
YXRfYXJyYXkmIGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6TG9u
ZyBzdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpMb25nIG4sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6TG9uZyBtaSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENPUkJBOjpMb25nIG5pLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ09SQkE6Okxvbmcgbl92YXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ09SQkE6OkxvbmcgYnVmZmVyKTsKfTsKCgoKCmNsYXNzIE9CTWFyc2hhbFN0dWJJbXBsX0lu
dGVycCA6IHZpcnR1YWwgcHVibGljIE9CU3R1YkltcGxfSW50ZXJwLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2aXJ0dWFsIHB1YmxpYyBPQjo6TWFyc2hhbFN0dWJJbXBsCnsKICAg
IE9CTWFyc2hhbFN0dWJJbXBsX0ludGVycChjb25zdCBPQk1hcnNoYWxTdHViSW1wbF9JbnRlcnAm
KTsKICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IE9CTWFyc2hhbFN0dWJJbXBsX0ludGVycCYpOwoK
cHJvdGVjdGVkOgoKICAgIE9CTWFyc2hhbFN0dWJJbXBsX0ludGVycCgpIHsgfQogICAgZnJpZW5k
IGNsYXNzIEludGVycDsKCnB1YmxpYzoKCgoKCiAgICB2aXJ0dWFsIENPUkJBOjpMb25nIFNwYWNl
SW50ZXJwU2V0dXAoQ09SQkE6OkxvbmcgZnJvbWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZmxvYXRfYXJyYXkmIGZsYXQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXRfYXJyYXkmIGZsb24pOwoKCgoKICAg
IHZpcnR1YWwgQ09SQkE6OkxvbmcgU3BhY2VJbnRlcnBvbGF0ZShDT1JCQTo6RG91YmxlIHRpbWUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkxvbmcgdG9t
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpMb25nIHRv
biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6TG9uZyB0
b2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXRf
YXJyYXkmIHRvbGF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGZsb2F0X2FycmF5JiB0b2xvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBsb25nX2FycmF5JiB0b2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENPUkJBOjpMb25nIGZyb21sLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0X2FycmF5JiBmcm9tKTsKCgoKCiAgICB2
aXJ0dWFsIENPUkJBOjpMb25nIEdldEludGVycG9sYXRlKENPUkJBOjpEb3VibGUgdGltZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkxvbmcgdG9tLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6TG9uZyB0b24sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0X2FycmF5JiB0byk7Cn07CgoK
CgpjbGFzcyBPQk1hcnNoYWxTdHViSW1wbF9JbnRlcnBGYXJtIDogdmlydHVhbCBwdWJsaWMgT0JT
dHViSW1wbF9JbnRlcnBGYXJtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmlydHVhbCBwdWJsaWMgT0I6Ok1hcnNoYWxTdHViSW1wbAp7CiAgICBPQk1hcnNoYWxTdHViSW1w
bF9JbnRlcnBGYXJtKGNvbnN0IE9CTWFyc2hhbFN0dWJJbXBsX0ludGVycEZhcm0mKTsKICAgIHZv
aWQgb3BlcmF0b3I9KGNvbnN0IE9CTWFyc2hhbFN0dWJJbXBsX0ludGVycEZhcm0mKTsKCnByb3Rl
Y3RlZDoKCiAgICBPQk1hcnNoYWxTdHViSW1wbF9JbnRlcnBGYXJtKCkgeyB9CiAgICBmcmllbmQg
Y2xhc3MgSW50ZXJwRmFybTsKCnB1YmxpYzoKCgoKCiAgICB2aXJ0dWFsIEludGVycF9wdHIgY3Jl
YXRlKCk7CgoKCgogICAgdmlydHVhbCBJbnRlcnBfcHRyIGdldFJlZmVyZW5jZShDT1JCQTo6TG9u
ZyBpZCk7Cn07CgoKCgp2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBmbG9hdF9hcnJheSop
Owp2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjb25zdCBmbG9hdF9hcnJheSYpOwpDT1JC
QTo6Qm9vbGVhbiBvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55JiwgY29uc3QgZmxvYXRfYXJy
YXkqJik7CgppbmxpbmUgdm9pZApvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYW55LCBmbG9h
dF9hcnJheSogdmFsKQp7CiAgICBhbnkuaW5vdXQoKSA8PD0gdmFsOwp9CgppbmxpbmUgdm9pZApv
cGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYW55LCBjb25zdCBmbG9hdF9hcnJheSYgdmFsKQp7
CiAgICBhbnkuaW5vdXQoKSA8PD0gdmFsOwp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4Kb3BlcmF0
b3I+Pj0oY29uc3QgQ09SQkE6OkFueV92YXImIGFueSwgY29uc3QgZmxvYXRfYXJyYXkqJiB2YWwp
CnsKICAgIHJldHVybiBhbnkuaW4oKSA+Pj0gdmFsOwp9CgoKCgp2b2lkIG9wZXJhdG9yPDw9KENP
UkJBOjpBbnkmLCBsb25nX2FycmF5Kik7CnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIGNv
bnN0IGxvbmdfYXJyYXkmKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6
OkFueSYsIGNvbnN0IGxvbmdfYXJyYXkqJik7CgppbmxpbmUgdm9pZApvcGVyYXRvcjw8PShDT1JC
QTo6QW55X3ZhciYgYW55LCBsb25nX2FycmF5KiB2YWwpCnsKICAgIGFueS5pbm91dCgpIDw8PSB2
YWw7Cn0KCmlubGluZSB2b2lkCm9wZXJhdG9yPDw9KENPUkJBOjpBbnlfdmFyJiBhbnksIGNvbnN0
IGxvbmdfYXJyYXkmIHZhbCkKewogICAgYW55Lmlub3V0KCkgPDw9IHZhbDsKfQoKaW5saW5lIENP
UkJBOjpCb29sZWFuCm9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnlfdmFyJiBhbnksIGNvbnN0
IGxvbmdfYXJyYXkqJiB2YWwpCnsKICAgIHJldHVybiBhbnkuaW4oKSA+Pj0gdmFsOwp9CgoKCgp2
b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBjaGFyX2FycmF5Kik7CnZvaWQgb3BlcmF0b3I8
PD0oQ09SQkE6OkFueSYsIGNvbnN0IGNoYXJfYXJyYXkmKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0
b3I+Pj0oY29uc3QgQ09SQkE6OkFueSYsIGNvbnN0IGNoYXJfYXJyYXkqJik7CgppbmxpbmUgdm9p
ZApvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYW55LCBjaGFyX2FycmF5KiB2YWwpCnsKICAg
IGFueS5pbm91dCgpIDw8PSB2YWw7Cn0KCmlubGluZSB2b2lkCm9wZXJhdG9yPDw9KENPUkJBOjpB
bnlfdmFyJiBhbnksIGNvbnN0IGNoYXJfYXJyYXkmIHZhbCkKewogICAgYW55Lmlub3V0KCkgPDw9
IHZhbDsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuCm9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpB
bnlfdmFyJiBhbnksIGNvbnN0IGNoYXJfYXJyYXkqJiB2YWwpCnsKICAgIHJldHVybiBhbnkuaW4o
KSA+Pj0gdmFsOwp9CgoKCgpuYW1lc3BhY2UgQ09SQkEKewoKaW5saW5lIHZvaWQKcmVsZWFzZShT
dG9yYWdlX3B0ciBwKQp7CiAgICBpZihwKQogICAgICAgIHAgLT4gX09CX2RlY1JlZigpOwp9Cgpp
bmxpbmUgQm9vbGVhbgppc19uaWwoU3RvcmFnZV9wdHIgcCkKewogICAgcmV0dXJuIHAgPT0gMDsK
fQoKaW5saW5lIHZvaWQKcmVsZWFzZShPQlN0dWJJbXBsX1N0b3JhZ2VfcHRyIHApCnsKICAgIGlm
KHApCiAgICAgICAgcCAtPiBfT0JfZGVjUmVmKCk7Cn0KCmlubGluZSBCb29sZWFuCmlzX25pbChP
QlN0dWJJbXBsX1N0b3JhZ2VfcHRyIHApCnsKICAgIHJldHVybiBwID09IDA7Cn0KCn0KCnZvaWQg
b3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIFN0b3JhZ2VfcHRyKik7CnZvaWQgb3BlcmF0b3I8PD0o
Q09SQkE6OkFueSYsIFN0b3JhZ2VfcHRyKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0oY29u
c3QgQ09SQkE6OkFueSYsIFN0b3JhZ2VfcHRyJik7CgppbmxpbmUgdm9pZApvcGVyYXRvcjw8PShD
T1JCQTo6QW55X3ZhciYgYW55LCBTdG9yYWdlX3B0ciogdmFsKQp7CiAgICBhbnkuaW5vdXQoKSA8
PD0gdmFsOwp9CgppbmxpbmUgdm9pZApvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYW55LCBT
dG9yYWdlX3B0ciB2YWwpCnsKICAgIGFueS5pbm91dCgpIDw8PSB2YWw7Cn0KCmlubGluZSBDT1JC
QTo6Qm9vbGVhbgpvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55X3ZhciYgYW55LCBTdG9yYWdl
X3B0ciYgdmFsKQp7CiAgICByZXR1cm4gYW55LmluKCkgPj49IHZhbDsKfQoKCgoKbmFtZXNwYWNl
IENPUkJBCnsKCmlubGluZSB2b2lkCnJlbGVhc2UoSW50ZXJwX3B0ciBwKQp7CiAgICBpZihwKQog
ICAgICAgIHAgLT4gX09CX2RlY1JlZigpOwp9CgppbmxpbmUgQm9vbGVhbgppc19uaWwoSW50ZXJw
X3B0ciBwKQp7CiAgICByZXR1cm4gcCA9PSAwOwp9CgppbmxpbmUgdm9pZApyZWxlYXNlKE9CU3R1
YkltcGxfSW50ZXJwX3B0ciBwKQp7CiAgICBpZihwKQogICAgICAgIHAgLT4gX09CX2RlY1JlZigp
Owp9CgppbmxpbmUgQm9vbGVhbgppc19uaWwoT0JTdHViSW1wbF9JbnRlcnBfcHRyIHApCnsKICAg
IHJldHVybiBwID09IDA7Cn0KCn0KCnZvaWQgb3BlcmF0b3I8PD0oQ09SQkE6OkFueSYsIEludGVy
cF9wdHIqKTsKdm9pZCBvcGVyYXRvcjw8PShDT1JCQTo6QW55JiwgSW50ZXJwX3B0cik7CkNPUkJB
OjpCb29sZWFuIG9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmLCBJbnRlcnBfcHRyJik7Cgpp
bmxpbmUgdm9pZApvcGVyYXRvcjw8PShDT1JCQTo6QW55X3ZhciYgYW55LCBJbnRlcnBfcHRyKiB2
YWwpCnsKICAgIGFueS5pbm91dCgpIDw8PSB2YWw7Cn0KCmlubGluZSB2b2lkCm9wZXJhdG9yPDw9
KENPUkJBOjpBbnlfdmFyJiBhbnksIEludGVycF9wdHIgdmFsKQp7CiAgICBhbnkuaW5vdXQoKSA8
PD0gdmFsOwp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4Kb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6
OkFueV92YXImIGFueSwgSW50ZXJwX3B0ciYgdmFsKQp7CiAgICByZXR1cm4gYW55LmluKCkgPj49
IHZhbDsKfQoKCgoKbmFtZXNwYWNlIENPUkJBCnsKCmlubGluZSB2b2lkCnJlbGVhc2UoSW50ZXJw
RmFybV9wdHIgcCkKewogICAgaWYocCkKICAgICAgICBwIC0+IF9PQl9kZWNSZWYoKTsKfQoKaW5s
aW5lIEJvb2xlYW4KaXNfbmlsKEludGVycEZhcm1fcHRyIHApCnsKICAgIHJldHVybiBwID09IDA7
Cn0KCmlubGluZSB2b2lkCnJlbGVhc2UoT0JTdHViSW1wbF9JbnRlcnBGYXJtX3B0ciBwKQp7CiAg
ICBpZihwKQogICAgICAgIHAgLT4gX09CX2RlY1JlZigpOwp9CgppbmxpbmUgQm9vbGVhbgppc19u
aWwoT0JTdHViSW1wbF9JbnRlcnBGYXJtX3B0ciBwKQp7CiAgICByZXR1cm4gcCA9PSAwOwp9Cgp9
Cgp2b2lkIG9wZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBJbnRlcnBGYXJtX3B0ciopOwp2b2lkIG9w
ZXJhdG9yPDw9KENPUkJBOjpBbnkmLCBJbnRlcnBGYXJtX3B0cik7CkNPUkJBOjpCb29sZWFuIG9w
ZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmLCBJbnRlcnBGYXJtX3B0ciYpOwoKaW5saW5lIHZv
aWQKb3BlcmF0b3I8PD0oQ09SQkE6OkFueV92YXImIGFueSwgSW50ZXJwRmFybV9wdHIqIHZhbCkK
ewogICAgYW55Lmlub3V0KCkgPDw9IHZhbDsKfQoKaW5saW5lIHZvaWQKb3BlcmF0b3I8PD0oQ09S
QkE6OkFueV92YXImIGFueSwgSW50ZXJwRmFybV9wdHIgdmFsKQp7CiAgICBhbnkuaW5vdXQoKSA8
PD0gdmFsOwp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4Kb3BlcmF0b3I+Pj0oY29uc3QgQ09SQkE6
OkFueV92YXImIGFueSwgSW50ZXJwRmFybV9wdHImIHZhbCkKewogICAgcmV0dXJuIGFueS5pbigp
ID4+PSB2YWw7Cn0KIyAxNyAiU2VydmVycy5jYyIgMgojIDI4ICJTZXJ2ZXJzLmNjIgpPQjo6VHlw
ZUNvZGVDb25zdCBfdGNfZmxvYXRfYXJyYXkoCiIwMTAwMDAwMDE1MDAwMDAwNDAwMDAwMDAwMTU3
NWI0MDE0MDAwMDAwNDk0NDRjM2E2NjZjNmY2MTc0NWY2MTcyNzI2MTc5M2EzMTJlMyIKIjAwMDBj
MDAwMDAwNjY2YzZmNjE3NDVmNjE3MjcyNjE3OTAwMTMwMDAwMDAwYzAwMDAwMDAxOGIxOTQwMDYw
MDAwMDAwMDAwMDAwMCIKKTsKCk9COjpUeXBlQ29kZUNvbnN0IF90Y19sb25nX2FycmF5KAoiMDEw
MDAwMDAxNTAwMDAwMDQwMDAwMDAwMDE1NzViNDAxMzAwMDAwMDQ5NDQ0YzNhNmM2ZjZlNjc1ZjYx
NzI3MjYxNzkzYTMxMmUzMDAiCiIwMDAwYjAwMDAwMDZjNmY2ZTY3NWY2MTcyNzI2MTc5MDAwMDEz
MDAwMDAwMGMwMDAwMDAwMThiMTk0MDAzMDAwMDAwMDAwMDAwMDAiCik7CgpPQjo6VHlwZUNvZGVD
b25zdCBfdGNfY2hhcl9hcnJheSgKIjAxMDAwMDAwMTUwMDAwMDA0MDAwMDAwMDAxNTc1YjQwMTMw
MDAwMDA0OTQ0NGMzYTYzNjg2MTcyNWY2MTcyNzI2MTc5M2EzMTJlMzAwIgoiMDAwMGIwMDAwMDA2
MzY4NjE3MjVmNjE3MjcyNjE3OTAwMDAxMzAwMDAwMDBjMDAwMDAwMDE4YjE5NDAwOTAwMDAwMDAw
MDAwMDAwIgopOwoKT0I6OlR5cGVDb2RlQ29uc3QgX3RjX1N0b3JhZ2UoCiIwMTAwMDAwMDBlMDAw
MDAwMjQwMDAwMDAwMWIxNzM0MDEwMDAwMDAwNDk0NDRjM2E1Mzc0NmY3MjYxNjc2NTNhMzEyZTMw
MDAwODAwMCIKIjAwMDUzNzQ2ZjcyNjE2NzY1MDAiCik7CgpPQjo6VHlwZUNvZGVDb25zdCBfdGNf
SW50ZXJwKAoiMDEwMDAwMDAwZTAwMDAwMDIzMDAwMDAwMDFiMTczNDAwZjAwMDAwMDQ5NDQ0YzNh
NDk2ZTc0NjU3MjcwM2EzMTJlMzAwMDAwMDcwMDAiCiIwMDA0OTZlNzQ2NTcyNzAwMCIKKTsKCk9C
OjpUeXBlQ29kZUNvbnN0IF90Y19JbnRlcnBGYXJtKAoiMDEwMDAwMDAwZTAwMDAwMDJiMDAwMDAw
MDFiMTczNDAxMzAwMDAwMDQ5NDQ0YzNhNDk2ZTc0NjU3MjcwNDY2MTcyNmQzYTMxMmUzMDAiCiIw
MDAwYjAwMDAwMDQ5NmU3NDY1NzI3MDQ2NjE3MjZkMDAiCik7CgoKCgp2b2lkCk9CSW5mb19mbG9h
dF9hcnJheTo6bWFyc2hhbChjb25zdCB2b2lkKiBfb2JfdiwgT0I6Ok91dHB1dFN0cmVhbUltcGwq
IF9vYl9vdXQpIGNvbnN0CnsKICAgIGNvbnN0IGZsb2F0X2FycmF5JiBfb2Jfc2VxID0gKihjb25z
dCBmbG9hdF9hcnJheSopX29iX3Y7CiAgICBDT1JCQTo6VUxvbmcgX29iX2xlbjAgPSBfb2Jfc2Vx
Lmxlbmd0aCgpOwogICAgX29iX291dCAtPiB3cml0ZV91bG9uZyhfb2JfbGVuMCk7CiAgICBfb2Jf
b3V0IC0+IHdyaXRlX2Zsb2F0X2FycmF5KF9vYl9zZXEuZ2V0X2J1ZmZlcigpLCBfb2JfbGVuMCk7
Cn0KCnZvaWQKT0JJbmZvX2Zsb2F0X2FycmF5Ojp1bm1hcnNoYWwodm9pZCogX29iX3YsIE9COjpJ
bnB1dFN0cmVhbUltcGwqIF9vYl9pbikgY29uc3QKewogICAgZmxvYXRfYXJyYXkmIF9vYl9zZXEg
PSAqKGZsb2F0X2FycmF5Kilfb2JfdjsKICAgIENPUkJBOjpVTG9uZyBfb2JfbGVuMCA9IF9vYl9p
biAtPiByZWFkX3Vsb25nKCk7CiAgICBfb2Jfc2VxLmxlbmd0aChfb2JfbGVuMCk7CiAgICBfb2Jf
aW4gLT4gcmVhZF9mbG9hdF9hcnJheShfb2Jfc2VxLmdldF9idWZmZXIoKSwgX29iX2xlbjApOwp9
Cgp2b2lkCm9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIGFueSwgZmxvYXRfYXJyYXkqIHYpCnsKICAg
IHN0YXRpYyBjb25zdCBPQkluZm9fZmxvYXRfYXJyYXkgaW5mbzsKICAgIGFueS5yZXBsYWNlKF90
Y19mbG9hdF9hcnJheSwgdiwgdHJ1ZSwgJmluZm8pOwp9Cgp2b2lkCm9wZXJhdG9yPDw9KENPUkJB
OjpBbnkmIGFueSwgY29uc3QgZmxvYXRfYXJyYXkmIHYpCnsKICAgIGFueSA8PD0gbmV3IGZsb2F0
X2FycmF5KHYpOwp9CgpDT1JCQTo6Qm9vbGVhbgpvcGVyYXRvcj4+PShjb25zdCBDT1JCQTo6QW55
JiBhbnksIGNvbnN0IGZsb2F0X2FycmF5KiYgdikKewogICAgaWYoYW55LmNoZWNrX3R5cGUoX3Rj
X2Zsb2F0X2FycmF5KSkKICAgIHsKICAgICAgICBpZighYW55LmluZm8oKSkKICAgICAgICB7CiAg
ICAgICAgICAgIE9COjpJbnB1dFN0cmVhbV92YXIgX29iX2luID0gYW55LmNyZWF0ZV9pbnB1dF9z
dHJlYW0oKTsKICAgICAgICAgICAgZmxvYXRfYXJyYXkqIHZhbCA9IG5ldyBmbG9hdF9hcnJheTsK
ICAgICAgICAgICAgQ09SQkE6OlVMb25nIF9vYl9sZW4wID0gX29iX2luIC0+IHJlYWRfdWxvbmco
KTsKICAgICAgICAgICAgKCp2YWwpLmxlbmd0aChfb2JfbGVuMCk7CiAgICAgICAgICAgIF9vYl9p
biAtPiByZWFkX2Zsb2F0X2FycmF5KCgqdmFsKS5nZXRfYnVmZmVyKCksIF9vYl9sZW4wKTsKICAg
ICAgICAgICAgKENPUkJBOjpBbnkmKWFueSA8PD0gdmFsOwogICAgICAgIH0KCiAgICAgICAgdiA9
IChmbG9hdF9hcnJheSopYW55LnZhbHVlKCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAg
ICBlbHNlCiAgICAgICAgcmV0dXJuIGZhbHNlOwp9CgoKCgp2b2lkCk9CSW5mb19sb25nX2FycmF5
OjptYXJzaGFsKGNvbnN0IHZvaWQqIF9vYl92LCBPQjo6T3V0cHV0U3RyZWFtSW1wbCogX29iX291
dCkgY29uc3QKewogICAgY29uc3QgbG9uZ19hcnJheSYgX29iX3NlcSA9ICooY29uc3QgbG9uZ19h
cnJheSopX29iX3Y7CiAgICBDT1JCQTo6VUxvbmcgX29iX2xlbjAgPSBfb2Jfc2VxLmxlbmd0aCgp
OwogICAgX29iX291dCAtPiB3cml0ZV91bG9uZyhfb2JfbGVuMCk7CiAgICBfb2Jfb3V0IC0+IHdy
aXRlX2xvbmdfYXJyYXkoX29iX3NlcS5nZXRfYnVmZmVyKCksIF9vYl9sZW4wKTsKfQoKdm9pZApP
QkluZm9fbG9uZ19hcnJheTo6dW5tYXJzaGFsKHZvaWQqIF9vYl92LCBPQjo6SW5wdXRTdHJlYW1J
bXBsKiBfb2JfaW4pIGNvbnN0CnsKICAgIGxvbmdfYXJyYXkmIF9vYl9zZXEgPSAqKGxvbmdfYXJy
YXkqKV9vYl92OwogICAgQ09SQkE6OlVMb25nIF9vYl9sZW4wID0gX29iX2luIC0+IHJlYWRfdWxv
bmcoKTsKICAgIF9vYl9zZXEubGVuZ3RoKF9vYl9sZW4wKTsKICAgIF9vYl9pbiAtPiByZWFkX2xv
bmdfYXJyYXkoX29iX3NlcS5nZXRfYnVmZmVyKCksIF9vYl9sZW4wKTsKfQoKdm9pZApvcGVyYXRv
cjw8PShDT1JCQTo6QW55JiBhbnksIGxvbmdfYXJyYXkqIHYpCnsKICAgIHN0YXRpYyBjb25zdCBP
QkluZm9fbG9uZ19hcnJheSBpbmZvOwogICAgYW55LnJlcGxhY2UoX3RjX2xvbmdfYXJyYXksIHYs
IHRydWUsICZpbmZvKTsKfQoKdm9pZApvcGVyYXRvcjw8PShDT1JCQTo6QW55JiBhbnksIGNvbnN0
IGxvbmdfYXJyYXkmIHYpCnsKICAgIGFueSA8PD0gbmV3IGxvbmdfYXJyYXkodik7Cn0KCkNPUkJB
OjpCb29sZWFuCm9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmIGFueSwgY29uc3QgbG9uZ19h
cnJheSomIHYpCnsKICAgIGlmKGFueS5jaGVja190eXBlKF90Y19sb25nX2FycmF5KSkKICAgIHsK
ICAgICAgICBpZighYW55LmluZm8oKSkKICAgICAgICB7CiAgICAgICAgICAgIE9COjpJbnB1dFN0
cmVhbV92YXIgX29iX2luID0gYW55LmNyZWF0ZV9pbnB1dF9zdHJlYW0oKTsKICAgICAgICAgICAg
bG9uZ19hcnJheSogdmFsID0gbmV3IGxvbmdfYXJyYXk7CiAgICAgICAgICAgIENPUkJBOjpVTG9u
ZyBfb2JfbGVuMCA9IF9vYl9pbiAtPiByZWFkX3Vsb25nKCk7CiAgICAgICAgICAgICgqdmFsKS5s
ZW5ndGgoX29iX2xlbjApOwogICAgICAgICAgICBfb2JfaW4gLT4gcmVhZF9sb25nX2FycmF5KCgq
dmFsKS5nZXRfYnVmZmVyKCksIF9vYl9sZW4wKTsKICAgICAgICAgICAgKENPUkJBOjpBbnkmKWFu
eSA8PD0gdmFsOwogICAgICAgIH0KCiAgICAgICAgdiA9IChsb25nX2FycmF5KilhbnkudmFsdWUo
KTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGVsc2UKICAgICAgICByZXR1cm4gZmFs
c2U7Cn0KCgoKCnZvaWQKT0JJbmZvX2NoYXJfYXJyYXk6Om1hcnNoYWwoY29uc3Qgdm9pZCogX29i
X3YsIE9COjpPdXRwdXRTdHJlYW1JbXBsKiBfb2Jfb3V0KSBjb25zdAp7CiAgICBjb25zdCBjaGFy
X2FycmF5JiBfb2Jfc2VxID0gKihjb25zdCBjaGFyX2FycmF5Kilfb2JfdjsKICAgIENPUkJBOjpV
TG9uZyBfb2JfbGVuMCA9IF9vYl9zZXEubGVuZ3RoKCk7CiAgICBfb2Jfb3V0IC0+IHdyaXRlX3Vs
b25nKF9vYl9sZW4wKTsKICAgIF9vYl9vdXQgLT4gd3JpdGVfY2hhcl9hcnJheShfb2Jfc2VxLmdl
dF9idWZmZXIoKSwgX29iX2xlbjApOwp9Cgp2b2lkCk9CSW5mb19jaGFyX2FycmF5Ojp1bm1hcnNo
YWwodm9pZCogX29iX3YsIE9COjpJbnB1dFN0cmVhbUltcGwqIF9vYl9pbikgY29uc3QKewogICAg
Y2hhcl9hcnJheSYgX29iX3NlcSA9ICooY2hhcl9hcnJheSopX29iX3Y7CiAgICBDT1JCQTo6VUxv
bmcgX29iX2xlbjAgPSBfb2JfaW4gLT4gcmVhZF91bG9uZygpOwogICAgX29iX3NlcS5sZW5ndGgo
X29iX2xlbjApOwogICAgX29iX2luIC0+IHJlYWRfY2hhcl9hcnJheShfb2Jfc2VxLmdldF9idWZm
ZXIoKSwgX29iX2xlbjApOwp9Cgp2b2lkCm9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIGFueSwgY2hh
cl9hcnJheSogdikKewogICAgc3RhdGljIGNvbnN0IE9CSW5mb19jaGFyX2FycmF5IGluZm87CiAg
ICBhbnkucmVwbGFjZShfdGNfY2hhcl9hcnJheSwgdiwgdHJ1ZSwgJmluZm8pOwp9Cgp2b2lkCm9w
ZXJhdG9yPDw9KENPUkJBOjpBbnkmIGFueSwgY29uc3QgY2hhcl9hcnJheSYgdikKewogICAgYW55
IDw8PSBuZXcgY2hhcl9hcnJheSh2KTsKfQoKQ09SQkE6OkJvb2xlYW4Kb3BlcmF0b3I+Pj0oY29u
c3QgQ09SQkE6OkFueSYgYW55LCBjb25zdCBjaGFyX2FycmF5KiYgdikKewogICAgaWYoYW55LmNo
ZWNrX3R5cGUoX3RjX2NoYXJfYXJyYXkpKQogICAgewogICAgICAgIGlmKCFhbnkuaW5mbygpKQog
ICAgICAgIHsKICAgICAgICAgICAgT0I6OklucHV0U3RyZWFtX3ZhciBfb2JfaW4gPSBhbnkuY3Jl
YXRlX2lucHV0X3N0cmVhbSgpOwogICAgICAgICAgICBjaGFyX2FycmF5KiB2YWwgPSBuZXcgY2hh
cl9hcnJheTsKICAgICAgICAgICAgQ09SQkE6OlVMb25nIF9vYl9sZW4wID0gX29iX2luIC0+IHJl
YWRfdWxvbmcoKTsKICAgICAgICAgICAgKCp2YWwpLmxlbmd0aChfb2JfbGVuMCk7CiAgICAgICAg
ICAgIF9vYl9pbiAtPiByZWFkX2NoYXJfYXJyYXkoKCp2YWwpLmdldF9idWZmZXIoKSwgX29iX2xl
bjApOwogICAgICAgICAgICAoQ09SQkE6OkFueSYpYW55IDw8PSB2YWw7CiAgICAgICAgfQoKICAg
ICAgICB2ID0gKGNoYXJfYXJyYXkqKWFueS52YWx1ZSgpOwogICAgICAgIHJldHVybiB0cnVlOwog
ICAgfQogICAgZWxzZQogICAgICAgIHJldHVybiBmYWxzZTsKfQoKCgoKY29uc3QgY2hhciogU3Rv
cmFnZTo6aWRzX1tdID0KewogICAgIklETDpTdG9yYWdlOjEuMCIsCiAgICAwCn07CgpPQjo6TWFy
c2hhbFN0dWJJbXBsX3B0cgpTdG9yYWdlOjpfT0JfY3JlYXRlTWFyc2hhbFN0dWJJbXBsKCkKewog
ICAgcmV0dXJuIG5ldyBPQk1hcnNoYWxTdHViSW1wbF9TdG9yYWdlOwp9Cgp2b2lkCk9CRHVwbGlj
YXRlKFN0b3JhZ2VfcHRyIHApCnsKICAgIGlmKHApCiAgICAgICAgcCAtPiBfT0JfaW5jUmVmKCk7
Cn0KCnZvaWQKT0JSZWxlYXNlKFN0b3JhZ2VfcHRyIHApCnsKICAgIGlmKHApCiAgICAgICAgcCAt
PiBfT0JfZGVjUmVmKCk7Cn0KClN0b3JhZ2VfcHRyClN0b3JhZ2U6Ol9uYXJyb3coQ09SQkE6Ok9i
amVjdF9wdHIgcCkKewogICAgaWYoIUNPUkJBOjppc19uaWwocCkpCiAgICB7CiAgICAgICAgU3Rv
cmFnZV9wdHIgdiA9IGR5bmFtaWNfY2FzdDxTdG9yYWdlX3B0cj4ocCk7CiAgICAgICAgaWYodikK
ICAgICAgICAgICAgcmV0dXJuIF9kdXBsaWNhdGUodik7CgogICAgICAgIGlmKHAgLT4gX2lzX2Eo
aWRzX1swXSkpCiAgICAgICAgewogICAgICAgICAgICBTdG9yYWdlX3B0ciB2YWwgPSBuZXcgU3Rv
cmFnZTsKICAgICAgICAgICAgdmFsIC0+IF9PQl9jb3B5RnJvbShwKTsKICAgICAgICAgICAgcmV0
dXJuIHZhbDsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIF9uaWwoKTsKfQoKU3RvcmFnZV9w
dHIKU3RvcmFnZTo6X25hcnJvdyhDT1JCQTo6QWJzdHJhY3RCYXNlX3B0ciBwKQp7CiAgICBpZigh
Q09SQkE6OmlzX25pbChwKSkKICAgIHsKICAgICAgICBDT1JCQTo6T2JqZWN0X3ZhciBvYmogPSBw
IC0+IF90b19vYmplY3QoKTsKICAgICAgICByZXR1cm4gX25hcnJvdyhvYmopOwogICAgfQogICAg
cmV0dXJuIF9uaWwoKTsKfQoKY29uc3QgY2hhcioqClN0b3JhZ2U6Ol9PQl9pZHMoKSBjb25zdAp7
CiAgICByZXR1cm4gaWRzXzsKfQoKY29uc3QgY2hhcioqClN0b3JhZ2U6Ol9PQl9zdGF0aWNJZHMo
KQp7CiAgICByZXR1cm4gaWRzXzsKfQoKdm9pZApPQk1hcnNoYWwoU3RvcmFnZV9wdHIgX29iX3Ys
IE9COjpPdXRwdXRTdHJlYW1JbXBsKiBfb2Jfb3V0KQp7CiAgICBfb2Jfb3V0IC0+IHdyaXRlX09i
amVjdChfb2Jfdik7Cn0KCnZvaWQKT0JVbm1hcnNoYWwoU3RvcmFnZV9wdHImIF9vYl92LCBPQjo6
SW5wdXRTdHJlYW1JbXBsKiBfb2JfaW4pCnsKICAgIFN0b3JhZ2VfdmFyIG9sZCA9IF9vYl92Owog
ICAgQ09SQkE6Ok9iamVjdF92YXIgcCA9IF9vYl9pbiAtPiByZWFkX09iamVjdCgpOwoKICAgIGlm
KCFDT1JCQTo6aXNfbmlsKHApKQogICAgewogICAgICAgIF9vYl92ID0gbmV3IFN0b3JhZ2U7CiAg
ICAgICAgX29iX3YgLT4gX09CX2NvcHlGcm9tKHApOwogICAgfQogICAgZWxzZQogICAgICAgIF9v
Yl92ID0gU3RvcmFnZTo6X25pbCgpOwp9Cgp2b2lkCm9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIGFu
eSwgU3RvcmFnZV9wdHIqIHYpCnsKICAgIGFueS5yZXBsYWNlKF90Y19TdG9yYWdlLCAoQ09SQkE6
Ok9iamVjdF9wdHIpKnYsIHRydWUpOwp9Cgp2b2lkCm9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIGFu
eSwgU3RvcmFnZV9wdHIgdikKewogICAgU3RvcmFnZV9wdHIgdmFsID0gU3RvcmFnZTo6X2R1cGxp
Y2F0ZSh2KTsKICAgIGFueSA8PD0gJnZhbDsKfQoKQ09SQkE6OkJvb2xlYW4Kb3BlcmF0b3I+Pj0o
Y29uc3QgQ09SQkE6OkFueSYgYW55LCBTdG9yYWdlX3B0ciYgdikKewogICAgaWYoYW55LmNoZWNr
X3R5cGUoX3RjX1N0b3JhZ2UpKQogICAgewogICAgICAgIENPUkJBOjpPYmplY3RfcHRyIHZhbCA9
IChDT1JCQTo6T2JqZWN0X3B0cilhbnkudmFsdWUoKTsKCiAgICAgICAgaWYoIUNPUkJBOjppc19u
aWwodmFsKSkKICAgICAgICB7CiAgICAgICAgICAgIGlmKCEodiA9IGR5bmFtaWNfY2FzdDxTdG9y
YWdlX3B0cj4odmFsKSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHYgPSBuZXcgU3Rv
cmFnZTsKICAgICAgICAgICAgICAgIHYgLT4gX09CX2NvcHlGcm9tKHZhbCk7CiAgICAgICAgICAg
ICAgICAoQ09SQkE6OkFueSYpYW55IDw8PSAmdjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgICBlbHNlCiAgICAgICAgICAgIHYgPSBTdG9yYWdlOjpfbmlsKCk7CgogICAgICAgIHJldHVy
biB0cnVlOwogICAgfQogICAgZWxzZQogICAgICAgIHJldHVybiBmYWxzZTsKfQoKCgoKQ09SQkE6
OkxvbmcKU3RvcmFnZTo6YWRkTmFtZXMoY29uc3QgY2hhcl9hcnJheSYgX29iX2EwLAogICAgICAg
ICAgICAgICAgICBDT1JCQTo6TG9uZyBfb2JfYTEsCiAgICAgICAgICAgICAgICAgIENPUkJBOjpM
b25nIF9vYl9hMiwKICAgICAgICAgICAgICAgICAgQ09SQkE6OkxvbmcgX29iX2EzLAogICAgICAg
ICAgICAgICAgICBjb25zdCBmbG9hdF9hcnJheSYgX29iX2E0LAogICAgICAgICAgICAgICAgICBj
b25zdCBmbG9hdF9hcnJheSYgX29iX2E1LAogICAgICAgICAgICAgICAgICBjb25zdCBsb25nX2Fy
cmF5JiBfb2JfYTYsCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfYXJyYXkmIF9vYl9hNywK
ICAgICAgICAgICAgICAgICAgQ09SQkE6OkxvbmcgX29iX2E4LAogICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyX2FycmF5JiBfb2JfYTksCiAgICAgICAgICAgICAgICAgIENPUkJBOjpMb25nIF9v
Yl9hMTAsCiAgICAgICAgICAgICAgICAgIGNoYXJfYXJyYXkmIF9vYl9hMTEpCnsKICAgIGJvb2wg
X29iX3JldHJ5ID0gdHJ1ZTsKICAgIHdoaWxlKHRydWUpCiAgICB7CiAgICAgICAgT0I6OlN0dWJJ
bXBsQmFzZV92YXIgX29iX3N0dWJJbXBsQmFzZSA9IF9PQl9nZXRTdHViSW1wbCgpOwogICAgICAg
IE9CU3R1YkltcGxfU3RvcmFnZV9wdHIgX29iX3N0dWJJbXBsID0gZHluYW1pY19jYXN0PE9CU3R1
YkltcGxfU3RvcmFnZV9wdHI+KF9vYl9zdHViSW1wbEJhc2UuaW4oKSk7CiAgICAgICAgdHJ5CiAg
ICAgICAgewogICAgICAgICAgICByZXR1cm4gX29iX3N0dWJJbXBsIC0+IGFkZE5hbWVzKF9vYl9h
MCwgX29iX2ExLCBfb2JfYTIsIF9vYl9hMywgX29iX2E0LCBfb2JfYTUsIF9vYl9hNiwgX29iX2E3
LCBfb2JfYTgsIF9vYl9hOSwgX29iX2ExMCwgX29iX2ExMSk7CiAgICAgICAgfQogICAgICAgIGNh
dGNoKGNvbnN0IE9COjpFeGNlcHRpb25CYXNlJiBfb2JfZXgpCiAgICAgICAgewogICAgICAgICAg
ICBfT0JfaGFuZGxlRXhjZXB0aW9uKF9vYl9leCwgX29iX3JldHJ5KTsKICAgICAgICB9CiAgICB9
Cn0KCgoKCkNPUkJBOjpMb25nClN0b3JhZ2U6OnN0b3JlT25lKENPUkJBOjpMb25nIF9vYl9hMCwK
ICAgICAgICAgICAgICAgICAgQ09SQkE6OkRvdWJsZSBfb2JfYTEsCiAgICAgICAgICAgICAgICAg
IENPUkJBOjpEb3VibGUgX29iX2EyLAogICAgICAgICAgICAgICAgICBDT1JCQTo6TG9uZyBfb2Jf
YTMsCiAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0X2FycmF5JiBfb2JfYTQsCiAgICAgICAg
ICAgICAgICAgIENPUkJBOjpMb25nIF9vYl9hNSwKICAgICAgICAgICAgICAgICAgQ09SQkE6Okxv
bmcgX29iX2E2LAogICAgICAgICAgICAgICAgICBDT1JCQTo6TG9uZyBfb2JfYTcsCiAgICAgICAg
ICAgICAgICAgIENPUkJBOjpMb25nIF9vYl9hOCwKICAgICAgICAgICAgICAgICAgQ09SQkE6Okxv
bmcgX29iX2E5KQp7CiAgICBib29sIF9vYl9yZXRyeSA9IHRydWU7CiAgICB3aGlsZSh0cnVlKQog
ICAgewogICAgICAgIE9COjpTdHViSW1wbEJhc2VfdmFyIF9vYl9zdHViSW1wbEJhc2UgPSBfT0Jf
Z2V0U3R1YkltcGwoKTsKICAgICAgICBPQlN0dWJJbXBsX1N0b3JhZ2VfcHRyIF9vYl9zdHViSW1w
bCA9IGR5bmFtaWNfY2FzdDxPQlN0dWJJbXBsX1N0b3JhZ2VfcHRyPihfb2Jfc3R1YkltcGxCYXNl
LmluKCkpOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIF9vYl9zdHVi
SW1wbCAtPiBzdG9yZU9uZShfb2JfYTAsIF9vYl9hMSwgX29iX2EyLCBfb2JfYTMsIF9vYl9hNCwg
X29iX2E1LCBfb2JfYTYsIF9vYl9hNywgX29iX2E4LCBfb2JfYTkpOwogICAgICAgIH0KICAgICAg
ICBjYXRjaChjb25zdCBPQjo6RXhjZXB0aW9uQmFzZSYgX29iX2V4KQogICAgICAgIHsKICAgICAg
ICAgICAgX09CX2hhbmRsZUV4Y2VwdGlvbihfb2JfZXgsIF9vYl9yZXRyeSk7CiAgICAgICAgfQog
ICAgfQp9CgoKCgpDT1JCQTo6TG9uZwpTdG9yYWdlOjpnZXRPbmUoQ09SQkE6OkxvbmcgX29iX2Ew
LAogICAgICAgICAgICAgICAgQ09SQkE6OkRvdWJsZSBfb2JfYTEsCiAgICAgICAgICAgICAgICBD
T1JCQTo6RG91YmxlIF9vYl9hMiwKICAgICAgICAgICAgICAgIENPUkJBOjpMb25nIF9vYl9hMywK
ICAgICAgICAgICAgICAgIGZsb2F0X2FycmF5JiBfb2JfYTQsCiAgICAgICAgICAgICAgICBDT1JC
QTo6TG9uZyBfb2JfYTUsCiAgICAgICAgICAgICAgICBDT1JCQTo6TG9uZyBfb2JfYTYsCiAgICAg
ICAgICAgICAgICBDT1JCQTo6TG9uZyBfb2JfYTcsCiAgICAgICAgICAgICAgICBDT1JCQTo6TG9u
ZyBfb2JfYTgsCiAgICAgICAgICAgICAgICBDT1JCQTo6TG9uZyBfb2JfYTksCiAgICAgICAgICAg
ICAgICBDT1JCQTo6TG9uZyBfb2JfYTEwKQp7CiAgICBib29sIF9vYl9yZXRyeSA9IHRydWU7CiAg
ICB3aGlsZSh0cnVlKQogICAgewogICAgICAgIE9COjpTdHViSW1wbEJhc2VfdmFyIF9vYl9zdHVi
SW1wbEJhc2UgPSBfT0JfZ2V0U3R1YkltcGwoKTsKICAgICAgICBPQlN0dWJJbXBsX1N0b3JhZ2Vf
cHRyIF9vYl9zdHViSW1wbCA9IGR5bmFtaWNfY2FzdDxPQlN0dWJJbXBsX1N0b3JhZ2VfcHRyPihf
b2Jfc3R1YkltcGxCYXNlLmluKCkpOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuIF9vYl9zdHViSW1wbCAtPiBnZXRPbmUoX29iX2EwLCBfb2JfYTEsIF9vYl9hMiwgX29i
X2EzLCBfb2JfYTQsIF9vYl9hNSwgX29iX2E2LCBfb2JfYTcsIF9vYl9hOCwgX29iX2E5LCBfb2Jf
YTEwKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2goY29uc3QgT0I6OkV4Y2VwdGlvbkJhc2UmIF9v
Yl9leCkKICAgICAgICB7CiAgICAgICAgICAgIF9PQl9oYW5kbGVFeGNlcHRpb24oX29iX2V4LCBf
b2JfcmV0cnkpOwogICAgICAgIH0KICAgIH0KfQoKCgoKY29uc3QgY2hhciogSW50ZXJwOjppZHNf
W10gPQp7CiAgICAiSURMOkludGVycDoxLjAiLAogICAgMAp9OwoKT0I6Ok1hcnNoYWxTdHViSW1w
bF9wdHIKSW50ZXJwOjpfT0JfY3JlYXRlTWFyc2hhbFN0dWJJbXBsKCkKewogICAgcmV0dXJuIG5l
dyBPQk1hcnNoYWxTdHViSW1wbF9JbnRlcnA7Cn0KCnZvaWQKT0JEdXBsaWNhdGUoSW50ZXJwX3B0
ciBwKQp7CiAgICBpZihwKQogICAgICAgIHAgLT4gX09CX2luY1JlZigpOwp9Cgp2b2lkCk9CUmVs
ZWFzZShJbnRlcnBfcHRyIHApCnsKICAgIGlmKHApCiAgICAgICAgcCAtPiBfT0JfZGVjUmVmKCk7
Cn0KCkludGVycF9wdHIKSW50ZXJwOjpfbmFycm93KENPUkJBOjpPYmplY3RfcHRyIHApCnsKICAg
IGlmKCFDT1JCQTo6aXNfbmlsKHApKQogICAgewogICAgICAgIEludGVycF9wdHIgdiA9IGR5bmFt
aWNfY2FzdDxJbnRlcnBfcHRyPihwKTsKICAgICAgICBpZih2KQogICAgICAgICAgICByZXR1cm4g
X2R1cGxpY2F0ZSh2KTsKCiAgICAgICAgaWYocCAtPiBfaXNfYShpZHNfWzBdKSkKICAgICAgICB7
CiAgICAgICAgICAgIEludGVycF9wdHIgdmFsID0gbmV3IEludGVycDsKICAgICAgICAgICAgdmFs
IC0+IF9PQl9jb3B5RnJvbShwKTsKICAgICAgICAgICAgcmV0dXJuIHZhbDsKICAgICAgICB9CiAg
ICB9CgogICAgcmV0dXJuIF9uaWwoKTsKfQoKSW50ZXJwX3B0cgpJbnRlcnA6Ol9uYXJyb3coQ09S
QkE6OkFic3RyYWN0QmFzZV9wdHIgcCkKewogICAgaWYoIUNPUkJBOjppc19uaWwocCkpCiAgICB7
CiAgICAgICAgQ09SQkE6Ok9iamVjdF92YXIgb2JqID0gcCAtPiBfdG9fb2JqZWN0KCk7CiAgICAg
ICAgcmV0dXJuIF9uYXJyb3cob2JqKTsKICAgIH0KICAgIHJldHVybiBfbmlsKCk7Cn0KCmNvbnN0
IGNoYXIqKgpJbnRlcnA6Ol9PQl9pZHMoKSBjb25zdAp7CiAgICByZXR1cm4gaWRzXzsKfQoKY29u
c3QgY2hhcioqCkludGVycDo6X09CX3N0YXRpY0lkcygpCnsKICAgIHJldHVybiBpZHNfOwp9Cgp2
b2lkCk9CTWFyc2hhbChJbnRlcnBfcHRyIF9vYl92LCBPQjo6T3V0cHV0U3RyZWFtSW1wbCogX29i
X291dCkKewogICAgX29iX291dCAtPiB3cml0ZV9PYmplY3QoX29iX3YpOwp9Cgp2b2lkCk9CVW5t
YXJzaGFsKEludGVycF9wdHImIF9vYl92LCBPQjo6SW5wdXRTdHJlYW1JbXBsKiBfb2JfaW4pCnsK
ICAgIEludGVycF92YXIgb2xkID0gX29iX3Y7CiAgICBDT1JCQTo6T2JqZWN0X3ZhciBwID0gX29i
X2luIC0+IHJlYWRfT2JqZWN0KCk7CgogICAgaWYoIUNPUkJBOjppc19uaWwocCkpCiAgICB7CiAg
ICAgICAgX29iX3YgPSBuZXcgSW50ZXJwOwogICAgICAgIF9vYl92IC0+IF9PQl9jb3B5RnJvbShw
KTsKICAgIH0KICAgIGVsc2UKICAgICAgICBfb2JfdiA9IEludGVycDo6X25pbCgpOwp9Cgp2b2lk
Cm9wZXJhdG9yPDw9KENPUkJBOjpBbnkmIGFueSwgSW50ZXJwX3B0ciogdikKewogICAgYW55LnJl
cGxhY2UoX3RjX0ludGVycCwgKENPUkJBOjpPYmplY3RfcHRyKSp2LCB0cnVlKTsKfQoKdm9pZApv
cGVyYXRvcjw8PShDT1JCQTo6QW55JiBhbnksIEludGVycF9wdHIgdikKewogICAgSW50ZXJwX3B0
ciB2YWwgPSBJbnRlcnA6Ol9kdXBsaWNhdGUodik7CiAgICBhbnkgPDw9ICZ2YWw7Cn0KCkNPUkJB
OjpCb29sZWFuCm9wZXJhdG9yPj49KGNvbnN0IENPUkJBOjpBbnkmIGFueSwgSW50ZXJwX3B0ciYg
dikKewogICAgaWYoYW55LmNoZWNrX3R5cGUoX3RjX0ludGVycCkpCiAgICB7CiAgICAgICAgQ09S
QkE6Ok9iamVjdF9wdHIgdmFsID0gKENPUkJBOjpPYmplY3RfcHRyKWFueS52YWx1ZSgpOwoKICAg
ICAgICBpZighQ09SQkE6OmlzX25pbCh2YWwpKQogICAgICAgIHsKICAgICAgICAgICAgaWYoISh2
ID0gZHluYW1pY19jYXN0PEludGVycF9wdHI+KHZhbCkpKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICB2ID0gbmV3IEludGVycDsKICAgICAgICAgICAgICAgIHYgLT4gX09CX2NvcHlGcm9t
KHZhbCk7CiAgICAgICAgICAgICAgICAoQ09SQkE6OkFueSYpYW55IDw8PSAmdjsKICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICAgIHYgPSBJbnRlcnA6Ol9uaWwo
KTsKCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBlbHNlCiAgICAgICAgcmV0dXJuIGZh
bHNlOwp9CgoKCgpDT1JCQTo6TG9uZwpJbnRlcnA6OlNwYWNlSW50ZXJwU2V0dXAoQ09SQkE6Okxv
bmcgX29iX2EwLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXRfYXJyYXkmIF9v
Yl9hMSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0X2FycmF5JiBfb2JfYTIp
CnsKICAgIGJvb2wgX29iX3JldHJ5ID0gdHJ1ZTsKICAgIHdoaWxlKHRydWUpCiAgICB7CiAgICAg
ICAgT0I6OlN0dWJJbXBsQmFzZV92YXIgX29iX3N0dWJJbXBsQmFzZSA9IF9PQl9nZXRTdHViSW1w
bCgpOwogICAgICAgIE9CU3R1YkltcGxfSW50ZXJwX3B0ciBfb2Jfc3R1YkltcGwgPSBkeW5hbWlj
X2Nhc3Q8T0JTdHViSW1wbF9JbnRlcnBfcHRyPihfb2Jfc3R1YkltcGxCYXNlLmluKCkpOwogICAg
ICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIF9vYl9zdHViSW1wbCAtPiBTcGFj
ZUludGVycFNldHVwKF9vYl9hMCwgX29iX2ExLCBfb2JfYTIpOwogICAgICAgIH0KICAgICAgICBj
YXRjaChjb25zdCBPQjo6RXhjZXB0aW9uQmFzZSYgX29iX2V4KQogICAgICAgIHsKICAgICAgICAg
ICAgX09CX2hhbmRsZUV4Y2VwdGlvbihfb2JfZXgsIF9vYl9yZXRyeSk7CiAgICAgICAgfQogICAg
fQp9CgoKCgpDT1JCQTo6TG9uZwpJbnRlcnA6OlNwYWNlSW50ZXJwb2xhdGUoQ09SQkE6OkRvdWJs
ZSBfb2JfYTAsCiAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6TG9uZyBfb2JfYTEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6TG9uZyBfb2JfYTIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBDT1JCQTo6TG9uZyBfb2JfYTMsCiAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBmbG9hdF9hcnJheSYgX29iX2E0LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
ZmxvYXRfYXJyYXkmIF9vYl9hNSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvbmdf
YXJyYXkmIF9vYl9hNiwKICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpMb25nIF9vYl9h
NywKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0X2FycmF5JiBfb2JfYTgpCnsK
ICAgIGJvb2wgX29iX3JldHJ5ID0gdHJ1ZTsKICAgIHdoaWxlKHRydWUpCiAgICB7CiAgICAgICAg
T0I6OlN0dWJJbXBsQmFzZV92YXIgX29iX3N0dWJJbXBsQmFzZSA9IF9PQl9nZXRTdHViSW1wbCgp
OwogICAgICAgIE9CU3R1YkltcGxfSW50ZXJwX3B0ciBfb2Jfc3R1YkltcGwgPSBkeW5hbWljX2Nh
c3Q8T0JTdHViSW1wbF9JbnRlcnBfcHRyPihfb2Jfc3R1YkltcGxCYXNlLmluKCkpOwogICAgICAg
IHRyeQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIF9vYl9zdHViSW1wbCAtPiBTcGFjZUlu
dGVycG9sYXRlKF9vYl9hMCwgX29iX2ExLCBfb2JfYTIsIF9vYl9hMywgX29iX2E0LCBfb2JfYTUs
IF9vYl9hNiwgX29iX2E3LCBfb2JfYTgpOwogICAgICAgIH0KICAgICAgICBjYXRjaChjb25zdCBP
Qjo6RXhjZXB0aW9uQmFzZSYgX29iX2V4KQogICAgICAgIHsKICAgICAgICAgICAgX09CX2hhbmRs
ZUV4Y2VwdGlvbihfb2JfZXgsIF9vYl9yZXRyeSk7CiAgICAgICAgfQogICAgfQp9CgoKCgpDT1JC
QTo6TG9uZwpJbnRlcnA6OkdldEludGVycG9sYXRlKENPUkJBOjpEb3VibGUgX29iX2EwLAogICAg
ICAgICAgICAgICAgICAgICAgIENPUkJBOjpMb25nIF9vYl9hMSwKICAgICAgICAgICAgICAgICAg
ICAgICBDT1JCQTo6TG9uZyBfb2JfYTIsCiAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRfYXJy
YXkmIF9vYl9hMykKewogICAgYm9vbCBfb2JfcmV0cnkgPSB0cnVlOwogICAgd2hpbGUodHJ1ZSkK
ICAgIHsKICAgICAgICBPQjo6U3R1YkltcGxCYXNlX3ZhciBfb2Jfc3R1YkltcGxCYXNlID0gX09C
X2dldFN0dWJJbXBsKCk7CiAgICAgICAgT0JTdHViSW1wbF9JbnRlcnBfcHRyIF9vYl9zdHViSW1w
bCA9IGR5bmFtaWNfY2FzdDxPQlN0dWJJbXBsX0ludGVycF9wdHI+KF9vYl9zdHViSW1wbEJhc2Uu
aW4oKSk7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gX29iX3N0dWJJ
bXBsIC0+IEdldEludGVycG9sYXRlKF9vYl9hMCwgX29iX2ExLCBfb2JfYTIsIF9vYl9hMyk7CiAg
ICAgICAgfQogICAgICAgIGNhdGNoKGNvbnN0IE9COjpFeGNlcHRpb25CYXNlJiBfb2JfZXgpCiAg
ICAgICAgewogICAgICAgICAgICBfT0JfaGFuZGxlRXhjZXB0aW9uKF9vYl9leCwgX29iX3JldHJ5
KTsKICAgICAgICB9CiAgICB9Cn0KCgoKCmNvbnN0IGNoYXIqIEludGVycEZhcm06Omlkc19bXSA9
CnsKICAgICJJREw6SW50ZXJwRmFybToxLjAiLAogICAgMAp9OwoKT0I6Ok1hcnNoYWxTdHViSW1w
bF9wdHIKSW50ZXJwRmFybTo6X09CX2NyZWF0ZU1hcnNoYWxTdHViSW1wbCgpCnsKICAgIHJldHVy
biBuZXcgT0JNYXJzaGFsU3R1YkltcGxfSW50ZXJwRmFybTsKfQoKdm9pZApPQkR1cGxpY2F0ZShJ
bnRlcnBGYXJtX3B0ciBwKQp7CiAgICBpZihwKQogICAgICAgIHAgLT4gX09CX2luY1JlZigpOwp9
Cgp2b2lkCk9CUmVsZWFzZShJbnRlcnBGYXJtX3B0ciBwKQp7CiAgICBpZihwKQogICAgICAgIHAg
LT4gX09CX2RlY1JlZigpOwp9CgpJbnRlcnBGYXJtX3B0cgpJbnRlcnBGYXJtOjpfbmFycm93KENP
UkJBOjpPYmplY3RfcHRyIHApCnsKICAgIGlmKCFDT1JCQTo6aXNfbmlsKHApKQogICAgewogICAg
ICAgIEludGVycEZhcm1fcHRyIHYgPSBkeW5hbWljX2Nhc3Q8SW50ZXJwRmFybV9wdHI+KHApOwog
ICAgICAgIGlmKHYpCiAgICAgICAgICAgIHJldHVybiBfZHVwbGljYXRlKHYpOwoKICAgICAgICBp
ZihwIC0+IF9pc19hKGlkc19bMF0pKQogICAgICAgIHsKICAgICAgICAgICAgSW50ZXJwRmFybV9w
dHIgdmFsID0gbmV3IEludGVycEZhcm07CiAgICAgICAgICAgIHZhbCAtPiBfT0JfY29weUZyb20o
cCk7CiAgICAgICAgICAgIHJldHVybiB2YWw7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBf
bmlsKCk7Cn0KCkludGVycEZhcm1fcHRyCkludGVycEZhcm06Ol9uYXJyb3coQ09SQkE6OkFic3Ry
YWN0QmFzZV9wdHIgcCkKewogICAgaWYoIUNPUkJBOjppc19uaWwocCkpCiAgICB7CiAgICAgICAg
Q09SQkE6Ok9iamVjdF92YXIgb2JqID0gcCAtPiBfdG9fb2JqZWN0KCk7CiAgICAgICAgcmV0dXJu
IF9uYXJyb3cob2JqKTsKICAgIH0KICAgIHJldHVybiBfbmlsKCk7Cn0KCmNvbnN0IGNoYXIqKgpJ
bnRlcnBGYXJtOjpfT0JfaWRzKCkgY29uc3QKewogICAgcmV0dXJuIGlkc187Cn0KCmNvbnN0IGNo
YXIqKgpJbnRlcnBGYXJtOjpfT0Jfc3RhdGljSWRzKCkKewogICAgcmV0dXJuIGlkc187Cn0KCnZv
aWQKT0JNYXJzaGFsKEludGVycEZhcm1fcHRyIF9vYl92LCBPQjo6T3V0cHV0U3RyZWFtSW1wbCog
X29iX291dCkKewogICAgX29iX291dCAtPiB3cml0ZV9PYmplY3QoX29iX3YpOwp9Cgp2b2lkCk9C
VW5tYXJzaGFsKEludGVycEZhcm1fcHRyJiBfb2JfdiwgT0I6OklucHV0U3RyZWFtSW1wbCogX29i
X2luKQp7CiAgICBJbnRlcnBGYXJtX3ZhciBvbGQgPSBfb2JfdjsKICAgIENPUkJBOjpPYmplY3Rf
dmFyIHAgPSBfb2JfaW4gLT4gcmVhZF9PYmplY3QoKTsKCiAgICBpZighQ09SQkE6OmlzX25pbChw
KSkKICAgIHsKICAgICAgICBfb2JfdiA9IG5ldyBJbnRlcnBGYXJtOwogICAgICAgIF9vYl92IC0+
IF9PQl9jb3B5RnJvbShwKTsKICAgIH0KICAgIGVsc2UKICAgICAgICBfb2JfdiA9IEludGVycEZh
cm06Ol9uaWwoKTsKfQoKdm9pZApvcGVyYXRvcjw8PShDT1JCQTo6QW55JiBhbnksIEludGVycEZh
cm1fcHRyKiB2KQp7CiAgICBhbnkucmVwbGFjZShfdGNfSW50ZXJwRmFybSwgKENPUkJBOjpPYmpl
Y3RfcHRyKSp2LCB0cnVlKTsKfQoKdm9pZApvcGVyYXRvcjw8PShDT1JCQTo6QW55JiBhbnksIElu
dGVycEZhcm1fcHRyIHYpCnsKICAgIEludGVycEZhcm1fcHRyIHZhbCA9IEludGVycEZhcm06Ol9k
dXBsaWNhdGUodik7CiAgICBhbnkgPDw9ICZ2YWw7Cn0KCkNPUkJBOjpCb29sZWFuCm9wZXJhdG9y
Pj49KGNvbnN0IENPUkJBOjpBbnkmIGFueSwgSW50ZXJwRmFybV9wdHImIHYpCnsKICAgIGlmKGFu
eS5jaGVja190eXBlKF90Y19JbnRlcnBGYXJtKSkKICAgIHsKICAgICAgICBDT1JCQTo6T2JqZWN0
X3B0ciB2YWwgPSAoQ09SQkE6Ok9iamVjdF9wdHIpYW55LnZhbHVlKCk7CgogICAgICAgIGlmKCFD
T1JCQTo6aXNfbmlsKHZhbCkpCiAgICAgICAgewogICAgICAgICAgICBpZighKHYgPSBkeW5hbWlj
X2Nhc3Q8SW50ZXJwRmFybV9wdHI+KHZhbCkpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICB2ID0gbmV3IEludGVycEZhcm07CiAgICAgICAgICAgICAgICB2IC0+IF9PQl9jb3B5RnJvbSh2
YWwpOwogICAgICAgICAgICAgICAgKENPUkJBOjpBbnkmKWFueSA8PD0gJnY7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgICB2ID0gSW50ZXJwRmFybTo6X25p
bCgpOwoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGVsc2UKICAgICAgICByZXR1cm4g
ZmFsc2U7Cn0KCgoKCkludGVycF9wdHIKSW50ZXJwRmFybTo6Y3JlYXRlKCkKewogICAgYm9vbCBf
b2JfcmV0cnkgPSB0cnVlOwogICAgd2hpbGUodHJ1ZSkKICAgIHsKICAgICAgICBPQjo6U3R1Yklt
cGxCYXNlX3ZhciBfb2Jfc3R1YkltcGxCYXNlID0gX09CX2dldFN0dWJJbXBsKCk7CiAgICAgICAg
T0JTdHViSW1wbF9JbnRlcnBGYXJtX3B0ciBfb2Jfc3R1YkltcGwgPSBkeW5hbWljX2Nhc3Q8T0JT
dHViSW1wbF9JbnRlcnBGYXJtX3B0cj4oX29iX3N0dWJJbXBsQmFzZS5pbigpKTsKICAgICAgICB0
cnkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBfb2Jfc3R1YkltcGwgLT4gY3JlYXRlKCk7
CiAgICAgICAgfQogICAgICAgIGNhdGNoKGNvbnN0IE9COjpFeGNlcHRpb25CYXNlJiBfb2JfZXgp
CiAgICAgICAgewogICAgICAgICAgICBfT0JfaGFuZGxlRXhjZXB0aW9uKF9vYl9leCwgX29iX3Jl
dHJ5KTsKICAgICAgICB9CiAgICB9Cn0KCgoKCkludGVycF9wdHIKSW50ZXJwRmFybTo6Z2V0UmVm
ZXJlbmNlKENPUkJBOjpMb25nIF9vYl9hMCkKewogICAgYm9vbCBfb2JfcmV0cnkgPSB0cnVlOwog
ICAgd2hpbGUodHJ1ZSkKICAgIHsKICAgICAgICBPQjo6U3R1YkltcGxCYXNlX3ZhciBfb2Jfc3R1
YkltcGxCYXNlID0gX09CX2dldFN0dWJJbXBsKCk7CiAgICAgICAgT0JTdHViSW1wbF9JbnRlcnBG
YXJtX3B0ciBfb2Jfc3R1YkltcGwgPSBkeW5hbWljX2Nhc3Q8T0JTdHViSW1wbF9JbnRlcnBGYXJt
X3B0cj4oX29iX3N0dWJJbXBsQmFzZS5pbigpKTsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAg
ICAgICAgIHJldHVybiBfb2Jfc3R1YkltcGwgLT4gZ2V0UmVmZXJlbmNlKF9vYl9hMCk7CiAgICAg
ICAgfQogICAgICAgIGNhdGNoKGNvbnN0IE9COjpFeGNlcHRpb25CYXNlJiBfb2JfZXgpCiAgICAg
ICAgewogICAgICAgICAgICBfT0JfaGFuZGxlRXhjZXB0aW9uKF9vYl9leCwgX29iX3JldHJ5KTsK
ICAgICAgICB9CiAgICB9Cn0KCgoKCnZvaWQKT0JEdXBsaWNhdGUoT0JTdHViSW1wbF9TdG9yYWdl
X3B0ciBwKQp7CiAgICBpZihwKQogICAgICAgIHAgLT4gX09CX2luY1JlZigpOwp9Cgp2b2lkCk9C
UmVsZWFzZShPQlN0dWJJbXBsX1N0b3JhZ2VfcHRyIHApCnsKICAgIGlmKHApCiAgICAgICAgcCAt
PiBfT0JfZGVjUmVmKCk7Cn0KCgoKCnZvaWQKT0JEdXBsaWNhdGUoT0JTdHViSW1wbF9JbnRlcnBf
cHRyIHApCnsKICAgIGlmKHApCiAgICAgICAgcCAtPiBfT0JfaW5jUmVmKCk7Cn0KCnZvaWQKT0JS
ZWxlYXNlKE9CU3R1YkltcGxfSW50ZXJwX3B0ciBwKQp7CiAgICBpZihwKQogICAgICAgIHAgLT4g
X09CX2RlY1JlZigpOwp9CgoKCgp2b2lkCk9CRHVwbGljYXRlKE9CU3R1YkltcGxfSW50ZXJwRmFy
bV9wdHIgcCkKewogICAgaWYocCkKICAgICAgICBwIC0+IF9PQl9pbmNSZWYoKTsKfQoKdm9pZApP
QlJlbGVhc2UoT0JTdHViSW1wbF9JbnRlcnBGYXJtX3B0ciBwKQp7CiAgICBpZihwKQogICAgICAg
IHAgLT4gX09CX2RlY1JlZigpOwp9CgoKCgpDT1JCQTo6TG9uZwpPQk1hcnNoYWxTdHViSW1wbF9T
dG9yYWdlOjphZGROYW1lcyhjb25zdCBjaGFyX2FycmF5JiBfb2JfYTAsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpMb25nIF9vYl9hMSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkxvbmcgX29iX2EyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDT1JCQTo6TG9uZyBfb2JfYTMsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0X2FycmF5JiBfb2JfYTQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0X2FycmF5JiBfb2JfYTUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvbmdfYXJyYXkmIF9vYl9hNiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl9hcnJheSYgX29i
X2E3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6TG9uZyBfb2Jf
YTgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfYXJyYXkm
IF9vYl9hOSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6Okxvbmcg
X29iX2ExMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcl9hcnJheSYg
X29iX2ExMSkKewogICAgd2hpbGUodHJ1ZSkKICAgIHsKICAgICAgICBPQjo6RG93bmNhbGxfdmFy
IF9vYl9kb3duID0gX09CX2NyZWF0ZURvd25jYWxsKCJhZGROYW1lcyIsIHRydWUpOwogICAgICAg
IHRyeQogICAgICAgIHsKICAgICAgICAgICAgT0I6Ok91dHB1dFN0cmVhbUltcGwqIF9vYl9vdXQg
PSBfT0JfcHJlTWFyc2hhbChfb2JfZG93bik7CiAgICAgICAgICAgIHRyeQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICBDT1JCQTo6VUxvbmcgX29iX2xlbjAgPSBfb2JfYTAubGVuZ3RoKCk7
CiAgICAgICAgICAgICAgICBfb2Jfb3V0IC0+IHdyaXRlX3Vsb25nKF9vYl9sZW4wKTsKICAgICAg
ICAgICAgICAgIF9vYl9vdXQgLT4gd3JpdGVfY2hhcl9hcnJheShfb2JfYTAuZ2V0X2J1ZmZlcigp
LCBfb2JfbGVuMCk7CiAgICAgICAgICAgICAgICBfb2Jfb3V0IC0+IHdyaXRlX2xvbmcoX29iX2Ex
KTsKICAgICAgICAgICAgICAgIF9vYl9vdXQgLT4gd3JpdGVfbG9uZyhfb2JfYTIpOwogICAgICAg
ICAgICAgICAgX29iX291dCAtPiB3cml0ZV9sb25nKF9vYl9hMyk7CiAgICAgICAgICAgICAgICBD
T1JCQTo6VUxvbmcgX29iX2xlbjEgPSBfb2JfYTQubGVuZ3RoKCk7CiAgICAgICAgICAgICAgICBf
b2Jfb3V0IC0+IHdyaXRlX3Vsb25nKF9vYl9sZW4xKTsKICAgICAgICAgICAgICAgIF9vYl9vdXQg
LT4gd3JpdGVfZmxvYXRfYXJyYXkoX29iX2E0LmdldF9idWZmZXIoKSwgX29iX2xlbjEpOwogICAg
ICAgICAgICAgICAgQ09SQkE6OlVMb25nIF9vYl9sZW4yID0gX29iX2E1Lmxlbmd0aCgpOwogICAg
ICAgICAgICAgICAgX29iX291dCAtPiB3cml0ZV91bG9uZyhfb2JfbGVuMik7CiAgICAgICAgICAg
ICAgICBfb2Jfb3V0IC0+IHdyaXRlX2Zsb2F0X2FycmF5KF9vYl9hNS5nZXRfYnVmZmVyKCksIF9v
Yl9sZW4yKTsKICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBfb2JfbGVuMyA9IF9vYl9hNi5s
ZW5ndGgoKTsKICAgICAgICAgICAgICAgIF9vYl9vdXQgLT4gd3JpdGVfdWxvbmcoX29iX2xlbjMp
OwogICAgICAgICAgICAgICAgX29iX291dCAtPiB3cml0ZV9sb25nX2FycmF5KF9vYl9hNi5nZXRf
YnVmZmVyKCksIF9vYl9sZW4zKTsKICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBfb2JfbGVu
NCA9IF9vYl9hNy5sZW5ndGgoKTsKICAgICAgICAgICAgICAgIF9vYl9vdXQgLT4gd3JpdGVfdWxv
bmcoX29iX2xlbjQpOwogICAgICAgICAgICAgICAgX29iX291dCAtPiB3cml0ZV9jaGFyX2FycmF5
KF9vYl9hNy5nZXRfYnVmZmVyKCksIF9vYl9sZW40KTsKICAgICAgICAgICAgICAgIF9vYl9vdXQg
LT4gd3JpdGVfbG9uZyhfb2JfYTgpOwogICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIF9vYl9s
ZW41ID0gX29iX2E5Lmxlbmd0aCgpOwogICAgICAgICAgICAgICAgX29iX291dCAtPiB3cml0ZV91
bG9uZyhfb2JfbGVuNSk7CiAgICAgICAgICAgICAgICBfb2Jfb3V0IC0+IHdyaXRlX2NoYXJfYXJy
YXkoX29iX2E5LmdldF9idWZmZXIoKSwgX29iX2xlbjUpOwogICAgICAgICAgICAgICAgX29iX291
dCAtPiB3cml0ZV9sb25nKF9vYl9hMTApOwogICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIF9v
Yl9sZW42ID0gX29iX2ExMS5sZW5ndGgoKTsKICAgICAgICAgICAgICAgIF9vYl9vdXQgLT4gd3Jp
dGVfdWxvbmcoX29iX2xlbjYpOwogICAgICAgICAgICAgICAgX29iX291dCAtPiB3cml0ZV9jaGFy
X2FycmF5KF9vYl9hMTEuZ2V0X2J1ZmZlcigpLCBfb2JfbGVuNik7CiAgICAgICAgICAgIH0KICAg
ICAgICAgICAgY2F0Y2goY29uc3QgQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiYgX29iX2V4KQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICBfT0JfbWFyc2hhbEV4KF9vYl9kb3duLCBfb2JfZXgp
OwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9PQl9wb3N0TWFyc2hhbChfb2JfZG93bik7CiAg
ICAgICAgICAgIF9PQl9yZXF1ZXN0KF9vYl9kb3duKTsKICAgICAgICAgICAgYm9vbCBfb2JfdWV4
OwogICAgICAgICAgICBPQjo6SW5wdXRTdHJlYW1JbXBsKiBfb2JfaW4gPSBfT0JfcHJlVW5tYXJz
aGFsKF9vYl9kb3duLCBfb2JfdWV4KTsKICAgICAgICAgICAgaWYoX29iX3VleCkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgX09CX3Bvc3RVbm1hcnNoYWwoX29iX2Rvd24pOwogICAgICAg
ICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ09S
QkE6OkxvbmcgX29iX3I7CiAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICBfb2JfciA9IF9vYl9pbiAtPiByZWFkX2xvbmcoKTsKICAgICAgICAg
ICAgICAgICAgICBDT1JCQTo6VUxvbmcgX29iX2xlbjcgPSBfb2JfaW4gLT4gcmVhZF91bG9uZygp
OwogICAgICAgICAgICAgICAgICAgIF9vYl9hMTEubGVuZ3RoKF9vYl9sZW43KTsKICAgICAgICAg
ICAgICAgICAgICBfb2JfaW4gLT4gcmVhZF9jaGFyX2FycmF5KF9vYl9hMTEuZ2V0X2J1ZmZlcigp
LCBfb2JfbGVuNyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjYXRjaChjb25z
dCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uJiBfb2JfZXgpCiAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgX09CX3VubWFyc2hhbEV4KF9vYl9kb3duLCBfb2JfZXgpOwogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgX09CX3Bvc3RVbm1hcnNoYWwoX29iX2Rvd24pOwog
ICAgICAgICAgICAgICAgcmV0dXJuIF9vYl9yOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICAgIGNhdGNoKGNvbnN0IE9COjpGYWlsdXJlRXhjZXB0aW9uJiBfb2JfZXgpCiAgICAgICAgewog
ICAgICAgICAgICBfT0JfaGFuZGxlRmFpbHVyZUV4Y2VwdGlvbihfb2JfZG93biwgX29iX2V4KTsK
ICAgICAgICB9CiAgICB9Cn0KCgoKCkNPUkJBOjpMb25nCk9CTWFyc2hhbFN0dWJJbXBsX1N0b3Jh
Z2U6OnN0b3JlT25lKENPUkJBOjpMb25nIF9vYl9hMCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ09SQkE6OkRvdWJsZSBfb2JfYTEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENPUkJBOjpEb3VibGUgX29iX2EyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDT1JCQTo6TG9uZyBfb2JfYTMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGZsb2F0X2FycmF5JiBfb2JfYTQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENPUkJBOjpMb25nIF9vYl9hNSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ09SQkE6OkxvbmcgX29iX2E2LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDT1JCQTo6TG9uZyBfb2JfYTcsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENPUkJBOjpMb25nIF9vYl9hOCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ09SQkE6OkxvbmcgX29iX2E5KQp7CiAgICB3aGlsZSh0cnVlKQogICAg
ewogICAgICAgIE9COjpEb3duY2FsbF92YXIgX29iX2Rvd24gPSBfT0JfY3JlYXRlRG93bmNhbGwo
InN0b3JlT25lIiwgdHJ1ZSk7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBPQjo6
T3V0cHV0U3RyZWFtSW1wbCogX29iX291dCA9IF9PQl9wcmVNYXJzaGFsKF9vYl9kb3duKTsKICAg
ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9vYl9vdXQgLT4gd3Jp
dGVfbG9uZyhfb2JfYTApOwogICAgICAgICAgICAgICAgX29iX291dCAtPiB3cml0ZV9kb3VibGUo
X29iX2ExKTsKICAgICAgICAgICAgICAgIF9vYl9vdXQgLT4gd3JpdGVfZG91YmxlKF9vYl9hMik7
CiAgICAgICAgICAgICAgICBfb2Jfb3V0IC0+IHdyaXRlX2xvbmcoX29iX2EzKTsKICAgICAgICAg
ICAgICAgIENPUkJBOjpVTG9uZyBfb2JfbGVuMCA9IF9vYl9hNC5sZW5ndGgoKTsKICAgICAgICAg
ICAgICAgIF9vYl9vdXQgLT4gd3JpdGVfdWxvbmcoX29iX2xlbjApOwogICAgICAgICAgICAgICAg
X29iX291dCAtPiB3cml0ZV9mbG9hdF9hcnJheShfb2JfYTQuZ2V0X2J1ZmZlcigpLCBfb2JfbGVu
MCk7CiAgICAgICAgICAgICAgICBfb2Jfb3V0IC0+IHdyaXRlX2xvbmcoX29iX2E1KTsKICAgICAg
ICAgICAgICAgIF9vYl9vdXQgLT4gd3JpdGVfbG9uZyhfb2JfYTYpOwogICAgICAgICAgICAgICAg
X29iX291dCAtPiB3cml0ZV9sb25nKF9vYl9hNyk7CiAgICAgICAgICAgICAgICBfb2Jfb3V0IC0+
IHdyaXRlX2xvbmcoX29iX2E4KTsKICAgICAgICAgICAgICAgIF9vYl9vdXQgLT4gd3JpdGVfbG9u
Zyhfb2JfYTkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNhdGNoKGNvbnN0IENPUkJBOjpT
eXN0ZW1FeGNlcHRpb24mIF9vYl9leCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgX09C
X21hcnNoYWxFeChfb2JfZG93biwgX29iX2V4KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBf
T0JfcG9zdE1hcnNoYWwoX29iX2Rvd24pOwogICAgICAgICAgICBfT0JfcmVxdWVzdChfb2JfZG93
bik7CiAgICAgICAgICAgIGJvb2wgX29iX3VleDsKICAgICAgICAgICAgT0I6OklucHV0U3RyZWFt
SW1wbCogX29iX2luID0gX09CX3ByZVVubWFyc2hhbChfb2JfZG93biwgX29iX3VleCk7CiAgICAg
ICAgICAgIGlmKF9vYl91ZXgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9PQl9wb3N0
VW5tYXJzaGFsKF9vYl9kb3duKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgIENPUkJBOjpMb25nIF9vYl9yOwogICAgICAgICAgICAg
ICAgdHJ5CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgX29iX3IgPSBfb2Jf
aW4gLT4gcmVhZF9sb25nKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjYXRj
aChjb25zdCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uJiBfb2JfZXgpCiAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgX09CX3VubWFyc2hhbEV4KF9vYl9kb3duLCBfb2JfZXgpOwog
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgX09CX3Bvc3RVbm1hcnNoYWwoX29iX2Rv
d24pOwogICAgICAgICAgICAgICAgcmV0dXJuIF9vYl9yOwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgICAgIGNhdGNoKGNvbnN0IE9COjpGYWlsdXJlRXhjZXB0aW9uJiBfb2JfZXgpCiAgICAg
ICAgewogICAgICAgICAgICBfT0JfaGFuZGxlRmFpbHVyZUV4Y2VwdGlvbihfb2JfZG93biwgX29i
X2V4KTsKICAgICAgICB9CiAgICB9Cn0KCgoKCkNPUkJBOjpMb25nCk9CTWFyc2hhbFN0dWJJbXBs
X1N0b3JhZ2U6OmdldE9uZShDT1JCQTo6TG9uZyBfb2JfYTAsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDT1JCQTo6RG91YmxlIF9vYl9hMSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENPUkJBOjpEb3VibGUgX29iX2EyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ09SQkE6OkxvbmcgX29iX2EzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmxvYXRfYXJyYXkmIF9vYl9hNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENPUkJBOjpMb25nIF9vYl9hNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENPUkJBOjpMb25nIF9vYl9hNiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENPUkJBOjpMb25nIF9vYl9hNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENP
UkJBOjpMb25nIF9vYl9hOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJB
OjpMb25nIF9vYl9hOSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpM
b25nIF9vYl9hMTApCnsKICAgIHdoaWxlKHRydWUpCiAgICB7CiAgICAgICAgT0I6OkRvd25jYWxs
X3ZhciBfb2JfZG93biA9IF9PQl9jcmVhdGVEb3duY2FsbCgiZ2V0T25lIiwgdHJ1ZSk7CiAgICAg
ICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBPQjo6T3V0cHV0U3RyZWFtSW1wbCogX29iX291
dCA9IF9PQl9wcmVNYXJzaGFsKF9vYl9kb3duKTsKICAgICAgICAgICAgdHJ5CiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgIF9vYl9vdXQgLT4gd3JpdGVfbG9uZyhfb2JfYTApOwogICAgICAg
ICAgICAgICAgX29iX291dCAtPiB3cml0ZV9kb3VibGUoX29iX2ExKTsKICAgICAgICAgICAgICAg
IF9vYl9vdXQgLT4gd3JpdGVfZG91YmxlKF9vYl9hMik7CiAgICAgICAgICAgICAgICBfb2Jfb3V0
IC0+IHdyaXRlX2xvbmcoX29iX2EzKTsKICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBfb2Jf
bGVuMCA9IF9vYl9hNC5sZW5ndGgoKTsKICAgICAgICAgICAgICAgIF9vYl9vdXQgLT4gd3JpdGVf
dWxvbmcoX29iX2xlbjApOwogICAgICAgICAgICAgICAgX29iX291dCAtPiB3cml0ZV9mbG9hdF9h
cnJheShfb2JfYTQuZ2V0X2J1ZmZlcigpLCBfb2JfbGVuMCk7CiAgICAgICAgICAgICAgICBfb2Jf
b3V0IC0+IHdyaXRlX2xvbmcoX29iX2E1KTsKICAgICAgICAgICAgICAgIF9vYl9vdXQgLT4gd3Jp
dGVfbG9uZyhfb2JfYTYpOwogICAgICAgICAgICAgICAgX29iX291dCAtPiB3cml0ZV9sb25nKF9v
Yl9hNyk7CiAgICAgICAgICAgICAgICBfb2Jfb3V0IC0+IHdyaXRlX2xvbmcoX29iX2E4KTsKICAg
ICAgICAgICAgICAgIF9vYl9vdXQgLT4gd3JpdGVfbG9uZyhfb2JfYTkpOwogICAgICAgICAgICAg
ICAgX29iX291dCAtPiB3cml0ZV9sb25nKF9vYl9hMTApOwogICAgICAgICAgICB9CiAgICAgICAg
ICAgIGNhdGNoKGNvbnN0IENPUkJBOjpTeXN0ZW1FeGNlcHRpb24mIF9vYl9leCkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgX09CX21hcnNoYWxFeChfb2JfZG93biwgX29iX2V4KTsKICAg
ICAgICAgICAgfQogICAgICAgICAgICBfT0JfcG9zdE1hcnNoYWwoX29iX2Rvd24pOwogICAgICAg
ICAgICBfT0JfcmVxdWVzdChfb2JfZG93bik7CiAgICAgICAgICAgIGJvb2wgX29iX3VleDsKICAg
ICAgICAgICAgT0I6OklucHV0U3RyZWFtSW1wbCogX29iX2luID0gX09CX3ByZVVubWFyc2hhbChf
b2JfZG93biwgX29iX3VleCk7CiAgICAgICAgICAgIGlmKF9vYl91ZXgpCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgIF9PQl9wb3N0VW5tYXJzaGFsKF9vYl9kb3duKTsKICAgICAgICAgICAg
fQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENPUkJBOjpM
b25nIF9vYl9yOwogICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgX29iX3IgPSBfb2JfaW4gLT4gcmVhZF9sb25nKCk7CiAgICAgICAgICAgICAg
ICAgICAgQ09SQkE6OlVMb25nIF9vYl9sZW4xID0gX29iX2luIC0+IHJlYWRfdWxvbmcoKTsKICAg
ICAgICAgICAgICAgICAgICBfb2JfYTQubGVuZ3RoKF9vYl9sZW4xKTsKICAgICAgICAgICAgICAg
ICAgICBfb2JfaW4gLT4gcmVhZF9mbG9hdF9hcnJheShfb2JfYTQuZ2V0X2J1ZmZlcigpLCBfb2Jf
bGVuMSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjYXRjaChjb25zdCBDT1JC
QTo6U3lzdGVtRXhjZXB0aW9uJiBfb2JfZXgpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgX09CX3VubWFyc2hhbEV4KF9vYl9kb3duLCBfb2JfZXgpOwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgX09CX3Bvc3RVbm1hcnNoYWwoX29iX2Rvd24pOwogICAgICAg
ICAgICAgICAgcmV0dXJuIF9vYl9yOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNh
dGNoKGNvbnN0IE9COjpGYWlsdXJlRXhjZXB0aW9uJiBfb2JfZXgpCiAgICAgICAgewogICAgICAg
ICAgICBfT0JfaGFuZGxlRmFpbHVyZUV4Y2VwdGlvbihfb2JfZG93biwgX29iX2V4KTsKICAgICAg
ICB9CiAgICB9Cn0KCgoKCkNPUkJBOjpMb25nCk9CTWFyc2hhbFN0dWJJbXBsX0ludGVycDo6U3Bh
Y2VJbnRlcnBTZXR1cChDT1JCQTo6TG9uZyBfb2JfYTAsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdF9hcnJheSYgX29iX2ExLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXRfYXJyYXkmIF9vYl9h
MikKewogICAgd2hpbGUodHJ1ZSkKICAgIHsKICAgICAgICBPQjo6RG93bmNhbGxfdmFyIF9vYl9k
b3duID0gX09CX2NyZWF0ZURvd25jYWxsKCJTcGFjZUludGVycFNldHVwIiwgdHJ1ZSk7CiAgICAg
ICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBPQjo6T3V0cHV0U3RyZWFtSW1wbCogX29iX291
dCA9IF9PQl9wcmVNYXJzaGFsKF9vYl9kb3duKTsKICAgICAgICAgICAgdHJ5CiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgIF9vYl9vdXQgLT4gd3JpdGVfbG9uZyhfb2JfYTApOwogICAgICAg
ICAgICAgICAgQ09SQkE6OlVMb25nIF9vYl9sZW4wID0gX29iX2ExLmxlbmd0aCgpOwogICAgICAg
ICAgICAgICAgX29iX291dCAtPiB3cml0ZV91bG9uZyhfb2JfbGVuMCk7CiAgICAgICAgICAgICAg
ICBfb2Jfb3V0IC0+IHdyaXRlX2Zsb2F0X2FycmF5KF9vYl9hMS5nZXRfYnVmZmVyKCksIF9vYl9s
ZW4wKTsKICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBfb2JfbGVuMSA9IF9vYl9hMi5sZW5n
dGgoKTsKICAgICAgICAgICAgICAgIF9vYl9vdXQgLT4gd3JpdGVfdWxvbmcoX29iX2xlbjEpOwog
ICAgICAgICAgICAgICAgX29iX291dCAtPiB3cml0ZV9mbG9hdF9hcnJheShfb2JfYTIuZ2V0X2J1
ZmZlcigpLCBfb2JfbGVuMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY2F0Y2goY29uc3Qg
Q09SQkE6OlN5c3RlbUV4Y2VwdGlvbiYgX29iX2V4KQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICBfT0JfbWFyc2hhbEV4KF9vYl9kb3duLCBfb2JfZXgpOwogICAgICAgICAgICB9CiAgICAg
ICAgICAgIF9PQl9wb3N0TWFyc2hhbChfb2JfZG93bik7CiAgICAgICAgICAgIF9PQl9yZXF1ZXN0
KF9vYl9kb3duKTsKICAgICAgICAgICAgYm9vbCBfb2JfdWV4OwogICAgICAgICAgICBPQjo6SW5w
dXRTdHJlYW1JbXBsKiBfb2JfaW4gPSBfT0JfcHJlVW5tYXJzaGFsKF9vYl9kb3duLCBfb2JfdWV4
KTsKICAgICAgICAgICAgaWYoX29iX3VleCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
X09CX3Bvc3RVbm1hcnNoYWwoX29iX2Rvd24pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ09SQkE6OkxvbmcgX29iX3I7CiAgICAg
ICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBfb2Jf
ciA9IF9vYl9pbiAtPiByZWFkX2xvbmcoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIGNhdGNoKGNvbnN0IENPUkJBOjpTeXN0ZW1FeGNlcHRpb24mIF9vYl9leCkKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBfT0JfdW5tYXJzaGFsRXgoX29iX2Rvd24sIF9v
Yl9leCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBfT0JfcG9zdFVubWFyc2hh
bChfb2JfZG93bik7CiAgICAgICAgICAgICAgICByZXR1cm4gX29iX3I7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgICAgY2F0Y2goY29uc3QgT0I6OkZhaWx1cmVFeGNlcHRpb24mIF9vYl9l
eCkKICAgICAgICB7CiAgICAgICAgICAgIF9PQl9oYW5kbGVGYWlsdXJlRXhjZXB0aW9uKF9vYl9k
b3duLCBfb2JfZXgpOwogICAgICAgIH0KICAgIH0KfQoKCgoKQ09SQkE6OkxvbmcKT0JNYXJzaGFs
U3R1YkltcGxfSW50ZXJwOjpTcGFjZUludGVycG9sYXRlKENPUkJBOjpEb3VibGUgX29iX2EwLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkxvbmcgX29i
X2ExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6Okxv
bmcgX29iX2EyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09S
QkE6OkxvbmcgX29iX2EzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZmxvYXRfYXJyYXkmIF9vYl9hNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0X2FycmF5JiBfb2JfYTUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsb25nX2FycmF5JiBfb2JfYTYsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6TG9uZyBfb2Jf
YTcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9h
dF9hcnJheSYgX29iX2E4KQp7CiAgICB3aGlsZSh0cnVlKQogICAgewogICAgICAgIE9COjpEb3du
Y2FsbF92YXIgX29iX2Rvd24gPSBfT0JfY3JlYXRlRG93bmNhbGwoIlNwYWNlSW50ZXJwb2xhdGUi
LCB0cnVlKTsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIE9COjpPdXRwdXRTdHJl
YW1JbXBsKiBfb2Jfb3V0ID0gX09CX3ByZU1hcnNoYWwoX29iX2Rvd24pOwogICAgICAgICAgICB0
cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgX29iX291dCAtPiB3cml0ZV9kb3VibGUo
X29iX2EwKTsKICAgICAgICAgICAgICAgIF9vYl9vdXQgLT4gd3JpdGVfbG9uZyhfb2JfYTEpOwog
ICAgICAgICAgICAgICAgX29iX291dCAtPiB3cml0ZV9sb25nKF9vYl9hMik7CiAgICAgICAgICAg
ICAgICBfb2Jfb3V0IC0+IHdyaXRlX2xvbmcoX29iX2EzKTsKICAgICAgICAgICAgICAgIENPUkJB
OjpVTG9uZyBfb2JfbGVuMCA9IF9vYl9hNC5sZW5ndGgoKTsKICAgICAgICAgICAgICAgIF9vYl9v
dXQgLT4gd3JpdGVfdWxvbmcoX29iX2xlbjApOwogICAgICAgICAgICAgICAgX29iX291dCAtPiB3
cml0ZV9mbG9hdF9hcnJheShfb2JfYTQuZ2V0X2J1ZmZlcigpLCBfb2JfbGVuMCk7CiAgICAgICAg
ICAgICAgICBDT1JCQTo6VUxvbmcgX29iX2xlbjEgPSBfb2JfYTUubGVuZ3RoKCk7CiAgICAgICAg
ICAgICAgICBfb2Jfb3V0IC0+IHdyaXRlX3Vsb25nKF9vYl9sZW4xKTsKICAgICAgICAgICAgICAg
IF9vYl9vdXQgLT4gd3JpdGVfZmxvYXRfYXJyYXkoX29iX2E1LmdldF9idWZmZXIoKSwgX29iX2xl
bjEpOwogICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIF9vYl9sZW4yID0gX29iX2E2Lmxlbmd0
aCgpOwogICAgICAgICAgICAgICAgX29iX291dCAtPiB3cml0ZV91bG9uZyhfb2JfbGVuMik7CiAg
ICAgICAgICAgICAgICBfb2Jfb3V0IC0+IHdyaXRlX2xvbmdfYXJyYXkoX29iX2E2LmdldF9idWZm
ZXIoKSwgX29iX2xlbjIpOwogICAgICAgICAgICAgICAgX29iX291dCAtPiB3cml0ZV9sb25nKF9v
Yl9hNyk7CiAgICAgICAgICAgICAgICBDT1JCQTo6VUxvbmcgX29iX2xlbjMgPSBfb2JfYTgubGVu
Z3RoKCk7CiAgICAgICAgICAgICAgICBfb2Jfb3V0IC0+IHdyaXRlX3Vsb25nKF9vYl9sZW4zKTsK
ICAgICAgICAgICAgICAgIF9vYl9vdXQgLT4gd3JpdGVfZmxvYXRfYXJyYXkoX29iX2E4LmdldF9i
dWZmZXIoKSwgX29iX2xlbjMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNhdGNoKGNvbnN0
IENPUkJBOjpTeXN0ZW1FeGNlcHRpb24mIF9vYl9leCkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgX09CX21hcnNoYWxFeChfb2JfZG93biwgX29iX2V4KTsKICAgICAgICAgICAgfQogICAg
ICAgICAgICBfT0JfcG9zdE1hcnNoYWwoX29iX2Rvd24pOwogICAgICAgICAgICBfT0JfcmVxdWVz
dChfb2JfZG93bik7CiAgICAgICAgICAgIGJvb2wgX29iX3VleDsKICAgICAgICAgICAgT0I6Oklu
cHV0U3RyZWFtSW1wbCogX29iX2luID0gX09CX3ByZVVubWFyc2hhbChfb2JfZG93biwgX29iX3Vl
eCk7CiAgICAgICAgICAgIGlmKF9vYl91ZXgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
IF9PQl9wb3N0VW5tYXJzaGFsKF9vYl9kb3duKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENPUkJBOjpMb25nIF9vYl9yOwogICAg
ICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgX29i
X3IgPSBfb2JfaW4gLT4gcmVhZF9sb25nKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICBjYXRjaChjb25zdCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uJiBfb2JfZXgpCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgX09CX3VubWFyc2hhbEV4KF9vYl9kb3duLCBf
b2JfZXgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgX09CX3Bvc3RVbm1hcnNo
YWwoX29iX2Rvd24pOwogICAgICAgICAgICAgICAgcmV0dXJuIF9vYl9yOwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICAgIGNhdGNoKGNvbnN0IE9COjpGYWlsdXJlRXhjZXB0aW9uJiBfb2Jf
ZXgpCiAgICAgICAgewogICAgICAgICAgICBfT0JfaGFuZGxlRmFpbHVyZUV4Y2VwdGlvbihfb2Jf
ZG93biwgX29iX2V4KTsKICAgICAgICB9CiAgICB9Cn0KCgoKCkNPUkJBOjpMb25nCk9CTWFyc2hh
bFN0dWJJbXBsX0ludGVycDo6R2V0SW50ZXJwb2xhdGUoQ09SQkE6OkRvdWJsZSBfb2JfYTAsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkxvbmcgX29iX2Ex
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpMb25nIF9v
Yl9hMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdF9hcnJh
eSYgX29iX2EzKQp7CiAgICB3aGlsZSh0cnVlKQogICAgewogICAgICAgIE9COjpEb3duY2FsbF92
YXIgX29iX2Rvd24gPSBfT0JfY3JlYXRlRG93bmNhbGwoIkdldEludGVycG9sYXRlIiwgdHJ1ZSk7
CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBPQjo6T3V0cHV0U3RyZWFtSW1wbCog
X29iX291dCA9IF9PQl9wcmVNYXJzaGFsKF9vYl9kb3duKTsKICAgICAgICAgICAgdHJ5CiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgIF9vYl9vdXQgLT4gd3JpdGVfZG91YmxlKF9vYl9hMCk7
CiAgICAgICAgICAgICAgICBfb2Jfb3V0IC0+IHdyaXRlX2xvbmcoX29iX2ExKTsKICAgICAgICAg
ICAgICAgIF9vYl9vdXQgLT4gd3JpdGVfbG9uZyhfb2JfYTIpOwogICAgICAgICAgICAgICAgQ09S
QkE6OlVMb25nIF9vYl9sZW4wID0gX29iX2EzLmxlbmd0aCgpOwogICAgICAgICAgICAgICAgX29i
X291dCAtPiB3cml0ZV91bG9uZyhfb2JfbGVuMCk7CiAgICAgICAgICAgICAgICBfb2Jfb3V0IC0+
IHdyaXRlX2Zsb2F0X2FycmF5KF9vYl9hMy5nZXRfYnVmZmVyKCksIF9vYl9sZW4wKTsKICAgICAg
ICAgICAgfQogICAgICAgICAgICBjYXRjaChjb25zdCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uJiBf
b2JfZXgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9PQl9tYXJzaGFsRXgoX29iX2Rv
d24sIF9vYl9leCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX09CX3Bvc3RNYXJzaGFsKF9v
Yl9kb3duKTsKICAgICAgICAgICAgX09CX3JlcXVlc3QoX29iX2Rvd24pOwogICAgICAgICAgICBi
b29sIF9vYl91ZXg7CiAgICAgICAgICAgIE9COjpJbnB1dFN0cmVhbUltcGwqIF9vYl9pbiA9IF9P
Ql9wcmVVbm1hcnNoYWwoX29iX2Rvd24sIF9vYl91ZXgpOwogICAgICAgICAgICBpZihfb2JfdWV4
KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfT0JfcG9zdFVubWFyc2hhbChfb2JfZG93
bik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICBDT1JCQTo6TG9uZyBfb2JfcjsKICAgICAgICAgICAgICAgIHRyeQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgIF9vYl9yID0gX29iX2luIC0+IHJlYWRfbG9uZygp
OwogICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBfb2JfbGVuMSA9IF9vYl9pbiAtPiBy
ZWFkX3Vsb25nKCk7CiAgICAgICAgICAgICAgICAgICAgX29iX2EzLmxlbmd0aChfb2JfbGVuMSk7
CiAgICAgICAgICAgICAgICAgICAgX29iX2luIC0+IHJlYWRfZmxvYXRfYXJyYXkoX29iX2EzLmdl
dF9idWZmZXIoKSwgX29iX2xlbjEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
Y2F0Y2goY29uc3QgQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiYgX29iX2V4KQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgIF9PQl91bm1hcnNoYWxFeChfb2JfZG93biwgX29iX2V4
KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF9PQl9wb3N0VW5tYXJzaGFsKF9v
Yl9kb3duKTsKICAgICAgICAgICAgICAgIHJldHVybiBfb2JfcjsKICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgICBjYXRjaChjb25zdCBPQjo6RmFpbHVyZUV4Y2VwdGlvbiYgX29iX2V4KQog
ICAgICAgIHsKICAgICAgICAgICAgX09CX2hhbmRsZUZhaWx1cmVFeGNlcHRpb24oX29iX2Rvd24s
IF9vYl9leCk7CiAgICAgICAgfQogICAgfQp9CgoKCgpJbnRlcnBfcHRyCk9CTWFyc2hhbFN0dWJJ
bXBsX0ludGVycEZhcm06OmNyZWF0ZSgpCnsKICAgIHdoaWxlKHRydWUpCiAgICB7CiAgICAgICAg
T0I6OkRvd25jYWxsX3ZhciBfb2JfZG93biA9IF9PQl9jcmVhdGVEb3duY2FsbCgiY3JlYXRlIiwg
dHJ1ZSk7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBfT0JfcHJlTWFyc2hhbChf
b2JfZG93bik7CiAgICAgICAgICAgIF9PQl9wb3N0TWFyc2hhbChfb2JfZG93bik7CiAgICAgICAg
ICAgIF9PQl9yZXF1ZXN0KF9vYl9kb3duKTsKICAgICAgICAgICAgYm9vbCBfb2JfdWV4OwogICAg
ICAgICAgICBPQjo6SW5wdXRTdHJlYW1JbXBsKiBfb2JfaW4gPSBfT0JfcHJlVW5tYXJzaGFsKF9v
Yl9kb3duLCBfb2JfdWV4KTsKICAgICAgICAgICAgaWYoX29iX3VleCkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgX09CX3Bvc3RVbm1hcnNoYWwoX29iX2Rvd24pOwogICAgICAgICAgICB9
CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgSW50ZXJwX3Zh
ciBfb2JfcjsKICAgICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgIE9CVW5tYXJzaGFsKF9vYl9yLmlub3V0KCksIF9vYl9pbik7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICBjYXRjaChjb25zdCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9u
JiBfb2JfZXgpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgX09CX3VubWFy
c2hhbEV4KF9vYl9kb3duLCBfb2JfZXgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgX09CX3Bvc3RVbm1hcnNoYWwoX29iX2Rvd24pOwogICAgICAgICAgICAgICAgcmV0dXJuIF9v
Yl9yLl9yZXRuKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2goY29uc3Qg
T0I6OkZhaWx1cmVFeGNlcHRpb24mIF9vYl9leCkKICAgICAgICB7CiAgICAgICAgICAgIF9PQl9o
YW5kbGVGYWlsdXJlRXhjZXB0aW9uKF9vYl9kb3duLCBfb2JfZXgpOwogICAgICAgIH0KICAgIH0K
fQoKCgoKSW50ZXJwX3B0cgpPQk1hcnNoYWxTdHViSW1wbF9JbnRlcnBGYXJtOjpnZXRSZWZlcmVu
Y2UoQ09SQkE6OkxvbmcgX29iX2EwKQp7CiAgICB3aGlsZSh0cnVlKQogICAgewogICAgICAgIE9C
OjpEb3duY2FsbF92YXIgX29iX2Rvd24gPSBfT0JfY3JlYXRlRG93bmNhbGwoImdldFJlZmVyZW5j
ZSIsIHRydWUpOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgT0I6Ok91dHB1dFN0
cmVhbUltcGwqIF9vYl9vdXQgPSBfT0JfcHJlTWFyc2hhbChfb2JfZG93bik7CiAgICAgICAgICAg
IHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfb2Jfb3V0IC0+IHdyaXRlX2xvbmco
X29iX2EwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYXRjaChjb25zdCBDT1JCQTo6U3lz
dGVtRXhjZXB0aW9uJiBfb2JfZXgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9PQl9t
YXJzaGFsRXgoX29iX2Rvd24sIF9vYl9leCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX09C
X3Bvc3RNYXJzaGFsKF9vYl9kb3duKTsKICAgICAgICAgICAgX09CX3JlcXVlc3QoX29iX2Rvd24p
OwogICAgICAgICAgICBib29sIF9vYl91ZXg7CiAgICAgICAgICAgIE9COjpJbnB1dFN0cmVhbUlt
cGwqIF9vYl9pbiA9IF9PQl9wcmVVbm1hcnNoYWwoX29iX2Rvd24sIF9vYl91ZXgpOwogICAgICAg
ICAgICBpZihfb2JfdWV4KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfT0JfcG9zdFVu
bWFyc2hhbChfb2JfZG93bik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICBJbnRlcnBfdmFyIF9vYl9yOwogICAgICAgICAgICAgICAg
dHJ5CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgT0JVbm1hcnNoYWwoX29i
X3IuaW5vdXQoKSwgX29iX2luKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNh
dGNoKGNvbnN0IENPUkJBOjpTeXN0ZW1FeGNlcHRpb24mIF9vYl9leCkKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICBfT0JfdW5tYXJzaGFsRXgoX29iX2Rvd24sIF9vYl9leCk7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBfT0JfcG9zdFVubWFyc2hhbChfb2Jf
ZG93bik7CiAgICAgICAgICAgICAgICByZXR1cm4gX29iX3IuX3JldG4oKTsKICAgICAgICAgICAg
fQogICAgICAgIH0KICAgICAgICBjYXRjaChjb25zdCBPQjo6RmFpbHVyZUV4Y2VwdGlvbiYgX29i
X2V4KQogICAgICAgIHsKICAgICAgICAgICAgX09CX2hhbmRsZUZhaWx1cmVFeGNlcHRpb24oX29i
X2Rvd24sIF9vYl9leCk7CiAgICAgICAgfQogICAgfQp9Cg==


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2001-06-12 21:06 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-06-12 21:06 c++/2742: Internal compiler error in dwarfout_finish, at dwarfout.c:6067 rodrigc
  -- strict thread matches above, loose matches on Subject: below --
2001-05-04 13:36 matt

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).