public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* c++/5036: Internal compiler error in gcc-2.95.4.  gcc-3.0 gives syntax errors
@ 2001-12-06  9:16 shawley
  0 siblings, 0 replies; 3+ messages in thread
From: shawley @ 2001-12-06  9:16 UTC (permalink / raw)
  To: gcc-gnats


>Number:         5036
>Category:       c++
>Synopsis:       Internal compiler error in gcc-2.95.4.  gcc-3.0 gives syntax errors
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Thu Dec 06 09:16:03 PST 2001
>Closed-Date:
>Last-Modified:
>Originator:     Scott Hawley
>Release:        2.95.4, and  3.0.2 (Debian) (Debian testing/unstable)
>Organization:
>Environment:
System: Linux ockham 2.4.9 #7 Thu Sep 13 15:40:55 CEST 2001 i686 unknown
> Architecture: i686>host: i386-pc-linux-gnu
> build: i386-pc-linux-gnu
> target: i386-pc-linux-gnu
> configured with: ../src/configure -v --enable-languages=c,c++,java,f77,proto,objc --prefix=/usr --infodir=/share/info --mandir=/share/man --enable-shared --with-gnu-as --with-gnu-ld --with-system-zlib --enable-long-long --enable-nls --without-included-gettext --disable-checking --enable-threads=posix --enable-java-gc=boehm --with-cpp-install-dir=bin --enable-objc-gc i386-linux
>Description:
Description:
>  When I compile my C++ code (ACEDistribution.cpp, or any of several related
> files) using gcc 2.95.4, I get this message:

> ACEDistribution.cpp: In method `ACEDistribution::ACEDistribution(int, BBoxList &)':
> ACEDistribution.cpp:30: Internal compiler error.
> ACEDistribution.cpp:30: Please submit a full bug report.
> ACEDistribution.cpp:30: Internal compiler error:
> ACEDistribution.cpp:30: See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.

> When I compile it under gcc 3.0.2, I get many error messages that sya
> "syntax error before & token".  Many of these errors are related to typedefs
> that use things like istream and ostream from
> iostream.h (or "iostream" in the new ISO C++).

> This was valid code under gcc 2.95.   I understand that you've adopted the
> ISO standard for 3.0, but... I should still be able to compile my existing
> code somehow, right?  I notice that there appears to be some attempt towards
> backwards-compatibility in that the header files gcc-3.0 is using are in
> some /usr/include/g++-v3/backward/, but this is apparently not having the
> desired effect..

Attached is the preprocessor file, generated via 

c++ -E -I. -I../include -I/home/shawley/autoconf/bbh_grace/include  -I/usr/local/include  -I/usr/include/mpi  -I/home/shawley/include -DLINUX -DIO_RNPLIO  -DSTDC_HEADERS=1 -DHAVE_STRDUP=1 -DHAVE_ATEXIT=1   -DHAVE_LIBNETCDF=1 -DHAVE_LIBDF=1 -DHAVE_HDF=1 -DHAVE_LIBVS=1 -DHAVE_LIBSV=1 -DHAVE_LIBMPI=1 -DACE_REUSE_GDB -DDEBUG_PRINT -DACE_WRITEBOXES -DDEBUG_PRINT_GD_FILL   ACEDistribution.cpp > ACEDistribution.i

>How-To-Repeat:
c++ -E -I. -I../include -I/home/shawley/autoconf/bbh_grace/include  -I/usr/local/include  -I/usr/include/mpi  -I/home/shawley/include -DLINUX -DIO_RNPLIO  -DSTDC_HEADERS=1 -DHAVE_STRDUP=1 -DHAVE_ATEXIT=1   -DHAVE_LIBNETCDF=1 -DHAVE_LIBDF=1 -DHAVE_HDF=1 -DHAVE_LIBVS=1 -DHAVE_LIBSV=1 -DHAVE_LIBMPI=1 -DACE_REUSE_GDB -DDEBUG_PRINT -DACE_WRITEBOXES -DDEBUG_PRINT_GD_FILL   ACEDistribution.cpp -o ACEDistribution.o
>Fix:

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

IyAxICJBQ0VEaXN0cmlidXRpb24uY3BwIgogCgoKCgoKCgoKCiMgMSAiQUNFRGlzdHJpYnV0aW9u
LmgiIDEKCgoKIAoKCgoKCgoKCgojIDEgIkFDRVBhcmFtcy5oIiAxCgoKCiAKCgoKCgoKCgoKCiAK
IyAxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK
CiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKCgogCgoKCgoKCgogCiMgMTQy
ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwoKCiAKCgoKCgoKCgoKIAoKCgoKCgoKCiAKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyMDggIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAz
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiAKCgogCgoKCgoKCgoKIAoK
CgoKIAoKCgoKCgoKCgoKCgoKCgoKIAoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAx
IDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgoKCgoKIAoKCgoKCiAKCgoKCgoKCgog
CgoKCiMgNjUgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMwoKCiAKCgoKCgogCgoKCgogCgoK
CgoKCgoKCiAKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCiAKCgoK
CgoKCiAKCgoKCgoKIAoKCgoKCgoKCiAKCgoKCgoKCgogCgoKCgoKCgoKIAoKCgoKCgoKCgoKCiAK
CgoKCgoKCgoKCiAKCgoKCgoKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIyAyODMgIi91c3Iv
aW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKCgoKIAoKCgoKCgoKCiAKCgoKCgogCgogCgoKCgoKCgoK
IyAxICIvdXNyL2luY2x1ZGUvZ251L3N0dWJzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoj
IDMxMiAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwoKCgoKIyAyNSAiL3Vzci9pbmNsdWRl
L3N0ZGxpYi5oIiAyIDMKCgogCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgv
Mi45NS40L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9saWIvZ2Nj
LWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoK
IAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRk
ZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgojIDEzMSAi
L3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoK
IAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBp
bnQgc2l6ZV90OwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgojIDI4MyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRl
Zi5oIiAzCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQv
aW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDMzICIvdXNy
L2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCmV4dGVybiAiQyIgeyAKCgoKCiMgOTEgIi91c3IvaW5j
bHVkZS9zdGRsaWIuaCIgMwoKCiAKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgcXVvdDsJCQkg
CiAgICBpbnQgcmVtOwkJCSAKICB9IGRpdl90OwoKIAoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBs
b25nIGludCBxdW90OwkJIAogICAgbG9uZyBpbnQgcmVtOwkJIAogIH0gbGRpdl90OwoKCgojIDEx
OCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCgoKCiAKCgoKIAoKCgoKCiAKCmV4dGVybiBzaXpl
X3QgX19jdHlwZV9nZXRfbWJfY3VyX21heCAodm9pZCkgdGhyb3cgKCkgOwoKCiAKZXh0ZXJuIGRv
dWJsZSBhdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgICA7CiAKZXh0ZXJuIGlu
dCBhdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgICA7CiAKZXh0ZXJuIGxvbmcg
aW50IGF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSAgIDsKCgogCl9fZXh0ZW5z
aW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKQog
ICAgIHRocm93ICgpICAgOwoKCiAKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25wdHIsCgkJICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRo
cm93ICgpIDsKCgoKCgoKCgoKCiAKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbCAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf
X2Jhc2UpIHRocm93ICgpIDsKIApleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCSAgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCkgOwoKCiAKX19leHRlbnNpb25fXwpleHRl
cm4gbG9uZyBsb25nIGludCBzdHJ0b3EgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs
CgkJCSAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgp
IDsKIApfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdXEg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkgICAgICAgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCkgOwoKCgogCgogCl9fZXh0
ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fbnB0ciwKCQkJICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf
X2Jhc2UpIHRocm93ICgpIDsKIApfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxv
bmcgaW50IHN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkJCWNo
YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpIDsKCgoK
IyAyNDQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwoKCgogCgoKZXh0ZXJuIGRvdWJsZSBfX3N0
cnRvZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCSBjaGFy
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCkgOwpleHRl
cm4gZmxvYXQgX19zdHJ0b2ZfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsCgkJCQljaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhy
b3cgKCkgOwpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2ludGVybmFsIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkJICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyLAoJCQkJICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKSA7CgpleHRlcm4gbG9uZyBpbnQg
X19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkg
ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCQkJCSAgIGludCBfX2Jhc2UsIGludCBfX2dy
b3VwKSB0aHJvdyAoKSA7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfaW50
ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkJICAgICBjaGFyICoq
X19yZXN0cmljdCBfX2VuZHB0ciwKCQkJCQkgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0
aHJvdyAoKSA7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9s
bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCQkgY2hhciAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsCgkJCQkJIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJv
dyAoKSA7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19z
dHJ0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICoKCQkJCQkJICAgX19yZXN0cmljdCBfX25w
dHIsCgkJCQkJCSAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJCQkJCQkgICBpbnQgX19i
YXNlLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKSA7CgoKCgojIDM3NyAiL3Vzci9pbmNsdWRl
L3N0ZGxpYi5oIiAzCgoKCgogCgoKZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50IF9fbikgdGhy
b3cgKCkgOwoKIApleHRlcm4gbG9uZyBpbnQgYTY0bCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93
ICgpICAgOwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIAoKCgoKCgoKCgoK
CgoKCgoKCiAKCgoKCgoKCgpleHRlcm4gIkMiIHsgCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5
cGVzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgojIDEgIi91c3IvbGliL2dj
Yy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgoj
IDE5ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVmLmgi
IDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIu
OTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKCiAKCiAKCiMgMTMxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1
ZGUvc3RkZGVmLmgiIDMKCgogCgogCgoKIyAxODggIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51
eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCiMgMjcxICIvdXNyL2xp
Yi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgojIDI4MyAi
L3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoK
IAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9z
dGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDI5ICIvdXNyL2luY2x1ZGUv
Yml0cy90eXBlcy5oIiAyIDMKCgogCnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VfY2hhcjsKdHlw
ZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdV9p
bnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9uZzsKCl9fZXh0ZW5zaW9uX18gdHlwZWRl
ZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdV9xdWFkX3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRl
ZiBsb25nIGxvbmcgaW50IF9fcXVhZF90OwojIDQ4ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5o
IiAzCgp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIg
X191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVu
c2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90
Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKX19leHRlbnNpb25fXyB0eXBlZGVm
IHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVu
c2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCnR5cGVkZWYgX19xdWFkX3QgKl9fcWFk
ZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90OwkJIAp0eXBlZGVmIF9fdV9pbnQgX191
aWRfdDsJCSAKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CQkgCnR5cGVkZWYgX191X2xvbmcgX19p
bm9fdDsJCSAKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90OwkJIAp0eXBlZGVmIF9fdV9pbnQgX19u
bGlua190OyAJCSAKdHlwZWRlZiBsb25nIGludCBfX29mZl90OwkJIAp0eXBlZGVmIF9fcXVhZF90
IF9fbG9mZl90OwkJIAp0eXBlZGVmIGludCBfX3BpZF90OwkJCSAKdHlwZWRlZiBpbnQgX19zc2l6
ZV90OwkJCSAKdHlwZWRlZiBfX3VfbG9uZyBfX3JsaW1fdDsJCSAKdHlwZWRlZiBfX3VfcXVhZF90
IF9fcmxpbTY0X3Q7CQkgCnR5cGVkZWYgX191X2ludCBfX2lkX3Q7CQkJIAoKdHlwZWRlZiBzdHJ1
Y3QKICB7CiAgICBpbnQgX192YWxbMl07CiAgfSBfX2ZzaWRfdDsJCQkJIAoKIAp0eXBlZGVmIGlu
dCBfX2RhZGRyX3Q7CQkJIAp0eXBlZGVmIGNoYXIgKl9fY2FkZHJfdDsKdHlwZWRlZiBsb25nIGlu
dCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191c2Vjb25kc190Owp0eXBlZGVmIGxv
bmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190OwkJIAoMCnR5
cGVkZWYgbG9uZyBpbnQgX19jbG9ja190OwoKIAp0eXBlZGVmIGludCBfX2Nsb2NraWRfdDsKCiAK
dHlwZWRlZiBpbnQgX190aW1lcl90OwoKCiAKCgoKdHlwZWRlZiBpbnQgX19rZXlfdDsKCiAKdHlw
ZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoKIAp0eXBlZGVmIGxvbmcgaW50
IF9fYmxrc2l6ZV90OwoKIAoKIAp0eXBlZGVmIGxvbmcgaW50IF9fYmxrY250X3Q7CnR5cGVkZWYg
X19xdWFkX3QgX19ibGtjbnQ2NF90OwoKIAp0eXBlZGVmIF9fdV9sb25nIF9fZnNibGtjbnRfdDsK
dHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKIAp0eXBlZGVmIF9fdV9sb25nIF9f
ZnNmaWxjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90OwoKIAp0eXBlZGVm
IF9fdV9xdWFkX3QgX19pbm82NF90OwoKIAp0eXBlZGVmIF9fbG9mZl90IF9fb2ZmNjRfdDsKCiAK
dHlwZWRlZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQg
X190X3VzY2FsYXJfdDsKCiAKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKCiAKdHlwZWRlZiB1bnNp
Z25lZCBpbnQgX19zb2NrbGVuX3Q7CgoKIAoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFk
dHlwZXMuaCIgMSAzCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCgoKCgoKCgoKIyAxICIvdXNy
L2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKIyA2MiAiL3Vz
ci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMwoKCgoKCiAKc3RydWN0IF9fc2NoZWRfcGFyYW0KICB7
CiAgICBpbnQgX19zY2hlZF9wcmlvcml0eTsKICB9OwoKCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRz
L3B0aHJlYWR0eXBlcy5oIiAyIDMKCgogCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9u
ZyBpbnQgX19zdGF0dXM7ICAgIAogIGludCBfX3NwaW5sb2NrOyAgICAgICAKCn07CgoKIAp0eXBl
ZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1Y3QgKl9wdGhyZWFkX2Rlc2NyOwoKCgoKIAp0
eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBpbnQgX19kZXRhY2hzdGF0ZTsKICBp
bnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFyYW07CiAg
aW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVfdCBfX2d1YXJkc2l6ZTsK
ICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwogIHNpemVfdCBfX3N0
YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgogCnR5cGVkZWYgc3RydWN0CnsKICBzdHJ1Y3Qg
X3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7ICAKICBfcHRocmVhZF9kZXNjciBfX2Nfd2FpdGlu
ZzsgICAgICAgICAKfSBwdGhyZWFkX2NvbmRfdDsKCgogCnR5cGVkZWYgc3RydWN0CnsKICBpbnQg
X19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgogCnR5cGVkZWYgdW5zaWduZWQgaW50IHB0
aHJlYWRfa2V5X3Q7CgoKIAogCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9yZXNlcnZlZDsg
ICAgICAgICAgICAgICAgCiAgaW50IF9fbV9jb3VudDsgICAgICAgICAgICAgICAgICAgCiAgX3B0
aHJlYWRfZGVzY3IgX19tX293bmVyOyAgICAgICAgCiAgaW50IF9fbV9raW5kOyAgICAgICAgICAg
ICAgICAgICAgCiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2NrOyAgCn0gcHRocmVh
ZF9tdXRleF90OwoKCiAKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2luZDsKfSBwdGhy
ZWFkX211dGV4YXR0cl90OwoKCiAKdHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7CgoKIyAxMTcg
Ii91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAzCgoKIyAxMzYgIi91c3IvaW5jbHVk
ZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAzCgoKCiAKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBw
dGhyZWFkX3Q7CgoKIyAxNDMgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCgoKIyAz
MCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKCnR5cGVkZWYgX191X2NoYXIgdV9j
aGFyOwp0eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5
cGVkZWYgX191X2xvbmcgdV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBf
X3VfcXVhZF90IHVfcXVhZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgoKCnR5cGVkZWYg
X19sb2ZmX3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CgoKCgoKCgoKCgoKdHlw
ZWRlZiBfX2Rldl90IGRldl90OwoKCgoKdHlwZWRlZiBfX2dpZF90IGdpZF90OwoKCgoKdHlwZWRl
ZiBfX21vZGVfdCBtb2RlX3Q7CgoKCgp0eXBlZGVmIF9fbmxpbmtfdCBubGlua190OwoKCgoKdHlw
ZWRlZiBfX3VpZF90IHVpZF90OwoKCgoKCnR5cGVkZWYgX19vZmZfdCBvZmZfdDsKCgoKCgoKCgoK
Cgp0eXBlZGVmIF9fcGlkX3QgcGlkX3Q7CgoKCgp0eXBlZGVmIF9faWRfdCBpZF90OwoKCgoKdHlw
ZWRlZiBfX3NzaXplX3Qgc3NpemVfdDsKCgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0
eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OwoKCgoKCnR5cGVkZWYgX19rZXlfdCBrZXlfdDsKCgoK
CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAK
CgoKCgoKCgoKCgoKCgojIDUxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKIyA2MSAiL3Vzci9p
bmNsdWRlL3RpbWUuaCIgMwoKCgoKCgoKCiAKdHlwZWRlZiBfX3RpbWVfdCB0aW1lX3Q7CgoKCgoK
CgoKCgogCnR5cGVkZWYgX19jbG9ja2lkX3QgY2xvY2tpZF90OwoKCgoKCgoKCgoKIAp0eXBlZGVm
IF9fdGltZXJfdCB0aW1lcl90OwoKCgoKCiMgMTEyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoK
CgojIDM2NCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgojIDEzMiAiL3Vzci9pbmNsdWRlL3N5
cy90eXBlcy5oIiAyIDMKCgojIDE0MyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCgoKCiMg
MSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAx
IDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5j
bHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGli
L2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoK
CgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKIyAxMzEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51
eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCgojIDE4OCAiL3Vzci9saWIvZ2Nj
LWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoK
IyAyNzEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYu
aCIgMwoKCiMgMjgzICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUv
c3RkZGVmLmgiIDMKCgogCgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIu
OTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMTQ2
ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgogCnR5cGVkZWYgdW5zaWduZWQgbG9u
ZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9ydDsKdHlwZWRlZiB1
bnNpZ25lZCBpbnQgdWludDsKCgogCgojIDE4MCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAz
CgoKIAoKCgoKCgoKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAo
ICBfX1FJX18gKSkpIDsKdHlwZWRlZiBpbnQgaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2Rl
X18gKCAgX19ISV9fICkpKSA7CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9f
bW9kZV9fICggIF9fU0lfXyApKSkgOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRlX18g
KChfX21vZGVfXyAoICBfX0RJX18gKSkpIDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDhf
dCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAgX19RSV9fICkpKSA7CnR5cGVkZWYgdW5zaWdu
ZWQgaW50IHVfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAgX19ISV9fICkpKSA7
CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18g
KCAgX19TSV9fICkpKSA7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50NjRfdCBfX2F0dHJpYnV0
ZV9fICgoX19tb2RlX18gKCAgX19ESV9fICkpKSA7Cgp0eXBlZGVmIGludCByZWdpc3Rlcl90IF9f
YXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3JkX18pKSk7CgoKIAoKCgoKCgogCiMgMSAiL3Vz
ci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK
CgoKCiAKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiAKCgoKCgoKIyAzNyAi
L3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAyIDMKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgojIDIxMiAi
L3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgogCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9z
ZWxlY3QuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgoKIAojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL3NlbGVjdC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAz
NiAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDMKCgoKCgoKCgoKCgoKIyA1NiAiL3Vzci9p
bmNsdWRlL2JpdHMvc2VsZWN0LmgiIDMKCiMgNzIgIi91c3IvaW5jbHVkZS9iaXRzL3NlbGVjdC5o
IiAzCgojIDMxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgogCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYg
aW50IF9fc2lnX2F0b21pY190OwoKIAoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQg
bG9uZyBpbnQgX192YWxbKDEwMjQgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSkg
XTsKICB9IF9fc2lnc2V0X3Q7CgoKCgogCgoKCgoKIyAxMjUgIi91c3IvaW5jbHVkZS9iaXRzL3Np
Z3NldC5oIiAzCgojIDM0ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgoKCnR5cGVk
ZWYgX19zaWdzZXRfdCBzaWdzZXRfdDsKCgogCgoKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAx
IDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgojIDUxICIvdXNyL2luY2x1ZGUv
dGltZS5oIiAzCgoKIyA2MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgojIDcyICIvdXNyL2lu
Y2x1ZGUvdGltZS5oIiAzCgoKCiMgODQgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKIyA5NiAi
L3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgoKCgoKCiAKCnN0cnVjdCB0aW1lc3BlYwogIHsKICAg
IF9fdGltZV90IHR2X3NlYzsJCSAKICAgIGxvbmcgaW50IHR2X25zZWM7CQkgCiAgfTsKCgoKCgoj
IDM2NCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgojIDQ0ICIvdXNyL2luY2x1ZGUvc3lzL3Nl
bGVjdC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzCiAKCgoKCgoK
CgoKCgoKCgoKCgoKIAoKCgojIDU3ICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDMKCgoKCgoK
CgogCgpzdHJ1Y3QgdGltZXZhbAogIHsKICAgIF9fdGltZV90IHR2X3NlYzsJCSAKICAgIF9fc3Vz
ZWNvbmRzX3QgdHZfdXNlYzsJIAogIH07CgoKIyA0NiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3Qu
aCIgMiAzCgoKCnR5cGVkZWYgX19zdXNlY29uZHNfdCBzdXNlY29uZHNfdDsKCgoKCiAKdHlwZWRl
ZiBsb25nIGludCBfX2ZkX21hc2s7CgogCgoKCgogCnR5cGVkZWYgc3RydWN0CiAgewogICAgIAoK
CgoKCiAgICBfX2ZkX21hc2sgX19mZHNfYml0c1sxMDI0ICAvICg4ICogc2l6ZW9mIChfX2ZkX21h
c2spKSBdOwoKCiAgfSBmZF9zZXQ7CgogCgoKCiAKdHlwZWRlZiBfX2ZkX21hc2sgZmRfbWFzazsK
CiAKCgoKCiAKCgoKCgoKZXh0ZXJuICJDIiB7IAoKIAoKCgoKZXh0ZXJuIGludCBzZWxlY3QgKGlu
dCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMsCgkJICAgZmRfc2V0ICpfX3Jl
c3RyaWN0IF9fd3JpdGVmZHMsCgkJICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAoJ
CSAgIHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91dCkgdGhyb3cgKCkgOwoKIyAx
MTYgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKCgp9IAoKCiMgMjE1ICIvdXNyL2luY2x1
ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiAKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3N5c21hY3Jvcy5o
IiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKIyA0NyAiL3Vzci9pbmNsdWRl
L3N5cy9zeXNtYWNyb3MuaCIgMwoKCgojIDIxOCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAy
IDMKCgoKCgoKCgoKIAoKCnR5cGVkZWYgX19ibGtjbnRfdCBibGtjbnRfdDsJICAKCgoKdHlwZWRl
ZiBfX2ZzYmxrY250X3QgZnNibGtjbnRfdDsgIAoKCgp0eXBlZGVmIF9fZnNmaWxjbnRfdCBmc2Zp
bGNudF90OyAgCgoKIyAyNTQgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwoKCgoKCgoKCn0g
CgoKIyAzOTAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKIAoKCgogCmV4dGVybiBsb25n
IGludCByYW5kb20gKHZvaWQpIHRocm93ICgpIDsKCiAKZXh0ZXJuIHZvaWQgc3JhbmRvbSAodW5z
aWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCkgOwoKIAoKCgpleHRlcm4gY2hhciAqaW5pdHN0YXRl
ICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3N0YXRlYnVmLAoJCQlzaXplX3QgX19zdGF0
ZWxlbikgdGhyb3cgKCkgOwoKIAoKZXh0ZXJuIGNoYXIgKnNldHN0YXRlIChjaGFyICpfX3N0YXRl
YnVmKSB0aHJvdyAoKSA7CgoKCiAKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewogICAgaW50MzJf
dCAqZnB0cjsJCSAKICAgIGludDMyX3QgKnJwdHI7CQkgCiAgICBpbnQzMl90ICpzdGF0ZTsJCSAK
ICAgIGludCByYW5kX3R5cGU7CQkgCiAgICBpbnQgcmFuZF9kZWc7CQkgCiAgICBpbnQgcmFuZF9z
ZXA7CQkgCiAgICBpbnQzMl90ICplbmRfcHRyOwkJIAogIH07CgpleHRlcm4gaW50IHJhbmRvbV9y
IChzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYsCgkJICAgICBpbnQzMl90ICpf
X3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHNyYW5kb21fciAodW5z
aWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgdGhyb3cgKCkgOwoK
ZXh0ZXJuIGludCBpbml0c3RhdGVfciAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19yZXN0
cmljdCBfX3N0YXRlYnVmLAoJCQlzaXplX3QgX19zdGF0ZWxlbiwKCQkJc3RydWN0IHJhbmRvbV9k
YXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHNldHN0YXRlX3Ig
KGNoYXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKCQkgICAgICAgc3RydWN0IHJhbmRvbV9kYXRh
ICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKSA7CgoKCgogCmV4dGVybiBpbnQgcmFuZCAodm9p
ZCkgdGhyb3cgKCkgOwogCmV4dGVybiB2b2lkIHNyYW5kICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0
aHJvdyAoKSA7CgoKIApleHRlcm4gaW50IHJhbmRfciAodW5zaWduZWQgaW50ICpfX3NlZWQpIHRo
cm93ICgpIDsKCgoKCiAKCiAKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKSA7
CmV4dGVybiBkb3VibGUgZXJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRo
cm93ICgpIDsKCiAKZXh0ZXJuIGxvbmcgaW50IGxyYW5kNDggKHZvaWQpIHRocm93ICgpIDsKZXh0
ZXJuIGxvbmcgaW50IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJv
dyAoKSA7CgogCmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKSA7CmV4dGVy
biBsb25nIGludCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cg
KCkgOwoKIApleHRlcm4gdm9pZCBzcmFuZDQ4IChsb25nIGludCBfX3NlZWR2YWwpIHRocm93ICgp
IDsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGludCAqc2VlZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQg
X19zZWVkMTZ2WzNdKSB0aHJvdyAoKSA7CmV4dGVybiB2b2lkIGxjb25nNDggKHVuc2lnbmVkIHNo
b3J0IGludCBfX3BhcmFtWzddKSB0aHJvdyAoKSA7CgoKIAoKCnN0cnVjdCBkcmFuZDQ4X2RhdGEK
ICB7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX194WzNdOwkgCiAgICB1bnNpZ25lZCBzaG9ydCBp
bnQgX19vbGRfeFszXTsgIAogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fYzsJIAogICAgdW5zaWdu
ZWQgc2hvcnQgaW50IF9faW5pdDsJIAogICAgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX2E7CSAK
ICB9OwoKIApleHRlcm4gaW50IGRyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0
cmljdCBfX2J1ZmZlciwKCQkgICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93
ICgpIDsKZXh0ZXJuIGludCBlcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNd
LAoJCSAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCgkJICAg
ICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQg
bHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAoJCSAg
ICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKSA7CmV4dGVybiBpbnQg
bnJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKCQkgICAgICBzdHJ1Y3Qg
ZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAoJCSAgICAgIGxvbmcgaW50ICpfX3Jl
c3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1
Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAoJCSAgICAgIGxvbmcgaW50ICpf
X3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKSA7CmV4dGVybiBpbnQganJhbmQ0OF9yICh1bnNp
Z25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKCQkgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf
X3Jlc3RyaWN0IF9fYnVmZmVyLAoJCSAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0
KSB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgc3JhbmQ0OF9yIChsb25nIGludCBfX3NlZWR2YWws
IHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBp
bnQgc2VlZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10sCgkJICAgICBzdHJ1
Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCBsY29uZzQ4
X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddLAoJCSAgICAgIHN0cnVjdCBkcmFuZDQ4
X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKSA7CgoKCgoKCgogCmV4dGVybiB2b2lkICptYWxsb2Mg
KHNpemVfdCBfX3NpemUpIHRocm93ICgpICAgOwogCmV4dGVybiB2b2lkICpjYWxsb2MgKHNpemVf
dCBfX25tZW1iLCBzaXplX3QgX19zaXplKQogICAgIHRocm93ICgpICAgOwoKCgogCgpleHRlcm4g
dm9pZCAqcmVhbGxvYyAodm9pZCAqX19wdHIsIHNpemVfdCBfX3NpemUpIHRocm93ICgpICAgOwog
CmV4dGVybiB2b2lkIGZyZWUgKHZvaWQgKl9fcHRyKSB0aHJvdyAoKSA7CgoKIApleHRlcm4gdm9p
ZCBjZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpIDsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYWxs
b2NhLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGli
L2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAi
L3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoK
CiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQv
aW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgog
CgogCgojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0
ZGRlZi5oIiAzCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45
NS40L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgojIDI3MSAiL3Vzci9saWIvZ2Nj
LWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIyAyODMgIi91c3Iv
bGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAK
CiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVm
LmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyNSAiL3Vzci9pbmNsdWRlL2FsbG9j
YS5oIiAyIDMKCgpleHRlcm4gIkMiIHsgCgogCgoKIApleHRlcm4gdm9pZCAqYWxsb2NhIChzaXpl
X3QgX19zaXplKSB0aHJvdyAoKSA7CgoKCgoKfSAKCgojIDU0NiAiL3Vzci9pbmNsdWRlL3N0ZGxp
Yi5oIiAyIDMKCgoKCiAKZXh0ZXJuIHZvaWQgKnZhbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cg
KCkgICA7CgoKCgoKCgoKIApleHRlcm4gdm9pZCBhYm9ydCAodm9pZCkgdGhyb3cgKCkgIF9fYXR0
cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgogCmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgq
X19mdW5jKSAodm9pZCkpIHRocm93ICgpIDsKCgogCgpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQg
KCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKl9fYXJnKSwgdm9pZCAqX19hcmcpCiAgICAg
dGhyb3cgKCkgOwoKCiAKCgpleHRlcm4gdm9pZCBleGl0IChpbnQgX19zdGF0dXMpIHRocm93ICgp
ICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgoKCgoKIApleHRlcm4gY2hhciAq
Z2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCkgOwoKIAoKZXh0ZXJuIGNoYXIg
Kl9fc2VjdXJlX2dldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpIDsKCgogCiAK
CmV4dGVybiBpbnQgcHV0ZW52IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCkgOwoKCgogCgpleHRl
cm4gaW50IHNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1
ZSwgaW50IF9fcmVwbGFjZSkKICAgICB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgdW5zZXRlbnYg
KF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKSA7CgoKCiAKCgpleHRlcm4gaW50IGNsZWFy
ZW52ICh2b2lkKSB0aHJvdyAoKSA7CgoKCgogCgoKCmV4dGVybiBjaGFyICpta3RlbXAgKGNoYXIg
Kl9fdGVtcGxhdGUpIHRocm93ICgpIDsKCiAKCgoKCgpleHRlcm4gaW50IG1rc3RlbXAgKGNoYXIg
Kl9fdGVtcGxhdGUpIHRocm93ICgpIDsKCgoKCgoKCgoKCgoKCiAKCgoKCmV4dGVybiBjaGFyICpt
a2R0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKSA7CgoKCiAKZXh0ZXJuIGludCBzeXN0
ZW0gKF9fY29uc3QgY2hhciAqX19jb21tYW5kKSB0aHJvdyAoKSA7CgoKCgoKCgoKCgogCgoKCgoK
ZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAoJ
CSAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fcmVzb2x2ZWQpIHRocm93ICgpIDsKCgoKIAoKCnR5
cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkgKF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQg
Kik7CgoKCgoKCiAKCmV4dGVybiB2b2lkICpic2VhcmNoIChfX2NvbnN0IHZvaWQgKl9fa2V5LCBf
X2NvbnN0IHZvaWQgKl9fYmFzZSwKCQkgICAgICBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6
ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgogCgpleHRlcm4gdm9pZCBxc29ydCAodm9pZCAq
X19iYXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwKCQkgICBfX2NvbXBhcl9mbl90
IF9fY29tcGFyKTsKCgogCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSB0aHJvdyAoKSAgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbG9uZyBpbnQgbGFicyAobG9uZyBpbnQgX194
KSB0aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgogCgogCmV4dGVy
biBkaXZfdCBkaXYgKGludCBfX251bWVyLCBpbnQgX19kZW5vbSkKICAgICB0aHJvdyAoKSAgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbGRpdl90IGxkaXYgKGxvbmcgaW50IF9f
bnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsKCgoKCgoKCgogCgoKIAoKCmV4dGVybiBjaGFyICplY3Z0IChkb3VibGUgX192
YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKCQkgICBpbnQgKl9f
cmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKSA7CgogCgoKZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJs
ZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAoJCSAgIGlu
dCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpIDsKCiAKCgpleHRlcm4gY2hhciAqZ2N2dCAo
ZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgpIDsKCgoK
IApleHRlcm4gY2hhciAqcWVjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwK
CQkgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRo
cm93ICgpIDsKZXh0ZXJuIGNoYXIgKnFmY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19u
ZGlnaXQsCgkJICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19z
aWduKSB0aHJvdyAoKSA7CmV4dGVybiBjaGFyICpxZ2N2dCAobG9uZyBkb3VibGUgX192YWx1ZSwg
aW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgdGhyb3cgKCkgOwoKCiAKCmV4dGVybiBpbnQgZWN2
dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNw
dCwKCQkgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAoJ
CSAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCkgOwpleHRlcm4gaW50IGZjdnRfciAoZG91YmxlIF9f
dmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCgkJICAgaW50ICpf
X3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKCQkgICBzaXplX3QgX19s
ZW4pIHRocm93ICgpIDsKCmV4dGVybiBpbnQgcWVjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwg
aW50IF9fbmRpZ2l0LAoJCSAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3Ry
aWN0IF9fc2lnbiwKCQkgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0
aHJvdyAoKSA7CmV4dGVybiBpbnQgcWZjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9f
bmRpZ2l0LAoJCSAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9f
c2lnbiwKCQkgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAo
KSA7CgoKCgogCgpleHRlcm4gaW50IG1ibGVuIChfX2NvbnN0IGNoYXIgKl9fcywgc2l6ZV90IF9f
bikgdGhyb3cgKCkgOwogCgpleHRlcm4gaW50IG1idG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBf
X3B3YywKCQkgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJv
dyAoKSA7CiAKCmV4dGVybiBpbnQgd2N0b21iIChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hhcikg
dGhyb3cgKCkgOwoKCiAKZXh0ZXJuIHNpemVfdCBtYnN0b3djcyAod2NoYXJfdCAqX19yZXN0cmlj
dCAgX19wd2NzLAoJCQlfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0
aHJvdyAoKSA7CiAKZXh0ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hhciAqX19yZXN0cmljdCBfX3Ms
CgkJCV9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIHNpemVfdCBfX24pCiAgICAg
dGhyb3cgKCkgOwoKCgogCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAoX19jb25zdCBjaGFyICpfX3Jl
c3BvbnNlKSB0aHJvdyAoKSA7CgoKCiMgODExICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKCgoK
CgoKCgoKIAoKCgoKCgojIDg0MiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCgoKIyA4NTIgIi91
c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwoKCgogCgoKZXh0ZXJuIGludCBnZXRsb2FkYXZnIChkb3Vi
bGUgX19sb2FkYXZnW10sIGludCBfX25lbGVtKSB0aHJvdyAoKSA7CgoKCgoKfSAKCgojIDE2ICJB
Q0VQYXJhbXMuaCIgMgoKIyAxICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiAKCgoKCgoKCgoK
CgoKCgoKCgoKIAoKCgoKCgoKCgpleHRlcm4gIkMiIHsgCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxp
Yi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkg
Ii91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoK
CgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40
L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK
IAoKIAoKIyAxMzEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9z
dGRkZWYuaCIgMwoKCiAKCiAKCgojIDE4OCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIu
OTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoKIyAyNzEgIi91c3IvbGliL2dj
Yy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiMgMjgzICIvdXNy
L2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgog
CgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRl
Zi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMzQgIi91c3IvaW5jbHVkZS9zdGRp
by5oIiAyIDMKCgoKCgoKCgoKCiAKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsKCgoKCgoK
CgogCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIF9fRklMRTsKCgoKCgoKCgoKIyAxICIvdXNyL2lu
Y2x1ZGUvbGliaW8uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIv
dXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMwogCgoKCgoKIAoKCgoKCgojIDEgIi91c3IvbGli
L2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAK
CgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVm
LmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4
LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoK
IAoKCgoKCiAKCiAKCiMgMTMxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2lu
Y2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgoKIyAxODggIi91c3IvbGliL2djYy1saWIvaTM4Ni1s
aW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCgojIDI2OSAiL3Vz
ci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoK
CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgIHdpbnRfdDsKCgoKCiAKCiAKCiMgMzE3ICIvdXNy
L2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxNCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMK
CgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoK
CgoKIAoKCgoKCgoKCgoKCiMgNDYgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCgoKIyAxICIvdXNy
L2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoK
CgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0
ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1s
aW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoK
CgoKCiAKCgoKCgogCgogCgojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUu
NC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKIyAxOTAgIi91c3IvbGliL2djYy1saWIvaTM4
Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKCgogCgojIDI3MSAiL3Vz
ci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoK
CgoKCgoKCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQv
aW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDQ4ICIvdXNy
L2luY2x1ZGUvd2NoYXIuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAx
IDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA1MCAiL3Vzci9pbmNsdWRlL3djaGFyLmgi
IDIgMwoKCiAKCgoKCgoKCgoKCgoKCiAKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2NvdW50Owog
IHVuaW9uCiAgewogICAgd2ludF90IF9fd2NoOwogICAgY2hhciBfX3djaGJbNF07CiAgfSBfX3Zh
bHVlOwkJIAp9IF9fbWJzdGF0ZV90OwoKCgoKIAoKIyA2ODIgIi91c3IvaW5jbHVkZS93Y2hhci5o
IiAzCgoKCiMgMjQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgoKdHlwZWRlZiBzdHJ1
Y3QKewogIF9fb2ZmX3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zX3Q7
CnR5cGVkZWYgc3RydWN0CnsKICBfX29mZjY0X3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0
ZTsKfSBfR19mcG9zNjRfdDsKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9nY29udi5oIiAxIDMK
IAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAx
IDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgojIDQ2ICIvdXNyL2luY2x1ZGUvd2No
YXIuaCIgMwoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRl
L3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51
eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNy
L2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoK
CgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKIyAxMzEgIi91c3IvbGliL2djYy1s
aWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCiMgMTkwICIv
dXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoK
IAoKCgoKIAoKIyAyNzEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVk
ZS9zdGRkZWYuaCIgMwoKCgoKCgoKCgoKCgoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGli
L2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKCgoKIAoKCgoKCgoKCgoK
CiMgNzYgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCgoKCgogCgojIDY4MiAiL3Vzci9pbmNsdWRl
L3djaGFyLmgiIDMKCgoKIyAyOCAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKCgojIDEgIi91
c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoK
CgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUv
c3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2
LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoK
CgoKCgoKIAoKCgoKCiAKCiAKCiMgMTMxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45
NS40L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgoKIyAxODggIi91c3IvbGliL2djYy1saWIv
aTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCgojIDI2
OSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAz
CgoKCgojIDI4MyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0
ZGRlZi5oIiAzCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1
LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDMxICIv
dXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgoKIAoKCiAKZW51bQp7CiAgX19HQ09OVl9PSyA9IDAs
CiAgX19HQ09OVl9OT0NPTlYsCiAgX19HQ09OVl9OT0RCLAogIF9fR0NPTlZfTk9NRU0sCgogIF9f
R0NPTlZfRU1QVFlfSU5QVVQsCiAgX19HQ09OVl9GVUxMX09VVFBVVCwKICBfX0dDT05WX0lMTEVH
QUxfSU5QVVQsCiAgX19HQ09OVl9JTkNPTVBMRVRFX0lOUFVULAoKICBfX0dDT05WX0lMTEVHQUxf
REVTQ1JJUFRPUiwKICBfX0dDT05WX0lOVEVSTkFMX0VSUk9SCn07CgoKIAplbnVtCnsKICBfX0dD
T05WX0lTX0xBU1QgPSAweDAwMDEsCiAgX19HQ09OVl9JR05PUkVfRVJST1JTID0gMHgwMDAyCn07
CgoKIApzdHJ1Y3QgX19nY29udl9zdGVwOwpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGE7CnN0cnVj
dCBfX2djb252X2xvYWRlZF9vYmplY3Q7CnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGE7CgoKIAp0
eXBlZGVmIGludCAoKl9fZ2NvbnZfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLCBzdHJ1Y3Qg
X19nY29udl9zdGVwX2RhdGEgKiwKCQkJICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwgX19j
b25zdCB1bnNpZ25lZCBjaGFyICosCgkJCSAgICB1bnNpZ25lZCBjaGFyICoqLCBzaXplX3QgKiwg
aW50LCBpbnQpOwoKIAp0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5pdF9mY3QpIChzdHJ1Y3QgX19n
Y29udl9zdGVwICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X2VuZF9mY3QpIChzdHJ1Y3QgX19n
Y29udl9zdGVwICopOwoKCiAKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2ZjdCkgKHN0cnVj
dCBfX2djb252X3N0ZXAgKiwKCQkJCSAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosIHZvaWQg
KiwKCQkJCSAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCgkJCQkgIF9fY29uc3QgdW5zaWduZWQg
Y2hhciAqKiwKCQkJCSAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKios
CgkJCQkgIHNpemVfdCAqKTsKCiAKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2NvbnRleHRf
ZmN0KSAodm9pZCAqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKCQkJCQkgIF9fY29uc3QgdW5z
aWduZWQgY2hhciAqLAoJCQkJCSAgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICopOwoK
IAp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfcXVlcnlfZmN0KSAoX19jb25zdCBjaGFyICos
IF9fY29uc3QgY2hhciAqKiosCgkJCQkJc2l6ZV90ICopOwoKIAp0eXBlZGVmIGludCAoKl9fZ2Nv
bnZfdHJhbnNfaW5pdF9mY3QpICh2b2lkICoqLCBjb25zdCBjaGFyICopOwp0eXBlZGVmIHZvaWQg
KCpfX2djb252X3RyYW5zX2VuZF9mY3QpICh2b2lkICopOwoKc3RydWN0IF9fZ2NvbnZfdHJhbnNf
ZGF0YQp7CiAgIAogIF9fZ2NvbnZfdHJhbnNfZmN0IF9fdHJhbnNfZmN0OwogIF9fZ2NvbnZfdHJh
bnNfY29udGV4dF9mY3QgX190cmFuc19jb250ZXh0X2ZjdDsKICBfX2djb252X3RyYW5zX2VuZF9m
Y3QgX190cmFuc19lbmRfZmN0OwogIHZvaWQgKl9fZGF0YTsKICBzdHJ1Y3QgX19nY29udl90cmFu
c19kYXRhICpfX25leHQ7Cn07CgoKIApzdHJ1Y3QgX19nY29udl9zdGVwCnsKICBzdHJ1Y3QgX19n
Y29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hhbmRsZTsKICBfX2NvbnN0IGNoYXIgKl9fbW9k
bmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hhciAqX19mcm9tX25hbWU7CiAgY2hhciAqX190
b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsKICBfX2djb252X2luaXRfZmN0IF9faW5pdF9m
Y3Q7CiAgX19nY29udl9lbmRfZmN0IF9fZW5kX2ZjdDsKCiAgIAoKICBpbnQgX19taW5fbmVlZGVk
X2Zyb207CiAgaW50IF9fbWF4X25lZWRlZF9mcm9tOwogIGludCBfX21pbl9uZWVkZWRfdG87CiAg
aW50IF9fbWF4X25lZWRlZF90bzsKCiAgIAogIGludCBfX3N0YXRlZnVsOwoKICB2b2lkICpfX2Rh
dGE7CQkgCn07CgogCgpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEKewogIHVuc2lnbmVkIGNoYXIg
Kl9fb3V0YnVmOyAgICAgCiAgdW5zaWduZWQgY2hhciAqX19vdXRidWZlbmQ7ICAKCgogICAKICBp
bnQgX19mbGFnczsKCiAgIAoKICBpbnQgX19pbnZvY2F0aW9uX2NvdW50ZXI7CgogICAKCiAgaW50
IF9faW50ZXJuYWxfdXNlOwoKICBfX21ic3RhdGVfdCAqX19zdGF0ZXA7CiAgX19tYnN0YXRlX3Qg
X19zdGF0ZTsJIAoKCiAgIAogIHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9fdHJhbnM7Cn07
CgoKIAp0eXBlZGVmIHN0cnVjdCBfX2djb252X2luZm8KewogIHNpemVfdCBfX25zdGVwczsKICBz
dHJ1Y3QgX19nY29udl9zdGVwICpfX3N0ZXBzOwogIF9fZXh0ZW5zaW9uX18gc3RydWN0IF9fZ2Nv
bnZfc3RlcF9kYXRhIF9fZGF0YSBbMF0gOwp9ICpfX2djb252X3Q7CgoKIyA0NCAiL3Vzci9pbmNs
dWRlL19HX2NvbmZpZy5oIiAyIDMKCnR5cGVkZWYgdW5pb24KewogIHN0cnVjdCBfX2djb252X2lu
Zm8gX19jZDsKICBzdHJ1Y3QKICB7CiAgICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgICBz
dHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhOwogIH0gX19jb21iaW5lZDsKfSBfR19pY29u
dl90OwoKdHlwZWRlZiBpbnQgX0dfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9f
SElfXykpKTsKdHlwZWRlZiBpbnQgX0dfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18g
KF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3QgX19hdHRyaWJ1dGVf
XyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQzMl90
IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwoKCgoKIAoKCgoKCgoKCgoKCgoK
CgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKIyAzMiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIg
MwoKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4
LzIuOTUuNC9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgp0eXBlZGVmIHZv
aWQgKl9fZ251Y192YV9saXN0OwoKCgogCgojIDEyMiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxp
bnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGFyZy5oIiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyMDkg
Ii91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRhcmcuaCIgMwoK
CgoKIyA1MyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwoKCgoKCgoKIyA3MiAiL3Vzci9pbmNs
dWRlL2xpYmlvLmgiIDMKCgogCgoKCgoKCgoKCgoKCgoKCgoKIyAxMDMgIi91c3IvaW5jbHVkZS9s
aWJpby5oIiAzCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK
CgoKCgoKCgoKCgoKc3RydWN0IF9JT19qdW1wX3Q7ICBzdHJ1Y3QgX0lPX0ZJTEU7CgogCgoKCgoK
Cgp0eXBlZGVmIHZvaWQgX0lPX2xvY2tfdDsKCgoKIAoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0
cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwogICAKCiAg
IAogIGludCBfcG9zOwojIDE5MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKCn07CgogCmVudW0g
X19jb2RlY3Z0X3Jlc3VsdAp7CiAgX19jb2RlY3Z0X29rLAogIF9fY29kZWN2dF9wYXJ0aWFsLAog
IF9fY29kZWN2dF9lcnJvciwKICBfX2NvZGVjdnRfbm9jb252Cn07CgojIDI1OSAiL3Vzci9pbmNs
dWRlL2xpYmlvLmgiIDMKCgpzdHJ1Y3QgX0lPX0ZJTEUgewogIGludCBfZmxhZ3M7CQkgCgoKICAg
CiAgIAogIGNoYXIqIF9JT19yZWFkX3B0cjsJIAogIGNoYXIqIF9JT19yZWFkX2VuZDsJIAogIGNo
YXIqIF9JT19yZWFkX2Jhc2U7CSAKICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsJIAogIGNoYXIqIF9J
T193cml0ZV9wdHI7CSAKICBjaGFyKiBfSU9fd3JpdGVfZW5kOwkgCiAgY2hhciogX0lPX2J1Zl9i
YXNlOwkgCiAgY2hhciogX0lPX2J1Zl9lbmQ7CSAKICAgCiAgY2hhciAqX0lPX3NhdmVfYmFzZTsg
IAogIGNoYXIgKl9JT19iYWNrdXBfYmFzZTsgICAKICBjaGFyICpfSU9fc2F2ZV9lbmQ7ICAKCiAg
c3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsK
CiAgaW50IF9maWxlbm87CiAgaW50IF9ibGtzaXplOwogIF9fb2ZmX3QgICBfb2xkX29mZnNldDsg
IAoKCiAgIAogIHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1uOwogIHNpZ25lZCBjaGFyIF92dGFi
bGVfb2Zmc2V0OwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKICAgCgogIF9JT19sb2NrX3QgKl9sb2Nr
OwoKCgoKCgoKCiAgX19vZmY2NF90ICAgX29mZnNldDsKCgoKCgogIHZvaWQgKl9fcGFkMTsKICB2
b2lkICpfX3BhZDI7CgogIGludCBfbW9kZTsKICAgCiAgY2hhciBfdW51c2VkMlsxNSAqIHNpemVv
ZiAoaW50KSAtIDIgKiBzaXplb2YgKHZvaWQgKildOwoKfTsKCgoKCgpzdHJ1Y3QgX0lPX0ZJTEVf
cGx1czsKCmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJu
IHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9f
RklMRV9wbHVzIF9JT18yXzFfc3RkZXJyXzsKCgoKCgoKCgoKCgogCgogCgp0eXBlZGVmIF9fc3Np
emVfdCBfX2lvX3JlYWRfZm4gKHZvaWQgKl9fY29va2llLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9f
bmJ5dGVzKTsKCiAKCgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dyaXRlX2ZuICh2b2lkICpf
X2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKCQkJCSBzaXplX3QgX19uKTsKCiAKCgoKCgp0
eXBlZGVmIGludCBfX2lvX3NlZWtfZm4gKHZvaWQgKl9fY29va2llLCBfX29mZjY0X3QgICAqX19w
b3MsIGludCBfX3cpOwoKIAp0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2b2lkICpfX2Nvb2tp
ZSk7CgoKIyAzODkgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCgoKCgpleHRlcm4gIkMiIHsKCgpl
eHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKSA7CmV4dGVybiBpbnQg
X191ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCkgOwpleHRlcm4gaW50IF9fb3ZlcmZsb3cgKF9J
T19GSUxFICosIGludCkgdGhyb3cgKCkgOwpleHRlcm4gd2ludF90ICAgX193dW5kZXJmbG93IChf
SU9fRklMRSAqKSB0aHJvdyAoKSA7CmV4dGVybiB3aW50X3QgICBfX3d1ZmxvdyAoX0lPX0ZJTEUg
KikgdGhyb3cgKCkgOwpleHRlcm4gd2ludF90ICAgX193b3ZlcmZsb3cgKF9JT19GSUxFICosIHdp
bnRfdCAgKSB0aHJvdyAoKSA7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiBpbnQgX0lP
X2dldGMgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKSA7CmV4dGVybiBpbnQgX0lPX3B1dGMgKGlu
dCBfX2MsIF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKSA7CmV4dGVybiBpbnQgX0lPX2Zlb2YgKF9J
T19GSUxFICpfX2ZwKSB0aHJvdyAoKSA7CmV4dGVybiBpbnQgX0lPX2ZlcnJvciAoX0lPX0ZJTEUg
Kl9fZnApIHRocm93ICgpIDsKCmV4dGVybiBpbnQgX0lPX3BlZWtjX2xvY2tlZCAoX0lPX0ZJTEUg
Kl9fZnApIHRocm93ICgpIDsKCiAKCgoKZXh0ZXJuIHZvaWQgX0lPX2Zsb2NrZmlsZSAoX0lPX0ZJ
TEUgKikgdGhyb3cgKCkgOwpleHRlcm4gdm9pZCBfSU9fZnVubG9ja2ZpbGUgKF9JT19GSUxFICop
IHRocm93ICgpIDsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJv
dyAoKSA7CgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gaW50IF9JT192ZnNjYW5mIChfSU9fRklMRSAq
IF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LAoJCQlfX2dudWNfdmFfbGlzdCAs
IGludCAqX19yZXN0cmljdCkgdGhyb3cgKCkgOwpleHRlcm4gaW50IF9JT192ZnByaW50ZiAoX0lP
X0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsCgkJCSBfX2dudWNfdmFf
bGlzdCApIHRocm93ICgpIDsKZXh0ZXJuIF9fc3NpemVfdCAgIF9JT19wYWRuIChfSU9fRklMRSAq
LCBpbnQsIF9fc3NpemVfdCAgKSB0aHJvdyAoKSA7CmV4dGVybiBzaXplX3QgICBfSU9fc2dldG4g
KF9JT19GSUxFICosIHZvaWQgKiwgc2l6ZV90ICApIHRocm93ICgpIDsKCmV4dGVybiBfX29mZjY0
X3QgICBfSU9fc2Vla29mZiAoX0lPX0ZJTEUgKiwgX19vZmY2NF90ICAsIGludCwgaW50KSB0aHJv
dyAoKSA7CmV4dGVybiBfX29mZjY0X3QgICBfSU9fc2Vla3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2
NF90ICAsIGludCkgdGhyb3cgKCkgOwoKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEg
KF9JT19GSUxFICopIHRocm93ICgpIDsKCiMgNTExICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwoK
Cgp9CgoKCiMgNjUgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgojIDc2ICIvdXNyL2luY2x1
ZGUvc3RkaW8uaCIgMwoKCiAKCnR5cGVkZWYgX0dfZnBvc190IGZwb3NfdDsKCgoKCgoKCiAKCgoK
CgogCgoKCgoKIAoKCgoKCgogCgoKCgoKCgogCgoKCgogCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy9zdGRpb19saW0uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCiMgMTI5ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCiAKZXh0ZXJuIEZJ
TEUgKnN0ZGluOwkJIApleHRlcm4gRklMRSAqc3Rkb3V0OwkJIApleHRlcm4gRklMRSAqc3RkZXJy
OwkJIAogCgoKCgogCmV4dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUp
IHRocm93ICgpIDsKIApleHRlcm4gaW50IHJlbmFtZSAoX19jb25zdCBjaGFyICpfX29sZCwgX19j
b25zdCBjaGFyICpfX25ldykgdGhyb3cgKCkgOwoKCiAKCmV4dGVybiBGSUxFICp0bXBmaWxlICh2
b2lkKSB0aHJvdyAoKSA7CgoKCgoKCgoKCgogCmV4dGVybiBjaGFyICp0bXBuYW0gKGNoYXIgKl9f
cykgdGhyb3cgKCkgOwoKCiAKCmV4dGVybiBjaGFyICp0bXBuYW1fciAoY2hhciAqX19zKSB0aHJv
dyAoKSA7CgoKCgogCgoKCgoKCmV4dGVybiBjaGFyICp0ZW1wbmFtIChfX2NvbnN0IGNoYXIgKl9f
ZGlyLCBfX2NvbnN0IGNoYXIgKl9fcGZ4KQogICAgIHRocm93ICgpICAgOwoKCgogCmV4dGVybiBp
bnQgZmNsb3NlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwogCmV4dGVybiBpbnQgZmZsdXNo
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwoKCiAKZXh0ZXJuIGludCBmZmx1c2hfdW5sb2Nr
ZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CgoKCgoKCgoKCiAKZXh0ZXJuIEZJTEUgKmZv
cGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKCQkgICAgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgpIDsKIApleHRlcm4gRklMRSAqZnJlb3Bl
biAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCgkJICAgICAgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCgkJICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVh
bSkgdGhyb3cgKCkgOwojIDIyMCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKCgoKCgoKCiAK
ZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhy
b3cgKCkgOwoKCiMgMjQ5ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwoKCgogCgpleHRlcm4gdm9p
ZCBzZXRidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19i
dWYpIHRocm93ICgpIDsKIAoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBf
X3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKCQkgICAgaW50IF9fbW9kZXMsIHNpemVf
dCBfX24pIHRocm93ICgpIDsKCgogCgpleHRlcm4gdm9pZCBzZXRidWZmZXIgKEZJTEUgKl9fcmVz
dHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCgkJICAgICAgIHNpemVfdCBf
X3NpemUpIHRocm93ICgpIDsKCiAKZXh0ZXJuIHZvaWQgc2V0bGluZWJ1ZiAoRklMRSAqX19zdHJl
YW0pIHRocm93ICgpIDsKCgoKIApleHRlcm4gaW50IGZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3Qg
X19zdHJlYW0sCgkJICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0
aHJvdyAoKSA7CiAKZXh0ZXJuIGludCBwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2Zvcm1hdCwgLi4uKSB0aHJvdyAoKSA7CiAKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICpfX3Jl
c3RyaWN0IF9fcywKCQkgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4p
IHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3Ms
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKCQkgICAgIF9fZ251Y192YV9saXN0
ICBfX2FyZykgdGhyb3cgKCkgOwogCmV4dGVybiBpbnQgdnByaW50ZiAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCAgX19hcmcpCiAgICAgdGhyb3cgKCkg
OwogCmV4dGVybiBpbnQgdnNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCgkJICAgICBfX2dudWNfdmFfbGlzdCAgX19hcmcpIHRo
cm93ICgpIDsKCgogCmV4dGVybiBpbnQgc25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBz
aXplX3QgX19tYXhsZW4sCgkJICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs
IC4uLikKICAgICB0aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRm
X18sIDMsIDQpKSk7CgpleHRlcm4gaW50IHZzbnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3Ms
IHNpemVfdCBfX21heGxlbiwKCQkgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3Jt
YXQsIF9fZ251Y192YV9saXN0ICBfX2FyZykKICAgICB0aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAo
KF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7CgoKIyAzMjEgIi91c3IvaW5jbHVkZS9z
dGRpby5oIiAzCgoKCiAKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl
YW0sCgkJICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgp
IDsKIApleHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs
IC4uLikgdGhyb3cgKCkgOwogCmV4dGVybiBpbnQgc3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19zLAoJCSAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0
aHJvdyAoKSA7CgojIDM0NyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKIApleHRlcm4gaW50
IGZnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwpleHRlcm4gaW50IGdldGMgKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgZ2V0Y2hhciAodm9pZCkgdGhyb3cg
KCkgOwoKIAoKCgoKIApleHRlcm4gaW50IGdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKSA7CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkgdGhyb3cgKCkgOwoK
CgogCmV4dGVybiBpbnQgZmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7
CgoKCiAKZXh0ZXJuIGludCBmcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgp
IDsKZXh0ZXJuIGludCBwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwoK
IApleHRlcm4gaW50IHB1dGNoYXIgKGludCBfX2MpIHRocm93ICgpIDsKCiAKCgoKCiAKZXh0ZXJu
IGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpIDsK
CgoKIApleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKSA7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgdGhyb3cgKCkg
OwoKCgoKIApleHRlcm4gaW50IGdldHcgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CgogCmV4
dGVybiBpbnQgcHV0dyAoaW50IF9fdywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpIDsKCgoKIApl
eHRlcm4gY2hhciAqZmdldHMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLCBGSUxFICpf
X3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpIDsKCgoKCgoKCiAKCmV4dGVybiBjaGFy
ICpnZXRzIChjaGFyICpfX3MpIHRocm93ICgpIDsKCgojIDQzNyAiL3Vzci9pbmNsdWRlL3N0ZGlv
LmgiIDMKCgoKIApleHRlcm4gaW50IGZwdXRzIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19z
LCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpIDsKCgoKCgoKCiAKZXh0
ZXJuIGludCBwdXRzIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgOwoKCiAKZXh0ZXJuIGlu
dCB1bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CgoKIApleHRlcm4g
c2l6ZV90IGZyZWFkICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAoJCSAg
ICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCkgOwogCmV4
dGVybiBzaXplX3QgZndyaXRlIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVf
dCBfX3NpemUsCgkJICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3MpIHRocm93
ICgpIDsKCgogCmV4dGVybiBzaXplX3QgZnJlYWRfdW5sb2NrZWQgKHZvaWQgKl9fcmVzdHJpY3Qg
X19wdHIsIHNpemVfdCBfX3NpemUsCgkJCSAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJp
Y3QgX19zdHJlYW0pIHRocm93ICgpIDsKZXh0ZXJuIHNpemVfdCBmd3JpdGVfdW5sb2NrZWQgKF9f
Y29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKCQkJICAgICAgIHNp
emVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpIDsKCgoKIApleHRl
cm4gaW50IGZzZWVrIChGSUxFICpfX3N0cmVhbSwgbG9uZyBpbnQgX19vZmYsIGludCBfX3doZW5j
ZSkgdGhyb3cgKCkgOwogCmV4dGVybiBsb25nIGludCBmdGVsbCAoRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpIDsKIApleHRlcm4gdm9pZCByZXdpbmQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7
CgogCgoKCgoKCgoKCgoKCiAKZXh0ZXJuIGludCBmZ2V0cG9zIChGSUxFICpfX3Jlc3RyaWN0IF9f
c3RyZWFtLCBmcG9zX3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgdGhyb3cgKCkgOwogCmV4dGVy
biBpbnQgZnNldHBvcyAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvc190ICpfX3BvcykgdGhy
b3cgKCkgOwojIDUyMCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKCgoKCgoKCiAKZXh0ZXJu
IHZvaWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CiAKZXh0ZXJuIGludCBm
ZW9mIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwogCmV4dGVybiBpbnQgZmVycm9yIChGSUxF
ICpfX3N0cmVhbSkgdGhyb3cgKCkgOwoKCiAKZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQg
KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CmV4dGVybiBpbnQgZmVvZl91bmxvY2tlZCAoRklM
RSAqX19zdHJlYW0pIHRocm93ICgpIDsKZXh0ZXJuIGludCBmZXJyb3JfdW5sb2NrZWQgKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKSA7CgoKCiAKZXh0ZXJuIHZvaWQgcGVycm9yIChfX2NvbnN0IGNo
YXIgKl9fcykgdGhyb3cgKCkgOwoKIAoKCmV4dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBfX2Nv
bnN0IGNoYXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsKCgoKCgoKCgogCmV4dGVybiBpbnQgZmls
ZW5vIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwoKCgogCmV4dGVybiBpbnQgZmlsZW5vX3Vu
bG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwoKCgoKCiAKZXh0ZXJuIEZJTEUgKnBv
cGVuIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJv
dyAoKSA7CgogCmV4dGVybiBpbnQgcGNsb3NlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwoK
CgoKIApleHRlcm4gY2hhciAqY3Rlcm1pZCAoY2hhciAqX19zKSB0aHJvdyAoKSA7CgoKCgoKCgoK
CiMgNjAyICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwoKCgoKIAoKIApleHRlcm4gdm9pZCBmbG9j
a2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CgogCgpleHRlcm4gaW50IGZ0cnlsb2Nr
ZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpIDsKCiAKZXh0ZXJuIHZvaWQgZnVubG9ja2Zp
bGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CgoKCgoKCgoKCgogCgoKCgoKfSAKCgoKCiMg
MTcgIkFDRVBhcmFtcy5oIiAyCgojIDEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDEgMwogCgoKCgoK
CgoKCgoKCgoKCgoKCiAKCgoKCgoKCgpleHRlcm4gIkMiIHsgCgogCgojIDEgIi91c3IvaW5jbHVk
ZS9iaXRzL2h1Z2VfdmFsLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK
CgoKCgoKCgoKCgoKIAoKIyA4MSAiL3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92YWwuaCIgMwoKIyAz
MyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCgoKIAoKCgogCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvbWF0aGRlZi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDQxICIvdXNyL2luY2x1
ZGUvYml0cy9tYXRoZGVmLmgiIDMKCiMgNDAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKCgog
CgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAx
IDMKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAK
CiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGFjb3MgICAgICAgICAgKGRvdWJsZSAgX194KSAg
ICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2Fjb3MgICAgICAgICAgKGRv
dWJsZSAgX194KSAgICB0aHJvdyAoKSAgICA7CiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGFz
aW4gICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUg
ICAgICAgICBfX2FzaW4gICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgICA7CiAK
ZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGF0YW4gICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0
aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2F0YW4gICAgICAgICAgKGRvdWJs
ZSAgX194KSAgICB0aHJvdyAoKSAgICA7CiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGF0YW4y
ICAgICAgICAgIChkb3VibGUgIF9feSwgZG91YmxlICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVy
biAgIGRvdWJsZSAgICAgICAgIF9fYXRhbjIgICAgICAgICAgKGRvdWJsZSAgX195LCBkb3VibGUg
IF9feCkgICAgdGhyb3cgKCkgICAgOwoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgY29zICAg
ICAgICAgIChkb3VibGUgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAg
ICAgX19jb3MgICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgICA7CiAKZXh0ZXJu
ICAgZG91YmxlICAgICAgICAgIHNpbiAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgp
ICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fc2luICAgICAgICAgIChkb3VibGUgIF9feCkg
ICAgdGhyb3cgKCkgICAgOwogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICB0YW4gICAgICAgICAg
KGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX3Rh
biAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICAgIDsKCgoKCgoKCiAKCiAKZXh0
ZXJuICAgZG91YmxlICAgICAgICAgIGNvc2ggICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJv
dyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2Nvc2ggICAgICAgICAgKGRvdWJsZSAg
X194KSAgICB0aHJvdyAoKSAgICA7CiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIHNpbmggICAg
ICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAg
ICBfX3NpbmggICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgICA7CiAKZXh0ZXJu
ICAgZG91YmxlICAgICAgICAgIHRhbmggICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAo
KSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX3RhbmggICAgICAgICAgKGRvdWJsZSAgX194
KSAgICB0aHJvdyAoKSAgICA7CgoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgYWNvc2ggICAg
ICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAg
ICBfX2Fjb3NoICAgICAgICAgIChkb3VibGUgIF9feCkgICAgdGhyb3cgKCkgICAgOwogCmV4dGVy
biAgIGRvdWJsZSAgICAgICAgICBhc2luaCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93
ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fYXNpbmggICAgICAgICAgKGRvdWJsZSAg
X194KSAgICB0aHJvdyAoKSAgICA7CiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGF0YW5oICAg
ICAgICAgIChkb3VibGUgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAg
ICAgX19hdGFuaCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICAgIDsKCgogCgog
CmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBleHAgICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0
aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2V4cCAgICAgICAgICAoZG91Ymxl
ICBfX3gpICAgIHRocm93ICgpICAgIDsKCgoKCgoKCgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAg
ICBmcmV4cCAgICAgICAgICAoZG91YmxlICBfX3gsIGludCAqX19leHBvbmVudCkgICAgdGhyb3cg
KCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19mcmV4cCAgICAgICAgICAoZG91YmxlICBf
X3gsIGludCAqX19leHBvbmVudCkgICAgdGhyb3cgKCkgICAgOwoKIApleHRlcm4gICBkb3VibGUg
ICAgICAgICAgbGRleHAgICAgICAgICAgKGRvdWJsZSAgX194LCBpbnQgX19leHBvbmVudCkgICAg
dGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19sZGV4cCAgICAgICAgICAoZG91
YmxlICBfX3gsIGludCBfX2V4cG9uZW50KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGRv
dWJsZSAgICAgICAgICBsb2cgICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgOyBl
eHRlcm4gICBkb3VibGUgICAgICAgICBfX2xvZyAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRo
cm93ICgpICAgIDsKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGxvZzEwICAgICAgICAgIChk
b3VibGUgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19sb2cx
MCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICAgIDsKCiAKZXh0ZXJuICAgZG91
YmxlICAgICAgICAgIG1vZGYgICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgICpfX2lwdHIp
ICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fbW9kZiAgICAgICAgICAo
ZG91YmxlICBfX3gsIGRvdWJsZSAgKl9faXB0cikgICAgdGhyb3cgKCkgICAgOwoKCiAKZXh0ZXJu
ICAgZG91YmxlICAgICAgICAgIGV4cG0xICAgICAgICAgIChkb3VibGUgIF9feCkgICAgdGhyb3cg
KCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19leHBtMSAgICAgICAgICAoZG91YmxlICBf
X3gpICAgIHRocm93ICgpICAgIDsKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGxvZzFwICAg
ICAgICAgIChkb3VibGUgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAg
ICAgX19sb2cxcCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICAgIDsKCiAKZXh0
ZXJuICAgZG91YmxlICAgICAgICAgIGxvZ2IgICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJv
dyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2xvZ2IgICAgICAgICAgKGRvdWJsZSAg
X194KSAgICB0aHJvdyAoKSAgICA7CgoKCgoKCgoKCgoKIAoKIApleHRlcm4gICBkb3VibGUgICAg
ICAgICAgcG93ICAgICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICBfX3kpICAgIHRocm93ICgp
ICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fcG93ICAgICAgICAgIChkb3VibGUgIF9feCwg
ZG91YmxlICBfX3kpICAgIHRocm93ICgpICAgIDsKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAg
IHNxcnQgICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3Vi
bGUgICAgICAgICBfX3NxcnQgICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgICA7
CgoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgaHlwb3QgICAgICAgICAgKGRvdWJsZSAgX194
LCBkb3VibGUgIF9feSkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19o
eXBvdCAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJsZSAgX195KSAgICB0aHJvdyAoKSAgICA7
CgoKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGNicnQgICAgICAgICAgKGRvdWJsZSAgX194
KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2NicnQgICAgICAgICAg
KGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgICA7CgoKCiAKCiAKZXh0ZXJuICAgZG91YmxlICAg
ICAgICAgIGNlaWwgICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4g
ICBkb3VibGUgICAgICAgICBfX2NlaWwgICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAo
KSAgICA7CgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBmYWJzICAgICAgICAgIChkb3VibGUg
IF9feCkgICAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICk7IGV4
dGVybiAgIGRvdWJsZSAgICAgICAgIF9fZmFicyAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRo
cm93ICgpICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApICA7CgogCmV4dGVybiAg
IGRvdWJsZSAgICAgICAgICBmbG9vciAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgp
ICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fZmxvb3IgICAgICAgICAgKGRvdWJsZSAgX194
KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBmbW9kICAgICAg
ICAgIChkb3VibGUgIF9feCwgZG91YmxlICBfX3kpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRv
dWJsZSAgICAgICAgIF9fZm1vZCAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJsZSAgX195KSAg
ICB0aHJvdyAoKSAgICA7CgoKIAoKZXh0ZXJuICBpbnQgICAgIF9faXNpbmYgICAgICAoZG91Ymxl
ICBfX3ZhbHVlKSAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgogCmV4
dGVybiAgaW50ICAgICBfX2Zpbml0ZSAgICAgIChkb3VibGUgIF9fdmFsdWUpICB0aHJvdyAoKSAg
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgogCgpleHRlcm4gIGludCAgICAgaXNpbmYg
ICAgICAoZG91YmxlICBfX3ZhbHVlKSAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgogCmV4dGVybiAgaW50ICAgICBmaW5pdGUgICAgICAoZG91YmxlICBfX3ZhbHVlKSAg
dGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgogCmV4dGVybiAgIGRvdWJs
ZSAgICAgICAgICBkcmVtICAgICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICBfX3kpICAgIHRo
cm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fZHJlbSAgICAgICAgICAoZG91Ymxl
ICBfX3gsIGRvdWJsZSAgX195KSAgICB0aHJvdyAoKSAgICA7CgoKIApleHRlcm4gICBkb3VibGUg
ICAgICAgICAgc2lnbmlmaWNhbmQgICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAg
OyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX3NpZ25pZmljYW5kICAgICAgICAgIChkb3VibGUg
IF9feCkgICAgdGhyb3cgKCkgICAgOwoKCgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBjb3B5
c2lnbiAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJsZSAgX195KSAgICB0aHJvdyAoKSAgIF9f
YXR0cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKTsgZXh0ZXJuICAgZG91YmxlICAgICAgICAg
X19jb3B5c2lnbiAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJsZSAgX195KSAgICB0aHJvdyAo
KSAgIF9fYXR0cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKSAgOwoKCgoKCgoKCiAKZXh0ZXJu
ICBpbnQgICAgIF9faXNuYW4gICAgICAoZG91YmxlICBfX3ZhbHVlKSAgdGhyb3cgKCkgICBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKIApleHRlcm4gIGludCAgICAgaXNuYW4gICAgICAo
ZG91YmxlICBfX3ZhbHVlKSAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBqMCAgICAgICAgICAoZG91YmxlICkgICAgdGhy
b3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19qMCAgICAgICAgICAoZG91YmxlICkg
ICAgdGhyb3cgKCkgICAgOwpleHRlcm4gICBkb3VibGUgICAgICAgICAgajEgICAgICAgICAgKGRv
dWJsZSApICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fajEgICAgICAg
ICAgKGRvdWJsZSApICAgIHRocm93ICgpICAgIDsKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGpu
ICAgICAgICAgIChpbnQsIGRvdWJsZSApICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAg
ICAgICAgIF9fam4gICAgICAgICAgKGludCwgZG91YmxlICkgICAgdGhyb3cgKCkgICAgOwpleHRl
cm4gICBkb3VibGUgICAgICAgICAgeTAgICAgICAgICAgKGRvdWJsZSApICAgIHRocm93ICgpICA7
IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9feTAgICAgICAgICAgKGRvdWJsZSApICAgIHRocm93
ICgpICAgIDsKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIHkxICAgICAgICAgIChkb3VibGUgKSAg
ICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX3kxICAgICAgICAgIChkb3Vi
bGUgKSAgICB0aHJvdyAoKSAgICA7CmV4dGVybiAgIGRvdWJsZSAgICAgICAgICB5biAgICAgICAg
ICAoaW50LCBkb3VibGUgKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBf
X3luICAgICAgICAgIChpbnQsIGRvdWJsZSApICAgIHRocm93ICgpICAgIDsKCgoKCiAKZXh0ZXJu
ICAgZG91YmxlICAgICAgICAgIGVyZiAgICAgICAgICAoZG91YmxlICkgICAgdGhyb3cgKCkgIDsg
ZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19lcmYgICAgICAgICAgKGRvdWJsZSApICAgIHRocm93
ICgpICAgIDsKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGVyZmMgICAgICAgICAgKGRvdWJsZSAp
ICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fZXJmYyAgICAgICAgICAo
ZG91YmxlICkgICAgdGhyb3cgKCkgICAgOwpleHRlcm4gICBkb3VibGUgICAgICAgICAgbGdhbW1h
ICAgICAgICAgIChkb3VibGUgKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAg
ICBfX2xnYW1tYSAgICAgICAgICAoZG91YmxlICkgICAgdGhyb3cgKCkgICAgOwoKCgoKCgoKIApl
eHRlcm4gICBkb3VibGUgICAgICAgICAgZ2FtbWEgICAgICAgICAgKGRvdWJsZSApICAgIHRocm93
ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fZ2FtbWEgICAgICAgICAgKGRvdWJsZSAp
ICAgIHRocm93ICgpICAgIDsKCgoKIAoKCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBsZ2FtbWFf
ciAgICAgICAgICAgICAgKGRvdWJsZSAsIGludCAqX19zaWduZ2FtcCkgICAgdGhyb3cgKCkgIDsg
ZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19sZ2FtbWFfciAgICAgICAgICAgICAgKGRvdWJsZSAs
IGludCAqX19zaWduZ2FtcCkgICAgdGhyb3cgKCkgICAgOwoKCgoKIAoKZXh0ZXJuICAgZG91Ymxl
ICAgICAgICAgIHJpbnQgICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgOyBleHRl
cm4gICBkb3VibGUgICAgICAgICBfX3JpbnQgICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJv
dyAoKSAgICA7CgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBuZXh0YWZ0ZXIgICAgICAgICAg
KGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkgICAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICgg
ICAgKF9fY29uc3RfXykgICk7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fbmV4dGFmdGVyICAg
ICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICBfX3kpICAgIHRocm93ICgpICAgX19hdHRyaWJ1
dGVfXyAoICAgIChfX2NvbnN0X18pICApICA7CgoKCgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAg
ICByZW1haW5kZXIgICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkgICAgdGhyb3cg
KCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19yZW1haW5kZXIgICAgICAgICAgKGRvdWJs
ZSAgX194LCBkb3VibGUgIF9feSkgICAgdGhyb3cgKCkgICAgOwoKCiAKZXh0ZXJuICAgZG91Ymxl
ICAgICAgICAgIHNjYWxiICAgICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICBfX24pICAgIHRo
cm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fc2NhbGIgICAgICAgICAgKGRvdWJs
ZSAgX194LCBkb3VibGUgIF9fbikgICAgdGhyb3cgKCkgICAgOwoKCgogCmV4dGVybiAgIGRvdWJs
ZSAgICAgICAgICBzY2FsYm4gICAgICAgICAgKGRvdWJsZSAgX194LCBpbnQgX19uKSAgICB0aHJv
dyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX3NjYWxibiAgICAgICAgICAoZG91Ymxl
ICBfX3gsIGludCBfX24pICAgIHRocm93ICgpICAgIDsKCgogCmV4dGVybiAgIGludCAgICAgICAg
aWxvZ2IgICAgICAgIChkb3VibGUgIF9feCkgICB0aHJvdyAoKSAgOyBleHRlcm4gICBpbnQgICAg
ICAgIF9faWxvZ2IgICAgICAgIChkb3VibGUgIF9feCkgICB0aHJvdyAoKSAgIDsKCgojIDMzMyAi
L3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKCiMgNjMgIi91c3IvaW5jbHVkZS9tYXRo
LmgiIDIgMwoKCgoKCgoKIAoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNh
bGxzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKIAoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBhY29zZiAgICAgICAgIChmbG9hdCAg
IF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2Fjb3NmICAgICAg
ICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgICA7CiAKZXh0ZXJuICAgZmxvYXQgICAgICAg
ICAgYXNpbmYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZs
b2F0ICAgICAgICAgX19hc2luZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgICAg
OwogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGF0YW5mICAgICAgICAgKGZsb2F0ICAgX194KSAg
ICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fYXRhbmYgICAgICAgICAoZmxv
YXQgICBfX3gpICAgIHRocm93ICgpICAgIDsKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBhdGFu
MmYgICAgICAgICAoZmxvYXQgICBfX3ksIGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRl
cm4gICBmbG9hdCAgICAgICAgIF9fYXRhbjJmICAgICAgICAgKGZsb2F0ICAgX195LCBmbG9hdCAg
IF9feCkgICAgdGhyb3cgKCkgICAgOwoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBjb3NmICAg
ICAgICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAg
IF9fY29zZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgICAgOwogCmV4dGVybiAg
IGZsb2F0ICAgICAgICAgIHNpbmYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICA7
IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19zaW5mICAgICAgICAgKGZsb2F0ICAgX194KSAgICB0
aHJvdyAoKSAgICA7CiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgdGFuZiAgICAgICAgIChmbG9h
dCAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX3RhbmYgICAg
ICAgICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICAgIDsKCgoKCgoKCiAKCiAKZXh0ZXJuICAg
ZmxvYXQgICAgICAgICAgY29zaGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICA7
IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19jb3NoZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAg
dGhyb3cgKCkgICAgOwogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIHNpbmhmICAgICAgICAgKGZs
b2F0ICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fc2luaGYg
ICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICAgIDsKIApleHRlcm4gICBmbG9hdCAg
ICAgICAgICB0YW5oZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJu
ICAgZmxvYXQgICAgICAgICBfX3RhbmhmICAgICAgICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAo
KSAgICA7CgoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBhY29zaGYgICAgICAgICAoZmxvYXQg
ICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19hY29zaGYgICAg
ICAgICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICAgIDsKIApleHRlcm4gICBmbG9hdCAgICAg
ICAgICBhc2luaGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAg
IGZsb2F0ICAgICAgICAgX19hc2luaGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgp
ICAgIDsKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBhdGFuaGYgICAgICAgICAoZmxvYXQgICBf
X3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19hdGFuaGYgICAgICAg
ICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICAgIDsKCgogCgogCmV4dGVybiAgIGZsb2F0ICAg
ICAgICAgIGV4cGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAg
IGZsb2F0ICAgICAgICAgX19leHBmICAgICAgICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAg
ICA7CgoKCgoKCgoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBmcmV4cGYgICAgICAgICAoZmxv
YXQgICBfX3gsIGludCAqX19leHBvbmVudCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQg
ICAgICAgICBfX2ZyZXhwZiAgICAgICAgIChmbG9hdCAgIF9feCwgaW50ICpfX2V4cG9uZW50KSAg
ICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGxkZXhwZiAgICAgICAg
IChmbG9hdCAgIF9feCwgaW50IF9fZXhwb25lbnQpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZs
b2F0ICAgICAgICAgX19sZGV4cGYgICAgICAgICAoZmxvYXQgICBfX3gsIGludCBfX2V4cG9uZW50
KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGxvZ2YgICAgICAg
ICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19s
b2dmICAgICAgICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGZs
b2F0ICAgICAgICAgIGxvZzEwZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgIDsg
ZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2xvZzEwZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAg
dGhyb3cgKCkgICAgOwoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBtb2RmZiAgICAgICAgIChm
bG9hdCAgIF9feCwgZmxvYXQgICAqX19pcHRyKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9h
dCAgICAgICAgIF9fbW9kZmYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgKl9faXB0cikg
ICAgdGhyb3cgKCkgICAgOwoKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgZXhwbTFmICAgICAg
ICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9f
ZXhwbTFmICAgICAgICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAg
IGZsb2F0ICAgICAgICAgIGxvZzFwZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkg
IDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2xvZzFwZiAgICAgICAgIChmbG9hdCAgIF9feCkg
ICAgdGhyb3cgKCkgICAgOwoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBsb2diZiAgICAgICAg
IChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2xv
Z2JmICAgICAgICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgICA7CgoKCgoKCgoKCgoKIAoK
IApleHRlcm4gICBmbG9hdCAgICAgICAgICBwb3dmICAgICAgICAgKGZsb2F0ICAgX194LCBmbG9h
dCAgIF9feSkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX3Bvd2YgICAg
ICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVy
biAgIGZsb2F0ICAgICAgICAgIHNxcnRmICAgICAgICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAo
KSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fc3FydGYgICAgICAgICAoZmxvYXQgICBfX3gp
ICAgIHRocm93ICgpICAgIDsKCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGh5cG90ZiAgICAg
ICAgIChmbG9hdCAgIF9feCwgZmxvYXQgICBfX3kpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZs
b2F0ICAgICAgICAgX19oeXBvdGYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195KSAg
ICB0aHJvdyAoKSAgICA7CgoKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgY2JydGYgICAgICAg
ICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19j
YnJ0ZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgICAgOwoKCgogCgogCmV4dGVy
biAgIGZsb2F0ICAgICAgICAgIGNlaWxmICAgICAgICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAo
KSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fY2VpbGYgICAgICAgICAoZmxvYXQgICBfX3gp
ICAgIHRocm93ICgpICAgIDsKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgZmFic2YgICAgICAg
ICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0
X18pICApOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fZmFic2YgICAgICAgICAoZmxvYXQgICBf
X3gpICAgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApICA7Cgog
CmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGZsb29yZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAg
dGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2Zsb29yZiAgICAgICAgIChmbG9h
dCAgIF9feCkgICAgdGhyb3cgKCkgICAgOwoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBmbW9k
ZiAgICAgICAgIChmbG9hdCAgIF9feCwgZmxvYXQgICBfX3kpICAgIHRocm93ICgpICA7IGV4dGVy
biAgIGZsb2F0ICAgICAgICAgX19mbW9kZiAgICAgICAgIChmbG9hdCAgIF9feCwgZmxvYXQgICBf
X3kpICAgIHRocm93ICgpICAgIDsKCgogCgpleHRlcm4gIGludCAgICBfX2lzaW5mZiAgICAgKGZs
b2F0ICAgX192YWx1ZSkgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
IApleHRlcm4gIGludCAgICBfX2Zpbml0ZWYgICAgIChmbG9hdCAgIF9fdmFsdWUpICB0aHJvdyAo
KSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgogCgpleHRlcm4gIGludCAgICBpc2lu
ZmYgICAgIChmbG9hdCAgIF9fdmFsdWUpICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsKCiAKZXh0ZXJuICBpbnQgICAgZmluaXRlZiAgICAgKGZsb2F0ICAgX192YWx1ZSkg
IHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIApleHRlcm4gICBmbG9h
dCAgICAgICAgICBkcmVtZiAgICAgICAgIChmbG9hdCAgIF9feCwgZmxvYXQgICBfX3kpICAgIHRo
cm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19kcmVtZiAgICAgICAgIChmbG9hdCAg
IF9feCwgZmxvYXQgICBfX3kpICAgIHRocm93ICgpICAgIDsKCgogCmV4dGVybiAgIGZsb2F0ICAg
ICAgICAgIHNpZ25pZmljYW5kZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgIDsg
ZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX3NpZ25pZmljYW5kZiAgICAgICAgIChmbG9hdCAgIF9f
eCkgICAgdGhyb3cgKCkgICAgOwoKCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGNvcHlzaWdu
ZiAgICAgICAgIChmbG9hdCAgIF9feCwgZmxvYXQgICBfX3kpICAgIHRocm93ICgpICAgX19hdHRy
aWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fY29w
eXNpZ25mICAgICAgICAgKGZsb2F0ICAgX194LCBmbG9hdCAgIF9feSkgICAgdGhyb3cgKCkgICBf
X2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICkgIDsKCgoKCgoKCgogCmV4dGVybiAgaW50
ICAgIF9faXNuYW5mICAgICAoZmxvYXQgICBfX3ZhbHVlKSAgdGhyb3cgKCkgICBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7CgoKIApleHRlcm4gIGludCAgICBpc25hbmYgICAgIChmbG9hdCAg
IF9fdmFsdWUpICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCiAKZXh0
ZXJuICAgZmxvYXQgICAgICAgICAgajBmICAgICAgICAgKGZsb2F0ICApICAgIHRocm93ICgpICA7
IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19qMGYgICAgICAgICAoZmxvYXQgICkgICAgdGhyb3cg
KCkgICAgOwpleHRlcm4gICBmbG9hdCAgICAgICAgICBqMWYgICAgICAgICAoZmxvYXQgICkgICAg
dGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2oxZiAgICAgICAgIChmbG9hdCAg
KSAgICB0aHJvdyAoKSAgICA7CmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGpuZiAgICAgICAgIChp
bnQsIGZsb2F0ICApICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19qbmYg
ICAgICAgICAoaW50LCBmbG9hdCAgKSAgICB0aHJvdyAoKSAgICA7CmV4dGVybiAgIGZsb2F0ICAg
ICAgICAgIHkwZiAgICAgICAgIChmbG9hdCAgKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9h
dCAgICAgICAgIF9feTBmICAgICAgICAgKGZsb2F0ICApICAgIHRocm93ICgpICAgIDsKZXh0ZXJu
ICAgZmxvYXQgICAgICAgICAgeTFmICAgICAgICAgKGZsb2F0ICApICAgIHRocm93ICgpICA7IGV4
dGVybiAgIGZsb2F0ICAgICAgICAgX195MWYgICAgICAgICAoZmxvYXQgICkgICAgdGhyb3cgKCkg
ICAgOwpleHRlcm4gICBmbG9hdCAgICAgICAgICB5bmYgICAgICAgICAoaW50LCBmbG9hdCAgKSAg
ICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9feW5mICAgICAgICAgKGludCwg
ZmxvYXQgICkgICAgdGhyb3cgKCkgICAgOwoKCgoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBl
cmZmICAgICAgICAgKGZsb2F0ICApICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAg
ICAgX19lcmZmICAgICAgICAgKGZsb2F0ICApICAgIHRocm93ICgpICAgIDsKZXh0ZXJuICAgZmxv
YXQgICAgICAgICAgZXJmY2YgICAgICAgICAoZmxvYXQgICkgICAgdGhyb3cgKCkgIDsgZXh0ZXJu
ICAgZmxvYXQgICAgICAgICBfX2VyZmNmICAgICAgICAgKGZsb2F0ICApICAgIHRocm93ICgpICAg
IDsKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgbGdhbW1hZiAgICAgICAgIChmbG9hdCAgKSAgICB0
aHJvdyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fbGdhbW1hZiAgICAgICAgIChmbG9h
dCAgKSAgICB0aHJvdyAoKSAgICA7CgoKCgoKCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGdh
bW1hZiAgICAgICAgIChmbG9hdCAgKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAg
ICAgIF9fZ2FtbWFmICAgICAgICAgKGZsb2F0ICApICAgIHRocm93ICgpICAgIDsKCgoKIAoKCmV4
dGVybiAgIGZsb2F0ICAgICAgICAgIGxnYW1tYWZfciAgICAgICAgICAgIChmbG9hdCAgLCBpbnQg
Kl9fc2lnbmdhbXApICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19sZ2Ft
bWFmX3IgICAgICAgICAgICAoZmxvYXQgICwgaW50ICpfX3NpZ25nYW1wKSAgICB0aHJvdyAoKSAg
ICA7CgoKCgogCgpleHRlcm4gICBmbG9hdCAgICAgICAgICByaW50ZiAgICAgICAgIChmbG9hdCAg
IF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX3JpbnRmICAgICAg
ICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGZsb2F0ICAgICAg
ICAgIG5leHRhZnRlcmYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195KSAgICB0aHJv
dyAoKSAgIF9fYXR0cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKTsgZXh0ZXJuICAgZmxvYXQg
ICAgICAgICBfX25leHRhZnRlcmYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195KSAg
ICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKSAgOwoKCgoKIApl
eHRlcm4gICBmbG9hdCAgICAgICAgICByZW1haW5kZXJmICAgICAgICAgKGZsb2F0ICAgX194LCBm
bG9hdCAgIF9feSkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX3JlbWFp
bmRlcmYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195KSAgICB0aHJvdyAoKSAgICA7
CgoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBzY2FsYmYgICAgICAgICAoZmxvYXQgICBfX3gs
IGZsb2F0ICAgX19uKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fc2Nh
bGJmICAgICAgICAgKGZsb2F0ICAgX194LCBmbG9hdCAgIF9fbikgICAgdGhyb3cgKCkgICAgOwoK
CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIHNjYWxibmYgICAgICAgICAoZmxvYXQgICBfX3gs
IGludCBfX24pICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19zY2FsYm5m
ICAgICAgICAgKGZsb2F0ICAgX194LCBpbnQgX19uKSAgICB0aHJvdyAoKSAgICA7CgoKIApleHRl
cm4gICBpbnQgICAgICAgaWxvZ2JmICAgICAgIChmbG9hdCAgIF9feCkgICB0aHJvdyAoKSAgOyBl
eHRlcm4gICBpbnQgICAgICAgX19pbG9nYmYgICAgICAgKGZsb2F0ICAgX194KSAgIHRocm93ICgp
ICAgOwoKCiMgMzMzICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwoKIyA4MiAiL3Vz
ci9pbmNsdWRlL21hdGguaCIgMiAzCgoKCgoKIAoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRl
L2JpdHMvbWF0aGNhbGxzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKIAoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBhY29z
bCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9u
ZyBkb3VibGUgICAgICAgICBfX2Fjb3NsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICB0
aHJvdyAoKSAgICA7CiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgYXNpbmwgICAgICAg
ICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91Ymxl
ICAgICAgICAgX19hc2lubCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkg
ICAgOwogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGF0YW5sICAgICAgICAgKGxvbmcg
ZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAg
IF9fYXRhbmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICAgIDsKIApl
eHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBhdGFuMmwgICAgICAgICAobG9uZyBkb3VibGUg
ICBfX3ksIGxvbmcgZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRv
dWJsZSAgICAgICAgIF9fYXRhbjJsICAgICAgICAgKGxvbmcgZG91YmxlICAgX195LCBsb25nIGRv
dWJsZSAgIF9feCkgICAgdGhyb3cgKCkgICAgOwoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAg
ICAgICBjb3NsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRl
cm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fY29zbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9f
eCkgICAgdGhyb3cgKCkgICAgOwogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIHNpbmwg
ICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcg
ZG91YmxlICAgICAgICAgX19zaW5sICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICB0aHJv
dyAoKSAgICA7CiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgdGFubCAgICAgICAgIChs
b25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAg
ICAgICBfX3RhbmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICAgIDsK
CgoKCgoKCiAKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgY29zaGwgICAgICAgICAo
bG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAg
ICAgICAgX19jb3NobCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgICAg
OwogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIHNpbmhsICAgICAgICAgKGxvbmcgZG91
YmxlICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9f
c2luaGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICAgIDsKIApleHRl
cm4gICBsb25nIGRvdWJsZSAgICAgICAgICB0YW5obCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9f
eCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX3RhbmhsICAg
ICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAgICA7CgoKIApleHRlcm4gICBs
b25nIGRvdWJsZSAgICAgICAgICBhY29zaGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAg
IHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19hY29zaGwgICAgICAg
ICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICAgIDsKIApleHRlcm4gICBsb25nIGRv
dWJsZSAgICAgICAgICBhc2luaGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93
ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19hc2luaGwgICAgICAgICAobG9u
ZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICAgIDsKIApleHRlcm4gICBsb25nIGRvdWJsZSAg
ICAgICAgICBhdGFuaGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICA7
IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19hdGFuaGwgICAgICAgICAobG9uZyBkb3Vi
bGUgICBfX3gpICAgIHRocm93ICgpICAgIDsKCgogCgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAg
ICAgICAgIGV4cGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICA7IGV4
dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19leHBsICAgICAgICAgKGxvbmcgZG91YmxlICAg
X194KSAgICB0aHJvdyAoKSAgICA7CgoKCgoKCgoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAg
ICAgICBmcmV4cGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGludCAqX19leHBvbmVudCkg
ICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX2ZyZXhwbCAgICAg
ICAgIChsb25nIGRvdWJsZSAgIF9feCwgaW50ICpfX2V4cG9uZW50KSAgICB0aHJvdyAoKSAgICA7
CgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGxkZXhwbCAgICAgICAgIChsb25nIGRv
dWJsZSAgIF9feCwgaW50IF9fZXhwb25lbnQpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcg
ZG91YmxlICAgICAgICAgX19sZGV4cGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGludCBf
X2V4cG9uZW50KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAg
ICAgIGxvZ2wgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVy
biAgIGxvbmcgZG91YmxlICAgICAgICAgX19sb2dsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194
KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGxvZzEw
bCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9u
ZyBkb3VibGUgICAgICAgICBfX2xvZzEwbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAg
dGhyb3cgKCkgICAgOwoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBtb2RmbCAgICAg
ICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICAqX19pcHRyKSAgICB0aHJvdyAo
KSAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fbW9kZmwgICAgICAgICAobG9uZyBk
b3VibGUgICBfX3gsIGxvbmcgZG91YmxlICAgKl9faXB0cikgICAgdGhyb3cgKCkgICAgOwoKCiAK
ZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgZXhwbTFsICAgICAgICAgKGxvbmcgZG91Ymxl
ICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fZXhw
bTFsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVy
biAgIGxvbmcgZG91YmxlICAgICAgICAgIGxvZzFwbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9f
eCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX2xvZzFwbCAg
ICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgICAgOwoKIApleHRlcm4gICBs
b25nIGRvdWJsZSAgICAgICAgICBsb2dibCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAg
dGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX2xvZ2JsICAgICAgICAg
KGxvbmcgZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAgICA7CgoKCgoKCgoKCgoKIAoKIApleHRl
cm4gICBsb25nIGRvdWJsZSAgICAgICAgICBwb3dsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194
LCBsb25nIGRvdWJsZSAgIF9feSkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUg
ICAgICAgICBfX3Bvd2wgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGxvbmcgZG91YmxlICAg
X195KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIHNx
cnRsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBs
b25nIGRvdWJsZSAgICAgICAgIF9fc3FydGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAg
IHRocm93ICgpICAgIDsKCgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGh5cG90bCAg
ICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICBfX3kpICAgIHRocm93ICgp
ICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19oeXBvdGwgICAgICAgICAobG9uZyBk
b3VibGUgICBfX3gsIGxvbmcgZG91YmxlICAgX195KSAgICB0aHJvdyAoKSAgICA7CgoKCiAKZXh0
ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgY2JydGwgICAgICAgICAobG9uZyBkb3VibGUgICBf
X3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19jYnJ0bCAg
ICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgICAgOwoKCgogCgogCmV4dGVy
biAgIGxvbmcgZG91YmxlICAgICAgICAgIGNlaWxsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194
KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fY2VpbGwgICAg
ICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICAgIDsKCiAKZXh0ZXJuICAgbG9u
ZyBkb3VibGUgICAgICAgICAgZmFic2wgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRo
cm93ICgpICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApOyBleHRlcm4gICBsb25n
IGRvdWJsZSAgICAgICAgIF9fZmFic2wgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRo
cm93ICgpICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApICA7CgogCmV4dGVybiAg
IGxvbmcgZG91YmxlICAgICAgICAgIGZsb29ybCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkg
ICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX2Zsb29ybCAgICAg
ICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgICAgOwoKIApleHRlcm4gICBsb25n
IGRvdWJsZSAgICAgICAgICBmbW9kbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBk
b3VibGUgICBfX3kpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAg
X19mbW9kbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICBfX3kpICAg
IHRocm93ICgpICAgIDsKCgogCgpleHRlcm4gIGludCAgICBfX2lzaW5mbCAgICAgKGxvbmcgZG91
YmxlICAgX192YWx1ZSkgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
IApleHRlcm4gIGludCAgICBfX2Zpbml0ZWwgICAgIChsb25nIGRvdWJsZSAgIF9fdmFsdWUpICB0
aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgogCgpleHRlcm4gIGludCAg
ICBpc2luZmwgICAgIChsb25nIGRvdWJsZSAgIF9fdmFsdWUpICB0aHJvdyAoKSAgIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCiAKZXh0ZXJuICBpbnQgICAgZmluaXRlbCAgICAgKGxvbmcg
ZG91YmxlICAgX192YWx1ZSkgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBkcmVtbCAgICAgICAgIChsb25nIGRv
dWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICBfX3kpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxv
bmcgZG91YmxlICAgICAgICAgX19kcmVtbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9u
ZyBkb3VibGUgICBfX3kpICAgIHRocm93ICgpICAgIDsKCgogCmV4dGVybiAgIGxvbmcgZG91Ymxl
ICAgICAgICAgIHNpZ25pZmljYW5kbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhy
b3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX3NpZ25pZmljYW5kbCAgICAg
ICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgICAgOwoKCgogCmV4dGVybiAgIGxv
bmcgZG91YmxlICAgICAgICAgIGNvcHlzaWdubCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwg
bG9uZyBkb3VibGUgICBfX3kpICAgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2Nv
bnN0X18pICApOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fY29weXNpZ25sICAgICAg
ICAgKGxvbmcgZG91YmxlICAgX194LCBsb25nIGRvdWJsZSAgIF9feSkgICAgdGhyb3cgKCkgICBf
X2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICkgIDsKCgoKCgoKCgogCmV4dGVybiAgaW50
ICAgIF9faXNuYW5sICAgICAobG9uZyBkb3VibGUgICBfX3ZhbHVlKSAgdGhyb3cgKCkgICBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKIApleHRlcm4gIGludCAgICBpc25hbmwgICAgIChs
b25nIGRvdWJsZSAgIF9fdmFsdWUpICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgajBsICAgICAgICAgKGxvbmcg
ZG91YmxlICApICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19q
MGwgICAgICAgICAobG9uZyBkb3VibGUgICkgICAgdGhyb3cgKCkgICAgOwpleHRlcm4gICBsb25n
IGRvdWJsZSAgICAgICAgICBqMWwgICAgICAgICAobG9uZyBkb3VibGUgICkgICAgdGhyb3cgKCkg
IDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX2oxbCAgICAgICAgIChsb25nIGRvdWJs
ZSAgKSAgICB0aHJvdyAoKSAgICA7CmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGpubCAg
ICAgICAgIChpbnQsIGxvbmcgZG91YmxlICApICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcg
ZG91YmxlICAgICAgICAgX19qbmwgICAgICAgICAoaW50LCBsb25nIGRvdWJsZSAgKSAgICB0aHJv
dyAoKSAgICA7CmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIHkwbCAgICAgICAgIChsb25n
IGRvdWJsZSAgKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9f
eTBsICAgICAgICAgKGxvbmcgZG91YmxlICApICAgIHRocm93ICgpICAgIDsKZXh0ZXJuICAgbG9u
ZyBkb3VibGUgICAgICAgICAgeTFsICAgICAgICAgKGxvbmcgZG91YmxlICApICAgIHRocm93ICgp
ICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX195MWwgICAgICAgICAobG9uZyBkb3Vi
bGUgICkgICAgdGhyb3cgKCkgICAgOwpleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICB5bmwg
ICAgICAgICAoaW50LCBsb25nIGRvdWJsZSAgKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25n
IGRvdWJsZSAgICAgICAgIF9feW5sICAgICAgICAgKGludCwgbG9uZyBkb3VibGUgICkgICAgdGhy
b3cgKCkgICAgOwoKCgoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBlcmZsICAgICAg
ICAgKGxvbmcgZG91YmxlICApICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAg
ICAgICAgX19lcmZsICAgICAgICAgKGxvbmcgZG91YmxlICApICAgIHRocm93ICgpICAgIDsKZXh0
ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgZXJmY2wgICAgICAgICAobG9uZyBkb3VibGUgICkg
ICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX2VyZmNsICAgICAg
ICAgKGxvbmcgZG91YmxlICApICAgIHRocm93ICgpICAgIDsKZXh0ZXJuICAgbG9uZyBkb3VibGUg
ICAgICAgICAgbGdhbW1hbCAgICAgICAgIChsb25nIGRvdWJsZSAgKSAgICB0aHJvdyAoKSAgOyBl
eHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fbGdhbW1hbCAgICAgICAgIChsb25nIGRvdWJs
ZSAgKSAgICB0aHJvdyAoKSAgICA7CgoKCgoKCgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAg
ICAgIGdhbW1hbCAgICAgICAgIChsb25nIGRvdWJsZSAgKSAgICB0aHJvdyAoKSAgOyBleHRlcm4g
ICBsb25nIGRvdWJsZSAgICAgICAgIF9fZ2FtbWFsICAgICAgICAgKGxvbmcgZG91YmxlICApICAg
IHRocm93ICgpICAgIDsKCgoKIAoKCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGxnYW1t
YWxfciAgICAgICAgICAgIChsb25nIGRvdWJsZSAgLCBpbnQgKl9fc2lnbmdhbXApICAgIHRocm93
ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19sZ2FtbWFsX3IgICAgICAgICAg
ICAobG9uZyBkb3VibGUgICwgaW50ICpfX3NpZ25nYW1wKSAgICB0aHJvdyAoKSAgICA7CgoKCgog
CgpleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICByaW50bCAgICAgICAgIChsb25nIGRvdWJs
ZSAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX3Jp
bnRsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVy
biAgIGxvbmcgZG91YmxlICAgICAgICAgIG5leHRhZnRlcmwgICAgICAgICAobG9uZyBkb3VibGUg
ICBfX3gsIGxvbmcgZG91YmxlICAgX195KSAgICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKCAg
ICAoX19jb25zdF9fKSAgKTsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX25leHRhZnRl
cmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGxvbmcgZG91YmxlICAgX195KSAgICB0aHJv
dyAoKSAgIF9fYXR0cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKSAgOwoKCgoKIApleHRlcm4g
ICBsb25nIGRvdWJsZSAgICAgICAgICByZW1haW5kZXJsICAgICAgICAgKGxvbmcgZG91YmxlICAg
X194LCBsb25nIGRvdWJsZSAgIF9feSkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3Vi
bGUgICAgICAgICBfX3JlbWFpbmRlcmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGxvbmcg
ZG91YmxlICAgX195KSAgICB0aHJvdyAoKSAgICA7CgoKIApleHRlcm4gICBsb25nIGRvdWJsZSAg
ICAgICAgICBzY2FsYmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGxvbmcgZG91YmxlICAg
X19uKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fc2NhbGJs
ICAgICAgICAgKGxvbmcgZG91YmxlICAgX194LCBsb25nIGRvdWJsZSAgIF9fbikgICAgdGhyb3cg
KCkgICAgOwoKCgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIHNjYWxibmwgICAgICAg
ICAobG9uZyBkb3VibGUgICBfX3gsIGludCBfX24pICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxv
bmcgZG91YmxlICAgICAgICAgX19zY2FsYm5sICAgICAgICAgKGxvbmcgZG91YmxlICAgX194LCBp
bnQgX19uKSAgICB0aHJvdyAoKSAgICA7CgoKIApleHRlcm4gICBpbnQgICAgICAgaWxvZ2JsICAg
ICAgIChsb25nIGRvdWJsZSAgIF9feCkgICB0aHJvdyAoKSAgOyBleHRlcm4gICBpbnQgICAgICAg
X19pbG9nYmwgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgIHRocm93ICgpICAgOwoKCiMgMzMz
ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwoKIyA5OSAiL3Vzci9pbmNsdWRlL21h
dGguaCIgMiAzCgoKCgoKCgoKCgoKCgogCmV4dGVybiBpbnQgc2lnbmdhbTsKCgoKIAojIDIzNiAi
L3Vzci9pbmNsdWRlL21hdGguaCIgMwoKCgogCnR5cGVkZWYgZW51bQp7CiAgX0lFRUVfID0gLTEs
CSAKICBfU1ZJRF8sCSAKICBfWE9QRU5fLAkgCiAgX1BPU0lYXywKICBfSVNPQ18JIAp9IF9MSUJf
VkVSU0lPTl9UWVBFOwoKIAoKCmV4dGVybiBfTElCX1ZFUlNJT05fVFlQRSBfTElCX1ZFUlNJT047
CgoKCgogCgoKCgoKc3RydWN0IF9fZXhjZXB0aW9uCgoKCiAgewogICAgaW50IHR5cGU7CiAgICBj
aGFyICpuYW1lOwogICAgZG91YmxlIGFyZzE7CiAgICBkb3VibGUgYXJnMjsKICAgIGRvdWJsZSBy
ZXR2YWw7CiAgfTsKCgpleHRlcm4gaW50IG1hdGhlcnIgKHN0cnVjdCBfX2V4Y2VwdGlvbiAqX19l
eGMpIHRocm93ICgpOwoKCgoKCgogCgoKCgoKCgogCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoK
CgoKCiAKCgojIDMzOCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwoKCgogCgoKCgoKCiAKCgoKCgoj
IDQwOSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwoKCn0gCgoKCiMgMTggIkFDRVBhcmFtcy5oIiAy
CgojIDEgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoK
CiMgMzMgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwoKCgoKCgoKCgoKCiAKCgoKCiMgNjMgIi91
c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwoKCmV4dGVybiAiQyIgeyAKCiAKZXh0ZXJuIHZvaWQgX19h
c3NlcnRfZmFpbCAoX19jb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgX19jb25zdCBjaGFyICpfX2Zp
bGUsCgkJCSAgIHVuc2lnbmVkIGludCBfX2xpbmUsIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikK
ICAgICB0aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKIApleHRlcm4g
dm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50IF9fZXJybnVtLCBfX2NvbnN0IGNoYXIgKl9f
ZmlsZSwKCQkJCSAgdW5zaWduZWQgaW50IF9fbGluZSwKCQkJCSAgX19jb25zdCBjaGFyICpfX2Z1
bmN0aW9uKQogICAgIHRocm93ICgpICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoK
IAoKZXh0ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBjb25zdCBj
aGFyICpfX2ZpbGUsIGludCBfX2xpbmUpCiAgICAgdGhyb3cgKCkgIF9fYXR0cmlidXRlX18gKChf
X25vcmV0dXJuX18pKTsKCgp9IAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgojIDE5ICJB
Q0VQYXJhbXMuaCIgMgoKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwogCgoKCgoKCgoK
CgoKCgoKCgoKIAoKCgoKCgoKCmV4dGVybiAiQyIgeyAKCiAKCgojIDEgIi91c3IvbGliL2djYy1s
aWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5
ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVmLmgiIDMK
CgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUu
NC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK
CiAKCiAKCiMgMTMxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUv
c3RkZGVmLmgiIDMKCgogCgogCgoKIyAxODggIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8y
Ljk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCiMgMjcxICIvdXNyL2xpYi9n
Y2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgojIDI4MyAiL3Vz
ci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoK
IAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRk
ZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDMzICIvdXNyL2luY2x1ZGUvc3Ry
aW5nLmgiIDIgMwoKCgogCmV4dGVybiB2b2lkICptZW1jcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19k
ZXN0LAoJCSAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0
aHJvdyAoKSA7CiAKCmV4dGVybiB2b2lkICptZW1tb3ZlICh2b2lkICpfX2Rlc3QsIF9fY29uc3Qg
dm9pZCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgOwoKIAoKCgpleHRlcm4gdm9p
ZCAqbWVtY2NweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19yZXN0
cmljdCBfX3NyYywKCQkgICAgICBpbnQgX19jLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIDsK
CgoKIApleHRlcm4gdm9pZCAqbWVtc2V0ICh2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24p
IHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCBtZW1jbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19j
b25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpICAgOwoKIApleHRlcm4g
dm9pZCAqbWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAg
ICAgdGhyb3cgKCkgICA7CgojIDczICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKCgoKIApleHRl
cm4gY2hhciAqc3RyY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpIDsKIApleHRlcm4gY2hhciAqc3RybmNweSAo
Y2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCgkJICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKSA7CgogCmV4dGVybiBjaGFyICpzdHJjYXQgKGNo
YXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAg
ICAgdGhyb3cgKCkgOwogCmV4dGVybiBjaGFyICpzdHJuY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9f
ZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLAoJCSAgICAgIHNpemVfdCBfX24p
IHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCBzdHJjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19j
b25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpICAgOwogCmV4dGVybiBpbnQgc3RybmNtcCAo
X19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAg
dGhyb3cgKCkgICA7CgogCmV4dGVybiBpbnQgc3RyY29sbCAoX19jb25zdCBjaGFyICpfX3MxLCBf
X2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgICA7CiAKZXh0ZXJuIHNpemVfdCBzdHJ4
ZnJtIChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKCQkgICAgICAgX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKSA7CgojIDExNiAiL3Vzci9pbmNsdWRl
L3N0cmluZy5oIiAzCgoKCiAKZXh0ZXJuIGNoYXIgKnN0cmR1cCAoX19jb25zdCBjaGFyICpfX3Mp
IHRocm93ICgpICAgOwoKCiAKCgoKCgoKCiMgMTUyICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMK
CgogCmV4dGVybiBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJv
dyAoKSAgIDsKIApleHRlcm4gY2hhciAqc3RycmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBf
X2MpIHRocm93ICgpICAgOwoKCgoKCgoKIAoKZXh0ZXJuIHNpemVfdCBzdHJjc3BuIChfX2NvbnN0
IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX3JlamVjdCkKICAgICB0aHJvdyAoKSAgIDsKIAoK
ZXh0ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9f
YWNjZXB0KQogICAgIHRocm93ICgpICAgOwogCmV4dGVybiBjaGFyICpzdHJwYnJrIChfX2NvbnN0
IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSAgIDsKIApl
eHRlcm4gY2hhciAqc3Ryc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hh
ciAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgICA7CgoKCgoKCgogCmV4dGVybiBjaGFyICpzdHJ0
b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxp
bSkKICAgICB0aHJvdyAoKSA7CgogCgpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hhciAqX19y
ZXN0cmljdCBfX3MsCgkJCSBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKCQkJIGNo
YXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpIDsKCmV4dGVybiBjaGFyICpzdHJ0
b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Rl
bGltLAoJCSAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKSA7CgoK
IyAyMTQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCgogCmV4dGVybiBzaXplX3Qgc3RybGVu
IChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgICA7CgoKCgoKCgoKCiAKZXh0ZXJuIGNoYXIg
KnN0cmVycm9yIChpbnQgX19lcnJudW0pIHRocm93ICgpIDsKCiAKCmV4dGVybiBjaGFyICpzdHJl
cnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRocm93
ICgpIDsKCgogCgpleHRlcm4gdm9pZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRo
cm93ICgpIDsKCgogCmV4dGVybiB2b2lkIGJjb3B5IChfX2NvbnN0IHZvaWQgKl9fc3JjLCB2b2lk
ICpfX2Rlc3QsIHNpemVfdCBfX24pIHRocm93ICgpIDsKCiAKZXh0ZXJuIHZvaWQgYnplcm8gKHZv
aWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50IGJjbXAgKF9fY29u
c3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93
ICgpICAgOwoKIApleHRlcm4gY2hhciAqaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19j
KSB0aHJvdyAoKSAgIDsKCiAKZXh0ZXJuIGNoYXIgKnJpbmRleCAoX19jb25zdCBjaGFyICpfX3Ms
IGludCBfX2MpIHRocm93ICgpICAgOwoKIAoKZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIHRocm93
ICgpICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgogCgoKCgoKCgoKCiAKZXh0ZXJuIGlu
dCBzdHJjYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAg
ICB0aHJvdyAoKSAgIDsKCiAKZXh0ZXJuIGludCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpf
X3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgICA7CgoK
IyAyODkgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCgogCgpleHRlcm4gY2hhciAqc3Ryc2Vw
IChjaGFyICoqX19yZXN0cmljdCBfX3N0cmluZ3AsCgkJICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19kZWxpbSkgdGhyb3cgKCkgOwoKCiMgMzMyICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgi
IDMKCgoKCiMgMzYxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKCgoKfSAKCgojIDIwICJBQ0VQ
YXJhbXMuaCIgMgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40Ly4uLy4u
Ly4uLy4uL2luY2x1ZGUvZysrLTMvaW9zdHJlYW0uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxp
bnV4LzIuOTUuNC8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAxIDMKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKICAgCgoKCmV4dGVy
biAiQyIgewoKfQogCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5j
bHVkZS9zdGRhcmcuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCiAKCgoKIAoKCgoKCgoKCgoK
CgoKCgoKCnZvaWQgdmFfZW5kIChfX2dudWNfdmFfbGlzdCk7CQkgCgoKIAoKCgogCgoKCgoKCgoK
CgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCiAKCgoKCgoKCgoKCgoKCiMgMTc1ICIvdXNy
L2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkYXJnLmgiIDMKCgogCgoK
CgogCgogCgogCgp0eXBlZGVmIF9fZ251Y192YV9saXN0IHZhX2xpc3Q7CgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCiMgNDAgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgpleHRlcm4gIkMrKyIgewpjbGFzcyBpc3RyZWFtOyAgCmNsYXNzIG9zdHJlYW07IGNsYXNz
IHN0cmVhbWJ1ZjsKCiAKCgoKCnR5cGVkZWYgX19vZmY2NF90ICAgc3RyZWFtb2ZmOwp0eXBlZGVm
IF9fb2ZmNjRfdCAgIHN0cmVhbXBvczsKCgoKCnR5cGVkZWYgX19zc2l6ZV90ICAgc3RyZWFtc2l6
ZTsKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX2ZtdGZsYWdzOwp0eXBlZGVmIHVuc2lnbmVkIGNo
YXIgX19pb3N0YXRlOwoKc3RydWN0IF9pb3NfZmllbGRzCnsgIAogICAgc3RyZWFtYnVmICpfc3Ry
YnVmOwogICAgb3N0cmVhbSogX3RpZTsKICAgIGludCBfd2lkdGg7CiAgICBfX2ZtdGZsYWdzIF9m
bGFnczsKICAgIHdjaGFyX3QgICBfZmlsbDsKICAgIF9faW9zdGF0ZSBfc3RhdGU7CiAgICBfX2lv
c3RhdGUgX2V4Y2VwdGlvbnM7CiAgICBpbnQgX3ByZWNpc2lvbjsKCiAgICB2b2lkICpfYXJyYXlz
OyAgCn07CgoKCgoKCgoKCgoKCgoKCiMgMTI0ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgv
Mi45NS40Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDMKCgpjbGFzcyBp
b3MgOiBwdWJsaWMgX2lvc19maWVsZHMgewogIGlvcyYgb3BlcmF0b3I9KGlvcyYpOyAgIAogIGlv
cyAoY29uc3QgaW9zJik7ICAKICBwdWJsaWM6CiAgICB0eXBlZGVmIF9fZm10ZmxhZ3MgZm10Zmxh
Z3M7CiAgICB0eXBlZGVmIGludCBpb3N0YXRlOwogICAgdHlwZWRlZiBpbnQgb3Blbm1vZGU7CiAg
ICB0eXBlZGVmIF9fc3NpemVfdCAgIHN0cmVhbXNpemU7CiAgICBlbnVtIGlvX3N0YXRlIHsKCWdv
b2RiaXQgPSAwICwKCWVvZmJpdCA9IDEgLAoJZmFpbGJpdCA9IDIgLAoJYmFkYml0ID0gNCAgfTsK
ICAgIGVudW0gb3Blbl9tb2RlIHsKCWluID0gMSAsCglvdXQgPSAyICwKCWF0ZSA9IDQgLAoJYXBw
ID0gOCAsCgl0cnVuYyA9IDE2ICwKCW5vY3JlYXRlID0gMzIgLAoJbm9yZXBsYWNlID0gNjQgLAoJ
YmluID0gMTI4ICwgIAoJYmluYXJ5ID0gMTI4ICB9OwogICAgZW51bSBzZWVrX2RpciB7IGJlZywg
Y3VyLCBlbmR9OwogICAgdHlwZWRlZiBlbnVtIHNlZWtfZGlyIHNlZWtkaXI7CiAgICAgCiAgICBl
bnVtIHsgc2tpcHdzPSAwMSAsCgkgICBsZWZ0PSAwMiAsIHJpZ2h0PSAwNCAsIGludGVybmFsPSAw
MTAgLAoJICAgZGVjPSAwMjAgLCBvY3Q9IDA0MCAsIGhleD0gMDEwMCAsCgkgICBzaG93YmFzZT0g
MDIwMCAsIHNob3dwb2ludD0gMDQwMCAsCgkgICB1cHBlcmNhc2U9IDAxMDAwICwgc2hvd3Bvcz0g
MDIwMDAgLAoJICAgc2NpZW50aWZpYz0gMDQwMDAgLCBmaXhlZD0gMDEwMDAwICwKCSAgIHVuaXRi
dWY9IDAyMDAwMCAsIHN0ZGlvPSAwNDAwMDAgCgoKCgkgICB9OwogICAgZW51bSB7ICAKCWJhc2Vm
aWVsZD1kZWMrb2N0K2hleCwKCWZsb2F0ZmllbGQgPSBzY2llbnRpZmljK2ZpeGVkLAoJYWRqdXN0
ZmllbGQgPSBsZWZ0K3JpZ2h0K2ludGVybmFsCiAgICB9OwoKIyAxNzcgIi91c3IvbGliL2djYy1s
aWIvaTM4Ni1saW51eC8yLjk1LjQvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJlYW1idWYu
aCIgMwoKCiAgICBvc3RyZWFtKiB0aWUoKSBjb25zdCB7IHJldHVybiBfdGllOyB9CiAgICBvc3Ry
ZWFtKiB0aWUob3N0cmVhbSogdmFsKSB7IG9zdHJlYW0qIHNhdmU9X3RpZTsgX3RpZT12YWw7IHJl
dHVybiBzYXZlOyB9CgogICAgIAogICAgd2NoYXJfdCAgIGZpbGwoKSBjb25zdCB7IHJldHVybiBf
ZmlsbDsgfQogICAgd2NoYXJfdCAgIGZpbGwod2NoYXJfdCAgIG5ld2YpCgl7d2NoYXJfdCAgIG9s
ZGYgPSBfZmlsbDsgX2ZpbGwgPSBuZXdmOyByZXR1cm4gb2xkZjt9CiAgICBmbXRmbGFncyBmbGFn
cygpIGNvbnN0IHsgcmV0dXJuIF9mbGFnczsgfQogICAgZm10ZmxhZ3MgZmxhZ3MoZm10ZmxhZ3Mg
bmV3X3ZhbCkgewoJZm10ZmxhZ3Mgb2xkX3ZhbCA9IF9mbGFnczsgX2ZsYWdzID0gbmV3X3ZhbDsg
cmV0dXJuIG9sZF92YWw7IH0KICAgIGludCBwcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiBfcHJl
Y2lzaW9uOyB9CiAgICBpbnQgcHJlY2lzaW9uKGludCBuZXdwKSB7Cgl1bnNpZ25lZCBzaG9ydCBv
bGRwID0gX3ByZWNpc2lvbjsgX3ByZWNpc2lvbiA9ICh1bnNpZ25lZCBzaG9ydCluZXdwOwoJcmV0
dXJuIG9sZHA7IH0KICAgIGZtdGZsYWdzIHNldGYoZm10ZmxhZ3MgdmFsKSB7CglmbXRmbGFncyBv
bGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdzIHw9IHZhbDsgcmV0dXJuIG9sZGJpdHM7IH0KICAgIGZt
dGZsYWdzIHNldGYoZm10ZmxhZ3MgdmFsLCBmbXRmbGFncyBtYXNrKSB7CglmbXRmbGFncyBvbGRi
aXRzID0gX2ZsYWdzOwoJX2ZsYWdzID0gKF9mbGFncyAmIH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsg
cmV0dXJuIG9sZGJpdHM7IH0KICAgIGZtdGZsYWdzIHVuc2V0ZihmbXRmbGFncyBtYXNrKSB7Cglm
bXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdzICY9IH5tYXNrOyByZXR1cm4gb2xkYml0
czsgfQogICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gX3dpZHRoOyB9CiAgICBpbnQgd2lk
dGgoaW50IHZhbCkgeyBpbnQgc2F2ZSA9IF93aWR0aDsgX3dpZHRoID0gdmFsOyByZXR1cm4gc2F2
ZTsgfQoKCgoKICAgIHZvaWQgX3Rocm93X2ZhaWx1cmUoKSBjb25zdCB7IH0KCiAgICB2b2lkIGNs
ZWFyKGlvc3RhdGUgc3RhdGUgPSAwKSB7Cglfc3RhdGUgPSBfc3RyYnVmID8gc3RhdGUgOiBzdGF0
ZXxiYWRiaXQ7CglpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0K
ICAgIHZvaWQgc2V0KGlvc3RhdGUgZmxhZykgeyBfc3RhdGUgfD0gZmxhZzsKCWlmIChfc3RhdGUg
JiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQogICAgdm9pZCBzZXRzdGF0ZShpb3N0
YXRlIGZsYWcpIHsgX3N0YXRlIHw9IGZsYWc7ICAKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykg
X3Rocm93X2ZhaWx1cmUoKTsgfQogICAgaW50IGdvb2QoKSBjb25zdCB7IHJldHVybiBfc3RhdGUg
PT0gMDsgfQogICAgaW50IGVvZigpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAmIGlvczo6ZW9mYml0
OyB9CiAgICBpbnQgZmFpbCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAmIChpb3M6OmJhZGJpdHxp
b3M6OmZhaWxiaXQpOyB9CiAgICBpbnQgYmFkKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlICYgaW9z
OjpiYWRiaXQ7IH0KICAgIGlvc3RhdGUgcmRzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZTsg
fQogICAgb3BlcmF0b3Igdm9pZCooKSBjb25zdCB7IHJldHVybiBmYWlsKCkgPyAodm9pZCopMCA6
ICh2b2lkKikoLTEpOyB9CiAgICBpbnQgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gZmFpbCgp
OyB9CiAgICBpb3N0YXRlIGV4Y2VwdGlvbnMoKSBjb25zdCB7IHJldHVybiBfZXhjZXB0aW9uczsg
fQogICAgdm9pZCBleGNlcHRpb25zKGlvc3RhdGUgZW5hYmxlKSB7CglfZXhjZXB0aW9ucyA9IGVu
YWJsZTsKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQoKICAg
IHN0cmVhbWJ1ZiogcmRidWYoKSBjb25zdCB7IHJldHVybiBfc3RyYnVmOyB9CiAgICBzdHJlYW1i
dWYqIHJkYnVmKHN0cmVhbWJ1ZiAqX3MpIHsKICAgICAgc3RyZWFtYnVmICpfb2xkID0gX3N0cmJ1
ZjsgX3N0cmJ1ZiA9IF9zOyBjbGVhciAoKTsgcmV0dXJuIF9vbGQ7IH0KCiAgICBzdGF0aWMgaW50
IHN5bmNfd2l0aF9zdGRpbyhpbnQgb24pOwogICAgc3RhdGljIHZvaWQgc3luY193aXRoX3N0ZGlv
KCkgeyBzeW5jX3dpdGhfc3RkaW8oMSk7IH0KICAgIHN0YXRpYyBmbXRmbGFncyBiaXRhbGxvYygp
OwogICAgc3RhdGljIGludCB4YWxsb2MoKTsKICAgIHZvaWQqJiBwd29yZChpbnQpOwogICAgdm9p
ZCogcHdvcmQoaW50KSBjb25zdDsKICAgIGxvbmcmIGl3b3JkKGludCk7CiAgICBsb25nIGl3b3Jk
KGludCkgY29uc3Q7CgoKCgoKCgoKCiAgICAgCiAgICBjbGFzcyBJbml0IHsKICAgIHB1YmxpYzoK
ICAgICAgSW5pdCAoKSB7IH0KICAgIH07CgogIHByb3RlY3RlZDoKICAgIGlubGluZSBpb3Moc3Ry
ZWFtYnVmKiBzYiA9IDAsIG9zdHJlYW0qIHRpZV90byA9IDApOwogICAgaW5saW5lIHZpcnR1YWwg
fmlvcygpOwogICAgaW5saW5lIHZvaWQgaW5pdChzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWUg
PSAwKTsKfTsKCgoKCnR5cGVkZWYgaW9zOjpzZWVrX2RpciBfc2Vla19kaXI7CgoKIAogCiAKIAog
CgogCiAKY2xhc3Mgc3RyZWFtbWFya2VyIDogcHJpdmF0ZSBfSU9fbWFya2VyIHsKICAgIGZyaWVu
ZCBjbGFzcyBzdHJlYW1idWY7CiAgICB2b2lkIHNldF9vZmZzZXQoaW50IG9mZnNldCkgeyBfcG9z
ID0gb2Zmc2V0OyB9CiAgcHVibGljOgogICAgc3RyZWFtbWFya2VyKHN0cmVhbWJ1ZiAqc2IpOwog
ICAgfnN0cmVhbW1hcmtlcigpOwogICAgaW50IHNhdmluZygpIHsgcmV0dXJuICAxOyB9CiAgICBp
bnQgZGVsdGEoc3RyZWFtbWFya2VyJik7CiAgICBpbnQgZGVsdGEoKTsKfTsKCnN0cnVjdCBzdHJl
YW1idWYgOiBwdWJsaWMgX0lPX0ZJTEUgeyAgCiAgICBmcmllbmQgY2xhc3MgaW9zOwogICAgZnJp
ZW5kIGNsYXNzIGlzdHJlYW07CiAgICBmcmllbmQgY2xhc3Mgb3N0cmVhbTsKICAgIGZyaWVuZCBj
bGFzcyBzdHJlYW1tYXJrZXI7CiAgICBjb25zdCB2b2lkIComX3Z0YWJsZSgpIHsgcmV0dXJuICoo
Y29uc3Qgdm9pZCoqKSgoX0lPX0ZJTEUqKXRoaXMgKyAxKTsgfQogIHByb3RlY3RlZDoKICAgIHN0
YXRpYyBzdHJlYW1idWYqIF9saXN0X2FsbDsgIAogICAgX0lPX0ZJTEUqJiB4Y2hhaW4oKSB7IHJl
dHVybiBfY2hhaW47IH0KICAgIHZvaWQgX3VuX2xpbmsoKTsKICAgIHZvaWQgX2xpbmtfaW4oKTsK
ICAgIGNoYXIqIGdwdHIoKSBjb25zdAogICAgICB7IHJldHVybiBfZmxhZ3MgICYgMHgxMDAgID8g
X0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX3B0cjsgfQogICAgY2hhciogcHB0cigpIGNvbnN0IHsg
cmV0dXJuIF9JT193cml0ZV9wdHI7IH0KICAgIGNoYXIqIGVncHRyKCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/IF9JT19zYXZlX2VuZCA6IF9JT19yZWFkX2VuZDsgfQog
ICAgY2hhciogZXBwdHIoKSBjb25zdCB7IHJldHVybiBfSU9fd3JpdGVfZW5kOyB9CiAgICBjaGFy
KiBwYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9iYXNlOyB9CiAgICBjaGFyKiBlYmFj
aygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9mbGFncyAgJiAweDEwMCAgPyBfSU9fc2F2ZV9iYXNl
IDogX0lPX3JlYWRfYmFzZTt9CiAgICBjaGFyKiBiYXNlKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1
Zl9iYXNlOyB9CiAgICBjaGFyKiBlYnVmKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1Zl9lbmQ7IH0K
ICAgIGludCBibGVuKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1Zl9lbmQgLSBfSU9fYnVmX2Jhc2U7
IH0KICAgIHZvaWQgeHB1dF9jaGFyKGNoYXIgYykgeyAqX0lPX3dyaXRlX3B0cisrID0gYzsgfQog
ICAgaW50IHhmbGFncygpIHsgcmV0dXJuIF9mbGFncyA7IH0KICAgIGludCB4ZmxhZ3MoaW50IGYp
IHtpbnQgZmwgPSBfZmxhZ3MgOyBfZmxhZ3MgID0gZjsgcmV0dXJuIGZsO30KICAgIHZvaWQgeHNl
dGZsYWdzKGludCBmKSB7IF9mbGFncyAgfD0gZjsgfQogICAgdm9pZCB4c2V0ZmxhZ3MoaW50IGYs
IGludCBtYXNrKQogICAgICB7IF9mbGFncyAgPSAoX2ZsYWdzICAmIH5tYXNrKSB8IChmICYgbWFz
ayk7IH0KICAgIHZvaWQgZ2J1bXAoaW50IG4pCiAgICAgIHsgX2ZsYWdzICAmIDB4MTAwICA/IChf
SU9fc2F2ZV9iYXNlKz1uKTooX0lPX3JlYWRfcHRyKz1uKTt9CiAgICB2b2lkIHBidW1wKGludCBu
KSB7IF9JT193cml0ZV9wdHIgKz0gbjsgfQogICAgdm9pZCBzZXRiKGNoYXIqIGIsIGNoYXIqIGVi
LCBpbnQgYT0wKTsKICAgIHZvaWQgc2V0cChjaGFyKiBwLCBjaGFyKiBlcCkKICAgICAgeyBfSU9f
d3JpdGVfYmFzZT1fSU9fd3JpdGVfcHRyPXA7IF9JT193cml0ZV9lbmQ9ZXA7IH0KICAgIHZvaWQg
c2V0ZyhjaGFyKiBlYiwgY2hhciogZywgY2hhciAqZWcpIHsKICAgICAgaWYgKF9mbGFncyAgJiAw
eDEwMCApIF9JT19mcmVlX2JhY2t1cF9hcmVhKHRoaXMpOyAKICAgICAgX0lPX3JlYWRfYmFzZSA9
IGViOyBfSU9fcmVhZF9wdHIgPSBnOyBfSU9fcmVhZF9lbmQgPSBlZzsgfQogICAgY2hhciAqc2hv
cnRidWYoKSB7IHJldHVybiBfc2hvcnRidWY7IH0KCiAgICBpbnQgaW5fYmFja3VwKCkgeyByZXR1
cm4gX2ZsYWdzICYgMHgxMDAgOyB9CiAgICAgCiAgICBjaGFyICpHYmFzZSgpIHsgcmV0dXJuIGlu
X2JhY2t1cCgpID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX2Jhc2U7IH0KICAgICAKICAgIGNo
YXIgKmVHcHRyKCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9fc2F2ZV9lbmQgOiBfSU9fcmVh
ZF9lbmQ7IH0KICAgICAKICAgIGNoYXIgKkJiYXNlKCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBf
SU9fcmVhZF9iYXNlIDogX0lPX3NhdmVfYmFzZTsgfQogICAgY2hhciAqQnB0cigpIHsgcmV0dXJu
IF9JT19iYWNrdXBfYmFzZTsgfQogICAgIAogICAgY2hhciAqZUJwdHIoKSB7IHJldHVybiBpbl9i
YWNrdXAoKSA/IF9JT19yZWFkX2VuZCA6IF9JT19zYXZlX2VuZDsgfQogICAgY2hhciAqTmJhc2Uo
KSB7IHJldHVybiBfSU9fc2F2ZV9iYXNlOyB9CiAgICBjaGFyICplTnB0cigpIHsgcmV0dXJuIF9J
T19zYXZlX2VuZDsgfQogICAgaW50IGhhdmVfYmFja3VwKCkgeyByZXR1cm4gX0lPX3NhdmVfYmFz
ZSAhPSBfX251bGwgOyB9CiAgICBpbnQgaGF2ZV9tYXJrZXJzKCkgeyByZXR1cm4gX21hcmtlcnMg
IT0gX19udWxsIDsgfQogICAgdm9pZCBmcmVlX2JhY2t1cF9hcmVhKCk7CiAgICB2b2lkIHVuc2F2
ZV9tYXJrZXJzKCk7ICAKICAgIGludCBwdXRfbW9kZSgpIHsgcmV0dXJuIF9mbGFncyAmIDB4ODAw
IDsgfQogICAgaW50IHN3aXRjaF90b19nZXRfbW9kZSgpOwogICAgCiAgICBzdHJlYW1idWYoaW50
IGZsYWdzPTApOwogIHB1YmxpYzoKICAgIHN0YXRpYyBpbnQgZmx1c2hfYWxsKCk7CiAgICBzdGF0
aWMgdm9pZCBmbHVzaF9hbGxfbGluZWJ1ZmZlcmVkKCk7ICAKICAgIHZpcnR1YWwgfnN0cmVhbWJ1
ZigpOwogICAgdmlydHVhbCBpbnQgb3ZlcmZsb3coaW50IGMgPSAoLTEpICk7ICAKICAgIHZpcnR1
YWwgaW50IHVuZGVyZmxvdygpOyAgCiAgICB2aXJ0dWFsIGludCB1ZmxvdygpOyAgCiAgICB2aXJ0
dWFsIGludCBwYmFja2ZhaWwoaW50IGMpOwogCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgeHNwdXRu
KGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgeHNn
ZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2Zm
KHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHZp
cnR1YWwgc3RyZWFtcG9zIHNlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6Omlu
fGlvczo6b3V0KTsKCiAgICBzdHJlYW1wb3MgcHVic2Vla29mZihzdHJlYW1vZmYgbywgX3NlZWtf
ZGlyIGQsIGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpCiAgICAgIHsgcmV0dXJuIF9JT19zZWVr
b2ZmICh0aGlzLCBvLCBkLCBtb2RlKTsgfQogICAgc3RyZWFtcG9zIHB1YnNlZWtwb3Moc3RyZWFt
cG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KQogICAgICB7IHJldHVybiBfSU9f
c2Vla3BvcyAodGhpcywgcG9zLCBtb2RlKTsgfQogICAgc3RyZWFtcG9zIHNzZWVrb2ZmKHN0cmVh
bW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHN0cmVhbXBv
cyBzc2Vla3BvcyhzdHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6aW58aW9zOjpvdXQpOwog
ICAgdmlydHVhbCBzdHJlYW1idWYqIHNldGJ1ZihjaGFyKiBwLCBpbnQgbGVuKTsKICAgIHZpcnR1
YWwgaW50IHN5bmMoKTsKICAgIHZpcnR1YWwgaW50IGRvYWxsb2NhdGUoKTsKCiAgICBpbnQgc2Vl
a21hcmsoc3RyZWFtbWFya2VyJiBtYXJrLCBpbnQgZGVsdGEgPSAwKTsKICAgIGludCBzcHV0YmFj
a2MoY2hhciBjKTsKICAgIGludCBzdW5nZXRjKCk7CiAgICBpbnQgdW5idWZmZXJlZCgpIHsgcmV0
dXJuIF9mbGFncyAmIDIgID8gMSA6IDA7IH0KICAgIGludCBsaW5lYnVmZmVyZWQoKSB7IHJldHVy
biBfZmxhZ3MgJiAweDIwMCAgPyAxIDogMDsgfQogICAgdm9pZCB1bmJ1ZmZlcmVkKGludCBpKQoJ
eyBpZiAoaSkgX2ZsYWdzIHw9IDIgOyBlbHNlIF9mbGFncyAmPSB+MiA7IH0KICAgIHZvaWQgbGlu
ZWJ1ZmZlcmVkKGludCBpKQoJeyBpZiAoaSkgX2ZsYWdzIHw9IDB4MjAwIDsgZWxzZSBfZmxhZ3Mg
Jj0gfjB4MjAwIDsgfQogICAgaW50IGFsbG9jYXRlKCkgeyAgCglpZiAoYmFzZSgpIHx8IHVuYnVm
ZmVyZWQoKSkgcmV0dXJuIDA7CgllbHNlIHJldHVybiBkb2FsbG9jYXRlKCk7IH0KICAgICAKICAg
IHZvaWQgYWxsb2NidWYoKSB7IGlmIChiYXNlKCkgPT0gX19udWxsICkgZG9hbGxvY2J1ZigpOyB9
CiAgICB2b2lkIGRvYWxsb2NidWYoKTsKICAgIGludCBpbl9hdmFpbCgpIHsgcmV0dXJuIF9JT19y
ZWFkX2VuZCAtIF9JT19yZWFkX3B0cjsgfQogICAgaW50IG91dF93YWl0aW5nKCkgeyByZXR1cm4g
X0lPX3dyaXRlX3B0ciAtIF9JT193cml0ZV9iYXNlOyB9CiAgICBzdHJlYW1zaXplIHNwdXRuKGNv
bnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbikgeyByZXR1cm4geHNwdXRuKHMsIG4pOyB9CiAgICBz
dHJlYW1zaXplIHBhZG4oY2hhciBwYWQsIHN0cmVhbXNpemUgbikgeyByZXR1cm4gX0lPX3BhZG4o
dGhpcywgcGFkLCBuKTsgfQogICAgc3RyZWFtc2l6ZSBzZ2V0bihjaGFyKiBzLCBzdHJlYW1zaXpl
IG4pIHsgcmV0dXJuIF9JT19zZ2V0bih0aGlzLCBzLCBuKTsgfQogICAgaW50IGlnbm9yZShpbnQp
OwogICAgaW50IGdldF9jb2x1bW4oKTsKICAgIGludCBzZXRfY29sdW1uKGludCk7CiAgICBsb25n
IHNnZXRsaW5lKGNoYXIqIGJ1Ziwgc2l6ZV90ICAgbiwgY2hhciBkZWxpbSwgaW50IHB1dGJhY2tf
ZGVsaW0pOwogICAgaW50IHNwdXRjKGludCBjKSB7IHJldHVybiBfSU9fcHV0YyhjLCB0aGlzKTsg
fQogICAgaW50IHNidW1wYygpIHsgcmV0dXJuIF9JT19nZXRjKHRoaXMpOyB9CiAgICBpbnQgc2dl
dGMoKSB7IHJldHVybiAoKCAgdGhpcyAgKS0+X0lPX3JlYWRfcHRyID49ICggIHRoaXMgICktPl9J
T19yZWFkX2VuZCAmJiBfX3VuZGVyZmxvdyAoICB0aGlzICApID09ICgtMSkgID8gKC0xKSAgOiAq
KHVuc2lnbmVkIGNoYXIgKikgKCAgdGhpcyAgKS0+X0lPX3JlYWRfcHRyKSAgOyB9CiAgICBpbnQg
c25leHRjKCkgewoJaWYgKF9JT19yZWFkX3B0ciA+PSBfSU9fcmVhZF9lbmQgJiYgX191bmRlcmZs
b3codGhpcykgPT0gKC0xKSApCgkgIHJldHVybiAoLTEpIDsKCWVsc2UgcmV0dXJuIF9JT19yZWFk
X3B0cisrLCBzZ2V0YygpOyB9CiAgICB2b2lkIHN0b3NzYygpIHsgaWYgKF9JT19yZWFkX3B0ciA8
IF9JT19yZWFkX2VuZCkgX0lPX3JlYWRfcHRyKys7IH0KICAgIGludCB2c2NhbihjaGFyIGNvbnN0
ICpmbXQwLCBfX2dudWNfdmFfbGlzdCAgYXAsIGlvcyogc3RyZWFtID0gX19udWxsICk7CiAgICBp
bnQgc2NhbihjaGFyIGNvbnN0ICpmbXQwIC4uLik7CiAgICBpbnQgdmZvcm0oY2hhciBjb25zdCAq
Zm10MCwgX19nbnVjX3ZhX2xpc3QgIGFwKTsKICAgIGludCBmb3JtKGNoYXIgY29uc3QgKmZtdDAg
Li4uKTsKCgoKCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3JlYWQoY2hhciogYnVmLCBzdHJl
YW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c193cml0ZShjb25zdCBjaGFy
Kiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzeXNfc2VlayhzdHJlYW1vZmYs
IF9zZWVrX2Rpcik7CiAgICB2aXJ0dWFsIGludCBzeXNfY2xvc2UoKTsKICAgIHZpcnR1YWwgaW50
IHN5c19zdGF0KHZvaWQqKTsgIAoKICAgIHZpcnR1YWwgaW50IHNob3dtYW55YygpOwogICAgdmly
dHVhbCB2b2lkIGltYnVlKHZvaWQgKik7Cgp9OwoKIAogCgpjbGFzcyBmaWxlYnVmIDogcHVibGlj
IHN0cmVhbWJ1ZiB7CiAgcHJvdGVjdGVkOgogICAgdm9pZCBpbml0KCk7CiAgcHVibGljOgogICAg
c3RhdGljIGNvbnN0IGludCBvcGVucHJvdDsgIAogICAgZmlsZWJ1ZigpOwogICAgZmlsZWJ1Zihp
bnQgZmQpOwogICAgZmlsZWJ1ZihpbnQgZmQsIGNoYXIqIHAsIGludCBsZW4pOwoKCgogICAgfmZp
bGVidWYoKTsKICAgIGZpbGVidWYqIGF0dGFjaChpbnQgZmQpOwogICAgZmlsZWJ1Ziogb3Blbihj
b25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbW9kZSk7CiAgICBmaWxlYnVmKiBvcGVu
KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpb3M6Om9wZW5tb2RlIG1vZGUsIGludCBwcm90ID0gMDY2
NCk7CiAgICB2aXJ0dWFsIGludCB1bmRlcmZsb3coKTsKICAgIHZpcnR1YWwgaW50IG92ZXJmbG93
KGludCBjID0gKC0xKSApOwogICAgaW50IGlzX29wZW4oKSBjb25zdCB7IHJldHVybiBfZmlsZW5v
ID49IDA7IH0KICAgIGludCBmZCgpIGNvbnN0IHsgcmV0dXJuIGlzX29wZW4oKSA/IF9maWxlbm8g
OiAoLTEpIDsgfQogICAgZmlsZWJ1ZiogY2xvc2UoKTsKICAgIHZpcnR1YWwgaW50IGRvYWxsb2Nh
dGUoKTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtvZmYoc3RyZWFtb2ZmLCBfc2Vla19kaXIs
IGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1idWYqIHNldGJ1
ZihjaGFyKiBwLCBpbnQgbGVuKTsKICAgIHN0cmVhbXNpemUgeHNwdXRuKGNvbnN0IGNoYXIqIHMs
IHN0cmVhbXNpemUgbik7CiAgICBzdHJlYW1zaXplIHhzZ2V0bihjaGFyKiBzLCBzdHJlYW1zaXpl
IG4pOwogICAgdmlydHVhbCBpbnQgc3luYygpOwogIHByb3RlY3RlZDogIAogCiAgICBpbnQgaXNf
cmVhZGluZygpIHsgcmV0dXJuIGViYWNrKCkgIT0gZWdwdHIoKTsgfQogICAgY2hhciogY3VyX3B0
cigpIHsgcmV0dXJuIGlzX3JlYWRpbmcoKSA/ICBncHRyKCkgOiBwcHRyKCk7IH0KICAgICAKICAg
IGNoYXIqIGZpbGVfcHRyKCkgeyByZXR1cm4gZUdwdHIoKTsgfQogICAgIAogICAgdmlydHVhbCBz
dHJlYW1zaXplIHN5c19yZWFkKGNoYXIqIGJ1Ziwgc3RyZWFtc2l6ZSBzaXplKTsKICAgIHZpcnR1
YWwgc3RyZWFtcG9zIHN5c19zZWVrKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsKICAgIHZpcnR1YWwg
c3RyZWFtc2l6ZSBzeXNfd3JpdGUoY29uc3QgY2hhciosIHN0cmVhbXNpemUpOwogICAgdmlydHVh
bCBpbnQgc3lzX3N0YXQodm9pZCopOyAgCiAgICB2aXJ0dWFsIGludCBzeXNfY2xvc2UoKTsKCgoK
Cn07CgppbmxpbmUgdm9pZCBpb3M6OmluaXQoc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllX3Rv
KSB7CgkJX3N0YXRlID0gc2IgPyBpb3M6Omdvb2RiaXQgOiBpb3M6OmJhZGJpdDsgX2V4Y2VwdGlv
bnM9MDsKCQlfc3RyYnVmPXNiOyBfdGllID0gdGllX3RvOyBfd2lkdGg9MDsgX2ZpbGw9JyAnOwoK
CQlfZmxhZ3M9aW9zOjpza2lwd3N8aW9zOjpkZWM7CgoKCgkJX3ByZWNpc2lvbj02OyBfYXJyYXlz
ID0gMDsgfQoKaW5saW5lIGlvczo6aW9zKHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZV90bykg
eyBpbml0KHNiLCB0aWVfdG8pOyB9CgppbmxpbmUgaW9zOjp+aW9zKCkgewoKCgogICAgIAogICAg
IAogICAgb3BlcmF0b3IgZGVsZXRlW10gKF9hcnJheXMpOwp9Cn0gIAoKIyAzMSAiL3Vzci9saWIv
Z2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2lvc3Ry
ZWFtLmgiIDIgMwoKCmV4dGVybiAiQysrIiB7CmNsYXNzIGlzdHJlYW07IGNsYXNzIG9zdHJlYW07
CnR5cGVkZWYgaW9zJiAoKl9fbWFuaXApKGlvcyYpOwp0eXBlZGVmIGlzdHJlYW0mICgqX19pbWFu
aXApKGlzdHJlYW0mKTsKdHlwZWRlZiBvc3RyZWFtJiAoKl9fb21hbmlwKShvc3RyZWFtJik7Cgpl
eHRlcm4gaXN0cmVhbSYgd3MoaXN0cmVhbSYgaW5zKTsKZXh0ZXJuIG9zdHJlYW0mIGZsdXNoKG9z
dHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgZW5kbChvc3RyZWFtJiBvdXRzKTsKZXh0ZXJu
IG9zdHJlYW0mIGVuZHMob3N0cmVhbSYgb3V0cyk7CgpjbGFzcyBvc3RyZWFtIDogdmlydHVhbCBw
dWJsaWMgaW9zCnsKICAgICAKICAgIHZvaWQgZG9fb3NmeCgpOwogIHB1YmxpYzoKICAgIG9zdHJl
YW0oKSB7IH0KICAgIG9zdHJlYW0oc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllZD0gX19udWxs
ICk7CiAgICBpbnQgb3BmeCgpIHsKCWlmICghZ29vZCgpKSByZXR1cm4gMDsKCWVsc2UgeyBpZiAo
X3RpZSkgX3RpZS0+Zmx1c2goKTsgIDsgcmV0dXJuIDE7fSB9CiAgICB2b2lkIG9zZngoKSB7ICA7
CgkJICBpZiAoZmxhZ3MoKSAmIChpb3M6OnVuaXRidWZ8aW9zOjpzdGRpbykpCgkJICAgICAgZG9f
b3NmeCgpOyB9CiAgICBvc3RyZWFtJiBmbHVzaCgpOwogICAgb3N0cmVhbSYgcHV0KGNoYXIgYykg
eyBfc3RyYnVmLT5zcHV0YyhjKTsgcmV0dXJuICp0aGlzOyB9CgoKCgoKICAgIG9zdHJlYW0mIHdy
aXRlKGNvbnN0IGNoYXIgKnMsIHN0cmVhbXNpemUgbik7CiAgICBvc3RyZWFtJiB3cml0ZShjb25z
dCB1bnNpZ25lZCBjaGFyICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRlKChj
b25zdCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCBzaWduZWQgY2hhciAq
cywgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciopcywgbik7
fQogICAgb3N0cmVhbSYgd3JpdGUoY29uc3Qgdm9pZCAqcywgc3RyZWFtc2l6ZSBuKQogICAgICB7
IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0cmVhbSYgc2Vla3Aoc3Ry
ZWFtcG9zKTsKICAgIG9zdHJlYW0mIHNlZWtwKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsKICAgIHN0
cmVhbXBvcyB0ZWxscCgpOwogICAgb3N0cmVhbSYgZm9ybShjb25zdCBjaGFyICpmb3JtYXQgLi4u
KTsKICAgIG9zdHJlYW0mIHZmb3JtKGNvbnN0IGNoYXIgKmZvcm1hdCwgX19nbnVjX3ZhX2xpc3Qg
IGFyZ3MpOwoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY2hhciBjKTsKICAgIG9zdHJlYW0mIG9w
ZXJhdG9yPDwodW5zaWduZWQgY2hhciBjKSB7IHJldHVybiAoKnRoaXMpIDw8IChjaGFyKWM7IH0K
ICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoc2lnbmVkIGNoYXIgYykgeyByZXR1cm4gKCp0aGlzKSA8
PCAoY2hhciljOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IGNoYXIgKnMpOwogICAg
b3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCB1bnNpZ25lZCBjaGFyICpzKQoJeyByZXR1cm4gKCp0
aGlzKSA8PCAoY29uc3QgY2hhciopczsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCBz
aWduZWQgY2hhciAqcykKCXsgcmV0dXJuICgqdGhpcykgPDwgKGNvbnN0IGNoYXIqKXM7IH0KICAg
IG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qgdm9pZCAqcCk7CiAgICBvc3RyZWFtJiBvcGVyYXRv
cjw8KGludCBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgaW50IG4pOwogICAg
b3N0cmVhbSYgb3BlcmF0b3I8PChsb25nIG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNp
Z25lZCBsb25nIG4pOwoKICAgIF9fZXh0ZW5zaW9uX18gb3N0cmVhbSYgb3BlcmF0b3I8PChsb25n
IGxvbmcgbik7CiAgICBfX2V4dGVuc2lvbl9fIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQg
bG9uZyBsb25nIG4pOwoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoc2hvcnQgbikge3JldHVybiBv
cGVyYXRvcjw8KChpbnQpbik7fQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBzaG9y
dCBuKSB7cmV0dXJuIG9wZXJhdG9yPDwoKHVuc2lnbmVkIGludCluKTt9CgogICAgb3N0cmVhbSYg
b3BlcmF0b3I8PChib29sIGIpIHsgcmV0dXJuIG9wZXJhdG9yPDwoKGludCliKTsgfQoKICAgIG9z
dHJlYW0mIG9wZXJhdG9yPDwoZG91YmxlIG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChmbG9h
dCBuKSB7IHJldHVybiBvcGVyYXRvcjw8KChkb3VibGUpbik7IH0KCiAgICBvc3RyZWFtJiBvcGVy
YXRvcjw8KGxvbmcgZG91YmxlIG4pOwoKCgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChfX29tYW5p
cCBmdW5jKSB7IHJldHVybiAoKmZ1bmMpKCp0aGlzKTsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8
PChfX21hbmlwIGZ1bmMpIHsoKmZ1bmMpKCp0aGlzKTsgcmV0dXJuICp0aGlzO30KICAgIG9zdHJl
YW0mIG9wZXJhdG9yPDwoc3RyZWFtYnVmKik7CgoKCn07CgpjbGFzcyBpc3RyZWFtIDogdmlydHVh
bCBwdWJsaWMgaW9zCnsKICAgICAKcHJvdGVjdGVkOgogICAgc2l6ZV90ICAgX2djb3VudDsKCiAg
ICBpbnQgX3NraXBfd3MoKTsKICBwdWJsaWM6CiAgICBpc3RyZWFtKCk6IF9nY291bnQgKDApIHsg
fQogICAgaXN0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKnRpZWQ9IF9fbnVsbCApOwogICAg
aXN0cmVhbSYgZ2V0KGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpOwogICAg
aXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdc
bicpCgl7IHJldHVybiBnZXQoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0KICAgIGlzdHJlYW0m
IGdldChjaGFyJiBjKTsKICAgIGlzdHJlYW0mIGdldCh1bnNpZ25lZCBjaGFyJiBjKSB7IHJldHVy
biBnZXQoKGNoYXImKWMpOyB9CiAgICBpc3RyZWFtJiBnZXRsaW5lKGNoYXIqIHB0ciwgaW50IGxl
biwgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0bGluZSh1bnNpZ25lZCBjaGFy
KiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0bGluZSgoY2hh
ciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgZ2V0KHNpZ25lZCBjaGFyJiBjKSAg
eyByZXR1cm4gZ2V0KChjaGFyJiljKTsgfQogICAgaXN0cmVhbSYgZ2V0KHNpZ25lZCBjaGFyKiBw
dHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0KChjaGFyKilwdHIs
IGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXRsaW5lKHNpZ25lZCBjaGFyKiBwdHIsIGlu
dCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0bGluZSgoY2hhciopcHRyLCBs
ZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgcmVhZChjaGFyICpwdHIsIHN0cmVhbXNpemUgbik7
CiAgICBpc3RyZWFtJiByZWFkKHVuc2lnbmVkIGNoYXIgKnB0ciwgc3RyZWFtc2l6ZSBuKQogICAg
ICB7IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4pOyB9CiAgICBpc3RyZWFtJiByZWFkKHNpZ25l
ZCBjaGFyICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciopcHRy
LCBuKTsgfQogICAgaXN0cmVhbSYgcmVhZCh2b2lkICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAg
eyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYgZ2V0KHN0cmVhbWJ1
ZiYgc2IsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlzdHJlYW0mIGdldHMoY2hhciAqKnMsIGNo
YXIgZGVsaW0gPSAnXG4nKTsKICAgIGludCBpcGZ4KGludCBuZWVkID0gMCkgewoJaWYgKCFnb29k
KCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7IHJldHVybiAwOyB9CgllbHNlIHsKCSAgIDsKCSAgaWYg
KF90aWUgJiYgKG5lZWQgPT0gMCB8fCByZGJ1ZigpLT5pbl9hdmFpbCgpIDwgbmVlZCkpIF90aWUt
PmZsdXNoKCk7CgkgIGlmICghbmVlZCAmJiAoZmxhZ3MoKSAmIGlvczo6c2tpcHdzKSkgcmV0dXJu
IF9za2lwX3dzKCk7CgkgIGVsc2UgcmV0dXJuIDE7Cgl9CiAgICB9CiAgICBpbnQgaXBmeDAoKSB7
ICAKCWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyByZXR1cm4gMDsgfQoJZWxzZSB7
CgkgICA7CgkgIGlmIChfdGllKSBfdGllLT5mbHVzaCgpOwoJICBpZiAoZmxhZ3MoKSAmIGlvczo6
c2tpcHdzKSByZXR1cm4gX3NraXBfd3MoKTsKCSAgZWxzZSByZXR1cm4gMTsKCX0KICAgIH0KICAg
IGludCBpcGZ4MSgpIHsgIAoJaWYgKCFnb29kKCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7IHJldHVy
biAwOyB9CgllbHNlIHsKCSAgIDsKCSAgaWYgKF90aWUgJiYgcmRidWYoKS0+aW5fYXZhaWwoKSA9
PSAwKSBfdGllLT5mbHVzaCgpOwoJICByZXR1cm4gMTsKCX0KICAgIH0KICAgIHZvaWQgaXNmeCgp
IHsgIDsgfQogICAgaW50IGdldCgpIHsgaWYgKCFpcGZ4MSgpKSByZXR1cm4gKC0xKSA7CgkJZWxz
ZSB7IGludCBjaCA9IF9zdHJidWYtPnNidW1wYygpOwoJCSAgICAgICBpZiAoY2ggPT0gKC0xKSAp
IHNldChpb3M6OmVvZmJpdCk7CgkJICAgICAgIGlzZngoKTsKCQkgICAgICAgcmV0dXJuIGNoOwoJ
CSAgICAgfSB9CiAgICBpbnQgcGVlaygpOwogICAgc2l6ZV90ICAgZ2NvdW50KCkgeyByZXR1cm4g
X2djb3VudDsgfQogICAgaXN0cmVhbSYgaWdub3JlKGludCBuPTEsIGludCBkZWxpbSA9ICgtMSkg
KTsKICAgIGludCBzeW5jICgpOwogICAgaXN0cmVhbSYgc2Vla2coc3RyZWFtcG9zKTsKICAgIGlz
dHJlYW0mIHNlZWtnKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsKICAgIHN0cmVhbXBvcyB0ZWxsZygp
OwogICAgaXN0cmVhbSYgcHV0YmFjayhjaGFyIGNoKSB7CglpZiAoZ29vZCgpICYmIF9zdHJidWYt
PnNwdXRiYWNrYyhjaCkgPT0gKC0xKSApIGNsZWFyKGlvczo6YmFkYml0KTsKCXJldHVybiAqdGhp
czt9CiAgICBpc3RyZWFtJiB1bmdldCgpIHsKCWlmIChnb29kKCkgJiYgX3N0cmJ1Zi0+c3VuZ2V0
YygpID09ICgtMSkgKSBjbGVhcihpb3M6OmJhZGJpdCk7CglyZXR1cm4gKnRoaXM7fQogICAgaXN0
cmVhbSYgc2Nhbihjb25zdCBjaGFyICpmb3JtYXQgLi4uKTsKICAgIGlzdHJlYW0mIHZzY2FuKGNv
bnN0IGNoYXIgKmZvcm1hdCwgX19nbnVjX3ZhX2xpc3QgIGFyZ3MpOwoKCgoKCgogICAgaXN0cmVh
bSYgb3BlcmF0b3I+PihjaGFyKik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGNo
YXIqIHApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXApOyB9CiAgICBpc3RyZWFtJiBvcGVy
YXRvcj4+KHNpZ25lZCBjaGFyKnApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXApOyB9CiAg
ICBpc3RyZWFtJiBvcGVyYXRvcj4+KGNoYXImIGMpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1
bnNpZ25lZCBjaGFyJiBjKSB7cmV0dXJuIG9wZXJhdG9yPj4oKGNoYXImKWMpO30KICAgIGlzdHJl
YW0mIG9wZXJhdG9yPj4oc2lnbmVkIGNoYXImIGMpIHtyZXR1cm4gb3BlcmF0b3I+PigoY2hhciYp
Yyk7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihpbnQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9y
Pj4obG9uZyYpOwoKICAgIF9fZXh0ZW5zaW9uX18gaXN0cmVhbSYgb3BlcmF0b3I+Pihsb25nIGxv
bmcmKTsKICAgIF9fZXh0ZW5zaW9uX18gaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25n
IGxvbmcmKTsKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNob3J0Jik7CiAgICBpc3RyZWFtJiBv
cGVyYXRvcj4+KHVuc2lnbmVkIGludCYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25l
ZCBsb25nJik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0Jik7CgogICAg
aXN0cmVhbSYgb3BlcmF0b3I+Pihib29sJik7CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihmbG9h
dCYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihkb3VibGUmKTsKICAgIGlzdHJlYW0mIG9wZXJh
dG9yPj4obG9uZyBkb3VibGUmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oIF9fbWFuaXAgZnVu
YykgeygqZnVuYykoKnRoaXMpOyByZXR1cm4gKnRoaXM7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+
PihfX2ltYW5pcCBmdW5jKSB7IHJldHVybiAoKmZ1bmMpKCp0aGlzKTsgfQogICAgaXN0cmVhbSYg
b3BlcmF0b3I+PihzdHJlYW1idWYqKTsKfTsKCmNsYXNzIGlvc3RyZWFtIDogcHVibGljIGlzdHJl
YW0sIHB1YmxpYyBvc3RyZWFtCnsKICBwdWJsaWM6CiAgICBpb3N0cmVhbSgpIHsgfQogICAgaW9z
dHJlYW0oc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSp0aWVkPSBfX251bGwgKTsKfTsKCmNsYXNzIF9J
T19pc3RyZWFtX3dpdGhhc3NpZ24gOiBwdWJsaWMgaXN0cmVhbSB7CnB1YmxpYzoKICBfSU9faXN0
cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0oaXN0cmVhbSYpOwogIF9JT19pc3RyZWFtX3dpdGhh
c3NpZ24mIG9wZXJhdG9yPShfSU9faXN0cmVhbV93aXRoYXNzaWduJiByaHMpCiAgICB7IHJldHVy
biBvcGVyYXRvcj0gKHN0YXRpY19jYXN0PGlzdHJlYW0mPiAocmhzKSk7IH0KfTsKCmNsYXNzIF9J
T19vc3RyZWFtX3dpdGhhc3NpZ24gOiBwdWJsaWMgb3N0cmVhbSB7CnB1YmxpYzoKICBfSU9fb3N0
cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0ob3N0cmVhbSYpOwogIF9JT19vc3RyZWFtX3dpdGhh
c3NpZ24mIG9wZXJhdG9yPShfSU9fb3N0cmVhbV93aXRoYXNzaWduJiByaHMpCiAgICB7IHJldHVy
biBvcGVyYXRvcj0gKHN0YXRpY19jYXN0PG9zdHJlYW0mPiAocmhzKSk7IH0KfTsKCmV4dGVybiBf
SU9faXN0cmVhbV93aXRoYXNzaWduIGNpbjsKIApleHRlcm4gX0lPX29zdHJlYW1fd2l0aGFzc2ln
biBjb3V0LCBjZXJyOwoKZXh0ZXJuIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24gY2xvZwoKCgo7Cgpl
eHRlcm4gaXN0cmVhbSYgbG9jayhpc3RyZWFtJiBpbnMpOwpleHRlcm4gaXN0cmVhbSYgdW5sb2Nr
KGlzdHJlYW0mIGlucyk7CmV4dGVybiBvc3RyZWFtJiBsb2NrKG9zdHJlYW0mIG91dHMpOwpleHRl
cm4gb3N0cmVhbSYgdW5sb2NrKG9zdHJlYW0mIG91dHMpOwoKc3RydWN0IElvc3RyZWFtX2luaXQg
eyB9IDsgICAKCmlubGluZSBpb3MmIGRlYyhpb3MmIGkpCnsgaS5zZXRmKGlvczo6ZGVjLCBpb3M6
OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9CmlubGluZSBpb3MmIGhleChpb3Mm
IGkpCnsgaS5zZXRmKGlvczo6aGV4LCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVy
biBpOyB9CmlubGluZSBpb3MmIG9jdChpb3MmIGkpCnsgaS5zZXRmKGlvczo6b2N0LCBpb3M6OmRl
Y3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9Cn0gIAoKCiMgMjEgIkFDRVBhcmFtcy5o
IiAyCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9pb21hbmlwLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoj
cHJhZ21hIGludGVyZmFjZQoKCgoKCmV4dGVybiAiQysrIiB7CiAKIAogCgogCiAKIAogCnRlbXBs
YXRlPGNsYXNzIFRQPiBjbGFzcyBzbWFuaXA7ICAKCnRlbXBsYXRlPGNsYXNzIFRQPiBjbGFzcyBz
YXBwIHsKICAgIGlvcyYgKCpfZikoaW9zJiwgVFApOwpwdWJsaWM6IAogICAgc2FwcChpb3MmICgq
ZikoaW9zJiwgVFApKSA6IF9mKGYpIHt9CiAgICAgCiAgICBzbWFuaXA8VFA+IG9wZXJhdG9yKCko
VFAgYSkgCiAgICAgIHsgcmV0dXJuIHNtYW5pcDxUUD4oX2YsIGEpOyB9Cn07Cgp0ZW1wbGF0ZTxj
bGFzcyBUUD4KaW5saW5lIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYgaSwgY29uc3Qgc21h
bmlwPFRQPiYgbSk7CnRlbXBsYXRlPGNsYXNzIFRQPgppbmxpbmUgb3N0cmVhbSYgb3BlcmF0b3I8
PChvc3RyZWFtJiBvLCBjb25zdCBzbWFuaXA8VFA+JiBtKTsKCnRlbXBsYXRlIDxjbGFzcyBUUD4g
Y2xhc3Mgc21hbmlwIHsKICAgIGlvcyYgKCpfZikoaW9zJiwgVFApOwogICAgVFAgX2E7CnB1Ymxp
YzoKICAgIHNtYW5pcChpb3MmICgqZikoaW9zJiwgVFApLCBUUCBhKSA6IF9mKGYpLCBfYShhKSB7
fQogICAgIAogICAgZnJpZW5kIAogICAgICBpc3RyZWFtJiBvcGVyYXRvcj4+IDw+KGlzdHJlYW0m
IGksIGNvbnN0IHNtYW5pcDxUUD4mIG0pOwogICAgZnJpZW5kCiAgICAgIG9zdHJlYW0mIG9wZXJh
dG9yPDwgPD4ob3N0cmVhbSYgbywgY29uc3Qgc21hbmlwPFRQPiYgbSk7Cn07CgoKX19leHRlbnNp
b25fXyBleHRlcm4gdGVtcGxhdGUgY2xhc3Mgc21hbmlwPGludD47Cl9fZXh0ZW5zaW9uX18gZXh0
ZXJuIHRlbXBsYXRlIGNsYXNzIHNtYW5pcDxpb3M6OmZtdGZsYWdzPjsKCgp0ZW1wbGF0ZTxjbGFz
cyBUUD4KaW5saW5lIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYgaSwgY29uc3Qgc21hbmlw
PFRQPiYgbSkKeyAoKm0uX2YpKGksIG0uX2EpOyByZXR1cm4gaTsgfQoKdGVtcGxhdGU8Y2xhc3Mg
VFA+CmlubGluZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG8sIGNvbnN0IHNtYW5pcDxU
UD4mIG0pCnsgKCptLl9mKShvLCBtLl9hKTsgcmV0dXJuIG87fQoKCl9fZXh0ZW5zaW9uX18gZXh0
ZXJuIAp0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBjb25zdCBzbWFuaXA8
aW50PiYpOwpfX2V4dGVuc2lvbl9fIGV4dGVybiAKdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+
Pihpc3RyZWFtJiwgY29uc3Qgc21hbmlwPGlvczo6Zm10ZmxhZ3M+Jik7Cl9fZXh0ZW5zaW9uX18g
ZXh0ZXJuIAp0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjb25zdCBzbWFu
aXA8aW50PiYpOwpfX2V4dGVuc2lvbl9fIGV4dGVybiAKdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0
b3I8PChvc3RyZWFtJiwgY29uc3Qgc21hbmlwPGlvczo6Zm10ZmxhZ3M+Jik7CgoKIAogCiAKIAp0
ZW1wbGF0ZTxjbGFzcyBUUD4gY2xhc3MgaW1hbmlwOyAKCnRlbXBsYXRlPGNsYXNzIFRQPiBjbGFz
cyBpYXBwIHsKICAgIGlzdHJlYW0mICgqX2YpKGlzdHJlYW0mLCBUUCk7CnB1YmxpYzogCiAgICBp
YXBwKGlzdHJlYW0mICgqZikoaXN0cmVhbSYsVFApKSA6IF9mKGYpIHt9CiAgICAgCiAgICBpbWFu
aXA8VFA+IG9wZXJhdG9yKCkoVFAgYSkKICAgICAgIHsgcmV0dXJuIGltYW5pcDxUUD4oX2YsIGEp
OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVFA+CmlubGluZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlz
dHJlYW0mLCBjb25zdCBpbWFuaXA8VFA+Jik7Cgp0ZW1wbGF0ZSA8Y2xhc3MgVFA+IGNsYXNzIGlt
YW5pcCB7CiAgICBpc3RyZWFtJiAoKl9mKShpc3RyZWFtJiwgVFApOwogICAgVFAgX2E7CnB1Ymxp
YzoKICAgIGltYW5pcChpc3RyZWFtJiAoKmYpKGlzdHJlYW0mLCBUUCksIFRQIGEpIDogX2YoZiks
IF9hKGEpIHt9CiAgICAgCiAgICBmcmllbmQKICAgICAgaXN0cmVhbSYgb3BlcmF0b3I+PiA8Pihp
c3RyZWFtJiBpLCBjb25zdCBpbWFuaXA8VFA+JiBtKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBUUD4K
aW5saW5lIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYgaSwgY29uc3QgaW1hbmlwPFRQPiYg
bSkKeyByZXR1cm4gKCptLl9mKSggaSwgbS5fYSk7IH0KCiAKIAogCiAKdGVtcGxhdGU8Y2xhc3Mg
VFA+IGNsYXNzIG9tYW5pcDsgCgp0ZW1wbGF0ZTxjbGFzcyBUUD4gY2xhc3Mgb2FwcCB7CiAgICBv
c3RyZWFtJiAoKl9mKShvc3RyZWFtJiwgVFApOwpwdWJsaWM6IAogICAgb2FwcChvc3RyZWFtJiAo
KmYpKG9zdHJlYW0mLFRQKSkgOiBfZihmKSB7fQogICAgIAogICAgb21hbmlwPFRQPiBvcGVyYXRv
cigpKFRQIGEpCiAgICAgIHsgcmV0dXJuIG9tYW5pcDxUUD4oX2YsIGEpOyB9Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgVFA+CmlubGluZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjb25zdCBv
bWFuaXA8VFA+Jik7Cgp0ZW1wbGF0ZSA8Y2xhc3MgVFA+IGNsYXNzIG9tYW5pcCB7CiAgICBvc3Ry
ZWFtJiAoKl9mKShvc3RyZWFtJiwgVFApOwogICAgVFAgX2E7CnB1YmxpYzoKICAgIG9tYW5pcChv
c3RyZWFtJiAoKmYpKG9zdHJlYW0mLCBUUCksIFRQIGEpIDogX2YoZiksIF9hKGEpIHt9CiAgICAg
CiAgICBmcmllbmQKICAgICAgb3N0cmVhbSYgb3BlcmF0b3I8PCA8Pihvc3RyZWFtJiBvLCBjb25z
dCBvbWFuaXA8VFA+JiBtKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBUUD4KaW5saW5lIG9zdHJlYW0m
IG9wZXJhdG9yPDwob3N0cmVhbSYgbywgY29uc3Qgb21hbmlwPFRQPiYgbSkKeyByZXR1cm4gKCpt
Ll9mKShvLCBtLl9hKTsgfQoKIAogCiAKCiAKIAogCiAKCgoKCgpleHRlcm4gaW9zJiBfX2lvbWFu
aXBfc2V0YmFzZSAgKGlvcyYsICAgaW50ICk7IGlubGluZSAgIHNtYW5pcCA8ICBpbnQgPiAgIHNl
dGJhc2UgICggIGludCAgbikgeyByZXR1cm4gICBzbWFuaXAgPCAgaW50ID4gKF9faW9tYW5pcF9z
ZXRiYXNlICwgbik7IH0gCmV4dGVybiBpb3MmIF9faW9tYW5pcF9zZXRmaWxsICAoaW9zJiwgICBp
bnQgKTsgaW5saW5lICAgc21hbmlwIDwgIGludCA+ICAgc2V0ZmlsbCAgKCAgaW50ICBuKSB7IHJl
dHVybiAgIHNtYW5pcCA8ICBpbnQgPiAoX19pb21hbmlwX3NldGZpbGwgLCBuKTsgfSAKZXh0ZXJu
IGlvcyYgX19pb21hbmlwX3NldHByZWNpc2lvbiAgKGlvcyYsICAgaW50ICk7IGlubGluZSAgIHNt
YW5pcCA8ICBpbnQgPiAgIHNldHByZWNpc2lvbiAgKCAgaW50ICBuKSB7IHJldHVybiAgIHNtYW5p
cCA8ICBpbnQgPiAoX19pb21hbmlwX3NldHByZWNpc2lvbiAsIG4pOyB9IApleHRlcm4gaW9zJiBf
X2lvbWFuaXBfc2V0dyAgKGlvcyYsICAgaW50ICk7IGlubGluZSAgIHNtYW5pcCA8ICBpbnQgPiAg
IHNldHcgICggIGludCAgbikgeyByZXR1cm4gICBzbWFuaXAgPCAgaW50ID4gKF9faW9tYW5pcF9z
ZXR3ICwgbik7IH0gCgpleHRlcm4gaW9zJiBfX2lvbWFuaXBfcmVzZXRpb3NmbGFncyAgKGlvcyYs
ICAgaW9zOjpmbXRmbGFncyApOyBpbmxpbmUgICBzbWFuaXAgPCAgaW9zOjpmbXRmbGFncyA+ICAg
cmVzZXRpb3NmbGFncyAgKCAgaW9zOjpmbXRmbGFncyAgbikgeyByZXR1cm4gICBzbWFuaXAgPCAg
aW9zOjpmbXRmbGFncyA+IChfX2lvbWFuaXBfcmVzZXRpb3NmbGFncyAsIG4pOyB9IApleHRlcm4g
aW9zJiBfX2lvbWFuaXBfc2V0aW9zZmxhZ3MgIChpb3MmLCAgIGlvczo6Zm10ZmxhZ3MgKTsgaW5s
aW5lICAgc21hbmlwIDwgIGlvczo6Zm10ZmxhZ3MgPiAgIHNldGlvc2ZsYWdzICAoICBpb3M6OmZt
dGZsYWdzICBuKSB7IHJldHVybiAgIHNtYW5pcCA8ICBpb3M6OmZtdGZsYWdzID4gKF9faW9tYW5p
cF9zZXRpb3NmbGFncyAsIG4pOyB9IAp9ICAKCgojIDIyICJBQ0VQYXJhbXMuaCIgMgoKIyAxICIv
dXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvZnN0cmVhbS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaW50
ZXJmYWNlCgoKCmV4dGVybiAiQysrIiB7CmNsYXNzIGZzdHJlYW1iYXNlIDogdmlydHVhbCBwdWJs
aWMgaW9zIHsKCiAgICBtdXRhYmxlIGZpbGVidWYgX19teV9mYjsgIAoKICAgIHZvaWQgX19mYl9p
bml0ICgpOwogIHB1YmxpYzoKICAgIGZzdHJlYW1iYXNlKCk7CiAgICBmc3RyZWFtYmFzZShpbnQg
ZmQpOwogICAgZnN0cmVhbWJhc2UoaW50IGZkLCBjaGFyICpwLCBpbnQgbCk7ICAKICAgIGZzdHJl
YW1iYXNlKGNvbnN0IGNoYXIgKm5hbWUsIGludCBtb2RlLCBpbnQgcHJvdD0wNjY0KTsKICAgIHZv
aWQgY2xvc2UoKTsKCiAgICBmaWxlYnVmKiByZGJ1ZigpIGNvbnN0IHsgcmV0dXJuICZfX215X2Zi
OyB9CgoKCiAgICB2b2lkIG9wZW4oY29uc3QgY2hhciAqbmFtZSwgaW50IG1vZGUsIGludCBwcm90
PTA2NjQpOwogICAgaW50IGlzX29wZW4oKSBjb25zdCB7IHJldHVybiByZGJ1ZigpLT5pc19vcGVu
KCk7IH0KICAgIHZvaWQgc2V0YnVmKGNoYXIgKnB0ciwgaW50IGxlbikgeyByZGJ1ZigpLT5zZXRi
dWYocHRyLCBsZW4pOyB9CiAgICB2b2lkIGF0dGFjaChpbnQgZmQpOwoKCgoKfTsKCmNsYXNzIGlm
c3RyZWFtIDogcHVibGljIGZzdHJlYW1iYXNlLCBwdWJsaWMgaXN0cmVhbSB7CiAgcHVibGljOgog
ICAgaWZzdHJlYW0oKSA6IGZzdHJlYW1iYXNlKCkgeyB9CiAgICBpZnN0cmVhbShpbnQgZmQpIDog
ZnN0cmVhbWJhc2UoZmQpIHsgfQogICAgaWZzdHJlYW0oaW50IGZkLCBjaGFyICpwLCBpbnQgbCkg
OiBmc3RyZWFtYmFzZShmZCwgcCwgbCkgeyB9ICAKICAgIGlmc3RyZWFtKGNvbnN0IGNoYXIgKm5h
bWUsIGludCBtb2RlPWlvczo6aW4sIGludCBwcm90PTA2NjQpCgk6IGZzdHJlYW1iYXNlKG5hbWUs
IG1vZGUgfCBpb3M6OmluLCBwcm90KSB7IH0KICAgIHZvaWQgb3Blbihjb25zdCBjaGFyICpuYW1l
LCBpbnQgbW9kZT1pb3M6OmluLCBpbnQgcHJvdD0wNjY0KQoJeyBmc3RyZWFtYmFzZTo6b3Blbihu
YW1lLCBtb2RlIHwgaW9zOjppbiwgcHJvdCk7IH0KfTsKCmNsYXNzIG9mc3RyZWFtIDogcHVibGlj
IGZzdHJlYW1iYXNlLCBwdWJsaWMgb3N0cmVhbSB7CiAgcHVibGljOgogICAgb2ZzdHJlYW0oKSA6
IGZzdHJlYW1iYXNlKCkgeyB9CiAgICBvZnN0cmVhbShpbnQgZmQpIDogZnN0cmVhbWJhc2UoZmQp
IHsgfQogICAgb2ZzdHJlYW0oaW50IGZkLCBjaGFyICpwLCBpbnQgbCkgOiBmc3RyZWFtYmFzZShm
ZCwgcCwgbCkgeyB9ICAKICAgIG9mc3RyZWFtKGNvbnN0IGNoYXIgKm5hbWUsIGludCBtb2RlPWlv
czo6b3V0LCBpbnQgcHJvdD0wNjY0KQoJOiBmc3RyZWFtYmFzZShuYW1lLCBtb2RlIHwgaW9zOjpv
dXQsIHByb3QpIHsgfQogICAgdm9pZCBvcGVuKGNvbnN0IGNoYXIgKm5hbWUsIGludCBtb2RlPWlv
czo6b3V0LCBpbnQgcHJvdD0wNjY0KQoJeyBmc3RyZWFtYmFzZTo6b3BlbihuYW1lLCBtb2RlIHwg
aW9zOjpvdXQsIHByb3QpOyB9Cn07CgpjbGFzcyBmc3RyZWFtIDogcHVibGljIGZzdHJlYW1iYXNl
LCBwdWJsaWMgaW9zdHJlYW0gewogIHB1YmxpYzoKICAgIGZzdHJlYW0oKSA6IGZzdHJlYW1iYXNl
KCkgeyB9CiAgICBmc3RyZWFtKGludCBmZCkgOiBmc3RyZWFtYmFzZShmZCkgeyB9CiAgICBmc3Ry
ZWFtKGNvbnN0IGNoYXIgKm5hbWUsIGludCBtb2RlLCBpbnQgcHJvdD0wNjY0KQoJOiBmc3RyZWFt
YmFzZShuYW1lLCBtb2RlLCBwcm90KSB7IH0KICAgIGZzdHJlYW0oaW50IGZkLCBjaGFyICpwLCBp
bnQgbCkgOiBmc3RyZWFtYmFzZShmZCwgcCwgbCkgeyB9ICAKICAgIHZvaWQgb3Blbihjb25zdCBj
aGFyICpuYW1lLCBpbnQgbW9kZSwgaW50IHByb3Q9MDY2NCkKCXsgZnN0cmVhbWJhc2U6Om9wZW4o
bmFtZSwgbW9kZSwgcHJvdCk7IH0KfTsKfSAgCgojIDIzICJBQ0VQYXJhbXMuaCIgMgoKCiMgMSAi
Z2VuZXJpYy5oIiAxCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgogCnR5cGVkZWYgaW50ICgqR1BUKShpbnQsY2hhciopOwoKCgoKCgoKCgojIDI1ICJBQ0VQYXJh
bXMuaCIgMgoKCiAKCgoKIAoKCgoKCgoKCgogCgoKIAoKCgoKCiAKCgoKCiAKCgoKCgoKCgoKCgoK
CgoKCgogCgogCgoKCiAKCgoKIAoKCiAKCgoKCgoKCgoKCgogCgoKCgoKCgogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKCgoKIAogCgoKCgogCgoKCiAKCgoKIAoK
CgogCgoKCgoKIAoKCgoKCgogCgoKCiAKCgoKCiAKCgoKCgoKCgoKIAoKCgoKCiAKCgoKCgoKCgoK
IAoKCgoKIAoKCgoKCgoKCiAKCgoKCgogCgoKCgoKCnR5cGVkZWYgaW50IElOVEVHRVI7Cgp0eXBl
ZGVmIGZsb2F0IFJFQUw7Cgp0eXBlZGVmIGRvdWJsZSBET1VCTEU7CnR5cGVkZWYgY2hhciBDSEFS
QUNURVI7CgoKIAoKCiAKIAoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKIyAxICJBQ0VGb3J0
cmFuSW50ZXJmYWNlcy5oIiAxCgoKCiAKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCiAKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDI4NCAiQUNFUGFyYW1zLmgiIDIKCgoKaW5saW5l
IGludCBtYXgoY29uc3QgaW50IGEsIGNvbnN0IGludCBiKQogICAgICAgeyByZXR1cm4oKGEgPiBi
KSA/IGEgOiBiKTsgfQppbmxpbmUgaW50IG1pbihjb25zdCBpbnQgYSwgY29uc3QgaW50IGIpCiAg
ICAgICB7IHJldHVybigoYSA8IGIpID8gYSA6IGIpOyB9CgppbmxpbmUgdW5zaWduZWQgbWF4KGNv
bnN0IHVuc2lnbmVkIGEsIGNvbnN0IHVuc2lnbmVkIGIpCiAgICAgICB7IHJldHVybigoYSA+IGIp
ID8gYSA6IGIpOyB9CmlubGluZSB1bnNpZ25lZCBtaW4oY29uc3QgdW5zaWduZWQgYSwgY29uc3Qg
dW5zaWduZWQgYikKICAgICAgIHsgcmV0dXJuKChhIDwgYikgPyBhIDogYik7IH0KCiAKIAogCiAK
CgoKCgoKIAoKIAogCiAKCiMgMSAiREFHSFBhcmFtcy5oIiAxCgoKCiAKCgoKCgoKCgoKCiAKIAog
CiAKIAogCiAKIAoKIAoKIAoKCgogCgoKCgoKCgoKIAoKCiAKCgoKCgogCgoKCgoKCgoKCgogCgoK
CiAKCgogCgoKCgoKCgoKCgoKIAoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAK
CgoKCgoKCgoKCiAKCgoKCgoKCiAKIAoKCgoKIAoKCgogCgoKCiAKCgoKIAoKCgoKCiAKCgoKCgoK
IAoKCgogCgoKCgogCiAKIAogCiAKIAogCgogCiAKIAogCiAKCiAKIAogCiAKIAogCiAKCiAKCgoK
CiAKCgoKCgoKCgogCgoKCgoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgogCiAKIAogCiAK
IAoKIAogCiAKIAogCgogCiAKIAogCgogCiAKIAogCgogCiAKIAoKIAoKCgoKCgogCiAKIAogCiAK
IAoKIAogCiAKIAoKIAogCiAKIAoKIAogCiAKIAoKIAogCiAKIAogCgogCgojIDEgIkRBR0hQYXJh
bXNPbGQuaCIgMQoKCgogCgoKCgoKCgoKCgogCgoKCiAKCgoKIAoKCgogCgoKCgoKIyAyOTMgIkRB
R0hQYXJhbXMuaCIgMgoKCgojIDMxMyAiQUNFUGFyYW1zLmgiIDIKCgoKIyAxNCAiQUNFRGlzdHJp
YnV0aW9uLmgiIDIKCiMgMSAiQUNFRGVmYXVsdHMuaCIgMQoKCgogIAoKCgoKCgoKCgoKIAoKCgoK
CgogCiAKIAoKCgogCiAKIAoKCiAKIAogCgoKCiAKIAogCiAKIAoKCiAKIAogCgoKIAogCiAKCgog
CiAKIAoKCiAKIAogCgoKIAogCiAKCgogCiAKIAoKIAogCiAKCgogCiAKIAoKCgoKIAogCiAKCgoK
CgoKCgoKCgoKCgoKCgoKIAogCiAKCgoKCiAKIAogCiAKIAoKCgoKIAogCiAKCgoKIyAxNSAiQUNF
RGlzdHJpYnV0aW9uLmgiIDIKCgojIDEgIkxpc3QuaCIgMQoKCgogCgoKCgoKCgoKCgoKIyAxICIv
dXNyL2luY2x1ZGUvbWFsbG9jLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK
CgoKCgoKCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5j
bHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgoKCgoKCiAKCiAKCgoKCiAKCgogCgoKCgoKIAoK
CiMgNjEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYu
aCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCnR5cGVkZWYgaW50IHB0cmRpZmZfdDsKCgoKCgoKCgoKIAoKCgoKIAoKIAoKCiMg
MTg4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVmLmgi
IDMKCgoKCgogCgoKCgogCgoKIyAyNjkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1
LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKIyAzMTcgIi91c3Iv
bGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoK
CgoKCgoKCgoKCgoKIAoKCgoKCgoKIyA0NCAiL3Vzci9pbmNsdWRlL21hbGxvYy5oIiAyIDMKCgoK
CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKIAoKCgojIDkzICIvdXNyL2luY2x1ZGUvbWFsbG9j
LmgiIDMKCgoKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgogCgoKCgoKZXh0ZXJuIGludCBfX21hbGxv
Y19pbml0aWFsaXplZDsKCiAKCgoKCiAKZXh0ZXJuIHZvaWQgKiAgbWFsbG9jICAoc2l6ZV90IF9f
c2l6ZSkgIHRocm93ICgpICAgIDsKCiAKZXh0ZXJuIHZvaWQgKiAgY2FsbG9jICAoc2l6ZV90IF9f
bm1lbWIsIHNpemVfdCBfX3NpemUpICB0aHJvdyAoKSAgCiAgICAgICAgOwoKIAoKZXh0ZXJuIHZv
aWQgKiAgcmVhbGxvYyAgKHZvaWQgKiAgX19wdHIsCgkJCQkJICAgc2l6ZV90IF9fc2l6ZSkgIHRo
cm93ICgpICAKICAgICAgICA7CgogCmV4dGVybiB2b2lkIGZyZWUgICh2b2lkICogIF9fcHRyKSAg
dGhyb3cgKCkgIDsKCiAKZXh0ZXJuIHZvaWQgY2ZyZWUgICh2b2lkICogIF9fcHRyKSAgdGhyb3cg
KCkgIDsKCiAKZXh0ZXJuIHZvaWQgKiAgbWVtYWxpZ24gIChzaXplX3QgX19hbGlnbm1lbnQsIHNp
emVfdCBfX3NpemUpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gdm9pZCAqICB2YWxsb2MgIChzaXpl
X3QgX19zaXplKSAgdGhyb3cgKCkgICAgOwoKIAoKZXh0ZXJuIHZvaWQgKiAgIHB2YWxsb2MgIChz
aXplX3QgX19zaXplKSAgdGhyb3cgKCkgIAogICAgICAgIDsKCiAKCmV4dGVybiB2b2lkICogICgq
X19tb3JlY29yZSkgIChwdHJkaWZmX3QgX19zaXplKSAgOwoKIApleHRlcm4gdm9pZCAqICBfX2Rl
ZmF1bHRfbW9yZWNvcmUgIChwdHJkaWZmX3QgX19zaXplKSAgdGhyb3cgKCkgIAogICAgICAgIDsK
CiAKc3RydWN0IG1hbGxpbmZvIHsKICBpbnQgYXJlbmE7ICAgICAKICBpbnQgb3JkYmxrczsgICAK
ICBpbnQgc21ibGtzOyAgICAKICBpbnQgaGJsa3M7ICAgICAKICBpbnQgaGJsa2hkOyAgICAKICBp
bnQgdXNtYmxrczsgICAKICBpbnQgZnNtYmxrczsgICAKICBpbnQgdW9yZGJsa3M7ICAKICBpbnQg
Zm9yZGJsa3M7ICAKICBpbnQga2VlcGNvc3Q7ICAKfTsKCiAKZXh0ZXJuIHN0cnVjdCBtYWxsaW5m
byBtYWxsaW5mbyAgKHZvaWQpICB0aHJvdyAoKSAgOwoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKCgog
CmV4dGVybiBpbnQgbWFsbG9wdCAgKGludCBfX3BhcmFtLCBpbnQgX192YWwpICB0aHJvdyAoKSAg
OwoKIAoKZXh0ZXJuIGludCBtYWxsb2NfdHJpbSAgKHNpemVfdCBfX3BhZCkgIHRocm93ICgpICA7
CgogCgpleHRlcm4gc2l6ZV90IG1hbGxvY191c2FibGVfc2l6ZSAgKHZvaWQgKiAgX19wdHIpICB0
aHJvdyAoKSAgOwoKIApleHRlcm4gdm9pZCBtYWxsb2Nfc3RhdHMgICh2b2lkKSAgdGhyb3cgKCkg
IDsKCiAKZXh0ZXJuIHZvaWQgKiAgbWFsbG9jX2dldF9zdGF0ZSAgKHZvaWQpICB0aHJvdyAoKSAg
OwoKIAoKZXh0ZXJuIGludCBtYWxsb2Nfc2V0X3N0YXRlICAodm9pZCAqICBfX3B0cikgIHRocm93
ICgpICA7CgoKIAoKCmV4dGVybiB2b2lkICgqX19tYWxsb2NfaW5pdGlhbGl6ZV9ob29rKSAgKHZv
aWQpICA7CiAKZXh0ZXJuIHZvaWQgKCpfX2ZyZWVfaG9vaykgICh2b2lkICogIF9fcHRyLAoJCQkJ
CV9fY29uc3Qgdm9pZCAqICkgIDsKZXh0ZXJuIHZvaWQgKiAgKCpfX21hbGxvY19ob29rKSAgKHNp
emVfdCBfX3NpemUsCgkJCQkJCSAgICBfX2NvbnN0IHZvaWQgKiApICA7CmV4dGVybiB2b2lkICog
ICgqX19yZWFsbG9jX2hvb2spICAodm9pZCAqICBfX3B0ciwKCQkJCQkJICAgICBzaXplX3QgX19z
aXplLAoJCQkJCQkgICAgIF9fY29uc3Qgdm9pZCAqICkgIDsKZXh0ZXJuIHZvaWQgKiAgKCpfX21l
bWFsaWduX2hvb2spICAoc2l6ZV90IF9fYWxpZ25tZW50LAoJCQkJCQkgICAgICBzaXplX3QgX19z
aXplLAoJCQkJCQkgICAgICBfX2NvbnN0IHZvaWQgKiApICA7CmV4dGVybiB2b2lkICgqX19hZnRl
cl9tb3JlY29yZV9ob29rKSAgKHZvaWQpICA7CgogCmV4dGVybiB2b2lkIF9fbWFsbG9jX2NoZWNr
X2luaXQgICh2b2lkKSAgdGhyb3cgKCkgIDsKCgoKfTsgIAoKCgojIDE2ICJMaXN0LmgiIDIKCiMg
MSAiZmFzdEFsbG9jLmgiIDEKCgoKIAoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9h
c3NlcnQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CiAKCgoKCiMgNjMgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwoKCmV4dGVybiAiQyIgeyAKCiAK
ZXh0ZXJuIHZvaWQgX19hc3NlcnRfZmFpbCAoX19jb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgX19j
b25zdCBjaGFyICpfX2ZpbGUsCgkJCSAgIHVuc2lnbmVkIGludCBfX2xpbmUsIF9fY29uc3QgY2hh
ciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5f
XykpOwoKIApleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50IF9fZXJybnVtLCBf
X2NvbnN0IGNoYXIgKl9fZmlsZSwKCQkJCSAgdW5zaWduZWQgaW50IF9fbGluZSwKCQkJCSAgX19j
b25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgpICBfX2F0dHJpYnV0ZV9fICgoX19u
b3JldHVybl9fKSk7CgoKIAoKZXh0ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0IGNoYXIgKl9fYXNz
ZXJ0aW9uLCBjb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX2xpbmUpCiAgICAgdGhyb3cgKCkgIF9f
YXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgp9IAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK
CgoKCgoKCgojIDIwICJmYXN0QWxsb2MuaCIgMgoKCmNsYXNzIGZhc3RBbGxvYyAKICB7CnB1Ymxp
YzoKICAgc3RydWN0IGxpbmsgeyBzdHJ1Y3QgbGluayAqbmV4dDsgfTsgICAKICAgc3RydWN0IGxv
bmdsaW5rIHsgCiAgICAgIHN0cnVjdCBsaW5rICppdGVtOyBzdHJ1Y3QgbG9uZ2xpbmsgKm5leHQ7
ICAKICAgICAgaW5saW5lIGxvbmdsaW5rKCkgOml0ZW0oMCksIG5leHQoMCkge30gCiAgICAgIGlu
bGluZSB+bG9uZ2xpbmsoKSB7IAogICAgICAgIGlmIChpdGVtKSBkZWxldGUgW10gKGNoYXIqKSBp
dGVtOyAKICAgICAgICBpZiAobmV4dCkgZGVsZXRlIG5leHQ7IAogICAgICB9CiAgIH07CnByaXZh
dGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgIHVuc2lnbmVkIGlu
dCBibG9ja3NpemU7ICAgICAgICAgICAgICAgCiAgIHVuc2lnbmVkIGludCBuYmxvY2tzOyAgICAg
ICAgICAgICAgICAgCiAgIGxpbmsgKmhlYWQ7ICAgICAgICAgICAgICAgICAgICAKICAgbG9uZ2xp
bmsgKnRvcDsgICAgICAgICAgICAgICAgIAogICBsb25nbGluayAqY3VyOyAgICAgICAgICAgICAg
ICAgCiAgIGZhc3RBbGxvYyhjb25zdCBmYXN0QWxsb2MmKTsgICAgICAgICAgCiAgIHZvaWQgb3Bl
cmF0b3IgPSAoY29uc3QgZmFzdEFsbG9jJik7ICAgCiAgIHZvaWQgbWFsbG9jKCk7ICAgICAgICAg
ICAgICAgICAgICAgICAgCnB1YmxpYzoKICAgZmFzdEFsbG9jKGNvbnN0IHVuc2lnbmVkIGludCBz
aXplLCBjb25zdCB1bnNpZ25lZCBpbnQgYXRhdGltZSk7CiAgIGlubGluZSB+ZmFzdEFsbG9jKCkg
eyBkZWxldGUgdG9wOyB9CgogICBpbmxpbmUgdm9pZCAqYWxsb2MoKQogICAgIHsKICAgICAgaWYg
KGhlYWQgPT0gKChzdHJ1Y3QgbGluayAqKSAwKSkgbWFsbG9jKCk7CiAgICAgIHN0cnVjdCBsaW5r
ICpibG9jayA9IGhlYWQ7CiAgICAgIGhlYWQgPSBibG9jay0+bmV4dDsKICAgICAgcmV0dXJuKGJs
b2NrKTsKICAgICB9CgogICBpbmxpbmUgdm9pZCBmcmVlKHZvaWQgKmJsb2NrKQogICAgIHsKICAg
ICAgKChzdHJ1Y3QgbGluayAqKSBibG9jayktPm5leHQgPSBoZWFkOwogICAgICBoZWFkID0gKHN0
cnVjdCBsaW5rICopIGJsb2NrOwogICAgIH0KICB9OwoKCiMgMTcgIkxpc3QuaCIgMgoKCgoKCgoK
CnRlbXBsYXRlIDxjbGFzcyBUeXBlPiBjbGFzcyBMaXN0OwoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+
CmNsYXNzIExpc3RJdGVtCiAgewogICBUeXBlIGl0ZW07CgoKCiAgIGNsYXNzIExpc3RJdGVtPFR5
cGU+ICpuZXh0OwoKCiAgIGlubGluZSBMaXN0SXRlbShjb25zdCBUeXBlJiB0KSA6IGl0ZW0odCks
IG5leHQoMCkgeyB9CiAgIGlubGluZSB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUsIHZv
aWQqIGJ1ZikgeyByZXR1cm4gYnVmOyB9CiAKCgogICBpbmxpbmUgdm9pZCBvcGVyYXRvciBkZWxl
dGUodm9pZCogYnVmLCBzaXplX3Qgc2l6ZSkge30KICAgaW5saW5lIH5MaXN0SXRlbSgpIHt9Cgog
ICBmcmllbmQgY2xhc3MgTGlzdDxUeXBlPjsKICB9OwoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+CmNs
YXNzIExpc3QKICB7CiAgIGZhc3RBbGxvYyBibG9jazsKCiAgIGludCBuOwkJCSAKICAgTGlzdEl0
ZW08VHlwZT4gKmhlYWQ7CSAKICAgTGlzdEl0ZW08VHlwZT4gKnRhaWw7CSAKCnByaXZhdGU6CiAg
IHZvaWQgb3BlcmF0b3IgPSAoY29uc3QgTGlzdDxUeXBlPiYpOwogICBMaXN0KGNvbnN0IExpc3Q8
VHlwZT4mKTsKCnB1YmxpYzoKICAgaW5saW5lIExpc3QoKSA6IGJsb2NrKHNpemVvZihMaXN0SXRl
bTxUeXBlPiksICgzMikgKSwgCgkJICAgbigwKSwgaGVhZCgwKSwgdGFpbCgwKSB7IH0KICAgaW5s
aW5lIExpc3QoY29uc3QgaW50IGNudCkgCiAgICAgICAgOiBibG9jayhzaXplb2YoTGlzdEl0ZW08
VHlwZT4pLCBjbnQpLCAKICAgICAgICAgIG4oMCksIGhlYWQoMCksIHRhaWwoMCkgeyB9CiAgIGlu
bGluZSBpbnQgbnVtYmVyKCkgY29uc3QgeyByZXR1cm4obik7IH0KICAgaW5saW5lIGludCBpc2Vt
cHR5KCkgY29uc3QgeyByZXR1cm4obiA9PSAwKTsgfQogICB+TGlzdCgpOwoKICAgIAogICB2b2lk
IGFkZChjb25zdCBUeXBlJiB0KTsKICAgdm9pZCBhZGQoY29uc3QgTGlzdDxUeXBlPiYgb3RoZXIp
OwogICB2b2lkIGNvbWJpbmUoTGlzdDxUeXBlPiYgb3RoZXIpOwogICB2b2lkIHBvcCgpOwogICB2
b2lkIGVtcHR5KCk7CiAgIGlubGluZSBjb25zdCBUeXBlJiBmaXJzdCgpIGNvbnN0IHsgcmV0dXJu
KGhlYWQtPml0ZW0pOyB9CiAgIHZvaWQgYXJyYXkoVHlwZSAqKiYgYXJyYXksIGludCAmY250KSBj
b25zdDsKICAgdm9pZCBhcnJheShUeXBlIComIGFycmF5LCBpbnQgJmNudCkgY29uc3Q7CiAgIGlu
bGluZSB2b2lkIHJlc2V0KCkgeyBuID0gMDsgaGVhZCA9IDA7IHRhaWwgPSAwOyB9CgogICAgCiAg
IGlubGluZSBMaXN0SXRlbTxUeXBlPiAqSGVhZCgpIGNvbnN0IHsgcmV0dXJuKGhlYWQpOyB9CiAg
IGlubGluZSBMaXN0SXRlbTxUeXBlPiAqVGFpbCgpIGNvbnN0IHsgcmV0dXJuKHRhaWwpOyB9CiAg
IGlubGluZSBMaXN0SXRlbTxUeXBlPiAqTmV4dChMaXN0SXRlbTxUeXBlPiAqbGlzdGl0ZW0pICBj
b25zdAoJeyByZXR1cm4gKCAobGlzdGl0ZW0pID8gbGlzdGl0ZW0tPm5leHQgOiBoZWFkICk7IH0K
ICAgaW5saW5lIFR5cGUmIEl0ZW0oTGlzdEl0ZW08VHlwZT4gKmxpc3RpdGVtKSBjb25zdAoJeyBy
ZXR1cm4gKCAobGlzdGl0ZW0pID8gbGlzdGl0ZW0tPml0ZW0gOiBoZWFkLT5pdGVtICk7IH0KCiAg
ICAKICAgdm9pZCByZW1vdmUoTGlzdEl0ZW08VHlwZT4qJiBwaSwgTGlzdEl0ZW08VHlwZT4qJiBs
aSk7CiB9OwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDE3ICJBQ0VEaXN0cmlidXRp
b24uaCIgMgoKIyAxICJHcmlkQm94LmgiIDEKCgoKICAKCgoKCgoKCgoKCiMgMSAiQkJveC5oIiAx
CgoKCiAKCgoKCgoKCgoKCgoKCiMgMSAibHBhcnhfY29weXJpZ2h0LmgiIDEKIAoKCgoKCgoKCgoK
CgoKCiMgMTggIkJCb3guaCIgMgoKIyAxICJDb29yZHMuaCIgMQoKCgogCgoKCgoKCgoKCgogCgoK
CgoKCgoKCgoKCgoKCgoKIyAxICJscGFyeF9jb3B5cmlnaHQuaCIgMQogCgoKCgoKCgoKCgoKCgoK
IyAzMyAiQ29vcmRzLmgiIDIKCgoKIyAxICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMwogCgoK
CgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgojIDYzICIvdXNy
L2luY2x1ZGUvYXNzZXJ0LmgiIDMKCgpleHRlcm4gIkMiIHsgCgogCmV4dGVybiB2b2lkIF9fYXNz
ZXJ0X2ZhaWwgKF9fY29uc3QgY2hhciAqX19hc3NlcnRpb24sIF9fY29uc3QgY2hhciAqX19maWxl
LAoJCQkgICB1bnNpZ25lZCBpbnQgX19saW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAg
ICAgdGhyb3cgKCkgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCiAKZXh0ZXJuIHZv
aWQgX19hc3NlcnRfcGVycm9yX2ZhaWwgKGludCBfX2Vycm51bSwgX19jb25zdCBjaGFyICpfX2Zp
bGUsCgkJCQkgIHVuc2lnbmVkIGludCBfX2xpbmUsCgkJCQkgIF9fY29uc3QgY2hhciAqX19mdW5j
dGlvbikKICAgICB0aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCiAK
CmV4dGVybiB2b2lkIF9fYXNzZXJ0IChjb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgY29uc3QgY2hh
ciAqX19maWxlLCBpbnQgX19saW5lKQogICAgIHRocm93ICgpICBfX2F0dHJpYnV0ZV9fICgoX19u
b3JldHVybl9fKSk7CgoKfSAKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKIyAzNiAiQ29v
cmRzLmgiIDIKCgoKCgoKCgpjbGFzcyBDb29yZHNJdGVyYXRvcjsKCmNsYXNzIENvb3JkcyAKewog
IGZyaWVuZCBpc3RyZWFtJiBvcGVyYXRvciA+PiAoaXN0cmVhbSYgcywgQ29vcmRzJiBjKTsKICBm
cmllbmQgb3N0cmVhbSYgb3BlcmF0b3IgPDwgKG9zdHJlYW0mIHMsIGNvbnN0IENvb3JkcyYgYyk7
CiAgZnJpZW5kIGlmc3RyZWFtJiBvcGVyYXRvciA+PiAoaWZzdHJlYW0mIHMsIENvb3JkcyYgYyk7
CiAgZnJpZW5kIG9mc3RyZWFtJiBvcGVyYXRvciA8PCAob2ZzdHJlYW0mIHMsIGNvbnN0IENvb3Jk
cyYgYyk7CiAgCiAgaW50IGNbKDMpIF07CiAgCiBwdWJsaWM6CiAgc2hvcnQgcmFuazsKICBzdGF0
aWMgY2xhc3MgQ29vcmRzIF9lbXB0eV9jb29yZHM7CiAgCiBwdWJsaWM6CiAgdHlwZWRlZiBDb29y
ZHNJdGVyYXRvciBJdGVyYXRvcjsKICAKICAgCiAgaW5saW5lIENvb3Jkcyh2b2lkKSA6IHJhbmso
MCkgCiAgICB7IGNbMF0gPSAwOyBjWzFdID0gMDsgY1syXSA9IDA7IH0KICAKICAgCiAgIAogICAK
ICAgCiAgCiAgaW5saW5lIENvb3JkcyhpbnQgY29uc3QgciwgaW50IGNvbnN0IHZhbCkgOiByYW5r
KHIpCiAgICB7IGNbMF0gPSB2YWw7IGNbMV0gPSB2YWw7IGNbMl0gPSB2YWw7IH0KICAKICBpbmxp
bmUgQ29vcmRzKGludCBjb25zdCByLCBpbnQgY29uc3QgKnZhbCkgOiByYW5rKHIpCiAgICB7IHJl
Z2lzdGVyIGludCBpOyBmb3IgKGk9MDsgaTxyYW5rOyBpKyspIGNbaV0gPSB2YWxbaV07IAogICAg
ICAgICAgICAgICAgICAgICAgZm9yICg7aTwgKDMpIDsgaSsrKSBjW2ldID0gMDt9CiAgCiAgaW5s
aW5lIENvb3JkcyhDb29yZHMgY29uc3QgJm90aGVyKSA6IHJhbmsob3RoZXIucmFuaykKICAgIHsg
Y1swXSA9IG90aGVyLmNbMF07IGNbMV0gPSBvdGhlci5jWzFdOyBjWzJdID0gb3RoZXIuY1syXTsg
fQogIAogICAKICBpbmxpbmUgQ29vcmRzKGludCBjb25zdCByLCBpbnQgY29uc3QgaSwgaW50IGNv
bnN0IGopIDogcmFuayhyKSAKICAgIHsgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCByID09IDIgKSA/
IDAgOgkoX19hc3NlcnRfZmFpbCAoInIgPT0gMiIgLCAiQ29vcmRzLmgiLCA4MywgX19QUkVUVFlf
RlVOQ1RJT05fXyApLCAwKSkpIDsgY1swXSA9IGk7IGNbMV0gPSBqOyA7IGNbMl0gPSAwOyB9CiAg
aW5saW5lIENvb3JkcyhpbnQgY29uc3QgciwgaW50IGNvbnN0IGksIGludCBjb25zdCBqLCBpbnQg
Y29uc3QgaykgOiByYW5rKHIpIAogICAgeyAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIHIgPT0gMyAp
ID8gMCA6CShfX2Fzc2VydF9mYWlsICgiciA9PSAzIiAsICJDb29yZHMuaCIsIDg1LCBfX1BSRVRU
WV9GVU5DVElPTl9fICksIDApKSkgOyBjWzBdID0gaTsgY1sxXSA9IGo7IGNbMl0gPSBrOyB9CiAg
CiAgQ29vcmRzICZvcGVyYXRvciA9IChDb29yZHMgY29uc3QgJnJocykKICAgIHsgCiAgICAgIHJh
bmsgPSByaHMucmFuazsKICAgICAgY1swXSA9IHJocy5jWzBdOyBjWzFdID0gcmhzLmNbMV07IGNb
Ml0gPSByaHMuY1syXTsgCiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KICAKICBDb29yZHMgJm9w
ZXJhdG9yID0gKGNvbnN0IGludCAmcmhzKQogICAgeyBjWzBdID0gY1sxXSA9IGNbMl0gPSByaHM7
IHJldHVybiAqdGhpczsgfQogIAogIGlubGluZSB+Q29vcmRzKCkge30KICAKICAgCiAgaW5saW5l
IGludCYgb3BlcmF0b3IgKCkgKGludCBjb25zdCBpKSB7IHJldHVybihjW2ldKTsgfQogIGlubGlu
ZSBpbnQgb3BlcmF0b3IgKCkgKGludCBjb25zdCBpKSBjb25zdCB7IHJldHVybihjW2ldKTsgfQog
IAogIGlubGluZSBpbnQgKiBvcGVyYXRvciAoKSAodm9pZCkgeyByZXR1cm4oYyk7IH0KICBpbmxp
bmUgaW50IGNvbnN0ICpvcGVyYXRvciAoKSAodm9pZCkgY29uc3QgeyByZXR1cm4oYyk7IH0KICAK
ICBpbmxpbmUgb3BlcmF0b3IgaW50ICogKCkgeyByZXR1cm4oYyk7IH0KICBpbmxpbmUgb3BlcmF0
b3IgY29uc3QgaW50ICogKCkgY29uc3QgeyByZXR1cm4oYyk7IH0KICAKICAgCiAgaW5saW5lIG9w
ZXJhdG9yIGxvbmcgaW50ICogKCkgeyByZXR1cm4oKGxvbmcgaW50ICopYyk7IH0KICBpbmxpbmUg
b3BlcmF0b3IgY29uc3QgbG9uZyBpbnQgKiAoKSBjb25zdCB7IHJldHVybigobG9uZyBpbnQgKilj
KTsgfQogIAogICAKCiMgMTI4ICJDb29yZHMuaCIKICBDb29yZHMmIG9wZXJhdG9yICArPSAgKENv
b3JkcyBjb25zdCAmcmhzKSB7IGNbMF0gICs9ICByaHMuY1swXTsgaWYgKHJhbms+MSkgY1sxXSAg
Kz0gIHJocy5jWzFdOyBpZiAocmFuaz4yKSBjWzJdICArPSAgcmhzLmNbMl07IHJldHVybigqdGhp
cyk7IH0gQ29vcmRzIG9wZXJhdG9yICArICAoQ29vcmRzIGNvbnN0ICZyaHMpIGNvbnN0IHsgQ29v
cmRzIGNvb3JkcygqdGhpcyk7IGNvb3JkcyAgKz0gIHJoczsgcmV0dXJuKGNvb3Jkcyk7IH0gCiAg
Q29vcmRzJiBvcGVyYXRvciAgLT0gIChDb29yZHMgY29uc3QgJnJocykgeyBjWzBdICAtPSAgcmhz
LmNbMF07IGlmIChyYW5rPjEpIGNbMV0gIC09ICByaHMuY1sxXTsgaWYgKHJhbms+MikgY1syXSAg
LT0gIHJocy5jWzJdOyByZXR1cm4oKnRoaXMpOyB9IENvb3JkcyBvcGVyYXRvciAgLSAgKENvb3Jk
cyBjb25zdCAmcmhzKSBjb25zdCB7IENvb3JkcyBjb29yZHMoKnRoaXMpOyBjb29yZHMgIC09ICBy
aHM7IHJldHVybihjb29yZHMpOyB9IAogIENvb3JkcyYgb3BlcmF0b3IgICo9ICAoQ29vcmRzIGNv
bnN0ICZyaHMpIHsgY1swXSAgKj0gIHJocy5jWzBdOyBpZiAocmFuaz4xKSBjWzFdICAqPSAgcmhz
LmNbMV07IGlmIChyYW5rPjIpIGNbMl0gICo9ICByaHMuY1syXTsgcmV0dXJuKCp0aGlzKTsgfSBD
b29yZHMgb3BlcmF0b3IgICogIChDb29yZHMgY29uc3QgJnJocykgY29uc3QgeyBDb29yZHMgY29v
cmRzKCp0aGlzKTsgY29vcmRzICAqPSAgcmhzOyByZXR1cm4oY29vcmRzKTsgfSAKCiAgICAKICAg
CgojIDE0OCAiQ29vcmRzLmgiCiAgQ29vcmRzJiBvcGVyYXRvciAgKz0gIChpbnQgY29uc3Qgcmhz
KSB7IGNbMF0gICs9ICByaHM7IGlmIChyYW5rPjEpIGNbMV0gICs9ICByaHM7IGlmIChyYW5rPjIp
IGNbMl0gICs9ICByaHM7IHJldHVybigqdGhpcyk7IH0gQ29vcmRzIG9wZXJhdG9yICArICAoaW50
IGNvbnN0IHJocykgY29uc3QgeyBDb29yZHMgY29vcmRzKCp0aGlzKTsgY29vcmRzICArPSAgcmhz
OyByZXR1cm4oY29vcmRzKTsgfSAKICBDb29yZHMmIG9wZXJhdG9yICAtPSAgKGludCBjb25zdCBy
aHMpIHsgY1swXSAgLT0gIHJoczsgaWYgKHJhbms+MSkgY1sxXSAgLT0gIHJoczsgaWYgKHJhbms+
MikgY1syXSAgLT0gIHJoczsgcmV0dXJuKCp0aGlzKTsgfSBDb29yZHMgb3BlcmF0b3IgIC0gIChp
bnQgY29uc3QgcmhzKSBjb25zdCB7IENvb3JkcyBjb29yZHMoKnRoaXMpOyBjb29yZHMgIC09ICBy
aHM7IHJldHVybihjb29yZHMpOyB9IAogIENvb3JkcyYgb3BlcmF0b3IgICo9ICAoaW50IGNvbnN0
IHJocykgeyBjWzBdICAqPSAgcmhzOyBpZiAocmFuaz4xKSBjWzFdICAqPSAgcmhzOyBpZiAocmFu
az4yKSBjWzJdICAqPSAgcmhzOyByZXR1cm4oKnRoaXMpOyB9IENvb3JkcyBvcGVyYXRvciAgKiAg
KGludCBjb25zdCByaHMpIGNvbnN0IHsgQ29vcmRzIGNvb3JkcygqdGhpcyk7IGNvb3JkcyAgKj0g
IHJoczsgcmV0dXJuKGNvb3Jkcyk7IH0gCgogICAgCiAgIAoKIyAxNjggIkNvb3Jkcy5oIgogIENv
b3JkcyYgb3BlcmF0b3IgIC89ICAoQ29vcmRzIGNvbnN0ICZyaHMpIHsgaWYgKHJocy5jWzBdICE9
IDApIGNbMF0gIC89ICByaHMuY1swXTsgaWYgKHJhbms+MSAmJiByaHMuY1sxXSAhPSAwKSBjWzFd
ICAvPSAgcmhzLmNbMV07IGlmIChyYW5rPjIgJiYgcmhzLmNbMl0gIT0gMCkgY1syXSAgLz0gIHJo
cy5jWzJdOyByZXR1cm4oKnRoaXMpOyB9IENvb3JkcyBvcGVyYXRvciAgLyAgKENvb3JkcyBjb25z
dCAmcmhzKSBjb25zdCB7IENvb3JkcyBjb29yZHMoKnRoaXMpOyBjb29yZHMgIC89ICByaHM7IHJl
dHVybihjb29yZHMpOyB9IAogIENvb3JkcyYgb3BlcmF0b3IgICU9ICAoQ29vcmRzIGNvbnN0ICZy
aHMpIHsgaWYgKHJocy5jWzBdICE9IDApIGNbMF0gICU9ICByaHMuY1swXTsgaWYgKHJhbms+MSAm
JiByaHMuY1sxXSAhPSAwKSBjWzFdICAlPSAgcmhzLmNbMV07IGlmIChyYW5rPjIgJiYgcmhzLmNb
Ml0gIT0gMCkgY1syXSAgJT0gIHJocy5jWzJdOyByZXR1cm4oKnRoaXMpOyB9IENvb3JkcyBvcGVy
YXRvciAgJSAgKENvb3JkcyBjb25zdCAmcmhzKSBjb25zdCB7IENvb3JkcyBjb29yZHMoKnRoaXMp
OyBjb29yZHMgICU9ICByaHM7IHJldHVybihjb29yZHMpOyB9IAoKICAgIAogICAKCiMgMTg3ICJD
b29yZHMuaCIKICBDb29yZHMmIG9wZXJhdG9yICAvPSAgKGludCBjb25zdCByaHMpIHsgaWYgKHJo
cyAhPSAwKSB7IGNbMF0gIC89ICByaHM7IGlmIChyYW5rPjEpIGNbMV0gIC89ICByaHM7IGlmIChy
YW5rPjIpIGNbMl0gIC89ICByaHM7IH0gcmV0dXJuKCp0aGlzKTsgfSBDb29yZHMgb3BlcmF0b3Ig
IC8gIChpbnQgY29uc3QgcmhzKSBjb25zdCB7IENvb3JkcyBjb29yZHMoKnRoaXMpOyBjb29yZHMg
IC89ICByaHM7IHJldHVybihjb29yZHMpOyB9IAogIENvb3JkcyYgb3BlcmF0b3IgICU9ICAoaW50
IGNvbnN0IHJocykgeyBpZiAocmhzICE9IDApIHsgY1swXSAgJT0gIHJoczsgaWYgKHJhbms+MSkg
Y1sxXSAgJT0gIHJoczsgaWYgKHJhbms+MikgY1syXSAgJT0gIHJoczsgfSByZXR1cm4oKnRoaXMp
OyB9IENvb3JkcyBvcGVyYXRvciAgJSAgKGludCBjb25zdCByaHMpIGNvbnN0IHsgQ29vcmRzIGNv
b3JkcygqdGhpcyk7IGNvb3JkcyAgJT0gIHJoczsgcmV0dXJuKGNvb3Jkcyk7IH0gCgogICAgICAK
ICAgCiAgaW5saW5lIENvb3JkcyBvcGVyYXRvciAtICgpIGNvbnN0CiAgICB7IAogICAgICBDb29y
ZHMgY29vcmRzKHJhbmssMCk7CiAgICAgIGNvb3Jkcy5jWzBdID0gLWNbMF07IGNvb3Jkcy5jWzFd
ID0gLWNbMV07IGNvb3Jkcy5jWzJdID0gLWNbMl07IAogICAgICByZXR1cm4oY29vcmRzKTsKICAg
IH0KICAKICAgCiAgaW5saW5lIGludCBvcGVyYXRvciAhPSAoQ29vcmRzIGNvbnN0ICZyaHMpIGNv
bnN0CiAgICB7CiAgICAgIHJldHVybiAoIHJhbmsgIT0gcmhzLnJhbmsgfHwKCSAgICAgICAoKHJh
bmsgPiAwKSAmJiAoY1swXSAhPSByaHMuY1swXSkpIHx8IAoJICAgICAgICgocmFuayA+IDEpICYm
IChjWzFdICE9IHJocy5jWzFdKSkgfHwgCgkgICAgICAgKChyYW5rID4gMikgJiYgKGNbMl0gIT0g
cmhzLmNbMl0pKQoJICAgICAgICkgOwogICAgfQogIGlubGluZSBpbnQgb3BlcmF0b3IgPT0gKENv
b3JkcyBjb25zdCAmcmhzKSBjb25zdAogICAgeyByZXR1cm4oISgqdGhpcyAhPSByaHMpKTsgfQog
IAogICAKICBpbmxpbmUgaW50IG9wZXJhdG9yID4gKENvb3JkcyBjb25zdCAmcmhzKSBjb25zdAog
ICAgewogICAgICByZXR1cm4gKCEoKChyYW5rID4gMCkgJiYgKGNbMF0gPD0gcmhzLmNbMF0pKSB8
fCAKCQkoKHJhbmsgPiAxKSAmJiAoY1sxXSA8PSByaHMuY1sxXSkpIHx8IAoJCSgocmFuayA+IDIp
ICYmIChjWzJdIDw9IHJocy5jWzJdKSkpCgkgICAgICApIDsKICAgIH0KICBpbmxpbmUgaW50IG9w
ZXJhdG9yIDwgKENvb3JkcyBjb25zdCAmcmhzKSBjb25zdAogICAgewogICAgICByZXR1cm4gKCEo
KChyYW5rID4gMCkgJiYgKGNbMF0gPj0gcmhzLmNbMF0pKSB8fCAKCQkoKHJhbmsgPiAxKSAmJiAo
Y1sxXSA+PSByaHMuY1sxXSkpIHx8IAoJCSgocmFuayA+IDIpICYmIChjWzJdID49IHJocy5jWzJd
KSkpCgkgICAgICApIDsKICAgIH0KICAKICBpbmxpbmUgdm9pZCBzZXR2YWwoaW50IGNvbnN0IHZh
bCkKICAgIHsgY1swXSA9IHZhbDsgY1sxXSA9IHZhbDsgY1syXSA9IHZhbDsgfQogIGlubGluZSB2
b2lkIHNldHZhbChDb29yZHMgY29uc3QgcmhzKQogICAgeyBjWzBdID0gcmhzLmNbMF07IGNbMV0g
PSByaHMuY1sxXTsgY1syXSA9IHJocy5jWzJdOyB9CiAgCiAgaW5saW5lIGludCBnZXRtYXh2YWwo
KQogICAgewogICAgICByZXR1cm4gKChyYW5rID4gMSkgPyAKCSAgICAgICgocmFuayA+IDIpID8g
CgkgICAgICAgKChjWzBdID4gY1sxXSkgPyAKCQkoKGNbMF0gPiBjWzJdKSA/IGNbMF0gOiBjWzJd
KSA6IAoJCSgoY1sxXSA+IGNbMl0pID8gY1sxXSA6IGNbMl0pKSA6IAoJICAgICAgICgoY1swXSA+
IGNbMV0pID8gY1swXSA6IGNbMV0pKSA6IAoJICAgICAgY1swXSk7CiAgICB9CiAgaW5saW5lIGlu
dCBnZXRtaW52YWwoKQogICAgewogICAgICByZXR1cm4gKChyYW5rID4gMSkgPyAKCSAgICAgICgo
cmFuayA+IDIpID8KCSAgICAgICAoKGNbMF0gPCBjWzFdKSA/IAoJCSgoY1swXSA8IGNbMl0pID8g
Y1swXSA6IGNbMl0pIDogCgkJKChjWzFdIDwgY1syXSkgPyBjWzFdIDogY1syXSkpIDogCgkgICAg
ICAgKChjWzBdIDwgY1sxXSkgPyBjWzBdIDogY1sxXSkpIDogCgkgICAgICBjWzBdKTsKICAgIH0K
CiAgaW5saW5lIGludCBnZXRtYXhpbmRleCgpCiAgICB7CiAgICAgIHJldHVybiAoKHJhbmsgPiAx
KSA/IAoJICAgICAgKChyYW5rID4gMikgPyAKCSAgICAgICAoKGNbMF0gPiBjWzFdKSA/IAoJCSgo
Y1swXSA+IGNbMl0pID8gMCA6IDIpIDogCgkJKChjWzFdID4gY1syXSkgPyAxIDogMikpIDogCgkg
ICAgICAgKChjWzBdID4gY1sxXSkgPyAwIDogMSkpIDogCgkgICAgICAwKTsKICAgIH0KICBpbmxp
bmUgaW50IGdldG1pbmluZGV4KCkKICAgIHsKICAgICAgcmV0dXJuICgocmFuayA+IDEpID8gCgkg
ICAgICAoKHJhbmsgPiAyKSA/IAoJICAgICAgICgoY1swXSA8IGNbMV0pID8gCgkJKChjWzBdIDwg
Y1syXSkgPyAwIDogMikgOiAKCQkoKGNbMV0gPCBjWzJdKSA/IDEgOiAyKSkgOiAKCSAgICAgICAo
KGNbMF0gPCBjWzFdKSA/IDAgOiAxKSkgOiAKCSAgICAgIDApOwogICAgfQoKICAgCiAgaW5saW5l
IHZvaWQgbWluKENvb3JkcyBjb25zdCAmcmhzKQogICAgewogICAgICAgCiAgICAgIGNbMF0gPSAo
cmhzLmNbMF0gPCBjWzBdKSA/IHJocy5jWzBdIDogY1swXTsKICAgICAgaWYgKHJhbmsgPiAxKSBj
WzFdID0gKHJocy5jWzFdIDwgY1sxXSkgPyByaHMuY1sxXSA6IGNbMV07CiAgICAgIGlmIChyYW5r
ID4gMikgY1syXSA9IChyaHMuY1syXSA8IGNbMl0pID8gcmhzLmNbMl0gOiBjWzJdOwogICAgfQog
IAogIGlubGluZSB2b2lkIG1heChDb29yZHMgY29uc3QgJnJocykKICAgIHsKICAgICAgIAogICAg
ICBjWzBdID0gKHJocy5jWzBdID4gY1swXSkgPyByaHMuY1swXSA6IGNbMF07CiAgICAgIGlmIChy
YW5rID4gMSkgY1sxXSA9IChyaHMuY1sxXSA+IGNbMV0pID8gcmhzLmNbMV0gOiBjWzFdOwogICAg
ICBpZiAocmFuayA+IDIpIGNbMl0gPSAocmhzLmNbMl0gPiBjWzJdKSA/IHJocy5jWzJdIDogY1sy
XTsKICAgIH0KICAKICBpbmxpbmUgQ29vcmRzIGdldG1pbihDb29yZHMgY29uc3QgJnJocykgY29u
c3QKICAgIHsgQ29vcmRzIG90aGVyKCp0aGlzKTsgb3RoZXIubWluKHJocyk7IHJldHVybiBvdGhl
cjsgfQogIAogIGlubGluZSBDb29yZHMgZ2V0bWF4KENvb3JkcyBjb25zdCAmcmhzKSBjb25zdAog
ICAgeyBDb29yZHMgb3RoZXIoKnRoaXMpOyBvdGhlci5tYXgocmhzKTsgcmV0dXJuIG90aGVyOyB9
CiAgCiAgaW5saW5lIHZvaWQgc2V0YWJzKCkKICAgIHsgCiAgICAgIGNbMF0gPSAoY1swXSA8IDAp
ID8gLWNbMF0gOiBjWzBdOwogICAgICBpZiAocmFuayA+IDEpIGNbMV0gPSAoY1sxXSA8IDApID8g
LWNbMV0gOiBjWzFdOwogICAgICBpZiAocmFuayA+IDIpIGNbMl0gPSAoY1syXSA8IDApID8gLWNb
Ml0gOiBjWzJdOwogICAgfQogIAogIGlubGluZSBDb29yZHMgZ2V0YWJzKCkKICAgIHsgQ29vcmRz
IG90aGVyKCp0aGlzKTsgb3RoZXIuc2V0YWJzKCk7IHJldHVybiBvdGhlcjsgfQogIAogIGlubGlu
ZSB2b2lkIGNlaWxpbmcoY29uc3QgQ29vcmRzJiBzdGVwKQogICAgeyBDb29yZHMgbW9kKCp0aGlz
JXN0ZXApOyBtb2Quc2V0YWJzKCk7ICp0aGlzICs9IG1vZDt9CiAgaW5saW5lIHZvaWQgZmxvb3Io
Y29uc3QgQ29vcmRzJiBzdGVwKQogICAgeyBDb29yZHMgbW9kKCp0aGlzJXN0ZXApOyBtb2Quc2V0
YWJzKCk7ICp0aGlzIC09IG1vZDt9Cn07CgppbmxpbmUgQ29vcmRzIG1heChjb25zdCBDb29yZHMm
IGEsIGNvbnN0IENvb3JkcyAmYikKICB7IHJldHVybihhLmdldG1heChiKSk7IH0KaW5saW5lIENv
b3JkcyBtaW4oY29uc3QgQ29vcmRzJiBhLCBjb25zdCBDb29yZHMgJmIpCiAgeyByZXR1cm4oYS5n
ZXRtaW4oYikpOyB9CgoKb3N0cmVhbSYgb3BlcmF0b3IgPDwgKG9zdHJlYW0mIHMsIGNvbnN0IENv
b3JkcyYgYyk7CmlzdHJlYW0mIG9wZXJhdG9yID4+IChpc3RyZWFtJiBzLCBDb29yZHMmIGMpOwpp
ZnN0cmVhbSYgb3BlcmF0b3I+PihpZnN0cmVhbSYgcywgQ29vcmRzJiBjKTsKb2ZzdHJlYW0mIG9w
ZXJhdG9yPDwob2ZzdHJlYW0mIHMsIGNvbnN0IENvb3JkcyYgYyk7CgoKCiMgMTkgIkJCb3guaCIg
MgoKCgoKCgogCiAKCgoKCgoKCgoKCmNsYXNzIEJCb3ggIAp7CiAgZnJpZW5kIGlzdHJlYW0mIG9w
ZXJhdG9yID4+IChpc3RyZWFtJiwgQkJveCAmKTsKICBmcmllbmQgb3N0cmVhbSYgb3BlcmF0b3Ig
PDwgKG9zdHJlYW0mLCBCQm94IGNvbnN0ICYpOwogIGZyaWVuZCBpZnN0cmVhbSYgb3BlcmF0b3Ig
Pj4gKGlmc3RyZWFtJiwgQkJveCYpOwogIGZyaWVuZCBvZnN0cmVhbSYgb3BlcmF0b3IgPDwgKG9m
c3RyZWFtJiwgY29uc3QgQkJveCYpOwogIAogIENvb3JkcyBsYiwgdWI7CiAgQ29vcmRzIHN0ZXA7
CiAgCiBwdWJsaWM6CiAgc2hvcnQgcmFuazsKICBzdGF0aWMgY2xhc3MgQkJveCBfZW1wdHlfYmJv
eDsKICAKIHB1YmxpYzoKICBpbmxpbmUgQkJveCh2b2lkKQogICAgOiBsYigwLCggMTAwMDAwMDAw
MCkgKSwgdWIoMCwoLTEwMDAwMDAwMDApICksIHN0ZXAoLTEsMSksIHJhbmsoLTEpIHt9CiAgaW5s
aW5lIEJCb3goY29uc3QgaW50IHIsIGNvbnN0IGludCBzKQogICAgOiBsYihyLCggMTAwMDAwMDAw
MCkgKSwgdWIociwoLTEwMDAwMDAwMDApICksIHN0ZXAocixzKSwgcmFuayhyKSB7fQogIGlubGlu
ZSBCQm94KGNvbnN0IGludCByLCBDb29yZHMgY29uc3QgJnMpCiAgICA6IGxiKHIsKCAxMDAwMDAw
MDAwKSApLCB1YihyLCgtMTAwMDAwMDAwMCkgKSwgc3RlcChzKSwgcmFuayhyKSB7fQogIGlubGlu
ZSBCQm94KENvb3JkcyBjb25zdCAmbCwgQ29vcmRzIGNvbnN0ICZ1LCBjb25zdCBpbnQgcykKICAg
IDogbGIobCksIHViKHUpLCBzdGVwKGwucmFuayxzKSwgcmFuayhsLnJhbmspIHt9CiAgaW5saW5l
IEJCb3goY29uc3QgaW50IHIsIGNvbnN0IGludCAqbCwgY29uc3QgaW50ICp1LCBjb25zdCBpbnQg
cykKICAgIDogbGIocixsKSwgdWIocix1KSwgc3RlcChyLHMpLCByYW5rKHIpIHt9CiAgaW5saW5l
IEJCb3goQ29vcmRzIGNvbnN0ICZsLCBDb29yZHMgY29uc3QgJnUsIENvb3JkcyBjb25zdCAmcykK
ICAgIDogbGIobCksIHViKHUpLCBzdGVwKHMpLCByYW5rKGwucmFuaykge30KICBpbmxpbmUgQkJv
eChjb25zdCBpbnQgciwgY29uc3QgaW50ICpsLCBjb25zdCBpbnQgKnUsIGNvbnN0IGludCAqcykK
ICAgIDogbGIocixsKSwgdWIocix1KSwgc3RlcChyLHMpLCByYW5rKHIpIHt9CiAgaW5saW5lIEJC
b3goQkJveCBjb25zdCAmb3RoZXIpCiAgICA6IGxiKG90aGVyLmxiKSwgdWIob3RoZXIudWIpLCBz
dGVwKG90aGVyLnN0ZXApLCByYW5rKG90aGVyLnJhbmspIHt9CiAgCiAgIAogIGlubGluZSBCQm94
KGNvbnN0IGludCByLCBjb25zdCBpbnQgaSwgCgkgICAgICBjb25zdCBpbnQgaWksIGNvbnN0IGlu
dCBzKQogICAgOiBsYihyLGkpLCB1YihyLGlpKSwgc3RlcChyLHMpLCByYW5rKHIpIHt9CiAgaW5s
aW5lIEJCb3goY29uc3QgaW50IHIsIGNvbnN0IGludCBpLCBjb25zdCBpbnQgaiwgCgkgICAgICBj
b25zdCBpbnQgaWksIGNvbnN0IGludCBqaiwgY29uc3QgaW50IHMpCiAgICA6IGxiKHIsaSxqKSwg
dWIocixpaSxqaiksIHN0ZXAocixzKSwgcmFuayhyKSB7fQogIGlubGluZSBCQm94KGNvbnN0IGlu
dCByLCBjb25zdCBpbnQgaSwgY29uc3QgaW50IGosIGNvbnN0IGludCBrLAoJICAgICAgY29uc3Qg
aW50IGlpLCBjb25zdCBpbnQgamosIGNvbnN0IGludCBraywgY29uc3QgaW50IHMpCiAgICA6IGxi
KHIsaSxqLGspLCB1YihyLGlpLGpqLGtrKSwgc3RlcChyLHMpLCByYW5rKHIpIHt9CiAgaW5saW5l
IEJCb3goY29uc3QgaW50IHIsIGNvbnN0IGludCBpLCBjb25zdCBpbnQgaiwgCgkgICAgICBjb25z
dCBpbnQgaWksIGNvbnN0IGludCBqaiwgCgkgICAgICBjb25zdCBpbnQgcywgY29uc3QgaW50IHNz
KQogICAgOiBsYihyLGksaiksIHViKHIsaWksamopLCBzdGVwKHIscyxzcyksIHJhbmsocikge30K
ICBpbmxpbmUgQkJveChjb25zdCBpbnQgciwgY29uc3QgaW50IGksIGNvbnN0IGludCBqLCBjb25z
dCBpbnQgaywKCSAgICAgIGNvbnN0IGludCBpaSwgY29uc3QgaW50IGpqLCBjb25zdCBpbnQga2ss
IAoJICAgICAgY29uc3QgaW50IHMsIGNvbnN0IGludCBzcywgY29uc3QgaW50IHNzcykKICAgIDog
bGIocixpLGosayksIHViKHIsaWksamosa2spLCBzdGVwKHIscyxzcyxzc3MpLCByYW5rKHIpIHt9
CiAgCiAgaW5saW5lIEJCb3gmIG9wZXJhdG9yID0gKGNvbnN0IEJCb3gmIG90aGVyKQogICAgeyAK
ICAgICAgc3RlcCA9IG90aGVyLnN0ZXA7IHJhbmsgPSBvdGhlci5yYW5rOyAKICAgICAgbGIgPSBv
dGhlci5sYjsgdWIgPSBvdGhlci51YjsgCiAgICAgIHJldHVybigqdGhpcyk7IAogICAgfQogIAog
IGlubGluZSB+QkJveCgpIHt9CiAgCiAgIAogIGlubGluZSB2b2lkIHNldGVtcHR5KCkKICAgIHsg
bGIuc2V0dmFsKCggMTAwMDAwMDAwMCkgKTsgdWIuc2V0dmFsKCgtMTAwMDAwMDAwMCkgKTsgfQog
IAogIGlubGluZSB2b2lkIHNldGxvd2VyKENvb3JkcyBjb25zdCAmbCkgeyBsYiA9IGw7IH0KICBp
bmxpbmUgdm9pZCBzZXRsb3dlcihjb25zdCBpbnQgKmwpCiAgICB7IHJlZ2lzdGVyIGludCBpOyBm
b3IgKGk9MDtpPHJhbms7IGkrKykgbGIoaSkgPSBsW2ldOyB9CiAgCiAgaW5saW5lIHZvaWQgc2V0
dXBwZXIoQ29vcmRzIGNvbnN0ICZ1KSB7IHViID0gdTsgfQogIGlubGluZSB2b2lkIHNldHVwcGVy
KGNvbnN0IGludCAqdSkKICAgIHsgcmVnaXN0ZXIgaW50IGk7IGZvciAoaT0wO2k8cmFuazsgaSsr
KSB1YihpKSA9IHVbaV07IH0KICAKICBpbmxpbmUgdm9pZCBzZXRiYm94KGNvbnN0IGludCAqbCwg
Y29uc3QgaW50ICp1KQogICAgeyBzZXRsb3dlcihsKTsgc2V0dXBwZXIodSk7IH0KICBpbmxpbmUg
dm9pZCBzZXRiYm94KENvb3JkcyBjb25zdCAmbCwgQ29vcmRzIGNvbnN0ICZ1KSAKICAgIHsgbGIg
PSBsOyB1YiA9IHU7IH0KICBpbmxpbmUgdm9pZCBzZXRiYm94KEJCb3ggY29uc3QgJm90aGVyKSAK
ICAgIHsgc3RlcCA9IG90aGVyLnN0ZXA7IHJhbmsgPSBvdGhlci5yYW5rOyBsYiA9IG90aGVyLmxi
OyB1YiA9IG90aGVyLnViOyB9CiAgCiAgIAogIGlubGluZSBDb29yZHMgY29uc3QgJmxvd2VyKCkg
Y29uc3QgeyByZXR1cm4obGIpOyB9CiAgaW5saW5lIENvb3JkcyBjb25zdCAmdXBwZXIoKSBjb25z
dCB7IHJldHVybih1Yik7IH0KICBpbmxpbmUgaW50IGxvd2VyKGNvbnN0IGludCBpKSBjb25zdCB7
IHJldHVybihsYihpKSk7IH0KICBpbmxpbmUgaW50IHVwcGVyKGNvbnN0IGludCBpKSBjb25zdCB7
IHJldHVybih1YihpKSk7IH0KICAKICBpbmxpbmUgQ29vcmRzICZsb3dlcigpIHsgcmV0dXJuKGxi
KTsgfQogIGlubGluZSBDb29yZHMgJnVwcGVyKCkgeyByZXR1cm4odWIpOyB9CiAgaW5saW5lIGlu
dCAmbG93ZXIoY29uc3QgaW50IGkpIHsgcmV0dXJuKGxiKGkpKTsgfQogIGlubGluZSBpbnQgJnVw
cGVyKGNvbnN0IGludCBpKSB7IHJldHVybih1YihpKSk7IH0KICAKICBpbmxpbmUgQ29vcmRzIGNv
bnN0ICZzdGVwc2l6ZSh2b2lkKSBjb25zdCB7IHJldHVybiAoc3RlcCk7IH0KICBpbmxpbmUgQ29v
cmRzICZzdGVwc2l6ZSh2b2lkKSB7IHJldHVybiAoc3RlcCk7IH0KICBpbmxpbmUgaW50IHN0ZXBz
aXplKGNvbnN0IGludCBpKSBjb25zdCB7IHJldHVybiAoc3RlcChpKSk7IH0KICBpbmxpbmUgaW50
ICZzdGVwc2l6ZShjb25zdCBpbnQgaSkgeyByZXR1cm4gKHN0ZXAoaSkpOyB9CiAgCiAgaW5saW5l
IHZvaWQgc2V0c3RlcHNpemUoY29uc3QgaW50IGksIGNvbnN0IGludCBzKSB7IHN0ZXAoaSkgPSBz
OyB9CiAgaW5saW5lIHZvaWQgc2V0c3RlcHNpemUoQ29vcmRzIGNvbnN0ICZzKSB7IHN0ZXAgPSBz
OyB9CiAgaW5saW5lIHZvaWQgc2V0c3RlcHNpemUoY29uc3QgaW50IHMpIHsgc3RlcC5zZXR2YWwo
cyk7IH0KICAKICBpbmxpbmUgaW50IGV4dGVudHMoY29uc3QgaW50IGkpIGNvbnN0IAogICAgeyBy
ZXR1cm4oKHViKGkpLWxiKGkpK3N0ZXAoaSkpL3N0ZXAoaSkpOyB9CiAgaW5saW5lIENvb3JkcyBl
eHRlbnRzKCkgY29uc3QgCiAgICB7IHJldHVybigodWItbGIrc3RlcCkvc3RlcCk7IH0KICAKICBp
bmxpbmUgaW50IGVtcHR5ICgpIGNvbnN0CiAgICB7IHJldHVybiAoIChyYW5rIDw9IDApIHx8Cgkg
ICAgICAgKChyYW5rID4gMCkgJiYgKHViKDApIDwgbGIoMCkpKSB8fAoJICAgICAgICgocmFuayA+
IDEpICYmICh1YigxKSA8IGxiKDEpKSkgfHwKCSAgICAgICAoKHJhbmsgPiAyKSAmJiAodWIoMikg
PCBsYigyKSkpCgkgICAgICAgKSA7IH0KICAKICBpbmxpbmUgaW50IGJvdHRvbSh2b2lkKSBjb25z
dAogICAgewogICAgICByZWdpc3RlciBpbnQgYiA9IChyYW5rID4gMCkgPyBsYigwKS9zdGVwKDAp
IDogMDsKICAgICAgcmVnaXN0ZXIgaW50IGUgPSAocmFuayA+IDEpID8gKHViKDApLWxiKDApK3N0
ZXAoMCkpL3N0ZXAoMCkgOiAxOwogICAgICBiICs9IChyYW5rID4gMSkgPyBlKmxiKDEpL3N0ZXAo
MSkgOiAwOyAKICAgICAgZSAqPSAocmFuayA+IDIpID8gKHViKDEpLWxiKDEpK3N0ZXAoMSkpL3N0
ZXAoMSkgOiAxOwogICAgICBiICs9IChyYW5rID4gMikgPyBlKmxiKDIpL3N0ZXAoMikgOiAwOyAK
ICAgICAgcmV0dXJuICgtYik7CiAgICB9CiAgCiAgaW5saW5lIGludCBzaXplKCkgY29uc3QKICAg
IHsKICAgICAgaWYgKGVtcHR5KCkpIHJldHVybiAwOwogICAgICByZWdpc3RlciBpbnQgcyA9IChy
YW5rID4gMCkgPyAodWIoMCktbGIoMCkrc3RlcCgwKSkvc3RlcCgwKSA6IDA7CiAgICAgIHMgKj0g
KHJhbmsgPiAxKSA/ICgodWIoMSktbGIoMSkrc3RlcCgxKSkvc3RlcCgxKSkgOiAxOwogICAgICBz
ICo9IChyYW5rID4gMikgPyAoKHViKDIpLWxiKDIpK3N0ZXAoMikpL3N0ZXAoMikpIDogMTsKICAg
ICAgcmV0dXJuIHM7CiAgICB9CiAgCiAgIAogIGlubGluZSBpbnQgY29tcGF0aWJsZShCQm94IGNv
bnN0ICZyaHMsIGNvbnN0IGludCBkKSBjb25zdAogICAgeyByZXR1cm4oIGxiKGQpID09IHJocy5s
YihkKSAmJiB1YihkKSA9PSByaHMudWIoZCkgKTsgfQogIAogICAKICAgCiAgaW5saW5lIGludCBt
ZXJnYWJsZShCQm94IGNvbnN0ICZyaHMsIGNvbnN0IGludCBkLCBjb25zdCBpbnQgb2xhcCkgY29u
c3QKICAgIHsKICAgICAgcmV0dXJuICgKCSAgICAgIChyYW5rID09IDEpID8gKGFicyhsYihkKSAt
IHJocy51YihkKSkgPT0gKDEtb2xhcCkqc3RlcChkKSkgfHwgCgkgICAgICAoYWJzKHViKGQpIC0g
cmhzLmxiKGQpKSA9PSAoMS1vbGFwKSpzdGVwKGQpKSA6CgkgICAgICAocmFuayA9PSAyKSA/IGNv
bXBhdGlibGUocmhzLChkKzEpJTIpICYmCgkgICAgICAoKGFicyhsYihkKSAtIHJocy51YihkKSkg
PT0gKDEtb2xhcCkqc3RlcChkKSkgfHwgCgkgICAgICAgKGFicyh1YihkKSAtIHJocy5sYihkKSkg
PT0gKDEtb2xhcCkqc3RlcChkKSkpIDoKCSAgICAgIChyYW5rID09IDMpID8gY29tcGF0aWJsZShy
aHMsKGQrMSklMykgJiYKCSAgICAgIGNvbXBhdGlibGUocmhzLChkKzIpJTMpICYmCgkgICAgICAo
KGFicyhsYihkKSAtIHJocy51YihkKSkgPT0gKDEtb2xhcCkqc3RlcChkKSkgfHwgCgkgICAgICAg
KGFicyh1YihkKSAtIHJocy5sYihkKSkgPT0gKDEtb2xhcCkqc3RlcChkKSkpOiAwCgkgICAgICAp
OwogICAgfQogIAogICAKICBpbmxpbmUgaW50IG1lcmdhYmxlKEJCb3ggY29uc3QgJnJocywgY29u
c3Qgc2hvcnQqIG9sYXApIGNvbnN0CiAgICB7CiAgICAgIGludCBmbGFnID0gMDsKICAgICAgZmxh
ZyA9IChyYW5rID09IDMpID8gZmxhZyB8fCBtZXJnYWJsZShyaHMsIDIsIG9sYXBbMl0pIDogZmxh
ZzsgCiAgICAgIGZsYWcgPSAocmFuayA+PSAyKSA/IGZsYWcgfHwgbWVyZ2FibGUocmhzLCAxLCBv
bGFwWzFdKSA6IGZsYWc7IAogICAgICBmbGFnID0gKHJhbmsgPj0gMSkgPyBmbGFnIHx8IG1lcmdh
YmxlKHJocywgMCwgb2xhcFswXSkgOiBmbGFnOyAKICAgICAgcmV0dXJuIGZsYWc7CiAgICB9CiAg
CiAgIAogIGlubGluZSBCQm94ICZvcGVyYXRvciArPSAoQ29vcmRzIGNvbnN0ICZyaHMpCiAgICB7
CiAgICAgIGlmIChlbXB0eSgpKSB7IGxiID0gcmhzOyB1YiA9IHJoczsgcmV0dXJuKCp0aGlzKTsg
fQogICAgICBsYi5taW4ocmhzKTsgdWIubWF4KHJocyk7IHJldHVybigqdGhpcyk7CiAgICB9CiAg
aW5saW5lIEJCb3ggb3BlcmF0b3IgKyAoQ29vcmRzIGNvbnN0ICZyaHMpIGNvbnN0CiAgICB7IEJC
b3ggYmJveCgqdGhpcyk7IGJib3ggKz0gcmhzOyByZXR1cm4oYmJveCk7IH0KICAKICBpbmxpbmUg
QkJveCAmb3BlcmF0b3IgKz0gKEJCb3ggY29uc3QgJnJocykKICAgIHsKICAgICAgaWYgKGVtcHR5
KCkpIHJldHVybigqdGhpcyA9IHJocyk7CiAgICAgIGlmIChyaHMuZW1wdHkoKSkgcmV0dXJuKCp0
aGlzKTsKICAgICAgbGIubWluKHJocy5sYik7IHViLm1heChyaHMudWIpOyByZXR1cm4oKnRoaXMp
OwogICAgfQogIGlubGluZSBCQm94IG9wZXJhdG9yICsgKEJCb3ggY29uc3QgJnJocykgY29uc3QK
ICAgIHsgQkJveCBiYm94KCp0aGlzKTsgYmJveCArPSByaHM7IHJldHVybihiYm94KTsgfQogIAog
ICAKICBpbmxpbmUgQkJveCAmb3BlcmF0b3IgKj0gKEJCb3ggY29uc3QgJnJocykKICAgIHsgbGIu
bWF4KHJocy5sYik7IHViLm1pbihyaHMudWIpOyAKICAgIGxiLmNlaWxpbmcoc3RlcCk7IHViLmZs
b29yKHN0ZXApOwogICAgcmV0dXJuKCp0aGlzKTsgfQogIAogIGlubGluZSBCQm94IG9wZXJhdG9y
ICogKEJCb3ggY29uc3QgJnJocykgY29uc3QKICAgIHsgQkJveCBib3RoKCp0aGlzKTsgYm90aC5s
Yi5tYXgocmhzLmxiKTsgYm90aC51Yi5taW4ocmhzLnViKTsgCiAgICBib3RoLmxiLmNlaWxpbmco
Ym90aC5zdGVwKTsgYm90aC51Yi5mbG9vcihib3RoLnN0ZXApOwogICAgcmV0dXJuKGJvdGgpOyB9
CiAgCiAgaW5saW5lIGludCBpbnRlcnNlY3RzKEJCb3ggY29uc3QgJnJocykgY29uc3QKICAgIHsg
QkJveCBib3RoKCp0aGlzKTsgYm90aC5sYi5tYXgocmhzLmxiKTsgYm90aC51Yi5taW4ocmhzLnVi
KTsgCiAgICAgCiAgICByZXR1cm4oIWJvdGguZW1wdHkoKSk7IH0KICAKICAgIAogIGlubGluZSBp
bnQgb3BlcmF0b3IgPT0gKEJCb3ggY29uc3QgJnJocykgY29uc3QKICAgIHsgcmV0dXJuKCgodWIg
PT0gcmhzLnViKSAmJiAobGIgPT0gcmhzLmxiKSkgfHwgCgkgICAgIChlbXB0eSgpICYmIHJocy5l
bXB0eSgpKSk7IH0KICBpbmxpbmUgaW50IG9wZXJhdG9yICE9IChCQm94IGNvbnN0ICZyaHMpIGNv
bnN0IAogICAgeyByZXR1cm4oISgqdGhpcyA9PSByaHMpKTsgfSAKICAgCiAgIAoKICBpbmxpbmUg
aW50IGluc2lkZShjb25zdCBpbnQgaSkgY29uc3QKICAgIHsgcmV0dXJuICggKGkgPj0gbGIoMCkp
ICYmIChpIDw9IHViKDApKSApOyB9CiAgCiAgaW5saW5lIGludCBpbnNpZGUoY29uc3QgaW50IGks
IGNvbnN0IGludCBqKSBjb25zdAogICAgeyByZXR1cm4gKCAoKGkgPj0gbGIoMCkpICYmIChpIDw9
IHViKDApKSkKCSAgICAgICAmJiAoKGogPj0gbGIoMSkpICYmIChqIDw9IHViKDEpKSkpOyB9CiAg
CiAgaW5saW5lIGludCBpbnNpZGUoY29uc3QgaW50IGksIGNvbnN0IGludCBqLCBjb25zdCBpbnQg
aykgY29uc3QKICAgIHsgcmV0dXJuICggKChpID49IGxiKDApKSAmJiAoaSA8PSB1YigwKSkpCgkg
ICAgICAgJiYgKChqID49IGxiKDEpKSAmJiAoaiA8PSB1YigxKSkpCgkgICAgICAgJiYgKChrID49
IGxiKDIpKSAmJiAoayA8PSB1YigyKSkpKTsgfQogIAogIGlubGluZSBpbnQgaW5zaWRlKGNvbnN0
IGludCAqYykgY29uc3QKICAgIHsgcmV0dXJuICggISgocmFuayA8PSAwKSB8fAoJCSAoKHJhbmsg
PiAwKSAmJiAoY1swXSA8IGxiKDApIHx8IGNbMF0gPiB1YigwKSkpIHx8CgkJICgocmFuayA+IDEp
ICYmIChjWzFdIDwgbGIoMSkgfHwgY1sxXSA+IHViKDEpKSkgfHwgICAgIAoJCSAoKHJhbmsgPiAy
KSAmJiAoY1syXSA8IGxiKDIpIHx8IGNbMl0gPiB1YigyKSkpCgkJICkpIDsgfQogIAogIGlubGlu
ZSBpbnQgaW5zaWRlKENvb3JkcyBjb25zdCAmYykgY29uc3QKICAgIHsgcmV0dXJuIChCQm94Ojpp
bnNpZGUoYygpKSk7IH0KICAKICAgCgogIGlubGluZSBpbnQgaW50ZXJpb3IoY29uc3QgaW50IGkp
IGNvbnN0CiAgICB7IHJldHVybiAoIChpID4gbGIoMCkpICYmIChpIDwgdWIoMCkpICk7IH0KICAK
ICBpbmxpbmUgaW50IGludGVyaW9yKGNvbnN0IGludCBpLCBjb25zdCBpbnQgaikgY29uc3QKICAg
IHsgcmV0dXJuICggKChpID4gbGIoMCkpICYmIChpIDwgdWIoMCkpKQoJCSYmICgoaiA+IGxiKDEp
KSAmJiAoaiA8IHViKDEpKSkpOyB9CiAgCiAgaW5saW5lIGludCBpbnRlcmlvcihjb25zdCBpbnQg
aSwgY29uc3QgaW50IGosIGNvbnN0IGludCBrKSBjb25zdAogICAgeyByZXR1cm4gKCAoKGkgPiBs
YigwKSkgJiYgKGkgPCB1YigwKSkpCgkgICAgICAgJiYgKChqID4gbGIoMSkpICYmIChqIDwgdWIo
MSkpKQoJICAgICAgICYmICgoayA+IGxiKDIpKSAmJiAoayA8IHViKDIpKSkpOyB9CiAgCiAgaW5s
aW5lIGludCBpbnRlcmlvcihjb25zdCBpbnQgKmMpIGNvbnN0CiAgICB7IHJldHVybiAoICEoKHJh
bmsgPD0gMCkgfHwKCQkgKChyYW5rID4gMCkgJiYgKGNbMF0gPD0gbGIoMCkgfHwgY1swXSA+PSB1
YigwKSkpIHx8CgkJICgocmFuayA+IDEpICYmIChjWzFdIDw9IGxiKDEpIHx8IGNbMV0gPj0gdWIo
MSkpKSB8fCAgICAgCgkJICgocmFuayA+IDIpICYmIChjWzJdIDw9IGxiKDIpIHx8IGNbMl0gPj0g
dWIoMikpKQoJCSApKSA7IH0KICBpbmxpbmUgaW50IGludGVyaW9yKENvb3JkcyBjb25zdCAmYykg
Y29uc3QKICAgIHsgcmV0dXJuIChCQm94OjppbnRlcmlvcihjKCkpKTsgfQogIAogICAKICAgCgoK
CgoKCiAgCiAgIAogIGlubGluZSBpbnQgb3BlcmF0b3IgPiAoQkJveCBjb25zdCAmcmhzKSBjb25z
dCAKICAgIHsgcmV0dXJuKCBpbnNpZGUocmhzLnVwcGVyKCkpICYmIGluc2lkZShyaHMubG93ZXIo
KSkgKTsgfSAKICBpbmxpbmUgaW50IG9wZXJhdG9yID49IChCQm94IGNvbnN0ICZyaHMpIGNvbnN0
IAogICAgeyByZXR1cm4oICgqdGhpcyA9PSByaHMpIHx8IAoJICAgICAgKGluc2lkZShyaHMudXBw
ZXIoKSkgJiYgaW5zaWRlKHJocy5sb3dlcigpKSkgKTsgfSAKICAKICBpbmxpbmUgaW50IG9wZXJh
dG9yIDwgKEJCb3ggY29uc3QgJnJocykgY29uc3QgCiAgICB7IHJldHVybiggcmhzLmluc2lkZSh1
YikgJiYgcmhzLmluc2lkZShsYikgKTsgfSAKICBpbmxpbmUgaW50IG9wZXJhdG9yIDw9IChCQm94
IGNvbnN0ICZyaHMpIGNvbnN0IAogICAgeyByZXR1cm4oIChyaHMgPT0gKnRoaXMpIHx8IAoJICAg
ICAgKHJocy5pbnNpZGUodWIpICYmIHJocy5pbnNpZGUobGIpKSApOyB9IAogIAogICAKICBpbmxp
bmUgdm9pZCBhY2NyZXRlKGNvbnN0IGludCBpKQogICAgeyBpZiAoIWVtcHR5KCkpIHsgbGIgLT0g
c3RlcCppOyB1YiArPSBzdGVwKmk7IH0gfQogIGlubGluZSB2b2lkIGdyb3coY29uc3QgaW50IGkp
CiAgICB7IGlmICghZW1wdHkoKSkgeyBsYiAtPSBzdGVwKmk7IHViICs9IHN0ZXAqaTsgfSB9CiAg
CiAgaW5saW5lIHZvaWQgYWNjcmV0ZShDb29yZHMgY29uc3QgJmMpCiAgICB7IGlmICghZW1wdHko
KSkgeyBsYiAtPSBjKnN0ZXA7IHViICs9IGMqc3RlcDsgfSB9CiAgaW5saW5lIHZvaWQgZ3JvdyhD
b29yZHMgY29uc3QgJmMpCiAgICB7IGlmICghZW1wdHkoKSkgeyBsYiAtPSBjKnN0ZXA7IHViICs9
IGMqc3RlcDsgfSB9CiAgCiAgaW5saW5lIHZvaWQgZ3Jvd2J5ZGltKGNvbnN0IHNob3J0KiBjKQog
ICAgewogICAgICBpZiAoZW1wdHkoKSkgcmV0dXJuOwogICAgICBpZiAocmFuayA+IDApIHsgbGIo
MCkgLT0gKHN0ZXAoMCkqY1swXSk7IHViKDApICs9IChzdGVwKDApKmNbMV0pOyB9CiAgICAgIGlm
IChyYW5rID4gMSkgeyBsYigxKSAtPSAoc3RlcCgxKSpjWzJdKTsgdWIoMSkgKz0gKHN0ZXAoMSkq
Y1szXSk7IH0KICAgICAgaWYgKHJhbmsgPiAyKSB7IGxiKDIpIC09IChzdGVwKDIpKmNbNF0pOyB1
YigyKSArPSAoc3RlcCgyKSpjWzVdKTsgfQogICAgfQogIAogIGlubGluZSB2b2lkIHNocmlua2J5
ZGltKGNvbnN0IHNob3J0KiBjKQogICAgewogICAgICBpZiAoZW1wdHkoKSkgcmV0dXJuOwogICAg
ICBpZiAocmFuayA+IDApIHsgbGIoMCkgKz0gKHN0ZXAoMCkqY1swXSk7IHViKDApIC09IChzdGVw
KDApKmNbMV0pOyB9CiAgICAgIGlmIChyYW5rID4gMSkgeyBsYigxKSArPSAoc3RlcCgxKSpjWzJd
KTsgdWIoMSkgLT0gKHN0ZXAoMSkqY1szXSk7IH0KICAgICAgaWYgKHJhbmsgPiAyKSB7IGxiKDIp
ICs9IChzdGVwKDIpKmNbNF0pOyB1YigyKSAtPSAoc3RlcCgyKSpjWzVdKTsgfQogICAgfQogIAog
IGlubGluZSB2b2lkIGdyb3d1cHBlcihjb25zdCBpbnQgaSkKICAgIHsgaWYgKCFlbXB0eSgpKSB7
IHViICs9IHN0ZXAqaTsgfSB9CiAgaW5saW5lIHZvaWQgZ3Jvd2xvd2VyKGNvbnN0IGludCBpKQog
ICAgeyBpZiAoIWVtcHR5KCkpIHsgbGIgKz0gc3RlcCppOyB9IH0KICAKICBpbmxpbmUgdm9pZCBn
cm93dXBwZXIoQ29vcmRzIGNvbnN0ICZjKQogICAgeyBpZiAoIWVtcHR5KCkpIHsgdWIgKz0gc3Rl
cCpjOyB9IH0KICBpbmxpbmUgdm9pZCBncm93bG93ZXIoQ29vcmRzIGNvbnN0ICZjKQogICAgeyBp
ZiAoIWVtcHR5KCkpIHsgbGIgKz0gc3RlcCpjOyB9IH0KICAKICBpbmxpbmUgdm9pZCBncm93dXBw
ZXIoY29uc3QgaW50IGQsIGNvbnN0IGludCBpKQogICAgeyBpZiAoIWVtcHR5KCkpIHsgdWIoZCkg
Kz0gaSpzdGVwKGQpOyB9IH0KICBpbmxpbmUgdm9pZCBncm93bG93ZXIoY29uc3QgaW50IGQsIGNv
bnN0IGludCBpKQogICAgeyBpZiAoIWVtcHR5KCkpIHsgbGIoZCkgKz0gaSpzdGVwKGQpOyB9IH0K
ICAKICBpbmxpbmUgdm9pZCBncm93dXBwZXJieWRpbShjb25zdCBzaG9ydCogYykKICAgIHsKICAg
ICAgaWYgKGVtcHR5KCkpIHJldHVybjsKICAgICAgaWYgKHJhbmsgPiAwKSB7IHViKDApICs9IChz
dGVwKDApKmNbMF0pOyB9CiAgICAgIGlmIChyYW5rID4gMSkgeyB1YigxKSArPSAoc3RlcCgxKSpj
WzFdKTsgfQogICAgICBpZiAocmFuayA+IDIpIHsgdWIoMikgKz0gKHN0ZXAoMikqY1syXSk7IH0K
ICAgIH0KICBpbmxpbmUgdm9pZCBncm93bG93ZXJieWRpbShjb25zdCBzaG9ydCogYykKICAgIHsK
ICAgICAgaWYgKGVtcHR5KCkpIHJldHVybjsKICAgICAgaWYgKHJhbmsgPiAwKSB7IGxiKDApICs9
IChzdGVwKDApKmNbMF0pOyB9CiAgICAgIGlmIChyYW5rID4gMSkgeyBsYigxKSArPSAoc3RlcCgx
KSpjWzFdKTsgfQogICAgICBpZiAocmFuayA+IDIpIHsgbGIoMikgKz0gKHN0ZXAoMikqY1syXSk7
IH0KICAgIH0KICAKICBpbmxpbmUgdm9pZCBzaHJpbmt1cHBlcmJ5ZGltKGNvbnN0IHNob3J0KiBj
KQogICAgewogICAgICBpZiAoZW1wdHkoKSkgcmV0dXJuOwogICAgICBpZiAocmFuayA+IDApIHsg
dWIoMCkgLT0gKHN0ZXAoMCkqY1swXSk7IH0KICAgICAgaWYgKHJhbmsgPiAxKSB7IHViKDEpIC09
IChzdGVwKDEpKmNbMV0pOyB9CiAgICAgIGlmIChyYW5rID4gMikgeyB1YigyKSAtPSAoc3RlcCgy
KSpjWzJdKTsgfQogICAgfQogIGlubGluZSB2b2lkIHNocmlua2xvd2VyYnlkaW0oY29uc3Qgc2hv
cnQqIGMpCiAgICB7CiAgICAgIGlmIChlbXB0eSgpKSByZXR1cm47CiAgICAgIGlmIChyYW5rID4g
MCkgeyBsYigwKSAtPSAoc3RlcCgwKSpjWzBdKTsgfQogICAgICBpZiAocmFuayA+IDEpIHsgbGIo
MSkgLT0gKHN0ZXAoMSkqY1sxXSk7IH0KICAgICAgaWYgKHJhbmsgPiAyKSB7IGxiKDIpIC09IChz
dGVwKDIpKmNbMl0pOyB9CiAgICB9CiAgCiAgaW5saW5lIHZvaWQgc2hpZnQoY29uc3QgaW50IGMp
CiAgICB7IGlmICghZW1wdHkoKSkgeyBsYis9c3RlcCpjIDsgdWIrPXN0ZXAqYzsgfSB9CiAgaW5s
aW5lIHZvaWQgc2hpZnQoQ29vcmRzIGNvbnN0ICZjKQogICAgeyBpZiAoIWVtcHR5KCkpIHsgbGIr
PXN0ZXAqYyA7IHViKz1zdGVwKmM7IH0gfQogIGlubGluZSB2b2lkIHNoaWZ0KGNvbnN0IGludCBk
LCBjb25zdCBpbnQgYykKICAgIHsgaWYgKCFlbXB0eSgpKSB7IGxiKGQpKz1zdGVwKGQpKmMgOyB1
YihkKSs9c3RlcChkKSpjOyB9IH0KICAKICAgCiAgaW5saW5lIHZvaWQgY29hcnNlbihjb25zdCBp
bnQgYnkpCiAgICB7IGlmICghZW1wdHkoKSkgCiAgICAgIHsgc3RlcCAqPSBieTsgbGIgPSAobGIv
c3RlcCkqc3RlcDsgdWIgPSAodWIvc3RlcCkqc3RlcDsgfSB9CiAgaW5saW5lIHZvaWQgY29hcnNl
bihDb29yZHMgY29uc3QgJmJ5KQogICAgIHsgaWYgKCFlbXB0eSgpKSAKICAgICAgIHsgc3RlcCAq
PSBieTsgbGIgPSAobGIvc3RlcCkqc3RlcDsgdWIgPSAodWIvc3RlcCkqc3RlcDsgfSB9CiAgaW5s
aW5lIHZvaWQgY29hcnNlbihjb25zdCBpbnQgZCwgY29uc3QgaW50IGJ5KQogICAgeyBpZiAoIWVt
cHR5KCkpIHsgCiAgICAgIHN0ZXAoZCkgKj0gYnk7CiAgICAgIGxiKGQpID0gKGxiKGQpL3N0ZXAo
ZCkpKnN0ZXAoZCk7CiAgICAgIHViKGQpID0gKHViKGQpL3N0ZXAoZCkpKnN0ZXAoZCk7IH0gfSAg
IAogICAKICAgCiAgaW5saW5lIHZvaWQgcmVmaW5lKGNvbnN0IGludCBieSkgeyBzdGVwIC89IGJ5
OyB9CiAgaW5saW5lIHZvaWQgcmVmaW5lKENvb3JkcyBjb25zdCAmYnkpIHsgc3RlcCAvPSBieTt9
CgogICAKICBpbmxpbmUgdm9pZCByZWZpbmUoY29uc3QgaW50IGJ5LCBjb25zdCBpbnQgb2xhcCkg
CiAgICB7IHN0ZXAgLz0gYnk7IHViICs9IChzdGVwKihvbGFwKihieS0xKSkpOyB9CiAgIAogICAK
ICBpbmxpbmUgdm9pZCByZWZpbmUoY29uc3QgaW50IGQsIGNvbnN0IGludCBieSwgY29uc3QgaW50
IG9sYXApIAogICAgeyBzdGVwKGQpIC89IGJ5OyB1YihkKSArPSAoc3RlcChkKSoob2xhcCooYnkt
MSkpKTsgfQoKCgoKCgoKCn07Cgppc3RyZWFtJiBvcGVyYXRvciA+PiAoaXN0cmVhbSYgcywgQkJv
eCAmIGJiKTsKb3N0cmVhbSYgb3BlcmF0b3IgPDwgKG9zdHJlYW0mIHMsIGNvbnN0IEJCb3ggJmJi
KTsKaWZzdHJlYW0mIG9wZXJhdG9yID4+IChpZnN0cmVhbSYgcywgQkJveCYgYmIpOwpvZnN0cmVh
bSYgb3BlcmF0b3IgPDwgKG9mc3RyZWFtJiBzLCBjb25zdCBCQm94JiBiYik7CgojIDQzNCAiQkJv
eC5oIgoKCiAKaW5saW5lIENvb3JkcyAmdXBwZXIoQkJveCAmYmIpCnsgcmV0dXJuIChiYi51cHBl
cigpKTsgfQppbmxpbmUgaW50IHVwcGVyKEJCb3ggJmJiLCBjb25zdCBpbnQgaSkKeyByZXR1cm4g
KGJiLnVwcGVyKGkpKTsgfQoKaW5saW5lIENvb3JkcyAmbG93ZXIoQkJveCAmYmIpCnsgcmV0dXJu
IChiYi5sb3dlcigpKTsgfQppbmxpbmUgaW50IGxvd2VyKEJCb3ggJmJiLCBjb25zdCBpbnQgaSkK
eyByZXR1cm4gKGJiLmxvd2VyKGkpKTsgfQoKaW5saW5lIENvb3JkcyAmc3RlcHNpemUoQkJveCAm
YmIpCnsgcmV0dXJuIChiYi5zdGVwc2l6ZSgpKTsgfQppbmxpbmUgaW50IHN0ZXBzaXplKEJCb3gg
JmJiLCBjb25zdCBpbnQgaSkKeyByZXR1cm4gKGJiLnN0ZXBzaXplKGkpKTsgfQoKaW5saW5lIENv
b3JkcyBleHRlbnRzKEJCb3ggJmJiKQp7IHJldHVybiAoYmIuZXh0ZW50cygpKTsgfQppbmxpbmUg
aW50IGV4dGVudHMoQkJveCAmYmIsIGNvbnN0IGludCBpKQp7IHJldHVybiAoYmIuZXh0ZW50cyhp
KSk7IH0KCmlubGluZSBpbnQgc2l6ZShCQm94ICZiYikKeyByZXR1cm4gKGJiLnNpemUoKSk7IH0K
aW5saW5lIGludCBpbnNpZGUoQkJveCAmYmIsIENvb3JkcyBjb25zdCAmYykKeyByZXR1cm4gKGJi
Lmluc2lkZShjKSk7IH0KCiAKaW5saW5lIEJCb3ggYWNjcmV0ZShCQm94IGNvbnN0ICZiYm94LCBD
b29yZHMgY29uc3QgJmMpCnsgY29uc3QgQ29vcmRzJiB1ID0gYmJveC51cHBlcigpOyBjb25zdCBD
b29yZHMmIGwgPSBiYm94Lmxvd2VyKCk7IAogY29uc3QgQ29vcmRzJiBzID0gYmJveC5zdGVwc2l6
ZSgpOwogcmV0dXJuICggKGJib3guZW1wdHkoKSkgPyBiYm94IDogQkJveChsLWMqcywgdStjKnMs
IHMpICk7IH0KaW5saW5lIEJCb3ggZ3JvdyhCQm94IGNvbnN0ICZiYm94LCBDb29yZHMgY29uc3Qg
JmMpCnsgY29uc3QgQ29vcmRzJiB1ID0gYmJveC51cHBlcigpOyBjb25zdCBDb29yZHMmIGwgPSBi
Ym94Lmxvd2VyKCk7IAogY29uc3QgQ29vcmRzJiBzID0gYmJveC5zdGVwc2l6ZSgpOwogcmV0dXJu
ICggKGJib3guZW1wdHkoKSkgPyBiYm94IDogQkJveChsLWMqcywgdStjKnMsIHMpICk7IH0KCmlu
bGluZSBCQm94IGFjY3JldGUoQkJveCBjb25zdCAmYmJveCwgY29uc3QgaW50IGMpCnsgY29uc3Qg
Q29vcmRzJiB1ID0gYmJveC51cHBlcigpOyBjb25zdCBDb29yZHMmIGwgPSBiYm94Lmxvd2VyKCk7
IAogY29uc3QgQ29vcmRzJiBzID0gYmJveC5zdGVwc2l6ZSgpOwogcmV0dXJuICggKGJib3guZW1w
dHkoKSkgPyBiYm94IDogQkJveChsLXMqYywgdStzKmMsIHMpICk7IH0KaW5saW5lIEJCb3ggZ3Jv
dyhCQm94IGNvbnN0ICZiYm94LCBjb25zdCBpbnQgYykKeyBjb25zdCBDb29yZHMmIHUgPSBiYm94
LnVwcGVyKCk7IGNvbnN0IENvb3JkcyYgbCA9IGJib3gubG93ZXIoKTsgCiBjb25zdCBDb29yZHMm
IHMgPSBiYm94LnN0ZXBzaXplKCk7CiByZXR1cm4gKCAoYmJveC5lbXB0eSgpKSA/IGJib3ggOiBC
Qm94KGwtcypjLCB1K3MqYywgcykgKTsgfQoKQkJveCogYWNjcmV0ZShCQm94IGNvbnN0ICpjb25z
dCBiYm94LCBjb25zdCBpbnQgbiwgY29uc3QgaW50IGMpOwpCQm94KiBncm93KEJCb3ggY29uc3Qg
KmNvbnN0IGJib3gsIGNvbnN0IGludCBuLCBjb25zdCBpbnQgYyk7CgpCQm94KiBhY2NyZXRlKEJC
b3ggY29uc3QgKmNvbnN0IGJib3gsIGNvbnN0IGludCBuLCBDb29yZHMgY29uc3QgJmMpOwpCQm94
KiBncm93KEJCb3ggY29uc3QgKmNvbnN0IGJib3gsIGNvbnN0IGludCBuLCBDb29yZHMgY29uc3Qg
JmMpOwoKaW5saW5lIEJCb3ggZ3Jvd3VwcGVyKEJCb3ggY29uc3QgJmJib3gsIGNvbnN0IGludCBj
KQp7IGNvbnN0IENvb3JkcyYgdSA9IGJib3gudXBwZXIoKTsgY29uc3QgQ29vcmRzJiBsID0gYmJv
eC5sb3dlcigpOyAKIGNvbnN0IENvb3JkcyYgcyA9IGJib3guc3RlcHNpemUoKTsKIHJldHVybiAo
IChiYm94LmVtcHR5KCkpID8gYmJveCA6IEJCb3gobCwgdStzKmMsIHMpICk7IH0KaW5saW5lIEJC
b3ggZ3Jvd2xvd2VyKEJCb3ggY29uc3QgJmJib3gsIGNvbnN0IGludCBjKQp7IGNvbnN0IENvb3Jk
cyYgdSA9IGJib3gudXBwZXIoKTsgY29uc3QgQ29vcmRzJiBsID0gYmJveC5sb3dlcigpOyAKIGNv
bnN0IENvb3JkcyYgcyA9IGJib3guc3RlcHNpemUoKTsKIHJldHVybiAoIChiYm94LmVtcHR5KCkp
ID8gYmJveCA6IEJCb3gobCtzKmMsIHUsIHMpICk7IH0KCmlubGluZSBCQm94IGdyb3d1cHBlcihC
Qm94IGNvbnN0ICZiYm94LCBjb25zdCBpbnQgZCwgY29uc3QgaW50IGMpCnsKICBpZiAoYmJveC5l
bXB0eSgpKSByZXR1cm4oYmJveCk7CiAgY29uc3QgQ29vcmRzJiBsID0gYmJveC5sb3dlcigpOyBj
b25zdCBDb29yZHMmIHMgPSBiYm94LnN0ZXBzaXplKCk7CiAgQ29vcmRzIHUgPSBiYm94LnVwcGVy
KCk7IHUoZCkgKz0gYypzKGQpOwogIHJldHVybihCQm94KGwsIHUsIHMpKTsKfQppbmxpbmUgQkJv
eCBncm93bG93ZXIoQkJveCBjb25zdCAmYmJveCwgY29uc3QgaW50IGQsIGNvbnN0IGludCBjKQp7
CiAgaWYgKGJib3guZW1wdHkoKSkgcmV0dXJuKGJib3gpOwogIGNvbnN0IENvb3JkcyYgdSA9IGJi
b3gudXBwZXIoKTsgY29uc3QgQ29vcmRzJiBzID0gYmJveC5zdGVwc2l6ZSgpOwogIENvb3JkcyBs
ID0gYmJveC5sb3dlcigpOyBsKGQpICs9IGMqcyhkKTsKICByZXR1cm4oQkJveChsLCB1LCBzKSk7
Cn0KCmlubGluZSBCQm94IGdyb3dieWRpbShCQm94IGNvbnN0ICZiYm94LCBjb25zdCBzaG9ydCog
YykgICAgICAgCnsKICBCQm94IGJiKGJib3gpOwogIGlmIChiYi5lbXB0eSgpKSByZXR1cm4oYmIp
OwogIGlmIChiYi5yYW5rID4gMCkKICAgIHtiYi5sb3dlcigwKSAtPSAoYmIuc3RlcHNpemUoMCkq
Y1swXSk7YmIudXBwZXIoMCkgKz0gKGJiLnN0ZXBzaXplKDApKmNbMV0pO30KICBpZiAoYmIucmFu
ayA+IDEpCiAgICB7YmIubG93ZXIoMSkgLT0gKGJiLnN0ZXBzaXplKDEpKmNbMl0pO2JiLnVwcGVy
KDEpICs9IChiYi5zdGVwc2l6ZSgxKSpjWzNdKTt9CiAgaWYgKGJiLnJhbmsgPiAyKQogICAge2Ji
Lmxvd2VyKDIpIC09IChiYi5zdGVwc2l6ZSgyKSpjWzRdKTtiYi51cHBlcigyKSArPSAoYmIuc3Rl
cHNpemUoMikqY1s1XSk7fQogIHJldHVybiBiYjsKfQppbmxpbmUgQkJveCBncm93dXBwZXJieWRp
bShCQm94IGNvbnN0ICZiYm94LCBjb25zdCBzaG9ydCogYykgIAp7CiAgQkJveCBiYihiYm94KTsK
ICBpZiAoYmIuZW1wdHkoKSkgcmV0dXJuKGJiKTsKICBpZiAoYmIucmFuayA+IDApCiAgICB7YmIu
dXBwZXIoMCkgKz0gKGJiLnN0ZXBzaXplKDApKmNbMF0pO30KICBpZiAoYmIucmFuayA+IDEpCiAg
ICB7YmIudXBwZXIoMSkgKz0gKGJiLnN0ZXBzaXplKDEpKmNbMV0pO30KICBpZiAoYmIucmFuayA+
IDIpCiAgICB7YmIudXBwZXIoMikgKz0gKGJiLnN0ZXBzaXplKDIpKmNbMl0pO30KICByZXR1cm4g
YmI7Cn0KaW5saW5lIEJCb3ggZ3Jvd2xvd2VyYnlkaW0oQkJveCBjb25zdCAmYmJveCwgY29uc3Qg
c2hvcnQqIGMpICAKewogIEJCb3ggYmIoYmJveCk7CiAgaWYgKGJiLmVtcHR5KCkpIHJldHVybihi
Yik7CiAgaWYgKGJiLnJhbmsgPiAwKQogICAge2JiLmxvd2VyKDApICs9IChiYi5zdGVwc2l6ZSgw
KSpjWzBdKTt9CiAgaWYgKGJiLnJhbmsgPiAxKQogICAge2JiLmxvd2VyKDEpICs9IChiYi5zdGVw
c2l6ZSgxKSpjWzFdKTt9CiAgaWYgKGJiLnJhbmsgPiAyKQogICAge2JiLmxvd2VyKDIpICs9IChi
Yi5zdGVwc2l6ZSgyKSpjWzJdKTt9CiAgcmV0dXJuIGJiOwp9CgppbmxpbmUgQkJveCBzaHJpbmti
eWRpbShCQm94IGNvbnN0ICZiYm94LCBjb25zdCBzaG9ydCogYykgICAgIAp7CiAgQkJveCBiYihi
Ym94KTsKICBpZiAoYmIuZW1wdHkoKSkgcmV0dXJuKGJiKTsKICBpZiAoYmIucmFuayA+IDApCiAg
ICB7YmIubG93ZXIoMCkgKz0gKGJiLnN0ZXBzaXplKDApKmNbMF0pO2JiLnVwcGVyKDApIC09IChi
Yi5zdGVwc2l6ZSgwKSpjWzFdKTt9CiAgaWYgKGJiLnJhbmsgPiAxKQogICAge2JiLmxvd2VyKDEp
ICs9IChiYi5zdGVwc2l6ZSgxKSpjWzJdKTtiYi51cHBlcigxKSAtPSAoYmIuc3RlcHNpemUoMSkq
Y1szXSk7fQogIGlmIChiYi5yYW5rID4gMikKICAgIHtiYi5sb3dlcigyKSArPSAoYmIuc3RlcHNp
emUoMikqY1s0XSk7YmIudXBwZXIoMikgLT0gKGJiLnN0ZXBzaXplKDIpKmNbNV0pO30KICByZXR1
cm4gYmI7Cn0KaW5saW5lIEJCb3ggc2hyaW5rdXBwZXJieWRpbShCQm94IGNvbnN0ICZiYm94LCBj
b25zdCBzaG9ydCogYykgIAp7CiAgQkJveCBiYihiYm94KTsKICBpZiAoYmIuZW1wdHkoKSkgcmV0
dXJuKGJiKTsKICBpZiAoYmIucmFuayA+IDApCiAgICB7YmIudXBwZXIoMCkgLT0gKGJiLnN0ZXBz
aXplKDApKmNbMF0pO30KICBpZiAoYmIucmFuayA+IDEpCiAgICB7YmIudXBwZXIoMSkgLT0gKGJi
LnN0ZXBzaXplKDEpKmNbMV0pO30KICBpZiAoYmIucmFuayA+IDIpCiAgICB7YmIudXBwZXIoMikg
LT0gKGJiLnN0ZXBzaXplKDIpKmNbMl0pO30KICByZXR1cm4gYmI7Cn0KaW5saW5lIEJCb3ggc2hy
aW5rbG93ZXJieWRpbShCQm94IGNvbnN0ICZiYm94LCBjb25zdCBzaG9ydCogYykgIAp7CiAgQkJv
eCBiYihiYm94KTsKICBpZiAoYmIuZW1wdHkoKSkgcmV0dXJuKGJiKTsKICBpZiAoYmIucmFuayA+
IDApCiAgICB7YmIubG93ZXIoMCkgLT0gKGJiLnN0ZXBzaXplKDApKmNbMF0pO30KICBpZiAoYmIu
cmFuayA+IDEpCiAgICB7YmIubG93ZXIoMSkgLT0gKGJiLnN0ZXBzaXplKDEpKmNbMV0pO30KICBp
ZiAoYmIucmFuayA+IDIpCiAgICB7YmIubG93ZXIoMikgLT0gKGJiLnN0ZXBzaXplKDIpKmNbMl0p
O30KICByZXR1cm4gYmI7Cn0KCiAKaW5saW5lIEJCb3ggc2hpZnRhYnMoQkJveCBjb25zdCAmYmIs
IGNvbnN0IGludCBjKQp7IHJldHVybihCQm94KGJiLmxvd2VyKCkrYywgYmIudXBwZXIoKStjLCBi
Yi5zdGVwc2l6ZSgpKSk7IH0KaW5saW5lIEJCb3ggc2hpZnRhYnMoQkJveCBjb25zdCAmYmIsIENv
b3JkcyBjb25zdCAmYykKeyByZXR1cm4oQkJveChiYi5sb3dlcigpK2MsIGJiLnVwcGVyKCkrYywg
YmIuc3RlcHNpemUoKSkpOyB9CgppbmxpbmUgQkJveCBzaGlmdChCQm94IGNvbnN0ICZiYiwgY29u
c3QgaW50IGMpCnsgcmV0dXJuKEJCb3goYmIubG93ZXIoKStiYi5zdGVwc2l6ZSgpKmMsIAoJICAg
ICAgYmIudXBwZXIoKStiYi5zdGVwc2l6ZSgpKmMsYmIuc3RlcHNpemUoKSkpOyB9CmlubGluZSBC
Qm94IHNoaWZ0KEJCb3ggY29uc3QgJmJiLCBDb29yZHMgY29uc3QgJmMpCnsgcmV0dXJuKEJCb3go
YmIubG93ZXIoKStjKmJiLnN0ZXBzaXplKCksIAoJICAgICAgYmIudXBwZXIoKStjKmJiLnN0ZXBz
aXplKCksYmIuc3RlcHNpemUoKSkpOyB9CgppbmxpbmUgQkJveCBzaGlmdGFicyhCQm94IGNvbnN0
ICZiYm94LCBjb25zdCBpbnQgZCwgY29uc3QgaW50IGMpCnsKICBpZiAoYmJveC5lbXB0eSgpKSBy
ZXR1cm4oYmJveCk7CiAgQ29vcmRzIHUgPSBiYm94LnVwcGVyKCk7IHUoZCkgKz0gYzsKICBDb29y
ZHMgbCA9IGJib3gubG93ZXIoKTsgbChkKSArPSBjOwogIHJldHVybihCQm94KGwsIHUsIGJib3gu
c3RlcHNpemUoKSkpOwp9CmlubGluZSBCQm94IHNoaWZ0KEJCb3ggY29uc3QgJmJib3gsIGNvbnN0
IGludCBkLCBjb25zdCBpbnQgYykKewogIGlmIChiYm94LmVtcHR5KCkpIHJldHVybihiYm94KTsK
ICBDb29yZHMgdSA9IGJib3gudXBwZXIoKTsgdShkKSArPSBjKmJib3guc3RlcHNpemUoZCk7CiAg
Q29vcmRzIGwgPSBiYm94Lmxvd2VyKCk7IGwoZCkgKz0gYypiYm94LnN0ZXBzaXplKGQpOwogIHJl
dHVybihCQm94KGwsIHUsIGJib3guc3RlcHNpemUoKSkpOwp9CgogCmlubGluZSBCQm94IGNvYXJz
ZW4oQkJveCBjb25zdCAmYmJveCwgY29uc3QgaW50IGJ5KQp7IENvb3JkcyBzID0gYmJveC5zdGVw
c2l6ZSgpICogYnk7CiBjb25zdCBDb29yZHMmIHUgPSBiYm94LnVwcGVyKCk7IGNvbnN0IENvb3Jk
cyYgbCA9IGJib3gubG93ZXIoKTsKIHJldHVybiAoKGJib3guZW1wdHkoKSkgPyBiYm94IDogQkJv
eCgobC9zKSpzLCh1L3MpKnMscykpOyB9CmlubGluZSBCQm94IGNvYXJzZW4oQkJveCBjb25zdCAm
YmJveCwgQ29vcmRzIGNvbnN0IGJ5KQp7IENvb3JkcyBzID0gYmJveC5zdGVwc2l6ZSgpICogYnk7
CiBjb25zdCBDb29yZHMmIHUgPSBiYm94LnVwcGVyKCk7IGNvbnN0IENvb3JkcyYgbCA9IGJib3gu
bG93ZXIoKTsKIHJldHVybiAoKGJib3guZW1wdHkoKSkgPyBiYm94IDogQkJveCgobC9zKSpzLCh1
L3MpKnMscykpOyB9CmlubGluZSBCQm94IGNvYXJzZW4oQkJveCBjb25zdCAmYmJveCwgY29uc3Qg
aW50IGQsIGNvbnN0IGludCBieSkKeyBDb29yZHMgcyA9IGJib3guc3RlcHNpemUoKTsgcyhkKSAq
PSBieTsKIGNvbnN0IENvb3JkcyYgdSA9IGJib3gudXBwZXIoKTsgY29uc3QgQ29vcmRzJiBsID0g
YmJveC5sb3dlcigpOwogcmV0dXJuICgoYmJveC5lbXB0eSgpKSA/IGJib3ggOiBCQm94KChsL3Mp
KnMsKHUvcykqcyxzKSk7IH0KCiAKaW5saW5lIEJCb3ggcmVmaW5lKGNvbnN0IEJCb3gmIGJib3gs
IGNvbnN0IGludCBieSkgCnsgcmV0dXJuIChCQm94KGJib3gubG93ZXIoKSxiYm94LnVwcGVyKCks
YmJveC5zdGVwc2l6ZSgpL2J5KSk7IH0KaW5saW5lIEJCb3ggcmVmaW5lKGNvbnN0IEJCb3gmIGJi
b3gsIGNvbnN0IENvb3JkcyYgYnkpIAp7IHJldHVybiAoQkJveChiYm94Lmxvd2VyKCksYmJveC51
cHBlcigpLGJib3guc3RlcHNpemUoKS9ieSkpOyB9CgogCmlubGluZSBCQm94IHJlZmluZShjb25z
dCBCQm94JiBiYm94LCBjb25zdCBpbnQgYnksIGNvbnN0IGludCBvbGFwKSAKeyBDb29yZHMgcyA9
IGJib3guc3RlcHNpemUoKTsgcyAvPSBieTsKIHJldHVybiAoQkJveChiYm94Lmxvd2VyKCksYmJv
eC51cHBlcigpKyhzKihvbGFwKihieS0xKSkpLHMpKTsgfQogCgoKaW5saW5lIEJCb3ggcmVmaW5l
KGNvbnN0IEJCb3gmIGJib3gsIGNvbnN0IGludCBkLCBjb25zdCBpbnQgYnksIAoJCSAgIGNvbnN0
IGludCBvbGFwKSAgIAp7IENvb3JkcyBzKGJib3guc3RlcHNpemUoKSk7IHMoZCkgLz0gYnk7IAog
Q29vcmRzIHUoYmJveC51cHBlcigpKTsgdShkKSArPSBzKGQpKihvbGFwKihieS0xKSk7CiByZXR1
cm4gKEJCb3goYmJveC5sb3dlcigpLHUscykpOyB9CgojIDEgIkNvb3Jkc0l0ZXJhdG9yLmgiIDEK
CgojIDEgIkJCb3guaCIgMQojIDY0OCAiQkJveC5oIgoKIyAzICJDb29yZHNJdGVyYXRvci5oIiAy
CgoKCmNsYXNzIENvb3Jkc0l0ZXJhdG9yIHsKICBCQm94IGI7CiAgaW50IGlbM107CiAgaW50IHI7
CiAgCiAgdm9pZCBzZXQoQkJveCYgYmkpIHsKICAgIGIgPSBiaTsKICAgIGZvcihpbnQgbj0wO248
Yi5yYW5rO24rKykKICAgICAgaVtuXT1iLmxvd2VyKG4pOwogICAgciA9IGIucmFuayAtIDE7CiAg
fQogIHZvaWQgaW5jKGludCBuKSB7CiAgICBpW25dICs9IGIuc3RlcHNpemUobik7CiAgICBpZihu
IDwgciAmJiBpW25dID4gYi51cHBlcihuKSkgewogICAgICBpW25dID0gYi5sb3dlcihuKTsKICAg
ICAgaW5jKG4rMSk7CiAgICB9CiAgfQogcHVibGljOgogIENvb3Jkc0l0ZXJhdG9yKCkge30KICBD
b29yZHNJdGVyYXRvcihCQm94IGJpKSB7IHNldChiaSk7IH0KICBDb29yZHNJdGVyYXRvciYgb3Bl
cmF0b3I9KEJCb3gmIGJpKSB7CiAgICBzZXQoYmkpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICB+
Q29vcmRzSXRlcmF0b3IoKSB7fQogIHZvaWQgb3BlcmF0b3IrKygpIHsgaW5jKDApOyB9CiAgdm9p
ZCBvcGVyYXRvcisrKGludCkgeyBpbmMoMCk7IH0KICBpbnQgZ29vZCgpIHsKICAgIHJldHVybiBp
W3JdIDw9IGIudXBwZXIocik7CiAgfQogIG9wZXJhdG9yIGludCgpIHsgcmV0dXJuIGdvb2QoKTsg
fQogIENvb3JkcyBvcGVyYXRvciooKSB7IHJldHVybiBDb29yZHMocisxLGkpOyB9Cn07Cgppbmxp
bmUgb3N0cmVhbSYKb3BlcmF0b3I8PChvc3RyZWFtJiBvLENvb3Jkc0l0ZXJhdG9yJiBiYmkpIHsK
ICByZXR1cm4gbyA8PCAqYmJpOwp9CgojIDY0NiAiQkJveC5oIiAyCgoKCiMgMTUgIkdyaWRCb3gu
aCIgMgoKCgoKY2xhc3MgR3JpZEJveCAKewogIGZyaWVuZCBvc3RyZWFtJiBvcGVyYXRvcjw8KG9z
dHJlYW0mLCBjb25zdCBHcmlkQm94Jik7CiAgZnJpZW5kIG9mc3RyZWFtJiBvcGVyYXRvcjw8KG9m
c3RyZWFtJiwgY29uc3QgR3JpZEJveCYpOwogIGZyaWVuZCBpZnN0cmVhbSYgb3BlcmF0b3I+Pihp
ZnN0cmVhbSYsIEdyaWRCb3gmKTsKICBmcmllbmQgY2xhc3MgR3JpZEJveExpc3Q7CiAgCiAgc2hv
cnQgaW50IG93bmVyOwkJIAogIHNob3J0IGludCBpbmRleDsJCSAKICBzaG9ydCBpbnQgcGluZGV4
OyAgICAgICAgICAgICAgCiAgc2hvcnQgaW50IGNyc2xldjsgCQkgCiAgc2hvcnQgaW50IGZpbmVs
ZXY7IAkJIAogIHNob3J0IGludCBsZXZzdGVwOyAgICAgICAgICAgICAKCiAgQkJveCBiYm94OyAg
ICAgICAgICAgICAgICAgICAgIAoKcHVibGljOgogICAKICBpbmxpbmUgR3JpZEJveCh2b2lkKQog
ICAgOiBvd25lcigoKC0xKSApICksIAogICAgICBpbmRleCgoLTEpICksIAogICAgICBwaW5kZXgo
KC0xKSApLAogICAgICBjcnNsZXYoMCksIAogICAgICBmaW5lbGV2KDApLCAKICAgICAgbGV2c3Rl
cCgwKSB7fQogIAogIGlubGluZSBHcmlkQm94KGNvbnN0IGludCBvd24sIAoJCSBjb25zdCBpbnQg
aWR4LCAKCQkgY29uc3QgaW50IHBpZHgsCgkJIGNvbnN0IGludCBjbGV2LCAKCQkgY29uc3QgaW50
IGZsZXYsIAoJCSBjb25zdCBpbnQgbHN0ZXAsIAoJCSBjb25zdCBCQm94JiBiYikKICAgIDogb3du
ZXIob3duKSwgCiAgICAgIGluZGV4KGlkeCksCiAgICAgIHBpbmRleChwaWR4KSwKICAgICAgY3Jz
bGV2KGNsZXYpLCAKICAgICAgZmluZWxldihmbGV2KSwgCiAgICAgIGxldnN0ZXAobHN0ZXApLCAK
ICAgICAgYmJveChiYikge30KICAKICBpbmxpbmUgR3JpZEJveChHcmlkQm94IGNvbnN0ICZvdGhl
cikKICAgIDogb3duZXIob3RoZXIub3duZXIpLCAKICAgICAgaW5kZXgob3RoZXIuaW5kZXgpLAog
ICAgICBwaW5kZXgob3RoZXIucGluZGV4KSwKICAgICAgY3JzbGV2KG90aGVyLmNyc2xldiksIAog
ICAgICBmaW5lbGV2KG90aGVyLmZpbmVsZXYpLCAKICAgICAgbGV2c3RlcChvdGhlci5sZXZzdGVw
KSwgCiAgICAgIGJib3gob3RoZXIuYmJveCkge30KICAKICBpbmxpbmUgfkdyaWRCb3godm9pZCkg
e30KCiAgaW5saW5lIEdyaWRCb3ggY29uc3QgJm9wZXJhdG9yPSAoR3JpZEJveCBjb25zdCAmb3Ro
ZXIpCiAgICB7IAogICAgICBvd25lcj1vdGhlci5vd25lcjsgCiAgICAgIGluZGV4PW90aGVyLmlu
ZGV4OwogICAgICBwaW5kZXg9b3RoZXIucGluZGV4OwogICAgICBjcnNsZXY9b3RoZXIuY3JzbGV2
OyAKICAgICAgZmluZWxldj1vdGhlci5maW5lbGV2OyAKICAgICAgbGV2c3RlcD1vdGhlci5sZXZz
dGVwOwogICAgICBiYm94PW90aGVyLmJib3g7IAogICAgICByZXR1cm4gKCp0aGlzKTsgCiAgICB9
CiAgCiAgaW5saW5lIHZvaWQgU2V0R3JpZEJveChjb25zdCBpbnQgb3duLCAKCQkJIGNvbnN0IGlu
dCBpZHgsIAoJCQkgY29uc3QgaW50IHBpZHgsCgkJCSBjb25zdCBpbnQgY2xldiwgCgkJCSBjb25z
dCBpbnQgZmxldiwgCgkJCSBjb25zdCBpbnQgbHN0ZXAsIAoJCQkgY29uc3QgQkJveCYgYmIpCiAg
ICB7IAogICAgICBvd25lcj1vd247IAogICAgICBpbmRleD1pZHg7IAogICAgICBwaW5kZXg9cGlk
eDsKICAgICAgY3JzbGV2PWNsZXY7IAogICAgICBmaW5lbGV2PWZsZXY7IAogICAgICBsZXZzdGVw
PWxzdGVwOyAKICAgICAgYmJveD1iYjsgCiAgICB9CiAgCiAgaW5saW5lIGludCBHZXRDYXJkaW5h
bGl0eShjb25zdCBpbnQgZGltLCAKCQkJICAgIGNvbnN0IGludCBsZXYpIGNvbnN0CiAgICB7IHJl
dHVybiAoaW50KTE8PChsZXYqZGltKTsgfQogIAogICAKICBpbmxpbmUgaW50IG9wZXJhdG9yPT0g
KEdyaWRCb3ggY29uc3QgJm90aGVyKSBjb25zdAogICAgewogICAgICBpZiAoKHRoaXMgPT0gJm90
aGVyKSB8fCAoY3JzbGV2ID09IG90aGVyLmNyc2xldiAmJiAKCSAgIGdiQkJveChjcnNsZXYpID09
IG90aGVyLmdiQkJveChjcnNsZXYpKSkgcmV0dXJuIDE7CiAgICAgICBlbHNlIHJldHVybiAwOwog
ICAgfQoKICAgIAogIGlubGluZSBpbnQgZ2JPd25lcih2b2lkKSBjb25zdCB7IHJldHVybiAob3du
ZXIpOyB9CiAgaW5saW5lIGludCBnYkluZGV4KHZvaWQpIGNvbnN0IHsgcmV0dXJuIChpbmRleCk7
IH0KICBpbmxpbmUgaW50IGdiUEluZGV4KHZvaWQpIGNvbnN0IHsgcmV0dXJuIChwaW5kZXgpOyB9
CiAgaW5saW5lIGludCBnYlJhbmsodm9pZCkgY29uc3QgeyByZXR1cm4gKGJib3gucmFuayk7IH0K
ICBpbmxpbmUgaW50IGdiRmluZUxldih2b2lkKSBjb25zdCB7IHJldHVybiAoZmluZWxldik7IH0K
ICBpbmxpbmUgaW50IGdiQ3JzTGV2KHZvaWQpIGNvbnN0IHsgcmV0dXJuIChjcnNsZXYpOyB9CiAg
aW5saW5lIGludCBnYk51bUxldih2b2lkKSBjb25zdCAKICAgIHsgcmV0dXJuICgoZmluZWxldi1j
cnNsZXYpL2xldnN0ZXArMSk7IH0KICBpbmxpbmUgaW50IGdiTGV2U3RlcCh2b2lkKSBjb25zdCB7
IHJldHVybiAobGV2c3RlcCk7IH0KICBpbmxpbmUgaW50IGdiTGV2SW5kZXgoY29uc3QgaW50IGxl
dikgY29uc3QKICAgIHsgcmV0dXJuICgobGV2LWNyc2xldikvbGV2c3RlcCk7IH0KCiAgaW5saW5l
IGludCBnYkNvbnRhaW5zKGNvbnN0IGludCBsZXYpIGNvbnN0CiAgICB7IHJldHVybiAobGV2PD1m
aW5lbGV2ICYmIGxldj49Y3JzbGV2KTsgfQogIGlubGluZSBpbnQgZ2JDb250YWlucyhjb25zdCBp
bnQgbWlubGV2LCAKCQkJY29uc3QgaW50IG1heGxldikgY29uc3QKICAgIHsgcmV0dXJuIChtaW5s
ZXY8PWZpbmVsZXYgJiYgbWF4bGV2Pj1jcnNsZXYpOyB9CgogIGlubGluZSB2b2lkIGdiU2V0SW5k
ZXgoY29uc3QgaW50IGlkeCkgeyBpbmRleCA9IGlkeDsgfQogIGlubGluZSB2b2lkIGdiU2V0T3du
ZXIoY29uc3QgaW50IHApIHsgb3duZXIgPSBwOyB9CgogIGludCBnYk51bShjb25zdCBpbnQgb3Zl
cmxhcCkgY29uc3Q7CiAgaW50IGdiV29yayhjb25zdCBpbnQgY2xldiwKCSAgICAgY29uc3QgaW50
IG92ZXJsYXApIGNvbnN0OwogIGludCBnYk51bShjb25zdCBpbnQgbGV2LCAKCSAgICBjb25zdCBp
bnQgb3ZlcmxhcCkgY29uc3Q7CiAgaW50IGdiV29yayhjb25zdCBpbnQgbGV2LCAKCSAgICAgY29u
c3QgaW50IGNsZXYsCgkgICAgIGNvbnN0IGludCBvdmVybGFwKSBjb25zdDsKCiAgaW50IGdiTnVt
KGNvbnN0IHNob3J0KiBvdmVybGFwKSBjb25zdDsKICBpbnQgZ2JXb3JrKGNvbnN0IGludCBjbGV2
LAoJICAgICBjb25zdCBzaG9ydCogb3ZlcmxhcCkgY29uc3Q7CiAgaW50IGdiTnVtKGNvbnN0IGlu
dCBsZXYsIAoJICAgIGNvbnN0IHNob3J0KiBvdmVybGFwKSBjb25zdDsKICBpbnQgZ2JXb3JrKGNv
bnN0IGludCBsZXYsIAoJICAgICBjb25zdCBpbnQgY2xldiwKCSAgICAgY29uc3Qgc2hvcnQqIG92
ZXJsYXApIGNvbnN0OwoKICBpbmxpbmUgdm9pZCBnYlNldEJCb3goY29uc3QgQkJveCYgYmIpIHsg
YmJveCA9IGJiOyB9CgogIGlubGluZSBjb25zdCBCQm94JiBnYkJCb3godm9pZCkgY29uc3QgeyBy
ZXR1cm4gYmJveDsgfQoKICBpbmxpbmUgQkJveCBnYkJCb3goY29uc3QgaW50IGxldikgY29uc3Qg
CiAgICB7IHJldHVybiAoKGxldiA9PSBmaW5lbGV2KSA/IGJib3ggOiAobGV2IDwgZmluZWxldiAm
JiBsZXYgPj0gY3JzbGV2KSA/CgkgICAgICBjb2Fyc2VuKGJib3gsR2V0Q2FyZGluYWxpdHkoMSxm
aW5lbGV2LWxldikpIDoKCSAgICAgIEJCb3g6Ol9lbXB0eV9iYm94KTsgfQogIAogIGlubGluZSBC
Qm94IGdiQkJveEFicyhjb25zdCBpbnQgbGV2KSBjb25zdCAKICAgIHsgcmV0dXJuICgobGV2ID09
IGZpbmVsZXYpID8gYmJveCA6IChsZXYgPCBmaW5lbGV2KSA/CgkgICAgICBjb2Fyc2VuKGJib3gs
R2V0Q2FyZGluYWxpdHkoMSxmaW5lbGV2LWxldikpIDoKCSAgICAgIHJlZmluZShiYm94LEdldENh
cmRpbmFsaXR5KDEsbGV2LWZpbmVsZXYpLDEpKTsgfQoJCQkJCiAgQkJveCBnYkJCb3goY29uc3Qg
aW50IGxldiwgCgkgICAgICBjb25zdCBpbnQgb2xhcCwKCSAgICAgIGNvbnN0IGludCBleHRnaD0w
KSBjb25zdDsKICBCQm94IGdiQkJveChjb25zdCBpbnQgbGV2LCAKCSAgICAgIGNvbnN0IHNob3J0
KiBvbGFwLAoJICAgICAgY29uc3QgaW50IGV4dGdoPTApIGNvbnN0OwogIEJCb3ggZ2JCQm94KGNv
bnN0IGludCBsZXYsIAoJICAgICAgY29uc3Qgc2hvcnQqIG9sYXAsCgkgICAgICBjb25zdCBzaG9y
dCogZXh0Z2gpIGNvbnN0OwogIAogIEJCb3ggZ2JCQm94QWJzKGNvbnN0IGludCBsZXYsIAoJCSBj
b25zdCBpbnQgb2xhcCwKCQkgY29uc3QgaW50IGV4dGdoPTApIGNvbnN0OwogIEJCb3ggZ2JCQm94
QWJzKGNvbnN0IGludCBsZXYsIAoJCSBjb25zdCBzaG9ydCogb2xhcCwKCQkgY29uc3QgaW50IGV4
dGdoPTApIGNvbnN0OwoKICBCQm94IGdiQkJveChjb25zdCBpbnQgbWlubCwgCgkgICAgICBjb25z
dCBpbnQgbWF4bCwgCgkgICAgICBjb25zdCBzaG9ydCogb2xhcCwgCgkgICAgICBjb25zdCBpbnQg
ZXh0Z2g9MCkgY29uc3Q7CiAgCiAgICAKICBpbmxpbmUgdm9pZCBnYkdldExldmVscyhHcmlkQm94
ICZnYiwgCgkJCSAgY29uc3QgaW50IGxldikgY29uc3QKICAgIHsgCiAgICAgIGdiLm93bmVyPW93
bmVyOyAKICAgICAgZ2IuaW5kZXg9aW5kZXg7CiAgICAgIGdiLnBpbmRleD1waW5kZXg7CiAgICAg
IGdiLmNyc2xldj1sZXY7IAogICAgICBnYi5maW5lbGV2PWxldjsgCiAgICAgIGdiLmxldnN0ZXA9
bGV2c3RlcDsgCiAgICAgIGdiLmJib3g9Z2JCQm94QWJzKGdiLmZpbmVsZXYpOyAKICAgIH0KCiAg
IGlubGluZSB2b2lkIGdiUmVmaW5lKEdyaWRCb3ggJmdiLCAKCQkJY29uc3QgaW50IGxldnMpIGNv
bnN0CiAgICAgeyAKICAgICAgIGdiLm93bmVyPW93bmVyOyAKICAgICAgIGdiLmluZGV4PWluZGV4
OwogICAgICAgZ2IucGluZGV4PXBpbmRleDsKICAgICAgIGdiLmNyc2xldj1maW5lbGV2K2xldnN0
ZXA7IAogICAgICAgZ2IuZmluZWxldj1maW5lbGV2K2xldnN0ZXAqbGV2czsgCiAgICAgICBnYi5s
ZXZzdGVwPWxldnN0ZXA7IAogICAgICAgZ2IuYmJveD1nYkJCb3hBYnMoZ2IuZmluZWxldik7IAog
ICAgIH0KCiAgICAKICAgaW5saW5lIHZvaWQgZ2JTZXRMZXZlbHMoR3JpZEJveCAmZ2IsIAoJCQkg
ICBjb25zdCBpbnQgbGV2KSBjb25zdAogICAgeyAKICAgICAgZ2IuY3JzbGV2PWxldjsgCiAgICAg
IGdiLmZpbmVsZXY9bGV2OyAKICAgICAgZ2IuYmJveD1nYkJCb3hBYnMoZ2IuZmluZWxldik7IAog
ICAgfQoKICAgaW5saW5lIHZvaWQgZ2JTZXRSZWZpbmUoR3JpZEJveCAmZ2IsCgkJCSAgIGNvbnN0
IGludCBsZXZzKSBjb25zdAogICAgeyAKICAgICAgZ2IuY3JzbGV2PWdiLmZpbmVsZXYrZ2IubGV2
c3RlcDsKICAgICAgZ2IuZmluZWxldis9KGdiLmxldnN0ZXAqbGV2cyk7CiAgICAgIGdiLmJib3g9
Z2JCQm94QWJzKGdiLmZpbmVsZXYpOyAKICAgIH0KfTsKCm9zdHJlYW0mICBvcGVyYXRvciA8PCAo
b3N0cmVhbSYgb3MsIGNvbnN0IEdyaWRCb3gmIGdiKTsKb2ZzdHJlYW0mIG9wZXJhdG9yIDw8IChv
ZnN0cmVhbSYgb2ZzLCBjb25zdCBHcmlkQm94JiBnYik7Cmlmc3RyZWFtJiBvcGVyYXRvciA+PiAo
aWZzdHJlYW0mIGlmcywgR3JpZEJveCYgZ2IpOwoKCgoKCiMgMTggIkFDRURpc3RyaWJ1dGlvbi5o
IiAyCgojIDEgIkdyaWRCb3hMaXN0LmgiIDEKCgoKICAKCgoKCgoKCgoKCgojIDEgIkJCb3hMaXN0
LmgiIDEKCgoKIAoKCgoKCgoKCgoKCgojIDEgIkJ1Y2tldFR5cGUuaCIgMQoKCgogCgoKCgoKCgoj
IDEgIlNpbXBsZUJ1Y2tldFZvaWQuaCIgMQoKCgoKIAoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUv
YXNzZXJ0LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgogCgoKCgojIDYzICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMKCgpleHRlcm4gIkMiIHsgCgog
CmV4dGVybiB2b2lkIF9fYXNzZXJ0X2ZhaWwgKF9fY29uc3QgY2hhciAqX19hc3NlcnRpb24sIF9f
Y29uc3QgY2hhciAqX19maWxlLAoJCQkgICB1bnNpZ25lZCBpbnQgX19saW5lLCBfX2NvbnN0IGNo
YXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJu
X18pKTsKCiAKZXh0ZXJuIHZvaWQgX19hc3NlcnRfcGVycm9yX2ZhaWwgKGludCBfX2Vycm51bSwg
X19jb25zdCBjaGFyICpfX2ZpbGUsCgkJCQkgIHVuc2lnbmVkIGludCBfX2xpbmUsCgkJCQkgIF9f
Y29uc3QgY2hhciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9f
bm9yZXR1cm5fXykpOwoKCiAKCmV4dGVybiB2b2lkIF9fYXNzZXJ0IChjb25zdCBjaGFyICpfX2Fz
c2VydGlvbiwgY29uc3QgY2hhciAqX19maWxlLCBpbnQgX19saW5lKQogICAgIHRocm93ICgpICBf
X2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKfSAKCgoKCgoKCgoKCgoKCiAKCgoKCgoK
CgoKCgoKCgoKIyAxMyAiU2ltcGxlQnVja2V0Vm9pZC5oIiAyCgojIDEgIi91c3IvaW5jbHVkZS9t
ZW1vcnkuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCiMgMTQgIlNp
bXBsZUJ1Y2tldFZvaWQuaCIgMgoKCgoKCgoKCiMgMSAiU3lzdGVtLmgiIDEKCgoKIAoKCgoKCgp0
eXBlZGVmIHVuc2lnbmVkIGxvbmcgcG9pbnRlcjsKCgojIDIyICJTaW1wbGVCdWNrZXRWb2lkLmgi
IDIKCgoKCgoKCgoKCgoKCgoKc3RydWN0IHJlY2hkciAKICB7CiAgIHVuc2lnbmVkIG15c2l6ZTsg
dW5zaWduZWQgbXlvZmY7CiAgIHVuc2lnbmVkIG5vZmY7IHVuc2lnbmVkIHBvZmY7CiAgIHBvaW50
ZXIgaGVhZDsKICB9OwoKc3RydWN0IHJlY2xpbmsgCiAgewogICB1bnNpZ25lZCBteXNpemU7IHVu
c2lnbmVkIG15b2ZmOwogICB1bnNpZ25lZCBub2ZmOyB1bnNpZ25lZCBwb2ZmOwogICBwb2ludGVy
IGhlYWQ7CiAgIHVuc2lnbmVkIG5leHQ7CiAgfTsKCnN0cnVjdCByZWNkYXRhIAogIHsKICAgdW5z
aWduZWQgbXlzaXplOyB1bnNpZ25lZCBteW9mZjsKICAgdW5zaWduZWQgbm9mZjsgdW5zaWduZWQg
cG9mZjsKICAgcG9pbnRlciBoZWFkOwogICB1bnNpZ25lZCBkYXRhWzJdOwogIH07CgpzdHJ1Y3Qg
Ymt0aGRyIAogIHsKICAgdW5zaWduZWQgYmxrc2l6ZTsgdW5zaWduZWQgbmJsa3M7CiAgIHVuc2ln
bmVkIGhlYWRvZmY7IHVuc2lnbmVkIHRhaWxvZmY7CiAgIHVuc2lnbmVkIGZyZWVvZmY7IHVuc2ln
bmVkIGNudDsKICB9OwoKdW5pb24gcmVjb3JkIAogIHsKICAgc3RydWN0IGJrdGhkciBiaGRyOwog
ICBzdHJ1Y3QgcmVjaGRyIGhkcjsKICAgc3RydWN0IHJlY2xpbmsgbGluazsKICAgc3RydWN0IHJl
Y2RhdGEgcmVjOwogICB1bnNpZ25lZCBkYXRhWzFdOwogCiAgIGlubGluZSBpbnQgaXNlbXB0eSh2
b2lkKSB7IHJldHVybiAoaGRyLm15c2l6ZSA9PSAwKTsgfQogICBmcmllbmQgb3N0cmVhbSYgb3Bl
cmF0b3I8PChvc3RyZWFtJiwgdW5pb24gcmVjb3JkJik7CiAgfTsKICAgCnN0cnVjdCBia3QKICB7
CiAgIHVuaW9uIHJlY29yZCAqaGVhZDsKCiAgIGlubGluZSBia3Qodm9pZCkgOiBoZWFkKDApIHt9
CiAgIGJrdCh1bnNpZ25lZCBjb25zdCBibGtzaXplLCB1bnNpZ25lZCBjb25zdCBuYmxrcyk7CiAg
IGJrdChzdHJ1Y3QgYmt0IGNvbnN0ICZvdGhlcik7CiAgIGJrdCh1bmlvbiByZWNvcmQgY29uc3Qg
Kmhkcik7CiAgIGJrdCh1bmlvbiByZWNvcmQgKmhkcik7CiAgIGlubGluZSB+Ymt0KHZvaWQpIAog
ICAgIHsgCgoKCgoKICAgICAgZGVsZXRlIFtdICgoY2hhciAqKWhlYWQpOyAKICAgICB9CgogICBm
cmllbmQgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgc3RydWN0IGJrdCYpOwogIH07CgoK
CgoKCmNsYXNzIFNpbXBsZUJ1Y2tldFZvaWQgCiAgewogICBmcmllbmQgb3N0cmVhbSYgb3BlcmF0
b3I8PChvc3RyZWFtJiwgU2ltcGxlQnVja2V0Vm9pZCYpOwoKICAgdW5zaWduZWQgYmxrc2l6ZTsK
ICAgdW5zaWduZWQgbmJsa3M7CgogICBzdHJ1Y3QgYmt0ICpia3RwdHI7CiAgIHVuc2lnbmVkIGZy
ZWVvZmY7CgogICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IFNpbXBsZUJ1Y2tldFZvaWQmKTsKCnB1
YmxpYzoKICAgaW5saW5lIFNpbXBsZUJ1Y2tldFZvaWQodm9pZCkKCTogYmxrc2l6ZSgwKSwgbmJs
a3MoMCksIGJrdHB0cigwKSwgZnJlZW9mZigwKSB7fQoKICAgU2ltcGxlQnVja2V0Vm9pZCh1bnNp
Z25lZCBjb25zdCBia3RzaXplLCB1bnNpZ25lZCBjb25zdCBia3RudW0pOwogICBTaW1wbGVCdWNr
ZXRWb2lkKHVuaW9uIHJlY29yZCAqaGRyKTsKICAgU2ltcGxlQnVja2V0Vm9pZCh1bmlvbiByZWNv
cmQgY29uc3QgKmhkcik7CiAgIFNpbXBsZUJ1Y2tldFZvaWQodW5pb24gcmVjb3JkIGNvbnN0ICpo
ZHIsIHVuc2lnbmVkIGNvbnN0IHNpemUsIGludCBjb25zdCBuKTsKICAgU2ltcGxlQnVja2V0Vm9p
ZChjb25zdCBTaW1wbGVCdWNrZXRWb2lkJik7CQoKICAgaW5saW5lIH5TaW1wbGVCdWNrZXRWb2lk
KHZvaWQpIHsgZGVsZXRlIGJrdHB0cjsgfQoKcHJpdmF0ZToKICAgdm9pZCBhbGxvY2JrdChpbnQg
Y29uc3QgaW5jciA9ICgxMjgpICk7CiAgIAogICBpbmxpbmUgdW5pb24gcmVjb3JkICpjb3B5ZGF0
YSh1bmlvbiByZWNvcmQgKnRvLCBjb25zdCB1bmlvbiByZWNvcmQgKmZyb20pCgl7CSAKICAgICAg
ICAgIG1lbWNweSgodm9pZCAqKSgoKGNoYXIgKil0bykrc2l6ZW9mKHN0cnVjdCByZWNoZHIpKSwK
ICAgICAgICAgICAgICAgICAodm9pZCAqKSgoKGNoYXIgY29uc3QgKilmcm9tKStzaXplb2Yoc3Ry
dWN0IHJlY2hkcikpLAoJICAgICAgICAgYmxrc2l6ZS1zaXplb2Yoc3RydWN0IHJlY2hkcikpOwoJ
ICAgCgkgICAKICAgICAgICAgIHJldHVybiAodG8pOwoJfQoKICAgIAoKICAgaW5saW5lIHVuaW9u
IHJlY29yZCAqYmt0R2V0SGVhZFJlYyh1bmlvbiByZWNvcmQgY29uc3QgKmJoZWFkKSBjb25zdAoJ
eyByZXR1cm4gKCh1bmlvbiByZWNvcmQgKikKCQkoKGNoYXIgY29uc3QgKikoYmhlYWQpKyhibGtz
aXplKmJoZWFkLT5iaGRyLmhlYWRvZmYpKSk7IH0KCiAgIGlubGluZSB1bmlvbiByZWNvcmQgKmJr
dEdldFRhaWxSZWModW5pb24gcmVjb3JkIGNvbnN0ICpiaGVhZCkgY29uc3QKCXsgcmV0dXJuICgo
dW5pb24gcmVjb3JkICopCgkJKChjaGFyIGNvbnN0ICopKGJoZWFkKSsoYmxrc2l6ZSpiaGVhZC0+
Ymhkci50YWlsb2ZmKSkpOyB9CgogICBpbmxpbmUgdW5pb24gcmVjb3JkICpia3RHZXRGcmVlUmVj
KHVuaW9uIHJlY29yZCBjb25zdCAqYmhlYWQpIGNvbnN0Cgl7IHJldHVybiAoKHVuaW9uIHJlY29y
ZCAqKQoJCSgoY2hhciBjb25zdCAqKShiaGVhZCkrKGJsa3NpemUqYmhlYWQtPmJoZHIuZnJlZW9m
ZikpKTsgfQoKICAgaW5saW5lIHVuaW9uIHJlY29yZCAqYmt0R2V0QXRSZWModW5pb24gcmVjb3Jk
IGNvbnN0ICpiaGVhZCwKCQl1bnNpZ25lZCBjb25zdCBvZmYpIGNvbnN0Cgl7IHJldHVybiAoKHVu
aW9uIHJlY29yZCAqKQoJCSgoY2hhciBjb25zdCAqKShiaGVhZCkrKGJsa3NpemUqb2ZmKSkpOyB9
CiAgCiAgIGlubGluZSB1bnNpZ25lZCBia3RHZXRoZWFkb2ZmKHVuaW9uIHJlY29yZCBjb25zdCAq
YmhlYWQpIGNvbnN0Cgl7IHJldHVybiAoYmhlYWQtPmJoZHIuaGVhZG9mZik7IH0KICAgaW5saW5l
IHZvaWQgYmt0U2V0aGVhZG9mZih1bmlvbiByZWNvcmQgKmJoZWFkLCB1bnNpZ25lZCBjb25zdCBv
ZmYpIAoJeyBiaGVhZC0+Ymhkci5oZWFkb2ZmID0gb2ZmOyB9CgogICBpbmxpbmUgdW5zaWduZWQg
Ymt0R2V0dGFpbG9mZih1bmlvbiByZWNvcmQgY29uc3QgKmJoZWFkKSBjb25zdAoJeyByZXR1cm4g
KGJoZWFkLT5iaGRyLnRhaWxvZmYpOyB9CiAgIGlubGluZSB2b2lkIGJrdFNldHRhaWxvZmYodW5p
b24gcmVjb3JkICpiaGVhZCwgdW5zaWduZWQgY29uc3Qgb2ZmKSAKCXsgYmhlYWQtPmJoZHIudGFp
bG9mZiA9IG9mZjsgfQoKICAgaW5saW5lIHVuc2lnbmVkIGJrdEdldGZyZWVvZmYodW5pb24gcmVj
b3JkIGNvbnN0ICpiaGVhZCkgY29uc3QKCXsgcmV0dXJuIChiaGVhZC0+Ymhkci5mcmVlb2ZmKTsg
fQogICBpbmxpbmUgdm9pZCBia3RTZXRmcmVlb2ZmKHVuaW9uIHJlY29yZCAqYmhlYWQsIHVuc2ln
bmVkIGNvbnN0IG9mZikgCgl7IGJoZWFkLT5iaGRyLmZyZWVvZmYgPSBvZmY7IH0KCiAgIGlubGlu
ZSB1bnNpZ25lZCBia3RHZXRjbnQodW5pb24gcmVjb3JkIGNvbnN0ICpiaGVhZCkgY29uc3QKCXsg
cmV0dXJuIChiaGVhZC0+Ymhkci5jbnQpOyB9CiAgIGlubGluZSB2b2lkIGJrdFNldGNudCh1bmlv
biByZWNvcmQgKmJoZWFkLCB1bnNpZ25lZCBjb25zdCBjbnQpIAoJeyBiaGVhZC0+Ymhkci5jbnQg
PSBjbnQ7IH0KICAgaW5saW5lIHZvaWQgYmt0SW5jcmNudCh1bmlvbiByZWNvcmQgKmJoZWFkKQoJ
eyBiaGVhZC0+Ymhkci5jbnQrKzsgfQogICBpbmxpbmUgdm9pZCBia3REZWNyY250KHVuaW9uIHJl
Y29yZCAqYmhlYWQpCgl7IGJoZWFkLT5iaGRyLmNudC0tOyB9CgogICAgCiAgCiAgIGlubGluZSB1
bmlvbiByZWNvcmQgKnJlY1ByZXZSZWModW5pb24gcmVjb3JkIGNvbnN0ICpyZWMpIGNvbnN0CiAg
ICAgICAgewogCSByZXR1cm4gKCAocmVjLT5oZHIucG9mZiAhPSAoKHVuc2lnbmVkKSAoMCkpICkg
PwogICAgICAgICAodW5pb24gcmVjb3JkICopICgoY2hhciAqKShyZWMtPmhkci5oZWFkKSsoYmxr
c2l6ZSpyZWMtPmhkci5wb2ZmKSkgOgogICAgICAgICAodW5pb24gcmVjb3JkICopICgwKSApOwog
ICAgICAgIH0KCiAgIGlubGluZSB1bmlvbiByZWNvcmQgKnJlY05leHRSZWModW5pb24gcmVjb3Jk
IGNvbnN0ICpyZWMpIGNvbnN0CiAgICAgICAgewogCSByZXR1cm4gKCAocmVjLT5oZHIubm9mZiAh
PSAoKHVuc2lnbmVkKSAoMCkpICkgPwogICAgICAgICAodW5pb24gcmVjb3JkICopICgoY2hhciAq
KShyZWMtPmhkci5oZWFkKSsoYmxrc2l6ZSpyZWMtPmhkci5ub2ZmKSkgOgogICAgICAgICAodW5p
b24gcmVjb3JkICopICgwKSApOwogICAgICAgIH0KICAKICAgaW5saW5lIHVuaW9uIHJlY29yZCAq
cmVjQXRSZWModW5pb24gcmVjb3JkIGNvbnN0ICpyZWMsCgkJdW5zaWduZWQgY29uc3Qgb2ZmKSBj
b25zdAogICAgICAgIHsKIAkgcmV0dXJuICggKG9mZiAhPSAoKHVuc2lnbmVkKSAoMCkpICkgPwog
ICAgICAgICAodW5pb24gcmVjb3JkICopICgoY2hhciAqKShyZWMtPmhkci5oZWFkKSsoYmxrc2l6
ZSpvZmYpKSA6CiAgICAgICAgICh1bmlvbiByZWNvcmQgKikgKDApICk7CiAgICAgICAgfQoKICAg
dW5pb24gcmVjb3JkICpia3RhZGRyZWModW5pb24gcmVjb3JkICpiaGVhZCk7CiAgIGlubGluZSB1
bmlvbiByZWNvcmQgKmJrdGFkZHJlYyh1bmlvbiByZWNvcmQgKmJoZWFkLCBjb25zdCB1bmlvbiBy
ZWNvcmQgKnJlYykKCXsKCSAgCgkgIAoJICAKCSByZXR1cm4gKCBjb3B5ZGF0YShia3RhZGRyZWMo
YmhlYWQpLHJlYykgKTsKCX0KCiAgIHZvaWQgYmt0YWRkZnJlZSh1bmlvbiByZWNvcmQgKmJoZWFk
LCB1bmlvbiByZWNvcmQgKnJlYyk7Cgpwcm90ZWN0ZWQ6CiAgIGlubGluZSBpbnQgYmxrcyh2b2lk
KSB7IHJldHVybiAobmJsa3MtMSk7fQogICBpbmxpbmUgaW50IGJzaXplKHZvaWQpIHsgcmV0dXJu
IChibGtzaXplKTt9CgogICB1bmlvbiByZWNvcmQgKmFkZHJlYyh2b2lkKTsKcHJpdmF0ZToKICAg
aW5saW5lIHVuaW9uIHJlY29yZCAqYWRkcmVjKGNvbnN0IHVuaW9uIHJlY29yZCogcmVjKQogICAg
ICAgIHsKCSAgCgkgIAoJICAKCiMgMjQxICJTaW1wbGVCdWNrZXRWb2lkLmgiCgoJIHJldHVybiAo
IGNvcHlkYXRhKGFkZHJlYygpLHJlYykgKTsKCgl9Cgpwcm90ZWN0ZWQ6CiAgIHVuaW9uIHJlY29y
ZCAqaW5zZXJ0cmVjKHVuaW9uIHJlY29yZComIGFmdGVyKTsKcHJpdmF0ZToKIAogCiAKIAogCgog
CiAKIAogCiAKIAogCiAKIAogCiAKIAoKcHJvdGVjdGVkOgogICB2b2lkIHJlbW92ZXJlYyh1bmlv
biByZWNvcmQgKnJlYyk7CgogICAgCiAgIGlubGluZSB1bmlvbiByZWNvcmQgKm5leHRyZWModW5p
b24gcmVjb3JkIGNvbnN0ICpyZWMpIGNvbnN0Cgl7IAogICAgICAgICByZXR1cm4gKCAKIAkgKHJl
Yy0+aGRyLm15b2ZmICE9IGJrdEdldHRhaWxvZmYoKHVuaW9uIHJlY29yZCAqKXJlYy0+aGRyLmhl
YWQpKSA/CiAgICAgICAgICh1bmlvbiByZWNvcmQgKikgKChjaGFyICopKHJlYy0+aGRyLmhlYWQp
KyhibGtzaXplKnJlYy0+aGRyLm5vZmYpKSA6CiAgICAgICAgICh1bmlvbiByZWNvcmQgKikgKDAp
ICk7Cgl9IAoKICAgaW5saW5lIHVuaW9uIHJlY29yZCAqcHJldnJlYyh1bmlvbiByZWNvcmQgY29u
c3QgKnJlYykgY29uc3QKCXsgCgkgcmV0dXJuICgKICAgICAgICAgKHJlYy0+aGRyLm15b2ZmICE9
IGJrdEdldGhlYWRvZmYoKHVuaW9uIHJlY29yZCAqKXJlYy0+aGRyLmhlYWQpKSA/CiAgICAgICAg
ICh1bmlvbiByZWNvcmQgKikgKChjaGFyICopKHJlYy0+aGRyLmhlYWQpKyhibGtzaXplKnJlYy0+
aGRyLnBvZmYpKSA6CiAgICAgICAgICh1bmlvbiByZWNvcmQgKikgKDApICk7Cgl9IAoKICAgaW5s
aW5lIHVuaW9uIHJlY29yZCAqaGVhZHJlYyh2b2lkKSBjb25zdAoJewogICAgICAgICByZXR1cm4g
KCAoYmt0cHRyLT5oZWFkLT5iaGRyLmNudCA+IDApID8KCSBia3RHZXRIZWFkUmVjKGJrdHB0ci0+
aGVhZCkgOiAoKHVuaW9uIHJlY29yZCAqKSAwKSAgKTsKCX0gCgogICBpbmxpbmUgdW5pb24gcmVj
b3JkICp0YWlscmVjKHZvaWQpIGNvbnN0Cgl7CiAgICAgICAgIHJldHVybiAoIChia3RwdHItPmhl
YWQtPmJoZHIuY250ID4gMCkgPwoJIGJrdEdldFRhaWxSZWMoYmt0cHRyLT5oZWFkKSA6ICgodW5p
b24gcmVjb3JkICopIDApICApOwoJfSAKCiAgIGlubGluZSB1bnNpZ25lZCBjb3VudCh2b2lkKSBj
b25zdAoJeyByZXR1cm4gKGJrdEdldGNudChia3RwdHItPmhlYWQpKTsgfQoKcHVibGljOgogICAg
CiAgIGlubGluZSBpbnQgaXNlbXB0eWJrdCh2b2lkKSB7IHJldHVybiAoYmt0cHRyLT5oZWFkLT5i
aGRyLmNudCA9PSAwKTsgfQogICB2b2lkIGVtcHR5Ymt0KHZvaWQpOwoKICAgdm9pZCBzcGxpdGJr
dChTaW1wbGVCdWNrZXRWb2lkICZzYnYsIHVuaW9uIHJlY29yZCAqYXRyZWMpOwoKICAgdm9pZCAq
cGFjayh1bnNpZ25lZCAmc2l6ZSk7CiAgIHZvaWQgcGFjayh2b2lkIComcGFja2FnZSwgdW5zaWdu
ZWQgJnNpemUpOwogICB2b2lkICpwYWNrKGludCAmc2l6ZSk7CiAgIHZvaWQgcGFjayh2b2lkICom
cGFja2FnZSwgaW50ICZzaXplKTsKICB9OwoKCiMgMTIgIkJ1Y2tldFR5cGUuaCIgMgoKCnRlbXBs
YXRlIDxjbGFzcyBUeXBlPgpjbGFzcyBCdWNrZXQgOiBwdWJsaWMgU2ltcGxlQnVja2V0Vm9pZAog
IHsKICAgdW5pb24gcmVjb3JkICpjdXI7CgogICBzdGF0aWMgaW5saW5lIHZvaWQgY29weXR5cGVk
YXRhKGNoYXIgKnRvLCBjaGFyIGNvbnN0ICpmcm9tKQoJeyAKICAgICAgICAgIG1lbWNweSgodm9p
ZCAqKXRvLCAodm9pZCAqKWZyb20sIHNpemVvZihUeXBlKSk7CiAgICAgICAgICAgCiAgICAgICAg
fQoKcHVibGljOgogICBpbmxpbmUgQnVja2V0KGNvbnN0IHVuc2lnbmVkIGJrdG51bSkKCTpTaW1w
bGVCdWNrZXRWb2lkKHNpemVvZihUeXBlKSxia3RudW0pLCBjdXIoMCkge30KCiAgIGlubGluZSBC
dWNrZXQodm9pZCBjb25zdCAqcGFja2FnZSkKCTpTaW1wbGVCdWNrZXRWb2lkKCh1bmlvbiByZWNv
cmQgY29uc3QgKikgcGFja2FnZSksIGN1cigwKSB7fQoKICAgaW5saW5lIEJ1Y2tldCh2b2lkICpw
YWNrYWdlKQoJOlNpbXBsZUJ1Y2tldFZvaWQoKHVuaW9uIHJlY29yZCAqKSBwYWNrYWdlKSwgY3Vy
KDApIHt9CgogICBpbmxpbmUgQnVja2V0KHZvaWQgY29uc3QgKnBhY2thZ2UsdW5zaWduZWQgY29u
c3Qgc2l6ZSwgaW50IGNvbnN0IG4pCgk6U2ltcGxlQnVja2V0Vm9pZCgodW5pb24gcmVjb3JkIGNv
bnN0ICopIHBhY2thZ2UsIHNpemUsIG4pLCBjdXIoMCkge30KCiAgIGlubGluZSBCdWNrZXQoQnVj
a2V0PFR5cGU+IGNvbnN0ICZvdGhlcikKCTpTaW1wbGVCdWNrZXRWb2lkKG90aGVyKSwgY3VyKDAp
IHt9CgogICBpbmxpbmUgVHlwZSogYWRkKHZvaWQpCgl7IGN1ciA9IGFkZHJlYygpOyByZXR1cm4g
KCAoKFR5cGUgKikgY3VyLT5yZWMuZGF0YSkgKTsgfQogICBpbmxpbmUgVHlwZSogYWRkKFR5cGUg
Y29uc3QgJnQpCgl7IAoKCgoKCSBjdXIgPSBhZGRyZWMoKTsgCgoKCgkgY29weXR5cGVkYXRhKChj
aGFyICopIGN1ci0+cmVjLmRhdGEsIChjaGFyICopICZ0KTsKCgkgcmV0dXJuICggKChUeXBlICop
IGN1ci0+cmVjLmRhdGEpICk7CiAgICAgICAgfQoKICAgaW5saW5lIFR5cGUqIGluc2VydCh2b2lk
KQoJeyBjdXIgPSBpbnNlcnRyZWMoY3VyKTsgcmV0dXJuICggKChUeXBlICopIGN1ci0+cmVjLmRh
dGEpICk7IH0KICAgaW5saW5lIFR5cGUqIGluc2VydChUeXBlIGNvbnN0ICZ0KQoJewoKCgoKIAkg
Y3VyID0gaW5zZXJ0cmVjKGN1cik7IAoKCgoJIGNvcHl0eXBlZGF0YSgoY2hhciAqKSBjdXItPnJl
Yy5kYXRhLCAoY2hhciAqKSAmdCk7CgoJIHJldHVybiAoICgoVHlwZSAqKSBjdXItPnJlYy5kYXRh
KSApOwogICAgICAgIH0KCiAgIGlubGluZSBUeXBlKiBmaXJzdCh2b2lkKQoJeyAKCSBjdXIgPSBo
ZWFkcmVjKCk7IAogICAgICAgICByZXR1cm4gKCAoY3VyICE9ICgodW5pb24gcmVjb3JkICopIDAp
ICAmJiAhY3VyLT5pc2VtcHR5KCkpID8gCSAgIChUeXBlICopIGN1ci0+cmVjLmRhdGEgOiAoVHlw
ZSAqKSBfX251bGwgICk7CgoJfQoKICAgaW5saW5lIFR5cGUqIGxhc3Qodm9pZCkgCgl7IAoJIGN1
ciA9IHRhaWxyZWMoKTsgCiAgICAgICAgIHJldHVybiAoIChjdXIgIT0gKCh1bmlvbiByZWNvcmQg
KikgMCkgICYmICFjdXItPmlzZW1wdHkoKSkgPyAJICAgKFR5cGUgKikgY3VyLT5yZWMuZGF0YSA6
IChUeXBlICopIF9fbnVsbCAgKTsKCgl9CgogICBpbmxpbmUgVHlwZSogY3VycmVudCh2b2lkKSBj
b25zdAoJeyAKICAgICAgICAgcmV0dXJuICggKGN1ciAhPSAoKHVuaW9uIHJlY29yZCAqKSAwKSAg
JiYgIWN1ci0+aXNlbXB0eSgpKSA/IAkgICAoVHlwZSAqKSBjdXItPnJlYy5kYXRhIDogKFR5cGUg
KikgX19udWxsICApOwoKCX0KCiAgIFR5cGUgKnJlbW92ZSh2b2lkKTsKICAgVHlwZSAqcHJldih2
b2lkKTsKICAgVHlwZSAqbmV4dCh2b2lkKTsKCiAgIGlubGluZSB1bmlvbiByZWNvcmQgKmN1cnJl
Yyh2b2lkKQogICAgICAgIHsgcmV0dXJuIChjdXIpOyB9CgogICBpbmxpbmUgdm9pZCBzZXRjdXJy
ZWModW5pb24gcmVjb3JkICpjKQogICAgICAgIHsgY3VyID0gYzsgfQoKICAgaW5saW5lIHZvaWQg
ZW1wdHkodm9pZCkKCXsgU2ltcGxlQnVja2V0Vm9pZDo6ZW1wdHlia3QoKTsgY3VyID0gKCh1bmlv
biByZWNvcmQgKikgMCkgOyB9CgogICBpbmxpbmUgdm9pZCBzcGxpdChCdWNrZXQ8VHlwZT4mIGJ0
KQoJewogICAgICAgICB1bmlvbiByZWNvcmQgKnIgPSBwcmV2cmVjKGN1cik7IAogICAgICAgICBT
aW1wbGVCdWNrZXRWb2lkOjpzcGxpdGJrdCgoU2ltcGxlQnVja2V0Vm9pZCAmKWJ0LCBjdXIpOwog
CSBidC5jdXIgPSAoKHVuaW9uIHJlY29yZCAqKSAwKSA7CiAgICAgICAgIGN1ciA9IHI7Cgl9CiAg
fTsKCgoKCgoKIyAxNyAiQkJveExpc3QuaCIgMgoKCgoKCgoKCgoKCgoKY2xhc3MgQkJveExpc3Qg
OiBwdWJsaWMgQnVja2V0PEJCb3g+CnsKICBmcmllbmQgb3N0cmVhbSYgb3BlcmF0b3IgPDwgKG9z
dHJlYW0mIHMsIGNvbnN0IEJCb3hMaXN0JiBiYmwpOwogIGZyaWVuZCBvZnN0cmVhbSYgb3BlcmF0
b3IgPDwgKG9mc3RyZWFtJiBzLCBjb25zdCBCQm94TGlzdCYgYmJsKTsKICBmcmllbmQgaWZzdHJl
YW0mIG9wZXJhdG9yID4+IChpZnN0cmVhbSYgcywgQkJveExpc3QmIGJibCk7CiAgCiAgZnJpZW5k
IGNsYXNzIEJCb3g7CiAgCiAgaW50IG51bTsKICAKIHByaXZhdGU6CiAgIAogICAKICAgCiAgaW5s
aW5lIGludCBzZXRzdGF0cyh2b2lkKQogICAgewogICAgICBudW0gPSAwOwogICAgICBmb3IgKCBC
Qm94ICpiPWZpcnN0KCk7YiE9ICgoQkJveCAqKSBfX251bGwgKSA7Yj1uZXh0KCkgKSBudW0rKzsK
ICAgICAgcmV0dXJuIG51bTsKICAgIH0KICAKIHB1YmxpYzoKICAgCiAgIAogICAKICBpbmxpbmUg
QkJveExpc3QoKQogICAgOiBCdWNrZXQ8QkJveD4oKDEyOCkgKSwgbnVtKDApIHt9CiAgCiAgIAog
ICAKICBpbmxpbmUgQkJveExpc3QodW5zaWduZWQgY29uc3QgbWF4bnVtLCBjb25zdCBpbnQgZHVt
YXJnKSAKICAgIDogQnVja2V0PEJCb3g+KG1heG51bSksIG51bSgwKSB7fQogIAogIGlubGluZSBC
Qm94TGlzdCh2b2lkIGNvbnN0ICpwYWNrYWdlLCB1bnNpZ25lZCBjb25zdCBzaXplLCBjb25zdCBp
bnQgbikKICAgIDogQnVja2V0PEJCb3g+KHBhY2thZ2UsIHNpemUsIG4pLCBudW0oMCkKICAgIHsg
c2V0c3RhdHMoKTsgfQogIAogICAKCgoKCgoKCiAgaW5saW5lIEJCb3hMaXN0KEJCb3hMaXN0IGNv
bnN0ICZvdGhlcikKICAgIDogQnVja2V0PEJCb3g+KG90aGVyKSwgbnVtKG90aGVyLm51bSkge30K
ICAKICBCQm94TGlzdCAmb3BlcmF0b3IgPSAoY29uc3QgQkJveExpc3QmKTsKICAKICAgCiAgIAog
ICAKICBpbmxpbmUgfkJCb3hMaXN0KHZvaWQpIHt9CiAgCiAgIAogICAKICAgCiAgaW5saW5lIGlu
dCBudW1iZXIoKSBjb25zdCB7IHJldHVybihudW0pOyB9CiAgaW5saW5lIGludCBpc2VtcHR5KCkg
Y29uc3QgeyByZXR1cm4obnVtID09IDApOyB9CiAgCiAgIAogICAKICAgCiAgaW5saW5lIHZvaWQg
ZW1wdHkodm9pZCkKICAgIHsgQnVja2V0PEJCb3g+OjplbXB0eSgpOyBudW0gPSAwOyB9CiAgCiAg
IAogICAKICAgCiAgIAogICAKICAgCiAgIAogIHZvaWQgb3BlcmF0b3IgLT0gKEJCb3hMaXN0IGNv
bnN0ICZyaHMpOyAgCiAgIAoKICB2b2lkIGludGVyc2VjdChjb25zdCBCQm94JiBiYm94LCBCQm94
TGlzdCYgYmJsKTsKICB2b2lkIGludGVyc2VjdChCQm94TGlzdCYgaW5iYmwsIEJCb3hMaXN0JiBi
YmwpOwoKICB2b2lkIGNjbGV2ZWxpbnRlcnNlY3QoY29uc3QgQkJveCYgYmJveCwgQkJveExpc3Qm
IGJibCk7CiAgdm9pZCBjY2xldmVsaW50ZXJzZWN0KEJCb3hMaXN0JiBpbmJibCwgQkJveExpc3Qm
IGJibCk7CiAgdm9pZCB2Y2xldmVsaW50ZXJzZWN0KGNvbnN0IEJCb3gmIGJib3gsIEJCb3hMaXN0
JiBiYmwpOwogIHZvaWQgdmNsZXZlbGludGVyc2VjdChCQm94TGlzdCYgaW5iYmwsIEJCb3hMaXN0
JiBiYmwpOwogcHJpdmF0ZToKICAgCiAgIAogICAKICB2b2lkIG5lc3QoY29uc3QgQkJveExpc3Qg
JnJocyk7CiAgCiBwdWJsaWM6CiAgIAogICAKICAgCiAgdm9pZCBtZXJnZWJveGVzKGNvbnN0IHNo
b3J0KiBvbGFwKTsKCiAgIAogICAKICAgCiAgdm9pZCBwcnVuZShjb25zdCBpbnQgbWludywgCgkg
ICAgIGNvbnN0IGludCBtYXh3KTsKICB2b2lkIHBydW5lX2JveChjb25zdCBCQm94JiB3aG9sZWJi
b3gsIAoJCSBCQm94TGlzdCYgYm94ZXMsCgkJIGNvbnN0IGludCBtaW53LCAKCQkgY29uc3QgaW50
IG1heHcpOwoKICAgCiAgIAogICAKICB2b2lkIGNvbWJpbmUoY29uc3QgQkJveExpc3QgJnJocyk7
CiAgCiAgIAogICAKICAgCiAgdm9pZCByZWZpbmUoY29uc3QgaW50IGZhY3RvciwgY29uc3QgaW50
IG9sYXApOwogIAogICAKICAgCiAgIAogIEJCb3ggcmVkdWNlKCk7CiAgCiAgIAogICAKICAgCiAg
aW50IGRpZmZlcmVuY2UoQkJveExpc3QmIGJibCwgCgkJIGNvbnN0IEJCb3ggbGhzLAoJCSBjb25z
dCBCQm94IHJocyk7CiAgCiAgIAogICAKICAgCiAgaW5saW5lIEJCb3ggKmFkZCgpCiAgICB7IG51
bSsrOyByZXR1cm4gKEJ1Y2tldDxCQm94Pjo6YWRkKCkpOyB9CiAgaW5saW5lIEJCb3ggKmFkZChC
Qm94IGNvbnN0ICZiYikKICAgIHsgbnVtKys7IHJldHVybiAoQnVja2V0PEJCb3g+OjphZGQoYmIp
KTsgfQogIGlubGluZSBCQm94ICppbnNlcnQoQkJveCBjb25zdCAmYmIpCiAgICB7IG51bSsrOyBy
ZXR1cm4gKEJ1Y2tldDxCQm94Pjo6aW5zZXJ0KGJiKSk7IH0KICBpbmxpbmUgdm9pZCByZW1vdmUo
dm9pZCkKICAgIHsgCiAgICAgIEJCb3ggKmJiID0gY3VycmVudCgpOwogICAgICBpZiAoYmIpIHsg
bnVtLS07IEJ1Y2tldDxCQm94Pjo6cmVtb3ZlKCk7IH0KICAgIH0KICAKICAgCiAgIAogICAKICBp
bmxpbmUgdm9pZCBzcGxpdChCQm94TGlzdCAmYmJsKQogICAgewogICAgICBCdWNrZXQ8QkJveD46
OnNwbGl0KChCdWNrZXQ8QkJveD4gJikgYmJsKTsKICAgICAgYmJsLnNldHN0YXRzKCk7IG51bSAt
PSBiYmwubnVtOwogICAgfQoKCiAgdm9pZCBjaGVja292ZXJsYXAoKTsKCn07Cgpvc3RyZWFtJiBv
cGVyYXRvcjw8KG9zdHJlYW0mLCBjb25zdCBCQm94TGlzdCYpOwpvZnN0cmVhbSYgb3BlcmF0b3I8
PChvZnN0cmVhbSYsIGNvbnN0IEJCb3hMaXN0Jik7Cmlmc3RyZWFtJiBvcGVyYXRvcj4+KGlmc3Ry
ZWFtJiwgQkJveExpc3QmKTsKCiAKIAogCmlubGluZSBCQm94ICpmaXJzdChCQm94TGlzdCAmYmJs
KQp7IHJldHVybiAoYmJsLmZpcnN0KCkpOyB9CmlubGluZSBCQm94ICpuZXh0KEJCb3hMaXN0ICZi
YmwpCnsgcmV0dXJuIChiYmwubmV4dCgpKTsgfQppbmxpbmUgQkJveCAqcHJldihCQm94TGlzdCAm
YmJsKQp7IHJldHVybiAoYmJsLnByZXYoKSk7IH0KaW5saW5lIEJCb3ggKmN1cnJlbnQoQkJveExp
c3QgJmJibCkKeyByZXR1cm4gKGJibC5jdXJyZW50KCkpOyB9CmlubGluZSBCQm94ICpsYXN0KEJC
b3hMaXN0ICZiYmwpCnsgcmV0dXJuIChiYmwubGFzdCgpKTsgfQoKaW5saW5lIHZvaWQgYWRkKEJC
b3hMaXN0ICZiYmwsIEJCb3ggY29uc3QgJmJiKQp7IGJibC5hZGQoYmIpOyB9CmlubGluZSB2b2lk
IGluc2VydChCQm94TGlzdCAmYmJsLCBCQm94IGNvbnN0ICZiYikKeyBiYmwuaW5zZXJ0KGJiKTsg
fQppbmxpbmUgdm9pZCByZW1vdmUoQkJveExpc3QgJmJibCkKeyBiYmwucmVtb3ZlKCk7IH0KCmlu
bGluZSBpbnQgbnVtYmVyKEJCb3hMaXN0IGNvbnN0ICZiYmwpCnsgcmV0dXJuIChiYmwubnVtYmVy
KCkpOyB9CmlubGluZSBpbnQgaXNlbXB0eShCQm94TGlzdCBjb25zdCAmYmJsKQp7IHJldHVybiAo
YmJsLmlzZW1wdHkoKSk7IH0KCmlubGluZSB2b2lkIGVtcHR5KEJCb3hMaXN0ICZiYmwpCnsgYmJs
LmVtcHR5KCk7IH0KCiMgMTYgIkdyaWRCb3hMaXN0LmgiIDIKCgoKIyAxICJPYmplY3RDb3VudGVy
LmgiIDEKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpjbGFzcyBPYmplY3RDb3VudGVyCiAg
ewogICBpbnQgcmVmZXJlbmNlczsKcHVibGljOgogICBpbmxpbmUgT2JqZWN0Q291bnRlcigpIDog
cmVmZXJlbmNlcygxKSB7IH0KICAgaW5saW5lIE9iamVjdENvdW50ZXIgKmFsaWFzKCkgeyByZWZl
cmVuY2VzKys7IHJldHVybih0aGlzKTsgfQogICBpbmxpbmUgdm9pZCBmcmVlKCkgeyBpZiAoLS1y
ZWZlcmVuY2VzID09IDApIGRlbGV0ZSB0aGlzOyB9CiAgICAKICAgaW5saW5lIHZpcnR1YWwgfk9i
amVjdENvdW50ZXIoKSB7IH0KICB9OwoKCiMgMTkgIkdyaWRCb3hMaXN0LmgiIDIKCgoKCgoKCgog
CgoKCmNsYXNzIEdyaWRCb3hMaXN0IDogcHVibGljIEJ1Y2tldDxHcmlkQm94PiwgcHVibGljIE9i
amVjdENvdW50ZXIKICB7CiAgIGZyaWVuZCBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBj
b25zdCBHcmlkQm94TGlzdCYpOwogICBmcmllbmQgb2ZzdHJlYW0mIG9wZXJhdG9yPDwob2ZzdHJl
YW0mLCBjb25zdCBHcmlkQm94TGlzdCYpOwogICBmcmllbmQgaWZzdHJlYW0mIG9wZXJhdG9yPj4o
aWZzdHJlYW0mLCBHcmlkQm94TGlzdCYpOwoKICAgaW50IG51bTsKCnByaXZhdGU6CiAgIHN0YXRp
YyBpbmxpbmUgdm9pZCBjb3B5dHlwZWRhdGEoR3JpZEJveCogdG8sIGNvbnN0IEdyaWRCb3gqIGZy
b20pCiAgICAgeyBtZW1jcHkoKHZvaWQgKikgdG8sICh2b2lkICopIGZyb20sIHNpemVvZihHcmlk
Qm94KSk7IH0KCiAgICAKICAgIAogICAgCiAgIGlubGluZSB2b2lkIHNldHN0YXRzKHZvaWQpCiAg
ICAge251bT0wO2ZvciAocmVnaXN0ZXIgR3JpZEJveCAqZz1maXJzdCgpO2c7Zz1uZXh0KCkpbnVt
Kys7fQoKcHVibGljOgogICAgCiAgICAKICAgIAogICBpbmxpbmUgR3JpZEJveExpc3QoKQogICAg
IDogQnVja2V0PEdyaWRCb3g+KCgzMikgKSwgbnVtKDApIHt9CgogICAgCiAgICAKICAgaW5saW5l
IEdyaWRCb3hMaXN0KGNvbnN0IGludCBtYXhudW0sIGNvbnN0IGludCBkdW1hcmcpCiAgICAgOiBC
dWNrZXQ8R3JpZEJveD4obWF4bnVtKSwgbnVtKDApIHt9CgogICBpbmxpbmUgR3JpZEJveExpc3Qo
Y29uc3Qgdm9pZCogcGFja2FnZSwgY29uc3QgaW50IHNpemUsIAoJICAgICAgIGNvbnN0IGludCBu
KQogICAgIDogQnVja2V0PEdyaWRCb3g+KHBhY2thZ2UsIHNpemUsIG4pLCBudW0oMCkgeyBzZXRz
dGF0cygpOyB9CgogICBpbmxpbmUgR3JpZEJveExpc3QoY29uc3QgR3JpZEJveExpc3QmIG90aGVy
KQogICAgIDogQnVja2V0PEdyaWRCb3g+KG90aGVyKSwgbnVtKG90aGVyLm51bSkge30KCiAgICAK
ICAgIAogICAgCiAgIEdyaWRCb3hMaXN0JiBvcGVyYXRvciA9IChjb25zdCBHcmlkQm94TGlzdCYp
OwoKICAgIAogICAgCiAgICAKICAgaW5saW5lIH5HcmlkQm94TGlzdCh2b2lkKSB7fQoKICAgIAog
ICAgCiAgICAKICAgaW5saW5lIEdyaWRCb3hMaXN0ICphbGlhcygpCgl7IHJldHVybigoR3JpZEJv
eExpc3QgKikgT2JqZWN0Q291bnRlcjo6YWxpYXMoKSk7IH0KCiAgICAKICAgIAogICAgCiAgIGlu
dCBkaWZmZXJlbmNlKEdyaWRCb3hMaXN0JiBnYmwsIAoJCSAgY29uc3QgR3JpZEJveCBsaHMsIAoJ
CSAgY29uc3QgR3JpZEJveCByaHMpOwogICBpbnQgaW50ZXJzZWN0aW9uKEdyaWRCb3hMaXN0JiBn
YmwsIAoJCSAgICBjb25zdCBHcmlkQm94IGxocywgCgkJICAgIGNvbnN0IEdyaWRCb3ggcmhzKTsK
ICAgdm9pZCBvcGVyYXRvciAtPSAoY29uc3QgR3JpZEJveExpc3QmIHJocyk7ICAKICAgdm9pZCBv
cGVyYXRvciAqPSAoY29uc3QgR3JpZEJveExpc3QmIHJocyk7ICAKICAgIAogICAgCiAgICAKCiAg
ICAKICAgIAogICAgCnByaXZhdGU6IAogICAgCiAgICAKICAgIAogCiAgICAKICAgIAogICAgCnB1
YmxpYzoKICAgdm9pZCBpbnRlcnNlY3QoY29uc3QgQkJveCYgcmhzLCBjb25zdCBpbnQgbGV2LCBH
cmlkQm94TGlzdCYgZ2JsKTsKICAgdm9pZCBpbnRlcnNlY3QoY29uc3QgQkJveCYgcmhzLCBjb25z
dCBpbnQgbGV2LCBHcmlkQm94TGlzdCYgZ2JsLCAKICAgICAgICAgICAgICAgICAgY29uc3QgaW50
IG9sYXAsIGNvbnN0IGludCBleHRnaD0wKTsKICAgdm9pZCBpbnRlcnNlY3QoY29uc3QgQkJveExp
c3QmIHJocywgY29uc3QgaW50IGxldiwgR3JpZEJveExpc3QmIGdibCwgCiAgICAgICAgICAgICAg
ICAgIGNvbnN0IGludCBvbGFwLCBjb25zdCBpbnQgZXh0Z2g9MCk7CiAgIHZvaWQgaW50ZXJzZWN0
KGNvbnN0IEJCb3gmIHJocywgY29uc3QgaW50IGxldiwgR3JpZEJveExpc3QmIGdibCwgCiAgICAg
ICAgICAgICAgICAgIGNvbnN0IHNob3J0KiBvbGFwLCBjb25zdCBpbnQgZXh0Z2g9MCk7CiAgIHZv
aWQgaW50ZXJzZWN0KGNvbnN0IEJCb3hMaXN0JiByaHMsIGNvbnN0IGludCBsZXYsIEdyaWRCb3hM
aXN0JiBnYmwsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3J0KiBvbGFwLCBjb25zdCBpbnQg
ZXh0Z2g9MCk7CgogICAgCiAgICAKICAgIApwdWJsaWM6CiAgIGlubGluZSBpbnQgaXNlbXB0eSgp
IGNvbnN0IHsgcmV0dXJuKG51bSA9PSAwKTsgfQogICBpbmxpbmUgaW50IG51bWJlcigpIGNvbnN0
IHsgcmV0dXJuKG51bSk7IH0KCiAgIGludCBsb2FkKGNvbnN0IGludCBjbGV2LCAKCSAgICBjb25z
dCBpbnQgb2xhcCwKCSAgICBjb25zdCBpbnQgcGlkKTsKICAgaW50IGxvYWQoY29uc3QgaW50IGxl
diwgCgkgICAgY29uc3QgaW50IGNsZXYsCgkgICAgY29uc3QgaW50IG9sYXAsCgkgICAgY29uc3Qg
aW50IHBpZCk7CiAgIGludCBudW1lbGVtcyhjb25zdCBpbnQgb2xhcCwKCQljb25zdCBpbnQgcGlk
KTsKICAgaW50IG51bWVsZW1zKGNvbnN0IGludCBsZXYsIAoJCWNvbnN0IGludCBvbGFwLAoJCWNv
bnN0IGludCBwaWQpOwogIAogICBpbnQgbG9hZChjb25zdCBpbnQgY2xldiwKCSAgICBjb25zdCBz
aG9ydCogb2xhcCwKCSAgICBjb25zdCBpbnQgcGlkKTsKICAgaW50IGxvYWQoY29uc3QgaW50IGxl
diwgCgkgICAgY29uc3QgaW50IGNsZXYsCgkgICAgY29uc3Qgc2hvcnQqIG9sYXAsCgkgICAgY29u
c3QgaW50IHBpZCk7CiAgIGludCBudW1lbGVtcyhjb25zdCBzaG9ydCogb2xhcCwKCQljb25zdCBp
bnQgcGlkKTsKICAgaW50IG51bWVsZW1zKGNvbnN0IGludCBsZXYsIAoJCWNvbnN0IHNob3J0KiBv
bGFwLAoJCWNvbnN0IGludCBwaWQpOwoKICAgaW50IG51bXByb2NzKHZvaWQpOwoKICAgaW50IGNv
YXJzZXN0KHZvaWQpOwogICBpbnQgZmluZXN0KHZvaWQpOwogICBpbnQgc21hbGxlc3QoY29uc3Qg
aW50IGxldmVsKTsKICAgaW50IG1heGluZGV4KHZvaWQpOwoKICAgaW50IG1hdGNoZXMoY29uc3Qg
QkJveCYgYmIsIGNvbnN0IGludCBsZXYpOwogICBpbnQgYWJzbWF0Y2hlcyhjb25zdCBCQm94JiBi
YiwgY29uc3QgaW50IGxldik7CgogICBpbnQgaW5kZXgoY29uc3QgQkJveCYgYmIsIGNvbnN0IGlu
dCBsZXYpOwogICBpbnQgYWJzaW5kZXgoY29uc3QgQkJveCYgYmIsIGNvbnN0IGludCBsZXYpOwog
ICBjb25zdCBHcmlkQm94JiBmaW5kKGNvbnN0IEJCb3gmIGJiLCBjb25zdCBpbnQgbGV2KTsKCiAg
ICAKICAgIAogICAgCnB1YmxpYzoKICAgaW5saW5lIHZvaWQgc2V0aW5kZXgodm9pZCkKICAgICB7
IHJlZ2lzdGVyIGludCBpZHg9MDsgCiAgICAgICBmb3IgKHJlZ2lzdGVyIEdyaWRCb3ggKmc9Zmly
c3QoKTtnO2c9bmV4dCgpKSBnLT5pbmRleD1pZHgrKzsgfQogICBpbmxpbmUgdm9pZCBzZXRvd25l
cihjb25zdCBpbnQgcCkKICAgICB7IGZvciAocmVnaXN0ZXIgR3JpZEJveCAqZz1maXJzdCgpO2c7
Zz1uZXh0KCkpIGctPm93bmVyPXA7IH0KICAgaW5saW5lIHZvaWQgc2V0cGFyZW50KGNvbnN0IGlu
dCBwKQogICAgIHsgZm9yIChyZWdpc3RlciBHcmlkQm94ICpnPWZpcnN0KCk7ZztnPW5leHQoKSkg
Zy0+cGluZGV4PXA7IH0KICAgCiAgICAKICAgIAogICAgCiAgIGlubGluZSB2b2lkIGVtcHR5KHZv
aWQpCiAgICAgeyBCdWNrZXQ8R3JpZEJveD46OmVtcHR5KCk7IG51bSA9IDA7IH0KCiAgICAKICAg
IAogICAgCiAgIGlubGluZSBHcmlkQm94ICphZGQoKSAKICAgICB7IG51bSsrOyByZXR1cm4gKEJ1
Y2tldDxHcmlkQm94Pjo6YWRkKCkpOyB9CiAgIGlubGluZSBHcmlkQm94ICphZGQoY29uc3QgR3Jp
ZEJveCYgZ2IpIAogICAgIHsgbnVtKys7IHJldHVybiAoQnVja2V0PEdyaWRCb3g+OjphZGQoZ2Ip
KTsgfQogICBpbmxpbmUgR3JpZEJveCAqaW5zZXJ0KGNvbnN0IEdyaWRCb3gmIGdiKQogICAgIHsg
bnVtKys7ICByZXR1cm4gKEJ1Y2tldDxHcmlkQm94Pjo6aW5zZXJ0KGdiKSk7IH0KICAgaW5saW5l
IHZvaWQgcmVtb3ZlKHZvaWQpCiAgICAgeyBpZiAoY3VycmVudCgpKSB7IG51bS0tOyBCdWNrZXQ8
R3JpZEJveD46OnJlbW92ZSgpOyB9fQoKICAgIAogICAgCiAgICAKICAgdm9pZCBsZXZlbGxpc3Qo
R3JpZEJveExpc3QmIGdibCwgY29uc3QgaW50IGxldik7CiAgIHZvaWQgbGV2ZWxsaXN0KEdyaWRC
b3hMaXN0JiBnYmwsIGNvbnN0IGludCBtaW5sZXYsIAoJCSAgY29uc3QgaW50IG1heGxldik7Cgog
ICAgCiAgICAKICAgIAogICBHcmlkQm94TGlzdCogcmVmaW5lbGlzdChjb25zdCBpbnQgYXRsZXYs
IGNvbnN0IGludCBsZXZzKTsKCiAgICAKICAgIAogICAgCnB1YmxpYzoKICAgdm9pZCBiYm94bGlz
dChCQm94TGlzdCYgYmJsLCBjb25zdCBpbnQgbGV2LCBjb25zdCBpbnQgb2xhcCk7CiAgIHZvaWQg
YmJveGxpc3QoQkJveExpc3QmIGJibCwgY29uc3QgaW50IGxldiwgY29uc3QgaW50IG9sYXAsIAog
ICAgICAgICAgICAgICAgIGNvbnN0IGludCBsZXZpZCk7CiAgIHZvaWQgYmJveGxpc3QoQkJveExp
c3QmIGJibCwgY29uc3QgaW50IGxldiwgY29uc3Qgc2hvcnQqIG9sYXAsCiAgICAgICAgICAgICAg
ICAgY29uc3QgaW50IGV4dGdoKTsKICAgdm9pZCBiYm94bGlzdChCQm94TGlzdCYgYmJsLCBjb25z
dCBpbnQgbGV2LCBjb25zdCBzaG9ydCogb2xhcCwgCiAgICAgICAgICAgICAgICAgY29uc3QgaW50
IGxldmlkLCBjb25zdCBpbnQgZXh0Z2gpOwogIH07Cgpvc3RyZWFtJiAgb3BlcmF0b3IgPDwgKG9z
dHJlYW0mIG9zLCBjb25zdCBHcmlkQm94TGlzdCYgZ2JsKTsKb2ZzdHJlYW0mIG9wZXJhdG9yIDw8
IChvZnN0cmVhbSYgb2ZzLCBjb25zdCBHcmlkQm94TGlzdCYgZ2JsKTsKaWZzdHJlYW0mIG9wZXJh
dG9yID4+IChpZnN0cmVhbSYgaWZzLCBHcmlkQm94TGlzdCYgZ2JsKTsKCgojIDE5ICJBQ0VEaXN0
cmlidXRpb24uaCIgMgoKIyAxICJHcmlkVW5pdC5oIiAxCgoKCiAgCgoKCgoKCgoKCgoKIAoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICJBQ0VTZmMuaCIgMQoKCgogCgoKCgoKCgoKCgoKCgoj
IDEgIlBlYW5vSGlsYmVydC5oIiAxCgoKCiAKCgoKCgoKCgoKCgoKCgoKCiMgMSAic2ZjSW5kZXgu
aCIgMQoKCgogCgoKCgoKCgoKCgoKCgoKCgojIDEgIkJpdFZlYy5oIiAxCgoKCiAKCgoKCgoKCgog
CgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQv
aW5jbHVkZS9saW1pdHMuaCIgMSAzCiAKCgogCgoKCgoKIAojIDEgIi91c3IvbGliL2djYy1saWIv
aTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMSAzCiAKCgoKCgojIDEgIi91
c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiAK
CgogCgojIDExNCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL2xp
bWl0cy5oIiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIAoKCgoKCgoKCgoK
CgoKCgoKCiAKCgoKCgoKCgoKIAoKCgoKCiAKCiMgMTEzICIvdXNyL2luY2x1ZGUvbGltaXRzLmgi
IDMKCgoKCiAgCgoKCgojIDE0MCAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCgoKCiAKIyAxICIv
dXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKCgoKCgogCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCgogCgoKIAoKCiAKCgog
CgoKIAoKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgoK
IAoKCiAKCgogCgoKIAoKCiAKCgoKIAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5o
IiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKIAojIDEgIi91c3IvaW5j
bHVkZS9saW51eC9saW1pdHMuaCIgMSAzCgoKCgoKCgoKCgoKCgoKCgoKCgojIDM2ICIvdXNyL2lu
Y2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMiAzCgoKIAoKCgoKIAoKCgoKIAoKCgoKCiAKCiAKCgog
CgogCgoKIAoKIAoKCiAKCgoKIAoKCiAKCiMgMTI2ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFf
bGltLmgiIDIgMwoKCgoKCgoKCiAKCgoKCgoKCiMgMTQ0ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgi
IDIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDJfbGltLmgiIDEgMwogCgoKCgoK
CgoKCgoKCgoKCgoKIAoKCgoKCgoKIAoKCiAKCgogCgoKIAoKCiAKCgoKIAoKCgogCgoKIAoKCgog
CgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiMgMTQ4ICIvdXNyL2luY2x1
ZGUvbGltaXRzLmgiIDIgMwoKCgoKCgojIDExNyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4
LzIuOTUuNC9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKCiMgNyAiL3Vzci9saWIvZ2NjLWxpYi9p
Mzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMKCgojIDExICIvdXNyL2xp
Yi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgoKCiAK
CgoKIAoKCgogCgoKCgogCgoKCgoKIAoKCgogCgoKCgoKCgoKCgoKCiAKCiAKCgoKCiAKCgoKIAoK
CgoKCgoKCiAKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgojIDEwNyAiL3Vzci9saWIvZ2NjLWxpYi9p
Mzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL2xpbWl0cy5oIiAzCgoKCgogCgoKCgoKCgoKCiMgMzAg
IkJpdFZlYy5oIiAyCgoKIyAxICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMwogCgoKCgoKCgoK
CgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgojIDYzICIvdXNyL2luY2x1
ZGUvYXNzZXJ0LmgiIDMKCgpleHRlcm4gIkMiIHsgCgogCmV4dGVybiB2b2lkIF9fYXNzZXJ0X2Zh
aWwgKF9fY29uc3QgY2hhciAqX19hc3NlcnRpb24sIF9fY29uc3QgY2hhciAqX19maWxlLAoJCQkg
ICB1bnNpZ25lZCBpbnQgX19saW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhy
b3cgKCkgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCiAKZXh0ZXJuIHZvaWQgX19h
c3NlcnRfcGVycm9yX2ZhaWwgKGludCBfX2Vycm51bSwgX19jb25zdCBjaGFyICpfX2ZpbGUsCgkJ
CQkgIHVuc2lnbmVkIGludCBfX2xpbmUsCgkJCQkgIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikK
ICAgICB0aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCiAKCmV4dGVy
biB2b2lkIF9fYXNzZXJ0IChjb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgY29uc3QgY2hhciAqX19m
aWxlLCBpbnQgX19saW5lKQogICAgIHRocm93ICgpICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVy
bl9fKSk7CgoKfSAKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKIyAzMiAiQml0VmVjLmgi
IDIKCgoKCgoKCgoKCiAKdHlwZWRlZiBpbnQgQml0VmVjVHlwZTsKCgoKCgpjbGFzcyBCaXRWZWMK
ICB7CiAgIGludCBsZW5ndGg7CiAgIHNob3J0IGludCBzbG90czsKICAgc2hvcnQgaW50IHNsb3Rf
d2lkdGg7CiAgIEJpdFZlY1R5cGUgYnZlY1soNCkgXTsKCnByaXZhdGU6CgogICBpbmxpbmUgaW50
IEdldFNsb3QoY29uc3QgaW50IGxvYykgY29uc3QKCXtyZXR1cm4gbG9jL3Nsb3Rfd2lkdGg7fQog
ICBpbmxpbmUgaW50IE1hc2tCaXQoY29uc3QgaW50IGxvYykgY29uc3QKCXtyZXR1cm4gKGludCkx
IDw8IChzbG90X3dpZHRoLShsb2Mlc2xvdF93aWR0aCktMSk7fQoKcHVibGljOgoKICAgaW5saW5l
IEJpdFZlYygpCgk6IGxlbmd0aCgwKSwgc2xvdHMoMCkKCXtzbG90X3dpZHRoID0gKHNpemVvZihC
aXRWZWNUeXBlKSogKDgpICk7fQoKICAgQml0VmVjKGNvbnN0IGludCBsZW4pOwogICBCaXRWZWMo
Qml0VmVjIGNvbnN0ICZvdGhlcikKICAgICA6IGxlbmd0aChvdGhlci5sZW5ndGgpLAogICAgIHNs
b3RzKG90aGVyLnNsb3RzKSwgCiAgICAgc2xvdF93aWR0aChvdGhlci5zbG90X3dpZHRoKQoKICB7
IGZvcihyZWdpc3RlciBpbnQgaT0wO2k8c2xvdHM7aSsrKSBidmVjW2ldID0gb3RoZXIuYnZlY1tp
XTsgfQoKICAgaW5saW5lIH5CaXRWZWMoKSB7fQoKICAgQml0VmVjIGNvbnN0ICZvcGVyYXRvcj0g
KEJpdFZlYyBjb25zdCAmb3RoZXIpOwoKICAgaW50IG9wZXJhdG9yPT0oQml0VmVjIGNvbnN0ICZv
dGhlcikgY29uc3Q7CiAgIGludCBvcGVyYXRvciE9KEJpdFZlYyBjb25zdCAmb3RoZXIpIGNvbnN0
OwogICBpbnQgb3BlcmF0b3I+KEJpdFZlYyBjb25zdCAmb3RoZXIpIGNvbnN0OwogICBpbnQgb3Bl
cmF0b3I8KEJpdFZlYyBjb25zdCAmb3RoZXIpIGNvbnN0OwogICBpbnQgb3BlcmF0b3I+PShCaXRW
ZWMgY29uc3QgJm90aGVyKSBjb25zdDsKICAgaW50IG9wZXJhdG9yPD0oQml0VmVjIGNvbnN0ICZv
dGhlcikgY29uc3Q7CgogICBpbmxpbmUgaW50IFRlc3RCaXQoY29uc3QgaW50IGxvYykgY29uc3QK
ICAgICB7CiAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIGxvYyA+PSAwICYmIGxvYyA8IGxl
bmd0aCApID8gMCA6CShfX2Fzc2VydF9mYWlsICgibG9jID49IDAgJiYgbG9jIDwgbGVuZ3RoIiAs
ICJCaXRWZWMuaCIsIDkwLCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwogICAgICAgcmV0
dXJuKGJ2ZWNbR2V0U2xvdChsb2MpXSAmIE1hc2tCaXQobG9jKSk7CiAgICAgfQogICBpbmxpbmUg
dm9pZCBTZXRCaXQoY29uc3QgaW50IGxvYykKICAgICB7CiAgICAgICAoc3RhdGljX2Nhc3Q8dm9p
ZD4gICgoIGxvYyA+PSAwICYmIGxvYyA8IGxlbmd0aCApID8gMCA6CShfX2Fzc2VydF9mYWlsICgi
bG9jID49IDAgJiYgbG9jIDwgbGVuZ3RoIiAsICJCaXRWZWMuaCIsIDk1LCBfX1BSRVRUWV9GVU5D
VElPTl9fICksIDApKSkgOwogICAgICAgYnZlY1tHZXRTbG90KGxvYyldIHw9IE1hc2tCaXQobG9j
KTsKICAgICB9CiAgIGlubGluZSB2b2lkIFVuc2V0Qml0KGNvbnN0IGludCBsb2MpCiAgICAgewog
ICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBsb2MgPj0gMCAmJiBsb2MgPCBsZW5ndGggKSA/
IDAgOgkoX19hc3NlcnRfZmFpbCAoImxvYyA+PSAwICYmIGxvYyA8IGxlbmd0aCIgLCAiQml0VmVj
LmgiLCAxMDAsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CiAgICAgICBidmVjW0dldFNs
b3QobG9jKV0gJj0gfk1hc2tCaXQobG9jKTsKICAgICB9CiAgIGlubGluZSB2b2lkIFRvZ2dsZUJp
dChjb25zdCBpbnQgbG9jKQogICAgIHsKICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggbG9j
ID49IDAgJiYgbG9jIDwgbGVuZ3RoICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJsb2MgPj0gMCAm
JiBsb2MgPCBsZW5ndGgiICwgIkJpdFZlYy5oIiwgMTA1LCBfX1BSRVRUWV9GVU5DVElPTl9fICks
IDApKSkgOwogICAgICAgYnZlY1tHZXRTbG90KGxvYyldIF49IE1hc2tCaXQobG9jKTsKICAgICB9
CiAgIHZvaWQgU3dhcEJpdChjb25zdCBpbnQgbG9jMSwgY29uc3QgaW50IGxvYzIpOwoKICAgaW50
IElzb2xhdGVCaXQoY29uc3QgaW50IGxvYywgY29uc3QgaW50IG51bT0xKSBjb25zdDsKCiAgIGlu
bGluZSB2b2lkIFJlc2V0VmVjKHZvaWQpCiAgICAgeyByZWdpc3RlciBpbnQgaTsgZm9yKGk9MDtp
PHNsb3RzO2krKykgYnZlY1tpXSA9IDA7fQoKICAgaW5saW5lIHZvaWQgU2V0VmVjKHZvaWQpICAg
ICAgICAKICAgICB7IHJlZ2lzdGVyIGludCBpOyBmb3IoaT0wO2k8c2xvdHM7aSsrKSBidmVjW2ld
ID0gKDI8PHNsb3Rfd2lkdGgpIC0gMTsgfQoKCgogICBpbmxpbmUgaW50IEdldExlbmd0aCh2b2lk
KSBjb25zdAoJe3JldHVybiBsZW5ndGg7fQogICBpbmxpbmUgaW50IEdldFNsb3RXaWR0aCh2b2lk
KSBjb25zdAoJe3JldHVybiBzbG90X3dpZHRoO30KICAgaW5saW5lIGludCBHZXRTbG90cyh2b2lk
KSBjb25zdAoJe3JldHVybiBzbG90czt9CgogIH07CgoKIyAyMSAic2ZjSW5kZXguaCIgMgoKCgoK
CgoKCgoKCgoKCgpjbGFzcyBzZmNJbmRleCA6IHB1YmxpYyBCaXRWZWMKICB7CiAgIGZyaWVuZCBv
c3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBzZmNJbmRleCBjb25zdCAmKTsKCiAgIHNob3J0
IGludCBzZmNiYXNldzsKICAgc2hvcnQgaW50IHNmY2RpZ2l0dzsKCnByb3RlY3RlZDoKICAgc2hv
cnQgaW50IHNmY2Jhc2U7CiAgIHNob3J0IGludCBzZmNkaW07CiAgIHNob3J0IGludCBzZmNsZXZz
OwoKcHVibGljOgogICBpbmxpbmUgc2ZjSW5kZXgoKQoJOiBCaXRWZWMoKSwKICAgICAgICAgIHNm
Y2Jhc2V3KDApLCBzZmNkaWdpdHcoMCksCiAgICAgICAgICBzZmNiYXNlKDApLCBzZmNkaW0oMCks
IHNmY2xldnMoMCkge30gCgogICBpbmxpbmUgc2ZjSW5kZXgoY29uc3QgaW50IGRpbSwgY29uc3Qg
aW50IGxldnMsIAoJCSAgIGNvbnN0IGludCBiYXNlID0gKDIpICkKCTogQml0VmVjKGxldnMqZGlt
KihpbnQpY2VpbCgobG9nKCAoZG91YmxlKWJhc2UgKSkvKGxvZygyLjApKSApKSwKCSAgc2ZjYmFz
ZShiYXNlKSwgc2ZjZGltKGRpbSksIHNmY2xldnMobGV2cykKICAgICB7IHNmY2Jhc2V3ID0gKGlu
dCljZWlsKChsb2coIChkb3VibGUpYmFzZSApKS8obG9nKDIuMCkpICk7IAogICAgICAgc2ZjZGln
aXR3ID0gc2ZjZGltKnNmY2Jhc2V3OyB9CgogICBpbmxpbmUgc2ZjSW5kZXgoc2ZjSW5kZXggY29u
c3QgJm90aGVyKQoJOiBCaXRWZWMoKEJpdFZlYyBjb25zdCAmKW90aGVyKSwKICAgICAgICAgIHNm
Y2Jhc2V3KG90aGVyLnNmY2Jhc2V3KSwKICAgICAgICAgIHNmY2RpZ2l0dyhvdGhlci5zZmNkaWdp
dHcpLAogICAgICAgICAgc2ZjYmFzZShvdGhlci5zZmNiYXNlKSwgc2ZjZGltKG90aGVyLnNmY2Rp
bSksIAogICAgICAgICAgc2ZjbGV2cyhvdGhlci5zZmNsZXZzKSB7fQoKICAgc2ZjSW5kZXggY29u
c3QgJm9wZXJhdG9yPSAoc2ZjSW5kZXggY29uc3QgJm90aGVyKTsKCiAgIGludCBvcGVyYXRvcj09
IChzZmNJbmRleCBjb25zdCAmb3RoZXIpIGNvbnN0OwogICBpbnQgb3BlcmF0b3IhPSAoc2ZjSW5k
ZXggY29uc3QgJm90aGVyKSBjb25zdDsKICAgaW50IG9wZXJhdG9yPiAoc2ZjSW5kZXggY29uc3Qg
Jm90aGVyKSBjb25zdDsKICAgaW50IG9wZXJhdG9yPCAoc2ZjSW5kZXggY29uc3QgJm90aGVyKSBj
b25zdDsKICAgaW50IG9wZXJhdG9yPj0gKHNmY0luZGV4IGNvbnN0ICZvdGhlcikgY29uc3Q7CiAg
IGludCBvcGVyYXRvcjw9IChzZmNJbmRleCBjb25zdCAmb3RoZXIpIGNvbnN0OwoKICAgIAogICBp
bnQgc2ZjR2V0RGlnaXQoY29uc3QgaW50IGxldmVsKSBjb25zdDsKICAgdm9pZCBzZmNTZXREaWdp
dChjb25zdCBpbnQgbGV2ZWwsIGNvbnN0IGludCBkaWdpdCk7CiAgIHZvaWQgc2ZjVW5zZXREaWdp
dChjb25zdCBpbnQgbGV2ZWwpOwogICB2b2lkIHNmY01heERpZ2l0KGNvbnN0IGludCBsZXZlbCk7
CgogICAgCiAgIHZvaWQgc2ZjU3dhcERpZ2l0V2QoY29uc3QgaW50IGxldmVsLCBjb25zdCBpbnQg
cG9zMSwgY29uc3QgaW50IHBvczIpOwogICB2b2lkIHNmY1RvZ2dsZURpZ2l0V2QoY29uc3QgaW50
IGxldmVsLCBjb25zdCBpbnQgcG9zKTsKCiAgICAKICAgaW50IHNmY0dldEluZGV4KCkgY29uc3Q7
CiAgIGludCBzZmNHZXRJbmRleChjb25zdCBpbnQgbGV2KSBjb25zdDsKICAgaW50IHNmY0dldElu
ZGV4KGNvbnN0IGludCBsZXYsIGNvbnN0IGludCBubGV2KSBjb25zdDsKCiAgIHZvaWQgc2ZjU2V0
SW5kZXgoY29uc3QgaW50IGluZGV4KTsKICAgdm9pZCBzZmNTZXRJbmRleChjb25zdCBpbnQgaW5k
ZXgsIGNvbnN0IGludCBsZXYpOwogICB2b2lkIHNmY1NldEluZGV4KGNvbnN0IGludCBpbmRleCwg
Y29uc3QgaW50IGxldiwgY29uc3QgaW50IG5sZXYpOwogICB2b2lkIHNmY01heEluZGV4KGNvbnN0
IGludCBsZXYpOwoKICAgIAogICB2b2lkIHNmY0NyZWF0ZUxvY051bShjb25zdCBpbnQgKmNvb3Jk
cyk7CiAgIHZvaWQgc2ZjR2V0Q29vcmRzKGludCAqY29vcmRzKSBjb25zdDsKICAgdm9pZCBzZmNH
ZXREaWdpdEFycmF5KGludCAqZGlnaXRzKSBjb25zdDsKCiAgICAKICAgaW5saW5lIGludCBzZmNH
ZXRCYXNlVyh2b2lkKSBjb25zdAoJe3JldHVybiBzZmNiYXNldzt9CiAgIGlubGluZSBpbnQgc2Zj
R2V0RGlnaXRXKHZvaWQpIGNvbnN0Cgl7cmV0dXJuIHNmY2RpZ2l0dzt9Cgpwcml2YXRlOgogICBp
bmxpbmUgdm9pZCBzZmNTZXREaWdpdEJpdChjb25zdCBpbnQgbGV2ZWwsIGNvbnN0IGludCBwb3Mp
Cgl7IFNldEJpdCgobGV2ZWwtMSkqc2ZjZGlnaXR3ICsgcG9zKTsgfQogICBpbmxpbmUgdm9pZCBz
ZmNVbnNldERpZ2l0Qml0KGNvbnN0IGludCBsZXZlbCwgY29uc3QgaW50IHBvcykKCXsgVW5zZXRC
aXQoKGxldmVsLTEpKnNmY2RpZ2l0dyArIHBvcyk7IH0KICAgaW5saW5lIHZvaWQgc2ZjVG9nZ2xl
RGlnaXRCaXQoY29uc3QgaW50IGxldmVsLCBjb25zdCBpbnQgcG9zKQoJeyBUb2dnbGVCaXQoKGxl
dmVsLTEpKnNmY2RpZ2l0dyArIHBvcyk7IH0KCiAgfTsKIApleHRlcm4gb3N0cmVhbSYgIG9wZXJh
dG9yIDw8IChvc3RyZWFtJiBvcywgc2ZjSW5kZXggY29uc3QgJnNpKTsKCgojIDIxICJQZWFub0hp
bGJlcnQuaCIgMgoKCgoKCgpjbGFzcyBQZWFub0hpbGJlcnQgOiBwdWJsaWMgc2ZjSW5kZXgKICB7
CgpwdWJsaWM6CgogICAgCiAgIGlubGluZSBQZWFub0hpbGJlcnQoKQoJOiBzZmNJbmRleCgpIHt9
CgogICAgCiAgIGlubGluZSBQZWFub0hpbGJlcnQoY29uc3QgaW50IGRpbSwgY29uc3QgaW50IGxl
dnMpCgk6IHNmY0luZGV4KGRpbSxsZXZzLCgyKSApCgl7KHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBk
aW08PTMgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoImRpbTw9MyIgLCAiUGVhbm9IaWxiZXJ0Lmgi
LCAzOSwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDt9CgogICAgCiAgIGlubGluZSBQZWFu
b0hpbGJlcnQoUGVhbm9IaWxiZXJ0IGNvbnN0ICZvdGhlcikKICAJOiBzZmNJbmRleCgoc2ZjSW5k
ZXggY29uc3QgJilvdGhlcikge30KCiAgICAKcHJpdmF0ZToKICAgdm9pZCBJbnZlcnQoaW50ICpj
b29yZHMpIGNvbnN0OwoKcHVibGljOgogICBpbmxpbmUgdm9pZCBTZXRJbmRleChjb25zdCBpbnQg
aW5kZXgsIGNvbnN0IGludCBpZHhsZXYpCiAgICAgeyBzZmNTZXRJbmRleChpbmRleCxpZHhsZXYp
OyB9CiAgIGlubGluZSB2b2lkIFNldEluZGV4KGNvbnN0IGludCBpbmRleCwgY29uc3QgaW50IGlk
eGxldiwgCgkJCWNvbnN0IGludCBubGV2KQogICAgIHsgc2ZjU2V0SW5kZXgoaW5kZXgsaWR4bGV2
LG5sZXYpOyB9CgogICB2b2lkIE1hcChjb25zdCBpbnQgKmNvb3Jkcyk7CiAgIHZvaWQgSW52ZXJ0
KGludCAqY29vcmRzLCBjb25zdCBpbnQgaW5kZXgpOwogICB2b2lkIEludmVydChpbnQgKmNvb3Jk
cywgY29uc3QgaW50IGluZGV4LCBjb25zdCBpbnQgaWR4bGV2KTsKICAgdm9pZCBJbnZlcnQoaW50
ICpjb29yZHMsIGNvbnN0IGludCBpbmRleCwgCgkgICAgICAgY29uc3QgaW50IGlkeGxldiwgY29u
c3QgaW50IG5sZXYpOwoKICAgIAoKICAgUGVhbm9IaWxiZXJ0ICpHZXRCb3goY29uc3QgaW50IGxl
diwgY29uc3QgaW50IG5sZXYpIGNvbnN0OwogICB2b2lkIFNldEJveChjb25zdCBpbnQgbGV2LCBj
b25zdCBpbnQgbmxldik7CgogICAgCgogICBQZWFub0hpbGJlcnQgKkdldE1heChjb25zdCBpbnQg
bGV2LCBjb25zdCBpbnQgbmxldikgY29uc3Q7CiAgIHZvaWQgU2V0TWF4KGNvbnN0IGludCBsZXYs
IGNvbnN0IGludCBubGV2KTsKCiAgICAKICAgdm9pZCBSZXNldEJhc2UoY29uc3QgaW50IGxldiwg
Y29uc3QgaW50IG5sZXYpOwogICAKICAgIAogICB2b2lkIEdldENvb3JkcyhpbnQgKmNvb3Jkcywg
Y29uc3QgaW50IGxldiA9IDEpIGNvbnN0OwogICBpbnQgKkdldENvb3Jkcyhjb25zdCBpbnQgbGV2
ID0gMSkgY29uc3Q7CgogICAgCiAgIGlubGluZSBpbnQgR2V0Q2FyZGluYWxpdHkoY29uc3QgaW50
IGRpbSwgY29uc3QgaW50IGxldikgY29uc3QKICAgICB7cmV0dXJuIChpbnQpMTw8KGxldipkaW0p
O30KICAgaW5saW5lIGludCBHZXRDYXJkaW5hbGl0eShjb25zdCBpbnQgbGV2KSBjb25zdAogICAg
IHtyZXR1cm4gKGludCkxPDwobGV2KnNmY2RpbSk7fQoKICAgIAogICBpbmxpbmUgaW50IEdldERp
bUNhcmRpbmFsaXR5KGNvbnN0IGludCBsZXYpIGNvbnN0CiAgICAge3JldHVybiAoaW50KTE8PChz
ZmNsZXZzLWxldik7fQoKICAgIAogICBpbmxpbmUgaW50IEdldERpbU1heChjb25zdCBpbnQgbGV2
KSBjb25zdAogICAgIHtyZXR1cm4gKCgoaW50KTE8PGxldiktMSkqKChpbnQpMTw8KHNmY2xldnMt
bGV2KSk7fQogICAKcHJpdmF0ZToKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKICAgaW5saW5l
IHZvaWQgcGhTd2FwRGlyKGNvbnN0IGludCBsZXZlbCwgY29uc3QgaW50IGF4aXMpCiAgICAge3Nm
Y1RvZ2dsZURpZ2l0V2QobGV2ZWwsYXhpcy0xKTt9CiAgIGlubGluZSB2b2lkIHBoVHJhbnNsYXRl
KGNvbnN0IGludCBsZXZlbCwgY29uc3QgaW50IGF4aXMpCiAgICAge3NmY1RvZ2dsZURpZ2l0V2Qo
bGV2ZWwsYXhpcy0xKTt9CiAgIGlubGluZSB2b2lkIHBoUm90YXRlKGNvbnN0IGludCBsZXZlbCwg
Y29uc3QgaW50IGZyb21fYXhpcywgCgkJCWNvbnN0IGludCB0b19heGlzKQogICAgIHtzZmNTd2Fw
RGlnaXRXZChsZXZlbCxmcm9tX2F4aXMtMSx0b19heGlzLTEpO30KCiAgIHZvaWQgcGhPcmllbnQo
Y29uc3QgaW50IGxldmVsLCBjb25zdCBpbnQgcG9zKTsKICAgaW50IHBoR3JheShjb25zdCBpbnQg
bGV2ZWwpOwogICBpbnQgcGhHaW52KGNvbnN0IGludCBsZXZlbCk7CgogIH07CgoKIyAxOCAiQUNF
U2ZjLmgiIDIKCnR5cGVkZWYgY2xhc3MgUGVhbm9IaWxiZXJ0IGRNYXBJbmRleDsKCgoKCiMgNDIg
IkdyaWRVbml0LmgiIDIKCgoKCgpjbGFzcyBHcmlkVW5pdCAKICB7CiAgIGZyaWVuZCBvc3RyZWFt
JiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjb25zdCBHcmlkVW5pdCYpOwogICBmcmllbmQgb2ZzdHJl
YW0mIG9wZXJhdG9yPDwob2ZzdHJlYW0mLCBjb25zdCBHcmlkVW5pdCYpOwogICBmcmllbmQgaWZz
dHJlYW0mIG9wZXJhdG9yPj4oaWZzdHJlYW0mLCBHcmlkVW5pdCYpOwogICBmcmllbmQgY2xhc3Mg
R3JpZFVuaXRMaXN0OwoKICAgc2hvcnQgaW50IG93bmVyOwkJICAgIAoKCgogICBzaG9ydCBpbnQg
aW5kZXg7CQkgCiAgIHNob3J0IGludCByYW5rOwkJIAogICBzaG9ydCBpbnQgYmFzZWxldjsgCQkg
CgogICBzaG9ydCBpbnQgY3JzbGV2OyAJCSAKICAgc2hvcnQgaW50IGZpbmVsZXY7IAkJIAogICBz
aG9ydCBpbnQgbWF4bGV2OwkJICAKICAgc2hvcnQgaW50IG1pbmxldjsJCSAgCiAgIHNob3J0IGlu
dCBsZXZzdGVwOwkJIAoKICAgc2hvcnQgaW50IGV4dGVudDsJCSAKCQkJCSAKCiAgIGRNYXBJbmRl
eCBiYXNlaW5kZXg7IAkgCgoKICAgQkJveCBmYmI7ICAgICAgICAgICAgICAgICAgICAgCgpwdWJs
aWM6CiAgICAKICAgaW5saW5lIEdyaWRVbml0KHZvaWQpCiAgICAgICAgOiBvd25lcigoKC0xKSAp
ICksIGluZGV4KCgtMSkgKSwgcmFuaygwKSwgCiAgICAgICAgICBiYXNlbGV2KDApLCBjcnNsZXYo
MCksIGZpbmVsZXYoMCksIAogICAgICAgICAgbWF4bGV2KDApLCBtaW5sZXYoMCksIGxldnN0ZXAo
MCksCiAgICAgICAgICBleHRlbnQoMCkgeyB9CgogICBHcmlkVW5pdChjb25zdCBpbnQgbnJhbmss
IGNvbnN0IGludCBjbGV2LCBjb25zdCBpbnQqIGJjb29yZHMsCgkgICAgY29uc3QgaW50IGV4dCwg
Y29uc3QgaW50IG1sZXYsIGNvbnN0IGludCBsc3RlcCwgCgkgICAgY29uc3QgaW50IHJlZmxldik7
CgogICBHcmlkVW5pdChjb25zdCBpbnQgbnJhbmssIGNvbnN0IGludCBjbGV2LCBjb25zdCBpbnQg
YmluZGV4LCAKCSAgICBjb25zdCBpbnQgZXh0LCBjb25zdCBpbnQgbWxldiwgY29uc3QgaW50IGxz
dGVwLCAKCSAgICBjb25zdCBpbnQgcmVmbGV2KTsKCiAgIGlubGluZSBHcmlkVW5pdChHcmlkVW5p
dCBjb25zdCAmb3RoZXIpCiAgICAgICAgOiBvd25lcihvdGhlci5vd25lciksIGluZGV4KG90aGVy
LmluZGV4KSwKICAgICAgICAgIHJhbmsob3RoZXIucmFuayksIGJhc2VsZXYob3RoZXIuYmFzZWxl
diksCiAgICAgICAgICBjcnNsZXYob3RoZXIuY3JzbGV2KSwgZmluZWxldihvdGhlci5maW5lbGV2
KSwKICAgICAgICAgIG1heGxldihvdGhlci5tYXhsZXYpLCBtaW5sZXYob3RoZXIubWlubGV2KSwg
CiAgICAgICAgICBsZXZzdGVwKG90aGVyLmxldnN0ZXApLAogICAgICAgICAgZXh0ZW50KG90aGVy
LmV4dGVudCksIGJhc2VpbmRleChvdGhlci5iYXNlaW5kZXgpLAogICAgICAgICAgZmJiKG90aGVy
LmZiYikgCiAgICAgeyB9CgogICBpbmxpbmUgfkdyaWRVbml0KHZvaWQpIHt9CgogICBHcmlkVW5p
dCBjb25zdCAmb3BlcmF0b3I9IChHcmlkVW5pdCBjb25zdCAmb3RoZXIpOwoKICAgIApwcml2YXRl
OgogICAgCiAgICAKcHVibGljOgogICBpbmxpbmUgaW50IGd1UmFuayh2b2lkKSBjb25zdCB7IHJl
dHVybiAocmFuayk7IH0KICAgaW5saW5lIGludCBndUJhc2VMZXYodm9pZCkgY29uc3QgeyByZXR1
cm4gKGJhc2VsZXYpOyB9CiAgIGlubGluZSBpbnQgZ3VGaW5lTGV2KHZvaWQpIGNvbnN0IHsgcmV0
dXJuIChmaW5lbGV2KTsgfQogICBpbmxpbmUgaW50IGd1Q3JzTGV2KHZvaWQpIGNvbnN0IHsgcmV0
dXJuIChjcnNsZXYpOyB9CiAgIGlubGluZSBpbnQgZ3VOdW1MZXYodm9pZCkgY29uc3QgeyByZXR1
cm4gKChmaW5lbGV2LWNyc2xldikvbGV2c3RlcCsxKTsgfQogICBpbmxpbmUgaW50IGd1TWF4TGV2
KHZvaWQpIGNvbnN0IHsgcmV0dXJuIChtYXhsZXYpOyB9CiAgIGlubGluZSBpbnQgZ3VNaW5MZXYo
dm9pZCkgY29uc3QgeyByZXR1cm4gKG1pbmxldik7IH0KICAgaW5saW5lIGludCBndUxldlN0ZXAo
dm9pZCkgY29uc3QgeyByZXR1cm4gKGxldnN0ZXApOyB9CiAgIGlubGluZSBpbnQgZ3VMZXZlbHMo
dm9pZCkgY29uc3QgeyByZXR1cm4gKChtYXhsZXYtbWlubGV2KS9sZXZzdGVwKzEpOyB9CgogICBp
bmxpbmUgaW50IGd1RXh0ZW50KGNvbnN0IGludCBsZXYpIGNvbnN0CiAgIHsgcmV0dXJuICgobGV2
PD1maW5lbGV2ICYmIGxldj49Y3JzbGV2ICYmIGV4dGVudD49KGZpbmVsZXYtbGV2KSkgCiAgICAg
ICAgICAgID8gZXh0ZW50LShmaW5lbGV2LWxldikgOiAwKTsgfQogICBpbmxpbmUgaW50IGd1RXh0
ZW50QWJzKGNvbnN0IGludCBsZXYpIGNvbnN0CiAgIHsgcmV0dXJuICgoZXh0ZW50Pj0oZmluZWxl
di1sZXYpKSA/IGV4dGVudC0oZmluZWxldi1sZXYpIDogMCk7IH0KCiAgIGlubGluZSBpbnQgZ3VF
eHRlbnRWYWx1ZShjb25zdCBpbnQgbGV2KSBjb25zdAogICB7IHJldHVybiAoKGxldjw9ZmluZWxl
diAmJiBsZXY+PWNyc2xldiAmJiBleHRlbnQ+PShmaW5lbGV2LWxldikpIAogICAgICAgICAgICA/
IDEgPDwgKGV4dGVudC0oZmluZWxldi1sZXYpKSA6IDEpOyB9CiAgIGlubGluZSBpbnQgZ3VFeHRl
bnRBYnNWYWx1ZShjb25zdCBpbnQgbGV2KSBjb25zdAogICB7IHJldHVybiAoKGV4dGVudD49KGZp
bmVsZXYtbGV2KSkgPyAxIDw8IChleHRlbnQtKGZpbmVsZXYtbGV2KSkgOiAxKTsgfQoKICAgdW5z
aWduZWQgbG9uZyBndU51bShjb25zdCBpbnQgb3ZlcmxhcCkgY29uc3Q7CiAgIHVuc2lnbmVkIGxv
bmcgZ3VXb3JrKGNvbnN0IGludCBvdmVybGFwKSBjb25zdDsKICAgdW5zaWduZWQgbG9uZyBndU51
bShjb25zdCBpbnQgbGV2LCBjb25zdCBpbnQgb3ZlcmxhcCkgY29uc3Q7CiAgIHVuc2lnbmVkIGxv
bmcgZ3VXb3JrKGNvbnN0IGludCBsZXYsIGNvbnN0IGludCBvdmVybGFwKSBjb25zdDsKCiAgIHVu
c2lnbmVkIGxvbmcgZ3VOdW0oY29uc3Qgc2hvcnQqIG92ZXJsYXApIGNvbnN0OwogICB1bnNpZ25l
ZCBsb25nIGd1V29yayhjb25zdCBzaG9ydCogb3ZlcmxhcCkgY29uc3Q7CiAgIHVuc2lnbmVkIGxv
bmcgZ3VOdW0oY29uc3QgaW50IGxldiwgY29uc3Qgc2hvcnQqIG92ZXJsYXApIGNvbnN0OwogICB1
bnNpZ25lZCBsb25nIGd1V29yayhjb25zdCBpbnQgbGV2LCBjb25zdCBzaG9ydCogb3ZlcmxhcCkg
Y29uc3Q7CgogICBpbmxpbmUgaW50IGd1Q29udGFpbnMoY29uc3QgaW50IGxldikgY29uc3QKICAg
ICAgICB7IHJldHVybiAobGV2PD1maW5lbGV2ICYmIGxldj49Y3JzbGV2KTsgfQogICBpbmxpbmUg
aW50IGd1Q29udGFpbnMoY29uc3QgaW50IG1pbmxldmVsLCBjb25zdCBpbnQgbWF4bGV2ZWwpIGNv
bnN0CiAgICAgICAgeyByZXR1cm4gKG1pbmxldmVsPD1maW5lbGV2ICYmIG1heGxldmVsPj1jcnNs
ZXYpOyB9CgogICBpbmxpbmUgaW50IGd1TGV2SW5kZXgoY29uc3QgaW50IGxldikgY29uc3QKICAg
ICAgICB7IHJldHVybiAoKGxldi1taW5sZXYpL2xldnN0ZXApOyB9CgogICAgCiAgIGlubGluZSB2
b2lkIGd1U2V0T3duZXIoY29uc3QgaW50IHApIHsgb3duZXIgPSBwOyB9CgoKCgoKCiAgIGlubGlu
ZSBjb25zdCBkTWFwSW5kZXgmIGd1QmFzZUluZGV4KHZvaWQpIGNvbnN0IHsgcmV0dXJuIChiYXNl
aW5kZXgpOyB9CgogICBkTWFwSW5kZXggZ3VUb3BJbmRleChjb25zdCBpbnQgbGV2KSBjb25zdDsK
ICAgZE1hcEluZGV4IGd1TWF4SW5kZXgoY29uc3QgaW50IGxldikgY29uc3Q7Cgpwcml2YXRlOgog
ICB2b2lkIGd1TENvb3JkcyhpbnQgKmMsIGNvbnN0IGludCBsZXYpIGNvbnN0OwogICBDb29yZHMg
Z3VMQ29vcmRzKGNvbnN0IGludCBsZXYpIGNvbnN0OwoKICAgdm9pZCBndVVDb29yZHMoaW50ICpj
LCBjb25zdCBpbnQgbGV2KSBjb25zdDsKICAgQ29vcmRzIGd1VUNvb3Jkcyhjb25zdCBpbnQgbGV2
KSBjb25zdDsKCiAgIHZvaWQgZ3VTZXRCQm94KCk7IAoKcHVibGljOgogICBjb25zdCBCQm94JiBn
dUJCb3goKSBjb25zdCB7IHJldHVybiAoZmJiKTsgfQoKICAgQkJveCBndUJCb3goY29uc3QgaW50
IGxldiwgY29uc3QgaW50IG9sYXA9MCwgY29uc3QgaW50IGV4dGdoPTApIGNvbnN0OwogICBCQm94
IGd1QkJveEFicyhjb25zdCBpbnQgbGV2LCBjb25zdCBpbnQgb2xhcD0wLCBjb25zdCBpbnQgZXh0
Z2g9MCkgY29uc3Q7CgogICBCQm94IGd1QkJveChjb25zdCBpbnQgbGV2LCBjb25zdCBzaG9ydCog
b2xhcCwgY29uc3QgaW50IGV4dGdoPTApIGNvbnN0OwogICBCQm94IGd1QkJveEFicyhjb25zdCBp
bnQgbGV2LCBjb25zdCBzaG9ydCogb2xhcCwgY29uc3QgaW50IGV4dGdoPTApIGNvbnN0OwoKICAg
QkJveCBndUJCb3goY29uc3QgaW50IG1pbmwsIGNvbnN0IGludCBtYXhsLAoJICAgICAgIGNvbnN0
IHNob3J0KiBvbGFwLCBjb25zdCBpbnQgZXh0Z2g9MCkgY29uc3Q7CgogICBpbnQgZ3VJbnNpZGUo
Y29uc3QgQkJveCYgYmJveCwgY29uc3QgaW50IGxldikgY29uc3Q7CgogICAgCiAgIGludCBvcGVy
YXRvcj09IChHcmlkVW5pdCBjb25zdCAmb3RoZXIpIGNvbnN0OwogICBpbnQgb3BlcmF0b3I+PSAo
R3JpZFVuaXQgY29uc3QgJm90aGVyKSBjb25zdDsKICAgaW50IG9wZXJhdG9yPD0gKEdyaWRVbml0
IGNvbnN0ICZvdGhlcikgY29uc3Q7CgogICAgCiAgIHZvaWQgZ3VSZWZpbmUoY29uc3QgaW50IGxl
dnMgPSAxKTsKICAgdm9pZCBndVJlZmluZShHcmlkVW5pdCAmZ3UsIGNvbnN0IGludCBsZXZzID0g
MSk7CgogICB2b2lkIGd1Q29hcnNlbihjb25zdCBpbnQgbGV2cyA9IDEpOwogICB2b2lkIGd1Q29h
cnNlbihHcmlkVW5pdCAmZ3UsIGNvbnN0IGludCBsZXZzID0gMSk7CgogICB2b2lkIGd1RGVjb21w
b3NlKEdyaWRVbml0KiomIGd1LCBpbnQmIGNudCwgY29uc3QgaW50IGxldnMgPSAxKSBjb25zdDsK
ICAgdm9pZCBndURlY29tcG9zZVJlcGxpY2F0ZShHcmlkVW5pdCoqJiBndSwgaW50JiBjbnQsIGNv
bnN0IGludCBtaW5leHQsIAoJCQkJCWNvbnN0IGludCBsZXZzID0gMSkgY29uc3Q7CiAgIAogICAg
CiAgICAKCiAgIHZvaWQgZ3VHZXRMZXZlbHMoR3JpZFVuaXQqKiAmZ3UpIGNvbnN0OwogICB2b2lk
IGd1R2V0TGV2ZWxzKEdyaWRVbml0ICZndSwgY29uc3QgaW50IGxldikgY29uc3Q7CgogICAgCiAg
IGlubGluZSBzdGF0aWMgdm9pZCBndVNldERlY29tcG9zZShHcmlkVW5pdCYgZ3UsCgkJCSAgICAg
IGNvbnN0IGludCBsZXYsCgkJCSAgICAgIGNvbnN0IGludCBjbnQpCiAgICAgeyBndS5iYXNlbGV2
Kz1sZXY7IGd1LmV4dGVudC09bGV2OyAKICAgICAgIGd1LmJhc2VpbmRleC5TZXRJbmRleChjbnQs
Z3UuYmFzZWxldixsZXYpOyBndS5ndVNldEJCb3goKTsgfQoKICAgaW5saW5lIHN0YXRpYyB2b2lk
IGd1U2V0TGV2ZWxzKEdyaWRVbml0JiBndSwKCQkJICAgY29uc3QgaW50IGxldikKICAgICB7IGd1
LmV4dGVudC09KGd1LmZpbmVsZXYtbGV2KTsKICAgICAgIGd1LmNyc2xldj1sZXY7IGd1LmZpbmVs
ZXY9bGV2OyAKICAgICAgIGd1LmJhc2VsZXYgPSBndS5maW5lbGV2LWd1LmV4dGVudDsgZ3UuZ3VT
ZXRCQm94KCk7IH0KCiAgIGlubGluZSBzdGF0aWMgdm9pZCBndVNldFJlZmluZUxldmVsKEdyaWRV
bml0JiBndSwKCQkJCWNvbnN0IGludCBsZXZzPTEpCiAgICAgeyBndS5jcnNsZXY9Z3UuZmluZWxl
ditndS5sZXZzdGVwOyBndS5maW5lbGV2Kz0obGV2cypndS5sZXZzdGVwKTsKICAgICAgIGd1LmV4
dGVudCs9bGV2cypndS5sZXZzdGVwOyBndS5iYXNlbGV2PWd1LmZpbmVsZXYtZ3UuZXh0ZW50OyAK
ICAgICAgIGd1Lmd1U2V0QkJveCgpOyB9CgogICBpbmxpbmUgc3RhdGljIHZvaWQgZ3VTZXRDb2Fy
c2VuKEdyaWRVbml0JiBndSwKCQkJICAgIGNvbnN0IGludCBsZXZzPTEpCiAgICAgeyBndS5maW5l
bGV2LT0obGV2cypndS5sZXZzdGVwKTsgZ3UuZXh0ZW50LT1sZXZzKmd1LmxldnN0ZXA7IAogICAg
ICAgZ3UuYmFzZWxldj1ndS5maW5lbGV2LWd1LmV4dGVudDsgZ3UuZ3VTZXRCQm94KCk7IH0KCiAg
IGlubGluZSBzdGF0aWMgdm9pZCBndVNldFJlZmluZShHcmlkVW5pdCYgZ3UsCgkJCSAgIGNvbnN0
IGludCBsZXZzPTEpCiAgICAgeyBndS5maW5lbGV2Kz0obGV2cypndS5sZXZzdGVwKTsgZ3UuZXh0
ZW50Kz1sZXZzKmd1LmxldnN0ZXA7IAogICAgICAgZ3UuYmFzZWxldj1ndS5maW5lbGV2LWd1LmV4
dGVudDsgZ3UuZ3VTZXRCQm94KCk7IH0KICB9OyAgIAoKb3N0cmVhbSYgIG9wZXJhdG9yIDw8IChv
c3RyZWFtJiBvcywgY29uc3QgR3JpZFVuaXQmIGd1KTsKb2ZzdHJlYW0mIG9wZXJhdG9yIDw8IChv
ZnN0cmVhbSYgb2ZzLCBjb25zdCBHcmlkVW5pdCYgZ3UpOwppZnN0cmVhbSYgb3BlcmF0b3IgPj4g
KGlmc3RyZWFtJiBpZnMsIEdyaWRVbml0JiBndSk7CgoKIyAyMCAiQUNFRGlzdHJpYnV0aW9uLmgi
IDIKCiMgMSAiR3JpZFVuaXRMaXN0LmgiIDEKCgoKIAoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCiAKCgoKY2xhc3MgR3JpZFVuaXRMaXN0IDogcHVibGljIEJ1Y2tldDxHcmlkVW5p
dD4sIHB1YmxpYyBPYmplY3RDb3VudGVyCiAgewogICBmcmllbmQgb3N0cmVhbSYgb3BlcmF0b3I8
PChvc3RyZWFtJiwgY29uc3QgR3JpZFVuaXRMaXN0Jik7CiAgIGZyaWVuZCBvZnN0cmVhbSYgb3Bl
cmF0b3I8PChvZnN0cmVhbSYsIGNvbnN0IEdyaWRVbml0TGlzdCYpOwogICBmcmllbmQgaWZzdHJl
YW0mIG9wZXJhdG9yPj4oaWZzdHJlYW0mLCBHcmlkVW5pdExpc3QmKTsKCiAgIGludCBudW07Cgpw
cml2YXRlOgogICBzdGF0aWMgaW5saW5lIHZvaWQgY29weXR5cGVkYXRhKEdyaWRVbml0ICp0bywg
R3JpZFVuaXQgY29uc3QgKmZyb20pCgl7ICp0byA9ICpmcm9tOyB9CgogICAgCiAgICAKICAgIAog
ICBpbmxpbmUgdm9pZCBzZXRzdGF0cyh2b2lkKQogICAgIHsKICAgICAgbnVtID0gMDsKICAgICAg
Zm9yIChyZWdpc3RlciBHcmlkVW5pdCAqZz1maXJzdCgpO2c7Zz1uZXh0KCkpIG51bSsrOwogICAg
IH0KCnB1YmxpYzoKICAgIAogICAgCiAgICAKICAgR3JpZFVuaXRMaXN0KCkKICAgICA6IEJ1Y2tl
dDxHcmlkVW5pdD4oKDI1NikgKSwgbnVtKDApIHt9CgogICAgCiAgICAKICAgR3JpZFVuaXRMaXN0
KGNvbnN0IHVuc2lnbmVkIG1heG51bSwgY29uc3QgaW50IGR1bWFyZykKICAgICA6IEJ1Y2tldDxH
cmlkVW5pdD4obWF4bnVtKSwgbnVtKDApIHt9CgogICBHcmlkVW5pdExpc3QoY29uc3Qgdm9pZCog
cGFja2FnZSwgY29uc3QgaW50IGR1bWFyZykKICAgICA6IEJ1Y2tldDxHcmlkVW5pdD4ocGFja2Fn
ZSksIG51bSgwKSB7IHNldHN0YXRzKCk7IH0KCiAgIEdyaWRVbml0TGlzdCh2b2lkICpwYWNrYWdl
LCBjb25zdCBpbnQgZHVtYXJnKQogICAgIDogQnVja2V0PEdyaWRVbml0PihwYWNrYWdlKSwgbnVt
KDApIHsgc2V0c3RhdHMoKTsgfQoKICAgR3JpZFVuaXRMaXN0KGNvbnN0IHZvaWQqIHBhY2thZ2Us
IGNvbnN0IHVuc2lnbmVkIHNpemUsIAoJCWNvbnN0IGludCBuKQogICAgIDogQnVja2V0PEdyaWRV
bml0PihwYWNrYWdlLCBzaXplLCBuKSwgbnVtKDApIAogICAgIHsgc2V0c3RhdHMoKTsgfQoKICAg
R3JpZFVuaXRMaXN0KGNvbnN0IEdyaWRVbml0TGlzdCYgb3RoZXIpCiAgICAgOiBCdWNrZXQ8R3Jp
ZFVuaXQ+KG90aGVyKSwgbnVtKG90aGVyLm51bSkge30KCnByaXZhdGU6CiAgIEdyaWRVbml0TGlz
dChHcmlkVW5pdExpc3QqKiYgbGV2YXJyYXkpOwoKcHVibGljOgogICAgCiAgICAKICAgIAogICBH
cmlkVW5pdExpc3QmIG9wZXJhdG9yID0gKGNvbnN0IEdyaWRVbml0TGlzdCYpOwoKICAgIAogICAg
CiAgICAKICAgaW5saW5lIH5HcmlkVW5pdExpc3Qodm9pZCkge30KCiAgICAKICAgIAogICAgCiAg
IGlubGluZSBHcmlkVW5pdExpc3QgKmFsaWFzKCkKCXsgcmV0dXJuKChHcmlkVW5pdExpc3QgKikg
T2JqZWN0Q291bnRlcjo6YWxpYXMoKSk7IH0KCiAgICAKICAgIAogICAgCnB1YmxpYzoKICAgdm9p
ZCBvcGVyYXRvciAtPSAoR3JpZFVuaXRMaXN0IGNvbnN0ICZyaHMpOyAgCnByaXZhdGU6CiAgIHZv
aWQgb3BlcmF0b3IgKj0gKEdyaWRVbml0TGlzdCBjb25zdCAmcmhzKTsgIAogICBHcmlkVW5pdExp
c3QgKm9wZXJhdG9yIC0gKEdyaWRVbml0TGlzdCBjb25zdCAmcmhzKTsgIAogICBHcmlkVW5pdExp
c3QgKm9wZXJhdG9yICogKEdyaWRVbml0TGlzdCBjb25zdCAmcmhzKTsgIAogICBHcmlkVW5pdExp
c3QgKm9wZXJhdG9yICsgKEdyaWRVbml0TGlzdCBjb25zdCAmcmhzKTsgIAoKICAgIAogICAgCiAg
ICAKcHVibGljOiAKICAgdm9pZCBvcGVyYXRvciAqPSAoQkJveCBjb25zdCAmcmhzKTsgIApwcml2
YXRlOiAKICAgR3JpZFVuaXRMaXN0ICpvcGVyYXRvciAqIChCQm94IGNvbnN0ICZyaHMpOyAgCiAg
IEdyaWRVbml0TGlzdCAqb3BlcmF0b3IgKiAoQkJveExpc3QgY29uc3QgJnJocyk7ICAKIAogICAg
CiAgICAKICAgIApwdWJsaWM6CiAgIHZvaWQgaW50ZXJzZWN0KEJCb3ggY29uc3QgJnJocywgY29u
c3QgaW50IGxldiwgR3JpZFVuaXRMaXN0ICZndWwsIAogICAgICAgICAgICAgICAgICBjb25zdCBp
bnQgb2xhcCwgY29uc3QgaW50IGV4dGdoPTApOwogICB2b2lkIGludGVyc2VjdChCQm94TGlzdCBj
b25zdCAmcmhzLCBjb25zdCBpbnQgbGV2LCBHcmlkVW5pdExpc3QgJmd1bCwgCiAgICAgICAgICAg
ICAgICAgIGNvbnN0IGludCBvbGFwLCBjb25zdCBpbnQgZXh0Z2g9MCk7CiAgIHZvaWQgaW50ZXJz
ZWN0KEJCb3ggY29uc3QgJnJocywgY29uc3QgaW50IGxldiwgR3JpZFVuaXRMaXN0ICZndWwsIAog
ICAgICAgICAgICAgICAgICBjb25zdCBzaG9ydCogb2xhcCwgY29uc3QgaW50IGV4dGdoPTApOwog
ICB2b2lkIGludGVyc2VjdChCQm94TGlzdCBjb25zdCAmcmhzLCBjb25zdCBpbnQgbGV2LCBHcmlk
VW5pdExpc3QgJmd1bCwKICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvcnQqIG9sYXAsIGNvbnN0
IGludCBleHRnaD0wKTsKCiAgIHZvaWQgaW50ZXJzZWN0X2V4YWN0KEJCb3ggY29uc3QgJnJocywg
Y29uc3QgaW50IGxldiwgR3JpZFVuaXRMaXN0ICZndWwsIAoJCQljb25zdCBpbnQgb2xhcCwgY29u
c3QgaW50IGV4dGdoPTApOwogICB2b2lkIGludGVyc2VjdF9leGFjdChCQm94IGNvbnN0ICZyaHMs
IGNvbnN0IGludCBsZXYsIEdyaWRVbml0TGlzdCAmZ3VsLCAKCQkJY29uc3Qgc2hvcnQqIG9sYXAs
IGNvbnN0IGludCBleHRnaD0wKTsKCiAgICAKICAgIAogICAgCnB1YmxpYzoKICAgaW5saW5lIGlu
dCBpc2VtcHR5KCkgY29uc3QgeyByZXR1cm4obnVtID09IDApOyB9CiAgIGlubGluZSBpbnQgbnVt
YmVyKCkgY29uc3QgeyByZXR1cm4obnVtKTsgfQoKICAgdW5zaWduZWQgbG9uZyBsb2FkKGNvbnN0
IGludCBvbGFwKTsKICAgdW5zaWduZWQgbG9uZyBsb2FkKGNvbnN0IGludCBsZXYsIGNvbnN0IGlu
dCBvbGFwKTsKICAgdW5zaWduZWQgbG9uZyBudW1lbGVtcyhjb25zdCBpbnQgb2xhcCk7CiAgIHVu
c2lnbmVkIGxvbmcgbnVtZWxlbXMoY29uc3QgaW50IGxldiwgY29uc3QgaW50IG9sYXApOwogIAog
ICB1bnNpZ25lZCBsb25nIGxvYWQoY29uc3Qgc2hvcnQqIG9sYXApOwogICB1bnNpZ25lZCBsb25n
IGxvYWQoY29uc3QgaW50IGxldiwgY29uc3Qgc2hvcnQqIG9sYXApOwogICB1bnNpZ25lZCBsb25n
IG51bWVsZW1zKGNvbnN0IHNob3J0KiBvbGFwKTsKICAgdW5zaWduZWQgbG9uZyBudW1lbGVtcyhj
b25zdCBpbnQgbGV2LCBjb25zdCBzaG9ydCogb2xhcCk7CgogICBpbnQgbGV2ZWxzKHZvaWQpOwog
ICBpbnQgZmluZXN0KHZvaWQpOwogICBpbnQgc21hbGxlc3QoY29uc3QgaW50IGxldmVsKTsKICAg
aW50IGhpZ2hlc3RiYXNlbGV2ZWwoKTsKICAgZE1hcEluZGV4IGxvd2VzdCgpOwogICBkTWFwSW5k
ZXggbG93ZXN0KGNvbnN0IGludCBsZXZlbCwgY29uc3QgaW50IG93bmVyLCBjb25zdCBpbnQgaW5k
ZXgpOwogICBpbnQgbWF4aW5kZXgodm9pZCk7CgogICAgCiAgICAKICAgIApwcml2YXRlOgogICB2
b2lkIHNldGluZGV4KHZvaWQpOwogICB2b2lkIHNldGluZGV4KGNvbnN0IGludCBpZHgpOwogICB2
b2lkIHNldGluZGV4KGNvbnN0IEdyaWRVbml0TGlzdCYgY2d1bCwgY29uc3QgaW50IGlkeCk7CiAg
IHZvaWQgc2V0YmJveCgpOwpwdWJsaWM6CiAgIHZvaWQgc2V0b3duZXIoY29uc3QgaW50IHApOwog
ICB2b2lkIHNldG93bmVyKGNvbnN0IEdyaWRVbml0TGlzdCYgY2d1bCwgY29uc3QgaW50IHApOwog
ICAgCiAgICAKICAgIAogICBpbmxpbmUgdm9pZCBlbXB0eSh2b2lkKQogICAgIHsgQnVja2V0PEdy
aWRVbml0Pjo6ZW1wdHkoKTsgbnVtID0gMDsgfQoKICAgIAogICAgCiAgICAKICAgaW5saW5lIEdy
aWRVbml0ICphZGQoKSAKICAgICB7IG51bSsrOyByZXR1cm4gKEJ1Y2tldDxHcmlkVW5pdD46OmFk
ZCgpKTsgfQogICBpbmxpbmUgR3JpZFVuaXQgKmFkZChHcmlkVW5pdCBjb25zdCAmZ3UpIAogICAg
IHsgbnVtKys7IHJldHVybiAoQnVja2V0PEdyaWRVbml0Pjo6YWRkKGd1KSk7IH0KICAgaW5saW5l
IEdyaWRVbml0ICppbnNlcnQoKQogICAgIHsgbnVtKys7IHJldHVybiAoQnVja2V0PEdyaWRVbml0
Pjo6aW5zZXJ0KCkpOyB9CiAgIGlubGluZSBHcmlkVW5pdCAqaW5zZXJ0KEdyaWRVbml0IGNvbnN0
ICZndSkKICAgICB7IG51bSsrOyByZXR1cm4gKEJ1Y2tldDxHcmlkVW5pdD46Omluc2VydChndSkp
OyB9CiAgIGlubGluZSB2b2lkIHJlbW92ZSh2b2lkKQogICAgIHsgaWYgKGN1cnJlbnQoKSkgeyBu
dW0tLTsgQnVja2V0PEdyaWRVbml0Pjo6cmVtb3ZlKCk7IH19ICAKICAgICAgICAgICAgIAogICAg
CiAgICAKICAgIAogICB2b2lkIHNwbGl0KEdyaWRVbml0TGlzdCAmZ3VsKTsKCiAgICAKICAgIAog
ICAgCiAgIHZvaWQgbGV2ZWxhcnJheShHcmlkVW5pdExpc3QgKiomIGxldmFycmF5LCBjb25zdCBp
bnQgbGV2ZWxzKTsKCiAgICAKICAgIAogICAgCiAgIHZvaWQgbGV2ZWxsaXN0KEdyaWRVbml0TGlz
dCAmZ3VsLCAKCQkgIGNvbnN0IGludCBsZXYpOwogICB2b2lkIGxldmVsbGlzdChHcmlkVW5pdExp
c3QgJmd1bCwgCgkJICBjb25zdCBpbnQgbWlubGV2LCAKCQkgIGNvbnN0IGludCBtYXhsZXYpOwog
ICB2b2lkIGxldmVsbGlzdChHcmlkVW5pdExpc3QgJmd1bCk7CgogICAgCiAgICAKICAgIApwdWJs
aWM6CiAgIHZvaWQgYmJveGxpc3RmaW5lc3QoQkJveExpc3QgJmJibCwgY29uc3QgaW50IGxldik7
CiAgIHZvaWQgYmJveGxpc3QoQkJveExpc3QgJmJibCwgY29uc3QgaW50IGxldiwgY29uc3QgaW50
IG9sYXApOwogICAgICAgICAgICAgICAgICAKICAgdm9pZCBiYm94bGlzdChCQm94TGlzdCAmYmJs
LCBjb25zdCBpbnQgbGV2LCBjb25zdCBpbnQgb2xhcCwgCiAgICAgICAgICAgICAgICAgY29uc3Qg
aW50IGxldmlkKTsgIAogICB2b2lkIGJib3hsaXN0KEJCb3hMaXN0ICZiYmwsIGNvbnN0IGludCBs
ZXYsIGNvbnN0IHNob3J0KiBvbGFwLAogICAgICAgICAgICAgICAgIGNvbnN0IGludCBleHRnaCk7
CiAgIHZvaWQgYmJveGxpc3QoQkJveExpc3QgJmJibCwgY29uc3QgaW50IGxldiwgY29uc3Qgc2hv
cnQqIG9sYXAsIAogICAgICAgICAgICAgICAgIGNvbnN0IGludCBsZXZpZCwgY29uc3QgaW50IGV4
dGdoKTsKICAgIAogICAgCiAgICAKcHJpdmF0ZToKICAgR3JpZFVuaXRMaXN0ICpyZWZpbmVsaXN0
KGNvbnN0IGludCBhdGxldiwgY29uc3QgaW50IGxldnM9MSk7CgogICAgCiAgICAKICAgIApwcml2
YXRlOgogICBHcmlkVW5pdExpc3QgKnJlZmluZWxpc3QoQkJveExpc3QgY29uc3QgJmJibGlzdCwg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgYXRsZXYsIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgaW50IG1pbncpOwogICAKcHVibGljOgogICB2b2lkIHJl
ZmluZXRoaXNsaXN0KGNvbnN0IEJCb3hMaXN0JiBiYmxpc3QsIAogICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGludCBhdGxldiwgCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IG1p
bncsCgkJICAgICAgIGNvbnN0IGludCBvcnBoKTsKCiAgICAKICAgIAogICAgCnByaXZhdGU6CiAg
IGlubGluZSB2b2lkIHJlZmluZShjb25zdCBpbnQgbGV2ID0gMSkKCXsgKGN1cnJlbnQoKSktPmd1
UmVmaW5lKGxldik7IH0KICAgaW5saW5lIHZvaWQgY29hcnNlbihjb25zdCBpbnQgbGV2ID0gMSkK
CXsgKGN1cnJlbnQoKSktPmd1Q29hcnNlbihsZXYpOyB9CgpwdWJsaWM6CiAgIHZvaWQgZGVjb21w
b3NlKGNvbnN0IGludCBsZXYgPSAxKTsKCiAgICAKICAgIAogICAgCiAgICAKICAgIAogICAgCiAg
fTsKCm9zdHJlYW0mICBvcGVyYXRvciA8PCAob3N0cmVhbSYgb3MsIGNvbnN0IEdyaWRVbml0TGlz
dCYgZ3VsKTsKb2ZzdHJlYW0mIG9wZXJhdG9yIDw8IChvZnN0cmVhbSYgb2ZzLCBjb25zdCBHcmlk
VW5pdExpc3QmIGd1bCk7Cmlmc3RyZWFtJiBvcGVyYXRvciA+PiAoaWZzdHJlYW0mIGlmcywgR3Jp
ZFVuaXRMaXN0JiBndWwpOwoKCiMgMjEgIkFDRURpc3RyaWJ1dGlvbi5oIiAyCgoKCgoKCgoKCgoK
IAogCiAKdHlwZWRlZiB1bnNpZ25lZCBsb25nICgqV29ya0Z1bmMpIChjb25zdCB1bnNpZ25lZCBs
b25nICpudW1lbGVtcywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
aW50ICpsZXZlbCk7CiAKCmNsYXNzIEFDRVNwYW4gCnsKICBkTWFwSW5kZXggbWluOwogIGRNYXBJ
bmRleCBtYXg7CiAgCnB1YmxpYzogICAKICBpbmxpbmUgQUNFU3BhbigpIHt9CiAgCiAgaW5saW5l
IEFDRVNwYW4oZE1hcEluZGV4IGNvbnN0ICZsbWluLCBkTWFwSW5kZXggY29uc3QgJmxtYXgpCiAg
ICA6IG1pbihsbWluKSwgbWF4KGxtYXgpIHsgfQogIAogIGlubGluZSBBQ0VTcGFuKGNvbnN0IEFD
RVNwYW4mIG90aGVyKQogICAgOiBtaW4ob3RoZXIubWluKSwgbWF4KG90aGVyLm1heCkgeyB9CiAg
CiAgaW5saW5lIGludCBjb250YWlucyhkTWFwSW5kZXggY29uc3QgaW5kZXgpIGNvbnN0IAogICAg
eyByZXR1cm4gKGluZGV4ID49IG1pbiAmJiBpbmRleCA8PSBtYXgpOyB9CiAgCiAgaW5saW5lIGNv
bnN0IEFDRVNwYW4mIG9wZXJhdG9yID0gKGNvbnN0IEFDRVNwYW4mIG90aGVyKQogICAgeyBtaW4g
PSBvdGhlci5taW47IG1heCA9IG90aGVyLm1heDsgcmV0dXJuICp0aGlzOyB9Cn07CgoKCgoKY2xh
c3MgQUNFRGlzdHJpYnV0aW9uCnsKICBmcmllbmQgY2xhc3MgR3JpZEhpZXJhcmNoeTsKICBmcmll
bmQgaWZzdHJlYW0mIG9wZXJhdG9yID4+IChpZnN0cmVhbSYgaWZzLCBHcmlkSGllcmFyY2h5Jik7
CiAgCiAgaW50IHR5cGU7IAkgICAgICAgICAgICAgICAgCiAgCiAgQkJveCB3Ym94OyAgICAgICAg
ICAgICAgICAgICAKCiAgIAogIAogIEJCb3gqIGJveGVzOyAgICAgICAgICAgICAgICAgCiAgCiAg
V29ya0Z1bmMgd2Z1bmM7ICAgICAgICAgICAgICAKICAKICBBQ0VEaXN0cmlidXRpb24oY29uc3Qg
aW50IGRpc3R0eXBlLCBCQm94TGlzdCYgYmJsKTsKICAKcHVibGljOgogIGlubGluZSBBQ0VEaXN0
cmlidXRpb24oY29uc3QgaW50IGRpc3R0eXBlKSAKICAgIDogdHlwZShkaXN0dHlwZSkgLCBib3hl
cygwKSwgd2Z1bmMoMCkgeyB9CiAgCiAgaW5saW5lIH5BQ0VEaXN0cmlidXRpb24oKSB7IGlmIChi
b3hlcykgZGVsZXRlIFtdIGJveGVzOyB9CiAgIAogIHZvaWQgaW5pdF9wYXJ0aXRpb25lcihjb25z
dCBpbnQgbnAsCgkJCWNvbnN0IGludCBtZSwKCQkJY29uc3QgaW50IHJhbmssCgkJCWNvbnN0IEJC
b3gmIHdob2xlYmJveCk7CiAgCiAgdm9pZCBwYXJ0aXRpb24oR3JpZFVuaXRMaXN0KiYgZ2xvYmFs
bGlzdCwgCgkJIEdyaWRVbml0TGlzdComIGxvY2FsbGlzdCwgCgkJIGNvbnN0IGludCBucCwgCgkJ
IGNvbnN0IGludCBtZSwgCgkJIGNvbnN0IGludCBtaW53LCAKCQkgY29uc3QgaW50IG1heHcsIAoJ
CSBjb25zdCBpbnQgbWlud2ssIAoJCSBjb25zdCBzaG9ydCogb2xhcCwKCQkgY29uc3QgaW50IG9y
cGhhbl9mbGFnKTsKICAKICB2b2lkIHBhcnRpdGlvbihCQm94TGlzdCYgaW5iYmwsCgkJIEJCb3hM
aXN0KiogYmJveGFycmF5LAoJCSBjb25zdCBpbnQgbGV2ZWxzLAoJCSBjb25zdCBpbnQgY2xldmVs
cywKCQkgY29uc3QgaW50IHJlZmxldiwKCQkgY29uc3QgaW50IHJhbmssCgkJIGNvbnN0IGludCBu
cCwgCgkJIGNvbnN0IGludCBtZSwKCQkgY29uc3QgaW50IG1pbncsIAoJCSBjb25zdCBpbnQgbWF4
dywgCgkJIGNvbnN0IGludCBtaW53aywgCgkJIGNvbnN0IHNob3J0KiBvbGFwLAoJCSBjb25zdCBp
bnQgb3JwaGFuX2ZsYWcpOwogIAogIHZvaWQgcGFydGl0aW9uKGNvbnN0IEJCb3gmIHdiYm94LCAK
CQkgQkJveCYgbXliYm94LCAKCQkgY29uc3QgaW50IG5wLCAKCQkgY29uc3QgaW50IG1lLAoJCSBj
b25zdCBpbnQgb3JwaGFuX2ZsYWcpOwogIApwcml2YXRlOgogIHZvaWQgcGFydGl0aW9uKEdyaWRC
b3hMaXN0KiYgZ2xvYmFsbGlzdCwgCgkJIEdyaWRCb3hMaXN0KiYgbG9jYWxsaXN0LCAKCQkgY29u
c3QgaW50IG5wLCAKCQkgY29uc3QgaW50IG1lLCAKCQkgY29uc3QgaW50IG1pbncsIAoJCSBjb25z
dCBpbnQgbWF4dywgCgkJIGNvbnN0IGludCBtaW53aywgCgkJIGNvbnN0IHNob3J0KiBvbGFwLAoJ
CSBjb25zdCBpbnQgb3JwaGFuX2ZsYWcpOwogIApwdWJsaWM6CiAgIAogICAKICAgCiAgaW5saW5l
IGludCBkaXN0KCkgY29uc3QgCiAgICB7IAogICAgICBpZiAoKHR5cGUvICgxMCkgKSogKDEwKSAg
PT0gCgkgICgxMCkgKSAKCXJldHVybiAoMTApIDsKICAgICAgZWxzZQoJcmV0dXJuIHR5cGU7IAog
ICAgfQogIAogIGlubGluZSB2b2lkIHNldF9kaXN0KGNvbnN0IGludCBkaXN0dHlwZSkKICAgIHsg
dHlwZSA9IGRpc3R0eXBlOyB9CiAgCiAgdm9pZCBzZXRfZGlzdChjb25zdCBpbnQgZGlzdHR5cGUs
IEJCb3hMaXN0JiBiYmwpOwogIAogIGlubGluZSB2b2lkIHNldF93b3JrZnVuYyggV29ya0Z1bmMg
d29ya2Z1bmMgKQogICAgeyB3ZnVuYyA9IChXb3JrRnVuYykgd29ya2Z1bmM7IH0KICAKICB1bnNp
Z25lZCBsb25nIGdldF9sb2FkKCBHcmlkVW5pdExpc3QgJmxpc3QsICBjb25zdCBzaG9ydCogb2xh
cCApOwogIApwcml2YXRlOgogIHZvaWQgcGFydGl0aW9uVmFtcGlyZShCQm94TGlzdCYgaW5iYmws
CgkJCUJCb3hMaXN0KiogYmJveGFycmF5LAoJCQljb25zdCBpbnQgbGV2ZWxzLAoJCQljb25zdCBp
bnQgY2xldmVscywKCQkJY29uc3QgaW50IHJlZmxldiwKCQkJY29uc3QgaW50IHJhbmssCgkJCWNv
bnN0IGludCBucCwgCgkJCWNvbnN0IGludCBtZSwKCQkJY29uc3QgaW50IG1pbncsIAoJCQljb25z
dCBpbnQgbWF4dywgCgkJCWNvbnN0IGludCBtaW53aywgCgkJCWNvbnN0IHNob3J0KiBvbGFwKTsK
ICAKICB2b2lkIHBhcnRpdGlvblBhck1ldGlzKEJCb3hMaXN0JiBpbmJibCwKCQkJIEJCb3hMaXN0
KiogYmJveGFycmF5LAoJCQkgY29uc3QgaW50IGxldmVscywKCQkJIGNvbnN0IGludCBjbGV2ZWxz
LAoJCQkgY29uc3QgaW50IHJlZmxldiwKCQkJIGNvbnN0IGludCByYW5rLAoJCQkgY29uc3QgaW50
IG5wLCAKCQkJIGNvbnN0IGludCBtZSwKCQkJIGNvbnN0IGludCBtaW53LCAKCQkJIGNvbnN0IGlu
dCBtYXh3LCAKCQkJIGNvbnN0IGludCBtaW53aywgCgkJCSBjb25zdCBzaG9ydCogb2xhcCk7CiAg
CiAgdm9pZCBwYXJ0aXRpb25Db21wb3NpdGUoR3JpZFVuaXRMaXN0KiYgZ2xvYmFsbGlzdCwgCgkJ
CSAgR3JpZFVuaXRMaXN0KiYgbG9jYWxsaXN0LCAKCQkJICBjb25zdCBpbnQgbnAsIAoJCQkgIGNv
bnN0IGludCBtZSwgCgkJCSAgY29uc3QgaW50IG1pbncsCgkJCSAgY29uc3QgaW50IG1heHcsIAoJ
CQkgIGNvbnN0IGludCBtaW53aywgCgkJCSAgY29uc3Qgc2hvcnQqIG9sYXAsCgkJCSAgY29uc3Qg
aW50IG9ycGhhbik7CiAgCiAgdm9pZCBwYXJ0aXRpb25CbG9ja09uZShjb25zdCBpbnQgYXhpcywK
CQkJIEdyaWRVbml0TGlzdComIGdsb2JhbGxpc3QsIAoJCQkgR3JpZFVuaXRMaXN0KiYgbG9jYWxs
aXN0LCAKCQkJIGNvbnN0IGludCBucCwgCgkJCSBjb25zdCBpbnQgbWUsIAoJCQkgY29uc3QgaW50
IG1pbncsIAoJCQkgY29uc3QgaW50IG1heHcsIAoJCQkgY29uc3QgaW50IG1pbndrLCAKCQkJIGNv
bnN0IHNob3J0KiBvbGFwKTsKICAKICB2b2lkIHBhcnRpdGlvbkJsb2NrVHdvKGNvbnN0IGludCBh
eGlzMSwgCgkJCSBjb25zdCBpbnQgYXhpczIsCgkJCSBHcmlkVW5pdExpc3QqJiBnbG9iYWxsaXN0
LCAKCQkJIEdyaWRVbml0TGlzdComIGxvY2FsbGlzdCwgCgkJCSBjb25zdCBpbnQgbnAsIAoJCQkg
Y29uc3QgaW50IG1lLCAKCQkJIGNvbnN0IGludCBtaW53LCAKCQkJIGNvbnN0IGludCBtYXh3LCAK
CQkJIGNvbnN0IGludCBtaW53aywgCgkJCSBjb25zdCBzaG9ydCogb2xhcCk7CiAgCiAgdm9pZCBw
YXJ0aXRpb25CbG9ja0FsbChHcmlkVW5pdExpc3QqJiBnbG9iYWxsaXN0LCAKCQkJIEdyaWRVbml0
TGlzdComIGxvY2FsbGlzdCwgCgkJCSBjb25zdCBpbnQgbnAsIAoJCQkgY29uc3QgaW50IG1lLCAK
CQkJIGNvbnN0IGludCBtaW53LAoJCQkgY29uc3QgaW50IG1heHcsIAoJCQkgY29uc3QgaW50IG1p
bndrLCAKCQkJIGNvbnN0IHNob3J0KiBvbGFwKTsKCiAgdm9pZCBwYXJ0aXRpb25Vc2VyRGVmKEdy
aWRVbml0TGlzdComIGdsb2JhbGxpc3QsIAoJCQlHcmlkVW5pdExpc3QqJiBsb2NhbGxpc3QsIAoJ
CQljb25zdCBpbnQgbnAsIAoJCQljb25zdCBpbnQgbWUsIAoJCQljb25zdCBpbnQgbWludywgCgkJ
CWNvbnN0IGludCBtYXh3LCAKCQkJY29uc3QgaW50IG1pbndrLCAKCQkJY29uc3Qgc2hvcnQqIG9s
YXApOwp9OwoKCiMgMTEgIkFDRURpc3RyaWJ1dGlvbi5jcHAiIDIKCiAKIyAxICJDb21tU2VydmVy
LmgiIDEKCgoKIAoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgv
Mi45NS40Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaW9zdHJlYW0iIDEgMwogCiAKCgoKCgoj
IDE4ICJDb21tU2VydmVyLmgiIDIKCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1s
aW51eC8yLjk1LjQvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJzdHJlYW0uaCIgMSAzCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCiMgMSAiL3Vz
ci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z
L3N0cmZpbGUuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5
cGVkZWYgdm9pZCAqKCpfSU9fYWxsb2NfdHlwZSkgIChzaXplX3QgICkgIDsKdHlwZWRlZiB2b2lk
ICgqX0lPX2ZyZWVfdHlwZSkgICh2b2lkKikgIDsKCnN0cnVjdCBfSU9fc3RyX2ZpZWxkcwp7CiAg
X0lPX2FsbG9jX3R5cGUgX2FsbG9jYXRlX2J1ZmZlcjsKICBfSU9fZnJlZV90eXBlIF9mcmVlX2J1
ZmZlcjsKfTsKCiAKCgoKCnN0cnVjdCBfSU9fc3RyZWFtYnVmCnsKICBzdHJ1Y3QgX0lPX0ZJTEUg
X2Y7CiAgY29uc3Qgdm9pZCAqX3Z0YWJsZTsKfTsKCnR5cGVkZWYgc3RydWN0IF9JT19zdHJmaWxl
Xwp7CiAgc3RydWN0IF9JT19zdHJlYW1idWYgX3NiZjsKICBzdHJ1Y3QgX0lPX3N0cl9maWVsZHMg
X3M7Cn0gX0lPX3N0cmZpbGU7CgogCgoKCiAKCgojIDMzICIvdXNyL2xpYi9nY2MtbGliL2kzODYt
bGludXgvMi45NS40Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3Ryc3RyZWFtLmgiIDIgMwoK
CmV4dGVybiAiQysrIiB7CmNsYXNzIHN0cnN0cmVhbWJ1ZiA6IHB1YmxpYyBzdHJlYW1idWYKewog
IHN0cnVjdCBfSU9fc3RyX2ZpZWxkcyBfczsKICBmcmllbmQgY2xhc3MgaXN0cnN0cmVhbTsKCiAg
ICB2b2lkIGluaXRfZHluYW1pYyhfSU9fYWxsb2NfdHlwZSBhbGxvYywgX0lPX2ZyZWVfdHlwZSBm
cmVlLAoJCSAgICAgIGludCBpbml0aWFsX3NpemUgPSAwKTsKICAgIHZvaWQgaW5pdF9zdGF0aWMo
Y2hhciAqcHRyLCBpbnQgc2l6ZSwgY2hhciAqcHN0YXJ0KTsKICAgIHZvaWQgaW5pdF9yZWFkb25s
eShjb25zdCBjaGFyICpwdHIsIGludCBzaXplKTsKICBwcm90ZWN0ZWQ6CiAgICB2aXJ0dWFsIGlu
dCBvdmVyZmxvdyhpbnQgPSAoLTEpICk7CiAgICB2aXJ0dWFsIGludCB1bmRlcmZsb3coKTsKICAg
IHZpcnR1YWwgaW50IHBiYWNrZmFpbChpbnQgYyk7CiAgcHVibGljOgogICAgdmlydHVhbCB+c3Ry
c3RyZWFtYnVmKCk7CiAgICBzdHJzdHJlYW1idWYoKSB7IGluaXRfZHluYW1pYygwLCAwKTsgfQog
ICAgc3Ryc3RyZWFtYnVmKGludCBpbml0aWFsX3NpemUpIHsgaW5pdF9keW5hbWljKDAsIDAsIGlu
aXRpYWxfc2l6ZSk7IH0KICAgIHN0cnN0cmVhbWJ1Zih2b2lkICooKl9fYWxsb2MpKHNpemVfdCAg
KSwgdm9pZCAoKl9fZnJlZSkodm9pZCopKQoJeyBpbml0X2R5bmFtaWMoX19hbGxvYywgX19mcmVl
KTsgfQogICAgc3Ryc3RyZWFtYnVmKGNoYXIgKnB0ciwgaW50IHNpemUsIGNoYXIgKnBzdGFydCA9
IF9fbnVsbCApCgl7IGluaXRfc3RhdGljKHB0ciwgc2l6ZSwgcHN0YXJ0KTsgfQogICAgc3Ryc3Ry
ZWFtYnVmKHVuc2lnbmVkIGNoYXIgKnB0ciwgaW50IHNpemUsIHVuc2lnbmVkIGNoYXIgKnBzdGFy
dCA9IF9fbnVsbCApCgl7IGluaXRfc3RhdGljKChjaGFyKilwdHIsIHNpemUsIChjaGFyKilwc3Rh
cnQpOyB9CiAgICBzdHJzdHJlYW1idWYoY29uc3QgY2hhciAqcHRyLCBpbnQgc2l6ZSkKCXsgaW5p
dF9yZWFkb25seShwdHIsIHNpemUpOyB9CiAgICBzdHJzdHJlYW1idWYoY29uc3QgdW5zaWduZWQg
Y2hhciAqcHRyLCBpbnQgc2l6ZSkKCXsgaW5pdF9yZWFkb25seSgoY29uc3QgY2hhciopcHRyLCBz
aXplKTsgfQogICAgc3Ryc3RyZWFtYnVmKHNpZ25lZCBjaGFyICpwdHIsIGludCBzaXplLCBzaWdu
ZWQgY2hhciAqcHN0YXJ0ID0gX19udWxsICkKCXsgaW5pdF9zdGF0aWMoKGNoYXIqKXB0ciwgc2l6
ZSwgKGNoYXIqKXBzdGFydCk7IH0KICAgIHN0cnN0cmVhbWJ1Zihjb25zdCBzaWduZWQgY2hhciAq
cHRyLCBpbnQgc2l6ZSkKCXsgaW5pdF9yZWFkb25seSgoY29uc3QgY2hhciopcHRyLCBzaXplKTsg
fQogICAgIAogICAgaW50IGZyb3plbigpIHsgcmV0dXJuIF9mbGFncyAmIDEgID8gMSA6IDA7IH0K
ICAgIHZvaWQgZnJlZXplKGludCBuPTEpCgl7IGlmICgoKCB0aGlzICktPl9zLl9hbGxvY2F0ZV9i
dWZmZXIgIT0gKF9JT19hbGxvY190eXBlKTApICkKCSAgICB7IGlmIChuKSBfZmxhZ3MgfD0gMSA7
IGVsc2UgX2ZsYWdzICY9IH4xIDsgfSB9CiAgICBfX3NzaXplX3QgICBwY291bnQoKTsKICAgIGNo
YXIgKnN0cigpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc2Vla29mZihzdHJlYW1vZmYsIF9zZWVr
X2RpciwgaW50IG1vZGU9aW9zOjppbnxpb3M6Om91dCk7Cn07CgpjbGFzcyBzdHJzdHJlYW1iYXNl
IDogdmlydHVhbCBwdWJsaWMgaW9zIHsKICBwcm90ZWN0ZWQ6CiAgICBzdHJzdHJlYW1idWYgX19t
eV9zYjsKICBwdWJsaWM6CiAgICBzdHJzdHJlYW1idWYqIHJkYnVmKCkgeyByZXR1cm4gJl9fbXlf
c2I7IH0KICBwcm90ZWN0ZWQ6CiAgICBzdHJzdHJlYW1iYXNlKCkgeyBpbml0ICgmX19teV9zYik7
IH0KICAgIHN0cnN0cmVhbWJhc2UoY2hhciAqY3AsIGludCBuLCBpbnQgbW9kZT1pb3M6Om91dCk7
Cn07CgpjbGFzcyBpc3Ryc3RyZWFtIDogcHVibGljIHN0cnN0cmVhbWJhc2UsIHB1YmxpYyBpc3Ry
ZWFtIHsKICBwdWJsaWM6CiAgICBpc3Ryc3RyZWFtKGNvbnN0IGNoYXIqLCBpbnQ9MCk7Cn07Cgpj
bGFzcyBvc3Ryc3RyZWFtIDogcHVibGljIHN0cnN0cmVhbWJhc2UsIHB1YmxpYyBvc3RyZWFtIHsK
ICBwdWJsaWM6CiAgICBvc3Ryc3RyZWFtKCkgeyB9CiAgICBvc3Ryc3RyZWFtKGNoYXIgKmNwLCBp
bnQgbiwgaW50IG1vZGU9aW9zOjpvdXQpIDpzdHJzdHJlYW1iYXNlKGNwLG4sbW9kZSl7fQogICAg
X19zc2l6ZV90ICAgcGNvdW50KCkgeyByZXR1cm4gKChzdHJzdHJlYW1idWYqKV9zdHJidWYpLT5w
Y291bnQoKTsgfQogICAgY2hhciAqc3RyKCkgeyByZXR1cm4gKChzdHJzdHJlYW1idWYqKV9zdHJi
dWYpLT5zdHIoKTsgfQogICAgdm9pZCBmcmVlemUoaW50IG4gPSAxKSB7ICgoc3Ryc3RyZWFtYnVm
Kilfc3RyYnVmKS0+ZnJlZXplKG4pOyB9CiAgICBpbnQgZnJvemVuKCkgeyByZXR1cm4gKChzdHJz
dHJlYW1idWYqKV9zdHJidWYpLT5mcm96ZW4oKTsgfQp9OwoKY2xhc3Mgc3Ryc3RyZWFtIDogcHVi
bGljIHN0cnN0cmVhbWJhc2UsIHB1YmxpYyBpb3N0cmVhbSB7CiAgcHVibGljOgogIHN0cnN0cmVh
bSgpIHsgfQogICAgc3Ryc3RyZWFtKGNoYXIgKmNwLCBpbnQgbiwgaW50IG1vZGU9aW9zOjpvdXQp
IDpzdHJzdHJlYW1iYXNlKGNwLG4sbW9kZSl7fQogICAgX19zc2l6ZV90ICAgcGNvdW50KCkgeyBy
ZXR1cm4gKChzdHJzdHJlYW1idWYqKV9zdHJidWYpLT5wY291bnQoKTsgfQogICAgY2hhciAqc3Ry
KCkgeyByZXR1cm4gKChzdHJzdHJlYW1idWYqKV9zdHJidWYpLT5zdHIoKTsgfQogICAgdm9pZCBm
cmVlemUoaW50IG4gPSAxKSB7ICgoc3Ryc3RyZWFtYnVmKilfc3RyYnVmKS0+ZnJlZXplKG4pOyB9
CiAgICBpbnQgZnJvemVuKCkgeyByZXR1cm4gKChzdHJzdHJlYW1idWYqKV9zdHJidWYpLT5mcm96
ZW4oKTsgfQp9Owp9ICAKCgojIDI2ICJDb21tU2VydmVyLmgiIDIKCgoKCiMgMSAiL3Vzci9pbmNs
dWRlL2Fzc2VydC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKIAoKCgoKIyA2MyAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzCgoKZXh0ZXJuICJDIiB7
IAoKIApleHRlcm4gdm9pZCBfX2Fzc2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9u
LCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKCQkJICAgdW5zaWduZWQgaW50IF9fbGluZSwgX19jb25z
dCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgpICBfX2F0dHJpYnV0ZV9fICgoX19ub3Jl
dHVybl9fKSk7CgogCmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJu
dW0sIF9fY29uc3QgY2hhciAqX19maWxlLAoJCQkJICB1bnNpZ25lZCBpbnQgX19saW5lLAoJCQkJ
ICBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgIF9fYXR0cmlidXRlX18g
KChfX25vcmV0dXJuX18pKTsKCgogCgpleHRlcm4gdm9pZCBfX2Fzc2VydCAoY29uc3QgY2hhciAq
X19hc3NlcnRpb24sIGNvbnN0IGNoYXIgKl9fZmlsZSwgaW50IF9fbGluZSkKICAgICB0aHJvdyAo
KSAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCn0gCgoKCgoKCgoKCgoKCgogCgoK
CgoKCgoKCgoKCgoKCiMgMzAgIkNvbW1TZXJ2ZXIuaCIgMgoKCgogIHR5cGVkZWYgX0lPX29zdHJl
YW1fd2l0aGFzc2lnbiBvc3RyZWFtX3dpdGhhc3NpZ247CiAgdHlwZWRlZiBfSU9faXN0cmVhbV93
aXRoYXNzaWduIGlzdHJlYW1fd2l0aGFzc2lnbjsKCgogCgoKCiMgNjQgIkNvbW1TZXJ2ZXIuaCIK
CgoKZXh0ZXJuICJDIiB7CgojIDEgIi91c3IvaW5jbHVkZS9tcGkvbXBpLmgiIDEgMwogCgoKCgoK
CiAKCgoKCiAKCgoKCgoKCgoKCgogCgpleHRlcm4gIkMiIHsKCgogCiAKCgoKCgogCgoKCgoKCgoK
CnR5cGVkZWYgaW50IE1QSV9EYXRhdHlwZTsKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiAKCgoKCgoK
CgoKCgoKCgogCgoKCgoKCgoKCgoKCgogCnR5cGVkZWYgaW50IE1QSV9Db21tOwoKCgogCnR5cGVk
ZWYgaW50IE1QSV9Hcm91cDsKCgogCnR5cGVkZWYgaW50IE1QSV9PcDsKCgoKCgoKCgoKCgoKCgog
CiAKCgoKCiAKCgoKCgogCgoKCgoKCgogCgoKCgogCgoKCgogCgoKIAoKCgoKCgoKCgoKIAoKCgoK
CnR5cGVkZWYgdm9pZCAoTVBJX0hhbmRsZXJfZnVuY3Rpb24pICgpOwoKCgoKCnR5cGVkZWYgaW50
IE1QSV9FcnJoYW5kbGVyOwogCgoKIAoKCgogCgoKCgogCnR5cGVkZWYgdW5pb24gTVBJUl9IQU5E
TEUgKk1QSV9SZXF1ZXN0OwoKIAp0eXBlZGVmIHZvaWQgKE1QSV9Vc2VyX2Z1bmN0aW9uKSAoIHZv
aWQgKiwgdm9pZCAqLCBpbnQgKiwgTVBJX0RhdGF0eXBlICogKTsgCgogCnR5cGVkZWYgaW50IChN
UElfQ29weV9mdW5jdGlvbikgKCBNUElfQ29tbSwgaW50LCB2b2lkICosIHZvaWQgKiwgdm9pZCAq
LCBpbnQgKiApOwp0eXBlZGVmIGludCAoTVBJX0RlbGV0ZV9mdW5jdGlvbikgKCBNUElfQ29tbSwg
aW50LCB2b2lkICosIHZvaWQgKiApOwoKCgoKCiAKCgogCgoKCgoKCgoKIAp0eXBlZGVmIHN0cnVj
dCBNUElSX0luZm8gKk1QSV9JbmZvOwoKCgoKIAoKCgoKCgoKIAoKCiMgMSAiL3Vzci9pbmNsdWRl
L21waS9tcGlkZWZzLmgiIDEgMwogCgoKCiAKCiMgMSAiL3Vzci9pbmNsdWRlL21waS9tcGlfZm9y
dGRlZnMuaCIgMSAzCiAKCgoKdHlwZWRlZiBpbnQgTVBJX0ZpbnQ7CgoKCgoKCiMgNyAiL3Vzci9p
bmNsdWRlL21waS9tcGlkZWZzLmgiIDIgMwoKCgoKdHlwZWRlZiBpbnQgTVBJX0FpbnQ7CgogCgoK
CiAKCgoKdHlwZWRlZiBzdHJ1Y3QgeyAKICAgIGludCBjb3VudDsKICAgIGludCBNUElfU09VUkNF
OwogICAgaW50IE1QSV9UQUc7CiAgICBpbnQgTVBJX0VSUk9SOwoKCgp9IE1QSV9TdGF0dXM7Cgog
CgogCgoKCgogCgoKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9tcGkvbXBpby5oIiAxIDMKIAoK
CgoKCgogCgoKCgojIDEgIi91c3IvaW5jbHVkZS9tcGkvbXBpLmgiIDEgMwogCgoKCgoKCiAKCiMg
NjcxICIvdXNyL2luY2x1ZGUvbXBpL21waS5oIiAzCgoKIyAxMyAiL3Vzci9pbmNsdWRlL21waS9t
cGlvLmgiIDIgMwoKCgpleHRlcm4gIkMiIHsKCgoKCiAKCnR5cGVkZWYgc3RydWN0IEFESU9JX0Zp
bGVEICpNUElfRmlsZTsKCiAKdHlwZWRlZiBzdHJ1Y3QgQURJT0lfUmVxdWVzdEQgKk1QSU9fUmVx
dWVzdDsgIAoKdHlwZWRlZiBpbnQgTVBJX09mZnNldDsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgogCgoKCgogCmludCBNUElfRmlsZV9vcGVu
KE1QSV9Db21tIGNvbW0sIGNoYXIgKmZpbGVuYW1lLCBpbnQgYW1vZGUsIAogICAgICAgICAgICAg
ICAgICAgICAgICAgIE1QSV9JbmZvIGluZm8sIE1QSV9GaWxlICpmaCk7CmludCBNUElfRmlsZV9j
bG9zZShNUElfRmlsZSAqZmgpOwppbnQgTVBJX0ZpbGVfZGVsZXRlKGNoYXIgKmZpbGVuYW1lLCBN
UElfSW5mbyBpbmZvKTsKaW50IE1QSV9GaWxlX3NldF9zaXplKE1QSV9GaWxlIGZoLCBNUElfT2Zm
c2V0IHNpemUpOwppbnQgTVBJX0ZpbGVfcHJlYWxsb2NhdGUoTVBJX0ZpbGUgZmgsIE1QSV9PZmZz
ZXQgc2l6ZSk7CmludCBNUElfRmlsZV9nZXRfc2l6ZShNUElfRmlsZSBmaCwgTVBJX09mZnNldCAq
c2l6ZSk7CmludCBNUElfRmlsZV9nZXRfZ3JvdXAoTVBJX0ZpbGUgZmgsIE1QSV9Hcm91cCAqZ3Jv
dXApOwppbnQgTVBJX0ZpbGVfZ2V0X2Ftb2RlKE1QSV9GaWxlIGZoLCBpbnQgKmFtb2RlKTsKaW50
IE1QSV9GaWxlX3NldF9pbmZvKE1QSV9GaWxlIGZoLCBNUElfSW5mbyBpbmZvKTsKaW50IE1QSV9G
aWxlX2dldF9pbmZvKE1QSV9GaWxlIGZoLCBNUElfSW5mbyAqaW5mb191c2VkKTsKCiAKaW50IE1Q
SV9GaWxlX3NldF92aWV3KE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0IGRpc3AsIE1QSV9EYXRhdHlw
ZSBldHlwZSwKCSAgICAgICAgIE1QSV9EYXRhdHlwZSBmaWxldHlwZSwgY2hhciAqZGF0YXJlcCwg
TVBJX0luZm8gaW5mbyk7CmludCBNUElfRmlsZV9nZXRfdmlldyhNUElfRmlsZSBmaCwgTVBJX09m
ZnNldCAqZGlzcCwgCiAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlICpldHlwZSwgTVBJX0Rh
dGF0eXBlICpmaWxldHlwZSwgY2hhciAqZGF0YXJlcCk7CgogCmludCBNUElfRmlsZV9yZWFkX2F0
KE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0IG9mZnNldCwgdm9pZCAqYnVmLAoJICAgICAgaW50IGNv
dW50LCBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIE1QSV9TdGF0dXMgKnN0YXR1cyk7CmludCBNUElf
RmlsZV9yZWFkX2F0X2FsbChNUElfRmlsZSBmaCwgTVBJX09mZnNldCBvZmZzZXQsIHZvaWQgKmJ1
ZiwKCSAgICAgIGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElfU3RhdHVzICpz
dGF0dXMpOwppbnQgTVBJX0ZpbGVfd3JpdGVfYXQoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zm
c2V0LCB2b2lkICpidWYsCgkgICAgICBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwg
TVBJX1N0YXR1cyAqc3RhdHVzKTsKaW50IE1QSV9GaWxlX3dyaXRlX2F0X2FsbChNUElfRmlsZSBm
aCwgTVBJX09mZnNldCBvZmZzZXQsIHZvaWQgKmJ1ZiwKCSAgICAgIGludCBjb3VudCwgTVBJX0Rh
dGF0eXBlIGRhdGF0eXBlLCBNUElfU3RhdHVzICpzdGF0dXMpOwoKIAoKIAoKaW50IE1QSV9GaWxl
X2lyZWFkX2F0KE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0IG9mZnNldCwgdm9pZCAqYnVmLAoJICAg
ICAgaW50IGNvdW50LCBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIE1QSU9fUmVxdWVzdCAqcmVxdWVz
dCk7CmludCBNUElfRmlsZV9pd3JpdGVfYXQoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0
LCB2b2lkICpidWYsCgkgICAgICBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJ
T19SZXF1ZXN0ICpyZXF1ZXN0KTsKCiAKaW50IE1QSV9GaWxlX3JlYWQoTVBJX0ZpbGUgZmgsIHZv
aWQgKmJ1ZiwgaW50IGNvdW50LCBNUElfRGF0YXR5cGUKCSAgICAgZGF0YXR5cGUsIE1QSV9TdGF0
dXMgKnN0YXR1cyk7IAppbnQgTVBJX0ZpbGVfcmVhZF9hbGwoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1
ZiwgaW50IGNvdW50LCBNUElfRGF0YXR5cGUKCSAgICAgZGF0YXR5cGUsIE1QSV9TdGF0dXMgKnN0
YXR1cyk7IAppbnQgTVBJX0ZpbGVfd3JpdGUoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNv
dW50LCBNUElfRGF0YXR5cGUKCSAgICAgIGRhdGF0eXBlLCBNUElfU3RhdHVzICpzdGF0dXMpOwpp
bnQgTVBJX0ZpbGVfd3JpdGVfYWxsKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwg
TVBJX0RhdGF0eXBlCgkgICAgICBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKCiAKCiAK
CmludCBNUElfRmlsZV9pcmVhZChNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBpbnQgY291bnQsIE1Q
SV9EYXRhdHlwZQoJICAgICBkYXRhdHlwZSwgTVBJT19SZXF1ZXN0ICpyZXF1ZXN0KTsgCmludCBN
UElfRmlsZV9pd3JpdGUoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LCBNUElfRGF0
YXR5cGUKCSAgICAgIGRhdGF0eXBlLCBNUElPX1JlcXVlc3QgKnJlcXVlc3QpOwoKaW50IE1QSV9G
aWxlX3NlZWsoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCBpbnQgd2hlbmNlKTsKaW50
IE1QSV9GaWxlX2dldF9wb3NpdGlvbihNUElfRmlsZSBmaCwgTVBJX09mZnNldCAqb2Zmc2V0KTsK
aW50IE1QSV9GaWxlX2dldF9ieXRlX29mZnNldChNUElfRmlsZSBmaCwgTVBJX09mZnNldCBvZmZz
ZXQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX09mZnNldCAqZGlz
cCk7CgogCmludCBNUElfRmlsZV9yZWFkX3NoYXJlZChNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBp
bnQgY291bnQsIAogICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBl
LCBNUElfU3RhdHVzICpzdGF0dXMpOwppbnQgTVBJX0ZpbGVfd3JpdGVfc2hhcmVkKE1QSV9GaWxl
IGZoLCB2b2lkICpidWYsIGludCBjb3VudCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJ
X0RhdGF0eXBlIGRhdGF0eXBlLCBNUElfU3RhdHVzICpzdGF0dXMpOwppbnQgTVBJX0ZpbGVfaXJl
YWRfc2hhcmVkKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElPX1JlcXVlc3QgKnJlcXVl
c3QpOwppbnQgTVBJX0ZpbGVfaXdyaXRlX3NoYXJlZChNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBp
bnQgY291bnQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgZGF0YXR5
cGUsIE1QSU9fUmVxdWVzdCAqcmVxdWVzdCk7CmludCBNUElfRmlsZV9yZWFkX29yZGVyZWQoTVBJ
X0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LCAKICAgICAgICAgICAgICAgICAgICAgICAg
ICBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIE1QSV9TdGF0dXMgKnN0YXR1cyk7CmludCBNUElfRmls
ZV93cml0ZV9vcmRlcmVkKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0YXR1cyAq
c3RhdHVzKTsKaW50IE1QSV9GaWxlX3NlZWtfc2hhcmVkKE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0
IG9mZnNldCwgaW50IHdoZW5jZSk7CmludCBNUElfRmlsZV9nZXRfcG9zaXRpb25fc2hhcmVkKE1Q
SV9GaWxlIGZoLCBNUElfT2Zmc2V0ICpvZmZzZXQpOwoKIAppbnQgTVBJX0ZpbGVfcmVhZF9hdF9h
bGxfYmVnaW4oTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCB2b2lkICpidWYsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlw
ZSk7CmludCBNUElfRmlsZV9yZWFkX2F0X2FsbF9lbmQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1Ziwg
TVBJX1N0YXR1cyAqc3RhdHVzKTsKaW50IE1QSV9GaWxlX3dyaXRlX2F0X2FsbF9iZWdpbihNUElf
RmlsZSBmaCwgTVBJX09mZnNldCBvZmZzZXQsIHZvaWQgKmJ1ZiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSk7CmludCBNUElf
RmlsZV93cml0ZV9hdF9hbGxfZW5kKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIE1QSV9TdGF0dXMg
KnN0YXR1cyk7CmludCBNUElfRmlsZV9yZWFkX2FsbF9iZWdpbihNUElfRmlsZSBmaCwgdm9pZCAq
YnVmLCBpbnQgY291bnQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBl
IGRhdGF0eXBlKTsKaW50IE1QSV9GaWxlX3JlYWRfYWxsX2VuZChNUElfRmlsZSBmaCwgdm9pZCAq
YnVmLCBNUElfU3RhdHVzICpzdGF0dXMpOwppbnQgTVBJX0ZpbGVfd3JpdGVfYWxsX2JlZ2luKE1Q
SV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBlKTsKaW50IE1QSV9GaWxlX3dyaXRlX2FsbF9lbmQo
TVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKaW50IE1QSV9GaWxl
X3JlYWRfb3JkZXJlZF9iZWdpbihNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBpbnQgY291bnQsIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSk7Cmlu
dCBNUElfRmlsZV9yZWFkX29yZGVyZWRfZW5kKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIE1QSV9T
dGF0dXMgKnN0YXR1cyk7CmludCBNUElfRmlsZV93cml0ZV9vcmRlcmVkX2JlZ2luKE1QSV9GaWxl
IGZoLCB2b2lkICpidWYsIGludCBjb3VudCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSk7CmludCBNUElfRmlsZV93cml0ZV9vcmRlcmVkX2Vu
ZChNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBNUElfU3RhdHVzICpzdGF0dXMpOwoKIAppbnQgTVBJ
X0ZpbGVfZ2V0X3R5cGVfZXh0ZW50KE1QSV9GaWxlIGZoLCBNUElfRGF0YXR5cGUgZGF0YXR5cGUs
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0FpbnQgKmV4dGVudCk7
CgogCmludCBNUElfRmlsZV9zZXRfYXRvbWljaXR5KE1QSV9GaWxlIGZoLCBpbnQgZmxhZyk7Cmlu
dCBNUElfRmlsZV9nZXRfYXRvbWljaXR5KE1QSV9GaWxlIGZoLCBpbnQgKmZsYWcpOwppbnQgTVBJ
X0ZpbGVfc3luYyhNUElfRmlsZSBmaCk7CgogCmludCBNUElfRmlsZV9zZXRfZXJyaGFuZGxlcigg
TVBJX0ZpbGUsIE1QSV9FcnJoYW5kbGVyICk7CmludCBNUElfRmlsZV9nZXRfZXJyaGFuZGxlcigg
TVBJX0ZpbGUsIE1QSV9FcnJoYW5kbGVyICogKTsKCiMgMjEwICIvdXNyL2luY2x1ZGUvbXBpL21w
aW8uaCIgMwoKCiAKCgogCgoKCgoKCgoKIApNUElfRmlsZSBNUElfRmlsZV9mMmMoTVBJX0ZpbnQg
ZmgpOwpNUElfRmludCBNUElfRmlsZV9jMmYoTVBJX0ZpbGUgZmgpOwoKCiAKCgppbnQgTVBJT19U
ZXN0KE1QSU9fUmVxdWVzdCAqcmVxdWVzdCwgaW50ICpmbGFnLCBNUElfU3RhdHVzICpzdGF0dXMp
OwppbnQgTVBJT19XYWl0KE1QSU9fUmVxdWVzdCAqcmVxdWVzdCwgTVBJX1N0YXR1cyAqc3RhdHVz
KTsKTVBJX0ZpbnQgTVBJT19SZXF1ZXN0X2MyZihNUElPX1JlcXVlc3QgcmVxdWVzdCk7Ck1QSU9f
UmVxdWVzdCBNUElPX1JlcXVlc3RfZjJjKE1QSV9GaW50IHJlcXVlc3QpOwoKCiAKIyAyNjcgIi91
c3IvaW5jbHVkZS9tcGkvbXBpby5oIiAzCgoKCgoKIAoKCiAKaW50IFBNUElfRmlsZV9vcGVuKE1Q
SV9Db21tIGNvbW0sIGNoYXIgKmZpbGVuYW1lLCBpbnQgYW1vZGUsIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBNUElfSW5mbyBpbmZvLCBNUElfRmlsZSAqZmgpOwppbnQgUE1QSV9GaWxlX2Ns
b3NlKE1QSV9GaWxlICpmaCk7CmludCBQTVBJX0ZpbGVfZGVsZXRlKGNoYXIgKmZpbGVuYW1lLCBN
UElfSW5mbyBpbmZvKTsKaW50IFBNUElfRmlsZV9zZXRfc2l6ZShNUElfRmlsZSBmaCwgTVBJX09m
ZnNldCBzaXplKTsKaW50IFBNUElfRmlsZV9wcmVhbGxvY2F0ZShNUElfRmlsZSBmaCwgTVBJX09m
ZnNldCBzaXplKTsKaW50IFBNUElfRmlsZV9nZXRfc2l6ZShNUElfRmlsZSBmaCwgTVBJX09mZnNl
dCAqc2l6ZSk7CmludCBQTVBJX0ZpbGVfZ2V0X2dyb3VwKE1QSV9GaWxlIGZoLCBNUElfR3JvdXAg
Kmdyb3VwKTsKaW50IFBNUElfRmlsZV9nZXRfYW1vZGUoTVBJX0ZpbGUgZmgsIGludCAqYW1vZGUp
OwppbnQgUE1QSV9GaWxlX3NldF9pbmZvKE1QSV9GaWxlIGZoLCBNUElfSW5mbyBpbmZvKTsKaW50
IFBNUElfRmlsZV9nZXRfaW5mbyhNUElfRmlsZSBmaCwgTVBJX0luZm8gKmluZm9fdXNlZCk7Cgog
CmludCBQTVBJX0ZpbGVfc2V0X3ZpZXcoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgZGlzcCwgCiAg
ICBNUElfRGF0YXR5cGUgZXR5cGUsIE1QSV9EYXRhdHlwZSBmaWxldHlwZSwgY2hhciAqZGF0YXJl
cCwgTVBJX0luZm8gaW5mbyk7CmludCBQTVBJX0ZpbGVfZ2V0X3ZpZXcoTVBJX0ZpbGUgZmgsIE1Q
SV9PZmZzZXQgKmRpc3AsIAogICAgICBNUElfRGF0YXR5cGUgKmV0eXBlLCBNUElfRGF0YXR5cGUg
KmZpbGV0eXBlLCBjaGFyICpkYXRhcmVwKTsKCiAKaW50IFBNUElfRmlsZV9yZWFkX2F0KE1QSV9G
aWxlIGZoLCBNUElfT2Zmc2V0IG9mZnNldCwgdm9pZCAqYnVmLAoJICAgICAgaW50IGNvdW50LCBN
UElfRGF0YXR5cGUgZGF0YXR5cGUsIE1QSV9TdGF0dXMgKnN0YXR1cyk7CmludCBQTVBJX0ZpbGVf
cmVhZF9hdF9hbGwoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCB2b2lkICpidWYsCgkg
ICAgICBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVz
KTsKaW50IFBNUElfRmlsZV93cml0ZV9hdChNUElfRmlsZSBmaCwgTVBJX09mZnNldCBvZmZzZXQs
IHZvaWQgKmJ1ZiwKCSAgICAgIGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElf
U3RhdHVzICpzdGF0dXMpOwppbnQgUE1QSV9GaWxlX3dyaXRlX2F0X2FsbChNUElfRmlsZSBmaCwg
TVBJX09mZnNldCBvZmZzZXQsIHZvaWQgKmJ1ZiwKCSAgICAgIGludCBjb3VudCwgTVBJX0RhdGF0
eXBlIGRhdGF0eXBlLCBNUElfU3RhdHVzICpzdGF0dXMpOwoKIAoKIAoKaW50IFBNUElfRmlsZV9p
cmVhZF9hdChNUElfRmlsZSBmaCwgTVBJX09mZnNldCBvZmZzZXQsIHZvaWQgKmJ1ZiwKCSAgICAg
IGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElPX1JlcXVlc3QgKnJlcXVlc3Qp
OwppbnQgUE1QSV9GaWxlX2l3cml0ZV9hdChNUElfRmlsZSBmaCwgTVBJX09mZnNldCBvZmZzZXQs
IHZvaWQgKmJ1ZiwKCSAgICAgIGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElP
X1JlcXVlc3QgKnJlcXVlc3QpOwoKIAppbnQgUE1QSV9GaWxlX3JlYWQoTVBJX0ZpbGUgZmgsIHZv
aWQgKmJ1ZiwgaW50IGNvdW50LCBNUElfRGF0YXR5cGUKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YXR5cGUsIE1QSV9TdGF0dXMgKnN0YXR1cyk7IAppbnQgUE1QSV9GaWxlX3JlYWRfYWxs
KE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwgTVBJX0RhdGF0eXBlCgkgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGF0eXBlLCBNUElfU3RhdHVzICpzdGF0dXMpOyAKaW50IFBNUElf
RmlsZV93cml0ZShNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBpbnQgY291bnQsIE1QSV9EYXRhdHlw
ZQoJICAgICAgICAgICAgICAgICAgICBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKaW50
IFBNUElfRmlsZV93cml0ZV9hbGwoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LCBN
UElfRGF0YXR5cGUKCSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGF0eXBlLCBNUElfU3RhdHVz
ICpzdGF0dXMpOwoKIAoKIAoKaW50IFBNUElfRmlsZV9pcmVhZChNUElfRmlsZSBmaCwgdm9pZCAq
YnVmLCBpbnQgY291bnQsIE1QSV9EYXRhdHlwZQoJICAgICAgICAgICAgICAgICAgICBkYXRhdHlw
ZSwgTVBJT19SZXF1ZXN0ICpyZXF1ZXN0KTsgCmludCBQTVBJX0ZpbGVfaXdyaXRlKE1QSV9GaWxl
IGZoLCB2b2lkICpidWYsIGludCBjb3VudCwgTVBJX0RhdGF0eXBlCgkgICAgICAgICAgICAgICAg
ICAgICBkYXRhdHlwZSwgTVBJT19SZXF1ZXN0ICpyZXF1ZXN0KTsKCmludCBQTVBJX0ZpbGVfc2Vl
ayhNUElfRmlsZSBmaCwgTVBJX09mZnNldCBvZmZzZXQsIGludCB3aGVuY2UpOwppbnQgUE1QSV9G
aWxlX2dldF9wb3NpdGlvbihNUElfRmlsZSBmaCwgTVBJX09mZnNldCAqb2Zmc2V0KTsKaW50IFBN
UElfRmlsZV9nZXRfYnl0ZV9vZmZzZXQoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfT2Zmc2V0ICpkaXNwKTsK
CiAKaW50IFBNUElfRmlsZV9yZWFkX3NoYXJlZChNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBpbnQg
Y291bnQsIAogICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBN
UElfU3RhdHVzICpzdGF0dXMpOwppbnQgUE1QSV9GaWxlX3dyaXRlX3NoYXJlZChNUElfRmlsZSBm
aCwgdm9pZCAqYnVmLCBpbnQgY291bnQsIAogICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9E
YXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKaW50IFBNUElfRmlsZV9pcmVh
ZF9zaGFyZWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LCAKICAgICAgICAgICAg
ICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIE1QSU9fUmVxdWVzdCAqcmVxdWVz
dCk7CmludCBQTVBJX0ZpbGVfaXdyaXRlX3NoYXJlZChNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBp
bnQgY291bnQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgZGF0YXR5
cGUsIE1QSU9fUmVxdWVzdCAqcmVxdWVzdCk7CmludCBQTVBJX0ZpbGVfcmVhZF9vcmRlcmVkKE1Q
SV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElfU3RhdHVzICpzdGF0dXMpOwppbnQgUE1QSV9G
aWxlX3dyaXRlX29yZGVyZWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LCAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElfU3RhdHVz
ICpzdGF0dXMpOwppbnQgUE1QSV9GaWxlX3NlZWtfc2hhcmVkKE1QSV9GaWxlIGZoLCBNUElfT2Zm
c2V0IG9mZnNldCwgaW50IHdoZW5jZSk7CmludCBQTVBJX0ZpbGVfZ2V0X3Bvc2l0aW9uX3NoYXJl
ZChNUElfRmlsZSBmaCwgTVBJX09mZnNldCAqb2Zmc2V0KTsKCiAKaW50IFBNUElfRmlsZV9yZWFk
X2F0X2FsbF9iZWdpbihNUElfRmlsZSBmaCwgTVBJX09mZnNldCBvZmZzZXQsIHZvaWQgKmJ1ZiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRh
dGF0eXBlKTsKaW50IFBNUElfRmlsZV9yZWFkX2F0X2FsbF9lbmQoTVBJX0ZpbGUgZmgsIHZvaWQg
KmJ1ZiwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKaW50IFBNUElfRmlsZV93cml0ZV9hdF9hbGxfYmVn
aW4oTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCB2b2lkICpidWYsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50LCBNUElfRGF0YXR5cGUgZGF0YXR5cGUpOwpp
bnQgUE1QSV9GaWxlX3dyaXRlX2F0X2FsbF9lbmQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgTVBJ
X1N0YXR1cyAqc3RhdHVzKTsKaW50IFBNUElfRmlsZV9yZWFkX2FsbF9iZWdpbihNUElfRmlsZSBm
aCwgdm9pZCAqYnVmLCBpbnQgY291bnQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJ
X0RhdGF0eXBlIGRhdGF0eXBlKTsKaW50IFBNUElfRmlsZV9yZWFkX2FsbF9lbmQoTVBJX0ZpbGUg
ZmgsIHZvaWQgKmJ1ZiwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKaW50IFBNUElfRmlsZV93cml0ZV9h
bGxfYmVnaW4oTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LCAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgZGF0YXR5cGUpOwppbnQgUE1QSV9GaWxlX3dy
aXRlX2FsbF9lbmQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgTVBJX1N0YXR1cyAqc3RhdHVzKTsK
aW50IFBNUElfRmlsZV9yZWFkX29yZGVyZWRfYmVnaW4oTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1Ziwg
aW50IGNvdW50LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUg
ZGF0YXR5cGUpOwppbnQgUE1QSV9GaWxlX3JlYWRfb3JkZXJlZF9lbmQoTVBJX0ZpbGUgZmgsIHZv
aWQgKmJ1ZiwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKaW50IFBNUElfRmlsZV93cml0ZV9vcmRlcmVk
X2JlZ2luKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSk7CmludCBQTVBJX0ZpbGVf
d3JpdGVfb3JkZXJlZF9lbmQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgTVBJX1N0YXR1cyAqc3Rh
dHVzKTsKCiAKaW50IFBNUElfRmlsZV9nZXRfdHlwZV9leHRlbnQoTVBJX0ZpbGUgZmgsIE1QSV9E
YXRhdHlwZSBkYXRhdHlwZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TVBJX0FpbnQgKmV4dGVudCk7CgogCmludCBQTVBJX0ZpbGVfc2V0X2F0b21pY2l0eShNUElfRmls
ZSBmaCwgaW50IGZsYWcpOwppbnQgUE1QSV9GaWxlX2dldF9hdG9taWNpdHkoTVBJX0ZpbGUgZmgs
IGludCAqZmxhZyk7CmludCBQTVBJX0ZpbGVfc3luYyhNUElfRmlsZSBmaCk7CgogCmludCBQTVBJ
X0ZpbGVfc2V0X2VycmhhbmRsZXIoIE1QSV9GaWxlLCBNUElfRXJyaGFuZGxlciApOwppbnQgUE1Q
SV9GaWxlX2dldF9lcnJoYW5kbGVyKCBNUElfRmlsZSwgTVBJX0VycmhhbmRsZXIgKiApOwoKIyAz
OTcgIi91c3IvaW5jbHVkZS9tcGkvbXBpby5oIiAzCgoKIApNUElfRmlsZSBQTVBJX0ZpbGVfZjJj
KE1QSV9GaW50IGZoKTsKTVBJX0ZpbnQgUE1QSV9GaWxlX2MyZihNUElfRmlsZSBmaCk7CgogCmlu
dCBNUElfRmlsZV9zZXRfZXJyaGFuZGxlcihNUElfRmlsZSBmaCwgTVBJX0VycmhhbmRsZXIgZXJy
aGFuZGxlcik7CmludCBNUElfRmlsZV9nZXRfZXJyaGFuZGxlcihNUElfRmlsZSBmaCwgTVBJX0Vy
cmhhbmRsZXIgKmVycmhhbmRsZXIpOwoKCiAKCgppbnQgUE1QSU9fVGVzdChNUElPX1JlcXVlc3Qg
KnJlcXVlc3QsIGludCAqZmxhZywgTVBJX1N0YXR1cyAqc3RhdHVzKTsKaW50IFBNUElPX1dhaXQo
TVBJT19SZXF1ZXN0ICpyZXF1ZXN0LCBNUElfU3RhdHVzICpzdGF0dXMpOwpNUElfRmludCBQTVBJ
T19SZXF1ZXN0X2MyZihNUElPX1JlcXVlc3QgcmVxdWVzdCk7Ck1QSU9fUmVxdWVzdCBQTVBJT19S
ZXF1ZXN0X2YyYyhNUElfRmludCByZXF1ZXN0KTsKCgogCiMgNDM0ICIvdXNyL2luY2x1ZGUvbXBp
L21waW8uaCIgMwoKCgp9CgoKCiMgNDkgIi91c3IvaW5jbHVkZS9tcGkvbXBpZGVmcy5oIiAyIDMK
CgoKCiMgMjM1ICIvdXNyL2luY2x1ZGUvbXBpL21waS5oIiAyIDMKCgogCgogCgoKCgoKCiAKCgoK
CgoKIAoKCgoKCgogCgoKCgoKIAoKIAogCmV4dGVybiBpbnQgTVBJQ0hYX1FPU19CQU5EV0lEVEg7
CiAKCiAKIyAxICIvdXNyL2luY2x1ZGUvbXBpL21waV9lcnJuby5oIiAxIDMKCiAKCgoKCgoKIAoK
CgoKIAoKCgoKCgogCgogCgoKCgoKCgoKCiAKCgoKCiAKCgoKIAoKCiAKCgoKCgogCgoKCiAKCgoK
CgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjc0ICIvdXNyL2luY2x1ZGUv
bXBpL21waS5oIiAyIDMKCiAKCiAKCgoKCgoKCgoKCgoKIAoKCgoKIAogIGludCBNUElfU2VuZCh2
b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwgaW50LCBNUElfQ29tbSk7CiAgaW50IE1QSV9S
ZWN2KHZvaWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgaW50LCBpbnQsIE1QSV9Db21tLCBNUElfU3Rh
dHVzICopOwogIGludCBNUElfR2V0X2NvdW50KE1QSV9TdGF0dXMgKiwgTVBJX0RhdGF0eXBlLCBp
bnQgKik7CiAgaW50IE1QSV9Cc2VuZCh2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwgaW50
LCBNUElfQ29tbSk7CiAgaW50IE1QSV9Tc2VuZCh2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGlu
dCwgaW50LCBNUElfQ29tbSk7CiAgaW50IE1QSV9Sc2VuZCh2b2lkKiwgaW50LCBNUElfRGF0YXR5
cGUsIGludCwgaW50LCBNUElfQ29tbSk7CiAgaW50IE1QSV9CdWZmZXJfYXR0YWNoKCB2b2lkKiwg
aW50KTsKICBpbnQgTVBJX0J1ZmZlcl9kZXRhY2goIHZvaWQqLCBpbnQqKTsKICBpbnQgTVBJX0lz
ZW5kKHZvaWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgaW50LCBpbnQsIE1QSV9Db21tLCBNUElfUmVx
dWVzdCAqKTsKICBpbnQgTVBJX0lic2VuZCh2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwg
aW50LCBNUElfQ29tbSwgTVBJX1JlcXVlc3QgKik7CiAgaW50IE1QSV9Jc3NlbmQodm9pZCosIGlu
dCwgTVBJX0RhdGF0eXBlLCBpbnQsIGludCwgTVBJX0NvbW0sIE1QSV9SZXF1ZXN0ICopOwogIGlu
dCBNUElfSXJzZW5kKHZvaWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgaW50LCBpbnQsIE1QSV9Db21t
LCBNUElfUmVxdWVzdCAqKTsKICBpbnQgTVBJX0lyZWN2KHZvaWQqLCBpbnQsIE1QSV9EYXRhdHlw
ZSwgaW50LCBpbnQsIE1QSV9Db21tLCBNUElfUmVxdWVzdCAqKTsKICBpbnQgTVBJX1dhaXQoTVBJ
X1JlcXVlc3QgKiwgTVBJX1N0YXR1cyAqKTsKICBpbnQgTVBJX1Rlc3QoTVBJX1JlcXVlc3QgKiwg
aW50ICosIE1QSV9TdGF0dXMgKik7CiAgaW50IE1QSV9SZXF1ZXN0X2ZyZWUoTVBJX1JlcXVlc3Qg
Kik7CiAgaW50IE1QSV9XYWl0YW55KGludCwgTVBJX1JlcXVlc3QgKiwgaW50ICosIE1QSV9TdGF0
dXMgKik7CiAgaW50IE1QSV9UZXN0YW55KGludCwgTVBJX1JlcXVlc3QgKiwgaW50ICosIGludCAq
LCBNUElfU3RhdHVzICopOwogIGludCBNUElfV2FpdGFsbChpbnQsIE1QSV9SZXF1ZXN0ICosIE1Q
SV9TdGF0dXMgKik7CiAgaW50IE1QSV9UZXN0YWxsKGludCwgTVBJX1JlcXVlc3QgKiwgaW50ICos
IE1QSV9TdGF0dXMgKik7CiAgaW50IE1QSV9XYWl0c29tZShpbnQsIE1QSV9SZXF1ZXN0ICosIGlu
dCAqLCBpbnQgKiwgTVBJX1N0YXR1cyAqKTsKICBpbnQgTVBJX1Rlc3Rzb21lKGludCwgTVBJX1Jl
cXVlc3QgKiwgaW50ICosIGludCAqLCBNUElfU3RhdHVzICopOwogIGludCBNUElfSXByb2JlKGlu
dCwgaW50LCBNUElfQ29tbSwgaW50ICpmbGFnLCBNUElfU3RhdHVzICopOwogIGludCBNUElfUHJv
YmUoaW50LCBpbnQsIE1QSV9Db21tLCBNUElfU3RhdHVzICopOwogIGludCBNUElfQ2FuY2VsKE1Q
SV9SZXF1ZXN0ICopOwogIGludCBNUElfVGVzdF9jYW5jZWxsZWQoTVBJX1N0YXR1cyAqLCBpbnQg
Kik7CiAgaW50IE1QSV9TZW5kX2luaXQodm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsIGlu
dCwgTVBJX0NvbW0sIE1QSV9SZXF1ZXN0ICopOwogIGludCBNUElfQnNlbmRfaW5pdCh2b2lkKiwg
aW50LCBNUElfRGF0YXR5cGUsIGludCxpbnQsIE1QSV9Db21tLCBNUElfUmVxdWVzdCAqKTsKICBp
bnQgTVBJX1NzZW5kX2luaXQodm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsaW50LCBNUElf
Q29tbSwgTVBJX1JlcXVlc3QgKik7CiAgaW50IE1QSV9Sc2VuZF9pbml0KHZvaWQqLCBpbnQsIE1Q
SV9EYXRhdHlwZSwgaW50LGludCwgTVBJX0NvbW0sIE1QSV9SZXF1ZXN0ICopOwogIGludCBNUElf
UmVjdl9pbml0KHZvaWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgaW50LGludCwgTVBJX0NvbW0sIE1Q
SV9SZXF1ZXN0ICopOwogIGludCBNUElfU3RhcnQoTVBJX1JlcXVlc3QgKik7CiAgaW50IE1QSV9T
dGFydGFsbChpbnQsIE1QSV9SZXF1ZXN0ICopOwogIGludCBNUElfU2VuZHJlY3Yodm9pZCAqLCBp
bnQsIE1QSV9EYXRhdHlwZSxpbnQsIGludCwgdm9pZCAqLCBpbnQsIE1QSV9EYXRhdHlwZSwgaW50
LCBpbnQsIE1QSV9Db21tLCBNUElfU3RhdHVzICopOwogIGludCBNUElfU2VuZHJlY3ZfcmVwbGFj
ZSh2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwgaW50LCBpbnQsIGludCwgTVBJX0NvbW0s
IE1QSV9TdGF0dXMgKik7CiAgaW50IE1QSV9UeXBlX2NvbnRpZ3VvdXMoaW50LCBNUElfRGF0YXR5
cGUsIE1QSV9EYXRhdHlwZSAqKTsKICBpbnQgTVBJX1R5cGVfdmVjdG9yKGludCwgaW50LCBpbnQs
IE1QSV9EYXRhdHlwZSwgTVBJX0RhdGF0eXBlICopOwogIGludCBNUElfVHlwZV9odmVjdG9yKGlu
dCwgaW50LCBNUElfQWludCwgTVBJX0RhdGF0eXBlLCBNUElfRGF0YXR5cGUgKik7CiAgaW50IE1Q
SV9UeXBlX2luZGV4ZWQoaW50LCBpbnQgKiwgaW50ICosIE1QSV9EYXRhdHlwZSwgTVBJX0RhdGF0
eXBlICopOwogIGludCBNUElfVHlwZV9oaW5kZXhlZChpbnQsIGludCAqLCBNUElfQWludCAqLCBN
UElfRGF0YXR5cGUsIE1QSV9EYXRhdHlwZSAqKTsKICBpbnQgTVBJX1R5cGVfc3RydWN0KGludCwg
aW50ICosIE1QSV9BaW50ICosIE1QSV9EYXRhdHlwZSAqLCBNUElfRGF0YXR5cGUgKik7CiAgaW50
IE1QSV9BZGRyZXNzKHZvaWQqLCBNUElfQWludCAqKTsKICBpbnQgTVBJX1R5cGVfZXh0ZW50KE1Q
SV9EYXRhdHlwZSwgTVBJX0FpbnQgKik7CiAKCiAKICBpbnQgTVBJX1R5cGVfc2l6ZShNUElfRGF0
YXR5cGUsIGludCAqKTsKICBpbnQgTVBJX1R5cGVfY291bnQoTVBJX0RhdGF0eXBlLCBpbnQgKik7
CiAgaW50IE1QSV9UeXBlX2xiKE1QSV9EYXRhdHlwZSwgTVBJX0FpbnQqKTsKICBpbnQgTVBJX1R5
cGVfdWIoTVBJX0RhdGF0eXBlLCBNUElfQWludCopOwogIGludCBNUElfVHlwZV9jb21taXQoTVBJ
X0RhdGF0eXBlICopOwogIGludCBNUElfVHlwZV9mcmVlKE1QSV9EYXRhdHlwZSAqKTsKICBpbnQg
TVBJX0dldF9lbGVtZW50cyhNUElfU3RhdHVzICosIE1QSV9EYXRhdHlwZSwgaW50ICopOwogIGlu
dCBNUElfUGFjayh2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIHZvaWQgKiwgaW50LCBpbnQgKiwg
IE1QSV9Db21tKTsKICBpbnQgTVBJX1VucGFjayh2b2lkKiwgaW50LCBpbnQgKiwgdm9pZCAqLCBp
bnQsIE1QSV9EYXRhdHlwZSwgTVBJX0NvbW0pOwogIGludCBNUElfUGFja19zaXplKGludCwgTVBJ
X0RhdGF0eXBlLCBNUElfQ29tbSwgaW50ICopOwogIGludCBNUElfQmFycmllcihNUElfQ29tbSAp
OwogIGludCBNUElfQmNhc3Qodm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsIE1QSV9Db21t
ICk7CiAgaW50IE1QSV9HYXRoZXIodm9pZCogLCBpbnQsIE1QSV9EYXRhdHlwZSwgdm9pZCosIGlu
dCwgTVBJX0RhdGF0eXBlLCBpbnQsIE1QSV9Db21tKTsgCiAgaW50IE1QSV9HYXRoZXJ2KHZvaWQq
ICwgaW50LCBNUElfRGF0YXR5cGUsIHZvaWQqLCBpbnQgKiwgaW50ICosIE1QSV9EYXRhdHlwZSwg
aW50LCBNUElfQ29tbSk7IAogIGludCBNUElfU2NhdHRlcih2b2lkKiAsIGludCwgTVBJX0RhdGF0
eXBlLCB2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwgTVBJX0NvbW0pOwogIGludCBNUElf
U2NhdHRlcnYodm9pZCogLCBpbnQgKiwgaW50ICosICBNUElfRGF0YXR5cGUsIHZvaWQqLCBpbnQs
IE1QSV9EYXRhdHlwZSwgaW50LCBNUElfQ29tbSk7CiAgaW50IE1QSV9BbGxnYXRoZXIodm9pZCog
LCBpbnQsIE1QSV9EYXRhdHlwZSwgdm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBNUElfQ29tbSk7
CiAgaW50IE1QSV9BbGxnYXRoZXJ2KHZvaWQqICwgaW50LCBNUElfRGF0YXR5cGUsIHZvaWQqLCBp
bnQgKiwgaW50ICosIE1QSV9EYXRhdHlwZSwgTVBJX0NvbW0pOwogIGludCBNUElfQWxsdG9hbGwo
dm9pZCogLCBpbnQsIE1QSV9EYXRhdHlwZSwgdm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBNUElf
Q29tbSk7CiAgaW50IE1QSV9BbGx0b2FsbHYodm9pZCogLCBpbnQgKiwgaW50ICosIE1QSV9EYXRh
dHlwZSwgdm9pZCosIGludCAqLCBpbnQgKiwgTVBJX0RhdGF0eXBlLCBNUElfQ29tbSk7CiAgaW50
IE1QSV9SZWR1Y2Uodm9pZCogLCB2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIE1QSV9PcCwgaW50
LCBNUElfQ29tbSk7CiAgaW50IE1QSV9PcF9jcmVhdGUoTVBJX1VzZXJfZnVuY3Rpb24gKiwgaW50
LCBNUElfT3AgKik7CiAgaW50IE1QSV9PcF9mcmVlKCBNUElfT3AgKik7CiAgaW50IE1QSV9BbGxy
ZWR1Y2Uodm9pZCogLCB2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIE1QSV9PcCwgTVBJX0NvbW0p
OwogIGludCBNUElfUmVkdWNlX3NjYXR0ZXIodm9pZCogLCB2b2lkKiwgaW50ICosIE1QSV9EYXRh
dHlwZSwgTVBJX09wLCBNUElfQ29tbSk7CiAgaW50IE1QSV9TY2FuKHZvaWQqICwgdm9pZCosIGlu
dCwgTVBJX0RhdGF0eXBlLCBNUElfT3AsIE1QSV9Db21tICk7CiAgaW50IE1QSV9Hcm91cF9zaXpl
KE1QSV9Hcm91cCBncm91cCwgaW50ICopOwogIGludCBNUElfR3JvdXBfcmFuayhNUElfR3JvdXAg
Z3JvdXAsIGludCAqKTsKICBpbnQgTVBJX0dyb3VwX3RyYW5zbGF0ZV9yYW5rcyAoTVBJX0dyb3Vw
LCBpbnQsIGludCAqLCBNUElfR3JvdXAsIGludCAqKTsKICBpbnQgTVBJX0dyb3VwX2NvbXBhcmUo
TVBJX0dyb3VwLCBNUElfR3JvdXAsIGludCAqKTsKICBpbnQgTVBJX0NvbW1fZ3JvdXAoTVBJX0Nv
bW0sIE1QSV9Hcm91cCAqKTsKICBpbnQgTVBJX0dyb3VwX3VuaW9uKE1QSV9Hcm91cCwgTVBJX0dy
b3VwLCBNUElfR3JvdXAgKik7CiAgaW50IE1QSV9Hcm91cF9pbnRlcnNlY3Rpb24oTVBJX0dyb3Vw
LCBNUElfR3JvdXAsIE1QSV9Hcm91cCAqKTsKICBpbnQgTVBJX0dyb3VwX2RpZmZlcmVuY2UoTVBJ
X0dyb3VwLCBNUElfR3JvdXAsIE1QSV9Hcm91cCAqKTsKICBpbnQgTVBJX0dyb3VwX2luY2woTVBJ
X0dyb3VwIGdyb3VwLCBpbnQsIGludCAqLCBNUElfR3JvdXAgKik7CiAgaW50IE1QSV9Hcm91cF9l
eGNsKE1QSV9Hcm91cCBncm91cCwgaW50LCBpbnQgKiwgTVBJX0dyb3VwICopOwogIGludCBNUElf
R3JvdXBfcmFuZ2VfaW5jbChNUElfR3JvdXAgZ3JvdXAsIGludCwgaW50IFtdWzNdLCBNUElfR3Jv
dXAgKik7CiAgaW50IE1QSV9Hcm91cF9yYW5nZV9leGNsKE1QSV9Hcm91cCBncm91cCwgaW50LCBp
bnQgW11bM10sIE1QSV9Hcm91cCAqKTsKICBpbnQgTVBJX0dyb3VwX2ZyZWUoTVBJX0dyb3VwICop
OwogIGludCBNUElfQ29tbV9zaXplKE1QSV9Db21tLCBpbnQgKik7CiAgaW50IE1QSV9Db21tX3Jh
bmsoTVBJX0NvbW0sIGludCAqKTsKICBpbnQgTVBJX0NvbW1fY29tcGFyZShNUElfQ29tbSwgTVBJ
X0NvbW0sIGludCAqKTsKICBpbnQgTVBJX0NvbW1fZHVwKE1QSV9Db21tLCBNUElfQ29tbSAqKTsK
ICBpbnQgTVBJX0NvbW1fY3JlYXRlKE1QSV9Db21tLCBNUElfR3JvdXAsIE1QSV9Db21tICopOwog
IGludCBNUElfQ29tbV9zcGxpdChNUElfQ29tbSwgaW50LCBpbnQsIE1QSV9Db21tICopOwogIGlu
dCBNUElfQ29tbV9mcmVlKE1QSV9Db21tICopOwogIGludCBNUElfQ29tbV90ZXN0X2ludGVyKE1Q
SV9Db21tLCBpbnQgKik7CiAgaW50IE1QSV9Db21tX3JlbW90ZV9zaXplKE1QSV9Db21tLCBpbnQg
Kik7CiAgaW50IE1QSV9Db21tX3JlbW90ZV9ncm91cChNUElfQ29tbSwgTVBJX0dyb3VwICopOwog
IGludCBNUElfSW50ZXJjb21tX2NyZWF0ZShNUElfQ29tbSwgaW50LCBNUElfQ29tbSwgaW50LCBp
bnQsIE1QSV9Db21tICogKTsKICBpbnQgTVBJX0ludGVyY29tbV9tZXJnZShNUElfQ29tbSwgaW50
LCBNUElfQ29tbSAqKTsKICBpbnQgTVBJX0tleXZhbF9jcmVhdGUoTVBJX0NvcHlfZnVuY3Rpb24g
KiwgTVBJX0RlbGV0ZV9mdW5jdGlvbiAqLCBpbnQgKiwgdm9pZCopOwogIGludCBNUElfS2V5dmFs
X2ZyZWUoaW50ICopOwogIGludCBNUElfQXR0cl9wdXQoTVBJX0NvbW0sIGludCwgdm9pZCopOwog
IGludCBNUElfQXR0cl9nZXQoTVBJX0NvbW0sIGludCwgdm9pZCAqLCBpbnQgKik7CiAgaW50IE1Q
SV9BdHRyX2RlbGV0ZShNUElfQ29tbSwgaW50KTsKICBpbnQgTVBJX1RvcG9fdGVzdChNUElfQ29t
bSwgaW50ICopOwogIGludCBNUElfQ2FydF9jcmVhdGUoTVBJX0NvbW0sIGludCwgaW50ICosIGlu
dCAqLCBpbnQsIE1QSV9Db21tICopOwogIGludCBNUElfRGltc19jcmVhdGUoaW50LCBpbnQsIGlu
dCAqKTsKICBpbnQgTVBJX0dyYXBoX2NyZWF0ZShNUElfQ29tbSwgaW50LCBpbnQgKiwgaW50ICos
IGludCwgTVBJX0NvbW0gKik7CiAgaW50IE1QSV9HcmFwaGRpbXNfZ2V0KE1QSV9Db21tLCBpbnQg
KiwgaW50ICopOwogIGludCBNUElfR3JhcGhfZ2V0KE1QSV9Db21tLCBpbnQsIGludCwgaW50ICos
IGludCAqKTsKICBpbnQgTVBJX0NhcnRkaW1fZ2V0KE1QSV9Db21tLCBpbnQgKik7CiAgaW50IE1Q
SV9DYXJ0X2dldChNUElfQ29tbSwgaW50LCBpbnQgKiwgaW50ICosIGludCAqKTsKICBpbnQgTVBJ
X0NhcnRfcmFuayhNUElfQ29tbSwgaW50ICosIGludCAqKTsKICBpbnQgTVBJX0NhcnRfY29vcmRz
KE1QSV9Db21tLCBpbnQsIGludCwgaW50ICopOwogIGludCBNUElfR3JhcGhfbmVpZ2hib3JzX2Nv
dW50KE1QSV9Db21tLCBpbnQsIGludCAqKTsKICBpbnQgTVBJX0dyYXBoX25laWdoYm9ycyhNUElf
Q29tbSwgaW50LCBpbnQsIGludCAqKTsKICBpbnQgTVBJX0NhcnRfc2hpZnQoTVBJX0NvbW0sIGlu
dCwgaW50LCBpbnQgKiwgaW50ICopOwogIGludCBNUElfQ2FydF9zdWIoTVBJX0NvbW0sIGludCAq
LCBNUElfQ29tbSAqKTsKICBpbnQgTVBJX0NhcnRfbWFwKE1QSV9Db21tLCBpbnQsIGludCAqLCBp
bnQgKiwgaW50ICopOwogIGludCBNUElfR3JhcGhfbWFwKE1QSV9Db21tLCBpbnQsIGludCAqLCBp
bnQgKiwgaW50ICopOwogIGludCBNUElfR2V0X3Byb2Nlc3Nvcl9uYW1lKGNoYXIgKiwgaW50ICop
OwogIGludCBNUElfR2V0X3ZlcnNpb24oaW50ICosIGludCAqKTsKICBpbnQgTVBJX0VycmhhbmRs
ZXJfY3JlYXRlKE1QSV9IYW5kbGVyX2Z1bmN0aW9uICosIE1QSV9FcnJoYW5kbGVyICopOwogIGlu
dCBNUElfRXJyaGFuZGxlcl9zZXQoTVBJX0NvbW0sIE1QSV9FcnJoYW5kbGVyKTsKICBpbnQgTVBJ
X0VycmhhbmRsZXJfZ2V0KE1QSV9Db21tLCBNUElfRXJyaGFuZGxlciAqKTsKICBpbnQgTVBJX0Vy
cmhhbmRsZXJfZnJlZShNUElfRXJyaGFuZGxlciAqKTsKICBpbnQgTVBJX0Vycm9yX3N0cmluZyhp
bnQsIGNoYXIgKiwgaW50ICopOwogIGludCBNUElfRXJyb3JfY2xhc3MoaW50LCBpbnQgKik7CiAg
ZG91YmxlIE1QSV9XdGltZSh2b2lkKTsKICBkb3VibGUgTVBJX1d0aWNrKHZvaWQpOwoKICBkb3Vi
bGUgUE1QSV9XdGltZSh2b2lkKTsKICBkb3VibGUgUE1QSV9XdGljayh2b2lkKTsKCiAgaW50IE1Q
SV9Jbml0KGludCAqLCBjaGFyICoqKik7CiAgaW50IE1QSV9Jbml0X3RocmVhZCggaW50ICosIGNo
YXIgKioqLCBpbnQsIGludCAqICk7CiAgaW50IE1QSV9GaW5hbGl6ZSh2b2lkKTsKICBpbnQgTVBJ
X0luaXRpYWxpemVkKGludCAqKTsKICBpbnQgTVBJX0Fib3J0KE1QSV9Db21tLCBpbnQpOwoKIAog
IGludCBNUElfQ29tbV9zZXRfbmFtZShNUElfQ29tbSwgY2hhciAqKTsKICBpbnQgTVBJX0NvbW1f
Z2V0X25hbWUoTVBJX0NvbW0sIGNoYXIgKiwgaW50ICopOwoKCgoKCgoKCgogIGludCBNUElfUGNv
bnRyb2woY29uc3QgaW50LCAuLi4pOwoKCiAgaW50IE1QSVJfbnVsbF9jb3B5X2ZuICAoIE1QSV9D
b21tLCBpbnQsIHZvaWQgKiwgdm9pZCAqLCB2b2lkICosIGludCAqICk7CiAgaW50IE1QSVJfbnVs
bF9kZWxldGVfZm4gICggTVBJX0NvbW0sIGludCwgdm9pZCAqLCB2b2lkICogKTsKICBpbnQgTVBJ
Ul9kdXBfZm4gICggTVBJX0NvbW0sIGludCwgdm9pZCAqLCB2b2lkICosIHZvaWQgKiwgaW50ICog
KTsKCiAKICBpbnQgTVBJX1N0YXR1c19mMmMoIE1QSV9GaW50ICosIE1QSV9TdGF0dXMgKiApOwog
IGludCBNUElfU3RhdHVzX2MyZiggTVBJX1N0YXR1cyAqLCBNUElfRmludCAqICk7CiAgaW50IE1Q
SV9GaW5hbGl6ZWQoIGludCAqICk7CiAgaW50IE1QSV9UeXBlX2NyZWF0ZV9pbmRleGVkX2Jsb2Nr
KGludCwgaW50LCBpbnQgKiwgTVBJX0RhdGF0eXBlLCBNUElfRGF0YXR5cGUgKik7CiAgaW50IE1Q
SV9UeXBlX2dldF9lbnZlbG9wZShNUElfRGF0YXR5cGUsIGludCAqLCBpbnQgKiwgaW50ICosIGlu
dCAqKTsgCiAgaW50IE1QSV9UeXBlX2dldF9jb250ZW50cyhNUElfRGF0YXR5cGUsIGludCwgaW50
LCBpbnQsIGludCAqLCBNUElfQWludCAqLCBNUElfRGF0YXR5cGUgKik7CiAgaW50IE1QSV9UeXBl
X2NyZWF0ZV9zdWJhcnJheShpbnQsIGludCAqLCBpbnQgKiwgaW50ICosIGludCwgTVBJX0RhdGF0
eXBlLCBNUElfRGF0YXR5cGUgKik7CiAgaW50IE1QSV9UeXBlX2NyZWF0ZV9kYXJyYXkoaW50LCBp
bnQsIGludCwgaW50ICosIGludCAqLCBpbnQgKiwgaW50ICosIGludCwgTVBJX0RhdGF0eXBlLCBN
UElfRGF0YXR5cGUgKik7CiAgaW50IE1QSV9JbmZvX2NyZWF0ZShNUElfSW5mbyAqKTsKICBpbnQg
TVBJX0luZm9fc2V0KE1QSV9JbmZvLCBjaGFyICosIGNoYXIgKik7CiAgaW50IE1QSV9JbmZvX2Rl
bGV0ZShNUElfSW5mbywgY2hhciAqKTsKICBpbnQgTVBJX0luZm9fZ2V0KE1QSV9JbmZvLCBjaGFy
ICosIGludCwgY2hhciAqLCBpbnQgKik7CiAgaW50IE1QSV9JbmZvX2dldF92YWx1ZWxlbihNUElf
SW5mbywgY2hhciAqLCBpbnQgKiwgaW50ICopOwogIGludCBNUElfSW5mb19nZXRfbmtleXMoTVBJ
X0luZm8sIGludCAqKTsKICBpbnQgTVBJX0luZm9fZ2V0X250aGtleShNUElfSW5mbywgaW50LCBj
aGFyICopOwogIGludCBNUElfSW5mb19kdXAoTVBJX0luZm8sIE1QSV9JbmZvICopOwogIGludCBN
UElfSW5mb19mcmVlKE1QSV9JbmZvICppbmZvKTsKCk1QSV9GaW50IE1QSV9JbmZvX2MyZihNUElf
SW5mbyk7Ck1QSV9JbmZvIE1QSV9JbmZvX2YyYyhNUElfRmludCk7Ck1QSV9GaW50IE1QSV9SZXF1
ZXN0X2MyZiggTVBJX1JlcXVlc3QgKTsKCiAKICBpbnQgTVBJX1N0YXR1c19zZXRfY2FuY2VsbGVk
KCBNUElfU3RhdHVzICosIGludCApOwogIGludCBNUElfU3RhdHVzX3NldF9lbGVtZW50cyggTVBJ
X1N0YXR1cyAqLCBNUElfRGF0YXR5cGUsIGludCApOwoKCgoKCiAKCiAgaW50IFBNUElfU2VuZCh2
b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwgaW50LCBNUElfQ29tbSk7CiAgaW50IFBNUElf
UmVjdih2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwgaW50LCBNUElfQ29tbSwgTVBJX1N0
YXR1cyAqKTsKICBpbnQgUE1QSV9HZXRfY291bnQoTVBJX1N0YXR1cyAqLCBNUElfRGF0YXR5cGUs
IGludCAqKTsKICBpbnQgUE1QSV9Cc2VuZCh2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwg
aW50LCBNUElfQ29tbSk7CiAgaW50IFBNUElfU3NlbmQodm9pZCosIGludCwgTVBJX0RhdGF0eXBl
LCBpbnQsIGludCwgTVBJX0NvbW0pOwogIGludCBQTVBJX1JzZW5kKHZvaWQqLCBpbnQsIE1QSV9E
YXRhdHlwZSwgaW50LCBpbnQsIE1QSV9Db21tKTsKICBpbnQgUE1QSV9CdWZmZXJfYXR0YWNoKCB2
b2lkKiBidWZmZXIsIGludCk7CiAgaW50IFBNUElfQnVmZmVyX2RldGFjaCggdm9pZCogYnVmZmVy
LCBpbnQqKTsKICBpbnQgUE1QSV9Jc2VuZCh2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwg
aW50LCBNUElfQ29tbSwgTVBJX1JlcXVlc3QgKik7CiAgaW50IFBNUElfSWJzZW5kKHZvaWQqLCBp
bnQsIE1QSV9EYXRhdHlwZSwgaW50LCBpbnQsIE1QSV9Db21tLCBNUElfUmVxdWVzdCAqKTsKICBp
bnQgUE1QSV9Jc3NlbmQodm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsIGludCwgTVBJX0Nv
bW0sIE1QSV9SZXF1ZXN0ICopOwogIGludCBQTVBJX0lyc2VuZCh2b2lkKiwgaW50LCBNUElfRGF0
YXR5cGUsIGludCwgaW50LCBNUElfQ29tbSwgTVBJX1JlcXVlc3QgKik7CiAgaW50IFBNUElfSXJl
Y3Yodm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsIGludCwgTVBJX0NvbW0sIE1QSV9SZXF1
ZXN0ICopOwogIGludCBQTVBJX1dhaXQoTVBJX1JlcXVlc3QgKiwgTVBJX1N0YXR1cyAqKTsKICBp
bnQgUE1QSV9UZXN0KE1QSV9SZXF1ZXN0ICosIGludCAqZmxhZywgTVBJX1N0YXR1cyAqKTsKICBp
bnQgUE1QSV9SZXF1ZXN0X2ZyZWUoTVBJX1JlcXVlc3QgKik7CiAgaW50IFBNUElfV2FpdGFueShp
bnQsIE1QSV9SZXF1ZXN0ICosIGludCAqLCBNUElfU3RhdHVzICopOwogIGludCBQTVBJX1Rlc3Rh
bnkoaW50LCBNUElfUmVxdWVzdCAqLCBpbnQgKiwgaW50ICosIE1QSV9TdGF0dXMgKik7CiAgaW50
IFBNUElfV2FpdGFsbChpbnQsIE1QSV9SZXF1ZXN0ICosIE1QSV9TdGF0dXMgKik7CiAgaW50IFBN
UElfVGVzdGFsbChpbnQsIE1QSV9SZXF1ZXN0ICosIGludCAqZmxhZywgTVBJX1N0YXR1cyAqKTsK
ICBpbnQgUE1QSV9XYWl0c29tZShpbnQsIE1QSV9SZXF1ZXN0ICosIGludCAqLCBpbnQgKiwgTVBJ
X1N0YXR1cyAqKTsKICBpbnQgUE1QSV9UZXN0c29tZShpbnQsIE1QSV9SZXF1ZXN0ICosIGludCAq
LCBpbnQgKiwgTVBJX1N0YXR1cyAqKTsKICBpbnQgUE1QSV9JcHJvYmUoaW50LCBpbnQsIE1QSV9D
b21tLCBpbnQgKmZsYWcsIE1QSV9TdGF0dXMgKik7CiAgaW50IFBNUElfUHJvYmUoaW50LCBpbnQs
IE1QSV9Db21tLCBNUElfU3RhdHVzICopOwogIGludCBQTVBJX0NhbmNlbChNUElfUmVxdWVzdCAq
KTsKICBpbnQgUE1QSV9UZXN0X2NhbmNlbGxlZChNUElfU3RhdHVzICosIGludCAqZmxhZyk7CiAg
aW50IFBNUElfU2VuZF9pbml0KHZvaWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgaW50LCBpbnQsIE1Q
SV9Db21tLCBNUElfUmVxdWVzdCAqKTsKICBpbnQgUE1QSV9Cc2VuZF9pbml0KHZvaWQqLCBpbnQs
IE1QSV9EYXRhdHlwZSwgaW50LCBpbnQsIE1QSV9Db21tLCBNUElfUmVxdWVzdCAqKTsKICBpbnQg
UE1QSV9Tc2VuZF9pbml0KHZvaWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgaW50LCBpbnQsIE1QSV9D
b21tLCBNUElfUmVxdWVzdCAqKTsKICBpbnQgUE1QSV9Sc2VuZF9pbml0KHZvaWQqLCBpbnQsIE1Q
SV9EYXRhdHlwZSwgaW50LCBpbnQsIE1QSV9Db21tLCBNUElfUmVxdWVzdCAqKTsKICBpbnQgUE1Q
SV9SZWN2X2luaXQodm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsIGludCwgTVBJX0NvbW0s
IE1QSV9SZXF1ZXN0ICopOwogIGludCBQTVBJX1N0YXJ0KE1QSV9SZXF1ZXN0ICopOwogIGludCBQ
TVBJX1N0YXJ0YWxsKGludCwgTVBJX1JlcXVlc3QgKik7CiAgaW50IFBNUElfU2VuZHJlY3Yodm9p
ZCAqLCBpbnQsIE1QSV9EYXRhdHlwZSwgaW50LCBpbnQsIHZvaWQgKiwgaW50LCBNUElfRGF0YXR5
cGUsIGludCwgaW50LCBNUElfQ29tbSwgTVBJX1N0YXR1cyAqKTsKICBpbnQgUE1QSV9TZW5kcmVj
dl9yZXBsYWNlKHZvaWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgaW50LCBpbnQsIGludCwgaW50LCBN
UElfQ29tbSwgTVBJX1N0YXR1cyAqKTsKICBpbnQgUE1QSV9UeXBlX2NvbnRpZ3VvdXMoaW50LCBN
UElfRGF0YXR5cGUsIE1QSV9EYXRhdHlwZSAqKTsKICBpbnQgUE1QSV9UeXBlX3ZlY3RvcihpbnQs
IGludCwgaW50LCBNUElfRGF0YXR5cGUsIE1QSV9EYXRhdHlwZSAqKTsKICBpbnQgUE1QSV9UeXBl
X2h2ZWN0b3IoaW50LCBpbnQsIE1QSV9BaW50LCBNUElfRGF0YXR5cGUsIE1QSV9EYXRhdHlwZSAq
KTsKICBpbnQgUE1QSV9UeXBlX2luZGV4ZWQoaW50LCBpbnQgKiwgaW50ICosIE1QSV9EYXRhdHlw
ZSwgTVBJX0RhdGF0eXBlICopOwogIGludCBQTVBJX1R5cGVfaGluZGV4ZWQoaW50LCBpbnQgKiwg
TVBJX0FpbnQgKiwgTVBJX0RhdGF0eXBlLCBNUElfRGF0YXR5cGUgKik7CiAgaW50IFBNUElfVHlw
ZV9zdHJ1Y3QoaW50LCBpbnQgKiwgTVBJX0FpbnQgKiwgTVBJX0RhdGF0eXBlICosIE1QSV9EYXRh
dHlwZSAqKTsKICBpbnQgUE1QSV9BZGRyZXNzKHZvaWQqLCBNUElfQWludCAqKTsKICBpbnQgUE1Q
SV9UeXBlX2V4dGVudChNUElfRGF0YXR5cGUsIE1QSV9BaW50ICopOwogCgogCiAgaW50IFBNUElf
VHlwZV9zaXplKE1QSV9EYXRhdHlwZSwgaW50ICopOwogIGludCBQTVBJX1R5cGVfY291bnQoTVBJ
X0RhdGF0eXBlLCBpbnQgKik7CiAgaW50IFBNUElfVHlwZV9sYihNUElfRGF0YXR5cGUsIE1QSV9B
aW50Kik7CiAgaW50IFBNUElfVHlwZV91YihNUElfRGF0YXR5cGUsIE1QSV9BaW50Kik7CiAgaW50
IFBNUElfVHlwZV9jb21taXQoTVBJX0RhdGF0eXBlICopOwogIGludCBQTVBJX1R5cGVfZnJlZShN
UElfRGF0YXR5cGUgKik7CiAgaW50IFBNUElfR2V0X2VsZW1lbnRzKE1QSV9TdGF0dXMgKiwgTVBJ
X0RhdGF0eXBlLCBpbnQgKik7CiAgaW50IFBNUElfUGFjayh2b2lkKiwgaW50LCBNUElfRGF0YXR5
cGUsIHZvaWQgKiwgaW50LCBpbnQgKiwgIE1QSV9Db21tKTsKICBpbnQgUE1QSV9VbnBhY2sodm9p
ZCosIGludCwgaW50ICosIHZvaWQgKiwgaW50LCBNUElfRGF0YXR5cGUsIE1QSV9Db21tKTsKICBp
bnQgUE1QSV9QYWNrX3NpemUoaW50LCBNUElfRGF0YXR5cGUsIE1QSV9Db21tLCBpbnQgKik7CiAg
aW50IFBNUElfQmFycmllcihNUElfQ29tbSApOwogIGludCBQTVBJX0JjYXN0KHZvaWQqIGJ1ZmZl
ciwgaW50LCBNUElfRGF0YXR5cGUsIGludCwgTVBJX0NvbW0gKTsKICBpbnQgUE1QSV9HYXRoZXIo
dm9pZCogLCBpbnQsIE1QSV9EYXRhdHlwZSwgdm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQs
IE1QSV9Db21tKTsgCiAgaW50IFBNUElfR2F0aGVydih2b2lkKiAsIGludCwgTVBJX0RhdGF0eXBl
LCB2b2lkKiwgaW50ICosIGludCAqLCBNUElfRGF0YXR5cGUsIGludCwgTVBJX0NvbW0pOyAKICBp
bnQgUE1QSV9TY2F0dGVyKHZvaWQqICwgaW50LCBNUElfRGF0YXR5cGUsIHZvaWQqLCBpbnQsIE1Q
SV9EYXRhdHlwZSwgaW50LCBNUElfQ29tbSk7CiAgaW50IFBNUElfU2NhdHRlcnYodm9pZCogLCBp
bnQgKiwgaW50ICpkaXNwbHMsIE1QSV9EYXRhdHlwZSwgdm9pZCosIGludCwgTVBJX0RhdGF0eXBl
LCBpbnQsIE1QSV9Db21tKTsKICBpbnQgUE1QSV9BbGxnYXRoZXIodm9pZCogLCBpbnQsIE1QSV9E
YXRhdHlwZSwgdm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBNUElfQ29tbSk7CiAgaW50IFBNUElf
QWxsZ2F0aGVydih2b2lkKiAsIGludCwgTVBJX0RhdGF0eXBlLCB2b2lkKiwgaW50ICosIGludCAq
LCBNUElfRGF0YXR5cGUsIE1QSV9Db21tKTsKICBpbnQgUE1QSV9BbGx0b2FsbCh2b2lkKiAsIGlu
dCwgTVBJX0RhdGF0eXBlLCB2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIE1QSV9Db21tKTsKICBp
bnQgUE1QSV9BbGx0b2FsbHYodm9pZCogLCBpbnQgKiwgaW50ICosIE1QSV9EYXRhdHlwZSwgdm9p
ZCosIGludCAqLCBpbnQgKiwgTVBJX0RhdGF0eXBlLCBNUElfQ29tbSk7CiAgaW50IFBNUElfUmVk
dWNlKHZvaWQqICwgdm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBNUElfT3AsIGludCwgTVBJX0Nv
bW0pOwogIGludCBQTVBJX09wX2NyZWF0ZShNUElfVXNlcl9mdW5jdGlvbiAqLCBpbnQsIE1QSV9P
cCAqKTsKICBpbnQgUE1QSV9PcF9mcmVlKCBNUElfT3AgKik7CiAgaW50IFBNUElfQWxscmVkdWNl
KHZvaWQqICwgdm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBNUElfT3AsIE1QSV9Db21tKTsKICBp
bnQgUE1QSV9SZWR1Y2Vfc2NhdHRlcih2b2lkKiAsIHZvaWQqLCBpbnQgKiwgTVBJX0RhdGF0eXBl
LCBNUElfT3AsIE1QSV9Db21tKTsKICBpbnQgUE1QSV9TY2FuKHZvaWQqICwgdm9pZCosIGludCwg
TVBJX0RhdGF0eXBlLCBNUElfT3AsIE1QSV9Db21tICk7CiAgaW50IFBNUElfR3JvdXBfc2l6ZShN
UElfR3JvdXAgZ3JvdXAsIGludCAqKTsKICBpbnQgUE1QSV9Hcm91cF9yYW5rKE1QSV9Hcm91cCBn
cm91cCwgaW50ICopOwogIGludCBQTVBJX0dyb3VwX3RyYW5zbGF0ZV9yYW5rcyAoTVBJX0dyb3Vw
LCBpbnQsIGludCAqLCBNUElfR3JvdXAsIGludCAqKTsKICBpbnQgUE1QSV9Hcm91cF9jb21wYXJl
KE1QSV9Hcm91cCwgTVBJX0dyb3VwLCBpbnQgKik7CiAgaW50IFBNUElfQ29tbV9ncm91cChNUElf
Q29tbSwgTVBJX0dyb3VwICopOwogIGludCBQTVBJX0dyb3VwX3VuaW9uKE1QSV9Hcm91cCwgTVBJ
X0dyb3VwLCBNUElfR3JvdXAgKik7CiAgaW50IFBNUElfR3JvdXBfaW50ZXJzZWN0aW9uKE1QSV9H
cm91cCwgTVBJX0dyb3VwLCBNUElfR3JvdXAgKik7CiAgaW50IFBNUElfR3JvdXBfZGlmZmVyZW5j
ZShNUElfR3JvdXAsIE1QSV9Hcm91cCwgTVBJX0dyb3VwICopOwogIGludCBQTVBJX0dyb3VwX2lu
Y2woTVBJX0dyb3VwIGdyb3VwLCBpbnQsIGludCAqLCBNUElfR3JvdXAgKik7CiAgaW50IFBNUElf
R3JvdXBfZXhjbChNUElfR3JvdXAgZ3JvdXAsIGludCwgaW50ICosIE1QSV9Hcm91cCAqKTsKICBp
bnQgUE1QSV9Hcm91cF9yYW5nZV9pbmNsKE1QSV9Hcm91cCBncm91cCwgaW50LCBpbnQgW11bM10s
IE1QSV9Hcm91cCAqKTsKICBpbnQgUE1QSV9Hcm91cF9yYW5nZV9leGNsKE1QSV9Hcm91cCBncm91
cCwgaW50LCBpbnQgW11bM10sIE1QSV9Hcm91cCAqKTsKICBpbnQgUE1QSV9Hcm91cF9mcmVlKE1Q
SV9Hcm91cCAqKTsKICBpbnQgUE1QSV9Db21tX3NpemUoTVBJX0NvbW0sIGludCAqKTsKICBpbnQg
UE1QSV9Db21tX3JhbmsoTVBJX0NvbW0sIGludCAqKTsKICBpbnQgUE1QSV9Db21tX2NvbXBhcmUo
TVBJX0NvbW0sIE1QSV9Db21tLCBpbnQgKik7CiAgaW50IFBNUElfQ29tbV9kdXAoTVBJX0NvbW0s
IE1QSV9Db21tICopOwogIGludCBQTVBJX0NvbW1fY3JlYXRlKE1QSV9Db21tLCBNUElfR3JvdXAs
IE1QSV9Db21tICopOwogIGludCBQTVBJX0NvbW1fc3BsaXQoTVBJX0NvbW0sIGludCwgaW50LCBN
UElfQ29tbSAqKTsKICBpbnQgUE1QSV9Db21tX2ZyZWUoTVBJX0NvbW0gKik7CiAgaW50IFBNUElf
Q29tbV90ZXN0X2ludGVyKE1QSV9Db21tLCBpbnQgKik7CiAgaW50IFBNUElfQ29tbV9yZW1vdGVf
c2l6ZShNUElfQ29tbSwgaW50ICopOwogIGludCBQTVBJX0NvbW1fcmVtb3RlX2dyb3VwKE1QSV9D
b21tLCBNUElfR3JvdXAgKik7CiAgaW50IFBNUElfSW50ZXJjb21tX2NyZWF0ZShNUElfQ29tbSwg
aW50LCBNUElfQ29tbSwgaW50LCBpbnQsIE1QSV9Db21tICopOwogIGludCBQTVBJX0ludGVyY29t
bV9tZXJnZShNUElfQ29tbSwgaW50LCBNUElfQ29tbSAqKTsKICBpbnQgUE1QSV9LZXl2YWxfY3Jl
YXRlKE1QSV9Db3B5X2Z1bmN0aW9uICosIE1QSV9EZWxldGVfZnVuY3Rpb24gKiwgaW50ICosIHZv
aWQqKTsKICBpbnQgUE1QSV9LZXl2YWxfZnJlZShpbnQgKik7CiAgaW50IFBNUElfQXR0cl9wdXQo
TVBJX0NvbW0sIGludCwgdm9pZCopOwogIGludCBQTVBJX0F0dHJfZ2V0KE1QSV9Db21tLCBpbnQs
IHZvaWQgKiwgaW50ICopOwogIGludCBQTVBJX0F0dHJfZGVsZXRlKE1QSV9Db21tLCBpbnQpOwog
IGludCBQTVBJX1RvcG9fdGVzdChNUElfQ29tbSwgaW50ICopOwogIGludCBQTVBJX0NhcnRfY3Jl
YXRlKE1QSV9Db21tLCBpbnQsIGludCAqLCBpbnQgKiwgaW50LCBNUElfQ29tbSAqKTsKICBpbnQg
UE1QSV9EaW1zX2NyZWF0ZShpbnQsIGludCwgaW50ICopOwogIGludCBQTVBJX0dyYXBoX2NyZWF0
ZShNUElfQ29tbSwgaW50LCBpbnQgKiwgaW50ICosIGludCwgTVBJX0NvbW0gKik7CiAgaW50IFBN
UElfR3JhcGhkaW1zX2dldChNUElfQ29tbSwgaW50ICosIGludCAqKTsKICBpbnQgUE1QSV9HcmFw
aF9nZXQoTVBJX0NvbW0sIGludCwgaW50LCBpbnQgKiwgaW50ICopOwogIGludCBQTVBJX0NhcnRk
aW1fZ2V0KE1QSV9Db21tLCBpbnQgKik7CiAgaW50IFBNUElfQ2FydF9nZXQoTVBJX0NvbW0sIGlu
dCwgaW50ICosIGludCAqLCBpbnQgKik7CiAgaW50IFBNUElfQ2FydF9yYW5rKE1QSV9Db21tLCBp
bnQgKiwgaW50ICopOwogIGludCBQTVBJX0NhcnRfY29vcmRzKE1QSV9Db21tLCBpbnQsIGludCwg
aW50ICopOwogIGludCBQTVBJX0dyYXBoX25laWdoYm9yc19jb3VudChNUElfQ29tbSwgaW50LCBp
bnQgKik7CiAgaW50IFBNUElfR3JhcGhfbmVpZ2hib3JzKE1QSV9Db21tLCBpbnQsIGludCwgaW50
ICopOwogIGludCBQTVBJX0NhcnRfc2hpZnQoTVBJX0NvbW0sIGludCwgaW50LCBpbnQgKiwgaW50
ICopOwogIGludCBQTVBJX0NhcnRfc3ViKE1QSV9Db21tLCBpbnQgKiwgTVBJX0NvbW0gKik7CiAg
aW50IFBNUElfQ2FydF9tYXAoTVBJX0NvbW0sIGludCwgaW50ICosIGludCAqLCBpbnQgKik7CiAg
aW50IFBNUElfR3JhcGhfbWFwKE1QSV9Db21tLCBpbnQsIGludCAqLCBpbnQgKiwgaW50ICopOwog
IGludCBQTVBJX0dldF9wcm9jZXNzb3JfbmFtZShjaGFyICosIGludCAqKTsKICBpbnQgUE1QSV9H
ZXRfdmVyc2lvbihpbnQgKiwgaW50ICopOwogIGludCBQTVBJX0VycmhhbmRsZXJfY3JlYXRlKE1Q
SV9IYW5kbGVyX2Z1bmN0aW9uICosIE1QSV9FcnJoYW5kbGVyICopOwogIGludCBQTVBJX0Vycmhh
bmRsZXJfc2V0KE1QSV9Db21tLCBNUElfRXJyaGFuZGxlcik7CiAgaW50IFBNUElfRXJyaGFuZGxl
cl9nZXQoTVBJX0NvbW0sIE1QSV9FcnJoYW5kbGVyICopOwogIGludCBQTVBJX0VycmhhbmRsZXJf
ZnJlZShNUElfRXJyaGFuZGxlciAqKTsKICBpbnQgUE1QSV9FcnJvcl9zdHJpbmcoaW50LCBjaGFy
ICosIGludCAqKTsKICBpbnQgUE1QSV9FcnJvcl9jbGFzcyhpbnQsIGludCAqKTsKCiAgaW50IFBN
UElfVHlwZV9nZXRfZW52ZWxvcGUoTVBJX0RhdGF0eXBlLCBpbnQgKiwgaW50ICosIGludCAqLCBp
bnQgKik7IAogIGludCBQTVBJX1R5cGVfZ2V0X2NvbnRlbnRzKE1QSV9EYXRhdHlwZSwgaW50LCBp
bnQsIGludCwgaW50ICosIE1QSV9BaW50ICosIE1QSV9EYXRhdHlwZSAqKTsKICBpbnQgUE1QSV9U
eXBlX2NyZWF0ZV9zdWJhcnJheShpbnQsIGludCAqLCBpbnQgKiwgaW50ICosIGludCwgTVBJX0Rh
dGF0eXBlLCBNUElfRGF0YXR5cGUgKik7CiAgaW50IFBNUElfVHlwZV9jcmVhdGVfZGFycmF5KGlu
dCwgaW50LCBpbnQsIGludCAqLCBpbnQgKiwgaW50ICosIGludCAqLCBpbnQsIE1QSV9EYXRhdHlw
ZSwgTVBJX0RhdGF0eXBlICopOwogIGludCBQTVBJX0luZm9fY3JlYXRlKE1QSV9JbmZvICopOwog
IGludCBQTVBJX0luZm9fc2V0KE1QSV9JbmZvLCBjaGFyICosIGNoYXIgKik7CiAgaW50IFBNUElf
SW5mb19kZWxldGUoTVBJX0luZm8sIGNoYXIgKik7CiAgaW50IFBNUElfSW5mb19nZXQoTVBJX0lu
Zm8sIGNoYXIgKiwgaW50LCBjaGFyICosIGludCAqKTsKICBpbnQgUE1QSV9JbmZvX2dldF92YWx1
ZWxlbihNUElfSW5mbywgY2hhciAqLCBpbnQgKiwgaW50ICopOwogIGludCBQTVBJX0luZm9fZ2V0
X25rZXlzKE1QSV9JbmZvLCBpbnQgKik7CiAgaW50IFBNUElfSW5mb19nZXRfbnRoa2V5KE1QSV9J
bmZvLCBpbnQsIGNoYXIgKik7CiAgaW50IFBNUElfSW5mb19kdXAoTVBJX0luZm8sIE1QSV9JbmZv
ICopOwogIGludCBQTVBJX0luZm9fZnJlZShNUElfSW5mbyAqKTsKCk1QSV9GaW50IFBNUElfSW5m
b19jMmYoTVBJX0luZm8pOwpNUElfSW5mbyBQTVBJX0luZm9fZjJjKE1QSV9GaW50KTsKCiAKICBp
bnQgUE1QSV9Jbml0KGludCAqLCBjaGFyICoqKik7CiAgaW50IFBNUElfSW5pdF90aHJlYWQoIGlu
dCAqLCBjaGFyICoqKiwgaW50LCBpbnQgKiApOwogIGludCBQTVBJX0ZpbmFsaXplKHZvaWQpOwog
IGludCBQTVBJX0luaXRpYWxpemVkKGludCAqKTsKICBpbnQgUE1QSV9BYm9ydChNUElfQ29tbSwg
aW50KTsKIAogCiAKCgoKCgoKCgogIGludCBQTVBJX1Bjb250cm9sKGNvbnN0IGludCwgLi4uKTsK
CgogCiAgaW50IFBNUElfU3RhdHVzX3NldF9jYW5jZWxsZWQoIE1QSV9TdGF0dXMgKiwgaW50ICk7
CiAgaW50IFBNUElfU3RhdHVzX3NldF9lbGVtZW50cyggTVBJX1N0YXR1cyAqLCBNUElfRGF0YXR5
cGUsIGludCApOwoKCiAKCgp9CiAKIAoKCgoKCgoKCgoKCgojIDY5ICJDb21tU2VydmVyLmgiIDIK
Cgp9CgoKCgogCiAKCgoKCgoKCgoKCgoKY2xhc3MgY29tbV9iYXJyaWVyIDsKCmNsYXNzIGNvbW1f
c2VydmljZSB7CnByaXZhdGU6ICAKICAgCgogIHN0YXRpYyBpbnQgICAgICAgICAgICAgaW5pdF9m
bGFnIDsKICBzdGF0aWMgaW50ICAgICAgICAgICAgIGRjZV9mbGFnIDsKCiAgc3RhdGljIGludCAg
ICAgICAgICAgICBQTWUgOwoKICBzdGF0aWMgaW50ICAgICAgICAgICAgIE5MaXN0IDsKICBzdGF0
aWMgTVBJX1JlcXVlc3QgICAqIFJMaXN0IDsKICBzdGF0aWMgY29tbV9zZXJ2aWNlICoqIFNMaXN0
IDsKICBzdGF0aWMgY29tbV9iYXJyaWVyICoqIEJhcnJpZXIgOwogIHN0YXRpYyBjb21tX2JhcnJp
ZXIgKiogQmFycmllcldvcmxkIDsKCiAgc3RhdGljIG9mc3RyZWFtICAgICAgICBvZmxvZyA7Cgog
IHN0YXRpYyBvc3RyZWFtX3dpdGhhc3NpZ24gIG9sb2cgOwoKCiAgIAogIHN0YXRpYyBpbnQgICAg
ICAgICAgICAgUE51bSA7CiAgc3RhdGljIE1QSV9Db21tICAgICAgICBDb21tIDsKICBzdGF0aWMg
TVBJX0dyb3VwICAgICAgIEdycCAgOwoKICAgCiAgc3RhdGljIGludCAgICAgICAgICAgICBpb19m
bGFnIDsKICBzdGF0aWMgaW50ICAgICAgICAgICAgIFBJTyA7CiAgc3RhdGljIE1QSV9Db21tICAg
ICAgICBDb21tSU8gOwoKICAgCiAgc3RhdGljIE1QSV9Db21tICAgICAgICBDb21tV29ybGQgOwog
IHN0YXRpYyBpbnQgICAgICAgICAgICAgUFdvcmxkIDsKICBzdGF0aWMgTVBJX0dyb3VwCSBHcnBX
b3JsZCA7CgogICAKICBzdGF0aWMgaW50CQlOdW1Db21tQXJyYXkgOwogIHN0YXRpYyBNUElfQ29t
bSAgICAgKiBDb21tQXJyYXkgOwoKICAgCiAgc3RhdGljIGRvdWJsZSBJZGxlX1RpbWUgOyAgCiAg
c3RhdGljIGRvdWJsZSBTcnZjX1RpbWUgOyAgCgogIE1QSV9SZXF1ZXN0ICogUmVxIDsKCiAgc3Rh
dGljIGludCBmaW5kVGFnKCBjb25zdCBpbnQgLCBjb25zdCBpbnQgLCBjb25zdCBpbnQgKTsgIAog
IHN0YXRpYyBpbnQgZmluZFNlcnZpY2UoIGNvbW1fc2VydmljZSAqIGNvbnN0ICk7ICAgCiAgc3Rh
dGljIGludCBmaW5kUmVxdWVzdCggY29uc3QgTVBJX1JlcXVlc3QgKTsgICAgICAKCnByb3RlY3Rl
ZDogIAoKICBjb25zdCBpbnQgSWQgOwogIGNvbnN0IGludCBUYWcgOwogIGNvbnN0IGludCBTcmMg
OwoKICBjb21tX3NlcnZpY2UoIGNvbnN0IGludCBJICwgY29uc3QgaW50IFQgLCBjb25zdCBpbnQg
Uz0gKC0yKSAgKTsKCiAgdmlydHVhbCB+Y29tbV9zZXJ2aWNlKCk7CgogIHZpcnR1YWwgdm9pZCBj
YWxscmVjdiggY29uc3QgTVBJX1N0YXR1cyAmICk7ICAKICB2aXJ0dWFsIGNvbnN0IGNoYXIgKiBu
YW1lKCB2b2lkICkgY29uc3QgOyAgICAgCgogIHZvaWQgc2V0cmVxKGNvbnN0IGludCwgY29uc3Qg
aW50LCBjb25zdCBpbnQpOwoKcHVibGljOiAgCgogICAKCiAgc3RhdGljIGludCAgaW5pdCggTVBJ
X0NvbW0gYyA9IDAgKTsKICBzdGF0aWMgdm9pZCBjbGVhbigpOwogIHN0YXRpYyB2b2lkIGtpbGwo
KTsKCiAgIAoKICBzdGF0aWMgaW50IHNlcnZlKCBNUElfUmVxdWVzdCApOyAgCiAgc3RhdGljIGlu
dCBzZXJ2ZSggdm9pZCApOyAgICAgICAgIAoKICBzdGF0aWMgdm9pZCBiYXJyaWVyKCBpbnQgY29u
c3QgdHlwZSA9ICgodW5zaWduZWQpIDApICApOwoKICAgCgogIE1QSV9SZXF1ZXN0ICogcmVxKHZv
aWQpIGNvbnN0IHsgcmV0dXJuIFJlcSA7IH0KICBpbnQgdGFnKHZvaWQpIGNvbnN0IHsgcmV0dXJu
IFRhZyA7IH0KCiAgc3RhdGljIG9mc3RyZWFtICYgZmxvZyh2b2lkKSAgeyByZXR1cm4gb2Zsb2cg
OyB9CgoKCiAgc3RhdGljIG9zdHJlYW1fd2l0aGFzc2lnbiYgbG9nKHZvaWQpICAgIHsgcmV0dXJu
IG9sb2cgOyB9CgoKICBzdGF0aWMgaW50IGRjZSh2b2lkKSAgICAgIAl7IHJldHVybiBkY2VfZmxh
ZyA7IH0KICBzdGF0aWMgaW50IHByb2NfbWUodm9pZCkgICAgICB7IHJldHVybiBQTWUgOyB9Cgog
IHN0YXRpYyBpbnQgcHJvY19udW0odm9pZCkgICAgIHsgcmV0dXJuIFBOdW0gOyB9CiAgc3RhdGlj
IE1QSV9Db21tIGNvbW0odm9pZCkgICAgeyByZXR1cm4gQ29tbSA7IH0KICBzdGF0aWMgTVBJX0dy
b3VwIGdycCh2b2lkKSAgICB7IHJldHVybiBHcnAgOyB9CgogIHN0YXRpYyBpbnQgbnVtX3NlcnZp
Y2VzKHZvaWQpIHsgcmV0dXJuIE5MaXN0IDt9CgogIHN0YXRpYyBpbnQgY29tbWluaXQodm9pZCkg
ICAgIHsgcmV0dXJuIChpbml0X2ZsYWcgPT0gMSk7IH0KICBzdGF0aWMgdm9pZCBzZXRfY29tbWlu
aXQodm9pZCkgICAgIHsgaW5pdF9mbGFnID0gMTsgfQogIHN0YXRpYyB2b2lkIHJlc2V0X2NvbW1p
bml0KHZvaWQpICAgICB7IGluaXRfZmxhZyA9IDA7IH0KCiAgc3RhdGljIGludCBpb19lbmFibGVk
KHZvaWQpICAgICB7IHJldHVybiAoaW9fZmxhZyA9PSAxKTsgfQogIHN0YXRpYyB2b2lkIHNldF9p
b19lbmFibGUodm9pZCkgICAgIHsgaW9fZmxhZyA9IDE7IH0KICBzdGF0aWMgdm9pZCByZXNldF9p
b19lbmFibGUodm9pZCkgICAgIHsgaW9fZmxhZyA9IDA7IH0KICBzdGF0aWMgaW50IHByb2NfaW8o
dm9pZCkgICAgIHsgcmV0dXJuIFBJTyA7IH0KICBzdGF0aWMgTVBJX0NvbW0gY29tbV9pbyh2b2lk
KSAgICB7IHJldHVybiBDb21tSU8gOyB9CgogIHN0YXRpYyBNUElfQ29tbSBjb21tX3dvcmxkKHZv
aWQpICAgIHsgcmV0dXJuIENvbW1Xb3JsZCA7IH0KICBzdGF0aWMgaW50IHByb2Nfd29ybGQodm9p
ZCkgICAgeyByZXR1cm4gUFdvcmxkOyB9CiAgc3RhdGljIE1QSV9Hcm91cCBncnBfd29ybGQodm9p
ZCkgICAgeyByZXR1cm4gR3JwV29ybGQgOyB9CgogIHN0YXRpYyBNUElfQ29tbSBjb21tKGludCBj
b25zdCBpZCkgICAgeyByZXR1cm4gQ29tbUFycmF5W2lkXSA7IH0KICBzdGF0aWMgaW50IG51bV9j
b21tKHZvaWQpICAgIHsgcmV0dXJuIE51bUNvbW1BcnJheSA7IH0KCiAgc3RhdGljIHZvaWQgYWRk
X2NvbW0oaW50IGNvbnN0IGlkKTsKICBzdGF0aWMgdm9pZCBkZWxldGVfY29tbShpbnQgY29uc3Qg
aWQpOwogIHN0YXRpYyB2b2lkIHJlc2V0X2NvbW0oaW50IGNvbnN0IGlkKTsKCiAgc3RhdGljIHZv
aWQgaW5jX2NvbW1hcnJheShpbnQgY29uc3QgaW5jKTsKCiAgc3RhdGljIGRvdWJsZSBpZGxlX3Rp
bWUodm9pZCkgeyByZXR1cm4gSWRsZV9UaW1lIDsgfQogIHN0YXRpYyBkb3VibGUgc3J2Y190aW1l
KHZvaWQpIHsgcmV0dXJuIFNydmNfVGltZSA7IH0KCiAgIAogIHN0YXRpYyB2b2lkIGVycm9yX21z
ZyggY29uc3QgY2hhciB3aG9bXSAsIGNvbnN0IGNoYXIgd2hhdFtdICwgaW50IFIgKTsKICBzdGF0
aWMgdm9pZCBlcnJvcl9kaWUoIGNvbnN0IGNoYXIgd2hvW10gLCBjb25zdCBjaGFyIHdoYXRbXSAs
IGludCBSICk7Cn07CgoKIyAxMyAiQUNFRGlzdHJpYnV0aW9uLmNwcCIgMgoKIAoKIAogCiAKdm9p
ZCBwYXJ0aXRpb25fb25lKGNvbnN0IEJCb3gmIHdob2xlYmJveCwgQkJveCogYm94ZXMsIGNvbnN0
IGludCBucCwgCiAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgZGltKTsKdm9pZCBwYXJ0aXRp
b25fdHdvKGNvbnN0IEJCb3gmIHdob2xlYmJveCwgQkJveCogYm94ZXMsIGNvbnN0IGludCBucCwg
CiAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgZGltMSwgY29uc3QgaW50IGRpbTIpOwp2b2lk
IHBhcnRpdGlvbl9hbGwoY29uc3QgQkJveCYgd2hvbGViYm94LCBCQm94KiBib3hlcywgY29uc3Qg
aW50IG5wKTsKdm9pZCBwd2Fsa2VyX3BhcnRpdGlvbihjb25zdCBCQm94JiB3aG9sZWJib3gsIEJC
b3gqIGJveGVzLCBjb25zdCBpbnQgbnApOwogCgpBQ0VEaXN0cmlidXRpb246OkFDRURpc3RyaWJ1
dGlvbihjb25zdCBpbnQgZGlzdHR5cGUsIEJCb3hMaXN0JiBiYmwpCiAgOiB0eXBlKGRpc3R0eXBl
KSwgYm94ZXMoMCksIHdmdW5jKDApCnsKICBib3hlcyA9IG5ldyBCQm94W2JibC5udW1iZXIoKV07
CiAgcmVnaXN0ZXIgQkJveCogYmIgPSAwOwogIHJlZ2lzdGVyIGludCBjbnQgPSAwOwogIGZvciAo
YmI9YmJsLmZpcnN0KCk7YmI7YmI9YmJsLm5leHQoKSkgewogICAgYm94ZXNbY250KytdID0gKmJi
OyAKICB9Cn0gICAKCnZvaWQgQUNFRGlzdHJpYnV0aW9uOjpzZXRfZGlzdChjb25zdCBpbnQgZGlz
dHR5cGUsIEJCb3hMaXN0JiBiYmwpCnsKICB0eXBlID0gZGlzdHR5cGU7CiAgaWYgKGJveGVzKSBk
ZWxldGUgW10gYm94ZXM7CiAgYm94ZXMgPSBuZXcgQkJveFtiYmwubnVtYmVyKCldOwogIHJlZ2lz
dGVyIEJCb3gqIGJiID0gMDsKICByZWdpc3RlciBpbnQgY250ID0gMDsKICBmb3IgKGJiPWJibC5m
aXJzdCgpO2JiO2JiPWJibC5uZXh0KCkpIHsKICAgIGJveGVzW2NudCsrXSA9ICpiYjsgCiAgfQp9
Cgp1bnNpZ25lZCBsb25nIEFDRURpc3RyaWJ1dGlvbjo6Z2V0X2xvYWQoR3JpZFVuaXRMaXN0JiBn
Z3VsLCAKCQkJCQljb25zdCBzaG9ydCogb2xhcCkKewogIGlmICh3ZnVuYykgeyAKICAgIHVuc2ln
bmVkIGxvbmcgbG9hZCA9IDAsIG4gPSAwOwogICAgaW50IGxldmVscyA9IGdndWwubGV2ZWxzKCk7
CiAgICBmb3IgKGludCBsPTA7bDxsZXZlbHM7bCsrKSAKICAgICAgbG9hZCArPSAoKndmdW5jKSgm
KG49Z2d1bC5udW1lbGVtcyhsLG9sYXApKSwmbCk7CiAgICByZXR1cm4gbG9hZDsKICB9IAogIGVs
c2UgcmV0dXJuKCBnZ3VsLmxvYWQob2xhcCkgKTsKfQoKIAogCiAKdm9pZCBBQ0VEaXN0cmlidXRp
b246OmluaXRfcGFydGl0aW9uZXIoY29uc3QgaW50IG5wLAoJCQkJICAgICAgIGNvbnN0IGludCBt
ZSwKCQkJCSAgICAgICBjb25zdCBpbnQgcmFuaywKCQkJCSAgICAgICBjb25zdCBCQm94JiB3aG9s
ZWJib3gpIAp7CiAgd2JveCA9IHdob2xlYmJveDsKICBpZiAoKHR5cGUvICgxMCkgKSogKDEwKSAg
PT0gCiAgICAgICgxMCkgKSB7CiMgODYgIkFDRURpc3RyaWJ1dGlvbi5jcHAiCgogICAgY2VyciA8
PCAiVkFNUElSRSBub3QgYXZhaWxhYmxlICEiCgkgPDwgIlBsZWFzZSByZWNvbXBpbGUgR3JBQ0Ug
d2l0aCBWYW1waXJlIGxpYnJhcmllcyIgCgkgPDwgZW5kbCA8PCBmbHVzaDsKICAgIGV4aXQgKC0x
KTsKCiAgfQogIGVsc2UgaWYgKHR5cGUgPT0gKDIwKSApIHsKIyAxMTQgIkFDRURpc3RyaWJ1dGlv
bi5jcHAiCgogICAgY2VyciA8PCAiUGFyTWV0aXMgbm90IGF2YWlsYWJsZSAhIgoJIDw8ICJQbGVh
c2UgcmVjb21waWxlIEdyQUNFIHdpdGggUGFyTWV0aXMgbGlicmFyaWVzIiAKCSA8PCBlbmRsIDw8
IGZsdXNoOwogICAgZXhpdCAoLTEpOwoKICB9CiAgZWxzZSB7IAogICAgIAogIH0KfQoKdm9pZCBB
Q0VEaXN0cmlidXRpb246OnBhcnRpdGlvbihHcmlkVW5pdExpc3QqJiBnZ3VsLAoJCQkJR3JpZFVu
aXRMaXN0KiYgbGd1bCwKCQkJCWNvbnN0IGludCBucCwgCgkJCQljb25zdCBpbnQgbWUsIAoJCQkJ
Y29uc3QgaW50IG1pbncsIAoJCQkJY29uc3QgaW50IG1heHcsIAoJCQkJY29uc3QgaW50IG1pbndr
LCAKCQkJCWNvbnN0IHNob3J0KiBvbGFwLAoJCQkJY29uc3QgaW50IG9ycGhhbl9mbGFnKQp7CiAg
aWYgKHR5cGUgPT0gKDEpICkgCiAgICBwYXJ0aXRpb25Db21wb3NpdGUoZ2d1bCxsZ3VsLG5wLG1l
LG1pbncsbWF4dyxtaW53ayxvbGFwLG9ycGhhbl9mbGFnKTsKICAKICBlbHNlIGlmICh0eXBlID09
ICgyKSApIAogICAgcGFydGl0aW9uQmxvY2tPbmUoKDApICxnZ3VsLGxndWwsbnAsbWUsbWludyxt
YXh3LG1pbndrLG9sYXApOwogIGVsc2UgaWYgKHR5cGUgPT0gKDMpICkgCiAgICBwYXJ0aXRpb25C
bG9ja09uZSgoMSkgLGdndWwsbGd1bCxucCxtZSxtaW53LG1heHcsbWlud2ssb2xhcCk7CiAgZWxz
ZSBpZiAodHlwZSA9PSAoNCkgKSAKICAgIHBhcnRpdGlvbkJsb2NrT25lKCgyKSAsZ2d1bCxsZ3Vs
LG5wLG1lLG1pbncsbWF4dyxtaW53ayxvbGFwKTsKICAKICBlbHNlIGlmICh0eXBlID09ICg1KSAp
IAogICAgcGFydGl0aW9uQmxvY2tUd28oKDApICwoMSkgLGdndWwsbGd1bCxucCxtZSxtaW53LG1h
eHcsbWlud2ssb2xhcCk7CiAgZWxzZSBpZiAodHlwZSA9PSAoNikgKSAKICAgIHBhcnRpdGlvbkJs
b2NrVHdvKCgxKSAsKDIpICxnZ3VsLGxndWwsbnAsbWUsbWludyxtYXh3LG1pbndrLG9sYXApOwog
IGVsc2UgaWYgKHR5cGUgPT0gKDcpICkgCiAgICBwYXJ0aXRpb25CbG9ja1R3bygoMCkgLCgyKSAs
Z2d1bCxsZ3VsLG5wLG1lLG1pbncsbWF4dyxtaW53ayxvbGFwKTsKICAKICBlbHNlIGlmICh0eXBl
ID09ICg4KSApIAogICAgcGFydGl0aW9uQmxvY2tBbGwoZ2d1bCxsZ3VsLG5wLG1lLG1pbncsbWF4
dyxtaW53ayxvbGFwKTsKICAKICBlbHNlIGlmICh0eXBlID09ICg5KSApIAogICAgcGFydGl0aW9u
VXNlckRlZihnZ3VsLGxndWwsbnAsbWUsbWludyxtYXh3LG1pbndrLG9sYXApOwogIAogIGVsc2Ug
ewogICAgY2VyciA8PCAiUGFydGl0aW9uZXIgTm90IERlZmluZWQgISIgPDwgZW5kbCA8PCBmbHVz
aDsKICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggMCApID8gMCA6CShfX2Fzc2VydF9mYWlsICgi
MCIgLCAiQUNFRGlzdHJpYnV0aW9uLmNwcCIsIDE2MSwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAw
KSkpIDsKICB9Cn0KCnZvaWQgQUNFRGlzdHJpYnV0aW9uOjpwYXJ0aXRpb24oQkJveExpc3QmIGlu
YmJsLAoJCQkJQkJveExpc3QqKiBiYm94YXJyYXksCgkJCQljb25zdCBpbnQgbGV2ZWxzLAoJCQkJ
Y29uc3QgaW50IGNsZXZlbHMsCgkJCQljb25zdCBpbnQgcmVmbGV2LAoJCQkJY29uc3QgaW50IHJh
bmssCgkJCQljb25zdCBpbnQgbnAsIAoJCQkJY29uc3QgaW50IG1lLAoJCQkJY29uc3QgaW50IG1p
bncsIAoJCQkJY29uc3QgaW50IG1heHcsIAoJCQkJY29uc3QgaW50IG1pbndrLCAKCQkJCWNvbnN0
IHNob3J0KiBvbGFwLAoJCQkJY29uc3QgaW50IG9ycGhhbl9mbGFnKQp7CgogIChzdGF0aWNfY2Fz
dDx2b2lkPiAgKCggdHlwZSAhPSAoMSkgICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJ0eXBlICE9
ICgxKSIgLCAiQUNFRGlzdHJpYnV0aW9uLmNwcCIsIDE4MCwgX19QUkVUVFlfRlVOQ1RJT05fXyAp
LCAwKSkpIDsKICBjb21tX3NlcnZpY2U6OmxvZygpIDw8ICJJTiBQQVJUSVRJT04gLSBUaGUgSW5w
dXQgTGlzdCBpcyAiIDw8IGVuZGwKCQkgICAgICA8PCBpbmJibCA8PCBlbmRsIDw8IGZsdXNoOwoK
ICBpZiAoKHR5cGUvICgxMCkgKSogKDEwKSAgPT0gCiAgICAgICgxMCkgKSB7CiAgICBwYXJ0aXRp
b25WYW1waXJlKGluYmJsLAoJCSAgICAgYmJveGFycmF5LAoJCSAgICAgbGV2ZWxzLAoJCSAgICAg
Y2xldmVscywKCQkgICAgIHJlZmxldiwKCQkgICAgIHJhbmssCgkJICAgICBucCwKCQkgICAgIG1l
LAoJCSAgICAgbWludywKCQkgICAgIG1heHcsCgkJICAgICBtaW53aywKCQkgICAgIG9sYXApOwog
IH0KICBlbHNlIGlmICh0eXBlID09ICgyMCkgKSB7CiAgICBwYXJ0aXRpb25QYXJNZXRpcyhpbmJi
bCwKCQkgICAgICBiYm94YXJyYXksCgkJICAgICAgbGV2ZWxzLAoJCSAgICAgIGNsZXZlbHMsCgkJ
ICAgICAgcmVmbGV2LAoJCSAgICAgIHJhbmssCgkJICAgICAgbnAsCgkJICAgICAgbWUsCgkJICAg
ICAgbWludywKCQkgICAgICBtYXh3LAoJCSAgICAgIG1pbndrLAoJCSAgICAgIG9sYXApOwogIH0K
ICBlbHNlIHsKICAgIGNlcnIgPDwgIlBhcnRpdGlvbmVyIE5vdCBEZWZpbmVkICEiIDw8IGVuZGwg
PDwgZmx1c2g7CiAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIDAgKSA/IDAgOgkoX19hc3NlcnRf
ZmFpbCAoIjAiICwgIkFDRURpc3RyaWJ1dGlvbi5jcHAiLCAyMTUsIF9fUFJFVFRZX0ZVTkNUSU9O
X18gKSwgMCkpKSA7CiAgfQoKICAgIGZvciAoaW50IGxsbD0wO2xsbDxsZXZlbHM7bGxsKyspIHsK
ICAgICAgaWYgKGJib3hhcnJheVtsbGxdKQoJY29tbV9zZXJ2aWNlOjpsb2coKSA8PCAiSU4gUEFS
VElUSU9OIC0gVGhlIE91dHB1dCBMaXN0IGF0IGxldmVsICIgPDwgbGxsIDw8ICJpcyAiIDw8IGVu
ZGwgCgkJCSAgICA8PCAqYmJveGFycmF5W2xsbF0gCgkJCSAgICA8PCBlbmRsIDw8IGZsdXNoOwog
ICAgfQoKfQoKdm9pZCBBQ0VEaXN0cmlidXRpb246OnBhcnRpdGlvbihjb25zdCBCQm94JiB3YmJv
eCwKCQkJCUJCb3gmIG15YmJveCwKCQkJCWNvbnN0IGludCBucCwgCgkJCQljb25zdCBpbnQgbWUs
CgkJCQljb25zdCBpbnQgb3JwaGFuX2ZsYWcpCnsKCiAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCB0
eXBlICE9ICgxKSAgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoInR5cGUgIT0gKDEpIiAsICJBQ0VE
aXN0cmlidXRpb24uY3BwIiwgMjM0LCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwoKICAK
ICBpZiAodHlwZSAhPSAoOSkgKSB7CiAgICBpZiAoYm94ZXMpIGRlbGV0ZSBbXSBib3hlczsKICAg
IGJveGVzID0gbmV3IEJCb3hbbnBdOwogICAgCiAgICBpZiAodHlwZSA9PSAoMikgKSAKICAgICAg
cGFydGl0aW9uX29uZSh3YmJveCwgYm94ZXMsIG5wLCAoMCkgKTsKICAgIGVsc2UgaWYgKHR5cGUg
PT0gKDMpICkgCiAgICAgIHBhcnRpdGlvbl9vbmUod2Jib3gsIGJveGVzLCBucCwgKDEpICk7CiAg
ICBlbHNlIGlmICh0eXBlID09ICg0KSApIAogICAgICBwYXJ0aXRpb25fb25lKHdiYm94LCBib3hl
cywgbnAsICgyKSApOwogICAgCiAgICBlbHNlIGlmICh0eXBlID09ICg1KSApIAogICAgICBwYXJ0
aXRpb25fdHdvKHdiYm94LCBib3hlcywgbnAsICgwKSAsICgxKSApOwogICAgZWxzZSBpZiAodHlw
ZSA9PSAoNikgKSAKICAgICAgcGFydGl0aW9uX3R3byh3YmJveCwgYm94ZXMsIG5wLCAoMSkgLCAo
MikgKTsKICAgIGVsc2UgaWYgKHR5cGUgPT0gKDcpICkgCiAgICAgIHBhcnRpdGlvbl90d28od2Ji
b3gsIGJveGVzLCBucCwgKDApICwgKDIpICk7CiAgICAKICAgIGVsc2UgaWYgKHR5cGUgPT0gKDgp
ICkgCiAgICAgIHBhcnRpdGlvbl9hbGwod2Jib3gsIGJveGVzLCBucCk7CiAgICBlbHNlIHsKICAg
ICAgY2VyciA8PCAiUGFydGl0aW9uZXIgTm90IERlZmluZWQgISIgPDwgZW5kbCA8PCBmbHVzaDsK
ICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCAwICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCIw
IiAsICJBQ0VEaXN0cmlidXRpb24uY3BwIiwgMjU5LCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDAp
KSkgOwogICAgfQogIH0KICBpZiAobWUgPCBucCkgbXliYm94ID0gYm94ZXNbbWVdOwogIGVsc2Ug
bXliYm94LnNldGVtcHR5KCk7Cn0KCiAKIAogCnZvaWQgQUNFRGlzdHJpYnV0aW9uOjpwYXJ0aXRp
b25WYW1waXJlKEJCb3hMaXN0JiBpbmJibCwKCQkJCSAgICAgICBCQm94TGlzdCoqIGJib3hhcnJh
eSwKCQkJCSAgICAgICBjb25zdCBpbnQgbGV2ZWxzLAoJCQkJICAgICAgIGNvbnN0IGludCBjbGV2
ZWxzLAoJCQkJICAgICAgIGNvbnN0IGludCByZWZsZXYsCgkJCQkgICAgICAgY29uc3QgaW50IHJh
bmssCgkJCQkgICAgICAgY29uc3QgaW50IG5wLCAKCQkJCSAgICAgICBjb25zdCBpbnQgbWUsCgkJ
CQkgICAgICAgY29uc3QgaW50IG1pbncsIAoJCQkJICAgICAgIGNvbnN0IGludCBtYXh3LCAKCQkJ
CSAgICAgICBjb25zdCBpbnQgbWlud2ssIAoJCQkJICAgICAgIGNvbnN0IHNob3J0KiBvbGFwKQp7
CiMgNDgwICJBQ0VEaXN0cmlidXRpb24uY3BwIgoKICBjZXJyIDw8ICJWQU1QSVJFIG5vdCBhdmFp
bGFibGUgISIKICAgICAgIDw8ICJQbGVhc2UgcmVjb21waWxlIEdyQUNFIHdpdGggVmFtcGlyZSBs
aWJyYXJpZXMiIAogICAgICAgPDwgZW5kbCA8PCBmbHVzaDsKICBleGl0ICgtMSk7Cgp9CgogCiAK
dm9pZCBBQ0VEaXN0cmlidXRpb246OnBhcnRpdGlvblBhck1ldGlzKEJCb3hMaXN0JiBpbmJibCwK
CQkJCQlCQm94TGlzdCoqIGJib3hhcnJheSwKCQkJCQljb25zdCBpbnQgbGV2ZWxzLAoJCQkJCWNv
bnN0IGludCBjbGV2ZWxzLAoJCQkJCWNvbnN0IGludCByZWZsZXYsCgkJCQkJY29uc3QgaW50IHJh
bmssCgkJCQkJY29uc3QgaW50IG5wLCAKCQkJCQljb25zdCBpbnQgbWUsCgkJCQkJY29uc3QgaW50
IG1pbncsIAoJCQkJCWNvbnN0IGludCBtYXh3LCAKCQkJCQljb25zdCBpbnQgbWlud2ssIAoJCQkJ
CWNvbnN0IHNob3J0KiBvbGFwKQp7CiMgNjAwICJBQ0VEaXN0cmlidXRpb24uY3BwIgoKICAgIGNl
cnIgPDwgIlBhck1ldGlzIG5vdCBhdmFpbGFibGUgISIKCSA8PCAiUGxlYXNlIHJlY29tcGlsZSBH
ckFDRSB3aXRoIFBhck1ldGlzIGxpYnJhcmllcyIgCgkgPDwgZW5kbCA8PCBmbHVzaDsKICAgIGV4
aXQgKC0xKTsKCn0KIAogCnZvaWQgQUNFRGlzdHJpYnV0aW9uOjpwYXJ0aXRpb25Db21wb3NpdGUo
R3JpZFVuaXRMaXN0KiYgZ2d1bE8sCgkJCQkJIEdyaWRVbml0TGlzdComIGxndWwsCgkJCQkJIGNv
bnN0IGludCBucCwgCgkJCQkJIGNvbnN0IGludCBtZSwgCgkJCQkJIGNvbnN0IGludCBtaW53LCAK
CQkJCQkgY29uc3QgaW50IG1heHcsIAoJCQkJCSBjb25zdCBpbnQgbWlud2ssIAoJCQkJCSBjb25z
dCBzaG9ydCogb2xhcCwKCQkJCQkgY29uc3QgaW50IG9ycGhhbl9mbGFnKQp7CgogICAKICAoc3Rh
dGljX2Nhc3Q8dm9pZD4gICgoIGdndWxPLT5udW1iZXIoKSA+IDAgKSA/IDAgOgkoX19hc3NlcnRf
ZmFpbCAoImdndWxPLT5udW1iZXIoKSA+IDAiICwgIkFDRURpc3RyaWJ1dGlvbi5jcHAiLCA2MjEs
IF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CiAgCiAgIAogIChzdGF0aWNfY2FzdDx2b2lk
PiAgKCggbnAgPiAwICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJucCA+IDAiICwgIkFDRURpc3Ry
aWJ1dGlvbi5jcHAiLCA2MjQsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CgogIAogICAK
ICAKICBpZiAobWUgPCBucCkgewogICAgaWYgKGxndWwpIGxndWwtPmVtcHR5KCk7CiAgICBlbHNl
IHsKICAgICAgbGd1bCA9IG5ldyBHcmlkVW5pdExpc3Q7CiAgICB9CiAgfQoKICAgCiAgIAoKICBH
cmlkVW5pdExpc3QgdGhlZ2d1bDsKICBHcmlkVW5pdExpc3QqIGdndWwgPSAwOwogIGlmIChvcnBo
YW5fZmxhZyA9PSAoMSkgKSB7CiAgICBnZ3VsID0gJnRoZWdndWw7CiAgICBnZ3VsTy0+bGV2ZWxs
aXN0KCpnZ3VsKTsKICB9CiAgZWxzZSB7CiAgICBnZ3VsID0gZ2d1bE87CiAgfQoKICB1bnNpZ25l
ZCBsb25nIHdvcmsgPSBnZXRfbG9hZCgqZ2d1bCxvbGFwKTsKICAKICB1bnNpZ25lZCBsb25nIG1p
bndvcmsgPSAodW5zaWduZWQpIG1pbndrOwogIHVuc2lnbmVkIGxvbmcgdGhyZXNoID0gbWF4KG1p
bndvcmssKHVuc2lnbmVkKSgoMS4wKih3b3JrL25wKSkrMC41KSk7CiAgcmVnaXN0ZXIgdW5zaWdu
ZWQgbG9uZyBjdXJ0aHJlc2ggPSB0aHJlc2g7CiAgCiAgaW50IHAgPSAwLCBwY250ID0gMDsKICB1
bnNpZ25lZCB0bXB3ID0gMCwgdyA9IDA7CiAgCiAgcmVnaXN0ZXIgR3JpZFVuaXQgKnRtcGd1ID0g
Z2d1bC0+Zmlyc3QoKTsKICAKCgoKCgoKICAKICBmb3IgKGludCBjbnQ9MDt0bXBndTtjbnQrKyx0
bXBndT1nZ3VsLT5uZXh0KCkpIHsKICAgIHcgKz0gKHRtcHcgPSB0bXBndS0+Z3VXb3JrKG9sYXAp
KTsKICAgIAojIDY3OCAiQUNFRGlzdHJpYnV0aW9uLmNwcCIKCiAgICAKICAgIGlmICh3IDw9IGN1
cnRocmVzaCkgewogICAgICAKCiAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggcDxucCApID8g
MCA6CShfX2Fzc2VydF9mYWlsICgicDxucCIgLCAiQUNFRGlzdHJpYnV0aW9uLmNwcCIsIDY4Mywg
X19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKCgogICAgICB0bXBndS0+Z3VTZXRPd25lcihw
KTsgcGNudCsrOwogICAgICBpZiAocCA9PSBtZSkgIGxndWwtPmFkZCgqdG1wZ3UpOwogICAgICAg
CiAgICAgICAKICAgIH0KICAgIGVsc2UgaWYgKHctY3VydGhyZXNoIDwgdG1wdy84KSB7CiAgICAg
IAoKICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBwPG5wICkgPyAwIDoJKF9fYXNzZXJ0X2Zh
aWwgKCJwPG5wIiAsICJBQ0VEaXN0cmlidXRpb24uY3BwIiwgNjk0LCBfX1BSRVRUWV9GVU5DVElP
Tl9fICksIDApKSkgOwoKICAgICAgdG1wZ3UtPmd1U2V0T3duZXIocCk7IHBjbnQrKzsKICAgICAg
aWYgKHAgPT0gbWUpICBsZ3VsLT5hZGQoKnRtcGd1KTsKICAgICAgIAogICAgICBwKys7IHBjbnQg
PSAwOwogICAgICBjdXJ0aHJlc2ggPSB3ICsgbWF4KG1pbndvcmssKHVuc2lnbmVkKSgoMS4wKigo
d29yay13KS8obnAtcCkpKSswLjUpKTsKICAgIH0KICAgIGVsc2UgaWYgKHRtcHcgPiB0aHJlc2gg
JiYgdG1wZ3UtPmd1RXh0ZW50VmFsdWUodG1wZ3UtPmd1Q3JzTGV2KCkpID4gbWludykgewogICAg
ICB3IC09IHRtcHc7CiAgICAgIGNudC0tOwogICAgICBpbnQgb2xkd29yayA9IHdvcms7CiAgICAg
IGdndWwtPmRlY29tcG9zZSgpOwogICAgICB3b3JrID0gZ2V0X2xvYWQoKmdndWwsb2xhcCk7CiAg
ICAgIAojIDcxNyAiQUNFRGlzdHJpYnV0aW9uLmNwcCIKCiAgICAgIAogICAgICB0aHJlc2ggPSBt
YXgobWlud29yaywodW5zaWduZWQpKCgxLjAqKHdvcmsvbnApKSswLjUpKTsKICAgICAgY3VydGhy
ZXNoID0gY3VydGhyZXNoK21heChtaW53b3JrLCh1bnNpZ25lZCkoKDEuMCooKHdvcmstb2xkd29y
aykvKG5wLXApKSkrMC41KSk7CiAgICB9CiAgICBlbHNlIGlmIChwY250ID09IDApIHsKICAgICAg
CgogICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIHA8bnAgKSA/IDAgOgkoX19hc3NlcnRfZmFp
bCAoInA8bnAiICwgIkFDRURpc3RyaWJ1dGlvbi5jcHAiLCA3MjUsIF9fUFJFVFRZX0ZVTkNUSU9O
X18gKSwgMCkpKSA7CgogICAgICB0bXBndS0+Z3VTZXRPd25lcihwKTsgcGNudCsrOwogICAgICBp
ZiAocCA9PSBtZSkgIGxndWwtPmFkZCgqdG1wZ3UpOwogICAgICAgCiAgICAgIHArKzsgcGNudCA9
IDA7CiAgICAgIGN1cnRocmVzaCA9IHcgKyBtYXgobWlud29yaywodW5zaWduZWQpKCgxLjAqKCh3
b3JrLXcpLyhucC1wKSkpKzAuNSkpOwogICAgfQogICAgZWxzZSAgewogICAgICBwKys7IHBjbnQg
PSAwOwogICAgICAKCiAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggcDxucCApID8gMCA6CShf
X2Fzc2VydF9mYWlsICgicDxucCIgLCAiQUNFRGlzdHJpYnV0aW9uLmNwcCIsIDczNywgX19QUkVU
VFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKCiAgICAgIHRtcGd1LT5ndVNldE93bmVyKHApOwogICAg
ICBpZiAocCA9PSBtZSkgbGd1bC0+YWRkKCp0bXBndSk7CiAgICAgICAKICAgICAgIAogICAgICBj
dXJ0aHJlc2ggPSAody10bXB3KSArIG1heChtaW53b3JrLCh1bnNpZ25lZCkoKDEuMCooKHdvcmst
KHctdG1wdykpLyhucC1wKSkpKzAuNSkpOwogICAgICBpZiAodyA+PSBjdXJ0aHJlc2gpIHsKCXAr
KzsgcGNudCA9IDA7CglpZiAocCA8IG5wKQoJICBjdXJ0aHJlc2ggPSB3ICsgbWF4KG1pbndvcmss
KHVuc2lnbmVkKSgoMS4wKigod29yay13KS8obnAtcCkpKSswLjUpKTsKICAgICAgfQogICAgfQog
IH0KICAgCiAgIAogIGlmIChvcnBoYW5fZmxhZyA9PSAoMSkgKSB7CiAgICAqZ2d1bE8gPSAqZ2d1
bDsKICB9Cn0KIAogCnZvaWQgQUNFRGlzdHJpYnV0aW9uOjpwYXJ0aXRpb25CbG9ja09uZShjb25z
dCBpbnQgYXhpcywKCQkJCQlHcmlkVW5pdExpc3QqJiBnZ3VsLAoJCQkJCUdyaWRVbml0TGlzdCom
IGxndWwsCgkJCQkJY29uc3QgaW50IG5wLCAKCQkJCQljb25zdCBpbnQgbWUsIAoJCQkJCWNvbnN0
IGludCBtaW53LCAKCQkJCQljb25zdCBpbnQgbWF4dywgCgkJCQkJY29uc3QgaW50IG1pbndrLCAK
CQkJCQljb25zdCBzaG9ydCogb2xhcCkKewoKICAgCiAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBn
Z3VsLT5udW1iZXIoKSA+IDAgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoImdndWwtPm51bWJlcigp
ID4gMCIgLCAiQUNFRGlzdHJpYnV0aW9uLmNwcCIsIDc3MSwgX19QUkVUVFlfRlVOQ1RJT05fXyAp
LCAwKSkpIDsKICAKICAgCiAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBucCA+IDAgKSA/IDAgOgko
X19hc3NlcnRfZmFpbCAoIm5wID4gMCIgLCAiQUNFRGlzdHJpYnV0aW9uLmNwcCIsIDc3NCwgX19Q
UkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKCiAgCiAgaWYgKGJveGVzKSBkZWxldGUgW10gYm94
ZXM7CiAgYm94ZXMgPSBuZXcgQkJveFtucF07CiAgCiAgY29uc3QgaW50IGZsZXYgPSAoZ2d1bC0+
Zmlyc3QoKSktPmd1RmluZUxldigpOwogIEJCb3hMaXN0IHRtcGJibDsKICBnZ3VsLT5iYm94bGlz
dCh0bXBiYmwsIGZsZXYsIDAsIDApOwogIEJCb3ggd2Jib3ggPSB0bXBiYmwucmVkdWNlKCk7CiAg
cGFydGl0aW9uX29uZSh3YmJveCwgYm94ZXMsIG5wLCBheGlzKTsKICAKICBHcmlkVW5pdExpc3Qg
dG1wZ3VsOwogIGZvciAocmVnaXN0ZXIgaW50IHA9MDtwPG5wO3ArKykgewogICAgZ2d1bC0+aW50
ZXJzZWN0KGJveGVzW3BdLCBmbGV2LCB0bXBndWwsIDApOwogICAgR3JpZFVuaXRMaXN0IHRtcGd1
bCgqZ2d1bCk7CiAgICB0bXBndWwgKj0gYm94ZXNbcF07CiAgICBnZ3VsLT5zZXRvd25lcih0bXBn
dWwscCk7CiAgICBpZiAocCA9PSBtZSkgewogICAgICBpZiAobGd1bCkgewoJbGd1bC0+ZW1wdHko
KTsKCSpsZ3VsID0gdG1wZ3VsOwogICAgICB9CiAgICAgIGVsc2UgewoJbGd1bCA9IG5ldyBHcmlk
VW5pdExpc3QodG1wZ3VsKTsKICAgICAgfQogICAgICBsZ3VsLT5zZXRvd25lcihtZSk7CiAgICB9
IAogIH0KfQogCiAKdm9pZCBBQ0VEaXN0cmlidXRpb246OnBhcnRpdGlvbkJsb2NrVHdvKGNvbnN0
IGludCBheGlzMSwgCgkJCQkJY29uc3QgaW50IGF4aXMyLAoJCQkJCUdyaWRVbml0TGlzdComIGdn
dWwsCgkJCQkJR3JpZFVuaXRMaXN0KiYgbGd1bCwKCQkJCQljb25zdCBpbnQgbnAsIAoJCQkJCWNv
bnN0IGludCBtZSwgCgkJCQkJY29uc3QgaW50IG1pbncsIAoJCQkJCWNvbnN0IGludCBtYXh3LCAK
CQkJCQljb25zdCBpbnQgbWlud2ssIAoJCQkJCWNvbnN0IHNob3J0KiBvbGFwKQp7CgogICAKICAo
c3RhdGljX2Nhc3Q8dm9pZD4gICgoIGdndWwtPm51bWJlcigpID4gMCApID8gMCA6CShfX2Fzc2Vy
dF9mYWlsICgiZ2d1bC0+bnVtYmVyKCkgPiAwIiAsICJBQ0VEaXN0cmlidXRpb24uY3BwIiwgODE5
LCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwogIAogICAKICAoc3RhdGljX2Nhc3Q8dm9p
ZD4gICgoIG5wID4gMCApID8gMCA6CShfX2Fzc2VydF9mYWlsICgibnAgPiAwIiAsICJBQ0VEaXN0
cmlidXRpb24uY3BwIiwgODIyLCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwoKICAKICBp
ZiAoYm94ZXMpIGRlbGV0ZSBbXSBib3hlczsKICBib3hlcyA9IG5ldyBCQm94W25wXTsKICAKICBj
b25zdCBpbnQgZmxldiA9IChnZ3VsLT5maXJzdCgpKS0+Z3VGaW5lTGV2KCk7CiAgQkJveExpc3Qg
dG1wYmJsOwogIGdndWwtPmJib3hsaXN0KHRtcGJibCwgZmxldiwgMCwgMCk7CiAgQkJveCB3YmJv
eCA9IHRtcGJibC5yZWR1Y2UoKTsKICBwYXJ0aXRpb25fdHdvKHdiYm94LCBib3hlcywgbnAsIGF4
aXMxLCBheGlzMik7CiAgCiAgR3JpZFVuaXRMaXN0IHRtcGd1bDsKICBmb3IgKHJlZ2lzdGVyIGlu
dCBwPTA7cDxucDtwKyspIHsKICAgIGdndWwtPmludGVyc2VjdChib3hlc1twXSwgZmxldiwgdG1w
Z3VsLCAwKTsKICAgIEdyaWRVbml0TGlzdCB0bXBndWwoKmdndWwpOwogICAgdG1wZ3VsICo9IGJv
eGVzW3BdOwogICAgZ2d1bC0+c2V0b3duZXIodG1wZ3VsLHApOwogICAgaWYgKHAgPT0gbWUpIHsK
ICAgICAgaWYgKGxndWwpIHsKCWxndWwtPmVtcHR5KCk7CgkqbGd1bCA9IHRtcGd1bDsKICAgICAg
fQogICAgICBlbHNlIHsKCWxndWwgPSBuZXcgR3JpZFVuaXRMaXN0KHRtcGd1bCk7CiAgICAgIH0K
ICAgICAgbGd1bC0+c2V0b3duZXIobWUpOwogICAgfSAKICB9Cn0KIAogCnZvaWQgQUNFRGlzdHJp
YnV0aW9uOjpwYXJ0aXRpb25CbG9ja0FsbChHcmlkVW5pdExpc3QqJiBnZ3VsLAoJCQkJCUdyaWRV
bml0TGlzdComIGxndWwsCgkJCQkJY29uc3QgaW50IG5wLCAKCQkJCQljb25zdCBpbnQgbWUsIAoJ
CQkJCWNvbnN0IGludCBtaW53LCAKCQkJCQljb25zdCBpbnQgbWF4dywgCgkJCQkJY29uc3QgaW50
IG1pbndrLCAKCQkJCQljb25zdCBzaG9ydCogb2xhcCkKewoKICAgCiAgKHN0YXRpY19jYXN0PHZv
aWQ+ICAoKCBnZ3VsLT5udW1iZXIoKSA+IDAgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoImdndWwt
Pm51bWJlcigpID4gMCIgLCAiQUNFRGlzdHJpYnV0aW9uLmNwcCIsIDg2NSwgX19QUkVUVFlfRlVO
Q1RJT05fXyApLCAwKSkpIDsKICAKICAgCiAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBucCA+IDAg
KSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoIm5wID4gMCIgLCAiQUNFRGlzdHJpYnV0aW9uLmNwcCIs
IDg2OCwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKCgogIGlmIChib3hlcykgZGVsZXRl
IGJveGVzOwogIGJveGVzID0gbmV3IEJCb3hbbnBdOwogIAogIGNvbnN0IGludCBmbGV2ID0gKGdn
dWwtPmZpcnN0KCkpLT5ndUZpbmVMZXYoKTsKICBCQm94TGlzdCB0bXBiYmw7CiAgZ2d1bC0+YmJv
eGxpc3QodG1wYmJsLCBmbGV2LCAwLCAwKTsKICBCQm94IHdiYm94ID0gdG1wYmJsLnJlZHVjZSgp
OwogIHBhcnRpdGlvbl9hbGwod2Jib3gsIGJveGVzLCBucCk7CiAgCiAgR3JpZFVuaXRMaXN0IHRt
cGd1bDsKICBmb3IgKHJlZ2lzdGVyIGludCBwPTA7cDxucDtwKyspIHsKICAgIGdndWwtPmludGVy
c2VjdChib3hlc1twXSwgZmxldiwgdG1wZ3VsLCAwKTsKICAgIEdyaWRVbml0TGlzdCB0bXBndWwo
KmdndWwpOwogICAgdG1wZ3VsICo9IGJveGVzW3BdOwogICAgZ2d1bC0+c2V0b3duZXIodG1wZ3Vs
LHApOwogICAgaWYgKHAgPT0gbWUpIHsKICAgICAgaWYgKGxndWwpIHsKCWxndWwtPmVtcHR5KCk7
CgkqbGd1bCA9IHRtcGd1bDsKICAgICAgfQogICAgICBlbHNlIHsKCWxndWwgPSBuZXcgR3JpZFVu
aXRMaXN0KHRtcGd1bCk7CiAgICAgIH0KICAgICAgbGd1bC0+c2V0b3duZXIobWUpOwogICAgfSAK
ICB9Cn0KIAogCnZvaWQgQUNFRGlzdHJpYnV0aW9uOjpwYXJ0aXRpb25Vc2VyRGVmKEdyaWRVbml0
TGlzdComIGdndWwsCgkJCQkgICAgICAgR3JpZFVuaXRMaXN0KiYgbGd1bCwKCQkJCSAgICAgICBj
b25zdCBpbnQgbnAsIAoJCQkJICAgICAgIGNvbnN0IGludCBtZSwgCgkJCQkgICAgICAgY29uc3Qg
aW50IG1pbncsIAoJCQkJICAgICAgIGNvbnN0IGludCBtYXh3LCAKCQkJCSAgICAgICBjb25zdCBp
bnQgbWlud2ssIAoJCQkJICAgICAgIGNvbnN0IHNob3J0KiBvbGFwKQp7CgogICAKICAoc3RhdGlj
X2Nhc3Q8dm9pZD4gICgoIGJveGVzICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJib3hlcyIgLCAi
QUNFRGlzdHJpYnV0aW9uLmNwcCIsIDkxMSwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsg
CiAgCiAgIAogIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggZ2d1bC0+bnVtYmVyKCkgPiAwICkgPyAw
IDoJKF9fYXNzZXJ0X2ZhaWwgKCJnZ3VsLT5udW1iZXIoKSA+IDAiICwgIkFDRURpc3RyaWJ1dGlv
bi5jcHAiLCA5MTQsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CiAgCiAgIAogIChzdGF0
aWNfY2FzdDx2b2lkPiAgKCggbnAgPiAwICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJucCA+IDAi
ICwgIkFDRURpc3RyaWJ1dGlvbi5jcHAiLCA5MTcsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkp
KSA7CgogIAogIGNvbnN0IGludCBmbGV2ID0gKGdndWwtPmZpcnN0KCkpLT5ndUZpbmVMZXYoKTsK
ICBCQm94TGlzdCB0bXBiYmw7CiAgZ2d1bC0+YmJveGxpc3QodG1wYmJsLCBmbGV2LCAwLCAwKTsK
ICBCQm94IHdiYm94ID0gdG1wYmJsLnJlZHVjZSgpOwogIHBhcnRpdGlvbl9hbGwod2Jib3gsIGJv
eGVzLCBucCk7CiAgCiAgR3JpZFVuaXRMaXN0IHRtcGd1bDsKICBmb3IgKHJlZ2lzdGVyIGludCBw
PTA7cDxucDtwKyspIHsKICAgIGdndWwtPmludGVyc2VjdChib3hlc1twXSwgZmxldiwgdG1wZ3Vs
LCAwKTsKICAgIEdyaWRVbml0TGlzdCB0bXBndWwoKmdndWwpOwogICAgdG1wZ3VsICo9IGJveGVz
W3BdOwogICAgZ2d1bC0+c2V0b3duZXIodG1wZ3VsLHApOwogICAgaWYgKHAgPT0gbWUpIHsKICAg
ICAgaWYgKGxndWwpIHsKCWxndWwtPmVtcHR5KCk7CgkqbGd1bCA9IHRtcGd1bDsKICAgICAgfQog
ICAgICBlbHNlIHsKCWxndWwgPSBuZXcgR3JpZFVuaXRMaXN0KHRtcGd1bCk7CiAgICAgIH0KICAg
ICAgbGd1bC0+c2V0b3duZXIobWUpOwogICAgfSAKICB9Cn0KIAogCiAKCgoKCgoKCgoKCnZvaWQg
cGFydGl0aW9uX29uZShjb25zdCBCQm94JiB3aG9sZWJib3gsIAoJCSAgIEJCb3gqIGJveGVzLCAK
CQkgICBjb25zdCBpbnQgbnAsIAogICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGRpbSkKewog
ICAKICAgCiAgIAogICAKICBjb25zdCBpbnQgZXh0ZW50ID0gd2hvbGViYm94LmV4dGVudHMoZGlt
KTsKICAKCiAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBleHRlbnQgPj0gbnAgKSA/IDAgOgkoX19h
c3NlcnRfZmFpbCAoImV4dGVudCA+PSBucCIgLCAiQUNFRGlzdHJpYnV0aW9uLmNwcCIsIDk2OSwg
X19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsgIAoKICAKICBjb25zdCBpbnQgZHggPSBleHRl
bnQvbnA7CiAgY29uc3QgaW50IFh0cmEgPSBleHRlbnQlbnA7CiAgCiAgZm9yIChyZWdpc3RlciBp
bnQgcD0wO3A8bnA7cCsrKSB7CiAgICBjb25zdCBpbnQgZGxvd2VyID0gcCpkeCArIG1pbihYdHJh
LHApOwogICAgY29uc3QgaW50IGR1cHBlciA9IChucC1wLTEpKmR4ICsgbWF4KChYdHJhLXAtMSks
MCk7CiAgICBib3hlc1twXSA9IHdob2xlYmJveDsKICAgIGJveGVzW3BdLmdyb3dsb3dlcihkaW0s
ZGxvd2VyKTsKICAgIGJveGVzW3BdLmdyb3d1cHBlcihkaW0sLWR1cHBlcik7CiAgfQp9CgogCnZv
aWQgcGFydGl0aW9uX3R3byhjb25zdCBCQm94JiB3aG9sZWJib3gsIAoJCSAgIEJCb3gqIGJveGVz
LCAKCQkgICBjb25zdCBpbnQgbnAsIAogICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGRpbTEs
IAoJCSAgIGNvbnN0IGludCBkaW0yKQp7CiAgIAogIGludCBuMSxuMjsKICAKICAgCiAgbjEgPSBu
cDsKICBuMiA9IDE7CiAgaWYgKG4xICUgMiA9PSAwKSB7CiAgICB3aGlsZSAobjEgJSAyID09IDAg
JiYgbjEgPiBuMgoJICAgJiYgKGFicyhuMS1uMikgPj0gYWJzKG4xLzItbjIqMikpKSB7CiAgICAg
IG4xIC89IDI7CiAgICAgIG4yICo9IDI7CiAgICB9CiAgfSBlbHNlIHsKICAgIHdoaWxlIChuMSAl
IDMgPT0gMCAmJiBuMSA+IG4yCgkgICAmJiAoYWJzKG4xLW4yKSA+PSBhYnMobjEvMy1uMiozKSkp
IHsKICAgICAgbjEgLz0gMzsKICAgICAgbjIgKj0gMzsKICAgIH0KICB9CiAgCiAgY29uc3QgaW50
IHJhbmsgPSB3aG9sZWJib3gucmFuazsKICBjb25zdCBDb29yZHMmIGdsYiA9IHdob2xlYmJveC5s
b3dlcigpOwogICAKICBjb25zdCBDb29yZHMmIHN0ZXAgPSB3aG9sZWJib3guc3RlcHNpemUoKTsK
ICBjb25zdCBDb29yZHMmIGV4dCA9IHdob2xlYmJveC5leHRlbnRzKCk7CiAgCiAgQ29vcmRzIHRt
cGUoZXh0KTsKICBjb25zdCBpbnQgbGQxID0gKHRtcGUoZGltMSkgPj0gdG1wZShkaW0yKSkgPyBk
aW0xIDogZGltMjsgCiAgY29uc3QgaW50IGxkMiA9ICh0bXBlKGRpbTEpIDwgdG1wZShkaW0yKSkg
PyBkaW0xIDogZGltMjsKICAKICBDb29yZHMgdG1wcChyYW5rLDApOwogIHRtcHAoZGltMSkgPSBu
MTsgdG1wcChkaW0yKSA9IG4yOwogIGNvbnN0IGludCBubjEgPSAodG1wcChkaW0xKSA+PSB0bXBw
KGRpbTIpKSA/IGRpbTEgOiBkaW0yOyAKICBjb25zdCBpbnQgbm4yID0gKHRtcHAoZGltMSkgPCB0
bXBwKGRpbTIpKSA/IGRpbTEgOiBkaW0yOwogIAogIHRtcGUobGQxKSA9IHRtcHAobm4xKTsKICB0
bXBlKGxkMikgPSB0bXBwKG5uMik7CiAgCiAgbjEgPSB0bXBlKGRpbTEpOwogIG4yID0gdG1wZShk
aW0yKTsKICAKICAgCiAgQ29vcmRzIGRlbHQocmFuaywwKTsgCiAgZGVsdChkaW0xKSA9IChleHQo
ZGltMSkvbjEpOwogIGRlbHQoZGltMikgPSAoZXh0KGRpbTIpL24yKTsKICAgCgogIAogICAKICBD
b29yZHMgY29yKHJhbmssMCk7CiAgY29yKGRpbTEpID0gZXh0KGRpbTEpJW4xOwogIGNvcihkaW0y
KSA9IGV4dChkaW0yKSVuMjsKICAgCgogIAogICAKICBmb3IgKHJlZ2lzdGVyIGludCBwPTA7cDxu
cDtwKyspIGJveGVzW3BdID0gd2hvbGViYm94OwogIAogIGZvciAocmVnaXN0ZXIgaW50IGlpPTA7
aWk8bjE7aWkrKykgewogICAgZm9yIChyZWdpc3RlciBpbnQgamo9MDtqajxuMjtqaisrKSB7CiAg
ICAgICAKICAgICAgaW50IHdoaWNocCA9IGlpICsgamoqbjE7CiAgICAgIAogICAgICBDb29yZHMg
YzEocmFuaywwKSwgYzIgKHJhbmssMCk7CiAgICAgIAogICAgICBjMShkaW0xKSA9IChjb3IoZGlt
MSkgPiBpaSkgPyAxIDogMDsKICAgICAgYzEoZGltMikgPSAoY29yKGRpbTIpID4gamopID8gMSA6
IDA7CiAgICAgIAogICAgICAgCgogICAgICAKICAgICAgYzIoZGltMSkgPSBtaW4oY29yKGRpbTEp
LGlpKTsKICAgICAgYzIoZGltMikgPSBtaW4oY29yKGRpbTIpLGpqKTsKICAgICAgCiAgICAgIENv
b3JkcyYgbGIgPSBib3hlc1t3aGljaHBdLmxvd2VyKCk7CiAgICAgIENvb3JkcyYgdWIgPSBib3hl
c1t3aGljaHBdLnVwcGVyKCk7CiAgICAgIAogICAgICBsYihkaW0xKSA9IGdsYihkaW0xKSArIChp
aSAqIChkZWx0KGRpbTEpKSArIGMyKGRpbTEpKSpzdGVwKGRpbTEpOwogICAgICBsYihkaW0yKSA9
IGdsYihkaW0yKSArIChqaiAqIChkZWx0KGRpbTIpKSArIGMyKGRpbTIpKSpzdGVwKGRpbTIpOwog
ICAgICAKICAgICAgdWIoZGltMSkgPSBsYihkaW0xKSArIChkZWx0KGRpbTEpICsgYzEoZGltMSkg
LSAxKSpzdGVwKGRpbTEpOwogICAgICB1YihkaW0yKSA9IGxiKGRpbTIpICsgKGRlbHQoZGltMikg
KyBjMShkaW0yKSAtIDEpKnN0ZXAoZGltMik7CiAgICB9CiAgfQp9CgogCnZvaWQgcGFydGl0aW9u
X2FsbChjb25zdCBCQm94JiB3aG9sZWJib3gsIAoJCSAgIEJCb3gqIGJveGVzLCAKCQkgICBjb25z
dCBpbnQgbnApCnsKICAgCiAgaW50IG4xLG4yLG4zOwogIAogICAKICBuMSA9IG5wOwogIG4yID0g
MTsKICBuMyA9IDE7CiAgZm9yIChyZWdpc3RlciBpbnQgaT0wO2k8MjtpKyspIHsKICAgIGludCB0
d29mID0gMDsKICAgIGlmIChuMSAlIDIgPT0gMCkgdHdvZiA9IDE7CiAgICBpZiAodHdvZikgewog
ICAgICB3aGlsZSAobjEgJSAyID09IDAgJiYgbjEgPiBuMgoJICAgICAmJiAoYWJzKG4xLW4yKSA+
PSBhYnMobjEvMi1uMioyKSkpIHsKCW4xIC89IDI7CgluMiAqPSAyOwogICAgICB9CiAgICB9IGVs
c2UgewogICAgICB3aGlsZSAobjEgJSAzID09IDAgJiYgbjEgPiBuMgoJICAgICAmJiAoYWJzKG4x
LW4yKSA+PSBhYnMobjEvMy1uMiozKSkpIHsKCW4xIC89IDM7CgluMiAqPSAzOwogICAgICB9CiAg
ICB9CiAgICB0d29mID0gMDsKICAgIGlmIChuMiAlIDIgPT0gMCkgdHdvZiA9IDE7CiAgICBpZiAo
dHdvZikgewogICAgICB3aGlsZSAobjIgJSAyID09IDAgJiYgbjIgPiBuMwoJICAgICAmJiAoYWJz
KG4yLW4zKSA+PSBhYnMobjIvMi1uMyoyKSkpIHsKCW4yIC89IDI7CgluMyAqPSAyOwogICAgICB9
CiAgICB9IGVsc2UgewogICAgICB3aGlsZSAobjIgJSAzID09IDAgJiYgbjIgPiBuMwoJICAgICAm
JiAoYWJzKG4yLW4zKSA+PSBhYnMobjIvMy1uMyozKSkpIHsKCW4yIC89IDM7CgluMyAqPSAzOwog
ICAgICB9CiAgICB9CiAgfQogICAgCiAgCiAgY29uc3QgaW50IHJhbmsgPSB3aG9sZWJib3gucmFu
azsKICBjb25zdCBDb29yZHMmIGdsYiA9IHdob2xlYmJveC5sb3dlcigpOwogICAKICBjb25zdCBD
b29yZHMmIHN0ZXAgPSB3aG9sZWJib3guc3RlcHNpemUoKTsKICBjb25zdCBDb29yZHMmIGV4dCA9
IHdob2xlYmJveC5leHRlbnRzKCk7CiAgCiAgQ29vcmRzIHRtcGUoZXh0KTsKICBjb25zdCBpbnQg
bGQxID0gKHRtcGUoMCkgPiB0bXBlKDEpKSA/IAogICAgKCh0bXBlKDApID4gdG1wZSgyKSkgPyAw
IDogMikgOiAKICAgICgodG1wZSgxKSA+IHRtcGUoMikgPyAxIDogMikpOwogIHRtcGUobGQxKSA9
IDA7IAogIGNvbnN0IGludCBsZDIgPSAodG1wZSgwKSA+IHRtcGUoMSkpID8gCiAgICAoKHRtcGUo
MCkgPiB0bXBlKDIpKSA/IDAgOiAyKSA6IAogICAgKCh0bXBlKDEpID4gdG1wZSgyKSA/IDEgOiAy
KSk7CiAgdG1wZShsZDIpID0gMDsgCiAgY29uc3QgaW50IGxkMyA9ICh0bXBlKDApID4gdG1wZSgx
KSkgPyAKICAgICgodG1wZSgwKSA+IHRtcGUoMikpID8gMCA6IDIpIDogCiAgICAoKHRtcGUoMSkg
PiB0bXBlKDIpID8gMSA6IDIpKTsKICAKICBDb29yZHMgdG1wcChyYW5rLDApOwogIHRtcHAoMCkg
PSBuMTsgdG1wcCgxKSA9IG4yOyB0bXBwKDIpID0gbjM7ICAgIAogIGNvbnN0IGludCBubjEgPSAo
dG1wcCgwKSA+IHRtcHAoMSkpID8gCiAgICAoKHRtcHAoMCkgPiB0bXBwKDIpKSA/IDAgOiAyKSA6
IAogICAgKCh0bXBwKDEpID4gdG1wcCgyKSA/IDEgOiAyKSk7CiAgdG1wcChubjEpID0gMDsgCiAg
Y29uc3QgaW50IG5uMiA9ICh0bXBwKDApID4gdG1wcCgxKSkgPyAKICAgICgodG1wcCgwKSA+IHRt
cHAoMikpID8gMCA6IDIpIDogCiAgICAoKHRtcHAoMSkgPiB0bXBwKDIpID8gMSA6IDIpKTsKICB0
bXBwKG5uMikgPSAwOyAKICBjb25zdCBpbnQgbm4zID0gKHRtcHAoMCkgPiB0bXBwKDEpKSA/IAog
ICAgKCh0bXBwKDApID4gdG1wcCgyKSkgPyAwIDogMikgOiAKICAgICgodG1wcCgxKSA+IHRtcHAo
MikgPyAxIDogMikpOwogIAogIHRtcHAoMCkgPSBuMTsgdG1wcCgxKSA9IG4yOyB0bXBwKDIpID0g
bjM7ICAgIAogIHRtcGUobGQxKSA9IHRtcHAobm4xKTsKICB0bXBlKGxkMikgPSB0bXBwKG5uMik7
CiAgdG1wZShsZDMpID0gdG1wcChubjMpOwogIAogIG4xID0gdG1wZSgwKTsKICBuMiA9IHRtcGUo
MSk7CiAgbjMgPSB0bXBlKDIpOwogIAogICAKICBDb29yZHMgZGVsdChyYW5rLDApOwogIGRlbHQo
MCkgPSAoZXh0KDApL24xKTsKICBkZWx0KDEpID0gKGV4dCgxKS9uMik7CiAgZGVsdCgyKSA9IChl
eHQoMikvbjMpOwogICAKCgogIAogICAKICBDb29yZHMgY29yKHJhbmssMCk7CiAgY29yKDApID0g
IChleHQoMCklbjEpOwogIGNvcigxKSA9ICAoZXh0KDEpJW4yKTsKICBjb3IoMikgPSAgKGV4dCgy
KSVuMyk7CiAgIAoKCiAgCgoKCgoKCiAgCiAgIAogIGZvciAocmVnaXN0ZXIgaW50IHA9MDtwPG5w
O3ArKykgYm94ZXNbcF0gPSB3aG9sZWJib3g7CiAgCiAgZm9yIChyZWdpc3RlciBpbnQgaWk9MDtp
aTxuMTtpaSsrKSB7CiAgICBmb3IgKHJlZ2lzdGVyIGludCBqaj0wO2pqPG4yO2pqKyspIHsKICAg
ICAgZm9yIChyZWdpc3RlciBpbnQga2s9MDtrazxuMztraysrKSB7CgkgCglpbnQgd2hpY2hwID0g
aWkgKyBqaipuMSArIGtrKm4xKm4yOwoJCgoKCgoKCgkKCUNvb3JkcyBjMShyYW5rLDApLCBjMiAo
cmFuaywwKTsKCQoJYzEoMCkgPSAoY29yKDApID4gaWkpID8gMSA6IDA7CgljMSgxKSA9IChjb3Io
MSkgPiBqaikgPyAxIDogMDsKCWMxKDIpID0gKGNvcigyKSA+IGtrKSA/IDEgOiAwOwoJCgkgCgoK
CQoJYzIoMCkgPSBtaW4oY29yKDApLGlpKTsKCWMyKDEpID0gbWluKGNvcigxKSxqaik7CgljMigy
KSA9IG1pbihjb3IoMiksa2spOwoJCglDb29yZHMmIGxiID0gYm94ZXNbd2hpY2hwXS5sb3dlcigp
OwoJQ29vcmRzJiB1YiA9IGJveGVzW3doaWNocF0udXBwZXIoKTsKCQoJbGIoMCkgPSBnbGIoMCkg
KyAoaWkgKiAoZGVsdCgwKSkgKyBjMigwKSkqc3RlcCgwKTsKCWxiKDEpID0gZ2xiKDEpICsgKGpq
ICogKGRlbHQoMSkpICsgYzIoMSkpKnN0ZXAoMSk7CglsYigyKSA9IGdsYigyKSArIChrayAqIChk
ZWx0KDIpKSArIGMyKDIpKSpzdGVwKDIpOwoJCgl1YigwKSA9IGxiKDApICsgKGRlbHQoMCkgKyBj
MSgwKSAtIDEpKnN0ZXAoMCk7Cgl1YigxKSA9IGxiKDEpICsgKGRlbHQoMSkgKyBjMSgxKSAtIDEp
KnN0ZXAoMSk7Cgl1YigyKSA9IGxiKDIpICsgKGRlbHQoMikgKyBjMSgyKSAtIDEpKnN0ZXAoMik7
CgkKCgoKCgkKICAgICAgfQogICAgfQogIH0KfQoKdm9pZCBwd2Fsa2VyX3BhcnRpdGlvbihjb25z
dCBCQm94JiB3aG9sZWJib3gsIAoJCSAgICAgICBCQm94KiBib3hlcywgCgkJICAgICAgIGNvbnN0
IGludCBucCkKewogIENvb3JkcyBnbGIod2hvbGViYm94Lmxvd2VyKCkpOwogIENvb3JkcyBndWIo
d2hvbGViYm94LnVwcGVyKCkpOwogICAKICBpbnQgbngsbnksbno7CiAgCiAgIAogIG54ID0gbnA7
CiAgbnkgPSAxOwogIG56ID0gMTsKICBmb3IgKGludCBpPTA7aTwyO2krKykgewogICAgaW50IHR3
b2YgPSAwOwogICAgaWYgKG54ICUgMiA9PSAwKSB0d29mID0gMTsKICAgIGlmICh0d29mKSB7CiAg
ICAgIHdoaWxlIChueCAlIDIgPT0gMCAmJiBueCA+IG55CgkgICAgICYmIChhYnMobngtbnkpID49
IGFicyhueC8yLW55KjIpKSkgewoJbnggLz0gMjsKCW55ICo9IDI7CiAgICAgIH0KICAgIH0gZWxz
ZSB7CiAgICAgIHdoaWxlIChueCAlIDMgPT0gMCAmJiBueCA+IG55CgkgICAgICYmIChhYnMobngt
bnkpID49IGFicyhueC8zLW55KjMpKSkgewoJbnggLz0gMzsKCW55ICo9IDM7CiAgICAgIH0KICAg
IH0KICAgIHR3b2YgPSAwOwogICAgaWYgKG55ICUgMiA9PSAwKSB0d29mID0gMTsKICAgIGlmICh0
d29mKSB7CiAgICAgIHdoaWxlIChueSAlIDIgPT0gMCAmJiBueSA+IG56CgkgICAgICYmIChhYnMo
bnktbnopID49IGFicyhueS8yLW56KjIpKSkgewoJbnkgLz0gMjsKCW56ICo9IDI7CiAgICAgIH0K
ICAgIH0gZWxzZSB7CiAgICAgIHdoaWxlIChueSAlIDMgPT0gMCAmJiBueSA+IG56CgkgICAgICYm
IChhYnMobnktbnopID49IGFicyhueS8zLW56KjMpKSkgewoJbnkgLz0gMzsKCW56ICo9IDM7CiAg
ICAgIH0KICAgIH0KICB9CiAgICAKICAKICAgCiAgQkJveCBtdCgzLDApOwogIGZvciAoaW50IHA9
MDtwPG5wO3ArKykgYm94ZXNbcF0gPSBtdDsKICAKICBpbnQgaWksamosa2s7CiAgaW50ICpkZWx0
ID0gbmV3IGludFszXSwgKmxheW91dCA9IG5ldyBpbnRbM107CiAgCiAgIAogIGxheW91dFswXSA9
IG54OyBsYXlvdXRbMV0gPSBueTsgbGF5b3V0WzJdID0gbno7CiAgZm9yIChpbnQgbW09MDttbTwz
O21tKyspIHsKICAgIGRlbHRbbW1dID0gIChndWIobW0pLWdsYihtbSkpL2xheW91dFttbV07CiAg
fQogIAogIENvb3JkcyBteWxiKDMsMCksbXl1YigzLDApOwogIGZvciAoaWk9MDtpaTxueDtpaSsr
KQogICAgZm9yIChqaj0wO2pqPG55O2pqKyspCiAgICAgIGZvciAoa2s9MDtrazxuejtraysrKSB7
CgkgCglpbnQgd2hpY2hwID0gaWkgKyBqaipueCArIGtrKm54Km55OwoJbXlsYigwKSA9IGRlbHRb
MF0qaWk7CglteWxiKDEpID0gZGVsdFsxXSpqajsKCW15bGIoMikgPSBkZWx0WzJdKmtrOwoJCglt
eXViKDApID0gCgkgIChpaSAhPSBueC0xID8gZGVsdFswXSooaWkrMSktMSA6IGd1YigwKSk7Cglt
eXViKDEpID0gCgkgIChqaiAhPSBueS0xID8gZGVsdFsxXSooamorMSktMSA6IGd1YigxKSk7Cglt
eXViKDIpID0gCgkgIChrayAhPSBuei0xID8gZGVsdFsyXSooa2srMSktMSA6IGd1YigyKSk7CgkK
CWJveGVzW3doaWNocF0uc2V0bG93ZXIobXlsYik7Cglib3hlc1t3aGljaHBdLnNldHVwcGVyKG15
dWIpOwoJYm94ZXNbd2hpY2hwXS5zZXRzdGVwc2l6ZSgwLDEpOwoJYm94ZXNbd2hpY2hwXS5zZXRz
dGVwc2l6ZSgxLDEpOwoJYm94ZXNbd2hpY2hwXS5zZXRzdGVwc2l6ZSgyLDEpOwogICAgICB9Cn0K


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

* Re: c++/5036: Internal compiler error in gcc-2.95.4.  gcc-3.0 gives syntax errors
@ 2001-12-08 12:36 rodrigc
  0 siblings, 0 replies; 3+ messages in thread
From: rodrigc @ 2001-12-08 12:36 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c++/5036; it has been noted by GNATS.

From: rodrigc@gcc.gnu.org
To: gcc-bugs@gcc.gnu.org, gcc-gnats@gcc.gnu.org, gcc-prs@gcc.gnu.org,
  nobody@gcc.gnu.org, shawley@aei.mpg.de
Cc:  
Subject: Re: c++/5036: Internal compiler error in gcc-2.95.4.  gcc-3.0 gives syntax errors
Date: 8 Dec 2001 20:29:58 -0000

 Synopsis: Internal compiler error in gcc-2.95.4.  gcc-3.0 gives syntax errors
 
 State-Changed-From-To: open->closed
 State-Changed-By: rodrigc
 State-Changed-When: Sat Dec  8 12:29:57 2001
 State-Changed-Why:
     Your example makes use
     of some specific implementation
     details of the iostream library
     in gcc 2.95.2.  These will not work in gcc 3.0, which
     has an ISO C++ compliant iostream library.
     
     g++ 3.0 does not make any provision for being backwards
     compatible with code that is dependent on bugs or
     specific implementation details of earlier g++ compilers.
 
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&pr=5036&database=gcc


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

* Re: c++/5036: Internal compiler error in gcc-2.95.4.  gcc-3.0 gives syntax errors
@ 2001-12-08 12:29 rodrigc
  0 siblings, 0 replies; 3+ messages in thread
From: rodrigc @ 2001-12-08 12:29 UTC (permalink / raw)
  To: gcc-bugs, gcc-gnats, gcc-prs, nobody, shawley

Synopsis: Internal compiler error in gcc-2.95.4.  gcc-3.0 gives syntax errors

State-Changed-From-To: open->closed
State-Changed-By: rodrigc
State-Changed-When: Sat Dec  8 12:29:57 2001
State-Changed-Why:
    Your example makes use
    of some specific implementation
    details of the iostream library
    in gcc 2.95.2.  These will not work in gcc 3.0, which
    has an ISO C++ compliant iostream library.
    
    g++ 3.0 does not make any provision for being backwards
    compatible with code that is dependent on bugs or
    specific implementation details of earlier g++ compilers.

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&pr=5036&database=gcc


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

end of thread, other threads:[~2001-12-08 20:36 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-12-06  9:16 c++/5036: Internal compiler error in gcc-2.95.4. gcc-3.0 gives syntax errors shawley
2001-12-08 12:29 rodrigc
2001-12-08 12:36 rodrigc

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