public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* optimization/7391: generation of duplicate labels causes assembler to fail
@ 2002-07-24  8:56 barto
  0 siblings, 0 replies; only message in thread
From: barto @ 2002-07-24  8:56 UTC (permalink / raw)
  To: gcc-gnats


>Number:         7391
>Category:       optimization
>Synopsis:       generation of duplicate labels causes assembler to fail
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Jul 24 08:56:01 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     David Barto, barto@visionpro.com
>Release:        gcc-3.1/Solari s8
>Organization:
>Environment:
Reading specs from /opt/mvplocal/gcc-31/lib/gcc-lib/sparc-sun-solaris2/3.1/specs
Configured with: ./../../src/gcc-3.1/configure --srcdir=./../../src/gcc-3.1 --host=sparc-sun-solaris2 --target=sparc-sun-solaris2 --build=sparc-sun-solaris2 --prefix=/opt/mvplocal/gcc-31 --exec_prefix=/opt/mvplocal/gcc-31 --program-prefix= --with-minimal-bfd --with-gnu-ld --with-ld=/opt/mvplocal/gcc-31/bin/ld --with-gnu-as --with-as=/opt/mvplocal/gcc-31/bin/as --program-suffix=3.1 --with-gdb --enable-shared --enable-static --enable-threads --enable-threads=posix --enable-languages=c,c++,java --disable-nls : (reconfigured) ./../../src/gcc-3.1/configure --srcdir=./../../src/gcc-3.1 --host=sparc-sun-solaris2 --target=sparc-sun-solaris2 --build=sparc-sun-solaris2 --prefix=/opt/mvplocal/gcc-31 --exec_prefix=/opt/mvplocal/gcc-31 --program-prefix= --with-minimal-bfd --with-gnu-ld --with-ld=/opt/mvplocal/gcc-31/bin/ld --with-gnu-as --with-as=/opt/mvplocal/gcc-31/bin/as --program-suffix=3.1 --with-gdb --with-stabs --enable-shared --enable-static --enable-threads --enable-threads=posix --enable-languages=c,c++,java --disable-nls
Thread model: posix
gcc version 3.1
>Description:
Compile file using:
/opt/mvplocal/bin/g++ -c -O2 -funroll-loops -mcpu=v8 -mtune=ultrasparc -DSVR4 -D_POSIX_C_SOURCE=199506L -DTHREAD -D_REENTRANT -D__EXTENSIONS__ -I/usr/dt/include -I/usr/openwin/include -DUNIXHOST -D_PTHREADS   -pipe -D_G_NO_EXTERN_TEMPLATES  -ansi -pedantic -Wimplicit -Wconversion -Wsign-compare -Wno-long-long -Wreorder -Woverloaded-virtual -Wsign-promo -DNEWRESULTS -DIN_IS_LIBRARY -DDPC_DEBUG   -I../.././include -I../.././include/libinc -I../.././include/localinc -I. -DXMSTRINGDEFINES  save_snap.c -o save_snap.o

generates duplicate labels to the assembler:
{standard input}: Assembler messages:
{standard input}:2679: Error: symbol `.LLEHB4751' is already defined
{standard input}:2680: Error: symbol `.LLEHE4751' is already defined
{standard input}:2681: Error: symbol `.LLEHB4759' is already defined
{standard input}:2682: Error: symbol `.LLEHE4759' is already defined
{standard input}:2716: Error: symbol `.LLEHB4751' is already defined
{standard input}:2719: Error: symbol `.LLEHE4751' is already defined
{standard input}:2720: Error: symbol `.LLEHB4759' is already defined
{standard input}:2724: Error: symbol `.LLEHE4759' is already defined
>How-To-Repeat:
Attempt to compile file as specified.
Duplicate labels occur.
Doesn't happen if -fPIC is specified.
>Fix:

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

IyAxICJzYXZlX3NuYXAuYyIKc3RhdGljIGNoYXIgKnNhdmVfc25hcF9pZCA9ICIkSWQ6IHNhdmVf
c25hcC5jLHYgMS4yIDIwMDIvMDEvMjUgMjE6MTc6NTYgYmFydG8gRXhwICQgKGMpIE1WUCI7Cgoj
IDEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAxIDMgNAogCiAKCiAKIAogCgogCgoKCgogCgoKCgoK
CiNwcmFnbWEgaWRlbnQJIkAoIylzdGRpby5oCTEuNzgJOTkvMTIvMDggU01JIgkKCiMgMSAiL3Vz
ci9pbmNsdWRlL2lzby9zdGRpb19pc28uaCIgMSAzIDQKIAogCgogCiAKIAoKIAoKCgoKIAoKCgoK
CgoKCgoKCiAKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXN0ZGlvX2lzby5oCTEuMgk5OS8xMC8y
NSBTTUkiCiAKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0CiAK
CgoKCiAKIAogCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpZmVhdHVyZV90ZXN0cy5oCTEuMTgJOTkv
MDcvMjYgU01JIgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDEgMyA0CiAKCgoK
CgoKCiNwcmFnbWEgaWRlbnQJIkAoIylpc2FfZGVmcy5oCTEuMjAJOTkvMDUvMDQgU01JIgoKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCgogCgoKCgoKIyAy
NjcgIi91c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMuaCIgMyA0CgoKIAoKCgoKCgogCgoKCgoKCiAK
CgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIAoKCgoKCiAKCgoKCgoKCiAKCgoK
CgoKCgogCgoKCiMgMzY2ICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDMgNAoKCiAKCgoK
CgoKCgoKCgp9CgoKCiMgMTUgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAyIDMg
NAoKCgpleHRlcm4gIkMiIHsKCgogCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK
CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgogCgoKCgoKCn0KCgoKIyAzNSAiL3Vzci9pbmNsdWRlL2lzby9zdGRpb19pc28uaCIg
MiAzIDQKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy92YV9saXN0LmgiIDEgMyA0CiAKCgoKCgoKCiNw
cmFnbWEgaWRlbnQJIkAoIyl2YV9saXN0LmgJMS4xMgk5OS8wNS8wNCBTTUkiCgogCgoKCgoKCgoK
CgpleHRlcm4gIkMiIHsKCgoKdHlwZWRlZiB2b2lkICpfX3ZhX2xpc3Q7CgoKCgoKfQoKCgojIDM2
ICIvdXNyL2luY2x1ZGUvaXNvL3N0ZGlvX2lzby5oIiAyIDMgNAoKIyAxICIvdXNyL2luY2x1ZGUv
c3RkaW9fdGFnLmgiIDEgMyA0CiAKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylzdGRpb190YWcu
aAkxLjMJOTgvMDQvMjAgU01JIgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCnR5cGVkZWYgc3RydWN0
IEZJTEUgIF9fRklMRTsKCgoKfQoKCgojIDM3ICIvdXNyL2luY2x1ZGUvaXNvL3N0ZGlvX2lzby5o
IiAyIDMgNAoKIyAxICIvdXNyL2luY2x1ZGUvc3RkaW9faW1wbC5oIiAxIDMgNAogCgoKCgoKCgoj
cHJhZ21hIGlkZW50CSJAKCMpc3RkaW9faW1wbC5oCTEuOAk5OS8wNi8xMCBTTUkiCgoKCgpleHRl
cm4gIkMiIHsKCgoKCgoKCnR5cGVkZWYgaW50CXNzaXplX3Q7CQkgCgoKCiMgMzYgIi91c3IvaW5j
bHVkZS9zdGRpb19pbXBsLmgiIDMgNAoKCnN0cnVjdCBGSUxFIAkgCnsKCgoKCglzc2l6ZV90CQlf
Y250OwkgCgl1bnNpZ25lZCBjaGFyCSpfcHRyOwkgCgoJdW5zaWduZWQgY2hhcgkqX2Jhc2U7CSAK
CXVuc2lnbmVkIGNoYXIJX2ZsYWc7CSAKCXVuc2lnbmVkIGNoYXIJX2ZpbGU7CSAKCXVuc2lnbmVk
CV9fb3JpZW50YXRpb246MjsgIAoJdW5zaWduZWQJX19pb25vbG9jazoxOwkgCgl1bnNpZ25lZAlf
X2ZpbGxlcjo1Owp9OwoKCgoKfQoKCgojIDM4ICIvdXNyL2luY2x1ZGUvaXNvL3N0ZGlvX2lzby5o
IiAyIDMgNAoKCiAKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgoKIAoKCgoKCgoKIAp0eXBlZGVmIHVu
aW9uIHsKCWRvdWJsZQlfZDsKCWludAlfbFsyXTsKfSBfX2xvbmdsb25nX3Q7CgoKCgoKCgoKCnR5
cGVkZWYJX19GSUxFIEZJTEU7CgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGludAlzaXplX3Q7CQkg
CgoKCgp0eXBlZGVmIGxvbmcJCWZwb3NfdDsKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gX19GSUxFCV9faW9iWzIwIF07CgoK
CgoKCgoKCgoKCgoKCgpleHRlcm4gaW50CXJlbW92ZShjb25zdCBjaGFyICopOwpleHRlcm4gaW50
CXJlbmFtZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBGSUxFCSp0bXBmaWxl
KHZvaWQpOwpleHRlcm4gY2hhcgkqdG1wbmFtKGNoYXIgKik7CmV4dGVybiBpbnQJZmNsb3NlKEZJ
TEUgKik7CmV4dGVybiBpbnQJZmZsdXNoKEZJTEUgKik7CmV4dGVybiBGSUxFCSpmb3Blbihjb25z
dCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBGSUxFCSpmcmVvcGVuKGNvbnN0IGNoYXIg
KiwgY29uc3QgY2hhciAqLCBGSUxFICopOwpleHRlcm4gdm9pZAlzZXRidWYoRklMRSAqLCBjaGFy
ICopOwpleHRlcm4gaW50CXNldHZidWYoRklMRSAqLCBjaGFyICosIGludCwgc2l6ZV90KTsKIApl
eHRlcm4gaW50CWZwcmludGYoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLik7CiAKZXh0ZXJuIGlu
dAlmc2NhbmYoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLik7CiAKZXh0ZXJuIGludAlwcmludGYo
Y29uc3QgY2hhciAqLCAuLi4pOwogCmV4dGVybiBpbnQJc2NhbmYoY29uc3QgY2hhciAqLCAuLi4p
OwogCmV4dGVybiBpbnQJc3ByaW50ZihjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKIApleHRl
cm4gaW50CXNzY2FuZihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKZXh0ZXJuIGlu
dAl2ZnByaW50ZihGSUxFICosIGNvbnN0IGNoYXIgKiwgX192YV9saXN0KTsKZXh0ZXJuIGludAl2
cHJpbnRmKGNvbnN0IGNoYXIgKiwgX192YV9saXN0KTsKZXh0ZXJuIGludAl2c3ByaW50ZihjaGFy
ICosIGNvbnN0IGNoYXIgKiwgX192YV9saXN0KTsKZXh0ZXJuIGludAlmZ2V0YyhGSUxFICopOwpl
eHRlcm4gY2hhcgkqZmdldHMoY2hhciAqLCBpbnQsIEZJTEUgKik7CmV4dGVybiBpbnQJZnB1dGMo
aW50LCBGSUxFICopOwpleHRlcm4gaW50CWZwdXRzKGNvbnN0IGNoYXIgKiwgRklMRSAqKTsKCgpl
eHRlcm4gaW50CWdldGMoRklMRSAqKTsKZXh0ZXJuIGludAlwdXRjKGludCwgRklMRSAqKTsKCgoK
ZXh0ZXJuIGludAlnZXRjaGFyKHZvaWQpOwpleHRlcm4gaW50CXB1dGNoYXIoaW50KTsKCmV4dGVy
biBjaGFyCSpnZXRzKGNoYXIgKik7CmV4dGVybiBpbnQJcHV0cyhjb25zdCBjaGFyICopOwpleHRl
cm4gaW50CXVuZ2V0YyhpbnQsIEZJTEUgKik7CmV4dGVybiBzaXplX3QJZnJlYWQodm9pZCAqLCBz
aXplX3QsIHNpemVfdCwgRklMRSAqKTsKZXh0ZXJuIHNpemVfdAlmd3JpdGUoY29uc3Qgdm9pZCAq
LCBzaXplX3QsIHNpemVfdCwgRklMRSAqKTsKZXh0ZXJuIGludAlmZ2V0cG9zKEZJTEUgKiwgZnBv
c190ICopOwpleHRlcm4gaW50CWZzZWVrKEZJTEUgKiwgbG9uZywgaW50KTsKZXh0ZXJuIGludAlm
c2V0cG9zKEZJTEUgKiwgY29uc3QgZnBvc190ICopOwpleHRlcm4gbG9uZwlmdGVsbChGSUxFICop
OwpleHRlcm4gdm9pZAlyZXdpbmQoRklMRSAqKTsKCgpleHRlcm4gdm9pZAljbGVhcmVycihGSUxF
ICopOwpleHRlcm4gaW50CWZlb2YoRklMRSAqKTsKZXh0ZXJuIGludAlmZXJyb3IoRklMRSAqKTsK
CmV4dGVybiB2b2lkCXBlcnJvcihjb25zdCBjaGFyICopOwoKCmV4dGVybiBpbnQJX19maWxidWYo
RklMRSAqKTsKZXh0ZXJuIGludAlfX2Zsc2J1ZihpbnQsIEZJTEUgKik7CgoKIyAyNzUgIi91c3Iv
aW5jbHVkZS9pc28vc3RkaW9faXNvLmgiIDMgNAoKCgoKCgoKCiMgMzMxICIvdXNyL2luY2x1ZGUv
aXNvL3N0ZGlvX2lzby5oIiAzIDQKCgoKCgp9CgoKCiMgMjIgIi91c3IvaW5jbHVkZS9zdGRpby5o
IiAyIDMgNAoKCiAKCgoKCgoKCiAKCgoKIyA4MSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMgNAoK
CgpleHRlcm4gIkMiIHsKCgoKCgoKdHlwZWRlZiBsb25nCQlvZmZfdDsKCgoKCgoKCnR5cGVkZWYg
X19sb25nbG9uZ190CW9mZjY0X3Q7CgoKCgoKCgoKCnR5cGVkZWYgX19sb25nbG9uZ190CWZwb3M2
NF90OwoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIHVuc2lnbmVkIGNoYXIJIF9z
aWJ1ZltdLCBfc29idWZbXTsKCgogCiMgMTc2ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMyA0CgoK
CmV4dGVybiB1bnNpZ25lZCBjaGFyCSpfYnVmZW5kdGFiW107CmV4dGVybiBGSUxFCQkqX2xhc3Ri
dWY7CgoKIAojIDIwNiAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMgNAoKCgoKCmV4dGVybiBjaGFy
CSp0bXBuYW1fcihjaGFyICopOwoKCgpleHRlcm4gdm9pZCBzZXRidWZmZXIoRklMRSAqLCBjaGFy
ICosIHNpemVfdCk7CmV4dGVybiBpbnQgc2V0bGluZWJ1ZihGSUxFICopOwoKCgoKIApleHRlcm4g
aW50CXNucHJpbnRmKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIC4uLik7CgoKCgpleHRl
cm4gaW50CXZzbnByaW50ZihjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCBfX3ZhX2xpc3Qp
OwoKCiAKCgoKCgpleHRlcm4gRklMRQkqZmRvcGVuKGludCwgY29uc3QgY2hhciAqKTsKZXh0ZXJu
IGNoYXIJKmN0ZXJtaWQoY2hhciAqKTsKZXh0ZXJuIGludAlmaWxlbm8oRklMRSAqKTsKCgoKIAoK
CgoKZXh0ZXJuIHZvaWQJZmxvY2tmaWxlKEZJTEUgKik7CmV4dGVybiBpbnQJZnRyeWxvY2tmaWxl
KEZJTEUgKik7CmV4dGVybiB2b2lkCWZ1bmxvY2tmaWxlKEZJTEUgKik7CmV4dGVybiBpbnQJZ2V0
Y191bmxvY2tlZChGSUxFICopOwpleHRlcm4gaW50CWdldGNoYXJfdW5sb2NrZWQodm9pZCk7CmV4
dGVybiBpbnQJcHV0Y191bmxvY2tlZChpbnQsIEZJTEUgKik7CmV4dGVybiBpbnQJcHV0Y2hhcl91
bmxvY2tlZChpbnQpOwoKCgogCgoKCgpleHRlcm4gRklMRQkqcG9wZW4oY29uc3QgY2hhciAqLCBj
b25zdCBjaGFyICopOwpleHRlcm4gY2hhcgkqY3VzZXJpZChjaGFyICopOwpleHRlcm4gY2hhcgkq
dGVtcG5hbShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQJZ2V0b3B0KGlu
dCwgY2hhciAqY29uc3QgKiwgY29uc3QgY2hhciAqKTsKCmV4dGVybiBpbnQJZ2V0c3Vib3B0KGNo
YXIgKiosIGNoYXIgKmNvbnN0ICosIGNoYXIgKiopOwoKZXh0ZXJuIGNoYXIJKm9wdGFyZzsKZXh0
ZXJuIGludAlvcHRpbmQsIG9wdGVyciwgb3B0b3B0OwpleHRlcm4gaW50CWdldHcoRklMRSAqKTsK
ZXh0ZXJuIGludAlwdXR3KGludCwgRklMRSAqKTsKZXh0ZXJuIGludAlwY2xvc2UoRklMRSAqKTsK
CgoKIAoKCgpleHRlcm4gaW50CWZzZWVrbyhGSUxFICosIG9mZl90LCBpbnQpOwpleHRlcm4gb2Zm
X3QJZnRlbGxvKEZJTEUgKik7CgoKIAoKCgoKCmV4dGVybiBGSUxFCSpmb3BlbjY0KGNvbnN0IGNo
YXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIEZJTEUJKmZyZW9wZW42NChjb25zdCBjaGFyICos
IGNvbnN0IGNoYXIgKiwgRklMRSAqKTsKZXh0ZXJuIEZJTEUJKnRtcGZpbGU2NCh2b2lkKTsKZXh0
ZXJuIGludAlmZ2V0cG9zNjQoRklMRSAqLCBmcG9zNjRfdCAqKTsKZXh0ZXJuIGludAlmc2V0cG9z
NjQoRklMRSAqLCBjb25zdCBmcG9zNjRfdCAqKTsKZXh0ZXJuIGludAlmc2Vla282NChGSUxFICos
IG9mZjY0X3QsIGludCk7CmV4dGVybiBvZmY2NF90CWZ0ZWxsbzY0KEZJTEUgKik7CgoKIyAzNjYg
Ii91c3IvaW5jbHVkZS9zdGRpby5oIiAzIDQKCgoKCgoKCgoKCgoKCgoKIyAzODkgIi91c3IvaW5j
bHVkZS9zdGRpby5oIiAzIDQKCgoKCgoKCgoKfQoKCgojIDMgInNhdmVfc25hcC5jIiAyCgojIDEg
Ii91c3IvaW5jbHVkZS91bmlzdGQuaCIgMSAzIDQKIAogCgogCiAKIAoKIAoKCgoKCgoKI3ByYWdt
YSBpZGVudAkiQCgjKXVuaXN0ZC5oCTEuNTgJOTkvMTEvMTEgU01JIgkKCgoKIyAxICIvdXNyL2lu
Y2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0CiAKIAoKIAogCiAKCiAKCgoKCgoKCiNwcmFnbWEgaWRl
bnQJIkAoIyl0eXBlcy5oCTEuNjYJMDAvMDIvMTQgU01JIgoKCgoKIAoKCiMgMSAiL3Vzci9pbmNs
dWRlL3N5cy9tYWNodHlwZXMuaCIgMSAzIDQKIAoKCgoKIAogCgogCiAKIAoKCgoKI3ByYWdtYSBp
ZGVudAkiQCgjKW1hY2h0eXBlcy5oCTEuMTMJOTkvMDUvMDQgU01JIgoKCgoKZXh0ZXJuICJDIiB7
CgoKIAoKCgoKCgoKCnR5cGVkZWYJc3RydWN0CV9sYWJlbF90IHsgbG9uZyB2YWxbMl07IH0gbGFi
ZWxfdDsKCgoKdHlwZWRlZgl1bnNpZ25lZCBjaGFyCWxvY2tfdDsJCSAKCgp9CgoKCiMgMjQgIi91
c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQKCgogCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNs
dWRlL3N5cy9pbnRfdHlwZXMuaCIgMSAzIDQKIAoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKWlu
dF90eXBlcy5oCTEuNgk5Ny8wOC8yMCBTTUkiCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCmV4dGVybiAiQyIgewoKCiAKCgoKCgoKCgoKCgoKCnR5cGVkZWYgY2hhcgkJCWludDhf
dDsKCgoKCgp0eXBlZGVmIHNob3J0CQkJaW50MTZfdDsKdHlwZWRlZiBpbnQJCQlpbnQzMl90OwoK
CgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhcgkJdWludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBz
aG9ydAkJdWludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50CQl1aW50MzJfdDsKCgoKCgoKCgog
CgoKCgoKCgp0eXBlZGVmIGludDMyX3QJCQlpbnRtYXhfdDsKdHlwZWRlZiB1aW50MzJfdAkJdWlu
dG1heF90OwoKCiAKCgoKCgoKCgp0eXBlZGVmCWludAkJCWludHB0cl90Owp0eXBlZGVmCXVuc2ln
bmVkIGludAkJdWludHB0cl90OwoKCiAKCgoKCnR5cGVkZWYgY2hhcgkJCWludF9sZWFzdDhfdDsK
CgoKCgp0eXBlZGVmIHNob3J0CQkJaW50X2xlYXN0MTZfdDsKdHlwZWRlZiBpbnQJCQlpbnRfbGVh
c3QzMl90OwoKCgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhcgkJdWludF9sZWFzdDhfdDsKdHlw
ZWRlZiB1bnNpZ25lZCBzaG9ydAkJdWludF9sZWFzdDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50
CQl1aW50X2xlYXN0MzJfdDsKCgoKCgoKCgoKfQoKCgojIDM2ICIvdXNyL2luY2x1ZGUvc3lzL3R5
cGVzLmgiIDIgMyA0CgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoKIAoKCgoKCgoKCiAKdHlwZWRlZiB1
bmlvbiB7Cglkb3VibGUJX2Q7CglpbnQzMl90CV9sWzJdOwp9IGxvbmdsb25nX3Q7CnR5cGVkZWYg
dW5pb24gewoJZG91YmxlCQlfZDsKCXVpbnQzMl90CV9sWzJdOwp9IHVfbG9uZ2xvbmdfdDsKCgog
CgoKCgoKCgoKdHlwZWRlZiBsb25nCQl0X3NjYWxhcl90OwkgCnR5cGVkZWYgdW5zaWduZWQgbG9u
Zwl0X3VzY2FsYXJfdDsKCgogCgoKdHlwZWRlZgl1bnNpZ25lZCBjaGFyCXVjaGFyX3Q7CnR5cGVk
ZWYJdW5zaWduZWQgc2hvcnQJdXNob3J0X3Q7CnR5cGVkZWYJdW5zaWduZWQgaW50CXVpbnRfdDsK
dHlwZWRlZgl1bnNpZ25lZCBsb25nCXVsb25nX3Q7Cgp0eXBlZGVmCWNoYXIJCSpjYWRkcl90Owkg
CnR5cGVkZWYJbG9uZwkJZGFkZHJfdDsJIAp0eXBlZGVmCXNob3J0CQljbnRfdDsJCSAKCgp0eXBl
ZGVmCXVsb25nX3QJCXBhZGRyX3Q7CSAKCgoKCgoKCgoKdHlwZWRlZglpbnQJcHRyZGlmZl90OwkJ
IAoKCgogCgoKdHlwZWRlZgl1bG9uZ190CQlwZm5fdDsJCSAKdHlwZWRlZgl1bG9uZ190CQlwZ2Nu
dF90OwkgCnR5cGVkZWYJbG9uZwkJc3BnY250X3Q7CSAKCnR5cGVkZWYJdWNoYXJfdAkJdXNlX3Q7
CQkgCnR5cGVkZWYJc2hvcnQJCXN5c2lkX3Q7CnR5cGVkZWYJc2hvcnQJCWluZGV4X3Q7CnR5cGVk
ZWYgdm9pZAkJKnRpbWVvdXRfaWRfdDsJIAp0eXBlZGVmIHZvaWQJCSpidWZjYWxsX2lkX3Q7CSAK
CiAKCgoKCgoKCiMgMTQ1ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAoKCgp0eXBlZGVm
IHVsb25nX3QJCWlub190OwkJIAp0eXBlZGVmIGxvbmcJCWJsa2NudF90OwkgCnR5cGVkZWYgdWxv
bmdfdAkJZnNibGtjbnRfdDsJIAp0eXBlZGVmIHVsb25nX3QJCWZzZmlsY250X3Q7CSAKCgoKCgoK
CgoKCgoKCgp0eXBlZGVmIHVfbG9uZ2xvbmdfdAlpbm82NF90OwkgCnR5cGVkZWYgbG9uZ2xvbmdf
dAlibGtjbnQ2NF90OwkgCnR5cGVkZWYgdV9sb25nbG9uZ190CWZzYmxrY250NjRfdDsJIAp0eXBl
ZGVmIHVfbG9uZ2xvbmdfdAlmc2ZpbGNudDY0X3Q7CSAKCgoKCgoKdHlwZWRlZglsb25nCQlibGtz
aXplX3Q7CSAKCgoKdHlwZWRlZiBlbnVtIHsgX0JfRkFMU0UsIF9CX1RSVUUgfSBib29sZWFuX3Q7
CgoKCgogCgoKCgoKCgoKCgp0eXBlZGVmIHVuaW9uIHsKCWRvdWJsZSAgIF9kOwoJaW50MzJfdCAg
X2xbMl07Cn0gcGFkNjRfdDsKdHlwZWRlZiB1bmlvbiB7Cglkb3VibGUgICBfZDsKCXVpbnQzMl90
IF9sWzJdOwp9IHVwYWQ2NF90OwoKCnR5cGVkZWYJbG9uZ2xvbmdfdAlvZmZzZXRfdDsKdHlwZWRl
Zgl1X2xvbmdsb25nX3QJdV9vZmZzZXRfdDsKdHlwZWRlZiB1X2xvbmdsb25nX3QJbGVuX3Q7CnR5
cGVkZWYJbG9uZ2xvbmdfdAlkaXNrYWRkcl90OwoKIAoKCgoKIyAyMjQgIi91c3IvaW5jbHVkZS9z
eXMvdHlwZXMuaCIgMyA0CgoKCnR5cGVkZWYgdW5pb24gewoJb2Zmc2V0X3QJX2Y7CSAKCXN0cnVj
dCB7CgkJaW50MzJfdAlfdTsJIAoJCWludDMyX3QJX2w7CSAKCX0gX3A7Cn0gbGxvZmZfdDsKCgoj
IDI0NCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKCgoKdHlwZWRlZiB1bmlvbiB7Cglk
aXNrYWRkcl90CV9mOwkgCglzdHJ1Y3QgewoJCWludDMyX3QJX3U7CSAKCQlpbnQzMl90CV9sOwkg
Cgl9IF9wOwp9IGxsZGFkZHJfdDsKCgp0eXBlZGVmIHVpbnRfdCBrX2ZsdHNldF90OwkgCgogCgoK
CgoKCgoKCgoKdHlwZWRlZglsb25nCQlpZF90OwkJIAoKCiAKCgoKdHlwZWRlZiB1aW50X3QJCXVz
ZWNvbmRzX3Q7CSAKCgoKdHlwZWRlZiBsb25nCXN1c2Vjb25kc190OwkgCgoKIAoKCgoKCgp0eXBl
ZGVmIHVsb25nX3QJbWFqb3JfdDsJIAp0eXBlZGVmIHVsb25nX3QJbWlub3JfdDsJIAoKCiAKCgp0
eXBlZGVmIHNob3J0CXByaV90OwoKIAoKCgoKCgoKCgoKdHlwZWRlZgl1c2hvcnRfdCBvX21vZGVf
dDsJCSAKdHlwZWRlZiBzaG9ydAlvX2Rldl90OwkJIAp0eXBlZGVmCXVzaG9ydF90IG9fdWlkX3Q7
CQkgCnR5cGVkZWYJb191aWRfdAlvX2dpZF90OwkJIAp0eXBlZGVmCXNob3J0CW9fbmxpbmtfdDsJ
CSAKdHlwZWRlZiBzaG9ydAlvX3BpZF90OwkJIAp0eXBlZGVmIHVzaG9ydF90IG9faW5vX3Q7CQkg
CgoKIAoKCnR5cGVkZWYJaW50CWtleV90OwkJCSAKCgoKdHlwZWRlZgl1bG9uZ190CW1vZGVfdDsJ
CQkgCgoKCgoKCgp0eXBlZGVmCWxvbmcJdWlkX3Q7CQkJIAoKCgp0eXBlZGVmCXVpZF90CWdpZF90
OwkJCSAKCnR5cGVkZWYgaWRfdCAgICB0YXNraWRfdDsKdHlwZWRlZiBpZF90ICAgIHByb2ppZF90
OwoKIAoKCgoKdHlwZWRlZgl1bnNpZ25lZCBpbnQJcHRocmVhZF90OwkgCnR5cGVkZWYJdW5zaWdu
ZWQgaW50CXB0aHJlYWRfa2V5X3Q7CSAKCnR5cGVkZWYJc3RydWN0CV9wdGhyZWFkX211dGV4IHsJ
CSAKCXN0cnVjdCB7CgkJdWludDE2X3QJX19wdGhyZWFkX211dGV4X2ZsYWcxOwoJCXVpbnQ4X3QJ
CV9fcHRocmVhZF9tdXRleF9mbGFnMjsKCQl1aW50OF90CQlfX3B0aHJlYWRfbXV0ZXhfY2VpbGlu
ZzsKCQl1aW50MzJfdCAJX19wdGhyZWFkX211dGV4X3R5cGU7Cgl9IF9fcHRocmVhZF9tdXRleF9m
bGFnczsKCXVuaW9uIHsKCQlzdHJ1Y3QgewoJCQl1aW50OF90CV9fcHRocmVhZF9tdXRleF9wYWRb
OF07CgkJfSBfX3B0aHJlYWRfbXV0ZXhfbG9jazY0OwoJCXVwYWQ2NF90IF9fcHRocmVhZF9tdXRl
eF9vd25lcjY0OwoJfSBfX3B0aHJlYWRfbXV0ZXhfbG9jazsKCXVwYWQ2NF90IF9fcHRocmVhZF9t
dXRleF9kYXRhOwp9IHB0aHJlYWRfbXV0ZXhfdDsKCnR5cGVkZWYJc3RydWN0CV9wdGhyZWFkX2Nv
bmQgewkJIAoJc3RydWN0IHsKCQl1aW50OF90CQlfX3B0aHJlYWRfY29uZF9mbGFnWzRdOwoJCXVp
bnQzMl90IAlfX3B0aHJlYWRfY29uZF90eXBlOwoJfSBfX3B0aHJlYWRfY29uZF9mbGFnczsKCXVw
YWQ2NF90IF9fcHRocmVhZF9jb25kX2RhdGE7Cn0gcHRocmVhZF9jb25kX3Q7CgogCgoKdHlwZWRl
ZglzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrIHsJIAoJaW50MzJfdAkJX19wdGhyZWFkX3J3bG9ja19y
ZWFkZXJzOwoJdWludDE2X3QJX19wdGhyZWFkX3J3bG9ja190eXBlOwoJdWludDE2X3QJX19wdGhy
ZWFkX3J3bG9ja19tYWdpYzsKCXVwYWQ2NF90CV9fcHRocmVhZF9yd2xvY2tfcGFkMVszXTsKCXVw
YWQ2NF90CV9fcHRocmVhZF9yd2xvY2tfcGFkMlsyXTsKCXVwYWQ2NF90CV9fcHRocmVhZF9yd2xv
Y2tfcGFkM1syXTsKfSBwdGhyZWFkX3J3bG9ja190OwoKIAoKCnR5cGVkZWYgc3RydWN0IF9wdGhy
ZWFkX2F0dHIgewoJdm9pZAkqX19wdGhyZWFkX2F0dHJwOwp9IHB0aHJlYWRfYXR0cl90OwoKCiAK
Cgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9tdXRleGF0dHIgewoJdm9pZAkqX19wdGhyZWFkX211
dGV4YXR0cnA7Cn0gcHRocmVhZF9tdXRleGF0dHJfdDsKCgogCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0
aHJlYWRfY29uZGF0dHIgewoJdm9pZAkqX19wdGhyZWFkX2NvbmRhdHRycDsKfSBwdGhyZWFkX2Nv
bmRhdHRyX3Q7CgogCgoKdHlwZWRlZglzdHJ1Y3QJX29uY2UgewoJdXBhZDY0X3QJX19wdGhyZWFk
X29uY2VfcGFkWzRdOwp9IHB0aHJlYWRfb25jZV90OwoKIAoKCgp0eXBlZGVmIHN0cnVjdCBfcHRo
cmVhZF9yd2xvY2thdHRyIHsKCXZvaWQJKl9fcHRocmVhZF9yd2xvY2thdHRycDsKfSBwdGhyZWFk
X3J3bG9ja2F0dHJfdDsKCnR5cGVkZWYgdWxvbmdfdAlkZXZfdDsJCQkgCgoKCgoKdHlwZWRlZgl1
bG9uZ190CW5saW5rX3Q7CQkgCnR5cGVkZWYJbG9uZwlwaWRfdDsJCQkgCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgp0eXBlZGVmCWxvbmcJCXRpbWVfdDsJIAoKCgoKdHlwZWRlZglsb25nCQljbG9ja190
OyAgCgoKCgp0eXBlZGVmCWludAljbG9ja2lkX3Q7CSAKCgoKCnR5cGVkZWYJaW50CXRpbWVyX3Q7
CSAKCgoKCgogCnR5cGVkZWYJdW5zaWduZWQgY2hhcgl1bmNoYXI7CnR5cGVkZWYJdW5zaWduZWQg
c2hvcnQJdXNob3J0Owp0eXBlZGVmCXVuc2lnbmVkIGludAl1aW50Owp0eXBlZGVmCXVuc2lnbmVk
IGxvbmcJdWxvbmc7CiAKCiMgNTA2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAoKCgoK
IAoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCnR5cGVkZWYgdW5zaWduZWQgY2hhcgl1X2NoYXI7CnR5
cGVkZWYgdW5zaWduZWQgc2hvcnQJdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQJdV9pbnQ7
CnR5cGVkZWYgdW5zaWduZWQgbG9uZwl1X2xvbmc7CnR5cGVkZWYgc3RydWN0IF9xdWFkIHsgaW50
IHZhbFsyXTsgfSBxdWFkX3Q7CSAKdHlwZWRlZiBxdWFkX3QJCXF1YWQ7CQkJIAogCgogCgoKCiMg
MSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzIDQKIAogCiAKCiAKIAogCgoKCgojcHJh
Z21hIGlkZW50CSJAKCMpc2VsZWN0LmgJMS4xNgk5OC8wNC8yNyBTTUkiCQoKCgoKIyAxICIvdXNy
L2luY2x1ZGUvc3lzL3RpbWUuaCIgMSAzIDQKIAogCgogCiAKIAoKIAoKCgoKCiAKCgoKCgoKCiNw
cmFnbWEgaWRlbnQJIkAoIyl0aW1lLmgJMi42NQkwMC8wOC8yNCBTTUkiCQoKCgogCgoKCgoKZXh0
ZXJuICJDIiB7CgoKCgoKCgoKCgoKCgoKCgpzdHJ1Y3QgdGltZXZhbCB7Cgl0aW1lX3QJCXR2X3Nl
YzsJCSAKCXN1c2Vjb25kc190CXR2X3VzZWM7CSAKfTsKCiMgNzQgIi91c3IvaW5jbHVkZS9zeXMv
dGltZS5oIiAzIDQKCgoKCgoKCgpzdHJ1Y3QgdGltZXpvbmUgewoJaW50CXR6X21pbnV0ZXN3ZXN0
OwkgCglpbnQJdHpfZHN0dGltZTsJIAp9OwoKCgoKCn0KCgogCgoKCgoKIyAxICIvdXNyL2luY2x1
ZGUvc3lzL3R5cGVzLmgiIDEgMyA0CiAKIAoKIAogCiAKCiAKCgoKCiMgNTY0ICIvdXNyL2luY2x1
ZGUvc3lzL3R5cGVzLmgiIDMgNAoKIyAxMDAgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAyIDMg
NAoKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgog
CgoKCgoKCgkJCQkgCgkJCQkgCgoJCQkJIAoJCQkJIAoKCnN0cnVjdAlpdGltZXJ2YWwgewoJc3Ry
dWN0CXRpbWV2YWwgaXRfaW50ZXJ2YWw7CSAKCXN0cnVjdAl0aW1ldmFsIGl0X3ZhbHVlOwkgCn07
CgojIDE4MSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNAoKCgoKCgoKIAoKCgoKCgoKCgoK
CiAKCgp0eXBlZGVmCWxvbmdsb25nX3QJaHJ0aW1lX3Q7CgojIDMxMyAiL3Vzci9pbmNsdWRlL3N5
cy90aW1lLmgiIDMgNAoKCgoKCmludCBhZGp0aW1lKHN0cnVjdCB0aW1ldmFsICosIHN0cnVjdCB0
aW1ldmFsICopOwoKCgoKCgoKCgoKaW50IGdldGl0aW1lcihpbnQsIHN0cnVjdCBpdGltZXJ2YWwg
Kik7CmludCB1dGltZXMoY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqKTsKCgoK
aW50IHNldGl0aW1lcihpbnQsIHN0cnVjdCBpdGltZXJ2YWwgKiwgc3RydWN0IGl0aW1lcnZhbCAq
KTsKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKaW50IHNldHRpbWVvZmRheShzdHJ1
Y3QgdGltZXZhbCAqLCB2b2lkICopOwoKaHJ0aW1lX3QJZ2V0aHJ0aW1lKHZvaWQpOwpocnRpbWVf
dAlnZXRocnZ0aW1lKHZvaWQpOwoKCgoKCgoKCgoKCgoKCgoKaW50IGdldHRpbWVvZmRheShzdHJ1
Y3QgdGltZXZhbCAqLCB2b2lkICopOwoKCgoKCgoKIAoKCgoKCgoKCgoKCgojIDEgIi91c3IvaW5j
bHVkZS90aW1lLmgiIDEgMyA0CiAKIAoKIAogCiAKCiAKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAo
Iyl0aW1lLmgJMS4zOQk5OS8wOC8xMCBTTUkiCQoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBl
cy5oIiAxIDMgNAogCiAKCiAKIAogCgogCgoKCgojIDU2NCAiL3Vzci9pbmNsdWRlL3N5cy90eXBl
cy5oIiAzIDQKCiMgMTkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMyA0CgojIDEgIi91c3IvaW5j
bHVkZS9pc28vdGltZV9pc28uaCIgMSAzIDQKIAogCgogCiAKIAoKIAoKCgoKIAoKCgoKCgoKCgoK
CgoKCiNwcmFnbWEgaWRlbnQJIkAoIyl0aW1lX2lzby5oCTEuMQk5OS8wOC8wOSBTTUkiIAoKCgoK
ZXh0ZXJuICJDIiB7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKc3RydWN0CXRt
IHsJIAoJaW50CXRtX3NlYzsKCWludAl0bV9taW47CglpbnQJdG1faG91cjsKCWludAl0bV9tZGF5
OwoJaW50CXRtX21vbjsKCWludAl0bV95ZWFyOwoJaW50CXRtX3dkYXk7CglpbnQJdG1feWRheTsK
CWludAl0bV9pc2RzdDsKfTsKCgoKCmV4dGVybiBjaGFyICphc2N0aW1lKGNvbnN0IHN0cnVjdCB0
bSAqKTsKZXh0ZXJuIGNsb2NrX3QgY2xvY2sodm9pZCk7CmV4dGVybiBjaGFyICpjdGltZShjb25z
dCB0aW1lX3QgKik7CmV4dGVybiBkb3VibGUgZGlmZnRpbWUodGltZV90LCB0aW1lX3QpOwpleHRl
cm4gc3RydWN0IHRtICpnbXRpbWUoY29uc3QgdGltZV90ICopOwpleHRlcm4gc3RydWN0IHRtICps
b2NhbHRpbWUoY29uc3QgdGltZV90ICopOwpleHRlcm4gdGltZV90IG1rdGltZShzdHJ1Y3QgdG0g
Kik7CmV4dGVybiB0aW1lX3QgdGltZSh0aW1lX3QgKik7CmV4dGVybiBzaXplX3Qgc3RyZnRpbWUo
Y2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IHRtICopOwoKIyAxMDYg
Ii91c3IvaW5jbHVkZS9pc28vdGltZV9pc28uaCIgMyA0CgoKCgoKCgp9CgoKCiMgMjAgIi91c3Iv
aW5jbHVkZS90aW1lLmgiIDIgMyA0CgoKIAoKCgojIDQwICIvdXNyL2luY2x1ZGUvdGltZS5oIiAz
IDQKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRp
bWVfcihjb25zdCB0aW1lX3QgKiwgc3RydWN0IHRtICopOwpleHRlcm4gc3RydWN0IHRtICpsb2Nh
bHRpbWVfcihjb25zdCB0aW1lX3QgKiwgc3RydWN0IHRtICopOwoKCgoKCmV4dGVybiBjaGFyICpz
dHJwdGltZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc3RydWN0IHRtICopOwoKCgoKCgoK
CgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdGltZV9pbXBsLmgiIDEgMyA0CiAKCgoKCiAK
CgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpdGltZV9pbXBsLmgJMS41CTk5LzEwLzA1IFNNSSIK
CgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCgogCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgIHRpbWVzcGVj
IHsJCSAKCXRpbWVfdAkJdHZfc2VjOwkJIAoJbG9uZwkJdHZfbnNlYzsJIAp9IHRpbWVzcGVjX3Q7
CgojIDU4ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVfaW1wbC5oIiAzIDQKCgp0eXBlZGVmIHN0cnVj
dCB0aW1lc3BlYyB0aW1lc3RydWNfdDsJIAoKCgogCgoKCgoKCgoKCiAKCgoKCnR5cGVkZWYgc3Ry
dWN0IGl0aW1lcnNwZWMgewkJIAoJc3RydWN0IHRpbWVzcGVjCWl0X2ludGVydmFsOwkgCglzdHJ1
Y3QgdGltZXNwZWMJaXRfdmFsdWU7CSAKfSBpdGltZXJzcGVjX3Q7CgojIDEwMCAiL3Vzci9pbmNs
dWRlL3N5cy90aW1lX2ltcGwuaCIgMyA0CgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoK
CgoKCgp9CgoKCiMgODMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMyA0CgoKIAoKCgoKCgoKCgoK
Cgp1bmlvbiBzaWd2YWwgewoJaW50CXNpdmFsX2ludDsJIAoJdm9pZAkqc2l2YWxfcHRyOwkgCn07
CgoKCgpzdHJ1Y3Qgc2lnZXZlbnQgewoJaW50CQlzaWdldl9ub3RpZnk7CSAKCWludAkJc2lnZXZf
c2lnbm87CSAKCXVuaW9uIHNpZ3ZhbAlzaWdldl92YWx1ZTsJIAoJdm9pZAkJKCpzaWdldl9ub3Rp
ZnlfZnVuY3Rpb24pKHVuaW9uIHNpZ3ZhbCk7CglwdGhyZWFkX2F0dHJfdAkqc2lnZXZfbm90aWZ5
X2F0dHJpYnV0ZXM7CglpbnQJCV9fc2lnZXZfcGFkMjsKfTsKCgpleHRlcm4gaW50IGNsb2NrX2dl
dHJlcyhjbG9ja2lkX3QsIHN0cnVjdCB0aW1lc3BlYyAqKTsKZXh0ZXJuIGludCBjbG9ja19nZXR0
aW1lKGNsb2NraWRfdCwgc3RydWN0IHRpbWVzcGVjICopOwpleHRlcm4gaW50IGNsb2NrX3NldHRp
bWUoY2xvY2tpZF90LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKik7CmV4dGVybiBpbnQgdGltZXJf
Y3JlYXRlKGNsb2NraWRfdCwgc3RydWN0IHNpZ2V2ZW50ICosIHRpbWVyX3QgKik7CmV4dGVybiBp
bnQgdGltZXJfZGVsZXRlKHRpbWVyX3QpOwpleHRlcm4gaW50IHRpbWVyX2dldG92ZXJydW4odGlt
ZXJfdCk7CmV4dGVybiBpbnQgdGltZXJfZ2V0dGltZSh0aW1lcl90LCBzdHJ1Y3QgaXRpbWVyc3Bl
YyAqKTsKZXh0ZXJuIGludCB0aW1lcl9zZXR0aW1lKHRpbWVyX3QsIGludCwgY29uc3Qgc3RydWN0
IGl0aW1lcnNwZWMgKiwKCQlzdHJ1Y3QgaXRpbWVyc3BlYyAqKTsKZXh0ZXJuIGludCBuYW5vc2xl
ZXAoY29uc3Qgc3RydWN0IHRpbWVzcGVjICosIHN0cnVjdCB0aW1lc3BlYyAqKTsKCgoKCmV4dGVy
biB2b2lkIHR6c2V0KHZvaWQpOwoKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKCgpleHRlcm4gbG9u
ZyBfc3lzY29uZihpbnQpOwkgCgoJCQkJIAoKCgoKZXh0ZXJuIGxvbmcgdGltZXpvbmU7CmV4dGVy
biBpbnQgZGF5bGlnaHQ7CgoKCgoKCgoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdldGRhdGUoY29u
c3QgY2hhciAqKTsKCgoKCmV4dGVybiBpbnQgKl9nZXRkYXRlX2Vycl9hZGRyKHZvaWQpOwoKCgoK
CiMgMjA2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKCgogCgoKCiAKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnN0YXRpYyBjaGFyICoKYXNjdGltZV9yKGNvbnN0
IHN0cnVjdCB0bSAqX190bSwgY2hhciAqX19idWYpCnsKCWV4dGVybiBjaGFyICpfX3Bvc2l4X2Fz
Y3RpbWVfcihjb25zdCBzdHJ1Y3QgdG0gKiwgY2hhciAqKTsKCXJldHVybiAoX19wb3NpeF9hc2N0
aW1lX3IoX190bSwgX19idWYpKTsKfQpzdGF0aWMgY2hhciAqCmN0aW1lX3IoY29uc3QgdGltZV90
ICpfX3RpbWUsIGNoYXIgKl9fYnVmKQp7CglleHRlcm4gY2hhciAqX19wb3NpeF9jdGltZV9yKGNv
bnN0IHRpbWVfdCAqLCBjaGFyICopOwoJcmV0dXJuIChfX3Bvc2l4X2N0aW1lX3IoX190aW1lLCBf
X2J1ZikpOwp9CgoKCgoKCgoKCiMgMzEzICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKCgoKCgp9
CgoKCiMgNDA4ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMiAzIDQKCgoKIAoKCgoKCgoKCgoj
IDEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDEgMyA0CiAKIAogCgogCiAKIAoKIyAxMDcg
Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMgNAoKIyA0MjEgIi91c3IvaW5jbHVkZS9zeXMv
dGltZS5oIiAyIDMgNAoKCgoKCgp9CgoKCiMgMTcgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0Lmgi
IDIgMyA0CgoKCgpleHRlcm4gIkMiIHsKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZgls
b25nCWZkX21hc2s7Cgp0eXBlZGVmCWxvbmcJZmRzX21hc2s7CgogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKdHlwZWRlZglzdHJ1Y3QgZmRfc2V0IHsKCgoKCWxvbmcJZmRzX2JpdHNbKCgoIDEwMjQg
ICkrKCggIChzaXplb2YgKGZkc19tYXNrKSAqIDggKSAgKS0xKSkvKCAgKHNpemVvZiAoZmRzX21h
c2spICogOCApICApKSBdOwp9IGZkX3NldDsKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIGludCBz
ZWxlY3QoaW50LCBmZF9zZXQgKiwgZmRfc2V0ICosIGZkX3NldCAqLCBzdHJ1Y3QgdGltZXZhbCAq
KTsKCgoKCgoKfQoKCgojIDU0NCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNAoKCgoK
IAoKCgoKCgoKCiAKCgoKfQoKCgojIDIwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMyA0Cgoj
IDEgIi91c3IvaW5jbHVkZS9zeXMvdW5pc3RkLmgiIDEgMyA0CiAKCgoKCgoKCgoKIAoKCgoKIAoK
CgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIyl1bmlzdGQuaAkxLjM3CTk4LzEwLzI4IFNNSSIJCgoK
CgpleHRlcm4gIkMiIHsKCgogCgoKCiAKCgogCgoKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK
CgogCgogCgoKCgoKCgoKIAoKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgog
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKIAoKCgoKCiAKCgoKCgoKCiAKCgoKCgoKCgoKCgoK
CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgogCgogCgoKCgoKCgoKCiAKCgoK
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKfQoKCgojIDIxICIvdXNy
L2luY2x1ZGUvdW5pc3RkLmgiIDIgMyA0CgoKCmV4dGVybiAiQyIgewoKCiAKCgoKCgoKCgoKCgoK
CiAKCgoKCgoKCgoKCgoKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoK
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKIAojIDE0NiAiL3Vzci9pbmNsdWRl
L3VuaXN0ZC5oIiAzIDQKCgogCiMgMTY3ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNAoKCgoK
ZXh0ZXJuIGludCBhY2Nlc3MoY29uc3QgY2hhciAqLCBpbnQpOwoKCmV4dGVybiBpbnQgYWNjdChj
b25zdCBjaGFyICopOwoKZXh0ZXJuIHVuc2lnbmVkIGFsYXJtKHVuc2lnbmVkKTsKCgpleHRlcm4g
aW50IGJyayh2b2lkICopOwoKZXh0ZXJuIGludCBjaGRpcihjb25zdCBjaGFyICopOwpleHRlcm4g
aW50IGNob3duKGNvbnN0IGNoYXIgKiwgdWlkX3QsIGdpZF90KTsKCgpleHRlcm4gaW50IGNocm9v
dChjb25zdCBjaGFyICopOwoKZXh0ZXJuIGludCBjbG9zZShpbnQpOwoKCmV4dGVybiBzaXplX3Qg
Y29uZnN0cihpbnQsIGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIGNoYXIgKmNyeXB0KGNvbnN0IGNo
YXIgKiwgY29uc3QgY2hhciAqKTsKCgoKZXh0ZXJuIGNoYXIgKmN0ZXJtaWQoY2hhciAqKTsKCgpl
eHRlcm4gY2hhciAqY3Rlcm1pZF9yKGNoYXIgKik7CgpleHRlcm4gY2hhciAqY3VzZXJpZChjaGFy
ICopOwpleHRlcm4gaW50IGR1cChpbnQpOwpleHRlcm4gaW50IGR1cDIoaW50LCBpbnQpOwoKCmV4
dGVybiB2b2lkIGVuY3J5cHQoY2hhciAqLCBpbnQpOwoKZXh0ZXJuIGludCBleGVjbChjb25zdCBj
aGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKZXh0ZXJuIGludCBleGVjbGUoY29uc3QgY2hhciAq
LCBjb25zdCBjaGFyICosIC4uLik7CmV4dGVybiBpbnQgZXhlY2xwKGNvbnN0IGNoYXIgKiwgY29u
c3QgY2hhciAqLCAuLi4pOwpleHRlcm4gaW50IGV4ZWN2KGNvbnN0IGNoYXIgKiwgY2hhciAqY29u
c3QgKik7CmV4dGVybiBpbnQgZXhlY3ZlKGNvbnN0IGNoYXIgKiwgY2hhciAqY29uc3QgKiwgY2hh
ciAqY29uc3QgKik7CmV4dGVybiBpbnQgZXhlY3ZwKGNvbnN0IGNoYXIgKiwgY2hhciAqY29uc3Qg
Kik7CmV4dGVybiB2b2lkIF9leGl0KGludCk7CiAKCgoKCgoKZXh0ZXJuIGludCBmYXR0YWNoKGlu
dCwgY29uc3QgY2hhciAqKTsKCgoKZXh0ZXJuIGludCBmY2hkaXIoaW50KTsKZXh0ZXJuIGludCBm
Y2hvd24oaW50LCB1aWRfdCwgZ2lkX3QpOwoKCgpleHRlcm4gaW50IGZjaHJvb3QoaW50KTsKCgoK
ZXh0ZXJuIGludCBmZGF0YXN5bmMoaW50KTsKCiAKCgoKCgoKZXh0ZXJuIGludCBmZGV0YWNoKGNv
bnN0IGNoYXIgKik7CgpleHRlcm4gcGlkX3QgZm9yayh2b2lkKTsKCgpleHRlcm4gcGlkX3QgZm9y
azEodm9pZCk7CgpleHRlcm4gbG9uZyBmcGF0aGNvbmYoaW50LCBpbnQpOwoKCmV4dGVybiBpbnQg
ZnN5bmMoaW50KTsKCgoKCmV4dGVybiBpbnQgZnRydW5jYXRlKGludCwgb2ZmX3QpOwoKZXh0ZXJu
IGNoYXIgKmdldGN3ZChjaGFyICosIHNpemVfdCk7CgoKZXh0ZXJuIGludCBnZXRkdGFibGVzaXpl
KHZvaWQpOwoKZXh0ZXJuIGdpZF90IGdldGVnaWQodm9pZCk7CmV4dGVybiB1aWRfdCBnZXRldWlk
KHZvaWQpOwpleHRlcm4gZ2lkX3QgZ2V0Z2lkKHZvaWQpOwpleHRlcm4gaW50IGdldGdyb3Vwcyhp
bnQsIGdpZF90ICopOwoKCmV4dGVybiBsb25nIGdldGhvc3RpZCh2b2lkKTsKCgoKCgpleHRlcm4g
aW50IGdldGhvc3RuYW1lKGNoYXIgKiwgaW50KTsKCmV4dGVybiBjaGFyICpnZXRsb2dpbih2b2lk
KTsKCgpleHRlcm4gaW50ICBnZXRvcHQoaW50LCBjaGFyICpjb25zdCAqLCBjb25zdCBjaGFyICop
OwpleHRlcm4gY2hhciAqb3B0YXJnOwpleHRlcm4gaW50ICBvcHRlcnIsIG9wdGluZCwgb3B0b3B0
OwpleHRlcm4gY2hhciAqZ2V0cGFzcyhjb25zdCBjaGFyICopOwoKCgpleHRlcm4gaW50IGdldHBh
Z2VzaXplKHZvaWQpOwpleHRlcm4gcGlkX3QgZ2V0cGdpZChwaWRfdCk7CgpleHRlcm4gcGlkX3Qg
Z2V0cGlkKHZvaWQpOwpleHRlcm4gcGlkX3QgZ2V0cHBpZCh2b2lkKTsKZXh0ZXJuIHBpZF90IGdl
dHBncnAodm9pZCk7CgoKY2hhciAqZ2V0dHh0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsK
CgoKZXh0ZXJuIHBpZF90IGdldHNpZChwaWRfdCk7CgpleHRlcm4gdWlkX3QgZ2V0dWlkKHZvaWQp
OwoKCmV4dGVybiBjaGFyICpnZXR3ZChjaGFyICopOwoKIAoKCgoKCgpleHRlcm4gaW50IGlvY3Rs
KGludCwgaW50LCAuLi4pOwoKCgpleHRlcm4gaW50IGlzYWV4ZWMoY29uc3QgY2hhciAqLCBjaGFy
ICpjb25zdCAqLCBjaGFyICpjb25zdCAqKTsKCmV4dGVybiBpbnQgaXNhdHR5KGludCk7CmV4dGVy
biBpbnQgbGluayhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CgoKZXh0ZXJuIGludCBsY2hv
d24oY29uc3QgY2hhciAqLCB1aWRfdCwgZ2lkX3QpOwoKCgoKZXh0ZXJuIGludCBsb2NrZihpbnQs
IGludCwgb2ZmX3QpOwoKCgpleHRlcm4gaW50IHJlYWRsaW5rKGNvbnN0IGNoYXIgKiwgY2hhciAq
LCBzaXplX3QpOwoKZXh0ZXJuIG9mZl90IGxzZWVrKGludCwgb2ZmX3QsIGludCk7CgoKZXh0ZXJu
IGludCBuaWNlKGludCk7CgpleHRlcm4gbG9uZyBwYXRoY29uZihjb25zdCBjaGFyICosIGludCk7
CmV4dGVybiBpbnQgcGF1c2Uodm9pZCk7CmV4dGVybiBpbnQgcGlwZShpbnQgKik7CgoKZXh0ZXJu
IG9mZnNldF90IGxsc2VlayhpbnQsIG9mZnNldF90LCBpbnQpOwoKCgoKZXh0ZXJuIG9mZl90IHRl
bGwoaW50KTsKCgoKZXh0ZXJuIGludCBtaW5jb3JlKGNhZGRyX3QsIHNpemVfdCwgY2hhciAqKTsK
CgoKCmV4dGVybiBzc2l6ZV90IHByZWFkKGludCwgdm9pZCAqLCBzaXplX3QsIG9mZl90KTsKCgoK
ZXh0ZXJuIHZvaWQgcHJvZmlsKHVuc2lnbmVkIHNob3J0ICosIHNpemVfdCwgdW5zaWduZWQgbG9u
ZywgdW5zaWduZWQgaW50KTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0Zm9yayh2b2lkICgqKSAo
dm9pZCksIHZvaWQgKCopICh2b2lkKSwgdm9pZCAoKikgKHZvaWQpKTsKCgoKZXh0ZXJuIGxvbmcg
cHRyYWNlKGludCwgcGlkX3QsIGxvbmcsIGxvbmcpOwoKCgoKZXh0ZXJuIHNzaXplX3QgcHdyaXRl
KGludCwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIG9mZl90KTsKCmV4dGVybiBzc2l6ZV90IHJlYWQo
aW50LCB2b2lkICosIHNpemVfdCk7CgoKZXh0ZXJuIGludCByZW5hbWUoY29uc3QgY2hhciAqLCBj
b25zdCBjaGFyICopOwoKCgpleHRlcm4gaW50IHJlc29sdmVwYXRoKGNvbnN0IGNoYXIgKiwgY2hh
ciAqLCBzaXplX3QpOwoKZXh0ZXJuIGludCBybWRpcihjb25zdCBjaGFyICopOwoKCmV4dGVybiB2
b2lkICpzYnJrKGludHB0cl90KTsKCmV4dGVybiBpbnQgc2V0Z2lkKGdpZF90KTsKCgpleHRlcm4g
aW50IHNldGVnaWQoZ2lkX3QpOwoKCgpleHRlcm4gaW50IHNldGdyb3VwcyhpbnQsIGNvbnN0IGdp
ZF90ICopOwoKZXh0ZXJuIGludCBzZXRwZ2lkKHBpZF90LCBwaWRfdCk7CgoKZXh0ZXJuIHBpZF90
IHNldHBncnAodm9pZCk7CmV4dGVybiBpbnQgc2V0cmVnaWQoZ2lkX3QsIGdpZF90KTsKZXh0ZXJu
IGludCBzZXRyZXVpZCh1aWRfdCwgdWlkX3QpOwoKZXh0ZXJuIHBpZF90IHNldHNpZCh2b2lkKTsK
ZXh0ZXJuIGludCBzZXR1aWQodWlkX3QpOwoKCmV4dGVybiBpbnQgc2V0ZXVpZCh1aWRfdCk7Cgpl
eHRlcm4gdW5zaWduZWQgc2xlZXAodW5zaWduZWQpOwoKCmV4dGVybiBpbnQgc3RpbWUoY29uc3Qg
dGltZV90ICopOwoKCgoKCgoKZXh0ZXJuIGludCBzeW1saW5rKGNvbnN0IGNoYXIgKiwgY29uc3Qg
Y2hhciAqKTsKZXh0ZXJuIHZvaWQgc3luYyh2b2lkKTsKCmV4dGVybiBsb25nIHN5c2NvbmYoaW50
KTsKCgoKCgoKCgpleHRlcm4gcGlkX3QgdGNnZXRwZ3JwKGludCk7CmV4dGVybiBpbnQgdGNzZXRw
Z3JwKGludCwgcGlkX3QpOwoKCmV4dGVybiBvZmZfdCB0ZWxsKGludCk7CgoKCgpleHRlcm4gaW50
IHRydW5jYXRlKGNvbnN0IGNoYXIgKiwgb2ZmX3QpOwoKZXh0ZXJuIGNoYXIgKnR0eW5hbWUoaW50
KTsKCgpleHRlcm4gdXNlY29uZHNfdCB1YWxhcm0odXNlY29uZHNfdCwgdXNlY29uZHNfdCk7Cgpl
eHRlcm4gaW50IHVubGluayhjb25zdCBjaGFyICopOwoKCmV4dGVybiBpbnQgdXNsZWVwKHVzZWNv
bmRzX3QpOwoKCgpleHRlcm4gcGlkX3QgdmZvcmsodm9pZCk7CgoKCmV4dGVybiB2b2lkIHZoYW5n
dXAodm9pZCk7CgpleHRlcm4gc3NpemVfdCB3cml0ZShpbnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90
KTsKCgpleHRlcm4gdm9pZCB5aWVsZCh2b2lkKTsKCgogCgoKZXh0ZXJuIGludCBmdHJ1bmNhdGU2
NChpbnQsIG9mZjY0X3QpOwpleHRlcm4gb2ZmNjRfdCBsc2VlazY0KGludCwgb2ZmNjRfdCwgaW50
KTsKZXh0ZXJuIHNzaXplX3QJcHJlYWQ2NChpbnQsIHZvaWQgKiwgc2l6ZV90LCBvZmY2NF90KTsK
ZXh0ZXJuIHNzaXplX3QJcHdyaXRlNjQoaW50LCBjb25zdCB2b2lkICosIHNpemVfdCwgb2ZmNjRf
dCk7CmV4dGVybiBvZmY2NF90CXRlbGw2NChpbnQpOwpleHRlcm4gaW50CXRydW5jYXRlNjQoY29u
c3QgY2hhciAqLCBvZmY2NF90KTsKZXh0ZXJuIGludAlsb2NrZjY0KGludCwgaW50LCBvZmY2NF90
KTsKCgojIDc3MiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzIDQKCgogCgoKCgoKCgojcHJhZ21h
IHVua25vd25fY29udHJvbF9mbG93KHZmb3JrKQoKCgogCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnN0YXRpYyBpbnQKZ2V0bG9naW5fcihjaGFyICpfX25h
bWUsIGludCBfX2xlbikKewoJZXh0ZXJuIGludCBfX3Bvc2l4X2dldGxvZ2luX3IoY2hhciAqLCBp
bnQpOwoJcmV0dXJuIChfX3Bvc2l4X2dldGxvZ2luX3IoX19uYW1lLCBfX2xlbikpOwp9CnN0YXRp
YyBpbnQKdHR5bmFtZV9yKGludCBfX2ZpbGRlcywgY2hhciAqX19idWYsIHNpemVfdCBfX3NpemUp
CnsKCWV4dGVybiBpbnQgX19wb3NpeF90dHluYW1lX3IoaW50LCBjaGFyICosIHNpemVfdCk7Cgly
ZXR1cm4gKF9fcG9zaXhfdHR5bmFtZV9yKF9fZmlsZGVzLCBfX2J1ZiwgX19zaXplKSk7Cn0KCgoK
CgoKCgoKIyA4OTIgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CgoKCgoKfQoKCgojIDQgInNh
dmVfc25hcC5jIiAyCgojIDEgIi91c3IvaW5jbHVkZS9mY250bC5oIiAxIDMgNAogCgoKCgogCiAK
CiAKIAogCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpZmNudGwuaAkxLjE0CTk3LzEyLzA1IFNNSSIJ
CgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAxIDMgNAogCgoKCgogCiAKIAoKIAog
CiAKIAoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXN0YXQuaAkxLjIJOTkvMDUvMTkgU01JIgoKCgoK
CmV4dGVybiAiQyIgewoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgojIDE1NiAiL3Vzci9p
bmNsdWRlL3N5cy9zdGF0LmgiIDMgNAoKCiAKCgojIDE3OCAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0
LmgiIDMgNAoKCiAKCgoKIyAyMDAgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAzIDQKCgogCgoK
CiMgMjMyICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMyA0CgoKc3RydWN0CXN0YXQgewoJZGV2
X3QJCXN0X2RldjsKCWxvbmcJCXN0X3BhZDFbM107CSAKCWlub190CQlzdF9pbm87Cgltb2RlX3QJ
CXN0X21vZGU7CglubGlua190CQlzdF9ubGluazsKCXVpZF90CQlzdF91aWQ7CglnaWRfdAkJc3Rf
Z2lkOwoJZGV2X3QJCXN0X3JkZXY7Cglsb25nCQlzdF9wYWQyWzJdOwoJb2ZmX3QJCXN0X3NpemU7
CgoJbG9uZwkJc3RfcGFkMzsJIAoKCgoJdGltZXN0cnVjX3QJc3RfYXRpbTsKCXRpbWVzdHJ1Y190
CXN0X210aW07Cgl0aW1lc3RydWNfdAlzdF9jdGltOwoKCgoKCglibGtzaXplX3QJc3RfYmxrc2l6
ZTsKCWJsa2NudF90CXN0X2Jsb2NrczsKCWNoYXIJCXN0X2ZzdHlwZVsxNiBdOwoJbG9uZwkJc3Rf
cGFkNFs4XTsJIAp9OwoKCgogCgoKIyAyOTUgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAzIDQK
CgpzdHJ1Y3QJc3RhdDY0IHsKCWRldl90CQlzdF9kZXY7Cglsb25nCQlzdF9wYWQxWzNdOwkgCglp
bm82NF90CQlzdF9pbm87Cgltb2RlX3QJCXN0X21vZGU7CglubGlua190CQlzdF9ubGluazsKCXVp
ZF90CQlzdF91aWQ7CglnaWRfdAkJc3RfZ2lkOwoJZGV2X3QJCXN0X3JkZXY7Cglsb25nCQlzdF9w
YWQyWzJdOwoJb2ZmNjRfdAkJc3Rfc2l6ZTsKCgoJdGltZXN0cnVjX3QJc3RfYXRpbTsKCXRpbWVz
dHJ1Y190CXN0X210aW07Cgl0aW1lc3RydWNfdAlzdF9jdGltOwoKCgoKCglibGtzaXplX3QJc3Rf
Ymxrc2l6ZTsKCWJsa2NudDY0X3QJc3RfYmxvY2tzOwoJY2hhcgkJc3RfZnN0eXBlWzE2IF07Cgls
b25nCQlzdF9wYWQ0WzhdOwkgCn07CgoKCgoKCgoKCgoKCgoKCgoKIyAzOTMgIi91c3IvaW5jbHVk
ZS9zeXMvc3RhdC5oIiAzIDQKCgogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCiAKCgoKCiMgNDYxICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMyA0
CgoKCgoKCgoKCmV4dGVybiBpbnQgZmNobW9kKGludCwgbW9kZV90KTsKCgpleHRlcm4gaW50IGNo
bW9kKGNvbnN0IGNoYXIgKiwgbW9kZV90KTsKZXh0ZXJuIGludCBta2Rpcihjb25zdCBjaGFyICos
IG1vZGVfdCk7CmV4dGVybiBpbnQgbWtmaWZvKGNvbnN0IGNoYXIgKiwgbW9kZV90KTsKZXh0ZXJu
IG1vZGVfdCB1bWFzayhtb2RlX3QpOwoKIAoKCmV4dGVybiBpbnQgZnN0YXQ2NChpbnQsIHN0cnVj
dCBzdGF0NjQgKik7CmV4dGVybiBpbnQgc3RhdDY0KGNvbnN0IGNoYXIgKiwgc3RydWN0IHN0YXQ2
NCAqKTsKZXh0ZXJuIGludCBsc3RhdDY0KGNvbnN0IGNoYXIgKiwgc3RydWN0IHN0YXQ2NCAqKTsK
CgojIDUwNyAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDMgNAoKCiMgMSAiL3Vzci9pbmNsdWRl
L3N5cy9zdGF0X2ltcGwuaCIgMSAzIDQKIAoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXN0YXRf
aW1wbC5oCTEuMQk5OS8wNS8wNCBTTUkiCgoKCgoKZXh0ZXJuICJDIiB7CgoKIAoKCgoKCgoKZXh0
ZXJuIGludCBmc3RhdChpbnQsIHN0cnVjdCBzdGF0ICopOwpleHRlcm4gaW50IHN0YXQoY29uc3Qg
Y2hhciAqLCBzdHJ1Y3Qgc3RhdCAqKTsKCgoKZXh0ZXJuIGludCBsc3RhdChjb25zdCBjaGFyICos
IHN0cnVjdCBzdGF0ICopOwpleHRlcm4gaW50IG1rbm9kKGNvbnN0IGNoYXIgKiwgbW9kZV90LCBk
ZXZfdCk7CgoKIyA0NCAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0X2ltcGwuaCIgMyA0CgoKCgoKfQoK
CgojIDUwOSAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDIgMyA0CgoKCgoKfQoKCgojIDIxICIv
dXNyL2luY2x1ZGUvZmNudGwuaCIgMiAzIDQKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ZjbnRs
LmgiIDEgMyA0CiAKIAoKIAogCiAKCiAKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylmY250bC5o
CTEuNDUJOTgvMDcvMTcgU01JIgkKCgoKCgoKZXh0ZXJuICJDIiB7CgoKIAoKCgoKCgoKCgoKCgoK
CgoJCQkJIAoKCgoKCgoKCgogCgoKCgoKCgogCgoKCgoKCgoKCgogCgoKCiMgODkgIi91c3IvaW5j
bHVkZS9zeXMvZmNudGwuaCIgMyA0CgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgkJCQkgCgogCgoK
CgoKCiAKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiAKdHlwZWRl
ZiBzdHJ1Y3QgZmxvY2sgewoJc2hvcnQJbF90eXBlOwoJc2hvcnQJbF93aGVuY2U7CglvZmZfdAls
X3N0YXJ0OwoJb2ZmX3QJbF9sZW47CQkgCglpbnQJbF9zeXNpZDsKCXBpZF90CWxfcGlkOwoJbG9u
ZwlsX3BhZFs0XTsJCSAKfSBmbG9ja190OwoKIyAxODggIi91c3IvaW5jbHVkZS9zeXMvZmNudGwu
aCIgMyA0CgoKIAoKCgp0eXBlZGVmIHN0cnVjdCBmbG9jazY0IHsKCXNob3J0CWxfdHlwZTsKCXNo
b3J0CWxfd2hlbmNlOwoJb2ZmNjRfdAlsX3N0YXJ0OwoJb2ZmNjRfdAlsX2xlbjsJCSAKCWludAls
X3N5c2lkOwoJcGlkX3QJbF9waWQ7Cglsb25nCWxfcGFkWzRdOwkJIAp9IGZsb2NrNjRfdDsKCiMg
MjMwICIvdXNyL2luY2x1ZGUvc3lzL2ZjbnRsLmgiIDMgNAoKCgoKIyAyNDQgIi91c3IvaW5jbHVk
ZS9zeXMvZmNudGwuaCIgMyA0CgoKIAoKCgoKCgoKIAoKCgoKCgogCgoKCgoKCgogCgoKdHlwZWRl
ZiBzdHJ1Y3QgZnNoYXJlIHsKCXNob3J0CWZfYWNjZXNzOwoJc2hvcnQJZl9kZW55OwoJaW50CWZf
aWQ7Cn0gZnNoYXJlX3Q7CgogCgoKCgoKCiAKCgoKCgoKCgoKCn0KCgoKIyAyNCAiL3Vzci9pbmNs
dWRlL2ZjbnRsLmgiIDIgMyA0CgoKCmV4dGVybiAiQyIgewoKCgoKCiAKCgoKCgoKCgoKCgoKCgoK
IAojIDU4ICIvdXNyL2luY2x1ZGUvZmNudGwuaCIgMyA0CgoKIyA2OCAiL3Vzci9pbmNsdWRlL2Zj
bnRsLmgiIDMgNAoKCgoKZXh0ZXJuIGludCBmY250bChpbnQsIGludCwgLi4uKTsKZXh0ZXJuIGlu
dCBvcGVuKGNvbnN0IGNoYXIgKiwgaW50LCAuLi4pOwpleHRlcm4gaW50IGNyZWF0KGNvbnN0IGNo
YXIgKiwgbW9kZV90KTsKCgpleHRlcm4gaW50IGRpcmVjdGlvKGludCwgaW50KTsKCgogCgoKZXh0
ZXJuIGludCBvcGVuNjQoY29uc3QgY2hhciAqLCBpbnQsIC4uLik7CmV4dGVybiBpbnQgY3JlYXQ2
NChjb25zdCBjaGFyICosIG1vZGVfdCk7CgoKIyAxMDQgIi91c3IvaW5jbHVkZS9mY250bC5oIiAz
IDQKCgoKfQoKCgojIDUgInNhdmVfc25hcC5jIiAyCgojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIu
aCIgMSAzIDQKIAoKCgoKIAogCgogCiAKIAoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXN0ZGxpYi5o
CTEuNDcJOTkvMTEvMDMgU01JIgkKCiMgMSAiL3Vzci9pbmNsdWRlL2lzby9zdGRsaWJfaXNvLmgi
IDEgMyA0CiAKCgoKCiAKIAoKIAogCiAKCiAKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGlkZW50CSJA
KCMpc3RkbGliX2lzby5oCTEuMgk5OS8xMi8yMSBTTUkiIAoKCgoKZXh0ZXJuICJDIiB7CgoKCmV4
dGVybiB1bnNpZ25lZCBjaGFyCV9fY3R5cGVbXTsKCgoKCgoKCgoKCnR5cGVkZWYJc3RydWN0IHsK
CWludAlxdW90OwoJaW50CXJlbTsKfSBkaXZfdDsKCnR5cGVkZWYgc3RydWN0IHsKCWxvbmcJcXVv
dDsKCWxvbmcJcmVtOwp9IGxkaXZfdDsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRl
ZiBsb25nCXdjaGFyX3Q7CgoKCgoKZXh0ZXJuIHZvaWQgYWJvcnQodm9pZCk7CmV4dGVybiBpbnQg
YWJzKGludCk7CmV4dGVybiBpbnQgYXRleGl0KHZvaWQgKCopKHZvaWQpKTsKZXh0ZXJuIGRvdWJs
ZSBhdG9mKGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgYXRvaShjb25zdCBjaGFyICopOwpleHRl
cm4gbG9uZyBpbnQgYXRvbChjb25zdCBjaGFyICopOwpleHRlcm4gdm9pZCAqYnNlYXJjaChjb25z
dCB2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsCglpbnQgKCopKGNvbnN0IHZv
aWQgKiwgY29uc3Qgdm9pZCAqKSk7CmV4dGVybiB2b2lkICpjYWxsb2Moc2l6ZV90LCBzaXplX3Qp
OwpleHRlcm4gZGl2X3QgZGl2KGludCwgaW50KTsKZXh0ZXJuIHZvaWQgZXhpdChpbnQpOwpleHRl
cm4gdm9pZCBmcmVlKHZvaWQgKik7CmV4dGVybiBjaGFyICpnZXRlbnYoY29uc3QgY2hhciAqKTsK
ZXh0ZXJuIGxvbmcgaW50IGxhYnMobG9uZyk7CmV4dGVybiBsZGl2X3QgbGRpdihsb25nLCBsb25n
KTsKZXh0ZXJuIHZvaWQgKm1hbGxvYyhzaXplX3QpOwpleHRlcm4gaW50IG1ibGVuKGNvbnN0IGNo
YXIgKiwgc2l6ZV90KTsKZXh0ZXJuIHNpemVfdCBtYnN0b3djcyh3Y2hhcl90ICosIGNvbnN0IGNo
YXIgKiwgc2l6ZV90KTsKZXh0ZXJuIGludCBtYnRvd2Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICos
IHNpemVfdCk7CmV4dGVybiB2b2lkIHFzb3J0KHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsCglpbnQg
KCopKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CmV4dGVybiBpbnQgcmFuZCh2b2lkKTsK
ZXh0ZXJuIHZvaWQgKnJlYWxsb2Modm9pZCAqLCBzaXplX3QpOwpleHRlcm4gdm9pZCBzcmFuZCh1
bnNpZ25lZCBpbnQpOwpleHRlcm4gZG91YmxlIHN0cnRvZChjb25zdCBjaGFyICosIGNoYXIgKiop
OwpleHRlcm4gbG9uZyBpbnQgc3RydG9sKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKZXh0
ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQp
OwpleHRlcm4gaW50IHN5c3RlbShjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHdjdG9tYihjaGFy
ICosIHdjaGFyX3QpOwpleHRlcm4gc2l6ZV90IHdjc3RvbWJzKGNoYXIgKiwgY29uc3Qgd2NoYXJf
dCAqLCBzaXplX3QpOwoKIyAxNTIgIi91c3IvaW5jbHVkZS9pc28vc3RkbGliX2lzby5oIiAzIDQK
CgoKCgoKCn0KCgoKIyAxOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMgNAoKCgoKIyAxICIv
dXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMSAzIDQKIAogCgogCiAKIAoKIAoKCgoKCgoKI3ByYWdt
YSBpZGVudAkiQCgjKXdhaXQuaAkxLjIxCTk3LzA0LzA4IFNNSSIJCgoKCgoKCgojIDEgIi91c3Iv
aW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMSAzIDQKIAogCgogCiAKIAoKIAoKCgoKCgoKI3ByYWdt
YSBpZGVudAkiQCgjKXJlc291cmNlLmgJMS4yNQk5OC8wNi8zMCBTTUkiCQoKCgoKCgoKZXh0ZXJu
ICJDIiB7CgoKIAoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgojIDU5ICIvdXNyL2luY2x1ZGUvc3lz
L3Jlc291cmNlLmgiIDMgNAoKCiAKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcJcmxpbV90OwoK
CgoKCiMgODEgIi91c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMyA0CgoKCgojIDEwMCAiL3Vz
ci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAzIDQKCgpzdHJ1Y3QgcmxpbWl0IHsKCXJsaW1fdAly
bGltX2N1cjsJCSAKCXJsaW1fdAlybGltX21heDsJCSAKfTsKCiAKCgp0eXBlZGVmIHVfbG9uZ2xv
bmdfdAlybGltNjRfdDsKCgoKCgpzdHJ1Y3QgcmxpbWl0NjQgewoJcmxpbTY0X3QJcmxpbV9jdXI7
CSAKCXJsaW02NF90CXJsaW1fbWF4OwkgCn07CgoKCiMgMTM4ICIvdXNyL2luY2x1ZGUvc3lzL3Jl
c291cmNlLmgiIDMgNAoKCgoKCnN0cnVjdAlydXNhZ2UgewoJc3RydWN0IHRpbWV2YWwgcnVfdXRp
bWU7CSAKCXN0cnVjdCB0aW1ldmFsIHJ1X3N0aW1lOwkgCglsb25nCXJ1X21heHJzczsJCSAKCWxv
bmcJcnVfaXhyc3M7CQkgCglsb25nCXJ1X2lkcnNzOwkJIAoJbG9uZwlydV9pc3JzczsJCSAKCWxv
bmcJcnVfbWluZmx0OwkJIAoJbG9uZwlydV9tYWpmbHQ7CQkgCglsb25nCXJ1X25zd2FwOwkJIAoJ
bG9uZwlydV9pbmJsb2NrOwkJIAoJbG9uZwlydV9vdWJsb2NrOwkJIAoJbG9uZwlydV9tc2dzbmQ7
CQkgCglsb25nCXJ1X21zZ3JjdjsJCSAKCWxvbmcJcnVfbnNpZ25hbHM7CQkgCglsb25nCXJ1X252
Y3N3OwkJIAoJbG9uZwlydV9uaXZjc3c7CQkgCn07CgojIDE3NCAiL3Vzci9pbmNsdWRlL3N5cy9y
ZXNvdXJjZS5oIiAzIDQKCgojIDE4OSAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAzIDQK
CgoKCmV4dGVybiBpbnQgc2V0cmxpbWl0KGludCwgY29uc3Qgc3RydWN0IHJsaW1pdCAqKTsKZXh0
ZXJuIGludCBnZXRybGltaXQoaW50LCBzdHJ1Y3QgcmxpbWl0ICopOwoKIAoKCmV4dGVybiBpbnQg
c2V0cmxpbWl0NjQoaW50LCBjb25zdCBzdHJ1Y3QgcmxpbWl0NjQgKik7CmV4dGVybiBpbnQgZ2V0
cmxpbWl0NjQoaW50LCBzdHJ1Y3QgcmxpbWl0NjQgKik7CgoKZXh0ZXJuIGludCBnZXRwcmlvcml0
eShpbnQsIGlkX3QpOwpleHRlcm4gaW50IHNldHByaW9yaXR5KGludCwgaWRfdCwgaW50KTsKZXh0
ZXJuIGludCBnZXRydXNhZ2UoaW50LCBzdHJ1Y3QgcnVzYWdlICopOwoKIyAyMjMgIi91c3IvaW5j
bHVkZS9zeXMvcmVzb3VyY2UuaCIgMyA0CgoKCgoKfQoKCgojIDI0ICIvdXNyL2luY2x1ZGUvc3lz
L3dhaXQuaCIgMiAzIDQKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zaWdpbmZvLmgiIDEgMyA0CiAK
IAoKIAoKCgoKIAogCiAKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylzaWdpbmZvLmgJMS41NAk5OC8w
My8yNyBTTUkiCQoKCgoKCmV4dGVybiAiQyIgewoKCgoKCiAKCgoKCgoKCgoKCgojIDQ5ICIvdXNy
L2luY2x1ZGUvc3lzL3NpZ2luZm8uaCIgMyA0CgoKCgoKCgoKCgoKCgoKIAoKCgojIDc3ICIvdXNy
L2luY2x1ZGUvc3lzL3NpZ2luZm8uaCIgMyA0CgoKIAoKCgoKIyA5NyAiL3Vzci9pbmNsdWRlL3N5
cy9zaWdpbmZvLmgiIDMgNAoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKIyAxICIvdXNy
L2luY2x1ZGUvc3lzL21hY2hzaWcuaCIgMSAzIDQKIAogCgogCiAKIAoKIAoKCgoKCgoKI3ByYWdt
YSBpZGVudAkiQCgjKW1hY2hzaWcuaAkxLjE1CTk5LzA4LzE1IFNNSSIKCgoKCmV4dGVybiAiQyIg
ewoKCiAKCgoKIAoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCiAKCgoKCgoK
CgoKCgoKCgoKIAoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCn0KCgoKIyAxMjYgIi91c3IvaW5j
bHVkZS9zeXMvc2lnaW5mby5oIiAyIDMgNAoKCiAKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoK
CiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoK
CgogCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IHNpZ2luZm8geyAJCSAKCgoKCWludAlzaV9zaWdu
bzsJCQkgCglpbnQgCXNpX2NvZGU7CQkJIAoJaW50CXNpX2Vycm5vOwkJCSAKCgoKCXVuaW9uIHsK
CgkJaW50CV9fcGFkWygoMTI4ICAvIHNpemVvZiAoaW50KSkgLSAzKSBdOwkJIAoKCQlzdHJ1Y3Qg
ewkJCSAKCQkJcGlkX3QJX19waWQ7CQkgCgkJCXVuaW9uIHsKCQkJCXN0cnVjdCB7CgkJCQkJdWlk
X3QJX191aWQ7CgoKCQkJCQl1bmlvbiBzaWd2YWwJX192YWx1ZTsKCgoKCQkJCX0gX19raWxsOwoJ
CQkJc3RydWN0IHsKCQkJCQljbG9ja190IF9fdXRpbWU7CgkJCQkJaW50CV9fc3RhdHVzOwoJCQkJ
CWNsb2NrX3QgX19zdGltZTsKCQkJCX0gX19jbGQ7CgkJCX0gX19wZGF0YTsKCQl9IF9fcHJvYzsK
CgkJc3RydWN0IHsJIAoJCQl2b2lkIAkqX19hZGRyOwkgCgkJCWludAlfX3RyYXBubzsJIAoJCQlj
YWRkcl90CV9fcGM7CQkgCgkJfSBfX2ZhdWx0OwoKCQlzdHJ1Y3QgewkJCSAKCQkgCgkJCWludAlf
X2ZkOwkJIAoJCQlsb25nCV9fYmFuZDsKCQl9IF9fZmlsZTsKCgkJc3RydWN0IHsJCQkgCgkJCWNh
ZGRyX3QJX19mYWRkcjsJIAoKCgkJCXRpbWVzdHJ1Y190IF9fdHN0YW1wOwkgCgoKCgkJCXNob3J0
CV9fc3lzY2FsbDsJIAoJCQljaGFyCV9fbnN5c2FyZzsJIAoJCQljaGFyCV9fZmF1bHQ7CSAKCQkJ
bG9uZwlfX3N5c2FyZ1s4XTsJIAoJCQlpbnQJX19tc3RhdGVbMTBdOwkgCgkJfSBfX3Byb2Y7CgoJ
fSBfX2RhdGE7Cgp9IHNpZ2luZm9fdDsKCiMgMzQ0ICIvdXNyL2luY2x1ZGUvc3lzL3NpZ2luZm8u
aCIgMyA0CgoKIAoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3Qga19zaWdpbmZvIHsKCWludAlzaV9zaWdu
bzsJCQkgCglpbnQgCXNpX2NvZGU7CQkJIAoJaW50CXNpX2Vycm5vOwkJCSAKCgoKCXVuaW9uIHsK
CQlzdHJ1Y3QgewkJCSAKCQkJcGlkX3QJX19waWQ7CQkgCgkJCXVuaW9uIHsKCQkJCXN0cnVjdCB7
CgkJCQkJdWlkX3QJX191aWQ7CgkJCQkJdW5pb24gc2lndmFsCV9fdmFsdWU7CgkJCQl9IF9fa2ls
bDsKCQkJCXN0cnVjdCB7CgkJCQkJY2xvY2tfdCBfX3V0aW1lOwoJCQkJCWludAlfX3N0YXR1czsK
CQkJCQljbG9ja190IF9fc3RpbWU7CgkJCQl9IF9fY2xkOwoJCQl9IF9fcGRhdGE7CgkJfSBfX3By
b2M7CgoJCXN0cnVjdCB7CSAKCQkJdm9pZCAJKl9fYWRkcjsJIAoJCQlpbnQJX190cmFwbm87CSAK
CQkJY2FkZHJfdAlfX3BjOwkJIAoJCX0gX19mYXVsdDsKCgkJc3RydWN0IHsJCQkgCgkJIAoJCQlp
bnQJX19mZDsJCSAKCQkJbG9uZwlfX2JhbmQ7CgkJfSBfX2ZpbGU7CgoJCXN0cnVjdCB7CQkJIAoJ
CQljYWRkcl90CV9fZmFkZHI7CSAKCgoKCQkJdGltZXN0cnVjX3QgX190c3RhbXA7CSAKCgoKCQkJ
c2hvcnQJX19zeXNjYWxsOwkgCgkJCWNoYXIJX19uc3lzYXJnOwkgCgkJCWNoYXIJX19mYXVsdDsJ
IAoJCQkgCgkJCSAKCQkJIAoJCX0gX19wcm9mOwoKCX0gX19kYXRhOwoKfSBrX3NpZ2luZm9fdDsK
CnR5cGVkZWYgc3RydWN0IHNpZ3F1ZXVlIHsKCXN0cnVjdCBzaWdxdWV1ZQkqc3FfbmV4dDsKCWtf
c2lnaW5mb190CXNxX2luZm87Cgl2b2lkCQkoKnNxX2Z1bmMpKHN0cnVjdCBzaWdxdWV1ZSAqKTsg
IAoJdm9pZAkJKnNxX2JhY2twdHI7CSAKCQkJCQkgCn0gc2lncXVldWVfdDsKCiAKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp9CgoKCiMgMjUgIi91c3IvaW5jbHVkZS9zeXMvd2Fp
dC5oIiAyIDMgNAoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3Byb2NzZXQuaCIgMSAzIDQKIAoKCgoK
IAogCgogCiAKIAoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXByb2NzZXQuaAkxLjIwCTAwLzAyLzE0
IFNNSSIJCgoKZXh0ZXJuICJDIiB7CgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKdHlwZWRlZiBlbnVt
CgoJaWR0eXBlCQkgCgoJCXsKCVBfUElELAkJIAoJUF9QUElELAkJIAoJUF9QR0lELAkJIAoJCQkg
CglQX1NJRCwJCSAKCVBfQ0lELAkJIAoJUF9VSUQsCQkgCglQX0dJRCwJCSAKCVBfQUxMLAkJIAoJ
UF9MV1BJRCwJIAoJUF9UQVNLSUQsCSAKCVBfUFJPSklECSAKfSBpZHR5cGVfdDsKCgogCgoKCgoK
dHlwZWRlZiBlbnVtIGlkb3AgewoJUE9QX0RJRkYsCSAKCQkJIAoJCQkgCglQT1BfQU5ELAkgCgkJ
CSAKCQkJIAoJUE9QX09SLAkJIAoJCQkgCgkJCSAKCVBPUF9YT1IJCSAKCQkJIAoJCQkgCn0gaWRv
cF90OwoKCiAKCgoKCnR5cGVkZWYgc3RydWN0IHByb2NzZXQgewoJaWRvcF90CQlwX29wOwkgCgkJ
CQkgCgkJCQkgCgkJCQkgCgoJaWR0eXBlX3QJcF9saWR0eXBlOwoJCQkJIAoJCQkJIAoJaWRfdAkJ
cF9saWQ7CSAKCglpZHR5cGVfdAlwX3JpZHR5cGU7CgkJCQkgCgkJCQkgCglpZF90CQlwX3JpZDsJ
IAp9IHByb2NzZXRfdDsKCiAKCgoKCgoKCgoKCgoKIyAxMjkgIi91c3IvaW5jbHVkZS9zeXMvcHJv
Y3NldC5oIiAzIDQKCgoKfQoKCgojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAzIDQK
CgoKCmV4dGVybiAiQyIgewoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gcGlkX3Qgd2FpdChpbnQgKik7CmV4dGVybiBwaWRfdCB3
YWl0cGlkKHBpZF90LCBpbnQgKiwgaW50KTsKCgpleHRlcm4gaW50IHdhaXRpZChpZHR5cGVfdCwg
aWRfdCwgc2lnaW5mb190ICosIGludCk7CmV4dGVybiBwaWRfdCB3YWl0MyhpbnQgKiwgaW50LCBz
dHJ1Y3QgcnVzYWdlICopOwoKCgoKZXh0ZXJuIHBpZF90IHdhaXQ0KHBpZF90LCBpbnQgKiwgaW50
LCBzdHJ1Y3QgcnVzYWdlICopOwoKCiMgMTE0ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMyA0
CgoKCgp9CgoKCiMgMjIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzIDQKCgoKIAoKCgojIDYx
ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNAoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCgoKCgoK
CgoKCgoKCgogCiMgOTQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CgoKIAojIDEwNSAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKCgoKCmV4dGVybiBpbnQgcmFuZF9yKHVuc2lnbmVkIGlu
dCAqKTsKCgpleHRlcm4gdm9pZCBfZXhpdGhhbmRsZSh2b2lkKTsKCgoKCmV4dGVybiBkb3VibGUg
ZHJhbmQ0OCh2b2lkKTsKZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4KHVuc2lnbmVkIHNob3J0ICopOwpl
eHRlcm4gbG9uZyBqcmFuZDQ4KHVuc2lnbmVkIHNob3J0ICopOwpleHRlcm4gdm9pZCBsY29uZzQ4
KHVuc2lnbmVkIHNob3J0ICopOwpleHRlcm4gbG9uZyBscmFuZDQ4KHZvaWQpOwpleHRlcm4gbG9u
ZyBtcmFuZDQ4KHZvaWQpOwpleHRlcm4gbG9uZyBucmFuZDQ4KHVuc2lnbmVkIHNob3J0ICopOwpl
eHRlcm4gdW5zaWduZWQgc2hvcnQgKnNlZWQ0OCh1bnNpZ25lZCBzaG9ydCAqKTsKZXh0ZXJuIHZv
aWQgc3JhbmQ0OChsb25nKTsKZXh0ZXJuIGludCBwdXRlbnYoY2hhciAqKTsKZXh0ZXJuIHZvaWQg
c2V0a2V5KGNvbnN0IGNoYXIgKik7CgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gdm9pZCBzd2FiKGNv
bnN0IGNoYXIgKiwgY2hhciAqLCBzc2l6ZV90KTsKCgoKCgpleHRlcm4gaW50CW1rc3RlbXAoY2hh
ciAqKTsKCgoKCmV4dGVybiBpbnQJbWtzdGVtcDY0KGNoYXIgKik7CgoKCgoKZXh0ZXJuIGxvbmcg
YTY0bChjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqZWN2dChkb3VibGUsIGludCwgaW50ICos
IGludCAqKTsKZXh0ZXJuIGNoYXIgKmZjdnQoZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKik7CmV4
dGVybiBjaGFyICpnY3Z0KGRvdWJsZSwgaW50LCBjaGFyICopOwpleHRlcm4gaW50IGdldHN1Ym9w
dChjaGFyICoqLCBjaGFyICpjb25zdCAqLCBjaGFyICoqKTsKZXh0ZXJuIGludCAgZ3JhbnRwdChp
bnQpOwpleHRlcm4gY2hhciAqaW5pdHN0YXRlKHVuc2lnbmVkLCBjaGFyICosIHNpemVfdCk7CmV4
dGVybiBjaGFyICpsNjRhKGxvbmcpOwpleHRlcm4gY2hhciAqbWt0ZW1wKGNoYXIgKik7CmV4dGVy
biBjaGFyICpwdHNuYW1lKGludCk7CmV4dGVybiBsb25nIHJhbmRvbSh2b2lkKTsKZXh0ZXJuIGNo
YXIgKnJlYWxwYXRoKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnNldHN0YXRl
KGNvbnN0IGNoYXIgKik7CmV4dGVybiB2b2lkIHNyYW5kb20odW5zaWduZWQpOwpleHRlcm4gaW50
IHR0eXNsb3Qodm9pZCk7CmV4dGVybiBpbnQgIHVubG9ja3B0KGludCk7CmV4dGVybiB2b2lkICp2
YWxsb2Moc2l6ZV90KTsKCgoKCmV4dGVybiBpbnQgZHVwMihpbnQsIGludCk7CmV4dGVybiBjaGFy
ICpxZWN2dChsb25nIGRvdWJsZSwgaW50LCBpbnQgKiwgaW50ICopOwpleHRlcm4gY2hhciAqcWZj
dnQobG9uZyBkb3VibGUsIGludCwgaW50ICosIGludCAqKTsKZXh0ZXJuIGNoYXIgKnFnY3Z0KGxv
bmcgZG91YmxlLCBpbnQsIGNoYXIgKik7CmV4dGVybiBjaGFyICpnZXRjd2QoY2hhciAqLCBzaXpl
X3QpOwpleHRlcm4gY29uc3QgY2hhciAqZ2V0ZXhlY25hbWUodm9pZCk7CmV4dGVybiBjaGFyICpn
ZXRsb2dpbih2b2lkKTsKZXh0ZXJuIGludCBnZXRvcHQoaW50LCBjaGFyICpjb25zdCAqLCBjb25z
dCBjaGFyICopOwpleHRlcm4gY2hhciAqb3B0YXJnOwpleHRlcm4gaW50IG9wdGluZCwgb3B0ZXJy
LCBvcHRvcHQ7CmV4dGVybiBjaGFyICpnZXRwYXNzKGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFy
ICpnZXRwYXNzcGhyYXNlKGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgZ2V0cHcodWlkX3QsIGNo
YXIgKik7CmV4dGVybiBpbnQgaXNhdHR5KGludCk7CmV4dGVybiB2b2lkICptZW1hbGlnbihzaXpl
X3QsIHNpemVfdCk7CmV4dGVybiBjaGFyICp0dHluYW1lKGludCk7CgojIDIwNyAiL3Vzci9pbmNs
dWRlL3N0ZGxpYi5oIiAzIDQKCgoKCiMgMzA1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNAoK
Cgp9CgoKCiMgNiAic2F2ZV9zbmFwLmMiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAx
IDMgNAogCiAKCiAKIAogCgogCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpc3RyaW5nLmgJMS4y
NAk5OS8wOC8xMCBTTUkiCQoKIyAxICIvdXNyL2luY2x1ZGUvaXNvL3N0cmluZ19pc28uaCIgMSAz
IDQKIAogCgogCiAKIAoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylz
dHJpbmdfaXNvLmgJMS4yCTk5LzExLzA5IFNNSSIKIAoKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gaW50IG1lbWNtcChjb25zdCB2b2lkICosIGNvbnN0IHZv
aWQgKiwgc2l6ZV90KTsKZXh0ZXJuIHZvaWQgKm1lbWNweSh2b2lkICosIGNvbnN0IHZvaWQgKiwg
c2l6ZV90KTsKZXh0ZXJuIHZvaWQgKm1lbW1vdmUodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVf
dCk7CmV4dGVybiB2b2lkICptZW1zZXQodm9pZCAqLCBpbnQsIHNpemVfdCk7CmV4dGVybiBjaGFy
ICpzdHJjYXQoY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHN0cmNtcChjb25zdCBj
aGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpzdHJjcHkoY2hhciAqLCBjb25zdCBj
aGFyICopOwpleHRlcm4gaW50IHN0cmNvbGwoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpl
eHRlcm4gc2l6ZV90IHN0cmNzcG4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4g
Y2hhciAqc3RyZXJyb3IoaW50KTsKZXh0ZXJuIHNpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqKTsK
ZXh0ZXJuIGNoYXIgKnN0cm5jYXQoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVy
biBpbnQgc3RybmNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJu
IGNoYXIgKnN0cm5jcHkoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBzaXpl
X3Qgc3Ryc3BuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnN0cnRv
ayhjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBzaXplX3Qgc3RyeGZybShjaGFyICosIGNv
bnN0IGNoYXIgKiwgc2l6ZV90KTsKIyAxMTEgIi91c3IvaW5jbHVkZS9pc28vc3RyaW5nX2lzby5o
IiAzIDQKCmV4dGVybiB2b2lkICptZW1jaHIoY29uc3Qgdm9pZCAqLCBpbnQsIHNpemVfdCk7CmV4
dGVybiBjaGFyICpzdHJjaHIoY29uc3QgY2hhciAqLCBpbnQpOwpleHRlcm4gY2hhciAqc3RycGJy
ayhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpzdHJyY2hyKGNvbnN0
IGNoYXIgKiwgaW50KTsKZXh0ZXJuIGNoYXIgKnN0cnN0cihjb25zdCBjaGFyICosIGNvbnN0IGNo
YXIgKik7CgoKIyAxNDQgIi91c3IvaW5jbHVkZS9pc28vc3RyaW5nX2lzby5oIiAzIDQKCgoKCgoK
Cn0KCgoKIyAxOCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMgNAoKCiAKCgoKIyA0OCAiL3Vz
ci9pbmNsdWRlL3N0cmluZy5oIiAzIDQKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCmV4dGVybiBjaGFy
ICpzdHJ0b2tfcihjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqKik7CgoKCgpleHRlcm4gdm9p
ZCAqbWVtY2NweSh2b2lkICosIGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOwoKCgoKZXh0ZXJu
IGNoYXIgKnN0cnNpZ25hbChpbnQpOwpleHRlcm4gaW50IGZmcyhpbnQpOwpleHRlcm4gaW50IHN0
cmNhc2VjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHN0cm5jYXNl
Y21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpleHRlcm4gc2l6ZV90IHN0
cmxjcHkoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBzaXplX3Qgc3RybGNh
dChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKCgoKCgpleHRlcm4gY2hhciAqc3RyZHVw
KGNvbnN0IGNoYXIgKik7CgoKIyAxMTAgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMyA0CgoKCn0K
CgoKIyA3ICJzYXZlX3NuYXAuYyIgMgoKIyAxICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMSAzIDQK
IAogCgogCiAKIAoKIAoKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIyllcnJuby5oCTEuMTYJOTkv
MDcvMjYgU01JIgkKCiAKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2Vycm5vLmgiIDEgMyA0CiAK
IAoKIAogCiAKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIyllcnJuby5oCTEuMjAJMDAvMDIvMTQgU01J
IgkKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoKIAoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiAKCgoKCgoKCgoKCiAK
CgoKIAoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKIAoJIAoKCgoK
CgoKCgoKCQkJCSAKCgoJIAoKCgoJCQkJIAoKCgoKCiAKCgoKCgoKCgoKCiAKCgoKCn0KCgoKIyAy
MyAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDIgMyA0CgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCgoK
CmV4dGVybiBpbnQgKl9fX2Vycm5vKCk7CgoKCgoKCgoKCgp9CgoKCiMgOCAic2F2ZV9zbmFwLmMi
IDIKCgoKIyAxICIuLi8uLi9pbmNsdWRlL2xpYmluYy9saWJ1dGlsLmgiIDEKCgogCgoKIyAxICIv
dXNyL29wZW53aW4vaW5jbHVkZS9YMTEvSW50cmluc2ljLmgiIDEKIAoKIAoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9vcGVud2lu
L2luY2x1ZGUvWDExL1hsaWIuaCIgMQogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoK
I3ByYWdtYSBpZGVudCAiQCgjKVhsaWIuaAkxLjEwCTAwLzEwLzEyIFNNSSIKCgoKCgoKCgoKCgoK
CgoKCgoKIyAxICIvdXNyL29wZW53aW4vaW5jbHVkZS9YMTEvWC5oIiAxCiAKCgoKIAoKCgoKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKCgoK
CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBYSUQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBNYXNrOwp0
eXBlZGVmIHVuc2lnbmVkIGxvbmcgQXRvbTsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFZpc3VhbElE
Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVGltZTsKCgoKCgoKCgoKdHlwZWRlZiBYSUQgV2luZG93
Owp0eXBlZGVmIFhJRCBEcmF3YWJsZTsKdHlwZWRlZiBYSUQgRm9udDsKdHlwZWRlZiBYSUQgUGl4
bWFwOwp0eXBlZGVmIFhJRCBDdXJzb3I7CnR5cGVkZWYgWElEIENvbG9ybWFwOwp0eXBlZGVmIFhJ
RCBHQ29udGV4dDsKdHlwZWRlZiBYSUQgS2V5U3ltOwoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIEtl
eUNvZGU7CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKIAoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKIAoK
CgoKCgoKCQkgICAgICAgCiAKCgoKCgoKCgoKCiAKCgoKCgogCgoKCgogCgoKCgoKIAoKCgoKIAoK
CgoKIAoKCgoKIAoKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgojIDM0
NSAiL3Vzci9vcGVud2luL2luY2x1ZGUvWDExL1guaCIKCgoKCgoKCgoKCgogCgoKCiAKIAoKCgoK
IAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoKIAoKCgoK
CiAKCgoKCgogCgoKCgogCgoKCgoKIAoKCgoKCgoKIAoKCgoKIAoKCgoKCiAKCgoKIAoKCgoKCgoK
CgoKCgoKCgoKCgogCgoKCgoKIAoKCgoKCgogCgoKCgoKIAoKCgoKCgogCgoKCgogCgoKCgogCgoK
CgoKCiAKCgoKCiAKCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK
IAoKCgoKCgogCgoKCiAKCgoKCgogCgoKCiAKCgoKCgogCgoKCgoKIAoKCgogCgoKCgoKIAoKCgoK
CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKIAoKCgoKIAoKCgogCgoK
CgogCgoKCgogCgoKCgoKCgoKCgoKIAoKCgoKCiMgNTEgIi91c3Ivb3Blbndpbi9pbmNsdWRlL1gx
MS9YbGliLmgiIDIKCgogCiMgMSAiL3Vzci9vcGVud2luL2luY2x1ZGUvWDExL1hmdW5jcHJvdG8u
aCIgMQogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgNTQgIi91c3Ivb3Blbndpbi9pbmNs
dWRlL1gxMS9YbGliLmgiIDIKCiMgMSAiL3Vzci9vcGVud2luL2luY2x1ZGUvWDExL1hvc2RlZnMu
aCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKICAKCgoKCgoKCiMgODYgIi91c3Ivb3Blbndpbi9pbmNsdWRlL1gx
MS9Yb3NkZWZzLmgiCgoKCgoKCgoKIyAxMDUgIi91c3Ivb3Blbndpbi9pbmNsdWRlL1gxMS9Yb3Nk
ZWZzLmgiCgoKCgoKCgoKCgoKCgoKIyA1NSAiL3Vzci9vcGVud2luL2luY2x1ZGUvWDExL1hsaWIu
aCIgMgoKCgoKCgoKCgojIDEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
bGFyaXMyLzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAoKCgoKCgogCgoKCgoKCgogCgog
CgoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJj
LXN1bi1zb2xhcmlzMi8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CgoKIAoKCgoKCiAKCgoK
CgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCgojIDEyNiAiL29wdC9tdnBsb2NhbC9saWIvZ2Nj
LWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoKCiAK
CgoKCiAKCiAKCgoKIyAxODcgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
bGFyaXMyLzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKCgoKCgoKIAoKCgoKIAoKCgojIDI2
OCAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zL2lu
Y2x1ZGUvc3RkZGVmLmgiIDMgNAoKCgoKCgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGludCAgd2lu
dF90OwoKCgoKIAoKIAoKIyAzMTcgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3Vu
LXNvbGFyaXMyLzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKCgoKCiAKCgoKCgoKCgoKCgoK
CiAKCgoKCgoKCiMgNjQgIi91c3Ivb3Blbndpbi9pbmNsdWRlL1gxMS9YbGliLmgiIDIKCgoKCgoK
dHlwZWRlZiBjaGFyICpYUG9pbnRlcjsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCnR5cGVkZWYgc3RydWN0IF9Y
RXh0RGF0YSB7CglpbnQgbnVtYmVyOwkJIAoJc3RydWN0IF9YRXh0RGF0YSAqbmV4dDsJIAoKCWlu
dCAoKmZyZWVfcHJpdmF0ZSkoc3RydWN0IF9YRXh0RGF0YSAqKTsJIAoKCgoJWFBvaW50ZXIgcHJp
dmF0ZV9kYXRhOwkgCn0gWEV4dERhdGE7CgogCgoKdHlwZWRlZiBzdHJ1Y3QgewkJIAoJaW50IGV4
dGVuc2lvbjsJCSAKCWludCBtYWpvcl9vcGNvZGU7CSAKCWludCBmaXJzdF9ldmVudDsJIAoJaW50
IGZpcnN0X2Vycm9yOwkgCn0gWEV4dENvZGVzOwoKIAoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBp
bnQgZGVwdGg7CiAgICBpbnQgYml0c19wZXJfcGl4ZWw7CiAgICBpbnQgc2NhbmxpbmVfcGFkOwp9
IFhQaXhtYXBGb3JtYXRWYWx1ZXM7CgoKIAoKCnR5cGVkZWYgc3RydWN0IHsKCWludCBmdW5jdGlv
bjsJCSAKCXVuc2lnbmVkIGxvbmcgcGxhbmVfbWFzazsgCgl1bnNpZ25lZCBsb25nIGZvcmVncm91
bmQ7IAoJdW5zaWduZWQgbG9uZyBiYWNrZ3JvdW5kOyAKCWludCBsaW5lX3dpZHRoOwkJIAoJaW50
IGxpbmVfc3R5bGU7CSAJIAoJaW50IGNhcF9zdHlsZTsJICAJIAoKCWludCBqb2luX3N0eWxlOwkg
CSAKCWludCBmaWxsX3N0eWxlOwkgCSAKCglpbnQgZmlsbF9ydWxlOwkgIAkgCglpbnQgYXJjX21v
ZGU7CQkgCglQaXhtYXAgdGlsZTsJCSAKCVBpeG1hcCBzdGlwcGxlOwkJIAoJaW50IHRzX3hfb3Jp
Z2luOwkgCglpbnQgdHNfeV9vcmlnaW47CiAgICAgICAgRm9udCBmb250OwkgICAgICAgICAKCWlu
dCBzdWJ3aW5kb3dfbW9kZTsgICAgICAKCWludCAgZ3JhcGhpY3NfZXhwb3N1cmVzOyAKCWludCBj
bGlwX3hfb3JpZ2luOwkgCglpbnQgY2xpcF95X29yaWdpbjsKCVBpeG1hcCBjbGlwX21hc2s7CSAK
CWludCBkYXNoX29mZnNldDsJIAoJY2hhciBkYXNoZXM7Cn0gWEdDVmFsdWVzOwoKIAoKCgoKdHlw
ZWRlZiBzdHJ1Y3QgX1hHQwoKCgoKCgoKKkdDOwoKIAoKCnR5cGVkZWYgc3RydWN0IHsKCVhFeHRE
YXRhICpleHRfZGF0YTsJIAoJVmlzdWFsSUQgdmlzdWFsaWQ7CSAKCglpbnQgY19jbGFzczsJCSAK
CgoKCXVuc2lnbmVkIGxvbmcgcmVkX21hc2ssIGdyZWVuX21hc2ssIGJsdWVfbWFzazsJIAoJaW50
IGJpdHNfcGVyX3JnYjsJIAoJaW50IG1hcF9lbnRyaWVzOwkgCn0gVmlzdWFsOwoKIAoKCQp0eXBl
ZGVmIHN0cnVjdCB7CglpbnQgZGVwdGg7CQkgCglpbnQgbnZpc3VhbHM7CQkgCglWaXN1YWwgKnZp
c3VhbHM7CSAKfSBEZXB0aDsKCiAKCgoKCgpzdHJ1Y3QgX1hEaXNwbGF5OwkJIAoKdHlwZWRlZiBz
dHJ1Y3QgewoJWEV4dERhdGEgKmV4dF9kYXRhOwkgCglzdHJ1Y3QgX1hEaXNwbGF5ICpkaXNwbGF5
OyAKCVdpbmRvdyByb290OwkJIAoJaW50IHdpZHRoLCBoZWlnaHQ7CSAKCWludCBtd2lkdGgsIG1o
ZWlnaHQ7CSAKCWludCBuZGVwdGhzOwkJIAoJRGVwdGggKmRlcHRoczsJCSAKCWludCByb290X2Rl
cHRoOwkJIAoJVmlzdWFsICpyb290X3Zpc3VhbDsJIAoJR0MgZGVmYXVsdF9nYzsJCSAKCUNvbG9y
bWFwIGNtYXA7CQkgCgl1bnNpZ25lZCBsb25nIHdoaXRlX3BpeGVsOwoJdW5zaWduZWQgbG9uZyBi
bGFja19waXhlbDsJIAoJaW50IG1heF9tYXBzLCBtaW5fbWFwczsJIAoJaW50IGJhY2tpbmdfc3Rv
cmU7CSAKCWludCAgc2F2ZV91bmRlcnM7CQoJbG9uZyByb290X2lucHV0X21hc2s7CSAKfSBTY3Jl
ZW47CgogCgoKdHlwZWRlZiBzdHJ1Y3QgewoJWEV4dERhdGEgKmV4dF9kYXRhOwkgCglpbnQgZGVw
dGg7CQkgCglpbnQgYml0c19wZXJfcGl4ZWw7CSAKCWludCBzY2FubGluZV9wYWQ7CSAKfSBTY3Jl
ZW5Gb3JtYXQ7CgogCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgUGl4bWFwIGJhY2tncm91bmRfcGl4
bWFwOwkgCiAgICB1bnNpZ25lZCBsb25nIGJhY2tncm91bmRfcGl4ZWw7CSAKICAgIFBpeG1hcCBi
b3JkZXJfcGl4bWFwOwkgCiAgICB1bnNpZ25lZCBsb25nIGJvcmRlcl9waXhlbDsJIAogICAgaW50
IGJpdF9ncmF2aXR5OwkJIAogICAgaW50IHdpbl9ncmF2aXR5OwkJIAogICAgaW50IGJhY2tpbmdf
c3RvcmU7CQkgCiAgICB1bnNpZ25lZCBsb25nIGJhY2tpbmdfcGxhbmVzOyAKICAgIHVuc2lnbmVk
IGxvbmcgYmFja2luZ19waXhlbDsgCiAgICBpbnQgIHNhdmVfdW5kZXI7CQkgCiAgICBsb25nIGV2
ZW50X21hc2s7CQkgCiAgICBsb25nIGRvX25vdF9wcm9wYWdhdGVfbWFzazsJIAogICAgaW50ICBv
dmVycmlkZV9yZWRpcmVjdDsJIAogICAgQ29sb3JtYXAgY29sb3JtYXA7CQkgCiAgICBDdXJzb3Ig
Y3Vyc29yOwkJIAp9IFhTZXRXaW5kb3dBdHRyaWJ1dGVzOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAg
aW50IHgsIHk7CQkJIAogICAgaW50IHdpZHRoLCBoZWlnaHQ7CQkgCiAgICBpbnQgYm9yZGVyX3dp
ZHRoOwkJIAogICAgaW50IGRlcHRoOyAgICAgICAgICAJIAogICAgVmlzdWFsICp2aXN1YWw7CQkg
CiAgICBXaW5kb3cgcm9vdDsgICAgICAgIAkgCgogICAgaW50IGNfY2xhc3M7CQkgCgoKCiAgICBp
bnQgYml0X2dyYXZpdHk7CQkgCiAgICBpbnQgd2luX2dyYXZpdHk7CQkgCiAgICBpbnQgYmFja2lu
Z19zdG9yZTsJCSAKICAgIHVuc2lnbmVkIGxvbmcgYmFja2luZ19wbGFuZXM7IAogICAgdW5zaWdu
ZWQgbG9uZyBiYWNraW5nX3BpeGVsOyAKICAgIGludCAgc2F2ZV91bmRlcjsJCSAKICAgIENvbG9y
bWFwIGNvbG9ybWFwOwkJIAogICAgaW50ICBtYXBfaW5zdGFsbGVkOwkJIAogICAgaW50IG1hcF9z
dGF0ZTsJCSAKICAgIGxvbmcgYWxsX2V2ZW50X21hc2tzOwkgCiAgICBsb25nIHlvdXJfZXZlbnRf
bWFzazsJIAogICAgbG9uZyBkb19ub3RfcHJvcGFnYXRlX21hc2s7ICAKICAgIGludCAgb3ZlcnJp
ZGVfcmVkaXJlY3Q7CSAKICAgIFNjcmVlbiAqc2NyZWVuOwkJIAp9IFhXaW5kb3dBdHRyaWJ1dGVz
OwoKIAoKCgoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IGZhbWlseTsJCSAKCWludCBsZW5ndGg7CQkg
CgljaGFyICphZGRyZXNzOwkJIAp9IFhIb3N0QWRkcmVzczsKCiAKCgp0eXBlZGVmIHN0cnVjdCBf
WEltYWdlIHsKICAgIGludCB3aWR0aCwgaGVpZ2h0OwkJIAogICAgaW50IHhvZmZzZXQ7CQkgCiAg
ICBpbnQgZm9ybWF0OwkJCSAKICAgIGNoYXIgKmRhdGE7CQkJIAogICAgaW50IGJ5dGVfb3JkZXI7
CQkgCiAgICBpbnQgYml0bWFwX3VuaXQ7CQkgCiAgICBpbnQgYml0bWFwX2JpdF9vcmRlcjsJIAog
ICAgaW50IGJpdG1hcF9wYWQ7CQkgCiAgICBpbnQgZGVwdGg7CQkJIAogICAgaW50IGJ5dGVzX3Bl
cl9saW5lOwkJIAogICAgaW50IGJpdHNfcGVyX3BpeGVsOwkJIAogICAgdW5zaWduZWQgbG9uZyBy
ZWRfbWFzazsJIAogICAgdW5zaWduZWQgbG9uZyBncmVlbl9tYXNrOwogICAgdW5zaWduZWQgbG9u
ZyBibHVlX21hc2s7CiAgICBYUG9pbnRlciBvYmRhdGE7CQkgCiAgICBzdHJ1Y3QgZnVuY3MgewkJ
IAoJc3RydWN0IF9YSW1hZ2UgKigqY3JlYXRlX2ltYWdlKSgKCQogICAgCXN0cnVjdCBfWERpc3Bs
YXkqICAgICAgICAgLAogICAgCVZpc3VhbCogICAgICAsCiAgICAJdW5zaWduZWQgaW50ICAgICAs
CiAgICAJaW50ICAgICAgICAgICwKICAgIAlpbnQgICAgICAgICAgLAogICAgCWNoYXIqICAgICAg
ICAsCiAgICAJdW5zaWduZWQgaW50ICAgICAsCiAgICAJdW5zaWduZWQgaW50ICAgICAsCiAgICAJ
aW50ICAgICAgICAgICwKICAgIAlpbnQgICAgICAgICAgCgkKCSk7CgoJaW50ICgqZGVzdHJveV9p
bWFnZSkgICAgICAgIChzdHJ1Y3QgX1hJbWFnZSAqKTsKCXVuc2lnbmVkIGxvbmcgKCpnZXRfcGl4
ZWwpICAoc3RydWN0IF9YSW1hZ2UgKiwgaW50LCBpbnQpOwoJaW50ICgqcHV0X3BpeGVsKSAgICAg
ICAgICAgIChzdHJ1Y3QgX1hJbWFnZSAqLCBpbnQsIGludCwgdW5zaWduZWQgbG9uZyk7CglzdHJ1
Y3QgX1hJbWFnZSAqKCpzdWJfaW1hZ2UpKHN0cnVjdCBfWEltYWdlICosIGludCwgaW50LCB1bnNp
Z25lZCBpbnQsIHVuc2lnbmVkIGludCk7CglpbnQgKCphZGRfcGl4ZWwpICAgICAgICAgICAgKHN0
cnVjdCBfWEltYWdlICosIGxvbmcpOwoKCgoKCgoKCX0gZjsKfSBYSW1hZ2U7CgogCgoKdHlwZWRl
ZiBzdHJ1Y3QgewogICAgaW50IHgsIHk7CiAgICBpbnQgd2lkdGgsIGhlaWdodDsKICAgIGludCBi
b3JkZXJfd2lkdGg7CiAgICBXaW5kb3cgc2libGluZzsKICAgIGludCBzdGFja19tb2RlOwp9IFhX
aW5kb3dDaGFuZ2VzOwoKIAoKCnR5cGVkZWYgc3RydWN0IHsKCXVuc2lnbmVkIGxvbmcgcGl4ZWw7
Cgl1bnNpZ25lZCBzaG9ydCByZWQsIGdyZWVuLCBibHVlOwoJY2hhciBmbGFnczsgICAKCWNoYXIg
cGFkOwp9IFhDb2xvcjsKCiAKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIHNob3J0IHgxLCB5MSwg
eDIsIHkyOwp9IFhTZWdtZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgc2hvcnQgeCwgeTsKfSBY
UG9pbnQ7CiAgICAKdHlwZWRlZiBzdHJ1Y3QgewogICAgc2hvcnQgeCwgeTsKICAgIHVuc2lnbmVk
IHNob3J0IHdpZHRoLCBoZWlnaHQ7Cn0gWFJlY3RhbmdsZTsKICAgIAp0eXBlZGVmIHN0cnVjdCB7
CiAgICBzaG9ydCB4LCB5OwogICAgdW5zaWduZWQgc2hvcnQgd2lkdGgsIGhlaWdodDsKICAgIHNo
b3J0IGFuZ2xlMSwgYW5nbGUyOwp9IFhBcmM7CgoKIAoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAg
IGludCBrZXlfY2xpY2tfcGVyY2VudDsKICAgICAgICBpbnQgYmVsbF9wZXJjZW50OwogICAgICAg
IGludCBiZWxsX3BpdGNoOwogICAgICAgIGludCBiZWxsX2R1cmF0aW9uOwogICAgICAgIGludCBs
ZWQ7CiAgICAgICAgaW50IGxlZF9tb2RlOwogICAgICAgIGludCBrZXk7CiAgICAgICAgaW50IGF1
dG9fcmVwZWF0X21vZGU7ICAgIAp9IFhLZXlib2FyZENvbnRyb2w7CgogCgp0eXBlZGVmIHN0cnVj
dCB7CiAgICAgICAgaW50IGtleV9jbGlja19wZXJjZW50OwoJaW50IGJlbGxfcGVyY2VudDsKCXVu
c2lnbmVkIGludCBiZWxsX3BpdGNoLCBiZWxsX2R1cmF0aW9uOwoJdW5zaWduZWQgbG9uZyBsZWRf
bWFzazsKCWludCBnbG9iYWxfYXV0b19yZXBlYXQ7CgljaGFyIGF1dG9fcmVwZWF0c1szMl07Cn0g
WEtleWJvYXJkU3RhdGU7CgogCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgVGltZSB0aW1lOwoJ
c2hvcnQgeCwgeTsKfSBYVGltZUNvb3JkOwoKIAoKdHlwZWRlZiBzdHJ1Y3QgewogCWludCBtYXhf
a2V5cGVybW9kOwkgCiAJS2V5Q29kZSAqbW9kaWZpZXJtYXA7CSAKfSBYTW9kaWZpZXJLZXltYXA7
CgoKIAoKCgoKCnR5cGVkZWYgc3RydWN0IF9YRGlzcGxheSBEaXNwbGF5OwoKCnN0cnVjdCBfWFBy
aXZhdGU7CQkgCnN0cnVjdCBfWHJtSGFzaEJ1Y2tldFJlYzsKCnR5cGVkZWYgc3RydWN0IAoKCgp7
CglYRXh0RGF0YSAqZXh0X2RhdGE7CSAKCXN0cnVjdCBfWFByaXZhdGUgKnByaXZhdGUxOwoJaW50
IGZkOwkJCSAKCWludCBwcml2YXRlMjsKCWludCBwcm90b19tYWpvcl92ZXJzaW9uOyAKCWludCBw
cm90b19taW5vcl92ZXJzaW9uOyAKCWNoYXIgKnZlbmRvcjsJCSAKICAgICAgICBYSUQgcHJpdmF0
ZTM7CglYSUQgcHJpdmF0ZTQ7CglYSUQgcHJpdmF0ZTU7CglpbnQgcHJpdmF0ZTY7CgoJWElEICgq
cmVzb3VyY2VfYWxsb2MpKHN0cnVjdCBfWERpc3BsYXkgKik7IAoKCgoJaW50IGJ5dGVfb3JkZXI7
CQkgCglpbnQgYml0bWFwX3VuaXQ7CSAKCWludCBiaXRtYXBfcGFkOwkJIAoJaW50IGJpdG1hcF9i
aXRfb3JkZXI7CSAKCWludCBuZm9ybWF0czsJCSAKCVNjcmVlbkZvcm1hdCAqcGl4bWFwX2Zvcm1h
dDsJIAoJaW50IHByaXZhdGU4OwoJaW50IHJlbGVhc2U7CQkgCglzdHJ1Y3QgX1hQcml2YXRlICpw
cml2YXRlOSwgKnByaXZhdGUxMDsKCWludCBxbGVuOwkJIAoJdW5zaWduZWQgbG9uZyBsYXN0X3Jl
cXVlc3RfcmVhZDsgIAoJdW5zaWduZWQgbG9uZyByZXF1ZXN0OwkgCglYUG9pbnRlciBwcml2YXRl
MTE7CglYUG9pbnRlciBwcml2YXRlMTI7CglYUG9pbnRlciBwcml2YXRlMTM7CglYUG9pbnRlciBw
cml2YXRlMTQ7Cgl1bnNpZ25lZCBtYXhfcmVxdWVzdF9zaXplOyAgCglzdHJ1Y3QgX1hybUhhc2hC
dWNrZXRSZWMgKmRiOwoJaW50ICgqcHJpdmF0ZTE1KSgpOwoJY2hhciAqZGlzcGxheV9uYW1lOwkg
CglpbnQgZGVmYXVsdF9zY3JlZW47CSAKCWludCBuc2NyZWVuczsJCSAKCVNjcmVlbiAqc2NyZWVu
czsJIAoJdW5zaWduZWQgbG9uZyBtb3Rpb25fYnVmZmVyOwkgCgl1bnNpZ25lZCBsb25nIHByaXZh
dGUxNjsKCWludCBtaW5fa2V5Y29kZTsJIAoJaW50IG1heF9rZXljb2RlOwkgCglYUG9pbnRlciBw
cml2YXRlMTc7CglYUG9pbnRlciBwcml2YXRlMTg7CglpbnQgcHJpdmF0ZTE5OwoJY2hhciAqeGRl
ZmF1bHRzOwkgCgkgCn0KCgoKKl9YUHJpdkRpc3BsYXk7CgoKCgoKIAoKCnR5cGVkZWYgc3RydWN0
IHsKCWludCB0eXBlOwkJIAoJdW5zaWduZWQgbG9uZyBzZXJpYWw7CSAKCWludCAgc2VuZF9ldmVu
dDsJIAoJRGlzcGxheSAqZGlzcGxheTsJIAoJV2luZG93IHdpbmRvdzsJICAgICAgICAgCglXaW5k
b3cgcm9vdDsJICAgICAgICAgCglXaW5kb3cgc3Vid2luZG93OwkgCglUaW1lIHRpbWU7CQkgCglp
bnQgeCwgeTsJCSAKCWludCB4X3Jvb3QsIHlfcm9vdDsJIAoJdW5zaWduZWQgaW50IHN0YXRlOwkg
Cgl1bnNpZ25lZCBpbnQga2V5Y29kZTsJIAoJaW50ICBzYW1lX3NjcmVlbjsJIAp9IFhLZXlFdmVu
dDsKdHlwZWRlZiBYS2V5RXZlbnQgWEtleVByZXNzZWRFdmVudDsKdHlwZWRlZiBYS2V5RXZlbnQg
WEtleVJlbGVhc2VkRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgdHlwZTsJCSAKCXVuc2ln
bmVkIGxvbmcgc2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7CSAKCURpc3BsYXkgKmRpc3BsYXk7
CSAKCVdpbmRvdyB3aW5kb3c7CSAgICAgICAgIAoJV2luZG93IHJvb3Q7CSAgICAgICAgIAoJV2lu
ZG93IHN1YndpbmRvdzsJIAoJVGltZSB0aW1lOwkJIAoJaW50IHgsIHk7CQkgCglpbnQgeF9yb290
LCB5X3Jvb3Q7CSAKCXVuc2lnbmVkIGludCBzdGF0ZTsJIAoJdW5zaWduZWQgaW50IGJ1dHRvbjsJ
IAoJaW50ICBzYW1lX3NjcmVlbjsJIAp9IFhCdXR0b25FdmVudDsKdHlwZWRlZiBYQnV0dG9uRXZl
bnQgWEJ1dHRvblByZXNzZWRFdmVudDsKdHlwZWRlZiBYQnV0dG9uRXZlbnQgWEJ1dHRvblJlbGVh
c2VkRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgdHlwZTsJCSAKCXVuc2lnbmVkIGxvbmcg
c2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7CSAKCURpc3BsYXkgKmRpc3BsYXk7CSAKCVdpbmRv
dyB3aW5kb3c7CSAgICAgICAgIAoJV2luZG93IHJvb3Q7CSAgICAgICAgIAoJV2luZG93IHN1Yndp
bmRvdzsJIAoJVGltZSB0aW1lOwkJIAoJaW50IHgsIHk7CQkgCglpbnQgeF9yb290LCB5X3Jvb3Q7
CSAKCXVuc2lnbmVkIGludCBzdGF0ZTsJIAoJY2hhciBpc19oaW50OwkJIAoJaW50ICBzYW1lX3Nj
cmVlbjsJIAp9IFhNb3Rpb25FdmVudDsKdHlwZWRlZiBYTW90aW9uRXZlbnQgWFBvaW50ZXJNb3Zl
ZEV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHR5cGU7CQkgCgl1bnNpZ25lZCBsb25nIHNl
cmlhbDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cg
d2luZG93OwkgICAgICAgICAKCVdpbmRvdyByb290OwkgICAgICAgICAKCVdpbmRvdyBzdWJ3aW5k
b3c7CSAKCVRpbWUgdGltZTsJCSAKCWludCB4LCB5OwkJIAoJaW50IHhfcm9vdCwgeV9yb290Owkg
CglpbnQgbW9kZTsJCSAKCWludCBkZXRhaWw7CgkgCgoKCglpbnQgIHNhbWVfc2NyZWVuOwkgCglp
bnQgIGZvY3VzOwkJIAoJdW5zaWduZWQgaW50IHN0YXRlOwkgCn0gWENyb3NzaW5nRXZlbnQ7CnR5
cGVkZWYgWENyb3NzaW5nRXZlbnQgWEVudGVyV2luZG93RXZlbnQ7CnR5cGVkZWYgWENyb3NzaW5n
RXZlbnQgWExlYXZlV2luZG93RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgdHlwZTsJCSAK
CXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7CSAKCURpc3BsYXkgKmRp
c3BsYXk7CSAKCVdpbmRvdyB3aW5kb3c7CQkgCglpbnQgbW9kZTsJCSAKCWludCBkZXRhaWw7Cgkg
CgoKCgp9IFhGb2N1c0NoYW5nZUV2ZW50Owp0eXBlZGVmIFhGb2N1c0NoYW5nZUV2ZW50IFhGb2N1
c0luRXZlbnQ7CnR5cGVkZWYgWEZvY3VzQ2hhbmdlRXZlbnQgWEZvY3VzT3V0RXZlbnQ7CgogCnR5
cGVkZWYgc3RydWN0IHsKCWludCB0eXBlOwoJdW5zaWduZWQgbG9uZyBzZXJpYWw7CSAKCWludCAg
c2VuZF9ldmVudDsJIAoJRGlzcGxheSAqZGlzcGxheTsJIAoJV2luZG93IHdpbmRvdzsKCWNoYXIg
a2V5X3ZlY3RvclszMl07Cn0gWEtleW1hcEV2ZW50OwkKCnR5cGVkZWYgc3RydWN0IHsKCWludCB0
eXBlOwoJdW5zaWduZWQgbG9uZyBzZXJpYWw7CSAKCWludCAgc2VuZF9ldmVudDsJIAoJRGlzcGxh
eSAqZGlzcGxheTsJIAoJV2luZG93IHdpbmRvdzsKCWludCB4LCB5OwoJaW50IHdpZHRoLCBoZWln
aHQ7CglpbnQgY291bnQ7CQkgCn0gWEV4cG9zZUV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50
IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNw
bGF5ICpkaXNwbGF5OwkgCglEcmF3YWJsZSBkcmF3YWJsZTsKCWludCB4LCB5OwoJaW50IHdpZHRo
LCBoZWlnaHQ7CglpbnQgY291bnQ7CQkgCglpbnQgbWFqb3JfY29kZTsJCSAKCWludCBtaW5vcl9j
b2RlOwkJIAp9IFhHcmFwaGljc0V4cG9zZUV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHR5
cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNwbGF5
ICpkaXNwbGF5OwkgCglEcmF3YWJsZSBkcmF3YWJsZTsKCWludCBtYWpvcl9jb2RlOwkJIAoJaW50
IG1pbm9yX2NvZGU7CQkgCn0gWE5vRXhwb3NlRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQg
dHlwZTsKCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7CSAKCURpc3Bs
YXkgKmRpc3BsYXk7CSAKCVdpbmRvdyB3aW5kb3c7CglpbnQgc3RhdGU7CQkgCn0gWFZpc2liaWxp
dHlFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKCWludCB0eXBlOwoJdW5zaWduZWQgbG9uZyBzZXJp
YWw7CSAKCWludCAgc2VuZF9ldmVudDsJIAoJRGlzcGxheSAqZGlzcGxheTsJIAoJV2luZG93IHBh
cmVudDsJCSAKCVdpbmRvdyB3aW5kb3c7CQkgCglpbnQgeCwgeTsJCSAKCWludCB3aWR0aCwgaGVp
Z2h0OwkgCglpbnQgYm9yZGVyX3dpZHRoOwkgCglpbnQgIG92ZXJyaWRlX3JlZGlyZWN0OwkgCn0g
WENyZWF0ZVdpbmRvd0V2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25l
ZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5Owkg
CglXaW5kb3cgZXZlbnQ7CglXaW5kb3cgd2luZG93Owp9IFhEZXN0cm95V2luZG93RXZlbnQ7Cgp0
eXBlZGVmIHN0cnVjdCB7CglpbnQgdHlwZTsKCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQg
IHNlbmRfZXZlbnQ7CSAKCURpc3BsYXkgKmRpc3BsYXk7CSAKCVdpbmRvdyBldmVudDsKCVdpbmRv
dyB3aW5kb3c7CglpbnQgIGZyb21fY29uZmlndXJlOwp9IFhVbm1hcEV2ZW50OwoKdHlwZWRlZiBz
dHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2
ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgZXZlbnQ7CglXaW5kb3cgd2luZG93
OwoJaW50ICBvdmVycmlkZV9yZWRpcmVjdDsJIAp9IFhNYXBFdmVudDsKCnR5cGVkZWYgc3RydWN0
IHsKCWludCB0eXBlOwoJdW5zaWduZWQgbG9uZyBzZXJpYWw7CSAKCWludCAgc2VuZF9ldmVudDsJ
IAoJRGlzcGxheSAqZGlzcGxheTsJIAoJV2luZG93IHBhcmVudDsKCVdpbmRvdyB3aW5kb3c7Cn0g
WE1hcFJlcXVlc3RFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKCWludCB0eXBlOwoJdW5zaWduZWQg
bG9uZyBzZXJpYWw7CSAKCWludCAgc2VuZF9ldmVudDsJIAoJRGlzcGxheSAqZGlzcGxheTsJIAoJ
V2luZG93IGV2ZW50OwoJV2luZG93IHdpbmRvdzsKCVdpbmRvdyBwYXJlbnQ7CglpbnQgeCwgeTsK
CWludCAgb3ZlcnJpZGVfcmVkaXJlY3Q7Cn0gWFJlcGFyZW50RXZlbnQ7Cgp0eXBlZGVmIHN0cnVj
dCB7CglpbnQgdHlwZTsKCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7
CSAKCURpc3BsYXkgKmRpc3BsYXk7CSAKCVdpbmRvdyBldmVudDsKCVdpbmRvdyB3aW5kb3c7Cglp
bnQgeCwgeTsKCWludCB3aWR0aCwgaGVpZ2h0OwoJaW50IGJvcmRlcl93aWR0aDsKCVdpbmRvdyBh
Ym92ZTsKCWludCAgb3ZlcnJpZGVfcmVkaXJlY3Q7Cn0gWENvbmZpZ3VyZUV2ZW50OwoKdHlwZWRl
ZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5k
X2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgZXZlbnQ7CglXaW5kb3cgd2lu
ZG93OwoJaW50IHgsIHk7Cn0gWEdyYXZpdHlFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKCWludCB0
eXBlOwoJdW5zaWduZWQgbG9uZyBzZXJpYWw7CSAKCWludCAgc2VuZF9ldmVudDsJIAoJRGlzcGxh
eSAqZGlzcGxheTsJIAoJV2luZG93IHdpbmRvdzsKCWludCB3aWR0aCwgaGVpZ2h0Owp9IFhSZXNp
emVSZXF1ZXN0RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgdHlwZTsKCXVuc2lnbmVkIGxv
bmcgc2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7CSAKCURpc3BsYXkgKmRpc3BsYXk7CSAKCVdp
bmRvdyBwYXJlbnQ7CglXaW5kb3cgd2luZG93OwoJaW50IHgsIHk7CglpbnQgd2lkdGgsIGhlaWdo
dDsKCWludCBib3JkZXJfd2lkdGg7CglXaW5kb3cgYWJvdmU7CglpbnQgZGV0YWlsOwkJIAoJdW5z
aWduZWQgbG9uZyB2YWx1ZV9tYXNrOwp9IFhDb25maWd1cmVSZXF1ZXN0RXZlbnQ7Cgp0eXBlZGVm
IHN0cnVjdCB7CglpbnQgdHlwZTsKCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQgIHNlbmRf
ZXZlbnQ7CSAKCURpc3BsYXkgKmRpc3BsYXk7CSAKCVdpbmRvdyBldmVudDsKCVdpbmRvdyB3aW5k
b3c7CglpbnQgcGxhY2U7CQkgCn0gWENpcmN1bGF0ZUV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJ
aW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglE
aXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgcGFyZW50OwoJV2luZG93IHdpbmRvdzsKCWludCBw
bGFjZTsJCSAKfSBYQ2lyY3VsYXRlUmVxdWVzdEV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50
IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNw
bGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgd2luZG93OwoJQXRvbSBhdG9tOwoJVGltZSB0aW1lOwoJ
aW50IHN0YXRlOwkJIAp9IFhQcm9wZXJ0eUV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHR5
cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNwbGF5
ICpkaXNwbGF5OwkgCglXaW5kb3cgd2luZG93OwoJQXRvbSBzZWxlY3Rpb247CglUaW1lIHRpbWU7
Cn0gWFNlbGVjdGlvbkNsZWFyRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgdHlwZTsKCXVu
c2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7CSAKCURpc3BsYXkgKmRpc3Bs
YXk7CSAKCVdpbmRvdyBvd25lcjsKCVdpbmRvdyByZXF1ZXN0b3I7CglBdG9tIHNlbGVjdGlvbjsK
CUF0b20gdGFyZ2V0OwoJQXRvbSBwcm9wZXJ0eTsKCVRpbWUgdGltZTsKfSBYU2VsZWN0aW9uUmVx
dWVzdEV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNl
cmlhbDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cg
cmVxdWVzdG9yOwoJQXRvbSBzZWxlY3Rpb247CglBdG9tIHRhcmdldDsKCUF0b20gcHJvcGVydHk7
CQkgCglUaW1lIHRpbWU7Cn0gWFNlbGVjdGlvbkV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50
IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNw
bGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgd2luZG93OwoJQ29sb3JtYXAgY29sb3JtYXA7CSAKCglp
bnQgIGNfbmV3OwkJIAoKCgoJaW50IHN0YXRlOwkJIAp9IFhDb2xvcm1hcEV2ZW50OwoKdHlwZWRl
ZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5k
X2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgd2luZG93OwoJQXRvbSBtZXNz
YWdlX3R5cGU7CglpbnQgZm9ybWF0OwoJdW5pb24gewoJCWNoYXIgYlsyMF07CgkJc2hvcnQgc1sx
MF07CgkJbG9uZyBsWzVdOwoJCX0gZGF0YTsKfSBYQ2xpZW50TWVzc2FnZUV2ZW50OwoKdHlwZWRl
ZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5k
X2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgd2luZG93OwkJIAoJaW50IHJl
cXVlc3Q7CQkgCgoJaW50IGZpcnN0X2tleWNvZGU7CSAKCWludCBjb3VudDsJCSAKfSBYTWFwcGlu
Z0V2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHR5cGU7CglEaXNwbGF5ICpkaXNwbGF5Owkg
CglYSUQgcmVzb3VyY2VpZDsJCSAKCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCgl1bnNpZ25lZCBj
aGFyIGVycm9yX2NvZGU7CSAKCXVuc2lnbmVkIGNoYXIgcmVxdWVzdF9jb2RlOwkgCgl1bnNpZ25l
ZCBjaGFyIG1pbm9yX2NvZGU7CSAKfSBYRXJyb3JFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKCWlu
dCB0eXBlOwoJdW5zaWduZWQgbG9uZyBzZXJpYWw7CSAKCWludCAgc2VuZF9ldmVudDsJIAoJRGlz
cGxheSAqZGlzcGxheTsgCglXaW5kb3cgd2luZG93OwkgCn0gWEFueUV2ZW50OwoKIAoKCgp0eXBl
ZGVmIHVuaW9uIF9YRXZlbnQgewogICAgICAgIGludCB0eXBlOwkJIAoJWEFueUV2ZW50IHhhbnk7
CglYS2V5RXZlbnQgeGtleTsKCVhCdXR0b25FdmVudCB4YnV0dG9uOwoJWE1vdGlvbkV2ZW50IHht
b3Rpb247CglYQ3Jvc3NpbmdFdmVudCB4Y3Jvc3Npbmc7CglYRm9jdXNDaGFuZ2VFdmVudCB4Zm9j
dXM7CglYRXhwb3NlRXZlbnQgeGV4cG9zZTsKCVhHcmFwaGljc0V4cG9zZUV2ZW50IHhncmFwaGlj
c2V4cG9zZTsKCVhOb0V4cG9zZUV2ZW50IHhub2V4cG9zZTsKCVhWaXNpYmlsaXR5RXZlbnQgeHZp
c2liaWxpdHk7CglYQ3JlYXRlV2luZG93RXZlbnQgeGNyZWF0ZXdpbmRvdzsKCVhEZXN0cm95V2lu
ZG93RXZlbnQgeGRlc3Ryb3l3aW5kb3c7CglYVW5tYXBFdmVudCB4dW5tYXA7CglYTWFwRXZlbnQg
eG1hcDsKCVhNYXBSZXF1ZXN0RXZlbnQgeG1hcHJlcXVlc3Q7CglYUmVwYXJlbnRFdmVudCB4cmVw
YXJlbnQ7CglYQ29uZmlndXJlRXZlbnQgeGNvbmZpZ3VyZTsKCVhHcmF2aXR5RXZlbnQgeGdyYXZp
dHk7CglYUmVzaXplUmVxdWVzdEV2ZW50IHhyZXNpemVyZXF1ZXN0OwoJWENvbmZpZ3VyZVJlcXVl
c3RFdmVudCB4Y29uZmlndXJlcmVxdWVzdDsKCVhDaXJjdWxhdGVFdmVudCB4Y2lyY3VsYXRlOwoJ
WENpcmN1bGF0ZVJlcXVlc3RFdmVudCB4Y2lyY3VsYXRlcmVxdWVzdDsKCVhQcm9wZXJ0eUV2ZW50
IHhwcm9wZXJ0eTsKCVhTZWxlY3Rpb25DbGVhckV2ZW50IHhzZWxlY3Rpb25jbGVhcjsKCVhTZWxl
Y3Rpb25SZXF1ZXN0RXZlbnQgeHNlbGVjdGlvbnJlcXVlc3Q7CglYU2VsZWN0aW9uRXZlbnQgeHNl
bGVjdGlvbjsKCVhDb2xvcm1hcEV2ZW50IHhjb2xvcm1hcDsKCVhDbGllbnRNZXNzYWdlRXZlbnQg
eGNsaWVudDsKCVhNYXBwaW5nRXZlbnQgeG1hcHBpbmc7CglYRXJyb3JFdmVudCB4ZXJyb3I7CglY
S2V5bWFwRXZlbnQgeGtleW1hcDsKCWxvbmcgcGFkWzI0XTsKfSBYRXZlbnQ7CgoKCgogCgoKdHlw
ZWRlZiBzdHJ1Y3QgewogICAgc2hvcnQJbGJlYXJpbmc7CSAKICAgIHNob3J0CXJiZWFyaW5nOwkg
CiAgICBzaG9ydAl3aWR0aDsJCSAKICAgIHNob3J0CWFzY2VudDsJCSAKICAgIHNob3J0CWRlc2Nl
bnQ7CSAKICAgIHVuc2lnbmVkIHNob3J0IGF0dHJpYnV0ZXM7CSAKfSBYQ2hhclN0cnVjdDsKCiAK
CgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQXRvbSBuYW1lOwogICAgdW5zaWduZWQgbG9uZyBjYXJk
MzI7Cn0gWEZvbnRQcm9wOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgWEV4dERhdGEJKmV4dF9kYXRh
OwkgCiAgICBGb250ICAgICAgICBmaWQ7ICAgICAgICAgICAgIAogICAgdW5zaWduZWQJZGlyZWN0
aW9uOwkgCiAgICB1bnNpZ25lZAltaW5fY2hhcl9vcl9ieXRlMjsgCiAgICB1bnNpZ25lZAltYXhf
Y2hhcl9vcl9ieXRlMjsgCiAgICB1bnNpZ25lZAltaW5fYnl0ZTE7CSAKICAgIHVuc2lnbmVkCW1h
eF9ieXRlMTsJIAogICAgaW50IAlhbGxfY2hhcnNfZXhpc3Q7IAogICAgdW5zaWduZWQJZGVmYXVs
dF9jaGFyOwkgCiAgICBpbnQgICAgICAgICBuX3Byb3BlcnRpZXM7ICAgIAogICAgWEZvbnRQcm9w
CSpwcm9wZXJ0aWVzOwkgCiAgICBYQ2hhclN0cnVjdAltaW5fYm91bmRzOwkgCiAgICBYQ2hhclN0
cnVjdAltYXhfYm91bmRzOwkgCiAgICBYQ2hhclN0cnVjdAkqcGVyX2NoYXI7CSAKICAgIGludAkJ
YXNjZW50OwkJIAogICAgaW50CQlkZXNjZW50OwkgCn0gWEZvbnRTdHJ1Y3Q7CgogCgoKdHlwZWRl
ZiBzdHJ1Y3QgewogICAgY2hhciAqY2hhcnM7CQkgCiAgICBpbnQgbmNoYXJzOwkJCSAKICAgIGlu
dCBkZWx0YTsJCQkgCiAgICBGb250IGZvbnQ7CQkJIAp9IFhUZXh0SXRlbTsKCnR5cGVkZWYgc3Ry
dWN0IHsJCSAKICAgIHVuc2lnbmVkIGNoYXIgYnl0ZTE7CiAgICB1bnNpZ25lZCBjaGFyIGJ5dGUy
Owp9IFhDaGFyMmI7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBYQ2hhcjJiICpjaGFyczsJCSAKICAg
IGludCBuY2hhcnM7CQkJIAogICAgaW50IGRlbHRhOwkJCSAKICAgIEZvbnQgZm9udDsJCQkgCn0g
WFRleHRJdGVtMTY7CgoKdHlwZWRlZiB1bmlvbiB7IERpc3BsYXkgKmRpc3BsYXk7CgkJR0MgZ2M7
CgkJVmlzdWFsICp2aXN1YWw7CgkJU2NyZWVuICpzY3JlZW47CgkJU2NyZWVuRm9ybWF0ICpwaXht
YXBfZm9ybWF0OwoJCVhGb250U3RydWN0ICpmb250OyB9IFhFRGF0YU9iamVjdDsKCnR5cGVkZWYg
c3RydWN0IHsKICAgIFhSZWN0YW5nbGUgICAgICBtYXhfaW5rX2V4dGVudDsKICAgIFhSZWN0YW5n
bGUgICAgICBtYXhfbG9naWNhbF9leHRlbnQ7Cn0gWEZvbnRTZXRFeHRlbnRzOwoKdHlwZWRlZiBz
dHJ1Y3QgX1hPTSAqWE9NOwp0eXBlZGVmIHN0cnVjdCBfWE9DICpYT0MsICpYRm9udFNldDsKCnR5
cGVkZWYgdm9pZCAoKlhPTVByb2MpKAoKCVhPQywgWFBvaW50ZXIsIFhQb2ludGVyCgopOwoKdHlw
ZWRlZiBzdHJ1Y3QgewogICAgY2hhciAgICAgICAgICAgKmNoYXJzOwogICAgaW50ICAgICAgICAg
ICAgIG5jaGFyczsKICAgIGludCAgICAgICAgICAgICBkZWx0YTsKICAgIFhGb250U2V0ICAgICAg
ICBmb250X3NldDsKfSBYbWJUZXh0SXRlbTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIHdjaGFyX3Qg
ICAgICAgICpjaGFyczsKICAgIGludCAgICAgICAgICAgICBuY2hhcnM7CiAgICBpbnQgICAgICAg
ICAgICAgZGVsdGE7CiAgICBYRm9udFNldCAgICAgICAgZm9udF9zZXQ7Cn0gWHdjVGV4dEl0ZW07
CgoKCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIGludCBjaGFyc2V0X2NvdW50OwogICAg
Y2hhciAqKmNoYXJzZXRfbGlzdDsKfSBYT01DaGFyU2V0TGlzdDsKCnR5cGVkZWYgZW51bSB7CiAg
ICBYT01PcmllbnRhdGlvbl9MVFJfVFRCLAogICAgWE9NT3JpZW50YXRpb25fUlRMX1RUQiwKICAg
IFhPTU9yaWVudGF0aW9uX1RUQl9MVFIsCiAgICBYT01PcmllbnRhdGlvbl9UVEJfUlRMLAogICAg
WE9NT3JpZW50YXRpb25fQ29udGV4dAp9IFhPcmllbnRhdGlvbjsKCnR5cGVkZWYgc3RydWN0IHsK
ICAgIGludCBudW1fb3JpZW50YXRpb247CiAgICBYT3JpZW50YXRpb24gKm9yaWVudGF0aW9uOwkg
Cn0gWE9NT3JpZW50YXRpb247Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgbnVtX2ZvbnQ7CiAg
ICBYRm9udFN0cnVjdCAqKmZvbnRfc3RydWN0X2xpc3Q7CiAgICBjaGFyICoqZm9udF9uYW1lX2xp
c3Q7Cn0gWE9NRm9udEluZm87CgoKdHlwZWRlZiBzdHJ1Y3QgX1hJTSAqWElNOwp0eXBlZGVmIHN0
cnVjdCBfWElDICpYSUM7Cgp0eXBlZGVmIHZvaWQgKCpYSU1Qcm9jKSgKCglYSUMsIFhQb2ludGVy
LCBYUG9pbnRlcgoKKTsKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBYSU1TdHlsZTsKCnR5cGVkZWYg
c3RydWN0IHsKICAgIHVuc2lnbmVkIHNob3J0IGNvdW50X3N0eWxlczsKICAgIFhJTVN0eWxlICpz
dXBwb3J0ZWRfc3R5bGVzOwp9IFhJTVN0eWxlczsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHZvaWQgKlhWYU5lc3Rl
ZExpc3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBYUG9pbnRlciBjbGllbnRfZGF0YTsKICAg
IFhJTVByb2MgY2FsbGJhY2s7Cn0gWElNQ2FsbGJhY2s7Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg
WElNRmVlZGJhY2s7CgoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX1hJTVRleHQgewogICAgdW5z
aWduZWQgc2hvcnQgbGVuZ3RoOwogICAgWElNRmVlZGJhY2sgKmZlZWRiYWNrOwogICAgaW50ICBl
bmNvZGluZ19pc193Y2hhcjsgCiAgICB1bmlvbiB7CgljaGFyICptdWx0aV9ieXRlOwoJd2NoYXJf
dCAqd2lkZV9jaGFyOwogICAgfSBzdHJpbmc7IAp9IFhJTVRleHQ7Cgp0eXBlZGVmCXVuc2lnbmVk
IGxvbmcJIFhJTVByZWVkaXRTdGF0ZTsKCgoKCgp0eXBlZGVmCXN0cnVjdAlfWElNUHJlZWRpdFN0
YXRlTm90aWZ5Q2FsbGJhY2tTdHJ1Y3QgewogICAgWElNUHJlZWRpdFN0YXRlIHN0YXRlOwp9IFhJ
TVByZWVkaXRTdGF0ZU5vdGlmeUNhbGxiYWNrU3RydWN0OwoKdHlwZWRlZgl1bnNpZ25lZCBsb25n
CSBYSU1SZXNldFN0YXRlOwoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFhJTVN0cmluZ0NvbnZl
cnNpb25GZWVkYmFjazsKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBfWElNU3RyaW5nQ29udmVyc2lv
blRleHQgewogICAgdW5zaWduZWQgc2hvcnQgbGVuZ3RoOwogICAgWElNU3RyaW5nQ29udmVyc2lv
bkZlZWRiYWNrICpmZWVkYmFjazsKICAgIGludCAgZW5jb2RpbmdfaXNfd2NoYXI7IAogICAgdW5p
b24gewoJY2hhciAqbWJzOwoJd2NoYXJfdCAqd2NzOwogICAgfSBzdHJpbmc7IAp9IFhJTVN0cmlu
Z0NvbnZlcnNpb25UZXh0OwoKdHlwZWRlZgl1bnNpZ25lZCBzaG9ydAlYSU1TdHJpbmdDb252ZXJz
aW9uUG9zaXRpb247Cgp0eXBlZGVmCXVuc2lnbmVkIHNob3J0CVhJTVN0cmluZ0NvbnZlcnNpb25U
eXBlOwoKCgoKCgp0eXBlZGVmCXVuc2lnbmVkIHNob3J0CVhJTVN0cmluZ0NvbnZlcnNpb25PcGVy
YXRpb247CgogCgoKCgoKCgp0eXBlZGVmIGVudW0gewogICAgWElNRm9yd2FyZENoYXIsIFhJTUJh
Y2t3YXJkQ2hhciwKICAgIFhJTUZvcndhcmRXb3JkLCBYSU1CYWNrd2FyZFdvcmQsCiAgICBYSU1D
YXJldFVwLCBYSU1DYXJldERvd24sCiAgICBYSU1OZXh0TGluZSwgWElNUHJldmlvdXNMaW5lLAog
ICAgWElNTGluZVN0YXJ0LCBYSU1MaW5lRW5kLCAKICAgIFhJTUFic29sdXRlUG9zaXRpb24sCiAg
ICBYSU1Eb250Q2hhbmdlCn0gWElNQ2FyZXREaXJlY3Rpb247Cgp0eXBlZGVmIHN0cnVjdCBfWElN
U3RyaW5nQ29udmVyc2lvbkNhbGxiYWNrU3RydWN0IHsKICAgIFhJTVN0cmluZ0NvbnZlcnNpb25Q
b3NpdGlvbiBwb3NpdGlvbjsKICAgIFhJTUNhcmV0RGlyZWN0aW9uIGRpcmVjdGlvbjsKICAgIFhJ
TVN0cmluZ0NvbnZlcnNpb25PcGVyYXRpb24gb3BlcmF0aW9uOwogICAgdW5zaWduZWQgc2hvcnQg
ZmFjdG9yOwogICAgWElNU3RyaW5nQ29udmVyc2lvblRleHQgKnRleHQ7Cn0gWElNU3RyaW5nQ29u
dmVyc2lvbkNhbGxiYWNrU3RydWN0OwoKdHlwZWRlZiBzdHJ1Y3QgX1hJTVByZWVkaXREcmF3Q2Fs
bGJhY2tTdHJ1Y3QgewogICAgaW50IGNhcmV0OwkJIAogICAgaW50IGNoZ19maXJzdDsJIAogICAg
aW50IGNoZ19sZW5ndGg7CSAKICAgIFhJTVRleHQgKnRleHQ7Cn0gWElNUHJlZWRpdERyYXdDYWxs
YmFja1N0cnVjdDsKCnR5cGVkZWYgZW51bSB7CiAgICBYSU1Jc0ludmlzaWJsZSwJICAKICAgIFhJ
TUlzUHJpbWFyeSwJIAogICAgWElNSXNTZWNvbmRhcnkJIAp9IFhJTUNhcmV0U3R5bGU7Cgp0eXBl
ZGVmIHN0cnVjdCBfWElNUHJlZWRpdENhcmV0Q2FsbGJhY2tTdHJ1Y3QgewogICAgaW50IHBvc2l0
aW9uOwkJICAKICAgIFhJTUNhcmV0RGlyZWN0aW9uIGRpcmVjdGlvbjsgIAogICAgWElNQ2FyZXRT
dHlsZSBzdHlsZTsJICAKfSBYSU1QcmVlZGl0Q2FyZXRDYWxsYmFja1N0cnVjdDsKCnR5cGVkZWYg
ZW51bSB7CiAgICBYSU1UZXh0VHlwZSwKICAgIFhJTUJpdG1hcFR5cGUKfSBYSU1TdGF0dXNEYXRh
VHlwZTsKCQp0eXBlZGVmIHN0cnVjdCBfWElNU3RhdHVzRHJhd0NhbGxiYWNrU3RydWN0IHsKICAg
IFhJTVN0YXR1c0RhdGFUeXBlIHR5cGU7CiAgICB1bmlvbiB7CglYSU1UZXh0ICp0ZXh0OwoJUGl4
bWFwICBiaXRtYXA7CiAgICB9IGRhdGE7Cn0gWElNU3RhdHVzRHJhd0NhbGxiYWNrU3RydWN0OwoK
dHlwZWRlZiBzdHJ1Y3QgX1hJTUhvdEtleVRyaWdnZXIgewogICAgS2V5U3ltCSBrZXlzeW07CiAg
ICBpbnQJCSBtb2RpZmllcjsKICAgIGludAkJIG1vZGlmaWVyX21hc2s7Cn0gWElNSG90S2V5VHJp
Z2dlcjsKCnR5cGVkZWYgc3RydWN0IF9YSU1Ib3RLZXlUcmlnZ2VycyB7CiAgICBpbnQJCQkgbnVt
X2hvdF9rZXk7CiAgICBYSU1Ib3RLZXlUcmlnZ2VyCSprZXk7Cn0gWElNSG90S2V5VHJpZ2dlcnM7
Cgp0eXBlZGVmCXVuc2lnbmVkIGxvbmcJIFhJTUhvdEtleVN0YXRlOwoKCgoKdHlwZWRlZiBzdHJ1
Y3QgewogICAgdW5zaWduZWQgc2hvcnQgY291bnRfdmFsdWVzOwogICAgY2hhciAqKnN1cHBvcnRl
ZF92YWx1ZXM7Cn0gWElNVmFsdWVzTGlzdDsKCmV4dGVybiAiQyIgeyAKCgoKCgpleHRlcm4gaW50
IF9YZGVidWc7CgpleHRlcm4gWEZvbnRTdHJ1Y3QgKlhMb2FkUXVlcnlGb250KAoKICAgIERpc3Bs
YXkqCQkgLAogICAgY29uc3QgIGNoYXIqCSAKCik7CgpleHRlcm4gWEZvbnRTdHJ1Y3QgKlhRdWVy
eUZvbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBYSUQJCQkgCgopOwoKCmV4dGVybiBYVGltZUNv
b3JkICpYR2V0TW90aW9uRXZlbnRzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAog
ICAgVGltZQkJICwKICAgIFRpbWUJCSAsCiAgICBpbnQqCQkgCgopOwoKZXh0ZXJuIFhNb2RpZmll
cktleW1hcCAqWERlbGV0ZU1vZGlmaWVybWFwRW50cnkoCgogICAgWE1vZGlmaWVyS2V5bWFwKgkg
LAoKICAgIHVuc2lnbmVkIGludAkgLAoKCgogICAgaW50CQkJIAoKKTsKCmV4dGVybiBYTW9kaWZp
ZXJLZXltYXAJKlhHZXRNb2RpZmllck1hcHBpbmcoCgogICAgRGlzcGxheSoJCSAKCik7CgpleHRl
cm4gWE1vZGlmaWVyS2V5bWFwCSpYSW5zZXJ0TW9kaWZpZXJtYXBFbnRyeSgKCiAgICBYTW9kaWZp
ZXJLZXltYXAqCSAsCgogICAgdW5zaWduZWQgaW50CSAsCgoKCiAgICBpbnQJCQkgICAgIAoKKTsK
CmV4dGVybiBYTW9kaWZpZXJLZXltYXAgKlhOZXdNb2RpZmllcm1hcCgKCiAgICBpbnQJCQkgCgop
OwoKZXh0ZXJuIFhJbWFnZSAqWENyZWF0ZUltYWdlKAoKICAgIERpc3BsYXkqCQkgLAogICAgVmlz
dWFsKgkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAg
ICBjaGFyKgkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICBp
bnQJCQkgLAogICAgaW50CQkJIAoKKTsKZXh0ZXJuIGludCAgWEluaXRJbWFnZSgKCiAgICBYSW1h
Z2UqCQkgCgopOwpleHRlcm4gWEltYWdlICpYR2V0SW1hZ2UoCgogICAgRGlzcGxheSoJCSAsCiAg
ICBEcmF3YWJsZQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgdW5zaWduZWQgaW50
CSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGxvbmcJICwKICAgIGludAkJCSAK
Cik7CmV4dGVybiBYSW1hZ2UgKlhHZXRTdWJJbWFnZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIERy
YXdhYmxlCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwK
ICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgbG9uZwkgLAogICAgaW50CQkJICwKICAg
IFhJbWFnZSoJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoKKTsKCiAKCgpleHRlcm4gRGlz
cGxheSAqWE9wZW5EaXNwbGF5KAoKICAgIGNvbnN0ICBjaGFyKgkgCgopOwoKZXh0ZXJuIHZvaWQg
WHJtSW5pdGlhbGl6ZSgKCiAgICB2b2lkCgopOwoKZXh0ZXJuIGNoYXIgKlhGZXRjaEJ5dGVzKAoK
ICAgIERpc3BsYXkqCQkgLAogICAgaW50KgkJIAoKKTsKZXh0ZXJuIGNoYXIgKlhGZXRjaEJ1ZmZl
cigKCiAgICBEaXNwbGF5KgkJICwKICAgIGludCoJCSAsCiAgICBpbnQJCQkgCgopOwpleHRlcm4g
Y2hhciAqWEdldEF0b21OYW1lKAoKICAgIERpc3BsYXkqCQkgLAogICAgQXRvbQkJIAoKKTsKZXh0
ZXJuIGludCAgWEdldEF0b21OYW1lcygKCiAgICBEaXNwbGF5KgkJICwKICAgIEF0b20qCQkgLAog
ICAgaW50CQkJICwKICAgIGNoYXIqKgkJIAoKKTsKZXh0ZXJuIGNoYXIgKlhHZXREZWZhdWx0KAoK
ICAgIERpc3BsYXkqCQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBjb25zdCAgY2hhcioJIAkJ
ICAKCik7CmV4dGVybiBjaGFyICpYRGlzcGxheU5hbWUoCgogICAgY29uc3QgIGNoYXIqCSAKCik7
CmV4dGVybiBjaGFyICpYS2V5c3ltVG9TdHJpbmcoCgogICAgS2V5U3ltCQkgCgopOwoKZXh0ZXJu
IGludCAoKlhTeW5jaHJvbml6ZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIGludCAJCSAKKSkodm9p
ZCk7CgoKCgpleHRlcm4gaW50ICgqWFNldEFmdGVyRnVuY3Rpb24oCgogICAgRGlzcGxheSoJCSAs
CiAgICBpbnQgKCopICgKCgkgICAgIERpc3BsYXkqCSAKCiAgICAgICAgICAgICkJCSAKKSkodm9p
ZCk7CgoKCgpleHRlcm4gQXRvbSBYSW50ZXJuQXRvbSgKCiAgICBEaXNwbGF5KgkJICwKICAgIGNv
bnN0ICBjaGFyKgkgLAogICAgaW50IAkJIAkJIAoKKTsKZXh0ZXJuIGludCAgWEludGVybkF0b21z
KAoKICAgIERpc3BsYXkqCQkgLAogICAgY2hhcioqCQkgLAogICAgaW50CQkJICwKICAgIGludCAJ
CSAsCiAgICBBdG9tKgkJIAoKKTsKZXh0ZXJuIENvbG9ybWFwIFhDb3B5Q29sb3JtYXBBbmRGcmVl
KAoKICAgIERpc3BsYXkqCQkgLAogICAgQ29sb3JtYXAJCSAKCik7CmV4dGVybiBDb2xvcm1hcCBY
Q3JlYXRlQ29sb3JtYXAoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBWaXN1
YWwqCQkgLAogICAgaW50CQkJIAkJCSAKCik7CmV4dGVybiBDdXJzb3IgWENyZWF0ZVBpeG1hcEN1
cnNvcigKCiAgICBEaXNwbGF5KgkJICwKICAgIFBpeG1hcAkJICwKICAgIFBpeG1hcAkJICwKICAg
IFhDb2xvcioJCSAsCiAgICBYQ29sb3IqCQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNp
Z25lZCBpbnQJIAkJCSAgIAoKKTsKZXh0ZXJuIEN1cnNvciBYQ3JlYXRlR2x5cGhDdXJzb3IoCgog
ICAgRGlzcGxheSoJCSAsCiAgICBGb250CQkgLAogICAgRm9udAkJICwKICAgIHVuc2lnbmVkIGlu
dAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICBYQ29sb3IqCQkgLAogICAgWENvbG9yKgkJIAoK
KTsKZXh0ZXJuIEN1cnNvciBYQ3JlYXRlRm9udEN1cnNvcigKCiAgICBEaXNwbGF5KgkJICwKICAg
IHVuc2lnbmVkIGludAkgCgopOwpleHRlcm4gRm9udCBYTG9hZEZvbnQoCgogICAgRGlzcGxheSoJ
CSAsCiAgICBjb25zdCAgY2hhcioJIAoKKTsKZXh0ZXJuIEdDIFhDcmVhdGVHQygKCiAgICBEaXNw
bGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgdW5zaWduZWQgbG9uZwkgLAogICAgWEdDVmFs
dWVzKgkJIAoKKTsKZXh0ZXJuIEdDb250ZXh0IFhHQ29udGV4dEZyb21HQygKCiAgICBHQwkJCSAK
Cik7CmV4dGVybiB2b2lkIFhGbHVzaEdDKAoKICAgIERpc3BsYXkqCQkgLAogICAgR0MJCQkgCgop
OwpleHRlcm4gUGl4bWFwIFhDcmVhdGVQaXhtYXAoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3
YWJsZQkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNp
Z25lZCBpbnQJIAkJICAgICAgICAKCik7CmV4dGVybiBQaXhtYXAgWENyZWF0ZUJpdG1hcEZyb21E
YXRhKAoKICAgIERpc3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBjb25zdCAgY2hhcioJ
ICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAKCik7CmV4dGVybiBQaXht
YXAgWENyZWF0ZVBpeG1hcEZyb21CaXRtYXBEYXRhKAoKICAgIERpc3BsYXkqCQkgLAogICAgRHJh
d2FibGUJCSAsCiAgICBjaGFyKgkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQg
aW50CSAsCiAgICB1bnNpZ25lZCBsb25nCSAsCiAgICB1bnNpZ25lZCBsb25nCSAsCiAgICB1bnNp
Z25lZCBpbnQJIAoKKTsKZXh0ZXJuIFdpbmRvdyBYQ3JlYXRlU2ltcGxlV2luZG93KAoKICAgIERp
c3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICB1
bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAg
ICB1bnNpZ25lZCBsb25nCSAsCiAgICB1bnNpZ25lZCBsb25nCSAKCik7CmV4dGVybiBXaW5kb3cg
WEdldFNlbGVjdGlvbk93bmVyKAoKICAgIERpc3BsYXkqCQkgLAogICAgQXRvbQkJIAoKKTsKZXh0
ZXJuIFdpbmRvdyBYQ3JlYXRlV2luZG93KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkg
LAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2ln
bmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICBpbnQJCQkgLAogICAgdW5zaWduZWQg
aW50CSAsCiAgICBWaXN1YWwqCQkgLAogICAgdW5zaWduZWQgbG9uZwkgLAogICAgWFNldFdpbmRv
d0F0dHJpYnV0ZXMqCSAKCik7IApleHRlcm4gQ29sb3JtYXAgKlhMaXN0SW5zdGFsbGVkQ29sb3Jt
YXBzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50KgkJIAoKKTsKZXh0
ZXJuIGNoYXIgKipYTGlzdEZvbnRzKAoKICAgIERpc3BsYXkqCQkgLAogICAgY29uc3QgIGNoYXIq
CSAsCiAgICBpbnQJCQkgLAogICAgaW50KgkJIAoKKTsKZXh0ZXJuIGNoYXIgKipYTGlzdEZvbnRz
V2l0aEluZm8oCgogICAgRGlzcGxheSoJCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIGludAkJ
CSAsCiAgICBpbnQqCQkgLAogICAgWEZvbnRTdHJ1Y3QqKgkgCgopOwpleHRlcm4gY2hhciAqKlhH
ZXRGb250UGF0aCgKCiAgICBEaXNwbGF5KgkJICwKICAgIGludCoJCSAKCik7CmV4dGVybiBjaGFy
ICoqWExpc3RFeHRlbnNpb25zKAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50KgkJIAoKKTsKZXh0
ZXJuIEF0b20gKlhMaXN0UHJvcGVydGllcygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJ
ICwKICAgIGludCoJCSAKCik7CmV4dGVybiBYSG9zdEFkZHJlc3MgKlhMaXN0SG9zdHMoCgogICAg
RGlzcGxheSoJCSAsCiAgICBpbnQqCQkgLAogICAgaW50ICoJCSAKCik7CmV4dGVybiBLZXlTeW0g
WEtleWNvZGVUb0tleXN5bSgKCiAgICBEaXNwbGF5KgkJICwKCiAgICB1bnNpZ25lZCBpbnQJICwK
CgoKICAgIGludAkJCSAKCik7CmV4dGVybiBLZXlTeW0gWExvb2t1cEtleXN5bSgKCiAgICBYS2V5
RXZlbnQqCQkgLAogICAgaW50CQkJIAoKKTsKZXh0ZXJuIEtleVN5bSAqWEdldEtleWJvYXJkTWFw
cGluZygKCiAgICBEaXNwbGF5KgkJICwKCiAgICB1bnNpZ25lZCBpbnQJICwKCgoKICAgIGludAkJ
CSAsCiAgICBpbnQqCQkgCgopOwpleHRlcm4gS2V5U3ltIFhTdHJpbmdUb0tleXN5bSgKCiAgICBj
b25zdCAgY2hhcioJIAoKKTsKZXh0ZXJuIGxvbmcgWE1heFJlcXVlc3RTaXplKAoKICAgIERpc3Bs
YXkqCQkgCgopOwpleHRlcm4gbG9uZyBYRXh0ZW5kZWRNYXhSZXF1ZXN0U2l6ZSgKCiAgICBEaXNw
bGF5KgkJIAoKKTsKZXh0ZXJuIGNoYXIgKlhSZXNvdXJjZU1hbmFnZXJTdHJpbmcoCgogICAgRGlz
cGxheSoJCSAKCik7CmV4dGVybiBjaGFyICpYU2NyZWVuUmVzb3VyY2VTdHJpbmcoCgoJU2NyZWVu
KgkJIAoKKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgWERpc3BsYXlNb3Rpb25CdWZmZXJTaXplKAoK
ICAgIERpc3BsYXkqCQkgCgopOwpleHRlcm4gVmlzdWFsSUQgWFZpc3VhbElERnJvbVZpc3VhbCgK
CiAgICBWaXN1YWwqCQkgCgopOwoKIAoKZXh0ZXJuIGludCAgWEluaXRUaHJlYWRzKAoKICAgIHZv
aWQKCik7CgpleHRlcm4gdm9pZCBYTG9ja0Rpc3BsYXkoCgogICAgRGlzcGxheSoJCSAKCik7Cgpl
eHRlcm4gdm9pZCBYVW5sb2NrRGlzcGxheSgKCiAgICBEaXNwbGF5KgkJIAoKKTsKCiAKCmV4dGVy
biBYRXh0Q29kZXMgKlhJbml0RXh0ZW5zaW9uKAoKICAgIERpc3BsYXkqCQkgLAogICAgY29uc3Qg
IGNoYXIqCSAKCik7CgpleHRlcm4gWEV4dENvZGVzICpYQWRkRXh0ZW5zaW9uKAoKICAgIERpc3Bs
YXkqCQkgCgopOwpleHRlcm4gWEV4dERhdGEgKlhGaW5kT25FeHRlbnNpb25MaXN0KAoKICAgIFhF
eHREYXRhKioJCSAsCiAgICBpbnQJCQkgCgopOwpleHRlcm4gWEV4dERhdGEgKipYRUhlYWRPZkV4
dGVuc2lvbkxpc3QoCgogICAgWEVEYXRhT2JqZWN0CSAKCik7CgogCmV4dGVybiBXaW5kb3cgWFJv
b3RXaW5kb3coCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJCQkgCgopOwpleHRlcm4gV2luZG93
IFhEZWZhdWx0Um9vdFdpbmRvdygKCiAgICBEaXNwbGF5KgkJIAoKKTsKZXh0ZXJuIFdpbmRvdyBY
Um9vdFdpbmRvd09mU2NyZWVuKAoKICAgIFNjcmVlbioJCSAKCik7CmV4dGVybiBWaXN1YWwgKlhE
ZWZhdWx0VmlzdWFsKAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50CQkJIAoKKTsKZXh0ZXJuIFZp
c3VhbCAqWERlZmF1bHRWaXN1YWxPZlNjcmVlbigKCiAgICBTY3JlZW4qCQkgCgopOwpleHRlcm4g
R0MgWERlZmF1bHRHQygKCiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAKCik7CmV4dGVybiBH
QyBYRGVmYXVsdEdDT2ZTY3JlZW4oCgogICAgU2NyZWVuKgkJIAoKKTsKZXh0ZXJuIHVuc2lnbmVk
IGxvbmcgWEJsYWNrUGl4ZWwoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJCQkgCgopOwpleHRl
cm4gdW5zaWduZWQgbG9uZyBYV2hpdGVQaXhlbCgKCiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJ
CSAKCik7CmV4dGVybiB1bnNpZ25lZCBsb25nIFhBbGxQbGFuZXMoCgogICAgdm9pZAoKKTsKZXh0
ZXJuIHVuc2lnbmVkIGxvbmcgWEJsYWNrUGl4ZWxPZlNjcmVlbigKCiAgICBTY3JlZW4qCQkgCgop
OwpleHRlcm4gdW5zaWduZWQgbG9uZyBYV2hpdGVQaXhlbE9mU2NyZWVuKAoKICAgIFNjcmVlbioJ
CSAKCik7CmV4dGVybiB1bnNpZ25lZCBsb25nIFhOZXh0UmVxdWVzdCgKCiAgICBEaXNwbGF5KgkJ
IAoKKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgWExhc3RLbm93blJlcXVlc3RQcm9jZXNzZWQoCgog
ICAgRGlzcGxheSoJCSAKCik7CmV4dGVybiBjaGFyICpYU2VydmVyVmVuZG9yKAoKICAgIERpc3Bs
YXkqCQkgCgopOwpleHRlcm4gY2hhciAqWERpc3BsYXlTdHJpbmcoCgogICAgRGlzcGxheSoJCSAK
Cik7CmV4dGVybiBDb2xvcm1hcCBYRGVmYXVsdENvbG9ybWFwKAoKICAgIERpc3BsYXkqCQkgLAog
ICAgaW50CQkJIAoKKTsKZXh0ZXJuIENvbG9ybWFwIFhEZWZhdWx0Q29sb3JtYXBPZlNjcmVlbigK
CiAgICBTY3JlZW4qCQkgCgopOwpleHRlcm4gRGlzcGxheSAqWERpc3BsYXlPZlNjcmVlbigKCiAg
ICBTY3JlZW4qCQkgCgopOwpleHRlcm4gU2NyZWVuICpYU2NyZWVuT2ZEaXNwbGF5KAoKICAgIERp
c3BsYXkqCQkgLAogICAgaW50CQkJIAoKKTsKZXh0ZXJuIFNjcmVlbiAqWERlZmF1bHRTY3JlZW5P
ZkRpc3BsYXkoCgogICAgRGlzcGxheSoJCSAKCik7CmV4dGVybiBsb25nIFhFdmVudE1hc2tPZlNj
cmVlbigKCiAgICBTY3JlZW4qCQkgCgopOwoKZXh0ZXJuIGludCBYU2NyZWVuTnVtYmVyT2ZTY3Jl
ZW4oCgogICAgU2NyZWVuKgkJIAoKKTsKCnR5cGVkZWYgaW50ICgqWEVycm9ySGFuZGxlcikgKAkg
ICAgIAoKICAgIERpc3BsYXkqCQkgLAogICAgWEVycm9yRXZlbnQqCSAKCik7CgpleHRlcm4gWEVy
cm9ySGFuZGxlciBYU2V0RXJyb3JIYW5kbGVyICgKCiAgICBYRXJyb3JIYW5kbGVyCSAKCik7CgoK
dHlwZWRlZiBpbnQgKCpYSU9FcnJvckhhbmRsZXIpICggICAgIAoKICAgIERpc3BsYXkqCQkgCgop
OwoKZXh0ZXJuIFhJT0Vycm9ySGFuZGxlciBYU2V0SU9FcnJvckhhbmRsZXIgKAoKICAgIFhJT0Vy
cm9ySGFuZGxlcgkgCgopOwoKCmV4dGVybiBYUGl4bWFwRm9ybWF0VmFsdWVzICpYTGlzdFBpeG1h
cEZvcm1hdHMoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQqCQkgCgopOwpleHRlcm4gaW50ICpY
TGlzdERlcHRocygKCiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAsCiAgICBpbnQqCQkgCgop
OwoKIAogCmV4dGVybiBpbnQgIFhSZWNvbmZpZ3VyZVdNV2luZG93KAoKICAgIERpc3BsYXkqCQkg
LAogICAgV2luZG93CQkgLAogICAgaW50CQkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgWFdp
bmRvd0NoYW5nZXMqCSAKCik7CgpleHRlcm4gaW50ICBYR2V0V01Qcm90b2NvbHMoCgogICAgRGlz
cGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBBdG9tKioJCSAsCiAgICBpbnQqCQkgCgopOwpl
eHRlcm4gaW50ICBYU2V0V01Qcm90b2NvbHMoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJ
CSAsCiAgICBBdG9tKgkJICwKICAgIGludAkJCSAKCik7CmV4dGVybiBpbnQgIFhJY29uaWZ5V2lu
ZG93KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50CQkJIAoKKTsKZXh0
ZXJuIGludCAgWFdpdGhkcmF3V2luZG93KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkg
LAogICAgaW50CQkJIAoKKTsKZXh0ZXJuIGludCAgWEdldENvbW1hbmQoCgogICAgRGlzcGxheSoJ
CSAsCiAgICBXaW5kb3cJCSAsCiAgICBjaGFyKioqCQkgLAogICAgaW50KgkJIAoKKTsKZXh0ZXJu
IGludCAgWEdldFdNQ29sb3JtYXBXaW5kb3dzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93
CQkgLAogICAgV2luZG93KioJCSAsCiAgICBpbnQqCQkgCgopOwpleHRlcm4gaW50ICBYU2V0V01D
b2xvcm1hcFdpbmRvd3MoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBXaW5k
b3cqCQkgLAogICAgaW50CQkJIAoKKTsKZXh0ZXJuIHZvaWQgWEZyZWVTdHJpbmdMaXN0KAoKICAg
IGNoYXIqKgkJIAoKKTsKZXh0ZXJuIGludCBYU2V0VHJhbnNpZW50Rm9ySGludCgKCiAgICBEaXNw
bGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIFdpbmRvdwkJIAoKKTsKCiAKCmV4dGVybiBpbnQg
WEFjdGl2YXRlU2NyZWVuU2F2ZXIoCgogICAgRGlzcGxheSoJCSAKCik7CgpleHRlcm4gaW50IFhB
ZGRIb3N0KAoKICAgIERpc3BsYXkqCQkgLAogICAgWEhvc3RBZGRyZXNzKgkgCgopOwoKZXh0ZXJu
IGludCBYQWRkSG9zdHMoCgogICAgRGlzcGxheSoJCSAsCiAgICBYSG9zdEFkZHJlc3MqCSAsCiAg
ICBpbnQJCQkgICAgIAoKKTsKCmV4dGVybiBpbnQgWEFkZFRvRXh0ZW5zaW9uTGlzdCgKCiAgICBz
dHJ1Y3QgX1hFeHREYXRhKioJICwKICAgIFhFeHREYXRhKgkJIAoKKTsKCmV4dGVybiBpbnQgWEFk
ZFRvU2F2ZVNldCgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJIAoKKTsKCmV4dGVybiBp
bnQgIFhBbGxvY0NvbG9yKAoKICAgIERpc3BsYXkqCQkgLAogICAgQ29sb3JtYXAJCSAsCiAgICBY
Q29sb3IqCQkgCgopOwoKZXh0ZXJuIGludCAgWEFsbG9jQ29sb3JDZWxscygKCiAgICBEaXNwbGF5
KgkJICwKICAgIENvbG9ybWFwCQkgLAogICAgaW50IAkgICAgICAgICAsCiAgICB1bnNpZ25lZCBs
b25nKgkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBsb25nKgkgLAogICAgdW5z
aWduZWQgaW50IAkgCgopOwoKZXh0ZXJuIGludCAgWEFsbG9jQ29sb3JQbGFuZXMoCgogICAgRGlz
cGxheSoJCSAsCiAgICBDb2xvcm1hcAkJICwKICAgIGludCAJCSAsCiAgICB1bnNpZ25lZCBsb25n
KgkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwK
ICAgIHVuc2lnbmVkIGxvbmcqCSAsCiAgICB1bnNpZ25lZCBsb25nKgkgLAogICAgdW5zaWduZWQg
bG9uZyoJIAoKKTsKCmV4dGVybiBpbnQgIFhBbGxvY05hbWVkQ29sb3IoCgogICAgRGlzcGxheSoJ
CSAsCiAgICBDb2xvcm1hcAkJICwKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgWENvbG9yKgkJICwK
ICAgIFhDb2xvcioJCSAKCik7CgpleHRlcm4gaW50IFhBbGxvd0V2ZW50cygKCiAgICBEaXNwbGF5
KgkJICwKICAgIGludAkJCSAsCiAgICBUaW1lCQkgCgopOwoKZXh0ZXJuIGludCBYQXV0b1JlcGVh
dE9mZigKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBpbnQgWEF1dG9SZXBlYXRPbigKCiAg
ICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBpbnQgWEJlbGwoCgogICAgRGlzcGxheSoJCSAsCiAg
ICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYQml0bWFwQml0T3JkZXIoCgogICAgRGlzcGxheSoJ
CSAKCik7CgpleHRlcm4gaW50IFhCaXRtYXBQYWQoCgogICAgRGlzcGxheSoJCSAKCik7CgpleHRl
cm4gaW50IFhCaXRtYXBVbml0KAoKICAgIERpc3BsYXkqCQkgCgopOwoKZXh0ZXJuIGludCBYQ2Vs
bHNPZlNjcmVlbigKCiAgICBTY3JlZW4qCQkgCgopOwoKZXh0ZXJuIGludCBYQ2hhbmdlQWN0aXZl
UG9pbnRlckdyYWIoCgogICAgRGlzcGxheSoJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIEN1
cnNvcgkJICwKICAgIFRpbWUJCSAKCik7CgpleHRlcm4gaW50IFhDaGFuZ2VHQygKCiAgICBEaXNw
bGF5KgkJICwKICAgIEdDCQkJICwKICAgIHVuc2lnbmVkIGxvbmcJICwKICAgIFhHQ1ZhbHVlcyoJ
CSAKCik7CgpleHRlcm4gaW50IFhDaGFuZ2VLZXlib2FyZENvbnRyb2woCgogICAgRGlzcGxheSoJ
CSAsCiAgICB1bnNpZ25lZCBsb25nCSAsCiAgICBYS2V5Ym9hcmRDb250cm9sKgkgCgopOwoKZXh0
ZXJuIGludCBYQ2hhbmdlS2V5Ym9hcmRNYXBwaW5nKAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50
CQkJICwKICAgIGludAkJCSAsCiAgICBLZXlTeW0qCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVy
biBpbnQgWENoYW5nZVBvaW50ZXJDb250cm9sKAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50IAkJ
ICwKICAgIGludCAJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAKCik7
CgpleHRlcm4gaW50IFhDaGFuZ2VQcm9wZXJ0eSgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRv
dwkJICwKICAgIEF0b20JCSAsCiAgICBBdG9tCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAs
CiAgICBjb25zdCAgdW5zaWduZWQgY2hhcioJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50
IFhDaGFuZ2VTYXZlU2V0KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50
CQkJIAoKKTsKCmV4dGVybiBpbnQgWENoYW5nZVdpbmRvd0F0dHJpYnV0ZXMoCgogICAgRGlzcGxh
eSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICB1bnNpZ25lZCBsb25nCSAsCiAgICBYU2V0V2luZG93
QXR0cmlidXRlcyogIAoKKTsKCmV4dGVybiBpbnQgIFhDaGVja0lmRXZlbnQoCgogICAgRGlzcGxh
eSoJCSAsCiAgICBYRXZlbnQqCQkgLAogICAgaW50ICAoKikgKAoKCSAgICAgICBEaXNwbGF5KgkJ
CSAsCiAgICAgICAgICAgICAgIFhFdmVudCoJCQkgLAogICAgICAgICAgICAgICBYUG9pbnRlcgkJ
CSAKCiAgICAgICAgICAgICApCQkgLAogICAgWFBvaW50ZXIJCSAKCik7CgpleHRlcm4gaW50ICBY
Q2hlY2tNYXNrRXZlbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBsb25nCQkgLAogICAgWEV2ZW50
KgkJIAoKKTsKCmV4dGVybiBpbnQgIFhDaGVja1R5cGVkRXZlbnQoCgogICAgRGlzcGxheSoJCSAs
CiAgICBpbnQJCQkgLAogICAgWEV2ZW50KgkJIAoKKTsKCmV4dGVybiBpbnQgIFhDaGVja1R5cGVk
V2luZG93RXZlbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBpbnQJCQkg
LAogICAgWEV2ZW50KgkJIAoKKTsKCmV4dGVybiBpbnQgIFhDaGVja1dpbmRvd0V2ZW50KAoKICAg
IERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgbG9uZwkJICwKICAgIFhFdmVudCoJCSAK
Cik7CgpleHRlcm4gaW50IFhDaXJjdWxhdGVTdWJ3aW5kb3dzKAoKICAgIERpc3BsYXkqCQkgLAog
ICAgV2luZG93CQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWENpcmN1bGF0ZVN1Yndp
bmRvd3NEb3duKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgCgopOwoKZXh0ZXJuIGlu
dCBYQ2lyY3VsYXRlU3Vid2luZG93c1VwKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkg
CgopOwoKZXh0ZXJuIGludCBYQ2xlYXJBcmVhKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93
CQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVu
c2lnbmVkIGludAkgLAogICAgaW50IAkJIAoKKTsKCmV4dGVybiBpbnQgWENsZWFyV2luZG93KAoK
ICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgCgopOwoKZXh0ZXJuIGludCBYQ2xvc2VEaXNw
bGF5KAoKICAgIERpc3BsYXkqCQkgCgopOwoKZXh0ZXJuIGludCBYQ29uZmlndXJlV2luZG93KAoK
ICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICBY
V2luZG93Q2hhbmdlcyoJIAkJIAoKKTsKCmV4dGVybiBpbnQgWENvbm5lY3Rpb25OdW1iZXIoCgog
ICAgRGlzcGxheSoJCSAKCik7CgpleHRlcm4gaW50IFhDb252ZXJ0U2VsZWN0aW9uKAoKICAgIERp
c3BsYXkqCQkgLAogICAgQXRvbQkJICwKICAgIEF0b20gCQkgLAogICAgQXRvbQkJICwKICAgIFdp
bmRvdwkJICwKICAgIFRpbWUJCSAKCik7CgpleHRlcm4gaW50IFhDb3B5QXJlYSgKCiAgICBEaXNw
bGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBHQwkJCSAsCiAg
ICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQg
aW50CSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWENvcHlHQygK
CiAgICBEaXNwbGF5KgkJICwKICAgIEdDCQkJICwKICAgIHVuc2lnbmVkIGxvbmcJICwKICAgIEdD
CQkJIAoKKTsKCmV4dGVybiBpbnQgWENvcHlQbGFuZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIERy
YXdhYmxlCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkgLAogICAg
aW50CQkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICBpbnQJ
CQkgLAogICAgaW50CQkJICwKICAgIHVuc2lnbmVkIGxvbmcJIAoKKTsKCmV4dGVybiBpbnQgWERl
ZmF1bHREZXB0aCgKCiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50
IFhEZWZhdWx0RGVwdGhPZlNjcmVlbigKCiAgICBTY3JlZW4qCQkgCgopOwoKZXh0ZXJuIGludCBY
RGVmYXVsdFNjcmVlbigKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBpbnQgWERlZmluZUN1
cnNvcigKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIEN1cnNvcgkJIAoKKTsK
CmV4dGVybiBpbnQgWERlbGV0ZVByb3BlcnR5KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93
CQkgLAogICAgQXRvbQkJIAoKKTsKCmV4dGVybiBpbnQgWERlc3Ryb3lXaW5kb3coCgogICAgRGlz
cGxheSoJCSAsCiAgICBXaW5kb3cJCSAKCik7CgpleHRlcm4gaW50IFhEZXN0cm95U3Vid2luZG93
cygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJIAoKKTsKCmV4dGVybiBpbnQgWERvZXNC
YWNraW5nU3RvcmUoCgogICAgU2NyZWVuKgkJICAgICAKCik7CgpleHRlcm4gaW50ICBYRG9lc1Nh
dmVVbmRlcnMoCgogICAgU2NyZWVuKgkJIAoKKTsKCmV4dGVybiBpbnQgWERpc2FibGVBY2Nlc3ND
b250cm9sKAoKICAgIERpc3BsYXkqCQkgCgopOwoKCmV4dGVybiBpbnQgWERpc3BsYXlDZWxscygK
CiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhEaXNwbGF5SGVp
Z2h0KAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWERpc3Bs
YXlIZWlnaHRNTSgKCiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50
IFhEaXNwbGF5S2V5Y29kZXMoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQqCQkgLAogICAgaW50
KgkJIAoKKTsKCmV4dGVybiBpbnQgWERpc3BsYXlQbGFuZXMoCgogICAgRGlzcGxheSoJCSAsCiAg
ICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYRGlzcGxheVdpZHRoKAoKICAgIERpc3BsYXkqCQkg
LAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWERpc3BsYXlXaWR0aE1NKAoKICAgIERpc3Bs
YXkqCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWERyYXdBcmMoCgogICAgRGlzcGxh
eSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIEdDCQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJ
CQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIGludAkJCSAs
CiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYRHJhd0FyY3MoCgogICAgRGlzcGxheSoJCSAs
CiAgICBEcmF3YWJsZQkJICwKICAgIEdDCQkJICwKICAgIFhBcmMqCQkgLAogICAgaW50CQkJIAoK
KTsKCmV4dGVybiBpbnQgWERyYXdJbWFnZVN0cmluZygKCiAgICBEaXNwbGF5KgkJICwKICAgIERy
YXdhYmxlCQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBjb25z
dCAgY2hhcioJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhEcmF3SW1hZ2VTdHJpbmcx
NigKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgR0MJCQkgLAogICAgaW50
CQkJICwKICAgIGludAkJCSAsCiAgICBjb25zdCAgWENoYXIyYioJICwKICAgIGludAkJCSAKCik7
CgpleHRlcm4gaW50IFhEcmF3TGluZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkg
LAogICAgR0MJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAg
aW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWERyYXdMaW5lcygKCiAgICBEaXNwbGF5KgkJICwKICAg
IERyYXdhYmxlCQkgLAogICAgR0MJCQkgLAogICAgWFBvaW50KgkJICwKICAgIGludAkJCSAsCiAg
ICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYRHJhd1BvaW50KAoKICAgIERpc3BsYXkqCQkgLAog
ICAgRHJhd2FibGUJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoKKTsK
CmV4dGVybiBpbnQgWERyYXdQb2ludHMoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJ
ICwKICAgIEdDCQkJICwKICAgIFhQb2ludCoJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoK
KTsKCmV4dGVybiBpbnQgWERyYXdSZWN0YW5nbGUoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3
YWJsZQkJICwKICAgIEdDCQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgdW5zaWdu
ZWQgaW50CSAsCiAgICB1bnNpZ25lZCBpbnQJIAoKKTsKCmV4dGVybiBpbnQgWERyYXdSZWN0YW5n
bGVzKAoKICAgIERpc3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBHQwkJCSAsCiAgICBY
UmVjdGFuZ2xlKgkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhEcmF3U2VnbWVudHMo
CgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIEdDCQkJICwKICAgIFhTZWdt
ZW50KgkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhEcmF3U3RyaW5nKAoKICAgIERp
c3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkgLAogICAg
aW50CQkJICwKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQg
WERyYXdTdHJpbmcxNigKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgR0MJ
CQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBjb25zdCAgWENoYXIyYioJICwKICAg
IGludAkJCSAKCik7CgpleHRlcm4gaW50IFhEcmF3VGV4dCgKCiAgICBEaXNwbGF5KgkJICwKICAg
IERyYXdhYmxlCQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBY
VGV4dEl0ZW0qCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWERyYXdUZXh0MTYoCgog
ICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIEdDCQkJICwKICAgIGludAkJCSAs
CiAgICBpbnQJCQkgLAogICAgWFRleHRJdGVtMTYqCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJu
IGludCBYRW5hYmxlQWNjZXNzQ29udHJvbCgKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBp
bnQgWEV2ZW50c1F1ZXVlZCgKCiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAKCik7CgpleHRl
cm4gaW50ICBYRmV0Y2hOYW1lKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAg
Y2hhcioqCQkgCgopOwoKZXh0ZXJuIGludCBYRmlsbEFyYygKCiAgICBEaXNwbGF5KgkJICwKICAg
IERyYXdhYmxlCQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICB1
bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgaW50CQkJICwKICAgIGludAkJ
CSAKCik7CgpleHRlcm4gaW50IFhGaWxsQXJjcygKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdh
YmxlCQkgLAogICAgR0MJCQkgLAogICAgWEFyYyoJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJu
IGludCBYRmlsbFBvbHlnb24oCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAg
IEdDCQkJICwKICAgIFhQb2ludCoJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIGlu
dAkJCSAKCik7CgpleHRlcm4gaW50IFhGaWxsUmVjdGFuZ2xlKAoKICAgIERpc3BsYXkqCQkgLAog
ICAgRHJhd2FibGUJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAg
IHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAKCik7CgpleHRlcm4gaW50IFhGaWxs
UmVjdGFuZ2xlcygKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgR0MJCQkg
LAogICAgWFJlY3RhbmdsZSoJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYRmx1c2go
CgogICAgRGlzcGxheSoJCSAKCik7CgpleHRlcm4gaW50IFhGb3JjZVNjcmVlblNhdmVyKAoKICAg
IERpc3BsYXkqCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWEZyZWUoCgogICAgdm9p
ZCoJCSAKCik7CgpleHRlcm4gaW50IFhGcmVlQ29sb3JtYXAoCgogICAgRGlzcGxheSoJCSAsCiAg
ICBDb2xvcm1hcAkJIAoKKTsKCmV4dGVybiBpbnQgWEZyZWVDb2xvcnMoCgogICAgRGlzcGxheSoJ
CSAsCiAgICBDb2xvcm1hcAkJICwKICAgIHVuc2lnbmVkIGxvbmcqCSAsCiAgICBpbnQJCQkgLAog
ICAgdW5zaWduZWQgbG9uZwkgCgopOwoKZXh0ZXJuIGludCBYRnJlZUN1cnNvcigKCiAgICBEaXNw
bGF5KgkJICwKICAgIEN1cnNvcgkJIAoKKTsKCmV4dGVybiBpbnQgWEZyZWVFeHRlbnNpb25MaXN0
KAoKICAgIGNoYXIqKgkJICAgICAKCik7CgpleHRlcm4gaW50IFhGcmVlRm9udCgKCiAgICBEaXNw
bGF5KgkJICwKICAgIFhGb250U3RydWN0KgkgCgopOwoKZXh0ZXJuIGludCBYRnJlZUZvbnRJbmZv
KAoKICAgIGNoYXIqKgkJICwKICAgIFhGb250U3RydWN0KgkgLAogICAgaW50CQkJIAoKKTsKCmV4
dGVybiBpbnQgWEZyZWVGb250TmFtZXMoCgogICAgY2hhcioqCQkgCgopOwoKZXh0ZXJuIGludCBY
RnJlZUZvbnRQYXRoKAoKICAgIGNoYXIqKgkJIAoKKTsKCmV4dGVybiBpbnQgWEZyZWVHQygKCiAg
ICBEaXNwbGF5KgkJICwKICAgIEdDCQkJIAoKKTsKCmV4dGVybiBpbnQgWEZyZWVNb2RpZmllcm1h
cCgKCiAgICBYTW9kaWZpZXJLZXltYXAqCSAKCik7CgpleHRlcm4gaW50IFhGcmVlUGl4bWFwKAoK
ICAgIERpc3BsYXkqCQkgLAogICAgUGl4bWFwCQkgCgopOwoKZXh0ZXJuIGludCBYR2VvbWV0cnko
CgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJCQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBj
b25zdCAgY2hhcioJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAg
ICB1bnNpZ25lZCBpbnQJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50KgkJICwK
ICAgIGludCoJCSAsCiAgICBpbnQqCQkgLAogICAgaW50KgkJIAoKKTsKCmV4dGVybiBpbnQgWEdl
dEVycm9yRGF0YWJhc2VUZXh0KAoKICAgIERpc3BsYXkqCQkgLAogICAgY29uc3QgIGNoYXIqCSAs
CiAgICBjb25zdCAgY2hhcioJICwKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgY2hhcioJCSAsCiAg
ICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYR2V0RXJyb3JUZXh0KAoKICAgIERpc3BsYXkqCQkg
LAogICAgaW50CQkJICwKICAgIGNoYXIqCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQg
IFhHZXRGb250UHJvcGVydHkoCgogICAgWEZvbnRTdHJ1Y3QqCSAsCiAgICBBdG9tCQkgLAogICAg
dW5zaWduZWQgbG9uZyoJIAoKKTsKCmV4dGVybiBpbnQgIFhHZXRHQ1ZhbHVlcygKCiAgICBEaXNw
bGF5KgkJICwKICAgIEdDCQkJICwKICAgIHVuc2lnbmVkIGxvbmcJICwKICAgIFhHQ1ZhbHVlcyoJ
CSAKCik7CgpleHRlcm4gaW50ICBYR2V0R2VvbWV0cnkoCgogICAgRGlzcGxheSoJCSAsCiAgICBE
cmF3YWJsZQkJICwKICAgIFdpbmRvdyoJCSAsCiAgICBpbnQqCQkgLAogICAgaW50KgkJICwKICAg
IHVuc2lnbmVkIGludCoJICwKICAgIHVuc2lnbmVkIGludCoJICwKICAgIHVuc2lnbmVkIGludCoJ
ICwKICAgIHVuc2lnbmVkIGludCoJIAoKKTsKCmV4dGVybiBpbnQgIFhHZXRJY29uTmFtZSgKCiAg
ICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIGNoYXIqKgkJIAoKKTsKCmV4dGVybiBp
bnQgWEdldElucHV0Rm9jdXMoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cqCQkgLAogICAg
aW50KgkJIAoKKTsKCmV4dGVybiBpbnQgWEdldEtleWJvYXJkQ29udHJvbCgKCiAgICBEaXNwbGF5
KgkJICwKICAgIFhLZXlib2FyZFN0YXRlKgkgCgopOwoKZXh0ZXJuIGludCBYR2V0UG9pbnRlckNv
bnRyb2woCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQqCQkgLAogICAgaW50KgkJICwKICAgIGlu
dCoJCSAKCik7CgpleHRlcm4gaW50IFhHZXRQb2ludGVyTWFwcGluZygKCiAgICBEaXNwbGF5KgkJ
ICwKICAgIHVuc2lnbmVkIGNoYXIqCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYR2V0
U2NyZWVuU2F2ZXIoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQqCQkgLAogICAgaW50KgkJICwK
ICAgIGludCoJCSAsCiAgICBpbnQqCQkgCgopOwoKZXh0ZXJuIGludCAgWEdldFRyYW5zaWVudEZv
ckhpbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBXaW5kb3cqCQkgCgop
OwoKZXh0ZXJuIGludCBYR2V0V2luZG93UHJvcGVydHkoCgogICAgRGlzcGxheSoJCSAsCiAgICBX
aW5kb3cJCSAsCiAgICBBdG9tCQkgLAogICAgbG9uZwkJICwKICAgIGxvbmcJCSAsCiAgICBpbnQg
CQkgLAogICAgQXRvbQkJICwKICAgIEF0b20qCQkgLAogICAgaW50KgkJICwKICAgIHVuc2lnbmVk
IGxvbmcqCSAsCiAgICB1bnNpZ25lZCBsb25nKgkgLAogICAgdW5zaWduZWQgY2hhcioqCSAKCik7
CgpleHRlcm4gaW50ICBYR2V0V2luZG93QXR0cmlidXRlcygKCiAgICBEaXNwbGF5KgkJICwKICAg
IFdpbmRvdwkJICwKICAgIFhXaW5kb3dBdHRyaWJ1dGVzKgkgCgopOwoKZXh0ZXJuIGludCBYR3Jh
YkJ1dHRvbigKCiAgICBEaXNwbGF5KgkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWdu
ZWQgaW50CSAsCiAgICBXaW5kb3cJCSAsCiAgICBpbnQgCQkgLAogICAgdW5zaWduZWQgaW50CSAs
CiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIFdpbmRvdwkJICwKICAgIEN1cnNvcgkJIAoK
KTsKCmV4dGVybiBpbnQgWEdyYWJLZXkoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJCQkgLAog
ICAgdW5zaWduZWQgaW50CSAsCiAgICBXaW5kb3cJCSAsCiAgICBpbnQgCQkgLAogICAgaW50CQkJ
ICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhHcmFiS2V5Ym9hcmQoCgogICAgRGlzcGxh
eSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBpbnQgCQkgLAogICAgaW50CQkJICwKICAgIGludAkJ
CSAsCiAgICBUaW1lCQkgCgopOwoKZXh0ZXJuIGludCBYR3JhYlBvaW50ZXIoCgogICAgRGlzcGxh
eSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBpbnQgCQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAg
ICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIFdpbmRvdwkJICwKICAgIEN1cnNvcgkJICwKICAg
IFRpbWUJCSAKCik7CgpleHRlcm4gaW50IFhHcmFiU2VydmVyKAoKICAgIERpc3BsYXkqCQkgCgop
OwoKZXh0ZXJuIGludCBYSGVpZ2h0TU1PZlNjcmVlbigKCiAgICBTY3JlZW4qCQkgCgopOwoKZXh0
ZXJuIGludCBYSGVpZ2h0T2ZTY3JlZW4oCgogICAgU2NyZWVuKgkJIAoKKTsKCmV4dGVybiBpbnQg
WElmRXZlbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBYRXZlbnQqCQkgLAogICAgaW50ICAoKikg
KAoKCSAgICAgICBEaXNwbGF5KgkJCSAsCiAgICAgICAgICAgICAgIFhFdmVudCoJCQkgLAogICAg
ICAgICAgICAgICBYUG9pbnRlcgkJCSAKCiAgICAgICAgICAgICApCQkgLAogICAgWFBvaW50ZXIJ
CSAKCik7CgpleHRlcm4gaW50IFhJbWFnZUJ5dGVPcmRlcigKCiAgICBEaXNwbGF5KgkJIAoKKTsK
CmV4dGVybiBpbnQgWEluc3RhbGxDb2xvcm1hcCgKCiAgICBEaXNwbGF5KgkJICwKICAgIENvbG9y
bWFwCQkgCgopOwoKZXh0ZXJuIEtleUNvZGUgWEtleXN5bVRvS2V5Y29kZSgKCiAgICBEaXNwbGF5
KgkJICwKICAgIEtleVN5bQkJIAoKKTsKCmV4dGVybiBpbnQgWEtpbGxDbGllbnQoCgogICAgRGlz
cGxheSoJCSAsCiAgICBYSUQJCQkgCgopOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgWExhc3RLbm93
blJlcXVlc3RQcm9jZXNzZWQoCgogICAgRGlzcGxheSoJCSAKCik7CgpleHRlcm4gaW50ICBYTG9v
a3VwQ29sb3IoCgogICAgRGlzcGxheSoJCSAsCiAgICBDb2xvcm1hcAkJICwKICAgIGNvbnN0ICBj
aGFyKgkgLAogICAgWENvbG9yKgkJICwKICAgIFhDb2xvcioJCSAKCik7CgpleHRlcm4gaW50IFhM
b3dlcldpbmRvdygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJIAoKKTsKCmV4dGVybiBp
bnQgWE1hcFJhaXNlZCgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJIAoKKTsKCmV4dGVy
biBpbnQgWE1hcFN1YndpbmRvd3MoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAKCik7
CgpleHRlcm4gaW50IFhNYXBXaW5kb3coCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAK
Cik7CgpleHRlcm4gaW50IFhNYXNrRXZlbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBsb25nCQkg
LAogICAgWEV2ZW50KgkJIAoKKTsKCmV4dGVybiBpbnQgWE1heENtYXBzT2ZTY3JlZW4oCgogICAg
U2NyZWVuKgkJIAoKKTsKCmV4dGVybiBpbnQgWE1pbkNtYXBzT2ZTY3JlZW4oCgogICAgU2NyZWVu
KgkJIAoKKTsKCmV4dGVybiBpbnQgWE1vdmVSZXNpemVXaW5kb3coCgogICAgRGlzcGxheSoJCSAs
CiAgICBXaW5kb3cJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIHVuc2lnbmVkIGlu
dAkgLAogICAgdW5zaWduZWQgaW50CSAKCik7CgpleHRlcm4gaW50IFhNb3ZlV2luZG93KAoKICAg
IERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAKCik7
CgpleHRlcm4gaW50IFhOZXh0RXZlbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBYRXZlbnQqCQkg
CgopOwoKZXh0ZXJuIGludCBYTm9PcCgKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBpbnQg
IFhQYXJzZUNvbG9yKAoKICAgIERpc3BsYXkqCQkgLAogICAgQ29sb3JtYXAJCSAsCiAgICBjb25z
dCAgY2hhcioJICwKICAgIFhDb2xvcioJCSAKCik7CgpleHRlcm4gaW50IFhQYXJzZUdlb21ldHJ5
KAoKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgaW50KgkJICwKICAgIGludCoJCSAsCiAgICB1bnNp
Z25lZCBpbnQqCSAsCiAgICB1bnNpZ25lZCBpbnQqCSAKCik7CgpleHRlcm4gaW50IFhQZWVrRXZl
bnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBYRXZlbnQqCQkgCgopOwoKZXh0ZXJuIGludCBYUGVl
a0lmRXZlbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBYRXZlbnQqCQkgLAogICAgaW50ICAoKikg
KAoKCSAgICAgICBEaXNwbGF5KgkJICwKICAgICAgICAgICAgICAgWEV2ZW50KgkJICwKICAgICAg
ICAgICAgICAgWFBvaW50ZXIJCSAKCiAgICAgICAgICAgICApCQkgLAogICAgWFBvaW50ZXIJCSAK
Cik7CgpleHRlcm4gaW50IFhQZW5kaW5nKAoKICAgIERpc3BsYXkqCQkgCgopOwoKZXh0ZXJuIGlu
dCBYUGxhbmVzT2ZTY3JlZW4oCgogICAgU2NyZWVuKgkJIAogICAgCgopOwoKZXh0ZXJuIGludCBY
UHJvdG9jb2xSZXZpc2lvbigKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBpbnQgWFByb3Rv
Y29sVmVyc2lvbigKCiAgICBEaXNwbGF5KgkJIAoKKTsKCgpleHRlcm4gaW50IFhQdXRCYWNrRXZl
bnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBYRXZlbnQqCQkgCgopOwoKZXh0ZXJuIGludCBYUHV0
SW1hZ2UoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIEdDCQkJICwKICAg
IFhJbWFnZSoJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBp
bnQJCQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBpbnQJIAkgIAoKKTsKCmV4
dGVybiBpbnQgWFFMZW5ndGgoCgogICAgRGlzcGxheSoJCSAKCik7CgpleHRlcm4gaW50ICBYUXVl
cnlCZXN0Q3Vyc29yKAoKICAgIERpc3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICB1bnNp
Z25lZCBpbnQgICAgICAgICAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGludCoJ
ICwKICAgIHVuc2lnbmVkIGludCoJIAoKKTsKCmV4dGVybiBpbnQgIFhRdWVyeUJlc3RTaXplKAoK
ICAgIERpc3BsYXkqCQkgLAogICAgaW50CQkJICwKICAgIERyYXdhYmxlCQkgLAogICAgdW5zaWdu
ZWQgaW50CSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGludCoJICwKICAgIHVu
c2lnbmVkIGludCoJIAoKKTsKCmV4dGVybiBpbnQgIFhRdWVyeUJlc3RTdGlwcGxlKAoKICAgIERp
c3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2ln
bmVkIGludAkgLAogICAgdW5zaWduZWQgaW50KgkgLAogICAgdW5zaWduZWQgaW50KgkgCgopOwoK
ZXh0ZXJuIGludCAgWFF1ZXJ5QmVzdFRpbGUoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJs
ZQkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25l
ZCBpbnQqCSAsCiAgICB1bnNpZ25lZCBpbnQqCSAKCik7CgpleHRlcm4gaW50IFhRdWVyeUNvbG9y
KAoKICAgIERpc3BsYXkqCQkgLAogICAgQ29sb3JtYXAJCSAsCiAgICBYQ29sb3IqCQkgCgopOwoK
ZXh0ZXJuIGludCBYUXVlcnlDb2xvcnMoCgogICAgRGlzcGxheSoJCSAsCiAgICBDb2xvcm1hcAkJ
ICwKICAgIFhDb2xvcioJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCAgWFF1ZXJ5RXh0
ZW5zaW9uKAoKICAgIERpc3BsYXkqCQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBpbnQqCQkg
LAogICAgaW50KgkJICwKICAgIGludCoJCSAKCik7CgpleHRlcm4gaW50IFhRdWVyeUtleW1hcCgK
CiAgICBEaXNwbGF5KgkJICwKICAgIGNoYXIgWzMyXQkJIAoKKTsKCmV4dGVybiBpbnQgIFhRdWVy
eVBvaW50ZXIoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBXaW5kb3cqCQkg
LAogICAgV2luZG93KgkJICwKICAgIGludCoJCSAsCiAgICBpbnQqCQkgLAogICAgaW50KgkJICwK
ICAgIGludCoJCSAsCiAgICB1bnNpZ25lZCBpbnQqICAgICAgICAKCik7CgpleHRlcm4gaW50IFhR
dWVyeVRleHRFeHRlbnRzKAoKICAgIERpc3BsYXkqCQkgLAogICAgWElECQkJICwKICAgIGNvbnN0
ICBjaGFyKgkgLAogICAgaW50CQkJICwKICAgIGludCoJCSAsCiAgICBpbnQqCQkgLAogICAgaW50
KgkJICwKICAgIFhDaGFyU3RydWN0KgkgICAgIAoKKTsKCmV4dGVybiBpbnQgWFF1ZXJ5VGV4dEV4
dGVudHMxNigKCiAgICBEaXNwbGF5KgkJICwKICAgIFhJRAkJCSAsCiAgICBjb25zdCAgWENoYXIy
YioJICwKICAgIGludAkJCSAsCiAgICBpbnQqCQkgLAogICAgaW50KgkJICwKICAgIGludCoJCSAs
CiAgICBYQ2hhclN0cnVjdCoJIAoKKTsKCmV4dGVybiBpbnQgIFhRdWVyeVRyZWUoCgogICAgRGlz
cGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBXaW5kb3cqCQkgLAogICAgV2luZG93KgkJICwK
ICAgIFdpbmRvdyoqCQkgLAogICAgdW5zaWduZWQgaW50KgkgCgopOwoKZXh0ZXJuIGludCBYUmFp
c2VXaW5kb3coCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAKCik7CgpleHRlcm4gaW50
IFhSZWFkQml0bWFwRmlsZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlIAkJICwKICAg
IGNvbnN0ICBjaGFyKgkgLAogICAgdW5zaWduZWQgaW50KgkgLAogICAgdW5zaWduZWQgaW50Kgkg
LAogICAgUGl4bWFwKgkJICwKICAgIGludCoJCSAsCiAgICBpbnQqCQkgCgopOwoKZXh0ZXJuIGlu
dCBYUmVhZEJpdG1hcEZpbGVEYXRhKAoKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgdW5zaWduZWQg
aW50KgkgLAogICAgdW5zaWduZWQgaW50KgkgLAogICAgdW5zaWduZWQgY2hhcioqCSAsCiAgICBp
bnQqCQkgLAogICAgaW50KgkJIAoKKTsKCmV4dGVybiBpbnQgWFJlYmluZEtleXN5bSgKCiAgICBE
aXNwbGF5KgkJICwKICAgIEtleVN5bQkJICwKICAgIEtleVN5bSoJCSAsCiAgICBpbnQJCQkgLAog
ICAgY29uc3QgIHVuc2lnbmVkIGNoYXIqCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBY
UmVjb2xvckN1cnNvcigKCiAgICBEaXNwbGF5KgkJICwKICAgIEN1cnNvcgkJICwKICAgIFhDb2xv
cioJCSAsCiAgICBYQ29sb3IqCQkgCgopOwoKZXh0ZXJuIGludCBYUmVmcmVzaEtleWJvYXJkTWFw
cGluZygKCiAgICBYTWFwcGluZ0V2ZW50KgkgICAgIAoKKTsKCmV4dGVybiBpbnQgWFJlbW92ZUZy
b21TYXZlU2V0KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgCgopOwoKZXh0ZXJuIGlu
dCBYUmVtb3ZlSG9zdCgKCiAgICBEaXNwbGF5KgkJICwKICAgIFhIb3N0QWRkcmVzcyoJIAoKKTsK
CmV4dGVybiBpbnQgWFJlbW92ZUhvc3RzKAoKICAgIERpc3BsYXkqCQkgLAogICAgWEhvc3RBZGRy
ZXNzKgkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWFJlcGFyZW50V2luZG93KAoKICAg
IERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgV2luZG93CQkgLAogICAgaW50CQkJICwK
ICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhSZXNldFNjcmVlblNhdmVyKAoKICAgIERpc3Bs
YXkqCQkgCgopOwoKZXh0ZXJuIGludCBYUmVzaXplV2luZG93KAoKICAgIERpc3BsYXkqCQkgLAog
ICAgV2luZG93CQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBpbnQJIAoKKTsK
CmV4dGVybiBpbnQgWFJlc3RhY2tXaW5kb3dzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93
KgkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhSb3RhdGVCdWZmZXJzKAoKICAgIERp
c3BsYXkqCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWFJvdGF0ZVdpbmRvd1Byb3Bl
cnRpZXMoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBBdG9tKgkJICwKICAg
IGludAkJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYU2NyZWVuQ291bnQoCgogICAg
RGlzcGxheSoJCSAKCik7CgpleHRlcm4gaW50IFhTZWxlY3RJbnB1dCgKCiAgICBEaXNwbGF5KgkJ
ICwKICAgIFdpbmRvdwkJICwKICAgIGxvbmcJCSAKCik7CgpleHRlcm4gaW50ICBYU2VuZEV2ZW50
KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50IAkJICwKICAgIGxvbmcJ
CSAsCiAgICBYRXZlbnQqCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0QWNjZXNzQ29udHJvbCgKCiAg
ICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhTZXRBcmNNb2RlKAoK
ICAgIERpc3BsYXkqCQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQg
WFNldEJhY2tncm91bmQoCgogICAgRGlzcGxheSoJCSAsCiAgICBHQwkJCSAsCiAgICB1bnNpZ25l
ZCBsb25nCSAKCik7CgpleHRlcm4gaW50IFhTZXRDbGlwTWFzaygKCiAgICBEaXNwbGF5KgkJICwK
ICAgIEdDCQkJICwKICAgIFBpeG1hcAkJIAoKKTsKCmV4dGVybiBpbnQgWFNldENsaXBPcmlnaW4o
CgogICAgRGlzcGxheSoJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoK
KTsKCmV4dGVybiBpbnQgWFNldENsaXBSZWN0YW5nbGVzKAoKICAgIERpc3BsYXkqCQkgLAogICAg
R0MJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBYUmVjdGFuZ2xlKgkJICwKICAg
IGludAkJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0Q2xvc2VEb3duTW9kZSgK
CiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhTZXRDb21tYW5k
KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgY2hhcioqCQkgLAogICAgaW50
CQkJIAoKKTsKCmV4dGVybiBpbnQgWFNldERhc2hlcygKCiAgICBEaXNwbGF5KgkJICwKICAgIEdD
CQkJICwKICAgIGludAkJCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIGludAkJCSAKCik7Cgpl
eHRlcm4gaW50IFhTZXRGaWxsUnVsZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIEdDCQkJICwKICAg
IGludAkJCSAKCik7CgpleHRlcm4gaW50IFhTZXRGaWxsU3R5bGUoCgogICAgRGlzcGxheSoJCSAs
CiAgICBHQwkJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0Rm9udCgKCiAgICBE
aXNwbGF5KgkJICwKICAgIEdDCQkJICwKICAgIEZvbnQJCSAKCik7CgpleHRlcm4gaW50IFhTZXRG
b250UGF0aCgKCiAgICBEaXNwbGF5KgkJICwKICAgIGNoYXIqKgkJICwKICAgIGludAkJCSAJICAg
ICAKCik7CgpleHRlcm4gaW50IFhTZXRGb3JlZ3JvdW5kKAoKICAgIERpc3BsYXkqCQkgLAogICAg
R0MJCQkgLAogICAgdW5zaWduZWQgbG9uZwkgCgopOwoKZXh0ZXJuIGludCBYU2V0RnVuY3Rpb24o
CgogICAgRGlzcGxheSoJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGlu
dCBYU2V0R3JhcGhpY3NFeHBvc3VyZXMoCgogICAgRGlzcGxheSoJCSAsCiAgICBHQwkJCSAsCiAg
ICBpbnQgCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0SWNvbk5hbWUoCgogICAgRGlzcGxheSoJCSAs
CiAgICBXaW5kb3cJCSAsCiAgICBjb25zdCAgY2hhcioJIAoKKTsKCmV4dGVybiBpbnQgWFNldElu
cHV0Rm9jdXMoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBpbnQJCQkgLAog
ICAgVGltZQkJIAoKKTsKCmV4dGVybiBpbnQgWFNldExpbmVBdHRyaWJ1dGVzKAoKICAgIERpc3Bs
YXkqCQkgLAogICAgR0MJCQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICBpbnQJCQkgLAogICAg
aW50CQkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhTZXRNb2RpZmllck1hcHBpbmco
CgogICAgRGlzcGxheSoJCSAsCiAgICBYTW9kaWZpZXJLZXltYXAqCSAKCik7CgpleHRlcm4gaW50
IFhTZXRQbGFuZU1hc2soCgogICAgRGlzcGxheSoJCSAsCiAgICBHQwkJCSAsCiAgICB1bnNpZ25l
ZCBsb25nCSAKCik7CgpleHRlcm4gaW50IFhTZXRQb2ludGVyTWFwcGluZygKCiAgICBEaXNwbGF5
KgkJICwKICAgIGNvbnN0ICB1bnNpZ25lZCBjaGFyKgkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVy
biBpbnQgWFNldFNjcmVlblNhdmVyKAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50CQkJICwKICAg
IGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWFNldFNl
bGVjdGlvbk93bmVyKAoKICAgIERpc3BsYXkqCQkgLAogICAgQXRvbQkgICAgICAgICAsCiAgICBX
aW5kb3cJCSAsCiAgICBUaW1lCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0U3RhdGUoCgogICAgRGlz
cGxheSoJCSAsCiAgICBHQwkJCSAsCiAgICB1bnNpZ25lZCBsb25nIAkgLAogICAgdW5zaWduZWQg
bG9uZwkgLAogICAgaW50CQkJICwKICAgIHVuc2lnbmVkIGxvbmcJIAoKKTsKCmV4dGVybiBpbnQg
WFNldFN0aXBwbGUoCgogICAgRGlzcGxheSoJCSAsCiAgICBHQwkJCSAsCiAgICBQaXhtYXAJCSAK
Cik7CgpleHRlcm4gaW50IFhTZXRTdWJ3aW5kb3dNb2RlKAoKICAgIERpc3BsYXkqCQkgLAogICAg
R0MJCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWFNldFRTT3JpZ2luKAoKICAgIERp
c3BsYXkqCQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAKCik7CgpleHRl
cm4gaW50IFhTZXRUaWxlKAoKICAgIERpc3BsYXkqCQkgLAogICAgR0MJCQkgLAogICAgUGl4bWFw
CQkgCgopOwoKZXh0ZXJuIGludCBYU2V0V2luZG93QmFja2dyb3VuZCgKCiAgICBEaXNwbGF5KgkJ
ICwKICAgIFdpbmRvdwkJICwKICAgIHVuc2lnbmVkIGxvbmcJIAoKKTsKCmV4dGVybiBpbnQgWFNl
dFdpbmRvd0JhY2tncm91bmRQaXhtYXAoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAs
CiAgICBQaXhtYXAJCSAKCik7CgpleHRlcm4gaW50IFhTZXRXaW5kb3dCb3JkZXIoCgogICAgRGlz
cGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICB1bnNpZ25lZCBsb25nCSAKCik7CgpleHRlcm4g
aW50IFhTZXRXaW5kb3dCb3JkZXJQaXhtYXAoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJ
CSAsCiAgICBQaXhtYXAJCSAKCik7CgpleHRlcm4gaW50IFhTZXRXaW5kb3dCb3JkZXJXaWR0aCgK
CiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIHVuc2lnbmVkIGludAkgCgopOwoK
ZXh0ZXJuIGludCBYU2V0V2luZG93Q29sb3JtYXAoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5k
b3cJCSAsCiAgICBDb2xvcm1hcAkJIAoKKTsKCmV4dGVybiBpbnQgWFN0b3JlQnVmZmVyKAoKICAg
IERpc3BsYXkqCQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJ
IAoKKTsKCmV4dGVybiBpbnQgWFN0b3JlQnl0ZXMoCgogICAgRGlzcGxheSoJCSAsCiAgICBjb25z
dCAgY2hhcioJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhTdG9yZUNvbG9yKAoKICAg
IERpc3BsYXkqCQkgLAogICAgQ29sb3JtYXAJCSAsCiAgICBYQ29sb3IqCQkgCgopOwoKZXh0ZXJu
IGludCBYU3RvcmVDb2xvcnMoCgogICAgRGlzcGxheSoJCSAsCiAgICBDb2xvcm1hcAkJICwKICAg
IFhDb2xvcioJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYU3RvcmVOYW1lKAoKICAg
IERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgY29uc3QgIGNoYXIqCSAKCik7CgpleHRl
cm4gaW50IFhTdG9yZU5hbWVkQ29sb3IoCgogICAgRGlzcGxheSoJCSAsCiAgICBDb2xvcm1hcAkJ
ICwKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgdW5zaWduZWQgbG9uZwkgLAogICAgaW50CQkJIAoK
KTsKCmV4dGVybiBpbnQgWFN5bmMoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQgCQkgCgopOwoK
ZXh0ZXJuIGludCBYVGV4dEV4dGVudHMoCgogICAgWEZvbnRTdHJ1Y3QqCSAsCiAgICBjb25zdCAg
Y2hhcioJICwKICAgIGludAkJCSAsCiAgICBpbnQqCQkgLAogICAgaW50KgkJICwKICAgIGludCoJ
CSAsCiAgICBYQ2hhclN0cnVjdCoJIAoKKTsKCmV4dGVybiBpbnQgWFRleHRFeHRlbnRzMTYoCgog
ICAgWEZvbnRTdHJ1Y3QqCSAsCiAgICBjb25zdCAgWENoYXIyYioJICwKICAgIGludAkJCSAsCiAg
ICBpbnQqCQkgLAogICAgaW50KgkJICwKICAgIGludCoJCSAsCiAgICBYQ2hhclN0cnVjdCoJIAoK
KTsKCmV4dGVybiBpbnQgWFRleHRXaWR0aCgKCiAgICBYRm9udFN0cnVjdCoJICwKICAgIGNvbnN0
ICBjaGFyKgkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWFRleHRXaWR0aDE2KAoKICAg
IFhGb250U3RydWN0KgkgLAogICAgY29uc3QgIFhDaGFyMmIqCSAsCiAgICBpbnQJCQkgCgopOwoK
ZXh0ZXJuIGludCAgWFRyYW5zbGF0ZUNvb3JkaW5hdGVzKAoKICAgIERpc3BsYXkqCQkgLAogICAg
V2luZG93CQkgLAogICAgV2luZG93CQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBp
bnQqCQkgLAogICAgaW50KgkJICwKICAgIFdpbmRvdyoJCSAKCik7CgpleHRlcm4gaW50IFhVbmRl
ZmluZUN1cnNvcigKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJIAoKKTsKCmV4dGVybiBp
bnQgWFVuZ3JhYkJ1dHRvbigKCiAgICBEaXNwbGF5KgkJICwKICAgIHVuc2lnbmVkIGludAkgLAog
ICAgdW5zaWduZWQgaW50CSAsCiAgICBXaW5kb3cJCSAKCik7CgpleHRlcm4gaW50IFhVbmdyYWJL
ZXkoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJCQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAg
ICBXaW5kb3cJCSAKCik7CgpleHRlcm4gaW50IFhVbmdyYWJLZXlib2FyZCgKCiAgICBEaXNwbGF5
KgkJICwKICAgIFRpbWUJCSAKCik7CgpleHRlcm4gaW50IFhVbmdyYWJQb2ludGVyKAoKICAgIERp
c3BsYXkqCQkgLAogICAgVGltZQkJIAoKKTsKCmV4dGVybiBpbnQgWFVuZ3JhYlNlcnZlcigKCiAg
ICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBpbnQgWFVuaW5zdGFsbENvbG9ybWFwKAoKICAgIERp
c3BsYXkqCQkgLAogICAgQ29sb3JtYXAJCSAKCik7CgpleHRlcm4gaW50IFhVbmxvYWRGb250KAoK
ICAgIERpc3BsYXkqCQkgLAogICAgRm9udAkJIAoKKTsKCmV4dGVybiBpbnQgWFVubWFwU3Vid2lu
ZG93cygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJIAoKKTsKCmV4dGVybiBpbnQgWFVu
bWFwV2luZG93KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgCgopOwoKZXh0ZXJuIGlu
dCBYVmVuZG9yUmVsZWFzZSgKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBpbnQgWFdhcnBQ
b2ludGVyKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgV2luZG93CQkgLAog
ICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVk
IGludAkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAJICAgICAKCik7CgpleHRlcm4gaW50IFhX
aWR0aE1NT2ZTY3JlZW4oCgogICAgU2NyZWVuKgkJIAoKKTsKCmV4dGVybiBpbnQgWFdpZHRoT2ZT
Y3JlZW4oCgogICAgU2NyZWVuKgkJIAoKKTsKCmV4dGVybiBpbnQgWFdpbmRvd0V2ZW50KAoKICAg
IERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgbG9uZwkJICwKICAgIFhFdmVudCoJCSAK
Cik7CgpleHRlcm4gaW50IFhXcml0ZUJpdG1hcEZpbGUoCgogICAgRGlzcGxheSoJCSAsCiAgICBj
b25zdCAgY2hhcioJICwKICAgIFBpeG1hcAkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5z
aWduZWQgaW50CSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAkJICAgICAKCik7CgpleHRlcm4g
aW50ICBYU3VwcG9ydHNMb2NhbGUoCgogICAgdm9pZAoKKTsKCmV4dGVybiBjaGFyICpYU2V0TG9j
YWxlTW9kaWZpZXJzKAoKICAgIGNvbnN0ICBjaGFyKgkgCgopOwoKZXh0ZXJuIFhPTSBYT3Blbk9N
KAoKICAgIERpc3BsYXkqCQkJICwKICAgIHN0cnVjdCBfWHJtSGFzaEJ1Y2tldFJlYyoJICwKICAg
IGNvbnN0ICBjaGFyKgkJICwKICAgIGNvbnN0ICBjaGFyKgkJIAoKKTsKCmV4dGVybiBpbnQgIFhD
bG9zZU9NKAoKICAgIFhPTQkJCSAKCik7CgpleHRlcm4gY2hhciAqWFNldE9NVmFsdWVzKAoKICAg
IFhPTQkJCSAsCiAgICAuLi4KCik7CgpleHRlcm4gY2hhciAqWEdldE9NVmFsdWVzKAoKICAgIFhP
TQkJCSAsCiAgICAuLi4KCik7CgpleHRlcm4gRGlzcGxheSAqWERpc3BsYXlPZk9NKAoKICAgIFhP
TQkJCSAKCik7CgpleHRlcm4gY2hhciAqWExvY2FsZU9mT00oCgogICAgWE9NCQkJIAoKKTsKCmV4
dGVybiBYT0MgWENyZWF0ZU9DKAoKICAgIFhPTQkJCSAsCiAgICAuLi4KCik7CgpleHRlcm4gdm9p
ZCBYRGVzdHJveU9DKAoKICAgIFhPQwkJCSAKCik7CgpleHRlcm4gWE9NIFhPTU9mT0MoCgogICAg
WE9DCQkJIAoKKTsKCmV4dGVybiBjaGFyICpYU2V0T0NWYWx1ZXMoCgogICAgWE9DCQkJICwKICAg
IC4uLgoKKTsKCmV4dGVybiBjaGFyICpYR2V0T0NWYWx1ZXMoCgogICAgWE9DCQkJICwKICAgIC4u
LgoKKTsKCmV4dGVybiBYRm9udFNldCBYQ3JlYXRlRm9udFNldCgKCiAgICBEaXNwbGF5KgkJICwK
ICAgIGNvbnN0ICBjaGFyKgkgLAogICAgY2hhcioqKgkJICwKICAgIGludCoJCSAsCiAgICBjaGFy
KioJCSAKCik7CgpleHRlcm4gdm9pZCBYRnJlZUZvbnRTZXQoCgogICAgRGlzcGxheSoJCSAsCiAg
ICBYRm9udFNldAkJIAoKKTsKCmV4dGVybiBpbnQgWEZvbnRzT2ZGb250U2V0KAoKICAgIFhGb250
U2V0CQkgLAogICAgWEZvbnRTdHJ1Y3QqKioJICwKICAgIGNoYXIqKioJCSAKCik7CgpleHRlcm4g
Y2hhciAqWEJhc2VGb250TmFtZUxpc3RPZkZvbnRTZXQoCgogICAgWEZvbnRTZXQJCSAKCik7Cgpl
eHRlcm4gY2hhciAqWExvY2FsZU9mRm9udFNldCgKCiAgICBYRm9udFNldAkJIAoKKTsKCmV4dGVy
biBpbnQgIFhDb250ZXh0RGVwZW5kZW50RHJhd2luZygKCiAgICBYRm9udFNldAkJIAoKKTsKCmV4
dGVybiBpbnQgIFhEaXJlY3Rpb25hbERlcGVuZGVudERyYXdpbmcoCgogICAgWEZvbnRTZXQJCSAK
Cik7CgpleHRlcm4gaW50ICBYQ29udGV4dHVhbERyYXdpbmcoCgogICAgWEZvbnRTZXQJCSAKCik7
CgpleHRlcm4gWEZvbnRTZXRFeHRlbnRzICpYRXh0ZW50c09mRm9udFNldCgKCiAgICBYRm9udFNl
dAkJIAoKKTsKCmV4dGVybiBpbnQgWG1iVGV4dEVzY2FwZW1lbnQoCgogICAgWEZvbnRTZXQJCSAs
CiAgICBjb25zdCAgY2hhcioJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFh3Y1RleHRF
c2NhcGVtZW50KAoKICAgIFhGb250U2V0CQkgLAogICAgY29uc3QgIHdjaGFyX3QqCSAsCiAgICBp
bnQJCQkgCgopOwoKZXh0ZXJuIGludCBYbWJUZXh0RXh0ZW50cygKCiAgICBYRm9udFNldAkJICwK
ICAgIGNvbnN0ICBjaGFyKgkgLAogICAgaW50CQkJICwKICAgIFhSZWN0YW5nbGUqCQkgLAogICAg
WFJlY3RhbmdsZSoJCSAKCik7CgpleHRlcm4gaW50IFh3Y1RleHRFeHRlbnRzKAoKICAgIFhGb250
U2V0CQkgLAogICAgY29uc3QgIHdjaGFyX3QqCSAsCiAgICBpbnQJCQkgLAogICAgWFJlY3Rhbmds
ZSoJCSAsCiAgICBYUmVjdGFuZ2xlKgkJIAoKKTsKCmV4dGVybiBpbnQgIFhtYlRleHRQZXJDaGFy
RXh0ZW50cygKCiAgICBYRm9udFNldAkJICwKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgaW50CQkJ
ICwKICAgIFhSZWN0YW5nbGUqCQkgLAogICAgWFJlY3RhbmdsZSoJCSAsCiAgICBpbnQJCQkgLAog
ICAgaW50KgkJICwKICAgIFhSZWN0YW5nbGUqCQkgLAogICAgWFJlY3RhbmdsZSoJCSAKCik7Cgpl
eHRlcm4gaW50ICBYd2NUZXh0UGVyQ2hhckV4dGVudHMoCgogICAgWEZvbnRTZXQJCSAsCiAgICBj
b25zdCAgd2NoYXJfdCoJICwKICAgIGludAkJCSAsCiAgICBYUmVjdGFuZ2xlKgkJICwKICAgIFhS
ZWN0YW5nbGUqCQkgLAogICAgaW50CQkJICwKICAgIGludCoJCSAsCiAgICBYUmVjdGFuZ2xlKgkJ
ICwKICAgIFhSZWN0YW5nbGUqCQkgCgopOwoKZXh0ZXJuIHZvaWQgWG1iRHJhd1RleHQoCgogICAg
RGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIEdDCQkJICwKICAgIGludAkJCSAsCiAg
ICBpbnQJCQkgLAogICAgWG1iVGV4dEl0ZW0qCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIHZv
aWQgWHdjRHJhd1RleHQoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIEdD
CQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgWHdjVGV4dEl0ZW0qCSAsCiAgICBp
bnQJCQkgCgopOwoKZXh0ZXJuIHZvaWQgWG1iRHJhd1N0cmluZygKCiAgICBEaXNwbGF5KgkJICwK
ICAgIERyYXdhYmxlCQkgLAogICAgWEZvbnRTZXQJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkg
LAogICAgaW50CQkJICwKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVy
biB2b2lkIFh3Y0RyYXdTdHJpbmcoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwK
ICAgIFhGb250U2V0CQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAg
ICBjb25zdCAgd2NoYXJfdCoJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gdm9pZCBYbWJEcmF3
SW1hZ2VTdHJpbmcoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIFhGb250
U2V0CQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBjb25zdCAg
Y2hhcioJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gdm9pZCBYd2NEcmF3SW1hZ2VTdHJpbmco
CgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIFhGb250U2V0CQkgLAogICAg
R0MJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBjb25zdCAgd2NoYXJfdCoJICwK
ICAgIGludAkJCSAKCik7CgpleHRlcm4gWElNIFhPcGVuSU0oCgogICAgRGlzcGxheSoJCQkgLAog
ICAgc3RydWN0IF9Ycm1IYXNoQnVja2V0UmVjKgkgLAogICAgY2hhcioJCQkgLAogICAgY2hhcioJ
CQkgCgopOwoKZXh0ZXJuIGludCAgWENsb3NlSU0oCgogICAgWElNICAKCik7CgpleHRlcm4gY2hh
ciAqWEdldElNVmFsdWVzKAoKICAgIFhJTSAgLCAuLi4KCik7CgpleHRlcm4gRGlzcGxheSAqWERp
c3BsYXlPZklNKAoKICAgIFhJTSAgCgopOwoKZXh0ZXJuIGNoYXIgKlhMb2NhbGVPZklNKAoKICAg
IFhJTSAgCgopOwoKZXh0ZXJuIFhJQyBYQ3JlYXRlSUMoCgogICAgWElNICAsIC4uLgoKKTsKCmV4
dGVybiB2b2lkIFhEZXN0cm95SUMoCgogICAgWElDICAKCik7CgpleHRlcm4gdm9pZCBYU2V0SUNG
b2N1cygKCiAgICBYSUMgIAoKKTsKCmV4dGVybiB2b2lkIFhVbnNldElDRm9jdXMoCgogICAgWElD
ICAKCik7CgpleHRlcm4gd2NoYXJfdCAqWHdjUmVzZXRJQygKCiAgICBYSUMgIAoKKTsKCmV4dGVy
biBjaGFyICpYbWJSZXNldElDKAoKICAgIFhJQyAgCgopOwoKZXh0ZXJuIGNoYXIgKlhTZXRJQ1Zh
bHVlcygKCiAgICBYSUMgICwgLi4uCgopOwoKZXh0ZXJuIGNoYXIgKlhHZXRJQ1ZhbHVlcygKCiAg
ICBYSUMgICwgLi4uCgopOwoKZXh0ZXJuIFhJTSBYSU1PZklDKAoKICAgIFhJQyAgCgopOwoKZXh0
ZXJuIGludCAgWEZpbHRlckV2ZW50KAoKICAgIFhFdmVudCoJICwKICAgIFdpbmRvdwkgCgopOwoK
ZXh0ZXJuIGludCBYbWJMb29rdXBTdHJpbmcoCgogICAgWElDCQkJICwKICAgIFhLZXlQcmVzc2Vk
RXZlbnQqCSAsCiAgICBjaGFyKgkJICwKICAgIGludAkJCSAsCiAgICBLZXlTeW0qCQkgLAogICAg
aW50ICoJCSAKCik7CgpleHRlcm4gaW50IFh3Y0xvb2t1cFN0cmluZygKCiAgICBYSUMJCQkgLAog
ICAgWEtleVByZXNzZWRFdmVudCoJICwKICAgIHdjaGFyX3QqCQkgLAogICAgaW50CQkJICwKICAg
IEtleVN5bSoJCSAsCiAgICBpbnQgKgkJIAoKKTsKCmV4dGVybiBYVmFOZXN0ZWRMaXN0IFhWYUNy
ZWF0ZU5lc3RlZExpc3QoCgogICAgaW50ICAsIC4uLgoKKTsKCiAKCmV4dGVybiBpbnQgIFhSZWdp
c3RlcklNSW5zdGFudGlhdGVDYWxsYmFjaygKCiAgICBEaXNwbGF5KgkJCSAsCiAgICBzdHJ1Y3Qg
X1hybUhhc2hCdWNrZXRSZWMqCSAsCiAgICBjaGFyKgkJCSAsCiAgICBjaGFyKgkJCSAsCiAgICBY
SU1Qcm9jCQkJICwKICAgIFhQb2ludGVyKgkJCSAKCik7CgpleHRlcm4gaW50ICBYVW5yZWdpc3Rl
cklNSW5zdGFudGlhdGVDYWxsYmFjaygKCiAgICBEaXNwbGF5KgkJCSAsCiAgICBzdHJ1Y3QgX1hy
bUhhc2hCdWNrZXRSZWMqCSAsCiAgICBjaGFyKgkJCSAsCiAgICBjaGFyKgkJCSAsCiAgICBYSU1Q
cm9jCQkJICwKICAgIFhQb2ludGVyKgkJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpYQ29ubmVjdGlv
bldhdGNoUHJvYykoCgogICAgRGlzcGxheSoJCQkgLAogICAgWFBvaW50ZXIJCQkgLAogICAgaW50
CQkJCSAsCiAgICBpbnQgCQkJICwJICAKICAgIFhQb2ludGVyKgkJCSAgIAoKKTsKICAgIAoKZXh0
ZXJuIGludCAgWEludGVybmFsQ29ubmVjdGlvbk51bWJlcnMoCgogICAgRGlzcGxheSoJCQkgLAog
ICAgaW50KioJCQkgLAogICAgaW50KgkJCSAKCik7CgpleHRlcm4gdm9pZCBYUHJvY2Vzc0ludGVy
bmFsQ29ubmVjdGlvbigKCiAgICBEaXNwbGF5KgkJCSAsCiAgICBpbnQJCQkJIAoKKTsKCmV4dGVy
biBpbnQgIFhBZGRDb25uZWN0aW9uV2F0Y2goCgogICAgRGlzcGxheSoJCQkgLAogICAgWENvbm5l
Y3Rpb25XYXRjaFByb2MJICwKICAgIFhQb2ludGVyCQkJIAoKKTsKCmV4dGVybiB2b2lkIFhSZW1v
dmVDb25uZWN0aW9uV2F0Y2goCgogICAgRGlzcGxheSoJCQkgLAogICAgWENvbm5lY3Rpb25XYXRj
aFByb2MJICwKICAgIFhQb2ludGVyCQkJIAoKKTsKCn0gCgoKIyA1NiAiL3Vzci9vcGVud2luL2lu
Y2x1ZGUvWDExL0ludHJpbnNpYy5oIiAyCgojIDEgIi91c3Ivb3Blbndpbi9pbmNsdWRlL1gxMS9Y
dXRpbC5oIiAxCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCiNwcmFnbWEgaWRlbnQgIkAoIylYdXRpbC5oCTEuMgkwMC8wNy8wNSBTTUkiCgog
CgogCgoKCgoKCgoKCgoKCiAKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgCWxvbmcgZmxhZ3M7CSAK
CWludCB4LCB5OwkJIAoJaW50IHdpZHRoLCBoZWlnaHQ7CSAKCWludCBtaW5fd2lkdGgsIG1pbl9o
ZWlnaHQ7CglpbnQgbWF4X3dpZHRoLCBtYXhfaGVpZ2h0OwogICAgCWludCB3aWR0aF9pbmMsIGhl
aWdodF9pbmM7CglzdHJ1Y3QgewoJCWludCB4OwkgCgkJaW50IHk7CSAKCX0gbWluX2FzcGVjdCwg
bWF4X2FzcGVjdDsKCWludCBiYXNlX3dpZHRoLCBiYXNlX2hlaWdodDsJCSAKCWludCB3aW5fZ3Jh
dml0eTsJCQkgCn0gWFNpemVIaW50czsKCiAKCgoKCiAKCgoKCgoKCgoKCgoKIAoKCgoKdHlwZWRl
ZiBzdHJ1Y3QgewoJbG9uZyBmbGFnczsJIAoJaW50ICBpbnB1dDsJIAoKCWludCBpbml0aWFsX3N0
YXRlOwkgCglQaXhtYXAgaWNvbl9waXhtYXA7CSAKCVdpbmRvdyBpY29uX3dpbmRvdzsgCSAKCWlu
dCBpY29uX3gsIGljb25feTsgCSAKCVBpeG1hcCBpY29uX21hc2s7CSAKCVhJRCB3aW5kb3dfZ3Jv
dXA7CSAKCSAKfSBYV01IaW50czsKCiAKCgoKCgoKCgoKCgoKIAoKCgoKIAoKCgoKCgkJCSAKCgog
CgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIHVuc2lnbmVkIGNoYXIgKnZhbHVlOwkJIAogICAgQXRv
bSBlbmNvZGluZzsJCQkgCiAgICBpbnQgZm9ybWF0OwkJCQkgCiAgICB1bnNpZ25lZCBsb25nIG5p
dGVtczsJCSAKfSBYVGV4dFByb3BlcnR5OwoKCgoKCnR5cGVkZWYgZW51bSB7CiAgICBYU3RyaW5n
U3R5bGUsCQkgCiAgICBYQ29tcG91bmRUZXh0U3R5bGUsCQkgCiAgICBYVGV4dFN0eWxlLAkJCSAK
ICAgIFhTdGRJQ0NUZXh0U3R5bGUJCSAKfSBYSUNDRW5jb2RpbmdTdHlsZTsKCnR5cGVkZWYgc3Ry
dWN0IHsKCWludCBtaW5fd2lkdGgsIG1pbl9oZWlnaHQ7CglpbnQgbWF4X3dpZHRoLCBtYXhfaGVp
Z2h0OwoJaW50IHdpZHRoX2luYywgaGVpZ2h0X2luYzsKfSBYSWNvblNpemU7Cgp0eXBlZGVmIHN0
cnVjdCB7CgljaGFyICpyZXNfbmFtZTsKCWNoYXIgKnJlc19jbGFzczsKfSBYQ2xhc3NIaW50OwoK
IAoKCgoKCgoKCgoKCgoKCiAKCgp0eXBlZGVmIHN0cnVjdCBfWENvbXBvc2VTdGF0dXMgewogICAg
WFBvaW50ZXIgY29tcG9zZV9wdHI7CSAKICAgIGludCBjaGFyc19tYXRjaGVkOwkJIAp9IFhDb21w
b3NlU3RhdHVzOwoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKdHlwZWRlZiBzdHJ1Y3Qg
X1hSZWdpb24gKlJlZ2lvbjsgCgogCiAKCgoKIAoKIAoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogIFZp
c3VhbCAqdmlzdWFsOwogIFZpc3VhbElEIHZpc3VhbGlkOwogIGludCBzY3JlZW47CiAgaW50IGRl
cHRoOwoKICBpbnQgY19jbGFzczsJCQkJCSAKCgoKICB1bnNpZ25lZCBsb25nIHJlZF9tYXNrOwog
IHVuc2lnbmVkIGxvbmcgZ3JlZW5fbWFzazsKICB1bnNpZ25lZCBsb25nIGJsdWVfbWFzazsKICBp
bnQgY29sb3JtYXBfc2l6ZTsKICBpbnQgYml0c19wZXJfcmdiOwp9IFhWaXN1YWxJbmZvOwoKCgoK
CgoKCgoKCgoKIAoKCgp0eXBlZGVmIHN0cnVjdCB7CglDb2xvcm1hcCBjb2xvcm1hcDsKCXVuc2ln
bmVkIGxvbmcgcmVkX21heDsKCXVuc2lnbmVkIGxvbmcgcmVkX211bHQ7Cgl1bnNpZ25lZCBsb25n
IGdyZWVuX21heDsKCXVuc2lnbmVkIGxvbmcgZ3JlZW5fbXVsdDsKCXVuc2lnbmVkIGxvbmcgYmx1
ZV9tYXg7Cgl1bnNpZ25lZCBsb25nIGJsdWVfbXVsdDsKCXVuc2lnbmVkIGxvbmcgYmFzZV9waXhl
bDsKCVZpc3VhbElEIHZpc3VhbGlkOwkJIAoJWElEIGtpbGxpZDsJCQkgCn0gWFN0YW5kYXJkQ29s
b3JtYXA7CgoKCgogCgoKCgoKCgogCgoKCgoKCiAKCgoKCgp0eXBlZGVmIGludCBYQ29udGV4dDsK
CgoKCmV4dGVybiAiQyIgeyAKCiAKCmV4dGVybiBYQ2xhc3NIaW50ICpYQWxsb2NDbGFzc0hpbnQg
KAoKICAgIHZvaWQKCik7CgpleHRlcm4gWEljb25TaXplICpYQWxsb2NJY29uU2l6ZSAoCgogICAg
dm9pZAoKKTsKCmV4dGVybiBYU2l6ZUhpbnRzICpYQWxsb2NTaXplSGludHMgKAoKICAgIHZvaWQK
Cik7CgpleHRlcm4gWFN0YW5kYXJkQ29sb3JtYXAgKlhBbGxvY1N0YW5kYXJkQ29sb3JtYXAgKAoK
ICAgIHZvaWQKCik7CgpleHRlcm4gWFdNSGludHMgKlhBbGxvY1dNSGludHMgKAoKICAgIHZvaWQK
Cik7CgpleHRlcm4gaW50IFhDbGlwQm94KAoKICAgIFJlZ2lvbgkJICwKICAgIFhSZWN0YW5nbGUq
CQkgCgopOwoKZXh0ZXJuIFJlZ2lvbiBYQ3JlYXRlUmVnaW9uKAoKICAgIHZvaWQKCik7CgpleHRl
cm4gY2hhciAqWERlZmF1bHRTdHJpbmcoCgogICAgdm9pZAoKKTsKCmV4dGVybiBpbnQgWERlbGV0
ZUNvbnRleHQoCgogICAgRGlzcGxheSoJCSAsCiAgICBYSUQJCQkgLAogICAgWENvbnRleHQJCSAK
Cik7CgpleHRlcm4gaW50IFhEZXN0cm95UmVnaW9uKAoKICAgIFJlZ2lvbgkJIAoKKTsKCmV4dGVy
biBpbnQgWEVtcHR5UmVnaW9uKAoKICAgIFJlZ2lvbgkJIAoKKTsKCmV4dGVybiBpbnQgWEVxdWFs
UmVnaW9uKAoKICAgIFJlZ2lvbgkJICwKICAgIFJlZ2lvbgkJIAoKKTsKCmV4dGVybiBpbnQgWEZp
bmRDb250ZXh0KAoKICAgIERpc3BsYXkqCQkgLAogICAgWElECQkJICwKICAgIFhDb250ZXh0CQkg
LAogICAgWFBvaW50ZXIqCQkgCgopOwoKZXh0ZXJuIGludCAgWEdldENsYXNzSGludCgKCiAgICBE
aXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIFhDbGFzc0hpbnQqCQkgCgopOwoKZXh0ZXJu
IGludCAgWEdldEljb25TaXplcygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAg
IFhJY29uU2l6ZSoqCQkgLAogICAgaW50KgkJIAoKKTsKCmV4dGVybiBpbnQgIFhHZXROb3JtYWxI
aW50cygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIFhTaXplSGludHMqCQkg
CgopOwoKZXh0ZXJuIGludCAgWEdldFJHQkNvbG9ybWFwcygKCiAgICBEaXNwbGF5KgkJICwKICAg
IFdpbmRvdwkJICwKICAgIFhTdGFuZGFyZENvbG9ybWFwKiogICwKICAgIGludCoJCSAsCiAgICBB
dG9tCQkgCgopOwoKZXh0ZXJuIGludCAgWEdldFNpemVIaW50cygKCiAgICBEaXNwbGF5KgkJICwK
ICAgIFdpbmRvdwkJICwKICAgIFhTaXplSGludHMqCQkgLAogICAgQXRvbQkJIAoKKTsKCmV4dGVy
biBpbnQgIFhHZXRTdGFuZGFyZENvbG9ybWFwKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93
CQkgLAogICAgWFN0YW5kYXJkQ29sb3JtYXAqCSAsCiAgICBBdG9tCQkgCQkJICAgIAoKKTsKCmV4
dGVybiBpbnQgIFhHZXRUZXh0UHJvcGVydHkoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJ
CSAsCiAgICBYVGV4dFByb3BlcnR5KgkgLAogICAgQXRvbQkJIAoKKTsKCmV4dGVybiBYVmlzdWFs
SW5mbyAqWEdldFZpc3VhbEluZm8oCgogICAgRGlzcGxheSoJCSAsCiAgICBsb25nCQkgLAogICAg
WFZpc3VhbEluZm8qCSAsCiAgICBpbnQqCQkgCgopOwoKZXh0ZXJuIGludCAgWEdldFdNQ2xpZW50
TWFjaGluZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIFhUZXh0UHJvcGVy
dHkqCSAKCik7CgpleHRlcm4gWFdNSGludHMgKlhHZXRXTUhpbnRzKAoKICAgIERpc3BsYXkqCQkg
LAogICAgV2luZG93CQkgCQkgICAgICAKCik7CgpleHRlcm4gaW50ICBYR2V0V01JY29uTmFtZSgK
CiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIFhUZXh0UHJvcGVydHkqCSAKCik7
CgpleHRlcm4gaW50ICBYR2V0V01OYW1lKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkg
LAogICAgWFRleHRQcm9wZXJ0eSoJIAoKKTsKCmV4dGVybiBpbnQgIFhHZXRXTU5vcm1hbEhpbnRz
KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgWFNpemVIaW50cyoJCSAsCiAg
ICBsb25nKgkJICAKCik7CgpleHRlcm4gaW50ICBYR2V0V01TaXplSGludHMoCgogICAgRGlzcGxh
eSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBYU2l6ZUhpbnRzKgkJICwKICAgIGxvbmcqCQkgLAog
ICAgQXRvbQkJIAoKKTsKCmV4dGVybiBpbnQgIFhHZXRab29tSGludHMoCgogICAgRGlzcGxheSoJ
CSAsCiAgICBXaW5kb3cJCSAsCiAgICBYU2l6ZUhpbnRzKgkJIAoKKTsKCmV4dGVybiBpbnQgWElu
dGVyc2VjdFJlZ2lvbigKCiAgICBSZWdpb24JCSAsCiAgICBSZWdpb24JCSAsCiAgICBSZWdpb24J
CSAKCik7CgpleHRlcm4gdm9pZCBYQ29udmVydENhc2UoCgogICAgS2V5U3ltCQkgLAogICAgS2V5
U3ltKgkJICwKICAgIEtleVN5bSoJCSAKCik7CgpleHRlcm4gaW50IFhMb29rdXBTdHJpbmcoCgog
ICAgWEtleUV2ZW50KgkJICwKICAgIGNoYXIqCQkgLAogICAgaW50CQkJICwKICAgIEtleVN5bSoJ
CSAsCiAgICBYQ29tcG9zZVN0YXR1cyoJIAoKKTsKCmV4dGVybiBpbnQgIFhNYXRjaFZpc3VhbElu
Zm8oCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJ
CSAsCiAgICBYVmlzdWFsSW5mbyoJIAoKKTsKCmV4dGVybiBpbnQgWE9mZnNldFJlZ2lvbigKCiAg
ICBSZWdpb24JCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgIFhQ
b2ludEluUmVnaW9uKAoKICAgIFJlZ2lvbgkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgCgop
OwoKZXh0ZXJuIFJlZ2lvbiBYUG9seWdvblJlZ2lvbigKCiAgICBYUG9pbnQqCQkgLAogICAgaW50
CQkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhSZWN0SW5SZWdpb24oCgogICAgUmVn
aW9uCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAg
IHVuc2lnbmVkIGludAkgCgopOwoKZXh0ZXJuIGludCBYU2F2ZUNvbnRleHQoCgogICAgRGlzcGxh
eSoJCSAsCiAgICBYSUQJCQkgLAogICAgWENvbnRleHQJCSAsCiAgICBjb25zdCAgY2hhcioJIAoK
KTsKCmV4dGVybiBpbnQgWFNldENsYXNzSGludCgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRv
dwkJICwKICAgIFhDbGFzc0hpbnQqCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0SWNvblNpemVzKAoK
ICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgWEljb25TaXplKgkJICwKICAgIGlu
dAkJCSAgICAgCgopOwoKZXh0ZXJuIGludCBYU2V0Tm9ybWFsSGludHMoCgogICAgRGlzcGxheSoJ
CSAsCiAgICBXaW5kb3cJCSAsCiAgICBYU2l6ZUhpbnRzKgkJIAoKKTsKCmV4dGVybiB2b2lkIFhT
ZXRSR0JDb2xvcm1hcHMoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBYU3Rh
bmRhcmRDb2xvcm1hcCoJICwKICAgIGludAkJCSAsCiAgICBBdG9tCQkgCgopOwoKZXh0ZXJuIGlu
dCBYU2V0U2l6ZUhpbnRzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgWFNp
emVIaW50cyoJCSAsCiAgICBBdG9tCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0U3RhbmRhcmRQcm9w
ZXJ0aWVzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgY29uc3QgIGNoYXIq
CSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIFBpeG1hcAkJICwKICAgIGNoYXIqKgkJICwKICAg
IGludAkJCSAsCiAgICBYU2l6ZUhpbnRzKgkJIAoKKTsKCmV4dGVybiB2b2lkIFhTZXRUZXh0UHJv
cGVydHkoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBYVGV4dFByb3BlcnR5
KgkgLAogICAgQXRvbQkJIAoKKTsKCmV4dGVybiB2b2lkIFhTZXRXTUNsaWVudE1hY2hpbmUoCgog
ICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBYVGV4dFByb3BlcnR5KgkgCgopOwoK
ZXh0ZXJuIGludCBYU2V0V01IaW50cygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwK
ICAgIFhXTUhpbnRzKgkJIAoKKTsKCmV4dGVybiB2b2lkIFhTZXRXTUljb25OYW1lKAoKICAgIERp
c3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgWFRleHRQcm9wZXJ0eSoJIAoKKTsKCmV4dGVy
biB2b2lkIFhTZXRXTU5hbWUoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBY
VGV4dFByb3BlcnR5KgkgCgopOwoKZXh0ZXJuIHZvaWQgWFNldFdNTm9ybWFsSGludHMoCgogICAg
RGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBYU2l6ZUhpbnRzKgkJIAoKKTsKCmV4dGVy
biB2b2lkIFhTZXRXTVByb3BlcnRpZXMoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAs
CiAgICBYVGV4dFByb3BlcnR5KgkgLAogICAgWFRleHRQcm9wZXJ0eSoJICwKICAgIGNoYXIqKgkJ
ICwKICAgIGludAkJCSAsCiAgICBYU2l6ZUhpbnRzKgkJICwKICAgIFhXTUhpbnRzKgkJICwKICAg
IFhDbGFzc0hpbnQqCQkgCgopOwoKZXh0ZXJuIHZvaWQgWG1iU2V0V01Qcm9wZXJ0aWVzKAoKICAg
IERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBjb25z
dCAgY2hhcioJICwKICAgIGNoYXIqKgkJICwKICAgIGludAkJCSAsCiAgICBYU2l6ZUhpbnRzKgkJ
ICwKICAgIFhXTUhpbnRzKgkJICwKICAgIFhDbGFzc0hpbnQqCQkgCgopOwoKZXh0ZXJuIHZvaWQg
WFNldFdNU2l6ZUhpbnRzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgWFNp
emVIaW50cyoJCSAsCiAgICBBdG9tCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0UmVnaW9uKAoKICAg
IERpc3BsYXkqCQkgLAogICAgR0MJCQkgLAogICAgUmVnaW9uCQkgCgopOwoKZXh0ZXJuIHZvaWQg
WFNldFN0YW5kYXJkQ29sb3JtYXAoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAg
ICBYU3RhbmRhcmRDb2xvcm1hcCoJICwKICAgIEF0b20JCSAKCik7CgpleHRlcm4gaW50IFhTZXRa
b29tSGludHMoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBYU2l6ZUhpbnRz
KgkJIAoKKTsKCmV4dGVybiBpbnQgWFNocmlua1JlZ2lvbigKCiAgICBSZWdpb24JCSAsCiAgICBp
bnQJCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgIFhTdHJpbmdMaXN0VG9UZXh0UHJv
cGVydHkoCgogICAgY2hhcioqCQkgLAogICAgaW50CQkJICwKICAgIFhUZXh0UHJvcGVydHkqCSAK
Cik7CgpleHRlcm4gaW50IFhTdWJ0cmFjdFJlZ2lvbigKCiAgICBSZWdpb24JCSAsCiAgICBSZWdp
b24JCSAsCiAgICBSZWdpb24JCSAKCik7CgpleHRlcm4gaW50IFhtYlRleHRMaXN0VG9UZXh0UHJv
cGVydHkoCgogICAgRGlzcGxheSoJCSAsCiAgICBjaGFyKioJCSAsCiAgICBpbnQJCQkgLAogICAg
WElDQ0VuY29kaW5nU3R5bGUJICwKICAgIFhUZXh0UHJvcGVydHkqCSAKCik7CgpleHRlcm4gaW50
IFh3Y1RleHRMaXN0VG9UZXh0UHJvcGVydHkoCgogICAgRGlzcGxheSoJCSAsCiAgICB3Y2hhcl90
KioJCSAsCiAgICBpbnQJCQkgLAogICAgWElDQ0VuY29kaW5nU3R5bGUJICwKICAgIFhUZXh0UHJv
cGVydHkqCSAKCik7CgpleHRlcm4gdm9pZCBYd2NGcmVlU3RyaW5nTGlzdCgKCiAgICB3Y2hhcl90
KioJCSAKCik7CgpleHRlcm4gaW50ICBYVGV4dFByb3BlcnR5VG9TdHJpbmdMaXN0KAoKICAgIFhU
ZXh0UHJvcGVydHkqCSAsCiAgICBjaGFyKioqCQkgLAogICAgaW50KgkJIAoKKTsKCmV4dGVybiBp
bnQgWG1iVGV4dFByb3BlcnR5VG9UZXh0TGlzdCgKCiAgICBEaXNwbGF5KgkJICwKICAgIFhUZXh0
UHJvcGVydHkqCSAsCiAgICBjaGFyKioqCQkgLAogICAgaW50KgkJIAoKKTsKCmV4dGVybiBpbnQg
WHdjVGV4dFByb3BlcnR5VG9UZXh0TGlzdCgKCiAgICBEaXNwbGF5KgkJICwKICAgIFhUZXh0UHJv
cGVydHkqCSAsCiAgICB3Y2hhcl90KioqCQkgLAogICAgaW50KgkJIAoKKTsKCmV4dGVybiBpbnQg
WFVuaW9uUmVjdFdpdGhSZWdpb24oCgogICAgWFJlY3RhbmdsZSoJCSAsCiAgICBSZWdpb24JCSAs
CiAgICBSZWdpb24JCSAKCik7CgpleHRlcm4gaW50IFhVbmlvblJlZ2lvbigKCiAgICBSZWdpb24J
CSAsCiAgICBSZWdpb24JCSAsCiAgICBSZWdpb24JCSAKCik7CgpleHRlcm4gaW50IFhXTUdlb21l
dHJ5KAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50CQkJICwKICAgIGNvbnN0ICBjaGFyKgkgLAog
ICAgY29uc3QgIGNoYXIqCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIFhTaXplSGludHMqCQkg
LAogICAgaW50KgkJICwKICAgIGludCoJCSAsCiAgICBpbnQqCQkgLAogICAgaW50KgkJICwKICAg
IGludCoJCSAKCik7CgpleHRlcm4gaW50IFhYb3JSZWdpb24oCgogICAgUmVnaW9uCQkgLAogICAg
UmVnaW9uCQkgLAogICAgUmVnaW9uCQkgCgopOwoKfSAKCgojIDU3ICIvdXNyL29wZW53aW4vaW5j
bHVkZS9YMTEvSW50cmluc2ljLmgiIDIKCiMgMSAiL3Vzci9vcGVud2luL2luY2x1ZGUvWDExL1hy
ZXNvdXJjZS5oIiAxCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCiNwcmFnbWEgaWRlbnQgIkAoIylYcmVzb3VyY2UuaAkxLjIJMS4yIFNNSSIK
CiAKCiAKCgoKCgoKCgoKZXh0ZXJuICJDIiB7IAoKIAoKCgoKCmV4dGVybiBjaGFyICpYcGVybWFs
bG9jKAoKICAgIHVuc2lnbmVkIGludAkgCgopOwoKIAoKCgoKCnR5cGVkZWYgaW50ICAgICBYcm1R
dWFyaywgKlhybVF1YXJrTGlzdDsKCgp0eXBlZGVmIGNoYXIgKlhybVN0cmluZzsKCgogCmV4dGVy
biBYcm1RdWFyayBYcm1TdHJpbmdUb1F1YXJrKAoKICAgIGNvbnN0ICBjaGFyKiAJIAoKKTsKCmV4
dGVybiBYcm1RdWFyayBYcm1QZXJtU3RyaW5nVG9RdWFyaygKCiAgICBjb25zdCAgY2hhciogCSAK
Cik7CgogCmV4dGVybiBYcm1TdHJpbmcgWHJtUXVhcmtUb1N0cmluZygKCiAgICBYcm1RdWFyayAJ
CSAKCik7CgpleHRlcm4gWHJtUXVhcmsgWHJtVW5pcXVlUXVhcmsoCgogICAgdm9pZAoKKTsKCgoK
CiAKCgoKCgp0eXBlZGVmIGVudW0ge1hybUJpbmRUaWdodGx5LCBYcm1CaW5kTG9vc2VseX0gWHJt
QmluZGluZywgKlhybUJpbmRpbmdMaXN0OwoKZXh0ZXJuIHZvaWQgWHJtU3RyaW5nVG9RdWFya0xp
c3QoCgogICAgY29uc3QgIGNoYXIqCSAsCiAgICBYcm1RdWFya0xpc3QJIAoKKTsKCmV4dGVybiB2
b2lkIFhybVN0cmluZ1RvQmluZGluZ1F1YXJrTGlzdCgKCiAgICBjb25zdCAgY2hhcioJICwKICAg
IFhybUJpbmRpbmdMaXN0CSAsCiAgICBYcm1RdWFya0xpc3QJIAoKKTsKCiAKCgoKCgp0eXBlZGVm
IFhybVF1YXJrICAgICBYcm1OYW1lOwp0eXBlZGVmIFhybVF1YXJrTGlzdCBYcm1OYW1lTGlzdDsK
CgoKCnR5cGVkZWYgWHJtUXVhcmsgICAgIFhybUNsYXNzOwp0eXBlZGVmIFhybVF1YXJrTGlzdCBY
cm1DbGFzc0xpc3Q7CgoKCgoKCiAKCgoKCgp0eXBlZGVmIFhybVF1YXJrICAgICBYcm1SZXByZXNl
bnRhdGlvbjsKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgdW5zaWduZWQgaW50ICAgIHNpemU7CiAg
ICBYUG9pbnRlcgkgICAgYWRkcjsKfSBYcm1WYWx1ZSwgKlhybVZhbHVlUHRyOwoKCiAKCgoKCgp0
eXBlZGVmIHN0cnVjdCBfWHJtSGFzaEJ1Y2tldFJlYyAqWHJtSGFzaEJ1Y2tldDsKdHlwZWRlZiBY
cm1IYXNoQnVja2V0ICpYcm1IYXNoVGFibGU7CnR5cGVkZWYgWHJtSGFzaFRhYmxlIFhybVNlYXJj
aExpc3RbXTsKdHlwZWRlZiBzdHJ1Y3QgX1hybUhhc2hCdWNrZXRSZWMgKlhybURhdGFiYXNlOwoK
CmV4dGVybiB2b2lkIFhybURlc3Ryb3lEYXRhYmFzZSgKCiAgICBYcm1EYXRhYmFzZQkJICAgICAK
Cik7CgpleHRlcm4gdm9pZCBYcm1RUHV0UmVzb3VyY2UoCgogICAgWHJtRGF0YWJhc2UqCSAsCiAg
ICBYcm1CaW5kaW5nTGlzdAkgLAogICAgWHJtUXVhcmtMaXN0CSAsCiAgICBYcm1SZXByZXNlbnRh
dGlvbgkgLAogICAgWHJtVmFsdWUqCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHJtUHV0UmVzb3VyY2Uo
CgogICAgWHJtRGF0YWJhc2UqCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIGNvbnN0ICBjaGFy
KgkgLAogICAgWHJtVmFsdWUqCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHJtUVB1dFN0cmluZ1Jlc291
cmNlKAoKICAgIFhybURhdGFiYXNlKgkgLAogICAgWHJtQmluZGluZ0xpc3QgICAgICAgLAogICAg
WHJtUXVhcmtMaXN0CSAsCiAgICBjb25zdCAgY2hhcioJIAoKKTsKCmV4dGVybiB2b2lkIFhybVB1
dFN0cmluZ1Jlc291cmNlKAoKICAgIFhybURhdGFiYXNlKgkgLAogICAgY29uc3QgIGNoYXIqCSAs
CiAgICBjb25zdCAgY2hhcioJIAoKKTsKCmV4dGVybiB2b2lkIFhybVB1dExpbmVSZXNvdXJjZSgK
CiAgICBYcm1EYXRhYmFzZSoJICwKICAgIGNvbnN0ICBjaGFyKgkgCgopOwoKZXh0ZXJuIGludCAg
WHJtUUdldFJlc291cmNlKAoKICAgIFhybURhdGFiYXNlCQkgLAogICAgWHJtTmFtZUxpc3QJCSAs
CiAgICBYcm1DbGFzc0xpc3QJICwKICAgIFhybVJlcHJlc2VudGF0aW9uKgkgLAogICAgWHJtVmFs
dWUqCQkgCgopOwoKZXh0ZXJuIGludCAgWHJtR2V0UmVzb3VyY2UoCgogICAgWHJtRGF0YWJhc2UJ
CSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgY2hhcioqCQkg
LAogICAgWHJtVmFsdWUqCQkgCgopOwoKZXh0ZXJuIGludCAgWHJtUUdldFNlYXJjaExpc3QoCgog
ICAgWHJtRGF0YWJhc2UJCSAsCiAgICBYcm1OYW1lTGlzdAkJICwKICAgIFhybUNsYXNzTGlzdAkg
LAogICAgWHJtU2VhcmNoTGlzdAkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgIFhybVFH
ZXRTZWFyY2hSZXNvdXJjZSgKCiAgICBYcm1TZWFyY2hMaXN0CSAsCiAgICBYcm1OYW1lCQkgLAog
ICAgWHJtQ2xhc3MJCSAsCiAgICBYcm1SZXByZXNlbnRhdGlvbioJICwKICAgIFhybVZhbHVlKgkJ
IAoKKTsKCiAKCgoKCgpleHRlcm4gdm9pZCBYcm1TZXREYXRhYmFzZSgKCiAgICBEaXNwbGF5KgkJ
ICwKICAgIFhybURhdGFiYXNlCQkgCgopOwoKZXh0ZXJuIFhybURhdGFiYXNlIFhybUdldERhdGFi
YXNlKAoKICAgIERpc3BsYXkqCQkgCgopOwoKZXh0ZXJuIFhybURhdGFiYXNlIFhybUdldEZpbGVE
YXRhYmFzZSgKCiAgICBjb25zdCAgY2hhcioJIAoKKTsKCmV4dGVybiBpbnQgIFhybUNvbWJpbmVG
aWxlRGF0YWJhc2UoCgogICAgY29uc3QgIGNoYXIqIAkgLAogICAgWHJtRGF0YWJhc2UqCSAsCiAg
ICBpbnQgCQkgCgopOwoKZXh0ZXJuIFhybURhdGFiYXNlIFhybUdldFN0cmluZ0RhdGFiYXNlKAoK
ICAgIGNvbnN0ICBjaGFyKgkgICAgCgopOwoKZXh0ZXJuIHZvaWQgWHJtUHV0RmlsZURhdGFiYXNl
KAoKICAgIFhybURhdGFiYXNlCQkgLAogICAgY29uc3QgIGNoYXIqCSAKCik7CgpleHRlcm4gdm9p
ZCBYcm1NZXJnZURhdGFiYXNlcygKCiAgICBYcm1EYXRhYmFzZQkJICwKICAgIFhybURhdGFiYXNl
KgkgCgopOwoKZXh0ZXJuIHZvaWQgWHJtQ29tYmluZURhdGFiYXNlKAoKICAgIFhybURhdGFiYXNl
CQkgLAogICAgWHJtRGF0YWJhc2UqCSAsCiAgICBpbnQgCQkgCgopOwoKCgoKZXh0ZXJuIGludCAg
WHJtRW51bWVyYXRlRGF0YWJhc2UoCgogICAgWHJtRGF0YWJhc2UJCSAsCiAgICBYcm1OYW1lTGlz
dAkJICwKICAgIFhybUNsYXNzTGlzdAkgLAogICAgaW50CQkJICwKICAgIGludCAgKCopKAoKCSAg
ICAgWHJtRGF0YWJhc2UqCSAsCgkgICAgIFhybUJpbmRpbmdMaXN0CSAsCgkgICAgIFhybVF1YXJr
TGlzdAkgLAoJICAgICBYcm1SZXByZXNlbnRhdGlvbioJICwKCSAgICAgWHJtVmFsdWUqCQkgLAoJ
ICAgICBYUG9pbnRlcgkJIAoKCSAgICAgKQkJICwKICAgIFhQb2ludGVyCQkgCgopOwoKZXh0ZXJu
IGNoYXIgKlhybUxvY2FsZU9mRGF0YWJhc2UoCgogICAgWHJtRGF0YWJhc2UgCSAKCik7CgoKIAoK
CgoKCnR5cGVkZWYgZW51bSB7CiAgICBYcm1vcHRpb25Ob0FyZywJIAogICAgWHJtb3B0aW9uSXNB
cmcsICAgICAgCiAgICBYcm1vcHRpb25TdGlja3lBcmcsICAKICAgIFhybW9wdGlvblNlcEFyZywg
ICAgIAogICAgWHJtb3B0aW9uUmVzQXJnLAkgCiAgICBYcm1vcHRpb25Ta2lwQXJnLCAgICAKICAg
IFhybW9wdGlvblNraXBMaW5lLCAgIAogICAgWHJtb3B0aW9uU2tpcE5BcmdzCSAKCn0gWHJtT3B0
aW9uS2luZDsKCnR5cGVkZWYgc3RydWN0IHsKICAgIGNoYXIJICAgICpvcHRpb247CSAgICAgCiAg
ICBjaGFyCSAgICAqc3BlY2lmaWVyOyAgICAgIAogICAgWHJtT3B0aW9uS2luZCAgIGFyZ0tpbmQ7
CSAgICAgCiAgICBYUG9pbnRlcgkgICAgdmFsdWU7CSAgICAgCn0gWHJtT3B0aW9uRGVzY1JlYywg
KlhybU9wdGlvbkRlc2NMaXN0OwoKCmV4dGVybiB2b2lkIFhybVBhcnNlQ29tbWFuZCgKCiAgICBY
cm1EYXRhYmFzZSoJICwKICAgIFhybU9wdGlvbkRlc2NMaXN0CSAsCiAgICBpbnQJCQkgLAogICAg
Y29uc3QgIGNoYXIqCSAsCiAgICBpbnQqCQkgLAogICAgY2hhcioqCQkgCQkgICAgIAoKKTsKCn0g
CgoKIAojIDU4ICIvdXNyL29wZW53aW4vaW5jbHVkZS9YMTEvSW50cmluc2ljLmgiIDIKCgoKCgoK
CgoKCgoKCgoKCgoKCnR5cGVkZWYgY2hhciAqU3RyaW5nOwoKCgogCgoKCgoKCiAKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBfV2lkZ2V0UmVjICpXaWRn
ZXQ7CnR5cGVkZWYgV2lkZ2V0ICpXaWRnZXRMaXN0Owp0eXBlZGVmIHN0cnVjdCBfV2lkZ2V0Q2xh
c3NSZWMgKldpZGdldENsYXNzOwp0eXBlZGVmIHN0cnVjdCBfQ29tcG9zaXRlUmVjICpDb21wb3Np
dGVXaWRnZXQ7CnR5cGVkZWYgc3RydWN0IF9YdEFjdGlvbnNSZWMgKlh0QWN0aW9uTGlzdDsKdHlw
ZWRlZiBzdHJ1Y3QgX1h0RXZlbnRSZWMgKlh0RXZlbnRUYWJsZTsKCnR5cGVkZWYgc3RydWN0IF9Y
dEFwcFN0cnVjdCAqWHRBcHBDb250ZXh0Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcJWHRWYWx1ZU1h
c2s7CnR5cGVkZWYgdW5zaWduZWQgbG9uZwlYdEludGVydmFsSWQ7CnR5cGVkZWYgdW5zaWduZWQg
bG9uZwlYdElucHV0SWQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZwlYdFdvcmtQcm9jSWQ7CnR5cGVk
ZWYgdW5zaWduZWQgbG9uZwlYdFNpZ25hbElkOwp0eXBlZGVmIHVuc2lnbmVkIGludAlYdEdlb21l
dHJ5TWFzazsKdHlwZWRlZiB1bnNpZ25lZCBsb25nCVh0R0NNYXNrOyAgICAKdHlwZWRlZiB1bnNp
Z25lZCBsb25nCVBpeGVsOwkgICAgIAp0eXBlZGVmIGludAkJWHRDYWNoZVR5cGU7CgoKCgoKCQkJ
CQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCQkJIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKdHlwZWRlZiBjaGFyCQlCb29sZWFuOwp0eXBlZGVmIGxvbmcJCVh0QXJnVmFsOwp0eXBl
ZGVmIHVuc2lnbmVkIGNoYXIJWHRFbnVtOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50CUNhcmRpbmFs
Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0CURpbWVuc2lvbjsgICAKdHlwZWRlZiBzaG9ydAkJUG9z
aXRpb247ICAgIAoKCnR5cGVkZWYgdm9pZCoJCVh0UG9pbnRlcjsKCgoKCiAKIAp0eXBlZGVmIFh0
UG9pbnRlcglPcGFxdWU7CgojIDEgIi91c3Ivb3Blbndpbi9pbmNsdWRlL1gxMS9Db3JlLmgiIDEK
IAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CnR5cGVkZWYgc3RydWN0IF9XaWRnZXRDbGFzc1JlYyAqQ29yZVdpZGdldENsYXNzOwp0eXBlZGVm
IHN0cnVjdCBfV2lkZ2V0UmVjICpDb3JlV2lkZ2V0OwpleHRlcm4gIFdpZGdldENsYXNzIGNvcmVX
aWRnZXRDbGFzczsKCgpleHRlcm4gIFdpZGdldENsYXNzIHdpZGdldENsYXNzOwoKCgoKIAojIDE5
NCAiL3Vzci9vcGVud2luL2luY2x1ZGUvWDExL0ludHJpbnNpYy5oIiAyCgojIDEgIi91c3Ivb3Bl
bndpbi9pbmNsdWRlL1gxMS9Db21wb3NpdGUuaCIgMQogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0NvbXBvc2l0ZUNs
YXNzUmVjICpDb21wb3NpdGVXaWRnZXRDbGFzczsKCnR5cGVkZWYgQ2FyZGluYWwgKCpYdE9yZGVy
UHJvYykoCgogICAgV2lkZ2V0IAkgCgopOwoKZXh0ZXJuICJDIiB7IAoKZXh0ZXJuIHZvaWQgWHRN
YW5hZ2VDaGlsZHJlbigKCiAgICBXaWRnZXRMaXN0IAkJICwKICAgIENhcmRpbmFsIAkJIAoKKTsK
CmV4dGVybiB2b2lkIFh0TWFuYWdlQ2hpbGQoCgogICAgV2lkZ2V0IAkJIAoKKTsKCmV4dGVybiB2
b2lkIFh0VW5tYW5hZ2VDaGlsZHJlbigKCiAgICBXaWRnZXRMaXN0IAkJICwKICAgIENhcmRpbmFs
IAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0VW5tYW5hZ2VDaGlsZCgKCiAgICBXaWRnZXQgCQkgCgop
OwoKdHlwZWRlZiB2b2lkICgqWHREb0NoYW5nZVByb2MpKAoKICAgIFdpZGdldAkJICwKICAgIFdp
ZGdldExpc3QJCSAsCiAgICBDYXJkaW5hbCAqCQkgLAogICAgV2lkZ2V0TGlzdAkJICwKICAgIENh
cmRpbmFsICoJCSAsCiAgICBYdFBvaW50ZXIJCSAKCik7CgpleHRlcm4gdm9pZCBYdENoYW5nZU1h
bmFnZWRTZXQoCgogICAgV2lkZ2V0TGlzdAkJICwKICAgIENhcmRpbmFsCQkgLAogICAgWHREb0No
YW5nZVByb2MJICwKICAgIFh0UG9pbnRlcgkJICwKICAgIFdpZGdldExpc3QJCSAsCiAgICBDYXJk
aW5hbAkJIAoKKTsKCn0gCgoKZXh0ZXJuICBXaWRnZXRDbGFzcyBjb21wb3NpdGVXaWRnZXRDbGFz
czsKCgoKIAojIDE5NSAiL3Vzci9vcGVud2luL2luY2x1ZGUvWDExL0ludHJpbnNpYy5oIiAyCgoj
IDEgIi91c3Ivb3Blbndpbi9pbmNsdWRlL1gxMS9Db25zdHJhaW50LmgiIDEKIAogCiAKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHN0cnVj
dCBfQ29uc3RyYWludENsYXNzUmVjICpDb25zdHJhaW50V2lkZ2V0Q2xhc3M7CgoKZXh0ZXJuICBX
aWRnZXRDbGFzcyBjb25zdHJhaW50V2lkZ2V0Q2xhc3M7CgoKCiAKIyAxOTYgIi91c3Ivb3Blbndp
bi9pbmNsdWRlL1gxMS9JbnRyaW5zaWMuaCIgMgoKIyAxICIvdXNyL29wZW53aW4vaW5jbHVkZS9Y
MTEvT2JqZWN0LmgiIDEKIAogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBfT2JqZWN0UmVjICpPYmplY3Q7CnR5cGVkZWYg
c3RydWN0IF9PYmplY3RDbGFzc1JlYyAqT2JqZWN0Q2xhc3M7CgoKZXh0ZXJuICBXaWRnZXRDbGFz
cyBvYmplY3RDbGFzczsKCgogCiMgMTk3ICIvdXNyL29wZW53aW4vaW5jbHVkZS9YMTEvSW50cmlu
c2ljLmgiIDIKCiMgMSAiL3Vzci9vcGVud2luL2luY2x1ZGUvWDExL1JlY3RPYmouaCIgMQogCiAK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVk
ZWYgc3RydWN0IF9SZWN0T2JqUmVjICpSZWN0T2JqOwp0eXBlZGVmIHN0cnVjdCBfUmVjdE9iakNs
YXNzUmVjICpSZWN0T2JqQ2xhc3M7CgoKZXh0ZXJuICBXaWRnZXRDbGFzcyByZWN0T2JqQ2xhc3M7
CgoKIAojIDE5OCAiL3Vzci9vcGVud2luL2luY2x1ZGUvWDExL0ludHJpbnNpYy5oIiAyCgoKdHlw
ZWRlZiBzdHJ1Y3QgX1RyYW5zbGF0aW9uRGF0YSAqWHRUcmFuc2xhdGlvbnM7CnR5cGVkZWYgc3Ry
dWN0IF9UcmFuc2xhdGlvbkRhdGEgKlh0QWNjZWxlcmF0b3JzOwp0eXBlZGVmIHVuc2lnbmVkIGlu
dCBNb2RpZmllcnM7Cgp0eXBlZGVmIHZvaWQgKCpYdEFjdGlvblByb2MpKAoKICAgIFdpZGdldCAJ
CSAsCiAgICBYRXZlbnQqCQkgLAogICAgU3RyaW5nKgkJICwKICAgIENhcmRpbmFsKgkJIAoKKTsK
CnR5cGVkZWYgWHRBY3Rpb25Qcm9jKiBYdEJvdW5kQWN0aW9uczsKCnR5cGVkZWYgc3RydWN0IF9Y
dEFjdGlvbnNSZWN7CiAgICBTdHJpbmcJIHN0cmluZzsKICAgIFh0QWN0aW9uUHJvYyBwcm9jOwp9
IFh0QWN0aW9uc1JlYzsKCnR5cGVkZWYgZW51bSB7CiAKIAogICAgWHRBZGRyZXNzLAkJIAogICAg
WHRCYXNlT2Zmc2V0LAkgCiAgICBYdEltbWVkaWF0ZSwJIAogICAgWHRSZXNvdXJjZVN0cmluZywJ
IAogICAgWHRSZXNvdXJjZVF1YXJrLAkgCiAgICBYdFdpZGdldEJhc2VPZmZzZXQsCSAKICAgIFh0
UHJvY2VkdXJlQXJnCSAKfSBYdEFkZHJlc3NNb2RlOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgWHRB
ZGRyZXNzTW9kZSAgIGFkZHJlc3NfbW9kZTsKICAgIFh0UG9pbnRlcgkgICAgYWRkcmVzc19pZDsK
ICAgIENhcmRpbmFsCSAgICBzaXplOwp9IFh0Q29udmVydEFyZ1JlYywgKlh0Q29udmVydEFyZ0xp
c3Q7Cgp0eXBlZGVmIHZvaWQgKCpYdENvbnZlcnRBcmdQcm9jKSgKCiAgICBXaWRnZXQgCQkgLAog
ICAgQ2FyZGluYWwqCQkgLAogICAgWHJtVmFsdWUqCQkgCgopOwoKdHlwZWRlZiBzdHJ1Y3Qgewog
ICAgWHRHZW9tZXRyeU1hc2sgcmVxdWVzdF9tb2RlOwogICAgUG9zaXRpb24geCwgeTsKICAgIERp
bWVuc2lvbiB3aWR0aCwgaGVpZ2h0LCBib3JkZXJfd2lkdGg7CiAgICBXaWRnZXQgc2libGluZzsK
ICAgIGludCBzdGFja19tb2RlOyAgICAKfSBYdFdpZGdldEdlb21ldHJ5OwoKIAoKCiAKCgp0eXBl
ZGVmIHZvaWQgKCpYdENvbnZlcnRlcikoICAKCiAgICBYcm1WYWx1ZSoJCSAsCiAgICBDYXJkaW5h
bCoJCSAsCiAgICBYcm1WYWx1ZSoJCSAsCiAgICBYcm1WYWx1ZSoJCSAKCik7Cgp0eXBlZGVmIEJv
b2xlYW4gKCpYdFR5cGVDb252ZXJ0ZXIpKAoKICAgIERpc3BsYXkqCQkgLAogICAgWHJtVmFsdWUq
CQkgLAogICAgQ2FyZGluYWwqCQkgLAogICAgWHJtVmFsdWUqCQkgLAogICAgWHJtVmFsdWUqCQkg
LAogICAgWHRQb2ludGVyKgkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlh0RGVzdHJ1Y3RvcikoWHRB
cHBDb250ZXh0LCBYcm1WYWx1ZSAqLCBYdFBvaW50ZXIsIFhybVZhbHVlICosIENhcmRpbmFsICop
OwoKdHlwZWRlZiBYdFBvaW50ZXIgKCpYdFJlcGxpY2F0b3IpKFh0UG9pbnRlcik7Cgp0eXBlZGVm
IE9wYXF1ZSBYdENhY2hlUmVmOwoKdHlwZWRlZiBPcGFxdWUgWHRBY3Rpb25Ib29rSWQ7Cgp0eXBl
ZGVmIHZvaWQgKCpYdEFjdGlvbkhvb2tQcm9jKSgKCiAgICBXaWRnZXQJCSAsCiAgICBYdFBvaW50
ZXIJCSAsCiAgICBTdHJpbmcJCSAsCiAgICBYRXZlbnQqCQkgLAogICAgU3RyaW5nKgkJICwKICAg
IENhcmRpbmFsKgkJIAoKKTsKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBYdEJsb2NrSG9va0lkOwoK
dHlwZWRlZiB2b2lkICgqWHRCbG9ja0hvb2tQcm9jKSgKCiAgICBYdFBvaW50ZXIJCSAKCik7Cgp0
eXBlZGVmIHZvaWQgKCpYdEtleVByb2MpKAoKICAgIERpc3BsYXkqCQkgLAogICAgdW5zaWduZWQg
aW50ICAJCSAsCiAgICBNb2RpZmllcnMJCSAsCiAgICBNb2RpZmllcnMqCQkgLAogICAgS2V5U3lt
KgkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlh0Q2FzZVByb2MpKAoKICAgIERpc3BsYXkqCQkgLAog
ICAgS2V5U3ltCQkgLAogICAgS2V5U3ltKgkJICwKICAgIEtleVN5bSoJCSAKCik7Cgp0eXBlZGVm
IHZvaWQgKCpYdEV2ZW50SGFuZGxlcikoCgogICAgV2lkZ2V0IAkJICwKICAgIFh0UG9pbnRlciAJ
CSAsCiAgICBYRXZlbnQqCQkgLAogICAgQm9vbGVhbioJCSAKCik7CnR5cGVkZWYgdW5zaWduZWQg
bG9uZyBFdmVudE1hc2s7Cgp0eXBlZGVmIGVudW0ge1h0TGlzdEhlYWQsIFh0TGlzdFRhaWwgfSBY
dExpc3RQb3NpdGlvbjsKCnR5cGVkZWYgdW5zaWduZWQgbG9uZwlYdElucHV0TWFzazsKCgoKCgp0
eXBlZGVmIHZvaWQgKCpYdFRpbWVyQ2FsbGJhY2tQcm9jKSgKCiAgICBYdFBvaW50ZXIgCQkgLAog
ICAgWHRJbnRlcnZhbElkKgkgCgopOwoKdHlwZWRlZiB2b2lkICgqWHRJbnB1dENhbGxiYWNrUHJv
YykoCgogICAgWHRQb2ludGVyIAkJICwKICAgIGludCoJCSAsCiAgICBYdElucHV0SWQqCQkgCgop
OwoKdHlwZWRlZiB2b2lkICgqWHRTaWduYWxDYWxsYmFja1Byb2MpKAoKICAgIFh0UG9pbnRlcgkJ
ICwKICAgIFh0U2lnbmFsSWQqCQkgCgopOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgU3RyaW5nCW5h
bWU7CiAgICBYdEFyZ1ZhbAl2YWx1ZTsKfSBBcmcsICpBcmdMaXN0OwoKdHlwZWRlZiBYdFBvaW50
ZXIJWHRWYXJBcmdzTGlzdDsKCnR5cGVkZWYgdm9pZCAoKlh0Q2FsbGJhY2tQcm9jKSgKCiAgICBX
aWRnZXQgCQkgLAogICAgWHRQb2ludGVyIAkJICwJIAogICAgWHRQb2ludGVyIAkJIAkgCgopOwoK
dHlwZWRlZiBzdHJ1Y3QgX1h0Q2FsbGJhY2tSZWMgewogICAgWHRDYWxsYmFja1Byb2MgIGNhbGxi
YWNrOwogICAgWHRQb2ludGVyCSAgICBjbG9zdXJlOwp9IFh0Q2FsbGJhY2tSZWMsICpYdENhbGxi
YWNrTGlzdDsKCnR5cGVkZWYgZW51bSB7CglYdENhbGxiYWNrTm9MaXN0LAoJWHRDYWxsYmFja0hh
c05vbmUsCglYdENhbGxiYWNrSGFzU29tZQp9IFh0Q2FsbGJhY2tTdGF0dXM7Cgp0eXBlZGVmIGVu
dW0gIHsKICAgIFh0R2VvbWV0cnlZZXMsCSAgIAogICAgWHRHZW9tZXRyeU5vLAkgICAKICAgIFh0
R2VvbWV0cnlBbG1vc3QsCSAgIAogICAgWHRHZW9tZXRyeURvbmUJICAgCn0gWHRHZW9tZXRyeVJl
c3VsdDsKCnR5cGVkZWYgZW51bSB7WHRHcmFiTm9uZSwgWHRHcmFiTm9uZXhjbHVzaXZlLCBYdEdy
YWJFeGNsdXNpdmV9IFh0R3JhYktpbmQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBXaWRnZXQgIHNo
ZWxsX3dpZGdldDsKICAgIFdpZGdldCAgZW5hYmxlX3dpZGdldDsKfSBYdFBvcGRvd25JRFJlYywg
Klh0UG9wZG93bklEOwoKdHlwZWRlZiBzdHJ1Y3QgX1h0UmVzb3VyY2UgewogICAgU3RyaW5nCXJl
c291cmNlX25hbWU7CSAKICAgIFN0cmluZwlyZXNvdXJjZV9jbGFzczsJIAogICAgU3RyaW5nCXJl
c291cmNlX3R5cGU7CSAKICAgIENhcmRpbmFsCXJlc291cmNlX3NpemU7CSAKICAgIENhcmRpbmFs
CXJlc291cmNlX29mZnNldDsgCiAgICBTdHJpbmcJZGVmYXVsdF90eXBlOwkgCiAgICBYdFBvaW50
ZXIJZGVmYXVsdF9hZGRyOwkgCn0gWHRSZXNvdXJjZSwgKlh0UmVzb3VyY2VMaXN0OwoKdHlwZWRl
ZiB2b2lkICgqWHRSZXNvdXJjZURlZmF1bHRQcm9jKSgKCiAgICBXaWRnZXQJICwKICAgIGludAkJ
ICwKICAgIFhybVZhbHVlKgkgCgopOwoKdHlwZWRlZiBTdHJpbmcgKCpYdExhbmd1YWdlUHJvYyko
CgogICAgRGlzcGxheSoJICwKICAgIFN0cmluZwkgLAogICAgWHRQb2ludGVyCSAKCik7Cgp0eXBl
ZGVmIHZvaWQgKCpYdEVycm9yTXNnSGFuZGxlcikoCgogICAgU3RyaW5nIAkJICwKICAgIFN0cmlu
ZwkJICwKICAgIFN0cmluZwkJICwKICAgIFN0cmluZwkJICwKICAgIFN0cmluZyoJCSAsCiAgICBD
YXJkaW5hbCoJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdEVycm9ySGFuZGxlcikoCgogIFN0cmlu
ZwkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlh0Q3JlYXRlUG9wdXBDaGlsZFByb2MpKAoKICAgIFdp
ZGdldAkgCgopOwoKdHlwZWRlZiBCb29sZWFuICgqWHRXb3JrUHJvYykoCgogICAgWHRQb2ludGVy
IAkJIAkgCgopOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgY2hhciBtYXRjaDsKICAgIFN0cmluZyBz
dWJzdGl0dXRpb247Cn0gU3Vic3RpdHV0aW9uUmVjLCAqU3Vic3RpdHV0aW9uOwoKdHlwZWRlZiBC
b29sZWFuICgqWHRGaWxlUHJlZGljYXRlKSgKCiAgIFN0cmluZyAgCgopOwoKdHlwZWRlZiBYdFBv
aW50ZXIgWHRSZXF1ZXN0SWQ7Cgp0eXBlZGVmIEJvb2xlYW4gKCpYdENvbnZlcnRTZWxlY3Rpb25Q
cm9jKSgKCiAgICBXaWRnZXQgCQkgLAogICAgQXRvbSoJCSAsCiAgICBBdG9tKgkJICwKICAgIEF0
b20qCQkgLAogICAgWHRQb2ludGVyKgkJICwKICAgIHVuc2lnbmVkIGxvbmcqCSAsCiAgICBpbnQq
CQkgCgopOwoKdHlwZWRlZiB2b2lkICgqWHRMb3NlU2VsZWN0aW9uUHJvYykoCgogICAgV2lkZ2V0
IAkJICwKICAgIEF0b20qCQkgCgopOwoKdHlwZWRlZiB2b2lkICgqWHRTZWxlY3Rpb25Eb25lUHJv
YykoCgogICAgV2lkZ2V0IAkJICwKICAgIEF0b20qCQkgLAogICAgQXRvbSoJCSAKCik7Cgp0eXBl
ZGVmIHZvaWQgKCpYdFNlbGVjdGlvbkNhbGxiYWNrUHJvYykoCgogICAgV2lkZ2V0IAkJICwKICAg
IFh0UG9pbnRlciAJCSAsCiAgICBBdG9tKgkJICwKICAgIEF0b20qCQkgLAogICAgWHRQb2ludGVy
IAkJICwKICAgIHVuc2lnbmVkIGxvbmcqCSAsCiAgICBpbnQqCQkgCgopOwoKdHlwZWRlZiB2b2lk
ICgqWHRMb3NlU2VsZWN0aW9uSW5jclByb2MpKAoKICAgIFdpZGdldCAJCSAsCiAgICBBdG9tKgkJ
ICwKICAgIFh0UG9pbnRlciAJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdFNlbGVjdGlvbkRvbmVJ
bmNyUHJvYykoCgogICAgV2lkZ2V0IAkJICwKICAgIEF0b20qCQkgLAogICAgQXRvbSoJCSAsCiAg
ICBYdFJlcXVlc3RJZCoJICwKICAgIFh0UG9pbnRlciAJCSAKCik7Cgp0eXBlZGVmIEJvb2xlYW4g
KCpYdENvbnZlcnRTZWxlY3Rpb25JbmNyUHJvYykoCgogICAgV2lkZ2V0IAkJICwKICAgIEF0b20q
CQkgLAogICAgQXRvbSoJCSAsCiAgICBBdG9tKgkJICwKICAgIFh0UG9pbnRlcioJCSAsCiAgICB1
bnNpZ25lZCBsb25nKgkgLAogICAgaW50KgkJICwKICAgIHVuc2lnbmVkIGxvbmcqCSAsCiAgICBY
dFBvaW50ZXIgCQkgLAogICAgWHRSZXF1ZXN0SWQqCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdENh
bmNlbENvbnZlcnRTZWxlY3Rpb25Qcm9jKSgKCiAgICBXaWRnZXQgCQkgLAogICAgQXRvbSoJCSAs
CiAgICBBdG9tKgkJICwKICAgIFh0UmVxdWVzdElkKgkgLAogICAgWHRQb2ludGVyIAkJIAoKKTsK
CnR5cGVkZWYgQm9vbGVhbiAoKlh0RXZlbnREaXNwYXRjaFByb2MpKAoKICAgIFhFdmVudCoJCSAK
Cik7Cgp0eXBlZGVmIHZvaWQgKCpYdEV4dGVuc2lvblNlbGVjdFByb2MpKAoKICAgIFdpZGdldAkJ
ICwKICAgIGludCoJCSAsCiAgICBYdFBvaW50ZXIqCQkgLAogICAgaW50CQkJICwKICAgIFh0UG9p
bnRlcgkJIAoKKTsKCiAKCgoKCgpleHRlcm4gIkMiIHsgCgpleHRlcm4gQm9vbGVhbiBYdENvbnZl
cnRBbmRTdG9yZSgKCiAgICBXaWRnZXQgCQkgLAogICAgY29uc3QgIGNoYXIqICAJICwKICAgIFhy
bVZhbHVlKgkJICwKICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAgICBYcm1WYWx1ZSoJCSAKCik7Cgpl
eHRlcm4gQm9vbGVhbiBYdENhbGxDb252ZXJ0ZXIoCgogICAgRGlzcGxheSoJCSAsCiAgICBYdFR5
cGVDb252ZXJ0ZXIgCSAsCiAgICBYcm1WYWx1ZVB0ciAJICwKICAgIENhcmRpbmFsIAkJICwKICAg
IFhybVZhbHVlUHRyIAkgLAogICAgWHJtVmFsdWUqCQkgLAogICAgWHRDYWNoZVJlZioJCSAKCik7
CgpleHRlcm4gQm9vbGVhbiBYdERpc3BhdGNoRXZlbnQoCgogICAgWEV2ZW50KiAJCSAKCik7Cgpl
eHRlcm4gQm9vbGVhbiBYdENhbGxBY2NlcHRGb2N1cygKCiAgICBXaWRnZXQgCQkgLAogICAgVGlt
ZSoJCSAKCik7CgpleHRlcm4gQm9vbGVhbiBYdFBlZWtFdmVudCggIAoKICAgIFhFdmVudCoJCSAK
Cik7CgpleHRlcm4gQm9vbGVhbiBYdEFwcFBlZWtFdmVudCgKCiAgICBYdEFwcENvbnRleHQgCSAs
CiAgICBYRXZlbnQqCQkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRJc1N1YmNsYXNzKAoKICAgIFdp
ZGdldCAJCSAsCiAgICBXaWRnZXRDbGFzcyAJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0SXNPYmpl
Y3QoCgogICAgV2lkZ2V0IAkJIAoKKTsKCmV4dGVybiBCb29sZWFuIF9YdENoZWNrU3ViY2xhc3NG
bGFnKCAgCgogICAgV2lkZ2V0CQkgLAogICAgdW5zaWduZWQgaW50IAkJIAoKKTsKCmV4dGVybiBC
b29sZWFuIF9YdElzU3ViY2xhc3NPZiggIAoKICAgIFdpZGdldAkJICwKICAgIFdpZGdldENsYXNz
CQkgLAogICAgV2lkZ2V0Q2xhc3MJCSAsCiAgICB1bnNpZ25lZCBpbnQgCQkgCgopOwoKZXh0ZXJu
IEJvb2xlYW4gWHRJc01hbmFnZWQoCgogICAgV2lkZ2V0IAkJIAoKKTsKCmV4dGVybiBCb29sZWFu
IFh0SXNSZWFsaXplZCgKCiAgICBXaWRnZXQgCQkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRJc1Nl
bnNpdGl2ZSgKCiAgICBXaWRnZXQgCQkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRPd25TZWxlY3Rp
b24oCgogICAgV2lkZ2V0IAkJICwKICAgIEF0b20gCQkgLAogICAgVGltZSAJCSAsCiAgICBYdENv
bnZlcnRTZWxlY3Rpb25Qcm9jICAsCiAgICBYdExvc2VTZWxlY3Rpb25Qcm9jCSAsCiAgICBYdFNl
bGVjdGlvbkRvbmVQcm9jICAKCik7CgpleHRlcm4gQm9vbGVhbiBYdE93blNlbGVjdGlvbkluY3Jl
bWVudGFsKAoKICAgIFdpZGdldCAJCSAsCiAgICBBdG9tIAkJICwKICAgIFRpbWUgCQkgLAogICAg
WHRDb252ZXJ0U2VsZWN0aW9uSW5jclByb2MJICwKICAgIFh0TG9zZVNlbGVjdGlvbkluY3JQcm9j
CSAsCiAgICBYdFNlbGVjdGlvbkRvbmVJbmNyUHJvYwkgLAogICAgWHRDYW5jZWxDb252ZXJ0U2Vs
ZWN0aW9uUHJvYyAgLAogICAgWHRQb2ludGVyIAkJIAoKKTsKCmV4dGVybiBYdEdlb21ldHJ5UmVz
dWx0IFh0TWFrZVJlc2l6ZVJlcXVlc3QoCgogICAgV2lkZ2V0IAkJICwKICAgIHVuc2lnbmVkIGlu
dCAJICwKICAgIHVuc2lnbmVkIGludCAJICwKICAgIERpbWVuc2lvbioJCSAsCiAgICBEaW1lbnNp
b24qCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRUcmFuc2xhdGVDb29yZHMoCgogICAgV2lkZ2V0IAkJ
ICwKICAgIGludCAJCSAsCiAgICBpbnQgCQkgLAogICAgUG9zaXRpb24qCQkgLAogICAgUG9zaXRp
b24qCQkgCgopOwoKZXh0ZXJuIEtleVN5bSogWHRHZXRLZXlzeW1UYWJsZSgKCiAgICBEaXNwbGF5
KgkJICwKICAgIEtleUNvZGUqCQkgLAogICAgaW50KgkJIAoKKTsKCmV4dGVybiB2b2lkIFh0S2V5
c3ltVG9LZXljb2RlTGlzdCgKCiAgICBEaXNwbGF5KgkJICwKICAgIEtleVN5bSAJCSAsCiAgICBL
ZXlDb2RlKioJCSAsCiAgICBDYXJkaW5hbCoJCSAKCik7CgpleHRlcm4gdm9pZCBYdFN0cmluZ0Nv
bnZlcnNpb25XYXJuaW5nKCAgCgogICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29uc3QgIGNoYXIq
IAkgCgopOwoKZXh0ZXJuIHZvaWQgWHREaXNwbGF5U3RyaW5nQ29udmVyc2lvbldhcm5pbmcoCgog
ICAgRGlzcGxheSoJIAkgLAogICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29uc3QgIGNoYXIqIAkg
CgopOwoKCmV4dGVybiAgWHRDb252ZXJ0QXJnUmVjIGNvbnN0IGNvbG9yQ29udmVydEFyZ3NbXTsK
ZXh0ZXJuICBYdENvbnZlcnRBcmdSZWMgY29uc3Qgc2NyZWVuQ29udmVydEFyZ1tdOwoKCgoKCmV4
dGVybiB2b2lkIFh0QXBwQWRkQ29udmVydGVyKCAgCgogICAgWHRBcHBDb250ZXh0CSAsCiAgICBj
b25zdCAgY2hhciogCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBYdENvbnZlcnRlciAJICwK
ICAgIFh0Q29udmVydEFyZ0xpc3QJICwKICAgIENhcmRpbmFsIAkJIAoKKTsKCmV4dGVybiB2b2lk
IFh0QWRkQ29udmVydGVyKCAgCgogICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29uc3QgIGNoYXIq
ICAJICwKICAgIFh0Q29udmVydGVyIAkgLAogICAgWHRDb252ZXJ0QXJnTGlzdCAJICwKICAgIENh
cmRpbmFsIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0U2V0VHlwZUNvbnZlcnRlcigKCiAgICBjb25z
dCAgY2hhciogIAkgLAogICAgY29uc3QgIGNoYXIqICAJICwKICAgIFh0VHlwZUNvbnZlcnRlciAJ
ICwKICAgIFh0Q29udmVydEFyZ0xpc3QgCSAsCiAgICBDYXJkaW5hbCAJCSAsCiAgICBYdENhY2hl
VHlwZSAJICwKICAgIFh0RGVzdHJ1Y3RvciAJIAoKKTsKCmV4dGVybiB2b2lkIF9YdFNldFR5cGVD
b252ZXJ0ZXIoCgogICAgY29uc3QgIGNoYXIqICAJICwKICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAg
ICBYdFR5cGVDb252ZXJ0ZXIgCSAsCiAgICBYdENvbnZlcnRBcmdMaXN0IAkgLAogICAgQ2FyZGlu
YWwgCQkgLAogICAgWHRDYWNoZVR5cGUgCSAsCiAgICBYdERlc3RydWN0b3IgCSAsCiAgICBYdFJl
cGxpY2F0b3IgCSAKCik7CgpleHRlcm4gdm9pZCBYdEFwcFNldFR5cGVDb252ZXJ0ZXIoCgogICAg
WHRBcHBDb250ZXh0IAkgLAogICAgY29uc3QgIGNoYXIqICAJICwKICAgIGNvbnN0ICBjaGFyKiAg
CSAsCiAgICBYdFR5cGVDb252ZXJ0ZXIgCSAsCiAgICBYdENvbnZlcnRBcmdMaXN0IAkgLAogICAg
Q2FyZGluYWwgCQkgLAogICAgWHRDYWNoZVR5cGUgCSAsCiAgICBYdERlc3RydWN0b3IgCSAKCik7
CgpleHRlcm4gdm9pZCBYdENvbnZlcnQoICAKCiAgICBXaWRnZXQgCQkgLAogICAgY29uc3QgIGNo
YXIqICAJICwKICAgIFhybVZhbHVlKgkJICwKICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAgICBYcm1W
YWx1ZSoJCSAKCik7CgpleHRlcm4gdm9pZCBYdERpcmVjdENvbnZlcnQoICAKCiAgICBYdENvbnZl
cnRlciAJICwKICAgIFhybVZhbHVlUHRyIAkgLAogICAgQ2FyZGluYWwgCQkgLAogICAgWHJtVmFs
dWVQdHIgCSAsCiAgICBYcm1WYWx1ZSoJCSAKCik7CgogCgoKCgoKZXh0ZXJuIFh0VHJhbnNsYXRp
b25zIFh0UGFyc2VUcmFuc2xhdGlvblRhYmxlKAoKICAgIGNvbnN0ICBjaGFyKiAJIAoKKTsKCmV4
dGVybiBYdEFjY2VsZXJhdG9ycyBYdFBhcnNlQWNjZWxlcmF0b3JUYWJsZSgKCiAgICBjb25zdCAg
Y2hhciogCSAKCik7CgpleHRlcm4gdm9pZCBYdE92ZXJyaWRlVHJhbnNsYXRpb25zKAoKICAgIFdp
ZGdldCAJCSAsCiAgICBYdFRyYW5zbGF0aW9ucyAJIAoKKTsKCmV4dGVybiB2b2lkIFh0QXVnbWVu
dFRyYW5zbGF0aW9ucygKCiAgICBXaWRnZXQgCQkgLAogICAgWHRUcmFuc2xhdGlvbnMgCSAKCik7
CgpleHRlcm4gdm9pZCBYdEluc3RhbGxBY2NlbGVyYXRvcnMoCgogICAgV2lkZ2V0IAkJICwKICAg
IFdpZGdldAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0SW5zdGFsbEFsbEFjY2VsZXJhdG9ycygKCiAg
ICBXaWRnZXQgCQkgLAogICAgV2lkZ2V0CQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRVbmluc3RhbGxU
cmFuc2xhdGlvbnMoCgogICAgV2lkZ2V0IAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0QXBwQWRkQWN0
aW9ucygKCiAgICBYdEFwcENvbnRleHQgCSAsCiAgICBYdEFjdGlvbkxpc3QgCSAsCiAgICBDYXJk
aW5hbCAJCSAKCik7CgpleHRlcm4gdm9pZCBYdEFkZEFjdGlvbnMoICAKCiAgICBYdEFjdGlvbkxp
c3QgCSAsCiAgICBDYXJkaW5hbCAJCSAKCik7CgpleHRlcm4gWHRBY3Rpb25Ib29rSWQgWHRBcHBB
ZGRBY3Rpb25Ib29rKAoKICAgIFh0QXBwQ29udGV4dCAJICwKICAgIFh0QWN0aW9uSG9va1Byb2Mg
CSAsCiAgICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRSZW1vdmVBY3Rpb25Ib29r
KAoKICAgIFh0QWN0aW9uSG9va0lkIAkgCgopOwoKZXh0ZXJuIHZvaWQgWHRHZXRBY3Rpb25MaXN0
KAoKICAgIFdpZGdldENsYXNzCQkgLAogICAgWHRBY3Rpb25MaXN0KgkgLAogICAgQ2FyZGluYWwq
CQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRDYWxsQWN0aW9uUHJvYygKCiAgICBXaWRnZXQJCSAsCiAg
ICBjb25zdCAgY2hhciogCSAsCiAgICBYRXZlbnQqCQkgLAogICAgU3RyaW5nKgkJICwKICAgIENh
cmRpbmFsCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRSZWdpc3RlckdyYWJBY3Rpb24oCgogICAgWHRB
Y3Rpb25Qcm9jIAkgLAogICAgaW50ICAJCSAsCiAgICB1bnNpZ25lZCBpbnQgCSAsCiAgICBpbnQJ
CQkgLAogICAgaW50CSAJCSAKCik7CgpleHRlcm4gdm9pZCBYdFNldE11bHRpQ2xpY2tUaW1lKAoK
ICAgIERpc3BsYXkqCQkgLAogICAgaW50IAkJIAoKKTsKCmV4dGVybiBpbnQgWHRHZXRNdWx0aUNs
aWNrVGltZSgKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBLZXlTeW0gWHRHZXRBY3Rpb25L
ZXlzeW0oCgogICAgWEV2ZW50KgkJICwKICAgIE1vZGlmaWVycyoJCSAKCik7CgogCgoKCgoKZXh0
ZXJuIHZvaWQgWHRUcmFuc2xhdGVLZXljb2RlKAoKICAgIERpc3BsYXkqCQkgLAogICAgdW5zaWdu
ZWQgaW50ICAJCSAsCiAgICBNb2RpZmllcnMgCQkgLAogICAgTW9kaWZpZXJzKgkJICwKICAgIEtl
eVN5bSoJCSAKCik7CgpleHRlcm4gdm9pZCBYdFRyYW5zbGF0ZUtleSgKCiAgICBEaXNwbGF5KgkJ
ICwKICAgIHVuc2lnbmVkIGludCAJCSAsCiAgICBNb2RpZmllcnMJCSAsCiAgICBNb2RpZmllcnMq
CQkgLAogICAgS2V5U3ltKgkJIAoKKTsKCmV4dGVybiB2b2lkIFh0U2V0S2V5VHJhbnNsYXRvcigK
CiAgICBEaXNwbGF5KgkJICwKICAgIFh0S2V5UHJvYyAJCSAKCik7CgpleHRlcm4gdm9pZCBYdFJl
Z2lzdGVyQ2FzZUNvbnZlcnRlcigKCiAgICBEaXNwbGF5KgkJICwKICAgIFh0Q2FzZVByb2MgCQkg
LAogICAgS2V5U3ltIAkJICwKICAgIEtleVN5bSAJCSAKCik7CgpleHRlcm4gdm9pZCBYdENvbnZl
cnRDYXNlKAoKICAgIERpc3BsYXkqCQkgLAogICAgS2V5U3ltIAkJICwKICAgIEtleVN5bSoJCSAs
CiAgICBLZXlTeW0qCQkgCgopOwoKIAoKCgoKCiAKCgoKCmV4dGVybiB2b2lkIFh0QWRkRXZlbnRI
YW5kbGVyKAoKICAgIFdpZGdldCAJCSAsCiAgICBFdmVudE1hc2sgCQkgLAogICAgaW50ICAJCSAs
CiAgICBYdEV2ZW50SGFuZGxlciAJICwKICAgIFh0UG9pbnRlciAJCSAKCik7CgpleHRlcm4gdm9p
ZCBYdFJlbW92ZUV2ZW50SGFuZGxlcigKCiAgICBXaWRnZXQgCQkgLAogICAgRXZlbnRNYXNrIAkJ
ICwKICAgIGludCAgCQkgLAogICAgWHRFdmVudEhhbmRsZXIgCSAsCiAgICBYdFBvaW50ZXIgCQkg
CgopOwoKZXh0ZXJuIHZvaWQgWHRBZGRSYXdFdmVudEhhbmRsZXIoCgogICAgV2lkZ2V0IAkJICwK
ICAgIEV2ZW50TWFzayAJCSAsCiAgICBpbnQgIAkJICwKICAgIFh0RXZlbnRIYW5kbGVyIAkgLAog
ICAgWHRQb2ludGVyIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0UmVtb3ZlUmF3RXZlbnRIYW5kbGVy
KAoKICAgIFdpZGdldCAJCSAsCiAgICBFdmVudE1hc2sgCQkgLAogICAgaW50ICAJCSAsCiAgICBY
dEV2ZW50SGFuZGxlciAJICwKICAgIFh0UG9pbnRlciAJCSAKCik7CgpleHRlcm4gdm9pZCBYdElu
c2VydEV2ZW50SGFuZGxlcigKCiAgICBXaWRnZXQgCQkgLAogICAgRXZlbnRNYXNrIAkJICwKICAg
IGludCAgCQkgLAogICAgWHRFdmVudEhhbmRsZXIgCSAsCiAgICBYdFBvaW50ZXIgCQkgLAogICAg
WHRMaXN0UG9zaXRpb24gCSAKCik7CgpleHRlcm4gdm9pZCBYdEluc2VydFJhd0V2ZW50SGFuZGxl
cigKCiAgICBXaWRnZXQgCQkgLAogICAgRXZlbnRNYXNrIAkJICwKICAgIGludCAgCQkgLAogICAg
WHRFdmVudEhhbmRsZXIgCSAsCiAgICBYdFBvaW50ZXIgCQkgLAogICAgWHRMaXN0UG9zaXRpb24g
CSAKCik7CgpleHRlcm4gWHRFdmVudERpc3BhdGNoUHJvYyBYdFNldEV2ZW50RGlzcGF0Y2hlcigK
CiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAsCiAgICBYdEV2ZW50RGlzcGF0Y2hQcm9jCSAK
Cik7CgpleHRlcm4gQm9vbGVhbiBYdERpc3BhdGNoRXZlbnRUb1dpZGdldCgKCiAgICBXaWRnZXQJ
CSAsCiAgICBYRXZlbnQqCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRJbnNlcnRFdmVudFR5cGVIYW5k
bGVyKAoKICAgIFdpZGdldAkJICwKICAgIGludAkJCSAsCiAgICBYdFBvaW50ZXIJCSAsCiAgICBY
dEV2ZW50SGFuZGxlcgkgLAogICAgWHRQb2ludGVyCQkgLAogICAgWHRMaXN0UG9zaXRpb24JIAoK
KTsKCmV4dGVybiB2b2lkIFh0UmVtb3ZlRXZlbnRUeXBlSGFuZGxlcigKCiAgICBXaWRnZXQJCSAs
CiAgICBpbnQJCQkgLAogICAgWHRQb2ludGVyCQkgLAogICAgWHRFdmVudEhhbmRsZXIJICwKICAg
IFh0UG9pbnRlcgkJIAoKKTsKCmV4dGVybiBFdmVudE1hc2sgWHRCdWlsZEV2ZW50TWFzaygKCiAg
ICBXaWRnZXQgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRSZWdpc3RlckV4dGVuc2lvblNlbGVjdG9y
KAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBYdEV4dGVu
c2lvblNlbGVjdFByb2MgICwKICAgIFh0UG9pbnRlcgkJIAoKKTsKCmV4dGVybiB2b2lkIFh0QWRk
R3JhYigKCiAgICBXaWRnZXQgCQkgLAogICAgaW50ICAJCSAsCiAgICBpbnQgIAkJIAoKKTsKCmV4
dGVybiB2b2lkIFh0UmVtb3ZlR3JhYigKCiAgICBXaWRnZXQgCQkgCgopOwoKZXh0ZXJuIHZvaWQg
WHRQcm9jZXNzRXZlbnQoICAKCiAgICBYdElucHV0TWFzayAJCSAKCik7CgpleHRlcm4gdm9pZCBY
dEFwcFByb2Nlc3NFdmVudCgKCiAgICBYdEFwcENvbnRleHQgCQkgLAogICAgWHRJbnB1dE1hc2sg
CQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRNYWluTG9vcCggIAoKICAgIHZvaWQKCik7CgpleHRlcm4g
dm9pZCBYdEFwcE1haW5Mb29wKAoKICAgIFh0QXBwQ29udGV4dCAJCSAKCik7CgpleHRlcm4gdm9p
ZCBYdEFkZEV4cG9zdXJlVG9SZWdpb24oCgogICAgWEV2ZW50KgkJICwKICAgIFJlZ2lvbiAJCSAK
Cik7CgpleHRlcm4gdm9pZCBYdFNldEtleWJvYXJkRm9jdXMoCgogICAgV2lkZ2V0CQkgLAogICAg
V2lkZ2V0IAkJIAoKKTsKCmV4dGVybiBXaWRnZXQgWHRHZXRLZXlib2FyZEZvY3VzV2lkZ2V0KAoK
ICAgIFdpZGdldAkJIAoKKTsKCmV4dGVybiBYRXZlbnQqIFh0TGFzdEV2ZW50UHJvY2Vzc2VkKAoK
ICAgIERpc3BsYXkqCQkgCgopOwoKZXh0ZXJuIFRpbWUgWHRMYXN0VGltZXN0YW1wUHJvY2Vzc2Vk
KAoKICAgIERpc3BsYXkqCQkgCgopOwoKIAoKCgoKCmV4dGVybiBYdEludGVydmFsSWQgWHRBZGRU
aW1lT3V0KCAgCgogICAgdW5zaWduZWQgbG9uZyAJICwKICAgIFh0VGltZXJDYWxsYmFja1Byb2Mg
ICwKICAgIFh0UG9pbnRlciAJCSAKCik7CgpleHRlcm4gWHRJbnRlcnZhbElkIFh0QXBwQWRkVGlt
ZU91dCgKCiAgICBYdEFwcENvbnRleHQgCSAsCiAgICB1bnNpZ25lZCBsb25nIAkgLAogICAgWHRU
aW1lckNhbGxiYWNrUHJvYyAgLAogICAgWHRQb2ludGVyIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0
UmVtb3ZlVGltZU91dCgKCiAgICBYdEludGVydmFsSWQgCSAKCik7CgpleHRlcm4gWHRJbnB1dElk
IFh0QWRkSW5wdXQoICAKCiAgICBpbnQgCQkgLAogICAgWHRQb2ludGVyIAkJICwKICAgIFh0SW5w
dXRDYWxsYmFja1Byb2MgICwKICAgIFh0UG9pbnRlciAJCSAKCik7CgpleHRlcm4gWHRJbnB1dElk
IFh0QXBwQWRkSW5wdXQoCgogICAgWHRBcHBDb250ZXh0ICAgICAgIAkgLAogICAgaW50IAkJICwK
ICAgIFh0UG9pbnRlciAJCSAsCiAgICBYdElucHV0Q2FsbGJhY2tQcm9jICAsCiAgICBYdFBvaW50
ZXIgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRSZW1vdmVJbnB1dCgKCiAgICBYdElucHV0SWQgCQkg
CgopOwoKZXh0ZXJuIFh0SW5wdXRJZCBYdEFwcEFkZFNpZ25hbCgKCiAgICBYdEFwcENvbnRleHQg
ICAgICAgCSAsCiAgICBYdFNpZ25hbENhbGxiYWNrUHJvYyAgLAogICAgWHRQb2ludGVyIAkJIAoK
KTsKCmV4dGVybiB2b2lkIFh0UmVtb3ZlU2lnbmFsKAoKICAgIFh0U2lnbmFsSWQgCQkgCgopOwoK
ZXh0ZXJuIHZvaWQgWHROb3RpY2VTaWduYWwoCgogICAgWHRTaWduYWxJZAkJIAoKKTsKCmV4dGVy
biB2b2lkIFh0TmV4dEV2ZW50KCAgCgogICAgWEV2ZW50KiAJCSAKCik7CgpleHRlcm4gdm9pZCBY
dEFwcE5leHRFdmVudCgKCiAgICBYdEFwcENvbnRleHQgCSAsCiAgICBYRXZlbnQqCQkgCgopOwoK
CgoKCgoKZXh0ZXJuIFh0SW5wdXRNYXNrIFh0UGVuZGluZyggIAoKICAgIHZvaWQKCik7CgpleHRl
cm4gWHRJbnB1dE1hc2sgWHRBcHBQZW5kaW5nKAoKICAgIFh0QXBwQ29udGV4dCAJIAoKKTsKCmV4
dGVybiBYdEJsb2NrSG9va0lkIFh0QXBwQWRkQmxvY2tIb29rKAoKICAgIFh0QXBwQ29udGV4dCAJ
ICwKICAgIFh0QmxvY2tIb29rUHJvYyAJICwKICAgIFh0UG9pbnRlciAJCSAKCik7CgpleHRlcm4g
dm9pZCBYdFJlbW92ZUJsb2NrSG9vaygKCiAgICBYdEJsb2NrSG9va0lkIAkgCgopOwoKIAoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIHZvaWQgWHRSZWFsaXplV2lkZ2V0KAoKICAg
IFdpZGdldCAJCSAKCik7Cgp2b2lkIFh0VW5yZWFsaXplV2lkZ2V0KAoKICAgIFdpZGdldCAJCSAK
Cik7CgpleHRlcm4gdm9pZCBYdERlc3Ryb3lXaWRnZXQoCgogICAgV2lkZ2V0IAkJIAoKKTsKCmV4
dGVybiB2b2lkIFh0U2V0U2Vuc2l0aXZlKAoKICAgIFdpZGdldCAJCSAsCiAgICBpbnQgIAkJIAoK
KTsKCmV4dGVybiB2b2lkIFh0U2V0TWFwcGVkV2hlbk1hbmFnZWQoCgogICAgV2lkZ2V0IAkJICwK
ICAgIGludCAgCQkgCgopOwoKZXh0ZXJuIFdpZGdldCBYdE5hbWVUb1dpZGdldCgKCiAgICBXaWRn
ZXQgCQkgLAogICAgY29uc3QgIGNoYXIqIAkgCgopOwoKZXh0ZXJuIFdpZGdldCBYdFdpbmRvd1Rv
V2lkZ2V0KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93IAkJIAoKKTsKCmV4dGVybiBYdFBv
aW50ZXIgWHRHZXRDbGFzc0V4dGVuc2lvbigKCiAgICBXaWRnZXRDbGFzcwkJICwKICAgIENhcmRp
bmFsCQkgLAogICAgWHJtUXVhcmsJCSAsCiAgICBsb25nCQkgLAogICAgQ2FyZGluYWwJCSAKCik7
CgogCgoKCgoKCgoKCmV4dGVybiBBcmdMaXN0IFh0TWVyZ2VBcmdMaXN0cygKCiAgICBBcmdMaXN0
IAkJICwKICAgIENhcmRpbmFsIAkJICwKICAgIEFyZ0xpc3QgCQkgLAogICAgQ2FyZGluYWwgCQkg
CgopOwoKIAoKCgoKCgoKCmV4dGVybiBYdFZhckFyZ3NMaXN0IFh0VmFDcmVhdGVBcmdzTGlzdCgK
CiAgICBYdFBvaW50ZXIJCSAsIC4uLgoKKTsKCiAKCgoKCgoKCiAKCmV4dGVybiBEaXNwbGF5ICpY
dERpc3BsYXkoCgogICAgV2lkZ2V0IAkJIAoKKTsKCmV4dGVybiBEaXNwbGF5ICpYdERpc3BsYXlP
Zk9iamVjdCgKCiAgICBXaWRnZXQgCQkgCgopOwoKZXh0ZXJuIFNjcmVlbiAqWHRTY3JlZW4oCgog
ICAgV2lkZ2V0IAkJIAoKKTsKCmV4dGVybiBTY3JlZW4gKlh0U2NyZWVuT2ZPYmplY3QoCgogICAg
V2lkZ2V0IAkJIAoKKTsKCmV4dGVybiBXaW5kb3cgWHRXaW5kb3coCgogICAgV2lkZ2V0IAkJIAoK
KTsKCmV4dGVybiBXaW5kb3cgWHRXaW5kb3dPZk9iamVjdCgKCiAgICBXaWRnZXQgCQkgCgopOwoK
ZXh0ZXJuIFN0cmluZyBYdE5hbWUoCgogICAgV2lkZ2V0IAkJIAoKKTsKCmV4dGVybiBXaWRnZXRD
bGFzcyBYdFN1cGVyY2xhc3MoCgogICAgV2lkZ2V0IAkJIAoKKTsKCmV4dGVybiBXaWRnZXRDbGFz
cyBYdENsYXNzKAoKICAgIFdpZGdldCAJCSAKCik7CgpleHRlcm4gV2lkZ2V0IFh0UGFyZW50KAoK
ICAgIFdpZGdldCAJCSAKCik7CgoKCgoKCgpleHRlcm4gdm9pZCBYdEFkZENhbGxiYWNrKAoKICAg
IFdpZGdldCAJCSAsCiAgICBjb25zdCAgY2hhciogIAkgLAogICAgWHRDYWxsYmFja1Byb2MgCSAs
CiAgICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRSZW1vdmVDYWxsYmFjaygKCiAg
ICBXaWRnZXQgCQkgLAogICAgY29uc3QgIGNoYXIqICAJICwKICAgIFh0Q2FsbGJhY2tQcm9jIAkg
LAogICAgWHRQb2ludGVyIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0QWRkQ2FsbGJhY2tzKAoKICAg
IFdpZGdldCAJCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBYdENhbGxiYWNrTGlzdCAJIAoK
KTsKCmV4dGVybiB2b2lkIFh0UmVtb3ZlQ2FsbGJhY2tzKAoKICAgIFdpZGdldCAJCSAsCiAgICBj
b25zdCAgY2hhciogIAkgLAogICAgWHRDYWxsYmFja0xpc3QgCSAKCik7CgpleHRlcm4gdm9pZCBY
dFJlbW92ZUFsbENhbGxiYWNrcygKCiAgICBXaWRnZXQgCQkgLAogICAgY29uc3QgIGNoYXIqICAJ
IAoKKTsKCgpleHRlcm4gdm9pZCBYdENhbGxDYWxsYmFja3MoCgogICAgV2lkZ2V0IAkJICwKICAg
IGNvbnN0ICBjaGFyKiAgCSAsCiAgICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRD
YWxsQ2FsbGJhY2tMaXN0KAoKICAgIFdpZGdldAkJICwKICAgIFh0Q2FsbGJhY2tMaXN0IAkgLAog
ICAgWHRQb2ludGVyIAkJIAoKKTsKCmV4dGVybiBYdENhbGxiYWNrU3RhdHVzIFh0SGFzQ2FsbGJh
Y2tzKAoKICAgIFdpZGdldCAJCSAsCiAgICBjb25zdCAgY2hhciogIAkgCgopOwoKIAoKCgoKCgpl
eHRlcm4gWHRHZW9tZXRyeVJlc3VsdCBYdE1ha2VHZW9tZXRyeVJlcXVlc3QoCgogICAgV2lkZ2V0
IAkJICwKICAgIFh0V2lkZ2V0R2VvbWV0cnkqCSAsCiAgICBYdFdpZGdldEdlb21ldHJ5KgkgCgop
OwoKZXh0ZXJuIFh0R2VvbWV0cnlSZXN1bHQgWHRRdWVyeUdlb21ldHJ5KAoKICAgIFdpZGdldCAJ
CSAsCiAgICBYdFdpZGdldEdlb21ldHJ5KgkgLAogICAgWHRXaWRnZXRHZW9tZXRyeSoJIAoKKTsK
CmV4dGVybiBXaWRnZXQgWHRDcmVhdGVQb3B1cFNoZWxsKAoKICAgIGNvbnN0ICBjaGFyKiAJICwK
ICAgIFdpZGdldENsYXNzIAkgLAogICAgV2lkZ2V0IAkJICwKICAgIEFyZ0xpc3QgCQkgLAogICAg
Q2FyZGluYWwgCQkgCgopOwoKZXh0ZXJuIFdpZGdldCBYdFZhQ3JlYXRlUG9wdXBTaGVsbCgKCiAg
ICBjb25zdCAgY2hhciogCSAsCiAgICBXaWRnZXRDbGFzcwkJICwKICAgIFdpZGdldAkJICwKICAg
IC4uLgoKKTsKCmV4dGVybiB2b2lkIFh0UG9wdXAoCgogICAgV2lkZ2V0IAkJICwKICAgIFh0R3Jh
YktpbmQgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRQb3B1cFNwcmluZ0xvYWRlZCgKCiAgICBXaWRn
ZXQgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRDYWxsYmFja05vbmUoCgogICAgV2lkZ2V0IAkJICwK
ICAgIFh0UG9pbnRlciAJCSAsCiAgICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRD
YWxsYmFja05vbmV4Y2x1c2l2ZSgKCiAgICBXaWRnZXQgCQkgLAogICAgWHRQb2ludGVyIAkJICwK
ICAgIFh0UG9pbnRlciAJCSAKCik7CgpleHRlcm4gdm9pZCBYdENhbGxiYWNrRXhjbHVzaXZlKAoK
ICAgIFdpZGdldCAJCSAsCiAgICBYdFBvaW50ZXIgCQkgLAogICAgWHRQb2ludGVyIAkJIAoKKTsK
CmV4dGVybiB2b2lkIFh0UG9wZG93bigKCiAgICBXaWRnZXQgCQkgCgopOwoKZXh0ZXJuIHZvaWQg
WHRDYWxsYmFja1BvcGRvd24oCgogICAgV2lkZ2V0IAkJICwKICAgIFh0UG9pbnRlciAJCSAsCiAg
ICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRNZW51UG9wdXBBY3Rpb24oCgogICAg
V2lkZ2V0IAkJICwKICAgIFhFdmVudCoJCSAsCiAgICBTdHJpbmcqCQkgLAogICAgQ2FyZGluYWwq
CQkgCgopOwoKZXh0ZXJuIFdpZGdldCBYdENyZWF0ZVdpZGdldCgKCiAgICBjb25zdCAgY2hhciog
IAkgLAogICAgV2lkZ2V0Q2xhc3MgCSAsCiAgICBXaWRnZXQgCQkgLAogICAgQXJnTGlzdCAJCSAs
CiAgICBDYXJkaW5hbCAJCSAKCik7CgpleHRlcm4gV2lkZ2V0IFh0Q3JlYXRlTWFuYWdlZFdpZGdl
dCgKCiAgICBjb25zdCAgY2hhciogIAkgLAogICAgV2lkZ2V0Q2xhc3MgCSAsCiAgICBXaWRnZXQg
CQkgLAogICAgQXJnTGlzdCAJCSAsCiAgICBDYXJkaW5hbCAJCSAKCik7CgpleHRlcm4gV2lkZ2V0
IFh0VmFDcmVhdGVXaWRnZXQoCgogICAgY29uc3QgIGNoYXIqIAkgLAogICAgV2lkZ2V0Q2xhc3MJ
CSAsCiAgICBXaWRnZXQJCSAsCiAgICAuLi4KCik7CgpleHRlcm4gV2lkZ2V0IFh0VmFDcmVhdGVN
YW5hZ2VkV2lkZ2V0KAoKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIFdpZGdldENsYXNzCQkgLAog
ICAgV2lkZ2V0CQkgLAogICAgLi4uCgopOwoKZXh0ZXJuIFdpZGdldCBYdENyZWF0ZUFwcGxpY2F0
aW9uU2hlbGwoICAKCiAgICBjb25zdCAgY2hhciogIAkgLAogICAgV2lkZ2V0Q2xhc3MgCSAsCiAg
ICBBcmdMaXN0IAkJICwKICAgIENhcmRpbmFsIAkJIAoKKTsKCmV4dGVybiBXaWRnZXQgWHRBcHBD
cmVhdGVTaGVsbCgKCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAg
ICBXaWRnZXRDbGFzcyAJICwKICAgIERpc3BsYXkqCQkgLAogICAgQXJnTGlzdCAJCSAsCiAgICBD
YXJkaW5hbCAJCSAKCik7CgpleHRlcm4gV2lkZ2V0IFh0VmFBcHBDcmVhdGVTaGVsbCgKCiAgICBj
b25zdCAgY2hhciogCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBXaWRnZXRDbGFzcwkJICwK
ICAgIERpc3BsYXkqCQkgLAogICAgLi4uCgopOwoKIAoKCgoKCmV4dGVybiB2b2lkIFh0VG9vbGtp
dEluaXRpYWxpemUoCgogICAgdm9pZAoKKTsKCmV4dGVybiBYdExhbmd1YWdlUHJvYyBYdFNldExh
bmd1YWdlUHJvYygKCiAgICBYdEFwcENvbnRleHQJICwKICAgIFh0TGFuZ3VhZ2VQcm9jCSAsCiAg
ICBYdFBvaW50ZXIJCSAKCik7CgpleHRlcm4gdm9pZCBYdERpc3BsYXlJbml0aWFsaXplKAoKICAg
IFh0QXBwQ29udGV4dCAJICwKICAgIERpc3BsYXkqCQkgLAogICAgY29uc3QgIGNoYXIqIAkgLAog
ICAgY29uc3QgIGNoYXIqIAkgLAogICAgWHJtT3B0aW9uRGVzY1JlYyogCSAsCiAgICBDYXJkaW5h
bCAJCSAsCiAgICBpbnQqCQkgLAogICAgY2hhcioqCQkgCgopOwoKZXh0ZXJuIFdpZGdldCBYdE9w
ZW5BcHBsaWNhdGlvbigKCiAgICBYdEFwcENvbnRleHQqCSAsCiAgICBjb25zdCAgY2hhciogCSAs
CiAgICBYcm1PcHRpb25EZXNjTGlzdCAJICwKICAgIENhcmRpbmFsIAkJICwKICAgIGludCoJCSAs
CiAgICBTdHJpbmcqCQkgLAogICAgU3RyaW5nKgkJICwKICAgIFdpZGdldENsYXNzCQkgLAogICAg
QXJnTGlzdCAJCSAsCiAgICBDYXJkaW5hbCAJCSAKCik7CgpleHRlcm4gV2lkZ2V0IFh0VmFPcGVu
QXBwbGljYXRpb24oCgogICAgWHRBcHBDb250ZXh0KgkgLAogICAgY29uc3QgIGNoYXIqIAkgLAog
ICAgWHJtT3B0aW9uRGVzY0xpc3QJICwKICAgIENhcmRpbmFsCQkgLAogICAgaW50KgkJICwKICAg
IFN0cmluZyoJCSAsCiAgICBTdHJpbmcqCQkgLAogICAgV2lkZ2V0Q2xhc3MJCSAsCiAgICAuLi4K
Cik7CgpleHRlcm4gV2lkZ2V0IFh0QXBwSW5pdGlhbGl6ZSggIAoKICAgIFh0QXBwQ29udGV4dCoJ
ICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIFhybU9wdGlvbkRlc2NMaXN0IAkgLAogICAgQ2Fy
ZGluYWwgCQkgLAogICAgaW50KgkJICwKICAgIFN0cmluZyoJCSAsCiAgICBTdHJpbmcqCQkgLAog
ICAgQXJnTGlzdCAJCSAsCiAgICBDYXJkaW5hbCAJCSAKCik7CgpleHRlcm4gV2lkZ2V0IFh0VmFB
cHBJbml0aWFsaXplKCAgCgogICAgWHRBcHBDb250ZXh0KgkgLAogICAgY29uc3QgIGNoYXIqIAkg
LAogICAgWHJtT3B0aW9uRGVzY0xpc3QJICwKICAgIENhcmRpbmFsCQkgLAogICAgaW50KgkJICwK
ICAgIFN0cmluZyoJCSAsCiAgICBTdHJpbmcqCQkgLAogICAgLi4uCgopOwoKZXh0ZXJuIFdpZGdl
dCBYdEluaXRpYWxpemUoICAKCiAgICBjb25zdCAgY2hhciogIAkgLAogICAgY29uc3QgIGNoYXIq
ICAJICwKICAgIFhybU9wdGlvbkRlc2NSZWMqIAkgLAogICAgQ2FyZGluYWwgCQkgLAogICAgaW50
KgkJICwKICAgIGNoYXIqKgkJIAoKKTsKCmV4dGVybiBEaXNwbGF5ICpYdE9wZW5EaXNwbGF5KAoK
ICAgIFh0QXBwQ29udGV4dCAJICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIGNvbnN0ICBjaGFy
KiAJICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIFhybU9wdGlvbkRlc2NSZWMqCSAsCiAgICBD
YXJkaW5hbCAJCSAsCiAgICBpbnQqCQkgLAogICAgY2hhcioqCQkgCgopOwoKZXh0ZXJuIFh0QXBw
Q29udGV4dCBYdENyZWF0ZUFwcGxpY2F0aW9uQ29udGV4dCgKCiAgICB2b2lkCgopOwoKZXh0ZXJu
IHZvaWQgWHRBcHBTZXRGYWxsYmFja1Jlc291cmNlcygKCiAgICBYdEFwcENvbnRleHQgCSAsCiAg
ICBTdHJpbmcqCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHREZXN0cm95QXBwbGljYXRpb25Db250ZXh0
KAoKICAgIFh0QXBwQ29udGV4dCAJIAoKKTsKCmV4dGVybiB2b2lkIFh0SW5pdGlhbGl6ZVdpZGdl
dENsYXNzKAoKICAgIFdpZGdldENsYXNzIAkgCgopOwoKZXh0ZXJuIFh0QXBwQ29udGV4dCBYdFdp
ZGdldFRvQXBwbGljYXRpb25Db250ZXh0KAoKICAgIFdpZGdldCAJCSAKCik7CgpleHRlcm4gWHRB
cHBDb250ZXh0IFh0RGlzcGxheVRvQXBwbGljYXRpb25Db250ZXh0KAoKICAgIERpc3BsYXkqCQkg
CgopOwoKZXh0ZXJuIFhybURhdGFiYXNlIFh0RGF0YWJhc2UoCgogICAgRGlzcGxheSoJCSAKCik7
CgpleHRlcm4gWHJtRGF0YWJhc2UgWHRTY3JlZW5EYXRhYmFzZSgKCiAgICBTY3JlZW4qCQkgCgop
OwoKZXh0ZXJuIHZvaWQgWHRDbG9zZURpc3BsYXkoCgogICAgRGlzcGxheSoJCSAKCik7CgpleHRl
cm4gdm9pZCBYdEdldEFwcGxpY2F0aW9uUmVzb3VyY2VzKAoKICAgIFdpZGdldCAJCSAsCiAgICBY
dFBvaW50ZXIgCQkgLAogICAgWHRSZXNvdXJjZUxpc3QgCSAsCiAgICBDYXJkaW5hbCAJCSAsCiAg
ICBBcmdMaXN0IAkJICwKICAgIENhcmRpbmFsIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0VmFHZXRB
cHBsaWNhdGlvblJlc291cmNlcygKCiAgICBXaWRnZXQJCSAsCiAgICBYdFBvaW50ZXIJCSAsCiAg
ICBYdFJlc291cmNlTGlzdAkgLAogICAgQ2FyZGluYWwJCSAsCiAgICAuLi4KCik7CgpleHRlcm4g
dm9pZCBYdEdldFN1YnJlc291cmNlcygKCiAgICBXaWRnZXQgCQkgLAogICAgWHRQb2ludGVyIAkJ
ICwKICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAgICBjb25zdCAgY2hhciogIAkgLAogICAgWHRSZXNv
dXJjZUxpc3QgCSAsCiAgICBDYXJkaW5hbCAJCSAsCiAgICBBcmdMaXN0IAkJICwKICAgIENhcmRp
bmFsIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0VmFHZXRTdWJyZXNvdXJjZXMoCgogICAgV2lkZ2V0
CQkgLAogICAgWHRQb2ludGVyCQkgLAogICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29uc3QgIGNo
YXIqIAkgLAogICAgWHRSZXNvdXJjZUxpc3QJICwKICAgIENhcmRpbmFsCQkgLAogICAgLi4uCgop
OwoKZXh0ZXJuIHZvaWQgWHRTZXRWYWx1ZXMoCgogICAgV2lkZ2V0IAkJICwKICAgIEFyZ0xpc3Qg
CQkgLAogICAgQ2FyZGluYWwgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRWYVNldFZhbHVlcygKCiAg
ICBXaWRnZXQJCSAsCiAgICAuLi4KCik7CgpleHRlcm4gdm9pZCBYdEdldFZhbHVlcygKCiAgICBX
aWRnZXQgCQkgLAogICAgQXJnTGlzdCAJCSAsCiAgICBDYXJkaW5hbCAJCSAKCik7CgpleHRlcm4g
dm9pZCBYdFZhR2V0VmFsdWVzKAoKICAgIFdpZGdldAkJICwKICAgIC4uLgoKKTsKCmV4dGVybiB2
b2lkIFh0U2V0U3VidmFsdWVzKAoKICAgIFh0UG9pbnRlciAJCSAsCiAgICBYdFJlc291cmNlTGlz
dCAJICwKICAgIENhcmRpbmFsIAkJICwKICAgIEFyZ0xpc3QgCQkgLAogICAgQ2FyZGluYWwgCQkg
CgopOwoKZXh0ZXJuIHZvaWQgWHRWYVNldFN1YnZhbHVlcygKCiAgICBYdFBvaW50ZXIJCSAsCiAg
ICBYdFJlc291cmNlTGlzdAkgLAogICAgQ2FyZGluYWwJCSAsCiAgICAuLi4KCik7CgpleHRlcm4g
dm9pZCBYdEdldFN1YnZhbHVlcygKCiAgICBYdFBvaW50ZXIgCQkgLAogICAgWHRSZXNvdXJjZUxp
c3QgCSAsCiAgICBDYXJkaW5hbCAJCSAsCiAgICBBcmdMaXN0IAkJICwKICAgIENhcmRpbmFsIAkJ
IAoKKTsKCmV4dGVybiB2b2lkIFh0VmFHZXRTdWJ2YWx1ZXMoCgogICAgWHRQb2ludGVyCQkgLAog
ICAgWHRSZXNvdXJjZUxpc3QJICwKICAgIENhcmRpbmFsCQkgLAogICAgLi4uCgopOwoKZXh0ZXJu
IHZvaWQgWHRHZXRSZXNvdXJjZUxpc3QoCgogICAgV2lkZ2V0Q2xhc3MgCSAsCiAgICBYdFJlc291
cmNlTGlzdCoJICwKICAgIENhcmRpbmFsKgkJIAoKKTsKCmV4dGVybiB2b2lkIFh0R2V0Q29uc3Ry
YWludFJlc291cmNlTGlzdCgKCiAgICBXaWRnZXRDbGFzcyAJICwKICAgIFh0UmVzb3VyY2VMaXN0
KgkgLAogICAgQ2FyZGluYWwqCQkgCgopOwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK
dHlwZWRlZiBzdHJ1Y3QgX1h0Q2hlY2twb2ludFRva2VuUmVjIHsKICAgIGludAkJc2F2ZV90eXBl
OwogICAgaW50CQlpbnRlcmFjdF9zdHlsZTsKICAgIEJvb2xlYW4Jc2h1dGRvd247CiAgICBCb29s
ZWFuCWZhc3Q7CiAgICBCb29sZWFuCWNhbmNlbF9zaHV0ZG93bjsKICAgIGludAkJcGhhc2U7CiAg
ICBpbnQJCWludGVyYWN0X2RpYWxvZ190eXBlOwkgCiAgICBCb29sZWFuCXJlcXVlc3RfY2FuY2Vs
OwkJIAogICAgQm9vbGVhbglyZXF1ZXN0X25leHRfcGhhc2U7CSAKICAgIEJvb2xlYW4Jc2F2ZV9z
dWNjZXNzOwkJIAogICAgaW50CQl0eXBlOwkJIAogICAgV2lkZ2V0CXdpZGdldDsJCSAKfSBYdENo
ZWNrcG9pbnRUb2tlblJlYywgKlh0Q2hlY2twb2ludFRva2VuOwoKWHRDaGVja3BvaW50VG9rZW4g
WHRTZXNzaW9uR2V0VG9rZW4oCgogICAgV2lkZ2V0CQkgCgopOwoKdm9pZCBYdFNlc3Npb25SZXR1
cm5Ub2tlbigKCiAgICBYdENoZWNrcG9pbnRUb2tlbgkgCgopOwoKIAoKCgoKCmV4dGVybiBYdEVy
cm9yTXNnSGFuZGxlciBYdEFwcFNldEVycm9yTXNnSGFuZGxlcigKCiAgICBYdEFwcENvbnRleHQg
CSAsCiAgICBYdEVycm9yTXNnSGFuZGxlciAJIAoKKTsKCmV4dGVybiB2b2lkIFh0U2V0RXJyb3JN
c2dIYW5kbGVyKCAgCgogICAgWHRFcnJvck1zZ0hhbmRsZXIgCSAKCik7CgpleHRlcm4gWHRFcnJv
ck1zZ0hhbmRsZXIgWHRBcHBTZXRXYXJuaW5nTXNnSGFuZGxlcigKCiAgICBYdEFwcENvbnRleHQg
CSAsCiAgICBYdEVycm9yTXNnSGFuZGxlciAJIAoKKTsKCmV4dGVybiB2b2lkIFh0U2V0V2Fybmlu
Z01zZ0hhbmRsZXIoICAKCiAgICBYdEVycm9yTXNnSGFuZGxlciAJIAoKKTsKCmV4dGVybiB2b2lk
IFh0QXBwRXJyb3JNc2coCgogICAgWHRBcHBDb250ZXh0IAkgLAogICAgY29uc3QgIGNoYXIqICAJ
ICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIGNvbnN0ICBj
aGFyKiAJICwKICAgIFN0cmluZyoJCSAsCiAgICBDYXJkaW5hbCoJCSAKCik7CgpleHRlcm4gdm9p
ZCBYdEVycm9yTXNnKCAgCgogICAgY29uc3QgIGNoYXIqICAJICwKICAgIGNvbnN0ICBjaGFyKiAJ
ICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIFN0cmluZyoJ
CSAsCiAgICBDYXJkaW5hbCoJCSAKCik7CgpleHRlcm4gdm9pZCBYdEFwcFdhcm5pbmdNc2coCgog
ICAgWHRBcHBDb250ZXh0IAkgLAogICAgY29uc3QgIGNoYXIqICAJICwKICAgIGNvbnN0ICBjaGFy
KiAgCSAsCiAgICBjb25zdCAgY2hhciogIAkgLAogICAgY29uc3QgIGNoYXIqICAJICwKICAgIFN0
cmluZyoJCSAsCiAgICBDYXJkaW5hbCoJCSAKCik7CgpleHRlcm4gdm9pZCBYdFdhcm5pbmdNc2co
ICAKCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBjb25zdCAg
Y2hhciogCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBTdHJpbmcqCQkgLAogICAgQ2FyZGlu
YWwqCQkgCgopOwoKZXh0ZXJuIFh0RXJyb3JIYW5kbGVyIFh0QXBwU2V0RXJyb3JIYW5kbGVyKAoK
ICAgIFh0QXBwQ29udGV4dCAJICwKICAgIFh0RXJyb3JIYW5kbGVyIAkgCgopOwoKZXh0ZXJuIHZv
aWQgWHRTZXRFcnJvckhhbmRsZXIoICAKCiAgICBYdEVycm9ySGFuZGxlciAJIAoKKTsKCmV4dGVy
biBYdEVycm9ySGFuZGxlciBYdEFwcFNldFdhcm5pbmdIYW5kbGVyKAoKICAgIFh0QXBwQ29udGV4
dCAJICwKICAgIFh0RXJyb3JIYW5kbGVyIAkgCgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRXYXJuaW5n
SGFuZGxlciggIAoKICAgIFh0RXJyb3JIYW5kbGVyIAkgCgopOwoKZXh0ZXJuIHZvaWQgWHRBcHBF
cnJvcigKCiAgICBYdEFwcENvbnRleHQgCSAsCiAgICBjb25zdCAgY2hhciogCSAKCik7CgpleHRl
cm4gdm9pZCBYdEVycm9yKCAgCgogICAgY29uc3QgIGNoYXIqIAkgCgopOwoKZXh0ZXJuIHZvaWQg
WHRBcHBXYXJuaW5nKAoKICAgIFh0QXBwQ29udGV4dCAJICwKICAgIGNvbnN0ICBjaGFyKiAJIAoK
KTsKCmV4dGVybiB2b2lkIFh0V2FybmluZyggIAoKICAgIGNvbnN0ICBjaGFyKiAJIAoKKTsKCmV4
dGVybiBYcm1EYXRhYmFzZSAqWHRBcHBHZXRFcnJvckRhdGFiYXNlKAoKICAgIFh0QXBwQ29udGV4
dCAJIAoKKTsKCmV4dGVybiBYcm1EYXRhYmFzZSAqWHRHZXRFcnJvckRhdGFiYXNlKCAgCgogICAg
dm9pZAoKKTsKCmV4dGVybiB2b2lkIFh0QXBwR2V0RXJyb3JEYXRhYmFzZVRleHQoCgogICAgWHRB
cHBDb250ZXh0IAkgLAogICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29uc3QgIGNoYXIqIAkgLAog
ICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29uc3QgIGNoYXIqICAJICwKICAgIFN0cmluZyAJCSAs
CiAgICBpbnQgCQkgLAogICAgWHJtRGF0YWJhc2UgCSAKCik7CgpleHRlcm4gdm9pZCBYdEdldEVy
cm9yRGF0YWJhc2VUZXh0KCAgCgogICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29uc3QgIGNoYXIq
IAkgLAogICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29uc3QgIGNoYXIqICAJICwKICAgIFN0cmlu
ZyAJCSAsCiAgICBpbnQgCQkgCgopOwoKIAoKCgoKCmV4dGVybiBjaGFyICpYdE1hbGxvYygKCiAg
ICBDYXJkaW5hbCAJCSAKCik7CgpleHRlcm4gY2hhciAqWHRDYWxsb2MoCgogICAgQ2FyZGluYWwJ
CSAsCiAgICBDYXJkaW5hbCAJCSAKCik7CgpleHRlcm4gY2hhciAqWHRSZWFsbG9jKAoKICAgIGNo
YXIqIAkJICwKICAgIENhcmRpbmFsIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0RnJlZSgKCiAgICBj
aGFyKgkJIAoKKTsKCiMgMjM1NCAiL3Vzci9vcGVud2luL2luY2x1ZGUvWDExL0ludHJpbnNpYy5o
IgoKCgoKCgogCgoKCgoKZXh0ZXJuIFh0V29ya1Byb2NJZCBYdEFkZFdvcmtQcm9jKCAgCgogICAg
WHRXb3JrUHJvYyAJCSAsCiAgICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0ZXJuIFh0V29ya1Byb2NJ
ZCBYdEFwcEFkZFdvcmtQcm9jKAoKICAgIFh0QXBwQ29udGV4dCAJICwKICAgIFh0V29ya1Byb2Mg
CQkgLAogICAgWHRQb2ludGVyIAkJIAoKKTsKCmV4dGVybiB2b2lkICBYdFJlbW92ZVdvcmtQcm9j
KAoKICAgIFh0V29ya1Byb2NJZCAJIAoKKTsKCgogCgoKCgpleHRlcm4gR0MgWHRHZXRHQygKCiAg
ICBXaWRnZXQgCQkgLAogICAgWHRHQ01hc2sgCQkgLAogICAgWEdDVmFsdWVzKiAJCSAKCik7Cgpl
eHRlcm4gR0MgWHRBbGxvY2F0ZUdDKAoKICAgIFdpZGdldCAJCSAsCiAgICBDYXJkaW5hbAkJICwK
ICAgIFh0R0NNYXNrIAkJICwKICAgIFhHQ1ZhbHVlcyogCQkgLAogICAgWHRHQ01hc2sJCSAsCiAg
ICBYdEdDTWFzawkJIAoKKTsKCiAKCgoKZXh0ZXJuIHZvaWQgWHREZXN0cm95R0MoICAKCiAgICBH
QyAJCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRSZWxlYXNlR0MoCgogICAgV2lkZ2V0IAkJICwKICAg
IEdDIAkJCSAKCik7CgoKCmV4dGVybiB2b2lkIFh0QXBwUmVsZWFzZUNhY2hlUmVmcygKCiAgICBY
dEFwcENvbnRleHQJICwKICAgIFh0Q2FjaGVSZWYqCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRDYWxs
YmFja1JlbGVhc2VDYWNoZVJlZigKCiAgICBXaWRnZXQgCQkgLAogICAgWHRQb2ludGVyIAkJICwJ
IAogICAgWHRQb2ludGVyIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0Q2FsbGJhY2tSZWxlYXNlQ2Fj
aGVSZWZMaXN0KAoKICAgIFdpZGdldCAJCSAsCiAgICBYdFBvaW50ZXIgCQkgLAkgCiAgICBYdFBv
aW50ZXIgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRXTUNvbG9ybWFwV2luZG93cygKCiAgICBX
aWRnZXQgCQkgLAogICAgV2lkZ2V0KgkJICwKICAgIENhcmRpbmFsCQkgCgopOwoKZXh0ZXJuIFN0
cmluZyBYdEZpbmRGaWxlKAoKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIFN1YnN0aXR1dGlvbgkg
LAogICAgQ2FyZGluYWwgCQkgLAogICAgWHRGaWxlUHJlZGljYXRlCSAKCik7CgpleHRlcm4gU3Ry
aW5nIFh0UmVzb2x2ZVBhdGhuYW1lKAoKICAgIERpc3BsYXkqCQkgLAogICAgY29uc3QgIGNoYXIq
IAkgLAogICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29uc3Qg
IGNoYXIqIAkgLAogICAgU3Vic3RpdHV0aW9uCSAsCiAgICBDYXJkaW5hbAkJICwKICAgIFh0Rmls
ZVByZWRpY2F0ZSAJIAoKKTsKCiAKCgoKCgoKICAgIApleHRlcm4gdm9pZCBYdERpc293blNlbGVj
dGlvbigKCiAgICBXaWRnZXQgCQkgLAogICAgQXRvbSAJCSAsCiAgICBUaW1lIAkJIAoKKTsKCmV4
dGVybiB2b2lkIFh0R2V0U2VsZWN0aW9uVmFsdWUoCgogICAgV2lkZ2V0IAkJICwKICAgIEF0b20g
CQkgLAogICAgQXRvbSAJCSAsCiAgICBYdFNlbGVjdGlvbkNhbGxiYWNrUHJvYyAgLAogICAgWHRQ
b2ludGVyIAkJICwKICAgIFRpbWUgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRHZXRTZWxlY3Rpb25W
YWx1ZXMoCgogICAgV2lkZ2V0IAkJICwKICAgIEF0b20gCQkgLAogICAgQXRvbSoJCSAsCiAgICBp
bnQgCQkgLAogICAgWHRTZWxlY3Rpb25DYWxsYmFja1Byb2MgICwKICAgIFh0UG9pbnRlcioJCSAs
CiAgICBUaW1lIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0QXBwU2V0U2VsZWN0aW9uVGltZW91dCgK
CiAgICBYdEFwcENvbnRleHQgCSAsCiAgICB1bnNpZ25lZCBsb25nIAkgCgopOwoKZXh0ZXJuIHZv
aWQgWHRTZXRTZWxlY3Rpb25UaW1lb3V0KCAgCgogICAgdW5zaWduZWQgbG9uZyAJIAoKKTsKCmV4
dGVybiB1bnNpZ25lZCBsb25nIFh0QXBwR2V0U2VsZWN0aW9uVGltZW91dCgKCiAgICBYdEFwcENv
bnRleHQgCSAKCik7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBYdEdldFNlbGVjdGlvblRpbWVvdXQo
ICAKCiAgICB2b2lkCgopOwoKZXh0ZXJuIFhTZWxlY3Rpb25SZXF1ZXN0RXZlbnQgKlh0R2V0U2Vs
ZWN0aW9uUmVxdWVzdCgKCiAgICBXaWRnZXQgCQkgLAogICAgQXRvbSAJCSAsCiAgICBYdFJlcXVl
c3RJZCAJIAoKKTsKCmV4dGVybiB2b2lkIFh0R2V0U2VsZWN0aW9uVmFsdWVJbmNyZW1lbnRhbCgK
CiAgICBXaWRnZXQgCQkgLAogICAgQXRvbSAJCSAsCiAgICBBdG9tIAkJICwKICAgIFh0U2VsZWN0
aW9uQ2FsbGJhY2tQcm9jICAsCiAgICBYdFBvaW50ZXIgCQkgLAogICAgVGltZSAJCSAKCik7Cgpl
eHRlcm4gdm9pZCBYdEdldFNlbGVjdGlvblZhbHVlc0luY3JlbWVudGFsKAoKICAgIFdpZGdldCAJ
CSAsCiAgICBBdG9tIAkJICwKICAgIEF0b20qCQkgLAogICAgaW50IAkJICwKICAgIFh0U2VsZWN0
aW9uQ2FsbGJhY2tQcm9jICAsCiAgICBYdFBvaW50ZXIqCQkgLAogICAgVGltZSAJCSAKCik7Cgpl
eHRlcm4gdm9pZCBYdFNldFNlbGVjdGlvblBhcmFtZXRlcnMoCgogICAgV2lkZ2V0CQkgLAogICAg
QXRvbQkJICwKICAgIEF0b20JCSAsCiAgICBYdFBvaW50ZXIJCSAsCiAgICB1bnNpZ25lZCBsb25n
CSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRHZXRTZWxlY3Rpb25QYXJhbWV0ZXJz
KAoKICAgIFdpZGdldAkJICwKICAgIEF0b20JCSAsCiAgICBYdFJlcXVlc3RJZAkJICwKICAgIEF0
b20qCQkgLAogICAgWHRQb2ludGVyKgkJICwKICAgIHVuc2lnbmVkIGxvbmcqCSAsCiAgICBpbnQq
CQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRDcmVhdGVTZWxlY3Rpb25SZXF1ZXN0KAoKICAgIFdpZGdl
dAkJICwKICAgIEF0b20JCSAKCik7CgpleHRlcm4gdm9pZCBYdFNlbmRTZWxlY3Rpb25SZXF1ZXN0
KAoKICAgIFdpZGdldAkJICwKICAgIEF0b20JCSAsCiAgICBUaW1lCQkgCgopOwoKZXh0ZXJuIHZv
aWQgWHRDYW5jZWxTZWxlY3Rpb25SZXF1ZXN0KAoKICAgIFdpZGdldAkJICwKICAgIEF0b20JCSAK
Cik7CgpleHRlcm4gQXRvbSBYdFJlc2VydmVQcm9wZXJ0eUF0b20oCgogICAgV2lkZ2V0CQkgCgop
OwoKZXh0ZXJuIHZvaWQgWHRSZWxlYXNlUHJvcGVydHlBdG9tKAoKICAgIFdpZGdldAkJICwKICAg
IEF0b20JCSAKCik7CgpleHRlcm4gdm9pZCBYdEdyYWJLZXkoCgogICAgV2lkZ2V0IAkJICwKICAg
IHVuc2lnbmVkIGludCAgCQkgLAogICAgTW9kaWZpZXJzCSAJICwKICAgIGludCAgCQkgLAogICAg
aW50IAkJICwKICAgIGludCAJCSAKCik7CgpleHRlcm4gdm9pZCBYdFVuZ3JhYktleSgKCiAgICBX
aWRnZXQgCQkgLAogICAgdW5zaWduZWQgaW50ICAJCSAsCiAgICBNb2RpZmllcnMJIAkgCgopOwoK
ZXh0ZXJuIGludCBYdEdyYWJLZXlib2FyZCgKCiAgICBXaWRnZXQgCQkgLAogICAgaW50ICAJCSAs
CiAgICBpbnQgCQkgLAogICAgaW50IAkJICwKICAgIFRpbWUgCQkgCgopOwoKZXh0ZXJuIHZvaWQg
WHRVbmdyYWJLZXlib2FyZCgKCiAgICBXaWRnZXQgCQkgLAogICAgVGltZSAJCSAKCik7CgpleHRl
cm4gdm9pZCBYdEdyYWJCdXR0b24oCgogICAgV2lkZ2V0IAkJICwKICAgIGludCAJCSAsCiAgICBN
b2RpZmllcnMJIAkgLAogICAgaW50ICAJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIGludCAJ
CSAsCiAgICBpbnQgCQkgLAogICAgV2luZG93IAkJICwKICAgIEN1cnNvciAJCSAKCik7CgpleHRl
cm4gdm9pZCBYdFVuZ3JhYkJ1dHRvbigKCiAgICBXaWRnZXQgCQkgLAogICAgdW5zaWduZWQgaW50
CSAsCiAgICBNb2RpZmllcnMJIAkgCgopOwoKZXh0ZXJuIGludCBYdEdyYWJQb2ludGVyKAoKICAg
IFdpZGdldCAJCSAsCiAgICBpbnQgIAkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgaW50IAkJ
ICwKICAgIGludCAJCSAsCiAgICBXaW5kb3cgCQkgLAogICAgQ3Vyc29yIAkJICwKICAgIFRpbWUg
CQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRVbmdyYWJQb2ludGVyKAoKICAgIFdpZGdldCAJCSAsCiAg
ICBUaW1lIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0R2V0QXBwbGljYXRpb25OYW1lQW5kQ2xhc3Mo
CgogICAgRGlzcGxheSoJCSAsCiAgICBTdHJpbmcqCQkgLAogICAgU3RyaW5nKgkJIAoKKTsKCmV4
dGVybiB2b2lkIFh0UmVnaXN0ZXJEcmF3YWJsZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdh
YmxlCQkgLAogICAgV2lkZ2V0CQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRVbnJlZ2lzdGVyRHJhd2Fi
bGUoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJIAoKKTsKCmV4dGVybiBXaWRnZXQg
WHRIb29rc09mRGlzcGxheSgKCiAgICBEaXNwbGF5KgkJIAoKKTsKCnR5cGVkZWYgc3RydWN0IHsK
ICAgIFN0cmluZyB0eXBlOwogICAgV2lkZ2V0IHdpZGdldDsKICAgIEFyZ0xpc3QgYXJnczsKICAg
IENhcmRpbmFsIG51bV9hcmdzOwp9IFh0Q3JlYXRlSG9va0RhdGFSZWMsICpYdENyZWF0ZUhvb2tE
YXRhOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgU3RyaW5nIHR5cGU7CiAgICBXaWRnZXQgd2lkZ2V0
OwogICAgWHRQb2ludGVyIGV2ZW50X2RhdGE7CiAgICBDYXJkaW5hbCBudW1fZXZlbnRfZGF0YTsK
fSBYdENoYW5nZUhvb2tEYXRhUmVjLCAqWHRDaGFuZ2VIb29rRGF0YTsKCnR5cGVkZWYgc3RydWN0
IHsKICAgIFdpZGdldCBvbGQsIHJlcTsKICAgIEFyZ0xpc3QgYXJnczsKICAgIENhcmRpbmFsIG51
bV9hcmdzOwp9IFh0Q2hhbmdlSG9va1NldFZhbHVlc0RhdGFSZWMsICpYdENoYW5nZUhvb2tTZXRW
YWx1ZXNEYXRhOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgU3RyaW5nIHR5cGU7CiAgICBXaWRnZXQg
d2lkZ2V0OwogICAgWHRHZW9tZXRyeU1hc2sgY2hhbmdlTWFzazsKICAgIFhXaW5kb3dDaGFuZ2Vz
IGNoYW5nZXM7Cn0gWHRDb25maWd1cmVIb29rRGF0YVJlYywgKlh0Q29uZmlndXJlSG9va0RhdGE7
Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBTdHJpbmcgdHlwZTsKICAgIFdpZGdldCB3aWRnZXQ7CiAg
ICBYdFdpZGdldEdlb21ldHJ5KiByZXF1ZXN0OwogICAgWHRXaWRnZXRHZW9tZXRyeSogcmVwbHk7
CiAgICBYdEdlb21ldHJ5UmVzdWx0IHJlc3VsdDsKfSBYdEdlb21ldHJ5SG9va0RhdGFSZWMsICpY
dEdlb21ldHJ5SG9va0RhdGE7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBTdHJpbmcgdHlwZTsKICAg
IFdpZGdldCB3aWRnZXQ7Cn0gWHREZXN0cm95SG9va0RhdGFSZWMsICpYdERlc3Ryb3lIb29rRGF0
YTsKCmV4dGVybiB2b2lkIFh0R2V0RGlzcGxheXMoCgogICAgWHRBcHBDb250ZXh0CSAsCiAgICBE
aXNwbGF5KioqCQkgLAogICAgQ2FyZGluYWwqCQkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRUb29s
a2l0VGhyZWFkSW5pdGlhbGl6ZSgKCiAgICB2b2lkCgopOwoKZXh0ZXJuIHZvaWQgWHRBcHBTZXRF
eGl0RmxhZygKCiAgICBYdEFwcENvbnRleHQJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0QXBwR2V0
RXhpdEZsYWcoCgogICAgWHRBcHBDb250ZXh0CSAKCik7CgpleHRlcm4gdm9pZCBYdEFwcExvY2so
CgogICAgWHRBcHBDb250ZXh0CSAKCik7CgpleHRlcm4gdm9pZCBYdEFwcFVubG9jaygKCiAgICBY
dEFwcENvbnRleHQJIAoKKTsKCiAKCgoKCiAKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9B
Y2NlbGVyYXRvclRhYmxlKAoKICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAg
ICBDYXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAog
ICAgWHRQb2ludGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb0F0b20oCgog
ICAgRGlzcGxheSoJICwKICAgIFhybVZhbHVlUHRyICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQog
ICAgWHJtVmFsdWVQdHIJICwKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7
CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvQm9vbCgKCiAgICBEaXNwbGF5KgkgLAogICAg
WHJtVmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAog
ICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0
Q3Z0U3RyaW5nVG9Cb29sZWFuKAoKICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkg
CiAgICBDYXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkg
LAogICAgWHRQb2ludGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb0NvbW1h
bmRBcmdBcnJheSgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2Fy
ZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0
UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9DdXJzb3IoCgogICAg
RGlzcGxheSoJICwKICAgIFhybVZhbHVlUHRyICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQogICAg
WHJtVmFsdWVQdHIJICwKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7Cgpl
eHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvRGltZW5zaW9uKAoKICAgIERpc3BsYXkqCSAsCiAg
ICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAs
CiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4g
WHRDdnRTdHJpbmdUb0RpcmVjdG9yeVN0cmluZygKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFs
dWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJt
VmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3Ry
aW5nVG9EaXNwbGF5KAoKICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBD
YXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAg
WHRQb2ludGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb0ZpbGUoCgogICAg
RGlzcGxheSoJICwKICAgIFhybVZhbHVlUHRyICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQogICAg
WHJtVmFsdWVQdHIJICwKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7Cgpl
eHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvRmxvYXQoCgogICAgRGlzcGxheSoJICwKICAgIFhy
bVZhbHVlUHRyICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQogICAgWHJtVmFsdWVQdHIJICwKICAg
IFhybVZhbHVlUHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2
dFN0cmluZ1RvRm9udCgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJIAogICAg
Q2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAg
IFh0UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9Gb250U2V0KAoK
ICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCogICAgLAkK
ICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVyKgkgCgop
OwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb0ZvbnRTdHJ1Y3QoCgogICAgRGlzcGxheSoJ
ICwKICAgIFhybVZhbHVlUHRyICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQogICAgWHJtVmFsdWVQ
dHIJICwKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7CgpleHRlcm4gQm9v
bGVhbiBYdEN2dFN0cmluZ1RvR3Jhdml0eSgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQ
dHIgICwKICAgIENhcmRpbmFsKiAgICAsCQogICAgWHJtVmFsdWVQdHIJICwKICAgIFhybVZhbHVl
UHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1Rv
SW5pdGlhbFN0YXRlKAoKICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBD
YXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAg
WHRQb2ludGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb0ludCgKCiAgICBE
aXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAgICBY
cm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4
dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9QaXhlbCgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJt
VmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAg
WHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCgoKZXh0ZXJuIEJvb2xlYW4gWHRD
dnRTdHJpbmdUb1Jlc3RhcnRTdHlsZSgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIg
ICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQ
dHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9T
aG9ydCgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwq
ICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRl
cioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9UcmFuc2xhdGlvblRhYmxlKAoK
ICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCogICAgLAkK
ICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVyKgkgCgop
OwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb1Vuc2lnbmVkQ2hhcigKCiAgICBEaXNwbGF5
KgkgLAogICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1
ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4dGVybiBC
b29sZWFuIFh0Q3Z0U3RyaW5nVG9WaXN1YWwoCgogICAgRGlzcGxheSoJICwKICAgIFhybVZhbHVl
UHRyICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQogICAgWHJtVmFsdWVQdHIJICwKICAgIFhybVZh
bHVlUHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7CgogCgpleHRlcm4gQm9vbGVhbiBYdEN2dElu
dFRvQm9vbCgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2FyZGlu
YWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9p
bnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0SW50VG9Cb29sZWFuKAoKICAgIERpc3Bs
YXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCogICAgLAkKICAgIFhybVZh
bHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVyKgkgCgopOwoKZXh0ZXJu
IEJvb2xlYW4gWHRDdnRJbnRUb0NvbG9yKAoKICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0
ciAgLAkgCiAgICBDYXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1
ZVB0cgkgLAogICAgWHRQb2ludGVyKgkgCgopOwoKCgpleHRlcm4gQm9vbGVhbiBYdEN2dEludFRv
RmxvYXQoCgogICAgRGlzcGxheSoJICwKICAgIFhybVZhbHVlUHRyICAsCSAKICAgIENhcmRpbmFs
KiAgICAsCQogICAgWHJtVmFsdWVQdHIJICwKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYdFBvaW50
ZXIqCSAKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dEludFRvRm9udCgKCiAgICBEaXNwbGF5Kgkg
LAogICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0
cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29s
ZWFuIFh0Q3Z0SW50VG9QaXhlbCgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJ
IAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJ
ICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0SW50VG9QaXhtYXAo
CgogICAgRGlzcGxheSoJICwKICAgIFhybVZhbHVlUHRyICAsCSAKICAgIENhcmRpbmFsKiAgICAs
CQogICAgWHJtVmFsdWVQdHIJICwKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYdFBvaW50ZXIqCSAK
Cik7CgoKCmV4dGVybiBCb29sZWFuIFh0Q3Z0SW50VG9TaG9ydCgKCiAgICBEaXNwbGF5KgkgLAog
ICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkg
LAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFu
IFh0Q3Z0SW50VG9VbnNpZ25lZENoYXIoCgogICAgRGlzcGxheSoJICwKICAgIFhybVZhbHVlUHRy
ICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQogICAgWHJtVmFsdWVQdHIJICwKICAgIFhybVZhbHVl
UHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7CgogCgpleHRlcm4gQm9vbGVhbiBYdEN2dENvbG9y
VG9QaXhlbCgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2FyZGlu
YWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9p
bnRlcioJIAoKKTsKCiAKCgoKCn0gCgoKIAojIDYgIi4uLy4uL2luY2x1ZGUvbGliaW5jL2xpYnV0
aWwuaCIgMgoKCgoKCiMgMSAiLi4vLi4vaW5jbHVkZS9sb2NhbGluYy9kZXYvZmlmby5oIiAxCgoK
IAoKIAoKCgoKCgoKIAoKCgoKc3RydWN0IGZpZm8KewogICAgc2hvcnQgZl9sb2NrOwkgCiAgICBz
aG9ydCBmX3NpemU7CSAKICAgIHNob3J0IGZfcmQ7CQkgCiAgICBzaG9ydCBmX3dyOwkJIAp9OwoK
dHlwZWRlZiBzdHJ1Y3QgZmlmbyAqZnBfdDsKCgpzdGF0aWMgaW5saW5lIGludApmZmVtcHR5KGZw
X3QgZnApCnsKICAgIHJldHVybihmcC0+Zl9yZCA9PSBmcC0+Zl93cik7Cn0KCnN0YXRpYyBpbmxp
bmUgaW50CmZmZnVsbChmcF90IGZwKQp7CiAgICByZXR1cm4oZnAtPmZfcmQgLSBmcC0+Zl93ciA9
PSAxIHx8CgkgICAgIGZwLT5mX3JkIC0gZnAtPmZfd3IgPT0gMSAtIGZwLT5mX3NpemUpOwp9Cgpz
dGF0aWMgaW5saW5lIHZvaWQKZnJmbHVzaChmcF90IGZwKQp7CiAgICBmcC0+Zl9yZCA9IGZwLT5m
X3dyOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQKZndmbHVzaChmcF90IGZwKQp7CiAgICBmcC0+Zl93
ciA9IGZwLT5mX3JkOwp9CgpzdGF0aWMgaW5saW5lIGludApmZnNpemUoZnBfdCBmcCkKewogICAg
cmV0dXJuKGZwLT5mX3NpemUtMSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZApmZmluaXQoZnBfdCBm
cCwgaW50IHNpemUpCnsKICAgIGZwLT5mX3NpemUgPSBzaXplKzE7CiAgICBmcC0+Zl9sb2NrID0g
ZnAtPmZfcmQgPSBmcC0+Zl93cj0wOwp9CgogCnN0YXRpYyBpbmxpbmUgaW50CmZmcm9vbShmcF90
IGZwKQp7CiAgICByZXR1cm4oKGZwLT5mX3JkLSBmcC0+Zl93ciArIGZmc2l6ZShmcCkpICUgKGxv
bmcpZnAtPmZfc2l6ZSk7Cn0KCiAKc3RhdGljIGlubGluZSBpbnQKZmZhdmFpbChmcF90IGZwKQp7
CiAgICByZXR1cm4oKGZwLT5mX3dyIC0gZnAtPmZfcmQgKyBmcC0+Zl9zaXplKSAlIChsb25nKWZw
LT5mX3NpemUpOwp9CgojIDEwOSAiLi4vLi4vaW5jbHVkZS9sb2NhbGluYy9kZXYvZmlmby5oIgoK
CgoKCgojIDEyMyAiLi4vLi4vaW5jbHVkZS9sb2NhbGluYy9kZXYvZmlmby5oIgoKCiMgMTEgIi4u
Ly4uL2luY2x1ZGUvbGliaW5jL2xpYnV0aWwuaCIgMgoKIyAxICIuLi8uLi9pbmNsdWRlL2xvY2Fs
aW5jL20zeDMuaCIgMQoKCiAKCmNsYXNzIG0zX3QgewpwdWJsaWM6CiAgICBmbG9hdCBhM3gzWzNd
WzNdOwp9OwoKCgoKCgoKCgoKCmNsYXNzIHYzX3QgewpwdWJsaWM6CiAgICBmbG9hdCBhMXgzWzNd
Owp9OwoKCgoKCiMgMTIgIi4uLy4uL2luY2x1ZGUvbGliaW5jL2xpYnV0aWwuaCIgMgoKIyAxICIu
Li8uLi9pbmNsdWRlL2xvY2FsaW5jL1BjYkNvbnN0YW50cy5oIiAxCgoKCgogCgoKCmNvbnN0IGlu
dCBrVXNlclF1aXQJCT0gMTsKCnR5cGVkZWYgY2hhcgkJCUJvb2xlYW47CnR5cGVkZWYgaW50CQkJ
c25hcF9yZXNfdDsKdHlwZWRlZglpbnQJCQlsb2FkX2NvZGVfdDsKIAoKCnR5cGVkZWYJc2hvcnQJ
CQl0aHJlc2hvbGRfZGF0YV90Owp0eXBlZGVmIHNob3J0CQkJY29vcl90Owp0eXBlZGVmIHNob3J0
CQkJbm1uZHhfdDsgIAp0eXBlZGVmCXNob3J0CQkJcmVzdWx0c19kYXRhX3Q7Cgp0eXBlZGVmIHVu
c2lnbmVkIGNoYXIgKgkJZmJhZGRyX3Q7Cgpjb25zdCBpbnQgTlVMTE5BTUUJCT0gLTE7Cgpjb25z
dAlpbnQJa0JvYXJkRnVkZ2VGYWN0b3IJPSAzMDA7CiAKCgpjb25zdCBpbnQgUk9UXzAJCT0gMHgw
Owpjb25zdCBpbnQgUk9UXzkwCT0gMHgxOwpjb25zdCBpbnQgUk9UXzE4MAk9IDB4MjsKY29uc3Qg
aW50IFJPVF8yNzAJPSAweDM7CmNvbnN0IGludCBST1RBVElPTl9NQVNLCT0gMHgzOwoKCgoKCmNv
bnN0IGludCBUcnVlCQk9IDE7CmNvbnN0IGludCBGYWxzZQkJPSAwOwoKCgoKCmNvbnN0IHVfaW50
IE1BWEJSRAkJPSA4OwkgCmNvbnN0IHVfaW50IGtNYXhCcmQJCT0gTUFYQlJEOwpjb25zdCB1X2lu
dCBrTWF4UGFzc2VzCQk9IE1BWEJSRDsKCmNvbnN0IHVfaW50IE5WQ1BVUkVTCQk9IDg7Cgpjb25z
dCB1X2ludCBOQ01NQ0FNCQk9IDg7CmNvbnN0IHVfaW50IGtOdW1DbW1DYW0JCT0gTkNNTUNBTTsK
CmNvbnN0IHVfaW50IGtDYW1lcmFPbmUJCT0gMTsKY29uc3QgdV9pbnQga0NhbWVyYVR3bwkJPSAy
Owpjb25zdCB1X2ludCBrQ2FtZXJhVGhyZWUJPSAzOwpjb25zdCB1X2ludCBrQ2FtZXJhRm91cgkJ
PSA0Owpjb25zdCB1X2ludCBrQ2FtZXJhRml2ZQkJPSA1Owpjb25zdCB1X2ludCBrQ2FtZXJhU2l4
CQk9IDY7CmNvbnN0IHVfaW50IGtDYW1lcmFTZXZlbgk9IDc7CmNvbnN0IHVfaW50IGtDYW1lcmFF
aWdodAk9IDg7CgogCgoKY29uc3QgaW50IFJFU09MVE4JCT0gMTY7Cgpjb25zdCBpbnQgTkNSVFBB
UgkJPSAzMjsJIAoKIAoKCgpjb25zdCBpbnQgTkZJRFUJCQk9IDQ7CmNvbnN0IGludCBrTWF4Rmlk
dVJlc3VsdHMJPSBORklEVTsKCiAKCgpjb25zdCB1X2ludCBBTEdPX05BTUVfU0laRQk9IDMyOwoK
Y29uc3QgdV9pbnQga0FsZ29OYW1lTGVuZ3RoCT0gQUxHT19OQU1FX1NJWkU7CmNvbnN0IHVfaW50
IGtPbGRBbGdvTmFtZUxlbmd0aAk9IGtBbGdvTmFtZUxlbmd0aCAvIDI7CQkgCgp0eXBlZGVmIGVu
dW0geyBrRmxpcFgsIGtGbGlwWSB9IGVGbGlwQnk7CgogCmNvbnN0IGludCBGTElQWAkJCT0gMDsK
Y29uc3QgaW50IEZMSVBZCQkJPSAxOwoKIApjb25zdCBpbnQgTk8JCQk9IEZhbHNlOwkgCmNvbnN0
IGludCBZRVMJCQk9IFRydWU7Cgpjb25zdCB1X2ludCBNQUpOQklUUwkJPSA5OwkgCmNvbnN0IHVf
aW50IE1BWE1BSk9SCQk9ICgxIDw8IE1BSk5CSVRTKTsKY29uc3QgdV9pbnQga01heEFsZ29zUGVy
TGV2ZWwJPSBNQVhNQUpPUjsKY29uc3QgdV9pbnQga1Bhc3NBbGdvCQk9IGtNYXhBbGdvc1Blckxl
dmVsOwoKIAoKCgoKCgpjb25zdCBsb25nIEFMR09fUElOX1BSRQkJPSAwOwpjb25zdCBsb25nIEFM
R09fUElOX1BPU1QJPSAxOwpjb25zdCBsb25nIEFMR09fUE9TVAkJPSAyOwpjb25zdCBsb25nIEFM
R09fUEFTVEUJCT0gMzsKY29uc3QgbG9uZyBBTEdPX0xBU0VSCQk9IDQ7CmNvbnN0IGxvbmcgQUxH
T19GSURVCQk9IDU7CmNvbnN0IGxvbmcgQUxHT19WT0xVTUUJCT0gNjsKY29uc3QgbG9uZyBBTEdP
X09DUgkJPSA3Owpjb25zdCBsb25nIE5FVFdPUktFUgkJPSAyNTsJIApjb25zdCBsb25nIEFMR09f
U1BBUkUJCT0gMjY7CmNvbnN0IGxvbmcgUFBVU0NBTk5FUgkJPSAyNzsJIApjb25zdCBsb25nIERC
R0VOCQk9IDI4OwkgCmNvbnN0IGxvbmcgVFJBSU5FUgkJPSAyOTsJIApjb25zdCBsb25nIFJFUEFJ
UgkJPSAzMDsJIApjb25zdCBsb25nIE1BWF9LRVlTCQk9IDMxOwkgCgogCgoKCgpjb25zdCBpbnQg
QUxHT0RPTkUJCT0gIDA7CSAKY29uc3QgaW50IE5PQUxHTwkJPSAtMTsJIApjb25zdCBpbnQgQkFE
U05BUAkJPSAtMjsJIApjb25zdCBpbnQgSVYyU01BTEwJCT0gLTM7CSAKY29uc3QgaW50IEJBRFRI
UEFSQU0JCT0gLTQ7CSAKY29uc3QgaW50IEJBRFdJTkRPVwkJPSAtNTsJIAoKIAoKCmNvbnN0IGlu
dCBNYXhQaW5QZXJQYXJ0CQk9ICgyNTYgKiAzKTsKY29uc3QgaW50IGtNYXhQaW5QZXJQYXJ0CT0g
TWF4UGluUGVyUGFydDsKCiAKY29uc3Qgc2hvcnQga0NzZWdTeXNwYXJEb25lCT0gMHgwMTsgIApj
b25zdCBzaG9ydCBrRmx5aW5nU25hcHMJPSAweDAyOyAgCmNvbnN0IHNob3J0IGtGaXJzdEFydGlj
bGUJPSAweDA0OyAgCmNvbnN0IHNob3J0IGtTYXZlSXRlbVNuYXBzCT0gMHgwODsgIApjb25zdCBz
aG9ydCBrSGFzSG9zdFJ0YwkJPSAweDEwOyAgCmNvbnN0IHNob3J0IGtIYXNBdXRvTmV0d29ya2Vy
CT0gMHgyMDsJIAoKIAoKCmNvbnN0IGludCBrQ3NlZ0NoZWNrCQk9IDEgPDwgMDsKY29uc3QgaW50
IGtDc2VnQ3JlYXRlCQk9IDEgPDwgMTsKY29uc3QgaW50IGtDc2VnRW11bGF0aW9uCT0gMSA8PCAy
Owpjb25zdCBpbnQga0NzZWdSZXBhaXIJCT0gMSA8PCAzOwpjb25zdCBpbnQga0NzZWdNYXBGaXhl
ZAkJPSAxIDw8IDQ7Cgpjb25zdCBsb25nCWtDb21tc2VnCT0gMHg4MDAwMDA7CSAKY29uc3QgbG9u
ZwlrRm91ck1lZwk9IDRMICogMTAyNEwgKiAxMDI0TDsKY29uc3QgbG9uZwlrRWlnaHRNZWcJPSA4
TCAqIDEwMjRMICogMTAyNEw7CmNvbnN0IGxvbmcJa1NpeHRlZW5NZWcJPSAxNkwgKiAxMDI0TCAq
IDEwMjRMOwpjb25zdCBsb25nCWtIYXJkd2FyZVJlc2VydmVkID0gKGtTaXh0ZWVuTWVnIC0gMHhm
ZTAwMDApOwogCgoKY29uc3QgbG9uZwlrMzJNZWcJCT0gMzJMICogMTAyNEwgKiAxMDI0TDsKY29u
c3QgbG9uZwlrNjRNZWcJCT0gNjRMICogMTAyNEwgKiAxMDI0TDsKY29uc3QgbG9uZwlrMTI4TWVn
CQk9IDEyOEwgKiAxMDI0TCAqIDEwMjRMOwoKY29uc3QgbG9uZwlrQ29tbXNlZ1NpemUJPSBrRm91
ck1lZzsKIAoKCmNvbnN0IGxvbmcJa0RlYnVnRnJhbWVCdWZmZXJTaXplID0gKDY0MEwgKiA0ODBM
KTsKCiAKCgpjb25zdCBpbnQgTkRCRk5BTUUJCT0gMTI4Owpjb25zdCBpbnQgQUxJR05TSElGVAkJ
PSA4Owpjb25zdCBpbnQgTlNFUklBTAkJPSAxMjg7CmNvbnN0IGludCBORkxBVk9SCQk9IDMyOwkg
CmNvbnN0IGludCBOU1EJCQk9IDE2Owpjb25zdCBpbnQgTUFYU0JVRgkJPSA0OwkgCgogCgoKCgpj
b25zdCBpbnQga0ludGVsRmllbGRMZW5ndGggICA9IDEwMDsKCiAKCgpjb25zdCBpbnQga05vVmlk
ZW8JCT0gMDsKY29uc3QgaW50IEtNR0FCT0FSRAkJPSAxOwpjb25zdCBpbnQgS0dEQjNCT0FSRAkJ
PSAyOwoKIAoKCmNvbnN0IGludCBET19ISVNUCQk9IDE7CmNvbnN0IGludCBET19BVkcJCT0gMjsK
CiAKCgpjb25zdCBpbnQga1ZQQXJjaDQwCQk9IDQwOwpjb25zdCBpbnQga1ZQQXJjaDYwCQk9IDYw
Owpjb25zdCBpbnQga1ZQQXJjaElCQgkJPSAxOwoKIAoKCiAKY29uc3QgaW50IGtJdGVtU25hcFNp
emUgPSAyMDA7CgoKIAoKCgoKCmNvbnN0IHVfaW50IGtDYW1lcmFXaWR0aFNtYWxsCT0gNTEyOwpj
b25zdCB1X2ludCBrQ2FtZXJhV2lkdGhNZWRpdW0JPSA2NDA7CmNvbnN0IHVfaW50IGtDYW1lcmFX
aWR0aExhcmdlCT0gMTAwMDsKIAoKCmNvbnN0IHVfaW50IGtDYW1lcmFXaWR0aENhbWVyYUxpbmsg
PSAxMjgwOwoKY29uc3QgdV9pbnQga0NhbWVyYUhlaWdodE5vcm1hbAkJPSA0ODA7CmNvbnN0IHVf
aW50IGtDYW1lcmFIZWlnaHRMYXJnZQkJPSAxMDAwOwpjb25zdCB1X2ludCBrQ2FtZXJhSGVpZ2h0
Q2FtZXJhTGluawk9IDEwMjQ7CgojIDEzICIuLi8uLi9pbmNsdWRlL2xpYmluYy9saWJ1dGlsLmgi
IDIKCiMgMSAiLi4vLi4vaW5jbHVkZS9saWJpbmMvaXBjaGRyLmgiIDEKCgoKdHlwZWRlZiBzdHJ1
Y3QgY2hhbiB7CiAgICB1bnNpZ25lZCBzaG9ydCBjaF9kX21jaDo0LCBjaF9kX3N1Yjo0LCBjaF9k
X2NtZDo4LCBjaF9kX21zZzoxNjsKfSBDaGFuOwoKdHlwZWRlZiBzdHJ1Y3QgbmV0IHsKICAgIHVu
c2lnbmVkIHNob3J0IG5ldF9kX25ldGFkZHI6OCwgbmV0X2Rfdm1jaDo4LCBuZXRfeF9tc2c6MTY7
Cn0gTmV0OwoKdHlwZWRlZiB1bmlvbiBMb25nX2RhdGEgewogICAgQ2hhbiBjaGFuOwogICAgTmV0
ICBuZXQ7CiAgICBsb25nIGRhdGE7Cn0gTG9uZzsKCgoKCgoKCgoKIyAxNCAiLi4vLi4vaW5jbHVk
ZS9saWJpbmMvbGlidXRpbC5oIiAyCgoKCgoKIyAxICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGli
L3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJp
bmciIDEgMwogCgoKCgojIDEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
bGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAx
IDMKIAogCgogCiAKIAogCiAKCiAKIAogCiAKCiAKIAogCgogCiAKIAogCiAKCiAKIAoKCgoKCiNw
cmFnbWEgaW50ZXJmYWNlCgoKIyAxICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1
bi1zb2xhcmlzMi8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9jc3RkZGVmIiAxIDMK
IAogCgoKCiMgMSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIv
Mi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzQyICIvb3B0L212cGxvY2FsL2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMyA0Cgoj
IDYgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8u
Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2NzdGRkZWYiIDIgMwoKCiMgMzUgIi9vcHQvbXZwbG9j
YWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNs
dWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKCiMgMSAiL29wdC9tdnBsb2NhbC9saWIvZ2Nj
LWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv
c3RkL3N0cmFpdHMuaCIgMSAzCiAKIAoKIAogCiAKIAogCgogCiAKIAogCgogCiAKIAoKIAogCiAK
IAogCgogCiAKCgoKCgogCiNwcmFnbWEgaW50ZXJmYWNlICJzdGQvc3RyYWl0cy5oIgoKCgoKZXh0
ZXJuICJDKysiIHsKdGVtcGxhdGUgPGNsYXNzIGNoYXJUPgpzdHJ1Y3Qgc3RyaW5nX2NoYXJfdHJh
aXRzIHsKICB0eXBlZGVmIGNoYXJUIGNoYXJfdHlwZTsgIAoKICAgCgogIHN0YXRpYyB2b2lkIGFz
c2lnbiAoY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgYzEgPSBjMjsg
fQogIHN0YXRpYyBib29sIGVxIChjb25zdCBjaGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUm
IGMyKQogICAgeyByZXR1cm4gKGMxID09IGMyKTsgfQogIHN0YXRpYyBib29sIG5lIChjb25zdCBj
aGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUmIGMyKQogICAgeyByZXR1cm4gIShjMSA9PSBj
Mik7IH0KICBzdGF0aWMgYm9vbCBsdCAoY29uc3QgY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90
eXBlJiBjMikKICAgIHsgcmV0dXJuIChjMSA8IGMyKTsgfQogIHN0YXRpYyBjaGFyX3R5cGUgZW9z
ICgpIHsgcmV0dXJuIGNoYXJfdHlwZSgpOyB9ICAKICBzdGF0aWMgYm9vbCBpc19kZWwoY2hhcl90
eXBlIGEpIHsgcmV0dXJuIDA7IH0KICAgCiAgCiAgIAoKICBzdGF0aWMgaW50IGNvbXBhcmUgKGNv
bnN0IGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQogICAgewog
ICAgICBzaXplX3QgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkKCWlmIChuZSAoczFb
aV0sIHMyW2ldKSkKCSAgcmV0dXJuIGx0IChzMVtpXSwgczJbaV0pID8gLTEgOiAxOwoKICAgICAg
cmV0dXJuIDA7CiAgICB9CiAgICAKICBzdGF0aWMgc2l6ZV90IGxlbmd0aCAoY29uc3QgY2hhcl90
eXBlKiBzKQogICAgewogICAgICBzaXplX3QgbCA9IDA7CiAgICAgIHdoaWxlIChuZSAoKnMrKywg
ZW9zICgpKSkKCSsrbDsKICAgICAgcmV0dXJuIGw7CiAgICB9CgogIHN0YXRpYyBjaGFyX3R5cGUq
IGNvcHkgKGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQogICAg
ewogICAgICBmb3IgKDsgbi0tOyApCglhc3NpZ24gKHMxW25dLCBzMltuXSk7CiAgICAgIHJldHVy
biBzMTsKICAgIH0KCiAgc3RhdGljIGNoYXJfdHlwZSogbW92ZSAoY2hhcl90eXBlKiBzMSwgY29u
c3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pCiAgICB7CiAgICAgIGNoYXJfdHlwZSBhW25dOwog
ICAgICBzaXplX3QgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkKCWFzc2lnbiAoYVtp
XSwgczJbaV0pOwogICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQoJYXNzaWduIChzMVtpXSwg
YVtpXSk7CiAgICAgIHJldHVybiBzMTsKICAgIH0KCiAgc3RhdGljIGNoYXJfdHlwZSogc2V0IChj
aGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUmIGMsIHNpemVfdCBuKQogICAgewogICAgICBm
b3IgKDsgbi0tOyApCglhc3NpZ24gKHMxW25dLCBjKTsKICAgICAgcmV0dXJuIHMxOwogICAgfQp9
OwoKY2xhc3MgaXN0cmVhbTsKY2xhc3Mgb3N0cmVhbTsKIyAxICIvb3B0L212cGxvY2FsL2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst
My9jY3R5cGUiIDEgMwogCiAKCgoKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAzIDQKIAog
CgogCiAKIAoKIAoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKWN0eXBlLmgJMS4zMwk5OS8wOC8x
MCBTTUkiCQoKIyAxICIvdXNyL2luY2x1ZGUvaXNvL2N0eXBlX2lzby5oIiAxIDMgNAogCiAKCiAK
IAogCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKWN0eXBlX2lzby5o
CTEuMQk5OS8wOC8wOSBTTUkiIAoKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKZXh0ZXJuIGludCBpc2FsbnVtKGludCk7CmV4dGVybiBpbnQgaXNhbHBoYShpbnQp
OwpleHRlcm4gaW50IGlzY250cmwoaW50KTsKZXh0ZXJuIGludCBpc2RpZ2l0KGludCk7CmV4dGVy
biBpbnQgaXNncmFwaChpbnQpOwpleHRlcm4gaW50IGlzbG93ZXIoaW50KTsKZXh0ZXJuIGludCBp
c3ByaW50KGludCk7CmV4dGVybiBpbnQgaXNwdW5jdChpbnQpOwpleHRlcm4gaW50IGlzc3BhY2Uo
aW50KTsKZXh0ZXJuIGludCBpc3VwcGVyKGludCk7CmV4dGVybiBpbnQgaXN4ZGlnaXQoaW50KTsK
CgoKCgoKCmV4dGVybiBpbnQgdG9sb3dlcihpbnQpOwpleHRlcm4gaW50IHRvdXBwZXIoaW50KTsK
CgoKCgpleHRlcm4gdW5zaWduZWQgY2hhcglfX2N0eXBlW107CmV4dGVybiB1bnNpZ25lZCBpbnQJ
Kl9fY3R5cGVfbWFzazsKZXh0ZXJuIGludAkJKl9fdHJhbnNfdXBwZXI7CmV4dGVybiBpbnQJCSpf
X3RyYW5zX2xvd2VyOwoKCgojIDEyOSAiL3Vzci9pbmNsdWRlL2lzby9jdHlwZV9pc28uaCIgMyA0
CgoKIyAxNDQgIi91c3IvaW5jbHVkZS9pc28vY3R5cGVfaXNvLmgiIDMgNAoKCgoKCgoKCgoKCgoK
CgoKCgoKIyAxODMgIi91c3IvaW5jbHVkZS9pc28vY3R5cGVfaXNvLmgiIDMgNAoKCgp9CgoKCiMg
MTggIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMgNAoKCiAKCgoKIyAzOCAiL3Vzci9pbmNsdWRl
L2N0eXBlLmgiIDMgNAoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCmV4dGVybiBpbnQgaXNhc2NpaShp
bnQpOwpleHRlcm4gaW50IHRvYXNjaWkoaW50KTsKZXh0ZXJuIGludCBfdG9sb3dlcihpbnQpOwpl
eHRlcm4gaW50IF90b3VwcGVyKGludCk7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA4NyAiL3Vz
ci9pbmNsdWRlL2N0eXBlLmgiIDMgNAoKCgp9CgoKCiMgNiAiL29wdC9tdnBsb2NhbC9saWIvZ2Nj
LWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv
Y2N0eXBlIiAyIDMKCgojIDEwNSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t
c29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL3N0cmFpdHMuaCIg
MiAzCgojIDEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIu
OTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2NzdHJpbmciIDEgMwogCiAKCgoKCgoKIyA5
NCAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvY3N0cmluZyIgMwoKCgojIDEwNiAiL29wdC9tdnBsb2Nh
bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvc3RkL3N0cmFpdHMuaCIgMiAzCgoKc3RydWN0IHN0cmluZ19jaGFyX3RyYWl0cyA8
Y2hhcj4gewogIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7CgogIHN0YXRpYyB2b2lkIGFzc2lnbiAo
Y2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgYzEgPSBjMjsgfQogIHN0
YXRpYyBib29sIGVxIChjb25zdCBjaGFyX3R5cGUgJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikK
ICAgIHsgcmV0dXJuIChjMSA9PSBjMik7IH0KICBzdGF0aWMgYm9vbCBuZSAoY29uc3QgY2hhcl90
eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgcmV0dXJuIChjMSAhPSBjMik7IH0K
ICBzdGF0aWMgYm9vbCBsdCAoY29uc3QgY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBj
MikKICAgIHsgcmV0dXJuIChjMSA8IGMyKTsgfQogIHN0YXRpYyBjaGFyX3R5cGUgZW9zICgpIHsg
cmV0dXJuIDA7IH0KICBzdGF0aWMgYm9vbCBpc19kZWwoY2hhcl90eXBlIGEpIHsgcmV0dXJuICgo
X19jdHlwZSArIDEpWyBhIF0gJiAweDAwMDAwMDA4ICkgOyB9CgogIHN0YXRpYyBpbnQgY29tcGFy
ZSAoY29uc3QgY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pCiAg
ICB7IHJldHVybiBtZW1jbXAgKHMxLCBzMiwgbik7IH0KICBzdGF0aWMgc2l6ZV90IGxlbmd0aCAo
Y29uc3QgY2hhcl90eXBlKiBzKQogICAgeyByZXR1cm4gc3RybGVuIChzKTsgfQogIHN0YXRpYyBj
aGFyX3R5cGUqIGNvcHkgKGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVf
dCBuKQogICAgeyByZXR1cm4gKGNoYXJfdHlwZSopIG1lbWNweSAoczEsIHMyLCBuKTsgfQogIHN0
YXRpYyBjaGFyX3R5cGUqIG1vdmUgKGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSogczIs
IHNpemVfdCBuKQogICAgeyByZXR1cm4gKGNoYXJfdHlwZSopIG1lbW1vdmUgKHMxLCBzMiwgbik7
IH0KICBzdGF0aWMgY2hhcl90eXBlKiBzZXQgKGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlw
ZSYgYywgc2l6ZV90IG4pCiAgICB7IHJldHVybiAoY2hhcl90eXBlKikgbWVtc2V0IChzMSwgYywg
bik7IH0KfTsKCiMgMTU5ICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh
cmlzMi8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGQvc3RyYWl0cy5oIiAzCgp9
ICAKCiMgMzYgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIu
OTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKCgogCiMg
MSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvYWxsb2MuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCiMg
MSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2NvbmZpZy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCgogCiAKIAog
CiAKIAogCiAKIAogCiAKCgogCgogCiAKIAogCiAKIAogCgoKCgoKCgoKIyAxNDggIi9vcHQvbXZw
bG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIgMwoKCgojIDEgIi9vcHQvbXZwbG9jYWwvbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9zcGFyYy1zdW4tc29s
YXJpczIvaW5jbHVkZS9fR19jb25maWcuaCIgMSAzIDQKICAKCgoKCgoKCgoKdHlwZWRlZiAgICAg
ICAgICBpbnQgICBfR19pbnQ4X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19RSV9fKSkpOwp0
eXBlZGVmIHVuc2lnbmVkIGludCAgX0dfdWludDhfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhf
X1FJX18pKSk7CnR5cGVkZWYgICAgICAgICAgaW50ICBfR19pbnQxNl90IF9fYXR0cmlidXRlX18o
KF9fbW9kZV9fKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3QgX19h
dHRyaWJ1dGVfXygoX19tb2RlX18oX19ISV9fKSkpOwp0eXBlZGVmICAgICAgICAgIGludCAgX0df
aW50MzJfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWdu
ZWQgaW50IF9HX3VpbnQzMl90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fU0lfXykpKTsKdHlw
ZWRlZiAgICAgICAgICBpbnQgIF9HX2ludDY0X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19E
SV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50NjRfdCBfX2F0dHJpYnV0ZV9fKChf
X21vZGVfXyhfX0RJX18pKSk7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIF9HX2xs
b25nOwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9HX3VsbG9uZzsK
CgoKCgoKCgp0eXBlZGVmIGxvbmcgX0dfY2xvY2tfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9H
X2Rldl90Owp0eXBlZGVmIGxvbmcgX0dfZnBvc190Owp0eXBlZGVmIGxvbmcgX0dfZ2lkX3Q7CnR5
cGVkZWYgdW5zaWduZWQgbG9uZyBfR19pbm9fdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9HX21v
ZGVfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9HX25saW5rX3Q7CnR5cGVkZWYgbG9uZyBfR19v
ZmZfdDsKdHlwZWRlZiBsb25nIF9HX3BpZF90OwoKCgp0eXBlZGVmIGludCBfR19wdHJkaWZmX3Q7
CnR5cGVkZWYgaW50ICAgX0dfc2lnc2V0X3Q7CgoKCnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3Np
emVfdDsKdHlwZWRlZiBsb25nIF9HX3RpbWVfdDsKdHlwZWRlZiBsb25nIF9HX3VpZF90Owp0eXBl
ZGVmIGxvbmcgaW50IF9HX3djaGFyX3Q7CgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgaW50IF9HX3Nz
aXplX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3dpbnRfdDsKdHlwZWRlZiB2b2lkICogX0df
dmFfbGlzdDsKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIv
c3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAoKCgoKCgog
CgoKIyAxOSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45
NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvb3B0L212
cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvaW5jbHVkZS9zdGRk
ZWYuaCIgMyA0CgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCgojIDEy
NiAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zL2lu
Y2x1ZGUvc3RkZGVmLmgiIDMgNAoKCiAKCgoKCiAKCiAKCgoKIyAxODcgIi9vcHQvbXZwbG9jYWwv
bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAz
IDQKCgoKCgoKIAoKCgoKIAoKCgojIDI2OCAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoKCgoKCgoKCgoKCgoK
CgoKCiAKCiAKCiMgMzE3ICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh
cmlzMi8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CgoKCgogCgoKCgoKCgoKCgoKCgogCgoK
CgoKCgojIDg2ICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8y
Ljk1LjMvLi4vLi4vLi4vLi4vc3BhcmMtc3VuLXNvbGFyaXMyL2luY2x1ZGUvX0dfY29uZmlnLmgi
IDIgMyA0CgoKIyAxNTEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
aXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIgMiAzCgoK
CgoKCgoKCgoKCgoKCgoKIyAxNzggIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3Vu
LXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIg
MwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjM0ICIvb3B0L212cGxvY2FsL2xp
Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9n
KystMy9zdGxfY29uZmlnLmgiIDMKCgojIDI0OCAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9z
cGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2Nv
bmZpZy5oIiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiAKIAoKCgoK
CgoKCgoKCgoKCgoKCgogCiAKIyAzMTYgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMt
c3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcu
aCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKIAogCiMgMTggIi9v
cHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8u
Li8uLi9pbmNsdWRlL2crKy0zL2FsbG9jLmgiIDIgMwoKCgojIDEgIi9vcHQvbXZwbG9jYWwvbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr
Ky0zL3N0bF9hbGxvYy5oIiAxIDMKIAoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgog
CiAKIAogCiAKIAoKCgoKCiMgMSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t
c29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaW9zdHJlYW0uaCIgMSAz
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCiMgMSAiL29w
dC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4u
Ly4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCgogICAKCgoKZXh0ZXJuICJDIiB7CiMgMSAiL29wdC9t
dnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4u
L2luY2x1ZGUvZysrLTMvbGliaW8uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKIyA1NSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1z
dW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbGliaW8uaCIgMwoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgojIDEwNCAiL29wdC9tdnBsb2Nh
bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvbGliaW8uaCIgMwoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCnN0cnVjdCBfSU9fanVtcF90OyAgc3RydWN0IF9JT19GSUxF
OwoKIAojIDE3NSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIv
Mi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbGliaW8uaCIgMwoKCgoKCgoKCgogICAg
dHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoKCgoKIAoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0
cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwogICAKCiAg
IAogIGludCBfcG9zOwojIDIwOCAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t
c29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbGliaW8uaCIgMwoKfTsK
CnN0cnVjdCBfSU9fRklMRSB7CiAgaW50IF9mbGFnczsJCSAKCgogICAKICAgCiAgY2hhciogX0lP
X3JlYWRfcHRyOwkgCiAgY2hhciogX0lPX3JlYWRfZW5kOwkgCiAgY2hhciogX0lPX3JlYWRfYmFz
ZTsJIAogIGNoYXIqIF9JT193cml0ZV9iYXNlOwkgCiAgY2hhciogX0lPX3dyaXRlX3B0cjsJIAog
IGNoYXIqIF9JT193cml0ZV9lbmQ7CSAKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CSAKICBjaGFyKiBf
SU9fYnVmX2VuZDsJIAogICAKICBjaGFyICpfSU9fc2F2ZV9iYXNlOyAgCiAgY2hhciAqX0lPX2Jh
Y2t1cF9iYXNlOyAgIAogIGNoYXIgKl9JT19zYXZlX2VuZDsgIAoKICBzdHJ1Y3QgX0lPX21hcmtl
ciAqX21hcmtlcnM7CgogIHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsK
ICBpbnQgX2Jsa3NpemU7CgoKCiAgX0dfb2ZmX3QgIF9vZmZzZXQ7CgoKCiAgIAogIHVuc2lnbmVk
IHNob3J0IF9jdXJfY29sdW1uOwogIGNoYXIgX3VudXNlZDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsK
CiAgIAoKCgoKCgoKCn07CgoKCgoKCgoKCgoKc3RydWN0IF9JT19GSUxFX3BsdXM7CmV4dGVybiBz
dHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fc3RkaW5fLCBfSU9fc3Rkb3V0XywgX0lPX3N0ZGVycl87
CgoKCgoKIAp0eXBlZGVmIHN0cnVjdAp7CiAgX0dfc3NpemVfdCAgKCpyZWFkKSAgKHN0cnVjdCBf
SU9fRklMRSAqLCB2b2lkICosIF9HX3NzaXplX3QgKSAgOwogIF9HX3NzaXplX3QgICgqd3JpdGUp
ICAoc3RydWN0IF9JT19GSUxFICosIGNvbnN0IHZvaWQgKiwgX0dfc3NpemVfdCApICA7CiAgX0df
b2ZmX3QgICgqc2VlaykgIChzdHJ1Y3QgX0lPX0ZJTEUgKiwgX0dfb2ZmX3QgLCBpbnQpICA7CiAg
aW50ICgqY2xvc2UpICAoc3RydWN0IF9JT19GSUxFICopICA7Cn0gX0lPX2Nvb2tpZV9pb19mdW5j
dGlvbnNfdDsKCiAKc3RydWN0IF9JT19jb29raWVfZmlsZQp7CiAgc3RydWN0IF9JT19GSUxFIGZp
bGU7CiAgY29uc3Qgdm9pZCAqdnRhYmxlOwogIHZvaWQgKmNvb2tpZTsKICBfSU9fY29va2llX2lv
X2Z1bmN0aW9uc190IGlvX2Z1bmN0aW9uczsKfTsKCgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGlu
dCBfX3VuZGVyZmxvdyAgKF9JT19GSUxFICopICA7CmV4dGVybiBpbnQgX191ZmxvdyAgKF9JT19G
SUxFICopICA7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAgKF9JT19GSUxFICosIGludCkgIDsKCgoK
CgoKCgoKCgoKCgoKCgpleHRlcm4gaW50IF9JT19nZXRjICAoX0lPX0ZJTEUgKl9fZnApICA7CmV4
dGVybiBpbnQgX0lPX3B1dGMgIChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgIDsKZXh0ZXJuIGlu
dCBfSU9fZmVvZiAgKF9JT19GSUxFICpfX2ZwKSAgOwpleHRlcm4gaW50IF9JT19mZXJyb3IgIChf
SU9fRklMRSAqX19mcCkgIDsKCmV4dGVybiBpbnQgX0lPX3BlZWtjX2xvY2tlZCAgKF9JT19GSUxF
ICpfX2ZwKSAgOwoKIAoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlICAoX0lPX0ZJTEUgKikg
IDsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsKZXh0ZXJuIGlu
dCBfSU9fZnRyeWxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsKCgoKCgoKCgoKCgoKCmV4dGVybiBp
bnQgX0lPX3Zmc2NhbmYgIChfSU9fRklMRSAqLCBjb25zdCBjaGFyICosIF9HX3ZhX2xpc3QgLCBp
bnQgKikgIDsKZXh0ZXJuIGludCBfSU9fdmZwcmludGYgIChfSU9fRklMRSAqLCBjb25zdCBjaGFy
ICosIF9HX3ZhX2xpc3QgKSAgOwpleHRlcm4gX0dfc3NpemVfdCAgX0lPX3BhZG4gIChfSU9fRklM
RSAqLCBpbnQsIF9HX3NzaXplX3QgKSAgOwpleHRlcm4gX0dfc2l6ZV90ICBfSU9fc2dldG4gIChf
SU9fRklMRSAqLCB2b2lkICosIF9HX3NpemVfdCApICA7CgoKCgoKZXh0ZXJuIF9HX29mZl90ICBf
SU9fc2Vla29mZiAgKF9JT19GSUxFICosIF9HX29mZl90ICwgaW50LCBpbnQpICA7CmV4dGVybiBf
R19vZmZfdCAgX0lPX3NlZWtwb3MgIChfSU9fRklMRSAqLCBfR19vZmZfdCAsIGludCkgIDsKCgpl
eHRlcm4gdm9pZCBfSU9fZnJlZV9iYWNrdXBfYXJlYSAgKF9JT19GSUxFICopICA7CgoKfQoKCgoj
IDM2ICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMv
Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMiAzCgp9CiAKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gIkMrKyIgewpjbGFzcyBpc3RyZWFtOyAgCmNsYXNzIG9z
dHJlYW07IGNsYXNzIHN0cmVhbWJ1ZjsKCiAKCgoKCgoKCnR5cGVkZWYgX0dfb2ZmX3QgIHN0cmVh
bW9mZjsKdHlwZWRlZiBfR19vZmZfdCAgc3RyZWFtcG9zOwoKdHlwZWRlZiBfR19zc2l6ZV90ICBz
dHJlYW1zaXplOwoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fZm10ZmxhZ3M7CnR5cGVkZWYgdW5z
aWduZWQgY2hhciBfX2lvc3RhdGU7CgpzdHJ1Y3QgX2lvc19maWVsZHMKeyAgCiAgICBzdHJlYW1i
dWYgKl9zdHJidWY7CiAgICBvc3RyZWFtKiBfdGllOwogICAgaW50IF93aWR0aDsKICAgIF9fZm10
ZmxhZ3MgX2ZsYWdzOwogICAgc2hvcnQgIF9maWxsOwogICAgX19pb3N0YXRlIF9zdGF0ZTsKICAg
IF9faW9zdGF0ZSBfZXhjZXB0aW9uczsKICAgIGludCBfcHJlY2lzaW9uOwoKICAgIHZvaWQgKl9h
cnJheXM7ICAKfTsKCgoKCgoKCgoKCgoKCgoKIyAxMjQgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1s
aWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0
cmVhbWJ1Zi5oIiAzCgoKY2xhc3MgaW9zIDogcHVibGljIF9pb3NfZmllbGRzIHsKICBpb3MmIG9w
ZXJhdG9yPShpb3MmKTsgICAKICBpb3MgKGNvbnN0IGlvcyYpOyAgCiAgcHVibGljOgogICAgdHlw
ZWRlZiBfX2ZtdGZsYWdzIGZtdGZsYWdzOwogICAgdHlwZWRlZiBpbnQgaW9zdGF0ZTsKICAgIHR5
cGVkZWYgaW50IG9wZW5tb2RlOwogICAgdHlwZWRlZiBfR19zc2l6ZV90ICBzdHJlYW1zaXplOwog
ICAgZW51bSBpb19zdGF0ZSB7Cglnb29kYml0ID0gMCAsCgllb2ZiaXQgPSAxICwKCWZhaWxiaXQg
PSAyICwKCWJhZGJpdCA9IDQgIH07CiAgICBlbnVtIG9wZW5fbW9kZSB7CglpbiA9IDEgLAoJb3V0
ID0gMiAsCglhdGUgPSA0ICwKCWFwcCA9IDggLAoJdHJ1bmMgPSAxNiAsCglub2NyZWF0ZSA9IDMy
ICwKCW5vcmVwbGFjZSA9IDY0ICwKCWJpbiA9IDEyOCAsICAKCWJpbmFyeSA9IDEyOCAgfTsKICAg
IGVudW0gc2Vla19kaXIgeyBiZWcsIGN1ciwgZW5kfTsKICAgIHR5cGVkZWYgZW51bSBzZWVrX2Rp
ciBzZWVrZGlyOwogICAgIAogICAgZW51bSB7IHNraXB3cz0gMDEgLAoJICAgbGVmdD0gMDIgLCBy
aWdodD0gMDQgLCBpbnRlcm5hbD0gMDEwICwKCSAgIGRlYz0gMDIwICwgb2N0PSAwNDAgLCBoZXg9
IDAxMDAgLAoJICAgc2hvd2Jhc2U9IDAyMDAgLCBzaG93cG9pbnQ9IDA0MDAgLAoJICAgdXBwZXJj
YXNlPSAwMTAwMCAsIHNob3dwb3M9IDAyMDAwICwKCSAgIHNjaWVudGlmaWM9IDA0MDAwICwgZml4
ZWQ9IDAxMDAwMCAsCgkgICB1bml0YnVmPSAwMjAwMDAgLCBzdGRpbz0gMDQwMDAwIAoKCgoJICAg
fTsKICAgIGVudW0geyAgCgliYXNlZmllbGQ9ZGVjK29jdCtoZXgsCglmbG9hdGZpZWxkID0gc2Np
ZW50aWZpYytmaXhlZCwKCWFkanVzdGZpZWxkID0gbGVmdCtyaWdodCtpbnRlcm5hbAogICAgfTsK
CiMgMTc3ICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1
LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMwoKCiAgICBvc3RyZWFt
KiB0aWUoKSBjb25zdCB7IHJldHVybiBfdGllOyB9CiAgICBvc3RyZWFtKiB0aWUob3N0cmVhbSog
dmFsKSB7IG9zdHJlYW0qIHNhdmU9X3RpZTsgX3RpZT12YWw7IHJldHVybiBzYXZlOyB9CgogICAg
IAogICAgc2hvcnQgIGZpbGwoKSBjb25zdCB7IHJldHVybiBfZmlsbDsgfQogICAgc2hvcnQgIGZp
bGwoc2hvcnQgIG5ld2YpCgl7c2hvcnQgIG9sZGYgPSBfZmlsbDsgX2ZpbGwgPSBuZXdmOyByZXR1
cm4gb2xkZjt9CiAgICBmbXRmbGFncyBmbGFncygpIGNvbnN0IHsgcmV0dXJuIF9mbGFnczsgfQog
ICAgZm10ZmxhZ3MgZmxhZ3MoZm10ZmxhZ3MgbmV3X3ZhbCkgewoJZm10ZmxhZ3Mgb2xkX3ZhbCA9
IF9mbGFnczsgX2ZsYWdzID0gbmV3X3ZhbDsgcmV0dXJuIG9sZF92YWw7IH0KICAgIGludCBwcmVj
aXNpb24oKSBjb25zdCB7IHJldHVybiBfcHJlY2lzaW9uOyB9CiAgICBpbnQgcHJlY2lzaW9uKGlu
dCBuZXdwKSB7Cgl1bnNpZ25lZCBzaG9ydCBvbGRwID0gX3ByZWNpc2lvbjsgX3ByZWNpc2lvbiA9
ICh1bnNpZ25lZCBzaG9ydCluZXdwOwoJcmV0dXJuIG9sZHA7IH0KICAgIGZtdGZsYWdzIHNldGYo
Zm10ZmxhZ3MgdmFsKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdzIHw9IHZh
bDsgcmV0dXJuIG9sZGJpdHM7IH0KICAgIGZtdGZsYWdzIHNldGYoZm10ZmxhZ3MgdmFsLCBmbXRm
bGFncyBtYXNrKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdzID0gKF9mbGFn
cyAmIH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsgcmV0dXJuIG9sZGJpdHM7IH0KICAgIGZtdGZsYWdz
IHVuc2V0ZihmbXRmbGFncyBtYXNrKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2Zs
YWdzICY9IH5tYXNrOyByZXR1cm4gb2xkYml0czsgfQogICAgaW50IHdpZHRoKCkgY29uc3QgeyBy
ZXR1cm4gX3dpZHRoOyB9CiAgICBpbnQgd2lkdGgoaW50IHZhbCkgeyBpbnQgc2F2ZSA9IF93aWR0
aDsgX3dpZHRoID0gdmFsOyByZXR1cm4gc2F2ZTsgfQoKCgoKICAgIHZvaWQgX3Rocm93X2ZhaWx1
cmUoKSBjb25zdCB7IH0KCiAgICB2b2lkIGNsZWFyKGlvc3RhdGUgc3RhdGUgPSAwKSB7Cglfc3Rh
dGUgPSBfc3RyYnVmID8gc3RhdGUgOiBzdGF0ZXxiYWRiaXQ7CglpZiAoX3N0YXRlICYgX2V4Y2Vw
dGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KICAgIHZvaWQgc2V0KGlvc3RhdGUgZmxhZykgeyBf
c3RhdGUgfD0gZmxhZzsKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUo
KTsgfQogICAgdm9pZCBzZXRzdGF0ZShpb3N0YXRlIGZsYWcpIHsgX3N0YXRlIHw9IGZsYWc7ICAK
CWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQogICAgaW50IGdv
b2QoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgPT0gMDsgfQogICAgaW50IGVvZigpIGNvbnN0IHsg
cmV0dXJuIF9zdGF0ZSAmIGlvczo6ZW9mYml0OyB9CiAgICBpbnQgZmFpbCgpIGNvbnN0IHsgcmV0
dXJuIF9zdGF0ZSAmIChpb3M6OmJhZGJpdHxpb3M6OmZhaWxiaXQpOyB9CiAgICBpbnQgYmFkKCkg
Y29uc3QgeyByZXR1cm4gX3N0YXRlICYgaW9zOjpiYWRiaXQ7IH0KICAgIGlvc3RhdGUgcmRzdGF0
ZSgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZTsgfQogICAgb3BlcmF0b3Igdm9pZCooKSBjb25zdCB7
IHJldHVybiBmYWlsKCkgPyAodm9pZCopMCA6ICh2b2lkKikoLTEpOyB9CiAgICBpbnQgb3BlcmF0
b3IhKCkgY29uc3QgeyByZXR1cm4gZmFpbCgpOyB9CiAgICBpb3N0YXRlIGV4Y2VwdGlvbnMoKSBj
b25zdCB7IHJldHVybiBfZXhjZXB0aW9uczsgfQogICAgdm9pZCBleGNlcHRpb25zKGlvc3RhdGUg
ZW5hYmxlKSB7CglfZXhjZXB0aW9ucyA9IGVuYWJsZTsKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9u
cykgX3Rocm93X2ZhaWx1cmUoKTsgfQoKICAgIHN0cmVhbWJ1ZiogcmRidWYoKSBjb25zdCB7IHJl
dHVybiBfc3RyYnVmOyB9CiAgICBzdHJlYW1idWYqIHJkYnVmKHN0cmVhbWJ1ZiAqX3MpIHsKICAg
ICAgc3RyZWFtYnVmICpfb2xkID0gX3N0cmJ1ZjsgX3N0cmJ1ZiA9IF9zOyBjbGVhciAoKTsgcmV0
dXJuIF9vbGQ7IH0KCiAgICBzdGF0aWMgaW50IHN5bmNfd2l0aF9zdGRpbyhpbnQgb24pOwogICAg
c3RhdGljIHZvaWQgc3luY193aXRoX3N0ZGlvKCkgeyBzeW5jX3dpdGhfc3RkaW8oMSk7IH0KICAg
IHN0YXRpYyBmbXRmbGFncyBiaXRhbGxvYygpOwogICAgc3RhdGljIGludCB4YWxsb2MoKTsKICAg
IHZvaWQqJiBwd29yZChpbnQpOwogICAgdm9pZCogcHdvcmQoaW50KSBjb25zdDsKICAgIGxvbmcm
IGl3b3JkKGludCk7CiAgICBsb25nIGl3b3JkKGludCkgY29uc3Q7CgoKCgoKCgoKCiAgICAgCiAg
ICBjbGFzcyBJbml0IHsKICAgIHB1YmxpYzoKICAgICAgSW5pdCAoKSB7IH0KICAgIH07CgogIHBy
b3RlY3RlZDoKICAgIGlubGluZSBpb3Moc3RyZWFtYnVmKiBzYiA9IDAsIG9zdHJlYW0qIHRpZV90
byA9IDApOwogICAgaW5saW5lIHZpcnR1YWwgfmlvcygpOwogICAgaW5saW5lIHZvaWQgaW5pdChz
dHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWUgPSAwKTsKfTsKCgoKCnR5cGVkZWYgaW9zOjpzZWVr
X2RpciBfc2Vla19kaXI7CgoKIAogCiAKIAogCgogCiAKY2xhc3Mgc3RyZWFtbWFya2VyIDogcHJp
dmF0ZSBfSU9fbWFya2VyIHsKICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1idWY7CiAgICB2b2lkIHNl
dF9vZmZzZXQoaW50IG9mZnNldCkgeyBfcG9zID0gb2Zmc2V0OyB9CiAgcHVibGljOgogICAgc3Ry
ZWFtbWFya2VyKHN0cmVhbWJ1ZiAqc2IpOwogICAgfnN0cmVhbW1hcmtlcigpOwogICAgaW50IHNh
dmluZygpIHsgcmV0dXJuICAxOyB9CiAgICBpbnQgZGVsdGEoc3RyZWFtbWFya2VyJik7CiAgICBp
bnQgZGVsdGEoKTsKfTsKCnN0cnVjdCBzdHJlYW1idWYgOiBwdWJsaWMgX0lPX0ZJTEUgeyAgCiAg
ICBmcmllbmQgY2xhc3MgaW9zOwogICAgZnJpZW5kIGNsYXNzIGlzdHJlYW07CiAgICBmcmllbmQg
Y2xhc3Mgb3N0cmVhbTsKICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1tYXJrZXI7CiAgICBjb25zdCB2
b2lkIComX3Z0YWJsZSgpIHsgcmV0dXJuICooY29uc3Qgdm9pZCoqKSgoX0lPX0ZJTEUqKXRoaXMg
KyAxKTsgfQogIHByb3RlY3RlZDoKICAgIHN0YXRpYyBzdHJlYW1idWYqIF9saXN0X2FsbDsgIAog
ICAgX0lPX0ZJTEUqJiB4Y2hhaW4oKSB7IHJldHVybiBfY2hhaW47IH0KICAgIHZvaWQgX3VuX2xp
bmsoKTsKICAgIHZvaWQgX2xpbmtfaW4oKTsKICAgIGNoYXIqIGdwdHIoKSBjb25zdAogICAgICB7
IHJldHVybiBfZmxhZ3MgICYgMHgxMDAgID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX3B0cjsg
fQogICAgY2hhciogcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9wdHI7IH0KICAgIGNo
YXIqIGVncHRyKCkgY29uc3QKICAgICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/IF9JT19z
YXZlX2VuZCA6IF9JT19yZWFkX2VuZDsgfQogICAgY2hhciogZXBwdHIoKSBjb25zdCB7IHJldHVy
biBfSU9fd3JpdGVfZW5kOyB9CiAgICBjaGFyKiBwYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9JT193
cml0ZV9iYXNlOyB9CiAgICBjaGFyKiBlYmFjaygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9mbGFn
cyAgJiAweDEwMCAgPyBfSU9fc2F2ZV9iYXNlIDogX0lPX3JlYWRfYmFzZTt9CiAgICBjaGFyKiBi
YXNlKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1Zl9iYXNlOyB9CiAgICBjaGFyKiBlYnVmKCkgY29u
c3QgeyByZXR1cm4gX0lPX2J1Zl9lbmQ7IH0KICAgIGludCBibGVuKCkgY29uc3QgeyByZXR1cm4g
X0lPX2J1Zl9lbmQgLSBfSU9fYnVmX2Jhc2U7IH0KICAgIHZvaWQgeHB1dF9jaGFyKGNoYXIgYykg
eyAqX0lPX3dyaXRlX3B0cisrID0gYzsgfQogICAgaW50IHhmbGFncygpIHsgcmV0dXJuIF9mbGFn
cyA7IH0KICAgIGludCB4ZmxhZ3MoaW50IGYpIHtpbnQgZmwgPSBfZmxhZ3MgOyBfZmxhZ3MgID0g
ZjsgcmV0dXJuIGZsO30KICAgIHZvaWQgeHNldGZsYWdzKGludCBmKSB7IF9mbGFncyAgfD0gZjsg
fQogICAgdm9pZCB4c2V0ZmxhZ3MoaW50IGYsIGludCBtYXNrKQogICAgICB7IF9mbGFncyAgPSAo
X2ZsYWdzICAmIH5tYXNrKSB8IChmICYgbWFzayk7IH0KICAgIHZvaWQgZ2J1bXAoaW50IG4pCiAg
ICAgIHsgX2ZsYWdzICAmIDB4MTAwICA/IChfSU9fc2F2ZV9iYXNlKz1uKTooX0lPX3JlYWRfcHRy
Kz1uKTt9CiAgICB2b2lkIHBidW1wKGludCBuKSB7IF9JT193cml0ZV9wdHIgKz0gbjsgfQogICAg
dm9pZCBzZXRiKGNoYXIqIGIsIGNoYXIqIGViLCBpbnQgYT0wKTsKICAgIHZvaWQgc2V0cChjaGFy
KiBwLCBjaGFyKiBlcCkKICAgICAgeyBfSU9fd3JpdGVfYmFzZT1fSU9fd3JpdGVfcHRyPXA7IF9J
T193cml0ZV9lbmQ9ZXA7IH0KICAgIHZvaWQgc2V0ZyhjaGFyKiBlYiwgY2hhciogZywgY2hhciAq
ZWcpIHsKICAgICAgaWYgKF9mbGFncyAgJiAweDEwMCApIF9JT19mcmVlX2JhY2t1cF9hcmVhKHRo
aXMpOyAKICAgICAgX0lPX3JlYWRfYmFzZSA9IGViOyBfSU9fcmVhZF9wdHIgPSBnOyBfSU9fcmVh
ZF9lbmQgPSBlZzsgfQogICAgY2hhciAqc2hvcnRidWYoKSB7IHJldHVybiBfc2hvcnRidWY7IH0K
CiAgICBpbnQgaW5fYmFja3VwKCkgeyByZXR1cm4gX2ZsYWdzICYgMHgxMDAgOyB9CiAgICAgCiAg
ICBjaGFyICpHYmFzZSgpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3NhdmVfYmFzZSA6IF9J
T19yZWFkX2Jhc2U7IH0KICAgICAKICAgIGNoYXIgKmVHcHRyKCkgeyByZXR1cm4gaW5fYmFja3Vw
KCkgPyBfSU9fc2F2ZV9lbmQgOiBfSU9fcmVhZF9lbmQ7IH0KICAgICAKICAgIGNoYXIgKkJiYXNl
KCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9fcmVhZF9iYXNlIDogX0lPX3NhdmVfYmFzZTsg
fQogICAgY2hhciAqQnB0cigpIHsgcmV0dXJuIF9JT19iYWNrdXBfYmFzZTsgfQogICAgIAogICAg
Y2hhciAqZUJwdHIoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19yZWFkX2VuZCA6IF9JT19z
YXZlX2VuZDsgfQogICAgY2hhciAqTmJhc2UoKSB7IHJldHVybiBfSU9fc2F2ZV9iYXNlOyB9CiAg
ICBjaGFyICplTnB0cigpIHsgcmV0dXJuIF9JT19zYXZlX2VuZDsgfQogICAgaW50IGhhdmVfYmFj
a3VwKCkgeyByZXR1cm4gX0lPX3NhdmVfYmFzZSAhPSBfX251bGwgOyB9CiAgICBpbnQgaGF2ZV9t
YXJrZXJzKCkgeyByZXR1cm4gX21hcmtlcnMgIT0gX19udWxsIDsgfQogICAgdm9pZCBmcmVlX2Jh
Y2t1cF9hcmVhKCk7CiAgICB2b2lkIHVuc2F2ZV9tYXJrZXJzKCk7ICAKICAgIGludCBwdXRfbW9k
ZSgpIHsgcmV0dXJuIF9mbGFncyAmIDB4ODAwIDsgfQogICAgaW50IHN3aXRjaF90b19nZXRfbW9k
ZSgpOwogICAgCiAgICBzdHJlYW1idWYoaW50IGZsYWdzPTApOwogIHB1YmxpYzoKICAgIHN0YXRp
YyBpbnQgZmx1c2hfYWxsKCk7CiAgICBzdGF0aWMgdm9pZCBmbHVzaF9hbGxfbGluZWJ1ZmZlcmVk
KCk7ICAKICAgIHZpcnR1YWwgfnN0cmVhbWJ1ZigpOwogICAgdmlydHVhbCBpbnQgb3ZlcmZsb3co
aW50IGMgPSAoLTEpICk7ICAKICAgIHZpcnR1YWwgaW50IHVuZGVyZmxvdygpOyAgCiAgICB2aXJ0
dWFsIGludCB1ZmxvdygpOyAgCiAgICB2aXJ0dWFsIGludCBwYmFja2ZhaWwoaW50IGMpOwogCiAg
ICB2aXJ0dWFsIHN0cmVhbXNpemUgeHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbik7
CiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgeHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAg
ICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9k
ZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtwb3Moc3RyZWFt
cG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KTsKCiAgICBzdHJlYW1wb3MgcHVi
c2Vla29mZihzdHJlYW1vZmYgbywgX3NlZWtfZGlyIGQsIGludCBtb2RlPWlvczo6aW58aW9zOjpv
dXQpCiAgICAgIHsgcmV0dXJuIF9JT19zZWVrb2ZmICh0aGlzLCBvLCBkLCBtb2RlKTsgfQogICAg
c3RyZWFtcG9zIHB1YnNlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlv
czo6b3V0KQogICAgICB7IHJldHVybiBfSU9fc2Vla3BvcyAodGhpcywgcG9zLCBtb2RlKTsgfQog
ICAgc3RyZWFtcG9zIHNzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6
OmlufGlvczo6b3V0KTsKICAgIHN0cmVhbXBvcyBzc2Vla3BvcyhzdHJlYW1wb3MgcG9zLCBpbnQg
bW9kZSA9IGlvczo6aW58aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1idWYqIHNldGJ1Zihj
aGFyKiBwLCBpbnQgbGVuKTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICAgIHZpcnR1YWwgaW50
IGRvYWxsb2NhdGUoKTsKCiAgICBpbnQgc2Vla21hcmsoc3RyZWFtbWFya2VyJiBtYXJrLCBpbnQg
ZGVsdGEgPSAwKTsKICAgIGludCBzcHV0YmFja2MoY2hhciBjKTsKICAgIGludCBzdW5nZXRjKCk7
CiAgICBpbnQgdW5idWZmZXJlZCgpIHsgcmV0dXJuIF9mbGFncyAmIDIgID8gMSA6IDA7IH0KICAg
IGludCBsaW5lYnVmZmVyZWQoKSB7IHJldHVybiBfZmxhZ3MgJiAweDIwMCAgPyAxIDogMDsgfQog
ICAgdm9pZCB1bmJ1ZmZlcmVkKGludCBpKQoJeyBpZiAoaSkgX2ZsYWdzIHw9IDIgOyBlbHNlIF9m
bGFncyAmPSB+MiA7IH0KICAgIHZvaWQgbGluZWJ1ZmZlcmVkKGludCBpKQoJeyBpZiAoaSkgX2Zs
YWdzIHw9IDB4MjAwIDsgZWxzZSBfZmxhZ3MgJj0gfjB4MjAwIDsgfQogICAgaW50IGFsbG9jYXRl
KCkgeyAgCglpZiAoYmFzZSgpIHx8IHVuYnVmZmVyZWQoKSkgcmV0dXJuIDA7CgllbHNlIHJldHVy
biBkb2FsbG9jYXRlKCk7IH0KICAgICAKICAgIHZvaWQgYWxsb2NidWYoKSB7IGlmIChiYXNlKCkg
PT0gX19udWxsICkgZG9hbGxvY2J1ZigpOyB9CiAgICB2b2lkIGRvYWxsb2NidWYoKTsKICAgIGlu
dCBpbl9hdmFpbCgpIHsgcmV0dXJuIF9JT19yZWFkX2VuZCAtIF9JT19yZWFkX3B0cjsgfQogICAg
aW50IG91dF93YWl0aW5nKCkgeyByZXR1cm4gX0lPX3dyaXRlX3B0ciAtIF9JT193cml0ZV9iYXNl
OyB9CiAgICBzdHJlYW1zaXplIHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbikgeyBy
ZXR1cm4geHNwdXRuKHMsIG4pOyB9CiAgICBzdHJlYW1zaXplIHBhZG4oY2hhciBwYWQsIHN0cmVh
bXNpemUgbikgeyByZXR1cm4gX0lPX3BhZG4odGhpcywgcGFkLCBuKTsgfQogICAgc3RyZWFtc2l6
ZSBzZ2V0bihjaGFyKiBzLCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIF9JT19zZ2V0bih0aGlzLCBz
LCBuKTsgfQogICAgaW50IGlnbm9yZShpbnQpOwogICAgaW50IGdldF9jb2x1bW4oKTsKICAgIGlu
dCBzZXRfY29sdW1uKGludCk7CiAgICBsb25nIHNnZXRsaW5lKGNoYXIqIGJ1ZiwgX0dfc2l6ZV90
ICBuLCBjaGFyIGRlbGltLCBpbnQgcHV0YmFja19kZWxpbSk7CiAgICBpbnQgc3B1dGMoaW50IGMp
IHsgcmV0dXJuIF9JT19wdXRjKGMsIHRoaXMpOyB9CiAgICBpbnQgc2J1bXBjKCkgeyByZXR1cm4g
X0lPX2dldGModGhpcyk7IH0KICAgIGludCBzZ2V0YygpIHsgcmV0dXJuICgoICB0aGlzICApLT5f
SU9fcmVhZF9wdHIgPj0gKCAgdGhpcyAgKS0+X0lPX3JlYWRfZW5kICYmIF9fdW5kZXJmbG93ICgg
IHRoaXMgICkgPT0gKC0xKSAgPyAoLTEpICA6ICoodW5zaWduZWQgY2hhciAqKSAoICB0aGlzICAp
LT5fSU9fcmVhZF9wdHIpICA7IH0KICAgIGludCBzbmV4dGMoKSB7CglpZiAoX0lPX3JlYWRfcHRy
ID49IF9JT19yZWFkX2VuZCAmJiBfX3VuZGVyZmxvdyh0aGlzKSA9PSAoLTEpICkKCSAgcmV0dXJu
ICgtMSkgOwoJZWxzZSByZXR1cm4gX0lPX3JlYWRfcHRyKyssIHNnZXRjKCk7IH0KICAgIHZvaWQg
c3Rvc3NjKCkgeyBpZiAoX0lPX3JlYWRfcHRyIDwgX0lPX3JlYWRfZW5kKSBfSU9fcmVhZF9wdHIr
KzsgfQogICAgaW50IHZzY2FuKGNoYXIgY29uc3QgKmZtdDAsIF9HX3ZhX2xpc3QgIGFwLCBpb3Mq
IHN0cmVhbSA9IF9fbnVsbCApOwogICAgaW50IHNjYW4oY2hhciBjb25zdCAqZm10MCAuLi4pOwog
ICAgaW50IHZmb3JtKGNoYXIgY29uc3QgKmZtdDAsIF9HX3ZhX2xpc3QgIGFwKTsKICAgIGludCBm
b3JtKGNoYXIgY29uc3QgKmZtdDAgLi4uKTsKCgoKCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lz
X3JlYWQoY2hhciogYnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1zaXpl
IHN5c193cml0ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVhbXBv
cyBzeXNfc2VlayhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICB2aXJ0dWFsIGludCBzeXNfY2xv
c2UoKTsKICAgIHZpcnR1YWwgaW50IHN5c19zdGF0KHZvaWQqKTsgIAoKCgoKfTsKCiAKIAoKY2xh
c3MgZmlsZWJ1ZiA6IHB1YmxpYyBzdHJlYW1idWYgewogIHByb3RlY3RlZDoKICAgIHZvaWQgaW5p
dCgpOwogIHB1YmxpYzoKICAgIHN0YXRpYyBjb25zdCBpbnQgb3BlbnByb3Q7ICAKICAgIGZpbGVi
dWYoKTsKICAgIGZpbGVidWYoaW50IGZkKTsKICAgIGZpbGVidWYoaW50IGZkLCBjaGFyKiBwLCBp
bnQgbGVuKTsKCgoKICAgIH5maWxlYnVmKCk7CiAgICBmaWxlYnVmKiBhdHRhY2goaW50IGZkKTsK
ICAgIGZpbGVidWYqIG9wZW4oY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUp
OwogICAgZmlsZWJ1Ziogb3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwgaW9zOjpvcGVubW9kZSBt
b2RlLCBpbnQgcHJvdCA9IDA2NjQpOwogICAgdmlydHVhbCBpbnQgdW5kZXJmbG93KCk7CiAgICB2
aXJ0dWFsIGludCBvdmVyZmxvdyhpbnQgYyA9ICgtMSkgKTsKICAgIGludCBpc19vcGVuKCkgY29u
c3QgeyByZXR1cm4gX2ZpbGVubyA+PSAwOyB9CiAgICBpbnQgZmQoKSBjb25zdCB7IHJldHVybiBp
c19vcGVuKCkgPyBfZmlsZW5vIDogKC0xKSA7IH0KICAgIGZpbGVidWYqIGNsb3NlKCk7CiAgICB2
aXJ0dWFsIGludCBkb2FsbG9jYXRlKCk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0
cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1
YWwgc3RyZWFtYnVmKiBzZXRidWYoY2hhciogcCwgaW50IGxlbik7CiAgICBzdHJlYW1zaXplIHhz
cHV0bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgc3RyZWFtc2l6ZSB4c2dldG4o
Y2hhciogcywgc3RyZWFtc2l6ZSBuKTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICBwcm90ZWN0
ZWQ6ICAKIAogICAgaW50IGlzX3JlYWRpbmcoKSB7IHJldHVybiBlYmFjaygpICE9IGVncHRyKCk7
IH0KICAgIGNoYXIqIGN1cl9wdHIoKSB7IHJldHVybiBpc19yZWFkaW5nKCkgPyAgZ3B0cigpIDog
cHB0cigpOyB9CiAgICAgCiAgICBjaGFyKiBmaWxlX3B0cigpIHsgcmV0dXJuIGVHcHRyKCk7IH0K
ICAgICAKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfcmVhZChjaGFyKiBidWYsIHN0cmVhbXNp
emUgc2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzeXNfc2VlayhzdHJlYW1vZmYsIF9zZWVr
X2Rpcik7CiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3dyaXRlKGNvbnN0IGNoYXIqLCBzdHJl
YW1zaXplKTsKICAgIHZpcnR1YWwgaW50IHN5c19zdGF0KHZvaWQqKTsgIAogICAgdmlydHVhbCBp
bnQgc3lzX2Nsb3NlKCk7CgoKCgp9OwoKaW5saW5lIHZvaWQgaW9zOjppbml0KHN0cmVhbWJ1Ziog
c2IsIG9zdHJlYW0qIHRpZV90bykgewoJCV9zdGF0ZSA9IHNiID8gaW9zOjpnb29kYml0IDogaW9z
OjpiYWRiaXQ7IF9leGNlcHRpb25zPTA7CgkJX3N0cmJ1Zj1zYjsgX3RpZSA9IHRpZV90bzsgX3dp
ZHRoPTA7IF9maWxsPScgJzsKCgkJX2ZsYWdzPWlvczo6c2tpcHdzfGlvczo6ZGVjOwoKCgoJCV9w
cmVjaXNpb249NjsgX2FycmF5cyA9IDA7IH0KCmlubGluZSBpb3M6OmlvcyhzdHJlYW1idWYqIHNi
LCBvc3RyZWFtKiB0aWVfdG8pIHsgaW5pdChzYiwgdGllX3RvKTsgfQoKaW5saW5lIGlvczo6fmlv
cygpIHsKCgoKICAgICAKICAgICAKICAgIG9wZXJhdG9yIGRlbGV0ZVtdIChfYXJyYXlzKTsKfQp9
ICAKCiMgMzEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIu
OTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2lvc3RyZWFtLmgiIDIgMwoKCmV4dGVybiAi
QysrIiB7CmNsYXNzIGlzdHJlYW07IGNsYXNzIG9zdHJlYW07CnR5cGVkZWYgaW9zJiAoKl9fbWFu
aXApKGlvcyYpOwp0eXBlZGVmIGlzdHJlYW0mICgqX19pbWFuaXApKGlzdHJlYW0mKTsKdHlwZWRl
ZiBvc3RyZWFtJiAoKl9fb21hbmlwKShvc3RyZWFtJik7CgpleHRlcm4gaXN0cmVhbSYgd3MoaXN0
cmVhbSYgaW5zKTsKZXh0ZXJuIG9zdHJlYW0mIGZsdXNoKG9zdHJlYW0mIG91dHMpOwpleHRlcm4g
b3N0cmVhbSYgZW5kbChvc3RyZWFtJiBvdXRzKTsKZXh0ZXJuIG9zdHJlYW0mIGVuZHMob3N0cmVh
bSYgb3V0cyk7CgpjbGFzcyBvc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgaW9zCnsKICAgICAKICAg
IHZvaWQgZG9fb3NmeCgpOwogIHB1YmxpYzoKICAgIG9zdHJlYW0oKSB7IH0KICAgIG9zdHJlYW0o
c3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllZD0gX19udWxsICk7CiAgICBpbnQgb3BmeCgpIHsK
CWlmICghZ29vZCgpKSByZXR1cm4gMDsKCWVsc2UgeyBpZiAoX3RpZSkgX3RpZS0+Zmx1c2goKTsg
IDsgcmV0dXJuIDE7fSB9CiAgICB2b2lkIG9zZngoKSB7ICA7CgkJICBpZiAoZmxhZ3MoKSAmIChp
b3M6OnVuaXRidWZ8aW9zOjpzdGRpbykpCgkJICAgICAgZG9fb3NmeCgpOyB9CiAgICBvc3RyZWFt
JiBmbHVzaCgpOwogICAgb3N0cmVhbSYgcHV0KGNoYXIgYykgeyBfc3RyYnVmLT5zcHV0YyhjKTsg
cmV0dXJuICp0aGlzOyB9CgoKCgoKICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IGNoYXIgKnMsIHN0
cmVhbXNpemUgbik7CiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCB1bnNpZ25lZCBjaGFyICpzLCBz
dHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFyKilzLCBuKTt9CiAg
ICBvc3RyZWFtJiB3cml0ZShjb25zdCBzaWduZWQgY2hhciAqcywgc3RyZWFtc2l6ZSBuKQogICAg
ICB7IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0cmVhbSYgd3JpdGUo
Y29uc3Qgdm9pZCAqcywgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiB3cml0ZSgoY29uc3Qg
Y2hhciopcywgbik7fQogICAgb3N0cmVhbSYgc2Vla3Aoc3RyZWFtcG9zKTsKICAgIG9zdHJlYW0m
IHNlZWtwKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsKICAgIHN0cmVhbXBvcyB0ZWxscCgpOwogICAg
b3N0cmVhbSYgZm9ybShjb25zdCBjaGFyICpmb3JtYXQgLi4uKTsKICAgIG9zdHJlYW0mIHZmb3Jt
KGNvbnN0IGNoYXIgKmZvcm1hdCwgX0dfdmFfbGlzdCAgYXJncyk7CgogICAgb3N0cmVhbSYgb3Bl
cmF0b3I8PChjaGFyIGMpOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBjaGFyIGMp
IHsgcmV0dXJuICgqdGhpcykgPDwgKGNoYXIpYzsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChz
aWduZWQgY2hhciBjKSB7IHJldHVybiAoKnRoaXMpIDw8IChjaGFyKWM7IH0KICAgIG9zdHJlYW0m
IG9wZXJhdG9yPDwoY29uc3QgY2hhciAqcyk7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0
IHVuc2lnbmVkIGNoYXIgKnMpCgl7IHJldHVybiAoKnRoaXMpIDw8IChjb25zdCBjaGFyKilzOyB9
CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IHNpZ25lZCBjaGFyICpzKQoJeyByZXR1cm4g
KCp0aGlzKSA8PCAoY29uc3QgY2hhciopczsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25z
dCB2b2lkICpwKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoaW50IG4pOwogICAgb3N0cmVhbSYg
b3BlcmF0b3I8PCh1bnNpZ25lZCBpbnQgbik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcg
bik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbik7CgogICAgX19leHRl
bnNpb25fXyBvc3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcgbG9uZyBuKTsKICAgIF9fZXh0ZW5zaW9u
X18gb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIGxvbmcgbik7CgogICAgb3N0cmVh
bSYgb3BlcmF0b3I8PChzaG9ydCBuKSB7cmV0dXJuIG9wZXJhdG9yPDwoKGludCluKTt9CiAgICBv
c3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IG4pIHtyZXR1cm4gb3BlcmF0b3I8PCgo
dW5zaWduZWQgaW50KW4pO30KCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGJvb2wgYikgeyByZXR1
cm4gb3BlcmF0b3I8PCgoaW50KWIpOyB9CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChkb3VibGUg
bik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGZsb2F0IG4pIHsgcmV0dXJuIG9wZXJhdG9yPDwo
KGRvdWJsZSluKTsgfQoKCgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChsb25nIGRvdWJsZSBuKSB7
IHJldHVybiBvcGVyYXRvcjw8KChkb3VibGUpbik7IH0KCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8
KF9fb21hbmlwIGZ1bmMpIHsgcmV0dXJuICgqZnVuYykoKnRoaXMpOyB9CiAgICBvc3RyZWFtJiBv
cGVyYXRvcjw8KF9fbWFuaXAgZnVuYykgeygqZnVuYykoKnRoaXMpOyByZXR1cm4gKnRoaXM7fQog
ICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzdHJlYW1idWYqKTsKCgoKfTsKCmNsYXNzIGlzdHJlYW0g
OiB2aXJ0dWFsIHB1YmxpYyBpb3MKewogICAgIApwcm90ZWN0ZWQ6CiAgICBfR19zaXplX3QgIF9n
Y291bnQ7CgogICAgaW50IF9za2lwX3dzKCk7CiAgcHVibGljOgogICAgaXN0cmVhbSgpOiBfZ2Nv
dW50ICgwKSB7IH0KICAgIGlzdHJlYW0oc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSp0aWVkPSBfX251
bGwgKTsKICAgIGlzdHJlYW0mIGdldChjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAn
XG4nKTsKICAgIGlzdHJlYW0mIGdldCh1bnNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIg
ZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0KChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAg
ICBpc3RyZWFtJiBnZXQoY2hhciYgYyk7CiAgICBpc3RyZWFtJiBnZXQodW5zaWduZWQgY2hhciYg
YykgeyByZXR1cm4gZ2V0KChjaGFyJiljKTsgfQogICAgaXN0cmVhbSYgZ2V0bGluZShjaGFyKiBw
dHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlzdHJlYW0mIGdldGxpbmUodW5z
aWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJykKCXsgcmV0dXJuIGdl
dGxpbmUoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0KICAgIGlzdHJlYW0mIGdldChzaWduZWQg
Y2hhciYgYykgIHsgcmV0dXJuIGdldCgoY2hhciYpYyk7IH0KICAgIGlzdHJlYW0mIGdldChzaWdu
ZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJykKCXsgcmV0dXJuIGdldCgo
Y2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgZ2V0bGluZShzaWduZWQgY2hh
ciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJykKCXsgcmV0dXJuIGdldGxpbmUoKGNo
YXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0KICAgIGlzdHJlYW0mIHJlYWQoY2hhciAqcHRyLCBzdHJl
YW1zaXplIG4pOwogICAgaXN0cmVhbSYgcmVhZCh1bnNpZ25lZCBjaGFyICpwdHIsIHN0cmVhbXNp
emUgbikKICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYg
cmVhZChzaWduZWQgY2hhciAqcHRyLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHJlYWQo
KGNoYXIqKXB0ciwgbik7IH0KICAgIGlzdHJlYW0mIHJlYWQodm9pZCAqcHRyLCBzdHJlYW1zaXpl
IG4pCiAgICAgIHsgcmV0dXJuIHJlYWQoKGNoYXIqKXB0ciwgbik7IH0KICAgIGlzdHJlYW0mIGdl
dChzdHJlYW1idWYmIHNiLCBjaGFyIGRlbGltID0gJ1xuJyk7CiAgICBpc3RyZWFtJiBnZXRzKGNo
YXIgKipzLCBjaGFyIGRlbGltID0gJ1xuJyk7CiAgICBpbnQgaXBmeChpbnQgbmVlZCA9IDApIHsK
CWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyByZXR1cm4gMDsgfQoJZWxzZSB7Cgkg
ICA7CgkgIGlmIChfdGllICYmIChuZWVkID09IDAgfHwgcmRidWYoKS0+aW5fYXZhaWwoKSA8IG5l
ZWQpKSBfdGllLT5mbHVzaCgpOwoJICBpZiAoIW5lZWQgJiYgKGZsYWdzKCkgJiBpb3M6OnNraXB3
cykpIHJldHVybiBfc2tpcF93cygpOwoJICBlbHNlIHJldHVybiAxOwoJfQogICAgfQogICAgaW50
IGlwZngwKCkgeyAgCglpZiAoIWdvb2QoKSkgeyBzZXQoaW9zOjpmYWlsYml0KTsgcmV0dXJuIDA7
IH0KCWVsc2UgewoJICAgOwoJICBpZiAoX3RpZSkgX3RpZS0+Zmx1c2goKTsKCSAgaWYgKGZsYWdz
KCkgJiBpb3M6OnNraXB3cykgcmV0dXJuIF9za2lwX3dzKCk7CgkgIGVsc2UgcmV0dXJuIDE7Cgl9
CiAgICB9CiAgICBpbnQgaXBmeDEoKSB7ICAKCWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxi
aXQpOyByZXR1cm4gMDsgfQoJZWxzZSB7CgkgICA7CgkgIGlmIChfdGllICYmIHJkYnVmKCktPmlu
X2F2YWlsKCkgPT0gMCkgX3RpZS0+Zmx1c2goKTsKCSAgcmV0dXJuIDE7Cgl9CiAgICB9CiAgICB2
b2lkIGlzZngoKSB7ICA7IH0KICAgIGludCBnZXQoKSB7IGlmICghaXBmeDEoKSkgcmV0dXJuICgt
MSkgOwoJCWVsc2UgeyBpbnQgY2ggPSBfc3RyYnVmLT5zYnVtcGMoKTsKCQkgICAgICAgaWYgKGNo
ID09ICgtMSkgKSBzZXQoaW9zOjplb2ZiaXQpOwoJCSAgICAgICBpc2Z4KCk7CgkJICAgICAgIHJl
dHVybiBjaDsKCQkgICAgIH0gfQogICAgaW50IHBlZWsoKTsKICAgIF9HX3NpemVfdCAgZ2NvdW50
KCkgeyByZXR1cm4gX2djb3VudDsgfQogICAgaXN0cmVhbSYgaWdub3JlKGludCBuPTEsIGludCBk
ZWxpbSA9ICgtMSkgKTsKICAgIGludCBzeW5jICgpOwogICAgaXN0cmVhbSYgc2Vla2coc3RyZWFt
cG9zKTsKICAgIGlzdHJlYW0mIHNlZWtnKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsKICAgIHN0cmVh
bXBvcyB0ZWxsZygpOwogICAgaXN0cmVhbSYgcHV0YmFjayhjaGFyIGNoKSB7CglpZiAoZ29vZCgp
ICYmIF9zdHJidWYtPnNwdXRiYWNrYyhjaCkgPT0gKC0xKSApIGNsZWFyKGlvczo6YmFkYml0KTsK
CXJldHVybiAqdGhpczt9CiAgICBpc3RyZWFtJiB1bmdldCgpIHsKCWlmIChnb29kKCkgJiYgX3N0
cmJ1Zi0+c3VuZ2V0YygpID09ICgtMSkgKSBjbGVhcihpb3M6OmJhZGJpdCk7CglyZXR1cm4gKnRo
aXM7fQogICAgaXN0cmVhbSYgc2Nhbihjb25zdCBjaGFyICpmb3JtYXQgLi4uKTsKICAgIGlzdHJl
YW0mIHZzY2FuKGNvbnN0IGNoYXIgKmZvcm1hdCwgX0dfdmFfbGlzdCAgYXJncyk7CgoKCgoKCiAg
ICBpc3RyZWFtJiBvcGVyYXRvcj4+KGNoYXIqKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5z
aWduZWQgY2hhciogcCkgeyByZXR1cm4gb3BlcmF0b3I+PigoY2hhciopcCk7IH0KICAgIGlzdHJl
YW0mIG9wZXJhdG9yPj4oc2lnbmVkIGNoYXIqcCkgeyByZXR1cm4gb3BlcmF0b3I+PigoY2hhciop
cCk7IH0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oY2hhciYgYyk7CiAgICBpc3RyZWFtJiBvcGVy
YXRvcj4+KHVuc2lnbmVkIGNoYXImIGMpIHtyZXR1cm4gb3BlcmF0b3I+PigoY2hhciYpYyk7fQog
ICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzaWduZWQgY2hhciYgYykge3JldHVybiBvcGVyYXRvcj4+
KChjaGFyJiljKTt9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGludCYpOwogICAgaXN0cmVhbSYg
b3BlcmF0b3I+Pihsb25nJik7CgogICAgX19leHRlbnNpb25fXyBpc3RyZWFtJiBvcGVyYXRvcj4+
KGxvbmcgbG9uZyYpOwogICAgX19leHRlbnNpb25fXyBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2ln
bmVkIGxvbmcgbG9uZyYpOwoKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc2hvcnQmKTsKICAgIGlz
dHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgaW50Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+
KHVuc2lnbmVkIGxvbmcmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgc2hvcnQm
KTsKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGJvb2wmKTsKCiAgICBpc3RyZWFtJiBvcGVyYXRv
cj4+KGZsb2F0Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGRvdWJsZSYpOwogICAgaXN0cmVh
bSYgb3BlcmF0b3I+Pihsb25nIGRvdWJsZSYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+PiggX19t
YW5pcCBmdW5jKSB7KCpmdW5jKSgqdGhpcyk7IHJldHVybiAqdGhpczt9CiAgICBpc3RyZWFtJiBv
cGVyYXRvcj4+KF9faW1hbmlwIGZ1bmMpIHsgcmV0dXJuICgqZnVuYykoKnRoaXMpOyB9CiAgICBp
c3RyZWFtJiBvcGVyYXRvcj4+KHN0cmVhbWJ1ZiopOwp9OwoKY2xhc3MgaW9zdHJlYW0gOiBwdWJs
aWMgaXN0cmVhbSwgcHVibGljIG9zdHJlYW0KewogIHB1YmxpYzoKICAgIGlvc3RyZWFtKCkgeyB9
CiAgICBpb3N0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKnRpZWQ9IF9fbnVsbCApOwp9OwoK
Y2xhc3MgX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiA6IHB1YmxpYyBpc3RyZWFtIHsKcHVibGljOgog
IF9JT19pc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShpc3RyZWFtJik7CiAgX0lPX2lzdHJl
YW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KF9JT19pc3RyZWFtX3dpdGhhc3NpZ24mIHJocykKICAg
IHsgcmV0dXJuIG9wZXJhdG9yPSAoc3RhdGljX2Nhc3Q8aXN0cmVhbSY+IChyaHMpKTsgfQp9OwoK
Y2xhc3MgX0lPX29zdHJlYW1fd2l0aGFzc2lnbiA6IHB1YmxpYyBvc3RyZWFtIHsKcHVibGljOgog
IF9JT19vc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShvc3RyZWFtJik7CiAgX0lPX29zdHJl
YW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KF9JT19vc3RyZWFtX3dpdGhhc3NpZ24mIHJocykKICAg
IHsgcmV0dXJuIG9wZXJhdG9yPSAoc3RhdGljX2Nhc3Q8b3N0cmVhbSY+IChyaHMpKTsgfQp9OwoK
ZXh0ZXJuIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24gY2luOwogCmV4dGVybiBfSU9fb3N0cmVhbV93
aXRoYXNzaWduIGNvdXQsIGNlcnI7CgpleHRlcm4gX0lPX29zdHJlYW1fd2l0aGFzc2lnbiBjbG9n
CgoKCjsKCmV4dGVybiBpc3RyZWFtJiBsb2NrKGlzdHJlYW0mIGlucyk7CmV4dGVybiBpc3RyZWFt
JiB1bmxvY2soaXN0cmVhbSYgaW5zKTsKZXh0ZXJuIG9zdHJlYW0mIGxvY2sob3N0cmVhbSYgb3V0
cyk7CmV4dGVybiBvc3RyZWFtJiB1bmxvY2sob3N0cmVhbSYgb3V0cyk7CgpzdHJ1Y3QgSW9zdHJl
YW1faW5pdCB7IH0gOyAgIAoKaW5saW5lIGlvcyYgZGVjKGlvcyYgaSkKeyBpLnNldGYoaW9zOjpk
ZWMsIGlvczo6ZGVjfGlvczo6aGV4fGlvczo6b2N0KTsgcmV0dXJuIGk7IH0KaW5saW5lIGlvcyYg
aGV4KGlvcyYgaSkKeyBpLnNldGYoaW9zOjpoZXgsIGlvczo6ZGVjfGlvczo6aGV4fGlvczo6b2N0
KTsgcmV0dXJuIGk7IH0KaW5saW5lIGlvcyYgb2N0KGlvcyYgaSkKeyBpLnNldGYoaW9zOjpvY3Qs
IGlvczo6ZGVjfGlvczo6aGV4fGlvczo6b2N0KTsgcmV0dXJuIGk7IH0KfSAgCgoKIyA0NSAiL29w
dC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4u
Ly4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDIgMwoKCgoKCgoKCiMgMSAiL29wdC9tdnBs
b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zL2luY2x1ZGUvc3RkZGVm
LmgiIDEgMyA0CiMgMzQyICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh
cmlzMi8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CgojIDUzICIvb3B0L212cGxvY2FsL2xp
Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9n
KystMy9zdGxfYWxsb2MuaCIgMiAzCgoKCiMgMSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9z
cGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL3NwYXJjLXN1bi1zb2xhcmlzMi9p
bmNsdWRlL2Fzc2VydC5oIiAxIDMgNAogCgoKCgoKCgoKIyAxOSAiL29wdC9tdnBsb2NhbC9saWIv
Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL3NwYXJjLXN1bi1z
b2xhcmlzMi9pbmNsdWRlL2Fzc2VydC5oIiAzIDQKCgoKCiAKCmV4dGVybiAiQyIgewpleHRlcm4g
dm9pZCBfX2VwcmludGYgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCwgY29u
c3QgY2hhciAqKQogICAgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7Cn0KCgoKCgoKCgoKCgoK
IyA1MiAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4z
Ly4uLy4uLy4uLy4uL3NwYXJjLXN1bi1zb2xhcmlzMi9pbmNsdWRlL2Fzc2VydC5oIiAzIDQKCgoK
IyA1NiAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4z
Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDIgMwoKCgoKCgoKCgoKCgog
ICAgIAogICAgIAogICAgIAojIDEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDEgMyA0CiAKCgoK
CgoKCiNwcmFnbWEgaWRlbnQJIkAoIylwdGhyZWFkLmgJMS4yOAk5OS8xMS8xNSBTTUkiCgoKCgoj
IDEgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAxIDMgNAogCiAKCiAKIAogCgoKCgojcHJhZ21hIGlk
ZW50CSJAKCMpc2NoZWQuaAkxLjkJOTgvMDEvMTYgU01JIgoKCgoKCmV4dGVybiAiQyIgewoKCnN0
cnVjdCBzY2hlZF9wYXJhbSB7CglpbnQJc2NoZWRfcHJpb3JpdHk7CSAKCWludAlzY2hlZF9uaWNl
bGltOwkgCglpbnQJc2NoZWRfbmljZTsJIAoJaW50CXNjaGVkX3BhZFs2XTsJIAoJCQkJIAoJCQkJ
IAoJCQkJIAp9OwoKIAoKCgoKCgoKCgogCgoKCmludAlzY2hlZF9nZXRwYXJhbShwaWRfdCBwaWQs
IHN0cnVjdCBzY2hlZF9wYXJhbSAqcGFyYW0pOwppbnQJc2NoZWRfc2V0cGFyYW0ocGlkX3QgcGlk
LCBjb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKnBhcmFtKTsKaW50CXNjaGVkX2dldHNjaGVkdWxl
cihwaWRfdCBwaWQpOwppbnQJc2NoZWRfc2V0c2NoZWR1bGVyKHBpZF90IHBpZCwgaW50IHBvbGlj
eSwKCQljb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKnBhcmFtKTsKaW50CXNjaGVkX3lpZWxkKHZv
aWQpOwppbnQJc2NoZWRfZ2V0X3ByaW9yaXR5X21heChpbnQgcG9saWN5KTsKaW50CXNjaGVkX2dl
dF9wcmlvcml0eV9taW4oaW50IHBvbGljeSk7CmludAlzY2hlZF9ycl9nZXRfaW50ZXJ2YWwocGlk
X3QgcGlkLCBzdHJ1Y3QgdGltZXNwZWMgKmludGVydmFsKTsKIyA2MiAiL3Vzci9pbmNsdWRlL3Nj
aGVkLmgiIDMgNAoKCgp9CgoKCiMgMTQgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMyA0CgoK
CgpleHRlcm4gIkMiIHsKCgogCgoKCgogCgoKIAoKCgogCgoKIAoKCgogCgoKCgoKCgoKIAoKCgoK
CgoKCiAKCgoKCgoKIAoKCgoKCgoKCgogCgoKCgoKCgoKIAoKCgoKCgogCgoKCgoKCiAKCgoKCgoK
IAoKCnR5cGVkZWYgc3RydWN0IF9jbGVhbnVwIHsKCXVpbnRwdHJfdAlwdGhyZWFkX2NsZWFudXBf
cGFkWzRdOwp9IF9jbGVhbnVwX3Q7CgoKCnZvaWQJX19wdGhyZWFkX2NsZWFudXBfcHVzaCh2b2lk
ICgqcm91dGluZSkodm9pZCAqKSwgdm9pZCAqYXJncywKCQkJCQljYWRkcl90IGZwLCBfY2xlYW51
cF90ICppbmZvKTsKdm9pZAlfX3B0aHJlYWRfY2xlYW51cF9wb3AoaW50IGV4LCBfY2xlYW51cF90
ICppbmZvKTsKY2FkZHJfdAlfZ2V0ZnAodm9pZCk7CgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgpl
eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9pbml0KHB0aHJlYWRfYXR0cl90ICopOwpleHRlcm4gaW50
IHB0aHJlYWRfYXR0cl9kZXN0cm95KHB0aHJlYWRfYXR0cl90ICopOwpleHRlcm4gaW50IHB0aHJl
YWRfYXR0cl9zZXRzdGFja3NpemUocHRocmVhZF9hdHRyX3QgKiwgc2l6ZV90KTsKZXh0ZXJuIGlu
dCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2tzaXplKGNvbnN0IHB0aHJlYWRfYXR0cl90ICosIHNpemVf
dCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2thZGRyKHB0aHJlYWRfYXR0cl90
ICosIHZvaWQgKik7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrYWRkcihjb25zdCBw
dGhyZWFkX2F0dHJfdCAqLCB2b2lkICoqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0ZGV0
YWNoc3RhdGUocHRocmVhZF9hdHRyX3QgKiwgaW50KTsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf
Z2V0ZGV0YWNoc3RhdGUoY29uc3QgcHRocmVhZF9hdHRyX3QgKiwgaW50ICopOwpleHRlcm4gaW50
IHB0aHJlYWRfYXR0cl9zZXRzY29wZShwdGhyZWFkX2F0dHJfdCAqLCBpbnQpOwpleHRlcm4gaW50
IHB0aHJlYWRfYXR0cl9nZXRzY29wZShjb25zdCBwdGhyZWFkX2F0dHJfdCAqLCBpbnQgKik7CmV4
dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGluaGVyaXRzY2hlZChwdGhyZWFkX2F0dHJfdCAqLCBp
bnQpOwpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRpbmhlcml0c2NoZWQoY29uc3QgcHRocmVh
ZF9hdHRyX3QgKiwgaW50ICopOwpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGlj
eShwdGhyZWFkX2F0dHJfdCAqLCBpbnQpOwpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hl
ZHBvbGljeShjb25zdCBwdGhyZWFkX2F0dHJfdCAqLCBpbnQgKik7CmV4dGVybiBpbnQgcHRocmVh
ZF9hdHRyX3NldHNjaGVkcGFyYW0ocHRocmVhZF9hdHRyX3QgKiwKCQkJCQljb25zdCBzdHJ1Y3Qg
c2NoZWRfcGFyYW0gKik7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcGFyYW0oY29u
c3QgcHRocmVhZF9hdHRyX3QgKiwKCQkJCQlzdHJ1Y3Qgc2NoZWRfcGFyYW0gKik7CmV4dGVybiBp
bnQgcHRocmVhZF9jcmVhdGUocHRocmVhZF90ICosIGNvbnN0IHB0aHJlYWRfYXR0cl90ICosCgkJ
CQl2b2lkICogKCopKHZvaWQgKiksIHZvaWQgKik7CmV4dGVybiBpbnQgcHRocmVhZF9vbmNlKHB0
aHJlYWRfb25jZV90ICosIHZvaWQgKCopKHZvaWQpKTsKZXh0ZXJuIGludCBwdGhyZWFkX2pvaW4o
cHRocmVhZF90LCB2b2lkICoqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2RldGFjaChwdGhyZWFkX3Qp
OwpleHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQodm9pZCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2Nh
bmNlbChwdGhyZWFkX3QpOwpleHRlcm4gaW50IHB0aHJlYWRfc2V0c2NoZWRwYXJhbShwdGhyZWFk
X3QsIGludCwgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICopOwpleHRlcm4gaW50IHB0aHJlYWRf
Z2V0c2NoZWRwYXJhbShwdGhyZWFkX3QsIGludCAqLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKik7CmV4
dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWxzdGF0ZShpbnQsIGludCAqKTsKZXh0ZXJuIGludCBw
dGhyZWFkX3NldGNhbmNlbHR5cGUoaW50LCBpbnQgKik7CmV4dGVybiB2b2lkIHB0aHJlYWRfdGVz
dGNhbmNlbCh2b2lkKTsKZXh0ZXJuIGludCBwdGhyZWFkX2VxdWFsKHB0aHJlYWRfdCwgcHRocmVh
ZF90KTsKZXh0ZXJuIGludCBwdGhyZWFkX2tleV9jcmVhdGUocHRocmVhZF9rZXlfdCAqLCB2b2lk
ICgqKSh2b2lkICopKTsKZXh0ZXJuIGludCBwdGhyZWFkX2tleV9kZWxldGUocHRocmVhZF9rZXlf
dCk7CmV4dGVybiBpbnQgcHRocmVhZF9zZXRzcGVjaWZpYyhwdGhyZWFkX2tleV90LCBjb25zdCB2
b2lkICopOwpleHRlcm4gdm9pZCAqcHRocmVhZF9nZXRzcGVjaWZpYyhwdGhyZWFkX2tleV90KTsK
ZXh0ZXJuIHB0aHJlYWRfdCBwdGhyZWFkX3NlbGYodm9pZCk7CgogCgoKZXh0ZXJuIGludCBwdGhy
ZWFkX211dGV4YXR0cl9pbml0KHB0aHJlYWRfbXV0ZXhhdHRyX3QgKik7CmV4dGVybiBpbnQgcHRo
cmVhZF9tdXRleGF0dHJfZGVzdHJveShwdGhyZWFkX211dGV4YXR0cl90ICopOwpleHRlcm4gaW50
IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHBzaGFyZWQocHRocmVhZF9tdXRleGF0dHJfdCAqLCBpbnQp
OwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHBzaGFyZWQoY29uc3QgcHRocmVhZF9t
dXRleGF0dHJfdCAqLCBpbnQgKik7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0cHJv
dG9jb2wocHRocmVhZF9tdXRleGF0dHJfdCAqLCBpbnQpOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0
ZXhhdHRyX2dldHByb3RvY29sKGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50ICopOwpl
eHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHByaW9jZWlsaW5nKHB0aHJlYWRfbXV0ZXhh
dHRyX3QgKiwgaW50KTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9nZXRwcmlvY2VpbGlu
Zyhjb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICosIGludCAqKTsKZXh0ZXJuIGludCBwdGhyZWFk
X211dGV4YXR0cl9zZXRyb2J1c3RfbnAocHRocmVhZF9tdXRleGF0dHJfdCAqLCBpbnQpOwpleHRl
cm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHJvYnVzdF9ucChjb25zdCBwdGhyZWFkX211dGV4
YXR0cl90ICosIGludCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2luaXQocHRocmVhZF9t
dXRleF90ICosIGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKik7CmV4dGVybiBpbnQgcHRocmVh
ZF9tdXRleF9jb25zaXN0ZW50X25wKHB0aHJlYWRfbXV0ZXhfdCAqKTsKZXh0ZXJuIGludCBwdGhy
ZWFkX211dGV4X2Rlc3Ryb3kocHRocmVhZF9tdXRleF90ICopOwpleHRlcm4gaW50IHB0aHJlYWRf
bXV0ZXhfbG9jayhwdGhyZWFkX211dGV4X3QgKik7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF91
bmxvY2socHRocmVhZF9tdXRleF90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bG9j
ayhwdGhyZWFkX211dGV4X3QgKik7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9zZXRwcmlvY2Vp
bGluZyhwdGhyZWFkX211dGV4X3QgKiwgaW50LCBpbnQgKik7CmV4dGVybiBpbnQgcHRocmVhZF9t
dXRleF9nZXRwcmlvY2VpbGluZyhjb25zdCBwdGhyZWFkX211dGV4X3QgKiwgaW50ICopOwpleHRl
cm4gaW50IHB0aHJlYWRfY29uZGF0dHJfaW5pdChwdGhyZWFkX2NvbmRhdHRyX3QgKik7CmV4dGVy
biBpbnQgcHRocmVhZF9jb25kYXR0cl9kZXN0cm95KHB0aHJlYWRfY29uZGF0dHJfdCAqKTsKZXh0
ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX3NldHBzaGFyZWQocHRocmVhZF9jb25kYXR0cl90ICos
IGludCk7CmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9nZXRwc2hhcmVkKGNvbnN0IHB0aHJl
YWRfY29uZGF0dHJfdCAqLCBpbnQgKik7CmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2luaXQocHRo
cmVhZF9jb25kX3QgKiwgY29uc3QgcHRocmVhZF9jb25kYXR0cl90ICopOwpleHRlcm4gaW50IHB0
aHJlYWRfY29uZF9kZXN0cm95KHB0aHJlYWRfY29uZF90ICopOwpleHRlcm4gaW50IHB0aHJlYWRf
Y29uZF9icm9hZGNhc3QocHRocmVhZF9jb25kX3QgKik7CmV4dGVybiBpbnQgcHRocmVhZF9jb25k
X3NpZ25hbChwdGhyZWFkX2NvbmRfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfd2FpdChw
dGhyZWFkX2NvbmRfdCAqLCBwdGhyZWFkX211dGV4X3QgKik7CmV4dGVybiBpbnQgcHRocmVhZF9j
b25kX3RpbWVkd2FpdChwdGhyZWFkX2NvbmRfdCAqLCBwdGhyZWFkX211dGV4X3QgKiwKCQkJCQlj
b25zdCBzdHJ1Y3QgdGltZXNwZWMgKik7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGd1YXJk
c2l6ZShjb25zdCBwdGhyZWFkX2F0dHJfdCAqLCBzaXplX3QgKik7CmV4dGVybiBpbnQgcHRocmVh
ZF9hdHRyX3NldGd1YXJkc2l6ZShwdGhyZWFkX2F0dHJfdCAqLCBzaXplX3QpOwpleHRlcm4gaW50
IHB0aHJlYWRfZ2V0Y29uY3VycmVuY3kodm9pZCk7CmV4dGVybiBpbnQgcHRocmVhZF9zZXRjb25j
dXJyZW5jeShpbnQgbmV3dmFsKTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBl
KHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50KTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0
cl9nZXR0eXBlKGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50ICopOwpleHRlcm4gaW50
IHB0aHJlYWRfcndsb2NrX2luaXQocHRocmVhZF9yd2xvY2tfdCAqLAoJCQkJY29uc3QgcHRocmVh
ZF9yd2xvY2thdHRyX3QgKik7CmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfZGVzdHJveShwdGhy
ZWFkX3J3bG9ja190ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3JkbG9jayhwdGhyZWFk
X3J3bG9ja190ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RyeXJkbG9jayhwdGhyZWFk
X3J3bG9ja190ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3dybG9jayhwdGhyZWFkX3J3
bG9ja190ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RyeXdybG9jayhwdGhyZWFkX3J3
bG9ja190ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3VubG9jayhwdGhyZWFkX3J3bG9j
a190ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9pbml0KHB0aHJlYWRfcndsb2Nr
YXR0cl90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9kZXN0cm95KHB0aHJlYWRf
cndsb2NrYXR0cl90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9nZXRwc2hhcmVk
KGNvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICosIGludCAqKTsKZXh0ZXJuIGludCBwdGhyZWFk
X3J3bG9ja2F0dHJfc2V0cHNoYXJlZChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqLCBpbnQpOwoKIyAz
MTggIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMgNAoKCgoKCn0KCgoKIyA3MSAiL29wdC9tdnBs
b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2lu
Y2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDIgMwoKCgoKCgoKCiMgODcgIi9vcHQvbXZwbG9jYWwv
bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL3N0bF9hbGxvYy5oIiAzCgojIDk3ICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3Nw
YXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxs
b2MuaCIgMwoKIyAxMTUgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
aXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAzCgoKCgoK
CgoKCiAKCgoKCgogCiAKCgoKCgoKCgoKdGVtcGxhdGUgPGludCBfX2luc3Q+CmNsYXNzIF9fbWFs
bG9jX2FsbG9jX3RlbXBsYXRlIHsKCnByaXZhdGU6CgogIHN0YXRpYyB2b2lkKiBfU19vb21fbWFs
bG9jKHNpemVfdCk7CiAgc3RhdGljIHZvaWQqIF9TX29vbV9yZWFsbG9jKHZvaWQqLCBzaXplX3Qp
OwoKCiAgc3RhdGljIHZvaWQgKCogX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCk7CgoKcHVi
bGljOgoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7CiAgICB2b2lkKiBf
X3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgaWYgKDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0ID0g
X1Nfb29tX21hbGxvYyhfX24pOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KCiAgc3RhdGljIHZv
aWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCAgKQogIHsKICAgIGZyZWUoX19wKTsKICB9
CgogIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICAsIHNpemVfdCBf
X25ld19zeikKICB7CiAgICB2b2lkKiBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX25ld19zeik7
CiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBfU19vb21fcmVhbGxvYyhfX3AsIF9f
bmV3X3N6KTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9CgogIHN0YXRpYyB2b2lkICgqIF9fc2V0
X21hbGxvY19oYW5kbGVyKHZvaWQgKCpfX2YpKCkpKSgpCiAgewogICAgdm9pZCAoKiBfX29sZCko
KSA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgX19tYWxsb2NfYWxsb2Nfb29tX2hh
bmRsZXIgPSBfX2Y7CiAgICByZXR1cm4oX19vbGQpOwogIH0KCn07CgogCgoKdGVtcGxhdGUgPGlu
dCBfX2luc3Q+CnZvaWQgKCogX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X19tYWxs
b2NfYWxsb2Nfb29tX2hhbmRsZXIpKCkgPSAwOwoKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lk
KgpfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fbWFsbG9jKHNpemVfdCBf
X24pCnsKICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgIHZvaWQqIF9fcmVz
dWx0OwoKICAgIGZvciAoOzspIHsKICAgICAgICBfX215X21hbGxvY19oYW5kbGVyID0gX19tYWxs
b2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxl
cikgeyBjZXJyIDw8ICJvdXQgb2YgbWVtb3J5IiA8PCBlbmRsOyBleGl0KDEpIDsgfQogICAgICAg
ICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgICBfX3Jlc3VsdCA9IG1hbGxvYyhfX24p
OwogICAgICAgIGlmIChfX3Jlc3VsdCkgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0KfQoKdGVtcGxh
dGUgPGludCBfX2luc3Q+CnZvaWQqIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9T
X29vbV9yZWFsbG9jKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKewogICAgdm9pZCAoKiBfX215X21h
bGxvY19oYW5kbGVyKSgpOwogICAgdm9pZCogX19yZXN1bHQ7CgogICAgZm9yICg7OykgewogICAg
ICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAg
ICAgICBpZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVyKSB7IGNlcnIgPDwgIm91dCBvZiBtZW1v
cnkiIDw8IGVuZGw7IGV4aXQoMSkgOyB9CiAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgp
OwogICAgICAgIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9fbik7CiAgICAgICAgaWYgKF9fcmVz
dWx0KSByZXR1cm4oX19yZXN1bHQpOwogICAgfQp9Cgp0eXBlZGVmIF9fbWFsbG9jX2FsbG9jX3Rl
bXBsYXRlPDA+IG1hbGxvY19hbGxvYzsKCnRlbXBsYXRlPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j
PgpjbGFzcyBzaW1wbGVfYWxsb2MgewoKcHVibGljOgogICAgc3RhdGljIF9UcCogYWxsb2NhdGUo
c2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gMCA9PSBfX24gPyAwIDogKF9UcCopIF9BbGxvYzo6
YWxsb2NhdGUoX19uICogc2l6ZW9mIChfVHApKTsgfQogICAgc3RhdGljIF9UcCogYWxsb2NhdGUo
dm9pZCkKICAgICAgeyByZXR1cm4gKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoc2l6ZW9mIChfVHAp
KTsgfQogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAg
ICAgeyBpZiAoMCAhPSBfX24pIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZiAo
X1RwKSk7IH0KICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoX1RwKiBfX3ApCiAgICAgIHsgX0Fs
bG9jOjpkZWFsbG9jYXRlKF9fcCwgc2l6ZW9mIChfVHApKTsgfQp9OwoKIAogCiAKIAogCnRlbXBs
YXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNzIGRlYnVnX2FsbG9jIHsKCnByaXZhdGU6CgogIGVudW0g
e19TX2V4dHJhID0gOH07ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgIAoKcHVibGljOgoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9f
bikKICB7CiAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKilfQWxsb2M6OmFsbG9jYXRlKF9fbiAr
IF9TX2V4dHJhKTsKICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbjsKICAgIHJldHVybiBfX3Jl
c3VsdCArIF9TX2V4dHJhOwogIH0KCiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3As
IHNpemVfdCBfX24pCiAgewogICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gX1NfZXh0
cmE7CiAgICAoKHZvaWQpICgoICooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24gKSA/IDAgOiAoX19l
cHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwJICAiL29wdC9tdnBsb2Nh
bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvc3RsX2FsbG9jLmgiICwgICAyNjMgLCAgIiooc2l6ZV90KilfX3JlYWxfcCA9PSBf
X24iICksIDApICkpIDsKICAgIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3JlYWxfcCwgX19uICsgX1Nf
ZXh0cmEpOwogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3Qg
X19vbGRfc3osIHNpemVfdCBfX25ld19zeikKICB7CiAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFy
KilfX3AgLSBfU19leHRyYTsKICAgICgodm9pZCkgKCggKihzaXplX3QqKV9fcmVhbF9wID09IF9f
b2xkX3N6ICkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydc
biIsCSAgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUu
My8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAsICAgMjcwICwgICIqKHNp
emVfdCopX19yZWFsX3AgPT0gX19vbGRfc3oiICksIDApICkpIDsKICAgIGNoYXIqIF9fcmVzdWx0
ID0gKGNoYXIqKQogICAgICBfQWxsb2M6OnJlYWxsb2NhdGUoX19yZWFsX3AsIF9fb2xkX3N6ICsg
X1NfZXh0cmEsIF9fbmV3X3N6ICsgX1NfZXh0cmEpOwogICAgKihzaXplX3QqKV9fcmVzdWx0ID0g
X19uZXdfc3o7CiAgICByZXR1cm4gX19yZXN1bHQgKyBfU19leHRyYTsKICB9Cgp9OwoKCgoKCgoK
CgoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgogCiAKIAogCiAKIAogCiAKIAoKCgoKCgoK
dGVtcGxhdGUgPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CmNsYXNzIF9fZGVmYXVsdF9hbGxvY190
ZW1wbGF0ZSB7Cgpwcml2YXRlOgogICAKICAgCgogICAgZW51bSB7X0FMSUdOID0gOH07CiAgICBl
bnVtIHtfTUFYX0JZVEVTID0gMTI4fTsKICAgIGVudW0ge19ORlJFRUxJU1RTID0gX01BWF9CWVRF
Uy9fQUxJR059OwoKICBzdGF0aWMgc2l6ZV90CiAgX1Nfcm91bmRfdXAoc2l6ZV90IF9fYnl0ZXMp
CiAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIF9BTElHTi0xKSAmIH4oX0FMSUdOIC0gMSkpOyB9
Cgpwcml2YXRlIDoKICB1bmlvbiBfT2JqIHsKICAgICAgICB1bmlvbiBfT2JqKiBfTV9mcmVlX2xp
c3RfbGluazsKICAgICAgICBjaGFyIF9NX2NsaWVudF9kYXRhWzFdOyAgICAgCiAgfTsKcHJpdmF0
ZToKCgoKCiAgICBzdGF0aWMgX09iaiogdm9sYXRpbGUgIF9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNU
U107CgogIHN0YXRpYyAgc2l6ZV90IF9TX2ZyZWVsaXN0X2luZGV4KHNpemVfdCBfX2J5dGVzKSB7
CiAgICAgICAgcmV0dXJuICgoKF9fYnl0ZXMpICsgX0FMSUdOLTEpL19BTElHTiAtIDEpOwogIH0K
CiAgIAogIHN0YXRpYyB2b2lkKiBfU19yZWZpbGwoc2l6ZV90IF9fbik7CiAgIAogICAKICBzdGF0
aWMgY2hhciogX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsKCiAg
IAogIHN0YXRpYyBjaGFyKiBfU19zdGFydF9mcmVlOwogIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJl
ZTsKICBzdGF0aWMgc2l6ZV90IF9TX2hlYXBfc2l6ZTsKCgoKCgoKCgogICAgc3RhdGljIHB0aHJl
YWRfbXV0ZXhfdCBfU19ub2RlX2FsbG9jYXRvcl9sb2NrOwoKCgoKCgojIDM4OSAiL29wdC9tdnBs
b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2lu
Y2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDMKCgogICAgY2xhc3MgX0xvY2sgewogICAgICAgIHB1
YmxpYzoKICAgICAgICAgICAgX0xvY2soKSB7IGlmICh0aHJlYWRzKSBwdGhyZWFkX211dGV4X2xv
Y2soJl9TX25vZGVfYWxsb2NhdG9yX2xvY2spIDsgfQogICAgICAgICAgICB+X0xvY2soKSB7IGlm
ICh0aHJlYWRzKSBwdGhyZWFkX211dGV4X3VubG9jaygmX1Nfbm9kZV9hbGxvY2F0b3JfbG9jaykg
OyB9CiAgICB9OwogICAgZnJpZW5kIGNsYXNzIF9Mb2NrOwoKcHVibGljOgoKICAgCiAgc3RhdGlj
IHZvaWQqIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgewogICAgX09iaiogdm9sYXRpbGUgKiBfX215
X2ZyZWVfbGlzdDsKICAgIF9PYmoqICAgX19yZXN1bHQ7CgogICAgaWYgKF9fbiA+IChzaXplX3Qp
IF9NQVhfQllURVMpIHsKICAgICAgICByZXR1cm4obWFsbG9jX2FsbG9jOjphbGxvY2F0ZShfX24p
KTsKICAgIH0KICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3Rf
aW5kZXgoX19uKTsKICAgICAKICAgICAKICAgICAKCiAgICAgICAgIAogICAgICAgIF9Mb2NrIF9f
bG9ja19pbnN0YW5jZTsKCiAgICBfX3Jlc3VsdCA9ICpfX215X2ZyZWVfbGlzdDsKICAgIGlmIChf
X3Jlc3VsdCA9PSAwKSB7CiAgICAgICAgdm9pZCogX19yID0gX1NfcmVmaWxsKF9TX3JvdW5kX3Vw
KF9fbikpOwogICAgICAgIHJldHVybiBfX3I7CiAgICB9CiAgICAqX19teV9mcmVlX2xpc3QgPSBf
X3Jlc3VsdCAtPiBfTV9mcmVlX2xpc3RfbGluazsKICAgIHJldHVybiAoX19yZXN1bHQpOwogIH07
CgogICAKICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKICB7
CiAgICBfT2JqKiBfX3EgPSAoX09iaiopX19wOwogICAgX09iaiogdm9sYXRpbGUgKiBfX215X2Zy
ZWVfbGlzdDsKCiAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykgewogICAgICAgIG1h
bGxvY19hbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7CiAgICAgICAgcmV0dXJuOwogICAgfQog
ICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24p
OwogICAgIAoKICAgICAgICAgCiAgICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOwoKICAgIF9f
cSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICpfX215X2ZyZWVf
bGlzdCA9IF9fcTsKICAgICAKICB9CgogIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9f
cCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opOwoKfSA7Cgp0eXBlZGVmIF9fZGVm
YXVsdF9hbGxvY190ZW1wbGF0ZTwgdHJ1ZSAsIDA+IGFsbG9jOwp0eXBlZGVmIF9fZGVmYXVsdF9h
bGxvY190ZW1wbGF0ZTxmYWxzZSwgMD4gc2luZ2xlX2NsaWVudF9hbGxvYzsKCgoKIAogCiAKIAp0
ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqCl9fZGVmYXVsdF9hbGxv
Y190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3Np
emUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCYgX19ub2JqcykKewogICAgY2hhciogX19yZXN1bHQ7CiAgICBzaXplX3QgX190
b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICBzaXplX3QgX19ieXRlc19sZWZ0ID0g
X1NfZW5kX2ZyZWUgLSBfU19zdGFydF9mcmVlOwoKICAgIGlmIChfX2J5dGVzX2xlZnQgPj0gX190
b3RhbF9ieXRlcykgewogICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICBf
U19zdGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsK
ICAgIH0gZWxzZSBpZiAoX19ieXRlc19sZWZ0ID49IF9fc2l6ZSkgewogICAgICAgIF9fbm9ianMg
PSAoaW50KShfX2J5dGVzX2xlZnQvX19zaXplKTsKICAgICAgICBfX3RvdGFsX2J5dGVzID0gX19z
aXplICogX19ub2JqczsKICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAg
X1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOwogICAgICAgIHJldHVybihfX3Jlc3VsdCk7
CiAgICB9IGVsc2UgewogICAgICAgIHNpemVfdCBfX2J5dGVzX3RvX2dldCA9CgkgIDIgKiBfX3Rv
dGFsX2J5dGVzICsgX1Nfcm91bmRfdXAoX1NfaGVhcF9zaXplID4+IDQpOwogICAgICAgICAKICAg
ICAgICBpZiAoX19ieXRlc19sZWZ0ID4gMCkgewogICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSAq
IF9fbXlfZnJlZV9saXN0ID0KICAgICAgICAgICAgICAgICAgICAgICAgX1NfZnJlZV9saXN0ICsg
X1NfZnJlZWxpc3RfaW5kZXgoX19ieXRlc19sZWZ0KTsKCiAgICAgICAgICAgICgoX09iaiopX1Nf
c3RhcnRfZnJlZSkgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAg
ICAgICAgICpfX215X2ZyZWVfbGlzdCA9IChfT2JqKilfU19zdGFydF9mcmVlOwogICAgICAgIH0K
ICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKW1hbGxvYyhfX2J5dGVzX3RvX2dldCk7CiAg
ICAgICAgaWYgKDAgPT0gX1Nfc3RhcnRfZnJlZSkgewogICAgICAgICAgICBzaXplX3QgX19pOwog
ICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSAqIF9fbXlfZnJlZV9saXN0OwoJICAgIF9PYmoqIF9f
cDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAg
Zm9yIChfX2kgPSBfX3NpemU7IF9faSA8PSBfTUFYX0JZVEVTOyBfX2kgKz0gX0FMSUdOKSB7CiAg
ICAgICAgICAgICAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0
X2luZGV4KF9faSk7CiAgICAgICAgICAgICAgICBfX3AgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAg
ICAgICAgICAgICBpZiAoMCAhPSBfX3ApIHsKICAgICAgICAgICAgICAgICAgICAqX19teV9mcmVl
X2xpc3QgPSBfX3AgLT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgICAgICAgICAgICAgX1Nf
c3RhcnRfZnJlZSA9IChjaGFyKilfX3A7CiAgICAgICAgICAgICAgICAgICAgX1NfZW5kX2ZyZWUg
PSBfU19zdGFydF9mcmVlICsgX19pOwogICAgICAgICAgICAgICAgICAgIHJldHVybihfU19jaHVu
a19hbGxvYyhfX3NpemUsIF9fbm9ianMpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgkgICAgX1NfZW5k
X2ZyZWUgPSAwOwkgCiAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopbWFsbG9jX2Fs
bG9jOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IAogICAgICAgICAgICAgCiAgICAgICAgfQogICAgICAgIF9TX2hlYXBfc2l6ZSArPSBfX2J5dGVz
X3RvX2dldDsKICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2J5dGVzX3Rv
X2dldDsKICAgICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CiAg
ICB9Cn0KCgogCiAKIAp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnZvaWQq
Cl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3JlZmlsbChz
aXplX3QgX19uKQp7CiAgICBpbnQgX19ub2JqcyA9IDIwOwogICAgY2hhciogX19jaHVuayA9IF9T
X2NodW5rX2FsbG9jKF9fbiwgX19ub2Jqcyk7CiAgICBfT2JqKiB2b2xhdGlsZSAqIF9fbXlfZnJl
ZV9saXN0OwogICAgX09iaiogX19yZXN1bHQ7CiAgICBfT2JqKiBfX2N1cnJlbnRfb2JqOwogICAg
X09iaiogX19uZXh0X29iajsKICAgIGludCBfX2k7CgogICAgaWYgKDEgPT0gX19ub2JqcykgcmV0
dXJuKF9fY2h1bmspOwogICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVl
bGlzdF9pbmRleChfX24pOwoKICAgICAKICAgICAgX19yZXN1bHQgPSAoX09iaiopX19jaHVuazsK
ICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19uZXh0X29iaiA9IChfT2JqKikoX19jaHVuayArIF9f
bik7CiAgICAgIGZvciAoX19pID0gMTsgOyBfX2krKykgewogICAgICAgIF9fY3VycmVudF9vYmog
PSBfX25leHRfb2JqOwogICAgICAgIF9fbmV4dF9vYmogPSAoX09iaiopKChjaGFyKilfX25leHRf
b2JqICsgX19uKTsKICAgICAgICBpZiAoX19ub2JqcyAtIDEgPT0gX19pKSB7CiAgICAgICAgICAg
IF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsgPSAwOwogICAgICAgICAgICBicmVh
azsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVf
bGlzdF9saW5rID0gX19uZXh0X29iajsKICAgICAgICB9CiAgICAgIH0KICAgIHJldHVybihfX3Jl
c3VsdCk7Cn0KCnRlbXBsYXRlIDxib29sIHRocmVhZHMsIGludCBpbnN0Pgp2b2lkKgpfX2RlZmF1
bHRfYWxsb2NfdGVtcGxhdGU8dGhyZWFkcywgaW5zdD46OnJlYWxsb2NhdGUodm9pZCogX19wLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IF9fb2xkX3N6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IF9fbmV3X3N6KQp7CiAgICB2b2lkKiBfX3Jlc3VsdDsKICAgIHNpemVfdCBf
X2NvcHlfc3o7CgogICAgaWYgKF9fb2xkX3N6ID4gKHNpemVfdCkgX01BWF9CWVRFUyAmJiBfX25l
d19zeiA+IChzaXplX3QpIF9NQVhfQllURVMpIHsKICAgICAgICByZXR1cm4ocmVhbGxvYyhfX3As
IF9fbmV3X3N6KSk7CiAgICB9CiAgICBpZiAoX1Nfcm91bmRfdXAoX19vbGRfc3opID09IF9TX3Jv
dW5kX3VwKF9fbmV3X3N6KSkgcmV0dXJuKF9fcCk7CiAgICBfX3Jlc3VsdCA9IGFsbG9jYXRlKF9f
bmV3X3N6KTsKICAgIF9fY29weV9zeiA9IF9fbmV3X3N6ID4gX19vbGRfc3o/IF9fb2xkX3N6IDog
X19uZXdfc3o7CiAgICBtZW1jcHkoX19yZXN1bHQsIF9fcCwgX19jb3B5X3N6KTsKICAgIGRlYWxs
b2NhdGUoX19wLCBfX29sZF9zeik7CiAgICByZXR1cm4oX19yZXN1bHQpOwp9CgoKICAgIHRlbXBs
YXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIHB0aHJlYWRfbXV0ZXhfdAogICAg
X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nfbm9kZV9hbGxv
Y2F0b3JfbG9jawogICAgICAgID0ge3swLCAwLCAwLCAwfSwge3t7MH19fSwgMH0gOwoKCgoKCgoK
CgojIDYwMiAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45
NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDMKCgojIDY4OSAiL29w
dC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4u
Ly4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDMKCgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVh
ZHMsIGludCBfX2luc3Q+CmNoYXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMs
IF9faW5zdD46Ol9TX3N0YXJ0X2ZyZWUgPSAwOwoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBp
bnQgX19pbnN0PgpjaGFyKiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2lu
c3Q+OjpfU19lbmRfZnJlZSA9IDA7Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2lu
c3Q+CnNpemVfdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+Ojpf
U19oZWFwX3NpemUgPSAwOwoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pgpf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfT2JqKiB2b2xhdGls
ZSAKX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA6Ol9TX2ZyZWVf
bGlzdFsKICAgIF9ORlJFRUxJU1RTCl0gPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgfTsKIAogCiAKCgoKCgoKCgoKCiAKIAogCiAKIAogCiAKCgoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgYWxsb2NhdG9yIHsKICB0eXBlZGVmIGFsbG9jIF9BbGxv
YzsgICAgICAgICAgIApwdWJsaWM6CiAgdHlwZWRlZiBzaXplX3QgICAgIHNpemVfdHlwZTsKICB0
eXBlZGVmIHB0cmRpZmZfdCAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICBw
b2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1Rw
JiAgICAgICByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsK
ICB0eXBlZGVmIF9UcCAgICAgICAgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+
IHN0cnVjdCByZWJpbmQgewogICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7CiAgfTsK
CiAgYWxsb2NhdG9yKCkgdGhyb3coKSAge30KICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikg
dGhyb3coKSAge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gYWxsb2NhdG9yKGNvbnN0IGFsbG9j
YXRvcjxfVHAxPiYpIHRocm93KCkgIHt9CiAgfmFsbG9jYXRvcigpIHRocm93KCkgIHt9CgogIHBv
aW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgY29u
c3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZf
X3g7IH0KCiAgIAogICAKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQq
ID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwID8gc3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjph
bGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAgICAgICAgICAgICAgICAgICAgOiAwOwogIH0K
CiAgIAogIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsg
X0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlw
ZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkgCiAgICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6
ZW9mKF9UcCk7IH0KCiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192
YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQogIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkg
eyBfX3AtPn5fVHAoKTsgfQp9OwoKdGVtcGxhdGU8PgpjbGFzcyBhbGxvY2F0b3I8dm9pZD4gewog
IHR5cGVkZWYgc2l6ZV90ICAgICAgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90ICAgZGlm
ZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCogICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNv
bnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2b2lkICAgICAgICB2YWx1ZV90eXBl
OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIGFs
bG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNz
IF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0
IGFsbG9jYXRvcjxfVDI+JikKewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Qx
LCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgYWxsb2NhdG9yPF9UMT4m
LCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCiAKIAogCiAKIAog
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfX2FsbG9jYXRvciB7
CiAgX0FsbG9jIF9fdW5kZXJseWluZ19hbGxvYzsKCiAgdHlwZWRlZiBzaXplX3QgICAgc2l6ZV90
eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCog
ICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCogY29uc3RfcG9pbnRlcjsKICB0eXBl
ZGVmIF9UcCYgICAgICAgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZl
cmVuY2U7CiAgdHlwZWRlZiBfVHAgICAgICAgIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFz
cyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0Fs
bG9jPiBvdGhlcjsKICB9OwoKICBfX2FsbG9jYXRvcigpIHRocm93KCkgIHt9CiAgX19hbGxvY2F0
b3IoY29uc3QgX19hbGxvY2F0b3ImIF9fYSkgdGhyb3coKSAKICAgIDogX191bmRlcmx5aW5nX2Fs
bG9jKF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+CiAg
X19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiYgX19hKSB0aHJvdygp
IAogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykge30KICB+
X19hbGxvY2F0b3IoKSB0aHJvdygpICB7fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9f
eCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9y
ZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgogICAKICBfVHAqIGFsbG9jYXRl
KHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwCiAg
ICAgICAgPyBzdGF0aWNfY2FzdDxfVHAqPihfX3VuZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19u
ICogc2l6ZW9mKF9UcCkpKQogICAgICAgIDogMDsKICB9CgogICAKICB2b2lkIGRlYWxsb2NhdGUo
cG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCiAgICB7IF9fdW5kZXJseWluZ19hbGxvYy5kZWFs
bG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgp
IGNvbnN0IHRocm93KCkgCiAgICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0K
CiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9f
cCkgX1RwKF9fdmFsKTsgfQogIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAo
KTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KY2xhc3MgX19hbGxvY2F0b3I8dm9pZCwg
X0FsbG9jPiB7CiAgdHlwZWRlZiBzaXplX3QgICAgICBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJk
aWZmX3QgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkKiAgICAgICBwb2ludGVyOwog
IHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAg
IHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAg
IHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9Owp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5fX3Vu
ZGVybHlpbmdfYWxsb2MgPT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19h
bGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikKewogIHJldHVybiBfX2ExLl9fdW5kZXJs
eWluZ19hbGxvYyAhPSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsKfQoKCiAKIAogCgp0ZW1wbGF0
ZSA8aW50IGluc3Q+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19tYWxsb2NfYWxsb2Nf
dGVtcGxhdGU8aW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2Fs
bG9jX3RlbXBsYXRlPGluc3Q+JikKewogIHJldHVybiB0cnVlOwp9CgoKdGVtcGxhdGUgPGludCBf
X2luc3Q+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxh
dGU8X19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2Nf
dGVtcGxhdGU8X19pbnN0PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCgoKdGVtcGxhdGUgPGJvb2wg
X190aHJlYWRzLCBpbnQgX19pbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fZGVm
YXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mLAogICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4m
KQp7CiAgcmV0dXJuIHRydWU7Cn0KCgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2lu
c3Q+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl
PF9fdGhyZWFkcywgX19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWZh
dWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpCnsKICByZXR1cm4gZmFsc2U7
Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBkZWJ1Z19hbGxvYzxfQWxsb2M+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWJ1
Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVybiB0cnVlOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9B
bGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+JiwK
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJl
dHVybiBmYWxzZTsKfQoKCiAKIAogCiAKIAogCgogCiAKIAogCiAKIAoKIAogCiAKIAogCiAKIAog
CiAKIAogCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpzdHJ1Y3Qg
X0FsbG9jX3RyYWl0cwp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gZmFs
c2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjogICByZWJpbmQ8X1RwPjo6b3RoZXIK
ICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0FsbG9jYXRvcj4KY29uc3QgYm9vbCBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9T
X2luc3RhbmNlbGVzczsKCiAKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CnN0cnVj
dCBfQWxsb2NfdHJhaXRzPF9UcCwgYWxsb2NhdG9yPF9UcDE+ID4KewogIHN0YXRpYyBjb25zdCBi
b29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBh
bGxvYz4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwPiBhbGxvY2F0b3JfdHlw
ZTsKfTsKCiAKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2Nf
dHJhaXRzPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+CnsKICBzdGF0aWMg
Y29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9j
PF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5
cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4g
YWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgYm9vbCBfX3RocmVhZHMs
IGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3Rl
bXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0
YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2Fs
bG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CiAgICAgICAgICBfQWxsb2NfdHlwZTsK
ICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy
ZWFkcywgX19pbnN0PiA+CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgZGVidWdf
YWxsb2M8X0FsbG9jPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0
cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9B
bGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+
ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgogCiAKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9U
cDEsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwKICAgICAgICAgICAgICAg
ICAgICAgX19hbGxvY2F0b3I8X1RwMSwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+
ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRl
ZiBzaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gX0Fs
bG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBs
YXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfVHAxLCBib29sIF9fdGhyLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxf
VHAsCiAgICAgICAgICAgICAgICAgICAgICBfX2FsbG9jYXRvcjxfVHAxLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLCBfX2lu
c3Q+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0
eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Rocixf
X2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1Rw
LCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgICAgICBhbGxv
Y2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBjbGFzcyBf
QWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19hbGxvY2F0b3I8X1RwMSwgZGVidWdf
YWxsb2M8X0FsbG9jPiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9
IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4g
X0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIGRlYnVnX2FsbG9jPF9BbGxv
Yz4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgoKCgoKCgogCgoKCgoKIAogCiAKIyAyMSAiL29wdC9t
dnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4u
L2luY2x1ZGUvZysrLTMvYWxsb2MuaCIgMiAzCgoKCiMgNDAgIi9vcHQvbXZwbG9jYWwvbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z
L2FsbG9jLmgiIDMKCgoKCiAKIAogCiMgMzkgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3Bh
cmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0
cmluZy5oIiAyIDMKCgpleHRlcm4gIkMrKyIgewpjbGFzcyBpc3RyZWFtOyBjbGFzcyBvc3RyZWFt
OwoKIyAxICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1
LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9pdGVyYXRvciIgMSAzCiAKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgojIDEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3Vu
LXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9yZWxvcHMuaCIg
MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBf
X3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5s
aW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgewogIHJl
dHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBib29sIG9wZXJh
dG9yPD0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSB7CiAgcmV0dXJuICEoX195IDwg
X194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25z
dCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgog
CgoKCiAKIAogCiMgMzEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
aXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2l0ZXJhdG9yIiAyIDMKCiMgMSAi
L29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zL2luY2x1
ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzQyICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJj
LXN1bi1zb2xhcmlzMi8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CgojIDMyICIvb3B0L212
cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9pdGVyYXRvciIgMiAzCgoKCgoKCiMgMSAiL29wdC9tdnBsb2NhbC9saWIv
Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvc3RsX2l0ZXJhdG9yLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK
CiAKCnN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcge307CnN0cnVjdCBvdXRwdXRfaXRlcmF0b3Jf
dGFnIHt9OwpzdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgaW5wdXRfaXRlcmF0
b3JfdGFnIHt9OwpzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgZm9y
d2FyZF9pdGVyYXRvcl90YWcge307CnN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyA6
IHB1YmxpYyBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyB7fTsKCiAKIAogCiAKCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGlucHV0X2l0ZXJhdG9yIHsKICB0
eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9U
cCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlICAgICAgICAg
IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICBwb2ludGVyOwog
IHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsKCnN0cnVjdCBvdXRwdXRf
aXRlcmF0b3IgewogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29y
eTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZv
aWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAg
ICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBmb3J3YXJk
X2l0ZXJhdG9yIHsKICB0eXBlZGVmIGZvcndhcmRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVn
b3J5OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVm
IF9EaXN0YW5jZSAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAg
ICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAgICAgICAgICAgICByZWZl
cmVuY2U7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3Qg
YmlkaXJlY3Rpb25hbF9pdGVyYXRvciB7CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y
X3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAgICAgICAgICBkaWZm
ZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVy
OwogIHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9OwoKdGVt
cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19p
dGVyYXRvciB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9j
YXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7
CiAgdHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAg
dHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgX1Rw
JiAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9OwoKIyA5OCAiL29wdC9tdnBsb2Nh
bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgoKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+
CnN0cnVjdCBpdGVyYXRvcl90cmFpdHMgewogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpp
dGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHR5cGVuYW1lIF9J
dGVyYXRvcjo6dmFsdWVfdHlwZSAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1l
IF9JdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYg
dHlwZW5hbWUgX0l0ZXJhdG9yOjpwb2ludGVyICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYg
dHlwZW5hbWUgX0l0ZXJhdG9yOjpyZWZlcmVuY2UgICAgICAgICByZWZlcmVuY2U7Cn07Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPF9UcCo+IHsKICB0eXBlZGVm
IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYg
X1RwICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZm
X3QgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAg
ICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAgICAgICAgICAg
ICAgICAgICAgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGl0ZXJh
dG9yX3RyYWl0czxjb25zdCBfVHAqPiB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9y
X3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAg
ICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90ICAgICAgICAgICAgICAgICAgIGRp
ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIGNvbnN0IF9UcCogICAgICAgICAgICAgICAgICBwb2lu
dGVyOwogIHR5cGVkZWYgY29uc3QgX1RwJiAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsK
CiAKIAogCiAKCiAKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5Cl9faXRlcmF0b3JfY2F0ZWdvcnko
Y29uc3QgX0l0ZXImKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+
OjppdGVyYXRvcl9jYXRlZ29yeSBfQ2F0ZWdvcnk7CiAgcmV0dXJuIF9DYXRlZ29yeSgpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0
ZXI+OjpkaWZmZXJlbmNlX3R5cGUqCl9fZGlzdGFuY2VfdHlwZShjb25zdCBfSXRlciYpCnsKICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVy
ZW5jZV90eXBlKj4oMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUqCl9fdmFsdWVfdHlwZShjb25zdCBf
SXRlciYpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J
dGVyPjo6dmFsdWVfdHlwZSo+KDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQppdGVyYXRv
cl9jYXRlZ29yeShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX2l0ZXJhdG9yX2NhdGVnb3J5
KF9faSk7IH0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqCmRpc3RhbmNlX3R5cGUoY29uc3QgX0l0
ZXImIF9faSkgeyByZXR1cm4gX19kaXN0YW5jZV90eXBlKF9faSk7IH0KCnRlbXBsYXRlIDxjbGFz
cyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5
cGUqCnZhbHVlX3R5cGUoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX192YWx1ZV90eXBlKF9f
aSk7IH0KCgoKCgojIDI1OSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
YXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5l
IHZvaWQgX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlJiBfX24sIGlucHV0X2l0ZXJh
dG9yX3RhZykKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgeyArK19fZmlyc3Q7ICsrX19u
OyB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0
YW5jZT4KaW5saW5lIHZvaWQgX19kaXN0YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz
dCwgCiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwg
CiAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlJiBfX24sIHJhbmRvbV9hY2Nlc3NfaXRl
cmF0b3JfdGFnKQp7CiAgX19uICs9IF9fbGFzdCAtIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBkaXN0YW5jZShf
SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0
b3IgX19sYXN0LCBfRGlzdGFuY2UmIF9fbikKewogIF9fZGlzdGFuY2UoX19maXJzdCwgX19sYXN0
LCBfX24sIGl0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRl
cmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0
LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAw
OwogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgKytfX2ZpcnN0OyArK19fbjsKICB9
CiAgcmV0dXJuIF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4K
aW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojpk
aWZmZXJlbmNlX3R5cGUKX19kaXN0YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwg
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0
ZXJhdG9yX3RhZykgewogIHJldHVybiBfX2xhc3QgLSBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0
SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJz
dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0lucHV0SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSAKICAgIF9DYXRlZ29yeTsK
ICByZXR1cm4gX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9DYXRlZ29yeSgpKTsKfQoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBf
X2FkdmFuY2UoX0lucHV0SXRlciYgX19pLCBfRGlzdGFuY2UgX19uLCBpbnB1dF9pdGVyYXRvcl90
YWcpIHsKICB3aGlsZSAoX19uLS0pICsrX19pOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRp
cmVjdGlvbmFsSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNl
KF9CaWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwgCiAgICAgICAgICAg
ICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykgewogIGlmIChfX24gPj0gMCkK
ICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAgZWxzZQogICAgd2hpbGUgKF9fbisrKSAtLV9faTsK
fQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0
YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciYgX19pLCBf
RGlzdGFuY2UgX19uLCAKICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0
b3JfdGFnKSB7CiAgX19pICs9IF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
LCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGFkdmFuY2UoX0lucHV0SXRlcmF0b3ImIF9f
aSwgX0Rpc3RhbmNlIF9fbikgewogIF9fYWR2YW5jZShfX2ksIF9fbiwgaXRlcmF0b3JfY2F0ZWdv
cnkoX19pKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFzcyBiYWNrX2luc2Vy
dF9pdGVyYXRvciB7CnByb3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoK
ICB0eXBlZGVmIF9Db250YWluZXIgICAgICAgICAgY29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBv
dXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCAgICAg
ICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZm
ZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlw
ZWRlZiB2b2lkICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKCiAgZXhwbGljaXQgYmFja19pbnNl
cnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7fQogIGJhY2tf
aW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBf
Q29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7IAogICAgY29udGFpbmVyLT5wdXNoX2Jh
Y2soX192YWx1ZSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9y
PF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGJhY2tfaW5zZXJ0
X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBi
YWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJu
ICp0aGlzOyB9Cn07CgojIDM3OCAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t
c29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgi
IDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KaW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJh
dG9yPF9Db250YWluZXI+IGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KSB7CiAgcmV0dXJu
IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfQ29udGFpbmVyPgpjbGFzcyBmcm9udF9pbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAg
X0NvbnRhaW5lciogY29udGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyICAgICAg
ICAgIGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRv
cl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0
eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9p
ZCAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBy
ZWZlcmVuY2U7CgogIGV4cGxpY2l0IGZyb250X2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBf
X3gpIDogY29udGFpbmVyKCZfX3gpIHt9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWlu
ZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBf
X3ZhbHVlKSB7IAogICAgY29udGFpbmVyLT5wdXNoX2Zyb250KF9fdmFsdWUpOwogICAgcmV0dXJu
ICp0aGlzOwogIH0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9y
KigpIHsgcmV0dXJuICp0aGlzOyB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+
JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8
X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQp9OwoKIyA0MTcg
Ii9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8u
Li8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCgoKdGVtcGxhdGUgPGNsYXNz
IF9Db250YWluZXI+CmlubGluZSBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gZnJv
bnRfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KSB7CiAgcmV0dXJuIGZyb250X2luc2VydF9pdGVy
YXRvcjxfQ29udGFpbmVyPihfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KY2xh
c3MgaW5zZXJ0X2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Db250YWluZXIqIGNvbnRhaW5lcjsK
ICB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBpdGVyOwpwdWJsaWM6CiAgdHlwZWRlZiBf
Q29udGFpbmVyICAgICAgICAgIGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJh
dG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAg
dmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBl
OwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAg
ICAgICAgICAgICAgICByZWZlcmVuY2U7CgogIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBf
X3gsIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9faSkgCiAgICA6IGNvbnRhaW5lcigm
X194KSwgaXRlcihfX2kpIHt9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJh
dG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7IAog
ICAgaXRlciA9IGNvbnRhaW5lci0+aW5zZXJ0KGl0ZXIsIF9fdmFsdWUpOwogICAgKytpdGVyOwog
ICAgcmV0dXJuICp0aGlzOwogIH0KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJh
dG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBv
cGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l
cj4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQp9OwoKIyA0NTkgIi9vcHQvbXZw
bG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCgoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWlu
ZXIsIGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIAppbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4g
aW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194LCBfSXRlcmF0b3IgX19pKQp7CiAgdHlwZWRlZiB0eXBl
bmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBfX2l0ZXI7CiAgcmV0dXJuIGluc2VydF9pdGVyYXRv
cjxfQ29udGFpbmVyPihfX3gsIF9faXRlcihfX2kpKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfQmlk
aXJlY3Rpb25hbEl0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWZlcmVuY2UgPSBfVHAmLCAK
ICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSA9IHB0cmRpZmZfdD4gCgoKCgpjbGFzcyByZXZlcnNl
X2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IgewogIHR5cGVkZWYgcmV2ZXJzZV9iaWRpcmVjdGlvbmFs
X2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIF9UcCwgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1JlZmVyZW5jZSwgX0Rpc3RhbmNlPiAgX1NlbGY7CnBy
b3RlY3RlZDoKICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIGN1cnJlbnQ7CnB1YmxpYzoKICB0eXBl
ZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVk
ZWYgX1RwICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0
YW5jZSAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAg
ICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBfUmVmZXJlbmNlICAgICAgICAg
ICAgICAgICByZWZlcmVuY2U7CgogIHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcigpIHt9
CiAgZXhwbGljaXQgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKF9CaWRpcmVjdGlvbmFs
SXRlcmF0b3IgX194KQogICAgOiBjdXJyZW50KF9feCkge30KICBfQmlkaXJlY3Rpb25hbEl0ZXJh
dG9yIGJhc2UoKSBjb25zdCB7IHJldHVybiBjdXJyZW50OyB9CiAgX1JlZmVyZW5jZSBvcGVyYXRv
ciooKSBjb25zdCB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fdG1wID0gY3VycmVudDsK
ICAgIHJldHVybiAqLS1fX3RtcDsKICB9CgogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsg
cmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgogIF9TZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1j
dXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewog
ICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsK
ICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gKnRo
aXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlz
OwogICAgKytjdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKCiMgNTUwICIvb3B0L212
cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwoKCnRlbXBsYXRlIDxjbGFzcyBfQmlJdGVy
LCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+CmlubGlu
ZSBib29sIG9wZXJhdG9yPT0oCiAgICBjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0
b3I8X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBfX3gsIAogICAgY29uc3QgcmV2ZXJz
ZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYg
X195KQp7CiAgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsKfQoKCgogCiAKIAogCiAK
CnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmNsYXNzIHJldmVyc2VfaXRlcmF0b3IgCnsKcHJv
dGVjdGVkOgogIF9JdGVyYXRvciBjdXJyZW50OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgICAgICAgIGl0
ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVy
YXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBk
aWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJh
dG9yPjo6cG9pbnRlcgogICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UKICAgICAgICAgIHJlZmVyZW5jZTsKCiAg
dHlwZWRlZiBfSXRlcmF0b3IgaXRlcmF0b3JfdHlwZTsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0
b3I8X0l0ZXJhdG9yPiBfU2VsZjsKCnB1YmxpYzoKICByZXZlcnNlX2l0ZXJhdG9yKCkge30KICBl
eHBsaWNpdCByZXZlcnNlX2l0ZXJhdG9yKGl0ZXJhdG9yX3R5cGUgX194KSA6IGN1cnJlbnQoX194
KSB7fQoKICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IF9TZWxmJiBfX3gpIDogY3VycmVudChfX3gu
Y3VycmVudCkge30KCiAgdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgogIHJldmVyc2VfaXRlcmF0b3Io
Y29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcj4mIF9feCkKICAgIDogY3VycmVudChfX3guYmFz
ZSgpKSB7fQoKICAgIAogIGl0ZXJhdG9yX3R5cGUgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJl
bnQ7IH0KICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgewogICAgX0l0ZXJhdG9yIF9fdG1w
ID0gY3VycmVudDsKICAgIHJldHVybiAqLS1fX3RtcDsKICB9CgogIHBvaW50ZXIgb3BlcmF0b3It
PigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgoKICBfU2VsZiYgb3BlcmF0b3Ir
KygpIHsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0
b3IrKyhpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAtLWN1cnJlbnQ7CiAgICBy
ZXR1cm4gX190bXA7CiAgfQogIF9TZWxmJiBvcGVyYXRvci0tKCkgewogICAgKytjdXJyZW50Owog
ICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvci0tKGludCkgewogICAgX1NlbGYg
X190bXAgPSAqdGhpczsKICAgICsrY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9CgogIF9T
ZWxmIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7CiAgICByZXR1cm4gX1Nl
bGYoY3VycmVudCAtIF9fbik7CiAgfQogIF9TZWxmJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlw
ZSBfX24pIHsKICAgIGN1cnJlbnQgLT0gX19uOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2Vs
ZiBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgewogICAgcmV0dXJuIF9TZWxm
KGN1cnJlbnQgKyBfX24pOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUg
X19uKSB7CiAgICBjdXJyZW50ICs9IF9fbjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgcmVmZXJl
bmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKigqdGhp
cyArIF9fbik7IH0gIAp9OyAKIAp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LCAKICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9f
eSkgewogIHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCByZXZlcnNlX2l0ZXJhdG9y
PF9JdGVyYXRvcj4mIF9feCwgCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0
ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJhc2Uo
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIHJldmVyc2Vf
aXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCm9wZXJhdG9yLShjb25zdCByZXZl
cnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwgCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0
ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiBfX3kuYmFzZSgpIC0gX194LmJhc2Uo
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIHJldmVyc2VfaXRlcmF0b3I8
X0l0ZXJhdG9yPiAKb3BlcmF0b3IrKHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y
Pjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8
X0l0ZXJhdG9yPiYgX194KSB7CiAgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPihf
X3guYmFzZSgpIC0gX19uKTsKfQoKIyA4MDUgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3Bh
cmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVy
YXRvci5oIiAzCgoKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdCA9IHB0cmRp
ZmZfdD4gCmNsYXNzIGlzdHJlYW1faXRlcmF0b3IgewogIGZyaWVuZCBib29sIG9wZXJhdG9yPT0g
PD4gIChjb25zdCBpc3RyZWFtX2l0ZXJhdG9yJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9yJik7CnByb3RlY3RlZDoK
ICBpc3RyZWFtKiBfTV9zdHJlYW07CiAgX1RwIF9NX3ZhbHVlOwogIGJvb2wgX01fZW5kX21hcmtl
cjsKICB2b2lkIF9NX3JlYWQoKSB7CiAgICBfTV9lbmRfbWFya2VyID0gKCpfTV9zdHJlYW0pID8g
dHJ1ZSA6IGZhbHNlOwogICAgaWYgKF9NX2VuZF9tYXJrZXIpICpfTV9zdHJlYW0gPj4gX01fdmFs
dWU7CiAgICBfTV9lbmRfbWFya2VyID0gKCpfTV9zdHJlYW0pID8gdHJ1ZSA6IGZhbHNlOwogIH0K
cHVibGljOgogIHR5cGVkZWYgaW5wdXRfaXRlcmF0b3JfdGFnICBpdGVyYXRvcl9jYXRlZ29yeTsK
ICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0
ICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgY29uc3QgX1RwKiAgICAg
ICAgICBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwJiAgICAgICAgICByZWZlcmVuY2U7Cgog
IGlzdHJlYW1faXRlcmF0b3IoKSA6IF9NX3N0cmVhbSgmY2luKSwgX01fZW5kX21hcmtlcihmYWxz
ZSkge30KICBpc3RyZWFtX2l0ZXJhdG9yKGlzdHJlYW0mIF9fcykgOiBfTV9zdHJlYW0oJl9fcykg
eyBfTV9yZWFkKCk7IH0KICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX01f
dmFsdWU7IH0KCiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRv
ciooKSk7IH0KCiAgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0PiYgb3BlcmF0b3IrKygpIHsg
CiAgICBfTV9yZWFkKCk7IAogICAgcmV0dXJuICp0aGlzOwogIH0KICBpc3RyZWFtX2l0ZXJhdG9y
PF9UcCwgX0Rpc3Q+IG9wZXJhdG9yKysoaW50KSAgewogICAgaXN0cmVhbV9pdGVyYXRvcjxfVHAs
IF9EaXN0PiBfX3RtcCA9ICp0aGlzOwogICAgX01fcmVhZCgpOwogICAgcmV0dXJuIF9fdG1wOwog
IH0KfTsKCiMgODY0ICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
Mi8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwoKCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3RhbmNlPiYgX194LAogICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdGFuY2U+JiBfX3kp
IHsKICByZXR1cm4gKF9feC5fTV9zdHJlYW0gPT0gX195Ll9NX3N0cmVhbSAmJgogICAgICAgICAg
X194Ll9NX2VuZF9tYXJrZXIgPT0gX195Ll9NX2VuZF9tYXJrZXIpIHx8CiAgICAgICAgIF9feC5f
TV9lbmRfbWFya2VyID09IGZhbHNlICYmIF9feS5fTV9lbmRfbWFya2VyID09IGZhbHNlOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBvc3RyZWFtX2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgog
IG9zdHJlYW0qIF9NX3N0cmVhbTsKICBjb25zdCBjaGFyKiBfTV9zdHJpbmc7CnB1YmxpYzoKICB0
eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2
b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAg
ICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRl
cjsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwoKICBvc3RyZWFtX2l0
ZXJhdG9yKG9zdHJlYW0mIF9fcykgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZygwKSB7fQog
IG9zdHJlYW1faXRlcmF0b3Iob3N0cmVhbSYgX19zLCBjb25zdCBjaGFyKiBfX2MpIAogICAgOiBf
TV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZyhfX2MpICB7fQogIG9zdHJlYW1faXRlcmF0b3I8X1Rw
PiYgb3BlcmF0b3I9KGNvbnN0IF9UcCYgX192YWx1ZSkgeyAKICAgICpfTV9zdHJlYW0gPDwgX192
YWx1ZTsKICAgIGlmIChfTV9zdHJpbmcpICpfTV9zdHJlYW0gPDwgX01fc3RyaW5nOwogICAgcmV0
dXJuICp0aGlzOwogIH0KICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKigpIHsgcmV0
dXJuICp0aGlzOyB9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcisrKCkgeyByZXR1
cm4gKnRoaXM7IH0gCiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcisrKGludCkgeyBy
ZXR1cm4gKnRoaXM7IH0gCn07CgojIDkwNyAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJh
dG9yLmgiIDMKCgogCgoKCiAKIAogCiMgMzggIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3Bh
cmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2l0ZXJhdG9y
IiAyIDMKCgoKCiAKIAogCiMgNDQgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3Vu
LXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5o
IiAyIDMKCgoKCmV4dGVybiB2b2lkIF9fb3V0X29mX3JhbmdlIChjb25zdCBjaGFyICopOwpleHRl
cm4gdm9pZCBfX2xlbmd0aF9lcnJvciAoY29uc3QgY2hhciAqKTsKCgoKCgoKCgoKCgoKCgp0ZW1w
bGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cyA9IHN0cmluZ19jaGFyX3RyYWl0czxjaGFy
VD4sCgkgIGNsYXNzIEFsbG9jYXRvciA9IGFsbG9jID4KY2xhc3MgYmFzaWNfc3RyaW5nCnsKcHJp
dmF0ZToKICBzdHJ1Y3QgUmVwIHsKICAgIHNpemVfdCBsZW4sIHJlcywgcmVmOwogICAgYm9vbCBz
ZWxmaXNoOwoKICAgIGNoYXJUKiBkYXRhICgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
clQgKj4odGhpcyArIDEpOyB9CiAgICBjaGFyVCYgb3BlcmF0b3JbXSAoc2l6ZV90IHMpIHsgcmV0
dXJuIGRhdGEgKCkgW3NdOyB9CiAgICBjaGFyVCogZ3JhYiAoKSB7IGlmIChzZWxmaXNoKSByZXR1
cm4gY2xvbmUgKCk7ICsrcmVmOyByZXR1cm4gZGF0YSAoKTsgfQojIDEwOCAiL29wdC9tdnBsb2Nh
bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDMKCiAgICB2b2lkIHJlbGVhc2UgKCkgeyBpZiAoLS1y
ZWYgPT0gMCkgZGVsZXRlIHRoaXM7IH0KCgogICAgaW5saW5lIHN0YXRpYyB2b2lkICogb3BlcmF0
b3IgbmV3IChzaXplX3QsIHNpemVfdCk7CiAgICBpbmxpbmUgc3RhdGljIHZvaWQgb3BlcmF0b3Ig
ZGVsZXRlICh2b2lkICopOwogICAgaW5saW5lIHN0YXRpYyBSZXAqIGNyZWF0ZSAoc2l6ZV90KTsK
ICAgIGNoYXJUKiBjbG9uZSAoKTsKCiAgICBpbmxpbmUgdm9pZCBjb3B5IChzaXplX3QsIGNvbnN0
IGNoYXJUICosIHNpemVfdCk7CiAgICBpbmxpbmUgdm9pZCBtb3ZlIChzaXplX3QsIGNvbnN0IGNo
YXJUICosIHNpemVfdCk7CiAgICBpbmxpbmUgdm9pZCBzZXQgIChzaXplX3QsIGNvbnN0IGNoYXJU
LCAgIHNpemVfdCk7CgogICAgaW5saW5lIHN0YXRpYyBib29sIGV4Y2Vzc19zbG9wIChzaXplX3Qs
IHNpemVfdCk7CiAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBmcm9iX3NpemUgKHNpemVfdCk7Cgog
IHByaXZhdGU6CiAgICBSZXAgJm9wZXJhdG9yPSAoY29uc3QgUmVwICYpOwogIH07CgpwdWJsaWM6
CiAKICB0eXBlZGVmCSAgIHRyYWl0cwkJdHJhaXRzX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSB0
cmFpdHM6OmNoYXJfdHlwZQl2YWx1ZV90eXBlOwogIHR5cGVkZWYJICAgQWxsb2NhdG9yCQlhbGxv
Y2F0b3JfdHlwZTsKCiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlm
Zl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIGNoYXJUJiByZWZlcmVuY2U7CiAgdHlwZWRl
ZiBjb25zdCBjaGFyVCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgY2hhclQqIHBvaW50ZXI7
CiAgdHlwZWRlZiBjb25zdCBjaGFyVCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHBvaW50ZXIg
aXRlcmF0b3I7CiAgdHlwZWRlZiBjb25zdF9wb2ludGVyIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVk
ZWYgOjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVk
ZWYgOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJh
dG9yOwogIHN0YXRpYyBjb25zdCBzaXplX3R5cGUgbnBvcyA9IHN0YXRpY19jYXN0PHNpemVfdHlw
ZT4oLTEpOwoKcHJpdmF0ZToKICBSZXAgKnJlcCAoKSBjb25zdCB7IHJldHVybiByZWludGVycHJl
dF9jYXN0PFJlcCAqPihkYXQpIC0gMTsgfQogIHZvaWQgcmVwdXAgKFJlcCAqcCkgeyByZXAgKCkt
PnJlbGVhc2UgKCk7IGRhdCA9IHAtPmRhdGEgKCk7IH0KCnB1YmxpYzoKICBjb25zdCBjaGFyVCog
ZGF0YSAoKSBjb25zdAogICAgeyByZXR1cm4gcmVwICgpLT5kYXRhKCk7IH0KICBzaXplX3R5cGUg
bGVuZ3RoICgpIGNvbnN0CiAgICB7IHJldHVybiByZXAgKCktPmxlbjsgfQogIHNpemVfdHlwZSBz
aXplICgpIGNvbnN0CiAgICB7IHJldHVybiByZXAgKCktPmxlbjsgfQogIHNpemVfdHlwZSBjYXBh
Y2l0eSAoKSBjb25zdAogICAgeyByZXR1cm4gcmVwICgpLT5yZXM7IH0KICBzaXplX3R5cGUgbWF4
X3NpemUgKCkgY29uc3QKICAgIHsgcmV0dXJuIChucG9zIC0gMSkvc2l6ZW9mIChjaGFyVCk7IH0J
CSAKICBib29sIGVtcHR5ICgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplICgpID09IDA7IH0KCiAK
ICBiYXNpY19zdHJpbmcmIG9wZXJhdG9yPSAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIpCiAgICB7
CiAgICAgIGlmICgmc3RyICE9IHRoaXMpIHsgcmVwICgpLT5yZWxlYXNlICgpOyBkYXQgPSBzdHIu
cmVwICgpLT5ncmFiICgpOyB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgZXhwbGljaXQg
YmFzaWNfc3RyaW5nICgpOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IH0KICBiYXNpY19zdHJpbmcg
KGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyKTogZGF0IChzdHIucmVwICgpLT5ncmFiICgpKSB7IH0K
ICBiYXNpY19zdHJpbmcgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zLCBz
aXplX3R5cGUgbiA9IG5wb3MpCiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsgYXNzaWduIChz
dHIsIHBvcywgbik7IH0KICBiYXNpY19zdHJpbmcgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUg
bikKICAgIDogZGF0IChuaWxSZXAuZ3JhYiAoKSkgeyBhc3NpZ24gKHMsIG4pOyB9CiAgYmFzaWNf
c3RyaW5nIChjb25zdCBjaGFyVCogcykKICAgIDogZGF0IChuaWxSZXAuZ3JhYiAoKSkgeyBhc3Np
Z24gKHMpOyB9CiAgYmFzaWNfc3RyaW5nIChzaXplX3R5cGUgbiwgY2hhclQgYykKICAgIDogZGF0
IChuaWxSZXAuZ3JhYiAoKSkgeyBhc3NpZ24gKG4sIGMpOyB9CgogIHRlbXBsYXRlPGNsYXNzIElu
cHV0SXRlcmF0b3I+CiAgICBiYXNpY19zdHJpbmcoSW5wdXRJdGVyYXRvciBfX2JlZ2luLCBJbnB1
dEl0ZXJhdG9yIF9fZW5kKQoKCgogICAgOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IGFzc2lnbiAo
X19iZWdpbiwgX19lbmQpOyB9CgogIH5iYXNpY19zdHJpbmcgKCkKICAgIHsgcmVwICgpLT5yZWxl
YXNlICgpOyB9CgogIHZvaWQgc3dhcCAoYmFzaWNfc3RyaW5nICZzKSB7IGNoYXJUICpkID0gZGF0
OyBkYXQgPSBzLmRhdDsgcy5kYXQgPSBkOyB9CgogIGJhc2ljX3N0cmluZyYgYXBwZW5kIChjb25z
dCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDAsCgkJCXNpemVfdHlwZSBuID0g
bnBvcykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGxlbmd0aCAoKSwgMCwgc3RyLCBwb3MsIG4pOyB9
CiAgYmFzaWNfc3RyaW5nJiBhcHBlbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbikKICAg
IHsgcmV0dXJuIHJlcGxhY2UgKGxlbmd0aCAoKSwgMCwgcywgbik7IH0KICBiYXNpY19zdHJpbmcm
IGFwcGVuZCAoY29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiBhcHBlbmQgKHMsIHRyYWl0czo6
bGVuZ3RoIChzKSk7IH0KICBiYXNpY19zdHJpbmcmIGFwcGVuZCAoc2l6ZV90eXBlIG4sIGNoYXJU
IGMpCiAgICB7IHJldHVybiByZXBsYWNlIChsZW5ndGggKCksIDAsIG4sIGMpOyB9CgogIHRlbXBs
YXRlPGNsYXNzIElucHV0SXRlcmF0b3I+CiAgICBiYXNpY19zdHJpbmcmIGFwcGVuZChJbnB1dEl0
ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QpCgoKCiAgICB7IHJldHVybiByZXBsYWNl
IChpZW5kICgpLCBpZW5kICgpLCBmaXJzdCwgbGFzdCk7IH0KCiAgdm9pZCBwdXNoX2JhY2soY2hh
clQgX19jKQogIHsgYXBwZW5kKDEsIF9fYyk7IH0KICAKICBiYXNpY19zdHJpbmcmIGFzc2lnbiAo
Y29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSAwLAoJCQlzaXplX3R5cGUg
biA9IG5wb3MpCiAgICB7IHJldHVybiByZXBsYWNlICgwLCBucG9zLCBzdHIsIHBvcywgbik7IH0K
ICBiYXNpY19zdHJpbmcmIGFzc2lnbiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBuKQogICAg
eyByZXR1cm4gcmVwbGFjZSAoMCwgbnBvcywgcywgbik7IH0KICBiYXNpY19zdHJpbmcmIGFzc2ln
biAoY29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiBhc3NpZ24gKHMsIHRyYWl0czo6bGVuZ3Ro
IChzKSk7IH0KICBiYXNpY19zdHJpbmcmIGFzc2lnbiAoc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAg
ICB7IHJldHVybiByZXBsYWNlICgwLCBucG9zLCBuLCBjKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBJ
bnB1dEl0ZXJhdG9yPgogICAgYmFzaWNfc3RyaW5nJiBhc3NpZ24oSW5wdXRJdGVyYXRvciBmaXJz
dCwgSW5wdXRJdGVyYXRvciBsYXN0KQoKCgogICAgeyByZXR1cm4gcmVwbGFjZSAoaWJlZ2luICgp
LCBpZW5kICgpLCBmaXJzdCwgbGFzdCk7IH0KCiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcj0gKGNv
bnN0IGNoYXJUKiBzKQogICAgeyByZXR1cm4gYXNzaWduIChzKTsgfQogIGJhc2ljX3N0cmluZyYg
b3BlcmF0b3I9IChjaGFyVCBjKQogICAgeyByZXR1cm4gYXNzaWduICgxLCBjKTsgfQoKICBiYXNp
Y19zdHJpbmcmIG9wZXJhdG9yKz0gKGNvbnN0IGJhc2ljX3N0cmluZyYgcmhzKQogICAgeyByZXR1
cm4gYXBwZW5kIChyaHMpOyB9CiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcis9IChjb25zdCBjaGFy
VCogcykKICAgIHsgcmV0dXJuIGFwcGVuZCAocyk7IH0KICBiYXNpY19zdHJpbmcmIG9wZXJhdG9y
Kz0gKGNoYXJUIGMpCiAgICB7IHJldHVybiBhcHBlbmQgKDEsIGMpOyB9CgogIGJhc2ljX3N0cmlu
ZyYgaW5zZXJ0IChzaXplX3R5cGUgcG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsCgkJCXNp
emVfdHlwZSBwb3MyID0gMCwgc2l6ZV90eXBlIG4gPSBucG9zKQogICAgeyByZXR1cm4gcmVwbGFj
ZSAocG9zMSwgMCwgc3RyLCBwb3MyLCBuKTsgfQogIGJhc2ljX3N0cmluZyYgaW5zZXJ0IChzaXpl
X3R5cGUgcG9zLCBjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIG4pCiAgICB7IHJldHVybiByZXBs
YWNlIChwb3MsIDAsIHMsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiBpbnNlcnQgKHNpemVfdHlwZSBw
b3MsIGNvbnN0IGNoYXJUKiBzKQogICAgeyByZXR1cm4gaW5zZXJ0IChwb3MsIHMsIHRyYWl0czo6
bGVuZ3RoIChzKSk7IH0KICBiYXNpY19zdHJpbmcmIGluc2VydCAoc2l6ZV90eXBlIHBvcywgc2l6
ZV90eXBlIG4sIGNoYXJUIGMpCiAgICB7IHJldHVybiByZXBsYWNlIChwb3MsIDAsIG4sIGMpOyB9
CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIHAsIGNoYXJUIGMpCiAgICB7IHNpemVfdHlwZSBf
X28gPSBwIC0gaWJlZ2luICgpOwogICAgICBpbnNlcnQgKHAgLSBpYmVnaW4gKCksIDEsIGMpOyBz
ZWxmaXNoICgpOwogICAgICByZXR1cm4gaWJlZ2luICgpICsgX19vOyB9CiAgaXRlcmF0b3IgaW5z
ZXJ0KGl0ZXJhdG9yIHAsIHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgeyBzaXplX3R5cGUgX19v
ID0gcCAtIGliZWdpbiAoKTsKICAgICAgaW5zZXJ0IChwIC0gaWJlZ2luICgpLCBuLCBjKTsgc2Vs
ZmlzaCAoKTsKICAgICAgcmV0dXJuIGliZWdpbiAoKSArIF9fbzsgfQoKICB0ZW1wbGF0ZTxjbGFz
cyBJbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgcCwgSW5wdXRJdGVyYXRv
ciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0KQoKCgogICAgeyByZXBsYWNlIChwLCBwLCBmaXJz
dCwgbGFzdCk7IH0KCiAgYmFzaWNfc3RyaW5nJiBlcmFzZSAoc2l6ZV90eXBlIHBvcyA9IDAsIHNp
emVfdHlwZSBuID0gbnBvcykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKHBvcywgbiwgKHNpemVfdHlw
ZSkwLCAoY2hhclQpMCk7IH0KICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBwKQogICAgeyBzaXpl
X3R5cGUgX19vID0gcCAtIGJlZ2luKCk7CiAgICAgIHJlcGxhY2UgKF9fbywgMSwgKHNpemVfdHlw
ZSkwLCAoY2hhclQpMCk7IHNlbGZpc2ggKCk7CiAgICAgIHJldHVybiBpYmVnaW4oKSArIF9fbzsg
fQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIGYsIGl0ZXJhdG9yIGwpCiAgICB7IHNpemVfdHlw
ZSBfX28gPSBmIC0gaWJlZ2luKCk7CiAgICAgIHJlcGxhY2UgKF9fbywgbC1mLCAoc2l6ZV90eXBl
KTAsIChjaGFyVCkwKTtzZWxmaXNoICgpOwogICAgICByZXR1cm4gaWJlZ2luKCkgKyBfX287IH0K
CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChzaXplX3R5cGUgcG9zMSwgc2l6ZV90eXBlIG4xLCBj
b25zdCBiYXNpY19zdHJpbmcmIHN0ciwKCQkJIHNpemVfdHlwZSBwb3MyID0gMCwgc2l6ZV90eXBl
IG4yID0gbnBvcyk7CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChzaXplX3R5cGUgcG9zLCBzaXpl
X3R5cGUgbjEsIGNvbnN0IGNoYXJUKiBzLAoJCQkgc2l6ZV90eXBlIG4yKTsKICBiYXNpY19zdHJp
bmcmIHJlcGxhY2UgKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuMSwgY29uc3QgY2hhclQqIHMp
CiAgICB7IHJldHVybiByZXBsYWNlIChwb3MsIG4xLCBzLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9
CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbjEsIHNp
emVfdHlwZSBuMiwgY2hhclQgYyk7CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChzaXplX3R5cGUg
cG9zLCBzaXplX3R5cGUgbiwgY2hhclQgYykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKHBvcywgbiwg
MSwgYyk7IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJhdG9yIGkxLCBpdGVyYXRvciBp
MiwgY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIpCiAgICB7IHJldHVybiByZXBsYWNlIChpMSAtIGli
ZWdpbiAoKSwgaTIgLSBpMSwgc3RyKTsgfQogIGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoaXRlcmF0
b3IgaTEsIGl0ZXJhdG9yIGkyLCBjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIG4pCiAgICB7IHJl
dHVybiByZXBsYWNlIChpMSAtIGliZWdpbiAoKSwgaTIgLSBpMSwgcywgbik7IH0KICBiYXNpY19z
dHJpbmcmIHJlcGxhY2UgKGl0ZXJhdG9yIGkxLCBpdGVyYXRvciBpMiwgY29uc3QgY2hhclQqIHMp
CiAgICB7IHJldHVybiByZXBsYWNlIChpMSAtIGliZWdpbiAoKSwgaTIgLSBpMSwgcyk7IH0KICBi
YXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJhdG9yIGkxLCBpdGVyYXRvciBpMiwgc2l6ZV90eXBl
IG4sIGNoYXJUIGMpCiAgICB7IHJldHVybiByZXBsYWNlIChpMSAtIGliZWdpbiAoKSwgaTIgLSBp
MSwgbiwgYyk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KICAgIGJhc2ljX3N0
cmluZyYgcmVwbGFjZShpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsCgkJCSAgSW5wdXRJdGVyYXRv
ciBqMSwgSW5wdXRJdGVyYXRvciBqMik7CgoKCgoKcHJpdmF0ZToKICBzdGF0aWMgY2hhclQgZW9z
ICgpIHsgcmV0dXJuIHRyYWl0czo6ZW9zICgpOyB9CiAgdm9pZCB1bmlxdWUgKCkgeyBpZiAocmVw
ICgpLT5yZWYgPiAxKSBhbGxvYyAobGVuZ3RoICgpLCB0cnVlKTsgfQogIHZvaWQgc2VsZmlzaCAo
KSB7IHVuaXF1ZSAoKTsgcmVwICgpLT5zZWxmaXNoID0gdHJ1ZTsgfQoKcHVibGljOgogIGNoYXJU
IG9wZXJhdG9yW10gKHNpemVfdHlwZSBwb3MpIGNvbnN0CiAgICB7CiAgICAgIGlmIChwb3MgPT0g
bGVuZ3RoICgpKQoJcmV0dXJuIGVvcyAoKTsKICAgICAgcmV0dXJuIGRhdGEgKClbcG9zXTsKICAg
IH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10gKHNpemVfdHlwZSBwb3MpCiAgICB7IHNlbGZpc2gg
KCk7IHJldHVybiAoKnJlcCAoKSlbcG9zXTsgfQoKICByZWZlcmVuY2UgYXQgKHNpemVfdHlwZSBw
b3MpCiAgICB7CiAgICAgIGRvIHsgaWYgKCBwb3MgPj0gbGVuZ3RoICgpICkgX19vdXRfb2ZfcmFu
Z2UgKCJwb3MgPj0gbGVuZ3RoICgpIik7IH0gd2hpbGUgKDApIDsKICAgICAgcmV0dXJuICgqdGhp
cylbcG9zXTsKICAgIH0KICBjb25zdF9yZWZlcmVuY2UgYXQgKHNpemVfdHlwZSBwb3MpIGNvbnN0
CiAgICB7CiAgICAgIGRvIHsgaWYgKCBwb3MgPj0gbGVuZ3RoICgpICkgX19vdXRfb2ZfcmFuZ2Ug
KCJwb3MgPj0gbGVuZ3RoICgpIik7IH0gd2hpbGUgKDApIDsKICAgICAgcmV0dXJuIGRhdGEgKClb
cG9zXTsKICAgIH0KCnByaXZhdGU6CiAgdm9pZCB0ZXJtaW5hdGUgKCkgY29uc3QKICAgIHsgdHJh
aXRzOjphc3NpZ24gKCgqcmVwICgpKVtsZW5ndGggKCldLCBlb3MgKCkpOyB9CgpwdWJsaWM6CiAg
Y29uc3QgY2hhclQqIGNfc3RyICgpIGNvbnN0CiAgICB7IGlmIChsZW5ndGggKCkgPT0gMCkgcmV0
dXJuICIiOyB0ZXJtaW5hdGUgKCk7IHJldHVybiBkYXRhICgpOyB9CiAgdm9pZCByZXNpemUgKHNp
emVfdHlwZSBuLCBjaGFyVCBjKTsKICB2b2lkIHJlc2l6ZSAoc2l6ZV90eXBlIG4pCiAgICB7IHJl
c2l6ZSAobiwgZW9zICgpKTsgfQogIHZvaWQgcmVzZXJ2ZSAoc2l6ZV90eXBlKSB7IH0KCiAgc2l6
ZV90eXBlIGNvcHkgKGNoYXJUKiBzLCBzaXplX3R5cGUgbiwgc2l6ZV90eXBlIHBvcyA9IDApIGNv
bnN0OwoKICBzaXplX3R5cGUgZmluZCAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlw
ZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gZmluZCAoc3RyLmRhdGEoKSwgcG9zLCBzdHIu
bGVuZ3RoKCkpOyB9CiAgc2l6ZV90eXBlIGZpbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUg
cG9zLCBzaXplX3R5cGUgbikgY29uc3Q7CiAgc2l6ZV90eXBlIGZpbmQgKGNvbnN0IGNoYXJUKiBz
LCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3QKICAgIHsgcmV0dXJuIGZpbmQgKHMsIHBvcywgdHJh
aXRzOjpsZW5ndGggKHMpKTsgfQogIHNpemVfdHlwZSBmaW5kIChjaGFyVCBjLCBzaXplX3R5cGUg
cG9zID0gMCkgY29uc3Q7CgogIHNpemVfdHlwZSByZmluZCAoY29uc3QgYmFzaWNfc3RyaW5nJiBz
dHIsIHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1cm4gcmZpbmQgKHN0ci5k
YXRhKCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNpemVfdHlwZSByZmluZCAoY29uc3QgY2hh
clQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsKICBzaXplX3R5cGUgcmZp
bmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QKICAgIHsgcmV0
dXJuIHJmaW5kIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBzaXplX3R5cGUgcmZp
bmQgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25zdDsKCiAgc2l6ZV90eXBlIGZp
bmRfZmlyc3Rfb2YgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gMCkg
Y29uc3QKICAgIHsgcmV0dXJuIGZpbmRfZmlyc3Rfb2YgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxl
bmd0aCgpKTsgfQogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X29mIChjb25zdCBjaGFyVCogcywgc2l6
ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0OwogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X29m
IChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7IHJldHVybiBm
aW5kX2ZpcnN0X29mIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBzaXplX3R5cGUg
ZmluZF9maXJzdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7IHJl
dHVybiBmaW5kIChjLCBwb3MpOyB9CgogIHNpemVfdHlwZSBmaW5kX2xhc3Rfb2YgKGNvbnN0IGJh
c2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QKICAgIHsgcmV0dXJu
IGZpbmRfbGFzdF9vZiAoc3RyLmRhdGEoKSwgcG9zLCBzdHIubGVuZ3RoKCkpOyB9CiAgc2l6ZV90
eXBlIGZpbmRfbGFzdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlw
ZSBuKSBjb25zdDsKICBzaXplX3R5cGUgZmluZF9sYXN0X29mIChjb25zdCBjaGFyVCogcywgc2l6
ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVybiBmaW5kX2xhc3Rfb2YgKHMsIHBv
cywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIHNpemVfdHlwZSBmaW5kX2xhc3Rfb2YgKGNoYXJU
IGMsIHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1cm4gcmZpbmQgKGMsIHBv
cyk7IH0KCiAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfbm90X29mIChjb25zdCBiYXNpY19zdHJpbmcm
IHN0ciwgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7IHJldHVybiBmaW5kX2ZpcnN0X25v
dF9vZiAoc3RyLmRhdGEoKSwgcG9zLCBzdHIubGVuZ3RoKCkpOyB9CiAgc2l6ZV90eXBlIGZpbmRf
Zmlyc3Rfbm90X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4p
IGNvbnN0OwogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X25vdF9vZiAoY29uc3QgY2hhclQqIHMsIHNp
emVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gZmluZF9maXJzdF9ub3Rfb2YgKHMs
IHBvcywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X25vdF9v
ZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0OwoKICBzaXplX3R5cGUgZmluZF9s
YXN0X25vdF9vZiAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSBucG9z
KSBjb25zdAogICAgeyByZXR1cm4gZmluZF9sYXN0X25vdF9vZiAoc3RyLmRhdGEoKSwgcG9zLCBz
dHIubGVuZ3RoKCkpOyB9CiAgc2l6ZV90eXBlIGZpbmRfbGFzdF9ub3Rfb2YgKGNvbnN0IGNoYXJU
KiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3Q7CiAgc2l6ZV90eXBlIGZpbmRf
bGFzdF9ub3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QK
ICAgIHsgcmV0dXJuIGZpbmRfbGFzdF9ub3Rfb2YgKHMsIHBvcywgdHJhaXRzOjpsZW5ndGggKHMp
KTsgfQogIHNpemVfdHlwZSBmaW5kX2xhc3Rfbm90X29mIChjaGFyVCBjLCBzaXplX3R5cGUgcG9z
ID0gbnBvcykgY29uc3Q7CgogIGJhc2ljX3N0cmluZyBzdWJzdHIgKHNpemVfdHlwZSBwb3MgPSAw
LCBzaXplX3R5cGUgbiA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVybiBiYXNpY19zdHJpbmcgKCp0
aGlzLCBwb3MsIG4pOyB9CgogIGludCBjb21wYXJlIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwg
c2l6ZV90eXBlIHBvcyA9IDAsIHNpemVfdHlwZSBuID0gbnBvcykgY29uc3Q7CiAgIAogIGludCBj
b21wYXJlIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0
OwogIGludCBjb21wYXJlIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0
CiAgICB7IHJldHVybiBjb21wYXJlIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KCiAg
aXRlcmF0b3IgYmVnaW4gKCkgeyBzZWxmaXNoICgpOyByZXR1cm4gJigqdGhpcylbMF07IH0KICBp
dGVyYXRvciBlbmQgKCkgeyBzZWxmaXNoICgpOyByZXR1cm4gJigqdGhpcylbbGVuZ3RoICgpXTsg
fQoKcHJpdmF0ZToKICBpdGVyYXRvciBpYmVnaW4gKCkgY29uc3QgeyByZXR1cm4gJigqcmVwICgp
KVswXTsgfQogIGl0ZXJhdG9yIGllbmQgKCkgY29uc3QgeyByZXR1cm4gJigqcmVwICgpKVtsZW5n
dGggKCldOyB9CgpwdWJsaWM6CiAgY29uc3RfaXRlcmF0b3IgYmVnaW4gKCkgY29uc3QgeyByZXR1
cm4gaWJlZ2luICgpOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kICgpIGNvbnN0IHsgcmV0dXJuIGll
bmQgKCk7IH0KCiAgcmV2ZXJzZV9pdGVyYXRvciAgICAgICByYmVnaW4oKSB7IHJldHVybiByZXZl
cnNlX2l0ZXJhdG9yIChlbmQgKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4o
KSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvciAoZW5kICgpKTsgfQog
IHJldmVyc2VfaXRlcmF0b3IgICAgICAgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3Ig
KGJlZ2luICgpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0CiAgICB7
IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIChiZWdpbiAoKSk7IH0KCnByaXZhdGU6CiAg
dm9pZCBhbGxvYyAoc2l6ZV90eXBlIHNpemUsIGJvb2wgc2F2ZSk7CiAgc3RhdGljIHNpemVfdHlw
ZSBfZmluZCAoY29uc3QgY2hhclQqIHB0ciwgY2hhclQgYywgc2l6ZV90eXBlIHhwb3MsIHNpemVf
dHlwZSBsZW4pOwogIGlubGluZSBib29sIGNoZWNrX3JlYWxsb2MgKHNpemVfdHlwZSBzKSBjb25z
dDsKCiAgc3RhdGljIFJlcCBuaWxSZXA7CiAgY2hhclQgKmRhdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xh
c3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPiB0ZW1wbGF0ZSA8Y2xhc3Mg
SW5wdXRJdGVyYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBi
YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZXBsYWNlIChpdGVyYXRv
ciBpMSwgaXRlcmF0b3IgaTIsIElucHV0SXRlcmF0b3IgajEsIElucHV0SXRlcmF0b3IgajIpCgoK
CgoKewogIGNvbnN0IHNpemVfdHlwZSBsZW4gPSBsZW5ndGggKCk7CiAgc2l6ZV90eXBlIHBvcyA9
IGkxIC0gaWJlZ2luICgpOwogIHNpemVfdHlwZSBuMSA9IGkyIC0gaTE7CiAgc2l6ZV90eXBlIG4y
ID0gajIgLSBqMTsKCiAgZG8geyBpZiAoIHBvcyA+IGxlbiApIF9fb3V0X29mX3JhbmdlICgicG9z
ID4gbGVuIik7IH0gd2hpbGUgKDApIDsKICBpZiAobjEgPiBsZW4gLSBwb3MpCiAgICBuMSA9IGxl
biAtIHBvczsKICBkbyB7IGlmICggbGVuIC0gbjEgPiBtYXhfc2l6ZSAoKSAtIG4yICkgX19sZW5n
dGhfZXJyb3IgKCJsZW4gLSBuMSA+IG1heF9zaXplICgpIC0gbjIiKTsgfSB3aGlsZSAoMCkgOwog
IHNpemVfdCBuZXdsZW4gPSBsZW4gLSBuMSArIG4yOwoKICBpZiAoY2hlY2tfcmVhbGxvYyAobmV3
bGVuKSkKICAgIHsKICAgICAgUmVwICpwID0gUmVwOjpjcmVhdGUgKG5ld2xlbik7CiAgICAgIHAt
PmNvcHkgKDAsIGRhdGEgKCksIHBvcyk7CiAgICAgIHAtPmNvcHkgKHBvcyArIG4yLCBkYXRhICgp
ICsgcG9zICsgbjEsIGxlbiAtIChwb3MgKyBuMSkpOwogICAgICBmb3IgKDsgajEgIT0gajI7ICsr
ajEsICsrcG9zKQoJdHJhaXRzOjphc3NpZ24gKCgqcClbcG9zXSwgKmoxKTsKICAgICAgcmVwdXAg
KHApOwogICAgfQogIGVsc2UKICAgIHsKICAgICAgcmVwICgpLT5tb3ZlIChwb3MgKyBuMiwgZGF0
YSAoKSArIHBvcyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsKICAgICAgZm9yICg7IGoxICE9IGoy
OyArK2oxLCArK3BvcykKCXRyYWl0czo6YXNzaWduICgoKnJlcCAoKSlbcG9zXSwgKmoxKTsKICAg
IH0KICByZXAgKCktPmxlbiA9IG5ld2xlbjsKCiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYmFzaWNf
c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Cm9wZXJhdG9yKyAoY29uc3QgYmFzaWNf
c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsCgkgICBjb25zdCBiYXNpY19z
dHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIGJhc2ljX3N0cmluZyA8
Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiBzdHIgKGxocyk7CiAgc3RyLmFwcGVuZCAocmhzKTsK
ICByZXR1cm4gc3RyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xh
c3MgQWxsb2NhdG9yPgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0
b3I+Cm9wZXJhdG9yKyAoY29uc3QgY2hhclQqIGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFy
VCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp
dHMsIEFsbG9jYXRvcj4gc3RyIChsaHMpOwogIHN0ci5hcHBlbmQgKHJocyk7CiAgcmV0dXJuIHN0
cjsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRv
cj4KaW5saW5lIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPgpvcGVyYXRv
cisgKGNoYXJUIGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0
b3I+JiByaHMpCnsKICBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4gc3Ry
ICgxLCBsaHMpOwogIHN0ci5hcHBlbmQgKHJocyk7CiAgcmV0dXJuIHN0cjsKfQoKdGVtcGxhdGUg
PGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJhc2lj
X3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPgpvcGVyYXRvcisgKGNvbnN0IGJhc2lj
X3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhz
KQp7CiAgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+IHN0ciAobGhzKTsK
ICBzdHIuYXBwZW5kIChyaHMpOwogIHJldHVybiBzdHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFy
VCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcgPGNo
YXJULCB0cmFpdHMsIEFsbG9jYXRvcj4Kb3BlcmF0b3IrIChjb25zdCBiYXNpY19zdHJpbmcgPGNo
YXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY2hhclQgcmhzKQp7CiAgYmFzaWNfc3RyaW5n
IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+IHN0ciAobGhzKTsKICBzdHIuYXBwZW5kICgxLCBy
aHMpOwogIHJldHVybiBzdHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRz
LCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPT0gKGNvbnN0IGJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAoJICAgIGNvbnN0IGJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChsaHMuY29t
cGFyZSAocmhzKSA9PSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMs
IGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PSAoY29uc3QgY2hhclQqIGxo
cywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsK
ICByZXR1cm4gKHJocy5jb21wYXJlIChsaHMpID09IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hh
clQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj09
IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29u
c3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPT0gMCk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGlu
ZSBib29sCm9wZXJhdG9yIT0gKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8
Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChyaHMuY29tcGFyZSAo
bGhzKSAhPSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNz
IEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPSAoY29uc3QgYmFzaWNfc3RyaW5nIDxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0IGNoYXJUKiByaHMpCnsKICByZXR1
cm4gKGxocy5jb21wYXJlIChyaHMpICE9IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNs
YXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjwgKGNvbnN0
IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAoJICAgIGNvbnN0
IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJu
IChsaHMuY29tcGFyZSAocmhzKSA8IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNz
IHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjwgKGNvbnN0IGNo
YXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYg
cmhzKQp7CiAgcmV0dXJuIChyaHMuY29tcGFyZSAobGhzKSA+IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVy
YXRvcjwgKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhz
LCBjb25zdCBjaGFyVCogcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA8IDApOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpp
bmxpbmUgYm9vbApvcGVyYXRvcj4gKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmlu
ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChyaHMuY29tcGFy
ZSAobGhzKSA8IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xh
c3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj4gKGNvbnN0IGJhc2ljX3N0cmluZyA8
Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7CiAgcmV0
dXJuIChsaHMuY29tcGFyZSAocmhzKSA+IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNs
YXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjw9IChjb25z
dCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv
cj4mIHJocykKewogIHJldHVybiAocmhzLmNvbXBhcmUgKGxocykgPj0gMCk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29s
Cm9wZXJhdG9yPD0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y
PiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA8
PSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9j
YXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PSAoY29uc3QgY2hhclQqIGxocywgY29uc3QgYmFz
aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKHJo
cy5jb21wYXJlIChsaHMpIDw9IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRy
YWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj49IChjb25zdCBiYXNp
Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJo
cykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPj0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJh
dG9yIT0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhz
LAoJICAgIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhz
KQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSAhPSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0
b3I+IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywK
CSAgIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7
CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA+IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hh
clQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjw9
IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKCSAg
ICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewog
IHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPD0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFy
VCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPj0g
KGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAoJICAg
IGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAg
cmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA+PSAwKTsKfQoKY2xhc3MgaXN0cmVhbTsgY2xhc3Mg
b3N0cmVhbTsKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9j
YXRvcj4gaXN0cmVhbSYKb3BlcmF0b3I+PiAoaXN0cmVhbSYsIGJhc2ljX3N0cmluZyA8Y2hhclQs
IHRyYWl0cywgQWxsb2NhdG9yPiYpOwp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0
cywgY2xhc3MgQWxsb2NhdG9yPiBvc3RyZWFtJgpvcGVyYXRvcjw8IChvc3RyZWFtJiwgY29uc3Qg
YmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Jik7CnRlbXBsYXRlIDxjbGFz
cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+IGlzdHJlYW0mCmdldGxpbmUg
KGlzdHJlYW0mLCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mLCBjaGFy
VCBkZWxpbSA9ICdcbicpOwoKfSAgCgojIDEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3Bh
cmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0
cmluZy5jYyIgMSAzCiAKIAoKIAogCiAKIAogCgogCiAKIAogCgogCiAKIAoKIAogCiAKIAogCgog
CiAKCmV4dGVybiAiQysrIiB7CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBj
bGFzcyBBbGxvY2F0b3I+CmlubGluZSB2b2lkICogYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+OjpSZXA6OgpvcGVyYXRvciBuZXcgKHNpemVfdCBzLCBzaXplX3QgZXh0cmEp
CnsKICByZXR1cm4gQWxsb2NhdG9yOjphbGxvY2F0ZShzICsgZXh0cmEgKiBzaXplb2YgKGNoYXJU
KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0
b3I+CmlubGluZSB2b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6
UmVwOjoKb3BlcmF0b3IgZGVsZXRlICh2b2lkICogcHRyKQp7CiAgQWxsb2NhdG9yOjpkZWFsbG9j
YXRlKHB0ciwgc2l6ZW9mKFJlcCkgKwoJCQlyZWludGVycHJldF9jYXN0PFJlcCAqPihwdHIpLT5y
ZXMgKgoJCQlzaXplb2YgKGNoYXJUKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3Mg
dHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBzaXplX3QgYmFzaWNfc3RyaW5nIDxjaGFy
VCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6Ogpmcm9iX3NpemUgKHNpemVfdCBzKQp7CiAgc2l6
ZV90IGkgPSAxNjsKICB3aGlsZSAoaSA8IHMpIGkgKj0gMjsKICByZXR1cm4gaTsKfQoKdGVtcGxh
dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJh
c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwICoKYmFzaWNfc3RyaW5n
IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6OgpjcmVhdGUgKHNpemVfdCBleHRyYSkK
ewogIGV4dHJhID0gZnJvYl9zaXplIChleHRyYSArIDEpOwogIFJlcCAqcCA9IG5ldyAoZXh0cmEp
IFJlcDsKICBwLT5yZXMgPSBleHRyYTsKICBwLT5yZWYgPSAxOwogIHAtPnNlbGZpc2ggPSBmYWxz
ZTsKICByZXR1cm4gcDsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNs
YXNzIEFsbG9jYXRvcj4KY2hhclQgKiBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj46OlJlcDo6CmNsb25lICgpCnsKICBSZXAgKnAgPSBSZXA6OmNyZWF0ZSAobGVuKTsKICBw
LT5jb3B5ICgwLCBkYXRhICgpLCBsZW4pOwogIHAtPmxlbiA9IGxlbjsKICByZXR1cm4gcC0+ZGF0
YSAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9j
YXRvcj4KaW5saW5lIGJvb2wgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
OjpSZXA6OgpleGNlc3Nfc2xvcCAoc2l6ZV90IHMsIHNpemVfdCByKQp7CiAgcmV0dXJuIDIgKiAo
cyA8PSAxNiA/IDE2IDogcykgPCByOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRy
YWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbCBiYXNpY19zdHJpbmcgPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj46OgpjaGVja19yZWFsbG9jIChiYXNpY19zdHJpbmc6OnNpemVfdHlw
ZSBzKSBjb25zdAp7CiAgcyArPSBzaXplb2YgKGNoYXJUKTsKICByZXAgKCktPnNlbGZpc2ggPSBm
YWxzZTsKICByZXR1cm4gKHJlcCAoKS0+cmVmID4gMQoJICB8fCBzID4gY2FwYWNpdHkgKCkKCSAg
fHwgUmVwOjpleGNlc3Nfc2xvcCAocywgY2FwYWNpdHkgKCkpKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4Kdm9pZCBiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgphbGxvYyAoYmFzaWNfc3RyaW5nOjpzaXplX3R5
cGUgX19zaXplLCBib29sIF9fc2F2ZSkKewogIGlmICghIGNoZWNrX3JlYWxsb2MgKF9fc2l6ZSkp
CiAgICByZXR1cm47CgogIFJlcCAqcCA9IFJlcDo6Y3JlYXRlIChfX3NpemUpOwoKICBpZiAoX19z
YXZlKQogICAgewogICAgICBwLT5jb3B5ICgwLCBkYXRhICgpLCBsZW5ndGggKCkpOwogICAgICBw
LT5sZW4gPSBsZW5ndGggKCk7CiAgICB9CiAgZWxzZQogICAgcC0+bGVuID0gMDsKCiAgcmVwdXAg
KHApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh
dG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mCmJhc2ljX3N0cmlu
ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CnJlcGxhY2UgKHNpemVfdHlwZSBwb3MxLCBz
aXplX3R5cGUgbjEsCgkgY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MyLCBz
aXplX3R5cGUgbjIpCnsKICBjb25zdCBzaXplX3QgbGVuMiA9IHN0ci5sZW5ndGggKCk7CgogIGlm
IChwb3MxID09IDAgJiYgbjEgPj0gbGVuZ3RoICgpICYmIHBvczIgPT0gMCAmJiBuMiA+PSBsZW4y
KQogICAgcmV0dXJuIG9wZXJhdG9yPSAoc3RyKTsKCiAgZG8geyBpZiAoIHBvczIgPiBsZW4yICkg
X19vdXRfb2ZfcmFuZ2UgKCJwb3MyID4gbGVuMiIpOyB9IHdoaWxlICgwKSA7CgogIGlmIChuMiA+
IGxlbjIgLSBwb3MyKQogICAgbjIgPSBsZW4yIC0gcG9zMjsKCiAgcmV0dXJuIHJlcGxhY2UgKHBv
czEsIG4xLCBzdHIuZGF0YSAoKSArIHBvczIsIG4yKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJU
LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIHZvaWQgYmFzaWNfc3RyaW5n
IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6Ogpjb3B5IChzaXplX3QgcG9zLCBjb25z
dCBjaGFyVCAqcywgc2l6ZV90IG4pCnsKICBpZiAobikKICAgIHRyYWl0czo6Y29weSAoZGF0YSAo
KSArIHBvcywgcywgbik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBj
bGFzcyBBbGxvY2F0b3I+CmlubGluZSB2b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg
QWxsb2NhdG9yPjo6UmVwOjoKbW92ZSAoc2l6ZV90IHBvcywgY29uc3QgY2hhclQgKnMsIHNpemVf
dCBuKQp7CiAgaWYgKG4pCiAgICB0cmFpdHM6Om1vdmUgKGRhdGEgKCkgKyBwb3MsIHMsIG4pOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpi
YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mCmJhc2ljX3N0cmluZyA8Y2hh
clQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CnJlcGxhY2UgKHNpemVfdHlwZSBwb3MsIHNpemVfdHlw
ZSBuMSwgY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBuMikKewogIGNvbnN0IHNpemVfdHlwZSBs
ZW4gPSBsZW5ndGggKCk7CiAgZG8geyBpZiAoIHBvcyA+IGxlbiApIF9fb3V0X29mX3JhbmdlICgi
cG9zID4gbGVuIik7IH0gd2hpbGUgKDApIDsKICBpZiAobjEgPiBsZW4gLSBwb3MpCiAgICBuMSA9
IGxlbiAtIHBvczsKICBkbyB7IGlmICggbGVuIC0gbjEgPiBtYXhfc2l6ZSAoKSAtIG4yICkgX19s
ZW5ndGhfZXJyb3IgKCJsZW4gLSBuMSA+IG1heF9zaXplICgpIC0gbjIiKTsgfSB3aGlsZSAoMCkg
OwogIHNpemVfdCBuZXdsZW4gPSBsZW4gLSBuMSArIG4yOwoKICBpZiAoY2hlY2tfcmVhbGxvYyAo
bmV3bGVuKSkKICAgIHsKICAgICAgUmVwICpwID0gUmVwOjpjcmVhdGUgKG5ld2xlbik7CiAgICAg
IHAtPmNvcHkgKDAsIGRhdGEgKCksIHBvcyk7CiAgICAgIHAtPmNvcHkgKHBvcyArIG4yLCBkYXRh
ICgpICsgcG9zICsgbjEsIGxlbiAtIChwb3MgKyBuMSkpOwogICAgICBwLT5jb3B5IChwb3MsIHMs
IG4yKTsKICAgICAgcmVwdXAgKHApOwogICAgfQogIGVsc2UKICAgIHsKICAgICAgcmVwICgpLT5t
b3ZlIChwb3MgKyBuMiwgZGF0YSAoKSArIHBvcyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsKICAg
ICAgcmVwICgpLT5jb3B5IChwb3MsIHMsIG4yKTsKICAgIH0KICByZXAgKCktPmxlbiA9IG5ld2xl
bjsKCiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0
cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgdm9pZCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp
dHMsIEFsbG9jYXRvcj46OlJlcDo6CnNldCAoc2l6ZV90IHBvcywgY29uc3QgY2hhclQgYywgc2l6
ZV90IG4pCnsKICB0cmFpdHM6OnNldCAgKGRhdGEgKCkgKyBwb3MsIGMsIG4pOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJp
bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0
cywgQWxsb2NhdG9yPjo6CnJlcGxhY2UgKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuMSwgc2l6
ZV90eXBlIG4yLCBjaGFyVCBjKQp7CiAgY29uc3Qgc2l6ZV90IGxlbiA9IGxlbmd0aCAoKTsKICBk
byB7IGlmICggcG9zID4gbGVuICkgX19vdXRfb2ZfcmFuZ2UgKCJwb3MgPiBsZW4iKTsgfSB3aGls
ZSAoMCkgOwogIGlmIChuMSA+IGxlbiAtIHBvcykKICAgIG4xID0gbGVuIC0gcG9zOwogIGRvIHsg
aWYgKCBsZW4gLSBuMSA+IG1heF9zaXplICgpIC0gbjIgKSBfX2xlbmd0aF9lcnJvciAoImxlbiAt
IG4xID4gbWF4X3NpemUgKCkgLSBuMiIpOyB9IHdoaWxlICgwKSA7CiAgc2l6ZV90IG5ld2xlbiA9
IGxlbiAtIG4xICsgbjI7CgogIGlmIChjaGVja19yZWFsbG9jIChuZXdsZW4pKQogICAgewogICAg
ICBSZXAgKnAgPSBSZXA6OmNyZWF0ZSAobmV3bGVuKTsKICAgICAgcC0+Y29weSAoMCwgZGF0YSAo
KSwgcG9zKTsKICAgICAgcC0+Y29weSAocG9zICsgbjIsIGRhdGEgKCkgKyBwb3MgKyBuMSwgbGVu
IC0gKHBvcyArIG4xKSk7CiAgICAgIHAtPnNldCAgKHBvcywgYywgbjIpOwogICAgICByZXB1cCAo
cCk7CiAgICB9CiAgZWxzZQogICAgewogICAgICByZXAgKCktPm1vdmUgKHBvcyArIG4yLCBkYXRh
ICgpICsgcG9zICsgbjEsIGxlbiAtIChwb3MgKyBuMSkpOwogICAgICByZXAgKCktPnNldCAgKHBv
cywgYywgbjIpOwogICAgfQogIHJlcCAoKS0+bGVuID0gbmV3bGVuOwoKICByZXR1cm4gKnRoaXM7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+
CnZvaWQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmVzaXplIChz
aXplX3R5cGUgbiwgY2hhclQgYykKewogIGRvIHsgaWYgKCBuID4gbWF4X3NpemUgKCkgKSBfX2xl
bmd0aF9lcnJvciAoIm4gPiBtYXhfc2l6ZSAoKSIpOyB9IHdoaWxlICgwKSA7CgogIGlmIChuID4g
bGVuZ3RoICgpKQogICAgYXBwZW5kIChuIC0gbGVuZ3RoICgpLCBjKTsKICBlbHNlCiAgICBlcmFz
ZSAobik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxv
Y2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBl
CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmNvcHkgKGNoYXJUKiBz
LCBzaXplX3R5cGUgbiwgc2l6ZV90eXBlIHBvcykgY29uc3QKewogIGRvIHsgaWYgKCBwb3MgPiBs
ZW5ndGggKCkgKSBfX291dF9vZl9yYW5nZSAoInBvcyA+IGxlbmd0aCAoKSIpOyB9IHdoaWxlICgw
KSA7CgogIGlmIChuID4gbGVuZ3RoICgpIC0gcG9zKQogICAgbiA9IGxlbmd0aCAoKSAtIHBvczsK
CiAgdHJhaXRzOjpjb3B5IChzLCBkYXRhICgpICsgcG9zLCBuKTsKICByZXR1cm4gbjsKfQoKdGVt
cGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNf
c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5n
IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZCAoY29uc3QgY2hhclQqIHMsIHNpemVf
dHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgc2l6ZV90IHhwb3MgPSBwb3M7CiAgZm9y
ICg7IHhwb3MgKyBuIDw9IGxlbmd0aCAoKTsgKyt4cG9zKQogICAgaWYgKHRyYWl0czo6ZXEgKGRh
dGEgKCkgW3hwb3NdLCAqcykKCSYmIHRyYWl0czo6Y29tcGFyZSAoZGF0YSAoKSArIHhwb3MsIHMs
IG4pID09IDApCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYmFzaWNf
c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5n
IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKX2ZpbmQgKGNvbnN0IGNoYXJUKiBwdHIsIGNo
YXJUIGMsIHNpemVfdHlwZSB4cG9zLCBzaXplX3R5cGUgbGVuKQp7CiAgZm9yICg7IHhwb3MgPCBs
ZW47ICsreHBvcykKICAgIGlmICh0cmFpdHM6OmVxIChwdHIgW3hwb3NdLCBjKSkKICAgICAgcmV0
dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3Mg
dHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs
b2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y
Pjo6CmZpbmQgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MpIGNvbnN0CnsKICByZXR1cm4gX2ZpbmQg
KGRhdGEgKCksIGMsIHBvcywgbGVuZ3RoICgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBj
bGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxv
Y2F0b3I+OjoKcmZpbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUg
bikgY29uc3QKewogIGlmIChuID4gbGVuZ3RoICgpKQogICAgcmV0dXJuIG5wb3M7CgogIHNpemVf
dCB4cG9zID0gbGVuZ3RoICgpIC0gbjsKICBpZiAoeHBvcyA+IHBvcykKICAgIHhwb3MgPSBwb3M7
CgogIGZvciAoKyt4cG9zOyB4cG9zLS0gPiAwOyApCiAgICBpZiAodHJhaXRzOjplcSAoZGF0YSAo
KSBbeHBvc10sICpzKQoJJiYgdHJhaXRzOjpjb21wYXJlIChkYXRhICgpICsgeHBvcywgcywgbikg
PT0gMCkKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hh
clQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPjo6CnJmaW5kIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zKSBjb25zdAp7
CiAgaWYgKDEgPiBsZW5ndGggKCkpCiAgICByZXR1cm4gbnBvczsKCiAgc2l6ZV90IHhwb3MgPSBs
ZW5ndGggKCkgLSAxOwogIGlmICh4cG9zID4gcG9zKQogICAgeHBvcyA9IHBvczsKCiAgZm9yICgr
K3hwb3M7IHhwb3MtLSA+IDA7ICkKICAgIGlmICh0cmFpdHM6OmVxIChkYXRhICgpIFt4cG9zXSwg
YykpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
Y2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJU
LCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp
dHMsIEFsbG9jYXRvcj46OgpmaW5kX2ZpcnN0X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBl
IHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBzaXplX3QgeHBvcyA9IHBvczsKICBmb3IgKDsg
eHBvcyA8IGxlbmd0aCAoKTsgKyt4cG9zKQogICAgaWYgKF9maW5kIChzLCBkYXRhICgpIFt4cG9z
XSwgMCwgbikgIT0gbnBvcykKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2lj
X3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmlu
ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmZpbmRfbGFzdF9vZiAoY29uc3QgY2hhclQq
IHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgaWYgKGxlbmd0aCgpID09
IDApCiAgICByZXR1cm4gbnBvczsKICBzaXplX3QgeHBvcyA9IGxlbmd0aCAoKSAtIDE7CiAgaWYg
KHhwb3MgPiBwb3MpCiAgICB4cG9zID0gcG9zOwogIGZvciAoKyt4cG9zOyB4cG9zLS0gPiAwOykK
ICAgIGlmIChfZmluZCAocywgZGF0YSAoKSBbeHBvc10sIDAsIG4pICE9IG5wb3MpCiAgICAgIHJl
dHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNz
IHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs
bG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv
cj46OgpmaW5kX2ZpcnN0X25vdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNp
emVfdHlwZSBuKSBjb25zdAp7CiAgc2l6ZV90IHhwb3MgPSBwb3M7CiAgZm9yICg7IHhwb3MgPCBs
ZW5ndGggKCk7ICsreHBvcykKICAgIGlmIChfZmluZCAocywgZGF0YSAoKSBbeHBvc10sIDAsIG4p
ID09IG5wb3MpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJU
LCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2ZpcnN0X25vdF9vZiAoY2hhclQgYywgc2l6ZV90
eXBlIHBvcykgY29uc3QKewogIHNpemVfdCB4cG9zID0gcG9zOwogIGZvciAoOyB4cG9zIDwgbGVu
Z3RoICgpOyArK3hwb3MpCiAgICBpZiAodHJhaXRzOjpuZSAoZGF0YSAoKSBbeHBvc10sIGMpKQog
ICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJU
LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJh
aXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB
bGxvY2F0b3I+OjoKZmluZF9sYXN0X25vdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBw
b3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgaWYgKGxlbmd0aCgpID09IDApCiAgICByZXR1cm4g
bnBvczsKICBzaXplX3QgeHBvcyA9IGxlbmd0aCAoKSAtIDE7CiAgaWYgKHhwb3MgPiBwb3MpCiAg
ICB4cG9zID0gcG9zOwogIGZvciAoKyt4cG9zOyB4cG9zLS0gPiAwOykKICAgIGlmIChfZmluZCAo
cywgZGF0YSAoKSBbeHBvc10sIDAsIG4pID09IG5wb3MpCiAgICAgIHJldHVybiB4cG9zOwogIHJl
dHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3Mg
QWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVf
dHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2xhc3Rf
bm90X29mIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zKSBjb25zdAp7CiAgaWYgKGxlbmd0aCgpID09
IDApCiAgICByZXR1cm4gbnBvczsKICBzaXplX3QgeHBvcyA9IGxlbmd0aCAoKSAtIDE7CiAgaWYg
KHhwb3MgPiBwb3MpCiAgICB4cG9zID0gcG9zOwogIGZvciAoKyt4cG9zOyB4cG9zLS0gPiAwOykK
ICAgIGlmICh0cmFpdHM6Om5lIChkYXRhICgpIFt4cG9zXSwgYykpCiAgICAgIHJldHVybiB4cG9z
OwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywg
Y2xhc3MgQWxsb2NhdG9yPgppbnQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0
b3I+OjoKY29tcGFyZSAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MsIHNp
emVfdHlwZSBuKSBjb25zdAp7CiAgZG8geyBpZiAoIHBvcyA+IGxlbmd0aCAoKSApIF9fb3V0X29m
X3JhbmdlICgicG9zID4gbGVuZ3RoICgpIik7IH0gd2hpbGUgKDApIDsKCiAgc2l6ZV90IHJsZW4g
PSBsZW5ndGggKCkgLSBwb3M7CiAgaWYgKHJsZW4gPiBuKQogICAgcmxlbiA9IG47CiAgaWYgKHJs
ZW4gPiBzdHIubGVuZ3RoICgpKQogICAgcmxlbiA9IHN0ci5sZW5ndGggKCk7CiAgaW50IHIgPSB0
cmFpdHM6OmNvbXBhcmUgKGRhdGEgKCkgKyBwb3MsIHN0ci5kYXRhICgpLCBybGVuKTsKICBpZiAo
ciAhPSAwKQogICAgcmV0dXJuIHI7CiAgaWYgKHJsZW4gPT0gbikKICAgIHJldHVybiAwOwogIHJl
dHVybiAobGVuZ3RoICgpIC0gcG9zKSAtIHN0ci5sZW5ndGggKCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmludCBiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46Ogpjb21wYXJlIChjb25zdCBjaGFyVCogcywgc2l6
ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBkbyB7IGlmICggcG9zID4gbGVuZ3Ro
ICgpICkgX19vdXRfb2ZfcmFuZ2UgKCJwb3MgPiBsZW5ndGggKCkiKTsgfSB3aGlsZSAoMCkgOwoK
ICBzaXplX3QgcmxlbiA9IGxlbmd0aCAoKSAtIHBvczsKICBpZiAocmxlbiA+IG4pCiAgICBybGVu
ID0gbjsKICBpbnQgciA9IHRyYWl0czo6Y29tcGFyZSAoZGF0YSAoKSArIHBvcywgcywgcmxlbik7
CiAgaWYgKHIgIT0gMCkKICAgIHJldHVybiByOwogIHJldHVybiAobGVuZ3RoICgpIC0gcG9zKSAt
IG47Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9j
YXRvcj4KaXN0cmVhbSAmCm9wZXJhdG9yPj4gKGlzdHJlYW0gJmlzLCBiYXNpY19zdHJpbmcgPGNo
YXJULCB0cmFpdHMsIEFsbG9jYXRvcj4gJnMpCnsKICBpbnQgdyA9IGlzLndpZHRoICgwKTsKICBp
ZiAoaXMuaXBmeDAgKCkpCiAgICB7CiAgICAgIHJlZ2lzdGVyIHN0cmVhbWJ1ZiAqc2IgPSBpcy5y
ZGJ1ZiAoKTsKICAgICAgcy5yZXNpemUgKDApOwogICAgICB3aGlsZSAoMSkKCXsKCSAgaW50IGNo
ID0gc2ItPnNidW1wYyAoKTsKCSAgaWYgKGNoID09ICgtMSkgKQoJICAgIHsKCSAgICAgIGlzLnNl
dHN0YXRlIChpb3M6OmVvZmJpdCk7CgkgICAgICBicmVhazsKCSAgICB9CgkgIGVsc2UgaWYgKHRy
YWl0czo6aXNfZGVsIChjaCkpCgkgICAgewoJICAgICAgc2ItPnN1bmdldGMgKCk7CgkgICAgICBi
cmVhazsKCSAgICB9CgkgIHMgKz0gc3RhdGljX2Nhc3Q8Y2hhclQ+IChjaCk7CgkgIGlmICgtLXcg
PT0gMSkKCSAgICBicmVhazsKCX0KICAgIH0KCiAgaXMuaXNmeCAoKTsKICBpZiAocy5sZW5ndGgg
KCkgPT0gMCkKICAgIGlzLnNldHN0YXRlIChpb3M6OmZhaWxiaXQpOwoKICByZXR1cm4gaXM7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+Cm9z
dHJlYW0gJgpvcGVyYXRvcjw8IChvc3RyZWFtICZvLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJU
LCB0cmFpdHMsIEFsbG9jYXRvcj4mIHMpCnsKICByZXR1cm4gby53cml0ZSAocy5kYXRhICgpLCBz
Lmxlbmd0aCAoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFz
cyBBbGxvY2F0b3I+CmlzdHJlYW0mCmdldGxpbmUgKGlzdHJlYW0gJmlzLCBiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHMsIGNoYXJUIGRlbGltKQp7CiAgaWYgKGlzLmlw
ZngxICgpKQogICAgewogICAgICBfR19zaXplX3QgIGNvdW50ID0gMDsKICAgICAgc3RyZWFtYnVm
ICpzYiA9IGlzLnJkYnVmICgpOwogICAgICBzLnJlc2l6ZSAoMCk7CgogICAgICB3aGlsZSAoMSkK
CXsKCSAgaW50IGNoID0gc2ItPnNidW1wYyAoKTsKCSAgaWYgKGNoID09ICgtMSkgKQoJICAgIHsK
CSAgICAgIGlzLnNldHN0YXRlIChjb3VudCA9PSAwCgkJCSAgID8gKGlvczo6ZmFpbGJpdHxpb3M6
OmVvZmJpdCkKCQkJICAgOiBpb3M6OmVvZmJpdCk7CgkgICAgICBicmVhazsKCSAgICB9CgoJICAr
K2NvdW50OwoKCSAgaWYgKGNoID09IGRlbGltKQoJICAgIGJyZWFrOwoKCSAgcyArPSBzdGF0aWNf
Y2FzdDxjaGFyVD4gKGNoKTsKCgkgIGlmIChzLmxlbmd0aCAoKSA9PSBzLm5wb3MgLSAxKQoJICAg
IHsKCSAgICAgIGlzLnNldHN0YXRlIChpb3M6OmZhaWxiaXQpOwoJICAgICAgYnJlYWs7CgkgICAg
fQoJfQogICAgfQoKICAgCiAgIAogIGlzLmlzZnggKCk7CgogIHJldHVybiBpczsKfQoKdGVtcGxh
dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3Ry
aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXAKYmFzaWNfc3RyaW5nPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj46Om5pbFJlcCA9IHsgMCwgMCwgMSwgZmFsc2UgfTsKCnRlbXBsYXRl
IDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmNvbnN0IGJhc2lj
X3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmlu
ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6bnBvczsKCn0gIAojIDY1NSAiL29wdC9tdnBs
b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2lu
Y2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDIgMwoKCgojIDYgIi9vcHQvbXZwbG9jYWwvbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr
Ky0zL3N0cmluZyIgMiAzCgoKZXh0ZXJuICJDKysiIHsKdHlwZWRlZiBiYXNpY19zdHJpbmcgPGNo
YXI+IHN0cmluZzsKIAp9ICAKCgojIDE5ICIuLi8uLi9pbmNsdWRlL2xpYmluYy9saWJ1dGlsLmgi
IDIKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKY2xhc3MJRmlkdXJlc3VsdDsKY2xhc3MJUGlkU3Rh
dGU7CmNsYXNzCVJlc3VsdHM7CmNsYXNzCUZyYW1lOwpjbGFzcwlJdGVtOwpjbGFzcwlHcm91cDsK
Y2xhc3MJUHBhcmFtOwpjbGFzcwlXaW5kOwpjbGFzcwlDb21tc2VnOwpjbGFzcwlNZW1kZXNjOwpj
bGFzcwlIZHI7CmNsYXNzCVN5c3BhcjsKY2xhc3MJQ2FtZGVzYzsKY2xhc3MJU2lkZW52OwpjbGFz
cwlTbmFwOwpjbGFzcwlBbGlnbjsKY2xhc3MJU3luYzsKY2xhc3MJSW5kZXhlcjsKY2xhc3MJRnJh
bWVCdWZmZXI7CgogCgoKY2xhc3MJRGJnY3RybDsKY2xhc3MJQ2lvcGNvbTsKY2xhc3MJRGV2M0Rj
b250cm9sOwpjbGFzcwlIb3N0dmlkZW87CmNsYXNzCVZjcHVyZXM7CmNsYXNzCU1vbml0b3JDdHJs
OwoKY2xhc3MJU2VyaWFsOwpjbGFzcwlTcXVlOwoKY2xhc3MJQ3JjdHJsOwpjbGFzcwlJbmN0cmw7
CmNsYXNzCURiY3RybDsKY2xhc3MJTXRjdHJsOwpjbGFzcwlOZXRjdHJsOwpjbGFzcwlJZ2N0cmw7
CmNsYXNzCVJwY3RybDsKY2xhc3MJVWljdHJsOwpjbGFzcwlCY2N0cmw7CmNsYXNzCVBsY3RybDsK
Y2xhc3MJTW5jdHJsOwpjbGFzcwlNc2djdHJsOwpjbGFzcwlIb3N0bWdhOwpjbGFzcwlEZWZlY3Rj
dHJsOwpjbGFzcwlSZXZpZXdjdHJsOwpjbGFzcwlEZWxheUNvbnRyb2w7CmNsYXNzCUVsb2dPdXRw
dXQ7CgpzdGF0aWMgY29uc3QgaW50IERBVEFfT0ZGCT0gMHgxOwpzdGF0aWMgY29uc3QgaW50IERB
VEFfT04JPSAweDI7CnN0YXRpYyBjb25zdCBpbnQgREFUQV9GTFVTSAk9IDB4MzsKCnN0YXRpYyBj
b25zdCBpbnQgSU5TVFJfT0ZGCT0gMHg0OwpzdGF0aWMgY29uc3QgaW50IElOU1RSX09OCT0gMHg1
OwpzdGF0aWMgY29uc3QgaW50IElOU1RSX0ZMVVNICT0gMHg2OwoKdHlwZWRlZiBlbnVtIHsga0lu
c3BlY3Rpb25QYXNzZWQsIGtJbnNwZWN0aW9uRmFpbGVkLCBrUmV2aWV3RGVmZWN0LCBrUmV2aWV3
RmFsc2VDYWxsIH0gZVBhc3NGYWlsOwoKIAoKCnN0YXRpYyBjb25zdCBpbnQgTk9fRVhURU5TSU9O
CT0gMHgwMDsKc3RhdGljIGNvbnN0IGludCBBU19GSUxFCT0gMHgwMTsKc3RhdGljIGNvbnN0IGlu
dCBFU19GSUxFCT0gMHgwMjsKc3RhdGljIGNvbnN0IGludCBDVF9GSUxFCT0gMHgwNDsJCSAKc3Rh
dGljIGNvbnN0IGludCBDQURfRklMRQk9IDB4MDg7CQkgCnN0YXRpYyBjb25zdCBpbnQgU0NBTk5F
Ul9GSUxFCT0gMHgxMDsJCSAKc3RhdGljIGNvbnN0IGludCBGSVJTVF9BUlRJQ0xFX0ZJTEUgPSAw
eDIwOwkgCnN0YXRpYyBjb25zdCBpbnQgR0VSQkVSX0ZJTEUJPSAweDQwOwkJIApzdGF0aWMgY29u
c3QgaW50IEVYQ0xVREVfRklMRQk9IDB4ODA7CQkgCiAKCgoKIAoKCgpzdGF0aWMgY29uc3QgaW50
IEVYRUNVVEVBQkxFX0ZJTEUgPSAweDEwMDsJIAogCgoKCnN0YXRpYyBjb25zdCBpbnQgRklMRV9N
QVNLID0gCiAgICAoQ1RfRklMRSB8IEFTX0ZJTEUgfCBFU19GSUxFIHwgQ0FEX0ZJTEUgfCBTQ0FO
TkVSX0ZJTEUgfCBGSVJTVF9BUlRJQ0xFX0ZJTEUgfCBHRVJCRVJfRklMRSB8IEVYQ0xVREVfRklM
RSk7CgpzdGF0aWMgY29uc3QgaW50IExPQUQJCT0gMHgxMDAwOwpzdGF0aWMgY29uc3QgaW50IFNB
VkUJCT0gMHgyMDAwOwoKc3RhdGljIGNvbnN0IGludCBMT0FEX1NBVkVfTUFTSwk9IChMT0FEIHwg
U0FWRSB8IEZJTEVfTUFTSyk7CgpzdGF0aWMgY29uc3QJaW50CVNBVkVfRVNfRklMRQk9IChTQVZF
IHwgRVNfRklMRSk7CnN0YXRpYyBjb25zdAlpbnQJU0FWRV9BU19GSUxFCT0gKFNBVkUgfCBBU19G
SUxFKTsKc3RhdGljIGNvbnN0CWludAlTQVZFX0NUX0ZJTEUJPSAoU0FWRSB8IENUX0ZJTEUpOwpz
dGF0aWMgY29uc3QJaW50CVNBVkVfQ0FEX0ZJTEUJPSAoU0FWRSB8IENBRF9GSUxFKTsKCnN0YXRp
YyBjb25zdAlpbnQJU0FWRV9GSVJTVF9BUlRJQ0xFX0ZJTEUJKFNBVkUgfCBGSVJTVF9BUlRJQ0xF
X0ZJTEUpOwpzdGF0aWMgY29uc3QJaW50CVNBVkVfR0VSQkVSX0ZJTEUgPSAoU0FWRSB8IEdFUkJF
Ul9GSUxFKTsKc3RhdGljIGNvbnN0CWludAlTQVZFX0VYQ0xVREVfRklMRSA9IChTQVZFIHwgRVhD
TFVERV9GSUxFKTsKCnN0YXRpYyBjb25zdAlpbnQJQVNDSUlfRklMRQk9IChBU19GSUxFIHwgRklS
U1RfQVJUSUNMRV9GSUxFIHwgR0VSQkVSX0ZJTEUpOwoKc3RhdGljIGNvbnN0CWludAlMT0FEX0VT
X0ZJTEUJPSAoTE9BRCB8IEVTX0ZJTEUpOwpzdGF0aWMgY29uc3QJaW50CUxPQURfQVNfRklMRQk9
IChMT0FEIHwgQVNfRklMRSk7CnN0YXRpYyBjb25zdAlpbnQJTE9BRF9DVF9GSUxFCT0gKExPQUQg
fCBDVF9GSUxFKTsKCnN0YXRpYyBjb25zdAlpbnQJTE9BRF9TQ0FOTkVSX0ZJTEUgPSAoTE9BRCB8
IFNDQU5ORVJfRklMRSk7CnN0YXRpYyBjb25zdAlpbnQJTE9BRF9GSVJTVF9BUlRJQ0xFX0ZJTEUg
PSAoTE9BRCB8IEZJUlNUX0FSVElDTEVfRklMRSk7CnN0YXRpYyBjb25zdAlpbnQJTE9BRF9HRVJC
RVJfRklMRSA9IChMT0FEIHwgR0VSQkVSX0ZJTEUpOwoKCnN0YXRpYyBjb25zdAlpbnQJTE9BRF9B
TllfRklMRSA9IChMT0FEIHwgRVNfRklMRSB8IEFTX0ZJTEUgfCBDVF9GSUxFKTsKCiAKc3RhdGlj
IGNvbnN0IGludCBTVFJfTEVBRElORwk9IDB4MDAwMTsKc3RhdGljIGNvbnN0IGludCBTVFJfVFJB
SUxJTkcJPSAweDAwMDI7CnN0YXRpYyBjb25zdCBpbnQgU1RSX0NPTVBSRVNTCT0gMHgwMDA0Owpz
dGF0aWMgY29uc3QgaW50IFNUUl9UT1VQUEVSCT0gMHgwMDA4OwpzdGF0aWMgY29uc3QgaW50IFNU
Ul9UT0xPV0VSCT0gMHgwMDEwOwpzdGF0aWMgY29uc3QgaW50IFNUUl9DT01QUkVTU18yCT0gMHgw
MDIwOwoKIApzdGF0aWMgY29uc3QgaW50IE1WUF9PSwk9IDA7CnN0YXRpYyBjb25zdCBpbnQgTVZQ
X0VSUk9SCT0gLTE7CgpleHRlcm4gIkMiIHsKdHlwZWRlZiB2b2lkICooKnRocmVhZF9wcm9jX3Qp
ICh2b2lkKik7Cn0KIAoKCmV4dGVybiBsb25nIGxmZmdldChzdHJ1Y3QgZmlmbyAqZmlmbyk7CmV4
dGVybiBjaGFyIGJmZmdldChzdHJ1Y3QgZmlmbyAqZmlmbyk7CmV4dGVybiBzaG9ydCBsZmZwdXQo
c3RydWN0IGZpZm8gKmZpZm8sIGxvbmcgZGF0YSk7CmV4dGVybiBzaG9ydCBiZmZwdXQoc3RydWN0
IGZpZm8gKmZpZm8sIGNoYXIgZGF0YSk7CgoKZXh0ZXJuIHVfbG9uZyBydGNsaygpOwpleHRlcm4g
cGlkX3QgcGxvdF9zdGFydHVwIChjaGFyICphcmdzID0gX19udWxsICk7CmV4dGVybiBwaWRfdCBt
b25fc3RhcnR1cCAoY2hhciAqYXJncyA9IF9fbnVsbCApOwojIDIxMCAiLi4vLi4vaW5jbHVkZS9s
aWJpbmMvbGlidXRpbC5oIgoKCgpleHRlcm4gIkMiIHsKc3RhdGljIGludCBsZW5ndGhfX3QxOHN0
cmluZ19jaGFyX3RyYWl0czFaY1BDYyhjb25zdCBjaGFyICpwdHIpCnsKICAgIHJldHVybihzdHJs
ZW4ocHRyKSk7Cn0KfQoKY29uc3QgaW50IGtMb2NrU3VjY2VzcyA9IDA7CmNvbnN0IGludCBrQWxy
ZWFkeUxvY2tlZCA9IDE7CmNvbnN0IGludCBrTG9ja0Vycm9yID0gLTE7CgoKCgoKIAogCmV4dGVy
biBib29sIGhhc19kaXJlY3RfZmIoKTsKZXh0ZXJuIGxvbmcgdmNwdXNfb25saW5lKCk7CmV4dGVy
biBsb25nIGNvbW1zZWdfZmxhZ3MoKTsKZXh0ZXJuIHZvaWQgY29tbXNlZ19mbGFncyhsb25nIHZh
bCk7CmV4dGVybiBQaWRTdGF0ZSAqIHBsb3RfcmVwYWlyKCk7CmV4dGVybiBib29sIGNvbW1zZWdf
ZW11bGF0ZWQoKTsKZXh0ZXJuIHZvaWQgdmNwdXNfb25saW5lKGxvbmcgdmFsKTsKZXh0ZXJuIHZv
aWQgaGFzX2F1dG9uZXR3b3JrZXIoYm9vbCB2YWwpOwpleHRlcm4gYm9vbCBoYXNfYXV0b25ldHdv
cmtlcigpOwpleHRlcm4gdm9pZCAqIGZ1bm5lbF9wYXJhbSgpOwpleHRlcm4gaW50IGFuZ2J2ZWMo
aW50IGF4LCBpbnQgYXksIGludCBieCwgaW50IGJ5KTsKZXh0ZXJuIHVfaW50IGF2ZXJhZ2UoY29u
c3QgdV9jaGFyICpsLCBpbnQgbnh0bG4sIGludCBsaW5zLCBpbnQgY29scyk7CmV4dGVybiB2b2lk
IGNvbG9yX2F2ZXJhZ2UoY29uc3QgdV9jaGFyICpmcywgaW50IGZ3LCBpbnQgc2l6ZSwgdV9sb25n
ICplZSwgdV9sb25nICplbywgdV9sb25nICpvZSwgdV9sb25nICpvbyk7CmV4dGVybiBsb25nIHN3
YXBfbG9uZyhsb25nIHdvcmQpOwpleHRlcm4gZmxvYXQgc3dhcF9mbG9hdChmbG9hdCB3b3JkKTsK
ZXh0ZXJuIHNob3J0IHN3YXBfc2hvcnQoc2hvcnQgd29yZCk7CmV4dGVybiB2b2lkIGRlbGF5KGlu
dCBwYXJ0cyk7CmV4dGVybiB2b2lkIHVkZWxheShpbnQgcGFydHMpOwpleHRlcm4gY29uc3QgY2hh
ciAqIGRpcm5hbWUoY29uc3QgY2hhciAqcGF0aCk7CmV4dGVybiBjb25zdCBjaGFyICogd2hhdF9l
eHRlbnNpb24oY29uc3QgbG9uZyB0eXBlKTsKZXh0ZXJuIHZvaWQgYXBwZW5kX2V4dGVuc2lvbihj
aGFyICpmaWxlbmFtZSwgY29uc3QgbG9uZyB0eXBlKTsKZXh0ZXJuIHZvaWQgYXBwZW5kX2V4dGVu
c2lvbihzdGQ6OnN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IGxvbmcgdHlwZSk7CmV4dGVybiBpbnQg
Y2hlY2tfZXh0ZW5zaW9uKGNvbnN0IGNoYXIgKmZuKTsKZXh0ZXJuIGNvbnN0IGNoYXIgKiBmYXVs
dF9jb2RlKGludCBmYXVsdF9pZCk7CmV4dGVybiBsb25nIGhmbjJoZmEoaW50IGhmbik7CmV4dGVy
biB1X2NoYXIgKiBIX2dldGFkcihpbnQgaGZkLCBsb25nIGZybSk7CmV4dGVybiBpbnQgaGZhMmhm
bihsb25nIGFkZHIpOwpleHRlcm4gbG9uZyBoZm4ybGxmYShpbnQgaGZuKTsKZXh0ZXJuIHZvaWQg
c2V0X2ZyX2FkZHIoaW50IGZybnVtLCBsb25nIGFkZHIpOwpleHRlcm4gY29uc3QgY2hhciAqIGl0
b2EoaW50IG4pOwpleHRlcm4gY29uc3QgY2hhciAqIGl0b2EoaW50IG4sIHNpemVfdCB3aWR0aCwg
Y2hhciBmaWxsID0gJyAnKTsKZXh0ZXJuIGNvbnN0IGNoYXIgKiBpdG94KHVuc2lnbmVkIGxvbmcg
bik7CmV4dGVybiBjb25zdCBjaGFyICogaXRvWCh1bnNpZ25lZCBsb25nIG4pOwpleHRlcm4gaW50
IG1rZGlycyhjb25zdCBzdGQ6OnN0cmluZyYgZm5hbWUpOwpleHRlcm4gY29uc3QgY2hhciAqIGJh
c2VuYW1lKGNvbnN0IGNoYXIgKmYpOwpleHRlcm4gaW50IHBjYnBhdGgoY2hhciAqZm4sIGNvbnN0
IGNoYXIgKmRpciwgaW50IGZubGVuKTsKZXh0ZXJuIGludCB3ZmlscGF0aChjaGFyICpmbiwgaW50
IGZubGVuKTsKZXh0ZXJuIGludCBkZmx0cGF0aChjaGFyICpmbiwgaW50IGZubGVuKTsKZXh0ZXJu
IGludCBwYXJtcGF0aChjaGFyICpmbiwgaW50IGZubGVuKTsKZXh0ZXJuIGludCBwY2JldGNwYXRo
KGNoYXIgKmZuLCBpbnQgZm5sZW4pOwpleHRlcm4gaW50IHBjYnN0YXRwYXRoKGNoYXIgKmZuLCBp
bnQgZm5sZW4pOwpleHRlcm4gaW50IHBjYmhlbHBwYXRoKGNoYXIgKmZuLCBpbnQgZm5sZW4pOwpl
eHRlcm4gaW50IHBjYmFsZ29oZWxwcGF0aChjaGFyICpmbiwgaW50IGZubGVuKTsKZXh0ZXJuIGlu
dCBwY2JlcnJwYXRoKGNoYXIgKmZuLCBpbnQgZm5sZW4pOwpleHRlcm4gaW50IHBjYmVsZ3BhdGgo
Y2hhciAqZm4sIGludCBmbmxlbik7CmV4dGVybiBpbnQgcGNiYmlucGF0aChjaGFyICpmbiwgaW50
IGZubGVuKTsKZXh0ZXJuIGludCBkZnJ1bGUoY2hhciAqZm4sIGludCBmbmxlbik7CmV4dGVybiBp
bnQgcGNic2NycGF0aChjaGFyICpmbiwgaW50IGZubGVuKTsKZXh0ZXJuIGludCBwY2JhbGdvcGF0
aChjaGFyICpmbiwgaW50IGZubGVuKTsKZXh0ZXJuIGludCBwY2JwYXRoKHN0ZDo6c3RyaW5nJiBm
biwgY29uc3QgY2hhciAqZGlyKTsKZXh0ZXJuIHZvaWQgbWFjaGluZXBhdGgoc3RkOjpzdHJpbmcm
IGZuKTsKZXh0ZXJuIGludCB3ZmlscGF0aChzdGQ6OnN0cmluZyYgZm4pOwpleHRlcm4gaW50IGlt
YWdlX3BhdGgoc3RkOjpzdHJpbmcmIGZuKTsKZXh0ZXJuIGludCBkZmx0cGF0aChzdGQ6OnN0cmlu
ZyYgZm4pOwpleHRlcm4gaW50IGRhdGFiYXNlX3BhdGgoc3RkOjpzdHJpbmcmIGZuKTsKZXh0ZXJu
IGludCBwYXJtcGF0aChzdGQ6OnN0cmluZyYgZm4pOwpleHRlcm4gaW50IGV0Y19wYXRoKHN0ZDo6
c3RyaW5nJiBmbik7CmV4dGVybiBpbnQgcGNiZXRjcGF0aChzdGQ6OnN0cmluZyYgZm4pOwpleHRl
cm4gaW50IHBjYnN0YXRwYXRoKHN0ZDo6c3RyaW5nJiBmbik7CmV4dGVybiBpbnQgc3RhdHNfcGF0
aChzdGQ6OnN0cmluZyYgZm4pOwpleHRlcm4gaW50IHBjYmhlbHBwYXRoKHN0ZDo6c3RyaW5nJiBm
bik7CmV4dGVybiBpbnQgaGVscF9wYXRoKHN0ZDo6c3RyaW5nJiBmbik7CmV4dGVybiBpbnQgcGNi
YWxnb2hlbHBwYXRoKHN0ZDo6c3RyaW5nJiBmbik7CmV4dGVybiBpbnQgYWxnb19oZWxwX3BhdGgo
c3RkOjpzdHJpbmcmIGZuKTsKZXh0ZXJuIGludCBwY2JlcnJwYXRoKHN0ZDo6c3RyaW5nJiBmbik7
CmV4dGVybiBpbnQgZXJyb3JfcGF0aChzdGQ6OnN0cmluZyYgZm4pOwpleHRlcm4gaW50IHBjYmVs
Z3BhdGgoc3RkOjpzdHJpbmcmIGZuKTsKZXh0ZXJuIGludCBlbG9nX3BhdGgoc3RkOjpzdHJpbmcm
IGZuKTsKZXh0ZXJuIGludCBwY2JiaW5wYXRoKHN0ZDo6c3RyaW5nJiBmbik7CmV4dGVybiBpbnQg
YmluX3BhdGgoc3RkOjpzdHJpbmcmIGZuKTsKZXh0ZXJuIGludCBkZnJ1bGUoc3RkOjpzdHJpbmcm
IGZuKTsKZXh0ZXJuIGludCBydWxlc19wYXRoKHN0ZDo6c3RyaW5nJiBmbik7CmV4dGVybiBpbnQg
cGNic2NycGF0aChzdGQ6OnN0cmluZyYgZm4pOwpleHRlcm4gaW50IHNjcmlwdF9wYXRoKHN0ZDo6
c3RyaW5nJiBmbik7CmV4dGVybiBpbnQgcGNiYWxnb3BhdGgoc3RkOjpzdHJpbmcmIGZuKTsKZXh0
ZXJuIGludCBiYXJjb2RlcGF0aChzdGQ6OnN0cmluZyAmZm4pOwpleHRlcm4gY2hhciAqIGNyZWF0
ZV9sb2NhbF9jb21tKGxvbmcgc2l6ZSwgbG9uZyBtYXBfYWRkciwgaW50IHNlc3Npb24pOwpleHRl
cm4gdm9pZCBkZXN0cm95X2xvY2FsX2NvbW0oY2hhciAqYWRkcik7CmV4dGVybiBib29sIGF0dGFj
aF90b19jb21tc2VnKGludCBmbGFncyk7CmV4dGVybiBjaGFyICogZGJnX3ZpcnQoY29uc3QgY2hh
ciAqcF9hZGRyKTsKZXh0ZXJuIGNoYXIgKiBkYmdfcGh5cyhjb25zdCBjaGFyICp2X2FkZHIpOwpl
eHRlcm4gaW50IGdldGxpbmUocmVnaXN0ZXIgRklMRSAqIGZwLCByZWdpc3RlciBjaGFyICpzLCBy
ZWdpc3RlciBpbnQgbGltKTsKZXh0ZXJuIGNoYXIgKiBzZXJyb3Iodm9pZCk7CmV4dGVybiBpbnQg
bGkyYXJncyhyZWdpc3RlciBjaGFyICpsaW5lLCByZWdpc3RlciBjaGFyICoqYXJncywgaW50IG5h
cmdzKTsKZXh0ZXJuIHZvaWQgdjN4bTMoY29uc3QgdjNfdCAqdiwgY29uc3QgbTNfdCAqbSwgdjNf
dCAqcnYpOwpleHRlcm4gdm9pZCBtM3htMyhjb25zdCBtM190ICptMSwgY29uc3QgbTNfdCAqbTIs
IG0zX3QgKnJtKTsKZXh0ZXJuIHZvaWQgbTNtayhtM190ICptLCBpbnQgb3JpZW50LCBpbnQgYm90
KTsKZXh0ZXJuIGludCBtM2ludihjb25zdCBtM190ICpzbSwgbTNfdCAqZG0pOwpleHRlcm4gdm9p
ZCBtM3ByaW50Zihjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqZm10LCBjb25zdCBtM190
ICptKTsKZXh0ZXJuIHZvaWQgbWFwX2RpYWxvZ19jYihXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVu
dF9kYXRhLCBYdFBvaW50ZXIgeHRfY2FsbF9kYXRhKTsKZXh0ZXJuIHZvaWQgdW5tYXBfZGlhbG9n
X2NiKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFh0UG9pbnRlciB4dF9jYWxsX2Rh
dGEpOwpleHRlcm4gdm9pZCBzZXRfbWFwcGVkX2RpYWxvZ3Nfc3RhdGUoYm9vbCBzZW5zaXRpdmUp
OwpleHRlcm4gdV9pbnQgbW92ZV9jb25zdF92ZWwoSW5kZXhlciAqYSwgdV9sb25nIHVkaXMsIGlu
dCBkYl9zbnBkbHksIGludCBkZWJ1Zyk7CmV4dGVybiBjb25zdCBjaGFyICogbXNnc3RyKGludCBt
c2cpOwpleHRlcm4gY2hhciAqIHByX3N0YXRlKGxvbmcgc3RhdGUsIGNvbnN0IGNoYXIgKnN0YXRl
X3N0cik7CmV4dGVybiB1X2xvbmcgcnRjbGsodm9pZCk7CmV4dGVybiB2b2lkIHJ1bl9zcGNfc2Ny
aXB0KGNvbnN0IHN0ZDo6c3RyaW5nIGZsYXZvciwgY29uc3Qgc3RkOjpzdHJpbmcgc2VyaWFsLCBj
b25zdCBzdGQ6OnN0cmluZyBzY3JpcHRfdG9fcnVuLCBlUGFzc0ZhaWwgcGFzc2VkKTsKZXh0ZXJu
IHBpZF90IHN0YXJ0dXAoY29uc3QgY2hhciAqcHJvZywgY29uc3QgY2hhciAqYXJncyk7CmV4dGVy
biBCb29sZWFuIHN0YXJ0X3Bsb3RzdGF0KGNvbnN0IGNoYXIgKmRibmFtZSk7CmV4dGVybiBpbnQg
c3R0eXNhbmUoaW50IGZkKTsKZXh0ZXJuIGludCBzdHR5cmF3KGludCBmZCwgaW50IHZtaW4sIGlu
dCB2dGltZSk7CmV4dGVybiBpbnQgc3R0eWNicmVhayhpbnQgZmQpOwpleHRlcm4gdm9pZCBzdGFy
dF90aW1lcihzdHJ1Y3QgdGltZXZhbCAqc3RhcnRfdGltZSk7CmV4dGVybiB2b2lkIHN0b3BfdGlt
ZXIoY29uc3QgY2hhciAqd2hvLCBzdHJ1Y3QgdGltZXZhbCAqc3RhcnRfdGltZSk7CmV4dGVybiB2
b2lkICogc3RhcnRfdGhyZWFkKHRocmVhZF9wcm9jX3Qgc3RhcnRfcm91dGluZSwgdm9pZCAqY2xv
c3VyZSwgaW50IHNjaGVkID0gMiAsIGludCBzY29wZSA9IDAgKTsKZXh0ZXJuIHZvaWQgdGhyZWFk
X2V4aXQodm9pZCAqY2xvc3VyZSk7CmV4dGVybiBpbnQgaXJpbnQoZG91YmxlIHZhbHVlKTsKZXh0
ZXJuIGJvb2wgaXNfcnVubmluZyhwaWRfdCBwaWQpOwpleHRlcm4gaW50IG51bV92Y3B1X29ubGlu
ZSgpOwpleHRlcm4gaW50IGdldHN1Ym9wdCAoY2hhciAqKm9wdGlvbnAsIGNvbnN0IGNoYXIgKmNv
bnN0ICp0b2tlbnMsIGNoYXIgKip2YWx1ZXApOwpleHRlcm4gY29uc3QgY2hhciAqIGNoYW5uZWxf
bmFtZShzaG9ydCBzdWIsIHNob3J0IG1jaCk7CmV4dGVybiBib29sIGNoZWNrKGNvbnN0IHN0ZDo6
c3RyaW5nICZwcm9jZXNzKTsKZXh0ZXJuIGludCBsb2NrX2ZpbGUgKGludCBmbik7CmV4dGVybiBp
bnQgdW5sb2NrX2ZpbGUgKGludCBmbik7CmV4dGVybiBpbnQgU3RyVG9VcHBlcihjaGFyICpzdHIp
OwpleHRlcm4gaW50IFN0clRvTG93ZXIoY2hhciAqc3RyKTsKZXh0ZXJuIGludCBTdHJDb21wcmVz
cyhjaGFyICpzdHIpOwpleHRlcm4gaW50IFN0clJlbW92ZUxlYWRpbmdTcGFjZXMoY2hhciAqc3Ry
KTsKZXh0ZXJuIGludCBTdHJSZW1vdmVUcmFpbGluZ1NwYWNlcyhjaGFyICpzdHIpOwpleHRlcm4g
aW50IFN0clJlbW92ZUV4dHJhU3BhY2VzKGNoYXIgKnN0cik7CmV4dGVybiBpbnQgU3RyUXVhbGlm
eShjaGFyICpuYW1lLCBjaGFyICpjaGFyU2V0KTsKZXh0ZXJuIGludCBTdHJFZGl0KGNoYXIgKnN0
ciwgaW50IGZsYWcpOwpleHRlcm4gaW50IFN0clRyaW0oY2hhciAqc3RyKTsKZXh0ZXJuIHZvaWQg
T3V0cHV0Q2hhcihGSUxFICpmcCwgY2hhciBjLCBpbnQgbiwgaW50IG5ld2xpbmUpOwpleHRlcm4g
Y2hhciAqIGdldF9mb3JtYXRfc3RyKGludCBtb2RlKTsKZXh0ZXJuIHRpbWVfdCB0aW1lX3N0cl8y
X3RpbWVfdChjaGFyICp0aW1lX3N0ciwgaW50IG1vZGUpOwpleHRlcm4gY2hhciAqIHRpbWVfdF8y
X3RpbWVfc3RyKHRpbWVfdCB0LCBjaGFyICp0aW1lX3N0ciwgaW50IG1vZGUpOwpleHRlcm4gdGlt
ZV90IGdldF90aW1lX3QoY2hhciAqc3RyLCBpbnQgbW9kZSk7CmV4dGVybiBjaGFyICogZ2V0X3Rp
bWVfc3RyKHRpbWVfdCB0LCBjaGFyICp0aW1lX3N0ciwgaW50IG1vZGUpOwpleHRlcm4gdm9pZCBp
bnRlbF90aW1lc3RhbXAoc3RkOjpzdHJpbmcgJnRpbWVzdGFtcCk7CmV4dGVybiBpbnQgUmFuZ2VS
YW5kKGludCBsb3csIGludCBoaWdoKTsKZXh0ZXJuIHNob3J0IGVzX2ZpbGUoY29uc3QgY2hhciAq
ZGIpOwoKIyAzOTYgIi4uLy4uL2luY2x1ZGUvbGliaW5jL2xpYnV0aWwuaCIKCiMgMTEgInNhdmVf
c25hcC5jIiAyCgojIDEgIi4uLy4uL2luY2x1ZGUvbGliaW5jL2xpYmRyYXdpbmcuaCIgMQoKCiAK
IAoKIAoKIAoKCgojIDEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
aXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3ZlY3RvciIgMSAzCiAKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29i
YXNlLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKIyAx
ICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvLi4v
Li4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfcGFpci5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKIAoKCgoKCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CnN0cnVj
dCBwYWlyIHsKICB0eXBlZGVmIF9UMSBmaXJzdF90eXBlOwogIHR5cGVkZWYgX1QyIHNlY29uZF90
eXBlOwoKICBfVDEgZmlyc3Q7CiAgX1QyIHNlY29uZDsKICBwYWlyKCkgOiBmaXJzdChfVDEoKSks
IHNlY29uZChfVDIoKSkge30KICBwYWlyKGNvbnN0IF9UMSYgX19hLCBjb25zdCBfVDImIF9fYikg
OiBmaXJzdChfX2EpLCBzZWNvbmQoX19iKSB7fQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9VMSwgY2xh
c3MgX1UyPgogIHBhaXIoY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9fcCkgOiBmaXJzdChfX3AuZmly
c3QpLCBzZWNvbmQoX19wLnNlY29uZCkge30KCn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFz
cyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwg
Y29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkKeyAKICByZXR1cm4gX194LmZpcnN0ID09IF9feS5m
aXJzdCAmJiBfX3guc2Vjb25kID09IF9feS5zZWNvbmQ7IAp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Qx
LCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBwYWlyPF9UMSwgX1QyPiYg
X194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7IAogIHJldHVybiBfX3guZmlyc3QgPCBf
X3kuZmlyc3QgfHwgCiAgICAgICAgICghKF9feS5maXJzdCA8IF9feC5maXJzdCkgJiYgX194LnNl
Y29uZCA8IF9feS5zZWNvbmQpOyAKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpp
bmxpbmUgcGFpcjxfVDEsIF9UMj4gbWFrZV9wYWlyKGNvbnN0IF9UMSYgX194LCBjb25zdCBfVDIm
IF9feSkKewogIHJldHVybiBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7Cn0KCiAKCgoKIAogCiAK
IyA0MiAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4z
Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKCgojIDEgIi9v
cHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8u
Li8uLi9pbmNsdWRlL2crKy0zL3R5cGVfdHJhaXRzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnN0cnVjdCBfX3RydWVfdHlwZSB7
Cn07CgpzdHJ1Y3QgX19mYWxzZV90eXBlIHsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj
dCBfX3R5cGVfdHJhaXRzIHsgCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgIHRoaXNfZHVtbXlf
bWVtYmVyX211c3RfYmVfZmlyc3Q7CiAgICAgICAgICAgICAgICAgICAgCgoKCgoKICAgIAoKCgoK
CgoKCiAKCiAgIHR5cGVkZWYgX19mYWxzZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29u
c3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29u
c3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1l
bnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKCgogCiAK
IAoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxib29sPiB7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90
cmFpdHM8Y2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1
bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29w
eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3Np
Z25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rl
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1w
bGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0
czx1bnNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxf
ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh
bF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFs
X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp
YWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsK
CgoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8d2NoYXJfdD4gewogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07CgoKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVf
dHJhaXRzPHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVm
YXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9j
b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fz
c2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxf
ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRl
bXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIHNob3J0PiB7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVf
dHJhaXRzPGludD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1
bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29w
eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3Np
Z25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rl
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1w
bGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBpbnQ+IHsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFp
dHM8bG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRf
Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25t
ZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0
ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nPiB7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCiMgMjA4ICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGli
L3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy90eXBl
X3RyYWl0cy5oIiAzCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8ZmxvYXQ+IHsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0
IF9fdHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry
aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNf
dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190
cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz
X3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlw
ZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgZG91YmxlPiB7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9U
cD4Kc3RydWN0IF9fdHlwZV90cmFpdHM8X1RwKj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg
IGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
ICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAg
ICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
ICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNf
UE9EX3R5cGU7Cn07CgojIDI5NSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t
c29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvdHlwZV90cmFpdHMuaCIg
MwoKCgogCiAKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVjdCBfSXNfaW50ZWdlciB7CiAgdHlw
ZWRlZiBfX2ZhbHNlX3R5cGUgX0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lz
X2ludGVnZXI8Ym9vbD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKCgp0
ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8Y2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5
cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHNpZ25lZCBj
aGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ICBz
dHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg
X0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8d2NoYXJfdD4g
ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1
Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK
fTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBzaG9ydD4gewogIHR5
cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19p
bnRlZ2VyPGludD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxh
dGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4gewogIHR5cGVkZWYgX190cnVl
X3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPGxvbmc+
IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVj
dCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50
ZWdyYWw7Cn07CgojIDM2NyAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
YXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvdHlwZV90cmFpdHMuaCIgMwoK
CgoKIAogCiAKIyA0NSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDIgMwoK
CgoKIyAxICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1
LjMvaW5jbHVkZS9saW1pdHMuaCIgMSAzIDQKIAoKCiAKCgoKCgogCiMgMSAiL29wdC9tdnBsb2Nh
bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zL2luY2x1ZGUvc3lzbGltaXRz
LmgiIDEgMyA0CiAKCgoKCgojIDEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3Vu
LXNvbGFyaXMyLzIuOTUuMy9pbmNsdWRlL2xpbWl0cy5oIiAxIDMgNAogCgoKIAoKIyAxMTQgIi9v
cHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy9pbmNsdWRl
L2xpbWl0cy5oIiAzIDQKCgoKIyAxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDEgMyA0CiAKCgoK
CiAKIAoKIAogCiAKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylsaW1pdHMuaAkxLjUxCTk5LzEwLzA4
IFNNSSIJCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2lzby9saW1pdHNfaXNvLmgiIDEgMyA0CiAKCgoK
CiAKIAoKIAogCiAKCiAKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpbGltaXRzX2lz
by5oCTEuMQk5OS8wOC8wOSBTTUkiIAoKCmV4dGVybiAiQyIgewoKCiAKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgkJCQkJIAoKCgoKCn0KCgoKIyAyMCAiL3Vzci9pbmNsdWRlL2xp
bWl0cy5oIiAyIDMgNAoKCiAKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ludF9saW1p
dHMuaCIgMSAzIDQKIAoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKWludF9saW1pdHMuaAkxLjYJ
OTkvMDgvMDYgU01JIgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVy
biAiQyIgewoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgogCgoKCgoKCgoKCgogCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKfQoKCgojIDMyICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMyA0CgoKCgpl
eHRlcm4gIkMiIHsKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgog
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoJCQkJIAoKCgoKCgoKCgoKCgoKCgoKCQkJCQkJIAoKCQkJCQkJIAoKCgoK
CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjI4ICIvdXNy
L2luY2x1ZGUvbGltaXRzLmgiIDMgNAoKCgoKCiAKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCmV4
dGVybiBsb25nIF9zeXNjb25mKGludCk7CSAKCgogCgoKCgoKCn0KCgoKIyAxMTcgIi9vcHQvbXZw
bG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy9pbmNsdWRlL2xpbWl0
cy5oIiAyIDMgNAoKCgoKIyA3ICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
b2xhcmlzMi8yLjk1LjMvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzIDQKCgojIDExICIvb3B0L212
cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvaW5jbHVkZS9saW1p
dHMuaCIgMiAzIDQKCgoKCgogCgoKCiAKCgoKIAoKCgoKIAoKCgoKCiAKCgoKIAoKCgoKCgoKCgoK
CgogCgogCgoKCgogCgoKCiAKCgoKCgoKCgogCgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoKIyAxMDcg
Ii9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy9pbmNs
dWRlL2xpbWl0cy5oIiAzIDQKCgoKCiAKCgoKCgoKCgoKIyA0OSAiL29wdC9tdnBsb2NhbC9saWIv
Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKCiMgMSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9z
cGFyYy1zdW4tc29sYXJpczIvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzQyICIv
b3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvaW5jbHVk
ZS9zdGRkZWYuaCIgMyA0CgojIDUxICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1
bi1zb2xhcmlzMi8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2Uu
aCIgMiAzCgojIDEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy
LzIuOTUuMy9pbmNsdWRlL25ldy5oIiAxIDMgNAogCgoKCgojIDEgIi9vcHQvbXZwbG9jYWwvbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy9pbmNsdWRlL25ldyIgMSAzIDQKIAog
CgoKCgojcHJhZ21hIGludGVyZmFjZSAibmV3IgojIDEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1s
aWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDM0
MiAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zL2lu
Y2x1ZGUvc3RkZGVmLmgiIDMgNAoKIyA4ICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJj
LXN1bi1zb2xhcmlzMi8yLjk1LjMvaW5jbHVkZS9uZXciIDIgMyA0CgojIDEgIi9vcHQvbXZwbG9j
YWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy9pbmNsdWRlL2V4Y2VwdGlv
biIgMSAzIDQKIAogCgoKCgojcHJhZ21hIGludGVyZmFjZSAiZXhjZXB0aW9uIgoKZXh0ZXJuICJD
KysiIHsKCm5hbWVzcGFjZSBzdGQgewoKY2xhc3MgZXhjZXB0aW9uIHsKcHVibGljOgogIGV4Y2Vw
dGlvbiAoKSB7IH0KICB2aXJ0dWFsIH5leGNlcHRpb24gKCkgeyB9CiAgdmlydHVhbCBjb25zdCBj
aGFyKiB3aGF0ICgpIGNvbnN0Owp9OwoKY2xhc3MgYmFkX2V4Y2VwdGlvbiA6IHB1YmxpYyBleGNl
cHRpb24gewpwdWJsaWM6CiAgYmFkX2V4Y2VwdGlvbiAoKSB7IH0KICB2aXJ0dWFsIH5iYWRfZXhj
ZXB0aW9uICgpIHsgfQp9OwoKdHlwZWRlZiB2b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgpOwp0
eXBlZGVmIHZvaWQgKCp1bmV4cGVjdGVkX2hhbmRsZXIpICgpOwoKdGVybWluYXRlX2hhbmRsZXIg
c2V0X3Rlcm1pbmF0ZSAodGVybWluYXRlX2hhbmRsZXIpOwp2b2lkIHRlcm1pbmF0ZSAoKSBfX2F0
dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CnVuZXhwZWN0ZWRfaGFuZGxlciBzZXRfdW5leHBl
Y3RlZCAodW5leHBlY3RlZF9oYW5kbGVyKTsKdm9pZCB1bmV4cGVjdGVkICgpIF9fYXR0cmlidXRl
X18gKChfX25vcmV0dXJuX18pKTsKYm9vbCB1bmNhdWdodF9leGNlcHRpb24gKCk7Cgp9ICAKCn0g
IAoKCiMgOSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45
NS4zL2luY2x1ZGUvbmV3IiAyIDMgNAoKCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkIHsK
CiAgY2xhc3MgYmFkX2FsbG9jIDogcHVibGljIGV4Y2VwdGlvbiB7CiAgcHVibGljOgogICAgdmly
dHVhbCBjb25zdCBjaGFyKiB3aGF0KCkgY29uc3QgdGhyb3coKSB7IHJldHVybiAiYmFkX2FsbG9j
IjsgfQogIH07CgogIHN0cnVjdCBub3Rocm93X3Qge307CiAgZXh0ZXJuIGNvbnN0IG5vdGhyb3df
dCBub3Rocm93OwogIHR5cGVkZWYgdm9pZCAoKm5ld19oYW5kbGVyKSgpOwogIG5ld19oYW5kbGVy
IHNldF9uZXdfaGFuZGxlciAobmV3X2hhbmRsZXIpOwoKfSAgCgogCnZvaWQgKm9wZXJhdG9yIG5l
dyAoc2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lkICpvcGVyYXRvciBuZXdbXSAo
c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9p
ZCAqKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdICh2b2lkICopIHRocm93KCk7CnZv
aWQgKm9wZXJhdG9yIG5ldyAoc2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7
CnZvaWQgKm9wZXJhdG9yIG5ld1tdIChzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhy
b3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGUgKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3Qm
KSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdICh2b2lkICosIGNvbnN0IHN0ZDo6bm90
aHJvd190JikgdGhyb3coKTsKCiAKaW5saW5lIHZvaWQgKm9wZXJhdG9yIG5ldyhzaXplX3QsIHZv
aWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0dXJuIHBsYWNlOyB9CmlubGluZSB2b2lkICpvcGVyYXRv
ciBuZXdbXShzaXplX3QsIHZvaWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0dXJuIHBsYWNlOyB9Cn0g
IAoKCiMgNiAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45
NS4zL2luY2x1ZGUvbmV3LmgiIDIgMyA0CgoKdXNpbmcgc3RkOjpuZXdfaGFuZGxlcjsKdXNpbmcg
c3RkOjpzZXRfbmV3X2hhbmRsZXI7CgoKIyA1MiAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9z
cGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2Fs
Z29iYXNlLmgiIDIgMwoKCgoKCgoKIAoKIAoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEs
IGNsYXNzIF9Gb3J3YXJkSXRlcjIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgX19pdGVyX3N3YXAo
X0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iLCBfVHAqKSB7CiAgX1RwIF9fdG1w
ID0gKl9fYTsKICAqX19hID0gKl9fYjsKICAqX19iID0gX190bXA7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgppbmxpbmUgdm9pZCBpdGVyX3N3
YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iKSB7CiAgX19pdGVyX3N3YXAo
X19hLCBfX2IsIF9fdmFsdWVfdHlwZSggX19hICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K
aW5saW5lIHZvaWQgc3dhcChfVHAmIF9fYSwgX1RwJiBfX2IpIHsKICBfVHAgX190bXAgPSBfX2E7
CiAgX19hID0gX19iOwogIF9fYiA9IF9fdG1wOwp9CgogCiAKCgoKCgoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4KaW5saW5lIGNvbnN0IF9UcCYgbWluKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9f
YikgewogIHJldHVybiBfX2IgPCBfX2EgPyBfX2IgOiBfX2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
VHA+CmlubGluZSBjb25zdCBfVHAmIG1heChjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2Ip
IHsKICByZXR1cm4gIF9fYSA8IF9fYiA/IF9fYiA6IF9fYTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIGNvbnN0IF9UcCYgbWluKGNvbnN0IF9UcCYgX19h
LCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKSB7CiAgcmV0dXJuIF9fY29tcChfX2Is
IF9fYSkgPyBfX2IgOiBfX2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJl
PgppbmxpbmUgY29uc3QgX1RwJiBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBf
Q29tcGFyZSBfX2NvbXApIHsKICByZXR1cm4gX19jb21wKF9fYSwgX19iKSA/IF9fYiA6IF9fYTsK
fQoKIAogCgogCiAKIAogCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3Mg
X091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29weShf
SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGlu
cHV0X2l0ZXJhdG9yX3RhZywgX0Rpc3RhbmNlKikKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xh
c3Q7ICsrX19yZXN1bHQsICsrX19maXJzdCkKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHJl
dHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFz
cyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX091dHB1dEl0ZXIKX19jb3B5
KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAg
ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywgX0Rp
c3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+
IDA7IC0tX19uKSB7CiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICAg
ICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U
cD4KaW5saW5lIF9UcCoKX19jb3B5X3RyaXZpYWwoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBf
VHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgewogIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3Qs
IHNpemVvZihfVHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICByZXR1cm4gX19yZXN1bHQgKyAo
X19sYXN0IC0gX19maXJzdCk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz
IF9PdXRwdXRJdGVyLCBjbGFzcyBfQm9vbFR5cGU+CnN0cnVjdCBfX2NvcHlfZGlzcGF0Y2ggewog
IHN0YXRpYyBfT3V0cHV0SXRlciBjb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsK
ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjppdGVyYXRv
cl9jYXRlZ29yeSBfQ2F0ZWdvcnk7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKICAgIHJldHVybiBfX2Nv
cHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0NhdGVnb3J5KCksIChfRGlzdGFuY2UqKSAw
KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX19jb3B5X2Rpc3BhdGNoPF9U
cCosIF9UcCosIF9fdHJ1ZV90eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9f
Zmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICByZXR1cm4gX19j
b3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgfQp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4Kc3RydWN0IF9fY29weV9kaXNwYXRjaDxjb25zdCBfVHAqLCBfVHAqLCBfX3Ry
dWVfdHlwZT4KewogIHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBf
VHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgewogICAgcmV0dXJuIF9fY29weV90cml2aWFsKF9f
Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIGNvcHkoX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQpIHsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfVHA7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJh
aXRzPF9UcD46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAgIF9Ucml2
aWFsOwogIHJldHVybiBfX2NvcHlfZGlzcGF0Y2g8X0lucHV0SXRlciwgX091dHB1dEl0ZXIsIF9U
cml2aWFsPgogICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9CgojIDIxMyAi
L29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4u
Ly4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDMKCgogCiAKCnRlbXBsYXRlIDxj
bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLCAKICAg
ICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19jb3B5
X2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQog
ICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xh
c3MgX0Rpc3RhbmNlPgppbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyIF9fY29weV9iYWNrd2FyZChf
UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJh
dG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh
bmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7
IC0tX19uKQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9
CgoKCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBf
QmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0Jvb2xUeXBlPgpzdHJ1Y3QgX19j
b3B5X2JhY2t3YXJkX2Rpc3BhdGNoCnsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfQmlkaXJlY3Rpb25hbEl0ZXIxPjo6aXRlcmF0b3JfY2F0ZWdvcnkgCiAgICAgICAgICBfQ2F0
OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcjE+
OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZTsKCiAgc3RhdGljIF9CaWRpcmVj
dGlvbmFsSXRlcjIgY29weShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3Vs
dCkgewogICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0
LCBfQ2F0KCksIChfRGlzdGFuY2UqKSAwKTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpz
dHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgp7
CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0
LCBfVHAqIF9fcmVzdWx0KSB7CiAgICBjb25zdCBwdHJkaWZmX3QgX051bSA9IF9fbGFzdCAtIF9f
Zmlyc3Q7CiAgICBtZW1tb3ZlKF9fcmVzdWx0IC0gX051bSwgX19maXJzdCwgc2l6ZW9mKF9UcCkg
KiBfTnVtKTsKICAgIHJldHVybiBfX3Jlc3VsdCAtIF9OdW07CiAgfQp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9UcD4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxjb25zdCBfVHAqLCBfVHAq
LCBfX3RydWVfdHlwZT4KewogIHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBj
b25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgewogICAgcmV0dXJuICBfX2NvcHlfYmFj
a3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICAgIDo6Y29weShfX2Zp
cnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JJMSwgY2xh
c3MgX0JJMj4KaW5saW5lIF9CSTIgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEgX19s
YXN0LCBfQkkyIF9fcmVzdWx0KSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkyPjo6dmFsdWVfdHlwZT4KICAgICAgICAgICAgICAg
ICAgICAgICAgOjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJp
dmlhbDsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIsIF9Ucml2
aWFsPgogICAgICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoK
IyAzMDMgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUu
My8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAzCgoKIAogCgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgpw
YWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPiBfX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9P
dXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICBmb3IgKCA7IF9fY291bnQgPiAwOyAtLV9fY291bnQp
IHsKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogICAgKytfX3Jlc3Vs
dDsKICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+KF9fZmlyc3QsIF9f
cmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SQUl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBf
T3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X1JBSXRlciwgX091dHB1dEl0ZXI+Cl9fY29weV9uKF9S
QUl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1
bHQsCiAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAgX1JBSXRlciBfX2xh
c3QgPSBfX2ZpcnN0ICsgX19jb3VudDsKICByZXR1cm4gcGFpcjxfUkFJdGVyLCBfT3V0cHV0SXRl
cj4oX19sYXN0LCBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5l
IHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+Cl9fY29weV9uKF9JbnB1dEl0ZXIgX19maXJz
dCwgX1NpemUgX19jb3VudCwgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsKICByZXR1cm4gX19jb3B5
X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIF9faXRlcmF0
b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg
Y2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBf
T3V0cHV0SXRlcj4KY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwgX091
dHB1dEl0ZXIgX19yZXN1bHQpIHsKICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19jb3VudCwg
X19yZXN1bHQpOwp9CgogCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf
VHA+CnZvaWQgZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwg
Y29uc3QgX1RwJiBfX3ZhbHVlKSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2Zp
cnN0KQogICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX091dHB1dEl0
ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIGZpbGxfbihfT3V0cHV0SXRl
ciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkgewogIGZvciAoIDsgX19u
ID4gMDsgLS1fX24sICsrX19maXJzdCkKICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICByZXR1cm4g
X19maXJzdDsKfQoKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1
dEl0ZXIyPgpwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4gbWlzbWF0Y2goX0lucHV0SXRl
cjEgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5w
dXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0lucHV0SXRlcjIgX19maXJzdDIpIHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAq
X19maXJzdDEgPT0gKl9fZmlyc3QyKSB7CiAgICArK19fZmlyc3QxOwogICAgKytfX2ZpcnN0MjsK
ICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19m
aXJzdDIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIy
LCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4g
bWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpIHsK
ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwg
Kl9fZmlyc3QyKSkgewogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAgfQogIHJldHVy
biBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KaW5saW5lIGJv
b2wgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAh
PSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYgKCpfX2ZpcnN0MSAhPSAq
X19maXJzdDIpCiAgICAgIHJldHVybiBmYWxzZTsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWRp
Y2F0ZT4KaW5saW5lIGJvb2wgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfQmluYXJ5
UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpIHsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7
ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9fZmlyc3Qx
LCAqX19maXJzdDIpKQogICAgICByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KCiAKIAog
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgpib29sIGxl
eGljb2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf
X2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy
LCBfSW5wdXRJdGVyMiBfX2xhc3QyKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYm
IF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsK
ICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYg
KCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4g
X19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQ29tcGFyZT4KYm9v
bCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl
cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp
cnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
Q29tcGFyZSBfX2NvbXApIHsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz
dDIgIT0gX19sYXN0MgogICAgICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAgaWYg
KF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYg
KF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CiAg
cmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKfQoKaW5s
aW5lIGJvb2wgCmxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9f
Zmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xh
c3QxLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0
MiwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikK
ewogIGNvbnN0IHNpemVfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7CiAgY29uc3Qgc2l6
ZV90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICBjb25zdCBpbnQgX19yZXN1bHQgPSBt
ZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICByZXR1cm4g
X19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0IDwgMCA6IF9fbGVuMSA8IF9fbGVuMjsKfQoKaW5saW5l
IGJvb2wgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0
IGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBjaGFyKiBfX2xhc3QyKQp7CgogIHJldHVybiBsZXhpY29n
cmFwaGljYWxfY29tcGFyZSgoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJz
dDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciop
IF9fbGFzdDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9J
bnB1dEl0ZXIyPgppbnQgX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9JbnB1dEl0ZXIx
IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQp7CiAg
d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAg
aWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgcmV0dXJuIC0xOwogICAgaWYgKCpfX2Zp
cnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIDE7CiAgICArK19fZmlyc3QxOwogICAgKytf
X2ZpcnN0MjsKICB9CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpIHsKICAgIHJldHVybiAhKF9f
Zmlyc3QxID09IF9fbGFzdDEpOwogIH0KICBlbHNlIHsKICAgIHJldHVybiAtMTsKICB9Cn0KCmlu
bGluZSBpbnQKX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IHVuc2lnbmVkIGNo
YXIqIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGNoYXIqIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKewogIGNvbnN0IHB0cmRpZmZfdCBfX2xlbjEgPSBf
X2xhc3QxIC0gX19maXJzdDE7CiAgY29uc3QgcHRyZGlmZl90IF9fbGVuMiA9IF9fbGFzdDIgLSBf
X2ZpcnN0MjsKICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmlyc3Qy
LCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0
IAogICAgICAgICAgICAgICAgICAgICAgIDogKF9fbGVuMSA9PSBfX2xlbjIgPyAwIDogKF9fbGVu
MSA8IF9fbGVuMiA/IC0xIDogMSkpOwp9CgppbmxpbmUgaW50IApfX2xleGljb2dyYXBoaWNhbF9j
b21wYXJlXzN3YXkoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3Qg
Y2hhciogX19sYXN0MikKewoKICByZXR1cm4gX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5
KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9f
Zmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hh
ciopIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25l
ZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0
IHNpZ25lZCBjaGFyKikgX19sYXN0Mik7CgoKCgoKCn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmludCBsZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5
KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19s
YXN0MikKewogIHJldHVybiBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX19maXJzdDEs
IF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKfQoKIAoKCgogCiAKIAojIDMwICIvb3B0L212
cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy92ZWN0b3IiIDIgMwoKCiMgMSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxp
Yi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3Rs
X2NvbnN0cnVjdC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiAK
CiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgZGVzdHJveShfVHAqIF9fcG9p
bnRlcikgewogIF9fcG9pbnRlci0+fl9UcCgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFz
cyBfVDI+CmlubGluZSB2b2lkIGNvbnN0cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVl
KSB7CiAgbmV3IChfX3ApIF9UMShfX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMT4KaW5s
aW5lIHZvaWQgY29uc3RydWN0KF9UMSogX19wKSB7CiAgbmV3IChfX3ApIF9UMSgpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KaW5saW5lIHZvaWQKX19kZXN0cm95X2F1eChf
Rm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNl
X3R5cGUpCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBkZXN0
cm95KCYqX19maXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxp
bmUgdm9pZCBfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRlcmF0b3Is
IF9fdHJ1ZV90eXBlKSB7fQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNz
IF9UcD4KaW5saW5lIHZvaWQKX19kZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0Zv
cndhcmRJdGVyYXRvciBfX2xhc3QsIF9UcCopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90
cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcgogICAgICAgICAgX1RyaXZpYWxfZGVz
dHJ1Y3RvcjsKICBfX2Rlc3Ryb3lfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX1RyaXZpYWxfZGVzdHJ1
Y3RvcigpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGluZSB2b2lk
IGRlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFz
dCkgewogIF9fZGVzdHJveShfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZSggX19maXJzdCAp
ICk7Cn0KCmlubGluZSB2b2lkIGRlc3Ryb3koY2hhciosIGNoYXIqKSB7fQppbmxpbmUgdm9pZCBk
ZXN0cm95KHdjaGFyX3QqLCB3Y2hhcl90Kikge30KCiAKCgoKIAogCiAKIyAzMiAiL29wdC9tdnBs
b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2lu
Y2x1ZGUvZysrLTMvdmVjdG9yIiAyIDMKCiMgMSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9z
cGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3Vu
aW5pdGlhbGl6ZWQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoK
IAoKIAogCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+Cmlu
bGluZSBfRm9yd2FyZEl0ZXIgCl9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX0Zvcndh
cmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCnsK
ICByZXR1cm4gY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVyIApfX3VuaW5p
dGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKewogIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9f
cmVzdWx0OwogIHRyeSAgewogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0
LCArK19fY3VyKQogICAgICBjb25zdHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOwogICAgcmV0dXJu
IF9fY3VyOwogIH0KICBjYXRjaCguLi4pIHsgIGRlc3Ryb3koX19yZXN1bHQsIF9fY3VyKSA7IHRo
cm93OyB9IDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0
ZXIsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29weShf
SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIF9UcCopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlw
ZV90cmFpdHM8X1RwPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICByZXR1cm4gX191bmluaXRpYWxp
emVkX2NvcHlfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9Jc19QT0QoKSk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBfRm9y
d2FyZEl0ZXIKICB1bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KQp7
CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZSggX19yZXN1bHQgKSAp
Owp9CgppbmxpbmUgY2hhciogdW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IGNoYXIqIF9fZmlyc3Qs
IGNvbnN0IGNoYXIqIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy
KiBfX3Jlc3VsdCkgewogIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIF9fbGFzdCAtIF9fZmly
c3QpOwogIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKaW5saW5lIHdj
aGFyX3QqIAp1bmluaXRpYWxpemVkX2NvcHkoY29uc3Qgd2NoYXJfdCogX19maXJzdCwgY29uc3Qg
d2NoYXJfdCogX19sYXN0LAogICAgICAgICAgICAgICAgICAgd2NoYXJfdCogX19yZXN1bHQpCnsK
ICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXplb2Yod2NoYXJfdCkgKiAoX19sYXN0IC0g
X19maXJzdCkpOwogIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKIAoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0
ZXI+CnBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPgpfX3VuaW5pdGlhbGl6ZWRfY29weV9u
KF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAg
ICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRl
cmF0b3JfdGFnKQp7CiAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19yZXN1bHQ7CiAgdHJ5ICB7CiAg
ICBmb3IgKCA7IF9fY291bnQgPiAwIDsgLS1fX2NvdW50LCArK19fZmlyc3QsICsrX19jdXIpIAog
ICAgICBjb25zdHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOwogICAgcmV0dXJuIHBhaXI8X0lucHV0
SXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2N1cik7CiAgfQogIGNhdGNoKC4uLikgeyAg
ZGVzdHJveShfX3Jlc3VsdCwgX19jdXIpIDsgdGhyb3c7IH0gOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGlu
ZSBwYWlyPF9SYW5kb21BY2Nlc3NJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9fdW5pbml0aWFsaXplZF9j
b3B5X24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAg
ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpIHsKICBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
c3QgPSBfX2ZpcnN0ICsgX19jb3VudDsKICByZXR1cm4gcGFpcjxfUmFuZG9tQWNjZXNzSXRlciwg
X0ZvcndhcmRJdGVyPigKICAgICAgICAgICAgICAgICBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
dW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+Cmlu
bGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4KX191bmluaXRpYWxpemVkX2NvcHlf
bihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAg
IF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkgewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9u
KF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIHBhaXI8
X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPgp1bmluaXRpYWxpemVkX2NvcHlfbihfSW5wdXRJdGVy
IF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl
ciBfX3Jlc3VsdCkgewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9fZmlyc3QsIF9f
Y291bnQsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0
b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOwp9CgogCiAKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIAogICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQp7CiAgZmlsbChfX2ZpcnN0LCBf
X2xhc3QsIF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4K
dm9pZApfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlciBfX2xhc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gs
IF9fZmFsc2VfdHlwZSkKewogIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAgdHJ5ICB7
CiAgICBmb3IgKCA7IF9fY3VyICE9IF9fbGFzdDsgKytfX2N1cikKICAgICAgY29uc3RydWN0KCYq
X19jdXIsIF9feCk7CiAgfQogIGNhdGNoKC4uLikgeyAgZGVzdHJveShfX2ZpcnN0LCBfX2N1cikg
OyB0aHJvdzsgfSA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwg
Y2xhc3MgX1RwMT4KaW5saW5lIHZvaWQgX191bmluaXRpYWxpemVkX2ZpbGwoX0ZvcndhcmRJdGVy
IF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIg
X19sYXN0LCBjb25zdCBfVHAmIF9feCwgX1RwMSopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlw
ZV90cmFpdHM8X1RwMT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgX191bmluaXRpYWxpemVkX2Zp
bGxfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX194LCBfSXNfUE9EKCkpOwogICAgICAgICAgICAgICAg
ICAgCn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZv
aWQgdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkKewogIF9fdW5pbml0aWFsaXplZF9maWxsKF9f
Zmlyc3QsIF9fbGFzdCwgX194LCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSApOwp9CgogCiAKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KaW5saW5l
IF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9f
eCwgX190cnVlX3R5cGUpCnsKICByZXR1cm4gZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194KTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KX0Zv
cndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBf
X2ZhbHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogIHRyeSAgewog
ICAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2N1cikKICAgICAgY29uc3RydWN0KCYqX19j
dXIsIF9feCk7CiAgICByZXR1cm4gX19jdXI7CiAgfQogIGNhdGNoKC4uLikgeyAgZGVzdHJveShf
X2ZpcnN0LCBfX2N1cikgOyB0aHJvdzsgfSA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CmlubGluZSBfRm9yd2FyZEl0
ZXIgCl9fdW5pbml0aWFsaXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9f
biwgY29uc3QgX1RwJiBfX3gsIF9UcDEqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJh
aXRzPF9UcDE+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRf
ZmlsbF9uX2F1eChfX2ZpcnN0LCBfX24sIF9feCwgX0lzX1BPRCgpKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJk
SXRlciAKdW5pbml0aWFsaXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9f
biwgY29uc3QgX1RwJiBfX3gpCnsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbihfX2Zp
cnN0LCBfX24sIF9feCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKIAogCgogCiAKIAog
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBf
Rm9yd2FyZEl0ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHlfY29w
eShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCnsKICBfRm9y
d2FyZEl0ZXIgX19taWQgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9f
cmVzdWx0KTsKICB0cnkgIHsKICAgIHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDIs
IF9fbGFzdDIsIF9fbWlkKTsKICB9CiAgY2F0Y2goLi4uKSB7ICBkZXN0cm95KF9fcmVzdWx0LCBf
X21pZCkgOyB0aHJvdzsgfSA7Cn0KCiAKIAogCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs
IGNsYXNzIF9UcCwgY2xhc3MgX0lucHV0SXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlciAKX191bmlu
aXRpYWxpemVkX2ZpbGxfY29weShfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIF9Gb3J3YXJkSXRlciBf
X21pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0KQp7
CiAgdW5pbml0aWFsaXplZF9maWxsKF9fcmVzdWx0LCBfX21pZCwgX194KTsKICB0cnkgIHsKICAg
IHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX21pZCk7CiAgfQog
IGNhdGNoKC4uLikgeyAgZGVzdHJveShfX3Jlc3VsdCwgX19taWQpIDsgdGhyb3c7IH0gOwp9Cgog
CiAKIAp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz
cyBfVHA+CmlubGluZSB2b2lkCl9fdW5pbml0aWFsaXplZF9jb3B5X2ZpbGwoX0lucHV0SXRlciBf
X2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9G
b3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpCnsKICBfRm9yd2FyZEl0ZXIgX19taWQyID0gdW5p
bml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0Mik7CiAgdHJ5ICB7CiAg
ICB1bmluaXRpYWxpemVkX2ZpbGwoX19taWQyLCBfX2xhc3QyLCBfX3gpOwogIH0KICBjYXRjaCgu
Li4pIHsgIGRlc3Ryb3koX19maXJzdDIsIF9fbWlkMikgOyB0aHJvdzsgfSA7Cn0KCiAKCgoKIAog
CiAKIyAzMyAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45
NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvdmVjdG9yIiAyIDMKCiMgMSAiL29wdC9tdnBs
b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2lu
Y2x1ZGUvZysrLTMvc3RsX3ZlY3Rvci5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
IAoKCgoKCgogIAoKCgoKCgogCiAKIAogCiAKCgoKIAp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2NhdG9yLCBib29sIF9Jc1N0YXRpYz4KY2xhc3MgX1ZlY3Rvcl9hbGxvY19iYXNlIHsK
cHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+
OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5
cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yOyB9Cgog
IF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfTV9k
YXRhX2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRfb2Zf
c3RvcmFnZSgwKSAKICB7fQogIApwcm90ZWN0ZWQ6CiAgYWxsb2NhdG9yX3R5cGUgX01fZGF0YV9h
bGxvY2F0b3I7CiAgX1RwKiBfTV9zdGFydDsKICBfVHAqIF9NX2ZpbmlzaDsKICBfVHAqIF9NX2Vu
ZF9vZl9zdG9yYWdlOwoKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVy
biBfTV9kYXRhX2FsbG9jYXRvci5hbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRl
KF9UcCogX19wLCBzaXplX3QgX19uKQogICAgeyBpZiAoX19wKSBfTV9kYXRhX2FsbG9jYXRvci5k
ZWFsbG9jYXRlKF9fcCwgX19uKTsgfQp9OwoKIAogCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvY2F0b3I+CmNsYXNzIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvY2F0b3IsIHRy
dWU+IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxv
Y2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2Nh
dG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7
IH0KCiAgX1ZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgIDogX01f
c3RhcnQoMCksIF9NX2ZpbmlzaCgwKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkgCiAge30KICAKcHJv
dGVjdGVkOgogIF9UcCogX01fc3RhcnQ7CiAgX1RwKiBfTV9maW5pc2g7CiAgX1RwKiBfTV9lbmRf
b2Zfc3RvcmFnZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9j
YXRvcj46Ol9BbGxvY190eXBlIF9BbGxvY190eXBlOwogIF9UcCogX01fYWxsb2NhdGUoc2l6ZV90
IF9fbikKICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBf
TV9kZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19uKQogICAgeyBfQWxsb2NfdHlwZTo6ZGVh
bGxvY2F0ZShfX3AsIF9fbik7fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j
PgpzdHJ1Y3QgX1ZlY3Rvcl9iYXNlCiAgOiBwdWJsaWMgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwg
X0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwg
X0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgp7CiAgdHlwZWRlZiBfVmVjdG9yX2FsbG9jX2Jhc2U8
X1RwLCBfQWxsb2MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8
X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKICB0eXBlZGVm
IHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX1ZlY3Rv
cl9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7fQogIF9WZWN0
b3JfYmFzZShzaXplX3QgX19uLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9f
YSkgewogICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZmluaXNoID0gX01f
c3RhcnQ7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogIH0KCiAgfl9W
ZWN0b3JfYmFzZSgpIHsgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2Ug
LSBfTV9zdGFydCk7IH0KfTsgICAgCgojIDE1MCAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9z
cGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3Zl
Y3Rvci5oIiAzCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9y
PCBfVHAgPiAgPgpjbGFzcyB2ZWN0b3IgOiBwcm90ZWN0ZWQgX1ZlY3Rvcl9iYXNlPF9UcCwgX0Fs
bG9jPiAKewpwcml2YXRlOgogIHR5cGVkZWYgX1ZlY3Rvcl9iYXNlPF9UcCwgX0FsbG9jPiBfQmFz
ZTsKcHVibGljOgogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2YWx1ZV90eXBl
KiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICB0
eXBlZGVmIHZhbHVlX3R5cGUqIGl0ZXJhdG9yOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSog
Y29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7CiAgdHlwZWRl
ZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBzaXplX3Qgc2l6
ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCiAgdHlwZWRlZiB0
eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9y
X3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9y
KCk7IH0KCgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3Rf
cmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJl
dmVyc2VfaXRlcmF0b3I7CgoKCgoKCgpwcm90ZWN0ZWQ6CgogIHVzaW5nIF9CYXNlOjpfTV9hbGxv
Y2F0ZTsKICB1c2luZyBfQmFzZTo6X01fZGVhbGxvY2F0ZTsKICB1c2luZyBfQmFzZTo6X01fc3Rh
cnQ7CiAgdXNpbmcgX0Jhc2U6Ol9NX2ZpbmlzaDsKICB1c2luZyBfQmFzZTo6X01fZW5kX29mX3N0
b3JhZ2U7CgoKcHJvdGVjdGVkOgogIHZvaWQgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0
aW9uLCBjb25zdCBfVHAmIF9feCk7CiAgdm9pZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9z
aXRpb24pOwoKcHVibGljOgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gX01fc3RhcnQ7IH0K
ICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3N0YXJ0OyB9CiAgaXRl
cmF0b3IgZW5kKCkgeyByZXR1cm4gX01fZmluaXNoOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkg
Y29uc3QgeyByZXR1cm4gX01fZmluaXNoOyB9CgogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkK
ICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9p
dGVyYXRvciByYmVnaW4oKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRv
cihlbmQoKSk7IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKQogICAgeyByZXR1cm4gcmV2ZXJz
ZV9pdGVyYXRvcihiZWdpbigpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNv
bnN0CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CgogIHNp
emVfdHlwZSBzaXplKCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemVfdHlwZShlbmQoKSAtIGJlZ2lu
KCkpOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemVfdHlw
ZSgtMSkgLyBzaXplb2YoX1RwKTsgfQogIHNpemVfdHlwZSBjYXBhY2l0eSgpIGNvbnN0CiAgICB7
IHJldHVybiBzaXplX3R5cGUoX01fZW5kX29mX3N0b3JhZ2UgLSBiZWdpbigpKTsgfQogIGJvb2wg
ZW1wdHkoKSBjb25zdAogICAgeyByZXR1cm4gYmVnaW4oKSA9PSBlbmQoKTsgfQoKICByZWZlcmVu
Y2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSB7IHJldHVybiAqKGJlZ2luKCkgKyBfX24pOyB9
CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QgeyByZXR1
cm4gKihiZWdpbigpICsgX19uKTsgfQoKICBleHBsaWNpdCB2ZWN0b3IoY29uc3QgYWxsb2NhdG9y
X3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fYSkge30KCiAgdmVj
dG9yKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSwKICAgICAgICAgY29uc3QgYWxs
b2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpIAogICAgOiBfQmFzZShfX24sIF9f
YSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwg
X192YWx1ZSk7IH0KCiAgZXhwbGljaXQgdmVjdG9yKHNpemVfdHlwZSBfX24pCiAgICA6IF9CYXNl
KF9fbiwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9m
aWxsX24oX01fc3RhcnQsIF9fbiwgX1RwKCkpOyB9CgogIHZlY3Rvcihjb25zdCB2ZWN0b3I8X1Rw
LCBfQWxsb2M+JiBfX3gpIAogICAgOiBfQmFzZShfX3guc2l6ZSgpLCBfX3guZ2V0X2FsbG9jYXRv
cigpKQogICAgeyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCksIF9f
eC5lbmQoKSwgX01fc3RhcnQpOyB9CgoKICAgCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yPgogIHZlY3RvcihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xh
c3QsCiAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgp
KSA6IF9CYXNlKF9fYSkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJ
dGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9pbml0aWFsaXplX2F1eChfX2Zp
cnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdl
cj4KICB2b2lkIF9NX2luaXRpYWxpemVfYXV4KF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWx1
ZSwgX190cnVlX3R5cGUpIHsKICAgIF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgIF9N
X2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247IAogICAgX01fZmluaXNoID0gdW5pbml0
aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX192YWx1ZSk7CiAgfQoKICB0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9pbml0aWFsaXplX2F1eChfSW5wdXRJdGVy
YXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2ZhbHNlX3R5cGUpIHsKICAgIF9NX3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19s
YXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsKICB9CgoKCgoKCgoKICB+dmVj
dG9yKCkgeyBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOyB9CgogIHZlY3RvcjxfVHAsIF9B
bGxvYz4mIG9wZXJhdG9yPShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpOwogIHZvaWQg
cmVzZXJ2ZShzaXplX3R5cGUgX19uKSB7CiAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAg
ICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgICAgaXRlcmF0b3IgX190
bXAgPSBfTV9hbGxvY2F0ZV9hbmRfY29weShfX24sIF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAg
ICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0
YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX3Rt
cDsKICAgICAgX01fZmluaXNoID0gX190bXAgKyBfX29sZF9zaXplOwogICAgICBfTV9lbmRfb2Zf
c3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogICAgfQogIH0KCiAgIAogICAKICAgCiAgIAoKICB2
b2lkIGFzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKTsKCgogIAogIHRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBf
X2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lz
X2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01fYXNz
aWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxh
dGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9f
biwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAgeyBhc3NpZ24oKHNpemVfdHlwZSkg
X19uLCAoX1RwKSBfX3ZhbCk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CiAgdm9p
ZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz
dCwgX19mYWxzZV90eXBlKQogICAgeyBfTV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19p
dGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf
SW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9y
X3RhZyk7CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fYXNz
aWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7IAoKCgogIHJlZmVy
ZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9CiAgY29uc3RfcmVmZXJlbmNlIGZyb250
KCkgY29uc3QgeyByZXR1cm4gKmJlZ2luKCk7IH0KICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJu
ICooZW5kKCkgLSAxKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4g
KihlbmQoKSAtIDEpOyB9CgogIHZvaWQgcHVzaF9iYWNrKGNvbnN0IF9UcCYgX194KSB7CiAgICBp
ZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICAgIGNvbnN0cnVjdChfTV9m
aW5pc2gsIF9feCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9p
bnNlcnRfYXV4KGVuZCgpLCBfX3gpOwogIH0KICB2b2lkIHB1c2hfYmFjaygpIHsKICAgIGlmIChf
TV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgICAgY29uc3RydWN0KF9NX2Zpbmlz
aCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4
KGVuZCgpKTsKICB9CiAgdm9pZCBzd2FwKHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkgewogICAg
IDo6c3dhcChfTV9zdGFydCwgX194Ll9NX3N0YXJ0KTsKICAgICA6OnN3YXAoX01fZmluaXNoLCBf
X3guX01fZmluaXNoKTsKICAgICA6OnN3YXAoX01fZW5kX29mX3N0b3JhZ2UsIF9feC5fTV9lbmRf
b2Zfc3RvcmFnZSk7CiAgfQoKICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwg
Y29uc3QgX1RwJiBfX3gpIHsKICAgIHNpemVfdHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4o
KTsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9
PSBlbmQoKSkgewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoLCBfX3gpOwogICAgICArK19NX2Zp
bmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChfX3Bvc2l0aW9uLCBfX3gp
OwogICAgcmV0dXJuIGJlZ2luKCkgKyBfX247CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRv
ciBfX3Bvc2l0aW9uKSB7CiAgICBzaXplX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7
CiAgICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0g
ZW5kKCkpIHsKICAgICAgY29uc3RydWN0KF9NX2ZpbmlzaCk7CiAgICAgICsrX01fZmluaXNoOwog
ICAgfQogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KF9fcG9zaXRpb24pOwogICAgcmV0dXJu
IGJlZ2luKCkgKyBfX247CiAgfQoKICAgCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
PgogIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf
SW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8
X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01faW5zZXJ0X2Rpc3Bh
dGNoKF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRl
IDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3Bv
cywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3RydWVfdHlwZSkgewogICAgaW5zZXJ0KF9fcG9zLCAoc2l6ZV90eXBlKSBfX24sIChfVHAp
IF9fdmFsKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9N
X2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAg
ICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICBfTV9yYW5nZV9pbnNlcnQoX19w
b3MsIF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7CiAg
fQoKCgoKCiAgdm9pZCBpbnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25z
dCBfVHAmIF9feCk7CgogIHZvaWQgcG9wX2JhY2soKSB7CiAgICAtLV9NX2ZpbmlzaDsKICAgIGRl
c3Ryb3koX01fZmluaXNoKTsKICB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlv
bikgewogICAgaWYgKF9fcG9zaXRpb24gKyAxICE9IGVuZCgpKQogICAgICBjb3B5KF9fcG9zaXRp
b24gKyAxLCBfTV9maW5pc2gsIF9fcG9zaXRpb24pOwogICAgLS1fTV9maW5pc2g7CiAgICBkZXN0
cm95KF9NX2ZpbmlzaCk7CiAgICByZXR1cm4gX19wb3NpdGlvbjsKICB9CiAgaXRlcmF0b3IgZXJh
c2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICBpdGVyYXRvciBfX2kg
PSBjb3B5KF9fbGFzdCwgX01fZmluaXNoLCBfX2ZpcnN0KTsKICAgIGRlc3Ryb3koX19pLCBfTV9m
aW5pc2gpOwogICAgX01fZmluaXNoID0gX01fZmluaXNoIC0gKF9fbGFzdCAtIF9fZmlyc3QpOwog
ICAgcmV0dXJuIF9fZmlyc3Q7CiAgfQoKICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6
ZSwgY29uc3QgX1RwJiBfX3gpIHsKICAgIGlmIChfX25ld19zaXplIDwgc2l6ZSgpKSAKICAgICAg
ZXJhc2UoYmVnaW4oKSArIF9fbmV3X3NpemUsIGVuZCgpKTsKICAgIGVsc2UKICAgICAgaW5zZXJ0
KGVuZCgpLCBfX25ld19zaXplIC0gc2l6ZSgpLCBfX3gpOwogIH0KICB2b2lkIHJlc2l6ZShzaXpl
X3R5cGUgX19uZXdfc2l6ZSkgeyByZXNpemUoX19uZXdfc2l6ZSwgX1RwKCkpOyB9CiAgdm9pZCBj
bGVhcigpIHsgZXJhc2UoYmVnaW4oKSwgZW5kKCkpOyB9Cgpwcm90ZWN0ZWQ6CgoKICB0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICBpdGVyYXRvciBfTV9hbGxvY2F0ZV9hbmRfY29w
eShzaXplX3R5cGUgX19uLCBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0
KQp7CiAgICBpdGVyYXRvciBfX3Jlc3VsdCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICB0cnkgIHsK
ICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogICAg
ICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiAgICBjYXRjaCguLi4pIHsgIF9NX2RlYWxsb2NhdGUo
X19yZXN1bHQsIF9fbikgOyB0aHJvdzsgfSA7CiAgfQojIDQ0MCAiL29wdC9tdnBsb2NhbC9saWIv
Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvc3RsX3ZlY3Rvci5oIiAzCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K
ICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0X2l0ZXJh
dG9yX3RhZykKICB7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAg
ICAgIHB1c2hfYmFjaygqX19maXJzdCk7CiAgfQoKICAgCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbml0aWFsaXplKF9Gb3J3YXJkSXRlcmF0b3Ig
X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xh
c3QsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogIHsKICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAg
ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24pOwogICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0
ZShfX24pOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAgIF9NX2Zp
bmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KTsKICB9
CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luc2Vy
dChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBf
X2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgaW5w
dXRfaXRlcmF0b3JfdGFnKTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAg
dm9pZCBfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAg
ICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgoKfTsKCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgCm9wZXJhdG9yPT0oY29uc3Qg
dmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kp
CnsKICByZXR1cm4gX194LnNpemUoKSA9PSBfX3kuc2l6ZSgpICYmCiAgICAgICAgIGVxdWFsKF9f
eC5iZWdpbigpLCBfX3guZW5kKCksIF9feS5iZWdpbigpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCAKb3BlcmF0b3I8KGNvbnN0IHZlY3RvcjxfVHAs
IF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQp7CiAgcmV0dXJu
IGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3kuYmVnaW4oKSwgX195LmVuZCgpKTsKfQoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3YXAodmVjdG9y
PF9UcCwgX0FsbG9jPiYgX194LCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICBfX3guc3dh
cChfX3kpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KdmVjdG9yPF9U
cCxfQWxsb2M+JiAKdmVjdG9yPF9UcCxfQWxsb2M+OjpvcGVyYXRvcj0oY29uc3QgdmVjdG9yPF9U
cCwgX0FsbG9jPiYgX194KQp7CiAgaWYgKCZfX3ggIT0gdGhpcykgewogICAgY29uc3Qgc2l6ZV90
eXBlIF9feGxlbiA9IF9feC5zaXplKCk7CiAgICBpZiAoX194bGVuID4gY2FwYWNpdHkoKSkgewog
ICAgICBpdGVyYXRvciBfX3RtcCA9IF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9feGxlbiwgX194LmJl
Z2luKCksIF9feC5lbmQoKSk7CiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAg
ICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQp
OwogICAgICBfTV9zdGFydCA9IF9fdG1wOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0
YXJ0ICsgX194bGVuOwogICAgfQogICAgZWxzZSBpZiAoc2l6ZSgpID49IF9feGxlbikgewogICAg
ICBpdGVyYXRvciBfX2kgPSBjb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIGJlZ2luKCkpOwog
ICAgICBkZXN0cm95KF9faSwgX01fZmluaXNoKTsKICAgIH0KICAgIGVsc2UgewogICAgICBjb3B5
KF9feC5iZWdpbigpLCBfX3guYmVnaW4oKSArIHNpemUoKSwgX01fc3RhcnQpOwogICAgICB1bmlu
aXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCkgKyBzaXplKCksIF9feC5lbmQoKSwgX01fZmluaXNo
KTsKICAgIH0KICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsgX194bGVuOwogIH0KICByZXR1cm4g
KnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCB2ZWN0b3I8
X1RwLCBfQWxsb2M+Ojphc3NpZ24oc2l6ZV90IF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX192YWwp
IHsKICBpZiAoX19uID4gY2FwYWNpdHkoKSkgewogICAgdmVjdG9yPF9UcCwgX0FsbG9jPiBfX3Rt
cChfX24sIF9fdmFsLCBnZXRfYWxsb2NhdG9yKCkpOwogICAgX190bXAuc3dhcCgqdGhpcyk7CiAg
fQogIGVsc2UgaWYgKF9fbiA+IHNpemUoKSkgewogICAgZmlsbChiZWdpbigpLCBlbmQoKSwgX192
YWwpOwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fZmluaXNoLCBfX24g
LSBzaXplKCksIF9fdmFsKTsKICB9CiAgZWxzZQogICAgZXJhc2UoZmlsbF9uKGJlZ2luKCksIF9f
biwgX192YWwpLCBlbmQoKSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j
PiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4Kdm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+Ojpf
TV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsK
ICBpdGVyYXRvciBfX2N1ciA9IGJlZ2luKCk7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAm
JiBfX2N1ciAhPSBlbmQoKTsgKytfX2N1ciwgKytfX2ZpcnN0KQogICAgKl9fY3VyID0gKl9fZmly
c3Q7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgZXJhc2UoX19jdXIsIGVuZCgpKTsKICBl
bHNlCiAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4Kdm9pZAp2
ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
cndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgc2l6ZV90eXBlIF9fbGVuID0gMDsKICBkaXN0YW5jZShf
X2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKCiAgaWYgKF9fbGVuID4gY2FwYWNpdHkoKSkgewogICAg
aXRlcmF0b3IgX190bXAgPSBfTV9hbGxvY2F0ZV9hbmRfY29weShfX2xlbiwgX19maXJzdCwgX19s
YXN0KTsKICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICBfTV9kZWFsbG9jYXRl
KF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0g
X190bXA7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsgX19s
ZW47CiAgfQogIGVsc2UgaWYgKHNpemUoKSA+PSBfX2xlbikgewogICAgaXRlcmF0b3IgX19uZXdf
ZmluaXNoID0gY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KTsKICAgIGRlc3Ryb3koX19u
ZXdfZmluaXNoLCBfTV9maW5pc2gpOwogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoOwogIH0K
ICBlbHNlIHsKICAgIF9Gb3J3YXJkSXRlciBfX21pZCA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9f
bWlkLCBzaXplKCkpOwogICAgY29weShfX2ZpcnN0LCBfX21pZCwgX01fc3RhcnQpOwogICAgX01f
ZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fbWlkLCBfX2xhc3QsIF9NX2ZpbmlzaCk7CiAg
fQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCAKdmVjdG9yPF9U
cCwgX0FsbG9jPjo6X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAm
IF9feCkKewogIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgIGNvbnN0
cnVjdChfTV9maW5pc2gsICooX01fZmluaXNoIC0gMSkpOwogICAgKytfTV9maW5pc2g7CiAgICBf
VHAgX194X2NvcHkgPSBfX3g7CiAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9NX2Zpbmlz
aCAtIDIsIF9NX2ZpbmlzaCAtIDEpOwogICAgKl9fcG9zaXRpb24gPSBfX3hfY29weTsKICB9CiAg
ZWxzZSB7CiAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgIGNvbnN0
IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgIT0gMCA/IDIgKiBfX29sZF9zaXplIDogMTsK
ICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fYWxsb2NhdGUoX19sZW4pOwogICAgaXRlcmF0
b3IgX19uZXdfZmluaXNoID0gX19uZXdfc3RhcnQ7CiAgICB0cnkgIHsKICAgICAgX19uZXdfZmlu
aXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9NX3N0YXJ0LCBfX3Bvc2l0aW9uLCBfX25ld19zdGFy
dCk7CiAgICAgIGNvbnN0cnVjdChfX25ld19maW5pc2gsIF9feCk7CiAgICAgICsrX19uZXdfZmlu
aXNoOwogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwg
X01fZmluaXNoLCBfX25ld19maW5pc2gpOwogICAgfQogICAgY2F0Y2goLi4uKSB7ICAoZGVzdHJv
eShfX25ld19zdGFydCxfX25ld19maW5pc2gpLCAKICAgICAgICAgICAgICAgICAgX01fZGVhbGxv
Y2F0ZShfX25ld19zdGFydCxfX2xlbikpIDsgdGhyb3c7IH0gOwogICAgZGVzdHJveShiZWdpbigp
LCBlbmQoKSk7CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAt
IF9NX3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICBfTV9maW5pc2ggPSBf
X25ld19maW5pc2g7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsgX19sZW47
CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgCnZlY3Rvcjxf
VHAsIF9BbGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbikKewogIGlmIChf
TV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgIGNvbnN0cnVjdChfTV9maW5pc2gs
ICooX01fZmluaXNoIC0gMSkpOwogICAgKytfTV9maW5pc2g7CiAgICBjb3B5X2JhY2t3YXJkKF9f
cG9zaXRpb24sIF9NX2ZpbmlzaCAtIDIsIF9NX2ZpbmlzaCAtIDEpOwogICAgKl9fcG9zaXRpb24g
PSBfVHAoKTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNp
emUoKTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgIT0gMCA/IDIgKiBf
X29sZF9zaXplIDogMTsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fYWxsb2NhdGUoX19s
ZW4pOwogICAgaXRlcmF0b3IgX19uZXdfZmluaXNoID0gX19uZXdfc3RhcnQ7CiAgICB0cnkgIHsK
ICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9NX3N0YXJ0LCBfX3Bvc2l0
aW9uLCBfX25ld19zdGFydCk7CiAgICAgIGNvbnN0cnVjdChfX25ld19maW5pc2gpOwogICAgICAr
K19fbmV3X2ZpbmlzaDsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9f
cG9zaXRpb24sIF9NX2ZpbmlzaCwgX19uZXdfZmluaXNoKTsKICAgIH0KICAgIGNhdGNoKC4uLikg
eyAgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwgCiAgICAgICAgICAgICAgICAg
IF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQsX19sZW4pKSA7IHRocm93OyB9IDsKICAgIGRlc3Ry
b3koYmVnaW4oKSwgZW5kKCkpOwogICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29m
X3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAgX01f
ZmluaXNoID0gX19uZXdfZmluaXNoOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFy
dCArIF9fbGVuOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lk
IHZlY3RvcjxfVHAsIF9BbGxvYz46Omluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5
cGUgX19uLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gp
CnsKICBpZiAoX19uICE9IDApIHsKICAgIGlmIChzaXplX3R5cGUoX01fZW5kX29mX3N0b3JhZ2Ug
LSBfTV9maW5pc2gpID49IF9fbikgewogICAgICBfVHAgX194X2NvcHkgPSBfX3g7CiAgICAgIGNv
bnN0IHNpemVfdHlwZSBfX2VsZW1zX2FmdGVyID0gX01fZmluaXNoIC0gX19wb3NpdGlvbjsKICAg
ICAgaXRlcmF0b3IgX19vbGRfZmluaXNoID0gX01fZmluaXNoOwogICAgICBpZiAoX19lbGVtc19h
ZnRlciA+IF9fbikgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfTV9maW5pc2ggLSBfX24s
IF9NX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAg
IGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5p
c2gpOwogICAgICAgIGZpbGwoX19wb3NpdGlvbiwgX19wb3NpdGlvbiArIF9fbiwgX194X2NvcHkp
OwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2Zp
bmlzaCwgX19uIC0gX19lbGVtc19hZnRlciwgX194X2NvcHkpOwogICAgICAgIF9NX2ZpbmlzaCAr
PSBfX24gLSBfX2VsZW1zX2FmdGVyOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0
aW9uLCBfX29sZF9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fZWxl
bXNfYWZ0ZXI7CiAgICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9feF9jb3B5
KTsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9z
aXplID0gc2l6ZSgpOyAgICAgICAgCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xk
X3NpemUgKyBtYXgoX19vbGRfc2l6ZSwgX19uKTsKICAgICAgaXRlcmF0b3IgX19uZXdfc3RhcnQg
PSBfTV9hbGxvY2F0ZShfX2xlbik7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IF9fbmV3
X3N0YXJ0OwogICAgICB0cnkgIHsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVk
X2NvcHkoX01fc3RhcnQsIF9fcG9zaXRpb24sIF9fbmV3X3N0YXJ0KTsKICAgICAgICBfX25ld19m
aW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfX25ld19maW5pc2gsIF9fbiwgX194KTsKICAg
ICAgICBfX25ld19maW5pc2gKICAgICAgICAgID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRp
b24sIF9NX2ZpbmlzaCwgX19uZXdfZmluaXNoKTsKICAgICAgfQogICAgICBjYXRjaCguLi4pIHsg
IChkZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIAogICAgICAgICAgICAgICAgICAg
IF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQsX19sZW4pKSA7IHRocm93OyB9IDsKICAgICAgZGVz
dHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwg
X01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3Rh
cnQ7CiAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgICAgX01fZW5kX29mX3N0b3Jh
Z2UgPSBfX25ld19zdGFydCArIF9fbGVuOwogICAgfQogIH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4Kdm9pZCAK
dmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3Jf
dGFnKQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSB7CiAgICBfX3Bv
cyA9IGluc2VydChfX3BvcywgKl9fZmlyc3QpOwogICAgKytfX3BvczsKICB9Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0
b3I+CnZvaWQgCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX3JhbmdlX2luc2VydChpdGVyYXRvciBf
X3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ
dGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zv
cndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewogIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAg
c2l6ZV90eXBlIF9fbiA9IDA7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7CiAg
ICBpZiAoc2l6ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fZmluaXNoKSA+PSBfX24pIHsK
ICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPSBfTV9maW5pc2ggLSBfX3Bvc2l0
aW9uOwogICAgICBpdGVyYXRvciBfX29sZF9maW5pc2ggPSBfTV9maW5pc2g7CiAgICAgIGlmIChf
X2VsZW1zX2FmdGVyID4gX19uKSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9NX2Zpbmlz
aCAtIF9fbiwgX01fZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX247
CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2ggLSBfX24sIF9f
b2xkX2ZpbmlzaCk7CiAgICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcG9zaXRpb24pOwog
ICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2Zp
cnN0OwogICAgICAgIGFkdmFuY2UoX19taWQsIF9fZWxlbXNfYWZ0ZXIpOwogICAgICAgIHVuaW5p
dGlhbGl6ZWRfY29weShfX21pZCwgX19sYXN0LCBfTV9maW5pc2gpOwogICAgICAgIF9NX2Zpbmlz
aCArPSBfX24gLSBfX2VsZW1zX2FmdGVyOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bv
c2l0aW9uLCBfX29sZF9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9f
ZWxlbXNfYWZ0ZXI7CiAgICAgICAgY29weShfX2ZpcnN0LCBfX21pZCwgX19wb3NpdGlvbik7CiAg
ICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9
IHNpemUoKTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSArIG1heChf
X29sZF9zaXplLCBfX24pOwogICAgICBpdGVyYXRvciBfX25ld19zdGFydCA9IF9NX2FsbG9jYXRl
KF9fbGVuKTsKICAgICAgaXRlcmF0b3IgX19uZXdfZmluaXNoID0gX19uZXdfc3RhcnQ7CiAgICAg
IHRyeSAgewogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfTV9zdGFy
dCwgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5p
dGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbmV3X2ZpbmlzaCk7CiAgICAgICAgX19u
ZXdfZmluaXNoCiAgICAgICAgICA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfTV9m
aW5pc2gsIF9fbmV3X2ZpbmlzaCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKSB7ICAoZGVzdHJv
eShfX25ld19zdGFydCxfX25ld19maW5pc2gpLCAKICAgICAgICAgICAgICAgICAgICBfTV9kZWFs
bG9jYXRlKF9fbmV3X3N0YXJ0LF9fbGVuKSkgOyB0aHJvdzsgfSA7CiAgICAgIGRlc3Ryb3koX01f
c3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9v
Zl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAg
ICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19u
ZXdfc3RhcnQgKyBfX2xlbjsKICAgIH0KICB9Cn0KCiMgODEwICIvb3B0L212cGxvY2FsL2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst
My9zdGxfdmVjdG9yLmgiIDMKCgoKCgoKCiAgCgoKCiAKIAogCiMgMzQgIi9vcHQvbXZwbG9jYWwv
bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL3ZlY3RvciIgMiAzCgojIDEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMt
c3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9idmVjdG9y
LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAgCgpzdGF0aWMgY29u
c3QgaW50IF9fV09SRF9CSVQgPSBpbnQoOCAqc2l6ZW9mKHVuc2lnbmVkIGludCkpOwoKCgoKCgpz
dHJ1Y3QgX0JpdF9yZWZlcmVuY2UgewogIHVuc2lnbmVkIGludCogX01fcDsKICB1bnNpZ25lZCBp
bnQgX01fbWFzazsKICBfQml0X3JlZmVyZW5jZSh1bnNpZ25lZCBpbnQqIF9feCwgdW5zaWduZWQg
aW50IF9feSkgCiAgICA6IF9NX3AoX194KSwgX01fbWFzayhfX3kpIHt9CgpwdWJsaWM6CiAgX0Jp
dF9yZWZlcmVuY2UoKSA6IF9NX3AoMCksIF9NX21hc2soMCkge30KICBvcGVyYXRvciBib29sKCkg
Y29uc3QgeyByZXR1cm4gISghKCpfTV9wICYgX01fbWFzaykpOyB9CiAgX0JpdF9yZWZlcmVuY2Um
IG9wZXJhdG9yPShib29sIF9feCkKICB7CiAgICBpZiAoX194KSAgKl9NX3AgfD0gX01fbWFzazsK
ICAgIGVsc2UgICAgICAqX01fcCAmPSB+X01fbWFzazsKICAgIHJldHVybiAqdGhpczsKICB9CiAg
X0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShjb25zdCBfQml0X3JlZmVyZW5jZSYgX194KSAKICAg
IHsgcmV0dXJuICp0aGlzID0gYm9vbChfX3gpOyB9CiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9C
aXRfcmVmZXJlbmNlJiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiBib29sKCp0aGlzKSA9PSBib29s
KF9feCk7IH0KICBib29sIG9wZXJhdG9yPChjb25zdCBfQml0X3JlZmVyZW5jZSYgX194KSBjb25z
dCB7CiAgICByZXR1cm4gIWJvb2woKnRoaXMpICYmIGJvb2woX194KTsKICB9CiAgdm9pZCBmbGlw
KCkgeyAqX01fcCBePSBfTV9tYXNrOyB9Cn07CgppbmxpbmUgdm9pZCBzd2FwKF9CaXRfcmVmZXJl
bmNlIF9feCwgX0JpdF9yZWZlcmVuY2UgX195KQp7CiAgYm9vbCBfX3RtcCA9IF9feDsKICBfX3gg
PSBfX3k7CiAgX195ID0gX190bXA7Cn0KCnN0cnVjdCBfQml0X2l0ZXJhdG9yIDogcHVibGljIHJh
bmRvbV9hY2Nlc3NfaXRlcmF0b3I8Ym9vbCwgcHRyZGlmZl90PiB7CiAgdHlwZWRlZiBfQml0X3Jl
ZmVyZW5jZSAgcmVmZXJlbmNlOwogIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UqIHBvaW50ZXI7CiAg
dHlwZWRlZiBfQml0X2l0ZXJhdG9yICAgaXRlcmF0b3I7CgogIHVuc2lnbmVkIGludCogX01fcDsK
ICB1bnNpZ25lZCBpbnQgX01fb2Zmc2V0OwogIHZvaWQgYnVtcF91cCgpIHsKICAgIGlmIChfTV9v
ZmZzZXQrKyA9PSBfX1dPUkRfQklUIC0gMSkgewogICAgICBfTV9vZmZzZXQgPSAwOwogICAgICAr
K19NX3A7CiAgICB9CiAgfQogIHZvaWQgYnVtcF9kb3duKCkgewogICAgaWYgKF9NX29mZnNldC0t
ID09IDApIHsKICAgICAgX01fb2Zmc2V0ID0gX19XT1JEX0JJVCAtIDE7CiAgICAgIC0tX01fcDsK
ICAgIH0KICB9CgogIF9CaXRfaXRlcmF0b3IoKSA6IF9NX3AoMCksIF9NX29mZnNldCgwKSB7fQog
IF9CaXRfaXRlcmF0b3IodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpIAogICAg
OiBfTV9wKF9feCksIF9NX29mZnNldChfX3kpIHt9CiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNv
bnN0IHsgcmV0dXJuIHJlZmVyZW5jZShfTV9wLCAxVSA8PCBfTV9vZmZzZXQpOyB9CiAgaXRlcmF0
b3ImIG9wZXJhdG9yKysoKSB7CiAgICBidW1wX3VwKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQog
IGl0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwog
ICAgYnVtcF91cCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3It
LSgpIHsKICAgIGJ1bXBfZG93bigpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciBv
cGVyYXRvci0tKGludCkgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIGJ1bXBfZG93
bigpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3IrPShkaWZmZXJl
bmNlX3R5cGUgX19pKSB7CiAgICBkaWZmZXJlbmNlX3R5cGUgX19uID0gX19pICsgX01fb2Zmc2V0
OwogICAgX01fcCArPSBfX24gLyBfX1dPUkRfQklUOwogICAgX19uID0gX19uICUgX19XT1JEX0JJ
VDsKICAgIGlmIChfX24gPCAwKSB7CiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9f
biArIF9fV09SRF9CSVQ7CiAgICAgIC0tX01fcDsKICAgIH0gZWxzZQogICAgICBfTV9vZmZzZXQg
PSAodW5zaWduZWQgaW50KSBfX247CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yJiBv
cGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgICp0aGlzICs9IC1fX2k7CiAgICBy
ZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19p
KSBjb25zdCB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wICs9
IF9faTsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0
IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgLT0gX19pOwog
IH0KICBkaWZmZXJlbmNlX3R5cGUgb3BlcmF0b3ItKGl0ZXJhdG9yIF9feCkgY29uc3QgewogICAg
cmV0dXJuIF9fV09SRF9CSVQgKiAoX01fcCAtIF9feC5fTV9wKSArIF9NX29mZnNldCAtIF9feC5f
TV9vZmZzZXQ7CiAgfQogIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX2kp
IHsgcmV0dXJuICooKnRoaXMgKyBfX2kpOyB9CiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJh
dG9yJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wID09IF9feC5fTV9wICYmIF9NX29mZnNl
dCA9PSBfX3guX01fb2Zmc2V0OwogIH0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3Im
IF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3AgIT0gX194Ll9NX3AgfHwgX01fb2Zmc2V0ICE9
IF9feC5fTV9vZmZzZXQ7CiAgfQogIGJvb2wgb3BlcmF0b3I8KGl0ZXJhdG9yIF9feCkgY29uc3Qg
ewogICAgcmV0dXJuIF9NX3AgPCBfX3guX01fcCB8fCAoX01fcCA9PSBfX3guX01fcCAmJiBfTV9v
ZmZzZXQgPCBfX3guX01fb2Zmc2V0KTsKICB9Cn07CgpzdHJ1Y3QgX0JpdF9jb25zdF9pdGVyYXRv
cgogIDogcHVibGljIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3I8Ym9vbCwgcHRyZGlmZl90Pgp7CiAg
dHlwZWRlZiBib29sICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CiAgdHlwZWRlZiBib29sICAg
ICAgICAgICAgICAgICBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBib29sKiAgICAg
ICAgICBwb2ludGVyOwogIHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRvciAgY29uc3RfaXRlcmF0
b3I7CgogIHVuc2lnbmVkIGludCogX01fcDsKICB1bnNpZ25lZCBpbnQgX01fb2Zmc2V0OwogIHZv
aWQgYnVtcF91cCgpIHsKICAgIGlmIChfTV9vZmZzZXQrKyA9PSBfX1dPUkRfQklUIC0gMSkgewog
ICAgICBfTV9vZmZzZXQgPSAwOwogICAgICArK19NX3A7CiAgICB9CiAgfQogIHZvaWQgYnVtcF9k
b3duKCkgewogICAgaWYgKF9NX29mZnNldC0tID09IDApIHsKICAgICAgX01fb2Zmc2V0ID0gX19X
T1JEX0JJVCAtIDE7CiAgICAgIC0tX01fcDsKICAgIH0KICB9CgogIF9CaXRfY29uc3RfaXRlcmF0
b3IoKSA6IF9NX3AoMCksIF9NX29mZnNldCgwKSB7fQogIF9CaXRfY29uc3RfaXRlcmF0b3IodW5z
aWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpIAogICAgOiBfTV9wKF9feCksIF9NX29m
ZnNldChfX3kpIHt9CiAgX0JpdF9jb25zdF9pdGVyYXRvcihjb25zdCBfQml0X2l0ZXJhdG9yJiBf
X3gpIAogICAgOiBfTV9wKF9feC5fTV9wKSwgX01fb2Zmc2V0KF9feC5fTV9vZmZzZXQpIHt9CiAg
Y29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIHJldHVybiBfQml0X3JlZmVy
ZW5jZShfTV9wLCAxVSA8PCBfTV9vZmZzZXQpOwogIH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0
b3IrKygpIHsKICAgIGJ1bXBfdXAoKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRl
cmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7
CiAgICBidW1wX3VwKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBv
cGVyYXRvci0tKCkgewogICAgYnVtcF9kb3duKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNv
bnN0X2l0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9
ICp0aGlzOwogICAgYnVtcF9kb3duKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGNvbnN0X2l0
ZXJhdG9yJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgIGRpZmZlcmVuY2Vf
dHlwZSBfX24gPSBfX2kgKyBfTV9vZmZzZXQ7CiAgICBfTV9wICs9IF9fbiAvIF9fV09SRF9CSVQ7
CiAgICBfX24gPSBfX24gJSBfX1dPUkRfQklUOwogICAgaWYgKF9fbiA8IDApIHsKICAgICAgX01f
b2Zmc2V0ID0gKHVuc2lnbmVkIGludCkgX19uICsgX19XT1JEX0JJVDsKICAgICAgLS1fTV9wOwog
ICAgfSBlbHNlCiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbjsKICAgIHJldHVy
biAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBl
IF9faSkgewogICAgKnRoaXMgKz0gLV9faTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgY29uc3Rf
aXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGNvbnN0
X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgKz0gX19pOwogIH0KICBj
b25zdF9pdGVyYXRvciBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAg
Y29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCAtPSBfX2k7CiAg
fQogIGRpZmZlcmVuY2VfdHlwZSBvcGVyYXRvci0oY29uc3RfaXRlcmF0b3IgX194KSBjb25zdCB7
CiAgICByZXR1cm4gX19XT1JEX0JJVCAqIChfTV9wIC0gX194Ll9NX3ApICsgX01fb2Zmc2V0IC0g
X194Ll9NX29mZnNldDsKICB9CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5j
ZV90eXBlIF9faSkgeyAKICAgIHJldHVybiAqKCp0aGlzICsgX19pKTsgCiAgfQogIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBjb25zdF9pdGVyYXRvciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01f
cCA9PSBfX3guX01fcCAmJiBfTV9vZmZzZXQgPT0gX194Ll9NX29mZnNldDsKICB9CiAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBf
TV9wICE9IF9feC5fTV9wIHx8IF9NX29mZnNldCAhPSBfX3guX01fb2Zmc2V0OwogIH0KICBib29s
IG9wZXJhdG9yPChjb25zdF9pdGVyYXRvciBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wIDwg
X194Ll9NX3AgfHwgKF9NX3AgPT0gX194Ll9NX3AgJiYgX01fb2Zmc2V0IDwgX194Ll9NX29mZnNl
dCk7CiAgfQp9OwoKIAogCgoKCiAKdGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0b3IsIGJvb2wgX19p
c19zdGF0aWM+CmNsYXNzIF9CdmVjdG9yX2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRlZiB0
eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQog
ICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigp
IGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yOyB9CgogIF9CdmVjdG9yX2FsbG9jX2Jh
c2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX01fZGF0YV9hbGxvY2F0b3IoX19h
KSwgX01fc3RhcnQoKSwgX01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9yYWdlKDApIHt9Cgpwcm90
ZWN0ZWQ6CiAgdW5zaWduZWQgaW50KiBfTV9iaXRfYWxsb2Moc2l6ZV90IF9fbikgCiAgICB7IHJl
dHVybiBfTV9kYXRhX2FsbG9jYXRvci5hbGxvY2F0ZSgoX19uICsgX19XT1JEX0JJVCAtIDEpL19f
V09SRF9CSVQpOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKCkgewogICAgaWYgKF9NX3N0YXJ0Ll9N
X3ApCiAgICAgIF9NX2RhdGFfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX01fc3RhcnQuX01fcCwgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9z
dGFydC5fTV9wKTsKICB9ICAKCiAgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czx1bnNpZ25lZCBpbnQs
IF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZSAKICAgICAgICAgIF9NX2RhdGFfYWxsb2NhdG9y
OwogIF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBfTV9maW5pc2g7CiAg
dW5zaWduZWQgaW50KiBfTV9lbmRfb2Zfc3RvcmFnZTsKfTsKCiAKdGVtcGxhdGUgPGNsYXNzIF9B
bGxvY2F0b3I+CmNsYXNzIF9CdmVjdG9yX2FsbG9jX2Jhc2U8X0FsbG9jYXRvciwgdHJ1ZT4gewpw
dWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvY2F0b3I+
OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5
cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAg
X0J2ZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpCiAgICA6IF9NX3N0YXJ0
KCksIF9NX2ZpbmlzaCgpLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKSB7fQoKcHJvdGVjdGVkOgogIHR5
cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czx1bnNpZ25lZCBpbnQsIF9BbGxvY2F0b3I+Ojpf
QWxsb2NfdHlwZQogICAgICAgICAgX0FsbG9jX3R5cGU7CiAgICAgICAgICAKICB1bnNpZ25lZCBp
bnQqIF9NX2JpdF9hbGxvYyhzaXplX3QgX19uKSAKICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjph
bGxvY2F0ZSgoX19uICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQpOyB9CiAgdm9pZCBfTV9k
ZWFsbG9jYXRlKCkgewogICAgaWYgKF9NX3N0YXJ0Ll9NX3ApCiAgICAgIF9BbGxvY190eXBlOjpk
ZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9N
X2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQuX01fcCk7CiAgfSAgCgogIF9CaXRfaXRlcmF0b3Ig
X01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBfTV9maW5pc2g7CiAgdW5zaWduZWQgaW50KiBfTV9l
bmRfb2Zfc3RvcmFnZTsKfTsgIAoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KY2xhc3MgX0J2ZWN0
b3JfYmFzZQogIDogcHVibGljIF9CdmVjdG9yX2FsbG9jX2Jhc2U8X0FsbG9jLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2M+OjpfU19pbnN0
YW5jZWxlc3M+CnsKICB0eXBlZGVmIF9CdmVjdG9yX2FsbG9jX2Jhc2U8X0FsbG9jLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvYz46Ol9TX2lu
c3RhbmNlbGVzcz4KICAgICAgICAgIF9CYXNlOwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBf
QmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogIF9CdmVjdG9yX2Jhc2UoY29u
c3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkgOiBfQmFzZShfX2EpIHt9CiAgfl9CdmVjdG9yX2Jhc2Uo
KSB7IF9CYXNlOjpfTV9kZWFsbG9jYXRlKCk7IH0KfTsKCiMgMzQ4ICIvb3B0L212cGxvY2FsL2xp
Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9n
KystMy9zdGxfYnZlY3Rvci5oIiAzCgoKIAogCiAKIAoKCgoKCgoKCgoKICAgICAgICAKCiAgICAg
ICAgCnRlbXBsYXRlPGNsYXNzIF9BbGxvYz4gY2xhc3MgdmVjdG9yPGJvb2wsX0FsbG9jPgogIDog
cHVibGljIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPgoKCgoKewoKICB0eXBlZGVmIF9CdmVjdG9yX2Jh
c2U8X0FsbG9jPiBfQmFzZTsKCgoKcHVibGljOgogIHR5cGVkZWYgYm9vbCB2YWx1ZV90eXBlOwog
IHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNl
X3R5cGU7IAogIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYgYm9v
bCBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSogcG9pbnRlcjsKICB0
eXBlZGVmIGNvbnN0IGJvb2wqIGNvbnN0X3BvaW50ZXI7CgogIHR5cGVkZWYgX0JpdF9pdGVyYXRv
ciAgICAgICAgICAgICAgICBpdGVyYXRvcjsKICB0eXBlZGVmIF9CaXRfY29uc3RfaXRlcmF0b3Ig
ICAgICAgICAgY29uc3RfaXRlcmF0b3I7CgoKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29u
c3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiByZXZlcnNlX2l0
ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKCgoKCgoKICB0eXBlZGVmIHR5cGVu
YW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlw
ZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsg
fQoKcHJvdGVjdGVkOgoKCgoKCgoKCnByb3RlY3RlZDoKICB2b2lkIF9NX2luaXRpYWxpemUoc2l6
ZV90eXBlIF9fbikgewogICAgdW5zaWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19uKTsK
ICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dP
UkRfQklUOwogICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgX01fZmluaXNoID0g
X01fc3RhcnQgKyBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICB9CiAgdm9pZCBfTV9pbnNlcnRfYXV4
KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGJvb2wgX194KSB7CiAgICBpZiAoX01fZmluaXNoLl9NX3Ag
IT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBf
TV9maW5pc2gsIF9NX2ZpbmlzaCArIDEpOwogICAgICAqX19wb3NpdGlvbiA9IF9feDsKICAgICAg
KytfTV9maW5pc2g7CiAgICB9CiAgICBlbHNlIHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gc2l6
ZSgpID8gMiAqIHNpemUoKSA6IF9fV09SRF9CSVQ7CiAgICAgIHVuc2lnbmVkIGludCogX19xID0g
X01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgaXRlcmF0b3IgX19pID0gY29weShiZWdpbigpLCBf
X3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgKl9faSsrID0gX194OwogICAgICBf
TV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kpOwogICAgICBfTV9kZWFsbG9j
YXRlKCk7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX19XT1JEX0JJ
VCAtIDEpL19fV09SRF9CSVQ7CiAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAg
IH0KICB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9pbml0
aWFsaXplX3JhbmdlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgICBf
TV9zdGFydCA9IGl0ZXJhdG9yKCk7CiAgICBfTV9maW5pc2ggPSBpdGVyYXRvcigpOwogICAgX01f
ZW5kX29mX3N0b3JhZ2UgPSAwOwogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2Zp
cnN0KSAKICAgICAgcHVzaF9iYWNrKCpfX2ZpcnN0KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01faW5pdGlhbGl6ZV9yYW5nZShfRm9yd2FyZEl0ZXJh
dG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAg
ICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7CiAgICBfTV9pbml0aWFsaXplKF9fbik7
CiAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpOwogIH0KCiAgdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01faW5zZXJ0X3JhbmdlKGl0ZXJhdG9yIF9fcG9z
LAogICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0
ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcp
IHsKICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgewogICAgICBfX3Bv
cyA9IGluc2VydChfX3BvcywgKl9fZmlyc3QpOwogICAgICArK19fcG9zOwogICAgfQogIH0KCiAg
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9pbnNlcnRfcmFuZ2Uo
aXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJh
dG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsK
ICAgICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwg
X19uKTsKICAgICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19uKSB7CiAgICAgICAgY29w
eV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01fZmluaXNoICsgZGlmZmVyZW5jZV90eXBl
KF9fbikpOwogICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsKICAgICAg
ICBfTV9maW5pc2ggKz0gZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgIH0KICAgICAgZWxzZSB7
CiAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpICsgbWF4KHNpemUoKSwgX19uKTsKICAg
ICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7CiAgICAgICAgaXRl
cmF0b3IgX19pID0gY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsK
ICAgICAgICBfX2kgPSBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19pKTsKICAgICAgICBfTV9maW5p
c2ggPSBjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kpOwogICAgICAgIF9NX2RlYWxsb2NhdGUo
KTsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9fV09SRF9CSVQg
LSAxKS9fX1dPUkRfQklUOwogICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAg
ICAgfQogICAgfQogIH0gICAgICAKCgoKcHVibGljOgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1
cm4gX01fc3RhcnQ7IH0KICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9N
X3N0YXJ0OyB9CiAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gX01fZmluaXNoOyB9CiAgY29uc3Rf
aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fZmluaXNoOyB9CgogIHJldmVyc2VfaXRl
cmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KICBjb25z
dF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsgCiAgICByZXR1cm4gY29uc3RfcmV2
ZXJzZV9pdGVyYXRvcihlbmQoKSk7IAogIH0KICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJl
dHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRv
ciByZW5kKCkgY29uc3QgeyAKICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2lu
KCkpOyAKICB9CgogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKGVu
ZCgpIC0gYmVnaW4oKSk7IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBz
aXplX3R5cGUoLTEpOyB9CiAgc2l6ZV90eXBlIGNhcGFjaXR5KCkgY29uc3QgewogICAgcmV0dXJu
IHNpemVfdHlwZShjb25zdF9pdGVyYXRvcihfTV9lbmRfb2Zfc3RvcmFnZSwgMCkgLSBiZWdpbigp
KTsKICB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0K
ICByZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSB7CiAgICByZXR1cm4gKihiZWdp
bigpICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwogIH0KICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0
b3JbXShzaXplX3R5cGUgX19uKSBjb25zdCB7CiAgICByZXR1cm4gKihiZWdpbigpICsgZGlmZmVy
ZW5jZV90eXBlKF9fbikpOwogIH0KCiAgZXhwbGljaXQgdmVjdG9yIChjb25zdCBhbGxvY2F0b3Jf
dHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19hKSB7fQoKICB2ZWN0
b3IgKHNpemVfdHlwZSBfX24sIGJvb2wgX192YWx1ZSwKICAgICAgICAgICAgY29uc3QgYWxsb2Nh
dG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fYSkKICB7CiAg
ICBfTV9pbml0aWFsaXplKF9fbik7CiAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9z
dG9yYWdlLCBfX3ZhbHVlID8gfjAgOiAwKTsKICB9CgogIGV4cGxpY2l0IHZlY3RvciAoc2l6ZV90
eXBlIF9fbikKICAgIDogX0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSkKICB7CiAgICBfTV9pbml0aWFs
aXplKF9fbik7CiAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCAwKTsK
ICB9CgogIHZlY3RvciAoY29uc3QgdmVjdG9yICYgX194KSA6IF9CYXNlKF9feC5nZXRfYWxsb2Nh
dG9yKCkpIHsKICAgIF9NX2luaXRpYWxpemUoX194LnNpemUoKSk7CiAgICBjb3B5KF9feC5iZWdp
bigpLCBfX3guZW5kKCksIF9NX3N0YXJ0KTsKICB9CgoKICAgCiAgdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXJhdG9yPgogIHZlY3RvciAoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl
cmF0b3IgX19sYXN0LAogICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxs
b2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19hKQogIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUg
X0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01f
aW5pdGlhbGl6ZV9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CiAg
ICAKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9pbml0aWFsaXplX2Rpc3Bh
dGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX194LCBfX3RydWVfdHlwZSkgewogICAgX01faW5p
dGlhbGl6ZShfX24pOwogICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwg
X194ID8gfjAgOiAwKTsKICB9CiAgICAKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+
CiAgdm9pZCBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J
bnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxz
ZV90eXBlKSB7CiAgICBfTV9pbml0aWFsaXplX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVy
YXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7CiAgfQojIDU4NyAiL29wdC9tdnBsb2NhbC9saWIv
Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvc3RsX2J2ZWN0b3IuaCIgMwoKCiAgfnZlY3RvciAoKSB7IH0KCiAgdmVjdG9yICYgb3BlcmF0
b3I9KGNvbnN0IHZlY3RvciAmIF9feCkgewogICAgaWYgKCZfX3ggPT0gdGhpcykgcmV0dXJuICp0
aGlzOwogICAgaWYgKF9feC5zaXplKCkgPiBjYXBhY2l0eSgpKSB7CiAgICAgIF9NX2RlYWxsb2Nh
dGUoKTsKICAgICAgX01faW5pdGlhbGl6ZShfX3guc2l6ZSgpKTsKICAgIH0KICAgIGNvcHkoX194
LmJlZ2luKCksIF9feC5lbmQoKSwgYmVnaW4oKSk7CiAgICBfTV9maW5pc2ggPSBiZWdpbigpICsg
ZGlmZmVyZW5jZV90eXBlKF9feC5zaXplKCkpOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgIAog
ICAKICAgCiAgIAoKICB2b2lkIGFzc2lnbihzaXplX3QgX19uLCBib29sIF9feCkgewogICAgaWYg
KF9fbiA+IHNpemUoKSkgewogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9y
YWdlLCBfX3ggPyB+MCA6IDApOwogICAgICBpbnNlcnQoZW5kKCksIF9fbiAtIHNpemUoKSwgX194
KTsKICAgIH0KICAgIGVsc2UgewogICAgICBlcmFzZShiZWdpbigpICsgX19uLCBlbmQoKSk7CiAg
ICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7
CiAgICB9CiAgfQoKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGFz
c2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAg
IHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwg
X0ludGVncmFsOwogICAgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVn
cmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01fYXNzaWdu
X2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAg
eyBhc3NpZ24oKHNpemVfdCkgX19uLCAoYm9vbCkgX192YWwpOyB9CgogIHRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyPgogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJz
dCwgX0lucHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgIHsgX01fYXNzaWduX2F1eChf
X2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOyB9CgogIHRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lucHV0
SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICAgIGl0ZXJhdG9yIF9fY3VyID0gYmVnaW4oKTsK
ICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIs
ICsrX19maXJzdCkKICAgICAgKl9fY3VyID0gKl9fZmlyc3Q7CiAgICBpZiAoX19maXJzdCA9PSBf
X2xhc3QpCiAgICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgICBlbHNlCiAgICAgIGluc2VydChl
bmQoKSwgX19maXJzdCwgX19sYXN0KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9G
b3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJh
dG9yX3RhZykgewogICAgc2l6ZV90eXBlIF9fbGVuID0gMDsKICAgIGRpc3RhbmNlKF9fZmlyc3Qs
IF9fbGFzdCwgX19sZW4pOwogICAgaWYgKF9fbGVuIDwgc2l6ZSgpKQogICAgICBlcmFzZShjb3B5
KF9fZmlyc3QsIF9fbGFzdCwgYmVnaW4oKSksIGVuZCgpKTsKICAgIGVsc2UgewogICAgICBfRm9y
d2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKICAgICAgYWR2YW5jZShfX21pZCwgc2l6ZSgp
KTsKICAgICAgY29weShfX2ZpcnN0LCBfX21pZCwgYmVnaW4oKSk7CiAgICAgIGluc2VydChlbmQo
KSwgX19taWQsIF9fbGFzdCk7CiAgICB9CiAgfSAgICAKCgoKICB2b2lkIHJlc2VydmUoc2l6ZV90
eXBlIF9fbikgewogICAgaWYgKGNhcGFjaXR5KCkgPCBfX24pIHsKICAgICAgdW5zaWduZWQgaW50
KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19uKTsKICAgICAgX01fZmluaXNoID0gY29weShiZWdpbigp
LCBlbmQoKSwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAg
X01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9f
cSArIChfX24gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgIH0KICB9CgogIHJlZmVy
ZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9CiAgY29uc3RfcmVmZXJlbmNlIGZyb250
KCkgY29uc3QgeyByZXR1cm4gKmJlZ2luKCk7IH0KICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJu
ICooZW5kKCkgLSAxKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4g
KihlbmQoKSAtIDEpOyB9CiAgdm9pZCBwdXNoX2JhY2soYm9vbCBfX3gpIHsKICAgIGlmIChfTV9m
aW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkKICAgICAgKl9NX2ZpbmlzaCsrID0gX194
OwogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gpOwogIH0KICB2b2lkIHN3
YXAodmVjdG9yICYgX194KSB7CiAgICAgOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOwog
ICAgIDo6c3dhcChfTV9maW5pc2gsIF9feC5fTV9maW5pc2gpOwogICAgIDo6c3dhcChfTV9lbmRf
b2Zfc3RvcmFnZSwgX194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICB9CiAgaXRlcmF0b3IgaW5zZXJ0
KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGJvb2wgX194ID0gYm9vbCgpKSB7CiAgICBkaWZmZXJlbmNl
X3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICBpZiAoX01fZmluaXNoLl9NX3Ag
IT0gX01fZW5kX29mX3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkKICAgICAgKl9NX2Zp
bmlzaCsrID0gX194OwogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KF9fcG9zaXRpb24sIF9f
eCk7CiAgICByZXR1cm4gYmVnaW4oKSArIF9fbjsKICB9CgoKICAgCiAgdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAg
ICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7
CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVn
cmFsIF9JbnRlZ3JhbDsKICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3Bvc2l0aW9uLCBfX2ZpcnN0
LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4K
ICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBf
SW50ZWdlciBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpIHsKICAg
IGluc2VydChfX3BvcywgKHNpemVfdHlwZSkgX19uLCAoYm9vbCkgX194KTsKICB9CgogIHRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVy
YXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2Zp
cnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19m
YWxzZV90eXBlKSB7CiAgICBfTV9pbnNlcnRfcmFuZ2UoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwg
X19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7CiAgfQojIDc2MSAiL29wdC9tdnBsb2Nh
bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvc3RsX2J2ZWN0b3IuaCIgMwoKICAKICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bv
c2l0aW9uLCBzaXplX3R5cGUgX19uLCBib29sIF9feCkgewogICAgaWYgKF9fbiA9PSAwKSByZXR1
cm47CiAgICBpZiAoY2FwYWNpdHkoKSAtIHNpemUoKSA+PSBfX24pIHsKICAgICAgY29weV9iYWNr
d2FyZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01fZmluaXNoICsgZGlmZmVyZW5jZV90eXBlKF9fbikp
OwogICAgICBmaWxsKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyBkaWZmZXJlbmNlX3R5cGUoX19u
KSwgX194KTsKICAgICAgX01fZmluaXNoICs9IGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgfQog
ICAgZWxzZSB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKSArIG1heChzaXplKCksIF9f
bik7CiAgICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAg
aXRlcmF0b3IgX19pID0gY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDAp
KTsKICAgICAgZmlsbF9uKF9faSwgX19uLCBfX3gpOwogICAgICBfTV9maW5pc2ggPSBjb3B5KF9f
cG9zaXRpb24sIGVuZCgpLCBfX2kgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgIF9NX2Rl
YWxsb2NhdGUoKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19sZW4gKyBfX1dP
UkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDAp
OwogICAgfQogIH0KCiAgdm9pZCBwb3BfYmFjaygpIHsgLS1fTV9maW5pc2g7IH0KICBpdGVyYXRv
ciBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7CiAgICBpZiAoX19wb3NpdGlvbiArIDEgIT0g
ZW5kKCkpCiAgICAgIGNvcHkoX19wb3NpdGlvbiArIDEsIGVuZCgpLCBfX3Bvc2l0aW9uKTsKICAg
ICAgLS1fTV9maW5pc2g7CiAgICByZXR1cm4gX19wb3NpdGlvbjsKICB9CiAgaXRlcmF0b3IgZXJh
c2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICBfTV9maW5pc2ggPSBj
b3B5KF9fbGFzdCwgZW5kKCksIF9fZmlyc3QpOwogICAgcmV0dXJuIF9fZmlyc3Q7CiAgfQogIHZv
aWQgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplLCBib29sIF9feCA9IGJvb2woKSkgewogICAg
aWYgKF9fbmV3X3NpemUgPCBzaXplKCkpIAogICAgICBlcmFzZShiZWdpbigpICsgZGlmZmVyZW5j
ZV90eXBlKF9fbmV3X3NpemUpLCBlbmQoKSk7CiAgICBlbHNlCiAgICAgIGluc2VydChlbmQoKSwg
X19uZXdfc2l6ZSAtIHNpemUoKSwgX194KTsKICB9CiAgdm9pZCBjbGVhcigpIHsgZXJhc2UoYmVn
aW4oKSwgZW5kKCkpOyB9Cn07CgoKCnR5cGVkZWYgdmVjdG9yPGJvb2wsIGFsbG9jPiBiaXRfdmVj
dG9yOwoKIyA4MjIgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy
LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9idmVjdG9yLmgiIDMKCgoKCgoK
CgoKCiAgCgoKCiAKIAogCiMgMzUgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3Vu
LXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3ZlY3RvciIgMiAzCgoK
CgogCiAKIAojIDEyICIuLi8uLi9pbmNsdWRlL2xpYmluYy9saWJkcmF3aW5nLmgiIDIKCgp1c2lu
ZyBzdGQ6OnZlY3RvcjsKdXNpbmcgc3RkOjpzdHJpbmc7CgogCiAKIyAxICIvdXNyL2R0L2luY2x1
ZGUvWG0vWG0uaCIgMQogCgoKCgoKIAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3Iv
b3Blbndpbi9pbmNsdWRlL1gxMS9TaGVsbC5oIiAxCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3Ivb3Blbndpbi9pbmNsdWRlL1gx
MS9TTS9TTWxpYi5oIiAxCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiMg
MSAiL3Vzci9vcGVud2luL2luY2x1ZGUvWDExL1NNL1NNLmgiIDEKIAoKIAoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgoKCgoKIAoKCgoKCgoKCiAKCgoKCgoKCiAKCgoKCgoK
CgogCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCiMgMzcgIi91c3Ivb3Blbndpbi9pbmNsdWRlL1gxMS9TTS9TTWxpYi5oIiAyCgoj
IDEgIi91c3Ivb3Blbndpbi9pbmNsdWRlL1gxMS9JQ0UvSUNFbGliLmgiIDEKIAogCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL29wZW53aW4vaW5jbHVkZS9YMTEvSUNFL0lDRS5o
IiAxCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiAKCgoKCgoK
CiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiAKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoK
CiMgMjkgIi91c3Ivb3Blbndpbi9pbmNsdWRlL1gxMS9JQ0UvSUNFbGliLmgiIDIKCgoKCgoKCgoK
dHlwZWRlZiB2b2lkICpJY2VQb2ludGVyOwoKCgoKdHlwZWRlZiBlbnVtIHsKICAgIEljZVBvQXV0
aEhhdmVSZXBseSwKICAgIEljZVBvQXV0aFJlamVjdGVkLAogICAgSWNlUG9BdXRoRmFpbGVkLAog
ICAgSWNlUG9BdXRoRG9uZUNsZWFudXAKfSBJY2VQb0F1dGhTdGF0dXM7Cgp0eXBlZGVmIGVudW0g
ewogICAgSWNlUGFBdXRoQ29udGludWUsCiAgICBJY2VQYUF1dGhBY2NlcHRlZCwKICAgIEljZVBh
QXV0aFJlamVjdGVkLAogICAgSWNlUGFBdXRoRmFpbGVkCn0gSWNlUGFBdXRoU3RhdHVzOwoKdHlw
ZWRlZiBlbnVtIHsKICAgIEljZUNvbm5lY3RQZW5kaW5nLAogICAgSWNlQ29ubmVjdEFjY2VwdGVk
LAogICAgSWNlQ29ubmVjdFJlamVjdGVkLAogICAgSWNlQ29ubmVjdElPRXJyb3IKfSBJY2VDb25u
ZWN0U3RhdHVzOwoKdHlwZWRlZiBlbnVtIHsKICAgIEljZVByb3RvY29sU2V0dXBTdWNjZXNzLAog
ICAgSWNlUHJvdG9jb2xTZXR1cEZhaWx1cmUsCiAgICBJY2VQcm90b2NvbFNldHVwSU9FcnJvciwK
ICAgIEljZVByb3RvY29sQWxyZWFkeUFjdGl2ZQp9IEljZVByb3RvY29sU2V0dXBTdGF0dXM7Cgp0
eXBlZGVmIGVudW0gewogICAgSWNlQWNjZXB0U3VjY2VzcywKICAgIEljZUFjY2VwdEZhaWx1cmUs
CiAgICBJY2VBY2NlcHRCYWRNYWxsb2MKfSBJY2VBY2NlcHRTdGF0dXM7Cgp0eXBlZGVmIGVudW0g
ewogICAgSWNlQ2xvc2VkTm93LAogICAgSWNlQ2xvc2VkQVNBUCwKICAgIEljZUNvbm5lY3Rpb25J
blVzZSwKICAgIEljZVN0YXJ0ZWRTaHV0ZG93bk5lZ290aWF0aW9uCn0gSWNlQ2xvc2VTdGF0dXM7
Cgp0eXBlZGVmIGVudW0gewogICAgSWNlUHJvY2Vzc01lc3NhZ2VzU3VjY2VzcywKICAgIEljZVBy
b2Nlc3NNZXNzYWdlc0lPRXJyb3IsCiAgICBJY2VQcm9jZXNzTWVzc2FnZXNDb25uZWN0aW9uQ2xv
c2VkCn0gSWNlUHJvY2Vzc01lc3NhZ2VzU3RhdHVzOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgdW5z
aWduZWQgbG9uZwlzZXF1ZW5jZV9vZl9yZXF1ZXN0OwogICAgaW50CQkJbWFqb3Jfb3Bjb2RlX29m
X3JlcXVlc3Q7CiAgICBpbnQJCQltaW5vcl9vcGNvZGVfb2ZfcmVxdWVzdDsKICAgIEljZVBvaW50
ZXIJCXJlcGx5Owp9IEljZVJlcGx5V2FpdEluZm87Cgp0eXBlZGVmIHN0cnVjdCBfSWNlQ29ubiAq
SWNlQ29ubjsKdHlwZWRlZiBzdHJ1Y3QgX0ljZUxpc3Rlbk9iaiAqSWNlTGlzdGVuT2JqOwoKdHlw
ZWRlZiB2b2lkICgqSWNlV2F0Y2hQcm9jKSAoCgogICAgSWNlQ29ubgkJICwKICAgIEljZVBvaW50
ZXIJCSAsCiAgICBpbnQgCQkgLAogICAgSWNlUG9pbnRlciAqCSAKCik7Cgp0eXBlZGVmIHZvaWQg
KCpJY2VQb1Byb2Nlc3NNc2dQcm9jKSAoCgogICAgSWNlQ29ubiAJCSAsCiAgICBJY2VQb2ludGVy
CQkgLAogICAgaW50CQkJICwKICAgIHVuc2lnbmVkIGxvbmcJICwKICAgIGludCAJCSAsCiAgICBJ
Y2VSZXBseVdhaXRJbmZvICogICAsCiAgICBpbnQgICoJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpJ
Y2VQYVByb2Nlc3NNc2dQcm9jKSAoCgogICAgSWNlQ29ubiAJCSAsCiAgICBJY2VQb2ludGVyCQkg
LAogICAgaW50CQkJICwKICAgIHVuc2lnbmVkIGxvbmcJICwKICAgIGludCAJCSAKCik7Cgp0eXBl
ZGVmIHN0cnVjdCB7CiAgICBpbnQJCQkgbWFqb3JfdmVyc2lvbjsKICAgIGludAkJCSBtaW5vcl92
ZXJzaW9uOwogICAgSWNlUG9Qcm9jZXNzTXNnUHJvYyAgcHJvY2Vzc19tc2dfcHJvYzsKfSBJY2VQ
b1ZlcnNpb25SZWM7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQJCQkgbWFqb3JfdmVyc2lvbjsK
ICAgIGludAkJCSBtaW5vcl92ZXJzaW9uOwogICAgSWNlUGFQcm9jZXNzTXNnUHJvYyAgcHJvY2Vz
c19tc2dfcHJvYzsKfSBJY2VQYVZlcnNpb25SZWM7Cgp0eXBlZGVmIEljZVBvQXV0aFN0YXR1cyAo
KkljZVBvQXV0aFByb2MpICgKCiAgICBJY2VDb25uCQkgLAogICAgSWNlUG9pbnRlciAqCSAsCiAg
ICBpbnQgCQkgLAogICAgaW50IAkJICwKICAgIGludAkJCSAsCiAgICBJY2VQb2ludGVyCQkgLAog
ICAgaW50ICoJCSAsCiAgICBJY2VQb2ludGVyICoJICwKICAgIGNoYXIgKioJCSAKCik7Cgp0eXBl
ZGVmIEljZVBhQXV0aFN0YXR1cyAoKkljZVBhQXV0aFByb2MpICgKCiAgICBJY2VDb25uCQkgLAog
ICAgSWNlUG9pbnRlciAqCSAsCiAgICBpbnQgCQkgLAogICAgaW50CQkJICwKICAgIEljZVBvaW50
ZXIJCSAsCiAgICBpbnQgKgkJICwKICAgIEljZVBvaW50ZXIgKgkgLAogICAgY2hhciAqKgkJIAoK
KTsKCnR5cGVkZWYgaW50ICAoKkljZUhvc3RCYXNlZEF1dGhQcm9jKSAoCgogICAgY2hhciAqCQkg
CgopOwoKdHlwZWRlZiBpbnQgICgqSWNlUHJvdG9jb2xTZXR1cFByb2MpICgKCiAgICBJY2VDb25u
IAkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgY2hhciAqCQkgLAogICAgY2hhciAq
CQkgLAogICAgSWNlUG9pbnRlciAqCSAsCiAgICBjaGFyICoqCQkgCgopOwoKdHlwZWRlZiB2b2lk
ICgqSWNlUHJvdG9jb2xBY3RpdmF0ZVByb2MpICgKCiAgICBJY2VDb25uIAkJICwKICAgIEljZVBv
aW50ZXIJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpJY2VJT0Vycm9yUHJvYykgKAoKICAgIEljZUNv
bm4gCQkgCgopOwoKdHlwZWRlZiB2b2lkICgqSWNlUGluZ1JlcGx5UHJvYykgKAoKICAgIEljZUNv
bm4gCQkgLAogICAgSWNlUG9pbnRlcgkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKkljZUVycm9ySGFu
ZGxlcikgKAoKICAgIEljZUNvbm4gCQkgLAogICAgaW50IAkJICwKICAgIGludAkJCSAsCiAgICB1
bnNpZ25lZCBsb25nIAkgLAogICAgaW50IAkJICwKICAgIGludAkJCSAsCiAgICBJY2VQb2ludGVy
CQkgCgopOwoKdHlwZWRlZiB2b2lkICgqSWNlSU9FcnJvckhhbmRsZXIpICgKCiAgICBJY2VDb25u
IAkJIAoKKTsKCgogCgoKCmV4dGVybiAiQyIgeyAKCmV4dGVybiBpbnQgSWNlUmVnaXN0ZXJGb3JQ
cm90b2NvbFNldHVwICgKCiAgICBjaGFyICoJCQkgLAogICAgY2hhciAqCQkJICwKICAgIGNoYXIg
KgkJCSAsCiAgICBpbnQJCQkJICwKICAgIEljZVBvVmVyc2lvblJlYyAqCQkgLAogICAgaW50CQkJ
CSAsCiAgICBjaGFyICoqCQkJICwKICAgIEljZVBvQXV0aFByb2MgKgkJICwKICAgIEljZUlPRXJy
b3JQcm9jCQkgCgopOwoKZXh0ZXJuIGludCBJY2VSZWdpc3RlckZvclByb3RvY29sUmVwbHkgKAoK
ICAgIGNoYXIgKgkJCSAsCiAgICBjaGFyICoJCQkgLAogICAgY2hhciAqCQkJICwKICAgIGludAkJ
CQkgLAogICAgSWNlUGFWZXJzaW9uUmVjICoJCSAsCiAgICBpbnQJCQkJICwKICAgIGNoYXIgKioJ
CQkgLAogICAgSWNlUGFBdXRoUHJvYyAqCQkgLAogICAgSWNlSG9zdEJhc2VkQXV0aFByb2MJICwK
ICAgIEljZVByb3RvY29sU2V0dXBQcm9jCSAsCiAgICBJY2VQcm90b2NvbEFjdGl2YXRlUHJvYwkg
LAogICAgSWNlSU9FcnJvclByb2MJCSAKCik7CgpleHRlcm4gSWNlQ29ubiBJY2VPcGVuQ29ubmVj
dGlvbiAoCgogICAgY2hhciAqCQkgLAogICAgSWNlUG9pbnRlcgkJICwKICAgIGludCAJCSAsCiAg
ICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIGNoYXIgKgkJIAoKKTsKCmV4dGVybiBJY2VQb2lu
dGVyIEljZUdldENvbm5lY3Rpb25Db250ZXh0ICgKCiAgICBJY2VDb25uCQkgCgopOwoKZXh0ZXJu
IGludCAgSWNlTGlzdGVuRm9yQ29ubmVjdGlvbnMgKAoKICAgIGludCAqCQkgLAogICAgSWNlTGlz
dGVuT2JqICoqCSAsCiAgICBpbnQJCQkgLAogICAgY2hhciAqCQkgCgopOwoKZXh0ZXJuIGludCAg
SWNlTGlzdGVuRm9yV2VsbEtub3duQ29ubmVjdGlvbnMgKAoKICAgIGNoYXIgKgkJICwKICAgIGlu
dCAqCQkgLAogICAgSWNlTGlzdGVuT2JqICoqCSAsCiAgICBpbnQJCQkgLAogICAgY2hhciAqCQkg
CgopOwoKZXh0ZXJuIGludCBJY2VHZXRMaXN0ZW5Db25uZWN0aW9uTnVtYmVyICgKCiAgICBJY2VM
aXN0ZW5PYmoJIAoKKTsKCmV4dGVybiBjaGFyICpJY2VHZXRMaXN0ZW5Db25uZWN0aW9uU3RyaW5n
ICgKCiAgICBJY2VMaXN0ZW5PYmoJIAoKKTsKCmV4dGVybiBjaGFyICpJY2VDb21wb3NlTmV0d29y
a0lkTGlzdCAoCgogICAgaW50CQkJICwKICAgIEljZUxpc3Rlbk9iaiAqCSAKCik7CgpleHRlcm4g
dm9pZCBJY2VGcmVlTGlzdGVuT2JqcyAoCgogICAgaW50CQkJICwKICAgIEljZUxpc3Rlbk9iaiAq
CSAKCik7CgpleHRlcm4gdm9pZCBJY2VTZXRIb3N0QmFzZWRBdXRoUHJvYyAoCgogICAgSWNlTGlz
dGVuT2JqCQkgLAogICAgSWNlSG9zdEJhc2VkQXV0aFByb2MgICAJIAoKKTsKCmV4dGVybiBJY2VD
b25uIEljZUFjY2VwdENvbm5lY3Rpb24gKAoKICAgIEljZUxpc3Rlbk9iagkgLAogICAgSWNlQWNj
ZXB0U3RhdHVzICoJIAoKKTsKCmV4dGVybiB2b2lkIEljZVNldFNodXRkb3duTmVnb3RpYXRpb24g
KAoKICAgIEljZUNvbm4JCSAsCiAgICBpbnQgCQkgCgopOwoKZXh0ZXJuIGludCAgSWNlQ2hlY2tT
aHV0ZG93bk5lZ290aWF0aW9uICgKCiAgICBJY2VDb25uCQkgCgopOwoKZXh0ZXJuIEljZUNsb3Nl
U3RhdHVzIEljZUNsb3NlQ29ubmVjdGlvbiAoCgogICAgSWNlQ29ubgkJIAoKKTsKCmV4dGVybiBp
bnQgIEljZUFkZENvbm5lY3Rpb25XYXRjaCAoCgogICAgSWNlV2F0Y2hQcm9jCQkgLAogICAgSWNl
UG9pbnRlcgkJCSAKCik7CgpleHRlcm4gdm9pZCBJY2VSZW1vdmVDb25uZWN0aW9uV2F0Y2ggKAoK
ICAgIEljZVdhdGNoUHJvYwkJICwKICAgIEljZVBvaW50ZXIJCQkgCgopOwoKZXh0ZXJuIEljZVBy
b3RvY29sU2V0dXBTdGF0dXMgSWNlUHJvdG9jb2xTZXR1cCAoCgogICAgSWNlQ29ubgkJICwKICAg
IGludCAJCSAsCiAgICBJY2VQb2ludGVyCQkgLAogICAgaW50IAkJICwKICAgIGludAkqCQkgLAog
ICAgaW50CSoJCSAsCiAgICBjaGFyICoqCQkgLAogICAgY2hhciAqKgkJICwKICAgIGludAkJCSAs
CiAgICBjaGFyICoJCSAKCik7CgpleHRlcm4gaW50ICBJY2VQcm90b2NvbFNodXRkb3duICgKCiAg
ICBJY2VDb25uCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBJY2VQcm9jZXNzTWVzc2FnZXNT
dGF0dXMgSWNlUHJvY2Vzc01lc3NhZ2VzICgKCiAgICBJY2VDb25uCQkgLAogICAgSWNlUmVwbHlX
YWl0SW5mbyAqCSAsCiAgICBpbnQgICoJCSAKCik7CgpleHRlcm4gaW50ICBJY2VQaW5nICgKCiAg
IEljZUNvbm4JCSAsCiAgIEljZVBpbmdSZXBseVByb2MJICwKICAgSWNlUG9pbnRlcgkJIAoKKTsK
CmV4dGVybiBjaGFyICpJY2VBbGxvY1NjcmF0Y2ggKAoKICAgSWNlQ29ubgkJICwKICAgdW5zaWdu
ZWQgbG9uZwkgCgopOwoKZXh0ZXJuIGludCBJY2VGbHVzaCAoCgogICBJY2VDb25uCQkgCgopOwoK
ZXh0ZXJuIGludCBJY2VHZXRPdXRCdWZTaXplICgKCiAgIEljZUNvbm4JCSAKCik7CgpleHRlcm4g
aW50IEljZUdldEluQnVmU2l6ZSAoCgogICBJY2VDb25uCQkgCgopOwoKZXh0ZXJuIEljZUNvbm5l
Y3RTdGF0dXMgSWNlQ29ubmVjdGlvblN0YXR1cyAoCgogICAgSWNlQ29ubgkJIAoKKTsKCmV4dGVy
biBjaGFyICpJY2VWZW5kb3IgKAoKICAgIEljZUNvbm4JCSAKCik7CgpleHRlcm4gY2hhciAqSWNl
UmVsZWFzZSAoCgogICAgSWNlQ29ubgkJIAoKKTsKCmV4dGVybiBpbnQgSWNlUHJvdG9jb2xWZXJz
aW9uICgKCiAgICBJY2VDb25uCQkgCgopOwoKZXh0ZXJuIGludCBJY2VQcm90b2NvbFJldmlzaW9u
ICgKCiAgICBJY2VDb25uCQkgCgopOwoKZXh0ZXJuIGludCBJY2VDb25uZWN0aW9uTnVtYmVyICgK
CiAgICBJY2VDb25uCQkgCgopOwoKZXh0ZXJuIGNoYXIgKkljZUNvbm5lY3Rpb25TdHJpbmcgKAoK
ICAgIEljZUNvbm4JCSAKCik7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBJY2VMYXN0U2VudFNlcXVl
bmNlTnVtYmVyICgKCiAgICBJY2VDb25uCQkgCgopOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgSWNl
TGFzdFJlY2VpdmVkU2VxdWVuY2VOdW1iZXIgKAoKICAgIEljZUNvbm4JCSAKCik7CgpleHRlcm4g
aW50ICBJY2VTd2FwcGluZyAoCgogICAgSWNlQ29ubgkJIAoKKTsKCmV4dGVybiBJY2VFcnJvckhh
bmRsZXIgSWNlU2V0RXJyb3JIYW5kbGVyICgKCiAgICBJY2VFcnJvckhhbmRsZXIgCSAKCik7Cgpl
eHRlcm4gSWNlSU9FcnJvckhhbmRsZXIgSWNlU2V0SU9FcnJvckhhbmRsZXIgKAoKICAgIEljZUlP
RXJyb3JIYW5kbGVyIAkgCgopOwoKCiAKCgoKZXh0ZXJuIGludCAgSWNlSW5pdFRocmVhZHMgKAoK
ICAgIHZvaWQKCik7CgpleHRlcm4gdm9pZCBJY2VBcHBMb2NrQ29ubiAoCgogICAgSWNlQ29ubgkJ
IAoKKTsKCmV4dGVybiB2b2lkIEljZUFwcFVubG9ja0Nvbm4gKAoKICAgIEljZUNvbm4JCSAKCik7
Cgp9IAoKCiMgMzggIi91c3Ivb3Blbndpbi9pbmNsdWRlL1gxMS9TTS9TTWxpYi5oIiAyCgoKCiAK
CgoKdHlwZWRlZiBJY2VQb2ludGVyIFNtUG9pbnRlcjsKCgogCgoKCnR5cGVkZWYgc3RydWN0IF9T
bWNDb25uICpTbWNDb25uOwp0eXBlZGVmIHN0cnVjdCBfU21zQ29ubiAqU21zQ29ubjsKCgogCgoK
CnR5cGVkZWYgc3RydWN0IHsKICAgIGludAkJbGVuZ3RoOwkJIAogICAgU21Qb2ludGVyICAgdmFs
dWU7CQkgCn0gU21Qcm9wVmFsdWU7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBjaGFyCSpuYW1lOwkJ
IAogICAgY2hhcgkqdHlwZTsJCSAKICAgIGludAkJbnVtX3ZhbHM7CSAKICAgIFNtUHJvcFZhbHVl
ICp2YWxzOwkJIAp9IFNtUHJvcDsKCgoMCiAKCgoKdHlwZWRlZiBlbnVtIHsKICAgIFNtY0Nsb3Nl
ZE5vdywKICAgIFNtY0Nsb3NlZEFTQVAsCiAgICBTbWNDb25uZWN0aW9uSW5Vc2UKfSBTbWNDbG9z
ZVN0YXR1czsKCgoMCiAKCgoKdHlwZWRlZiB2b2lkICgqU21jU2F2ZVlvdXJzZWxmUHJvYykgKAoK
ICAgIFNtY0Nvbm4JCSAsCiAgICBTbVBvaW50ZXIJCSAsCiAgICBpbnQgIAkJICwKICAgIGludCAJ
CSAsCiAgICBpbnQJCQkgLAogICAgaW50IAkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlNtY1NhdmVZ
b3Vyc2VsZlBoYXNlMlByb2MpICgKCiAgICBTbWNDb25uCQkgLAogICAgU21Qb2ludGVyCQkgCgop
OwoKdHlwZWRlZiB2b2lkICgqU21jSW50ZXJhY3RQcm9jKSAoCgogICAgU21jQ29ubgkJICwKICAg
IFNtUG9pbnRlcgkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlNtY0RpZVByb2MpICgKCiAgICBTbWND
b25uCQkgLAogICAgU21Qb2ludGVyCQkgCgopOwoKdHlwZWRlZiB2b2lkICgqU21jU2h1dGRvd25D
YW5jZWxsZWRQcm9jKSAoCgogICAgU21jQ29ubgkJICwKICAgIFNtUG9pbnRlcgkJIAoKKTsKCnR5
cGVkZWYgdm9pZCAoKlNtY1NhdmVDb21wbGV0ZVByb2MpICgKCiAgICBTbWNDb25uCQkgLAogICAg
U21Qb2ludGVyCQkgCgopOwoKdHlwZWRlZiB2b2lkICgqU21jUHJvcFJlcGx5UHJvYykgKAoKICAg
IFNtY0Nvbm4JCSAsCiAgICBTbVBvaW50ZXIJCSAsCiAgICBpbnQJCQkgLAogICAgU21Qcm9wICoq
CQkgCgopOwoKCiAKCgoKdHlwZWRlZiBzdHJ1Y3QgewoKICAgIHN0cnVjdCB7CglTbWNTYXZlWW91
cnNlbGZQcm9jCSBjYWxsYmFjazsKCVNtUG9pbnRlcgkJIGNsaWVudF9kYXRhOwogICAgfSBzYXZl
X3lvdXJzZWxmOwoKICAgIHN0cnVjdCB7CglTbWNEaWVQcm9jCQkgY2FsbGJhY2s7CglTbVBvaW50
ZXIJCSBjbGllbnRfZGF0YTsKICAgIH0gZGllOwoKICAgIHN0cnVjdCB7CglTbWNTYXZlQ29tcGxl
dGVQcm9jCSBjYWxsYmFjazsKCVNtUG9pbnRlcgkJIGNsaWVudF9kYXRhOwogICAgfSBzYXZlX2Nv
bXBsZXRlOwoKICAgIHN0cnVjdCB7CglTbWNTaHV0ZG93bkNhbmNlbGxlZFByb2MgY2FsbGJhY2s7
CglTbVBvaW50ZXIJCSBjbGllbnRfZGF0YTsKICAgIH0gc2h1dGRvd25fY2FuY2VsbGVkOwoKfSBT
bWNDYWxsYmFja3M7CgoKCgoKCgoMCiAKCgoKdHlwZWRlZiBpbnQgICgqU21zUmVnaXN0ZXJDbGll
bnRQcm9jKSAoCgogICAgU21zQ29ubiAJCSAsCiAgICBTbVBvaW50ZXIJCSAsCiAgICBjaGFyICoJ
CSAJCQkJICAgICAKCik7Cgp0eXBlZGVmIHZvaWQgKCpTbXNJbnRlcmFjdFJlcXVlc3RQcm9jKSAo
CgogICAgU21zQ29ubgkJICwKICAgIFNtUG9pbnRlcgkJICwKICAgIGludAkJCSAKCik7Cgp0eXBl
ZGVmIHZvaWQgKCpTbXNJbnRlcmFjdERvbmVQcm9jKSAoCgogICAgU21zQ29ubgkJICwKICAgIFNt
UG9pbnRlcgkJICwKICAgIGludCAJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpTbXNTYXZlWW91cnNl
bGZSZXF1ZXN0UHJvYykgKAoKICAgIFNtc0Nvbm4JCSAsCiAgICBTbVBvaW50ZXIJCSAsCiAgICBp
bnQgIAkJICwKICAgIGludCAJCSAsCiAgICBpbnQJCQkgLAogICAgaW50IAkJICwKICAgIGludCAJ
CSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpTbXNTYXZlWW91cnNlbGZQaGFzZTJSZXF1ZXN0UHJvYykg
KAoKICAgIFNtc0Nvbm4JCSAsCiAgICBTbVBvaW50ZXIJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpT
bXNTYXZlWW91cnNlbGZEb25lUHJvYykgKAoKICAgIFNtc0Nvbm4JCSAsCiAgICBTbVBvaW50ZXIJ
CSAsCiAgICBpbnQgCQkgCgopOwoKdHlwZWRlZiB2b2lkICgqU21zQ2xvc2VDb25uZWN0aW9uUHJv
YykgKAoKICAgIFNtc0Nvbm4JCSAsCiAgICBTbVBvaW50ZXIJCSAsCiAgICBpbnQJCQkgLAogICAg
Y2hhciAqKgkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlNtc1NldFByb3BlcnRpZXNQcm9jKSAoCgog
ICAgU21zQ29ubgkJICwKICAgIFNtUG9pbnRlcgkJICwKICAgIGludAkJCSAsCiAgICBTbVByb3Ag
KioJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpTbXNEZWxldGVQcm9wZXJ0aWVzUHJvYykgKAoKICAg
IFNtc0Nvbm4JCSAsCiAgICBTbVBvaW50ZXIJCSAsCiAgICBpbnQJCQkgLAogICAgY2hhciAqKgkJ
IAoKKTsKCnR5cGVkZWYgdm9pZCAoKlNtc0dldFByb3BlcnRpZXNQcm9jKSAoCgogICAgU21zQ29u
bgkJICwKICAgIFNtUG9pbnRlcgkJIAoKKTsKCgogCgoKCnR5cGVkZWYgc3RydWN0IHsKCiAgICBz
dHJ1Y3QgewoJU21zUmVnaXN0ZXJDbGllbnRQcm9jCWNhbGxiYWNrOwoJU21Qb2ludGVyCQltYW5h
Z2VyX2RhdGE7CiAgICB9IHJlZ2lzdGVyX2NsaWVudDsKCiAgICBzdHJ1Y3QgewoJU21zSW50ZXJh
Y3RSZXF1ZXN0UHJvYwljYWxsYmFjazsKCVNtUG9pbnRlcgkJbWFuYWdlcl9kYXRhOwogICAgfSBp
bnRlcmFjdF9yZXF1ZXN0OwoKICAgIHN0cnVjdCB7CglTbXNJbnRlcmFjdERvbmVQcm9jCWNhbGxi
YWNrOwoJU21Qb2ludGVyCQltYW5hZ2VyX2RhdGE7CiAgICB9IGludGVyYWN0X2RvbmU7CgogICAg
c3RydWN0IHsKCVNtc1NhdmVZb3Vyc2VsZlJlcXVlc3RQcm9jCWNhbGxiYWNrOwoJU21Qb2ludGVy
CQkJbWFuYWdlcl9kYXRhOwogICAgfSBzYXZlX3lvdXJzZWxmX3JlcXVlc3Q7CgogICAgc3RydWN0
IHsKCVNtc1NhdmVZb3Vyc2VsZlBoYXNlMlJlcXVlc3RQcm9jCWNhbGxiYWNrOwoJU21Qb2ludGVy
CQkJCW1hbmFnZXJfZGF0YTsKICAgIH0gc2F2ZV95b3Vyc2VsZl9waGFzZTJfcmVxdWVzdDsKCiAg
ICBzdHJ1Y3QgewoJU21zU2F2ZVlvdXJzZWxmRG9uZVByb2MJY2FsbGJhY2s7CglTbVBvaW50ZXIJ
CW1hbmFnZXJfZGF0YTsKICAgIH0gc2F2ZV95b3Vyc2VsZl9kb25lOwoKICAgIHN0cnVjdCB7CglT
bXNDbG9zZUNvbm5lY3Rpb25Qcm9jCWNhbGxiYWNrOwoJU21Qb2ludGVyCQltYW5hZ2VyX2RhdGE7
CiAgICB9IGNsb3NlX2Nvbm5lY3Rpb247CgogICAgc3RydWN0IHsKCVNtc1NldFByb3BlcnRpZXNQ
cm9jCWNhbGxiYWNrOwoJU21Qb2ludGVyCQltYW5hZ2VyX2RhdGE7CiAgICB9IHNldF9wcm9wZXJ0
aWVzOwoKICAgIHN0cnVjdCB7CglTbXNEZWxldGVQcm9wZXJ0aWVzUHJvYwljYWxsYmFjazsKCVNt
UG9pbnRlcgkJbWFuYWdlcl9kYXRhOwogICAgfSBkZWxldGVfcHJvcGVydGllczsKCiAgICBzdHJ1
Y3QgewoJU21zR2V0UHJvcGVydGllc1Byb2MJY2FsbGJhY2s7CglTbVBvaW50ZXIJCW1hbmFnZXJf
ZGF0YTsKICAgIH0gZ2V0X3Byb3BlcnRpZXM7Cgp9IFNtc0NhbGxiYWNrczsKCgoKCgoKCgoKCgoK
CgoKdHlwZWRlZiBpbnQgICgqU21zTmV3Q2xpZW50UHJvYykgKAoKICAgIFNtc0Nvbm4gCQkgLAog
ICAgU21Qb2ludGVyCQkgLAogICAgdW5zaWduZWQgbG9uZyAqCSAsCiAgICBTbXNDYWxsYmFja3Mg
KgkgLAogICAgY2hhciAqKgkJIAoKKTsKCgoMCiAKCgoKdHlwZWRlZiB2b2lkICgqU21jRXJyb3JI
YW5kbGVyKSAoCgogICAgU21jQ29ubgkJICwKICAgIGludCAJCSAsCiAgICBpbnQJCQkgLAogICAg
dW5zaWduZWQgbG9uZyAJICwKICAgIGludCAJCSAsCiAgICBpbnQJCQkgLAogICAgU21Qb2ludGVy
CQkgCgopOwoKdHlwZWRlZiB2b2lkICgqU21zRXJyb3JIYW5kbGVyKSAoCgogICAgU21zQ29ubgkJ
ICwKICAgIGludCAJCSAsCiAgICBpbnQJCQkgLAogICAgdW5zaWduZWQgbG9uZyAJICwKICAgIGlu
dCAJCSAsCiAgICBpbnQJCQkgLAogICAgU21Qb2ludGVyCQkgCgopOwoKCgwKIAoKCgpleHRlcm4g
IkMiIHsgCgpleHRlcm4gU21jQ29ubiBTbWNPcGVuQ29ubmVjdGlvbiAoCgogICAgY2hhciAqCQkg
LAogICAgU21Qb2ludGVyCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICB1bnNpZ25l
ZCBsb25nCSAsCiAgICBTbWNDYWxsYmFja3MgKgkgLAogICAgY2hhciAqCQkgLAogICAgY2hhciAq
KgkJICwKICAgIGludAkJCSAsCiAgICBjaGFyICoJCSAKCik7CgpleHRlcm4gU21jQ2xvc2VTdGF0
dXMgU21jQ2xvc2VDb25uZWN0aW9uICgKCiAgICBTbWNDb25uCQkgLAogICAgaW50CQkJICwKICAg
IGNoYXIgKioJCSAKCik7CgpleHRlcm4gdm9pZCBTbWNNb2RpZnlDYWxsYmFja3MgKAoKICAgIFNt
Y0Nvbm4JCSAsCiAgICB1bnNpZ25lZCBsb25nCSAsCiAgICBTbWNDYWxsYmFja3MgKgkgCgopOwoK
ZXh0ZXJuIHZvaWQgU21jU2V0UHJvcGVydGllcyAoCgogICAgU21jQ29ubgkJICwKICAgIGludCAg
ICAgIAkgICAgICAgICAsCiAgICBTbVByb3AgKioJCSAKCik7CgpleHRlcm4gdm9pZCBTbWNEZWxl
dGVQcm9wZXJ0aWVzICgKCiAgICBTbWNDb25uCQkgLAogICAgaW50ICAgICAgCSAgICAgICAgICwK
ICAgIGNoYXIgKioJCSAKCik7CgpleHRlcm4gaW50ICBTbWNHZXRQcm9wZXJ0aWVzICgKCiAgICBT
bWNDb25uCQkgLAogICAgU21jUHJvcFJlcGx5UHJvYwkgLAogICAgU21Qb2ludGVyCQkgCgopOwoK
ZXh0ZXJuIGludCAgU21jSW50ZXJhY3RSZXF1ZXN0ICgKCiAgICBTbWNDb25uCQkgLAogICAgaW50
CQkJICwKICAgIFNtY0ludGVyYWN0UHJvYwkgLAogICAgU21Qb2ludGVyCQkgCgopOwoKZXh0ZXJu
IHZvaWQgU21jSW50ZXJhY3REb25lICgKCiAgICBTbWNDb25uCQkgLAogICAgaW50ICAJCSAKCik7
CgpleHRlcm4gdm9pZCBTbWNSZXF1ZXN0U2F2ZVlvdXJzZWxmICgKCiAgICBTbWNDb25uCQkgLAog
ICAgaW50CQkJICwKICAgIGludCAgCQkgLAogICAgaW50CQkJICwKICAgIGludCAJCSAsCiAgICBp
bnQgCQkgCgopOwoKZXh0ZXJuIGludCAgU21jUmVxdWVzdFNhdmVZb3Vyc2VsZlBoYXNlMiAoCgog
ICAgU21jQ29ubgkJCSAsCiAgICBTbWNTYXZlWW91cnNlbGZQaGFzZTJQcm9jCSAsCiAgICBTbVBv
aW50ZXIJCQkgCgopOwoKZXh0ZXJuIHZvaWQgU21jU2F2ZVlvdXJzZWxmRG9uZSAoCgogICAgU21j
Q29ubgkJICwKICAgIGludCAJCSAKCik7CgpleHRlcm4gaW50IFNtY1Byb3RvY29sVmVyc2lvbiAo
CgogICAgU21jQ29ubgkJIAoKKTsKCmV4dGVybiBpbnQgU21jUHJvdG9jb2xSZXZpc2lvbiAoCgog
ICAgU21jQ29ubgkJIAoKKTsKCmV4dGVybiBjaGFyICpTbWNWZW5kb3IgKAoKICAgIFNtY0Nvbm4J
CSAKCik7CgpleHRlcm4gY2hhciAqU21jUmVsZWFzZSAoCgogICAgU21jQ29ubgkJIAoKKTsKCmV4
dGVybiBjaGFyICpTbWNDbGllbnRJRCAoCgogICAgU21jQ29ubgkJIAoKKTsKCmV4dGVybiBJY2VD
b25uIFNtY0dldEljZUNvbm5lY3Rpb24gKAoKICAgIFNtY0Nvbm4JCSAKCik7CgpleHRlcm4gaW50
ICBTbXNJbml0aWFsaXplICgKCiAgICBjaGFyICoJCQkgLAogICAgY2hhciAqCQkJICwKICAgIFNt
c05ld0NsaWVudFByb2MJCSAsCiAgICBTbVBvaW50ZXIJCQkgLAogICAgSWNlSG9zdEJhc2VkQXV0
aFByb2MJICwKICAgIGludAkJCQkgLAogICAgY2hhciAqCQkJIAoKKTsKCmV4dGVybiBjaGFyICpT
bXNDbGllbnRIb3N0TmFtZSAoCgogICAgU21zQ29ubgkJIAoKKTsKCmV4dGVybiBjaGFyICpTbXNH
ZW5lcmF0ZUNsaWVudElEICgKCiAgICBTbXNDb25uCQkgCgopOwoKZXh0ZXJuIGludCAgU21zUmVn
aXN0ZXJDbGllbnRSZXBseSAoCgogICAgU21zQ29ubgkJICwKICAgIGNoYXIgKgkJIAoKKTsKCmV4
dGVybiB2b2lkIFNtc1NhdmVZb3Vyc2VsZiAoCgogICAgU21zQ29ubgkJICwKICAgIGludAkJCSAs
CiAgICBpbnQgIAkJICwKICAgIGludAkJCSAsCiAgICBpbnQgCQkgCgopOwoKZXh0ZXJuIHZvaWQg
U21zU2F2ZVlvdXJzZWxmUGhhc2UyICgKCiAgICBTbXNDb25uCQkgCgopOwoKZXh0ZXJuIHZvaWQg
U21zSW50ZXJhY3QgKAoKICAgIFNtc0Nvbm4JCSAKCik7CgpleHRlcm4gdm9pZCBTbXNEaWUgKAoK
ICAgIFNtc0Nvbm4JCSAKCik7CgpleHRlcm4gdm9pZCBTbXNTYXZlQ29tcGxldGUgKAoKICAgIFNt
c0Nvbm4JCSAKCik7CgpleHRlcm4gdm9pZCBTbXNTaHV0ZG93bkNhbmNlbGxlZCAoCgogICAgU21z
Q29ubgkJIAoKKTsKCmV4dGVybiB2b2lkIFNtc1JldHVyblByb3BlcnRpZXMgKAoKICAgIFNtc0Nv
bm4JCSAsCiAgICBpbnQJCQkgLAogICAgU21Qcm9wICoqCQkgCgopOwoKZXh0ZXJuIHZvaWQgU21z
Q2xlYW5VcCAoCgogICAgU21zQ29ubgkJIAoKKTsKCmV4dGVybiBpbnQgU21zUHJvdG9jb2xWZXJz
aW9uICgKCiAgICBTbXNDb25uCQkgCgopOwoKZXh0ZXJuIGludCBTbXNQcm90b2NvbFJldmlzaW9u
ICgKCiAgICBTbXNDb25uCQkgCgopOwoKZXh0ZXJuIGNoYXIgKlNtc0NsaWVudElEICgKCiAgICBT
bXNDb25uCQkgCgopOwoKZXh0ZXJuIEljZUNvbm4gU21zR2V0SWNlQ29ubmVjdGlvbiAoCgogICAg
U21zQ29ubgkJIAoKKTsKCmV4dGVybiBTbWNFcnJvckhhbmRsZXIgU21jU2V0RXJyb3JIYW5kbGVy
ICgKCiAgICBTbWNFcnJvckhhbmRsZXIgCSAKCik7CgpleHRlcm4gU21zRXJyb3JIYW5kbGVyIFNt
c1NldEVycm9ySGFuZGxlciAoCgogICAgU21zRXJyb3JIYW5kbGVyIAkgCgopOwoKZXh0ZXJuIHZv
aWQgU21GcmVlUHJvcGVydHkgKAoKICAgIFNtUHJvcCAqCQkgCgopOwoKZXh0ZXJuIHZvaWQgU21G
cmVlUmVhc29ucyAoCgogICAgaW50CQkJICwKICAgIGNoYXIgKioJCSAKCik7Cgp9IAoKCiMgNTQg
Ii91c3Ivb3Blbndpbi9pbmNsdWRlL1gxMS9TaGVsbC5oIiAyCgoKIAoKCgoKIAoKCgogCiAKCiMg
MTg0ICIvdXNyL29wZW53aW4vaW5jbHVkZS9YMTEvU2hlbGwuaCIKCgoKCgoKZXh0ZXJuIGNvbnN0
ICBjaGFyIFh0U2hlbGxTdHJpbmdzW107CmV4dGVybiBjb25zdCAgY2hhciBYdFI2U2hlbGxTdHJp
bmdzW107CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgogCgp0eXBlZGVmIHN0cnVjdCBfU2hlbGxDbGFzc1JlYyAqU2hlbGxXaWRn
ZXRDbGFzczsKdHlwZWRlZiBzdHJ1Y3QgX092ZXJyaWRlU2hlbGxDbGFzc1JlYyAqT3ZlcnJpZGVT
aGVsbFdpZGdldENsYXNzOwp0eXBlZGVmIHN0cnVjdCBfV01TaGVsbENsYXNzUmVjICpXTVNoZWxs
V2lkZ2V0Q2xhc3M7CnR5cGVkZWYgc3RydWN0IF9UcmFuc2llbnRTaGVsbENsYXNzUmVjICpUcmFu
c2llbnRTaGVsbFdpZGdldENsYXNzOwp0eXBlZGVmIHN0cnVjdCBfVG9wTGV2ZWxTaGVsbENsYXNz
UmVjICpUb3BMZXZlbFNoZWxsV2lkZ2V0Q2xhc3M7CnR5cGVkZWYgc3RydWN0IF9BcHBsaWNhdGlv
blNoZWxsQ2xhc3NSZWMgKkFwcGxpY2F0aW9uU2hlbGxXaWRnZXRDbGFzczsKdHlwZWRlZiBzdHJ1
Y3QgX1Nlc3Npb25TaGVsbENsYXNzUmVjICpTZXNzaW9uU2hlbGxXaWRnZXRDbGFzczsKCgpleHRl
cm4gIFdpZGdldENsYXNzIHNoZWxsV2lkZ2V0Q2xhc3M7CmV4dGVybiAgV2lkZ2V0Q2xhc3Mgb3Zl
cnJpZGVTaGVsbFdpZGdldENsYXNzOwpleHRlcm4gIFdpZGdldENsYXNzIHdtU2hlbGxXaWRnZXRD
bGFzczsKZXh0ZXJuICBXaWRnZXRDbGFzcyB0cmFuc2llbnRTaGVsbFdpZGdldENsYXNzOwpleHRl
cm4gIFdpZGdldENsYXNzIHRvcExldmVsU2hlbGxXaWRnZXRDbGFzczsKZXh0ZXJuICBXaWRnZXRD
bGFzcyBhcHBsaWNhdGlvblNoZWxsV2lkZ2V0Q2xhc3M7CmV4dGVybiAgV2lkZ2V0Q2xhc3Mgc2Vz
c2lvblNoZWxsV2lkZ2V0Q2xhc3M7CgoKCiAKIyAzMSAiL3Vzci9kdC9pbmNsdWRlL1htL1htLmgi
IDIKCiMgMSAiL3Vzci9vcGVud2luL2luY2x1ZGUvWDExL1hhdG9tLmgiIDEKCgoKIAoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgojIDMyICIvdXNyL2R0L2luY2x1ZGUvWG0vWG0uaCIgMgoKIAogCgoKIyAxICIv
dXNyL2R0L2luY2x1ZGUvWG0vWG1TdHJEZWZzLmgiIDEKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgog
CiAKIAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgNTQyNSAi
L3Vzci9kdC9pbmNsdWRlL1htL1htU3RyRGVmcy5oIgoKCgp9ICAgCgoKIyAxICIvdXNyL29wZW53
aW4vaW5jbHVkZS9YMTEvU3RyaW5nRGVmcy5oIiAxCiAKIAogCgoKCiMgMjYyICIvdXNyL29wZW53
aW4vaW5jbHVkZS9YMTEvU3RyaW5nRGVmcy5oIgoKCgoKCgpleHRlcm4gY29uc3QgIGNoYXIgWHRT
dHJpbmdzW107CmV4dGVybiBjb25zdCAgY2hhciBYdFI2U3RyaW5nc1tdOwoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIyA1NDMxICIvdXNyL2R0L2luY2x1ZGUvWG0vWG1TdHJEZWZzLmgiIDIKCgoK
ZXh0ZXJuICJDIiB7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp9ICAgCgoKCiMgMzcgIi91c3IvZHQvaW5jbHVk
ZS9YbS9YbS5oIiAyCgojIDEgIi91c3IvZHQvaW5jbHVkZS9YbS9WaXJ0S2V5cy5oIiAxCiAKCgoK
CgogCiAKCiAKIAogCgoKCgojIDEgIi91c3IvZHQvaW5jbHVkZS9YbS9YbS5oIiAxCiAKCgoKCgog
CiAKCgoKCgoKCgoKCiMgMzQ4MCAiL3Vzci9kdC9pbmNsdWRlL1htL1htLmgiCgogIAojIDE3ICIv
dXNyL2R0L2luY2x1ZGUvWG0vVmlydEtleXMuaCIgMgoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgpleHRlcm4g
dm9pZCBYbVRyYW5zbGF0ZUtleSggCiAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXkgKmRw
eSwKCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXljb2RlLAoKCgogICAg
ICAgICAgICAgICAgICAgICAgICBNb2RpZmllcnMgbW9kaWZpZXJzLAogICAgICAgICAgICAgICAg
ICAgICAgICBNb2RpZmllcnMgKm1vZGlmaWVyc19yZXR1cm4sCiAgICAgICAgICAgICAgICAgICAg
ICAgIEtleVN5bSAqa2V5c3ltX3JldHVybikgOwoKIAoKCgp9ICAgCgoKCiMgMzggIi91c3IvZHQv
aW5jbHVkZS9YbS9YbS5oIiAyCgojIDEgIi91c3IvZHQvaW5jbHVkZS9YbS9UcmFuc2Zlci5oIiAx
CiAKIAoKCgoKCgogCgoKCgoKCiMgMSAiL3Vzci9kdC9pbmNsdWRlL1htL0RyYWdEcm9wLmgiIDEK
IAoKCgoKCiAKIAoKIAogCiAKCgoKCiMgMSAiL3Vzci9kdC9pbmNsdWRlL1htL0RyYWdDLmgiIDEK
IAoKCgoKCiAKIAoKIAogCiAKCiAKCgoKCiMgMSAiL3Vzci9kdC9pbmNsdWRlL1htL1htLmgiIDEK
IAoKCgoKCiAKIAoKCgoKCgoKCgoKIyAzNDgwICIvdXNyL2R0L2luY2x1ZGUvWG0vWG0uaCIKCiAg
CiMgMTkgIi91c3IvZHQvaW5jbHVkZS9YbS9EcmFnQy5oIiAyCgojIDEgIi91c3IvZHQvaW5jbHVk
ZS9YbS9EaXNwbGF5LmgiIDEKIAoKCgoKCiAKIAoKIAogCiAKCgoKCgojIDEgIi91c3IvZHQvaW5j
bHVkZS9YbS9YbS5oIiAxCiAKCgoKCgogCiAKCgoKCgoKCgoKCiMgMzQ4MCAiL3Vzci9kdC9pbmNs
dWRlL1htL1htLmgiCgogIAojIDE4ICIvdXNyL2R0L2luY2x1ZGUvWG0vRGlzcGxheS5oIiAyCgoK
IyAxICIvdXNyL2R0L2luY2x1ZGUvWG0vRHJhZ0MuaCIgMQogCgoKCgoKIAogCgogCiAKIAoKIAoK
IyAyMjYgIi91c3IvZHQvaW5jbHVkZS9YbS9EcmFnQy5oIgoKIAojIDIwICIvdXNyL2R0L2luY2x1
ZGUvWG0vRGlzcGxheS5oIiAyCgojIDEgIi91c3IvZHQvaW5jbHVkZS9YbS9Ecm9wU01nci5oIiAx
CiAKCgoKCgogCiAKCiAKIAogCgoKCgojIDEgIi91c3IvZHQvaW5jbHVkZS9YbS9YbS5oIiAxCiAK
CgoKCgogCiAKCgoKCgoKCgoKCiMgMzQ4MCAiL3Vzci9kdC9pbmNsdWRlL1htL1htLmgiCgogIAoj
IDE3ICIvdXNyL2R0L2luY2x1ZGUvWG0vRHJvcFNNZ3IuaCIgMgoKIyAxICIvdXNyL2R0L2luY2x1
ZGUvWG0vRHJhZ0MuaCIgMQogCgoKCgoKIAogCgogCiAKIAoKIAoKIyAyMjYgIi91c3IvZHQvaW5j
bHVkZS9YbS9EcmFnQy5oIgoKIAojIDE4ICIvdXNyL2R0L2luY2x1ZGUvWG0vRHJvcFNNZ3IuaCIg
MgoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCgoKCgoKIAogCgoKCgoKCgoKIAoKZW51bSB7IFhtRFJB
R19VTkRFUl9OT05FLCBYbURSQUdfVU5ERVJfUElYTUFQLAogICAgWG1EUkFHX1VOREVSX1NIQURP
V19JTiwgWG1EUkFHX1VOREVSX1NIQURPV19PVVQsCiAgICBYbURSQUdfVU5ERVJfSElHSExJR0hU
IH07CgplbnVtIHsgWG1EUk9QX1NJVEVfU0lNUExFLCBYbURST1BfU0lURV9DT01QT1NJVEUsCiAg
ICBYbURST1BfU0lURV9TSU1QTEVfQ0xJUF9PTkxZID0gMTI4LAogICAgWG1EUk9QX1NJVEVfQ09N
UE9TSVRFX0NMSVBfT05MWSB9OwoKZW51bSB7IFhtQUJPVkUsIFhtQkVMT1cgfTsKCmVudW0geyBY
bURST1BfU0lURV9BQ1RJVkUsIFhtRFJPUF9TSVRFX0lOQUNUSVZFLCBYbURST1BfU0lURV9JR05P
UkUgfTsKCnR5cGVkZWYgc3RydWN0IF9YbURyYWdQcm9jQ2FsbGJhY2tTdHJ1Y3QgewogICAgaW50
CQkJCXJlYXNvbjsKICAgIFhFdmVudCAqCQlldmVudDsKICAgIFRpbWUJCQl0aW1lU3RhbXA7CglX
aWRnZXQJCQlkcmFnQ29udGV4dDsKICAgIFBvc2l0aW9uCQl4LCB5OwogICAgdW5zaWduZWQgY2hh
cglkcm9wU2l0ZVN0YXR1czsKICAgIHVuc2lnbmVkIGNoYXIJb3BlcmF0aW9uOwogICAgdW5zaWdu
ZWQgY2hhcglvcGVyYXRpb25zOwoJQm9vbGVhbgkJCWFuaW1hdGU7Cn0gWG1EcmFnUHJvY0NhbGxi
YWNrU3RydWN0LCAqIFhtRHJhZ1Byb2NDYWxsYmFjazsKCnR5cGVkZWYgc3RydWN0IF9YbURyb3BQ
cm9jQ2FsbGJhY2tTdHJ1Y3QgewogICAgaW50CQkJCXJlYXNvbjsKICAgIFhFdmVudCAqCQlldmVu
dDsKICAgIFRpbWUJCQl0aW1lU3RhbXA7CglXaWRnZXQJCQlkcmFnQ29udGV4dDsKICAgIFBvc2l0
aW9uCQl4LCB5OwogICAgdW5zaWduZWQgY2hhcglkcm9wU2l0ZVN0YXR1czsKICAgIHVuc2lnbmVk
IGNoYXIJb3BlcmF0aW9uOwogICAgdW5zaWduZWQgY2hhcglvcGVyYXRpb25zOwoJdW5zaWduZWQg
Y2hhcglkcm9wQWN0aW9uOwp9IFhtRHJvcFByb2NDYWxsYmFja1N0cnVjdCwgKiBYbURyb3BQcm9j
Q2FsbGJhY2s7CgoKdHlwZWRlZiBzdHJ1Y3QgX1htRHJvcFNpdGVWaXN1YWxzUmVjIHsKCVBpeGVs
CWJhY2tncm91bmQ7CglQaXhlbAlmb3JlZ3JvdW5kOwoJUGl4ZWwJdG9wU2hhZG93Q29sb3I7CglQ
aXhtYXAJdG9wU2hhZG93UGl4bWFwOwoJUGl4ZWwJYm90dG9tU2hhZG93Q29sb3I7CglQaXhtYXAJ
Ym90dG9tU2hhZG93UGl4bWFwOwoJRGltZW5zaW9uCXNoYWRvd1RoaWNrbmVzczsKCVBpeGVsCWhp
Z2hsaWdodENvbG9yOwoJUGl4bWFwCWhpZ2hsaWdodFBpeG1hcDsKCURpbWVuc2lvbgloaWdobGln
aHRUaGlja25lc3M7CglEaW1lbnNpb24JYm9yZGVyV2lkdGg7Cn0gWG1Ecm9wU2l0ZVZpc3VhbHNS
ZWMsICogWG1Ecm9wU2l0ZVZpc3VhbHM7CgoKIAoKZXh0ZXJuICBXaWRnZXRDbGFzcyB4bURyb3BT
aXRlTWFuYWdlck9iamVjdENsYXNzOwoKdHlwZWRlZiBzdHJ1Y3QgX1htRHJvcFNpdGVNYW5hZ2Vy
Q2xhc3NSZWMgKlhtRHJvcFNpdGVNYW5hZ2VyT2JqZWN0Q2xhc3M7CnR5cGVkZWYgc3RydWN0IF9Y
bURyb3BTaXRlTWFuYWdlclJlYyAqWG1Ecm9wU2l0ZU1hbmFnZXJPYmplY3Q7CgoKCgoKIAoKZXh0
ZXJuIHZvaWQgWG1Ecm9wU2l0ZVJlZ2lzdGVyKCAKICAgICAgICAgICAgICAgICAgICAgICAgV2lk
Z2V0IHdpZGdldCwKICAgICAgICAgICAgICAgICAgICAgICAgQXJnTGlzdCBhcmdzLAogICAgICAg
ICAgICAgICAgICAgICAgICBDYXJkaW5hbCBhcmdDb3VudCkgOwpleHRlcm4gdm9pZCBYbURyb3BT
aXRlVW5yZWdpc3RlciggCiAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCB3aWRnZXQpIDsK
ZXh0ZXJuIEJvb2xlYW4gWG1Ecm9wU2l0ZVJlZ2lzdGVyZWQoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgV2lkZ2V0IHdpZGdldCkgOwpleHRlcm4gdm9pZCBYbURyb3BTaXRlU3RhcnRVcGRhdGUo
IAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgcmVmV2lkZ2V0KSA7CmV4dGVybiB2b2lk
IFhtRHJvcFNpdGVVcGRhdGUoIAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgZW5jbG9z
aW5nV2lkZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICBBcmdMaXN0IGFyZ3MsCiAgICAgICAg
ICAgICAgICAgICAgICAgIENhcmRpbmFsIGFyZ0NvdW50KSA7CmV4dGVybiB2b2lkIFhtRHJvcFNp
dGVFbmRVcGRhdGUoIAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgcmVmV2lkZ2V0KSA7
CmV4dGVybiB2b2lkIFhtRHJvcFNpdGVSZXRyaWV2ZSggCiAgICAgICAgICAgICAgICAgICAgICAg
IFdpZGdldCBlbmNsb3NpbmdXaWRnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIEFyZ0xpc3Qg
YXJncywKICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgYXJnQ291bnQpIDsKZXh0ZXJu
IGludCBYbURyb3BTaXRlUXVlcnlTdGFja2luZ09yZGVyKCAKICAgICAgICAgICAgICAgICAgICAg
ICAgV2lkZ2V0IHdpZGdldCwKICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0ICpwYXJlbnRf
cnRuLAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgKipjaGlsZHJlbl9ydG4sCiAgICAg
ICAgICAgICAgICAgICAgICAgIENhcmRpbmFsICpudW1fY2hpbGRyZW5fcnRuKSA7CmV4dGVybiB2
b2lkIFhtRHJvcFNpdGVDb25maWd1cmVTdGFja2luZ09yZGVyKCAKICAgICAgICAgICAgICAgICAg
ICAgICAgV2lkZ2V0IHdpZGdldCwKICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHNpYmxp
bmcsCiAgICAgICAgICAgICAgICAgICAgICAgIENhcmRpbmFsIHN0YWNrX21vZGUpIDsKZXh0ZXJu
IFhtRHJvcFNpdGVWaXN1YWxzIFhtRHJvcFNpdGVHZXRBY3RpdmVWaXN1YWxzKCAKICAgICAgICAg
ICAgICAgICAgICAgICAgV2lkZ2V0IHdpZGdldCkgOwoKIAoKCn0gICAKCgoKIAojIDIxICIvdXNy
L2R0L2luY2x1ZGUvWG0vRGlzcGxheS5oIiAyCgoKCmV4dGVybiAiQyIgewoKCgoKCgplbnVtIHsK
CVhtRFJBR19OT05FLAoJWG1EUkFHX0RST1BfT05MWSwKCVhtRFJBR19QUkVGRVJfUFJFUkVHSVNU
RVIsCglYbURSQUdfUFJFUkVHSVNURVIsCglYbURSQUdfUFJFRkVSX0RZTkFNSUMsCglYbURSQUdf
RFlOQU1JQywKCVhtRFJBR19QUkVGRVJfUkVDRUlWRVIKfTsKCiAKCnR5cGVkZWYgc3RydWN0IF9Y
bURpc3BsYXlSZWMgKlhtRGlzcGxheTsKdHlwZWRlZiBzdHJ1Y3QgX1htRGlzcGxheUNsYXNzUmVj
ICpYbURpc3BsYXlDbGFzczsKZXh0ZXJuICAJV2lkZ2V0Q2xhc3MgeG1EaXNwbGF5Q2xhc3M7CgoK
CiAKCmV4dGVybiBXaWRnZXQgWG1HZXREcmFnQ29udGV4dCggCiAgICAgICAgICAgICAgICAgICAg
ICAgIFdpZGdldCB3LAogICAgICAgICAgICAgICAgICAgICAgICBUaW1lIHRpbWUpIDsKZXh0ZXJu
IFdpZGdldCBYbUdldFhtRGlzcGxheSggCiAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXkg
KmRpc3BsYXkpIDsKCiAKCgp9ICAgCgoKCgoKIyAyMCAiL3Vzci9kdC9pbmNsdWRlL1htL0RyYWdD
LmgiIDIKCgoKZXh0ZXJuICJDIiB7CgoKCiAKCgoKIAoKCnR5cGVkZWYgdW5zaWduZWQgaW50CVht
SUQ7CgogCgoKCgoKCgoKCgoKCgoKCgogCgplbnVtewlYbVRPUF9MRVZFTF9FTlRFUiwJCVhtVE9Q
X0xFVkVMX0xFQVZFLAoJWG1EUkFHX01PVElPTiwJCQlYbURST1BfU0lURV9FTlRFUiwKCVhtRFJP
UF9TSVRFX0xFQVZFLAkJWG1EUk9QX1NUQVJULAoJWG1EUk9QX0ZJTklTSCwJCQlYbURSQUdfRFJP
UF9GSU5JU0gsCglYbU9QRVJBVElPTl9DSEFOR0VECgl9IDsKCiAKZW51bXsJWG1EUk9QLAkJCQlY
bURST1BfSEVMUCwKCVhtRFJPUF9DQU5DRUwsCQkJWG1EUk9QX0lOVEVSUlVQVAoJfSA7CgogCgoK
CgoKZW51bXsJWG1CTEVORF9BTEwsCQkJWG1CTEVORF9TVEFURV9TT1VSQ0UsCglYbUJMRU5EX0pV
U1RfU09VUkNFLAkJWG1CTEVORF9OT05FCgl9IDsKCmVudW17ICAJWG1EUk9QX0ZBSUxVUkUsCQkJ
WG1EUk9QX1NVQ0NFU1MKCX0gOwoKCiAKCmVudW17CVhtQ1JfVE9QX0xFVkVMX0VOVEVSLAkJWG1D
Ul9UT1BfTEVWRUxfTEVBVkUsCglYbUNSX0RSQUdfTU9USU9OLAkJWG1DUl9EUk9QX1NJVEVfRU5U
RVIsCglYbUNSX0RST1BfU0lURV9MRUFWRSwJCVhtQ1JfRFJPUF9TVEFSVCwKCVhtQ1JfRFJPUF9G
SU5JU0gsCQlYbUNSX0RSQUdfRFJPUF9GSU5JU0gsCglYbUNSX09QRVJBVElPTl9DSEFOR0VELAoK
CV9YbU5VTUJFUl9ETkRfQ0JfUkVBU09OUwoJfSA7CgoKIAp0eXBlZGVmIHN0cnVjdCBfWG1EcmFn
Q29udGV4dENsYXNzUmVjCSpYbURyYWdDb250ZXh0Q2xhc3M7CnR5cGVkZWYgc3RydWN0IF9YbURy
YWdDb250ZXh0UmVjCSpYbURyYWdDb250ZXh0OwpleHRlcm4gIFdpZGdldENsYXNzIHhtRHJhZ0Nv
bnRleHRDbGFzczsKCnR5cGVkZWYgc3RydWN0IF9YbUFueUlDQ0NhbGxiYWNrU3RydWN0ewogICAg
aW50ICAgICAgICAgIAlyZWFzb247CiAgICBYRXZlbnQgICAgICAgICAgCSpldmVudDsKICAgIFRp
bWUgICAgICAgICAgICAJdGltZVN0YW1wOwp9WG1BbnlJQ0NDYWxsYmFja1N0cnVjdCwgKlhtQW55
SUNDQ2FsbGJhY2s7Cgp0eXBlZGVmIHN0cnVjdCBfWG1Ub3BMZXZlbEVudGVyQ2FsbGJhY2tTdHJ1
Y3R7CiAgICBpbnQgICAgICAgICAgCXJlYXNvbjsKICAgIFhFdmVudCAgICAgICAgICAJKmV2ZW50
OwogICAgVGltZSAgICAgICAgICAgIAl0aW1lU3RhbXA7CiAgICBTY3JlZW4JCSpzY3JlZW47CiAg
ICAgCgoKCiAgICBXaW5kb3cJCXdpbmRvdzsKICAgIFBvc2l0aW9uCQl4LCB5OwogICAgdW5zaWdu
ZWQgY2hhcglkcmFnUHJvdG9jb2xTdHlsZTsKICAgIEF0b20JCWljY0hhbmRsZTsKfVhtVG9wTGV2
ZWxFbnRlckNhbGxiYWNrU3RydWN0LCAqWG1Ub3BMZXZlbEVudGVyQ2FsbGJhY2s7Cgp0eXBlZGVm
IHN0cnVjdCBfWG1Ub3BMZXZlbExlYXZlQ2FsbGJhY2tTdHJ1Y3R7CiAgICBpbnQgICAgICAgICAg
CXJlYXNvbjsKICAgIFhFdmVudCAgICAgICAgICAJKmV2ZW50OwogICAgVGltZSAgICAgICAgICAg
IAl0aW1lU3RhbXA7CiAgICBTY3JlZW4JCSpzY3JlZW47CiAgICBXaW5kb3cJCXdpbmRvdzsKfVht
VG9wTGV2ZWxMZWF2ZUNhbGxiYWNrU3RydWN0LCAqWG1Ub3BMZXZlbExlYXZlQ2FsbGJhY2s7Cgog
CgoKCgp0eXBlZGVmIHN0cnVjdCBfWG1Ecm9wU2l0ZUVudGVyQ2FsbGJhY2tTdHJ1Y3R7CiAgICBp
bnQgICAgICAgICAgCXJlYXNvbjsKICAgIFhFdmVudCAgICAgICAgICAJKmV2ZW50OwogICAgVGlt
ZSAgICAgICAgICAgIAl0aW1lU3RhbXA7CiAgICB1bnNpZ25lZCBjaGFyCW9wZXJhdGlvbjsKICAg
IHVuc2lnbmVkIGNoYXIJb3BlcmF0aW9uczsKICAgIHVuc2lnbmVkIGNoYXIJZHJvcFNpdGVTdGF0
dXM7CiAgICBQb3NpdGlvbgkJeCwgeTsKfVhtRHJvcFNpdGVFbnRlckNhbGxiYWNrU3RydWN0LCAq
WG1Ecm9wU2l0ZUVudGVyQ2FsbGJhY2s7CgogCgoKCgp0eXBlZGVmIHN0cnVjdCBfWG1Ecm9wU2l0
ZUxlYXZlQ2FsbGJhY2tTdHJ1Y3R7CiAgICBpbnQgICAgICAgICAgCXJlYXNvbjsKICAgIFhFdmVu
dCAgICAgICAgICAJKmV2ZW50OwogICAgVGltZSAgICAgICAgICAgIAl0aW1lU3RhbXA7Cn1YbURy
b3BTaXRlTGVhdmVDYWxsYmFja1N0cnVjdCwgKlhtRHJvcFNpdGVMZWF2ZUNhbGxiYWNrOwoKdHlw
ZWRlZiBzdHJ1Y3QgX1htRHJhZ01vdGlvbkNhbGxiYWNrU3RydWN0ewogICAgaW50ICAgICAgICAg
IAlyZWFzb247CiAgICBYRXZlbnQgICAgICAgICAgCSpldmVudDsKICAgIFRpbWUgICAgICAgICAg
ICAJdGltZVN0YW1wOwogICAgdW5zaWduZWQgY2hhcglvcGVyYXRpb247CiAgICB1bnNpZ25lZCBj
aGFyCW9wZXJhdGlvbnM7CiAgICB1bnNpZ25lZCBjaGFyCWRyb3BTaXRlU3RhdHVzOwogICAgUG9z
aXRpb24JCXgsIHk7Cn1YbURyYWdNb3Rpb25DYWxsYmFja1N0cnVjdCwgKlhtRHJhZ01vdGlvbkNh
bGxiYWNrOwoKdHlwZWRlZiBzdHJ1Y3QgX1htT3BlcmF0aW9uQ2hhbmdlZENhbGxiYWNrU3RydWN0
ewogICAgaW50ICAgICAgICAgIAlyZWFzb247CiAgICBYRXZlbnQgICAgICAgICAgCSpldmVudDsK
ICAgIFRpbWUgICAgICAgICAgICAJdGltZVN0YW1wOwogICAgdW5zaWduZWQgY2hhcglvcGVyYXRp
b247CiAgICB1bnNpZ25lZCBjaGFyCW9wZXJhdGlvbnM7CiAgICB1bnNpZ25lZCBjaGFyCWRyb3BT
aXRlU3RhdHVzOwp9WG1PcGVyYXRpb25DaGFuZ2VkQ2FsbGJhY2tTdHJ1Y3QsICpYbU9wZXJhdGlv
bkNoYW5nZWRDYWxsYmFjazsKCnR5cGVkZWYgc3RydWN0IF9YbURyb3BTdGFydENhbGxiYWNrU3Ry
dWN0ewogICAgaW50ICAgICAgICAgIAlyZWFzb247CiAgICBYRXZlbnQgICAgICAgICAgCSpldmVu
dDsKICAgIFRpbWUgICAgICAgICAgICAJdGltZVN0YW1wOwogICAgdW5zaWduZWQgY2hhcglvcGVy
YXRpb247CiAgICB1bnNpZ25lZCBjaGFyCW9wZXJhdGlvbnM7CiAgICB1bnNpZ25lZCBjaGFyCWRy
b3BTaXRlU3RhdHVzOwogICAgdW5zaWduZWQgY2hhcglkcm9wQWN0aW9uOwogICAgUG9zaXRpb24J
CXgsIHk7CiAgICBXaW5kb3cJCXdpbmRvdzsKICAgIEF0b20JCWljY0hhbmRsZTsKfVhtRHJvcFN0
YXJ0Q2FsbGJhY2tTdHJ1Y3QsICpYbURyb3BTdGFydENhbGxiYWNrOwoKdHlwZWRlZiBzdHJ1Y3Qg
X1htRHJvcEZpbmlzaENhbGxiYWNrU3RydWN0ewogICAgaW50ICAgICAgICAgIAlyZWFzb247CiAg
ICBYRXZlbnQgICAgICAgICAgCSpldmVudDsKICAgIFRpbWUgICAgICAgICAgICAJdGltZVN0YW1w
OwogICAgdW5zaWduZWQgY2hhcglvcGVyYXRpb247CiAgICB1bnNpZ25lZCBjaGFyCW9wZXJhdGlv
bnM7CiAgICB1bnNpZ25lZCBjaGFyCWRyb3BTaXRlU3RhdHVzOwogICAgdW5zaWduZWQgY2hhcglk
cm9wQWN0aW9uOwogICAgdW5zaWduZWQgY2hhcgljb21wbGV0aW9uU3RhdHVzOwp9WG1Ecm9wRmlu
aXNoQ2FsbGJhY2tTdHJ1Y3QsICpYbURyb3BGaW5pc2hDYWxsYmFjazsKCnR5cGVkZWYgc3RydWN0
IF9YbURyYWdEcm9wRmluaXNoQ2FsbGJhY2tTdHJ1Y3R7CiAgICBpbnQgICAgICAgICAgCXJlYXNv
bjsKICAgIFhFdmVudCAgICAgICAgICAJKmV2ZW50OwogICAgVGltZSAgICAgICAgICAgIAl0aW1l
U3RhbXA7Cn1YbURyYWdEcm9wRmluaXNoQ2FsbGJhY2tTdHJ1Y3QsICpYbURyYWdEcm9wRmluaXNo
Q2FsbGJhY2s7CgoKIAoKZXh0ZXJuIFdpZGdldCBYbURyYWdTdGFydCggCiAgICAgICAgICAgICAg
ICAgICAgICAgIFdpZGdldCB3LAogICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50
LAogICAgICAgICAgICAgICAgICAgICAgICBBcmdMaXN0IGFyZ3MsCiAgICAgICAgICAgICAgICAg
ICAgICAgIENhcmRpbmFsIG51bUFyZ3MpIDsKZXh0ZXJuIHZvaWQgWG1EcmFnQ2FuY2VsKCAKICAg
ICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IGRyYWdDb250ZXh0KSA7CmV4dGVybiBCb29sZWFu
IFhtVGFyZ2V0c0FyZUNvbXBhdGlibGUoIAogICAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5
ICpkcHksCiAgICAgICAgICAgICAgICAgICAgICAgIEF0b20gKmV4cG9ydFRhcmdldHMsCiAgICAg
ICAgICAgICAgICAgICAgICAgIENhcmRpbmFsIG51bUV4cG9ydFRhcmdldHMsCiAgICAgICAgICAg
ICAgICAgICAgICAgIEF0b20gKmltcG9ydFRhcmdldHMsCiAgICAgICAgICAgICAgICAgICAgICAg
IENhcmRpbmFsIG51bUltcG9ydFRhcmdldHMpIDsKCiAKCgoKfSAgIAoKCgogCiMgMTcgIi91c3Iv
ZHQvaW5jbHVkZS9YbS9EcmFnRHJvcC5oIiAyCgojIDEgIi91c3IvZHQvaW5jbHVkZS9YbS9EcmFn
SWNvbi5oIiAxCiAKCgoKCgogCiAKCiAKIAogCgoKCgojIDEgIi91c3IvZHQvaW5jbHVkZS9YbS9Y
bS5oIiAxCiAKCgoKCgogCiAKCgoKCgoKCgoKCiMgMzQ4MCAiL3Vzci9kdC9pbmNsdWRlL1htL1ht
LmgiCgogIAojIDE3ICIvdXNyL2R0L2luY2x1ZGUvWG0vRHJhZ0ljb24uaCIgMgoKCgpleHRlcm4g
IkMiIHsKCgoKCgplbnVtIHsKCVhtQVRUQUNIX05PUlRIX1dFU1QsCglYbUFUVEFDSF9OT1JUSCwK
CVhtQVRUQUNIX05PUlRIX0VBU1QsCglYbUFUVEFDSF9FQVNULAoJWG1BVFRBQ0hfU09VVEhfRUFT
VCwKCVhtQVRUQUNIX1NPVVRILAoJWG1BVFRBQ0hfU09VVEhfV0VTVCwKCVhtQVRUQUNIX1dFU1Qs
CglYbUFUVEFDSF9DRU5URVIsCglYbUFUVEFDSF9IT1QKfTsKCnR5cGVkZWYgc3RydWN0IF9YbURy
YWdJY29uUmVjICpYbURyYWdJY29uT2JqZWN0Owp0eXBlZGVmIHN0cnVjdCBfWG1EcmFnSWNvbkNs
YXNzUmVjICpYbURyYWdJY29uT2JqZWN0Q2xhc3M7CmV4dGVybiAgV2lkZ2V0Q2xhc3MgeG1EcmFn
SWNvbk9iamVjdENsYXNzOwoKCiAKCmV4dGVybiBXaWRnZXQgWG1DcmVhdGVEcmFnSWNvbiggCiAg
ICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCBwYXJlbnQsCiAgICAgICAgICAgICAgICAgICAg
ICAgIFN0cmluZyBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBBcmdMaXN0IGFyZ0xpc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgIENhcmRpbmFsIGFyZ0NvdW50KSA7CgogCgoKCn0gICAK
CgoKIyAxOCAiL3Vzci9kdC9pbmNsdWRlL1htL0RyYWdEcm9wLmgiIDIKCiMgMSAiL3Vzci9kdC9p
bmNsdWRlL1htL0Ryb3BUcmFucy5oIiAxCiAKCgoKCgogCiAKCiAKIAogCgoKCgoKIyAxICIvdXNy
L2R0L2luY2x1ZGUvWG0vWG0uaCIgMQogCgoKCgoKIAogCgoKCgoKCgoKCgojIDM0ODAgIi91c3Iv
ZHQvaW5jbHVkZS9YbS9YbS5oIgoKICAKIyAxOCAiL3Vzci9kdC9pbmNsdWRlL1htL0Ryb3BUcmFu
cy5oIiAyCgoKCmV4dGVybiAiQyIgewoKCgoKCmV4dGVybiAgV2lkZ2V0Q2xhc3MgeG1Ecm9wVHJh
bnNmZXJPYmplY3RDbGFzczsKCnR5cGVkZWYgc3RydWN0IF9YbURyb3BUcmFuc2ZlckNsYXNzUmVj
ICogWG1Ecm9wVHJhbnNmZXJPYmplY3RDbGFzczsKdHlwZWRlZiBzdHJ1Y3QgX1htRHJvcFRyYW5z
ZmVyUmVjICAgICAgKiBYbURyb3BUcmFuc2Zlck9iamVjdDsKCgoKCgoKdHlwZWRlZiBzdHJ1Y3Qg
X1htRHJvcFRyYW5zZmVyRW50cnlSZWMgewoJWHRQb2ludGVyCWNsaWVudF9kYXRhOwoJQXRvbQkJ
dGFyZ2V0Owp9IFhtRHJvcFRyYW5zZmVyRW50cnlSZWMsICogWG1Ecm9wVHJhbnNmZXJFbnRyeTsK
CiAKCmV4dGVybiBXaWRnZXQgWG1Ecm9wVHJhbnNmZXJTdGFydCggCiAgICAgICAgICAgICAgICAg
ICAgICAgIFdpZGdldCByZWZXaWRnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIEFyZ0xpc3Qg
YXJncywKICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgYXJnQ291bnQpIDsKZXh0ZXJu
IHZvaWQgWG1Ecm9wVHJhbnNmZXJBZGQoIAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQg
d2lkZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICBYbURyb3BUcmFuc2ZlckVudHJ5IHRyYW5z
ZmVycywKICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgbnVtX3RyYW5zZmVycykgOwoK
IAoKCgp9ICAgCgoKCiAKIyAxOSAiL3Vzci9kdC9pbmNsdWRlL1htL0RyYWdEcm9wLmgiIDIKCiMg
MSAiL3Vzci9kdC9pbmNsdWRlL1htL0RyYWdPdmVyUy5oIiAxCiAKCgoKCgogCiAKCiAKIAogCgoK
CgojIDEgIi91c3IvZHQvaW5jbHVkZS9YbS9YbS5oIiAxCiAKCgoKCgogCiAKCgoKCgoKCgoKCiMg
MzQ4MCAiL3Vzci9kdC9pbmNsdWRlL1htL1htLmgiCgogIAojIDE3ICIvdXNyL2R0L2luY2x1ZGUv
WG0vRHJhZ092ZXJTLmgiIDIKCgoKCgpleHRlcm4gIkMiIHsKCgoKIAoKCgoKCiAKCnR5cGVkZWYg
c3RydWN0IF9YbURyYWdPdmVyU2hlbGxSZWMgCSpYbURyYWdPdmVyU2hlbGxXaWRnZXQ7CnR5cGVk
ZWYgc3RydWN0IF9YbURyYWdPdmVyU2hlbGxDbGFzc1JlYyAJKlhtRHJhZ092ZXJTaGVsbFdpZGdl
dENsYXNzOwoKZXh0ZXJuICBXaWRnZXRDbGFzcwl4bURyYWdPdmVyU2hlbGxXaWRnZXRDbGFzczsK
Cgp9ICAgCgoKCiAKCiMgMjAgIi91c3IvZHQvaW5jbHVkZS9YbS9EcmFnRHJvcC5oIiAyCgoKCgoj
IDE2ICIvdXNyL2R0L2luY2x1ZGUvWG0vVHJhbnNmZXIuaCIgMgoKCgpleHRlcm4gIkMiIHsKCgog
CgoKCgoKCgogCgp0eXBlZGVmIGVudW0geyBYbVRSQU5TRkVSX0RPTkVfU1VDQ0VFRCA9IDAsIFht
VFJBTlNGRVJfRE9ORV9GQUlMLCAKCSAgICAgICBYbVRSQU5TRkVSX0RPTkVfQ09OVElOVUUsIFht
VFJBTlNGRVJfRE9ORV9ERUZBVUxUIAoJICAgICB9IFhtVHJhbnNmZXJTdGF0dXM7CgogCmVudW0g
eyBYbU1PVkUgPSAoMUwgPDwgMCksIFhtQ09QWSA9ICgxTCA8PCAxKSwgCiAgICAgICBYbUxJTksg
PSAoMUwgPDwgMiksIFhtT1RIRVIgfTsKCmVudW0geyBYbVNFTEVDVElPTl9ERUZBVUxUID0gMCwg
WG1TRUxFQ1RJT05fSU5DUkVNRU5UQUwsCiAgICAgICBYbVNFTEVDVElPTl9QRVJTSVNULCBYbVNF
TEVDVElPTl9TTkFQU0hPVCwKICAgICAgIFhtU0VMRUNUSU9OX1RSQU5TQUNUIH07CgplbnVtIHsg
WG1DT05WRVJUSU5HX05PTkUgPSAwLCAKICAgICAgIFhtQ09OVkVSVElOR19TQU1FID0gMSwgCiAg
ICAgICBYbUNPTlZFUlRJTkdfVFJBTlNBQ1QgPSAyLAogICAgICAgWG1DT05WRVJUSU5HX1BBUlRJ
QUwgPSA0IH07CgplbnVtIHsgWG1DT05WRVJUX0RFRkFVTFQgPSAwLCBYbUNPTlZFUlRfTU9SRSwg
CiAgICAgICBYbUNPTlZFUlRfTUVSR0UsIFhtQ09OVkVSVF9SRUZVU0UsIFhtQ09OVkVSVF9ET05F
IH07CgogCgp0eXBlZGVmIHN0cnVjdCB7CglpbnQJCXJlYXNvbjsKCVhFdmVudAkJKmV2ZW50OwoJ
QXRvbQkJc2VsZWN0aW9uOwoJQXRvbQkJdGFyZ2V0OwoJWHRQb2ludGVyCXNvdXJjZV9kYXRhOwoJ
WHRQb2ludGVyCWxvY2F0aW9uX2RhdGE7CglpbnQJCWZsYWdzOwoJWHRQb2ludGVyCXBhcm07Cglp
bnQJCXBhcm1fZm9ybWF0OwoJdW5zaWduZWQgbG9uZwlwYXJtX2xlbmd0aDsKCUF0b20JCXBhcm1f
dHlwZTsKCWludAkJc3RhdHVzOwoJWHRQb2ludGVyCXZhbHVlOwoJQXRvbQkJdHlwZTsKCWludAkJ
Zm9ybWF0OwoJdW5zaWduZWQgbG9uZwlsZW5ndGg7Cn0gWG1Db252ZXJ0Q2FsbGJhY2tTdHJ1Y3Q7
Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQJCXJlYXNvbjsKICAJWEV2ZW50CQkqZXZlbnQ7CglBdG9t
CQlzZWxlY3Rpb247CglYdEVudW0JCW9wZXJhdGlvbjsJCglpbnQJCWZsYWdzOwoJWHRQb2ludGVy
CXRyYW5zZmVyX2lkOwoJWHRQb2ludGVyCWRlc3RpbmF0aW9uX2RhdGE7CglYdFBvaW50ZXIJbG9j
YXRpb25fZGF0YTsKCVRpbWUJCXRpbWU7Cn0gWG1EZXN0aW5hdGlvbkNhbGxiYWNrU3RydWN0OwoK
dHlwZWRlZiBzdHJ1Y3QgewoJaW50CQlyZWFzb247CiAgCVhFdmVudAkJKmV2ZW50OwoJQXRvbQkJ
c2VsZWN0aW9uOwoJQXRvbQkJdGFyZ2V0OwoJQXRvbQkJdHlwZTsKCVh0UG9pbnRlcgl0cmFuc2Zl
cl9pZDsKCWludAkJZmxhZ3M7CglpbnQJCXJlbWFpbmluZzsKCVh0UG9pbnRlcgl2YWx1ZTsKCXVu
c2lnbmVkIGxvbmcJbGVuZ3RoOwoJaW50CQlmb3JtYXQ7Cn0gWG1TZWxlY3Rpb25DYWxsYmFja1N0
cnVjdDsKCnR5cGVkZWYgc3RydWN0IHsKCWludAkJcmVhc29uOwogIAlYRXZlbnQJCSpldmVudDsK
CUF0b20JCXNlbGVjdGlvbjsKCVh0UG9pbnRlcgl0cmFuc2Zlcl9pZDsKCVhtVHJhbnNmZXJTdGF0
dXMJc3RhdHVzOwoJWHRQb2ludGVyCWNsaWVudF9kYXRhOwp9IFhtVHJhbnNmZXJEb25lQ2FsbGJh
Y2tTdHJ1Y3Q7Cgp0eXBlZGVmIHZvaWQgKCpYbVNlbGVjdGlvbkZpbmlzaGVkUHJvYykoV2lkZ2V0
LCBYdEVudW0sCgkJCQkJWG1UcmFuc2ZlckRvbmVDYWxsYmFja1N0cnVjdCopOwoKdm9pZCBYbVRy
YW5zZmVyRG9uZShYdFBvaW50ZXIsIFhtVHJhbnNmZXJTdGF0dXMpOwp2b2lkIFhtVHJhbnNmZXJW
YWx1ZShYdFBvaW50ZXIsIEF0b20sIFh0Q2FsbGJhY2tQcm9jLAoJCSAgICAgWHRQb2ludGVyLAlU
aW1lKTsKdm9pZCBYbVRyYW5zZmVyU2V0UGFyYW1ldGVycyhYdFBvaW50ZXIsIFh0UG9pbnRlciwg
aW50LAl1bnNpZ25lZCBsb25nLCBBdG9tKTsKdm9pZCBYbVRyYW5zZmVyU3RhcnRSZXF1ZXN0KFh0
UG9pbnRlcik7CnZvaWQgWG1UcmFuc2ZlclNlbmRSZXF1ZXN0KFh0UG9pbnRlciwgVGltZSk7CgoK
fSAgIAoKCgojIDM5ICIvdXNyL2R0L2luY2x1ZGUvWG0vWG0uaCIgMgoKIyAxICIvdXNyL2R0L2lu
Y2x1ZGUvWG0vUHJpbWl0aXZlLmgiIDEKIAogCgoKCgoKCiAKCgoKCgojIDEgIi91c3IvZHQvaW5j
bHVkZS9YbS9YbS5oIiAxCiAKCgoKCgogCiAKCgoKCgoKCgoKCiMgMzQ4MCAiL3Vzci9kdC9pbmNs
dWRlL1htL1htLmgiCgogIAojIDE1ICIvdXNyL2R0L2luY2x1ZGUvWG0vUHJpbWl0aXZlLmgiIDIK
CgoKZXh0ZXJuICJDIiB7CgoKCgoKCmV4dGVybiAgV2lkZ2V0Q2xhc3MgeG1QcmltaXRpdmVXaWRn
ZXRDbGFzczsKCnR5cGVkZWYgc3RydWN0IF9YbVByaW1pdGl2ZUNsYXNzUmVjICogWG1QcmltaXRp
dmVXaWRnZXRDbGFzczsKdHlwZWRlZiBzdHJ1Y3QgX1htUHJpbWl0aXZlUmVjICAgICAgKiBYbVBy
aW1pdGl2ZVdpZGdldDsKCgogCgoKIAoKCgp9ICAgCgoKCiAKIyA0MCAiL3Vzci9kdC9pbmNsdWRl
L1htL1htLmgiIDIKCiMgMSAiL3Vzci9kdC9pbmNsdWRlL1htL01hbmFnZXIuaCIgMQogCiAKCgoK
CgoKIAoKCgoKCiMgMSAiL3Vzci9kdC9pbmNsdWRlL1htL1htLmgiIDEKIAoKCgoKCiAKIAoKCgoK
CgoKCgoKIyAzNDgwICIvdXNyL2R0L2luY2x1ZGUvWG0vWG0uaCIKCiAgCiMgMTUgIi91c3IvZHQv
aW5jbHVkZS9YbS9NYW5hZ2VyLmgiIDIKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCmV4dGVybiAgV2lk
Z2V0Q2xhc3MgeG1NYW5hZ2VyV2lkZ2V0Q2xhc3M7Cgp0eXBlZGVmIHN0cnVjdCBfWG1NYW5hZ2Vy
Q2xhc3NSZWMgKiBYbU1hbmFnZXJXaWRnZXRDbGFzczsKdHlwZWRlZiBzdHJ1Y3QgX1htTWFuYWdl
clJlYyAgICAgICogWG1NYW5hZ2VyV2lkZ2V0OwoKCiAKCgogCgoKCn0gICAKCgoKIAojIDQxICIv
dXNyL2R0L2luY2x1ZGUvWG0vWG0uaCIgMgoKIyAxICIvdXNyL2R0L2luY2x1ZGUvWG0vR2FkZ2V0
LmgiIDEKIAogCgoKCgoKCiAKCgoKCgojIDEgIi91c3IvZHQvaW5jbHVkZS9YbS9YbS5oIiAxCiAK
CgoKCgogCiAKCgoKCgoKCgoKCiMgMzQ4MCAiL3Vzci9kdC9pbmNsdWRlL1htL1htLmgiCgogIAoj
IDE1ICIvdXNyL2R0L2luY2x1ZGUvWG0vR2FkZ2V0LmgiIDIKCgoKZXh0ZXJuICJDIiB7CgoKCgoK
CmV4dGVybiAgV2lkZ2V0Q2xhc3MgeG1HYWRnZXRDbGFzczsKCnR5cGVkZWYgc3RydWN0IF9YbUdh
ZGdldENsYXNzUmVjICogWG1HYWRnZXRDbGFzczsKdHlwZWRlZiBzdHJ1Y3QgX1htR2FkZ2V0UmVj
ICAgICAgKiBYbUdhZGdldDsKCgogCgoKIAoKCgp9ICAgCgoKCiAKIyA0MiAiL3Vzci9kdC9pbmNs
dWRlL1htL1htLmgiIDIKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgoKZXh0ZXJuICBpbnQgeG1Vc2VW
ZXJzaW9uOwoKCiAKCgoKIAoKCgogCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuICAgY2hhciAgICBf
WG1TREVGQVVMVF9GT05UW107ICAgICAgICAgICAgIApleHRlcm4gICBjaGFyICAgIF9YbVNERUZB
VUxUX0JBQ0tHUk9VTkRbXTsgICAgICAgCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIJWG1EaXJlY3Rp
b247CgoKCgoKCgoKCgoKCgplbnVtIHsKICBYbVJJR0hUX1RPX0xFRlRfVE9QX1RPX0JPVFRPTSA9
IAogICAgICAweDAxICB8IDB4MDQgIHwgMHg0MCAsCiAgWG1MRUZUX1RPX1JJR0hUX1RPUF9UT19C
T1RUT00gPSAKICAgICAgMHgwMiAgfCAweDA0ICB8IDB4NDAgLAogIFhtUklHSFRfVE9fTEVGVF9C
T1RUT01fVE9fVE9QID0gCiAgICAgIDB4MDEgIHwgMHgwOCAgfCAweDQwICwKICBYbUxFRlRfVE9f
UklHSFRfQk9UVE9NX1RPX1RPUCA9IAogICAgICAweDAyICB8IDB4MDggIHwgMHg0MCAsCiAgWG1U
T1BfVE9fQk9UVE9NX1JJR0hUX1RPX0xFRlQgPSAKICAgICAgMHgwMSAgfCAweDA0ICB8IDB4ODAg
LAogIFhtVE9QX1RPX0JPVFRPTV9MRUZUX1RPX1JJR0hUID0gCiAgICAgIDB4MDIgIHwgMHgwNCAg
fCAweDgwICwKICBYbUJPVFRPTV9UT19UT1BfUklHSFRfVE9fTEVGVCA9IAogICAgICAweDAxICB8
IDB4MDggIHwgMHg4MCAsCiAgWG1CT1RUT01fVE9fVE9QX0xFRlRfVE9fUklHSFQgPSAKICAgICAg
MHgwMiAgfCAweDA4ICB8IDB4ODAgLAogIFhtVE9QX1RPX0JPVFRPTSA9IAogICAgICAweDA0ICB8
IDB4MDMgIHwgMHhjMCAsCiAgWG1CT1RUT01fVE9fVE9QID0gCiAgICAgIDB4MDggIHwgMHgwMyAg
fCAweGMwICwKICBYbVJJR0hUX1RPX0xFRlQgPSAKICAgICAgMHgwMSAgfCAweDBjICB8IDB4YzAg
LAogIFhtTEVGVF9UT19SSUdIVCA9IAogICAgICAweDAyICB8IDB4MGMgIHwgMHhjMCAsCiAgWG1E
RUZBVUxUX0RJUkVDVElPTiA9IDB4ZmYKICB9OwoKCmV4dGVybiBCb29sZWFuIFhtRGlyZWN0aW9u
TWF0Y2goWG1EaXJlY3Rpb24gZDEsIAoJCQkJWG1EaXJlY3Rpb24gZDIpOwpleHRlcm4gQm9vbGVh
biBYbURpcmVjdGlvbk1hdGNoUGFydGlhbChYbURpcmVjdGlvbiBkMSwgCgkJCQkgICAgICAgWG1E
aXJlY3Rpb24gZDIsIAoJCQkJICAgICAgIFhtRGlyZWN0aW9uIGRtYXNrKTsKCiAKCgoKCgp0eXBl
ZGVmIGVudW17IFhtRk9OVF9JU19GT05ULCBYbUZPTlRfSVNfRk9OVFNFVAoKCgoJICAgICAgfSBY
bUZvbnRUeXBlOwoKZW51bSB7IFhtU1RSSU5HX0RJUkVDVElPTl9MX1RPX1IsCiAgICAgICBYbVNU
UklOR19ESVJFQ1RJT05fUl9UT19MLAogICAgICAgWG1TVFJJTkdfRElSRUNUSU9OX1VOU0VUID0g
MywKICAgICAgIFhtU1RSSU5HX0RJUkVDVElPTl9ERUZBVUxUID0gWG1ERUZBVUxUX0RJUkVDVElP
TgogICAgICAgfTsKCnR5cGVkZWYgdW5zaWduZWQgY2hhciAJWG1TdHJpbmdEaXJlY3Rpb247CnR5
cGVkZWYgdW5pb24gX19YbVN0cmluZ1JlYwkqWG1TdHJpbmc7CQkgCnR5cGVkZWYgWG1TdHJpbmcg
KglYbVN0cmluZ1RhYmxlOwkJIAp0eXBlZGVmIGNoYXIgKgkJWG1TdHJpbmdDaGFyU2V0OwkgCnR5
cGVkZWYgY2hhciAqCQlYbVN0cmluZ1RhZzsJCSAKdHlwZWRlZiB1bnNpZ25lZCBjaGFyCVhtU3Ry
aW5nQ29tcG9uZW50VHlwZTsJIAoKdHlwZWRlZiBzdHJ1Y3QgX19YbVJlbmRpdGlvblJlYwkgICAg
ICoqWG1Gb250TGlzdEVudHJ5OyAgCnR5cGVkZWYgc3RydWN0IF9fWG1SZW5kZXJUYWJsZVJlYyAg
ICAqKlhtRm9udExpc3Q7ICAgICAgIAp0eXBlZGVmIHN0cnVjdCBfWG1Gb250TGlzdENvbnRleHRS
ZWMgKlhtRm9udENvbnRleHQ7ICAgIAoKdHlwZWRlZiBzdHJ1Y3QgX19YbVN0cmluZ0NvbnRleHRS
ZWMgKl9YbVN0cmluZ0NvbnRleHQ7ICAKdHlwZWRlZiB1bmlvbiBfX1htU3RyaW5nUmVjICAgICAg
ICAqX1htU3RyaW5nOyAgICAgICAgIAp0eXBlZGVmIHN0cnVjdCBfX1htU3RyaW5nQ29udGV4dFJl
YyAqWG1TdHJpbmdDb250ZXh0OyAgIAoKZW51bXsJWG1TVFJJTkdfQ09NUE9ORU5UX1VOS05PV04s
CSAgWG1TVFJJTkdfQ09NUE9ORU5UX0NIQVJTRVQsCglYbVNUUklOR19DT01QT05FTlRfVEVYVCwJ
ICBYbVNUUklOR19DT01QT05FTlRfRElSRUNUSU9OLAogICAgICAgIFhtU1RSSU5HX0NPTVBPTkVO
VF9TRVBBUkFUT1IsICAgICBYbVNUUklOR19DT01QT05FTlRfTE9DQUxFX1RFWFQsCglYbVNUUklO
R19DT01QT05FTlRfTE9DQUxFLCAgICAgICAgWG1TVFJJTkdfQ09NUE9ORU5UX1dJREVDSEFSX1RF
WFQsCglYbVNUUklOR19DT01QT05FTlRfTEFZT1VUX1BVU0gsICAgWG1TVFJJTkdfQ09NUE9ORU5U
X0xBWU9VVF9QT1AsCglYbVNUUklOR19DT01QT05FTlRfUkVORElUSU9OX0JFR0lOLCBYbVNUUklO
R19DT01QT05FTlRfUkVORElUSU9OX0VORCwKCVhtU1RSSU5HX0NPTVBPTkVOVF9UQUIKCSAKCX0g
OwoKCgoKCgoKCgkJCSAKCgp0eXBlZGVmIGVudW0gewogICAgWG1DSEFSU0VUX1RFWFQsCQkJWG1N
VUxUSUJZVEVfVEVYVCwKICAgIFhtV0lERUNIQVJfVEVYVCwgICAgICAgICAgICAgICAgICAgIFht
Tk9fVEVYVAogICAgfSBYbVRleHRUeXBlOwoKdHlwZWRlZiBlbnVtIHsKICAgIFhtT1VUUFVUX0FM
TCwJCQlYbU9VVFBVVF9CRVRXRUVOLAogICAgWG1PVVRQVVRfQkVHSU5OSU5HLAkJCVhtT1VUUFVU
X0VORCwKICAgIFhtT1VUUFVUX0JPVEgKICAgIH0gWG1QYXJzZU1vZGVsOwoKdHlwZWRlZiB1bnNp
Z25lZCBjaGFyIFhtSW5jbHVkZVN0YXR1czsKZW51bSB7CiAgWG1JTlNFUlQsCVhtVEVSTUlOQVRF
LAlYbUlOVk9LRQogIH07CgogCgoKCnR5cGVkZWYgZW51bSB7CiAgICBYbVNUWUxFX1NUUklORyA9
IFhTdHJpbmdTdHlsZSwKICAgIFhtU1RZTEVfQ09NUE9VTkRfVEVYVCA9IFhDb21wb3VuZFRleHRT
dHlsZSwKICAgIFhtU1RZTEVfVEVYVCA9IFhUZXh0U3R5bGUsCiAgICBYbVNUWUxFX1NUQU5EQVJE
X0lDQ19URVhUID0gWFN0ZElDQ1RleHRTdHlsZSwKICAgIFhtU1RZTEVfTE9DQUxFID0gMzIsCiAg
ICBYbVNUWUxFX0NPTVBPVU5EX1NUUklORwogICAgfSBYbUlDQ0VuY29kaW5nU3R5bGU7CgogCgoK
CgoKCnR5cGVkZWYgc3RydWN0IF9fWG1QYXJzZU1hcHBpbmdSZWMgKlhtUGFyc2VNYXBwaW5nOwkg
CnR5cGVkZWYgWG1QYXJzZU1hcHBpbmcgICAgICAgICAgICAgKlhtUGFyc2VUYWJsZTsKCiAKCgoK
dHlwZWRlZiBYbUluY2x1ZGVTdGF0dXMgKCpYbVBhcnNlUHJvYykgKFh0UG9pbnRlciAgICAgKmlu
X291dCwKCQkJCQlYdFBvaW50ZXIgICAgICB0ZXh0X2VuZCwKCQkJCQlYbVRleHRUeXBlICAgICB0
eXBlLAoJCQkJCVhtU3RyaW5nVGFnICAgIGxvY2FsZV90YWcsCgkJCQkJWG1QYXJzZU1hcHBpbmcg
ZW50cnksCgkJCQkJaW50ICAgICAgICAgICAgcGF0dGVybl9sZW5ndGgsCgkJCQkJWG1TdHJpbmcg
ICAgICAqc3RyX2luY2x1ZGUsCgkJCQkJWHRQb2ludGVyICAgICAgY2FsbF9kYXRhKTsKCgogCgoK
CgoKdHlwZWRlZiBlbnVtIHsgCiAgWG1BQlNPTFVURSwJCVhtUkVMQVRJVkUKICB9IFhtT2Zmc2V0
TW9kZWw7Cgp0eXBlZGVmIHN0cnVjdCBfX1htVGFiUmVjCSpYbVRhYjsJCSAgIAp0eXBlZGVmIHN0
cnVjdCBfX1htVGFiTGlzdFJlYwkqWG1UYWJMaXN0OwkgICAKCgogCgoKCgoKIAp0eXBlZGVmIHN0
cnVjdCBfX1htUmVuZGl0aW9uUmVjCQkqKlhtUmVuZGl0aW9uOyAgICAKdHlwZWRlZiBzdHJ1Y3Qg
X19YbVJlbmRlclRhYmxlUmVjCSoqWG1SZW5kZXJUYWJsZTsgIAoKdHlwZWRlZiBlbnVtIHsgCiAg
WG1TS0lQLAkJWG1NRVJHRV9SRVBMQUNFLAogIFhtTUVSR0VfT0xELAkJWG1NRVJHRV9ORVcsIAog
IFhtRFVQTElDQVRFCSAKICB9IFhtTWVyZ2VNb2RlOyAKCgoKCgoKCgoKZW51bSB7IFhtVU5TUEVD
SUZJRURfTE9BRF9NT0RFTCwgWG1MT0FEX0RFRkVSUkVELCBYbUxPQURfSU1NRURJQVRFIH07IAoK
CgoKCgoKCgoKCgoKCgoKIAoKCgogCgplbnVtewlYbUNIQU5HRV9BTEwsCQkJWG1DSEFOR0VfTk9O
RSwKCVhtQ0hBTkdFX1dJRFRILAkJCVhtQ0hBTkdFX0hFSUdIVAoJfSA7CgogCgplbnVtewlYbVBJ
WEVMUywJCQlYbTEwMFRIX01JTExJTUVURVJTLAoJWG0xMDAwVEhfSU5DSEVTLAkJWG0xMDBUSF9Q
T0lOVFMsCglYbTEwMFRIX0ZPTlRfVU5JVFMsCQlYbUlOQ0hFUywKICAgICAgICBYbUNFTlRJTUVU
RVJTLCAgICAgICAgICAgICAgICAgIFhtTUlMTElNRVRFUlMsCiAgICAgICAgWG1QT0lOVFMsICAg
ICAgICAgICAgICAgICAgICAgICBYbUZPTlRfVU5JVFMKCX0gOwoKIAoKZW51bXsJWG1ERVNUUk9Z
LAkJCVhtVU5NQVAsCglYbURPX05PVEhJTkcKCX0gOwplbnVtewlYbUVYUExJQ0lULAkJCVhtUE9J
TlRFUgoJfSA7CiAKCgoKZW51bXsJWG1OT05FLAkJCQlYbVRBQl9HUk9VUCwKCVhtU1RJQ0tZX1RB
Ql9HUk9VUCwJCVhtRVhDTFVTSVZFX1RBQl9HUk9VUAoJfSA7CgoKCiAKCgoKZW51bXsJIAkJCVht
QkVMTCA9IDEKCX0gOwoKIAoKCgplbnVtIHsKICAgICAgICBYbVBFUl9TSEVMTCwJCQlYbVBFUl9X
SURHRVQsCiAgICAgICAgWG1JTkhFUklUX1BPTElDWSA9IDI1NQoJfSA7Cgp0eXBlZGVmIHVuc2ln
bmVkIGNoYXIgWG1JbnB1dFBvbGljeTsKCiAKCgoKZW51bXsJWG1OT19PUklFTlRBVElPTiwJCVht
VkVSVElDQUwsCglYbUhPUklaT05UQUwKCX0gOwplbnVtewlYbVdPUktfQVJFQSwJCQlYbU1FTlVf
QkFSLAoJWG1NRU5VX1BVTExET1dOLAkJWG1NRU5VX1BPUFVQLAoJWG1NRU5VX09QVElPTgoJfSA7
CmVudW17CVhtTk9fUEFDS0lORywJCQlYbVBBQ0tfVElHSFQsCglYbVBBQ0tfQ09MVU1OLAkJCVht
UEFDS19OT05FCgl9IDsKZW51bXsgCglYbUFMSUdOTUVOVF9DT05URU5UU19UT1AgPSAzLAoJWG1B
TElHTk1FTlRfQ09OVEVOVFNfQk9UVE9NCgl9IDsKZW51bXsJWG1URUFSX09GRl9FTkFCTEVELAkJ
WG1URUFSX09GRl9ESVNBQkxFRAoJfSA7CmVudW17CVhtVU5QT1NULAkJIAlYbVVOUE9TVF9BTkRf
UkVQTEFZCgl9IDsKZW51bXsgICBYbUxBU1RfUE9TSVRJT04gPSAtMSwgICAgICAgICAgIFhtRklS
U1RfUE9TSVRJT04KCX0gOwplbnVtewlYbVBPUFVQX0RJU0FCTEVEID0gMCwJWG1QT1BVUF9LRVlC
T0FSRCA9IDEsCglYbVBPUFVQX0FVVE9NQVRJQywJWG1QT1BVUF9BVVRPTUFUSUNfUkVDVVJTSVZF
IH07CgogCgoKCmVudW17CVhtQ09NQk9fQk9YPTAsCQlYbURST1BfRE9XTl9DT01CT19CT1gsCglY
bURST1BfRE9XTl9MSVNUCgl9IDsKCmVudW17CSAgWG1RVUlDS19OQVZJR0FURSA9IDEsIFhtSU5W
QUxJRF9NQVRDSF9CRUhBVklPUgoJfSA7CgplbnVteyAgIFhtWkVST19CQVNFRCwJCVhtT05FX0JB
U0VECiAgICAgICAgfSA7CgoKCiAKCgoKZW51bXsJWG1BTElHTk1FTlRfQkVHSU5OSU5HLAkJWG1B
TElHTk1FTlRfQ0VOVEVSLAoJWG1BTElHTk1FTlRfRU5ECgl9IDsKZW51bXsgICBYbUFMSUdOTUVO
VF9CQVNFTElORV9UT1AsICAgICAKCVhtQUxJR05NRU5UX0JBU0VMSU5FX0JPVFRPTSA9IDIsIFht
QUxJR05NRU5UX1dJREdFVF9UT1AsCglYbUFMSUdOTUVOVF9XSURHRVRfQk9UVE9NCiAgIAl9IDsK
IAoKCgoKIAoKCgplbnVtewlYbUZSQU1FX0dFTkVSSUNfQ0hJTEQsICAgICAgICAgIFhtRlJBTUVf
V09SS0FSRUFfQ0hJTEQsCiAgICAgICAgWG1GUkFNRV9USVRMRV9DSElMRAoJfSA7CiAKCgoKZW51
bXsJWG1OX09GX01BTlkgPSAxLAkJWG1PTkVfT0ZfTUFOWSwKCVhtT05FX09GX01BTllfUk9VTkQs
CQlYbU9ORV9PRl9NQU5ZX0RJQU1PTkQKCX0gOwogCgoKCmVudW17CVhtQVRUQUNIX05PTkUsCQkJ
WG1BVFRBQ0hfRk9STSwKCVhtQVRUQUNIX09QUE9TSVRFX0ZPUk0sCQlYbUFUVEFDSF9XSURHRVQs
CglYbUFUVEFDSF9PUFBPU0lURV9XSURHRVQsCVhtQVRUQUNIX1BPU0lUSU9OLAoJWG1BVFRBQ0hf
U0VMRgoJfSA7CmVudW17CVhtUkVTSVpFX05PTkUsCQkJWG1SRVNJWkVfR1JPVywKCVhtUkVTSVpF
X0FOWQoJfSA7CgogCgoKCmVudW17CVhtQ1JfTk9ORSwJCQlYbUNSX0hFTFAsCglYbUNSX1ZBTFVF
X0NIQU5HRUQsCQlYbUNSX0lOQ1JFTUVOVCwKCVhtQ1JfREVDUkVNRU5ULAkJCVhtQ1JfUEFHRV9J
TkNSRU1FTlQsCglYbUNSX1BBR0VfREVDUkVNRU5ULAkJWG1DUl9UT19UT1AsCglYbUNSX1RPX0JP
VFRPTSwJCQlYbUNSX0RSQUcsCglYbUNSX0FDVElWQVRFLAkJCVhtQ1JfQVJNLAoJWG1DUl9ESVNB
Uk0sCQkJWG1DUl9NQVAgPSAxNiwKCVhtQ1JfVU5NQVAsCQkJWG1DUl9GT0NVUywKCVhtQ1JfTE9T
SU5HX0ZPQ1VTLAkJWG1DUl9NT0RJRllJTkdfVEVYVF9WQUxVRSwKCVhtQ1JfTU9WSU5HX0lOU0VS
VF9DVVJTT1IsCVhtQ1JfRVhFQ1VURSwKCVhtQ1JfU0lOR0xFX1NFTEVDVCwJCVhtQ1JfTVVMVElQ
TEVfU0VMRUNULAoJWG1DUl9FWFRFTkRFRF9TRUxFQ1QsCQlYbUNSX0JST1dTRV9TRUxFQ1QsCglY
bUNSX0RFRkFVTFRfQUNUSU9OLAkJWG1DUl9DTElQQk9BUkRfREFUQV9SRVFVRVNULAoJWG1DUl9D
TElQQk9BUkRfREFUQV9ERUxFVEUsCVhtQ1JfQ0FTQ0FESU5HLAoJWG1DUl9PSywJCQlYbUNSX0NB
TkNFTCwKCVhtQ1JfQVBQTFkgPSAzNCwJCVhtQ1JfTk9fTUFUQ0gsCglYbUNSX0NPTU1BTkRfRU5U
RVJFRCwJCVhtQ1JfQ09NTUFORF9DSEFOR0VELAoJWG1DUl9FWFBPU0UsCQkJWG1DUl9SRVNJWkUs
CglYbUNSX0lOUFVULAkJCVhtQ1JfR0FJTl9QUklNQVJZLAoJWG1DUl9MT1NFX1BSSU1BUlksCQlY
bUNSX0NSRUFURSwKCVhtQ1JfVEVBUl9PRkZfQUNUSVZBVEUsCQlYbUNSX1RFQVJfT0ZGX0RFQUNU
SVZBVEUsCglYbUNSX09CU0NVUkVEX1RSQVZFUlNBTCwJWG1DUl9GT0NVU19NT1ZFRCwKCVhtQ1Jf
UkVQT1NUID0gNTQsCQlYbUNSX0NPTExBUFNFRCwKCVhtQ1JfRVhQQU5ERUQsCQkJWG1DUl9TRUxF
Q1QsCglYbUNSX0RSQUdfU1RBUlQsCQlYbUNSX05PX0ZPTlQsCglYbUNSX05PX1JFTkRJVElPTiwJ
CVhtQ1JfUE9TVCwKCVhtQ1JfU1BJTl9ORVhULAkJCVhtQ1JfU1BJTl9QUklPUiwKCVhtQ1JfU1BJ
Tl9GSVJTVCwJCVhtQ1JfU1BJTl9MQVNULAoJWG1DUl9QQUdFX1NDUk9MTEVSX0lOQ1JFTUVOVCwg
ICBYbUNSX1BBR0VfU0NST0xMRVJfREVDUkVNRU5ULAoJWG1DUl9NQUpPUl9UQUIsICAgICAgICAg
ICAgICAgICBYbUNSX01JTk9SX1RBQiwKCVhtQ1JfU1RBUlRfSk9CLAkJCVhtQ1JfRU5EX0pPQiwK
CVhtQ1JfUEFHRV9TRVRVUCwJCVhtQ1JfUERNX05PTkUsCglYbUNSX1BETV9VUCwJCQlYbUNSX1BE
TV9TVEFSVF9FUlJPUiwKCVhtQ1JfUERNX1NUQVJUX1ZYQVVUSCwJCVhtQ1JfUERNX1NUQVJUX1BY
QVVUSCwgCglYbUNSX1BETV9PSywJCQlYbUNSX1BETV9DQU5DRUwsCglYbUNSX1BETV9FWElUX0VS
Uk9SLAkJWG1DUl9ISUdITElHSFRfMV9TRUxFQ1RFRCwKICAgICAgICBYbUNSX0hJR0hMSUdIVF8y
X1NFTEVDVEVELAlYbUNSX0hJR0hMSUdIVF9QUklNQVJZX1NFTEVDVEVELAogICAgICAgIFhtQ1Jf
SElHSExJR0hUX1NFQ09OREFSWV9TRUxFQ1RFRCwKCVhtQ1JfUFJPVE9DT0xTID0gNjY2NiAgCgl9
IDsKCiAKCgoKZW51bXsJIAkJWG1FQUNIX1NJREUgPSAxLAoJWG1NQVhfU0lERSwgICAgICAgICAg
ICAgWG1NSU5fU0lERQoJfSA7CgoKIAoKCgplbnVtewlYbVNMSURFUiwJCVhtVEhFUk1PTUVURVJ9
IDsKCgogCgoKCmVudW17CVhtQkFDS0dST1VORF9DT0xPUiwgICAgIFhtRk9SRUdST1VORF9DT0xP
UiwgCiAgICAgICAgWG1UUk9VR0hfQ09MT1IsICAgICAgICAgWG1TSEFET1dFRF9CQUNLR1JPVU5E
fSA7CgoKIAoKCgplbnVtewkgICAgICAgICAgICBYbUVUQ0hFRF9MSU5FID0gMSwgCiAgICAgICAg
WG1USFVNQl9NQVJLLCAgICAgWG1ST1VORF9NQVJLIH0gOwoKCiAKCgoKZW51bXsJIAkJWG1ORUFS
X1NMSURFUiA9IDEsCglYbU5FQVJfQk9SREVSCgl9IDsKCgogCgoKCiAKZW51bXsJICAKICAgICAg
ICBYbUhPUl9TQ1JPTExCQVIgPSAyLCAKCVhtVkVSVF9TQ1JPTExCQVIsCglYbUNPTU1BTkRfV0lO
RE9XLCAKICAgICAgICAgCiAgICAgICAgWG1NRVNTQUdFX1dJTkRPVyA9IDYsCiAgICAgICAgWG1T
Q1JPTExfSE9SLCBYbVNDUk9MTF9WRVJULCBYbU5PX1NDUk9MTCwKCVhtQ0xJUF9XSU5ET1csIFht
R0VORVJJQ19DSElMRAoJfSA7CgogCgoKCmVudW17CVhtQVVUT19EUkFHX0VOQUJMRUQsCQlYbUFV
VE9fRFJBR19ESVNBQkxFRAoJfSA7CgogCgoKCmVudW17CVhtRU5BQkxFX1dBUlBfT04sCQlYbUVO
QUJMRV9XQVJQX09GRgoJfSA7CgogCgoKCmVudW17ICAgWG1PRkYsCQkJCVhtQlVUVE9OMl9BREpV
U1QsCglYbUJVVFRPTjJfVFJBTlNGRVIgfTsKCiAKCgoKZW51bXsgICBYbUFVVE9fVU5TRVQsICAg
ICAgICAgICAgICAgICAgIFhtQVVUT19CRUdJTiwKICAgICAgICBYbUFVVE9fTU9USU9OLCAgICAg
ICAgICAgICAgICAgIFhtQVVUT19DQU5DRUwsCiAgICAgICAgWG1BVVRPX05PX0NIQU5HRSwgICAg
ICAgICAgICAgICBYbUFVVE9fQ0hBTkdFCiAgICAgICAgfTsKCiAKCgoKdHlwZWRlZiBzdHJ1Y3QK
ewogICAgaW50ICAgICByZWFzb247CiAgICBYRXZlbnQgICpldmVudDsKfSBYbUFueUNhbGxiYWNr
U3RydWN0OwoKdHlwZWRlZiBzdHJ1Y3QKewogICAgaW50ICAgICByZWFzb247CiAgICBYRXZlbnQg
ICpldmVudDsKICAgIGludAkgICAgY2xpY2tfY291bnQ7Cn0gWG1BcnJvd0J1dHRvbkNhbGxiYWNr
U3RydWN0OwoKdHlwZWRlZiBzdHJ1Y3QgX1htRHJhZ1N0YXJ0Q2FsbGJhY2tTdHJ1Y3QgewogICAg
aW50ICAgICAgICAgICAgICAgICByZWFzb247CiAgICBYRXZlbnQgICAgICAgICAgICAgICpldmVu
dDsKICAgIFdpZGdldCAgICAgICAgICAgICAgd2lkZ2V0OwogICAgQm9vbGVhbiAgICAgICAgICAg
ICBkb2l0Owp9IFhtRHJhZ1N0YXJ0Q2FsbGJhY2tTdHJ1Y3QsICpYbURyYWdTdGFydENhbGxiYWNr
OwoKdHlwZWRlZiBzdHJ1Y3QKewogICAgaW50ICAgICByZWFzb247CiAgICBYRXZlbnQgICpldmVu
dDsKICAgIFhtU3RyaW5nIGl0ZW1fb3JfdGV4dDsKICAgIGludCAgICAgaXRlbV9wb3NpdGlvbjsK
fSBYbUNvbWJvQm94Q2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgICBpbnQgICAg
IHJlYXNvbjsKICAgIFhFdmVudCAgKmV2ZW50OwogICAgV2luZG93ICB3aW5kb3c7Cn0gWG1EcmF3
aW5nQXJlYUNhbGxiYWNrU3RydWN0OwoKdHlwZWRlZiBzdHJ1Y3QKewogICAgaW50ICAgICByZWFz
b247CiAgICBYRXZlbnQgICpldmVudDsKICAgIFdpbmRvdyAgd2luZG93OwogICAgaW50CSAgICBj
bGlja19jb3VudDsKfSBYbURyYXduQnV0dG9uQ2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVmIHN0cnVj
dAp7CiAgICBpbnQgICAgIHJlYXNvbjsKICAgIFhFdmVudCAgKmV2ZW50OwogICAgaW50CSAgICBj
bGlja19jb3VudDsKfSBYbVB1c2hCdXR0b25DYWxsYmFja1N0cnVjdDsKCnR5cGVkZWYgc3RydWN0
CnsKICAgIGludCAgICAgcmVhc29uOwogICAgWEV2ZW50ICAqZXZlbnQ7CiAgICBXaWRnZXQgIHdp
ZGdldDsKICAgIGNoYXIgICAgKmRhdGE7CiAgICBjaGFyICAgICpjYWxsYmFja3N0cnVjdDsKfSBY
bVJvd0NvbHVtbkNhbGxiYWNrU3RydWN0OwoKdHlwZWRlZiBzdHJ1Y3QKewogICBpbnQgcmVhc29u
OwogICBYRXZlbnQgKiBldmVudDsKICAgaW50IHZhbHVlOwogICBpbnQgcGl4ZWw7Cn0gWG1TY3Jv
bGxCYXJDYWxsYmFja1N0cnVjdDsKCnR5cGVkZWYgc3RydWN0CnsKICAgaW50IHJlYXNvbjsKICAg
WEV2ZW50ICogZXZlbnQ7CiAgIGludCBzZXQ7Cn0gWG1Ub2dnbGVCdXR0b25DYWxsYmFja1N0cnVj
dDsKCnR5cGVkZWYgc3RydWN0CnsKICAgaW50IAkgICAgIHJlYXNvbjsKICAgWEV2ZW50ICAgICpl
dmVudDsKICAgWG1TdHJpbmcgIGl0ZW07CiAgIGludCAgICAgICBpdGVtX2xlbmd0aDsKICAgaW50
ICAgICAgIGl0ZW1fcG9zaXRpb247CiAgIFhtU3RyaW5nICAqc2VsZWN0ZWRfaXRlbXM7CiAgIGlu
dCAgICAgICBzZWxlY3RlZF9pdGVtX2NvdW50OwogICBpbnQgICAgICAgKnNlbGVjdGVkX2l0ZW1f
cG9zaXRpb25zOwogICBjaGFyICAgICAgc2VsZWN0aW9uX3R5cGU7CiAgIGNoYXIJICAgICBhdXRv
X3NlbGVjdGlvbl90eXBlOwp9IFhtTGlzdENhbGxiYWNrU3RydWN0OwoKdHlwZWRlZiBzdHJ1Y3QK
ewogICAgaW50IHJlYXNvbjsKICAgIFhFdmVudAkqZXZlbnQ7CiAgICBYbVN0cmluZwl2YWx1ZTsK
ICAgIGludAkJbGVuZ3RoOwp9IFhtU2VsZWN0aW9uQm94Q2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVm
IHN0cnVjdAp7CiAgICBpbnQgcmVhc29uOwogICAgWEV2ZW50CSpldmVudDsKICAgIFhtU3RyaW5n
CXZhbHVlOwogICAgaW50CQlsZW5ndGg7Cn0gWG1Db21tYW5kQ2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBl
ZGVmIHN0cnVjdAp7CiAgICBpbnQgCXJlYXNvbjsKICAgIFhFdmVudAkqZXZlbnQ7CiAgICBYbVN0
cmluZwl2YWx1ZTsKICAgIGludAkJbGVuZ3RoOwogICAgWG1TdHJpbmcJbWFzazsKICAgIGludAkJ
bWFza19sZW5ndGg7CiAgICBYbVN0cmluZwlkaXIgOwogICAgaW50CQlkaXJfbGVuZ3RoIDsKICAg
IFhtU3RyaW5nICAgIHBhdHRlcm4gOwogICAgaW50CQlwYXR0ZXJuX2xlbmd0aCA7Cn0gWG1GaWxl
U2VsZWN0aW9uQm94Q2FsbGJhY2tTdHJ1Y3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgCnsKICAgaW50IHJl
YXNvbjsKICAgWEV2ZW50ICogZXZlbnQ7CiAgIGludCB2YWx1ZTsKfSBYbVNjYWxlQ2FsbGJhY2tT
dHJ1Y3Q7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50ICAgICAgcmVhc29uOwogIFhFdmVudCAgICpl
dmVudDsKICBXaWRnZXQgICBtZW51VG9Qb3N0OwogIEJvb2xlYW4gIHBvc3RJdDsKICBXaWRnZXQg
ICB0YXJnZXQ7Cn0gWG1Qb3B1cEhhbmRsZXJDYWxsYmFja1N0cnVjdDsKCnR5cGVkZWYgc3RydWN0
CnsKICBpbnQgICAgICAgICByZWFzb247CiAgWEV2ZW50ICAgICAgKmV2ZW50OwogIFdpZGdldCAg
ICAgIGl0ZW07CiAgdW5zaWduZWQgY2hhciAgICAgICBuZXdfb3V0bGluZV9zdGF0ZTsKfSBYbUNv
bnRhaW5lck91dGxpbmVDYWxsYmFja1N0cnVjdDsKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgICAg
ICAgICAgICAgcmVhc29uOwogIFhFdmVudCAgICAgICAgICAqZXZlbnQ7CiAgV2lkZ2V0TGlzdCAg
ICAgIHNlbGVjdGVkX2l0ZW1zOwogIGludCAgICAgICAgICAgICBzZWxlY3RlZF9pdGVtX2NvdW50
OwogIHVuc2lnbmVkIGNoYXIgICBhdXRvX3NlbGVjdGlvbl90eXBlOwp9IFhtQ29udGFpbmVyU2Vs
ZWN0Q2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50ICAgICAgICAgcmVhc29u
OwogIFhFdmVudCAgICAgICpldmVudDsKICBpbnQgICAgICAgICBwYWdlX251bWJlcjsKICBXaWRn
ZXQgICAgICBwYWdlX3dpZGdldDsKICBpbnQgICAgICAgICBwcmV2X3BhZ2VfbnVtYmVyOwogIFdp
ZGdldCAgICAgIHByZXZfcGFnZV93aWRnZXQ7Cn0gWG1Ob3RlYm9va0NhbGxiYWNrU3RydWN0OwoK
dHlwZWRlZiBzdHJ1Y3QKewogICAgaW50ICAgICAJCXJlYXNvbjsKICAgIFhFdmVudCAgCQkqZXZl
bnQ7CiAgICBYbVJlbmRpdGlvbgkJcmVuZGl0aW9uOwogICAgY2hhcgkJKmZvbnRfbmFtZTsKICAg
IFhtUmVuZGVyVGFibGUJcmVuZGVyX3RhYmxlOwogICAgWG1TdHJpbmdUYWcJCXRhZzsKfSBYbURp
c3BsYXlDYWxsYmFja1N0cnVjdDsKCiAKIAoKCgoKCgoKCgoKCiAKCgoKZW51bXsJWG1NVUxUSUNM
SUNLX0RJU0NBUkQsCQlYbU1VTFRJQ0xJQ0tfS0VFUAoJfSA7CiAKCgoKZW51bXsJWG1TSEFET1df
SU4gPSA3LAkJWG1TSEFET1dfT1VUCgl9IDsKIAoKCgplbnVtewlYbUFSUk9XX1VQLAkJCVhtQVJS
T1dfRE9XTiwKCVhtQVJST1dfTEVGVCwJCQlYbUFSUk9XX1JJR0hUCgl9IDsKIAoKCgoKZW51bXsJ
WG1OT19MSU5FLAkJCVhtU0lOR0xFX0xJTkUsCglYbURPVUJMRV9MSU5FLAkJCVhtU0lOR0xFX0RB
U0hFRF9MSU5FLAoJWG1ET1VCTEVfREFTSEVEX0xJTkUsCQlYbVNIQURPV19FVENIRURfSU4sCglY
bVNIQURPV19FVENIRURfT1VULAkJWG1TSEFET1dfRVRDSEVEX0lOX0RBU0gsCglYbVNIQURPV19F
VENIRURfT1VUX0RBU0gsCVhtSU5WQUxJRF9TRVBBUkFUT1JfVFlQRQoJfSA7CgplbnVtewlYbVBJ
WE1BUCA9IDEsCQkJWG1TVFJJTkcKCX0gOwoKIAoKCgplbnVtewlYbVdJTkRPVywJCSAgICAgIAoJ
WG1DVVJTT1IgPSAyLAkJICAgICBYbURSQUdfV0lORE9XID0gMwoJfSA7CgogCgoKCmVudW17CVht
TUFYX09OX1RPUCwJCQlYbU1BWF9PTl9CT1RUT00sCglYbU1BWF9PTl9MRUZULAkJCVhtTUFYX09O
X1JJR0hUCgl9IDsKIAoKCgoKCmVudW17CVhtU0lOR0xFX1NFTEVDVCwJCVhtTVVMVElQTEVfU0VM
RUNULAoJWG1FWFRFTkRFRF9TRUxFQ1QsCQlYbUJST1dTRV9TRUxFQ1QKCX0gOwplbnVtewlYbVNU
QVRJQywJCQlYbURZTkFNSUMKCX0gOwplbnVteyBYbU5PUk1BTF9NT0RFLAkJCVhtQUREX01PREUK
ICAgICAgICB9IDsKIAoKCgoKCiAgICAgICAgIAplbnVtIHsgIFhtTk9fQVVUT19TRUxFQ1QsCiAg
ICAgICAgWG1BVVRPX1NFTEVDVAogICAgICAgIH07CgogICAgICAgICAKZW51bSB7ICAgCiAgICAg
ICAgWG1TSU5HTEUgPSAxCiAgICAgICAgfTsKCiAgICAgICAgIAplbnVtIHsgICAKICAgICAgICAg
CiAgICAgICAgWG1BTllfSUNPTiA9IDIKICAgICAgICB9OwoKICAgICAgICAgCmVudW0geyAgWG1B
UFBFTkQsCiAgICAgICAgWG1DTE9TRVNULAogICAgICAgIFhtRklSU1RfRklUCiAgICAgICAgfTsK
CiAgICAgICAgIAplbnVtIHsgIFhtT1VUTElORSwKICAgICAgICBYbVNQQVRJQUwsCglYbURFVEFJ
TAogICAgICAgIH07CgoJIAplbnVtIHsJWG1PVVRMSU5FX0JVVFRPTl9QUkVTRU5ULAoJWG1PVVRM
SU5FX0JVVFRPTl9BQlNFTlQKCX07CgogICAgICAgICAKZW51bSB7ICAgCglYbUdSSUQgPSAxLAoJ
WG1DRUxMUwogICAgICAgIH07CgoJIAplbnVtIHsJWG1PV05fTkVWRVIsCglYbU9XTl9BTFdBWVMs
CglYbU9XTl9NVUxUSVBMRSwKCVhtT1dOX1BPU1NJQkxFX01VTFRJUExFCgl9OwoKICAgICAgICAg
CmVudW0geyAgWG1HUk9XX01JTk9SLAoJWG1HUk9XX01BSk9SLAogICAgICAgIFhtR1JPV19CQUxB
TkNFRAogICAgICAgIH07CgogICAgICAgICAKZW51bSB7ICBYbU1BUlFVRUUsCiAgICAgICAgWG1N
QVJRVUVFX0VYVEVORF9TVEFSVCwKICAgICAgICBYbU1BUlFVRUVfRVhURU5EX0JPVEgsCiAgICAg
ICAgWG1UT1VDSF9PTkxZLAogICAgICAgIFhtVE9VQ0hfT1ZFUgogICAgICAgIH07CgogICAgICAg
ICAKZW51bSB7ICAgCiAgICAgICAgWG1TTkFQX1RPX0dSSUQgPSAxLAogICAgICAgIFhtQ0VOVEVS
CiAgICAgICAgfTsKCiAgICAgICAgIAplbnVtIHsgIFhtQ09MTEFQU0VELAogICAgICAgIFhtRVhQ
QU5ERUQKICAgICAgICB9OwoKIAoKCgoKCiAgICAgICAgIAplbnVtIHsgIFhtTEFSR0VfSUNPTiwK
ICAgICAgICBYbVNNQUxMX0lDT04KICAgICAgICB9OwoKICAgICAgICAgCmVudW0geyAgWG1TRUxF
Q1RFRCwKICAgICAgICBYbU5PVF9TRUxFQ1RFRAogICAgICAgIH07CgogCgoKCgoKCgogICAgICAg
ICAKZW51bSB7ICAgCiAgICAgICAgIAogICAgICAgIFhtU09MSUQgPSAyLAogICAgICAgIFhtU1BJ
UkFMLAogICAgICAgIFhtUElYTUFQX09WRVJMQVBfT05MWQogICAgICAgIH07CgogICAgICAgICAK
ZW51bSB7ICAgCiAgICAgICAgWG1QQUdFID0gMSwKICAgICAgICBYbU1BSk9SX1RBQiwKICAgICAg
ICBYbU1JTk9SX1RBQiwKICAgICAgICBYbVNUQVRVU19BUkVBLAogICAgICAgIFhtUEFHRV9TQ1JP
TExFUgogICAgICAgIH07CgogCgoKCgoKIAplbnVtCnsKICAgIFhtQVJST1dTX1ZFUlRJQ0FMLAog
ICAgWG1BUlJPV1NfSE9SSVpPTlRBTAp9OwoKIAplbnVtCnsKICAgIFhtQVJST1dTX0VORCwKICAg
IFhtQVJST1dTX0JFR0lOTklORywKICAgIFhtQVJST1dTX1NQTElULAogICAgWG1BUlJPV1NfRkxB
VF9FTkQsCiAgICBYbUFSUk9XU19GTEFUX0JFR0lOTklORwp9OwoKIAogCgplbnVtCnsKICAgIFht
QVJST1dTX0lOU0VOU0lUSVZFLAogICAgWG1BUlJPV1NfSU5DUkVNRU5UX1NFTlNJVElWRSwKICAg
IFhtQVJST1dTX0RFQ1JFTUVOVF9TRU5TSVRJVkUsCiAgICBYbUFSUk9XU19TRU5TSVRJVkUsCiAg
ICBYbUFSUk9XU19ERUZBVUxUX1NFTlNJVElWSVRZCn07CgogCmVudW0KewogICAgWG1QT1NJVElP
Tl9JTkRFWCwKICAgIFhtUE9TSVRJT05fVkFMVUUKfTsKCiAKZW51bQp7CiAgICAgCiAgICAgCiAg
ICBYbU5VTUVSSUMgPSAzCn07CgogCmVudW0KewogICAgWG1WQUxJRF9WQUxVRSwKICAgIFhtQ1VS
UkVOVF9WQUxVRSwKICAgIFhtTUFYSU1VTV9WQUxVRSwKICAgIFhtTUlOSU1VTV9WQUxVRSwKICAg
IFhtSU5DUkVNRU5UX1ZBTFVFCn07Cgp0eXBlZGVmIHN0cnVjdAp7CiAgICBpbnQJCXJlYXNvbjsK
ICAgIFhFdmVudAkqZXZlbnQ7CiAgICBXaWRnZXQgICAgICB3aWRnZXQ7CiAgICBCb29sZWFuICAg
ICBkb2l0OwogICAgaW50CQlwb3NpdGlvbjsKICAgIFhtU3RyaW5nCXZhbHVlOwogICAgQm9vbGVh
bgljcm9zc2VkX2JvdW5kYXJ5Owp9IFhtU3BpbkJveENhbGxiYWNrU3RydWN0OwoKCiAKCgoKCgpl
bnVtewlYbVZBUklBQkxFLAkJCVhtQ09OU1RBTlQsCglYbVJFU0laRV9JRl9QT1NTSUJMRQoJfSA7
CmVudW17CVhtQVVUT01BVElDLAkJCVhtQVBQTElDQVRJT05fREVGSU5FRAoJfSA7CmVudW17CSAJ
CQlYbUFTX05FRURFRCA9IDEKCX0gOwoKCgoKCgoKCgoKCiAKCgoKCgplbnVtewlYbUNPTU1BTkRf
QUJPVkVfV09SS1NQQUNFLAlYbUNPTU1BTkRfQkVMT1dfV09SS1NQQUNFCgl9IDsKIAoKCgoKCmVu
dW17CVhtTVVMVElfTElORV9FRElULAkJWG1TSU5HTEVfTElORV9FRElUCgl9IDsKCnR5cGVkZWYg
ZW51bXsKCVhtVEVYVF9GT1JXQVJELAoJWG1URVhUX0JBQ0tXQVJECgl9IFhtVGV4dERpcmVjdGlv
bjsKCnR5cGVkZWYgbG9uZyBYbVRleHRQb3NpdGlvbjsKdHlwZWRlZiBBdG9tIFhtVGV4dEZvcm1h
dDsKCgoKCgoKCnR5cGVkZWYgZW51bXsKCVhtU0VMRUNUX1BPU0lUSU9OLAkJWG1TRUxFQ1RfV0hJ
VEVTUEFDRSwKCVhtU0VMRUNUX1dPUkQsCQkJWG1TRUxFQ1RfTElORSwKCgoKCVhtU0VMRUNUX0FM
TCwJCQlYbVNFTEVDVF9QQVJBR1JBUEgsCglYbVNFTEVDVF9PVVRfTElORQoJfSBYbVRleHRTY2Fu
VHlwZSA7Cgp0eXBlZGVmIGVudW17CglYbUhJR0hMSUdIVF9OT1JNQUwsCQlYbUhJR0hMSUdIVF9T
RUxFQ1RFRCwKCVhtSElHSExJR0hUX1NFQ09OREFSWV9TRUxFQ1RFRCwJWG1TRUVfREVUQUlMLAoJ
WG1ISUdITElHSFRfQ09MT1JfMSwJCVhtSElHSExJR0hUX0NPTE9SXzIKCX0gWG1IaWdobGlnaHRN
b2RlIDsKCgoKCgoKCgogCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBjaGFyICpwdHI7ICAgICAgICAg
ICAgICAgICAgIAogICAgaW50IGxlbmd0aDsgICAgICAgICAgICAgICAgICAKICAgIFhtVGV4dEZv
cm1hdCBmb3JtYXQ7ICAgICAgICAKfSBYbVRleHRCbG9ja1JlYywgKlhtVGV4dEJsb2NrOwoKdHlw
ZWRlZiBzdHJ1Y3QKewogICAgaW50IHJlYXNvbjsKICAgIFhFdmVudCAgKmV2ZW50OwogICAgQm9v
bGVhbiBkb2l0OwogICAgbG9uZyBjdXJySW5zZXJ0LCBuZXdJbnNlcnQ7CiAgICBsb25nIHN0YXJ0
UG9zLCBlbmRQb3M7CiAgICBYbVRleHRCbG9jayB0ZXh0Owp9IFhtVGV4dFZlcmlmeUNhbGxiYWNr
U3RydWN0LCAqWG1UZXh0VmVyaWZ5UHRyOwoKIAoKCnR5cGVkZWYgc3RydWN0IHsKICAgIHdjaGFy
X3QgKndjc3B0cjsgICAgICAgICAgICAgCiAgICBpbnQgbGVuZ3RoOyAgICAgICAgICAgICAgICAg
IAp9IFhtVGV4dEJsb2NrUmVjV2NzLCAqWG1UZXh0QmxvY2tXY3M7Cgp0eXBlZGVmIHN0cnVjdAp7
CiAgICBpbnQgcmVhc29uOwogICAgWEV2ZW50ICAqZXZlbnQ7CiAgICBCb29sZWFuIGRvaXQ7CiAg
ICBsb25nIGN1cnJJbnNlcnQsIG5ld0luc2VydDsKICAgIGxvbmcgc3RhcnRQb3MsIGVuZFBvczsK
ICAgIFhtVGV4dEJsb2NrV2NzIHRleHQ7Cn0gWG1UZXh0VmVyaWZ5Q2FsbGJhY2tTdHJ1Y3RXY3Ms
ICpYbVRleHRWZXJpZnlQdHJXY3M7CgogCgoKCgoKCgogCgoKCgoKCiAKCmVudW17CVhtRElBTE9H
X05PTkUsCQkJWG1ESUFMT0dfQVBQTFlfQlVUVE9OLAoJWG1ESUFMT0dfQ0FOQ0VMX0JVVFRPTiwJ
CVhtRElBTE9HX0RFRkFVTFRfQlVUVE9OLAoJWG1ESUFMT0dfT0tfQlVUVE9OLAkJWG1ESUFMT0df
RklMVEVSX0xBQkVMLAoJWG1ESUFMT0dfRklMVEVSX1RFWFQsCQlYbURJQUxPR19IRUxQX0JVVFRP
TiwKCVhtRElBTE9HX0xJU1QsCQkJWG1ESUFMT0dfTElTVF9MQUJFTCwKCVhtRElBTE9HX01FU1NB
R0VfTEFCRUwsCQlYbURJQUxPR19TRUxFQ1RJT05fTEFCRUwsCglYbURJQUxPR19TWU1CT0xfTEFC
RUwsCQlYbURJQUxPR19URVhULAoJWG1ESUFMT0dfU0VQQVJBVE9SLAkJWG1ESUFMT0dfRElSX0xJ
U1QsCglYbURJQUxPR19ESVJfTElTVF9MQUJFTAoJfSA7CgoKCgoKCgoKIAoKZW51bXsJWG1ESUFM
T0dfTU9ERUxFU1MsCQlYbURJQUxPR19QUklNQVJZX0FQUExJQ0FUSU9OX01PREFMLAoJWG1ESUFM
T0dfRlVMTF9BUFBMSUNBVElPTl9NT0RBTCxYbURJQUxPR19TWVNURU1fTU9EQUwKCX0gOwoKIAoK
CgogCgoKCiAKCmVudW17CVhtUExBQ0VfVE9QLAkJCVhtUExBQ0VfQUJPVkVfU0VMRUNUSU9OLAoJ
WG1QTEFDRV9CRUxPV19TRUxFQ1RJT04KCX0gOwoKIAoKCgoKCiAKCmVudW17CVhtRElBTE9HX1dP
UktfQVJFQSwJCVhtRElBTE9HX1BST01QVCwKCVhtRElBTE9HX1NFTEVDVElPTiwJCVhtRElBTE9H
X0NPTU1BTkQsCglYbURJQUxPR19GSUxFX1NFTEVDVElPTgoJfSA7CgogCgoKCiAKCmVudW17CVht
RElBTE9HX1RFTVBMQVRFLAkJWG1ESUFMT0dfRVJST1IsCglYbURJQUxPR19JTkZPUk1BVElPTiwJ
CVhtRElBTE9HX01FU1NBR0UsCglYbURJQUxPR19RVUVTVElPTiwJCVhtRElBTE9HX1dBUk5JTkcs
CglYbURJQUxPR19XT1JLSU5HCgl9IDsKCiAKCnR5cGVkZWYgZW51bXsKCVhtVklTSUJJTElUWV9V
Tk9CU0NVUkVELAlYbVZJU0lCSUxJVFlfUEFSVElBTExZX09CU0NVUkVELAoJWG1WSVNJQklMSVRZ
X0ZVTExZX09CU0NVUkVECgl9IFhtVmlzaWJpbGl0eSA7CgoKdHlwZWRlZiBlbnVtewoJWG1UUkFW
RVJTRV9DVVJSRU5ULAkJWG1UUkFWRVJTRV9ORVhULAoJWG1UUkFWRVJTRV9QUkVWLAkJWG1UUkFW
RVJTRV9IT01FLAoJWG1UUkFWRVJTRV9ORVhUX1RBQl9HUk9VUCwJWG1UUkFWRVJTRV9QUkVWX1RB
Ql9HUk9VUCwKCVhtVFJBVkVSU0VfVVAsCQkJWG1UUkFWRVJTRV9ET1dOLAoJWG1UUkFWRVJTRV9M
RUZULAkJWG1UUkFWRVJTRV9SSUdIVCwKCVhtVFJBVkVSU0VfR0xPQkFMTFlfRk9SV0FSRCwJWG1U
UkFWRVJTRV9HTE9CQUxMWV9CQUNLV0FSRAoJfSBYbVRyYXZlcnNhbERpcmVjdGlvbiA7Cgp0eXBl
ZGVmIHN0cnVjdCBfWG1UcmF2ZXJzZU9ic2N1cmVkQ2FsbGJhY2tTdHJ1Y3QKewlpbnQJCQlyZWFz
b24gOwoJWEV2ZW50ICoJCWV2ZW50IDsKCVdpZGdldAkJCXRyYXZlcnNhbF9kZXN0aW5hdGlvbiA7
CglYbVRyYXZlcnNhbERpcmVjdGlvbglkaXJlY3Rpb24gOwoJfSBYbVRyYXZlcnNlT2JzY3VyZWRD
YWxsYmFja1N0cnVjdCA7Cgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICBYbU5hdmlnYXRpb25UeXBl
OwoKCiAKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgWG1CdXR0b25UeXBlOwp0eXBlZGVmIFht
QnV0dG9uVHlwZSAqIFhtQnV0dG9uVHlwZVRhYmxlOwp0eXBlZGVmIEtleVN5bSAqIFhtS2V5U3lt
VGFibGU7CnR5cGVkZWYgWG1TdHJpbmdDaGFyU2V0ICogWG1TdHJpbmdDaGFyU2V0VGFibGU7Cgpl
bnVtewlYbVBVU0hCVVRUT04gPSAxLAkJWG1UT0dHTEVCVVRUT04sCglYbVJBRElPQlVUVE9OLAkJ
CVhtQ0FTQ0FERUJVVFRPTiwKCVhtU0VQQVJBVE9SLAkJCVhtRE9VQkxFX1NFUEFSQVRPUiwKCVht
VElUTEUKCX0gOwoKCgogCgoKCgoKZW51bXsJWG1NQVRDSF9ERVBUSCwgWG1EWU5BTUlDX0RFUFRI
IH0gOwoKCiAKCgoKZW51bSB7IFhtUERNX05PVElGWV9GQUlMLCBYbVBETV9OT1RJRllfU1VDQ0VT
UyB9IDsKCgogCgojIDEgIi91c3IvZHQvaW5jbHVkZS9YbS9UeHRQcm9wQ3YuaCIgMQogCiAKCgoK
CgoKIAoKCgoKCgoKZXh0ZXJuICJDIiB7CgoKIAoKZXh0ZXJuIGludCBYbUN2dFhtU3RyaW5nVGFi
bGVUb1RleHRQcm9wZXJ0eShEaXNwbGF5ICpkaXNwbGF5LAoJCQkJIFhtU3RyaW5nVGFibGUgc3Ry
aW5nX3RhYmxlLAoJCQkJIGludCBjb3VudCwKCQkJCSBYbUlDQ0VuY29kaW5nU3R5bGUgc3R5bGUs
CgkJCQkgWFRleHRQcm9wZXJ0eSAqdGV4dF9wcm9wX3JldHVybik7CgpleHRlcm4gaW50IFhtQ3Z0
VGV4dFByb3BlcnR5VG9YbVN0cmluZ1RhYmxlKERpc3BsYXkgKmRpc3BsYXksCgkJCQkgWFRleHRQ
cm9wZXJ0eSAqdGV4dF9wcm9wLAoJCQkJIFhtU3RyaW5nVGFibGUgKnN0cmluZ190YWJsZV9yZXR1
cm4sCgkJCQkgaW50ICpjb3VudF9yZXR1cm4pOwoKIAoKCn0gICAKCgoKIAojIDEyNjYgIi91c3Iv
ZHQvaW5jbHVkZS9YbS9YbS5oIiAyCgoKCiAKdHlwZWRlZiBYdFBvaW50ZXIJKCpYbVJlc291cmNl
QmFzZVByb2MpKCBXaWRnZXQsIFh0UG9pbnRlcikgOwoKdHlwZWRlZiBzdHJ1Y3QgX1htU2Vjb25k
YXJ5UmVzb3VyY2VEYXRhUmVjewogICAgWG1SZXNvdXJjZUJhc2VQcm9jCWJhc2VfcHJvYzsKICAg
IFh0UG9pbnRlcgkJY2xpZW50X2RhdGE7CiAgICBTdHJpbmcJCW5hbWU7CiAgICBTdHJpbmcJCXJl
c19jbGFzczsKICAgIFh0UmVzb3VyY2VMaXN0CXJlc291cmNlczsKICAgIENhcmRpbmFsCQludW1f
cmVzb3VyY2VzOwp9WG1TZWNvbmRhcnlSZXNvdXJjZURhdGFSZWMsICpYbVNlY29uZGFyeVJlc291
cmNlRGF0YTsKCiAKCmV4dGVybiBDYXJkaW5hbCBYbUdldFNlY29uZGFyeVJlc291cmNlRGF0YSgg
CiAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldENsYXNzIHdfY2xhc3MsCiAgICAgICAgICAg
ICAgICAgICAgICAgIFhtU2Vjb25kYXJ5UmVzb3VyY2VEYXRhICoqc2Vjb25kYXJ5RGF0YVJ0bikg
OwoKIAoKIAoKZXh0ZXJuIEJvb2xlYW4gWG0yMUluc3RhbGxJbWFnZSggCiAgICAgICAgICAgICAg
ICAgICAgICAgIFhJbWFnZSAqaW1hZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmlt
YWdlX25hbWUpIDsKZXh0ZXJuIEJvb2xlYW4gWG0yMVVuaW5zdGFsbEltYWdlKCAKICAgICAgICAg
ICAgICAgICAgICAgICAgWEltYWdlICppbWFnZSkgOwpleHRlcm4gUGl4bWFwIFhtMjFHZXRQaXht
YXAoIAogICAgICAgICAgICAgICAgICAgICAgICBTY3JlZW4gKnNjcmVlbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhciAqaW1hZ2VfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgUGl4
ZWwgZm9yZWdyb3VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgUGl4ZWwgYmFja2dyb3VuZCkg
OwpleHRlcm4gUGl4bWFwIFhtMjFHZXRQaXhtYXBCeURlcHRoKCAKICAgICAgICAgICAgICAgICAg
ICAgICAgU2NyZWVuICpzY3JlZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmltYWdl
X25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIFBpeGVsIGZvcmVncm91bmQsCiAgICAgICAg
ICAgICAgICAgICAgICAgIFBpeGVsIGJhY2tncm91bmQsCgkJCWludCBkZXB0aCkgOwpleHRlcm4g
Qm9vbGVhbiBYbTIxRGVzdHJveVBpeG1hcCggCiAgICAgICAgICAgICAgICAgICAgICAgIFNjcmVl
biAqc2NyZWVuLAogICAgICAgICAgICAgICAgICAgICAgICBQaXhtYXAgcGl4bWFwKSA7CgogCgpl
eHRlcm4gQm9vbGVhbiBYbUluc3RhbGxJbWFnZSgKICAgICAgICAgICAgICAgICAgICAgICAgWElt
YWdlICppbWFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaW1hZ2VfbmFtZSkgOwpl
eHRlcm4gQm9vbGVhbiBYbVVuaW5zdGFsbEltYWdlKAogICAgICAgICAgICAgICAgICAgICAgICBY
SW1hZ2UgKmltYWdlKSA7CmV4dGVybiBQaXhtYXAgWG1HZXRQaXhtYXAoCiAgICAgICAgICAgICAg
ICAgICAgICAgIFNjcmVlbiAqc2NyZWVuLAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpp
bWFnZV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBQaXhlbCBmb3JlZ3JvdW5kLAogICAg
ICAgICAgICAgICAgICAgICAgICBQaXhlbCBiYWNrZ3JvdW5kKSA7CmV4dGVybiBQaXhtYXAgWG1H
ZXRQaXhtYXBCeURlcHRoKAogICAgICAgICAgICAgICAgICAgICAgICBTY3JlZW4gKnNjcmVlbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaW1hZ2VfbmFtZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgUGl4ZWwgZm9yZWdyb3VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgUGl4ZWwg
YmFja2dyb3VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlcHRoKSA7CmV4dGVybiBC
b29sZWFuIFhtRGVzdHJveVBpeG1hcCgKICAgICAgICAgICAgICAgICAgICAgICAgU2NyZWVuICpz
Y3JlZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIFBpeG1hcCBwaXhtYXApIDsKCiAKCiAKIAoK
Cgp0eXBlZGVmIGxvbmcgWG1PZmZzZXQ7CnR5cGVkZWYgWG1PZmZzZXQgKlhtT2Zmc2V0UHRyOwoK
CgpleHRlcm4gdm9pZCBYbVJlc29sdmVBbGxQYXJ0T2Zmc2V0cyggCiAgICAgICAgICAgICAgICAg
ICAgICAgIFdpZGdldENsYXNzIHdfY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgIFhtT2Zm
c2V0UHRyICpvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIFhtT2Zmc2V0UHRyICpjb25z
dHJhaW50X29mZnNldCkgOwpleHRlcm4gdm9pZCBYbVJlc29sdmVQYXJ0T2Zmc2V0cyggCiAgICAg
ICAgICAgICAgICAgICAgICAgIFdpZGdldENsYXNzIHdfY2xhc3MsCiAgICAgICAgICAgICAgICAg
ICAgICAgIFhtT2Zmc2V0UHRyICpvZmZzZXQpIDsKCiAKCgoKIAoKCmV4dGVybiB2b2lkIFhtVXBk
YXRlRGlzcGxheSggCiAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCB3KSA7CmV4dGVybiBX
aWRnZXQgWG1PYmplY3RBdFBvaW50KAoJCQlXaWRnZXQgd2lkLAoJCQlQb3NpdGlvbiB4LAoJCQlQ
b3NpdGlvbiB5ICkgOwoKZXh0ZXJuIEJvb2xlYW4gWG1XaWRnZXRHZXRCYXNlbGluZXMoCiAgICAg
ICAgICAgICAgICAgICAgICAgIFdpZGdldCB3aWQsCiAgICAgICAgICAgICAgICAgICAgICAgIERp
bWVuc2lvbiAqKmJhc2VsaW5lcywKICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpsaW5lX2Nv
dW50KTsKZXh0ZXJuIEJvb2xlYW4gWG1XaWRnZXRHZXREaXNwbGF5UmVjdCgKICAgICAgICAgICAg
ICAgICAgICAgICAgV2lkZ2V0IHdpZCwKICAgICAgICAgICAgICAgICAgICAgICAgWFJlY3Rhbmds
ZSAqZGlzcGxheXJlY3QpOwoKIAoKCgogCgogCgogCgogCgogCmV4dGVybiB2b2lkIFhtUmVnaXN0
ZXJDb252ZXJ0ZXJzKCB2b2lkICk7CgpleHRlcm4gdm9pZCBYbUN2dFN0cmluZ1RvVW5pdFR5cGUo
IAogICAgICAgICAgICAgICAgICAgICAgICBYcm1WYWx1ZVB0ciBhcmdzLAogICAgICAgICAgICAg
ICAgICAgICAgICBDYXJkaW5hbCAqbnVtX2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgIFhy
bVZhbHVlICpmcm9tX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgWHJtVmFsdWUgKnRvX3Zh
bCkgOwpleHRlcm4gY2hhciAqIFhtUmVnaXN0ZXJTZWdtZW50RW5jb2RpbmcoIAogICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyICpmb250bGlzdF90YWcsCiAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKmN0X2VuY29kaW5nKSA7CmV4dGVybiBjaGFyICogWG1NYXBTZWdtZW50RW5jb2Rpbmco
IAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpmb250bGlzdF90YWcpIDsKZXh0ZXJuIFht
U3RyaW5nIFhtQ3Z0Q1RUb1htU3RyaW5nKCAKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq
dGV4dCkgOwpleHRlcm4gQm9vbGVhbiBYbUN2dFRleHRUb1htU3RyaW5nKCAKICAgICAgICAgICAg
ICAgICAgICAgICAgRGlzcGxheSAqZGlzcGxheSwKICAgICAgICAgICAgICAgICAgICAgICAgWHJt
VmFsdWVQdHIgYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9hcmdz
LAogICAgICAgICAgICAgICAgICAgICAgICBYcm1WYWx1ZSAqZnJvbV92YWwsCiAgICAgICAgICAg
ICAgICAgICAgICAgIFhybVZhbHVlICp0b192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgIFh0
UG9pbnRlciAqY29udmVydGVyX2RhdGEpIDsKZXh0ZXJuIGNoYXIgKiBYbUN2dFhtU3RyaW5nVG9D
VCggCiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nIHN0cmluZykgOwpleHRlcm4gQm9v
bGVhbiBYbUN2dFhtU3RyaW5nVG9UZXh0KCAKICAgICAgICAgICAgICAgICAgICAgICAgRGlzcGxh
eSAqZGlzcGxheSwKICAgICAgICAgICAgICAgICAgICAgICAgWHJtVmFsdWVQdHIgYXJncywKICAg
ICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9hcmdzLAogICAgICAgICAgICAgICAg
ICAgICAgICBYcm1WYWx1ZSAqZnJvbV92YWwsCiAgICAgICAgICAgICAgICAgICAgICAgIFhybVZh
bHVlICp0b192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciAqY29udmVydGVy
X2RhdGEpIDsKCiAKCiAKCmV4dGVybiBpbnQgWG1Db252ZXJ0U3RyaW5nVG9Vbml0cygKCQkJCSAg
U2NyZWVuICpzY3JlZW4sIAoJCQkJICBTdHJpbmcgc3BlYywKCQkJCSAgaW50IG9yaWVudGF0aW9u
LAoJCQkJICBpbnQgdG9fdHlwZSwKCQkJCSAgWHRFbnVtICpwYXJzZV9lcnJvcik7CmV4dGVybiBp
bnQgWG1Db252ZXJ0VW5pdHMoIAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgd2lkZ2V0
LAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGltZW5zaW9uLAogICAgICAgICAgICAgICAg
ICAgICAgICByZWdpc3RlciBpbnQgZnJvbV90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICBy
ZWdpc3RlciBpbnQgZnJvbV92YWwsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGlu
dCB0b190eXBlKSA7CmV4dGVybiBpbnQgWG1DdnRUb0hvcml6b250YWxQaXhlbHMoIAogICAgICAg
ICAgICAgICAgICAgICAgICBTY3JlZW4gKnNjcmVlbiwKICAgICAgICAgICAgICAgICAgICAgICAg
cmVnaXN0ZXIgaW50IGZyb21fdmFsLAogICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBp
bnQgZnJvbV90eXBlKSA7CmV4dGVybiBpbnQgWG1DdnRUb1ZlcnRpY2FsUGl4ZWxzKCAKICAgICAg
ICAgICAgICAgICAgICAgICAgU2NyZWVuICpzY3JlZW4sCiAgICAgICAgICAgICAgICAgICAgICAg
IHJlZ2lzdGVyIGludCBmcm9tX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIg
aW50IGZyb21fdHlwZSkgOwpleHRlcm4gaW50IFhtQ3Z0RnJvbUhvcml6b250YWxQaXhlbHMoIAog
ICAgICAgICAgICAgICAgICAgICAgICBTY3JlZW4gKnNjcmVlbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgcmVnaXN0ZXIgaW50IGZyb21fdmFsLAogICAgICAgICAgICAgICAgICAgICAgICByZWdp
c3RlciBpbnQgdG9fdHlwZSkgOwpleHRlcm4gaW50IFhtQ3Z0RnJvbVZlcnRpY2FsUGl4ZWxzKCAK
ICAgICAgICAgICAgICAgICAgICAgICAgU2NyZWVuICpzY3JlZW4sCiAgICAgICAgICAgICAgICAg
ICAgICAgIHJlZ2lzdGVyIGludCBmcm9tX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgcmVn
aXN0ZXIgaW50IHRvX3R5cGUpIDsKZXh0ZXJuIHZvaWQgWG1TZXRGb250VW5pdHMoIAogICAgICAg
ICAgICAgICAgICAgICAgICBEaXNwbGF5ICpkaXNwbGF5LAogICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaF92YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZfdmFsdWUpIDsKZXh0
ZXJuIHZvaWQgWG1TZXRGb250VW5pdCggCiAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXkg
KmRpc3BsYXksCiAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZSkgOwoKIAoKIAoKZXh0
ZXJuIHZvaWQgWG1TZXRNZW51Q3Vyc29yKCAKICAgICAgICAgICAgICAgICAgICAgICAgRGlzcGxh
eSAqZGlzcGxheSwKICAgICAgICAgICAgICAgICAgICAgICAgQ3Vyc29yIGN1cnNvcklkKSA7CmV4
dGVybiBDdXJzb3IgWG1HZXRNZW51Q3Vyc29yKCAKICAgICAgICAgICAgICAgICAgICAgICAgRGlz
cGxheSAqZGlzcGxheSkgOwoKIAoKIAoKZXh0ZXJuIFdpZGdldCBYbUNyZWF0ZVNpbXBsZU1lbnVC
YXIoIAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgcGFyZW50LAogICAgICAgICAgICAg
ICAgICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgQXJnTGlzdCBh
cmdzLAogICAgICAgICAgICAgICAgICAgICAgICBDYXJkaW5hbCBhcmdfY291bnQpIDsKZXh0ZXJu
IFdpZGdldCBYbUNyZWF0ZVNpbXBsZVBvcHVwTWVudSggCiAgICAgICAgICAgICAgICAgICAgICAg
IFdpZGdldCBwYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lLAogICAg
ICAgICAgICAgICAgICAgICAgICBBcmdMaXN0IGFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAg
IENhcmRpbmFsIGFyZ19jb3VudCkgOwpleHRlcm4gV2lkZ2V0IFhtQ3JlYXRlU2ltcGxlUHVsbGRv
d25NZW51KCAKICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHBhcmVudCwKICAgICAgICAg
ICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIEFyZ0xp
c3QgYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgYXJnX2NvdW50KSA7CmV4
dGVybiBXaWRnZXQgWG1DcmVhdGVTaW1wbGVPcHRpb25NZW51KCAKICAgICAgICAgICAgICAgICAg
ICAgICAgV2lkZ2V0IHBhcmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUs
CiAgICAgICAgICAgICAgICAgICAgICAgIEFyZ0xpc3QgYXJncywKICAgICAgICAgICAgICAgICAg
ICAgICAgQ2FyZGluYWwgYXJnX2NvdW50KSA7CmV4dGVybiBXaWRnZXQgWG1DcmVhdGVTaW1wbGVS
YWRpb0JveCggCiAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCBwYXJlbnQsCiAgICAgICAg
ICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBBcmdM
aXN0IGFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgIENhcmRpbmFsIGFyZ19jb3VudCkgOwpl
eHRlcm4gV2lkZ2V0IFhtQ3JlYXRlU2ltcGxlQ2hlY2tCb3goIAogICAgICAgICAgICAgICAgICAg
ICAgICBXaWRnZXQgcGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgQXJnTGlzdCBhcmdzLAogICAgICAgICAgICAgICAgICAg
ICAgICBDYXJkaW5hbCBhcmdfY291bnQpIDsKCiAKCiAKZXh0ZXJuIFdpZGdldCBYbVZhQ3JlYXRl
U2ltcGxlTWVudUJhciggCgkJCVdpZGdldCBwYXJlbnQsCgkJCVN0cmluZyBuYW1lLAoJCQkuLi4p
IDsKZXh0ZXJuIFdpZGdldCBYbVZhQ3JlYXRlU2ltcGxlUG9wdXBNZW51KAoJCQlXaWRnZXQgcGFy
ZW50LAoJCQlTdHJpbmcgbmFtZSwKCQkJWHRDYWxsYmFja1Byb2MgY2FsbGJhY2ssCgkJCS4uLikg
OwpleHRlcm4gV2lkZ2V0IFhtVmFDcmVhdGVTaW1wbGVQdWxsZG93bk1lbnUoIAoJCQlXaWRnZXQg
cGFyZW50LAoJCQlTdHJpbmcgbmFtZSwKCQkJaW50IHBvc3RfZnJvbV9idXR0b24sCgkJCVh0Q2Fs
bGJhY2tQcm9jIGNhbGxiYWNrLAoJCQkuLi4pIDsKZXh0ZXJuIFdpZGdldCBYbVZhQ3JlYXRlU2lt
cGxlT3B0aW9uTWVudSgKCQkJV2lkZ2V0IHBhcmVudCwKCQkJU3RyaW5nIG5hbWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgIFhtU3RyaW5nIG9wdGlvbl9sYWJlbCwKICAgICAgICAgICAgICAgICAg
ICAgICAgS2V5U3ltIG9wdGlvbl9tbmVtb25pYywKICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGJ1dHRvbl9zZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIFh0Q2FsbGJhY2tQcm9jIGNhbGxi
YWNrLAoJCQkuLi4pIDsKZXh0ZXJuIFdpZGdldCBYbVZhQ3JlYXRlU2ltcGxlUmFkaW9Cb3goIAoJ
CQlXaWRnZXQgcGFyZW50LAoJCQlTdHJpbmcgbmFtZSwKCQkJaW50IGJ1dHRvbl9zZXQsCgkJCVh0
Q2FsbGJhY2tQcm9jIGNhbGxiYWNrLAoJCQkuLi4pIDsKZXh0ZXJuIFdpZGdldCBYbVZhQ3JlYXRl
U2ltcGxlQ2hlY2tCb3goIAoJCQlXaWRnZXQgcGFyZW50LAoJCQlTdHJpbmcgbmFtZSwKCQkJWHRD
YWxsYmFja1Byb2MgY2FsbGJhY2ssCgkJCS4uLikgOwogCgogCgpleHRlcm4gV2lkZ2V0IFhtVHJh
Y2tpbmdFdmVudCggCiAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCB3aWRnZXQsCiAgICAg
ICAgICAgICAgICAgICAgICAgIEN1cnNvciBjdXJzb3IsCgogICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgY29uZmluZVRvLAoKCgogICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKnBldikg
OwpleHRlcm4gV2lkZ2V0IFhtVHJhY2tpbmdMb2NhdGUoIAogICAgICAgICAgICAgICAgICAgICAg
ICBXaWRnZXQgd2lkZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICBDdXJzb3IgY3Vyc29yLAoK
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbmZpbmVUbykgOwoKCgoKIAoKIAp0eXBlZGVm
IHZvaWQgKCpYbUNvbG9yUHJvYykgKFhDb2xvciAqYmdfY29sb3IsIFhDb2xvciAqZmdfY29sb3Is
CglYQ29sb3IgKnNlbF9jb2xvciwgWENvbG9yICp0c19jb2xvciwgWENvbG9yICpic19jb2xvcik7
CgogCgpleHRlcm4gWG1Db2xvclByb2MgWG1TZXRDb2xvckNhbGN1bGF0aW9uKCAKICAgICAgICAg
ICAgICAgICAgICAgICAgWG1Db2xvclByb2MgcHJvYykgOwpleHRlcm4gWG1Db2xvclByb2MgWG1H
ZXRDb2xvckNhbGN1bGF0aW9uKCB2b2lkICkgOwpleHRlcm4gdm9pZCBYbUdldENvbG9ycyggCiAg
ICAgICAgICAgICAgICAgICAgICAgIFNjcmVlbiAqc2NyZWVuLAogICAgICAgICAgICAgICAgICAg
ICAgICBDb2xvcm1hcCBjb2xvcl9tYXAsCiAgICAgICAgICAgICAgICAgICAgICAgIFBpeGVsIGJh
Y2tncm91bmQsCiAgICAgICAgICAgICAgICAgICAgICAgIFBpeGVsICpmb3JlZ3JvdW5kX3JldCwK
ICAgICAgICAgICAgICAgICAgICAgICAgUGl4ZWwgKnRvcF9zaGFkb3dfcmV0LAogICAgICAgICAg
ICAgICAgICAgICAgICBQaXhlbCAqYm90dG9tX3NoYWRvd19yZXQsCiAgICAgICAgICAgICAgICAg
ICAgICAgIFBpeGVsICpzZWxlY3RfcmV0KSA7CmV4dGVybiB2b2lkIFhtQ2hhbmdlQ29sb3IoCiAg
ICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCB3aWRnZXQsCiAgICAgICAgICAgICAgICAgICAg
ICAgIFBpeGVsIGJhY2tncm91bmQpIDsKCiAKCiAKCmV4dGVybiBYbVN0cmluZyBYbVN0cmluZ0Ny
ZWF0ZSggCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgIFhtU3RyaW5nQ2hhclNldCBjaGFyc2V0KSA7CmV4dGVybiBYbVN0cmluZyBYbVN0
cmluZ0NyZWF0ZVNpbXBsZSggCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnRleHQpIDsK
ZXh0ZXJuIFhtU3RyaW5nIFhtU3RyaW5nQ3JlYXRlTG9jYWxpemVkKCAKICAgICAgICAgICAgICAg
ICAgICAgICAgU3RyaW5nIHRleHQpIDsKZXh0ZXJuIFhtU3RyaW5nIFhtU3RyaW5nRGlyZWN0aW9u
Q3JlYXRlKCAKCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBkaXJlY3Rpb24pIDsKCgoKZXh0
ZXJuIFhtU3RyaW5nIFhtU3RyaW5nU2VwYXJhdG9yQ3JlYXRlKCB2b2lkICkgOwpleHRlcm4gWG1T
dHJpbmcgWG1TdHJpbmdTZWdtZW50Q3JlYXRlKCAKICAgICAgICAgICAgICAgICAgICAgICAgY2hh
ciAqdGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmdDaGFyU2V0IGNoYXJzZXQs
CgogICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGlyZWN0aW9uLAogICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgc2VwYXJhdG9yKSA7CgoKCgpleHRlcm4gWG1TdHJpbmcgWG1TdHJpbmdMdG9S
Q3JlYXRlKCAKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgWG1TdHJpbmdDaGFyU2V0IGNoYXJzZXQpIDsKZXh0ZXJuIFhtU3RyaW5nIFht
U3RyaW5nQ3JlYXRlTHRvUiggCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnRleHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nQ2hhclNldCBjaGFyc2V0KSA7CmV4dGVybiBC
b29sZWFuIFhtU3RyaW5nSW5pdENvbnRleHQoIAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0
cmluZ0NvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nIHN0
cmluZykgOwpleHRlcm4gdm9pZCBYbVN0cmluZ0ZyZWVDb250ZXh0KCAKICAgICAgICAgICAgICAg
ICAgICAgICAgWG1TdHJpbmdDb250ZXh0IGNvbnRleHQpIDsKZXh0ZXJuIFhtU3RyaW5nQ29tcG9u
ZW50VHlwZSBYbVN0cmluZ0dldE5leHRDb21wb25lbnQoIAogICAgICAgICAgICAgICAgICAgICAg
ICBYbVN0cmluZ0NvbnRleHQgY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq
KnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nQ2hhclNldCAqY2hhcnNldCwK
ICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmdEaXJlY3Rpb24gKmRpcmVjdGlvbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmdDb21wb25lbnRUeXBlICp1bmtub3duX3RhZywK
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKnVua25vd25fbGVuZ3RoLAog
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqdW5rbm93bl92YWx1ZSkgOwpl
eHRlcm4gWG1TdHJpbmdDb21wb25lbnRUeXBlIFhtU3RyaW5nUGVla05leHRDb21wb25lbnQoIAog
ICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZ0NvbnRleHQgY29udGV4dCkgOwpleHRlcm4g
Qm9vbGVhbiBYbVN0cmluZ0dldE5leHRTZWdtZW50KCAKICAgICAgICAgICAgICAgICAgICAgICAg
WG1TdHJpbmdDb250ZXh0IGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKip0
ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZ0NoYXJTZXQgKmNoYXJzZXQsCiAg
ICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nRGlyZWN0aW9uICpkaXJlY3Rpb24sCiAgICAg
ICAgICAgICAgICAgICAgICAgIEJvb2xlYW4gKnNlcGFyYXRvcikgOwpleHRlcm4gQm9vbGVhbiBY
bVN0cmluZ0dldEx0b1IoIAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZyBzdHJpbmcs
CiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nQ2hhclNldCBjaGFyc2V0LAogICAgICAg
ICAgICAgICAgICAgICAgICBjaGFyICoqdGV4dCkgOwpleHRlcm4gWG1Gb250TGlzdEVudHJ5IFht
Rm9udExpc3RFbnRyeUNyZWF0ZSggCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnRhZywK
ICAgICAgICAgICAgICAgICAgICAgICAgWG1Gb250VHlwZSB0eXBlLAogICAgICAgICAgICAgICAg
ICAgICAgICBYdFBvaW50ZXIgZm9udCkgOwpleHRlcm4gWG1Gb250TGlzdEVudHJ5IFhtRm9udExp
c3RFbnRyeUNyZWF0ZV9yKAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp0YWcsCiAgICAg
ICAgICAgICAgICAgICAgICAgIFhtRm9udFR5cGUgdHlwZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgWHRQb2ludGVyIGZvbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCB3aWQpIDsK
ZXh0ZXJuIHZvaWQgWG1Gb250TGlzdEVudHJ5RnJlZSggCiAgICAgICAgICAgICAgICAgICAgICAg
IFhtRm9udExpc3RFbnRyeSAqZW50cnkpIDsKZXh0ZXJuIFh0UG9pbnRlciBYbUZvbnRMaXN0RW50
cnlHZXRGb250KCAKICAgICAgICAgICAgICAgICAgICAgICAgWG1Gb250TGlzdEVudHJ5IGVudHJ5
LAogICAgICAgICAgICAgICAgICAgICAgICBYbUZvbnRUeXBlICp0eXBlUmV0dXJuKSA7CmV4dGVy
biBjaGFyICogWG1Gb250TGlzdEVudHJ5R2V0VGFnKCAKICAgICAgICAgICAgICAgICAgICAgICAg
WG1Gb250TGlzdEVudHJ5IGVudHJ5KSA7CmV4dGVybiBYbUZvbnRMaXN0IFhtRm9udExpc3RBcHBl
bmRFbnRyeSggCiAgICAgICAgICAgICAgICAgICAgICAgIFhtRm9udExpc3Qgb2xkLAogICAgICAg
ICAgICAgICAgICAgICAgICBYbUZvbnRMaXN0RW50cnkgZW50cnkpIDsKZXh0ZXJuIFhtRm9udExp
c3RFbnRyeSBYbUZvbnRMaXN0TmV4dEVudHJ5KCAKICAgICAgICAgICAgICAgICAgICAgICAgWG1G
b250Q29udGV4dCBjb250ZXh0KSA7CmV4dGVybiBYbUZvbnRMaXN0IFhtRm9udExpc3RSZW1vdmVF
bnRyeSggCiAgICAgICAgICAgICAgICAgICAgICAgIFhtRm9udExpc3Qgb2xkLAogICAgICAgICAg
ICAgICAgICAgICAgICBYbUZvbnRMaXN0RW50cnkgZW50cnkpIDsKZXh0ZXJuIFhtRm9udExpc3RF
bnRyeSBYbUZvbnRMaXN0RW50cnlMb2FkKCAKICAgICAgICAgICAgICAgICAgICAgICAgRGlzcGxh
eSAqZGlzcGxheSwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZm9udE5hbWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgIFhtRm9udFR5cGUgdHlwZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhciAqdGFnKSA7CmV4dGVybiBYbUZvbnRMaXN0IFhtRm9udExpc3RDcmVhdGUoIAogICAg
ICAgICAgICAgICAgICAgICAgICBYRm9udFN0cnVjdCAqZm9udCwKICAgICAgICAgICAgICAgICAg
ICAgICAgWG1TdHJpbmdDaGFyU2V0IGNoYXJzZXQpIDsKZXh0ZXJuIFhtRm9udExpc3QgWG1Gb250
TGlzdENyZWF0ZV9yKAogICAgICAgICAgICAgICAgICAgICAgICBYRm9udFN0cnVjdCAqZm9udCwK
ICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmdDaGFyU2V0IGNoYXJzZXQsCiAgICAgICAg
ICAgICAgICAgICAgICAgIFdpZGdldCB3aWQpIDsKZXh0ZXJuIFhtRm9udExpc3QgWG1TdHJpbmdD
cmVhdGVGb250TGlzdCggCiAgICAgICAgICAgICAgICAgICAgICAgIFhGb250U3RydWN0ICpmb250
LAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZ0NoYXJTZXQgY2hhcnNldCkgOwpleHRl
cm4gWG1Gb250TGlzdCBYbVN0cmluZ0NyZWF0ZUZvbnRMaXN0X3IoCiAgICAgICAgICAgICAgICAg
ICAgICAgIFhGb250U3RydWN0ICpmb250LAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmlu
Z0NoYXJTZXQgY2hhcnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHdpZCkgOwpl
eHRlcm4gdm9pZCBYbUZvbnRMaXN0RnJlZSggCiAgICAgICAgICAgICAgICAgICAgICAgIFhtRm9u
dExpc3QgZm9udGxpc3QpIDsKZXh0ZXJuIFhtRm9udExpc3QgWG1Gb250TGlzdEFkZCggCiAgICAg
ICAgICAgICAgICAgICAgICAgIFhtRm9udExpc3Qgb2xkLAogICAgICAgICAgICAgICAgICAgICAg
ICBYRm9udFN0cnVjdCAqZm9udCwKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmdDaGFy
U2V0IGNoYXJzZXQpIDsKZXh0ZXJuIFhtRm9udExpc3QgWG1Gb250TGlzdENvcHkoIAogICAgICAg
ICAgICAgICAgICAgICAgICBYbUZvbnRMaXN0IGZvbnRsaXN0KSA7CmV4dGVybiBCb29sZWFuIFht
Rm9udExpc3RJbml0Rm9udENvbnRleHQoIAogICAgICAgICAgICAgICAgICAgICAgICBYbUZvbnRD
b250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICBYbUZvbnRMaXN0IGZvbnRs
aXN0KSA7CmV4dGVybiBCb29sZWFuIFhtRm9udExpc3RHZXROZXh0Rm9udCggCiAgICAgICAgICAg
ICAgICAgICAgICAgIFhtRm9udENvbnRleHQgY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAg
ICAgWG1TdHJpbmdDaGFyU2V0ICpjaGFyc2V0LAogICAgICAgICAgICAgICAgICAgICAgICBYRm9u
dFN0cnVjdCAqKmZvbnQpIDsKZXh0ZXJuIHZvaWQgWG1Gb250TGlzdEZyZWVGb250Q29udGV4dCgg
CiAgICAgICAgICAgICAgICAgICAgICAgIFhtRm9udENvbnRleHQgY29udGV4dCkgOwpleHRlcm4g
WG1TdHJpbmcgWG1TdHJpbmdDb25jYXQoIAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmlu
ZyBhLAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZyBiKSA7CmV4dGVybiBYbVN0cmlu
ZyBYbVN0cmluZ0NvbmNhdEFuZEZyZWUoCgkJCVhtU3RyaW5nIGEsIAoJCQlYbVN0cmluZyBiKSA7
CmV4dGVybiBYbVN0cmluZyBYbVN0cmluZ05Db25jYXQoIAogICAgICAgICAgICAgICAgICAgICAg
ICBYbVN0cmluZyBmaXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgc2Vjb25k
LAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgbikgOwpleHRlcm4gWG1TdHJpbmcgWG1TdHJp
bmdDb3B5KCAKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgc3RyaW5nKSA7CmV4dGVy
biBYbVN0cmluZyBYbVN0cmluZ05Db3B5KCAKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJp
bmcgc3RyLAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgbikgOwpleHRlcm4gQm9vbGVhbiBY
bVN0cmluZ0J5dGVDb21wYXJlKCAKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgYTEs
CiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nIGIxKSA7CmV4dGVybiBCb29sZWFuIFht
U3RyaW5nQ29tcGFyZSggCiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nIGEsCiAgICAg
ICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nIGIpIDsKZXh0ZXJuIGludCBYbVN0cmluZ0xlbmd0
aCggCiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nIHN0cmluZykgOwpleHRlcm4gQm9v
bGVhbiBYbVN0cmluZ0VtcHR5KCAKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgc3Ry
aW5nKSA7CmV4dGVybiBCb29sZWFuIFhtU3RyaW5nSXNWb2lkKFhtU3RyaW5nIHN0cmluZyk7IApl
eHRlcm4gQm9vbGVhbiBYbVN0cmluZ0hhc1N1YnN0cmluZyggCiAgICAgICAgICAgICAgICAgICAg
ICAgIFhtU3RyaW5nIHN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgc3Vi
c3RyaW5nKSA7CmV4dGVybiB2b2lkIFhtU3RyaW5nRnJlZSggCiAgICAgICAgICAgICAgICAgICAg
ICAgIFhtU3RyaW5nIHN0cmluZykgOwpleHRlcm4gRGltZW5zaW9uIFhtU3RyaW5nQmFzZWxpbmUo
IAogICAgICAgICAgICAgICAgICAgICAgICBYbUZvbnRMaXN0IGZvbnRsaXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICBYbVN0cmluZyBzdHJpbmcpIDsKZXh0ZXJuIERpbWVuc2lvbiBYbVN0cmlu
Z1dpZHRoKCAKICAgICAgICAgICAgICAgICAgICAgICAgWG1Gb250TGlzdCBmb250bGlzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgc3RyaW5nKSA7CmV4dGVybiBEaW1lbnNpb24g
WG1TdHJpbmdIZWlnaHQoIAogICAgICAgICAgICAgICAgICAgICAgICBYbUZvbnRMaXN0IGZvbnRs
aXN0LAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZyBzdHJpbmcpIDsKZXh0ZXJuIHZv
aWQgWG1TdHJpbmdFeHRlbnQoIAogICAgICAgICAgICAgICAgICAgICAgICBYbUZvbnRMaXN0IGZv
bnRsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZyBzdHJpbmcsCiAgICAgICAg
ICAgICAgICAgICAgICAgIERpbWVuc2lvbiAqd2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAg
IERpbWVuc2lvbiAqaGVpZ2h0KSA7CmV4dGVybiBpbnQgWG1TdHJpbmdMaW5lQ291bnQoIAogICAg
ICAgICAgICAgICAgICAgICAgICBYbVN0cmluZyBzdHJpbmcpIDsKZXh0ZXJuIHZvaWQgWG1TdHJp
bmdEcmF3KCAKICAgICAgICAgICAgICAgICAgICAgICAgRGlzcGxheSAqZCwKICAgICAgICAgICAg
ICAgICAgICAgICAgV2luZG93IHcsCiAgICAgICAgICAgICAgICAgICAgICAgIFhtRm9udExpc3Qg
Zm9udGxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nIHN0cmluZywKICAgICAg
ICAgICAgICAgICAgICAgICAgR0MgZ2MsCgogICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwK
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHksCiAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCB3aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFsaWduLAogICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGF5X2RpciwKCgoKCgoKCiAgICAgICAg
ICAgICAgICAgICAgICAgIFhSZWN0YW5nbGUgKmNsaXApIDsKZXh0ZXJuIHZvaWQgWG1TdHJpbmdE
cmF3SW1hZ2UoIAogICAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5ICpkLAogICAgICAgICAg
ICAgICAgICAgICAgICBXaW5kb3cgdywKICAgICAgICAgICAgICAgICAgICAgICAgWG1Gb250TGlz
dCBmb250bGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgc3RyaW5nLAogICAg
ICAgICAgICAgICAgICAgICAgICBHQyBnYywKCiAgICAgICAgICAgICAgICAgICAgICAgIGludCB4
LAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgeSwKICAgICAgICAgICAgICAgICAgICAgICAg
aW50IHdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYWxpZ24sCiAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsYXlfZGlyLAoKCgoKCgoKICAgICAg
ICAgICAgICAgICAgICAgICAgWFJlY3RhbmdsZSAqY2xpcCkgOwpleHRlcm4gdm9pZCBYbVN0cmlu
Z0RyYXdVbmRlcmxpbmUoIAogICAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5ICpkLAogICAg
ICAgICAgICAgICAgICAgICAgICBXaW5kb3cgdywKICAgICAgICAgICAgICAgICAgICAgICAgWG1G
b250TGlzdCBmbnRsc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nIHN0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgR0MgZ2MsCgogICAgICAgICAgICAgICAgICAgICAgICBpbnQg
eCwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IHksCiAgICAgICAgICAgICAgICAgICAgICAg
IGludCB3aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFsaWduLAog
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGF5X2RpciwKCgoKCgoKCiAgICAg
ICAgICAgICAgICAgICAgICAgIFhSZWN0YW5nbGUgKmNsaXAsCiAgICAgICAgICAgICAgICAgICAg
ICAgIFhtU3RyaW5nIHVuZGVyKSA7CmV4dGVybiB1bnNpZ25lZCBpbnQgWG1DdnRYbVN0cmluZ1Rv
Qnl0ZVN0cmVhbSgKCQkJWG1TdHJpbmcgc3RyaW5nLAogICAgICAgIAkgICAgICAgIHVuc2lnbmVk
IGNoYXIgKipwcm9wX3JldHVybik7CmV4dGVybiBYbVN0cmluZyBYbUN2dEJ5dGVTdHJlYW1Ub1ht
U3RyaW5nKAogICAgICAgIAkgICAgICAgIHVuc2lnbmVkIGNoYXIgKnByb3BlcnR5KTsKZXh0ZXJu
IHVuc2lnbmVkIGludCBYbVN0cmluZ0J5dGVTdHJlYW1MZW5ndGgodW5zaWduZWQgY2hhciAqc3Ry
aW5nKTsKZXh0ZXJuIFhtU3RyaW5nQ29tcG9uZW50VHlwZSBYbVN0cmluZ1BlZWtOZXh0VHJpcGxl
KFhtU3RyaW5nQ29udGV4dCBjb250ZXh0KTsKZXh0ZXJuIFhtU3RyaW5nQ29tcG9uZW50VHlwZSBY
bVN0cmluZ0dldE5leHRUcmlwbGUoWG1TdHJpbmdDb250ZXh0IGNvbnRleHQsCgkJCQkJCSAgIHVu
c2lnbmVkIGludCAqbGVuZ3RoLAoJCQkJCQkgICBYdFBvaW50ZXIgKnZhbHVlKTsKZXh0ZXJuIFht
U3RyaW5nIFhtU3RyaW5nQ29tcG9uZW50Q3JlYXRlKFhtU3RyaW5nQ29tcG9uZW50VHlwZSB0YWcs
CgkJCQkJdW5zaWduZWQgaW50IGxlbmd0aCwKCQkJCQlYdFBvaW50ZXIgdmFsdWUpOwpleHRlcm4g
WHRQb2ludGVyIFhtU3RyaW5nVW5wYXJzZShYbVN0cmluZyBzdHJpbmcsCgkJCQkgWG1TdHJpbmdU
YWcgdGFnLAoJCQkJIFhtVGV4dFR5cGUgdGFnX3R5cGUsCgkJCQkgWG1UZXh0VHlwZSBvdXRwdXRf
dHlwZSwKCQkJCSBYbVBhcnNlVGFibGUgcGFyc2VfdGFibGUsCgkJCQkgQ2FyZGluYWwgcGFyc2Vf
Y291bnQsCgkJCQkgWG1QYXJzZU1vZGVsIHBhcnNlX21vZGVsKTsKZXh0ZXJuIFhtU3RyaW5nIFht
U3RyaW5nUGFyc2VUZXh0KFh0UG9pbnRlciB0ZXh0LAoJCQkJICBYdFBvaW50ZXIgKnRleHRfZW5k
LAoJCQkJICBYbVN0cmluZ1RhZyB0YWcsCgkJCQkgIFhtVGV4dFR5cGUgdHlwZSwKCQkJCSAgWG1Q
YXJzZVRhYmxlIHBhcnNlX3RhYmxlLAoJCQkJICBDYXJkaW5hbCBwYXJzZV9jb3VudCwKCQkJCSAg
WHRQb2ludGVyIGNhbGxfZGF0YSk7CmV4dGVybiBDYXJkaW5hbCBYbVN0cmluZ1RvWG1TdHJpbmdU
YWJsZShYbVN0cmluZyBzdHJpbmcsCgkJCQkJWG1TdHJpbmcgYnJlYWtfY29tcCwKCQkJCQlYbVN0
cmluZ1RhYmxlICp0YWJsZSk7CmV4dGVybiBYbVN0cmluZyBYbVN0cmluZ1RhYmxlVG9YbVN0cmlu
ZyhYbVN0cmluZ1RhYmxlIHRhYmxlLAoJCQkJCUNhcmRpbmFsIGNvdW50LAoJCQkJCVhtU3RyaW5n
IGJyZWFrX2NvbXBvbmVudCk7CmV4dGVybiBYdFBvaW50ZXIgKlhtU3RyaW5nVGFibGVVbnBhcnNl
KFhtU3RyaW5nVGFibGUgdGFibGUsCgkJCQkgICAgICAgQ2FyZGluYWwgY291bnQsCgkJCQkgICAg
ICAgWG1TdHJpbmdUYWcgdGFnLAoJCQkJICAgICAgIFhtVGV4dFR5cGUgdGFnX3R5cGUsCgkJCQkg
ICAgICAgWG1UZXh0VHlwZSBvdXRwdXRfdHlwZSwKCQkJCSAgICAgICBYbVBhcnNlVGFibGUgcGFy
c2UsCgkJCQkgICAgICAgQ2FyZGluYWwgcGFyc2VfY291bnQsCgkJCQkgICAgICAgWG1QYXJzZU1v
ZGVsIHBhcnNlX21vZGVsKTsKZXh0ZXJuIFhtU3RyaW5nVGFibGUgWG1TdHJpbmdUYWJsZVBhcnNl
U3RyaW5nQXJyYXkoWHRQb2ludGVyICpzdHJpbmdzLAoJCQkJCQkgICBDYXJkaW5hbCBjb3VudCwK
CQkJCQkJICAgWG1TdHJpbmdUYWcgdGFnLAoJCQkJCQkgICBYbVRleHRUeXBlIHR5cGUsCgkJCQkJ
CSAgIFhtUGFyc2VUYWJsZSBwYXJzZSwKCQkJCQkJICAgQ2FyZGluYWwgcGFyc2VfY291bnQsCgkJ
CQkJCSAgIFh0UG9pbnRlciBjYWxsX2RhdGEpOwoKZXh0ZXJuIFhtU3RyaW5nRGlyZWN0aW9uIFht
RGlyZWN0aW9uVG9TdHJpbmdEaXJlY3Rpb24oWG1EaXJlY3Rpb24gZGlyKTsKZXh0ZXJuIFhtRGly
ZWN0aW9uIFhtU3RyaW5nRGlyZWN0aW9uVG9EaXJlY3Rpb24oWG1TdHJpbmdEaXJlY3Rpb24gZGly
KTsKCmV4dGVybiBYbVN0cmluZyBYbVN0cmluZ0dlbmVyYXRlKFh0UG9pbnRlciAgIHRleHQsCgkJ
CQkgWG1TdHJpbmdUYWcgdGFnLAoJCQkJIFhtVGV4dFR5cGUgIHR5cGUsCgkJCQkgWG1TdHJpbmdU
YWcgcmVuZGl0aW9uKTsKZXh0ZXJuIFhtU3RyaW5nIFhtU3RyaW5nUHV0UmVuZGl0aW9uKFhtU3Ry
aW5nIHN0cmluZywKCQkJCSAgICAgWG1TdHJpbmdUYWcgcmVuZGl0aW9uKTsgCgpleHRlcm4gWG1Q
YXJzZU1hcHBpbmcgWG1QYXJzZU1hcHBpbmdDcmVhdGUoQXJnTGlzdCAgYXJnX2xpc3QsCgkJCQkJ
ICAgQ2FyZGluYWwgYXJnX2NvdW50KTsKZXh0ZXJuIHZvaWQgWG1QYXJzZU1hcHBpbmdTZXRWYWx1
ZXMoWG1QYXJzZU1hcHBpbmcgcGFyc2VfbWFwcGluZywKCQkJCSAgICBBcmdMaXN0ICAgICAgICBh
cmdfbGlzdCwKCQkJCSAgICBDYXJkaW5hbCAgICAgICBhcmdfY291bnQpOwpleHRlcm4gdm9pZCBY
bVBhcnNlTWFwcGluZ0dldFZhbHVlcyhYbVBhcnNlTWFwcGluZyBwYXJzZV9tYXBwaW5nLAoJCQkJ
ICAgIEFyZ0xpc3QgICAgICAgIGFyZ19saXN0LAoJCQkJICAgIENhcmRpbmFsICAgICAgIGFyZ19j
b3VudCk7CmV4dGVybiB2b2lkIFhtUGFyc2VNYXBwaW5nRnJlZShYbVBhcnNlTWFwcGluZyBwYXJz
ZV9tYXBwaW5nKTsKZXh0ZXJuIHZvaWQgWG1QYXJzZVRhYmxlRnJlZShYbVBhcnNlVGFibGUgcGFy
c2VfdGFibGUsCgkJCSAgICAgQ2FyZGluYWwgICAgIHBhcnNlX2NvdW50KTsKCiAKCiAKCmV4dGVy
biBYbVRhYkxpc3QgCiAgWG1TdHJpbmdUYWJsZVByb3Bvc2VUYWJsaXN0KFhtU3RyaW5nVGFibGUg
c3RyaW5ncywgCgkJCSAgICAgIENhcmRpbmFsIG51bV9zdHJpbmdzLAoJCQkgICAgICBXaWRnZXQg
d2lkZ2V0LAoJCQkgICAgICBmbG9hdCBwYWRfdmFsdWUsCgkJCSAgICAgIFhtT2Zmc2V0TW9kZWwg
b2Zmc2V0X21vZGVsKTsKZXh0ZXJuIHZvaWQgWG1UYWJTZXRWYWx1ZShYbVRhYiB0YWIsIGZsb2F0
IHZhbHVlKTsKZXh0ZXJuIGZsb2F0IAogIFhtVGFiR2V0VmFsdWVzKFhtVGFiIHRhYiwgCgkJIHVu
c2lnbmVkIGNoYXIgKnVuaXRzLCAKCQkgWG1PZmZzZXRNb2RlbCAqb2Zmc2V0LCAKCQkgdW5zaWdu
ZWQgY2hhciAqYWxpZ25tZW50LCAKCQkgY2hhciAqKmRlY2ltYWwpOwpleHRlcm4gdm9pZCBYbVRh
YkZyZWUoWG1UYWIgdGFiKTsKZXh0ZXJuIFhtVGFiIFhtVGFiQ3JlYXRlKGZsb2F0IHZhbHVlLCAK
CQkJIHVuc2lnbmVkIGNoYXIgdW5pdHMsIAoJCQkgWG1PZmZzZXRNb2RlbCBvZmZzZXRfbW9kZWws
IAoJCQkgdW5zaWduZWQgY2hhciBhbGlnbm1lbnQsIAoJCQkgY2hhciAqZGVjaW1hbCk7CmV4dGVy
biBYbVRhYkxpc3QgCiAgWG1UYWJMaXN0UmVtb3ZlVGFicyhYbVRhYkxpc3Qgb2xkbGlzdCwgCgkJ
ICAgICAgQ2FyZGluYWwgKnBvc2l0aW9uX2xpc3QsIAoJCSAgICAgIENhcmRpbmFsIHBvc2l0aW9u
X2NvdW50KTsKZXh0ZXJuIFhtVGFiTGlzdCAKICBYbVRhYkxpc3RSZXBsYWNlUG9zaXRpb25zKFht
VGFiTGlzdCBvbGRsaXN0LCAKCQkJICAgIENhcmRpbmFsICpwb3NpdGlvbl9saXN0LCAKCQkJICAg
IFhtVGFiICp0YWJzLCAKCQkJICAgIENhcmRpbmFsIHRhYl9jb3VudCk7CmV4dGVybiBYbVRhYiBY
bVRhYkxpc3RHZXRUYWIoWG1UYWJMaXN0IHRhYmxpc3QsIENhcmRpbmFsIHBvc2l0aW9uKTsKZXh0
ZXJuIENhcmRpbmFsIFhtVGFiTGlzdFRhYkNvdW50KFhtVGFiTGlzdCB0YWJsaXN0KTsKZXh0ZXJu
IFhtVGFiTGlzdCBYbVRhYkxpc3RDb3B5KFhtVGFiTGlzdCB0YWJsaXN0LCBpbnQgb2Zmc2V0LCBD
YXJkaW5hbCBjb3VudCk7CmV4dGVybiB2b2lkIFhtVGFiTGlzdEZyZWUoWG1UYWJMaXN0IHRhYmxp
c3QpOwpleHRlcm4gWG1UYWJMaXN0IFhtVGFiTGlzdEluc2VydFRhYnMoWG1UYWJMaXN0IG9sZGxp
c3QsCgkJCQkgICAgIFhtVGFiICp0YWJzLCAKCQkJCSAgICAgQ2FyZGluYWwgdGFiX2NvdW50LCAK
CQkJCSAgICAgaW50IHBvc2l0aW9uKTsKIAoKIAoKZXh0ZXJuIFhtUmVuZGVyVGFibGUgWG1SZW5k
ZXJUYWJsZUN2dEZyb21Qcm9wKFdpZGdldCwgY2hhciAqcHJvcCwgdW5zaWduZWQgaW50IGxlbik7
CmV4dGVybiB1bnNpZ25lZCBpbnQgWG1SZW5kZXJUYWJsZUN2dFRvUHJvcChXaWRnZXQsIFhtUmVu
ZGVyVGFibGUgdGFibGUsIGNoYXIgKipwcm9wX3JldHVybik7CmV4dGVybiB2b2lkIFhtUmVuZGl0
aW9uVXBkYXRlKFhtUmVuZGl0aW9uIHJlbmRpdGlvbiwgQXJnTGlzdCBhcmdsaXN0LCBDYXJkaW5h
bCBhcmdjb3VudCk7CmV4dGVybiB2b2lkIFhtUmVuZGl0aW9uUmV0cmlldmUoWG1SZW5kaXRpb24g
cmVuZGl0aW9uLCAKCQkJCUFyZ0xpc3QgYXJnbGlzdCwKCQkJCUNhcmRpbmFsIGFyZ2NvdW50KTsK
ZXh0ZXJuIHZvaWQgWG1SZW5kaXRpb25GcmVlKFhtUmVuZGl0aW9uIHJlbmRpdGlvbik7CmV4dGVy
biBYbVJlbmRpdGlvbiBYbVJlbmRpdGlvbkNyZWF0ZShXaWRnZXQgd2lkZ2V0LAoJCQkJICAgICBY
bVN0cmluZ1RhZyB0YWcsCgkJCQkgICAgIEFyZ0xpc3QgYXJnbGlzdCwKCQkJCSAgICAgQ2FyZGlu
YWwgYXJnY291bnQpOwpleHRlcm4gWG1SZW5kaXRpb24gCiAgKlhtUmVuZGVyVGFibGVHZXRSZW5k
aXRpb25zKFhtUmVuZGVyVGFibGUgdGFibGUsIAoJCQkgICAgICBYbVN0cmluZ1RhZyAqdGFncywK
CQkJICAgICAgQ2FyZGluYWwgdGFnX2NvdW50KTsKZXh0ZXJuIFhtUmVuZGl0aW9uIFhtUmVuZGVy
VGFibGVHZXRSZW5kaXRpb24oWG1SZW5kZXJUYWJsZSB0YWJsZSwKCQkJCQkgICAgIFhtU3RyaW5n
VGFnIHRhZyk7CmV4dGVybiBpbnQgWG1SZW5kZXJUYWJsZUdldFRhZ3MoWG1SZW5kZXJUYWJsZSB0
YWJsZSwKCQkJCVhtU3RyaW5nVGFnICoqdGFnX2xpc3QpOwpleHRlcm4gdm9pZCBYbVJlbmRlclRh
YmxlRnJlZShYbVJlbmRlclRhYmxlIHRhYmxlKTsKZXh0ZXJuIFhtUmVuZGVyVGFibGUgWG1SZW5k
ZXJUYWJsZUNvcHkoWG1SZW5kZXJUYWJsZSB0YWJsZSwKCQkJCSAgICAgICBYbVN0cmluZ1RhZyAq
dGFncywgCgkJCQkgICAgICAgaW50IHRhZ19jb3VudCk7CmV4dGVybiBYbVJlbmRlclRhYmxlIAog
IFhtUmVuZGVyVGFibGVSZW1vdmVSZW5kaXRpb25zKFhtUmVuZGVyVGFibGUgb2xkdGFibGUsCgkJ
CQlYbVN0cmluZ1RhZyAqdGFncywgCgkJCQlpbnQgdGFnX2NvdW50KTsKZXh0ZXJuIFhtUmVuZGVy
VGFibGUgCiAgWG1SZW5kZXJUYWJsZUFkZFJlbmRpdGlvbnMoWG1SZW5kZXJUYWJsZSBvbGR0YWJs
ZSwgCgkJCSAgICAgWG1SZW5kaXRpb24gKnJlbmRpdGlvbnMsIAoJCQkgICAgIENhcmRpbmFsIHJl
bmRpdGlvbl9jb3VudCwgCgkJCSAgICAgWG1NZXJnZU1vZGUgbWVyZ2VfbW9kZSk7CgogCgogCgpl
eHRlcm4gV2lkZ2V0IFhtR2V0RGVzdGluYXRpb24oIAogICAgICAgICAgICAgICAgICAgICAgICBE
aXNwbGF5ICpkaXNwbGF5KSA7CgogCgogCgpleHRlcm4gQm9vbGVhbiBYbUlzVHJhdmVyc2FibGUo
IAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgd2lkKSA7CmV4dGVybiBYbVZpc2liaWxp
dHkgWG1HZXRWaXNpYmlsaXR5KCAKICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHdpZCkg
OwpleHRlcm4gV2lkZ2V0IFhtR2V0VGFiR3JvdXAoIAogICAgICAgICAgICAgICAgICAgICAgICBX
aWRnZXQgd2lkKSA7CmV4dGVybiBXaWRnZXQgWG1HZXRGb2N1c1dpZGdldCggCiAgICAgICAgICAg
ICAgICAgICAgICAgIFdpZGdldCB3aWQpIDsKZXh0ZXJuIEJvb2xlYW4gWG1Qcm9jZXNzVHJhdmVy
c2FsKCAKICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHcsCiAgICAgICAgICAgICAgICAg
ICAgICAgIFhtVHJhdmVyc2FsRGlyZWN0aW9uIGRpcikgOwpleHRlcm4gdm9pZCBYbUFkZFRhYkdy
b3VwKCAKICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHRhYkdyb3VwKSA7CmV4dGVybiB2
b2lkIFhtUmVtb3ZlVGFiR3JvdXAoIAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgdykg
OwoKIAoKIAoKCn0gICAKCgogCgoKCiMgMSAiL3Vzci9kdC9pbmNsdWRlL1htL1ZlbmRvclMuaCIg
MQogCgoKCgoKIAogCgogCiAKIAoKIAoKIAoKIAoKCgoKIyAxICIvdXNyL2R0L2luY2x1ZGUvWG0v
WG0uaCIgMQogCgoKCgoKIAogCgoKCgoKCgoKCgojIDM0ODAgIi91c3IvZHQvaW5jbHVkZS9YbS9Y
bS5oIgoKICAKIyAyMyAiL3Vzci9kdC9pbmNsdWRlL1htL1ZlbmRvclMuaCIgMgoKCgpleHRlcm4g
IkMiIHsKCgoKCgoKCnR5cGVkZWYgc3RydWN0IF9YbVZlbmRvclNoZWxsUmVjICpYbVZlbmRvclNo
ZWxsV2lkZ2V0Owp0eXBlZGVmIHN0cnVjdCBfWG1WZW5kb3JTaGVsbENsYXNzUmVjICpYbVZlbmRv
clNoZWxsV2lkZ2V0Q2xhc3M7CmV4dGVybiAgV2lkZ2V0Q2xhc3MgdmVuZG9yU2hlbGxXaWRnZXRD
bGFzczsKCgogCgpleHRlcm4gQm9vbGVhbiBYbUlzTW90aWZXTVJ1bm5pbmcoIAogICAgICAgICAg
ICAgICAgICAgICAgICBXaWRnZXQgc2hlbGwpIDsKCiAKCgoKfSAgIAoKCgogCiMgMjAwMCAiL3Vz
ci9kdC9pbmNsdWRlL1htL1htLmgiIDIKCiMgMSAiL3Vzci9kdC9pbmNsdWRlL1htL1htSW0uaCIg
MQogCiAKCgoKCgogCiAKCiAKCgoKIyAxICIvdXNyL2R0L2luY2x1ZGUvWG0vWG0uaCIgMQogCgoK
CgoKIAogCgoKCgoKCgoKCgojIDM0ODAgIi91c3IvZHQvaW5jbHVkZS9YbS9YbS5oIgoKICAKIyAx
NSAiL3Vzci9kdC9pbmNsdWRlL1htL1htSW0uaCIgMgoKCgpleHRlcm4gIkMiIHsKCgogCgpleHRl
cm4gdm9pZCBYbUltUmVnaXN0ZXIoIAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgdywK
CQkJdW5zaWduZWQgaW50IHJlc2VydmVkKSA7CmV4dGVybiB2b2lkIFhtSW1VbnJlZ2lzdGVyKCAK
ICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHcpIDsKZXh0ZXJuIHZvaWQgWG1JbVNldEZv
Y3VzVmFsdWVzKCAKICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHcsCiAgICAgICAgICAg
ICAgICAgICAgICAgIEFyZ0xpc3QgYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGlu
YWwgbnVtX2FyZ3MpIDsKZXh0ZXJuIHZvaWQgWG1JbVNldFZhbHVlcyggCiAgICAgICAgICAgICAg
ICAgICAgICAgIFdpZGdldCB3LAogICAgICAgICAgICAgICAgICAgICAgICBBcmdMaXN0IGFyZ3Ms
CiAgICAgICAgICAgICAgICAgICAgICAgIENhcmRpbmFsIG51bV9hcmdzKSA7CmV4dGVybiB2b2lk
IFhtSW1VbnNldEZvY3VzKCAKICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHcpIDsKZXh0
ZXJuIFhJTSBYbUltR2V0WElNKCAKICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHcpIDsK
ZXh0ZXJuIHZvaWQgWG1JbUNsb3NlWElNKAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQg
dykgOwoKZXh0ZXJuIGludCBYbUltTWJMb29rdXBTdHJpbmcoIAogICAgICAgICAgICAgICAgICAg
ICAgICBXaWRnZXQgdywKICAgICAgICAgICAgICAgICAgICAgICAgWEtleVByZXNzZWRFdmVudCAq
ZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwKICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IG5ieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgS2V5U3ltICprZXlz
eW0sCiAgICAgICAgICAgICAgICAgICAgICAgIGludCAqc3RhdHVzKSA7CmV4dGVybiB2b2lkIFht
SW1WYVNldEZvY3VzVmFsdWVzKCAKICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHcsCiAg
ICAgICAgICAgICAgICAgICAgICAgIC4uLikgOwpleHRlcm4gdm9pZCBYbUltVmFTZXRWYWx1ZXMo
IAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgdywKICAgICAgICAgICAgICAgICAgICAg
ICAgLi4uKSA7CmV4dGVybiBYSUMgWG1JbUdldFhJQygKCQkgICAgICAgIFdpZGdldCAJCXcsCgoJ
CSAgICAgICAgdW5zaWduZWQgaW50IAlpbnB1dF9wb2xpY3ksCgoKCgkJICAgICAgICBBcmdMaXN0
CQlhcmdzLAoJCSAgICAgICAgQ2FyZGluYWwJbnVtX2FyZ3MpIDsKZXh0ZXJuIFhJQyBYbUltU2V0
WElDKAoJCQlXaWRnZXQgdywKCQkJWElDICAgIGlucHV0X2NvbnRleHQpIDsKZXh0ZXJuIHZvaWQg
WG1JbUZyZWVYSUMoCgkJCVdpZGdldCB3LAoJCQlYSUMgICAgaW5wdXRfY29udGV4dCkgOwoKZXh0
ZXJuIHZvaWQgWG1JbU1iUmVzZXRJQygKCQkJV2lkZ2V0IHcsCgkJCWNoYXIgKiptYik7CgogCgoK
fSAgIAoKCgogCiMgMjAwMSAiL3Vzci9kdC9pbmNsdWRlL1htL1htLmgiIDIKCgoKCgoKCmVudW0g
ewogIFhtSU5ESUNBVE9SX05PTkUgICAgICA9IDAsIAogIFhtSU5ESUNBVE9SX0ZJTEwgICAgICA9
IDEsCSAKICBYbUlORElDQVRPUl9CT1gJPSAyNTUsCSAKICBYbUlORElDQVRPUl9DSEVDSyAgICAg
PSAweDEwICwKICBYbUlORElDQVRPUl9DSEVDS19CT1ggPSAweDEwICArIDB4MDEgLAogIFhtSU5E
SUNBVE9SX0NST1NTICAgICA9IDB4MjAgLAogIFhtSU5ESUNBVE9SX0NST1NTX0JPWCA9IDB4MjAg
ICsgMHgwMSAKfTsKCmVudW0geyBYbVVOU0VULCBYbVNFVCwgWG1JTkRFVEVSTUlOQVRFIH07CmVu
dW0geyBYbVRPR0dMRV9CT09MRUFOLCBYbVRPR0dMRV9JTkRFVEVSTUlOQVRFIH07CnR5cGVkZWYg
dW5zaWduZWQgY2hhciBYbVRvZ2dsZUJ1dHRvblN0YXRlOwoKIAp0eXBlZGVmIGVudW0geyBFZGl0
RG9uZSwgRWRpdEVycm9yLCBFZGl0UmVqZWN0IH0gWG1UZXh0U3RhdHVzOwoKIAplbnVtIHsgWG1F
WFRFUk5BTF9ISUdITElHSFQsIFhtSU5URVJOQUxfSElHSExJR0hUIH07CgogCgoKZW51bSB7IFht
UEFUSF9NT0RFX0ZVTEwsIFhtUEFUSF9NT0RFX1JFTEFUSVZFIH07CmVudW0geyBYbUZJTFRFUl9O
T05FLCBYbUZJTFRFUl9ISURERU5fRklMRVN9IDsKICAKIyAzNDc4ICIvdXNyL2R0L2luY2x1ZGUv
WG0vWG0uaCIKCgoKICAKIyAxOSAiLi4vLi4vaW5jbHVkZS9saWJpbmMvbGliZHJhd2luZy5oIiAy
CgoKCgpjbGFzcwlXaW5kOwpjbGFzcwlGdW5uZWw7CmNsYXNzCUdyb3VwOwpjbGFzcwlJdGVtOwpj
bGFzcwlTeW5jOwpjbGFzcwlTbmFwOwpjbGFzcyAgIEFsaWduOwpjbGFzcwlTY3JlZW5EYXRhOwpj
bGFzcwlCb2FyZERhdGE7CmNsYXNzCUNsb3NlRGF0YTsKY2xhc3MJU2NyZWVuRHJhd2luZzsKY2xh
c3MJRHJhd2luZ1N0cmluZzsJCSAKY2xhc3MJY29uZmlndXJhdGlvbjsKY2xhc3MJVUk7CmNsYXNz
CVNpZGVudjsKY2xhc3MJTW91c2U7CmNsYXNzCU1vdG9yOwpjbGFzcwlNb3ZlY2FtOwpjbGFzcwlT
aG93U25hcDsKY2xhc3MJV2luZG93TGlzdDsKY2xhc3MJSW1hZ2VCdWY7CgpleHRlcm4gU2NyZWVu
RHJhd2luZyAgICpnRHJhd2luZzsKZXh0ZXJuIFVJICAgICAgICAgICAgICAqZ1VpOwpleHRlcm4g
TW91c2UgICAgICAgICAgICptb3VzZTsKZXh0ZXJuIE1vdG9yICAgICAgICAgICAqZ01vdG9yOwpl
eHRlcm4gTW92ZWNhbSAgICAgICAgICptb3ZlY2FtOwpleHRlcm4gY29uZmlndXJhdGlvbiAgICpn
Q2ZnOwpleHRlcm4gU2hvd1NuYXAgICAgICAgICpnU2hvd1NuYXA7CgoKIAoKCgoKCgoKIAoKCgoK
Y29uc3QJaW50CWtCeUxldmVsT25lCT0gMHgxOwpjb25zdAlpbnQJa0J5TGV2ZWxUd28JPSAweDI7
CmNvbnN0CWludAlrQnlOYW1lCQk9IDB4NDsKY29uc3QJaW50CWtBbGdvRWRpdAk9IDB4ODsKY29u
c3QJaW50CWtBbGdvUnVsZXMJPSAweDEwOwpjb25zdAlpbnQJa0ZpbmRTdHlsZQk9IGtBbGdvUnVs
ZXMgfCBrQWxnb0VkaXQgfAoJCQkJCSAgICBrQnlOYW1lIHwga0J5TGV2ZWxUd28gfCBrQnlMZXZl
bE9uZTsKY29uc3QJaW50CWtEb250Rm9sbG93CT0gMHgyMDsKCgogCgoKCgoKCgpzdGF0aWMgY29u
c3QgaW50IGtNaW5Jd2luV2lkdGggPSA1OwpzdGF0aWMgY29uc3QgaW50IGtNaW5Jd2luSGVpZ2h0
ID0gNTsKCgoKCnRlbXBsYXRlPGNsYXNzIFQ+CmlubGluZSB2b2lkCndhaXRfZm9yKFQgKndoYXQs
IGludCBpbml0KQp7CiAgICAqd2hhdCA9IHN0YXRpY19jYXN0PFQ+KGluaXQpOwogICAgZG8gewoJ
WHRBcHBQcm9jZXNzRXZlbnQoZ0RyYXdpbmctPmFwcF9jb250ZXh0KCksICgxICB8IDIgIHwgNCAg
fCA4ICkgKTsKICAgIH0gd2hpbGUgKCp3aGF0ID09IHN0YXRpY19jYXN0PFQ+KGluaXQpKTsKfQoK
ZXh0ZXJuIFdpZGdldCBjcmVhdGVfYnV0dG9uX3RvcCAoV2lkZ2V0IHBhcmVudCk7CgoKCiAKCmV4
dGVybiB2b2lkIHdhaXRfZm9yKFdpZGdldCBzaGVsbCk7CmV4dGVybiBsb25nIG1pbm1heChsb25n
IG1pbl92YWwsIGxvbmcgdmFsLCBsb25nIG1heF92YWwpOwpleHRlcm4gdm9pZCB1cGRhdGVfY3Vy
cmVudF9kYXRhYmFzZV9uYW1lKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKZXh0ZXJuIHZvaWQgcGFu
aWMoY29uc3QgY2hhciAqbXNnKTsKZXh0ZXJuIHZvaWQgcGFuaWMoY29uc3Qgc3RyaW5nJiBtc2cp
OwpleHRlcm4gdm9pZCBkb19wdXRtZXMoY29uc3Qgc3RyaW5nJiBtc2cpOwpleHRlcm4gdm9pZCBk
b19wdXRtZXMoY29uc3QgY2hhciAqbXNnKTsKZXh0ZXJuIHZvaWQgYXBwZW5kX21lcyhjb25zdCBj
aGFyICptc2cpOwpleHRlcm4gdm9pZCBtY29tX2Z4X3BhcnQoKTsKZXh0ZXJuIHZvaWQgc2V0dXBf
WHNjcmVlbih2b2lkKTsKZXh0ZXJuIHZvaWQgZHJhd19yZXNpemVfY2IoV2lkZ2V0IHcsIFh0UG9p
bnRlciBudWxkYXRhLCBYdFBvaW50ZXIgY2FsbGJhY2tfZGF0YSk7CmV4dGVybiB2b2lkIGNoZWNr
X2V4aXQoWEV2ZW50ICogZXZlbnQpOwpleHRlcm4gdm9pZCBmaXhzZWcoY29vcl90ICpwMSwgY29v
cl90ICpwMiwgaW50IHIxLCBpbnQgcjIpOwpleHRlcm4gdm9pZCBkb19jc25hcChib29sIGRvX3Vw
ZGF0ZSk7CmV4dGVybiB2b2lkIHN0X3NpZGUoKTsKZXh0ZXJuIHZvaWQgY3JlYXRlX2NvbW1vbl9z
aGVsbHMoV2lkZ2V0IHBhcmVudCk7CmV4dGVybiB2b2lkIGdldF9kYndpbihjb25zdCBXaW5kICpT
bmFwV2luZG93LCBXaW5kICp3aW4sIEl0ZW0gKkRpKTsKZXh0ZXJuIHZvaWQgQUJDaW5pdCgpOwpl
eHRlcm4gU2NyZWVuRGF0YSAqIGZpbmRfdGlsZShpbnQgeCwgaW50IHkpOwpleHRlcm4gdm9pZCBi
b2FyZF9mbGlwX2NiIChXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYdFBvaW50ZXIg
eHRfY2FsbF9kYXRhICk7CmV4dGVybiB2b2lkIGRvX3JvdGF0ZV9jYihXaWRnZXQgdywgWHRQb2lu
dGVyIGFuZ3AsIFh0UG9pbnRlciB4dF9jYWxsX2RhdGEpOwpleHRlcm4gdm9pZCBidXR0b25fc2V0
X2J1dHRvbl9jYiAoV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWHRQb2ludGVyIHh0
X2NhbGxfZGF0YSk7CmV4dGVybiB2b2lkIGJ1dHRvbl9zaGVsbF91cCgpOwpleHRlcm4gYm9vbCBi
dXR0b25fc2hlbGxfZG93bigpOwpleHRlcm4gdm9pZCBzZXRfc3RhZ2VfYnV0dG9uX2xhYmVscyhj
aGFyICpsZWZ0LCBjaGFyICptaWRkbGUsIGNoYXIgKnJpZ2h0KTsKZXh0ZXJuIHZvaWQgc2V0X2J1
dHRvbl9zaGVsbF9sYWJlbHMoY2hhciAqbGVmdCwgY2hhciAqbWlkZGxlLCBjaGFyICpyaWdodCk7
CmV4dGVybiB2b2lkIGNyZWF0ZV9zdGFnZV9tb3ZlKFdpZGdldCBwYXJlbnQpOwpleHRlcm4gdm9p
ZCBzZXRfbXVsdGlwbGllcl90ZXh0KHZvaWQpOwpleHRlcm4gdm9pZCBidXR0b25fc2V0X3NjYWxl
X2NiKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFh0UG9pbnRlciB4dF9jYWxsX2Rh
dGEpOwpleHRlcm4gdm9pZCBidXR0b25fc3RvcF9jb250aW5pb3VzX21vdmVfY2IgKFdpZGdldCB3
LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFh0UG9pbnRlciB4dF9jYWxsX2RhdGEgKTsKZXh0ZXJu
IHZvaWQgYnV0dG9uX3NldHVwX2NvbnRpbmlvdXNfbW92ZV9jYihXaWRnZXQgdywgWHRQb2ludGVy
IGNsaWVudF9kYXRhLCBYdFBvaW50ZXIgeHRfY2FsbF9kYXRhKTsKZXh0ZXJuIHZvaWQgc2V0X2J1
dHRvbl9tb3ZlYnlfbGFiZWxzKCk7CmV4dGVybiB2b2lkIGNsZWFyX2tleXModm9pZCk7CmV4dGVy
biB2b2lkIHByb2Nlc3Nfa2V5cmVsZWFzZShYRXZlbnQgKmV2ZW50KTsKZXh0ZXJuIHZvaWQgcHJv
Y2Vzc19rZXlwcmVzcyhYRXZlbnQgKmV2ZW50KTsKZXh0ZXJuIHZvaWQgc2V0X2hvbWVfbGFiZWwo
Y29uZmlndXJhdGlvbiYgY2ZnKTsKZXh0ZXJuIHZvaWQgYnV0dG9uX3NldF9zY2FsZV9sYWJlbF9j
YihXaWRnZXQgdywgWHRQb2ludGVyIHUsIFh0UG9pbnRlciB4KTsKZXh0ZXJuIHZvaWQgY29uZmly
bV95ZXNub19jYiAoV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWHRQb2ludGVyIHh0
X2NhbGxfZGF0YSApOwpleHRlcm4gaW50IGdldG5veWVzKGNvbnN0IGNoYXIgKm1zZyk7CmV4dGVy
biBpbnQgZ2V0eWVzbm8oY29uc3Qgc3RyaW5nJiBtc2cpOwpleHRlcm4gaW50IGdldHllc25vKGNv
bnN0IGNoYXIgKm1zZyk7CmV4dGVybiB2b2lkIGRvX3Njcm9sbChYdFBvaW50ZXIgd2luX2RhdGEs
IFh0SW50ZXJ2YWxJZCAqaWQpOwpleHRlcm4gdm9pZCBjYW5jZWxfbXZwKHZvaWQpOwpleHRlcm4g
dm9pZCBkb19tdnAodm9pZCk7CmV4dGVybiB2b2lkIGZpeF9leHRlbnNpb24oc3RyaW5nJiBmbiwg
aW50IGxvYWRfdHlwZSk7CmV4dGVybiB2b2lkIGZpeF9leHRlbnNpb24oY2hhciAqZm4sIGludCBs
b2FkX3R5cGUpOwpleHRlcm4gaW50IGZzX3NhdmVfZmlsZShpbnQgc2F2aW5nX2ZpbGVfdHlwZSwg
Y29uc3QgY2hhciAqZm4pOwpleHRlcm4gdm9pZCBkaXJlY3RvcnlfcmV0dXJuX251bGxfY2IoV2lk
Z2V0LCBYdFBvaW50ZXIsIFh0UG9pbnRlcik7CmV4dGVybiB2b2lkIGRpcmVjdG9yeV9oZWxwX2Ni
KFdpZGdldCB3LCBYdFBvaW50ZXIsIFh0UG9pbnRlcik7CmV4dGVybiB2b2lkIGRpcmVjdG9yeV9y
ZXR1cm5fc2VsZWN0aW9uX2NiKFdpZGdldCwgWHRQb2ludGVyLCBYdFBvaW50ZXIpOwpleHRlcm4g
dm9pZCBkaXJlY3Rvcnlfbm9tYXRjaF9jYihXaWRnZXQgdywgWHRQb2ludGVyLCBYdFBvaW50ZXIp
OwpleHRlcm4gdm9pZCBmaWxlX3NlYXJjaF9wcm9jKFdpZGdldCBmc2IsIFhtRmlsZVNlbGVjdGlv
bkJveENhbGxiYWNrU3RydWN0ICp4KTsKZXh0ZXJuIGNvbnN0IGNoYXIgKiBkb19kaXJlY3Rvcnko
Y29uc3QgY2hhciAqZmlsdGVyLCBjb25zdCBjaGFyICpsYWJlbCwgbG9uZyBsb2FkX3NhdmVfdHlw
ZSwgY29uc3QgY2hhciAqY3VyX3NlbGVjdGlvbiwgY29uc3QgY2hhciAqaGVscCwgYm9vbCAmc2F2
ZV9hc19mbGcpOwpleHRlcm4gdm9pZCBkcmF3X2lucHV0X2NiKFdpZGdldCB3LCBYdFBvaW50ZXIg
bnVsZGF0YSwgWEV2ZW50ICogZXZlbnQsIEJvb2xlYW4gKiBjb250aW51ZV90b19kaXNwYXRjaCk7
CmV4dGVybiB2b2lkIGVycm9yX2FkZF9lcnJvcl9jYWxsYmFja3Modm9pZCAoKmVycm9yKShXaWRn
ZXQsIFh0UG9pbnRlciwgWHRQb2ludGVyKSwgdm9pZCAoKmNhbmNlbCkoV2lkZ2V0LCBYdFBvaW50
ZXIsIFh0UG9pbnRlciksIHZvaWQgKCpzdGFydHVwKSh2b2lkKSk7CmV4dGVybiB2b2lkIGVycm9y
X3JlbW92ZV9lcnJvcl9jYWxsYmFja3Modm9pZCAoKmVycm9yKShXaWRnZXQsIFh0UG9pbnRlciwg
WHRQb2ludGVyKSwgdm9pZCAoKmNhbmNlbCkoV2lkZ2V0LCBYdFBvaW50ZXIsIFh0UG9pbnRlcikp
OwpleHRlcm4gdm9pZCBlcnJvcl9oZWxwX2NiIChXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVudF9k
YXRhLCBYdFBvaW50ZXIgeHRfY2FsbF9kYXRhICk7CmV4dGVybiB2b2lkIG1vdDJzbndpbihjb25z
dCBTaWRlbnYgKnNpZGVudiwgY29uc3QgU3luYyAqRHN5LCBXaW5kICpTbmFwV2luZG93KTsKZXh0
ZXJuIHZvaWQgYWRkX3N0cmluZ190b193aW5kb3coY29uc3QgY2hhciAqYnVmKTsKZXh0ZXJuIHZv
aWQgZnBfYWRkX2l0ZW0oY29uc3QgR3JvdXAgKkJnLCBjb25zdCBjaGFyICpzdHIpOwpleHRlcm4g
dm9pZCBmcF9hcHBseV9jYiAoV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWHRQb2lu
dGVyIHh0X2NhbGxfZGF0YSk7CmV4dGVybiB2b2lkIGZwX2NhbmNlbF9jYiAoV2lkZ2V0IHcsIFh0
UG9pbnRlciBjbGllbnRfZGF0YSwgWHRQb2ludGVyIHh0X2NhbGxfZGF0YSApOwpleHRlcm4gdm9p
ZCBmcF9va19jYiAoV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWHRQb2ludGVyIHh0
X2NhbGxfZGF0YSApOwpleHRlcm4gdm9pZCBmcF9maWxsX3dpbmRvd19jYiAoV2lkZ2V0IHcsIFh0
UG9pbnRlciBjbGllbnRfZGF0YSwgWHRQb2ludGVyIHh0X2NhbGxfZGF0YSApOwpleHRlcm4gdm9p
ZCBmcF9zaG93X2FsbF9lbnRyaWVzX2NiKFdpZGdldCB3LCBYdFBvaW50ZXIgdV9kYXRhLCBYdFBv
aW50ZXIgeF9kYXRhKTsKZXh0ZXJuIHZvaWQgSF9jb252X2ltYWdlX2J1ZmZlciggSW1hZ2VCdWYg
KiBidWYgKTsKZXh0ZXJuIGludCBIX2NvbnYzKGJvb2wgdXNlX2NvbW1vbl9mcmFtZSk7CmV4dGVy
biBpbnQgSF9jb252NShib29sIHVzZV9jb21tb25fZnJhbWUpOwpleHRlcm4gdm9pZCBoX2NvbnYo
aW50IG9mZnMpOwpleHRlcm4gaW50IHJlYWRzbmFwKGludCBzbmFwbm8sIGludCBmaWR1KTsKZXh0
ZXJuIGludCBkb19tb3RpZl9rZXlicmQoY2hhciAqZGF0YSwgaW50IGxlbmcsIGNvbnN0IGNoYXIg
KmxhYmVsLCBjaGFyICpoZWxwX2ZpbGUpOwpleHRlcm4gYm9vbCBtYXRjaChjb25zdCBjaGFyICps
aW5lLCBjb25zdCBjaGFyICpwYXQpOwpleHRlcm4gdm9pZCBwcm9jZXNzX2V2ZW50cyh2b2lkKTsK
ZXh0ZXJuIHZvaWQgbW91c2VfYnV0dG9uX2NiKFdpZGdldCB3LCBYdFBvaW50ZXIgbnVsZGF0YSwg
WEV2ZW50ICogZXZlbnQsIEJvb2xlYW4gKiBjb250aW51ZV90b19kaXNwYXRjaCk7CmV4dGVybiB2
b2lkIG1vdXNlX21vdGlvbl9jYihXaWRnZXQgdywgWHRQb2ludGVyIG51bGRhdGEsIFhFdmVudCAq
IGV2ZW50LCBCb29sZWFuICogY29udGludWVfdG9fZGlzcGF0Y2gpOwpleHRlcm4gdm9pZCBmaXhf
b3JpZW50KCk7CmV4dGVybiB2b2lkIHN0X3BpbnModmVjdG9yIDxJdGVtICo+ICZwaW5zLCBHcm91
cCAqRGcpOwpleHRlcm4gdm9pZCBjbHJfcG5hbWUodm9pZCk7CmV4dGVybiB2b2lkIGN1c3RvbV9k
cmF3aW5nX3Jlc291cmNlcyhXaWRnZXQgcGFyZW50KTsKZXh0ZXJuIGludCBzYXZlX2NoYW5nZXMo
Ym9vbCBjYW5fY2FuY2VsID0gdHJ1ZSk7CmV4dGVybiB2b2lkIHNoX2ZsaXAoV2luZCAqd2luLCBi
b29sIGRyYXcpOwpleHRlcm4gdm9pZCB2YWxpZGF0ZV95bl9jYiAoV2lkZ2V0IHcsIFh0UG9pbnRl
ciBjbGllbnRfZGF0YSwgWHRQb2ludGVyIHh0X2NhbGxfZGF0YSApOwpleHRlcm4gdm9pZCB2YWxp
ZGF0ZV9udW1iZXJfY2IgKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFh0UG9pbnRl
ciB4dF9jYWxsX2RhdGEgKTsKZXh0ZXJuIHZvaWQgdmFsaWRhdGVfb3JpZW50X2NiIChXaWRnZXQg
dywgWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYdFBvaW50ZXIgeHRfY2FsbF9kYXRhICk7CmV4dGVy
biB2b2lkIHZhbGlkYXRlX3Zpc2libGVfY2IgKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2Rh
dGEsIFh0UG9pbnRlciB4dF9jYWxsX2RhdGEgKTsKZXh0ZXJuIGJvb2wgd19kaXNqb2ludChjb25z
dCBXaW5kICp3MSwgY29uc3QgV2luZCAqdzIpOwpleHRlcm4gdm9pZCBjbGlwX3dpbmRvdyhXaW5k
ICp3aG8sIGNvbnN0IFdpbmQgKnBhcmVudCk7CmV4dGVybiB2b2lkIGNoZWNrX3hfZXZlbnRzKCk7
CgojIDEyICJzYXZlX3NuYXAuYyIgMgoKIyAxICIuLi8uLi9pbmNsdWRlL2xpYmluYy9YR3JhcGhp
Y3MuSCIgMQoKCgogCgoKCgoKCgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCgoKCiMgMSAiLi4vLi4v
aW5jbHVkZS9sb2NhbGluYy9XaW5kLkgiIDEKCgoKCgoKIAogCiAKCgoKCgoKIAoKCgogCgoKCgoK
CiAKCgoKCgogCgoKCgoKIApzdHJ1Y3Qgc3dpbmQgewogICAgY29vcl90IHVwLCBsZiwgZG4sIHJ0
Owp9OwoKIApzdHJ1Y3QgY3dpbmQgewogICAgY29vcl90IHgsIHksIGR4LCBkeTsKfTsKCmNsYXNz
IFdpbmQgewpwdWJsaWM6CiAgICBXaW5kKCkge30KICAgIFdpbmQoaW50KTsKICAgIFdpbmQoY29u
c3QgV2luZCYpOwogICAgV2luZChpbnQgdXAsIGludCBsZiwgaW50IGRuLCBpbnQgcnQpOwoKICAg
IHVuaW9uIHsKCXN0cnVjdCBzd2luZCBzdzsKCXN0cnVjdCBjd2luZCBjdzsKICAgIH0gX1dpbjsK
CiAgICBXaW5kJiBvcGVyYXRvciA9IChjb25zdCBXaW5kJiByaWdodCk7CiAgICBib29sICBvcGVy
YXRvciAhPSAoY29uc3QgV2luZCYgcmlnaHQpOwoKICAgIHZvaWQgczJjKCk7CiAgICB2b2lkIGMy
cygpOwogICAgdm9pZCBzMmMoV2luZCAqKSBjb25zdDsKICAgIHZvaWQgYzJzKFdpbmQgKikgY29u
c3Q7CgogICAgYm9vbCBwX2luc2lkZShjb29yX3QsIGNvb3JfdCkgY29uc3Q7CiAgICBib29sIHdf
aW5zaWRlKGNvbnN0IFdpbmQgKikgY29uc3Q7CiAgICBib29sIG92ZXJsYXAoY29uc3QgV2luZCAq
KSBjb25zdDsKICAgIGJvb2wgd19vbnRvcChXaW5kICopIGNvbnN0OwoKICAgIHZvaWQgbGltaXQo
Y29uc3QgV2luZCAqKTsKCiAgICB2b2lkIHJvdGF0ZShpbnQpOwoKICAgIHZvaWQgZ3Jvdyhjb29y
X3QgZHgsIGNvb3JfdCBkeSk7CgogICAgdm9pZCBjb21wZW5zYXRlKCk7CiAgICB2b2lkIHVuX2Nv
bXBlbnNhdGUoKTsKCiAgICB2b2lkIHJvdGF0ZV9zZXRfc2NhbGUoKTsKICAgIHZvaWQgZml4dXBf
cm90YXRlX3dpbigpOwoKICAgIHZvaWQgZmluZF9ib2FyZF9zaXplKCk7CgogICAgdm9pZCBkdW1w
KGNvbnN0IGNoYXIgKnMgPSAiZHVtcDoiKSBjb25zdDsKCgoKfTsKCmlubGluZSBXaW5kOjpXaW5k
KGludCkKewogICAgX1dpbi5jdy54ID0gX1dpbi5jdy55ID0gX1dpbi5jdy5keCA9IF9XaW4uY3cu
ZHkgPSAwOwp9CgppbmxpbmUgV2luZDo6V2luZChjb25zdCBXaW5kJiBvcmlnKQp7CiAgICBfV2lu
LnN3LnVwID0gb3JpZy5fV2luLnN3LnVwOwogICAgX1dpbi5zdy5sZiA9IG9yaWcuX1dpbi5zdy5s
ZjsKICAgIF9XaW4uc3cuZG4gPSBvcmlnLl9XaW4uc3cuZG47CiAgICBfV2luLnN3LnJ0ID0gb3Jp
Zy5fV2luLnN3LnJ0Owp9CgppbmxpbmUgV2luZDo6V2luZChpbnQgdXAsIGludCBsZiwgaW50IGRu
LCBpbnQgcnQpCnsKICAgIF9XaW4uc3cudXAgPSB1cDsKICAgIF9XaW4uc3cubGYgPSBsZjsKICAg
IF9XaW4uc3cuZG4gPSBkbjsKICAgIF9XaW4uc3cucnQgPSBydDsKfQoKaW5saW5lIFdpbmQmIFdp
bmQ6Om9wZXJhdG9yID0gKGNvbnN0IFdpbmQmIHJpZ2h0KQp7CiAgICBpZiAodGhpcyA9PSAmcmln
aHQpCglyZXR1cm4oKnRoaXMpOwogICAgCiAgICBfV2luLnN3LnVwID0gcmlnaHQuX1dpbi5zdy51
cDsKICAgIF9XaW4uc3cubGYgPSByaWdodC5fV2luLnN3LmxmOwogICAgX1dpbi5zdy5kbiA9IHJp
Z2h0Ll9XaW4uc3cuZG47CiAgICBfV2luLnN3LnJ0ID0gcmlnaHQuX1dpbi5zdy5ydDsKICAgIHJl
dHVybigqdGhpcyk7Cn0KCmlubGluZSB2b2lkCldpbmQ6OnMyYygpCnsKICAgIFdpbmQgdzIoKChs
b25nKSBfV2luLnN3LmRuICArIChsb25nKSBfV2luLnN3LnVwICkgLyAyLAoJICAgICgobG9uZykg
X1dpbi5zdy5ydCAgKyAobG9uZykgX1dpbi5zdy5sZiApIC8gMiwKCQlfV2luLnN3LmRuICAtIF9X
aW4uc3cudXAgLAoJCV9XaW4uc3cucnQgIC0gX1dpbi5zdy5sZiApOwogICAgKnRoaXMgPSB3MjsK
fQoKaW5saW5lIHZvaWQKV2luZDo6YzJzKCkKewogICAgV2luZCB3MjsKICAgIHcyLiBfV2luLnN3
LnVwICA9IF9XaW4uY3cueCAgLSAoX1dpbi5jdy5keCAgLyAyKTsKICAgIHcyLiBfV2luLnN3Lmxm
ICA9IF9XaW4uY3cueSAgLSAoX1dpbi5jdy5keSAgLyAyKTsKICAgIHcyLiBfV2luLnN3LmRuICA9
IHcyLiBfV2luLnN3LnVwICArIF9XaW4uY3cuZHggOwogICAgdzIuIF9XaW4uc3cucnQgID0gdzIu
IF9XaW4uc3cubGYgICsgX1dpbi5jdy5keSA7CiAgICAqdGhpcyA9IHcyOwp9CgppbmxpbmUgdm9p
ZApXaW5kOjpzMmMoV2luZCAqcmV0KSBjb25zdAp7CiAgICByZXQtPiBfV2luLmN3LnggID0gKChs
b25nKSBfV2luLnN3LmRuICArIChsb25nKSBfV2luLnN3LnVwICkgLyAyOwogICAgcmV0LT4gX1dp
bi5jdy55ICA9ICgobG9uZykgX1dpbi5zdy5ydCAgKyAobG9uZykgX1dpbi5zdy5sZiApIC8gMjsK
ICAgIHJldC0+IF9XaW4uY3cuZHggID0gX1dpbi5zdy5kbiAgLSBfV2luLnN3LnVwIDsKICAgIHJl
dC0+IF9XaW4uY3cuZHkgID0gX1dpbi5zdy5ydCAgLSBfV2luLnN3LmxmIDsKfQoKaW5saW5lIHZv
aWQKV2luZDo6YzJzKFdpbmQgKnJldCkgY29uc3QKewogICAgcmV0LT4gX1dpbi5zdy51cCAgPSBf
V2luLmN3LnggIC0gKF9XaW4uY3cuZHggIC8gMik7CiAgICByZXQtPiBfV2luLnN3LmxmICA9IF9X
aW4uY3cueSAgLSAoX1dpbi5jdy5keSAgLyAyKTsKICAgIHJldC0+IF9XaW4uc3cuZG4gID0gcmV0
LT4gX1dpbi5zdy51cCAgKyBfV2luLmN3LmR4IDsKICAgIHJldC0+IF9XaW4uc3cucnQgID0gcmV0
LT4gX1dpbi5zdy5sZiAgKyBfV2luLmN3LmR5IDsKfQoKaW5saW5lIHZvaWQKV2luZDo6bGltaXQo
Y29uc3QgV2luZCAqcGFyZW50KQp7CiAgICBpZiAoX1dpbi5zdy5ydCAgPiBwYXJlbnQtPiBfV2lu
LnN3LnJ0ICkKCV9XaW4uc3cucnQgID0gcGFyZW50LT4gX1dpbi5zdy5ydCA7CiAgICBpZiAoX1dp
bi5zdy5sZiAgPCBwYXJlbnQtPiBfV2luLnN3LmxmICkKCV9XaW4uc3cubGYgID0gcGFyZW50LT4g
X1dpbi5zdy5sZiA7CiAgICBpZiAoX1dpbi5zdy5kbiAgPiBwYXJlbnQtPiBfV2luLnN3LmRuICkK
CV9XaW4uc3cuZG4gID0gcGFyZW50LT4gX1dpbi5zdy5kbiA7CiAgICBpZiAoX1dpbi5zdy51cCAg
PCBwYXJlbnQtPiBfV2luLnN3LnVwICkKCV9XaW4uc3cudXAgID0gcGFyZW50LT4gX1dpbi5zdy51
cCA7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZApsaW1pdF93aW5kKFdpbmQgKm1lLCBjb25zdCBXaW5k
ICpwYXJlbnQpCnsKICAgIG1lLT5saW1pdChwYXJlbnQpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQK
czJjKFdpbmQgKncxKQp7CiAgICB3MS0+czJjKCk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZApjMnMo
V2luZCAqdzEpCnsKICAgIHcxLT5jMnMoKTsKfQoKaW5saW5lIGJvb2wKV2luZDo6b3BlcmF0b3Ig
IT0gKGNvbnN0IFdpbmQmIHJpZ2h0KQp7CiAgICByZXR1cm4oX1dpbi5zdy51cCAgIT0gcmlnaHQu
IF9XaW4uc3cudXAgIHx8CgkgICAgX1dpbi5zdy5sZiAgIT0gcmlnaHQuIF9XaW4uc3cubGYgIHx8
CgkgICAgX1dpbi5zdy5kbiAgIT0gcmlnaHQuIF9XaW4uc3cuZG4gIHx8CgkgICAgX1dpbi5zdy5y
dCAgIT0gcmlnaHQuIF9XaW4uc3cucnQgKTsKfQogCiAKCgppbmxpbmUgYm9vbApXaW5kOjpwX2lu
c2lkZShjb29yX3QgeCwgY29vcl90IHkpIGNvbnN0CnsKICAgIGlmICh4IDwgX1dpbi5zdy51cCAg
fHwgeCA+IF9XaW4uc3cuZG4gKQoJcmV0dXJuIGZhbHNlOwogICAgaWYgKHkgPCBfV2luLnN3Lmxm
ICB8fCB5ID4gX1dpbi5zdy5ydCApCglyZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdHJ1ZTsKfQoK
IAoKCmlubGluZSBib29sCldpbmQ6Om92ZXJsYXAoY29uc3QgV2luZCAqd2luMikgY29uc3QKewog
ICAgaWYgKChfV2luLnN3LmRuICA8IHdpbjItPiBfV2luLnN3LnVwICkgfHwgKF9XaW4uc3cudXAg
ID4gd2luMi0+IF9XaW4uc3cuZG4gKQogICAgICAgICAgICAgICAgfHwgKF9XaW4uc3cucnQgIDwg
d2luMi0+IF9XaW4uc3cubGYgKSB8fCAoX1dpbi5zdy5sZiAgPiB3aW4yLT4gX1dpbi5zdy5ydCAp
KQogICAgICAgIHJldHVybihmYWxzZSk7CiAgICByZXR1cm4odHJ1ZSk7Cn0KCiAKCgppbmxpbmUg
Ym9vbApXaW5kOjp3X2luc2lkZShjb25zdCBXaW5kICpwYXJlbnQpIGNvbnN0CnsKICAgIGlmICgo
X1dpbi5zdy51cCAgPD0gcGFyZW50LT4gX1dpbi5zdy51cCApIHx8IChfV2luLnN3LmRuICA+PSBw
YXJlbnQtPiBfV2luLnN3LmRuICkgfHwgKF9XaW4uc3cubGYgIDw9IHBhcmVudC0+IF9XaW4uc3cu
bGYgKQoJCQkJCQkgICAgfHwgKF9XaW4uc3cucnQgID49IHBhcmVudC0+IF9XaW4uc3cucnQgKSkK
CXJldHVybiBmYWxzZTsKICAgIHJldHVybiB0cnVlOwp9CgogCgoKaW5saW5lIGJvb2wKV2luZDo6
d19vbnRvcChXaW5kICpwYXJlbnQpIGNvbnN0CnsKICAgIGlmICgoX1dpbi5zdy51cCAgPCBwYXJl
bnQtPiBfV2luLnN3LnVwICkgfHwgKF9XaW4uc3cuZG4gID4gcGFyZW50LT4gX1dpbi5zdy5kbiAp
IHx8IChfV2luLnN3LmxmICA8IHBhcmVudC0+IF9XaW4uc3cubGYgKQoJCQkJCQkgICAgfHwgKF9X
aW4uc3cucnQgID4gcGFyZW50LT4gX1dpbi5zdy5ydCApKQoJcmV0dXJuIGZhbHNlOwogICAgcmV0
dXJuIHRydWU7Cgp9CgpzdGF0aWMgaW5saW5lIGJvb2wKcF9pbnNpZGUoY29vcl90IHgsIGNvb3Jf
dCB5LCBXaW5kICp3aW4pCnsKICAgIHJldHVybih3aW4tPnBfaW5zaWRlKHgsIHkpKTsKfQoKc3Rh
dGljIGlubGluZSBib29sCndfaW5zaWRlKGNvbnN0IFdpbmQgKndpbiwgY29uc3QgV2luZCAqcGFy
ZW50KQp7CiAgICByZXR1cm4od2luLT53X2luc2lkZShwYXJlbnQpKTsKfQoKc3RhdGljIGlubGlu
ZSBib29sCndfb250b3AoV2luZCAqd2luLCBXaW5kICpwYXJlbnQpCnsKICAgIHJldHVybih3aW4t
Pndfb250b3AocGFyZW50KSk7Cn0KCnN0YXRpYyBpbmxpbmUgYm9vbApvdmVybGFwKGNvbnN0IFdp
bmQgKncsIGNvbnN0IFdpbmQgKncyKQp7CiAgICByZXR1cm4ody0+b3ZlcmxhcCh3MikpOwp9Cgog
CgoKaW5saW5lIHZvaWQKV2luZDo6cm90YXRlKGludCBhbmdsZSkKewogICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBhbmdsZTsgaSsrKSB7Cgljb29yX3QgY29vciA9IF9XaW4uc3cucnQgOwoJX1dpbi5z
dy5ydCAgPSAtIF9XaW4uc3cudXAgOwoJX1dpbi5zdy51cCAgPSBfV2luLnN3LmxmIDsKCV9XaW4u
c3cubGYgID0gLSBfV2luLnN3LmRuIDsKCV9XaW4uc3cuZG4gID0gY29vcjsKICAgIH0KfQoKc3Rh
dGljIGlubGluZSB2b2lkCnJvdGF0ZShXaW5kICp3aW4sIGludCBhbmdsZSkKewogICAgd2luLT5y
b3RhdGUoYW5nbGUpOwp9CgppbmxpbmUgdm9pZApXaW5kOjpncm93KGNvb3JfdCBkeCwgY29vcl90
IGR5KQp7CiAgICBfV2luLnN3LnJ0ICArPSBkeTsKICAgIF9XaW4uc3cuZG4gICs9IGR4OwoKICAg
IF9XaW4uc3cubGYgIC09IGR5OwogICAgaWYgKF9XaW4uc3cubGYgIDwgMCkKCV9XaW4uc3cubGYg
ID0gMDsKCiAgICBfV2luLnN3LnVwICAtPSBkeDsKICAgIGlmIChfV2luLnN3LnVwICA8IDApCglf
V2luLnN3LnVwICA9IDA7Cn0KCiAKCgpzdGF0aWMgaW5saW5lIHZvaWQKZ3Jvd193aW4oV2luZCAq
dywgY29vcl90IGR4LCBjb29yX3QgZHkpCnsKICAgIHctPmdyb3coZHgsIGR5KTsKfQoKc3RhdGlj
IGlubGluZSB2b2lkCmNvbXBlbnNhdGUoV2luZCAqdzEpCnsKICAgIHcxLT5jb21wZW5zYXRlKCk7
Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZAp1bl9jb21wZW5zYXRlKFdpbmQgKncxKQp7CiAgICB3MS0+
dW5fY29tcGVuc2F0ZSgpOwp9CgojIDM0NiAiLi4vLi4vaW5jbHVkZS9sb2NhbGluYy9XaW5kLkgi
CgoKIyAxOCAiLi4vLi4vaW5jbHVkZS9saWJpbmMvWEdyYXBoaWNzLkgiIDIKCiMgMSAiLi4vLi4v
aW5jbHVkZS9sb2NhbGluYy9kcmF3X2NvbnN0LmgiIDEKCgoKCgoKCgoKIAoKCgoKCgoKCgoKIyAx
OSAiLi4vLi4vaW5jbHVkZS9saWJpbmMvWEdyYXBoaWNzLkgiIDIKCgogCmNvbnN0IGludCBrWFdp
bmRvdwk9IC0xOwoKY29uc3QgaW50IGtSZXN1bHRzCT0gMDsJIApjb25zdCBpbnQgU0hPVwkJPSAx
OwkgCmNvbnN0IGludCBTTkFQCQk9IDI7CSAKY29uc3QgaW50IGtCb2FyZAk9IDM7CmNvbnN0IGlu
dCBrQ2xvc2UJPSA0Owpjb25zdCBpbnQga051bVBpeG1hcHMJPSBrQ2xvc2UgKyAxOwoKIAoKCgpj
b25zdCBpbnQga0NvbXBXaW5kb3cJPSBTTkFQOwkgCgpjb25zdCBpbnQga0hhcmR3YXJlRHVtcCA9
IDI7CSAKY29uc3QgaW50IGtIYXJkd2FyZVNuYXAgPSA0OwkgCgoKCgoKCgogCgoKCmNvbnN0IGlu
dAlrTWF4Q29sb3JzID0gNTEyOwoKY2xhc3MgWEdyYXBoaWNzIHsKcHVibGljOgogICAgR0MJCWdj
OwkJIAoKICAgIFhHcmFwaGljcygpOwogICAgWEdyYXBoaWNzKERpc3BsYXkgKiwgV2luZG93LCBX
aWRnZXQpOwogICAgflhHcmFwaGljcygpOwoKICAgIHZvaWQgCSpvcGVyYXRvciBuZXcoc2l6ZV90
KTsKICAgIAogICAgdm9pZAlhdHRhY2goRGlzcGxheSAqLCBXaW5kb3csIFdpZGdldCk7CiAgICB2
b2lkCXNldHVwKGludCBpbngsIGludCB4LCBpbnQgeSwgR0MgZ2NfY2xlYXIpOwogICAgdm9pZAlz
ZXR1cChpbnQgaW54LCBpbnQgZHgsIGludCBkeSk7CgogICAgRGlzcGxheQkqZGlzcGxheSgpIHsg
cmV0dXJuIGFwcF9kaXNwbGF5OyB9CiAgICB2b2lkCWRpc3BsYXkoRGlzcGxheSAqIGRpc3ApIHsg
YXBwX2Rpc3BsYXkgPSBkaXNwOyB9CiAgICBjb25zdCBYSW1hZ2UgKmdldF94X2ltYWdlKGludCk7
CiAgICB2b2lkCW1hcF9waXhlbHMoKTsKICAgIGludAkJeF9waXhlbChpbnQgZGlyLCBpbnQgZHdu
LCBpbnQgYWNjLCBpbnQgcGl4ID0gMCk7CgogICAgbG9uZwlmaW5kX3BpeGVsKGludCBpbngpIGNv
bnN0IHsgcmV0dXJuKHBpeGVsc1tpbnhdKTsgfQoKICAgIGxvbmcJSWdfZG90KGludCkgY29uc3Q7
CiAgICBpbnQJCUlnX2ZyYW1lKCkgY29uc3Q7CiAgICBjb25zdCBXaW5kICpJZ193aW5hZHIoKSBj
b25zdDsKICAgIGludAkJSWdfZ21vZGUoaW50KSBjb25zdDsKICAgIHZvaWQJSXdsaW5lKGludCB4
X3N0cnQsIGludCB5X3N0cnQsIGludCB4X2VuZCwgaW50IHlfZW5kKSBjb25zdDsKICAgIHZvaWQJ
SXdob3JpeihpbnQgZHduLCBpbnQgYWNjLCBpbnQgbGVuZ3RoKSBjb25zdDsKICAgIHZvaWQJSXd2
ZXJ0KGludCBkd24sIGludCBhY2MsIGludCBsZW5ndGgpIGNvbnN0OwogICAgdm9pZAlJd3JlY3Qo
Y29uc3QgV2luZCAqdykgY29uc3Q7CiAgICB2b2lkCUl3Y2lyY2xlKGludCBfZHduLCBpbnQgX2Fj
YywgaW50IF9sZW4pIGNvbnN0OwogICAgdm9pZAl3cHV0cGl4KGludCBkd24sIGludCBhY2MpIGNv
bnN0OwogICAgdm9pZAlJd3BpeGVsKGludCB4LCBpbnQgeSkgY29uc3Q7CiAgICB2b2lkCUlsaW5l
KGludCB4X3N0cnQsIGludCB5X3N0cnQsIGludCB4X2VuZCwgaW50IHlfZW5kKSBjb25zdDsKICAg
IHZvaWQJSWhvcml6KGludCBkd24sIGludCBhY2MsIGludCBsZW5ndGgpIGNvbnN0OwogICAgdm9p
ZAlJdmVydChpbnQgZHduLCBpbnQgYWNjLCBpbnQgbGVuZ3RoKSBjb25zdDsKICAgIHZvaWQJSXJl
Y3QoY29uc3QgV2luZCAqdywgaW50ID0gLTEpIGNvbnN0OwogICAgdm9pZAlJY2lyY2xlKGludCBk
d24sIGludCBhY2MsIGludCBsZW4sIGJvb2wgPSBmYWxzZSkgY29uc3Q7CiAgICB2b2lkCUlwaXhl
bChpbnQgZHduLCBpbnQgYWNjKSBjb25zdDsKICAgIHZvaWQJcHV0cGl4KGludCBkd24sIGludCBh
Y2MpIGNvbnN0OwogICAgdV9jaGFyICoJSWdfcGl4YWRyKGludCBkd24sIGludCBhY2MpOwogICAg
aW50CQlJZ19uY21vbigpOwogICAgaW50CQlJZ19ucm1vbigpOwogICAgdm9pZAlJcF9kb3QoaW50
IGZnX2JnLCBpbnQgY29sX2lueCk7CiAgICB2b2lkCUlwX2dtb2RlKGludCBJLCBpbnQgVik7Cgog
ICAgR0MJCXhfbWFrZUdDKHVfbG9uZyBmb3JlLCB1X2xvbmcgYmFjayk7CiAgICBHQwkJeF9uZXdH
QyhpbnQgZ2NfZnVuYywgdV9sb25nIGZvcmUsIHVfbG9uZyBiYWNrKTsKICAgIEdDCQlnZXRPckdD
KCk7CiAgICBHQwkJZ2V0Q29weUdDKCk7CiAgICB2b2lkCXhfc2V0R0NfY3VycmVudChHQyBuZXdn
Yyk7CiAgICB2b2lkCXhfc2V0R0NfZnVuY3Rpb24oaW50IGdjX2Z1bmMpIGNvbnN0OwogICAgdm9p
ZAl4X3NldEdDKEdDIF9nYywgdV9sb25nIGZvcmUsIHVfbG9uZyBiYWNrKSBjb25zdDsKICAgIHZv
aWQJeF9zZXRnY19iYWNrZ3JvdW5kKEdDIF9nYywgaW50IGNvbG9yKSBjb25zdDsKICAgIHZvaWQJ
eF9zZXRnY19mb3JlZ3JvdW5kKEdDIF9nYywgaW50IGNvbG9yKSBjb25zdDsKCiAgICBib29sCXhf
Y29sb3IoaW50LCBjb25zdCBjaGFyICopOwogICAgaW50CQlmaW5kX2luZGV4KHVfbG9uZyk7CiAg
ICBib29sCW1hcF9ncmV5KGludCBpbngpOwogICAgYm9vbAltYXBfZ3JleShpbnQgaW54LCBpbnQg
c3ByZWFkID0gMik7CiAgICB2b2lkCXNldF9taW5pbXVtX3BpeGVsX3ZhbHVlKGludCBtaW5fdmFs
dWUpOwogICAgdm9pZAlJd29mZigpOwogICAgdm9pZAlJdHdpbihpbnQpOwogICAgdm9pZAlJZGFy
ayhib29sIGRyYXcgPSAxICk7CiAgICB2b2lkCUlkYXJrRnJhbWUoaW50LCBib29sIGRyYXcgPSAx
ICk7CiAgICB2b2lkCUlwZnJhbWUoaW50KTsKICAgIHZvaWQJSXBmKGludCk7CgogICAgdm9pZAlj
b250cmFzdF9ob3JpeihpbnQgYWNjLCBpbnQgZHduLCBpbnQgbGVuKTsKICAgIHZvaWQJY29udHJh
c3RfdmVydChpbnQgYWNjLCBpbnQgZHduLCBpbnQgbGVuKTsKICAgIHZvaWQJY29udHJhc3RfcmVj
dChjb25zdCBXaW5kICp3KTsKICAgIHZvaWQJY29udHJhc3RfeG91dChjb25zdCBXaW5kICp3KTsK
ICAgIHZvaWQJeG91dChjb25zdCBXaW5kICopOwogICAgdm9pZAlkcmF3X2NvbnRyYXN0X3dpbmRv
dyhjb25zdCBXaW5kICopOwoKICAgIHZvaWQJY29weWFyZWEoaW50LCBpbnQsIGludCwgaW50LCBp
bnQsIGludCBkeCA9IC0xLCBpbnQgZHkgPSAtMSkgY29uc3Q7CiAgICB2b2lkCXB1dGltYWdlKGlu
dCwgY29uc3QgWEltYWdlICosIGludCwgaW50LCBpbnQsIGludCkgY29uc3Q7CiAgICB2b2lkCWZp
bGxyZWN0KGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKSBjb25zdDsKICAgIHZvaWQJZHJhd3Jl
Y3QoaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpIGNvbnN0OwogICAgdm9pZAlmaWxscGl4bWFw
KGludCBmciwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpIGNvbnN0OwogICAgdm9pZAlkcmF3
c3RyaW5nKGludCwgaW50LCBjb25zdCBjaGFyICopIGNvbnN0OwogICAgdm9pZAljaGFuZ2VfZHJh
d193aWRnZXQoV2luZG93LCBXaWRnZXQgKTsKCiAgICBib29sCWlzX3RydWVjb2xvcigpIGNvbnN0
IHsgcmV0dXJuIChfaXNfdHJ1ZWNvbG9yKTsgfQogICAgUGl4bWFwCWdldF9waXhtYXAoaW50IHdo
bykgeyByZXR1cm4gcGl4bWFwW3dob107IH0KCiAgICBpbnQJCXZlcnRpY2FsX29mZnNldCgpIGNv
bnN0IHsgcmV0dXJuIChfdmVydGljYWxfb2Zmc2V0KTsgfQogICAgaW50CQlob3Jpem9udGFsX29m
ZnNldCgpIGNvbnN0IHsgcmV0dXJuIChfaG9yaXpvbnRhbF9vZmZzZXQpOyB9CgogICAgdm9pZAl2
ZXJ0aWNhbF9vZmZzZXQoaW50IHZhbCkgeyBfdmVydGljYWxfb2Zmc2V0ID0gdmFsOyB9CiAgICB2
b2lkCWhvcml6b250YWxfb2Zmc2V0KGludCB2YWwpIHsgX2hvcml6b250YWxfb2Zmc2V0ID0gdmFs
OyB9CgogICAgc3RhdGljIGJvb2wgdHJ5X2Zvcl90cnVlY29sb3JfdmlzdWFsKERpc3BsYXkgKmRp
c3BsYXkpOwoKICAgIHN0YXRpYyBsb25nIGltYWdlX2RlcHRoKCkgeyByZXR1cm4oX2ltYWdlX2Rl
cHRoKTsgfQogICAgc3RhdGljIHZvaWQgaW1hZ2VfZGVwdGgobG9uZyB2YWwpIHsgX2ltYWdlX2Rl
cHRoID0gdmFsOyB9Cgpwcml2YXRlOgogICAgc3RhdGljCWxvbmcJCV9pbWFnZV9kZXB0aDsKICAg
IHN0YXRpYwlib29sCQlfaXNfdHJ1ZWNvbG9yOwkgCgogICAgbG9uZwlfb2xkX3g7CiAgICBsb25n
CV9vbGRfeTsKICAgICAKCgogICAgYm9vbAlfY29waWVkX2NtYXA7CiAgICBXaWRnZXQJX2RyYXdf
d2lkZ2V0OwkgCgogICAgRGlzcGxheQkqYXBwX2Rpc3BsYXk7CSAKICAgIFdpbmRvdwl3aW5kb3c7
CQkgCiAgICB1X2xvbmcJcGl4ZWxzW2tNYXhDb2xvcnNdOwogICAgUGl4bWFwCXBpeG1hcFtrTnVt
UGl4bWFwc107CiAgICBYSW1hZ2UJKnhfaW1hZ2Vba051bVBpeG1hcHNdOwogICAgdmVjdG9yCTxH
Qz4gZ2NsaXN0OwkgCiAgICBHQwkJZ2xvYmFsR0M7CSAKICAgIEdDCQlvckdDOwogICAgR0MJCWNv
cHlHQzsKCiAgICBib29sCVVzZVN0b3JlZDsKCiAgICBpbnQJCV9ob3Jpem9udGFsX29mZnNldDsK
ICAgIGludAkJX3ZlcnRpY2FsX29mZnNldDsKCiAgICBpbnQJCV9mcm07CQkgCiAgICBpbnQJCWRv
dFszXTsKICAgIGludAkJZ21vZGVbMl07CQkgCiAgICBXaW5kCXhfd2luOwoKCgoKICAgIHVfbG9u
Zwlmcm1hZHJbNV07CgogICAgIAoKCgoKCgoKCgogICAgaW50CQlzY2FsZTsKCiAgICB2b2lkIHNl
dF9waXhlbCh1X2NoYXIgKnhtcCwgdV9jaGFyIHBpeCkgewoJdV9jaGFyIGxvb2t1cCA9IF9pc190
cnVlY29sb3IgPyBwaXggOiAocGl4ICYgMHhmZSk7CgkqeG1wID0gZmluZF9waXhlbChsb29rdXAp
OwogICAgfQoKICAgIHZvaWQgY3JlYXRlX25ld19jbWFwKFdpbmRvdyB3aW5kb3cpOwogICAgdm9p
ZCBjaGFuZ2VfZGlzcGxheShpbnQgZnJtKTsKfTsKCmV4dGVybiBYR3JhcGhpY3MJKmdHcmFwaGlj
czsKCmlubGluZSBjb25zdCBYSW1hZ2UgKgpYR3JhcGhpY3M6OmdldF94X2ltYWdlKGludCBpbngp
CnsKICAgIHJldHVybih4X2ltYWdlW2lueF0pOwp9CgppbmxpbmUgdm9pZApYR3JhcGhpY3M6Onhf
c2V0R0NfY3VycmVudChHQyBuZXdnYykKewogICAgZ2MgPSBuZXdnYzsKfQoKaW5saW5lIHZvaWQK
WEdyYXBoaWNzOjp4X3NldEdDX2Z1bmN0aW9uKGludCBnY19mdW5jKSBjb25zdAp7CiAgICBYU2V0
RnVuY3Rpb24oYXBwX2Rpc3BsYXksIGdjLCBnY19mdW5jKTsKfQoKaW5saW5lIHZvaWQKWEdyYXBo
aWNzOjp4X3NldEdDKEdDIF9nYywgdV9sb25nIGZvcmUsIHVfbG9uZyBiYWNrKSBjb25zdAp7CiAg
ICBYU2V0Rm9yZWdyb3VuZChhcHBfZGlzcGxheSwgX2djLCBmb3JlKTsKICAgIFhTZXRCYWNrZ3Jv
dW5kKGFwcF9kaXNwbGF5LCBfZ2MsIGJhY2spOwp9CgppbmxpbmUgdm9pZApYR3JhcGhpY3M6Onhf
c2V0Z2NfYmFja2dyb3VuZChHQyBfZ2MsIGludCBjb2xvcikgY29uc3QKewogICAgWFNldEJhY2tn
cm91bmQoYXBwX2Rpc3BsYXksIF9nYywgZmluZF9waXhlbChjb2xvcikpOwp9CgppbmxpbmUgdm9p
ZApYR3JhcGhpY3M6Onhfc2V0Z2NfZm9yZWdyb3VuZChHQyBfZ2MsIGludCBjb2xvcikgY29uc3QK
ewogICAgWFNldEZvcmVncm91bmQoYXBwX2Rpc3BsYXksIF9nYywgZmluZF9waXhlbChjb2xvcikp
Owp9CgppbmxpbmUgdm9pZApYR3JhcGhpY3M6OnNldF9taW5pbXVtX3BpeGVsX3ZhbHVlKGludCBt
aW5fdmFsdWUpCnsKICAgIHNjYWxlID0gbWluX3ZhbHVlOwp9CgppbmxpbmUgdm9pZApYR3JhcGhp
Y3M6Okl3b2ZmKCkKewogICAgSXR3aW4oMSk7Cn0KCmlubGluZSB2b2lkClhHcmFwaGljczo6Y29w
eWFyZWEoaW50IGZyYW1lLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgaW50IGR4LCBpbnQg
ZHkpIGNvbnN0CnsKICAgIGlmIChkeCA9PSAtMSkgewoJZHggPSB4OwoJZHkgPSB5OwogICAgfQog
ICAgWENvcHlBcmVhKGFwcF9kaXNwbGF5LCBwaXhtYXBbZnJhbWVdLCB3aW5kb3csIGdjLCB4LCB5
LCB3KzEsIGgrMSwgZHgsIGR5KTsKICAgIGlmIChmcmFtZSA9PSBrQ2xvc2UgfHwgZnJhbWUgPT0g
a0JvYXJkKSB7CglYQ29weUFyZWEoYXBwX2Rpc3BsYXksIHBpeG1hcFtmcmFtZV0sIHBpeG1hcFtT
SE9XXSwKCQkJCQlnYywgeCwgeSwgdysxLCBoKzEsIGR4LCBkeSk7CiAgICB9Cn0KCmlubGluZSB2
b2lkClhHcmFwaGljczo6cHV0aW1hZ2UoaW50IGZyYW1lLCBjb25zdCBYSW1hZ2UgKnhtLCBpbnQg
bCwgaW50IHUsIGludCB3LCBpbnQgaCkgY29uc3QKewogICAgWFB1dEltYWdlKGFwcF9kaXNwbGF5
LCBwaXhtYXBbZnJhbWVdLCBnYywgY29uc3RfY2FzdDxYSW1hZ2UgKj4oeG0pLCBsLCB1LCBsLCB1
LCB3LCBoKTsKfQoKaW5saW5lIHZvaWQKWEdyYXBoaWNzOjpmaWxscmVjdChpbnQgeCwgaW50IHks
IGludCB3LCBpbnQgaCkgY29uc3QKewogICAgWEZpbGxSZWN0YW5nbGUoYXBwX2Rpc3BsYXksIHdp
bmRvdywgZ2MsIDAsIDAsIHcsIGgpOwp9CgppbmxpbmUgdm9pZApYR3JhcGhpY3M6OmZpbGxwaXht
YXAoaW50IGZyLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkgY29uc3QKewogICAgWEZpbGxS
ZWN0YW5nbGUoYXBwX2Rpc3BsYXksIHBpeG1hcFtmcl0sIGdjLCB4LCB5LCB3LCBoKTsKICAgIGlm
IChmciA9PSBTSE9XIHx8IGZyID09IGtDbG9zZSB8fCBmciA9PSBrQm9hcmQpIHsKCWlmIChmciAh
PSBTSE9XKQoJICAgIFhGaWxsUmVjdGFuZ2xlKGFwcF9kaXNwbGF5LCBwaXhtYXBbU0hPV10sIGdj
LCB4LCB5LCB3LCBoKTsKCWVsc2UgewoJICAgIFhGaWxsUmVjdGFuZ2xlKGFwcF9kaXNwbGF5LCBw
aXhtYXBba0Nsb3NlXSwgZ2MsIHgsIHksIHcsIGgpOwoJICAgIFhGaWxsUmVjdGFuZ2xlKGFwcF9k
aXNwbGF5LCBwaXhtYXBba0JvYXJkXSwgZ2MsIHgsIHksIHcsIGgpOwoJfQogICAgfQp9Cgppbmxp
bmUgdm9pZApYR3JhcGhpY3M6OmRyYXdyZWN0KGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKSBj
b25zdAp7CiAgICBYRHJhd1JlY3RhbmdsZShhcHBfZGlzcGxheSwgd2luZG93LCBnYywgeCwgeSwg
dywgaCk7Cn0KCmlubGluZSB2b2lkClhHcmFwaGljczo6ZHJhd3N0cmluZyhpbnQgYWNjLCBpbnQg
ZHduLCBjb25zdCBjaGFyICpzdHIpIGNvbnN0CnsKICAgIFhEcmF3SW1hZ2VTdHJpbmcoYXBwX2Rp
c3BsYXksIHBpeG1hcFtfZnJtXSwgZ2MsIGFjYywgZHduLAoJCQkJY29uc3RfY2FzdDxjaGFyICo+
KHN0ciksIHN0cmxlbihzdHIpKTsKICAgIGlmIChfZnJtID09IGtDbG9zZSB8fCBfZnJtID09IGtC
b2FyZCkgewoJWERyYXdJbWFnZVN0cmluZyhhcHBfZGlzcGxheSwgcGl4bWFwW1NIT1ddLCBnYywg
YWNjLCBkd24sCgkJCQljb25zdF9jYXN0PGNoYXIgKj4oc3RyKSwgc3RybGVuKHN0cikpOwogICAg
fQp9CgogCgoKaW5saW5lIHZvaWQgWEdyYXBoaWNzOjpJbGluZShpbnQgeF9zdHJ0LCBpbnQgeV9z
dHJ0LCBpbnQgeF9lbmQsIGludCB5X2VuZCkgY29uc3QKewogICAgWERyYXdMaW5lKGFwcF9kaXNw
bGF5LCBwaXhtYXBbX2ZybV0sIGdjLCB5X3N0cnQsIHhfc3RydCwgeV9lbmQsIHhfZW5kKTsKfQoK
aW5saW5lIHZvaWQgWEdyYXBoaWNzOjpJaG9yaXooaW50IGR3biwgaW50IGFjYywgaW50IGxlbmd0
aCkgY29uc3QKewogICAgWERyYXdMaW5lKGFwcF9kaXNwbGF5LCBwaXhtYXBbX2ZybV0sIGdjLCBh
Y2MsIGR3biwgYWNjICsgbGVuZ3RoLCBkd24pOwp9CgppbmxpbmUgdm9pZCBYR3JhcGhpY3M6Okl2
ZXJ0KGludCBkd24sIGludCBhY2MsIGludCBsZW5ndGgpIGNvbnN0CnsKICAgIFhEcmF3TGluZShh
cHBfZGlzcGxheSwgcGl4bWFwW19mcm1dLCBnYywgYWNjLCBkd24sIGFjYywgZHduICsgbGVuZ3Ro
KTsKfQoKaW5saW5lIHZvaWQgWEdyYXBoaWNzOjpJY2lyY2xlKGludCBkd24sIGludCBhY2MsIGlu
dCBsZW4sIGJvb2wgZmlkdWNpYWwpIGNvbnN0CnsKICAgIGlmIChmaWR1Y2lhbCkKCVhEcmF3QXJj
KGFwcF9kaXNwbGF5LCBwaXhtYXBbX2ZybV0sIGdjLAoJICAgIGFjYyAtIGxlbiwgZHduIC0gbGVu
LCBsZW4gKiAyLCBsZW4gKiAyLCAwLCAzNjAgKiA2NCk7CiAgICBlbHNlCglYRmlsbEFyYyhhcHBf
ZGlzcGxheSwgcGl4bWFwW19mcm1dLCBnYywKCSAgICBhY2MgLSBsZW4sIGR3biAtIGxlbiwgbGVu
ICogMiwgbGVuICogMiwgMCwgMzYwICogNjQpOwp9CgogCgoKaW5saW5lIHZvaWQgWEdyYXBoaWNz
OjpJd2xpbmUoaW50IHhfc3RydCwgaW50IHlfc3RydCwgaW50IHhfZW5kLCBpbnQgeV9lbmQpIGNv
bnN0CnsKICAgIFhEcmF3TGluZShhcHBfZGlzcGxheSwgd2luZG93LCBnYywgeV9zdHJ0LCB4X3N0
cnQsIHlfZW5kLCB4X2VuZCk7CiAgICBJbGluZSh4X3N0cnQsIHlfc3RydCwgeF9lbmQsIHlfZW5k
KTsKfQoKaW5saW5lIHZvaWQgWEdyYXBoaWNzOjpJd2hvcml6KGludCBkd24sIGludCBhY2MsIGlu
dCBsZW5ndGgpIGNvbnN0CnsKICAgIFhEcmF3TGluZShhcHBfZGlzcGxheSwgd2luZG93LCBnYywg
YWNjLCBkd24sIGFjYyArIGxlbmd0aCwgZHduKTsKICAgIElob3Jpeihkd24sIGFjYywgbGVuZ3Ro
KTsKfQoKaW5saW5lIHZvaWQgWEdyYXBoaWNzOjpJd3ZlcnQoaW50IGR3biwgaW50IGFjYywgaW50
IGxlbmd0aCkgY29uc3QKewogICAgWERyYXdMaW5lKGFwcF9kaXNwbGF5LCB3aW5kb3csIGdjLCBh
Y2MsIGR3biwgYWNjLCBkd24gKyBsZW5ndGgpOwogICAgSXZlcnQoZHduLCBhY2MsIGxlbmd0aCk7
Cn0KCmlubGluZSB2b2lkIFhHcmFwaGljczo6SXJlY3QoY29uc3QgV2luZCAqdywgaW50IGZpbGxf
Y29sb3IpIGNvbnN0CnsKICAgIGlmIChmaWxsX2NvbG9yID09IC0xKQoJWERyYXdSZWN0YW5nbGUo
YXBwX2Rpc3BsYXksIHBpeG1hcFtfZnJtXSwgZ2MsCgkJdy0+IF9XaW4uc3cubGYgLCB3LT4gX1dp
bi5zdy51cCAsICh3LT4gX1dpbi5zdy5ydCAgLSB3LT4gX1dpbi5zdy5sZiApLCAody0+IF9XaW4u
c3cuZG4gIC0gdy0+IF9XaW4uc3cudXAgKSk7CiAgICBlbHNlIHsKCSAKCgoKCgoJWEZpbGxSZWN0
YW5nbGUoYXBwX2Rpc3BsYXksIHBpeG1hcFtfZnJtXSwgZ2MsCgkJdy0+IF9XaW4uc3cubGYgLCB3
LT4gX1dpbi5zdy51cCAsICh3LT4gX1dpbi5zdy5ydCAgLSB3LT4gX1dpbi5zdy5sZiApICsgMSwg
KHctPiBfV2luLnN3LmRuICAtIHctPiBfV2luLnN3LnVwICkgKyAxKTsKICAgIH0KfQoKaW5saW5l
IHZvaWQgWEdyYXBoaWNzOjpJd3JlY3QoY29uc3QgV2luZCAqdykgY29uc3QKewogICAgWERyYXdS
ZWN0YW5nbGUoYXBwX2Rpc3BsYXksIHdpbmRvdywgZ2MsCgkJdy0+IF9XaW4uc3cubGYgLCB3LT4g
X1dpbi5zdy51cCAsICh3LT4gX1dpbi5zdy5ydCAgLSB3LT4gX1dpbi5zdy5sZiApLCAody0+IF9X
aW4uc3cuZG4gIC0gdy0+IF9XaW4uc3cudXAgKSk7CiAgICBJcmVjdCh3KTsKfQoKaW5saW5lIHZv
aWQgWEdyYXBoaWNzOjpJd2NpcmNsZShpbnQgX2R3biwgaW50IF9hY2MsIGludCBfbGVuKSBjb25z
dAp7CiAgICBYRHJhd0FyYyhhcHBfZGlzcGxheSwgd2luZG93LCBnYywKCSAgICBfYWNjIC0gX2xl
biwgX2R3biAtIF9sZW4sIF9sZW4gKiAyLCBfbGVuICogMiwgMCwgMzYwICogNjQpOwp9Cgppbmxp
bmUgdm9pZCBYR3JhcGhpY3M6OnB1dHBpeChpbnQgZHduLCBpbnQgYWNjKSBjb25zdAp7CiAgICBY
RHJhd1BvaW50KGFwcF9kaXNwbGF5LCBwaXhtYXBbX2ZybV0sIGdjLCBhY2MsIGR3bik7Cn0KCmlu
bGluZSB2b2lkIFhHcmFwaGljczo6SXBpeGVsKGludCBkd24sIGludCBhY2MpIGNvbnN0CnsKICAg
IHB1dHBpeChkd24sIGFjYyk7Cn0KCmlubGluZSB2b2lkIFhHcmFwaGljczo6d3B1dHBpeChpbnQg
ZHduLCBpbnQgYWNjKSBjb25zdAp7CiAgICBYRHJhd1BvaW50KGFwcF9kaXNwbGF5LCB3aW5kb3cs
IGdjLCBhY2MsIGR3bik7CiAgICBwdXRwaXgoZHduLCBhY2MpOwp9CgppbmxpbmUgdm9pZCBYR3Jh
cGhpY3M6Okl3cGl4ZWwoaW50IHgsIGludCB5KSBjb25zdAp7CiAgICB3cHV0cGl4KHgsIHkpOwp9
CgppbmxpbmUgbG9uZwpYR3JhcGhpY3M6OklnX2RvdChpbnQgaSkgY29uc3QKewogICAgcmV0dXJu
KGRvdFtpXSk7Cn0KCmlubGluZSBpbnQKWEdyYXBoaWNzOjpJZ19mcmFtZSgpIGNvbnN0CnsKICAg
IHJldHVybihfZnJtKTsKfQoKaW5saW5lIGNvbnN0IFdpbmQgKgpYR3JhcGhpY3M6OklnX3dpbmFk
cigpIGNvbnN0CnsKICAgIHJldHVybigmeF93aW4pOwp9CgppbmxpbmUgaW50ClhHcmFwaGljczo6
SWdfZ21vZGUoaW50IGkpIGNvbnN0CnsKICAgIHJldHVybihnbW9kZVtpXSk7Cn0KCnR5cGVkZWYg
c3RydWN0IHsKICAgaW50IEltMDsKICAgZmxvYXQgSW0xWzJdOwogICBmbG9hdCBJbTJbMl07CiAg
IGZsb2F0IElteHk7CiAgIGZsb2F0IEltYWpvclsyXTsKICAgZmxvYXQgSW1pbm9yWzJdOwp9IE1P
TVJFUzsKCiMgMTMgInNhdmVfc25hcC5jIiAyCgojIDEgIi4uLy4uL2luY2x1ZGUvbGliaW5jL2xp
YmxpZ2h0aW5nLkgiIDEKCgoKIAoKCgojIDEgIi4uLy4uL2luY2x1ZGUvbG9jYWxpbmMvSW5zcExp
Z2h0LkgiIDEKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiAKCgoK
CgoKCmNvbnN0CWludAlrTWF4TGlnaHREdXJhdGlvbgk9IDI3ODsKCmNvbnN0CXVfaW50CWtIaWdo
CQkJPSAwOwpjb25zdAl1X2ludAlrTWVkCQkJPSAxOwpjb25zdAl1X2ludAlrTG93CQkJPSAyOwpj
b25zdAl1X2ludAlrNDUJCQk9IDM7CmNvbnN0CXVfaW50CWtMYXNlcgkJCT0gNDsKY29uc3QJdV9p
bnQJa0F1dG9Mb3dlcgkJPSA1Owpjb25zdAl1X2ludAlrSGVpZ2h0CQkJPSA2OwogCgoKY29uc3QJ
dV9pbnQJa0NhbUhlaWdodDAJCT0gNzsKY29uc3QJdV9pbnQJa0NhbUhlaWdodDEJCT0gODsKY29u
c3QJdV9pbnQJa0NhbUhlaWdodDIJCT0gOTsKY29uc3QJdV9pbnQJa0NhbUhlaWdodDMJCT0gMTA7
Cgpjb25zdAl1X2ludAlrTnVtTGlnaHRSaW5ncwkJPSAxMTsKIAoKCgpjbGFzcyBJbnNwTGlnaHQg
ewpwdWJsaWM6CiAgICB2b2lkCWR1cmF0aW9uKGludCB2YWwpOwogICAgdm9pZAlkdXJhdGlvbih1
X2ludCwgaW50IHZhbCk7CiAgICB2b2lkCWVuYWJsZWQoYm9vbCk7CiAgICB2b2lkCWVuYWJsZWQo
dV9pbnQsIGJvb2wpOwogICAgdm9pZAllbmFibGVfcmluZ3MobG9uZyk7CiAgICB2b2lkCXJpbmco
dV9pbnQgdmFsKTsKCgoKCiAgICBmcmllbmQJYm9vbAlvcGVyYXRvcj09KGNvbnN0IEluc3BMaWdo
dCYsIGNvbnN0IEluc3BMaWdodCYpOwogICAgZnJpZW5kCWJvb2wJb3BlcmF0b3IhPShjb25zdCBJ
bnNwTGlnaHQmLCBjb25zdCBJbnNwTGlnaHQmKTsKCiAgICBsb25nCWxpZ2h0KCkgY29uc3Q7CiAg
ICBpbnQJCWR1cmF0aW9uKCkgY29uc3Q7CiAgICBib29sCWVuYWJsZWQoKSBjb25zdDsKICAgIGJv
b2wJbW9kZTNkKCkgY29uc3Q7CiAgICBpbnQJCWh3X3RpbWUoKSBjb25zdDsKICAgIHVfaW50CXJp
bmcoKSBjb25zdDsKICAgIGxvbmcJY3VyX3JpbmdzKCkgY29uc3Q7CgogICAgIAoKCgoKCgogICAg
dm9pZAlpbml0KHVfaW50IHJpbmcgPSAwKTsKCiAgICAgCgoKCiAgICB2b2lkCWZpeCgpOwoKcHJp
dmF0ZToKICAgIGxvbmcJX2xpZ2h0W2tOdW1MaWdodFJpbmdzXTsJCSAKICAgIGludAkJX2R1cmF0
aW9uW2tOdW1MaWdodFJpbmdzXTsJIAogICAgaW50CQlfaHdfdGltZVtrTnVtTGlnaHRSaW5nc107
CSAKICAgIGludAkJX2VuYWJsZWRba051bUxpZ2h0UmluZ3NdOwkgCiAgICB1X2ludAlfcmluZzsJ
CQkJIAoKICAgIHZvaWQJY2hlY2tfaGVpZ2h0KHVfaW50IHJpbmcsIGJvb2wgZW5hYmxlZCkgY29u
c3Q7CiAgICB2b2lkCXNldF9oZWlnaHQoKSBjb25zdDsKICAgIHZvaWQJY2xlYXJfaGVpZ2h0KCkg
Y29uc3Q7Cn07CgoKCmlubGluZSBsb25nIEluc3BMaWdodDo6bGlnaHQoKSBjb25zdAp7CiAgICBy
ZXR1cm4oX2xpZ2h0W19yaW5nXSk7Cn0KCmlubGluZSBpbnQgSW5zcExpZ2h0OjpkdXJhdGlvbigp
IGNvbnN0CnsKICAgIHJldHVybihfZHVyYXRpb25bX3JpbmddKTsKfQoKaW5saW5lIGJvb2wgSW5z
cExpZ2h0Ojptb2RlM2QoKSBjb25zdAp7CiAgICByZXR1cm4oX2VuYWJsZWRba0xhc2VyXSk7CSAK
fQoKaW5saW5lIGludCBJbnNwTGlnaHQ6Omh3X3RpbWUoKSBjb25zdAp7CiAgICByZXR1cm4oX2h3
X3RpbWVbX3JpbmddKTsKfQoKaW5saW5lIHVfaW50IEluc3BMaWdodDo6cmluZygpIGNvbnN0CnsK
ICAgIHJldHVybihfcmluZyk7Cn0KCiAKCgppbmxpbmUgbG9uZyBJbnNwTGlnaHQ6OmN1cl9yaW5n
cygpIGNvbnN0CnsKICAgIGxvbmcgb3V0ID0gMDsKICAgIGZvciAodV9pbnQgaSA9IGtIaWdoOyBp
IDwga051bUxpZ2h0UmluZ3M7ICsraSkgewoJaWYgKF9lbmFibGVkW2ldKQoJICAgIG91dCB8PSBf
bGlnaHRbaV07CiAgICB9CiAgICByZXR1cm4ob3V0KTsKfQoKaW5saW5lIHZvaWQgSW5zcExpZ2h0
OjpkdXJhdGlvbih1X2ludCByaW5nLCBpbnQgdmFsKQp7CgoKCiAgICBpZiAodmFsIDwgLTEgfHwg
dmFsID4ga01heExpZ2h0RHVyYXRpb24pIHsKCV9kdXJhdGlvbltyaW5nXSA9IC0xOwoJX2h3X3Rp
bWVbcmluZ10gPSAtMTsKICAgIH0KICAgIGVsc2UgewoJX2R1cmF0aW9uW3JpbmddID0gdmFsOwoJ
X2h3X3RpbWVbcmluZ10gPSAoKGludCkgKCgoZmxvYXQpdmFsICogMTEuMCkgLyAxMi4wKSk7CiAg
ICB9Cn0KCmlubGluZSB2b2lkIEluc3BMaWdodDo6ZHVyYXRpb24oaW50IHZhbCkKewogICAgZHVy
YXRpb24oX3JpbmcsIHZhbCk7Cn0KCmlubGluZSB2b2lkIEluc3BMaWdodDo6cmluZyh1X2ludCB2
YWwpCnsKICAgIF9yaW5nID0gdmFsOwp9CgppbmxpbmUgYm9vbCBvcGVyYXRvciA9PSAoY29uc3Qg
SW5zcExpZ2h0JiBsZWZ0LCBjb25zdCBJbnNwTGlnaHQmIHJpZ2h0KQp7CiAgICBmb3IgKHVfaW50
IGkgPSAwOyBpIDwga051bUxpZ2h0UmluZ3M7ICsraSkgewoJaWYgKChsZWZ0Ll9lbmFibGVkW2ld
ICE9IHJpZ2h0Ll9lbmFibGVkW2ldKSB8fAoJCShsZWZ0Ll9kdXJhdGlvbltpXSAhPSByaWdodC5f
ZHVyYXRpb25baV0pKQoJICAgIHJldHVybihmYWxzZSk7CiAgICB9CiAgICByZXR1cm4odHJ1ZSk7
Cn0KCmlubGluZSBib29sIG9wZXJhdG9yICE9IChjb25zdCBJbnNwTGlnaHQmIGxlZnQsIGNvbnN0
IEluc3BMaWdodCYgcmlnaHQpCnsKICAgIHJldHVybighKGxlZnQgPT0gcmlnaHQpKTsKfQoKCiMg
MjEzICIuLi8uLi9pbmNsdWRlL2xvY2FsaW5jL0luc3BMaWdodC5IIgoKCiMgOCAiLi4vLi4vaW5j
bHVkZS9saWJpbmMvbGlibGlnaHRpbmcuSCIgMgoKCmNsYXNzCVNlcmlhbFBvcnQ7CmNsYXNzCWNv
bmZpZ3VyYXRpb247CgpjbGFzcyBMaWdodGluZyB7CiAgICBwdWJsaWM6CglMaWdodGluZyhjb25z
dCBjb25maWd1cmF0aW9uJik7CglMaWdodGluZyhjb25zdCBjb25maWd1cmF0aW9uJiwgY29uc3Qg
SW5zcExpZ2h0Jik7Cgl+TGlnaHRpbmcoKTsKCgl2b2lkCXNldF90b19mbHkoaW50IHBhc3Nfbm8g
PSAtMSk7CSAKCXZvaWQJc2V0X3RvX2ZpZHUoKTsJIAoJdm9pZAlzZXRfbGlnaHQoY29uc3QgSW5z
cExpZ2h0JiBsaWdodCk7Cgl2b2lkCXNldF9saWdodChjb25zdCBJbnNwTGlnaHQgKmxpZ2h0KTsK
Cgl2b2lkCXRpbWUoc2hvcnQpOwoJdm9pZAlzZXRfZGlnaW8obG9uZyk7CgoJdm9pZAlkaXNhYmxl
X3RpbWluZygpOwoKCXN0YXRpYyBib29sIG1vZGUzZCgpOwoJCglmcmllbmQgaW50IG9wZXJhdG9y
PT0gKGNvbnN0IExpZ2h0aW5nJiBsZWZ0LCBjb25zdCBMaWdodGluZyYgcmlnaHQpIHsKCSAgICBy
ZXR1cm4obGVmdC5fY3VyX2xpZ2h0ID09IHJpZ2h0Ll9jdXJfbGlnaHQpOwoJfQoJZnJpZW5kIGlu
dCBvcGVyYXRvciE9IChjb25zdCBMaWdodGluZyYgbGVmdCwgY29uc3QgTGlnaHRpbmcmIHJpZ2h0
KSB7CgkgICAgcmV0dXJuKCEobGVmdCA9PSByaWdodCkpOwoJfQoKICAgIHByb3RlY3RlZDoKCWNv
bnN0IGNvbmZpZ3VyYXRpb24mCV9jZmc7CglJbnNwTGlnaHQJCV9jdXJfbGlnaHQ7CgoJTGlnaHRp
bmcoKTsJIAoKCXZvaWQJc2VuZChTZXJpYWxQb3J0Jik7Cgl2b2lkCXVwZGF0ZV9oYXJkd2FyZSgp
OwoJdm9pZAl0b2dnbGVfY2FtZXJhX2hlaWdodCgpOwoJdm9pZAlwcm9ncmFtX21vZGUoU2VyaWFs
UG9ydCYsIGxvbmcpOwoKCXZvaWQJcnRjX3VwZGF0ZV9oYXJkd2FyZSgpOwoJdm9pZAlydGNfZGlz
YWJsZV90aW1pbmcoKTsKfTsKCgoKIyAxNCAic2F2ZV9zbmFwLmMiIDIKCgojIDEgIi4uLy4uL2lu
Y2x1ZGUvbG9jYWxpbmMvbWFjcm8uaCIgMQoKCgogCgoKCgojIDE4ICIuLi8uLi9pbmNsdWRlL2xv
Y2FsaW5jL21hY3JvLmgiCgoKIAoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgoKIyA3NyAiLi4v
Li4vaW5jbHVkZS9sb2NhbGluYy9tYWNyby5oIgoKCiMgMTAxICIuLi8uLi9pbmNsdWRlL2xvY2Fs
aW5jL21hY3JvLmgiCgogCgoKCgoKIyAxMjYgIi4uLy4uL2luY2x1ZGUvbG9jYWxpbmMvbWFjcm8u
aCIKCgoKCgogCgoKCgojIDE1OCAiLi4vLi4vaW5jbHVkZS9sb2NhbGluYy9tYWNyby5oIgoKCgoK
CgoKCgoKCgoKCgoKCnN0YXRpYyBpbmxpbmUgc2hvcnQgaW5saW5lX2FicyhzaG9ydCB2KSB7IGlm
ICh2ID49IDApIHJldHVybiB2OyByZXR1cm4gLXY7IH0Kc3RhdGljIGlubGluZSBpbnQgaW5saW5l
X2FicyhpbnQgdikgeyBpZiAodiA+PSAwKSByZXR1cm4gdjsgcmV0dXJuIC12OyB9CnN0YXRpYyBp
bmxpbmUgbG9uZyBpbmxpbmVfYWJzKGxvbmcgdikgeyBpZiAodiA+PSAwKSByZXR1cm4gdjsgcmV0
dXJuIC12OyB9CnN0YXRpYyBpbmxpbmUgZmxvYXQgaW5saW5lX2FicyhmbG9hdCB2KSB7IGlmICh2
ID49IDApIHJldHVybiB2OyByZXR1cm4gLXY7IH0Kc3RhdGljIGlubGluZSBkb3VibGUgaW5saW5l
X2Ficyhkb3VibGUgdikgeyBpZiAodiA+PSAwKSByZXR1cm4gdjsgcmV0dXJuIC12OyB9CgoKCgoK
CgoKCgoKCgojIDE2ICJzYXZlX3NuYXAuYyIgMgoKIyAxICIuLi8uLi9pbmNsdWRlL2xvY2FsaW5j
L2V2ZW50X3Byb2Nlc3NpbmcuaCIgMQoKCgpjb25zdCBpbnQgQ0hBTkdFX05PVF9TRVQgPSAtMjsJ
IApjb25zdCBpbnQgQ0FOQ0VMCT0gLTE7CSAKCiAKCgoKY29uc3QgaW50IEZJRFVDSUFMCT0gLTI7
CgoKIAoKCgoKCgoKCgojIDE3ICJzYXZlX3NuYXAuYyIgMgoKIyAxICIuLi8uLi9pbmNsdWRlL2xv
Y2FsaW5jL0NvbW1vbkdsb2JhbHMuSCIgMQoKCgogCgoKCgoKCgoKCgpjbGFzcwlHcm91cDsKY2xh
c3MJVG9wZm9ybTsKCmNvbnN0IGludCBrUGluUGFydFV0aWxpdHkJPSAwOwpjb25zdCBpbnQga1Jl
cGFpclN0YXRpb24JPSAxOwpjb25zdCBpbnQga0xhc2VyU3RhdGlvbgkJPSAyOwpjb25zdCBpbnQg
a0F1dG9UcmFpbmVyCQk9IDM7CmNvbnN0IGludCBrRGVmZWN0U3RhdGlvbgk9IDQ7CmNvbnN0IGlu
dCBrVmVyaWZpY2F0aW9uU3RhdGlvbgk9IDU7CmNvbnN0IGludCBrRGJnZW4JCT0gNjsKCmNsYXNz
IENvbW1vbkdsb2JhbHMgewpwdWJsaWM6CiAgICBDb21tb25HbG9iYWxzKCk7CQkgCiAgICB2b2lk
ICpvcGVyYXRvciBuZXcoc2l6ZV90KSB0aHJvdygpOwoKICAgIFRvcGZvcm0JKnRvcGZvcm07Cgog
ICAgYm9vbAlBdXRvSW5zcGVjdG9yKCkgeyByZXR1cm4gKF9hcHBsaWNhdGlvbiA9PSBrUGluUGFy
dFV0aWxpdHkpOyB9CiAgICBib29sCUF1dG9UcmFpbmVyKCkgeyByZXR1cm4gKF9hcHBsaWNhdGlv
biA9PSBrQXV0b1RyYWluZXIpOyB9CiAgICBib29sCURiZ2VuKCkgeyByZXR1cm4gKF9hcHBsaWNh
dGlvbiA9PSBrRGJnZW4pOyB9CiAgICBib29sCURlZmVjdFN0YXRpb24oKSB7IHJldHVybiAoX2Fw
cGxpY2F0aW9uID09IGtEZWZlY3RTdGF0aW9uKTsgfQogICAgYm9vbAlMYXNlclN0YXRpb24oKSB7
IHJldHVybiAoX2FwcGxpY2F0aW9uID09IGtMYXNlclN0YXRpb24pOyB9CiAgICBib29sCVJlcGFp
clN0YXRpb24oKSB7IHJldHVybiAoX2FwcGxpY2F0aW9uID09IGtSZXBhaXJTdGF0aW9uKTsgfQog
ICAgYm9vbAlWZXJpZmljYXRpb25TdGF0aW9uKCkgeyByZXR1cm4gKF9hcHBsaWNhdGlvbiA9PSBr
VmVyaWZpY2F0aW9uU3RhdGlvbik7IH0KICAgIGJvb2wgICAgCWdldG5vdXNlcnJ1bGVzKCkge3Jl
dHVybiBub191c2VyX3J1bGVzOyB9CgogICAgdm9pZAlNb3ZlV29ya1Byb2NJZChYdFdvcmtQcm9j
SWQgaWQpIHsgd29ya19wcm9jID0gaWQ7IH0KICAgIHZvaWQJc2V0X2Rpc3BsYXlfd2lkZ2V0cyhX
aWRnZXQsIFdpZGdldCk7CiAgICB2b2lkICAgIAlzZXRub3VzZXJydWxlcyhib29sIHZhbHVlKSB7
bm9fdXNlcl9ydWxlcyA9IHZhbHVlOyB9CgogICAgWHRXb3JrUHJvY0lkIE1vdmVXb3JrUHJvY0lk
KCkgeyByZXR1cm4gd29ya19wcm9jOyB9CgogICAgIAoKCgoKICAgIGludAkJYXBwbGljYXRpb24o
KSB7IHJldHVybiBfYXBwbGljYXRpb247IH0KICAgIHZvaWQJYXBwbGljYXRpb24oaW50IGFwcGwp
IHsgX2FwcGxpY2F0aW9uID0gYXBwbDsgfQoKICAgIGJvb2wJQXV0b0FwcGx5RGVmZWN0KCkgeyBy
ZXR1cm4gYXV0b19hcHBseV9kZWZlY3Q7IH0KICAgIHZvaWQJQXV0b0FwcGx5RGVmZWN0KGJvb2wg
c3RhdGUpIHsgYXV0b19hcHBseV9kZWZlY3QgPSBzdGF0ZTsgfQoKICAgIGJvb2wJQXV0b1JlcGFp
cigpIHsgcmV0dXJuIGF1dG9fcmVwYWlyOyB9CiAgICB2b2lkCUF1dG9SZXBhaXIoYm9vbCBzdGF0
ZSkgeyBhdXRvX3JlcGFpciA9IHN0YXRlOyB9CgogICAgYm9vbAlBdXRvUmVwYWlyTW9kZSgpIHsg
cmV0dXJuIGF1dG9fcmVwX21vZGU7IH0KICAgIHZvaWQJQXV0b1JlcGFpck1vZGUoYm9vbCBzdGF0
ZSkgeyBhdXRvX3JlcF9tb2RlID0gc3RhdGU7IH0KCiAgICBib29sCUNhbGlicmF0ZWREYXRhYmFz
ZUZsYWcoKSB7IHJldHVybiBkYmFzZV9jYWxpYjsgfQogICAgdm9pZAlDYWxpYnJhdGVkRGF0YWJh
c2VGbGFnKGJvb2wgc3RhdGUpIHsgZGJhc2VfY2FsaWIgPSBzdGF0ZTsgfQoKICAgIGJvb2wJQ2hh
bmdlQXV0b1JlcGFpck1vZGUoKSB7IHJldHVybiBjaGFuZ2VfYXV0b19yZXA7IH0KICAgIHZvaWQJ
Q2hhbmdlQXV0b1JlcGFpck1vZGUoYm9vbCBzdGF0ZSkgeyBjaGFuZ2VfYXV0b19yZXAgPSBzdGF0
ZTsgfQoKICAgIGludAkJQ3VycmVudENhbWVyYSgpIHsgcmV0dXJuIGN1cnJlbnRfY2FtOyB9CiAg
ICB2b2lkCUN1cnJlbnRDYW1lcmEoaW50IHdoaWNoKTsKCiAgICAgCgoKICAgIGludAkJRGF0YWJh
c2VSb3RhdGlvbigpIHsgcmV0dXJuIGRhdGFiYXNlX3JvdGF0aW9uOyB9CiAgICB2b2lkCURhdGFi
YXNlUm90YXRpb24oaW50IGFuZ2xlKSB7IGRhdGFiYXNlX3JvdGF0aW9uID0gYW5nbGU7IH0KCiAg
ICAgCgoKCiAgICBpbnQJCURpc3BsYXlSb3RhdGlvbigpIHsgcmV0dXJuIGRpc3BsYXlfcm90YXRp
b247IH0KICAgIHZvaWQJRGlzcGxheVJvdGF0aW9uKGludCBhbmdsZSkgeyBkaXNwbGF5X3JvdGF0
aW9uID0gYW5nbGU7IH0KCiAgICBjb25zdCBjaGFyCSpDdXJyZW50Q29tcFRibE5hbWUoKSB7IHJl
dHVybiBjb21wX3RhYmxlOyB9CiAgICB2b2lkCUN1cnJlbnRDb21wVGJsTmFtZShjb25zdCBjaGFy
ICpuYW1lKSB7IHN0cm5jcHkoY29tcF90YWJsZSwgbmFtZSwgc2l6ZW9mKGNvbXBfdGFibGUpKTsg
fQogICAgdm9pZAlDdXJyZW50Q29tcFRibE5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIHsg
c3RybmNweShjb21wX3RhYmxlLCBuYW1lLmNfc3RyKCksIHNpemVvZihjb21wX3RhYmxlKSk7IH0K
CiAgICBjb25zdCBjaGFyCSpDdXJyZW50RGF0YWJhc2VOYW1lKCkgeyByZXR1cm4gZGJhc2VfbmFt
ZTsgfQogICAgdm9pZAlDdXJyZW50RGF0YWJhc2VOYW1lKGNvbnN0IGNoYXIgKm5hbWUpIHsgc3Ry
bmNweShkYmFzZV9uYW1lLCBuYW1lLCBzaXplb2YoZGJhc2VfbmFtZSkpOyB9CiAgICB2b2lkCUN1
cnJlbnREYXRhYmFzZU5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIHsgc3RybmNweShkYmFz
ZV9uYW1lLCBuYW1lLmNfc3RyKCksIHNpemVvZihkYmFzZV9uYW1lKSk7IH0KCiAgICBjb25zdCBH
cm91cAkqQ3VycmVudEdyb3VwKCkgeyByZXR1cm4gY3VycmVudF9ncm91cDsgfQogICAgdm9pZAlD
dXJyZW50R3JvdXAoY29uc3QgR3JvdXAgKmdycCkgeyBjdXJyZW50X2dyb3VwID0gZ3JwOyB9Cgog
ICAgaW50CQlDdXJzb3JBbmNob3JUeXBlKCkgeyByZXR1cm4gY3Vyc29yX2FuY2hvcl90eXBlOyB9
CiAgICB2b2lkCUN1cnNvckFuY2hvclR5cGUoaW50IGFuY2hvcikgeyBjdXJzb3JfYW5jaG9yX3R5
cGUgPSBhbmNob3I7IH0KCiAgICBib29sCUN1cnNvckRvd24oKSB7IHJldHVybiBjdXJzb3JfZG47
IH0KICAgIHZvaWQJQ3Vyc29yRG93bihib29sIHN0YXRlKSB7IGN1cnNvcl9kbiA9IHN0YXRlOyB9
CgogICAgYm9vbAlEYXRhYmFzZUNoYW5nZWQoKSB7IHJldHVybiBkYmFzZV9jaGFuZ2VkOyB9CiAg
ICB2b2lkCURhdGFiYXNlQ2hhbmdlZChib29sIHN0YXRlKSB7IGRiYXNlX2NoYW5nZWQgPSBzdGF0
ZTsgfQoKICAgIGJvb2wJRGF0YWJhc2VOYW1lQ2hhbmdlZCgpIHsgcmV0dXJuIG5hbWVfY2hhbmdl
ZDsgfQogICAgdm9pZAlEYXRhYmFzZU5hbWVDaGFuZ2VkKGJvb2wgc3RhdGUpIHsgbmFtZV9jaGFu
Z2VkID0gc3RhdGU7IH0KCiAgICBib29sCURhdGFiYXNlTmFtZWQoKSB7IHJldHVybiBkYmFzZV9u
YW1lZDsgfQogICAgdm9pZAlEYXRhYmFzZU5hbWVkKGJvb2wgc3RhdGUpIHsgZGJhc2VfbmFtZWQg
PSBzdGF0ZTsgfQoKICAgIGJvb2wJZGVidWcoKSB7IHJldHVybiBkZWJ1Z19vbjsgfQogICAgdm9p
ZAlkZWJ1Zyhib29sIHN0YXRlKSB7IGRlYnVnX29uID0gc3RhdGU7IH0KCiAgICBib29sCURlbGV0
ZVNuYXBzV2hlbkRvbmUoKSB7IHJldHVybiBkZWxldGVfc25hcHM7IH0KICAgIHZvaWQJRGVsZXRl
U25hcHNXaGVuRG9uZShib29sIHN0YXRlKSB7IGRlbGV0ZV9zbmFwcyA9IHN0YXRlOyB9CgogICAg
dm9pZAlEaXNwbGF5TXNnV2lkZ2V0KFdpZGdldCBkaXNwKSB7IGRpc3BsYXlfd2lkZ2V0ID0gZGlz
cDsgfQogICAgV2lkZ2V0CURpc3BsYXlNc2dXaWRnZXQoKSB7IHJldHVybiBkaXNwbGF5X3dpZGdl
dDsgfQoKICAgIGJvb2wJRGlzcGxheUl0ZW1TbmFwcygpIHsgcmV0dXJuIGl0ZW1fc25hcHM7IH0K
ICAgIHZvaWQJRGlzcGxheUl0ZW1TbmFwcyhib29sIHN0YXRlKSB7IGl0ZW1fc25hcHMgPSBzdGF0
ZTsgfQoKICAgIGJvb2wJRG9pbmdCb2FyZEluaXQoKSB7IHJldHVybiBkb2luZ19pbml0OyB9CiAg
ICB2b2lkCURvaW5nQm9hcmRJbml0KGJvb2wgc3RhdGUpIHsgZG9pbmdfaW5pdCA9IHN0YXRlOyB9
CgogICAgYm9vbAlEb2luZ0NhbGlicmF0aW9uKCkgeyByZXR1cm4gZG9pbmdfY2FsaWI7IH0KICAg
IHZvaWQJRG9pbmdDYWxpYnJhdGlvbihib29sIHN0YXRlKSB7IGRvaW5nX2NhbGliID0gc3RhdGU7
IH0KCiAgICBib29sCURvaW5nR2F1Z2UoKSB7IHJldHVybiBkb2luZ19nYXVnZTsgfQogICAgdm9p
ZAlEb2luZ0dhdWdlKGJvb2wgc3RhdGUpIHsgZG9pbmdfZ2F1Z2UgPSBzdGF0ZTsgfQoKICAgIGJv
b2wJRG9pbmdSb3RhdGlvbigpIHsgcmV0dXJuIGlzX3JvdGF0aW5nOyB9CiAgICB2b2lkCURvaW5n
Um90YXRpb24oYm9vbCBzdGF0ZSkgeyBpc19yb3RhdGluZyA9IHN0YXRlOyB9CgogICAgYm9vbAlE
b2luZ1NuYXBFZGl0KCkgeyByZXR1cm4gc25hcF9lZGl0OyB9CiAgICB2b2lkCURvaW5nU25hcEVk
aXQoYm9vbCBzdGF0ZSkgeyBzbmFwX2VkaXQgPSBzdGF0ZTsgfQoKICAgIGJvb2wJRG9pbmdWaXMo
KSB7IHJldHVybiBkb2luZ192aXM7IH0KICAgIHZvaWQJRG9pbmdWaXMoYm9vbCBzdGF0ZSkgeyBk
b2luZ192aXMgPSBzdGF0ZTsgfQoKICAgIGJvb2wJRG9udFNob3dJbnNwZWN0aW9uV2luZG93cygp
IHsgcmV0dXJuIG5vX3dpbmRvd3M7IH0KICAgIHZvaWQJRG9udFNob3dJbnNwZWN0aW9uV2luZG93
cyhib29sIHN0YXRlKSB7IG5vX3dpbmRvd3MgPSBzdGF0ZTsgfQoKICAgIGJvb2wJRG9TaW1GbHlJ
bnNwZWN0aW9uKCkgeyByZXR1cm4gc2ltdWxhdGVkX2ZseTsgfQogICAgdm9pZAlEb1NpbUZseUlu
c3BlY3Rpb24oYm9vbCBzdGF0ZSkgeyBzaW11bGF0ZWRfZmx5ID0gc3RhdGU7IH0KCiAgICBpbnQJ
CUZpbmRpbmdCeSgpIHsgcmV0dXJuIGZpbmRpbmdfYnk7IH0KICAgIHZvaWQJRmluZGluZ0J5KGlu
dCB3aGF0KSB7IGZpbmRpbmdfYnkgPSB3aGF0OyB9CgogICAgaW50CQkqRmluZFBhcnRJbmRleCgp
IHsgcmV0dXJuICZwYXJ0X2luZGV4OyB9CiAgICB2b2lkCUZpbmRQYXJ0SW5kZXgoaW50IHdoYXQp
IHsgcGFydF9pbmRleCA9IHdoYXQ7IH0KCiAgICBib29sCUZvcmNlQ3Jvc3NoYWlyKCkgeyByZXR1
cm4gZm9yY2VfY3Jvc3NoYWlyOyB9CiAgICB2b2lkCUZvcmNlQ3Jvc3NoYWlyKGJvb2wgc3RhdGUp
IHsgZm9yY2VfY3Jvc3NoYWlyID0gc3RhdGU7IH0KCiAgICBib29sCUhhc0xhc2VyU3RhdGlvbigp
IHsgcmV0dXJuIGxhc2VyX3N0YXRpb247IH0KICAgIHZvaWQJSGFzTGFzZXJTdGF0aW9uKGJvb2wg
c3RhdGUpIHsgbGFzZXJfc3RhdGlvbiA9IHN0YXRlOyB9CgogICAgYm9vbAlIb21lTW90b3JGbGFn
KCkgeyByZXR1cm4gaG9tZV9tb3RfZmxhZzsgfQogICAgdm9pZAlIb21lTW90b3JGbGFnKGJvb2wg
c3RhdGUpIHsgaG9tZV9tb3RfZmxhZyA9IHN0YXRlOyB9CgogICAgY29uc3QgY2hhcgkqSW1hZ2VT
dG9yYWdlRGlyKCkgeyByZXR1cm4gaW1hZ2VfZGlyOyB9CiAgICB2b2lkCUltYWdlU3RvcmFnZURp
cihjb25zdCBjaGFyICpkaXIpIHsgc3RybmNweShpbWFnZV9kaXIsIGRpciwgc2l6ZW9mKGltYWdl
X2RpcikpOyB9CgogICAgYm9vbAlJbnNwRG9uZSgpIHsgcmV0dXJuIGluc3BfZG9uZTsgfQogICAg
dm9pZAlJbnNwRG9uZShib29sIHN0YXRlKSB7IGluc3BfZG9uZSA9IHN0YXRlOyB9CgogICAgaW50
IAlqX2ljb24oKSB7IHJldHVybiBKSWNvbjsgfQogICAgdm9pZCAJal9pY29uKGludCBpY29uKSB7
IEpJY29uID0gaWNvbjsgfQoKICAgIGludCAJal90eXBlKCkgeyByZXR1cm4gSlR5cGU7IH0KICAg
IHZvaWQgCWpfdHlwZShpbnQgdHlwZSkgeyBKVHlwZSA9IHR5cGU7IH0KCiAgICBpbnQJCUxhc3RD
bG9zZXVwSG9sZSgpIHsgcmV0dXJuIGxhc3RfY2xvc2V1cF9ob2xlOyB9CiAgICB2b2lkCUxhc3RD
bG9zZXVwSG9sZShpbnQgaG9sZSkgeyBsYXN0X2Nsb3NldXBfaG9sZSA9IGhvbGU7IH0KCiAgICB2
b2lkCU1vdmluZ1dpbmRvdyhXaW5kICp3aW4pIHsgbW92aW5nX3dpbmRvdyA9IHdpbjsgfQogICAg
V2luZAkqTW92aW5nV2luZG93KCkgeyByZXR1cm4gbW92aW5nX3dpbmRvdzsgfQoKICAgIGJvb2wJ
T2tUb0luc3BlY3RGbGFnKCkgeyByZXR1cm4gb2tfaW5zcGVjdF9mbGFnOyB9CiAgICB2b2lkCU9r
VG9JbnNwZWN0RmxhZyhib29sIHN0YXRlKSB7IG9rX2luc3BlY3RfZmxhZyA9IHN0YXRlOyB9Cgog
ICAgdm9pZAlQYXJlbnRXaW5kb3coV2luZCAqd2luKSB7IHBhcmVudF93aW5kb3cgPSB3aW47IH0K
ICAgIFdpbmQJKlBhcmVudFdpbmRvdygpIHsgcmV0dXJuIHBhcmVudF93aW5kb3c7IH0KCiAgICBi
b29sCVJlcGFpckFib3J0ZWQoKSB7IHJldHVybiByZXBhaXJfYWJvcnQ7IH0KICAgIHZvaWQJUmVw
YWlyQWJvcnRlZChib29sIHN0YXRlKSB7IHJlcGFpcl9hYm9ydCA9IHN0YXRlOyB9CgogICAgdm9p
ZAlyZXBhaXJfbWFuYWdlKFdpZGdldCB3aG8pIHsgZGVmZWN0X3JlcGFpciA9IHdobzsgfQogICAg
V2lkZ2V0CXJlcGFpcl9tYW5hZ2UoKSB7IHJldHVybiBkZWZlY3RfcmVwYWlyOyB9CgogICAgYm9v
bAlSZXZpZXdBbGxCb2FyZHMoKSB7IHJldHVybiByZXZpZXdfYWxsOyB9CiAgICB2b2lkCVJldmll
d0FsbEJvYXJkcyhib29sIHN0YXRlKSB7IHJldmlld19hbGwgPSBzdGF0ZTsgfQoKICAgIHZvaWQJ
U2F2ZVdpbmRvdyhXaW5kIHdpbikgeyBzYXZlX3dpbmRvdyA9IHdpbjsgfQogICAgV2luZAlTYXZl
V2luZG93KCkgeyByZXR1cm4gc2F2ZV93aW5kb3c7IH0KCiAgICBib29sCVNjYW5uZXIoKSB7IHJl
dHVybiBfc2Nhbm5lcjsgfQogICAgdm9pZAlTY2FubmVyKGJvb2wgc3RhdGUpIHsgX3NjYW5uZXIg
PSBzdGF0ZTsgfQoKICAgIGJvb2wJU2VlblNoaWZ0KCkgeyByZXR1cm4gc2Vlbl9zaGlmdDsgfQog
ICAgdm9pZAlTZWVuU2hpZnQoYm9vbCBzdGF0ZSkgeyBzZWVuX3NoaWZ0ID0gc3RhdGU7IH0KCiAg
ICBib29sCVNob3dQYXJ0TmFtZXMoKSB7IHJldHVybiBfc2hvd19uYW1lczsgfQogICAgdm9pZAlT
aG93UGFydE5hbWVzKGJvb2wgc3RhdGUpIHsgX3Nob3dfbmFtZXMgPSBzdGF0ZTsgfQoKICAgIGJv
b2wJU25hcElzU25hcCgpIHsgcmV0dXJuIHNuYXBfaXNfc25hcDsgfQogICAgdm9pZCAJU25hcElz
U25hcChib29sIHN0YXRlKSB7IHNuYXBfaXNfc25hcCA9IHN0YXRlOyB9CgogICAgaW50CQlTbmFw
T25TY3JlZW4oKSB7IHJldHVybiBzbmFwX29uX3NjcmVlbjsgfQogICAgdm9pZAlTbmFwT25TY3Jl
ZW4oaW50IHdoaWNoKSB7IHNuYXBfb25fc2NyZWVuID0gd2hpY2g7IH0KCiAgICBib29sCVRlc3RC
YXJjb2RlKCkgeyByZXR1cm4gdGVzdF9iYzsgfQogICAgdm9pZAlUZXN0QmFyY29kZShib29sIHN0
YXRlKSB7IHRlc3RfYmMgPSBzdGF0ZTsgfQoKICAgIHZvaWQJVG9wTWVudShXaWRnZXQgbWVudSkg
eyB0b3BfbWVudSA9IG1lbnU7IH0KICAgIFdpZGdldAlUb3BNZW51KCkgeyByZXR1cm4gdG9wX21l
bnU7IH0KCiAgICBib29sCVVzaW5nU2VyaWFsTnVtYmVycygpIHsgcmV0dXJuIHNlcmlhbF9udW1z
OyB9CiAgICB2b2lkCVVzaW5nU2VyaWFsTnVtYmVycyhib29sIHN0YXRlKSB7IHNlcmlhbF9udW1z
ID0gc3RhdGU7IH0KCiAgICBib29sCVdhaXRGb3JDb252b2x2ZSgpIHsgcmV0dXJuIHdhaXRfZm9y
X2NvbnY7IH0KICAgIHZvaWQJV2FpdEZvckNvbnZvbHZlKGJvb2wgc3RhdGUpIHsgd2FpdF9mb3Jf
Y29udiA9IHN0YXRlOyB9Cgpwcml2YXRlOgogICAgaW50CQlfYXBwbGljYXRpb247CiAgICBpbnQJ
CUpJY29uOwogICAgaW50CQlKVHlwZTsKICAgIGludAkJY3VycmVudF9jYW07CiAgICBpbnQJCWRh
dGFiYXNlX3JvdGF0aW9uOwogICAgaW50CQlkaXNwbGF5X3JvdGF0aW9uOwogICAgaW50CQljdXJz
b3JfYW5jaG9yX3R5cGU7CiAgICBpbnQJCWZpbmRpbmdfYnk7CiAgICBpbnQJCWxhc3RfY2xvc2V1
cF9ob2xlOwogICAgaW50CQlwYXJ0X2luZGV4OwogICAgaW50CQlzbmFwX29uX3NjcmVlbjsKCiAg
ICBjb25zdCBHcm91cAkqY3VycmVudF9ncm91cDsKCiAgICBib29sCV9zY2FubmVyOwkgCiAgICBi
b29sCWF1dG9fYXBwbHlfZGVmZWN0OwogICAgYm9vbAlhdXRvX3JlcF9tb2RlOwogICAgYm9vbAlh
dXRvX3JlcGFpcjsKICAgIGJvb2wgCWF1dG9fdHJhaW5lcjsKICAgIGJvb2wJY2hhbmdlX2F1dG9f
cmVwOwogICAgYm9vbAlva19pbnNwZWN0X2ZsYWc7CiAgICBib29sCWN1cnNvcl9kbjsKICAgIGJv
b2wJZGJhc2VfY2FsaWI7CiAgICBib29sIAlkYmFzZV9jaGFuZ2VkOwogICAgYm9vbAlkYmFzZV9u
YW1lZDsKICAgIGJvb2wJZGVidWdfb247CiAgICBib29sCWRlbGV0ZV9zbmFwczsKICAgIGJvb2wJ
ZG9pbmdfY2FsaWI7CiAgICBib29sCWRvaW5nX2dhdWdlOwogICAgYm9vbAlkb2luZ19pbml0Owog
ICAgYm9vbAlkb2luZ192aXM7CiAgICBib29sCWZvcmNlX2Nyb3NzaGFpcjsKICAgIGJvb2wJaG9t
ZV9tb3RfZmxhZzsKICAgIGJvb2wJaW5zcF9kb25lOwogICAgYm9vbAlpc19yb3RhdGluZzsKICAg
IGJvb2wJaXRlbV9zbmFwczsKICAgIGJvb2wJbGFzZXJfc3RhdGlvbjsKICAgIGJvb2wJbmFtZV9j
aGFuZ2VkOwogICAgYm9vbCAgICAJbm9fdXNlcl9ydWxlczsKICAgIGJvb2wJbm9fd2luZG93czsK
ICAgIGJvb2wJcmVwYWlyX2Fib3J0OwogICAgYm9vbAlyZXZpZXdfYWxsOwogICAgYm9vbAlzZWVu
X3NoaWZ0OwogICAgYm9vbAlzZXJpYWxfbnVtczsKICAgIGJvb2wJX3Nob3dfbmFtZXM7CiAgICBi
b29sCXNpbXVsYXRlZF9mbHk7CiAgICBib29sCXNuYXBfZWRpdDsKICAgIGJvb2wJc25hcF9pc19z
bmFwOwogICAgYm9vbAl0ZXN0X2JjOwogICAgYm9vbAl3YWl0X2Zvcl9jb252OwoKICAgIGNoYXIg
CWNvbXBfdGFibGVbMTI4XTsKICAgIGNoYXIJZGJhc2VfbmFtZVsxMjhdOwogICAgY2hhcglpbWFn
ZV9kaXJbMTI4XTsKCiAgICBXaWRnZXQJZGVmZWN0X3JlcGFpcjsKICAgIFdpZGdldAlkaXNwbGF5
X3dpZGdldDsKICAgIFdpZGdldAl0b3BfbWVudTsKCiAgICBXaW5kCSptb3Zpbmdfd2luZG93Owog
ICAgV2luZAkqcGFyZW50X3dpbmRvdzsKICAgIFdpbmQJc2F2ZV93aW5kb3c7CgogICAgWHRXb3Jr
UHJvY0lkIHdvcmtfcHJvYzsKfTsKZXh0ZXJuIENvbW1vbkdsb2JhbHMJKmdDRzsKCiMgMTggInNh
dmVfc25hcC5jIiAyCgojIDEgIi4uLy4uL2luY2x1ZGUvbGliaW5jL2NmZ19jbGFzcy5oIiAxCgoK
IAogCiAKCgoKIyAxICIvdXNyL2luY2x1ZGUvbmV0ZGIuaCIgMSAzIDQKIAogCgogCiAKIAoKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKW5ldGRiLmgJMS4y
Mwk5OS8xMi8wNiBTTUkiCgoKIyAxICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAxIDMgNAog
CgoKCiAKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylpbi5oCTEu
MzAJMDAvMDgvMTAgU01JIgoKCgoKCgpleHRlcm4gIkMiIHsKCgoKIyAxICIvb3B0L212cGxvY2Fs
L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvaW5jbHVkZS9zeXMvc3RyZWFt
LmgiIDEgMyA0CgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3RyZWFtLmgiIDEgMyA0CiAKIAoK
IAogCiAKCiAKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylzdHJlYW0uaAkxLjg1CTk5LzEyLzE1
IFNNSSIJCgogCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy92bm9kZS5oIiAxIDMgNAogCiAKCiAK
IAogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXZub2Rl
LmgJMS44NQk5OS8wNy8zMCBTTUkiCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3RfbG9jay5oIiAx
IDMgNAogCgoKCgogCgoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXRfbG9jay5oCTEuNDUJOTgv
MDIvMDEgU01JIgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9tYWNobG9jay5oIiAxIDMgNAogCgoK
CgoKCgojcHJhZ21hIGlkZW50CSJAKCMpbWFjaGxvY2suaAkxLjIxCTAwLzA0LzI3IFNNSSIKCgpl
eHRlcm4gIkMiIHsKCgoKCgoKIyAyOSAiL3Vzci9pbmNsdWRlL3N5cy9tYWNobG9jay5oIiAzIDQK
CgoKCgoKCnR5cGVkZWYJbG9ja190CWRpc3BfbG9ja190OwkJIAoKIAoKCgoKCiAKCgoKCgoKCiAK
CgpleHRlcm4JaW50CWhyZXNfbG9jazsKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKCgoKCgoKCgoKfQoKCgojIDE4ICIvdXNyL2luY2x1ZGUvc3lzL3RfbG9jay5oIiAyIDMgNAoK
IyAxICIvdXNyL2luY2x1ZGUvc3lzL3BhcmFtLmgiIDEgMyA0CiAKCgoKCiAKIAoKIAogCiAKCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpcGFyYW0uaAkxLjc2CTAw
LzAyLzE0IFNNSSIKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoJCQkJIAoJCQkJIAoJCQkJIAoKIAoKCgoKCgogCgoKCgoK
IAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiAKCgoKCgoKCgoK
CgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgogCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgoKIyAy
NzkgIi91c3IvaW5jbHVkZS9zeXMvcGFyYW0uaCIgMyA0CgoKCn0KCgogCgoKCgojIDQwMyAiL3Vz
ci9pbmNsdWRlL3N5cy9wYXJhbS5oIiAzIDQKCgogCgoKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgoK
ZXh0ZXJuIGxvbmcgX3N5c2NvbmYoaW50KTsJIAoKCgoKCgoKCgoKfQoKCgoKCiMgMTkgIi91c3Iv
aW5jbHVkZS9zeXMvdF9sb2NrLmgiIDIgMyA0CgojIDEgIi91c3IvaW5jbHVkZS9zeXMvbXV0ZXgu
aCIgMSAzIDQKIAoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKW11dGV4LmgJMS4yMAk5OC8wMi8w
MSBTTUkiCgoKCgoKCmV4dGVybiAiQyIgewoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYg
ZW51bSB7CglNVVRFWF9BREFQVElWRSA9IDAsCSAKCU1VVEVYX1NQSU4gPSAxLAkJIAoJTVVURVhf
RFJJVkVSID0gNCwJIAoJTVVURVhfREVGQVVMVCA9IDYJIAp9IGttdXRleF90eXBlX3Q7Cgp0eXBl
ZGVmIHN0cnVjdCBtdXRleCB7CgoKCgl2b2lkCSpfb3BhcXVlWzJdOwoKfSBrbXV0ZXhfdDsKCiMg
NjcgIi91c3IvaW5jbHVkZS9zeXMvbXV0ZXguaCIgMyA0CgoKCgoKfQoKCgojIDIwICIvdXNyL2lu
Y2x1ZGUvc3lzL3RfbG9jay5oIiAyIDMgNAoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3J3bG9jay5o
IiAxIDMgNAogCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpcndsb2NrLmgJMS45CTk4LzAyLzE4
IFNNSSIKCiAKCgoKCgoKZXh0ZXJuICJDIiB7CgoKCgp0eXBlZGVmIGVudW0gewoJUldfRFJJVkVS
ID0gMiwJCSAKCVJXX0RFRkFVTFQgPSA0CQkgCn0ga3J3X3R5cGVfdDsKCnR5cGVkZWYgZW51bSB7
CglSV19XUklURVIsCglSV19SRUFERVIKfSBrcndfdDsKCnR5cGVkZWYgc3RydWN0IF9rcndsb2Nr
IHsKCXZvaWQJKl9vcGFxdWVbMV07Cn0ga3J3bG9ja190OwoKIyA1OCAiL3Vzci9pbmNsdWRlL3N5
cy9yd2xvY2suaCIgMyA0CgoKCgoKfQoKCgojIDIxICIvdXNyL2luY2x1ZGUvc3lzL3RfbG9jay5o
IiAyIDMgNAoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbWFwaG9yZS5oIiAxIDMgNAogCgoKCgoK
CgojcHJhZ21hIGlkZW50CSJAKCMpc2VtYXBob3JlLmgJMS41CTk4LzAyLzAxIFNNSSIKCiAKCgoK
CgoKCgoKCmV4dGVybiAiQyIgewoKCnR5cGVkZWYgZW51bSB7CglTRU1BX0RFRkFVTFQsCglTRU1B
X0RSSVZFUgp9IGtzZW1hX3R5cGVfdDsKCnR5cGVkZWYgc3RydWN0IF9rc2VtYSB7Cgl2b2lkCSog
X29wYXF1ZVsyXTsJIAp9IGtzZW1hX3Q7CgojIDQ2ICIvdXNyL2luY2x1ZGUvc3lzL3NlbWFwaG9y
ZS5oIiAzIDQKCgoKfQoKCgoKCiMgMjIgIi91c3IvaW5jbHVkZS9zeXMvdF9sb2NrLmgiIDIgMyA0
CgojIDEgIi91c3IvaW5jbHVkZS9zeXMvY29uZHZhci5oIiAxIDMgNAogCgoKCgogCgoKCgoKCgoK
CgojcHJhZ21hIGlkZW50CSJAKCMpY29uZHZhci5oCTEuMTEJMDAvMDMvMDUgU01JIgoKCgoKCgoK
CgoKZXh0ZXJuICJDIiB7CgoKCgogCgoKCnR5cGVkZWYgc3RydWN0IF9rY29uZHZhciB7Cgl1c2hv
cnRfdAlfb3BhcXVlOwp9IGtjb25kdmFyX3Q7Cgp0eXBlZGVmCWVudW0gewoJQ1ZfREVGQVVMVCwK
CUNWX0RSSVZFUgp9IGtjdl90eXBlX3Q7CgoKIyA2NSAiL3Vzci9pbmNsdWRlL3N5cy9jb25kdmFy
LmgiIDMgNAoKCgoKCn0KCgoKIyAyMyAiL3Vzci9pbmNsdWRlL3N5cy90X2xvY2suaCIgMiAzIDQK
CgoKCmV4dGVybiAiQyIgewoKCgoKIAoKCgoKCgoKCgojIDc2ICIvdXNyL2luY2x1ZGUvc3lzL3Rf
bG9jay5oIiAzIDQKCgoKCgp9CgoKCiMgMzggIi91c3IvaW5jbHVkZS9zeXMvdm5vZGUuaCIgMiAz
IDQKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvY3JlZC5oIiAxIDMgNAogCiAKCiAKIAogCgogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpY3JlZC5oCTEuMjEJOTcv
MDEvMDkgU01JIgkKCgoKCgoKZXh0ZXJuICJDIiB7CgoKIAoKCgoKCnR5cGVkZWYgc3RydWN0IGNy
ZWQgewoJdWludF90CWNyX3JlZjsJCQkgCgl1aWRfdAljcl91aWQ7CQkJIAoJZ2lkX3QJY3JfZ2lk
OwkJCSAKCXVpZF90CWNyX3J1aWQ7CQkgCglnaWRfdAljcl9yZ2lkOwkJIAoJdWlkX3QJY3Jfc3Vp
ZDsJCSAKCWdpZF90CWNyX3NnaWQ7CQkgCgl1aW50X3QJY3Jfbmdyb3VwczsJCSAKCWdpZF90CWNy
X2dyb3Vwc1sxXTsJCSAKfSBjcmVkX3Q7CgojIDg5ICIvdXNyL2luY2x1ZGUvc3lzL2NyZWQuaCIg
MyA0CgoKCn0KCgoKIyA0MCAiL3Vzci9pbmNsdWRlL3N5cy92bm9kZS5oIiAyIDMgNAoKIyAxICIv
dXNyL2luY2x1ZGUvc3lzL3Vpby5oIiAxIDMgNAogCiAKCiAKIAogCgogCgoKCgoKCgojcHJhZ21h
IGlkZW50CSJAKCMpdWlvLmgJMS4yOQk5Ny8wNi8yOSBTTUkiCQoKCgoKZXh0ZXJuICJDIiB7CgoK
CgogCgoKCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IGlvdmVjIHsKCWNhZGRyX3QJaW92X2Jhc2U7
CgoKCglsb25nCWlvdl9sZW47Cgp9IGlvdmVjX3Q7CgoKIyA1OCAiL3Vzci9pbmNsdWRlL3N5cy91
aW8uaCIgMyA0CgoKCiAKCgp0eXBlZGVmIGVudW0gdWlvX3NlZyB7IFVJT19VU0VSU1BBQ0UsIFVJ
T19TWVNTUEFDRSwgVUlPX1VTRVJJU1BBQ0UgfSB1aW9fc2VnX3Q7Cgp0eXBlZGVmIHN0cnVjdCB1
aW8gewoJaW92ZWNfdAkqdWlvX2lvdjsJIAoJaW50CXVpb19pb3ZjbnQ7CSAKCWxsb2ZmX3QJX3Vp
b19vZmZzZXQ7CSAKCXVpb19zZWdfdCB1aW9fc2VnZmxnOwkgCglzaG9ydAl1aW9fZm1vZGU7CSAK
CWxsZGFkZHJfdCBfdWlvX2xpbWl0OwkgCglzc2l6ZV90CXVpb19yZXNpZDsJIAp9IHVpb190OwoK
CgoKCgoKCgoKCgoKCgogCgoKdHlwZWRlZiBlbnVtIHVpb19ydyB7IFVJT19SRUFELCBVSU9fV1JJ
VEUgfSB1aW9fcndfdDsKCgojIDEwOCAiL3Vzci9pbmNsdWRlL3N5cy91aW8uaCIgMyA0CgoKCgpl
eHRlcm4gc3NpemVfdCByZWFkdihpbnQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLCBpbnQpOwpleHRl
cm4gc3NpemVfdCB3cml0ZXYoaW50LCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgaW50KTsKCgoKCgoK
CgoKCgp9CgoKCiMgNDEgIi91c3IvaW5jbHVkZS9zeXMvdm5vZGUuaCIgMiAzIDQKCgojIDEgIi91
c3IvaW5jbHVkZS92bS9zZWdfZW51bS5oIiAxIDMgNAogCiAKCiAKIAogCgogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpc2VnX2VudW0uaAkxLjMJOTUvMTIvMjIg
U01JIgoKCmV4dGVybiAiQyIgewoKCiAKCgoKCiAKCgoKCmVudW0gZmF1bHRfdHlwZSB7CglGX0lO
VkFMLAkJIAoJRl9QUk9ULAkJCSAKCUZfU09GVExPQ0ssCQkgCglGX1NPRlRVTkxPQ0sJCSAKfTsK
CiAKCgplbnVtIGxvY2tfdHlwZSB7CglMX1BBR0VMT0NLLAkJIAoJTF9QQUdFVU5MT0NLLAkJIAoJ
TF9QQUdFUkVDTEFJTQkJIAp9OwoKIAoKCmVudW0gc2VnX3J3IHsKCVNfT1RIRVIsCQkgCglTX1JF
QUQsCQkJIAoJU19XUklURSwJCSAKCVNfRVhFQywJCQkgCglTX0NSRUFURQkJIAp9OwoKCn0KCgoK
IyA0MyAiL3Vzci9pbmNsdWRlL3N5cy92bm9kZS5oIiAyIDMgNAoKCgoKCgpleHRlcm4gIkMiIHsK
CgoKIAoKCgoKCiAKCgoKdHlwZWRlZiBlbnVtIHZ0eXBlIHsKCVZOT04JPSAwLAoJVlJFRwk9IDEs
CglWRElSCT0gMiwKCVZCTEsJPSAzLAoJVkNIUgk9IDQsCglWTE5LCT0gNSwKCVZGSUZPCT0gNiwK
CVZET09SCT0gNywKCVZQUk9DCT0gOCwKCVZTT0NLCT0gOSwKCVZCQUQJPSAxMAp9IHZ0eXBlX3Q7
CgogCgoKCgoKCgoKIAp0eXBlZGVmIHN0cnVjdCB2bm9kZSB7CglrbXV0ZXhfdAl2X2xvY2s7CQkJ
IAoJdXNob3J0X3QJdl9mbGFnOwkJCSAKCXVpbnRfdAkJdl9jb3VudDsJCSAKCXN0cnVjdCB2ZnMJ
KnZfdmZzbW91bnRlZGhlcmU7CSAKCXN0cnVjdCB2bm9kZW9wcwkqdl9vcDsJCQkgCglzdHJ1Y3Qg
dmZzCSp2X3Zmc3A7CQkgCglzdHJ1Y3Qgc3RkYXRhCSp2X3N0cmVhbTsJCSAKCXN0cnVjdCBwYWdl
CSp2X3BhZ2VzOwkJIAoJZW51bSB2dHlwZQl2X3R5cGU7CQkJIAoJZGV2X3QJCXZfcmRldjsJCQkg
CgljYWRkcl90CQl2X2RhdGE7CQkJIAoJc3RydWN0IGZpbG9jawkqdl9maWxvY2tzOwkJIAoJc3Ry
dWN0IHNocmxvY2tsaXN0ICp2X3NocmxvY2tzOwkJIAoJa2NvbmR2YXJfdAl2X2N2OwkJCSAKCXZv
aWQJCSp2X2xvY2FsaXR5OwkJIAp9IHZub2RlX3Q7CgogCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoK
CgoKIAoKCgoKCiAKCgoKCgoKCgogCgoKCgoKIAoKCgoKCgp0eXBlZGVmIHN0cnVjdCB2YXR0ciB7
Cgl1aW50X3QJCXZhX21hc2s7CSAKCXZ0eXBlX3QJCXZhX3R5cGU7CSAKCW1vZGVfdAkJdmFfbW9k
ZTsJIAoJdWlkX3QJCXZhX3VpZDsJCSAKCWdpZF90CQl2YV9naWQ7CQkgCglkZXZfdAkJdmFfZnNp
ZDsJIAoJdV9sb25nbG9uZ190CXZhX25vZGVpZDsJIAoJbmxpbmtfdAkJdmFfbmxpbms7CSAKCXVf
b2Zmc2V0X3QJdmFfc2l6ZTsJIAoJdGltZXN0cnVjX3QJdmFfYXRpbWU7CSAKCXRpbWVzdHJ1Y190
CXZhX210aW1lOwkgCgl0aW1lc3RydWNfdAl2YV9jdGltZTsJIAoJZGV2X3QJCXZhX3JkZXY7CSAK
CXVpbnRfdAkJdmFfYmxrc2l6ZTsJIAoJdV9sb25nbG9uZ190CXZhX25ibG9ja3M7CSAKCXVpbnRf
dAkJdmFfdmNvZGU7CSAKfSB2YXR0cl90OwoKIyAyMDAgIi91c3IvaW5jbHVkZS9zeXMvdm5vZGUu
aCIgMyA0CgoKdHlwZWRlZiB2YXR0cl90CQl2YXR0cjMyX3Q7CgoKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgoKCgoKIAoKCgoKCgogCgoKZW51bSBybQkJeyBS
TUZJTEUsIFJNRElSRUNUT1JZIH07CSAKZW51bSBzeW1mb2xsb3cJeyBOT19GT0xMT1csIEZPTExP
VyB9OwkJIAplbnVtIHZjZXhjbAl7IE5PTkVYQ0wsIEVYQ0wgfTsJCSAKZW51bSBjcmVhdGUJeyBD
UkNSRUFULCBDUk1LTk9ELCBDUk1LRElSIH07CSAKCnR5cGVkZWYgZW51bSBybQkJcm1fdDsKdHlw
ZWRlZiBlbnVtIHN5bWZvbGxvdwlzeW1mb2xsb3dfdDsKdHlwZWRlZiBlbnVtIHZjZXhjbAl2Y2V4
Y2xfdDsKdHlwZWRlZiBlbnVtIGNyZWF0ZQljcmVhdGVfdDsKCiAKCgoKdHlwZWRlZiBzdHJ1Y3Qg
dnNlY2F0dHIgewoJdWludF90CQl2c2FfbWFzazsJIAoJaW50CQl2c2FfYWNsY250OwkgCgl2b2lk
CQkqdnNhX2FjbGVudHA7CSAKCWludAkJdnNhX2RmYWNsY250OwkgCgl2b2lkCQkqdnNhX2RmYWNs
ZW50cDsJIAp9IHZzZWNhdHRyX3Q7CgogCgoKCgoKIAoKCnN0cnVjdCBwYXRobmFtZTsKc3RydWN0
IGZpZDsKc3RydWN0IGZsb2NrNjQ7CnN0cnVjdCBzaHJsb2NrOwpzdHJ1Y3QgcGFnZTsKc3RydWN0
IHNlZzsKc3RydWN0IGFzOwpzdHJ1Y3QgcG9sbGhlYWQ7CgogCgoKdHlwZWRlZiBzdHJ1Y3Qgdm5v
ZGVvcHMgewoJaW50CSgqdm9wX29wZW4pKHN0cnVjdCB2bm9kZSAqKnZwcCwgaW50IGZsYWcsIHN0
cnVjdCBjcmVkICpjcik7CglpbnQJKCp2b3BfY2xvc2UpKHN0cnVjdCB2bm9kZSAqdnAsIGludCBm
bGFnLCBpbnQgY291bnQsCgkJCQlvZmZzZXRfdCBvZmZzZXQsIHN0cnVjdCBjcmVkICpjcik7Cglp
bnQJKCp2b3BfcmVhZCkoc3RydWN0IHZub2RlICp2cCwgc3RydWN0IHVpbyAqdWlvcCwgaW50IGlv
ZmxhZywKCQkJICAgIHN0cnVjdCBjcmVkICpjcik7CglpbnQJKCp2b3Bfd3JpdGUpKHN0cnVjdCB2
bm9kZSAqdnAsIHN0cnVjdCB1aW8gKnVpb3AsIGludCBpb2ZsYWcsCgkJCQlzdHJ1Y3QgY3JlZCAq
Y3IpOwoJaW50CSgqdm9wX2lvY3RsKShzdHJ1Y3Qgdm5vZGUgKnZwLCBpbnQgY21kLCBpbnRwdHJf
dCBhcmcsIGludCBmbGFnLAoJCQkJc3RydWN0IGNyZWQgKmNyLCBpbnQgKnJ2YWxwKTsKCWludAko
KnZvcF9zZXRmbCkoc3RydWN0IHZub2RlICp2cCwgaW50IG9mbGFncywgaW50IG5mbGFncywKCQkJ
CXN0cnVjdCBjcmVkICpjcik7CglpbnQJKCp2b3BfZ2V0YXR0cikoc3RydWN0IHZub2RlICp2cCwg
c3RydWN0IHZhdHRyICp2YXAsIGludCBmbGFncywKCQkJCXN0cnVjdCBjcmVkICpjcik7CglpbnQJ
KCp2b3Bfc2V0YXR0cikoc3RydWN0IHZub2RlICp2cCwgc3RydWN0IHZhdHRyICp2YXAsIGludCBm
bGFncywKCQkJCXN0cnVjdCBjcmVkICpjcik7CglpbnQJKCp2b3BfYWNjZXNzKShzdHJ1Y3Qgdm5v
ZGUgKnZwLCBpbnQgbW9kZSwgaW50IGZsYWdzLAoJCQkJc3RydWN0IGNyZWQgKmNyKTsKCWludAko
KnZvcF9sb29rdXApKHN0cnVjdCB2bm9kZSAqZHZwLCBjaGFyICpubSwgc3RydWN0IHZub2RlICoq
dnBwLAoJCQkJc3RydWN0IHBhdGhuYW1lICpwbnAsIGludCBmbGFncywKCQkJCXN0cnVjdCB2bm9k
ZSAqcmRpciwgc3RydWN0IGNyZWQgKik7CglpbnQJKCp2b3BfY3JlYXRlKShzdHJ1Y3Qgdm5vZGUg
KmR2cCwgY2hhciAqbmFtZSwgc3RydWN0IHZhdHRyICp2YXAsCgkJCQl2Y2V4Y2xfdCBleGNsLCBp
bnQgbW9kZSwgc3RydWN0IHZub2RlICoqdnBwLAoJCQkJc3RydWN0IGNyZWQgKmNyLCBpbnQgZmxh
Zyk7CglpbnQJKCp2b3BfcmVtb3ZlKShzdHJ1Y3Qgdm5vZGUgKnZwLCBjaGFyICpubSwgc3RydWN0
IGNyZWQgKmNyKTsKCWludAkoKnZvcF9saW5rKShzdHJ1Y3Qgdm5vZGUgKnRkdnAsIHN0cnVjdCB2
bm9kZSAqc3ZwLCBjaGFyICp0bm0sCgkJCQlzdHJ1Y3QgY3JlZCAqY3IpOwoJaW50CSgqdm9wX3Jl
bmFtZSkoc3RydWN0IHZub2RlICpzZHZwLCBjaGFyICpzbm0sCgkJCQlzdHJ1Y3Qgdm5vZGUgKnRk
dnAsIGNoYXIgKnRubSwgc3RydWN0IGNyZWQgKmNyKTsKCWludAkoKnZvcF9ta2Rpcikoc3RydWN0
IHZub2RlICpkdnAsIGNoYXIgKmRpcm5hbWUsCgkJCQlzdHJ1Y3QgdmF0dHIgKnZhcCwgc3RydWN0
IHZub2RlICoqdnBwLAoJCQkJc3RydWN0IGNyZWQgKmNyKTsKCWludAkoKnZvcF9ybWRpcikoc3Ry
dWN0IHZub2RlICp2cCwgY2hhciAqbm0sIHN0cnVjdCB2bm9kZSAqY2RpciwKCQkJCXN0cnVjdCBj
cmVkICpjcik7CglpbnQJKCp2b3BfcmVhZGRpcikoc3RydWN0IHZub2RlICp2cCwgc3RydWN0IHVp
byAqdWlvcCwKCQkJCXN0cnVjdCBjcmVkICpjciwgaW50ICplb2ZwKTsKCWludAkoKnZvcF9zeW1s
aW5rKShzdHJ1Y3Qgdm5vZGUgKmR2cCwgY2hhciAqbGlua25hbWUsCgkJCQlzdHJ1Y3QgdmF0dHIg
KnZhcCwgY2hhciAqdGFyZ2V0LAoJCQkJc3RydWN0IGNyZWQgKmNyKTsKCWludAkoKnZvcF9yZWFk
bGluaykoc3RydWN0IHZub2RlICp2cCwgc3RydWN0IHVpbyAqdWlvcCwKCQkJCXN0cnVjdCBjcmVk
ICpjcik7CglpbnQJKCp2b3BfZnN5bmMpKHN0cnVjdCB2bm9kZSAqdnAsIGludCBzeW5jZmxhZywg
c3RydWN0IGNyZWQgKmNyKTsKCXZvaWQJKCp2b3BfaW5hY3RpdmUpKHN0cnVjdCB2bm9kZSAqdnAs
IHN0cnVjdCBjcmVkICpjcik7CglpbnQJKCp2b3BfZmlkKShzdHJ1Y3Qgdm5vZGUgKnZwLCBzdHJ1
Y3QgZmlkICpmaWRwKTsKCXZvaWQJKCp2b3Bfcndsb2NrKShzdHJ1Y3Qgdm5vZGUgKnZwLCBpbnQg
d3JpdGVfbG9jayk7Cgl2b2lkCSgqdm9wX3J3dW5sb2NrKShzdHJ1Y3Qgdm5vZGUgKnZwLCBpbnQg
d3JpdGVfbG9jayk7CglpbnQJKCp2b3Bfc2Vlaykoc3RydWN0IHZub2RlICp2cCwgb2Zmc2V0X3Qg
b29mZiwgb2Zmc2V0X3QgKm5vZmZwKTsKCWludAkoKnZvcF9jbXApKHN0cnVjdCB2bm9kZSAqdnAx
LCBzdHJ1Y3Qgdm5vZGUgKnZwMik7CglpbnQJKCp2b3BfZnJsb2NrKShzdHJ1Y3Qgdm5vZGUgKnZw
LCBpbnQgY21kLCBzdHJ1Y3QgZmxvY2s2NCAqYmZwLAoJCQkJaW50IGZsYWcsIG9mZnNldF90IG9m
ZnNldCwgc3RydWN0IGNyZWQgKmNyKTsKCWludAkoKnZvcF9zcGFjZSkoc3RydWN0IHZub2RlICp2
cCwgaW50IGNtZCwgc3RydWN0IGZsb2NrNjQgKmJmcCwKCQkJCWludCBmbGFnLCBvZmZzZXRfdCBv
ZmZzZXQsIHN0cnVjdCBjcmVkICpjcik7CglpbnQJKCp2b3BfcmVhbHZwKShzdHJ1Y3Qgdm5vZGUg
KnZwLCBzdHJ1Y3Qgdm5vZGUgKip2cHApOwoJaW50CSgqdm9wX2dldHBhZ2UpKHN0cnVjdCB2bm9k
ZSAqdnAsIG9mZnNldF90IG9mZiwgc2l6ZV90IGxlbiwKCQkJCXVpbnRfdCAqcHJvdHAsIHN0cnVj
dCBwYWdlICoqcGxhcnIsIHNpemVfdCBwbHN6LAoJCQkJc3RydWN0IHNlZyAqc2VnLCBjYWRkcl90
IGFkZHIsIGVudW0gc2VnX3J3IHJ3LAoJCQkJc3RydWN0IGNyZWQgKmNyKTsKCWludAkoKnZvcF9w
dXRwYWdlKShzdHJ1Y3Qgdm5vZGUgKnZwLCBvZmZzZXRfdCBvZmYsIHNpemVfdCBsZW4sCgkJCQlp
bnQgZmxhZ3MsIHN0cnVjdCBjcmVkICpjcik7CglpbnQJKCp2b3BfbWFwKShzdHJ1Y3Qgdm5vZGUg
KnZwLCBvZmZzZXRfdCBvZmYsIHN0cnVjdCBhcyAqYXMsCgkJCSAgICBjYWRkcl90ICphZGRycCwg
c2l6ZV90IGxlbiwgdWNoYXJfdCBwcm90LAoJCQkgICAgdWNoYXJfdCBtYXhwcm90LCB1aW50X3Qg
ZmxhZ3MsIHN0cnVjdCBjcmVkICpjcik7CglpbnQJKCp2b3BfYWRkbWFwKShzdHJ1Y3Qgdm5vZGUg
KnZwLCBvZmZzZXRfdCBvZmYsIHN0cnVjdCBhcyAqYXMsCgkJCQljYWRkcl90IGFkZHIsIHNpemVf
dCBsZW4sIHVjaGFyX3QgcHJvdCwKCQkJCXVjaGFyX3QgbWF4cHJvdCwgdWludF90IGZsYWdzLCBz
dHJ1Y3QgY3JlZCAqY3IpOwoJaW50CSgqdm9wX2RlbG1hcCkoc3RydWN0IHZub2RlICp2cCwgb2Zm
c2V0X3Qgb2ZmLCBzdHJ1Y3QgYXMgKmFzLAoJCQkJY2FkZHJfdCBhZGRyLCBzaXplX3QgbGVuLCB1
aW50X3QgcHJvdCwKCQkJCXVpbnRfdCBtYXhwcm90LCB1aW50X3QgZmxhZ3MsIHN0cnVjdCBjcmVk
ICpjcik7CglpbnQJKCp2b3BfcG9sbCkoc3RydWN0IHZub2RlICp2cCwgc2hvcnQgZXYsIGludCBh
bnksIHNob3J0ICpyZXZwLAoJCQlzdHJ1Y3QgcG9sbGhlYWQgKipwaHBwKTsKCWludAkoKnZvcF9k
dW1wKShzdHJ1Y3Qgdm5vZGUgKnZwLCBjYWRkcl90IGFkZHIsIGludCBsYmRuLAoJCQkJaW50IGRi
bGtzKTsKCWludAkoKnZvcF9wYXRoY29uZikoc3RydWN0IHZub2RlICp2cCwgaW50IGNtZCwgdWxv
bmdfdCAqdmFscCwKCQkJCXN0cnVjdCBjcmVkICpjcik7CglpbnQJKCp2b3BfcGFnZWlvKShzdHJ1
Y3Qgdm5vZGUgKnZwLCBzdHJ1Y3QgcGFnZSAqcHAsCgkJCQl1X29mZnNldF90IGlvX29mZiwgc2l6
ZV90IGlvX2xlbiwgaW50IGZsYWdzLAoJCQkJc3RydWN0IGNyZWQgKmNyKTsKCWludAkoKnZvcF9k
dW1wY3RsKShzdHJ1Y3Qgdm5vZGUgKnZwLCBpbnQgYWN0aW9uLCBpbnQgKmJsa3ApOwoJdm9pZAko
KnZvcF9kaXNwb3NlKShzdHJ1Y3Qgdm5vZGUgKnZwLCBzdHJ1Y3QgcGFnZSAqcHAsIGludCBmbGFn
LAoJCQkJaW50IGRuLCBzdHJ1Y3QgY3JlZCAqY3IpOwoJaW50CSgqdm9wX3NldHNlY2F0dHIpKHN0
cnVjdCB2bm9kZSAqdnAsIHZzZWNhdHRyX3QgKnZzYXAsIGludCBmbGFnLAoJCQkJICAgIHN0cnVj
dCBjcmVkICpjcik7CglpbnQJKCp2b3BfZ2V0c2VjYXR0cikoc3RydWN0IHZub2RlICp2cCwgdnNl
Y2F0dHJfdCAqdnNhcCwgaW50IGZsYWcsCgkJCQkgICAgc3RydWN0IGNyZWQgKmNyKTsKCWludAko
KnZvcF9zaHJsb2NrKShzdHJ1Y3Qgdm5vZGUgKnZwLCBpbnQgY21kLCBzdHJ1Y3Qgc2hybG9jayAq
c2hyLAoJCQkJaW50IGZsYWcpOwp9IHZub2Rlb3BzX3Q7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgogCgoK
CgoKCiAKCgojIDUwMSAiL3Vzci9pbmNsdWRlL3N5cy92bm9kZS5oIiAzIDQKCgoKCgoKCgoKCgoK
CiMgNTIzICIvdXNyL2luY2x1ZGUvc3lzL3Zub2RlLmgiIDMgNAoKIAoKCgoKCgoKIAoKCgoKCgoK
CiAKCgoKCgoKIyA1NzcgIi91c3IvaW5jbHVkZS9zeXMvdm5vZGUuaCIgMyA0CgoKCn0KCgoKIyAy
MiAiL3Vzci9pbmNsdWRlL3N5cy9zdHJlYW0uaCIgMiAzIDQKCiMgMSAiL3Vzci9pbmNsdWRlL3N5
cy9wb2xsLmgiIDEgMyA0CiAKIAoKIAogCiAKCiAKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylw
b2xsLmgJMS4yOAk5OC8xMS8yMyBTTUkiCQoKCmV4dGVybiAiQyIgewoKCiAKCgoKdHlwZWRlZiBz
dHJ1Y3QgcG9sbGZkIHsKCWludCBmZDsJCQkJIAoJc2hvcnQgZXZlbnRzOwkJCSAKCXNob3J0IHJl
dmVudHM7CQkJIAp9IHBvbGxmZF90OwoKdHlwZWRlZiB1bnNpZ25lZCBsb25nCW5mZHNfdDsKCiAK
CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgojIDY4ICIvdXNyL2luY2x1ZGUvc3lzL3BvbGwuaCIgMyA0
CgoKIyAxMjAgIi91c3IvaW5jbHVkZS9zeXMvcG9sbC5oIiAzIDQKCgoKCmludCBwb2xsKHN0cnVj
dCBwb2xsZmQgKiwgbmZkc190LCBpbnQpOwoKCgoKCgp9CgoKCiMgMjMgIi91c3IvaW5jbHVkZS9z
eXMvc3RyZWFtLmgiIDIgMyA0CgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3RybWRlcC5oIiAxIDMg
NAogCgoKCgogCiAKCiAKIAogCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpc3RybWRlcC5oCTEuMTAJ
OTgvMDEvMDYgU01JIgkKCgpleHRlcm4gIkMiIHsKCgogCgoKCgogCgoKCgoKIAoKCgoKCiAKCgoK
CgoKfQoKCgojIDI0ICIvdXNyL2luY2x1ZGUvc3lzL3N0cmVhbS5oIiAyIDMgNAoKCgojIDEgIi91
c3IvaW5jbHVkZS9zeXMvbW9kZWwuaCIgMSAzIDQKIAoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgj
KW1vZGVsLmgJMS4yMAk5Ny8wOS8yMiBTTUkiCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgoKIyA0NSAi
L3Vzci9pbmNsdWRlL3N5cy9tb2RlbC5oIiAzIDQKCgoKIAoKCgoKCnR5cGVkZWYgdW5zaWduZWQg
aW50IG1vZGVsX3Q7CgoKCiMgMTk5ICIvdXNyL2luY2x1ZGUvc3lzL21vZGVsLmgiIDMgNAoKCgp9
CgoKCiMgMjcgIi91c3IvaW5jbHVkZS9zeXMvc3RyZWFtLmgiIDIgMyA0CgojIDEgIi91c3IvaW5j
bHVkZS9zeXMvc3RyZnQuaCIgMSAzIDQKIAoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXN0cmZ0
LmgJMS4xCTk5LzA3LzMwIFNNSSIKCiAKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgogCgoKCgoKCgp0
eXBlZGVmIGhydGltZV90IHRkZWx0YV90IFsxMiBdWzJdOwoKdHlwZWRlZiBocnRpbWVfdCB0c190
OwoKZXh0ZXJuIHRzX3QgX3RzdGFtcF9jOwkgCgkJCSAKCgoKCgoKCgoKCgoKCgoKCgoKIyA4OCAi
L3Vzci9pbmNsdWRlL3N5cy9zdHJmdC5oIiAzIDQKCgojIDEzMyAiL3Vzci9pbmNsdWRlL3N5cy9z
dHJmdC5oIiAzIDQKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKc3RydWN0IGZ0ZXZudCB7Cgl0c190
IHRzOwkgCgljaGFyICptaWQ7CSAKCXVzaG9ydF90IGV2bnQ7CSAKCXVzaG9ydF90IGRhdGE7CSAK
fTsKCiAKCgpzdHJ1Y3QgZnRibGsgewoJc3RydWN0IGZ0YmxrICpueHQ7CSAKCWludCBpeDsJCQkg
CglzdHJ1Y3QgZnRldm50IGV2WzB4OSBdOwp9OwoKIAoKCgoKCgoKCgpzdHJ1Y3QgZnRoZHIgewoJ
c3RydWN0IGZ0YmxrICp0YWlsOwoJdW5zaWduZWQgaGFzaDsJCSAKCXZvaWQgKnRocmVhZDsKCWlu
dCBjcHVfc2VxaWQ7CglzdHJ1Y3QgZnRibGsgZmlyc3Q7Cn07CgogCgoKCgpzdHJ1Y3QgZnRmbHdl
IHsKCWNoYXIgKm1pZDsKCXVzaG9ydF90IGV2bnQ7Cgl1c2hvcnRfdCBkYXRhOwoJdGRlbHRhX3Qg
dGQ7Cn07CgpzdHJ1Y3QgZnRmbHcgewoJc3RydWN0IGZ0Zmx3ICpueHQ7CglpbnQgaGFzaDsKCWlu
dCBjb3VudDsKCXN0cnVjdCBmdGZsd2UgZXZbMV07CSAKfTsKCnR5cGVkZWYgc3RydWN0IGZ0ZXZu
dCBmdGV2bnRfdDsKdHlwZWRlZiBzdHJ1Y3QgZnRibGsgZnRibGtfdDsKdHlwZWRlZiBzdHJ1Y3Qg
ZnRoZHIgZnRoZHJfdDsKdHlwZWRlZiBzdHJ1Y3QgZnRmbHdlIGZ0Zmx3ZV90Owp0eXBlZGVmIHN0
cnVjdCBmdGZsdyBmdGZsd190Owp0eXBlZGVmIHN0cnVjdCBmdGV2ZW50cyBmdGV2ZW50c190OwoK
IyAzNTcgIi91c3IvaW5jbHVkZS9zeXMvc3RyZnQuaCIgMyA0CgoKCn0KCgoKIyAyOCAiL3Vzci9p
bmNsdWRlL3N5cy9zdHJlYW0uaCIgMiAzIDQKCgoKZXh0ZXJuICJDIiB7CgoKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgp0eXBlZGVmIHN0cnVjdAlfX3N0cmVhbV9xdWV1ZSAgewoJ
c3RydWN0CXFpbml0CSpxX3FpbmZvOwkgCglzdHJ1Y3QJbXNnYgkqcV9maXJzdDsJIAoJc3RydWN0
CW1zZ2IJKnFfbGFzdDsJIAoJc3RydWN0CV9fc3RyZWFtX3F1ZXVlIAkqcV9uZXh0OwkgCglzdHJ1
Y3QJX19zdHJlYW1fcXVldWUgCSpxX2xpbms7CSAKCXZvaWQJCSpxX3B0cjsJCSAKCXNpemVfdAkJ
cV9jb3VudDsJIAoJdWludF90CQlxX2ZsYWc7CQkgCglzc2l6ZV90CQlxX21pbnBzejsJIAoJCQkJ
CSAKCXNzaXplX3QJCXFfbWF4cHN6OwkgCgkJCQkJIAoJc2l6ZV90CQlxX2hpd2F0OwkgCglzaXpl
X3QJCXFfbG93YXQ7CSAKCXN0cnVjdCBxYmFuZAkqcV9iYW5kcDsJIAoJa211dGV4X3QJcV9sb2Nr
OwkJIAoJc3RydWN0IHN0ZGF0YSAJKnFfc3RyZWFtOwkgCglzdHJ1Y3QJc3luY3EJKnFfc3luY3E7
CSAKCXVuc2lnbmVkIGNoYXIJcV9uYmFuZDsJIAoJa2NvbmR2YXJfdAlxX3dhaXQ7CQkgCglrY29u
ZHZhcl90CXFfc3luYzsJCSAKCXN0cnVjdAlfX3N0cmVhbV9xdWV1ZSAJKnFfbmZzcnY7CSAKCXN0
cnVjdAlfX3N0cmVhbV9xdWV1ZSAJKnFfbmJzcnY7CSAKCXVzaG9ydF90CXFfZHJhaW5pbmc7CSAK
CXNob3J0CQlxX3N0cnVpb3Q7CSAKCXVpbnRfdAkJcV9zeW5jcW1zZ3M7CSAKCXNpemVfdAkJcV9t
YmxrY250OwkgCgkgCgoKCgoKCgoJc3RydWN0IG1zZ2IJKnFfc3FoZWFkOwkgCglzdHJ1Y3QgbXNn
YgkqcV9zcXRhaWw7CSAKCXVpbnRfdAkJcV9zcWZsYWdzOwkgCglzaXplX3QJCXFfcmVmY250Owkg
CgkJCQkJIAoJIAoKCgoJc3RydWN0IF9fc3RyZWFtX3F1ZXVlIAkqcV9zcW5leHQ7CSAKCXN0cnVj
dCBfX3N0cmVhbV9xdWV1ZSAJKnFfc3FwcmV2OwkgCglwcmlfdAkJcV9zcHJpOwkJIAp9IHF1ZXVl
X3Q7CgogCgoKCgoKCgoKCgkJCQkJIAoKCgkJCQkJIAoKCgoKCgoJCQkJCSAKCgoKCgoKCgoKCgog
CgoKCQkJCQkgCgkJCQkJIAoJCQkJCSAKCiAKCgoKdHlwZWRlZiBzdHJ1Y3QgcWJhbmQgewoJc3Ry
dWN0IHFiYW5kCSpxYl9uZXh0OwkgCglzaXplX3QJCXFiX2NvdW50OwkgCglzdHJ1Y3QgbXNnYgkq
cWJfZmlyc3Q7CSAKCXN0cnVjdCBtc2diCSpxYl9sYXN0OwkgCglzaXplX3QJCXFiX2hpd2F0Owkg
CglzaXplX3QJCXFiX2xvd2F0OwkgCgl1aW50X3QJCXFiX2ZsYWc7CSAKCXNpemVfdAkJcWJfbWJs
a2NudDsJIAp9IHFiYW5kX3Q7CgogCgoKCgoKCiAKCgoKCiAKCgp0eXBlZGVmIGVudW0gcWZpZWxk
cyB7CglRSElXQVQJPSAwLAkJIAoJUUxPV0FUCT0gMSwJCSAKCVFNQVhQU1oJPSAyLAkJIAoJUU1J
TlBTWgk9IDMsCQkgCglRQ09VTlQJPSA0LAkJIAoJUUZJUlNUCT0gNSwJCSAKCVFMQVNUCT0gNiwJ
CSAKCVFGTEFHCT0gNywJCSAKCVFTVFJVSU9UID0gOCwJCSAKCVFCQUQJPSA5Cn0gcWZpZWxkc190
OwoKIAoKCnN0cnVjdCBtb2R1bGVfaW5mbyB7Cgl1c2hvcnRfdCBtaV9pZG51bTsJCSAKCWNoYXIg
CSptaV9pZG5hbWU7CQkgCglzc2l6ZV90CW1pX21pbnBzejsJCSAKCXNzaXplX3QJbWlfbWF4cHN6
OwkJIAoJc2l6ZV90CW1pX2hpd2F0OwkJIAoJc2l6ZV90IAltaV9sb3dhdDsJCSAKfTsKCiAKCgpz
dHJ1Y3QJcWluaXQgewoJaW50CSgqcWlfcHV0cCkoKTsJCSAKCWludAkoKnFpX3NydnApKCk7CQkg
CglpbnQJKCpxaV9xb3BlbikoKTsJCSAKCWludAkoKnFpX3FjbG9zZSkoKTsJCSAKCWludAkoKnFp
X3FhZG1pbikoKTsJCSAKCXN0cnVjdCBtb2R1bGVfaW5mbyAqcWlfbWluZm87CSAKCXN0cnVjdCBt
b2R1bGVfc3RhdCAqcWlfbXN0YXQ7CSAKCWludAkoKnFpX3J3cCkoKTsJCSAKCWludAkoKnFpX2lu
Zm9wKSgpOwkJIAoJaW50CXFpX3N0cnVpb3Q7CQkgCn07CgogCgoKCgoKCgogCgoKCnN0cnVjdCBz
dHJlYW10YWIgewoJc3RydWN0IHFpbml0ICpzdF9yZGluaXQ7CglzdHJ1Y3QgcWluaXQgKnN0X3dy
aW5pdDsKCXN0cnVjdCBxaW5pdCAqc3RfbXV4cmluaXQ7CglzdHJ1Y3QgcWluaXQgKnN0X211eHdp
bml0Owp9OwoKIAoKCgpzdHJ1Y3QgbGlua2JsayB7CglxdWV1ZV90ICpsX3F0b3A7CSAKCQkJCSAK
CXF1ZXVlX3QgKmxfcWJvdDsJIAoJaW50CWxfaW5kZXg7CSAKfTsKCiAKCgp0eXBlZGVmIHN0cnVj
dCBmcmVlX3J0biB7Cgl2b2lkCSgqZnJlZV9mdW5jKSgpOwoJY2FkZHJfdAlmcmVlX2FyZzsKfSBm
cnRuX3Q7CgogCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgZGF0YWIgewoJZnJ0bl90CQkqZGJfZnJ0
bnA7Cgl1bnNpZ25lZCBjaGFyCSpkYl9iYXNlOwoJdW5zaWduZWQgY2hhcgkqZGJfbGltOwoJdW5z
aWduZWQgY2hhcglkYl9yZWY7Cgl1bnNpZ25lZCBjaGFyCWRiX3R5cGU7Cgl1bnNpZ25lZCBjaGFy
CWRiX2ZsYWdzOwoJdW5zaWduZWQgY2hhcglkYl9zdHJ1aW9mbGFnOwoJdm9pZAkJKmRiX2NhY2hl
OwkgCglzdHJ1Y3QgbXNnYgkqZGJfbWJsazsKCXZvaWQJCSgqZGJfZnJlZSkoc3RydWN0IG1zZ2Ig
Kiwgc3RydWN0IGRhdGFiICopOwoJdm9pZAkJKCpkYl9sYXN0ZnJlZSkoc3RydWN0IG1zZ2IgKiwg
c3RydWN0IGRhdGFiICopOwoKCXZvaWQJCSpkYl9wYWQ7CSAKCgl1bnNpZ25lZCBjaGFyCSpkYl9z
dHJ1aW9iYXNlOwoJdW5zaWduZWQgY2hhcgkqZGJfc3RydWlvbGltOwoJdW5zaWduZWQgY2hhcgkq
ZGJfc3RydWlvcHRyOwoJdW5pb24gewoJCWRvdWJsZSBlbmZvcmNlX2FsaWdubWVudDsKCQl1bnNp
Z25lZCBjaGFyIGRhdGFbOF07CgkJdW5zaWduZWQgdTE2OjE2OwkgCgkJIAoKCgl9IGRiX3N0cnVp
b3VuOwoJZnRoZHJfdAkJKmRiX2Z0aGRyOwoJZnRmbHdfdAkJKioqZGJfZnRmbHc7Cgl1aWRfdAkJ
ZGJfdWlkOwkJIAoJIAoJdWlkX3QJCWRiX2xpZDsKfSBkYmxrX3Q7CgogCgoKdHlwZWRlZiBzdHJ1
Y3QJbXNnYiB7CglzdHJ1Y3QJbXNnYgkqYl9uZXh0OwoJc3RydWN0ICBtc2diCSpiX3ByZXY7Cglz
dHJ1Y3QJbXNnYgkqYl9jb250OwoJdW5zaWduZWQgY2hhcgkqYl9ycHRyOwoJdW5zaWduZWQgY2hh
cgkqYl93cHRyOwoJc3RydWN0IGRhdGFiIAkqYl9kYXRhcDsKCXVuc2lnbmVkIGNoYXIJYl9iYW5k
OwoJdW5zaWduZWQgY2hhcgliX2Z0ZmxhZzsJIAoJdW5zaWduZWQgc2hvcnQJYl9mbGFnOwoJcXVl
dWVfdAkJKmJfcXVldWU7CSAKfSBtYmxrX3Q7CgogCgoKCgogCgoKCgoKCgoKIAoKCgoKCQkJCQkg
CgoKCgoKIAoKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAK
CgoKCgogCgoKIyA0MTIgIi91c3IvaW5jbHVkZS9zeXMvc3RyZWFtLmgiIDMgNAoKc3RydWN0IGlv
Y2JsayB7CglpbnQgCWlvY19jbWQ7CQkgCgljcmVkX3QJKmlvY19jcjsJCSAKCXVpbnRfdAlpb2Nf
aWQ7CQkJIAoJc2l6ZV90CWlvY19jb3VudDsJCSAKCWludAlpb2NfZXJyb3I7CQkgCglpbnQJaW9j
X3J2YWw7CQkgCglpbnQJaW9jX2ZpbGwxOwoJdWludF90CWlvY19mbGFnOwkJIAoJaW50CWlvY19m
aWxsZXJbMl07CQkgCn07CgoKdHlwZWRlZglzdHJ1Y3QgaW9jYmxrCSpJT0NQOwoKCgoKIAoKCgoK
CgoKIAoKCgoKCiAKCgojIDQ1OCAiL3Vzci9pbmNsdWRlL3N5cy9zdHJlYW0uaCIgMyA0CgpzdHJ1
Y3QgY29weXJlcSB7CglpbnQJY3FfY21kOwkJCSAKCWNyZWRfdAkqY3FfY3I7CQkJIAoJdWludF90
CWNxX2lkOwkJCSAKCWNhZGRyX3QJY3FfYWRkcjsJCSAKCXNpemVfdAljcV9zaXplOwkJIAoJdWlu
dF90CWNxX2ZsYWc7CQkgCgltYmxrX3QJKmNxX3ByaXZhdGU7CQkgCglpbnQJY3FfZmlsbGVyWzRd
OwkJIAp9OwoKCgoKCiAKCgoJCQkJCSAKCgkJCQkJIAoJCQkJCSAKCiAKCgojIDQ5NSAiL3Vzci9p
bmNsdWRlL3N5cy9zdHJlYW0uaCIgMyA0CgpzdHJ1Y3QgY29weXJlc3AgewoJaW50CWNwX2NtZDsJ
CQkgCgljcmVkX3QJKmNwX2NyOwkJCSAKCXVpbnRfdAljcF9pZDsJCQkgCgljYWRkcl90CWNwX3J2
YWw7CQkgCgkJCQkJIAoJc2l6ZV90CWNwX3BhZDE7Cgl1aW50X3QJY3BfcGFkMjsKCW1ibGtfdCAq
Y3BfcHJpdmF0ZTsJCSAKCXVpbnRfdAljcF9mbGFnOwkJIAoJaW50CWNwX2ZpbGxlclszXTsKfTsK
CgoKCgogCgoKCgp1bmlvbiBpb2N0eXBlcyB7CglzdHJ1Y3QgaW9jYmxrCWlvY2JsazsKCXN0cnVj
dCBjb3B5cmVxCWNvcHlyZXE7CglzdHJ1Y3QgY29weXJlc3AJY29weXJlc3A7Cn07CgogCgoKCgpz
dHJ1Y3Qgc3Ryb3B0aW9ucyB7Cgl1aW50X3QJc29fZmxhZ3M7CQkgCglzaG9ydAlzb19yZWFkb3B0
OwkJIAoJdXNob3J0X3Qgc29fd3JvZmY7CQkgCglzc2l6ZV90CXNvX21pbnBzejsJCSAKCXNzaXpl
X3QJc29fbWF4cHN6OwkJIAoJc2l6ZV90CXNvX2hpd2F0OwkJIAoJc2l6ZV90CXNvX2xvd2F0OwkJ
IAoJdW5zaWduZWQgY2hhciBzb19iYW5kOwkJIAoJdXNob3J0X3Qgc29fZXJyb3B0OwkJIAoJc3Np
emVfdAlzb19tYXhibGs7CQkgCgl1c2hvcnRfdCBzb19jb3B5b3B0OwkJIAp9OwoKIAoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgojIDYwMiAiL3Vzci9pbmNsdWRlL3N5cy9zdHJlYW0uaCIgMyA0CgoK
IAoKCgogCgoKCgoKCiAKCgoKCgoKCgogCgoKCgoKCgkJCQkJIAoKIAoKCgoKIAoKCgoKCiAKCgoK
CiAKCgoKCgogCgoKCgogCgoKCgoKIAoKCgogCgoKCgogCgoKCgoKCiAKCgoKCgoKCgoKIAoKCgoK
IAoKCgoKIAoKCgoKIAoKCgojIDc4NiAiL3Vzci9pbmNsdWRlL3N5cy9zdHJlYW0uaCIgMyA0CgoK
IAoKCmV4dGVybiBpbnQgbnN0cnB1c2g7CQkJIAoKCn0KCgoKIyA1ICIvb3B0L212cGxvY2FsL2xp
Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvaW5jbHVkZS9zeXMvc3RyZWFtLmgi
IDIgMyA0CgoKCgoKCiMgNDEgIi91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDIgMyA0CgoKIAoK
CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2J5dGVvcmRlci5oIiAxIDMgNAogCiAKCiAKIAogCgoK
CgojcHJhZ21hIGlkZW50CSJAKCMpYnl0ZW9yZGVyLmgJMS4xNAk5OC8wNC8xOSBTTUkiCQoKCgoK
ZXh0ZXJuICJDIiB7CgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgoKCgojIDc0ICIv
dXNyL2luY2x1ZGUvc3lzL2J5dGVvcmRlci5oIiAzIDQKCgoKfQoKCgojIDQ4ICIvdXNyL2luY2x1
ZGUvbmV0aW5ldC9pbi5oIiAyIDMgNAoKCgoKCnR5cGVkZWYJdWludDE2X3QJaW5fcG9ydF90OwoK
CiAKCgoKCgoKCgoKCgoKdHlwZWRlZgl1aW50MzJfdAlpbl9hZGRyX3Q7CgoKCgp0eXBlZGVmIHVp
bnQzMl90IGlwYWRkcl90OwoKCgoKc3RydWN0IGluNl9hZGRyIHsKCXVuaW9uIHsKCQkgCgoKCgoK
CgoKCgoKCgoKCQl1aW50OF90CQlfUzZfdThbMTZdOwkgCgkJdWludDMyX3QJX1M2X3UzMls0XTsJ
IAoKCQl1aW50MzJfdAlfX1M2X2FsaWduOwkgCgl9IF9TNl91bjsKfTsKCgoKCgoKCnR5cGVkZWYg
c3RydWN0IGluNl9hZGRyIGluNl9hZGRyX3Q7CgoKCgoKdHlwZWRlZgl1bnNpZ25lZCBzaG9ydAlz
YV9mYW1pbHlfdDsKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoK
CgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKCgoKIAoKCgoKCgogCgoKCgoKCgoKIAoKCgoKCgogCgoK
CgoKCgoKCgoKCgoKc3RydWN0IGluX2FkZHIgewoJdW5pb24gewoJCXN0cnVjdCB7IHVpbnQ4X3Qg
c19iMSwgc19iMiwgc19iMywgc19iNDsgfSBTX3VuX2IgOwoJCXN0cnVjdCB7IHVpbnQxNl90IHNf
dzEsIHNfdzI7IH0gU191bl93IDsKCgkJdWludDMyX3QgU19hZGRyIDsKCgoKCX0gU191biA7CgoK
CgoKCn07CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK
CgoKCiAKCgpzdHJ1Y3Qgc29ja2FkZHJfaW4gewoJc2FfZmFtaWx5X3QJc2luX2ZhbWlseTsKCWlu
X3BvcnRfdAlzaW5fcG9ydDsKCXN0cnVjdAlpbl9hZGRyIHNpbl9hZGRyOwoKCWNoYXIJCXNpbl96
ZXJvWzhdOwoKCgp9OwoKCiAKCgpzdHJ1Y3Qgc29ja2FkZHJfaW42IHsKCXNhX2ZhbWlseV90CXNp
bjZfZmFtaWx5OwoJaW5fcG9ydF90CXNpbjZfcG9ydDsKCXVpbnQzMl90CXNpbjZfZmxvd2luZm87
CglzdHJ1Y3QgaW42X2FkZHIJc2luNl9hZGRyOwoJdWludDMyX3QJc2luNl9zY29wZV9pZDsgICAK
CXVpbnQzMl90CV9fc2luNl9zcmNfaWQ7CSAKfTsKCiAKCgoKCgoKIAoKCgoKCgoKCgoKCiAKCgoK
CgoKCgoKCiMgMzU3ICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAzIDQKCgoKCgoKCgoKCgoK
CiAKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK
CgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCiMgNjA3ICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAzIDQKCgogCgoKCgoKCgoK
CgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAK
CgoKCgp0eXBlZGVmIHN0cnVjdCBpcHNlY19yZXEgewoJdWludF90IAkJaXBzcl9haF9yZXE7CQkg
Cgl1aW50X3QgCQlpcHNyX2VzcF9yZXE7CQkgCgl1aW50X3QJCWlwc3Jfc2VsZl9lbmNhcF9yZXE7
CSAKCXVpbnQ4X3QJCWlwc3JfYXV0aF9hbGc7CQkgCgl1aW50OF90CQlpcHNyX2VzcF9hbGc7CQkg
Cgl1aW50OF90CQlpcHNyX2VzcF9hdXRoX2FsZzsJIAp9IGlwc2VjX3JlcV90OwoKCiAKCgoKCgoK
IAoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgoKCgoKIAoKCnN0cnVjdCBpcF9tcmVxIHsKCXN0
cnVjdCBpbl9hZGRyCWltcl9tdWx0aWFkZHI7CSAKCXN0cnVjdCBpbl9hZGRyCWltcl9pbnRlcmZh
Y2U7CSAKfTsKCiAKCgoKc3RydWN0IGlwdjZfbXJlcSB7CglzdHJ1Y3QgaW42X2FkZHIJaXB2Nm1y
X211bHRpYWRkcjsJIAoJdW5zaWduZWQgaW50CWlwdjZtcl9pbnRlcmZhY2U7CSAKfTsKCiAKCgpz
dHJ1Y3QgaW42X3BrdGluZm8gewoJc3RydWN0IGluNl9hZGRyCQlpcGk2X2FkZHI7CSAKCXVuc2ln
bmVkIGludAkJaXBpNl9pZmluZGV4OwkgCn07CgogCgoKCgoKCiAKCgoKCnR5cGVkZWYgc3RydWN0
IHsKCXN0cnVjdCBpbl9hZGRyCWluX3ByZWZpeF9hZGRyOwoJdW5zaWduZWQgaW50CWluX3ByZWZp
eF9sZW47Cn0gaW5fcHJlZml4X3Q7CgoKIAoKCgoJCQkJCSAKCQkJCQkgCgoJCQkJCSAKCQkJCQkg
CgoJCQkJCSAKCQkJCQkgCgoJCQkJCSAKCQkJCQkgCgoJCQkJCSAKCgkJCQkJIAogCgoKCgoKCQkJ
CQkgCgoJCQkJCSAKCgoJCQkJCSAKCgoKCgkJCQkJIAoKCgkJCQkJIAoKCgoKCgoKCgogCgoKCgoJ
CQkJCSAKCgkJCQkJIAoKIAoKCgoJCQkJCSAKCgkJCQkJIAoKCgoKIAoKCgoKZXh0ZXJuIGNvbnN0
IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRyX2FueTsKZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbjZfYWRk
ciBpbjZhZGRyX2xvb3BiYWNrOwoKCgoKfQoKCgojIDk2ICIvdXNyL2luY2x1ZGUvbmV0ZGIuaCIg
MiAzIDQKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDEgMyA0CiAKCgoKCiAKIAoK
IAogCiAKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylzb2NrZXQuaAkxLjUzCTk5LzExLzA3IFNNSSIJ
CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL25ldGNvbmZp
Zy5oIiAxIDMgNAogCiAKCiAKIAogCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpbmV0Y29uZmlnLmgJ
MS4yMAk5OS8wNC8yNyBTTUkiCQoKCmV4dGVybiAiQyIgewoKCgoKCnN0cnVjdCAgbmV0Y29uZmln
IHsKCWNoYXIJCSpuY19uZXRpZDsJIAoJdW5zaWduZWQgaW50CW5jX3NlbWFudGljczsJIAoJdW5z
aWduZWQgaW50CW5jX2ZsYWc7CSAKCWNoYXIJCSpuY19wcm90b2ZtbHk7CSAKCWNoYXIJCSpuY19w
cm90bzsJIAoJY2hhcgkJKm5jX2RldmljZTsJIAoJdW5zaWduZWQgaW50CW5jX25sb29rdXBzOwkg
CgljaGFyCQkqKm5jX2xvb2t1cHM7CSAKCXVuc2lnbmVkIGludAluY191bnVzZWRbOF07CSAKfTsK
CnR5cGVkZWYgc3RydWN0IHsKCXN0cnVjdCBuZXRjb25maWcgKipuY19oZWFkOwoJc3RydWN0IG5l
dGNvbmZpZyAqKm5jX2N1cnI7Cn0gTkNPTkZfSEFORExFOwoKIAoKCgoKCgoKCiAKCgoKCgoKCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCmV4dGVybiB2b2lkCQkqc2V0
bmV0Y29uZmlnKHZvaWQpOwpleHRlcm4gaW50CQllbmRuZXRjb25maWcodm9pZCAqKTsKZXh0ZXJu
IHN0cnVjdCBuZXRjb25maWcJKmdldG5ldGNvbmZpZyh2b2lkICopOwpleHRlcm4gc3RydWN0IG5l
dGNvbmZpZwkqZ2V0bmV0Y29uZmlnZW50KGNoYXIgKik7CmV4dGVybiB2b2lkCQlmcmVlbmV0Y29u
ZmlnZW50KHN0cnVjdCBuZXRjb25maWcgKik7CmV4dGVybiB2b2lkCQkqc2V0bmV0cGF0aCh2b2lk
KTsKZXh0ZXJuIGludAkJZW5kbmV0cGF0aCh2b2lkICopOwpleHRlcm4gc3RydWN0IG5ldGNvbmZp
ZyAqZ2V0bmV0cGF0aCh2b2lkICopOwpleHRlcm4gdm9pZAkJbmNfcGVycm9yKGNvbnN0IGNoYXIg
Kik7CmV4dGVybiBjaGFyCQkqbmNfc3BlcnJvcih2b2lkKTsKCiMgMTE4ICIvdXNyL2luY2x1ZGUv
c3lzL25ldGNvbmZpZy5oIiAzIDQKCgoKfQoKCgojIDQyICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tl
dC5oIiAyIDMgNAoKCgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCgoKCgoKdHlwZWRlZgl1aW50MzJf
dAlzb2NrbGVuX3Q7CgoKCgoKdHlwZWRlZgl2b2lkCQkqUHNvY2tsZW5fdDsKCgoKCiAKCgoKCgoK
CgoKCgogCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoK
IAoKCgoKCgoKCgogCgoKc3RydWN0CWxpbmdlciB7CglpbnQJbF9vbm9mZjsJCSAKCWludAlsX2xp
bmdlcjsJCSAKfTsKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgpzdHJ1Y3Qgc29ja2FkZHIgewoJc2FfZmFtaWx5X3QJc2FfZmFtaWx5OwkgCgljaGFyCQlzYV9k
YXRhWzE0XTsJIAp9OwoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdW4uaCIgMSAzIDQKIAogCgog
CiAKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXVuLmgJ
MS45CTk2LzA3LzEyIFNNSSIJCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgogCgoKc3RydWN0CXNvY2th
ZGRyX3VuIHsKCXNhX2ZhbWlseV90CXN1bl9mYW1pbHk7CQkgCgljaGFyCQlzdW5fcGF0aFsxMDhd
OwkJIAp9OwoKCgoKCgp9CgoKCiMgMjAwICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAyIDMg
NAoKIyAxICIvdXNyL2luY2x1ZGUvbmV0L2lmX2RsLmgiIDEgMyA0CiAKCgoKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylpZl9kbC5oCTEuNwk5
OC8wMS8wNiBTTUkiCiAKCgpleHRlcm4gIkMiIHsKCgogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCnN0
cnVjdCBzb2NrYWRkcl9kbCB7Cgl1c2hvcnRfdCBzZGxfZmFtaWx5OwkgCgl1c2hvcnRfdCBzZGxf
aW5kZXg7CSAKCXVjaGFyX3QJc2RsX3R5cGU7CSAKCXVjaGFyX3QJc2RsX25sZW47CSAKCXVjaGFy
X3QJc2RsX2FsZW47CSAKCXVjaGFyX3QJc2RsX3NsZW47CSAKCWNoYXIJc2RsX2RhdGFbMjQ0XTsJ
IAp9OwoKCgoKfQoKCgojIDIwMSAiL3Vzci9pbmNsdWRlL3N5cy9zb2NrZXQuaCIgMiAzIDQKCgog
CgoKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgp0eXBlZGVmCWRvdWJsZQkJc29ja2FkZHJfbWF4YWxp
Z25fdDsKCgoKIAoKCgoKCgpzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSB7CglzYV9mYW1pbHlfdAlz
c19mYW1pbHk7CSAKCSAKCWNoYXIJCV9zc19wYWQxWygoc2l6ZW9mIChzb2NrYWRkcl9tYXhhbGln
bl90KSkgIC0gc2l6ZW9mIChzYV9mYW1pbHlfdCkpIF07Cglzb2NrYWRkcl9tYXhhbGlnbl90IF9z
c19hbGlnbjsKCWNoYXIJCV9zc19wYWQyWygyNTYgIC0gKHNpemVvZiAoc2FfZmFtaWx5X3QpKyAo
KHNpemVvZiAoc29ja2FkZHJfbWF4YWxpZ25fdCkpICAtIHNpemVvZiAoc2FfZmFtaWx5X3QpKSAg
KyAoc2l6ZW9mIChzb2NrYWRkcl9tYXhhbGlnbl90KSkgKSkgXTsKfTsKCgogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgpzdHJ1Y3QgbXNnaGRyIHsKCXZvaWQJCSpt
c2dfbmFtZTsJCSAKCXNvY2tsZW5fdAltc2dfbmFtZWxlbjsJCSAKCXN0cnVjdCBpb3ZlYwkqbXNn
X2lvdjsJCSAKCWludAkJbXNnX2lvdmxlbjsJCSAKCgoKCgoKCWNhZGRyX3QJCW1zZ19hY2NyaWdo
dHM7CSAKCWludAkJbXNnX2FjY3JpZ2h0c2xlbjsKCn07CgojIDM0NyAiL3Vzci9pbmNsdWRlL3N5
cy9zb2NrZXQuaCIgMyA0CgoKCgoKIAoKCgoKIAoKCgoKCiAKCgoKCnN0cnVjdCBjbXNnaGRyIHsK
CXNvY2tsZW5fdAljbXNnX2xlbjsJIAoJaW50CQljbXNnX2xldmVsOwkgCglpbnQJCWNtc2dfdHlw
ZTsJIAp9OwoKIyAzODIgIi91c3IvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDMgNAoKCiMgNDA1ICIv
dXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAzIDQKCgojIDQyOCAiL3Vzci9pbmNsdWRlL3N5cy9z
b2NrZXQuaCIgMyA0CgoKCgoKCgoKCgoKCmV4dGVybiBpbnQgYWNjZXB0KGludCwgc3RydWN0IHNv
Y2thZGRyICosIFBzb2NrbGVuX3QpOwpleHRlcm4gaW50IGJpbmQoaW50LCBjb25zdCBzdHJ1Y3Qg
c29ja2FkZHIgKiwgc29ja2xlbl90KTsKZXh0ZXJuIGludCBjb25uZWN0KGludCwgY29uc3Qgc3Ry
dWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCk7CmV4dGVybiBpbnQgZ2V0cGVlcm5hbWUoaW50LCBz
dHJ1Y3Qgc29ja2FkZHIgKiwgUHNvY2tsZW5fdCk7CmV4dGVybiBpbnQgZ2V0c29ja25hbWUoaW50
LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgUHNvY2tsZW5fdCk7CmV4dGVybiBpbnQgZ2V0c29ja29wdChp
bnQsIGludCwgaW50LCB2b2lkICosIFBzb2NrbGVuX3QpOwpleHRlcm4gaW50IGxpc3RlbihpbnQs
IGludCk7CSAKZXh0ZXJuIGludCBzb2NrZXRwYWlyKGludCwgaW50LCBpbnQsIGludCAqKTsKZXh0
ZXJuIHNzaXplX3QgcmVjdihpbnQsIHZvaWQgKiwgc2l6ZV90LCBpbnQpOwpleHRlcm4gc3NpemVf
dCByZWN2ZnJvbShpbnQsIHZvaWQgKiwgc2l6ZV90LCBpbnQsIHN0cnVjdCBzb2NrYWRkciAqLAoJ
UHNvY2tsZW5fdCk7CmV4dGVybiBzc2l6ZV90IHJlY3Ztc2coaW50LCBzdHJ1Y3QgbXNnaGRyICos
IGludCk7CmV4dGVybiBzc2l6ZV90IHNlbmQoaW50LCBjb25zdCB2b2lkICosIHNpemVfdCwgaW50
KTsKZXh0ZXJuIHNzaXplX3Qgc2VuZG1zZyhpbnQsIGNvbnN0IHN0cnVjdCBtc2doZHIgKiwgaW50
KTsKZXh0ZXJuIHNzaXplX3Qgc2VuZHRvKGludCwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCwg
Y29uc3Qgc3RydWN0IHNvY2thZGRyICosCglzb2NrbGVuX3QpOwpleHRlcm4gaW50IHNldHNvY2tv
cHQoaW50LCBpbnQsIGludCwgY29uc3Qgdm9pZCAqLCBzb2NrbGVuX3QpOwpleHRlcm4gaW50IHNo
dXRkb3duKGludCwgaW50KTsKZXh0ZXJuIGludCBzb2NrZXQoaW50LCBpbnQsIGludCk7CiMgNDc3
ICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAzIDQKCgoKCn0KCgoKIyA5OCAiL3Vzci9pbmNs
dWRlL25ldGRiLmgiIDIgMyA0CgoKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgoKCgpzdHJ1Y3QJaG9z
dGVudCB7CgljaGFyCSpoX25hbWU7CSAKCWNoYXIJKipoX2FsaWFzZXM7CSAKCWludAloX2FkZHJ0
eXBlOwkgCglpbnQJaF9sZW5ndGg7CSAKCWNoYXIJKipoX2FkZHJfbGlzdDsJIAoKfTsKCgogCgoK
CgoKc3RydWN0IGFkZHJpbmZvIHsKCWludCBhaV9mbGFnczsJCSAKCWludCBhaV9mYW1pbHk7CQkg
CglpbnQgYWlfc29ja3R5cGU7CSAKCWludCBhaV9wcm90b2NvbDsJIAoJc2l6ZV90IGFpX2FkZHJs
ZW47CQkgCgljaGFyICphaV9jYW5vbm5hbWU7CSAKCXN0cnVjdCBzb2NrYWRkciAqYWlfYWRkcjsJ
IAoJc3RydWN0IGFkZHJpbmZvICphaV9uZXh0OwkgCn07CiAKCgoKCiAKCgoKCgogCgoKCgoKCgoK
CgoKCiAKCgoKCiAKCgoKCgoKCgoKIAoKCgpzdHJ1Y3QJbmV0ZW50IHsKCWNoYXIJCSpuX25hbWU7
CSAKCWNoYXIJCSoqbl9hbGlhc2VzOwkgCglpbnQJCW5fYWRkcnR5cGU7CSAKCWluX2FkZHJfdAlu
X25ldDsJCSAKfTsKCnN0cnVjdAlwcm90b2VudCB7CgljaGFyCSpwX25hbWU7CSAKCWNoYXIJKipw
X2FsaWFzZXM7CSAKCWludAlwX3Byb3RvOwkgCn07CgpzdHJ1Y3QJc2VydmVudCB7CgljaGFyCSpz
X25hbWU7CSAKCWNoYXIJKipzX2FsaWFzZXM7CSAKCWludAlzX3BvcnQ7CQkgCgljaGFyCSpzX3By
b3RvOwkgCn07CgoKCnN0cnVjdCBob3N0ZW50CSpnZXRob3N0YnluYW1lX3IKCShjb25zdCBjaGFy
ICosIHN0cnVjdCBob3N0ZW50ICosIGNoYXIgKiwgaW50LCBpbnQgKmhfZXJybm9wKTsKc3RydWN0
IGhvc3RlbnQJKmdldGhvc3RieWFkZHJfcgoJKGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIHN0cnVj
dCBob3N0ZW50ICosIGNoYXIgKiwgaW50LCBpbnQgKmhfZXJybm9wKTsKc3RydWN0IGhvc3RlbnQJ
KmdldGlwbm9kZWJ5bmFtZShjb25zdCBjaGFyICosIGludCwgaW50LCBpbnQgKik7CnN0cnVjdCBo
b3N0ZW50CSpnZXRpcG5vZGVieWFkZHIoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCwgaW50ICop
Owp2b2lkCQlmcmVlaG9zdGVudChzdHJ1Y3QgaG9zdGVudCAqKTsKc3RydWN0IGhvc3RlbnQJKmdl
dGhvc3RlbnRfcihzdHJ1Y3QgaG9zdGVudCAqLCBjaGFyICosIGludCwgaW50ICpoX2Vycm5vcCk7
CgpzdHJ1Y3Qgc2VydmVudAkqZ2V0c2VydmJ5bmFtZV9yCgkoY29uc3QgY2hhciAqbmFtZSwgY29u
c3QgY2hhciAqLCBzdHJ1Y3Qgc2VydmVudCAqLCBjaGFyICosIGludCk7CnN0cnVjdCBzZXJ2ZW50
CSpnZXRzZXJ2Ynlwb3J0X3IKCShpbnQgcG9ydCwgY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc2VydmVu
dCAqLCBjaGFyICosIGludCk7CnN0cnVjdCBzZXJ2ZW50CSpnZXRzZXJ2ZW50X3Ioc3RydWN0CXNl
cnZlbnQgKiwgY2hhciAqLCBpbnQpOwoKc3RydWN0IG5ldGVudAkqZ2V0bmV0YnluYW1lX3IKCShj
b25zdCBjaGFyICosIHN0cnVjdCBuZXRlbnQgKiwgY2hhciAqLCBpbnQpOwpzdHJ1Y3QgbmV0ZW50
CSpnZXRuZXRieWFkZHJfcihsb25nLCBpbnQsIHN0cnVjdCBuZXRlbnQgKiwgY2hhciAqLCBpbnQp
OwpzdHJ1Y3QgbmV0ZW50CSpnZXRuZXRlbnRfcihzdHJ1Y3QgbmV0ZW50ICosIGNoYXIgKiwgaW50
KTsKCnN0cnVjdCBwcm90b2VudAkqZ2V0cHJvdG9ieW5hbWVfcgoJKGNvbnN0IGNoYXIgKiwgc3Ry
dWN0IHByb3RvZW50ICosIGNoYXIgKiwgaW50KTsKc3RydWN0IHByb3RvZW50CSpnZXRwcm90b2J5
bnVtYmVyX3IKCShpbnQsIHN0cnVjdCBwcm90b2VudCAqLCBjaGFyICosIGludCk7CnN0cnVjdCBw
cm90b2VudAkqZ2V0cHJvdG9lbnRfcihzdHJ1Y3QgcHJvdG9lbnQgKiwgY2hhciAqLCBpbnQpOwoK
aW50IGdldG5ldGdyZW50X3IoY2hhciAqKiwgY2hhciAqKiwgY2hhciAqKiwgY2hhciAqLCBpbnQp
OwppbnQgaW5uZXRncihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBj
b25zdCBjaGFyICopOwoKCiAKc3RydWN0IGhvc3RlbnQJKmdldGhvc3RieW5hbWUoY29uc3QgY2hh
ciAqKTsKc3RydWN0IGhvc3RlbnQJKmdldGhvc3RlbnQodm9pZCk7CgpzdHJ1Y3QgbmV0ZW50ICpn
ZXRuZXRieWFkZHIoaW5fYWRkcl90LCBpbnQpOwoKCgpzdHJ1Y3QgbmV0ZW50CSpnZXRuZXRieW5h
bWUoY29uc3QgY2hhciAqKTsKc3RydWN0IG5ldGVudAkqZ2V0bmV0ZW50KHZvaWQpOwpzdHJ1Y3Qg
cHJvdG9lbnQJKmdldHByb3RvYnluYW1lKGNvbnN0IGNoYXIgKik7CnN0cnVjdCBwcm90b2VudAkq
Z2V0cHJvdG9ieW51bWJlcihpbnQpOwpzdHJ1Y3QgcHJvdG9lbnQJKmdldHByb3RvZW50KHZvaWQp
OwpzdHJ1Y3Qgc2VydmVudAkqZ2V0c2VydmJ5bmFtZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIg
Kik7CnN0cnVjdCBzZXJ2ZW50CSpnZXRzZXJ2Ynlwb3J0KGludCwgY29uc3QgY2hhciAqKTsKc3Ry
dWN0IHNlcnZlbnQJKmdldHNlcnZlbnQodm9pZCk7CgoKaW50CQkgZ2V0bmV0Z3JlbnQoY2hhciAq
KiwgY2hhciAqKiwgY2hhciAqKik7CnN0cnVjdCBob3N0ZW50CSpnZXRob3N0YnlhZGRyKGNvbnN0
IGNoYXIgKiwgaW50LCBpbnQpOwoKCgoKCmludCBlbmRob3N0ZW50KHZvaWQpOwppbnQgZW5kbmV0
ZW50KHZvaWQpOwppbnQgZW5kcHJvdG9lbnQodm9pZCk7CmludCBlbmRzZXJ2ZW50KHZvaWQpOwpp
bnQgc2V0aG9zdGVudChpbnQpOwppbnQgc2V0bmV0ZW50KGludCk7CmludCBzZXRwcm90b2VudChp
bnQpOwppbnQgc2V0c2VydmVudChpbnQpOwojIDI3NyAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDMg
NAoKCgoKCgppbnQgc2V0bmV0Z3JlbnQoY29uc3QgY2hhciAqKTsKaW50IGVuZG5ldGdyZW50KHZv
aWQpOwppbnQgcmNtZChjaGFyICoqLCB1bnNpZ25lZCBzaG9ydCwKCWNvbnN0IGNoYXIgKiwgY29u
c3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCAqKTsKaW50IHJjbWRfYWYoY2hhciAqKiwgdW5z
aWduZWQgc2hvcnQsCgljb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBp
bnQgKiwgaW50KTsKaW50IHJyZXN2cG9ydF9hZihpbnQgKiwgaW50KTsKaW50IHJleGVjKGNoYXIg
KiosIHVuc2lnbmVkIHNob3J0LAoJY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNo
YXIgKiwgaW50ICopOwppbnQgcmV4ZWNfYWYoY2hhciAqKiwgdW5zaWduZWQgc2hvcnQsCgljb25z
dCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQgKiwgaW50KTsKaW50IHJy
ZXN2cG9ydChpbnQgKik7CmludCBydXNlcm9rKGNvbnN0IGNoYXIgKiwgaW50LCBjb25zdCBjaGFy
ICosIGNvbnN0IGNoYXIgKik7CiAKc3RydWN0IGhvc3RlbnQJKmdldGhvc3RieW5hbWUyKGNvbnN0
IGNoYXIgKiwgaW50KTsKdm9pZAkJaGVycm9yKGNvbnN0IGNoYXIgKik7CmNvbnN0IGNoYXIJKmhz
dHJlcnJvcihpbnQpOwogCgogCmludAkJZ2V0YWRkcmluZm8oY29uc3QgY2hhciAqLCBjb25zdCBj
aGFyICosCgkJCWNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqLCBzdHJ1Y3QgYWRkcmluZm8gKiopOwp2
b2lkCQlmcmVlYWRkcmluZm8oc3RydWN0IGFkZHJpbmZvICopOwpjaGFyCQkqZ2FpX3N0cmVycm9y
KGludCk7CmludAkJZ2V0bmFtZWluZm8oY29uc3Qgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5f
dCwKCQkJY2hhciAqLCBzaXplX3QsIGNoYXIgKiwgc2l6ZV90LCBpbnQpOwogCgoKCiMgMzc1ICIv
dXNyL2luY2x1ZGUvbmV0ZGIuaCIgMyA0CgoKIAoKCgoKZXh0ZXJuICBpbnQgaF9lcnJubzsKCgoK
CgoKCgoKIAoKCiAKCgoKCgoKCgp9CgoKCiMgOSAiLi4vLi4vaW5jbHVkZS9saWJpbmMvY2ZnX2Ns
YXNzLmgiIDIKCgoKCgoKIyAxICIuLi8uLi9pbmNsdWRlL2xvY2FsaW5jL2JhcmNvZGUuaCIgMQog
CgoKCgoKIAoKCgoKCgoKCgogCgoKCgoKCgoKIAoKCgoKCgoKCgoKCnZvaWQgcmVhZF9iYXJjb2Rl
X2RhdGEoaW50IGluX21haW4pOwoKIyAxNSAiLi4vLi4vaW5jbHVkZS9saWJpbmMvY2ZnX2NsYXNz
LmgiIDIKCiMgMSAiLi4vLi4vaW5jbHVkZS9sb2NhbGluYy9YeXN0YWdlLkgiIDEKCgoKCiMgMSAi
Li4vLi4vaW5jbHVkZS9sb2NhbGluYy9JbmRleGVyLkgiIDEKCgoKCgoKCiAKCgoKc3RhdGljIGNv
bnN0IGxvbmcga01pblNuYXBEZWxheSA9IDEwOwogCgoKc3RhdGljIGNvbnN0IGxvbmcga01pblNp
bmdsZVNwZWVkRGVsYXkgPSAzNjsKc3RhdGljIGNvbnN0IGxvbmcga01pbkRpZ2l0YWxQdWxuaXgg
PSBrTWluU25hcERlbGF5OwpzdGF0aWMgY29uc3QgbG9uZyBrTWluRGVmYXVsdERlbGF5ID0gMjA7
CgpjbGFzcyBJbmRleGVyIHsKcHVibGljOgogCgoKCgogICAgc2hvcnQgaV9zc3RhdDsJIAogICAg
c2hvcnQgaV9maWxsZXIxOwogICAgc3RydWN0IGF4aXMgKmFfaG9tZTsKICAgIHVfc2hvcnQgaV9h
Y2M7CSAKICAgIHVfc2hvcnQgaV92ZWw7CSAKICAgIHVfc2hvcnQgaV9tYWNjOwkgCiAgICB1X3No
b3J0IGlfbXZlbDsKICAgIHVfc2hvcnQgaV9waXRjaFI7CSAKICAgIHVfc2hvcnQgaV9waXRjaEQ7
CSAKICAgIHNob3J0IGlfdW5pdDsKICAgIHVfc2hvcnQgaV9mZWVkYmFjazsJIAogICAgbG9uZyBp
X2RpczsJCSAKICAgIHVfbG9uZyBpX210aW1lOwkgCiAgICB1X2xvbmcgaV90ZGlzOwkgCiAgICBs
b25nIGlfcG9zOwogICAgbG9uZyBpX21wb3M7CiAgICBsb25nIGlfZGVsYXk7CiAgICBsb25nIGlf
c2NhbGU7CSAKCQkJIAogICAgbG9uZyBpX2NudHJldjsKIAoKCgoKfTsKCiMgNSAiLi4vLi4vaW5j
bHVkZS9sb2NhbGluYy9YeXN0YWdlLkgiIDIKCiMgMSAiLi4vLi4vaW5jbHVkZS9sb2NhbGluYy9a
ZXRhLkgiIDEKCgoKCgoKCiAKCgoKCmNsYXNzIFpldGEgewpwdWJsaWM6CiAgICB1X3Nob3J0IHVu
aXQ7CSAKICAgIHVfc2hvcnQgZGVsdmlzOwkgCiAgICB1X3Nob3J0IGR3YXZlZjsJIAogICAgdV9z
aG9ydCBkYWN0ZHA7CSAKICAgIHVfc2hvcnQgZGFyZW47CSAKICAgIHVfc2hvcnQgZGF1dG9zOwkg
CiAgICB1X3Nob3J0IGRtdGluZDsJIAogICAgdV9zaG9ydCBkbXRzdHQ7CSAKICAgIHVfc2hvcnQg
ZXJlczsJIAogICAgdV9zaG9ydCBlcG12OwkgCiAgICBsb25nIGVwbWc7CQkgCiAKCgoKCn07Cgoj
IDYgIi4uLy4uL2luY2x1ZGUvbG9jYWxpbmMvWHlzdGFnZS5IIiAyCgoKY2xhc3MJY29uZmlndXJh
dGlvbjsKCmNsYXNzIFRsYWcgewpwdWJsaWM6CiAgICBzaG9ydCBsX3BvczsKICAgIHNob3J0IGxf
bmVnOwp9OwoKCgpzdGF0aWMgY29uc3QgaW50CWtNYXhTdGFnZXMJPSAyOyAgICAgCnN0YXRpYyBj
b25zdCBpbnQJa0F4aXNYCQk9IDA7CnN0YXRpYyBjb25zdCBpbnQJa0F4aXNZCQk9IDE7CgpzdGF0
aWMgY29uc3QgaW50CWtNYXhEZWxheQk9IDUwMDA7CnN0YXRpYyBjb25zdCBpbnQJa01heEFjY2Vs
CT0gMzAwOwoKc3RhdGljIGNvbnN0IHVfc2hvcnQJa01heFVTaG9ydAk9IDB4ZmZmZjsKCnN0YXRp
YyBjb25zdCBpbnQJa1ZlbG9jaXR5CT0gMDsKc3RhdGljIGNvbnN0IGludAlrQWNjZWxlcmF0aW9u
CT0gMTsKCnN0YXRpYyBjb25zdCBsb25nCWtWZWxvY2l0eVNoaWZ0CT0gMDsKc3RhdGljIGNvbnN0
IGxvbmcJa0FjY2VsZXJhdGlvblNoaWZ0ID0gMTY7CgpjbGFzcyBYeXN0YWdlIHsKcHJpdmF0ZToK
ICAgIHZvbGF0aWxlIHNob3J0IF94eV9jbWQ7CiAgICB2b2xhdGlsZSBzaG9ydCBfeHlfc3Ryb2Jl
OwpwdWJsaWM6CiAgICBzaG9ydCB4eV9zdGF0OwogICAgc2hvcnQgeHlfbmluc3A7CQkgCiAgICBs
b25nIHh5X2F0dG5tc2c7CQkgCiAgICBsb25nIHh5X3hjbWQ7CiAgICBsb25nIHh5X3ljbWQ7CiAg
ICBsb25nIHh5X25zdHJvYmVzOwogICAgbG9uZyB4eV94cGFyazsKICAgIGxvbmcgeHlfeXBhcms7
CiAgICBUbGFnIHh5X3RsYWdbMzEgXTsKICAgIEluZGV4ZXIgeHlfeDsKICAgIEluZGV4ZXIgeHlf
eTsKICAgIFpldGEgeHlfeng7CiAgICBaZXRhIHh5X3p5OwoKICAgIHZvaWQgc2V0X2ZpZHVfc3Bl
ZWQgKGNvbmZpZ3VyYXRpb24mKTsKICAgIHZvaWQgc2V0X25vcm1hbF9zcGVlZCAoY29uZmlndXJh
dGlvbiYpOwogICAgdm9pZCB1cGRhdGVfZnJvbV9jb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24g
Kik7CiAgICB2b2lkIHdhaXRfY21kKHNob3J0IGNtZCk7CgogICAgdm9pZCBjbGVhcl9zYXZlKCk7
CiAgICB2b2lkIHNhdmVfZmx5KCk7CiAgICB2b2lkIHJlc3RvcmVfZmx5KCk7CiAgICB2b2lkIHNh
dmVfZmlkdSgpOwogICAgdm9pZCByZXN0b3JlX2ZpZHUoKTsKCiAgICB2b2lkIHh5X2NtZChzaG9y
dCBjbWQpIHZvbGF0aWxlOwogICAgdm9pZCB4eV9zdHJvYmUoYm9vbCBmaXJlKSB2b2xhdGlsZTsK
CiAgICBib29sIHh5X3N0cm9iZSgpIHZvbGF0aWxlIHsgcmV0dXJuKF94eV9zdHJvYmUpOyB9CiAg
ICBpbnQgeHlfY21kKCkgdm9sYXRpbGUgeyByZXR1cm4oX3h5X2NtZCk7IH0KCiAgICBzdGF0aWMg
WHlzdGFnZSAqZ2V0KCk7Cgpwcml2YXRlOgogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAog
ICAgIAogICAgbG9uZyBfc2F2ZV9mbHlfdmVsW2tNYXhTdGFnZXNdOwogICAgbG9uZyBfc2F2ZV9m
bHlfYWNjW2tNYXhTdGFnZXNdOwogICAgbG9uZyBfZmx5X3NhdmVkOwoKICAgIGxvbmcgX3NhdmVf
ZmlkdV92ZWxba01heFN0YWdlc107CiAgICBsb25nIF9zYXZlX2ZpZHVfYWNjW2tNYXhTdGFnZXNd
OwogICAgbG9uZyBfZmlkdV9zYXZlZDsKCiAgICB2b2lkIHNldF9hY2NfdmVsKHVfc2hvcnQgYWNj
LCB1X3Nob3J0IHZlbCk7CSAKICAgIHZvaWQgc2V0X2FjY192ZWwoaW50IGF4aXMsIHVfc2hvcnQg
YWNjLCB1X3Nob3J0IHZlbCk7CiAgICB2b2lkIGxvYWRfYXhpcyhjb25maWd1cmF0aW9uICpjZmcs
IGludCBheGlzKTsKCiAgICB2b2lkICpvcGVyYXRvciBuZXcoc2l6ZV90KTsKICAgIHZvaWQgb3Bl
cmF0b3IgZGVsZXRlKHZvaWQgKik7Cn07CgojIDE2ICIuLi8uLi9pbmNsdWRlL2xpYmluYy9jZmdf
Y2xhc3MuaCIgMgoKCgoKIyAxICIuLi8uLi9pbmNsdWRlL2xpYmluYy9GaWR1X1NwZC5IIiAxCgoK
CgoKCgoKCgoKY2xhc3MgQ2ZnU3RhZ2UyIHsKcHVibGljOgogICAgdV9zaG9ydAlmaWR1X2FjY2Vs
OwogICAgdV9zaG9ydAlmaWR1X3ZlbDsKfTsKCgojIDIwICIuLi8uLi9pbmNsdWRlL2xpYmluYy9j
ZmdfY2xhc3MuaCIgMgoKCgoKCgoKY29uc3QJaW50CWtOdmNwdQk9IDg7CSAKdHlwZWRlZiBlbnVt
IHsga0hvc3RGaWR1Y2lhbHMgPSAwLCBrUmVtb3RlRmlkdWNpYWxzID0gMSB9IGVfZmlkdV9sb2Nh
dGlvbjsKCiAKCgpjb25zdCBpbnQga1N4NTAwID0gMDsKY29uc3QgaW50IGtaZXRhID0gMTsKY29u
c3QgaW50IGtMaW5lYXIgPSAyOwoKIAoKCmNvbnN0IGludCBrQ2FtZXJhV2lkdGhFcnJvciA9IC0x
MDAwOwpjb25zdCBpbnQga0NhbWVyYUZyYW1lQnVmZmVyRXJyb3IgPSAtMTAwMTsKY29uc3QgaW50
IGtMYXNlclZlbG9jaXR5RXJyb3IgPSAtMTAyMDsKY29uc3QgaW50IGtTcGVjaWFsM2RMZWZ0T2Zm
c2V0RXJyb3IgPSAtMTAzMDsKY29uc3QgaW50IGtTcGVjaWFsM2RSaWdodE9mZnNldEVycm9yID0g
LTEwMzE7CgpzdGF0aWMgY29uc3QgY2hhciAqa0NhbWVyYVdpZHRoTXNnID0gCSJDYW1lcmEgV2lk
dGggbm90IHZhbGlkIGZvciB0aGlzIGNhbWVyYSB0eXBlIjsKCnN0YXRpYyBjb25zdCBjaGFyICpr
Q2FtZXJhRnJhbWVCdWZmZXJNc2cgPSAJIkNhbWVyYSBGcmFtZSBCdWZmZXIgc2l6ZSBub3QgdmFs
aWQgZm9yIHRoaXMgY2FtZXJhIHR5cGUiOwoKc3RhdGljIGNvbnN0IGNoYXIgKmtMYXNlclZlbG9j
aXR5TXNnID0gCSJMYXNlciBJbml0aWFsIFZlbG9jaXR5IGdyZWF0ZXIgdGhhbiBMYXNlciBGaW5h
bCBWZWxvY2l0eSI7CgpzdGF0aWMgY29uc3QgY2hhciAqa1NwZWNpYWwzZExlZnRPZmZzZXRNc2cg
PSAJIjNEIExlZnQgb2Zmc2V0IGdyZWF0ZXIgdGhhbiBTdGFydCBTdG9wIGRpc3RhbmNlIjsKCnN0
YXRpYyBjb25zdCBjaGFyICprU3BlY2lhbDNkUmlnaHRPZmZzZXRNc2cgPSAJIjNEIFJpZ2h0IG9m
ZnNldCBncmVhdGVyIHRoYW4gU3RhcnQgU3RvcCBkaXN0YW5jZSI7CgoKCnVfbG9uZyBrZXlfZGVj
b2RlKGNvbnN0IGNoYXIgKmtleSk7CgpjbGFzcyBDZmdWaXNpb25LZXkgewpwdWJsaWM6CiAgICBj
aGFyCWNyeXB0ZWRbNDAgXTsKICAgIGNoYXIJZGF0ZVsyMCBdOwogICAgY2hhcglhbGdvX2tleVs0
MCBdOwp9OwoKY2xhc3MgQ2ZnQmFyY29kZSB7CnB1YmxpYzoKICAgIGludAkJbGVuZ3RoOwogICAg
aW50CQlzaWc7CiAgICBpbnQJCWJsaW5rcmF0ZTsKICAgIGludAkJcmVtaW5kZXI7CgogICAgY2hh
cglmaWxlbmFtZVsxMjggXTsKCiAgICBCb29sZWFuCW1hdGNoX2RhdGFiYXNlOwogICAgQm9vbGVh
bglpbl91c2U7CiAgICBCb29sZWFuCWRpc3BsYXk7CiAgICBCb29sZWFuCWZpbGxlcjsKfTsKCmNs
YXNzIENmZ0JhcmNvZGUyIHsKcHVibGljOgogICAgQm9vbGVhbgloYXNfZHVhbF9yZWFkZXJzOwog
ICAgQm9vbGVhbgljYW5fcXVldWU7CgogICAgc2hvcnQJc2tpcF9zdGFydDsKICAgIHNob3J0CXNr
aXBfZW5kOwp9OwoKY2xhc3MgQ2ZnTWF0IHsKcHVibGljOgogICAgaW50CQltYXhfZmFpbHVyZXM7
CSAKCiAgICBCb29sZWFuCWRhdGV0aW1lOwogICAgQm9vbGVhbglzaW1wbGltYXRpYzsKICAgIEJv
b2xlYW4JYWRqdXN0X3JhaWxzOwogICAgQm9vbGVhbglzbWVtYV9tb2RlOwoKICAgIEJvb2xlYW4J
bm9fZmlyc3RfYm9hcmQ7CiAgICBCb29sZWFuCXJldmlld19vdmVybGltaXQ7CiAgICBjaGFyCXBy
aW50ZXJbMTI4IF07CiAgICBCb29sZWFuCWZpbGxlcjE7CiAgICBCb29sZWFuCWZpbGxlcjI7Cn07
CgogCgoKCmNsYXNzIENmZ01hdDIgewpwdWJsaWM6CiAgICBCb29sZWFuCWFkZF9saW5lX3ByZWZp
eDsKICAgIGNoYXIJdXNlcl9saW5lX3ByZWZpeFsxNl07CiAgICBCb29sZWFuCWZpbGxlcjE7CiAg
ICBCb29sZWFuCWZpbGxlcjI7CiAgICBCb29sZWFuCWZpbGxlcjM7Cn07CgogCgoKY29uc3QgdV9p
bnQga01pbkNhbVdpZHRoID0gNTEyOwoKY2xhc3MgQ2ZnQ2FtZXJhIHsKcHVibGljOgogICAgQm9v
bGVhbglzaW5nbGVzcGVlZDsKICAgIEJvb2xlYW4JZmlsbGVyMTsKICAgIEJvb2xlYW4JZmlsbGVy
MjsKICAgIEJvb2xlYW4JZmlsbGVyMzsKCiAgICBpbnQJCW51bTsKICAgIHVfaW50CXdpZHRoOwog
ICAgdV9pbnQJb3ZlcmxhcDsKICAgIHVfaW50CW9yaWVudGF0aW9uOwogICAgdV9pbnQJaG9yaXpv
bnRhbF9mb3Y7CiAgICB1X2ludAlodl9yYXRpbzsKfTsKCmNsYXNzIENmZ0NhbWVyYTIgewpwdWJs
aWM6CiAgICBCb29sZWFuCXZhcmlhYmxlX2xpZ2h0aW5nOwogICAgQm9vbGVhbglpc19wYW5hc29u
aWM7Cn07CgpjbGFzcyBDZmdDYW1lcmEzIHsKcHVibGljOgogICAgQm9vbGVhbglyZXRha2VfYmFk
c25hcHM7CiAgICBCb29sZWFuCWZpbGxlcjE7Cn07CgpjbGFzcyBDZmdDYW1lcmE0IHsKcHVibGlj
OgogICAgbG9uZyB1bnVzZWRfZmlsbGVyOwkJIAogICAgIAoKCgoKCn07CgpjbGFzcyBDZmdDYW1l
cmE1IHsKcHVibGljOgogICAgQm9vbGVhbiBfaXNfZGlnaXRhbDsKICAgIEJvb2xlYW4gX2lzX2Nv
bG9yOwogICAgQm9vbGVhbiBmaWxsZXJbMl07CQkgCn07CgpjbGFzcyBDZmdDYW1lcmE2IHsKcHVi
bGljOgogICAgQm9vbGVhbiBfaXNfY2FtZXJhbGluazsJIAogICAgQm9vbGVhbiBmaWxsZXJbM107
CQkgCn07CgpjbGFzcyBDZmdTcGVjaWFsM0QgewpwdWJsaWM6CiAgICB1X3Nob3J0IExMVF9MVVRf
VmFsdWU7CSAKICAgIHNob3J0IHdpbl9iYXNlX2Fkal9BOwkgCgogICAgc2hvcnQgd2luX2Jhc2Vf
YWRqX0I7CSAKICAgIHNob3J0IHdpbl9iYXNlX2Fkal9DOwkgCgogICAgc2hvcnQgaGVpZ2h0X1pf
Y29ycjsJIAogICAgc2hvcnQgc3RhcnRfc3RvcF8zZDsJIAoKICAgIHNob3J0IGxlZnRfb2Zmc2V0
OwkJIAogICAgc2hvcnQgcmlnaHRfb2Zmc2V0OwkJIAoKICAgIGxvbmcgIHJlc2VydmVkWzJdOwkJ
IAp9OwoKIAoKCmNvbnN0CWludAlrU2hvd01vZGVPblNoaWZ0CT0gMDsKY29uc3QJaW50CWtTaG93
TW9kZUZha2VBbGdvU2hpZnQJPSAxOwpjb25zdAlpbnQJa1Nob3dNb2RlQ29sb3JTaGlmdAk9IDI7
CmNvbnN0CWludAlrU2hvd01vZGVCV1NoaWZ0CT0gMzsKY29uc3QJaW50CWtTaG93TW9kZUZyYW1l
U2hpZnQJPSA0OwoKY29uc3QJaW50CWtTaG93TW9kZU9uCQk9IDEgPDwga1Nob3dNb2RlT25TaGlm
dDsKY29uc3QJaW50CWtTaG93TW9kZUZha2VBbGdvCT0gMSA8PCBrU2hvd01vZGVGYWtlQWxnb1No
aWZ0Owpjb25zdAlpbnQJa1Nob3dNb2RlQ29sb3IJCT0gMSA8PCBrU2hvd01vZGVDb2xvclNoaWZ0
Owpjb25zdAlpbnQJa1Nob3dNb2RlQlcJCT0gMSA8PCBrU2hvd01vZGVCV1NoaWZ0OwoKY2xhc3Mg
Q2ZnU3lzcGFyIHsKcHVibGljOgogICAgY2hhcgljb21wZmlsZVsxMDI0IF07CSAKCiAgICBCb29s
ZWFuCWxpZ2h0ZWRfZmlkdWNpYWxzOwogICAgQm9vbGVhbglzdGFydHN0b3A7CiAgICBCb29sZWFu
CXJldmlldzsKICAgIEJvb2xlYW4JYmFkc25hcDsKCiAgICBCb29sZWFuCWNvbXBlbnNhdGlvbjsJ
CSAKICAgIEJvb2xlYW4Jc2hvd21vZGU7CiAgICBCb29sZWFuCXNob3dtb2RlX2Zha2VfYWxnbzsJ
IAogICAgQm9vbGVhbglyZWluc3BlY3Rfc25hcHM7CgogICAgc2hvcnQJc2hvd21vZGVfZnJhbWU7
CQkgCiAgICBzaG9ydAliYWRzbmFwX2ZyYW1lczsKICAgIHNob3J0CWJhZHNuYXBfaXRlbXM7CiAg
ICBzaG9ydAlyZWluc3BlY3Rfc25hcHNfbnNuYXBzOwoKICAgIGludAkJcGFya3Bvc194OwogICAg
aW50CQlwYXJrcG9zX3k7Cn07Cgpjb25zdAlpbnQJa0Nvb3JNb2RlRWRpdAkJPSAwOwpjb25zdAlp
bnQJa0Nvb3JNb2RlSW5zcGVjdAk9IDE7CmNvbnN0CWludAlrQ29vck1vZGVJZGxlCQk9IDI7CmNv
bnN0CWludAlrQ29vck1vZGVDbGVhcgkJPSAzOwoKY29uc3QJaW50CWtNYXRNb2RlSG9sZAkJPSAw
Owpjb25zdAlpbnQJa01hdE1vZGVSZWplY3QJCT0gMTsKY29uc3QJaW50CWtNYXRNb2RlUGFzcwkJ
PSAyOwpjb25zdAlpbnQJa01hdE1vZGVTaW11bGF0ZQk9IDM7CgpjbGFzcyBDZmdNb2RlIHsKcHVi
bGljOgogICAgaW50CWNvb3JkaW5hdG9yOwogICAgaW50IG1hdGVyaWFsOwogICAgaW50IGF1dG9o
b21lOwkJCSAKCiAgICBCb29sZWFuIGJvdHRvbXNpZGU7CiAgICBCb29sZWFuCWZpbGxlcjE7CiAg
ICBCb29sZWFuCWZpbGxlcjI7CiAgICBCb29sZWFuCWZpbGxlcjM7Cn07CgpjbGFzcyBDZmdTcGNn
ZW4gewpwdWJsaWM6CiAgICBCb29sZWFuCWFwcGVuZDsJCQkgCiAgICBCb29sZWFuCWZsYXZvcl9h
c19kaXI7CQkgCiAgICBCb29sZWFuCWFwcGVuZF9mbGF2b3I7CQkgCiAgICBCb29sZWFuCXN0YW5k
YXJkOwkJIAoKICAgIEJvb2xlYW4JcmVwb3J0X2luX2ZpbGU7CQkgCiAgICBCb29sZWFuCXJlcG9y
dF9vbl93aW47CQkgCiAgICBCb29sZWFuCXJlcG9ydF9vbl9wcmludGVyOwkgCiAgICBCb29sZWFu
CXNhdmVfcmVwb3J0X29uX2Vycm9yOwkgCgogICAgQm9vbGVhbgloYWx0X29uX2Vycm9yOwogICAg
Qm9vbGVhbglhbGxvd19yZXZpZXdfcGFzczsKICAgIEJvb2xlYW4JcmVwb3J0X292ZXJyaWRlczsK
ICAgIEJvb2xlYW4Jc3RvY2tfbnVtYmVyOwoKICAgIEJvb2xlYW4JcHJpbnRfcGluczsKICAgIEJv
b2xlYW4Jc3VtbWFyaXplX2l0ZW1zOwogICAgQm9vbGVhbglydW5fc2NyaXB0OwogICAgY2hhcglz
Y3JpcHRfZmlsZW5hbWVbMTI4XTsKCgogICAgIAoKCiAgICBCb29sZWFuCXNob3dfcGxvdDsKCiAg
ICBCb29sZWFuCWlnc19sZXZlbDI7CiAgICBCb29sZWFuCWlnc19sZXZlbDE7CiAgICBCb29sZWFu
CWlnc19ncm91cHM7CiAgICBCb29sZWFuCWlnc19pdGVtczsKCiAgICBpbnQJCXBpbl9saW1pdDsK
ICAgIGludAkJcGFydF9saW1pdDsKfTsKCmNsYXNzIENmZ1NwY2dlbjIgewpwdWJsaWM6CiAgICBC
b29sZWFuCXNob3dfcmV2aWV3X3Bhc3M7CiAgICBCb29sZWFuCW5vX3N1bW1hcnk7Cn07CgpjbGFz
cyBDZmdTcGNnZW4zIHsKcHVibGljOgogICAgQm9vbGVhbglydW5fZGVmZWN0Owp9OwoKY2xhc3Mg
Q2ZnU3BjZ2VuNCB7CnB1YmxpYzoKICAgIEJvb2xlYW4gCXJ1bl9yZXBhaXJfc2NyaXB0OwogICAg
Y2hhciAJcmVwYWlyX3NjcmlwdF9uYW1lWzEyOF07CiAgICBCb29sZWFuCWZpbGxlcjE7Cn07Cgpj
bGFzcyBDZmdTcGNnZW41IHsKcHVibGljOgogICAgQm9vbGVhbglhdXRvX3NhdmVfc3RhdGlzdGlj
czsKICAgIEJvb2xlYW4JbWV0cmljX3VuaXRzOyAgCgogICAgc2hvcnQJYXV0b19zYXZlX2hvdXJz
OwogICAgc2hvcnQJYXV0b19zYXZlX21pbnV0ZXM7Cn07CgogCgoKY29uc3QgbG9uZyBrTWluQ2Ft
RkJzaXplID0gNEwgKiAxMDI0TCAqIDEwMjRMOwoKY2xhc3MgQ2ZnSW1hZ2VNZW1vcnkgewpwdWJs
aWM6CiAgICBsb25nCXNpemU7Cn07CgpjbGFzcyBDZmdTdGFnZTMgewpwdWJsaWM6CiAgICBCb29s
ZWFuCWR1bW15X3N0YWdlOwp9OwoKY2xhc3MgQ2ZnU3RhZ2U0IHsKcHVibGljOgogICAgZV9maWR1
X2xvY2F0aW9uICAgX2ZpZHVfbG9jYXRpb247CgogICAgQm9vbGVhbglfaGFzXzNzdGFnZV9jb252
ZXlvcjsJIAogICAgQm9vbGVhbglfdXNpbmdfZXh0ZXJuYWxfcmV2aWV3OwkgCiAgICBCb29sZWFu
CUNmZ1N0YWdlNF9maWxsZXIxOwkgCiAgICBCb29sZWFuCUNmZ1N0YWdlNF9maWxsZXIyOwkgCn07
CgpjbGFzcyBDZmdTeXNwYXIyIHsKcHVibGljOgogICAgbG9uZwlob21lX3NvZnRfbGltaXQ7CQp9
OwoKY2xhc3MgQ2ZnTGFzZXIgewpwdWJsaWM6CiAgICBCb29sZWFuCWhhc19sYXNlcjsKICAgIEJv
b2xlYW4JZmlsbGVyMTsKICAgIEJvb2xlYW4JZmlsbGVyMjsKICAgIEJvb2xlYW4JZmlsbGVyMzsK
CiAgICBmbG9hdAloZWlnaHQ7CiAgICBmbG9hdAl4X2hvbWU7CiAgICBmbG9hdAl5X2hvbWU7CiAg
ICBpbnQJCXhfbW90b3JfaG9tZTsKICAgIGludAkJeV9tb3Rvcl9ob21lOwp9OwoKY2xhc3MgQ2Zn
TGFzZXIyIHsKcHVibGljOgogICAgaW50CQlpbml0aWFsX3ZlbG9jaXR5OwogICAgaW50CQlmaW5h
bF92ZWxvY2l0eTsKICAgIGludAkJYWNjZWxlcmF0aW9uOwp9OwoKY2xhc3MgQ2ZnU3lzdGVtIHsK
cHVibGljOgogICAgQm9vbGVhbglpc19zb2xhcmlzOwogICAgQm9vbGVhbgloYXNfc2J1czsKICAg
IEJvb2xlYW4JaXNfcnRwOwogICAgQm9vbGVhbgloYXNfMzJiaXRfZGlvOwogICAgaW50CQltb3Rv
cl9kcml2ZXI7CSAKfTsKCmNsYXNzIEluc3BlY3Rpb25PcHRpb25zIHsKcHVibGljOgogICAgQm9v
bGVhbglzYXZlX2FsbF9mYXVsdHM7Cn07CgpjbGFzcyBJbnNwZWN0aW9uT3B0aW9uczIgewpwdWJs
aWM6CiAgICBzaG9ydAludW1fcmVzZXJ2ZWRfZnJhbWVzOwp9OwoKdHlwZWRlZiBlbnVtICB7IGtS
aUhhcmR3YXJlLCBrUmlPbiwga1JpT2ZmIH0gZVJlYWRvdXRJbmhpYml0T3B0aW9uczsKCmNsYXNz
IEluc3BlY3Rpb25PcHRpb25zMyB7CnB1YmxpYzoKICAgIHNob3J0ICByaV9vcHRpb25zOwogICAg
c2hvcnQgIGZpbGxlcjsKfTsKCmNsYXNzIENmZ1JhbWRhYyB7CnB1YmxpYzoKICAgIGludAkJaGk7
CiAgICBpbnQJCWxvdzsKfTsKCmNsYXNzIENmZ0xpbmVhciB7CnB1YmxpYzoKICAgIGludAkJZW5j
b2Rlcl9yZXNvbHV0aW9uOwogICAgaW50CQlpX3BpdGNoRDsJIAogICAgaW50CQlpX2ZlZWRiYWNr
OwkgCiAgICBpbnQJCWlfY250cmV2OwkgCiAgICBpbnQJCWZpZHVfYWNjZWw7CiAgICBpbnQJCWZp
ZHVfdmVsOwp9OwoKY2xhc3MgQ2ZnQXV0b05ldHdvcmtlciB7CnB1YmxpYzoKICAgIGNoYXIJaG9z
dG5hbWVbMTI4XTsKICAgIGNoYXIJdXNlcm5hbWVbNjRdOwogICAgY2hhcglwYXNzd29yZFs2NF07
CiAgICBjaGFyCWRhdGFiYXNlbmFtZVs2NF07Cn07Cgp0eXBlZGVmIGVudW0geyBrTm9EYXRhYmFz
ZSwga09yYWNsZSwga015U3FsIH0gZURhdGFiYXNlVHlwZXM7CgpjbGFzcyBDZmdEYXRhYmFzZVR5
cGUgewpwdWJsaWM6CiAgICBsb25nCWRiX3R5cGU7Cn07CgpjbGFzcyBDZmdTcGNnZW5VREMgewpw
dWJsaWM6CiAgICBCb29sZWFuCWVuYWJsZV91ZGM7CiAgICBCb29sZWFuCXVzZV91ZGNfdGFibGU7
CiAgICBCb29sZWFuCWp1bmtbMl07Cn07Cgpjb25zdCBpbnQga0lmaWNzTWF4VHNuYW1lID0gMjA7
CmNvbnN0IGludCBrSWZpY3NNYXhNQUNISU5FID0gNjsKY29uc3QgaW50IGtRc3RhdHNNYXhIb3N0
bmFtZSA9IDI1NjsKY29uc3QgaW50IGtRc3RhdHNNYXhQcm9jZXNzU3RlcCA9IDgwOwpjb25zdCBp
bnQga0ZDX01heE9waWQgPSA0Owpjb25zdCBpbnQga0ZDX01heFVpZCA9IDEwOwpjb25zdCBpbnQg
a0ZDX01heFNoaWZ0ID0gMTsKCnR5cGVkZWYgZW51bSB7IGtTZXR0aW5nT2ssIGtCYWRMZW5ndGgs
IGtCYWRDaGFyYWN0ZXIgfSBlU3RyaW5nRXJyb3JzIDsKCmNsYXNzIENmZ0ZhY3RvcnlDb250cm9s
IHsKcHVibGljOgogICAgQm9vbGVhbglpZmljc19vbjsKICAgIEJvb2xlYW4gCWVuZ19kYl9vbjsK
ICAgIEJvb2xlYW4gCXVzZXJfcHJvbXB0X29uOwogICAgQm9vbGVhbiAJZmlsbGVyMTsKCiAgICBj
aGFyIAlpZmljc19UU05hbWVbNjRdOwogICAgY2hhciAJaWZpY3NfTWFjaGluZVs2NF07CgogICAg
Y2hhciAJZW5nX2RiX2hvc3RuYW1lWzI1Nl07CiAgICBjaGFyCWVuZ19kYl9Qcm9jZXNzU3RlcFsx
MDBdOwoKICAgIGNoYXIgCU9waWRbMTAwXTsKICAgIGNoYXIJVWlkWzEwMF07CiAgICBjaGFyIAlT
aGlmdFsxMDBdOwoKICAgIGxvbmcJaWZpY3NfcG9ydDsKICAgIGxvbmcJaWZpY3NfdGltZW91dDsK
fTsKCmNsYXNzIENmZ0hlaWdodE9mZnNldCB7CnB1YmxpYzoKICAgIGZsb2F0CW9mZnNldDsKfTsK
CmNsYXNzIGNvbmZpZ3VyYXRpb24gewpwcml2YXRlOgogICAgQ2ZnVmlzaW9uS2V5IHZpc2lvbmtl
eTsJCSAKICAgICAKCgogICAgQ2ZnTWF0CW1hdDsKICAgIENmZ0JhcmNvZGUJYmFyY29kZTsKICAg
IENmZ1NwY2dlbglzcGNnZW47CiAgICBDZmdNb2RlCW1vZGU7CiAgICBDZmdDYW1lcmEJY2FtZXJh
OwogICAgQ2ZnU3lzcGFyCXN5c3BhcjsKICAgIGludAkJYXhpczsJCQkgCiAgICBJbmRleGVyCXN0
YWdlW2tNYXhTdGFnZXNdOwkgCiAgICBJbmRleGVyCSpjdXJfc3RhZ2U7CQkgCiAgICBaZXRhCW1v
dG9yc1trTWF4U3RhZ2VzXTsJIAogICAgWmV0YQkqY3VyX3pldGE7CQkgCiAgICBCb29sZWFuCWNo
YW5nZWQ7CiAgICAgCgoKICAgIEluc3BlY3Rpb25PcHRpb25zCWluc3Bfb3B0aW9uczsJIAogICAg
Q2ZnU3BjZ2VuMglzcGNnZW4yOwogICAgQ2ZnQ2FtZXJhMgljYW1lcmEyOwogICAgQ2ZnU3RhZ2Uy
CWR1bW15X3N0YWdlOwkJIAogICAgIAoKCiAgICBDZmdCYXJjb2RlMiBiYXJjb2RlMjsKICAgIENm
Z0NhbWVyYTMJY2FtZXJhMzsKICAgICAKCgogICAgQ2ZnU3RhZ2UyCXN0YWdlMltrTWF4U3RhZ2Vz
XTsJIAogICAgc2hvcnQJZmlsbGVyOwkJCSAKICAgIENmZ1N0YWdlMgkqY3VyX3N0YWdlMjsJCSAK
ICAgIENmZ1NwY2dlbjMJc3BjZ2VuMzsKICAgIENmZ1N0YWdlMyAJc3RhZ2UzOwkJCSAKICAgIENm
Z1NwY2dlbjQgIHNwY2dlbjQ7CQkgCiAgICBDZmdMYXNlcglsYXNlcjsJCQkgCiAgICBJbnNwZWN0
aW9uT3B0aW9uczIJaW5zcF9vcHRpb25zMjsJIAogICAgQ2ZnU3BjZ2VuNQlzcGNnZW41OwkJIAog
ICAgIAoKCiAgICBDZmdTeXN0ZW0Jc3lzdGVtOwogICAgIAoKCiAgICBDZmdSYW1kYWMJcmFtZGFj
X2RhdGFba052Y3B1XTsKICAgIENmZ0xpbmVhcglsaW5lYXJba01heFN0YWdlc107CiAgICBDZmdM
aW5lYXIJKmN1cl9saW5lYXI7CiAgICAgCgoKICAgIENmZ0NhbWVyYTQgCWNhbWVyYTQ7CiAgICAg
CgoKICAgIENmZ01hdDIJCW1hdDI7CiAgICBDZmdJbWFnZU1lbW9yeQlpbWFnZW1lbW9yeTsKICAg
IEluc3BlY3Rpb25PcHRpb25zMyAgaW5zcF9vcHRpb25zMzsKICAgIENmZ0xhc2VyMgkJbGFzZXIy
OwkJIAogICAgQ2ZnU3RhZ2U0CQlzdGFnZTQ7CiAgICBDZmdDYW1lcmE1CQljYW1lcmE1OwogICAg
IAoKCiAgICBDZmdTcGVjaWFsM0QJc3BlY2lhbDNkOwogICAgQ2ZnQXV0b05ldHdvcmtlcglhdXRv
X25ldHdvcmtlcjsKICAgICAKCgogICAgQ2ZnU3lzcGFyMgkJc3lzcGFyMjsKICAgICAKCgogICAg
Q2ZnRGF0YWJhc2VUeXBlCWRhdGFiYXNlX3R5cGU7CiAgICAgCgoKICAgIENmZ0ZhY3RvcnlDb250
cm9sCWZhY3RvcnlfY29udHJvbDsKICAgIENmZ1NwY2dlblVEQwl1ZGM7ICAKICAgICAKCgogICAg
Q2ZnSGVpZ2h0T2Zmc2V0CWhlaWdodFsyXTsJIAogICAgIAoKCiAgICBDZmdDYW1lcmE2CQljYW1l
cmE2OwogICAgIAoKCgogICAgc3RhdGljIGNvbmZpZ3VyYXRpb24gKglfc2VsZjsJIAogICAgIAoK
ICAgICAKCgoKCgogICAgdm9pZCByZXNvdXJjZXMoQm9vbGVhbiByZWFkLCBjb25zdCB2b2lkICpw
YXJlbnQpOwoKcHVibGljOgogICAgY29uZmlndXJhdGlvbihib29sIGlzX2dsb2JhbCk7CiAgICBz
dGF0aWMgY29uZmlndXJhdGlvbiAqIGdldCgpOwoKICAgIHZvaWQJdXBkYXRlKCk7CiAgICB2b2lk
CXNlbmRfdXBkYXRlcygpOwogICAgaW50CQlmaW5kX2JhZF9kYXRhKCk7CiAgICBpbnQJCWZpbmRf
YmFkXzNEX2RhdGEoKTsKICAgIGludAkJZmluZF9iYWRfY2FtZXJhX2RhdGEoKTsKICAgIGludAkJ
ZmluZF9iYWRfbGFzZXJfZGF0YSgpOwogICAgaW50CQlmaW5kX2JhZF9zcGNfZGF0YSgpOwogICAg
Y29uc3QgY2hhciAqZ2V0X2JhZF9kYXRhX21lc3NhZ2UoaW50KSBjb25zdDsKCiAgICBib29sCXdy
aXRlKCk7CiAgICB2b2lkCXdyaXRlX3Jlc291cmNlcygpOwogICAgQm9vbGVhbglrZXlfY2hlY2so
aW50KTsKICAgICAKCgoKICAgIHZvaWQJcmVhZF9yZXNvdXJjZXMoY29uc3Qgdm9pZCAqcGFyZW50
KTsKICAgIEJvb2xlYW4JY2ZnX2NoYW5nZWQoKSBjb25zdDsKICAgIHZvaWQJY2ZnX2NoYW5nZWQo
Qm9vbGVhbik7CgogICAgIAoKCiAgICB2b2lkCXZpc2lvbmtleV9jcnlwdGVkKGNoYXIgKik7CiAg
ICB2b2lkCXZpc2lvbmtleV9kYXRlKGNoYXIgKik7CiAgICB2b2lkCXZpc2lvbmtleV9rZXkoY2hh
ciAqKTsKCiAgICB2b2lkCWdldF92aXNpb25rZXlfZGF0YShzdGQ6OnN0cmluZyYgY3J5cHQsIHN0
ZDo6c3RyaW5nJiBkYXRlLCBzdGQ6OnN0cmluZyYga2V5KTsKCiAgICB2b2lkCXNldF92aXNpb25r
ZXlfZGF0YShjaGFyICpjcnlwdCwgY2hhciAqZGF0ZSwgY2hhciAqa2V5KTsKICAgIHVfbG9uZwl2
YWxpZF92aXNpb25rZXkoKTsKCiAgICAgCgoKICAgIEJvb2xlYW4JYmFyY29kZXMoKSBjb25zdDsK
ICAgIEJvb2xlYW4JYmFyY29kZV9kaXNwbGF5KCkgY29uc3Q7CiAgICBpbnQJCWJhcmNvZGVfcmVt
aW5kZXIoKSBjb25zdDsKICAgIGludAkJYmFyY29kZV9sZW5ndGgodm9pZCkgY29uc3Q7CiAgICBp
bnQJCWJhcmNvZGVfc2lnX2xlbmd0aCh2b2lkKSBjb25zdDsKICAgIGNvbnN0IGNoYXIqCWJhcmNv
ZGVfZmlsZW5hbWUodm9pZCkgY29uc3Q7CiAgICBCb29sZWFuCWJhcmNvZGVfbWF0Y2hfZGF0YWJh
c2UoKSBjb25zdDsKICAgIGludAkJYmFyY29kZV9ibGlua3JhdGUoKTsKICAgIEJvb2xlYW4JYmFy
Y29kZV9oYXNfZHVhbF9yZWFkZXJzKCkgY29uc3Q7CiAgICBzaG9ydAliYXJjb2RlX3NraXBfc3Rh
cnQoKSBjb25zdDsKICAgIHNob3J0CWJhcmNvZGVfc2tpcF9lbmQoKSBjb25zdDsKICAgIEJvb2xl
YW4JYmFyY29kZV9jYW5fcXVldWUoKSBjb25zdDsKCiAgICB2b2lkCWJhcmNvZGVzKEJvb2xlYW4p
OwogICAgdm9pZAliYXJjb2RlX2Rpc3BsYXkoQm9vbGVhbik7CiAgICB2b2lkCWJhcmNvZGVfbGVu
Z3RoKGludCk7CiAgICB2b2lkCWJhcmNvZGVfc2lnX2xlbmd0aChpbnQpOwogICAgdm9pZAliYXJj
b2RlX2JsaW5rcmF0ZShpbnQpOwogICAgdm9pZAliYXJjb2RlX3JlbWluZGVyKGludCk7CiAgICB2
b2lkCWJhcmNvZGVfZmlsZW5hbWUoY29uc3QgY2hhciAqKTsKICAgIHZvaWQJYmFyY29kZV9tYXRj
aF9kYXRhYmFzZShCb29sZWFuKTsKICAgIHZvaWQJYmFyY29kZV9oYXNfZHVhbF9yZWFkZXJzKEJv
b2xlYW4pOwogICAgdm9pZAliYXJjb2RlX3NraXBfc3RhcnQoc2hvcnQpOwogICAgdm9pZAliYXJj
b2RlX3NraXBfZW5kKHNob3J0KTsKICAgIHZvaWQJYmFyY29kZV9jYW5fcXVldWUoQm9vbGVhbik7
CgogICAgIAoKCiAgICBpbnQJCW1hdF9tYXhfZmFpbHVyZXMoKSBjb25zdDsKICAgIEJvb2xlYW4J
bWF0X2RhdGV0aW1lKCkgY29uc3Q7CiAgICBCb29sZWFuCW1hdF9zaW1wbGltYXRpYygpIGNvbnN0
OwogICAgQm9vbGVhbgltYXRfYWRqdXN0X3JhaWxzKCkgY29uc3Q7CiAgICBjb25zdCBjaGFyKglt
YXRfcHJpbnRlcigpIGNvbnN0OwogICAgQm9vbGVhbgltYXRfcmV2aWV3X292ZXJsaW1pdCgpIGNv
bnN0OwogICAgQm9vbGVhbgltYXRfc21lbWFfbW9kZSgpIGNvbnN0OwogICAgQm9vbGVhbgltYXRf
bm9fZmlyc3RfYm9hcmQoKSBjb25zdDsKICAgIEJvb2xlYW4JbWF0X2FkZF9saW5lX3ByZWZpeCgp
IGNvbnN0OwogICAgY29uc3QgY2hhciogbWF0X3VzZXJfcHJlZml4KCkgY29uc3Q7CgogICAgdm9p
ZAltYXRfZGF0ZXRpbWUoQm9vbGVhbik7CiAgICB2b2lkCW1hdF9zaW1wbGltYXRpYyhCb29sZWFu
KTsKICAgIHZvaWQJbWF0X2FkanVzdF9yYWlscyhCb29sZWFuKTsKICAgIHZvaWQJbWF0X3ByaW50
ZXIoY29uc3QgY2hhciAqKTsKICAgIHZvaWQJbWF0X21heF9mYWlsdXJlcyhpbnQpOwogICAgdm9p
ZAltYXRfcmV2aWV3X292ZXJsaW1pdChCb29sZWFuKTsKICAgIHZvaWQJbWF0X3NtZW1hX21vZGUo
Qm9vbGVhbik7CiAgICB2b2lkCW1hdF9ub19maXJzdF9ib2FyZChCb29sZWFuKTsKICAgIHZvaWQJ
bWF0X2FkZF9saW5lX3ByZWZpeChCb29sZWFuKTsKICAgIHZvaWQJbWF0X3VzZXJfcHJlZml4KGNv
bnN0IGNoYXIgKnZhbHVlKTsKCiAgICAgCgoKICAgIEJvb2xlYW4Jc3BjX2ZsYXZvcl9hc19kaXIo
KSBjb25zdDsKICAgIEJvb2xlYW4Jc3BjX2FwcGVuZCgpIGNvbnN0OwogICAgQm9vbGVhbglzcGNf
YXBwZW5kX2ZsYXZvcigpIGNvbnN0OwogICAgQm9vbGVhbglzcGNfbm9ybWFsKCkgY29uc3Q7Cgog
ICAgIAoKCiAgICBCb29sZWFuCXNwY190b19wcmludGVyKCkgY29uc3Q7CiAgICBCb29sZWFuCXNw
Y190b19jb25zb2xlKCkgY29uc3Q7CiAgICBCb29sZWFuCXNwY190b19maWxlKCkgY29uc3Q7CiAg
ICBCb29sZWFuCXNwY19zYXZlX3JlcG9ydF9vbl9lcnJvcigpIGNvbnN0OwoKICAgICAKCgogICAg
Qm9vbGVhbglzcGNfc3RvcF9vbl9mYWlsdXJlKCk7CgogICAgIAoKCiAgICBpbnQJCXNwY19waW5f
bGltaXQoKSBjb25zdDsKICAgIGludAkJc3BjX3BhcnRfbGltaXQoKSBjb25zdDsKCiAgICAgCgoK
ICAgIEJvb2xlYW4Jc3BjX2lnc19sZXZlbDIoKSBjb25zdDsKICAgIEJvb2xlYW4Jc3BjX2lnc19s
ZXZlbDEoKSBjb25zdDsKICAgIEJvb2xlYW4Jc3BjX2lnc19ncm91cHMoKSBjb25zdDsKICAgIEJv
b2xlYW4Jc3BjX2lnc19pdGVtcygpIGNvbnN0OwogICAgY29uc3QgY2hhcioJc3BjX3NjcmlwdF9m
aWxlbmFtZSgpIGNvbnN0OwogICAgQm9vbGVhbglzcGNfcGxvdF9vdXRwdXQoKSBjb25zdDsKICAg
IEJvb2xlYW4Jc3BjX3J1bl9kZWZlY3QoKSBjb25zdDsKICAgIEJvb2xlYW4Jc3BjX3J1bl9zY3Jp
cHQoKSBjb25zdDsKICAgIEJvb2xlYW4Jc3BjX3J1bl9yZXBhaXJfc2NyaXB0KCkgY29uc3Q7CiAg
ICBjb25zdCBjaGFyKglzcGNfcmVwYWlyX3NjcmlwdF9uYW1lKCkgY29uc3Q7CgogICAgIAoKCiAg
ICBCb29sZWFuCXNwY19hbGxvd19yZXZpZXdfdG9fcGFzcygpIGNvbnN0OwogICAgQm9vbGVhbglz
cGNfcmVwb3J0X292ZXJyaWRlcygpIGNvbnN0OwogICAgQm9vbGVhbglzcGNfc2ltcGxlX3JlcG9y
dCgpIGNvbnN0OwogICAgQm9vbGVhbglzcGNfc3RvY2tfbnVtYmVyKCkgY29uc3Q7CiAgICBCb29s
ZWFuCXNwY19wcmludF9waW5zKCkgY29uc3Q7CiAgICBCb29sZWFuCXNwY19zdW1tYXJpemVfaXRl
bXMoKSBjb25zdDsKICAgIEJvb2xlYW4Jc3BjX3Nob3dfcmV2aWV3X3Bhc3MoKSBjb25zdDsKICAg
IEJvb2xlYW4Jc3BjX25vX3N1bW1hcnkoKSBjb25zdDsKICAgIEJvb2xlYW4Jc3BjX21ldHJpY191
bml0cygpIGNvbnN0OwoKICAgICAKCgogICAgQm9vbGVhbglzcGNfYXV0b19zYXZlX3N0YXRpc3Rp
Y3MoKSBjb25zdDsKICAgIHNob3J0CXNwY19hdXRvX3NhdmVfaG91cnMoKSBjb25zdDsKICAgIHNo
b3J0CXNwY19hdXRvX3NhdmVfbWludXRlcygpIGNvbnN0OwoKICAgICAKCgogICAgdm9pZAlzcGNf
Zmxhdm9yX2FzX2RpcihCb29sZWFuKTsKICAgIHZvaWQJc3BjX2FwcGVuZChCb29sZWFuKTsKICAg
IHZvaWQJc3BjX2FwcGVuZF9mbGF2b3IoQm9vbGVhbik7CiAgICB2b2lkCXNwY19ub3JtYWwoQm9v
bGVhbik7CiAgICB2b2lkCXNwY190b19wcmludGVyKEJvb2xlYW4pOwogICAgdm9pZAlzcGNfdG9f
Y29uc29sZShCb29sZWFuKTsKICAgIHZvaWQJc3BjX3RvX2ZpbGUoQm9vbGVhbik7CiAgICB2b2lk
CXNwY19zYXZlX3JlcG9ydF9vbl9lcnJvcihCb29sZWFuKTsKICAgIHZvaWQJc3BjX3N0b3Bfb25f
ZmFpbHVyZShCb29sZWFuKTsKICAgIHZvaWQJc3BjX3Bpbl9saW1pdChpbnQpOwogICAgdm9pZAlz
cGNfcGFydF9saW1pdChpbnQpOwogICAgdm9pZAlzcGNfc2ltcGxlX3JlcG9ydChCb29sZWFuKTsK
ICAgIHZvaWQJc3BjX3JlcG9ydF9vdmVycmlkZXMoQm9vbGVhbik7CiAgICB2b2lkCXNwY19hbGxv
d19yZXZpZXdfcGFzcyhCb29sZWFuKTsKICAgIHZvaWQJc3BjX3Nob3dfcmV2aWV3X3Bhc3MoQm9v
bGVhbik7CiAgICB2b2lkCXNwY19zdG9ja19udW1iZXIoQm9vbGVhbik7CiAgICB2b2lkCXNwY19w
cmludF9waW5zKEJvb2xlYW4pOwogICAgdm9pZAlzcGNfc3VtbWFyaXplX2l0ZW1zKEJvb2xlYW4p
OwogICAgdm9pZAlzcGNfaWdzX2xldmVsMihCb29sZWFuKTsKICAgIHZvaWQJc3BjX2lnc19sZXZl
bDEoQm9vbGVhbik7CiAgICB2b2lkCXNwY19pZ3NfZ3JvdXBzKEJvb2xlYW4pOwogICAgdm9pZAlz
cGNfaWdzX2l0ZW1zKEJvb2xlYW4pOwogICAgdm9pZAlzcGNfcGxvdF9vdXRwdXQoQm9vbGVhbik7
CiAgICB2b2lkCXNwY19ydW5fZGVmZWN0KEJvb2xlYW4pOwogICAgdm9pZAlzcGNfcnVuX3Njcmlw
dChCb29sZWFuKTsKICAgIHZvaWQJc3BjX3NjcmlwdF9maWxlbmFtZShjb25zdCBjaGFyICopOwog
ICAgdm9pZAlzcGNfbm9fc3VtbWFyeShCb29sZWFuKTsKICAgIHZvaWQJc3BjX3J1bl9yZXBhaXJf
c2NyaXB0KEJvb2xlYW4pOwogICAgdm9pZAlzcGNfcmVwYWlyX3NjcmlwdF9uYW1lKGNvbnN0IGNo
YXIgKik7CiAgICB2b2lkCXNwY19hdXRvX3NhdmVfc3RhdGlzdGljcyhCb29sZWFuKTsKICAgIHZv
aWQJc3BjX2F1dG9fc2F2ZV9ob3VycyhzaG9ydCk7CiAgICB2b2lkCXNwY19hdXRvX3NhdmVfbWlu
dXRlcyhzaG9ydCk7CiAgICB2b2lkCXNwY19tZXRyaWNfdW5pdHMoQm9vbGVhbik7CgogICAgIAoK
CiAgICBpbnQJCW1vZGVfY29vcmRpbmF0b3IoKSBjb25zdDsKICAgIGludAkJbW9kZV9tYXRlcmlh
bCgpIGNvbnN0OwogICAgQm9vbGVhbgltb2RlX2JvdHRvbXNpZGUoKSBjb25zdDsKICAgIGludAkJ
bW9kZV9hdXRvaG9tZSgpIGNvbnN0OwoKICAgIHZvaWQJbW9kZV9jb29yZGluYXRvcihpbnQpOwog
ICAgdm9pZAltb2RlX21hdGVyaWFsKGludCk7CiAgICB2b2lkCW1vZGVfYm90dG9tc2lkZShCb29s
ZWFuKTsKICAgIHZvaWQJbW9kZV9hdXRvaG9tZShpbnQpOwoKICAgICAKCgogICAgaW50CQljYW1l
cmFfbnVtKCkgY29uc3Q7CiAgICBCb29sZWFuCWNhbWVyYV92YXJpYWJsZV9saWdodGluZygpIGNv
bnN0OwogICAgQm9vbGVhbgljYW1lcmFfaXNfcGFuYXNvbmljKCkgY29uc3Q7CiAgICBCb29sZWFu
CWNhbWVyYV9zaW5nbGVzcGVlZCgpIGNvbnN0OwogICAgaW50CQljYW1lcmFfb3JpZW50YXRpb24o
KSBjb25zdDsKICAgIHVfaW50CWNhbWVyYV93aWR0aCgpIGNvbnN0OwogICAgdV9pbnQJY2FtZXJh
X2hvcml6b250YWxfZm92KCkgY29uc3Q7CiAgICB1X2ludAljYW1lcmFfb3ZlcmxhcCgpIGNvbnN0
OwogICAgdV9pbnQJY2FtZXJhX2h2X3JhdGlvKCkgY29uc3Q7CiAgICBCb29sZWFuCWNhbWVyYV9y
ZXRha2VfYmFkc25hcHMoKSBjb25zdDsKICAgIEJvb2xlYW4JY2FtZXJhX2lzX2RpZ2l0YWwoKSBj
b25zdDsKICAgIEJvb2xlYW4JY2FtZXJhX2lzX2NvbG9yKCkgY29uc3Q7CiAgICBCb29sZWFuCWNh
bWVyYV9pc19jYW1lcmFsaW5rKCkgY29uc3Q7CSAKCiAgICB2b2lkCWNhbWVyYV9zaW5nbGVzcGVl
ZChCb29sZWFuKTsKICAgIHZvaWQJY2FtZXJhX3ZhcmlhYmxlX2xpZ2h0aW5nKEJvb2xlYW4pOwog
ICAgdm9pZAljYW1lcmFfaXNfcGFuYXNvbmljKEJvb2xlYW4pOwogICAgdm9pZAljYW1lcmFfbnVt
KGludCk7CiAgICB2b2lkCWNhbWVyYV93aWR0aCh1X2ludCk7CiAgICB2b2lkCWNhbWVyYV9vdmVy
bGFwKHVfaW50KTsKICAgIHZvaWQJY2FtZXJhX29yaWVudGF0aW9uKHVfaW50KTsKICAgIHZvaWQJ
Y2FtZXJhX2hvcml6b250YWxfZm92KHVfaW50KTsKICAgIHZvaWQJY2FtZXJhX2h2X3JhdGlvKHVf
aW50KTsKICAgIHZvaWQJY2FtZXJhX3JldGFrZV9iYWRzbmFwcyhCb29sZWFuKTsKICAgIHZvaWQJ
Y2FtZXJhX2lzX2RpZ2l0YWwoQm9vbGVhbik7CiAgICB2b2lkCWNhbWVyYV9pc19jb2xvcihCb29s
ZWFuKTsKICAgIHZvaWQJY2FtZXJhX2lzX2NhbWVyYWxpbmsoQm9vbGVhbik7CSAKICAgICAKCgog
ICAgaW50CQlzeXNwYXJfcGFya3Bvc194KCkgY29uc3Q7CiAgICBpbnQJCXN5c3Bhcl9wYXJrcG9z
X3koKSBjb25zdDsKICAgIGNvbnN0IGNoYXIqIHN5c3Bhcl9jb21wZmlsZSgpIGNvbnN0OwogICAg
Qm9vbGVhbglzeXNwYXJfbGlnaHRlZF9maWR1Y2lhbHMoKSBjb25zdDsKICAgIEJvb2xlYW4Jc3lz
cGFyX3N0YXJ0c3RvcCgpIGNvbnN0OwogICAgQm9vbGVhbglzeXNwYXJfcmV2aWV3KCkgY29uc3Q7
CiAgICBCb29sZWFuCXN5c3Bhcl9iYWRzbmFwKCkgY29uc3Q7CiAgICBpbnQJCXN5c3Bhcl9iYWRz
bmFwX2ZyYW1lcygpIGNvbnN0OwogICAgaW50CQlzeXNwYXJfYmFkc25hcF9pdGVtcygpIGNvbnN0
OwogICAgQm9vbGVhbglzeXNwYXJfY29tcGVuc2F0aW9uKCkgY29uc3Q7CiAgICBCb29sZWFuCXN5
c3Bhcl9zaG93bW9kZSgpIGNvbnN0OwogICAgQm9vbGVhbglzeXNwYXJfc2hvd21vZGVfZmFrZV9h
bGdvKCkgY29uc3Q7CiAgICBpbnQJCXN5c3Bhcl9zaG93bW9kZV9mcmFtZSgpIGNvbnN0OwogICAg
bG9uZwlzeXNwYXJfaG9tZV9zb2Z0X2xpbWl0KCkgY29uc3Q7CiAgICBCb29sZWFuCXN5c3Bhcl9y
ZWluc3BlY3Rfc25hcHMoKSBjb25zdDsKICAgIGludAkJc3lzcGFyX3JlaW5zcGVjdF9zbmFwc19u
c25hcHMoKSBjb25zdDsKCiAgICB2b2lkCXN5c3Bhcl9saWdodGVkX2ZpZHVjaWFscyhCb29sZWFu
KTsKICAgIHZvaWQJc3lzcGFyX3N0YXJ0c3RvcChCb29sZWFuKTsKICAgIHZvaWQJc3lzcGFyX3Jl
dmlldyhCb29sZWFuKTsKICAgIHZvaWQJc3lzcGFyX2JhZHNuYXAoQm9vbGVhbik7CiAgICB2b2lk
CXN5c3Bhcl9wYXJrcG9zX3goaW50KTsKICAgIHZvaWQJc3lzcGFyX3Bhcmtwb3NfeShpbnQpOwog
ICAgdm9pZAlzeXNwYXJfYmFkc25hcF9mcmFtZXMoaW50KTsKICAgIHZvaWQJc3lzcGFyX2JhZHNu
YXBfaXRlbXMoaW50KTsKICAgIHZvaWQJc3lzcGFyX2NvbXBlbnNhdGlvbihCb29sZWFuKTsKICAg
IHZvaWQJc3lzcGFyX3Nob3dtb2RlKEJvb2xlYW4pOwogICAgdm9pZAlzeXNwYXJfc2hvd21vZGVf
ZmFrZV9hbGdvKEJvb2xlYW4pOwogICAgdm9pZAlzeXNwYXJfc2hvd21vZGVfZnJhbWUoaW50KTsK
ICAgIHZvaWQJc3lzcGFyX2NvbXBmaWxlKGNvbnN0IGNoYXIgKik7CiAgICB2b2lkCXN5c3Bhcl9o
b21lX3NvZnRfbGltaXQobG9uZyk7CiAgICB2b2lkCXN5c3Bhcl9yZWluc3BlY3Rfc25hcHMoQm9v
bGVhbik7CiAgICB2b2lkCXN5c3Bhcl9yZWluc3BlY3Rfc25hcHNfbnNuYXBzKGludCk7CgogICAg
IAoKCiAgICBpbnQJCXN0YWdlX2F4aXMoKSBjb25zdDsKICAgIGludAkJc3RhZ2VfYWNjZWwoKSBj
b25zdDsKICAgIGludAkJc3RhZ2VfbWF4dmVsKCkgY29uc3Q7CiAgICBpbnQJCXN0YWdlX21heHBv
cygpIGNvbnN0OwogICAgaW50CQlzdGFnZV9kZWxheSgpIGNvbnN0OwogICAgaW50CQlzdGFnZV9z
Y2FsZSgpIGNvbnN0OwogICAgaW50CQlzdGFnZV9mZWVkYmFjaygpIGNvbnN0OwogICAgaW50CQlz
dGFnZV9jb3VudHNfcmV2KCkgY29uc3Q7CiAgICBpbnQJCXN0YWdlX2Rpc3RhbmNlX3JldigpIGNv
bnN0OwogICAgdm9pZAlzdGFnZV9pbmRleGVyKEluZGV4ZXIgKikgY29uc3Q7CiAgICBpbnQJCXN0
YWdlX2ZpZHVfdmVsKCkgY29uc3Q7CiAgICBpbnQJCXN0YWdlX2ZpZHVfYWNjZWwoKSBjb25zdDsK
ICAgIGVfZmlkdV9sb2NhdGlvbiBmaWR1X2xvY2F0aW9uKCkgY29uc3Q7CiAgICBCb29sZWFuCWhh
c18zc3RhZ2VfY29udmV5b3IoKSBjb25zdDsKICAgIEJvb2xlYW4JdXNpbmdfZXh0ZXJuYWxfcmV2
aWV3KCkgY29uc3Q7CgogICAgQm9vbGVhbgloYXNfZmlsbGVyX3N0YWdlKCkgY29uc3Q7CgogICAg
dm9pZAlzdGFnZV9heGlzKGludCk7CiAgICB2b2lkCXN0YWdlX2FjY2VsKGludCk7CiAgICB2b2lk
CXN0YWdlX21heHZlbChpbnQpOwogICAgdm9pZAlzdGFnZV9tYXhwb3MoaW50KTsKICAgIHZvaWQJ
c3RhZ2VfZGVsYXkoaW50KTsKICAgIHZvaWQJc3RhZ2Vfc2NhbGUoaW50KTsKICAgIHZvaWQJc3Rh
Z2VfZmVlZGJhY2soaW50KTsKICAgIHZvaWQJc3RhZ2VfY291bnRzX3JldihpbnQpOwogICAgdm9p
ZAlzdGFnZV9kaXN0YW5jZV9yZXYoaW50KTsKICAgIHZvaWQJc3RhZ2VfZmlkdV92ZWwoaW50KTsK
ICAgIHZvaWQJc3RhZ2VfZmlkdV9hY2NlbChpbnQpOwogICAgdm9pZAlmaWR1X2xvY2F0aW9uKGVf
ZmlkdV9sb2NhdGlvbik7CiAgICB2b2lkCWhhc18zc3RhZ2VfY29udmV5b3IoQm9vbGVhbik7CiAg
ICB2b2lkCXVzaW5nX2V4dGVybmFsX3JldmlldyhCb29sZWFuKTsKCiAgICAgCgoKICAgIHZvaWQJ
ZW5jb2Rlcl9yZXNvbHV0aW9uKGludCk7CiAgICBpbnQJCWVuY29kZXJfcmVzb2x1dGlvbigpIGNv
bnN0OwoKICAgICAKCgogICAgaW50CQl6ZXRhX3dhdmVmb3JtKCkgY29uc3Q7CiAgICBpbnQJCXpl
dGFfYWN0aXZlX2RhbXBpbmcoKSBjb25zdDsKICAgIGludAkJemV0YV9lbGVjdHJvbmljX3Zpc2Nv
c2l0eSgpIGNvbnN0OwogICAgaW50CQl6ZXRhX2luZHVjdGFuY2UoKSBjb25zdDsKICAgIGludAkJ
emV0YV9zdGF0aWNfdG9ycXVlKCkgY29uc3Q7CiAgICBCb29sZWFuCXpldGFfYW50aV9yZXNvbmFu
Y2UoKSBjb25zdDsKICAgIGludAkJemV0YV9wb3NfbWFpbl9nYWluX3ZlbCgpIGNvbnN0OwogICAg
aW50CQl6ZXRhX3Bvc19tYWluX2dhaW5fZmFjdG9yKCkgY29uc3Q7CiAgICBjb25zdCBaZXRhJiB6
ZXRhX3ZhbHVlcygpIGNvbnN0OwoKICAgIHZvaWQJemV0YV93YXZlZm9ybShpbnQpOwogICAgdm9p
ZAl6ZXRhX2FjdGl2ZV9kYW1waW5nKGludCk7CiAgICB2b2lkCXpldGFfZWxlY3Ryb25pY192aXNj
b3NpdHkoaW50KTsKICAgIHZvaWQJemV0YV9pbmR1Y3RhbmNlKGludCk7CiAgICB2b2lkCXpldGFf
c3RhdGljX3RvcnF1ZShpbnQpOwogICAgdm9pZAl6ZXRhX2FudGlfcmVzb25hbmNlKEJvb2xlYW4p
OwogICAgdm9pZAl6ZXRhX3Bvc19tYWluX2dhaW5fdmVsKGludCk7CiAgICB2b2lkCXpldGFfcG9z
X21haW5fZ2Fpbl9mYWN0b3IoaW50KTsKCiAgICBCb29sZWFuCWluc3Bfb3B0aW9uX3NhdmVfYWxs
X2ZhdWx0cygpIGNvbnN0OwogICAgc2hvcnQJaW5zcF9zYXZlX2FsbF9mYXVsdF9mcmFtZXMoKSBj
b25zdDsKICAgIHNob3J0CWluc3BfcmVhZG91dF9pbmhpYml0KCkgY29uc3Q7CgogICAgdm9pZAlp
bnNwX29wdGlvbl9zYXZlX2FsbF9mYXVsdHMoQm9vbGVhbik7CiAgICB2b2lkCWluc3Bfc2F2ZV9h
bGxfZmF1bHRfZnJhbWVzKHNob3J0KTsKICAgIHZvaWQJaW5zcF9yZWFkb3V0X2luaGliaXQoZVJl
YWRvdXRJbmhpYml0T3B0aW9ucyk7CgogICAgIAoKCiAgICBCb29sZWFuCWxhc2VyX2hhc19sYXNl
cigpIGNvbnN0OwogICAgZmxvYXQJbGFzZXJfaGVpZ2h0KCkgY29uc3Q7CiAgICBmbG9hdAlsYXNl
cl94X2hvbWUoKSBjb25zdDsKICAgIGZsb2F0CWxhc2VyX3lfaG9tZSgpIGNvbnN0OwogICAgaW50
CQlsYXNlcl94X21vdG9yX2hvbWUoKSBjb25zdDsKICAgIGludAkJbGFzZXJfeV9tb3Rvcl9ob21l
KCkgY29uc3Q7CiAgICBpbnQJCWxhc2VyX2luaXRpYWxfdmVsb2NpdHkoKSBjb25zdDsKICAgIGlu
dAkJbGFzZXJfZmluYWxfdmVsb2NpdHkoKSBjb25zdDsKICAgIGludAkJbGFzZXJfYWNjZWxlcmF0
aW9uKCkgY29uc3Q7CgogICAgdm9pZAlsYXNlcl9oYXNfbGFzZXIoQm9vbGVhbik7CiAgICB2b2lk
CWxhc2VyX2hlaWdodChmbG9hdCk7CiAgICB2b2lkCWxhc2VyX3hfaG9tZShmbG9hdCk7CiAgICB2
b2lkCWxhc2VyX3lfaG9tZShmbG9hdCk7CiAgICB2b2lkCWxhc2VyX3hfbW90b3JfaG9tZShpbnQp
OwogICAgdm9pZAlsYXNlcl95X21vdG9yX2hvbWUoaW50KTsKICAgIHZvaWQJbGFzZXJfaW5pdGlh
bF92ZWxvY2l0eShpbnQpOwogICAgdm9pZAlsYXNlcl9maW5hbF92ZWxvY2l0eShpbnQpOwogICAg
dm9pZAlsYXNlcl9hY2NlbGVyYXRpb24oaW50KTsKCiAgICAgCgoKICAgIEJvb2xlYW4JaXNfc29s
YXJpcygpIGNvbnN0OwogICAgQm9vbGVhbgloYXNfc2J1cygpIGNvbnN0OwogICAgQm9vbGVhbglp
c19ydHAoKSBjb25zdDsKICAgIEJvb2xlYW4JaGFzXzMyYml0X2RpbygpIGNvbnN0OwogICAgaW50
CQltb3RvcigpIGNvbnN0OwogICAgaW50CQlyYW1kYWMoaW50IHZjcHUsIGJvb2wgaGlfbG93KSBj
b25zdDsKICAgIGxvbmcJdmlkZW9fbWVtb3J5X3NpemUoKSBjb25zdDsKCiAgICB2b2lkCWhhc19z
YnVzKEJvb2xlYW4pOwogICAgdm9pZAlpc19ydHAoQm9vbGVhbik7CiAgICB2b2lkCWhhc18zMmJp
dF9kaW8oQm9vbGVhbik7CiAgICB2b2lkCW1vdG9yKGludCk7CiAgICB2b2lkCXJhbWRhYyhpbnQg
dmNwdSwgYm9vbCBoaV9sb3csIGludCB2YWx1ZSk7CiAgICB2b2lkCXZpZGVvX21lbW9yeV9zaXpl
KGxvbmcgYW10KTsKCiAgICAgCgoKICAgIHVfc2hvcnQJc3BlY2lhbDNkX2xsdF9sdXRfdmFsdWUo
KSBjb25zdDsKICAgIHNob3J0CXNwZWNpYWwzZF93aW5fYmFzZV9hZGpfQSgpIGNvbnN0OwogICAg
c2hvcnQJc3BlY2lhbDNkX3dpbl9iYXNlX2Fkal9CKCkgY29uc3Q7CiAgICBzaG9ydAlzcGVjaWFs
M2Rfd2luX2Jhc2VfYWRqX0MoKSBjb25zdDsKICAgIHNob3J0CXNwZWNpYWwzZF9oZWlnaHRfWl9j
b3JyKCkgY29uc3Q7CiAgICBzaG9ydAlzcGVjaWFsM2Rfc3RhcnRfc3RvcF8zZCgpIGNvbnN0Owog
ICAgc2hvcnQJc3BlY2lhbDNkX2xlZnRfb2Zmc2V0KCkgY29uc3Q7CiAgICBzaG9ydAlzcGVjaWFs
M2RfcmlnaHRfb2Zmc2V0KCkgY29uc3Q7CgogICAgdm9pZAlzcGVjaWFsM2RfbGx0X2x1dF92YWx1
ZSh1X3Nob3J0KTsKICAgIHZvaWQJc3BlY2lhbDNkX3dpbl9iYXNlX2Fkal9BKHNob3J0KTsKICAg
IHZvaWQJc3BlY2lhbDNkX3dpbl9iYXNlX2Fkal9CKHNob3J0KTsKICAgIHZvaWQJc3BlY2lhbDNk
X3dpbl9iYXNlX2Fkal9DKHNob3J0KTsKICAgIHZvaWQJc3BlY2lhbDNkX2hlaWdodF9aX2NvcnIo
c2hvcnQpOwogICAgdm9pZAlzcGVjaWFsM2Rfc3RhcnRfc3RvcF8zZChzaG9ydCk7CiAgICB2b2lk
CXNwZWNpYWwzZF9sZWZ0X29mZnNldChzaG9ydCk7CiAgICB2b2lkCXNwZWNpYWwzZF9yaWdodF9v
ZmZzZXQoc2hvcnQpOwoKICAgICAKCgogICAgY29uc3QgY2hhciogYW5fdXNlcm5hbWUoKSBjb25z
dDsKICAgIGNvbnN0IGNoYXIqIGFuX3Bhc3N3b3JkKCkgY29uc3Q7CiAgICBjb25zdCBjaGFyKiBh
bl9kYXRhYmFzZW5hbWUoKSBjb25zdDsKICAgIGNvbnN0IGNoYXIqIGFuX2hvc3RuYW1lKCkgY29u
c3Q7CiAgICBjb25zdCBlRGF0YWJhc2VUeXBlcyBhbl9kYXRhYmFzZSgpIGNvbnN0OwoKICAgIHZv
aWQJYW5fdXNlcm5hbWUoY29uc3QgY2hhciAqKTsKICAgIHZvaWQJYW5fcGFzc3dvcmQoY29uc3Qg
Y2hhciAqKTsKICAgIHZvaWQJYW5fZGF0YWJhc2VuYW1lKGNvbnN0IGNoYXIgKik7CiAgICB2b2lk
CWFuX2hvc3RuYW1lKGNvbnN0IGNoYXIgKik7CiAgICB2b2lkCWFuX2RhdGFiYXNlKGNvbnN0IGVE
YXRhYmFzZVR5cGVzKTsKCiAgICAgCgoKCiAgICBCb29sZWFuICAgICB1ZGNfZW5hYmxlZCgpIGNv
bnN0OwogICAgQm9vbGVhbiAgICAgdXNlX3VkY190YWJsZSgpIGNvbnN0OwoKICAgIHZvaWQJdWRj
X2VuYWJsZWQoQm9vbGVhbik7CiAgICB2b2lkCXVzZV91ZGNfdGFibGUoQm9vbGVhbik7CgogICAg
IAoKCiAgICBCb29sZWFuIAlpZmljc19lbmFibGVkKCkgY29uc3Q7CiAgICBjb25zdCBjaGFyKglp
Zmljc19UU05hbWUoKSAgY29uc3Q7CiAgICBjb25zdCBjaGFyKglpZmljc19NQUNISU5FKCkgIGNv
bnN0OwogICAgdWxvbmcJaWZpY3NfUE9SVCgpICBjb25zdDsKICAgIHVsb25nIAlpZmljc19UaW1l
b3V0KCkgIGNvbnN0OwogICAgQm9vbGVhbiAJZW5nX2RiX2VuYWJsZWQoKSBjb25zdDsKICAgIGNv
bnN0IGNoYXIqCWVuZ19kYl9ob3N0bmFtZSgpICBjb25zdDsKICAgIGNvbnN0IGNoYXIqCWVuZ19k
Yl9Qcm9jZXNzU3RlcCgpICBjb25zdDsKICAgIGNvbnN0IGNoYXIqCWZjX09QSUQoKSAgY29uc3Q7
CiAgICBCb29sZWFuIAlmY191c2VyX3Byb21wdF9lbmFibGVkKCkgY29uc3Q7CiAgICBjb25zdCBj
aGFyKglmY19VSUQoKSAgY29uc3Q7CiAgICBjb25zdCBjaGFyKglmY19TSElGVCgpICBjb25zdDsK
ICAgIHZvaWQgCWZjX2luaXRfdXNlcl9kYXRhKHZvaWQpOwoKICAgIHZvaWQgCQlpZmljc19lbmFi
bGVkKEJvb2xlYW4pOwogICAgZVN0cmluZ0Vycm9ycyAJaWZpY3NfVFNOYW1lKGNvbnN0IGNoYXIg
Kik7CiAgICBlU3RyaW5nRXJyb3JzIAlpZmljc19NQUNISU5FKGNvbnN0IGNoYXIgKik7CiAgICB2
b2lkCQlpZmljc19QT1JUKHVsb25nKTsKICAgIHZvaWQJCWlmaWNzX1RpbWVvdXQodWxvbmcpOwog
ICAgdm9pZAkgCWVuZ19kYl9lbmFibGVkKEJvb2xlYW4pOwogICAgZVN0cmluZ0Vycm9ycwllbmdf
ZGJfaG9zdG5hbWUoY29uc3QgY2hhciAqKTsKICAgIGVTdHJpbmdFcnJvcnMgCWVuZ19kYl9Qcm9j
ZXNzU3RlcChjb25zdCBjaGFyICopOwogICAgZVN0cmluZ0Vycm9ycyAJZmNfT1BJRChjb25zdCBj
aGFyICopOwogICAgdm9pZAkJZmNfdXNlcl9wcm9tcHRfZW5hYmxlZChCb29sZWFuKTsKICAgIGVT
dHJpbmdFcnJvcnMgCWZjX1VJRChjb25zdCBjaGFyICopOwogICAgZVN0cmluZ0Vycm9ycyAJZmNf
U0hJRlQoY29uc3QgY2hhciAqKTsKCiAgICAgCgoKICAgIGZsb2F0CQlvZmZzZXQoaW50KTsKICAg
IHZvaWQJCW9mZnNldChpbnQsIGZsb2F0KTsKfTsKCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRp
b246OmNmZ19jaGFuZ2VkKCkgY29uc3QKewogICAgcmV0dXJuIChjaGFuZ2VkKTsKfQoKaW5saW5l
IHZvaWQKY29uZmlndXJhdGlvbjo6Y2ZnX2NoYW5nZWQoQm9vbGVhbiB2YWx1ZSkKewogICAgY2hh
bmdlZCA9IHZhbHVlOwp9CgogCgoKaW5saW5lIEJvb2xlYW4KY29uZmlndXJhdGlvbjo6c3BjX2ln
c19sZXZlbDIoKSBjb25zdAp7CiAgICByZXR1cm4oc3BjZ2VuLmlnc19sZXZlbDIpOwp9Cgppbmxp
bmUgQm9vbGVhbgpjb25maWd1cmF0aW9uOjpzcGNfaWdzX2xldmVsMSgpIGNvbnN0CnsKICAgIHJl
dHVybihzcGNnZW4uaWdzX2xldmVsMSk7Cn0KCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRpb246
OnNwY19pZ3NfZ3JvdXBzKCkgY29uc3QKewogICAgcmV0dXJuKHNwY2dlbi5pZ3NfZ3JvdXBzKTsK
fQoKaW5saW5lIEJvb2xlYW4KY29uZmlndXJhdGlvbjo6c3BjX2lnc19pdGVtcygpIGNvbnN0CnsK
ICAgIHJldHVybihzcGNnZW4uaWdzX2l0ZW1zKTsKfQoKaW5saW5lIGNvbnN0IGNoYXIgKgpjb25m
aWd1cmF0aW9uOjpzcGNfc2NyaXB0X2ZpbGVuYW1lKCkgY29uc3QKewogICAgcmV0dXJuKHNwY2dl
bi5zY3JpcHRfZmlsZW5hbWUpOwp9CgppbmxpbmUgQm9vbGVhbgpjb25maWd1cmF0aW9uOjpzcGNf
cGxvdF9vdXRwdXQoKSBjb25zdAp7CiAgICByZXR1cm4oc3BjZ2VuLnNob3dfcGxvdCk7Cn0KCmlu
bGluZSBCb29sZWFuCmNvbmZpZ3VyYXRpb246OnNwY19ydW5fZGVmZWN0KCkgY29uc3QKewogICAg
cmV0dXJuKHNwY2dlbjMucnVuX2RlZmVjdCk7Cn0KCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRp
b246OnNwY19ydW5fc2NyaXB0KCkgY29uc3QKewogICAgcmV0dXJuKHNwY2dlbi5ydW5fc2NyaXB0
KTsKfQoKaW5saW5lIGNvbnN0IGNoYXIgKgpjb25maWd1cmF0aW9uOjpzcGNfcmVwYWlyX3Njcmlw
dF9uYW1lKCkgY29uc3QKewogICAgcmV0dXJuKHNwY2dlbjQucmVwYWlyX3NjcmlwdF9uYW1lKTsK
fQoKaW5saW5lIEJvb2xlYW4KY29uZmlndXJhdGlvbjo6c3BjX3J1bl9yZXBhaXJfc2NyaXB0KCkg
Y29uc3QKewogICAgcmV0dXJuKHNwY2dlbjQucnVuX3JlcGFpcl9zY3JpcHQpOwp9CgoKIAoKCmlu
bGluZSBCb29sZWFuCmNvbmZpZ3VyYXRpb246OnNwY19ub19zdW1tYXJ5KCkgY29uc3QKewogICAg
cmV0dXJuKHNwY2dlbjIubm9fc3VtbWFyeSk7Cn0KCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRp
b246OnNwY19hbGxvd19yZXZpZXdfdG9fcGFzcygpIGNvbnN0CnsKICAgIHJldHVybihzcGNnZW4u
YWxsb3dfcmV2aWV3X3Bhc3MpOwp9CgppbmxpbmUgQm9vbGVhbgpjb25maWd1cmF0aW9uOjpzcGNf
cmVwb3J0X292ZXJyaWRlcygpIGNvbnN0CnsKICAgIHJldHVybihzcGNnZW4ucmVwb3J0X292ZXJy
aWRlcyk7Cn0KCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRpb246OnNwY19zaW1wbGVfcmVwb3J0
KCkgY29uc3QKewogICAgcmV0dXJuIChzcGNnZW4ucHJpbnRfcGlucyAmJiAhc3BjZ2VuLnN0b2Nr
X251bWJlcik7Cn0KCiAKaW5saW5lIEJvb2xlYW4KY29uZmlndXJhdGlvbjo6c3BjX21ldHJpY191
bml0cygpIGNvbnN0CnsKICAgIHJldHVybiAoc3BjZ2VuNS5tZXRyaWNfdW5pdHMpOwp9Cgppbmxp
bmUgQm9vbGVhbgpjb25maWd1cmF0aW9uOjpzcGNfc3RvY2tfbnVtYmVyKCkgY29uc3QKewogICAg
cmV0dXJuKHNwY2dlbi5zdG9ja19udW1iZXIpOwp9CgppbmxpbmUgQm9vbGVhbgpjb25maWd1cmF0
aW9uOjpzcGNfcHJpbnRfcGlucygpIGNvbnN0CnsKICAgIHJldHVybihzcGNnZW4ucHJpbnRfcGlu
cyk7Cn0KCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRpb246OnNwY19zdW1tYXJpemVfaXRlbXMo
KSBjb25zdAp7CiAgICByZXR1cm4oc3BjZ2VuLnN1bW1hcml6ZV9pdGVtcyk7Cn0KCmlubGluZSBC
b29sZWFuCmNvbmZpZ3VyYXRpb246OnNwY19zaG93X3Jldmlld19wYXNzKCkgY29uc3QKewogICAg
cmV0dXJuKHNwY2dlbjIuc2hvd19yZXZpZXdfcGFzcyk7Cn0KCiAKCgppbmxpbmUgQm9vbGVhbgpj
b25maWd1cmF0aW9uOjpzcGNfYXV0b19zYXZlX3N0YXRpc3RpY3MoKSBjb25zdAp7CiAgICByZXR1
cm4oc3BjZ2VuNS5hdXRvX3NhdmVfc3RhdGlzdGljcyk7Cn0KCmlubGluZSBzaG9ydApjb25maWd1
cmF0aW9uOjpzcGNfYXV0b19zYXZlX2hvdXJzKCkgY29uc3QKewogICAgcmV0dXJuKHNwY2dlbjUu
YXV0b19zYXZlX2hvdXJzKTsKfQoKaW5saW5lIHNob3J0CmNvbmZpZ3VyYXRpb246OnNwY19hdXRv
X3NhdmVfbWludXRlcygpIGNvbnN0CnsKICAgIHJldHVybihzcGNnZW41LmF1dG9fc2F2ZV9taW51
dGVzKTsKfQoKIAoKCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRpb246OnN5c3Bhcl9saWdodGVk
X2ZpZHVjaWFscygpIGNvbnN0CnsKICAgIHJldHVybihzeXNwYXIubGlnaHRlZF9maWR1Y2lhbHMp
Owp9CgppbmxpbmUgQm9vbGVhbgpjb25maWd1cmF0aW9uOjpzeXNwYXJfc3RhcnRzdG9wKCkgY29u
c3QKewogICAgcmV0dXJuKHN5c3Bhci5zdGFydHN0b3ApOwp9CgppbmxpbmUgQm9vbGVhbgpjb25m
aWd1cmF0aW9uOjpzeXNwYXJfcmV2aWV3KCkgY29uc3QKewogICAgcmV0dXJuKHN5c3Bhci5yZXZp
ZXcpOwp9CgppbmxpbmUgQm9vbGVhbgpjb25maWd1cmF0aW9uOjpzeXNwYXJfYmFkc25hcCgpIGNv
bnN0CnsKICAgIHJldHVybihzeXNwYXIuYmFkc25hcCk7Cn0KCmlubGluZSBpbnQKY29uZmlndXJh
dGlvbjo6c3lzcGFyX2JhZHNuYXBfZnJhbWVzKCkgY29uc3QKewogICAgcmV0dXJuKHN5c3Bhci5i
YWRzbmFwX2ZyYW1lcyk7Cn0KCmlubGluZSBpbnQKY29uZmlndXJhdGlvbjo6c3lzcGFyX2JhZHNu
YXBfaXRlbXMoKSBjb25zdAp7CiAgICByZXR1cm4oc3lzcGFyLmJhZHNuYXBfaXRlbXMpOwp9Cgpp
bmxpbmUgQm9vbGVhbgpjb25maWd1cmF0aW9uOjpzeXNwYXJfY29tcGVuc2F0aW9uKCkgY29uc3QK
ewogICAgcmV0dXJuKHN5c3Bhci5jb21wZW5zYXRpb24pOwp9CgppbmxpbmUgQm9vbGVhbgpjb25m
aWd1cmF0aW9uOjpzeXNwYXJfc2hvd21vZGUoKSBjb25zdAp7CiAgICByZXR1cm4oc3lzcGFyLnNo
b3dtb2RlKTsKfQoKaW5saW5lIEJvb2xlYW4KY29uZmlndXJhdGlvbjo6c3lzcGFyX3Nob3dtb2Rl
X2Zha2VfYWxnbygpIGNvbnN0CnsKICAgIHJldHVybihzeXNwYXIuc2hvd21vZGVfZmFrZV9hbGdv
KTsKfQoKaW5saW5lIGludApjb25maWd1cmF0aW9uOjpzeXNwYXJfc2hvd21vZGVfZnJhbWUoKSBj
b25zdAp7CiAgICByZXR1cm4oc3lzcGFyLnNob3dtb2RlX2ZyYW1lIDw8IGtTaG93TW9kZUZyYW1l
U2hpZnQpOwp9CgppbmxpbmUgQm9vbGVhbgpjb25maWd1cmF0aW9uOjppbnNwX29wdGlvbl9zYXZl
X2FsbF9mYXVsdHMoKSBjb25zdAp7CiAgICByZXR1cm4oaW5zcF9vcHRpb25zLnNhdmVfYWxsX2Zh
dWx0cyk7Cn0KCmlubGluZSBzaG9ydApjb25maWd1cmF0aW9uOjppbnNwX3NhdmVfYWxsX2ZhdWx0
X2ZyYW1lcygpIGNvbnN0CnsKICAgIHJldHVybihpbnNwX29wdGlvbnMyLm51bV9yZXNlcnZlZF9m
cmFtZXMpOwp9CgogCgoKaW5saW5lIEJvb2xlYW4KY29uZmlndXJhdGlvbjo6Y2FtZXJhX3Npbmds
ZXNwZWVkKCkgY29uc3QKewogICAgcmV0dXJuKGNhbWVyYS5zaW5nbGVzcGVlZCk7Cn0KCmlubGlu
ZSBpbnQKY29uZmlndXJhdGlvbjo6Y2FtZXJhX29yaWVudGF0aW9uKCkgY29uc3QKewogICAgcmV0
dXJuKGNhbWVyYS5vcmllbnRhdGlvbik7Cn0KCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRpb246
OmNhbWVyYV9pc19wYW5hc29uaWMoKSBjb25zdAp7CiAgICByZXR1cm4oY2FtZXJhMi5pc19wYW5h
c29uaWMpOwp9CgppbmxpbmUgQm9vbGVhbgpjb25maWd1cmF0aW9uOjpjYW1lcmFfdmFyaWFibGVf
bGlnaHRpbmcoKSBjb25zdAp7CiAgICByZXR1cm4oY2FtZXJhMi52YXJpYWJsZV9saWdodGluZyk7
Cn0KCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRpb246OmNhbWVyYV9yZXRha2VfYmFkc25hcHMo
KSBjb25zdAp7CiAgICByZXR1cm4oY2FtZXJhMy5yZXRha2VfYmFkc25hcHMpOwp9CgppbmxpbmUg
Qm9vbGVhbgpjb25maWd1cmF0aW9uOjpjYW1lcmFfaXNfZGlnaXRhbCgpIGNvbnN0CnsKICAgIHJl
dHVybiAoY2FtZXJhNS5faXNfZGlnaXRhbCk7Cn0KCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRp
b246OmNhbWVyYV9pc19jb2xvcigpIGNvbnN0CnsKICAgIHJldHVybihjYW1lcmE1Ll9pc19jb2xv
cik7Cn0KCiAKCgppbmxpbmUgQm9vbGVhbgpjb25maWd1cmF0aW9uOjpjYW1lcmFfaXNfY2FtZXJh
bGluaygpIGNvbnN0CnsKICAgIHJldHVybihjYW1lcmE2Ll9pc19jYW1lcmFsaW5rKTsKfQoKIAoK
CmlubGluZSB1X3Nob3J0CmNvbmZpZ3VyYXRpb246OnNwZWNpYWwzZF9sbHRfbHV0X3ZhbHVlKCkg
Y29uc3QKewogICAgcmV0dXJuIChzcGVjaWFsM2QuTExUX0xVVF9WYWx1ZSk7Cn0KCmlubGluZSBz
aG9ydApjb25maWd1cmF0aW9uOjpzcGVjaWFsM2Rfd2luX2Jhc2VfYWRqX0EoKSBjb25zdAp7CiAg
ICByZXR1cm4gKHNwZWNpYWwzZC53aW5fYmFzZV9hZGpfQSk7Cn0KCmlubGluZSBzaG9ydApjb25m
aWd1cmF0aW9uOjpzcGVjaWFsM2Rfd2luX2Jhc2VfYWRqX0IoKSBjb25zdAp7CiAgICByZXR1cm4g
KHNwZWNpYWwzZC53aW5fYmFzZV9hZGpfQik7Cn0KCmlubGluZSBzaG9ydApjb25maWd1cmF0aW9u
OjpzcGVjaWFsM2Rfd2luX2Jhc2VfYWRqX0MoKSBjb25zdAp7CiAgICByZXR1cm4gKHNwZWNpYWwz
ZC53aW5fYmFzZV9hZGpfQyk7Cn0KCmlubGluZSBzaG9ydApjb25maWd1cmF0aW9uOjpzcGVjaWFs
M2RfaGVpZ2h0X1pfY29ycigpIGNvbnN0CnsKICAgIHJldHVybiAoc3BlY2lhbDNkLmhlaWdodF9a
X2NvcnIpOwp9CgppbmxpbmUgc2hvcnQKY29uZmlndXJhdGlvbjo6c3BlY2lhbDNkX3N0YXJ0X3N0
b3BfM2QoKSBjb25zdAp7CiAgICByZXR1cm4gKHNwZWNpYWwzZC5zdGFydF9zdG9wXzNkKTsKfQoK
aW5saW5lIHNob3J0CmNvbmZpZ3VyYXRpb246OnNwZWNpYWwzZF9sZWZ0X29mZnNldCgpIGNvbnN0
CnsKICAgIHJldHVybiAoc3BlY2lhbDNkLmxlZnRfb2Zmc2V0KTsKfQoKaW5saW5lIHNob3J0CmNv
bmZpZ3VyYXRpb246OnNwZWNpYWwzZF9yaWdodF9vZmZzZXQoKSBjb25zdAp7CiAgICByZXR1cm4g
KHNwZWNpYWwzZC5yaWdodF9vZmZzZXQpOwp9CgoKIAoKCmlubGluZSBpbnQKY29uZmlndXJhdGlv
bjo6bW9kZV9jb29yZGluYXRvcigpIGNvbnN0CnsKICAgIHJldHVybihrQ29vck1vZGVJZGxlKTsJ
IAp9CgppbmxpbmUgaW50CmNvbmZpZ3VyYXRpb246Om1vZGVfbWF0ZXJpYWwoKSBjb25zdAp7CiAg
ICByZXR1cm4obW9kZS5tYXRlcmlhbCk7Cn0KCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRpb246
Om1vZGVfYm90dG9tc2lkZSgpIGNvbnN0CnsKICAgIHJldHVybihtb2RlLmJvdHRvbXNpZGUpOwp9
CgppbmxpbmUgaW50CmNvbmZpZ3VyYXRpb246Om1vZGVfYXV0b2hvbWUoKSBjb25zdAp7CiAgICBy
ZXR1cm4obW9kZS5hdXRvaG9tZSk7Cn0KCiAKCgppbmxpbmUgQm9vbGVhbgpjb25maWd1cmF0aW9u
OjptYXRfZGF0ZXRpbWUoKSBjb25zdAp7CiAgICByZXR1cm4obWF0LmRhdGV0aW1lKTsKfQoKaW5s
aW5lIEJvb2xlYW4KY29uZmlndXJhdGlvbjo6bWF0X3NpbXBsaW1hdGljKCkgY29uc3QKewogICAg
cmV0dXJuKG1hdC5zaW1wbGltYXRpYyk7Cn0KCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRpb246
Om1hdF9hZGp1c3RfcmFpbHMoKSBjb25zdAp7CiAgICByZXR1cm4obWF0LmFkanVzdF9yYWlscyk7
Cn0KCmlubGluZSBjb25zdCBjaGFyICoKY29uZmlndXJhdGlvbjo6bWF0X3ByaW50ZXIoKSBjb25z
dAp7CiAgICByZXR1cm4obWF0LnByaW50ZXIpOwp9CgppbmxpbmUgQm9vbGVhbgpjb25maWd1cmF0
aW9uOjptYXRfcmV2aWV3X292ZXJsaW1pdCgpIGNvbnN0CnsKICAgIHJldHVybiAobWF0LnJldmll
d19vdmVybGltaXQpOwp9CgppbmxpbmUgQm9vbGVhbgpjb25maWd1cmF0aW9uOjptYXRfc21lbWFf
bW9kZSgpIGNvbnN0CnsKICAgIHJldHVybihtYXQuc21lbWFfbW9kZSk7Cn0KCmlubGluZSBCb29s
ZWFuCmNvbmZpZ3VyYXRpb246Om1hdF9ub19maXJzdF9ib2FyZCgpIGNvbnN0CnsKICAgIHJldHVy
bihtYXQubm9fZmlyc3RfYm9hcmQpOwp9CgogCgoKaW5saW5lIEJvb2xlYW4KY29uZmlndXJhdGlv
bjo6c3BjX2ZsYXZvcl9hc19kaXIoKSBjb25zdAp7CiAgICByZXR1cm4oc3BjZ2VuLmZsYXZvcl9h
c19kaXIpOwp9CgppbmxpbmUgQm9vbGVhbgpjb25maWd1cmF0aW9uOjpzcGNfYXBwZW5kKCkgY29u
c3QKewogICAgcmV0dXJuKHNwY2dlbi5hcHBlbmQpOwp9CgppbmxpbmUgQm9vbGVhbgpjb25maWd1
cmF0aW9uOjpzcGNfYXBwZW5kX2ZsYXZvcigpIGNvbnN0CnsKICAgIHJldHVybihzcGNnZW4uYXBw
ZW5kX2ZsYXZvcik7Cn0KCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRpb246OnNwY19ub3JtYWwo
KSBjb25zdAp7CiAgICByZXR1cm4oc3BjZ2VuLnN0YW5kYXJkKTsKfQoKIAoKCmlubGluZSBCb29s
ZWFuCmNvbmZpZ3VyYXRpb246OnNwY190b19wcmludGVyKCkgY29uc3QKewogICAgcmV0dXJuKHNw
Y2dlbi5yZXBvcnRfb25fcHJpbnRlcik7Cn0KCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRpb246
OnNwY190b19jb25zb2xlKCkgY29uc3QKewogICAgcmV0dXJuKHNwY2dlbi5yZXBvcnRfb25fd2lu
KTsKfQoKaW5saW5lIEJvb2xlYW4KY29uZmlndXJhdGlvbjo6c3BjX3RvX2ZpbGUoKSBjb25zdAp7
CiAgICByZXR1cm4oc3BjZ2VuLnJlcG9ydF9pbl9maWxlKTsKfQoKaW5saW5lIEJvb2xlYW4KY29u
ZmlndXJhdGlvbjo6c3BjX3NhdmVfcmVwb3J0X29uX2Vycm9yKCkgY29uc3QKewogICAgcmV0dXJu
KHNwY2dlbi5zYXZlX3JlcG9ydF9vbl9lcnJvcik7Cn0KCiAKCgppbmxpbmUgQm9vbGVhbgpjb25m
aWd1cmF0aW9uOjpzcGNfc3RvcF9vbl9mYWlsdXJlKCkKewogICAgcmV0dXJuKHNwY2dlbi5oYWx0
X29uX2Vycm9yKTsKfQoKIAoKCmlubGluZSBpbnQKY29uZmlndXJhdGlvbjo6c3BjX3BhcnRfbGlt
aXQoKSBjb25zdAp7CiAgICByZXR1cm4gKHNwY2dlbi5wYXJ0X2xpbWl0KTsKfQoKIAoKCmlubGlu
ZSBpbnQKY29uZmlndXJhdGlvbjo6c3BjX3Bpbl9saW1pdCgpIGNvbnN0CnsKICAgIHJldHVybiAo
c3BjZ2VuLnBpbl9saW1pdCk7Cn0KCiAKCgppbmxpbmUgQm9vbGVhbgpjb25maWd1cmF0aW9uOjpi
YXJjb2RlcygpIGNvbnN0CnsKICAgIHJldHVybihiYXJjb2RlLmluX3VzZSk7Cn0KCmlubGluZSBC
b29sZWFuCmNvbmZpZ3VyYXRpb246OmJhcmNvZGVfZGlzcGxheSgpIGNvbnN0CnsKICAgIHJldHVy
bihiYXJjb2RlLmRpc3BsYXkpOwp9CgppbmxpbmUgaW50CmNvbmZpZ3VyYXRpb246OmJhcmNvZGVf
cmVtaW5kZXIoKSBjb25zdAp7CiAgICByZXR1cm4oYmFyY29kZS5yZW1pbmRlcik7Cn0KCmlubGlu
ZSBpbnQKY29uZmlndXJhdGlvbjo6YmFyY29kZV9sZW5ndGgodm9pZCkgY29uc3QKewogICAgcmV0
dXJuKGJhcmNvZGUubGVuZ3RoKTsKfQoKaW5saW5lIGludApjb25maWd1cmF0aW9uOjpiYXJjb2Rl
X3NpZ19sZW5ndGgodm9pZCkgY29uc3QKewogICAgcmV0dXJuKGJhcmNvZGUuc2lnKTsKfQoKaW5s
aW5lIGNvbnN0IGNoYXIgKgpjb25maWd1cmF0aW9uOjpiYXJjb2RlX2ZpbGVuYW1lKHZvaWQpIGNv
bnN0CnsKICAgIHJldHVybihiYXJjb2RlLmZpbGVuYW1lKTsKfQoKaW5saW5lIEJvb2xlYW4KY29u
ZmlndXJhdGlvbjo6YmFyY29kZV9tYXRjaF9kYXRhYmFzZSgpIGNvbnN0CnsKICAgIHJldHVybihi
YXJjb2RlLm1hdGNoX2RhdGFiYXNlKTsKfQoKIAoKCmlubGluZSBpbnQKY29uZmlndXJhdGlvbjo6
c3RhZ2VfYXhpcygpIGNvbnN0CnsKICAgIHJldHVybihheGlzKTsKfQoKIAoKCmlubGluZSBCb29s
ZWFuCmNvbmZpZ3VyYXRpb246Omxhc2VyX2hhc19sYXNlcigpIGNvbnN0CnsKICAgIHJldHVybihs
YXNlci5oYXNfbGFzZXIpOwp9CgppbmxpbmUgZmxvYXQKY29uZmlndXJhdGlvbjo6bGFzZXJfaGVp
Z2h0KCkgY29uc3QKewogICAgcmV0dXJuKGxhc2VyLmhlaWdodCk7Cn0KCmlubGluZSBmbG9hdApj
b25maWd1cmF0aW9uOjpsYXNlcl94X2hvbWUoKSBjb25zdAp7CiAgICByZXR1cm4obGFzZXIueF9o
b21lKTsKfQoKaW5saW5lIGZsb2F0CmNvbmZpZ3VyYXRpb246Omxhc2VyX3lfaG9tZSgpIGNvbnN0
CnsKICAgIHJldHVybihsYXNlci55X2hvbWUpOwp9CgppbmxpbmUgaW50CmNvbmZpZ3VyYXRpb246
Omxhc2VyX3hfbW90b3JfaG9tZSgpIGNvbnN0CnsKICAgIHJldHVybihsYXNlci54X21vdG9yX2hv
bWUpOwp9CgppbmxpbmUgaW50CmNvbmZpZ3VyYXRpb246Omxhc2VyX3lfbW90b3JfaG9tZSgpIGNv
bnN0CnsKICAgIHJldHVybihsYXNlci55X21vdG9yX2hvbWUpOwp9CgppbmxpbmUgaW50CmNvbmZp
Z3VyYXRpb246Omxhc2VyX2luaXRpYWxfdmVsb2NpdHkoKSBjb25zdAp7CiAgICByZXR1cm4obGFz
ZXIyLmluaXRpYWxfdmVsb2NpdHkpOwp9CgppbmxpbmUgaW50CmNvbmZpZ3VyYXRpb246Omxhc2Vy
X2ZpbmFsX3ZlbG9jaXR5KCkgY29uc3QKewogICAgcmV0dXJuKGxhc2VyMi5maW5hbF92ZWxvY2l0
eSk7Cn0KCmlubGluZSBpbnQKY29uZmlndXJhdGlvbjo6bGFzZXJfYWNjZWxlcmF0aW9uKCkgY29u
c3QKewogICAgcmV0dXJuKGxhc2VyMi5hY2NlbGVyYXRpb24pOwp9CgppbmxpbmUgQm9vbGVhbgpj
b25maWd1cmF0aW9uOjppc19zb2xhcmlzKCkgY29uc3QKewoKICAgIHJldHVybih0cnVlKTsKCgoK
fQoKaW5saW5lIEJvb2xlYW4KY29uZmlndXJhdGlvbjo6aGFzXzMyYml0X2RpbygpIGNvbnN0CnsK
ICAgIHJldHVybihzeXN0ZW0uaGFzXzMyYml0X2Rpbyk7Cn0KCmlubGluZSBCb29sZWFuCmNvbmZp
Z3VyYXRpb246OmlzX3J0cCgpIGNvbnN0CnsKICAgIHJldHVybihzeXN0ZW0uaXNfcnRwKTsKfQoK
aW5saW5lIGludApjb25maWd1cmF0aW9uOjptb3RvcigpIGNvbnN0CnsKICAgIHJldHVybihzeXN0
ZW0ubW90b3JfZHJpdmVyKTsKfQoKaW5saW5lIGVfZmlkdV9sb2NhdGlvbgpjb25maWd1cmF0aW9u
OjpmaWR1X2xvY2F0aW9uKCkgY29uc3QKewogICAgcmV0dXJuKHN0YWdlNC5fZmlkdV9sb2NhdGlv
bik7Cn0KCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRpb246OnVzaW5nX2V4dGVybmFsX3Jldmll
dygpIGNvbnN0CnsKICAgIHJldHVybihzdGFnZTQuX3VzaW5nX2V4dGVybmFsX3Jldmlldyk7Cn0K
CmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRpb246Omhhc18zc3RhZ2VfY29udmV5b3IoKSBjb25z
dAp7CiAgICByZXR1cm4oc3RhZ2U0Ll9oYXNfM3N0YWdlX2NvbnZleW9yKTsKfQoKaW5saW5lIGlu
dApjb25maWd1cmF0aW9uOjpyYW1kYWMoaW50IHZjcHUsIGJvb2wgaGlfbG93KSBjb25zdAp7CiAg
ICBpZiAodmNwdSA8IDAgfHwgdmNwdSA+IGtOdmNwdSkKCXJldHVybigwKTsKCiAgICBpZiAoaGlf
bG93KQoJcmV0dXJuKHJhbWRhY19kYXRhW3ZjcHVdLmhpKTsKICAgIHJldHVybihyYW1kYWNfZGF0
YVt2Y3B1XS5sb3cpOwp9CgppbmxpbmUgY29uc3QgY2hhciAqCmNvbmZpZ3VyYXRpb246OmFuX3Vz
ZXJuYW1lKCkgY29uc3QKewogICAgcmV0dXJuKGF1dG9fbmV0d29ya2VyLnVzZXJuYW1lKTsKfQoK
aW5saW5lIGNvbnN0IGNoYXIgKgpjb25maWd1cmF0aW9uOjphbl9wYXNzd29yZCgpIGNvbnN0CnsK
ICAgIHJldHVybihhdXRvX25ldHdvcmtlci5wYXNzd29yZCk7Cn0KCmlubGluZSBjb25zdCBjaGFy
ICoKY29uZmlndXJhdGlvbjo6YW5faG9zdG5hbWUoKSBjb25zdAp7CiAgICByZXR1cm4oYXV0b19u
ZXR3b3JrZXIuaG9zdG5hbWUpOwp9CgppbmxpbmUgY29uc3QgY2hhciAqCmNvbmZpZ3VyYXRpb246
OmFuX2RhdGFiYXNlbmFtZSgpIGNvbnN0CnsKICAgIHJldHVybihhdXRvX25ldHdvcmtlci5kYXRh
YmFzZW5hbWUpOwp9CgppbmxpbmUgQm9vbGVhbgpjb25maWd1cmF0aW9uOjp1ZGNfZW5hYmxlZCgp
IGNvbnN0CnsKICAgIHJldHVybih1ZGMuZW5hYmxlX3VkYyk7Cn0KCmlubGluZSBCb29sZWFuCmNv
bmZpZ3VyYXRpb246OnVzZV91ZGNfdGFibGUoKSBjb25zdAp7CiAgICByZXR1cm4odWRjLnVzZV91
ZGNfdGFibGUpOwp9CgppbmxpbmUgQm9vbGVhbiAJCQpjb25maWd1cmF0aW9uOjppZmljc19lbmFi
bGVkKCkgY29uc3QKewogICAgcmV0dXJuKGZhY3RvcnlfY29udHJvbC5pZmljc19vbik7Cn0KCmlu
bGluZSBjb25zdCBjaGFyICogCQpjb25maWd1cmF0aW9uOjppZmljc19UU05hbWUoKSAgY29uc3QK
ewogICAgcmV0dXJuKGZhY3RvcnlfY29udHJvbC5pZmljc19UU05hbWUpOwp9CgppbmxpbmUgY29u
c3QgY2hhciAqIAkKY29uZmlndXJhdGlvbjo6aWZpY3NfTUFDSElORSgpICBjb25zdAp7CiAgICBy
ZXR1cm4oZmFjdG9yeV9jb250cm9sLmlmaWNzX01hY2hpbmUpOwp9CgppbmxpbmUgdWxvbmcKY29u
ZmlndXJhdGlvbjo6aWZpY3NfUE9SVCgpIGNvbnN0CnsKICAgIHJldHVybihmYWN0b3J5X2NvbnRy
b2wuaWZpY3NfcG9ydCk7Cn0KCgppbmxpbmUgdWxvbmcKY29uZmlndXJhdGlvbjo6aWZpY3NfVGlt
ZW91dCgpIGNvbnN0CnsKICAgIHJldHVybihmYWN0b3J5X2NvbnRyb2wuaWZpY3NfdGltZW91dCk7
Cn0KCmlubGluZSBCb29sZWFuIAkJCmNvbmZpZ3VyYXRpb246OmVuZ19kYl9lbmFibGVkKCkgY29u
c3QKewogICAgcmV0dXJuKGZhY3RvcnlfY29udHJvbC5lbmdfZGJfb24pOwp9CgppbmxpbmUgY29u
c3QgY2hhciAqIAkKY29uZmlndXJhdGlvbjo6ZW5nX2RiX2hvc3RuYW1lKCkgIGNvbnN0CnsKICAg
IHJldHVybihmYWN0b3J5X2NvbnRyb2wuZW5nX2RiX2hvc3RuYW1lKTsKfQoKaW5saW5lIGNvbnN0
IGNoYXIgKiAJCmNvbmZpZ3VyYXRpb246OmVuZ19kYl9Qcm9jZXNzU3RlcCgpICBjb25zdAp7CiAg
ICByZXR1cm4oZmFjdG9yeV9jb250cm9sLmVuZ19kYl9Qcm9jZXNzU3RlcCk7Cn0KCmlubGluZSBj
b25zdCBjaGFyICogCQpjb25maWd1cmF0aW9uOjpmY19PUElEKCkgIGNvbnN0CnsKICAgIHJldHVy
bihmYWN0b3J5X2NvbnRyb2wuT3BpZCk7Cn0KCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRpb246
OmZjX3VzZXJfcHJvbXB0X2VuYWJsZWQoKSBjb25zdAp7CiAgICByZXR1cm4oZmFjdG9yeV9jb250
cm9sLnVzZXJfcHJvbXB0X29uKTsKfQoKaW5saW5lIGNvbnN0IGNoYXIgKiAJCmNvbmZpZ3VyYXRp
b246OmZjX1VJRCgpICBjb25zdAp7CiAgICByZXR1cm4oZmFjdG9yeV9jb250cm9sLlVpZCk7Cn0K
CmlubGluZSBjb25zdCBjaGFyICogCQpjb25maWd1cmF0aW9uOjpmY19TSElGVCgpICBjb25zdAp7
CiAgICByZXR1cm4oZmFjdG9yeV9jb250cm9sLlNoaWZ0KTsKfQoKaW5saW5lIHZvaWQKY29uZmln
dXJhdGlvbjo6ZmNfaW5pdF91c2VyX2RhdGEodm9pZCkKewogICAgZmFjdG9yeV9jb250cm9sLlVp
ZFswXSA9ICdcMCc7CiAgICBmYWN0b3J5X2NvbnRyb2wuU2hpZnRbMF0gPSAnXDAnOwp9Cgppbmxp
bmUgZmxvYXQKY29uZmlndXJhdGlvbjo6b2Zmc2V0KGludCBheGlzKQp7CiAgICByZXR1cm4oaGVp
Z2h0W2F4aXNdLm9mZnNldCk7Cn0KCiMgMTkgInNhdmVfc25hcC5jIiAyCgojIDEgIi4uLy4uL2lu
Y2x1ZGUvbG9jYWxpbmMvRGJnY3RybC5IIiAxCgoKCgojIDEgIi4uLy4uL2luY2x1ZGUvbGliaW5j
L0Vsb2cuSCIgMQoKCiAKCgoKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgoKCgpjb25zdAlpbnQJa05s
b2dzCQk9IDUxMjsKCmNsYXNzIExvZyB7CnByaXZhdGU6CiAgICB1X2xvbmcJX3RpbWU7CiAgICB1
X2xvbmcJX21pbGxpc2VjOwogICAgc3RyaW5nCV9kYXRhOwogICAgYm9vbAlfdmFsaWQ7CgpwdWJs
aWM6CiAgICB2b2lkCWluaXQoKSB7IF92YWxpZCA9IGZhbHNlOyBfZGF0YSA9ICIqKioqKioqXG4i
OyB9CiAgICB2b2lkCWFkZChjb25zdCBjaGFyICpidWYpOwogICAgdm9pZAlkaXNwbGF5KEZJTEUg
KiwgY29uc3Qgc3RyaW5nJikgY29uc3Q7Cn07CgpjbGFzcyBFbG9nIHsKcHVibGljOgogICAgRWxv
Zyhjb25zdCBjaGFyICpmbmFtZSk7CiAgICB+RWxvZygpIHt9CgogICAgdm9pZAltZXNzYWdlKGJv
b2wgZm9yY2UsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKICAgIHZvaWQJZGlzcGxheSgpOwogICAg
dm9pZAlpbml0KCk7CiAgICB2b2lkCWxvZ2ZpbGVfaW5pdCgpOwogICAgdm9pZAlkZWJ1ZyggaW50
IGxldmVsICkgeyBfbGV2ZWwgPSBsZXZlbDsgfQogICAgaW50CQlkZWJ1ZygpIHsgcmV0dXJuIF9s
ZXZlbDsgfQogICAgc3RyaW5nCWZuYW1lKCkgeyByZXR1cm4gX2ZuYW1lOyB9CiAgICBzdGF0aWMg
RWxvZwkqZ2V0KCk7Cgpwcml2YXRlOgogICAgaW50CQlfbGV2ZWw7CiAgICBzdHJpbmcJX2ZuYW1l
OwogICAgRklMRQkqX2ZwOwogICAgc2hvcnQJX2NsaWR4OwogICAgTG9nCQlfbG9nc1trTmxvZ3Nd
OwoKICAgIHB0aHJlYWRfbXV0ZXhfdCAgICAgX2xvY2s7CgogICAgc3RhdGljIEVsb2cJKl9zZWxm
OwoKfTsKCiMgNSAiLi4vLi4vaW5jbHVkZS9sb2NhbGluYy9EYmdjdHJsLkgiIDIKCiMgMSAiLi4v
Li4vaW5jbHVkZS9saWJpbmMvSW1hZ2VCdWYuSCIgMQoKCiAKCgoKCiAKCgoKCiMgMSAiLi4vLi4v
aW5jbHVkZS9sb2NhbGluYy9TbmFwLkgiIDEKCgoKCiMgMSAiLi4vLi4vaW5jbHVkZS9sb2NhbGlu
Yy9Qb2ludC5IIiAxCgoKCgoKCgpjbGFzcyBMUG9pbnQgewpwdWJsaWM6CiAgICBMUG9pbnQoaW50
IHgsIGludCB5KSA6IF94KHgpLCBfeSh5KSB7fQogICAgTFBvaW50KCkgOiBfeCgwKSwgX3koMCkg
e30KCiAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExQb2ludCYgbGVmdCwgY29uc3Qg
TFBvaW50JiByaWdodCk7CiAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IExQb2ludCYg
bGVmdCwgY29uc3QgTFBvaW50JiByaWdodCk7CgogICAgbG9uZyB4KCkgY29uc3QgeyByZXR1cm4o
X3gpOyB9CiAgICB2b2lkIHgobG9uZyB2YWwpIHsgX3ggPSB2YWw7IH0KICAgIGxvbmcgeSgpIGNv
bnN0IHsgcmV0dXJuKF95KTsgfQogICAgdm9pZCB5KGxvbmcgdmFsKSB7IF95ID0gdmFsOyB9Cgog
ICAgbG9uZyBkb3duKCkgY29uc3QgeyByZXR1cm4oX3gpOyB9CiAgICB2b2lkIGRvd24obG9uZyB2
YWwpIHsgX3ggPSB2YWw7IH0KICAgIGxvbmcgYWNyb3NzKCkgY29uc3QgeyByZXR1cm4oX3kpOyB9
CiAgICB2b2lkIGFjcm9zcyhsb25nIHZhbCkgeyBfeSA9IHZhbDsgfQoKcHJpdmF0ZToKICAgIGxv
bmcgX3g7CiAgICBsb25nIF95Owp9OwoKY2xhc3MgUG9pbnQgewpwdWJsaWM6CiAgICBQb2ludChj
b29yX3QgX3gsIGNvb3JfdCBfeSkgOiB4KF94KSwgeShfeSkge30KICAgIFBvaW50KCkgOiB4KDAp
LCB5KDApIHt9CgogICAgY29vcl90IHgsIHk7CgogICAgbG9uZyBkb3duKCkgY29uc3QgeyByZXR1
cm4oeCk7IH0KICAgIHZvaWQgZG93bihsb25nIHZhbCkgeyB4ID0gdmFsOyB9CiAgICBsb25nIGFj
cm9zcygpIGNvbnN0IHsgcmV0dXJuKHkpOyB9CiAgICB2b2lkIGFjcm9zcyhsb25nIHZhbCkgeyB5
ID0gdmFsOyB9Cgp9OwoKaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMUG9pbnQmIGxlZnQs
IGNvbnN0IExQb2ludCYgcmlnaHQpIHsKICAgIHJldHVybihsZWZ0Ll94ID09IHJpZ2h0Ll94ICYm
IGxlZnQuX3kgPT0gcmlnaHQuX3kpOwp9CgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IExQ
b2ludCYgbGVmdCwgY29uc3QgTFBvaW50JiByaWdodCkgewogICAgcmV0dXJuKCEobGVmdCA9PSBy
aWdodCkpOwp9CgojIDUgIi4uLy4uL2luY2x1ZGUvbG9jYWxpbmMvU25hcC5IIiAyCgojIDEgIi4u
Ly4uL2luY2x1ZGUvbG9jYWxpbmMvdmlydF9waHlzLmgiIDEKCgoKCgogCgoKCgoKCgpleHRlcm4g
dW5zaWduZWQgbG9uZyBnU2htZW1PZmZzZXQ7CgoKCgoKCgoKCgoKCgoKCgoKIyA2ICIuLi8uLi9p
bmNsdWRlL2xvY2FsaW5jL1NuYXAuSCIgMgoKCmNsYXNzCUl0ZW07CmNsYXNzCVNpZGVudjsKY2xh
c3MJSGRyOwoKY2xhc3MgU25hcCB7CnB1YmxpYzoKICAgICAKCgoKCiAgICBQb2ludCBzbl9wdDsK
CiAgICB1X2ludAludW1faXRlbXMoKSBjb25zdDsKCiAgICBjb29yX3QJYWNyb3NzKCkgY29uc3Qg
eyByZXR1cm4oc25fcHQueSk7IH0KICAgIGNvb3JfdAlkb3duKCkgY29uc3QgeyByZXR1cm4oc25f
cHQueCk7IH0KCiAgICBjb29yX3QJYWNyb3NzKGNvb3JfdCB2YWwpIHsgc25fcHQueSA9IHZhbDsg
cmV0dXJuKHZhbCk7IH0KICAgIGNvb3JfdAlkb3duKGNvb3JfdCB2YWwpIHsgc25fcHQueCA9IHZh
bDsgcmV0dXJuKHZhbCk7IH0KCiAgICB2b2lkCSpvcGVyYXRvciBuZXcoc2l6ZV90IGFtdCk7CiAg
ICB2b2lkCW9wZXJhdG9yIGRlbGV0ZSh2b2lkICopOwogICAgc3RhdGljIFNuYXAJKmdldF9wYXNz
KGludCBwYXNzID0gLTEpOwogICAgdm9pZAlyZWxvYyhsb25nIGFtdCk7CiAgICB2b2lkCWRlbGV0
ZV9hbGxfc25hcHMoKTsKICAgICAKCgogICAgdm9pZAlyZW1vdmUoSXRlbSAqKTsKICAgIHZvaWQJ
YWRkKEl0ZW0gKik7CgogICAgU25hcAkqc25fZm9ydygpIGNvbnN0OwogICAgSXRlbQkqc25faWxz
dCgpIGNvbnN0OyAgCiAgICBTaWRlbnYJKnNuX3NpZGVudigpIGNvbnN0OyAgCiAgICBCb29sZWFu
CXJldGFrZV90aGlzX3NuYXAoKSBjb25zdDsKICAgIEJvb2xlYW4Jc25fYmFkc25hcCgpIGNvbnN0
OwogICAgQm9vbGVhbglzbl9iYWRpdGVtKCkgY29uc3Q7CiAgICBCb29sZWFuCXNuX2JhZHNhdmVm
KCkgY29uc3Q7CgogICAgdm9pZAlzbl9mb3J3KFNuYXAgKik7CiAgICB2b2lkCXNuX2lsc3QoSXRl
bSAqKTsKICAgIHZvaWQJc25fc2lkZW52KFNpZGVudiAqKTsKICAgIHZvaWQJcmV0YWtlX3RoaXNf
c25hcChCb29sZWFuKTsKICAgIHZvaWQJc25fYmFkc25hcChCb29sZWFuKTsKICAgIHZvaWQJc25f
YmFkaXRlbShCb29sZWFuKTsKICAgIHZvaWQJc25fYmFkc2F2ZWYoQm9vbGVhbik7CgogICAgbG9u
Zwlzbl9kc25wKCkgY29uc3QgeyByZXR1cm4gX3NuX2RzbnA7IH0KICAgIGxvbmcJc25fbGxjbnQo
KSBjb25zdCB7IHJldHVybiBfc25fbGxjbnQ7IH0KICAgIHVfaW50CXNuX2Jhc2VncmV5KCkgY29u
c3QgeyByZXR1cm4gX3NuX2Jhc2VncmV5OyB9CiAgICB1X2ludAlzbl9iYWR2Y3B1KCkgY29uc3Qg
eyByZXR1cm4gX3NuX2JhZHZjcHU7IH0KICAgIHVfaW50CXNuX2JhZGZyYW1lKCkgY29uc3QgeyBy
ZXR1cm4gX3NuX2JhZGZyYW1lOyB9CiAgICB1X2ludAlzbl9wYXNzKCkgY29uc3QgeyByZXR1cm4g
X3NuX3Bhc3M7IH0KICAgIHVfaW50CXNuX2NhbW51bSgpIGNvbnN0IHsgcmV0dXJuIF9zbl9jYW1u
dW07IH0KICAgIHVfaW50CXNuX3JwbmR4KCkgY29uc3QgeyByZXR1cm4gX3NuX3JwbmR4OyB9CiAg
ICB1X2ludAludW1iZXIoKSBjb25zdCB7IHJldHVybiBfc25fcnBuZHg7IH0KICAgIGludAkJc25f
YmFzZV9jb21wKCkgY29uc3QgeyByZXR1cm4gX3NuX2Jhc2VfY29tcDsgfQogICAgaW50CQlzbl8z
RHdpbl9hZGooKSBjb25zdCB7IHJldHVybiBfc25fM0R3aW5fYWRqOyB9CgogICAgdm9pZAlzbl9k
c25wKGxvbmcgdmFsKSB7IF9zbl9kc25wID0gdmFsOyB9CiAgICB2b2lkCXNuX2xsY250KGxvbmcg
dmFsKSB7IF9zbl9sbGNudCA9IHZhbDsgfQogICAgdm9pZAlzbl9iYXNlZ3JleSh1X2ludCB2YWwp
IHsgX3NuX2Jhc2VncmV5ID0gdmFsOyB9CiAgICB2b2lkCXNuX2JhZHZjcHUodV9pbnQgdmFsKSB7
IF9zbl9iYWR2Y3B1ID0gdmFsOyB9CiAgICB2b2lkCXNuX2JhZGZyYW1lKHVfaW50IHZhbCkgeyBf
c25fYmFkZnJhbWUgPSB2YWw7IH0KICAgIHZvaWQJc25fcGFzcyh1X2ludCB2YWwpIHsgX3NuX3Bh
c3MgPSB2YWw7IH0KICAgIHZvaWQJc25fY2FtbnVtKHVfaW50IHZhbCkgeyBfc25fY2FtbnVtID0g
dmFsOyB9CiAgICB2b2lkCXNuX3JwbmR4KHVfaW50IHZhbCkgeyBfc25fcnBuZHggPSB2YWw7IH0K
ICAgIHZvaWQJc25fYmFzZV9jb21wKGludCB2YWwpIHsgX3NuX2Jhc2VfY29tcCA9IHZhbDsgfQog
ICAgdm9pZAlzbl8zRHdpbl9hZGooaW50IHZhbCkgeyBfc25fM0R3aW5fYWRqID0gdmFsOyB9CgoK
CgogICAgflNuYXAoKTsKICAgIFNuYXAoKTsKCnByaXZhdGU6CiAgICB2b2lkCWVzc25wcmVsX2Jy
ZChIZHIgKik7CgogICAgU25hcCAqX3NuX2Zvcnc7CiAgICBJdGVtICpfc25faWxzdDsJCSAKICAg
IFNpZGVudiAqX3NuX3NpZGVudjsJCSAKCiAgICBCb29sZWFuIF9yZXRha2Vfc25hcDsJIAogICAg
Qm9vbGVhbiBfc25fYmFkc25hcDsJIAogICAgQm9vbGVhbiBfc25fYmFkaXRlbTsJIAogICAgQm9v
bGVhbiBfc25fYmFkc2F2ZWY7CSAKCiAgICBsb25nIF9zbl9kc25wOwkJIAogICAgbG9uZyBfc25f
bGxjbnQ7CQkgCgogICAgdV9zaG9ydCBfc25fYmFzZWdyZXk7CSAKCiAgICBzaG9ydCBfc25fM0R3
aW5fYWRqOwkgCgoKICAgIHVfc2hvcnQgX3NuX2JhZHZjcHU7CQkgCiAgICB1X3Nob3J0IF9zbl9i
YWRmcmFtZTsJIAoKICAgIHVfc2hvcnQgX3NuX3Bhc3M7CQkgCiAgICB1X3Nob3J0IF9zbl9jYW1u
dW07CQkgCgogICAgdV9zaG9ydCBfc25fcnBuZHg7CQkgCgogICAgc2hvcnQgX3NuX2Jhc2VfY29t
cDsJIAoKCn07CgppbmxpbmUgU25hcCAqClNuYXA6OnNuX2ZvcncoKSBjb25zdAp7CiAgICByZXR1
cm4oKCAgICBfc25fZm9ydyAgID8gKCAgU25hcCAqICApKCgoY2hhciAqKSAgICBfc25fZm9ydyAg
KSArIGdTaG1lbU9mZnNldCkgOiAoICBTbmFwICogICkwKSAgKTsKfQoKaW5saW5lIEl0ZW0gKgpT
bmFwOjpzbl9pbHN0KCkgY29uc3QKewogICAgcmV0dXJuKCggICAgX3NuX2lsc3QgICA/ICggIEl0
ZW0gKiAgKSgoKGNoYXIgKikgICAgX3NuX2lsc3QgICkgKyBnU2htZW1PZmZzZXQpIDogKCAgSXRl
bSAqICApMCkgICk7Cn0KCmlubGluZSBTaWRlbnYgKgpTbmFwOjpzbl9zaWRlbnYoKSBjb25zdAp7
CiAgICByZXR1cm4oKCAgICBfc25fc2lkZW52ICAgPyAoICBTaWRlbnYgKiAgKSgoKGNoYXIgKikg
ICAgX3NuX3NpZGVudiAgKSArIGdTaG1lbU9mZnNldCkgOiAoICBTaWRlbnYgKiAgKTApICApOwp9
CgppbmxpbmUgQm9vbGVhbgpTbmFwOjpyZXRha2VfdGhpc19zbmFwKCkgY29uc3QKewogICAgcmV0
dXJuIF9yZXRha2Vfc25hcDsKfQoKaW5saW5lIEJvb2xlYW4KU25hcDo6c25fYmFkc25hcCgpIGNv
bnN0CnsKICAgIHJldHVybiBfc25fYmFkc25hcDsKfQoKaW5saW5lIEJvb2xlYW4KU25hcDo6c25f
YmFkaXRlbSgpIGNvbnN0CnsKICAgIHJldHVybiBfc25fYmFkaXRlbTsKfQoKaW5saW5lIEJvb2xl
YW4KU25hcDo6c25fYmFkc2F2ZWYoKSBjb25zdAp7CiAgICByZXR1cm4gX3NuX2JhZHNhdmVmOwp9
CgppbmxpbmUgdm9pZApTbmFwOjpzbl9pbHN0KEl0ZW0gKmlsc3QpCnsKICAgIF9zbl9pbHN0ID0g
KCAgICBpbHN0ICAgPyAoICBJdGVtICogICkoKChjaGFyICopICAgIGlsc3QgICkgLSBnU2htZW1P
ZmZzZXQpIDogKCAgSXRlbSAqICApMCkgIDsKfQoKaW5saW5lIHZvaWQKU25hcDo6c25fZm9ydyhT
bmFwICpzbikKewogICAgX3NuX2ZvcncgPSAoICAgIHNuICAgPyAoICBTbmFwICogICkoKChjaGFy
ICopICAgIHNuICApIC0gZ1NobWVtT2Zmc2V0KSA6ICggIFNuYXAgKiAgKTApICA7Cn0KCmlubGlu
ZSB2b2lkClNuYXA6OnNuX3NpZGVudihTaWRlbnYgKmRhdGEpCnsKICAgIF9zbl9zaWRlbnYgPSAo
ICAgIGRhdGEgICA/ICggIFNpZGVudiAqICApKCgoY2hhciAqKSAgICBkYXRhICApIC0gZ1NobWVt
T2Zmc2V0KSA6ICggIFNpZGVudiAqICApMCkgIDsKfQoKaW5saW5lIHZvaWQKU25hcDo6cmV0YWtl
X3RoaXNfc25hcChCb29sZWFuIGlzX3NldCkKewogICAgX3JldGFrZV9zbmFwID0gaXNfc2V0Owp9
CgppbmxpbmUgdm9pZApTbmFwOjpzbl9iYWRzbmFwKEJvb2xlYW4gaXNfc2V0KQp7CiAgICBfc25f
YmFkc25hcCA9IGlzX3NldDsKfQoKaW5saW5lIHZvaWQKU25hcDo6c25fYmFkaXRlbShCb29sZWFu
IGlzX3NldCkKewogICAgX3NuX2JhZGl0ZW0gPSBpc19zZXQ7Cn0KCmlubGluZSB2b2lkClNuYXA6
OnNuX2JhZHNhdmVmKEJvb2xlYW4gaXNfc2V0KQp7CiAgICBfc25fYmFkc2F2ZWYgPSBpc19zZXQ7
Cn0KCgojIDEzICIuLi8uLi9pbmNsdWRlL2xpYmluYy9JbWFnZUJ1Zi5IIiAyCgoKIApjb25zdCB1
X2NoYXIga0ZvcmNlUHJpdmF0ZUJ1ZmZlcgk9IDB4ZmY7CSAKCmNvbnN0IGludCBrTWF4SUJCcwkJ
CT0gNDsKY29uc3QgaW50IGtCYW5rc1BlcklCQgkJCT0gMjsJIApjb25zdCBjYWRkcl90IGtJQkJD
b250cm9sUmVnaXN0ZXIJPSAoY2FkZHJfdCkweDAxMDAwMDAwOwpjb25zdCBjYWRkcl90IGtJQkJD
b2x1bW5TcmFtCQk9IChjYWRkcl90KTB4MDIwMDAwMDA7CmNvbnN0IGNhZGRyX3Qga0lCQlJvd1Ny
YW0JCT0gKGNhZGRyX3QpMHgwMzAwMDAwMDsKY29uc3QgY2FkZHJfdCBrSUJCRkJBZGRyZXNzQ291
bnRlcgk9IChjYWRkcl90KTB4MDQwMDAwMDA7CmNvbnN0IGZiYWRkcl90IGtJQkJGcmFtZUJ1ZmZl
ckJhbmswCT0gKGZiYWRkcl90KTB4MTAwMDAwMDA7CmNvbnN0IGZiYWRkcl90IGtJQkJGcmFtZUJ1
ZmZlckJhbmsxCT0gKGZiYWRkcl90KTB4MTgwMDAwMDA7CmNvbnN0IGludCBrSUJCQmFua09mZnNl
dE1hc2sJCT0gMHgwN0ZGRkZGRjsKCgpjb25zdCBsb25nIGtJQkJJbWFnZURvbmUJCT0gKDFMIDw8
IDMxKTsKCmNvbnN0IGxvbmcga1JUQ0NvbnRpbnVlSW5zcGVjdGlvbgk9IDB4MDAwMDAwMDBMOwpj
b25zdCBsb25nIGtSVENCZWdpbkZpcnN0U2NhbgkJPSAweDAwNDAwMDAwTDsKY29uc3QgbG9uZyBr
UlRDQmVnaW5MYXN0U2NhbgkJPSAweDAwODAwMDAwTDsKY29uc3QgbG9uZyBrUlRDRW5kU2NhbgkJ
CT0gMHgwMEMwMDAwMEw7CgogCgoKCgoKY29uc3QgaW50IGtJbWFnZUJ1Zk5vSW1hZ2UJCT0gMHhG
RkZGOwoKY2xhc3MgSW1hZ2VCdWYgewpwdWJsaWM6CiAgICBJbWFnZUJ1ZigpOwogICAgSW1hZ2VC
dWYoIGludCBpYmIsIGludCBiYW5rLCBpbnQgaW5kZXgsCgkgICAgICBTbmFwICogcFNuYXAgPSAo
U25hcCAqKV9fbnVsbCAgKTsKICAgIH5JbWFnZUJ1ZigpOwoKICAgICAKCgogICAgZmJhZGRyX3Qg
YWRkcihib29sIHdyaXRhYmxlID0gZmFsc2UpOyAgCiAgICAgCgoKCiAgICB2b2lkIHByaXZhdGVf
ZmIoZmJhZGRyX3QpOwogICAgZmJhZGRyX3QgcHJpdmF0ZV9mYigpIHsgcmV0dXJuKF9wcml2YXRl
X2ZiKTsgfQoKICAgIHZvaWQgdW5tYXAoKSB7fTsKCiAgICBTbmFwICogc25hcCgpIHsgcmV0dXJu
IF9zbmFwOyB9CiAgICB2b2lkIHNuYXAoU25hcCAqIHBTbmFwKSB7IF9zbmFwID0gcFNuYXA7IH0K
CiAgICAgCgoKCgogICAgaW50IGliYl9udW0oKTsKICAgIGludCBiYW5rKCk7CiAgICBpbnQgaW5k
ZXgoKTsKCiAgICAgCgoKICAgIGludCBjYW1lcmFfdG9fdXNlKCkgeyByZXR1cm4gX2NhbWVyYV90
b191c2U7IH0KICAgIHZvaWQgY2FtZXJhX3RvX3VzZShpbnQgY2FtKSB7IF9jYW1lcmFfdG9fdXNl
ID0gY2FtOyB9CgogICAgc2l6ZV90IGltYWdlX3NpemUoKSB7IHJldHVybiBfaW1hZ2Vfc2l6ZTsg
fQoKICAgICAKCgoKCiAgICB2b2lkIGNob29zZSggaW50IGliYiwgaW50IGJhbmssIGludCBpbmRl
eCwKICAgIAkJIFNuYXAgKiBwU25hcCA9IChTbmFwICopX19udWxsICApOwoKICAgIHN0YXRpYyB2
b2lkCQlmYm0oaW50IGliYl9udW0sIGludCBiYW5rLCBmYmFkZHJfdCBhZGRyKTsJCgpwcml2YXRl
OgogICAgbG9uZwkJX2Nvb2tpZTsKICAgIFNuYXAgKgkJX3NuYXA7CiAgICAgCgoKCiAgICBmYmFk
ZHJfdAkJX3ByaXZhdGVfZmI7CiAgICBmYmFkZHJfdAkJX3ByaXZhdGVfZmJfYnVmOwogICAgaW50
CQkJX2NhbWVyYV90b191c2U7CgogICAgIAoKCgogICAgc3RhdGljIGZiYWRkcl90CV9mYm1ba01h
eElCQnNdW2tCYW5rc1BlcklCQl07CgogICAgc3RhdGljIHNpemVfdAlfaW1hZ2Vfc2l6ZTsKCiAg
ICBzdGF0aWMgdm9pZAkJaW5pdCgpOwp9OwoKIyA2ICIuLi8uLi9pbmNsdWRlL2xvY2FsaW5jL0Ri
Z2N0cmwuSCIgMgoKCiMgMSAiLi4vLi4vaW5jbHVkZS9saWJpbmMvbGlidXRpbC5oIiAxCiMgMjI0
ICIuLi8uLi9pbmNsdWRlL2xpYmluYy9saWJ1dGlsLmgiCgoKIyAzNjIgIi4uLy4uL2luY2x1ZGUv
bGliaW5jL2xpYnV0aWwuaCIKCiMgMzk2ICIuLi8uLi9pbmNsdWRlL2xpYmluYy9saWJ1dGlsLmgi
CgojIDggIi4uLy4uL2luY2x1ZGUvbG9jYWxpbmMvRGJnY3RybC5IIiAyCgogCgoKCgoKCiAKCgoK
CgoKCgoKCgoKCnN0YXRpYyBjb25zdCBzaG9ydCBEQkdfQ0xFQVIJPSAwOwkgCnN0YXRpYyBjb25z
dCBzaG9ydCBEQkdfQ09QWQk9IDE7CSAKIAoKCgpzdGF0aWMgY29uc3Qgc2hvcnQgREJHX0NPUFlf
QUxMCT0gMDsJIApzdGF0aWMgY29uc3Qgc2hvcnQgREJHX0NPUFlfMgk9IDI7CSAKc3RhdGljIGNv
bnN0IHNob3J0IERCR19DT1BZXzQJPSA0OwkgCgpjbGFzcyBEYmdjdHJsIHsKcHJpdmF0ZToKICAg
ICAKCgoKICAgIHVfY2hhcgkqX3NoYXJlZF9mYl9wdHI7CSAKCiAgICAgCgoKCiAgICBzdGF0aWMg
dV9jaGFyICpfc2hhcmVkX2ZiX2FkZHI7CSAKCnB1YmxpYzoKICAgIHN0YXRpYyBEYmdjdHJsICpn
ZXQoKTsKCiAgICB1X2NoYXIJKmhvc3RfZmJfcHRyOwkgCiAgICBzaG9ydAlkYmdfc3RhdGU7CSAK
ICAgIHNob3J0CWRiZ19jb3B5OwkgCgogICAgdV9jaGFyCSpzaGFyZWRfZmJfcHRyKCk7CiAgICB2
b2lkCXNoYXJlZF9mYl9wdHIodV9jaGFyICpkYXRhKTsKICAgIHN0YXRpYyB1X2NoYXIgKnNoYXJl
ZF9mYl9hZGRyKCkgeyByZXR1cm4oX3NoYXJlZF9mYl9hZGRyKTsgfQogICAgc3RhdGljIHZvaWQg
c2hhcmVkX2ZiX2FkZHIodV9jaGFyICphZGRyKSB7IF9zaGFyZWRfZmJfYWRkciA9IGFkZHI7IH0K
fTsKCmlubGluZSB2b2lkCkRiZ2N0cmw6OnNoYXJlZF9mYl9wdHIodV9jaGFyICpkYXRhKQp7CiAg
ICBfc2hhcmVkX2ZiX3B0ciA9ICggICAgZGF0YSAgID8gKCAgdV9jaGFyICogICkoKChjaGFyICop
ICAgIGRhdGEgICkgLSBnU2htZW1PZmZzZXQpIDogKCAgdV9jaGFyICogICkwKSAgOwp9CgojIDIw
ICJzYXZlX3NuYXAuYyIgMgoKCiMgMSAiLi4vLi4vaW5jbHVkZS9saWJpbmMvVnN1YnMuaCIgMQoK
CgoKIyAxICIvdXNyL2luY2x1ZGUvbWVtb3J5LmgiIDEgMyA0CiAKIAoKIAogCiAKCgoKCiNwcmFn
bWEgaWRlbnQJIkAoIyltZW1vcnkuaAkxLjEzCTAwLzA3LzEwIFNNSSIJCgoKCgpleHRlcm4gIkMi
IHsKCgoKZXh0ZXJuIHZvaWQgKm1lbWNjcHkodm9pZCAqLCBjb25zdCB2b2lkICosIGludCwgc2l6
ZV90KTsKIyAzNCAiL3Vzci9pbmNsdWRlL21lbW9yeS5oIiAzIDQKCmV4dGVybiB2b2lkICptZW1j
aHIoY29uc3Qgdm9pZCAqLCBpbnQsIHNpemVfdCk7CgpleHRlcm4gdm9pZCAqbWVtY3B5KHZvaWQg
KiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwpleHRlcm4gdm9pZCAqbWVtc2V0KHZvaWQgKiwgaW50
LCBzaXplX3QpOwpleHRlcm4gaW50IG1lbWNtcChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwg
c2l6ZV90KTsKCgoKCgoKCgoKfQoKCgojIDUgIi4uLy4uL2luY2x1ZGUvbGliaW5jL1ZzdWJzLmgi
IDIKCgoKCgogCgoKCgogCgoKCnR5cGVkZWYJZW51bSB7IGtTdW1CeVJvd3MsIGtTdW1CeUNvbHVt
bnMsIGtFcnJvciB9IGVBbGdvRGlyZWN0aW9uOwoKdHlwZWRlZiBlbnVtIHsga1JpZ2h0LCBrTGVm
dCB9IGVCcmlkZ2VEaXJlY3Rpb247CiAKCgp0eXBlZGVmIGVudW0geyBrRGlyVXAsIGtEaXJEb3du
IH0gZVN1YkRpcmVjdGlvbjsKCgoKIAoKCnN0YXRpYwljb25zdAlpbnQJa0ZpbHRlclN1bVBpeGVs
cwk9IDA7CnN0YXRpYwljb25zdAlpbnQJa0ZpbHRlckNvdW50VHJhbnNsYXRpb25zPSAyOwpzdGF0
aWMJY29uc3QJaW50CWtGaWx0ZXJXZWlnaHRlZEF2ZXJhZ2UJPSAzOwpzdGF0aWMJY29uc3QJaW50
CWtGaWx0ZXJNZWRpYW4JCT0gNDsKc3RhdGljCWNvbnN0CWludAlrRmlsdGVyU3VtT3Zlck1pblBp
eGVsCT0gNjsKc3RhdGljCWNvbnN0CWludAlrRmlsdGVyVW5pZm9ybQkJPSA3OwpzdGF0aWMJY29u
c3QJaW50CWtGaWx0ZXJOb3JtYWxpemUJPSA5OwpzdGF0aWMJY29uc3QJaW50CWtGaWx0ZXJNaW5Q
aXhlbAkJPSAxMTsKc3RhdGljCWNvbnN0CWludAlrRmlsdGVyRmluZEdyZWF0ZXIJPSAxMzsKc3Rh
dGljCWNvbnN0CWludAlrRmlsdGVyRmluZExlc3MJCT0gMTU7CnN0YXRpYwljb25zdAlpbnQJa0Zp
bHRlck1hc2sJCT0gMHhmOwoKIAoKCgpzdGF0aWMJY29uc3QJaW50CWtGaWx0ZXJDbGFtcAkJPSAx
NjsKc3RhdGljCWNvbnN0CWludAlrRmlsdGVyRXJvZGVEaWFsYXRlCT0gMzI7CnN0YXRpYwljb25z
dAlpbnQJa0ZpbHRlckRpYWxhdGVFcm9kZQk9IDY0OwpzdGF0aWMJY29uc3QJaW50CWtGaWx0ZXJO
b0xvd1Bhc3NGaWx0ZXIJPSAyNTY7Cgp0eXBlZGVmCXVfbG9uZwlwYnVjX3Q7CnR5cGVkZWYgdV9j
aGFyCXBpeGVsX3Q7CgoKIyAyMiAic2F2ZV9zbmFwLmMiIDIKCiMgMSAiLi4vLi4vaW5jbHVkZS9s
b2NhbGluYy9GcmFtZS5IIiAxCgoKIAoKCgoKCgoKCgoKCgoKCmNsYXNzCVZjcHVyZXM7CmNsYXNz
CUNhbWRlc2M7CmNsYXNzCUltYWdlQnVmOwoKY2xhc3MgRnJhbWUgewpwdWJsaWM6CiAgICBXaW5k
CWZfd2luOwoKCiAgICAgCgoKCiAgICBGcmFtZSgpIDogX2RyYXdpbmdfY3Jvc3MoZmFsc2UpLCBf
ZHJhd2luZ19jaXJjbGUoZmFsc2UpLCBfZHJhd2luZ19saW5lKGZhbHNlKSB7fQogICAgRnJhbWUo
SW1hZ2VCdWYgKiwgQ2FtZGVzYyAqKTsKICAgIEZyYW1lKGludCwgQ2FtZGVzYyAqKTsKCgogICAg
IAoKCiAgICBsb25nCWhlaWdodCgpIGNvbnN0IHsgcmV0dXJuKF9mX2hlaWdodCk7IH0KICAgIGxv
bmcJd2lkdGgoKSBjb25zdCB7IHJldHVybihfZl93aWR0aCk7IH0KICAgIHZvaWQJcHJpbnQoY29u
c3QgV2luZCYpOwoKICAgIGJvb2wJY2hlY2tfd2luKFdpbmQgKmN3KSBjb25zdDsKCiAgICB2b2lk
CXNldF9mcmFtZV9idWZmZXIoaW50LCBDYW1kZXNjICosIGJvb2wgPSBmYWxzZSk7CiAgICB2b2lk
CXNldF9mcmFtZV9hZGRyZXNzKHVfY2hhciAqIGRhdGEpIHsgX2ZfZnJhZHIgPSBkYXRhOyB9Cgog
ICAgdm9pZAlWcmVjdChjb25zdCBXaW5kICp3aW4sIGludCBwZW4gPSAtMSwgaW50IGNvbCA9IC0x
KSBjb25zdDsKICAgIHZvaWQJVmNyb3NzKGludCBkd24sIGludCBhY2MsIGludCBsZW4pIGNvbnN0
OwogICAgdm9pZAlWaG9yaXooaW50IGR3biwgaW50IGFjYywgaW50IGwpIGNvbnN0OwogICAgdm9p
ZAlWdmVydChpbnQgZHduLCBpbnQgYWNjLCBpbnQgbCkgY29uc3Q7CiAgICB2b2lkCVZwaXhlbChp
bnQgZHduLCBpbnQgYWNjKSBjb25zdDsKICAgIHZvaWQJVmNpcmNsZSgpIGNvbnN0IHsgZHJhd19w
b2ludHMoKTsgfQogICAgdm9pZAlWY2lyY2xlKGNvbnN0IFdpbmQmIHcpIGNvbnN0OwoKICAgIHZv
aWQJVnByb2ZpbGUoKSBjb25zdCB7IGRyYXdfcG9pbnRzKCk7IH0KCiAgICAgCgoKICAgIHZvaWQJ
aW5pdF9kcmF3aW5nKCkgY29uc3Q7CgogICAgdm9pZAlWc3RhcnRfcHJvZmlsZSgpIGNvbnN0IHsg
aW5pdF9kcmF3aW5nKCk7IH0KICAgIHZvaWQJVnN0YXJ0X2NpcmNsZSgpIGNvbnN0OwogICAgIAoK
CiAgICB2b2lkCWRyYXdfY2lyY2xlKGludCwgaW50LCBpbnQpIGNvbnN0OwoKICAgIHZvaWQJVmxp
bmUoaW50IHgwLCBpbnQgeTAsIGludCB4MSwgaW50IHkxKSBjb25zdDsKICAgIGludAlWY2xpcChX
aW5kICp3KSBjb25zdDsKCiAgICAgCgoKCiAgICBpbnQJY3V0X2hpc3RvKHBidWNfdCAqaCwgY29u
c3QgV2luZCAqdywgaW50KSBjb25zdDsKICAgIHZvaWQJY3RoaXN0KHBidWNfdCAqLCBjb25zdCBX
aW5kICosIGludCkgY29uc3Q7CiAgICB2b2lkCWN0YXZnKFZjcHVyZXMgKnZyZXNwLCBXaW5kICp3
KTsKCiAgICBpbmxpbmUgdV9jaGFyCSpnZXRfZnJhbWVfb2Zmc2V0KGludCwgaW50KSBjb25zdDsK
ICAgIGlubGluZSB1X2NoYXIJKmdldF9jb2xvcl9mcmFtZV9vZmZzZXQoaW50LCBpbnQpIGNvbnN0
OwoKICAgIHZvaWQJd2luYWRqdXN0KFdpbmQgKnN3aW4pOwkJIAogICAgIAoKCgogICAgdm9pZAlz
aG93X3dpbihjb25zdCBXaW5kKiB3LCBjb25zdCBjaGFyICpwcm9tcHQsIGJvb2wgY2lyY2xlID0g
ZmFsc2UpIGNvbnN0OwoKcHJpdmF0ZToKICAgICAKCgogICAgbXV0YWJsZSBsb25nCV9taW5fYWNj
OwogICAgbXV0YWJsZSBsb25nCV9taW5fZHduOwogICAgbXV0YWJsZSBsb25nCV9tYXhfZHduOwog
ICAgbXV0YWJsZSBsb25nCV9tYXhfYWNjOwoKICAgIG11dGFibGUgQm9vbGVhbglfZHJhd2luZ19w
cm9maWxlOwogICAgbXV0YWJsZSBCb29sZWFuCV9kcmF3aW5nX2Nyb3NzOwogICAgbXV0YWJsZSBC
b29sZWFuCV9kcmF3aW5nX2NpcmNsZTsKICAgIG11dGFibGUgQm9vbGVhbglfZHJhd2luZ19saW5l
OwoKICAgIGxvbmcJX2Zfd2lkdGg7CSAKICAgIGxvbmcJX2ZfaGVpZ2h0OwkgCgogICAgdV9jaGFy
CSpfZl9mcmFkcjsKICAgICAKCgoKICAgIHZvaWQgZHJhd19waXhtYXAoYm9vbCwgaW50LCBpbnQs
IGludCwgaW50KSBjb25zdDsKICAgIHZvaWQgc3ltX2NpcihpbnQgeCwgaW50IHksIGludCB4X29m
ZiwgaW50IHlfb2ZmKSBjb25zdDsKICAgIHZvaWQgZHJhd19wb2ludHMoKSBjb25zdDsKfTsKCmlu
bGluZSB1X2NoYXIgKgpGcmFtZTo6Z2V0X2ZyYW1lX29mZnNldChpbnQgdXAsIGludCBsZWZ0KSBj
b25zdAp7CgoKCgoKCiAgICByZXR1cm4oJl9mX2ZyYWRyWyh1cCAqIF9mX3dpZHRoKSArIGxlZnRd
KTsKfQoKaW5saW5lIHVfY2hhciAqCkZyYW1lOjpnZXRfY29sb3JfZnJhbWVfb2Zmc2V0KGludCB1
cCwgaW50IGxlZnQpIGNvbnN0CnsKICAgIGlmICh1cCAmIDEpCgktLXVwOwogICAgCiAgICBpZiAo
bGVmdCAmIDEpCgktLWxlZnQ7CiAgICByZXR1cm4oZ2V0X2ZyYW1lX29mZnNldCh1cCwgbGVmdCkp
Owp9CgppbmxpbmUgYm9vbApGcmFtZTo6Y2hlY2tfd2luKFdpbmQgKmN3KSBjb25zdAp7CiAgICAg
CgoKICAgIGlmIChjdy0+IF9XaW4uc3cubGYgIDwgMCkKCWN3LT4gX1dpbi5zdy5sZiAgPSAwOwog
ICAgaWYgKGN3LT4gX1dpbi5zdy51cCAgPCAwKQoJY3ctPiBfV2luLnN3LnVwICA9IDA7CiAgICBp
ZiAoY3ctPiBfV2luLnN3LnJ0ICA+PSB3aWR0aCgpKQoJY3ctPiBfV2luLnN3LnJ0ICA9IHdpZHRo
KCkgLSAxOwogICAgaWYgKGN3LT4gX1dpbi5zdy5kbiAgPj0gaGVpZ2h0KCkpCgljdy0+IF9XaW4u
c3cuZG4gID0gaGVpZ2h0KCkgLSAxOwoKICAgICAKCgogICAgaWYgKGN3LT4gX1dpbi5zdy5sZiAg
Pj0gY3ctPiBfV2luLnN3LnJ0ICB8fCBjdy0+IF9XaW4uc3cudXAgID49IGN3LT4gX1dpbi5zdy5k
biApCglyZXR1cm4oZmFsc2UpOwoKICAgIHJldHVybih0cnVlKTsKfQoKaW5saW5lIHZvaWQKRnJh
bWU6OlZjaXJjbGUoY29uc3QgV2luZCYgdykgY29uc3QKewogICAgV2luZCBjbnRyKHcpOwogICAg
Y250ci5zMmMoKTsKICAgIGRyYXdfY2lyY2xlKGNudHIuIF9XaW4uY3cueCAsIGNudHIuIF9XaW4u
Y3cueSAsIChjbnRyLiBfV2luLmN3LmR4ICArIGNudHIuIF9XaW4uY3cuZHkgKSAvIDQpOwp9Cgpz
dGF0aWMgaW5saW5lIHZvaWQKVnJlY3QoY29uc3QgRnJhbWUgKmYsIGNvbnN0IFdpbmQgKndpbiwg
aW50IHBlbiA9IC0xLCBpbnQgY29sID0gLTEpCnsKICAgIGYtPlZyZWN0KHdpbiwgcGVuLCBjb2wp
Owp9CgpzdGF0aWMgaW5saW5lIHZvaWQKVmNyb3NzKGNvbnN0IEZyYW1lICpmLCBpbnQgZHduLCBp
bnQgYWNjLCBpbnQgbGVuKQp7CiAgICBmLT5WY3Jvc3MoZHduLCBhY2MsIGxlbik7Cn0KCnN0YXRp
YyBpbmxpbmUgdm9pZApWaG9yaXooY29uc3QgRnJhbWUgKmYsIGludCBkd24sIGludCBhY2MsIGlu
dCBsKQp7CiAgICBmLT5WaG9yaXooZHduLCBhY2MsIGwpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQK
VnZlcnQoY29uc3QgRnJhbWUgKmYsIGludCBkd24sIGludCBhY2MsIGludCBsKQp7CiAgICBmLT5W
dmVydChkd24sIGFjYywgbCk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZApWcGl4ZWwoY29uc3QgRnJh
bWUgKmYsIGludCBkd24sIGludCBhY2MpCnsKICAgIGYtPlZwaXhlbChkd24sIGFjYyk7Cn0KCnN0
YXRpYyBpbmxpbmUgdm9pZApWY2lyY2xlKGNvbnN0IEZyYW1lICpmKQp7CiAgICBmLT5WY2lyY2xl
KCk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZApWbGluZShjb25zdCBGcmFtZSAqZiwgaW50IHgwLCBp
bnQgeTAsIGludCB4MSwgaW50IHkxKQp7CiAgICBmLT5WbGluZSh4MCwgeTAsIHgxLCB5MSk7Cn0K
CnN0YXRpYyBpbmxpbmUgaW50ClZjbGlwKGNvbnN0IEZyYW1lICpmLCBXaW5kICp3KQp7CiAgICBy
ZXR1cm4oZi0+VmNsaXAodykpOwp9CgpzdGF0aWMgaW5saW5lIGludApjaGVja193aW4oV2luZCAq
Y3csIGNvbnN0IEZyYW1lICpmKQp7CiAgICByZXR1cm4oZi0+Y2hlY2tfd2luKGN3KSA/IDAgOiAt
MSk7Cn0KCiMgMjMgInNhdmVfc25hcC5jIiAyCgojIDEgIkluc3BlY3Rvci5IIiAxCgoKCgp1c2lu
ZyBuYW1lc3BhY2Ugc3RkOwoKCgpzdHJ1Y3Qgc25hcGFybXM7CgpjbGFzcyBQYXNzOwpjbGFzcyBB
bGlnbjsKY2xhc3MgVGhyZXNob2xkOwpjbGFzcyBIaWJ1OwpjbGFzcyBTbmFwU3BhY2U7CmNsYXNz
IEhkcjsKY2xhc3MgU25hcDsKY2xhc3MgU3luYzsKY2xhc3MgSXRlbTsKY2xhc3MgV2luZDsKY2xh
c3MgTWVtZGVzYzsKY2xhc3MgUmVzdWx0czsKY2xhc3MgY29uZmlndXJhdGlvbjsKY2xhc3MgRnJh
bWU7CmNsYXNzIEdyb3VwOwpjbGFzcyBGdW5uZWw7Cgpjb25zdCAgICAgaW50ICAgICBrRmlyc3RD
YW1lcmEgICAgPSAxOwplbnVtIGVTYXZlVHlwZSB7IGtTbmFwLCBrRnJhbWUsIGtGaWR1IH07Cgpj
bGFzcyBJbnNwZWN0b3IgewpwdWJsaWM6CiAgICBJbnNwZWN0b3IoKTsKICAgIHZpcnR1YWwgfklu
c3BlY3RvcigpIHt9CgogICAgdmlydHVhbCB2b2lkIG5vdF9mbHlpbmcoU25hcCAqKSB7fQogICAg
dmlydHVhbCB2b2lkIGRpc3BsYXlfcmVzdWx0cyhjb25zdCBHcm91cCAqKSB7fQogICAgdmlydHVh
bCB2b2lkIGRpc3BsYXlfM2Rfc25hcChpbnQgc25hcF9udW0pIHt9OwogICAgdmlydHVhbCBpbnQg
bXNuYXAoKTsKCiAgICAgCgoKICAgIHZpcnR1YWwgdm9pZCBwdXRfbWVzc2FnZShjb25zdCBzdHJp
bmcmIHN0cikgPSAwOwogICAgdmlydHVhbCB2b2lkIHJlcG9ydCgpIHt9CiAgICB2aXJ0dWFsIHZv
aWQgcmV2aWV3KGNvbnN0IFN5bmMgKkRzeSwgYm9vbCBhbGxfYm9hcmRzLCBib29sIGNhbl9jaGFu
Z2VfYWxnb3MpIHt9CgogICAgdmlydHVhbCBzbmFwX3Jlc190IHNuYXAoaW50IHNuYXBubywgaW50
IGNhbSwgYm9vbCBmaWR1ID0gZmFsc2UsIGNvbnN0IFN5bmMgKnN5bmMgPSAwLCBTbmFwICpuZXh0
X3NuYXAgPSAwKTsKCiAgICBzbmFwX3Jlc190IHNuYXAzZChpbnQgc25hcG5vLCBpbnQgY2FtLCBi
b29sIGZpZHUgPSBmYWxzZSwgY29uc3QgU3luYyAqc3luYyA9IDAsIFNuYXAgKm5leHRfc25hcCA9
IDApOwoKICAgIGxvbmcgYmFzZWdyZXkoRnJhbWUgKmYsIFNuYXBTcGFjZSAmc25hcF9zcGFjZSwg
U25hcCAqc25hcCk7CgogICAgaW50IGdldF9udW1fZmlkdSgpIHsgcmV0dXJuIF9udW1fZmlkdTsg
fQogICAgdm9pZCBzZXRfbnVtX2ZpZHUoaW50IHZhbCkgeyBfbnVtX2ZpZHUgPSB2YWw7fSAKCiAg
ICBBbGlnbiAqZ2V0X2FsaWduKCkgeyByZXR1cm4gX2FsaWduO30KICAgIHZvaWQgc2V0X2FsaWdu
KEFsaWduICp2YWwpIHtfYWxpZ24gPSB2YWw7fQoKICAgIGJvb2wgcmVnaXN0ZXJfYm9hcmQoY29u
c3QgU3luYyAqRHN5KTsKICAgIHZvaWQgc2hvd19pbnNwZWN0aW9uX2Vycm9ycygpOwogICAgIAoK
CgogICAgdm9pZCBzaG93X2FsbF9lcnJvcnMobG9uZyBpbngsIGJvb2wpOwogICAgIAoKCiAgICBi
b29sIGhhdmVfcmVzdWx0cygpIGNvbnN0IHsgcmV0dXJuKF9oYXZlX3Jlc3VsdHMpOyB9CiAgICAK
ICAgIHZvaWQgaGFyZHdhcmVfZmx5aW5nKGJvb2wgdmFsdWUpIHsgX2hhcmR3YXJlX2ZseWluZyA9
IHZhbHVlOyB9CiAgICBib29sIGhhcmR3YXJlX2ZseWluZygpIGNvbnN0IHsgcmV0dXJuKF9oYXJk
d2FyZV9mbHlpbmcpOyB9CgogICAgYm9vbCBsZXZlbDEoaW50IGFsZ28gPSAtMSwgRnVubmVsICpy
ZW1vdGUgPSBfX251bGwgLCBib29sIGZvcl8zZF9zbmFwID0gZmFsc2UpOwogICAgaW50IGxldmVs
MihpbnQgcGFzcyA9IC0xKTsKCiAgICBib29sIGluc3BlY3RfcGFzcyhib29sIGRvaW5nX2ZseWlu
Z19pbnNwZWN0aW9uLCBpbnQgYWxnbyA9IC0xKTsKICAgIGJvb2wgaW5zcGVjdF9zbmFwKFNuYXAg
KkRzLCBjb25zdCBTeW5jICpEc3ksIFNuYXAgKkRzX2ZvcncpOwoKICAgIGludCBzcGVjX29uZShT
bmFwICosIGNvbnN0IFN5bmMgKiwgaW50IHNuYXBubywgYm9vbCBzaG93X3dpbmRvd3MgPSBmYWxz
ZSwgSXRlbSAqID0gMCwgYm9vbCA9IGZhbHNlKTsKICAgIGludCByZXRha2VfYmFkX3NuYXBzKFN5
bmMgKkRzeSk7CgogICAgYm9vbCBxdWl0X2luc3BlY3Rpb24oKSBjb25zdCB7IHJldHVybihfcXVp
dF9pbnNwZWN0aW9uKTsgfQogICAgdm9pZCBxdWl0X2luc3BlY3Rpb24oYm9vbCB2YWwpIHsgX3F1
aXRfaW5zcGVjdGlvbiA9IHZhbDsgfQoKICAgIGJvb2wgY3VycmVudF9zbmFwX251bSgpIGNvbnN0
IHsgcmV0dXJuKF9jdXJfc25hcG5vKTsgfQogICAgdm9pZCBjdXJyZW50X3NuYXBfbnVtKGludCB2
YWwpIHsgX2N1cl9zbmFwbm8gPSB2YWw7IH0KCiAgICBib29sIGZyZXNoX2ZseV9qdXN0X2RvbmUo
KSBjb25zdCB7IHJldHVybihfZnJlc2hfZmx5X2p1c3RfZG9uZSk7IH0KICAgIHZvaWQgZnJlc2hf
Zmx5X2p1c3RfZG9uZShib29sIHZhbCkgeyBfZnJlc2hfZmx5X2p1c3RfZG9uZSA9IHZhbDsgfQoK
ICAgIFN5bmMgKiBnZXRfYm9hcmRfc3luY19wb2ludChpbnQgaW54ID0gLTEpOwogICAgCiAgICBp
bnQgc2F2ZV9zbmFwKGludCBzbiwgY29uc3QgU25hcCAqRHMsIGVTYXZlVHlwZSBzdHlsZSwgYm9v
bCBzYXZpbmdfYWxsX3NuYXBzKTsKICAgIHZvaWQgc2F2ZV9maWR1cyhjb25zdCBTeW5jICpEc3ks
IGJvb2wgc2F2aW5nX2FsbF9zbmFwcyk7Cgpwcm90ZWN0ZWQ6CiAgICBIZHIgKmVzcDsJCSAKICAg
IE1lbWRlc2MgKl9tZW1kcDsKCiAgICBzdGF0aWMgYm9vbCBfcXVpdF9pbnNwZWN0aW9uOwogICAg
aW50IF9jdXJfc25hcG5vOwkJIAogICAgaW50IF9zeW5jX2lkOwogICAgYm9vbCBfZG9pbmdfZmx5
aW5nX2luc3BlY3Rpb247CgogICAgaW50IF9iYWRfc25hcF9jb3VudGVyOwogICAgYm9vbCBfb2tf
dG9fcnVuX3JldmlldzsKICAgIGJvb2wgX2ZyZXNoX2ZseV9qdXN0X2RvbmU7CgogICAgYm9vbCBw
cm9jZXNzX3NuYXAoU25hcCAqRHMsIFN5bmMgKkRzeSk7CiAgICBpbnQgZmlkdWNpYWxzKGNvbnN0
IFN5bmMgKiwgRnJhbWUgKik7CgogICAgdmlydHVhbCBib29sIGNoZWNrX21vdmVfYWhlYWQoU25h
cCAqbnMpIHsgcmV0dXJuKG5zICE9IDApOyB9CiAgICB2aXJ0dWFsIGJvb2wgY2hlY2tfaW50ZXJh
Y3RpdmUoU3luYyAqRHN5KSB7IHJldHVybihmYWxzZSk7IH0KICAgIHZpcnR1YWwgYm9vbCBjaGVj
a19xdWl0KGNvbnN0IFNuYXAgKikgeyByZXR1cm4oZmFsc2UpOyB9CiAgICB2aXJ0dWFsIGJvb2wg
cmV2aWV3X2R1cmluZyhJdGVtICpqdXN0bWUsIFJlc3VsdHMgKkRyLCBjb25zdCBTeW5jICosIEl0
ZW0gKiwgU25hcCAqKSB7IHJldHVybihmYWxzZSk7IH0KICAgIHZpcnR1YWwgdm9pZCByZXN0b3Jl
X3NuYXBfc2VsZWN0aW9uKCkge30KICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVfc2NyZWVuKCkge30K
ICAgIHZpcnR1YWwgYm9vbCBzZXRfc2VyaWFsKCkgeyByZXR1cm4oZmFsc2UpOyB9CiAgICB2aXJ0
dWFsIGJvb2wgY2hlY2tfc3BjbF9mbGFncyhpbnQsIGJvb2wsIGludCkgeyByZXR1cm4gKGZhbHNl
KTsgfQogICAgYm9vbAltYWNoaW5lX2ZseWluZ19zaW5nbGVfc25hcChib29sLCBpbnQsIHN0cnVj
dCBzbmFwYXJtcyosIEZ1bm5lbCAqKTsKCnByaXZhdGU6CiAgICBib29sCV9oYXZlX3Jlc3VsdHM7
CiAgICBib29sCV9oYXJkd2FyZV9mbHlpbmc7CiAgICBpbnQJCV9udW1fZmlkdTsJCSAKICAgIGlu
dAkJX3JldHJ5X2NvdW50OwogICAgQWxpZ24JKl9hbGlnbjsKCiAgICB2b2lkCXNhdmVfaW1hZ2Uo
aW50IHNuYXBubywgYm9vbCBmaWR1ID0gZmFsc2UpOwogICAgaW50CQljaGVja19ncm91cChHcm91
cCAqRGcpOwogICAgdm9pZAltYWNoaW5lX2ZseWluZ19pbnNwZWN0aW9uKEZ1bm5lbCAqcmVtb3Rl
LCBib29sIGZseWluZ19zaW5nbGVfcGFzcyk7CiAgICBsb25nCWNhbGNfY2dsMTAoSGlidSAqaGgs
IHVfaW50IG5ncmF5KTsKCiAgICBib29sCWluc3BlY3RfZmlkdWNpYWwoRnJhbWUgKiwgaW50LCBJ
dGVtICosIFNuYXAmICwgY29uc3QgU3luYyAqLCBSZXN1bHRzICosIFdpbmQgKiwgV2luZCAqKTsK
CiAgICBib29sCWRlYnVnX29uKGNvbnN0IEl0ZW0gKkRpKSBjb25zdDsKICAgIFNuYXAgKglmaW5k
X25leHRfZmlkdShpbnQgZmlkdV9udW0pOwogICAgdm9pZAlkcmF3X2ZpZHVjaWFsX3dpbmRvdyhX
aW5kJiBmd2luLCBJdGVtICpEaSk7CgogICAgIAoKCiAgICBib29sCWNhbl9mbHlfZmlkdWNpYWxz
KCk7CiAgICBib29sCWZseV9maWR1Y2lhbHMoKTsKICAgIGludCAgICAgICAgIGJ1aWxkX2ZpZHVj
aWFsX3NuYXBzKCk7CiAgICB2b2lkICAgICAgICBmbHlfZmlkdWNpYWxfc25hcHMoKTsKICAgIHZv
aWQJd2Fsa19maWR1Y2lhbHMoY29uc3QgU3luYyAqLCBGcmFtZSAqLCBQYXNzICopOwogICAgIAoK
Cgp9OwoKZXh0ZXJuIEluc3BlY3RvciAqaW5zcGVjdG9yOwoKIyAyNCAic2F2ZV9zbmFwLmMiIDIK
CiMgMSAiLi4vLi4vaW5jbHVkZS9sb2NhbGluYy9IZHIuSCIgMQoKCgogCgoKCgoKCgojIDEgIi9v
cHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8u
Li8uLi9pbmNsdWRlL2crKy0zL3NldCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgojIDEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUu
My8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF90cmVlLmgiIDEgMwogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvb3B0
L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvLi4vLi4vLi4v
Li4vaW5jbHVkZS9nKystMy9zdGxfZnVuY3Rpb24uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCiAKCgoKCgoKIAoKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+CnN0
cnVjdCB1bmFyeV9mdW5jdGlvbiB7CiAgdHlwZWRlZiBfQXJnIGFyZ3VtZW50X3R5cGU7CiAgdHlw
ZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFz
cyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4Kc3RydWN0IGJpbmFyeV9mdW5jdGlvbiB7CiAgdHlwZWRl
ZiBfQXJnMSBmaXJzdF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX0FyZzIgc2Vjb25kX2FyZ3Vt
ZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwp9OyAgICAgIAoKdGVtcGxh
dGUgPGNsYXNzIF9UcD4Kc3RydWN0IHBsdXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxf
VHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195
KSBjb25zdCB7IHJldHVybiBfX3ggKyBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0
cnVjdCBtaW51cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAg
b3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJu
IF9feCAtIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG11bHRpcGxpZXMg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCko
Y29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggKiBfX3k7
IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBkaXZpZGVzIDogcHVibGljIGJpbmFy
eV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194
LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IC8gX195OyB9Cn07CgogCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPiBpbmxpbmUgX1RwIGlkZW50aXR5X2VsZW1lbnQocGx1czxfVHA+KSB7
CiAgcmV0dXJuIF9UcCgwKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBpbmxpbmUgX1RwIGlkZW50
aXR5X2VsZW1lbnQobXVsdGlwbGllczxfVHA+KSB7CiAgcmV0dXJuIF9UcCgxKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9UcD4Kc3RydWN0IG1vZHVsdXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9U
cCxfVHAsX1RwPiAKewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAm
IF9feSkgY29uc3QgeyByZXR1cm4gX194ICUgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgpzdHJ1Y3QgbmVnYXRlIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfVHA+IAp7CiAgX1Rw
IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIC1fX3g7IH0KfTsKCnRl
bXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBlcXVhbF90byA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp
b248X1RwLF9UcCxib29sPiAKewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u
c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA9PSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBub3RfZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9U
cCxfVHAsYm9vbD4gCnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9U
cCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggIT0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPgpzdHJ1Y3QgZ3JlYXRlciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29s
PiAKewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNv
bnN0IHsgcmV0dXJuIF9feCA+IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0
IGxlc3MgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4gCnsKICBib29sIG9w
ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBf
X3ggPCBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyX2VxdWFs
IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9y
KCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPj0g
X195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzc19lcXVhbCA6IHB1Ymxp
YyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPiAKewogIGJvb2wgb3BlcmF0b3IoKShjb25z
dCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA8PSBfX3k7IH0K
fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX2FuZCA6IHB1YmxpYyBiaW5h
cnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYg
X194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICYmIF9feTsgfQp9OwoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfb3IgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0
aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u
c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCB8fCBfX3k7IH0KfTsKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX25vdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAs
Ym9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4g
IV9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIHVuYXJ5X25lZ2F0
ZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50
X3R5cGUsIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgog
IGV4cGxpY2l0IHVuYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChf
X3gpIHt9CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3Vt
ZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCk7CiAgfQp9OwoK
dGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0
ZT4gCm5vdDEoY29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIHVuYXJ5X25lZ2F0
ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4gCmNs
YXNzIGJpbmFyeV9uZWdhdGUgCiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9Q
cmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sPiB7CnByb3RlY3RlZDoKICBfUHJlZGljYXRlIF9NX3ByZWQ7CnB1
YmxpYzoKICBleHBsaWNpdCBiaW5hcnlfbmVnYXRlKGNvbnN0IF9QcmVkaWNhdGUmIF9feCkgOiBf
TV9wcmVkKF9feCkge30KICBib29sIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0
ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194LCAKICAgICAgICAgICAgICAgICAgY29uc3QgdHlw
ZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feSkgY29uc3QKICB7CiAg
ICByZXR1cm4gIV9NX3ByZWQoX194LCBfX3kpOyAKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1By
ZWRpY2F0ZT4KaW5saW5lIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4gCm5vdDIoY29uc3QgX1By
ZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19w
cmVkKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24+IApjbGFzcyBiaW5kZXIxc3QKICA6
IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1l
bnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpy
ZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3Bl
cmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMXN0KGNv
bnN0IF9PcGVyYXRpb24mIF9feCwKICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlv
bjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX195KQogICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkg
e30KICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3Qg
dHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3Qgewog
ICAgcmV0dXJuIG9wKHZhbHVlLCBfX3gpOyAKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJh
dGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMXN0PF9PcGVyYXRpb24+IApiaW5kMXN0KGNv
bnN0IF9PcGVyYXRpb24mIF9fb3BlciwgY29uc3QgX1RwJiBfX3gpIAp7CiAgdHlwZWRlZiB0eXBl
bmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlIF9BcmcxX3R5cGU7CiAgcmV0dXJu
IGJpbmRlcjFzdDxfT3BlcmF0aW9uPihfX29wZXIsIF9BcmcxX3R5cGUoX194KSk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfT3BlcmF0aW9uPiAKY2xhc3MgYmluZGVyMm5kCiAgOiBwdWJsaWMgdW5hcnlf
ZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpw
cm90ZWN0ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRf
YXJndW1lbnRfdHlwZSB2YWx1ZTsKcHVibGljOgogIGJpbmRlcjJuZChjb25zdCBfT3BlcmF0aW9u
JiBfX3gsCiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1
bWVudF90eXBlJiBfX3kpIAogICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkge30KICB0eXBlbmFt
ZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09w
ZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3Ao
X194LCB2YWx1ZSk7IAogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uLCBjbGFzcyBf
VHA+CmlubGluZSBiaW5kZXIybmQ8X09wZXJhdGlvbj4gCmJpbmQybmQoY29uc3QgX09wZXJhdGlv
biYgX19vcGVyLCBjb25zdCBfVHAmIF9feCkgCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRp
b246OnNlY29uZF9hcmd1bWVudF90eXBlIF9BcmcyX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjJuZDxf
T3BlcmF0aW9uPihfX29wZXIsIF9BcmcyX3R5cGUoX194KSk7Cn0KCiAKCnRlbXBsYXRlIDxjbGFz
cyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjI+CmNsYXNzIHVuYXJ5X2NvbXBvc2UKICA6
IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlw
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0
X3R5cGU+IAp7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9uMSBfX29wMTsKICBfT3BlcmF0aW9uMiBf
X29wMjsKcHVibGljOgogIHVuYXJ5X2NvbXBvc2UoY29uc3QgX09wZXJhdGlvbjEmIF9feCwgY29u
c3QgX09wZXJhdGlvbjImIF9feSkgCiAgICA6IF9fb3AxKF9feCksIF9fb3AyKF9feSkge30KICB0
eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVu
YW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBf
X29wMShfX29wMihfX3gpKTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNs
YXNzIF9PcGVyYXRpb24yPgppbmxpbmUgdW5hcnlfY29tcG9zZTxfT3BlcmF0aW9uMSxfT3BlcmF0
aW9uMj4gCmNvbXBvc2UxKGNvbnN0IF9PcGVyYXRpb24xJiBfX29wMSwgY29uc3QgX09wZXJhdGlv
bjImIF9fb3AyKQp7CiAgcmV0dXJuIHVuYXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsX09wZXJhdGlv
bjI+KF9fb3AxLCBfX29wMik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3Mg
X09wZXJhdGlvbjIsIGNsYXNzIF9PcGVyYXRpb24zPgpjbGFzcyBiaW5hcnlfY29tcG9zZQogIDog
cHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBl
LAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpyZXN1bHRf
dHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbjEgX01fb3AxOwogIF9PcGVyYXRpb24yIF9N
X29wMjsKICBfT3BlcmF0aW9uMyBfTV9vcDM7CnB1YmxpYzoKICBiaW5hcnlfY29tcG9zZShjb25z
dCBfT3BlcmF0aW9uMSYgX194LCBjb25zdCBfT3BlcmF0aW9uMiYgX195LCAKICAgICAgICAgICAg
ICAgICBjb25zdCBfT3BlcmF0aW9uMyYgX196KSAKICAgIDogX01fb3AxKF9feCksIF9NX29wMihf
X3kpLCBfTV9vcDMoX196KSB7IH0KICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5cGUK
ICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBlJiBf
X3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV9vcDEoX01fb3AyKF9feCksIF9NX29wMyhfX3gpKTsK
ICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRpb24yLCBj
bGFzcyBfT3BlcmF0aW9uMz4KaW5saW5lIGJpbmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLCBfT3Bl
cmF0aW9uMiwgX09wZXJhdGlvbjM+IApjb21wb3NlMihjb25zdCBfT3BlcmF0aW9uMSYgX19vcDEs
IGNvbnN0IF9PcGVyYXRpb24yJiBfX29wMiwgCiAgICAgICAgIGNvbnN0IF9PcGVyYXRpb24zJiBf
X29wMykKewogIHJldHVybiBiaW5hcnlfY29tcG9zZTxfT3BlcmF0aW9uMSxfT3BlcmF0aW9uMixf
T3BlcmF0aW9uMz4KICAgIChfX29wMSwgX19vcDIsIF9fb3AzKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9BcmcsIGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24gOiBw
dWJsaWMgdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6CiAgX1Jlc3Vs
dCAoKl9NX3B0cikoX0FyZyk7CnB1YmxpYzoKICBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKCkg
e30KICBleHBsaWNpdCBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9B
cmcpKSA6IF9NX3B0cihfX3gpIHt9CiAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcgX194KSBjb25z
dCB7IHJldHVybiBfTV9wdHIoX194KTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNz
IF9SZXN1bHQ+CmlubGluZSBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+
IHB0cl9mdW4oX1Jlc3VsdCAoKl9feCkoX0FyZykpCnsKICByZXR1cm4gcG9pbnRlcl90b191bmFy
eV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PihfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEs
IGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX2JpbmFyeV9mdW5j
dGlvbiA6IAogIHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4gewpw
cm90ZWN0ZWQ6CiAgICBfUmVzdWx0ICgqX01fcHRyKShfQXJnMSwgX0FyZzIpOwpwdWJsaWM6CiAg
ICBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbigpIHt9CiAgICBleHBsaWNpdCBwb2ludGVyX3Rv
X2JpbmFyeV9mdW5jdGlvbihfUmVzdWx0ICgqX194KShfQXJnMSwgX0FyZzIpKSAKICAgICAgOiBf
TV9wdHIoX194KSB7fQogICAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcxIF9feCwgX0FyZzIgX195
KSBjb25zdCB7CiAgICAgIHJldHVybiBfTV9wdHIoX194LCBfX3kpOwogICAgfQp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4KaW5saW5lIHBvaW50
ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+IApwdHJfZnVuKF9SZXN1
bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpIHsKICByZXR1cm4gcG9pbnRlcl90b19iaW5hcnlfZnVu
Y3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4oX194KTsKfQoKIAp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgpzdHJ1Y3QgX0lkZW50aXR5IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfVHA+IHsKICBj
b25zdCBfVHAmIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsg
fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IGlkZW50aXR5IDogcHVibGljIF9JZGVu
dGl0eTxfVHA+IHt9OwoKIAp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0MXN0
IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlw
ZT4gewogIGNvbnN0IHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVyYXRvcigpKGNvbnN0
IF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAgfQp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9QYWlyPgpzdHJ1Y3QgX1NlbGVjdDJuZCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlv
bjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlPgp7CiAgY29uc3QgdHlwZW5hbWUg
X1BhaXI6OnNlY29uZF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0IHsK
ICAgIHJldHVybiBfX3guc2Vjb25kOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4gc3Ry
dWN0IHNlbGVjdDFzdCA6IHB1YmxpYyBfU2VsZWN0MXN0PF9QYWlyPiB7fTsKdGVtcGxhdGUgPGNs
YXNzIF9QYWlyPiBzdHJ1Y3Qgc2VsZWN0Mm5kIDogcHVibGljIF9TZWxlY3QybmQ8X1BhaXI+IHt9
OwoKIAp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgX1Byb2plY3Qx
c3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLCBfQXJnMiwgX0FyZzE+IHsKICBfQXJn
MSBvcGVyYXRvcigpKGNvbnN0IF9BcmcxJiBfX3gsIGNvbnN0IF9BcmcyJikgY29uc3QgeyByZXR1
cm4gX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3Qg
X1Byb2plY3QybmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLCBfQXJnMiwgX0FyZzI+
IHsKICBfQXJnMiBvcGVyYXRvcigpKGNvbnN0IF9BcmcxJiwgY29uc3QgX0FyZzImIF9feSkgY29u
c3QgeyByZXR1cm4gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9Bcmcy
PiAKc3RydWN0IHByb2plY3Qxc3QgOiBwdWJsaWMgX1Byb2plY3Qxc3Q8X0FyZzEsIF9BcmcyPiB7
fTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzI+CnN0cnVjdCBwcm9qZWN0Mm5k
IDogcHVibGljIF9Qcm9qZWN0Mm5kPF9BcmcxLCBfQXJnMj4ge307CgogCiAKIAp0ZW1wbGF0ZSA8
Y2xhc3MgX1Jlc3VsdD4Kc3RydWN0IGNvbnN0YW50X3ZvaWRfZnVuCnsKICB0eXBlZGVmIF9SZXN1
bHQgcmVzdWx0X3R5cGU7CiAgcmVzdWx0X3R5cGUgX192YWw7CiAgY29uc3RhbnRfdm9pZF9mdW4o
Y29uc3QgcmVzdWx0X3R5cGUmIF9fdikgOiBfX3ZhbChfX3YpIHt9CiAgY29uc3QgcmVzdWx0X3R5
cGUmIG9wZXJhdG9yKCkoKSBjb25zdCB7IHJldHVybiBfX3ZhbDsgfQp9OyAgCgoKdGVtcGxhdGUg
PGNsYXNzIF9SZXN1bHQsIGNsYXNzIF9Bcmd1bWVudCA9IF9SZXN1bHQ+CgoKCnN0cnVjdCBjb25z
dGFudF91bmFyeV9mdW4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X0FyZ3VtZW50LCBfUmVzdWx0
PiB7CiAgX1Jlc3VsdCBfTV92YWw7CiAgY29uc3RhbnRfdW5hcnlfZnVuKGNvbnN0IF9SZXN1bHQm
IF9fdikgOiBfTV92YWwoX192KSB7fQogIGNvbnN0IF9SZXN1bHQmIG9wZXJhdG9yKCkoY29uc3Qg
X0FyZ3VtZW50JikgY29uc3QgeyByZXR1cm4gX01fdmFsOyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNz
IF9SZXN1bHQsIGNsYXNzIF9BcmcxID0gX1Jlc3VsdCwgY2xhc3MgX0FyZzIgPSBfQXJnMT4KCgoK
c3RydWN0IGNvbnN0YW50X2JpbmFyeV9mdW4gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9Bcmcx
LCBfQXJnMiwgX1Jlc3VsdD4gewogIF9SZXN1bHQgX01fdmFsOwogIGNvbnN0YW50X2JpbmFyeV9m
dW4oY29uc3QgX1Jlc3VsdCYgX192KSA6IF9NX3ZhbChfX3YpIHt9CiAgY29uc3QgX1Jlc3VsdCYg
b3BlcmF0b3IoKShjb25zdCBfQXJnMSYsIGNvbnN0IF9BcmcyJikgY29uc3QgewogICAgcmV0dXJu
IF9NX3ZhbDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4KaW5saW5lIGNvbnN0YW50
X3ZvaWRfZnVuPF9SZXN1bHQ+IGNvbnN0YW50MChjb25zdCBfUmVzdWx0JiBfX3ZhbCkKewogIHJl
dHVybiBjb25zdGFudF92b2lkX2Z1bjxfUmVzdWx0PihfX3ZhbCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfUmVzdWx0PgppbmxpbmUgY29uc3RhbnRfdW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdD4gY29u
c3RhbnQxKGNvbnN0IF9SZXN1bHQmIF9fdmFsKQp7CiAgcmV0dXJuIGNvbnN0YW50X3VuYXJ5X2Z1
bjxfUmVzdWx0LF9SZXN1bHQ+KF9fdmFsKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+Cmlu
bGluZSBjb25zdGFudF9iaW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdCxfUmVzdWx0PiAKY29uc3Rh
bnQyKGNvbnN0IF9SZXN1bHQmIF9fdmFsKQp7CiAgcmV0dXJuIGNvbnN0YW50X2JpbmFyeV9mdW48
X1Jlc3VsdCxfUmVzdWx0LF9SZXN1bHQ+KF9fdmFsKTsKfQoKIAogCmNsYXNzIHN1YnRyYWN0aXZl
X3JuZyA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludD4g
ewpwcml2YXRlOgogIHVuc2lnbmVkIGludCBfTV90YWJsZVs1NV07CiAgc2l6ZV90IF9NX2luZGV4
MTsKICBzaXplX3QgX01faW5kZXgyOwpwdWJsaWM6CiAgdW5zaWduZWQgaW50IG9wZXJhdG9yKCko
dW5zaWduZWQgaW50IF9fbGltaXQpIHsKICAgIF9NX2luZGV4MSA9IChfTV9pbmRleDEgKyAxKSAl
IDU1OwogICAgX01faW5kZXgyID0gKF9NX2luZGV4MiArIDEpICUgNTU7CiAgICBfTV90YWJsZVtf
TV9pbmRleDFdID0gX01fdGFibGVbX01faW5kZXgxXSAtIF9NX3RhYmxlW19NX2luZGV4Ml07CiAg
ICByZXR1cm4gX01fdGFibGVbX01faW5kZXgxXSAlIF9fbGltaXQ7CiAgfQoKICB2b2lkIF9NX2lu
aXRpYWxpemUodW5zaWduZWQgaW50IF9fc2VlZCkKICB7CiAgICB1bnNpZ25lZCBpbnQgX19rID0g
MTsKICAgIF9NX3RhYmxlWzU0XSA9IF9fc2VlZDsKICAgIHNpemVfdCBfX2k7CiAgICBmb3IgKF9f
aSA9IDA7IF9faSA8IDU0OyBfX2krKykgewogICAgICAgIHNpemVfdCBfX2lpID0gKDIxICogKF9f
aSArIDEpICUgNTUpIC0gMTsKICAgICAgICBfTV90YWJsZVtfX2lpXSA9IF9fazsKICAgICAgICBf
X2sgPSBfX3NlZWQgLSBfX2s7CiAgICAgICAgX19zZWVkID0gX01fdGFibGVbX19paV07CiAgICB9
CiAgICBmb3IgKGludCBfX2xvb3AgPSAwOyBfX2xvb3AgPCA0OyBfX2xvb3ArKykgewogICAgICAg
IGZvciAoX19pID0gMDsgX19pIDwgNTU7IF9faSsrKQogICAgICAgICAgICBfTV90YWJsZVtfX2ld
ID0gX01fdGFibGVbX19pXSAtIF9NX3RhYmxlWygxICsgX19pICsgMzApICUgNTVdOwogICAgfQog
ICAgX01faW5kZXgxID0gMDsKICAgIF9NX2luZGV4MiA9IDMxOwogIH0KCiAgc3VidHJhY3RpdmVf
cm5nKHVuc2lnbmVkIGludCBfX3NlZWQpIHsgX01faW5pdGlhbGl6ZShfX3NlZWQpOyB9CiAgc3Vi
dHJhY3RpdmVfcm5nKCkgeyBfTV9pbml0aWFsaXplKDE2MTgwMzM5OHUpOyB9Cn07CgoKIAoKIAog
CiAKIAogCiAKIAoKIAogCiAKIAogCgogCiAKIAogCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg
Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwKixf
UmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3QoX1JldCAoX1RwOjoqX19wZikoKSkg
OiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25zdCB7IHJldHVy
biAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3QgOiBw
dWJsaWMgdW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNp
dCBjb25zdF9tZW1fZnVuX3QoX1JldCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYp
IHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wKSBjb25zdCB7IHJldHVybiAoX19w
LT4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoK
dGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl9yZWZfdCA6IHB1
YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1
bl9yZWZfdChfUmV0IChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJh
dG9yKCkoX1RwJiBfX3IpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToK
ICBfUmV0IChfVHA6OipfTV9mKSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9U
cD4KY2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAs
X1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9yZWZfdChfUmV0IChfVHA6
OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3Qg
X1RwJiBfX3IpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0
IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9U
cCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248
X1RwKixfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3QoX1JldCAoX1Rw
OjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9f
cCwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6
CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xh
c3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90IDogcHVibGljIGJpbmFy
eV9mdW5jdGlvbjxjb25zdCBfVHAqLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29u
c3RfbWVtX2Z1bjFfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYp
IHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QKICAg
IHsgcmV0dXJuIChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01f
ZikoX0FyZykgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFz
cyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1Rw
LF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1Rw
OjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9f
ciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToK
ICBfUmV0IChfVHA6OipfTV9mKShfQXJnKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFz
cyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90IDogcHVibGljIGJp
bmFyeV9mdW5jdGlvbjxfVHAsX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9t
ZW1fZnVuMV9yZWZfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYp
IHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyBy
ZXR1cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9B
cmcpIGNvbnN0Owp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3Q8dm9p
ZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLHZvaWQ+IHsKcHVibGljOgogIGV4
cGxpY2l0IG1lbV9mdW5fdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICB2
b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0
ZToKICB2b2lkIChfVHA6OipfTV9mKSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3Mg
Y29uc3RfbWVtX2Z1bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248Y29uc3Qg
X1RwKix2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3Qodm9pZCAoX1Rw
OjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0
IF9UcCogX19wKSBjb25zdCB7IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1Rw
OjoqX01fZikoKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5f
cmVmX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsdm9pZD4gewpwdWJs
aWM6CiAgZXhwbGljaXQgbWVtX2Z1bl9yZWZfdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2Yo
X19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3IpIGNvbnN0IHsgKF9fci4qX01fZiko
KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlf
ZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVm
X3Qodm9pZCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVy
YXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToK
ICB2b2lkIChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+IDogcHVibGljIGJpbmFy
eV9mdW5jdGlvbjxfVHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFf
dCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRv
cigpKF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QgeyAoX19wLT4qX01fZikoX194KTsgfQpwcml2
YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+IAogIDog
cHVibGljIGJpbmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAg
ZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkg
OiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wLCBfQXJnIF9f
eCkgY29uc3QgeyAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9N
X2YpKF9BcmcpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xh
c3MgbWVtX2Z1bjFfcmVmX3Q8dm9pZCwgX1RwLCBfQXJnPgogIDogcHVibGljIGJpbmFyeV9mdW5j
dGlvbjxfVHAsX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV9yZWZfdCh2
b2lkIChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigp
KF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6
CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBw
dWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0
IGNvbnN0X21lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9N
X2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IsIF9BcmcgX194KSBj
b25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShf
QXJnKSBjb25zdDsKfTsKCgoKIAogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9U
cD4KaW5saW5lIG1lbV9mdW5fdDxfUmV0LF9UcD4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKCkp
CiAgeyByZXR1cm4gbWVtX2Z1bl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVu
KF9SZXQgKF9UcDo6Kl9fZikoKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuX3Q8X1Jl
dCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBt
ZW1fZnVuX3JlZl90PF9SZXQsX1RwPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKCkpIAog
IHsgcmV0dXJuIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFz
cyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3JlZl90PF9SZXQsX1RwPiBt
ZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKCkgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVt
X2Z1bl9yZWZfdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNz
IF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1
bihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3Q8X1JldCxfVHAs
X0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0Fy
Zz4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bihfUmV0IChf
VHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxf
VHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3Mg
X0FyZz4KaW5saW5lIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW5fcmVmKF9S
ZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAs
X0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0Fy
Zz4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+Cm1lbV9mdW5fcmVm
KF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFf
cmVmX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNz
IF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1
bjEoX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV90PF9SZXQsX1Rw
LF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9B
cmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4xKF9SZXQg
KF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfdDxfUmV0
LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFz
cyBfQXJnPgppbmxpbmUgbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bjFfcmVm
KF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfcmVmX3Q8X1JldCxf
VHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3Mg
X0FyZz4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+Cm1lbV9mdW4x
X3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9m
dW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCiAKCgoKIAogCiAKIyA1OSAiL29wdC9t
dnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4u
L2luY2x1ZGUvZysrLTMvc3RsX3RyZWUuaCIgMiAzCgoKICAKCgoKCgp0eXBlZGVmIGJvb2wgX1Ji
X3RyZWVfQ29sb3JfdHlwZTsKY29uc3QgX1JiX3RyZWVfQ29sb3JfdHlwZSBfU19yYl90cmVlX3Jl
ZCA9IGZhbHNlOwpjb25zdCBfUmJfdHJlZV9Db2xvcl90eXBlIF9TX3JiX3RyZWVfYmxhY2sgPSB0
cnVlOwoKc3RydWN0IF9SYl90cmVlX25vZGVfYmFzZQp7CiAgdHlwZWRlZiBfUmJfdHJlZV9Db2xv
cl90eXBlIF9Db2xvcl90eXBlOwogIHR5cGVkZWYgX1JiX3RyZWVfbm9kZV9iYXNlKiBfQmFzZV9w
dHI7CgogIF9Db2xvcl90eXBlIF9NX2NvbG9yOyAKICBfQmFzZV9wdHIgX01fcGFyZW50OwogIF9C
YXNlX3B0ciBfTV9sZWZ0OwogIF9CYXNlX3B0ciBfTV9yaWdodDsKCiAgc3RhdGljIF9CYXNlX3B0
ciBfU19taW5pbXVtKF9CYXNlX3B0ciBfX3gpCiAgewogICAgd2hpbGUgKF9feC0+X01fbGVmdCAh
PSAwKSBfX3ggPSBfX3gtPl9NX2xlZnQ7CiAgICByZXR1cm4gX194OwogIH0KCiAgc3RhdGljIF9C
YXNlX3B0ciBfU19tYXhpbXVtKF9CYXNlX3B0ciBfX3gpCiAgewogICAgd2hpbGUgKF9feC0+X01f
cmlnaHQgIT0gMCkgX194ID0gX194LT5fTV9yaWdodDsKICAgIHJldHVybiBfX3g7CiAgfQp9OwoK
dGVtcGxhdGUgPGNsYXNzIF9WYWx1ZT4Kc3RydWN0IF9SYl90cmVlX25vZGUgOiBwdWJsaWMgX1Ji
X3RyZWVfbm9kZV9iYXNlCnsKICB0eXBlZGVmIF9SYl90cmVlX25vZGU8X1ZhbHVlPiogX0xpbmtf
dHlwZTsKICBfVmFsdWUgX01fdmFsdWVfZmllbGQ7Cn07CgoKc3RydWN0IF9SYl90cmVlX2Jhc2Vf
aXRlcmF0b3IKewogIHR5cGVkZWYgX1JiX3RyZWVfbm9kZV9iYXNlOjpfQmFzZV9wdHIgX0Jhc2Vf
cHRyOwogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdv
cnk7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIF9CYXNlX3B0ciBfTV9u
b2RlOwoKICB2b2lkIF9NX2luY3JlbWVudCgpCiAgewogICAgaWYgKF9NX25vZGUtPl9NX3JpZ2h0
ICE9IDApIHsKICAgICAgX01fbm9kZSA9IF9NX25vZGUtPl9NX3JpZ2h0OwogICAgICB3aGlsZSAo
X01fbm9kZS0+X01fbGVmdCAhPSAwKQogICAgICAgIF9NX25vZGUgPSBfTV9ub2RlLT5fTV9sZWZ0
OwogICAgfQogICAgZWxzZSB7CiAgICAgIF9CYXNlX3B0ciBfX3kgPSBfTV9ub2RlLT5fTV9wYXJl
bnQ7CiAgICAgIHdoaWxlIChfTV9ub2RlID09IF9feS0+X01fcmlnaHQpIHsKICAgICAgICBfTV9u
b2RlID0gX195OwogICAgICAgIF9feSA9IF9feS0+X01fcGFyZW50OwogICAgICB9CiAgICAgIGlm
IChfTV9ub2RlLT5fTV9yaWdodCAhPSBfX3kpCiAgICAgICAgX01fbm9kZSA9IF9feTsKICAgIH0K
ICB9CgogIHZvaWQgX01fZGVjcmVtZW50KCkKICB7CiAgICBpZiAoX01fbm9kZS0+X01fY29sb3Ig
PT0gX1NfcmJfdHJlZV9yZWQgJiYKICAgICAgICBfTV9ub2RlLT5fTV9wYXJlbnQtPl9NX3BhcmVu
dCA9PSBfTV9ub2RlKQogICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01fcmlnaHQ7CiAgICBlbHNl
IGlmIChfTV9ub2RlLT5fTV9sZWZ0ICE9IDApIHsKICAgICAgX0Jhc2VfcHRyIF9feSA9IF9NX25v
ZGUtPl9NX2xlZnQ7CiAgICAgIHdoaWxlIChfX3ktPl9NX3JpZ2h0ICE9IDApCiAgICAgICAgX195
ID0gX195LT5fTV9yaWdodDsKICAgICAgX01fbm9kZSA9IF9feTsKICAgIH0KICAgIGVsc2Ugewog
ICAgICBfQmFzZV9wdHIgX195ID0gX01fbm9kZS0+X01fcGFyZW50OwogICAgICB3aGlsZSAoX01f
bm9kZSA9PSBfX3ktPl9NX2xlZnQpIHsKICAgICAgICBfTV9ub2RlID0gX195OwogICAgICAgIF9f
eSA9IF9feS0+X01fcGFyZW50OwogICAgICB9CiAgICAgIF9NX25vZGUgPSBfX3k7CiAgICB9CiAg
fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX1JlZiwgY2xhc3MgX1B0cj4Kc3Ry
dWN0IF9SYl90cmVlX2l0ZXJhdG9yIDogcHVibGljIF9SYl90cmVlX2Jhc2VfaXRlcmF0b3IKewog
IHR5cGVkZWYgX1ZhbHVlIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfUmVmIHJlZmVyZW5jZTsKICB0
eXBlZGVmIF9QdHIgcG9pbnRlcjsKICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwg
X1ZhbHVlJiwgX1ZhbHVlKj4gICAgICAgICAgICAgCiAgICBpdGVyYXRvcjsKICB0eXBlZGVmIF9S
Yl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgY29uc3QgX1ZhbHVlJiwgY29uc3QgX1ZhbHVlKj4gCiAg
ICBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgX1Jl
ZiwgX1B0cj4gICAgICAgICAgICAgICAgICAgCiAgICBfU2VsZjsKICB0eXBlZGVmIF9SYl90cmVl
X25vZGU8X1ZhbHVlPiogX0xpbmtfdHlwZTsKCiAgX1JiX3RyZWVfaXRlcmF0b3IoKSB7fQogIF9S
Yl90cmVlX2l0ZXJhdG9yKF9MaW5rX3R5cGUgX194KSB7IF9NX25vZGUgPSBfX3g7IH0KICBfUmJf
dHJlZV9pdGVyYXRvcihjb25zdCBpdGVyYXRvciYgX19pdCkgeyBfTV9ub2RlID0gX19pdC5fTV9u
b2RlOyB9CgogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBfTGlua190eXBl
KF9NX25vZGUpLT5fTV92YWx1ZV9maWVsZDsgfQoKICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25z
dCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKCiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7IF9N
X2luY3JlbWVudCgpOyByZXR1cm4gKnRoaXM7IH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewog
ICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIF9NX2luY3JlbWVudCgpOwogICAgcmV0dXJuIF9f
dG1wOwogIH0KICAgIAogIF9TZWxmJiBvcGVyYXRvci0tKCkgeyBfTV9kZWNyZW1lbnQoKTsgcmV0
dXJuICp0aGlzOyB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0g
KnRoaXM7CiAgICBfTV9kZWNyZW1lbnQoKTsKICAgIHJldHVybiBfX3RtcDsKICB9Cn07Cgppbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVlX2Jhc2VfaXRlcmF0b3ImIF9feCwKICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yJiBfX3kpIHsK
ICByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9NX25vZGU7Cn0KCmlubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgX1JiX3RyZWVfYmFzZV9pdGVyYXRvciYgX194LAogICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IF9SYl90cmVlX2Jhc2VfaXRlcmF0b3ImIF9feSkgewogIHJldHVybiBfX3gu
X01fbm9kZSAhPSBfX3kuX01fbm9kZTsKfQoKIyAyMTQgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1s
aWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0
bF90cmVlLmgiIDMKCgppbmxpbmUgdm9pZCAKX1JiX3RyZWVfcm90YXRlX2xlZnQoX1JiX3RyZWVf
bm9kZV9iYXNlKiBfX3gsIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCkKewogIF9SYl90cmVl
X25vZGVfYmFzZSogX195ID0gX194LT5fTV9yaWdodDsKICBfX3gtPl9NX3JpZ2h0ID0gX195LT5f
TV9sZWZ0OwogIGlmIChfX3ktPl9NX2xlZnQgIT0wKQogICAgX195LT5fTV9sZWZ0LT5fTV9wYXJl
bnQgPSBfX3g7CiAgX195LT5fTV9wYXJlbnQgPSBfX3gtPl9NX3BhcmVudDsKCiAgaWYgKF9feCA9
PSBfX3Jvb3QpCiAgICBfX3Jvb3QgPSBfX3k7CiAgZWxzZSBpZiAoX194ID09IF9feC0+X01fcGFy
ZW50LT5fTV9sZWZ0KQogICAgX194LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3k7CiAgZWxzZQog
ICAgX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0gX195OwogIF9feS0+X01fbGVmdCA9IF9feDsK
ICBfX3gtPl9NX3BhcmVudCA9IF9feTsKfQoKaW5saW5lIHZvaWQgCl9SYl90cmVlX3JvdGF0ZV9y
aWdodChfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCwgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290
KQp7CiAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX2xlZnQ7CiAgX194LT5fTV9s
ZWZ0ID0gX195LT5fTV9yaWdodDsKICBpZiAoX195LT5fTV9yaWdodCAhPSAwKQogICAgX195LT5f
TV9yaWdodC0+X01fcGFyZW50ID0gX194OwogIF9feS0+X01fcGFyZW50ID0gX194LT5fTV9wYXJl
bnQ7CgogIGlmIChfX3ggPT0gX19yb290KQogICAgX19yb290ID0gX195OwogIGVsc2UgaWYgKF9f
eCA9PSBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQpCiAgICBfX3gtPl9NX3BhcmVudC0+X01fcmln
aHQgPSBfX3k7CiAgZWxzZQogICAgX194LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3k7CiAgX195
LT5fTV9yaWdodCA9IF9feDsKICBfX3gtPl9NX3BhcmVudCA9IF9feTsKfQoKaW5saW5lIHZvaWQg
Cl9SYl90cmVlX3JlYmFsYW5jZShfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCwgX1JiX3RyZWVfbm9k
ZV9iYXNlKiYgX19yb290KQp7CiAgX194LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogIHdo
aWxlIChfX3ggIT0gX19yb290ICYmIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9PSBfU19yYl90
cmVlX3JlZCkgewogICAgaWYgKF9feC0+X01fcGFyZW50ID09IF9feC0+X01fcGFyZW50LT5fTV9w
YXJlbnQtPl9NX2xlZnQpIHsKICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9N
X3BhcmVudC0+X01fcGFyZW50LT5fTV9yaWdodDsKICAgICAgaWYgKF9feSAmJiBfX3ktPl9NX2Nv
bG9yID09IF9TX3JiX3RyZWVfcmVkKSB7CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9y
ID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICBfX3ktPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9i
bGFjazsKICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3Ji
X3RyZWVfcmVkOwogICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQ7CiAgICAg
IH0KICAgICAgZWxzZSB7CiAgICAgICAgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01fcmln
aHQpIHsKICAgICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50OwogICAgICAgICAgX1JiX3RyZWVf
cm90YXRlX2xlZnQoX194LCBfX3Jvb3QpOwogICAgICAgIH0KICAgICAgICBfX3gtPl9NX3BhcmVu
dC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgIF9feC0+X01fcGFyZW50LT5f
TV9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgX1JiX3RyZWVfcm90
YXRlX3JpZ2h0KF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQsIF9fcm9vdCk7CiAgICAgIH0KICAg
IH0KICAgIGVsc2UgewogICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9feC0+X01fcGFy
ZW50LT5fTV9wYXJlbnQtPl9NX2xlZnQ7CiAgICAgIGlmIChfX3kgJiYgX195LT5fTV9jb2xvciA9
PSBfU19yYl90cmVlX3JlZCkgewogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9T
X3JiX3RyZWVfYmxhY2s7CiAgICAgICAgX195LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7
CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVl
X3JlZDsKICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50OwogICAgICB9CiAg
ICAgIGVsc2UgewogICAgICAgIGlmIChfX3ggPT0gX194LT5fTV9wYXJlbnQtPl9NX2xlZnQpIHsK
ICAgICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50OwogICAgICAgICAgX1JiX3RyZWVfcm90YXRl
X3JpZ2h0KF9feCwgX19yb290KTsKICAgICAgICB9CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9N
X2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFy
ZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgIF9SYl90cmVlX3JvdGF0ZV9s
ZWZ0KF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQsIF9fcm9vdCk7CiAgICAgIH0KICAgIH0KICB9
CiAgX19yb290LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7Cn0KCmlubGluZSBfUmJfdHJl
ZV9ub2RlX2Jhc2UqCl9SYl90cmVlX3JlYmFsYW5jZV9mb3JfZXJhc2UoX1JiX3RyZWVfbm9kZV9i
YXNlKiBfX3osCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNl
KiYgX19yb290LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFz
ZSomIF9fbGVmdG1vc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfbm9k
ZV9iYXNlKiYgX19yaWdodG1vc3QpCnsKICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9fejsK
ICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCA9IDA7CiAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3hf
cGFyZW50ID0gMDsKICBpZiAoX195LT5fTV9sZWZ0ID09IDApICAgICAgCiAgICBfX3ggPSBfX3kt
Pl9NX3JpZ2h0OyAgICAgIAogIGVsc2UKICAgIGlmIChfX3ktPl9NX3JpZ2h0ID09IDApICAgCiAg
ICAgIF9feCA9IF9feS0+X01fbGVmdDsgICAgIAogICAgZWxzZSB7ICAgICAgICAgICAgICAgICAg
ICAKICAgICAgX195ID0gX195LT5fTV9yaWdodDsgICAgCiAgICAgIHdoaWxlIChfX3ktPl9NX2xl
ZnQgIT0gMCkKICAgICAgICBfX3kgPSBfX3ktPl9NX2xlZnQ7CiAgICAgIF9feCA9IF9feS0+X01f
cmlnaHQ7CiAgICB9CiAgaWYgKF9feSAhPSBfX3opIHsgICAgICAgICAgIAogICAgX196LT5fTV9s
ZWZ0LT5fTV9wYXJlbnQgPSBfX3k7IAogICAgX195LT5fTV9sZWZ0ID0gX196LT5fTV9sZWZ0Owog
ICAgaWYgKF9feSAhPSBfX3otPl9NX3JpZ2h0KSB7CiAgICAgIF9feF9wYXJlbnQgPSBfX3ktPl9N
X3BhcmVudDsKICAgICAgaWYgKF9feCkgX194LT5fTV9wYXJlbnQgPSBfX3ktPl9NX3BhcmVudDsK
ICAgICAgX195LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3g7ICAgICAgIAogICAgICBfX3ktPl9N
X3JpZ2h0ID0gX196LT5fTV9yaWdodDsKICAgICAgX196LT5fTV9yaWdodC0+X01fcGFyZW50ID0g
X195OwogICAgfQogICAgZWxzZQogICAgICBfX3hfcGFyZW50ID0gX195OyAgCiAgICBpZiAoX19y
b290ID09IF9feikKICAgICAgX19yb290ID0gX195OwogICAgZWxzZSBpZiAoX196LT5fTV9wYXJl
bnQtPl9NX2xlZnQgPT0gX196KQogICAgICBfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feTsK
ICAgIGVsc2UgCiAgICAgIF9fei0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feTsKICAgIF9feS0+
X01fcGFyZW50ID0gX196LT5fTV9wYXJlbnQ7CiAgICAgOjpzd2FwKF9feS0+X01fY29sb3IsIF9f
ei0+X01fY29sb3IpOwogICAgX195ID0gX196OwogICAgIAogIH0KICBlbHNlIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgCiAgICBfX3hfcGFyZW50ID0gX195LT5fTV9wYXJlbnQ7CiAgICBpZiAo
X194KSBfX3gtPl9NX3BhcmVudCA9IF9feS0+X01fcGFyZW50OyAgIAogICAgaWYgKF9fcm9vdCA9
PSBfX3opCiAgICAgIF9fcm9vdCA9IF9feDsKICAgIGVsc2UgCiAgICAgIGlmIChfX3otPl9NX3Bh
cmVudC0+X01fbGVmdCA9PSBfX3opCiAgICAgICAgX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBf
X3g7CiAgICAgIGVsc2UKICAgICAgICBfX3otPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3g7CiAg
ICBpZiAoX19sZWZ0bW9zdCA9PSBfX3opIAogICAgICBpZiAoX196LT5fTV9yaWdodCA9PSAwKSAg
ICAgICAgIAogICAgICAgIF9fbGVmdG1vc3QgPSBfX3otPl9NX3BhcmVudDsKICAgICAKICAgICAg
ZWxzZQogICAgICAgIF9fbGVmdG1vc3QgPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0o
X194KTsKICAgIGlmIChfX3JpZ2h0bW9zdCA9PSBfX3opICAKICAgICAgaWYgKF9fei0+X01fbGVm
dCA9PSAwKSAgICAgICAgICAKICAgICAgICBfX3JpZ2h0bW9zdCA9IF9fei0+X01fcGFyZW50OyAg
CiAgICAgCiAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgIF9fcmlnaHRt
b3N0ID0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVtKF9feCk7CiAgfQogIGlmIChfX3kt
Pl9NX2NvbG9yICE9IF9TX3JiX3RyZWVfcmVkKSB7IAogICAgd2hpbGUgKF9feCAhPSBfX3Jvb3Qg
JiYgKF9feCA9PSAwIHx8IF9feC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFjaykpCiAgICAg
IGlmIChfX3ggPT0gX194X3BhcmVudC0+X01fbGVmdCkgewogICAgICAgIF9SYl90cmVlX25vZGVf
YmFzZSogX193ID0gX194X3BhcmVudC0+X01fcmlnaHQ7CiAgICAgICAgaWYgKF9fdy0+X01fY29s
b3IgPT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfU19yYl90
cmVlX2JsYWNrOwogICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX3Jl
ZDsKICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAg
ICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9yaWdodDsKICAgICAgICB9CiAgICAgICAgaWYg
KChfX3ctPl9NX2xlZnQgPT0gMCB8fCAKICAgICAgICAgICAgIF9fdy0+X01fbGVmdC0+X01fY29s
b3IgPT0gX1NfcmJfdHJlZV9ibGFjaykgJiYKICAgICAgICAgICAgKF9fdy0+X01fcmlnaHQgPT0g
MCB8fCAKICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVf
YmxhY2spKSB7CiAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAg
ICAgICBfX3ggPSBfX3hfcGFyZW50OwogICAgICAgICAgX194X3BhcmVudCA9IF9feF9wYXJlbnQt
Pl9NX3BhcmVudDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKF9fdy0+X01fcmlnaHQg
PT0gMCB8fCAKICAgICAgICAgICAgICBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9PSBfU19yYl90
cmVlX2JsYWNrKSB7CiAgICAgICAgICAgIGlmIChfX3ctPl9NX2xlZnQpIF9fdy0+X01fbGVmdC0+
X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0g
X1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3csIF9f
cm9vdCk7CiAgICAgICAgICAgIF9fdyA9IF9feF9wYXJlbnQtPl9NX3JpZ2h0OwogICAgICAgICAg
fQogICAgICAgICAgX193LT5fTV9jb2xvciA9IF9feF9wYXJlbnQtPl9NX2NvbG9yOwogICAgICAg
ICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgaWYg
KF9fdy0+X01fcmlnaHQpIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFj
azsKICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAg
ICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAg
IAogICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX193ID0gX194X3BhcmVudC0+X01fbGVmdDsK
ICAgICAgICBpZiAoX193LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkgewogICAgICAgICAg
X193LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICBfX3hfcGFyZW50LT5f
TV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0
KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9sZWZ0
OwogICAgICAgIH0KICAgICAgICBpZiAoKF9fdy0+X01fcmlnaHQgPT0gMCB8fCAKICAgICAgICAg
ICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2spICYmCiAgICAg
ICAgICAgIChfX3ctPl9NX2xlZnQgPT0gMCB8fCAKICAgICAgICAgICAgIF9fdy0+X01fbGVmdC0+
X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFjaykpIHsKICAgICAgICAgIF9fdy0+X01fY29sb3Ig
PSBfU19yYl90cmVlX3JlZDsKICAgICAgICAgIF9feCA9IF9feF9wYXJlbnQ7CiAgICAgICAgICBf
X3hfcGFyZW50ID0gX194X3BhcmVudC0+X01fcGFyZW50OwogICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICBpZiAoX193LT5fTV9sZWZ0ID09IDAgfHwgCiAgICAgICAgICAgICAgX193LT5fTV9sZWZ0
LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX2JsYWNrKSB7CiAgICAgICAgICAgIGlmIChfX3ctPl9N
X3JpZ2h0KSBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAg
ICAgICAgIF9fdy0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICAgICAgX1JiX3Ry
ZWVfcm90YXRlX2xlZnQoX193LCBfX3Jvb3QpOwogICAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50
LT5fTV9sZWZ0OwogICAgICAgICAgfQogICAgICAgICAgX193LT5fTV9jb2xvciA9IF9feF9wYXJl
bnQtPl9NX2NvbG9yOwogICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVl
X2JsYWNrOwogICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCkgX193LT5fTV9sZWZ0LT5fTV9jb2xv
ciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX194
X3BhcmVudCwgX19yb290KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAg
aWYgKF9feCkgX194LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgfQogIHJldHVybiBf
X3k7Cn0KCiAKIAogCiAKCgoKIAp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2MsIGJv
b2wgX1NfaW5zdGFuY2VsZXNzPgpjbGFzcyBfUmJfdHJlZV9hbGxvY19iYXNlIHsKcHVibGljOgog
IHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46OmFsbG9jYXRvcl90
eXBlIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25z
dCB7IHJldHVybiBfTV9ub2RlX2FsbG9jYXRvcjsgfQoKICBfUmJfdHJlZV9hbGxvY19iYXNlKGNv
bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX25vZGVfYWxsb2NhdG9yKF9fYSksIF9N
X2hlYWRlcigwKSB7fQoKcHJvdGVjdGVkOgogIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1JiX3Ry
ZWVfbm9kZTxfVHA+LCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgIF9NX25vZGVf
YWxsb2NhdG9yOwogIF9SYl90cmVlX25vZGU8X1RwPiogX01faGVhZGVyOwoKICBfUmJfdHJlZV9u
b2RlPF9UcD4qIF9NX2dldF9ub2RlKCkgCiAgICB7IHJldHVybiBfTV9ub2RlX2FsbG9jYXRvci5h
bGxvY2F0ZSgxKTsgfQogIHZvaWQgX01fcHV0X25vZGUoX1JiX3RyZWVfbm9kZTxfVHA+KiBfX3Ap
IAogICAgeyBfTV9ub2RlX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgMSk7IH0KfTsKCiAKdGVt
cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBfUmJfdHJlZV9hbGxvY19iYXNl
PF9UcCwgX0FsbG9jLCB0cnVlPiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190
cmFpdHM8X1RwLCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxv
Y2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUo
KTsgfQoKICBfUmJfdHJlZV9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikgOiBfTV9o
ZWFkZXIoMCkge30KCnByb3RlY3RlZDoKICBfUmJfdHJlZV9ub2RlPF9UcD4qIF9NX2hlYWRlcjsK
CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9SYl90cmVlX25vZGU8X1RwPiwgX0Fs
bG9jPjo6X0FsbG9jX3R5cGUKICAgICAgICAgIF9BbGxvY190eXBlOwoKICBfUmJfdHJlZV9ub2Rl
PF9UcD4qIF9NX2dldF9ub2RlKCkKICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgx
KTsgfQogIHZvaWQgX01fcHV0X25vZGUoX1JiX3RyZWVfbm9kZTxfVHA+KiBfX3ApCiAgICB7IF9B
bGxvY190eXBlOjpkZWFsbG9jYXRlKF9fcCwgMSk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9SYl90cmVlX2Jhc2UKICA6IHB1YmxpYyBfUmJfdHJlZV9h
bGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Fs
bG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX1Ji
X3RyZWVfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgICAgICAg
IF9CYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRv
cl90eXBlOwoKICBfUmJfdHJlZV9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIAogICAg
OiBfQmFzZShfX2EpIHsgX01faGVhZGVyID0gX01fZ2V0X25vZGUoKTsgfQogIH5fUmJfdHJlZV9i
YXNlKCkgeyBfTV9wdXRfbm9kZShfTV9oZWFkZXIpOyB9Cgp9OwoKIyA1MTkgIi9vcHQvbXZwbG9j
YWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNs
dWRlL2crKy0zL3N0bF90cmVlLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Zh
bHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBf
QWxsb2MgPSBhbGxvY2F0b3I8IF9WYWx1ZSA+ICA+CmNsYXNzIF9SYl90cmVlIDogcHJvdGVjdGVk
IF9SYl90cmVlX2Jhc2U8X1ZhbHVlLCBfQWxsb2M+IHsKICB0eXBlZGVmIF9SYl90cmVlX2Jhc2U8
X1ZhbHVlLCBfQWxsb2M+IF9CYXNlOwpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2Rl
X2Jhc2UqIF9CYXNlX3B0cjsKICB0eXBlZGVmIF9SYl90cmVlX25vZGU8X1ZhbHVlPiBfUmJfdHJl
ZV9ub2RlOwogIHR5cGVkZWYgX1JiX3RyZWVfQ29sb3JfdHlwZSBfQ29sb3JfdHlwZTsKcHVibGlj
OgogIHR5cGVkZWYgX0tleSBrZXlfdHlwZTsKICB0eXBlZGVmIF9WYWx1ZSB2YWx1ZV90eXBlOwog
IHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUq
IGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7CiAgdHlwZWRl
ZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBfUmJfdHJlZV9u
b2RlKiBfTGlua190eXBlOwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0
cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9j
YXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3Io
KSBjb25zdCB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9Cgpwcm90ZWN0ZWQ6CgoK
CgoKCnByb3RlY3RlZDoKCiAgX0xpbmtfdHlwZSBfTV9jcmVhdGVfbm9kZShjb25zdCB2YWx1ZV90
eXBlJiBfX3gpCiAgewogICAgX0xpbmtfdHlwZSBfX3RtcCA9IF9NX2dldF9ub2RlKCk7CiAgICB0
cnkgIHsKICAgICAgY29uc3RydWN0KCZfX3RtcC0+X01fdmFsdWVfZmllbGQsIF9feCk7CiAgICB9
CiAgICBjYXRjaCguLi4pIHsgIF9NX3B1dF9ub2RlKF9fdG1wKSA7IHRocm93OyB9IDsKICAgIHJl
dHVybiBfX3RtcDsKICB9CgogIF9MaW5rX3R5cGUgX01fY2xvbmVfbm9kZShfTGlua190eXBlIF9f
eCkKICB7CiAgICBfTGlua190eXBlIF9fdG1wID0gX01fY3JlYXRlX25vZGUoX194LT5fTV92YWx1
ZV9maWVsZCk7CiAgICBfX3RtcC0+X01fY29sb3IgPSBfX3gtPl9NX2NvbG9yOwogICAgX190bXAt
Pl9NX2xlZnQgPSAwOwogICAgX190bXAtPl9NX3JpZ2h0ID0gMDsKICAgIHJldHVybiBfX3RtcDsK
ICB9CgogIHZvaWQgZGVzdHJveV9ub2RlKF9MaW5rX3R5cGUgX19wKQogIHsKICAgIGRlc3Ryb3ko
Jl9fcC0+X01fdmFsdWVfZmllbGQpOwogICAgX01fcHV0X25vZGUoX19wKTsKICB9Cgpwcm90ZWN0
ZWQ6CiAgc2l6ZV90eXBlIF9NX25vZGVfY291bnQ7ICAKICBfQ29tcGFyZSBfTV9rZXlfY29tcGFy
ZTsKCiAgX0xpbmtfdHlwZSYgX01fcm9vdCgpIGNvbnN0IAogICAgeyByZXR1cm4gKF9MaW5rX3R5
cGUmKSBfTV9oZWFkZXItPl9NX3BhcmVudDsgfQogIF9MaW5rX3R5cGUmIF9NX2xlZnRtb3N0KCkg
Y29uc3QgCiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSYpIF9NX2hlYWRlci0+X01fbGVmdDsgfQog
IF9MaW5rX3R5cGUmIF9NX3JpZ2h0bW9zdCgpIGNvbnN0IAogICAgeyByZXR1cm4gKF9MaW5rX3R5
cGUmKSBfTV9oZWFkZXItPl9NX3JpZ2h0OyB9CgogIHN0YXRpYyBfTGlua190eXBlJiBfU19sZWZ0
KF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX2xlZnQp
OyB9CiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX3JpZ2h0KF9MaW5rX3R5cGUgX194KQogICAgeyBy
ZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX3JpZ2h0KTsgfQogIHN0YXRpYyBfTGlua190eXBl
JiBfU19wYXJlbnQoX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9f
eC0+X01fcGFyZW50KTsgfQogIHN0YXRpYyByZWZlcmVuY2UgX1NfdmFsdWUoX0xpbmtfdHlwZSBf
X3gpCiAgICB7IHJldHVybiBfX3gtPl9NX3ZhbHVlX2ZpZWxkOyB9CiAgc3RhdGljIGNvbnN0IF9L
ZXkmIF9TX2tleShfTGlua190eXBlIF9feCkKICAgIHsgcmV0dXJuIF9LZXlPZlZhbHVlKCkoX1Nf
dmFsdWUoX194KSk7IH0KICBzdGF0aWMgX0NvbG9yX3R5cGUmIF9TX2NvbG9yKF9MaW5rX3R5cGUg
X194KQogICAgeyByZXR1cm4gKF9Db2xvcl90eXBlJikoX194LT5fTV9jb2xvcik7IH0KCiAgc3Rh
dGljIF9MaW5rX3R5cGUmIF9TX2xlZnQoX0Jhc2VfcHRyIF9feCkKICAgIHsgcmV0dXJuIChfTGlu
a190eXBlJikoX194LT5fTV9sZWZ0KTsgfQogIHN0YXRpYyBfTGlua190eXBlJiBfU19yaWdodChf
QmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX3JpZ2h0KTsg
fQogIHN0YXRpYyBfTGlua190eXBlJiBfU19wYXJlbnQoX0Jhc2VfcHRyIF9feCkKICAgIHsgcmV0
dXJuIChfTGlua190eXBlJikoX194LT5fTV9wYXJlbnQpOyB9CiAgc3RhdGljIHJlZmVyZW5jZSBf
U192YWx1ZShfQmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gKChfTGlua190eXBlKV9feCktPl9N
X3ZhbHVlX2ZpZWxkOyB9CiAgc3RhdGljIGNvbnN0IF9LZXkmIF9TX2tleShfQmFzZV9wdHIgX194
KQogICAgeyByZXR1cm4gX0tleU9mVmFsdWUoKShfU192YWx1ZShfTGlua190eXBlKF9feCkpKTt9
IAogIHN0YXRpYyBfQ29sb3JfdHlwZSYgX1NfY29sb3IoX0Jhc2VfcHRyIF9feCkKICAgIHsgcmV0
dXJuIChfQ29sb3JfdHlwZSYpKF9MaW5rX3R5cGUoX194KS0+X01fY29sb3IpOyB9CgogIHN0YXRp
YyBfTGlua190eXBlIF9TX21pbmltdW0oX0xpbmtfdHlwZSBfX3gpIAogICAgeyByZXR1cm4gKF9M
aW5rX3R5cGUpICBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0oX194KTsgfQoKICBzdGF0
aWMgX0xpbmtfdHlwZSBfU19tYXhpbXVtKF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gKF9M
aW5rX3R5cGUpIF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWF4aW11bShfX3gpOyB9CgpwdWJsaWM6
CiAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjx2YWx1ZV90eXBlLCByZWZlcmVuY2UsIHBvaW50
ZXI+IGl0ZXJhdG9yOwogIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8dmFsdWVfdHlwZSwgY29u
c3RfcmVmZXJlbmNlLCBjb25zdF9wb2ludGVyPiAKICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOwoK
CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNl
X2l0ZXJhdG9yOwogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9p
dGVyYXRvcjsKCgoKCgoKCiAKCnByaXZhdGU6CiAgaXRlcmF0b3IgX01faW5zZXJ0KF9CYXNlX3B0
ciBfX3gsIF9CYXNlX3B0ciBfX3ksIGNvbnN0IHZhbHVlX3R5cGUmIF9fdik7CiAgX0xpbmtfdHlw
ZSBfTV9jb3B5KF9MaW5rX3R5cGUgX194LCBfTGlua190eXBlIF9fcCk7CiAgdm9pZCBfTV9lcmFz
ZShfTGlua190eXBlIF9feCk7CgpwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAogIF9SYl90cmVlKCkKICAgIDogX0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSksIF9NX25vZGVf
Y291bnQoMCksIF9NX2tleV9jb21wYXJlKCkKICAgIHsgX01fZW1wdHlfaW5pdGlhbGl6ZSgpOyB9
CgogIF9SYl90cmVlKGNvbnN0IF9Db21wYXJlJiBfX2NvbXApCiAgICA6IF9CYXNlKGFsbG9jYXRv
cl90eXBlKCkpLCBfTV9ub2RlX2NvdW50KDApLCBfTV9rZXlfY29tcGFyZShfX2NvbXApIAogICAg
eyBfTV9lbXB0eV9pbml0aWFsaXplKCk7IH0KCiAgX1JiX3RyZWUoY29uc3QgX0NvbXBhcmUmIF9f
Y29tcCwgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX0Jhc2UoX19hKSwgX01fbm9k
ZV9jb3VudCgwKSwgX01fa2V5X2NvbXBhcmUoX19jb21wKSAKICAgIHsgX01fZW1wdHlfaW5pdGlh
bGl6ZSgpOyB9CgogIF9SYl90cmVlKGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZh
bHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCkgCiAgICA6IF9CYXNlKF9feC5nZXRfYWxsb2NhdG9y
KCkpLAogICAgICBfTV9ub2RlX2NvdW50KDApLCBfTV9rZXlfY29tcGFyZShfX3guX01fa2V5X2Nv
bXBhcmUpCiAgeyAKICAgIGlmIChfX3guX01fcm9vdCgpID09IDApCiAgICAgIF9NX2VtcHR5X2lu
aXRpYWxpemUoKTsKICAgIGVsc2UgewogICAgICBfU19jb2xvcihfTV9oZWFkZXIpID0gX1NfcmJf
dHJlZV9yZWQ7CiAgICAgIF9NX3Jvb3QoKSA9IF9NX2NvcHkoX194Ll9NX3Jvb3QoKSwgX01faGVh
ZGVyKTsKICAgICAgX01fbGVmdG1vc3QoKSA9IF9TX21pbmltdW0oX01fcm9vdCgpKTsKICAgICAg
X01fcmlnaHRtb3N0KCkgPSBfU19tYXhpbXVtKF9NX3Jvb3QoKSk7CiAgICB9CiAgICBfTV9ub2Rl
X2NvdW50ID0gX194Ll9NX25vZGVfY291bnQ7CiAgfQogIH5fUmJfdHJlZSgpIHsgY2xlYXIoKTsg
fQogIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIAog
IG9wZXJhdG9yPShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFy
ZSxfQWxsb2M+JiBfX3gpOwoKcHJpdmF0ZToKICB2b2lkIF9NX2VtcHR5X2luaXRpYWxpemUoKSB7
CiAgICBfU19jb2xvcihfTV9oZWFkZXIpID0gX1NfcmJfdHJlZV9yZWQ7ICAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgX01fcm9vdCgpID0gMDsKICAgIF9N
X2xlZnRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICBfTV9yaWdodG1vc3QoKSA9IF9NX2hlYWRlcjsK
ICB9CgpwdWJsaWM6ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICBfQ29t
cGFyZSBrZXlfY29tcCgpIGNvbnN0IHsgcmV0dXJuIF9NX2tleV9jb21wYXJlOyB9CiAgaXRlcmF0
b3IgYmVnaW4oKSB7IHJldHVybiBfTV9sZWZ0bW9zdCgpOyB9CiAgY29uc3RfaXRlcmF0b3IgYmVn
aW4oKSBjb25zdCB7IHJldHVybiBfTV9sZWZ0bW9zdCgpOyB9CiAgaXRlcmF0b3IgZW5kKCkgeyBy
ZXR1cm4gX01faGVhZGVyOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4g
X01faGVhZGVyOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiByZXZlcnNl
X2l0ZXJhdG9yKGVuZCgpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29u
c3QgeyAKICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgCiAgfQogIHJl
dmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7
IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7IAogICAgcmV0dXJuIGNv
bnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7CiAgfSAKICBib29sIGVtcHR5KCkgY29uc3Qg
eyByZXR1cm4gX01fbm9kZV9jb3VudCA9PSAwOyB9CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7
IHJldHVybiBfTV9ub2RlX2NvdW50OyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyBy
ZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQoKICB2b2lkIHN3YXAoX1JiX3RyZWU8X0tleSxfVmFsdWUs
X0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX190KSB7CiAgICAgOjpzd2FwKF9NX2hlYWRl
ciwgX190Ll9NX2hlYWRlcik7CiAgICAgOjpzd2FwKF9NX25vZGVfY291bnQsIF9fdC5fTV9ub2Rl
X2NvdW50KTsKICAgICA6OnN3YXAoX01fa2V5X2NvbXBhcmUsIF9fdC5fTV9rZXlfY29tcGFyZSk7
CiAgfQogICAgCnB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgcGFp
cjxpdGVyYXRvcixib29sPiBpbnNlcnRfdW5pcXVlKGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CiAg
aXRlcmF0b3IgaW5zZXJ0X2VxdWFsKGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CgogIGl0ZXJhdG9y
IGluc2VydF91bmlxdWUoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194
KTsKICBpdGVyYXRvciBpbnNlcnRfZXF1YWwoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFs
dWVfdHlwZSYgX194KTsKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lk
IGluc2VydF91bmlxdWUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s
YXN0KTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnRfZXF1
YWwoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KTsKCgoKCgoK
CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKTsKICBzaXplX3R5cGUgZXJhc2UoY29u
c3Qga2V5X3R5cGUmIF9feCk7CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRv
ciBfX2xhc3QpOwogIHZvaWQgZXJhc2UoY29uc3Qga2V5X3R5cGUqIF9fZmlyc3QsIGNvbnN0IGtl
eV90eXBlKiBfX2xhc3QpOwogIHZvaWQgY2xlYXIoKSB7CiAgICBpZiAoX01fbm9kZV9jb3VudCAh
PSAwKSB7CiAgICAgIF9NX2VyYXNlKF9NX3Jvb3QoKSk7CiAgICAgIF9NX2xlZnRtb3N0KCkgPSBf
TV9oZWFkZXI7CiAgICAgIF9NX3Jvb3QoKSA9IDA7CiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX01f
aGVhZGVyOwogICAgICBfTV9ub2RlX2NvdW50ID0gMDsKICAgIH0KICB9ICAgICAgCgpwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIGl0ZXJhdG9yIGZpbmQoY29uc3Qg
a2V5X3R5cGUmIF9feCk7CiAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194
KSBjb25zdDsKICBzaXplX3R5cGUgY291bnQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CiAg
aXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCk7CiAgY29uc3RfaXRlcmF0
b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CiAgaXRlcmF0b3IgdXBw
ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCk7CiAgY29uc3RfaXRlcmF0b3IgdXBwZXJfYm91
bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CiAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4g
ZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCk7CiAgcGFpcjxjb25zdF9pdGVyYXRvciwg
Y29uc3RfaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwoK
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICBib29sIF9fcmJfdmVy
aWZ5KCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFz
cyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgpp
bmxpbmUgYm9vbCAKb3BlcmF0b3I9PShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZW
YWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsIAogICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9L
ZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKewogIHJldHVybiBf
X3guc2l6ZSgpID09IF9feS5zaXplKCkgJiYKICAgICAgICAgZXF1YWwoX194LmJlZ2luKCksIF9f
eC5lbmQoKSwgX195LmJlZ2luKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Zh
bHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3Mg
X0FsbG9jPgppbmxpbmUgYm9vbCAKb3BlcmF0b3I8KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVl
LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwgCiAgICAgICAgICBjb25zdCBfUmJf
dHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCnsKICBy
ZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX194LmJlZ2luKCksIF9feC5lbmQoKSwgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwp9
CgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVl
LCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIApz
d2FwKF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9f
eCwgCiAgICAgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9j
PiYgX195KQp7CiAgX194LnN3YXAoX195KTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNs
YXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUs
IGNsYXNzIF9BbGxvYz4KX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUs
X0FsbG9jPiYgCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv
Yz4KICA6Om9wZXJhdG9yPShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxf
Q29tcGFyZSxfQWxsb2M+JiBfX3gpCnsKICBpZiAodGhpcyAhPSAmX194KSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAogICAgY2xlYXIoKTsKICAgIF9NX25vZGVfY291bnQgPSAw
OwogICAgX01fa2V5X2NvbXBhcmUgPSBfX3guX01fa2V5X2NvbXBhcmU7ICAgICAgICAKICAgIGlm
IChfX3guX01fcm9vdCgpID09IDApIHsKICAgICAgX01fcm9vdCgpID0gMDsKICAgICAgX01fbGVm
dG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgICAgX01fcmlnaHRtb3N0KCkgPSBfTV9oZWFkZXI7CiAg
ICB9CiAgICBlbHNlIHsKICAgICAgX01fcm9vdCgpID0gX01fY29weShfX3guX01fcm9vdCgpLCBf
TV9oZWFkZXIpOwogICAgICBfTV9sZWZ0bW9zdCgpID0gX1NfbWluaW11bShfTV9yb290KCkpOwog
ICAgICBfTV9yaWdodG1vc3QoKSA9IF9TX21heGltdW0oX01fcm9vdCgpKTsKICAgICAgX01fbm9k
ZV9jb3VudCA9IF9feC5fTV9ub2RlX2NvdW50OwogICAgfQogIH0KICByZXR1cm4gKnRoaXM7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAK
ICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVl
PF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCl9SYl90
cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6Ol9NX2luc2Vy
dChfQmFzZV9wdHIgX194XywgX0Jhc2VfcHRyIF9feV8sIGNvbnN0IF9WYWx1ZSYgX192KQp7CiAg
X0xpbmtfdHlwZSBfX3ggPSAoX0xpbmtfdHlwZSkgX194XzsKICBfTGlua190eXBlIF9feSA9IChf
TGlua190eXBlKSBfX3lfOwogIF9MaW5rX3R5cGUgX196OwoKICBpZiAoX195ID09IF9NX2hlYWRl
ciB8fCBfX3ggIT0gMCB8fCAKICAgICAgX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3Yp
LCBfU19rZXkoX195KSkpIHsKICAgIF9feiA9IF9NX2NyZWF0ZV9ub2RlKF9fdik7CiAgICBfU19s
ZWZ0KF9feSkgPSBfX3o7ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKICAgIGlmIChfX3kgPT0gX01faGVhZGVyKSB7CiAgICAgIF9NX3Jvb3Qo
KSA9IF9fejsKICAgICAgX01fcmlnaHRtb3N0KCkgPSBfX3o7CiAgICB9CiAgICBlbHNlIGlmIChf
X3kgPT0gX01fbGVmdG1vc3QoKSkKICAgICAgX01fbGVmdG1vc3QoKSA9IF9fejsgICAgCiAgfQog
IGVsc2UgewogICAgX196ID0gX01fY3JlYXRlX25vZGUoX192KTsKICAgIF9TX3JpZ2h0KF9feSkg
PSBfX3o7CiAgICBpZiAoX195ID09IF9NX3JpZ2h0bW9zdCgpKQogICAgICBfTV9yaWdodG1vc3Qo
KSA9IF9fejsgICAKICB9CiAgX1NfcGFyZW50KF9feikgPSBfX3k7CiAgX1NfbGVmdChfX3opID0g
MDsKICBfU19yaWdodChfX3opID0gMDsKICBfUmJfdHJlZV9yZWJhbGFuY2UoX196LCBfTV9oZWFk
ZXItPl9NX3BhcmVudCk7CiAgKytfTV9ub2RlX2NvdW50OwogIHJldHVybiBpdGVyYXRvcihfX3op
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1
ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJf
dHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgpf
UmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjppbnNl
cnRfZXF1YWwoY29uc3QgX1ZhbHVlJiBfX3YpCnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRl
cjsKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKICB3aGlsZSAoX194ICE9IDApIHsKICAg
IF9feSA9IF9feDsKICAgIF9feCA9IF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwg
X1Nfa2V5KF9feCkpID8gCiAgICAgICAgICAgIF9TX2xlZnQoX194KSA6IF9TX3JpZ2h0KF9feCk7
CiAgfQogIHJldHVybiBfTV9pbnNlcnQoX194LCBfX3ksIF9fdik7Cn0KCgp0ZW1wbGF0ZSA8Y2xh
c3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFz
cyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgpwYWlyPHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1Zh
bHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yLCAKICAgICBib29sPgpf
UmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjppbnNl
cnRfdW5pcXVlKGNvbnN0IF9WYWx1ZSYgX192KQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFk
ZXI7CiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CiAgYm9vbCBfX2NvbXAgPSB0cnVlOwog
IHdoaWxlIChfX3ggIT0gMCkgewogICAgX195ID0gX194OwogICAgX19jb21wID0gX01fa2V5X2Nv
bXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX194KSk7CiAgICBfX3ggPSBfX2NvbXAg
PyBfU19sZWZ0KF9feCkgOiBfU19yaWdodChfX3gpOwogIH0KICBpdGVyYXRvciBfX2ogPSBpdGVy
YXRvcihfX3kpOyAgIAogIGlmIChfX2NvbXApCiAgICBpZiAoX19qID09IGJlZ2luKCkpICAgICAK
ICAgICAgcmV0dXJuIHBhaXI8aXRlcmF0b3IsYm9vbD4oX01faW5zZXJ0KF9feCwgX195LCBfX3Yp
LCB0cnVlKTsKICAgIGVsc2UKICAgICAgLS1fX2o7CiAgaWYgKF9NX2tleV9jb21wYXJlKF9TX2tl
eShfX2ouX01fbm9kZSksIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICByZXR1cm4gcGFpcjxpdGVy
YXRvcixib29sPihfTV9pbnNlcnQoX194LCBfX3ksIF9fdiksIHRydWUpOwogIHJldHVybiBwYWly
PGl0ZXJhdG9yLGJvb2w+KF9faiwgZmFsc2UpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNs
YXNzIF9WYWwsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBj
bGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBf
Q29tcGFyZSwgX0FsbG9jPjo6aXRlcmF0b3IgCl9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZh
bHVlLCBfQ29tcGFyZSwgX0FsbG9jPgogIDo6aW5zZXJ0X3VuaXF1ZShpdGVyYXRvciBfX3Bvc2l0
aW9uLCBjb25zdCBfVmFsJiBfX3YpCnsKICBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2hl
YWRlci0+X01fbGVmdCkgeyAgCiAgICBpZiAoc2l6ZSgpID4gMCAmJiAKICAgICAgICBfTV9rZXlf
Y29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpKSkK
ICAgICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24uX01f
bm9kZSwgX192KTsKICAgICAKICAgIGVsc2UKICAgICAgcmV0dXJuIGluc2VydF91bmlxdWUoX192
KS5maXJzdDsKICB9IGVsc2UgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXIpIHsg
IAogICAgaWYgKF9NX2tleV9jb21wYXJlKF9TX2tleShfTV9yaWdodG1vc3QoKSksIF9LZXlPZlZh
bHVlKCkoX192KSkpCiAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX01fcmlnaHRtb3N0KCksIF9f
dik7CiAgICBlbHNlCiAgICAgIHJldHVybiBpbnNlcnRfdW5pcXVlKF9fdikuZmlyc3Q7CiAgfSBl
bHNlIHsKICAgIGl0ZXJhdG9yIF9fYmVmb3JlID0gX19wb3NpdGlvbjsKICAgIC0tX19iZWZvcmU7
CiAgICBpZiAoX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fYmVmb3JlLl9NX25vZGUpLCBfS2V5T2ZW
YWx1ZSgpKF9fdikpIAogICAgICAgICYmIF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192
KSwgX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSkpKSB7CiAgICAgIGlmIChfU19yaWdodChfX2Jl
Zm9yZS5fTV9ub2RlKSA9PSAwKQogICAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX19iZWZvcmUu
X01fbm9kZSwgX192KTsgCiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gX01faW5zZXJ0KF9fcG9z
aXRpb24uX01fbm9kZSwgX19wb3NpdGlvbi5fTV9ub2RlLCBfX3YpOwogICAgIAogICAgfSBlbHNl
CiAgICAgIHJldHVybiBpbnNlcnRfdW5pcXVlKF9fdikuZmlyc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbCwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xh
c3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9L
ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yIApfUmJfdHJlZTxfS2V5LF9WYWws
X0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6aW5zZXJ0X2VxdWFsKGl0ZXJhdG9yIF9f
cG9zaXRpb24sIGNvbnN0IF9WYWwmIF9fdikKewogIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUgPT0g
X01faGVhZGVyLT5fTV9sZWZ0KSB7ICAKICAgIGlmIChzaXplKCkgPiAwICYmIAogICAgICAgIF9N
X2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9k
ZSkpKQogICAgICByZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlv
bi5fTV9ub2RlLCBfX3YpOwogICAgIAogICAgZWxzZQogICAgICByZXR1cm4gaW5zZXJ0X2VxdWFs
KF9fdik7CiAgfSBlbHNlIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVhZGVyKSB7IAog
ICAgaWYgKCFfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfTV9yaWdo
dG1vc3QoKSkpKQogICAgICByZXR1cm4gX01faW5zZXJ0KDAsIF9NX3JpZ2h0bW9zdCgpLCBfX3Yp
OwogICAgZWxzZQogICAgICByZXR1cm4gaW5zZXJ0X2VxdWFsKF9fdik7CiAgfSBlbHNlIHsKICAg
IGl0ZXJhdG9yIF9fYmVmb3JlID0gX19wb3NpdGlvbjsKICAgIC0tX19iZWZvcmU7CiAgICBpZiAo
IV9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9fYmVmb3JlLl9NX25v
ZGUpKQogICAgICAgICYmICFfTV9rZXlfY29tcGFyZShfU19rZXkoX19wb3NpdGlvbi5fTV9ub2Rl
KSwgX0tleU9mVmFsdWUoKShfX3YpKSkgewogICAgICBpZiAoX1NfcmlnaHQoX19iZWZvcmUuX01f
bm9kZSkgPT0gMCkKICAgICAgICByZXR1cm4gX01faW5zZXJ0KDAsIF9fYmVmb3JlLl9NX25vZGUs
IF9fdik7IAogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9N
X25vZGUsIF9fcG9zaXRpb24uX01fbm9kZSwgX192KTsKICAgICAKICAgIH0gZWxzZQogICAgICBy
ZXR1cm4gaW5zZXJ0X2VxdWFsKF9fdik7CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj
bGFzcyBfVmFsLCBjbGFzcyBfS29WLCBjbGFzcyBfQ21wLCBjbGFzcyBfQWxsb2M+CiAgdGVtcGxh
dGU8Y2xhc3MgX0lJPgp2b2lkIF9SYl90cmVlPF9LZXksX1ZhbCxfS29WLF9DbXAsX0FsbG9jPgog
IDo6aW5zZXJ0X2VxdWFsKF9JSSBfX2ZpcnN0LCBfSUkgX19sYXN0KQp7CiAgZm9yICggOyBfX2Zp
cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaW5zZXJ0X2VxdWFsKCpfX2ZpcnN0KTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWwsIGNsYXNzIF9Lb1YsIGNsYXNzIF9DbXAs
IGNsYXNzIF9BbGxvYz4gCiAgdGVtcGxhdGU8Y2xhc3MgX0lJPgp2b2lkIF9SYl90cmVlPF9LZXks
X1ZhbCxfS29WLF9DbXAsX0FsbG9jPgogIDo6aW5zZXJ0X3VuaXF1ZShfSUkgX19maXJzdCwgX0lJ
IF9fbGFzdCkgewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlu
c2VydF91bmlxdWUoKl9fZmlyc3QpOwp9CgojIDEwMjEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1s
aWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0
bF90cmVlLmgiIDMKCiAgICAgICAgIAp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVl
LCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Fs
bG9jPgppbmxpbmUgdm9pZCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFy
ZSxfQWxsb2M+CiAgOjplcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQp7CiAgX0xpbmtfdHlwZSBf
X3kgPSAKICAgIChfTGlua190eXBlKSBfUmJfdHJlZV9yZWJhbGFuY2VfZm9yX2VyYXNlKF9fcG9z
aXRpb24uX01fbm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9NX2hlYWRlci0+X01fcGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX01faGVhZGVyLT5fTV9sZWZ0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX01faGVhZGVyLT5fTV9yaWdodCk7CiAgZGVzdHJveV9u
b2RlKF9feSk7CiAgLS1fTV9ub2RlX2NvdW50Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xh
c3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwg
Y2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxf
Q29tcGFyZSxfQWxsb2M+OjpzaXplX3R5cGUgCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZh
bHVlLF9Db21wYXJlLF9BbGxvYz46OmVyYXNlKGNvbnN0IF9LZXkmIF9feCkKewogIHBhaXI8aXRl
cmF0b3IsaXRlcmF0b3I+IF9fcCA9IGVxdWFsX3JhbmdlKF9feCk7CiAgc2l6ZV90eXBlIF9fbiA9
IDA7CiAgZGlzdGFuY2UoX19wLmZpcnN0LCBfX3Auc2Vjb25kLCBfX24pOwogIGVyYXNlKF9fcC5m
aXJzdCwgX19wLnNlY29uZCk7CiAgcmV0dXJuIF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXks
IGNsYXNzIF9WYWwsIGNsYXNzIF9Lb1YsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5
cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+OjpfTGlu
a190eXBlIApfUmJfdHJlZTxfS2V5LF9WYWwsX0tvVixfQ29tcGFyZSxfQWxsb2M+CiAgOjpfTV9j
b3B5KF9MaW5rX3R5cGUgX194LCBfTGlua190eXBlIF9fcCkKewogICAgICAgICAgICAgICAgICAg
ICAgICAgCiAgX0xpbmtfdHlwZSBfX3RvcCA9IF9NX2Nsb25lX25vZGUoX194KTsKICBfX3RvcC0+
X01fcGFyZW50ID0gX19wOwogCiAgdHJ5ICB7CiAgICBpZiAoX194LT5fTV9yaWdodCkKICAgICAg
X190b3AtPl9NX3JpZ2h0ID0gX01fY29weShfU19yaWdodChfX3gpLCBfX3RvcCk7CiAgICBfX3Ag
PSBfX3RvcDsKICAgIF9feCA9IF9TX2xlZnQoX194KTsKCiAgICB3aGlsZSAoX194ICE9IDApIHsK
ICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9jbG9uZV9ub2RlKF9feCk7CiAgICAgIF9fcC0+X01f
bGVmdCA9IF9feTsKICAgICAgX195LT5fTV9wYXJlbnQgPSBfX3A7CiAgICAgIGlmIChfX3gtPl9N
X3JpZ2h0KQogICAgICAgIF9feS0+X01fcmlnaHQgPSBfTV9jb3B5KF9TX3JpZ2h0KF9feCksIF9f
eSk7CiAgICAgIF9fcCA9IF9feTsKICAgICAgX194ID0gX1NfbGVmdChfX3gpOwogICAgfQogIH0K
ICBjYXRjaCguLi4pIHsgIF9NX2VyYXNlKF9fdG9wKSA7IHRocm93OyB9IDsKCiAgcmV0dXJuIF9f
dG9wOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZW
YWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp2b2lkIF9SYl90
cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6Ol9NX2VyYXNl
KF9MaW5rX3R5cGUgX194KQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIHdo
aWxlIChfX3ggIT0gMCkgewogICAgX01fZXJhc2UoX1NfcmlnaHQoX194KSk7CiAgICBfTGlua190
eXBlIF9feSA9IF9TX2xlZnQoX194KTsKICAgIGRlc3Ryb3lfbm9kZShfX3gpOwogICAgX194ID0g
X195OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tl
eU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4Kdm9pZCBf
UmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjplcmFz
ZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCnsKICBpZiAoX19maXJzdCA9PSBi
ZWdpbigpICYmIF9fbGFzdCA9PSBlbmQoKSkKICAgIGNsZWFyKCk7CiAgZWxzZQogICAgd2hpbGUg
KF9fZmlyc3QgIT0gX19sYXN0KSBlcmFzZShfX2ZpcnN0KyspOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBf
Q29tcGFyZSwgY2xhc3MgX0FsbG9jPgp2b2lkIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZh
bHVlLF9Db21wYXJlLF9BbGxvYz4KICA6OmVyYXNlKGNvbnN0IF9LZXkqIF9fZmlyc3QsIGNvbnN0
IF9LZXkqIF9fbGFzdCkgCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIGVyYXNlKCpfX2Zp
cnN0KyspOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5
T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFt
ZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVy
YXRvciAKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6
ZmluZChjb25zdCBfS2V5JiBfX2spCnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsgICAg
ICAgCiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7ICAgICAgIAoKICB3aGlsZSAoX194ICE9
IDApIAogICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAgICAgX195
ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICBlbHNlCiAgICAgIF9feCA9IF9TX3JpZ2h0
KF9feCk7CgogIGl0ZXJhdG9yIF9faiA9IGl0ZXJhdG9yKF9feSk7ICAgCiAgcmV0dXJuIChfX2og
PT0gZW5kKCkgfHwgX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX19qLl9NX25vZGUpKSkgPyAK
ICAgICBlbmQoKSA6IF9fajsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwg
Y2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxv
Yz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs
bG9jPjo6Y29uc3RfaXRlcmF0b3IgCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9D
b21wYXJlLF9BbGxvYz46OmZpbmQoY29uc3QgX0tleSYgX19rKSBjb25zdAp7CiAgX0xpbmtfdHlw
ZSBfX3kgPSBfTV9oZWFkZXI7ICAKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsgIAoKICB3
aGlsZSAoX194ICE9IDApIHsKICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9f
aykpCiAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgZWxzZQogICAgICBf
X3ggPSBfU19yaWdodChfX3gpOwogIH0KICBjb25zdF9pdGVyYXRvciBfX2ogPSBjb25zdF9pdGVy
YXRvcihfX3kpOyAgIAogIHJldHVybiAoX19qID09IGVuZCgpIHx8IF9NX2tleV9jb21wYXJlKF9f
aywgX1Nfa2V5KF9fai5fTV9ub2RlKSkpID8KICAgIGVuZCgpIDogX19qOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBj
bGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1
ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpzaXplX3R5cGUgCl9SYl90cmVlPF9LZXks
X1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6OmNvdW50KGNvbnN0IF9LZXkm
IF9faykgY29uc3QKewogIHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPiBfX3Ag
PSBlcXVhbF9yYW5nZShfX2spOwogIHNpemVfdHlwZSBfX24gPSAwOwogIGRpc3RhbmNlKF9fcC5m
aXJzdCwgX19wLnNlY29uZCwgX19uKTsKICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBf
Q29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5
T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvciAKX1JiX3RyZWU8X0tleSxfVmFsdWUs
X0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6bG93ZXJfYm91bmQoY29uc3QgX0tleSYg
X19rKQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7ICAKICBfTGlua190eXBlIF9feCA9
IF9NX3Jvb3QoKTsgIAoKICB3aGlsZSAoX194ICE9IDApIAogICAgaWYgKCFfTV9rZXlfY29tcGFy
ZShfU19rZXkoX194KSwgX19rKSkKICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7
CiAgICBlbHNlCiAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CgogIHJldHVybiBpdGVyYXRvcihf
X3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZW
YWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBf
UmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpjb25zdF9p
dGVyYXRvciAKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9j
PgogIDo6bG93ZXJfYm91bmQoY29uc3QgX0tleSYgX19rKSBjb25zdAp7CiAgX0xpbmtfdHlwZSBf
X3kgPSBfTV9oZWFkZXI7ICAKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsgIAoKICB3aGls
ZSAoX194ICE9IDApIAogICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkK
ICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICBlbHNlCiAgICAgIF9feCA9
IF9TX3JpZ2h0KF9feCk7CgogIHJldHVybiBjb25zdF9pdGVyYXRvcihfX3kpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAg
ICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9W
YWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvciAKX1JiX3RyZWU8X0tl
eSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6dXBwZXJfYm91bmQoY29u
c3QgX0tleSYgX19rKQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7ICAKICBfTGlua190
eXBlIF9feCA9IF9NX3Jvb3QoKTsgIAoKICAgd2hpbGUgKF9feCAhPSAwKSAKICAgICBpZiAoX01f
a2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX194KSkpCiAgICAgICBfX3kgPSBfX3gsIF9feCA9IF9T
X2xlZnQoX194KTsKICAgICBlbHNlCiAgICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoKICAgcmV0
dXJuIGl0ZXJhdG9yKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUs
IGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxs
b2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9B
bGxvYz46OmNvbnN0X2l0ZXJhdG9yIApfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxf
Q29tcGFyZSxfQWxsb2M+CiAgOjp1cHBlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spIGNvbnN0CnsK
ICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsgIAogIF9MaW5rX3R5cGUgX194ID0gX01fcm9v
dCgpOyAgCgogICB3aGlsZSAoX194ICE9IDApIAogICAgIGlmIChfTV9rZXlfY29tcGFyZShfX2ss
IF9TX2tleShfX3gpKSkKICAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAg
IGVsc2UKICAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CgogICByZXR1cm4gY29uc3RfaXRlcmF0
b3IoX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tl
eU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5l
IApwYWlyPHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJl
LF9BbGxvYz46Oml0ZXJhdG9yLAogICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9L
ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yPgpfUmJfdHJlZTxfS2V5LF9WYWx1
ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjplcXVhbF9yYW5nZShjb25zdCBfS2V5
JiBfX2spCnsKICByZXR1cm4gcGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+KGxvd2VyX2JvdW5kKF9f
ayksIHVwcGVyX2JvdW5kKF9faykpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Zh
bHVlLCBjbGFzcyBfS29WLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgCnBh
aXI8dHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbHVlLCBfS29WLCBfQ29tcGFyZSwgX0FsbG9j
Pjo6Y29uc3RfaXRlcmF0b3IsCiAgICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbHVlLCBf
S29WLCBfQ29tcGFyZSwgX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3I+Cl9SYl90cmVlPF9LZXksIF9W
YWx1ZSwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz4KICA6OmVxdWFsX3JhbmdlKGNvbnN0IF9LZXkm
IF9faykgY29uc3QKewogIHJldHVybiBwYWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9y
Pihsb3dlcl9ib3VuZChfX2spLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1cHBlcl9ib3VuZChfX2spKTsKfQoKaW5saW5lIGludCAKX19ibGFja19jb3VudChf
UmJfdHJlZV9ub2RlX2Jhc2UqIF9fbm9kZSwgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3Jvb3QpCnsK
ICBpZiAoX19ub2RlID09IDApCiAgICByZXR1cm4gMDsKICBlbHNlIHsKICAgIGludCBfX2JjID0g
X19ub2RlLT5fTV9jb2xvciA9PSBfU19yYl90cmVlX2JsYWNrID8gMSA6IDA7CiAgICBpZiAoX19u
b2RlID09IF9fcm9vdCkKICAgICAgcmV0dXJuIF9fYmM7CiAgICBlbHNlCiAgICAgIHJldHVybiBf
X2JjICsgX19ibGFja19jb3VudChfX25vZGUtPl9NX3BhcmVudCwgX19yb290KTsKICB9Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAg
ICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmJvb2wgX1JiX3RyZWU8X0tleSxf
VmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6X19yYl92ZXJpZnkoKSBjb25zdAp7
CiAgaWYgKF9NX25vZGVfY291bnQgPT0gMCB8fCBiZWdpbigpID09IGVuZCgpKQogICAgcmV0dXJu
IF9NX25vZGVfY291bnQgPT0gMCAmJiBiZWdpbigpID09IGVuZCgpICYmCiAgICAgIF9NX2hlYWRl
ci0+X01fbGVmdCA9PSBfTV9oZWFkZXIgJiYgX01faGVhZGVyLT5fTV9yaWdodCA9PSBfTV9oZWFk
ZXI7CiAgCiAgaW50IF9fbGVuID0gX19ibGFja19jb3VudChfTV9sZWZ0bW9zdCgpLCBfTV9yb290
KCkpOwogIGZvciAoY29uc3RfaXRlcmF0b3IgX19pdCA9IGJlZ2luKCk7IF9faXQgIT0gZW5kKCk7
ICsrX19pdCkgewogICAgX0xpbmtfdHlwZSBfX3ggPSAoX0xpbmtfdHlwZSkgX19pdC5fTV9ub2Rl
OwogICAgX0xpbmtfdHlwZSBfX0wgPSBfU19sZWZ0KF9feCk7CiAgICBfTGlua190eXBlIF9fUiA9
IF9TX3JpZ2h0KF9feCk7CgogICAgaWYgKF9feC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQp
CiAgICAgIGlmICgoX19MICYmIF9fTC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpIHx8CiAg
ICAgICAgICAoX19SICYmIF9fUi0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpKQogICAgICAg
IHJldHVybiBmYWxzZTsKCiAgICBpZiAoX19MICYmIF9NX2tleV9jb21wYXJlKF9TX2tleShfX3gp
LCBfU19rZXkoX19MKSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmIChfX1IgJiYgX01fa2V5
X2NvbXBhcmUoX1Nfa2V5KF9fUiksIF9TX2tleShfX3gpKSkKICAgICAgcmV0dXJuIGZhbHNlOwoK
ICAgIGlmICghX19MICYmICFfX1IgJiYgX19ibGFja19jb3VudChfX3gsIF9NX3Jvb3QoKSkgIT0g
X19sZW4pCiAgICAgIHJldHVybiBmYWxzZTsKICB9CgogIGlmIChfTV9sZWZ0bW9zdCgpICE9IF9S
Yl90cmVlX25vZGVfYmFzZTo6X1NfbWluaW11bShfTV9yb290KCkpKQogICAgcmV0dXJuIGZhbHNl
OwogIGlmIChfTV9yaWdodG1vc3QoKSAhPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0o
X01fcm9vdCgpKSkKICAgIHJldHVybiBmYWxzZTsKCiAgcmV0dXJuIHRydWU7Cn0KCiAKIAoKdGVt
cGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIGNsYXNz
IF9Db21wYXJlLAogICAgICAgICAgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPCBfVmFsdWUgPiAg
PgpzdHJ1Y3QgcmJfdHJlZSA6IHB1YmxpYyBfUmJfdHJlZTxfS2V5LCBfVmFsdWUsIF9LZXlPZlZh
bHVlLCBfQ29tcGFyZSwgX0FsbG9jPgp7CiAgdHlwZWRlZiBfUmJfdHJlZTxfS2V5LCBfVmFsdWUs
IF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPiBfQmFzZTsKICB0eXBlZGVmIHR5cGVuYW1l
IF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgcmJfdHJlZShjb25zdCBf
Q29tcGFyZSYgX19jb21wID0gX0NvbXBhcmUoKSwKICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90
eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2NvbXAsIF9fYSkge30K
ICAKICB+cmJfdHJlZSgpIHt9Cn07CgoKCgoKICAKCgoKIAogCiAKIyAzMSAiL29wdC9tdnBsb2Nh
bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvc2V0IiAyIDMKCgojIDEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMt
c3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9zZXQuaCIg
MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgoKCgoKdGVtcGxhdGUg
PGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlID0gbGVzczxfS2V5PiwKICAgICAgICAgIGNsYXNz
IF9BbGxvYyA9IGFsbG9jYXRvcjwgX0tleSA+ICA+CgoKCgpjbGFzcyBzZXQgewpwdWJsaWM6CiAg
IAoKICB0eXBlZGVmIF9LZXkgICAgIGtleV90eXBlOwogIHR5cGVkZWYgX0tleSAgICAgdmFsdWVf
dHlwZTsKICB0eXBlZGVmIF9Db21wYXJlIGtleV9jb21wYXJlOwogIHR5cGVkZWYgX0NvbXBhcmUg
dmFsdWVfY29tcGFyZTsKcHJpdmF0ZToKICB0eXBlZGVmIF9SYl90cmVlPGtleV90eXBlLCB2YWx1
ZV90eXBlLCAKICAgICAgICAgICAgICAgICAgX0lkZW50aXR5PHZhbHVlX3R5cGU+LCBrZXlfY29t
cGFyZSwgX0FsbG9jPiBfUmVwX3R5cGU7CiAgX1JlcF90eXBlIF9NX3Q7ICAgCnB1YmxpYzoKICB0
eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcG9pbnRlciBwb2ludGVyOwogIHR5cGVk
ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7
CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOwog
IHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRv
cjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBy
ZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBf
UmVwX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5
cGU6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBf
UmVwX3R5cGU6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICAgCgogIHNldCgpIDog
X01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7fQogIGV4cGxpY2l0IHNldChjb25z
dCBfQ29tcGFyZSYgX19jb21wLAogICAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYg
X19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkge30KCgogIHRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBzZXQoX0lucHV0SXRlcmF0b3IgX19maXJz
dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRv
cl90eXBlKCkpCiAgICB7IF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOyB9Cgog
IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBzZXQoX0lucHV0SXRlcmF0b3IgX19m
aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBjb25zdCBfQ29tcGFyZSYgX19jb21wLAogICAg
ICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01f
dChfX2NvbXAsIF9fYSkgeyBfTV90Lmluc2VydF91bmlxdWUoX19maXJzdCwgX19sYXN0KTsgfQoj
IDEwNyAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4z
Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3NldC5oIiAzCgoKICBzZXQoY29uc3Qgc2V0
PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194KSA6IF9NX3QoX194Ll9NX3QpIHt9CiAgc2V0PF9L
ZXksX0NvbXBhcmUsX0FsbG9jPiYgb3BlcmF0b3I9KGNvbnN0IHNldDxfS2V5LCBfQ29tcGFyZSwg
X0FsbG9jPiYgX194KQogIHsgCiAgICBfTV90ID0gX194Ll9NX3Q7IAogICAgcmV0dXJuICp0aGlz
OwogIH0KCiAgIAoKICBrZXlfY29tcGFyZSBrZXlfY29tcCgpIGNvbnN0IHsgcmV0dXJuIF9NX3Qu
a2V5X2NvbXAoKTsgfQogIHZhbHVlX2NvbXBhcmUgdmFsdWVfY29tcCgpIGNvbnN0IHsgcmV0dXJu
IF9NX3Qua2V5X2NvbXAoKTsgfQogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25z
dCB7IHJldHVybiBfTV90LmdldF9hbGxvY2F0b3IoKTsgfQoKICBpdGVyYXRvciBiZWdpbigpIGNv
bnN0IHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQogIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0
dXJuIF9NX3QuZW5kKCk7IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIF9NX3QucmJlZ2luKCk7IH0gCiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgeyBy
ZXR1cm4gX01fdC5yZW5kKCk7IH0KICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01fdC5l
bXB0eSgpOyB9CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV90LnNpemUoKTsg
fQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QubWF4X3NpemUoKTsg
fQogIHZvaWQgc3dhcChzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsgX01fdC5zd2Fw
KF9feC5fTV90KTsgfQoKICAgCiAgcGFpcjxpdGVyYXRvcixib29sPiBpbnNlcnQoY29uc3QgdmFs
dWVfdHlwZSYgX194KSB7IAogICAgcGFpcjx0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yLCBi
b29sPiBfX3AgPSBfTV90Lmluc2VydF91bmlxdWUoX194KTsgCiAgICByZXR1cm4gcGFpcjxpdGVy
YXRvciwgYm9vbD4oX19wLmZpcnN0LCBfX3Auc2Vjb25kKTsKICB9CiAgaXRlcmF0b3IgaW5zZXJ0
KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewogICAgdHlwZWRl
ZiB0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yIF9SZXBfaXRlcmF0b3I7CiAgICByZXR1cm4g
X01fdC5pbnNlcnRfdW5pcXVlKChfUmVwX2l0ZXJhdG9yJilfX3Bvc2l0aW9uLCBfX3gpOwogIH0K
CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KF9JbnB1dEl0
ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgX01fdC5pbnNlcnRf
dW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7CiAgfQoKCgoKCgoKCiAgdm9pZCBlcmFzZShpdGVyYXRv
ciBfX3Bvc2l0aW9uKSB7IAogICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9y
IF9SZXBfaXRlcmF0b3I7CiAgICBfTV90LmVyYXNlKChfUmVwX2l0ZXJhdG9yJilfX3Bvc2l0aW9u
KTsgCiAgfQogIHNpemVfdHlwZSBlcmFzZShjb25zdCBrZXlfdHlwZSYgX194KSB7IAogICAgcmV0
dXJuIF9NX3QuZXJhc2UoX194KTsgCiAgfQogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwg
aXRlcmF0b3IgX19sYXN0KSB7IAogICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJh
dG9yIF9SZXBfaXRlcmF0b3I7CiAgICBfTV90LmVyYXNlKChfUmVwX2l0ZXJhdG9yJilfX2ZpcnN0
LCAoX1JlcF9pdGVyYXRvciYpX19sYXN0KTsgCiAgfQogIHZvaWQgY2xlYXIoKSB7IF9NX3QuY2xl
YXIoKTsgfQoKICAgCgogIGl0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Qg
eyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KICBzaXplX3R5cGUgY291bnQoY29uc3Qga2V5X3R5
cGUmIF9feCkgY29uc3QgeyByZXR1cm4gX01fdC5jb3VudChfX3gpOyB9CiAgaXRlcmF0b3IgbG93
ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QubG93
ZXJfYm91bmQoX194KTsKICB9CiAgaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUm
IF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsgCiAgfQogIHBh
aXI8aXRlcmF0b3IsaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNv
bnN0IHsKICAgIHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQogIGZyaWVuZCBib29s
IG9wZXJhdG9yPT0gPD4gIChjb25zdCBzZXQmLCBjb25zdCBzZXQmKTsKICBmcmllbmQgYm9vbCBv
cGVyYXRvcjwgPD4gIChjb25zdCBzZXQmLCBjb25zdCBzZXQmKTsKfTsKCnRlbXBsYXRlIDxjbGFz
cyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwgCiAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJu
IF9feC5fTV90ID09IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0Nv
bXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHNldDxfS2V5
LF9Db21wYXJlLF9BbGxvYz4mIF9feCwgCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXQ8
X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPCBfX3kuX01f
dDsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxv
Yz4KaW5saW5lIHZvaWQgc3dhcChzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsIAogICAg
ICAgICAgICAgICAgIHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIF9feC5zd2Fw
KF9feSk7Cn0KCgoKCgoKCgogCgoKCiAKIAogCiMgMzMgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1s
aWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3Nl
dCIgMiAzCgojIDEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy
LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9tdWx0aXNldC5oIiAxIDMKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0tleSwgY2xhc3MgX0NvbXBhcmUgPSBsZXNzPF9LZXk+LCAKICAgICAgICAgIGNsYXNzIF9BbGxv
YyA9IGFsbG9jYXRvcjwgX0tleSA+ICA+CgoKCgpjbGFzcyBtdWx0aXNldCB7CnB1YmxpYzoKICAg
CgogIHR5cGVkZWYgX0tleSAgICAga2V5X3R5cGU7CiAgdHlwZWRlZiBfS2V5ICAgICB2YWx1ZV90
eXBlOwogIHR5cGVkZWYgX0NvbXBhcmUga2V5X2NvbXBhcmU7CiAgdHlwZWRlZiBfQ29tcGFyZSB2
YWx1ZV9jb21wYXJlOwpwcml2YXRlOgogIHR5cGVkZWYgX1JiX3RyZWU8a2V5X3R5cGUsIHZhbHVl
X3R5cGUsIAogICAgICAgICAgICAgICAgICBfSWRlbnRpdHk8dmFsdWVfdHlwZT4sIGtleV9jb21w
YXJlLCBfQWxsb2M+IF9SZXBfdHlwZTsKICBfUmVwX3R5cGUgX01fdDsgICAKcHVibGljOgogIHR5
cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9wb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICB0eXBl
ZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBl
ZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsK
ICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CiAg
dHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9y
OwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJl
dmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JldmVy
c2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9S
ZXBfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlw
ZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9S
ZXBfdHlwZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogICAKCiAgbXVsdGlzZXQo
KSA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkge30KICBleHBsaWNpdCBtdWx0
aXNldChjb25zdCBfQ29tcGFyZSYgX19jb21wLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGFs
bG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV90KF9fY29tcCwg
X19hKSB7fQoKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBtdWx0aXNldChf
SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICA6IF9NX3Qo
X0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01fdC5pbnNlcnRfZXF1YWwoX19m
aXJzdCwgX19sYXN0KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgbXVs
dGlzZXQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAg
ICAgICAgIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgICAgICAgY29uc3QgYWxsb2NhdG9y
X3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHsg
X01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsgfQoKIyAxMTMgIi9vcHQvbXZwbG9j
YWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNs
dWRlL2crKy0zL3N0bF9tdWx0aXNldC5oIiAzCgoKICBtdWx0aXNldChjb25zdCBtdWx0aXNldDxf
S2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCkgOiBfTV90KF9feC5fTV90KSB7fQogIG11bHRpc2V0
PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYKICBvcGVyYXRvcj0oY29uc3QgbXVsdGlzZXQ8X0tleSxf
Q29tcGFyZSxfQWxsb2M+JiBfX3gpIHsKICAgIF9NX3QgPSBfX3guX01fdDsgCiAgICByZXR1cm4g
KnRoaXM7CiAgfQoKICAgCgogIGtleV9jb21wYXJlIGtleV9jb21wKCkgY29uc3QgeyByZXR1cm4g
X01fdC5rZXlfY29tcCgpOyB9CiAgdmFsdWVfY29tcGFyZSB2YWx1ZV9jb21wKCkgY29uc3QgeyBy
ZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigp
IGNvbnN0IHsgcmV0dXJuIF9NX3QuZ2V0X2FsbG9jYXRvcigpOyB9CgogIGl0ZXJhdG9yIGJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CiAgaXRlcmF0b3IgZW5kKCkgY29uc3Qg
eyByZXR1cm4gX01fdC5lbmQoKTsgfQogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3Qg
eyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfSAKICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25z
dCB7IHJldHVybiBfTV90LnJlbmQoKTsgfQogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBf
TV90LmVtcHR5KCk7IH0KICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Quc2l6
ZSgpOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5tYXhfc2l6
ZSgpOyB9CiAgdm9pZCBzd2FwKG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194KSB7
IF9NX3Quc3dhcChfX3guX01fdCk7IH0KCiAgIAogIGl0ZXJhdG9yIGluc2VydChjb25zdCB2YWx1
ZV90eXBlJiBfX3gpIHsgCiAgICByZXR1cm4gX01fdC5pbnNlcnRfZXF1YWwoX194KTsKICB9CiAg
aXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9f
eCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yIF9SZXBfaXRlcmF0
b3I7CiAgICByZXR1cm4gX01fdC5pbnNlcnRfZXF1YWwoKF9SZXBfaXRlcmF0b3ImKV9fcG9zaXRp
b24sIF9feCk7CiAgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQg
aW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewog
ICAgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsKICB9CgoKCgoKCgoKICB2b2lk
IGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsgCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBf
dHlwZTo6aXRlcmF0b3IgX1JlcF9pdGVyYXRvcjsKICAgIF9NX3QuZXJhc2UoKF9SZXBfaXRlcmF0
b3ImKV9fcG9zaXRpb24pOyAKICB9CiAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0IGtleV90eXBlJiBf
X3gpIHsgCiAgICByZXR1cm4gX01fdC5lcmFzZShfX3gpOyAKICB9CiAgdm9pZCBlcmFzZShpdGVy
YXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsgCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9S
ZXBfdHlwZTo6aXRlcmF0b3IgX1JlcF9pdGVyYXRvcjsKICAgIF9NX3QuZXJhc2UoKF9SZXBfaXRl
cmF0b3ImKV9fZmlyc3QsIChfUmVwX2l0ZXJhdG9yJilfX2xhc3QpOyAKICB9CiAgdm9pZCBjbGVh
cigpIHsgX01fdC5jbGVhcigpOyB9CgogICAKCiAgaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlw
ZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQogIHNpemVfdHlwZSBjb3Vu
dChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmNvdW50KF9feCk7IH0K
ICBpdGVyYXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICBy
ZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOwogIH0KICBpdGVyYXRvciB1cHBlcl9ib3VuZChj
b25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC51cHBlcl9ib3VuZChf
X3gpOyAKICB9CiAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5
X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9
CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSA8PiAgKGNvbnN0IG11bHRpc2V0JiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aXNldCYpOwog
IGZyaWVuZCBib29sIG9wZXJhdG9yPCA8PiAgKGNvbnN0IG11bHRpc2V0JiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpc2V0Jik7Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9f
eCwgCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxf
QWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPT0gX195Ll9NX3Q7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBv
cGVyYXRvcjwoY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsIAogICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBf
X3kpIHsKICByZXR1cm4gX194Ll9NX3QgPCBfX3kuX01fdDsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcChtdWx0
aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwgCiAgICAgICAgICAgICAgICAgbXVsdGlz
ZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICBfX3guc3dhcChfX3kpOwp9CgoKCgoK
CgoKIAoKCgogCiAKIAojIDM0ICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
b2xhcmlzMi8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zZXQiIDIgMwoKCgoKIAog
CiAKIyAxMiAiLi4vLi4vaW5jbHVkZS9sb2NhbGluYy9IZHIuSCIgMgoKCgoKIyAxICIuLi8uLi9p
bmNsdWRlL2xvY2FsaW5jL1Bhc3MuSCIgMQoKCgoKCgoKCgoKCgpzdGF0aWMgY29uc3QgaW50IGtN
YXhQYXNzTmFtZUxlbmd0aCA9IDE2OwkgCgpjbGFzcyBQeHBvczsKY2xhc3MgV2luZDsKY2xhc3Mg
R3JvdXA7CmNsYXNzIEl0ZW07CmNsYXNzIFN5bmM7CmNsYXNzIFNuYXA7CmNsYXNzIFNjYW47CmNs
YXNzIEhkcjsKY2xhc3MgWHlzdGFnZTsKCmNsYXNzIFBhc3MgewpwdWJsaWM6CiAgICB2b2lkIHJl
bW92ZShjb25zdCBHcm91cCAqKTsKICAgIHZvaWQgYWRkKEdyb3VwICopOwoKICAgIHZvaWQgcmVt
b3ZlKGNvbnN0IEl0ZW0gKik7CiAgICB2b2lkIGFkZChJdGVtICopOwoKICAgIHZvaWQgcmVtb3Zl
KCk7CiAgICB2b2lkIGFkZChTeW5jICopOwoKICAgIHZvaWQgYWRkKFNuYXAgKik7CgogICAgdm9p
ZCByZXNldCgpOwkJIAogICAgdm9pZCBjcnVuY2goKTsJCSAKCiAgICAgCgoKICAgIGJvb2wgaGFz
X3NuYXBzKCkgY29uc3Q7CiAgICBHcm91cCAqZ3JvdXBfbGlzdCgpIGNvbnN0OwogICAgdm9pZCBn
cm91cF9saXN0KEdyb3VwICopOwoKICAgIEl0ZW0gKml0ZW1fbGlzdCgpIGNvbnN0OwogICAgdm9p
ZCBpdGVtX2xpc3QoSXRlbSAqKTsKCiAgICBTeW5jICpnZXRfc3luYyhpbnQgaW54ID0gLTEpIGNv
bnN0OwogICAgdm9pZCBzeW5jX2xpc3QoU3luYyAqKTsKICAgIFN5bmMgKnN5bmNfbGlzdCgpIGNv
bnN0OwoKICAgIFNuYXAgKnNuYXBfbGlzdCgpIGNvbnN0OwogICAgdm9pZCBzbmFwX2xpc3QoU25h
cCAqKTsKCiAgICBTY2FuICpzY2FuX2xpc3QoKSBjb25zdDsKICAgIHZvaWQgc2Nhbl9saXN0KFNj
YW4gKik7CgogICAgdm9pZCB3aW5kX2NvbXAoV2luZCYgdzEpOwogICAgdm9pZCB3aW5kX3VuX2Nv
bXAoV2luZCYgdzEpOwogICAgY29uc3QgUHhwb3Mgc25hcF9jb21wKFNuYXAgKnNuKTsKCgogICAg
Y29uc3Qgc3RkOjpzdHJpbmcgcGFzc19uYW1lKCkgY29uc3Q7CiAgICB2b2lkIHBhc3NfbmFtZShj
b25zdCBzdGQ6OnN0cmluZyYpOwoKICAgIGludCBpbnNwZWN0X21vZHVsdXMoKSBjb25zdDsKICAg
IHZvaWQgaW5zcGVjdF9tb2R1bHVzKGludCk7CgoKICAgIHZvaWQgZm92M2luaXQoY29uc3QgWHlz
dGFnZSAqLCBjb29yX3QpOwoKICAgIEluc3BMaWdodCAmZmx5X2xpZ2h0aW5nKCkgeyByZXR1cm4g
X2ZseTsgfQogICAgSW5zcExpZ2h0ICZmaWR1Y2lhbF9saWdodGluZygpIHsgcmV0dXJuIF9maWR1
OyB9CgogICAgdm9pZCBmbHlfbGlnaHRpbmcoSW5zcExpZ2h0ICZmbHkpIHsgX2ZseSA9IGZseTsg
fQogICAgdm9pZCBmaWR1Y2lhbF9saWdodGluZyhJbnNwTGlnaHQgJmZpZHUpIHsgX2ZpZHUgPSBm
aWR1OyB9CgogICAgdV9zaG9ydAltX25ncnBzKCkgeyByZXR1cm4gX21fbmdycHM7IH0KICAgIHVf
c2hvcnQJbV9uaXRlbXMoKSB7IHJldHVybiBfbV9uaXRlbXM7IH0KICAgIHNob3J0CW1fc25hcF9k
ZWxheSgpIHsgcmV0dXJuIF9tX3NuYXBfZGVsYXk7IH0KICAgIHNob3J0CW1fbWluZmlkKCkgeyBy
ZXR1cm4gX21fbWluZmlkOyB9CiAgICBzaG9ydAltX2hpYW5nbGUoKSB7IHJldHVybiBfbV9oaWFu
Z2xlOyB9CiAgICBzaG9ydAltX2R1cmF0aW9uKCkgeyByZXR1cm4gX21fZHVyYXRpb247IH0KICAg
IHNob3J0CW1fbGxmbmR4KCkgeyByZXR1cm4gX21fbGxmbmR4OyB9CiAgICBzaG9ydAltX2xsZnJl
cSgpIHsgcmV0dXJuIF9tX2xsZnJlcTsgfQogICAgc2hvcnQJbV8zZGZvdigpIHsgcmV0dXJuIF9t
XzNkZm92OyB9CiAgICBzaG9ydAltX3NzM2QoKSB7IHJldHVybiBfbV9zczNkOyB9CiAgICBzaG9y
dAltX2xlZnRfb2Zmc2V0KCkgeyByZXR1cm4gX21fbGVmdF9vZmZzZXQ7IH0KICAgIHNob3J0CW1f
cmlnaHRfb2Zmc2V0KCkgeyByZXR1cm4gX21fcmlnaHRfb2Zmc2V0OyB9CiAgICBsb25nCW1fZm92
c2NhbGUoKSB7IHJldHVybiBfbV9mb3ZzY2FsZTsgfQogICAgc2hvcnQJKm1fYmFzZWNvbXB0Ymwo
KSB7IHJldHVybiBfbV9iYXNlY29tcHRibDsgfQoKICAgIHZvaWQJbV9uZ3Jwcyh1X3Nob3J0IHZh
bCkgeyBfbV9uZ3JwcyA9IHZhbDsgfQogICAgdm9pZAltX25pdGVtcyh1X3Nob3J0IHZhbCkgeyBf
bV9uaXRlbXMgPSB2YWw7IH0KICAgIHZvaWQJbV9zbmFwX2RlbGF5KHNob3J0IHZhbCkgeyBfbV9z
bmFwX2RlbGF5ID0gdmFsOyB9CiAgICB2b2lkCW1fbWluZmlkKHNob3J0IHZhbCkgeyBfbV9taW5m
aWQgPSB2YWw7IH0KICAgIHZvaWQJbV9oaWFuZ2xlKHNob3J0IHZhbCkgeyBfbV9oaWFuZ2xlID0g
dmFsOyB9CiAgICB2b2lkCW1fZHVyYXRpb24oc2hvcnQgdmFsKSB7IF9tX2R1cmF0aW9uID0gdmFs
OyB9CiAgICB2b2lkCW1fbGxmbmR4KHNob3J0IHZhbCkgeyBfbV9sbGZuZHggPSB2YWw7IH0KICAg
IHZvaWQJbV9sbGZyZXEoc2hvcnQgdmFsKSB7IF9tX2xsZnJlcSA9IHZhbDsgfQogICAgdm9pZAlt
XzNkZm92KHNob3J0IHZhbCkgeyBfbV8zZGZvdiA9IHZhbDsgfQogICAgdm9pZAltX3NzM2Qoc2hv
cnQgdmFsKSB7IF9tX3NzM2QgPSB2YWw7IH0KICAgIHZvaWQJbV9sZWZ0X29mZnNldChzaG9ydCB2
YWwpIHsgX21fbGVmdF9vZmZzZXQgPSB2YWw7IH0KICAgIHZvaWQJbV9yaWdodF9vZmZzZXQoc2hv
cnQgdmFsKSB7IF9tX3JpZ2h0X29mZnNldCA9IHZhbDsgfQogICAgdm9pZAltX2ZvdnNjYWxlKGxv
bmcgdmFsKSB7IF9tX2ZvdnNjYWxlID0gdmFsOyB9CiAgICB2b2lkCW1fYmFzZWNvbXB0Ymwoc2hv
cnQgKnZhbCkgeyBfbV9iYXNlY29tcHRibCA9IHZhbDsgfQogICAgCiAgICBzdGF0aWMgUGFzcyAq
Z2V0X3Bhc3MoaW50IHBhc3MgPSAtMSk7CgoKCiAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lk
ICopOwkgCgpwcml2YXRlOgogICAgR3JvdXAgKl9ncm91cF9saXN0OwkJIAogICAgSXRlbSAqX2l0
ZW1fbGlzdDsJCSAKICAgIFN5bmMgKl9zeW5jX2xpc3Q7CQkgCiAgICBTbmFwICpfc25hcF9saXN0
OwkJIAogICAgU2NhbiAqX3NjYW5fbGlzdDsJCSAKICAgIAogICAgY2hhciBfcGFzc19uYW1lW2tN
YXhQYXNzTmFtZUxlbmd0aF07CiAgICBsb25nIF9pbnNwZWN0X2V2ZXJ5X3hfdGltZXM7CSAKCiAg
ICBJbnNwTGlnaHQJX2ZseTsKICAgIEluc3BMaWdodAlfZmlkdTsKCiAgICB1X3Nob3J0IF9tX25n
cnBzOwkJIAogICAgdV9zaG9ydCBfbV9uaXRlbXM7CQkgCgogICAgc2hvcnQgX21fc25hcF9kZWxh
eTsJIAogICAgc2hvcnQgX21fbWluZmlkOwkJIAoKICAgIHNob3J0IF9tX2hpYW5nbGU7CQkgCiAg
ICBzaG9ydCBfbV9kdXJhdGlvbjsJCSAKCiAgICBzaG9ydCBfbV9sbGZuZHg7CQkgCgogICAgc2hv
cnQgX21fbGxmcmVxOwkJIAoKCiAgICBzaG9ydCBfbV8zZGZvdjsJCSAKICAgIHNob3J0IF9tX3Nz
M2Q7CQkgCgogICAgc2hvcnQgX21fbGVmdF9vZmZzZXQ7CSAKICAgIHNob3J0IF9tX3JpZ2h0X29m
ZnNldDsJIAoKICAgIGxvbmcgIF9tX2ZvdnNjYWxlOwkJIAogICAgc2hvcnQgX21fcmVzZXJ2ZWRb
Ml07CSAKCiAgICAgCgoKICAgIHNob3J0ICpfbV9iYXNlY29tcHRibDsJIAoKICAgICAKCgogICAg
dm9pZCAqb3BlcmF0b3IgbmV3KHNpemVfdCk7CQkgCiAgICB2b2lkICpvcGVyYXRvciBuZXcoc2l6
ZV90LCBpbnQpOwkgCgogICAgaW50IGZpbmRfcGFzc193aXRoX2l0ZW1zKEhkciAqLCBpbnQpOwog
ICAgY29uc3QgUHhwb3MgKmZpbmRfY29tcChjb25zdCBXaW5kJiB3MSk7CiAgICBpbnQJcGFzc25v
KCk7Cn07CgoKaW5saW5lIGludApQYXNzOjppbnNwZWN0X21vZHVsdXMoKSBjb25zdAp7CiAgICBy
ZXR1cm4gKF9pbnNwZWN0X2V2ZXJ5X3hfdGltZXMpOwp9CgppbmxpbmUgdm9pZApQYXNzOjppbnNw
ZWN0X21vZHVsdXMoaW50IHZhbHVlKQp7CiAgICBfaW5zcGVjdF9ldmVyeV94X3RpbWVzID0gdmFs
dWU7Cn0KCmlubGluZSBjb25zdCBzdGQ6OnN0cmluZwpQYXNzOjpwYXNzX25hbWUoKSBjb25zdAp7
CiAgICByZXR1cm4oc3RkOjpzdHJpbmcoX3Bhc3NfbmFtZSkpOwp9CgppbmxpbmUgdm9pZApQYXNz
OjpwYXNzX25hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCnsKICAgIHN0cm5jcHkoX3Bhc3Nf
bmFtZSwgbmFtZS5jX3N0cigpLCBzaXplb2YoX3Bhc3NfbmFtZSkgLSAxKTsKICAgIF9wYXNzX25h
bWVbc2l6ZW9mKF9wYXNzX25hbWUpIC0gMV0gPSAnXDAnOwp9CgoKIAoKCmlubGluZSB2b2lkClBh
c3M6OnNjYW5fbGlzdChTY2FuICpkYXRhKQp7CiAgICBfc2Nhbl9saXN0ID0gKCAgICBkYXRhICAg
PyAoICBTY2FuICogICkoKChjaGFyICopICAgIGRhdGEgICkgLSBnU2htZW1PZmZzZXQpIDogKCAg
U2NhbiAqICApMCkgIDsKfQoKaW5saW5lIFNjYW4gKgpQYXNzOjpzY2FuX2xpc3QoKSBjb25zdAp7
CiAgICByZXR1cm4oKCAgICBfc2Nhbl9saXN0ICAgPyAoICBTY2FuICogICkoKChjaGFyICopICAg
IF9zY2FuX2xpc3QgICkgKyBnU2htZW1PZmZzZXQpIDogKCAgU2NhbiAqICApMCkgICk7Cn0KCiAK
CgogCgoKaW5saW5lIHZvaWQKUGFzczo6c25hcF9saXN0KFNuYXAgKnNwKQp7CiAgICBfc25hcF9s
aXN0ID0gKCAgICBzcCAgID8gKCAgU25hcCAqICApKCgoY2hhciAqKSAgICBzcCAgKSAtIGdTaG1l
bU9mZnNldCkgOiAoICBTbmFwICogICkwKSAgOwp9CgppbmxpbmUgU25hcCAqClBhc3M6OnNuYXBf
bGlzdCgpIGNvbnN0CnsKICAgIHJldHVybigoICAgIF9zbmFwX2xpc3QgICA/ICggIFNuYXAgKiAg
KSgoKGNoYXIgKikgICAgX3NuYXBfbGlzdCAgKSArIGdTaG1lbU9mZnNldCkgOiAoICBTbmFwICog
ICkwKSAgKTsKfQoKaW5saW5lIGJvb2wKUGFzczo6aGFzX3NuYXBzKCkgY29uc3QKewogICAgcmV0
dXJuKF9zbmFwX2xpc3QgIT0gX19udWxsICk7Cn0KCiAKCgppbmxpbmUgR3JvdXAgKgpQYXNzOjpn
cm91cF9saXN0KCkgY29uc3QKewogICAgcmV0dXJuKCggICAgX2dyb3VwX2xpc3QgICA/ICggIEdy
b3VwICogICkoKChjaGFyICopICAgIF9ncm91cF9saXN0ICApICsgZ1NobWVtT2Zmc2V0KSA6ICgg
IEdyb3VwICogICkwKSAgKTsKfQoKaW5saW5lIHZvaWQKUGFzczo6Z3JvdXBfbGlzdChHcm91cCAq
ZGF0YSkKewogICAgX2dyb3VwX2xpc3QgPSAoICAgIGRhdGEgICA/ICggIEdyb3VwICogICkoKChj
aGFyICopICAgIGRhdGEgICkgLSBnU2htZW1PZmZzZXQpIDogKCAgR3JvdXAgKiAgKTApICA7Cn0K
CiAKCgppbmxpbmUgSXRlbSAqClBhc3M6Oml0ZW1fbGlzdCgpIGNvbnN0CnsKICAgIHJldHVybigo
ICAgIF9pdGVtX2xpc3QgICA/ICggIEl0ZW0gKiAgKSgoKGNoYXIgKikgICAgX2l0ZW1fbGlzdCAg
KSArIGdTaG1lbU9mZnNldCkgOiAoICBJdGVtICogICkwKSAgKTsKfQoKaW5saW5lIHZvaWQKUGFz
czo6aXRlbV9saXN0KEl0ZW0gKmRhdGEpCnsKICAgIF9pdGVtX2xpc3QgPSAoICAgIGRhdGEgICA/
ICggIEl0ZW0gKiAgKSgoKGNoYXIgKikgICAgZGF0YSAgKSAtIGdTaG1lbU9mZnNldCkgOiAoICBJ
dGVtICogICkwKSAgOwp9CgogCgoKaW5saW5lIFN5bmMgKgpQYXNzOjpzeW5jX2xpc3QoKSBjb25z
dAp7CiAgICByZXR1cm4oKCAgICBfc3luY19saXN0ICAgPyAoICBTeW5jICogICkoKChjaGFyICop
ICAgIF9zeW5jX2xpc3QgICkgKyBnU2htZW1PZmZzZXQpIDogKCAgU3luYyAqICApMCkgICk7Cn0K
CmlubGluZSB2b2lkClBhc3M6OnN5bmNfbGlzdChTeW5jICpkYXRhKQp7CiAgICBfc3luY19saXN0
ID0gKCAgICBkYXRhICAgPyAoICBTeW5jICogICkoKChjaGFyICopICAgIGRhdGEgICkgLSBnU2ht
ZW1PZmZzZXQpIDogKCAgU3luYyAqICApMCkgIDsKfQoKCgoKCgoKCiMgMTYgIi4uLy4uL2luY2x1
ZGUvbG9jYWxpbmMvSGRyLkgiIDIKCgpjbGFzcwlGdW5uZWw7CmNsYXNzCVdpbmQ7CmNsYXNzCUJv
YXJkOwpjbGFzcwlQcGFyYW07CmNsYXNzCU5tcmVjOwpjbGFzcwlHcm91cDsKY2xhc3MJSXRlbTsK
Y2xhc3MJU3luYzsKY2xhc3MJU25hcDsKY2xhc3MJU3luYzsKY2xhc3MJU3lzcGFyOwpjbGFzcwlD
YW1kZXNjOwpjbGFzcwlFZGdlc19XaW5kOwpjbGFzcwlFZGdlc19MTGZyOwpjbGFzcwlGaWR1cmVz
dWx0OwoKCmNsYXNzCWxlc3NfeQp7CnB1YmxpYzoKICAgIHN0YXRpYyBib29sIHN0YXJ0X2xlZnQ7
CiAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgSXRlbSAqbGVmdCwgY29uc3QgSXRlbSAqIHJpZ2h0
KTsKfTsKCmNsYXNzCWxlc3NfeAp7CnB1YmxpYzoKICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBJ
dGVtICpsZWZ0LCBjb25zdCBJdGVtICogcmlnaHQpOwp9OwoKCiAKCgoKCmNsYXNzIEhkciB7CnB1
YmxpYzoKICAgICAKCgogICAgc3RhdGljIHZvaWQJaW5pdCgpOwogICAgc3RhdGljIHZvaWQgbWFw
X2NvbW1zZWcoaW50IHNlc3Npb24pOwoKICAgIGludAkJY3NuYXAoKTsKICAgIHZvaWQJZnJlZV9z
bmFwcygpOwoKICAgICAKCgogICAgbG9hZF9jb2RlX3QJbG9hZF9kYmFzZShjb25zdCBjaGFyICos
IGJvb2wgcmVzZXRfcmVzdWx0cyA9IHRydWUpOwogICAgaW50CQlsb2FkaXQoaW50IGZpbGVfdHlw
ZSwgY29uc3QgY2hhciAqZm4sIEZ1bm5lbCAqcmVtb3RlID0gX19udWxsICwgYm9vbCBmaXh1cCA9
IHRydWUsIGJvb2wgcmVzZXRfcmVzdWx0cyA9IHRydWUpOwoKICAgIGxvYWRfY29kZV90CXNhdmVf
Y29tcGlsZWRfZmlsZShjb25zdCBjaGFyICpmbik7CiAgICBsb2FkX2NvZGVfdAlzYXZlX2FzY2lp
X2ZpbGUoY29uc3QgY2hhciAqZm4sIGJvb2wgaW5fY2FkX29yaWVudGF0aW9uKTsKCiAgICBsb2Fk
X2NvZGVfdAljaGVja19kYmFzZShDYW1kZXNjICosIGNvbnN0IGNoYXIgKik7CgogICAgdm9pZAlm
bGlwKGludCBheGlzKTsKICAgIHZvaWQJcm90YXRlKCk7CiAgICB2b2lkCXJlbG9jKGNvb3JfdCBy
eCwgY29vcl90IHJ5KTsKICAgIGludAkJd3R5cGUoaW50IHd0eXBlKTsKICAgIGludAkJc3RfZ2l0
ZW1zKCk7CQkJIAogICAgbG9uZwlpdGVtY291bnQobG9uZyAqLCBsb25nICogPSBfX251bGwgKTsJ
IAogICAgbG9uZwlzZXRnaXRlbXMoKTsKICAgIGxvbmcJc2V0Z2l0ZW1zKEl0ZW0gKiopOwkgCiAg
ICBpbnQJCW1raWxzdCgpOwogICAgdm9pZAlzZXRfc25hcF9udW1iZXJzKCk7CgogICAgdm9pZAlm
cmVlX3NjYW5zKCk7CiAgICB2b2lkCWNhZGNvb3IoY29uc3QgV2luZCAqdzEsIFdpbmQgKncyLCBi
b29sIGZvcmNlID0gMCkgY29uc3Q7CiAgICB2b2lkCXNuYXBzdHVmZigpOwogICAgaW50CQlzZWxf
cmVmcHRzKEZpZHVyZXN1bHQgKik7CiAgICB2b2lkCWZpbmRfc2htZW1fb2Zmc2V0KCk7CgogICAg
aW50CQlzZXR1cF8zZF9yZXN1bHRzKCk7CgogICAgUGFzcwkqZXNfbWIodV9pbnQpOwogICAgQm9h
cmQJKmVzX2JwKCkgY29uc3Q7CQkgCiAgICBQcGFyYW0JKmVzX3BwYXIoKSBjb25zdDsJIAogICAg
Tm1yZWMJKm1fbmxzdCgpIGNvbnN0OwkgCgogICAgR3JvdXAJKmVzX2dmcmVlKCkgY29uc3Q7CiAg
ICBJdGVtCSplc19pZnJlZSgpIGNvbnN0OwogICAgU3luYwkqZXNfc3lmcmVlKCkgY29uc3Q7CiAg
ICBTbmFwCSplc19zbmZyZWUoKSBjb25zdDsKICAgIFNjYW4JKmVzX3NjZnJlZSgpIGNvbnN0Owog
ICAgTm1yZWMJKmVzX25mcmVlKCkgY29uc3Q7CiAgICBFZGdlc19XaW5kCSplc19ld2ZyZWUoKSBj
b25zdDsKICAgIEVkZ2VzX0xMZnIJKmVzX2VsZnJlZSgpIGNvbnN0OwoKICAgIHVfaW50IAllc19v
dmVybGFwKCkgY29uc3QgeyByZXR1cm4gX2VzX292ZXJsYXA7IH0KICAgIGxvbmcJZXNfc2RhdGUo
KSBjb25zdCB7IHJldHVybiBfZXNfc2RhdGU7IH0KICAgIGxvbmcJZXNfbml0ZW1zKCkgY29uc3Qg
eyByZXR1cm4gX2VzX25pdGVtczsgfQogICAgbG9uZwllc19zY2FsZSgpIGNvbnN0IHsgcmV0dXJu
IF9lc19zY2FsZTsgfQogICAgdV9pbnQJZXNfaGZvdigpIGNvbnN0IHsgcmV0dXJuIF9lc19oZm92
OyB9CiAgICB1X2ludAllc19tYXJnKCkgY29uc3QgeyByZXR1cm4gX2VzX21hcmc7IH0KICAgIHVf
aW50CWVzX3dpZGVjYW1lcmEoKSBjb25zdCB7IHJldHVybiBfZXNfd2lkZWNhbWVyYTsgfQogICAg
dV9pbnQJZXNfcnBzaXplKCkgY29uc3QgeyByZXR1cm4gX2VzX3Jwc2l6ZTsgfQogICAgdV9pbnQJ
ZXNfbmdycHMoKSBjb25zdCB7IHJldHVybiBfZXNfbmdycHM7IH0KICAgIGJvb2wJZXNfc25wcmVz
bnQoKSBjb25zdCB7IHJldHVybiBfZXNfc25wcmVzbnQgJiYgX2VzX2RicHJlc250OyB9CiAgICBi
b29sCWVzX2RicHJlc250KCkgY29uc3QgeyByZXR1cm4gX2VzX2RicHJlc250OyB9CiAgICBib29s
CWVzX3RvcHNpZGUoKSBjb25zdCB7IHJldHVybiBfZXNfdG9wc2lkZTsgfQogICAgYm9vbAllc19j
YWRjb29yKCkgY29uc3QgeyByZXR1cm4gX2VzX2NhZGNvb3I7IH0KICAgIHVfaW50CWVzX25jYW1z
KCkgY29uc3QgeyByZXR1cm4gX2VzX25jYW1zOyB9CiAgICBpbnQJCWVzX3dpbmRvd190eXBlKCkg
Y29uc3QgeyByZXR1cm4gX2VzX3dpbmRvd190eXBlOyB9CiAgICBpbnQJCWVzX3N0YXJ0X3N0b3Ao
KSBjb25zdCB7IHJldHVybiBfZXNfc3RhcnRfc3RvcDsgfQogICAgaW50CQllc19zbmFwX2RlbGF5
KCkgY29uc3QgeyByZXR1cm4gX2VzX3NuYXBfZGVsYXk7IH0KICAgIGJvb2wJZXNfYmFzZV9jb21w
KCkgY29uc3QgeyByZXR1cm4gX2VzX2Jhc2VfY29tcDsgfQogICAgdV9pbnQJZXNfY3VycmVudF9i
b2FyZCgpIGNvbnN0IHsgcmV0dXJuIF9lc19jdXJyZW50X2JvYXJkOyB9CiAgICB1X2ludAllc19u
dW1iZXJfb2ZfYm9hcmRzKCkgY29uc3QgeyByZXR1cm4gX2VzX251bWJlcl9vZl9ib2FyZHM7IH0K
ICAgIGJvb2wJcGFydHNfZXhjbHVkZWQoKSBjb25zdCB7IHJldHVybiBfcGFydHNfZXhjbHVkZWQ7
IH0KCiAgICB2b2lkCWVzX2JwKEJvYXJkICopOwkJIAogICAgdm9pZAllc19wcGFyKFBwYXJhbSAq
KTsJCSAKICAgIHZvaWQJbV9ubHN0KE5tcmVjICopOwkJIAogICAgdm9pZAllc19nZnJlZShHcm91
cCAqKTsKICAgIHZvaWQJZXNfaWZyZWUoSXRlbSAqKTsKICAgIHZvaWQJZXNfc3lmcmVlKFN5bmMg
Kik7CiAgICB2b2lkCWVzX3NuZnJlZShTbmFwICopOwogICAgdm9pZAllc19zY2ZyZWUoU2NhbiAq
KTsKICAgIHZvaWQJZXNfbmZyZWUoTm1yZWMgKik7CiAgICB2b2lkCWVzX2V3ZnJlZShFZGdlc19X
aW5kICopOwogICAgdm9pZAllc19lbGZyZWUoRWRnZXNfTExmciAqKTsKCiAgICB2b2lkIAllc19v
dmVybGFwKGludCB2YWwpIHsgX2VzX292ZXJsYXAgPSB2YWw7IH0KICAgIHZvaWQJZXNfc2RhdGUo
bG9uZyB2YWwpIHsgX2VzX3NkYXRlID0gdmFsOyB9CiAgICB2b2lkCWVzX25pdGVtcyhsb25nIHZh
bCkgeyBfZXNfbml0ZW1zID0gdmFsOyB9CiAgICB2b2lkCWVzX3NjYWxlKGxvbmcgdmFsKSB7IF9l
c19zY2FsZSA9IHZhbDsgfQogICAgdm9pZAllc19oZm92KGludCB2YWwpIHsgX2VzX2hmb3YgPSB2
YWw7IH0KICAgIHZvaWQJZXNfbWFyZyhpbnQgdmFsKSB7IF9lc19tYXJnID0gdmFsOyB9CiAgICB2
b2lkCWVzX3dpZGVjYW1lcmEoaW50IHZhbCkgeyBfZXNfd2lkZWNhbWVyYSA9IHZhbDsgfQogICAg
dm9pZAllc19ycHNpemUoaW50IHZhbCkgeyBfZXNfcnBzaXplID0gdmFsOyB9CiAgICB2b2lkCWVz
X25ncnBzKGludCB2YWwpIHsgX2VzX25ncnBzID0gdmFsOyB9CiAgICB2b2lkCWVzX3NucHJlc250
KGJvb2wgdmFsKSB7IF9lc19zbnByZXNudCA9IHZhbDsgfQogICAgdm9pZAllc19kYnByZXNudChi
b29sIHZhbCkgeyBfZXNfZGJwcmVzbnQgPSB2YWw7IH0KICAgIHZvaWQJZXNfdG9wc2lkZShib29s
IHZhbCkgeyBfZXNfdG9wc2lkZSA9IHZhbDsgfQogICAgdm9pZAllc19jYWRjb29yKGJvb2wgdmFs
KSB7IF9lc19jYWRjb29yID0gdmFsOyB9CiAgICB2b2lkCWVzX25jYW1zKHVfaW50IHZhbCkgeyBf
ZXNfbmNhbXMgPSB2YWw7IH0KICAgIHZvaWQJZXNfd2luZG93X3R5cGUoaW50IHZhbCkgeyBfZXNf
d2luZG93X3R5cGUgPSB2YWw7IH0KICAgIHZvaWQJZXNfc3RhcnRfc3RvcChpbnQgdmFsKSB7IF9l
c19zdGFydF9zdG9wID0gdmFsOyB9CiAgICB2b2lkCWVzX3NuYXBfZGVsYXkoaW50IHZhbCkgeyBf
ZXNfc25hcF9kZWxheSA9IHZhbDsgfQogICAgdm9pZAllc19iYXNlX2NvbXAoYm9vbCB2YWwpIHsg
X2VzX2Jhc2VfY29tcCA9IHZhbDsgfQogICAgdm9pZAllc19jdXJyZW50X2JvYXJkKHVfaW50IHZh
bCkgeyBfZXNfY3VycmVudF9ib2FyZCA9IHZhbDsgfQogICAgdm9pZAllc19udW1iZXJfb2ZfYm9h
cmRzKHVfaW50IHZhbCkgeyBfZXNfbnVtYmVyX29mX2JvYXJkcyA9IHZhbDsgfQogICAgdm9pZAlw
YXJ0c19leGNsdWRlZChib29sIHZhbCkgeyBfcGFydHNfZXhjbHVkZWQgPSB2YWw7IH0KCiAgICBz
dGF0aWMgSGRyICpnZXQoKTsKCgoKCgpwcml2YXRlOgogICAgQm9hcmQgKl9lc19icDsJCSAKICAg
IFBwYXJhbSAqX2VzX3BwYXI7CQkgCiAgICBObXJlYyAqX2VzX25sc3Q7CQkgCiAgICAgCgoKICAg
IEdyb3VwICpfZXNfZ2ZyZWU7CiAgICBJdGVtICpfZXNfaWZyZWU7CiAgICBTeW5jICpfZXNfc3lm
cmVlOwogICAgU25hcCAqX2VzX3NuZnJlZTsKICAgIFNjYW4gKl9lc19zY2ZyZWU7CiAgICBObXJl
YyAqX2VzX25mcmVlOwogICAgRWRnZXNfV2luZCAqX2VzX2V3ZnJlZTsKICAgIEVkZ2VzX0xMZnIg
Kl9lc19lbGZyZWU7CgogICAgIAoKCiAgICBsb25nIF9lc19zZGF0ZTsJCSAKICAgIGxvbmcgX2Vz
X25pdGVtczsJCSAKICAgIGxvbmcgX2VzX3NjYWxlOwkJIAoKICAgICAKCgoKICAgIHVfc2hvcnQg
X2VzX2hmb3Y7CQkgCiAgICB1X3Nob3J0IF9lc19tYXJnOwkJIAoKICAgIHVfc2hvcnQgX2VzX292
ZXJsYXA7CSAKICAgIHVfc2hvcnQgX2VzX3dpZGVjYW1lcmE7CSAKCiAgICB1X3Nob3J0IF9lc19y
cHNpemU7CQkgCiAgICB1X3Nob3J0IF9lc19uZ3JwczsJCSAKCiAgICBCb29sZWFuIF9lc19zbnBy
ZXNudDsJIAogICAgQm9vbGVhbiBfZXNfZGJwcmVzbnQ7CiAgICBCb29sZWFuIF9lc190b3BzaWRl
OwogICAgQm9vbGVhbiBfZXNfY2FkY29vcjsKCiAgICB1X3Nob3J0IF9lc19uY2FtczsJCSAKICAg
IHVfc2hvcnQgX2VzX3dpbmRvd190eXBlOwkgCgogICAgdV9zaG9ydCBfZXNfc3RhcnRfc3RvcDsJ
IAogICAgdV9zaG9ydCBfZXNfc25hcF9kZWxheTsJIAoKICAgICAKCgogICAgQm9vbGVhbiBfZXNf
YmFzZV9jb21wOwkgCiAgICBCb29sZWFuIF9ib3VuZGFyeV9maWxsOwkgCiAgICBzaG9ydCAgIF9m
aWxsZXJbM107CQkgCgogICAgdV9zaG9ydCBfZXNfY3VycmVudF9ib2FyZDsJCSAKICAgIHVfc2hv
cnQgX2VzX251bWJlcl9vZl9ib2FyZHM7CSAKCiAgICBzaG9ydCBfZXNfcnNbMzBdOwkJCSAKCiAg
ICBQYXNzIF9lc19tYltNQVhCUkRdOwkJIAogICAgc2hvcnQgX2VzX292ZXJsYXBfcGVyX2NhbWVy
YVs0XTsJIAoKICAgIEJvb2xlYW4gX3BhcnRzX2V4Y2x1ZGVkOwkJIAogICAgQm9vbGVhbiBfYm9v
bF9maWxsZXI7CQkgCiAgICBzaG9ydCBfc2hvcnRfZmlsbGVyOwkJIAoKICAgIHZvaWQJcmVzZXQo
KTsKCiAgICAgCgoKICAgIHZvaWQJZnJlZV9zbmFwcyhTbmFwICopOwogICAgaW50CQlhbGxfYm9h
cmRfc25hcHMoKTsKICAgIGludAkJc2V0dXBfc25hcF9jYWxjKCk7CiAgICBsb25nCXNuYXAoKTsK
ICAgIGxvbmcJZ2V0X2l0ZW1zKGNsYXNzIEl0ZW0gKiopOwogICAgdm9pZAljX2Rvc25hcChJdGVt
ICoqLCB2ZWN0b3I8IHZlY3RvcjxpbnQ+ID4mLCB2ZWN0b3I8aW50PiYpOwogICAgdm9pZAljc25h
cChJdGVtICoqaWxzdCk7CiAgICBib29sCWdldF9pdGVtcyhzdGQ6Om11bHRpc2V0PEl0ZW0gKiwg
bGVzc194PiYpOwogICAgdm9pZAljX2Rvc25hcChzdGQ6Om11bHRpc2V0PEl0ZW0gKiwgbGVzc194
PiYpOwogICAgdm9pZAljc25hcChzdGQ6Om11bHRpc2V0PEl0ZW0gKiwgbGVzc194PiYpOwoKICAg
IGNvbnN0IHN0ZDo6c3RyaW5nJiBnZXRfYmFzZV9mbGF2b3IoY29uc3QgY2hhciAqZGJfZm5hbWUp
OwoKICAgIHZvaWQJc29ydF9ncm91cCgpOwogICAgdm9pZAlzcmV2ZXJzZSgpOwogICAgdm9pZAlk
b2hpYW5nKCk7CiAgICBsb25nCWdldGdpdGVtKGxvbmcgKik7CiAgICB2b2lkCWR1bXBfaWxpc3Qo
SXRlbSAqKmlsc3QsIGludCBpdGVtcywgY2hhciAqbXNnKTsKICAgIHZvaWQJZ2VuZXJhdGVfc25h
cF9yZWNvcmRzKGxvbmcsIEl0ZW0gKiosIGxvbmcsIGJvb2wsIGJvb2wsIHZlY3RvcjxpbnQ+Jik7
CiAgICB2b2lkCWFzc2lnbl9pdGVtc190b19jYW1lcmFzKEl0ZW0gKiosIGxvbmcsIGxvbmcsIGxv
bmcsIHZlY3RvcjxpbnQ+Jik7CiAgICB2b2lkCWR1bXBfcGFydGlhbF9saXN0KEl0ZW0gKiosIGlu
dCwgY2hhciAqLCBib29sKTsKICAgIEl0ZW0qKglnZXRzY2FuKEl0ZW0gKiosIGxvbmcgKiwgSXRl
bSAqKik7CiAgICBJdGVtKioJZ2F0aGVyX3NuYXBfaXRlbXMoSXRlbSAqKiwgbG9uZywgYm9vbCwg
bG9uZyYsIGxvbmcmKTsKICAgIHZvaWQJc29ydF9mb3JfeShJdGVtICoqIGlsc3QsIGxvbmcgaXRl
bXMsIGJvb2wgc3RhcnRsZWZ0KTsKICAgIGJvb2wJc2luZ2xlX2l0ZW1faW5fc2NhbihJdGVtICoq
LCBsb25nLCBib29sKTsKCiAgICBsb25nCXNvcnRfZm9yX3hfY2VudGVycyhjb25zdCBJdGVtICog
ZTEsIGNvbnN0IEl0ZW0gKiBlMik7CiAgICB2b2lkCXNvcnRfZm9yX3hfY2VudGVycyhJdGVtICoq
LCBsb25nKTsKICAgIHN0YXRpYyBsb25nCXhfY2VudGVyX2NtcChjb25zdCBJdGVtICogZTEsIGNv
bnN0IEl0ZW0gKiBlMik7CiAgICBzdGF0aWMgbG9uZwl4X3Bvc19zb3J0KGNvbnN0IEl0ZW0gKiwg
Y29uc3QgSXRlbSAqKTsKICAgIHZvaWQJc29ydF9mb3JfeF9wb3MoSXRlbSAqKiwgY29uc3QgbG9u
Zyk7CiAgICBzdGF0aWMgbG9uZwl5X2NtcChjb25zdCBJdGVtICogZTEsIGNvbnN0IEl0ZW0gKiBl
Mik7CiAgICBzdGF0aWMgbG9uZwl5X3Jldl9jbXAoY29uc3QgSXRlbSAqIGUxLCBjb25zdCBJdGVt
ICogZTIpOwogICAgYm9vbAlta3NuYXAoKTsKICAgIHZvaWQJbWtzY2FuKCk7CgogICAgYm9vbAlt
azNkc25hcCgpOwogICAgdm9pZAltazNkc2NhbigpOwoKICAgIGxvYWRfY29kZV90CWxvYWRfYmlu
YXJ5X2RiYXNlKGNvbnN0IGNoYXIgKmZuKTsKICAgICAKICAgIHZvaWQJY2xlYXJfZXhjbHVkZWRf
cGFydHMoKTsKCiAgICB2b2lkCWR1bXBfZGF0YWJhc2UoYm9vbCBpbl9jYWRfb3JpZW50YXRpb24p
OwogICAgdm9pZAlkdW1wX2hlYWRlcigpOwogICAgdm9pZAlkX2VzcGFybSgpOwogICAgdm9pZAlk
X3BwYXJtKCk7CiAgICB2b2lkCWRfc3luYygpOwogICAgdm9pZAlkX2JvYXJkKCk7CiAgICB2b2lk
CWRfb2JqZWN0KFdpbmQgKndwLCBib29sIGluX2NhZF9vcmllbnRhdGlvbiA9IGZhbHNlKTsKICAg
IHVfaW50CWdldF9pbnNwZWN0aW9uX2ZsYWdzKCk7CiAgICB2b2lkCWRfc25wZGx5KFBhc3MgKnBh
c3MpOwogICAgdm9pZAlkX2Jjb21wKCk7CiAgICB2b2lkCWRfaXRlbShJdGVtICppcCwgYm9vbCBp
bl9jYWRfb3JpZW50YXRpb24pOwogICAgdm9pZAlkX2dwaXRlbShHcm91cCAqZ3AsIGJvb2wgaW5f
Y2FkX29yaWVudGF0aW9uKTsKICAgIHZvaWQJZF9nbmdfaXRlbXMoR3JvdXAgKmdwKTsKICAgIHZv
aWQJZF9ncm91cChib29sIGluX2NhZF9vcmllbnRhdGlvbik7CiAgICB2b2lkCWRfbm9ncGl0ZW1z
KGJvb2wgaW5fY2FkX29yaWVudGF0aW9uKTsKICAgIGJvb2wJb3Blbl9maWxlKGNvbnN0IGNoYXIg
KmZuKSBjb25zdDsKCiAgICB2b2lkCXJkX3N5c3BhcigpOwogICAgdm9pZAlmaXh1cF9icm9rZW5f
bGlnaHRpbmcoKTsKICAgIHZvaWQJbWFya19leGNsdWRlZF9wYXJ0cyhjb25zdCBjaGFyICpleGNs
dWRlX2ZpbGUpOwoKICAgIHZvaWQJYmFkX2RiKGNvbnN0IGNoYXIgKik7CiAgICBpbnQJCWZpbmRf
ZmlkdWNpYWxzKEl0ZW0gKkRyZWZbXSk7CgogICAgdm9pZCAqb3BlcmF0b3IgbmV3KHNpemVfdCBh
bXQpOwogICAgdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAqKTsKfTsKCnN0YXRpYyBpbmxpbmUg
dm9pZApjYWRjb29yKGNvbnN0IEhkciAqZXNwLCBjb25zdCBXaW5kICp3MSwgV2luZCAqdzIsIGJv
b2wgZm9yY2UgPSAwKQp7CiAgICBlc3AtPmNhZGNvb3IodzEsIHcyLCBmb3JjZSk7Cn0KCmlubGlu
ZSBQYXNzICoKSGRyOjplc19tYih1X2ludCBpKQp7CiAgICBpZiAoaSA+PSBNQVhCUkQpCglyZXR1
cm4oX19udWxsICk7CiAgICByZXR1cm4oJl9lc19tYltpXSk7Cn0KCmlubGluZSBCb2FyZCAqCkhk
cjo6ZXNfYnAoKSBjb25zdAkJIAp7CiAgICByZXR1cm4oKCAgICBfZXNfYnAgICA/ICggIEJvYXJk
ICogICkoKChjaGFyICopICAgIF9lc19icCAgKSArIGdTaG1lbU9mZnNldCkgOiAoICBCb2FyZCAq
ICApMCkgICk7Cn0KCmlubGluZSBQcGFyYW0gKgpIZHI6OmVzX3BwYXIoKSBjb25zdAkJIAp7CiAg
ICByZXR1cm4oKCAgICBfZXNfcHBhciAgID8gKCAgUHBhcmFtICogICkoKChjaGFyICopICAgIF9l
c19wcGFyICApICsgZ1NobWVtT2Zmc2V0KSA6ICggIFBwYXJhbSAqICApMCkgICk7Cn0KCmlubGlu
ZSBObXJlYyAqCkhkcjo6bV9ubHN0KCkgY29uc3QJCSAKewogICAgcmV0dXJuKCggICAgX2VzX25s
c3QgICA/ICggIE5tcmVjICogICkoKChjaGFyICopICAgIF9lc19ubHN0ICApICsgZ1NobWVtT2Zm
c2V0KSA6ICggIE5tcmVjICogICkwKSAgKTsKfQoKaW5saW5lIEdyb3VwICoKSGRyOjplc19nZnJl
ZSgpIGNvbnN0CnsKICAgIHJldHVybigoICAgIF9lc19nZnJlZSAgID8gKCAgR3JvdXAgKiAgKSgo
KGNoYXIgKikgICAgX2VzX2dmcmVlICApICsgZ1NobWVtT2Zmc2V0KSA6ICggIEdyb3VwICogICkw
KSAgKTsKfQoKaW5saW5lIEl0ZW0gKgpIZHI6OmVzX2lmcmVlKCkgY29uc3QKewogICAgcmV0dXJu
KCggICAgX2VzX2lmcmVlICAgPyAoICBJdGVtICogICkoKChjaGFyICopICAgIF9lc19pZnJlZSAg
KSArIGdTaG1lbU9mZnNldCkgOiAoICBJdGVtICogICkwKSAgKTsKfQoKaW5saW5lIFN5bmMgKgpI
ZHI6OmVzX3N5ZnJlZSgpIGNvbnN0CnsKICAgIHJldHVybigoICAgIF9lc19zeWZyZWUgICA/ICgg
IFN5bmMgKiAgKSgoKGNoYXIgKikgICAgX2VzX3N5ZnJlZSAgKSArIGdTaG1lbU9mZnNldCkgOiAo
ICBTeW5jICogICkwKSAgKTsKfQoKaW5saW5lIFNuYXAgKgpIZHI6OmVzX3NuZnJlZSgpIGNvbnN0
CnsKICAgIHJldHVybigoICAgIF9lc19zbmZyZWUgICA/ICggIFNuYXAgKiAgKSgoKGNoYXIgKikg
ICAgX2VzX3NuZnJlZSAgKSArIGdTaG1lbU9mZnNldCkgOiAoICBTbmFwICogICkwKSAgKTsKfQoK
aW5saW5lIFNjYW4gKgpIZHI6OmVzX3NjZnJlZSgpIGNvbnN0CnsKICAgIHJldHVybigoICAgIF9l
c19zY2ZyZWUgICA/ICggIFNjYW4gKiAgKSgoKGNoYXIgKikgICAgX2VzX3NjZnJlZSAgKSArIGdT
aG1lbU9mZnNldCkgOiAoICBTY2FuICogICkwKSAgKTsKfQoKaW5saW5lIE5tcmVjICoKSGRyOjpl
c19uZnJlZSgpIGNvbnN0CnsKICAgIHJldHVybigoICAgIF9lc19uZnJlZSAgID8gKCAgTm1yZWMg
KiAgKSgoKGNoYXIgKikgICAgX2VzX25mcmVlICApICsgZ1NobWVtT2Zmc2V0KSA6ICggIE5tcmVj
ICogICkwKSAgKTsKfQoKaW5saW5lIEVkZ2VzX1dpbmQgKgpIZHI6OmVzX2V3ZnJlZSgpIGNvbnN0
CnsKICAgIHJldHVybigoICAgIF9lc19ld2ZyZWUgICA/ICggIEVkZ2VzX1dpbmQgKiAgKSgoKGNo
YXIgKikgICAgX2VzX2V3ZnJlZSAgKSArIGdTaG1lbU9mZnNldCkgOiAoICBFZGdlc19XaW5kICog
ICkwKSAgKTsKfQoKaW5saW5lIEVkZ2VzX0xMZnIgKgpIZHI6OmVzX2VsZnJlZSgpIGNvbnN0CnsK
ICAgIHJldHVybigoICAgIF9lc19lbGZyZWUgICA/ICggIEVkZ2VzX0xMZnIgKiAgKSgoKGNoYXIg
KikgICAgX2VzX2VsZnJlZSAgKSArIGdTaG1lbU9mZnNldCkgOiAoICBFZGdlc19MTGZyICogICkw
KSAgKTsKfQoKaW5saW5lIHZvaWQKSGRyOjplc19icChCb2FyZCAqIGRhdGEpCQkgCnsKICAgIF9l
c19icCA9ICggICAgZGF0YSAgID8gKCAgQm9hcmQgKiAgKSgoKGNoYXIgKikgICAgZGF0YSAgKSAt
IGdTaG1lbU9mZnNldCkgOiAoICBCb2FyZCAqICApMCkgIDsKfQoKaW5saW5lIHZvaWQKSGRyOjpl
c19wcGFyKFBwYXJhbSAqIGRhdGEpCQkgCnsKICAgIF9lc19wcGFyID0gKCAgICBkYXRhICAgPyAo
ICBQcGFyYW0gKiAgKSgoKGNoYXIgKikgICAgZGF0YSAgKSAtIGdTaG1lbU9mZnNldCkgOiAoICBQ
cGFyYW0gKiAgKTApICA7Cn0KCmlubGluZSB2b2lkCkhkcjo6bV9ubHN0KE5tcmVjICogZGF0YSkJ
CSAKewogICAgX2VzX25sc3QgPSAoICAgIGRhdGEgICA/ICggIE5tcmVjICogICkoKChjaGFyICop
ICAgIGRhdGEgICkgLSBnU2htZW1PZmZzZXQpIDogKCAgTm1yZWMgKiAgKTApICA7Cn0KCmlubGlu
ZSB2b2lkCSAgICAKSGRyOjplc19nZnJlZShHcm91cCAqZGF0YSkKewogICAgX2VzX2dmcmVlID0g
KCAgICBkYXRhICAgPyAoICBHcm91cCAqICApKCgoY2hhciAqKSAgICBkYXRhICApIC0gZ1NobWVt
T2Zmc2V0KSA6ICggIEdyb3VwICogICkwKSAgOwp9CgppbmxpbmUgdm9pZAkgICAgCkhkcjo6ZXNf
aWZyZWUoSXRlbSAqZGF0YSkKewogICAgX2VzX2lmcmVlID0gKCAgICBkYXRhICAgPyAoICBJdGVt
ICogICkoKChjaGFyICopICAgIGRhdGEgICkgLSBnU2htZW1PZmZzZXQpIDogKCAgSXRlbSAqICAp
MCkgIDsKfQoKaW5saW5lIHZvaWQJICAgIApIZHI6OmVzX3N5ZnJlZShTeW5jICpkYXRhKQp7CiAg
ICBfZXNfc3lmcmVlID0gKCAgICBkYXRhICAgPyAoICBTeW5jICogICkoKChjaGFyICopICAgIGRh
dGEgICkgLSBnU2htZW1PZmZzZXQpIDogKCAgU3luYyAqICApMCkgIDsKfQoKaW5saW5lIHZvaWQJ
ICAgIApIZHI6OmVzX3NuZnJlZShTbmFwICpkYXRhKQp7CiAgICBfZXNfc25mcmVlID0gKCAgICBk
YXRhICAgPyAoICBTbmFwICogICkoKChjaGFyICopICAgIGRhdGEgICkgLSBnU2htZW1PZmZzZXQp
IDogKCAgU25hcCAqICApMCkgIDsKfQoKaW5saW5lIHZvaWQJICAgIApIZHI6OmVzX3NjZnJlZShT
Y2FuICpkYXRhKQp7CiAgICBfZXNfc2NmcmVlID0gKCAgICBkYXRhICAgPyAoICBTY2FuICogICko
KChjaGFyICopICAgIGRhdGEgICkgLSBnU2htZW1PZmZzZXQpIDogKCAgU2NhbiAqICApMCkgIDsK
fQoKaW5saW5lIHZvaWQJICAgIApIZHI6OmVzX25mcmVlKE5tcmVjICpkYXRhKQp7CiAgICBfZXNf
bmZyZWUgPSAoICAgIGRhdGEgICA/ICggIE5tcmVjICogICkoKChjaGFyICopICAgIGRhdGEgICkg
LSBnU2htZW1PZmZzZXQpIDogKCAgTm1yZWMgKiAgKTApICA7Cn0KCmlubGluZSB2b2lkCSAgICAK
SGRyOjplc19ld2ZyZWUoRWRnZXNfV2luZCAqZGF0YSkKewogICAgX2VzX2V3ZnJlZSA9ICggICAg
ZGF0YSAgID8gKCAgRWRnZXNfV2luZCAqICApKCgoY2hhciAqKSAgICBkYXRhICApIC0gZ1NobWVt
T2Zmc2V0KSA6ICggIEVkZ2VzX1dpbmQgKiAgKTApICA7Cn0KCmlubGluZSB2b2lkCSAgICAKSGRy
Ojplc19lbGZyZWUoRWRnZXNfTExmciAqZGF0YSkKewogICAgX2VzX2VsZnJlZSA9ICggICAgZGF0
YSAgID8gKCAgRWRnZXNfTExmciAqICApKCgoY2hhciAqKSAgICBkYXRhICApIC0gZ1NobWVtT2Zm
c2V0KSA6ICggIEVkZ2VzX0xMZnIgKiAgKTApICA7Cn0KCiAKCgoKCgoKCgoKCgoKCiAKCgoKCgoK
CgoKCgogCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKIyAyNSAic2F2ZV9zbmFwLmMi
IDIKCiMgMSAiLi4vLi4vaW5jbHVkZS9sb2NhbGluYy9TaWRlbnYuSCIgMQoKCgoKCgoKIyAxICIu
Li8uLi9pbmNsdWRlL2xvY2FsaW5jL0FsaWduLkgiIDEKCgoKCgoKCiMgMSAiLi4vLi4vaW5jbHVk
ZS9sb2NhbGluYy9GaWR1cmVzdWx0LkgiIDEKCgogCgoKCgoKCmNsYXNzCUl0ZW07CgpjbGFzcyBG
aWR1cmVzdWx0IHsKcHJpdmF0ZToKICAgIEl0ZW0gKl9mX2l0ZW07CQkgCnB1YmxpYzoKICAgIGxv
bmcgZl9vazsJCQkgCiAgICBjb29yX3QgZl9keDsJCSAKICAgIGNvb3JfdCBmX2R5OwkJIAoKICAg
IEl0ZW0gKmZfaXRlbSgpOwogICAgdm9pZCBmX2l0ZW0oSXRlbSAqZGF0YSk7Cn07CgppbmxpbmUg
SXRlbSAqCkZpZHVyZXN1bHQ6OmZfaXRlbSgpCnsKICAgIHJldHVybigoICAgIF9mX2l0ZW0gICA/
ICggIEl0ZW0gKiAgKSgoKGNoYXIgKikgICAgX2ZfaXRlbSAgKSArIGdTaG1lbU9mZnNldCkgOiAo
ICBJdGVtICogICkwKSAgKTsKfQoKaW5saW5lIHZvaWQKRmlkdXJlc3VsdDo6Zl9pdGVtKEl0ZW0g
KmRhdGEpCnsKICAgIF9mX2l0ZW0gPSAoICAgIGRhdGEgICA/ICggIEl0ZW0gKiAgKSgoKGNoYXIg
KikgICAgZGF0YSAgKSAtIGdTaG1lbU9mZnNldCkgOiAoICBJdGVtICogICkwKSAgOwp9CgojIDgg
Ii4uLy4uL2luY2x1ZGUvbG9jYWxpbmMvQWxpZ24uSCIgMgoKCmNsYXNzCVN5bmM7CgogCgoKCmNs
YXNzIEFsaWduIHsKcHVibGljOgogICAgUG9pbnQgYV9wdjsJCQkgCiAgICBjb29yX3QgYV90eDsJ
CSAKICAgIGNvb3JfdCBhX3R5OwkJIAogICAgY29vcl90IGFfYW5nOwkJIAogICAgY29vcl90IGFf
ZGlzOwkJIAogICAgdV9sb25nIGFfbnJvdDsJCSAKICAgIGxvbmcgYV8xMTsJCQkgCiAgICBsb25n
IGFfMTI7CiAgICBsb25nIGFfMjE7CiAgICBsb25nIGFfMjI7CiAgICBsb25nIGFfMzE7CiAgICBs
b25nIGFfMzI7CiAgICBGaWR1cmVzdWx0IGFfZmlkdVtORklEVV07CgogICAgc2hvcnQgdHJhbnNy
b3QoY29uc3QgU3luYyAqKTsKICAgIHZvaWQgbm9fY29tcCgpOwogICAgdm9pZCBkaXNwbGF5KGNo
YXIgKik7CiAgICBib29sIHNldHVwX2FsaWdubWVudChib29sIGRvX3NodWZmbGUsICBpbnQgKm51
bV9maWR1Y2lhbHMgPSBfX251bGwgKTsKCiAgICBBbGlnbiYgb3BlcmF0b3IgPShjb25zdCBBbGln
biYpOwoKICAgIHN0YXRpYyBBbGlnbiAqZ2V0X3Bhc3MoaW50IHBhc3MgPSAtMSk7Cgpwcml2YXRl
OgogICAgdm9pZCAqb3BlcmF0b3IgbmV3KHNpemVfdCk7CiAgICB2b2lkICpvcGVyYXRvciBuZXco
c2l6ZV90LCBpbnQpOwogICAgdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAqKTsKfTsKCiMgOCAi
Li4vLi4vaW5jbHVkZS9sb2NhbGluYy9TaWRlbnYuSCIgMgoKCgojIDEgIi4uLy4uL2luY2x1ZGUv
bG9jYWxpbmMvQ2FtZGVzYy5IIiAxCgoKCgoKCiMgMSAiLi4vLi4vaW5jbHVkZS9sb2NhbGluYy9D
b21wdGFiLkgiIDEKCgoKCiAKCgoKY29uc3QgaW50IE5CQUQJCT0gMzI7CSAKCnR5cGVkZWYgZW51
bSB7IGtDb21wT2ZmLCBrQ29tcE9uIH0gZUNvbXBPbk9mZjsKCnR5cGVkZWYgY29vcl90IENvbXBU
YWJsZVZhbHVlX3Q7CgpzdGF0aWMgY29uc3QgQ29tcFRhYmxlVmFsdWVfdCBDT01QX05PVFNFVCA9
IDA7CSAKCmNsYXNzIFB4cG9zIHsKcHVibGljOgogICAgUHhwb3MoQ29tcFRhYmxlVmFsdWVfdCB4
LCBDb21wVGFibGVWYWx1ZV90IHkpIDogX3B4eCh4KSwgX3B4eSh5KSB7fQogICAgUHhwb3MoKSA6
IF9weHgoQ09NUF9OT1RTRVQpLCBfcHh5KENPTVBfTk9UU0VUKSB7fQoKICAgIHZvaWQgcHh4KENv
bXBUYWJsZVZhbHVlX3QgdmFsKSB7IF9weHggPSB2YWw7IH0KICAgIHZvaWQgcHh5KENvbXBUYWJs
ZVZhbHVlX3QgdmFsKSB7IF9weHkgPSB2YWw7IH0KCiAgICBDb21wVGFibGVWYWx1ZV90IHB4eCgp
IGNvbnN0IHsgcmV0dXJuKF9weHgpOyB9CiAgICBDb21wVGFibGVWYWx1ZV90IHB4eSgpIGNvbnN0
IHsgcmV0dXJuKF9weHkpOyB9Cgpwcml2YXRlOgogICAgQ29tcFRhYmxlVmFsdWVfdCBfcHh4Owog
ICAgQ29tcFRhYmxlVmFsdWVfdCBfcHh5OwkJIAp9OwoKY29uc3QgbG9uZyBOWEMJCT0gMjIwOwkJ
IApjb25zdCBsb25nIE5ZQwkJPSAxODA7CQkgCmNvbnN0IGxvbmcgQ09NUEFSUlNaCT0gKE5YQypO
WUMqc2l6ZW9mKFB4cG9zKSk7CmNvbnN0IGxvbmcgQ09NUE1BR0lDCT0gMHg0MzRmNGQ1MDsJIApj
b25zdCBsb25nIENPTVBCTUFHSUMJPSAweGZmMDYyNTk3OwkgCgpjbGFzcyBDb21wdGFiIHsKcHJp
dmF0ZToKICAgIFB4cG9zICpfY21fY29tcF90YWI7CSAKCnB1YmxpYzoKICAgIGxvbmcgY21fbWFn
aWM7CiAgICBsb25nIGNtX3RtcHI7CiAgICBsb25nIGNtX3h0c2M7CQkgCiAgICBsb25nIGNtX3l0
c2M7CiAgICBsb25nIGNtX3N4OwkJCSAKICAgIGxvbmcgY21fc3k7CiAgICBsb25nIGNtX3J4OwkJ
CSAKICAgIGxvbmcgY21fcnk7CiAgICBsb25nIGNtX294OwkJCSAKICAgIGxvbmcgY21fb3k7Cgog
ICAgdm9pZCBpbml0KCk7CiAgICBpbnQgc2F2ZShpbnQpOwogICAgaW50IGxvYWQoaW50KTsKCiAg
ICBQeHBvcyAqY21fY29tcF90YWIoKSBjb25zdCA7CiAgICBQeHBvcyAqY21fY29tcF90YWIoaW50
IGlueCl7cmV0dXJuICYoY21fY29tcF90YWIoKVtpbnhdKTt9CiAgICB2b2lkICAgY21fY29tcF90
YWIoUHhwb3MgKik7Cn07CgppbmxpbmUgUHhwb3MgKgpDb21wdGFiOjpjbV9jb21wX3RhYih2b2lk
KSBjb25zdAp7CiAgICByZXR1cm4oKCAgIF9jbV9jb21wX3RhYiAgID8gKCAgUHhwb3MgKiAgKSgo
KGNoYXIgKikgICBfY21fY29tcF90YWIgICkgKyBnU2htZW1PZmZzZXQpIDogKCAgUHhwb3MgKiAg
KTApICApOwp9CgppbmxpbmUgdm9pZApDb21wdGFiOjpjbV9jb21wX3RhYihQeHBvcyAqIGRhdGEp
CnsKICAgIF9jbV9jb21wX3RhYiA9ICggICBkYXRhICAgPyAoICBQeHBvcyAqICApKCgoY2hhciAq
KSAgIGRhdGEgICkgLSBnU2htZW1PZmZzZXQpIDogKCAgUHhwb3MgKiAgKTApICA7Cn0gCgojIDcg
Ii4uLy4uL2luY2x1ZGUvbG9jYWxpbmMvQ2FtZGVzYy5IIiAyCgoKCmNsYXNzCVdpbmQ7CmNsYXNz
CVh5c3RhZ2U7CmNsYXNzCUhkcjsKY2xhc3MJY29uZmlndXJhdGlvbjsKCmNvbnN0IGludCBrTWF4
T3ZlcmxhcHMgPSBrTnVtQ21tQ2FtIC8gMjsKCmVudW0gZUNhbWVyYU92ZXJsYXBzIHsga092ZXJs
YXBPbmUsIGtPdmVybGFwVHdvLCBrT3ZlcmxhcFRocmVlLCBrT3ZlcmxhcEZvdXIgfTsKCiMgMzcg
Ii4uLy4uL2luY2x1ZGUvbG9jYWxpbmMvQ2FtZGVzYy5IIgoKCmNsYXNzIENhbWRlc2MgewpwdWJs
aWM6CiAgICBDb21wdGFiIGNtX2NvbXB0YWI7CgogICAgdm9pZCB0cl92ZWN0KGNvb3JfdCwgY29v
cl90LCBjb29yX3QgKiwgY29vcl90ICopOwoKICAgIHZvaWQgaW0yZ3IoY29vcl90LCBjb29yX3Qs
IGNvb3JfdCAqLCBjb29yX3QgKik7CiAgICB2b2lkIHdfaW0yZ3IoV2luZCAqLCBXaW5kICopOwog
ICAgdm9pZCB3X2RiMmltKFdpbmQgKiwgV2luZCAqLCBsb25nLCBsb25nKTsKICAgIHZvaWQgd19k
YjJncihXaW5kICosIFdpbmQgKiwgY29uc3QgV2luZCAqLCBib29sID0gdHJ1ZSk7CiAgICBpbnQg
b3IyZnIoaW50KTsKCiAgICB2b2lkIGZvdmluaXQoKTsKICAgIHZvaWQgdXBkYXRlX2Zyb21fY29u
ZmlndXJhdGlvbihjb25zdCBjb25maWd1cmF0aW9uICopOwoKICAgIGludCAgY2FtZXJhX29yaWVu
dGF0aW9uKCkgY29uc3QgeyByZXR1cm4gX2NtX29yaWVudDsgfQogICAgdm9pZCAgIGNhbWVyYV9v
cmllbnRhdGlvbihpbnQgdmFsKSB7IF9jbV9vcmllbnQgPSB2YWw7IH0KCiAgICB2b2lkIGFkanVz
dF94eV9mb3Jfb3JpZW50YXRpb24obG9uZyBkeCwgbG9uZyBkeSwgbG9uZyAqZHhwLCBsb25nICpk
eXApOwoKICAgIGVDb21wT25PZmYgIGNhbWVyYV9jb21wZW5zYXRpb24oKSBjb25zdCB7IHJldHVy
biBfY21fY29mZjsgfQogICAgdm9pZCAgIGNhbWVyYV9jb21wZW5zYXRpb24oZUNvbXBPbk9mZiB2
YWwpIHsgX2NtX2NvZmYgPSB2YWw7IH0KCiAgICB1X2ludCBob3Jpem9uYWxfZm92KCkgY29uc3Qg
eyByZXR1cm4gX2NtX2hmb3Y7IH0KICAgIHZvaWQgaG9yaXpvbmFsX2Zvdih1X2ludCB2YWwpIHsg
X2NtX2hmb3YgPSB2YWw7IH0KCiAgICBpbnQgIHhmb3ZfaW5fZGF0YWJhc2VfdW5pdHMoKSBjb25z
dCB7IHJldHVybiBfY21feGZvdjsgfQogICAgdm9pZCAgIHhmb3ZfaW5fZGF0YWJhc2VfdW5pdHMo
aW50IHZhbCkgeyBfY21feGZvdiA9IHZhbDsgfQoKICAgIGludCAgeWZvdl9pbl9kYXRhYmFzZV91
bml0cygpIGNvbnN0IHsgcmV0dXJuIF9jbV95Zm92OyB9CiAgICB2b2lkICAgeWZvdl9pbl9kYXRh
YmFzZV91bml0cyhpbnQgdmFsKSB7IF9jbV95Zm92ID0gdmFsOyB9CgogICAgaW50ICB2aXNpYmxl
X3hmb3ZfaW5fZGF0YWJhc2VfdW5pdHMoKSBjb25zdCB7IHJldHVybiBfY21fdnhmb3Y7IH0KICAg
IHZvaWQgICB2aXNpYmxlX3hmb3ZfaW5fZGF0YWJhc2VfdW5pdHMoaW50IHZhbCkgeyBfY21fdnhm
b3YgPSB2YWw7IH0KCiAgICBpbnQgIHZpc2libGVfeWZvdl9pbl9kYXRhYmFzZV91bml0cygpIGNv
bnN0IHsgcmV0dXJuIF9jbV92eWZvdjsgfQogICAgdm9pZCAgIHZpc2libGVfeWZvdl9pbl9kYXRh
YmFzZV91bml0cyhpbnQgdmFsKSB7IF9jbV92eWZvdiA9IHZhbDsgfQoKICAgIGludCAgY2FtZXJh
X3dpZGUoKSBjb25zdCB7IHJldHVybiBfY21fd2lkZTsgfQogICAgdm9pZCAgIGNhbWVyYV93aWRl
KGludCB2YWwpIHsgX2NtX3dpZGUgPSB2YWw7IH0KCiAgICBib29sICBjYW1lcmFfc2hvcnQoKSBj
b25zdCB7IHJldHVybiBfY21fc2hvcnQ7IH0KICAgIHZvaWQgICBjYW1lcmFfc2hvcnQoYm9vbCB2
YWwpIHsgX2NtX3Nob3J0ID0gdmFsOyB9CgogICAgYm9vbCAgY2FtZXJhX2Zhc3QoKSBjb25zdCB7
IHJldHVybiBfY21fZmFzdDsgfQogICAgdm9pZCAgIGNhbWVyYV9mYXN0KGJvb2wgdmFsKSB7IF9j
bV9mYXN0ID0gdmFsOyB9CgogICAgdV9pbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybihfY21fb3Jp
ZW50ICYgMSA/IF9jbV9udmlzIDogX2NtX2Zyc2l6ZSk7IH0KICAgIHVfaW50IGhlaWdodCgpIGNv
bnN0IHsgcmV0dXJuKF9jbV9vcmllbnQgJiAxID8gX2NtX2Zyc2l6ZSA6IF9jbV9udmlzKTsgfQoK
ICAgIHZvaWQgd2lkdGgoaW50IHZhbCkKCSAgICB7IGlmIChfY21fb3JpZW50ICYgMSkgX2NtX252
aXMgPSB2YWw7IGVsc2UgX2NtX2Zyc2l6ZSA9IHZhbDsgfQogICAgdm9pZCBoZWlnaHQoaW50IHZh
bCkKCSAgICB7IGlmIChfY21fb3JpZW50ICYgMSkgX2NtX2Zyc2l6ZSA9IHZhbDsgZWxzZSBfY21f
bnZpcyA9IHZhbDsgfQoKICAgIGludCBudW1fY2FtcygpIGNvbnN0IHsgcmV0dXJuKF9udW1fY2Ft
cyk7IH0gIAogICAgdm9pZCBudW1fY2FtcyhpbnQgbnVtKTsKCiAgICB1X2ludCBob3Jpel92ZXJ0
X3JhdGlvKCkgY29uc3QgeyByZXR1cm4oX2NtX2todik7IH0KICAgIHZvaWQgaG9yaXpfdmVydF9y
YXRpbyh1X2ludCByYXRpbykgeyBfY21fa2h2ID0gcmF0aW87IH0KCiAgICBpbnQgbWlycm9yX292
ZXJsYXAoKSBjb25zdCB7IHJldHVybiBfbWlycm9yX292ZXJsYXA7IH0KICAgIHZvaWQgbWlycm9y
X292ZXJsYXAoaW50IG92ZXJsYXApIHsgX21pcnJvcl9vdmVybGFwID0gb3ZlcmxhcDsgfQoKICAg
IGxvbmcgd2luX2FkanVzdF8zRGJhc2UoKSBjb25zdCB7IHJldHVybihfd2luX2FkanVzdF8zRGJh
c2UpOyB9CiAgICB2b2lkIHdpbl9hZGp1c3RfM0RiYXNlKGxvbmcgdmFsdWUpIHsgX3dpbl9hZGp1
c3RfM0RiYXNlID0gdmFsdWU7IH0KCiAgICBsb25nIGJhc2VfZ3JheSgpIGNvbnN0IHsgcmV0dXJu
KF9iYXNlX2dyYXkpOyB9CiAgICB2b2lkIGJhc2VfZ3JheShsb25nIHZhbHVlKSB7IF9iYXNlX2dy
YXkgPSB2YWx1ZTsgfQoKICAgICAKCgogICAgdm9pZCBjb21wX2ZpbmkoY2hhciAqc3RyLCBjaGFy
ICpmbik7CgogICAgc3RhdGljIENhbWRlc2MgKmdldCgpOwoKcHJpdmF0ZToKICAgIGxvbmcgICBf
Y21fb3JpZW50OwkJIAogICAgZUNvbXBPbk9mZiAgIF9jbV9jb2ZmOwkJIAoKICAgIHVfc2hvcnQg
X2NtX2hmb3Y7CQkgCiAgICBzaG9ydCAgIF9jbV94Zm92OwkJIAoKICAgIHNob3J0ICAgX2NtX3lm
b3Y7CQkgCiAgICBzaG9ydCAgIF9jbV92eGZvdjsJCSAKCiAgICBzaG9ydCAgIF9jbV92eWZvdjsJ
CSAKICAgIHNob3J0ICAgX2NtX3dpZGU7CQkgCgogICAgc2hvcnQgICBfY21fc2hvcnQ7CQkgCiAg
ICBzaG9ydCAgIF9jbV9mYXN0OwkJIAoKICAgIHNob3J0ICAgX2NtX252aXM7CQkgCiAgICBzaG9y
dCAgIF9jbV9mcnNpemU7CQkgCgogICAgc2hvcnQgICBfbnVtX2NhbXM7CQkgCiAgICB1X3Nob3J0
IF9jbV9raHY7CQkgCgogICAgc2hvcnQgICBfbWlycm9yX292ZXJsYXA7CSAKICAgIHNob3J0ICAg
X2ZpbGxlcjsJCSAKICAgICAKCgoKICAgIHNob3J0IF9jbV9pY2Q7CQkgCiAgICBzaG9ydCBfY21f
bmNhbTsJCSAKCgoKCgoKICAgIGxvbmcgX2Jhc2VfZ3JheTsKICAgIGxvbmcgX3dpbl9hZGp1c3Rf
M0RiYXNlOwoKICAgIGlubGluZSBzaXplX3QgZ3RfeG1pZCgpOwogICAgaW5saW5lIHNpemVfdCBn
dF95bWlkKCk7CiAgICB2b2lkIGRiMmltKGNvb3JfdCwgY29vcl90LCBjb29yX3QgKiwgY29vcl90
ICosIGxvbmcsIGxvbmcpOwogICAgdm9pZCBkYjJmcjQoY29vcl90LCBjb29yX3QsIGNvb3JfdCAq
LCBjb29yX3QgKiwgbG9uZywgbG9uZyk7CiAgICB2b2lkIGRiMmdyKGNvb3JfdCwgY29vcl90LCBj
b29yX3QgKiwgY29vcl90ICosIGNvbnN0IFdpbmQgKiwgYm9vbCA9IHRydWUpOwoKICAgIHZvaWQg
cGRiMmZyNChjb29yX3QsIGNvb3JfdCwgY29vcl90ICosIGNvb3JfdCAqLCBsb25nICosIGxvbmcg
Kik7CiAgICB2b2lkIHB3NF9kYjJmcihXaW5kICosIFdpbmQgKiwgbG9uZyAqLCBsb25nICopOwog
ICAgdm9pZCB3NF9kYjJmcihXaW5kICosIFdpbmQgKiwgbG9uZywgbG9uZyk7CiAgICB2b2lkIGRi
MmZyKGNvb3JfdCwgY29vcl90LCBjb29yX3QgKiwgY29vcl90ICosIGNvbnN0IFdpbmQgKik7CiAg
ICB2b2lkIHdfZGIyZnIoV2luZCAqLCBXaW5kICosIGNvbnN0IFdpbmQgKik7CgogICAgIAoKCiAg
ICBpbnQgcF9jbXB2YWxzKCk7CiAgICBpbnQgcmRjbXBmaWxlKGNvbnN0IGNoYXIgKmZuKTsKCiAg
ICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkICopOwogICAgdm9pZCAqb3BlcmF0b3IgbmV3IChz
aXplX3QpOwkgCn07CgogCgoKc3RhdGljIGlubGluZSBpbnQKdHJfYyhpbnQgYywgbG9uZyBzY2Fs
ZTEsIGludCBzY2FsZTIsIGludCBvZmZzZXQxLCBpbnQgb2Zmc2V0MikKewogICAgIAoKCiAgICBy
ZXR1cm4gKCgoKChjIC0gb2Zmc2V0MSkgKiBzY2FsZTEpICsgNSkgLyBzY2FsZTIpICsgb2Zmc2V0
Mik7Cn0KCiAKCgpzdGF0aWMgaW5saW5lIGludAp0cl9sKGxvbmcgYywgbG9uZyBzMSwgZmxvYXQg
czIpCnsKICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KCgoYyAqIHMxKSAvIHMyKSArIC41KTsK
fQoKc3RhdGljIGlubGluZSB2b2lkCmFkanVzdF94eV9mb3Jfb3JpZW50YXRpb24obG9uZyBkeCwg
bG9uZyBkeSwgbG9uZyAqZHhwLCBsb25nICpkeXApCnsKICAgIENhbWRlc2M6OmdldCgpLT5hZGp1
c3RfeHlfZm9yX29yaWVudGF0aW9uKGR4LCBkeSwgZHhwLCBkeXApOwp9CgojIDExICIuLi8uLi9p
bmNsdWRlL2xvY2FsaW5jL1NpZGVudi5IIiAyCgoKCgoKY2xhc3MJWHlzdGFnZTsKY2xhc3MJU25h
cDsKY2xhc3MJV2luZDsKY2xhc3MJY29uZmlndXJhdGlvbjsKCiAKCgoKCmNsYXNzIFNpZGVudiB7
CnB1YmxpYzoKICAgIFh5c3RhZ2UgKnNfc3RhZ2UoKSBjb25zdDsKICAgIHZvaWQgc19zdGFnZShY
eXN0YWdlICopOwogICAgdm9pZCBndF9zbndpbihjb25zdCBTbmFwICosIFdpbmQgKiwgbG9uZyAq
LCBsb25nICopIGNvbnN0OwogICAgdm9pZCBndF9zbjR3aW4oY29uc3QgU25hcCAqLCBXaW5kICos
IGxvbmcgKiwgbG9uZyAqKSBjb25zdDsKICAgIHZvaWQgc2h1ZmZsZSgpOwogICAgdm9pZCB1cGRh
dGVfZnJvbV9jb25maWd1cmF0aW9uKGNvbnN0IGNvbmZpZ3VyYXRpb24gKik7CgogICAgQm9vbGVh
biBzX2ZpZHVsaWdodCgpIGNvbnN0IHsgcmV0dXJuIF9zX2ZpZHVsaWdodDsgfQogICAgQm9vbGVh
biBzX3N0YXJ0c3RvcCgpIGNvbnN0IHsgcmV0dXJuIF9zX3N0YXJ0c3RvcDsgfQogICAgQm9vbGVh
biBzX3JldmlldygpIGNvbnN0IHsgcmV0dXJuIF9zX3JldmlldzsgfQogICAgQm9vbGVhbiBzX3Ni
YWRzbigpIGNvbnN0IHsgcmV0dXJuIF9zX3NiYWRzbjsgfQoKICAgIHZvaWQgc19maWR1bGlnaHQo
Qm9vbGVhbiB2YWwpIHsgX3NfZmlkdWxpZ2h0ID0gdmFsOyB9CiAgICB2b2lkIHNfc3RhcnRzdG9w
KEJvb2xlYW4gdmFsKSB7IF9zX3N0YXJ0c3RvcCA9IHZhbDsgfQogICAgdm9pZCBzX3JldmlldyhC
b29sZWFuIHZhbCkgeyBfc19yZXZpZXcgPSB2YWw7IH0KICAgIHZvaWQgc19zYmFkc24oQm9vbGVh
biB2YWwpIHsgX3Nfc2JhZHNuID0gdmFsOyB9CiAgICAKICAgIHN0YXRpYyBTaWRlbnYgKmdldCgp
OwoKcHJpdmF0ZToKICAgIFh5c3RhZ2UgKl9zX3N0YWdlOwoKICAgIEJvb2xlYW4gX3NfZmlkdWxp
Z2h0OwkJIAogICAgQm9vbGVhbiBfc19zdGFydHN0b3A7CQkgCiAgICBCb29sZWFuIF9zX3Jldmll
dzsJCQkgCiAgICBCb29sZWFuIF9zX3NiYWRzbjsJCQkgCgogICAgZnJpZW5kIGNsYXNzIEFsaWdu
OwogICAgZnJpZW5kIGNsYXNzIENhbWRlc2M7CgogICAgQWxpZ24gc19hbGlnbltrTWF4QnJkXTsK
ICAgIENhbWRlc2Mgc19jYW1kZXNjOwoKICAgIGNvbnN0IEFsaWduICpmbHRfc253aW4oY29uc3Qg
U25hcCAqLCBsb25nICosIGxvbmcgKikgY29uc3Q7CiAgICB2b2lkIHRyYW5zaXQoU25hcCAqLCBT
bmFwICosIHNob3J0ICosIHNob3J0ICopOwogICAgSXRlbSAqeF9zbmFwKFNuYXAgKnNyYywgU25h
cCAqZHN0LCBJdGVtICppdG0pOwoKICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQgKik7CSAK
ICAgIHZvaWQgKm9wZXJhdG9yIG5ldyhzaXplX3QpOwkJIAp9OwoKaW5saW5lIFh5c3RhZ2UgKgpT
aWRlbnY6OnNfc3RhZ2UoKSBjb25zdAp7CiAgICByZXR1cm4oKCAgICBfc19zdGFnZSAgID8gKCAg
WHlzdGFnZSAqICApKCgoY2hhciAqKSAgICBfc19zdGFnZSAgKSArIGdTaG1lbU9mZnNldCkgOiAo
ICBYeXN0YWdlICogICkwKSAgKTsKfQoKaW5saW5lIHZvaWQKU2lkZW52OjpzX3N0YWdlKFh5c3Rh
Z2UgKmRhdGEpCnsKICAgIF9zX3N0YWdlID0gKCAgICBkYXRhICAgPyAoICBYeXN0YWdlICogICko
KChjaGFyICopICAgIGRhdGEgICkgLSBnU2htZW1PZmZzZXQpIDogKCAgWHlzdGFnZSAqICApMCkg
IDsKfQoKc3RhdGljIGlubGluZSB2b2lkCmd0X3Nud2luKGNvbnN0IFNpZGVudiAqc2QsIFNuYXAg
KkRzLCBXaW5kICp3aW4sIGxvbmcgKngsIGxvbmcgKnkpCnsKICAgIHNkLT5ndF9zbndpbihEcywg
d2luLCB4LCB5KTsKfQoKc3RhdGljIGlubGluZSB2b2lkCmd0X3NuNHdpbihTaWRlbnYgKnNkLCBT
bmFwICpEcywgV2luZCAqd2luLCBsb25nICp4LCBsb25nICp5KQp7CiAgICBzZC0+Z3Rfc240d2lu
KERzLCB3aW4sIHgsIHkpOwp9CgojIDI2ICJzYXZlX3NuYXAuYyIgMgoKIyAxICIuLi8uLi9pbmNs
dWRlL2xvY2FsaW5jL0l0ZW0uSCIgMQoKCgoKCgoKCgoKIyAxICIuLi8uLi9pbmNsdWRlL2xvY2Fs
aW5jL0luc3BlY3RlZC5IIiAxCgoKIAoKCgoKCgoKCgoKCmNsYXNzCVJlc3VsdHM7CmNsYXNzCUl0
ZW07CmNsYXNzCVBhc3M7Cgpjb25zdCBjaGFyIGtTa2lwcGVkSXRlbSA9IC0xOwoKIAoKCgpjbGFz
cyBJbnNwZWN0ZWQgewpwdWJsaWM6CgogICAgV2luZAlfd2luZDsKCiAgICBSZXN1bHRzICpyZXN1
bHRzKCkgY29uc3Q7CiAgICBJbnNwZWN0ZWQgKmZvcncoKSBjb25zdDsKICAgIEl0ZW0gKml0ZW1z
KCkgY29uc3Q7CgogICAgdm9pZCBmb3J3KEluc3BlY3RlZCAqKTsKICAgIHZvaWQgaXRlbXMoSXRl
bSAqKTsKICAgIHZvaWQgcm90YXRlKCk7CgogICAgdm9pZAl3aW5kKFdpbmQmIHdpbikgeyBfd2lu
ZCA9IHdpbjsgfQogICAgV2luZAl3aW5kKCkgeyByZXR1cm4gX3dpbmQ7IH0KCiAgICB2b2lkCXJl
c3VsdHNfaW5kZXgodV9pbnQgaW5kZXgpIHsgX3Jlc3VsdHNfaW5kZXggPSBpbmRleDsgfQogICAg
Y29uc3QgdV9pbnQgcmVzdWx0c19pbmRleCgpIGNvbnN0ICB7IHJldHVybiBfcmVzdWx0c19pbmRl
eDsgfQoKICAgIHZvaWQJYWxnb3JpdGhtKHVfaW50IGFsZ28pIHsgX2FsZ29yaXRobSA9IGFsZ287
IH0KICAgIGNvbnN0IHVfaW50IGFsZ29yaXRobSgpIGNvbnN0IHsgcmV0dXJuIF9hbGdvcml0aG07
IH0KCiAgICB2b2lkCXBhc3NfbnVtYmVyKHVfaW50IHBhc3MpIHsgX3Bhc3NfbnVtYmVyID0gcGFz
czsgfQogICAgY29uc3QgdV9pbnQgcGFzc19udW1iZXIoKSBjb25zdCB7IHJldHVybiBfcGFzc19u
dW1iZXI7IH0KCiAgICB2b2lkCW9yaWVudGF0aW9uKHVfaW50IG9yaWVudCkgeyBfb3JpZW50YXRp
b24gPSBvcmllbnQ7IH0KICAgIGNvbnN0IHVfaW50IG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1
cm4gX29yaWVudGF0aW9uOyB9CgogICAgdm9pZAlzY3JhdGNoKHVfaW50IHZhbCkgeyBfc2NyYXRj
aCA9IHZhbDsgfQogICAgY29uc3QgdV9pbnQgc2NyYXRjaCgpIGNvbnN0IHsgcmV0dXJuIF9zY3Jh
dGNoOyB9CgogICAgdm9pZAl2aXNpYmxlKGJvb2wgdmlzKSB7IF92aXNpYmxlID0gdmlzOyB9CiAg
ICBjb25zdCBib29sCXZpc2libGUoKSBjb25zdCB7IHJldHVybiAoX3Zpc2libGUgJiYgIV9leGNs
dWRlZCk7IH0KCiAgICB2b2lkCWJhZGl0ZW0oY2hhciB2YWwpIHsgX2JhZGl0ZW0gPSB2YWw7IH0K
ICAgIGNvbnN0IGNoYXIJYmFkaXRlbSgpIGNvbnN0IHsgcmV0dXJuIF9iYWRpdGVtOyB9CgogICAg
dm9pZAlleGNsdWRlZChib29sIHZhbCkgeyBfZXhjbHVkZWQgPSB2YWw7IH0KICAgIGNvbnN0IGJv
b2wJZXhjbHVkZWQoKSBjb25zdCB7IHJldHVybiBfZXhjbHVkZWQ7IH0KCnByb3RlY3RlZDoKICAg
IEluc3BlY3RlZAkqX2Zvcnc7CiAgICBJdGVtCSpfaXRlbXM7CSAKCiAgICB1X3Nob3J0CV9yZXN1
bHRzX2luZGV4OwkJIAogICAgdV9zaG9ydAlfYWxnb3JpdGhtOwkJIAoKICAgIHVfc2hvcnQJX3Bh
c3NfbnVtYmVyOwkJIAogICAgdV9zaG9ydAlfb3JpZW50YXRpb247CgogICAgdV9zaG9ydAlfc2Ny
YXRjaDsJCSAKICAgIGJvb2wJX3Zpc2libGU7CQkgCiAgICBjaGFyCV9iYWRpdGVtOwkJIAoKICAg
IGJvb2wJX2V4Y2x1ZGVkOwkJIAogICAgYm9vbAlfYm9vbF9maWxsZXI7CQkgCiAgICBzaG9ydAlf
c2hvcnRfZmlsbGVyOwkJIAoKICAgIEluc3BlY3RlZCgpOwogICAgSW5zcGVjdGVkKGNvbnN0IElu
c3BlY3RlZCYpOwogICAgSW5zcGVjdGVkJiBvcGVyYXRvcj0oY29uc3QgSW5zcGVjdGVkJik7CiAg
ICB2b2lkIGRlc3RydWN0b3IoKTsJCSAKCnByaXZhdGU6CiAgICAgCgoKCiAgICB2b2lkIG9wZXJh
dG9yIGRlbGV0ZSh2b2lkICopIHt9OwkgCiAgICB2b2lkICpvcGVyYXRvciBuZXcoc2l6ZV90KTsJ
CSAKfTsKCmlubGluZSBJbnNwZWN0ZWQqCkluc3BlY3RlZDo6Zm9ydygpIGNvbnN0CnsKICAgIHJl
dHVybigoICAgIF9mb3J3ICAgPyAoICBJbnNwZWN0ZWQgKiAgKSgoKGNoYXIgKikgICAgX2Zvcncg
ICkgKyBnU2htZW1PZmZzZXQpIDogKCAgSW5zcGVjdGVkICogICkwKSAgKTsKfQoKaW5saW5lIEl0
ZW0qCkluc3BlY3RlZDo6aXRlbXMoKSBjb25zdAp7CiAgICByZXR1cm4oKCAgICBfaXRlbXMgICA/
ICggIEl0ZW0gKiAgKSgoKGNoYXIgKikgICAgX2l0ZW1zICApICsgZ1NobWVtT2Zmc2V0KSA6ICgg
IEl0ZW0gKiAgKTApICApOwp9CgppbmxpbmUgdm9pZApJbnNwZWN0ZWQ6OmZvcncoSW5zcGVjdGVk
ICpkYXRhKQp7CiAgICBfZm9ydyA9ICggICAgZGF0YSAgID8gKCAgSW5zcGVjdGVkICogICkoKChj
aGFyICopICAgIGRhdGEgICkgLSBnU2htZW1PZmZzZXQpIDogKCAgSW5zcGVjdGVkICogICkwKSAg
Owp9CgppbmxpbmUgdm9pZApJbnNwZWN0ZWQ6Oml0ZW1zKEl0ZW0gKmRhdGEpCnsKICAgIF9pdGVt
cyA9ICggICAgZGF0YSAgID8gKCAgSXRlbSAqICApKCgoY2hhciAqKSAgICBkYXRhICApIC0gZ1No
bWVtT2Zmc2V0KSA6ICggIEl0ZW0gKiAgKTApICA7Cn0KCiMgMTEgIi4uLy4uL2luY2x1ZGUvbG9j
YWxpbmMvSXRlbS5IIiAyCgoKCmNsYXNzCUdyb3VwOwpjbGFzcwlSZXN1bHRzOwpjbGFzcwlTbmFw
OwoKY2xhc3MgSXRlbSA6IHB1YmxpYyBJbnNwZWN0ZWQgewpwdWJsaWM6CiAgICBJdGVtKCk7CiAg
ICBJdGVtKGNvbnN0IEl0ZW0mKTsKCiAgICB+SXRlbSgpOwoKICAgIEl0ZW0mIG9wZXJhdG9yID0o
Y29uc3QgSXRlbSAmKTsKCiAgICB2b2lkICpvcGVyYXRvciBuZXcoc2l6ZV90IGFtdCk7CiAgICB2
b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkICopOwogICAgc3RhdGljIEl0ZW0gKmdldF9wYXNzKGlu
dCBwYXNzID0gLTEpOwoKICAgIHZvaWQgcmVsb2MobG9uZyBhbXQpOwoKICAgIEl0ZW0gKnNsc3Qo
KSBjb25zdDsKICAgIEdyb3VwICpncnAoKSBjb25zdDsKICAgIFNuYXAgKnNuYXAoKSBjb25zdDsK
CiAgICAgCgoKICAgIGNvb3JfdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuKF93aW5kLiBfV2luLmN3
LmR5ICk7IH0KICAgIGNvb3JfdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybihfd2luZC4gX1dpbi5j
dy5keCApOyB9CiAgICBjb29yX3QgYWNyb3NzKCkgY29uc3QgeyByZXR1cm4oX3dpbmQuIF9XaW4u
Y3cueSApOyB9CiAgICBjb29yX3QgZG93bigpIGNvbnN0IHsgcmV0dXJuKF93aW5kLiBfV2luLmN3
LnggKTsgfQoKICAgIHZvaWQgc2xzdChjb25zdCBJdGVtICopOwogICAgdm9pZCBncnAoY29uc3Qg
R3JvdXAgKik7CiAgICB2b2lkIHNuYXAoY29uc3QgU25hcCAqKTsKCiAgICB2b2lkIAlwaW5udW0o
dV9pbnQgcGluKSB7IF9waW5udW0gPSBwaW47IH0KICAgIGNvbnN0IHVfaW50IHBpbm51bSgpIGNv
bnN0IHsgcmV0dXJuIF9waW5udW07IH0KCiAgICB2b2lkCWZyYW1lKHVfaW50IGZybSkgeyBfZnJh
bWUgPSBmcm07IH0KICAgIGNvbnN0IHVfaW50IGZyYW1lKCkgY29uc3QgeyByZXR1cm4gX2ZyYW1l
OyB9CgogICAgdm9pZAlpX251bSh1X2ludCB2YWwpIHsgX2lfbnVtID0gdmFsOyB9CiAgICBjb25z
dCB1X2ludCBpX251bSgpIGNvbnN0IHsgcmV0dXJuIF9pX251bTsgfQoKICAgIHZvaWQJZmlkdWNp
YWwoYm9vbCB2YWwpIHsgX2ZpZHVjaWFsID0gdmFsOyB9CiAgICBjb25zdCBib29sIGZpZHVjaWFs
KCkgY29uc3QgeyByZXR1cm4gX2ZpZHVjaWFsOyB9CgogICAgdm9pZAlvem9uZShib29sIHZhbCkg
eyBfb3pvbmUgPSB2YWw7IH0KICAgIGNvbnN0IGJvb2wgb3pvbmUoKSBjb25zdCB7IHJldHVybiBf
b3pvbmU7IH0KCiAgICBsb25nIEl0ZW1NaW5Eb3duKCkgY29uc3QgeyByZXR1cm4oZG93bigpIC0g
KGhlaWdodCgpID4+IDEpKTsgfQogICAgbG9uZyBJdGVtTWF4RG93bigpIGNvbnN0IHsgcmV0dXJu
KGRvd24oKSArIChoZWlnaHQoKSA+PiAxKSk7IH0KICAgIGxvbmcgSXRlbU1heEFjcm9zcygpIGNv
bnN0IHsgcmV0dXJuKGFjcm9zcygpICsgKHdpZHRoKCkgPj4gMSkpOyB9CiAgICBsb25nIEl0ZW1N
aW5BY3Jvc3MoKSBjb25zdCB7IHJldHVybihhY3Jvc3MoKSAtICh3aWR0aCgpID4+IDEpKTsgfQoK
CgoKCnByaXZhdGU6CiAgICBHcm91cCAqX2dycDsJCQkgCiAgICBJdGVtICpfc2xzdDsJCQkgCiAg
ICBTbmFwICpfc25hcDsJCQkgCgogICAgdV9zaG9ydCBfcGlubnVtOwkJIAogICAgdV9zaG9ydCBf
ZnJhbWU7CQkgCgogICAgdV9zaG9ydCBfaV9udW07CQkgCiAgICBCb29sZWFuIF9maWR1Y2lhbDsJ
CSAKICAgIEJvb2xlYW4gX296b25lOwkJIAp9OwoKaW5saW5lIEdyb3VwICoKSXRlbTo6Z3JwKCkg
Y29uc3QKewogICAgcmV0dXJuKCggICAgX2dycCAgID8gKCAgR3JvdXAgKiAgKSgoKGNoYXIgKikg
ICAgX2dycCAgKSArIGdTaG1lbU9mZnNldCkgOiAoICBHcm91cCAqICApMCkgICk7Cn0KCmlubGlu
ZSBJdGVtICoKSXRlbTo6c2xzdCgpIGNvbnN0CnsKICAgIHJldHVybigoICAgIF9zbHN0ICAgPyAo
ICBJdGVtICogICkoKChjaGFyICopICAgIF9zbHN0ICApICsgZ1NobWVtT2Zmc2V0KSA6ICggIEl0
ZW0gKiAgKTApICApOwp9CgppbmxpbmUgU25hcCAqCkl0ZW06OnNuYXAoKSBjb25zdAp7CiAgICBy
ZXR1cm4oKCAgICBfc25hcCAgID8gKCAgU25hcCAqICApKCgoY2hhciAqKSAgICBfc25hcCAgKSAr
IGdTaG1lbU9mZnNldCkgOiAoICBTbmFwICogICkwKSAgKTsKfQoKaW5saW5lIHZvaWQKSXRlbTo6
c2xzdChjb25zdCBJdGVtICpzbHN0KQp7CiAgICBfc2xzdCA9ICggICAgc2xzdCAgID8gKCAgSXRl
bSAqICApKCgoY2hhciAqKSAgICBzbHN0ICApIC0gZ1NobWVtT2Zmc2V0KSA6ICggIEl0ZW0gKiAg
KTApICA7Cn0KCmlubGluZSB2b2lkCkl0ZW06OmdycChjb25zdCBHcm91cCAqZGF0YSkKewogICAg
X2dycCA9ICggICAgZGF0YSAgID8gKCAgR3JvdXAgKiAgKSgoKGNoYXIgKikgICAgZGF0YSAgKSAt
IGdTaG1lbU9mZnNldCkgOiAoICBHcm91cCAqICApMCkgIDsKfQoKaW5saW5lIHZvaWQKSXRlbTo6
c25hcChjb25zdCBTbmFwICpkYXRhKQp7CiAgICBfc25hcCA9ICggICAgZGF0YSAgID8gKCAgU25h
cCAqICApKCgoY2hhciAqKSAgICBkYXRhICApIC0gZ1NobWVtT2Zmc2V0KSA6ICggIFNuYXAgKiAg
KTApICA7Cn0KCgojIDI3ICJzYXZlX3NuYXAuYyIgMgoKCgoKIyAxICIuLi8uLi9pbmNsdWRlL2xp
YmluYy9BbGVydC5IIiAxCgoKIAoKCgoKCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCgojIDEgIi4u
Ly4uL2luY2x1ZGUvbGliaW5jL0FsZXJ0UGx1cy5IIiAxCiAKCgoKCgoKCiMgMSAiLi4vLi4vaW5j
bHVkZS9sb2NhbGluYy94ZGNsYXNzLmgiIDEKCgoKCgoKCmNsYXNzIHhkX2Jhc2VfYwp7CiAgICBw
dWJsaWM6Cgl4ZF9iYXNlX2MoKSB7X3hkX3Jvb3R3aWRnZXQ9IF9fbnVsbCA7fQoJV2lkZ2V0IHhk
X3Jvb3R3aWRnZXQoKSBjb25zdCB7cmV0dXJuIF94ZF9yb290d2lkZ2V0O30KICAgIHByb3RlY3Rl
ZDoKCVdpZGdldCBfeGRfcm9vdHdpZGdldDsKICAgIHByaXZhdGU6Cgl2b2lkIG9wZXJhdG9yPSh4
ZF9iYXNlX2MmKTsgIAoJIAoJIAoJIAoJIAoJeGRfYmFzZV9jKHhkX2Jhc2VfYyYpIHsgYWJvcnQo
KTt9ICAgIAp9OwoKY2xhc3MgeGRfWHRXaWRnZXRfYzogcHVibGljIHhkX2Jhc2VfYwp7CiAgICBw
dWJsaWM6Cgl4ZF9YdFdpZGdldF9jKCk7Cgl2b2lkIFNldFZhbHVlKFN0cmluZyBuYW1lLCBYdEFy
Z1ZhbCB2YWx1ZSk7Cgl2b2lkIFNldFZhbHVlcyhBcmdMaXN0IGFyZ3MsIENhcmRpbmFsIG51bV9h
cmdzKTsKCXZvaWQgVmFTZXRWYWx1ZXMoU3RyaW5nIG5hbWUsLi4uKTsKCXZvaWQgR2V0VmFsdWUo
U3RyaW5nIG5hbWUsIHZvaWQgKnZhbHVlKTsKCXZvaWQgR2V0VmFsdWVzKEFyZ0xpc3QgYXJncywg
Q2FyZGluYWwgbnVtX2FyZ3MpOwoJdm9pZCBWYUdldFZhbHVlcyhTdHJpbmcgbmFtZSwuLi4pOwoJ
dm9pZCBNYXAoKTsKCXZvaWQgVW5tYXAoKTsKCXZpcnR1YWwgdm9pZCB4ZF9lbmFibGUoKTsKCXZp
cnR1YWwgdm9pZCB4ZF9kaXNhYmxlKCk7Cgl2aXJ0dWFsIHZvaWQgeGRfZGVzdHJveSgpOwp9OwoK
Y2xhc3MgeGRfVG9wTGV2ZWxTaGVsbF9jOiBwdWJsaWMgeGRfWHRXaWRnZXRfYwp7Cn07CgpjbGFz
cyB4ZF9BcHBsaWNhdGlvblNoZWxsX2M6IHB1YmxpYyB4ZF9Ub3BMZXZlbFNoZWxsX2MKewogICAg
cHVibGljOgoJdm9pZCB4ZF9leGl0KGludCBzdGF0dXM9MCk7Cgl2b2lkIFJlYWxpemUoKTsKfTsK
CmNsYXNzIHhkX0NoaWxkV2lkZ2V0X2M6IHB1YmxpYyB4ZF9YdFdpZGdldF9jCnsKICAgIHB1Ymxp
YzoKCXZpcnR1YWwgdm9pZCB4ZF9zaG93KCk9MDsKCXZpcnR1YWwgdm9pZCB4ZF9oaWRlKCk9MDsK
CXZvaWQgTWFuYWdlKCk7Cgl2b2lkIFVubWFuYWdlKCk7Cn07CgpjbGFzcyB4ZF9YbURpYWxvZ19j
OiBwdWJsaWMgeGRfQ2hpbGRXaWRnZXRfYwp7CiAgICBwdWJsaWM6Cgl4ZF9YbURpYWxvZ19jKCk7
Cgl2aXJ0dWFsIHZvaWQgeGRfc2hvdygpOwoJdmlydHVhbCB2b2lkIHhkX2hpZGUoKTsKCXZvaWQg
UmFpc2UoKTsKICAgIHByb3RlY3RlZDoKCVdpZGdldCB4ZF9nZXRjaGlsZHdpZGdldCgpOwoJV2lk
Z2V0IHhkX2NoaWxkd2lkZ2V0Owp9OwoKY2xhc3MgeGRfTm9uU2hlbGxXaWRnZXRfYzogcHVibGlj
IHhkX0NoaWxkV2lkZ2V0X2MKewogICAgcHVibGljOgoJdmlydHVhbCB2b2lkIHhkX3Nob3coKTsK
CXZpcnR1YWwgdm9pZCB4ZF9oaWRlKCk7Cn07CgpjbGFzcyB4ZF9YbUxhYmVsX2M6IHB1YmxpYyB4
ZF9Ob25TaGVsbFdpZGdldF9jCnsKfTsKCmNsYXNzIHhkX1htQ2FzY2FkZUJ1dHRvbl9jOiBwdWJs
aWMgeGRfTm9uU2hlbGxXaWRnZXRfYwp7Cn07CgpjbGFzcyB4ZF9YbURyYXduQnV0dG9uX2M6IHB1
YmxpYyB4ZF9Ob25TaGVsbFdpZGdldF9jCnsKfTsKCmNsYXNzIHhkX1htUHVzaEJ1dHRvbl9jOiBw
dWJsaWMgeGRfTm9uU2hlbGxXaWRnZXRfYwp7Cn07CgpjbGFzcyB4ZF9YbVRvZ2dsZUJ1dHRvbl9j
OiBwdWJsaWMgeGRfTm9uU2hlbGxXaWRnZXRfYwp7Cn07CgpjbGFzcyB4ZF9YbUFycm93QnV0dG9u
X2M6IHB1YmxpYyB4ZF9Ob25TaGVsbFdpZGdldF9jCnsKfTsKCmNsYXNzIHhkX1htTGlzdF9jOiBw
dWJsaWMgeGRfTm9uU2hlbGxXaWRnZXRfYwp7Cn07CgpjbGFzcyB4ZF9YbVNjcm9sbEJhcl9jOiBw
dWJsaWMgeGRfTm9uU2hlbGxXaWRnZXRfYwp7Cn07CgpjbGFzcyB4ZF9YbVNlcGFyYXRvcl9jOiBw
dWJsaWMgeGRfTm9uU2hlbGxXaWRnZXRfYwp7Cn07CgpjbGFzcyB4ZF9YbVRleHRfYzogcHVibGlj
IHhkX05vblNoZWxsV2lkZ2V0X2MKewp9OwoKY2xhc3MgeGRfWG1UZXh0RmllbGRfYzogcHVibGlj
IHhkX05vblNoZWxsV2lkZ2V0X2MKewp9OwoKY2xhc3MgeGRfWG1CdWxsZXRpbkJvYXJkX2M6IHB1
YmxpYyB4ZF9Ob25TaGVsbFdpZGdldF9jCnsKfTsKCmNsYXNzIHhkX1htUm93Q29sdW1uX2M6IHB1
YmxpYyB4ZF9Ob25TaGVsbFdpZGdldF9jCnsKfTsKCmNsYXNzIHhkX1htUmFkaW9Cb3hfYzogcHVi
bGljIHhkX05vblNoZWxsV2lkZ2V0X2MKewp9OwoKY2xhc3MgeGRfWG1EcmF3aW5nQXJlYV9jOiBw
dWJsaWMgeGRfTm9uU2hlbGxXaWRnZXRfYwp7Cn07CgpjbGFzcyB4ZF9YbVBhbmVkV2luZG93X2M6
IHB1YmxpYyB4ZF9Ob25TaGVsbFdpZGdldF9jCnsKfTsKCmNsYXNzIHhkX1htRnJhbWVfYzogcHVi
bGljIHhkX05vblNoZWxsV2lkZ2V0X2MKewp9OwoKY2xhc3MgeGRfWG1TY2FsZV9jOiBwdWJsaWMg
eGRfTm9uU2hlbGxXaWRnZXRfYwp7Cn07CgpjbGFzcyB4ZF9YbVNjcm9sbGVkV2luZG93X2M6IHB1
YmxpYyB4ZF9Ob25TaGVsbFdpZGdldF9jCnsKfTsKCmNsYXNzIHhkX1htU2Nyb2xsZWRUZXh0X2M6
IHB1YmxpYyB4ZF9Ob25TaGVsbFdpZGdldF9jCnsKfTsKCmNsYXNzIHhkX1htU2Nyb2xsZWRMaXN0
X2M6IHB1YmxpYyB4ZF9Ob25TaGVsbFdpZGdldF9jCnsKfTsKCmNsYXNzIHhkX1htTWFpbldpbmRv
dzogcHVibGljIHhkX05vblNoZWxsV2lkZ2V0X2MKewp9OwoKY2xhc3MgeGRfWG1TZWxlY3Rpb25C
b3hfYzogcHVibGljIHhkX05vblNoZWxsV2lkZ2V0X2MKewp9OwoKY2xhc3MgeGRfWG1GaWxlU2Vs
ZWN0aW9uQm94X2M6IHB1YmxpYyB4ZF9Ob25TaGVsbFdpZGdldF9jCnsKfTsKCmNsYXNzIHhkX1ht
Q29tbWFuZF9jOiBwdWJsaWMgeGRfTm9uU2hlbGxXaWRnZXRfYwp7Cn07CgpjbGFzcyB4ZF9YbU1l
c3NhZ2VCb3hfYzogcHVibGljIHhkX05vblNoZWxsV2lkZ2V0X2MKewp9OwoKY2xhc3MgeGRfWG1N
YWluV2luZG93X2M6IHB1YmxpYyB4ZF9Ob25TaGVsbFdpZGdldF9jCnsKfTsKCmNsYXNzIHhkX1ht
Rm9ybV9jOiBwdWJsaWMgeGRfTm9uU2hlbGxXaWRnZXRfYwp7Cn07CgpjbGFzcyB4ZF9YbU1lbnVC
YXJfYzogcHVibGljIHhkX05vblNoZWxsV2lkZ2V0X2MKewp9OwoKY2xhc3MgeGRfWG1QdWxsZG93
bk1lbnVfYzogcHVibGljIHhkX05vblNoZWxsV2lkZ2V0X2MKewp9OwoKY2xhc3MgeGRfWG1Qb3B1
cE1lbnVfYzogcHVibGljIHhkX05vblNoZWxsV2lkZ2V0X2MKewp9OwoKY2xhc3MgeGRfWG1PcHRp
b25NZW51X2M6IHB1YmxpYyB4ZF9Ob25TaGVsbFdpZGdldF9jCnsKfTsKCgoKIyA5ICIuLi8uLi9p
bmNsdWRlL2xpYmluYy9BbGVydFBsdXMuSCIgMgoKCmNsYXNzIEFsZXJ0UGx1czogcHVibGljIHhk
X1htRGlhbG9nX2MgewpwdWJsaWM6Cgl2aXJ0dWFsIHZvaWQgY3JlYXRlIChXaWRnZXQgcGFyZW50
LCBjaGFyICp3aWRnZXRfbmFtZSA9IF9fbnVsbCApOwpwcm90ZWN0ZWQ6CglXaWRnZXQgYWxlcnRf
c2hlbGw7CglXaWRnZXQgYWxlcnRfbWVzc2FnZV9ib3g7CglXaWRnZXQgYWxlcnRfY2FuY2VsX2J1
dHRvbjsKCVdpZGdldCBhbGVydF9oZWxwX2J1dHRvbjsKCVdpZGdldCBhbGVydF9tZXNzYWdlX2xh
YmVsOwoJV2lkZ2V0IGFsZXJ0X29rX2J1dHRvbjsKCVdpZGdldCBhbGVydF9zZXAxOwoJV2lkZ2V0
IGFsZXJ0X3N5bWJvbDsKcHVibGljOgoJc3RhdGljIHZvaWQgYWxlcnRfcGx1c19oZWxwX2NiKCBX
aWRnZXQsIFh0UG9pbnRlciwgWHRQb2ludGVyICk7Cgl2aXJ0dWFsIHZvaWQgYWxlcnRfcGx1c19o
ZWxwX2NiKCBXaWRnZXQsIFh0UG9pbnRlciApOwoJc3RhdGljIHZvaWQgYWxlcnRfcGx1c19va19j
YiggV2lkZ2V0LCBYdFBvaW50ZXIsIFh0UG9pbnRlciApOwoJdmlydHVhbCB2b2lkIGFsZXJ0X3Bs
dXNfb2tfY2IoIFdpZGdldCwgWHRQb2ludGVyICk7Cn07Cgp0eXBlZGVmIEFsZXJ0UGx1cyAqQWxl
cnRQbHVzX3A7CmNsYXNzIEFsZXJ0UGx1czsKdHlwZWRlZiBBbGVydFBsdXMgKkFsZXJ0UGx1c19w
OwoKCmV4dGVybiBBbGVydFBsdXNfcCBhbGVydF9zaGVsbDsKCgoKCiMgMTQgIi4uLy4uL2luY2x1
ZGUvbGliaW5jL0FsZXJ0LkgiIDIKCgpjbGFzcyBBbGVydCA6IHB1YmxpYyBBbGVydFBsdXMgewpw
cml2YXRlOgogICAgV2lkZ2V0IF9wYXJlbnQ7CiAgICBzdHJpbmcgX25hbWU7CiAgICBzdHJpbmcg
X2hlbHBfZmlsZTsKICAgIFh0QXBwQ29udGV4dCBfY29udGV4dDsKICAgIFh0SW50ZXJ2YWxJZCBf
dGltZW91dF9pZDsKICAgIGJvb2wgX2NsZWFyX3doZW5fZG9uZTsKICAgIGJvb2wgX3hkX2luaXRp
YWxpc2VkOwogICAgaW50IF9jb3VudGVyOwoKICAgIHZvaWQgYWxlcnRfcGx1c19oZWxwX2NiKFdp
ZGdldCwgWHRQb2ludGVyKTsKICAgIHZvaWQgaW5pdGlhbGlzZV9vYmplY3RzKFdpZGdldCBwYXJl
bnQpOwoKcHVibGljOgogICAgQWxlcnQoV2lkZ2V0IHBhcmVudCwgY29uc3QgY2hhciAqYXBwX25h
bWUpOwogICAgQWxlcnQoV2lkZ2V0IHBhcmVudCwgY29uc3QgY2hhciAqYXBwX25hbWUsIFh0QXBw
Q29udGV4dCBjb250ZXh0KTsKICAgIH5BbGVydCgpOwoKICAgIHZvaWQgZG9fYWxlcnQoY29uc3Qg
Y2hhciAqbXNnLCBjaGFyICpoZWxwID0gX19udWxsICk7CiAgICB2b2lkIGRvX2FsZXJ0KGNvbnN0
IHN0cmluZyYgbXNnLCBjaGFyICpoZWxwID0gX19udWxsICk7CgogICAgdm9pZCBkb19tc2coY29u
c3QgY2hhciAqbXNnLCBpbnQgeCwgaW50IHksIGludCB1cHRpbWUgPSAtMSk7CiAgICB2b2lkIGRv
X21zZyhjb25zdCBzdHJpbmcmIG1zZywgaW50IHgsIGludCB5LCBpbnQgdXB0aW1lID0gLTEpOwoK
ICAgIHZvaWQgYWxlcnRfcGx1c19va19jYihXaWRnZXQsIFh0UG9pbnRlcik7CiAgICAKICAgIHZv
aWQgY2xlYXJfd2hlbl9kb25lKGJvb2wgdmFsdWUpIHsgX2NsZWFyX3doZW5fZG9uZSA9IHZhbHVl
OyB9CgogICAgV2lkZ2V0IFBhcmVudCgpIHsgcmV0dXJuIF9wYXJlbnQ7IH0KICAgIGNvbnN0IHN0
cmluZyBhcHBfbmFtZSgpIHsgcmV0dXJuIF9uYW1lOyB9CiAgICB2b2lkIGFwcF9uYW1lKGNvbnN0
IHN0cmluZyYgbmFtZSkgeyBfbmFtZSA9IG5hbWU7IH0KICAgIHZvaWQgaGVscF9maWxlKGNoYXIg
KmhlbHApIHsgX2hlbHBfZmlsZSA9IHN0cmluZyhoZWxwKTsgfQogICAgdm9pZCByZW1vdmVfYWxl
cnQoKSB7IGFsZXJ0X3BsdXNfb2tfY2IoX19udWxsICwgX19udWxsICk7IH0KICAgIGJvb2wgcmVk
aXNwbGF5X2FsZXJ0KGNvbnN0IHN0cmluZyYgbXNnLCBpbnQgeCwgaW50IHksaW50IHVwdGltZSA9
IC0xKSA7Cgp9OwoKZXh0ZXJuIEFsZXJ0ICpnQWxlcnQ7CgojIDMxICJzYXZlX3NuYXAuYyIgMgoK
IyAxICIuLi8uLi9pbmNsdWRlL2xvY2FsaW5jL01vdG9yLkgiIDEKCgogCgplbnVtIGVfbW92ZV90
eXBlcyB7IGtXYWl0TW92ZURvbmUsIGtNb3ZlT24gfTsKCmNsYXNzIFN5bmM7CmNsYXNzIFNuYXA7
CgpjbGFzcyBNb3RvciB7CnB1YmxpYzoKICAgIHZpcnR1YWwgdm9pZCBob21lKCkgPSAwOwogICAg
dmlydHVhbCBib29sIG1vdmUobG9uZywgbG9uZywgZV9tb3ZlX3R5cGVzKSA9IDA7CiAgICB2aXJ0
dWFsIGJvb2wgcmVsYXRpdmVfbW92ZShsb25nLCBsb25nKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQg
cG9zaXRpb24obG9uZyAqLCBsb25nICopID0gMDsKICAgIHZpcnR1YWwgYm9vbCBjaGVjaygpID0g
MDsKICAgIHZpcnR1YWwgdm9pZCBzZW5kX2F1dG9yYWlsX21zZyhjb25zdCBpbnQpID0gMDsKICAg
IHZvaWQgZGJtb3Ztb3QoY29uc3QgU3luYyAqLCBjb25zdCBTbmFwICopOwogICAgdm9pZCBkYm1v
dm1vdF9ub3dhaXQoY29uc3QgU3luYyAqLCBjb25zdCBTbmFwICopOwp9OwoKZXh0ZXJuIE1vdG9y
CSpnTW90b3I7CgojIDMyICJzYXZlX3NuYXAuYyIgMgoKIyAxICIuLi8uLi9pbmNsdWRlL2xvY2Fs
aW5jL1NlcmlhbC5IIiAxCgoKIAoKCgoKCgoKCgoKIAoKCgoKIAoKCmNsYXNzIFNlcmlhbCB7CnBy
aXZhdGU6CiAgICBjaGFyIHNfc2VyaWFsW05TRVJJQUxdOwogICAgY2hhciBzX2ZsYXZvcltORkxB
Vk9SXTsKICAgIGNoYXIgX2Jhc2VfZmxhdm9yW05GTEFWT1JdOwogICAgY2hhciBfSUZJQ1Nfd29y
a19vcmRlcltrSW50ZWxGaWVsZExlbmd0aF07CiAgICBCb29sZWFuIF9JRklDU19wYXNzOwkgCiAg
ICBCb29sZWFuIF9maWxsZXIxOwogICAgQm9vbGVhbiBfZmlsbGVyMjsKICAgIEJvb2xlYW4gX2Zp
bGxlcjM7CgpwdWJsaWM6CiAgICBzdGF0aWMgU2VyaWFsICpnZXQoKTsKCgogICAgY29uc3Qgc3Rk
OjpzdHJpbmcgZmxhdm9yKCkgY29uc3Q7CiAgICB2b2lkIGZsYXZvcihjb25zdCBzdGQ6OnN0cmlu
ZyYpOwogICAgdm9pZCBmbGF2b3IoY29uc3QgY2hhciAqKTsKCiAgICBjb25zdCBzdGQ6OnN0cmlu
ZyBiYXNlX2ZsYXZvcigpIGNvbnN0OwogICAgdm9pZCBiYXNlX2ZsYXZvcihjb25zdCBzdGQ6OnN0
cmluZyYpOwogICAgdm9pZCBiYXNlX2ZsYXZvcihjb25zdCBjaGFyICopOwoKICAgIGNvbnN0IHN0
ZDo6c3RyaW5nIHNlcmlhbCgpIGNvbnN0OwogICAgdm9pZCBzZXJpYWwoY29uc3Qgc3RkOjpzdHJp
bmcmKTsKICAgIHZvaWQgc2VyaWFsKGNvbnN0IGNoYXIgKik7CiAgICB2b2lkIHNlcmlhbF9lcmFz
ZSgpOwoKICAgIGNvbnN0IHN0ZDo6c3RyaW5nIElGSUNTX3dvcmtfb3JkZXIoKSBjb25zdDsKICAg
IHZvaWQgSUZJQ1Nfd29ya19vcmRlcihjb25zdCBzdGQ6OnN0cmluZyYpOwogICAgdm9pZCBJRklD
U193b3JrX29yZGVyKGNvbnN0IGNoYXIgKik7CgogICAgQm9vbGVhbiBJRklDU19wYXNzKCkgY29u
c3QgIHsgcmV0dXJuIF9JRklDU19wYXNzOyB9CiAgICB2b2lkIElGSUNTX3Bhc3MoQm9vbGVhbiBz
ZXQpIHsgX0lGSUNTX3Bhc3MgPSBzZXQ7IH0KCgoKCgoKfTsKCgppbmxpbmUgdm9pZApTZXJpYWw6
OnNlcmlhbF9lcmFzZSgpCnsKICAgIDo6bWVtc2V0KHNfc2VyaWFsLCAwLCBzaXplb2Yoc19zZXJp
YWwpKTsKfQoKaW5saW5lIGNvbnN0IHN0ZDo6c3RyaW5nClNlcmlhbDo6Zmxhdm9yKCkgY29uc3QK
ewogICAgcmV0dXJuKHN0ZDo6c3RyaW5nKHNfZmxhdm9yKSk7Cn0KCmlubGluZSBjb25zdCBzdGQ6
OnN0cmluZwpTZXJpYWw6OmJhc2VfZmxhdm9yKCkgY29uc3QKewogICAgcmV0dXJuKChzdHJsZW4o
X2Jhc2VfZmxhdm9yKSkgPyBzdGQ6OnN0cmluZyhfYmFzZV9mbGF2b3IpIDogc3RkOjpzdHJpbmco
c19mbGF2b3IpKTsKfQoKaW5saW5lIGNvbnN0IHN0ZDo6c3RyaW5nClNlcmlhbDo6c2VyaWFsKCkg
Y29uc3QKewogICAgcmV0dXJuKHN0ZDo6c3RyaW5nKHNfc2VyaWFsKSk7Cn0KCmlubGluZSB2b2lk
ClNlcmlhbDo6Zmxhdm9yKGNvbnN0IGNoYXIgKnZhbCkKewogICAgOjptZW1zZXQoc19mbGF2b3Is
IDAsIHNpemVvZihzX2ZsYXZvcikpOwogICAgc3RybmNweShzX2ZsYXZvciwgdmFsLCBzaXplb2Yo
c19mbGF2b3IpIC0gMSk7Cn0KCmlubGluZSB2b2lkClNlcmlhbDo6Zmxhdm9yKGNvbnN0IHN0ZDo6
c3RyaW5nJiB2YWwpCnsKICAgIDo6bWVtc2V0KHNfZmxhdm9yLCAwLCBzaXplb2Yoc19mbGF2b3Ip
KTsKICAgIHN0cm5jcHkoc19mbGF2b3IsIHZhbC5jX3N0cigpLCBzaXplb2Yoc19mbGF2b3IpIC0g
MSk7Cn0KCmlubGluZSB2b2lkClNlcmlhbDo6YmFzZV9mbGF2b3IoY29uc3QgY2hhciAqdmFsKQp7
CiAgICA6Om1lbXNldChfYmFzZV9mbGF2b3IsIDAsIHNpemVvZihfYmFzZV9mbGF2b3IpKTsKICAg
IHN0cm5jcHkoX2Jhc2VfZmxhdm9yLCB2YWwsIHNpemVvZihfYmFzZV9mbGF2b3IpIC0gMSk7Cn0K
CmlubGluZSB2b2lkClNlcmlhbDo6YmFzZV9mbGF2b3IoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbCkK
ewogICAgOjptZW1zZXQoX2Jhc2VfZmxhdm9yLCAwLCBzaXplb2YoX2Jhc2VfZmxhdm9yKSk7CiAg
ICBzdHJuY3B5KF9iYXNlX2ZsYXZvciwgdmFsLmNfc3RyKCksIHNpemVvZihfYmFzZV9mbGF2b3Ip
IC0gMSk7Cn0KCmlubGluZSB2b2lkClNlcmlhbDo6c2VyaWFsKGNvbnN0IGNoYXIgKnZhbCkKewog
ICAgOjptZW1zZXQoc19zZXJpYWwsIDAsIHNpemVvZihzX3NlcmlhbCkpOwogICAgc3RybmNweShz
X3NlcmlhbCwgdmFsLCBzaXplb2Yoc19zZXJpYWwpIC0gMSk7Cn0KCmlubGluZSB2b2lkClNlcmlh
bDo6c2VyaWFsKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWwpCnsKICAgIDo6bWVtc2V0KHNfc2VyaWFs
LCAwLCBzaXplb2Yoc19zZXJpYWwpKTsKICAgIHN0cm5jcHkoc19zZXJpYWwsIHZhbC5jX3N0cigp
LCBzaXplb2Yoc19zZXJpYWwpIC0gMSk7Cn0KCmlubGluZSBjb25zdCBzdGQ6OnN0cmluZwpTZXJp
YWw6OklGSUNTX3dvcmtfb3JkZXIoKSBjb25zdAp7CiAgICByZXR1cm4oc3RkOjpzdHJpbmcoX0lG
SUNTX3dvcmtfb3JkZXIpKTsKfQoKaW5saW5lIHZvaWQKU2VyaWFsOjpJRklDU193b3JrX29yZGVy
KGNvbnN0IGNoYXIgKnZhbCkKewogICAgOjptZW1zZXQoX0lGSUNTX3dvcmtfb3JkZXIsIDAsIHNp
emVvZihfSUZJQ1Nfd29ya19vcmRlcikpOwogICAgc3RybmNweShfSUZJQ1Nfd29ya19vcmRlciwg
dmFsLCBzaXplb2YoX0lGSUNTX3dvcmtfb3JkZXIpIC0gMSk7Cn0KCmlubGluZSB2b2lkClNlcmlh
bDo6SUZJQ1Nfd29ya19vcmRlcihjb25zdCBzdGQ6OnN0cmluZyYgdmFsKQp7CiAgICA6Om1lbXNl
dChfSUZJQ1Nfd29ya19vcmRlciwgMCwgc2l6ZW9mKF9JRklDU193b3JrX29yZGVyKSk7CiAgICBz
dHJuY3B5KF9JRklDU193b3JrX29yZGVyLCB2YWwuY19zdHIoKSwgc2l6ZW9mKF9JRklDU193b3Jr
X29yZGVyKSAtIDEpOwp9CgoKCgoKCgojIDMzICJzYXZlX3NuYXAuYyIgMgoKCgoKCiAKCgppbnQK
SW5zcGVjdG9yOjpzYXZlX3NuYXAoaW50IHNuLCBjb25zdCBTbmFwICpEcywgZVNhdmVUeXBlIHN0
eWxlLCBib29sIHNhdmluZ19hbGxfc25hcHMpCnsKICAgIFNlcmlhbCAqc2VyID0gU2VyaWFsOjpn
ZXQoKTsKCiAgICBpZiAoc2VyLT5mbGF2b3IoKS5sZW5ndGgoKSA9PSAwKQoJc2VyLT5mbGF2b3Io
Z0NHLT5DdXJyZW50RGF0YWJhc2VOYW1lKCkpOwoKICAgIGlmIChzZXItPnNlcmlhbCgpLmxlbmd0
aCgpID09IDApCglzZXItPnNlcmlhbChnQ0ctPkltYWdlU3RvcmFnZURpcigpKTsKCiAgICBnR3Jh
cGhpY3MtPklwZihTTkFQKTsJIAoKICAgIEltYWdlQnVmIGJ1ZihEcy0+c25fY2FtbnVtKCkgLSBr
Rmlyc3RDYW1lcmEsIDAsIDApOwogICAgRnJhbWUgZnJhbWUoJmJ1ZiwgQ2FtZGVzYzo6Z2V0KCkp
OwoKICAgIGlmICghZ0NmZy0+Y2FtZXJhX2lzX2NhbWVyYWxpbmsoKSkgewoJZnJhbWUuc2V0X2Zy
YW1lX2J1ZmZlcihTTkFQLCBDYW1kZXNjOjpnZXQoKSk7CiAgICB9CgogICAgY2hhciAqc2F2ZV9i
YXNlOwoKICAgIGlmIChzdHlsZSA9PSBrRmlkdSkKCXNhdmVfYmFzZSA9ICJmaWR1IjsKICAgIGVs
c2UgaWYgKHN0eWxlID09IGtGcmFtZSkKCXNhdmVfYmFzZSA9ICJmcmFtZSI7CiAgICBlbHNlCglz
YXZlX2Jhc2UgPSAic25hcCI7CgogICAgY2hhciBzdGRuYW1lWzE2ICsgTlNFUklBTCArIE5GTEFW
T1JdOwoKICAgIEhkciAqZXNwID0gSGRyOjpnZXQoKTsKICAgIHNwcmludGYoc3RkbmFtZSwgIiVz
JTAzZC5wJWQiLCBzYXZlX2Jhc2UsIHNuLCBlc3AtPmVzX2N1cnJlbnRfYm9hcmQoKSk7CgogICAg
IAoKCgoKICAgIGNvbnN0IHN0cmluZyBkaXJfb3Jfc2VyaWFsID0gc2F2aW5nX2FsbF9zbmFwcyA/
IHNlci0+c2VyaWFsKCkgOiBzdHJpbmcoZ0NHLT5JbWFnZVN0b3JhZ2VEaXIoKSk7CgogICAgc3Ry
aW5nIGZuYW1lID0gc2VyLT5mbGF2b3IoKSArICIvIiArIGRpcl9vcl9zZXJpYWwgKyAiLyIgKyBz
dHJpbmcoc3RkbmFtZSk7CiAgICBpbWFnZV9wYXRoKGZuYW1lKTsJCQkgCiAgICBta2RpcnMoZGly
bmFtZShmbmFtZS5jX3N0cigpKSk7CSAKCiAgICBzdHJpbmcgbXNnID0gc3RyaW5nKCJTYXZpbmcg
IikgKyBiYXNlbmFtZShmbmFtZS5jX3N0cigpKTsKICAgIGRvX3B1dG1lcyhtc2cpOwoKICAgIGlu
dCBmZDsKCiAgICBpZiAoKGZkID0gb3BlbihmbmFtZS5jX3N0cigpLCAxICB8IDB4MTAwICwgMDY2
NikpIDwgMCkgewoJZm5hbWUgKz0gIjogQ2FuJ3Qgb3BlbiBmaWxlIjsKCWdBbGVydC0+ZG9fYWxl
cnQoZm5hbWUpOwoJZG9fcHV0bWVzKCIiKTsKCXJldHVybiAtMiA7CiAgICB9CgogICAgIAoKCiAg
ICBsb25nIGZyYW1lX3NpemUgPSAobG9uZykgZnJhbWUuaGVpZ2h0KCkgKiAobG9uZykgZnJhbWUu
d2lkdGgoKTsKCiAgICBpZiAoIGNvbW1zZWdfZmxhZ3MoKSAmIGtIYXNIb3N0UnRjICkgewoJIAoK
CgoKCWludCBieXRlcyA9IDEwMjQ7Cgl1X2NoYXIgKiBwdHIgPSBmcmFtZS5nZXRfZnJhbWVfb2Zm
c2V0KDAsIDApOwoKCXdoaWxlIChmcmFtZV9zaXplID4gMCkgewoJICAgIGlmIChieXRlcyA+IGZy
YW1lX3NpemUpCgkJYnl0ZXMgPSBmcmFtZV9zaXplOwoKCSAgICBpbnQgc3RhdHVzID0gd3JpdGUo
ZmQsIHB0ciwgYnl0ZXMpOwoJICAgIGlmIChzdGF0dXMgIT0gYnl0ZXMpIHsKCQljbG9zZShmZCk7
CgkJZm5hbWUgKz0gIjogIjsKCQlmbmFtZSArPSBzdHJlcnJvcigoKihfX19lcnJubygpKSkgKTsK
CQlnQWxlcnQtPmRvX2FsZXJ0KGZuYW1lKTsKCQlkb19wdXRtZXMoIiIpOwoJCXJldHVybiAtMSA7
CgkgICAgfQoJICAgIGZyYW1lX3NpemUgLT0gYnl0ZXM7CgkgICAgcHRyICs9IGJ5dGVzOwoJfQog
ICAgfQogICAgZWxzZSB7CglpZiAod3JpdGUoZmQsIGZyYW1lLmdldF9mcmFtZV9vZmZzZXQoMCwg
MCksIGZyYW1lX3NpemUpICE9IGZyYW1lX3NpemUpIHsKCSAgICBjbG9zZShmZCk7CgkgICAgZm5h
bWUgKz0gIjogIjsKCSAgICBmbmFtZSArPSBzdHJlcnJvcigoKihfX19lcnJubygpKSkgKTsKCSAg
ICBnQWxlcnQtPmRvX2FsZXJ0KGZuYW1lKTsKCSAgICBkb19wdXRtZXMoIiIpOwoJICAgIHJldHVy
biAtMSA7Cgl9CiAgICB9CgogICAgY2xvc2UoZmQpOwogICAgZG9fcHV0bWVzKCIiKTsKICAgIHJl
dHVybiAwOwp9CgogCgoKdm9pZApJbnNwZWN0b3I6OnNhdmVfZmlkdXMoY29uc3QgU3luYyAqRHN5
LCBib29sIHNhdmluZ19hbGxfc25hcHMpCnsKICAgIEhkciAqZXNwID0gSGRyOjpnZXQoKTsKICAg
IEFsaWduICphbGlnbiA9IEFsaWduOjpnZXRfcGFzcyhlc3AtPmVzX2N1cnJlbnRfYm9hcmQoKSk7
CgogICAgYWxpZ24tPnNldHVwX2FsaWdubWVudChmYWxzZSwgX19udWxsICk7CgogICAgYWxpZ24t
Pm5vX2NvbXAoKTsJCSAKICAgIGdHcmFwaGljcy0+SXBmcmFtZShTTkFQKTsJIAoKICAgIGNvbmZp
Z3VyYXRpb24gKnBDZmcgPSBjb25maWd1cmF0aW9uOjpnZXQoKTsKCiAgICBMaWdodGluZyBmaWRf
bGlnaHQoKnBDZmcpOwogICAgZmlkX2xpZ2h0LnNldF90b19maWR1KCk7CgogICAgZm9yIChpbnQg
bmZpZHUgPSAwOyBuZmlkdSA8IE5GSURVOyBuZmlkdSsrKSB7CglXaW5kIHdpbjsKCVdpbmQgc253
aW47Cglsb25nIGJpZ3gsIGJpZ3k7CglTbmFwIERzOwoJcmVnaXN0ZXIgSXRlbSAqRGk7CgoJRGkg
PSBhbGlnbi0+YV9maWR1W25maWR1XS5mX2l0ZW0oKTsJIAoKCWlmIChEaSA9PSBfX251bGwgKQoJ
ICAgIGNvbnRpbnVlOwoKCURpLT5fd2luZC5zMmMoJndpbik7CSAKCURzLnNuX3B0LnggPSB3aW4u
IF9XaW4uY3cueCA7CSAKCURzLnNuX3B0LnkgPSB3aW4uIF9XaW4uY3cueSA7CglEcy5zbl9jYW1u
dW0oa0NhbWVyYU9uZSk7IAoKCWdNb3Rvci0+ZGJtb3Ztb3QoRHN5LCAmRHMpOwkgCgoJIAoKCglT
aWRlbnYgKnN2ID0gU2lkZW52OjpnZXQoKTsKCXN2LT5ndF9zbndpbigmRHMsICZzbndpbiwgJmJp
Z3gsICZiaWd5KTsKCWZvciAoaW50IHJldHJ5ID0gMDsgcmV0cnkgPCAzOyArK3JldHJ5KSB7Cgkg
ICAgaWYgKHNuYXAoRklEVUNJQUwsIDAsIHRydWUpID09IEJBRFNOQVApIHsKCQlnQWxlcnQtPmRv
X2FsZXJ0KCJzYXZlX2ZpZHVzOiBzbmFwIGZhaWxlZCIpOwoJCWNvbnRpbnVlOwoJICAgIH0KCSAg
ICBlbHNlIHsKCQkgCgoKCQlpbnQgc2F2ZV9yZXMgPSBzYXZlX3NuYXAobmZpZHUsICZEcywga0Zp
ZHUsIHNhdmluZ19hbGxfc25hcHMpOwoJCWlmIChzYXZlX3JlcyA9PSAtMSApIHsKCQkgICAgZ0Fs
ZXJ0LT5kb19hbGVydCgiT3V0IG9mIGRpc2sgc3BhY2VcblNhdmUgYWJvcnRlZCIpOwoJCSAgICBy
ZXR1cm47CgkJfQoJCQoJCWlmIChzYXZlX3JlcyAmJiAoIWdldHllc25vKCJTYXZlIGZhaWxlZCwg
Y29udGludWU/IikpKQoJCSAgICByZXR1cm47CgoJCWJyZWFrOwoJICAgIH0KCX0KICAgIH0KfQoK
c3RhdGljIGlubGluZSB2b2lkCmZpeF9zcGFjZXMoc3RyaW5nJiBwYXRoKQp7CiAgICBmb3IgKHVf
aW50IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGgoKTsgaSsrKQoJaWYgKHBhdGhbaV0gPT0gJyAnKQoJ
ICAgIHBhdGhbaV0gPSAnXyc7Cn0KCnZvaWQKSW5zcGVjdG9yOjpzYXZlX2ltYWdlKGludCBzbmFw
bm8sIGJvb2wgZmlkdSkKewogICAgIAoKCiAgICBjb25maWd1cmF0aW9uICpwQ2ZnID0gY29uZmln
dXJhdGlvbjo6Z2V0KCk7CgogICAgc3RyaW5nIGZsYXZvcihTZXJpYWw6OmdldCgpLT5mbGF2b3Io
KSk7CiAgICBzdHJpbmcgaW1hZ2VfZmlsZShmbGF2b3IpOwogICAgaW1hZ2VfZmlsZSArPSAiL1BQ
VSI7CgogICAgaWYgKHBDZmctPnNwY19hcHBlbmRfZmxhdm9yKCkpIHsKCWltYWdlX2ZpbGUgKz0g
Ii0iOwoJaW1hZ2VfZmlsZSArPSBmbGF2b3I7CiAgICB9CgogICAgZml4X3NwYWNlcyhpbWFnZV9m
aWxlKTsKICAgIGltYWdlX3BhdGgoaW1hZ2VfZmlsZSk7CiAgICAgCgoKICAgIG1rZGlycyhpbWFn
ZV9maWxlKTsKCiAgICBjaGFyIGltYWdlX25hbWVbMzBdOwogICAgc3ByaW50ZihpbWFnZV9uYW1l
LCAiLyVzJTAzZC5wJWQiLCBmaWR1ID8gImZpZHUiIDogInNuYXAiLCBzbmFwbm8sIGVzcC0+ZXNf
Y3VycmVudF9ib2FyZCgpKTsKICAgIGltYWdlX2ZpbGUgKz0gaW1hZ2VfbmFtZTsKICAgICAKCgoK
ICAgIGludCBmZCA9IDo6b3BlbihpbWFnZV9maWxlLmNfc3RyKCksIDIgIHwgMHgxMDAgLCAwNjY2
KTsKICAgIGlmIChmZCA+PSAwKSB7CglDYW1kZXNjICpjYW1wYXIgPSBDYW1kZXNjOjpnZXQoKTsK
CWludCBmcmFtZV9zaXplID0gY2FtcGFyLT53aWR0aCgpICogIGNhbXBhci0+aGVpZ2h0KCk7Cgl1
X2NoYXIgKnB0ciA9IERiZ2N0cmw6OmdldCgpLT5zaGFyZWRfZmJfcHRyKCk7Cglib29sIHN1Y2Nl
c3MgPSB0cnVlOwoKCSAKCgoKCWlmIChjb21tc2VnX2ZsYWdzKCkgJiBrSGFzSG9zdFJ0YykgewoJ
ICAgIGludCBieXRlcyA9IDEwMjQ7CgoJICAgIHdoaWxlIChmcmFtZV9zaXplID4gMCkgewoJCWlm
IChieXRlcyA+IGZyYW1lX3NpemUpCgkJICAgIGJ5dGVzID0gZnJhbWVfc2l6ZTsKCgkJaW50IHN0
YXR1cyA9IDo6d3JpdGUoZmQsIHB0ciwgYnl0ZXMpOwoKCQlpZiAoc3RhdHVzICE9IGJ5dGVzKSB7
CgkJICAgIHN1Y2Nlc3MgPSBmYWxzZTsKCQkgICAgRWxvZzo6Z2V0KCktPm1lc3NhZ2UodHJ1ZSwK
CQkJIkVycm9yIHdyaXRpbmcgaW1hZ2UgZmlsZSAlcyIsIGltYWdlX2ZpbGUuY19zdHIoKSk7CgkJ
ICAgIGJyZWFrOwoJCX0KCQlmcmFtZV9zaXplIC09IGJ5dGVzOwoJCXB0ciArPSBieXRlczsKCSAg
ICB9Cgl9CgllbHNlIHsKCSAgICA6OndyaXRlKGZkLCBwdHIsIGZyYW1lX3NpemUpOwoJfQoJOjpj
bG9zZShmZCk7CgoJaWYgKCFzdWNjZXNzKQoJICAgIHVubGluayhpbWFnZV9maWxlLmNfc3RyKCkp
OwogICAgfQp9Cg==


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

only message in thread, other threads:[~2002-07-24 15:56 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-07-24  8:56 optimization/7391: generation of duplicate labels causes assembler to fail barto

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