public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: c++/8438: Internal compiler error building Trolltech Qt library
@ 2002-11-04  7:46 bangerth
  0 siblings, 0 replies; 2+ messages in thread
From: bangerth @ 2002-11-04  7:46 UTC (permalink / raw)
  To: bennyb, gcc-bugs, gcc-prs, nobody

Synopsis: Internal compiler error building Trolltech Qt library

State-Changed-From-To: open->closed
State-Changed-By: bangerth
State-Changed-When: Mon Nov  4 07:46:12 2002
State-Changed-Why:
    You are using a very old compiler (a 2.95.3 prerelease). In
    any case, I cannot reproduce the error with 2.95.3, 3.2.1pre
    and present CVS.

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


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

* c++/8438: Internal compiler error building Trolltech Qt library
@ 2002-11-03  9:26 bennyb
  0 siblings, 0 replies; 2+ messages in thread
From: bennyb @ 2002-11-03  9:26 UTC (permalink / raw)
  To: gcc-gnats


>Number:         8438
>Category:       c++
>Synopsis:       Internal compiler error building Trolltech Qt library
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          rejects-legal
>Submitter-Id:   net
>Arrival-Date:   Sun Nov 03 09:26:01 PST 2002
>Closed-Date:
>Last-Modified:
>Originator:     Ben Bridgwater
>Release:        gcc version 2.95.3 19991030 (prerelease)
>Organization:
>Environment:
Linux Mandrake 7.1
gcc 2.95.3 as came with Mandrake 7.1
>Description:
Compiling latest Trolltech Qt library 3.0.6, get internal compiler error:

/usr/local/qt/include/qvaluevector.h: In method `QValueVectorPrivate<Element>::QValueVectorPrivate(const QValueVectorPrivate<Element> &)':
/usr/local/qt/include/qvaluevector.h:476:   instantiated from `QValueVector<Element>::detachInternal()'
/usr/local/qt/include/qvaluevector.h:459:   instantiated from here
/usr/local/qt/include/qvaluevector.h:125: Internal compiler error.
/usr/local/qt/include/qvaluevector.h:125: Please submit a full bug report.
/usr/local/qt/include/qvaluevector.h:125: See <URL:http://www.gnu.org/software/gcc/faq.html#bugreport> for instructions.         
>How-To-Repeat:
Using attached chartform_files.ii file generated usign -save-temps :

g++ -c -pipe -Wall -W -O2 -D_REENTRANT -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -o .obj/release-shared-mt/chartform_files.o chartform_files.ii
>Fix:
Use earlier 3.0.4 (vs 3.0.6) version of Qt library, which compiles cleanly with this version of compiler.
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="chartform_files.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="chartform_files.ii"

IyAxICJjaGFydGZvcm1fZmlsZXMuY3BwIgojIDEgImNhbnZhc3ZpZXcuaCIgMQoKCgojIDEgImVs
ZW1lbnQuaCIgMQoKCgojIDEgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xY29sb3IuaCIgMQogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvbG9jYWwvcXQv
aW5jbHVkZS9xd2luZG93ZGVmcy5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgojIDEgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xb2JqZWN0ZGVmcy5oIiAxCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9x
dC9pbmNsdWRlL3FnbG9iYWwuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDExOCAi
L3Vzci9sb2NhbC9xdC9pbmNsdWRlL3FnbG9iYWwuaCIKCgojIDE2MyAiL3Vzci9sb2NhbC9xdC9p
bmNsdWRlL3FnbG9iYWwuaCIKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKIAojIDI2MCAiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3FnbG9iYWwuaCIKCgoKCgoKCgoKCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCiMgNDI2ICIvdXNyL2xvY2FsL3F0L2luY2x1ZGUvcWdsb2JhbC5o
IgoKCgoKCgoKIAoKCgoKCgoKCgoKCiMgNDYyICIvdXNyL2xvY2FsL3F0L2luY2x1ZGUvcWdsb2Jh
bC5oIgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCiAKIAogCgoKCgoKCgoKCgp0eXBl
ZGVmIHVuc2lnbmVkIGNoYXIgICB1Y2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgdXNob3J0
Owp0eXBlZGVmIHVuc2lnbmVkCXVpbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyAgIHVsb25nOwp0
eXBlZGVmIGNoYXIJCSAgICpwY2hhcjsKdHlwZWRlZiB1Y2hhcgkJICAgKnB1Y2hhcjsKdHlwZWRl
ZiBjb25zdCBjaGFyICAgICAqcGNjaGFyOwoKCiAKIAogCgoKY29uc3QgYm9vbCBGQUxTRSA9IDA7
CmNvbnN0IGJvb2wgVFJVRSA9ICEwOwoKCgoKCgoKCiAKIAogCgoKCgoKCgoKCgogCiAKIAoKCgoK
CmlubGluZSBpbnQgcVJvdW5kKCBkb3VibGUgZCApCnsKICAgIHJldHVybiBpbnQoIGQgPj0gMC4w
ID8gZCArIDAuNSA6IGQgLSAwLjUgKTsKfQoKCiAKIAogCgoKIAp0eXBlZGVmIHNpZ25lZCBjaGFy
CSAgICBJTlQ4OwkJICAKdHlwZWRlZiB1bnNpZ25lZCBjaGFyCSAgIFVJTlQ4OwkJIAp0eXBlZGVm
IHNob3J0CQkgICAgSU5UMTY7CSAgCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQJICAgVUlOVDE2Owkg
CnR5cGVkZWYgaW50CQlJTlQzMjsJICAgCnR5cGVkZWYgdW5zaWduZWQgaW50CSAgIFVJTlQzMjsJ
IAoKCnR5cGVkZWYgc2lnbmVkIGNoYXIJICAgIFFfSU5UODsJICAKdHlwZWRlZiB1bnNpZ25lZCBj
aGFyCSAgIFFfVUlOVDg7CSAKdHlwZWRlZiBzaG9ydAkJICAgIFFfSU5UMTY7CSAgCnR5cGVkZWYg
dW5zaWduZWQgc2hvcnQJICAgUV9VSU5UMTY7CSAKdHlwZWRlZiBpbnQJCVFfSU5UMzI7CSAgIAp0
eXBlZGVmIHVuc2lnbmVkIGludAkgICBRX1VJTlQzMjsJIAoKCgoKCiAKdHlwZWRlZiBsb25nCQkg
ICAgUV9MT05HOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcJICAgUV9VTE9ORzsKCgoKIAoKCgoKCiAK
IAogCgpjbGFzcyBRRGF0YVN0cmVhbTsKCgogCiAKIAoKCgoKCiAKIAogCiAKIAogCiAKIAoKIyA2
MjggIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xZ2xvYmFsLmgiCgojIDEgIi91c3IvbG9jYWwvcXQv
aW5jbHVkZS9xY29uZmlnLmgiIDEKIAoKIAoKCgoKIyA2MjkgIi91c3IvbG9jYWwvcXQvaW5jbHVk
ZS9xZ2xvYmFsLmgiIDIKCgoKCgoKCgoKIAojIDEgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xbW9k
dWxlcy5oIiAxCiAKCgoKCgoKCgoKCgoKCgogCiMgNjM5ICIvdXNyL2xvY2FsL3F0L2luY2x1ZGUv
cWdsb2JhbC5oIiAyCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA2NzcgIi91c3IvbG9jYWwv
cXQvaW5jbHVkZS9xZ2xvYmFsLmgiCgoKCgoKCgoKCgoKIyAxICIvdXNyL2xvY2FsL3F0L2luY2x1
ZGUvcWZlYXR1cmVzLmgiIDEKIAogCiAKIAogCiAKCiAKIAoKIAogCgogCiAKCiAKIAoKIAogCgog
CiAKCiAKIAoKIAogCgogCiAKCiAKIAoKIAogCgogCiAKCiAKIAoKIAogCgogCiAKCiAKIAoKIAog
CgogCiAKCiAKIAoKIAogCgogCiAKCiAKIAoKIAogCgogCiAKCiAKIAoKIAogCgogCiAKCiAKIAoK
IAogCgogCiAKCiAKIAoKIAogCgogCiAKCiAKIAoKIAogCgogCiAKCiAKIAoKIAogCgogCiAKCiAK
IAoKIAogCgogCiAKCiAKIAoKIAogCgogCiAKCiAKIAoKIAogCgogCiAKCiAKIAoKIAogCgogCiAK
CiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAK
CgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoK
CiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAK
CgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoK
CiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAK
CgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoK
CiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAK
CgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoK
CiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAK
CgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoK
CiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAK
CgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoK
CiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAK
CgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoK
CiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAK
CgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoKCiAKCgoK
CiAKCgoKCiMgNjg4ICIvdXNyL2xvY2FsL3F0L2luY2x1ZGUvcWdsb2JhbC5oIiAyCgoKCgogCiAK
IAoKIyA3MjAgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xZ2xvYmFsLmgiCgoKCgoKCgoKCgogCiAK
IAoKICBjb25zdCBjaGFyICpxVmVyc2lvbigpOwogIGJvb2wgcVN5c0luZm8oIGludCAqd29yZFNp
emUsIGJvb2wgKmJpZ0VuZGlhbiApOwoKCgoKCiAKIAogCiAKIAoKCgoKCiMgNzcyICIvdXNyL2xv
Y2FsL3F0L2luY2x1ZGUvcWdsb2JhbC5oIgoKCgoKCgoKCgoKCgogCiAKIAoKCgogCiAKIAoKCgoK
CgoKCiMgODExICIvdXNyL2xvY2FsL3F0L2luY2x1ZGUvcWdsb2JhbC5oIgoKCgogIHZvaWQgcURl
YnVnKCBjb25zdCBjaGFyICosIC4uLiApICAgIAoKICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQg
KHByaW50ZiwgMSwgMikpKQoKOwoKICB2b2lkIHFXYXJuaW5nKCBjb25zdCBjaGFyICosIC4uLiAp
ICAKCiAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKCjsKCiAgdm9p
ZCBxRmF0YWwoIGNvbnN0IGNoYXIgKiwgLi4uICkgICAgCgogICAgX19hdHRyaWJ1dGVfXyAoKGZv
cm1hdCAocHJpbnRmLCAxLCAyKSkpCgo7CgogIHZvaWQgcVN5c3RlbVdhcm5pbmcoIGNvbnN0IGNo
YXIgKiwgaW50IGNvZGUgPSAtMSApOwoKCiAKCiAgdm9pZCBkZWJ1ZyggY29uc3QgY2hhciAqLCAu
Li4gKSAgICAgCgogICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCgo7
CgogIHZvaWQgd2FybmluZyggY29uc3QgY2hhciAqLCAuLi4gKSAgIAoKICAgIF9fYXR0cmlidXRl
X18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQoKOwoKICB2b2lkIGZhdGFsKCBjb25zdCBjaGFy
ICosIC4uLiApICAgICAKCiAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIp
KSkKCjsKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKICBib29sIHF0X2NoZWNrX3BvaW50ZXIo
IGJvb2wgYywgY29uc3QgY2hhciAqLCBpbnQgKTsKCgoKCgoKCgogCgoKCgoKCmVudW0gUXRNc2dU
eXBlIHsgUXREZWJ1Z01zZywgUXRXYXJuaW5nTXNnLCBRdEZhdGFsTXNnIH07Cgp0eXBlZGVmIHZv
aWQgKCpRdE1zZ0hhbmRsZXIpKFF0TXNnVHlwZSwgY29uc3QgY2hhciAqKTsKICBRdE1zZ0hhbmRs
ZXIgcUluc3RhbGxNc2dIYW5kbGVyKCBRdE1zZ0hhbmRsZXIgKTsKCgogCnR5cGVkZWYgUXRNc2dI
YW5kbGVyIG1zZ19oYW5kbGVyOwoKCiAgdm9pZCBxU3VwcHJlc3NPYnNvbGV0ZVdhcm5pbmdzKCBi
b29sID0gVFJVRSApOwoKICB2b2lkIHFPYnNvbGV0ZSggY29uc3QgY2hhciAqb2JqLCBjb25zdCBj
aGFyICpvbGRmdW5jLAoJCSAgIGNvbnN0IGNoYXIgKm5ld2Z1bmMgKTsKICB2b2lkIHFPYnNvbGV0
ZSggY29uc3QgY2hhciAqb2JqLCBjb25zdCBjaGFyICpvbGRmdW5jICk7CiAgdm9pZCBxT2Jzb2xl
dGUoIGNvbnN0IGNoYXIgKm1lc3NhZ2UgKTsKCgoKCiMgNDIgIi91c3IvbG9jYWwvcXQvaW5jbHVk
ZS9xb2JqZWN0ZGVmcy5oIiAyCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgogCiAKc3RydWN0
IFFVT2JqZWN0OwoKIyA4NiAiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3FvYmplY3RkZWZzLmgiCgoK
CgoKCgoKCgoKCiAKCiMgMTE0ICIvdXNyL2xvY2FsL3F0L2luY2x1ZGUvcW9iamVjdGRlZnMuaCIK
CiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKY2xhc3MgUU9iamVjdDsKY2xh
c3MgUU1ldGFPYmplY3Q7CmNsYXNzIFFTaWduYWw7CmNsYXNzIFFDb25uZWN0aW9uOwpjbGFzcyBR
RXZlbnQ7CnN0cnVjdCBRTWV0YURhdGE7CmNsYXNzIFFDb25uZWN0aW9uTGlzdDsKY2xhc3MgUUNv
bm5lY3Rpb25MaXN0SXQ7CmNsYXNzIFFTaWduYWxWZWM7CmNsYXNzIFFPYmplY3RMaXN0OwpjbGFz
cyBRT2JqZWN0TGlzdEl0OwpjbGFzcyBRTWVtYmVyRGljdDsKCgoKIyA0MyAiL3Vzci9sb2NhbC9x
dC9pbmNsdWRlL3F3aW5kb3dkZWZzLmgiIDIKCiMgMSAiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3Fz
dHJpbmcuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAx
ICIvdXNyL2xvY2FsL3F0L2luY2x1ZGUvcWNzdHJpbmcuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2xvY2FsL3F0L2luY2x1ZGUvcW1lbWFy
cmF5LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIv
dXNyL2xvY2FsL3F0L2luY2x1ZGUvcWdhcnJheS5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3FzaGFyZWQuaCIg
MQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKc3RydWN0ICAg
UVNoYXJlZAp7CiAgICBRU2hhcmVkKCkJCXsgY291bnQgPSAxOyB9CiAgICB2b2lkIHJlZigpCQl7
IGNvdW50Kys7IH0KICAgIGJvb2wgZGVyZWYoKQl7IHJldHVybiAhLS1jb3VudDsgfQogICAgdWlu
dCBjb3VudDsKfTsKCgoKIyA0MiAiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3FnYXJyYXkuaCIgMgoK
CgoKY2xhc3MgICBRR0FycmF5CQkJCQkgCnsKZnJpZW5kIGNsYXNzIFFCdWZmZXI7CnB1YmxpYzoK
ICAgICAKICAgIHN0cnVjdCBhcnJheV9kYXRhIDogcHVibGljIFFTaGFyZWQgewkgCglhcnJheV9k
YXRhKCkJeyBkYXRhPTA7IGxlbj0wOyB9CgljaGFyICpkYXRhOwkJCQkgCgl1aW50ICBsZW47CiAg
ICB9OwogICAgUUdBcnJheSgpOwpwcm90ZWN0ZWQ6CiAgICBRR0FycmF5KCBpbnQsIGludCApOwkJ
CSAKICAgIFFHQXJyYXkoIGludCBzaXplICk7CQkJIAogICAgUUdBcnJheSggY29uc3QgUUdBcnJh
eSAmYSApOwkJIAogICAgdmlydHVhbCB+UUdBcnJheSgpOwoKICAgIFFHQXJyYXkgICAgJm9wZXJh
dG9yPSggY29uc3QgUUdBcnJheSAmYSApIHsgcmV0dXJuIGFzc2lnbiggYSApOyB9CgogICAgdmly
dHVhbCB2b2lkIGRldGFjaCgpCXsgZHVwbGljYXRlKCp0aGlzKTsgfQoKICAgIGNoYXIgICAgICAg
KmRhdGEoKQkgY29uc3QJeyByZXR1cm4gc2hkLT5kYXRhOyB9CiAgICB1aW50CW5yZWZzKCkJIGNv
bnN0CXsgcmV0dXJuIHNoZC0+Y291bnQ7IH0KICAgIHVpbnQJc2l6ZSgpCSBjb25zdAl7IHJldHVy
biBzaGQtPmxlbjsgfQogICAgYm9vbAlpc0VxdWFsKCBjb25zdCBRR0FycmF5ICZhICkgY29uc3Q7
CgogICAgYm9vbAlyZXNpemUoIHVpbnQgbmV3c2l6ZSApOwoKICAgIGJvb2wJZmlsbCggY29uc3Qg
Y2hhciAqZCwgaW50IGxlbiwgdWludCBzeiApOwoKICAgIFFHQXJyYXkgICAgJmFzc2lnbiggY29u
c3QgUUdBcnJheSAmYSApOwogICAgUUdBcnJheSAgICAmYXNzaWduKCBjb25zdCBjaGFyICpkLCB1
aW50IGxlbiApOwogICAgUUdBcnJheSAgICAmZHVwbGljYXRlKCBjb25zdCBRR0FycmF5ICZhICk7
CiAgICBRR0FycmF5ICAgICZkdXBsaWNhdGUoIGNvbnN0IGNoYXIgKmQsIHVpbnQgbGVuICk7CiAg
ICB2b2lkCXN0b3JlKCBjb25zdCBjaGFyICpkLCB1aW50IGxlbiApOwoKICAgIGFycmF5X2RhdGEg
KnNoYXJlZEJsb2NrKCkJY29uc3QJCXsgcmV0dXJuIHNoZDsgfQogICAgdm9pZAlzZXRTaGFyZWRC
bG9jayggYXJyYXlfZGF0YSAqcCApIHsgc2hkPShhcnJheV9kYXRhKilwOyB9CgogICAgUUdBcnJh
eSAgICAmc2V0UmF3RGF0YSggY29uc3QgY2hhciAqZCwgdWludCBsZW4gKTsKICAgIHZvaWQJcmVz
ZXRSYXdEYXRhKCBjb25zdCBjaGFyICpkLCB1aW50IGxlbiApOwoKICAgIGludAkJZmluZCggY29u
c3QgY2hhciAqZCwgdWludCBpbmRleCwgdWludCBzeiApIGNvbnN0OwogICAgaW50CQljb250YWlu
cyggY29uc3QgY2hhciAqZCwgdWludCBzeiApIGNvbnN0OwogICAgCiAgICB2b2lkCXNvcnQoIHVp
bnQgc3ogKTsKICAgIGludAkJYnNlYXJjaCggY29uc3QgY2hhciAqZCwgdWludCBzeiApIGNvbnN0
OwoKICAgIGNoYXIgICAgICAgKmF0KCB1aW50IGluZGV4ICkgY29uc3Q7CgogICAgYm9vbAlzZXRF
eHBhbmQoIHVpbnQgaW5kZXgsIGNvbnN0IGNoYXIgKmQsIHVpbnQgc3ogKTsKCnByb3RlY3RlZDoK
ICAgIHZpcnR1YWwgYXJyYXlfZGF0YSAqbmV3RGF0YSgpOwogICAgdmlydHVhbCB2b2lkIGRlbGV0
ZURhdGEoIGFycmF5X2RhdGEgKnAgKTsKCnByaXZhdGU6CiAgICBzdGF0aWMgdm9pZCBtc2dfaW5k
ZXgoIHVpbnQgKTsKICAgIGFycmF5X2RhdGEgKnNoZDsKfTsKCgppbmxpbmUgY2hhciAqUUdBcnJh
eTo6YXQoIHVpbnQgaW5kZXggKSBjb25zdAp7CgogICAgaWYgKCBpbmRleCA+PSBzaXplKCkgKSB7
Cgltc2dfaW5kZXgoIGluZGV4ICk7CglpbmRleCA9IDA7CiAgICB9CgogICAgcmV0dXJuICZzaGQt
PmRhdGFbaW5kZXhdOwp9CgoKCiMgNDIgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xbWVtYXJyYXku
aCIgMgoKCgoKdGVtcGxhdGU8Y2xhc3MgdHlwZT4gCmNsYXNzIFFNZW1BcnJheSAKOiBwdWJsaWMg
UUdBcnJheQp7CnB1YmxpYzoKICAgIHR5cGVkZWYgdHlwZSogSXRlcmF0b3I7CiAgICB0eXBlZGVm
IGNvbnN0IHR5cGUqIENvbnN0SXRlcmF0b3I7CiAgICB0eXBlZGVmIHR5cGUgVmFsdWVUeXBlOwoK
cHJvdGVjdGVkOgogICAgUU1lbUFycmF5KCBpbnQsIGludCApIDogUUdBcnJheSggMCwgMCApIHt9
CgpwdWJsaWM6CiAgICBRTWVtQXJyYXkoKSB7fQogICAgUU1lbUFycmF5KCBpbnQgc2l6ZSApIDog
UUdBcnJheShzaXplKnNpemVvZih0eXBlKSkge30KICAgIFFNZW1BcnJheSggY29uc3QgUU1lbUFy
cmF5PHR5cGU+ICZhICkgOiBRR0FycmF5KGEpIHt9CiAgIH5RTWVtQXJyYXkoKSB7fQogICAgUU1l
bUFycmF5PHR5cGU+ICZvcGVyYXRvcj0oY29uc3QgUU1lbUFycmF5PHR5cGU+ICZhKQoJCQkJeyBy
ZXR1cm4gKFFNZW1BcnJheTx0eXBlPiYpUUdBcnJheTo6YXNzaWduKGEpOyB9CiAgICB0eXBlICpk
YXRhKCkgICAgY29uc3QJeyByZXR1cm4gKHR5cGUgKilRR0FycmF5OjpkYXRhKCk7IH0KICAgIHVp
bnQgIG5yZWZzKCkgICBjb25zdAl7IHJldHVybiBRR0FycmF5OjpucmVmcygpOyB9CiAgICB1aW50
ICBzaXplKCkgICAgY29uc3QJeyByZXR1cm4gUUdBcnJheTo6c2l6ZSgpL3NpemVvZih0eXBlKTsg
fQogICAgdWludCAgY291bnQoKSAgIGNvbnN0CXsgcmV0dXJuIHNpemUoKTsgfQogICAgYm9vbCAg
aXNFbXB0eSgpIGNvbnN0CXsgcmV0dXJuIFFHQXJyYXk6OnNpemUoKSA9PSAwOyB9CiAgICBib29s
ICBpc051bGwoKSAgY29uc3QJeyByZXR1cm4gUUdBcnJheTo6ZGF0YSgpID09IDA7IH0KICAgIGJv
b2wgIHJlc2l6ZSggdWludCBzaXplICkJeyByZXR1cm4gUUdBcnJheTo6cmVzaXplKHNpemUqc2l6
ZW9mKHR5cGUpKTsgfQogICAgYm9vbCAgdHJ1bmNhdGUoIHVpbnQgcG9zICkJeyByZXR1cm4gUUdB
cnJheTo6cmVzaXplKHBvcypzaXplb2YodHlwZSkpOyB9CiAgICBib29sICBmaWxsKCBjb25zdCB0
eXBlICZkLCBpbnQgc2l6ZSA9IC0xICkKCXsgcmV0dXJuIFFHQXJyYXk6OmZpbGwoKGNoYXIqKSZk
LHNpemUsc2l6ZW9mKHR5cGUpICk7IH0KICAgIHZvaWQgIGRldGFjaCgpCQl7IFFHQXJyYXk6OmRl
dGFjaCgpOyB9CiAgICBRTWVtQXJyYXk8dHlwZT4gICBjb3B5KCkgY29uc3QKCXsgUU1lbUFycmF5
PHR5cGU+IHRtcDsgcmV0dXJuIHRtcC5kdXBsaWNhdGUoKnRoaXMpOyB9CiAgICBRTWVtQXJyYXk8
dHlwZT4mIGFzc2lnbiggY29uc3QgUU1lbUFycmF5PHR5cGU+JiBhICkKCXsgcmV0dXJuIChRTWVt
QXJyYXk8dHlwZT4mKVFHQXJyYXk6OmFzc2lnbihhKTsgfQogICAgUU1lbUFycmF5PHR5cGU+JiBh
c3NpZ24oIGNvbnN0IHR5cGUgKmEsIHVpbnQgbiApCgl7IHJldHVybiAoUU1lbUFycmF5PHR5cGU+
JilRR0FycmF5Ojphc3NpZ24oKGNoYXIqKWEsbipzaXplb2YodHlwZSkpOyB9CiAgICBRTWVtQXJy
YXk8dHlwZT4mIGR1cGxpY2F0ZSggY29uc3QgUU1lbUFycmF5PHR5cGU+JiBhICkKCXsgcmV0dXJu
IChRTWVtQXJyYXk8dHlwZT4mKVFHQXJyYXk6OmR1cGxpY2F0ZShhKTsgfQogICAgUU1lbUFycmF5
PHR5cGU+JiBkdXBsaWNhdGUoIGNvbnN0IHR5cGUgKmEsIHVpbnQgbiApCgl7IHJldHVybiAoUU1l
bUFycmF5PHR5cGU+JilRR0FycmF5OjpkdXBsaWNhdGUoKGNoYXIqKWEsbipzaXplb2YodHlwZSkp
OyB9CiAgICBRTWVtQXJyYXk8dHlwZT4mIHNldFJhd0RhdGEoIGNvbnN0IHR5cGUgKmEsIHVpbnQg
biApCgl7IHJldHVybiAoUU1lbUFycmF5PHR5cGU+JilRR0FycmF5OjpzZXRSYXdEYXRhKChjaGFy
KilhLAoJCQkJCQkgICAgIG4qc2l6ZW9mKHR5cGUpKTsgfQogICAgdm9pZCByZXNldFJhd0RhdGEo
IGNvbnN0IHR5cGUgKmEsIHVpbnQgbiApCgl7IFFHQXJyYXk6OnJlc2V0UmF3RGF0YSgoY2hhciop
YSxuKnNpemVvZih0eXBlKSk7IH0KICAgIGludAkgZmluZCggY29uc3QgdHlwZSAmZCwgdWludCBp
PTAgKSBjb25zdAoJeyByZXR1cm4gUUdBcnJheTo6ZmluZCgoY2hhciopJmQsaSxzaXplb2YodHlw
ZSkpOyB9CiAgICBpbnQJIGNvbnRhaW5zKCBjb25zdCB0eXBlICZkICkgY29uc3QKCXsgcmV0dXJu
IFFHQXJyYXk6OmNvbnRhaW5zKChjaGFyKikmZCxzaXplb2YodHlwZSkpOyB9CiAgICB2b2lkIHNv
cnQoKSB7IFFHQXJyYXk6OnNvcnQoc2l6ZW9mKHR5cGUpKTsgfQogICAgaW50ICBic2VhcmNoKCBj
b25zdCB0eXBlICZkICkgY29uc3QKCXsgcmV0dXJuIFFHQXJyYXk6OmJzZWFyY2goKGNvbnN0IGNo
YXIqKSZkLHNpemVvZih0eXBlKSk7IH0KICAgIHR5cGUmIG9wZXJhdG9yW10oIGludCBpICkgY29u
c3QKCXsgcmV0dXJuICh0eXBlICYpKCoodHlwZSAqKVFHQXJyYXk6OmF0KGkqc2l6ZW9mKHR5cGUp
KSk7IH0KICAgIHR5cGUmIGF0KCB1aW50IGkgKSBjb25zdAoJeyByZXR1cm4gKHR5cGUgJikoKih0
eXBlICopUUdBcnJheTo6YXQoaSpzaXplb2YodHlwZSkpKTsgfQoJIG9wZXJhdG9yIGNvbnN0IHR5
cGUqKCkgY29uc3QgeyByZXR1cm4gKGNvbnN0IHR5cGUgKilRR0FycmF5OjpkYXRhKCk7IH0KICAg
IGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUU1lbUFycmF5PHR5cGU+ICZhICkgY29uc3QgeyByZXR1
cm4gaXNFcXVhbChhKTsgfQogICAgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRTWVtQXJyYXk8dHlw
ZT4gJmEgKSBjb25zdCB7IHJldHVybiAhaXNFcXVhbChhKTsgfQogICAgSXRlcmF0b3IgYmVnaW4o
KSB7IHJldHVybiBkYXRhKCk7IH0KICAgIEl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGRhdGEoKSAr
IHNpemUoKTsgfQogICAgQ29uc3RJdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGRhdGEo
KTsgfQogICAgQ29uc3RJdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBkYXRhKCkgKyBzaXpl
KCk7IH0KfTsKCgoKCgoKCgoKCgoKCiMgNDMgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xY3N0cmlu
Zy5oIiAyCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoK
CgoKCiAKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiAKCgoKCgoKCgoK
CgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCgoKIAoKCgoKCgoK
IAojIDEzOCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKCgogCgoKCgoKCgoKCiAKCgoKCgog
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMTk2ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMu
aCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgogCgoKCgoKCgoKIAoK
CgoKIAoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2NkZWZzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKIAoKCgoKIAoKCgoKCiAKCgoKCgoKCgogCgoKCgojIDcxICIvdXNyL2luY2x1ZGUvc3lz
L2NkZWZzLmgiIDMKCgogCgoKCgoKCgogCgoKCiMgMTAzICIvdXNyL2luY2x1ZGUvc3lzL2NkZWZz
LmgiIDMKCgoKIAoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiAKCgoKCgoKCgog
CgoKCgoKCgoKCiAKCgoKCgoKCiMgMjUwICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCgoK
IAoKCgoKCgoKCiAKCgoKCgogCgogCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZ251L3N0dWJz
LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyNzggIi91
c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKCgoKCiMgMjYgIi91c3IvaW5jbHVkZS9zdHJpbmcu
aCIgMiAzCgoKZXh0ZXJuICJDIiB7IAoKIAoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1h
bmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkg
Ii91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRk
ZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFu
ZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoK
CgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKIyAxMzEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5k
cmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCiMgMjcxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFu
ZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgojIDI4MyAiL3Vzci9saWIv
Z2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoK
IAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMv
aW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDMzICIvdXNy
L2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCgogCmV4dGVybiB2b2lkICogIG1lbWNweSAgKHZvaWQg
KiAgX19yZXN0cmljdCBfX2Rlc3QsCgkJCSAgICBfX2NvbnN0IHZvaWQgKiAgX19yZXN0cmljdCBf
X3NyYywgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CiAKCmV4dGVybiB2b2lkICogIG1lbW1vdmUg
ICh2b2lkICogIF9fZGVzdCwgX19jb25zdCB2b2lkICogIF9fc3JjLAoJCQkgICAgIHNpemVfdCBf
X24pICB0aHJvdyAoKSAgOwoKIAoKCgpleHRlcm4gdm9pZCAqICBtZW1jY3B5ICAodm9pZCAqICBf
X2Rlc3QsIF9fY29uc3Qgdm9pZCAqICBfX3NyYywKCQkJICAgICBpbnQgX19jLCBzaXplX3QgX19u
KSAgdGhyb3cgKCkgIDsKCgoKIApleHRlcm4gdm9pZCAqICBtZW1zZXQgICh2b2lkICogIF9fcywg
aW50IF9fYywgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgbWVtY21wICAo
X19jb25zdCB2b2lkICogIF9fczEsIF9fY29uc3Qgdm9pZCAqICBfX3MyLAoJCQlzaXplX3QgX19u
KSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIHZvaWQgKiAgbWVtY2hyICAoX19jb25zdCB2b2lkICog
IF9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CgoKCgoKCgoKIApleHRlcm4g
Y2hhciAqc3RyY3B5ICAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCgkJCSAgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fc3JjKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gY2hhciAqc3RybmNweSAg
KGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAoJCQkgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19zcmMsIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwoKIApleHRlcm4gY2hhciAqc3RyY2F0ICAo
Y2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCgkJCSAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
c3JjKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gY2hhciAqc3RybmNhdCAgKGNoYXIgKl9fcmVzdHJp
Y3QgX19kZXN0LAoJCQkgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBf
X24pICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHN0cmNtcCAgKF9fY29uc3QgY2hhciAqX19z
MSwgX19jb25zdCBjaGFyICpfX3MyKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gaW50IHN0cm5jbXAg
IChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikgIHRo
cm93ICgpICA7CgogCmV4dGVybiBpbnQgc3RyY29sbCAgKF9fY29uc3QgY2hhciAqX19zMSwgX19j
b25zdCBjaGFyICpfX3MyKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gc2l6ZV90IHN0cnhmcm0gIChj
aGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKCQkJICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X3NyYywgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CgojIDEwNyAiL3Vzci9pbmNsdWRlL3N0cmlu
Zy5oIiAzCgoKCiAKZXh0ZXJuIGNoYXIgKl9fc3RyZHVwICAoX19jb25zdCBjaGFyICpfX3MpICB0
aHJvdyAoKSAgOwpleHRlcm4gY2hhciAqc3RyZHVwICAoX19jb25zdCBjaGFyICpfX3MpICB0aHJv
dyAoKSAgOwoKCiAKCgoKCgoKIyAxNDMgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCiAKZXh0
ZXJuIGNoYXIgKnN0cmNociAgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSAgdGhyb3cgKCkg
IDsKIApleHRlcm4gY2hhciAqc3RycmNociAgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSAg
dGhyb3cgKCkgIDsKCgoKCgoKCiAKCmV4dGVybiBzaXplX3Qgc3RyY3NwbiAgKF9fY29uc3QgY2hh
ciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0KSAgdGhyb3cgKCkgIDsKIAoKZXh0ZXJuIHNp
emVfdCBzdHJzcG4gIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkg
IHRocm93ICgpICA7CiAKZXh0ZXJuIGNoYXIgKnN0cnBicmsgIChfX2NvbnN0IGNoYXIgKl9fcywg
X19jb25zdCBjaGFyICpfX2FjY2VwdCkgIHRocm93ICgpICA7CiAKZXh0ZXJuIGNoYXIgKnN0cnN0
ciAgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkgIHRo
cm93ICgpICA7CgoKCgoKCgoKCiAKZXh0ZXJuIGNoYXIgKnN0cnRvayAgKGNoYXIgKl9fcmVzdHJp
Y3QgX19zLAoJCQkgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKSAgdGhyb3cgKCkg
IDsKCiAKCmV4dGVybiBjaGFyICpfX3N0cnRva19yICAoY2hhciAqX19yZXN0cmljdCBfX3MsCgkJ
CSAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAoJCQkgICAgICBjaGFyICoq
X19yZXN0cmljdCBfX3NhdmVfcHRyKSAgdGhyb3cgKCkgIDsKCmV4dGVybiBjaGFyICpzdHJ0b2tf
ciAgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAoJCQkgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fZGVsaW0sCgkJCSAgICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSAgdGhyb3cgKCkg
IDsKCgojIDIwMyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCgoKCiAKZXh0ZXJuIHNpemVfdCBz
dHJsZW4gIChfX2NvbnN0IGNoYXIgKl9fcykgIHRocm93ICgpICA7CgoKCgoKCgoKIApleHRlcm4g
Y2hhciAqc3RyZXJyb3IgIChpbnQgX19lcnJudW0pICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIGNo
YXIgKl9fc3RyZXJyb3JfciAgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1
ZmxlbikgIHRocm93ICgpICA7CmV4dGVybiBjaGFyICpzdHJlcnJvcl9yICAoaW50IF9fZXJybnVt
LCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSAgdGhyb3cgKCkgIDsKCgogCgpleHRlcm4g
dm9pZCBfX2J6ZXJvICAodm9pZCAqICBfX3MsIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwoKCiAK
ZXh0ZXJuIHZvaWQgYmNvcHkgIChfX2NvbnN0IHZvaWQgKiAgX19zcmMsIHZvaWQgKiAgX19kZXN0
LCBzaXplX3QgX19uKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIHZvaWQgYnplcm8gICh2b2lkICog
IF9fcywgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgYmNtcCAgKF9fY29u
c3Qgdm9pZCAqICBfX3MxLCBfX2NvbnN0IHZvaWQgKiAgX19zMiwgc2l6ZV90IF9fbikgIHRocm93
ICgpICA7CgogCmV4dGVybiBjaGFyICppbmRleCAgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19j
KSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGNoYXIgKnJpbmRleCAgKF9fY29uc3QgY2hhciAqX19z
LCBpbnQgX19jKSAgdGhyb3cgKCkgIDsKCiAKCmV4dGVybiBpbnQgX19mZnMgIChpbnQgX19pKSAg
dGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKZXh0ZXJuIGludCBmZnMgIChpbnQg
X19pKSAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCiAKCgoKCgoKCgoKIApl
eHRlcm4gaW50IF9fc3RyY2FzZWNtcCAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFy
ICpfX3MyKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBzdHJjYXNlY21wICAoX19jb25zdCBjaGFy
ICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHN0
cm5jYXNlY21wICAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCgkJCSAg
ICAgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CgoKIyAyNzcgIi91c3IvaW5jbHVkZS9zdHJpbmcu
aCIgMwoKCgogCgpleHRlcm4gY2hhciAqc3Ryc2VwICAoY2hhciAqKl9fcmVzdHJpY3QgX19zdHJp
bmdwLAoJCQkgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKSAgdGhyb3cgKCkgIDsK
CgojIDMxOSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCgoKCgojIDM0NyAiL3Vzci9pbmNsdWRl
L3N0cmluZy5oIiAzCgoKCn0gCgoKIyA0NiAiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3Fjc3RyaW5n
LmgiIDIKCgoKIAoKCgogIHZvaWQgKnFtZW1tb3ZlKCB2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNy
YywgdWludCBsZW4gKTsKCiAgY2hhciAqcXN0cmR1cCggY29uc3QgY2hhciAqICk7CgogIGlubGlu
ZSB1aW50IHFzdHJsZW4oIGNvbnN0IGNoYXIgKnN0ciApCnsgcmV0dXJuIHN0ciA/ICh1aW50KXN0
cmxlbihzdHIpIDogMDsgfQoKICBpbmxpbmUgY2hhciAqcXN0cmNweSggY2hhciAqZHN0LCBjb25z
dCBjaGFyICpzcmMgKQp7IHJldHVybiBzcmMgPyBzdHJjcHkoZHN0LCBzcmMpIDogMDsgfQoKICBj
aGFyICpxc3RybmNweSggY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIHVpbnQgbGVuICk7Cgog
IGlubGluZSBpbnQgcXN0cmNtcCggY29uc3QgY2hhciAqc3RyMSwgY29uc3QgY2hhciAqc3RyMiAp
CnsKICAgIHJldHVybiAoIHN0cjEgJiYgc3RyMiApID8gc3RyY21wKCBzdHIxLCBzdHIyICkKCQkJ
ICAgIDogKCBzdHIxID8gMSA6ICggc3RyMiA/IC0xIDogMCApICk7Cn0KCiAgaW5saW5lIGludCBx
c3RybmNtcCggY29uc3QgY2hhciAqc3RyMSwgY29uc3QgY2hhciAqc3RyMiwgdWludCBsZW4gKQp7
CiAgICByZXR1cm4gKCBzdHIxICYmIHN0cjIgKSA/IHN0cm5jbXAoIHN0cjEsIHN0cjIsIGxlbiAp
CgkJCSAgICA6ICggc3RyMSA/IDEgOiAoIHN0cjIgPyAtMSA6IDAgKSApOwp9CgogIGludCBxc3Ry
aWNtcCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogKTsKCiAgaW50IHFzdHJuaWNtcCggY29u
c3QgY2hhciAqLCBjb25zdCBjaGFyICosIHVpbnQgbGVuICk7CgoKICBpbmxpbmUgdWludCBjc3Ry
bGVuKCBjb25zdCBjaGFyICpzdHIgKQp7IHJldHVybiAodWludClzdHJsZW4oc3RyKTsgfQoKICBp
bmxpbmUgY2hhciAqY3N0cmNweSggY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMgKQp7IHJldHVy
biBzdHJjcHkoZHN0LHNyYyk7IH0KCiAgaW5saW5lIGludCBjc3RyY21wKCBjb25zdCBjaGFyICpz
dHIxLCBjb25zdCBjaGFyICpzdHIyICkKeyByZXR1cm4gc3RyY21wKHN0cjEsc3RyMik7IH0KCiAg
aW5saW5lIGludCBjc3RybmNtcCggY29uc3QgY2hhciAqc3RyMSwgY29uc3QgY2hhciAqc3RyMiwg
dWludCBsZW4gKQp7IHJldHVybiBzdHJuY21wKHN0cjEsc3RyMixsZW4pOyB9CgoKCiAKCiAgUV9V
SU5UMTYgcUNoZWNrc3VtKCBjb25zdCBjaGFyICpzLCB1aW50IGxlbiApOwoKIAoKCgoKCgoKIyAx
MTkgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xY3N0cmluZy5oIgoKdHlwZWRlZiBRTWVtQXJyYXk8
Y2hhcj4gUUJ5dGVBcnJheTsKCgogCgoKCiAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRh
U3RyZWFtICYsIGNvbnN0IFFCeXRlQXJyYXkgJiApOwogIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+
KCBRRGF0YVN0cmVhbSAmLCBRQnl0ZUFycmF5ICYgKTsKCgoKCiAKCgoKY2xhc3MgUVJlZ0V4cDsK
CmNsYXNzICAgUUNTdHJpbmcgOiBwdWJsaWMgUUJ5dGVBcnJheQkgCnsKcHVibGljOgogICAgUUNT
dHJpbmcoKSB7fQkJCQkgCiAgICBRQ1N0cmluZyggaW50IHNpemUgKTsJCQkgCiAgICBRQ1N0cmlu
ZyggY29uc3QgUUNTdHJpbmcgJnMgKSA6IFFCeXRlQXJyYXkoIHMgKSB7fQogICAgUUNTdHJpbmco
IGNvbnN0IGNoYXIgKnN0ciApOwkJIAogICAgUUNTdHJpbmcoIGNvbnN0IGNoYXIgKnN0ciwgdWlu
dCBtYXhsZW4gKTsJIAogICAgflFDU3RyaW5nKCk7CgogICAgUUNTdHJpbmcgICAgJm9wZXJhdG9y
PSggY29uc3QgUUNTdHJpbmcgJnMgKTsgCiAgICBRQ1N0cmluZyAgICAmb3BlcmF0b3I9KCBjb25z
dCBjaGFyICpzdHIgKTsJIAoKICAgIGJvb2wJaXNOdWxsKCkJY29uc3Q7CiAgICBib29sCWlzRW1w
dHkoKQljb25zdDsKICAgIHVpbnQJbGVuZ3RoKCkJY29uc3Q7CiAgICBib29sCXJlc2l6ZSggdWlu
dCBuZXdsZW4gKTsKICAgIGJvb2wJdHJ1bmNhdGUoIHVpbnQgcG9zICk7CiAgICBib29sCWZpbGwo
IGNoYXIgYywgaW50IGxlbiA9IC0xICk7CgogICAgUUNTdHJpbmcJY29weSgpCWNvbnN0OwoKICAg
IFFDU3RyaW5nICAgICZzcHJpbnRmKCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLiApOwoKICAgIGlu
dAkJZmluZCggY2hhciBjLCBpbnQgaW5kZXg9MCwgYm9vbCBjcz1UUlVFICkgY29uc3Q7CiAgICBp
bnQJCWZpbmQoIGNvbnN0IGNoYXIgKnN0ciwgaW50IGluZGV4PTAsIGJvb2wgY3M9VFJVRSApIGNv
bnN0OwoKICAgIGludAkJZmluZCggY29uc3QgUVJlZ0V4cCAmLCBpbnQgaW5kZXg9MCApIGNvbnN0
OwoKICAgIGludAkJZmluZFJldiggY2hhciBjLCBpbnQgaW5kZXg9LTEsIGJvb2wgY3M9VFJVRSkg
Y29uc3Q7CiAgICBpbnQJCWZpbmRSZXYoIGNvbnN0IGNoYXIgKnN0ciwgaW50IGluZGV4PS0xLCBi
b29sIGNzPVRSVUUpIGNvbnN0OwoKICAgIGludAkJZmluZFJldiggY29uc3QgUVJlZ0V4cCAmLCBp
bnQgaW5kZXg9LTEgKSBjb25zdDsKCiAgICBpbnQJCWNvbnRhaW5zKCBjaGFyIGMsIGJvb2wgY3M9
VFJVRSApIGNvbnN0OwogICAgaW50CQljb250YWlucyggY29uc3QgY2hhciAqc3RyLCBib29sIGNz
PVRSVUUgKSBjb25zdDsKCiAgICBpbnQJCWNvbnRhaW5zKCBjb25zdCBRUmVnRXhwICYgKSBjb25z
dDsKCiAgICBRQ1N0cmluZwlsZWZ0KCB1aW50IGxlbiApICBjb25zdDsKICAgIFFDU3RyaW5nCXJp
Z2h0KCB1aW50IGxlbiApIGNvbnN0OwogICAgUUNTdHJpbmcJbWlkKCB1aW50IGluZGV4LCB1aW50
IGxlbj0weGZmZmZmZmZmKSBjb25zdDsKCiAgICBRQ1N0cmluZwlsZWZ0SnVzdGlmeSggdWludCB3
aWR0aCwgY2hhciBmaWxsPScgJywgYm9vbCB0cnVuYz1GQUxTRSljb25zdDsKICAgIFFDU3RyaW5n
CXJpZ2h0SnVzdGlmeSggdWludCB3aWR0aCwgY2hhciBmaWxsPScgJyxib29sIHRydW5jPUZBTFNF
KWNvbnN0OwoKICAgIFFDU3RyaW5nCWxvd2VyKCkgY29uc3Q7CiAgICBRQ1N0cmluZwl1cHBlcigp
IGNvbnN0OwoKICAgIFFDU3RyaW5nCXN0cmlwV2hpdGVTcGFjZSgpCWNvbnN0OwogICAgUUNTdHJp
bmcJc2ltcGxpZnlXaGl0ZVNwYWNlKCkJY29uc3Q7CgogICAgUUNTdHJpbmcgICAgJmluc2VydCgg
dWludCBpbmRleCwgY29uc3QgY2hhciAqICk7CiAgICBRQ1N0cmluZyAgICAmaW5zZXJ0KCB1aW50
IGluZGV4LCBjaGFyICk7CiAgICBRQ1N0cmluZyAgICAmYXBwZW5kKCBjb25zdCBjaGFyICogKTsK
ICAgIFFDU3RyaW5nICAgICZwcmVwZW5kKCBjb25zdCBjaGFyICogKTsKICAgIFFDU3RyaW5nICAg
ICZyZW1vdmUoIHVpbnQgaW5kZXgsIHVpbnQgbGVuICk7CiAgICBRQ1N0cmluZyAgICAmcmVwbGFj
ZSggdWludCBpbmRleCwgdWludCBsZW4sIGNvbnN0IGNoYXIgKiApOwoKICAgIFFDU3RyaW5nICAg
ICZyZXBsYWNlKCBjb25zdCBRUmVnRXhwICYsIGNvbnN0IGNoYXIgKiApOwoKICAgIHNob3J0CXRv
U2hvcnQoIGJvb2wgKm9rPTAgKQljb25zdDsKICAgIHVzaG9ydAl0b1VTaG9ydCggYm9vbCAqb2s9
MCApCWNvbnN0OwogICAgaW50CQl0b0ludCggYm9vbCAqb2s9MCApCWNvbnN0OwogICAgdWludAl0
b1VJbnQoIGJvb2wgKm9rPTAgKQljb25zdDsKICAgIGxvbmcJdG9Mb25nKCBib29sICpvaz0wICkJ
Y29uc3Q7CiAgICB1bG9uZwl0b1VMb25nKCBib29sICpvaz0wICkJY29uc3Q7CiAgICBmbG9hdAl0
b0Zsb2F0KCBib29sICpvaz0wICkJY29uc3Q7CiAgICBkb3VibGUJdG9Eb3VibGUoIGJvb2wgKm9r
PTAgKQljb25zdDsKCiAgICBRQ1N0cmluZyAgICAmc2V0U3RyKCBjb25zdCBjaGFyICpzICk7CiAg
ICBRQ1N0cmluZyAgICAmc2V0TnVtKCBzaG9ydCApOwogICAgUUNTdHJpbmcgICAgJnNldE51bSgg
dXNob3J0ICk7CiAgICBRQ1N0cmluZyAgICAmc2V0TnVtKCBpbnQgKTsKICAgIFFDU3RyaW5nICAg
ICZzZXROdW0oIHVpbnQgKTsKICAgIFFDU3RyaW5nICAgICZzZXROdW0oIGxvbmcgKTsKICAgIFFD
U3RyaW5nICAgICZzZXROdW0oIHVsb25nICk7CiAgICBRQ1N0cmluZyAgICAmc2V0TnVtKCBmbG9h
dCwgY2hhciBmPSdnJywgaW50IHByZWM9NiApOwogICAgUUNTdHJpbmcgICAgJnNldE51bSggZG91
YmxlLCBjaGFyIGY9J2cnLCBpbnQgcHJlYz02ICk7CgogICAgYm9vbAlzZXRFeHBhbmQoIHVpbnQg
aW5kZXgsIGNoYXIgYyApOwoKCQlvcGVyYXRvciBjb25zdCBjaGFyICooKSBjb25zdDsKICAgIFFD
U3RyaW5nICAgICZvcGVyYXRvcis9KCBjb25zdCBjaGFyICpzdHIgKTsKICAgIFFDU3RyaW5nICAg
ICZvcGVyYXRvcis9KCBjaGFyIGMgKTsKfTsKCgogCgoKCiAgUURhdGFTdHJlYW0gJm9wZXJhdG9y
PDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFDU3RyaW5nICYgKTsKICBRRGF0YVN0cmVhbSAmb3Bl
cmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUUNTdHJpbmcgJiApOwoKCiAKCgoKaW5saW5lIFFDU3Ry
aW5nICZRQ1N0cmluZzo6b3BlcmF0b3I9KCBjb25zdCBRQ1N0cmluZyAmcyApCnsgcmV0dXJuIChR
Q1N0cmluZyYpYXNzaWduKCBzICk7IH0KCmlubGluZSBRQ1N0cmluZyAmUUNTdHJpbmc6Om9wZXJh
dG9yPSggY29uc3QgY2hhciAqc3RyICkKeyByZXR1cm4gKFFDU3RyaW5nJilkdXBsaWNhdGUoIHN0
ciwgcXN0cmxlbihzdHIpKzEgKTsgfQoKaW5saW5lIGJvb2wgUUNTdHJpbmc6OmlzTnVsbCgpIGNv
bnN0CnsgcmV0dXJuIGRhdGEoKSA9PSAwOyB9CgppbmxpbmUgYm9vbCBRQ1N0cmluZzo6aXNFbXB0
eSgpIGNvbnN0CnsgcmV0dXJuIGRhdGEoKSA9PSAwIHx8ICpkYXRhKCkgPT0gJ1wwJzsgfQoKaW5s
aW5lIHVpbnQgUUNTdHJpbmc6Omxlbmd0aCgpIGNvbnN0CnsgcmV0dXJuIHFzdHJsZW4oIGRhdGEo
KSApOyB9CgppbmxpbmUgYm9vbCBRQ1N0cmluZzo6dHJ1bmNhdGUoIHVpbnQgcG9zICkKeyByZXR1
cm4gcmVzaXplKHBvcysxKTsgfQoKaW5saW5lIFFDU3RyaW5nIFFDU3RyaW5nOjpjb3B5KCkgY29u
c3QKeyByZXR1cm4gUUNTdHJpbmcoIGRhdGEoKSApOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3Ry
aW5nOjpwcmVwZW5kKCBjb25zdCBjaGFyICpzICkKeyByZXR1cm4gaW5zZXJ0KDAscyk7IH0KCmlu
bGluZSBRQ1N0cmluZyAmUUNTdHJpbmc6OmFwcGVuZCggY29uc3QgY2hhciAqcyApCnsgcmV0dXJu
IG9wZXJhdG9yKz0ocyk7IH0KCmlubGluZSBRQ1N0cmluZyAmUUNTdHJpbmc6OnNldE51bSggc2hv
cnQgbiApCnsgcmV0dXJuIHNldE51bSgobG9uZyluKTsgfQoKaW5saW5lIFFDU3RyaW5nICZRQ1N0
cmluZzo6c2V0TnVtKCB1c2hvcnQgbiApCnsgcmV0dXJuIHNldE51bSgodWxvbmcpbik7IH0KCmlu
bGluZSBRQ1N0cmluZyAmUUNTdHJpbmc6OnNldE51bSggaW50IG4gKQp7IHJldHVybiBzZXROdW0o
KGxvbmcpbik7IH0KCmlubGluZSBRQ1N0cmluZyAmUUNTdHJpbmc6OnNldE51bSggdWludCBuICkK
eyByZXR1cm4gc2V0TnVtKCh1bG9uZyluKTsgfQoKaW5saW5lIFFDU3RyaW5nICZRQ1N0cmluZzo6
c2V0TnVtKCBmbG9hdCBuLCBjaGFyIGYsIGludCBwcmVjICkKeyByZXR1cm4gc2V0TnVtKChkb3Vi
bGUpbixmLHByZWMpOyB9CgppbmxpbmUgUUNTdHJpbmc6Om9wZXJhdG9yIGNvbnN0IGNoYXIgKigp
IGNvbnN0CnsgcmV0dXJuIChjb25zdCBjaGFyICopZGF0YSgpOyB9CgoKIAoKCgogIGlubGluZSBi
b29sIG9wZXJhdG9yPT0oIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkK
eyByZXR1cm4gcXN0cmNtcChzMS5kYXRhKCksczIuZGF0YSgpKSA9PSAwOyB9CgogIGlubGluZSBi
b29sIG9wZXJhdG9yPT0oIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKQp7IHJl
dHVybiBxc3RyY21wKHMxLmRhdGEoKSxzMikgPT0gMDsgfQoKICBpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1cm4gcXN0cmNt
cChzMSxzMi5kYXRhKCkpID09IDA7IH0KCiAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPSggY29uc3Qg
UUNTdHJpbmcgJnMxLCBjb25zdCBRQ1N0cmluZyAmczIgKQp7IHJldHVybiBxc3RyY21wKHMxLmRh
dGEoKSxzMi5kYXRhKCkpICE9IDA7IH0KCiAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPSggY29uc3Qg
UUNTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEuZGF0YSgp
LHMyKSAhPSAwOyB9CgogIGlubGluZSBib29sIG9wZXJhdG9yIT0oIGNvbnN0IGNoYXIgKnMxLCBj
b25zdCBRQ1N0cmluZyAmczIgKQp7IHJldHVybiBxc3RyY21wKHMxLHMyLmRhdGEoKSkgIT0gMDsg
fQoKICBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgUUNT
dHJpbmcgJnMyICkKeyByZXR1cm4gcXN0cmNtcChzMS5kYXRhKCksczIuZGF0YSgpKSA8IDA7IH0K
CiAgaW5saW5lIGJvb2wgb3BlcmF0b3I8KCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IGNoYXIg
KnMyICkKeyByZXR1cm4gcXN0cmNtcChzMS5kYXRhKCksczIpIDwgMDsgfQoKICBpbmxpbmUgYm9v
bCBvcGVyYXRvcjwoIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRQ1N0cmluZyAmczIgKQp7IHJldHVy
biBxc3RyY21wKHMxLHMyLmRhdGEoKSkgPCAwOyB9CgogIGlubGluZSBib29sIG9wZXJhdG9yPD0o
IGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1cm4gcXN0cmNt
cChzMS5kYXRhKCksczIuZGF0YSgpKSA8PSAwOyB9CgogIGlubGluZSBib29sIG9wZXJhdG9yPD0o
IGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKQp7IHJldHVybiBxc3RyY21wKHMx
LmRhdGEoKSxzMikgPD0gMDsgfQoKICBpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KCBjb25zdCBjaGFy
ICpzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1cm4gcXN0cmNtcChzMSxzMi5kYXRhKCkp
IDw9IDA7IH0KCiAgaW5saW5lIGJvb2wgb3BlcmF0b3I+KCBjb25zdCBRQ1N0cmluZyAmczEsIGNv
bnN0IFFDU3RyaW5nICZzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEuZGF0YSgpLHMyLmRhdGEoKSkg
PiAwOyB9CgogIGlubGluZSBib29sIG9wZXJhdG9yPiggY29uc3QgUUNTdHJpbmcgJnMxLCBjb25z
dCBjaGFyICpzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEuZGF0YSgpLHMyKSA+IDA7IH0KCiAgaW5s
aW5lIGJvb2wgb3BlcmF0b3I+KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkK
eyByZXR1cm4gcXN0cmNtcChzMSxzMi5kYXRhKCkpID4gMDsgfQoKICBpbmxpbmUgYm9vbCBvcGVy
YXRvcj49KCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IFFDU3RyaW5nICZzMiApCnsgcmV0dXJu
IHFzdHJjbXAoczEuZGF0YSgpLHMyLmRhdGEoKSkgPj0gMDsgfQoKICBpbmxpbmUgYm9vbCBvcGVy
YXRvcj49KCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICkKeyByZXR1cm4gcXN0
cmNtcChzMS5kYXRhKCksczIpID49IDA7IH0KCiAgaW5saW5lIGJvb2wgb3BlcmF0b3I+PSggY29u
c3QgY2hhciAqczEsIGNvbnN0IFFDU3RyaW5nICZzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEsczIu
ZGF0YSgpKSA+PSAwOyB9CgogIGlubGluZSBjb25zdCBRQ1N0cmluZyBvcGVyYXRvcisoIGNvbnN0
IFFDU3RyaW5nICZzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKewogICAgUUNTdHJpbmcgdG1wKCBz
MS5kYXRhKCkgKTsKICAgIHRtcCArPSBzMjsKICAgIHJldHVybiB0bXA7Cn0KCiAgaW5saW5lIGNv
bnN0IFFDU3RyaW5nIG9wZXJhdG9yKyggY29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpz
MiApCnsKICAgIFFDU3RyaW5nIHRtcCggczEuZGF0YSgpICk7CiAgICB0bXAgKz0gczI7CiAgICBy
ZXR1cm4gdG1wOwp9CgogIGlubGluZSBjb25zdCBRQ1N0cmluZyBvcGVyYXRvcisoIGNvbnN0IGNo
YXIgKnMxLCBjb25zdCBRQ1N0cmluZyAmczIgKQp7CiAgICBRQ1N0cmluZyB0bXAoIHMxICk7CiAg
ICB0bXAgKz0gczI7CiAgICByZXR1cm4gdG1wOwp9CgogIGlubGluZSBjb25zdCBRQ1N0cmluZyBv
cGVyYXRvcisoIGNvbnN0IFFDU3RyaW5nICZzMSwgY2hhciBjMiApCnsKICAgIFFDU3RyaW5nIHRt
cCggczEuZGF0YSgpICk7CiAgICB0bXAgKz0gYzI7CiAgICByZXR1cm4gdG1wOwp9CgogIGlubGlu
ZSBjb25zdCBRQ1N0cmluZyBvcGVyYXRvcisoIGNoYXIgYzEsIGNvbnN0IFFDU3RyaW5nICZzMiAp
CnsKICAgIFFDU3RyaW5nIHRtcDsKICAgIHRtcCArPSBjMTsKICAgIHRtcCArPSBzMjsKICAgIHJl
dHVybiB0bXA7Cn0KCgojIDQzICIvdXNyL2xvY2FsL3F0L2luY2x1ZGUvcXN0cmluZy5oIiAyCgoK
CgogCgoKCmNsYXNzIFFSZWdFeHA7CmNsYXNzIFFTdHJpbmc7CmNsYXNzIFFDaGFyUmVmOwoKY2xh
c3MgICBRQ2hhciB7CnB1YmxpYzoKICAgIFFDaGFyKCk7CiAgICBRQ2hhciggY2hhciBjICk7CiAg
ICBRQ2hhciggdWNoYXIgYyApOwogICAgUUNoYXIoIHVjaGFyIGMsIHVjaGFyIHIgKTsKICAgIFFD
aGFyKCBjb25zdCBRQ2hhciYgYyApOwogICAgUUNoYXIoIHVzaG9ydCByYyApOwogICAgUUNoYXIo
IHNob3J0IHJjICk7CiAgICBRQ2hhciggdWludCByYyApOwogICAgUUNoYXIoIGludCByYyApOwoK
ICAgIHN0YXRpYyBjb25zdCAgUUNoYXIgbnVsbDsgICAgICAgICAgICAgCiAgICBzdGF0aWMgY29u
c3QgIFFDaGFyIHJlcGxhY2VtZW50OyAgICAgIAogICAgc3RhdGljIGNvbnN0ICBRQ2hhciBieXRl
T3JkZXJNYXJrOyAgICAgIAogICAgc3RhdGljIGNvbnN0ICBRQ2hhciBieXRlT3JkZXJTd2FwcGVk
OyAgICAgIAogICAgc3RhdGljIGNvbnN0ICBRQ2hhciBuYnNwOyAgICAgICAgICAgICAKCiAgICAg
CgogICAgZW51bSBDYXRlZ29yeQogICAgewogICAgICAgIE5vQ2F0ZWdvcnksCgogICAgICAgIE1h
cmtfTm9uU3BhY2luZywgICAgICAgICAgIAogICAgICAgIE1hcmtfU3BhY2luZ0NvbWJpbmluZywg
ICAgIAogICAgICAgIE1hcmtfRW5jbG9zaW5nLCAgICAgICAgICAgIAoKICAgICAgICBOdW1iZXJf
RGVjaW1hbERpZ2l0LCAgICAgICAKICAgICAgICBOdW1iZXJfTGV0dGVyLCAgICAgICAgICAgICAK
ICAgICAgICBOdW1iZXJfT3RoZXIsICAgICAgICAgICAgICAKCiAgICAgICAgU2VwYXJhdG9yX1Nw
YWNlLCAgICAgICAgICAgCiAgICAgICAgU2VwYXJhdG9yX0xpbmUsICAgICAgICAgICAgCiAgICAg
ICAgU2VwYXJhdG9yX1BhcmFncmFwaCwgICAgICAgCgogICAgICAgIE90aGVyX0NvbnRyb2wsICAg
ICAgICAgICAgIAogICAgICAgIE90aGVyX0Zvcm1hdCwgICAgICAgICAgICAgIAogICAgICAgIE90
aGVyX1N1cnJvZ2F0ZSwgICAgICAgICAgIAogICAgICAgIE90aGVyX1ByaXZhdGVVc2UsICAgICAg
ICAgIAogICAgICAgIE90aGVyX05vdEFzc2lnbmVkLCAgICAgICAgIAoKICAgICAgICBMZXR0ZXJf
VXBwZXJjYXNlLCAgICAgICAgICAKICAgICAgICBMZXR0ZXJfTG93ZXJjYXNlLCAgICAgICAgICAK
ICAgICAgICBMZXR0ZXJfVGl0bGVjYXNlLCAgICAgICAgICAKICAgICAgICBMZXR0ZXJfTW9kaWZp
ZXIsICAgICAgICAgICAKICAgICAgICBMZXR0ZXJfT3RoZXIsICAgICAgICAgICAgICAKCiAgICAg
ICAgUHVuY3R1YXRpb25fQ29ubmVjdG9yLCAgICAgCiAgICAgICAgUHVuY3R1YXRpb25fRGFzaCwg
ICAgICAgICAgCiAgICAgICAgUHVuY3R1YXRpb25fRGFzayA9IFB1bmN0dWF0aW9uX0Rhc2gsICAK
ICAgICAgICBQdW5jdHVhdGlvbl9PcGVuLCAgICAgICAgICAKICAgICAgICBQdW5jdHVhdGlvbl9D
bG9zZSwgICAgICAgICAKICAgICAgICBQdW5jdHVhdGlvbl9Jbml0aWFsUXVvdGUsICAKICAgICAg
ICBQdW5jdHVhdGlvbl9GaW5hbFF1b3RlLCAgICAKICAgICAgICBQdW5jdHVhdGlvbl9PdGhlciwg
ICAgICAgICAKCiAgICAgICAgU3ltYm9sX01hdGgsICAgICAgICAgICAgICAgCiAgICAgICAgU3lt
Ym9sX0N1cnJlbmN5LCAgICAgICAgICAgCiAgICAgICAgU3ltYm9sX01vZGlmaWVyLCAgICAgICAg
ICAgCiAgICAgICAgU3ltYm9sX090aGVyICAgICAgICAgICAgICAgCiAgICB9OwoKICAgIGVudW0g
RGlyZWN0aW9uCiAgICB7CiAgICAgICAgRGlyTCwgRGlyUiwgRGlyRU4sIERpckVTLCBEaXJFVCwg
RGlyQU4sIERpckNTLCBEaXJCLCBEaXJTLCBEaXJXUywgRGlyT04sCiAgICAgICAgRGlyTFJFLCBE
aXJMUk8sIERpckFMLCBEaXJSTEUsIERpclJMTywgRGlyUERGLCBEaXJOU00sIERpckJOCiAgICB9
OwoKICAgIGVudW0gRGVjb21wb3NpdGlvbgogICAgewogICAgICAgIFNpbmdsZSwgQ2Fub25pY2Fs
LCBGb250LCBOb0JyZWFrLCBJbml0aWFsLCBNZWRpYWwsCiAgICAgICAgRmluYWwsIElzb2xhdGVk
LCBDaXJjbGUsIFN1cGVyLCBTdWIsIFZlcnRpY2FsLAogICAgICAgIFdpZGUsIE5hcnJvdywgU21h
bGwsIFNxdWFyZSwgQ29tcGF0LCBGcmFjdGlvbgogICAgfTsKCiAgICBlbnVtIEpvaW5pbmcKICAg
IHsKICAgICAgICBPdGhlckpvaW5pbmcsIER1YWwsIFJpZ2h0LCBDZW50ZXIKICAgIH07CgogICAg
ZW51bSBDb21iaW5pbmdDbGFzcwogICAgewogICAgICAgIENvbWJpbmluZ19CZWxvd0xlZnRBdHRh
Y2hlZCAgICAgICA9IDIwMCwKICAgICAgICBDb21iaW5pbmdfQmVsb3dBdHRhY2hlZCAgICAgICAg
ICAgPSAyMDIsCiAgICAgICAgQ29tYmluaW5nX0JlbG93UmlnaHRBdHRhY2hlZCAgICAgID0gMjA0
LAogICAgICAgIENvbWJpbmluZ19MZWZ0QXR0YWNoZWQgICAgICAgICAgICA9IDIwOCwKICAgICAg
ICBDb21iaW5pbmdfUmlnaHRBdHRhY2hlZCAgICAgICAgICAgPSAyMTAsCiAgICAgICAgQ29tYmlu
aW5nX0Fib3ZlTGVmdEF0dGFjaGVkICAgICAgID0gMjEyLAogICAgICAgIENvbWJpbmluZ19BYm92
ZUF0dGFjaGVkICAgICAgICAgICA9IDIxNCwKICAgICAgICBDb21iaW5pbmdfQWJvdmVSaWdodEF0
dGFjaGVkICAgICAgPSAyMTYsCgogICAgICAgIENvbWJpbmluZ19CZWxvd0xlZnQgICAgICAgICAg
ICAgICA9IDIxOCwKICAgICAgICBDb21iaW5pbmdfQmVsb3cgICAgICAgICAgICAgICAgICAgPSAy
MjAsCiAgICAgICAgQ29tYmluaW5nX0JlbG93UmlnaHQgICAgICAgICAgICAgID0gMjIyLAogICAg
ICAgIENvbWJpbmluZ19MZWZ0ICAgICAgICAgICAgICAgICAgICA9IDIyNCwKICAgICAgICBDb21i
aW5pbmdfUmlnaHQgICAgICAgICAgICAgICAgICAgPSAyMjYsCiAgICAgICAgQ29tYmluaW5nX0Fi
b3ZlTGVmdCAgICAgICAgICAgICAgID0gMjI4LAogICAgICAgIENvbWJpbmluZ19BYm92ZSAgICAg
ICAgICAgICAgICAgICA9IDIzMCwKICAgICAgICBDb21iaW5pbmdfQWJvdmVSaWdodCAgICAgICAg
ICAgICAgPSAyMzIsCgogICAgICAgIENvbWJpbmluZ19Eb3VibGVCZWxvdyAgICAgICAgICAgICA9
IDIzMywKICAgICAgICBDb21iaW5pbmdfRG91YmxlQWJvdmUgICAgICAgICAgICAgPSAyMzQsCiAg
ICAgICAgQ29tYmluaW5nX0lvdGFTdWJzY3JpcHQgICAgICAgICAgID0gMjQwCiAgICB9OwoKICAg
ICAKCiAgICBpbnQgZGlnaXRWYWx1ZSgpIGNvbnN0OwogICAgUUNoYXIgbG93ZXIoKSBjb25zdDsK
ICAgIFFDaGFyIHVwcGVyKCkgY29uc3Q7CgogICAgQ2F0ZWdvcnkgY2F0ZWdvcnkoKSBjb25zdDsK
ICAgIERpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdDsKICAgIEpvaW5pbmcgam9pbmluZygpIGNv
bnN0OwogICAgYm9vbCBtaXJyb3JlZCgpIGNvbnN0OwogICAgUUNoYXIgbWlycm9yZWRDaGFyKCkg
Y29uc3Q7CiAgICBjb25zdCBRU3RyaW5nICZkZWNvbXBvc2l0aW9uKCkgY29uc3Q7CiAgICBEZWNv
bXBvc2l0aW9uIGRlY29tcG9zaXRpb25UYWcoKSBjb25zdDsKICAgIHVuc2lnbmVkIGNoYXIgY29t
YmluaW5nQ2xhc3MoKSBjb25zdDsKCiAgICBjaGFyIGxhdGluMSgpIGNvbnN0IHsgcmV0dXJuIHVj
cyA+IDB4ZmYgPyAwIDogKGNoYXIpIHVjczsgfQogICAgdXNob3J0IHVuaWNvZGUoKSBjb25zdCB7
IHJldHVybiB1Y3M7IH0KICAgIHVzaG9ydCAmdW5pY29kZSgpIHsgcmV0dXJuIHVjczsgfQoKICAg
ICAKICAgIG9wZXJhdG9yIGNoYXIoKSBjb25zdCB7IHJldHVybiBsYXRpbjEoKTsgfQoKCiAgICBi
b29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIHVuaWNvZGUoKT09MDsgfQogICAgYm9vbCBpc1By
aW50KCkgY29uc3Q7CiAgICBib29sIGlzUHVuY3QoKSBjb25zdDsKICAgIGJvb2wgaXNTcGFjZSgp
IGNvbnN0OwogICAgYm9vbCBpc01hcmsoKSBjb25zdDsKICAgIGJvb2wgaXNMZXR0ZXIoKSBjb25z
dDsKICAgIGJvb2wgaXNOdW1iZXIoKSBjb25zdDsKICAgIGJvb2wgaXNMZXR0ZXJPck51bWJlcigp
IGNvbnN0OwogICAgYm9vbCBpc0RpZ2l0KCkgY29uc3Q7CiAgICBib29sIGlzU3ltYm9sKCkgY29u
c3Q7CgogICAgdWNoYXIgY2VsbCgpIGNvbnN0IHsgcmV0dXJuICgodWNoYXIpIHVjcyAmIDB4ZmYp
OyB9CiAgICB1Y2hhciByb3coKSBjb25zdCB7IHJldHVybiAoKHVjaGFyKSAodWNzPj44KSYweGZm
KTsgfQogICAgdm9pZCBzZXRDZWxsKCB1Y2hhciBjZWxsICkgeyB1Y3MgPSAodWNzICYgMHhmZjAw
KSArIGNlbGw7IH0KICAgIHZvaWQgc2V0Um93KCB1Y2hhciByb3cgKSB7IHVjcyA9ICgoKHVzaG9y
dCkgcm93KTw8OCkgKyAodWNzJjB4ZmYpOyB9CgogICAgc3RhdGljIGJvb2wgbmV0d29ya09yZGVy
ZWQoKSB7CglpbnQgd29yZFNpemU7Cglib29sIGJpZ0VuZGlhbiA9IEZBTFNFOwoJcVN5c0luZm8o
ICZ3b3JkU2l6ZSwgJmJpZ0VuZGlhbiApOwoJcmV0dXJuIGJpZ0VuZGlhbjsKICAgIH0KCiAgICBm
cmllbmQgaW5saW5lIGJvb2wgb3BlcmF0b3I9PSggY2hhciBjaCwgUUNoYXIgYyApOwogICAgZnJp
ZW5kIGlubGluZSBib29sIG9wZXJhdG9yPT0oIFFDaGFyIGMsIGNoYXIgY2ggKTsKICAgIGZyaWVu
ZCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KCBRQ2hhciBjMSwgUUNoYXIgYzIgKTsKICAgIGZyaWVu
ZCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KCBRQ2hhciBjMSwgUUNoYXIgYzIgKTsKICAgIGZyaWVu
ZCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KCBjaGFyIGNoLCBRQ2hhciBjICk7CiAgICBmcmllbmQg
aW5saW5lIGJvb2wgb3BlcmF0b3IhPSggUUNoYXIgYywgY2hhciBjaCApOwogICAgZnJpZW5kIGlu
bGluZSBib29sIG9wZXJhdG9yPD0oIFFDaGFyIGMsIGNoYXIgY2ggKTsKICAgIGZyaWVuZCBpbmxp
bmUgYm9vbCBvcGVyYXRvcjw9KCBjaGFyIGNoLCBRQ2hhciBjICk7CiAgICBmcmllbmQgaW5saW5l
IGJvb2wgb3BlcmF0b3I8PSggUUNoYXIgYzEsIFFDaGFyIGMyICk7Cgpwcml2YXRlOgogICAgdXNo
b3J0IHVjczsKCgoKfSAgOwoKaW5saW5lIFFDaGFyOjpRQ2hhcigpCnsKICAgIHVjcyA9IDA7CgoK
Cn0KaW5saW5lIFFDaGFyOjpRQ2hhciggY2hhciBjICkKewogICAgdWNzID0gKHVjaGFyKWM7CgoK
Cn0KaW5saW5lIFFDaGFyOjpRQ2hhciggdWNoYXIgYyApCnsKICAgIHVjcyA9IGM7CgoKCn0KaW5s
aW5lIFFDaGFyOjpRQ2hhciggdWNoYXIgYywgdWNoYXIgciApCnsKICAgIHVjcyA9IChyIDw8IDgp
IHwgYzsKCgoKfQppbmxpbmUgUUNoYXI6OlFDaGFyKCBjb25zdCBRQ2hhciYgYyApCnsKICAgIHVj
cyA9IGMudWNzOwoKCgp9CgppbmxpbmUgUUNoYXI6OlFDaGFyKCB1c2hvcnQgcmMgKQp7CiAgICB1
Y3MgPSByYzsKCgoKfQppbmxpbmUgUUNoYXI6OlFDaGFyKCBzaG9ydCByYyApCnsKICAgIHVjcyA9
ICh1c2hvcnQpIHJjOwoKCgp9CmlubGluZSBRQ2hhcjo6UUNoYXIoIHVpbnQgcmMgKQp7CiAgICB1
Y3MgPSAodXNob3J0ICkgKHJjICYgMHhmZmZmKTsKCgoKfQppbmxpbmUgUUNoYXI6OlFDaGFyKCBp
bnQgcmMgKQp7CiAgICB1Y3MgPSAodXNob3J0KSAocmMgJiAweGZmZmYpOwoKCgp9CgoKaW5saW5l
IGJvb2wgb3BlcmF0b3I9PSggY2hhciBjaCwgUUNoYXIgYyApCnsKICAgIHJldHVybiAoKHVjaGFy
KSBjaCkgPT0gYy51Y3M7Cn0KCmlubGluZSBib29sIG9wZXJhdG9yPT0oIFFDaGFyIGMsIGNoYXIg
Y2ggKQp7CiAgICByZXR1cm4gKCh1Y2hhcikgY2gpID09IGMudWNzOwp9CgppbmxpbmUgYm9vbCBv
cGVyYXRvcj09KCBRQ2hhciBjMSwgUUNoYXIgYzIgKQp7CiAgICByZXR1cm4gYzEudWNzID09IGMy
LnVjczsKfQoKaW5saW5lIGJvb2wgb3BlcmF0b3IhPSggUUNoYXIgYzEsIFFDaGFyIGMyICkKewog
ICAgcmV0dXJuIGMxLnVjcyAhPSBjMi51Y3M7Cn0KCmlubGluZSBib29sIG9wZXJhdG9yIT0oIGNo
YXIgY2gsIFFDaGFyIGMgKQp7CiAgICByZXR1cm4gKCh1Y2hhciljaCkgIT0gYy51Y3M7Cn0KCmlu
bGluZSBib29sIG9wZXJhdG9yIT0oIFFDaGFyIGMsIGNoYXIgY2ggKQp7CiAgICByZXR1cm4gKCh1
Y2hhcikgY2gpICE9IGMudWNzOwp9CgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KCBRQ2hhciBjLCBj
aGFyIGNoICkKewogICAgcmV0dXJuIGMudWNzIDw9ICgodWNoYXIpIGNoKTsKfQoKaW5saW5lIGJv
b2wgb3BlcmF0b3I8PSggY2hhciBjaCwgUUNoYXIgYyApCnsKICAgIHJldHVybiAoKHVjaGFyKSBj
aCkgPD0gYy51Y3M7Cn0KCmlubGluZSBib29sIG9wZXJhdG9yPD0oIFFDaGFyIGMxLCBRQ2hhciBj
MiApCnsKICAgIHJldHVybiBjMS51Y3MgPD0gYzIudWNzOwp9CgppbmxpbmUgYm9vbCBvcGVyYXRv
cj49KCBRQ2hhciBjLCBjaGFyIGNoICkgeyByZXR1cm4gY2ggPD0gYzsgfQppbmxpbmUgYm9vbCBv
cGVyYXRvcj49KCBjaGFyIGNoLCBRQ2hhciBjICkgeyByZXR1cm4gYyA8PSBjaDsgfQppbmxpbmUg
Ym9vbCBvcGVyYXRvcj49KCBRQ2hhciBjMSwgUUNoYXIgYzIgKSB7IHJldHVybiBjMiA8PSBjMTsg
fQppbmxpbmUgYm9vbCBvcGVyYXRvcjwoIFFDaGFyIGMsIGNoYXIgY2ggKSB7IHJldHVybiAhKGNo
PD1jKTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcjwoIGNoYXIgY2gsIFFDaGFyIGMgKSB7IHJldHVy
biAhKGM8PWNoKTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcjwoIFFDaGFyIGMxLCBRQ2hhciBjMiAp
IHsgcmV0dXJuICEoYzI8PWMxKTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcj4oIFFDaGFyIGMsIGNo
YXIgY2ggKSB7IHJldHVybiAhKGNoPj1jKTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcj4oIGNoYXIg
Y2gsIFFDaGFyIGMgKSB7IHJldHVybiAhKGM+PWNoKTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcj4o
IFFDaGFyIGMxLCBRQ2hhciBjMiApIHsgcmV0dXJuICEoYzI+PWMxKTsgfQoKIApzdHJ1Y3QgICBR
U3RyaW5nRGF0YSA6IHB1YmxpYyBRU2hhcmVkIHsKICAgIFFTdHJpbmdEYXRhKCkgOgogICAgICAg
IHVuaWNvZGUoMCksIGFzY2lpKDApLCBsZW4oMCksIHNpbXBsZXRleHQoMSksIG1heGwoMCksIGRp
cnR5KDApIHsgcmVmKCk7IH0KICAgIFFTdHJpbmdEYXRhKFFDaGFyICp1LCB1aW50IGwsIHVpbnQg
bSkgOgogICAgICAgIHVuaWNvZGUodSksIGFzY2lpKDApLCBsZW4obCksIHNpbXBsZXRleHQoMSks
IG1heGwobSksIGRpcnR5KDEpIHsgfQoKICAgIH5RU3RyaW5nRGF0YSgpIHsgaWYgKCB1bmljb2Rl
ICkgZGVsZXRlW10gKChjaGFyKil1bmljb2RlKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCBh
c2NpaSApIGRlbGV0ZVtdIGFzY2lpOyB9CgogICAgdm9pZCBkZWxldGVTZWxmKCk7CiAgICBRQ2hh
ciAqdW5pY29kZTsKICAgIGNoYXIgKmFzY2lpOwogICAgdm9pZCBzZXREaXJ0eSgpIHsKCWlmICgg
YXNjaWkgKSB7CgkgICAgZGVsZXRlIFtdIGFzY2lpOwoJICAgIGFzY2lpID0gMDsKCX0KCWRpcnR5
ID0gMTsKICAgIH0KCgoKICAgIHVpbnQgbGVuIDogMzA7CgogICAgdWludCBzaW1wbGV0ZXh0IDog
MTsKCgoKICAgIHVpbnQgbWF4bCA6IDMwOwoKICAgIHVpbnQgZGlydHkgOiAxOwp9OwoKCmNsYXNz
ICAgUVN0cmluZwp7CnB1YmxpYzoKICAgIFFTdHJpbmcoKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgUVN0cmluZyggUUNoYXIgKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCiAgICBRU3RyaW5nKCBjb25zdCBRU3RyaW5nICYgKTsgICAgICAgICAgICAgICAgICAK
ICAgIFFTdHJpbmcoIGNvbnN0IFFCeXRlQXJyYXkmICk7ICAgICAgICAgICAgICAgIAogICAgUVN0
cmluZyggY29uc3QgUUNoYXIqIHVuaWNvZGUsIHVpbnQgbGVuZ3RoICk7ICAKCiAgICBRU3RyaW5n
KCBjb25zdCBjaGFyICpzdHIgKTsgICAgICAgICAgICAgICAgICAKCiAgICB+UVN0cmluZygpOwoK
ICAgIFFTdHJpbmcgICAgJm9wZXJhdG9yPSggY29uc3QgUVN0cmluZyAmICk7ICAgIAoKICAgIFFT
dHJpbmcgICAgJm9wZXJhdG9yPSggY29uc3QgY2hhciAqICk7ICAgICAgIAoKICAgIFFTdHJpbmcg
ICAgJm9wZXJhdG9yPSggY29uc3QgUUNTdHJpbmcmICk7ICAgIAogICAgUVN0cmluZyAgICAmb3Bl
cmF0b3I9KCBRQ2hhciBjICk7CiAgICBRU3RyaW5nICAgICZvcGVyYXRvcj0oIGNoYXIgYyApOwoK
ICAgIHN0YXRpYyBjb25zdCAgUVN0cmluZyBudWxsOwoKICAgIGJvb2wgICAgICAgIGlzTnVsbCgp
ICAgICAgICBjb25zdDsKICAgIGJvb2wgICAgICAgIGlzRW1wdHkoKSAgICAgICBjb25zdDsKICAg
IHVpbnQgICAgICAgIGxlbmd0aCgpICAgICAgICBjb25zdDsKICAgIHZvaWQgICAgICAgIHRydW5j
YXRlKCB1aW50IHBvcyApOwoKICAgIFFTdHJpbmcgJiAgIGZpbGwoIFFDaGFyIGMsIGludCBsZW4g
PSAtMSApOwoKICAgIFFTdHJpbmcgICAgIGNvcHkoKSAgY29uc3Q7CgogICAgUVN0cmluZyBhcmco
IGxvbmcgYSwgaW50IGZpZWxkd2lkdGg9MCwgaW50IGJhc2U9MTAgKSBjb25zdDsKICAgIFFTdHJp
bmcgYXJnKCB1bG9uZyBhLCBpbnQgZmllbGR3aWR0aD0wLCBpbnQgYmFzZT0xMCApIGNvbnN0Owog
ICAgUVN0cmluZyBhcmcoIGludCBhLCBpbnQgZmllbGR3aWR0aD0wLCBpbnQgYmFzZT0xMCApIGNv
bnN0OwogICAgUVN0cmluZyBhcmcoIHVpbnQgYSwgaW50IGZpZWxkd2lkdGg9MCwgaW50IGJhc2U9
MTAgKSBjb25zdDsKICAgIFFTdHJpbmcgYXJnKCBzaG9ydCBhLCBpbnQgZmllbGR3aWR0aD0wLCBp
bnQgYmFzZT0xMCApIGNvbnN0OwogICAgUVN0cmluZyBhcmcoIHVzaG9ydCBhLCBpbnQgZmllbGR3
aWR0aD0wLCBpbnQgYmFzZT0xMCApIGNvbnN0OwogICAgUVN0cmluZyBhcmcoIGNoYXIgYSwgaW50
IGZpZWxkd2lkdGg9MCApIGNvbnN0OwogICAgUVN0cmluZyBhcmcoIFFDaGFyIGEsIGludCBmaWVs
ZHdpZHRoPTAgKSBjb25zdDsKICAgIFFTdHJpbmcgYXJnKCBjb25zdCBRU3RyaW5nJiBhLCBpbnQg
ZmllbGR3aWR0aD0wICkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyggZG91YmxlIGEsIGludCBmaWVs
ZHdpZHRoPTAsIGNoYXIgZm10PSdnJywgaW50IHByZWM9LTEgKSBjb25zdDsKCgogICAgUVN0cmlu
ZyAgICAmc3ByaW50ZiggY29uc3QgY2hhciogZm9ybWF0LCAuLi4gKQoKICAgICAgICBfX2F0dHJp
YnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSkKCiAgICAgICAgOwoKCiAgICBpbnQgICAg
ICAgICBmaW5kKCBRQ2hhciBjLCBpbnQgaW5kZXg9MCwgYm9vbCBjcz1UUlVFICkgY29uc3Q7CiAg
ICBpbnQgICAgICAgICBmaW5kKCBjaGFyIGMsIGludCBpbmRleD0wLCBib29sIGNzPVRSVUUgKSBj
b25zdDsKICAgIGludCAgICAgICAgIGZpbmQoIGNvbnN0IFFTdHJpbmcgJnN0ciwgaW50IGluZGV4
PTAsIGJvb2wgY3M9VFJVRSApIGNvbnN0OwoKICAgIGludCAgICAgICAgIGZpbmQoIGNvbnN0IFFS
ZWdFeHAgJiwgaW50IGluZGV4PTAgKSBjb25zdDsKCgogICAgaW50ICAgICAgICAgZmluZCggY29u
c3QgY2hhciogc3RyLCBpbnQgaW5kZXg9MCApIGNvbnN0OwoKICAgIGludCAgICAgICAgIGZpbmRS
ZXYoIFFDaGFyIGMsIGludCBpbmRleD0tMSwgYm9vbCBjcz1UUlVFKSBjb25zdDsKICAgIGludCAg
ICAgICAgIGZpbmRSZXYoIGNoYXIgYywgaW50IGluZGV4PS0xLCBib29sIGNzPVRSVUUpIGNvbnN0
OwogICAgaW50ICAgICAgICAgZmluZFJldiggY29uc3QgUVN0cmluZyAmc3RyLCBpbnQgaW5kZXg9
LTEsIGJvb2wgY3M9VFJVRSkgY29uc3Q7CgogICAgaW50ICAgICAgICAgZmluZFJldiggY29uc3Qg
UVJlZ0V4cCAmLCBpbnQgaW5kZXg9LTEgKSBjb25zdDsKCgogICAgaW50ICAgICAgICAgZmluZFJl
diggY29uc3QgY2hhciogc3RyLCBpbnQgaW5kZXg9LTEgKSBjb25zdDsKCiAgICBpbnQgICAgICAg
ICBjb250YWlucyggUUNoYXIgYywgYm9vbCBjcz1UUlVFICkgY29uc3Q7CiAgICBpbnQgICAgICAg
ICBjb250YWlucyggY2hhciBjLCBib29sIGNzPVRSVUUgKSBjb25zdAogICAgICAgICAgICAgICAg
ICAgIHsgcmV0dXJuIGNvbnRhaW5zKFFDaGFyKGMpLCBjcyk7IH0KCiAgICBpbnQgICAgICAgICBj
b250YWlucyggY29uc3QgY2hhciogc3RyLCBib29sIGNzPVRSVUUgKSBjb25zdDsKCiAgICBpbnQg
ICAgICAgICBjb250YWlucyggY29uc3QgUVN0cmluZyAmc3RyLCBib29sIGNzPVRSVUUgKSBjb25z
dDsKCiAgICBpbnQgICAgICAgICBjb250YWlucyggY29uc3QgUVJlZ0V4cCAmICkgY29uc3Q7CgoK
ICAgIGVudW0gU2VjdGlvbkZsYWdzIHsKCVNlY3Rpb25EZWZhdWx0ICAgICAgICAgICAgID0gMHgw
MCwKCVNlY3Rpb25Ta2lwRW1wdHkgICAgICAgICAgID0gMHgwMSwKCVNlY3Rpb25JbmNsdWRlTGVh
ZGluZ1NlcCAgID0gMHgwMiwKCVNlY3Rpb25JbmNsdWRlVHJhaWxpbmdTZXAgID0gMHgwNCwKCVNl
Y3Rpb25DYXNlSW5zZW5zaXRpdmVTZXBzID0gMHgwOAogICAgfTsKICAgIFFTdHJpbmcgICAgIHNl
Y3Rpb24oIFFDaGFyIHNlcCwgaW50IHN0YXJ0LCBpbnQgZW5kID0gMHhmZmZmZmZmZiwgaW50IGZs
YWdzID0gU2VjdGlvbkRlZmF1bHQgKSBjb25zdDsKICAgIFFTdHJpbmcgICAgIHNlY3Rpb24oIGNo
YXIgc2VwLCBpbnQgc3RhcnQsIGludCBlbmQgPSAweGZmZmZmZmZmLCBpbnQgZmxhZ3MgPSBTZWN0
aW9uRGVmYXVsdCApIGNvbnN0OwoKICAgIFFTdHJpbmcgICAgICBzZWN0aW9uKCBjb25zdCBjaGFy
ICppbl9zZXAsIGludCBzdGFydCwgaW50IGVuZCA9IDB4ZmZmZmZmZmYsIGludCBmbGFncyA9IFNl
Y3Rpb25EZWZhdWx0ICkgY29uc3Q7CgogICAgUVN0cmluZyAgICAgc2VjdGlvbiggY29uc3QgUVN0
cmluZyAmaW5fc2VwLCBpbnQgc3RhcnQsIGludCBlbmQgPSAweGZmZmZmZmZmLCBpbnQgZmxhZ3Mg
PSBTZWN0aW9uRGVmYXVsdCApIGNvbnN0OwoKICAgIFFTdHJpbmcgICAgIHNlY3Rpb24oIGNvbnN0
IFFSZWdFeHAgJnJlZywgaW50IHN0YXJ0LCBpbnQgZW5kID0gMHhmZmZmZmZmZiwgaW50IGZsYWdz
ID0gU2VjdGlvbkRlZmF1bHQgKSBjb25zdDsKCgogICAgUVN0cmluZyAgICAgbGVmdCggdWludCBs
ZW4gKSAgY29uc3Q7CiAgICBRU3RyaW5nICAgICByaWdodCggdWludCBsZW4gKSBjb25zdDsKICAg
IFFTdHJpbmcgICAgIG1pZCggdWludCBpbmRleCwgdWludCBsZW49MHhmZmZmZmZmZikgY29uc3Q7
CgogICAgUVN0cmluZyAgICAgbGVmdEp1c3RpZnkoIHVpbnQgd2lkdGgsIFFDaGFyIGZpbGw9JyAn
LCBib29sIHRydW5jPUZBTFNFKWNvbnN0OwogICAgUVN0cmluZyAgICAgcmlnaHRKdXN0aWZ5KCB1
aW50IHdpZHRoLCBRQ2hhciBmaWxsPScgJyxib29sIHRydW5jPUZBTFNFKWNvbnN0OwoKICAgIFFT
dHJpbmcgICAgIGxvd2VyKCkgY29uc3Q7CiAgICBRU3RyaW5nICAgICB1cHBlcigpIGNvbnN0OwoK
ICAgIFFTdHJpbmcgICAgIHN0cmlwV2hpdGVTcGFjZSgpICAgICAgIGNvbnN0OwogICAgUVN0cmlu
ZyAgICAgc2ltcGxpZnlXaGl0ZVNwYWNlKCkgICAgY29uc3Q7CgogICAgUVN0cmluZyAgICAmaW5z
ZXJ0KCB1aW50IGluZGV4LCBjb25zdCBRU3RyaW5nICYgKTsKICAgIFFTdHJpbmcgICAgJmluc2Vy
dCggdWludCBpbmRleCwgY29uc3QgUUNoYXIqLCB1aW50IGxlbiApOwogICAgUVN0cmluZyAgICAm
aW5zZXJ0KCB1aW50IGluZGV4LCBRQ2hhciApOwogICAgUVN0cmluZyAgICAmaW5zZXJ0KCB1aW50
IGluZGV4LCBjaGFyIGMgKSB7IHJldHVybiBpbnNlcnQoaW5kZXgsUUNoYXIoYykpOyB9CiAgICBR
U3RyaW5nICAgICZhcHBlbmQoIGNoYXIgKTsKICAgIFFTdHJpbmcgICAgJmFwcGVuZCggUUNoYXIg
KTsKICAgIFFTdHJpbmcgICAgJmFwcGVuZCggY29uc3QgUVN0cmluZyAmICk7CiAgICBRU3RyaW5n
ICAgICZwcmVwZW5kKCBjaGFyICk7CiAgICBRU3RyaW5nICAgICZwcmVwZW5kKCBRQ2hhciApOwog
ICAgUVN0cmluZyAgICAmcHJlcGVuZCggY29uc3QgUVN0cmluZyAmICk7CiAgICBRU3RyaW5nICAg
ICZyZW1vdmUoIHVpbnQgaW5kZXgsIHVpbnQgbGVuICk7CiAgICBRU3RyaW5nICAgICZyZXBsYWNl
KCB1aW50IGluZGV4LCB1aW50IGxlbiwgY29uc3QgUVN0cmluZyAmICk7CiAgICBRU3RyaW5nICAg
ICZyZXBsYWNlKCB1aW50IGluZGV4LCB1aW50IGxlbiwgY29uc3QgUUNoYXIqLCB1aW50IGNsZW4g
KTsKCiAgICBRU3RyaW5nICAgICZyZXBsYWNlKCBjb25zdCBRUmVnRXhwICYsIGNvbnN0IFFTdHJp
bmcgJiApOwoKICAgIHNob3J0ICAgICAgIHRvU2hvcnQoIGJvb2wgKm9rPTAsIGludCBiYXNlPTEw
ICkgICAgICBjb25zdDsKICAgIHVzaG9ydCAgICAgIHRvVVNob3J0KCBib29sICpvaz0wLCBpbnQg
YmFzZT0xMCApICAgICBjb25zdDsKICAgIGludCAgICAgICAgIHRvSW50KCBib29sICpvaz0wLCBp
bnQgYmFzZT0xMCApICAgICAgICBjb25zdDsKICAgIHVpbnQgICAgICAgIHRvVUludCggYm9vbCAq
b2s9MCwgaW50IGJhc2U9MTAgKSAgICAgICBjb25zdDsKICAgIGxvbmcgICAgICAgIHRvTG9uZygg
Ym9vbCAqb2s9MCwgaW50IGJhc2U9MTAgKSAgICAgICBjb25zdDsKICAgIHVsb25nICAgICAgIHRv
VUxvbmcoIGJvb2wgKm9rPTAsIGludCBiYXNlPTEwICkgICAgICBjb25zdDsKICAgIGZsb2F0ICAg
ICAgIHRvRmxvYXQoIGJvb2wgKm9rPTAgKSAgIGNvbnN0OwogICAgZG91YmxlICAgICAgdG9Eb3Vi
bGUoIGJvb2wgKm9rPTAgKSAgY29uc3Q7CgogICAgUVN0cmluZyAgICAmc2V0TnVtKCBzaG9ydCwg
aW50IGJhc2U9MTAgKTsKICAgIFFTdHJpbmcgICAgJnNldE51bSggdXNob3J0LCBpbnQgYmFzZT0x
MCApOwogICAgUVN0cmluZyAgICAmc2V0TnVtKCBpbnQsIGludCBiYXNlPTEwICk7CiAgICBRU3Ry
aW5nICAgICZzZXROdW0oIHVpbnQsIGludCBiYXNlPTEwICk7CiAgICBRU3RyaW5nICAgICZzZXRO
dW0oIGxvbmcsIGludCBiYXNlPTEwICk7CiAgICBRU3RyaW5nICAgICZzZXROdW0oIHVsb25nLCBp
bnQgYmFzZT0xMCApOwogICAgUVN0cmluZyAgICAmc2V0TnVtKCBmbG9hdCwgY2hhciBmPSdnJywg
aW50IHByZWM9NiApOwogICAgUVN0cmluZyAgICAmc2V0TnVtKCBkb3VibGUsIGNoYXIgZj0nZycs
IGludCBwcmVjPTYgKTsKCiAgICBzdGF0aWMgUVN0cmluZyBudW1iZXIoIGxvbmcsIGludCBiYXNl
PTEwICk7CiAgICBzdGF0aWMgUVN0cmluZyBudW1iZXIoIHVsb25nLCBpbnQgYmFzZT0xMCk7CiAg
ICBzdGF0aWMgUVN0cmluZyBudW1iZXIoIGludCwgaW50IGJhc2U9MTAgKTsKICAgIHN0YXRpYyBR
U3RyaW5nIG51bWJlciggdWludCwgaW50IGJhc2U9MTApOwogICAgc3RhdGljIFFTdHJpbmcgbnVt
YmVyKCBkb3VibGUsIGNoYXIgZj0nZycsIGludCBwcmVjPTYgKTsKCiAgICB2b2lkICAgICAgICBz
ZXRFeHBhbmQoIHVpbnQgaW5kZXgsIFFDaGFyIGMgKTsKCiAgICBRU3RyaW5nICAgICZvcGVyYXRv
cis9KCBjb25zdCBRU3RyaW5nICZzdHIgKTsKICAgIFFTdHJpbmcgICAgJm9wZXJhdG9yKz0oIFFD
aGFyIGMgKTsKICAgIFFTdHJpbmcgICAgJm9wZXJhdG9yKz0oIGNoYXIgYyApOwoKICAgIFFDaGFy
IGF0KCB1aW50IGkgKSBjb25zdAogICAgICAgIHsgcmV0dXJuIGkgPCBkLT5sZW4gPyBkLT51bmlj
b2RlW2ldIDogUUNoYXI6Om51bGw7IH0KICAgIFFDaGFyIG9wZXJhdG9yW10oIGludCBpICkgY29u
c3QgeyByZXR1cm4gYXQoKHVpbnQpaSk7IH0KICAgIFFDaGFyUmVmIGF0KCB1aW50IGkgKTsKICAg
IFFDaGFyUmVmIG9wZXJhdG9yW10oIGludCBpICk7CgogICAgUUNoYXIgY29uc3RyZWYodWludCBp
KSBjb25zdAogICAgICAgIHsgcmV0dXJuIGF0KGkpOyB9CiAgICBRQ2hhciYgcmVmKHVpbnQgaSkK
ICAgICAgICB7ICAKICAgICAgICAgICAgaWYgKCBkLT5jb3VudCAhPSAxIHx8IGkgPj0gZC0+bGVu
ICkKICAgICAgICAgICAgICAgIHN1YmF0KCBpICk7CiAgICAgICAgICAgIGQtPnNldERpcnR5KCk7
CiAgICAgICAgICAgIHJldHVybiBkLT51bmljb2RlW2ldOwogICAgICAgIH0KCiAgICBjb25zdCBR
Q2hhciogdW5pY29kZSgpIGNvbnN0IHsgcmV0dXJuIGQtPnVuaWNvZGU7IH0KICAgIGNvbnN0IGNo
YXIqIGFzY2lpKCkgY29uc3QgeyByZXR1cm4gbGF0aW4xKCk7IH0KICAgIGNvbnN0IGNoYXIqIGxh
dGluMSgpIGNvbnN0OwogICAgc3RhdGljIFFTdHJpbmcgZnJvbUxhdGluMShjb25zdCBjaGFyKiwg
aW50IGxlbj0tMSk7CgogICAgUUNTdHJpbmcgdXRmOCgpIGNvbnN0OwogICAgc3RhdGljIFFTdHJp
bmcgZnJvbVV0ZjgoY29uc3QgY2hhciosIGludCBsZW49LTEpOwoKICAgIFFDU3RyaW5nIGxvY2Fs
OEJpdCgpIGNvbnN0OwogICAgc3RhdGljIFFTdHJpbmcgZnJvbUxvY2FsOEJpdChjb25zdCBjaGFy
KiwgaW50IGxlbj0tMSk7CiAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0OwoKICAgIG9wZXJhdG9y
IGNvbnN0IGNoYXIgKigpIGNvbnN0IHsgcmV0dXJuIGxhdGluMSgpOyB9CgoKICAgIFFTdHJpbmcg
JnNldFVuaWNvZGUoIGNvbnN0IFFDaGFyKiB1bmljb2RlLCB1aW50IGxlbiApOwogICAgUVN0cmlu
ZyAmc2V0VW5pY29kZUNvZGVzKCBjb25zdCB1c2hvcnQqIHVuaWNvZGVfYXNfdXNob3J0cywgdWlu
dCBsZW4gKTsKICAgIFFTdHJpbmcgJnNldExhdGluMSggY29uc3QgY2hhciosIGludCBsZW49LTEg
KTsKCiAgICBpbnQgY29tcGFyZSggY29uc3QgUVN0cmluZyYgcyApIGNvbnN0OwogICAgc3RhdGlj
IGludCBjb21wYXJlKCBjb25zdCBRU3RyaW5nJiBzMSwgY29uc3QgUVN0cmluZyYgczIgKQogICAg
eyByZXR1cm4gczEuY29tcGFyZSggczIgKTsgfQoKICAgIGludCBsb2NhbGVBd2FyZUNvbXBhcmUo
IGNvbnN0IFFTdHJpbmcmIHMgKSBjb25zdDsKICAgIHN0YXRpYyBpbnQgbG9jYWxlQXdhcmVDb21w
YXJlKCBjb25zdCBRU3RyaW5nJiBzMSwgY29uc3QgUVN0cmluZyYgczIgKQogICAgeyByZXR1cm4g
czEubG9jYWxlQXdhcmVDb21wYXJlKCBzMiApOyB9CgoKICAgIGZyaWVuZCAgIFFEYXRhU3RyZWFt
ICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRU3RyaW5nICYgKTsKCgogICAgdm9pZCBjb21w
b3NlKCk7CgoKICAgIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBsYXRpbjEoKTsg
fQoKCiAgICBib29sIHN0YXJ0c1dpdGgoIGNvbnN0IFFTdHJpbmcmICkgY29uc3Q7CiAgICBib29s
IGVuZHNXaXRoKCBjb25zdCBRU3RyaW5nJiApIGNvbnN0OwoKICAgIHZvaWQgc2V0TGVuZ3RoKCB1
aW50IG5ld0xlbmd0aCApOwoKICAgIGJvb2wgc2ltcGxlVGV4dCgpIGNvbnN0IHsgaWYgKCBkLT5k
aXJ0eSApIGNoZWNrU2ltcGxlVGV4dCgpOyByZXR1cm4gKGJvb2wpZC0+c2ltcGxldGV4dDsgfQog
ICAgYm9vbCBpc1JpZ2h0VG9MZWZ0KCkgY29uc3Q7Cgpwcml2YXRlOgogICAgIAoKCgoKCgoKCiAg
ICBRU3RyaW5nJiByZXBsYWNlKCBjb25zdCBRU3RyaW5nICYsIGNvbnN0IFFTdHJpbmcgJiApIHsg
cmV0dXJuICp0aGlzOyB9CgogICAgUVN0cmluZyggaW50IHNpemUsIGJvb2wgICApOwkgCgogICAg
dm9pZCBkZXJlZigpOwogICAgdm9pZCByZWFsX2RldGFjaCgpOwogICAgdm9pZCBzdWJhdCggdWlu
dCApOwogICAgYm9vbCBmaW5kQXJnKGludCYgcG9zLCBpbnQmIGxlbikgY29uc3Q7CgogICAgdm9p
ZCBjaGVja1NpbXBsZVRleHQoKSBjb25zdDsKCiAgICBzdGF0aWMgUUNoYXIqIGFzY2lpVG9Vbmlj
b2RlKCBjb25zdCBjaGFyKiwgdWludCAqIGxlbiwgdWludCBtYXhsZW49KHVpbnQpLTEgKTsKICAg
IHN0YXRpYyBRQ2hhciogYXNjaWlUb1VuaWNvZGUoIGNvbnN0IFFCeXRlQXJyYXkmLCB1aW50ICog
bGVuICk7CiAgICBzdGF0aWMgY2hhciogdW5pY29kZVRvQXNjaWkoIGNvbnN0IFFDaGFyKiwgdWlu
dCBsZW4gKTsKCiAgICBRU3RyaW5nRGF0YSAqZDsKICAgIHN0YXRpYyBRU3RyaW5nRGF0YSogc2hh
cmVkX251bGw7CiAgICBzdGF0aWMgUVN0cmluZ0RhdGEqIG1ha2VTaGFyZWROdWxsKCk7CgogICAg
ZnJpZW5kIGNsYXNzIFFDb25zdFN0cmluZzsKICAgIGZyaWVuZCBjbGFzcyBRVGV4dFN0cmVhbTsK
ICAgIFFTdHJpbmcoIFFTdHJpbmdEYXRhKiBkZCwgYm9vbCAgICkgOiBkKGRkKSB7IH0KfTsKCmNs
YXNzICAgUUNoYXJSZWYgewogICAgZnJpZW5kIGNsYXNzIFFTdHJpbmc7CiAgICBRU3RyaW5nJiBz
OwogICAgdWludCBwOwogICAgUUNoYXJSZWYoUVN0cmluZyogc3RyLCB1aW50IHBvcykgOiBzKCpz
dHIpLCBwKHBvcykgeyB9CgpwdWJsaWM6CiAgICAgCgogICAgIAoKICAgIHVzaG9ydCB1bmljb2Rl
KCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS51bmljb2RlKCk7IH0KICAgIGNoYXIgbGF0
aW4xKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5sYXRpbjEoKTsgfQoKICAgICAKICAg
IFFDaGFyUmVmIG9wZXJhdG9yPShjaGFyIGMgKSB7IHMucmVmKHApPWM7IHJldHVybiAqdGhpczsg
fQogICAgUUNoYXJSZWYgb3BlcmF0b3I9KHVjaGFyIGMgKSB7IHMucmVmKHApPWM7IHJldHVybiAq
dGhpczsgfQogICAgUUNoYXJSZWYgb3BlcmF0b3I9KFFDaGFyIGMgKSB7IHMucmVmKHApPWM7IHJl
dHVybiAqdGhpczsgfQogICAgUUNoYXJSZWYgb3BlcmF0b3I9KGNvbnN0IFFDaGFyUmVmJiBjICkg
eyBzLnJlZihwKT1jLnVuaWNvZGUoKTsgcmV0dXJuICp0aGlzOyB9CiAgICBRQ2hhclJlZiBvcGVy
YXRvcj0odXNob3J0IHJjICkgeyBzLnJlZihwKT1yYzsgcmV0dXJuICp0aGlzOyB9CiAgICBRQ2hh
clJlZiBvcGVyYXRvcj0oc2hvcnQgcmMgKSB7IHMucmVmKHApPXJjOyByZXR1cm4gKnRoaXM7IH0K
ICAgIFFDaGFyUmVmIG9wZXJhdG9yPSh1aW50IHJjICkgeyBzLnJlZihwKT1yYzsgcmV0dXJuICp0
aGlzOyB9CiAgICBRQ2hhclJlZiBvcGVyYXRvcj0oaW50IHJjICkgeyBzLnJlZihwKT1yYzsgcmV0
dXJuICp0aGlzOyB9CgogICAgb3BlcmF0b3IgUUNoYXIgKCkgY29uc3QgeyByZXR1cm4gcy5jb25z
dHJlZihwKTsgfQoKICAgICAKICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gdW5pY29k
ZSgpPT0wOyB9CiAgICBib29sIGlzUHJpbnQoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHAp
LmlzUHJpbnQoKTsgfQogICAgYm9vbCBpc1B1bmN0KCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJl
ZihwKS5pc1B1bmN0KCk7IH0KICAgIGJvb2wgaXNTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIHMuY29u
c3RyZWYocCkuaXNTcGFjZSgpOyB9CiAgICBib29sIGlzTWFyaygpIGNvbnN0IHsgcmV0dXJuIHMu
Y29uc3RyZWYocCkuaXNNYXJrKCk7IH0KICAgIGJvb2wgaXNMZXR0ZXIoKSBjb25zdCB7IHJldHVy
biBzLmNvbnN0cmVmKHApLmlzTGV0dGVyKCk7IH0KICAgIGJvb2wgaXNOdW1iZXIoKSBjb25zdCB7
IHJldHVybiBzLmNvbnN0cmVmKHApLmlzTnVtYmVyKCk7IH0KICAgIGJvb2wgaXNMZXR0ZXJPck51
bWJlcigpIHsgcmV0dXJuIHMuY29uc3RyZWYocCkuaXNMZXR0ZXJPck51bWJlcigpOyB9CiAgICBi
b29sIGlzRGlnaXQoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmlzRGlnaXQoKTsgfQoK
ICAgIGludCBkaWdpdFZhbHVlKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5kaWdpdFZh
bHVlKCk7IH0KICAgIFFDaGFyIGxvd2VyKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5s
b3dlcigpOyB9CiAgICBRQ2hhciB1cHBlcigpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCku
dXBwZXIoKTsgfQoKICAgIFFDaGFyOjpDYXRlZ29yeSBjYXRlZ29yeSgpIGNvbnN0IHsgcmV0dXJu
IHMuY29uc3RyZWYocCkuY2F0ZWdvcnkoKTsgfQogICAgUUNoYXI6OkRpcmVjdGlvbiBkaXJlY3Rp
b24oKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmRpcmVjdGlvbigpOyB9CiAgICBRQ2hh
cjo6Sm9pbmluZyBqb2luaW5nKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5qb2luaW5n
KCk7IH0KICAgIGJvb2wgbWlycm9yZWQoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLm1p
cnJvcmVkKCk7IH0KICAgIFFDaGFyIG1pcnJvcmVkQ2hhcigpIGNvbnN0IHsgcmV0dXJuIHMuY29u
c3RyZWYocCkubWlycm9yZWRDaGFyKCk7IH0KICAgIGNvbnN0IFFTdHJpbmcgJmRlY29tcG9zaXRp
b24oKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmRlY29tcG9zaXRpb24oKTsgfQogICAg
UUNoYXI6OkRlY29tcG9zaXRpb24gZGVjb21wb3NpdGlvblRhZygpIGNvbnN0IHsgcmV0dXJuIHMu
Y29uc3RyZWYocCkuZGVjb21wb3NpdGlvblRhZygpOyB9CiAgICB1bnNpZ25lZCBjaGFyIGNvbWJp
bmluZ0NsYXNzKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5jb21iaW5pbmdDbGFzcygp
OyB9CgogICAgIAogICAgdWNoYXIgY2VsbCgpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCku
Y2VsbCgpOyB9CiAgICB1Y2hhciByb3coKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLnJv
dygpOyB9Cgp9OwoKaW5saW5lIFFDaGFyUmVmIFFTdHJpbmc6OmF0KCB1aW50IGkgKSB7IHJldHVy
biBRQ2hhclJlZih0aGlzLGkpOyB9CmlubGluZSBRQ2hhclJlZiBRU3RyaW5nOjpvcGVyYXRvcltd
KCBpbnQgaSApIHsgcmV0dXJuIGF0KCh1aW50KWkpOyB9CgoKY2xhc3MgICBRQ29uc3RTdHJpbmcg
OiBwcml2YXRlIFFTdHJpbmcgewpwdWJsaWM6CiAgICBRQ29uc3RTdHJpbmcoIGNvbnN0IFFDaGFy
KiB1bmljb2RlLCB1aW50IGxlbmd0aCApOwogICAgflFDb25zdFN0cmluZygpOwogICAgY29uc3Qg
UVN0cmluZyYgc3RyaW5nKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KfTsKCgogCgoKCiAgUURh
dGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFTdHJpbmcgJiApOwog
IFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRU3RyaW5nICYgKTsKCgog
CgoKCiAKIAogCiAKIAppbmxpbmUgUVN0cmluZzo6UVN0cmluZygpIDoKICAgIGQoc2hhcmVkX251
bGwgPyBzaGFyZWRfbnVsbCA6IG1ha2VTaGFyZWROdWxsKCkpCnsKICAgIGQtPnJlZigpOwp9CiAK
aW5saW5lIFFTdHJpbmc6On5RU3RyaW5nKCkKewogICAgaWYgKCBkLT5kZXJlZigpICkgewogICAg
ICAgIGlmICggZCA9PSBzaGFyZWRfbnVsbCApCiAgICAgICAgICAgIHNoYXJlZF9udWxsID0gMDsK
ICAgICAgICBkLT5kZWxldGVTZWxmKCk7CiAgICB9Cn0KCmlubGluZSBRU3RyaW5nIFFTdHJpbmc6
OnNlY3Rpb24oIFFDaGFyIHNlcCwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgZmxhZ3MgKSBjb25z
dAp7IHJldHVybiBzZWN0aW9uKFFTdHJpbmcoc2VwKSwgc3RhcnQsIGVuZCwgZmxhZ3MpOyB9Cgpp
bmxpbmUgUVN0cmluZyBRU3RyaW5nOjpzZWN0aW9uKCBjaGFyIHNlcCwgaW50IHN0YXJ0LCBpbnQg
ZW5kLCBpbnQgZmxhZ3MgKSBjb25zdAp7IHJldHVybiBzZWN0aW9uKFFDaGFyKHNlcCksIHN0YXJ0
LCBlbmQsIGZsYWdzKTsgfQoKCmlubGluZSBRU3RyaW5nIFFTdHJpbmc6OnNlY3Rpb24oIGNvbnN0
IGNoYXIgKmluX3NlcCwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgZmxhZ3MgKSBjb25zdAp7IHJl
dHVybiBzZWN0aW9uKFFTdHJpbmcoaW5fc2VwKSwgc3RhcnQsIGVuZCwgZmxhZ3MpOyB9CgoKaW5s
aW5lIFFTdHJpbmcgJlFTdHJpbmc6Om9wZXJhdG9yPSggUUNoYXIgYyApCnsgcmV0dXJuICp0aGlz
ID0gUVN0cmluZyhjKTsgfQoKaW5saW5lIFFTdHJpbmcgJlFTdHJpbmc6Om9wZXJhdG9yPSggY2hh
ciBjICkKeyByZXR1cm4gKnRoaXMgPSBRU3RyaW5nKFFDaGFyKGMpKTsgfQoKaW5saW5lIGJvb2wg
UVN0cmluZzo6aXNOdWxsKCkgY29uc3QKeyByZXR1cm4gdW5pY29kZSgpID09IDA7IH0KCmlubGlu
ZSBib29sIFFTdHJpbmc6Om9wZXJhdG9yISgpIGNvbnN0CnsgcmV0dXJuIGlzTnVsbCgpOyB9Cgpp
bmxpbmUgdWludCBRU3RyaW5nOjpsZW5ndGgoKSBjb25zdAp7IHJldHVybiBkLT5sZW47IH0KCmlu
bGluZSBib29sIFFTdHJpbmc6OmlzRW1wdHkoKSBjb25zdAp7IHJldHVybiBsZW5ndGgoKSA9PSAw
OyB9CgppbmxpbmUgUVN0cmluZyBRU3RyaW5nOjpjb3B5KCkgY29uc3QKeyByZXR1cm4gUVN0cmlu
ZyggKnRoaXMgKTsgfQoKaW5saW5lIFFTdHJpbmcgJlFTdHJpbmc6OnByZXBlbmQoIGNvbnN0IFFT
dHJpbmcgJiBzICkKeyByZXR1cm4gaW5zZXJ0KDAscyk7IH0KCmlubGluZSBRU3RyaW5nICZRU3Ry
aW5nOjpwcmVwZW5kKCBRQ2hhciBjICkKeyByZXR1cm4gaW5zZXJ0KDAsYyk7IH0KCmlubGluZSBR
U3RyaW5nICZRU3RyaW5nOjpwcmVwZW5kKCBjaGFyIGMgKQp7IHJldHVybiBpbnNlcnQoMCxjKTsg
fQoKaW5saW5lIFFTdHJpbmcgJlFTdHJpbmc6OmFwcGVuZCggY29uc3QgUVN0cmluZyAmIHMgKQp7
IHJldHVybiBvcGVyYXRvcis9KHMpOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6YXBwZW5k
KCBRQ2hhciBjICkKeyByZXR1cm4gb3BlcmF0b3IrPShjKTsgfQoKaW5saW5lIFFTdHJpbmcgJlFT
dHJpbmc6OmFwcGVuZCggY2hhciBjICkKeyByZXR1cm4gb3BlcmF0b3IrPShjKTsgfQoKaW5saW5l
IFFTdHJpbmcgJlFTdHJpbmc6OnNldE51bSggc2hvcnQgbiwgaW50IGJhc2UgKQp7IHJldHVybiBz
ZXROdW0oKGxvbmcpbiwgYmFzZSk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpzZXROdW0o
IHVzaG9ydCBuLCBpbnQgYmFzZSApCnsgcmV0dXJuIHNldE51bSgodWxvbmcpbiwgYmFzZSk7IH0K
CmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpzZXROdW0oIGludCBuLCBpbnQgYmFzZSApCnsgcmV0
dXJuIHNldE51bSgobG9uZyluLCBiYXNlKTsgfQoKaW5saW5lIFFTdHJpbmcgJlFTdHJpbmc6OnNl
dE51bSggdWludCBuLCBpbnQgYmFzZSApCnsgcmV0dXJuIHNldE51bSgodWxvbmcpbiwgYmFzZSk7
IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpzZXROdW0oIGZsb2F0IG4sIGNoYXIgZiwgaW50
IHByZWMgKQp7IHJldHVybiBzZXROdW0oKGRvdWJsZSluLGYscHJlYyk7IH0KCmlubGluZSBRU3Ry
aW5nIFFTdHJpbmc6OmFyZyhpbnQgYSwgaW50IGZpZWxkd2lkdGgsIGludCBiYXNlKSBjb25zdAp7
IHJldHVybiBhcmcoKGxvbmcpYSwgZmllbGR3aWR0aCwgYmFzZSk7IH0KCmlubGluZSBRU3RyaW5n
IFFTdHJpbmc6OmFyZyh1aW50IGEsIGludCBmaWVsZHdpZHRoLCBpbnQgYmFzZSkgY29uc3QKeyBy
ZXR1cm4gYXJnKCh1bG9uZylhLCBmaWVsZHdpZHRoLCBiYXNlKTsgfQoKaW5saW5lIFFTdHJpbmcg
UVN0cmluZzo6YXJnKHNob3J0IGEsIGludCBmaWVsZHdpZHRoLCBpbnQgYmFzZSkgY29uc3QKeyBy
ZXR1cm4gYXJnKChsb25nKWEsIGZpZWxkd2lkdGgsIGJhc2UpOyB9CgppbmxpbmUgUVN0cmluZyBR
U3RyaW5nOjphcmcodXNob3J0IGEsIGludCBmaWVsZHdpZHRoLCBpbnQgYmFzZSkgY29uc3QKeyBy
ZXR1cm4gYXJnKCh1bG9uZylhLCBmaWVsZHdpZHRoLCBiYXNlKTsgfQoKaW5saW5lIGludCBRU3Ry
aW5nOjpmaW5kKCBjaGFyIGMsIGludCBpbmRleCwgYm9vbCBjcyApIGNvbnN0CnsgcmV0dXJuIGZp
bmQoUUNoYXIoYyksIGluZGV4LCBjcyk7IH0KCmlubGluZSBpbnQgUVN0cmluZzo6ZmluZFJldigg
Y2hhciBjLCBpbnQgaW5kZXgsIGJvb2wgY3MpIGNvbnN0CnsgcmV0dXJuIGZpbmRSZXYoIFFDaGFy
KGMpLCBpbmRleCwgY3MgKTsgfQoKCgppbmxpbmUgaW50IFFTdHJpbmc6OmZpbmQoIGNvbnN0IGNo
YXIqIHN0ciwgaW50IGluZGV4ICkgY29uc3QKeyByZXR1cm4gZmluZChRU3RyaW5nOjpmcm9tTGF0
aW4xKHN0ciksIGluZGV4KTsgfQoKaW5saW5lIGludCBRU3RyaW5nOjpmaW5kUmV2KCBjb25zdCBj
aGFyKiBzdHIsIGludCBpbmRleCApIGNvbnN0CnsgcmV0dXJuIGZpbmRSZXYoUVN0cmluZzo6ZnJv
bUxhdGluMShzdHIpLCBpbmRleCk7IH0KCgoKIAoKCgogIGJvb2wgb3BlcmF0b3IhPSggY29uc3Qg
UVN0cmluZyAmczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiAgYm9vbCBvcGVyYXRvcjwoIGNvbnN0
IFFTdHJpbmcgJnMxLCBjb25zdCBRU3RyaW5nICZzMiApOwogIGJvb2wgb3BlcmF0b3I8PSggY29u
c3QgUVN0cmluZyAmczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiAgYm9vbCBvcGVyYXRvcj09KCBj
b25zdCBRU3RyaW5nICZzMSwgY29uc3QgUVN0cmluZyAmczIgKTsKICBib29sIG9wZXJhdG9yPigg
Y29uc3QgUVN0cmluZyAmczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiAgYm9vbCBvcGVyYXRvcj49
KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgUVN0cmluZyAmczIgKTsKCiAgYm9vbCBvcGVyYXRv
ciE9KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKTsKICBib29sIG9wZXJhdG9y
PCggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICk7CiAgYm9vbCBvcGVyYXRvcjw9
KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKTsKICBib29sIG9wZXJhdG9yPT0o
IGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApOwogIGJvb2wgb3BlcmF0b3I+KCBj
b25zdCBRU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKTsKICBib29sIG9wZXJhdG9yPj0oIGNv
bnN0IFFTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApOwogIGJvb2wgb3BlcmF0b3IhPSggY29u
c3QgY2hhciAqczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiAgYm9vbCBvcGVyYXRvcjwoIGNvbnN0
IGNoYXIgKnMxLCBjb25zdCBRU3RyaW5nICZzMiApOwogIGJvb2wgb3BlcmF0b3I8PSggY29uc3Qg
Y2hhciAqczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBj
aGFyICpzMSwgY29uc3QgUVN0cmluZyAmczIgKTsKIAogIGJvb2wgb3BlcmF0b3I+PSggY29uc3Qg
Y2hhciAqczEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CgoKICBpbmxpbmUgY29uc3QgUVN0cmluZyBv
cGVyYXRvcisoIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBRU3RyaW5nICZzMiApCnsKICAgIFFT
dHJpbmcgdG1wKCBzMSApOwogICAgdG1wICs9IHMyOwogICAgcmV0dXJuIHRtcDsKfQoKCiAgaW5s
aW5lIGNvbnN0IFFTdHJpbmcgb3BlcmF0b3IrKCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgY2hh
ciAqczIgKQp7CiAgICBRU3RyaW5nIHRtcCggczEgKTsKICAgIHRtcCArPSBRU3RyaW5nOjpmcm9t
TGF0aW4xKHMyKTsKICAgIHJldHVybiB0bXA7Cn0KCiAgaW5saW5lIGNvbnN0IFFTdHJpbmcgb3Bl
cmF0b3IrKCBjb25zdCBjaGFyICpzMSwgY29uc3QgUVN0cmluZyAmczIgKQp7CiAgICBRU3RyaW5n
IHRtcCA9IFFTdHJpbmc6OmZyb21MYXRpbjEoIHMxICk7CiAgICB0bXAgKz0gczI7CiAgICByZXR1
cm4gdG1wOwp9CgoKICBpbmxpbmUgY29uc3QgUVN0cmluZyBvcGVyYXRvcisoIGNvbnN0IFFTdHJp
bmcgJnMxLCBRQ2hhciBjMiApCnsKICAgIFFTdHJpbmcgdG1wKCBzMSApOwogICAgdG1wICs9IGMy
OwogICAgcmV0dXJuIHRtcDsKfQoKICBpbmxpbmUgY29uc3QgUVN0cmluZyBvcGVyYXRvcisoIGNv
bnN0IFFTdHJpbmcgJnMxLCBjaGFyIGMyICkKewogICAgUVN0cmluZyB0bXAoIHMxICk7CiAgICB0
bXAgKz0gYzI7CiAgICByZXR1cm4gdG1wOwp9CgogIGlubGluZSBjb25zdCBRU3RyaW5nIG9wZXJh
dG9yKyggUUNoYXIgYzEsIGNvbnN0IFFTdHJpbmcgJnMyICkKewogICAgUVN0cmluZyB0bXA7CiAg
ICB0bXAgKz0gYzE7CiAgICB0bXAgKz0gczI7CiAgICByZXR1cm4gdG1wOwp9CgogIGlubGluZSBj
b25zdCBRU3RyaW5nIG9wZXJhdG9yKyggY2hhciBjMSwgY29uc3QgUVN0cmluZyAmczIgKQp7CiAg
ICBRU3RyaW5nIHRtcDsKICAgIHRtcCArPSBjMTsKICAgIHRtcCArPSBzMjsKICAgIHJldHVybiB0
bXA7Cn0KCgoKCgoKCgoKCiMgNDQgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xd2luZG93ZGVmcy5o
IiAyCgojIDEgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xbmFtZXNwYWNlLmgiIDEKIAoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmNsYXNzIFFDb2xvcjsKY2xhc3Mg
UUN1cnNvcjsKCgpjbGFzcyAgIFF0IHsKcHVibGljOgogICAgc3RhdGljIGNvbnN0ICBRQ29sb3Ig
JiBjb2xvcjA7CiAgICBzdGF0aWMgY29uc3QgIFFDb2xvciAmIGNvbG9yMTsKICAgIHN0YXRpYyBj
b25zdCAgUUNvbG9yICYgYmxhY2s7CiAgICBzdGF0aWMgY29uc3QgIFFDb2xvciAmIHdoaXRlOwog
ICAgc3RhdGljIGNvbnN0ICBRQ29sb3IgJiBkYXJrR3JheTsKICAgIHN0YXRpYyBjb25zdCAgUUNv
bG9yICYgZ3JheTsKICAgIHN0YXRpYyBjb25zdCAgUUNvbG9yICYgbGlnaHRHcmF5OwogICAgc3Rh
dGljIGNvbnN0ICBRQ29sb3IgJiByZWQ7CiAgICBzdGF0aWMgY29uc3QgIFFDb2xvciAmIGdyZWVu
OwogICAgc3RhdGljIGNvbnN0ICBRQ29sb3IgJiBibHVlOwogICAgc3RhdGljIGNvbnN0ICBRQ29s
b3IgJiBjeWFuOwogICAgc3RhdGljIGNvbnN0ICBRQ29sb3IgJiBtYWdlbnRhOwogICAgc3RhdGlj
IGNvbnN0ICBRQ29sb3IgJiB5ZWxsb3c7CiAgICBzdGF0aWMgY29uc3QgIFFDb2xvciAmIGRhcmtS
ZWQ7CiAgICBzdGF0aWMgY29uc3QgIFFDb2xvciAmIGRhcmtHcmVlbjsKICAgIHN0YXRpYyBjb25z
dCAgUUNvbG9yICYgZGFya0JsdWU7CiAgICBzdGF0aWMgY29uc3QgIFFDb2xvciAmIGRhcmtDeWFu
OwogICAgc3RhdGljIGNvbnN0ICBRQ29sb3IgJiBkYXJrTWFnZW50YTsKICAgIHN0YXRpYyBjb25z
dCAgUUNvbG9yICYgZGFya1llbGxvdzsKCiAgICAgCiAgICBlbnVtIEJ1dHRvblN0YXRlIHsJCQkJ
IAoJTm9CdXR0b24JPSAweDAwMDAsCglMZWZ0QnV0dG9uCT0gMHgwMDAxLAoJUmlnaHRCdXR0b24J
PSAweDAwMDIsCglNaWRCdXR0b24JPSAweDAwMDQsCglNb3VzZUJ1dHRvbk1hc2sgPSAweDAwMDcs
CglTaGlmdEJ1dHRvbgk9IDB4MDEwMCwKCUNvbnRyb2xCdXR0b24gICA9IDB4MDIwMCwKCUFsdEJ1
dHRvbgk9IDB4MDQwMCwKCU1ldGFCdXR0b24JPSAweDA4MDAsCglLZXlCdXR0b25NYXNrCT0gMHgw
ZjAwLAoJS2V5cGFkCQk9IDB4NDAwMAogICAgfTsKCiAgICAgCiAgICAgCiAgICBlbnVtIE9yaWVu
dGF0aW9uIHsKICAgICAgICBIb3Jpem9udGFsID0gMCwKCVZlcnRpY2FsCiAgICB9OwoKICAgICAK
ICAgICAKICAgICAKCiAgICAgCiAgICBlbnVtIEFsaWdubWVudEZsYWdzIHsKCUFsaWduQXV0bwkJ
PSAweDAwMDAsIAkgCglBbGlnbkxlZnQJCT0gMHgwMDAxLAoJQWxpZ25SaWdodAkJPSAweDAwMDIs
CglBbGlnbkhDZW50ZXIJCT0gMHgwMDA0LAoJQWxpZ25KdXN0aWZ5CQk9IDB4MDAwOCwKCUFsaWdu
SG9yaXpvbnRhbF9NYXNrCT0gQWxpZ25MZWZ0IHwgQWxpZ25SaWdodCB8IEFsaWduSENlbnRlciB8
IEFsaWduSnVzdGlmeSwKCUFsaWduVG9wCQk9IDB4MDAxMCwKCUFsaWduQm90dG9tCQk9IDB4MDAy
MCwKCUFsaWduVkNlbnRlcgkJPSAweDAwNDAsCglBbGlnblZlcnRpY2FsX01hc2sgCT0gQWxpZ25U
b3AgfCBBbGlnbkJvdHRvbSB8IEFsaWduVkNlbnRlciwKCUFsaWduQ2VudGVyCQk9IEFsaWduVkNl
bnRlciB8IEFsaWduSENlbnRlcgogICAgfTsKCiAgICAgCiAgICBlbnVtIFRleHRGbGFncyB7CglT
aW5nbGVMaW5lCT0gMHgwMDgwLAkJIAoJRG9udENsaXAJPSAweDAxMDAsCglFeHBhbmRUYWJzCT0g
MHgwMjAwLAoJU2hvd1ByZWZpeAk9IDB4MDQwMCwKCVdvcmRCcmVhawk9IDB4MDgwMCwKCUJyZWFr
QW55d2hlcmUgPSAweDEwMDAsCglEb250UHJpbnQJPSAweDIwMDAsCQkgCglOb0FjY2VsID0gMHg0
MDAwCiAgICB9OwoKICAgICAKICAgIHR5cGVkZWYgdWludCBXU3RhdGU7CgogICAgIAogICAgZW51
bSBXaWRnZXRTdGF0ZSB7CglXU3RhdGVfQ3JlYXRlZAkJPSAweDAwMDAwMDAxLAoJV1N0YXRlX0Rp
c2FibGVkCQk9IDB4MDAwMDAwMDIsCglXU3RhdGVfVmlzaWJsZQkJPSAweDAwMDAwMDA0LAoJV1N0
YXRlX0ZvcmNlSGlkZQk9IDB4MDAwMDAwMDgsCglXU3RhdGVfT3duQ3Vyc29yCT0gMHgwMDAwMDAx
MCwKCVdTdGF0ZV9Nb3VzZVRyYWNraW5nCT0gMHgwMDAwMDAyMCwKCVdTdGF0ZV9Db21wcmVzc0tl
eXMJPSAweDAwMDAwMDQwLAoJV1N0YXRlX0Jsb2NrVXBkYXRlcwk9IDB4MDAwMDAwODAsCglXU3Rh
dGVfSW5QYWludEV2ZW50CT0gMHgwMDAwMDEwMCwKCVdTdGF0ZV9SZXBhcmVudGVkCT0gMHgwMDAw
MDIwMCwKCVdTdGF0ZV9Db25maWdQZW5kaW5nCT0gMHgwMDAwMDQwMCwKCVdTdGF0ZV9SZXNpemVk
CQk9IDB4MDAwMDA4MDAsCglXU3RhdGVfQXV0b01hc2sJCT0gMHgwMDAwMTAwMCwKCVdTdGF0ZV9Q
b2xpc2hlZAkJPSAweDAwMDAyMDAwLAoJV1N0YXRlX0RORAkJPSAweDAwMDA0MDAwLAoJV1N0YXRl
X1Jlc2VydmVkMAk9IDB4MDAwMDgwMDAsCglXU3RhdGVfUmVzZXJ2ZWQxCT0gMHgwMDAxMDAwMCwK
CVdTdGF0ZV9SZXNlcnZlZDIJPSAweDAwMDIwMDAwLAoJV1N0YXRlX1Jlc2VydmVkMwk9IDB4MDAw
NDAwMDAsCglXU3RhdGVfTWF4aW1pemVkCT0gMHgwMDA4MDAwMCwKCVdTdGF0ZV9NaW5pbWl6ZWQJ
PSAweDAwMTAwMDAwLAoJV1N0YXRlX0ZvcmNlRGlzYWJsZWQJPSAweDAwMjAwMDAwLAoJV1N0YXRl
X0V4cG9zZWQJCT0gMHgwMDQwMDAwMCwKCVdTdGF0ZV9IYXNNb3VzZQkJPSAweDAwODAwMDAwCiAg
ICB9OwoKICAgICAKICAgIHR5cGVkZWYgdWludCBXRmxhZ3M7CgogICAgIAogICAgZW51bSBXaWRn
ZXRGbGFncyB7CglXVHlwZV9Ub3BMZXZlbAkJPSAweDAwMDAwMDAxLAkgCglXVHlwZV9EaWFsb2cJ
CT0gMHgwMDAwMDAwMiwKCVdUeXBlX1BvcHVwCQk9IDB4MDAwMDAwMDQsCglXVHlwZV9EZXNrdG9w
CQk9IDB4MDAwMDAwMDgsCglXVHlwZV9NYXNrCQk9IDB4MDAwMDAwMGYsCgoJV1N0eWxlX0N1c3Rv
bWl6ZQk9IDB4MDAwMDAwMTAsCSAKCVdTdHlsZV9Ob3JtYWxCb3JkZXIJPSAweDAwMDAwMDIwLAoJ
V1N0eWxlX0RpYWxvZ0JvcmRlcgk9IDB4MDAwMDAwNDAsICAKCVdTdHlsZV9Ob0JvcmRlcgkJPSAw
eDAwMDAyMDAwLAoJV1N0eWxlX1RpdGxlCQk9IDB4MDAwMDAwODAsCglXU3R5bGVfU3lzTWVudQkJ
PSAweDAwMDAwMTAwLAoJV1N0eWxlX01pbmltaXplCQk9IDB4MDAwMDAyMDAsCglXU3R5bGVfTWF4
aW1pemUJCT0gMHgwMDAwMDQwMCwKCVdTdHlsZV9NaW5NYXgJCT0gV1N0eWxlX01pbmltaXplIHwg
V1N0eWxlX01heGltaXplLAoJV1N0eWxlX1Rvb2wJCT0gMHgwMDAwMDgwMCwKCVdTdHlsZV9TdGF5
c09uVG9wCT0gMHgwMDAwMTAwMCwKCVdTdHlsZV9Db250ZXh0SGVscAk9IDB4MDAwMDQwMDAsCglX
U3R5bGVfUmVzZXJ2ZWQJCT0gMHgwMDAwODAwMCwKCVdTdHlsZV9NYXNrCQk9IDB4MDAwMGZmZjAs
CgoJV0Rlc3RydWN0aXZlQ2xvc2UJPSAweDAwMDEwMDAwLAkgCglXUGFpbnREZXNrdG9wCQk9IDB4
MDAwMjAwMDAsCglXUGFpbnRVbmNsaXBwZWQJCT0gMHgwMDA0MDAwMCwKCVdQYWludENsZXZlcgkJ
PSAweDAwMDgwMDAwLAoJV1Jlc2l6ZU5vRXJhc2UJCT0gMHgwMDEwMDAwMCwKCVdNb3VzZU5vTWFz
awkJPSAweDAwMjAwMDAwLAoJV1N0YXRpY0NvbnRlbnRzCQk9IDB4MDA0MDAwMDAsCglXUmVwYWlu
dE5vRXJhc2UJCT0gMHgwMDgwMDAwMCwKCglXWDExQnlwYXNzV00JCT0gMHgwMTAwMDAwMCwKCVdX
aW5Pd25EQwkJPSAweDAwMDAwMDAwLAoKCgoKCVdHcm91cExlYWRlciAJCT0gMHgwMjAwMDAwMCwK
CVdTaG93TW9kYWwgCSAgICAgICAJPSAweDA0MDAwMDAwLAoJV05vTW91c2VQcm9wYWdhdGlvbgk9
IDB4MDgwMDAwMDAsCglXU3ViV2luZG93ICAgICAgICAgICAgICA9IDB4MTAwMDAwMDAKCgksCglX
Tm9ydGhXZXN0R3Jhdml0eQk9IFdTdGF0aWNDb250ZW50cywKCVdUeXBlX01vZGFsCQk9IFdUeXBl
X0RpYWxvZyB8IFdTaG93TW9kYWwsCglXU3R5bGVfRGlhbG9nIAkJPSBXVHlwZV9EaWFsb2csCglX
U3R5bGVfTm9Cb3JkZXJFeAk9IFdTdHlsZV9Ob0JvcmRlcgoKICAgIH07CgogICAgIAogICAgIAog
ICAgIAoKICAgIGVudW0gSW1hZ2VDb252ZXJzaW9uRmxhZ3MgewoJQ29sb3JNb2RlX01hc2sJCT0g
MHgwMDAwMDAwMywKCUF1dG9Db2xvcgkJPSAweDAwMDAwMDAwLAoJQ29sb3JPbmx5CQk9IDB4MDAw
MDAwMDMsCglNb25vT25seQkJPSAweDAwMDAwMDAyLAoJIAoKCUFscGhhRGl0aGVyX01hc2sJPSAw
eDAwMDAwMDBjLAoJVGhyZXNob2xkQWxwaGFEaXRoZXIJPSAweDAwMDAwMDAwLAoJT3JkZXJlZEFs
cGhhRGl0aGVyCT0gMHgwMDAwMDAwNCwKCURpZmZ1c2VBbHBoYURpdGhlcgk9IDB4MDAwMDAwMDgs
CglOb0FscGhhCQkJPSAweDAwMDAwMDBjLCAgCgoJRGl0aGVyX01hc2sJCT0gMHgwMDAwMDAzMCwK
CURpZmZ1c2VEaXRoZXIJCT0gMHgwMDAwMDAwMCwKCU9yZGVyZWREaXRoZXIJCT0gMHgwMDAwMDAx
MCwKCVRocmVzaG9sZERpdGhlcgkJPSAweDAwMDAwMDIwLAoJIAoKCURpdGhlck1vZGVfTWFzawkJ
PSAweDAwMDAwMGMwLAoJQXV0b0RpdGhlcgkJPSAweDAwMDAwMDAwLAoJUHJlZmVyRGl0aGVyCQk9
IDB4MDAwMDAwNDAsCglBdm9pZERpdGhlcgkJPSAweDAwMDAwMDgwCiAgICB9OwoKICAgICAKICAg
IGVudW0gQkdNb2RlCXsJCQkJIAoJVHJhbnNwYXJlbnRNb2RlLAoJT3BhcXVlTW9kZQogICAgfTsK
CgogICAgIAogICAgZW51bSBQYWludFVuaXQgewkJCQkgCglQaXhlbFVuaXQsCglMb01ldHJpY1Vu
aXQsICAKCUhpTWV0cmljVW5pdCwgIAoJTG9FbmdsaXNoVW5pdCwgIAoJSGlFbmdsaXNoVW5pdCwg
IAoJVHdpcHNVbml0ICAKICAgIH07CgoKICAgICAKCgoKCgoKICAgIGVudW0gR1VJU3R5bGUgewoJ
TWFjU3R5bGUsICAKCVdpbmRvd3NTdHlsZSwKCVdpbjNTdHlsZSwgIAoJUE1TdHlsZSwgIAoJTW90
aWZTdHlsZQogICAgfTsKCgogICAgIAogICAgZW51bSBNb2RpZmllciB7CQkgCglTSElGVCAgICAg
ICAgID0gMHgwMDIwMDAwMCwKCUNUUkwgICAgICAgICAgPSAweDAwNDAwMDAwLAoJQUxUICAgICAg
ICAgICA9IDB4MDA4MDAwMDAsCglNT0RJRklFUl9NQVNLID0gMHgwMGUwMDAwMCwKCVVOSUNPREVf
QUNDRUwgPSAweDEwMDAwMDAwLAoKCUFTQ0lJX0FDQ0VMID0gVU5JQ09ERV9BQ0NFTCAgCiAgICB9
OwoKICAgICAKICAgIGVudW0gS2V5IHsKCUtleV9Fc2NhcGUgPSAweDEwMDAsCQkgCglLZXlfVGFi
ID0gMHgxMDAxLAoJS2V5X0JhY2t0YWIgPSAweDEwMDIsIEtleV9CYWNrVGFiID0gS2V5X0JhY2t0
YWIsCglLZXlfQmFja3NwYWNlID0gMHgxMDAzLCBLZXlfQmFja1NwYWNlID0gS2V5X0JhY2tzcGFj
ZSwKCUtleV9SZXR1cm4gPSAweDEwMDQsCglLZXlfRW50ZXIgPSAweDEwMDUsCglLZXlfSW5zZXJ0
ID0gMHgxMDA2LAoJS2V5X0RlbGV0ZSA9IDB4MTAwNywKCUtleV9QYXVzZSA9IDB4MTAwOCwKCUtl
eV9QcmludCA9IDB4MTAwOSwKCUtleV9TeXNSZXEgPSAweDEwMGEsCglLZXlfSG9tZSA9IDB4MTAx
MCwJCSAKCUtleV9FbmQgPSAweDEwMTEsCglLZXlfTGVmdCA9IDB4MTAxMiwKCUtleV9VcCA9IDB4
MTAxMywKCUtleV9SaWdodCA9IDB4MTAxNCwKCUtleV9Eb3duID0gMHgxMDE1LAoJS2V5X1ByaW9y
ID0gMHgxMDE2LCBLZXlfUGFnZVVwID0gS2V5X1ByaW9yLAoJS2V5X05leHQgPSAweDEwMTcsIEtl
eV9QYWdlRG93biA9IEtleV9OZXh0LAoJS2V5X1NoaWZ0ID0gMHgxMDIwLAkJIAoJS2V5X0NvbnRy
b2wgPSAweDEwMjEsCglLZXlfTWV0YSA9IDB4MTAyMiwKCUtleV9BbHQgPSAweDEwMjMsCglLZXlf
Q2Fwc0xvY2sgPSAweDEwMjQsCglLZXlfTnVtTG9jayA9IDB4MTAyNSwKCUtleV9TY3JvbGxMb2Nr
ID0gMHgxMDI2LAoJS2V5X0YxID0gMHgxMDMwLAkJIAoJS2V5X0YyID0gMHgxMDMxLAoJS2V5X0Yz
ID0gMHgxMDMyLAoJS2V5X0Y0ID0gMHgxMDMzLAoJS2V5X0Y1ID0gMHgxMDM0LAoJS2V5X0Y2ID0g
MHgxMDM1LAoJS2V5X0Y3ID0gMHgxMDM2LAoJS2V5X0Y4ID0gMHgxMDM3LAoJS2V5X0Y5ID0gMHgx
MDM4LAoJS2V5X0YxMCA9IDB4MTAzOSwKCUtleV9GMTEgPSAweDEwM2EsCglLZXlfRjEyID0gMHgx
MDNiLAoJS2V5X0YxMyA9IDB4MTAzYywKCUtleV9GMTQgPSAweDEwM2QsCglLZXlfRjE1ID0gMHgx
MDNlLAoJS2V5X0YxNiA9IDB4MTAzZiwKCUtleV9GMTcgPSAweDEwNDAsCglLZXlfRjE4ID0gMHgx
MDQxLAoJS2V5X0YxOSA9IDB4MTA0MiwKCUtleV9GMjAgPSAweDEwNDMsCglLZXlfRjIxID0gMHgx
MDQ0LAoJS2V5X0YyMiA9IDB4MTA0NSwKCUtleV9GMjMgPSAweDEwNDYsCglLZXlfRjI0ID0gMHgx
MDQ3LAoJS2V5X0YyNSA9IDB4MTA0OCwJCSAKCUtleV9GMjYgPSAweDEwNDksCglLZXlfRjI3ID0g
MHgxMDRhLAoJS2V5X0YyOCA9IDB4MTA0YiwKCUtleV9GMjkgPSAweDEwNGMsCglLZXlfRjMwID0g
MHgxMDRkLAoJS2V5X0YzMSA9IDB4MTA0ZSwKCUtleV9GMzIgPSAweDEwNGYsCglLZXlfRjMzID0g
MHgxMDUwLAoJS2V5X0YzNCA9IDB4MTA1MSwKCUtleV9GMzUgPSAweDEwNTIsCglLZXlfU3VwZXJf
TCA9IDB4MTA1MywgCQkgCglLZXlfU3VwZXJfUiA9IDB4MTA1NCwKCUtleV9NZW51ID0gMHgxMDU1
LAoJS2V5X0h5cGVyX0wgPSAweDEwNTYsCglLZXlfSHlwZXJfUiA9IDB4MTA1NywKCUtleV9IZWxw
ID0gMHgxMDU4LAoJS2V5X0RpcmVjdGlvbl9MID0gMHgxMDU5LAoJS2V5X0RpcmVjdGlvbl9SID0g
MHgxMDYwLAoJS2V5X1NwYWNlID0gMHgyMCwJCSAKCUtleV9BbnkgPSBLZXlfU3BhY2UsCglLZXlf
RXhjbGFtID0gMHgyMSwKCUtleV9RdW90ZURibCA9IDB4MjIsCglLZXlfTnVtYmVyU2lnbiA9IDB4
MjMsCglLZXlfRG9sbGFyID0gMHgyNCwKCUtleV9QZXJjZW50ID0gMHgyNSwKCUtleV9BbXBlcnNh
bmQgPSAweDI2LAoJS2V5X0Fwb3N0cm9waGUgPSAweDI3LAoJS2V5X1BhcmVuTGVmdCA9IDB4Mjgs
CglLZXlfUGFyZW5SaWdodCA9IDB4MjksCglLZXlfQXN0ZXJpc2sgPSAweDJhLAoJS2V5X1BsdXMg
PSAweDJiLAoJS2V5X0NvbW1hID0gMHgyYywKCUtleV9NaW51cyA9IDB4MmQsCglLZXlfUGVyaW9k
ID0gMHgyZSwKCUtleV9TbGFzaCA9IDB4MmYsCglLZXlfMCA9IDB4MzAsCglLZXlfMSA9IDB4MzEs
CglLZXlfMiA9IDB4MzIsCglLZXlfMyA9IDB4MzMsCglLZXlfNCA9IDB4MzQsCglLZXlfNSA9IDB4
MzUsCglLZXlfNiA9IDB4MzYsCglLZXlfNyA9IDB4MzcsCglLZXlfOCA9IDB4MzgsCglLZXlfOSA9
IDB4MzksCglLZXlfQ29sb24gPSAweDNhLAoJS2V5X1NlbWljb2xvbiA9IDB4M2IsCglLZXlfTGVz
cyA9IDB4M2MsCglLZXlfRXF1YWwgPSAweDNkLAoJS2V5X0dyZWF0ZXIgPSAweDNlLAoJS2V5X1F1
ZXN0aW9uID0gMHgzZiwKCUtleV9BdCA9IDB4NDAsCglLZXlfQSA9IDB4NDEsCglLZXlfQiA9IDB4
NDIsCglLZXlfQyA9IDB4NDMsCglLZXlfRCA9IDB4NDQsCglLZXlfRSA9IDB4NDUsCglLZXlfRiA9
IDB4NDYsCglLZXlfRyA9IDB4NDcsCglLZXlfSCA9IDB4NDgsCglLZXlfSSA9IDB4NDksCglLZXlf
SiA9IDB4NGEsCglLZXlfSyA9IDB4NGIsCglLZXlfTCA9IDB4NGMsCglLZXlfTSA9IDB4NGQsCglL
ZXlfTiA9IDB4NGUsCglLZXlfTyA9IDB4NGYsCglLZXlfUCA9IDB4NTAsCglLZXlfUSA9IDB4NTEs
CglLZXlfUiA9IDB4NTIsCglLZXlfUyA9IDB4NTMsCglLZXlfVCA9IDB4NTQsCglLZXlfVSA9IDB4
NTUsCglLZXlfViA9IDB4NTYsCglLZXlfVyA9IDB4NTcsCglLZXlfWCA9IDB4NTgsCglLZXlfWSA9
IDB4NTksCglLZXlfWiA9IDB4NWEsCglLZXlfQnJhY2tldExlZnQgPSAweDViLAoJS2V5X0JhY2tz
bGFzaCA9IDB4NWMsCglLZXlfQnJhY2tldFJpZ2h0ID0gMHg1ZCwKCUtleV9Bc2NpaUNpcmN1bSA9
IDB4NWUsCglLZXlfVW5kZXJzY29yZSA9IDB4NWYsCglLZXlfUXVvdGVMZWZ0ID0gMHg2MCwKCUtl
eV9CcmFjZUxlZnQgPSAweDdiLAoJS2V5X0JhciA9IDB4N2MsCglLZXlfQnJhY2VSaWdodCA9IDB4
N2QsCglLZXlfQXNjaWlUaWxkZSA9IDB4N2UsCgoJIAoKCUtleV9ub2JyZWFrc3BhY2UgPSAweDBh
MCwKCUtleV9leGNsYW1kb3duID0gMHgwYTEsCglLZXlfY2VudCA9IDB4MGEyLAoJS2V5X3N0ZXJs
aW5nID0gMHgwYTMsCglLZXlfY3VycmVuY3kgPSAweDBhNCwKCUtleV95ZW4gPSAweDBhNSwKCUtl
eV9icm9rZW5iYXIgPSAweDBhNiwKCUtleV9zZWN0aW9uID0gMHgwYTcsCglLZXlfZGlhZXJlc2lz
ID0gMHgwYTgsCglLZXlfY29weXJpZ2h0ID0gMHgwYTksCglLZXlfb3JkZmVtaW5pbmUgPSAweDBh
YSwKCUtleV9ndWlsbGVtb3RsZWZ0ID0gMHgwYWIsCSAKCUtleV9ub3RzaWduID0gMHgwYWMsCglL
ZXlfaHlwaGVuID0gMHgwYWQsCglLZXlfcmVnaXN0ZXJlZCA9IDB4MGFlLAoJS2V5X21hY3JvbiA9
IDB4MGFmLAoJS2V5X2RlZ3JlZSA9IDB4MGIwLAoJS2V5X3BsdXNtaW51cyA9IDB4MGIxLAoJS2V5
X3R3b3N1cGVyaW9yID0gMHgwYjIsCglLZXlfdGhyZWVzdXBlcmlvciA9IDB4MGIzLAoJS2V5X2Fj
dXRlID0gMHgwYjQsCglLZXlfbXUgPSAweDBiNSwKCUtleV9wYXJhZ3JhcGggPSAweDBiNiwKCUtl
eV9wZXJpb2RjZW50ZXJlZCA9IDB4MGI3LAoJS2V5X2NlZGlsbGEgPSAweDBiOCwKCUtleV9vbmVz
dXBlcmlvciA9IDB4MGI5LAoJS2V5X21hc2N1bGluZSA9IDB4MGJhLAoJS2V5X2d1aWxsZW1vdHJp
Z2h0ID0gMHgwYmIsCSAKCUtleV9vbmVxdWFydGVyID0gMHgwYmMsCglLZXlfb25laGFsZiA9IDB4
MGJkLAoJS2V5X3RocmVlcXVhcnRlcnMgPSAweDBiZSwKCUtleV9xdWVzdGlvbmRvd24gPSAweDBi
ZiwKCUtleV9BZ3JhdmUgPSAweDBjMCwKCUtleV9BYWN1dGUgPSAweDBjMSwKCUtleV9BY2lyY3Vt
ZmxleCA9IDB4MGMyLAoJS2V5X0F0aWxkZSA9IDB4MGMzLAoJS2V5X0FkaWFlcmVzaXMgPSAweDBj
NCwKCUtleV9BcmluZyA9IDB4MGM1LAoJS2V5X0FFID0gMHgwYzYsCglLZXlfQ2NlZGlsbGEgPSAw
eDBjNywKCUtleV9FZ3JhdmUgPSAweDBjOCwKCUtleV9FYWN1dGUgPSAweDBjOSwKCUtleV9FY2ly
Y3VtZmxleCA9IDB4MGNhLAoJS2V5X0VkaWFlcmVzaXMgPSAweDBjYiwKCUtleV9JZ3JhdmUgPSAw
eDBjYywKCUtleV9JYWN1dGUgPSAweDBjZCwKCUtleV9JY2lyY3VtZmxleCA9IDB4MGNlLAoJS2V5
X0lkaWFlcmVzaXMgPSAweDBjZiwKCUtleV9FVEggPSAweDBkMCwKCUtleV9OdGlsZGUgPSAweDBk
MSwKCUtleV9PZ3JhdmUgPSAweDBkMiwKCUtleV9PYWN1dGUgPSAweDBkMywKCUtleV9PY2lyY3Vt
ZmxleCA9IDB4MGQ0LAoJS2V5X090aWxkZSA9IDB4MGQ1LAoJS2V5X09kaWFlcmVzaXMgPSAweDBk
NiwKCUtleV9tdWx0aXBseSA9IDB4MGQ3LAoJS2V5X09vYmxpcXVlID0gMHgwZDgsCglLZXlfVWdy
YXZlID0gMHgwZDksCglLZXlfVWFjdXRlID0gMHgwZGEsCglLZXlfVWNpcmN1bWZsZXggPSAweDBk
YiwKCUtleV9VZGlhZXJlc2lzID0gMHgwZGMsCglLZXlfWWFjdXRlID0gMHgwZGQsCglLZXlfVEhP
Uk4gPSAweDBkZSwKCUtleV9zc2hhcnAgPSAweDBkZiwKCUtleV9hZ3JhdmUgPSAweDBlMCwKCUtl
eV9hYWN1dGUgPSAweDBlMSwKCUtleV9hY2lyY3VtZmxleCA9IDB4MGUyLAoJS2V5X2F0aWxkZSA9
IDB4MGUzLAoJS2V5X2FkaWFlcmVzaXMgPSAweDBlNCwKCUtleV9hcmluZyA9IDB4MGU1LAoJS2V5
X2FlID0gMHgwZTYsCglLZXlfY2NlZGlsbGEgPSAweDBlNywKCUtleV9lZ3JhdmUgPSAweDBlOCwK
CUtleV9lYWN1dGUgPSAweDBlOSwKCUtleV9lY2lyY3VtZmxleCA9IDB4MGVhLAoJS2V5X2VkaWFl
cmVzaXMgPSAweDBlYiwKCUtleV9pZ3JhdmUgPSAweDBlYywKCUtleV9pYWN1dGUgPSAweDBlZCwK
CUtleV9pY2lyY3VtZmxleCA9IDB4MGVlLAoJS2V5X2lkaWFlcmVzaXMgPSAweDBlZiwKCUtleV9l
dGggPSAweDBmMCwKCUtleV9udGlsZGUgPSAweDBmMSwKCUtleV9vZ3JhdmUgPSAweDBmMiwKCUtl
eV9vYWN1dGUgPSAweDBmMywKCUtleV9vY2lyY3VtZmxleCA9IDB4MGY0LAoJS2V5X290aWxkZSA9
IDB4MGY1LAoJS2V5X29kaWFlcmVzaXMgPSAweDBmNiwKCUtleV9kaXZpc2lvbiA9IDB4MGY3LAoJ
S2V5X29zbGFzaCA9IDB4MGY4LAoJS2V5X3VncmF2ZSA9IDB4MGY5LAoJS2V5X3VhY3V0ZSA9IDB4
MGZhLAoJS2V5X3VjaXJjdW1mbGV4ID0gMHgwZmIsCglLZXlfdWRpYWVyZXNpcyA9IDB4MGZjLAoJ
S2V5X3lhY3V0ZSA9IDB4MGZkLAoJS2V5X3Rob3JuID0gMHgwZmUsCglLZXlfeWRpYWVyZXNpcyA9
IDB4MGZmLAoKCUtleV91bmtub3duID0gMHhmZmZmCiAgICB9OwoKICAgICAKICAgIGVudW0gQXJy
b3dUeXBlIHsKCVVwQXJyb3csCglEb3duQXJyb3csCglMZWZ0QXJyb3csCglSaWdodEFycm93CiAg
ICB9OwoKICAgICAKICAgIGVudW0gUmFzdGVyT3AgeyAgCglDb3B5Uk9QLAoJT3JST1AsCglYb3JS
T1AsCglOb3RBbmRST1AsIEVyYXNlUk9QPU5vdEFuZFJPUCwKCU5vdENvcHlST1AsCglOb3RPclJP
UCwKCU5vdFhvclJPUCwKCUFuZFJPUCwJTm90RXJhc2VST1A9QW5kUk9QLAoJTm90Uk9QLAoJQ2xl
YXJST1AsCglTZXRST1AsCglOb3BST1AsCglBbmROb3RST1AsCglPck5vdFJPUCwKCU5hbmRST1As
CglOb3JST1AsCUxhc3RST1A9Tm9yUk9QCiAgICB9OwoKICAgICAKICAgIGVudW0gUGVuU3R5bGUg
eyAgCglOb1BlbiwKCVNvbGlkTGluZSwKCURhc2hMaW5lLAoJRG90TGluZSwKCURhc2hEb3RMaW5l
LAoJRGFzaERvdERvdExpbmUsCglNUGVuU3R5bGUgPSAweDBmCiAgICB9OwoKICAgICAKICAgIGVu
dW0gUGVuQ2FwU3R5bGUgeyAgCglGbGF0Q2FwID0gMHgwMCwKCVNxdWFyZUNhcCA9IDB4MTAsCglS
b3VuZENhcCA9IDB4MjAsCglNUGVuQ2FwU3R5bGUgPSAweDMwCiAgICB9OwoKICAgICAKICAgIGVu
dW0gUGVuSm9pblN0eWxlIHsgIAoJTWl0ZXJKb2luID0gMHgwMCwKCUJldmVsSm9pbiA9IDB4NDAs
CglSb3VuZEpvaW4gPSAweDgwLAoJTVBlbkpvaW5TdHlsZSA9IDB4YzAKICAgIH07CgogICAgIAog
ICAgZW51bSBCcnVzaFN0eWxlIHsgIAoJTm9CcnVzaCwKCVNvbGlkUGF0dGVybiwKCURlbnNlMVBh
dHRlcm4sCglEZW5zZTJQYXR0ZXJuLAoJRGVuc2UzUGF0dGVybiwKCURlbnNlNFBhdHRlcm4sCglE
ZW5zZTVQYXR0ZXJuLAoJRGVuc2U2UGF0dGVybiwKCURlbnNlN1BhdHRlcm4sCglIb3JQYXR0ZXJu
LAoJVmVyUGF0dGVybiwKCUNyb3NzUGF0dGVybiwKCUJEaWFnUGF0dGVybiwKCUZEaWFnUGF0dGVy
biwKCURpYWdDcm9zc1BhdHRlcm4sCglDdXN0b21QYXR0ZXJuPTI0CiAgICB9OwoKICAgICAKICAg
IGVudW0gV2luZG93c1ZlcnNpb24gewoJV1ZfMzJzIAkJPSAweDAwMDEsCglXVl85NSAJCT0gMHgw
MDAyLAoJV1ZfOTgJCT0gMHgwMDAzLAoJV1ZfTWUJCT0gMHgwMDA0LAoJV1ZfRE9TX2Jhc2VkCT0g
MHgwMDBmLAoKCVdWX05UIAkJPSAweDAwMTAsCglXVl8yMDAwIAk9IDB4MDAyMCwKCVdWX1hQCQk9
IDB4MDAzMCwKCVdWX05UX2Jhc2VkCT0gMHgwMGYwCiAgICB9OwoKICAgICAKICAgIGVudW0gVUlF
ZmZlY3QgewoJVUlfR2VuZXJhbCwKCVVJX0FuaW1hdGVNZW51LAoJVUlfRmFkZU1lbnUsCglVSV9B
bmltYXRlQ29tYm8sCglVSV9BbmltYXRlVG9vbHRpcCwKCVVJX0ZhZGVUb29sdGlwCiAgICB9OwoK
ICAgICAKICAgIGVudW0gQ3Vyc29yU2hhcGUgewoJQXJyb3dDdXJzb3IsCglVcEFycm93Q3Vyc29y
LAoJQ3Jvc3NDdXJzb3IsCglXYWl0Q3Vyc29yLAoJSWJlYW1DdXJzb3IsCglTaXplVmVyQ3Vyc29y
LAoJU2l6ZUhvckN1cnNvciwKCVNpemVCRGlhZ0N1cnNvciwKCVNpemVGRGlhZ0N1cnNvciwKCVNp
emVBbGxDdXJzb3IsCglCbGFua0N1cnNvciwKCVNwbGl0VkN1cnNvciwKCVNwbGl0SEN1cnNvciwK
CVBvaW50aW5nSGFuZEN1cnNvciwKCUZvcmJpZGRlbkN1cnNvciwKCVdoYXRzVGhpc0N1cnNvciwK
CUxhc3RDdXJzb3IJPSBXaGF0c1RoaXNDdXJzb3IsCglCaXRtYXBDdXJzb3IJPSAyNAogICAgfTsK
CiAgICAgCgogICAgc3RhdGljIGNvbnN0ICBRQ3Vyc29yICYgYXJyb3dDdXJzb3I7CSAKICAgIHN0
YXRpYyBjb25zdCAgUUN1cnNvciAmIHVwQXJyb3dDdXJzb3I7CSAKICAgIHN0YXRpYyBjb25zdCAg
UUN1cnNvciAmIGNyb3NzQ3Vyc29yOwkgCiAgICBzdGF0aWMgY29uc3QgIFFDdXJzb3IgJiB3YWl0
Q3Vyc29yOwkgCiAgICBzdGF0aWMgY29uc3QgIFFDdXJzb3IgJiBpYmVhbUN1cnNvcjsJIAogICAg
c3RhdGljIGNvbnN0ICBRQ3Vyc29yICYgc2l6ZVZlckN1cnNvcjsJIAogICAgc3RhdGljIGNvbnN0
ICBRQ3Vyc29yICYgc2l6ZUhvckN1cnNvcjsJIAogICAgc3RhdGljIGNvbnN0ICBRQ3Vyc29yICYg
c2l6ZUJEaWFnQ3Vyc29yOwkgCiAgICBzdGF0aWMgY29uc3QgIFFDdXJzb3IgJiBzaXplRkRpYWdD
dXJzb3I7CSAKICAgIHN0YXRpYyBjb25zdCAgUUN1cnNvciAmIHNpemVBbGxDdXJzb3I7CSAKICAg
IHN0YXRpYyBjb25zdCAgUUN1cnNvciAmIGJsYW5rQ3Vyc29yOwkgCiAgICBzdGF0aWMgY29uc3Qg
IFFDdXJzb3IgJiBzcGxpdFZDdXJzb3I7CSAKCQkJCQkJIAogICAgc3RhdGljIGNvbnN0ICBRQ3Vy
c29yICYgc3BsaXRIQ3Vyc29yOwkgCgkJCQkJCSAKICAgIHN0YXRpYyBjb25zdCAgUUN1cnNvciAm
IHBvaW50aW5nSGFuZEN1cnNvcjsJIAogICAgc3RhdGljIGNvbnN0ICBRQ3Vyc29yICYgZm9yYmlk
ZGVuQ3Vyc29yOwkgCiAgICBzdGF0aWMgY29uc3QgIFFDdXJzb3IgJiB3aGF0c1RoaXNDdXJzb3I7
ICAgCgoKICAgIGVudW0gVGV4dEZvcm1hdCB7CglQbGFpblRleHQsCglSaWNoVGV4dCwKCUF1dG9U
ZXh0CiAgICB9OwoKICAgICAKICAgIGVudW0gRG9jayB7CglEb2NrVW5tYW5hZ2VkLAoJRG9ja1Rv
cm5PZmYsCglEb2NrVG9wLAoJRG9ja0JvdHRvbSwKCURvY2tSaWdodCwKCURvY2tMZWZ0LAoJRG9j
a01pbmltaXplZAoKICAgICAgICAsCglVbm1hbmFnZWQgPSBEb2NrVW5tYW5hZ2VkLAoJVG9ybk9m
ZiA9IERvY2tUb3JuT2ZmLAoJVG9wID0gRG9ja1RvcCwKCUJvdHRvbSA9IERvY2tCb3R0b20sCglS
aWdodCA9IERvY2tSaWdodCwKCUxlZnQgPSBEb2NrTGVmdCwKCU1pbmltaXplZCA9IERvY2tNaW5p
bWl6ZWQKCiAgICB9OwogICAgIAogICAgdHlwZWRlZiBEb2NrIFRvb2xCYXJEb2NrOwoKICAgICAK
ICAgIGVudW0gRGF0ZUZvcm1hdCB7CglUZXh0RGF0ZSwgICAgICAgCglJU09EYXRlLCAgICAgICAg
CglMb2NhbERhdGUgICAgICAgCiAgICB9OwoKICAgICAKICAgIGVudW0gQmFja2dyb3VuZE1vZGUg
ewoJRml4ZWRDb2xvciwKCUZpeGVkUGl4bWFwLAoJTm9CYWNrZ3JvdW5kLAoJUGFsZXR0ZUZvcmVn
cm91bmQsCglQYWxldHRlQnV0dG9uLAoJUGFsZXR0ZUxpZ2h0LAoJUGFsZXR0ZU1pZGxpZ2h0LAoJ
UGFsZXR0ZURhcmssCglQYWxldHRlTWlkLAoJUGFsZXR0ZVRleHQsCglQYWxldHRlQnJpZ2h0VGV4
dCwKCVBhbGV0dGVCYXNlLAoJUGFsZXR0ZUJhY2tncm91bmQsCglQYWxldHRlU2hhZG93LAoJUGFs
ZXR0ZUhpZ2hsaWdodCwKCVBhbGV0dGVIaWdobGlnaHRlZFRleHQsCglQYWxldHRlQnV0dG9uVGV4
dCwKCVBhbGV0dGVMaW5rLAoJUGFsZXR0ZUxpbmtWaXNpdGVkLAoJWDExUGFyZW50UmVsYXRpdmUK
ICAgIH07CgogICAgdHlwZWRlZiB1aW50IENvbXBhcmlzb25GbGFnczsKCiAgICAgCiAgICBlbnVt
IFN0cmluZ0NvbXBhcmlzb25Nb2RlIHsKICAgICAgICBDYXNlU2Vuc2l0aXZlICAgPSAweDAwMDAx
LCAgCiAgICAgICAgQmVnaW5zV2l0aCAgICAgID0gMHgwMDAwMiwgIAogICAgICAgIEVuZHNXaXRo
ICAgICAgICA9IDB4MDAwMDQsICAKICAgICAgICBDb250YWlucyAgICAgICAgPSAweDAwMDA4LCAg
CiAgICAgICAgRXhhY3RNYXRjaCAgICAgID0gMHgwMDAxMCAgIAogICAgfTsKCiAgICAgCiAgICAg
CgoKCgoKICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBIQU5ETEU7CgoKCn07CgoKY2xhc3MgICBR
SW50ZXJuYWwgewpwdWJsaWM6CiAgICBlbnVtIFBhaW50RGV2aWNlRmxhZ3MgewoJVW5kZWZpbmVk
RGV2aWNlID0gMHgwMCwKCVdpZGdldCA9IDB4MDEsCglQaXhtYXAgPSAweDAyLAoJUHJpbnRlciA9
IDB4MDMsCglQaWN0dXJlID0gMHgwNCwKCVN5c3RlbSA9IDB4MDUsCglEZXZpY2VUeXBlTWFzayA9
IDB4MGYsCglFeHRlcm5hbERldmljZSA9IDB4MTAsCgkgCglDb21wYXRpYmlsaXR5TW9kZSA9IDB4
MjAKICAgIH07Cn07CgoKIyA0NSAiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3F3aW5kb3dkZWZzLmgi
IDIKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zL2lu
Y2x1ZGUvbGltaXRzLmgiIDEgMwogCgoKIAoKCgoKCiAKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1
ODYtbWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3lzbGltaXRzLmgiIDEgMwogCgoKCgoK
IyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUv
bGltaXRzLmgiIDEgMwogCgoKIAoKIyAxMTQgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFr
ZS1saW51eC8yLjk1LjMvaW5jbHVkZS9saW1pdHMuaCIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9s
aW1pdHMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCiAKIyAxICIvdXNyL2lu
Y2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK
CgogCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCgogCgoKIAoKCiAKCgogCgoKIAoK
CgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgoKIAoKCiAK
CgogCgoKIAoKCiAKCgoKIAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAxIDMK
IAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAojIDEgIi91c3IvaW5jbHVkZS9saW51eC9saW1p
dHMuaCIgMSAzCgoKCgoKCgoKCgoKCgoKCgoKCgojIDI3ICIvdXNyL2luY2x1ZGUvYml0cy9sb2Nh
bF9saW0uaCIgMiAzCgoKIAoKCgoKCiAKCiAKCgogCgogCgoKIAoKIAoKCiAKCgoKIAoKIyAxMjYg
Ii91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMiAzCgoKCgoKCgoKIAoKCgoKCgoKIyAz
MCAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
cG9zaXgyX2xpbS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiAKCgogCgoKIAoK
CiAKCgogCgoKCgogCgoKCgogCgoKCiAKCgogCgoKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCiAKCgoKIyAzNCAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKCgoK
CgogCgoKCgoKIAoKIyAxMjEgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMwoKCgoKICAKCgoKCgoK
CgojIDExNyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNs
dWRlL2xpbWl0cy5oIiAyIDMKCgoKCiMgNyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtl
LWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMKCgojIDExICIvdXNyL2xpYi9n
Y2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoK
CgoKCiAKCgoKIAoKCgogCgoKCgogCgoKCgoKIAoKCgogCgoKCgoKCgoKCgoKCiAKCiAKCgoKCiAK
CgoKIAoKCgoKCgoKCiAKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgojIDEwNyAiL3Vzci9saWIvZ2Nj
LWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL2xpbWl0cy5oIiAzCgoKCgog
CgoKCgoKCgoKCiMgNDggIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xd2luZG93ZGVmcy5oIiAyCgoK
IAoKY2xhc3MgUVBhaW50RGV2aWNlOwpjbGFzcyBRUGFpbnREZXZpY2VNZXRyaWNzOwpjbGFzcyBR
V2lkZ2V0OwpjbGFzcyBRV2lkZ2V0TWFwcGVyOwpjbGFzcyBRRGlhbG9nOwpjbGFzcyBRQ29sb3I7
CmNsYXNzIFFDb2xvckdyb3VwOwpjbGFzcyBRUGFsZXR0ZTsKY2xhc3MgUUN1cnNvcjsKY2xhc3Mg
UVBvaW50OwpjbGFzcyBRU2l6ZTsKY2xhc3MgUVJlY3Q7CmNsYXNzIFFQb2ludEFycmF5OwpjbGFz
cyBRUGFpbnRlcjsKY2xhc3MgUVJlZ2lvbjsKY2xhc3MgUUZvbnQ7CmNsYXNzIFFGb250TWV0cmlj
czsKY2xhc3MgUUZvbnRJbmZvOwpjbGFzcyBRUGVuOwpjbGFzcyBRQnJ1c2g7CmNsYXNzIFFXTWF0
cml4OwpjbGFzcyBRUGl4bWFwOwpjbGFzcyBRQml0bWFwOwpjbGFzcyBRTW92aWU7CmNsYXNzIFFJ
bWFnZTsKY2xhc3MgUUltYWdlSU87CmNsYXNzIFFQaWN0dXJlOwpjbGFzcyBRUHJpbnRlcjsKY2xh
c3MgUUFjY2VsOwpjbGFzcyBRVGltZXI7CmNsYXNzIFFUaW1lOwpjbGFzcyBRQ2xpcGJvYXJkOwoK
CiAKCmNsYXNzIFFXaWRnZXRMaXN0OwpjbGFzcyBRV2lkZ2V0TGlzdEl0OwoKCiAKCiMgMTMwICIv
dXNyL2xvY2FsL3F0L2luY2x1ZGUvcXdpbmRvd2RlZnMuaCIKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1
Y3QgX1hEaXNwbGF5IERpc3BsYXk7CnR5cGVkZWYgdW5pb24gIF9YRXZlbnQgWEV2ZW50Owp0eXBl
ZGVmIHN0cnVjdCBfWEdDICpHQzsKdHlwZWRlZiBzdHJ1Y3QgX1hSZWdpb24gKlJlZ2lvbjsKdHlw
ZWRlZiB1bnNpZ25lZCBsb25nICBXSWQ7CgogIERpc3BsYXkgKnF0X3hkaXNwbGF5KCk7CiAgaW50
CSBxdF94c2NyZWVuKCk7CiAgV0lkCSBxdF94cm9vdHdpbigpOwogIEdDCSBxdF94Z2V0X3JlYWRv
bmx5X2djKCBpbnQgc2NybiwgYm9vbCBtb25vY2hyb21lICk7CiAgR0MJIHF0X3hnZXRfdGVtcF9n
YyggaW50IHNjcm4sIGJvb2wgbW9ub2Nocm9tZSApOwoKCgoKCgoKCgoKCmNsYXNzIFFBcHBsaWNh
dGlvbjsKCgoKCgogCgp0eXBlZGVmIFFfSU5UMzIgUUNPT1JEOwkJCQkgCmNvbnN0IFFDT09SRCBR
Q09PUkRfTUFYID0gIDIxNDc0ODM2NDc7CmNvbnN0IFFDT09SRCBRQ09PUkRfTUlOID0gLVFDT09S
RF9NQVggLSAxOwoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgUVJnYjsJCQkgCgogIGNvbnN0IGNoYXIg
KnFBcHBOYW1lKCk7CQkgCgogCgp0eXBlZGVmIHZvaWQgKCpRdENsZWFuVXBGdW5jdGlvbikoKTsK
ICB2b2lkIHFBZGRQb3N0Um91dGluZSggUXRDbGVhblVwRnVuY3Rpb24gKTsKICB2b2lkIHFSZW1v
dmVQb3N0Um91dGluZSggUXRDbGVhblVwRnVuY3Rpb24gKTsKCgogCnR5cGVkZWYgUXRDbGVhblVw
RnVuY3Rpb24gUV9DbGVhblVwRnVuY3Rpb247CgoKIAogIHZvaWQgKnF0X2ZpbmRfb2JqX2NoaWxk
KCBRT2JqZWN0ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICk7CgoKCgoKIyA0MiAiL3Vz
ci9sb2NhbC9xdC9pbmNsdWRlL3Fjb2xvci5oIiAyCgoKCmNvbnN0IFFSZ2IgIFJHQl9NQVNLICAg
ID0gMHgwMGZmZmZmZjsJCSAKCiAgaW5saW5lIGludCBxUmVkKCBRUmdiIHJnYiApCQkgCnsgcmV0
dXJuIChpbnQpKChyZ2IgPj4gMTYpICYgMHhmZik7IH0KCiAgaW5saW5lIGludCBxR3JlZW4oIFFS
Z2IgcmdiICkJCSAKeyByZXR1cm4gKGludCkoKHJnYiA+PiA4KSAmIDB4ZmYpOyB9CgogIGlubGlu
ZSBpbnQgcUJsdWUoIFFSZ2IgcmdiICkJCSAKeyByZXR1cm4gKGludCkocmdiICYgMHhmZik7IH0K
CiAgaW5saW5lIGludCBxQWxwaGEoIFFSZ2IgcmdiICkJCSAKeyByZXR1cm4gKGludCkoKHJnYiA+
PiAyNCkgJiAweGZmKTsgfQoKICBpbmxpbmUgUVJnYiBxUmdiKCBpbnQgciwgaW50IGcsIGludCBi
ICkgCnsgcmV0dXJuICgweGZmIDw8IDI0KSB8ICgociAmIDB4ZmYpIDw8IDE2KSB8ICgoZyAmIDB4
ZmYpIDw8IDgpIHwgKGIgJiAweGZmKTsgfQoKICBpbmxpbmUgUVJnYiBxUmdiYSggaW50IHIsIGlu
dCBnLCBpbnQgYiwgaW50IGEgKSAKeyByZXR1cm4gKChhICYgMHhmZikgPDwgMjQpIHwgKChyICYg
MHhmZikgPDwgMTYpIHwgKChnICYgMHhmZikgPDwgOCkgfCAoYiAmIDB4ZmYpOyB9CgogIGlubGlu
ZSBpbnQgcUdyYXkoIGludCByLCBpbnQgZywgaW50IGIgKSAKeyByZXR1cm4gKHIqMTErZyoxNiti
KjUpLzMyOyB9CgogIGlubGluZSBpbnQgcUdyYXkoIFFSZ2IgcmdiICkJCSAKeyByZXR1cm4gcUdy
YXkoIHFSZWQocmdiKSwgcUdyZWVuKHJnYiksIHFCbHVlKHJnYikgKTsgfQoKCmNsYXNzICAgUUNv
bG9yCnsKcHVibGljOgogICAgZW51bSBTcGVjIHsgUmdiLCBIc3YgfTsKCiAgICBRQ29sb3IoKTsK
ICAgIFFDb2xvciggaW50IHIsIGludCBnLCBpbnQgYiApOwogICAgUUNvbG9yKCBpbnQgeCwgaW50
IHksIGludCB6LCBTcGVjICk7CiAgICBRQ29sb3IoIFFSZ2IgcmdiLCB1aW50IHBpeGVsPTB4ZmZm
ZmZmZmYpOwogICAgUUNvbG9yKCBjb25zdCBRU3RyaW5nJiBuYW1lICk7CiAgICBRQ29sb3IoIGNv
bnN0IGNoYXIgKm5hbWUgKTsKICAgIFFDb2xvciggY29uc3QgUUNvbG9yICYgKTsKICAgIFFDb2xv
ciAmb3BlcmF0b3I9KCBjb25zdCBRQ29sb3IgJiApOwoKICAgIGJvb2wgICBpc1ZhbGlkKCkgY29u
c3Q7CiAgICBib29sICAgaXNEaXJ0eSgpIGNvbnN0OwoKICAgIFFTdHJpbmcgbmFtZSgpIGNvbnN0
OwoKICAgIHZvaWQgICBzZXROYW1lZENvbG9yKCBjb25zdCBRU3RyaW5nJiBuYW1lICk7CgogICAg
dm9pZCAgIHJnYiggaW50ICpyLCBpbnQgKmcsIGludCAqYiApIGNvbnN0OwogICAgUVJnYiAgIHJn
YigpICAgIGNvbnN0OwogICAgdm9pZCAgIHNldFJnYiggaW50IHIsIGludCBnLCBpbnQgYiApOwog
ICAgdm9pZCAgIHNldFJnYiggUVJnYiByZ2IgKTsKCiAgICBpbnQJICAgcmVkKCkgICAgY29uc3Q7
CiAgICBpbnQJICAgZ3JlZW4oKSAgY29uc3Q7CiAgICBpbnQJICAgYmx1ZSgpICAgY29uc3Q7Cgog
ICAgdm9pZCAgIGhzdiggaW50ICpoLCBpbnQgKnMsIGludCAqdiApIGNvbnN0OwogICAgdm9pZCAg
IGdldEhzdiggaW50ICZoLCBpbnQgJnMsIGludCAmdiApIGNvbnN0IHsgaHN2KCAmaCwgJnMsICZ2
ICk7IH0KICAgIHZvaWQgICBzZXRIc3YoIGludCBoLCBpbnQgcywgaW50IHYgKTsKCiAgICBRQ29s
b3IgbGlnaHQoIGludCBmID0gMTUwICkgY29uc3Q7CiAgICBRQ29sb3IgZGFyayggaW50IGYgPSAy
MDAgKQljb25zdDsKCiAgICBib29sICAgb3BlcmF0b3I9PSggY29uc3QgUUNvbG9yICZjICkgY29u
c3Q7CiAgICBib29sICAgb3BlcmF0b3IhPSggY29uc3QgUUNvbG9yICZjICkgY29uc3Q7CgogICAg
dWludCAgIGFsbG9jKCk7CiAgICB1aW50ICAgcGl4ZWwoKSAgY29uc3Q7CgogICAgc3RhdGljIGlu
dCAgbWF4Q29sb3JzKCk7CiAgICBzdGF0aWMgaW50ICBudW1CaXRQbGFuZXMoKTsKCiAgICBzdGF0
aWMgaW50ICBlbnRlckFsbG9jQ29udGV4dCgpOwogICAgc3RhdGljIHZvaWQgbGVhdmVBbGxvY0Nv
bnRleHQoKTsKICAgIHN0YXRpYyBpbnQgIGN1cnJlbnRBbGxvY0NvbnRleHQoKTsKICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3lBbGxvY0NvbnRleHQoIGludCApOwoKCgoKCgoKCgogICAgc3RhdGljIHZv
aWQgaW5pdGlhbGl6ZSgpOwogICAgc3RhdGljIHZvaWQgY2xlYW51cCgpOwoKICAgIGVudW0geyBE
aXJ0ID0gMHg0NDQ5NTI1NCwgSW52YWxpZCA9IDB4NDkwMDAwMDAgfTsKCnByaXZhdGU6CiAgICB2
b2lkIHNldFN5c3RlbU5hbWVkQ29sb3IoIGNvbnN0IFFTdHJpbmcmIG5hbWUgKTsKICAgIHZvaWQg
c2V0UGl4ZWwoIHVpbnQgcGl4ZWwgKTsKICAgIHN0YXRpYyB2b2lkIGluaXRHbG9iYWxDb2xvcnMo
KTsKICAgIHN0YXRpYyB1aW50IGFyZ2JUb1BpeDMyKFFSZ2IpOwogICAgc3RhdGljIFFDb2xvciog
Z2xvYmFsQ29sb3JzKCk7CiAgICBzdGF0aWMgYm9vbCBjb2xvcl9pbml0OwogICAgc3RhdGljIGJv
b2wgZ2xvYmFsc19pbml0OwoKCgogICAgc3RhdGljIGVudW0gQ29sb3JNb2RlbCB7IGQ4LCBkMzIg
fSBjb2xvcm1vZGVsOwogICAgdW5pb24gewoJUVJnYiBhcmdiOwoJc3RydWN0IHsKCSAgICBRUmdi
IGFyZ2I7CgkgICAgdWNoYXIgcGl4OwoJICAgIHVjaGFyIGludmFsaWQ7CgkgICAgdWNoYXIgZGly
dHk7CgkgICAgdWNoYXIgZGlyZWN0OwoJfSBkODsKCXN0cnVjdCBEMzIgewoJICAgIFFSZ2IgYXJn
YjsKCSAgICB1aW50IHBpeDsKCSAgICBib29sIGludmFsaWQoKSBjb25zdCB7IHJldHVybiBhcmdi
ID09IFFDb2xvcjo6SW52YWxpZCAmJiBwaXggPT0gUUNvbG9yOjpEaXJ0OyB9CgkgICAgYm9vbCBw
cm9iYWJseURpcnR5KCkgY29uc3QgeyByZXR1cm4gcGl4ID09IFFDb2xvcjo6RGlydDsgfQoJfSBk
MzI7CiAgICB9IGQ7Cn07CgoKaW5saW5lIFFDb2xvcjo6UUNvbG9yKCkKeyBkLmQzMi5hcmdiID0g
SW52YWxpZDsgZC5kMzIucGl4ID0gRGlydDsgfQoKaW5saW5lIFFDb2xvcjo6UUNvbG9yKCBpbnQg
ciwgaW50IGcsIGludCBiICkKeyBzZXRSZ2IoIHIsIGcsIGIgKTsgfQoKaW5saW5lIFFSZ2IgUUNv
bG9yOjpyZ2IoKSBjb25zdAp7IHJldHVybiBkLmFyZ2I7IH0KCmlubGluZSBpbnQgUUNvbG9yOjpy
ZWQoKSBjb25zdAp7IHJldHVybiBxUmVkKGQuYXJnYik7IH0KCmlubGluZSBpbnQgUUNvbG9yOjpn
cmVlbigpIGNvbnN0CnsgcmV0dXJuIHFHcmVlbihkLmFyZ2IpOyB9CgppbmxpbmUgaW50IFFDb2xv
cjo6Ymx1ZSgpIGNvbnN0CnsgcmV0dXJuIHFCbHVlKGQuYXJnYik7IH0KCmlubGluZSBib29sIFFD
b2xvcjo6aXNWYWxpZCgpIGNvbnN0CnsKICAgIGlmICggY29sb3Jtb2RlbCA9PSBkOCApCglyZXR1
cm4gIWQuZDguaW52YWxpZDsKICAgIGVsc2UKCXJldHVybiAhZC5kMzIuaW52YWxpZCgpOwp9Cgpp
bmxpbmUgYm9vbCBRQ29sb3I6Om9wZXJhdG9yPT0oIGNvbnN0IFFDb2xvciAmYyApIGNvbnN0CnsK
ICAgIHJldHVybiBkLmFyZ2IgPT0gYy5kLmFyZ2IgJiYgaXNWYWxpZCgpID09IGMuaXNWYWxpZCgp
Owp9CgppbmxpbmUgYm9vbCBRQ29sb3I6Om9wZXJhdG9yIT0oIGNvbnN0IFFDb2xvciAmYyApIGNv
bnN0CnsKICAgIHJldHVybiAhb3BlcmF0b3I9PShjKTsKfQoKCiAKCgoKCiAgUURhdGFTdHJlYW0g
Jm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFDb2xvciAmICk7CiAgUURhdGFTdHJl
YW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFDb2xvciAmICk7CgoKCiMgNCAiZWxlbWVu
dC5oIiAyCgoKCiMgMSAiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3F2YWx1ZXZlY3Rvci5oIiAxCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvbG9jYWwvcXQv
aW5jbHVkZS9xdGwuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKIyAxICIvdXNyL2xvY2FsL3F0L2luY2x1ZGUvcXRleHRzdHJlYW0uaCIgMQogCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvbG9jYWwvcXQvaW5jbHVk
ZS9xaW9kZXZpY2UuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgoKCiAKCgoKCgoKCgoKIAoKCgoKCiAKCgoKCgoKCgoK
CgoKY2xhc3MgICBRSU9EZXZpY2UJCQkgCnsKcHVibGljOgoKCgogICAgdHlwZWRlZiBRX1VMT05H
IE9mZnNldDsKCgogICAgUUlPRGV2aWNlKCk7CiAgICB2aXJ0dWFsIH5RSU9EZXZpY2UoKTsKCiAg
ICBpbnQJCSBmbGFncygpICBjb25zdCB7IHJldHVybiBpb01vZGU7IH0KICAgIGludAkJIG1vZGUo
KQkgIGNvbnN0IHsgcmV0dXJuIGlvTW9kZSAmIDB4MDBmZiA7IH0KICAgIGludAkJIHN0YXRlKCkg
IGNvbnN0IHsgcmV0dXJuIGlvTW9kZSAmIDB4ZjAwMCA7IH0KCiAgICBib29sCSBpc0RpcmVjdEFj
Y2VzcygpICAgICBjb25zdCB7IHJldHVybiAoKGlvTW9kZSAmIDB4MDEwMCApICAgICA9PSAweDAx
MDAgKTsgfQogICAgYm9vbAkgaXNTZXF1ZW50aWFsQWNjZXNzKCkgY29uc3QgeyByZXR1cm4gKChp
b01vZGUgJiAweDAyMDAgKSA9PSAweDAyMDAgKTsgfQogICAgYm9vbAkgaXNDb21iaW5lZEFjY2Vz
cygpICAgY29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAweDAzMDAgKSAgID09IDB4MDMwMCApOyB9
CiAgICBib29sCSBpc0J1ZmZlcmVkKCkJICAgICAgY29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAw
eDAwNDAgKSAgICAgICAgIT0gMHgwMDQwICk7IH0KICAgIGJvb2wJIGlzUmF3KCkJICAgICAgY29u
c3QgeyByZXR1cm4gKChpb01vZGUgJiAweDAwNDAgKSAgICAgICAgPT0gMHgwMDQwICk7IH0KICAg
IGJvb2wJIGlzU3luY2hyb25vdXMoKSAgICAgIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgw
MDgwICkgICAgICAhPSAweDAwODAgKTsgfQogICAgYm9vbAkgaXNBc3luY2hyb25vdXMoKSAgICAg
Y29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAweDAwODAgKSAgICAgID09IDB4MDA4MCApOyB9CiAg
ICBib29sCSBpc1RyYW5zbGF0ZWQoKQkgICAgICBjb25zdCB7IHJldHVybiAoKGlvTW9kZSAmIDB4
MDAxMCApICA9PSAweDAwMTAgKTsgfQogICAgYm9vbAkgaXNSZWFkYWJsZSgpCSAgICAgIGNvbnN0
IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMDAxICkgICA9PSAweDAwMDEgKTsgfQogICAgYm9vbAkg
aXNXcml0YWJsZSgpCSAgICAgIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMDAyICkgID09
IDB4MDAwMiApOyB9CiAgICBib29sCSBpc1JlYWRXcml0ZSgpCSAgICAgIGNvbnN0IHsgcmV0dXJu
ICgoaW9Nb2RlICYgMHgwMDAzICkgID09IDB4MDAwMyApOyB9CiAgICBib29sCSBpc0luYWN0aXZl
KCkJICAgICAgY29uc3QgeyByZXR1cm4gc3RhdGUoKSA9PSAwOyB9CiAgICBib29sCSBpc09wZW4o
KQkgICAgICBjb25zdCB7IHJldHVybiBzdGF0ZSgpID09IDB4MTAwMCA7IH0KCiAgICBpbnQJCSBz
dGF0dXMoKSBjb25zdCB7IHJldHVybiBpb1N0OyB9CiAgICB2b2lkCSByZXNldFN0YXR1cygpCXsg
aW9TdCA9IDAgOyB9CgogICAgdmlydHVhbCBib29sIG9wZW4oIGludCBtb2RlICkgPSAwOwogICAg
dmlydHVhbCB2b2lkIGNsb3NlKCkgPSAwOwogICAgdmlydHVhbCB2b2lkIGZsdXNoKCkgPSAwOwoK
ICAgIHZpcnR1YWwgT2Zmc2V0IHNpemUoKSAgY29uc3QgPSAwOwogICAgdmlydHVhbCBPZmZzZXQg
YXQoKSAgY29uc3Q7CiAgICB2aXJ0dWFsIGJvb2wgYXQoIE9mZnNldCApOwogICAgdmlydHVhbCBi
b29sIGF0RW5kKCkgIGNvbnN0OwogICAgYm9vbAkgcmVzZXQoKSB7IHJldHVybiBhdCgwKTsgfQoK
ICAgIHZpcnR1YWwgUV9MT05HIHJlYWRCbG9jayggY2hhciAqZGF0YSwgUV9VTE9ORyBtYXhsZW4g
KSA9IDA7CiAgICB2aXJ0dWFsIFFfTE9ORyB3cml0ZUJsb2NrKCBjb25zdCBjaGFyICpkYXRhLCBR
X1VMT05HIGxlbiApID0gMDsKICAgIHZpcnR1YWwgUV9MT05HIHJlYWRMaW5lKCBjaGFyICpkYXRh
LCBRX1VMT05HIG1heGxlbiApOwogICAgUV9MT05HIHdyaXRlQmxvY2soIGNvbnN0IFFCeXRlQXJy
YXkmIGRhdGEgKTsKICAgIHZpcnR1YWwgUUJ5dGVBcnJheSByZWFkQWxsKCk7CgogICAgdmlydHVh
bCBpbnQJIGdldGNoKCkgPSAwOwogICAgdmlydHVhbCBpbnQJIHB1dGNoKCBpbnQgKSA9IDA7CiAg
ICB2aXJ0dWFsIGludAkgdW5nZXRjaCggaW50ICkgPSAwOwoKcHJvdGVjdGVkOgogICAgdm9pZAkg
c2V0RmxhZ3MoIGludCBmICkgeyBpb01vZGUgPSBmOyB9CiAgICB2b2lkCSBzZXRUeXBlKCBpbnQg
KTsKICAgIHZvaWQJIHNldE1vZGUoIGludCApOwogICAgdm9pZAkgc2V0U3RhdGUoIGludCApOwog
ICAgdm9pZAkgc2V0U3RhdHVzKCBpbnQgKTsKICAgIE9mZnNldAkgaW9JbmRleDsKCnByaXZhdGU6
CiAgICBpbnQJCSBpb01vZGU7CiAgICBpbnQJCSBpb1N0OwoKcHJpdmF0ZToJIAoKICAgIFFJT0Rl
dmljZSggY29uc3QgUUlPRGV2aWNlICYgKTsKICAgIFFJT0RldmljZSAmb3BlcmF0b3I9KCBjb25z
dCBRSU9EZXZpY2UgJiApOwoKfTsKCgoKIyA0MiAiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3F0ZXh0
c3RyZWFtLmgiIDIKCgojIDEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAxIDMKIAoKCgoKCgoKCgoK
CgoKCgoKCiAKCgoKCgoKCgoKZXh0ZXJuICJDIiB7IAoKCgojIDEgIi91c3IvbGliL2djYy1saWIv
aTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAK
CgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1
ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9p
NTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAK
CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCiMgMTMxICIvdXNyL2xpYi9nY2MtbGliL2k1
ODYtbWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgoKIyAx
ODggIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9z
dGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCiMgMjcxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFu
ZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgojIDI4MyAiL3Vzci9saWIv
Z2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoK
IAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMv
aW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDMzICIvdXNy
L2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFu
ZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK
CnR5cGVkZWYgdm9pZCAqX19nbnVjX3ZhX2xpc3Q7CgoKCiAKCiMgMTIyICIvdXNyL2xpYi9nY2Mt
bGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkYXJnLmgiIDMKCgoKCgoK
CgoKCgoKCgoKCgoKCgojIDIwOSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4
LzIuOTUuMy9pbmNsdWRlL3N0ZGFyZy5oIiAzCgoKCgojIDM4ICIvdXNyL2luY2x1ZGUvc3RkaW8u
aCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIAoKCgoKCgoKCgoK
CgoKCgoKCiAKCgoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGlu
dXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9saWIv
Z2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoK
CiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51
eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoK
CiAKCgoKCgogCgogCgojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4
LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2Mt
bGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgog
CgoKCgogCgojIDI3MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUu
My9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIyAyODMgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5k
cmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCiMgMzE3ICIvdXNy
L2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgi
IDMKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyOSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlw
ZXMuaCIgMiAzCgoKIAp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5z
aWduZWQgc2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VfaW50Owp0eXBl
ZGVmIHVuc2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWdu
ZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBs
b25nIGludCBfX3F1YWRfdDsKIyA0OCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwoKdHlw
ZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdWludDhf
dDsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50IF9faW50MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBz
aG9ydCBpbnQgX191aW50MTZfdDsKdHlwZWRlZiBzaWduZWQgaW50IF9faW50MzJfdDsKdHlwZWRl
ZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzaWduZWQg
bG9uZyBsb25nIGludCBfX2ludDY0X3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBs
b25nIGxvbmcgaW50IF9fdWludDY0X3Q7Cgp0eXBlZGVmIF9fcXVhZF90ICpfX3FhZGRyX3Q7Cgp0
eXBlZGVmIF9fdV9xdWFkX3QgX19kZXZfdDsJCSAKdHlwZWRlZiBfX3VfaW50IF9fdWlkX3Q7CQkg
CnR5cGVkZWYgX191X2ludCBfX2dpZF90OwkJIAp0eXBlZGVmIF9fdV9sb25nIF9faW5vX3Q7CQkg
CnR5cGVkZWYgX191X2ludCBfX21vZGVfdDsJCSAKdHlwZWRlZiBfX3VfaW50IF9fbmxpbmtfdDsg
CQkgCnR5cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsJCSAKdHlwZWRlZiBfX3F1YWRfdCBfX2xvZmZf
dDsJCSAKdHlwZWRlZiBpbnQgX19waWRfdDsJCQkgCnR5cGVkZWYgaW50IF9fc3NpemVfdDsJCQkg
CnR5cGVkZWYgbG9uZyBpbnQgX19ybGltX3Q7CQkgCnR5cGVkZWYgX19xdWFkX3QgX19ybGltNjRf
dDsJCSAKdHlwZWRlZiBfX3VfaW50IF9faWRfdDsJCQkgCgp0eXBlZGVmIHN0cnVjdAogIHsKICAg
IGludCBfX3ZhbFsyXTsKICB9IF9fZnNpZF90OwkJCQkgCgogCnR5cGVkZWYgaW50IF9fZGFkZHJf
dDsJCQkgCnR5cGVkZWYgY2hhciAqX19jYWRkcl90Owp0eXBlZGVmIGxvbmcgaW50IF9fdGltZV90
Owp0eXBlZGVmIGxvbmcgaW50IF9fc3dibGtfdDsJCSAKDAp0eXBlZGVmIGxvbmcgaW50IF9fY2xv
Y2tfdDsKCiAKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX2ZkX21hc2s7CgogCgoKIAoKCgoK
IAp0eXBlZGVmIHN0cnVjdAogIHsKICAgICAKCgoKCgogICAgX19mZF9tYXNrIF9fZmRzX2JpdHNb
MTAyNCAgLyAoOCAqIHNpemVvZiAoX19mZF9tYXNrKSkgXTsKCgogIH0gX19mZF9zZXQ7CgoKdHlw
ZWRlZiBpbnQgX19rZXlfdDsKCiAKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNfcGlk
X3Q7CgoKIAoKIAp0eXBlZGVmIGxvbmcgaW50IF9fYmxrY250X3Q7CnR5cGVkZWYgX19xdWFkX3Qg
X19ibGtjbnQ2NF90OwoKIAp0eXBlZGVmIF9fdV9sb25nIF9fZnNibGtjbnRfdDsKdHlwZWRlZiBf
X3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKIAp0eXBlZGVmIF9fdV9sb25nIF9fZnNmaWxjbnRf
dDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90OwoKIAp0eXBlZGVmIF9fdV9sb25n
IF9faW5vNjRfdDsKCiAKdHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7CgogCnR5cGVkZWYgbG9u
ZyBpbnQgX190X3NjYWxhcl90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fdF91c2NhbGFy
X3Q7CgogCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoKIAoKCgoKCiMgNDAgIi91c3IvaW5jbHVk
ZS9zdGRpby5oIiAyIDMKCgoKCgoKCiAKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsKCgoK
CgoKCgojIDEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMwogCgoKCgoKIAoKCgoK
CgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVk
ZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFu
ZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoK
IyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRl
L3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCiMg
MTMxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUv
c3RkZGVmLmgiIDMKCgogCgogCgoKIyAxODggIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFr
ZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgaW50ICB3aW50X3Q7CgoKCgogCgogCgoj
IDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRl
L3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMTQgIi91c3IvaW5jbHVk
ZS9fR19jb25maWcuaCIgMiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgaW50IF9HX2lu
dDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IF9H
X2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5z
aWduZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkp
Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2Rl
X18gKF9fU0lfXykpKTsKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKIAoKCgoKCgoKCgoK
CgoKCiMgMzAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKCgoKCgoKCgoKCgoKCgoKCiAKCiMg
MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0
ZGFyZy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKIAoKIyAxMjIgIi91c3IvbGliL2djYy1s
aWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRhcmcuaCIgMwoKCgoKCgoK
CgoKCgoKCgoKCgoKCiMgMjA5ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgv
Mi45NS4zL2luY2x1ZGUvc3RkYXJnLmgiIDMKCgoKCiMgNDggIi91c3IvaW5jbHVkZS9saWJpby5o
IiAyIDMKCgoKCgoKCiMgNjcgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCgoKIAoKCgoKCgoKCgoK
CgoKCgoKCiMgOTggIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCgoKCgoKCgoKCgoKIAoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgpzdHJ1Y3QgX0lPX2p1bXBfdDsg
IHN0cnVjdCBfSU9fRklMRTsKCiAKCgoKCgoKCnR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgog
CgpzdHJ1Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0IF9JT19tYXJrZXIgKl9uZXh0OwogIHN0cnVj
dCBfSU9fRklMRSAqX3NidWY7CiAgIAoKICAgCiAgaW50IF9wb3M7CiMgMTg2ICIvdXNyL2luY2x1
ZGUvbGliaW8uaCIgMwoKfTsKCnN0cnVjdCBfSU9fRklMRSB7CiAgaW50IF9mbGFnczsJCSAKCgog
ICAKICAgCiAgY2hhciogX0lPX3JlYWRfcHRyOwkgCiAgY2hhciogX0lPX3JlYWRfZW5kOwkgCiAg
Y2hhciogX0lPX3JlYWRfYmFzZTsJIAogIGNoYXIqIF9JT193cml0ZV9iYXNlOwkgCiAgY2hhciog
X0lPX3dyaXRlX3B0cjsJIAogIGNoYXIqIF9JT193cml0ZV9lbmQ7CSAKICBjaGFyKiBfSU9fYnVm
X2Jhc2U7CSAKICBjaGFyKiBfSU9fYnVmX2VuZDsJIAogICAKICBjaGFyICpfSU9fc2F2ZV9iYXNl
OyAgCiAgY2hhciAqX0lPX2JhY2t1cF9iYXNlOyAgIAogIGNoYXIgKl9JT19zYXZlX2VuZDsgIAoK
ICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7CgogIHN0cnVjdCBfSU9fRklMRSAqX2NoYWlu
OwoKICBpbnQgX2ZpbGVubzsKICBpbnQgX2Jsa3NpemU7CiAgX19vZmZfdCAgIF9vbGRfb2Zmc2V0
OyAgCgoKICAgCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIgX3Z0
YWJsZV9vZmZzZXQ7CiAgY2hhciBfc2hvcnRidWZbMV07CgogICAKCiAgX0lPX2xvY2tfdCAqX2xv
Y2s7CgoKCgoKCgoKICBfX29mZjY0X3QgICBfb2Zmc2V0OwogICAKICBpbnQgX3VudXNlZDJbMTZd
OwoKfTsKCgoKCgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9w
bHVzIF9JT18yXzFfc3RkaW5fOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9z
dGRvdXRfOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwoKCgoK
CgoKCgoKCiAKCiAKCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fcmVhZF9mbiAgKHZvaWQgKiAgX19j
b29raWUsIGNoYXIgKl9fYnVmLAoJCQkJICAgICAgIHNpemVfdCBfX25ieXRlcykgIDsKCiAKCgoK
Cgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dyaXRlX2ZuICAodm9pZCAqICBfX2Nvb2tpZSwgX19j
b25zdCBjaGFyICpfX2J1ZiwKCQkJCSAgICAgIHNpemVfdCBfX24pICA7CgogCgoKCgoKdHlwZWRl
ZiBpbnQgX19pb19zZWVrX2ZuICAodm9pZCAqICBfX2Nvb2tpZSwgX19vZmZfdCAgIF9fcG9zLCBp
bnQgX193KSAgOwoKIAp0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICAodm9pZCAqICBfX2Nvb2tp
ZSkgIDsKCgojIDMxMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKCgoKCmV4dGVybiAiQyIgewoK
CmV4dGVybiBpbnQgX191bmRlcmZsb3cgIChfSU9fRklMRSAqKSAgdGhyb3cgKCkgIDsKZXh0ZXJu
IGludCBfX3VmbG93ICAoX0lPX0ZJTEUgKikgIHRocm93ICgpICA7CmV4dGVybiBpbnQgX19vdmVy
ZmxvdyAgKF9JT19GSUxFICosIGludCkgIHRocm93ICgpICA7CgoKCgoKCgoKCgoKCgoKCgpleHRl
cm4gaW50IF9JT19nZXRjICAoX0lPX0ZJTEUgKl9fZnApICB0aHJvdyAoKSAgOwpleHRlcm4gaW50
IF9JT19wdXRjICAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApICB0aHJvdyAoKSAgOwpleHRlcm4g
aW50IF9JT19mZW9mICAoX0lPX0ZJTEUgKl9fZnApICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IF9J
T19mZXJyb3IgIChfSU9fRklMRSAqX19mcCkgIHRocm93ICgpICA7CgpleHRlcm4gaW50IF9JT19w
ZWVrY19sb2NrZWQgIChfSU9fRklMRSAqX19mcCkgIHRocm93ICgpICA7CgogCgoKCmV4dGVybiB2
b2lkIF9JT19mbG9ja2ZpbGUgIChfSU9fRklMRSAqKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIHZvaWQg
X0lPX2Z1bmxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIHRocm93ICgpICA7CmV4dGVybiBpbnQgX0lP
X2Z0cnlsb2NrZmlsZSAgKF9JT19GSUxFICopICB0aHJvdyAoKSAgOwoKCgoKCgoKCgoKCgpleHRl
cm4gaW50IF9JT192ZnNjYW5mICAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICog
X19yZXN0cmljdCwKCQkJICAgICBfX2dudWNfdmFfbGlzdCAsIGludCAqX19yZXN0cmljdCkgIHRo
cm93ICgpICA7CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmICAoX0lPX0ZJTEUgKl9fcmVzdHJpY3Qs
IGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsCgkJCSAgICAgIF9fZ251Y192YV9saXN0ICkgIHRocm93
ICgpICA7CmV4dGVybiBfX3NzaXplX3QgICBfSU9fcGFkbiAgKF9JT19GSUxFICosIGludCwgX19z
c2l6ZV90ICApICB0aHJvdyAoKSAgOwpleHRlcm4gc2l6ZV90ICAgX0lPX3NnZXRuICAoX0lPX0ZJ
TEUgKiwgdm9pZCAqLCBzaXplX3QgICkgIHRocm93ICgpICA7CgpleHRlcm4gX19vZmY2NF90ICAg
X0lPX3NlZWtvZmYgIChfSU9fRklMRSAqLCBfX29mZjY0X3QgICwgaW50LCBpbnQpICB0aHJvdyAo
KSAgOwpleHRlcm4gX19vZmY2NF90ICAgX0lPX3NlZWtwb3MgIChfSU9fRklMRSAqLCBfX29mZjY0
X3QgICwgaW50KSAgdGhyb3cgKCkgIDsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVh
ICAoX0lPX0ZJTEUgKikgIHRocm93ICgpICA7CgoKfQoKCgojIDU3ICIvdXNyL2luY2x1ZGUvc3Rk
aW8uaCIgMiAzCgoKIAoKdHlwZWRlZiBfX29mZl90ICBmcG9zX3Q7CgoKCgoKCgogCgoKCgoKIAoK
CgoKCiAKCgoKCgoKIAoKCgoKCgoKIAoKCgoKIAoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvc3RkaW9fbGltLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CiMgMTEwICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCiAKZXh0ZXJuIEZJTEUgKnN0ZGlu
OwkJIApleHRlcm4gRklMRSAqc3Rkb3V0OwkJIApleHRlcm4gRklMRSAqc3RkZXJyOwkJIAogCgoK
CgoKIApleHRlcm4gaW50IHJlbW92ZSAgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgIHRocm93
ICgpICA7CiAKZXh0ZXJuIGludCByZW5hbWUgIChfX2NvbnN0IGNoYXIgKl9fb2xkLCBfX2NvbnN0
IGNoYXIgKl9fbmV3KSAgdGhyb3cgKCkgIDsKCgogCgpleHRlcm4gRklMRSAqdG1wZmlsZSAgKHZv
aWQpICB0aHJvdyAoKSAgOwoKCgoKCgoKCgoKIApleHRlcm4gY2hhciAqdG1wbmFtICAoY2hhciAq
X19zKSAgdGhyb3cgKCkgIDsKCgogCgpleHRlcm4gY2hhciAqdG1wbmFtX3IgIChjaGFyICpfX3Mp
ICB0aHJvdyAoKSAgOwoKCgoKIAoKCgoKCgpleHRlcm4gY2hhciAqdGVtcG5hbSAgKF9fY29uc3Qg
Y2hhciAqX19kaXIsIF9fY29uc3QgY2hhciAqX19wZngpICB0aHJvdyAoKSAgOwoKCgogCmV4dGVy
biBpbnQgZmNsb3NlICAoRklMRSAqX19zdHJlYW0pICB0aHJvdyAoKSAgOwogCmV4dGVybiBpbnQg
ZmZsdXNoICAoRklMRSAqX19zdHJlYW0pICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIGludCBmZmx1
c2hfdW5sb2NrZWQgIChGSUxFICpfX3N0cmVhbSkgIHRocm93ICgpICA7CgoKCgoKCgoKCiAKZXh0
ZXJuIEZJTEUgKmZvcGVuICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCgkJ
CSBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgIHRocm93ICgpICA7CiAKZXh0ZXJu
IEZJTEUgKmZyZW9wZW4gIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKCQkJ
ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCgkJCSAgIEZJTEUgKl9fcmVzdHJp
Y3QgX19zdHJlYW0pICB0aHJvdyAoKSAgOwojIDIwMSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMK
CgoKCgoKCgoKCiAKZXh0ZXJuIEZJTEUgKmZkb3BlbiAgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIg
Kl9fbW9kZXMpICB0aHJvdyAoKSAgOwoKCiMgMjI3ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwoK
CgogCgpleHRlcm4gdm9pZCBzZXRidWYgIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFy
ICpfX3Jlc3RyaWN0IF9fYnVmKSAgdGhyb3cgKCkgIDsKIAoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAg
KEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCgkJCSBp
bnQgX19tb2Rlcywgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CgoKIAoKZXh0ZXJuIHZvaWQgc2V0
YnVmZmVyICAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1
ZiwKCQkJICAgIHNpemVfdCBfX3NpemUpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gdm9pZCBzZXRs
aW5lYnVmICAoRklMRSAqX19zdHJlYW0pICB0aHJvdyAoKSAgOwoKCgogCmV4dGVybiBpbnQgZnBy
aW50ZiAgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCgkJCSBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19mb3JtYXQsIC4uLikgIHRocm93ICgpICA7CiAKZXh0ZXJuIGludCBwcmludGYgIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgIHRocm93ICgpICA7CiAKZXh0
ZXJuIGludCBzcHJpbnRmICAoY2hhciAqX19yZXN0cmljdCBfX3MsCgkJCSBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgdmZw
cmludGYgIChGSUxFICpfX3Jlc3RyaWN0IF9fcywKCQkJICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsCgkJCSAgX19nbnVjX3ZhX2xpc3QgIF9fYXJnKSAgdGhyb3cgKCkgIDsKIApl
eHRlcm4gaW50IHZwcmludGYgIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCgkJ
CSBfX2dudWNfdmFfbGlzdCAgX19hcmcpICB0aHJvdyAoKSAgOwogCmV4dGVybiBpbnQgdnNwcmlu
dGYgIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKCQkJICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19mb3JtYXQsCgkJCSAgX19nbnVjX3ZhX2xpc3QgIF9fYXJnKSAgdGhyb3cgKCkgIDsKCgogCmV4
dGVybiBpbnQgc25wcmludGYgIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVu
LAoJCQkgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSAgdGhyb3cgKCkg
IAogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOwoK
ZXh0ZXJuIGludCBfX3ZzbnByaW50ZiAgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19t
YXhsZW4sCgkJCSAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAoJCQkgICAg
IF9fZ251Y192YV9saXN0ICBfX2FyZykgIHRocm93ICgpICAKICAgICBfX2F0dHJpYnV0ZV9fICgo
X19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKZXh0ZXJuIGludCB2c25wcmludGYgIChj
aGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAoJCQkgICBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19mb3JtYXQsCgkJCSAgIF9fZ251Y192YV9saXN0ICBfX2FyZykgIHRocm93
ICgpICAKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkp
KTsKCgojIDMwNiAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKIApleHRlcm4gaW50IGZzY2Fu
ZiAgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCgkJCV9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX2Zvcm1hdCwgLi4uKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gaW50IHNjYW5mICAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pICB0aHJvdyAoKSAgOwogCmV4dGVybiBp
bnQgc3NjYW5mICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKCQkJX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pICB0aHJvdyAoKSAgOwoKIyAzMzQgIi91c3IvaW5j
bHVkZS9zdGRpby5oIiAzCgoKCiAKZXh0ZXJuIGludCBmZ2V0YyAgKEZJTEUgKl9fc3RyZWFtKSAg
dGhyb3cgKCkgIDsKZXh0ZXJuIGludCBnZXRjICAoRklMRSAqX19zdHJlYW0pICB0aHJvdyAoKSAg
OwoKIApleHRlcm4gaW50IGdldGNoYXIgICh2b2lkKSAgdGhyb3cgKCkgIDsKCiAKCgoKCiAKZXh0
ZXJuIGludCBnZXRjX3VubG9ja2VkICAoRklMRSAqX19zdHJlYW0pICB0aHJvdyAoKSAgOwpleHRl
cm4gaW50IGdldGNoYXJfdW5sb2NrZWQgICh2b2lkKSAgdGhyb3cgKCkgIDsKCgoKIApleHRlcm4g
aW50IGZnZXRjX3VubG9ja2VkICAoRklMRSAqX19zdHJlYW0pICB0aHJvdyAoKSAgOwoKCgogCmV4
dGVybiBpbnQgZnB1dGMgIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgIHRocm93ICgpICA7CmV4
dGVybiBpbnQgcHV0YyAgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSAgdGhyb3cgKCkgIDsKCiAK
ZXh0ZXJuIGludCBwdXRjaGFyICAoaW50IF9fYykgIHRocm93ICgpICA7CgogCgoKCgogCmV4dGVy
biBpbnQgZnB1dGNfdW5sb2NrZWQgIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgIHRocm93ICgp
ICA7CgoKCiAKZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkICAoaW50IF9fYywgRklMRSAqX19zdHJl
YW0pICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IHB1dGNoYXJfdW5sb2NrZWQgIChpbnQgX19jKSAg
dGhyb3cgKCkgIDsKCgoKCiAKZXh0ZXJuIGludCBnZXR3ICAoRklMRSAqX19zdHJlYW0pICB0aHJv
dyAoKSAgOwoKIApleHRlcm4gaW50IHB1dHcgIChpbnQgX193LCBGSUxFICpfX3N0cmVhbSkgIHRo
cm93ICgpICA7CgoKCiAKZXh0ZXJuIGNoYXIgKmZnZXRzICAoY2hhciAqX19yZXN0cmljdCBfX3Ms
IGludCBfX24sCgkJCSBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSAgdGhyb3cgKCkgIDsKCgoK
CgoKCiAKCmV4dGVybiBjaGFyICpnZXRzICAoY2hhciAqX19zKSAgdGhyb3cgKCkgIDsKCgojIDQy
NCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKIApleHRlcm4gaW50IGZwdXRzICAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKCQkgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVh
bSkgIHRocm93ICgpICA7CgoKCgoKCgogCmV4dGVybiBpbnQgcHV0cyAgKF9fY29uc3QgY2hhciAq
X19zKSAgdGhyb3cgKCkgIDsKCgogCmV4dGVybiBpbnQgdW5nZXRjICAoaW50IF9fYywgRklMRSAq
X19zdHJlYW0pICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIHNpemVfdCBmcmVhZCAgKHZvaWQgKl9f
cmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCgkJCSAgc2l6ZV90IF9fbiwgRklMRSAqX19y
ZXN0cmljdCBfX3N0cmVhbSkgIHRocm93ICgpICA7CiAKZXh0ZXJuIHNpemVfdCBmd3JpdGUgIChf
X2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCgkJCSAgIHNpemVf
dCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zKSAgdGhyb3cgKCkgIDsKCgogCmV4dGVybiBzaXpl
X3QgZnJlYWRfdW5sb2NrZWQgICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXpl
LAoJCQkJICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgIHRocm93ICgp
ICA7CmV4dGVybiBzaXplX3QgZndyaXRlX3VubG9ja2VkICAoX19jb25zdCB2b2lkICpfX3Jlc3Ry
aWN0IF9fcHRyLAoJCQkJICAgIHNpemVfdCBfX3NpemUsIHNpemVfdCBfX24sCgkJCQkgICAgRklM
RSAqX19yZXN0cmljdCBfX3N0cmVhbSkgIHRocm93ICgpICA7CgoKCiAKZXh0ZXJuIGludCBmc2Vl
ayAgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29mZiwgaW50IF9fd2hlbmNlKSAgdGhyb3cg
KCkgIDsKIApleHRlcm4gbG9uZyBpbnQgZnRlbGwgIChGSUxFICpfX3N0cmVhbSkgIHRocm93ICgp
ICA7CiAKZXh0ZXJuIHZvaWQgcmV3aW5kICAoRklMRSAqX19zdHJlYW0pICB0aHJvdyAoKSAgOwoK
IAoKCgoKIAoKCnR5cGVkZWYgX19vZmZfdCBvZmZfdDsKCgoKCgoKCgoKCgoKCgoKCgoKCgogCmV4
dGVybiBpbnQgZmdldHBvcyAgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCgkJCSBmcG9zX3Qg
Kl9fcmVzdHJpY3QgX19wb3MpICB0aHJvdyAoKSAgOwogCmV4dGVybiBpbnQgZnNldHBvcyAgKEZJ
TEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZwb3NfdCAqX19wb3MpICB0aHJvdyAoKSAgOwojIDUyMyAi
L3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgojIDUzMyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMK
CgogCmV4dGVybiB2b2lkIGNsZWFyZXJyICAoRklMRSAqX19zdHJlYW0pICB0aHJvdyAoKSAgOwog
CmV4dGVybiBpbnQgZmVvZiAgKEZJTEUgKl9fc3RyZWFtKSAgdGhyb3cgKCkgIDsKIApleHRlcm4g
aW50IGZlcnJvciAgKEZJTEUgKl9fc3RyZWFtKSAgdGhyb3cgKCkgIDsKCgogCmV4dGVybiB2b2lk
IGNsZWFyZXJyX3VubG9ja2VkICAoRklMRSAqX19zdHJlYW0pICB0aHJvdyAoKSAgOwpleHRlcm4g
aW50IGZlb2ZfdW5sb2NrZWQgIChGSUxFICpfX3N0cmVhbSkgIHRocm93ICgpICA7CmV4dGVybiBp
bnQgZmVycm9yX3VubG9ja2VkICAoRklMRSAqX19zdHJlYW0pICB0aHJvdyAoKSAgOwoKCgogCmV4
dGVybiB2b2lkIHBlcnJvciAgKF9fY29uc3QgY2hhciAqX19zKSAgdGhyb3cgKCkgIDsKCiAKCgpl
eHRlcm4gaW50IHN5c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IHN5c19lcnJs
aXN0W107CgoKCgoKCgoKIApleHRlcm4gaW50IGZpbGVubyAgKEZJTEUgKl9fc3RyZWFtKSAgdGhy
b3cgKCkgIDsKCgoKIApleHRlcm4gaW50IGZpbGVub191bmxvY2tlZCAgKEZJTEUgKl9fc3RyZWFt
KSAgdGhyb3cgKCkgIDsKCgoKCgogCmV4dGVybiBGSUxFICpwb3BlbiAgKF9fY29uc3QgY2hhciAq
X19jb21tYW5kLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpICB0aHJvdyAoKSAgOwoKIApleHRlcm4g
aW50IHBjbG9zZSAgKEZJTEUgKl9fc3RyZWFtKSAgdGhyb3cgKCkgIDsKCgoKCiAKZXh0ZXJuIGNo
YXIgKmN0ZXJtaWQgIChjaGFyICpfX3MpICB0aHJvdyAoKSAgOwoKCgoKCgoKCgojIDYwNyAiL3Vz
ci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKCiAKCiAKZXh0ZXJuIHZvaWQgZmxvY2tmaWxlICAoRklM
RSAqX19zdHJlYW0pICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUgIChG
SUxFICpfX3N0cmVhbSkgIHRocm93ICgpICA7CgogCmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlICAo
RklMRSAqX19zdHJlYW0pICB0aHJvdyAoKSAgOwoKCgoKCgoKCgoKIAoKCiMgMSAiL3Vzci9pbmNs
dWRlL2JpdHMvc3RkaW8uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCmlu
bGluZSAgaW50CnZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgX19nbnVj
X3ZhX2xpc3QgIF9fYXJnKSB0aHJvdyAoKSAKewogIHJldHVybiB2ZnByaW50ZiAoc3Rkb3V0ICwg
X19mbXQsIF9fYXJnKTsKfQoKIAppbmxpbmUgIGludApnZXRjaGFyICh2b2lkKSB0aHJvdyAoKSAK
ewogIHJldHVybiBfSU9fZ2V0YyAoc3RkaW4gKTsKfQoKCgogCmlubGluZSAgaW50CmdldGNfdW5s
b2NrZWQgKEZJTEUgKl9fZnApIHRocm93ICgpIAp7CiAgcmV0dXJuICgoIF9fZnAgKS0+X0lPX3Jl
YWRfcHRyID49ICggX19mcCApLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93ICggX19mcCApIDogKih1
bnNpZ25lZCBjaGFyICopICggX19mcCApLT5fSU9fcmVhZF9wdHIrKykgOwp9CgogCmlubGluZSAg
aW50CmdldGNoYXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgpIAp7CiAgcmV0dXJuICgoIHN0ZGlu
ICApLT5fSU9fcmVhZF9wdHIgPj0gKCBzdGRpbiAgKS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAo
IHN0ZGluICApIDogKih1bnNpZ25lZCBjaGFyICopICggc3RkaW4gICktPl9JT19yZWFkX3B0cisr
KSA7Cn0KCgoKIAppbmxpbmUgIGludApwdXRjaGFyIChpbnQgX19jKSB0aHJvdyAoKSAKewogIHJl
dHVybiBfSU9fcHV0YyAoX19jLCBzdGRvdXQgKTsKfQoKCgogCmlubGluZSAgaW50CmZwdXRjX3Vu
bG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgCnsKICByZXR1cm4gKCgo
ICBfX3N0cmVhbSApLT5fSU9fd3JpdGVfcHRyID49ICggIF9fc3RyZWFtICktPl9JT193cml0ZV9l
bmQpID8gX19vdmVyZmxvdyAoICBfX3N0cmVhbSAsICh1bnNpZ25lZCBjaGFyKSAoIF9fYyApKSA6
ICh1bnNpZ25lZCBjaGFyKSAoKiggIF9fc3RyZWFtICktPl9JT193cml0ZV9wdHIrKyA9ICggX19j
ICkpKSA7Cn0KCgoKCiAKaW5saW5lICBpbnQKcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAq
X19zdHJlYW0pIHRocm93ICgpIAp7CiAgcmV0dXJuICgoKCAgX19zdHJlYW0gKS0+X0lPX3dyaXRl
X3B0ciA+PSAoICBfX3N0cmVhbSApLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKCAgX19z
dHJlYW0gLCAodW5zaWduZWQgY2hhcikgKCBfX2MgKSkgOiAodW5zaWduZWQgY2hhcikgKCooICBf
X3N0cmVhbSApLT5fSU9fd3JpdGVfcHRyKysgPSAoIF9fYyApKSkgOwp9CgogCmlubGluZSAgaW50
CnB1dGNoYXJfdW5sb2NrZWQgKGludCBfX2MpIHRocm93ICgpIAp7CiAgcmV0dXJuICgoKCAgc3Rk
b3V0ICApLT5fSU9fd3JpdGVfcHRyID49ICggIHN0ZG91dCAgKS0+X0lPX3dyaXRlX2VuZCkgPyBf
X292ZXJmbG93ICggIHN0ZG91dCAgLCAodW5zaWduZWQgY2hhcikgKCBfX2MgKSkgOiAodW5zaWdu
ZWQgY2hhcikgKCooICBzdGRvdXQgICktPl9JT193cml0ZV9wdHIrKyA9ICggX19jICkpKSA7Cn0K
CgoKCgoKCgoKCgoKCgogCmlubGluZSAgaW50CmZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKSAKewogIHJldHVybiAoKCggX19zdHJlYW0gKS0+X2ZsYWdzICYgMHgxMCApICE9
IDApIDsKfQoKIAppbmxpbmUgIGludApmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKSAKewogIHJldHVybiAoKCggX19zdHJlYW0gKS0+X2ZsYWdzICYgMHgyMCApICE9IDAp
IDsKfQoKCgoKCgogCgojIDE0OSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8uaCIgMwoKCiMgMTY1
ICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5oIiAzCgoKIAoKIyA2MzUgIi91c3IvaW5jbHVkZS9z
dGRpby5oIiAyIDMKCgoKfSAKCgoKCiMgNDQgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xdGV4dHN0
cmVhbS5oIiAyCgoKCgpjbGFzcyBRVGV4dENvZGVjOwpjbGFzcyBRVGV4dERlY29kZXI7CgpjbGFz
cyBRVGV4dFN0cmVhbVByaXZhdGU7CgpjbGFzcyAgIFFUZXh0U3RyZWFtCQkJCSAKewpwdWJsaWM6
CiAgICBlbnVtIEVuY29kaW5nIHsgTG9jYWxlLCBMYXRpbjEsIFVuaWNvZGUsIFVuaWNvZGVOZXR3
b3JrT3JkZXIsCgkJICAgIFVuaWNvZGVSZXZlcnNlLCBSYXdVbmljb2RlLCBVbmljb2RlVVRGOCB9
OwoKICAgIHZvaWQJc2V0RW5jb2RpbmcoIEVuY29kaW5nICk7CgogICAgdm9pZAlzZXRDb2RlYygg
UVRleHRDb2RlYyogKTsKCgogICAgIAoKICAgIFFUZXh0U3RyZWFtKCk7CiAgICBRVGV4dFN0cmVh
bSggUUlPRGV2aWNlICogKTsKICAgIFFUZXh0U3RyZWFtKCBRU3RyaW5nKiwgaW50IG1vZGUgKTsK
ICAgIFFUZXh0U3RyZWFtKCBRU3RyaW5nJiwgaW50IG1vZGUgKTsJCSAKICAgIFFUZXh0U3RyZWFt
KCBRQnl0ZUFycmF5LCBpbnQgbW9kZSApOwogICAgUVRleHRTdHJlYW0oIEZJTEUgKiwgaW50IG1v
ZGUgKTsKICAgIHZpcnR1YWwgflFUZXh0U3RyZWFtKCk7CgogICAgUUlPRGV2aWNlCSpkZXZpY2Uo
KSBjb25zdDsKICAgIHZvaWQJIHNldERldmljZSggUUlPRGV2aWNlICogKTsKICAgIHZvaWQJIHVu
c2V0RGV2aWNlKCk7CgogICAgYm9vbAkgYXRFbmQoKSBjb25zdDsKICAgIGJvb2wJIGVvZigpIGNv
bnN0OwoKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcj4+KCBRQ2hhciAmICk7CiAgICBRVGV4dFN0
cmVhbSAmb3BlcmF0b3I+PiggY2hhciAmICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+Pigg
c2lnbmVkIHNob3J0ICYgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcj4+KCB1bnNpZ25lZCBz
aG9ydCAmICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+Piggc2lnbmVkIGludCAmICk7CiAg
ICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+PiggdW5zaWduZWQgaW50ICYgKTsKICAgIFFUZXh0U3Ry
ZWFtICZvcGVyYXRvcj4+KCBzaWduZWQgbG9uZyAmICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0
b3I+PiggdW5zaWduZWQgbG9uZyAmICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+PiggZmxv
YXQgJiApOwogICAgUVRleHRTdHJlYW0gJm9wZXJhdG9yPj4oIGRvdWJsZSAmICk7CiAgICBRVGV4
dFN0cmVhbSAmb3BlcmF0b3I+PiggY2hhciAqICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+
PiggUVN0cmluZyAmICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+PiggUUNTdHJpbmcgJiAp
OwoKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KCBRQ2hhciApOwogICAgUVRleHRTdHJlYW0g
Jm9wZXJhdG9yPDwoIGNoYXIgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KCBzaWduZWQg
c2hvcnQgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KCB1bnNpZ25lZCBzaG9ydCApOwog
ICAgUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoIHNpZ25lZCBpbnQgKTsKICAgIFFUZXh0U3RyZWFt
ICZvcGVyYXRvcjw8KCB1bnNpZ25lZCBpbnQgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8
KCBzaWduZWQgbG9uZyApOwogICAgUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoIHVuc2lnbmVkIGxv
bmcgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KCBmbG9hdCApOwogICAgUVRleHRTdHJl
YW0gJm9wZXJhdG9yPDwoIGRvdWJsZSApOwogICAgUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoIGNv
bnN0IGNoYXIqICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PCggY29uc3QgUVN0cmluZyAm
ICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PCggY29uc3QgUUNTdHJpbmcgJiApOwogICAg
UVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoIHZvaWQgKiApOwkJIAoKICAgIFFUZXh0U3RyZWFtICZy
ZWFkUmF3Qnl0ZXMoIGNoYXIgKiwgdWludCBsZW4gKTsKICAgIFFUZXh0U3RyZWFtICZ3cml0ZVJh
d0J5dGVzKCBjb25zdCBjaGFyKiAsIHVpbnQgbGVuICk7CgogICAgUVN0cmluZwlyZWFkTGluZSgp
OwogICAgUVN0cmluZwlyZWFkKCk7CiAgICB2b2lkCXNraXBXaGl0ZVNwYWNlKCk7CgogICAgZW51
bSB7Cglza2lwd3MJICA9IDB4MDAwMSwJCQkgCglsZWZ0CSAgPSAweDAwMDIsCQkJIAoJcmlnaHQJ
ICA9IDB4MDAwNCwJCQkgCglpbnRlcm5hbCAgPSAweDAwMDgsCQkJIAoJYmluCSAgPSAweDAwMTAs
CQkJIAoJb2N0CSAgPSAweDAwMjAsCQkJIAoJZGVjCSAgPSAweDAwNDAsCQkJIAoJaGV4CSAgPSAw
eDAwODAsCQkJIAoJc2hvd2Jhc2UgID0gMHgwMTAwLAkJCSAKCXNob3dwb2ludCA9IDB4MDIwMCwJ
CQkgCgl1cHBlcmNhc2UgPSAweDA0MDAsCQkJIAoJc2hvd3BvcwkgID0gMHgwODAwLAkJCSAKCXNj
aWVudGlmaWM9IDB4MTAwMCwJCQkgCglmaXhlZAkgID0gMHgyMDAwCQkJIAogICAgfTsKCiAgICBz
dGF0aWMgY29uc3QgaW50IGJhc2VmaWVsZDsJCQkgCiAgICBzdGF0aWMgY29uc3QgaW50IGFkanVz
dGZpZWxkOwkJIAogICAgc3RhdGljIGNvbnN0IGludCBmbG9hdGZpZWxkOwkJIAoKICAgIGludAkg
IGZsYWdzKCkgY29uc3Q7CiAgICBpbnQJICBmbGFncyggaW50IGYgKTsKICAgIGludAkgIHNldGYo
IGludCBiaXRzICk7CiAgICBpbnQJICBzZXRmKCBpbnQgYml0cywgaW50IG1hc2sgKTsKICAgIGlu
dAkgIHVuc2V0ZiggaW50IGJpdHMgKTsKCiAgICB2b2lkICByZXNldCgpOwoKICAgIGludAkgIHdp
ZHRoKCkJY29uc3Q7CiAgICBpbnQJICB3aWR0aCggaW50ICk7CiAgICBpbnQJICBmaWxsKCkJY29u
c3Q7CiAgICBpbnQJICBmaWxsKCBpbnQgKTsKICAgIGludAkgIHByZWNpc2lvbigpCWNvbnN0Owog
ICAgaW50CSAgcHJlY2lzaW9uKCBpbnQgKTsKCnByaXZhdGU6CiAgICBsb25nCWlucHV0X2ludCgp
OwogICAgdm9pZAlpbml0KCk7CiAgICBRVGV4dFN0cmVhbSAmb3V0cHV0X2ludCggaW50LCB1bG9u
ZywgYm9vbCApOwogICAgUUlPRGV2aWNlCSpkZXY7CgogICAgaW50CQlmZmxhZ3M7CiAgICBpbnQJ
CWZ3aWR0aDsKICAgIGludAkJZmlsbGNoYXI7CiAgICBpbnQJCWZwcmVjOwogICAgYm9vbAlkb1Vu
aWNvZGVIZWFkZXI7CiAgICBib29sCW93bmRldjsKICAgIFFUZXh0Q29kZWMgCSptYXBwZXI7CiAg
ICBRVGV4dFN0cmVhbVByaXZhdGUgKiBkOwogICAgUUNoYXIJdW51c2VkMTsgIAogICAgYm9vbAls
YXRpbjE7CiAgICBib29sIAlpbnRlcm5hbE9yZGVyOwogICAgYm9vbAluZXR3b3JrT3JkZXI7CiAg
ICB2b2lkCSp1bnVzZWQyOyAgCgogICAgUUNoYXIJZWF0X3dzKCk7CiAgICB1aW50IAl0c19nZXRs
aW5lKCBRQ2hhciogKTsKICAgIHZvaWQJdHNfdW5nZXRjKCBRQ2hhciApOwogICAgUUNoYXIJdHNf
Z2V0YygpOwogICAgdWludAl0c19nZXRidWYoIFFDaGFyKiwgdWludCApOwogICAgdm9pZAl0c19w
dXRjKGludCk7CiAgICB2b2lkCXRzX3B1dGMoUUNoYXIpOwogICAgYm9vbAl0c19pc3NwYWNlKFFD
aGFyKTsKICAgIGJvb2wJdHNfaXNkaWdpdChRQ2hhcik7CiAgICB1bG9uZwlpbnB1dF9iaW4oKTsK
ICAgIHVsb25nCWlucHV0X29jdCgpOwogICAgdWxvbmcJaW5wdXRfZGVjKCk7CiAgICB1bG9uZwlp
bnB1dF9oZXgoKTsKICAgIGRvdWJsZQlpbnB1dF9kb3VibGUoKTsKICAgIFFUZXh0U3RyZWFtICZ3
cml0ZUJsb2NrKCBjb25zdCBjaGFyKiBwLCB1aW50IGxlbiApOwogICAgUVRleHRTdHJlYW0gJndy
aXRlQmxvY2soIGNvbnN0IFFDaGFyKiBwLCB1aW50IGxlbiApOwoKcHJpdmF0ZToJIAoKICAgIFFU
ZXh0U3RyZWFtKCBjb25zdCBRVGV4dFN0cmVhbSAmICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0
b3I9KCBjb25zdCBRVGV4dFN0cmVhbSAmICk7Cgp9OwoKdHlwZWRlZiBRVGV4dFN0cmVhbSBRVFM7
CgpjbGFzcyAgIFFUZXh0SVN0cmVhbSA6IHB1YmxpYyBRVGV4dFN0cmVhbSB7CnB1YmxpYzoKICAg
IFFUZXh0SVN0cmVhbSggY29uc3QgUVN0cmluZyogcyApIDoKCVFUZXh0U3RyZWFtKChRU3RyaW5n
KilzLDB4MDAwMSApIHsgfQogICAgUVRleHRJU3RyZWFtKCBRQnl0ZUFycmF5IGJhICkgOgoJUVRl
eHRTdHJlYW0oYmEsMHgwMDAxICkgeyB9CiAgICBRVGV4dElTdHJlYW0oIEZJTEUgKmYgKSA6CglR
VGV4dFN0cmVhbShmLDB4MDAwMSApIHsgfQp9OwoKY2xhc3MgICBRVGV4dE9TdHJlYW0gOiBwdWJs
aWMgUVRleHRTdHJlYW0gewpwdWJsaWM6CiAgICBRVGV4dE9TdHJlYW0oIFFTdHJpbmcqIHMgKSA6
CglRVGV4dFN0cmVhbShzLDB4MDAwMiApIHsgfQogICAgUVRleHRPU3RyZWFtKCBRQnl0ZUFycmF5
IGJhICkgOgoJUVRleHRTdHJlYW0oYmEsMHgwMDAyICkgeyB9CiAgICBRVGV4dE9TdHJlYW0oIEZJ
TEUgKmYgKSA6CglRVGV4dFN0cmVhbShmLDB4MDAwMiApIHsgfQp9OwoKIAoKCgppbmxpbmUgUUlP
RGV2aWNlICpRVGV4dFN0cmVhbTo6ZGV2aWNlKCkgY29uc3QKeyByZXR1cm4gZGV2OyB9Cgppbmxp
bmUgYm9vbCBRVGV4dFN0cmVhbTo6YXRFbmQoKSBjb25zdAp7IHJldHVybiBkZXYgPyBkZXYtPmF0
RW5kKCkgOiBGQUxTRTsgfQoKaW5saW5lIGJvb2wgUVRleHRTdHJlYW06OmVvZigpIGNvbnN0Cnsg
cmV0dXJuIGF0RW5kKCk7IH0KCmlubGluZSBpbnQgUVRleHRTdHJlYW06OmZsYWdzKCkgY29uc3QK
eyByZXR1cm4gZmZsYWdzOyB9CgppbmxpbmUgaW50IFFUZXh0U3RyZWFtOjpmbGFncyggaW50IGYg
KQp7IGludCBvbGRmID0gZmZsYWdzOyAgZmZsYWdzID0gZjsgIHJldHVybiBvbGRmOyB9Cgppbmxp
bmUgaW50IFFUZXh0U3RyZWFtOjpzZXRmKCBpbnQgYml0cyApCnsgaW50IG9sZGYgPSBmZmxhZ3M7
ICBmZmxhZ3MgfD0gYml0czsgIHJldHVybiBvbGRmOyB9CgppbmxpbmUgaW50IFFUZXh0U3RyZWFt
OjpzZXRmKCBpbnQgYml0cywgaW50IG1hc2sgKQp7IGludCBvbGRmID0gZmZsYWdzOyAgZmZsYWdz
ID0gKGZmbGFncyAmIH5tYXNrKSB8IChiaXRzICYgbWFzayk7IHJldHVybiBvbGRmOyB9Cgppbmxp
bmUgaW50IFFUZXh0U3RyZWFtOjp1bnNldGYoIGludCBiaXRzICkKeyBpbnQgb2xkZiA9IGZmbGFn
czsgIGZmbGFncyAmPSB+Yml0czsJcmV0dXJuIG9sZGY7IH0KCmlubGluZSBpbnQgUVRleHRTdHJl
YW06OndpZHRoKCkgY29uc3QKeyByZXR1cm4gZndpZHRoOyB9CgppbmxpbmUgaW50IFFUZXh0U3Ry
ZWFtOjp3aWR0aCggaW50IHcgKQp7IGludCBvbGR3ID0gZndpZHRoOyAgZndpZHRoID0gdzsgIHJl
dHVybiBvbGR3OwkgfQoKaW5saW5lIGludCBRVGV4dFN0cmVhbTo6ZmlsbCgpIGNvbnN0CnsgcmV0
dXJuIGZpbGxjaGFyOyB9CgppbmxpbmUgaW50IFFUZXh0U3RyZWFtOjpmaWxsKCBpbnQgZiApCnsg
aW50IG9sZGMgPSBmaWxsY2hhcjsJZmlsbGNoYXIgPSBmOyAgcmV0dXJuIG9sZGM7ICB9Cgppbmxp
bmUgaW50IFFUZXh0U3RyZWFtOjpwcmVjaXNpb24oKSBjb25zdAp7IHJldHVybiBmcHJlYzsgfQoK
aW5saW5lIGludCBRVGV4dFN0cmVhbTo6cHJlY2lzaW9uKCBpbnQgcCApCnsgaW50IG9sZHAgPSBm
cHJlYzsgIGZwcmVjID0gcDsJIHJldHVybiBvbGRwOyAgfQoKIAoKCmlubGluZSBRQ2hhciBRVGV4
dFN0cmVhbTo6dHNfZ2V0YygpCnsgUUNoYXIgcjsgcmV0dXJuICggdHNfZ2V0YnVmKCAmciwxICkg
PT0gMSA/IHIgOiBRQ2hhcigodXNob3J0KTB4ZmZmZikgKTsgfQoKIAoKCgp0eXBlZGVmIFFUZXh0
U3RyZWFtICYgKCpRVFNGVU5DKShRVGV4dFN0cmVhbSAmKTsgCnR5cGVkZWYgaW50IChRVGV4dFN0
cmVhbTo6KlFUU01GSSkoaW50KTsJIAoKY2xhc3MgICBRVFNNYW5pcCB7CQkJIApwdWJsaWM6CiAg
ICBRVFNNYW5pcCggUVRTTUZJIG0sIGludCBhICkgeyBtZj1tOyBhcmc9YTsgfQogICAgdm9pZCBl
eGVjKCBRVGV4dFN0cmVhbSAmcyApIHsgKHMuKm1mKShhcmcpOyB9CnByaXZhdGU6CiAgICBRVFNN
RkkgbWY7CQkJCQkgCiAgICBpbnQJICAgYXJnOwkJCQkJIAp9OwoKICBpbmxpbmUgUVRleHRTdHJl
YW0gJm9wZXJhdG9yPj4oIFFUZXh0U3RyZWFtICZzLCBRVFNGVU5DIGYgKQp7IHJldHVybiAoKmYp
KCBzICk7IH0KCiAgaW5saW5lIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KCBRVGV4dFN0cmVhbSAm
cywgUVRTRlVOQyBmICkKeyByZXR1cm4gKCpmKSggcyApOyB9CgogIGlubGluZSBRVGV4dFN0cmVh
bSAmb3BlcmF0b3I8PCggUVRleHRTdHJlYW0gJnMsIFFUU01hbmlwIG0gKQp7IG0uZXhlYyhzKTsg
cmV0dXJuIHM7IH0KCiAgUVRleHRTdHJlYW0gJmJpbiggUVRleHRTdHJlYW0gJnMgKTsJIAogIFFU
ZXh0U3RyZWFtICZvY3QoIFFUZXh0U3RyZWFtICZzICk7CSAKICBRVGV4dFN0cmVhbSAmZGVjKCBR
VGV4dFN0cmVhbSAmcyApOwkgCiAgUVRleHRTdHJlYW0gJmhleCggUVRleHRTdHJlYW0gJnMgKTsJ
IAogIFFUZXh0U3RyZWFtICZlbmRsKCBRVGV4dFN0cmVhbSAmcyApOwkgCiAgUVRleHRTdHJlYW0g
JmZsdXNoKCBRVGV4dFN0cmVhbSAmcyApOwkgCiAgUVRleHRTdHJlYW0gJndzKCBRVGV4dFN0cmVh
bSAmcyApOwkgCiAgUVRleHRTdHJlYW0gJnJlc2V0KCBRVGV4dFN0cmVhbSAmcyApOwkgCgogIGlu
bGluZSBRVFNNYW5pcCBxU2V0VyggaW50IHcgKQp7CiAgICBRVFNNRkkgZnVuYyA9ICZRVGV4dFN0
cmVhbTo6d2lkdGg7CiAgICByZXR1cm4gUVRTTWFuaXAoZnVuYyx3KTsKfQoKICBpbmxpbmUgUVRT
TWFuaXAgcVNldEZpbGwoIGludCBmICkKewogICAgUVRTTUZJIGZ1bmMgPSAmUVRleHRTdHJlYW06
OmZpbGw7CiAgICByZXR1cm4gUVRTTWFuaXAoZnVuYyxmKTsKfQoKICBpbmxpbmUgUVRTTWFuaXAg
cVNldFByZWNpc2lvbiggaW50IHAgKQp7CiAgICBRVFNNRkkgZnVuYyA9ICZRVGV4dFN0cmVhbTo6
cHJlY2lzaW9uOwogICAgcmV0dXJuIFFUU01hbmlwKGZ1bmMscCk7Cn0KCgoKIyA0MyAiL3Vzci9s
b2NhbC9xdC9pbmNsdWRlL3F0bC5oIiAyCgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIFFU
ZXh0T1N0cmVhbUl0ZXJhdG9yCnsKcHJvdGVjdGVkOgogICAgUVRleHRPU3RyZWFtJiBzdHJlYW07
CiAgICBRU3RyaW5nIHNlcGFyYXRvcjsKCnB1YmxpYzoKICAgIFFUZXh0T1N0cmVhbUl0ZXJhdG9y
KCBRVGV4dE9TdHJlYW0mIHMpIDogc3RyZWFtKCBzICkge30KICAgIFFUZXh0T1N0cmVhbUl0ZXJh
dG9yKCBRVGV4dE9TdHJlYW0mIHMsIGNvbnN0IFFTdHJpbmcmIHNlcCApCgk6IHN0cmVhbSggcyAp
LCBzZXBhcmF0b3IoIHNlcCApICB7fQogICAgUVRleHRPU3RyZWFtSXRlcmF0b3I8VD4mIG9wZXJh
dG9yPSAoIGNvbnN0IFQmIHggKSB7CglzdHJlYW0gPDwgeDsKCWlmICggIXNlcGFyYXRvci5pc0Vt
cHR5KCkgKQoJICAgIHN0cmVhbSA8PCBzZXBhcmF0b3I7CglyZXR1cm4gKnRoaXM7CiAgICB9CiAg
ICBRVGV4dE9TdHJlYW1JdGVyYXRvcjxUPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0K
ICAgIFFUZXh0T1N0cmVhbUl0ZXJhdG9yPFQ+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7
IH0KICAgIFFUZXh0T1N0cmVhbUl0ZXJhdG9yPFQ+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4g
KnRoaXM7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgT3V0cHV0
SXRlcmF0b3I+CmlubGluZSBPdXRwdXRJdGVyYXRvciBxQ29weSggSW5wdXRJdGVyYXRvciBfYmVn
aW4sIElucHV0SXRlcmF0b3IgX2VuZCwKCQkJICAgICBPdXRwdXRJdGVyYXRvciBfZGVzdCApCnsK
ICAgIHdoaWxlKCBfYmVnaW4gIT0gX2VuZCApCgkqX2Rlc3QrKyA9ICpfYmVnaW4rKzsKICAgIHJl
dHVybiBfZGVzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIEJpSXRlcmF0b3IsIGNsYXNzIEJpT3V0cHV0
SXRlcmF0b3I+CmlubGluZSBCaU91dHB1dEl0ZXJhdG9yIHFDb3B5QmFja3dhcmQoIEJpSXRlcmF0
b3IgX2JlZ2luLCBCaUl0ZXJhdG9yIF9lbmQsCgkJCQkgICAgICAgQmlPdXRwdXRJdGVyYXRvciBf
ZGVzdCApCnsKICAgIHdoaWxlICggX2JlZ2luICE9IF9lbmQgKQoJKi0tX2Rlc3QgPSAqLS1fZW5k
OwogICAgcmV0dXJuIF9kZXN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvcjEsIGNs
YXNzIElucHV0SXRlcmF0b3IyPgppbmxpbmUgYm9vbCBxRXF1YWwoIElucHV0SXRlcmF0b3IxIGZp
cnN0MSwgSW5wdXRJdGVyYXRvcjEgbGFzdDEsIElucHV0SXRlcmF0b3IyIGZpcnN0MiApCnsKICAg
IGZvciAoIDsgZmlyc3QxICE9IGxhc3QxOyArK2ZpcnN0MSwgKytmaXJzdDIgKQoJaWYgKCAqZmly
c3QxICE9ICpmaXJzdDIgKQoJICAgIHJldHVybiBGQUxTRTsKICAgIHJldHVybiBUUlVFOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBUPgppbmxpbmUgdm9pZCBxRmls
bCggRm9yd2FyZEl0ZXJhdG9yIGZpcnN0LCBGb3J3YXJkSXRlcmF0b3IgbGFzdCwgY29uc3QgVCYg
dmFsICkKewogICAgZm9yICggOyBmaXJzdCAhPSBsYXN0OyArK2ZpcnN0ICkKCSpmaXJzdCA9IHZh
bDsKfQoKIyAxMTcgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xdGwuaCIKCgoKdGVtcGxhdGUgPGNs
YXNzIElucHV0SXRlcmF0b3IsIGNsYXNzIFQ+CmlubGluZSBJbnB1dEl0ZXJhdG9yIHFGaW5kKCBJ
bnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QsCgkJCSAgICBjb25zdCBUJiB2
YWwgKQp7CiAgICB3aGlsZSAoIGZpcnN0ICE9IGxhc3QgJiYgKmZpcnN0ICE9IHZhbCApCgkrK2Zp
cnN0OwogICAgcmV0dXJuIGZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvciwg
Y2xhc3MgVCwgY2xhc3MgU2l6ZT4KaW5saW5lIHZvaWQgcUNvdW50KCBJbnB1dEl0ZXJhdG9yIGZp
cnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QsIGNvbnN0IFQmIHZhbHVlLAoJCSAgICBTaXplJiBuICkK
ewogICAgZm9yICggOyBmaXJzdCAhPSBsYXN0OyArK2ZpcnN0ICkKCWlmICggKmZpcnN0ID09IHZh
bHVlICkKCSAgICArK247Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUgdm9pZCBxU3dhcCgg
VCYgX3ZhbHVlMSwgVCYgX3ZhbHVlMiApCnsKICAgIFQgdG1wID0gX3ZhbHVlMTsKICAgIF92YWx1
ZTEgPSBfdmFsdWUyOwogICAgX3ZhbHVlMiA9IHRtcDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBJbnB1
dEl0ZXJhdG9yPgogIHZvaWQgcUJ1YmJsZVNvcnQoIElucHV0SXRlcmF0b3IgYiwgSW5wdXRJdGVy
YXRvciBlICkKewogICAgIAogICAgSW5wdXRJdGVyYXRvciBsYXN0ID0gZTsKICAgIC0tbGFzdDsK
ICAgICAKICAgIGlmICggbGFzdCA9PSBiICkKCXJldHVybjsKCiAgICAgCiAgICB3aGlsZSggYiAh
PSBsYXN0ICkgewoJYm9vbCBzd2FwcGVkID0gRkFMU0U7CglJbnB1dEl0ZXJhdG9yIHN3YXBfcG9z
ID0gYjsKCUlucHV0SXRlcmF0b3IgeCA9IGU7CglJbnB1dEl0ZXJhdG9yIHkgPSB4OwoJeS0tOwoJ
ZG8gewoJICAgIC0teDsKCSAgICAtLXk7CgkgICAgaWYgKCAqeCA8ICp5ICkgewoJCXN3YXBwZWQg
PSBUUlVFOwoJCXFTd2FwKCAqeCwgKnkgKTsKCQlzd2FwX3BvcyA9IHk7CgkgICAgfQoJfSB3aGls
ZSggeSAhPSBiICk7CglpZiAoICFzd2FwcGVkICkKCSAgICByZXR1cm47CgliID0gc3dhcF9wb3M7
CgliKys7CiAgICB9Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgQ29udGFpbmVyPgppbmxpbmUgdm9pZCBx
QnViYmxlU29ydCggQ29udGFpbmVyICZjICkKewogIHFCdWJibGVTb3J0KCBjLmJlZ2luKCksIGMu
ZW5kKCkgKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBWYWx1ZT4KICB2b2lkIHFIZWFwU29ydFB1c2hE
b3duKCBWYWx1ZSogaGVhcCwgaW50IGZpcnN0LCBpbnQgbGFzdCApCnsKICAgIGludCByID0gZmly
c3Q7CiAgICB3aGlsZSggciA8PSBsYXN0LzIgKSB7CgkgCglpZiAoIGxhc3QgPT0gMipyICkgewoJ
ICAgICAKCSAgICBpZiAoIGhlYXBbcl0gPiBoZWFwWyAyKnIgXSApCgkJcVN3YXAoIGhlYXBbcl0s
IGhlYXBbIDIqciBdICk7CgkgICAgIAoJICAgIHIgPSBsYXN0OwoJfSBlbHNlIHsgIAoJICAgIGlm
ICggaGVhcFtyXSA+IGhlYXBbIDIqciBdICYmIGhlYXBbIDIqciBdIDw9IGhlYXBbIDIqcisxIF0g
KSB7CgkJIAoJCXFTd2FwKCBoZWFwW3JdLCBoZWFwWyAyKnIgXSApOwoJCXIgKj0gMjsKCSAgICB9
IGVsc2UgaWYgKCBoZWFwW3JdID4gaGVhcFsgMipyKzEgXSAmJgoJCQloZWFwWyAyKnIrMSBdIDwg
aGVhcFsgMipyIF0gKSB7CgkJIAoJCXFTd2FwKCBoZWFwW3JdLCBoZWFwWyAyKnIrMSBdICk7CgkJ
ciA9IDIqcisxOwoJICAgIH0gZWxzZSB7CgkJIAoJCXIgPSBsYXN0OwoJICAgIH0KCX0KICAgIH0K
fQoKCnRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJhdG9yLCBjbGFzcyBWYWx1ZT4KICB2b2lkIHFI
ZWFwU29ydEhlbHBlciggSW5wdXRJdGVyYXRvciBiLCBJbnB1dEl0ZXJhdG9yIGUsIFZhbHVlLCB1
aW50IG4gKQp7CiAgICAgCiAgICBJbnB1dEl0ZXJhdG9yIGluc2VydCA9IGI7CiAgICBWYWx1ZSog
cmVhbGhlYXAgPSBuZXcgVmFsdWVbIG4gXTsKICAgICAKICAgIFZhbHVlKiBoZWFwID0gcmVhbGhl
YXAgLSAxOwogICAgaW50IHNpemUgPSAwOwogICAgZm9yKCA7IGluc2VydCAhPSBlOyArK2luc2Vy
dCApIHsKCWhlYXBbKytzaXplXSA9ICppbnNlcnQ7CglpbnQgaSA9IHNpemU7Cgl3aGlsZSggaSA+
IDEgJiYgaGVhcFtpXSA8IGhlYXBbIGkgLyAyIF0gKSB7CgkgICAgcVN3YXAoIGhlYXBbaV0sIGhl
YXBbIGkgLyAyIF0gKTsKCSAgICBpIC89IDI7Cgl9CiAgICB9CgogICAgIAogICAgZm9yKCB1aW50
IGkgPSBuOyBpID4gMDsgaS0tICkgewoJKmIrKyA9IGhlYXBbMV07CglpZiAoIGkgPiAxICkgewoJ
ICAgIGhlYXBbMV0gPSBoZWFwW2ldOwoJICAgIHFIZWFwU29ydFB1c2hEb3duKCBoZWFwLCAxLCAo
aW50KWkgLSAxICk7Cgl9CiAgICB9CgogICAgZGVsZXRlW10gcmVhbGhlYXA7Cn0KCgp0ZW1wbGF0
ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KICB2b2lkIHFIZWFwU29ydCggSW5wdXRJdGVyYXRvciBi
LCBJbnB1dEl0ZXJhdG9yIGUgKQp7CiAgICAgCiAgICBpZiAoIGIgPT0gZSApCglyZXR1cm47Cgog
ICAgIAogICAgSW5wdXRJdGVyYXRvciBpdCA9IGI7CiAgICB1aW50IG4gPSAwOwogICAgd2hpbGUg
KCBpdCAhPSBlICkgewoJKytuOwoJKytpdDsKICAgIH0KCiAgICAgCiAgICAgCiAgICBxSGVhcFNv
cnRIZWxwZXIoIGIsIGUsICpiLCBuICk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgQ29udGFpbmVyPgog
IHZvaWQgcUhlYXBTb3J0KCBDb250YWluZXIgJmMgKQp7CiAgICBpZiAoIGMuYmVnaW4oKSA9PSBj
LmVuZCgpICkKCXJldHVybjsKCiAgICAgCiAgICAgCiAgICBxSGVhcFNvcnRIZWxwZXIoIGMuYmVn
aW4oKSwgYy5lbmQoKSwgKihjLmJlZ2luKCkpLCAodWludCljLmNvdW50KCkgKTsKfQoKCiMgNDAg
Ii91c3IvbG9jYWwvcXQvaW5jbHVkZS9xdmFsdWV2ZWN0b3IuaCIgMgoKCiMgMSAiL3Vzci9sb2Nh
bC9xdC9pbmNsdWRlL3FkYXRhc3RyZWFtLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgpjbGFzcyAgIFFEYXRhU3RyZWFtCQkJCSAKewpwdWJsaWM6CiAg
ICBRRGF0YVN0cmVhbSgpOwogICAgUURhdGFTdHJlYW0oIFFJT0RldmljZSAqICk7CiAgICBRRGF0
YVN0cmVhbSggUUJ5dGVBcnJheSwgaW50IG1vZGUgKTsKICAgIHZpcnR1YWwgflFEYXRhU3RyZWFt
KCk7CgogICAgUUlPRGV2aWNlCSpkZXZpY2UoKSBjb25zdDsKICAgIHZvaWQJIHNldERldmljZSgg
UUlPRGV2aWNlICogKTsKICAgIHZvaWQJIHVuc2V0RGV2aWNlKCk7CgogICAgYm9vbAkgYXRFbmQo
KSBjb25zdDsKICAgIGJvb2wJIGVvZigpIGNvbnN0OwoKICAgIGVudW0gQnl0ZU9yZGVyIHsgQmln
RW5kaWFuLCBMaXR0bGVFbmRpYW4gfTsKICAgIGludAkJIGJ5dGVPcmRlcigpCWNvbnN0OwogICAg
dm9pZAkgc2V0Qnl0ZU9yZGVyKCBpbnQgKTsKCiAgICBib29sCSBpc1ByaW50YWJsZURhdGEoKSBj
b25zdDsKICAgIHZvaWQJIHNldFByaW50YWJsZURhdGEoIGJvb2wgKTsKCiAgICBpbnQJCSB2ZXJz
aW9uKCkgY29uc3Q7CiAgICB2b2lkCSBzZXRWZXJzaW9uKCBpbnQgKTsKCiAgICBRRGF0YVN0cmVh
bSAmb3BlcmF0b3I+PiggUV9JTlQ4ICZpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+Pigg
UV9VSU5UOCAmaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFfSU5UMTYgJmkgKTsK
ICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRX1VJTlQxNiAmaSApOwogICAgUURhdGFTdHJl
YW0gJm9wZXJhdG9yPj4oIFFfSU5UMzIgJmkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+
KCBRX1VJTlQzMiAmaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFfTE9ORyAmaSAp
OwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFfVUxPTkcgJmkgKTsKCiAgICBRRGF0YVN0
cmVhbSAmb3BlcmF0b3I+PiggZmxvYXQgJmYgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+
KCBkb3VibGUgJmYgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBjaGFyIComc3RyICk7
CgogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFfSU5UOCBpICk7CiAgICBRRGF0YVN0cmVh
bSAmb3BlcmF0b3I8PCggUV9VSU5UOCBpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCgg
UV9JTlQxNiBpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUV9VSU5UMTYgaSApOwog
ICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFfSU5UMzIgaSApOwogICAgUURhdGFTdHJlYW0g
Jm9wZXJhdG9yPDwoIFFfVUlOVDMyIGkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBR
X0xPTkcgaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFfVUxPTkcgaSApOwogICAg
UURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIGZsb2F0IGYgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVy
YXRvcjw8KCBkb3VibGUgZiApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIGNvbnN0IGNo
YXIgKnN0ciApOwoKICAgIFFEYXRhU3RyZWFtICZyZWFkQnl0ZXMoIGNoYXIgKiYsIHVpbnQgJmxl
biApOwogICAgUURhdGFTdHJlYW0gJnJlYWRSYXdCeXRlcyggY2hhciAqLCB1aW50IGxlbiApOwoK
ICAgIFFEYXRhU3RyZWFtICZ3cml0ZUJ5dGVzKCBjb25zdCBjaGFyICosIHVpbnQgbGVuICk7CiAg
ICBRRGF0YVN0cmVhbSAmd3JpdGVSYXdCeXRlcyggY29uc3QgY2hhciAqLCB1aW50IGxlbiApOwoK
cHJpdmF0ZToKICAgIFFJT0RldmljZQkqZGV2OwogICAgYm9vbAkgb3duZGV2OwogICAgaW50CQkg
Ynl0ZW9yZGVyOwogICAgYm9vbAkgcHJpbnRhYmxlOwogICAgYm9vbAkgbm9zd2FwOwogICAgaW50
CQkgdmVyOwoKcHJpdmF0ZToJIAoKICAgIFFEYXRhU3RyZWFtKCBjb25zdCBRRGF0YVN0cmVhbSAm
ICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I9KCBjb25zdCBRRGF0YVN0cmVhbSAmICk7Cgp9
OwoKCiAKCgoKaW5saW5lIFFJT0RldmljZSAqUURhdGFTdHJlYW06OmRldmljZSgpIGNvbnN0Cnsg
cmV0dXJuIGRldjsgfQoKaW5saW5lIGJvb2wgUURhdGFTdHJlYW06OmF0RW5kKCkgY29uc3QKeyBy
ZXR1cm4gZGV2ID8gZGV2LT5hdEVuZCgpIDogVFJVRTsgfQoKaW5saW5lIGJvb2wgUURhdGFTdHJl
YW06OmVvZigpIGNvbnN0CnsgcmV0dXJuIGF0RW5kKCk7IH0KCmlubGluZSBpbnQgUURhdGFTdHJl
YW06OmJ5dGVPcmRlcigpIGNvbnN0CnsgcmV0dXJuIGJ5dGVvcmRlcjsgfQoKaW5saW5lIGJvb2wg
UURhdGFTdHJlYW06OmlzUHJpbnRhYmxlRGF0YSgpIGNvbnN0CnsgcmV0dXJuIHByaW50YWJsZTsg
fQoKaW5saW5lIHZvaWQgUURhdGFTdHJlYW06OnNldFByaW50YWJsZURhdGEoIGJvb2wgcCApCnsg
cHJpbnRhYmxlID0gcDsgfQoKaW5saW5lIGludCBRRGF0YVN0cmVhbTo6dmVyc2lvbigpIGNvbnN0
CnsgcmV0dXJuIHZlcjsgfQoKaW5saW5lIHZvaWQgUURhdGFTdHJlYW06OnNldFZlcnNpb24oIGlu
dCB2ICkKeyB2ZXIgPSB2OyB9CgppbmxpbmUgUURhdGFTdHJlYW0gJlFEYXRhU3RyZWFtOjpvcGVy
YXRvcj4+KCBRX1VJTlQ4ICZpICkKeyByZXR1cm4gKnRoaXMgPj4gKFFfSU5UOCYpaTsgfQoKaW5s
aW5lIFFEYXRhU3RyZWFtICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I+PiggUV9VSU5UMTYgJmkgKQp7
IHJldHVybiAqdGhpcyA+PiAoUV9JTlQxNiYpaTsgfQoKaW5saW5lIFFEYXRhU3RyZWFtICZRRGF0
YVN0cmVhbTo6b3BlcmF0b3I+PiggUV9VSU5UMzIgJmkgKQp7IHJldHVybiAqdGhpcyA+PiAoUV9J
TlQzMiYpaTsgfQoKaW5saW5lIFFEYXRhU3RyZWFtICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I+Pigg
UV9VTE9ORyAmaSApCnsgcmV0dXJuICp0aGlzID4+IChRX0xPTkcmKWk7IH0KCmlubGluZSBRRGF0
YVN0cmVhbSAmUURhdGFTdHJlYW06Om9wZXJhdG9yPDwoIFFfVUlOVDggaSApCnsgcmV0dXJuICp0
aGlzIDw8IChRX0lOVDgpaTsgfQoKaW5saW5lIFFEYXRhU3RyZWFtICZRRGF0YVN0cmVhbTo6b3Bl
cmF0b3I8PCggUV9VSU5UMTYgaSApCnsgcmV0dXJuICp0aGlzIDw8IChRX0lOVDE2KWk7IH0KCmlu
bGluZSBRRGF0YVN0cmVhbSAmUURhdGFTdHJlYW06Om9wZXJhdG9yPDwoIFFfVUlOVDMyIGkgKQp7
IHJldHVybiAqdGhpcyA8PCAoUV9JTlQzMilpOyB9CgppbmxpbmUgUURhdGFTdHJlYW0gJlFEYXRh
U3RyZWFtOjpvcGVyYXRvcjw8KCBRX1VMT05HIGkgKQp7IHJldHVybiAqdGhpcyA8PCAoUV9MT05H
KWk7IH0KCgoKCiMgNDIgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xdmFsdWV2ZWN0b3IuaCIgMgoK
CgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4u
Ly4uLy4uL2luY2x1ZGUvZysrLTMvdmVjdG9yIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDEgMwogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJh
a2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2NvbmZpZy5oIiAx
IDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiAKIAogCiAKIAogCiAKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog
CiAKIAogCiAKCgogCiAKIAogCiAKIAogCiAKIAogCiAKCgogCgogCiAKIAogCiAKIAogCgoKCgoK
CgoKIyAxNDggIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4v
Li4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgiIDMKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKICAgICAgCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDIzNCAi
L3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIgMwoKCiMgMjQ4ICIvdXNyL2xpYi9nY2MtbGliL2k1
ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2Nv
bmZpZy5oIiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiAKIAoKCgoK
CgoKCgoKCgoKCgoKCgogCiAKIyAzMTYgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1s
aW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgiIDMKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCiAKIAojIDM2ICIvdXNyL2xpYi9n
Y2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5k
cmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfcmVsb3BzLmgi
IDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCnRlbXBsYXRlIDxjbGFz
cyBfVHA+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYg
X195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+Cmlu
bGluZSBib29sIG9wZXJhdG9yPihjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICBy
ZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVy
YXRvcjw9KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feSA8
IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29u
c3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoK
IAoKCgogCiAKIAojIDM5ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45
NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKCgojIDEg
Ii91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9zdGxfcGFpci5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
IAoKCgoKCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CnN0cnVjdCBwYWlyIHsK
ICB0eXBlZGVmIF9UMSBmaXJzdF90eXBlOwogIHR5cGVkZWYgX1QyIHNlY29uZF90eXBlOwoKICBf
VDEgZmlyc3Q7CiAgX1QyIHNlY29uZDsKICBwYWlyKCkgOiBmaXJzdChfVDEoKSksIHNlY29uZChf
VDIoKSkge30KICBwYWlyKGNvbnN0IF9UMSYgX19hLCBjb25zdCBfVDImIF9fYikgOiBmaXJzdChf
X2EpLCBzZWNvbmQoX19iKSB7fQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9VMSwgY2xhc3MgX1UyPgog
IHBhaXIoY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9fcCkgOiBmaXJzdChfX3AuZmlyc3QpLCBzZWNv
bmQoX19wLnNlY29uZCkge30KCn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+Cmlu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFp
cjxfVDEsIF9UMj4mIF9feSkKeyAKICByZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJzdCAmJiBf
X3guc2Vjb25kID09IF9feS5zZWNvbmQ7IAp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBf
VDI+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25z
dCBwYWlyPF9UMSwgX1QyPiYgX195KQp7IAogIHJldHVybiBfX3guZmlyc3QgPCBfX3kuZmlyc3Qg
fHwgCiAgICAgICAgICghKF9feS5maXJzdCA8IF9feC5maXJzdCkgJiYgX194LnNlY29uZCA8IF9f
eS5zZWNvbmQpOyAKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgcGFp
cjxfVDEsIF9UMj4gbWFrZV9wYWlyKGNvbnN0IF9UMSYgX194LCBjb25zdCBfVDImIF9feSkKewog
IHJldHVybiBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7Cn0KCiAKCgoKIAogCiAKIyA0MiAiL3Vz
ci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNs
dWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAyIDMKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1
ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvdHlwZV90
cmFpdHMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKc3RydWN0IF9fdHJ1ZV90eXBlIHsKfTsKCnN0cnVjdCBfX2ZhbHNlX3R5cGUg
ewp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHMgeyAKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICAgdGhpc19kdW1teV9tZW1iZXJfbXVzdF9iZV9maXJzdDsKICAg
ICAgICAgICAgICAgICAgICAKCgoKCgogICAgCgoKCgoKCgoKIAoKICAgdHlwZWRlZiBfX2ZhbHNl
X3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2Zh
bHNlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2Zh
bHNlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBf
X2ZhbHNlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNl
X3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07CgoKCiAKIAogCgoKCnRlbXBsYXRlPD4gIHN0cnVjdCBf
X3R5cGVfdHJhaXRzPGJvb2w+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh
bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2
aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp
YWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJp
dmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9
OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxjaGFyPiB7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJh
aXRzPHNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxf
ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh
bF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFs
X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp
YWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsK
CnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGNoYXI+IHsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190
eXBlX3RyYWl0czx3Y2hhcl90PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp
YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJp
dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2
aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsK
fTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8c2hvcnQ+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90
cmFpdHM8dW5zaWduZWQgc2hvcnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJp
dmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190
cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry
aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNf
dHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBl
Owp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8aW50PiB7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJh
aXRzPHVuc2lnbmVkIGludD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFs
X2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp
YWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh
bF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2
aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07
Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRz
PHVuc2lnbmVkIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9k
ZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFs
X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxf
YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh
bF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoK
Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nIGxvbmc+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90
cmFpdHM8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz
X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBo
YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhh
c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAg
aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0Rf
dHlwZTsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8ZmxvYXQ+IHsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9f
dHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp
YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJp
dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2
aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsK
fTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgZG91YmxlPiB7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K
c3RydWN0IF9fdHlwZV90cmFpdHM8X1RwKj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhh
c190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAg
aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBo
YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg
IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9E
X3R5cGU7Cn07CgojIDI5NSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIu
OTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3R5cGVfdHJhaXRzLmgiIDMKCgoKIAogCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBzdHJ1Y3QgX0lzX2ludGVnZXIgewogIHR5cGVkZWYgX19mYWxz
ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPGJv
b2w+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiAg
c3RydWN0IF9Jc19pbnRlZ2VyPGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3Jh
bDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxzaWduZWQgY2hhcj4gewogIHR5
cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19p
bnRlZ2VyPHVuc2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK
fTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHdjaGFyX3Q+IHsKICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRl
Z2VyPHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0
ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgc2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxpbnQ+
IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVj
dCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRl
Z3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxsb25nPiB7CiAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVn
ZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoK
Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZyBsb25nPiB7CiAgdHlwZWRlZiBf
X3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8
dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07
CgoKCgoKIAogCiAKIyA0NSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIu
OTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAyIDMKCgoKCiMg
MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL2xp
bWl0cy5oIiAxIDMKIAoKCiAKCiMgMTE0ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2Ut
bGludXgvMi45NS4zL2luY2x1ZGUvbGltaXRzLmgiIDMKCgoKCgoKCiMgNDkgIi91c3IvbGliL2dj
Yy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst
My9zdGxfYWxnb2Jhc2UuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzCiAK
CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgogCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1
ODYtbWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoK
IyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRl
L3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvaTU4
Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoK
CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2
LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKCiMgMTg4
ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3Rk
ZGVmLmgiIDMKCgoKCgogCgoKCgogCgoKIyAyNjkgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5k
cmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIyAyODMgIi91c3IvbGli
L2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoK
CiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4z
L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAzMyAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgpleHRlcm4gIkMiIHsgCgoKCgogCnR5cGVkZWYgc3Ry
dWN0CiAgewogICAgaW50IHF1b3Q7CQkJIAogICAgaW50IHJlbTsJCQkgCiAgfSBkaXZfdDsKCiAK
CnR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBpbnQgcXVvdDsJCSAKICAgIGxvbmcgaW50IHJl
bTsJCSAKICB9IGxkaXZfdDsKCgoKIyA2NSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCgoKCiAK
CgoKIAoKCgoKCiAKCmV4dGVybiBzaXplX3QgX19jdHlwZV9nZXRfbWJfY3VyX21heCAgKHZvaWQp
ICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIGRvdWJsZSBhdG9mICAoX19jb25zdCBjaGFyICpfX25w
dHIpICB0aHJvdyAoKSAgOwogCmV4dGVybiBpbnQgYXRvaSAgKF9fY29uc3QgY2hhciAqX19ucHRy
KSAgdGhyb3cgKCkgIDsKIApleHRlcm4gbG9uZyBpbnQgYXRvbCAgKF9fY29uc3QgY2hhciAqX19u
cHRyKSAgdGhyb3cgKCkgIDsKCgogCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQg
YXRvbGwgIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgIHRocm93ICgpICA7CgoKIApleHRlcm4gZG91
YmxlIHN0cnRvZCAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCSAgIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyKSAgdGhyb3cgKCkgIDsKCgoKCgoKCgoKCiAKZXh0ZXJuIGxv
bmcgaW50IHN0cnRvbCAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCSAgICAg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpICB0aHJvdyAoKSAgOwogCmV4
dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwKCQkJCSAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCQkJCSAgICAg
ICBpbnQgX19iYXNlKSAgdGhyb3cgKCkgIDsKCgogCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcg
bG9uZyBpbnQgc3RydG9xICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCSAg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpICB0aHJvdyAoKSAgOwogCl9f
ZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91cSAgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkJICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLAoJCQkJCSAgICBpbnQgX19iYXNlKSAgdGhyb3cgKCkgIDsKCgoKIAoKIApfX2V4dGVu
c2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvbGwgIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLAoJCQkJICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jh
c2UpICB0aHJvdyAoKSAgOwogCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9u
ZyBpbnQgc3RydG91bGwgIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkJCSAg
ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCgkJCQkJICAgICBpbnQgX19iYXNlKSAgdGhy
b3cgKCkgIDsKCgoKIyAxOTAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwoKCgogCgoKZXh0ZXJu
IGRvdWJsZSBfX3N0cnRvZF9pbnRlcm5hbCAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsCgkJCQkgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCQkJCSAgICAgIGludCBf
X2dyb3VwKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVybmFsICAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCSAgICAgY2hhciAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsIGludCBfX2dyb3VwKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGxvbmcgZG91YmxlICBf
X3N0cnRvbGRfaW50ZXJuYWwgIChfX2NvbnN0IGNoYXIgKgoJCQkJCQlfX3Jlc3RyaWN0IF9fbnB0
ciwKCQkJCQkJY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCgkJCQkJCWludCBfX2dyb3VwKSAg
dGhyb3cgKCkgIDsKCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkJY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
CgkJCQkJaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApICB0aHJvdyAoKSAgOwoKCgpleHRlcm4gdW5z
aWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2ludGVybmFsICAoX19jb25zdCBjaGFyICoKCQkJCQkJ
ICBfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCQkJICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwK
CQkJCQkJICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgIHRocm93ICgpICA7CgoKCgpfX2V4dGVu
c2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9sbF9pbnRlcm5hbCAgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkJICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsCgkJCQkJICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApICB0aHJvdyAoKSAgOwoK
CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxf
aW50ZXJuYWwgIChfX2NvbnN0IGNoYXIgKgoJCQkJCQkJX19yZXN0cmljdCBfX25wdHIsCgkJCQkJ
CQljaGFyICoqCgkJCQkJCQlfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJCQkJCQkJaW50IF9fYmFzZSwK
CQkJCQkJCWludCBfX2dyb3VwKSAgdGhyb3cgKCkgIDsKCgoKCgoKIAoKZXh0ZXJuIF9faW5saW5l
IGRvdWJsZQpzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKSAKewogIHJldHVybiBfX3N0cnRvZF9pbnRlcm5h
bCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50CnN0cnRv
bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsCglpbnQgX19iYXNlKSB0aHJvdyAoKSAKewogIHJldHVybiBfX3N0cnRvbF9pbnRlcm5h
bCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpleHRlcm4gX19pbmxpbmUgdW5zaWdu
ZWQgbG9uZyBpbnQKc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCgkgaW50IF9fYmFzZSkgdGhyb3cgKCkgCnsKICByZXR1
cm4gX19zdHJ0b3VsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cgoj
IDI3MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9f
aW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u
cHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCWludCBfX2Jhc2UpIHRocm93ICgpIAp7
CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAw
KTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50
CnN0cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLAoJIGludCBfX2Jhc2UpIHRocm93ICgpIAp7CiAgcmV0dXJuIF9fc3RydG91
bGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KCgoKX19leHRlbnNp
b25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludApzdHJ0b2xsIChfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCSBpbnQgX19i
YXNlKSB0aHJvdyAoKSAKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19l
bmRwdHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWdu
ZWQgbG9uZyBsb25nIGludApzdHJ0b3VsbCAoX19jb25zdCBjaGFyICogX19yZXN0cmljdCBfX25w
dHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJICBpbnQgX19iYXNlKSB0aHJvdyAoKSAK
ewogIHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2Us
IDApOwp9CgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZQphdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0
cikgdGhyb3cgKCkgCnsKICByZXR1cm4gc3RydG9kIChfX25wdHIsIChjaGFyICoqKSBfX251bGwg
KTsKfQpleHRlcm4gX19pbmxpbmUgaW50CmF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJv
dyAoKSAKewogIHJldHVybiAoaW50KSBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCAs
IDEwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQKYXRvbCAoX19jb25zdCBjaGFyICpfX25w
dHIpIHRocm93ICgpIAp7CiAgcmV0dXJuIHN0cnRvbCAoX19ucHRyLCAoY2hhciAqKikgX19udWxs
ICwgMTApOwp9CgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludAph
dG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIAp7CiAgcmV0dXJuIHN0cnRvbGwg
KF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCAsIDEwKTsKfQoKCgoKCiAKCgpleHRlcm4gY2hhciAq
bDY0YSAgKGxvbmcgaW50IF9fbikgIHRocm93ICgpICA7CgogCmV4dGVybiBsb25nIGludCBhNjRs
ICAoX19jb25zdCBjaGFyICpfX3MpICB0aHJvdyAoKSAgOwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5
cy90eXBlcy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgpleHRlcm4gIkMiIHsg
CgoKCgp0eXBlZGVmIF9fdV9jaGFyIHVfY2hhcjsKdHlwZWRlZiBfX3Vfc2hvcnQgdV9zaG9ydDsK
dHlwZWRlZiBfX3VfaW50IHVfaW50Owp0eXBlZGVmIF9fdV9sb25nIHVfbG9uZzsKdHlwZWRlZiBf
X3F1YWRfdCBxdWFkX3Q7CnR5cGVkZWYgX191X3F1YWRfdCB1X3F1YWRfdDsKdHlwZWRlZiBfX2Zz
aWRfdCBmc2lkX3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBsb2ZmX3Q7CgoKCnR5cGVkZWYgX19pbm9f
dCBpbm9fdDsKCgoKCgoKCgoKCgp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CgoKCgp0eXBlZGVmIF9f
Z2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCgoKCnR5cGVkZWYgX19u
bGlua190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CgoKCgoKCgoKCgoKCgoK
CgoKdHlwZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoKdHlw
ZWRlZiBfX3NzaXplX3Qgc3NpemVfdDsKCgoKCnR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CnR5
cGVkZWYgX19jYWRkcl90IGNhZGRyX3Q7CgoKCnR5cGVkZWYgX19rZXlfdCBrZXlfdDsKCgoKCgoK
CiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK
CgoKCgoKCgoKIyA1MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgojIDYyICIvdXNyL2luY2x1
ZGUvdGltZS5oIiAzCgoKCgoKCgoKIAp0eXBlZGVmIF9fdGltZV90IHRpbWVfdDsKCgoKCgojIDg5
ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCgojIDI3OSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg
MwoKCgojIDEyMyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKIyAxICIvdXNyL2xp
Yi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEg
MwoKCgoKCgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIu
OTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGli
L2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoK
CiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgojIDEzMSAiL3Vzci9saWIv
Z2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoK
IAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4z
L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgojIDI3MSAiL3Vzci9saWIvZ2NjLWxp
Yi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIyAyODMg
Ii91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRk
ZWYuaCIgMwoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGlu
dXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
IyAxMjYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCiAKdHlwZWRlZiB1bnNpZ25l
ZCBsb25nIGludCB1bG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgdXNob3J0Owp0eXBl
ZGVmIHVuc2lnbmVkIGludCB1aW50OwoKCiAKCiMgMTYwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz
LmgiIDMKCgogCgoKCgoKCgp0eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9k
ZV9fICggIF9fUUlfXyApKSkgOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRlX18gKChf
X21vZGVfXyAoICBfX0hJX18gKSkpIDsKdHlwZWRlZiBpbnQgaW50MzJfdCBfX2F0dHJpYnV0ZV9f
ICgoX19tb2RlX18gKCAgX19TSV9fICkpKSA7CnR5cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1
dGVfXyAoKF9fbW9kZV9fICggIF9fRElfXyApKSkgOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVf
aW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoICBfX1FJX18gKSkpIDsKdHlwZWRlZiB1
bnNpZ25lZCBpbnQgdV9pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoICBfX0hJX18g
KSkpIDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21v
ZGVfXyAoICBfX1NJX18gKSkpIDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0
cmlidXRlX18gKChfX21vZGVfXyAoICBfX0RJX18gKSkpIDsKCnR5cGVkZWYgaW50IHJlZ2lzdGVy
X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX3dvcmRfXykpKTsKCgogCgoKCgoKCiAKIyAx
ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoK
CgoKCgoKCiAKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiAKCgoKCgoKIyAz
NSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAyIDMKCgogCgoKCgoKCgoKCgoKCgojIDE5MiAiL3Vz
ci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgogCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxl
Y3QuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgoKIAojIDEgIi91c3IvaW5j
bHVkZS9iaXRzL3NlbGVjdC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAzNiAi
L3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDMKCgoKCgoKCgoKCgoKIyA1NiAiL3Vzci9pbmNs
dWRlL2JpdHMvc2VsZWN0LmgiIDMKCiMgNzIgIi91c3IvaW5jbHVkZS9iaXRzL3NlbGVjdC5oIiAz
CgojIDMxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgogCiMgMSAiL3Vzci9pbmNs
dWRlL2JpdHMvc2lnc2V0LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgaW50
IF9fc2lnX2F0b21pY190OwoKIAoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQgbG9u
ZyBpbnQgX192YWxbKDEwMjQgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSkgXTsK
ICB9IF9fc2lnc2V0X3Q7CgoKCgogCgoKCgoKIyAxMjUgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3Nl
dC5oIiAzCgojIDM0ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgogCgojIDEgIi91
c3IvaW5jbHVkZS90aW1lLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoK
CiMgNTEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKIyA2MiAiL3Vzci9pbmNsdWRlL3RpbWUu
aCIgMwoKCgojIDczICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCgoKCgoKIAoKc3RydWN0IHRp
bWVzcGVjCiAgewogICAgbG9uZyBpbnQgdHZfc2VjOwkJIAogICAgbG9uZyBpbnQgdHZfbnNlYzsJ
CSAKICB9OwoKCgoKCiMgMjc5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCiMgMzggIi91c3Iv
aW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCmV4dGVybiAiQyIgeyAKCiAKCgoKc3RydWN0IHRp
bWV2YWw7Cgp0eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOwoKIAp0eXBlZGVmIF9fZmRfc2V0IGZk
X3NldDsKCiAKCgoKIAoKCgoKIAoKCgoKCgogCgoKCgpleHRlcm4gaW50IF9fc2VsZWN0ICAoaW50
IF9fbmZkcywgX19mZF9zZXQgKl9fcmVhZGZkcywKCQkJICBfX2ZkX3NldCAqX193cml0ZWZkcywg
X19mZF9zZXQgKl9fZXhjZXB0ZmRzLAoJCQkgIHN0cnVjdCB0aW1ldmFsICpfX3RpbWVvdXQpICB0
aHJvdyAoKSAgOwpleHRlcm4gaW50IHNlbGVjdCAgKGludCBfX25mZHMsIF9fZmRfc2V0ICpfX3Jl
YWRmZHMsCgkJCV9fZmRfc2V0ICpfX3dyaXRlZmRzLCBfX2ZkX3NldCAqX19leGNlcHRmZHMsCgkJ
CXN0cnVjdCB0aW1ldmFsICpfX3RpbWVvdXQpICB0aHJvdyAoKSAgOwoKIyA5MSAiL3Vzci9pbmNs
dWRlL3N5cy9zZWxlY3QuaCIgMwoKCn0gCgoKIyAxOTUgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu
aCIgMiAzCgoKIAojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMwogCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgojIDQ3ICIvdXNyL2luY2x1ZGUvc3lzL3N5c21hY3Jv
cy5oIiAzCgoKCiMgMTk4ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgoKIAoKdHlw
ZWRlZiBfX2Jsa2NudF90IGJsa2NudF90OwkgIAp0eXBlZGVmIF9fZnNibGtjbnRfdCBmc2Jsa2Nu
dF90OyAgCnR5cGVkZWYgX19mc2ZpbGNudF90IGZzZmlsY250X3Q7ICAKCgoKCgoKCgoKCgoKfSAK
CgojIDMzOSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgogCgoKCiAKZXh0ZXJuIGludDMy
X3QgcmFuZG9tICAodm9pZCkgIHRocm93ICgpICA7CgogCmV4dGVybiB2b2lkIHNyYW5kb20gICh1
bnNpZ25lZCBpbnQgX19zZWVkKSAgdGhyb3cgKCkgIDsKCiAKCgoKZXh0ZXJuIHZvaWQgKiAgaW5p
dHN0YXRlICAodW5zaWduZWQgaW50IF9fc2VlZCwgdm9pZCAqICBfX3N0YXRlYnVmLAoJCQkgICAg
ICAgc2l6ZV90IF9fc3RhdGVsZW4pICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIHZvaWQgKiAgc2V0
c3RhdGUgICh2b2lkICogIF9fc3RhdGVidWYpICB0aHJvdyAoKSAgOwoKCgogCgoKCnN0cnVjdCBy
YW5kb21fZGF0YQogIHsKICAgIGludDMyX3QgKmZwdHI7CQkgCiAgICBpbnQzMl90ICpycHRyOwkJ
IAogICAgaW50MzJfdCAqc3RhdGU7CQkgCiAgICBpbnQgcmFuZF90eXBlOwkJIAogICAgaW50IHJh
bmRfZGVnOwkJIAogICAgaW50IHJhbmRfc2VwOwkJIAogICAgaW50MzJfdCAqZW5kX3B0cjsJCSAK
ICB9OwoKZXh0ZXJuIGludCByYW5kb21fciAgKHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmlj
dCBfX2J1ZiwKCQkJICBpbnQzMl90ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSAgdGhyb3cgKCkgIDsK
CmV4dGVybiBpbnQgc3JhbmRvbV9yICAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRv
bV9kYXRhICpfX2J1ZikgIHRocm93ICgpICA7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICAodW5z
aWduZWQgaW50IF9fc2VlZCwKCQkJICAgICB2b2lkICogIF9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwK
CQkJICAgICBzaXplX3QgX19zdGF0ZWxlbiwKCQkJICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9f
cmVzdHJpY3QgX19idWYpICB0aHJvdyAoKSAgOwoKZXh0ZXJuIGludCBzZXRzdGF0ZV9yICAodm9p
ZCAqICBfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCgkJCSAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9f
cmVzdHJpY3QgX19idWYpICB0aHJvdyAoKSAgOwoKCgoKIApleHRlcm4gaW50IHJhbmQgICh2b2lk
KSAgdGhyb3cgKCkgIDsKIApleHRlcm4gdm9pZCBzcmFuZCAgKHVuc2lnbmVkIGludCBfX3NlZWQp
ICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIGludCByYW5kX3IgICh1bnNpZ25lZCBpbnQgKl9fc2Vl
ZCkgIHRocm93ICgpICA7CgoKCgogCgogCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAgKHZvaWQpICB0
aHJvdyAoKSAgOwpleHRlcm4gZG91YmxlIGVyYW5kNDggICh1bnNpZ25lZCBzaG9ydCBpbnQgX194
c3ViaVszXSkgIHRocm93ICgpICA7CgogCmV4dGVybiBsb25nIGludCBscmFuZDQ4ICAodm9pZCkg
IHRocm93ICgpICA7CmV4dGVybiBsb25nIGludCBucmFuZDQ4ICAodW5zaWduZWQgc2hvcnQgaW50
IF9feHN1YmlbM10pICB0aHJvdyAoKSAgOwoKIApleHRlcm4gbG9uZyBpbnQgbXJhbmQ0OCAgKHZv
aWQpICB0aHJvdyAoKSAgOwpleHRlcm4gbG9uZyBpbnQganJhbmQ0OCAgKHVuc2lnbmVkIHNob3J0
IGludCBfX3hzdWJpWzNdKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIHZvaWQgc3JhbmQ0OCAgKGxv
bmcgaW50IF9fc2VlZHZhbCkgIHRocm93ICgpICA7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBpbnQg
KnNlZWQ0OCAgKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10pICB0aHJvdyAoKSAgOwpl
eHRlcm4gdm9pZCBsY29uZzQ4ICAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10pICB0aHJv
dyAoKSAgOwoKIApzdHJ1Y3QgZHJhbmQ0OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50
IHhbM107CSAKICAgIHVuc2lnbmVkIHNob3J0IGludCBhWzNdOwkgCiAgICB1bnNpZ25lZCBzaG9y
dCBpbnQgYzsJIAogICAgdW5zaWduZWQgc2hvcnQgaW50IG9sZF94WzNdOyAgCiAgICBpbnQgaW5p
dDsJCQkgCiAgfTsKCgogCmV4dGVybiBpbnQgZHJhbmQ0OF9yICAoc3RydWN0IGRyYW5kNDhfZGF0
YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKCQkJICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0
KSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBlcmFuZDQ4X3IgICh1bnNpZ25lZCBzaG9ydCBpbnQg
X194c3ViaVszXSwKCQkJICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZl
ciwKCQkJICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSAgdGhyb3cgKCkgIDsKCiAKZXh0
ZXJuIGludCBscmFuZDQ4X3IgIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVm
ZmVyLAoJCQkgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgIHRocm93ICgpICA7CmV4
dGVybiBpbnQgbnJhbmQ0OF9yICAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCgkJCSAg
IHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCgkJCSAgIGxvbmcgaW50
ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBtcmFuZDQ4
X3IgIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAoJCQkgICBsb25n
IGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgIHRocm93ICgpICA7CmV4dGVybiBpbnQganJhbmQ0
OF9yICAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCgkJCSAgIHN0cnVjdCBkcmFuZDQ4
X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCgkJCSAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9f
cmVzdWx0KSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBzcmFuZDQ4X3IgIChsb25nIGludCBf
X3NlZWR2YWwsIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSAgdGhyb3cgKCkgIDsKCmV4
dGVybiBpbnQgc2VlZDQ4X3IgICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdLAoJCQkg
IHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSAgdGhyb3cgKCkgIDsKCmV4dGVybiBpbnQg
bGNvbmc0OF9yICAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sCgkJCSAgIHN0cnVjdCBk
cmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSAgdGhyb3cgKCkgIDsKCgoKCgoKCiAKZXh0ZXJuIHZvaWQg
KiAgbWFsbG9jICAoc2l6ZV90IF9fc2l6ZSkgIHRocm93ICgpICA7CiAKZXh0ZXJuIHZvaWQgKiAg
Y2FsbG9jICAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpICB0aHJvdyAoKSAgOwoKCgog
CgpleHRlcm4gdm9pZCAqICByZWFsbG9jICAodm9pZCAqICBfX3B0ciwgc2l6ZV90IF9fc2l6ZSkg
IHRocm93ICgpICA7CiAKZXh0ZXJuIHZvaWQgZnJlZSAgKHZvaWQgKiAgX19wdHIpICB0aHJvdyAo
KSAgOwoKCiAKZXh0ZXJuIHZvaWQgY2ZyZWUgICh2b2lkICogIF9fcHRyKSAgdGhyb3cgKCkgIDsK
CgoKIyAxICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1
ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1h
bmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoK
CiMgNjEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVk
ZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgoj
IDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRl
L3N0ZGRlZi5oIiAzCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJh
a2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgojIDI3MSAi
L3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRl
Zi5oIiAzCgoKIyAyODMgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1
LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2k1
ODYtbWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKIyAyNSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAyIDMKCgpleHRlcm4g
IkMiIHsgCgogCgoKIApleHRlcm4gdm9pZCAqICBhbGxvY2EgIChzaXplX3QgX19zaXplKSAgdGhy
b3cgKCkgIDsKCgoKCgp9IAoKCiMgNDkyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoK
IApleHRlcm4gdm9pZCAqICB2YWxsb2MgIChzaXplX3QgX19zaXplKSAgdGhyb3cgKCkgIDsKCgoK
IApleHRlcm4gdm9pZCBhYm9ydCAgKHZvaWQpICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKChf
X25vcmV0dXJuX18pKTsKCgogCmV4dGVybiBpbnQgYXRleGl0ICAodm9pZCAoKl9fZnVuYykgKHZv
aWQpKSAgdGhyb3cgKCkgIDsKCgogCgpleHRlcm4gaW50IF9fb25fZXhpdCAgKHZvaWQgKCpfX2Z1
bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKiAgX19hcmcpLAoJCQkgICB2b2lkICogIF9fYXJnKSAg
dGhyb3cgKCkgIDsKZXh0ZXJuIGludCBvbl9leGl0ICAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0
YXR1cywgdm9pZCAqICBfX2FyZyksCgkJCSB2b2lkICogIF9fYXJnKSAgdGhyb3cgKCkgIDsKCgog
CgoKZXh0ZXJuIHZvaWQgZXhpdCAgKGludCBfX3N0YXR1cykgIHRocm93ICgpICAgX19hdHRyaWJ1
dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKCgoKCiAKZXh0ZXJuIGNoYXIgKmdldGVudiAgKF9f
Y29uc3QgY2hhciAqX19uYW1lKSAgdGhyb3cgKCkgIDsKCiAKCmV4dGVybiBjaGFyICpfX3NlY3Vy
ZV9nZXRlbnYgIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgIHRocm93ICgpICA7CgoKIAogCgpleHRl
cm4gaW50IHB1dGVudiAgKGNoYXIgKl9fc3RyaW5nKSAgdGhyb3cgKCkgIDsKCgoKIAoKZXh0ZXJu
IGludCBzZXRlbnYgIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpfX3ZhbHVl
LAoJCQlpbnQgX19yZXBsYWNlKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIHZvaWQgdW5zZXRlbnYg
IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgIHRocm93ICgpICA7CgoKCiAKCgpleHRlcm4gaW50IGNs
ZWFyZW52ICAodm9pZCkgIHRocm93ICgpICA7CgoKCgogCgoKCmV4dGVybiBjaGFyICpta3RlbXAg
IChjaGFyICpfX3RlbXBsYXRlKSAgdGhyb3cgKCkgIDsKCiAKCgoKCmV4dGVybiBpbnQgbWtzdGVt
cCAgKGNoYXIgKl9fdGVtcGxhdGUpICB0aHJvdyAoKSAgOwoKCgogCmV4dGVybiBpbnQgc3lzdGVt
ICAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQpICB0aHJvdyAoKSAgOwoKCgoKCgoKCgoKIAoKCgoK
CmV4dGVybiBjaGFyICpyZWFscGF0aCAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUs
CgkJCSAgICBjaGFyICpfX3Jlc3RyaWN0IF9fcmVzb2x2ZWQpICB0aHJvdyAoKSAgOwoKCgogCgoK
dHlwZWRlZiBpbnQgKCpfX2NvbXBhcl9mbl90KSAgKF9fY29uc3Qgdm9pZCAqICwgX19jb25zdCB2
b2lkICogKSAgOwoKCgoKCgogCgpleHRlcm4gdm9pZCAqICBic2VhcmNoICAoX19jb25zdCB2b2lk
ICogIF9fa2V5LCBfX2NvbnN0IHZvaWQgKiAgX19iYXNlLAoJCQkgICAgICAgc2l6ZV90IF9fbm1l
bWIsIHNpemVfdCBfX3NpemUsCgkJCSAgICAgICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKSAgOwoK
IAoKZXh0ZXJuIHZvaWQgcXNvcnQgICh2b2lkICogIF9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNp
emVfdCBfX3NpemUsCgkJCSAgX19jb21wYXJfZm5fdCBfX2NvbXBhcikgIDsKCgogCmV4dGVybiBp
bnQgYWJzICAoaW50IF9feCkgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwpleHRlcm4gbG9uZyBpbnQgbGFicyAgKGxvbmcgaW50IF9feCkgIHRocm93ICgpICAgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgogCgogCmV4dGVybiBkaXZfdCBkaXYgIChpbnQg
X19udW1lciwgaW50IF9fZGVub20pICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKZXh0ZXJuIGxkaXZfdCBsZGl2ICAobG9uZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19k
ZW5vbSkgIHRocm93ICgpICAKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoK
CgoKIAoKCiAKCgpleHRlcm4gY2hhciAqZWN2dCAgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGln
aXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAoJCQlpbnQgKl9fcmVzdHJpY3QgX19zaWduKSAg
dGhyb3cgKCkgIDsKCiAKCgpleHRlcm4gY2hhciAqZmN2dCAgKGRvdWJsZSBfX3ZhbHVlLCBpbnQg
X19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAoJCQlpbnQgKl9fcmVzdHJpY3QgX19z
aWduKSAgdGhyb3cgKCkgIDsKCiAKCgpleHRlcm4gY2hhciAqZ2N2dCAgKGRvdWJsZSBfX3ZhbHVl
LCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGNoYXIg
KnFlY3Z0ICAobG9uZyBkb3VibGUgIF9fdmFsdWUsIGludCBfX25kaWdpdCwKCQkJIGludCAqX19y
ZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSAgdGhyb3cgKCkgIDsKZXh0
ZXJuIGNoYXIgKnFmY3Z0ICAobG9uZyBkb3VibGUgIF9fdmFsdWUsIGludCBfX25kaWdpdCwKCQkJ
IGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSAgdGhyb3cg
KCkgIDsKZXh0ZXJuIGNoYXIgKnFnY3Z0ICAobG9uZyBkb3VibGUgIF9fdmFsdWUsIGludCBfX25k
aWdpdCwgY2hhciAqX19idWYpICB0aHJvdyAoKSAgOwoKCgogCgpleHRlcm4gaW50IGVjdnRfciAg
KGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAoJ
CQlpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAoJCQlzaXpl
X3QgX19sZW4pICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IGZjdnRfciAgKGRvdWJsZSBfX3ZhbHVl
LCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAoJCQlpbnQgKl9fcmVzdHJp
Y3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAoJCQlzaXplX3QgX19sZW4pICB0aHJv
dyAoKSAgOwoKZXh0ZXJuIGludCBxZWN2dF9yICAobG9uZyBkb3VibGUgIF9fdmFsdWUsIGludCBf
X25kaWdpdCwKCQkJIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19z
aWduLAoJCQkgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSAgdGhyb3cgKCkg
IDsKZXh0ZXJuIGludCBxZmN2dF9yICAobG9uZyBkb3VibGUgIF9fdmFsdWUsIGludCBfX25kaWdp
dCwKCQkJIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAoJ
CQkgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSAgdGhyb3cgKCkgIDsKCgoK
CiAKCmV4dGVybiBpbnQgbWJsZW4gIChfX2NvbnN0IGNoYXIgKl9fcywgc2l6ZV90IF9fbikgIHRo
cm93ICgpICA7CiAKCmV4dGVybiBpbnQgbWJ0b3djICAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3
YywKCQkJX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgIHRocm93ICgp
ICA7CiAKCmV4dGVybiBpbnQgd2N0b21iICAoY2hhciAqX19zLCB3Y2hhcl90IF9fd2NoYXIpICB0
aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIHNpemVfdCBtYnN0b3djcyAgKHdjaGFyX3QgKl9fcmVzdHJp
Y3QgIF9fcHdjcywKCQkJICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3Qg
X19uKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gc2l6ZV90IHdjc3RvbWJzICAoY2hhciAqX19yZXN0
cmljdCBfX3MsCgkJCSAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywgc2l6
ZV90IF9fbikgIHRocm93ICgpICA7CgoKCiAKCgoKZXh0ZXJuIGludCBycG1hdGNoICAoX19jb25z
dCBjaGFyICpfX3Jlc3BvbnNlKSAgdGhyb3cgKCkgIDsKCgoKIyA3MzIgIi91c3IvaW5jbHVkZS9z
dGRsaWIuaCIgMwoKCgojIDc1NiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCgoKIyA3NjYgIi91
c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwoKCgoKCn0gCgoKIyA1MCAiL3Vzci9saWIvZ2NjLWxpYi9p
NTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9h
bGdvYmFzZS5oIiAyIDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4
LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCgoKCgoKIAoKIAoKCgoKIAoK
CiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIu
OTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBpbnQgcHRyZGlmZl90OwoKCgoK
CgoKCgogCgoKCgogCgogCgoKIyAxODggIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1s
aW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCgojIDI2OSAiL3Vz
ci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5o
IiAzCgoKCgoKCgoKCgoKCgoKCgogCgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1h
bmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoK
CgogCgoKCgoKCgojIDUxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45
NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAxICIv
dXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvbmV3Lmgi
IDEgMwogCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1
LjMvaW5jbHVkZS9uZXciIDEgMwogCiAKCgoKCiNwcmFnbWEgaW50ZXJmYWNlICJuZXciCiMgMSAi
L3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRl
Zi5oIiAxIDMKIyAzNDIgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1
LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKIyA4ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJh
a2UtbGludXgvMi45NS4zL2luY2x1ZGUvbmV3IiAyIDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9p
NTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL2V4Y2VwdGlvbiIgMSAzCiAKIAoKCgoK
I3ByYWdtYSBpbnRlcmZhY2UgImV4Y2VwdGlvbiIKCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ug
c3RkIHsKCmNsYXNzIGV4Y2VwdGlvbiB7CnB1YmxpYzoKICBleGNlcHRpb24gKCkgeyB9CiAgdmly
dHVhbCB+ZXhjZXB0aW9uICgpIHsgfQogIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCAoKSBjb25z
dDsKfTsKCmNsYXNzIGJhZF9leGNlcHRpb24gOiBwdWJsaWMgZXhjZXB0aW9uIHsKcHVibGljOgog
IGJhZF9leGNlcHRpb24gKCkgeyB9CiAgdmlydHVhbCB+YmFkX2V4Y2VwdGlvbiAoKSB7IH0KfTsK
CnR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAoKTsKdHlwZWRlZiB2b2lkICgqdW5l
eHBlY3RlZF9oYW5kbGVyKSAoKTsKCnRlcm1pbmF0ZV9oYW5kbGVyIHNldF90ZXJtaW5hdGUgKHRl
cm1pbmF0ZV9oYW5kbGVyKTsKdm9pZCB0ZXJtaW5hdGUgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9y
ZXR1cm5fXykpOwp1bmV4cGVjdGVkX2hhbmRsZXIgc2V0X3VuZXhwZWN0ZWQgKHVuZXhwZWN0ZWRf
aGFuZGxlcik7CnZvaWQgdW5leHBlY3RlZCAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9f
KSk7CmJvb2wgdW5jYXVnaHRfZXhjZXB0aW9uICgpOwoKfSAgCgp9ICAKCgojIDkgIi91c3IvbGli
L2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9uZXciIDIgMwoKCmV4
dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkIHsKCiAgY2xhc3MgYmFkX2FsbG9jIDogcHVibGlj
IGV4Y2VwdGlvbiB7CiAgcHVibGljOgogICAgdmlydHVhbCBjb25zdCBjaGFyKiB3aGF0KCkgY29u
c3QgdGhyb3coKSB7IHJldHVybiAiYmFkX2FsbG9jIjsgfQogIH07CgogIHN0cnVjdCBub3Rocm93
X3Qge307CiAgZXh0ZXJuIGNvbnN0IG5vdGhyb3dfdCBub3Rocm93OwogIHR5cGVkZWYgdm9pZCAo
Km5ld19oYW5kbGVyKSgpOwogIG5ld19oYW5kbGVyIHNldF9uZXdfaGFuZGxlciAobmV3X2hhbmRs
ZXIpOwoKfSAgCgogCnZvaWQgKm9wZXJhdG9yIG5ldyAoc2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRf
YWxsb2MpOwp2b2lkICpvcGVyYXRvciBuZXdbXSAoc2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxs
b2MpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9pZCAqKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9y
IGRlbGV0ZVtdICh2b2lkICopIHRocm93KCk7CnZvaWQgKm9wZXJhdG9yIG5ldyAoc2l6ZV90LCBj
b25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgKm9wZXJhdG9yIG5ld1tdIChzaXpl
X3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGUg
KHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRl
bGV0ZVtdICh2b2lkICosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKCiAKaW5saW5l
IHZvaWQgKm9wZXJhdG9yIG5ldyhzaXplX3QsIHZvaWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0dXJu
IHBsYWNlOyB9CmlubGluZSB2b2lkICpvcGVyYXRvciBuZXdbXShzaXplX3QsIHZvaWQgKnBsYWNl
KSB0aHJvdygpIHsgcmV0dXJuIHBsYWNlOyB9Cn0gIAoKCiMgNiAiL3Vzci9saWIvZ2NjLWxpYi9p
NTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL25ldy5oIiAyIDMKCgp1c2luZyBzdGQ6
Om5ld19oYW5kbGVyOwp1c2luZyBzdGQ6OnNldF9uZXdfaGFuZGxlcjsKCgojIDUyICIvdXNyL2xp
Yi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUv
ZysrLTMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFu
ZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaW9zdHJlYW0uaCIg
MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCiMgMSAi
L3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CiNwcmFnbWEgaW50ZXJmYWNlCgoKICAgCgoKCmV4dGVybiAiQyIgewoKfQogCgojIDEgIi91c3Iv
bGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRhcmcuaCIg
MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCiAKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCnZvaWQgdmFf
ZW5kIChfX2dudWNfdmFfbGlzdCk7CQkgCgoKIAoKCgogCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgogCiAKCgoKCgoKCgoKCgoKCiMgMTc1ICIvdXNyL2xpYi9nY2MtbGliL2k1
ODYtbWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkYXJnLmgiIDMKCgogCgoKCgogCgog
CgogCgp0eXBlZGVmIF9fZ251Y192YV9saXN0IHZhX2xpc3Q7CgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCiMgNDAgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4v
Li4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMiAzCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgpleHRlcm4gIkMrKyIgewpjbGFzcyBpc3RyZWFtOyAgCmNsYXNzIG9zdHJlYW07IGNs
YXNzIHN0cmVhbWJ1ZjsKCiAKCgoKCnR5cGVkZWYgX19vZmY2NF90ICAgc3RyZWFtb2ZmOwp0eXBl
ZGVmIF9fb2ZmNjRfdCAgIHN0cmVhbXBvczsKCgoKCnR5cGVkZWYgX19zc2l6ZV90ICAgc3RyZWFt
c2l6ZTsKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX2ZtdGZsYWdzOwp0eXBlZGVmIHVuc2lnbmVk
IGNoYXIgX19pb3N0YXRlOwoKc3RydWN0IF9pb3NfZmllbGRzCnsgIAogICAgc3RyZWFtYnVmICpf
c3RyYnVmOwogICAgb3N0cmVhbSogX3RpZTsKICAgIGludCBfd2lkdGg7CiAgICBfX2ZtdGZsYWdz
IF9mbGFnczsKICAgIHdjaGFyX3QgICBfZmlsbDsKICAgIF9faW9zdGF0ZSBfc3RhdGU7CiAgICBf
X2lvc3RhdGUgX2V4Y2VwdGlvbnM7CiAgICBpbnQgX3ByZWNpc2lvbjsKCiAgICB2b2lkICpfYXJy
YXlzOyAgCn07CgoKCgoKCgoKCgoKCgoKCiMgMTI0ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFu
ZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgi
IDMKCgpjbGFzcyBpb3MgOiBwdWJsaWMgX2lvc19maWVsZHMgewogIGlvcyYgb3BlcmF0b3I9KGlv
cyYpOyAgIAogIGlvcyAoY29uc3QgaW9zJik7ICAKICBwdWJsaWM6CiAgICB0eXBlZGVmIF9fZm10
ZmxhZ3MgZm10ZmxhZ3M7CiAgICB0eXBlZGVmIGludCBpb3N0YXRlOwogICAgdHlwZWRlZiBpbnQg
b3Blbm1vZGU7CiAgICB0eXBlZGVmIF9fc3NpemVfdCAgIHN0cmVhbXNpemU7CiAgICBlbnVtIGlv
X3N0YXRlIHsKCWdvb2RiaXQgPSAwICwKCWVvZmJpdCA9IDEgLAoJZmFpbGJpdCA9IDIgLAoJYmFk
Yml0ID0gNCAgfTsKICAgIGVudW0gb3Blbl9tb2RlIHsKCWluID0gMSAsCglvdXQgPSAyICwKCWF0
ZSA9IDQgLAoJYXBwID0gOCAsCgl0cnVuYyA9IDE2ICwKCW5vY3JlYXRlID0gMzIgLAoJbm9yZXBs
YWNlID0gNjQgLAoJYmluID0gMTI4ICwgIAoJYmluYXJ5ID0gMTI4ICB9OwogICAgZW51bSBzZWVr
X2RpciB7IGJlZywgY3VyLCBlbmR9OwogICAgdHlwZWRlZiBlbnVtIHNlZWtfZGlyIHNlZWtkaXI7
CiAgICAgCiAgICBlbnVtIHsgc2tpcHdzPSAwMSAsCgkgICBsZWZ0PSAwMiAsIHJpZ2h0PSAwNCAs
IGludGVybmFsPSAwMTAgLAoJICAgZGVjPSAwMjAgLCBvY3Q9IDA0MCAsIGhleD0gMDEwMCAsCgkg
ICBzaG93YmFzZT0gMDIwMCAsIHNob3dwb2ludD0gMDQwMCAsCgkgICB1cHBlcmNhc2U9IDAxMDAw
ICwgc2hvd3Bvcz0gMDIwMDAgLAoJICAgc2NpZW50aWZpYz0gMDQwMDAgLCBmaXhlZD0gMDEwMDAw
ICwKCSAgIHVuaXRidWY9IDAyMDAwMCAsIHN0ZGlvPSAwNDAwMDAgCgoKCgkgICB9OwogICAgZW51
bSB7ICAKCWJhc2VmaWVsZD1kZWMrb2N0K2hleCwKCWZsb2F0ZmllbGQgPSBzY2llbnRpZmljK2Zp
eGVkLAoJYWRqdXN0ZmllbGQgPSBsZWZ0K3JpZ2h0K2ludGVybmFsCiAgICB9OwoKIyAxNzcgIi91
c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5j
bHVkZS9nKystMy9zdHJlYW1idWYuaCIgMwoKCiAgICBvc3RyZWFtKiB0aWUoKSBjb25zdCB7IHJl
dHVybiBfdGllOyB9CiAgICBvc3RyZWFtKiB0aWUob3N0cmVhbSogdmFsKSB7IG9zdHJlYW0qIHNh
dmU9X3RpZTsgX3RpZT12YWw7IHJldHVybiBzYXZlOyB9CgogICAgIAogICAgd2NoYXJfdCAgIGZp
bGwoKSBjb25zdCB7IHJldHVybiBfZmlsbDsgfQogICAgd2NoYXJfdCAgIGZpbGwod2NoYXJfdCAg
IG5ld2YpCgl7d2NoYXJfdCAgIG9sZGYgPSBfZmlsbDsgX2ZpbGwgPSBuZXdmOyByZXR1cm4gb2xk
Zjt9CiAgICBmbXRmbGFncyBmbGFncygpIGNvbnN0IHsgcmV0dXJuIF9mbGFnczsgfQogICAgZm10
ZmxhZ3MgZmxhZ3MoZm10ZmxhZ3MgbmV3X3ZhbCkgewoJZm10ZmxhZ3Mgb2xkX3ZhbCA9IF9mbGFn
czsgX2ZsYWdzID0gbmV3X3ZhbDsgcmV0dXJuIG9sZF92YWw7IH0KICAgIGludCBwcmVjaXNpb24o
KSBjb25zdCB7IHJldHVybiBfcHJlY2lzaW9uOyB9CiAgICBpbnQgcHJlY2lzaW9uKGludCBuZXdw
KSB7Cgl1bnNpZ25lZCBzaG9ydCBvbGRwID0gX3ByZWNpc2lvbjsgX3ByZWNpc2lvbiA9ICh1bnNp
Z25lZCBzaG9ydCluZXdwOwoJcmV0dXJuIG9sZHA7IH0KICAgIGZtdGZsYWdzIHNldGYoZm10Zmxh
Z3MgdmFsKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdzIHw9IHZhbDsgcmV0
dXJuIG9sZGJpdHM7IH0KICAgIGZtdGZsYWdzIHNldGYoZm10ZmxhZ3MgdmFsLCBmbXRmbGFncyBt
YXNrKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdzID0gKF9mbGFncyAmIH5t
YXNrKSB8ICh2YWwgJiBtYXNrKTsgcmV0dXJuIG9sZGJpdHM7IH0KICAgIGZtdGZsYWdzIHVuc2V0
ZihmbXRmbGFncyBtYXNrKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdzICY9
IH5tYXNrOyByZXR1cm4gb2xkYml0czsgfQogICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4g
X3dpZHRoOyB9CiAgICBpbnQgd2lkdGgoaW50IHZhbCkgeyBpbnQgc2F2ZSA9IF93aWR0aDsgX3dp
ZHRoID0gdmFsOyByZXR1cm4gc2F2ZTsgfQoKCgoKICAgIHZvaWQgX3Rocm93X2ZhaWx1cmUoKSBj
b25zdCB7IH0KCiAgICB2b2lkIGNsZWFyKGlvc3RhdGUgc3RhdGUgPSAwKSB7Cglfc3RhdGUgPSBf
c3RyYnVmID8gc3RhdGUgOiBzdGF0ZXxiYWRiaXQ7CglpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMp
IF90aHJvd19mYWlsdXJlKCk7IH0KICAgIHZvaWQgc2V0KGlvc3RhdGUgZmxhZykgeyBfc3RhdGUg
fD0gZmxhZzsKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQog
ICAgdm9pZCBzZXRzdGF0ZShpb3N0YXRlIGZsYWcpIHsgX3N0YXRlIHw9IGZsYWc7ICAKCWlmIChf
c3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQogICAgaW50IGdvb2QoKSBj
b25zdCB7IHJldHVybiBfc3RhdGUgPT0gMDsgfQogICAgaW50IGVvZigpIGNvbnN0IHsgcmV0dXJu
IF9zdGF0ZSAmIGlvczo6ZW9mYml0OyB9CiAgICBpbnQgZmFpbCgpIGNvbnN0IHsgcmV0dXJuIF9z
dGF0ZSAmIChpb3M6OmJhZGJpdHxpb3M6OmZhaWxiaXQpOyB9CiAgICBpbnQgYmFkKCkgY29uc3Qg
eyByZXR1cm4gX3N0YXRlICYgaW9zOjpiYWRiaXQ7IH0KICAgIGlvc3RhdGUgcmRzdGF0ZSgpIGNv
bnN0IHsgcmV0dXJuIF9zdGF0ZTsgfQogICAgb3BlcmF0b3Igdm9pZCooKSBjb25zdCB7IHJldHVy
biBmYWlsKCkgPyAodm9pZCopMCA6ICh2b2lkKikoLTEpOyB9CiAgICBpbnQgb3BlcmF0b3IhKCkg
Y29uc3QgeyByZXR1cm4gZmFpbCgpOyB9CiAgICBpb3N0YXRlIGV4Y2VwdGlvbnMoKSBjb25zdCB7
IHJldHVybiBfZXhjZXB0aW9uczsgfQogICAgdm9pZCBleGNlcHRpb25zKGlvc3RhdGUgZW5hYmxl
KSB7CglfZXhjZXB0aW9ucyA9IGVuYWJsZTsKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Ro
cm93X2ZhaWx1cmUoKTsgfQoKICAgIHN0cmVhbWJ1ZiogcmRidWYoKSBjb25zdCB7IHJldHVybiBf
c3RyYnVmOyB9CiAgICBzdHJlYW1idWYqIHJkYnVmKHN0cmVhbWJ1ZiAqX3MpIHsKICAgICAgc3Ry
ZWFtYnVmICpfb2xkID0gX3N0cmJ1ZjsgX3N0cmJ1ZiA9IF9zOyBjbGVhciAoKTsgcmV0dXJuIF9v
bGQ7IH0KCiAgICBzdGF0aWMgaW50IHN5bmNfd2l0aF9zdGRpbyhpbnQgb24pOwogICAgc3RhdGlj
IHZvaWQgc3luY193aXRoX3N0ZGlvKCkgeyBzeW5jX3dpdGhfc3RkaW8oMSk7IH0KICAgIHN0YXRp
YyBmbXRmbGFncyBiaXRhbGxvYygpOwogICAgc3RhdGljIGludCB4YWxsb2MoKTsKICAgIHZvaWQq
JiBwd29yZChpbnQpOwogICAgdm9pZCogcHdvcmQoaW50KSBjb25zdDsKICAgIGxvbmcmIGl3b3Jk
KGludCk7CiAgICBsb25nIGl3b3JkKGludCkgY29uc3Q7CgoKCgoKCgoKCiAgICAgCiAgICBjbGFz
cyBJbml0IHsKICAgIHB1YmxpYzoKICAgICAgSW5pdCAoKSB7IH0KICAgIH07CgogIHByb3RlY3Rl
ZDoKICAgIGlubGluZSBpb3Moc3RyZWFtYnVmKiBzYiA9IDAsIG9zdHJlYW0qIHRpZV90byA9IDAp
OwogICAgaW5saW5lIHZpcnR1YWwgfmlvcygpOwogICAgaW5saW5lIHZvaWQgaW5pdChzdHJlYW1i
dWYqIHNiLCBvc3RyZWFtKiB0aWUgPSAwKTsKfTsKCgoKCnR5cGVkZWYgaW9zOjpzZWVrX2RpciBf
c2Vla19kaXI7CgoKIAogCiAKIAogCgogCiAKY2xhc3Mgc3RyZWFtbWFya2VyIDogcHJpdmF0ZSBf
SU9fbWFya2VyIHsKICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1idWY7CiAgICB2b2lkIHNldF9vZmZz
ZXQoaW50IG9mZnNldCkgeyBfcG9zID0gb2Zmc2V0OyB9CiAgcHVibGljOgogICAgc3RyZWFtbWFy
a2VyKHN0cmVhbWJ1ZiAqc2IpOwogICAgfnN0cmVhbW1hcmtlcigpOwogICAgaW50IHNhdmluZygp
IHsgcmV0dXJuICAxOyB9CiAgICBpbnQgZGVsdGEoc3RyZWFtbWFya2VyJik7CiAgICBpbnQgZGVs
dGEoKTsKfTsKCnN0cnVjdCBzdHJlYW1idWYgOiBwdWJsaWMgX0lPX0ZJTEUgeyAgCiAgICBmcmll
bmQgY2xhc3MgaW9zOwogICAgZnJpZW5kIGNsYXNzIGlzdHJlYW07CiAgICBmcmllbmQgY2xhc3Mg
b3N0cmVhbTsKICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1tYXJrZXI7CiAgICBjb25zdCB2b2lkICom
X3Z0YWJsZSgpIHsgcmV0dXJuICooY29uc3Qgdm9pZCoqKSgoX0lPX0ZJTEUqKXRoaXMgKyAxKTsg
fQogIHByb3RlY3RlZDoKICAgIHN0YXRpYyBzdHJlYW1idWYqIF9saXN0X2FsbDsgIAogICAgX0lP
X0ZJTEUqJiB4Y2hhaW4oKSB7IHJldHVybiBfY2hhaW47IH0KICAgIHZvaWQgX3VuX2xpbmsoKTsK
ICAgIHZvaWQgX2xpbmtfaW4oKTsKICAgIGNoYXIqIGdwdHIoKSBjb25zdAogICAgICB7IHJldHVy
biBfZmxhZ3MgICYgMHgxMDAgID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX3B0cjsgfQogICAg
Y2hhciogcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9wdHI7IH0KICAgIGNoYXIqIGVn
cHRyKCkgY29uc3QKICAgICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/IF9JT19zYXZlX2Vu
ZCA6IF9JT19yZWFkX2VuZDsgfQogICAgY2hhciogZXBwdHIoKSBjb25zdCB7IHJldHVybiBfSU9f
d3JpdGVfZW5kOyB9CiAgICBjaGFyKiBwYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9i
YXNlOyB9CiAgICBjaGFyKiBlYmFjaygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9mbGFncyAgJiAw
eDEwMCAgPyBfSU9fc2F2ZV9iYXNlIDogX0lPX3JlYWRfYmFzZTt9CiAgICBjaGFyKiBiYXNlKCkg
Y29uc3QgeyByZXR1cm4gX0lPX2J1Zl9iYXNlOyB9CiAgICBjaGFyKiBlYnVmKCkgY29uc3QgeyBy
ZXR1cm4gX0lPX2J1Zl9lbmQ7IH0KICAgIGludCBibGVuKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1
Zl9lbmQgLSBfSU9fYnVmX2Jhc2U7IH0KICAgIHZvaWQgeHB1dF9jaGFyKGNoYXIgYykgeyAqX0lP
X3dyaXRlX3B0cisrID0gYzsgfQogICAgaW50IHhmbGFncygpIHsgcmV0dXJuIF9mbGFncyA7IH0K
ICAgIGludCB4ZmxhZ3MoaW50IGYpIHtpbnQgZmwgPSBfZmxhZ3MgOyBfZmxhZ3MgID0gZjsgcmV0
dXJuIGZsO30KICAgIHZvaWQgeHNldGZsYWdzKGludCBmKSB7IF9mbGFncyAgfD0gZjsgfQogICAg
dm9pZCB4c2V0ZmxhZ3MoaW50IGYsIGludCBtYXNrKQogICAgICB7IF9mbGFncyAgPSAoX2ZsYWdz
ICAmIH5tYXNrKSB8IChmICYgbWFzayk7IH0KICAgIHZvaWQgZ2J1bXAoaW50IG4pCiAgICAgIHsg
X2ZsYWdzICAmIDB4MTAwICA/IChfSU9fc2F2ZV9iYXNlKz1uKTooX0lPX3JlYWRfcHRyKz1uKTt9
CiAgICB2b2lkIHBidW1wKGludCBuKSB7IF9JT193cml0ZV9wdHIgKz0gbjsgfQogICAgdm9pZCBz
ZXRiKGNoYXIqIGIsIGNoYXIqIGViLCBpbnQgYT0wKTsKICAgIHZvaWQgc2V0cChjaGFyKiBwLCBj
aGFyKiBlcCkKICAgICAgeyBfSU9fd3JpdGVfYmFzZT1fSU9fd3JpdGVfcHRyPXA7IF9JT193cml0
ZV9lbmQ9ZXA7IH0KICAgIHZvaWQgc2V0ZyhjaGFyKiBlYiwgY2hhciogZywgY2hhciAqZWcpIHsK
ICAgICAgaWYgKF9mbGFncyAgJiAweDEwMCApIF9JT19mcmVlX2JhY2t1cF9hcmVhKHRoaXMpOyAK
ICAgICAgX0lPX3JlYWRfYmFzZSA9IGViOyBfSU9fcmVhZF9wdHIgPSBnOyBfSU9fcmVhZF9lbmQg
PSBlZzsgfQogICAgY2hhciAqc2hvcnRidWYoKSB7IHJldHVybiBfc2hvcnRidWY7IH0KCiAgICBp
bnQgaW5fYmFja3VwKCkgeyByZXR1cm4gX2ZsYWdzICYgMHgxMDAgOyB9CiAgICAgCiAgICBjaGFy
ICpHYmFzZSgpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFk
X2Jhc2U7IH0KICAgICAKICAgIGNoYXIgKmVHcHRyKCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBf
SU9fc2F2ZV9lbmQgOiBfSU9fcmVhZF9lbmQ7IH0KICAgICAKICAgIGNoYXIgKkJiYXNlKCkgeyBy
ZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9fcmVhZF9iYXNlIDogX0lPX3NhdmVfYmFzZTsgfQogICAg
Y2hhciAqQnB0cigpIHsgcmV0dXJuIF9JT19iYWNrdXBfYmFzZTsgfQogICAgIAogICAgY2hhciAq
ZUJwdHIoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19yZWFkX2VuZCA6IF9JT19zYXZlX2Vu
ZDsgfQogICAgY2hhciAqTmJhc2UoKSB7IHJldHVybiBfSU9fc2F2ZV9iYXNlOyB9CiAgICBjaGFy
ICplTnB0cigpIHsgcmV0dXJuIF9JT19zYXZlX2VuZDsgfQogICAgaW50IGhhdmVfYmFja3VwKCkg
eyByZXR1cm4gX0lPX3NhdmVfYmFzZSAhPSBfX251bGwgOyB9CiAgICBpbnQgaGF2ZV9tYXJrZXJz
KCkgeyByZXR1cm4gX21hcmtlcnMgIT0gX19udWxsIDsgfQogICAgdm9pZCBmcmVlX2JhY2t1cF9h
cmVhKCk7CiAgICB2b2lkIHVuc2F2ZV9tYXJrZXJzKCk7ICAKICAgIGludCBwdXRfbW9kZSgpIHsg
cmV0dXJuIF9mbGFncyAmIDB4ODAwIDsgfQogICAgaW50IHN3aXRjaF90b19nZXRfbW9kZSgpOwog
ICAgCiAgICBzdHJlYW1idWYoaW50IGZsYWdzPTApOwogIHB1YmxpYzoKICAgIHN0YXRpYyBpbnQg
Zmx1c2hfYWxsKCk7CiAgICBzdGF0aWMgdm9pZCBmbHVzaF9hbGxfbGluZWJ1ZmZlcmVkKCk7ICAK
ICAgIHZpcnR1YWwgfnN0cmVhbWJ1ZigpOwogICAgdmlydHVhbCBpbnQgb3ZlcmZsb3coaW50IGMg
PSAoLTEpICk7ICAKICAgIHZpcnR1YWwgaW50IHVuZGVyZmxvdygpOyAgCiAgICB2aXJ0dWFsIGlu
dCB1ZmxvdygpOyAgCiAgICB2aXJ0dWFsIGludCBwYmFja2ZhaWwoaW50IGMpOwogCiAgICB2aXJ0
dWFsIHN0cmVhbXNpemUgeHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2
aXJ0dWFsIHN0cmVhbXNpemUgeHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2aXJ0
dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6
OmlufGlvczo6b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtwb3Moc3RyZWFtcG9zIHBv
cywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KTsKCiAgICBzdHJlYW1wb3MgcHVic2Vla29m
ZihzdHJlYW1vZmYgbywgX3NlZWtfZGlyIGQsIGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpCiAg
ICAgIHsgcmV0dXJuIF9JT19zZWVrb2ZmICh0aGlzLCBvLCBkLCBtb2RlKTsgfQogICAgc3RyZWFt
cG9zIHB1YnNlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0
KQogICAgICB7IHJldHVybiBfSU9fc2Vla3BvcyAodGhpcywgcG9zLCBtb2RlKTsgfQogICAgc3Ry
ZWFtcG9zIHNzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlv
czo6b3V0KTsKICAgIHN0cmVhbXBvcyBzc2Vla3BvcyhzdHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9
IGlvczo6aW58aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1idWYqIHNldGJ1ZihjaGFyKiBw
LCBpbnQgbGVuKTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICAgIHZpcnR1YWwgaW50IGRvYWxs
b2NhdGUoKTsKCiAgICBpbnQgc2Vla21hcmsoc3RyZWFtbWFya2VyJiBtYXJrLCBpbnQgZGVsdGEg
PSAwKTsKICAgIGludCBzcHV0YmFja2MoY2hhciBjKTsKICAgIGludCBzdW5nZXRjKCk7CiAgICBp
bnQgdW5idWZmZXJlZCgpIHsgcmV0dXJuIF9mbGFncyAmIDIgID8gMSA6IDA7IH0KICAgIGludCBs
aW5lYnVmZmVyZWQoKSB7IHJldHVybiBfZmxhZ3MgJiAweDIwMCAgPyAxIDogMDsgfQogICAgdm9p
ZCB1bmJ1ZmZlcmVkKGludCBpKQoJeyBpZiAoaSkgX2ZsYWdzIHw9IDIgOyBlbHNlIF9mbGFncyAm
PSB+MiA7IH0KICAgIHZvaWQgbGluZWJ1ZmZlcmVkKGludCBpKQoJeyBpZiAoaSkgX2ZsYWdzIHw9
IDB4MjAwIDsgZWxzZSBfZmxhZ3MgJj0gfjB4MjAwIDsgfQogICAgaW50IGFsbG9jYXRlKCkgeyAg
CglpZiAoYmFzZSgpIHx8IHVuYnVmZmVyZWQoKSkgcmV0dXJuIDA7CgllbHNlIHJldHVybiBkb2Fs
bG9jYXRlKCk7IH0KICAgICAKICAgIHZvaWQgYWxsb2NidWYoKSB7IGlmIChiYXNlKCkgPT0gX19u
dWxsICkgZG9hbGxvY2J1ZigpOyB9CiAgICB2b2lkIGRvYWxsb2NidWYoKTsKICAgIGludCBpbl9h
dmFpbCgpIHsgcmV0dXJuIF9JT19yZWFkX2VuZCAtIF9JT19yZWFkX3B0cjsgfQogICAgaW50IG91
dF93YWl0aW5nKCkgeyByZXR1cm4gX0lPX3dyaXRlX3B0ciAtIF9JT193cml0ZV9iYXNlOyB9CiAg
ICBzdHJlYW1zaXplIHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbikgeyByZXR1cm4g
eHNwdXRuKHMsIG4pOyB9CiAgICBzdHJlYW1zaXplIHBhZG4oY2hhciBwYWQsIHN0cmVhbXNpemUg
bikgeyByZXR1cm4gX0lPX3BhZG4odGhpcywgcGFkLCBuKTsgfQogICAgc3RyZWFtc2l6ZSBzZ2V0
bihjaGFyKiBzLCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIF9JT19zZ2V0bih0aGlzLCBzLCBuKTsg
fQogICAgaW50IGlnbm9yZShpbnQpOwogICAgaW50IGdldF9jb2x1bW4oKTsKICAgIGludCBzZXRf
Y29sdW1uKGludCk7CiAgICBsb25nIHNnZXRsaW5lKGNoYXIqIGJ1Ziwgc2l6ZV90ICAgbiwgY2hh
ciBkZWxpbSwgaW50IHB1dGJhY2tfZGVsaW0pOwogICAgaW50IHNwdXRjKGludCBjKSB7IHJldHVy
biBfSU9fcHV0YyhjLCB0aGlzKTsgfQogICAgaW50IHNidW1wYygpIHsgcmV0dXJuIF9JT19nZXRj
KHRoaXMpOyB9CiAgICBpbnQgc2dldGMoKSB7IHJldHVybiAoKCAgdGhpcyAgKS0+X0lPX3JlYWRf
cHRyID49ICggIHRoaXMgICktPl9JT19yZWFkX2VuZCAmJiBfX3VuZGVyZmxvdyAoICB0aGlzICAp
ID09ICgtMSkgID8gKC0xKSAgOiAqKHVuc2lnbmVkIGNoYXIgKikgKCAgdGhpcyAgKS0+X0lPX3Jl
YWRfcHRyKSAgOyB9CiAgICBpbnQgc25leHRjKCkgewoJaWYgKF9JT19yZWFkX3B0ciA+PSBfSU9f
cmVhZF9lbmQgJiYgX191bmRlcmZsb3codGhpcykgPT0gKC0xKSApCgkgIHJldHVybiAoLTEpIDsK
CWVsc2UgcmV0dXJuIF9JT19yZWFkX3B0cisrLCBzZ2V0YygpOyB9CiAgICB2b2lkIHN0b3NzYygp
IHsgaWYgKF9JT19yZWFkX3B0ciA8IF9JT19yZWFkX2VuZCkgX0lPX3JlYWRfcHRyKys7IH0KICAg
IGludCB2c2NhbihjaGFyIGNvbnN0ICpmbXQwLCBfX2dudWNfdmFfbGlzdCAgYXAsIGlvcyogc3Ry
ZWFtID0gX19udWxsICk7CiAgICBpbnQgc2NhbihjaGFyIGNvbnN0ICpmbXQwIC4uLik7CiAgICBp
bnQgdmZvcm0oY2hhciBjb25zdCAqZm10MCwgX19nbnVjX3ZhX2xpc3QgIGFwKTsKICAgIGludCBm
b3JtKGNoYXIgY29uc3QgKmZtdDAgLi4uKTsKCgoKCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lz
X3JlYWQoY2hhciogYnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1zaXpl
IHN5c193cml0ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVhbXBv
cyBzeXNfc2VlayhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICB2aXJ0dWFsIGludCBzeXNfY2xv
c2UoKTsKICAgIHZpcnR1YWwgaW50IHN5c19zdGF0KHZvaWQqKTsgIAoKICAgIHZpcnR1YWwgaW50
IHNob3dtYW55YygpOwogICAgdmlydHVhbCB2b2lkIGltYnVlKHZvaWQgKik7Cgp9OwoKIAogCgpj
bGFzcyBmaWxlYnVmIDogcHVibGljIHN0cmVhbWJ1ZiB7CiAgcHJvdGVjdGVkOgogICAgdm9pZCBp
bml0KCk7CiAgcHVibGljOgogICAgc3RhdGljIGNvbnN0IGludCBvcGVucHJvdDsgIAogICAgZmls
ZWJ1ZigpOwogICAgZmlsZWJ1ZihpbnQgZmQpOwogICAgZmlsZWJ1ZihpbnQgZmQsIGNoYXIqIHAs
IGludCBsZW4pOwoKCgogICAgfmZpbGVidWYoKTsKICAgIGZpbGVidWYqIGF0dGFjaChpbnQgZmQp
OwogICAgZmlsZWJ1Ziogb3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbW9k
ZSk7CiAgICBmaWxlYnVmKiBvcGVuKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpb3M6Om9wZW5tb2Rl
IG1vZGUsIGludCBwcm90ID0gMDY2NCk7CiAgICB2aXJ0dWFsIGludCB1bmRlcmZsb3coKTsKICAg
IHZpcnR1YWwgaW50IG92ZXJmbG93KGludCBjID0gKC0xKSApOwogICAgaW50IGlzX29wZW4oKSBj
b25zdCB7IHJldHVybiBfZmlsZW5vID49IDA7IH0KICAgIGludCBmZCgpIGNvbnN0IHsgcmV0dXJu
IGlzX29wZW4oKSA/IF9maWxlbm8gOiAoLTEpIDsgfQogICAgZmlsZWJ1ZiogY2xvc2UoKTsKICAg
IHZpcnR1YWwgaW50IGRvYWxsb2NhdGUoKTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtvZmYo
c3RyZWFtb2ZmLCBfc2Vla19kaXIsIGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpOwogICAgdmly
dHVhbCBzdHJlYW1idWYqIHNldGJ1ZihjaGFyKiBwLCBpbnQgbGVuKTsKICAgIHN0cmVhbXNpemUg
eHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICBzdHJlYW1zaXplIHhzZ2V0
bihjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgdmlydHVhbCBpbnQgc3luYygpOwogIHByb3Rl
Y3RlZDogIAogCiAgICBpbnQgaXNfcmVhZGluZygpIHsgcmV0dXJuIGViYWNrKCkgIT0gZWdwdHIo
KTsgfQogICAgY2hhciogY3VyX3B0cigpIHsgcmV0dXJuIGlzX3JlYWRpbmcoKSA/ICBncHRyKCkg
OiBwcHRyKCk7IH0KICAgICAKICAgIGNoYXIqIGZpbGVfcHRyKCkgeyByZXR1cm4gZUdwdHIoKTsg
fQogICAgIAogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c19yZWFkKGNoYXIqIGJ1Ziwgc3RyZWFt
c2l6ZSBzaXplKTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHN5c19zZWVrKHN0cmVhbW9mZiwgX3Nl
ZWtfZGlyKTsKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfd3JpdGUoY29uc3QgY2hhciosIHN0
cmVhbXNpemUpOwogICAgdmlydHVhbCBpbnQgc3lzX3N0YXQodm9pZCopOyAgCiAgICB2aXJ0dWFs
IGludCBzeXNfY2xvc2UoKTsKCgoKCn07CgppbmxpbmUgdm9pZCBpb3M6OmluaXQoc3RyZWFtYnVm
KiBzYiwgb3N0cmVhbSogdGllX3RvKSB7CgkJX3N0YXRlID0gc2IgPyBpb3M6Omdvb2RiaXQgOiBp
b3M6OmJhZGJpdDsgX2V4Y2VwdGlvbnM9MDsKCQlfc3RyYnVmPXNiOyBfdGllID0gdGllX3RvOyBf
d2lkdGg9MDsgX2ZpbGw9JyAnOwoKCQlfZmxhZ3M9aW9zOjpza2lwd3N8aW9zOjpkZWM7CgoKCgkJ
X3ByZWNpc2lvbj02OyBfYXJyYXlzID0gMDsgfQoKaW5saW5lIGlvczo6aW9zKHN0cmVhbWJ1Ziog
c2IsIG9zdHJlYW0qIHRpZV90bykgeyBpbml0KHNiLCB0aWVfdG8pOyB9CgppbmxpbmUgaW9zOjp+
aW9zKCkgewoKCgogICAgIAogICAgIAogICAgb3BlcmF0b3IgZGVsZXRlW10gKF9hcnJheXMpOwp9
Cn0gIAoKIyAzMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8u
Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2lvc3RyZWFtLmgiIDIgMwoKCmV4dGVybiAiQysrIiB7
CmNsYXNzIGlzdHJlYW07IGNsYXNzIG9zdHJlYW07CnR5cGVkZWYgaW9zJiAoKl9fbWFuaXApKGlv
cyYpOwp0eXBlZGVmIGlzdHJlYW0mICgqX19pbWFuaXApKGlzdHJlYW0mKTsKdHlwZWRlZiBvc3Ry
ZWFtJiAoKl9fb21hbmlwKShvc3RyZWFtJik7CgpleHRlcm4gaXN0cmVhbSYgd3MoaXN0cmVhbSYg
aW5zKTsKZXh0ZXJuIG9zdHJlYW0mIGZsdXNoKG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVh
bSYgZW5kbChvc3RyZWFtJiBvdXRzKTsKZXh0ZXJuIG9zdHJlYW0mIGVuZHMob3N0cmVhbSYgb3V0
cyk7CgpjbGFzcyBvc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgaW9zCnsKICAgICAKICAgIHZvaWQg
ZG9fb3NmeCgpOwogIHB1YmxpYzoKICAgIG9zdHJlYW0oKSB7IH0KICAgIG9zdHJlYW0oc3RyZWFt
YnVmKiBzYiwgb3N0cmVhbSogdGllZD0gX19udWxsICk7CiAgICBpbnQgb3BmeCgpIHsKCWlmICgh
Z29vZCgpKSByZXR1cm4gMDsKCWVsc2UgeyBpZiAoX3RpZSkgX3RpZS0+Zmx1c2goKTsgIDsgcmV0
dXJuIDE7fSB9CiAgICB2b2lkIG9zZngoKSB7ICA7CgkJICBpZiAoZmxhZ3MoKSAmIChpb3M6OnVu
aXRidWZ8aW9zOjpzdGRpbykpCgkJICAgICAgZG9fb3NmeCgpOyB9CiAgICBvc3RyZWFtJiBmbHVz
aCgpOwogICAgb3N0cmVhbSYgcHV0KGNoYXIgYykgeyBfc3RyYnVmLT5zcHV0YyhjKTsgcmV0dXJu
ICp0aGlzOyB9CgoKCgoKICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IGNoYXIgKnMsIHN0cmVhbXNp
emUgbik7CiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCB1bnNpZ25lZCBjaGFyICpzLCBzdHJlYW1z
aXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBvc3Ry
ZWFtJiB3cml0ZShjb25zdCBzaWduZWQgY2hhciAqcywgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJl
dHVybiB3cml0ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0cmVhbSYgd3JpdGUoY29uc3Qg
dm9pZCAqcywgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciop
cywgbik7fQogICAgb3N0cmVhbSYgc2Vla3Aoc3RyZWFtcG9zKTsKICAgIG9zdHJlYW0mIHNlZWtw
KHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsKICAgIHN0cmVhbXBvcyB0ZWxscCgpOwogICAgb3N0cmVh
bSYgZm9ybShjb25zdCBjaGFyICpmb3JtYXQgLi4uKTsKICAgIG9zdHJlYW0mIHZmb3JtKGNvbnN0
IGNoYXIgKmZvcm1hdCwgX19nbnVjX3ZhX2xpc3QgIGFyZ3MpOwoKICAgIG9zdHJlYW0mIG9wZXJh
dG9yPDwoY2hhciBjKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgY2hhciBjKSB7
IHJldHVybiAoKnRoaXMpIDw8IChjaGFyKWM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoc2ln
bmVkIGNoYXIgYykgeyByZXR1cm4gKCp0aGlzKSA8PCAoY2hhciljOyB9CiAgICBvc3RyZWFtJiBv
cGVyYXRvcjw8KGNvbnN0IGNoYXIgKnMpOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCB1
bnNpZ25lZCBjaGFyICpzKQoJeyByZXR1cm4gKCp0aGlzKSA8PCAoY29uc3QgY2hhciopczsgfQog
ICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCBzaWduZWQgY2hhciAqcykKCXsgcmV0dXJuICgq
dGhpcykgPDwgKGNvbnN0IGNoYXIqKXM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qg
dm9pZCAqcCk7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGludCBuKTsKICAgIG9zdHJlYW0mIG9w
ZXJhdG9yPDwodW5zaWduZWQgaW50IG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChsb25nIG4p
OwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIG4pOwoKICAgIF9fZXh0ZW5z
aW9uX18gb3N0cmVhbSYgb3BlcmF0b3I8PChsb25nIGxvbmcgbik7CiAgICBfX2V4dGVuc2lvbl9f
IG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBsb25nIG4pOwoKICAgIG9zdHJlYW0m
IG9wZXJhdG9yPDwoc2hvcnQgbikge3JldHVybiBvcGVyYXRvcjw8KChpbnQpbik7fQogICAgb3N0
cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBzaG9ydCBuKSB7cmV0dXJuIG9wZXJhdG9yPDwoKHVu
c2lnbmVkIGludCluKTt9CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChib29sIGIpIHsgcmV0dXJu
IG9wZXJhdG9yPDwoKGludCliKTsgfQoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoZG91YmxlIG4p
OwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChmbG9hdCBuKSB7IHJldHVybiBvcGVyYXRvcjw8KChk
b3VibGUpbik7IH0KCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcgZG91YmxlIG4pOwoKCgog
ICAgb3N0cmVhbSYgb3BlcmF0b3I8PChfX29tYW5pcCBmdW5jKSB7IHJldHVybiAoKmZ1bmMpKCp0
aGlzKTsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChfX21hbmlwIGZ1bmMpIHsoKmZ1bmMpKCp0
aGlzKTsgcmV0dXJuICp0aGlzO30KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoc3RyZWFtYnVmKik7
CgoKCn07CgpjbGFzcyBpc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgaW9zCnsKICAgICAKcHJvdGVj
dGVkOgogICAgc2l6ZV90ICAgX2djb3VudDsKCiAgICBpbnQgX3NraXBfd3MoKTsKICBwdWJsaWM6
CiAgICBpc3RyZWFtKCk6IF9nY291bnQgKDApIHsgfQogICAgaXN0cmVhbShzdHJlYW1idWYqIHNi
LCBvc3RyZWFtKnRpZWQ9IF9fbnVsbCApOwogICAgaXN0cmVhbSYgZ2V0KGNoYXIqIHB0ciwgaW50
IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXIq
IHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXQoKGNoYXIqKXB0
ciwgbGVuLCBkZWxpbSk7IH0KICAgIGlzdHJlYW0mIGdldChjaGFyJiBjKTsKICAgIGlzdHJlYW0m
IGdldCh1bnNpZ25lZCBjaGFyJiBjKSB7IHJldHVybiBnZXQoKGNoYXImKWMpOyB9CiAgICBpc3Ry
ZWFtJiBnZXRsaW5lKGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpOwogICAg
aXN0cmVhbSYgZ2V0bGluZSh1bnNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0g
PSAnXG4nKQoJeyByZXR1cm4gZ2V0bGluZSgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAg
aXN0cmVhbSYgZ2V0KHNpZ25lZCBjaGFyJiBjKSAgeyByZXR1cm4gZ2V0KChjaGFyJiljKTsgfQog
ICAgaXN0cmVhbSYgZ2V0KHNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAn
XG4nKQoJeyByZXR1cm4gZ2V0KChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFt
JiBnZXRsaW5lKHNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJ
eyByZXR1cm4gZ2V0bGluZSgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYg
cmVhZChjaGFyICpwdHIsIHN0cmVhbXNpemUgbik7CiAgICBpc3RyZWFtJiByZWFkKHVuc2lnbmVk
IGNoYXIgKnB0ciwgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiByZWFkKChjaGFyKilwdHIs
IG4pOyB9CiAgICBpc3RyZWFtJiByZWFkKHNpZ25lZCBjaGFyICpwdHIsIHN0cmVhbXNpemUgbikK
ICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYgcmVhZCh2
b2lkICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBu
KTsgfQogICAgaXN0cmVhbSYgZ2V0KHN0cmVhbWJ1ZiYgc2IsIGNoYXIgZGVsaW0gPSAnXG4nKTsK
ICAgIGlzdHJlYW0mIGdldHMoY2hhciAqKnMsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGludCBp
cGZ4KGludCBuZWVkID0gMCkgewoJaWYgKCFnb29kKCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7IHJl
dHVybiAwOyB9CgllbHNlIHsKCSAgIDsKCSAgaWYgKF90aWUgJiYgKG5lZWQgPT0gMCB8fCByZGJ1
ZigpLT5pbl9hdmFpbCgpIDwgbmVlZCkpIF90aWUtPmZsdXNoKCk7CgkgIGlmICghbmVlZCAmJiAo
ZmxhZ3MoKSAmIGlvczo6c2tpcHdzKSkgcmV0dXJuIF9za2lwX3dzKCk7CgkgIGVsc2UgcmV0dXJu
IDE7Cgl9CiAgICB9CiAgICBpbnQgaXBmeDAoKSB7ICAKCWlmICghZ29vZCgpKSB7IHNldChpb3M6
OmZhaWxiaXQpOyByZXR1cm4gMDsgfQoJZWxzZSB7CgkgICA7CgkgIGlmIChfdGllKSBfdGllLT5m
bHVzaCgpOwoJICBpZiAoZmxhZ3MoKSAmIGlvczo6c2tpcHdzKSByZXR1cm4gX3NraXBfd3MoKTsK
CSAgZWxzZSByZXR1cm4gMTsKCX0KICAgIH0KICAgIGludCBpcGZ4MSgpIHsgIAoJaWYgKCFnb29k
KCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7IHJldHVybiAwOyB9CgllbHNlIHsKCSAgIDsKCSAgaWYg
KF90aWUgJiYgcmRidWYoKS0+aW5fYXZhaWwoKSA9PSAwKSBfdGllLT5mbHVzaCgpOwoJICByZXR1
cm4gMTsKCX0KICAgIH0KICAgIHZvaWQgaXNmeCgpIHsgIDsgfQogICAgaW50IGdldCgpIHsgaWYg
KCFpcGZ4MSgpKSByZXR1cm4gKC0xKSA7CgkJZWxzZSB7IGludCBjaCA9IF9zdHJidWYtPnNidW1w
YygpOwoJCSAgICAgICBpZiAoY2ggPT0gKC0xKSApIHNldChpb3M6OmVvZmJpdCk7CgkJICAgICAg
IGlzZngoKTsKCQkgICAgICAgcmV0dXJuIGNoOwoJCSAgICAgfSB9CiAgICBpbnQgcGVlaygpOwog
ICAgc2l6ZV90ICAgZ2NvdW50KCkgeyByZXR1cm4gX2djb3VudDsgfQogICAgaXN0cmVhbSYgaWdu
b3JlKGludCBuPTEsIGludCBkZWxpbSA9ICgtMSkgKTsKICAgIGludCBzeW5jICgpOwogICAgaXN0
cmVhbSYgc2Vla2coc3RyZWFtcG9zKTsKICAgIGlzdHJlYW0mIHNlZWtnKHN0cmVhbW9mZiwgX3Nl
ZWtfZGlyKTsKICAgIHN0cmVhbXBvcyB0ZWxsZygpOwogICAgaXN0cmVhbSYgcHV0YmFjayhjaGFy
IGNoKSB7CglpZiAoZ29vZCgpICYmIF9zdHJidWYtPnNwdXRiYWNrYyhjaCkgPT0gKC0xKSApIGNs
ZWFyKGlvczo6YmFkYml0KTsKCXJldHVybiAqdGhpczt9CiAgICBpc3RyZWFtJiB1bmdldCgpIHsK
CWlmIChnb29kKCkgJiYgX3N0cmJ1Zi0+c3VuZ2V0YygpID09ICgtMSkgKSBjbGVhcihpb3M6OmJh
ZGJpdCk7CglyZXR1cm4gKnRoaXM7fQogICAgaXN0cmVhbSYgc2Nhbihjb25zdCBjaGFyICpmb3Jt
YXQgLi4uKTsKICAgIGlzdHJlYW0mIHZzY2FuKGNvbnN0IGNoYXIgKmZvcm1hdCwgX19nbnVjX3Zh
X2xpc3QgIGFyZ3MpOwoKCgoKCgogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihjaGFyKik7CiAgICBp
c3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGNoYXIqIHApIHsgcmV0dXJuIG9wZXJhdG9yPj4o
KGNoYXIqKXApOyB9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNpZ25lZCBjaGFyKnApIHsgcmV0
dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXApOyB9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGNoYXIm
IGMpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBjaGFyJiBjKSB7cmV0dXJuIG9w
ZXJhdG9yPj4oKGNoYXImKWMpO30KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc2lnbmVkIGNoYXIm
IGMpIHtyZXR1cm4gb3BlcmF0b3I+PigoY2hhciYpYyk7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+
PihpbnQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4obG9uZyYpOwoKICAgIF9fZXh0ZW5zaW9u
X18gaXN0cmVhbSYgb3BlcmF0b3I+Pihsb25nIGxvbmcmKTsKICAgIF9fZXh0ZW5zaW9uX18gaXN0
cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nIGxvbmcmKTsKCiAgICBpc3RyZWFtJiBvcGVy
YXRvcj4+KHNob3J0Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYpOwog
ICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJik7CiAgICBpc3RyZWFtJiBvcGVy
YXRvcj4+KHVuc2lnbmVkIHNob3J0Jik7CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihib29sJik7
CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihmbG9hdCYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+
Pihkb3VibGUmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4obG9uZyBkb3VibGUmKTsKICAgIGlz
dHJlYW0mIG9wZXJhdG9yPj4oIF9fbWFuaXAgZnVuYykgeygqZnVuYykoKnRoaXMpOyByZXR1cm4g
KnRoaXM7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihfX2ltYW5pcCBmdW5jKSB7IHJldHVybiAo
KmZ1bmMpKCp0aGlzKTsgfQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzdHJlYW1idWYqKTsKfTsK
CmNsYXNzIGlvc3RyZWFtIDogcHVibGljIGlzdHJlYW0sIHB1YmxpYyBvc3RyZWFtCnsKICBwdWJs
aWM6CiAgICBpb3N0cmVhbSgpIHsgfQogICAgaW9zdHJlYW0oc3RyZWFtYnVmKiBzYiwgb3N0cmVh
bSp0aWVkPSBfX251bGwgKTsKfTsKCmNsYXNzIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24gOiBwdWJs
aWMgaXN0cmVhbSB7CnB1YmxpYzoKICBfSU9faXN0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0o
aXN0cmVhbSYpOwogIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShfSU9faXN0cmVh
bV93aXRoYXNzaWduJiByaHMpCiAgICB7IHJldHVybiBvcGVyYXRvcj0gKHN0YXRpY19jYXN0PGlz
dHJlYW0mPiAocmhzKSk7IH0KfTsKCmNsYXNzIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24gOiBwdWJs
aWMgb3N0cmVhbSB7CnB1YmxpYzoKICBfSU9fb3N0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0o
b3N0cmVhbSYpOwogIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShfSU9fb3N0cmVh
bV93aXRoYXNzaWduJiByaHMpCiAgICB7IHJldHVybiBvcGVyYXRvcj0gKHN0YXRpY19jYXN0PG9z
dHJlYW0mPiAocmhzKSk7IH0KfTsKCmV4dGVybiBfSU9faXN0cmVhbV93aXRoYXNzaWduIGNpbjsK
IApleHRlcm4gX0lPX29zdHJlYW1fd2l0aGFzc2lnbiBjb3V0LCBjZXJyOwoKZXh0ZXJuIF9JT19v
c3RyZWFtX3dpdGhhc3NpZ24gY2xvZwoKCgo7CgpleHRlcm4gaXN0cmVhbSYgbG9jayhpc3RyZWFt
JiBpbnMpOwpleHRlcm4gaXN0cmVhbSYgdW5sb2NrKGlzdHJlYW0mIGlucyk7CmV4dGVybiBvc3Ry
ZWFtJiBsb2NrKG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgdW5sb2NrKG9zdHJlYW0m
IG91dHMpOwoKc3RydWN0IElvc3RyZWFtX2luaXQgeyB9IDsgICAKCmlubGluZSBpb3MmIGRlYyhp
b3MmIGkpCnsgaS5zZXRmKGlvczo6ZGVjLCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJl
dHVybiBpOyB9CmlubGluZSBpb3MmIGhleChpb3MmIGkpCnsgaS5zZXRmKGlvczo6aGV4LCBpb3M6
OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9CmlubGluZSBpb3MmIG9jdChpb3Mm
IGkpCnsgaS5zZXRmKGlvczo6b2N0LCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVy
biBpOyB9Cn0gIAoKCiMgNTMgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8y
Ljk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKCiMg
MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8u
Li9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKIAoKCgoKCgogCgpzdHJ1Y3QgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3Qgb3V0
cHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGZvcndhcmRfaXRlcmF0b3JfdGFnIDogcHVibGlj
IGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFn
IDogcHVibGljIGZvcndhcmRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19p
dGVyYXRvcl90YWcgOiBwdWJsaWMgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcge307CgogCiAK
IAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBpbnB1dF9p
dGVyYXRvciB7CiAgdHlwZWRlZiBpbnB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7
CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0
YW5jZSAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAg
ICAgcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07Cgpz
dHJ1Y3Qgb3V0cHV0X2l0ZXJhdG9yIHsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRl
cmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7
CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVm
IHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAg
ICAgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBz
dHJ1Y3QgZm9yd2FyZF9pdGVyYXRvciB7CiAgdHlwZWRlZiBmb3J3YXJkX2l0ZXJhdG9yX3RhZyBp
dGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgIHZhbHVlX3R5
cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlw
ZWRlZiBfVHAqICAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiAgICAgICAg
ICAgICAgICAgcmVmZXJlbmNlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0
YW5jZT4gc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3IgewogIHR5cGVkZWYgYmlkaXJlY3Rp
b25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlICAgICAgICAg
ICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICAgICAgICAgICAg
ICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgICAgICAgICAgICAgICAgICAgICAgIHJlZmVy
ZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IHJh
bmRvbV9hY2Nlc3NfaXRlcmF0b3IgewogIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90
YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlICAgICAgICAgICAgICAgICAgZGlmZmVy
ZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsK
ICB0eXBlZGVmIF9UcCYgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsKCiMgOTgg
Ii91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JdGVy
YXRvcj4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0
b3I6Oml0ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdHlwZW5h
bWUgX0l0ZXJhdG9yOjp2YWx1ZV90eXBlICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdHlw
ZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnBvaW50ZXIgICAgICAgICAgIHBvaW50ZXI7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnJlZmVyZW5jZSAgICAgICAgIHJlZmVyZW5jZTsKfTsK
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHM8X1RwKj4gewogIHR5
cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlw
ZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHB0
cmRpZmZfdCAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAq
ICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgICAgICAgICAg
ICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qg
aXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9UcCo+IHsKICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRl
cmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgICAgICAgICAgICAgICAg
ICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgY29uc3QgX1RwKiAgICAgICAgICAgICAgICAg
IHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAmICAgICAgICAgICAgICAgICAgcmVmZXJlbmNl
Owp9OwoKIAogCiAKIAoKIAoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKX19pdGVyYXRvcl9jYXRl
Z29yeShjb25zdCBfSXRlciYpCnsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9DYXRlZ29yeTsKICByZXR1cm4gX0NhdGVnb3J5KCk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSoKX19kaXN0YW5jZV90eXBlKGNvbnN0IF9JdGVyJikK
ewogIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojpk
aWZmZXJlbmNlX3R5cGUqPigwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoKX192YWx1ZV90eXBlKGNv
bnN0IF9JdGVyJikKewogIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0l0ZXI+Ojp2YWx1ZV90eXBlKj4oMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5s
aW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5Cml0
ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9faXRlcmF0b3JfY2F0
ZWdvcnkoX19pKTsgfQoKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSoKZGlzdGFuY2VfdHlwZShjb25z
dCBfSXRlciYgX19pKSB7IHJldHVybiBfX2Rpc3RhbmNlX3R5cGUoX19pKTsgfQoKdGVtcGxhdGUg
PGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFs
dWVfdHlwZSoKdmFsdWVfdHlwZShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX3ZhbHVlX3R5
cGUoX19pKTsgfQoKCgoKCiMgMjU5ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGlu
dXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZv
aWQgX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlJiBfX24sIGlucHV0X2l0ZXJhdG9y
X3RhZykKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgeyArK19fZmlyc3Q7ICsrX19uOyB9
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5j
ZT4KaW5saW5lIHZvaWQgX19kaXN0YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwg
CiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgCiAg
ICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlJiBfX24sIHJhbmRvbV9hY2Nlc3NfaXRlcmF0
b3JfdGFnKQp7CiAgX19uICs9IF9fbGFzdCAtIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBkaXN0YW5jZShfSW5w
dXRJdGVyYXRvciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3Ig
X19sYXN0LCBfRGlzdGFuY2UmIF9fbikKewogIF9fZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBf
X24sIGl0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0
b3I+OjpkaWZmZXJlbmNlX3R5cGUKX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf
SW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwog
IHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgKytfX2ZpcnN0OyArK19fbjsKICB9CiAg
cmV0dXJuIF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5s
aW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZm
ZXJlbmNlX3R5cGUKX19kaXN0YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJh
dG9yX3RhZykgewogIHJldHVybiBfX2xhc3QgLSBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRl
cmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwg
X0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0lucHV0SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSAKICAgIF9DYXRlZ29yeTsKICBy
ZXR1cm4gX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9DYXRlZ29yeSgpKTsKfQoKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2Fk
dmFuY2UoX0lucHV0SXRlciYgX19pLCBfRGlzdGFuY2UgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcp
IHsKICB3aGlsZSAoX19uLS0pICsrX19pOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVj
dGlvbmFsSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9C
aWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwgCiAgICAgICAgICAgICAg
ICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykgewogIGlmIChfX24gPj0gMCkKICAg
IHdoaWxlIChfX24tLSkgKytfX2k7CiAgZWxzZQogICAgd2hpbGUgKF9fbisrKSAtLV9faTsKfQoK
CgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5j
ZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciYgX19pLCBfRGlz
dGFuY2UgX19uLCAKICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3Jf
dGFnKSB7CiAgX19pICs9IF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBj
bGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGFkdmFuY2UoX0lucHV0SXRlcmF0b3ImIF9faSwg
X0Rpc3RhbmNlIF9fbikgewogIF9fYWR2YW5jZShfX2ksIF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnko
X19pKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFzcyBiYWNrX2luc2VydF9p
dGVyYXRvciB7CnByb3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoKICB0
eXBlZGVmIF9Db250YWluZXIgICAgICAgICAgY29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRw
dXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCAgICAgICAg
ICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJl
bmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRl
ZiB2b2lkICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKCiAgZXhwbGljaXQgYmFja19pbnNlcnRf
aXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7fQogIGJhY2tfaW5z
ZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29u
dGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7IAogICAgY29udGFpbmVyLT5wdXNoX2JhY2so
X192YWx1ZSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9D
b250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGJhY2tfaW5zZXJ0X2l0
ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBiYWNr
X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0
aGlzOyB9Cn07CgojIDM3OCAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIu
OTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCgoKdGVtcGxh
dGUgPGNsYXNzIF9Db250YWluZXI+CmlubGluZSBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFp
bmVyPiBiYWNrX2luc2VydGVyKF9Db250YWluZXImIF9feCkgewogIHJldHVybiBiYWNrX2luc2Vy
dF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5l
cj4KY2xhc3MgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Db250YWluZXIq
IGNvbnRhaW5lcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciAgICAgICAgICBjb250YWlu
ZXJfdHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7
CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lk
ICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAg
ICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwoK
ICBleHBsaWNpdCBmcm9udF9pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRh
aW5lcigmX194KSB7fQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVy
YXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgeyAK
ICAgIGNvbnRhaW5lci0+cHVzaF9mcm9udChfX3ZhbHVlKTsKICAgIHJldHVybiAqdGhpczsKICB9
CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVy
biAqdGhpczsgfQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3Ir
KygpIHsgcmV0dXJuICp0aGlzOyB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+
JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKCiMgNDE3ICIvdXNyL2xpYi9n
Y2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KaW5saW5l
IGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBmcm9udF9pbnNlcnRlcihfQ29udGFp
bmVyJiBfX3gpIHsKICByZXR1cm4gZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9f
eCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFzcyBpbnNlcnRfaXRlcmF0b3Ig
ewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwogIHR5cGVuYW1lIF9Db250YWlu
ZXI6Oml0ZXJhdG9yIGl0ZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIgICAgICAgICAg
Y29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2Nh
dGVnb3J5OwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVk
ZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAg
ICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHJlZmVy
ZW5jZTsKCiAgaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlwZW5hbWUgX0NvbnRh
aW5lcjo6aXRlcmF0b3IgX19pKSAKICAgIDogY29udGFpbmVyKCZfX3gpLCBpdGVyKF9faSkge30K
ICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1l
IF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUpIHsgCiAgICBpdGVyID0gY29udGFpbmVy
LT5pbnNlcnQoaXRlciwgX192YWx1ZSk7CiAgICArK2l0ZXI7CiAgICByZXR1cm4gKnRoaXM7CiAg
fQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRo
aXM7IH0KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVy
biAqdGhpczsgfQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQp
IHsgcmV0dXJuICp0aGlzOyB9Cn07CgojIDQ1OSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRy
YWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5o
IiAzCgoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXIsIGNsYXNzIF9JdGVyYXRvcj4KaW5saW5l
IAppbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194LCBf
SXRlcmF0b3IgX19pKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBf
X2l0ZXI7CiAgcmV0dXJuIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gsIF9faXRlcihf
X2kpKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBjbGFzcyBf
VHAsIGNsYXNzIF9SZWZlcmVuY2UgPSBfVHAmLCAKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSA9
IHB0cmRpZmZfdD4gCgoKCgpjbGFzcyByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3Igewog
IHR5cGVkZWYgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRl
cmF0b3IsIF9UcCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jl
ZmVyZW5jZSwgX0Rpc3RhbmNlPiAgX1NlbGY7CnByb3RlY3RlZDoKICBfQmlkaXJlY3Rpb25hbEl0
ZXJhdG9yIGN1cnJlbnQ7CnB1YmxpYzoKICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf
dGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSAgICAgICAgICAgICAgICAgIGRpZmZl
cmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7
CiAgdHlwZWRlZiBfUmVmZXJlbmNlICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CgogIHJldmVy
c2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcigpIHt9CiAgZXhwbGljaXQgcmV2ZXJzZV9iaWRpcmVj
dGlvbmFsX2l0ZXJhdG9yKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX194KQogICAgOiBjdXJyZW50
KF9feCkge30KICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIGJhc2UoKSBjb25zdCB7IHJldHVybiBj
dXJyZW50OyB9CiAgX1JlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAgICBfQmlkaXJlY3Rp
b25hbEl0ZXJhdG9yIF9fdG1wID0gY3VycmVudDsKICAgIHJldHVybiAqLS1fX3RtcDsKICB9Cgog
IHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9Cgog
IF9TZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1jdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwog
IH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAg
IC0tY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7
CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0o
aW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgKytjdXJyZW50OwogICAgcmV0dXJu
IF9fdG1wOwogIH0KfTsKCiMgNTUwICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGlu
dXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX0JpSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfUmVmLAogICAgICAgICAg
Y2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KAogICAgY29uc3QgcmV2ZXJz
ZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYg
X194LCAKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBf
VHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feSkKewogIHJldHVybiBfX3guYmFzZSgpID09IF9feS5i
YXNlKCk7Cn0KCgoKIAogCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgpjbGFzcyBy
ZXZlcnNlX2l0ZXJhdG9yIAp7CnByb3RlY3RlZDoKICBfSXRlcmF0b3IgY3VycmVudDsKcHVibGlj
OgogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9y
X2NhdGVnb3J5CiAgICAgICAgICBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICB2YWx1ZV90
eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZl
cmVuY2VfdHlwZQogICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIKICAgICAgICAgIHBvaW50ZXI7CiAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlCiAg
ICAgICAgICByZWZlcmVuY2U7CgogIHR5cGVkZWYgX0l0ZXJhdG9yIGl0ZXJhdG9yX3R5cGU7CiAg
dHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4gX1NlbGY7CgpwdWJsaWM6CiAgcmV2
ZXJzZV9pdGVyYXRvcigpIHt9CiAgZXhwbGljaXQgcmV2ZXJzZV9pdGVyYXRvcihpdGVyYXRvcl90
eXBlIF9feCkgOiBjdXJyZW50KF9feCkge30KCiAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCBfU2Vs
ZiYgX194KSA6IGN1cnJlbnQoX194LmN1cnJlbnQpIHt9CgogIHRlbXBsYXRlIDxjbGFzcyBfSXRl
cj4KICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXI+JiBfX3gp
CiAgICA6IGN1cnJlbnQoX194LmJhc2UoKSkge30KCiAgICAKICBpdGVyYXRvcl90eXBlIGJhc2Uo
KSBjb25zdCB7IHJldHVybiBjdXJyZW50OyB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0
IHsKICAgIF9JdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CiAgICByZXR1cm4gKi0tX190bXA7CiAg
fQoKICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsg
fQoKCiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gKnRo
aXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlz
OwogICAgLS1jdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBfU2VsZiYgb3BlcmF0b3It
LSgpIHsKICAgICsrY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0
b3ItLShpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICArK2N1cnJlbnQ7CiAgICBy
ZXR1cm4gX190bXA7CiAgfQoKICBfU2VsZiBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9fbikg
Y29uc3QgewogICAgcmV0dXJuIF9TZWxmKGN1cnJlbnQgLSBfX24pOwogIH0KICBfU2VsZiYgb3Bl
cmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19uKSB7CiAgICBjdXJyZW50IC09IF9fbjsKICAgIHJl
dHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNv
bnN0IHsKICAgIHJldHVybiBfU2VsZihjdXJyZW50ICsgX19uKTsKICB9CiAgX1NlbGYmIG9wZXJh
dG9yLT0oZGlmZmVyZW5jZV90eXBlIF9fbikgewogICAgY3VycmVudCArPSBfX247CiAgICByZXR1
cm4gKnRoaXM7CiAgfQogIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24p
IGNvbnN0IHsgcmV0dXJuICooKnRoaXMgKyBfX24pOyB9ICAKfTsgCiAKdGVtcGxhdGUgPGNsYXNz
IF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCByZXZlcnNlX2l0ZXJhdG9y
PF9JdGVyYXRvcj4mIF9feCwgCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9p
dGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gX194LmJhc2UoKSA9PSBfX3kuYmFz
ZSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwo
Y29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsIAogICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4g
X195LmJhc2UoKSA8IF9feC5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+Cmlu
bGluZSB0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlw
ZQpvcGVyYXRvci0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsIAogICAg
ICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4g
X195LmJhc2UoKSAtIF9feC5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+Cmlu
bGluZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4gCm9wZXJhdG9yKyh0eXBlbmFtZSByZXZl
cnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24sCiAgICAgICAgICBj
b25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCkgewogIHJldHVybiByZXZlcnNl
X2l0ZXJhdG9yPF9JdGVyYXRvcj4oX194LmJhc2UoKSAtIF9fbik7Cn0KCiMgODA1ICIvdXNyL2xp
Yi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUv
ZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgogCiAKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9EaXN0ID0gcHRyZGlmZl90PiAKY2xhc3MgaXN0cmVhbV9pdGVyYXRvciB7CiAgZnJpZW5kIGJv
b2wgb3BlcmF0b3I9PSA8PiAgKGNvbnN0IGlzdHJlYW1faXRlcmF0b3ImLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3Im
KTsKcHJvdGVjdGVkOgogIGlzdHJlYW0qIF9NX3N0cmVhbTsKICBfVHAgX01fdmFsdWU7CiAgYm9v
bCBfTV9lbmRfbWFya2VyOwogIHZvaWQgX01fcmVhZCgpIHsKICAgIF9NX2VuZF9tYXJrZXIgPSAo
Kl9NX3N0cmVhbSkgPyB0cnVlIDogZmFsc2U7CiAgICBpZiAoX01fZW5kX21hcmtlcikgKl9NX3N0
cmVhbSA+PiBfTV92YWx1ZTsKICAgIF9NX2VuZF9tYXJrZXIgPSAoKl9NX3N0cmVhbSkgPyB0cnVl
IDogZmFsc2U7CiAgfQpwdWJsaWM6CiAgdHlwZWRlZiBpbnB1dF9pdGVyYXRvcl90YWcgIGl0ZXJh
dG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwog
IHR5cGVkZWYgX0Rpc3QgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBj
b25zdCBfVHAqICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAmICAgICAgICAg
IHJlZmVyZW5jZTsKCiAgaXN0cmVhbV9pdGVyYXRvcigpIDogX01fc3RyZWFtKCZjaW4pLCBfTV9l
bmRfbWFya2VyKGZhbHNlKSB7fQogIGlzdHJlYW1faXRlcmF0b3IoaXN0cmVhbSYgX19zKSA6IF9N
X3N0cmVhbSgmX19zKSB7IF9NX3JlYWQoKTsgfQogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25z
dCB7IHJldHVybiBfTV92YWx1ZTsgfQoKICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJl
dHVybiAmKG9wZXJhdG9yKigpKTsgfQoKICBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3Q+JiBv
cGVyYXRvcisrKCkgeyAKICAgIF9NX3JlYWQoKTsgCiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGlz
dHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdD4gb3BlcmF0b3IrKyhpbnQpICB7CiAgICBpc3RyZWFt
X2l0ZXJhdG9yPF9UcCwgX0Rpc3Q+IF9fdG1wID0gKnRoaXM7CiAgICBfTV9yZWFkKCk7CiAgICBy
ZXR1cm4gX190bXA7CiAgfQp9OwoKIyA4NjQgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFr
ZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIg
MwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3RhbmNlPiYgX194LAogICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdGFuY2U+
JiBfX3kpIHsKICByZXR1cm4gKF9feC5fTV9zdHJlYW0gPT0gX195Ll9NX3N0cmVhbSAmJgogICAg
ICAgICAgX194Ll9NX2VuZF9tYXJrZXIgPT0gX195Ll9NX2VuZF9tYXJrZXIpIHx8CiAgICAgICAg
IF9feC5fTV9lbmRfbWFya2VyID09IGZhbHNlICYmIF9feS5fTV9lbmRfbWFya2VyID09IGZhbHNl
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBvc3RyZWFtX2l0ZXJhdG9yIHsKcHJvdGVj
dGVkOgogIG9zdHJlYW0qIF9NX3N0cmVhbTsKICBjb25zdCBjaGFyKiBfTV9zdHJpbmc7CnB1Ymxp
YzoKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlw
ZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAg
ICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAg
cG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwoKICBvc3Ry
ZWFtX2l0ZXJhdG9yKG9zdHJlYW0mIF9fcykgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZygw
KSB7fQogIG9zdHJlYW1faXRlcmF0b3Iob3N0cmVhbSYgX19zLCBjb25zdCBjaGFyKiBfX2MpIAog
ICAgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZyhfX2MpICB7fQogIG9zdHJlYW1faXRlcmF0
b3I8X1RwPiYgb3BlcmF0b3I9KGNvbnN0IF9UcCYgX192YWx1ZSkgeyAKICAgICpfTV9zdHJlYW0g
PDwgX192YWx1ZTsKICAgIGlmIChfTV9zdHJpbmcpICpfTV9zdHJlYW0gPDwgX01fc3RyaW5nOwog
ICAgcmV0dXJuICp0aGlzOwogIH0KICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKigp
IHsgcmV0dXJuICp0aGlzOyB9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcisrKCkg
eyByZXR1cm4gKnRoaXM7IH0gCiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcisrKGlu
dCkgeyByZXR1cm4gKnRoaXM7IH0gCn07CgojIDkwNyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1h
bmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRv
ci5oIiAzCgoKIAoKCgogCiAKIAojIDU2ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2Ut
bGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDIg
MwoKCgogCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJ
dGVyMiwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZCBfX2l0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9f
YSwgX0ZvcndhcmRJdGVyMiBfX2IsIF9UcCopIHsKICBfVHAgX190bXAgPSAqX19hOwogICpfX2Eg
PSAqX19iOwogICpfX2IgPSBfX3RtcDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEs
IGNsYXNzIF9Gb3J3YXJkSXRlcjI+CmlubGluZSB2b2lkIGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXIx
IF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IpIHsKICBfX2l0ZXJfc3dhcChfX2EsIF9fYiwgX192YWx1
ZV90eXBlKCBfX2EgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgdm9pZCBzd2Fw
KF9UcCYgX19hLCBfVHAmIF9fYikgewogIF9UcCBfX3RtcCA9IF9fYTsKICBfX2EgPSBfX2I7CiAg
X19iID0gX190bXA7Cn0KCiAKIAoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29u
c3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKSB7CiAgcmV0dXJuIF9f
YiA8IF9fYSA/IF9fYiA6IF9fYTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0
IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikgewogIHJldHVybiAgX19h
IDwgX19iID8gX19iIDogX19hOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21w
YXJlPgppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19i
LCBfQ29tcGFyZSBfX2NvbXApIHsKICByZXR1cm4gX19jb21wKF9fYiwgX19hKSA/IF9fYiA6IF9f
YTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSBjb25zdCBf
VHAmIG1heChjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIF9Db21wYXJlIF9fY29tcCkg
ewogIHJldHVybiBfX2NvbXAoX19hLCBfX2IpID8gX19iIDogX19hOwp9CgogCiAKCiAKIAogCiAK
IAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xh
c3MgX0Rpc3RhbmNlPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5KF9JbnB1dEl0ZXIgX19maXJz
dCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0
ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFn
LCBfRGlzdGFuY2UqKQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX3Jlc3VsdCwg
KytfX2ZpcnN0KQogICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBj
bGFzcyBfRGlzdGFuY2U+CmlubGluZSBfT3V0cHV0SXRlcgpfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgX091dHB1dEl0ZXIg
X19yZXN1bHQsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCBfRGlzdGFuY2UqKQp7CiAgZm9y
IChfRGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1fX24pIHsKICAg
ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogICAgKytfX3Jlc3VsdDsKICB9
CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgX1RwKgpf
X2NvcHlfdHJpdmlhbChjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAq
IF9fcmVzdWx0KSB7CiAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiAo
X19sYXN0IC0gX19maXJzdCkpOwogIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0
KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNs
YXNzIF9Cb29sVHlwZT4Kc3RydWN0IF9fY29weV9kaXNwYXRjaCB7CiAgc3RhdGljIF9PdXRwdXRJ
dGVyIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9DYXRl
Z29yeTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojpk
aWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwogICAgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xh
c3QsIF9fcmVzdWx0LCBfQ2F0ZWdvcnkoKSwgKF9EaXN0YW5jZSopIDApOwogIH0KfTsKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX2NvcHlfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVl
X3R5cGU+CnsKICBzdGF0aWMgX1RwKiBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1Rw
KiBfX2xhc3QsIF9UcCogX19yZXN1bHQpIHsKICAgIHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2Zp
cnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1
Y3QgX19jb3B5X2Rpc3BhdGNoPGNvbnN0IF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgp7CiAgc3Rh
dGljIF9UcCogY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAq
IF9fcmVzdWx0KSB7CiAgICByZXR1cm4gX19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBf
X3Jlc3VsdCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRw
dXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3Vs
dCkgewogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1
ZV90eXBlIF9UcDsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3Ry
aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcgogICAgICAgICAgX1RyaXZpYWw7CiAgcmV0dXJuIF9f
Y29weV9kaXNwYXRjaDxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlciwgX1RyaXZpYWw+CiAgICA6OmNv
cHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7Cn0KCiMgMjEzICIvdXNyL2xpYi9nY2MtbGli
L2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3Rs
X2FsZ29iYXNlLmgiIDMKCgogCiAKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIx
LCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLCAKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4K
aW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19jb3B5X2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFs
SXRlcjEgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90
YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2Uq
KQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xh
c3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXIsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fY29weV9iYWNrd2FyZChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0
LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19sYXN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNl
IF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKQogICAgKi0tX19yZXN1bHQg
PSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgoKCiAKIAogCiAKCnRlbXBsYXRlIDxj
bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAg
ICAgICAgY2xhc3MgX0Jvb2xUeXBlPgpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoCnsK
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXIxPjo6
aXRlcmF0b3JfY2F0ZWdvcnkgCiAgICAgICAgICBfQ2F0OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcjE+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAg
ICAgIF9EaXN0YW5jZTsKCiAgc3RhdGljIF9CaWRpcmVjdGlvbmFsSXRlcjIgY29weShfQmlkaXJl
Y3Rpb25hbEl0ZXIxIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCkgewogICAgcmV0dXJuIF9fY29weV9i
YWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfQ2F0KCksIChfRGlzdGFuY2UqKSAw
KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rp
c3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25z
dCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICBj
b25zdCBwdHJkaWZmX3QgX051bSA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICBtZW1tb3ZlKF9fcmVz
dWx0IC0gX051bSwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiBfTnVtKTsKICAgIHJldHVybiBfX3Jl
c3VsdCAtIF9OdW07CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fY29weV9i
YWNrd2FyZF9kaXNwYXRjaDxjb25zdCBfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KewogIHN0YXRp
YyBfVHAqIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBf
X3Jlc3VsdCkgewogICAgcmV0dXJuICBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1Rw
KiwgX190cnVlX3R5cGU+CiAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsK
ICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JJMSwgY2xhc3MgX0JJMj4KaW5saW5lIF9CSTIgY29w
eV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KSB7CiAg
dHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
QkkyPjo6dmFsdWVfdHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgOjpoYXNfdHJpdmlhbF9h
c3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICByZXR1cm4gX19jb3B5X2Jh
Y2t3YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIsIF9Ucml2aWFsPgogICAgICAgICAgICAgIDo6Y29w
eShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKIyAzMDMgIi91c3IvbGliL2djYy1saWIv
aTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxf
YWxnb2Jhc2UuaCIgMwoKCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9T
aXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4gX19j
b3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgZm9yICgg
OyBfX2NvdW50ID4gMDsgLS1fX2NvdW50KSB7CiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAg
ICsrX19maXJzdDsKICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIs
IF9PdXRwdXRJdGVyPihfX2ZpcnN0LCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUkFJ
dGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBwYWlyPF9SQUl0ZXIs
IF9PdXRwdXRJdGVyPgpfX2NvcHlfbihfUkFJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAg
ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJh
dG9yX3RhZykgewogIF9SQUl0ZXIgX19sYXN0ID0gX19maXJzdCArIF9fY291bnQ7CiAgcmV0dXJu
IHBhaXI8X1JBSXRlciwgX091dHB1dEl0ZXI+KF9fbGFzdCwgY29weShfX2ZpcnN0LCBfX2xhc3Qs
IF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwg
Y2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPgpf
X2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsIF9PdXRwdXRJdGVyIF9f
cmVzdWx0KSB7CiAgcmV0dXJuIF9fY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAog
ICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4K
aW5saW5lIHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+CmNvcHlfbihfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9TaXplIF9fY291bnQsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9f
Y29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0KTsKfQoKIAogCgoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lkIGZpbGwoX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkgewogIGZvciAoIDsg
X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPgpfT3V0
cHV0SXRlciBmaWxsX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAm
IF9fdmFsdWUpIHsKICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAqX19m
aXJzdCA9IF9fdmFsdWU7CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCiAKIAoKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0
SXRlcjI+IG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyKSB7CiAgd2hpbGUg
KF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgKl9fZmlyc3QxID09ICpfX2ZpcnN0MikgewogICAgKytf
X2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAgfQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBf
SW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KcGFpcjxf
SW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+IG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjEgX19sYXN0
MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f
Zmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVBy
ZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKSB7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYg
X19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICsrX19maXJzdDE7CiAg
ICArK19fZmlyc3QyOwogIH0KICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+
KF9fZmlyc3QxLCBfX2ZpcnN0Mik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xh
c3MgX0lucHV0SXRlcjI+CmlubGluZSBib29sIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBf
SW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0
MikgewogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0
MikKICAgIGlmICgqX19maXJzdDEgIT0gKl9fZmlyc3QyKQogICAgICByZXR1cm4gZmFsc2U7CiAg
cmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0
SXRlcjIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CmlubGluZSBib29sIGVxdWFsKF9JbnB1dEl0
ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBfSW5w
dXRJdGVyMiBfX2ZpcnN0MiwgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKSB7CiAgZm9y
ICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYg
KCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgcmV0dXJuIGZhbHNl
OwogIHJldHVybiB0cnVlOwp9CgogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBj
bGFzcyBfSW5wdXRJdGVyMj4KYm9vbCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVy
MSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikgewogIGZvciAo
IDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAgICAgOyAr
K19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQog
ICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgIHJl
dHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIg
IT0gX19sYXN0MjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJ
dGVyMiwgY2xhc3MgX0NvbXBhcmU+CmJvb2wgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0
SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgZm9yICggOyBfX2Zp
cnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJz
dDEsICsrX19maXJzdDIpIHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQog
ICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQog
ICAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiBfX2ZpcnN0MSA9PSBfX2xhc3QxICYmIF9f
Zmlyc3QyICE9IF9fbGFzdDI7Cn0KCmlubGluZSBib29sIApsZXhpY29ncmFwaGljYWxfY29tcGFy
ZShjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgdW5zaWduZWQgY2hhciogX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDIpCnsKICBjb25zdCBzaXplX3QgX19sZW4xID0gX19sYXN0
MSAtIF9fZmlyc3QxOwogIGNvbnN0IHNpemVfdCBfX2xlbjIgPSBfX2xhc3QyIC0gX19maXJzdDI7
CiAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVtY21wKF9fZmlyc3QxLCBfX2ZpcnN0MiwgbWluKF9f
bGVuMSwgX19sZW4yKSk7CiAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCA8IDAgOiBf
X2xlbjEgPCBfX2xlbjI7Cn0KCmlubGluZSBib29sIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNv
bnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciogX19s
YXN0MikKewoKICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoKGNvbnN0IHNpZ25lZCBj
aGFyKikgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBz
aWduZWQgY2hhciopIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj
b25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QyKTsKCgoKCgoKfQoKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KaW50IF9fbGV4aWNvZ3JhcGhpY2Fs
X2NvbXBhcmVfM3dheShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg
X0lucHV0SXRlcjIgX19sYXN0MikKewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9f
Zmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAg
IHJldHVybiAtMTsKICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgIHJldHVybiAx
OwogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAgfQogIGlmIChfX2ZpcnN0MiA9PSBf
X2xhc3QyKSB7CiAgICByZXR1cm4gIShfX2ZpcnN0MSA9PSBfX2xhc3QxKTsKICB9CiAgZWxzZSB7
CiAgICByZXR1cm4gLTE7CiAgfQp9CgppbmxpbmUgaW50Cl9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBh
cmVfM3dheShjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDIpCnsKICBj
b25zdCBwdHJkaWZmX3QgX19sZW4xID0gX19sYXN0MSAtIF9fZmlyc3QxOwogIGNvbnN0IHB0cmRp
ZmZfdCBfX2xlbjIgPSBfX2xhc3QyIC0gX19maXJzdDI7CiAgY29uc3QgaW50IF9fcmVzdWx0ID0g
bWVtY21wKF9fZmlyc3QxLCBfX2ZpcnN0MiwgbWluKF9fbGVuMSwgX19sZW4yKSk7CiAgcmV0dXJu
IF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCAKICAgICAgICAgICAgICAgICAgICAgICA6IChfX2xl
bjEgPT0gX19sZW4yID8gMCA6IChfX2xlbjEgPCBfX2xlbjIgPyAtMSA6IDEpKTsKfQoKaW5saW5l
IGludCAKX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IGNoYXIqIF9fZmlyc3Qx
LCBjb25zdCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciogX19maXJzdDIsIGNvbnN0IGNoYXIqIF9fbGFzdDIpCnsKCiAgcmV0dXJuIF9fbGV4
aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbnQgbGV4
aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl
cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIg
X19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCnsKICByZXR1cm4gX19sZXhpY29ncmFwaGlj
YWxfY29tcGFyZV8zd2F5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7Cn0K
CiAKCgoKIAogCiAKIyAzMCAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIu
OTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3ZlY3RvciIgMiAzCgojIDEgIi91c3IvbGli
L2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9n
KystMy9zdGxfYWxsb2MuaCIgMSAzCiAKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
IAogCiAKIAogCiAKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRy
YWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNDIgIi91c3IvbGliL2dj
Yy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKIyA1
MyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8u
Li9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYXNz
ZXJ0LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgojIDMyICIvdXNyL2luY2x1ZGUvYXNz
ZXJ0LmgiIDMKCgoKCgogCgoKCgojIDU2ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMKCgpleHRl
cm4gIkMiIHsgCgogCmV4dGVybiB2b2lkIF9fYXNzZXJ0X2ZhaWwgIChfX2NvbnN0IGNoYXIgKl9f
YXNzZXJ0aW9uLAoJCQkJX19jb25zdCBjaGFyICpfX2ZpbGUsCgkJCQl1bnNpZ25lZCBpbnQgX19s
aW5lLAoJCQkJX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKSAgdGhyb3cgKCkgIAogICAgIF9fYXR0
cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCiAKZXh0ZXJuIHZvaWQgX19hc3NlcnRfcGVycm9y
X2ZhaWwgIChpbnQgX19lcnJudW0sCgkJCQkgICAgICAgX19jb25zdCBjaGFyICpfX2ZpbGUsCgkJ
CQkgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwKCQkJCSAgICAgICBfX2NvbnN0IGNoYXIgKl9f
ZnVuY3Rpb24pICB0aHJvdyAoKSAgCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykp
OwoKfSAKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA1NiAiL3Vzci9saWIv
Z2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr
Ky0zL3N0bF9hbGxvYy5oIiAyIDMKCgoKCgoKCgoKCgoKICAgICAKICAgICAKICAgICAKIyAxICIv
dXNyL2luY2x1ZGUvcHRocmVhZC5oIiAxIDMKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCgoK
CgojIDEgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CiAKCgoKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAK
CgoKCgoKCgoKCgoKCgojIDUxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCiMgNjIgIi91c3Iv
aW5jbHVkZS90aW1lLmgiIDMKCgoKIyA3MyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgoKIyA4
OSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgoKIyAyNzkgIi91c3IvaW5jbHVkZS90aW1lLmgi
IDMKCgoKIyAyOSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIgMwoKCiAKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy9zY2hlZC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgog
CgoKCgoKCgoKCgoKIApzdHJ1Y3Qgc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgc2NoZWRfcHJpb3Jp
dHk7CiAgfTsKCmV4dGVybiAiQyIgeyAKCiAKCmV4dGVybiBpbnQgY2xvbmUgIChpbnQgKCpfX2Zu
KSAodm9pZCAqX19hcmcpLCB2b2lkICpfX2NoaWxkX3N0YWNrLAoJCSAgICAgICBpbnQgX19mbGFn
cywgdm9pZCAqX19hcmcpICB0aHJvdyAoKSAgOwoKCn0gCgoKCgoKCiAKc3RydWN0IF9fc2NoZWRf
cGFyYW0KICB7CiAgICBpbnQgc2NoZWRfcHJpb3JpdHk7CiAgfTsKCgojIDMyICIvdXNyL2luY2x1
ZGUvc2NoZWQuaCIgMiAzCgoKZXh0ZXJuICJDIiB7IAoKIApleHRlcm4gaW50IF9fc2NoZWRfc2V0
cGFyYW0gIChfX3BpZF90IF9fcGlkLAoJCQkJICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAq
X19wYXJhbSkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgc2NoZWRfc2V0cGFyYW0gIChfX3BpZF90
IF9fcGlkLAoJCQkJX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pICB0aHJvdyAo
KSAgOwoKIApleHRlcm4gaW50IF9fc2NoZWRfZ2V0cGFyYW0gIChfX3BpZF90IF9fcGlkLCBzdHJ1
Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IHNjaGVkX2dl
dHBhcmFtICAoX19waWRfdCBfX3BpZCwgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSAgdGhy
b3cgKCkgIDsKCiAKZXh0ZXJuIGludCBfX3NjaGVkX3NldHNjaGVkdWxlciAgKF9fcGlkX3QgX19w
aWQsIGludCBfX3BvbGljeSwKCQkJCSAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpf
X3BhcmFtKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBzY2hlZF9zZXRzY2hlZHVsZXIgIChfX3Bp
ZF90IF9fcGlkLCBpbnQgX19wb2xpY3ksCgkJCQkgICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFy
YW0gKl9fcGFyYW0pICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IF9fc2NoZWRfZ2V0c2NoZWR1
bGVyICAoX19waWRfdCBfX3BpZCkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgc2NoZWRfZ2V0c2No
ZWR1bGVyICAoX19waWRfdCBfX3BpZCkgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgX19zY2hl
ZF95aWVsZCAgKHZvaWQpICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IHNjaGVkX3lpZWxkICAodm9p
ZCkgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgX19zY2hlZF9nZXRfcHJpb3JpdHlfbWF4ICAo
aW50IF9fYWxnb3JpdGhtKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBzY2hlZF9nZXRfcHJpb3Jp
dHlfbWF4ICAoaW50IF9fYWxnb3JpdGhtKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBfX3Nj
aGVkX2dldF9wcmlvcml0eV9taW4gIChpbnQgX19hbGdvcml0aG0pICB0aHJvdyAoKSAgOwpleHRl
cm4gaW50IHNjaGVkX2dldF9wcmlvcml0eV9taW4gIChpbnQgX19hbGdvcml0aG0pICB0aHJvdyAo
KSAgOwoKIApleHRlcm4gaW50IF9fc2NoZWRfcnJfZ2V0X2ludGVydmFsICAoX19waWRfdCBfX3Bp
ZCwgc3RydWN0IHRpbWVzcGVjICpfX3QpICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IHNjaGVkX3Jy
X2dldF9pbnRlcnZhbCAgKF9fcGlkX3QgX19waWQsIHN0cnVjdCB0aW1lc3BlYyAqX190KSAgdGhy
b3cgKCkgIDsKCn0gCgoKIyAyMCAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgojIDEgIi91
c3IvaW5jbHVkZS90aW1lLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKZXh0
ZXJuICJDIiB7IAoKCgoKIAoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxp
bnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGli
L2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoK
CgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGlu
dXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK
CgogCgoKCgoKIAoKIAoKCiMgMTI2ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGlu
dXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgogCgogCgoKIyAxODggIi91c3Iv
bGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIg
MwoKCgoKCiAKCgoKCiAKCgojIDI2OSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxp
bnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKCgoKCgoKCgoKCgogCgogCgojIDMx
NyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0
ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgoKCgojIDM4ICIvdXNyL2luY2x1ZGUv
dGltZS5oIiAyIDMKCgogCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzCiAKCgoK
CgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIAoKCiAKCgoKCgogCgoKCgoKCgojIDU5ICIvdXNyL2lu
Y2x1ZGUvYml0cy90aW1lLmgiIDMKIAojIDQyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCgog
CgoKCgoKCgoKCgoKCgoKIAp0eXBlZGVmIF9fY2xvY2tfdCBjbG9ja190OwoKCgoKIyA3MyAiL3Vz
ci9pbmNsdWRlL3RpbWUuaCIgMwoKCgoKIyA4OSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgoK
CiAKc3RydWN0IHRtCnsKICBpbnQgdG1fc2VjOwkJCSAKICBpbnQgdG1fbWluOwkJCSAKICBpbnQg
dG1faG91cjsJCQkgCiAgaW50IHRtX21kYXk7CQkJIAogIGludCB0bV9tb247CQkJIAogIGludCB0
bV95ZWFyOwkJCSAKICBpbnQgdG1fd2RheTsJCQkgCiAgaW50IHRtX3lkYXk7CQkJIAogIGludCB0
bV9pc2RzdDsJCQkgCgoKICBsb25nIGludCB0bV9nbXRvZmY7CQkgCiAgX19jb25zdCBjaGFyICp0
bV96b25lOwkgCgoKCgp9OwoKCiAKCmV4dGVybiBjbG9ja190IGNsb2NrICAodm9pZCkgIHRocm93
ICgpICA7CgogCmV4dGVybiB0aW1lX3QgdGltZSAgKHRpbWVfdCAqX190aW1lcikgIHRocm93ICgp
ICA7CgogCmV4dGVybiBkb3VibGUgZGlmZnRpbWUgICh0aW1lX3QgX190aW1lMSwgdGltZV90IF9f
dGltZTApICB0aHJvdyAoKSAgCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIApl
eHRlcm4gdGltZV90IG1rdGltZSAgKHN0cnVjdCB0bSAqX190cCkgIHRocm93ICgpICA7CgoKIAoK
CmV4dGVybiBzaXplX3Qgc3RyZnRpbWUgIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9f
bWF4c2l6ZSwKCQkJICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCgkJCSAg
ICAgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgIHRocm93ICgpICA7CgoKCgoK
CgoKCiAKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZSAgKF9fY29uc3QgdGltZV90ICpfX3RpbWVy
KSAgdGhyb3cgKCkgIDsKCiAKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZSAgKF9fY29uc3Qg
dGltZV90ICpfX3RpbWVyKSAgdGhyb3cgKCkgIDsKCgogCgpleHRlcm4gc3RydWN0IHRtICpfX2dt
dGltZV9yICAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKCQkJCSAgIHN0cnVj
dCB0bSAqX19yZXN0cmljdCBfX3RwKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIHN0cnVjdCB0bSAqZ210
aW1lX3IgIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAoJCQkJIHN0cnVjdCB0
bSAqX19yZXN0cmljdCBfX3RwKSAgdGhyb3cgKCkgIDsKCiAKCmV4dGVybiBzdHJ1Y3QgdG0gKmxv
Y2FsdGltZV9yICAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKCQkJCSAgICBz
dHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgIHRocm93ICgpICA7CgoKIAoKZXh0ZXJuIGNoYXIg
KmFzY3RpbWUgIChfX2NvbnN0IHN0cnVjdCB0bSAqX190cCkgIHRocm93ICgpICA7CgogCmV4dGVy
biBjaGFyICpjdGltZSAgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSAgdGhyb3cgKCkgIDsKCgog
CgogCgpleHRlcm4gY2hhciAqYXNjdGltZV9yICAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJp
Y3QgX190cCwKCQkJICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSAgdGhyb3cgKCkgIDsKCiAK
ZXh0ZXJuIGNoYXIgKmN0aW1lX3IgIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVy
LAoJCQkgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSAgdGhyb3cgKCkgIDsKCgoKIApleHRlcm4g
Y2hhciAqX190em5hbWVbMl07CSAKZXh0ZXJuIGludCBfX2RheWxpZ2h0OwkJIApleHRlcm4gbG9u
ZyBpbnQgX190aW1lem9uZTsJIAoKCgogCmV4dGVybiBjaGFyICp0em5hbWVbMl07CgogCgpleHRl
cm4gdm9pZCB0enNldCAgKHZvaWQpICB0aHJvdyAoKSAgOwoKCgpleHRlcm4gaW50IGRheWxpZ2h0
OwpleHRlcm4gbG9uZyBpbnQgdGltZXpvbmU7CgoKCiAKCmV4dGVybiBpbnQgc3RpbWUgIChfX2Nv
bnN0IHRpbWVfdCAqX193aGVuKSAgdGhyb3cgKCkgIDsKCgoKIAoKCgoKCgogCgoKIApleHRlcm4g
dGltZV90IHRpbWVnbSAgKHN0cnVjdCB0bSAqX190cCkgIHRocm93ICgpICA7CgogCmV4dGVybiB0
aW1lX3QgdGltZWxvY2FsICAoc3RydWN0IHRtICpfX3RwKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJu
IGludCBkeXNpemUgIChpbnQgX195ZWFyKSAgdGhyb3cgKCkgIDsKCgoKCiAKZXh0ZXJuIGludCBu
YW5vc2xlZXAgIChfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXF1ZXN0ZWRfdGltZSwKCQkJ
ICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbWFpbmluZykgIHRocm93ICgpICA7CgoKCiMgMjY0ICIv
dXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKIyAyNzQgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoK
fSAKCgoKCiMgMjEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwoKCgojIDEgIi91c3IvaW5j
bHVkZS9zaWduYWwuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKZXh0ZXJu
ICJDIiB7IAoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMSAzCiAKCgoKCgoKCgoK
CgoKCgoKCgoKIyAzMyAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKCgoKIAoKCgoKCiMg
MTI1ICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMwoKIyAzMyAiL3Vzci9pbmNsdWRlL3Np
Z25hbC5oIiAyIDMKCgogCgoKCgoKCgoKCgoKCgp0eXBlZGVmIF9fc2lnc2V0X3Qgc2lnc2V0X3Q7
CgoKCiMgMzYwICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKCgp9IAoKCiMgMjQgIi91c3IvaW5j
bHVkZS9wdGhyZWFkLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMu
aCIgMSAzCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy9zY2hlZC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKIyA2MiAiL3Vzci9pbmNs
dWRlL2JpdHMvc2NoZWQuaCIgMwoKCiMgNzMgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDMK
CiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMKCgogCnN0cnVjdCBf
cHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQgX19zdGF0dXM7ICAgICAgICAgICAgIAogIGlu
dCBfX3NwaW5sb2NrOyAgICAgICAgICAgICAgICAKfTsKCgogCnR5cGVkZWYgc3RydWN0IF9wdGhy
ZWFkX2Rlc2NyX3N0cnVjdCAqX3B0aHJlYWRfZGVzY3I7CgoKCgogCnR5cGVkZWYgc3RydWN0CnsK
ICBpbnQgX19kZXRhY2hzdGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hl
ZF9wYXJhbSBfX3NjaGVkcGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3Bl
OwogIHNpemVfdCBfX2d1YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9f
c3RhY2thZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgogCnR5
cGVkZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7ICAKICBf
cHRocmVhZF9kZXNjciBfX2Nfd2FpdGluZzsgICAgICAgICAKfSBwdGhyZWFkX2NvbmRfdDsKCgog
CnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7Cgog
CnR5cGVkZWYgdW5zaWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7CgoKIAogCgp0eXBlZGVmIHN0cnVj
dAp7CiAgaW50IF9fbV9yZXNlcnZlZDsgICAgICAgICAgICAgICAgCiAgaW50IF9fbV9jb3VudDsg
ICAgICAgICAgICAgICAgICAgCiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOyAgICAgICAgCiAg
aW50IF9fbV9raW5kOyAgICAgICAgICAgICAgICAgICAgCiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rs
b2NrIF9fbV9sb2NrOyAgCn0gcHRocmVhZF9tdXRleF90OwoKCiAKdHlwZWRlZiBzdHJ1Y3QKewog
IGludCBfX211dGV4a2luZDsKfSBwdGhyZWFkX211dGV4YXR0cl90OwoKCiAKdHlwZWRlZiBpbnQg
cHRocmVhZF9vbmNlX3Q7CgoKIyAxMTYgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5o
IiAzCgoKCiAKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFkX3Q7CgoKIyAyNSAiL3Vz
ci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoKCmV4dGVybiAiQyIgeyAKCiAKCgoKCgoKCgoKCgoK
CgoKCiAKCmVudW0KewogIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFLAoKICBQVEhSRUFEX0NSRUFU
RV9ERVRBQ0hFRAoKfTsKCmVudW0KewogIFBUSFJFQURfSU5IRVJJVF9TQ0hFRCwKCiAgUFRIUkVB
RF9FWFBMSUNJVF9TQ0hFRAoKfTsKCmVudW0KewogIFBUSFJFQURfU0NPUEVfU1lTVEVNLAoKICBQ
VEhSRUFEX1NDT1BFX1BST0NFU1MKCn07CgplbnVtCnsKICBQVEhSRUFEX01VVEVYX0ZBU1RfTlAs
CiAgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAsCiAgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNL
X05QCgoKCgoKCgp9OwoKZW51bQp7CiAgUFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUsCgogIFBUSFJF
QURfUFJPQ0VTU19TSEFSRUQKCn07CgojIDEwMyAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwoK
CgoKIAoKc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyCnsKICB2b2lkICgqX19yb3V0aW5l
KSAgKHZvaWQgKikgIDsJICAgCiAgdm9pZCAqX19hcmc7CQkJCSAgIAogIGludCBfX2NhbmNlbHR5
cGU7CQkJICAgCiAgc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX3ByZXY7ICAKfTsK
CiAKCmVudW0KewogIFBUSFJFQURfQ0FOQ0VMX0VOQUJMRSwKCiAgUFRIUkVBRF9DQU5DRUxfRElT
QUJMRQoKfTsKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxfREVGRVJSRUQsCgogIFBUSFJFQURfQ0FO
Q0VMX0FTWU5DSFJPTk9VUwoKfTsKCgoKIAoKIAoKCmV4dGVybiBpbnQgcHRocmVhZF9jcmVhdGUg
IChwdGhyZWFkX3QgKl9fdGhyZWFkLAoJCQkJX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRy
LAoJCQkJdm9pZCAqKCpfX3N0YXJ0X3JvdXRpbmUpICh2b2lkICopLAoJCQkJdm9pZCAqX19hcmcp
ICB0aHJvdyAoKSAgOwoKIApleHRlcm4gcHRocmVhZF90IHB0aHJlYWRfc2VsZiAgKHZvaWQpICB0
aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfZXF1YWwgIChwdGhyZWFkX3QgX190aHJl
YWQxLCBwdGhyZWFkX3QgX190aHJlYWQyKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIHZvaWQgcHRo
cmVhZF9leGl0ICAodm9pZCAqX19yZXR2YWwpICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKChf
X25vcmV0dXJuX18pKTsKCiAKCgpleHRlcm4gaW50IHB0aHJlYWRfam9pbiAgKHB0aHJlYWRfdCBf
X3RoLCB2b2lkICoqX190aHJlYWRfcmV0dXJuKSAgdGhyb3cgKCkgIDsKCiAKCgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX2RldGFjaCAgKHB0aHJlYWRfdCBfX3RoKSAgdGhyb3cgKCkgIDsKCgogCgogCgoK
ZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfaW5pdCAgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpICB0
aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9kZXN0cm95ICAocHRocmVhZF9h
dHRyX3QgKl9fYXR0cikgIHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3Nl
dGRldGFjaHN0YXRlICAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKCQkJCQkgICAgIGludCBfX2Rl
dGFjaHN0YXRlKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0ZGV0
YWNoc3RhdGUgIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCgkJCQkJICAgICBpbnQg
Kl9fZGV0YWNoc3RhdGUpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9z
ZXRzY2hlZHBhcmFtICAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKCQkJCSAgICAgICAgX19jb25z
dCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50
IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBhcmFtICAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19h
dHRyLAoJCQkJCSAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pICB0aHJvdyAoKSAgOwoK
IApleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGljeSAgKHB0aHJlYWRfYXR0cl90
ICpfX2F0dHIsCgkJCQkJICAgICBpbnQgX19wb2xpY3kpICB0aHJvdyAoKSAgOwoKIApleHRlcm4g
aW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBvbGljeSAgKF9fY29uc3QgcHRocmVhZF9hdHRyX3Qg
Kl9fYXR0ciwKCQkJCQkgICAgIGludCAqX19wb2xpY3kpICB0aHJvdyAoKSAgOwoKIApleHRlcm4g
aW50IHB0aHJlYWRfYXR0cl9zZXRpbmhlcml0c2NoZWQgIChwdGhyZWFkX2F0dHJfdCAqX19hdHRy
LAoJCQkJCSAgICAgIGludCBfX2luaGVyaXQpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0
aHJlYWRfYXR0cl9nZXRpbmhlcml0c2NoZWQgIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0
dHIsCgkJCQkJICAgICAgaW50ICpfX2luaGVyaXQpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50
IHB0aHJlYWRfYXR0cl9zZXRzY29wZSAgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCBfX3Nj
b3BlKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NvcGUgIChf
X2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCgkJCQkgICAgICAgaW50ICpfX3Njb3BlKSAg
dGhyb3cgKCkgIDsKCiMgMjI0ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCgoKIAoKCgpleHRl
cm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja2FkZHIgIChwdGhyZWFkX2F0dHJfdCAqX19hdHRy
LAoJCQkJCSAgIHZvaWQgKl9fc3RhY2thZGRyKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBw
dGhyZWFkX2F0dHJfZ2V0c3RhY2thZGRyICAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRy
LAoJCQkJCSAgIHZvaWQgKipfX3N0YWNrYWRkcikgIHRocm93ICgpICA7CgogCgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX2F0dHJfc2V0c3RhY2tzaXplICAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKCQkJ
CQkgICBzaXplX3QgX19zdGFja3NpemUpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHB0aHJl
YWRfYXR0cl9nZXRzdGFja3NpemUgIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCgkJ
CQkJICAgc2l6ZV90ICpfX3N0YWNrc2l6ZSkgIHRocm93ICgpICA7CgogCgogCgpleHRlcm4gaW50
IHB0aHJlYWRfc2V0c2NoZWRwYXJhbSAgKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsIGludCBf
X3BvbGljeSwKCQkJCSAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkg
IHRocm93ICgpICA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9nZXRzY2hlZHBhcmFtICAocHRocmVh
ZF90IF9fdGFyZ2V0X3RocmVhZCwKCQkJCSAgICAgICBpbnQgKl9fcG9saWN5LAoJCQkJICAgICAg
IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgIHRocm93ICgpICA7CgoKCgoKCgoKCiAKCiAK
CmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4X2luaXQgIChwdGhyZWFkX211dGV4X3QgKl9fbXV0
ZXgsCgkJCQkgICBfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fbXV0ZXhfYXR0cikgIHRo
cm93ICgpICA7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9pbml0ICAocHRocmVhZF9tdXRleF90
ICpfX211dGV4LAoJCQkJICAgX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICpfX211dGV4X2F0
dHIpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF9kZXN0cm95ICAo
cHRocmVhZF9tdXRleF90ICpfX211dGV4KSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBwdGhyZWFk
X211dGV4X2Rlc3Ryb3kgIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpICB0aHJvdyAoKSAgOwoK
IApleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF90cnlsb2NrICAocHRocmVhZF9tdXRleF90ICpf
X211dGV4KSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3RyeWxvY2sgIChw
dGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IF9fcHRo
cmVhZF9tdXRleF9sb2NrICAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSAgdGhyb3cgKCkgIDsK
ZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2xvY2sgIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgp
ICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF91bmxvY2sgIChwdGhy
ZWFkX211dGV4X3QgKl9fbXV0ZXgpICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0
ZXhfdW5sb2NrICAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSAgdGhyb3cgKCkgIDsKCgogCgog
CgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleGF0dHJfaW5pdCAgKHB0aHJlYWRfbXV0ZXhhdHRy
X3QgKl9fYXR0cikgIHRocm93ICgpICA7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfaW5p
dCAgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgIHRocm93ICgpICA7CgogCmV4dGVybiBp
bnQgX19wdGhyZWFkX211dGV4YXR0cl9kZXN0cm95ICAocHRocmVhZF9tdXRleGF0dHJfdCAqX19h
dHRyKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95ICAo
cHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSAgdGhyb3cgKCkgIDsKCiMgMzE2ICIvdXNyL2lu
Y2x1ZGUvcHRocmVhZC5oIiAzCgoKCiAKCiAKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2luaXQg
IChwdGhyZWFkX2NvbmRfdCAqX19jb25kLAoJCQkJICAgX19jb25zdCBwdGhyZWFkX2NvbmRhdHRy
X3QgKl9fY29uZF9hdHRyKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRf
ZGVzdHJveSAgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQpICB0aHJvdyAoKSAgOwoKIApleHRlcm4g
aW50IHB0aHJlYWRfY29uZF9zaWduYWwgIChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSAgdGhyb3cg
KCkgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0ICAocHRocmVhZF9jb25k
X3QgKl9fY29uZCkgIHRocm93ICgpICA7CgogCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF93YWl0
ICAocHRocmVhZF9jb25kX3QgKl9fY29uZCwKCQkJCSAgIHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRl
eCkgIHRocm93ICgpICA7CgogCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdCAg
KHB0aHJlYWRfY29uZF90ICpfX2NvbmQsCgkJCQkJcHRocmVhZF9tdXRleF90ICpfX211dGV4LAoJ
CQkJCV9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX2Fic3RpbWUpICB0aHJvdyAoKSAgOwoKIAoK
IApleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfaW5pdCAgKHB0aHJlYWRfY29uZGF0dHJfdCAq
X19hdHRyKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2Rlc3Ry
b3kgIChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0cikgIHRocm93ICgpICA7CgoKIyA0MDkgIi91
c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKCgoKIAoKIAoKCgoKCmV4dGVybiBpbnQgX19wdGhyZWFk
X2tleV9jcmVhdGUgIChwdGhyZWFkX2tleV90ICpfX2tleSwKCQkJCSAgICAgIHZvaWQgKCpfX2Rl
c3RyX2Z1bmN0aW9uKSAodm9pZCAqKSkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgcHRocmVhZF9r
ZXlfY3JlYXRlICAocHRocmVhZF9rZXlfdCAqX19rZXksCgkJCQkgICAgdm9pZCAoKl9fZGVzdHJf
ZnVuY3Rpb24pICh2b2lkICopKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2tl
eV9kZWxldGUgIChwdGhyZWFkX2tleV90IF9fa2V5KSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGlu
dCBfX3B0aHJlYWRfc2V0c3BlY2lmaWMgIChwdGhyZWFkX2tleV90IF9fa2V5LAoJCQkJICAgICAg
IF9fY29uc3Qgdm9pZCAqX19wb2ludGVyKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBwdGhyZWFk
X3NldHNwZWNpZmljICAocHRocmVhZF9rZXlfdCBfX2tleSwKCQkJCSAgICAgX19jb25zdCB2b2lk
ICpfX3BvaW50ZXIpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gdm9pZCAqX19wdGhyZWFkX2dldHNw
ZWNpZmljICAocHRocmVhZF9rZXlfdCBfX2tleSkgIHRocm93ICgpICA7CmV4dGVybiB2b2lkICpw
dGhyZWFkX2dldHNwZWNpZmljICAocHRocmVhZF9rZXlfdCBfX2tleSkgIHRocm93ICgpICA7CgoK
IAoKIAoKCgpleHRlcm4gaW50IF9fcHRocmVhZF9vbmNlICAocHRocmVhZF9vbmNlX3QgKl9fb25j
ZV9jb250cm9sLAoJCQkJdm9pZCAoKl9faW5pdF9yb3V0aW5lKSAodm9pZCkpICB0aHJvdyAoKSAg
OwpleHRlcm4gaW50IHB0aHJlYWRfb25jZSAgKHB0aHJlYWRfb25jZV90ICpfX29uY2VfY29udHJv
bCwKCQkJICAgICAgdm9pZCAoKl9faW5pdF9yb3V0aW5lKSAodm9pZCkpICB0aHJvdyAoKSAgOwoK
CiAKCiAKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWxzdGF0ZSAgKGludCBfX3N0YXRlLCBp
bnQgKl9fb2xkc3RhdGUpICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNh
bmNlbHR5cGUgIChpbnQgX190eXBlLCBpbnQgKl9fb2xkdHlwZSkgIHRocm93ICgpICA7CgogCmV4
dGVybiBpbnQgcHRocmVhZF9jYW5jZWwgIChwdGhyZWFkX3QgX190aHJlYWQpICB0aHJvdyAoKSAg
OwoKIAoKCmV4dGVybiB2b2lkIHB0aHJlYWRfdGVzdGNhbmNlbCAgKHZvaWQpICB0aHJvdyAoKSAg
OwoKCiAKCgoKCgoKCgoKCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcHVzaCAgKHN0cnVj
dCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCgkJCQkJdm9pZCAoKl9fcm91dGlu
ZSkgKHZvaWQgKiksCgkJCQkJdm9pZCAqX19hcmcpICB0aHJvdyAoKSAgOwoKIAoKCgoKCmV4dGVy
biB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcG9wICAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVm
ZmVyICpfX2J1ZmZlciwKCQkJCSAgICAgICBpbnQgX19leGVjdXRlKSAgdGhyb3cgKCkgIDsKCiAK
CgojIDUxNSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwoKCiAKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy9zaWd0aHJlYWQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCiAKCmV4
dGVybiBpbnQgcHRocmVhZF9zaWdtYXNrICAoaW50IF9faG93LCBfX2NvbnN0IF9fc2lnc2V0X3Qg
Kl9fbmV3bWFzaywKCQkJCSBfX3NpZ3NldF90ICpfX29sZG1hc2spICB0aHJvdyAoKSAgOwoKIApl
eHRlcm4gaW50IHB0aHJlYWRfa2lsbCAgKHB0aHJlYWRfdCBfX3RocmVhZCwgaW50IF9fc2lnbm8p
ICB0aHJvdyAoKSAgOwoKCiMgNTE4ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKCgoKIAoK
IAoKCgoKCgoKCgoKZXh0ZXJuIGludCBfX3B0aHJlYWRfYXRmb3JrICAodm9pZCAoKl9fcHJlcGFy
ZSkgKHZvaWQpLAoJCQkJICB2b2lkICgqX19wYXJlbnQpICh2b2lkKSwKCQkJCSAgdm9pZCAoKl9f
Y2hpbGQpICh2b2lkKSkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgcHRocmVhZF9hdGZvcmsgICh2
b2lkICgqX19wcmVwYXJlKSAodm9pZCksCgkJCQl2b2lkICgqX19wYXJlbnQpICh2b2lkKSwKCQkJ
CXZvaWQgKCpfX2NoaWxkKSAodm9pZCkpICB0aHJvdyAoKSAgOwoKIAoKCmV4dGVybiB2b2lkIHB0
aHJlYWRfa2lsbF9vdGhlcl90aHJlYWRzX25wICAodm9pZCkgIHRocm93ICgpICA7CgoKIApleHRl
cm4gdm9pZCBfX3B0aHJlYWRfaW5pdGlhbGl6ZSAgKHZvaWQpICB0aHJvdyAoKSAgOwoKfSAKCgoj
IDcxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4u
Ly4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDIgMwoKCgoKCgoKCiMgODcgIi91c3IvbGli
L2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9n
KystMy9zdGxfYWxsb2MuaCIgMwoKIyA5NyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtl
LWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAzCgoj
IDExNSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8u
Li8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAzCgoKCgoKCgoKCiAKCgoKCgogCiAKCgoK
CgoKCgoKdGVtcGxhdGUgPGludCBfX2luc3Q+CmNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRl
IHsKCnByaXZhdGU6CgogIHN0YXRpYyB2b2lkKiBfU19vb21fbWFsbG9jKHNpemVfdCk7CiAgc3Rh
dGljIHZvaWQqIF9TX29vbV9yZWFsbG9jKHZvaWQqLCBzaXplX3QpOwoKCiAgc3RhdGljIHZvaWQg
KCogX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCk7CgoKcHVibGljOgoKICBzdGF0aWMgdm9p
ZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7CiAgICB2b2lkKiBfX3Jlc3VsdCA9IG1hbGxvYyhf
X24pOwogICAgaWYgKDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX21hbGxvYyhfX24p
OwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KCiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lk
KiBfX3AsIHNpemVfdCAgKQogIHsKICAgIGZyZWUoX19wKTsKICB9CgogIHN0YXRpYyB2b2lkKiBy
ZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICAsIHNpemVfdCBfX25ld19zeikKICB7CiAgICB2
b2lkKiBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICBpZiAoMCA9PSBfX3Jl
c3VsdCkgX19yZXN1bHQgPSBfU19vb21fcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsKICAgIHJldHVy
biBfX3Jlc3VsdDsKICB9CgogIHN0YXRpYyB2b2lkICgqIF9fc2V0X21hbGxvY19oYW5kbGVyKHZv
aWQgKCpfX2YpKCkpKSgpCiAgewogICAgdm9pZCAoKiBfX29sZCkoKSA9IF9fbWFsbG9jX2FsbG9j
X29vbV9oYW5kbGVyOwogICAgX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIgPSBfX2Y7CiAgICBy
ZXR1cm4oX19vbGQpOwogIH0KCn07CgogCgoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnZvaWQgKCog
X19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X19tYWxsb2NfYWxsb2Nfb29tX2hhbmRs
ZXIpKCkgPSAwOwoKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lkKgpfX21hbGxvY19hbGxvY190
ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fbWFsbG9jKHNpemVfdCBfX24pCnsKICAgIHZvaWQgKCog
X19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgIHZvaWQqIF9fcmVzdWx0OwoKICAgIGZvciAoOzsp
IHsKICAgICAgICBfX215X21hbGxvY19oYW5kbGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRs
ZXI7CiAgICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikgeyBjZXJyIDw8ICJvdXQg
b2YgbWVtb3J5IiA8PCBlbmRsOyBleGl0KDEpIDsgfQogICAgICAgICgqX19teV9tYWxsb2NfaGFu
ZGxlcikoKTsKICAgICAgICBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgICAgIGlmIChfX3Jl
c3VsdCkgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0KfQoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnZv
aWQqIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9TX29vbV9yZWFsbG9jKHZvaWQq
IF9fcCwgc2l6ZV90IF9fbikKewogICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVyKSgpOwog
ICAgdm9pZCogX19yZXN1bHQ7CgogICAgZm9yICg7OykgewogICAgICAgIF9fbXlfbWFsbG9jX2hh
bmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBpZiAoMCA9PSBfX215
X21hbGxvY19oYW5kbGVyKSB7IGNlcnIgPDwgIm91dCBvZiBtZW1vcnkiIDw8IGVuZGw7IGV4aXQo
MSkgOyB9CiAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9fcmVzdWx0
ID0gcmVhbGxvYyhfX3AsIF9fbik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4oX19yZXN1
bHQpOwogICAgfQp9Cgp0eXBlZGVmIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPDA+IG1hbGxvY19h
bGxvYzsKCnRlbXBsYXRlPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBzaW1wbGVfYWxs
b2MgewoKcHVibGljOgogICAgc3RhdGljIF9UcCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAg
eyByZXR1cm4gMCA9PSBfX24gPyAwIDogKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6
ZW9mIChfVHApKTsgfQogICAgc3RhdGljIF9UcCogYWxsb2NhdGUodm9pZCkKICAgICAgeyByZXR1
cm4gKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsgfQogICAgc3RhdGljIHZv
aWQgZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgICAgeyBpZiAoMCAhPSBfX24p
IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KICAgIHN0YXRp
YyB2b2lkIGRlYWxsb2NhdGUoX1RwKiBfX3ApCiAgICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9f
cCwgc2l6ZW9mIChfVHApKTsgfQp9OwoKIAogCiAKIAogCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+
CmNsYXNzIGRlYnVnX2FsbG9jIHsKCnByaXZhdGU6CgogIGVudW0ge19TX2V4dHJhID0gOH07ICAg
CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIAoKcHVi
bGljOgoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7CiAgICBjaGFyKiBf
X3Jlc3VsdCA9IChjaGFyKilfQWxsb2M6OmFsbG9jYXRlKF9fbiArIF9TX2V4dHJhKTsKICAgICoo
c2l6ZV90KilfX3Jlc3VsdCA9IF9fbjsKICAgIHJldHVybiBfX3Jlc3VsdCArIF9TX2V4dHJhOwog
IH0KCiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24pCiAgewog
ICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gX1NfZXh0cmE7CiAgICAoKHZvaWQpICgo
ICooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24gKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoIiooc2l6
ZV90KilfX3JlYWxfcCA9PSBfX24iICwJIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1s
aW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIsIDI2Mywg
X19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKICAgIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3Jl
YWxfcCwgX19uICsgX1NfZXh0cmEpOwogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9p
ZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeikKICB7CiAgICBjaGFyKiBf
X3JlYWxfcCA9IChjaGFyKilfX3AgLSBfU19leHRyYTsKICAgICgodm9pZCkgKCggKihzaXplX3Qq
KV9fcmVhbF9wID09IF9fb2xkX3N6ICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCop
X19yZWFsX3AgPT0gX19vbGRfc3oiICwJIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1s
aW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIsIDI3MCwg
X19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIq
KQogICAgICBfQWxsb2M6OnJlYWxsb2NhdGUoX19yZWFsX3AsIF9fb2xkX3N6ICsgX1NfZXh0cmEs
IF9fbmV3X3N6ICsgX1NfZXh0cmEpOwogICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19uZXdfc3o7
CiAgICByZXR1cm4gX19yZXN1bHQgKyBfU19leHRyYTsKICB9Cgp9OwoKCgoKCgoKCgoKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKIAogCgogCiAKIAogCiAKIAogCiAKIAoKCgoKCgoKdGVtcGxhdGUg
PGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CmNsYXNzIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZSB7
Cgpwcml2YXRlOgogICAKICAgCgogICAgZW51bSB7X0FMSUdOID0gOH07CiAgICBlbnVtIHtfTUFY
X0JZVEVTID0gMTI4fTsKICAgIGVudW0ge19ORlJFRUxJU1RTID0gX01BWF9CWVRFUy9fQUxJR059
OwoKICBzdGF0aWMgc2l6ZV90CiAgX1Nfcm91bmRfdXAoc2l6ZV90IF9fYnl0ZXMpCiAgICB7IHJl
dHVybiAoKChfX2J5dGVzKSArIF9BTElHTi0xKSAmIH4oX0FMSUdOIC0gMSkpOyB9Cgpwcml2YXRl
IDoKICB1bmlvbiBfT2JqIHsKICAgICAgICB1bmlvbiBfT2JqKiBfTV9mcmVlX2xpc3RfbGluazsK
ICAgICAgICBjaGFyIF9NX2NsaWVudF9kYXRhWzFdOyAgICAgCiAgfTsKcHJpdmF0ZToKCgoKCiAg
ICBzdGF0aWMgX09iaiogdm9sYXRpbGUgIF9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNUU107CgogIHN0
YXRpYyAgc2l6ZV90IF9TX2ZyZWVsaXN0X2luZGV4KHNpemVfdCBfX2J5dGVzKSB7CiAgICAgICAg
cmV0dXJuICgoKF9fYnl0ZXMpICsgX0FMSUdOLTEpL19BTElHTiAtIDEpOwogIH0KCiAgIAogIHN0
YXRpYyB2b2lkKiBfU19yZWZpbGwoc2l6ZV90IF9fbik7CiAgIAogICAKICBzdGF0aWMgY2hhciog
X1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsKCiAgIAogIHN0YXRp
YyBjaGFyKiBfU19zdGFydF9mcmVlOwogIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsKICBzdGF0
aWMgc2l6ZV90IF9TX2hlYXBfc2l6ZTsKCgoKCgoKCgogICAgc3RhdGljIHB0aHJlYWRfbXV0ZXhf
dCBfU19ub2RlX2FsbG9jYXRvcl9sb2NrOwoKCgoKCgojIDM4OSAiL3Vzci9saWIvZ2NjLWxpYi9p
NTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9h
bGxvYy5oIiAzCgoKICAgIGNsYXNzIF9Mb2NrIHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAg
IF9Mb2NrKCkgeyBpZiAodGhyZWFkcykgcHRocmVhZF9tdXRleF9sb2NrKCZfU19ub2RlX2FsbG9j
YXRvcl9sb2NrKSA7IH0KICAgICAgICAgICAgfl9Mb2NrKCkgeyBpZiAodGhyZWFkcykgcHRocmVh
ZF9tdXRleF91bmxvY2soJl9TX25vZGVfYWxsb2NhdG9yX2xvY2spIDsgfQogICAgfTsKICAgIGZy
aWVuZCBjbGFzcyBfTG9jazsKCnB1YmxpYzoKCiAgIAogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShz
aXplX3QgX19uKQogIHsKICAgIF9PYmoqIHZvbGF0aWxlICogX19teV9mcmVlX2xpc3Q7CiAgICBf
T2JqKiAgIF9fcmVzdWx0OwoKICAgIGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7CiAg
ICAgICAgcmV0dXJuKG1hbGxvY19hbGxvYzo6YWxsb2NhdGUoX19uKSk7CiAgICB9CiAgICBfX215
X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CiAgICAg
CiAgICAgCiAgICAgCgogICAgICAgICAKICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7Cgog
ICAgX19yZXN1bHQgPSAqX19teV9mcmVlX2xpc3Q7CiAgICBpZiAoX19yZXN1bHQgPT0gMCkgewog
ICAgICAgIHZvaWQqIF9fciA9IF9TX3JlZmlsbChfU19yb3VuZF91cChfX24pKTsKICAgICAgICBy
ZXR1cm4gX19yOwogICAgfQogICAgKl9fbXlfZnJlZV9saXN0ID0gX19yZXN1bHQgLT4gX01fZnJl
ZV9saXN0X2xpbms7CiAgICByZXR1cm4gKF9fcmVzdWx0KTsKICB9OwoKICAgCiAgc3RhdGljIHZv
aWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24pCiAgewogICAgX09iaiogX19xID0g
KF9PYmoqKV9fcDsKICAgIF9PYmoqIHZvbGF0aWxlICogX19teV9mcmVlX2xpc3Q7CgogICAgaWYg
KF9fbiA+IChzaXplX3QpIF9NQVhfQllURVMpIHsKICAgICAgICBtYWxsb2NfYWxsb2M6OmRlYWxs
b2NhdGUoX19wLCBfX24pOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIF9fbXlfZnJlZV9saXN0
ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKICAgICAKCiAgICAgICAg
IAogICAgICAgIF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKCiAgICBfX3EgLT4gX01fZnJlZV9saXN0
X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAqX19teV9mcmVlX2xpc3QgPSBfX3E7CiAgICAg
CiAgfQoKICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9z
eiwgc2l6ZV90IF9fbmV3X3N6KTsKCn0gOwoKdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
dGU8IHRydWUgLCAwPiBhbGxvYzsKdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8ZmFs
c2UsIDA+IHNpbmdsZV9jbGllbnRfYWxsb2M7CgoKCiAKIAogCiAKdGVtcGxhdGUgPGJvb2wgX190
aHJlYWRzLCBpbnQgX19pbnN0PgpjaGFyKgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJl
YWRzLCBfX2luc3Q+OjpfU19jaHVua19hbGxvYyhzaXplX3QgX19zaXplLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIF9fbm9i
anMpCnsKICAgIGNoYXIqIF9fcmVzdWx0OwogICAgc2l6ZV90IF9fdG90YWxfYnl0ZXMgPSBfX3Np
emUgKiBfX25vYmpzOwogICAgc2l6ZV90IF9fYnl0ZXNfbGVmdCA9IF9TX2VuZF9mcmVlIC0gX1Nf
c3RhcnRfZnJlZTsKCiAgICBpZiAoX19ieXRlc19sZWZ0ID49IF9fdG90YWxfYnl0ZXMpIHsKICAg
ICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBf
X3RvdGFsX2J5dGVzOwogICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICB9IGVsc2UgaWYgKF9f
Ynl0ZXNfbGVmdCA+PSBfX3NpemUpIHsKICAgICAgICBfX25vYmpzID0gKGludCkoX19ieXRlc19s
ZWZ0L19fc2l6ZSk7CiAgICAgICAgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAg
ICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9mcmVlOwogICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0g
X190b3RhbF9ieXRlczsKICAgICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgfSBlbHNlIHsKICAg
ICAgICBzaXplX3QgX19ieXRlc190b19nZXQgPQoJICAyICogX190b3RhbF9ieXRlcyArIF9TX3Jv
dW5kX3VwKF9TX2hlYXBfc2l6ZSA+PiA0KTsKICAgICAgICAgCiAgICAgICAgaWYgKF9fYnl0ZXNf
bGVmdCA+IDApIHsKICAgICAgICAgICAgX09iaiogdm9sYXRpbGUgKiBfX215X2ZyZWVfbGlzdCA9
CiAgICAgICAgICAgICAgICAgICAgICAgIF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4
KF9fYnl0ZXNfbGVmdCk7CgogICAgICAgICAgICAoKF9PYmoqKV9TX3N0YXJ0X2ZyZWUpIC0+IF9N
X2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAqX19teV9mcmVl
X2xpc3QgPSAoX09iaiopX1Nfc3RhcnRfZnJlZTsKICAgICAgICB9CiAgICAgICAgX1Nfc3RhcnRf
ZnJlZSA9IChjaGFyKiltYWxsb2MoX19ieXRlc190b19nZXQpOwogICAgICAgIGlmICgwID09IF9T
X3N0YXJ0X2ZyZWUpIHsKICAgICAgICAgICAgc2l6ZV90IF9faTsKICAgICAgICAgICAgX09iaiog
dm9sYXRpbGUgKiBfX215X2ZyZWVfbGlzdDsKCSAgICBfT2JqKiBfX3A7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgICAgIGZvciAoX19pID0gX19zaXpl
OyBfX2kgPD0gX01BWF9CWVRFUzsgX19pICs9IF9BTElHTikgewogICAgICAgICAgICAgICAgX19t
eV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2kpOwogICAg
ICAgICAgICAgICAgX19wID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAgICAgaWYgKDAg
IT0gX19wKSB7CiAgICAgICAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19wIC0+IF9N
X2ZyZWVfbGlzdF9saW5rOwogICAgICAgICAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hh
ciopX19wOwogICAgICAgICAgICAgICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSAr
IF9faTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXplLCBf
X25vYmpzKSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoJICAgIF9TX2VuZF9mcmVlID0gMDsJIAogICAg
ICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKW1hbGxvY19hbGxvYzo6YWxsb2NhdGUoX19i
eXRlc190b19nZXQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgIAog
ICAgICAgIH0KICAgICAgICBfU19oZWFwX3NpemUgKz0gX19ieXRlc190b19nZXQ7CiAgICAgICAg
X1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19ieXRlc190b19nZXQ7CiAgICAgICAgcmV0
dXJuKF9TX2NodW5rX2FsbG9jKF9fc2l6ZSwgX19ub2JqcykpOwogICAgfQp9CgoKIAogCiAKdGVt
cGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pgp2b2lkKgpfX2RlZmF1bHRfYWxsb2Nf
dGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19yZWZpbGwoc2l6ZV90IF9fbikKewogICAg
aW50IF9fbm9ianMgPSAyMDsKICAgIGNoYXIqIF9fY2h1bmsgPSBfU19jaHVua19hbGxvYyhfX24s
IF9fbm9ianMpOwogICAgX09iaiogdm9sYXRpbGUgKiBfX215X2ZyZWVfbGlzdDsKICAgIF9PYmoq
IF9fcmVzdWx0OwogICAgX09iaiogX19jdXJyZW50X29iajsKICAgIF9PYmoqIF9fbmV4dF9vYmo7
CiAgICBpbnQgX19pOwoKICAgIGlmICgxID09IF9fbm9ianMpIHJldHVybihfX2NodW5rKTsKICAg
IF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsK
CiAgICAgCiAgICAgIF9fcmVzdWx0ID0gKF9PYmoqKV9fY2h1bms7CiAgICAgICpfX215X2ZyZWVf
bGlzdCA9IF9fbmV4dF9vYmogPSAoX09iaiopKF9fY2h1bmsgKyBfX24pOwogICAgICBmb3IgKF9f
aSA9IDE7IDsgX19pKyspIHsKICAgICAgICBfX2N1cnJlbnRfb2JqID0gX19uZXh0X29iajsKICAg
ICAgICBfX25leHRfb2JqID0gKF9PYmoqKSgoY2hhciopX19uZXh0X29iaiArIF9fbik7CiAgICAg
ICAgaWYgKF9fbm9ianMgLSAxID09IF9faSkgewogICAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+
IF9NX2ZyZWVfbGlzdF9saW5rID0gMDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9IF9fbmV4
dF9vYmo7CiAgICAgICAgfQogICAgICB9CiAgICByZXR1cm4oX19yZXN1bHQpOwp9Cgp0ZW1wbGF0
ZSA8Ym9vbCB0aHJlYWRzLCBpbnQgaW5zdD4Kdm9pZCoKX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl
PHRocmVhZHMsIGluc3Q+OjpyZWFsbG9jYXRlKHZvaWQqIF9fcCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX29sZF9zeiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX25l
d19zeikKewogICAgdm9pZCogX19yZXN1bHQ7CiAgICBzaXplX3QgX19jb3B5X3N6OwoKICAgIGlm
IChfX29sZF9zeiA+IChzaXplX3QpIF9NQVhfQllURVMgJiYgX19uZXdfc3ogPiAoc2l6ZV90KSBf
TUFYX0JZVEVTKSB7CiAgICAgICAgcmV0dXJuKHJlYWxsb2MoX19wLCBfX25ld19zeikpOwogICAg
fQogICAgaWYgKF9TX3JvdW5kX3VwKF9fb2xkX3N6KSA9PSBfU19yb3VuZF91cChfX25ld19zeikp
IHJldHVybihfX3ApOwogICAgX19yZXN1bHQgPSBhbGxvY2F0ZShfX25ld19zeik7CiAgICBfX2Nv
cHlfc3ogPSBfX25ld19zeiA+IF9fb2xkX3N6PyBfX29sZF9zeiA6IF9fbmV3X3N6OwogICAgbWVt
Y3B5KF9fcmVzdWx0LCBfX3AsIF9fY29weV9zeik7CiAgICBkZWFsbG9jYXRlKF9fcCwgX19vbGRf
c3opOwogICAgcmV0dXJuKF9fcmVzdWx0KTsKfQoKCiAgICB0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVh
ZHMsIGludCBfX2luc3Q+CiAgICBwdGhyZWFkX211dGV4X3QKICAgIF9fZGVmYXVsdF9hbGxvY190
ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX25vZGVfYWxsb2NhdG9yX2xvY2sKICAgICAg
ICA9IHswLCAwLCAwLCBQVEhSRUFEX01VVEVYX0ZBU1RfTlAsIHswLCAwfX0gOwoKCgoKCgoKCgoj
IDYwMiAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8u
Li8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAzCgoKIyA2ODkgIi91c3IvbGliL2djYy1s
aWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9z
dGxfYWxsb2MuaCIgMwoKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KY2hh
ciogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nfc3RhcnRf
ZnJlZSA9IDA7Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqIF9f
ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2VuZF9mcmVlID0g
MDsKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kc2l6ZV90IF9fZGVmYXVs
dF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2hlYXBfc2l6ZSA9IDA7Cgp0
ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+Cl9fZGVmYXVsdF9hbGxvY190ZW1w
bGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9PYmoqIHZvbGF0aWxlIApfX2RlZmF1bHRfYWxsb2Nf
dGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+IDo6X1NfZnJlZV9saXN0WwogICAgX05GUkVFTElT
VFMKXSA9IHswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCB9
OwogCiAKIAoKCgoKCgoKCgoKIAogCiAKIAogCiAKIAoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpj
bGFzcyBhbGxvY2F0b3IgewogIHR5cGVkZWYgYWxsb2MgX0FsbG9jOyAgICAgICAgICAgCnB1Ymxp
YzoKICB0eXBlZGVmIHNpemVfdCAgICAgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90ICBk
aWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBj
b25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAgIHJlZmVyZW5jZTsK
ICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1RwICAgICAg
ICB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAg
ICB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9OwoKICBhbGxvY2F0b3IoKSB0aHJv
dygpICB7fQogIGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3ImKSB0aHJvdygpICB7fQogIHRlbXBs
YXRlIDxjbGFzcyBfVHAxPiBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yPF9UcDE+JikgdGhyb3co
KSAge30KICB+YWxsb2NhdG9yKCkgdGhyb3coKSAge30KCiAgcG9pbnRlciBhZGRyZXNzKHJlZmVy
ZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KICBjb25zdF9wb2ludGVyIGFkZHJlc3Mo
Y29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQoKICAgCiAgIAogIF9U
cCogYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9pZCogPSAwKSB7CiAgICByZXR1cm4g
X19uICE9IDAgPyBzdGF0aWNfY2FzdDxfVHAqPihfQWxsb2M6OmFsbG9jYXRlKF9fbiAqIHNpemVv
ZihfVHApKSkKICAgICAgICAgICAgICAgICAgICA6IDA7CiAgfQoKICAgCiAgdm9pZCBkZWFsbG9j
YXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQogICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUo
X19wLCBfX24gKiBzaXplb2YoX1RwKSk7IH0KCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3Qg
dGhyb3coKSAKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lk
IGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAo
X192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07
Cgp0ZW1wbGF0ZTw+CmNsYXNzIGFsbG9jYXRvcjx2b2lkPiB7CiAgdHlwZWRlZiBzaXplX3QgICAg
ICBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlw
ZWRlZiB2b2lkKiAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9p
bnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAgIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFz
cyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVy
OwogIH07Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7
CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxf
VDI+JikKewogIHJldHVybiBmYWxzZTsKfQoKIAogCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9fYWxsb2NhdG9yIHsKICBfQWxsb2MgX191bmRlcmx5
aW5nX2FsbG9jOwoKICB0eXBlZGVmIHNpemVfdCAgICBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJk
aWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICBwb2ludGVyOwogIHR5
cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiAgICAgICByZWZl
cmVuY2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9U
cCAgICAgICAgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJp
bmQgewogICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOwogIH07Cgog
IF9fYWxsb2NhdG9yKCkgdGhyb3coKSAge30KICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRv
ciYgX19hKSB0aHJvdygpIAogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWlu
Z19hbGxvYykge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBfX2FsbG9jYXRvcihjb25zdCBf
X2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+JiBfX2EpIHRocm93KCkgCiAgICA6IF9fdW5kZXJseWlu
Z19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQogIH5fX2FsbG9jYXRvcigpIHRocm93
KCkgIHt9CgogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAm
X194OyB9CiAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0
IHsgcmV0dXJuICZfX3g7IH0KCiAgIAogIF9UcCogYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29u
c3Qgdm9pZCogPSAwKSB7CiAgICByZXR1cm4gX19uICE9IDAKICAgICAgICA/IHN0YXRpY19jYXN0
PF9UcCo+KF9fdW5kZXJseWluZ19hbGxvYy5hbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAg
ICAgICAgOiAwOwogIH0KCiAgIAogIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90
eXBlIF9fbikKICAgIHsgX191bmRlcmx5aW5nX2FsbG9jLmRlYWxsb2NhdGUoX19wLCBfX24gKiBz
aXplb2YoX1RwKSk7IH0KCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgdGhyb3coKSAKICAg
IHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0cnVjdChw
b2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAg
dm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0FsbG9jPgpjbGFzcyBfX2FsbG9jYXRvcjx2b2lkLCBfQWxsb2M+IHsKICB0eXBlZGVm
IHNpemVfdCAgICAgIHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCAgIGRpZmZlcmVuY2Vf
dHlwZTsKICB0eXBlZGVmIHZvaWQqICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2b2lk
KiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgdmFsdWVfdHlwZTsKCiAgdGVt
cGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewogICAgdHlwZWRlZiBfX2FsbG9jYXRv
cjxfVHAxLCBfQWxsb2M+IG90aGVyOwogIH07Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19hbGxvY2F0b3I8X1RwLCBf
QWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fYWxsb2NhdG9yPF9U
cCwgX0FsbG9jPiYgX19hMikKewogIHJldHVybiBfX2ExLl9fdW5kZXJseWluZ19hbGxvYyA9PSBf
X2EyLl9fdW5kZXJseWluZ19hbGxvYzsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B
bGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxv
Yz4mIF9fYTEsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19hbGxvY2F0b3I8X1RwLCBf
QWxsb2M+JiBfX2EyKQp7CiAgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2FsbG9jICE9IF9fYTIu
X191bmRlcmx5aW5nX2FsbG9jOwp9CgoKIAogCiAKCnRlbXBsYXRlIDxpbnQgaW5zdD4KaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxpbnN0PiYsCiAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8aW5zdD4m
KQp7CiAgcmV0dXJuIHRydWU7Cn0KCgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4KaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+JiwKICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+JikK
ewogIHJldHVybiBmYWxzZTsKfQoKCgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2lu
c3Q+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl
PF9fdGhyZWFkcywgX19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWZh
dWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpCnsKICByZXR1cm4gdHJ1ZTsK
fQoKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+
JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8
X190aHJlYWRzLCBfX2luc3Q+JikKewogIHJldHVybiBmYWxzZTsKfQoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxv
Yz4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mKSB7
CiAgcmV0dXJuIHRydWU7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mLAogICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mKSB7CiAgcmV0dXJuIGZhbHNlOwp9CgoKIAog
CiAKIAogCiAKCiAKIAogCiAKIAogCgogCiAKIAogCiAKIAogCiAKIAogCiAKCiAKCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CnN0cnVjdCBfQWxsb2NfdHJhaXRzCnsKICBz
dGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSBmYWxzZTsKICB0eXBlZGVmIHR5cGVu
YW1lIF9BbGxvY2F0b3I6OiAgIHJlYmluZDxfVHA+OjpvdGhlcgogICAgICAgICAgYWxsb2NhdG9y
X3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpjb25zdCBi
b29sIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X1NfaW5zdGFuY2VsZXNzOwoKIAoK
dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMT4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1Rw
LCBhbGxvY2F0b3I8X1RwMT4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNz
ID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGFsbG9jPiBfQWxsb2NfdHlwZTsK
ICB0eXBlZGVmIGFsbG9jYXRvcjxfVHA+IGFsbG9jYXRvcl90eXBlOwp9OwoKIAoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX21hbGxv
Y19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3Rh
bmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxv
Y190ZW1wbGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxf
VHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKfTsK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kc3RydWN0
IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBf
X2luc3Q+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAg
dHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJl
YWRzLCBfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0
b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAg
ICAgICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B
bGxvYz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4Kewog
IHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1w
bGVfYWxsb2M8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRl
ZiBfX2FsbG9jYXRvcjxfVHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsK
fTsKCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgaW50IF9faW5zdD4Kc3Ry
dWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAgICAgICAgICAgICBfX2FsbG9jYXRvcjxf
VHAxLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gPgp7CiAgc3RhdGljIGNvbnN0
IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAs
IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVm
IF9fYWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IGFsbG9j
YXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEsIGJvb2wgX190
aHIsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwKICAgICAgICAgICAgICAg
ICAgICAgIF9fYWxsb2NhdG9yPF9UcDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsIF9faW5zdD4gPiA+CnsKICBzdGF0aWMg
Y29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9j
PF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLF9faW5zdD4gPgogICAgICAgICAg
X0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVmYXVsdF9hbGxvY190
ZW1wbGF0ZTxfX3RocixfX2luc3Q+ID4KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxv
Y190cmFpdHM8X1RwLCBfX2FsbG9jYXRvcjxfVHAxLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gPgp7
CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNp
bXBsZV9hbGxvYzxfVHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsKICB0eXBl
ZGVmIF9fYWxsb2NhdG9yPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBl
Owp9OwoKCgoKCgoKCiAKCgoKCgogCiAKIAojIDMxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFu
ZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvdmVjdG9yIiAyIDMK
CiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8u
Li8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCiAKCgoKCgoKCgogCgogCiAKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSB2
b2lkIGRlc3Ryb3koX1RwKiBfX3BvaW50ZXIpIHsKICBfX3BvaW50ZXItPn5fVHAoKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgdm9pZCBjb25zdHJ1Y3QoX1QxKiBf
X3AsIGNvbnN0IF9UMiYgX192YWx1ZSkgewogIG5ldyAoX19wKSBfVDEoX192YWx1ZSk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfVDE+CmlubGluZSB2b2lkIGNvbnN0cnVjdChfVDEqIF9fcCkgewogIG5l
dyAoX19wKSBfVDEoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGlu
ZSB2b2lkCl9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXJhdG9yIF9fbGFzdCwgX19mYWxzZV90eXBlKQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFz
dDsgKytfX2ZpcnN0KQogICAgZGVzdHJveSgmKl9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyYXRvcj4KaW5saW5lIHZvaWQgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJh
dG9yLCBfRm9yd2FyZEl0ZXJhdG9yLCBfX3RydWVfdHlwZSkge30KCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkCl9fZGVzdHJveShfRm9yd2Fy
ZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfVHAqKQp7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFsX2Rlc3RydWN0b3IK
ICAgICAgICAgIF9Ucml2aWFsX2Rlc3RydWN0b3I7CiAgX19kZXN0cm95X2F1eChfX2ZpcnN0LCBf
X2xhc3QsIF9Ucml2aWFsX2Rlc3RydWN0b3IoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXJhdG9yPgppbmxpbmUgdm9pZCBkZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwg
X0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpIHsKICBfX2Rlc3Ryb3koX19maXJzdCwgX19sYXN0LCBf
X3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSApOwp9CgppbmxpbmUgdm9pZCBkZXN0cm95KGNoYXIqLCBj
aGFyKikge30KaW5saW5lIHZvaWQgZGVzdHJveSh3Y2hhcl90Kiwgd2NoYXJfdCopIHt9CgogCgoK
CiAKIAogCiMgMzIgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMv
Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy92ZWN0b3IiIDIgMwoKIyAxICIvdXNyL2xpYi9nY2Mt
bGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv
c3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK
CgoKIAoKIAoKIAogCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0
ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIgCl9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
X0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5
cGUpCnsKICByZXR1cm4gY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVyIApf
X3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKewogIF9Gb3J3YXJkSXRlciBfX2N1
ciA9IF9fcmVzdWx0OwogIHRyeSAgewogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytf
X2ZpcnN0LCArK19fY3VyKQogICAgICBjb25zdHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOwogICAg
cmV0dXJuIF9fY3VyOwogIH0KICBjYXRjaCguLi4pIHsgIGRlc3Ryb3koX19yZXN1bHQsIF9fY3Vy
KSA7IHRocm93OyB9IDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9y
d2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRf
Y29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIF9UcCopCnsKICB0eXBlZGVmIHR5cGVuYW1l
IF9fdHlwZV90cmFpdHM8X1RwPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICByZXR1cm4gX191bmlu
aXRpYWxpemVkX2NvcHlfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9Jc19QT0QoKSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGlu
ZSBfRm9yd2FyZEl0ZXIKICB1bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVz
dWx0KQp7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19y
ZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZSggX19yZXN1
bHQgKSApOwp9CgppbmxpbmUgY2hhciogdW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IGNoYXIqIF9f
Zmlyc3QsIGNvbnN0IGNoYXIqIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFyKiBfX3Jlc3VsdCkgewogIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIF9fbGFzdCAt
IF9fZmlyc3QpOwogIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKaW5s
aW5lIHdjaGFyX3QqIAp1bmluaXRpYWxpemVkX2NvcHkoY29uc3Qgd2NoYXJfdCogX19maXJzdCwg
Y29uc3Qgd2NoYXJfdCogX19sYXN0LAogICAgICAgICAgICAgICAgICAgd2NoYXJfdCogX19yZXN1
bHQpCnsKICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXplb2Yod2NoYXJfdCkgKiAoX19s
YXN0IC0gX19maXJzdCkpOwogIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsK
fQoKIAoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9y
d2FyZEl0ZXI+CnBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPgpfX3VuaW5pdGlhbGl6ZWRf
Y29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAg
ICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgaW5w
dXRfaXRlcmF0b3JfdGFnKQp7CiAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19yZXN1bHQ7CiAgdHJ5
ICB7CiAgICBmb3IgKCA7IF9fY291bnQgPiAwIDsgLS1fX2NvdW50LCArK19fZmlyc3QsICsrX19j
dXIpIAogICAgICBjb25zdHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOwogICAgcmV0dXJuIHBhaXI8
X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2N1cik7CiAgfQogIGNhdGNoKC4u
LikgeyAgZGVzdHJveShfX3Jlc3VsdCwgX19jdXIpIDsgdGhyb3c7IH0gOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+
CmlubGluZSBwYWlyPF9SYW5kb21BY2Nlc3NJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9fdW5pbml0aWFs
aXplZF9jb3B5X24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAg
ICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpIHsKICBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QgPSBfX2ZpcnN0ICsgX19jb3VudDsKICByZXR1cm4gcGFpcjxfUmFuZG9tQWNjZXNz
SXRlciwgX0ZvcndhcmRJdGVyPigKICAgICAgICAgICAgICAgICBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0
ZXI+CmlubGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4KX191bmluaXRpYWxpemVk
X2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAg
ICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkgewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRf
Y29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5l
IHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPgp1bmluaXRpYWxpemVkX2NvcHlfbihfSW5w
dXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3
YXJkSXRlciBfX3Jlc3VsdCkgewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9fZmly
c3QsIF9fY291bnQsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
aXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOwp9CgogCiAKdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX3VuaW5pdGlhbGl6ZWRfZmlsbF9h
dXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIAogICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQp7CiAgZmlsbChfX2Zp
cnN0LCBfX2xhc3QsIF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz
IF9UcD4Kdm9pZApfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1Rw
JiBfX3gsIF9fZmFsc2VfdHlwZSkKewogIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAg
dHJ5ICB7CiAgICBmb3IgKCA7IF9fY3VyICE9IF9fbGFzdDsgKytfX2N1cikKICAgICAgY29uc3Ry
dWN0KCYqX19jdXIsIF9feCk7CiAgfQogIGNhdGNoKC4uLikgeyAgZGVzdHJveShfX2ZpcnN0LCBf
X2N1cikgOyB0aHJvdzsgfSA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz
IF9UcCwgY2xhc3MgX1RwMT4KaW5saW5lIHZvaWQgX191bmluaXRpYWxpemVkX2ZpbGwoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9feCwgX1RwMSopCnsKICB0eXBlZGVmIHR5cGVuYW1l
IF9fdHlwZV90cmFpdHM8X1RwMT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgX191bmluaXRpYWxp
emVkX2ZpbGxfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX194LCBfSXNfUE9EKCkpOwogICAgICAgICAg
ICAgICAgICAgCn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5s
aW5lIHZvaWQgdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkKewogIF9fdW5pbml0aWFsaXplZF9m
aWxsKF9fZmlyc3QsIF9fbGFzdCwgX194LCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSApOwp9Cgog
CiAKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4K
aW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0
ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf
VHAmIF9feCwgX190cnVlX3R5cGUpCnsKICByZXR1cm4gZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9U
cD4KX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYg
X194LCBfX2ZhbHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogIHRy
eSAgewogICAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2N1cikKICAgICAgY29uc3RydWN0
KCYqX19jdXIsIF9feCk7CiAgICByZXR1cm4gX19jdXI7CiAgfQogIGNhdGNoKC4uLikgeyAgZGVz
dHJveShfX2ZpcnN0LCBfX2N1cikgOyB0aHJvdzsgfSA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9y
d2FyZEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CmlubGluZSBfRm9y
d2FyZEl0ZXIgCl9fdW5pbml0aWFsaXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9T
aXplIF9fbiwgY29uc3QgX1RwJiBfX3gsIF9UcDEqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5
cGVfdHJhaXRzPF9UcDE+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogIHJldHVybiBfX3VuaW5pdGlh
bGl6ZWRfZmlsbF9uX2F1eChfX2ZpcnN0LCBfX24sIF9feCwgX0lzX1BPRCgpKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KaW5saW5lIF9G
b3J3YXJkSXRlciAKdW5pbml0aWFsaXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9T
aXplIF9fbiwgY29uc3QgX1RwJiBfX3gpCnsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxf
bihfX2ZpcnN0LCBfX24sIF9feCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKIAogCgog
CiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBj
bGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2Nv
cHlfY29weShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19s
YXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCnsK
ICBfRm9yd2FyZEl0ZXIgX19taWQgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFz
dDEsIF9fcmVzdWx0KTsKICB0cnkgIHsKICAgIHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19m
aXJzdDIsIF9fbGFzdDIsIF9fbWlkKTsKICB9CiAgY2F0Y2goLi4uKSB7ICBkZXN0cm95KF9fcmVz
dWx0LCBfX21pZCkgOyB0aHJvdzsgfSA7Cn0KCiAKIAogCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0lucHV0SXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlciAK
X191bmluaXRpYWxpemVkX2ZpbGxfY29weShfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIF9Gb3J3YXJk
SXRlciBfX21pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0KQp7CiAgdW5pbml0aWFsaXplZF9maWxsKF9fcmVzdWx0LCBfX21pZCwgX194KTsKICB0cnkg
IHsKICAgIHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX21pZCk7
CiAgfQogIGNhdGNoKC4uLikgeyAgZGVzdHJveShfX3Jlc3VsdCwgX19taWQpIDsgdGhyb3c7IH0g
Owp9CgogCiAKIAp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVy
LCBjbGFzcyBfVHA+CmlubGluZSB2b2lkCl9fdW5pbml0aWFsaXplZF9jb3B5X2ZpbGwoX0lucHV0
SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpCnsKICBfRm9yd2FyZEl0ZXIgX19taWQy
ID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0Mik7CiAgdHJ5
ICB7CiAgICB1bmluaXRpYWxpemVkX2ZpbGwoX19taWQyLCBfX2xhc3QyLCBfX3gpOwogIH0KICBj
YXRjaCguLi4pIHsgIGRlc3Ryb3koX19maXJzdDIsIF9fbWlkMikgOyB0aHJvdzsgfSA7Cn0KCiAK
CgoKIAogCiAKIyAzMyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUu
My8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3ZlY3RvciIgMiAzCgojIDEgIi91c3IvbGliL2dj
Yy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst
My9zdGxfdmVjdG9yLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAg
CgoKCgoKCiAKIAogCiAKIAoKCgogCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0
b3IsIGJvb2wgX0lzU3RhdGljPgpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAg
dHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46OmFsbG9jYXRv
cl90eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxs
b2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0KCiAgX1ZlY3Rvcl9h
bGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX2RhdGFfYWxsb2Nh
dG9yKF9fYSksIF9NX3N0YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDAp
IAogIHt9CiAgCnByb3RlY3RlZDoKICBhbGxvY2F0b3JfdHlwZSBfTV9kYXRhX2FsbG9jYXRvcjsK
ICBfVHAqIF9NX3N0YXJ0OwogIF9UcCogX01fZmluaXNoOwogIF9UcCogX01fZW5kX29mX3N0b3Jh
Z2U7CgogIF9UcCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9NX2RhdGFf
YWxsb2NhdG9yLmFsbG9jYXRlKF9fbik7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUoX1RwKiBfX3As
IHNpemVfdCBfX24pCiAgICB7IGlmIChfX3ApIF9NX2RhdGFfYWxsb2NhdG9yLmRlYWxsb2NhdGUo
X19wLCBfX24pOyB9Cn07CgogCiAKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRv
cj4KY2xhc3MgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jYXRvciwgdHJ1ZT4gewpwdWJs
aWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46OmFs
bG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBn
ZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQoKICBfVmVj
dG9yX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKQogICAgOiBfTV9zdGFydCgwKSwg
X01fZmluaXNoKDApLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKSAKICB7fQogIApwcm90ZWN0ZWQ6CiAg
X1RwKiBfTV9zdGFydDsKICBfVHAqIF9NX2ZpbmlzaDsKICBfVHAqIF9NX2VuZF9vZl9zdG9yYWdl
OwoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X0Fs
bG9jX3R5cGUgX0FsbG9jX3R5cGU7CiAgX1RwKiBfTV9hbGxvY2F0ZShzaXplX3QgX19uKQogICAg
eyByZXR1cm4gX0FsbG9jX3R5cGU6OmFsbG9jYXRlKF9fbik7IH0KICB2b2lkIF9NX2RlYWxsb2Nh
dGUoX1RwKiBfX3AsIHNpemVfdCBfX24pCiAgICB7IF9BbGxvY190eXBlOjpkZWFsbG9jYXRlKF9f
cCwgX19uKTt9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBf
VmVjdG9yX2Jhc2UKICA6IHB1YmxpYyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+Ojpf
U19pbnN0YW5jZWxlc3M+CnsKICB0eXBlZGVmIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxv
YywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxv
Yz46Ol9TX2luc3RhbmNlbGVzcz4KICAgICAgICAgIF9CYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUg
X0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfVmVjdG9yX2Jhc2UoY29u
c3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkgOiBfQmFzZShfX2EpIHt9CiAgX1ZlY3Rvcl9iYXNlKHNp
emVfdCBfX24sIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7CiAgICBf
TV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICBfTV9maW5pc2ggPSBfTV9zdGFydDsKICAg
IF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgfQoKICB+X1ZlY3Rvcl9iYXNl
KCkgeyBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0
KTsgfQp9OyAgICAKCiMgMTUwICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgv
Mi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3ZlY3Rvci5oIiAzCgoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPCBfVHAgPiAgPgpjbGFzcyB2
ZWN0b3IgOiBwcm90ZWN0ZWQgX1ZlY3Rvcl9iYXNlPF9UcCwgX0FsbG9jPiAKewpwcml2YXRlOgog
IHR5cGVkZWYgX1ZlY3Rvcl9iYXNlPF9UcCwgX0FsbG9jPiBfQmFzZTsKcHVibGljOgogIHR5cGVk
ZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogIHR5cGVk
ZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHZhbHVlX3R5cGUq
IGl0ZXJhdG9yOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfaXRlcmF0b3I7CiAg
dHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBl
JiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYg
cHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxs
b2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRv
cigpIGNvbnN0IHsgcmV0dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0KCgogIHR5cGVkZWYg
cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsK
ICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgoK
CgoKCgpwcm90ZWN0ZWQ6CgogIHVzaW5nIF9CYXNlOjpfTV9hbGxvY2F0ZTsKICB1c2luZyBfQmFz
ZTo6X01fZGVhbGxvY2F0ZTsKICB1c2luZyBfQmFzZTo6X01fc3RhcnQ7CiAgdXNpbmcgX0Jhc2U6
Ol9NX2ZpbmlzaDsKICB1c2luZyBfQmFzZTo6X01fZW5kX29mX3N0b3JhZ2U7CgoKcHJvdGVjdGVk
OgogIHZvaWQgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9f
eCk7CiAgdm9pZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24pOwoKcHVibGljOgog
IGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gX01fc3RhcnQ7IH0KICBjb25zdF9pdGVyYXRvciBi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3N0YXJ0OyB9CiAgaXRlcmF0b3IgZW5kKCkgeyByZXR1
cm4gX01fZmluaXNoOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01f
ZmluaXNoOyB9CgogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkKICAgIHsgcmV0dXJuIHJldmVy
c2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBj
b25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KICByZXZl
cnNlX2l0ZXJhdG9yIHJlbmQoKQogICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigp
KTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0CiAgICB7IHJldHVybiBj
b25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CgogIHNpemVfdHlwZSBzaXplKCkgY29u
c3QKICAgIHsgcmV0dXJuIHNpemVfdHlwZShlbmQoKSAtIGJlZ2luKCkpOyB9CiAgc2l6ZV90eXBl
IG1heF9zaXplKCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemVfdHlwZSgtMSkgLyBzaXplb2YoX1Rw
KTsgfQogIHNpemVfdHlwZSBjYXBhY2l0eSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplX3R5cGUo
X01fZW5kX29mX3N0b3JhZ2UgLSBiZWdpbigpKTsgfQogIGJvb2wgZW1wdHkoKSBjb25zdAogICAg
eyByZXR1cm4gYmVnaW4oKSA9PSBlbmQoKTsgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXpl
X3R5cGUgX19uKSB7IHJldHVybiAqKGJlZ2luKCkgKyBfX24pOyB9CiAgY29uc3RfcmVmZXJlbmNl
IG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKihiZWdpbigpICsgX19u
KTsgfQoKICBleHBsaWNpdCB2ZWN0b3IoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9j
YXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fYSkge30KCiAgdmVjdG9yKHNpemVfdHlwZSBfX24s
IGNvbnN0IF9UcCYgX192YWx1ZSwKICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9
IGFsbG9jYXRvcl90eXBlKCkpIAogICAgOiBfQmFzZShfX24sIF9fYSkKICAgIHsgX01fZmluaXNo
ID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX192YWx1ZSk7IH0KCiAgZXhw
bGljaXQgdmVjdG9yKHNpemVfdHlwZSBfX24pCiAgICA6IF9CYXNlKF9fbiwgYWxsb2NhdG9yX3R5
cGUoKSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9f
biwgX1RwKCkpOyB9CgogIHZlY3Rvcihjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpIAog
ICAgOiBfQmFzZShfX3guc2l6ZSgpLCBfX3guZ2V0X2FsbG9jYXRvcigpKQogICAgeyBfTV9maW5p
c2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX01fc3RhcnQp
OyB9CgoKICAgCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZlY3RvcihfSW5w
dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgIGNvbnN0
IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKSA6IF9CYXNlKF9fYSkgewog
ICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3Jh
bCBfSW50ZWdyYWw7CiAgICBfTV9pbml0aWFsaXplX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRl
Z3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2luaXRp
YWxpemVfYXV4KF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWx1ZSwgX190cnVlX3R5cGUpIHsK
ICAgIF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0g
X01fc3RhcnQgKyBfX247IAogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01f
c3RhcnQsIF9fbiwgX192YWx1ZSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CiAgdm9pZCBfTV9pbml0aWFsaXplX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w
dXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUp
IHsKICAgIF9NX3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2Nh
dGVnb3J5KCBfX2ZpcnN0ICkgKTsKICB9CgoKCgoKCgoKICB+dmVjdG9yKCkgeyBkZXN0cm95KF9N
X3N0YXJ0LCBfTV9maW5pc2gpOyB9CgogIHZlY3RvcjxfVHAsIF9BbGxvYz4mIG9wZXJhdG9yPShj
b25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpOwogIHZvaWQgcmVzZXJ2ZShzaXplX3R5cGUg
X19uKSB7CiAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAgICBjb25zdCBzaXplX3R5cGUg
X19vbGRfc2l6ZSA9IHNpemUoKTsKICAgICAgaXRlcmF0b3IgX190bXAgPSBfTV9hbGxvY2F0ZV9h
bmRfY29weShfX24sIF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBkZXN0cm95KF9NX3N0YXJ0
LCBfTV9maW5pc2gpOwogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3Rv
cmFnZSAtIF9NX3N0YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX3RtcDsKICAgICAgX01fZmluaXNo
ID0gX190bXAgKyBfX29sZF9zaXplOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0
ICsgX19uOwogICAgfQogIH0KCiAgIAogICAKICAgCiAgIAoKICB2b2lkIGFzc2lnbihzaXplX3R5
cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKTsKCgogIAogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyYXRvcj4KICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy
YXRvciBfX2xhc3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRl
cmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmly
c3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2Vy
PgogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWws
IF9fdHJ1ZV90eXBlKQogICAgeyBhc3NpZ24oKHNpemVfdHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7
IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CiAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0
Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQog
ICAgeyBfTV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeSgg
X19maXJzdCApICk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQg
X01fYXNzaWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBsYXRl
IDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0
ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7IAoKCgogIHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0
dXJuICpiZWdpbigpOyB9CiAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1cm4g
KmJlZ2luKCk7IH0KICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQog
IGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9Cgog
IHZvaWQgcHVzaF9iYWNrKGNvbnN0IF9UcCYgX194KSB7CiAgICBpZiAoX01fZmluaXNoICE9IF9N
X2VuZF9vZl9zdG9yYWdlKSB7CiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gsIF9feCk7CiAgICAg
ICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBf
X3gpOwogIH0KICB2b2lkIHB1c2hfYmFjaygpIHsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5k
X29mX3N0b3JhZ2UpIHsKICAgICAgY29uc3RydWN0KF9NX2ZpbmlzaCk7CiAgICAgICsrX01fZmlu
aXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpKTsKICB9CiAgdm9p
ZCBzd2FwKHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkgewogICAgIDo6c3dhcChfTV9zdGFydCwg
X194Ll9NX3N0YXJ0KTsKICAgICA6OnN3YXAoX01fZmluaXNoLCBfX3guX01fZmluaXNoKTsKICAg
ICA6OnN3YXAoX01fZW5kX29mX3N0b3JhZ2UsIF9feC5fTV9lbmRfb2Zfc3RvcmFnZSk7CiAgfQoK
ICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpIHsK
ICAgIHNpemVfdHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsKICAgIGlmIChfTV9maW5p
c2ggIT0gX01fZW5kX29mX3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkgewogICAgICBj
b25zdHJ1Y3QoX01fZmluaXNoLCBfX3gpOwogICAgICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVs
c2UKICAgICAgX01faW5zZXJ0X2F1eChfX3Bvc2l0aW9uLCBfX3gpOwogICAgcmV0dXJuIGJlZ2lu
KCkgKyBfX247CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uKSB7CiAg
ICBzaXplX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICBpZiAoX01fZmluaXNo
ICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpIHsKICAgICAgY29u
c3RydWN0KF9NX2ZpbmlzaCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAg
ICBfTV9pbnNlcnRfYXV4KF9fcG9zaXRpb24pOwogICAgcmV0dXJuIGJlZ2luKCkgKyBfX247CiAg
fQoKICAgCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KGl0
ZXJhdG9yIF9fcG9zLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xh
c3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+Ojpf
SW50ZWdyYWwgX0ludGVncmFsOwogICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zLCBfX2ZpcnN0
LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4K
ICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBf
SW50ZWdlciBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkgewog
ICAgaW5zZXJ0KF9fcG9zLCAoc2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFsKTsKICB9CgogIHRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChp
dGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBf
X2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
X19mYWxzZV90eXBlKSB7CiAgICBfTV9yYW5nZV9pbnNlcnQoX19wb3MsIF9fZmlyc3QsIF9fbGFz
dCwgX19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7CiAgfQoKCgoKCiAgdm9pZCBpbnNl
cnQgKGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCk7CgogIHZv
aWQgcG9wX2JhY2soKSB7CiAgICAtLV9NX2ZpbmlzaDsKICAgIGRlc3Ryb3koX01fZmluaXNoKTsK
ICB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgaWYgKF9fcG9z
aXRpb24gKyAxICE9IGVuZCgpKQogICAgICBjb3B5KF9fcG9zaXRpb24gKyAxLCBfTV9maW5pc2gs
IF9fcG9zaXRpb24pOwogICAgLS1fTV9maW5pc2g7CiAgICBkZXN0cm95KF9NX2ZpbmlzaCk7CiAg
ICByZXR1cm4gX19wb3NpdGlvbjsKICB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19maXJz
dCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICBpdGVyYXRvciBfX2kgPSBjb3B5KF9fbGFzdCwgX01f
ZmluaXNoLCBfX2ZpcnN0KTsKICAgIGRlc3Ryb3koX19pLCBfTV9maW5pc2gpOwogICAgX01fZmlu
aXNoID0gX01fZmluaXNoIC0gKF9fbGFzdCAtIF9fZmlyc3QpOwogICAgcmV0dXJuIF9fZmlyc3Q7
CiAgfQoKICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgY29uc3QgX1RwJiBfX3gp
IHsKICAgIGlmIChfX25ld19zaXplIDwgc2l6ZSgpKSAKICAgICAgZXJhc2UoYmVnaW4oKSArIF9f
bmV3X3NpemUsIGVuZCgpKTsKICAgIGVsc2UKICAgICAgaW5zZXJ0KGVuZCgpLCBfX25ld19zaXpl
IC0gc2l6ZSgpLCBfX3gpOwogIH0KICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSkg
eyByZXNpemUoX19uZXdfc2l6ZSwgX1RwKCkpOyB9CiAgdm9pZCBjbGVhcigpIHsgZXJhc2UoYmVn
aW4oKSwgZW5kKCkpOyB9Cgpwcm90ZWN0ZWQ6CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyYXRvcj4KICBpdGVyYXRvciBfTV9hbGxvY2F0ZV9hbmRfY29weShzaXplX3R5cGUgX19uLCBf
Rm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQp7CiAgICBpdGVyYXRvciBf
X3Jlc3VsdCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICB0cnkgIHsKICAgICAgdW5pbml0aWFsaXpl
ZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogICAgICByZXR1cm4gX19yZXN1bHQ7
CiAgICB9CiAgICBjYXRjaCguLi4pIHsgIF9NX2RlYWxsb2NhdGUoX19yZXN1bHQsIF9fbikgOyB0
aHJvdzsgfSA7CiAgfQojIDQ0MCAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4
LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF92ZWN0b3IuaCIgMwoKCgoKICB0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbml0aWFsaXpl
KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlcmF0b3IgX19sYXN0LCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgewogICAgZm9yICggOyBf
X2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICBwdXNoX2JhY2soKl9fZmlyc3QpOwog
IH0KCiAgIAogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fcmFu
Z2VfaW5pdGlhbGl6ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykK
ICB7CiAgICBzaXplX3R5cGUgX19uID0gMDsKICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwg
X19uKTsKICAgIF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgIF9NX2VuZF9vZl9zdG9y
YWdlID0gX01fc3RhcnQgKyBfX247CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHko
X19maXJzdCwgX19sYXN0LCBfTV9zdGFydCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAg
ICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5zZXJ0KGl0ZXJh
dG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJz
dCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgZm9yd2Fy
ZF9pdGVyYXRvcl90YWcpOwoKCn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+
CmlubGluZSBib29sIApvcGVyYXRvcj09KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwg
Y29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQp7CiAgcmV0dXJuIF9feC5zaXplKCkgPT0g
X195LnNpemUoKSAmJgogICAgICAgICBlcXVhbChfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfX3ku
YmVnaW4oKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJv
b2wgCm9wZXJhdG9yPChjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3Rv
cjxfVHAsIF9BbGxvYz4mIF9feSkKewogIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZShf
X3guYmVnaW4oKSwgX194LmVuZCgpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X195LmJlZ2luKCksIF9feS5lbmQoKSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0FsbG9jPgppbmxpbmUgdm9pZCBzd2FwKHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgdmVjdG9y
PF9UcCwgX0FsbG9jPiYgX195KQp7CiAgX194LnN3YXAoX195KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZlY3RvcjxfVHAsX0FsbG9jPiYgCnZlY3RvcjxfVHAsX0Fs
bG9jPjo6b3BlcmF0b3I9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkKewogIGlmICgm
X194ICE9IHRoaXMpIHsKICAgIGNvbnN0IHNpemVfdHlwZSBfX3hsZW4gPSBfX3guc2l6ZSgpOwog
ICAgaWYgKF9feGxlbiA+IGNhcGFjaXR5KCkpIHsKICAgICAgaXRlcmF0b3IgX190bXAgPSBfTV9h
bGxvY2F0ZV9hbmRfY29weShfX3hsZW4sIF9feC5iZWdpbigpLCBfX3guZW5kKCkpOwogICAgICBk
ZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0
LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX3RtcDsK
ICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9feGxlbjsKICAgIH0KICAgIGVs
c2UgaWYgKHNpemUoKSA+PSBfX3hsZW4pIHsKICAgICAgaXRlcmF0b3IgX19pID0gY29weShfX3gu
YmVnaW4oKSwgX194LmVuZCgpLCBiZWdpbigpKTsKICAgICAgZGVzdHJveShfX2ksIF9NX2Zpbmlz
aCk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgY29weShfX3guYmVnaW4oKSwgX194LmJlZ2luKCkg
KyBzaXplKCksIF9NX3N0YXJ0KTsKICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9feC5iZWdpbigp
ICsgc2l6ZSgpLCBfX3guZW5kKCksIF9NX2ZpbmlzaCk7CiAgICB9CiAgICBfTV9maW5pc2ggPSBf
TV9zdGFydCArIF9feGxlbjsKICB9CiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgdmVjdG9yPF9UcCwgX0FsbG9jPjo6YXNzaWduKHNpemVf
dCBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsKSB7CiAgaWYgKF9fbiA+IGNhcGFjaXR5KCkp
IHsKICAgIHZlY3RvcjxfVHAsIF9BbGxvYz4gX190bXAoX19uLCBfX3ZhbCwgZ2V0X2FsbG9jYXRv
cigpKTsKICAgIF9fdG1wLnN3YXAoKnRoaXMpOwogIH0KICBlbHNlIGlmIChfX24gPiBzaXplKCkp
IHsKICAgIGZpbGwoYmVnaW4oKSwgZW5kKCksIF9fdmFsKTsKICAgIF9NX2ZpbmlzaCA9IHVuaW5p
dGlhbGl6ZWRfZmlsbF9uKF9NX2ZpbmlzaCwgX19uIC0gc2l6ZSgpLCBfX3ZhbCk7CiAgfQogIGVs
c2UKICAgIGVyYXNlKGZpbGxfbihiZWdpbigpLCBfX24sIF9fdmFsKSwgZW5kKCkpOwp9CgoKCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXI+CnZvaWQgdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fYXNzaWduX2F1eChfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgaXRlcmF0b3IgX19jdXIgPSBiZWdpbigp
OwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIs
ICsrX19maXJzdCkKICAgICpfX2N1ciA9ICpfX2ZpcnN0OwogIGlmIChfX2ZpcnN0ID09IF9fbGFz
dCkKICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgZWxzZQogICAgaW5zZXJ0KGVuZCgpLCBfX2Zp
cnN0LCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fYXNz
aWduX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogIHNp
emVfdHlwZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7Cgog
IGlmIChfX2xlbiA+IGNhcGFjaXR5KCkpIHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gX01fYWxsb2Nh
dGVfYW5kX2NvcHkoX19sZW4sIF9fZmlyc3QsIF9fbGFzdCk7CiAgICBkZXN0cm95KF9NX3N0YXJ0
LCBfTV9maW5pc2gpOwogICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3Jh
Z2UgLSBfTV9zdGFydCk7CiAgICBfTV9zdGFydCA9IF9fdG1wOwogICAgX01fZW5kX29mX3N0b3Jh
Z2UgPSBfTV9maW5pc2ggPSBfTV9zdGFydCArIF9fbGVuOwogIH0KICBlbHNlIGlmIChzaXplKCkg
Pj0gX19sZW4pIHsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IGNvcHkoX19maXJzdCwgX19s
YXN0LCBfTV9zdGFydCk7CiAgICBkZXN0cm95KF9fbmV3X2ZpbmlzaCwgX01fZmluaXNoKTsKICAg
IF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICB9CiAgZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIg
X19taWQgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZCwgc2l6ZSgpKTsKICAgIGNvcHkoX19m
aXJzdCwgX19taWQsIF9NX3N0YXJ0KTsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29w
eShfX21pZCwgX19sYXN0LCBfTV9maW5pc2gpOwogIH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQWxsb2M+CnZvaWQgCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2luc2VydF9hdXgo
aXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpCnsKICBpZiAoX01fZmluaXNoICE9
IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICBjb25zdHJ1Y3QoX01fZmluaXNoLCAqKF9NX2Zpbmlz
aCAtIDEpKTsKICAgICsrX01fZmluaXNoOwogICAgX1RwIF9feF9jb3B5ID0gX194OwogICAgY29w
eV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBfTV9maW5pc2ggLSAyLCBfTV9maW5pc2ggLSAxKTsKICAg
ICpfX3Bvc2l0aW9uID0gX194X2NvcHk7CiAgfQogIGVsc2UgewogICAgY29uc3Qgc2l6ZV90eXBl
IF9fb2xkX3NpemUgPSBzaXplKCk7CiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9z
aXplICE9IDAgPyAyICogX19vbGRfc2l6ZSA6IDE7CiAgICBpdGVyYXRvciBfX25ld19zdGFydCA9
IF9NX2FsbG9jYXRlKF9fbGVuKTsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IF9fbmV3X3N0
YXJ0OwogICAgdHJ5ICB7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShf
TV9zdGFydCwgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICBjb25zdHJ1Y3QoX19uZXdf
ZmluaXNoLCBfX3gpOwogICAgICArK19fbmV3X2ZpbmlzaDsKICAgICAgX19uZXdfZmluaXNoID0g
dW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9NX2ZpbmlzaCwgX19uZXdfZmluaXNoKTsK
ICAgIH0KICAgIGNhdGNoKC4uLikgeyAgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNo
KSwgCiAgICAgICAgICAgICAgICAgIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQsX19sZW4pKSA7
IHRocm93OyB9IDsKICAgIGRlc3Ryb3koYmVnaW4oKSwgZW5kKCkpOwogICAgX01fZGVhbGxvY2F0
ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICBfTV9zdGFydCA9
IF9fbmV3X3N0YXJ0OwogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoOwogICAgX01fZW5kX29m
X3N0b3JhZ2UgPSBfX25ld19zdGFydCArIF9fbGVuOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX0FsbG9jPgp2b2lkIAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4
KGl0ZXJhdG9yIF9fcG9zaXRpb24pCnsKICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9y
YWdlKSB7CiAgICBjb25zdHJ1Y3QoX01fZmluaXNoLCAqKF9NX2ZpbmlzaCAtIDEpKTsKICAgICsr
X01fZmluaXNoOwogICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBfTV9maW5pc2ggLSAyLCBf
TV9maW5pc2ggLSAxKTsKICAgICpfX3Bvc2l0aW9uID0gX1RwKCk7CiAgfQogIGVsc2UgewogICAg
Y29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAgICBjb25zdCBzaXplX3R5cGUg
X19sZW4gPSBfX29sZF9zaXplICE9IDAgPyAyICogX19vbGRfc2l6ZSA6IDE7CiAgICBpdGVyYXRv
ciBfX25ld19zdGFydCA9IF9NX2FsbG9jYXRlKF9fbGVuKTsKICAgIGl0ZXJhdG9yIF9fbmV3X2Zp
bmlzaCA9IF9fbmV3X3N0YXJ0OwogICAgdHJ5ICB7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5p
dGlhbGl6ZWRfY29weShfTV9zdGFydCwgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICBj
b25zdHJ1Y3QoX19uZXdfZmluaXNoKTsKICAgICAgKytfX25ld19maW5pc2g7CiAgICAgIF9fbmV3
X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfTV9maW5pc2gsIF9fbmV3
X2ZpbmlzaCk7CiAgICB9CiAgICBjYXRjaCguLi4pIHsgIChkZXN0cm95KF9fbmV3X3N0YXJ0LF9f
bmV3X2ZpbmlzaCksIAogICAgICAgICAgICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0
LF9fbGVuKSkgOyB0aHJvdzsgfSA7CiAgICBkZXN0cm95KGJlZ2luKCksIGVuZCgpKTsKICAgIF9N
X2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAg
X01fc3RhcnQgPSBfX25ld19zdGFydDsKICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAg
IF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQgKyBfX2xlbjsKICB9Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+OjppbnNl
cnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQp7CiAgaWYgKF9fbiAhPSAwKSB7CiAgICBp
ZiAoc2l6ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fZmluaXNoKSA+PSBfX24pIHsKICAg
ICAgX1RwIF9feF9jb3B5ID0gX194OwogICAgICBjb25zdCBzaXplX3R5cGUgX19lbGVtc19hZnRl
ciA9IF9NX2ZpbmlzaCAtIF9fcG9zaXRpb247CiAgICAgIGl0ZXJhdG9yIF9fb2xkX2ZpbmlzaCA9
IF9NX2ZpbmlzaDsKICAgICAgaWYgKF9fZWxlbXNfYWZ0ZXIgPiBfX24pIHsKICAgICAgICB1bmlu
aXRpYWxpemVkX2NvcHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7CiAg
ICAgICAgX01fZmluaXNoICs9IF9fbjsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24s
IF9fb2xkX2ZpbmlzaCAtIF9fbiwgX19vbGRfZmluaXNoKTsKICAgICAgICBmaWxsKF9fcG9zaXRp
b24sIF9fcG9zaXRpb24gKyBfX24sIF9feF9jb3B5KTsKICAgICAgfQogICAgICBlbHNlIHsKICAg
ICAgICB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9maW5pc2gsIF9fbiAtIF9fZWxlbXNfYWZ0ZXIs
IF9feF9jb3B5KTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uIC0gX19lbGVtc19hZnRlcjsKICAg
ICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoLCBfTV9maW5p
c2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVyOwogICAgICAgIGZpbGwoX19w
b3NpdGlvbiwgX19vbGRfZmluaXNoLCBfX3hfY29weSk7CiAgICAgIH0KICAgIH0KICAgIGVsc2Ug
ewogICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsgICAgICAgIAogICAg
ICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICsgbWF4KF9fb2xkX3NpemUsIF9f
bik7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fYWxsb2NhdGUoX19sZW4pOwogICAg
ICBpdGVyYXRvciBfX25ld19maW5pc2ggPSBfX25ld19zdGFydDsKICAgICAgdHJ5ICB7CiAgICAg
ICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9NX3N0YXJ0LCBfX3Bvc2l0aW9u
LCBfX25ld19zdGFydCk7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxs
X24oX19uZXdfZmluaXNoLCBfX24sIF9feCk7CiAgICAgICAgX19uZXdfZmluaXNoCiAgICAgICAg
ICA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfTV9maW5pc2gsIF9fbmV3X2Zpbmlz
aCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKSB7ICAoZGVzdHJveShfX25ld19zdGFydCxfX25l
d19maW5pc2gpLCAKICAgICAgICAgICAgICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0
LF9fbGVuKSkgOyB0aHJvdzsgfSA7CiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7
CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3Rh
cnQpOwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAgICBfTV9maW5pc2ggPSBfX25l
d19maW5pc2g7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQgKyBfX2xlbjsK
ICAgIH0KICB9Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CnZvaWQgCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX3Jh
bmdlX2luc2VydChpdGVyYXRvciBfX3BvcywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIGZvciAoIDsgX19maXJzdCAh
PSBfX2xhc3Q7ICsrX19maXJzdCkgewogICAgX19wb3MgPSBpbnNlcnQoX19wb3MsICpfX2ZpcnN0
KTsKICAgICsrX19wb3M7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+
IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgp2b2lkIAp2ZWN0b3I8X1RwLCBfQWxs
b2M+OjpfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsK
ICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgZGlz
dGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24pOwogICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zf
c3RvcmFnZSAtIF9NX2ZpbmlzaCkgPj0gX19uKSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2Vs
ZW1zX2FmdGVyID0gX01fZmluaXNoIC0gX19wb3NpdGlvbjsKICAgICAgaXRlcmF0b3IgX19vbGRf
ZmluaXNoID0gX01fZmluaXNoOwogICAgICBpZiAoX19lbGVtc19hZnRlciA+IF9fbikgewogICAg
ICAgIHVuaW5pdGlhbGl6ZWRfY29weShfTV9maW5pc2ggLSBfX24sIF9NX2ZpbmlzaCwgX01fZmlu
aXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19w
b3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOwogICAgICAgIGNvcHko
X19maXJzdCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAg
ICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlk
LCBfX2VsZW1zX2FmdGVyKTsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19taWQsIF9fbGFz
dCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uIC0gX19lbGVtc19hZnRlcjsK
ICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoLCBfTV9m
aW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVyOwogICAgICAgIGNvcHko
X19maXJzdCwgX19taWQsIF9fcG9zaXRpb24pOwogICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAg
ICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAgICAgIGNvbnN0IHNpemVf
dHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgKyBtYXgoX19vbGRfc2l6ZSwgX19uKTsKICAgICAgaXRl
cmF0b3IgX19uZXdfc3RhcnQgPSBfTV9hbGxvY2F0ZShfX2xlbik7CiAgICAgIGl0ZXJhdG9yIF9f
bmV3X2ZpbmlzaCA9IF9fbmV3X3N0YXJ0OwogICAgICB0cnkgIHsKICAgICAgICBfX25ld19maW5p
c2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX01fc3RhcnQsIF9fcG9zaXRpb24sIF9fbmV3X3N0YXJ0
KTsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19s
YXN0LCBfX25ld19maW5pc2gpOwogICAgICAgIF9fbmV3X2ZpbmlzaAogICAgICAgICAgPSB1bmlu
aXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX01fZmluaXNoLCBfX25ld19maW5pc2gpOwogICAg
ICB9CiAgICAgIGNhdGNoKC4uLikgeyAgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNo
KSwgCiAgICAgICAgICAgICAgICAgICAgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydCxfX2xlbikp
IDsgdGhyb3c7IH0gOwogICAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBf
TV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAg
ICAgX01fc3RhcnQgPSBfX25ld19zdGFydDsKICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNo
OwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsgX19sZW47CiAgICB9CiAg
fQp9CgojIDgxMCAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8u
Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF92ZWN0b3IuaCIgMwoKCgoKCgoKICAKCgoKIAog
CiAKIyAzNCAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8u
Li8uLi8uLi9pbmNsdWRlL2crKy0zL3ZlY3RvciIgMiAzCgojIDEgIi91c3IvbGliL2djYy1saWIv
aTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxf
YnZlY3Rvci5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogIAoKc3Rh
dGljIGNvbnN0IGludCBfX1dPUkRfQklUID0gaW50KDggKnNpemVvZih1bnNpZ25lZCBpbnQpKTsK
CgoKCgoKc3RydWN0IF9CaXRfcmVmZXJlbmNlIHsKICB1bnNpZ25lZCBpbnQqIF9NX3A7CiAgdW5z
aWduZWQgaW50IF9NX21hc2s7CiAgX0JpdF9yZWZlcmVuY2UodW5zaWduZWQgaW50KiBfX3gsIHVu
c2lnbmVkIGludCBfX3kpIAogICAgOiBfTV9wKF9feCksIF9NX21hc2soX195KSB7fQoKcHVibGlj
OgogIF9CaXRfcmVmZXJlbmNlKCkgOiBfTV9wKDApLCBfTV9tYXNrKDApIHt9CiAgb3BlcmF0b3Ig
Ym9vbCgpIGNvbnN0IHsgcmV0dXJuICEoISgqX01fcCAmIF9NX21hc2spKTsgfQogIF9CaXRfcmVm
ZXJlbmNlJiBvcGVyYXRvcj0oYm9vbCBfX3gpCiAgewogICAgaWYgKF9feCkgICpfTV9wIHw9IF9N
X21hc2s7CiAgICBlbHNlICAgICAgKl9NX3AgJj0gfl9NX21hc2s7CiAgICByZXR1cm4gKnRoaXM7
CiAgfQogIF9CaXRfcmVmZXJlbmNlJiBvcGVyYXRvcj0oY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9f
eCkgCiAgICB7IHJldHVybiAqdGhpcyA9IGJvb2woX194KTsgfQogIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBfQml0X3JlZmVyZW5jZSYgX194KSBjb25zdAogICAgeyByZXR1cm4gYm9vbCgqdGhpcykg
PT0gYm9vbChfX3gpOyB9CiAgYm9vbCBvcGVyYXRvcjwoY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9f
eCkgY29uc3QgewogICAgcmV0dXJuICFib29sKCp0aGlzKSAmJiBib29sKF9feCk7CiAgfQogIHZv
aWQgZmxpcCgpIHsgKl9NX3AgXj0gX01fbWFzazsgfQp9OwoKaW5saW5lIHZvaWQgc3dhcChfQml0
X3JlZmVyZW5jZSBfX3gsIF9CaXRfcmVmZXJlbmNlIF9feSkKewogIGJvb2wgX190bXAgPSBfX3g7
CiAgX194ID0gX195OwogIF9feSA9IF9fdG1wOwp9CgpzdHJ1Y3QgX0JpdF9pdGVyYXRvciA6IHB1
YmxpYyByYW5kb21fYWNjZXNzX2l0ZXJhdG9yPGJvb2wsIHB0cmRpZmZfdD4gewogIHR5cGVkZWYg
X0JpdF9yZWZlcmVuY2UgIHJlZmVyZW5jZTsKICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2lu
dGVyOwogIHR5cGVkZWYgX0JpdF9pdGVyYXRvciAgIGl0ZXJhdG9yOwoKICB1bnNpZ25lZCBpbnQq
IF9NX3A7CiAgdW5zaWduZWQgaW50IF9NX29mZnNldDsKICB2b2lkIGJ1bXBfdXAoKSB7CiAgICBp
ZiAoX01fb2Zmc2V0KysgPT0gX19XT1JEX0JJVCAtIDEpIHsKICAgICAgX01fb2Zmc2V0ID0gMDsK
ICAgICAgKytfTV9wOwogICAgfQogIH0KICB2b2lkIGJ1bXBfZG93bigpIHsKICAgIGlmIChfTV9v
ZmZzZXQtLSA9PSAwKSB7CiAgICAgIF9NX29mZnNldCA9IF9fV09SRF9CSVQgLSAxOwogICAgICAt
LV9NX3A7CiAgICB9CiAgfQoKICBfQml0X2l0ZXJhdG9yKCkgOiBfTV9wKDApLCBfTV9vZmZzZXQo
MCkge30KICBfQml0X2l0ZXJhdG9yKHVuc2lnbmVkIGludCogX194LCB1bnNpZ25lZCBpbnQgX195
KSAKICAgIDogX01fcChfX3gpLCBfTV9vZmZzZXQoX195KSB7fQogIHJlZmVyZW5jZSBvcGVyYXRv
ciooKSBjb25zdCB7IHJldHVybiByZWZlcmVuY2UoX01fcCwgMVUgPDwgX01fb2Zmc2V0KTsgfQog
IGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkgewogICAgYnVtcF91cCgpOwogICAgcmV0dXJuICp0aGlz
OwogIH0KICBpdGVyYXRvciBvcGVyYXRvcisrKGludCkgewogICAgaXRlcmF0b3IgX190bXAgPSAq
dGhpczsKICAgIGJ1bXBfdXAoKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgaXRlcmF0b3ImIG9w
ZXJhdG9yLS0oKSB7CiAgICBidW1wX2Rvd24oKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRl
cmF0b3Igb3BlcmF0b3ItLShpbnQpIHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBi
dW1wX2Rvd24oKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yKz0o
ZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgZGlmZmVyZW5jZV90eXBlIF9fbiA9IF9faSArIF9N
X29mZnNldDsKICAgIF9NX3AgKz0gX19uIC8gX19XT1JEX0JJVDsKICAgIF9fbiA9IF9fbiAlIF9f
V09SRF9CSVQ7CiAgICBpZiAoX19uIDwgMCkgewogICAgICBfTV9vZmZzZXQgPSAodW5zaWduZWQg
aW50KSBfX24gKyBfX1dPUkRfQklUOwogICAgICAtLV9NX3A7CiAgICB9IGVsc2UKICAgICAgX01f
b2Zmc2V0ID0gKHVuc2lnbmVkIGludCkgX19uOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVy
YXRvciYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICAqdGhpcyArPSAtX19p
OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciBvcGVyYXRvcisoZGlmZmVyZW5jZV90
eXBlIF9faSkgY29uc3QgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBf
X3RtcCArPSBfX2k7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19p
KSBjb25zdCB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wIC09
IF9faTsKICB9CiAgZGlmZmVyZW5jZV90eXBlIG9wZXJhdG9yLShpdGVyYXRvciBfX3gpIGNvbnN0
IHsKICAgIHJldHVybiBfX1dPUkRfQklUICogKF9NX3AgLSBfX3guX01fcCkgKyBfTV9vZmZzZXQg
LSBfX3guX01fb2Zmc2V0OwogIH0KICByZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5
cGUgX19pKSB7IHJldHVybiAqKCp0aGlzICsgX19pKTsgfQogIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBpdGVyYXRvciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fcCA9PSBfX3guX01fcCAmJiBf
TV9vZmZzZXQgPT0gX194Ll9NX29mZnNldDsKICB9CiAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0
ZXJhdG9yJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wICE9IF9feC5fTV9wIHx8IF9NX29m
ZnNldCAhPSBfX3guX01fb2Zmc2V0OwogIH0KICBib29sIG9wZXJhdG9yPChpdGVyYXRvciBfX3gp
IGNvbnN0IHsKICAgIHJldHVybiBfTV9wIDwgX194Ll9NX3AgfHwgKF9NX3AgPT0gX194Ll9NX3Ag
JiYgX01fb2Zmc2V0IDwgX194Ll9NX29mZnNldCk7CiAgfQp9OwoKc3RydWN0IF9CaXRfY29uc3Rf
aXRlcmF0b3IKICA6IHB1YmxpYyByYW5kb21fYWNjZXNzX2l0ZXJhdG9yPGJvb2wsIHB0cmRpZmZf
dD4KewogIHR5cGVkZWYgYm9vbCAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwogIHR5cGVkZWYg
Ym9vbCAgICAgICAgICAgICAgICAgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgYm9v
bCogICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9CaXRfY29uc3RfaXRlcmF0b3IgIGNvbnN0
X2l0ZXJhdG9yOwoKICB1bnNpZ25lZCBpbnQqIF9NX3A7CiAgdW5zaWduZWQgaW50IF9NX29mZnNl
dDsKICB2b2lkIGJ1bXBfdXAoKSB7CiAgICBpZiAoX01fb2Zmc2V0KysgPT0gX19XT1JEX0JJVCAt
IDEpIHsKICAgICAgX01fb2Zmc2V0ID0gMDsKICAgICAgKytfTV9wOwogICAgfQogIH0KICB2b2lk
IGJ1bXBfZG93bigpIHsKICAgIGlmIChfTV9vZmZzZXQtLSA9PSAwKSB7CiAgICAgIF9NX29mZnNl
dCA9IF9fV09SRF9CSVQgLSAxOwogICAgICAtLV9NX3A7CiAgICB9CiAgfQoKICBfQml0X2NvbnN0
X2l0ZXJhdG9yKCkgOiBfTV9wKDApLCBfTV9vZmZzZXQoMCkge30KICBfQml0X2NvbnN0X2l0ZXJh
dG9yKHVuc2lnbmVkIGludCogX194LCB1bnNpZ25lZCBpbnQgX195KSAKICAgIDogX01fcChfX3gp
LCBfTV9vZmZzZXQoX195KSB7fQogIF9CaXRfY29uc3RfaXRlcmF0b3IoY29uc3QgX0JpdF9pdGVy
YXRvciYgX194KSAKICAgIDogX01fcChfX3guX01fcCksIF9NX29mZnNldChfX3guX01fb2Zmc2V0
KSB7fQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAgICByZXR1cm4gX0Jp
dF9yZWZlcmVuY2UoX01fcCwgMVUgPDwgX01fb2Zmc2V0KTsKICB9CiAgY29uc3RfaXRlcmF0b3Im
IG9wZXJhdG9yKysoKSB7CiAgICBidW1wX3VwKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNv
bnN0X2l0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9
ICp0aGlzOwogICAgYnVtcF91cCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBjb25zdF9pdGVy
YXRvciYgb3BlcmF0b3ItLSgpIHsKICAgIGJ1bXBfZG93bigpOwogICAgcmV0dXJuICp0aGlzOwog
IH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvci0tKGludCkgewogICAgY29uc3RfaXRlcmF0b3Ig
X190bXAgPSAqdGhpczsKICAgIGJ1bXBfZG93bigpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBj
b25zdF9pdGVyYXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICBkaWZm
ZXJlbmNlX3R5cGUgX19uID0gX19pICsgX01fb2Zmc2V0OwogICAgX01fcCArPSBfX24gLyBfX1dP
UkRfQklUOwogICAgX19uID0gX19uICUgX19XT1JEX0JJVDsKICAgIGlmIChfX24gPCAwKSB7CiAg
ICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbiArIF9fV09SRF9CSVQ7CiAgICAgIC0t
X01fcDsKICAgIH0gZWxzZQogICAgICBfTV9vZmZzZXQgPSAodW5zaWduZWQgaW50KSBfX247CiAg
ICByZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvci09KGRpZmZlcmVu
Y2VfdHlwZSBfX2kpIHsKICAgICp0aGlzICs9IC1fX2k7CiAgICByZXR1cm4gKnRoaXM7CiAgfQog
IGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAg
ICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wICs9IF9faTsK
ICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0
IHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgLT0g
X19pOwogIH0KICBkaWZmZXJlbmNlX3R5cGUgb3BlcmF0b3ItKGNvbnN0X2l0ZXJhdG9yIF9feCkg
Y29uc3QgewogICAgcmV0dXJuIF9fV09SRF9CSVQgKiAoX01fcCAtIF9feC5fTV9wKSArIF9NX29m
ZnNldCAtIF9feC5fTV9vZmZzZXQ7CiAgfQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKGRp
ZmZlcmVuY2VfdHlwZSBfX2kpIHsgCiAgICByZXR1cm4gKigqdGhpcyArIF9faSk7IAogIH0KICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIF9feCkgY29uc3QgewogICAgcmV0
dXJuIF9NX3AgPT0gX194Ll9NX3AgJiYgX01fb2Zmc2V0ID09IF9feC5fTV9vZmZzZXQ7CiAgfQog
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBjb25zdF9pdGVyYXRvciYgX194KSBjb25zdCB7CiAgICBy
ZXR1cm4gX01fcCAhPSBfX3guX01fcCB8fCBfTV9vZmZzZXQgIT0gX194Ll9NX29mZnNldDsKICB9
CiAgYm9vbCBvcGVyYXRvcjwoY29uc3RfaXRlcmF0b3IgX194KSBjb25zdCB7CiAgICByZXR1cm4g
X01fcCA8IF9feC5fTV9wIHx8IChfTV9wID09IF9feC5fTV9wICYmIF9NX29mZnNldCA8IF9feC5f
TV9vZmZzZXQpOwogIH0KfTsKCiAKIAoKCgogCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2NhdG9yLCBi
b29sIF9faXNfc3RhdGljPgpjbGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNlIHsKcHVibGljOgogIHR5
cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9y
X3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxv
Y2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV9kYXRhX2FsbG9jYXRvcjsgfQoKICBfQnZlY3Rvcl9h
bGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX2RhdGFfYWxsb2Nh
dG9yKF9fYSksIF9NX3N0YXJ0KCksIF9NX2ZpbmlzaCgpLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKSB7
fQoKcHJvdGVjdGVkOgogIHVuc2lnbmVkIGludCogX01fYml0X2FsbG9jKHNpemVfdCBfX24pIAog
ICAgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3IuYWxsb2NhdGUoKF9fbiArIF9fV09SRF9CSVQg
LSAxKS9fX1dPUkRfQklUKTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZSgpIHsKICAgIGlmIChfTV9z
dGFydC5fTV9wKQogICAgICBfTV9kYXRhX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9NX3N0YXJ0Ll9N
X3AsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2VuZF9vZl9zdG9yYWdl
IC0gX01fc3RhcnQuX01fcCk7CiAgfSAgCgogIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8dW5zaWdu
ZWQgaW50LCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUgCiAgICAgICAgICBfTV9kYXRhX2Fs
bG9jYXRvcjsKICBfQml0X2l0ZXJhdG9yIF9NX3N0YXJ0OwogIF9CaXRfaXRlcmF0b3IgX01fZmlu
aXNoOwogIHVuc2lnbmVkIGludCogX01fZW5kX29mX3N0b3JhZ2U7Cn07CgogCnRlbXBsYXRlIDxj
bGFzcyBfQWxsb2NhdG9yPgpjbGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvY2F0b3IsIHRy
dWU+IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxib29sLCBfQWxs
b2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9j
YXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgp
OyB9CgogIF9CdmVjdG9yX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKQogICAgOiBf
TV9zdGFydCgpLCBfTV9maW5pc2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30KCnByb3RlY3Rl
ZDoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8dW5zaWduZWQgaW50LCBfQWxsb2Nh
dG9yPjo6X0FsbG9jX3R5cGUKICAgICAgICAgIF9BbGxvY190eXBlOwogICAgICAgICAgCiAgdW5z
aWduZWQgaW50KiBfTV9iaXRfYWxsb2Moc2l6ZV90IF9fbikgCiAgICB7IHJldHVybiBfQWxsb2Nf
dHlwZTo6YWxsb2NhdGUoKF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUKTsgfQogIHZv
aWQgX01fZGVhbGxvY2F0ZSgpIHsKICAgIGlmIChfTV9zdGFydC5fTV9wKQogICAgICBfQWxsb2Nf
dHlwZTo6ZGVhbGxvY2F0ZShfTV9zdGFydC5fTV9wLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0Ll9NX3ApOwogIH0gIAoKICBfQml0X2l0
ZXJhdG9yIF9NX3N0YXJ0OwogIF9CaXRfaXRlcmF0b3IgX01fZmluaXNoOwogIHVuc2lnbmVkIGlu
dCogX01fZW5kX29mX3N0b3JhZ2U7Cn07ICAKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNz
IF9CdmVjdG9yX2Jhc2UKICA6IHB1YmxpYyBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvYywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jPjo6
X1NfaW5zdGFuY2VsZXNzPgp7CiAgdHlwZWRlZiBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvYywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2M+
OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKcHVibGljOgogIHR5cGVkZWYgdHlw
ZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfQnZlY3Rvcl9i
YXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7fQogIH5fQnZlY3Rv
cl9iYXNlKCkgeyBfQmFzZTo6X01fZGVhbGxvY2F0ZSgpOyB9Cn07CgojIDM0OCAiL3Vzci9saWIv
Z2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr
Ky0zL3N0bF9idmVjdG9yLmgiIDMKCgogCiAKIAogCgoKCgoKCgoKCgogICAgICAgIAoKICAgICAg
ICAKdGVtcGxhdGU8Y2xhc3MgX0FsbG9jPiBjbGFzcyB2ZWN0b3I8Ym9vbCxfQWxsb2M+CiAgOiBw
dWJsaWMgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+CgoKCgp7CgogIHR5cGVkZWYgX0J2ZWN0b3JfYmFz
ZTxfQWxsb2M+IF9CYXNlOwoKCgpwdWJsaWM6CiAgdHlwZWRlZiBib29sIHZhbHVlX3R5cGU7CiAg
dHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2Vf
dHlwZTsgCiAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRlZiBib29s
IGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOwogIHR5
cGVkZWYgY29uc3QgYm9vbCogY29uc3RfcG9pbnRlcjsKCiAgdHlwZWRlZiBfQml0X2l0ZXJhdG9y
ICAgICAgICAgICAgICAgIGl0ZXJhdG9yOwogIHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRvciAg
ICAgICAgICBjb25zdF9pdGVyYXRvcjsKCgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25z
dF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2VfaXRl
cmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgoKCgoKCgogIHR5cGVkZWYgdHlwZW5h
bWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBl
IGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9
Cgpwcm90ZWN0ZWQ6CgoKCgoKCgoKcHJvdGVjdGVkOgogIHZvaWQgX01faW5pdGlhbGl6ZShzaXpl
X3R5cGUgX19uKSB7CiAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX24pOwog
ICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19uICsgX19XT1JEX0JJVCAtIDEpL19fV09S
RF9CSVQ7CiAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICBfTV9maW5pc2ggPSBf
TV9zdGFydCArIGRpZmZlcmVuY2VfdHlwZShfX24pOwogIH0KICB2b2lkIF9NX2luc2VydF9hdXgo
aXRlcmF0b3IgX19wb3NpdGlvbiwgYm9vbCBfX3gpIHsKICAgIGlmIChfTV9maW5pc2guX01fcCAh
PSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9N
X2ZpbmlzaCwgX01fZmluaXNoICsgMSk7CiAgICAgICpfX3Bvc2l0aW9uID0gX194OwogICAgICAr
K19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UgewogICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXpl
KCkgPyAyICogc2l6ZSgpIDogX19XT1JEX0JJVDsKICAgICAgdW5zaWduZWQgaW50KiBfX3EgPSBf
TV9iaXRfYWxsb2MoX19sZW4pOwogICAgICBpdGVyYXRvciBfX2kgPSBjb3B5KGJlZ2luKCksIF9f
cG9zaXRpb24sIGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAqX19pKysgPSBfX3g7CiAgICAgIF9N
X2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSk7CiAgICAgIF9NX2RlYWxsb2Nh
dGUoKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19sZW4gKyBfX1dPUkRfQklU
IC0gMSkvX19XT1JEX0JJVDsKICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAg
fQogIH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2luaXRp
YWxpemVfcmFuZ2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICAgIF9N
X3N0YXJ0ID0gaXRlcmF0b3IoKTsKICAgIF9NX2ZpbmlzaCA9IGl0ZXJhdG9yKCk7CiAgICBfTV9l
bmRfb2Zfc3RvcmFnZSA9IDA7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmly
c3QpIAogICAgICBwdXNoX2JhY2soKl9fZmlyc3QpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9pbml0aWFsaXplX3JhbmdlKF9Gb3J3YXJkSXRlcmF0
b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICBzaXplX3R5cGUgX19uID0gMDsKICAg
IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICAgIF9NX2luaXRpYWxpemUoX19uKTsK
ICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBfTV9zdGFydCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3Ms
CiAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl
cmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykg
ewogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSB7CiAgICAgIF9fcG9z
ID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7CiAgICAgICsrX19wb3M7CiAgICB9CiAgfQoKICB0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIF9NX2luc2VydF9yYW5nZShp
dGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0
b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewog
ICAgICBzaXplX3R5cGUgX19uID0gMDsKICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBf
X24pOwogICAgICBpZiAoY2FwYWNpdHkoKSAtIHNpemUoKSA+PSBfX24pIHsKICAgICAgICBjb3B5
X2JhY2t3YXJkKF9fcG9zaXRpb24sIGVuZCgpLCBfTV9maW5pc2ggKyBkaWZmZXJlbmNlX3R5cGUo
X19uKSk7CiAgICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcG9zaXRpb24pOwogICAgICAg
IF9NX2ZpbmlzaCArPSBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgICAgfQogICAgICBlbHNlIHsK
ICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOwogICAg
ICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgICBpdGVy
YXRvciBfX2kgPSBjb3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9fcSwgMCkpOwog
ICAgICAgIF9faSA9IGNvcHkoX19maXJzdCwgX19sYXN0LCBfX2kpOwogICAgICAgIF9NX2Zpbmlz
aCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgp
OwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX19XT1JEX0JJVCAt
IDEpL19fV09SRF9CSVQ7CiAgICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAg
ICB9CiAgICB9CiAgfSAgICAgIAoKCgpwdWJsaWM6CiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVy
biBfTV9zdGFydDsgfQogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01f
c3RhcnQ7IH0KICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV9maW5pc2g7IH0KICBjb25zdF9p
dGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV9maW5pc2g7IH0KCiAgcmV2ZXJzZV9pdGVy
YXRvciByYmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogIGNvbnN0
X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyAKICAgIHJldHVybiBjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yKGVuZCgpKTsgCiAgfQogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0
dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y
IHJlbmQoKSBjb25zdCB7IAogICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4o
KSk7IAogIH0KCiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoZW5k
KCkgLSBiZWdpbigpKTsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNp
emVfdHlwZSgtMSk7IH0KICBzaXplX3R5cGUgY2FwYWNpdHkoKSBjb25zdCB7CiAgICByZXR1cm4g
c2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9yKF9NX2VuZF9vZl9zdG9yYWdlLCAwKSAtIGJlZ2luKCkp
OwogIH0KICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gYmVnaW4oKSA9PSBlbmQoKTsgfQog
IHJlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIHsKICAgIHJldHVybiAqKGJlZ2lu
KCkgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgfQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRv
cltdKHNpemVfdHlwZSBfX24pIGNvbnN0IHsKICAgIHJldHVybiAqKGJlZ2luKCkgKyBkaWZmZXJl
bmNlX3R5cGUoX19uKSk7CiAgfQoKICBleHBsaWNpdCB2ZWN0b3IgKGNvbnN0IGFsbG9jYXRvcl90
eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2EpIHt9CgogIHZlY3Rv
ciAoc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3ZhbHVlLAogICAgICAgICAgICBjb25zdCBhbGxvY2F0
b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19hKQogIHsKICAg
IF9NX2luaXRpYWxpemUoX19uKTsKICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0
b3JhZ2UsIF9fdmFsdWUgPyB+MCA6IDApOwogIH0KCiAgZXhwbGljaXQgdmVjdG9yIChzaXplX3R5
cGUgX19uKQogICAgOiBfQmFzZShhbGxvY2F0b3JfdHlwZSgpKQogIHsKICAgIF9NX2luaXRpYWxp
emUoX19uKTsKICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIDApOwog
IH0KCiAgdmVjdG9yIChjb25zdCB2ZWN0b3IgJiBfX3gpIDogX0Jhc2UoX194LmdldF9hbGxvY2F0
b3IoKSkgewogICAgX01faW5pdGlhbGl6ZShfX3guc2l6ZSgpKTsKICAgIGNvcHkoX194LmJlZ2lu
KCksIF9feC5lbmQoKSwgX01fc3RhcnQpOwogIH0KCgogICAKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcmF0b3I+CiAgdmVjdG9yIChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy
YXRvciBfX2xhc3QsCiAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxv
Y2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2EpCiAgewogICAgdHlwZWRlZiB0eXBlbmFtZSBf
SXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9p
bml0aWFsaXplX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KICAg
IAogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0
Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsIF9fdHJ1ZV90eXBlKSB7CiAgICBfTV9pbml0
aWFsaXplKF9fbik7CiAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBf
X3ggPyB+MCA6IDApOwogIH0KICAgIAogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K
ICB2b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu
cHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNl
X3R5cGUpIHsKICAgIF9NX2luaXRpYWxpemVfcmFuZ2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJh
dG9yX2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsKICB9CiMgNTg3ICIvdXNyL2xpYi9nY2MtbGliL2k1
ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2J2
ZWN0b3IuaCIgMwoKCiAgfnZlY3RvciAoKSB7IH0KCiAgdmVjdG9yICYgb3BlcmF0b3I9KGNvbnN0
IHZlY3RvciAmIF9feCkgewogICAgaWYgKCZfX3ggPT0gdGhpcykgcmV0dXJuICp0aGlzOwogICAg
aWYgKF9feC5zaXplKCkgPiBjYXBhY2l0eSgpKSB7CiAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAg
ICAgX01faW5pdGlhbGl6ZShfX3guc2l6ZSgpKTsKICAgIH0KICAgIGNvcHkoX194LmJlZ2luKCks
IF9feC5lbmQoKSwgYmVnaW4oKSk7CiAgICBfTV9maW5pc2ggPSBiZWdpbigpICsgZGlmZmVyZW5j
ZV90eXBlKF9feC5zaXplKCkpOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgIAogICAKICAgCiAg
IAoKICB2b2lkIGFzc2lnbihzaXplX3QgX19uLCBib29sIF9feCkgewogICAgaWYgKF9fbiA+IHNp
emUoKSkgewogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3gg
PyB+MCA6IDApOwogICAgICBpbnNlcnQoZW5kKCksIF9fbiAtIHNpemUoKSwgX194KTsKICAgIH0K
ICAgIGVsc2UgewogICAgICBlcmFzZShiZWdpbigpICsgX19uLCBlbmQoKSk7CiAgICAgIGZpbGwo
X01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICB9CiAg
fQoKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGFzc2lnbihfSW5w
dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIHR5cGVkZWYg
dHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFs
OwogICAgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwog
IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNo
KF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAgeyBhc3NpZ24o
KHNpemVfdCkgX19uLCAoYm9vbCkgX192YWwpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyPgogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgIHsgX01fYXNzaWduX2F1eChfX2ZpcnN0LCBf
X2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOyB9CgogIHRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlcmF0b3Ig
X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBpbnB1
dF9pdGVyYXRvcl90YWcpIHsKICAgIGl0ZXJhdG9yIF9fY3VyID0gYmVnaW4oKTsKICAgIGZvciAo
IDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIsICsrX19maXJz
dCkKICAgICAgKl9fY3VyID0gKl9fZmlyc3Q7CiAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAg
ICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgICBlbHNlCiAgICAgIGluc2VydChlbmQoKSwgX19m
aXJzdCwgX19sYXN0KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgog
IHZvaWQgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
cmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykg
ewogICAgc2l6ZV90eXBlIF9fbGVuID0gMDsKICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwg
X19sZW4pOwogICAgaWYgKF9fbGVuIDwgc2l6ZSgpKQogICAgICBlcmFzZShjb3B5KF9fZmlyc3Qs
IF9fbGFzdCwgYmVnaW4oKSksIGVuZCgpKTsKICAgIGVsc2UgewogICAgICBfRm9yd2FyZEl0ZXJh
dG9yIF9fbWlkID0gX19maXJzdDsKICAgICAgYWR2YW5jZShfX21pZCwgc2l6ZSgpKTsKICAgICAg
Y29weShfX2ZpcnN0LCBfX21pZCwgYmVnaW4oKSk7CiAgICAgIGluc2VydChlbmQoKSwgX19taWQs
IF9fbGFzdCk7CiAgICB9CiAgfSAgICAKCgoKICB2b2lkIHJlc2VydmUoc2l6ZV90eXBlIF9fbikg
ewogICAgaWYgKGNhcGFjaXR5KCkgPCBfX24pIHsKICAgICAgdW5zaWduZWQgaW50KiBfX3EgPSBf
TV9iaXRfYWxsb2MoX19uKTsKICAgICAgX01fZmluaXNoID0gY29weShiZWdpbigpLCBlbmQoKSwg
aXRlcmF0b3IoX19xLCAwKSk7CiAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgX01fc3RhcnQg
PSBpdGVyYXRvcihfX3EsIDApOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX24g
KyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgIH0KICB9CgogIHJlZmVyZW5jZSBmcm9u
dCgpIHsgcmV0dXJuICpiZWdpbigpOyB9CiAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3Qg
eyByZXR1cm4gKmJlZ2luKCk7IH0KICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooZW5kKCkg
LSAxKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4gKihlbmQoKSAt
IDEpOyB9CiAgdm9pZCBwdXNoX2JhY2soYm9vbCBfX3gpIHsKICAgIGlmIChfTV9maW5pc2guX01f
cCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkKICAgICAgKl9NX2ZpbmlzaCsrID0gX194OwogICAgZWxz
ZQogICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gpOwogIH0KICB2b2lkIHN3YXAodmVjdG9y
ICYgX194KSB7CiAgICAgOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOwogICAgIDo6c3dh
cChfTV9maW5pc2gsIF9feC5fTV9maW5pc2gpOwogICAgIDo6c3dhcChfTV9lbmRfb2Zfc3RvcmFn
ZSwgX194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICB9CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9y
IF9fcG9zaXRpb24sIGJvb2wgX194ID0gYm9vbCgpKSB7CiAgICBkaWZmZXJlbmNlX3R5cGUgX19u
ID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICBpZiAoX01fZmluaXNoLl9NX3AgIT0gX01fZW5k
X29mX3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkKICAgICAgKl9NX2ZpbmlzaCsrID0g
X194OwogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KF9fcG9zaXRpb24sIF9feCk7CiAgICBy
ZXR1cm4gYmVnaW4oKSArIF9fbjsKICB9CgoKICAgCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAg
X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRl
Z3JhbDsKICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3Bvc2l0aW9uLCBfX2ZpcnN0LCBfX2xhc3Qs
IF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9N
X2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBf
X3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpIHsKICAgIGluc2VydChf
X3BvcywgKHNpemVfdHlwZSkgX19uLCAoYm9vbCkgX194KTsKICB9CgogIHRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3Bv
cywKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w
dXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBl
KSB7CiAgICBfTV9pbnNlcnRfcmFuZ2UoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRv
cl9jYXRlZ29yeSggX19maXJzdCApICk7CiAgfQojIDc2MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2
LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9idmVj
dG9yLmgiIDMKCiAgCiAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBl
IF9fbiwgYm9vbCBfX3gpIHsKICAgIGlmIChfX24gPT0gMCkgcmV0dXJuOwogICAgaWYgKGNhcGFj
aXR5KCkgLSBzaXplKCkgPj0gX19uKSB7CiAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwg
ZW5kKCksIF9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAgICAgZmlsbChfX3Bv
c2l0aW9uLCBfX3Bvc2l0aW9uICsgZGlmZmVyZW5jZV90eXBlKF9fbiksIF9feCk7CiAgICAgIF9N
X2ZpbmlzaCArPSBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgIH0KICAgIGVsc2UgewogICAgICBz
aXplX3R5cGUgX19sZW4gPSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOwogICAgICB1bnNpZ25l
ZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7CiAgICAgIGl0ZXJhdG9yIF9faSA9IGNv
cHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgIGZpbGxfbihf
X2ksIF9fbiwgX194KTsKICAgICAgX01fZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwg
X19pICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAg
IF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09S
RF9CSVQ7CiAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgIH0KICB9CgogIHZv
aWQgcG9wX2JhY2soKSB7IC0tX01fZmluaXNoOyB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3Ig
X19wb3NpdGlvbikgewogICAgaWYgKF9fcG9zaXRpb24gKyAxICE9IGVuZCgpKQogICAgICBjb3B5
KF9fcG9zaXRpb24gKyAxLCBlbmQoKSwgX19wb3NpdGlvbik7CiAgICAgIC0tX01fZmluaXNoOwog
ICAgcmV0dXJuIF9fcG9zaXRpb247CiAgfQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmly
c3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAgX01fZmluaXNoID0gY29weShfX2xhc3QsIGVuZCgp
LCBfX2ZpcnN0KTsKICAgIHJldHVybiBfX2ZpcnN0OwogIH0KICB2b2lkIHJlc2l6ZShzaXplX3R5
cGUgX19uZXdfc2l6ZSwgYm9vbCBfX3ggPSBib29sKCkpIHsKICAgIGlmIChfX25ld19zaXplIDwg
c2l6ZSgpKSAKICAgICAgZXJhc2UoYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX25ld19zaXpl
KSwgZW5kKCkpOwogICAgZWxzZQogICAgICBpbnNlcnQoZW5kKCksIF9fbmV3X3NpemUgLSBzaXpl
KCksIF9feCk7CiAgfQogIHZvaWQgY2xlYXIoKSB7IGVyYXNlKGJlZ2luKCksIGVuZCgpKTsgfQp9
OwoKCgp0eXBlZGVmIHZlY3Rvcjxib29sLCBhbGxvYz4gYml0X3ZlY3RvcjsKCiMgODIyICIvdXNy
L2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvc3RsX2J2ZWN0b3IuaCIgMwoKCgoKCgoKCgoKICAKCgoKIAogCiAKIyAzNSAiL3Vz
ci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNs
dWRlL2crKy0zL3ZlY3RvciIgMiAzCgoKCgogCiAKIAojIDQ2ICIvdXNyL2xvY2FsL3F0L2luY2x1
ZGUvcXZhbHVldmVjdG9yLmgiIDIKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIFFWYWx1ZVZl
Y3RvclByaXZhdGUgCiAgICA6IHB1YmxpYyBRU2hhcmVkCnsKcHVibGljOgoKICAgIHR5cGVkZWYg
VCB2YWx1ZV90eXBlOwogICAgdHlwZWRlZiBUKiBwb2ludGVyOwoKICAgIFFWYWx1ZVZlY3RvclBy
aXZhdGUoKQoJOiBzdGFydCggMCApLCBmaW5pc2goIDAgKSwgZW5kKCAwICkKICAgIHsKICAgIH0K
CiAgICBRVmFsdWVWZWN0b3JQcml2YXRlKCBjb25zdCBRVmFsdWVWZWN0b3JQcml2YXRlPFQ+JiB4
ICk7CiAgICBRVmFsdWVWZWN0b3JQcml2YXRlKCBzaXplX3Qgc2l6ZSApOwoKICAgIHZvaWQgZGVy
ZWZBbmREZWxldGUoKSAgCiAgICB7CglpZiAoIGRlcmVmKCkgKQoJICAgIGRlbGV0ZSB0aGlzOwog
ICAgfQoKCgoKCiAgICB+UVZhbHVlVmVjdG9yUHJpdmF0ZSgpCiAgICB7CglkZWxldGVbXSBzdGFy
dDsKICAgIH0KCiAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CiAgICB7CglyZXR1cm4gZmluaXNoIC0g
c3RhcnQ7CiAgICB9CgogICAgYm9vbCBlbXB0eSgpIGNvbnN0CiAgICB7CglyZXR1cm4gc3RhcnQg
PT0gZmluaXNoOwogICAgfQoKICAgIHNpemVfdCBjYXBhY2l0eSgpIGNvbnN0CiAgICB7CglyZXR1
cm4gZW5kIC0gc3RhcnQ7CiAgICB9CgogICAgdm9pZCBpbnNlcnQoIHBvaW50ZXIgcG9zLCBjb25z
dCBUJiB4ICk7CiAgICB2b2lkIGluc2VydCggcG9pbnRlciBwb3MsIHNpemVfdCBuLCBjb25zdCBU
JiB4ICk7CiAgICB2b2lkIHJlc2VydmUoIHNpemVfdCBuICk7CgogICAgdm9pZCBjbGVhcigpCiAg
ICB7CglkZWxldGVbXSBzdGFydDsKCXN0YXJ0ID0gMDsKCWZpbmlzaCA9IDA7CgllbmQgPSAwOwog
ICAgfQoKCiAgICBwb2ludGVyIHN0YXJ0OwogICAgcG9pbnRlciBmaW5pc2g7CiAgICBwb2ludGVy
IGVuZDsKCnByaXZhdGU6CiAgICBwb2ludGVyIGdyb3dBbmRDb3B5KCBzaXplX3QgbiwgcG9pbnRl
ciBzLCBwb2ludGVyIGYgKTsKCiAgICBRVmFsdWVWZWN0b3JQcml2YXRlJiBvcGVyYXRvcj0oIGNv
bnN0IFFWYWx1ZVZlY3RvclByaXZhdGU8VD4mIHggKTsKCn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4K
ICBRVmFsdWVWZWN0b3JQcml2YXRlPFQ+OjpRVmFsdWVWZWN0b3JQcml2YXRlKCBjb25zdCBRVmFs
dWVWZWN0b3JQcml2YXRlPFQ+JiB4ICkKICAgIDogUVNoYXJlZCgpCnsKICAgIGlmICggeC5zaXpl
KCkgPiAwICkgewoJc3RhcnQgPSBuZXcgVFsgeC5zaXplKCkgXTsKCWZpbmlzaCA9IHN0YXJ0ICsg
eC5zaXplKCk7CgllbmQgPSBzdGFydCArIHguc2l6ZSgpOwoJcUNvcHkoIHguc3RhcnQsIHguZmlu
aXNoLCBzdGFydCApOwogICAgfSBlbHNlIHsKCXN0YXJ0ID0gMDsKCWZpbmlzaCA9IDA7CgllbmQg
PSAwOwogICAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KICBRVmFsdWVWZWN0b3JQcml2YXRlPFQ+
OjpRVmFsdWVWZWN0b3JQcml2YXRlKCBzaXplX3Qgc2l6ZSApCnsKICAgIGlmICggc2l6ZSA+IDAg
KSB7CglzdGFydCA9IG5ldyBUW3NpemVdOwoJZmluaXNoID0gc3RhcnQgKyBzaXplOwoJZW5kID0g
c3RhcnQgKyBzaXplOwogICAgfSBlbHNlIHsKCXN0YXJ0ID0gMDsKCWZpbmlzaCA9IDA7CgllbmQg
PSAwOwogICAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KICB2b2lkIFFWYWx1ZVZlY3RvclByaXZh
dGU8VD46Omluc2VydCggcG9pbnRlciBwb3MsIGNvbnN0IFQmIHggKQp7CiAgICBjb25zdCBzaXpl
X3QgbGFzdFNpemUgPSBzaXplKCk7CiAgICBjb25zdCBzaXplX3QgbiA9IGxhc3RTaXplICE9MCA/
IDIqbGFzdFNpemUgOiAxOwogICAgY29uc3Qgc2l6ZV90IG9mZnNldCA9IHBvcyAtIHN0YXJ0Owog
ICAgcG9pbnRlciBuZXdTdGFydCA9IG5ldyBUW25dOwogICAgcG9pbnRlciBuZXdGaW5pc2ggPSBu
ZXdTdGFydCArIG9mZnNldDsKICAgIHFDb3B5KCBzdGFydCwgcG9zLCBuZXdTdGFydCApOwogICAg
Km5ld0ZpbmlzaCA9IHg7CiAgICBxQ29weSggcG9zLCBmaW5pc2gsICsrbmV3RmluaXNoICk7CiAg
ICBkZWxldGVbXSBzdGFydDsKICAgIHN0YXJ0ID0gbmV3U3RhcnQ7CiAgICBmaW5pc2ggPSBuZXdT
dGFydCArIGxhc3RTaXplICsgMTsKICAgIGVuZCA9IG5ld1N0YXJ0ICsgbjsKfQoKdGVtcGxhdGUg
PGNsYXNzIFQ+CiAgdm9pZCBRVmFsdWVWZWN0b3JQcml2YXRlPFQ+OjppbnNlcnQoIHBvaW50ZXIg
cG9zLCBzaXplX3QgbiwgY29uc3QgVCYgeCApCnsKICAgIGlmICggc2l6ZV90KCBlbmQgLSBmaW5p
c2ggKSA+PSBuICkgewoJIAoJY29uc3Qgc2l6ZV90IGVsZW1zX2FmdGVyID0gZmluaXNoIC0gcG9z
OwoJcG9pbnRlciBvbGRfZmluaXNoID0gZmluaXNoOwoJaWYgKCBlbGVtc19hZnRlciA+IG4gKSB7
CgkgICAgcUNvcHkoIGZpbmlzaCAtIG4sIGZpbmlzaCwgZmluaXNoICk7CgkgICAgZmluaXNoICs9
IG47CgkgICAgcUNvcHlCYWNrd2FyZCggcG9zLCBvbGRfZmluaXNoIC0gbiwgb2xkX2ZpbmlzaCAp
OwoJICAgIHFGaWxsKCBwb3MsIHBvcyArIG4sIHggKTsKCX0gZWxzZSB7CgkgICAgcG9pbnRlciBm
aWxsZXIgPSBmaW5pc2g7CgkgICAgc2l6ZV90IGkgPSBuIC0gZWxlbXNfYWZ0ZXI7CgkgICAgZm9y
ICggOyBpID4gMDsgLS1pLCArK2ZpbGxlciApCgkJKmZpbGxlciA9IHg7CgkgICAgZmluaXNoICs9
IG4gLSBlbGVtc19hZnRlcjsKCSAgICBxQ29weSggcG9zLCBvbGRfZmluaXNoLCBmaW5pc2ggKTsK
CSAgICBmaW5pc2ggKz0gZWxlbXNfYWZ0ZXI7CgkgICAgcUZpbGwoIHBvcywgb2xkX2ZpbmlzaCwg
eCApOwoJfQogICAgfSBlbHNlIHsKCSAKCWNvbnN0IHNpemVfdCBsYXN0U2l6ZSA9IHNpemUoKTsK
CWNvbnN0IHNpemVfdCBsZW4gPSBsYXN0U2l6ZSArICgoICBuICApIDwgKCAgbGFzdFNpemUgKSA/
ICggIGxhc3RTaXplICkgOiAoICBuICApKSA7Cglwb2ludGVyIG5ld1N0YXJ0ID0gbmV3IFRbbGVu
XTsKCXBvaW50ZXIgbmV3RmluaXNoID0gcUNvcHkoIHN0YXJ0LCBwb3MsIG5ld1N0YXJ0ICk7Cgkg
CglzaXplX3QgaSA9IG47Cglmb3IgKCA7IGkgPiAwOyAtLWksICsrbmV3RmluaXNoICkKCSAgICAq
bmV3RmluaXNoID0geDsKCW5ld0ZpbmlzaCA9IHFDb3B5KCBwb3MsIGZpbmlzaCwgbmV3RmluaXNo
ICk7CglkZWxldGVbXSBzdGFydDsKCXN0YXJ0ID0gbmV3U3RhcnQ7CglmaW5pc2ggPSBuZXdGaW5p
c2g7CgllbmQgPSBuZXdTdGFydCArIGxlbjsKICAgIH0KfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CiAg
dm9pZCBRVmFsdWVWZWN0b3JQcml2YXRlPFQ+OjpyZXNlcnZlKCBzaXplX3QgbiApCnsKICAgIGNv
bnN0IHNpemVfdCBsYXN0U2l6ZSA9IHNpemUoKTsKICAgIHBvaW50ZXIgdG1wID0gZ3Jvd0FuZENv
cHkoIG4sIHN0YXJ0LCBmaW5pc2ggKTsKICAgIHN0YXJ0ID0gdG1wOwogICAgZmluaXNoID0gdG1w
ICsgbGFzdFNpemU7CiAgICBlbmQgPSBzdGFydCArIG47Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgog
IHR5cGVuYW1lICBRVmFsdWVWZWN0b3JQcml2YXRlPFQ+Ojpwb2ludGVyIFFWYWx1ZVZlY3RvclBy
aXZhdGU8VD46Omdyb3dBbmRDb3B5KCBzaXplX3QgbiwgcG9pbnRlciBzLCBwb2ludGVyIGYgKQp7
CiAgICBwb2ludGVyIG5ld1N0YXJ0ID0gbmV3IFRbbl07CiAgICBxQ29weSggcywgZiwgbmV3U3Rh
cnQgKTsKICAgIGRlbGV0ZVtdIHN0YXJ0OwogICAgcmV0dXJuIG5ld1N0YXJ0Owp9CgoKdGVtcGxh
dGUgPGNsYXNzIFQ+CmNsYXNzIFFWYWx1ZVZlY3Rvcgp7CnB1YmxpYzoKICAgIHR5cGVkZWYgVCB2
YWx1ZV90eXBlOwogICAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogICAgdHlwZWRlZiBj
b25zdCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVyOwogICAgdHlwZWRlZiB2YWx1ZV90eXBlKiBp
dGVyYXRvcjsKICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfaXRlcmF0b3I7CiAg
ICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICAgIHR5cGVkZWYgY29uc3QgdmFsdWVf
dHlwZSYgY29uc3RfcmVmZXJlbmNlOwogICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwoKICAg
IHR5cGVkZWYgcHRyZGlmZl90ICBkaWZmZXJlbmNlX3R5cGU7CgoKCgogICAgUVZhbHVlVmVjdG9y
KCkKICAgIHsKCXNoID0gbmV3IFFWYWx1ZVZlY3RvclByaXZhdGU8VD47CiAgICB9CgogICAgUVZh
bHVlVmVjdG9yKCBjb25zdCBRVmFsdWVWZWN0b3I8VD4mIHYgKQogICAgewoJc2ggPSB2LnNoOwoJ
c2gtPnJlZigpOwogICAgfQoKICAgIFFWYWx1ZVZlY3Rvciggc2l6ZV90eXBlIG4sIGNvbnN0IFQm
IHZhbCA9IFQoKSApOwoKCiAgICBRVmFsdWVWZWN0b3IoIHN0ZDo6dmVjdG9yPFQ+JiB2ICkKICAg
IHsKCXNoID0gbmV3IFFWYWx1ZVZlY3RvclByaXZhdGU8VD4oIHYuc2l6ZSgpICk7CglxQ29weSgg
di5iZWdpbigpLCB2LmVuZCgpLCBiZWdpbigpICk7CiAgICB9CgoKICAgIH5RVmFsdWVWZWN0b3Io
KQogICAgewoJc2gtPmRlcmVmQW5kRGVsZXRlKCk7CiAgICB9CgogICAgUVZhbHVlVmVjdG9yPFQ+
JiBvcGVyYXRvcj0gKCBjb25zdCBRVmFsdWVWZWN0b3I8VD4mIHYgKQogICAgewoJdi5zaC0+cmVm
KCk7CglzaC0+ZGVyZWZBbmREZWxldGUoKTsKCXNoID0gdi5zaDsKCXJldHVybiAqdGhpczsKICAg
IH0KCgogICAgUVZhbHVlVmVjdG9yPFQ+JiBvcGVyYXRvcj0gKCBjb25zdCBzdGQ6OnZlY3RvcjxU
PiYgdiApCiAgICB7CgljbGVhcigpOwoJcmVzaXplKCB2LnNpemUoKSApOwoJcUNvcHkoIHYuYmVn
aW4oKSwgdi5lbmQoKSwgYmVnaW4oKSApOwoJcmV0dXJuICp0aGlzOwogICAgfQoKCiAgICBzaXpl
X3R5cGUgc2l6ZSgpIGNvbnN0CiAgICB7CglyZXR1cm4gc2gtPnNpemUoKTsKICAgIH0KCiAgICBi
b29sIGVtcHR5KCkgY29uc3QKICAgIHsKCXJldHVybiBzaC0+ZW1wdHkoKTsKICAgIH0KCiAgICBz
aXplX3R5cGUgY2FwYWNpdHkoKSBjb25zdAogICAgewoJcmV0dXJuIHNpemVfdHlwZSggc2gtPmNh
cGFjaXR5KCkgKTsKICAgIH0KCiAgICBpdGVyYXRvciBiZWdpbigpCiAgICB7CglkZXRhY2goKTsK
CXJldHVybiBzaC0+c3RhcnQ7CiAgICB9CgogICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25z
dAogICAgewoJcmV0dXJuIHNoLT5zdGFydDsKICAgIH0KCiAgICBpdGVyYXRvciBlbmQoKQogICAg
ewoJZGV0YWNoKCk7CglyZXR1cm4gc2gtPmZpbmlzaDsKICAgIH0KCiAgICBjb25zdF9pdGVyYXRv
ciBlbmQoKSBjb25zdAogICAgewoJcmV0dXJuIHNoLT5maW5pc2g7CiAgICB9CgogICAgcmVmZXJl
bmNlIGF0KCBzaXplX3R5cGUgaSwgYm9vbCogb2sgPSAwICkKICAgIHsKCWRldGFjaCgpOwoJaWYg
KCBvayApIHsKCSAgICBpZiAoIGkgPCBzaXplKCkgKQoJCSpvayA9IFRSVUU7CgkgICAgZWxzZQoJ
CSpvayA9IEZBTFNFOwoJfQoJcmV0dXJuICooIGJlZ2luKCkgKyBpICk7CiAgICB9CgogICAgY29u
c3RfcmVmZXJlbmNlIGF0KCBzaXplX3R5cGUgaSwgYm9vbCogb2sgPSAwICkgY29uc3QKICAgIHsK
CWlmICggb2sgKSB7CgkgICAgaWYgKCBpIDwgc2l6ZSgpICkKCQkqb2sgPSBUUlVFOwoJICAgIGVs
c2UKCQkqb2sgPSBGQUxTRTsKCX0KCXJldHVybiAqKCBiZWdpbigpICsgaSApOwogICAgfQoKICAg
IHJlZmVyZW5jZSBvcGVyYXRvcltdKCBzaXplX3R5cGUgaSApCiAgICB7CglkZXRhY2goKTsKCXJl
dHVybiAqKCBiZWdpbigpICsgaSApOwogICAgfQoKICAgIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRv
cltdKCBzaXplX3R5cGUgaSApIGNvbnN0CiAgICB7CglyZXR1cm4gKiggYmVnaW4oKSArIGkgKTsK
ICAgIH0KCiAgICByZWZlcmVuY2UgZnJvbnQoKQogICAgewoJKCggICFlbXB0eSgpICApID8gKHZv
aWQpMCA6IHFXYXJuaW5nKCJBU1NFUlQ6IFwiJXNcIiBpbiAlcyAoJWQpIiwiIWVtcHR5KCkiLCIv
dXNyL2xvY2FsL3F0L2luY2x1ZGUvcXZhbHVldmVjdG9yLmgiLDM2MikpIDsKCWRldGFjaCgpOwoJ
cmV0dXJuICpiZWdpbigpOwogICAgfQoKICAgIGNvbnN0X3JlZmVyZW5jZSBmcm9udCgpIGNvbnN0
CiAgICB7CgkoKCAgIWVtcHR5KCkgICkgPyAodm9pZCkwIDogcVdhcm5pbmcoIkFTU0VSVDogXCIl
c1wiIGluICVzICglZCkiLCIhZW1wdHkoKSIsIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xdmFsdWV2
ZWN0b3IuaCIsMzY5KSkgOwoJcmV0dXJuICpiZWdpbigpOwogICAgfQoKICAgIHJlZmVyZW5jZSBi
YWNrKCkKICAgIHsKCSgoICAhZW1wdHkoKSAgKSA/ICh2b2lkKTAgOiBxV2FybmluZygiQVNTRVJU
OiBcIiVzXCIgaW4gJXMgKCVkKSIsIiFlbXB0eSgpIiwiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3F2
YWx1ZXZlY3Rvci5oIiwzNzUpKSA7CglkZXRhY2goKTsKCXJldHVybiAqKCBlbmQoKSAtIDEgKTsK
ICAgIH0KCiAgICBjb25zdF9yZWZlcmVuY2UgYmFjaygpIGNvbnN0CiAgICB7CgkoKCAgIWVtcHR5
KCkgICkgPyAodm9pZCkwIDogcVdhcm5pbmcoIkFTU0VSVDogXCIlc1wiIGluICVzICglZCkiLCIh
ZW1wdHkoKSIsIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xdmFsdWV2ZWN0b3IuaCIsMzgyKSkgOwoJ
cmV0dXJuICooIGVuZCgpIC0gMSApOwogICAgfQoKICAgIHZvaWQgcHVzaF9iYWNrKCBjb25zdCBU
JiB4ICkKICAgIHsKCWRldGFjaCgpOwoJaWYgKCBzaC0+ZmluaXNoID09IHNoLT5lbmQgKSB7Cgkg
ICAgc2gtPnJlc2VydmUoIHNpemUoKSsxICk7Cgl9Cgkqc2gtPmZpbmlzaCA9IHg7CgkrK3NoLT5m
aW5pc2g7CiAgICB9CgogICAgdm9pZCBwb3BfYmFjaygpCiAgICB7CglkZXRhY2goKTsKCWlmICgg
ZW1wdHkoKSApCgkgICAgcmV0dXJuOwoJLS1zaC0+ZmluaXNoOwogICAgfQoKICAgIGl0ZXJhdG9y
IGluc2VydCggaXRlcmF0b3IgcG9zLCBjb25zdCBUJiB4ICk7CiAgICBpdGVyYXRvciBpbnNlcnQo
IGl0ZXJhdG9yIHBvcywgc2l6ZV90eXBlIG4sIGNvbnN0IFQmIHggKTsKICAgIAogICAgdm9pZCBy
ZXNlcnZlKCBzaXplX3R5cGUgbiApCiAgICB7CglpZiAoIGNhcGFjaXR5KCkgPCBuICkgewoJICAg
IGRldGFjaCgpOwoJICAgIHNoLT5yZXNlcnZlKCBuICk7Cgl9CiAgICB9CgogICAgdm9pZCByZXNp
emUoIHNpemVfdHlwZSBuLCBjb25zdCBUJiB2YWwgPSBUKCkgKQogICAgewoJaWYgKCBuIDwgc2l6
ZSgpICkKCSAgICBlcmFzZSggYmVnaW4oKSArIG4sIGVuZCgpICk7CgllbHNlCgkgICAgaW5zZXJ0
KCBlbmQoKSwgbiAtIHNpemUoKSwgdmFsICk7CiAgICB9CgogICAgdm9pZCBjbGVhcigpCiAgICB7
CglkZXRhY2goKTsKCXNoLT5jbGVhcigpOwogICAgfQoKICAgIGl0ZXJhdG9yIGVyYXNlKCBpdGVy
YXRvciBwb3MgKQogICAgewoJZGV0YWNoKCk7CglpZiAoIHBvcyArIDEgIT0gZW5kKCkgKQoJICAg
IHFDb3B5KCBwb3MgKyAxLCBzaC0+ZmluaXNoLCBwb3MgKTsKCS0tc2gtPmZpbmlzaDsKCXJldHVy
biBwb3M7CiAgICB9CgogICAgaXRlcmF0b3IgZXJhc2UoIGl0ZXJhdG9yIGZpcnN0LCBpdGVyYXRv
ciBsYXN0ICkKICAgIHsKCWRldGFjaCgpOwoJcUNvcHkoIGxhc3QsIHNoLT5maW5pc2gsIGZpcnN0
ICk7CglzaC0+ZmluaXNoID0gc2gtPmZpbmlzaCAtICggbGFzdCAtIGZpcnN0ICk7CglyZXR1cm4g
Zmlyc3Q7CiAgICB9CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRVmFsdWVWZWN0b3I8VD4m
IHggKQogICAgewoJcmV0dXJuIHFFcXVhbCggYmVnaW4oKSwgZW5kKCksIHguYmVnaW4oKSApOwog
ICAgfQoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVZhbHVlVmVjdG9yPFQ+JiB4ICkgY29u
c3QKICAgIHsKCXJldHVybiBxRXF1YWwoIGJlZ2luKCksIGVuZCgpLCB4LmJlZ2luKCkgKTsKICAg
IH0KCnByb3RlY3RlZDoKICAgIHZvaWQgZGV0YWNoKCkKICAgIHsKCWlmICggc2gtPmNvdW50ID4g
MSApIHsgZGV0YWNoSW50ZXJuYWwoKTsgfQogICAgfQogICAgdm9pZCBkZXRhY2hJbnRlcm5hbCgp
OwogICAgUVZhbHVlVmVjdG9yUHJpdmF0ZTxUPiogc2g7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4K
ICBRVmFsdWVWZWN0b3I8VD46OlFWYWx1ZVZlY3Rvciggc2l6ZV90eXBlIG4sIGNvbnN0IFQmIHZh
bCApCnsKICAgIHNoID0gbmV3IFFWYWx1ZVZlY3RvclByaXZhdGU8VD4oIG4gKTsKICAgIHFGaWxs
KCBiZWdpbigpLCBlbmQoKSwgdmFsICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgogIHZvaWQgUVZh
bHVlVmVjdG9yPFQ+OjpkZXRhY2hJbnRlcm5hbCgpCnsKICAgIHNoLT5kZXJlZigpOwogICAgc2gg
PSBuZXcgUVZhbHVlVmVjdG9yUHJpdmF0ZTxUPiggKnNoICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBU
PgogIHR5cGVuYW1lICBRVmFsdWVWZWN0b3I8VD46Oml0ZXJhdG9yIFFWYWx1ZVZlY3RvcjxUPjo6
aW5zZXJ0KCBpdGVyYXRvciBwb3MsIGNvbnN0IFQmIHggKQp7CiAgICBzaXplX3R5cGUgb2Zmc2V0
ID0gcG9zIC0gc2gtPnN0YXJ0OwogICAgZGV0YWNoKCk7CiAgICBpZiAoIHBvcyA9PSBlbmQoKSAp
IHsKCWlmICggc2gtPmZpbmlzaCA9PSBzaC0+ZW5kICkKCSAgICBwdXNoX2JhY2soIHggKTsKCWVs
c2UgewoJICAgICpzaC0+ZmluaXNoID0geDsKCSAgICArK3NoLT5maW5pc2g7Cgl9CiAgICB9IGVs
c2UgewoJaWYgKCBzaC0+ZmluaXNoID09IHNoLT5lbmQgKSB7CgkgICAgc2gtPmluc2VydCggcG9z
LCB4ICk7Cgl9IGVsc2UgewoJICAgICpzaC0+ZmluaXNoID0gKihzaC0+ZmluaXNoIC0gMSk7Cgkg
ICAgKytzaC0+ZmluaXNoOwoJICAgIHFDb3B5QmFja3dhcmQoIHBvcywgc2gtPmZpbmlzaCAtIDIs
IHNoLT5maW5pc2ggLSAxICk7CgkgICAgKnBvcyA9IHg7Cgl9CiAgICB9CiAgICByZXR1cm4gYmVn
aW4oKSArIG9mZnNldDsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CiAgdHlwZW5hbWUgIFFWYWx1ZVZl
Y3RvcjxUPjo6aXRlcmF0b3IgUVZhbHVlVmVjdG9yPFQ+OjppbnNlcnQoIGl0ZXJhdG9yIHBvcywg
c2l6ZV90eXBlIG4sIGNvbnN0IFQmIHggKQp7CiAgICBpZiAoIG4gIT0gMCApIHsKCXNpemVfdHlw
ZSBvZmZzZXQgPSBwb3MgLSBzaC0+c3RhcnQ7CglkZXRhY2goKTsKCXBvcyA9IGJlZ2luKCkgKyBv
ZmZzZXQ7CglzaC0+aW5zZXJ0KCBwb3MsIG4sIHggKTsKICAgIH0KICAgIHJldHVybiBwb3M7Cn0K
CgoKdGVtcGxhdGU8Y2xhc3MgVD4KICBRRGF0YVN0cmVhbSYgb3BlcmF0b3I+PiggUURhdGFTdHJl
YW0mIHMsIFFWYWx1ZVZlY3RvcjxUPiYgdiApCnsKICAgIHYuY2xlYXIoKTsKICAgIFFfVUlOVDMy
IGM7CiAgICBzID4+IGM7CiAgICB2LnJlc2l6ZSggYyApOwogICAgZm9yKCBRX1VJTlQzMiBpID0g
MDsgaSA8IGM7ICsraSApCiAgICB7CglUIHQ7CglzID4+IHQ7Cgl2W2ldID0gdDsKICAgIH0KICAg
IHJldHVybiBzOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBUPgogIFFEYXRhU3RyZWFtJiBvcGVyYXRvcjw8
KCBRRGF0YVN0cmVhbSYgcywgY29uc3QgUVZhbHVlVmVjdG9yPFQ+JiB2ICkKewogICAgcyA8PCAo
UV9VSU5UMzIpdi5zaXplKCk7CiAgICAgCiAgICAgCiAgICBjb25zdCBUKiBpdCA9IHYuYmVnaW4o
KTsKICAgIGZvciggOyBpdCAhPSB2LmVuZCgpOyArK2l0ICkKCXMgPDwgKml0OwogICAgcmV0dXJu
IHM7Cn0KCgoKCgojIDcgImVsZW1lbnQuaCIgMgoKCmNsYXNzIEVsZW1lbnQ7Cgp0eXBlZGVmIFFW
YWx1ZVZlY3RvcjxFbGVtZW50PiBFbGVtZW50VmVjdG9yOwoKIAoKCmNvbnN0IGRvdWJsZSBFUFNJ
TE9OID0gMC4wMDAwMDAxOyAgCgoKY2xhc3MgRWxlbWVudAp7CnB1YmxpYzoKICAgIGVudW0geyBJ
TlZBTElEID0gLTEgfTsKICAgIGVudW0geyBOT19QUk9QT1JUSU9OID0gLTEgfTsKICAgIGVudW0g
eyBNQVhfUFJPUE9JTlRTID0gMyB9OyAgCgogICAgRWxlbWVudCggZG91YmxlIHZhbHVlID0gSU5W
QUxJRCwgUUNvbG9yIHZhbHVlQ29sb3IgPSBRdDo6Z3JheSwKCSAgICAgaW50IHZhbHVlUGF0dGVy
biA9IFF0OjpTb2xpZFBhdHRlcm4sCgkgICAgIGNvbnN0IFFTdHJpbmcmIGxhYmVsID0gUVN0cmlu
Zzo6bnVsbCwKCSAgICAgUUNvbG9yIGxhYmVsQ29sb3IgPSBRdDo6YmxhY2sgKSB7Cglpbml0KCB2
YWx1ZSwgdmFsdWVDb2xvciwgdmFsdWVQYXR0ZXJuLCBsYWJlbCwgbGFiZWxDb2xvciApOwoJZm9y
ICggaW50IGkgPSAwOyBpIDwgTUFYX1BST1BPSU5UUyAqIDI7ICsraSApCgkgICAgbV9wcm9wb2lu
dHNbaV0gPSBOT19QUk9QT1JUSU9OOwogICAgfQogICAgfkVsZW1lbnQoKSB7fQoKICAgIGJvb2wg
aXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPiBFUFNJTE9OOyB9CgogICAgZG91Ymxl
IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQogICAgUUNvbG9yIHZhbHVlQ29sb3Io
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlQ29sb3I7IH0KICAgIGludCB2YWx1ZVBhdHRlcm4oKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlUGF0dGVybjsgfQogICAgUVN0cmluZyBsYWJlbCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGFiZWw7IH0KICAgIFFDb2xvciBsYWJlbENvbG9yKCkgY29uc3QgeyByZXR1
cm4gbV9sYWJlbENvbG9yOyB9CiAgICBkb3VibGUgcHJvWCggaW50IGluZGV4ICkgY29uc3Q7CiAg
ICBkb3VibGUgcHJvWSggaW50IGluZGV4ICkgY29uc3Q7CgogICAgdm9pZCBzZXQoIGRvdWJsZSB2
YWx1ZSA9IElOVkFMSUQsIFFDb2xvciB2YWx1ZUNvbG9yID0gUXQ6OmdyYXksCgkgICAgICBpbnQg
dmFsdWVQYXR0ZXJuID0gUXQ6OlNvbGlkUGF0dGVybiwKCSAgICAgIGNvbnN0IFFTdHJpbmcmIGxh
YmVsID0gUVN0cmluZzo6bnVsbCwKCSAgICAgIFFDb2xvciBsYWJlbENvbG9yID0gUXQ6OmJsYWNr
ICkgewoJaW5pdCggdmFsdWUsIHZhbHVlQ29sb3IsIHZhbHVlUGF0dGVybiwgbGFiZWwsIGxhYmVs
Q29sb3IgKTsKICAgIH0KICAgIHZvaWQgc2V0VmFsdWUoIGRvdWJsZSB2YWx1ZSApIHsgbV92YWx1
ZSA9IHZhbHVlOyB9CiAgICB2b2lkIHNldFZhbHVlQ29sb3IoIFFDb2xvciB2YWx1ZUNvbG9yICkg
eyBtX3ZhbHVlQ29sb3IgPSB2YWx1ZUNvbG9yOyB9CiAgICB2b2lkIHNldFZhbHVlUGF0dGVybigg
aW50IHZhbHVlUGF0dGVybiApOwogICAgdm9pZCBzZXRMYWJlbCggY29uc3QgUVN0cmluZyYgbGFi
ZWwgKSB7IG1fbGFiZWwgPSBsYWJlbDsgfQogICAgdm9pZCBzZXRMYWJlbENvbG9yKCBRQ29sb3Ig
bGFiZWxDb2xvciApIHsgbV9sYWJlbENvbG9yID0gbGFiZWxDb2xvcjsgfQogICAgdm9pZCBzZXRQ
cm9YKCBpbnQgaW5kZXgsIGRvdWJsZSB2YWx1ZSApOwogICAgdm9pZCBzZXRQcm9ZKCBpbnQgaW5k
ZXgsIGRvdWJsZSB2YWx1ZSApOwoKcHJpdmF0ZToKICAgIHZvaWQgaW5pdCggZG91YmxlIHZhbHVl
LCBRQ29sb3IgdmFsdWVDb2xvciwgaW50IHZhbHVlUGF0dGVybiwKCSAgICAgICBjb25zdCBRU3Ry
aW5nJiBsYWJlbCwgUUNvbG9yIGxhYmVsQ29sb3IgKTsKCiAgICBkb3VibGUgbV92YWx1ZTsKICAg
IFFDb2xvciBtX3ZhbHVlQ29sb3I7CiAgICBpbnQgbV92YWx1ZVBhdHRlcm47CiAgICBRU3RyaW5n
IG1fbGFiZWw7CiAgICBRQ29sb3IgbV9sYWJlbENvbG9yOwogICAgZG91YmxlIG1fcHJvcG9pbnRz
WzIgKiBNQVhfUFJPUE9JTlRTXTsKfTsKCgpRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PCggUVRleHRT
dHJlYW0mLCBjb25zdCBFbGVtZW50JiApOwpRVGV4dFN0cmVhbSAmb3BlcmF0b3I+PiggUVRleHRT
dHJlYW0mLCBFbGVtZW50JiApOwoKCiMgNCAiY2FudmFzdmlldy5oIiAyCgojIDEgImNhbnZhc3Rl
eHQuaCIgMQoKCgojIDEgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xY2FudmFzLmgiIDEKIAoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2xvY2FsL3F0L2lu
Y2x1ZGUvcXNjcm9sbHZpZXcuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3FmcmFtZS5oIiAxCiAKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9xdC9pbmNsdWRl
L3F3aWRnZXQuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
IyAxICIvdXNyL2xvY2FsL3F0L2luY2x1ZGUvcW9iamVjdC5oIiAxCiAKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3Fl
dmVudC5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEg
Ii91c3IvbG9jYWwvcXQvaW5jbHVkZS9xcmVnaW9uLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3FyZWN0Lmgi
IDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2xv
Y2FsL3F0L2luY2x1ZGUvcXNpemUuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgojIDEgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xcG9pbnQuaCIgMQogCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKY2xhc3MgICBRUG9pbnQKewpw
dWJsaWM6CiAgICBRUG9pbnQoKTsKICAgIFFQb2ludCggaW50IHhwb3MsIGludCB5cG9zICk7Cgog
ICAgYm9vbCAgIGlzTnVsbCgpCWNvbnN0OwoKICAgIGludAkgICB4KCkJCWNvbnN0OwogICAgaW50
CSAgIHkoKQkJY29uc3Q7CiAgICB2b2lkICAgc2V0WCggaW50IHggKTsKICAgIHZvaWQgICBzZXRZ
KCBpbnQgeSApOwoKICAgIGludCBtYW5oYXR0YW5MZW5ndGgoKSBjb25zdDsKCiAgICBRQ09PUkQg
JnJ4KCk7CiAgICBRQ09PUkQgJnJ5KCk7CgogICAgUVBvaW50ICZvcGVyYXRvcis9KCBjb25zdCBR
UG9pbnQgJnAgKTsKICAgIFFQb2ludCAmb3BlcmF0b3ItPSggY29uc3QgUVBvaW50ICZwICk7CiAg
ICBRUG9pbnQgJm9wZXJhdG9yKj0oIGludCBjICk7CiAgICBRUG9pbnQgJm9wZXJhdG9yKj0oIGRv
dWJsZSBjICk7CiAgICBRUG9pbnQgJm9wZXJhdG9yLz0oIGludCBjICk7CiAgICBRUG9pbnQgJm9w
ZXJhdG9yLz0oIGRvdWJsZSBjICk7CgogICAgZnJpZW5kIGlubGluZSBib29sCSBvcGVyYXRvcj09
KCBjb25zdCBRUG9pbnQgJiwgY29uc3QgUVBvaW50ICYgKTsKICAgIGZyaWVuZCBpbmxpbmUgYm9v
bAkgb3BlcmF0b3IhPSggY29uc3QgUVBvaW50ICYsIGNvbnN0IFFQb2ludCAmICk7CiAgICBmcmll
bmQgaW5saW5lIGNvbnN0IFFQb2ludCBvcGVyYXRvcisoIGNvbnN0IFFQb2ludCAmLCBjb25zdCBR
UG9pbnQgJiApOwogICAgZnJpZW5kIGlubGluZSBjb25zdCBRUG9pbnQgb3BlcmF0b3ItKCBjb25z
dCBRUG9pbnQgJiwgY29uc3QgUVBvaW50ICYgKTsKICAgIGZyaWVuZCBpbmxpbmUgY29uc3QgUVBv
aW50IG9wZXJhdG9yKiggY29uc3QgUVBvaW50ICYsIGludCApOwogICAgZnJpZW5kIGlubGluZSBj
b25zdCBRUG9pbnQgb3BlcmF0b3IqKCBpbnQsIGNvbnN0IFFQb2ludCAmICk7CiAgICBmcmllbmQg
aW5saW5lIGNvbnN0IFFQb2ludCBvcGVyYXRvciooIGNvbnN0IFFQb2ludCAmLCBkb3VibGUgKTsK
ICAgIGZyaWVuZCBpbmxpbmUgY29uc3QgUVBvaW50IG9wZXJhdG9yKiggZG91YmxlLCBjb25zdCBR
UG9pbnQgJiApOwogICAgZnJpZW5kIGlubGluZSBjb25zdCBRUG9pbnQgb3BlcmF0b3ItKCBjb25z
dCBRUG9pbnQgJiApOwogICAgZnJpZW5kIGlubGluZSBjb25zdCBRUG9pbnQgb3BlcmF0b3IvKCBj
b25zdCBRUG9pbnQgJiwgaW50ICk7CiAgICBmcmllbmQgaW5saW5lIGNvbnN0IFFQb2ludCBvcGVy
YXRvci8oIGNvbnN0IFFQb2ludCAmLCBkb3VibGUgKTsKCnByaXZhdGU6CiAgICBzdGF0aWMgdm9p
ZCB3YXJuaW5nRGl2QnlaZXJvKCk7CgoKCgoKICAgIFFDT09SRCB4cDsKICAgIFFDT09SRCB5cDsK
Cn07CgoKIAoKCgogIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25z
dCBRUG9pbnQgJiApOwogIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBR
UG9pbnQgJiApOwoKCiAKCgoKaW5saW5lIFFQb2ludDo6UVBvaW50KCkKeyB4cD0wOyB5cD0wOyB9
CgppbmxpbmUgUVBvaW50OjpRUG9pbnQoIGludCB4cG9zLCBpbnQgeXBvcyApCnsgeHA9KFFDT09S
RCl4cG9zOyB5cD0oUUNPT1JEKXlwb3M7IH0KCmlubGluZSBib29sIFFQb2ludDo6aXNOdWxsKCkg
Y29uc3QKeyByZXR1cm4geHAgPT0gMCAmJiB5cCA9PSAwOyB9CgppbmxpbmUgaW50IFFQb2ludDo6
eCgpIGNvbnN0CnsgcmV0dXJuIHhwOyB9CgppbmxpbmUgaW50IFFQb2ludDo6eSgpIGNvbnN0Cnsg
cmV0dXJuIHlwOyB9CgppbmxpbmUgdm9pZCBRUG9pbnQ6OnNldFgoIGludCB4ICkKeyB4cCA9IChR
Q09PUkQpeDsgfQoKaW5saW5lIHZvaWQgUVBvaW50OjpzZXRZKCBpbnQgeSApCnsgeXAgPSAoUUNP
T1JEKXk7IH0KCmlubGluZSBRQ09PUkQgJlFQb2ludDo6cngoKQp7IHJldHVybiB4cDsgfQoKaW5s
aW5lIFFDT09SRCAmUVBvaW50OjpyeSgpCnsgcmV0dXJuIHlwOyB9CgppbmxpbmUgUVBvaW50ICZR
UG9pbnQ6Om9wZXJhdG9yKz0oIGNvbnN0IFFQb2ludCAmcCApCnsgeHArPXAueHA7IHlwKz1wLnlw
OyByZXR1cm4gKnRoaXM7IH0KCmlubGluZSBRUG9pbnQgJlFQb2ludDo6b3BlcmF0b3ItPSggY29u
c3QgUVBvaW50ICZwICkKeyB4cC09cC54cDsgeXAtPXAueXA7IHJldHVybiAqdGhpczsgfQoKaW5s
aW5lIFFQb2ludCAmUVBvaW50OjpvcGVyYXRvcio9KCBpbnQgYyApCnsgeHAqPShRQ09PUkQpYzsg
eXAqPShRQ09PUkQpYzsgcmV0dXJuICp0aGlzOyB9CgppbmxpbmUgUVBvaW50ICZRUG9pbnQ6Om9w
ZXJhdG9yKj0oIGRvdWJsZSBjICkKeyB4cD0oUUNPT1JEKSh4cCpjKTsgeXA9KFFDT09SRCkoeXAq
Yyk7IHJldHVybiAqdGhpczsgfQoKaW5saW5lIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVBvaW50
ICZwMSwgY29uc3QgUVBvaW50ICZwMiApCnsgcmV0dXJuIHAxLnhwID09IHAyLnhwICYmIHAxLnlw
ID09IHAyLnlwOyB9CgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRUG9pbnQgJnAxLCBj
b25zdCBRUG9pbnQgJnAyICkKeyByZXR1cm4gcDEueHAgIT0gcDIueHAgfHwgcDEueXAgIT0gcDIu
eXA7IH0KCmlubGluZSBjb25zdCBRUG9pbnQgb3BlcmF0b3IrKCBjb25zdCBRUG9pbnQgJnAxLCBj
b25zdCBRUG9pbnQgJnAyICkKeyByZXR1cm4gUVBvaW50KHAxLnhwK3AyLnhwLCBwMS55cCtwMi55
cCk7IH0KCmlubGluZSBjb25zdCBRUG9pbnQgb3BlcmF0b3ItKCBjb25zdCBRUG9pbnQgJnAxLCBj
b25zdCBRUG9pbnQgJnAyICkKeyByZXR1cm4gUVBvaW50KHAxLnhwLXAyLnhwLCBwMS55cC1wMi55
cCk7IH0KCmlubGluZSBjb25zdCBRUG9pbnQgb3BlcmF0b3IqKCBjb25zdCBRUG9pbnQgJnAsIGlu
dCBjICkKeyByZXR1cm4gUVBvaW50KHAueHAqYywgcC55cCpjKTsgfQoKaW5saW5lIGNvbnN0IFFQ
b2ludCBvcGVyYXRvciooIGludCBjLCBjb25zdCBRUG9pbnQgJnAgKQp7IHJldHVybiBRUG9pbnQo
cC54cCpjLCBwLnlwKmMpOyB9CgppbmxpbmUgY29uc3QgUVBvaW50IG9wZXJhdG9yKiggY29uc3Qg
UVBvaW50ICZwLCBkb3VibGUgYyApCnsgcmV0dXJuIFFQb2ludCgoUUNPT1JEKShwLnhwKmMpLCAo
UUNPT1JEKShwLnlwKmMpKTsgfQoKaW5saW5lIGNvbnN0IFFQb2ludCBvcGVyYXRvciooIGRvdWJs
ZSBjLCBjb25zdCBRUG9pbnQgJnAgKQp7IHJldHVybiBRUG9pbnQoKFFDT09SRCkocC54cCpjKSwg
KFFDT09SRCkocC55cCpjKSk7IH0KCmlubGluZSBjb25zdCBRUG9pbnQgb3BlcmF0b3ItKCBjb25z
dCBRUG9pbnQgJnAgKQp7IHJldHVybiBRUG9pbnQoLXAueHAsIC1wLnlwKTsgfQoKaW5saW5lIFFQ
b2ludCAmUVBvaW50OjpvcGVyYXRvci89KCBpbnQgYyApCnsKCiAgICBpZiAoIGMgPT0gMCApCgl3
YXJuaW5nRGl2QnlaZXJvKCk7CgogICAgeHAvPShRQ09PUkQpYzsKICAgIHlwLz0oUUNPT1JEKWM7
CiAgICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBRUG9pbnQgJlFQb2ludDo6b3BlcmF0b3IvPSgg
ZG91YmxlIGMgKQp7CgogICAgaWYgKCBjID09IDAuMCApCgl3YXJuaW5nRGl2QnlaZXJvKCk7Cgog
ICAgeHA9KFFDT09SRCkoeHAvYyk7CiAgICB5cD0oUUNPT1JEKSh5cC9jKTsKICAgIHJldHVybiAq
dGhpczsKfQoKaW5saW5lIGNvbnN0IFFQb2ludCBvcGVyYXRvci8oIGNvbnN0IFFQb2ludCAmcCwg
aW50IGMgKQp7CgogICAgaWYgKCBjID09IDAgKQoJUVBvaW50Ojp3YXJuaW5nRGl2QnlaZXJvKCk7
CgogICAgcmV0dXJuIFFQb2ludChwLnhwL2MsIHAueXAvYyk7Cn0KCmlubGluZSBjb25zdCBRUG9p
bnQgb3BlcmF0b3IvKCBjb25zdCBRUG9pbnQgJnAsIGRvdWJsZSBjICkKewoKICAgIGlmICggYyA9
PSAwLjAgKQoJUVBvaW50Ojp3YXJuaW5nRGl2QnlaZXJvKCk7CgogICAgcmV0dXJuIFFQb2ludCgo
UUNPT1JEKShwLnhwL2MpLCAoUUNPT1JEKShwLnlwL2MpKTsKfQoKCgojIDQyICIvdXNyL2xvY2Fs
L3F0L2luY2x1ZGUvcXNpemUuaCIgMgoKCgoKY2xhc3MgICBRU2l6ZQp7CnB1YmxpYzoKICAgIFFT
aXplKCk7CiAgICBRU2l6ZSggaW50IHcsIGludCBoICk7CgogICAgYm9vbCAgIGlzTnVsbCgpCWNv
bnN0OwogICAgYm9vbCAgIGlzRW1wdHkoKQljb25zdDsKICAgIGJvb2wgICBpc1ZhbGlkKCkJY29u
c3Q7CgogICAgaW50CSAgIHdpZHRoKCkJY29uc3Q7CiAgICBpbnQJICAgaGVpZ2h0KCkJY29uc3Q7
CiAgICB2b2lkICAgc2V0V2lkdGgoIGludCB3ICk7CiAgICB2b2lkICAgc2V0SGVpZ2h0KCBpbnQg
aCApOwogICAgdm9pZCAgIHRyYW5zcG9zZSgpOwoKICAgIFFTaXplIGV4cGFuZGVkVG8oIGNvbnN0
IFFTaXplICYgKSBjb25zdDsKICAgIFFTaXplIGJvdW5kZWRUbyggY29uc3QgUVNpemUgJiApIGNv
bnN0OwoKICAgIFFDT09SRCAmcndpZHRoKCk7CiAgICBRQ09PUkQgJnJoZWlnaHQoKTsKCiAgICBR
U2l6ZSAmb3BlcmF0b3IrPSggY29uc3QgUVNpemUgJiApOwogICAgUVNpemUgJm9wZXJhdG9yLT0o
IGNvbnN0IFFTaXplICYgKTsKICAgIFFTaXplICZvcGVyYXRvcio9KCBpbnQgYyApOwogICAgUVNp
emUgJm9wZXJhdG9yKj0oIGRvdWJsZSBjICk7CiAgICBRU2l6ZSAmb3BlcmF0b3IvPSggaW50IGMg
KTsKICAgIFFTaXplICZvcGVyYXRvci89KCBkb3VibGUgYyApOwoKICAgIGZyaWVuZCBpbmxpbmUg
Ym9vbAlvcGVyYXRvcj09KCBjb25zdCBRU2l6ZSAmLCBjb25zdCBRU2l6ZSAmICk7CiAgICBmcmll
bmQgaW5saW5lIGJvb2wJb3BlcmF0b3IhPSggY29uc3QgUVNpemUgJiwgY29uc3QgUVNpemUgJiAp
OwogICAgZnJpZW5kIGlubGluZSBjb25zdCBRU2l6ZSBvcGVyYXRvcisoIGNvbnN0IFFTaXplICYs
IGNvbnN0IFFTaXplICYgKTsKICAgIGZyaWVuZCBpbmxpbmUgY29uc3QgUVNpemUgb3BlcmF0b3It
KCBjb25zdCBRU2l6ZSAmLCBjb25zdCBRU2l6ZSAmICk7CiAgICBmcmllbmQgaW5saW5lIGNvbnN0
IFFTaXplIG9wZXJhdG9yKiggY29uc3QgUVNpemUgJiwgaW50ICk7CiAgICBmcmllbmQgaW5saW5l
IGNvbnN0IFFTaXplIG9wZXJhdG9yKiggaW50LCBjb25zdCBRU2l6ZSAmICk7CiAgICBmcmllbmQg
aW5saW5lIGNvbnN0IFFTaXplIG9wZXJhdG9yKiggY29uc3QgUVNpemUgJiwgZG91YmxlICk7CiAg
ICBmcmllbmQgaW5saW5lIGNvbnN0IFFTaXplIG9wZXJhdG9yKiggZG91YmxlLCBjb25zdCBRU2l6
ZSAmICk7CiAgICBmcmllbmQgaW5saW5lIGNvbnN0IFFTaXplIG9wZXJhdG9yLyggY29uc3QgUVNp
emUgJiwgaW50ICk7CiAgICBmcmllbmQgaW5saW5lIGNvbnN0IFFTaXplIG9wZXJhdG9yLyggY29u
c3QgUVNpemUgJiwgZG91YmxlICk7Cgpwcml2YXRlOgogICAgc3RhdGljIHZvaWQgd2FybmluZ0Rp
dkJ5WmVybygpOwoKICAgIFFDT09SRCB3ZDsKICAgIFFDT09SRCBodDsKfTsKCgogCgoKCiAgUURh
dGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFTaXplICYgKTsKICBR
RGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUVNpemUgJiApOwoKCiAKCgoK
aW5saW5lIFFTaXplOjpRU2l6ZSgpCnsgd2QgPSBodCA9IC0xOyB9CgppbmxpbmUgUVNpemU6OlFT
aXplKCBpbnQgdywgaW50IGggKQp7IHdkPShRQ09PUkQpdzsgaHQ9KFFDT09SRCloOyB9Cgppbmxp
bmUgYm9vbCBRU2l6ZTo6aXNOdWxsKCkgY29uc3QKeyByZXR1cm4gd2Q9PTAgJiYgaHQ9PTA7IH0K
CmlubGluZSBib29sIFFTaXplOjppc0VtcHR5KCkgY29uc3QKeyByZXR1cm4gd2Q8MSB8fCBodDwx
OyB9CgppbmxpbmUgYm9vbCBRU2l6ZTo6aXNWYWxpZCgpIGNvbnN0CnsgcmV0dXJuIHdkPj0wICYm
IGh0Pj0wOyB9CgppbmxpbmUgaW50IFFTaXplOjp3aWR0aCgpIGNvbnN0CnsgcmV0dXJuIHdkOyB9
CgppbmxpbmUgaW50IFFTaXplOjpoZWlnaHQoKSBjb25zdAp7IHJldHVybiBodDsgfQoKaW5saW5l
IHZvaWQgUVNpemU6OnNldFdpZHRoKCBpbnQgdyApCnsgd2Q9KFFDT09SRCl3OyB9CgppbmxpbmUg
dm9pZCBRU2l6ZTo6c2V0SGVpZ2h0KCBpbnQgaCApCnsgaHQ9KFFDT09SRCloOyB9CgppbmxpbmUg
UUNPT1JEICZRU2l6ZTo6cndpZHRoKCkKeyByZXR1cm4gd2Q7IH0KCmlubGluZSBRQ09PUkQgJlFT
aXplOjpyaGVpZ2h0KCkKeyByZXR1cm4gaHQ7IH0KCmlubGluZSBRU2l6ZSAmUVNpemU6Om9wZXJh
dG9yKz0oIGNvbnN0IFFTaXplICZzICkKeyB3ZCs9cy53ZDsgaHQrPXMuaHQ7IHJldHVybiAqdGhp
czsgfQoKaW5saW5lIFFTaXplICZRU2l6ZTo6b3BlcmF0b3ItPSggY29uc3QgUVNpemUgJnMgKQp7
IHdkLT1zLndkOyBodC09cy5odDsgcmV0dXJuICp0aGlzOyB9CgppbmxpbmUgUVNpemUgJlFTaXpl
OjpvcGVyYXRvcio9KCBpbnQgYyApCnsgd2QqPShRQ09PUkQpYzsgaHQqPShRQ09PUkQpYzsgcmV0
dXJuICp0aGlzOyB9CgppbmxpbmUgUVNpemUgJlFTaXplOjpvcGVyYXRvcio9KCBkb3VibGUgYyAp
Cnsgd2Q9KFFDT09SRCkod2QqYyk7IGh0PShRQ09PUkQpKGh0KmMpOyByZXR1cm4gKnRoaXM7IH0K
CmlubGluZSBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFTaXplICZzMSwgY29uc3QgUVNpemUgJnMy
ICkKeyByZXR1cm4gczEud2QgPT0gczIud2QgJiYgczEuaHQgPT0gczIuaHQ7IH0KCmlubGluZSBi
b29sIG9wZXJhdG9yIT0oIGNvbnN0IFFTaXplICZzMSwgY29uc3QgUVNpemUgJnMyICkKeyByZXR1
cm4gczEud2QgIT0gczIud2QgfHwgczEuaHQgIT0gczIuaHQ7IH0KCmlubGluZSBjb25zdCBRU2l6
ZSBvcGVyYXRvcisoIGNvbnN0IFFTaXplICYgczEsIGNvbnN0IFFTaXplICYgczIgKQp7IHJldHVy
biBRU2l6ZShzMS53ZCtzMi53ZCwgczEuaHQrczIuaHQpOyB9CgppbmxpbmUgY29uc3QgUVNpemUg
b3BlcmF0b3ItKCBjb25zdCBRU2l6ZSAmczEsIGNvbnN0IFFTaXplICZzMiApCnsgcmV0dXJuIFFT
aXplKHMxLndkLXMyLndkLCBzMS5odC1zMi5odCk7IH0KCmlubGluZSBjb25zdCBRU2l6ZSBvcGVy
YXRvciooIGNvbnN0IFFTaXplICZzLCBpbnQgYyApCnsgcmV0dXJuIFFTaXplKHMud2QqYywgcy5o
dCpjKTsgfQoKaW5saW5lIGNvbnN0IFFTaXplIG9wZXJhdG9yKiggaW50IGMsIGNvbnN0IFFTaXpl
ICZzICkKeyAgcmV0dXJuIFFTaXplKHMud2QqYywgcy5odCpjKTsgfQoKaW5saW5lIGNvbnN0IFFT
aXplIG9wZXJhdG9yKiggY29uc3QgUVNpemUgJnMsIGRvdWJsZSBjICkKeyByZXR1cm4gUVNpemUo
KFFDT09SRCkocy53ZCpjKSwgKFFDT09SRCkocy5odCpjKSk7IH0KCmlubGluZSBjb25zdCBRU2l6
ZSBvcGVyYXRvciooIGRvdWJsZSBjLCBjb25zdCBRU2l6ZSAmcyApCnsgcmV0dXJuIFFTaXplKChR
Q09PUkQpKHMud2QqYyksIChRQ09PUkQpKHMuaHQqYykpOyB9CgppbmxpbmUgUVNpemUgJlFTaXpl
OjpvcGVyYXRvci89KCBpbnQgYyApCnsKCiAgICBpZiAoIGMgPT0gMCApCgl3YXJuaW5nRGl2Qnla
ZXJvKCk7CgogICAgd2QvPShRQ09PUkQpYzsgaHQvPShRQ09PUkQpYzsKICAgIHJldHVybiAqdGhp
czsKfQoKaW5saW5lIFFTaXplICZRU2l6ZTo6b3BlcmF0b3IvPSggZG91YmxlIGMgKQp7CgogICAg
aWYgKCBjID09IDAuMCApCgl3YXJuaW5nRGl2QnlaZXJvKCk7CgogICAgd2Q9KFFDT09SRCkod2Qv
Yyk7IGh0PShRQ09PUkQpKGh0L2MpOwogICAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgY29uc3Qg
UVNpemUgb3BlcmF0b3IvKCBjb25zdCBRU2l6ZSAmcywgaW50IGMgKQp7CgogICAgaWYgKCBjID09
IDAgKQoJUVNpemU6Ondhcm5pbmdEaXZCeVplcm8oKTsKCiAgICByZXR1cm4gUVNpemUocy53ZC9j
LCBzLmh0L2MpOwp9CgppbmxpbmUgY29uc3QgUVNpemUgb3BlcmF0b3IvKCBjb25zdCBRU2l6ZSAm
cywgZG91YmxlIGMgKQp7CgogICAgaWYgKCBjID09IDAuMCApCglRU2l6ZTo6d2FybmluZ0RpdkJ5
WmVybygpOwoKICAgIHJldHVybiBRU2l6ZSgoUUNPT1JEKShzLndkL2MpLCAoUUNPT1JEKShzLmh0
L2MpKTsKfQoKaW5saW5lIFFTaXplIFFTaXplOjpleHBhbmRlZFRvKCBjb25zdCBRU2l6ZSAmIG90
aGVyU2l6ZSApIGNvbnN0CnsKICAgIHJldHVybiBRU2l6ZSggKCggb3RoZXJTaXplLndkICkgPCAo
IHdkICkgPyAoIHdkICkgOiAoIG90aGVyU2l6ZS53ZCApKSAsICgoIG90aGVyU2l6ZS5odCApIDwg
KCBodCApID8gKCBodCApIDogKCBvdGhlclNpemUuaHQgKSkgICk7Cn0KCmlubGluZSBRU2l6ZSBR
U2l6ZTo6Ym91bmRlZFRvKCBjb25zdCBRU2l6ZSAmIG90aGVyU2l6ZSApIGNvbnN0CnsKICAgIHJl
dHVybiBRU2l6ZSggKCggd2QgKSA8ICggb3RoZXJTaXplLndkICkgPyAoIHdkICkgOiAoIG90aGVy
U2l6ZS53ZCApKSAsICgoIGh0ICkgPCAoIG90aGVyU2l6ZS5odCApID8gKCBodCApIDogKCBvdGhl
clNpemUuaHQgKSkgICk7Cn0KCgoKIyA0MiAiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3FyZWN0Lmgi
IDIKCgoKCgoKCgpjbGFzcyAgIFFSZWN0CQkJCQkgCnsKcHVibGljOgogICAgUVJlY3QoKQl7IHgx
ID0geTEgPSAwOyB4MiA9IHkyID0gLTE7IH0KICAgIFFSZWN0KCBjb25zdCBRUG9pbnQgJnRvcGxl
ZnQsIGNvbnN0IFFQb2ludCAmYm90dG9tcmlnaHQgKTsKICAgIFFSZWN0KCBjb25zdCBRUG9pbnQg
JnRvcGxlZnQsIGNvbnN0IFFTaXplICZzaXplICk7CiAgICBRUmVjdCggaW50IGxlZnQsIGludCB0
b3AsIGludCB3aWR0aCwgaW50IGhlaWdodCApOwoKICAgIGJvb2wgICBpc051bGwoKQljb25zdDsK
ICAgIGJvb2wgICBpc0VtcHR5KCkJY29uc3Q7CiAgICBib29sICAgaXNWYWxpZCgpCWNvbnN0Owog
ICAgUVJlY3QgIG5vcm1hbGl6ZSgpCWNvbnN0OwoKICAgIGludAkgICBsZWZ0KCkJY29uc3Q7CiAg
ICBpbnQJICAgdG9wKCkJY29uc3Q7CiAgICBpbnQJICAgcmlnaHQoKQljb25zdDsKICAgIGludAkg
ICBib3R0b20oKQljb25zdDsKCiAgICBRQ09PUkQgJnJMZWZ0KCk7CiAgICBRQ09PUkQgJnJUb3Ao
KTsKICAgIFFDT09SRCAmclJpZ2h0KCk7CiAgICBRQ09PUkQgJnJCb3R0b20oKTsKCQogICAgaW50
CSAgIHgoKQkJY29uc3Q7CiAgICBpbnQJICAgeSgpCQljb25zdDsKICAgIHZvaWQgICBzZXRMZWZ0
KCBpbnQgcG9zICk7CiAgICB2b2lkICAgc2V0VG9wKCBpbnQgcG9zICk7CiAgICB2b2lkICAgc2V0
UmlnaHQoIGludCBwb3MgKTsKICAgIHZvaWQgICBzZXRCb3R0b20oIGludCBwb3MgKTsKICAgIHZv
aWQgICBzZXRYKCBpbnQgeCApOwogICAgdm9pZCAgIHNldFkoIGludCB5ICk7CgogICAgUVBvaW50
IHRvcExlZnQoKQkgY29uc3Q7CiAgICBRUG9pbnQgYm90dG9tUmlnaHQoKSBjb25zdDsKICAgIFFQ
b2ludCB0b3BSaWdodCgpCSBjb25zdDsKICAgIFFQb2ludCBib3R0b21MZWZ0KCkJIGNvbnN0Owog
ICAgUVBvaW50IGNlbnRlcigpCSBjb25zdDsKCiAgICB2b2lkICAgcmVjdCggaW50ICp4LCBpbnQg
KnksIGludCAqdywgaW50ICpoICkgY29uc3Q7CiAgICB2b2lkICAgY29vcmRzKCBpbnQgKngxLCBp
bnQgKnkxLCBpbnQgKngyLCBpbnQgKnkyICkgY29uc3Q7CgogICAgdm9pZCAgIG1vdmVUb3BMZWZ0
KCBjb25zdCBRUG9pbnQgJnAgKTsKICAgIHZvaWQgICBtb3ZlQm90dG9tUmlnaHQoIGNvbnN0IFFQ
b2ludCAmcCApOwogICAgdm9pZCAgIG1vdmVUb3BSaWdodCggY29uc3QgUVBvaW50ICZwICk7CiAg
ICB2b2lkICAgbW92ZUJvdHRvbUxlZnQoIGNvbnN0IFFQb2ludCAmcCApOwogICAgdm9pZCAgIG1v
dmVDZW50ZXIoIGNvbnN0IFFQb2ludCAmcCApOwogICAgdm9pZCAgIG1vdmVCeSggaW50IGR4LCBp
bnQgZHkgKTsKCiAgICB2b2lkICAgc2V0UmVjdCggaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgg
KTsKICAgIHZvaWQgICBzZXRDb29yZHMoIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MiAp
OwogICAgdm9pZCAgIGFkZENvb3JkcyggaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyICk7
CiAgICAKICAgIFFTaXplICBzaXplKCkJY29uc3Q7CiAgICBpbnQJICAgd2lkdGgoKQljb25zdDsK
ICAgIGludAkgICBoZWlnaHQoKQljb25zdDsKICAgIHZvaWQgICBzZXRXaWR0aCggaW50IHcgKTsK
ICAgIHZvaWQgICBzZXRIZWlnaHQoIGludCBoICk7CiAgICB2b2lkICAgc2V0U2l6ZSggY29uc3Qg
UVNpemUgJnMgKTsKCiAgICBRUmVjdCAgb3BlcmF0b3J8KGNvbnN0IFFSZWN0ICZyKSBjb25zdDsK
ICAgIFFSZWN0ICBvcGVyYXRvciYoY29uc3QgUVJlY3QgJnIpIGNvbnN0OwogICAgUVJlY3QmICBv
cGVyYXRvcnw9KGNvbnN0IFFSZWN0ICZyKTsKICAgIFFSZWN0JiAgb3BlcmF0b3ImPShjb25zdCBR
UmVjdCAmcik7CgogICAgYm9vbCAgIGNvbnRhaW5zKCBjb25zdCBRUG9pbnQgJnAsIGJvb2wgcHJv
cGVyPUZBTFNFICkgY29uc3Q7CiAgICBib29sICAgY29udGFpbnMoIGludCB4LCBpbnQgeSwgYm9v
bCBwcm9wZXI9RkFMU0UgKSBjb25zdDsKICAgIGJvb2wgICBjb250YWlucyggY29uc3QgUVJlY3Qg
JnIsIGJvb2wgcHJvcGVyPUZBTFNFICkgY29uc3Q7CiAgICBRUmVjdCAgdW5pdGUoIGNvbnN0IFFS
ZWN0ICZyICkgY29uc3Q7CiAgICBRUmVjdCAgaW50ZXJzZWN0KCBjb25zdCBRUmVjdCAmciApIGNv
bnN0OwogICAgYm9vbCAgIGludGVyc2VjdHMoIGNvbnN0IFFSZWN0ICZyICkgY29uc3Q7CgogICAg
ZnJpZW5kICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRUmVjdCAmLCBjb25zdCBRUmVjdCAmICk7
CiAgICBmcmllbmQgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFSZWN0ICYsIGNvbnN0IFFSZWN0
ICYgKTsKCnByaXZhdGU6CgoKCgoKCiAgICBRQ09PUkQgeDE7CiAgICBRQ09PUkQgeTE7CiAgICBR
Q09PUkQgeDI7CiAgICBRQ09PUkQgeTI7Cgp9OwoKICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFS
ZWN0ICYsIGNvbnN0IFFSZWN0ICYgKTsKICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFSZWN0ICYs
IGNvbnN0IFFSZWN0ICYgKTsKCgogCgoKCiAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRh
U3RyZWFtICYsIGNvbnN0IFFSZWN0ICYgKTsKICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURh
dGFTdHJlYW0gJiwgUVJlY3QgJiApOwoKCiAKCgoKaW5saW5lIFFSZWN0OjpRUmVjdCggaW50IGxl
ZnQsIGludCB0b3AsIGludCB3aWR0aCwgaW50IGhlaWdodCApCnsKICAgIHgxID0gKFFDT09SRCls
ZWZ0OwogICAgeTEgPSAoUUNPT1JEKXRvcDsKICAgIHgyID0gKFFDT09SRCkobGVmdCt3aWR0aC0x
KTsKICAgIHkyID0gKFFDT09SRCkodG9wK2hlaWdodC0xKTsKfQoKaW5saW5lIGJvb2wgUVJlY3Q6
OmlzTnVsbCgpIGNvbnN0CnsgcmV0dXJuIHgyID09IHgxLTEgJiYgeTIgPT0geTEtMTsgfQoKaW5s
aW5lIGJvb2wgUVJlY3Q6OmlzRW1wdHkoKSBjb25zdAp7IHJldHVybiB4MSA+IHgyIHx8IHkxID4g
eTI7IH0KCmlubGluZSBib29sIFFSZWN0Ojppc1ZhbGlkKCkgY29uc3QKeyByZXR1cm4geDEgPD0g
eDIgJiYgeTEgPD0geTI7IH0KCmlubGluZSBpbnQgUVJlY3Q6OmxlZnQoKSBjb25zdAp7IHJldHVy
biB4MTsgfQoKaW5saW5lIGludCBRUmVjdDo6dG9wKCkgY29uc3QKeyByZXR1cm4geTE7IH0KCmlu
bGluZSBpbnQgUVJlY3Q6OnJpZ2h0KCkgY29uc3QKeyByZXR1cm4geDI7IH0KCmlubGluZSBpbnQg
UVJlY3Q6OmJvdHRvbSgpIGNvbnN0CnsgcmV0dXJuIHkyOyB9CgppbmxpbmUgUUNPT1JEICZRUmVj
dDo6ckxlZnQoKQp7IHJldHVybiB4MTsgfQoKaW5saW5lIFFDT09SRCAmIFFSZWN0OjpyVG9wKCkK
eyByZXR1cm4geTE7IH0KCmlubGluZSBRQ09PUkQgJiBRUmVjdDo6clJpZ2h0KCkKeyByZXR1cm4g
eDI7IH0KCmlubGluZSBRQ09PUkQgJiBRUmVjdDo6ckJvdHRvbSgpCnsgcmV0dXJuIHkyOyB9Cgpp
bmxpbmUgaW50IFFSZWN0Ojp4KCkgY29uc3QKeyByZXR1cm4geDE7IH0KCmlubGluZSBpbnQgUVJl
Y3Q6OnkoKSBjb25zdAp7IHJldHVybiB5MTsgfQoKaW5saW5lIHZvaWQgUVJlY3Q6OnNldExlZnQo
IGludCBwb3MgKQp7IHgxID0gKFFDT09SRClwb3M7IH0KCmlubGluZSB2b2lkIFFSZWN0OjpzZXRU
b3AoIGludCBwb3MgKQp7IHkxID0gKFFDT09SRClwb3M7IH0KCmlubGluZSB2b2lkIFFSZWN0Ojpz
ZXRSaWdodCggaW50IHBvcyApCnsgeDIgPSAoUUNPT1JEKXBvczsgfQoKaW5saW5lIHZvaWQgUVJl
Y3Q6OnNldEJvdHRvbSggaW50IHBvcyApCnsgeTIgPSAoUUNPT1JEKXBvczsgfQoKaW5saW5lIHZv
aWQgUVJlY3Q6OnNldFgoIGludCB4ICkKeyB4MSA9IChRQ09PUkQpeDsgfQoKaW5saW5lIHZvaWQg
UVJlY3Q6OnNldFkoIGludCB5ICkKeyB5MSA9IChRQ09PUkQpeTsgfQoKaW5saW5lIFFQb2ludCBR
UmVjdDo6dG9wTGVmdCgpIGNvbnN0CnsgcmV0dXJuIFFQb2ludCh4MSwgeTEpOyB9CgppbmxpbmUg
UVBvaW50IFFSZWN0Ojpib3R0b21SaWdodCgpIGNvbnN0CnsgcmV0dXJuIFFQb2ludCh4MiwgeTIp
OyB9CgppbmxpbmUgUVBvaW50IFFSZWN0Ojp0b3BSaWdodCgpIGNvbnN0CnsgcmV0dXJuIFFQb2lu
dCh4MiwgeTEpOyB9CgppbmxpbmUgUVBvaW50IFFSZWN0Ojpib3R0b21MZWZ0KCkgY29uc3QKeyBy
ZXR1cm4gUVBvaW50KHgxLCB5Mik7IH0KCmlubGluZSBRUG9pbnQgUVJlY3Q6OmNlbnRlcigpIGNv
bnN0CnsgcmV0dXJuIFFQb2ludCgoeDEreDIpLzIsICh5MSt5MikvMik7IH0KCmlubGluZSBpbnQg
UVJlY3Q6OndpZHRoKCkgY29uc3QKeyByZXR1cm4gIHgyIC0geDEgKyAxOyB9CgppbmxpbmUgaW50
IFFSZWN0OjpoZWlnaHQoKSBjb25zdAp7IHJldHVybiAgeTIgLSB5MSArIDE7IH0KCmlubGluZSBR
U2l6ZSBRUmVjdDo6c2l6ZSgpIGNvbnN0CnsgcmV0dXJuIFFTaXplKHgyLXgxKzEsIHkyLXkxKzEp
OyB9CgppbmxpbmUgYm9vbCBRUmVjdDo6Y29udGFpbnMoIGludCB4LCBpbnQgeSwgYm9vbCBwcm9w
ZXIgKSBjb25zdAp7CiAgICBpZiAoIHByb3BlciApCiAgICAgICAgcmV0dXJuIHggPiB4MSAmJiB4
IDwgeDIgJiYKICAgICAgICAgICAgICAgeSA+IHkxICYmIHkgPCB5MjsKICAgIGVsc2UKICAgICAg
ICByZXR1cm4geCA+PSB4MSAmJiB4IDw9IHgyICYmCiAgICAgICAgICAgICAgIHkgPj0geTEgJiYg
eSA8PSB5MjsKfQoKCiMgNDMgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xcmVnaW9uLmgiIDIKCgoK
CmNsYXNzICAgUVJlZ2lvbgp7CnB1YmxpYzoKICAgIGVudW0gUmVnaW9uVHlwZSB7IFJlY3Rhbmds
ZSwgRWxsaXBzZSB9OwoKICAgIFFSZWdpb24oKTsKICAgIFFSZWdpb24oIGludCB4LCBpbnQgeSwg
aW50IHcsIGludCBoLCBSZWdpb25UeXBlID0gUmVjdGFuZ2xlICk7CiAgICBRUmVnaW9uKCBjb25z
dCBRUmVjdCAmLCBSZWdpb25UeXBlID0gUmVjdGFuZ2xlICk7CiAgICBRUmVnaW9uKCBjb25zdCBR
UG9pbnRBcnJheSAmLCBib29sIHdpbmRpbmc9RkFMU0UgKTsKICAgIFFSZWdpb24oIGNvbnN0IFFS
ZWdpb24gJiApOwogICAgUVJlZ2lvbiggY29uc3QgUUJpdG1hcCAmICk7CiAgIH5RUmVnaW9uKCk7
CiAgICBRUmVnaW9uICZvcGVyYXRvcj0oIGNvbnN0IFFSZWdpb24gJiApOwoKICAgIGJvb2wgICAg
aXNOdWxsKCkgICBjb25zdDsKICAgIGJvb2wgICAgaXNFbXB0eSgpICBjb25zdDsKCiAgICBib29s
ICAgIGNvbnRhaW5zKCBjb25zdCBRUG9pbnQgJnAgKSBjb25zdDsKICAgIGJvb2wgICAgY29udGFp
bnMoIGNvbnN0IFFSZWN0ICZyICkJY29uc3Q7CgogICAgdm9pZCAgICB0cmFuc2xhdGUoIGludCBk
eCwgaW50IGR5ICk7CgogICAgUVJlZ2lvbiB1bml0ZSggY29uc3QgUVJlZ2lvbiAmICkJY29uc3Q7
CiAgICBRUmVnaW9uIGludGVyc2VjdCggY29uc3QgUVJlZ2lvbiAmKSBjb25zdDsKICAgIFFSZWdp
b24gc3VidHJhY3QoIGNvbnN0IFFSZWdpb24gJiApIGNvbnN0OwogICAgUVJlZ2lvbiBlb3IoIGNv
bnN0IFFSZWdpb24gJiApCWNvbnN0OwoKICAgIFFSZWN0ICAgYm91bmRpbmdSZWN0KCkgY29uc3Q7
CiAgICBRTWVtQXJyYXk8UVJlY3Q+IHJlY3RzKCkgY29uc3Q7CiAgICB2b2lkIHNldFJlY3RzKCBj
b25zdCBRUmVjdCAqLCBpbnQgKTsKCiAgICBjb25zdCBRUmVnaW9uIG9wZXJhdG9yfCggY29uc3Qg
UVJlZ2lvbiAmICkgY29uc3Q7CiAgICBjb25zdCBRUmVnaW9uIG9wZXJhdG9yKyggY29uc3QgUVJl
Z2lvbiAmICkgY29uc3Q7CiAgICBjb25zdCBRUmVnaW9uIG9wZXJhdG9yJiggY29uc3QgUVJlZ2lv
biAmICkgY29uc3Q7CiAgICBjb25zdCBRUmVnaW9uIG9wZXJhdG9yLSggY29uc3QgUVJlZ2lvbiAm
ICkgY29uc3Q7CiAgICBjb25zdCBRUmVnaW9uIG9wZXJhdG9yXiggY29uc3QgUVJlZ2lvbiAmICkg
Y29uc3Q7CiAgICBRUmVnaW9uJiBvcGVyYXRvcnw9KCBjb25zdCBRUmVnaW9uICYgKTsKICAgIFFS
ZWdpb24mIG9wZXJhdG9yKz0oIGNvbnN0IFFSZWdpb24gJiApOwogICAgUVJlZ2lvbiYgb3BlcmF0
b3ImPSggY29uc3QgUVJlZ2lvbiAmICk7CiAgICBRUmVnaW9uJiBvcGVyYXRvci09KCBjb25zdCBR
UmVnaW9uICYgKTsKICAgIFFSZWdpb24mIG9wZXJhdG9yXj0oIGNvbnN0IFFSZWdpb24gJiApOwoK
ICAgIGJvb2wgICAgb3BlcmF0b3I9PSggY29uc3QgUVJlZ2lvbiAmICkgIGNvbnN0OwogICAgYm9v
bCAgICBvcGVyYXRvciE9KCBjb25zdCBRUmVnaW9uICZyICkgY29uc3QKCQkJeyByZXR1cm4gIShv
cGVyYXRvcj09KHIpKTsgfQoKCgoKICAgIFJlZ2lvbiAgaGFuZGxlKCkgY29uc3QgeyByZXR1cm4g
ZGF0YS0+cmduOyB9CgoKCgoKCgoKICAgIGZyaWVuZCAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8
KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRUmVnaW9uICYgKTsKICAgIGZyaWVuZCAgIFFEYXRhU3Ry
ZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRUmVnaW9uICYgKTsKCnByaXZhdGU6CiAg
ICBRUmVnaW9uKCBib29sICk7CiAgICBRUmVnaW9uIGNvcHkoKSBjb25zdDsKICAgIHZvaWQgICAg
ZGV0YWNoKCk7CgoKCiAgICB2b2lkICAgIGV4ZWMoIGNvbnN0IFFCeXRlQXJyYXkgJiwgaW50IHZl
ciA9IDAgKTsKICAgIHN0cnVjdCBRUmVnaW9uRGF0YSA6IHB1YmxpYyBRU2hhcmVkIHsKCgoKCVFS
ZWN0IHJlY3Q7CglSZWdpb24gcmduOwoKCgoKCgoKCWJvb2wgICBpc19udWxsOwogICAgfSAqZGF0
YTsKCgoKCgoKCn07CgoKCgoKCgoKCgoKCgoKIAoKCgoKICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8
PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUVJlZ2lvbiAmICk7CiAgUURhdGFTdHJlYW0gJm9wZXJh
dG9yPj4oIFFEYXRhU3RyZWFtICYsIFFSZWdpb24gJiApOwoKCgoKIyA0MyAiL3Vzci9sb2NhbC9x
dC9pbmNsdWRlL3FldmVudC5oIiAyCgoKIyAxICIvdXNyL2xvY2FsL3F0L2luY2x1ZGUvcW1pbWUu
aCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNy
L2xvY2FsL3F0L2luY2x1ZGUvcW1hcC5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3FwYWlyLmgiIDEKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBU
MSwgY2xhc3MgVDI+CnN0cnVjdCBRUGFpcgp7CiAgICB0eXBlZGVmIFQxIGZpcnN0X3R5cGU7CiAg
ICB0eXBlZGVmIFQyIHNlY29uZF90eXBlOwoKICAgIFFQYWlyKCkKCTogZmlyc3QoIFQxKCkgKSwg
c2Vjb25kKCBUMigpICkKICAgIHt9CiAgICBRUGFpciggY29uc3QgVDEmIHQxLCBjb25zdCBUMiYg
dDIgKQoJOiBmaXJzdCggdDEgKSwgc2Vjb25kKCB0MiApCiAgICB7fQoKICAgIFQxIGZpcnN0Owog
ICAgVDIgc2Vjb25kOwp9OwoKdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KICBib29sIG9w
ZXJhdG9yPT0oIGNvbnN0IFFQYWlyPFQxLCBUMj4mIHgsIGNvbnN0IFFQYWlyPFQxLCBUMj4mIHkg
KQp7CiAgICByZXR1cm4geC5maXJzdCA9PSB5LmZpcnN0ICYmIHguc2Vjb25kID09IHkuc2Vjb25k
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyPgogIGJvb2wgb3BlcmF0b3I8KCBjb25z
dCBRUGFpcjxUMSwgVDI+JiB4LCBjb25zdCBRUGFpcjxUMSwgVDI+JiB5ICkKewogICAgIAogICAg
IAogICAgIAogICAgcmV0dXJuIHguZmlyc3QgPCB5LmZpcnN0IHx8CSggISggeS5maXJzdCA8IHgu
Zmlyc3QgKSAmJiB4LnNlY29uZCA8IHkuc2Vjb25kICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUMSwg
Y2xhc3MgVDI+CiAgUVBhaXI8VDEsIFQyPiBxTWFrZVBhaXIoIGNvbnN0IFQxJiB4LCBjb25zdCBU
MiYgeSApCnsKICAgIHJldHVybiBRUGFpcjxUMSwgVDI+KCB4LCB5ICk7Cn0KCgojIDQ1ICIvdXNy
L2xvY2FsL3F0L2luY2x1ZGUvcW1hcC5oIiAyCgoKIyAxICIvdXNyL2xvY2FsL3F0L2luY2x1ZGUv
cXZhbHVlbGlzdC5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8u
Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2l0ZXJhdG9yIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8y
Ljk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQyICIvdXNyL2xpYi9nY2MtbGliL2k1ODYt
bWFuZHJha2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCiMgMzIgIi91c3IvbGli
L2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9n
KystMy9pdGVyYXRvciIgMiAzCgoKCgoKCgoKCgogCiAKIAojIDQ4ICIvdXNyL2xvY2FsL3F0L2lu
Y2x1ZGUvcXZhbHVlbGlzdC5oIiAyCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFr
ZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9saXN0IiAxIDMKIAoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1h
bmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9saXN0Lmgi
IDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4Kc3RydWN0IF9MaXN0X25vZGUgewogIHR5cGVkZWYgdm9pZCogX1ZvaWRfcG9p
bnRlcjsKICBfVm9pZF9wb2ludGVyIF9NX25leHQ7CiAgX1ZvaWRfcG9pbnRlciBfTV9wcmV2Owog
IF9UcCBfTV9kYXRhOwp9OwoKdGVtcGxhdGU8Y2xhc3MgX1RwLCBjbGFzcyBfUmVmLCBjbGFzcyBf
UHRyPgpzdHJ1Y3QgX0xpc3RfaXRlcmF0b3IgewogIHR5cGVkZWYgX0xpc3RfaXRlcmF0b3I8X1Rw
LF9UcCYsX1RwKj4gICAgICAgICAgICAgaXRlcmF0b3I7CiAgdHlwZWRlZiBfTGlzdF9pdGVyYXRv
cjxfVHAsY29uc3QgX1RwJixjb25zdCBfVHAqPiBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIF9M
aXN0X2l0ZXJhdG9yPF9UcCxfUmVmLF9QdHI+ICAgICAgICAgICAgIF9TZWxmOwoKICB0eXBlZGVm
IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYg
X1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfUHRyIHBvaW50ZXI7CiAgdHlwZWRlZiBfUmVmIHJl
ZmVyZW5jZTsKICB0eXBlZGVmIF9MaXN0X25vZGU8X1RwPiBfTm9kZTsKICB0eXBlZGVmIHNpemVf
dCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICBfTm9k
ZSogX01fbm9kZTsKCiAgX0xpc3RfaXRlcmF0b3IoX05vZGUqIF9feCkgOiBfTV9ub2RlKF9feCkg
e30KICBfTGlzdF9pdGVyYXRvcigpIHt9CiAgX0xpc3RfaXRlcmF0b3IoY29uc3QgaXRlcmF0b3Im
IF9feCkgOiBfTV9ub2RlKF9feC5fTV9ub2RlKSB7fQoKICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
X1NlbGYmIF9feCkgY29uc3QgeyByZXR1cm4gX01fbm9kZSA9PSBfX3guX01fbm9kZTsgfQogIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBfU2VsZiYgX194KSBjb25zdCB7IHJldHVybiBfTV9ub2RlICE9
IF9feC5fTV9ub2RlOyB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICgq
X01fbm9kZSkuX01fZGF0YTsgfQoKCiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1
cm4gJihvcGVyYXRvciooKSk7IH0KCgogIF9TZWxmJiBvcGVyYXRvcisrKCkgeyAKICAgIF9NX25v
ZGUgPSAoX05vZGUqKShfTV9ub2RlLT5fTV9uZXh0KTsKICAgIHJldHVybiAqdGhpczsKICB9CiAg
X1NlbGYgb3BlcmF0b3IrKyhpbnQpIHsgCiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgKysq
dGhpczsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7IAogICAg
X01fbm9kZSA9IChfTm9kZSopKF9NX25vZGUtPl9NX3ByZXYpOwogICAgcmV0dXJuICp0aGlzOwog
IH0KICBfU2VsZiBvcGVyYXRvci0tKGludCkgeyAKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAg
ICAtLSp0aGlzOwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKCiMgMTIwICIvdXNyL2xpYi9nY2Mt
bGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv
c3RsX2xpc3QuaCIgMwoKCgogCiAKIAogCiAKIAoKCgogCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9BbGxvY2F0b3IsIGJvb2wgX0lzU3RhdGljPgpjbGFzcyBfTGlzdF9hbGxvY19iYXNlIHsK
cHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+
OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5
cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9Ob2RlX2FsbG9jYXRvcjsgfQoKICBf
TGlzdF9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX05vZGVfYWxsb2Nh
dG9yKF9fYSkge30KCnByb3RlY3RlZDoKICBfTGlzdF9ub2RlPF9UcD4qIF9NX2dldF9ub2RlKCkK
ICAgeyByZXR1cm4gX05vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKDEpOyB9CiAgdm9pZCBfTV9wdXRf
bm9kZShfTGlzdF9ub2RlPF9UcD4qIF9fcCkKICAgIHsgX05vZGVfYWxsb2NhdG9yLmRlYWxsb2Nh
dGUoX19wLCAxKTsgfQoKcHJvdGVjdGVkOgogIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X0xpc3Rf
bm9kZTxfVHA+LCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgICBfTm9kZV9h
bGxvY2F0b3I7CiAgX0xpc3Rfbm9kZTxfVHA+KiBfTV9ub2RlOwp9OwoKIAoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4KY2xhc3MgX0xpc3RfYWxsb2NfYmFzZTxfVHAsIF9B
bGxvY2F0b3IsIHRydWU+IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0
czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5
cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9j
YXRvcl90eXBlKCk7IH0KCiAgX0xpc3RfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYp
IHt9Cgpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9MaXN0X25v
ZGU8X1RwPiwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBlCiAgICAgICAgICBfQWxsb2NfdHlwZTsK
ICBfTGlzdF9ub2RlPF9UcD4qIF9NX2dldF9ub2RlKCkgeyByZXR1cm4gX0FsbG9jX3R5cGU6OmFs
bG9jYXRlKDEpOyB9CiAgdm9pZCBfTV9wdXRfbm9kZShfTGlzdF9ub2RlPF9UcD4qIF9fcCkgeyBf
QWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3AsIDEpOyB9Cgpwcm90ZWN0ZWQ6CiAgX0xpc3Rfbm9k
ZTxfVHA+KiBfTV9ub2RlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpj
bGFzcyBfTGlzdF9iYXNlIAogIDogcHVibGljIF9MaXN0X2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2Ms
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6
X1NfaW5zdGFuY2VsZXNzPgp7CnB1YmxpYzoKICB0eXBlZGVmIF9MaXN0X2FsbG9jX2Jhc2U8X1Rw
LCBfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBf
QWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsgCiAgdHlwZWRlZiB0eXBl
bmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogIF9MaXN0X2Jhc2Uo
Y29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkgOiBfQmFzZShfX2EpIHsKICAgIF9NX25vZGUgPSBf
TV9nZXRfbm9kZSgpOwogICAgX01fbm9kZS0+X01fbmV4dCA9IF9NX25vZGU7CiAgICBfTV9ub2Rl
LT5fTV9wcmV2ID0gX01fbm9kZTsKICB9CiAgfl9MaXN0X2Jhc2UoKSB7CiAgICBjbGVhcigpOwog
ICAgX01fcHV0X25vZGUoX01fbm9kZSk7CiAgfQoKICB2b2lkIGNsZWFyKCk7Cn07CgojIDIyOSAi
L3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL3N0bF9saXN0LmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2M+CnZvaWQgCl9MaXN0X2Jhc2U8X1RwLF9BbGxvYz46OmNsZWFyKCkgCnsKICBfTGlzdF9u
b2RlPF9UcD4qIF9fY3VyID0gKF9MaXN0X25vZGU8X1RwPiopIF9NX25vZGUtPl9NX25leHQ7CiAg
d2hpbGUgKF9fY3VyICE9IF9NX25vZGUpIHsKICAgIF9MaXN0X25vZGU8X1RwPiogX190bXAgPSBf
X2N1cjsKICAgIF9fY3VyID0gKF9MaXN0X25vZGU8X1RwPiopIF9fY3VyLT5fTV9uZXh0OwogICAg
ZGVzdHJveSgmX190bXAtPl9NX2RhdGEpOwogICAgX01fcHV0X25vZGUoX190bXApOwogIH0KICBf
TV9ub2RlLT5fTV9uZXh0ID0gX01fbm9kZTsKICBfTV9ub2RlLT5fTV9wcmV2ID0gX01fbm9kZTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPCBfVHAgPiAg
PgpjbGFzcyBsaXN0IDogcHJvdGVjdGVkIF9MaXN0X2Jhc2U8X1RwLCBfQWxsb2M+IHsKICB0eXBl
ZGVmIF9MaXN0X2Jhc2U8X1RwLCBfQWxsb2M+IF9CYXNlOwpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiB2
b2lkKiBfVm9pZF9wb2ludGVyOwoKcHVibGljOiAgICAgIAogIHR5cGVkZWYgX1RwIHZhbHVlX3R5
cGU7CiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgdmFsdWVf
dHlwZSogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICB0
eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9MaXN0
X25vZGU8X1RwPiBfTm9kZTsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBw
dHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxv
Y2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9y
KCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQoKcHVibGljOgogIHR5
cGVkZWYgX0xpc3RfaXRlcmF0b3I8X1RwLF9UcCYsX1RwKj4gICAgICAgICAgICAgaXRlcmF0b3I7
CiAgdHlwZWRlZiBfTGlzdF9pdGVyYXRvcjxfVHAsY29uc3QgX1RwJixjb25zdCBfVHAqPiBjb25z
dF9pdGVyYXRvcjsKCgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4g
Y29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0
b3I+ICAgICAgIHJldmVyc2VfaXRlcmF0b3I7CgoKCgoKCgoKCnByb3RlY3RlZDoKCiAgdXNpbmcg
X0Jhc2U6Ol9NX25vZGU7CiAgdXNpbmcgX0Jhc2U6Ol9NX3B1dF9ub2RlOwogIHVzaW5nIF9CYXNl
OjpfTV9nZXRfbm9kZTsKCgpwcm90ZWN0ZWQ6CiAgX05vZGUqIF9NX2NyZWF0ZV9ub2RlKGNvbnN0
IF9UcCYgX194KQogIHsKICAgIF9Ob2RlKiBfX3AgPSBfTV9nZXRfbm9kZSgpOwogICAgdHJ5ICB7
CiAgICAgIGNvbnN0cnVjdCgmX19wLT5fTV9kYXRhLCBfX3gpOwogICAgfQogICAgY2F0Y2goLi4u
KSB7ICBfTV9wdXRfbm9kZShfX3ApIDsgdGhyb3c7IH0gOwogICAgcmV0dXJuIF9fcDsKICB9Cgog
IF9Ob2RlKiBfTV9jcmVhdGVfbm9kZSgpCiAgewogICAgX05vZGUqIF9fcCA9IF9NX2dldF9ub2Rl
KCk7CiAgICB0cnkgIHsKICAgICAgY29uc3RydWN0KCZfX3AtPl9NX2RhdGEpOwogICAgfQogICAg
Y2F0Y2goLi4uKSB7ICBfTV9wdXRfbm9kZShfX3ApIDsgdGhyb3c7IH0gOwogICAgcmV0dXJuIF9f
cDsKICB9CgpwdWJsaWM6CiAgZXhwbGljaXQgbGlzdChjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19h
ID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFzZShfX2EpIHt9CgogIGl0ZXJhdG9yIGJlZ2luKCkg
ICAgICAgICAgICAgeyByZXR1cm4gKF9Ob2RlKikoX01fbm9kZS0+X01fbmV4dCk7IH0KICBjb25z
dF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIChfTm9kZSopKF9NX25vZGUtPl9NX25l
eHQpOyB9CgogIGl0ZXJhdG9yIGVuZCgpICAgICAgICAgICAgIHsgcmV0dXJuIF9NX25vZGU7IH0K
ICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV9ub2RlOyB9CgogIHJldmVy
c2VfaXRlcmF0b3IgcmJlZ2luKCkgCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgp
KTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgCiAgICB7IHJldHVy
biBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQoKICByZXZlcnNlX2l0ZXJhdG9yIHJl
bmQoKQogICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQogIGNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0
ZXJhdG9yKGJlZ2luKCkpOyB9CgogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBfTV9ub2Rl
LT5fTV9uZXh0ID09IF9NX25vZGU7IH0KICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsKICAgIHNp
emVfdHlwZSBfX3Jlc3VsdCA9IDA7CiAgICBkaXN0YW5jZShiZWdpbigpLCBlbmQoKSwgX19yZXN1
bHQpOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25z
dCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CgogIHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJu
ICpiZWdpbigpOyB9CiAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1cm4gKmJl
Z2luKCk7IH0KICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooLS1lbmQoKSk7IH0KICBjb25z
dF9yZWZlcmVuY2UgYmFjaygpIGNvbnN0IHsgcmV0dXJuICooLS1lbmQoKSk7IH0KCiAgdm9pZCBz
d2FwKGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3gpIHsgIDo6c3dhcChfTV9ub2RlLCBfX3guX01fbm9k
ZSk7IH0KCiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYg
X194KSB7CiAgICBfTm9kZSogX190bXAgPSBfTV9jcmVhdGVfbm9kZShfX3gpOwogICAgX190bXAt
Pl9NX25leHQgPSBfX3Bvc2l0aW9uLl9NX25vZGU7CiAgICBfX3RtcC0+X01fcHJldiA9IF9fcG9z
aXRpb24uX01fbm9kZS0+X01fcHJldjsKICAgICgoX05vZGUqKSAoX19wb3NpdGlvbi5fTV9ub2Rl
LT5fTV9wcmV2KSktPl9NX25leHQgPSBfX3RtcDsKICAgIF9fcG9zaXRpb24uX01fbm9kZS0+X01f
cHJldiA9IF9fdG1wOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciBpbnNlcnQoaXRl
cmF0b3IgX19wb3NpdGlvbikgeyByZXR1cm4gaW5zZXJ0KF9fcG9zaXRpb24sIF9UcCgpKTsgfQoK
ICAgCgogIHRlbXBsYXRlPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNo
KGl0ZXJhdG9yIF9fcG9zLCBfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX3RydWVfdHlwZSkgewogICAgaW5zZXJ0KF9fcG9zLCAoc2l6ZV90eXBl
KSBfX24sIChfVHApIF9feCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+
CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSk7CgogIHRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0
SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5
cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsK
ICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3BvcywgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwo
KSk7CiAgfQoKCgoKCgogIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19u
LCBjb25zdCBfVHAmIF9feCk7CiAKICB2b2lkIHB1c2hfZnJvbnQoY29uc3QgX1RwJiBfX3gpIHsg
aW5zZXJ0KGJlZ2luKCksIF9feCk7IH0KICB2b2lkIHB1c2hfZnJvbnQoKSB7aW5zZXJ0KGJlZ2lu
KCkpO30KICB2b2lkIHB1c2hfYmFjayhjb25zdCBfVHAmIF9feCkgeyBpbnNlcnQoZW5kKCksIF9f
eCk7IH0KICB2b2lkIHB1c2hfYmFjaygpIHtpbnNlcnQoZW5kKCkpO30KCiAgaXRlcmF0b3IgZXJh
c2UoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgX05vZGUqIF9fbmV4dF9ub2RlID0gKF9Ob2Rl
KikgKF9fcG9zaXRpb24uX01fbm9kZS0+X01fbmV4dCk7CiAgICBfTm9kZSogX19wcmV2X25vZGUg
PSAoX05vZGUqKSAoX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2KTsKICAgIF9fcHJldl9ub2Rl
LT5fTV9uZXh0ID0gX19uZXh0X25vZGU7CiAgICBfX25leHRfbm9kZS0+X01fcHJldiA9IF9fcHJl
dl9ub2RlOwogICAgZGVzdHJveSgmX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9kYXRhKTsKICAgIF9N
X3B1dF9ub2RlKF9fcG9zaXRpb24uX01fbm9kZSk7CiAgICByZXR1cm4gaXRlcmF0b3IoX19uZXh0
X25vZGUpOwogIH0KICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBf
X2xhc3QpOwogIHZvaWQgY2xlYXIoKSB7IF9CYXNlOjpjbGVhcigpOyB9CgogIHZvaWQgcmVzaXpl
KHNpemVfdHlwZSBfX25ld19zaXplLCBjb25zdCBfVHAmIF9feCk7CiAgdm9pZCByZXNpemUoc2l6
ZV90eXBlIF9fbmV3X3NpemUpIHsgcmVzaXplKF9fbmV3X3NpemUsIF9UcCgpKTsgfQoKICB2b2lk
IHBvcF9mcm9udCgpIHsgZXJhc2UoYmVnaW4oKSk7IH0KICB2b2lkIHBvcF9iYWNrKCkgeyAKICAg
IGl0ZXJhdG9yIF9fdG1wID0gZW5kKCk7CiAgICBlcmFzZSgtLV9fdG1wKTsKICB9CiAgbGlzdChz
aXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUsCiAgICAgICBjb25zdCBhbGxvY2F0b3Jf
dHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19hKQogICAgeyBpbnNl
cnQoYmVnaW4oKSwgX19uLCBfX3ZhbHVlKTsgfQogIGV4cGxpY2l0IGxpc3Qoc2l6ZV90eXBlIF9f
bikKICAgIDogX0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgaW5zZXJ0KGJlZ2luKCksIF9f
biwgX1RwKCkpOyB9CgoKCiAgIAogICAKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+
CiAgbGlzdChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAg
ICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDog
X0Jhc2UoX19hKQogICAgeyBpbnNlcnQoYmVnaW4oKSwgX19maXJzdCwgX19sYXN0KTsgfQoKIyA0
MzMgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4v
Li4vaW5jbHVkZS9nKystMy9zdGxfbGlzdC5oIiAzCgogIGxpc3QoY29uc3QgbGlzdDxfVHAsIF9B
bGxvYz4mIF9feCkgOiBfQmFzZShfX3guZ2V0X2FsbG9jYXRvcigpKQogICAgeyBpbnNlcnQoYmVn
aW4oKSwgX194LmJlZ2luKCksIF9feC5lbmQoKSk7IH0KCiAgfmxpc3QoKSB7IH0KCiAgbGlzdDxf
VHAsIF9BbGxvYz4mIG9wZXJhdG9yPShjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX194KTsKCnB1
YmxpYzoKICAgCiAgIAogICAKICAgCgogIHZvaWQgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0
IF9UcCYgX192YWwpOwoKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lk
IGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsK
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdy
YWwgX0ludGVncmFsOwogICAgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0lu
dGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01fYXNz
aWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQog
ICAgeyBhc3NpZ24oKHNpemVfdHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7IH0KCiAgdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0
ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2ZhbHNlX3R5cGUpOwoKCgpwcm90ZWN0ZWQ6CiAgdm9pZCB0cmFuc2ZlcihpdGVy
YXRvciBfX3Bvc2l0aW9uLCBpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsKICAg
IGlmIChfX3Bvc2l0aW9uICE9IF9fbGFzdCkgewogICAgICAgCiAgICAgICgoX05vZGUqKSAoX19s
YXN0Ll9NX25vZGUtPl9NX3ByZXYpKS0+X01fbmV4dCAgICAgPSBfX3Bvc2l0aW9uLl9NX25vZGU7
CiAgICAgICgoX05vZGUqKSAoX19maXJzdC5fTV9ub2RlLT5fTV9wcmV2KSktPl9NX25leHQgICAg
PSBfX2xhc3QuX01fbm9kZTsKICAgICAgKChfTm9kZSopIChfX3Bvc2l0aW9uLl9NX25vZGUtPl9N
X3ByZXYpKS0+X01fbmV4dCA9IF9fZmlyc3QuX01fbm9kZTsgCgogICAgICAgCiAgICAgIF9Ob2Rl
KiBfX3RtcCA9IChfTm9kZSopIChfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXYpOwogICAgICBf
X3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXYgPSBfX2xhc3QuX01fbm9kZS0+X01fcHJldjsKICAg
ICAgX19sYXN0Ll9NX25vZGUtPl9NX3ByZXYgICAgICA9IF9fZmlyc3QuX01fbm9kZS0+X01fcHJl
djsgCiAgICAgIF9fZmlyc3QuX01fbm9kZS0+X01fcHJldiAgICA9IF9fdG1wOwogICAgfQogIH0K
CnB1YmxpYzoKICB2b2lkIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiBfX3gpIHsK
ICAgIGlmICghX194LmVtcHR5KCkpIAogICAgICB0cmFuc2ZlcihfX3Bvc2l0aW9uLCBfX3guYmVn
aW4oKSwgX194LmVuZCgpKTsKICB9CiAgdm9pZCBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwg
bGlzdCYsIGl0ZXJhdG9yIF9faSkgewogICAgaXRlcmF0b3IgX19qID0gX19pOwogICAgKytfX2o7
CiAgICBpZiAoX19wb3NpdGlvbiA9PSBfX2kgfHwgX19wb3NpdGlvbiA9PSBfX2opIHJldHVybjsK
ICAgIHRyYW5zZmVyKF9fcG9zaXRpb24sIF9faSwgX19qKTsKICB9CiAgdm9pZCBzcGxpY2UoaXRl
cmF0b3IgX19wb3NpdGlvbiwgbGlzdCYsIGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFz
dCkgewogICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSAKICAgICAgdHJhbnNmZXIoX19wb3NpdGlv
biwgX19maXJzdCwgX19sYXN0KTsKICB9CiAgdm9pZCByZW1vdmUoY29uc3QgX1RwJiBfX3ZhbHVl
KTsKICB2b2lkIHVuaXF1ZSgpOwogIHZvaWQgbWVyZ2UobGlzdCYgX194KTsKICB2b2lkIHJldmVy
c2UoKTsKICB2b2lkIHNvcnQoKTsKCgogIHRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPiB2b2lk
IHJlbW92ZV9pZihfUHJlZGljYXRlKTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX0JpbmFyeVByZWRpY2F0
ZT4gdm9pZCB1bmlxdWUoX0JpbmFyeVByZWRpY2F0ZSk7CiAgdGVtcGxhdGUgPGNsYXNzIF9TdHJp
Y3RXZWFrT3JkZXJpbmc+IHZvaWQgbWVyZ2UobGlzdCYsIF9TdHJpY3RXZWFrT3JkZXJpbmcpOwog
IHRlbXBsYXRlIDxjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5nPiB2b2lkIHNvcnQoX1N0cmljdFdl
YWtPcmRlcmluZyk7CgoKICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IDw+ICAoCiAgICBjb25zdCBs
aXN0JiBfX3gsIGNvbnN0IGxpc3QmIF9feSk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYg
X194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feSkK
ewogIHR5cGVkZWYgdHlwZW5hbWUgbGlzdDxfVHAsX0FsbG9jPjo6X05vZGUgX05vZGU7CiAgX05v
ZGUqIF9fZTEgPSBfX3guX01fbm9kZTsKICBfTm9kZSogX19lMiA9IF9feS5fTV9ub2RlOwogIF9O
b2RlKiBfX24xID0gKF9Ob2RlKikgX19lMS0+X01fbmV4dDsKICBfTm9kZSogX19uMiA9IChfTm9k
ZSopIF9fZTItPl9NX25leHQ7CiAgZm9yICggOyBfX24xICE9IF9fZTEgJiYgX19uMiAhPSBfX2Uy
IDsKICAgICAgICAgIF9fbjEgPSAoX05vZGUqKSBfX24xLT5fTV9uZXh0LCBfX24yID0gKF9Ob2Rl
KikgX19uMi0+X01fbmV4dCkKICAgIGlmIChfX24xLT5fTV9kYXRhICE9IF9fbjItPl9NX2RhdGEp
CiAgICAgIHJldHVybiBmYWxzZTsKICByZXR1cm4gX19uMSA9PSBfX2UxICYmIF9fbjIgPT0gX19l
MjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVy
YXRvcjwoY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195KQp7CiAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9j
b21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgCnN3YXAobGlzdDxfVHAsIF9BbGxvYz4mIF9feCwg
bGlzdDxfVHAsIF9BbGxvYz4mIF9feSkKewogIF9feC5zd2FwKF9feSk7Cn0KCgoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgp2
b2lkIApsaXN0PF9UcCwgX0FsbG9jPjo6X01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9z
aXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2ZhbHNlX3R5cGUpCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19f
Zmlyc3QpCiAgICBpbnNlcnQoX19wb3NpdGlvbiwgKl9fZmlyc3QpOwp9CgojIDU4MiAiL3Vzci9s
aWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL3N0bF9saXN0LmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+
CnZvaWQgCmxpc3Q8X1RwLCBfQWxsb2M+OjppbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6
ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpCnsKICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uKQog
ICAgaW5zZXJ0KF9fcG9zaXRpb24sIF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvYz4KbGlzdDxfVHAsX0FsbG9jPjo6aXRlcmF0b3IgbGlzdDxfVHAsIF9BbGxvYz46OmVy
YXNlKGl0ZXJhdG9yIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaXRlcmF0b3IgX19sYXN0KQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0g
X19sYXN0KQogICAgZXJhc2UoX19maXJzdCsrKTsKICByZXR1cm4gX19sYXN0Owp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OnJlc2l6
ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgY29uc3QgX1RwJiBfX3gpCnsKICBpdGVyYXRvciBfX2kg
PSBiZWdpbigpOwogIHNpemVfdHlwZSBfX2xlbiA9IDA7CiAgZm9yICggOyBfX2kgIT0gZW5kKCkg
JiYgX19sZW4gPCBfX25ld19zaXplOyArK19faSwgKytfX2xlbikKICAgIDsKICBpZiAoX19sZW4g
PT0gX19uZXdfc2l6ZSkKICAgIGVyYXNlKF9faSwgZW5kKCkpOwogIGVsc2UgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIF9fbGVuLCBfX3gp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+Cmxpc3Q8X1RwLCBfQWxsb2M+
JiBsaXN0PF9UcCwgX0FsbG9jPjo6b3BlcmF0b3I9KGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBf
X3gpCnsKICBpZiAodGhpcyAhPSAmX194KSB7CiAgICBpdGVyYXRvciBfX2ZpcnN0MSA9IGJlZ2lu
KCk7CiAgICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CiAgICBjb25zdF9pdGVyYXRvciBfX2Zp
cnN0MiA9IF9feC5iZWdpbigpOwogICAgY29uc3RfaXRlcmF0b3IgX19sYXN0MiA9IF9feC5lbmQo
KTsKICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIp
IAogICAgICAqX19maXJzdDErKyA9ICpfX2ZpcnN0MisrOwogICAgaWYgKF9fZmlyc3QyID09IF9f
bGFzdDIpCiAgICAgIGVyYXNlKF9fZmlyc3QxLCBfX2xhc3QxKTsKICAgIGVsc2UKICAgICAgaW5z
ZXJ0KF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICB9CiAgcmV0dXJuICp0aGlzOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgbGlzdDxfVHAsIF9BbGxvYz46
OmFzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKSB7CiAgaXRlcmF0b3IgX19p
ID0gYmVnaW4oKTsKICBmb3IgKCA7IF9faSAhPSBlbmQoKSAmJiBfX24gPiAwOyArK19faSwgLS1f
X24pCiAgICAqX19pID0gX192YWw7CiAgaWYgKF9fbiA+IDApCiAgICBpbnNlcnQoZW5kKCksIF9f
biwgX192YWwpOwogIGVsc2UKICAgIGVyYXNlKF9faSwgZW5kKCkpOwp9CgoKCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CnZvaWQK
bGlzdDxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyIF9fZmlyc3Qy
LCBfSW5wdXRJdGVyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19mYWxzZV90eXBlKQp7CiAgaXRlcmF0b3IgX19maXJzdDEgPSBiZWdpbigpOwogIGl0ZXJh
dG9yIF9fbGFzdDEgPSBlbmQoKTsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19m
aXJzdDIgIT0gX19sYXN0MjsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgICpfX2ZpcnN0MSA9
ICpfX2ZpcnN0MjsKICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgIGVyYXNlKF9fZmlyc3Qx
LCBfX2xhc3QxKTsKICBlbHNlCiAgICBpbnNlcnQoX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIp
Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBsaXN0PF9UcCwg
X0FsbG9jPjo6cmVtb3ZlKGNvbnN0IF9UcCYgX192YWx1ZSkKewogIGl0ZXJhdG9yIF9fZmlyc3Qg
PSBiZWdpbigpOwogIGl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOwogIHdoaWxlIChfX2ZpcnN0ICE9
IF9fbGFzdCkgewogICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDsKICAgICsrX19uZXh0Owog
ICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsdWUpIGVyYXNlKF9fZmlyc3QpOwogICAgX19maXJzdCA9
IF9fbmV4dDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBs
aXN0PF9UcCwgX0FsbG9jPjo6dW5pcXVlKCkKewogIGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigp
OwogIGl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOwogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0
dXJuOwogIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CiAgd2hpbGUgKCsrX19uZXh0ICE9IF9f
bGFzdCkgewogICAgaWYgKCpfX2ZpcnN0ID09ICpfX25leHQpCiAgICAgIGVyYXNlKF9fbmV4dCk7
CiAgICBlbHNlCiAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICBfX25leHQgPSBfX2ZpcnN0Owog
IH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGxpc3Q8X1RwLCBf
QWxsb2M+OjptZXJnZShsaXN0PF9UcCwgX0FsbG9jPiYgX194KQp7CiAgaXRlcmF0b3IgX19maXJz
dDEgPSBiZWdpbigpOwogIGl0ZXJhdG9yIF9fbGFzdDEgPSBlbmQoKTsKICBpdGVyYXRvciBfX2Zp
cnN0MiA9IF9feC5iZWdpbigpOwogIGl0ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5kKCk7CiAgd2hp
bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmICgq
X19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDI7
CiAgICAgIHRyYW5zZmVyKF9fZmlyc3QxLCBfX2ZpcnN0MiwgKytfX25leHQpOwogICAgICBfX2Zp
cnN0MiA9IF9fbmV4dDsKICAgIH0KICAgIGVsc2UKICAgICAgKytfX2ZpcnN0MTsKICBpZiAoX19m
aXJzdDIgIT0gX19sYXN0MikgdHJhbnNmZXIoX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgbGlzdDxfVHAsIF9BbGxv
Yz46OnJldmVyc2UoKSAKewogICAKICBpZiAoX01fbm9kZS0+X01fbmV4dCAhPSBfTV9ub2RlICYm
CiAgICAgICgoX05vZGUqKSAoX01fbm9kZS0+X01fbmV4dCkpLT5fTV9uZXh0ICE9IF9NX25vZGUp
IHsKICAgIGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigpOwogICAgKytfX2ZpcnN0OwogICAgd2hp
bGUgKF9fZmlyc3QgIT0gZW5kKCkpIHsKICAgICAgaXRlcmF0b3IgX19vbGQgPSBfX2ZpcnN0Owog
ICAgICArK19fZmlyc3Q7CiAgICAgIHRyYW5zZmVyKGJlZ2luKCksIF9fb2xkLCBfX2ZpcnN0KTsK
ICAgIH0KICB9Cn0gICAgCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQg
bGlzdDxfVHAsIF9BbGxvYz46OnNvcnQoKQp7CiAgIAogIGlmIChfTV9ub2RlLT5fTV9uZXh0ICE9
IF9NX25vZGUgJiYKICAgICAgKChfTm9kZSopIChfTV9ub2RlLT5fTV9uZXh0KSktPl9NX25leHQg
IT0gX01fbm9kZSkgewogICAgbGlzdDxfVHAsIF9BbGxvYz4gX19jYXJyeTsKICAgIGxpc3Q8X1Rw
LCBfQWxsb2M+IF9fY291bnRlcls2NF07CiAgICBpbnQgX19maWxsID0gMDsKICAgIHdoaWxlICgh
ZW1wdHkoKSkgewogICAgICBfX2NhcnJ5LnNwbGljZShfX2NhcnJ5LmJlZ2luKCksICp0aGlzLCBi
ZWdpbigpKTsKICAgICAgaW50IF9faSA9IDA7CiAgICAgIHdoaWxlKF9faSA8IF9fZmlsbCAmJiAh
X19jb3VudGVyW19faV0uZW1wdHkoKSkgewogICAgICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9f
Y2FycnkpOwogICAgICAgIF9fY2Fycnkuc3dhcChfX2NvdW50ZXJbX19pKytdKTsKICAgICAgfQog
ICAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19faV0pOyAgICAgICAgIAogICAgICBpZiAoX19p
ID09IF9fZmlsbCkgKytfX2ZpbGw7CiAgICB9IAoKICAgIGZvciAoaW50IF9faSA9IDE7IF9faSA8
IF9fZmlsbDsgKytfX2kpCiAgICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY291bnRlcltfX2kt
MV0pOwogICAgc3dhcChfX2NvdW50ZXJbX19maWxsLTFdKTsKICB9Cn0KCgoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4Kdm9pZCBs
aXN0PF9UcCwgX0FsbG9jPjo6cmVtb3ZlX2lmKF9QcmVkaWNhdGUgX19wcmVkKQp7CiAgaXRlcmF0
b3IgX19maXJzdCA9IGJlZ2luKCk7CiAgaXRlcmF0b3IgX19sYXN0ID0gZW5kKCk7CiAgd2hpbGUg
KF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OwogICAg
KytfX25leHQ7CiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgZXJhc2UoX19maXJzdCk7CiAgICBf
X2ZpcnN0ID0gX19uZXh0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j
PiB0ZW1wbGF0ZSA8Y2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9j
Pjo6dW5pcXVlKF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKewogIGl0ZXJhdG9yIF9f
Zmlyc3QgPSBiZWdpbigpOwogIGl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOwogIGlmIChfX2ZpcnN0
ID09IF9fbGFzdCkgcmV0dXJuOwogIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CiAgd2hpbGUg
KCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsICpf
X25leHQpKQogICAgICBlcmFzZShfX25leHQpOwogICAgZWxzZQogICAgICBfX2ZpcnN0ID0gX19u
ZXh0OwogICAgX19uZXh0ID0gX19maXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9TdHJpY3RXZWFrT3JkZXJpbmc+CnZvaWQgbGlz
dDxfVHAsIF9BbGxvYz46Om1lcmdlKGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3gsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQp7CiAgaXRlcmF0
b3IgX19maXJzdDEgPSBiZWdpbigpOwogIGl0ZXJhdG9yIF9fbGFzdDEgPSBlbmQoKTsKICBpdGVy
YXRvciBfX2ZpcnN0MiA9IF9feC5iZWdpbigpOwogIGl0ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5k
KCk7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikK
ICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgIGl0ZXJhdG9yIF9f
bmV4dCA9IF9fZmlyc3QyOwogICAgICB0cmFuc2ZlcihfX2ZpcnN0MSwgX19maXJzdDIsICsrX19u
ZXh0KTsKICAgICAgX19maXJzdDIgPSBfX25leHQ7CiAgICB9CiAgICBlbHNlCiAgICAgICsrX19m
aXJzdDE7CiAgaWYgKF9fZmlyc3QyICE9IF9fbGFzdDIpIHRyYW5zZmVyKF9fbGFzdDEsIF9fZmly
c3QyLCBfX2xhc3QyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1w
bGF0ZSA8Y2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6
c29ydChfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCkKewogICAKICBpZiAoX01fbm9kZS0+X01f
bmV4dCAhPSBfTV9ub2RlICYmCiAgICAgICgoX05vZGUqKSAoX01fbm9kZS0+X01fbmV4dCkpLT5f
TV9uZXh0ICE9IF9NX25vZGUpIHsKICAgIGxpc3Q8X1RwLCBfQWxsb2M+IF9fY2Fycnk7CiAgICBs
aXN0PF9UcCwgX0FsbG9jPiBfX2NvdW50ZXJbNjRdOwogICAgaW50IF9fZmlsbCA9IDA7CiAgICB3
aGlsZSAoIWVtcHR5KCkpIHsKICAgICAgX19jYXJyeS5zcGxpY2UoX19jYXJyeS5iZWdpbigpLCAq
dGhpcywgYmVnaW4oKSk7CiAgICAgIGludCBfX2kgPSAwOwogICAgICB3aGlsZShfX2kgPCBfX2Zp
bGwgJiYgIV9fY291bnRlcltfX2ldLmVtcHR5KCkpIHsKICAgICAgICBfX2NvdW50ZXJbX19pXS5t
ZXJnZShfX2NhcnJ5LCBfX2NvbXApOwogICAgICAgIF9fY2Fycnkuc3dhcChfX2NvdW50ZXJbX19p
KytdKTsKICAgICAgfQogICAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19faV0pOyAgICAgICAg
IAogICAgICBpZiAoX19pID09IF9fZmlsbCkgKytfX2ZpbGw7CiAgICB9IAoKICAgIGZvciAoaW50
IF9faSA9IDE7IF9faSA8IF9fZmlsbDsgKytfX2kpIAogICAgICBfX2NvdW50ZXJbX19pXS5tZXJn
ZShfX2NvdW50ZXJbX19pLTFdLCBfX2NvbXApOwogICAgc3dhcChfX2NvdW50ZXJbX19maWxsLTFd
KTsKICB9Cn0KCgoKCgoKCgogIAoKCgogCiAKIAojIDM0ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYt
bWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbGlzdCIgMiAz
CgoKCgogCiAKIAojIDQ5ICIvdXNyL2xvY2FsL3F0L2luY2x1ZGUvcXZhbHVlbGlzdC5oIiAyCgoK
CiAKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgUVZhbHVlTGlzdE5vZGUKewpwdWJsaWM6
CiAgICBRVmFsdWVMaXN0Tm9kZSggY29uc3QgVCYgdCApIDogZGF0YSggdCApIHsgfQogICAgUVZh
bHVlTGlzdE5vZGUoKSB7IH0KCgoKCgogICAgUVZhbHVlTGlzdE5vZGU8VD4qIG5leHQ7CiAgICBR
VmFsdWVMaXN0Tm9kZTxUPiogcHJldjsKICAgIFQgZGF0YTsKfTsKCnRlbXBsYXRlPGNsYXNzIFQ+
CmNsYXNzIFFWYWx1ZUxpc3RJdGVyYXRvcgp7CiBwdWJsaWM6CiAgICAgCgoKICAgIHR5cGVkZWYg
UVZhbHVlTGlzdE5vZGU8VD4qIE5vZGVQdHI7CgogICAgdHlwZWRlZiBzdGQ6OmJpZGlyZWN0aW9u
YWxfaXRlcmF0b3JfdGFnICBpdGVyYXRvcl9jYXRlZ29yeTsKCiAgICB0eXBlZGVmIFQgICAgICAg
IHZhbHVlX3R5cGU7CiAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CgogICAgdHlwZWRlZiBw
dHJkaWZmX3QgIGRpZmZlcmVuY2VfdHlwZTsKCgoKICAgIHR5cGVkZWYgVCogICBwb2ludGVyOwog
ICAgdHlwZWRlZiBUJiByZWZlcmVuY2U7CgogICAgIAoKCiAgICBOb2RlUHRyIG5vZGU7CgogICAg
IAoKCiAgICBRVmFsdWVMaXN0SXRlcmF0b3IoKSA6IG5vZGUoIDAgKSB7fQogICAgUVZhbHVlTGlz
dEl0ZXJhdG9yKCBOb2RlUHRyIHAgKSA6IG5vZGUoIHAgKSB7fQogICAgUVZhbHVlTGlzdEl0ZXJh
dG9yKCBjb25zdCBRVmFsdWVMaXN0SXRlcmF0b3I8VD4mIGl0ICkgOiBub2RlKCBpdC5ub2RlICkg
e30KCiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFWYWx1ZUxpc3RJdGVyYXRvcjxUPiYgaXQg
KSBjb25zdCB7IHJldHVybiBub2RlID09IGl0Lm5vZGU7IH0KICAgIGJvb2wgb3BlcmF0b3IhPSgg
Y29uc3QgUVZhbHVlTGlzdEl0ZXJhdG9yPFQ+JiBpdCApIGNvbnN0IHsgcmV0dXJuIG5vZGUgIT0g
aXQubm9kZTsgfQogICAgY29uc3QgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gbm9kZS0+
ZGF0YTsgfQogICAgVCYgb3BlcmF0b3IqKCkgeyByZXR1cm4gbm9kZS0+ZGF0YTsgfQogICAgIAog
ICAgIAoKICAgIFFWYWx1ZUxpc3RJdGVyYXRvcjxUPiYgb3BlcmF0b3IrKygpIHsKCW5vZGUgPSBu
b2RlLT5uZXh0OwoJcmV0dXJuICp0aGlzOwogICAgfQoKICAgIFFWYWx1ZUxpc3RJdGVyYXRvcjxU
PiBvcGVyYXRvcisrKGludCkgewoJUVZhbHVlTGlzdEl0ZXJhdG9yPFQ+IHRtcCA9ICp0aGlzOwoJ
bm9kZSA9IG5vZGUtPm5leHQ7CglyZXR1cm4gdG1wOwogICAgfQoKICAgIFFWYWx1ZUxpc3RJdGVy
YXRvcjxUPiYgb3BlcmF0b3ItLSgpIHsKCW5vZGUgPSBub2RlLT5wcmV2OwoJcmV0dXJuICp0aGlz
OwogICAgfQoKICAgIFFWYWx1ZUxpc3RJdGVyYXRvcjxUPiBvcGVyYXRvci0tKGludCkgewoJUVZh
bHVlTGlzdEl0ZXJhdG9yPFQ+IHRtcCA9ICp0aGlzOwoJbm9kZSA9IG5vZGUtPnByZXY7CglyZXR1
cm4gdG1wOwogICAgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgVD4KY2xhc3MgUVZhbHVlTGlzdENvbnN0
SXRlcmF0b3IKewogcHVibGljOgogICAgIAoKCiAgICB0eXBlZGVmIFFWYWx1ZUxpc3ROb2RlPFQ+
KiBOb2RlUHRyOwoKICAgIHR5cGVkZWYgc3RkOjpiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyAg
aXRlcmF0b3JfY2F0ZWdvcnk7CgogICAgdHlwZWRlZiBUICAgICAgICB2YWx1ZV90eXBlOwogICAg
dHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwoKICAgIHR5cGVkZWYgcHRyZGlmZl90ICBkaWZmZXJl
bmNlX3R5cGU7CgoKCiAgICB0eXBlZGVmIGNvbnN0IFQqICAgcG9pbnRlcjsKICAgIHR5cGVkZWYg
Y29uc3QgVCYgcmVmZXJlbmNlOwoKICAgICAKCgogICAgTm9kZVB0ciBub2RlOwoKICAgICAKCgog
ICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3IoKSA6IG5vZGUoIDAgKSB7fQogICAgUVZhbHVlTGlz
dENvbnN0SXRlcmF0b3IoIE5vZGVQdHIgcCApIDogbm9kZSggcCApIHt9CiAgICBRVmFsdWVMaXN0
Q29uc3RJdGVyYXRvciggY29uc3QgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8VD4mIGl0ICkgOiBu
b2RlKCBpdC5ub2RlICkge30KICAgIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yKCBjb25zdCBRVmFs
dWVMaXN0SXRlcmF0b3I8VD4mIGl0ICkgOiBub2RlKCBpdC5ub2RlICkge30KCiAgICBib29sIG9w
ZXJhdG9yPT0oIGNvbnN0IFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFQ+JiBpdCApIGNvbnN0IHsg
cmV0dXJuIG5vZGUgPT0gaXQubm9kZTsgfQogICAgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRVmFs
dWVMaXN0Q29uc3RJdGVyYXRvcjxUPiYgaXQgKSBjb25zdCB7IHJldHVybiBub2RlICE9IGl0Lm5v
ZGU7IH0KICAgIGNvbnN0IFQmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG5vZGUtPmRhdGE7
IH0KICAgICAKICAgICAKCiAgICBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxUPiYgb3BlcmF0b3Ir
KygpIHsKCW5vZGUgPSBub2RlLT5uZXh0OwoJcmV0dXJuICp0aGlzOwogICAgfQoKICAgIFFWYWx1
ZUxpc3RDb25zdEl0ZXJhdG9yPFQ+IG9wZXJhdG9yKysoaW50KSB7CglRVmFsdWVMaXN0Q29uc3RJ
dGVyYXRvcjxUPiB0bXAgPSAqdGhpczsKCW5vZGUgPSBub2RlLT5uZXh0OwoJcmV0dXJuIHRtcDsK
ICAgIH0KCiAgICBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxUPiYgb3BlcmF0b3ItLSgpIHsKCW5v
ZGUgPSBub2RlLT5wcmV2OwoJcmV0dXJuICp0aGlzOwogICAgfQoKICAgIFFWYWx1ZUxpc3RDb25z
dEl0ZXJhdG9yPFQ+IG9wZXJhdG9yLS0oaW50KSB7CglRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxU
PiB0bXAgPSAqdGhpczsKCW5vZGUgPSBub2RlLT5wcmV2OwoJcmV0dXJuIHRtcDsKICAgIH0KfTsK
CnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBRVmFsdWVMaXN0UHJpdmF0ZSAKICAgIDogcHVibGlj
IFFTaGFyZWQKewpwdWJsaWM6CiAgICAgCgoKICAgIHR5cGVkZWYgUVZhbHVlTGlzdEl0ZXJhdG9y
PFQ+IEl0ZXJhdG9yOwogICAgdHlwZWRlZiBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxUPiBDb25z
dEl0ZXJhdG9yOwogICAgdHlwZWRlZiBRVmFsdWVMaXN0Tm9kZTxUPiBOb2RlOwogICAgdHlwZWRl
ZiBRVmFsdWVMaXN0Tm9kZTxUPiogTm9kZVB0cjsKICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlw
ZTsKCiAgICAgCgoKICAgIFFWYWx1ZUxpc3RQcml2YXRlKCk7CiAgICBRVmFsdWVMaXN0UHJpdmF0
ZSggY29uc3QgUVZhbHVlTGlzdFByaXZhdGU8VD4mIF9wICk7CgogICAgdm9pZCBkZXJlZkFuZERl
bGV0ZSgpICAKICAgIHsKCWlmICggZGVyZWYoKSApCgkgICAgZGVsZXRlIHRoaXM7CiAgICB9CgoK
CgoKICAgIH5RVmFsdWVMaXN0UHJpdmF0ZSgpOwoKICAgIEl0ZXJhdG9yIGluc2VydCggSXRlcmF0
b3IgaXQsIGNvbnN0IFQmIHggKTsKICAgIEl0ZXJhdG9yIHJlbW92ZSggSXRlcmF0b3IgaXQgKTsK
ICAgIE5vZGVQdHIgZmluZCggTm9kZVB0ciBzdGFydCwgY29uc3QgVCYgeCApIGNvbnN0OwogICAg
aW50IGZpbmRJbmRleCggTm9kZVB0ciBzdGFydCwgY29uc3QgVCYgeCApIGNvbnN0OwogICAgdWlu
dCBjb250YWlucyggY29uc3QgVCYgeCApIGNvbnN0OwogICAgdWludCByZW1vdmUoIGNvbnN0IFQm
IHggKTsKICAgIE5vZGVQdHIgYXQoIHNpemVfdHlwZSBpICkgY29uc3Q7CiAgICB2b2lkIGNsZWFy
KCk7CgogICAgTm9kZVB0ciBub2RlOwogICAgc2l6ZV90eXBlIG5vZGVzOwp9OwoKdGVtcGxhdGUg
PGNsYXNzIFQ+CiAgUVZhbHVlTGlzdFByaXZhdGU8VD46OlFWYWx1ZUxpc3RQcml2YXRlKCkKewog
ICAgbm9kZSA9IG5ldyBOb2RlOyBub2RlLT5uZXh0ID0gbm9kZS0+cHJldiA9IG5vZGU7IG5vZGVz
ID0gMDsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CiAgUVZhbHVlTGlzdFByaXZhdGU8VD46OlFWYWx1
ZUxpc3RQcml2YXRlKCBjb25zdCBRVmFsdWVMaXN0UHJpdmF0ZTxUPiYgX3AgKQogICAgOiBRU2hh
cmVkKCkKewogICAgbm9kZSA9IG5ldyBOb2RlOyBub2RlLT5uZXh0ID0gbm9kZS0+cHJldiA9IG5v
ZGU7IG5vZGVzID0gMDsKICAgIEl0ZXJhdG9yIGIoIF9wLm5vZGUtPm5leHQgKTsKICAgIEl0ZXJh
dG9yIGUoIF9wLm5vZGUgKTsKICAgIEl0ZXJhdG9yIGkoIG5vZGUgKTsKICAgIHdoaWxlKCBiICE9
IGUgKQoJaW5zZXJ0KCBpLCAqYisrICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgogIFFWYWx1ZUxp
c3RQcml2YXRlPFQ+Ojp+UVZhbHVlTGlzdFByaXZhdGUoKSB7CiAgICBOb2RlUHRyIHAgPSBub2Rl
LT5uZXh0OwogICAgd2hpbGUoIHAgIT0gbm9kZSApIHsKCU5vZGVQdHIgeCA9IHAtPm5leHQ7Cglk
ZWxldGUgcDsKCXAgPSB4OwogICAgfQogICAgZGVsZXRlIG5vZGU7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBUPgogIHR5cGVuYW1lICBRVmFsdWVMaXN0UHJpdmF0ZTxUPjo6SXRlcmF0b3IgUVZhbHVlTGlz
dFByaXZhdGU8VD46Omluc2VydCggdHlwZW5hbWUgIFFWYWx1ZUxpc3RQcml2YXRlPFQ+OjpJdGVy
YXRvciBpdCwgY29uc3QgVCYgeCApCnsKICAgIE5vZGVQdHIgcCA9IG5ldyBOb2RlKCB4ICk7CiAg
ICBwLT5uZXh0ID0gaXQubm9kZTsKICAgIHAtPnByZXYgPSBpdC5ub2RlLT5wcmV2OwogICAgaXQu
bm9kZS0+cHJldi0+bmV4dCA9IHA7CiAgICBpdC5ub2RlLT5wcmV2ID0gcDsKICAgIG5vZGVzKys7
CiAgICByZXR1cm4gcDsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CiAgdHlwZW5hbWUgIFFWYWx1ZUxp
c3RQcml2YXRlPFQ+OjpJdGVyYXRvciBRVmFsdWVMaXN0UHJpdmF0ZTxUPjo6cmVtb3ZlKCB0eXBl
bmFtZSAgUVZhbHVlTGlzdFByaXZhdGU8VD46Okl0ZXJhdG9yIGl0ICkKewogICAgKCggIGl0Lm5v
ZGUgIT0gbm9kZSAgKSA/ICh2b2lkKTAgOiBxV2FybmluZygiQVNTRVJUOiBcIiVzXCIgaW4gJXMg
KCVkKSIsIml0Lm5vZGUgIT0gbm9kZSIsIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xdmFsdWVsaXN0
LmgiLDI4OSkpIDsKICAgIE5vZGVQdHIgbmV4dCA9IGl0Lm5vZGUtPm5leHQ7CiAgICBOb2RlUHRy
IHByZXYgPSBpdC5ub2RlLT5wcmV2OwogICAgcHJldi0+bmV4dCA9IG5leHQ7CiAgICBuZXh0LT5w
cmV2ID0gcHJldjsKICAgIGRlbGV0ZSBpdC5ub2RlOwogICAgbm9kZXMtLTsKICAgIHJldHVybiBJ
dGVyYXRvciggbmV4dCApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KICB0eXBlbmFtZSAgUVZhbHVl
TGlzdFByaXZhdGU8VD46Ok5vZGVQdHIgUVZhbHVlTGlzdFByaXZhdGU8VD46OmZpbmQoIHR5cGVu
YW1lICBRVmFsdWVMaXN0UHJpdmF0ZTxUPjo6Tm9kZVB0ciBzdGFydCwgY29uc3QgVCYgeCApIGNv
bnN0CnsKICAgIENvbnN0SXRlcmF0b3IgZmlyc3QoIHN0YXJ0ICk7CiAgICBDb25zdEl0ZXJhdG9y
IGxhc3QoIG5vZGUgKTsKICAgIHdoaWxlKCBmaXJzdCAhPSBsYXN0KSB7CglpZiAoICpmaXJzdCA9
PSB4ICkKCSAgICByZXR1cm4gZmlyc3Qubm9kZTsKCSsrZmlyc3Q7CiAgICB9CiAgICByZXR1cm4g
bGFzdC5ub2RlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KICBpbnQgUVZhbHVlTGlzdFByaXZhdGU8
VD46OmZpbmRJbmRleCggdHlwZW5hbWUgIFFWYWx1ZUxpc3RQcml2YXRlPFQ+OjpOb2RlUHRyIHN0
YXJ0LCBjb25zdCBUJiB4ICkgY29uc3QKewogICAgQ29uc3RJdGVyYXRvciBmaXJzdCggc3RhcnQg
KTsKICAgIENvbnN0SXRlcmF0b3IgbGFzdCggbm9kZSApOwogICAgaW50IHBvcyA9IDA7CiAgICB3
aGlsZSggZmlyc3QgIT0gbGFzdCkgewoJaWYgKCAqZmlyc3QgPT0geCApCgkgICAgcmV0dXJuIHBv
czsKCSsrZmlyc3Q7CgkrK3BvczsKICAgIH0KICAgIHJldHVybiAtMTsKfQoKdGVtcGxhdGUgPGNs
YXNzIFQ+CiAgdWludCBRVmFsdWVMaXN0UHJpdmF0ZTxUPjo6Y29udGFpbnMoIGNvbnN0IFQmIHgg
KSBjb25zdAp7CiAgICB1aW50IHJlc3VsdCA9IDA7CiAgICBJdGVyYXRvciBmaXJzdCA9IEl0ZXJh
dG9yKCBub2RlLT5uZXh0ICk7CiAgICBJdGVyYXRvciBsYXN0ID0gSXRlcmF0b3IoIG5vZGUgKTsK
ICAgIHdoaWxlKCBmaXJzdCAhPSBsYXN0KSB7CglpZiAoICpmaXJzdCA9PSB4ICkKCSAgICArK3Jl
c3VsdDsKCSsrZmlyc3Q7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgVD4KICB1aW50IFFWYWx1ZUxpc3RQcml2YXRlPFQ+OjpyZW1vdmUoIGNvbnN0IFQmIHggKQp7
CiAgICB1aW50IHJlc3VsdCA9IDA7CiAgICBJdGVyYXRvciBmaXJzdCA9IEl0ZXJhdG9yKCBub2Rl
LT5uZXh0ICk7CiAgICBJdGVyYXRvciBsYXN0ID0gSXRlcmF0b3IoIG5vZGUgKTsKICAgIHdoaWxl
KCBmaXJzdCAhPSBsYXN0KSB7CglpZiAoICpmaXJzdCA9PSB4ICkgewoJICAgIGZpcnN0ID0gcmVt
b3ZlKCBmaXJzdCApOwoJICAgICsrcmVzdWx0OwoJfSBlbHNlCgkgICAgKytmaXJzdDsKICAgIH0K
ICAgIHJldHVybiByZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgogIHR5cGVuYW1lICBRVmFs
dWVMaXN0UHJpdmF0ZTxUPjo6Tm9kZVB0ciBRVmFsdWVMaXN0UHJpdmF0ZTxUPjo6YXQoIHNpemVf
dHlwZSBpICkgY29uc3QKewogICAgKCggIGkgPD0gbm9kZXMgICkgPyAodm9pZCkwIDogcVdhcm5p
bmcoIkFTU0VSVDogXCIlc1wiIGluICVzICglZCkiLCJpIDw9IG5vZGVzIiwiL3Vzci9sb2NhbC9x
dC9pbmNsdWRlL3F2YWx1ZWxpc3QuaCIsMzYwKSkgOwogICAgTm9kZVB0ciBwID0gbm9kZS0+bmV4
dDsKICAgIGZvciggc2l6ZV90eXBlIHggPSAwOyB4IDwgaTsgKyt4ICkKCXAgPSBwLT5uZXh0Owog
ICAgcmV0dXJuIHA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgogIHZvaWQgUVZhbHVlTGlzdFByaXZh
dGU8VD46OmNsZWFyKCkKewogICAgbm9kZXMgPSAwOwogICAgTm9kZVB0ciBwID0gbm9kZS0+bmV4
dDsKICAgIHdoaWxlKCBwICE9IG5vZGUgKSB7CglOb2RlUHRyIG5leHQgPSBwLT5uZXh0OwoJZGVs
ZXRlIHA7CglwID0gbmV4dDsKICAgIH0KICAgIG5vZGUtPm5leHQgPSBub2RlLT5wcmV2ID0gbm9k
ZTsKfQoKCgoKCgoKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBRVmFsdWVMaXN0CnsK
cHVibGljOgogICAgIAoKCiAgICB0eXBlZGVmIFFWYWx1ZUxpc3RJdGVyYXRvcjxUPiBpdGVyYXRv
cjsKICAgIHR5cGVkZWYgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8VD4gY29uc3RfaXRlcmF0b3I7
CiAgICB0eXBlZGVmIFQgdmFsdWVfdHlwZTsKICAgIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRl
cjsKICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICAgIHR5cGVk
ZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNlOwogICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBj
b25zdF9yZWZlcmVuY2U7CiAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CgogICAgdHlwZWRl
ZiBwdHJkaWZmX3QgIGRpZmZlcmVuY2VfdHlwZTsKCgoKCiAgICAgCgoKICAgIFFWYWx1ZUxpc3Qo
KSB7IHNoID0gbmV3IFFWYWx1ZUxpc3RQcml2YXRlPFQ+OyB9CiAgICBRVmFsdWVMaXN0KCBjb25z
dCBRVmFsdWVMaXN0PFQ+JiBsICkgeyBzaCA9IGwuc2g7IHNoLT5yZWYoKTsgfQoKCgoKCiAgICBR
VmFsdWVMaXN0KCBjb25zdCB0eXBlbmFtZSAgc3RkOjpsaXN0PFQ+JiBsICkKICAgIHsKCXNoID0g
bmV3IFFWYWx1ZUxpc3RQcml2YXRlPFQ+OwoJcUNvcHkoIGwuYmVnaW4oKSwgbC5lbmQoKSwgc3Rk
OjpiYWNrX2luc2VydGVyKCAqdGhpcyApICk7CiAgICB9CgogICAgflFWYWx1ZUxpc3QoKSB7IHNo
LT5kZXJlZkFuZERlbGV0ZSgpOyB9CgogICAgUVZhbHVlTGlzdDxUPiYgb3BlcmF0b3I9ICggY29u
c3QgUVZhbHVlTGlzdDxUPiYgbCApCiAgICB7CglsLnNoLT5yZWYoKTsKCXNoLT5kZXJlZkFuZERl
bGV0ZSgpOwoJc2ggPSBsLnNoOwoJcmV0dXJuICp0aGlzOwogICAgfQoKICAgIFFWYWx1ZUxpc3Q8
VD4mIG9wZXJhdG9yPSAoIGNvbnN0IHR5cGVuYW1lICBzdGQ6Omxpc3Q8VD4mIGwgKQogICAgewoJ
ZGV0YWNoKCk7CglxQ29weSggbC5iZWdpbigpLCBsLmVuZCgpLCBzdGQ6OmJhY2tfaW5zZXJ0ZXIo
ICp0aGlzICkgKTsKCXJldHVybiAqdGhpczsKICAgIH0KICAgIGJvb2wgb3BlcmF0b3I9PSAoIGNv
bnN0IHR5cGVuYW1lICBzdGQ6Omxpc3Q8VD4mIGwgKSBjb25zdAogICAgewoJaWYgKCBzaXplKCkg
IT0gbC5zaXplKCkgKQoJICAgIHJldHVybiBGQUxTRTsKCWNvbnN0X2l0ZXJhdG9yIGl0MiA9IGJl
Z2luKCk7CgoJdHlwZW5hbWUKCglzdGQ6Omxpc3Q8VD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbC5i
ZWdpbigpOwoJZm9yICggOyBpdDIgIT0gZW5kKCk7ICsraXQyLCArK2l0ICkKCWlmICggISgoKml0
MikgPT0gKCppdCkpICkKCSAgICByZXR1cm4gRkFMU0U7CglyZXR1cm4gVFJVRTsKICAgIH0KCgoK
CgogICAgYm9vbCBvcGVyYXRvcj09ICggY29uc3QgUVZhbHVlTGlzdDxUPiYgbCApIGNvbnN0Owog
ICAgYm9vbCBvcGVyYXRvciE9ICggY29uc3QgUVZhbHVlTGlzdDxUPiYgbCApIGNvbnN0IHsgcmV0
dXJuICEoICp0aGlzID09IGwgKTsgfQogICAgaXRlcmF0b3IgYmVnaW4oKSB7IGRldGFjaCgpOyBy
ZXR1cm4gaXRlcmF0b3IoIHNoLT5ub2RlLT5uZXh0ICk7IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGJl
Z2luKCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoIHNoLT5ub2RlLT5uZXh0ICk7IH0K
ICAgIGl0ZXJhdG9yIGVuZCgpIHsgZGV0YWNoKCk7IHJldHVybiBpdGVyYXRvciggc2gtPm5vZGUg
KTsgfQogICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0
b3IoIHNoLT5ub2RlICk7IH0KICAgIGl0ZXJhdG9yIGluc2VydCggaXRlcmF0b3IgaXQsIGNvbnN0
IFQmIHggKSB7IGRldGFjaCgpOyByZXR1cm4gc2gtPmluc2VydCggaXQsIHggKTsgfQogICAgdWlu
dCByZW1vdmUoIGNvbnN0IFQmIHggKSB7IGRldGFjaCgpOyByZXR1cm4gc2gtPnJlbW92ZSggeCAp
OyB9CiAgICB2b2lkIGNsZWFyKCk7CgogICAgUVZhbHVlTGlzdDxUPiYgb3BlcmF0b3I8PCAoIGNv
bnN0IFQmIHggKQogICAgewoJYXBwZW5kKCB4ICk7CglyZXR1cm4gKnRoaXM7CiAgICB9CgogICAg
c2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBzaC0+bm9kZXM7IH0KICAgIGJvb2wgZW1w
dHkoKSBjb25zdCB7IHJldHVybiBzaC0+bm9kZXMgPT0gMDsgfQogICAgdm9pZCBwdXNoX2Zyb250
KCBjb25zdCBUJiB4ICkgeyBkZXRhY2goKTsgc2gtPmluc2VydCggYmVnaW4oKSwgeCApOyB9CiAg
ICB2b2lkIHB1c2hfYmFjayggY29uc3QgVCYgeCApIHsgZGV0YWNoKCk7IHNoLT5pbnNlcnQoIGVu
ZCgpLCB4ICk7IH0KICAgIGl0ZXJhdG9yIGVyYXNlKCBpdGVyYXRvciBwb3MgKSB7IGRldGFjaCgp
OyByZXR1cm4gc2gtPnJlbW92ZSggcG9zICk7IH0KICAgIGl0ZXJhdG9yIGVyYXNlKCBpdGVyYXRv
ciBmaXJzdCwgaXRlcmF0b3IgbGFzdCApOwogICAgcmVmZXJlbmNlIGZyb250KCkgeyAgOyByZXR1
cm4gKmJlZ2luKCk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBmcm9udCgpIGNvbnN0IHsgIDsgcmV0
dXJuICpiZWdpbigpOyB9CiAgICByZWZlcmVuY2UgYmFjaygpIHsgIDsgcmV0dXJuICooLS1lbmQo
KSk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyAgOyByZXR1cm4gKigtLWVu
ZCgpKTsgfQogICAgdm9pZCBwb3BfZnJvbnQoKSB7ICA7IGVyYXNlKCBiZWdpbigpICk7IH0KICAg
IHZvaWQgcG9wX2JhY2soKSB7CgkgOwoJaXRlcmF0b3IgdG1wID0gZW5kKCk7CgllcmFzZSggLS10
bXAgKTsKICAgIH0KICAgIHZvaWQgaW5zZXJ0KCBpdGVyYXRvciBwb3MsIHNpemVfdHlwZSBuLCBj
b25zdCBUJiB4ICk7CiAgICAgCiAgICAgCiAgICAgCiAgICAgCgoKCgoKCiAgICBRVmFsdWVMaXN0
PFQ+IG9wZXJhdG9yKyAoIGNvbnN0IFFWYWx1ZUxpc3Q8VD4mIGwgKSBjb25zdDsKICAgIFFWYWx1
ZUxpc3Q8VD4mIG9wZXJhdG9yKz0gKCBjb25zdCBRVmFsdWVMaXN0PFQ+JiBsICk7CgogICAgaXRl
cmF0b3IgZnJvbUxhc3QoKSB7IGRldGFjaCgpOyByZXR1cm4gaXRlcmF0b3IoIHNoLT5ub2RlLT5w
cmV2ICk7IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGZyb21MYXN0KCkgY29uc3QgeyByZXR1cm4gY29u
c3RfaXRlcmF0b3IoIHNoLT5ub2RlLT5wcmV2ICk7IH0KCiAgICBib29sIGlzRW1wdHkoKSBjb25z
dCB7IHJldHVybiAoIHNoLT5ub2RlcyA9PSAwICk7IH0KCiAgICBpdGVyYXRvciBhcHBlbmQoIGNv
bnN0IFQmIHggKSB7IGRldGFjaCgpOyByZXR1cm4gc2gtPmluc2VydCggZW5kKCksIHggKTsgfQog
ICAgaXRlcmF0b3IgcHJlcGVuZCggY29uc3QgVCYgeCApIHsgZGV0YWNoKCk7IHJldHVybiBzaC0+
aW5zZXJ0KCBiZWdpbigpLCB4ICk7IH0KCiAgICBpdGVyYXRvciByZW1vdmUoIGl0ZXJhdG9yIGl0
ICkgeyBkZXRhY2goKTsgcmV0dXJuIHNoLT5yZW1vdmUoIGl0ICk7IH0KCiAgICBUJiBmaXJzdCgp
IHsgIDsgZGV0YWNoKCk7IHJldHVybiBzaC0+bm9kZS0+bmV4dC0+ZGF0YTsgfQogICAgY29uc3Qg
VCYgZmlyc3QoKSBjb25zdCB7ICA7IHJldHVybiBzaC0+bm9kZS0+bmV4dC0+ZGF0YTsgfQogICAg
VCYgbGFzdCgpIHsgIDsgZGV0YWNoKCk7IHJldHVybiBzaC0+bm9kZS0+cHJldi0+ZGF0YTsgfQog
ICAgY29uc3QgVCYgbGFzdCgpIGNvbnN0IHsgIDsgcmV0dXJuIHNoLT5ub2RlLT5wcmV2LT5kYXRh
OyB9CgogICAgVCYgb3BlcmF0b3JbXSAoIHNpemVfdHlwZSBpICkgeyAgOyBkZXRhY2goKTsgcmV0
dXJuIHNoLT5hdChpKS0+ZGF0YTsgfQogICAgY29uc3QgVCYgb3BlcmF0b3JbXSAoIHNpemVfdHlw
ZSBpICkgY29uc3QgeyAgOyByZXR1cm4gc2gtPmF0KGkpLT5kYXRhOyB9CiAgICBpdGVyYXRvciBh
dCggc2l6ZV90eXBlIGkgKSB7ICA7IGRldGFjaCgpOyByZXR1cm4gaXRlcmF0b3IoIHNoLT5hdChp
KSApOyB9CiAgICBjb25zdF9pdGVyYXRvciBhdCggc2l6ZV90eXBlIGkgKSBjb25zdCB7ICA7IHJl
dHVybiBjb25zdF9pdGVyYXRvciggc2gtPmF0KGkpICk7IH0KICAgIGl0ZXJhdG9yIGZpbmQgKCBj
b25zdCBUJiB4ICkgeyBkZXRhY2goKTsgcmV0dXJuIGl0ZXJhdG9yKCBzaC0+ZmluZCggc2gtPm5v
ZGUtPm5leHQsIHgpICk7IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGZpbmQgKCBjb25zdCBUJiB4ICkg
Y29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoIHNoLT5maW5kKCBzaC0+bm9kZS0+bmV4dCwg
eCkgKTsgfQogICAgaXRlcmF0b3IgZmluZCAoIGl0ZXJhdG9yIGl0LCBjb25zdCBUJiB4ICkgeyBk
ZXRhY2goKTsgcmV0dXJuIGl0ZXJhdG9yKCBzaC0+ZmluZCggaXQubm9kZSwgeCApICk7IH0KICAg
IGNvbnN0X2l0ZXJhdG9yIGZpbmQgKCBjb25zdF9pdGVyYXRvciBpdCwgY29uc3QgVCYgeCApIGNv
bnN0IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKCBzaC0+ZmluZCggaXQubm9kZSwgeCApICk7IH0K
ICAgIGludCBmaW5kSW5kZXgoIGNvbnN0IFQmIHggKSBjb25zdCB7IHJldHVybiBzaC0+ZmluZElu
ZGV4KCBzaC0+bm9kZS0+bmV4dCwgeCkgOyB9CiAgICBzaXplX3R5cGUgY29udGFpbnMoIGNvbnN0
IFQmIHggKSBjb25zdCB7IHJldHVybiBzaC0+Y29udGFpbnMoIHggKTsgfQoKICAgIHNpemVfdHlw
ZSBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIHNoLT5ub2RlczsgfQoKICAgIFFWYWx1ZUxpc3Q8VD4m
IG9wZXJhdG9yKz0gKCBjb25zdCBUJiB4ICkKICAgIHsKCWFwcGVuZCggeCApOwoJcmV0dXJuICp0
aGlzOwogICAgfQogICAgdHlwZWRlZiBRVmFsdWVMaXN0SXRlcmF0b3I8VD4gSXRlcmF0b3I7CiAg
ICB0eXBlZGVmIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFQ+IENvbnN0SXRlcmF0b3I7CiAgICB0
eXBlZGVmIFQgVmFsdWVUeXBlOwoKcHJvdGVjdGVkOgogICAgIAoKCiAgICB2b2lkIGRldGFjaCgp
IHsgaWYgKCBzaC0+Y291bnQgPiAxICkgZGV0YWNoSW50ZXJuYWwoKTsgfQoKICAgICAKCgogICAg
UVZhbHVlTGlzdFByaXZhdGU8VD4qIHNoOwogICAgCnByaXZhdGU6CiAgICB2b2lkIGRldGFjaElu
dGVybmFsKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KICBib29sIFFWYWx1ZUxpc3Q8VD46Om9w
ZXJhdG9yPT0gKCBjb25zdCBRVmFsdWVMaXN0PFQ+JiBsICkgY29uc3QKewogICAgaWYgKCBzaXpl
KCkgIT0gbC5zaXplKCkgKQoJcmV0dXJuIEZBTFNFOwogICAgY29uc3RfaXRlcmF0b3IgaXQyID0g
YmVnaW4oKTsKICAgIGNvbnN0X2l0ZXJhdG9yIGl0ID0gbC5iZWdpbigpOwogICAgZm9yKCA7IGl0
ICE9IGwuZW5kKCk7ICsraXQsICsraXQyICkKCWlmICggISggKml0ID09ICppdDIgKSApCgkgICAg
cmV0dXJuIEZBTFNFOwogICAgcmV0dXJuIFRSVUU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgogIHZv
aWQgUVZhbHVlTGlzdDxUPjo6Y2xlYXIoKQp7CiAgICBpZiAoIHNoLT5jb3VudCA9PSAxICkgc2gt
PmNsZWFyKCk7IGVsc2UgeyBzaC0+ZGVyZWYoKTsgc2ggPSBuZXcgUVZhbHVlTGlzdFByaXZhdGU8
VD47IH0KfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CiAgdHlwZW5hbWUgIFFWYWx1ZUxpc3Q8VD46Oml0
ZXJhdG9yIFFWYWx1ZUxpc3Q8VD46OmVyYXNlKCB0eXBlbmFtZSAgUVZhbHVlTGlzdDxUPjo6aXRl
cmF0b3IgZmlyc3QsIHR5cGVuYW1lICBRVmFsdWVMaXN0PFQ+OjppdGVyYXRvciBsYXN0ICkKewog
ICAgd2hpbGUgKCBmaXJzdCAhPSBsYXN0ICkKCWVyYXNlKCBmaXJzdCsrICk7CiAgICByZXR1cm4g
bGFzdDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBUPgogIHZvaWQgUVZhbHVlTGlzdDxUPjo6aW5zZXJ0
KCB0eXBlbmFtZSAgUVZhbHVlTGlzdDxUPjo6aXRlcmF0b3IgcG9zLCBzaXplX3R5cGUgbiwgY29u
c3QgVCYgeCApCnsKICAgIGZvciAoIDsgbiA+IDA7IC0tbiApCglpbnNlcnQoIHBvcywgeCApOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KICBRVmFsdWVMaXN0PFQ+IFFWYWx1ZUxpc3Q8VD46Om9wZXJh
dG9yKyAoIGNvbnN0IFFWYWx1ZUxpc3Q8VD4mIGwgKSBjb25zdAp7CiAgICBRVmFsdWVMaXN0PFQ+
IGwyKCAqdGhpcyApOwogICAgZm9yKCBjb25zdF9pdGVyYXRvciBpdCA9IGwuYmVnaW4oKTsgaXQg
IT0gbC5lbmQoKTsgKytpdCApCglsMi5hcHBlbmQoICppdCApOwogICAgcmV0dXJuIGwyOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgVD4KICBRVmFsdWVMaXN0PFQ+JiBRVmFsdWVMaXN0PFQ+OjpvcGVyYXRv
cis9ICggY29uc3QgUVZhbHVlTGlzdDxUPiYgbCApCnsKICAgIGZvciggY29uc3RfaXRlcmF0b3Ig
aXQgPSBsLmJlZ2luKCk7IGl0ICE9IGwuZW5kKCk7ICsraXQgKQoJYXBwZW5kKCAqaXQgKTsKICAg
IHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CiAgdm9pZCBRVmFsdWVMaXN0PFQ+
OjpkZXRhY2hJbnRlcm5hbCgpCnsKICAgIHNoLT5kZXJlZigpOyBzaCA9IG5ldyBRVmFsdWVMaXN0
UHJpdmF0ZTxUPiggKnNoICk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KICBRRGF0YVN0cmVhbSYg
b3BlcmF0b3I+PiggUURhdGFTdHJlYW0mIHMsIFFWYWx1ZUxpc3Q8VD4mIGwgKQp7CiAgICBsLmNs
ZWFyKCk7CiAgICBRX1VJTlQzMiBjOwogICAgcyA+PiBjOwogICAgZm9yKCBRX1VJTlQzMiBpID0g
MDsgaSA8IGM7ICsraSApCiAgICB7CglUIHQ7CglzID4+IHQ7CglsLmFwcGVuZCggdCApOwoJaWYg
KCBzLmF0RW5kKCkgKQoJICAgIGJyZWFrOwogICAgfQogICAgcmV0dXJuIHM7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBUPgogIFFEYXRhU3RyZWFtJiBvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSYgcywgY29u
c3QgUVZhbHVlTGlzdDxUPiYgbCApCnsKICAgIHMgPDwgKFFfVUlOVDMyKWwuc2l6ZSgpOwogICAg
UVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8VD4gaXQgPSBsLmJlZ2luKCk7CiAgICBmb3IoIDsgaXQg
IT0gbC5lbmQoKTsgKytpdCApCglzIDw8ICppdDsKICAgIHJldHVybiBzOwp9CgoKIyA0NyAiL3Vz
ci9sb2NhbC9xdC9pbmNsdWRlL3FtYXAuaCIgMgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9p
NTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL21hcCIg
MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIv
aTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxf
dHJlZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4
LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9mdW5jdGlvbi5oIiAxIDMKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywg
Y2xhc3MgX1Jlc3VsdD4Kc3RydWN0IHVuYXJ5X2Z1bmN0aW9uIHsKICB0eXBlZGVmIF9BcmcgYXJn
dW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgYmluYXJ5X2Z1
bmN0aW9uIHsKICB0eXBlZGVmIF9BcmcxIGZpcnN0X2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBf
QXJnMiBzZWNvbmRfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7
Cn07ICAgICAgCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgcGx1cyA6IHB1YmxpYyBiaW5h
cnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f
eCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCArIF9feTsgfQp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9UcD4Kc3RydWN0IG1pbnVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAs
X1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9f
eSkgY29uc3QgeyByZXR1cm4gX194IC0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpz
dHJ1Y3QgbXVsdGlwbGllcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsK
ICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsg
cmV0dXJuIF9feCAqIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGRpdmlk
ZXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9y
KCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLyBf
X3k7IH0KfTsKCiAKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IGlubGluZSBfVHAgaWRlbnRpdHlfZWxl
bWVudChwbHVzPF9UcD4pIHsKICByZXR1cm4gX1RwKDApOwp9CnRlbXBsYXRlIDxjbGFzcyBfVHA+
IGlubGluZSBfVHAgaWRlbnRpdHlfZWxlbWVudChtdWx0aXBsaWVzPF9UcD4pIHsKICByZXR1cm4g
X1RwKDEpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbW9kdWx1cyA6IHB1YmxpYyBi
aW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IAp7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1Rw
JiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggJSBfX3k7IH0KfTsKCnRl
bXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248
X1RwLF9UcD4gCnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1
cm4gLV9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGVxdWFsX3RvIDogcHVi
bGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+IAp7CiAgYm9vbCBvcGVyYXRvcigpKGNv
bnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID09IF9feTsg
fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG5vdF9lcXVhbF90byA6IHB1YmxpYyBi
aW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPiAKewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBf
VHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAhPSBfX3k7IH0KfTsK
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyIDogcHVibGljIGJpbmFyeV9mdW5j
dGlvbjxfVHAsX1RwLGJvb2w+IAp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBj
b25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID4gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxi
b29sPiAKewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kp
IGNvbnN0IHsgcmV0dXJuIF9feCA8IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry
dWN0IGdyZWF0ZXJfZXF1YWwgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4K
ewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0
IHsgcmV0dXJuIF9feCA+PSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBs
ZXNzX2VxdWFsIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+IAp7CiAgYm9v
bCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1
cm4gX194IDw9IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxf
YW5kIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJh
dG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3gg
JiYgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9vciA6IHB1
YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNv
bnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IHx8IF9feTsg
fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfbm90IDogcHVibGljIHVu
YXJ5X2Z1bmN0aW9uPF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194
KSBjb25zdCB7IHJldHVybiAhX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4K
Y2xhc3MgdW5hcnlfbmVnYXRlCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1By
ZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSwgYm9vbD4gewpwcm90ZWN0ZWQ6CiAgX1ByZWRpY2F0ZSBf
TV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgdW5hcnlfbmVnYXRlKGNvbnN0IF9QcmVkaWNhdGUm
IF9feCkgOiBfTV9wcmVkKF9feCkge30KICBib29sIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUg
X1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gIV9NX3By
ZWQoX194KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIHVuYXJ5
X25lZ2F0ZTxfUHJlZGljYXRlPiAKbm90MShjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCnsKICBy
ZXR1cm4gdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfUHJlZGljYXRlPiAKY2xhc3MgYmluYXJ5X25lZ2F0ZSAKICA6IHB1YmxpYyBiaW5hcnlfZnVu
Y3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5
cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVk
aWNhdGUgX01fcHJlZDsKcHVibGljOgogIGV4cGxpY2l0IGJpbmFyeV9uZWdhdGUoY29uc3QgX1By
ZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0
eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gsIAogICAgICAgICAg
ICAgICAgICBjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYg
X195KSBjb25zdAogIHsKICAgIHJldHVybiAhX01fcHJlZChfX3gsIF9feSk7IAogIH0KfTsKCnRl
bXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgYmluYXJ5X25lZ2F0ZTxfUHJlZGljYXRl
PiAKbm90Mihjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCnsKICByZXR1cm4gYmluYXJ5X25lZ2F0
ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbj4gCmNs
YXNzIGJpbmRlcjFzdAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRp
b246OnNlY29uZF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVu
YW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9uIG9w
OwogIHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUgdmFsdWU7CnB1Ymxp
YzoKICBiaW5kZXIxc3QoY29uc3QgX09wZXJhdGlvbiYgX194LAogICAgICAgICAgICBjb25zdCB0
eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3kpCiAgICAgIDogb3Ao
X194KSwgdmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAg
b3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlw
ZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AodmFsdWUsIF9feCk7IAogIH0KfTsKCnRlbXBs
YXRlIDxjbGFzcyBfT3BlcmF0aW9uLCBjbGFzcyBfVHA+CmlubGluZSBiaW5kZXIxc3Q8X09wZXJh
dGlvbj4gCmJpbmQxc3QoY29uc3QgX09wZXJhdGlvbiYgX19vcGVyLCBjb25zdCBfVHAmIF9feCkg
CnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUgX0Fy
ZzFfdHlwZTsKICByZXR1cm4gYmluZGVyMXN0PF9PcGVyYXRpb24+KF9fb3BlciwgX0FyZzFfdHlw
ZShfX3gpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24+IApjbGFzcyBiaW5kZXIybmQK
ICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1
bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb246
OnJlc3VsdF90eXBlPiB7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9uIG9wOwogIHR5cGVuYW1lIF9P
cGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMm5k
KGNvbnN0IF9PcGVyYXRpb24mIF9feCwKICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJh
dGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feSkgCiAgICAgIDogb3AoX194KSwgdmFsdWUo
X195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShj
b25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0
IHsKICAgIHJldHVybiBvcChfX3gsIHZhbHVlKTsgCiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9P
cGVyYXRpb24sIGNsYXNzIF9UcD4KaW5saW5lIGJpbmRlcjJuZDxfT3BlcmF0aW9uPiAKYmluZDJu
ZChjb25zdCBfT3BlcmF0aW9uJiBfX29wZXIsIGNvbnN0IF9UcCYgX194KSAKewogIHR5cGVkZWYg
dHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgX0FyZzJfdHlwZTsKICBy
ZXR1cm4gYmluZGVyMm5kPF9PcGVyYXRpb24+KF9fb3BlciwgX0FyZzJfdHlwZShfX3gpKTsKfQoK
IAoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMj4KY2xhc3Mg
dW5hcnlfY29tcG9zZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRp
b24yOjphcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9P
cGVyYXRpb24xOjpyZXN1bHRfdHlwZT4gCnsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24xIF9fb3Ax
OwogIF9PcGVyYXRpb24yIF9fb3AyOwpwdWJsaWM6CiAgdW5hcnlfY29tcG9zZShjb25zdCBfT3Bl
cmF0aW9uMSYgX194LCBjb25zdCBfT3BlcmF0aW9uMiYgX195KSAKICAgIDogX19vcDEoX194KSwg
X19vcDIoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZQogIG9wZXJh
dG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUmIF9feCkgY29u
c3QgewogICAgcmV0dXJuIF9fb3AxKF9fb3AyKF9feCkpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFz
cyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjI+CmlubGluZSB1bmFyeV9jb21wb3NlPF9P
cGVyYXRpb24xLF9PcGVyYXRpb24yPiAKY29tcG9zZTEoY29uc3QgX09wZXJhdGlvbjEmIF9fb3Ax
LCBjb25zdCBfT3BlcmF0aW9uMiYgX19vcDIpCnsKICByZXR1cm4gdW5hcnlfY29tcG9zZTxfT3Bl
cmF0aW9uMSxfT3BlcmF0aW9uMj4oX19vcDEsIF9fb3AyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9P
cGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMiwgY2xhc3MgX09wZXJhdGlvbjM+CmNsYXNzIGJp
bmFyeV9jb21wb3NlCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlv
bjI6OmFyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09w
ZXJhdGlvbjE6OnJlc3VsdF90eXBlPiB7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9uMSBfTV9vcDE7
CiAgX09wZXJhdGlvbjIgX01fb3AyOwogIF9PcGVyYXRpb24zIF9NX29wMzsKcHVibGljOgogIGJp
bmFyeV9jb21wb3NlKGNvbnN0IF9PcGVyYXRpb24xJiBfX3gsIGNvbnN0IF9PcGVyYXRpb24yJiBf
X3ksIAogICAgICAgICAgICAgICAgIGNvbnN0IF9PcGVyYXRpb24zJiBfX3opIAogICAgOiBfTV9v
cDEoX194KSwgX01fb3AyKF9feSksIF9NX29wMyhfX3opIHsgfQogIHR5cGVuYW1lIF9PcGVyYXRp
b24xOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjI6
OmFyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX29wMShfTV9vcDIoX194
KSwgX01fb3AzKF9feCkpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xh
c3MgX09wZXJhdGlvbjIsIGNsYXNzIF9PcGVyYXRpb24zPgppbmxpbmUgYmluYXJ5X2NvbXBvc2U8
X09wZXJhdGlvbjEsIF9PcGVyYXRpb24yLCBfT3BlcmF0aW9uMz4gCmNvbXBvc2UyKGNvbnN0IF9P
cGVyYXRpb24xJiBfX29wMSwgY29uc3QgX09wZXJhdGlvbjImIF9fb3AyLCAKICAgICAgICAgY29u
c3QgX09wZXJhdGlvbjMmIF9fb3AzKQp7CiAgcmV0dXJuIGJpbmFyeV9jb21wb3NlPF9PcGVyYXRp
b24xLF9PcGVyYXRpb24yLF9PcGVyYXRpb24zPgogICAgKF9fb3AxLCBfX29wMiwgX19vcDMpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4KY2xhc3MgcG9pbnRlcl90b191
bmFyeV9mdW5jdGlvbiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PiB7CnBy
b3RlY3RlZDoKICBfUmVzdWx0ICgqX01fcHRyKShfQXJnKTsKcHVibGljOgogIHBvaW50ZXJfdG9f
dW5hcnlfZnVuY3Rpb24oKSB7fQogIGV4cGxpY2l0IHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24o
X1Jlc3VsdCAoKl9feCkoX0FyZykpIDogX01fcHRyKF9feCkge30KICBfUmVzdWx0IG9wZXJhdG9y
KCkoX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3B0cihfX3gpOyB9Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rp
b248X0FyZywgX1Jlc3VsdD4gcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnKSkKewogIHJldHVy
biBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+KF9feCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBvaW50
ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uIDogCiAgcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSxf
QXJnMixfUmVzdWx0PiB7CnByb3RlY3RlZDoKICAgIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcxLCBf
QXJnMik7CnB1YmxpYzoKICAgIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKCkge30KICAgIGV4
cGxpY2l0IHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcxLCBf
QXJnMikpIAogICAgICA6IF9NX3B0cihfX3gpIHt9CiAgICBfUmVzdWx0IG9wZXJhdG9yKCkoX0Fy
ZzEgX194LCBfQXJnMiBfX3kpIGNvbnN0IHsKICAgICAgcmV0dXJuIF9NX3B0cihfX3gsIF9feSk7
CiAgICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVz
dWx0PgppbmxpbmUgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3Vs
dD4gCnB0cl9mdW4oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkgewogIHJldHVybiBwb2lu
dGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PihfX3gpOwp9CgogCnRl
bXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfSWRlbnRpdHkgOiBwdWJsaWMgdW5hcnlfZnVuY3Rp
b248X1RwLF9UcD4gewogIGNvbnN0IF9UcCYgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29u
c3QgeyByZXR1cm4gX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBzdHJ1Y3QgaWRlbnRp
dHkgOiBwdWJsaWMgX0lkZW50aXR5PF9UcD4ge307CgogCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4K
c3RydWN0IF9TZWxlY3Qxc3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1BhaXIsIHR5cGVuYW1l
IF9QYWlyOjpmaXJzdF90eXBlPiB7CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUm
IG9wZXJhdG9yKCkoY29uc3QgX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5maXJz
dDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0Mm5kIDogcHVi
bGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGU+CnsK
ICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX1Bh
aXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5zZWNvbmQ7CiAgfQp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9QYWlyPiBzdHJ1Y3Qgc2VsZWN0MXN0IDogcHVibGljIF9TZWxlY3Qxc3Q8X1BhaXI+
IHt9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+IHN0cnVjdCBzZWxlY3QybmQgOiBwdWJsaWMgX1Nl
bGVjdDJuZDxfUGFpcj4ge307CgogCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzI+
CnN0cnVjdCBfUHJvamVjdDFzdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X0FyZzEsIF9Bcmcy
LCBfQXJnMT4gewogIF9BcmcxIG9wZXJhdG9yKCkoY29uc3QgX0FyZzEmIF9feCwgY29uc3QgX0Fy
ZzImKSBjb25zdCB7IHJldHVybiBfX3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xh
c3MgX0FyZzI+CnN0cnVjdCBfUHJvamVjdDJuZCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X0Fy
ZzEsIF9BcmcyLCBfQXJnMj4gewogIF9BcmcyIG9wZXJhdG9yKCkoY29uc3QgX0FyZzEmLCBjb25z
dCBfQXJnMiYgX195KSBjb25zdCB7IHJldHVybiBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBf
QXJnMSwgY2xhc3MgX0FyZzI+IApzdHJ1Y3QgcHJvamVjdDFzdCA6IHB1YmxpYyBfUHJvamVjdDFz
dDxfQXJnMSwgX0FyZzI+IHt9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4K
c3RydWN0IHByb2plY3QybmQgOiBwdWJsaWMgX1Byb2plY3QybmQ8X0FyZzEsIF9BcmcyPiB7fTsK
CiAKIAogCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgY29uc3RhbnRfdm9pZF9mdW4K
ewogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKICByZXN1bHRfdHlwZSBfX3ZhbDsKICBj
b25zdGFudF92b2lkX2Z1bihjb25zdCByZXN1bHRfdHlwZSYgX192KSA6IF9fdmFsKF9fdikge30K
ICBjb25zdCByZXN1bHRfdHlwZSYgb3BlcmF0b3IoKSgpIGNvbnN0IHsgcmV0dXJuIF9fdmFsOyB9
Cn07ICAKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdCwgY2xhc3MgX0FyZ3VtZW50ID0gX1Jlc3Vs
dD4KCgoKc3RydWN0IGNvbnN0YW50X3VuYXJ5X2Z1biA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxf
QXJndW1lbnQsIF9SZXN1bHQ+IHsKICBfUmVzdWx0IF9NX3ZhbDsKICBjb25zdGFudF91bmFyeV9m
dW4oY29uc3QgX1Jlc3VsdCYgX192KSA6IF9NX3ZhbChfX3YpIHt9CiAgY29uc3QgX1Jlc3VsdCYg
b3BlcmF0b3IoKShjb25zdCBfQXJndW1lbnQmKSBjb25zdCB7IHJldHVybiBfTV92YWw7IH0KfTsK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdCwgY2xhc3MgX0FyZzEgPSBfUmVzdWx0LCBjbGFzcyBf
QXJnMiA9IF9BcmcxPgoKCgpzdHJ1Y3QgY29uc3RhbnRfYmluYXJ5X2Z1biA6IHB1YmxpYyBiaW5h
cnlfZnVuY3Rpb248X0FyZzEsIF9BcmcyLCBfUmVzdWx0PiB7CiAgX1Jlc3VsdCBfTV92YWw7CiAg
Y29uc3RhbnRfYmluYXJ5X2Z1bihjb25zdCBfUmVzdWx0JiBfX3YpIDogX01fdmFsKF9fdikge30K
ICBjb25zdCBfUmVzdWx0JiBvcGVyYXRvcigpKGNvbnN0IF9BcmcxJiwgY29uc3QgX0FyZzImKSBj
b25zdCB7CiAgICByZXR1cm4gX01fdmFsOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0
PgppbmxpbmUgY29uc3RhbnRfdm9pZF9mdW48X1Jlc3VsdD4gY29uc3RhbnQwKGNvbnN0IF9SZXN1
bHQmIF9fdmFsKQp7CiAgcmV0dXJuIGNvbnN0YW50X3ZvaWRfZnVuPF9SZXN1bHQ+KF9fdmFsKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CmlubGluZSBjb25zdGFudF91bmFyeV9mdW48X1Jl
c3VsdCxfUmVzdWx0PiBjb25zdGFudDEoY29uc3QgX1Jlc3VsdCYgX192YWwpCnsKICByZXR1cm4g
Y29uc3RhbnRfdW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdD4oX192YWwpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1Jlc3VsdD4KaW5saW5lIGNvbnN0YW50X2JpbmFyeV9mdW48X1Jlc3VsdCxfUmVzdWx0
LF9SZXN1bHQ+IApjb25zdGFudDIoY29uc3QgX1Jlc3VsdCYgX192YWwpCnsKICByZXR1cm4gY29u
c3RhbnRfYmluYXJ5X2Z1bjxfUmVzdWx0LF9SZXN1bHQsX1Jlc3VsdD4oX192YWwpOwp9CgogCiAK
Y2xhc3Mgc3VidHJhY3RpdmVfcm5nIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHVuc2lnbmVkIGlu
dCwgdW5zaWduZWQgaW50PiB7CnByaXZhdGU6CiAgdW5zaWduZWQgaW50IF9NX3RhYmxlWzU1XTsK
ICBzaXplX3QgX01faW5kZXgxOwogIHNpemVfdCBfTV9pbmRleDI7CnB1YmxpYzoKICB1bnNpZ25l
ZCBpbnQgb3BlcmF0b3IoKSh1bnNpZ25lZCBpbnQgX19saW1pdCkgewogICAgX01faW5kZXgxID0g
KF9NX2luZGV4MSArIDEpICUgNTU7CiAgICBfTV9pbmRleDIgPSAoX01faW5kZXgyICsgMSkgJSA1
NTsKICAgIF9NX3RhYmxlW19NX2luZGV4MV0gPSBfTV90YWJsZVtfTV9pbmRleDFdIC0gX01fdGFi
bGVbX01faW5kZXgyXTsKICAgIHJldHVybiBfTV90YWJsZVtfTV9pbmRleDFdICUgX19saW1pdDsK
ICB9CgogIHZvaWQgX01faW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgX19zZWVkKQogIHsKICAgIHVu
c2lnbmVkIGludCBfX2sgPSAxOwogICAgX01fdGFibGVbNTRdID0gX19zZWVkOwogICAgc2l6ZV90
IF9faTsKICAgIGZvciAoX19pID0gMDsgX19pIDwgNTQ7IF9faSsrKSB7CiAgICAgICAgc2l6ZV90
IF9faWkgPSAoMjEgKiAoX19pICsgMSkgJSA1NSkgLSAxOwogICAgICAgIF9NX3RhYmxlW19faWld
ID0gX19rOwogICAgICAgIF9fayA9IF9fc2VlZCAtIF9fazsKICAgICAgICBfX3NlZWQgPSBfTV90
YWJsZVtfX2lpXTsKICAgIH0KICAgIGZvciAoaW50IF9fbG9vcCA9IDA7IF9fbG9vcCA8IDQ7IF9f
bG9vcCsrKSB7CiAgICAgICAgZm9yIChfX2kgPSAwOyBfX2kgPCA1NTsgX19pKyspCiAgICAgICAg
ICAgIF9NX3RhYmxlW19faV0gPSBfTV90YWJsZVtfX2ldIC0gX01fdGFibGVbKDEgKyBfX2kgKyAz
MCkgJSA1NV07CiAgICB9CiAgICBfTV9pbmRleDEgPSAwOwogICAgX01faW5kZXgyID0gMzE7CiAg
fQoKICBzdWJ0cmFjdGl2ZV9ybmcodW5zaWduZWQgaW50IF9fc2VlZCkgeyBfTV9pbml0aWFsaXpl
KF9fc2VlZCk7IH0KICBzdWJ0cmFjdGl2ZV9ybmcoKSB7IF9NX2luaXRpYWxpemUoMTYxODAzMzk4
dSk7IH0KfTsKCgogCgogCiAKIAogCiAKIAogCgogCiAKIAogCiAKCiAKIAogCiAKIAoKCnRlbXBs
YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fdCA6IHB1YmxpYyB1bmFy
eV9mdW5jdGlvbjxfVHAqLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fdChfUmV0
IChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwKiBf
X3ApIGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1Rw
OjoqX01fZikoKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNv
bnN0X21lbV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9SZXQ+IHsK
cHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgpIGNv
bnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNv
bnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01f
ZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBt
ZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoK
ICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3Bm
KSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01f
ZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3JlZl90IDogcHVibGljIHVu
YXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVu
X3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQg
b3BlcmF0b3IoKShjb25zdCBfVHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsg
fQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV90IDogcHVibGlj
IGJpbmFyeV9mdW5jdGlvbjxfVHAqLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVt
X2Z1bjFfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBv
cGVyYXRvcigpKF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2Yp
KF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKTsKfTsKCnRlbXBsYXRl
IDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4x
X3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0FyZyxfUmV0PiB7CnB1Ymxp
YzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNv
bnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9B
cmcgX194KSBjb25zdAogICAgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToK
ICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0
LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90IDogcHVibGljIGJp
bmFyeV9mdW5jdGlvbjxfVHAsX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVu
MV9yZWZfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBv
cGVyYXRvcigpKF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZiko
X194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFf
cmVmX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLF9SZXQ+IHsKcHVibGljOgog
IGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNv
bnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IsIF9B
cmcgX194KSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1Jl
dCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNs
YXNzIG1lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosdm9p
ZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDog
X01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4q
X01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFy
eV9mdW5jdGlvbjxjb25zdCBfVHAqLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21l
bV9mdW5fdCh2b2lkIChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lk
IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJp
dmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9U
cD4KY2xhc3MgbWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PF9UcCx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6
Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29u
c3QgeyAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsK
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVmX3Q8dm9pZCwgX1Rw
PiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQg
Y29uc3RfbWVtX2Z1bl9yZWZfdCh2b2lkIChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19w
Zikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0IHsgKF9fci4qX01f
ZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV90PHZvaWQsIF9UcCwgX0Fy
Zz4gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBl
eHBsaWNpdCBtZW1fZnVuMV90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikg
e30KICB2b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IChfX3AtPipf
TV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZyk7Cn07Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90PHZvaWQs
IF9UcCwgX0FyZz4gCiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0FyZyx2
b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV90KHZvaWQgKF9UcDo6Kl9f
cGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3Qg
X1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6
CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBw
dWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0
IG1lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30K
ICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9NX2Yp
KF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90PHZvaWQs
IF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gewpw
dWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZiko
X0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAm
IF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZv
aWQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKCgogCiAKIAogCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9S
ZXQgKF9UcDo6Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0K
CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3Q8
X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNv
bnN0X21lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNs
YXNzIF9UcD4KaW5saW5lIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQg
KF9UcDo6Kl9fZikoKSkgCiAgeyByZXR1cm4gbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4oX19mKTsg
fQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0X21lbV9mdW5f
cmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoKSBjb25zdCkKICB7
IHJldHVybiBjb25zdF9tZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1bjFfdDxfUmV0
LF9UcCxfQXJnPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVt
X2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xh
c3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJn
PiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3Rf
bWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg
Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0Fy
Zz4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVu
MV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xh
c3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAs
X0FyZz4KbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVy
biBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1bjFfdDxfUmV0
LF9UcCxfQXJnPiBtZW1fZnVuMShfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1l
bV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNs
YXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0Fy
Zz4gbWVtX2Z1bjEoX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25z
dF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0
LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxf
QXJnPiBtZW1fZnVuMV9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1f
ZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg
Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxf
VHAsX0FyZz4KbWVtX2Z1bjFfcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyBy
ZXR1cm4gY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKIAoKCgog
CiAKIAojIDU5ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3RyZWUuaCIgMiAzCgoKICAKCgoKCgp0eXBlZGVm
IGJvb2wgX1JiX3RyZWVfQ29sb3JfdHlwZTsKY29uc3QgX1JiX3RyZWVfQ29sb3JfdHlwZSBfU19y
Yl90cmVlX3JlZCA9IGZhbHNlOwpjb25zdCBfUmJfdHJlZV9Db2xvcl90eXBlIF9TX3JiX3RyZWVf
YmxhY2sgPSB0cnVlOwoKc3RydWN0IF9SYl90cmVlX25vZGVfYmFzZQp7CiAgdHlwZWRlZiBfUmJf
dHJlZV9Db2xvcl90eXBlIF9Db2xvcl90eXBlOwogIHR5cGVkZWYgX1JiX3RyZWVfbm9kZV9iYXNl
KiBfQmFzZV9wdHI7CgogIF9Db2xvcl90eXBlIF9NX2NvbG9yOyAKICBfQmFzZV9wdHIgX01fcGFy
ZW50OwogIF9CYXNlX3B0ciBfTV9sZWZ0OwogIF9CYXNlX3B0ciBfTV9yaWdodDsKCiAgc3RhdGlj
IF9CYXNlX3B0ciBfU19taW5pbXVtKF9CYXNlX3B0ciBfX3gpCiAgewogICAgd2hpbGUgKF9feC0+
X01fbGVmdCAhPSAwKSBfX3ggPSBfX3gtPl9NX2xlZnQ7CiAgICByZXR1cm4gX194OwogIH0KCiAg
c3RhdGljIF9CYXNlX3B0ciBfU19tYXhpbXVtKF9CYXNlX3B0ciBfX3gpCiAgewogICAgd2hpbGUg
KF9feC0+X01fcmlnaHQgIT0gMCkgX194ID0gX194LT5fTV9yaWdodDsKICAgIHJldHVybiBfX3g7
CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9WYWx1ZT4Kc3RydWN0IF9SYl90cmVlX25vZGUgOiBw
dWJsaWMgX1JiX3RyZWVfbm9kZV9iYXNlCnsKICB0eXBlZGVmIF9SYl90cmVlX25vZGU8X1ZhbHVl
PiogX0xpbmtfdHlwZTsKICBfVmFsdWUgX01fdmFsdWVfZmllbGQ7Cn07CgoKc3RydWN0IF9SYl90
cmVlX2Jhc2VfaXRlcmF0b3IKewogIHR5cGVkZWYgX1JiX3RyZWVfbm9kZV9iYXNlOjpfQmFzZV9w
dHIgX0Jhc2VfcHRyOwogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0
b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIF9CYXNl
X3B0ciBfTV9ub2RlOwoKICB2b2lkIF9NX2luY3JlbWVudCgpCiAgewogICAgaWYgKF9NX25vZGUt
Pl9NX3JpZ2h0ICE9IDApIHsKICAgICAgX01fbm9kZSA9IF9NX25vZGUtPl9NX3JpZ2h0OwogICAg
ICB3aGlsZSAoX01fbm9kZS0+X01fbGVmdCAhPSAwKQogICAgICAgIF9NX25vZGUgPSBfTV9ub2Rl
LT5fTV9sZWZ0OwogICAgfQogICAgZWxzZSB7CiAgICAgIF9CYXNlX3B0ciBfX3kgPSBfTV9ub2Rl
LT5fTV9wYXJlbnQ7CiAgICAgIHdoaWxlIChfTV9ub2RlID09IF9feS0+X01fcmlnaHQpIHsKICAg
ICAgICBfTV9ub2RlID0gX195OwogICAgICAgIF9feSA9IF9feS0+X01fcGFyZW50OwogICAgICB9
CiAgICAgIGlmIChfTV9ub2RlLT5fTV9yaWdodCAhPSBfX3kpCiAgICAgICAgX01fbm9kZSA9IF9f
eTsKICAgIH0KICB9CgogIHZvaWQgX01fZGVjcmVtZW50KCkKICB7CiAgICBpZiAoX01fbm9kZS0+
X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQgJiYKICAgICAgICBfTV9ub2RlLT5fTV9wYXJlbnQt
Pl9NX3BhcmVudCA9PSBfTV9ub2RlKQogICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01fcmlnaHQ7
CiAgICBlbHNlIGlmIChfTV9ub2RlLT5fTV9sZWZ0ICE9IDApIHsKICAgICAgX0Jhc2VfcHRyIF9f
eSA9IF9NX25vZGUtPl9NX2xlZnQ7CiAgICAgIHdoaWxlIChfX3ktPl9NX3JpZ2h0ICE9IDApCiAg
ICAgICAgX195ID0gX195LT5fTV9yaWdodDsKICAgICAgX01fbm9kZSA9IF9feTsKICAgIH0KICAg
IGVsc2UgewogICAgICBfQmFzZV9wdHIgX195ID0gX01fbm9kZS0+X01fcGFyZW50OwogICAgICB3
aGlsZSAoX01fbm9kZSA9PSBfX3ktPl9NX2xlZnQpIHsKICAgICAgICBfTV9ub2RlID0gX195Owog
ICAgICAgIF9feSA9IF9feS0+X01fcGFyZW50OwogICAgICB9CiAgICAgIF9NX25vZGUgPSBfX3k7
CiAgICB9CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX1JlZiwgY2xhc3Mg
X1B0cj4Kc3RydWN0IF9SYl90cmVlX2l0ZXJhdG9yIDogcHVibGljIF9SYl90cmVlX2Jhc2VfaXRl
cmF0b3IKewogIHR5cGVkZWYgX1ZhbHVlIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfUmVmIHJlZmVy
ZW5jZTsKICB0eXBlZGVmIF9QdHIgcG9pbnRlcjsKICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9y
PF9WYWx1ZSwgX1ZhbHVlJiwgX1ZhbHVlKj4gICAgICAgICAgICAgCiAgICBpdGVyYXRvcjsKICB0
eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgY29uc3QgX1ZhbHVlJiwgY29uc3QgX1Zh
bHVlKj4gCiAgICBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPF9W
YWx1ZSwgX1JlZiwgX1B0cj4gICAgICAgICAgICAgICAgICAgCiAgICBfU2VsZjsKICB0eXBlZGVm
IF9SYl90cmVlX25vZGU8X1ZhbHVlPiogX0xpbmtfdHlwZTsKCiAgX1JiX3RyZWVfaXRlcmF0b3Io
KSB7fQogIF9SYl90cmVlX2l0ZXJhdG9yKF9MaW5rX3R5cGUgX194KSB7IF9NX25vZGUgPSBfX3g7
IH0KICBfUmJfdHJlZV9pdGVyYXRvcihjb25zdCBpdGVyYXRvciYgX19pdCkgeyBfTV9ub2RlID0g
X19pdC5fTV9ub2RlOyB9CgogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBf
TGlua190eXBlKF9NX25vZGUpLT5fTV92YWx1ZV9maWVsZDsgfQoKICBwb2ludGVyIG9wZXJhdG9y
LT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKCiAgX1NlbGYmIG9wZXJhdG9y
KysoKSB7IF9NX2luY3JlbWVudCgpOyByZXR1cm4gKnRoaXM7IH0KICBfU2VsZiBvcGVyYXRvcisr
KGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIF9NX2luY3JlbWVudCgpOwogICAg
cmV0dXJuIF9fdG1wOwogIH0KICAgIAogIF9TZWxmJiBvcGVyYXRvci0tKCkgeyBfTV9kZWNyZW1l
bnQoKTsgcmV0dXJuICp0aGlzOyB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAgIF9TZWxm
IF9fdG1wID0gKnRoaXM7CiAgICBfTV9kZWNyZW1lbnQoKTsKICAgIHJldHVybiBfX3RtcDsKICB9
Cn07CgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVlX2Jhc2VfaXRlcmF0b3Im
IF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9y
JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9NX25vZGU7Cn0KCmlubGluZSBi
b29sIG9wZXJhdG9yIT0oY29uc3QgX1JiX3RyZWVfYmFzZV9pdGVyYXRvciYgX194LAogICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2Jhc2VfaXRlcmF0b3ImIF9feSkgewogIHJl
dHVybiBfX3guX01fbm9kZSAhPSBfX3kuX01fbm9kZTsKfQoKIyAyMTQgIi91c3IvbGliL2djYy1s
aWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9z
dGxfdHJlZS5oIiAzCgoKaW5saW5lIHZvaWQgCl9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9SYl90cmVl
X25vZGVfYmFzZSogX194LCBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QpCnsKICBfUmJfdHJl
ZV9ub2RlX2Jhc2UqIF9feSA9IF9feC0+X01fcmlnaHQ7CiAgX194LT5fTV9yaWdodCA9IF9feS0+
X01fbGVmdDsKICBpZiAoX195LT5fTV9sZWZ0ICE9MCkKICAgIF9feS0+X01fbGVmdC0+X01fcGFy
ZW50ID0gX194OwogIF9feS0+X01fcGFyZW50ID0gX194LT5fTV9wYXJlbnQ7CgogIGlmIChfX3gg
PT0gX19yb290KQogICAgX19yb290ID0gX195OwogIGVsc2UgaWYgKF9feCA9PSBfX3gtPl9NX3Bh
cmVudC0+X01fbGVmdCkKICAgIF9feC0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX195OwogIGVsc2UK
ICAgIF9feC0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feTsKICBfX3ktPl9NX2xlZnQgPSBfX3g7
CiAgX194LT5fTV9wYXJlbnQgPSBfX3k7Cn0KCmlubGluZSB2b2lkIApfUmJfdHJlZV9yb3RhdGVf
cmlnaHQoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gsIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9v
dCkKewogIF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX194LT5fTV9sZWZ0OwogIF9feC0+X01f
bGVmdCA9IF9feS0+X01fcmlnaHQ7CiAgaWYgKF9feS0+X01fcmlnaHQgIT0gMCkKICAgIF9feS0+
X01fcmlnaHQtPl9NX3BhcmVudCA9IF9feDsKICBfX3ktPl9NX3BhcmVudCA9IF9feC0+X01fcGFy
ZW50OwoKICBpZiAoX194ID09IF9fcm9vdCkKICAgIF9fcm9vdCA9IF9feTsKICBlbHNlIGlmIChf
X3ggPT0gX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0KQogICAgX194LT5fTV9wYXJlbnQtPl9NX3Jp
Z2h0ID0gX195OwogIGVsc2UKICAgIF9feC0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX195OwogIF9f
eS0+X01fcmlnaHQgPSBfX3g7CiAgX194LT5fTV9wYXJlbnQgPSBfX3k7Cn0KCmlubGluZSB2b2lk
IApfUmJfdHJlZV9yZWJhbGFuY2UoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gsIF9SYl90cmVlX25v
ZGVfYmFzZSomIF9fcm9vdCkKewogIF9feC0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICB3
aGlsZSAoX194ICE9IF9fcm9vdCAmJiBfX3gtPl9NX3BhcmVudC0+X01fY29sb3IgPT0gX1NfcmJf
dHJlZV9yZWQpIHsKICAgIGlmIChfX3gtPl9NX3BhcmVudCA9PSBfX3gtPl9NX3BhcmVudC0+X01f
cGFyZW50LT5fTV9sZWZ0KSB7CiAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX194LT5f
TV9wYXJlbnQtPl9NX3BhcmVudC0+X01fcmlnaHQ7CiAgICAgIGlmIChfX3kgJiYgX195LT5fTV9j
b2xvciA9PSBfU19yYl90cmVlX3JlZCkgewogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xv
ciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgX195LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVf
YmxhY2s7CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfU19y
Yl90cmVlX3JlZDsKICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50OwogICAg
ICB9CiAgICAgIGVsc2UgewogICAgICAgIGlmIChfX3ggPT0gX194LT5fTV9wYXJlbnQtPl9NX3Jp
Z2h0KSB7CiAgICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudDsKICAgICAgICAgIF9SYl90cmVl
X3JvdGF0ZV9sZWZ0KF9feCwgX19yb290KTsKICAgICAgICB9CiAgICAgICAgX194LT5fTV9wYXJl
bnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICBfX3gtPl9NX3BhcmVudC0+
X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgIF9SYl90cmVlX3Jv
dGF0ZV9yaWdodChfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LCBfX3Jvb3QpOwogICAgICB9CiAg
ICB9CiAgICBlbHNlIHsKICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX3Bh
cmVudC0+X01fcGFyZW50LT5fTV9sZWZ0OwogICAgICBpZiAoX195ICYmIF9feS0+X01fY29sb3Ig
PT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fY29sb3IgPSBf
U19yYl90cmVlX2JsYWNrOwogICAgICAgIF9feS0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNr
OwogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJl
ZV9yZWQ7CiAgICAgICAgX194ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudDsKICAgICAgfQog
ICAgICBlbHNlIHsKICAgICAgICBpZiAoX194ID09IF9feC0+X01fcGFyZW50LT5fTV9sZWZ0KSB7
CiAgICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudDsKICAgICAgICAgIF9SYl90cmVlX3JvdGF0
ZV9yaWdodChfX3gsIF9fcm9vdCk7CiAgICAgICAgfQogICAgICAgIF9feC0+X01fcGFyZW50LT5f
TV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3Bh
cmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICBfUmJfdHJlZV9yb3RhdGVf
bGVmdChfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LCBfX3Jvb3QpOwogICAgICB9CiAgICB9CiAg
fQogIF9fcm9vdC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwp9CgppbmxpbmUgX1JiX3Ry
ZWVfbm9kZV9iYXNlKgpfUmJfdHJlZV9yZWJhbGFuY2VfZm9yX2VyYXNlKF9SYl90cmVlX25vZGVf
YmFzZSogX196LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFz
ZSomIF9fcm9vdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jh
c2UqJiBfX2xlZnRtb3N0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX25v
ZGVfYmFzZSomIF9fcmlnaHRtb3N0KQp7CiAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3o7
CiAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3ggPSAwOwogIF9SYl90cmVlX25vZGVfYmFzZSogX194
X3BhcmVudCA9IDA7CiAgaWYgKF9feS0+X01fbGVmdCA9PSAwKSAgICAgIAogICAgX194ID0gX195
LT5fTV9yaWdodDsgICAgICAKICBlbHNlCiAgICBpZiAoX195LT5fTV9yaWdodCA9PSAwKSAgIAog
ICAgICBfX3ggPSBfX3ktPl9NX2xlZnQ7ICAgICAKICAgIGVsc2UgeyAgICAgICAgICAgICAgICAg
ICAgCiAgICAgIF9feSA9IF9feS0+X01fcmlnaHQ7ICAgIAogICAgICB3aGlsZSAoX195LT5fTV9s
ZWZ0ICE9IDApCiAgICAgICAgX195ID0gX195LT5fTV9sZWZ0OwogICAgICBfX3ggPSBfX3ktPl9N
X3JpZ2h0OwogICAgfQogIGlmIChfX3kgIT0gX196KSB7ICAgICAgICAgICAKICAgIF9fei0+X01f
bGVmdC0+X01fcGFyZW50ID0gX195OyAKICAgIF9feS0+X01fbGVmdCA9IF9fei0+X01fbGVmdDsK
ICAgIGlmIChfX3kgIT0gX196LT5fTV9yaWdodCkgewogICAgICBfX3hfcGFyZW50ID0gX195LT5f
TV9wYXJlbnQ7CiAgICAgIGlmIChfX3gpIF9feC0+X01fcGFyZW50ID0gX195LT5fTV9wYXJlbnQ7
CiAgICAgIF9feS0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX194OyAgICAgICAKICAgICAgX195LT5f
TV9yaWdodCA9IF9fei0+X01fcmlnaHQ7CiAgICAgIF9fei0+X01fcmlnaHQtPl9NX3BhcmVudCA9
IF9feTsKICAgIH0KICAgIGVsc2UKICAgICAgX194X3BhcmVudCA9IF9feTsgIAogICAgaWYgKF9f
cm9vdCA9PSBfX3opCiAgICAgIF9fcm9vdCA9IF9feTsKICAgIGVsc2UgaWYgKF9fei0+X01fcGFy
ZW50LT5fTV9sZWZ0ID09IF9feikKICAgICAgX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3k7
CiAgICBlbHNlIAogICAgICBfX3otPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3k7CiAgICBfX3kt
Pl9NX3BhcmVudCA9IF9fei0+X01fcGFyZW50OwogICAgIDo6c3dhcChfX3ktPl9NX2NvbG9yLCBf
X3otPl9NX2NvbG9yKTsKICAgIF9feSA9IF9fejsKICAgICAKICB9CiAgZWxzZSB7ICAgICAgICAg
ICAgICAgICAgICAgICAgIAogICAgX194X3BhcmVudCA9IF9feS0+X01fcGFyZW50OwogICAgaWYg
KF9feCkgX194LT5fTV9wYXJlbnQgPSBfX3ktPl9NX3BhcmVudDsgICAKICAgIGlmIChfX3Jvb3Qg
PT0gX196KQogICAgICBfX3Jvb3QgPSBfX3g7CiAgICBlbHNlIAogICAgICBpZiAoX196LT5fTV9w
YXJlbnQtPl9NX2xlZnQgPT0gX196KQogICAgICAgIF9fei0+X01fcGFyZW50LT5fTV9sZWZ0ID0g
X194OwogICAgICBlbHNlCiAgICAgICAgX196LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0gX194Owog
ICAgaWYgKF9fbGVmdG1vc3QgPT0gX196KSAKICAgICAgaWYgKF9fei0+X01fcmlnaHQgPT0gMCkg
ICAgICAgICAKICAgICAgICBfX2xlZnRtb3N0ID0gX196LT5fTV9wYXJlbnQ7CiAgICAgCiAgICAg
IGVsc2UKICAgICAgICBfX2xlZnRtb3N0ID0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19taW5pbXVt
KF9feCk7CiAgICBpZiAoX19yaWdodG1vc3QgPT0gX196KSAgCiAgICAgIGlmIChfX3otPl9NX2xl
ZnQgPT0gMCkgICAgICAgICAgCiAgICAgICAgX19yaWdodG1vc3QgPSBfX3otPl9NX3BhcmVudDsg
IAogICAgIAogICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICBfX3JpZ2h0
bW9zdCA9IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWF4aW11bShfX3gpOwogIH0KICBpZiAoX195
LT5fTV9jb2xvciAhPSBfU19yYl90cmVlX3JlZCkgeyAKICAgIHdoaWxlIChfX3ggIT0gX19yb290
ICYmIChfX3ggPT0gMCB8fCBfX3gtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2spKQogICAg
ICBpZiAoX194ID09IF9feF9wYXJlbnQtPl9NX2xlZnQpIHsKICAgICAgICBfUmJfdHJlZV9ub2Rl
X2Jhc2UqIF9fdyA9IF9feF9wYXJlbnQtPl9NX3JpZ2h0OwogICAgICAgIGlmIChfX3ctPl9NX2Nv
bG9yID09IF9TX3JiX3RyZWVfcmVkKSB7CiAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX1NfcmJf
dHJlZV9ibGFjazsKICAgICAgICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9y
ZWQ7CiAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3hfcGFyZW50LCBfX3Jvb3QpOwog
ICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fcmlnaHQ7CiAgICAgICAgfQogICAgICAgIGlm
ICgoX193LT5fTV9sZWZ0ID09IDAgfHwgCiAgICAgICAgICAgICBfX3ctPl9NX2xlZnQtPl9NX2Nv
bG9yID09IF9TX3JiX3RyZWVfYmxhY2spICYmCiAgICAgICAgICAgIChfX3ctPl9NX3JpZ2h0ID09
IDAgfHwgCiAgICAgICAgICAgICBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9PSBfU19yYl90cmVl
X2JsYWNrKSkgewogICAgICAgICAgX193LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAg
ICAgICAgX194ID0gX194X3BhcmVudDsKICAgICAgICAgIF9feF9wYXJlbnQgPSBfX3hfcGFyZW50
LT5fTV9wYXJlbnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChfX3ctPl9NX3JpZ2h0
ID09IDAgfHwgCiAgICAgICAgICAgICAgX193LT5fTV9yaWdodC0+X01fY29sb3IgPT0gX1NfcmJf
dHJlZV9ibGFjaykgewogICAgICAgICAgICBpZiAoX193LT5fTV9sZWZ0KSBfX3ctPl9NX2xlZnQt
Pl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICAgICAgX193LT5fTV9jb2xvciA9
IF9TX3JiX3RyZWVfcmVkOwogICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX193LCBf
X3Jvb3QpOwogICAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9yaWdodDsKICAgICAgICAg
IH0KICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfX3hfcGFyZW50LT5fTV9jb2xvcjsKICAgICAg
ICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICAgIGlm
IChfX3ctPl9NX3JpZ2h0KSBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxh
Y2s7CiAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3hfcGFyZW50LCBfX3Jvb3QpOwog
ICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAg
ICAKICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fdyA9IF9feF9wYXJlbnQtPl9NX2xlZnQ7
CiAgICAgICAgaWYgKF9fdy0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgICAgICAg
IF9fdy0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgX194X3BhcmVudC0+
X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdo
dChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fbGVm
dDsKICAgICAgICB9CiAgICAgICAgaWYgKChfX3ctPl9NX3JpZ2h0ID09IDAgfHwgCiAgICAgICAg
ICAgICBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX2JsYWNrKSAmJgogICAg
ICAgICAgICAoX193LT5fTV9sZWZ0ID09IDAgfHwgCiAgICAgICAgICAgICBfX3ctPl9NX2xlZnQt
Pl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2spKSB7CiAgICAgICAgICBfX3ctPl9NX2NvbG9y
ID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgICBfX3ggPSBfX3hfcGFyZW50OwogICAgICAgICAg
X194X3BhcmVudCA9IF9feF9wYXJlbnQtPl9NX3BhcmVudDsKICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgaWYgKF9fdy0+X01fbGVmdCA9PSAwIHx8IAogICAgICAgICAgICAgIF9fdy0+X01fbGVm
dC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFjaykgewogICAgICAgICAgICBpZiAoX193LT5f
TV9yaWdodCkgX193LT5fTV9yaWdodC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAg
ICAgICAgICBfX3ctPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgICAgIF9SYl90
cmVlX3JvdGF0ZV9sZWZ0KF9fdywgX19yb290KTsKICAgICAgICAgICAgX193ID0gX194X3BhcmVu
dC0+X01fbGVmdDsKICAgICAgICAgIH0KICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfX3hfcGFy
ZW50LT5fTV9jb2xvcjsKICAgICAgICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJl
ZV9ibGFjazsKICAgICAgICAgIGlmIChfX3ctPl9NX2xlZnQpIF9fdy0+X01fbGVmdC0+X01fY29s
b3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9f
eF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAg
IGlmIChfX3gpIF9feC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogIH0KICByZXR1cm4g
X195Owp9CgogCiAKIAogCgoKCiAKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jLCBi
b29sIF9TX2luc3RhbmNlbGVzcz4KY2xhc3MgX1JiX3RyZWVfYWxsb2NfYmFzZSB7CnB1YmxpYzoK
ICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjphbGxvY2F0b3Jf
dHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29u
c3QgeyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3I7IH0KCiAgX1JiX3RyZWVfYWxsb2NfYmFzZShj
b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfTV9ub2RlX2FsbG9jYXRvcihfX2EpLCBf
TV9oZWFkZXIoMCkge30KCnByb3RlY3RlZDoKICB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9SYl90
cmVlX25vZGU8X1RwPiwgX0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgICBfTV9ub2Rl
X2FsbG9jYXRvcjsKICBfUmJfdHJlZV9ub2RlPF9UcD4qIF9NX2hlYWRlcjsKCiAgX1JiX3RyZWVf
bm9kZTxfVHA+KiBfTV9nZXRfbm9kZSgpIAogICAgeyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3Iu
YWxsb2NhdGUoMSk7IH0KICB2b2lkIF9NX3B1dF9ub2RlKF9SYl90cmVlX25vZGU8X1RwPiogX19w
KSAKICAgIHsgX01fbm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX3AsIDEpOyB9Cn07CgogCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KY2xhc3MgX1JiX3RyZWVfYWxsb2NfYmFz
ZTxfVHAsIF9BbGxvYywgdHJ1ZT4gewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2Nf
dHJhaXRzPF9UcCwgX0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgYWxs
b2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBl
KCk7IH0KCiAgX1JiX3RyZWVfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpIDogX01f
aGVhZGVyKDApIHt9Cgpwcm90ZWN0ZWQ6CiAgX1JiX3RyZWVfbm9kZTxfVHA+KiBfTV9oZWFkZXI7
CgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfUmJfdHJlZV9ub2RlPF9UcD4sIF9B
bGxvYz46Ol9BbGxvY190eXBlCiAgICAgICAgICBfQWxsb2NfdHlwZTsKCiAgX1JiX3RyZWVfbm9k
ZTxfVHA+KiBfTV9nZXRfbm9kZSgpCiAgICB7IHJldHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUo
MSk7IH0KICB2b2lkIF9NX3B1dF9ub2RlKF9SYl90cmVlX25vZGU8X1RwPiogX19wKQogICAgeyBf
QWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3AsIDEpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfUmJfdHJlZV9iYXNlCiAgOiBwdWJsaWMgX1JiX3RyZWVf
YWxsb2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9B
bGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CnsKICB0eXBlZGVmIF9S
Yl90cmVlX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAg
ICBfQmFzZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0
b3JfdHlwZTsKCiAgX1JiX3RyZWVfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSAKICAg
IDogX0Jhc2UoX19hKSB7IF9NX2hlYWRlciA9IF9NX2dldF9ub2RlKCk7IH0KICB+X1JiX3RyZWVf
YmFzZSgpIHsgX01fcHV0X25vZGUoX01faGVhZGVyKTsgfQoKfTsKCiMgNTE5ICIvdXNyL2xpYi9n
Y2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvc3RsX3RyZWUuaCIgMwoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNs
YXNzIF9LZXlPZlZhbHVlLCBjbGFzcyBfQ29tcGFyZSwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9
IGFsbG9jYXRvcjwgX1ZhbHVlID4gID4KY2xhc3MgX1JiX3RyZWUgOiBwcm90ZWN0ZWQgX1JiX3Ry
ZWVfYmFzZTxfVmFsdWUsIF9BbGxvYz4gewogIHR5cGVkZWYgX1JiX3RyZWVfYmFzZTxfVmFsdWUs
IF9BbGxvYz4gX0Jhc2U7CnByb3RlY3RlZDoKICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZSog
X0Jhc2VfcHRyOwogIHR5cGVkZWYgX1JiX3RyZWVfbm9kZTxfVmFsdWU+IF9SYl90cmVlX25vZGU7
CiAgdHlwZWRlZiBfUmJfdHJlZV9Db2xvcl90eXBlIF9Db2xvcl90eXBlOwpwdWJsaWM6CiAgdHlw
ZWRlZiBfS2V5IGtleV90eXBlOwogIHR5cGVkZWYgX1ZhbHVlIHZhbHVlX3R5cGU7CiAgdHlwZWRl
ZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3Rf
cG9pbnRlcjsKICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0
IHZhbHVlX3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9SYl90cmVlX25vZGUqIF9M
aW5rX3R5cGU7CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90
IGRpZmZlcmVuY2VfdHlwZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5
cGUgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0
IHsgcmV0dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0KCnByb3RlY3RlZDoKCgoKCgoKcHJv
dGVjdGVkOgoKICBfTGlua190eXBlIF9NX2NyZWF0ZV9ub2RlKGNvbnN0IHZhbHVlX3R5cGUmIF9f
eCkKICB7CiAgICBfTGlua190eXBlIF9fdG1wID0gX01fZ2V0X25vZGUoKTsKICAgIHRyeSAgewog
ICAgICBjb25zdHJ1Y3QoJl9fdG1wLT5fTV92YWx1ZV9maWVsZCwgX194KTsKICAgIH0KICAgIGNh
dGNoKC4uLikgeyAgX01fcHV0X25vZGUoX190bXApIDsgdGhyb3c7IH0gOwogICAgcmV0dXJuIF9f
dG1wOwogIH0KCiAgX0xpbmtfdHlwZSBfTV9jbG9uZV9ub2RlKF9MaW5rX3R5cGUgX194KQogIHsK
ICAgIF9MaW5rX3R5cGUgX190bXAgPSBfTV9jcmVhdGVfbm9kZShfX3gtPl9NX3ZhbHVlX2ZpZWxk
KTsKICAgIF9fdG1wLT5fTV9jb2xvciA9IF9feC0+X01fY29sb3I7CiAgICBfX3RtcC0+X01fbGVm
dCA9IDA7CiAgICBfX3RtcC0+X01fcmlnaHQgPSAwOwogICAgcmV0dXJuIF9fdG1wOwogIH0KCiAg
dm9pZCBkZXN0cm95X25vZGUoX0xpbmtfdHlwZSBfX3ApCiAgewogICAgZGVzdHJveSgmX19wLT5f
TV92YWx1ZV9maWVsZCk7CiAgICBfTV9wdXRfbm9kZShfX3ApOwogIH0KCnByb3RlY3RlZDoKICBz
aXplX3R5cGUgX01fbm9kZV9jb3VudDsgIAogIF9Db21wYXJlIF9NX2tleV9jb21wYXJlOwoKICBf
TGlua190eXBlJiBfTV9yb290KCkgY29uc3QgCiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSYpIF9N
X2hlYWRlci0+X01fcGFyZW50OyB9CiAgX0xpbmtfdHlwZSYgX01fbGVmdG1vc3QoKSBjb25zdCAK
ICAgIHsgcmV0dXJuIChfTGlua190eXBlJikgX01faGVhZGVyLT5fTV9sZWZ0OyB9CiAgX0xpbmtf
dHlwZSYgX01fcmlnaHRtb3N0KCkgY29uc3QgCiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSYpIF9N
X2hlYWRlci0+X01fcmlnaHQ7IH0KCiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX2xlZnQoX0xpbmtf
dHlwZSBfX3gpCiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fbGVmdCk7IH0KICBz
dGF0aWMgX0xpbmtfdHlwZSYgX1NfcmlnaHQoX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiAo
X0xpbmtfdHlwZSYpKF9feC0+X01fcmlnaHQpOyB9CiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX3Bh
cmVudChfTGlua190eXBlIF9feCkKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9w
YXJlbnQpOyB9CiAgc3RhdGljIHJlZmVyZW5jZSBfU192YWx1ZShfTGlua190eXBlIF9feCkKICAg
IHsgcmV0dXJuIF9feC0+X01fdmFsdWVfZmllbGQ7IH0KICBzdGF0aWMgY29uc3QgX0tleSYgX1Nf
a2V5KF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gX0tleU9mVmFsdWUoKShfU192YWx1ZShf
X3gpKTsgfQogIHN0YXRpYyBfQ29sb3JfdHlwZSYgX1NfY29sb3IoX0xpbmtfdHlwZSBfX3gpCiAg
ICB7IHJldHVybiAoX0NvbG9yX3R5cGUmKShfX3gtPl9NX2NvbG9yKTsgfQoKICBzdGF0aWMgX0xp
bmtfdHlwZSYgX1NfbGVmdChfQmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUm
KShfX3gtPl9NX2xlZnQpOyB9CiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX3JpZ2h0KF9CYXNlX3B0
ciBfX3gpCiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fcmlnaHQpOyB9CiAgc3Rh
dGljIF9MaW5rX3R5cGUmIF9TX3BhcmVudChfQmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gKF9M
aW5rX3R5cGUmKShfX3gtPl9NX3BhcmVudCk7IH0KICBzdGF0aWMgcmVmZXJlbmNlIF9TX3ZhbHVl
KF9CYXNlX3B0ciBfX3gpCiAgICB7IHJldHVybiAoKF9MaW5rX3R5cGUpX194KS0+X01fdmFsdWVf
ZmllbGQ7IH0KICBzdGF0aWMgY29uc3QgX0tleSYgX1Nfa2V5KF9CYXNlX3B0ciBfX3gpCiAgICB7
IHJldHVybiBfS2V5T2ZWYWx1ZSgpKF9TX3ZhbHVlKF9MaW5rX3R5cGUoX194KSkpO30gCiAgc3Rh
dGljIF9Db2xvcl90eXBlJiBfU19jb2xvcihfQmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gKF9D
b2xvcl90eXBlJikoX0xpbmtfdHlwZShfX3gpLT5fTV9jb2xvcik7IH0KCiAgc3RhdGljIF9MaW5r
X3R5cGUgX1NfbWluaW11bShfTGlua190eXBlIF9feCkgCiAgICB7IHJldHVybiAoX0xpbmtfdHlw
ZSkgIF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWluaW11bShfX3gpOyB9CgogIHN0YXRpYyBfTGlu
a190eXBlIF9TX21heGltdW0oX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiAoX0xpbmtfdHlw
ZSkgX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVtKF9feCk7IH0KCnB1YmxpYzoKICB0eXBl
ZGVmIF9SYl90cmVlX2l0ZXJhdG9yPHZhbHVlX3R5cGUsIHJlZmVyZW5jZSwgcG9pbnRlcj4gaXRl
cmF0b3I7CiAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjx2YWx1ZV90eXBlLCBjb25zdF9yZWZl
cmVuY2UsIGNvbnN0X3BvaW50ZXI+IAogICAgICAgICAgY29uc3RfaXRlcmF0b3I7CgoKICB0eXBl
ZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0
b3I7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9y
OwoKCgoKCgoKIAoKcHJpdmF0ZToKICBpdGVyYXRvciBfTV9pbnNlcnQoX0Jhc2VfcHRyIF9feCwg
X0Jhc2VfcHRyIF9feSwgY29uc3QgdmFsdWVfdHlwZSYgX192KTsKICBfTGlua190eXBlIF9NX2Nv
cHkoX0xpbmtfdHlwZSBfX3gsIF9MaW5rX3R5cGUgX19wKTsKICB2b2lkIF9NX2VyYXNlKF9MaW5r
X3R5cGUgX194KTsKCnB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg
X1JiX3RyZWUoKQogICAgOiBfQmFzZShhbGxvY2F0b3JfdHlwZSgpKSwgX01fbm9kZV9jb3VudCgw
KSwgX01fa2V5X2NvbXBhcmUoKQogICAgeyBfTV9lbXB0eV9pbml0aWFsaXplKCk7IH0KCiAgX1Ji
X3RyZWUoY29uc3QgX0NvbXBhcmUmIF9fY29tcCkKICAgIDogX0Jhc2UoYWxsb2NhdG9yX3R5cGUo
KSksIF9NX25vZGVfY291bnQoMCksIF9NX2tleV9jb21wYXJlKF9fY29tcCkgCiAgICB7IF9NX2Vt
cHR5X2luaXRpYWxpemUoKTsgfQoKICBfUmJfdHJlZShjb25zdCBfQ29tcGFyZSYgX19jb21wLCBj
b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfQmFzZShfX2EpLCBfTV9ub2RlX2NvdW50
KDApLCBfTV9rZXlfY29tcGFyZShfX2NvbXApIAogICAgeyBfTV9lbXB0eV9pbml0aWFsaXplKCk7
IH0KCiAgX1JiX3RyZWUoY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPiYgX194KSAKICAgIDogX0Jhc2UoX194LmdldF9hbGxvY2F0b3IoKSksCiAg
ICAgIF9NX25vZGVfY291bnQoMCksIF9NX2tleV9jb21wYXJlKF9feC5fTV9rZXlfY29tcGFyZSkK
ICB7IAogICAgaWYgKF9feC5fTV9yb290KCkgPT0gMCkKICAgICAgX01fZW1wdHlfaW5pdGlhbGl6
ZSgpOwogICAgZWxzZSB7CiAgICAgIF9TX2NvbG9yKF9NX2hlYWRlcikgPSBfU19yYl90cmVlX3Jl
ZDsKICAgICAgX01fcm9vdCgpID0gX01fY29weShfX3guX01fcm9vdCgpLCBfTV9oZWFkZXIpOwog
ICAgICBfTV9sZWZ0bW9zdCgpID0gX1NfbWluaW11bShfTV9yb290KCkpOwogICAgICBfTV9yaWdo
dG1vc3QoKSA9IF9TX21heGltdW0oX01fcm9vdCgpKTsKICAgIH0KICAgIF9NX25vZGVfY291bnQg
PSBfX3guX01fbm9kZV9jb3VudDsKICB9CiAgfl9SYl90cmVlKCkgeyBjbGVhcigpOyB9CiAgX1Ji
X3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgCiAgb3BlcmF0
b3I9KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv
Yz4mIF9feCk7Cgpwcml2YXRlOgogIHZvaWQgX01fZW1wdHlfaW5pdGlhbGl6ZSgpIHsKICAgIF9T
X2NvbG9yKF9NX2hlYWRlcikgPSBfU19yYl90cmVlX3JlZDsgIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICBfTV9yb290KCkgPSAwOwogICAgX01fbGVmdG1v
c3QoKSA9IF9NX2hlYWRlcjsKICAgIF9NX3JpZ2h0bW9zdCgpID0gX01faGVhZGVyOwogIH0KCnB1
YmxpYzogICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIF9Db21wYXJlIGtl
eV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fa2V5X2NvbXBhcmU7IH0KICBpdGVyYXRvciBiZWdp
bigpIHsgcmV0dXJuIF9NX2xlZnRtb3N0KCk7IH0KICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNv
bnN0IHsgcmV0dXJuIF9NX2xlZnRtb3N0KCk7IH0KICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBf
TV9oZWFkZXI7IH0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV9oZWFk
ZXI7IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0
b3IoZW5kKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7IAog
ICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyAKICB9CiAgcmV2ZXJzZV9p
dGVyYXRvciByZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQogIGNv
bnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsgCiAgICByZXR1cm4gY29uc3RfcmV2
ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsKICB9IAogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVy
biBfTV9ub2RlX2NvdW50ID09IDA7IH0KICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IF9NX25vZGVfY291bnQ7IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBz
aXplX3R5cGUoLTEpOyB9CgogIHZvaWQgc3dhcChfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZW
YWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3QpIHsKICAgICA6OnN3YXAoX01faGVhZGVyLCBfX3Qu
X01faGVhZGVyKTsKICAgICA6OnN3YXAoX01fbm9kZV9jb3VudCwgX190Ll9NX25vZGVfY291bnQp
OwogICAgIDo6c3dhcChfTV9rZXlfY29tcGFyZSwgX190Ll9NX2tleV9jb21wYXJlKTsKICB9CiAg
ICAKcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICBwYWlyPGl0ZXJh
dG9yLGJvb2w+IGluc2VydF91bmlxdWUoY29uc3QgdmFsdWVfdHlwZSYgX194KTsKICBpdGVyYXRv
ciBpbnNlcnRfZXF1YWwoY29uc3QgdmFsdWVfdHlwZSYgX194KTsKCiAgaXRlcmF0b3IgaW5zZXJ0
X3VuaXF1ZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwogIGl0
ZXJhdG9yIGluc2VydF9lcXVhbChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBl
JiBfX3gpOwoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0
X3VuaXF1ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpOwog
IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydF9lcXVhbChfSW5w
dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpOwoKCgoKCgoKICB2b2lk
IGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pOwogIHNpemVfdHlwZSBlcmFzZShjb25zdCBrZXlf
dHlwZSYgX194KTsKICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFz
dCk7CiAgdm9pZCBlcmFzZShjb25zdCBrZXlfdHlwZSogX19maXJzdCwgY29uc3Qga2V5X3R5cGUq
IF9fbGFzdCk7CiAgdm9pZCBjbGVhcigpIHsKICAgIGlmIChfTV9ub2RlX2NvdW50ICE9IDApIHsK
ICAgICAgX01fZXJhc2UoX01fcm9vdCgpKTsKICAgICAgX01fbGVmdG1vc3QoKSA9IF9NX2hlYWRl
cjsKICAgICAgX01fcm9vdCgpID0gMDsKICAgICAgX01fcmlnaHRtb3N0KCkgPSBfTV9oZWFkZXI7
CiAgICAgIF9NX25vZGVfY291bnQgPSAwOwogICAgfQogIH0gICAgICAKCnB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlw
ZSYgX194KTsKICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0
OwogIHNpemVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdDsKICBpdGVyYXRv
ciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KTsKICBjb25zdF9pdGVyYXRvciBsb3dl
cl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdDsKICBpdGVyYXRvciB1cHBlcl9ib3Vu
ZChjb25zdCBrZXlfdHlwZSYgX194KTsKICBjb25zdF9pdGVyYXRvciB1cHBlcl9ib3VuZChjb25z
dCBrZXlfdHlwZSYgX194KSBjb25zdDsKICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiBlcXVhbF9y
YW5nZShjb25zdCBrZXlfdHlwZSYgX194KTsKICBwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9p
dGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CgpwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIGJvb2wgX19yYl92ZXJpZnkoKSBj
b25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlP
ZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBi
b29sIApvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9D
b21wYXJlLF9BbGxvYz4mIF9feCwgCiAgICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxfVmFs
dWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQp7CiAgcmV0dXJuIF9feC5zaXpl
KCkgPT0gX195LnNpemUoKSAmJgogICAgICAgICBlcXVhbChfX3guYmVnaW4oKSwgX194LmVuZCgp
LCBfX3kuYmVnaW4oKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNs
YXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+
CmlubGluZSBib29sIApvcGVyYXRvcjwoY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9m
VmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LCAKICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9L
ZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKewogIHJldHVybiBs
ZXhpY29ncmFwaGljYWxfY29tcGFyZShfX3guYmVnaW4oKSwgX194LmVuZCgpLCAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7Cn0KCgoKdGVt
cGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAg
ICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgCnN3YXAoX1Ji
X3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LCAKICAg
ICBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kp
CnsKICBfX3guc3dhcChfX3kpOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Zh
bHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3Mg
X0FsbG9jPgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+
JiAKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6
b3BlcmF0b3I9KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJl
LF9BbGxvYz4mIF9feCkKewogIGlmICh0aGlzICE9ICZfX3gpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCiAgICBjbGVhcigpOwogICAgX01fbm9kZV9jb3VudCA9IDA7CiAgICBf
TV9rZXlfY29tcGFyZSA9IF9feC5fTV9rZXlfY29tcGFyZTsgICAgICAgIAogICAgaWYgKF9feC5f
TV9yb290KCkgPT0gMCkgewogICAgICBfTV9yb290KCkgPSAwOwogICAgICBfTV9sZWZ0bW9zdCgp
ID0gX01faGVhZGVyOwogICAgICBfTV9yaWdodG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgIH0KICAg
IGVsc2UgewogICAgICBfTV9yb290KCkgPSBfTV9jb3B5KF9feC5fTV9yb290KCksIF9NX2hlYWRl
cik7CiAgICAgIF9NX2xlZnRtb3N0KCkgPSBfU19taW5pbXVtKF9NX3Jvb3QoKSk7CiAgICAgIF9N
X3JpZ2h0bW9zdCgpID0gX1NfbWF4aW11bShfTV9yb290KCkpOwogICAgICBfTV9ub2RlX2NvdW50
ID0gX194Ll9NX25vZGVfY291bnQ7CiAgICB9CiAgfQogIHJldHVybiAqdGhpczsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAg
ICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxf
VmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3RyZWU8X0tl
eSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6X01faW5zZXJ0KF9CYXNl
X3B0ciBfX3hfLCBfQmFzZV9wdHIgX195XywgY29uc3QgX1ZhbHVlJiBfX3YpCnsKICBfTGlua190
eXBlIF9feCA9IChfTGlua190eXBlKSBfX3hfOwogIF9MaW5rX3R5cGUgX195ID0gKF9MaW5rX3R5
cGUpIF9feV87CiAgX0xpbmtfdHlwZSBfX3o7CgogIGlmIChfX3kgPT0gX01faGVhZGVyIHx8IF9f
eCAhPSAwIHx8IAogICAgICBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tl
eShfX3kpKSkgewogICAgX196ID0gX01fY3JlYXRlX25vZGUoX192KTsKICAgIF9TX2xlZnQoX195
KSA9IF9fejsgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAogICAgaWYgKF9feSA9PSBfTV9oZWFkZXIpIHsKICAgICAgX01fcm9vdCgpID0gX196
OwogICAgICBfTV9yaWdodG1vc3QoKSA9IF9fejsKICAgIH0KICAgIGVsc2UgaWYgKF9feSA9PSBf
TV9sZWZ0bW9zdCgpKQogICAgICBfTV9sZWZ0bW9zdCgpID0gX196OyAgICAKICB9CiAgZWxzZSB7
CiAgICBfX3ogPSBfTV9jcmVhdGVfbm9kZShfX3YpOwogICAgX1NfcmlnaHQoX195KSA9IF9fejsK
ICAgIGlmIChfX3kgPT0gX01fcmlnaHRtb3N0KCkpCiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX196
OyAgIAogIH0KICBfU19wYXJlbnQoX196KSA9IF9feTsKICBfU19sZWZ0KF9feikgPSAwOwogIF9T
X3JpZ2h0KF9feikgPSAwOwogIF9SYl90cmVlX3JlYmFsYW5jZShfX3osIF9NX2hlYWRlci0+X01f
cGFyZW50KTsKICArK19NX25vZGVfY291bnQ7CiAgcmV0dXJuIGl0ZXJhdG9yKF9feik7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAg
ICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9L
ZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCl9SYl90cmVl
PF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6Omluc2VydF9lcXVh
bChjb25zdCBfVmFsdWUmIF9fdikKewogIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogIF9M
aW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwogIHdoaWxlIChfX3ggIT0gMCkgewogICAgX195ID0g
X194OwogICAgX194ID0gX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXko
X194KSkgPyAKICAgICAgICAgICAgX1NfbGVmdChfX3gpIDogX1NfcmlnaHQoX194KTsKICB9CiAg
cmV0dXJuIF9NX2luc2VydChfX3gsIF9feSwgX192KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5
LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21w
YXJlLCBjbGFzcyBfQWxsb2M+CnBhaXI8dHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tl
eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IsIAogICAgIGJvb2w+Cl9SYl90cmVl
PF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6Omluc2VydF91bmlx
dWUoY29uc3QgX1ZhbHVlJiBfX3YpCnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICBf
TGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKICBib29sIF9fY29tcCA9IHRydWU7CiAgd2hpbGUg
KF9feCAhPSAwKSB7CiAgICBfX3kgPSBfX3g7CiAgICBfX2NvbXAgPSBfTV9rZXlfY29tcGFyZShf
S2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3gpKTsKICAgIF9feCA9IF9fY29tcCA/IF9TX2xl
ZnQoX194KSA6IF9TX3JpZ2h0KF9feCk7CiAgfQogIGl0ZXJhdG9yIF9faiA9IGl0ZXJhdG9yKF9f
eSk7ICAgCiAgaWYgKF9fY29tcCkKICAgIGlmIChfX2ogPT0gYmVnaW4oKSkgICAgIAogICAgICBy
ZXR1cm4gcGFpcjxpdGVyYXRvcixib29sPihfTV9pbnNlcnQoX194LCBfX3ksIF9fdiksIHRydWUp
OwogICAgZWxzZQogICAgICAtLV9fajsKICBpZiAoX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fai5f
TV9ub2RlKSwgX0tleU9mVmFsdWUoKShfX3YpKSkKICAgIHJldHVybiBwYWlyPGl0ZXJhdG9yLGJv
b2w+KF9NX2luc2VydChfX3gsIF9feSwgX192KSwgdHJ1ZSk7CiAgcmV0dXJuIHBhaXI8aXRlcmF0
b3IsYm9vbD4oX19qLCBmYWxzZSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Zh
bCwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9B
bGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJl
LCBfQWxsb2M+OjppdGVyYXRvciAKX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9D
b21wYXJlLCBfQWxsb2M+CiAgOjppbnNlcnRfdW5pcXVlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNv
bnN0IF9WYWwmIF9fdikKewogIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVhZGVyLT5f
TV9sZWZ0KSB7ICAKICAgIGlmIChzaXplKCkgPiAwICYmIAogICAgICAgIF9NX2tleV9jb21wYXJl
KF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSkpKQogICAgICBy
ZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlvbi5fTV9ub2RlLCBf
X3YpOwogICAgIAogICAgZWxzZQogICAgICByZXR1cm4gaW5zZXJ0X3VuaXF1ZShfX3YpLmZpcnN0
OwogIH0gZWxzZSBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2hlYWRlcikgeyAgCiAgICBp
ZiAoX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9NX3JpZ2h0bW9zdCgpKSwgX0tleU9mVmFsdWUoKShf
X3YpKSkKICAgICAgcmV0dXJuIF9NX2luc2VydCgwLCBfTV9yaWdodG1vc3QoKSwgX192KTsKICAg
IGVsc2UKICAgICAgcmV0dXJuIGluc2VydF91bmlxdWUoX192KS5maXJzdDsKICB9IGVsc2Ugewog
ICAgaXRlcmF0b3IgX19iZWZvcmUgPSBfX3Bvc2l0aW9uOwogICAgLS1fX2JlZm9yZTsKICAgIGlm
IChfTV9rZXlfY29tcGFyZShfU19rZXkoX19iZWZvcmUuX01fbm9kZSksIF9LZXlPZlZhbHVlKCko
X192KSkgCiAgICAgICAgJiYgX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19r
ZXkoX19wb3NpdGlvbi5fTV9ub2RlKSkpIHsKICAgICAgaWYgKF9TX3JpZ2h0KF9fYmVmb3JlLl9N
X25vZGUpID09IDApCiAgICAgICAgcmV0dXJuIF9NX2luc2VydCgwLCBfX2JlZm9yZS5fTV9ub2Rl
LCBfX3YpOyAKICAgICAgZWxzZQogICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5f
TV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7CiAgICAgCiAgICB9IGVsc2UKICAgICAg
cmV0dXJuIGluc2VydF91bmlxdWUoX192KS5maXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
S2V5LCBjbGFzcyBfVmFsLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29t
cGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFs
dWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IgCl9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZW
YWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjppbnNlcnRfZXF1YWwoaXRlcmF0b3IgX19wb3NpdGlv
biwgY29uc3QgX1ZhbCYgX192KQp7CiAgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFk
ZXItPl9NX2xlZnQpIHsgIAogICAgaWYgKHNpemUoKSA+IDAgJiYgCiAgICAgICAgX01fa2V5X2Nv
bXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSkpCiAg
ICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25v
ZGUsIF9fdik7CiAgICAgCiAgICBlbHNlCiAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwoX192KTsK
ICB9IGVsc2UgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXIpIHsgCiAgICBpZiAo
IV9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9NX3JpZ2h0bW9zdCgp
KSkpCiAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX01fcmlnaHRtb3N0KCksIF9fdik7CiAgICBl
bHNlCiAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwoX192KTsKICB9IGVsc2UgewogICAgaXRlcmF0
b3IgX19iZWZvcmUgPSBfX3Bvc2l0aW9uOwogICAgLS1fX2JlZm9yZTsKICAgIGlmICghX01fa2V5
X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX19iZWZvcmUuX01fbm9kZSkpCiAg
ICAgICAgJiYgIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpLCBfS2V5
T2ZWYWx1ZSgpKF9fdikpKSB7CiAgICAgIGlmIChfU19yaWdodChfX2JlZm9yZS5fTV9ub2RlKSA9
PSAwKQogICAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX19iZWZvcmUuX01fbm9kZSwgX192KTsg
CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwg
X19wb3NpdGlvbi5fTV9ub2RlLCBfX3YpOwogICAgIAogICAgfSBlbHNlCiAgICAgIHJldHVybiBp
bnNlcnRfZXF1YWwoX192KTsKICB9Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9W
YWwsIGNsYXNzIF9Lb1YsIGNsYXNzIF9DbXAsIGNsYXNzIF9BbGxvYz4KICB0ZW1wbGF0ZTxjbGFz
cyBfSUk+CnZvaWQgX1JiX3RyZWU8X0tleSxfVmFsLF9Lb1YsX0NtcCxfQWxsb2M+CiAgOjppbnNl
cnRfZXF1YWwoX0lJIF9fZmlyc3QsIF9JSSBfX2xhc3QpCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0g
X19sYXN0OyArK19fZmlyc3QpCiAgICBpbnNlcnRfZXF1YWwoKl9fZmlyc3QpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbCwgY2xhc3MgX0tvViwgY2xhc3MgX0NtcCwgY2xhc3Mg
X0FsbG9jPiAKICB0ZW1wbGF0ZTxjbGFzcyBfSUk+CnZvaWQgX1JiX3RyZWU8X0tleSxfVmFsLF9L
b1YsX0NtcCxfQWxsb2M+CiAgOjppbnNlcnRfdW5pcXVlKF9JSSBfX2ZpcnN0LCBfSUkgX19sYXN0
KSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaW5zZXJ0X3Vu
aXF1ZSgqX19maXJzdCk7Cn0KCiMgMTAyMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtl
LWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF90cmVlLmgiIDMKCiAg
ICAgICAgIAp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZW
YWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9p
ZCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjpl
cmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQp7CiAgX0xpbmtfdHlwZSBfX3kgPSAKICAgIChfTGlu
a190eXBlKSBfUmJfdHJlZV9yZWJhbGFuY2VfZm9yX2VyYXNlKF9fcG9zaXRpb24uX01fbm9kZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2hlYWRlci0+
X01fcGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X01faGVhZGVyLT5fTV9sZWZ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX01faGVhZGVyLT5fTV9yaWdodCk7CiAgZGVzdHJveV9ub2RlKF9feSk7CiAgLS1f
TV9ub2RlX2NvdW50Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFz
cyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0
eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+
OjpzaXplX3R5cGUgCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9B
bGxvYz46OmVyYXNlKGNvbnN0IF9LZXkmIF9feCkKewogIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+
IF9fcCA9IGVxdWFsX3JhbmdlKF9feCk7CiAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgZGlzdGFuY2Uo
X19wLmZpcnN0LCBfX3Auc2Vjb25kLCBfX24pOwogIGVyYXNlKF9fcC5maXJzdCwgX19wLnNlY29u
ZCk7CiAgcmV0dXJuIF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWwsIGNs
YXNzIF9Lb1YsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVl
PF9LZXksIF9WYWwsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+OjpfTGlua190eXBlIApfUmJfdHJl
ZTxfS2V5LF9WYWwsX0tvVixfQ29tcGFyZSxfQWxsb2M+CiAgOjpfTV9jb3B5KF9MaW5rX3R5cGUg
X194LCBfTGlua190eXBlIF9fcCkKewogICAgICAgICAgICAgICAgICAgICAgICAgCiAgX0xpbmtf
dHlwZSBfX3RvcCA9IF9NX2Nsb25lX25vZGUoX194KTsKICBfX3RvcC0+X01fcGFyZW50ID0gX19w
OwogCiAgdHJ5ICB7CiAgICBpZiAoX194LT5fTV9yaWdodCkKICAgICAgX190b3AtPl9NX3JpZ2h0
ID0gX01fY29weShfU19yaWdodChfX3gpLCBfX3RvcCk7CiAgICBfX3AgPSBfX3RvcDsKICAgIF9f
eCA9IF9TX2xlZnQoX194KTsKCiAgICB3aGlsZSAoX194ICE9IDApIHsKICAgICAgX0xpbmtfdHlw
ZSBfX3kgPSBfTV9jbG9uZV9ub2RlKF9feCk7CiAgICAgIF9fcC0+X01fbGVmdCA9IF9feTsKICAg
ICAgX195LT5fTV9wYXJlbnQgPSBfX3A7CiAgICAgIGlmIChfX3gtPl9NX3JpZ2h0KQogICAgICAg
IF9feS0+X01fcmlnaHQgPSBfTV9jb3B5KF9TX3JpZ2h0KF9feCksIF9feSk7CiAgICAgIF9fcCA9
IF9feTsKICAgICAgX194ID0gX1NfbGVmdChfX3gpOwogICAgfQogIH0KICBjYXRjaCguLi4pIHsg
IF9NX2VyYXNlKF9fdG9wKSA7IHRocm93OyB9IDsKCiAgcmV0dXJuIF9fdG9wOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAg
ICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp2b2lkIF9SYl90cmVlPF9LZXksX1ZhbHVl
LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6Ol9NX2VyYXNlKF9MaW5rX3R5cGUgX194
KQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIHdoaWxlIChfX3ggIT0gMCkg
ewogICAgX01fZXJhc2UoX1NfcmlnaHQoX194KSk7CiAgICBfTGlua190eXBlIF9feSA9IF9TX2xl
ZnQoX194KTsKICAgIGRlc3Ryb3lfbm9kZShfX3gpOwogICAgX194ID0gX195OwogIH0KfQoKdGVt
cGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAg
ICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4Kdm9pZCBfUmJfdHJlZTxfS2V5LF9W
YWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjplcmFzZShpdGVyYXRvciBfX2Zp
cnN0LCBpdGVyYXRvciBfX2xhc3QpCnsKICBpZiAoX19maXJzdCA9PSBiZWdpbigpICYmIF9fbGFz
dCA9PSBlbmQoKSkKICAgIGNsZWFyKCk7CiAgZWxzZQogICAgd2hpbGUgKF9fZmlyc3QgIT0gX19s
YXN0KSBlcmFzZShfX2ZpcnN0KyspOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Zh
bHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3Mg
X0FsbG9jPgp2b2lkIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9B
bGxvYz4KICA6OmVyYXNlKGNvbnN0IF9LZXkqIF9fZmlyc3QsIGNvbnN0IF9LZXkqIF9fbGFzdCkg
CnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIGVyYXNlKCpfX2ZpcnN0KyspOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAg
ICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5
LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvciAKX1JiX3RyZWU8
X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6ZmluZChjb25zdCBfS2V5
JiBfX2spCnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsgICAgICAgCiAgX0xpbmtfdHlw
ZSBfX3ggPSBfTV9yb290KCk7ICAgICAgIAoKICB3aGlsZSAoX194ICE9IDApIAogICAgaWYgKCFf
TV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAgICAgX195ID0gX194LCBfX3ggPSBf
U19sZWZ0KF9feCk7CiAgICBlbHNlCiAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CgogIGl0ZXJh
dG9yIF9faiA9IGl0ZXJhdG9yKF9feSk7ICAgCiAgcmV0dXJuIChfX2ogPT0gZW5kKCkgfHwgX01f
a2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX19qLl9NX25vZGUpKSkgPyAKICAgICBlbmQoKSA6IF9f
ajsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFs
dWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1Ji
X3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRl
cmF0b3IgCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46
OmZpbmQoY29uc3QgX0tleSYgX19rKSBjb25zdAp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFk
ZXI7ICAKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsgIAoKICB3aGlsZSAoX194ICE9IDAp
IHsKICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykpCiAgICAgIF9feSA9
IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgZWxzZQogICAgICBfX3ggPSBfU19yaWdodChf
X3gpOwogIH0KICBjb25zdF9pdGVyYXRvciBfX2ogPSBjb25zdF9pdGVyYXRvcihfX3kpOyAgIAog
IHJldHVybiAoX19qID09IGVuZCgpIHx8IF9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5KF9fai5f
TV9ub2RlKSkpID8KICAgIGVuZCgpIDogX19qOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xh
c3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwg
Y2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxf
Q29tcGFyZSxfQWxsb2M+OjpzaXplX3R5cGUgCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZh
bHVlLF9Db21wYXJlLF9BbGxvYz4KICA6OmNvdW50KGNvbnN0IF9LZXkmIF9faykgY29uc3QKewog
IHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPiBfX3AgPSBlcXVhbF9yYW5nZShf
X2spOwogIHNpemVfdHlwZSBfX24gPSAwOwogIGRpc3RhbmNlKF9fcC5maXJzdCwgX19wLnNlY29u
ZCwgX19uKTsKICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Zh
bHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3Mg
X0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFy
ZSxfQWxsb2M+OjppdGVyYXRvciAKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPgogIDo6bG93ZXJfYm91bmQoY29uc3QgX0tleSYgX19rKQp7CiAgX0xpbmtf
dHlwZSBfX3kgPSBfTV9oZWFkZXI7ICAKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsgIAoK
ICB3aGlsZSAoX194ICE9IDApIAogICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwg
X19rKSkKICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICBlbHNlCiAgICAg
IF9feCA9IF9TX3JpZ2h0KF9feCk7CgogIHJldHVybiBpdGVyYXRvcihfX3kpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAg
ICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9W
YWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpjb25zdF9pdGVyYXRvciAKX1JiX3Ry
ZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6bG93ZXJfYm91
bmQoY29uc3QgX0tleSYgX19rKSBjb25zdAp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7
ICAKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsgIAoKICB3aGlsZSAoX194ICE9IDApIAog
ICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAgICAgX195ID0gX194
LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICBlbHNlCiAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7
CgogIHJldHVybiBjb25zdF9pdGVyYXRvcihfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwg
Y2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFy
ZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1
ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvciAKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9m
VmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6dXBwZXJfYm91bmQoY29uc3QgX0tleSYgX19rKQp7
CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7ICAKICBfTGlua190eXBlIF9feCA9IF9NX3Jv
b3QoKTsgIAoKICAgd2hpbGUgKF9feCAhPSAwKSAKICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX19r
LCBfU19rZXkoX194KSkpCiAgICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAg
ICBlbHNlCiAgICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoKICAgcmV0dXJuIGl0ZXJhdG9yKF9f
eSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZh
bHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9S
Yl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OmNvbnN0X2l0
ZXJhdG9yIApfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+
CiAgOjp1cHBlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spIGNvbnN0CnsKICBfTGlua190eXBlIF9f
eSA9IF9NX2hlYWRlcjsgIAogIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOyAgCgogICB3aGls
ZSAoX194ICE9IDApIAogICAgIGlmIChfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX3gpKSkK
ICAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgIGVsc2UKICAgICAgIF9f
eCA9IF9TX3JpZ2h0KF9feCk7CgogICByZXR1cm4gY29uc3RfaXRlcmF0b3IoX195KTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAg
ICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIApwYWlyPHR5cGVuYW1l
IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJh
dG9yLAogICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21w
YXJlLF9BbGxvYz46Oml0ZXJhdG9yPgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxf
Q29tcGFyZSxfQWxsb2M+CiAgOjplcXVhbF9yYW5nZShjb25zdCBfS2V5JiBfX2spCnsKICByZXR1
cm4gcGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+KGxvd2VyX2JvdW5kKF9fayksIHVwcGVyX2JvdW5k
KF9faykpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS29W
LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgCnBhaXI8dHlwZW5hbWUgX1Ji
X3RyZWU8X0tleSwgX1ZhbHVlLCBfS29WLCBfQ29tcGFyZSwgX0FsbG9jPjo6Y29uc3RfaXRlcmF0
b3IsCiAgICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbHVlLCBfS29WLCBfQ29tcGFyZSwg
X0FsbG9jPjo6Y29uc3RfaXRlcmF0b3I+Cl9SYl90cmVlPF9LZXksIF9WYWx1ZSwgX0tvViwgX0Nv
bXBhcmUsIF9BbGxvYz4KICA6OmVxdWFsX3JhbmdlKGNvbnN0IF9LZXkmIF9faykgY29uc3QKewog
IHJldHVybiBwYWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPihsb3dlcl9ib3VuZChf
X2spLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cHBlcl9i
b3VuZChfX2spKTsKfQoKaW5saW5lIGludCAKX19ibGFja19jb3VudChfUmJfdHJlZV9ub2RlX2Jh
c2UqIF9fbm9kZSwgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3Jvb3QpCnsKICBpZiAoX19ub2RlID09
IDApCiAgICByZXR1cm4gMDsKICBlbHNlIHsKICAgIGludCBfX2JjID0gX19ub2RlLT5fTV9jb2xv
ciA9PSBfU19yYl90cmVlX2JsYWNrID8gMSA6IDA7CiAgICBpZiAoX19ub2RlID09IF9fcm9vdCkK
ICAgICAgcmV0dXJuIF9fYmM7CiAgICBlbHNlCiAgICAgIHJldHVybiBfX2JjICsgX19ibGFja19j
b3VudChfX25vZGUtPl9NX3BhcmVudCwgX19yb290KTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
S2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9D
b21wYXJlLCBjbGFzcyBfQWxsb2M+CmJvb2wgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFs
dWUsX0NvbXBhcmUsX0FsbG9jPjo6X19yYl92ZXJpZnkoKSBjb25zdAp7CiAgaWYgKF9NX25vZGVf
Y291bnQgPT0gMCB8fCBiZWdpbigpID09IGVuZCgpKQogICAgcmV0dXJuIF9NX25vZGVfY291bnQg
PT0gMCAmJiBiZWdpbigpID09IGVuZCgpICYmCiAgICAgIF9NX2hlYWRlci0+X01fbGVmdCA9PSBf
TV9oZWFkZXIgJiYgX01faGVhZGVyLT5fTV9yaWdodCA9PSBfTV9oZWFkZXI7CiAgCiAgaW50IF9f
bGVuID0gX19ibGFja19jb3VudChfTV9sZWZ0bW9zdCgpLCBfTV9yb290KCkpOwogIGZvciAoY29u
c3RfaXRlcmF0b3IgX19pdCA9IGJlZ2luKCk7IF9faXQgIT0gZW5kKCk7ICsrX19pdCkgewogICAg
X0xpbmtfdHlwZSBfX3ggPSAoX0xpbmtfdHlwZSkgX19pdC5fTV9ub2RlOwogICAgX0xpbmtfdHlw
ZSBfX0wgPSBfU19sZWZ0KF9feCk7CiAgICBfTGlua190eXBlIF9fUiA9IF9TX3JpZ2h0KF9feCk7
CgogICAgaWYgKF9feC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpCiAgICAgIGlmICgoX19M
ICYmIF9fTC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpIHx8CiAgICAgICAgICAoX19SICYm
IF9fUi0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpKQogICAgICAgIHJldHVybiBmYWxzZTsK
CiAgICBpZiAoX19MICYmIF9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfU19rZXkoX19MKSkp
CiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmIChfX1IgJiYgX01fa2V5X2NvbXBhcmUoX1Nfa2V5
KF9fUiksIF9TX2tleShfX3gpKSkKICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIGlmICghX19MICYm
ICFfX1IgJiYgX19ibGFja19jb3VudChfX3gsIF9NX3Jvb3QoKSkgIT0gX19sZW4pCiAgICAgIHJl
dHVybiBmYWxzZTsKICB9CgogIGlmIChfTV9sZWZ0bW9zdCgpICE9IF9SYl90cmVlX25vZGVfYmFz
ZTo6X1NfbWluaW11bShfTV9yb290KCkpKQogICAgcmV0dXJuIGZhbHNlOwogIGlmIChfTV9yaWdo
dG1vc3QoKSAhPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0oX01fcm9vdCgpKSkKICAg
IHJldHVybiBmYWxzZTsKCiAgcmV0dXJuIHRydWU7Cn0KCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9L
ZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIGNsYXNzIF9Db21wYXJlLAogICAg
ICAgICAgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPCBfVmFsdWUgPiAgPgpzdHJ1Y3QgcmJfdHJl
ZSA6IHB1YmxpYyBfUmJfdHJlZTxfS2V5LCBfVmFsdWUsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwg
X0FsbG9jPgp7CiAgdHlwZWRlZiBfUmJfdHJlZTxfS2V5LCBfVmFsdWUsIF9LZXlPZlZhbHVlLCBf
Q29tcGFyZSwgX0FsbG9jPiBfQmFzZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0
b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgcmJfdHJlZShjb25zdCBfQ29tcGFyZSYgX19jb21w
ID0gX0NvbXBhcmUoKSwKICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxv
Y2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2NvbXAsIF9fYSkge30KICAKICB+cmJfdHJlZSgp
IHt9Cn07CgoKCgoKICAKCgoKIAogCiAKIyAzMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRy
YWtlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL21hcCIgMiAzCgoKIyAx
ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4u
L2luY2x1ZGUvZysrLTMvc3RsX21hcC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
IAoKCgoKCgogCgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBf
Q29tcGFyZSA9IGxlc3M8X0tleT4sCiAgICAgICAgICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8
IF9UcCA+ICA+CgoKCgpjbGFzcyBtYXAgewpwdWJsaWM6CgogCgogIHR5cGVkZWYgX0tleSAgICAg
ICAgICAgICAgICAgIGtleV90eXBlOwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgIGRh
dGFfdHlwZTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICBtYXBwZWRfdHlwZTsKICB0
eXBlZGVmIHBhaXI8Y29uc3QgX0tleSwgX1RwPiB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0NvbXBh
cmUgICAgICAgICAgICAgIGtleV9jb21wYXJlOwogICAgCiAgY2xhc3MgdmFsdWVfY29tcGFyZQog
ICAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPHZhbHVlX3R5cGUsIHZhbHVlX3R5cGUsIGJvb2w+
IHsKICBmcmllbmQgY2xhc3MgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz47CiAgcHJvdGVj
dGVkIDoKICAgIF9Db21wYXJlIF9NX2NvbXA7CiAgICB2YWx1ZV9jb21wYXJlKF9Db21wYXJlIF9f
YykgOiBfTV9jb21wKF9fYykge30KICBwdWJsaWM6CiAgICBib29sIG9wZXJhdG9yKCkoY29uc3Qg
dmFsdWVfdHlwZSYgX194LCBjb25zdCB2YWx1ZV90eXBlJiBfX3kpIGNvbnN0IHsKICAgICAgcmV0
dXJuIF9NX2NvbXAoX194LmZpcnN0LCBfX3kuZmlyc3QpOwogICAgfQogIH07Cgpwcml2YXRlOgog
IHR5cGVkZWYgX1JiX3RyZWU8a2V5X3R5cGUsIHZhbHVlX3R5cGUsIAogICAgICAgICAgICAgICAg
ICAgX1NlbGVjdDFzdDx2YWx1ZV90eXBlPiwga2V5X2NvbXBhcmUsIF9BbGxvYz4gX1JlcF90eXBl
OwogIF9SZXBfdHlwZSBfTV90OyAgIApwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5
cGU6OnBvaW50ZXIgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3Rf
cG9pbnRlciBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpyZWZl
cmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZWZl
cmVuY2UgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjppdGVy
YXRvciBpdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRlcmF0
b3IgY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJldmVyc2Vf
aXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6
Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYg
dHlwZW5hbWUgX1JlcF90eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5h
bWUgX1JlcF90eXBlOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYg
dHlwZW5hbWUgX1JlcF90eXBlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgIAoK
ICBtYXAoKSA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkge30KICBleHBsaWNp
dCBtYXAoY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgICAgICAgICAgY29uc3QgYWxsb2Nh
dG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2Ep
IHt9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgbWFwKF9JbnB1dEl0ZXJh
dG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgIDogX01fdChfQ29tcGFyZSgp
LCBhbGxvY2F0b3JfdHlwZSgpKQogICAgeyBfTV90Lmluc2VydF91bmlxdWUoX19maXJzdCwgX19s
YXN0KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgbWFwKF9JbnB1dEl0
ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgY29uc3QgX0NvbXBhcmUmIF9f
Y29tcCwKICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkp
CiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHsgX01fdC5pbnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9f
bGFzdCk7IH0KIyAxMjMgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1saW51eC8yLjk1
LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfbWFwLmgiIDMKCgogIG1hcChjb25zdCBt
YXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSA6IF9NX3QoX194Ll9NX3QpIHt9CiAg
bWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mCiAgb3BlcmF0b3I9KGNvbnN0IG1hcDxfS2V5
LCBfVHAsIF9Db21wYXJlLCBfQWxsb2M+JiBfX3gpCiAgewogICAgX01fdCA9IF9feC5fTV90Owog
ICAgcmV0dXJuICp0aGlzOyAKICB9CgogICAKCiAga2V5X2NvbXBhcmUga2V5X2NvbXAoKSBjb25z
dCB7IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0KICB2YWx1ZV9jb21wYXJlIHZhbHVlX2NvbXAo
KSBjb25zdCB7IHJldHVybiB2YWx1ZV9jb21wYXJlKF9NX3Qua2V5X2NvbXAoKSk7IH0KICBhbGxv
Y2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fdC5nZXRfYWxsb2Nh
dG9yKCk7IH0KCiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KICBj
b25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQogIGl0
ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KICBjb25zdF9pdGVyYXRvciBlbmQo
KSBjb25zdCB7IHJldHVybiBfTV90LmVuZCgpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4o
KSB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVn
aW4oKSBjb25zdCB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciBy
ZW5kKCkgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJl
bmQoKSBjb25zdCB7IHJldHVybiBfTV90LnJlbmQoKTsgfQogIGJvb2wgZW1wdHkoKSBjb25zdCB7
IHJldHVybiBfTV90LmVtcHR5KCk7IH0KICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IF9NX3Quc2l6ZSgpOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01f
dC5tYXhfc2l6ZSgpOyB9CiAgX1RwJiBvcGVyYXRvcltdKGNvbnN0IGtleV90eXBlJiBfX2spIHsK
ICAgIGl0ZXJhdG9yIF9faSA9IGxvd2VyX2JvdW5kKF9fayk7CiAgICAgCiAgICBpZiAoX19pID09
IGVuZCgpIHx8IGtleV9jb21wKCkoX19rLCAoKl9faSkuZmlyc3QpKQogICAgICBfX2kgPSBpbnNl
cnQoX19pLCB2YWx1ZV90eXBlKF9faywgX1RwKCkpKTsKICAgIHJldHVybiAoKl9faSkuc2Vjb25k
OwogIH0KICB2b2lkIHN3YXAobWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCkgeyBf
TV90LnN3YXAoX194Ll9NX3QpOyB9CgogICAKCiAgcGFpcjxpdGVyYXRvcixib29sPiBpbnNlcnQo
Y29uc3QgdmFsdWVfdHlwZSYgX194KSAKICAgIHsgcmV0dXJuIF9NX3QuaW5zZXJ0X3VuaXF1ZShf
X3gpOyB9CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIHBvc2l0aW9uLCBjb25zdCB2YWx1ZV90
eXBlJiBfX3gpCiAgICB7IHJldHVybiBfTV90Lmluc2VydF91bmlxdWUocG9zaXRpb24sIF9feCk7
IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KF9JbnB1
dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgX01fdC5pbnNl
cnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7CiAgfQoKCgoKCgoKCgogIHZvaWQgZXJhc2UoaXRl
cmF0b3IgX19wb3NpdGlvbikgeyBfTV90LmVyYXNlKF9fcG9zaXRpb24pOyB9CiAgc2l6ZV90eXBl
IGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuZXJhc2UoX194KTsgfQog
IHZvaWQgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQogICAgeyBfTV90
LmVyYXNlKF9fZmlyc3QsIF9fbGFzdCk7IH0KICB2b2lkIGNsZWFyKCkgeyBfTV90LmNsZWFyKCk7
IH0KCiAgIAoKICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9N
X3QuZmluZChfX3gpOyB9CiAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194
KSBjb25zdCB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQogIHNpemVfdHlwZSBjb3VudChjb25z
dCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmNvdW50KF9feCk7IH0KICBpdGVy
YXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSB7cmV0dXJuIF9NX3QubG93ZXJf
Ym91bmQoX194KTsgfQogIGNvbnN0X2l0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBl
JiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7IAogIH0KICBp
dGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSB7cmV0dXJuIF9NX3QudXBw
ZXJfYm91bmQoX194KTsgfQogIGNvbnN0X2l0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90
eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IAogIH0K
ICAKICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYg
X194KSB7CiAgICByZXR1cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOwogIH0KICBwYWlyPGNvbnN0
X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194
KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOwogIH0KICBmcmllbmQg
Ym9vbCBvcGVyYXRvcj09IDw+ICAoY29uc3QgbWFwJiwgY29uc3QgbWFwJik7CiAgZnJpZW5kIGJv
b2wgb3BlcmF0b3I8IDw+ICAoY29uc3QgbWFwJiwgY29uc3QgbWFwJik7Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBf
X3gsIAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxf
QWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPT0gX195Ll9NX3Q7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+Cmlu
bGluZSBib29sIG9wZXJhdG9yPChjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYg
X194LCAKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxf
QWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPCBfX3kuX01fdDsKfQoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgpp
bmxpbmUgdm9pZCBzd2FwKG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsIAogICAg
ICAgICAgICAgICAgIG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICBfX3gu
c3dhcChfX3kpOwp9CgoKCgoKCgoKIAoKCgogCiAKIAojIDMzICIvdXNyL2xpYi9nY2MtbGliL2k1
ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbWFwIiAy
IDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxpbnV4LzIuOTUuMy8uLi8u
Li8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9tdWx0aW1hcC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIAoKCgoKCgogCgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3Mg
X1RwLCBjbGFzcyBfQ29tcGFyZSA9IGxlc3M8X0tleT4sCiAgICAgICAgICBjbGFzcyBfQWxsb2Mg
PSBhbGxvY2F0b3I8IF9UcCA+ICA+CgoKCgpjbGFzcyBtdWx0aW1hcCB7CnB1YmxpYzoKCiAKCiAg
dHlwZWRlZiBfS2V5ICAgICAgICAgICAgICAgICAga2V5X3R5cGU7CiAgdHlwZWRlZiBfVHAgICAg
ICAgICAgICAgICAgICAgZGF0YV90eXBlOwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAg
IG1hcHBlZF90eXBlOwogIHR5cGVkZWYgcGFpcjxjb25zdCBfS2V5LCBfVHA+IHZhbHVlX3R5cGU7
CiAgdHlwZWRlZiBfQ29tcGFyZSAgICAgICAgICAgICAga2V5X2NvbXBhcmU7CgogIGNsYXNzIHZh
bHVlX2NvbXBhcmUgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPHZhbHVlX3R5cGUsIHZhbHVlX3R5
cGUsIGJvb2w+IHsKICBmcmllbmQgY2xhc3MgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0Fs
bG9jPjsKICBwcm90ZWN0ZWQ6CiAgICBfQ29tcGFyZSBfTV9jb21wOwogICAgdmFsdWVfY29tcGFy
ZShfQ29tcGFyZSBfX2MpIDogX01fY29tcChfX2MpIHt9CiAgcHVibGljOgogICAgYm9vbCBvcGVy
YXRvcigpKGNvbnN0IHZhbHVlX3R5cGUmIF9feCwgY29uc3QgdmFsdWVfdHlwZSYgX195KSBjb25z
dCB7CiAgICAgIHJldHVybiBfTV9jb21wKF9feC5maXJzdCwgX195LmZpcnN0KTsKICAgIH0KICB9
OwoKcHJpdmF0ZToKICB0eXBlZGVmIF9SYl90cmVlPGtleV90eXBlLCB2YWx1ZV90eXBlLCAKICAg
ICAgICAgICAgICAgICAgX1NlbGVjdDFzdDx2YWx1ZV90eXBlPiwga2V5X2NvbXBhcmUsIF9BbGxv
Yz4gX1JlcF90eXBlOwogIF9SZXBfdHlwZSBfTV90OyAgIApwdWJsaWM6CiAgdHlwZWRlZiB0eXBl
bmFtZSBfUmVwX3R5cGU6OnBvaW50ZXIgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBf
dHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX1Jl
cF90eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBl
Ojpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1Jl
cF90eXBlOjppdGVyYXRvciBpdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6
Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7IAogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90
eXBlOjpyZXZlcnNlX2l0ZXJhdG9yIHJldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFt
ZSBfUmVwX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRv
cjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICB0
eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlw
ZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9y
X3R5cGU7CgogCgogIG11bHRpbWFwKCkgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBl
KCkpIHsgfQogIGV4cGxpY2l0IG11bHRpbWFwKGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAg
ICAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBl
KCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHsgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXJhdG9yPgogIG11bHRpbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJh
dG9yIF9fbGFzdCkKICAgIDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKQogICAg
eyBfTV90Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9CgogIHRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyYXRvcj4KICBtdWx0aW1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w
dXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAg
ICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAg
IDogX01fdChfX2NvbXAsIF9fYSkgeyBfTV90Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3Qp
OyB9CiMgMTIxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtbWFuZHJha2UtbGludXgvMi45NS4zLy4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX211bHRpbWFwLmgiIDMKCgogIG11bHRpbWFwKGNv
bnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCkgOiBfTV90KF9feC5f
TV90KSB7IH0KICBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JgogIG9wZXJhdG9y
PShjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsKICAgIF9N
X3QgPSBfX3guX01fdDsKICAgIHJldHVybiAqdGhpczsgCiAgfQoKICAgCgogIGtleV9jb21wYXJl
IGtleV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAgdmFsdWVfY29t
cGFyZSB2YWx1ZV9jb21wKCkgY29uc3QgeyByZXR1cm4gdmFsdWVfY29tcGFyZShfTV90LmtleV9j
b21wKCkpOyB9CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJu
IF9NX3QuZ2V0X2FsbG9jYXRvcigpOyB9CgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gX01f
dC5iZWdpbigpOyB9CiAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90
LmJlZ2luKCk7IH0KICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV90LmVuZCgpOyB9CiAgY29u
c3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5lbmQoKTsgfQogIHJldmVyc2Vf
aXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQogIGNvbnN0X3JldmVy
c2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQogIHJl
dmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CiAgY29uc3RfcmV2
ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KICBib29s
IGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01fdC5lbXB0eSgpOyB9CiAgc2l6ZV90eXBlIHNpemUo
KSBjb25zdCB7IHJldHVybiBfTV90LnNpemUoKTsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIF9NX3QubWF4X3NpemUoKTsgfQogIHZvaWQgc3dhcChtdWx0aW1hcDxfS2V5
LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsgX01fdC5zd2FwKF9feC5fTV90KTsgfQoKICAg
CgogIGl0ZXJhdG9yIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3Qu
aW5zZXJ0X2VxdWFsKF9feCk7IH0KICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlv
biwgY29uc3QgdmFsdWVfdHlwZSYgX194KSB7CiAgICByZXR1cm4gX01fdC5pbnNlcnRfZXF1YWwo
X19wb3NpdGlvbiwgX194KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K
ICB2b2lkIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xh
c3QpIHsKICAgIF9NX3QuaW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9fbGFzdCk7CiAgfQoKCgoKCgoK
CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7IF9NX3QuZXJhc2UoX19wb3NpdGlv
bik7IH0KICBzaXplX3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01f
dC5lcmFzZShfX3gpOyB9CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBf
X2xhc3QpCiAgICB7IF9NX3QuZXJhc2UoX19maXJzdCwgX19sYXN0KTsgfQogIHZvaWQgY2xlYXIo
KSB7IF9NX3QuY2xlYXIoKTsgfQoKICAgCgogIGl0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUm
IF9feCkgeyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KICBjb25zdF9pdGVyYXRvciBmaW5kKGNv
bnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CiAgc2l6
ZV90eXBlIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3QuY291
bnQoX194KTsgfQogIGl0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHty
ZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOyB9CiAgY29uc3RfaXRlcmF0b3IgbG93ZXJfYm91
bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QubG93ZXJfYm91
bmQoX194KTsgCiAgfQogIGl0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gp
IHtyZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOyB9CiAgY29uc3RfaXRlcmF0b3IgdXBwZXJf
Ym91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QudXBwZXJf
Ym91bmQoX194KTsgCiAgfQogICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiBlcXVhbF9yYW5nZShj
b25zdCBrZXlfdHlwZSYgX194KSB7CiAgICByZXR1cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOwog
IH0KICBwYWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25z
dCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC5lcXVhbF9yYW5nZShfX3gp
OwogIH0KICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IDw+ICAoY29uc3QgbXVsdGltYXAmLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFw
Jik7CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8IDw+ICAoY29uc3QgbXVsdGltYXAmLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXAmKTsK
fTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFz
cyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAs
X0NvbXBhcmUsX0FsbG9jPiYgX194LCAKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0
aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3Qg
PT0gX195Ll9NX3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9D
b21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBtdWx0aW1h
cDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsIAogICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJu
IF9feC5fTV90IDwgX195Ll9NX3Q7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9U
cCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcChtdWx0aW1h
cDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsIAogICAgICAgICAgICAgICAgIG11bHRp
bWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIF9feC5zd2FwKF9feSk7Cn0K
CgoKCgoKCgogCgoKCiAKIAogCiMgMzQgIi91c3IvbGliL2djYy1saWIvaTU4Ni1tYW5kcmFrZS1s
aW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9tYXAiIDIgMwoKCgoKIAogCiAK
IyA1MiAiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3FtYXAuaCIgMgoKCgogCgpzdHJ1Y3QgICBRTWFw
Tm9kZUJhc2UKewogICAgZW51bSBDb2xvciB7IFJlZCwgQmxhY2sgfTsKCiAgICBRTWFwTm9kZUJh
c2UqIGxlZnQ7CiAgICBRTWFwTm9kZUJhc2UqIHJpZ2h0OwogICAgUU1hcE5vZGVCYXNlKiBwYXJl
bnQ7CgogICAgQ29sb3IgY29sb3I7CgogICAgUU1hcE5vZGVCYXNlKiBtaW5pbXVtKCkgewoJUU1h
cE5vZGVCYXNlKiB4ID0gdGhpczsKCXdoaWxlICggeC0+bGVmdCApCgkgICAgeCA9IHgtPmxlZnQ7
CglyZXR1cm4geDsKICAgIH0KCiAgICBRTWFwTm9kZUJhc2UqIG1heGltdW0oKSB7CglRTWFwTm9k
ZUJhc2UqIHggPSB0aGlzOwoJd2hpbGUgKCB4LT5yaWdodCApCgkgICAgeCA9IHgtPnJpZ2h0OwoJ
cmV0dXJuIHg7CiAgICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIEssIGNsYXNzIFQ+CnN0cnVjdCBR
TWFwTm9kZSA6IHB1YmxpYyBRTWFwTm9kZUJhc2UKewogICAgUU1hcE5vZGUoIGNvbnN0IEsmIF9r
ZXksIGNvbnN0IFQmIF9kYXRhICkgeyBkYXRhID0gX2RhdGE7IGtleSA9IF9rZXk7IH0KICAgIFFN
YXBOb2RlKCBjb25zdCBLJiBfa2V5ICkJICAgeyBrZXkgPSBfa2V5OyB9CiAgICBRTWFwTm9kZSgg
Y29uc3QgUU1hcE5vZGU8SyxUPiYgX24gKSB7IGtleSA9IF9uLmtleTsgZGF0YSA9IF9uLmRhdGE7
IH0KICAgIFFNYXBOb2RlKCkgeyB9CiAgICBUIGRhdGE7CiAgICBLIGtleTsKfTsKCgp0ZW1wbGF0
ZTxjbGFzcyBLLCBjbGFzcyBUPgpjbGFzcyBRTWFwSXRlcmF0b3IKewogcHVibGljOgogICAgIAoK
CiAgICB0eXBlZGVmIFFNYXBOb2RlPCBLLCBUID4qIE5vZGVQdHI7CgogICAgdHlwZWRlZiBzdGQ6
OmJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnICBpdGVyYXRvcl9jYXRlZ29yeTsKCiAgICB0eXBl
ZGVmIFQgICAgICAgICAgdmFsdWVfdHlwZTsKCiAgICB0eXBlZGVmIHB0cmRpZmZfdCAgZGlmZmVy
ZW5jZV90eXBlOwoKCgogICAgdHlwZWRlZiBUKiAgICAgICAgIHBvaW50ZXI7CiAgICB0eXBlZGVm
IFQmICAgICAgICAgcmVmZXJlbmNlOwoKICAgICAKCgogICAgUU1hcE5vZGU8SyxUPiogbm9kZTsK
CiAgICAgCgoKICAgIFFNYXBJdGVyYXRvcigpIDogbm9kZSggMCApIHt9CiAgICBRTWFwSXRlcmF0
b3IoIFFNYXBOb2RlPEssVD4qIHAgKSA6IG5vZGUoIHAgKSB7fQogICAgUU1hcEl0ZXJhdG9yKCBj
b25zdCBRTWFwSXRlcmF0b3I8SyxUPiYgaXQgKSA6IG5vZGUoIGl0Lm5vZGUgKSB7fQoKICAgIGJv
b2wgb3BlcmF0b3I9PSggY29uc3QgUU1hcEl0ZXJhdG9yPEssVD4mIGl0ICkgY29uc3QgeyByZXR1
cm4gbm9kZSA9PSBpdC5ub2RlOyB9CiAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFNYXBJdGVy
YXRvcjxLLFQ+JiBpdCApIGNvbnN0IHsgcmV0dXJuIG5vZGUgIT0gaXQubm9kZTsgfQogICAgVCYg
b3BlcmF0b3IqKCkgeyByZXR1cm4gbm9kZS0+ZGF0YTsgfQogICAgY29uc3QgVCYgb3BlcmF0b3Iq
KCkgY29uc3QgeyByZXR1cm4gbm9kZS0+ZGF0YTsgfQogICAgIAogICAgIAoKICAgIGNvbnN0IEsm
IGtleSgpIGNvbnN0IHsgcmV0dXJuIG5vZGUtPmtleTsgfQogICAgVCYgZGF0YSgpIHsgcmV0dXJu
IG5vZGUtPmRhdGE7IH0KICAgIGNvbnN0IFQmIGRhdGEoKSBjb25zdCB7IHJldHVybiBub2RlLT5k
YXRhOyB9Cgpwcml2YXRlOgogICAgaW50IGluYygpOwogICAgaW50IGRlYygpOwoKcHVibGljOgog
ICAgUU1hcEl0ZXJhdG9yPEssVD4mIG9wZXJhdG9yKysoKSB7CglpbmMoKTsKCXJldHVybiAqdGhp
czsKICAgIH0KCiAgICBRTWFwSXRlcmF0b3I8SyxUPiBvcGVyYXRvcisrKGludCkgewoJUU1hcEl0
ZXJhdG9yPEssVD4gdG1wID0gKnRoaXM7CglpbmMoKTsKCXJldHVybiB0bXA7CiAgICB9CgogICAg
UU1hcEl0ZXJhdG9yPEssVD4mIG9wZXJhdG9yLS0oKSB7CglkZWMoKTsKCXJldHVybiAqdGhpczsK
ICAgIH0KCiAgICBRTWFwSXRlcmF0b3I8SyxUPiBvcGVyYXRvci0tKGludCkgewoJUU1hcEl0ZXJh
dG9yPEssVD4gdG1wID0gKnRoaXM7CglkZWMoKTsKCXJldHVybiB0bXA7CiAgICB9Cn07Cgp0ZW1w
bGF0ZSA8Y2xhc3MgSywgY2xhc3MgVD4KICBpbnQgUU1hcEl0ZXJhdG9yPEssVD46OmluYygpCnsK
ICAgIFFNYXBOb2RlQmFzZSogdG1wID0gbm9kZTsKICAgIGlmICggdG1wLT5yaWdodCApIHsKCXRt
cCA9IHRtcC0+cmlnaHQ7Cgl3aGlsZSAoIHRtcC0+bGVmdCApCgkgICAgdG1wID0gdG1wLT5sZWZ0
OwogICAgfSBlbHNlIHsKCVFNYXBOb2RlQmFzZSogeSA9IHRtcC0+cGFyZW50OwoJd2hpbGUgKHRt
cCA9PSB5LT5yaWdodCkgewoJICAgIHRtcCA9IHk7CgkgICAgeSA9IHktPnBhcmVudDsKCX0KCWlm
ICh0bXAtPnJpZ2h0ICE9IHkpCgkgICAgdG1wID0geTsKICAgIH0KICAgIG5vZGUgPSAoTm9kZVB0
cil0bXA7CiAgICByZXR1cm4gMDsKfQoKdGVtcGxhdGUgPGNsYXNzIEssIGNsYXNzIFQ+CiAgaW50
IFFNYXBJdGVyYXRvcjxLLFQ+OjpkZWMoKQp7CiAgICBRTWFwTm9kZUJhc2UqIHRtcCA9IG5vZGU7
CiAgICBpZiAodG1wLT5jb2xvciA9PSBRTWFwTm9kZUJhc2U6OlJlZCAmJgoJdG1wLT5wYXJlbnQt
PnBhcmVudCA9PSB0bXAgKSB7Cgl0bXAgPSB0bXAtPnJpZ2h0OwogICAgfSBlbHNlIGlmICh0bXAt
PmxlZnQgIT0gMCkgewoJUU1hcE5vZGVCYXNlKiB5ID0gdG1wLT5sZWZ0OwoJd2hpbGUgKCB5LT5y
aWdodCApCgkgICAgeSA9IHktPnJpZ2h0OwoJdG1wID0geTsKICAgIH0gZWxzZSB7CglRTWFwTm9k
ZUJhc2UqIHkgPSB0bXAtPnBhcmVudDsKCXdoaWxlICh0bXAgPT0geS0+bGVmdCkgewoJICAgIHRt
cCA9IHk7CgkgICAgeSA9IHktPnBhcmVudDsKCX0KCXRtcCA9IHk7CiAgICB9CiAgICBub2RlID0g
KE5vZGVQdHIpdG1wOwogICAgcmV0dXJuIDA7Cn0KCnRlbXBsYXRlPGNsYXNzIEssIGNsYXNzIFQ+
CmNsYXNzIFFNYXBDb25zdEl0ZXJhdG9yCnsKIHB1YmxpYzoKICAgICAKCgogICAgdHlwZWRlZiBR
TWFwTm9kZTwgSywgVCA+KiBOb2RlUHRyOwoKICAgIHR5cGVkZWYgc3RkOjpiaWRpcmVjdGlvbmFs
X2l0ZXJhdG9yX3RhZyAgaXRlcmF0b3JfY2F0ZWdvcnk7CgogICAgdHlwZWRlZiBUICAgICAgICAg
IHZhbHVlX3R5cGU7CgogICAgdHlwZWRlZiBwdHJkaWZmX3QgIGRpZmZlcmVuY2VfdHlwZTsKCgoK
ICAgIHR5cGVkZWYgY29uc3QgVCogICBwb2ludGVyOwogICAgdHlwZWRlZiBjb25zdCBUJiAgIHJl
ZmVyZW5jZTsKCgogICAgIAoKCiAgICBRTWFwTm9kZTxLLFQ+KiBub2RlOwoKICAgICAKCgogICAg
UU1hcENvbnN0SXRlcmF0b3IoKSA6IG5vZGUoIDAgKSB7fQogICAgUU1hcENvbnN0SXRlcmF0b3Io
IFFNYXBOb2RlPEssVD4qIHAgKSA6IG5vZGUoIHAgKSB7fQogICAgUU1hcENvbnN0SXRlcmF0b3Io
IGNvbnN0IFFNYXBDb25zdEl0ZXJhdG9yPEssVD4mIGl0ICkgOiBub2RlKCBpdC5ub2RlICkge30K
ICAgIFFNYXBDb25zdEl0ZXJhdG9yKCBjb25zdCBRTWFwSXRlcmF0b3I8SyxUPiYgaXQgKSA6IG5v
ZGUoIGl0Lm5vZGUgKSB7fQoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUU1hcENvbnN0SXRl
cmF0b3I8SyxUPiYgaXQgKSBjb25zdCB7IHJldHVybiBub2RlID09IGl0Lm5vZGU7IH0KICAgIGJv
b2wgb3BlcmF0b3IhPSggY29uc3QgUU1hcENvbnN0SXRlcmF0b3I8SyxUPiYgaXQgKSBjb25zdCB7
IHJldHVybiBub2RlICE9IGl0Lm5vZGU7IH0KICAgIGNvbnN0IFQmIG9wZXJhdG9yKigpICBjb25z
dCB7IHJldHVybiBub2RlLT5kYXRhOyB9CiAgICAgCiAgICAgCgogICAgY29uc3QgSyYga2V5KCkg
Y29uc3QgeyByZXR1cm4gbm9kZS0+a2V5OyB9CiAgICBjb25zdCBUJiBkYXRhKCkgY29uc3QgeyBy
ZXR1cm4gbm9kZS0+ZGF0YTsgfQoKcHJpdmF0ZToKICAgIGludCBpbmMoKTsKICAgIGludCBkZWMo
KTsKCnB1YmxpYzoKICAgIFFNYXBDb25zdEl0ZXJhdG9yPEssVD4mIG9wZXJhdG9yKysoKSB7Cglp
bmMoKTsKCXJldHVybiAqdGhpczsKICAgIH0KCiAgICBRTWFwQ29uc3RJdGVyYXRvcjxLLFQ+IG9w
ZXJhdG9yKysoaW50KSB7CglRTWFwQ29uc3RJdGVyYXRvcjxLLFQ+IHRtcCA9ICp0aGlzOwoJaW5j
KCk7CglyZXR1cm4gdG1wOwogICAgfQoKICAgIFFNYXBDb25zdEl0ZXJhdG9yPEssVD4mIG9wZXJh
dG9yLS0oKSB7CglkZWMoKTsKCXJldHVybiAqdGhpczsKICAgIH0KCiAgICBRTWFwQ29uc3RJdGVy
YXRvcjxLLFQ+IG9wZXJhdG9yLS0oaW50KSB7CglRTWFwQ29uc3RJdGVyYXRvcjxLLFQ+IHRtcCA9
ICp0aGlzOwoJZGVjKCk7CglyZXR1cm4gdG1wOwogICAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIEss
IGNsYXNzIFQ+CiAgaW50IFFNYXBDb25zdEl0ZXJhdG9yPEssVD46OmluYygpCnsKICAgIFFNYXBO
b2RlQmFzZSogdG1wID0gbm9kZTsKICAgIGlmICggdG1wLT5yaWdodCApIHsKCXRtcCA9IHRtcC0+
cmlnaHQ7Cgl3aGlsZSAoIHRtcC0+bGVmdCApCgkgICAgdG1wID0gdG1wLT5sZWZ0OwogICAgfSBl
bHNlIHsKCVFNYXBOb2RlQmFzZSogeSA9IHRtcC0+cGFyZW50OwoJd2hpbGUgKHRtcCA9PSB5LT5y
aWdodCkgewoJICAgIHRtcCA9IHk7CgkgICAgeSA9IHktPnBhcmVudDsKCX0KCWlmICh0bXAtPnJp
Z2h0ICE9IHkpCgkgICAgdG1wID0geTsKICAgIH0KICAgIG5vZGUgPSAoTm9kZVB0cil0bXA7CiAg
ICByZXR1cm4gMDsKfQoKdGVtcGxhdGUgPGNsYXNzIEssIGNsYXNzIFQ+CiAgaW50IFFNYXBDb25z
dEl0ZXJhdG9yPEssVD46OmRlYygpCnsKICAgIFFNYXBOb2RlQmFzZSogdG1wID0gbm9kZTsKICAg
IGlmICh0bXAtPmNvbG9yID09IFFNYXBOb2RlQmFzZTo6UmVkICYmCgl0bXAtPnBhcmVudC0+cGFy
ZW50ID09IHRtcCApIHsKCXRtcCA9IHRtcC0+cmlnaHQ7CiAgICB9IGVsc2UgaWYgKHRtcC0+bGVm
dCAhPSAwKSB7CglRTWFwTm9kZUJhc2UqIHkgPSB0bXAtPmxlZnQ7Cgl3aGlsZSAoIHktPnJpZ2h0
ICkKCSAgICB5ID0geS0+cmlnaHQ7Cgl0bXAgPSB5OwogICAgfSBlbHNlIHsKCVFNYXBOb2RlQmFz
ZSogeSA9IHRtcC0+cGFyZW50OwoJd2hpbGUgKHRtcCA9PSB5LT5sZWZ0KSB7CgkgICAgdG1wID0g
eTsKCSAgICB5ID0geS0+cGFyZW50OwoJfQoJdG1wID0geTsKICAgIH0KICAgIG5vZGUgPSAoTm9k
ZVB0cil0bXA7CiAgICByZXR1cm4gMDsKfQoKY2xhc3MgICBRTWFwUHJpdmF0ZUJhc2UgOiBwdWJs
aWMgUVNoYXJlZAp7CnB1YmxpYzoKICAgIFFNYXBQcml2YXRlQmFzZSgpIHsKCW5vZGVfY291bnQg
PSAwOwogICAgfQogICAgUU1hcFByaXZhdGVCYXNlKCBjb25zdCBRTWFwUHJpdmF0ZUJhc2UqIF9t
YXApIHsKCW5vZGVfY291bnQgPSBfbWFwLT5ub2RlX2NvdW50OwogICAgfQoKICAgICAKCgogICAg
dm9pZCByb3RhdGVMZWZ0KCBRTWFwTm9kZUJhc2UqIHgsIFFNYXBOb2RlQmFzZSomIHJvb3QpOwog
ICAgdm9pZCByb3RhdGVSaWdodCggUU1hcE5vZGVCYXNlKiB4LCBRTWFwTm9kZUJhc2UqJiByb290
ICk7CiAgICB2b2lkIHJlYmFsYW5jZSggUU1hcE5vZGVCYXNlKiB4LCBRTWFwTm9kZUJhc2UqJiBy
b290ICk7CiAgICBRTWFwTm9kZUJhc2UqIHJlbW92ZUFuZFJlYmFsYW5jZSggUU1hcE5vZGVCYXNl
KiB6LCBRTWFwTm9kZUJhc2UqJiByb290LAoJCQkJICAgICAgUU1hcE5vZGVCYXNlKiYgbGVmdG1v
c3QsCgkJCQkgICAgICBRTWFwTm9kZUJhc2UqJiByaWdodG1vc3QgKTsKCiAgICAgCgoKICAgIGlu
dCBub2RlX2NvdW50Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBLZXksIGNsYXNzIFQ+CmNsYXNzIFFN
YXBQcml2YXRlIDogcHVibGljIFFNYXBQcml2YXRlQmFzZQp7CnB1YmxpYzoKICAgICAKCgogICAg
dHlwZWRlZiBRTWFwSXRlcmF0b3I8IEtleSwgVCA+IEl0ZXJhdG9yOwogICAgdHlwZWRlZiBRTWFw
Q29uc3RJdGVyYXRvcjwgS2V5LCBUID4gQ29uc3RJdGVyYXRvcjsKICAgIHR5cGVkZWYgUU1hcE5v
ZGU8IEtleSwgVCA+IE5vZGU7CiAgICB0eXBlZGVmIFFNYXBOb2RlPCBLZXksIFQgPiogTm9kZVB0
cjsKCiAgICAgCgoKICAgIFFNYXBQcml2YXRlKCk7CiAgICBRTWFwUHJpdmF0ZSggY29uc3QgUU1h
cFByaXZhdGU8IEtleSwgVCA+KiBfbWFwICk7CiAgICB+UU1hcFByaXZhdGUoKSB7IGNsZWFyKCk7
IGRlbGV0ZSBoZWFkZXI7IH0KCiAgICBOb2RlUHRyIGNvcHkoIE5vZGVQdHIgcCApOwogICAgdm9p
ZCBjbGVhcigpOwogICAgdm9pZCBjbGVhciggTm9kZVB0ciBwICk7CgogICAgSXRlcmF0b3IgYmVn
aW4oKQl7IHJldHVybiBJdGVyYXRvciggKE5vZGVQdHIpKGhlYWRlci0+bGVmdCApICk7IH0KICAg
IEl0ZXJhdG9yIGVuZCgpCXsgcmV0dXJuIEl0ZXJhdG9yKCBoZWFkZXIgKTsgfQogICAgQ29uc3RJ
dGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIENvbnN0SXRlcmF0b3IoIChOb2RlUHRyKSho
ZWFkZXItPmxlZnQgKSApOyB9CiAgICBDb25zdEl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJu
IENvbnN0SXRlcmF0b3IoIGhlYWRlciApOyB9CgogICAgQ29uc3RJdGVyYXRvciBmaW5kKGNvbnN0
IEtleSYgaykgY29uc3Q7CgogICAgdm9pZCByZW1vdmUoIEl0ZXJhdG9yIGl0ICkgewoJTm9kZVB0
ciBkZWwgPSAoTm9kZVB0cikgcmVtb3ZlQW5kUmViYWxhbmNlKCBpdC5ub2RlLCBoZWFkZXItPnBh
cmVudCwgaGVhZGVyLT5sZWZ0LCBoZWFkZXItPnJpZ2h0ICk7CglkZWxldGUgZGVsOwoJLS1ub2Rl
X2NvdW50OwogICAgfQoKIyA0MDAgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xbWFwLmgiCgoKIyA0
MTIgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xbWFwLmgiCgoKICAgIEl0ZXJhdG9yIGluc2VydFNp
bmdsZSggY29uc3QgS2V5JiBrICk7CiAgICBJdGVyYXRvciBpbnNlcnQoIFFNYXBOb2RlQmFzZSog
eCwgUU1hcE5vZGVCYXNlKiB5LCBjb25zdCBLZXkmIGsgKTsKCnByb3RlY3RlZDoKICAgICAKCgog
ICAgY29uc3QgS2V5JiBrZXkoIFFNYXBOb2RlQmFzZSogYiApIGNvbnN0IHsgcmV0dXJuICgoTm9k
ZVB0ciliKS0+a2V5OyB9CgogICAgIAoKCiAgICBOb2RlUHRyIGhlYWRlcjsKfTsKCgp0ZW1wbGF0
ZSA8Y2xhc3MgS2V5LCBjbGFzcyBUPgogIFFNYXBQcml2YXRlPEtleSxUPjo6UU1hcFByaXZhdGUo
KSB7CiAgICBoZWFkZXIgPSBuZXcgTm9kZTsKICAgIGhlYWRlci0+Y29sb3IgPSBRTWFwTm9kZUJh
c2U6OlJlZDsgIAogICAgaGVhZGVyLT5wYXJlbnQgPSAwOwogICAgaGVhZGVyLT5sZWZ0ID0gaGVh
ZGVyLT5yaWdodCA9IGhlYWRlcjsKfQp0ZW1wbGF0ZSA8Y2xhc3MgS2V5LCBjbGFzcyBUPgogIFFN
YXBQcml2YXRlPEtleSxUPjo6UU1hcFByaXZhdGUoIGNvbnN0IFFNYXBQcml2YXRlPCBLZXksIFQg
PiogX21hcCApIDogUU1hcFByaXZhdGVCYXNlKCBfbWFwICkgewogICAgaGVhZGVyID0gbmV3IE5v
ZGU7CiAgICBoZWFkZXItPmNvbG9yID0gUU1hcE5vZGVCYXNlOjpSZWQ7ICAKICAgIGlmICggX21h
cC0+aGVhZGVyLT5wYXJlbnQgPT0gMCApIHsKCWhlYWRlci0+cGFyZW50ID0gMDsKCWhlYWRlci0+
bGVmdCA9IGhlYWRlci0+cmlnaHQgPSBoZWFkZXI7CiAgICB9IGVsc2UgewoJaGVhZGVyLT5wYXJl
bnQgPSBjb3B5KCAoTm9kZVB0cikoX21hcC0+aGVhZGVyLT5wYXJlbnQpICk7CgloZWFkZXItPnBh
cmVudC0+cGFyZW50ID0gaGVhZGVyOwoJaGVhZGVyLT5sZWZ0ID0gaGVhZGVyLT5wYXJlbnQtPm1p
bmltdW0oKTsKCWhlYWRlci0+cmlnaHQgPSBoZWFkZXItPnBhcmVudC0+bWF4aW11bSgpOwogICAg
fQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgS2V5LCBjbGFzcyBUPgogIHR5cGVuYW1lICBRTWFwUHJpdmF0
ZTxLZXksVD46Ok5vZGVQdHIgUU1hcFByaXZhdGU8S2V5LFQ+Ojpjb3B5KCB0eXBlbmFtZSAgUU1h
cFByaXZhdGU8S2V5LFQ+OjpOb2RlUHRyIHAgKQp7CiAgICBpZiAoICFwICkKCXJldHVybiAwOwog
ICAgTm9kZVB0ciBuID0gbmV3IE5vZGUoICpwICk7CiAgICBuLT5jb2xvciA9IHAtPmNvbG9yOwog
ICAgaWYgKCBwLT5sZWZ0ICkgewoJbi0+bGVmdCA9IGNvcHkoIChOb2RlUHRyKShwLT5sZWZ0KSAp
OwoJbi0+bGVmdC0+cGFyZW50ID0gbjsKICAgIH0gZWxzZSB7CgluLT5sZWZ0ID0gMDsKICAgIH0K
ICAgIGlmICggcC0+cmlnaHQgKSB7CgluLT5yaWdodCA9IGNvcHkoIChOb2RlUHRyKShwLT5yaWdo
dCkgKTsKCW4tPnJpZ2h0LT5wYXJlbnQgPSBuOwogICAgfSBlbHNlIHsKCW4tPnJpZ2h0ID0gMDsK
ICAgIH0KICAgIHJldHVybiBuOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgS2V5LCBjbGFzcyBUPgogIHZv
aWQgUU1hcFByaXZhdGU8S2V5LFQ+OjpjbGVhcigpCnsKICAgIGNsZWFyKCAoTm9kZVB0cikoaGVh
ZGVyLT5wYXJlbnQpICk7CiAgICBoZWFkZXItPmNvbG9yID0gUU1hcE5vZGVCYXNlOjpSZWQ7CiAg
ICBoZWFkZXItPnBhcmVudCA9IDA7CiAgICBoZWFkZXItPmxlZnQgPSBoZWFkZXItPnJpZ2h0ID0g
aGVhZGVyOwogICAgbm9kZV9jb3VudCA9IDA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBLZXksIGNsYXNz
IFQ+CiAgdm9pZCBRTWFwUHJpdmF0ZTxLZXksVD46OmNsZWFyKCB0eXBlbmFtZSAgUU1hcFByaXZh
dGU8S2V5LFQ+OjpOb2RlUHRyIHAgKQp7CiAgICB3aGlsZSAoIHAgIT0gMCApIHsKCWNsZWFyKCAo
Tm9kZVB0cilwLT5yaWdodCApOwoJTm9kZVB0ciB5ID0gKE5vZGVQdHIpcC0+bGVmdDsKCWRlbGV0
ZSBwOwoJcCA9IHk7CiAgICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBLZXksIGNsYXNzIFQ+CiAgdHlw
ZW5hbWUgIFFNYXBQcml2YXRlPEtleSxUPjo6Q29uc3RJdGVyYXRvciBRTWFwUHJpdmF0ZTxLZXks
VD46OmZpbmQoY29uc3QgS2V5JiBrKSBjb25zdAp7CiAgICBRTWFwTm9kZUJhc2UqIHkgPSBoZWFk
ZXI7ICAgICAgICAgCiAgICBRTWFwTm9kZUJhc2UqIHggPSBoZWFkZXItPnBhcmVudDsgIAoKICAg
IHdoaWxlICggeCAhPSAwICkgewoJIAoJaWYgKCAhKCBrZXkoeCkgPCBrICkgKSB7CgkgICAgeSA9
IHg7CgkgICAgeCA9IHgtPmxlZnQ7Cgl9IGVsc2UgewoJICAgIHggPSB4LT5yaWdodDsKCX0KICAg
IH0KCiAgICAgCiAgICAgCiAgICBpZiAoIHkgPT0gaGVhZGVyIHx8IGsgPCBrZXkoeSkgKQoJcmV0
dXJuIENvbnN0SXRlcmF0b3IoIGhlYWRlciApOwogICAgcmV0dXJuIENvbnN0SXRlcmF0b3IoIChO
b2RlUHRyKXkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3MgVD4KICB0eXBlbmFtZSAg
UU1hcFByaXZhdGU8S2V5LFQ+OjpJdGVyYXRvciBRTWFwUHJpdmF0ZTxLZXksVD46Omluc2VydFNp
bmdsZSggY29uc3QgS2V5JiBrICkKewogICAgIAogICAgUU1hcE5vZGVCYXNlKiB5ID0gaGVhZGVy
OwogICAgUU1hcE5vZGVCYXNlKiB4ID0gaGVhZGVyLT5wYXJlbnQ7CiAgICBib29sIHJlc3VsdCA9
IFRSVUU7CiAgICB3aGlsZSAoIHggIT0gMCApIHsKCXJlc3VsdCA9ICggayA8IGtleSh4KSApOwoJ
eSA9IHg7Cgl4ID0gcmVzdWx0ID8geC0+bGVmdCA6IHgtPnJpZ2h0OwogICAgfQogICAgIAogICAg
SXRlcmF0b3IgaiggKE5vZGVQdHIpeSApOwogICAgaWYgKCByZXN1bHQgKSB7CgkgCglpZiAoIGog
PT0gYmVnaW4oKSApIHsKCSAgICByZXR1cm4gaW5zZXJ0KHgsIHksIGsgKTsKCX0gZWxzZSB7Cgkg
ICAgIAoJICAgIC0tajsKCX0KICAgIH0KICAgICAKICAgIGlmICggKGoubm9kZS0+a2V5KSA8IGsg
KQoJcmV0dXJuIGluc2VydCh4LCB5LCBrICk7CiAgICAgCiAgICByZXR1cm4gajsKfQoKCnRlbXBs
YXRlIDxjbGFzcyBLZXksIGNsYXNzIFQ+CiAgdHlwZW5hbWUgIFFNYXBQcml2YXRlPEtleSxUPjo6
SXRlcmF0b3IgUU1hcFByaXZhdGU8S2V5LFQ+OjppbnNlcnQoIFFNYXBOb2RlQmFzZSogeCwgUU1h
cE5vZGVCYXNlKiB5LCBjb25zdCBLZXkmIGsgKQp7CiAgICBOb2RlUHRyIHogPSBuZXcgTm9kZSgg
ayApOwogICAgaWYgKHkgPT0gaGVhZGVyIHx8IHggIT0gMCB8fCBrIDwga2V5KHkpICkgewoJeS0+
bGVmdCA9IHo7ICAgICAgICAgICAgICAgICAKCWlmICggeSA9PSBoZWFkZXIgKSB7CgkgICAgaGVh
ZGVyLT5wYXJlbnQgPSB6OwoJICAgIGhlYWRlci0+cmlnaHQgPSB6OwoJfSBlbHNlIGlmICggeSA9
PSBoZWFkZXItPmxlZnQgKQoJICAgIGhlYWRlci0+bGVmdCA9IHo7ICAgICAgICAgICAgCiAgICB9
IGVsc2UgewoJeS0+cmlnaHQgPSB6OwoJaWYgKCB5ID09IGhlYWRlci0+cmlnaHQgKQoJICAgIGhl
YWRlci0+cmlnaHQgPSB6OyAgICAgICAgICAgCiAgICB9CiAgICB6LT5wYXJlbnQgPSB5OwogICAg
ei0+bGVmdCA9IDA7CiAgICB6LT5yaWdodCA9IDA7CiAgICByZWJhbGFuY2UoIHosIGhlYWRlci0+
cGFyZW50ICk7CiAgICArK25vZGVfY291bnQ7CiAgICByZXR1cm4gSXRlcmF0b3Ioeik7Cn0KCgoK
CgoKCgoKCgoKCgoKdGVtcGxhdGU8Y2xhc3MgS2V5LCBjbGFzcyBUPgpjbGFzcyBRTWFwCnsKcHVi
bGljOgogICAgIAoKCiAgICB0eXBlZGVmIEtleSBrZXlfdHlwZTsKICAgIHR5cGVkZWYgVCBtYXBw
ZWRfdHlwZTsKICAgIHR5cGVkZWYgUVBhaXI8Y29uc3Qga2V5X3R5cGUsIG1hcHBlZF90eXBlPiB2
YWx1ZV90eXBlOwogICAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogICAgdHlwZWRlZiBj
b25zdCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVyOwogICAgdHlwZWRlZiB2YWx1ZV90eXBlJiBy
ZWZlcmVuY2U7CiAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsK
CiAgICB0eXBlZGVmIHB0cmRpZmZfdCAgZGlmZmVyZW5jZV90eXBlOwoKCgogICAgdHlwZWRlZiBz
aXplX3QgICAgICBzaXplX3R5cGU7CiAgICB0eXBlZGVmIFFNYXBJdGVyYXRvcjxLZXksVD4gaXRl
cmF0b3I7CiAgICB0eXBlZGVmIFFNYXBDb25zdEl0ZXJhdG9yPEtleSxUPiBjb25zdF9pdGVyYXRv
cjsKICAgIHR5cGVkZWYgUVBhaXI8aXRlcmF0b3IsYm9vbD4gaW5zZXJ0X3BhaXI7CgogICAgdHlw
ZWRlZiBRTWFwSXRlcmF0b3I8IEtleSwgVCA+IEl0ZXJhdG9yOwogICAgdHlwZWRlZiBRTWFwQ29u
c3RJdGVyYXRvcjwgS2V5LCBUID4gQ29uc3RJdGVyYXRvcjsKICAgIHR5cGVkZWYgVCBWYWx1ZVR5
cGU7CiAgICB0eXBlZGVmIFFNYXBQcml2YXRlPCBLZXksIFQgPiBQcml2OwoKICAgICAKCgogICAg
UU1hcCgpCiAgICB7CglzaCA9IG5ldyBRTWFwUHJpdmF0ZTwgS2V5LCBUID47CiAgICB9CiAgICBR
TWFwKCBjb25zdCBRTWFwPEtleSxUPiYgbSApCiAgICB7CglzaCA9IG0uc2g7IHNoLT5yZWYoKTsK
ICAgIH0KCgoKCgoKICAgIFFNYXAoIGNvbnN0IHR5cGVuYW1lICBzdGQ6Om1hcDxLZXksVD4mIG0g
KQogICAgewoJc2ggPSBuZXcgUU1hcFByaXZhdGU8S2V5LFQ+OwoKCgoJUU1hcENvbnN0SXRlcmF0
b3I8S2V5LFQ+IGl0ID0gbS5iZWdpbigpOwoKCWZvciAoIDsgaXQgIT0gbS5lbmQoKTsgKytpdCAp
IHsKCSAgICB2YWx1ZV90eXBlIHAoICgqaXQpLmZpcnN0LCAoKml0KS5zZWNvbmQgKTsKCSAgICBp
bnNlcnQoIHAgKTsKCX0KICAgIH0KCiAgICB+UU1hcCgpCiAgICB7CglpZiAoIHNoLT5kZXJlZigp
ICkKCSAgICBkZWxldGUgc2g7CiAgICB9CiAgICBRTWFwPEtleSxUPiYgb3BlcmF0b3I9ICggY29u
c3QgUU1hcDxLZXksVD4mIG0gKTsKCiAgICBRTWFwPEtleSxUPiYgb3BlcmF0b3I9ICggY29uc3Qg
dHlwZW5hbWUgIHN0ZDo6bWFwPEtleSxUPiYgbSApCiAgICB7CgljbGVhcigpOwoKCgoJUU1hcENv
bnN0SXRlcmF0b3I8S2V5LFQ+IGl0ID0gbS5iZWdpbigpOwoKCWZvciAoIDsgaXQgIT0gbS5lbmQo
KTsgKytpdCApIHsKCSAgICB2YWx1ZV90eXBlIHAoICgqaXQpLmZpcnN0LCAoKml0KS5zZWNvbmQg
KTsKCSAgICBpbnNlcnQoIHAgKTsKCX0KCXJldHVybiAqdGhpczsKICAgIH0KCgoKCgoKICAgIGl0
ZXJhdG9yIGJlZ2luKCkgeyBkZXRhY2goKTsgcmV0dXJuIHNoLT5iZWdpbigpOyB9CiAgICBpdGVy
YXRvciBlbmQoKSB7IGRldGFjaCgpOyByZXR1cm4gc2gtPmVuZCgpOyB9CiAgICBjb25zdF9pdGVy
YXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuICgoY29uc3QgUHJpdiopc2gpLT5iZWdpbigpOyB9
CiAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiAoKGNvbnN0IFByaXYqKXNo
KS0+ZW5kKCk7IH0KICAgIGl0ZXJhdG9yIHJlcGxhY2UoIGNvbnN0IEtleSYgaywgY29uc3QgVCYg
diApCiAgICB7CglyZW1vdmUoIGsgKTsKCXJldHVybiBpbnNlcnQoIGssIHYgKTsKICAgIH0KCiAg
ICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0CiAgICB7CglyZXR1cm4gc2gtPm5vZGVfY291bnQ7CiAg
ICB9CiAgICBib29sIGVtcHR5KCkgY29uc3QKICAgIHsKCXJldHVybiBzaC0+bm9kZV9jb3VudCA9
PSAwOwogICAgfQogICAgUVBhaXI8aXRlcmF0b3IsYm9vbD4gaW5zZXJ0KCBjb25zdCB2YWx1ZV90
eXBlJiB4ICk7CgogICAgdm9pZCBlcmFzZSggaXRlcmF0b3IgaXQgKQogICAgewoJZGV0YWNoKCk7
CglzaC0+cmVtb3ZlKCBpdCApOwogICAgfQogICAgdm9pZCBlcmFzZSggY29uc3Qga2V5X3R5cGUm
IGsgKTsKICAgIHNpemVfdHlwZSBjb3VudCggY29uc3Qga2V5X3R5cGUmIGsgKSBjb25zdDsKICAg
IFQmIG9wZXJhdG9yW10gKCBjb25zdCBLZXkmIGsgKTsKICAgIHZvaWQgY2xlYXIoKTsKCiAgICBp
dGVyYXRvciBmaW5kICggY29uc3QgS2V5JiBrICkKICAgIHsKCWRldGFjaCgpOwoJcmV0dXJuIGl0
ZXJhdG9yKCBzaC0+ZmluZCggayApLm5vZGUgKTsKICAgIH0KICAgIGNvbnN0X2l0ZXJhdG9yIGZp
bmQgKCBjb25zdCBLZXkmIGsgKSBjb25zdCB7CXJldHVybiBzaC0+ZmluZCggayApOyB9CgogICAg
Y29uc3QgVCYgb3BlcmF0b3JbXSAoIGNvbnN0IEtleSYgayApIGNvbnN0Cgl7ICA7IHJldHVybiBz
aC0+ZmluZCggayApLmRhdGEoKTsgfQogICAgYm9vbCBjb250YWlucyAoIGNvbnN0IEtleSYgayAp
IGNvbnN0Cgl7IHJldHVybiBmaW5kKCBrICkgIT0gZW5kKCk7IH0KCSAKCiAgICBzaXplX3R5cGUg
Y291bnQoKSBjb25zdCB7IHJldHVybiBzaC0+bm9kZV9jb3VudDsgfQoKICAgIFFWYWx1ZUxpc3Q8
S2V5PiBrZXlzKCkgY29uc3QgewoJUVZhbHVlTGlzdDxLZXk+IHI7Cglmb3IgKGNvbnN0X2l0ZXJh
dG9yIGk9YmVnaW4oKTsgaSE9ZW5kKCk7ICsraSkKCSAgICByLmFwcGVuZChpLmtleSgpKTsKCXJl
dHVybiByOwogICAgfQoKICAgIFFWYWx1ZUxpc3Q8VD4gdmFsdWVzKCkgY29uc3QgewoJUVZhbHVl
TGlzdDxUPiByOwoJZm9yIChjb25zdF9pdGVyYXRvciBpPWJlZ2luKCk7IGkhPWVuZCgpOyArK2kp
CgkgICAgci5hcHBlbmQoKmkpOwoJcmV0dXJuIHI7CiAgICB9CgogICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gc2gtPm5vZGVfY291bnQgPT0gMDsgfQoKICAgIGl0ZXJhdG9yIGluc2Vy
dCggY29uc3QgS2V5JiBrZXksIGNvbnN0IFQmIHZhbHVlLCBib29sIG92ZXJ3cml0ZSA9IFRSVUUg
KTsKICAgIHZvaWQgcmVtb3ZlKCBpdGVyYXRvciBpdCApIHsgZGV0YWNoKCk7IHNoLT5yZW1vdmUo
IGl0ICk7IH0KICAgIHZvaWQgcmVtb3ZlKCBjb25zdCBLZXkmIGsgKTsKCgoKCgoKCgpwcm90ZWN0
ZWQ6CiAgICAgCgoKICAgIHZvaWQgZGV0YWNoKCkgeyAgaWYgKCBzaC0+Y291bnQgPiAxICkgZGV0
YWNoSW50ZXJuYWwoKTsgfQoKICAgIFByaXYqIHNoOwpwcml2YXRlOgogICAgdm9pZCBkZXRhY2hJ
bnRlcm5hbCgpOwp9OwoKdGVtcGxhdGU8Y2xhc3MgS2V5LCBjbGFzcyBUPgogIFFNYXA8S2V5LFQ+
JiBRTWFwPEtleSxUPjo6b3BlcmF0b3I9ICggY29uc3QgUU1hcDxLZXksVD4mIG0gKQp7CiAgICBt
LnNoLT5yZWYoKTsKICAgIGlmICggc2gtPmRlcmVmKCkgKQoJZGVsZXRlIHNoOwogICAgc2ggPSBt
LnNoOwogICAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBLZXksIGNsYXNzIFQ+CiAg
dHlwZW5hbWUgIFFNYXA8S2V5LFQ+OjppbnNlcnRfcGFpciBRTWFwPEtleSxUPjo6aW5zZXJ0KCBj
b25zdCB0eXBlbmFtZSAgUU1hcDxLZXksVD46OnZhbHVlX3R5cGUmIHggKQp7CiAgICBkZXRhY2go
KTsKICAgIHNpemVfdHlwZSBuID0gc2l6ZSgpOwogICAgaXRlcmF0b3IgaXQgPSBzaC0+aW5zZXJ0
U2luZ2xlKCB4LmZpcnN0ICk7CiAgICBib29sIGluc2VydGVkID0gRkFMU0U7CiAgICBpZiAoIG4g
PCBzaXplKCkgKSB7CglpbnNlcnRlZCA9IFRSVUU7CglpdC5kYXRhKCkgPSB4LnNlY29uZDsKICAg
IH0KICAgIHJldHVybiBRUGFpcjxpdGVyYXRvcixib29sPiggaXQsIGluc2VydGVkICk7Cn0KCnRl
bXBsYXRlPGNsYXNzIEtleSwgY2xhc3MgVD4KICB2b2lkIFFNYXA8S2V5LFQ+OjplcmFzZSggY29u
c3QgS2V5JiBrICkKewogICAgZGV0YWNoKCk7CiAgICBpdGVyYXRvciBpdCggc2gtPmZpbmQoIGsg
KS5ub2RlICk7CiAgICBpZiAoIGl0ICE9IGVuZCgpICkKCXNoLT5yZW1vdmUoIGl0ICk7Cn0KCnRl
bXBsYXRlPGNsYXNzIEtleSwgY2xhc3MgVD4KICB0eXBlbmFtZSAgUU1hcDxLZXksVD46OnNpemVf
dHlwZSBRTWFwPEtleSxUPjo6Y291bnQoIGNvbnN0IEtleSYgayApIGNvbnN0CnsKICAgIGNvbnN0
X2l0ZXJhdG9yIGl0KCBzaC0+ZmluZCggayApLm5vZGUgKTsKICAgIGlmICggaXQgIT0gZW5kKCkg
KSB7CglzaXplX3R5cGUgYyA9IDA7Cgl3aGlsZSAoIGl0ICE9IGVuZCgpICkgewoJICAgICsraXQ7
CgkgICAgKytjOwoJfQoJcmV0dXJuIGM7CiAgICB9CiAgICByZXR1cm4gMDsKfQoKdGVtcGxhdGU8
Y2xhc3MgS2V5LCBjbGFzcyBUPgogIFQmIFFNYXA8S2V5LFQ+OjpvcGVyYXRvcltdICggY29uc3Qg
S2V5JiBrICkKewogICAgZGV0YWNoKCk7CiAgICBRTWFwTm9kZTxLZXksVD4qIHAgPSBzaC0+Zmlu
ZCggayApLm5vZGU7CiAgICBpZiAoIHAgIT0gc2gtPmVuZCgpLm5vZGUgKQoJcmV0dXJuIHAtPmRh
dGE7CiAgICByZXR1cm4gaW5zZXJ0KCBrLCBUKCkgKS5kYXRhKCk7Cn0KCnRlbXBsYXRlPGNsYXNz
IEtleSwgY2xhc3MgVD4KICB2b2lkIFFNYXA8S2V5LFQ+OjpjbGVhcigpCnsKICAgIGlmICggc2gt
PmNvdW50ID09IDEgKQoJc2gtPmNsZWFyKCk7CiAgICBlbHNlIHsKCXNoLT5kZXJlZigpOwoJc2gg
PSBuZXcgUU1hcFByaXZhdGU8S2V5LFQ+OwogICAgfQp9Cgp0ZW1wbGF0ZTxjbGFzcyBLZXksIGNs
YXNzIFQ+CiAgdHlwZW5hbWUgIFFNYXA8S2V5LFQ+OjppdGVyYXRvciBRTWFwPEtleSxUPjo6aW5z
ZXJ0KCBjb25zdCBLZXkmIGtleSwgY29uc3QgVCYgdmFsdWUsIGJvb2wgb3ZlcndyaXRlICkKewog
ICAgZGV0YWNoKCk7CiAgICBzaXplX3R5cGUgbiA9IHNpemUoKTsKICAgIGl0ZXJhdG9yIGl0ID0g
c2gtPmluc2VydFNpbmdsZSgga2V5ICk7CiAgICBpZiAoIG92ZXJ3cml0ZSB8fCBuIDwgc2l6ZSgp
ICkKCWl0LmRhdGEoKSA9IHZhbHVlOwogICAgcmV0dXJuIGl0Owp9Cgp0ZW1wbGF0ZTxjbGFzcyBL
ZXksIGNsYXNzIFQ+CiAgdm9pZCBRTWFwPEtleSxUPjo6cmVtb3ZlKCBjb25zdCBLZXkmIGsgKQp7
CiAgICBkZXRhY2goKTsKICAgIGl0ZXJhdG9yIGl0KCBzaC0+ZmluZCggayApLm5vZGUgKTsKICAg
IGlmICggaXQgIT0gZW5kKCkgKQoJc2gtPnJlbW92ZSggaXQgKTsKfQoKdGVtcGxhdGU8Y2xhc3Mg
S2V5LCBjbGFzcyBUPgogIHZvaWQgUU1hcDxLZXksVD46OmRldGFjaEludGVybmFsKCkKewogICAg
c2gtPmRlcmVmKCk7IHNoID0gbmV3IFFNYXBQcml2YXRlPEtleSxUPiggc2ggKTsKfQoKCgp0ZW1w
bGF0ZTxjbGFzcyBLZXksIGNsYXNzIFQ+CiAgUURhdGFTdHJlYW0mIG9wZXJhdG9yPj4oIFFEYXRh
U3RyZWFtJiBzLCBRTWFwPEtleSxUPiYgbSApIHsKICAgIG0uY2xlYXIoKTsKICAgIFFfVUlOVDMy
IGM7CiAgICBzID4+IGM7CiAgICBmb3IoIFFfVUlOVDMyIGkgPSAwOyBpIDwgYzsgKytpICkgewoJ
S2V5IGs7IFQgdDsKCXMgPj4gayA+PiB0OwoJbS5pbnNlcnQoIGssIHQgKTsKCWlmICggcy5hdEVu
ZCgpICkKCSAgICBicmVhazsKICAgIH0KICAgIHJldHVybiBzOwp9CgoKdGVtcGxhdGU8Y2xhc3Mg
S2V5LCBjbGFzcyBUPgogIFFEYXRhU3RyZWFtJiBvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSYgcywg
Y29uc3QgUU1hcDxLZXksVD4mIG0gKSB7CiAgICBzIDw8IChRX1VJTlQzMiltLnNpemUoKTsKICAg
IFFNYXBDb25zdEl0ZXJhdG9yPEtleSxUPiBpdCA9IG0uYmVnaW4oKTsKICAgIGZvciggOyBpdCAh
PSBtLmVuZCgpOyArK2l0ICkKCXMgPDwgaXQua2V5KCkgPDwgaXQuZGF0YSgpOwogICAgcmV0dXJu
IHM7Cn0KCgoKIyA0MyAiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3FtaW1lLmgiIDIKCgoKCgpjbGFz
cyBRSW1hZ2VEcmFnOwpjbGFzcyBRVGV4dERyYWc7CgpjbGFzcyAgIFFNaW1lU291cmNlCnsKICAg
IGZyaWVuZCBjbGFzcyBRQ2xpcGJvYXJkRGF0YTsKCnB1YmxpYzoKICAgIFFNaW1lU291cmNlKCk7
CiAgICB2aXJ0dWFsIH5RTWltZVNvdXJjZSgpOwogICAgdmlydHVhbCBjb25zdCBjaGFyKiBmb3Jt
YXQoIGludCBuID0gMCApIGNvbnN0ID0gMDsKICAgIHZpcnR1YWwgYm9vbCBwcm92aWRlcyggY29u
c3QgY2hhciogKSBjb25zdDsKICAgIHZpcnR1YWwgUUJ5dGVBcnJheSBlbmNvZGVkRGF0YSggY29u
c3QgY2hhciogKSBjb25zdCA9IDA7CiAgICBpbnQgc2VyaWFsTnVtYmVyKCkgY29uc3Q7Cgpwcml2
YXRlOgogICAgaW50IHNlcl9ubzsKICAgIGVudW0geyBOb0NhY2hlLCBUZXh0LCBHcmFwaGljcyB9
IGNhY2hlVHlwZTsKICAgIHVuaW9uCiAgICB7CglzdHJ1Y3QKCXsKCSAgICBRU3RyaW5nICpzdHI7
CgkgICAgUUNTdHJpbmcgKnN1YnR5cGU7Cgl9IHR4dDsKCXN0cnVjdAoJewoJICAgIFFJbWFnZSAq
aW1nOwoJICAgIFFQaXhtYXAgKnBpeDsKCX0gZ2Z4OwogICAgfSBjYWNoZTsKICAgIHZvaWQgY2xl
YXJDYWNoZSgpOwoKICAgICAKICAgIGZyaWVuZCBjbGFzcyBRSW1hZ2VEcmFnOwogICAgZnJpZW5k
IGNsYXNzIFFUZXh0RHJhZzsKCn07CgppbmxpbmUgaW50IFFNaW1lU291cmNlOjpzZXJpYWxOdW1i
ZXIoKSBjb25zdAp7IHJldHVybiBzZXJfbm87IH0KCmNsYXNzIFFTdHJpbmdMaXN0OwpjbGFzcyBR
TWltZVNvdXJjZUZhY3RvcnlEYXRhOwoKY2xhc3MgICBRTWltZVNvdXJjZUZhY3RvcnkgewpwdWJs
aWM6CiAgICBRTWltZVNvdXJjZUZhY3RvcnkoKTsKICAgIHZpcnR1YWwgflFNaW1lU291cmNlRmFj
dG9yeSgpOwoKICAgIHN0YXRpYyBRTWltZVNvdXJjZUZhY3RvcnkqIGRlZmF1bHRGYWN0b3J5KCk7
CiAgICBzdGF0aWMgdm9pZCBzZXREZWZhdWx0RmFjdG9yeSggUU1pbWVTb3VyY2VGYWN0b3J5KiAp
OwogICAgc3RhdGljIFFNaW1lU291cmNlRmFjdG9yeSogdGFrZURlZmF1bHRGYWN0b3J5KCk7CiAg
ICBzdGF0aWMgdm9pZCBhZGRGYWN0b3J5KCBRTWltZVNvdXJjZUZhY3RvcnkgKmYgKTsKICAgIHN0
YXRpYyB2b2lkIHJlbW92ZUZhY3RvcnkoIFFNaW1lU291cmNlRmFjdG9yeSAqZiApOwoKICAgIHZp
cnR1YWwgY29uc3QgUU1pbWVTb3VyY2UqIGRhdGEoY29uc3QgUVN0cmluZyYgYWJzX25hbWUpIGNv
bnN0OwogICAgdmlydHVhbCBRU3RyaW5nIG1ha2VBYnNvbHV0ZShjb25zdCBRU3RyaW5nJiBhYnNf
b3JfcmVsX25hbWUsIGNvbnN0IFFTdHJpbmcmIGNvbnRleHQpIGNvbnN0OwogICAgY29uc3QgUU1p
bWVTb3VyY2UqIGRhdGEoY29uc3QgUVN0cmluZyYgYWJzX29yX3JlbF9uYW1lLCBjb25zdCBRU3Ry
aW5nJiBjb250ZXh0KSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dCggY29uc3QgUVN0
cmluZyYgYWJzX25hbWUsIGNvbnN0IFFTdHJpbmcmIHRleHQgKTsKICAgIHZpcnR1YWwgdm9pZCBz
ZXRJbWFnZSggY29uc3QgUVN0cmluZyYgYWJzX25hbWUsIGNvbnN0IFFJbWFnZSYgaW0gKTsKICAg
IHZpcnR1YWwgdm9pZCBzZXRQaXhtYXAoIGNvbnN0IFFTdHJpbmcmIGFic19uYW1lLCBjb25zdCBR
UGl4bWFwJiBwbSApOwogICAgdmlydHVhbCB2b2lkIHNldERhdGEoIGNvbnN0IFFTdHJpbmcmIGFi
c19uYW1lLCBRTWltZVNvdXJjZSogZGF0YSApOwogICAgdmlydHVhbCB2b2lkIHNldEZpbGVQYXRo
KCBjb25zdCBRU3RyaW5nTGlzdCYgKTsKICAgIHZpcnR1YWwgUVN0cmluZ0xpc3QgZmlsZVBhdGgo
KSBjb25zdDsKICAgIHZvaWQgYWRkRmlsZVBhdGgoIGNvbnN0IFFTdHJpbmcmICk7CiAgICB2aXJ0
dWFsIHZvaWQgc2V0RXh0ZW5zaW9uVHlwZSggY29uc3QgUVN0cmluZyYgZXh0LCBjb25zdCBjaGFy
KiBtaW1ldHlwZSApOwoKcHJpdmF0ZToKICAgIFFNaW1lU291cmNlICpkYXRhSW50ZXJuYWwoY29u
c3QgUVN0cmluZyYgYWJzX25hbWUsIGNvbnN0IFFNYXA8UVN0cmluZywgUVN0cmluZz4gJmV4dGVu
c2lvbnMgKSBjb25zdDsKICAgIFFNaW1lU291cmNlRmFjdG9yeURhdGEqIGQ7Cn07CgojIDE1NyAi
L3Vzci9sb2NhbC9xdC9pbmNsdWRlL3FtaW1lLmgiCgoKCgoKIyA0NSAiL3Vzci9sb2NhbC9xdC9p
bmNsdWRlL3FldmVudC5oIiAyCgoKCgpjbGFzcyAgIFFFdmVudDogcHVibGljIFF0CQkgCnsKcHVi
bGljOgogICAgZW51bSBUeXBlIHsKCgkgCgkgCgkgCgkgCgoJTm9uZSA9IDAsCQkJCSAKCgoJVGlt
ZXIgPSAxLAkJCQkgCglNb3VzZUJ1dHRvblByZXNzID0gMiwJCQkgCglNb3VzZUJ1dHRvblJlbGVh
c2UgPSAzLAkJCSAKCU1vdXNlQnV0dG9uRGJsQ2xpY2s9IDQsCQkJIAoJTW91c2VNb3ZlID0gNSwJ
CQkJIAoJS2V5UHJlc3MgPSA2LAkJCQkgCglLZXlSZWxlYXNlID0gNywJCQkJIAoJRm9jdXNJbiA9
IDgsCQkJCSAKCUZvY3VzT3V0ID0gOSwJCQkJIAoJRW50ZXIgPSAxMCwJCQkJIAoJTGVhdmUgPSAx
MSwJCQkJIAoJUGFpbnQgPSAxMiwJCQkJIAoJTW92ZSA9IDEzLAkJCQkgCglSZXNpemUgPSAxNCwJ
CQkJIAoJQ3JlYXRlID0gMTUsCQkJCSAKCURlc3Ryb3kgPSAxNiwJCQkJIAoJU2hvdyA9IDE3LAkJ
CQkgCglIaWRlID0gMTgsCQkJCSAKCUNsb3NlID0gMTksCQkJCSAKCVF1aXQgPSAyMCwJCQkJIAoJ
UmVwYXJlbnQgPSAyMSwJCQkJIAoJU2hvd01pbmltaXplZCA9IDIyLAkJICAgICAgIAkgCglTaG93
Tm9ybWFsID0gMjMsCSAgICAgICAJCSAKCVdpbmRvd0FjdGl2YXRlID0gMjQsCSAgICAgICAJCSAK
CVdpbmRvd0RlYWN0aXZhdGUgPSAyNSwJICAgICAgIAkJIAoJU2hvd1RvUGFyZW50ID0gMjYsCSAg
ICAgICAJCSAKCUhpZGVUb1BhcmVudCA9IDI3LAkgICAgICAgCQkgCglTaG93TWF4aW1pemVkID0g
MjgsCQkgICAgICAgCSAKCVNob3dGdWxsU2NyZWVuID0gMjksCQkJIAoJQWNjZWwgPSAzMCwJCQkJ
IAoJV2hlZWwgPSAzMSwJCQkJIAoJQWNjZWxBdmFpbGFibGUgPSAzMiwJCQkgCglDYXB0aW9uQ2hh
bmdlID0gMzMsCQkJIAoJSWNvbkNoYW5nZSA9IDM0LAkJCSAKCVBhcmVudEZvbnRDaGFuZ2UgPSAz
NSwJCQkgCglBcHBsaWNhdGlvbkZvbnRDaGFuZ2UgPSAzNiwJCSAKCVBhcmVudFBhbGV0dGVDaGFu
Z2UgPSAzNywJCSAKCUFwcGxpY2F0aW9uUGFsZXR0ZUNoYW5nZSA9IDM4LAkJIAoJUGFsZXR0ZUNo
YW5nZSA9IDM5LAkJCSAKCUNsaXBib2FyZCA9IDQwLAkJCQkgCglTcGVlY2ggPSA0MiwJCQkJIAoJ
U29ja0FjdCA9IDUwLAkJCQkgCglBY2NlbE92ZXJyaWRlID0gNTEsCQkJIAoJRGVmZXJyZWREZWxl
dGUgPSA1MiwJCQkgCglEcmFnRW50ZXIgPSA2MCwJCQkJIAoJRHJhZ01vdmUgPSA2MSwJCQkJIAoJ
RHJhZ0xlYXZlID0gNjIsCQkJCSAKCURyb3AgPSA2MywJCQkJIAoJRHJhZ1Jlc3BvbnNlID0gNjQs
CQkJIAoJQ2hpbGRJbnNlcnRlZCA9IDcwLAkJCSAKCUNoaWxkUmVtb3ZlZCA9IDcxLAkJCSAKCUxh
eW91dEhpbnQgPSA3MiwJCQkgCglTaG93V2luZG93UmVxdWVzdCA9IDczLAkJCSAKCUFjdGl2YXRl
Q29udHJvbCA9IDgwLAkJCSAKCURlYWN0aXZhdGVDb250cm9sID0gODEsCQkJIAoJQ29udGV4dE1l
bnUgPSA4MiwgICAgICAgICAgICAgICAgICAgICAgICAKCUlNU3RhcnQgPSA4MywJCQkJIAoJSU1D
b21wb3NlID0gODQsCQkJCSAKCUlNRW5kID0gODUsCQkJCSAKCUFjY2Vzc2liaWxpdHkgPSA4NiwJ
CQkgCglUYWJsZXQgPSA4NywJCQkJIAoJVXNlciA9IDEwMDAsCQkJCSAKCU1heFVzZXIgID0gNjU1
MzUgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICB9OwoKCiAgICBRRXZlbnQoIFR5cGUgdHlw
ZSApIDogdCh0eXBlKSwgcG9zdGVkKEZBTFNFKSwgc3BvbnQoRkFMU0UpIHt9CiAgICB2aXJ0dWFs
IH5RRXZlbnQoKTsKICAgIFR5cGUgIHR5cGUoKSBjb25zdAl7IHJldHVybiB0OyB9CiAgICBib29s
IHNwb250YW5lb3VzKCkgY29uc3QgCXsgcmV0dXJuIHNwb250OyB9CnByb3RlY3RlZDoKICAgIFR5
cGUgIHQ7CnByaXZhdGU6CiAgICB1aW50IHBvc3RlZCA6IDE7CiAgICB1aW50IHNwb250IDogMTsK
CgogICAgZnJpZW5kIGNsYXNzIFFBcHBsaWNhdGlvbjsKICAgIGZyaWVuZCBjbGFzcyBRQmFzZUFw
cGxpY2F0aW9uOwogICAgZnJpZW5kIGNsYXNzIFFFVFdpZGdldDsKfTsKCgpjbGFzcyAgIFFUaW1l
ckV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFUaW1lckV2ZW50KCBpbnQgdGlt
ZXJJZCApCgk6IFFFdmVudChUaW1lciksIGlkKHRpbWVySWQpIHt9CiAgICBpbnQJICB0aW1lcklk
KCkJY29uc3QJeyByZXR1cm4gaWQ7IH0KcHJvdGVjdGVkOgogICAgaW50CSAgaWQ7Cn07CgoKY2xh
c3MgICBRTW91c2VFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRTW91c2VFdmVu
dCggVHlwZSB0eXBlLCBjb25zdCBRUG9pbnQgJnBvcywgaW50IGJ1dHRvbiwgaW50IHN0YXRlICk7
CgogICAgUU1vdXNlRXZlbnQoIFR5cGUgdHlwZSwgY29uc3QgUVBvaW50ICZwb3MsIGNvbnN0IFFQ
b2ludCZnbG9iYWxQb3MsCgkJIGludCBidXR0b24sIGludCBzdGF0ZSApCgk6IFFFdmVudCh0eXBl
KSwgcChwb3MpLCBnKGdsb2JhbFBvcyksIGIoKHVzaG9ydClidXR0b24pLHMoKHVzaG9ydClzdGF0
ZSksYWNjcHQoVFJVRSkge307CgogICAgY29uc3QgUVBvaW50ICZwb3MoKSBjb25zdAl7IHJldHVy
biBwOyB9CiAgICBjb25zdCBRUG9pbnQgJmdsb2JhbFBvcygpIGNvbnN0IHsgcmV0dXJuIGc7IH0K
ICAgIGludAkgICB4KCkJCWNvbnN0CXsgcmV0dXJuIHAueCgpOyB9CiAgICBpbnQJICAgeSgpCQlj
b25zdAl7IHJldHVybiBwLnkoKTsgfQogICAgaW50CSAgIGdsb2JhbFgoKQljb25zdAl7IHJldHVy
biBnLngoKTsgfQogICAgaW50CSAgIGdsb2JhbFkoKQljb25zdAl7IHJldHVybiBnLnkoKTsgfQog
ICAgQnV0dG9uU3RhdGUgYnV0dG9uKCkgY29uc3QJeyByZXR1cm4gKEJ1dHRvblN0YXRlKSBiOyB9
CiAgICBCdXR0b25TdGF0ZSBzdGF0ZSgpCWNvbnN0CXsgcmV0dXJuIChCdXR0b25TdGF0ZSkgczsg
fQogICAgQnV0dG9uU3RhdGUgc3RhdGVBZnRlcigpIGNvbnN0OwogICAgYm9vbCAgIGlzQWNjZXB0
ZWQoKSBjb25zdAl7IHJldHVybiBhY2NwdDsgfQogICAgdm9pZCAgIGFjY2VwdCgpCQl7IGFjY3B0
ID0gVFJVRTsgfQogICAgdm9pZCAgIGlnbm9yZSgpCQl7IGFjY3B0ID0gRkFMU0U7IH0KcHJvdGVj
dGVkOgogICAgUVBvaW50IHA7CiAgICBRUG9pbnQgZzsKICAgIHVzaG9ydCBiOwogICAgdXNob3J0
IHM7CiAgICB1aW50ICAgYWNjcHQ6MTsKfTsKCgoKY2xhc3MgICBRV2hlZWxFdmVudCA6IHB1Ymxp
YyBRRXZlbnQKewpwdWJsaWM6CiAgICBRV2hlZWxFdmVudCggY29uc3QgUVBvaW50ICZwb3MsIGlu
dCBkZWx0YSwgaW50IHN0YXRlLCBPcmllbnRhdGlvbiBvcmllbnQgPSBWZXJ0aWNhbCApOwogICAg
UVdoZWVsRXZlbnQoIGNvbnN0IFFQb2ludCAmcG9zLCBjb25zdCBRUG9pbnQmIGdsb2JhbFBvcywg
aW50IGRlbHRhLCBpbnQgc3RhdGUsIE9yaWVudGF0aW9uIG9yaWVudCA9IFZlcnRpY2FsICApCgk6
IFFFdmVudChXaGVlbCksIHAocG9zKSwgZyhnbG9iYWxQb3MpLCBkKGRlbHRhKSwgcygodXNob3J0
KXN0YXRlKSwKCSAgYWNjcHQoVFJVRSksIG8ob3JpZW50KSB7fQogICAgaW50CSAgIGRlbHRhKCkJ
Y29uc3QJeyByZXR1cm4gZDsgfQogICAgY29uc3QgUVBvaW50ICZwb3MoKSBjb25zdAl7IHJldHVy
biBwOyB9CiAgICBjb25zdCBRUG9pbnQgJmdsb2JhbFBvcygpIGNvbnN0CXsgcmV0dXJuIGc7IH0K
ICAgIGludAkgICB4KCkJCWNvbnN0CXsgcmV0dXJuIHAueCgpOyB9CiAgICBpbnQJICAgeSgpCQlj
b25zdAl7IHJldHVybiBwLnkoKTsgfQogICAgaW50CSAgIGdsb2JhbFgoKQljb25zdAl7IHJldHVy
biBnLngoKTsgfQogICAgaW50CSAgIGdsb2JhbFkoKQljb25zdAl7IHJldHVybiBnLnkoKTsgfQog
ICAgQnV0dG9uU3RhdGUgc3RhdGUoKQljb25zdAl7IHJldHVybiBCdXR0b25TdGF0ZShzKTsgfQog
ICAgT3JpZW50YXRpb24gb3JpZW50YXRpb24oKSAJY29uc3QgCXsgcmV0dXJuIG87IH0KICAgIGJv
b2wgICBpc0FjY2VwdGVkKCkgY29uc3QJeyByZXR1cm4gYWNjcHQ7IH0KICAgIHZvaWQgICBhY2Nl
cHQoKQkJeyBhY2NwdCA9IFRSVUU7IH0KICAgIHZvaWQgICBpZ25vcmUoKQkJeyBhY2NwdCA9IEZB
TFNFOyB9CnByb3RlY3RlZDoKICAgIFFQb2ludCBwOwogICAgUVBvaW50IGc7CiAgICBpbnQgZDsK
ICAgIHVzaG9ydCBzOwogICAgYm9vbCAgIGFjY3B0OwogICAgT3JpZW50YXRpb24gbzsKfTsKCgpj
bGFzcyAgIFFUYWJsZXRFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBlbnVtIFRh
YmxldERldmljZSB7IE5vRGV2aWNlID0gLTEsIFB1Y2ssIFN0eWx1cywgRXJhc2VyIH07CiAgICBR
VGFibGV0RXZlbnQoIGNvbnN0IFFQb2ludCAmcG9zLCBpbnQgZGV2aWNlLCBpbnQgcHJlc3N1cmUs
IGludCB4VGlsdCwgCiAgICAgICAgICAgICAgICAgIGludCB5VGlsdCwgY29uc3QgUVBhaXI8aW50
LGludD4gJnVJZCApCgk6IFFFdmVudCggVGFibGV0ICksIG1Qb3MoIHBvcyApLCBtRGV2KCBkZXZp
Y2UgKSwgbVByZXNzKCBwcmVzc3VyZSApLAoJICBtWFQoIHhUaWx0ICksIG1ZVCggeVRpbHQgKSwg
bVR5cGUoIHVJZC5maXJzdCApLCBtUGh5KCB1SWQuc2Vjb25kICkKICAgIHt9CiAgICBRVGFibGV0
RXZlbnQoIGNvbnN0IFFQb2ludCAmcG9zLCBjb25zdCBRUG9pbnQgJmdsb2JhbFBvcywgaW50IGRl
dmljZSwKCQkgIGludCBwcmVzc3VyZSwgaW50IHhUaWx0LCBpbnQgeVRpbHQsIGNvbnN0IFFQYWly
PGludCxpbnQ+ICZ1SWQgKQoJOiBRRXZlbnQoIFRhYmxldCApLCBtUG9zKCBwb3MgKSwgbUdQb3Mo
IGdsb2JhbFBvcyApLCBtRGV2KCBkZXZpY2UgKSwKCSAgbVByZXNzKCBwcmVzc3VyZSApLCBtWFQo
IHhUaWx0ICksIG1ZVCggeVRpbHQgKSwgbVR5cGUoIHVJZC5maXJzdCApLAoJICBtUGh5KCB1SWQu
c2Vjb25kICkKICAgIHt9CiAgICBpbnQgcHJlc3N1cmUoKQljb25zdCB7IHJldHVybiBtUHJlc3M7
IH0KICAgIGludCB4VGlsdCgpCQljb25zdCB7IHJldHVybiBtWFQ7IH0KICAgIGludCB5VGlsdCgp
CQljb25zdCB7IHJldHVybiBtWVQ7IH0KICAgIGNvbnN0IFFQb2ludCAmcG9zKCkJY29uc3QgeyBy
ZXR1cm4gbVBvczsgfQogICAgY29uc3QgUVBvaW50ICZnbG9iYWxQb3MoKSBjb25zdCB7IHJldHVy
biBtR1BvczsgfQogICAgaW50IHgoKQkJY29uc3QgeyByZXR1cm4gbVBvcy54KCk7IH0KICAgIGlu
dCB5KCkJCWNvbnN0IHsgcmV0dXJuIG1Qb3MueSgpOyB9CiAgICBpbnQgZ2xvYmFsWCgpCWNvbnN0
IHsgcmV0dXJuIG1HUG9zLngoKTsgfQogICAgaW50IGdsb2JhbFkoKQljb25zdCB7IHJldHVybiBt
R1Bvcy55KCk7IH0KICAgIFRhYmxldERldmljZSBkZXZpY2UoKSAJY29uc3QgeyByZXR1cm4gVGFi
bGV0RGV2aWNlKG1EZXYpOyB9CiAgICBpbnQgaXNBY2NlcHRlZCgpIGNvbnN0IHsgcmV0dXJuIG1i
QWNjOyB9CiAgICB2b2lkIGFjY2VwdCgpIHsgbWJBY2MgPSBUUlVFOyB9CiAgICB2b2lkIGlnbm9y
ZSgpIHsgbWJBY2MgPSBGQUxTRTsgfQogICAgUVBhaXI8aW50LGludD4gdW5pcXVlSWQoKSB7IHJl
dHVybiBRUGFpcjxpbnQsaW50PiggbVR5cGUsIG1QaHkpOyB9CnByb3RlY3RlZDoKICAgIFFQb2lu
dCBtUG9zOwogICAgUVBvaW50IG1HUG9zOwogICAgaW50IG1EZXYsCiAgICAgICAgbVByZXNzLAog
ICAgICAgIG1YVCwKICAgICAgICBtWVQsCiAgICAgICAgbVR5cGUsCgltUGh5OwogICAgYm9vbCBt
YkFjYzsKICAgIAp9OwoKY2xhc3MgICBRS2V5RXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGlj
OgogICAgUUtleUV2ZW50KCBUeXBlIHR5cGUsIGludCBrZXksIGludCBhc2NpaSwgaW50IHN0YXRl
LAoJCWNvbnN0IFFTdHJpbmcmIHRleHQ9UVN0cmluZzo6bnVsbCwgYm9vbCBhdXRvcmVwPUZBTFNF
LCB1c2hvcnQgY291bnQ9MSApCgk6IFFFdmVudCh0eXBlKSwgdHh0KHRleHQpLCBrKCh1c2hvcnQp
a2V5KSwgcygodXNob3J0KXN0YXRlKSwKCSAgICBhKCh1Y2hhcilhc2NpaSksIGFjY3B0KFRSVUUp
LCBhdXRvcihhdXRvcmVwKSwgYyhjb3VudCkge30KICAgIGludAkgICBrZXkoKQljb25zdAl7IHJl
dHVybiBrOyB9CiAgICBpbnQJICAgYXNjaWkoKQljb25zdAl7IHJldHVybiBhOyB9CiAgICBCdXR0
b25TdGF0ZSBzdGF0ZSgpCWNvbnN0CXsgcmV0dXJuIEJ1dHRvblN0YXRlKHMpOyB9CiAgICBCdXR0
b25TdGF0ZSBzdGF0ZUFmdGVyKCkgY29uc3Q7CiAgICBib29sICAgaXNBY2NlcHRlZCgpIGNvbnN0
CXsgcmV0dXJuIGFjY3B0OyB9CiAgICBRU3RyaW5nIHRleHQoKSAgICAgIGNvbnN0ICAgeyByZXR1
cm4gdHh0OyB9CiAgICBib29sICAgaXNBdXRvUmVwZWF0KCkgY29uc3QJeyByZXR1cm4gYXV0b3I7
IH0KICAgIGludCAgIGNvdW50KCkgY29uc3QJeyByZXR1cm4gaW50KGMpOyB9CiAgICB2b2lkICAg
YWNjZXB0KCkJCXsgYWNjcHQgPSBUUlVFOyB9CiAgICB2b2lkICAgaWdub3JlKCkJCXsgYWNjcHQg
PSBGQUxTRTsgfQoKcHJvdGVjdGVkOgogICAgUVN0cmluZyB0eHQ7CiAgICB1c2hvcnQgaywgczsK
ICAgIHVjaGFyICBhOwogICAgdWludCAgIGFjY3B0OjE7CiAgICB1aW50ICAgYXV0b3I6MTsKICAg
IHVzaG9ydCBjOwp9OwoKCmNsYXNzICAgUUZvY3VzRXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVi
bGljOgoKICAgIFFGb2N1c0V2ZW50KCBUeXBlIHR5cGUgKQoJOiBRRXZlbnQodHlwZSkge30KCiAg
ICBib29sICAgZ290Rm9jdXMoKQljb25zdCB7IHJldHVybiB0eXBlKCkgPT0gRm9jdXNJbjsgfQog
ICAgYm9vbCAgIGxvc3RGb2N1cygpCWNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBGb2N1c091dDsg
fQoKICAgIGVudW0gUmVhc29uIHsgTW91c2UsIFRhYiwgQmFja3RhYiwgQWN0aXZlV2luZG93LCBQ
b3B1cCwgU2hvcnRjdXQsIE90aGVyIH07CiAgICBzdGF0aWMgUmVhc29uIHJlYXNvbigpOwogICAg
c3RhdGljIHZvaWQgc2V0UmVhc29uKCBSZWFzb24gcmVhc29uICk7CiAgICBzdGF0aWMgdm9pZCBy
ZXNldFJlYXNvbigpOwoKcHJpdmF0ZToKICAgIHN0YXRpYyBSZWFzb24gbV9yZWFzb247CiAgICBz
dGF0aWMgUmVhc29uIHByZXZfcmVhc29uOwp9OwoKCmNsYXNzICAgUVBhaW50RXZlbnQgOiBwdWJs
aWMgUUV2ZW50CnsKcHVibGljOgogICAgUVBhaW50RXZlbnQoIGNvbnN0IFFSZWdpb24mIHBhaW50
UmVnaW9uLCBib29sIGVyYXNlZCA9IFRSVUUpCgk6IFFFdmVudChQYWludCksCgkgIHJlYyhwYWlu
dFJlZ2lvbi5ib3VuZGluZ1JlY3QoKSksCgkgIHJlZyhwYWludFJlZ2lvbiksCgkgIGVyYXNlKGVy
YXNlZCl7fQogICAgUVBhaW50RXZlbnQoIGNvbnN0IFFSZWN0ICZwYWludFJlY3QsIGJvb2wgZXJh
c2VkID0gVFJVRSApCgk6IFFFdmVudChQYWludCksCgkgIHJlYyhwYWludFJlY3QpLAoJICByZWco
cGFpbnRSZWN0KSwKCSAgZXJhc2UoZXJhc2VkKXt9CiAgICBjb25zdCBRUmVjdCAmcmVjdCgpIGNv
bnN0CSAgeyByZXR1cm4gcmVjOyB9CiAgICBjb25zdCBRUmVnaW9uICZyZWdpb24oKSBjb25zdCB7
IHJldHVybiByZWc7IH0KICAgIGJvb2wgZXJhc2VkKCkgY29uc3QgeyByZXR1cm4gZXJhc2U7IH0K
cHJvdGVjdGVkOgogICAgZnJpZW5kIGNsYXNzIFFBcHBsaWNhdGlvbjsKICAgIGZyaWVuZCBjbGFz
cyBRQmFzZUFwcGxpY2F0aW9uOwogICAgUVJlY3QgcmVjOwogICAgUVJlZ2lvbiByZWc7CiAgICBi
b29sIGVyYXNlOwp9OwoKCmNsYXNzICAgUU1vdmVFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJs
aWM6CiAgICBRTW92ZUV2ZW50KCBjb25zdCBRUG9pbnQgJnBvcywgY29uc3QgUVBvaW50ICZvbGRQ
b3MgKQoJOiBRRXZlbnQoTW92ZSksIHAocG9zKSwgb2xkcChvbGRQb3MpIHt9CiAgICBjb25zdCBR
UG9pbnQgJnBvcygpCSAgY29uc3QgeyByZXR1cm4gcDsgfQogICAgY29uc3QgUVBvaW50ICZvbGRQ
b3MoKWNvbnN0IHsgcmV0dXJuIG9sZHA7fQpwcm90ZWN0ZWQ6CiAgICBRUG9pbnQgcCwgb2xkcDsK
ICAgIGZyaWVuZCBjbGFzcyBRQXBwbGljYXRpb247CiAgICBmcmllbmQgY2xhc3MgUUJhc2VBcHBs
aWNhdGlvbjsKfTsKCgpjbGFzcyAgIFFSZXNpemVFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJs
aWM6CiAgICBRUmVzaXplRXZlbnQoIGNvbnN0IFFTaXplICZzaXplLCBjb25zdCBRU2l6ZSAmb2xk
U2l6ZSApCgk6IFFFdmVudChSZXNpemUpLCBzKHNpemUpLCBvbGRzKG9sZFNpemUpIHt9CiAgICBj
b25zdCBRU2l6ZSAmc2l6ZSgpCSAgY29uc3QgeyByZXR1cm4gczsgfQogICAgY29uc3QgUVNpemUg
Jm9sZFNpemUoKWNvbnN0IHsgcmV0dXJuIG9sZHM7fQpwcm90ZWN0ZWQ6CiAgICBRU2l6ZSBzLCBv
bGRzOwogICAgZnJpZW5kIGNsYXNzIFFBcHBsaWNhdGlvbjsKICAgIGZyaWVuZCBjbGFzcyBRQmFz
ZUFwcGxpY2F0aW9uOwp9OwoKCmNsYXNzICAgUUNsb3NlRXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsK
cHVibGljOgogICAgUUNsb3NlRXZlbnQoKQoJOiBRRXZlbnQoQ2xvc2UpLCBhY2NwdChGQUxTRSkg
e30KICAgIGJvb2wgICBpc0FjY2VwdGVkKCkgY29uc3QJeyByZXR1cm4gYWNjcHQ7IH0KICAgIHZv
aWQgICBhY2NlcHQoKQkJeyBhY2NwdCA9IFRSVUU7IH0KICAgIHZvaWQgICBpZ25vcmUoKQkJeyBh
Y2NwdCA9IEZBTFNFOyB9CnByb3RlY3RlZDoKICAgIGJvb2wgICBhY2NwdDsKfTsKCgpjbGFzcyAg
IFFTaG93RXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAgUVNob3dFdmVudCgpCgk6
IFFFdmVudChTaG93KSB7fQp9OwoKCmNsYXNzICAgUUhpZGVFdmVudCA6IHB1YmxpYyBRRXZlbnQK
ewpwdWJsaWM6CiAgICBRSGlkZUV2ZW50KCkKCTogUUV2ZW50KEhpZGUpIHt9Cn07CgpjbGFzcyAg
IFFDb250ZXh0TWVudUV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIGVudW0gUmVh
c29uIHsgTW91c2UsIEtleWJvYXJkLCBPdGhlciB9OwogICAgUUNvbnRleHRNZW51RXZlbnQoIFJl
YXNvbiByZWFzb24sIGNvbnN0IFFQb2ludCAmcG9zLCBjb25zdCBRUG9pbnQgJmdsb2JhbFBvcywg
aW50IHN0YXRlICkKCTogUUV2ZW50KCBDb250ZXh0TWVudSApLCBwKCBwb3MgKSwgZ3AoIGdsb2Jh
bFBvcyApLCBhY2NwdCggRkFMU0UgKSwgY29uc3VtKEZBTFNFKSwKCXJlYXMoIHJlYXNvbiApLCBz
KCh1c2hvcnQpc3RhdGUpIHt9CiAgICBRQ29udGV4dE1lbnVFdmVudCggUmVhc29uIHJlYXNvbiwg
Y29uc3QgUVBvaW50ICZwb3MsIGludCBzdGF0ZSApOwoKICAgIGludAkgICAgeCgpIGNvbnN0IHsg
cmV0dXJuIHAueCgpOyB9CiAgICBpbnQJICAgIHkoKSBjb25zdCB7IHJldHVybiBwLnkoKTsgfQog
ICAgaW50CSAgICBnbG9iYWxYKCkgY29uc3QgeyByZXR1cm4gZ3AueCgpOyB9CiAgICBpbnQJICAg
IGdsb2JhbFkoKSBjb25zdCB7IHJldHVybiBncC55KCk7IH0KCiAgICBjb25zdCBRUG9pbnQmICAg
cG9zKCkgY29uc3QgeyByZXR1cm4gcDsgfQogICAgY29uc3QgUVBvaW50JiAgIGdsb2JhbFBvcygp
IGNvbnN0IHsgcmV0dXJuIGdwOyB9CgogICAgQnV0dG9uU3RhdGUgc3RhdGUoKQljb25zdAl7IHJl
dHVybiAoQnV0dG9uU3RhdGUpIHM7IH0KICAgIGJvb2wgICAgaXNBY2NlcHRlZCgpIGNvbnN0CXsg
cmV0dXJuIGFjY3B0OyB9CiAgICBib29sICAgIGlzQ29uc3VtZWQoKSBjb25zdCAgeyByZXR1cm4g
Y29uc3VtOyB9CiAgICB2b2lkICAgIGNvbnN1bWUoKSAgICAgICAgICAgeyBjb25zdW0gPSBUUlVF
OyB9CiAgICB2b2lkICAgIGFjY2VwdCgpCQl7IGFjY3B0ID0gVFJVRTsgY29uc3VtID0gVFJVRTsg
fQogICAgdm9pZCAgICBpZ25vcmUoKQkJeyBhY2NwdCA9IEZBTFNFOyBjb25zdW0gPSBGQUxTRTsg
fQoKICAgIFJlYXNvbiAgcmVhc29uKCkgY29uc3QgeyByZXR1cm4gUmVhc29uKCByZWFzICk7IH0K
CnByb3RlY3RlZDoKICAgIFFQb2ludCAgcDsKICAgIFFQb2ludCAgZ3A7CiAgICBib29sICAgIGFj
Y3B0OwogICAgYm9vbCAgICBjb25zdW07CiAgICB1aW50ICAgIHJlYXM6ODsKICAgIHVzaG9ydCBz
Owp9OwoKCmNsYXNzICAgUUlNRXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAgUUlN
RXZlbnQoIFR5cGUgdHlwZSwgY29uc3QgUVN0cmluZyAmdGV4dCwgaW50IGN1cnNvclBvc2l0aW9u
ICkKCTogUUV2ZW50KHR5cGUpLCB0eHQodGV4dCksIGNwb3MoY3Vyc29yUG9zaXRpb24pLCBhKEZB
TFNFKSB7fQogICAgY29uc3QgUVN0cmluZyAmdGV4dCgpIGNvbnN0IHsgcmV0dXJuIHR4dDsgfQog
ICAgaW50IGN1cnNvclBvcygpIGNvbnN0IHsgcmV0dXJuIGNwb3M7IH0KICAgIGJvb2wgaXNBY2Nl
cHRlZCgpIGNvbnN0IHsgcmV0dXJuIGE7IH0KICAgIHZvaWQgYWNjZXB0KCkgeyBhID0gVFJVRTsg
fQogICAgdm9pZCBpZ25vcmUoKSB7IGEgPSBGQUxTRTsgfQpwcml2YXRlOgogICAgUVN0cmluZyB0
eHQ7CiAgICBpbnQgY3BvczsKICAgIGJvb2wgYTsKfTsKCgoKCiAKIAogCgpjbGFzcyAgIFFEcm9w
RXZlbnQgOiBwdWJsaWMgUUV2ZW50LCBwdWJsaWMgUU1pbWVTb3VyY2UKewpwdWJsaWM6CiAgICBR
RHJvcEV2ZW50KCBjb25zdCBRUG9pbnQmIHBvcywgVHlwZSB0eXA9RHJvcCApCgk6IFFFdmVudCh0
eXApLCBwKHBvcyksCgkgIGFjdCgwKSwgYWNjcHQoMCksIGFjY3B0YWN0KDApLCByZXN2KDApLAoJ
ICBkKDApCgl7fQogICAgY29uc3QgUVBvaW50ICZwb3MoKSBjb25zdAl7IHJldHVybiBwOyB9CiAg
ICBib29sIGlzQWNjZXB0ZWQoKSBjb25zdAl7IHJldHVybiBhY2NwdCB8fCBhY2NwdGFjdDsgfQog
ICAgdm9pZCBhY2NlcHQoYm9vbCB5PVRSVUUpCXsgYWNjcHQgPSB5OyB9CiAgICB2b2lkIGlnbm9y
ZSgpCQl7IGFjY3B0ID0gRkFMU0U7IH0KCiAgICBib29sIGlzQWN0aW9uQWNjZXB0ZWQoKSBjb25z
dCB7IHJldHVybiBhY2NwdGFjdDsgfQogICAgdm9pZCBhY2NlcHRBY3Rpb24oYm9vbCB5PVRSVUUp
IHsgYWNjcHRhY3QgPSB5OyB9CiAgICBlbnVtIEFjdGlvbiB7IENvcHksIExpbmssIE1vdmUsIFBy
aXZhdGUsIFVzZXJBY3Rpb249MTAwIH07CiAgICB2b2lkIHNldEFjdGlvbiggQWN0aW9uIGEgKSB7
IGFjdCA9ICh1aW50KWE7IH0KICAgIEFjdGlvbiBhY3Rpb24oKSBjb25zdCB7IHJldHVybiBBY3Rp
b24oYWN0KTsgfQoKICAgIFFXaWRnZXQqIHNvdXJjZSgpIGNvbnN0OwogICAgY29uc3QgY2hhciog
Zm9ybWF0KCBpbnQgbiA9IDAgKSBjb25zdDsKICAgIFFCeXRlQXJyYXkgZW5jb2RlZERhdGEoIGNv
bnN0IGNoYXIqICkgY29uc3Q7CiAgICBib29sIHByb3ZpZGVzKCBjb25zdCBjaGFyKiApIGNvbnN0
OwoKICAgIFFCeXRlQXJyYXkgZGF0YShjb25zdCBjaGFyKiBmKSBjb25zdCB7IHJldHVybiBlbmNv
ZGVkRGF0YShmKTsgfQoKICAgIHZvaWQgc2V0UG9pbnQoIGNvbnN0IFFQb2ludCYgbnAgKSB7IHAg
PSBucDsgfQoKcHJvdGVjdGVkOgogICAgUVBvaW50IHA7CiAgICB1aW50IGFjdDo4OwogICAgdWlu
dCBhY2NwdDoxOwogICAgdWludCBhY2NwdGFjdDoxOwogICAgdWludCByZXN2OjU7CiAgICB2b2lk
ICogZDsKfTsKCgoKY2xhc3MgICBRRHJhZ01vdmVFdmVudCA6IHB1YmxpYyBRRHJvcEV2ZW50CnsK
cHVibGljOgogICAgUURyYWdNb3ZlRXZlbnQoIGNvbnN0IFFQb2ludCYgcG9zLCBUeXBlIHR5cD1E
cmFnTW92ZSApCgk6IFFEcm9wRXZlbnQocG9zLHR5cCksCgkgIHJlY3QoIHBvcywgUVNpemUoIDEs
IDEgKSApIHt9CiAgICBRUmVjdCBhbnN3ZXJSZWN0KCkgY29uc3QgeyByZXR1cm4gcmVjdDsgfQog
ICAgdm9pZCBhY2NlcHQoIGJvb2wgeT1UUlVFICkgeyBRRHJvcEV2ZW50OjphY2NlcHQoeSk7IH0K
ICAgIHZvaWQgYWNjZXB0KCBjb25zdCBRUmVjdCAmIHIpIHsgYWNjcHQgPSBUUlVFOyByZWN0ID0g
cjsgfQogICAgdm9pZCBpZ25vcmUoIGNvbnN0IFFSZWN0ICYgcikgeyBhY2NwdCA9RkFMU0U7IHJl
Y3QgPSByOyB9CiAgICB2b2lkIGlnbm9yZSgpCQl7IFFEcm9wRXZlbnQ6Omlnbm9yZSgpOyB9Cgpw
cm90ZWN0ZWQ6CiAgICBRUmVjdCByZWN0Owp9OwoKCmNsYXNzICAgUURyYWdFbnRlckV2ZW50IDog
cHVibGljIFFEcmFnTW92ZUV2ZW50CnsKcHVibGljOgogICAgUURyYWdFbnRlckV2ZW50KCBjb25z
dCBRUG9pbnQmIHBvcyApIDoKCVFEcmFnTW92ZUV2ZW50KHBvcywgRHJhZ0VudGVyKSB7IH0KfTsK
CgogCmNsYXNzICAgUURyYWdSZXNwb25zZUV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoK
ICAgIFFEcmFnUmVzcG9uc2VFdmVudCggYm9vbCBhY2NlcHRlZCApCgk6IFFFdmVudChEcmFnUmVz
cG9uc2UpLCBhKGFjY2VwdGVkKSB7fQogICAgYm9vbCAgIGRyYWdBY2NlcHRlZCgpIGNvbnN0CXsg
cmV0dXJuIGE7IH0KcHJvdGVjdGVkOgogICAgYm9vbCBhOwp9OwoKCmNsYXNzICAgUURyYWdMZWF2
ZUV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFEcmFnTGVhdmVFdmVudCgpCgk6
IFFFdmVudChEcmFnTGVhdmUpIHt9Cn07CgoKCmNsYXNzICAgUUNoaWxkRXZlbnQgOiBwdWJsaWMg
UUV2ZW50CnsKcHVibGljOgogICAgUUNoaWxkRXZlbnQoIFR5cGUgdHlwZSwgUU9iamVjdCAqY2hp
bGQgKQoJOiBRRXZlbnQodHlwZSksIGMoY2hpbGQpIHt9CiAgICBRT2JqZWN0ICpjaGlsZCgpIGNv
bnN0CXsgcmV0dXJuIGM7IH0KICAgIGJvb2wgaW5zZXJ0ZWQoKSBjb25zdCB7IHJldHVybiB0ID09
IENoaWxkSW5zZXJ0ZWQ7IH0KICAgIGJvb2wgcmVtb3ZlZCgpIGNvbnN0IHsgcmV0dXJuIHQgPT0g
Q2hpbGRSZW1vdmVkOyB9CnByb3RlY3RlZDoKICAgIFFPYmplY3QgKmM7Cn07CgoKY2xhc3MgICBR
Q3VzdG9tRXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAgUUN1c3RvbUV2ZW50KCBp
bnQgdHlwZSApOwogICAgUUN1c3RvbUV2ZW50KCBUeXBlIHR5cGUsIHZvaWQgKmRhdGEgKQoJOiBR
RXZlbnQodHlwZSksIGQoZGF0YSkge307CiAgICB2b2lkICAgICAgICpkYXRhKCkJY29uc3QJeyBy
ZXR1cm4gZDsgfQogICAgdm9pZAlzZXREYXRhKCB2b2lkKiBkYXRhICkJeyBkID0gZGF0YTsgfQpw
cml2YXRlOgogICAgdm9pZCAgICAgICAqZDsKfTsKCgojIDQ1ICIvdXNyL2xvY2FsL3F0L2luY2x1
ZGUvcW9iamVjdC5oIiAyCgoKCgoKCgpjbGFzcyBRTWV0YU9iamVjdDsKY2xhc3MgUVZhcmlhbnQ7
CmNsYXNzIFFNZXRhUHJvcGVydHk7CmNsYXNzIFFQb3N0RXZlbnRMaXN0OwpjbGFzcyBRT2JqZWN0
UHJpdmF0ZTsKc3RydWN0IFFVT2JqZWN0OwoKY2xhc3MgICBRT2JqZWN0OiBwdWJsaWMgUXQKewog
ICAgcHVibGljOgl2aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1
cm4gc3RhdGljTWV0YU9iamVjdCgpOwl9CXZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1lKCkg
Y29uc3Q7CXZpcnR1YWwgdm9pZCogcXRfY2FzdCggY29uc3QgY2hhciogKTsgdmlydHVhbCBib29s
IHF0X2ludm9rZSggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X2VtaXQoIGludCwg
UVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50LCBpbnQsIFFWYXJpYW50
KiApOyAJc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7CVFPYmplY3QqIHFP
YmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBzdGF0aWMgUVN0cmluZyB0ciggY29u
c3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRpYyBRU3RyaW5nIHRyVXRmOCggY29u
c3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IAlwcml2YXRlOglzdGF0aWMgUU1ldGFPYmpl
Y3QgKm1ldGFPYmo7IAogICAgIAoKcHVibGljOgogICAgUU9iamVjdCggUU9iamVjdCAqcGFyZW50
PTAsIGNvbnN0IGNoYXIgKm5hbWU9MCApOwogICAgdmlydHVhbCB+UU9iamVjdCgpOwoKCgoKCgoK
CiAgICB2aXJ0dWFsIGJvb2wgZXZlbnQoIFFFdmVudCAqICk7CiAgICB2aXJ0dWFsIGJvb2wgZXZl
bnRGaWx0ZXIoIFFPYmplY3QgKiwgUUV2ZW50ICogKTsKCiAgICBib29sCSBpc0EoIGNvbnN0IGNo
YXIgKiApCSBjb25zdDsKICAgIGJvb2wJIGluaGVyaXRzKCBjb25zdCBjaGFyICogKSBjb25zdDsK
CiAgICBjb25zdCBjaGFyICAqbmFtZSgpIGNvbnN0OwogICAgY29uc3QgY2hhciAgKm5hbWUoIGNv
bnN0IGNoYXIgKiBkZWZhdWx0TmFtZSApIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBzZXROYW1l
KCBjb25zdCBjaGFyICpuYW1lICk7CiAgICBib29sCSBpc1dpZGdldFR5cGUoKQkgIGNvbnN0IHsg
cmV0dXJuIGlzV2lkZ2V0OyB9CiAgICBib29sCSBoaWdoUHJpb3JpdHkoKQkgIGNvbnN0IHsgcmV0
dXJuIEZBTFNFOyB9CgogICAgYm9vbAkgc2lnbmFsc0Jsb2NrZWQoKSAgY29uc3QgeyByZXR1cm4g
YmxvY2tTaWc7IH0KICAgIHZvaWQJIGJsb2NrU2lnbmFscyggYm9vbCBiICk7CgogICAgaW50CQkg
c3RhcnRUaW1lciggaW50IGludGVydmFsICk7CiAgICB2b2lkCSBraWxsVGltZXIoIGludCBpZCAp
OwogICAgdm9pZAkga2lsbFRpbWVycygpOwoKICAgIFFPYmplY3QgICAgICAgICAgICpjaGlsZCgg
Y29uc3QgY2hhciAqb2JqTmFtZSwgY29uc3QgY2hhciAqaW5oZXJpdHNDbGFzcyA9IDAsIGJvb2wg
cmVjdXJzaXZlU2VhcmNoID0gVFJVRSApOyAgCiAgICBjb25zdCBRT2JqZWN0TGlzdCAqY2hpbGRy
ZW4oKSBjb25zdCB7IHJldHVybiBjaGlsZE9iamVjdHM7IH0KCiAgICBzdGF0aWMgY29uc3QgUU9i
amVjdExpc3QgKm9iamVjdFRyZWVzKCk7CgogICAgUU9iamVjdExpc3QJICAgICAgKnF1ZXJ5TGlz
dCggY29uc3QgY2hhciAqaW5oZXJpdHNDbGFzcyA9IDAsCgkJCQkgIGNvbnN0IGNoYXIgKm9iak5h
bWUgPSAwLAoJCQkJICBib29sIHJlZ2V4cE1hdGNoID0gVFJVRSwKCQkJCSAgYm9vbCByZWN1cnNp
dmVTZWFyY2ggPSBUUlVFICkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIGluc2VydENoaWxkKCBR
T2JqZWN0ICogKTsKICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDaGlsZCggUU9iamVjdCAqICk7Cgog
ICAgdm9pZAkgaW5zdGFsbEV2ZW50RmlsdGVyKCBjb25zdCBRT2JqZWN0ICogKTsKICAgIHZvaWQJ
IHJlbW92ZUV2ZW50RmlsdGVyKCBjb25zdCBRT2JqZWN0ICogKTsKCiAgICBzdGF0aWMgYm9vbCAg
Y29ubmVjdCggY29uc3QgUU9iamVjdCAqc2VuZGVyLCBjb25zdCBjaGFyICpzaWduYWwsCgkJCSAg
Y29uc3QgUU9iamVjdCAqcmVjZWl2ZXIsIGNvbnN0IGNoYXIgKm1lbWJlciApOwogICAgYm9vbAkg
Y29ubmVjdCggY29uc3QgUU9iamVjdCAqc2VuZGVyLCBjb25zdCBjaGFyICpzaWduYWwsCgkJCSAg
Y29uc3QgY2hhciAqbWVtYmVyICkgY29uc3Q7CiAgICBzdGF0aWMgYm9vbCAgZGlzY29ubmVjdCgg
Y29uc3QgUU9iamVjdCAqc2VuZGVyLCBjb25zdCBjaGFyICpzaWduYWwsCgkJCSAgICAgY29uc3Qg
UU9iamVjdCAqcmVjZWl2ZXIsIGNvbnN0IGNoYXIgKm1lbWJlciApOwogICAgYm9vbAkgZGlzY29u
bmVjdCggY29uc3QgY2hhciAqc2lnbmFsPTAsCgkJCSAgICAgY29uc3QgUU9iamVjdCAqcmVjZWl2
ZXI9MCwgY29uc3QgY2hhciAqbWVtYmVyPTAgKTsKICAgIGJvb2wJIGRpc2Nvbm5lY3QoIGNvbnN0
IFFPYmplY3QgKnJlY2VpdmVyLCBjb25zdCBjaGFyICptZW1iZXI9MCApOwogICAgc3RhdGljIHZv
aWQgCSBjb25uZWN0SW50ZXJuYWwoIGNvbnN0IFFPYmplY3QgKnNlbmRlciwgaW50IHNpZ25hbF9p
bmRleCwgY29uc3QgUU9iamVjdCAqcmVjZWl2ZXIsCgkJCQkgIGludCBtZW1iY29kZSwgaW50IG1l
bWJlcl9pbmRleCApOwoKICAgIHZvaWQJIGR1bXBPYmplY3RUcmVlKCk7CiAgICB2b2lkCSBkdW1w
T2JqZWN0SW5mbygpOwoKCiAgICB2aXJ0dWFsIGJvb2wgc2V0UHJvcGVydHkoIGNvbnN0IGNoYXIg
Km5hbWUsIGNvbnN0IFFWYXJpYW50JiB2YWx1ZSApOwogICAgdmlydHVhbCBRVmFyaWFudCBwcm9w
ZXJ0eSggY29uc3QgY2hhciAqbmFtZSApIGNvbnN0OwoKCgoKCgoKCnByb3RlY3RlZCA6CiAgICB2
b2lkCSBkZXN0cm95ZWQoKTsKICAgIHZvaWQJIGRlc3Ryb3llZCggUU9iamVjdCogb2JqICk7Cgpw
dWJsaWM6CiAgICBRT2JqZWN0CSpwYXJlbnQoKSBjb25zdCB7IHJldHVybiBwYXJlbnRPYmo7IH0K
CnB1YmxpYyAgOgogICAgdm9pZAlkZWxldGVMYXRlcigpOwoKcHJpdmF0ZSAgOgogICAgdm9pZAkg
Y2xlYW51cEV2ZW50RmlsdGVyKCBRT2JqZWN0KiApOwoKcHJvdGVjdGVkOgogICAgYm9vbAlhY3Rp
dmF0ZV9maWx0ZXJzKCBRRXZlbnQgKiApOwogICAgUUNvbm5lY3Rpb25MaXN0ICpyZWNlaXZlcnMo
IGNvbnN0IGNoYXIqIHNpZ25hbCApIGNvbnN0OwogICAgUUNvbm5lY3Rpb25MaXN0ICpyZWNlaXZl
cnMoIGludCBzaWduYWwgKSBjb25zdDsKICAgIHZvaWQJYWN0aXZhdGVfc2lnbmFsKCBpbnQgc2ln
bmFsICk7CiAgICB2b2lkCWFjdGl2YXRlX3NpZ25hbCggaW50IHNpZ25hbCwgaW50ICk7CiAgICB2
b2lkCWFjdGl2YXRlX3NpZ25hbCggaW50IHNpZ25hbCwgZG91YmxlICk7CiAgICB2b2lkCWFjdGl2
YXRlX3NpZ25hbCggaW50IHNpZ25hbCwgUVN0cmluZyApOwogICAgdm9pZAlhY3RpdmF0ZV9zaWdu
YWxfYm9vbCggaW50IHNpZ25hbCwgYm9vbCApOwogICAgdm9pZCAJYWN0aXZhdGVfc2lnbmFsKCBR
Q29ubmVjdGlvbkxpc3QgKmNsaXN0LCBRVU9iamVjdCAqbyApOwoKICAgIGNvbnN0IFFPYmplY3Qg
KnNlbmRlcigpOwoKICAgIHZpcnR1YWwgdm9pZCB0aW1lckV2ZW50KCBRVGltZXJFdmVudCAqICk7
CiAgICB2aXJ0dWFsIHZvaWQgY2hpbGRFdmVudCggUUNoaWxkRXZlbnQgKiApOwogICAgdmlydHVh
bCB2b2lkIGN1c3RvbUV2ZW50KCBRQ3VzdG9tRXZlbnQgKiApOwoKICAgIHZpcnR1YWwgdm9pZCBj
b25uZWN0Tm90aWZ5KCBjb25zdCBjaGFyICpzaWduYWwgKTsKICAgIHZpcnR1YWwgdm9pZCBkaXNj
b25uZWN0Tm90aWZ5KCBjb25zdCBjaGFyICpzaWduYWwgKTsKICAgIHZpcnR1YWwgYm9vbCBjaGVj
a0Nvbm5lY3RBcmdzKCBjb25zdCBjaGFyICpzaWduYWwsIGNvbnN0IFFPYmplY3QgKnJlY2VpdmVy
LAoJCQkJICAgY29uc3QgY2hhciAqbWVtYmVyICk7CiAgICBzdGF0aWMgUUNTdHJpbmcgbm9ybWFs
aXplU2lnbmFsU2xvdCggY29uc3QgY2hhciAqc2lnbmFsU2xvdCApOwoKcHJpdmF0ZToKICAgIHVp
bnQJaXNTaWduYWwgICA6IDE7CiAgICB1aW50CWlzV2lkZ2V0ICAgOiAxOwogICAgdWludAlwZW5k
VGltZXIgIDogMTsKICAgIHVpbnQJYmxvY2tTaWcgICA6IDE7CiAgICB1aW50CXdhc0RlbGV0ZWQg
OiAxOwogICAgdWludAlpc1RyZWUgOiAxOwoKICAgIGNvbnN0IGNoYXIJKm9iam5hbWU7CiAgICBR
T2JqZWN0CSpwYXJlbnRPYmo7CiAgICBRT2JqZWN0TGlzdCAqY2hpbGRPYmplY3RzOwogICAgUVNp
Z25hbFZlYyAqY29ubmVjdGlvbnM7CiAgICBRT2JqZWN0TGlzdCAqc2VuZGVyT2JqZWN0czsKICAg
IFFPYmplY3RMaXN0ICpldmVudEZpbHRlcnM7CiAgICBRUG9zdEV2ZW50TGlzdCAqcG9zdGVkRXZl
bnRzOwogICAgUU9iamVjdFByaXZhdGUqIGQ7CgogICAgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0
aWNRdE1ldGFPYmplY3QoKTsKCiAgICBmcmllbmQgY2xhc3MgUUFwcGxpY2F0aW9uOwogICAgZnJp
ZW5kIGNsYXNzIFFCYXNlQXBwbGljYXRpb247CiAgICBmcmllbmQgY2xhc3MgUVdpZGdldDsKICAg
IGZyaWVuZCBjbGFzcyBRU2lnbmFsOwogICAgZnJpZW5kIGNsYXNzIFFTZW5kZXJPYmplY3Q7Cgpw
cml2YXRlOgkgCgogICAgUU9iamVjdCggY29uc3QgUU9iamVjdCAmICk7CiAgICBRT2JqZWN0ICZv
cGVyYXRvcj0oIGNvbnN0IFFPYmplY3QgJiApOwoKfTsKCgppbmxpbmUgYm9vbCBRT2JqZWN0Ojpj
b25uZWN0KCBjb25zdCBRT2JqZWN0ICpzZW5kZXIsIGNvbnN0IGNoYXIgKnNpZ25hbCwKCQkJICAg
ICAgY29uc3QgY2hhciAqbWVtYmVyICkgY29uc3QKewogICAgcmV0dXJuIGNvbm5lY3QoIHNlbmRl
ciwgc2lnbmFsLCB0aGlzLCBtZW1iZXIgKTsKfQoKCmlubGluZSBib29sIFFPYmplY3Q6OmRpc2Nv
bm5lY3QoIGNvbnN0IGNoYXIgKnNpZ25hbCwKCQkJCSBjb25zdCBRT2JqZWN0ICpyZWNlaXZlciwg
Y29uc3QgY2hhciAqbWVtYmVyICkKewogICAgcmV0dXJuIGRpc2Nvbm5lY3QoIHRoaXMsIHNpZ25h
bCwgcmVjZWl2ZXIsIG1lbWJlciApOwp9CgoKaW5saW5lIGJvb2wgUU9iamVjdDo6ZGlzY29ubmVj
dCggY29uc3QgUU9iamVjdCAqcmVjZWl2ZXIsIGNvbnN0IGNoYXIgKm1lbWJlciApCnsKICAgIHJl
dHVybiBkaXNjb25uZWN0KCB0aGlzLCAwLCByZWNlaXZlciwgbWVtYmVyICk7Cn0KCgpjbGFzcyAg
IFFTZW5kZXJPYmplY3QgOiBwdWJsaWMgUU9iamVjdAkJIAp7CnB1YmxpYzoKICAgIHZvaWQgc2V0
U2VuZGVyKCBRT2JqZWN0ICpzICk7Cn07CgojIDI0MSAiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3Fv
YmplY3QuaCIKCgoKCgojIDQzICIvdXNyL2xvY2FsL3F0L2luY2x1ZGUvcXdpZGdldC5oIiAyCgoj
IDEgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xcGFpbnRkZXZpY2UuaCIgMQogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpjbGFzcyBRSU9EZXZpY2U7CmNs
YXNzIFFTdHJpbmc7CgoKCnN0cnVjdCBRUGFpbnREZXZpY2VYMTFEYXRhOwoKCnVuaW9uIFFQRGV2
Q21kUGFyYW0gewogICAgaW50CQkJIGl2YWw7CiAgICBpbnQJCQkqaXZlYzsKICAgIFFTdHJpbmcJ
ICAgICAgICAqc3RyOwogICAgY29uc3QgUVBvaW50CSpwb2ludDsKICAgIGNvbnN0IFFSZWN0CQkq
cmVjdDsKICAgIGNvbnN0IFFQb2ludEFycmF5CSpwdGFycjsKICAgIGNvbnN0IFFQaXhtYXAJKnBp
eG1hcDsKICAgIGNvbnN0IFFJbWFnZQkqaW1hZ2U7CiAgICBjb25zdCBRQ29sb3IJKmNvbG9yOwog
ICAgY29uc3QgUUZvbnQJCSpmb250OwogICAgY29uc3QgUVBlbgkJKnBlbjsKICAgIGNvbnN0IFFC
cnVzaAkqYnJ1c2g7CiAgICBjb25zdCBRUmVnaW9uCSpyZ247CiAgICBjb25zdCBRV01hdHJpeAkq
bWF0cml4OwogICAgUUlPRGV2aWNlCQkqZGV2aWNlOwp9OwoKCgpjbGFzcyAgIFFQYWludERldmlj
ZQkJCQkgCnsKcHVibGljOgogICAgdmlydHVhbCB+UVBhaW50RGV2aWNlKCk7CgogICAgaW50CQlk
ZXZUeXBlKCkgY29uc3Q7CiAgICBib29sCWlzRXh0RGV2KCkgY29uc3Q7CiAgICBib29sCXBhaW50
aW5nQWN0aXZlKCkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIHNldFJlc29sdXRpb24oIGludCAp
OwogICAgdmlydHVhbCBpbnQgcmVzb2x1dGlvbigpIGNvbnN0OwoKICAgICAKICAgICAKCgoKICAg
IHZpcnR1YWwgUXQ6OkhBTkRMRQloYW5kbGUoKSBjb25zdDsKICAgIHZpcnR1YWwgUXQ6OkhBTkRM
RSAgeDExUmVuZGVySGFuZGxlKCkgY29uc3Q7CgoKCgoKCgogICAgRGlzcGxheSAJICAgKngxMURp
c3BsYXkoKSBjb25zdDsKICAgIGludAkJICAgIHgxMVNjcmVlbigpIGNvbnN0OwogICAgaW50CQkg
ICAgeDExRGVwdGgoKSBjb25zdDsKICAgIGludAkJICAgIHgxMUNlbGxzKCkgY29uc3Q7CiAgICBR
dDo6SEFORExFCSAgICB4MTFDb2xvcm1hcCgpIGNvbnN0OwogICAgYm9vbAkgICAgeDExRGVmYXVs
dENvbG9ybWFwKCkgY29uc3Q7CiAgICB2b2lkCSAgICp4MTFWaXN1YWwoKSBjb25zdDsKICAgIGJv
b2wJICAgIHgxMURlZmF1bHRWaXN1YWwoKSBjb25zdDsKCiAgICBzdGF0aWMgRGlzcGxheSAqeDEx
QXBwRGlzcGxheSgpOwogICAgc3RhdGljIGludAkgICAgeDExQXBwU2NyZWVuKCk7CiAgICBzdGF0
aWMgaW50CSAgICB4MTFBcHBEZXB0aCgpOwogICAgc3RhdGljIGludAkgICAgeDExQXBwQ2VsbHMo
KTsKICAgIHN0YXRpYyBpbnQJICAgIHgxMUFwcERwaVgoKTsKICAgIHN0YXRpYyBpbnQJICAgIHgx
MUFwcERwaVkoKTsKICAgIHN0YXRpYyBRdDo6SEFORExFICAgeDExQXBwQ29sb3JtYXAoKTsKICAg
IHN0YXRpYyBib29sICAgICB4MTFBcHBEZWZhdWx0Q29sb3JtYXAoKTsKICAgIHN0YXRpYyB2b2lk
ICAgICp4MTFBcHBWaXN1YWwoKTsKICAgIHN0YXRpYyBib29sCSAgICB4MTFBcHBEZWZhdWx0Vmlz
dWFsKCk7CiAgICBzdGF0aWMgdm9pZAkgICAgeDExU2V0QXBwRHBpWChpbnQpOwogICAgc3RhdGlj
IHZvaWQJICAgIHgxMVNldEFwcERwaVkoaW50KTsKCgoKCgoKCgoKICAgIGVudW0gUERldkNtZCB7
CglQZGNOT1AgPSAwLCAgCglQZGNEcmF3UG9pbnQgPSAxLCAgCglQZGNEcmF3Rmlyc3QgPSBQZGNE
cmF3UG9pbnQsCglQZGNNb3ZlVG8gPSAyLCAgCglQZGNMaW5lVG8gPSAzLCAgCglQZGNEcmF3TGlu
ZSA9IDQsICAKCVBkY0RyYXdSZWN0ID0gNSwgIAoJUGRjRHJhd1JvdW5kUmVjdCA9IDYsICAKCVBk
Y0RyYXdFbGxpcHNlID0gNywgIAoJUGRjRHJhd0FyYyA9IDgsICAKCVBkY0RyYXdQaWUgPSA5LCAg
CglQZGNEcmF3Q2hvcmQgPSAxMCwgIAoJUGRjRHJhd0xpbmVTZWdtZW50cyA9IDExLCAgCglQZGNE
cmF3UG9seWxpbmUgPSAxMiwgIAoJUGRjRHJhd1BvbHlnb24gPSAxMywgIAoJUGRjRHJhd0N1Ymlj
QmV6aWVyID0gMTQsICAKCVBkY0RyYXdUZXh0ID0gMTUsICAKCVBkY0RyYXdUZXh0Rm9ybWF0dGVk
ID0gMTYsICAKCVBkY0RyYXdQaXhtYXAgPSAxNywgIAoJUGRjRHJhd0ltYWdlID0gMTgsICAKCVBk
Y0RyYXdUZXh0MiA9IDE5LCAgCglQZGNEcmF3VGV4dDJGb3JtYXR0ZWQgPSAyMCwgIAoJUGRjRHJh
d0xhc3QgPSBQZGNEcmF3VGV4dDJGb3JtYXR0ZWQsCgoJIAoKCVBkY0JlZ2luID0gMzAsICAKCVBk
Y0VuZCA9IDMxLCAgCglQZGNTYXZlID0gMzIsICAKCVBkY1Jlc3RvcmUgPSAzMywgIAoJUGRjU2V0
ZGV2ID0gMzQsICAKCVBkY1NldEJrQ29sb3IgPSA0MCwgIAoJUGRjU2V0QmtNb2RlID0gNDEsICAK
CVBkY1NldFJPUCA9IDQyLCAgCglQZGNTZXRCcnVzaE9yaWdpbiA9IDQzLCAgCglQZGNTZXRGb250
ID0gNDUsICAKCVBkY1NldFBlbiA9IDQ2LCAgCglQZGNTZXRCcnVzaCA9IDQ3LCAgCglQZGNTZXRU
YWJTdG9wcyA9IDQ4LCAgCglQZGNTZXRUYWJBcnJheSA9IDQ5LCAgCglQZGNTZXRVbml0ID0gNTAs
ICAKCVBkY1NldFZYZm9ybSA9IDUxLCAgCglQZGNTZXRXaW5kb3cgPSA1MiwgIAoJUGRjU2V0Vmll
d3BvcnQgPSA1MywgIAoJUGRjU2V0V1hmb3JtID0gNTQsICAKCVBkY1NldFdNYXRyaXggPSA1NSwg
IAoJUGRjU2F2ZVdNYXRyaXggPSA1NiwKCVBkY1Jlc3RvcmVXTWF0cml4ID0gNTcsCglQZGNTZXRD
bGlwID0gNjAsICAKCVBkY1NldENsaXBSZWdpb24gPSA2MSwgIAoKCVBkY1Jlc2VydmVkU3RhcnQg
PSAwLCAgCglQZGNSZXNlcnZlZFN0b3AgPSAxOTkgIAogICAgfTsKCnByb3RlY3RlZDoKICAgIFFQ
YWludERldmljZSggdWludCBkZXZmbGFncyApOwoKCgoKICAgIFF0OjpIQU5ETEUJaGQ7CQkJCSAK
ICAgIFF0OjpIQU5ETEUgIHJlbmRoZDsgICAgICAgICAgICAgICAgICAgICAgICAgIAoKICAgIHZv
aWQJCSBjb3B5WDExRGF0YSggY29uc3QgUVBhaW50RGV2aWNlICogKTsKICAgIHZvaWQJCSBjbG9u
ZVgxMURhdGEoIGNvbnN0IFFQYWludERldmljZSAqICk7CiAgICB2aXJ0dWFsIHZvaWQJIHNldFgx
MURhdGEoIGNvbnN0IFFQYWludERldmljZVgxMURhdGEqICk7CiAgICBRUGFpbnREZXZpY2VYMTFE
YXRhKiBnZXRYMTFEYXRhKCBib29sIGRlZj1GQUxTRSApIGNvbnN0OwoKCgoKCgoKCgogICAgdmly
dHVhbCBib29sIGNtZCggaW50LCBRUGFpbnRlciAqLCBRUERldkNtZFBhcmFtICogKTsKICAgIHZp
cnR1YWwgaW50CSBtZXRyaWMoIGludCApIGNvbnN0OwogICAgdmlydHVhbCBpbnQJIGZvbnRNZXQo
IFFGb250ICosIGludCwgY29uc3QgY2hhciAqID0gMCwgaW50ID0gMCApIGNvbnN0OwogICAgdmly
dHVhbCBpbnQJIGZvbnRJbmYoIFFGb250ICosIGludCApIGNvbnN0OwoKICAgIHVzaG9ydAlkZXZG
bGFnczsJCQkgCiAgICB1c2hvcnQJcGFpbnRlcnM7CQkJIAoKICAgIGZyaWVuZCBjbGFzcyBRUGFp
bnRlcjsKICAgIGZyaWVuZCBjbGFzcyBRUGFpbnREZXZpY2VNZXRyaWNzOwoKCgoKCgoKICAgIGZy
aWVuZCAgIHZvaWQgYml0Qmx0KCBRUGFpbnREZXZpY2UgKiwgaW50LCBpbnQsCgkJCQkgY29uc3Qg
UVBhaW50RGV2aWNlICosCgkJCQkgaW50LCBpbnQsIGludCwgaW50LCBRdDo6UmFzdGVyT3AsIGJv
b2wgKTsKCgogICAgZnJpZW5kIHZvaWQgcXRfaW5pdF9pbnRlcm5hbCggaW50ICosIGNoYXIgKios
IERpc3BsYXkgKiwgUXQ6OkhBTkRMRSwgUXQ6OkhBTkRMRSApOwoKCnByaXZhdGU6CgogICAgc3Rh
dGljIERpc3BsYXkgKnhfYXBwZGlzcGxheTsKICAgIHN0YXRpYyBpbnQJICAgIHhfYXBwc2NyZWVu
OwogICAgc3RhdGljIGludAkgICAgeF9hcHBkZXB0aDsKICAgIHN0YXRpYyBpbnQJICAgIHhfYXBw
Y2VsbHM7CiAgICBzdGF0aWMgUXQ6OkhBTkRMRSAgIHhfYXBwY29sb3JtYXA7CiAgICBzdGF0aWMg
Ym9vbAkgICAgeF9hcHBkZWZjb2xvcm1hcDsKICAgIHN0YXRpYyB2b2lkCSAgICp4X2FwcHZpc3Vh
bDsKICAgIHN0YXRpYyBib29sICAgICB4X2FwcGRlZnZpc3VhbDsKCiAgICBRUGFpbnREZXZpY2VY
MTFEYXRhKiB4MTFEYXRhOwoKCnByaXZhdGU6CSAKCiAgICBRUGFpbnREZXZpY2UoIGNvbnN0IFFQ
YWludERldmljZSAmICk7CiAgICBRUGFpbnREZXZpY2UgJm9wZXJhdG9yPSggY29uc3QgUVBhaW50
RGV2aWNlICYgKTsKCn07CgoKIAp2b2lkIGJpdEJsdCggUVBhaW50RGV2aWNlICpkc3QsIGludCBk
eCwgaW50IGR5LAoJICAgICBjb25zdCBRUGFpbnREZXZpY2UgKnNyYywgaW50IHN4PTAsIGludCBz
eT0wLCBpbnQgc3c9LTEsIGludCBzaD0tMSwKCSAgICAgUXQ6OlJhc3Rlck9wID0gUXQ6OkNvcHlS
T1AsIGJvb2wgaWdub3JlTWFzaz1GQUxTRSApOwoKIAp2b2lkIGJpdEJsdCggUVBhaW50RGV2aWNl
ICpkc3QsIGludCBkeCwgaW50IGR5LAoJICAgICBjb25zdCBRSW1hZ2UgKnNyYywgaW50IHN4PTAs
IGludCBzeT0wLCBpbnQgc3c9LTEsIGludCBzaD0tMSwKCSAgICAgaW50IGNvbnZlcnNpb25fZmxh
Z3M9MCApOwoKCgoKc3RydWN0ICAgUVBhaW50RGV2aWNlWDExRGF0YSA6IHB1YmxpYyBRU2hhcmVk
IHsKICAgIERpc3BsYXkqCXhfZGlzcGxheTsKICAgIGludAkJeF9zY3JlZW47CiAgICBpbnQJCXhf
ZGVwdGg7CiAgICBpbnQJCXhfY2VsbHM7CiAgICBRdDo6SEFORExFCXhfY29sb3JtYXA7CiAgICBi
b29sCXhfZGVmY29sb3JtYXA7CiAgICB2b2lkKgl4X3Zpc3VhbDsKICAgIGJvb2wJeF9kZWZ2aXN1
YWw7Cn07CgoKCiAKCgoKaW5saW5lIGludCBRUGFpbnREZXZpY2U6OmRldlR5cGUoKSBjb25zdAp7
IHJldHVybiBkZXZGbGFncyAmIFFJbnRlcm5hbDo6RGV2aWNlVHlwZU1hc2s7IH0KCmlubGluZSBi
b29sIFFQYWludERldmljZTo6aXNFeHREZXYoKSBjb25zdAp7IHJldHVybiAoZGV2RmxhZ3MgJiBR
SW50ZXJuYWw6OkV4dGVybmFsRGV2aWNlKSAhPSAwOyB9CgppbmxpbmUgYm9vbCBRUGFpbnREZXZp
Y2U6OnBhaW50aW5nQWN0aXZlKCkgY29uc3QKeyByZXR1cm4gcGFpbnRlcnMgIT0gMDsgfQoKCmlu
bGluZSBEaXNwbGF5ICpRUGFpbnREZXZpY2U6OngxMURpc3BsYXkoKSBjb25zdAp7IHJldHVybiB4
MTFEYXRhID8geDExRGF0YS0+eF9kaXNwbGF5IDogeF9hcHBkaXNwbGF5OyB9CgppbmxpbmUgaW50
IFFQYWludERldmljZTo6eDExU2NyZWVuKCkgY29uc3QKeyByZXR1cm4geDExRGF0YSA/IHgxMURh
dGEtPnhfc2NyZWVuIDogeF9hcHBzY3JlZW47IH0KCmlubGluZSBpbnQgUVBhaW50RGV2aWNlOjp4
MTFEZXB0aCgpIGNvbnN0CnsgcmV0dXJuIHgxMURhdGEgPyB4MTFEYXRhLT54X2RlcHRoIDogeF9h
cHBkZXB0aDsgfQoKaW5saW5lIGludCBRUGFpbnREZXZpY2U6OngxMUNlbGxzKCkgY29uc3QKeyBy
ZXR1cm4geDExRGF0YSA/IHgxMURhdGEtPnhfY2VsbHMgOiB4X2FwcGNlbGxzOyB9CgppbmxpbmUg
UXQ6OkhBTkRMRSBRUGFpbnREZXZpY2U6OngxMUNvbG9ybWFwKCkgY29uc3QKeyByZXR1cm4geDEx
RGF0YSA/IHgxMURhdGEtPnhfY29sb3JtYXAgOiB4X2FwcGNvbG9ybWFwOyB9CgppbmxpbmUgYm9v
bCBRUGFpbnREZXZpY2U6OngxMURlZmF1bHRDb2xvcm1hcCgpIGNvbnN0CnsgcmV0dXJuIHgxMURh
dGEgPyB4MTFEYXRhLT54X2RlZmNvbG9ybWFwIDogeF9hcHBkZWZjb2xvcm1hcDsgfQoKaW5saW5l
IHZvaWQgKlFQYWludERldmljZTo6eDExVmlzdWFsKCkgY29uc3QKeyByZXR1cm4geDExRGF0YSA/
IHgxMURhdGEtPnhfdmlzdWFsIDogeF9hcHB2aXN1YWw7IH0KCmlubGluZSBib29sIFFQYWludERl
dmljZTo6eDExRGVmYXVsdFZpc3VhbCgpIGNvbnN0CnsgcmV0dXJuIHgxMURhdGEgPyB4MTFEYXRh
LT54X2RlZnZpc3VhbCA6IHhfYXBwZGVmdmlzdWFsOyB9CgppbmxpbmUgRGlzcGxheSAqUVBhaW50
RGV2aWNlOjp4MTFBcHBEaXNwbGF5KCkKeyByZXR1cm4geF9hcHBkaXNwbGF5OyB9CgppbmxpbmUg
aW50IFFQYWludERldmljZTo6eDExQXBwU2NyZWVuKCkKeyByZXR1cm4geF9hcHBzY3JlZW47IH0K
CmlubGluZSBpbnQgUVBhaW50RGV2aWNlOjp4MTFBcHBEZXB0aCgpCnsgcmV0dXJuIHhfYXBwZGVw
dGg7IH0KCmlubGluZSBpbnQgUVBhaW50RGV2aWNlOjp4MTFBcHBDZWxscygpCnsgcmV0dXJuIHhf
YXBwY2VsbHM7IH0KCmlubGluZSBRdDo6SEFORExFIFFQYWludERldmljZTo6eDExQXBwQ29sb3Jt
YXAoKQp7IHJldHVybiB4X2FwcGNvbG9ybWFwOyB9CgppbmxpbmUgYm9vbCBRUGFpbnREZXZpY2U6
OngxMUFwcERlZmF1bHRDb2xvcm1hcCgpCnsgcmV0dXJuIHhfYXBwZGVmY29sb3JtYXA7IH0KCmlu
bGluZSB2b2lkICpRUGFpbnREZXZpY2U6OngxMUFwcFZpc3VhbCgpCnsgcmV0dXJuIHhfYXBwdmlz
dWFsOyB9CgppbmxpbmUgYm9vbCBRUGFpbnREZXZpY2U6OngxMUFwcERlZmF1bHRWaXN1YWwoKQp7
IHJldHVybiB4X2FwcGRlZnZpc3VhbDsgfQoKCgoKIAppbmxpbmUgdm9pZCBiaXRCbHQoIFFQYWlu
dERldmljZSAqZHN0LCBjb25zdCBRUG9pbnQgJmRwLAoJCSAgICBjb25zdCBRUGFpbnREZXZpY2Ug
KnNyYywgY29uc3QgUVJlY3QgJnNyID1RUmVjdCgwLDAsLTEsLTEpLAoJCSAgICBRdDo6UmFzdGVy
T3Agcm9wPVF0OjpDb3B5Uk9QLCBib29sIGlnbm9yZU1hc2s9RkFMU0UgKQp7CiAgICBiaXRCbHQo
IGRzdCwgZHAueCgpLCBkcC55KCksIHNyYywgc3IueCgpLCBzci55KCksIHNyLndpZHRoKCksIHNy
LmhlaWdodCgpLAoJICAgIHJvcCwgaWdub3JlTWFzayApOwp9CgoKCgoKIyA0NCAiL3Vzci9sb2Nh
bC9xdC9pbmNsdWRlL3F3aWRnZXQuaCIgMgoKIyAxICIvdXNyL2xvY2FsL3F0L2luY2x1ZGUvcXBh
bGV0dGUuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoj
IDEgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xYnJ1c2guaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmNsYXNzICAgUUJydXNoOiBwdWJsaWMgUXQKewpm
cmllbmQgY2xhc3MgUVBhaW50ZXI7CnB1YmxpYzoKICAgIFFCcnVzaCgpOwogICAgUUJydXNoKCBC
cnVzaFN0eWxlICk7CiAgICBRQnJ1c2goIGNvbnN0IFFDb2xvciAmLCBCcnVzaFN0eWxlPVNvbGlk
UGF0dGVybiApOwogICAgUUJydXNoKCBjb25zdCBRQ29sb3IgJiwgY29uc3QgUVBpeG1hcCAmICk7
CiAgICBRQnJ1c2goIGNvbnN0IFFCcnVzaCAmICk7CiAgIH5RQnJ1c2goKTsKICAgIFFCcnVzaCAm
b3BlcmF0b3I9KCBjb25zdCBRQnJ1c2ggJiApOwoKICAgIEJydXNoU3R5bGUJc3R5bGUoKQkgY29u
c3QJCXsgcmV0dXJuIGRhdGEtPnN0eWxlOyB9CiAgICB2b2lkCXNldFN0eWxlKCBCcnVzaFN0eWxl
ICk7CiAgICBjb25zdCBRQ29sb3IgJmNvbG9yKCljb25zdAkJeyByZXR1cm4gZGF0YS0+Y29sb3I7
IH0KICAgIHZvaWQJc2V0Q29sb3IoIGNvbnN0IFFDb2xvciAmICk7CiAgICBRUGl4bWFwICAgICpw
aXhtYXAoKSBjb25zdAkJeyByZXR1cm4gZGF0YS0+cGl4bWFwOyB9CiAgICB2b2lkCXNldFBpeG1h
cCggY29uc3QgUVBpeG1hcCAmICk7CgogICAgYm9vbAlvcGVyYXRvcj09KCBjb25zdCBRQnJ1c2gg
JnAgKSBjb25zdDsKICAgIGJvb2wJb3BlcmF0b3IhPSggY29uc3QgUUJydXNoICZiICkgY29uc3QK
CQkJCQl7IHJldHVybiAhKG9wZXJhdG9yPT0oYikpOyB9Cgpwcml2YXRlOgogICAgUUJydXNoCWNv
cHkoKQljb25zdDsKICAgIHZvaWQJZGV0YWNoKCk7CiAgICB2b2lkCWluaXQoIGNvbnN0IFFDb2xv
ciAmLCBCcnVzaFN0eWxlICk7CiAgICBzdHJ1Y3QgUUJydXNoRGF0YSA6IHB1YmxpYyBRU2hhcmVk
IHsJIAoJQnJ1c2hTdHlsZSBzdHlsZTsKCVFDb2xvcgkgIGNvbG9yOwoJUVBpeG1hcAkgKnBpeG1h
cDsKICAgIH0gKmRhdGE7Cn07CgoKIAoKCgoKICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURh
dGFTdHJlYW0gJiwgY29uc3QgUUJydXNoICYgKTsKICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+Pigg
UURhdGFTdHJlYW0gJiwgUUJydXNoICYgKTsKCgoKIyA0NSAiL3Vzci9sb2NhbC9xdC9pbmNsdWRl
L3FwYWxldHRlLmgiIDIKCgoKCgpjbGFzcyBRQ29sb3JHcm91cFByaXZhdGU7CgpjbGFzcyAgIFFD
b2xvckdyb3VwCnsKcHVibGljOgogICAgUUNvbG9yR3JvdXAoKTsKICAgIFFDb2xvckdyb3VwKCBj
b25zdCBRQ29sb3IgJmZvcmVncm91bmQsIGNvbnN0IFFDb2xvciAmYnV0dG9uLAoJCSBjb25zdCBR
Q29sb3IgJmxpZ2h0LCBjb25zdCBRQ29sb3IgJmRhcmssIGNvbnN0IFFDb2xvciAmbWlkLAoJCSBj
b25zdCBRQ29sb3IgJnRleHQsIGNvbnN0IFFDb2xvciAmYmFzZSApOwogICAgUUNvbG9yR3JvdXAo
IGNvbnN0IFFCcnVzaCAmZm9yZWdyb3VuZCwgY29uc3QgUUJydXNoICZidXR0b24sCgkJIGNvbnN0
IFFCcnVzaCAmbGlnaHQsIGNvbnN0IFFCcnVzaCAmZGFyaywgY29uc3QgUUJydXNoICZtaWQsCgkJ
IGNvbnN0IFFCcnVzaCAmdGV4dCwgY29uc3QgUUJydXNoICZicmlnaHRfdGV4dCwKCQkgY29uc3Qg
UUJydXNoICZiYXNlLCBjb25zdCBRQnJ1c2ggJmJhY2tncm91bmQpOwogICAgUUNvbG9yR3JvdXAo
IGNvbnN0IFFDb2xvckdyb3VwICYgKTsKCiAgIH5RQ29sb3JHcm91cCgpOwoKICAgIFFDb2xvckdy
b3VwJiBvcGVyYXRvciA9KGNvbnN0IFFDb2xvckdyb3VwJik7CgogICAgIAogICAgZW51bSBDb2xv
clJvbGUgeyBGb3JlZ3JvdW5kLCBCdXR0b24sIExpZ2h0LCBNaWRsaWdodCwgRGFyaywgTWlkLAoJ
CSAgICAgVGV4dCwgQnJpZ2h0VGV4dCwgQnV0dG9uVGV4dCwgQmFzZSwgQmFja2dyb3VuZCwgU2hh
ZG93LAoJCSAgICAgSGlnaGxpZ2h0LCBIaWdobGlnaHRlZFRleHQsIExpbmssIExpbmtWaXNpdGVk
LAoJCSAgICAgTkNvbG9yUm9sZXMgfTsKCiAgICBjb25zdCBRQ29sb3IgJmNvbG9yKCBDb2xvclJv
bGUgKSBjb25zdDsKICAgIGNvbnN0IFFCcnVzaCAmYnJ1c2goIENvbG9yUm9sZSApIGNvbnN0Owog
ICAgdm9pZCBzZXRDb2xvciggQ29sb3JSb2xlLCBjb25zdCBRQ29sb3IgJiApOwogICAgdm9pZCBz
ZXRCcnVzaCggQ29sb3JSb2xlLCBjb25zdCBRQnJ1c2ggJiApOwoKICAgIGNvbnN0IFFDb2xvciAm
Zm9yZWdyb3VuZCgpCWNvbnN0CXsgcmV0dXJuIGJyW0ZvcmVncm91bmRdLmNvbG9yKCk7IH0KICAg
IGNvbnN0IFFDb2xvciAmYnV0dG9uKCkJY29uc3QJeyByZXR1cm4gYnJbQnV0dG9uXS5jb2xvcigp
OyB9CiAgICBjb25zdCBRQ29sb3IgJmxpZ2h0KCkJY29uc3QJeyByZXR1cm4gYnJbTGlnaHRdLmNv
bG9yKCk7IH0KICAgIGNvbnN0IFFDb2xvciAmZGFyaygpCWNvbnN0CXsgcmV0dXJuIGJyW0Rhcmtd
LmNvbG9yKCk7IH0KICAgIGNvbnN0IFFDb2xvciAmbWlkKCkJCWNvbnN0CXsgcmV0dXJuIGJyW01p
ZF0uY29sb3IoKTsgfQogICAgY29uc3QgUUNvbG9yICZ0ZXh0KCkJY29uc3QJeyByZXR1cm4gYnJb
VGV4dF0uY29sb3IoKTsgfQogICAgY29uc3QgUUNvbG9yICZiYXNlKCkJY29uc3QJeyByZXR1cm4g
YnJbQmFzZV0uY29sb3IoKTsgfQogICAgY29uc3QgUUNvbG9yICZiYWNrZ3JvdW5kKCkJY29uc3QJ
eyByZXR1cm4gYnJbQmFja2dyb3VuZF0uY29sb3IoKTsgfQoKICAgIGNvbnN0IFFDb2xvciAmbWlk
bGlnaHQoKQljb25zdAl7IHJldHVybiBicltNaWRsaWdodF0uY29sb3IoKTsgfQogICAgY29uc3Qg
UUNvbG9yICZicmlnaHRUZXh0KCkJY29uc3QJeyByZXR1cm4gYnJbQnJpZ2h0VGV4dF0uY29sb3Io
KTsgfQogICAgY29uc3QgUUNvbG9yICZidXR0b25UZXh0KCkJY29uc3QJeyByZXR1cm4gYnJbQnV0
dG9uVGV4dF0uY29sb3IoKTsgfQogICAgY29uc3QgUUNvbG9yICZzaGFkb3coKQljb25zdAl7IHJl
dHVybiBicltTaGFkb3ddLmNvbG9yKCk7IH0KICAgIGNvbnN0IFFDb2xvciAmaGlnaGxpZ2h0KCkJ
Y29uc3QJeyByZXR1cm4gYnJbSGlnaGxpZ2h0XS5jb2xvcigpOyB9CiAgICBjb25zdCBRQ29sb3Ig
JmhpZ2hsaWdodGVkVGV4dCgpIGNvbnN0e3JldHVybiBicltIaWdobGlnaHRlZFRleHRdLmNvbG9y
KCk7IH0KICAgIGNvbnN0IFFDb2xvciAmbGluaygpICAgICAgICBjb25zdCAgIHsgcmV0dXJuIGJy
W0xpbmtdLmNvbG9yKCk7IH0KICAgIGNvbnN0IFFDb2xvciAmbGlua1Zpc2l0ZWQoKSBjb25zdCAg
IHsgcmV0dXJuIGJyW0xpbmtWaXNpdGVkXS5jb2xvcigpOyB9CgogICAgYm9vbAlvcGVyYXRvcj09
KCBjb25zdCBRQ29sb3JHcm91cCAmZyApIGNvbnN0OwogICAgYm9vbAlvcGVyYXRvciE9KCBjb25z
dCBRQ29sb3JHcm91cCAmZyApIGNvbnN0Cgl7IHJldHVybiAhKG9wZXJhdG9yPT0oZykpOyB9Cgpw
cml2YXRlOgogICAgUUJydXNoICpicjsKICAgIFFDb2xvckdyb3VwUHJpdmF0ZSAqIGQ7CgogICAg
ZnJpZW5kIGNsYXNzIFFQYWxldHRlOwp9OwoKCmNsYXNzICAgUVBhbGV0dGUKewpwdWJsaWM6CiAg
ICBRUGFsZXR0ZSgpOwogICAgUVBhbGV0dGUoIGNvbnN0IFFDb2xvciAmYnV0dG9uICk7CiAgICBR
UGFsZXR0ZSggY29uc3QgUUNvbG9yICZidXR0b24sIGNvbnN0IFFDb2xvciAmYmFja2dyb3VuZCAp
OwogICAgUVBhbGV0dGUoIGNvbnN0IFFDb2xvckdyb3VwICZhY3RpdmUsIGNvbnN0IFFDb2xvckdy
b3VwICZkaXNhYmxlZCwKCSAgICAgIGNvbnN0IFFDb2xvckdyb3VwICZpbmFjdGl2ZSApOwogICAg
UVBhbGV0dGUoIGNvbnN0IFFQYWxldHRlICYgKTsKICAgIH5RUGFsZXR0ZSgpOwogICAgUVBhbGV0
dGUgJm9wZXJhdG9yPSggY29uc3QgUVBhbGV0dGUgJiApOwoKICAgIGVudW0gQ29sb3JHcm91cCB7
IERpc2FibGVkLCBBY3RpdmUsIEluYWN0aXZlLCBOQ29sb3JHcm91cHMsIE5vcm1hbD1BY3RpdmUg
fTsKCiAgICBjb25zdCBRQ29sb3IgJmNvbG9yKCBDb2xvckdyb3VwLCBRQ29sb3JHcm91cDo6Q29s
b3JSb2xlICkgY29uc3Q7CiAgICBjb25zdCBRQnJ1c2ggJmJydXNoKCBDb2xvckdyb3VwLCBRQ29s
b3JHcm91cDo6Q29sb3JSb2xlICkgY29uc3Q7CiAgICB2b2lkIHNldENvbG9yKCBDb2xvckdyb3Vw
LCBRQ29sb3JHcm91cDo6Q29sb3JSb2xlLCBjb25zdCBRQ29sb3IgJiApOwogICAgdm9pZCBzZXRC
cnVzaCggQ29sb3JHcm91cCwgUUNvbG9yR3JvdXA6OkNvbG9yUm9sZSwgY29uc3QgUUJydXNoICYg
KTsKCiAgICB2b2lkIHNldENvbG9yKCBRQ29sb3JHcm91cDo6Q29sb3JSb2xlLCBjb25zdCBRQ29s
b3IgJiApOwogICAgdm9pZCBzZXRCcnVzaCggUUNvbG9yR3JvdXA6OkNvbG9yUm9sZSwgY29uc3Qg
UUJydXNoICYgKTsKCiAgICBRUGFsZXR0ZQljb3B5KCkgY29uc3Q7CgogICAgY29uc3QgUUNvbG9y
R3JvdXAgJmFjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPmFjdGl2ZTsgfQogICAgY29uc3Qg
UUNvbG9yR3JvdXAgJmRpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gZGF0YS0+ZGlzYWJsZWQ7IH0K
ICAgIGNvbnN0IFFDb2xvckdyb3VwICZpbmFjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPmlu
YWN0aXZlOyB9CgogICAgY29uc3QgUUNvbG9yR3JvdXAgJm5vcm1hbCgpIGNvbnN0IHsgcmV0dXJu
IGFjdGl2ZSgpOyB9CgoKICAgIHZvaWQJc2V0QWN0aXZlKCBjb25zdCBRQ29sb3JHcm91cCAmICk7
CiAgICB2b2lkCXNldERpc2FibGVkKCBjb25zdCBRQ29sb3JHcm91cCAmICk7CiAgICB2b2lkCXNl
dEluYWN0aXZlKCBjb25zdCBRQ29sb3JHcm91cCAmICk7CgogICAgdm9pZAlzZXROb3JtYWwoIGNv
bnN0IFFDb2xvckdyb3VwICYgY2cgKSB7IHNldEFjdGl2ZShjZyk7IH0KCgogICAgYm9vbAlvcGVy
YXRvcj09KCBjb25zdCBRUGFsZXR0ZSAmcCApIGNvbnN0OwogICAgYm9vbAlvcGVyYXRvciE9KCBj
b25zdCBRUGFsZXR0ZSAmcCApIGNvbnN0CiAgICAgICAgICAgICAgeyByZXR1cm4gIShvcGVyYXRv
cj09KHApKTsgfQogICAgYm9vbAlpc0NvcHlPZiggY29uc3QgUVBhbGV0dGUgJiApOwoKICAgIGlu
dAkJc2VyaWFsTnVtYmVyKCkgY29uc3QJeyByZXR1cm4gZGF0YS0+c2VyX25vOyB9CiAgICAKICAg
IAogICAgc3RhdGljIFFDb2xvckdyb3VwOjpDb2xvclJvbGUgZm9yZWdyb3VuZFJvbGVGcm9tTW9k
ZSggUXQ6OkJhY2tncm91bmRNb2RlIG1vZGUgKTsKICAgIHN0YXRpYyBRQ29sb3JHcm91cDo6Q29s
b3JSb2xlIGJhY2tncm91bmRSb2xlRnJvbU1vZGUoIFF0OjpCYWNrZ3JvdW5kTW9kZSBtb2RlKTsK
CnByaXZhdGU6CiAgICB2b2lkCWRldGFjaCgpOwogICAgY29uc3QgUUJydXNoICZkaXJlY3RCcnVz
aCggQ29sb3JHcm91cCwgUUNvbG9yR3JvdXA6OkNvbG9yUm9sZSApIGNvbnN0OwogICAgdm9pZCBk
aXJlY3RTZXRCcnVzaCggQ29sb3JHcm91cCwgUUNvbG9yR3JvdXA6OkNvbG9yUm9sZSwgY29uc3Qg
UUJydXNoJiApOwoKICAgIHN0cnVjdCBRUGFsRGF0YSA6IHB1YmxpYyBRU2hhcmVkIHsKCVFDb2xv
ckdyb3VwIGRpc2FibGVkOwoJUUNvbG9yR3JvdXAgYWN0aXZlOwoJaW50CSAgICBzZXJfbm87CglR
Q29sb3JHcm91cCBpbmFjdGl2ZTsKICAgIH0gKmRhdGE7Cn07CgoKIAoKCgoKICBRRGF0YVN0cmVh
bSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUUNvbG9yR3JvdXAgJiApOwogIFFE
YXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRQ29sb3JHcm91cCAmICk7Cgog
IFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRUGFsZXR0ZSAm
ICk7CiAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFQYWxldHRlICYg
KTsKCgoKCiMgNDUgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xd2lkZ2V0LmgiIDIKCiMgMSAiL3Vz
ci9sb2NhbC9xdC9pbmNsdWRlL3Fmb250LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgpjbGFzcyBRRm9udFByaXZhdGU7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKY2xhc3MgUVN0cmluZ0xpc3Q7CgpjbGFzcyAgIFFGb250CnsK
cHVibGljOgogICAgZW51bSBTdHlsZUhpbnQgewoJSGVsdmV0aWNhLCAgU2Fuc1NlcmlmID0gSGVs
dmV0aWNhLAoJVGltZXMsICAgICAgU2VyaWYgPSBUaW1lcywKCUNvdXJpZXIsICAgIFR5cGVXcml0
ZXIgPSBDb3VyaWVyLAoJT2xkRW5nbGlzaCwgRGVjb3JhdGl2ZSA9IE9sZEVuZ2xpc2gsCglTeXN0
ZW0sCglBbnlTdHlsZQogICAgfTsKCiAgICBlbnVtIFN0eWxlU3RyYXRlZ3kgewoJUHJlZmVyRGVm
YXVsdCA9IDB4MDAwMSwKCVByZWZlckJpdG1hcCAgPSAweDAwMDIsCglQcmVmZXJEZXZpY2UgID0g
MHgwMDA0LAoJUHJlZmVyT3V0bGluZSA9IDB4MDAwOCwKCUZvcmNlT3V0bGluZSAgPSAweDAwMTAs
CglQcmVmZXJNYXRjaCAgID0gMHgwMDIwLAoJUHJlZmVyUXVhbGl0eSA9IDB4MDA0MCwKCVByZWZl
ckFudGlhbGlhcyA9IDB4MDA4MCwKCU5vQW50aWFsaWFzID0gMHgwMTAwCiAgICB9OwoKICAgIGVu
dW0gV2VpZ2h0IHsKCUxpZ2h0ICAgID0gMjUsCglOb3JtYWwgICA9IDUwLAoJRGVtaUJvbGQgPSA2
MywKCUJvbGQgICAgID0gNzUsCglCbGFjawkgPSA4NwogICAgfTsKCiAgICAgCiAgICBRRm9udCgp
OwogICAgIAogICAgUUZvbnQoIGNvbnN0IFFTdHJpbmcgJmZhbWlseSwgaW50IHBvaW50U2l6ZSA9
IDEyLCBpbnQgd2VpZ2h0ID0gTm9ybWFsLAoJICAgYm9vbCBpdGFsaWMgPSBGQUxTRSApOwogICAg
IAogICAgUUZvbnQoIGNvbnN0IFFGb250ICYgKTsKCiAgICB+UUZvbnQoKTsKCiAgICBRU3RyaW5n
IGZhbWlseSgpIGNvbnN0OwogICAgdm9pZCBzZXRGYW1pbHkoIGNvbnN0IFFTdHJpbmcgJik7Cgog
ICAgaW50IHBvaW50U2l6ZSgpIGNvbnN0OwogICAgZmxvYXQgcG9pbnRTaXplRmxvYXQoKSBjb25z
dDsKICAgIHZvaWQgc2V0UG9pbnRTaXplKCBpbnQgKTsKICAgIHZvaWQgc2V0UG9pbnRTaXplRmxv
YXQoIGZsb2F0ICk7CgogICAgaW50IHBpeGVsU2l6ZSgpIGNvbnN0OwogICAgdm9pZCBzZXRQaXhl
bFNpemUoIGludCApOwogICAgdm9pZCBzZXRQaXhlbFNpemVGbG9hdCggZmxvYXQgKTsKCiAgICBp
bnQgd2VpZ2h0KCkgY29uc3Q7CiAgICB2b2lkIHNldFdlaWdodCggaW50ICk7CgogICAgYm9vbCBi
b2xkKCkgY29uc3Q7CiAgICB2b2lkIHNldEJvbGQoIGJvb2wgKTsKCiAgICBib29sIGl0YWxpYygp
IGNvbnN0OwogICAgdm9pZCBzZXRJdGFsaWMoIGJvb2wgKTsKCiAgICBib29sIHVuZGVybGluZSgp
IGNvbnN0OwogICAgdm9pZCBzZXRVbmRlcmxpbmUoIGJvb2wgKTsKCiAgICBib29sIHN0cmlrZU91
dCgpIGNvbnN0OwogICAgdm9pZCBzZXRTdHJpa2VPdXQoIGJvb2wgKTsKCiAgICBib29sIGZpeGVk
UGl0Y2goKSBjb25zdDsKICAgIHZvaWQgc2V0Rml4ZWRQaXRjaCggYm9vbCApOwoKICAgIFN0eWxl
SGludCBzdHlsZUhpbnQoKSBjb25zdDsKICAgIFN0eWxlU3RyYXRlZ3kgc3R5bGVTdHJhdGVneSgp
IGNvbnN0OwogICAgdm9pZCBzZXRTdHlsZUhpbnQoIFN0eWxlSGludCwgU3R5bGVTdHJhdGVneSA9
IFByZWZlckRlZmF1bHQgKTsKICAgIHZvaWQgc2V0U3R5bGVTdHJhdGVneSggU3R5bGVTdHJhdGVn
eSBzICk7CgogICAgIAogICAgYm9vbCByYXdNb2RlKCkgY29uc3Q7CiAgICB2b2lkIHNldFJhd01v
ZGUoIGJvb2wgKTsKCiAgICAgCiAgICBib29sIGV4YWN0TWF0Y2goKSBjb25zdDsKCiAgICBRRm9u
dCAmb3BlcmF0b3I9KCBjb25zdCBRRm9udCAmICk7CiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0
IFFGb250ICYgKSBjb25zdDsKICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUUZvbnQgJiApIGNv
bnN0OwogICAgYm9vbCBpc0NvcHlPZiggY29uc3QgUUZvbnQgJiApIGNvbnN0OwoKCgoKCiAgICBR
dDo6SEFORExFIGhhbmRsZSgpIGNvbnN0OwoKCgogICAgIAogICAgdm9pZCBzZXRSYXdOYW1lKCBj
b25zdCBRU3RyaW5nICYgKTsKICAgIFFTdHJpbmcgcmF3TmFtZSgpIGNvbnN0OwoKICAgIFFTdHJp
bmcga2V5KCkgY29uc3Q7CgoKICAgIFFTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKICAgIGJvb2wg
ZnJvbVN0cmluZyhjb25zdCBRU3RyaW5nICYpOwoKICAgIHN0YXRpYyBRU3RyaW5nIHN1YnN0aXR1
dGUoY29uc3QgUVN0cmluZyAmKTsKICAgIHN0YXRpYyBRU3RyaW5nTGlzdCBzdWJzdGl0dXRlcyhj
b25zdCBRU3RyaW5nICYpOwogICAgc3RhdGljIFFTdHJpbmdMaXN0IHN1YnN0aXR1dGlvbnMoKTsK
ICAgIHN0YXRpYyB2b2lkIGluc2VydFN1YnN0aXR1dGlvbihjb25zdCBRU3RyaW5nJiwgY29uc3Qg
UVN0cmluZyAmKTsKICAgIHN0YXRpYyB2b2lkIGluc2VydFN1YnN0aXR1dGlvbnMoY29uc3QgUVN0
cmluZyYsIGNvbnN0IFFTdHJpbmdMaXN0ICYpOwogICAgc3RhdGljIHZvaWQgcmVtb3ZlU3Vic3Rp
dHV0aW9uKGNvbnN0IFFTdHJpbmcgJik7CgogICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwog
ICAgc3RhdGljIHZvaWQgY2xlYW51cCgpOwogICAgc3RhdGljIHZvaWQgY2FjaGVTdGF0aXN0aWNz
KCk7CgoKCgoKCgogICAgZW51bSBTY3JpcHQgewoJIAoJTGF0aW4sCglHcmVlaywKCUN5cmlsbGlj
LAoJQXJtZW5pYW4sCglHZW9yZ2lhbiwKCVJ1bmljLAoJT2doYW0sCglTcGFjaW5nTW9kaWZpZXJz
LAoJQ29tYmluaW5nTWFya3MsCgoJIAoJSGVicmV3LAoJQXJhYmljLAoJU3lyaWFjLAoJVGhhYW5h
LAoKCSAKCURldmFuYWdhcmksCglCZW5nYWxpLAoJR3VybXVraGksCglHdWphcmF0aSwKCU9yaXlh
LAoJVGFtaWwsCglUZWx1Z3UsCglLYW5uYWRhLAoJTWFsYXlhbGFtLAoJU2luaGFsYSwKCVRoYWks
CglMYW8sCglUaWJldGFuLAoJTXlhbm1hciwKCUtobWVyLAoKCSAKCUhhbiwKCUhpcmFnYW5hLAoJ
S2F0YWthbmEsCglIYW5ndWwsCglCb3BvbW9mbywKCVlpLAoKCSAKCUV0aGlvcGljLAoJQ2hlcm9r
ZWUsCglDYW5hZGlhbkFib3JpZ2luYWwsCglNb25nb2xpYW4sCgoJIAoJQ3VycmVuY3lTeW1ib2xz
LAoJTGV0dGVybGlrZVN5bWJvbHMsCglOdW1iZXJGb3JtcywKCU1hdGhlbWF0aWNhbE9wZXJhdG9y
cywKCVRlY2huaWNhbFN5bWJvbHMsCglHZW9tZXRyaWNTeW1ib2xzLAoJTWlzY2VsbGFuZW91c1N5
bWJvbHMsCglFbmNsb3NlZEFuZFNxdWFyZSwKCUJyYWlsbGUsCgoJVW5pY29kZSwKCgkgCglOU2Ny
aXB0cywKCVVua25vd25TY3JpcHQgPSBOU2NyaXB0cywKCglOb1NjcmlwdCwKCgkgCgkgCgkgCgog
ICAgICAgCSAKCUhhblgxMSwKCglMYXRpbkJhc2ljID0gTGF0aW4sICAgICAgICAgICAgICAKCUxh
dGluRXh0ZW5kZWRBXzIgPSBIYW5YMTEgKyAxLCAgIAoJTGF0aW5FeHRlbmRlZEFfMywgICAgICAg
ICAgICAgICAgCglMYXRpbkV4dGVuZGVkQV80LCAgICAgICAgICAgICAgICAKCUxhdGluRXh0ZW5k
ZWRBXzE0LCAgICAgICAgICAgICAgIAoJTGF0aW5FeHRlbmRlZEFfMTUsICAgICAgICAgICAgICAg
CglLYXRha2FuYUhhbGZXaWR0aCwJCSAKCglMYXN0UHJpdmF0ZVNjcmlwdAogICAgfTsKCiAgICBR
U3RyaW5nIGRlZmF1bHRGYW1pbHkoKSBjb25zdDsKICAgIFFTdHJpbmcgbGFzdFJlc29ydEZhbWls
eSgpIGNvbnN0OwogICAgUVN0cmluZyBsYXN0UmVzb3J0Rm9udCgpIGNvbnN0OwoKCgogICAgc3Rh
dGljIFFGb250IGRlZmF1bHRGb250KCk7CiAgICBzdGF0aWMgdm9pZCBzZXREZWZhdWx0Rm9udCgg
Y29uc3QgUUZvbnQgJiApOwoKCgoKcHJvdGVjdGVkOgogICAgIAogICAgYm9vbCBkaXJ0eSgpIGNv
bnN0OwogICAgaW50IGRlY2lQb2ludFNpemUoKSBjb25zdDsKCgpwcml2YXRlOgogICAgUUZvbnQo
IFFGb250UHJpdmF0ZSAqLCBib29sIGRlZXAgPSBUUlVFICk7CiAgICBRRm9udCggUUZvbnRQcml2
YXRlICosIFFQYWludERldmljZSAqcGQgKTsKCiAgICB2b2lkIGRldGFjaCgpOwoKCgoKCgoKCgoK
CiAgICBmcmllbmQgY2xhc3MgUUZvbnRNZXRyaWNzOwogICAgZnJpZW5kIGNsYXNzIFFGb250SW5m
bzsKICAgIGZyaWVuZCBjbGFzcyBRUGFpbnRlcjsKICAgIGZyaWVuZCBjbGFzcyBRUFNQcmludGVy
Rm9udDsKCgogICAgZnJpZW5kICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFt
ICYsIGNvbnN0IFFGb250ICYgKTsKICAgIGZyaWVuZCAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+
KCBRRGF0YVN0cmVhbSAmLCBRRm9udCAmICk7CgoKICAgIFFGb250UHJpdmF0ZSAqZDsKfTsKCgpp
bmxpbmUgYm9vbCBRRm9udDo6Ym9sZCgpIGNvbnN0CnsgcmV0dXJuIHdlaWdodCgpID4gTm9ybWFs
OyB9CgoKaW5saW5lIHZvaWQgUUZvbnQ6OnNldEJvbGQoIGJvb2wgZW5hYmxlICkKeyBzZXRXZWln
aHQoIGVuYWJsZSA/IEJvbGQgOiBOb3JtYWwgKTsgfQoKCgoKIAoKCgoKICBRRGF0YVN0cmVhbSAm
b3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUUZvbnQgJiApOwogIFFEYXRhU3RyZWFt
ICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRRm9udCAmICk7CgoKCgojIDQ2ICIvdXNyL2xv
Y2FsL3F0L2luY2x1ZGUvcXdpZGdldC5oIiAyCgojIDEgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9x
Zm9udG1ldHJpY3MuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKY2xhc3MgUUZvbnRTdHJ1Y3Q7CmNsYXNzIFFUZXh0Q29kZWM7CmNsYXNzIFFUZXh0UGFy
YWc7CgpjbGFzcyAgIFFGb250TWV0cmljcwp7CnB1YmxpYzoKICAgIFFGb250TWV0cmljcyggY29u
c3QgUUZvbnQgJiApOwogICAgUUZvbnRNZXRyaWNzKCBjb25zdCBRRm9udE1ldHJpY3MgJiApOwog
ICAgflFGb250TWV0cmljcygpOwoKICAgIFFGb250TWV0cmljcyAmb3BlcmF0b3I9KCBjb25zdCBR
Rm9udE1ldHJpY3MgJiApOwoKICAgIGludAkJYXNjZW50KCkJY29uc3Q7CiAgICBpbnQJCWRlc2Nl
bnQoKQljb25zdDsKICAgIGludAkJaGVpZ2h0KCkJY29uc3Q7CiAgICBpbnQJCWxlYWRpbmcoKQlj
b25zdDsKICAgIGludAkJbGluZVNwYWNpbmcoKQljb25zdDsKICAgIGludAkJbWluTGVmdEJlYXJp
bmcoKSBjb25zdDsKICAgIGludAkJbWluUmlnaHRCZWFyaW5nKCkgY29uc3Q7CiAgICBpbnQJCW1h
eFdpZHRoKCkJY29uc3Q7CgogICAgYm9vbAlpbkZvbnQoUUNoYXIpCWNvbnN0OwoKICAgIGludAkJ
bGVmdEJlYXJpbmcoUUNoYXIpIGNvbnN0OwogICAgaW50CQlyaWdodEJlYXJpbmcoUUNoYXIpIGNv
bnN0OwogICAgaW50CQl3aWR0aCggY29uc3QgUVN0cmluZyAmLCBpbnQgbGVuID0gLTEgKSBjb25z
dDsKICAgIAogICAgaW50CQl3aWR0aCggUUNoYXIgKSBjb25zdDsKCiAgICBpbnQJCXdpZHRoKCBj
aGFyIGMgKSBjb25zdCB7IHJldHVybiB3aWR0aCggKFFDaGFyKSBjICk7IH0KCiAgICAKICAgIGlu
dCAJCWNoYXJXaWR0aCggY29uc3QgUVN0cmluZyAmc3RyLCBpbnQgcG9zICkgY29uc3Q7CiAgICBR
UmVjdAlib3VuZGluZ1JlY3QoIGNvbnN0IFFTdHJpbmcgJiwgaW50IGxlbiA9IC0xICkgY29uc3Q7
CiAgICBRUmVjdAlib3VuZGluZ1JlY3QoIFFDaGFyICkgY29uc3Q7CiAgICBRUmVjdAlib3VuZGlu
Z1JlY3QoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBpbnQgZmxhZ3MsCgkJCSAgICAgIGNv
bnN0IFFTdHJpbmcmIHN0ciwgaW50IGxlbj0tMSwgaW50IHRhYnN0b3BzPTAsCgkJCSAgICAgIGlu
dCAqdGFiYXJyYXk9MCwgUVRleHRQYXJhZyAqKmludGVybj0wICkgY29uc3Q7CiAgICBRU2l6ZQlz
aXplKCBpbnQgZmxhZ3MsCgkJICAgICAgY29uc3QgUVN0cmluZyYgc3RyLCBpbnQgbGVuPS0xLCBp
bnQgdGFic3RvcHM9MCwKCQkgICAgICBpbnQgKnRhYmFycmF5PTAsIFFUZXh0UGFyYWcgKippbnRl
cm49MCApIGNvbnN0OwoKICAgIGludAkJdW5kZXJsaW5lUG9zKCkJY29uc3Q7CiAgICBpbnQJCXN0
cmlrZU91dFBvcygpCWNvbnN0OwogICAgaW50CQlsaW5lV2lkdGgoKQljb25zdDsKCnByaXZhdGU6
CiAgICBRRm9udE1ldHJpY3MoIGNvbnN0IFFQYWludGVyICogKTsKICAgIHN0YXRpYyB2b2lkIHJl
c2V0KCBjb25zdCBRUGFpbnRlciAqICk7CgoKCgoKCgoKICAgIGZyaWVuZCBjbGFzcyBRV2lkZ2V0
OwogICAgZnJpZW5kIGNsYXNzIFFQYWludGVyOwogICAgZnJpZW5kIGNsYXNzIFFUZXh0Rm9ybWF0
OwoKCgoKICAgIFFGb250UHJpdmF0ZSAgKmQ7CiAgICBRUGFpbnRlciAgICAgICpwYWludGVyOwog
ICAgaW50CQkgICBmbGFnczsKCiAgICBib29sICAgIHVuZGVybGluZUZsYWcoKSAgY29uc3QgeyBy
ZXR1cm4gKGZsYWdzICYgMHgxKSAhPSAwOyB9CiAgICBib29sICAgIHN0cmlrZU91dEZsYWcoKSAg
Y29uc3QgeyByZXR1cm4gKGZsYWdzICYgMHgyKSAhPSAwOyB9CiAgICB2b2lkICAgIHNldFVuZGVy
bGluZUZsYWcoKQkgICB7IGZsYWdzIHw9IDB4MTsgfQogICAgdm9pZCAgICBzZXRTdHJpa2VPdXRG
bGFnKCkJICAgeyBmbGFncyB8PSAweDI7IH0KfTsKCgoKIyA0NyAiL3Vzci9sb2NhbC9xdC9pbmNs
dWRlL3F3aWRnZXQuaCIgMgoKIyAxICIvdXNyL2xvY2FsL3F0L2luY2x1ZGUvcWZvbnRpbmZvLmgi
IDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmNsYXNzICAg
UUZvbnRJbmZvCnsKcHVibGljOgogICAgUUZvbnRJbmZvKCBjb25zdCBRRm9udCAmICk7CiAgICBR
Rm9udEluZm8oIGNvbnN0IFFGb250SW5mbyAmICk7CiAgICB+UUZvbnRJbmZvKCk7CgogICAgUUZv
bnRJbmZvCSAgICAgICAmb3BlcmF0b3I9KCBjb25zdCBRRm9udEluZm8gJiApOwoKICAgIFFTdHJp
bmcgICAJICAgICAgICBmYW1pbHkoKQljb25zdDsKICAgIGludAkJCXBpeGVsU2l6ZSgpCWNvbnN0
OwogICAgaW50CQkJcG9pbnRTaXplKCkJY29uc3Q7CiAgICBib29sCQlpdGFsaWMoKQljb25zdDsK
ICAgIGludAkJCXdlaWdodCgpCWNvbnN0OwogICAgYm9vbAkJYm9sZCgpCQljb25zdDsKICAgIGJv
b2wJCXVuZGVybGluZSgpCWNvbnN0OwogICAgYm9vbAkJc3RyaWtlT3V0KCkJY29uc3Q7CiAgICBi
b29sCQlmaXhlZFBpdGNoKCkJY29uc3Q7CiAgICBRRm9udDo6U3R5bGVIaW50CXN0eWxlSGludCgp
CWNvbnN0OwogICAgYm9vbAkJcmF3TW9kZSgpCWNvbnN0OwoKICAgIGJvb2wJCWV4YWN0TWF0Y2go
KQljb25zdDsKCgpwcml2YXRlOgogICAgUUZvbnRJbmZvKCBjb25zdCBRUGFpbnRlciAqICk7CiAg
ICBzdGF0aWMgdm9pZCByZXNldCggY29uc3QgUVBhaW50ZXIgKiApOwoKICAgIFFGb250UHJpdmF0
ZSAqZDsKICAgIFFQYWludGVyICpwYWludGVyOwogICAgaW50IGZsYWdzOwoKICAgIGJvb2wgICAg
dW5kZXJsaW5lRmxhZygpICBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiAweDEpICE9IDA7IH0KICAg
IGJvb2wgICAgc3RyaWtlT3V0RmxhZygpICBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiAweDIpICE9
IDA7IH0KICAgIGJvb2wgICAgZXhhY3RNYXRjaEZsYWcoKSBjb25zdCB7IHJldHVybiAoZmxhZ3Mg
JiAweDQpICE9IDA7IH0KICAgIHZvaWQgICAgc2V0VW5kZXJsaW5lRmxhZygpCSAgIHsgZmxhZ3Mg
fD0gMHgxOyB9CiAgICB2b2lkICAgIHNldFN0cmlrZU91dEZsYWcoKQkgICB7IGZsYWdzIHw9IDB4
MjsgfQogICAgdm9pZCAgICBzZXRFeGFjdE1hdGNoRmxhZygpCSAgIHsgZmxhZ3MgfD0gMHg0OyB9
CgogICAgZnJpZW5kIGNsYXNzIFFXaWRnZXQ7CiAgICBmcmllbmQgY2xhc3MgUVBhaW50ZXI7Cn07
CgoKaW5saW5lIGJvb2wgUUZvbnRJbmZvOjpib2xkKCkgY29uc3QKeyByZXR1cm4gd2VpZ2h0KCkg
PiBRRm9udDo6Tm9ybWFsOyB9CgoKCiMgNDggIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xd2lkZ2V0
LmgiIDIKCiMgMSAiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3FzaXplcG9saWN5LmgiIDEKIAoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKY2xhc3MgICBRU2l6ZVBvbGlj
eQp7CnByaXZhdGU6CiAgICBlbnVtIHsgSFNpemUgPSA2LCBITWFzayA9IDB4M2YsIFZNYXNrID0g
SE1hc2sgPDwgSFNpemUsCgkgICBNYXlHcm93ID0gMSwgRXhwTWFzayA9IDIsIE1heVNocmluayA9
IDQgfTsKcHVibGljOgogICAgZW51bSBTaXplVHlwZSB7IEZpeGVkID0gMCwKCQkgICAgTWluaW11
bSA9IE1heUdyb3csCgkJICAgIE1heGltdW0gPSBNYXlTaHJpbmssCgkJICAgIFByZWZlcnJlZCA9
IE1heUdyb3d8TWF5U2hyaW5rICwKCQkgICAgTWluaW11bUV4cGFuZGluZyA9IE1heUdyb3d8RXhw
TWFzaywKCQkgICAgRXhwYW5kaW5nID0gTWF5R3Jvd3xNYXlTaHJpbmt8RXhwTWFzaywKCQkgICAg
SWdub3JlZCA9IEV4cE1hc2sgIAogICAgfTsKCiAgICBlbnVtIEV4cGFuZERhdGEgeyBOb0RpcmVj
dGlvbiA9IDAsCgkJICAgICAgSG9yaXpvbnRhbGx5ID0gMSwKCQkgICAgICBWZXJ0aWNhbGx5ID0g
MiwKCQkgICAgICBCb3RoRGlyZWN0aW9ucyA9IEhvcml6b250YWxseSB8IFZlcnRpY2FsbHkKCgkJ
ICAgICAgLEhvcml6b250YWwgPSBIb3Jpem9udGFsbHksCgkJICAgICAgVmVydGljYWwgPSBWZXJ0
aWNhbGx5CgogICAgfTsKCiAgICBRU2l6ZVBvbGljeSgpIDogZGF0YSggMCApIHt9CgogICAgUVNp
emVQb2xpY3koIFNpemVUeXBlIGhvciwgU2l6ZVR5cGUgdmVyLCBib29sIGhmdyA9IEZBTFNFICkK
CTogZGF0YSggaG9yIHwgKHZlcjw8SFNpemUpIHwgKGhmdyA/IChRX1VJTlQzMikoMTw8MipIU2l6
ZSkgOiAwKSApIHt9CiAgICBRU2l6ZVBvbGljeSggU2l6ZVR5cGUgaG9yLCBTaXplVHlwZSB2ZXIs
IHVjaGFyIGhvcnMsIHVjaGFyIHZlcnMsIGJvb2wgaGZ3ID0gRkFMU0UgKTsKCiAgICBTaXplVHlw
ZSBob3JEYXRhKCkgY29uc3QgeyByZXR1cm4gKFNpemVUeXBlKSggZGF0YSAmIEhNYXNrICk7IH0K
ICAgIFNpemVUeXBlIHZlckRhdGEoKSBjb25zdCB7IHJldHVybiAoU2l6ZVR5cGUpKCggZGF0YSAm
IFZNYXNrICkgPj4gSFNpemUpOyB9CgogICAgYm9vbCBtYXlTaHJpbmtIb3Jpem9udGFsbHkoKSBj
b25zdCB7IHJldHVybiBob3JEYXRhKCkgJiBNYXlTaHJpbmsgfHwgaG9yRGF0YSgpID09IElnbm9y
ZWQ7IH0KICAgIGJvb2wgbWF5U2hyaW5rVmVydGljYWxseSgpIGNvbnN0IHsgcmV0dXJuIHZlckRh
dGEoKSAmIE1heVNocmluayB8fCB2ZXJEYXRhKCkgPT0gSWdub3JlZDsgfQogICAgYm9vbCBtYXlH
cm93SG9yaXpvbnRhbGx5KCkgY29uc3QgeyByZXR1cm4gaG9yRGF0YSgpICYgTWF5R3JvdyB8fCBo
b3JEYXRhKCkgPT0gSWdub3JlZDsgfQogICAgYm9vbCBtYXlHcm93VmVydGljYWxseSgpIGNvbnN0
IHsgcmV0dXJuIHZlckRhdGEoKSAmIE1heUdyb3cgfHwgdmVyRGF0YSgpID09IElnbm9yZWQ7IH0K
CiAgICBFeHBhbmREYXRhIGV4cGFuZGluZygpIGNvbnN0CiAgICB7CglyZXR1cm4gKEV4cGFuZERh
dGEpKCAoaW50KSh2ZXJEYXRhKCkmRXhwTWFzayA/IFZlcnRpY2FsbHkgOiAwKSsKCQkJICAgICAo
aW50KShob3JEYXRhKCkmRXhwTWFzayA/IEhvcml6b250YWxseSA6IDApICk7CiAgICB9CgogICAg
dm9pZCBzZXRIb3JEYXRhKCBTaXplVHlwZSBkICkgeyBkYXRhID0gKFFfVUlOVDMyKShkYXRhICYg
fkhNYXNrKSB8IGQ7IH0KICAgIHZvaWQgc2V0VmVyRGF0YSggU2l6ZVR5cGUgZCApIHsgZGF0YSA9
IChRX1VJTlQzMikoZGF0YSAmIH4oSE1hc2s8PEhTaXplKSkgfAoJCQkJCSAgIChkPDxIU2l6ZSk7
IH0KCQkKICAgIHZvaWQgc2V0SGVpZ2h0Rm9yV2lkdGgoIGJvb2wgYiApIHsgZGF0YSA9IGIgPyAo
UV9VSU5UMzIpKCBkYXRhIHwgKCAxIDw8IDIqSFNpemUgKSApCgkJCQkJICAgICAgOiAoUV9VSU5U
MzIpKCBkYXRhICYgfiggMSA8PCAyKkhTaXplICkgKTsgIH0KICAgIGJvb2wgaGFzSGVpZ2h0Rm9y
V2lkdGgoKSBjb25zdCB7IHJldHVybiBkYXRhICYgKCAxIDw8IDIqSFNpemUgKTsgfQoKICAgIGJv
b2wgb3BlcmF0b3I9PSggY29uc3QgUVNpemVQb2xpY3kmIHMgKSBjb25zdCB7IHJldHVybiBkYXRh
ID09IHMuZGF0YTsgfQogICAgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRU2l6ZVBvbGljeSYgcyAp
IGNvbnN0IHsgcmV0dXJuIGRhdGEgIT0gcy5kYXRhOyB9CgoKICAgIHVpbnQgaG9yU3RyZXRjaCgp
IGNvbnN0IHsgcmV0dXJuIGRhdGEgPj4gMjQ7IH0KICAgIHVpbnQgdmVyU3RyZXRjaCgpIGNvbnN0
IHsgcmV0dXJuIChkYXRhID4+IDE2KSAmIDB4ZmY7IH0KICAgIHZvaWQgc2V0SG9yU3RyZXRjaCgg
dWNoYXIgc2YgKSB7IGRhdGEgPSAoZGF0YSYweDAwZmZmZmZmKSB8ICh1aW50KHNmKTw8MjQpOyB9
CiAgICB2b2lkIHNldFZlclN0cmV0Y2goIHVjaGFyIHNmICkgeyBkYXRhID0gKGRhdGEmMHhmZjAw
ZmZmZikgfCAodWludChzZik8PDE2KTsgfQoKcHJpdmF0ZToKICAgIFFTaXplUG9saWN5KCBpbnQg
aSApOiBkYXRhKCAoUV9VSU5UMzIpaSApIHt9CgogICAgUV9VSU5UMzIgZGF0YTsKfTsKCmlubGlu
ZSBRU2l6ZVBvbGljeTo6UVNpemVQb2xpY3koIFNpemVUeXBlIGhvciwgU2l6ZVR5cGUgdmVyLCB1
Y2hhciBob3JzLCB1Y2hhciB2ZXJzLCBib29sIGhmdyApCiAgICA6IGRhdGEoIGhvciB8ICh2ZXI8
PEhTaXplKSB8IChoZncgPyAoUV9VSU5UMzIpKDE8PDIqSFNpemUpIDogMCkgKSB7CglzZXRIb3JT
dHJldGNoKCBob3JzICk7CglzZXRWZXJTdHJldGNoKCB2ZXJzICk7Cn0KCgoKIyA0OSAiL3Vzci9s
b2NhbC9xdC9pbmNsdWRlL3F3aWRnZXQuaCIgMgoKCgpjbGFzcyBRTGF5b3V0OwpzdHJ1Y3QgUVdF
eHRyYTsKc3RydWN0IFFUTFdFeHRyYTsKY2xhc3MgUUZvY3VzRGF0YTsKY2xhc3MgUUN1cnNvcjsK
Y2xhc3MgUVdTUmVnaW9uTWFuYWdlcjsKY2xhc3MgUVN0eWxlOwoKY2xhc3MgICBRV2lkZ2V0IDog
cHVibGljIFFPYmplY3QsIHB1YmxpYyBRUGFpbnREZXZpY2UKewogICAgcHVibGljOgl2aXJ0dWFs
IFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVj
dCgpOwl9CXZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7CXZpcnR1YWwgdm9p
ZCogcXRfY2FzdCggY29uc3QgY2hhciogKTsgdmlydHVhbCBib29sIHF0X2ludm9rZSggaW50LCBR
VU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X2VtaXQoIGludCwgUVVPYmplY3QqICk7IHZpcnR1
YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50LCBpbnQsIFFWYXJpYW50KiApOyAJc3RhdGljIFFNZXRh
T2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7CVFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAo
UU9iamVjdCopdGhpczsgfSBzdGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBj
aGFyICogPSAwICk7IHN0YXRpYyBRU3RyaW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBj
aGFyICogPSAwICk7IAlwcml2YXRlOglzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7IAogICAg
IAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAog
ICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAg
IAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAog
ICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAg
IAoKICAgICAKICAgICAKCgogICAgIAogICAgIAogICAgIAoKICAgICAKICAgICAKICAgICAKICAg
ICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAK
ICAgICAKICAgICAKICAgICAKICAgICAKCnB1YmxpYzoKICAgIFFXaWRnZXQoIFFXaWRnZXQqIHBh
cmVudD0wLCBjb25zdCBjaGFyKiBuYW1lPTAsIFdGbGFncyBmPTAgKTsKICAgIH5RV2lkZ2V0KCk7
CgogICAgV0lkCQkgd2luSWQoKSBjb25zdDsKICAgIHZvaWQJIHNldE5hbWUoIGNvbnN0IGNoYXIg
Km5hbWUgKTsKCiAgICAgCgogICAgUVN0eWxlICAgICAmc3R5bGUoKSBjb25zdDsKICAgIHZvaWQg
ICAgICAgIHNldFN0eWxlKCBRU3R5bGUgKiApOwogICAgUVN0eWxlKglzZXRTdHlsZSggY29uc3Qg
UVN0cmluZyYgKTsKCiAgICAgCgogICAgYm9vbAkgaXNUb3BMZXZlbCgpCWNvbnN0OwogICAgYm9v
bAkgaXNEaWFsb2coKQljb25zdDsKICAgIGJvb2wJIGlzUG9wdXAoKQljb25zdDsKICAgIGJvb2wJ
IGlzRGVza3RvcCgpCWNvbnN0OwogICAgYm9vbAkgaXNNb2RhbCgpCWNvbnN0OwoKICAgIGJvb2wJ
IGlzRW5hYmxlZCgpCWNvbnN0OwogICAgYm9vbAkgaXNFbmFibGVkVG8oUVdpZGdldCopIGNvbnN0
OwogICAgYm9vbAkgaXNFbmFibGVkVG9UTFcoKSBjb25zdDsKCnB1YmxpYyAgOgogICAgdmlydHVh
bCB2b2lkIHNldEVuYWJsZWQoIGJvb2wgKTsKICAgIHZvaWQgc2V0RGlzYWJsZWQoIGJvb2wgKTsK
CiAgICAgCgpwdWJsaWM6CiAgICBRUmVjdAkgZnJhbWVHZW9tZXRyeSgpIGNvbnN0OwogICAgY29u
c3QgUVJlY3QgJmdlb21ldHJ5KCkJY29uc3Q7CiAgICBpbnQJCSB4KCkJCWNvbnN0OwogICAgaW50
CQkgeSgpCQljb25zdDsKICAgIFFQb2ludAkgcG9zKCkJCWNvbnN0OwogICAgUVNpemUJIGZyYW1l
U2l6ZSgpICAgIGNvbnN0OwogICAgUVNpemUJIHNpemUoKQkJY29uc3Q7CiAgICBpbnQJCSB3aWR0
aCgpCWNvbnN0OwogICAgaW50CQkgaGVpZ2h0KCkJY29uc3Q7CiAgICBRUmVjdAkgcmVjdCgpCQlj
b25zdDsKICAgIFFSZWN0CSBjaGlsZHJlblJlY3QoKSBjb25zdDsKICAgIFFSZWdpb24JIGNoaWxk
cmVuUmVnaW9uKCkgY29uc3Q7CgogICAgUVNpemUJIG1pbmltdW1TaXplKCkJIGNvbnN0OwogICAg
UVNpemUJIG1heGltdW1TaXplKCkJIGNvbnN0OwogICAgaW50CQkgbWluaW11bVdpZHRoKCkJIGNv
bnN0OwogICAgaW50CQkgbWluaW11bUhlaWdodCgpIGNvbnN0OwogICAgaW50CQkgbWF4aW11bVdp
ZHRoKCkJIGNvbnN0OwogICAgaW50CQkgbWF4aW11bUhlaWdodCgpIGNvbnN0OwogICAgdm9pZAkg
c2V0TWluaW11bVNpemUoIGNvbnN0IFFTaXplICYgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRNaW5p
bXVtU2l6ZSggaW50IG1pbncsIGludCBtaW5oICk7CiAgICB2b2lkCSBzZXRNYXhpbXVtU2l6ZSgg
Y29uc3QgUVNpemUgJiApOwogICAgdmlydHVhbCB2b2lkIHNldE1heGltdW1TaXplKCBpbnQgbWF4
dywgaW50IG1heGggKTsKICAgIHZvaWQJIHNldE1pbmltdW1XaWR0aCggaW50IG1pbncgKTsKICAg
IHZvaWQJIHNldE1pbmltdW1IZWlnaHQoIGludCBtaW5oICk7CiAgICB2b2lkCSBzZXRNYXhpbXVt
V2lkdGgoIGludCBtYXh3ICk7CiAgICB2b2lkCSBzZXRNYXhpbXVtSGVpZ2h0KCBpbnQgbWF4aCAp
OwoKICAgIFFTaXplCSBzaXplSW5jcmVtZW50KCkgY29uc3Q7CiAgICB2b2lkCSBzZXRTaXplSW5j
cmVtZW50KCBjb25zdCBRU2l6ZSAmICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZUluY3JlbWVu
dCggaW50IHcsIGludCBoICk7CiAgICBRU2l6ZQkgYmFzZVNpemUoKSBjb25zdDsKICAgIHZvaWQJ
IHNldEJhc2VTaXplKCBjb25zdCBRU2l6ZSAmICk7CiAgICB2b2lkCSBzZXRCYXNlU2l6ZSggaW50
IGJhc2V3LCBpbnQgYmFzZWggKTsKCiAgICB2b2lkCXNldEZpeGVkU2l6ZSggY29uc3QgUVNpemUg
JiApOwogICAgdm9pZAlzZXRGaXhlZFNpemUoIGludCB3LCBpbnQgaCApOwogICAgdm9pZAlzZXRG
aXhlZFdpZHRoKCBpbnQgdyApOwogICAgdm9pZAlzZXRGaXhlZEhlaWdodCggaW50IGggKTsKCiAg
ICAgCgogICAgUVBvaW50CSBtYXBUb0dsb2JhbCggY29uc3QgUVBvaW50ICYgKQkgY29uc3Q7CiAg
ICBRUG9pbnQJIG1hcEZyb21HbG9iYWwoIGNvbnN0IFFQb2ludCAmICkgY29uc3Q7CiAgICBRUG9p
bnQJIG1hcFRvUGFyZW50KCBjb25zdCBRUG9pbnQgJiApCSBjb25zdDsKICAgIFFQb2ludAkgbWFw
RnJvbVBhcmVudCggY29uc3QgUVBvaW50ICYgKSBjb25zdDsKICAgIFFQb2ludAkgbWFwVG8oIFFX
aWRnZXQgKiwgY29uc3QgUVBvaW50ICYgKSBjb25zdDsKICAgIFFQb2ludAkgbWFwRnJvbSggUVdp
ZGdldCAqLCBjb25zdCBRUG9pbnQgJiApIGNvbnN0OwoKICAgIFFXaWRnZXQJKnRvcExldmVsV2lk
Z2V0KCkgICBjb25zdDsKCiAgICAgCgogICAgQmFja2dyb3VuZE1vZGUJYmFja2dyb3VuZE1vZGUo
KSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZAlzZXRCYWNrZ3JvdW5kTW9kZSggQmFja2dyb3VuZE1v
ZGUgKTsKICAgIHZvaWQgCQlzZXRCYWNrZ3JvdW5kTW9kZSggQmFja2dyb3VuZE1vZGUsIEJhY2tn
cm91bmRNb2RlICk7CgogICAgY29uc3QgUUNvbG9yICYJZm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7
CgogICAgY29uc3QgUUNvbG9yICYJZXJhc2VDb2xvcigpIGNvbnN0OwogICAgdmlydHVhbCB2b2lk
CXNldEVyYXNlQ29sb3IoIGNvbnN0IFFDb2xvciAmICk7CgogICAgY29uc3QgUVBpeG1hcCAqCWVy
YXNlUGl4bWFwKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQJc2V0RXJhc2VQaXhtYXAoIGNvbnN0
IFFQaXhtYXAgJiApOwoKCiAgICBjb25zdCBRQ29sb3JHcm91cCAmIGNvbG9yR3JvdXAoKSBjb25z
dDsKICAgIGNvbnN0IFFQYWxldHRlICYJcGFsZXR0ZSgpICAgIGNvbnN0OwogICAgYm9vbAkJb3du
UGFsZXR0ZSgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkCXNldFBhbGV0dGUoIGNvbnN0IFFQYWxl
dHRlICYgKTsKICAgIHZvaWQJCXVuc2V0UGFsZXR0ZSgpOwoKCiAgICBjb25zdCBRQ29sb3IgJglw
YWxldHRlRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CiAgICB2b2lkCQlzZXRQYWxldHRlRm9yZWdy
b3VuZENvbG9yKCBjb25zdCBRQ29sb3IgJiApOwoKICAgIGNvbnN0IFFDb2xvciAmCXBhbGV0dGVC
YWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZAlzZXRQYWxldHRlQmFja2dy
b3VuZENvbG9yKCBjb25zdCBRQ29sb3IgJiApOwoKICAgIGNvbnN0IFFQaXhtYXAgKglwYWxldHRl
QmFja2dyb3VuZFBpeG1hcCgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIAlzZXRQYWxldHRlQmFj
a2dyb3VuZFBpeG1hcCggY29uc3QgUVBpeG1hcCAmICk7CgogICAgY29uc3QgUUJydXNoJgliYWNr
Z3JvdW5kQnJ1c2goKSBjb25zdDsKCiAgICBRRm9udAkJZm9udCgpIGNvbnN0OwogICAgYm9vbAkJ
b3duRm9udCgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkCXNldEZvbnQoIGNvbnN0IFFGb250ICYg
KTsKICAgIHZvaWQJCXVuc2V0Rm9udCgpOwogICAgUUZvbnRNZXRyaWNzCWZvbnRNZXRyaWNzKCkg
Y29uc3Q7CiAgICBRRm9udEluZm8JIAlmb250SW5mbygpIGNvbnN0OwoKCiAgICBjb25zdCBRQ3Vy
c29yICAgICAgJmN1cnNvcigpIGNvbnN0OwogICAgYm9vbAkJb3duQ3Vyc29yKCkgY29uc3Q7CiAg
ICB2aXJ0dWFsIHZvaWQJc2V0Q3Vyc29yKCBjb25zdCBRQ3Vyc29yICYgKTsKICAgIHZpcnR1YWwg
dm9pZAl1bnNldEN1cnNvcigpOwoKCiAgICBRU3RyaW5nCQljYXB0aW9uKCkgY29uc3Q7CiAgICBj
b25zdCBRUGl4bWFwICAgICAgKmljb24oKSBjb25zdDsKICAgIFFTdHJpbmcJCWljb25UZXh0KCkg
Y29uc3Q7CgogICAgYm9vbAkJaGFzTW91c2VUcmFja2luZygpIGNvbnN0OwogICAgYm9vbAkJaGFz
TW91c2UoKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQJc2V0TWFzayggY29uc3QgUUJpdG1hcCAm
ICk7CiAgICB2aXJ0dWFsIHZvaWQJc2V0TWFzayggY29uc3QgUVJlZ2lvbiAmICk7CiAgICB2b2lk
CQljbGVhck1hc2soKTsKCiAgICBjb25zdCBRQ29sb3IgJgliYWNrZ3JvdW5kQ29sb3IoKSBjb25z
dDsgIAogICAgdmlydHVhbCB2b2lkCXNldEJhY2tncm91bmRDb2xvciggY29uc3QgUUNvbG9yICYg
KTsgIAogICAgY29uc3QgUVBpeG1hcCAqCWJhY2tncm91bmRQaXhtYXAoKSBjb25zdDsgIAogICAg
dmlydHVhbCB2b2lkCXNldEJhY2tncm91bmRQaXhtYXAoIGNvbnN0IFFQaXhtYXAgJiApOyAgCgpw
dWJsaWMgIDoKCiAgICB2aXJ0dWFsIHZvaWQJc2V0Q2FwdGlvbiggY29uc3QgUVN0cmluZyAmKTsK
ICAgIHZpcnR1YWwgdm9pZAlzZXRJY29uKCBjb25zdCBRUGl4bWFwICYgKTsKICAgIHZpcnR1YWwg
dm9pZAlzZXRJY29uVGV4dCggY29uc3QgUVN0cmluZyAmKTsKCiAgICB2aXJ0dWFsIHZvaWQJc2V0
TW91c2VUcmFja2luZyggYm9vbCBlbmFibGUgKTsKCiAgICAgCgogICAgdmlydHVhbCB2b2lkCXNl
dEZvY3VzKCk7CiAgICB2b2lkCQljbGVhckZvY3VzKCk7CgpwdWJsaWM6CiAgICBlbnVtIEZvY3Vz
UG9saWN5IHsKCU5vRm9jdXMgPSAwLAoJVGFiRm9jdXMgPSAweDEsCglDbGlja0ZvY3VzID0gMHgy
LAoJU3Ryb25nRm9jdXMgPSAweDMsCglXaGVlbEZvY3VzID0gMHg3CiAgICB9OwoKICAgIGJvb2wJ
CWlzQWN0aXZlV2luZG93KCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQJc2V0QWN0aXZlV2luZG93
KCk7CiAgICBib29sCQlpc0ZvY3VzRW5hYmxlZCgpIGNvbnN0OwoKICAgIEZvY3VzUG9saWN5CQlm
b2N1c1BvbGljeSgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkCXNldEZvY3VzUG9saWN5KCBGb2N1
c1BvbGljeSApOwogICAgYm9vbAkJaGFzRm9jdXMoKSBjb25zdDsKICAgIHN0YXRpYyB2b2lkCQlz
ZXRUYWJPcmRlciggUVdpZGdldCAqLCBRV2lkZ2V0ICogKTsKICAgIHZpcnR1YWwgdm9pZAlzZXRG
b2N1c1Byb3h5KCBRV2lkZ2V0ICogKTsKICAgIFFXaWRnZXQgKgkJZm9jdXNQcm94eSgpIGNvbnN0
OwoKICAgICAKCiAgICB2b2lkCQlncmFiTW91c2UoKTsKCiAgICB2b2lkCQlncmFiTW91c2UoIGNv
bnN0IFFDdXJzb3IgJiApOwoKICAgIHZvaWQJCXJlbGVhc2VNb3VzZSgpOwogICAgdm9pZAkJZ3Jh
YktleWJvYXJkKCk7CiAgICB2b2lkCQlyZWxlYXNlS2V5Ym9hcmQoKTsKICAgIHN0YXRpYyBRV2lk
Z2V0ICoJbW91c2VHcmFiYmVyKCk7CiAgICBzdGF0aWMgUVdpZGdldCAqCWtleWJvYXJkR3JhYmJl
cigpOwoKICAgICAKCiAgICBib29sCSAJaXNVcGRhdGVzRW5hYmxlZCgpIGNvbnN0OwoKCgoKcHVi
bGljICA6CiAgICB2aXJ0dWFsIHZvaWQJc2V0VXBkYXRlc0VuYWJsZWQoIGJvb2wgZW5hYmxlICk7
CiAgICB2b2lkCQl1cGRhdGUoKTsKICAgIHZvaWQJCXVwZGF0ZSggaW50IHgsIGludCB5LCBpbnQg
dywgaW50IGggKTsKICAgIHZvaWQJCXVwZGF0ZSggY29uc3QgUVJlY3QmICk7CiAgICB2b2lkCQly
ZXBhaW50KCk7CiAgICB2b2lkCQlyZXBhaW50KCBib29sIGVyYXNlICk7CiAgICB2b2lkCQlyZXBh
aW50KCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgYm9vbCBlcmFzZT1UUlVFICk7CiAgICB2
b2lkCQlyZXBhaW50KCBjb25zdCBRUmVjdCAmLCBib29sIGVyYXNlID0gVFJVRSApOwogICAgdm9p
ZAkJcmVwYWludCggY29uc3QgUVJlZ2lvbiAmLCBib29sIGVyYXNlID0gVFJVRSApOwoKICAgICAK
CiAgICB2aXJ0dWFsIHZvaWQJc2hvdygpOwogICAgdmlydHVhbCB2b2lkCWhpZGUoKTsKCiAgICB2
b2lkCQlpY29uaWZ5KCkgeyBzaG93TWluaW1pemVkKCk7IH0KCiAgICB2aXJ0dWFsIHZvaWQJc2hv
d01pbmltaXplZCgpOwogICAgdmlydHVhbCB2b2lkCXNob3dNYXhpbWl6ZWQoKTsKICAgIHZvaWQJ
CXNob3dGdWxsU2NyZWVuKCk7CiAgICB2aXJ0dWFsIHZvaWQJc2hvd05vcm1hbCgpOwogICAgdmly
dHVhbCB2b2lkCXBvbGlzaCgpOwogICAgdm9pZCAJCWNvbnN0UG9saXNoKCkgY29uc3Q7CiAgICBi
b29sCQljbG9zZSgpOwoKICAgIHZvaWQJCXJhaXNlKCk7CiAgICB2b2lkCQlsb3dlcigpOwogICAg
dm9pZAkJc3RhY2tVbmRlciggUVdpZGdldCogKTsKICAgIHZpcnR1YWwgdm9pZAltb3ZlKCBpbnQg
eCwgaW50IHkgKTsKICAgIHZvaWQJCW1vdmUoIGNvbnN0IFFQb2ludCAmICk7CiAgICB2aXJ0dWFs
IHZvaWQJcmVzaXplKCBpbnQgdywgaW50IGggKTsKICAgIHZvaWQJCXJlc2l6ZSggY29uc3QgUVNp
emUgJiApOwogICAgdmlydHVhbCB2b2lkCXNldEdlb21ldHJ5KCBpbnQgeCwgaW50IHksIGludCB3
LCBpbnQgaCApOwogICAgdmlydHVhbCB2b2lkCXNldEdlb21ldHJ5KCBjb25zdCBRUmVjdCAmICk7
CgpwdWJsaWM6CiAgICB2aXJ0dWFsIGJvb2wJY2xvc2UoIGJvb2wgYWxzb0RlbGV0ZSApOwogICAg
Ym9vbAkJaXNWaXNpYmxlKCkJY29uc3Q7CiAgICBib29sCQlpc1Zpc2libGVUbyhRV2lkZ2V0Kikg
Y29uc3Q7CiAgICBib29sCQlpc1Zpc2libGVUb1RMVygpIGNvbnN0OyAgCiAgICBRUmVjdAkJdmlz
aWJsZVJlY3QoKSBjb25zdDsKICAgIGJvb2wgCQlpc0hpZGRlbigpIGNvbnN0OwogICAgYm9vbAkJ
aXNNaW5pbWl6ZWQoKSBjb25zdDsKICAgIGJvb2wJCWlzTWF4aW1pemVkKCkgY29uc3Q7CgogICAg
dmlydHVhbCBRU2l6ZQlzaXplSGludCgpIGNvbnN0OwogICAgdmlydHVhbCBRU2l6ZQltaW5pbXVt
U2l6ZUhpbnQoKSBjb25zdDsKICAgIHZpcnR1YWwgUVNpemVQb2xpY3kJc2l6ZVBvbGljeSgpIGNv
bnN0OwogICAgdmlydHVhbCB2b2lkCQlzZXRTaXplUG9saWN5KCBRU2l6ZVBvbGljeSApOwogICAg
dmlydHVhbCBpbnQgaGVpZ2h0Rm9yV2lkdGgoaW50KSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQg
IAlhZGp1c3RTaXplKCk7CgogICAgUUxheW91dCAqCQlsYXlvdXQoKSBjb25zdCB7IHJldHVybiBs
YXlfb3V0OyB9CgogICAgdm9pZAkJdXBkYXRlR2VvbWV0cnkoKTsKICAgIHZpcnR1YWwgdm9pZCAJ
cmVwYXJlbnQoIFFXaWRnZXQgKnBhcmVudCwgV0ZsYWdzLCBjb25zdCBRUG9pbnQgJiwKCQkJCSAg
Ym9vbCBzaG93SXQ9RkFMU0UgKTsKICAgIHZvaWQJCXJlcGFyZW50KCBRV2lkZ2V0ICpwYXJlbnQs
IGNvbnN0IFFQb2ludCAmLAoJCQkJICBib29sIHNob3dJdD1GQUxTRSApOwoKICAgIHZvaWQJCXJl
Y3JlYXRlKCBRV2lkZ2V0ICpwYXJlbnQsIFdGbGFncyBmLCBjb25zdCBRUG9pbnQgJiBwLAoJCQkJ
ICBib29sIHNob3dJdD1GQUxTRSApIHsgcmVwYXJlbnQocGFyZW50LGYscCxzaG93SXQpOyB9CgoK
ICAgIHZvaWQJCWVyYXNlKCk7CiAgICB2b2lkCQllcmFzZSggaW50IHgsIGludCB5LCBpbnQgdywg
aW50IGggKTsKICAgIHZvaWQJCWVyYXNlKCBjb25zdCBRUmVjdCAmICk7CiAgICB2b2lkCQllcmFz
ZSggY29uc3QgUVJlZ2lvbiAmICk7CiAgICB2b2lkCQlzY3JvbGwoIGludCBkeCwgaW50IGR5ICk7
CiAgICB2b2lkCQlzY3JvbGwoIGludCBkeCwgaW50IGR5LCBjb25zdCBRUmVjdCYgKTsKCiAgICB2
b2lkCQlkcmF3VGV4dCggaW50IHgsIGludCB5LCBjb25zdCBRU3RyaW5nICYpOwogICAgdm9pZAkJ
ZHJhd1RleHQoIGNvbnN0IFFQb2ludCAmLCBjb25zdCBRU3RyaW5nICYpOwoKICAgICAKCiAgICBR
V2lkZ2V0ICoJCWZvY3VzV2lkZ2V0KCkgY29uc3Q7CiAgICBRUmVjdCAgICAgICAgICAgICAgIG1p
Y3JvRm9jdXNIaW50KCkgY29uc3Q7CgogICAgIAoKICAgIGJvb2wJCWFjY2VwdERyb3BzKCkgY29u
c3Q7CiAgICB2aXJ0dWFsIHZvaWQJc2V0QWNjZXB0RHJvcHMoIGJvb2wgb24gKTsKCiAgICAgCgog
ICAgdmlydHVhbCB2b2lkCXNldEF1dG9NYXNrKGJvb2wpOwogICAgYm9vbAkJYXV0b01hc2soKSBj
b25zdDsKCiAgICBlbnVtIEJhY2tncm91bmRPcmlnaW4geyBXaWRnZXRPcmlnaW4sIFBhcmVudE9y
aWdpbiwgV2luZG93T3JpZ2luIH07CgogICAgdmlydHVhbCB2b2lkIHNldEJhY2tncm91bmRPcmln
aW4oIEJhY2tncm91bmRPcmlnaW4gKTsKICAgIEJhY2tncm91bmRPcmlnaW4gYmFja2dyb3VuZE9y
aWdpbigpIGNvbnN0OwoKCiAgICAgCiAgICB2aXJ0dWFsIGJvb2wgY3VzdG9tV2hhdHNUaGlzKCkg
Y29uc3Q7CgogICAgUVdpZGdldCAqCQlwYXJlbnRXaWRnZXQoIGJvb2wgc2FtZVdpbmRvdyA9IEZB
TFNFICkgY29uc3Q7CiAgICBXU3RhdGUJCXRlc3RXU3RhdGUoIFdTdGF0ZSBzICkgY29uc3Q7CiAg
ICBXRmxhZ3MJCXRlc3RXRmxhZ3MoIFdGbGFncyBmICkgY29uc3Q7CiAgICBzdGF0aWMgUVdpZGdl
dCAqCWZpbmQoIFdJZCApOwogICAgc3RhdGljIFFXaWRnZXRNYXBwZXIgKndtYXBwZXIoKTsKCiAg
ICBRV2lkZ2V0ICAqY2hpbGRBdCggaW50IHgsIGludCB5LCBib29sIGluY2x1ZGVUaGlzID0gRkFM
U0UgKSBjb25zdDsKICAgIFFXaWRnZXQgICpjaGlsZEF0KCBjb25zdCBRUG9pbnQgJiwgYm9vbCBp
bmNsdWRlVGhpcyA9IEZBTFNFICkgY29uc3Q7CgoKCgoKCgoKCgoKCnByb3RlY3RlZDoKICAgICAK
ICAgIGJvb2wJIGV2ZW50KCBRRXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIG1vdXNlUHJlc3NF
dmVudCggUU1vdXNlRXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIG1vdXNlUmVsZWFzZUV2ZW50
KCBRTW91c2VFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgbW91c2VEb3VibGVDbGlja0V2ZW50
KCBRTW91c2VFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgbW91c2VNb3ZlRXZlbnQoIFFNb3Vz
ZUV2ZW50ICogKTsKCiAgICB2aXJ0dWFsIHZvaWQgd2hlZWxFdmVudCggUVdoZWVsRXZlbnQgKiAp
OwoKICAgIHZpcnR1YWwgdm9pZCBrZXlQcmVzc0V2ZW50KCBRS2V5RXZlbnQgKiApOwogICAgdmly
dHVhbCB2b2lkIGtleVJlbGVhc2VFdmVudCggUUtleUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9p
ZCBmb2N1c0luRXZlbnQoIFFGb2N1c0V2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBmb2N1c091
dEV2ZW50KCBRRm9jdXNFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgZW50ZXJFdmVudCggUUV2
ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBsZWF2ZUV2ZW50KCBRRXZlbnQgKiApOwogICAgdmly
dHVhbCB2b2lkIHBhaW50RXZlbnQoIFFQYWludEV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBt
b3ZlRXZlbnQoIFFNb3ZlRXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIHJlc2l6ZUV2ZW50KCBR
UmVzaXplRXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIGNsb3NlRXZlbnQoIFFDbG9zZUV2ZW50
ICogKTsKICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0TWVudUV2ZW50KCBRQ29udGV4dE1lbnVFdmVu
dCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgaW1TdGFydEV2ZW50KCBRSU1FdmVudCAqICk7CiAgICB2
aXJ0dWFsIHZvaWQgaW1Db21wb3NlRXZlbnQoIFFJTUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9p
ZCBpbUVuZEV2ZW50KCBRSU1FdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgdGFibGV0RXZlbnQo
IFFUYWJsZXRFdmVudCAqICk7CgoKICAgIHZpcnR1YWwgdm9pZCBkcmFnRW50ZXJFdmVudCggUURy
YWdFbnRlckV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBkcmFnTW92ZUV2ZW50KCBRRHJhZ01v
dmVFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgZHJhZ0xlYXZlRXZlbnQoIFFEcmFnTGVhdmVF
dmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgZHJvcEV2ZW50KCBRRHJvcEV2ZW50ICogKTsKCgog
ICAgdmlydHVhbCB2b2lkIHNob3dFdmVudCggUVNob3dFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZv
aWQgaGlkZUV2ZW50KCBRSGlkZUV2ZW50ICogKTsKCgoKCgoKCgogICAgdmlydHVhbCBib29sIHgx
MUV2ZW50KCBYRXZlbnQgKiApOwoKCgoKCgoKICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVNYXNrKCk7
CgogICAgIAoKCiAgICB2aXJ0dWFsIHZvaWQgc3R5bGVDaGFuZ2UoIFFTdHlsZSYgKTsKCiAgICB2
aXJ0dWFsIHZvaWQgZW5hYmxlZENoYW5nZSggYm9vbCBvbGRFbmFibGVkICk7CgogICAgdmlydHVh
bCB2b2lkIHBhbGV0dGVDaGFuZ2UoIGNvbnN0IFFQYWxldHRlICYgKTsKCiAgICB2aXJ0dWFsIHZv
aWQgZm9udENoYW5nZSggY29uc3QgUUZvbnQgJiApOwogICAgdmlydHVhbCB2b2lkIHdpbmRvd0Fj
dGl2YXRpb25DaGFuZ2UoIGJvb2wgb2xkQWN0aXZlICk7CgogICAgaW50CQkgbWV0cmljKCBpbnQg
KQljb25zdDsKCiAgICB2b2lkCSByZXNldElucHV0Q29udGV4dCgpOwoKICAgIHZpcnR1YWwgdm9p
ZCBjcmVhdGUoIFdJZCA9IDAsIGJvb2wgaW5pdGlhbGl6ZVdpbmRvdyA9IFRSVUUsCgkJCSBib29s
IGRlc3Ryb3lPbGRXaW5kb3cgPSBUUlVFICk7CiAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSggYm9v
bCBkZXN0cm95V2luZG93ID0gVFJVRSwKCQkJICBib29sIGRlc3Ryb3lTdWJXaW5kb3dzID0gVFJV
RSApOwogICAgdWludAkgZ2V0V1N0YXRlKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0V1N0
YXRlKCB1aW50ICk7CiAgICB2b2lkCSBjbGVhcldTdGF0ZSggdWludCBuICk7CiAgICBXRmxhZ3MJ
IGdldFdGbGFncygpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldFdGbGFncyggV0ZsYWdzICk7
CiAgICB2b2lkCSBjbGVhcldGbGFncyggV0ZsYWdzIG4gKTsKCiAgICB2aXJ0dWFsIGJvb2wgZm9j
dXNOZXh0UHJldkNoaWxkKCBib29sIG5leHQgKTsKCiAgICBRV0V4dHJhCSpleHRyYURhdGEoKTsK
ICAgIFFUTFdFeHRyYQkqdG9wRGF0YSgpOwogICAgUUZvY3VzRGF0YQkqZm9jdXNEYXRhKCk7Cgog
ICAgdmlydHVhbCB2b2lkIHNldEtleUNvbXByZXNzaW9uKGJvb2wpOwogICAgdmlydHVhbCB2b2lk
IHNldE1pY3JvRm9jdXNIaW50KGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBib29sIHRleHQ9
VFJVRSwgUUZvbnQgKmYgPSAwKTsKCgoKCgoKcHJpdmF0ZSAgOgogICAgdm9pZAkgZm9jdXNQcm94
eURlc3Ryb3llZCgpOwoKcHJpdmF0ZToKICAgIHZvaWQJIHNldEZvbnRTeXMoIFFGb250ICpmID0g
MCApOwoKICAgIHZvaWQJIGNyZWF0ZUlucHV0Q29udGV4dCgpOwogICAgdm9pZAkgZGVzdHJveUlu
cHV0Q29udGV4dCgpOwogICAgdm9pZAkgZm9jdXNJbnB1dENvbnRleHQoKTsKICAgIHZvaWQJIGNo
ZWNrQ2hpbGRyZW5EbmQoKTsKIyA1NjYgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xd2lkZ2V0Lmgi
CgoKCiAgICB2b2lkIAkgc2V0TGF5b3V0KCBRTGF5b3V0ICpsICk7CgogICAgdm9pZAkgc2V0V2lu
SWQoIFdJZCApOwogICAgdm9pZAkgc2hvd1dpbmRvdygpOwogICAgdm9pZAkgaGlkZVdpbmRvdygp
OwogICAgdm9pZAkgc2VuZFNob3dFdmVudHNUb0NoaWxkcmVuKCBib29sIHNwb250YW5lb3VzICk7
CiAgICB2b2lkCSBzZW5kSGlkZUV2ZW50c1RvQ2hpbGRyZW4oIGJvb2wgc3BvbnRhbmVvdXMgKTsK
ICAgIHZvaWQJIHJlcGFyZW50U3lzKCBRV2lkZ2V0ICpwYXJlbnQsIFdGbGFncywgY29uc3QgUVBv
aW50ICYsICBib29sIHNob3dJdCk7CiAgICB2b2lkCSBjcmVhdGVUTEV4dHJhKCk7CiAgICB2b2lk
CSBjcmVhdGVFeHRyYSgpOwogICAgdm9pZAkgZGVsZXRlRXh0cmEoKTsKICAgIHZvaWQJIGNyZWF0
ZVN5c0V4dHJhKCk7CiAgICB2b2lkCSBkZWxldGVTeXNFeHRyYSgpOwogICAgdm9pZAkgY3JlYXRl
VExTeXNFeHRyYSgpOwogICAgdm9pZAkgZGVsZXRlVExTeXNFeHRyYSgpOwogICAgdm9pZAkgZGVh
Y3RpdmF0ZVdpZGdldENsZWFudXAoKTsKICAgIHZvaWQJIGludGVybmFsU2V0R2VvbWV0cnkoIGlu
dCwgaW50LCBpbnQsIGludCwgYm9vbCApOwogICAgdm9pZAkgcmVwYXJlbnRGb2N1c1dpZGdldHMo
IFFXaWRnZXQgKiApOwogICAgUUZvY3VzRGF0YQkqZm9jdXNEYXRhKCBib29sIGNyZWF0ZSApOwog
ICAgdm9pZCAgICAgICAgIHNldEJhY2tncm91bmRGcm9tTW9kZSgpOwogICAgdm9pZCAgICAgICAg
IHNldEJhY2tncm91bmRDb2xvckRpcmVjdCggY29uc3QgUUNvbG9yICYgKTsKICAgIHZvaWQgICAJ
IHNldEJhY2tncm91bmRQaXhtYXBEaXJlY3QoIGNvbnN0IFFQaXhtYXAgJiApOwogICAgdm9pZCAg
ICAgICAgIHNldEJhY2tncm91bmRNb2RlRGlyZWN0KCBCYWNrZ3JvdW5kTW9kZSApOwogICAgdm9p
ZCAgICAgICAgIHNldEJhY2tncm91bmRFbXB0eSgpOwogICAgdm9pZAkgdXBkYXRlRnJhbWVTdHJ1
dCgpIGNvbnN0OwoKICAgIHZvaWQgICAgICAgICBzZXRCYWNrZ3JvdW5kWDExUmVsYXRpdmUoKTsK
CgogICAgV0lkCQkgd2luaWQ7CiAgICB1aW50CSB3aWRnZXRfc3RhdGU7CiAgICB1aW50CSB3aWRn
ZXRfZmxhZ3M7CiAgICB1aW50CSBmb2N1c19wb2xpY3kgOiA0OwogICAgdWludCAJIG93bl9mb250
IDoxOwogICAgdWludCAJIG93bl9wYWxldHRlIDoxOwogICAgdWludCAJIHNpemVoaW50X2ZvcmNl
ZCA6MTsKICAgIHVpbnQgCSBpc19jbG9zaW5nIDoxOwogICAgdWludCAJIGluX3Nob3cgOiAxOwog
ICAgdWludCAJIGluX3Nob3dfbWF4aW1pemVkIDogMTsKICAgIHVpbnQJIGZzdHJ1dF9kaXJ0eSA6
IDE7CiAgICBRUmVjdAkgY3JlY3Q7CiAgICBRQ29sb3IJIGJnX2NvbDsKCiAgICBRUGFsZXR0ZQkg
cGFsOwoKICAgIFFGb250CSBmbnQ7CgogICAgUUxheW91dCAJKmxheV9vdXQ7CgogICAgUVdFeHRy
YQkqZXh0cmE7CiMgNjQxICIvdXNyL2xvY2FsL3F0L2luY2x1ZGUvcXdpZGdldC5oIgoKCiAgICBz
dGF0aWMgdm9pZAkgY3JlYXRlTWFwcGVyKCk7CiAgICBzdGF0aWMgdm9pZAkgZGVzdHJveU1hcHBl
cigpOwogICAgc3RhdGljIFFXaWRnZXRMaXN0CSAqd0xpc3QoKTsKICAgIHN0YXRpYyBRV2lkZ2V0
TGlzdAkgKnRsd0xpc3QoKTsKICAgIHN0YXRpYyBRV2lkZ2V0TWFwcGVyICptYXBwZXI7CiAgICBm
cmllbmQgY2xhc3MgUUFwcGxpY2F0aW9uOwogICAgZnJpZW5kIGNsYXNzIFFCYXNlQXBwbGljYXRp
b247CiAgICBmcmllbmQgY2xhc3MgUVBhaW50ZXI7CiAgICBmcmllbmQgY2xhc3MgUUZvbnRNZXRy
aWNzOwogICAgZnJpZW5kIGNsYXNzIFFGb250SW5mbzsKICAgIGZyaWVuZCBjbGFzcyBRRVRXaWRn
ZXQ7CiAgICBmcmllbmQgY2xhc3MgUUxheW91dDsKCnByaXZhdGU6CSAKCiAgICBRV2lkZ2V0KCBj
b25zdCBRV2lkZ2V0ICYgKTsKICAgIFFXaWRnZXQgJm9wZXJhdG9yPSggY29uc3QgUVdpZGdldCAm
ICk7CgoKcHVibGljOiAgCgogICAgdm9pZCBzZXRQYWxldHRlKCBjb25zdCBRUGFsZXR0ZSAmcCwg
Ym9vbCApIHsgc2V0UGFsZXR0ZSggcCApOyB9CgogICAgdm9pZCBzZXRGb250KCBjb25zdCBRRm9u
dCAmZiwgYm9vbCApIHsgc2V0Rm9udCggZiApOyB9Cn07CgoKaW5saW5lIFF0OjpXU3RhdGUgUVdp
ZGdldDo6dGVzdFdTdGF0ZSggV1N0YXRlIHMgKSBjb25zdAp7IHJldHVybiAod2lkZ2V0X3N0YXRl
ICYgcyk7IH0KCmlubGluZSBRdDo6V0ZsYWdzIFFXaWRnZXQ6OnRlc3RXRmxhZ3MoIFdGbGFncyBm
ICkgY29uc3QKeyByZXR1cm4gKHdpZGdldF9mbGFncyAmIGYpOyB9CgoKaW5saW5lIFdJZCBRV2lk
Z2V0Ojp3aW5JZCgpIGNvbnN0CnsgcmV0dXJuIHdpbmlkOyB9CgppbmxpbmUgYm9vbCBRV2lkZ2V0
Ojppc1RvcExldmVsKCkgY29uc3QKeyByZXR1cm4gdGVzdFdGbGFncyhXVHlwZV9Ub3BMZXZlbCk7
IH0KCmlubGluZSBib29sIFFXaWRnZXQ6OmlzRGlhbG9nKCkgY29uc3QKeyByZXR1cm4gdGVzdFdG
bGFncyhXVHlwZV9EaWFsb2cpOyB9CgppbmxpbmUgYm9vbCBRV2lkZ2V0Ojppc1BvcHVwKCkgY29u
c3QKeyByZXR1cm4gdGVzdFdGbGFncyhXVHlwZV9Qb3B1cCk7IH0KCmlubGluZSBib29sIFFXaWRn
ZXQ6OmlzRGVza3RvcCgpIGNvbnN0CnsgcmV0dXJuIHRlc3RXRmxhZ3MoV1R5cGVfRGVza3RvcCk7
IH0KCmlubGluZSBib29sIFFXaWRnZXQ6OmlzRW5hYmxlZCgpIGNvbnN0CnsgcmV0dXJuICF0ZXN0
V1N0YXRlKFdTdGF0ZV9EaXNhYmxlZCk7IH0KCmlubGluZSBib29sIFFXaWRnZXQ6OmlzTW9kYWwo
KSBjb25zdAp7IHJldHVybiB0ZXN0V0ZsYWdzKFdTaG93TW9kYWwpOyB9CgppbmxpbmUgYm9vbCBR
V2lkZ2V0Ojppc0VuYWJsZWRUb1RMVygpIGNvbnN0CnsgcmV0dXJuIGlzRW5hYmxlZCgpOyB9Cgpp
bmxpbmUgY29uc3QgUVJlY3QgJlFXaWRnZXQ6Omdlb21ldHJ5KCkgY29uc3QKeyByZXR1cm4gY3Jl
Y3Q7IH0KCmlubGluZSBRU2l6ZSBRV2lkZ2V0OjpzaXplKCkgY29uc3QKeyByZXR1cm4gY3JlY3Qu
c2l6ZSgpOyB9CgppbmxpbmUgaW50IFFXaWRnZXQ6OndpZHRoKCkgY29uc3QKeyByZXR1cm4gY3Jl
Y3Qud2lkdGgoKTsgfQoKaW5saW5lIGludCBRV2lkZ2V0OjpoZWlnaHQoKSBjb25zdAp7IHJldHVy
biBjcmVjdC5oZWlnaHQoKTsgfQoKaW5saW5lIFFSZWN0IFFXaWRnZXQ6OnJlY3QoKSBjb25zdAp7
IHJldHVybiBRUmVjdCgwLDAsY3JlY3Qud2lkdGgoKSxjcmVjdC5oZWlnaHQoKSk7IH0KCmlubGlu
ZSBpbnQgUVdpZGdldDo6bWluaW11bVdpZHRoKCkgY29uc3QKeyByZXR1cm4gbWluaW11bVNpemUo
KS53aWR0aCgpOyB9CgppbmxpbmUgaW50IFFXaWRnZXQ6Om1pbmltdW1IZWlnaHQoKSBjb25zdAp7
IHJldHVybiBtaW5pbXVtU2l6ZSgpLmhlaWdodCgpOyB9CgppbmxpbmUgaW50IFFXaWRnZXQ6Om1h
eGltdW1XaWR0aCgpIGNvbnN0CnsgcmV0dXJuIG1heGltdW1TaXplKCkud2lkdGgoKTsgfQoKaW5s
aW5lIGludCBRV2lkZ2V0OjptYXhpbXVtSGVpZ2h0KCkgY29uc3QKeyByZXR1cm4gbWF4aW11bVNp
emUoKS5oZWlnaHQoKTsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6c2V0TWluaW11bVNpemUoIGNv
bnN0IFFTaXplICZzICkKeyBzZXRNaW5pbXVtU2l6ZShzLndpZHRoKCkscy5oZWlnaHQoKSk7IH0K
CmlubGluZSB2b2lkIFFXaWRnZXQ6OnNldE1heGltdW1TaXplKCBjb25zdCBRU2l6ZSAmcyApCnsg
c2V0TWF4aW11bVNpemUocy53aWR0aCgpLHMuaGVpZ2h0KCkpOyB9CgppbmxpbmUgdm9pZCBRV2lk
Z2V0OjpzZXRTaXplSW5jcmVtZW50KCBjb25zdCBRU2l6ZSAmcyApCnsgc2V0U2l6ZUluY3JlbWVu
dChzLndpZHRoKCkscy5oZWlnaHQoKSk7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OnNldEJhc2VT
aXplKCBjb25zdCBRU2l6ZSAmcyApCnsgc2V0QmFzZVNpemUocy53aWR0aCgpLHMuaGVpZ2h0KCkp
OyB9CgppbmxpbmUgY29uc3QgUUNvbG9yICZRV2lkZ2V0OjplcmFzZUNvbG9yKCkgY29uc3QKeyBy
ZXR1cm4gYmdfY29sOyB9CgoKaW5saW5lIGNvbnN0IFFQYWxldHRlICZRV2lkZ2V0OjpwYWxldHRl
KCkgY29uc3QKeyByZXR1cm4gcGFsOyB9CgoKaW5saW5lIFFGb250IFFXaWRnZXQ6OmZvbnQoKSBj
b25zdAp7IHJldHVybiBmbnQ7IH0KCmlubGluZSBRRm9udE1ldHJpY3MgUVdpZGdldDo6Zm9udE1l
dHJpY3MoKSBjb25zdAp7IHJldHVybiBRRm9udE1ldHJpY3MoZm9udCgpKTsgfQoKaW5saW5lIFFG
b250SW5mbyBRV2lkZ2V0Ojpmb250SW5mbygpIGNvbnN0CnsgcmV0dXJuIFFGb250SW5mbyhmb250
KCkpOyB9CgppbmxpbmUgYm9vbCBRV2lkZ2V0OjpoYXNNb3VzZVRyYWNraW5nKCkgY29uc3QKeyBy
ZXR1cm4gdGVzdFdTdGF0ZShXU3RhdGVfTW91c2VUcmFja2luZyk7IH0KCmlubGluZSBib29sIFFX
aWRnZXQ6Omhhc01vdXNlKCkgY29uc3QKeyByZXR1cm4gdGVzdFdTdGF0ZShXU3RhdGVfSGFzTW91
c2UpOyB9CgppbmxpbmUgYm9vbCAgUVdpZGdldDo6aXNGb2N1c0VuYWJsZWQoKSBjb25zdAp7IHJl
dHVybiAoRm9jdXNQb2xpY3kpZm9jdXNfcG9saWN5ICE9IE5vRm9jdXM7IH0KCmlubGluZSBRV2lk
Z2V0OjpGb2N1c1BvbGljeSBRV2lkZ2V0Ojpmb2N1c1BvbGljeSgpIGNvbnN0CnsgcmV0dXJuIChG
b2N1c1BvbGljeSlmb2N1c19wb2xpY3k7IH0KCmlubGluZSBib29sIFFXaWRnZXQ6OmlzVXBkYXRl
c0VuYWJsZWQoKSBjb25zdAp7IHJldHVybiAhdGVzdFdTdGF0ZShXU3RhdGVfQmxvY2tVcGRhdGVz
KTsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6dXBkYXRlKCBjb25zdCBRUmVjdCAmciApCnsgdXBk
YXRlKCByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSApOyB9CgppbmxpbmUgdm9p
ZCBRV2lkZ2V0OjpyZXBhaW50KCkKeyByZXBhaW50KCAwLCAwLCBjcmVjdC53aWR0aCgpLCBjcmVj
dC5oZWlnaHQoKSwgVFJVRSApOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjpyZXBhaW50KCBib29s
IGVyYXNlICkKeyByZXBhaW50KCAwLCAwLCBjcmVjdC53aWR0aCgpLCBjcmVjdC5oZWlnaHQoKSwg
ZXJhc2UgKTsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6cmVwYWludCggY29uc3QgUVJlY3QgJnIs
IGJvb2wgZXJhc2UgKQp7IHJlcGFpbnQoIHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdo
dCgpLCBlcmFzZSApOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjplcmFzZSgpCnsgZXJhc2UoIDAs
IDAsIGNyZWN0LndpZHRoKCksIGNyZWN0LmhlaWdodCgpICk7IH0KCmlubGluZSB2b2lkIFFXaWRn
ZXQ6OmVyYXNlKCBjb25zdCBRUmVjdCAmciApCnsgZXJhc2UoIHIueCgpLCByLnkoKSwgci53aWR0
aCgpLCByLmhlaWdodCgpICk7IH0KCmlubGluZSBib29sIFFXaWRnZXQ6OmNsb3NlKCkKeyByZXR1
cm4gY2xvc2UoIEZBTFNFICk7IH0KCmlubGluZSBib29sIFFXaWRnZXQ6OmlzVmlzaWJsZSgpIGNv
bnN0CnsgcmV0dXJuIHRlc3RXU3RhdGUoV1N0YXRlX1Zpc2libGUpOyB9CgppbmxpbmUgYm9vbCBR
V2lkZ2V0Ojppc1Zpc2libGVUb1RMVygpIGNvbnN0ICAKeyByZXR1cm4gaXNWaXNpYmxlKCk7IH0K
CmlubGluZSBib29sIFFXaWRnZXQ6OmlzSGlkZGVuKCkgY29uc3QKeyByZXR1cm4gdGVzdFdTdGF0
ZShXU3RhdGVfRm9yY2VIaWRlKTsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6bW92ZSggY29uc3Qg
UVBvaW50ICZwICkKeyBtb3ZlKCBwLngoKSwgcC55KCkgKTsgfQoKaW5saW5lIHZvaWQgUVdpZGdl
dDo6cmVzaXplKCBjb25zdCBRU2l6ZSAmcyApCnsgcmVzaXplKCBzLndpZHRoKCksIHMuaGVpZ2h0
KCkpOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjpzZXRHZW9tZXRyeSggY29uc3QgUVJlY3QgJnIg
KQp7IHNldEdlb21ldHJ5KCByLmxlZnQoKSwgci50b3AoKSwgci53aWR0aCgpLCByLmhlaWdodCgp
ICk7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OmRyYXdUZXh0KCBjb25zdCBRUG9pbnQgJnAsIGNv
bnN0IFFTdHJpbmcgJnMgKQp7IGRyYXdUZXh0KCBwLngoKSwgcC55KCksIHMgKTsgfQoKaW5saW5l
IFFXaWRnZXQgKlFXaWRnZXQ6OnBhcmVudFdpZGdldCggYm9vbCBzYW1lV2luZG93ICkgY29uc3QK
ewogICAgaWYgKCBzYW1lV2luZG93ICkKCXJldHVybiBpc1RvcExldmVsKCkgPyAwIDogKFFXaWRn
ZXQgKilRT2JqZWN0OjpwYXJlbnQoKTsKICAgIHJldHVybiAoUVdpZGdldCAqKVFPYmplY3Q6OnBh
cmVudCgpOwp9CgppbmxpbmUgUVdpZGdldE1hcHBlciAqUVdpZGdldDo6d21hcHBlcigpCnsgcmV0
dXJuIG1hcHBlcjsgfQoKaW5saW5lIHVpbnQgUVdpZGdldDo6Z2V0V1N0YXRlKCkgY29uc3QKeyBy
ZXR1cm4gd2lkZ2V0X3N0YXRlOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjpzZXRXU3RhdGUoIHVp
bnQgZiApCnsgd2lkZ2V0X3N0YXRlIHw9IGY7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OmNsZWFy
V1N0YXRlKCB1aW50IGYgKQp7IHdpZGdldF9zdGF0ZSAmPSB+ZjsgfQoKaW5saW5lIFF0OjpXRmxh
Z3MgUVdpZGdldDo6Z2V0V0ZsYWdzKCkgY29uc3QKeyByZXR1cm4gd2lkZ2V0X2ZsYWdzOyB9Cgpp
bmxpbmUgdm9pZCBRV2lkZ2V0OjpzZXRXRmxhZ3MoIFdGbGFncyBmICkKeyB3aWRnZXRfZmxhZ3Mg
fD0gZjsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6Y2xlYXJXRmxhZ3MoIFdGbGFncyBmICkKeyB3
aWRnZXRfZmxhZ3MgJj0gfmY7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OmNvbnN0UG9saXNoKCkg
Y29uc3QKewogICAgaWYgKCAhdGVzdFdTdGF0ZShXU3RhdGVfUG9saXNoZWQpICkgewoJUVdpZGdl
dCogdGhhdCA9IChRV2lkZ2V0KikgdGhpczsKCXRoYXQtPnBvbGlzaCgpOwogICAgICAgIHRoYXQt
PnNldFdTdGF0ZShXU3RhdGVfUG9saXNoZWQpOyAgCiAgICB9Cn0KCmlubGluZSBib29sIFFXaWRn
ZXQ6Om93bkN1cnNvcigpIGNvbnN0CnsKICAgIHJldHVybiB0ZXN0V1N0YXRlKCBXU3RhdGVfT3du
Q3Vyc29yICk7Cn0KCmlubGluZSBib29sIFFXaWRnZXQ6Om93bkZvbnQoKSBjb25zdAp7CiAgICBy
ZXR1cm4gb3duX2ZvbnQ7Cn0KCmlubGluZSBib29sIFFXaWRnZXQ6Om93blBhbGV0dGUoKSBjb25z
dAp7CiAgICByZXR1cm4gb3duX3BhbGV0dGU7Cn0KCgogCiAKIAoKY2xhc3MgUUZvY3VzRGF0YTsK
Y2xhc3MgUVdTTWFuYWdlcjsKCgoKCgoKCnN0cnVjdCAgIFFUTFdFeHRyYSB7CgogICAgUVN0cmlu
ZyAgY2FwdGlvbjsJCQkJIAogICAgUVN0cmluZyAgaWNvblRleHQ7CQkJCSAKICAgIFFQaXhtYXAg
Kmljb247CQkJCSAKCiAgICBRRm9jdXNEYXRhICpmb2N1c0RhdGE7CQkJIAogICAgc2hvcnQgICAg
aW5jdywgaW5jaDsJCQkgCiAgICAgCiAgICB1bG9uZyAgICBmbGVmdCwgZnJpZ2h0LCBmdG9wLCBm
Ym90dG9tOwogICAgdWludCAgICAgaWNvbmljOiAxOwkJCQkgCiAgICB1aW50ICAgICBmdWxsc2Ny
ZWVuIDogMTsJCQkgCiAgICB1aW50ICAgICBzaG93TW9kZTogMjsJCQkgCiAgICB1aW50ICAgICBz
YXZlZEZsYWdzOwkJCSAKICAgIHNob3J0ICAgIGJhc2V3LCBiYXNlaDsJCQkgCgogICAgV0lkICBw
YXJlbnRXaW5JZDsJCQkJIAogICAgdWludCAgICAgZW1iZWRkZWQgOiAxOwkJCSAKICAgIHVpbnQg
ICAgIHJlc2VydmVkOiAyOwkJCSAKICAgIHVpbnQgICAgIGRuZCA6IDE7CQkJCSAKICAgIHVpbnQg
ICAgIHVzcG9zIDogMTsJCQkJIAogICAgdWludCAgICAgdXNzaXplIDogMTsJCQkgCiAgICB2b2lk
ICAgICp4aWM7CQkJCSAKCgoKCgoKCgoKCgogICAgUVJlY3QgICAgbm9ybWFsR2VvbWV0cnk7CQkJ
IAp9OwoKCgoKIAoKc3RydWN0ICAgUVdFeHRyYSB7CiAgICBRX0lOVDE2ICBtaW53LCBtaW5oOwkJ
CSAKICAgIFFfSU5UMTYgIG1heHcsIG1heGg7CQkJIAogICAgUVBpeG1hcCAqYmdfcGl4OwkJCQkg
CiAgICBRV2lkZ2V0ICpmb2N1c19wcm94eTsKCiAgICBRQ3Vyc29yICpjdXJzOwoKICAgIFFUTFdF
eHRyYSAqdG9wZXh0cmE7CQkJIAoKCgoKICAgIFdJZCB4RG5kUHJveHk7CQkJCSAKCiMgOTQ3ICIv
dXNyL2xvY2FsL3F0L2luY2x1ZGUvcXdpZGdldC5oIgoKICAgIHVpbnQgYmdfb3JpZ2luIDogMjsK
CiAgICB1aW50IGNoaWxkcmVuX3VzZV9kbmQgOiAxOwoKCgoKICAgIGNoYXIgICAgIGJnX21vZGU7
CQkJCSAKICAgIGNoYXIgICAgIGJnX21vZGVfdmlzdWFsOwkJCSAKCiAgICBRU3R5bGUqIHN0eWxl
OwoKICAgIFFSZWN0IG1pY3JvX2ZvY3VzX2hpbnQ7CQkJIAogICAgUVNpemVQb2xpY3kgc2l6ZV9w
b2xpY3k7Cn07CgoKCiMgNDIgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xZnJhbWUuaCIgMgoKCgoK
CmNsYXNzICAgUUZyYW1lIDogcHVibGljIFFXaWRnZXQKewogICAgcHVibGljOgl2aXJ0dWFsIFFN
ZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgp
Owl9CXZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7CXZpcnR1YWwgdm9pZCog
cXRfY2FzdCggY29uc3QgY2hhciogKTsgdmlydHVhbCBib29sIHF0X2ludm9rZSggaW50LCBRVU9i
amVjdCogKTsgdmlydHVhbCBib29sIHF0X2VtaXQoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwg
Ym9vbCBxdF9wcm9wZXJ0eSggaW50LCBpbnQsIFFWYXJpYW50KiApOyAJc3RhdGljIFFNZXRhT2Jq
ZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7CVFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9i
amVjdCopdGhpczsgfSBzdGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFy
ICogPSAwICk7IHN0YXRpYyBRU3RyaW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFy
ICogPSAwICk7IAlwcml2YXRlOglzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7IAogICAgIAog
ICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAoKcHVibGljOgog
ICAgUUZyYW1lKCBRV2lkZ2V0KiBwYXJlbnQ9MCwgY29uc3QgY2hhciogbmFtZT0wLCBXRmxhZ3Mg
Zj0wICk7CgogICAgaW50ICAgICAgICAgZnJhbWVTdHlsZSgpICAgIGNvbnN0OwogICAgdmlydHVh
bCB2b2lkIHNldEZyYW1lU3R5bGUoIGludCApOwoKICAgIGludCAgICAgICAgIGZyYW1lV2lkdGgo
KSAgICBjb25zdDsKICAgIFFSZWN0ICAgICAgIGNvbnRlbnRzUmVjdCgpICBjb25zdDsKCgogICAg
Ym9vbCAgICAgICAgbGluZVNoYXBlc09rKCkgIGNvbnN0IHsgcmV0dXJuIFRSVUU7IH0KCgogICAg
UVNpemUgICAgICAgc2l6ZUhpbnQoKSBjb25zdDsKCiAgICBlbnVtIFNoYXBlIHsgTm9GcmFtZSAg
PSAwLCAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBCb3ggICAgICA9IDB4MDAw
MSwgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIFBhbmVsICAgID0gMHgwMDAyLCAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgV2luUGFuZWwgPSAweDAwMDMsICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBITGluZSAgICA9IDB4MDAwNCwgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIFZMaW5lICAgID0gMHgwMDA1LCAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgU3R5bGVkUGFuZWwgPSAweDAwMDYsICAgICAgICAgICAKICAgICAgICAgICAgICAgICBQ
b3B1cFBhbmVsID0gMHgwMDA3LCAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIE1lbnVCYXJQ
YW5lbCA9IDB4MDAwOCwKICAgICAgICAgICAgICAgICBUb29sQmFyUGFuZWwgPSAweDAwMDksCgkJ
IExpbmVFZGl0UGFuZWwgPSAweDAwMGEsCgkJIFRhYldpZGdldFBhbmVsID0gMHgwMDBiLAogICAg
ICAgICAgICAgICAgIE1TaGFwZSAgID0gMHgwMDBmICAgICAgICAgICAgICAgCiAgICB9OwogICAg
ZW51bSBTaGFkb3cgeyBQbGFpbiAgICA9IDB4MDAxMCwgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgIFJhaXNlZCAgID0gMHgwMDIwLCAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg
U3Vua2VuICAgPSAweDAwMzAsICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICBNU2hhZG93
ICA9IDB4MDBmMCB9OyAgICAgICAgICAgCgogICAgU2hhcGUgICAgICAgZnJhbWVTaGFwZSgpICAg
IGNvbnN0OwogICAgdm9pZCAgICAgICAgc2V0RnJhbWVTaGFwZSggU2hhcGUgKTsKICAgIFNoYWRv
dyAgICAgIGZyYW1lU2hhZG93KCkgICBjb25zdDsKICAgIHZvaWQgICAgICAgIHNldEZyYW1lU2hh
ZG93KCBTaGFkb3cgKTsKCiAgICBpbnQgICAgICAgICBsaW5lV2lkdGgoKSAgICAgY29uc3Q7CiAg
ICB2aXJ0dWFsIHZvaWQgc2V0TGluZVdpZHRoKCBpbnQgKTsKCiAgICBpbnQgICAgICAgICBtYXJn
aW4oKSAgICAgICAgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0TWFyZ2luKCBpbnQgKTsKCiAg
ICBpbnQgICAgICAgICBtaWRMaW5lV2lkdGgoKSAgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0
TWlkTGluZVdpZHRoKCBpbnQgKTsKCiAgICBRUmVjdCAgICAgICBmcmFtZVJlY3QoKSAgICAgY29u
c3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVSZWN0KCBjb25zdCBRUmVjdCAmICk7Cgpwcm90
ZWN0ZWQ6CiAgICB2b2lkICAgICAgICBwYWludEV2ZW50KCBRUGFpbnRFdmVudCAqICk7CiAgICB2
b2lkICAgICAgICByZXNpemVFdmVudCggUVJlc2l6ZUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9p
ZCBkcmF3RnJhbWUoIFFQYWludGVyICogKTsKICAgIHZpcnR1YWwgdm9pZCBkcmF3Q29udGVudHMo
IFFQYWludGVyICogKTsKICAgIHZpcnR1YWwgdm9pZCBmcmFtZUNoYW5nZWQoKTsKCnByaXZhdGU6
CiAgICB2b2lkICAgICAgICB1cGRhdGVGcmFtZVdpZHRoKCk7CiAgICBRUmVjdCAgICAgICBmcmVj
dDsKICAgIGludCAgICAgICAgIGZzdHlsZTsKICAgIHNob3J0ICAgICAgIGx3aWR0aDsKICAgIHNo
b3J0ICAgICAgIG13aWR0aDsKICAgIHNob3J0ICAgICAgIG1sd2lkdGg7CiAgICBzaG9ydCAgICAg
ICBmd2lkdGg7CgogICAgdm9pZCAqIGQ7CnByaXZhdGU6ICAgICAgICAgCgogICAgUUZyYW1lKCBj
b25zdCBRRnJhbWUgJiApOwogICAgUUZyYW1lICZvcGVyYXRvcj0oIGNvbnN0IFFGcmFtZSAmICk7
Cgp9OwoKCmlubGluZSBpbnQgUUZyYW1lOjpmcmFtZVN0eWxlKCkgY29uc3QKeyByZXR1cm4gZnN0
eWxlOyB9CgppbmxpbmUgUUZyYW1lOjpTaGFwZSBRRnJhbWU6OmZyYW1lU2hhcGUoKSBjb25zdAp7
IHJldHVybiAoU2hhcGUpICggZnN0eWxlICYgTVNoYXBlICk7IH0KCmlubGluZSBRRnJhbWU6OlNo
YWRvdyBRRnJhbWU6OmZyYW1lU2hhZG93KCkgY29uc3QKeyByZXR1cm4gKFNoYWRvdykgKCBmc3R5
bGUgJiBNU2hhZG93ICk7IH0KCmlubGluZSB2b2lkIFFGcmFtZTo6c2V0RnJhbWVTaGFwZSggUUZy
YW1lOjpTaGFwZSBzICkKeyBzZXRGcmFtZVN0eWxlKCAoIGZzdHlsZSAmIE1TaGFkb3cgKSB8IHMg
KTsgfQoKaW5saW5lIHZvaWQgUUZyYW1lOjpzZXRGcmFtZVNoYWRvdyggUUZyYW1lOjpTaGFkb3cg
cyApCnsgc2V0RnJhbWVTdHlsZSggKCBmc3R5bGUgJiBNU2hhcGUgKSB8IHMgKTsgfQoKaW5saW5l
IGludCBRRnJhbWU6OmxpbmVXaWR0aCgpIGNvbnN0CnsgcmV0dXJuIGx3aWR0aDsgfQoKaW5saW5l
IGludCBRRnJhbWU6Om1pZExpbmVXaWR0aCgpIGNvbnN0CnsgcmV0dXJuIG1sd2lkdGg7IH0KCmlu
bGluZSBpbnQgUUZyYW1lOjptYXJnaW4oKSBjb25zdAp7IHJldHVybiBtd2lkdGg7IH0KCmlubGlu
ZSBpbnQgUUZyYW1lOjpmcmFtZVdpZHRoKCkgY29uc3QKeyByZXR1cm4gZndpZHRoOyB9CgoKCgoK
IyA0MSAiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3FzY3JvbGx2aWV3LmgiIDIKCiMgMSAiL3Vzci9s
b2NhbC9xdC9pbmNsdWRlL3FzY3JvbGxiYXIuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCmNsYXNzIFFUaW1lcjsKCgoKIyAxICIvdXNyL2xvY2FsL3F0L2luY2x1
ZGUvcXJhbmdlY29udHJvbC5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgpjbGFzcyBRUmFuZ2VDb250cm9sUHJpdmF0ZTsKCgpjbGFzcyAgIFFSYW5n
ZUNvbnRyb2wKewpwdWJsaWM6CiAgICBRUmFuZ2VDb250cm9sKCk7CiAgICBRUmFuZ2VDb250cm9s
KCBpbnQgbWluVmFsdWUsIGludCBtYXhWYWx1ZSwKCQkgICBpbnQgbGluZVN0ZXAsIGludCBwYWdl
U3RlcCwgaW50IHZhbHVlICk7CiAgICB2aXJ0dWFsIH5RUmFuZ2VDb250cm9sKCk7CiAgICBpbnQJ
CXZhbHVlKCkJCWNvbnN0OwogICAgdm9pZAlzZXRWYWx1ZSggaW50ICk7CiAgICB2b2lkCWFkZFBh
Z2UoKTsKICAgIHZvaWQJc3VidHJhY3RQYWdlKCk7CiAgICB2b2lkCWFkZExpbmUoKTsKICAgIHZv
aWQJc3VidHJhY3RMaW5lKCk7CgogICAgaW50CQltaW5WYWx1ZSgpCWNvbnN0OwogICAgaW50CQlt
YXhWYWx1ZSgpCWNvbnN0OwogICAgdm9pZAlzZXRSYW5nZSggaW50IG1pblZhbHVlLCBpbnQgbWF4
VmFsdWUgKTsKICAgIHZvaWQJc2V0TWluVmFsdWUoIGludCBtaW5WYWwgKTsKICAgIHZvaWQJc2V0
TWF4VmFsdWUoIGludCBtaW5WYWwgKTsKCiAgICBpbnQJCWxpbmVTdGVwKCkJY29uc3Q7CiAgICBp
bnQJCXBhZ2VTdGVwKCkJY29uc3Q7CiAgICB2b2lkCXNldFN0ZXBzKCBpbnQgbGluZSwgaW50IHBh
Z2UgKTsKCiAgICBpbnQJCWJvdW5kKCBpbnQgKSBjb25zdDsKCnByb3RlY3RlZDoKICAgIGludAkJ
cG9zaXRpb25Gcm9tVmFsdWUoIGludCB2YWwsIGludCBzcGFjZSApIGNvbnN0OwogICAgaW50CQl2
YWx1ZUZyb21Qb3NpdGlvbiggaW50IHBvcywgaW50IHNwYWNlICkgY29uc3Q7CiAgICB2b2lkCWRp
cmVjdFNldFZhbHVlKCBpbnQgdmFsICk7CiAgICBpbnQJCXByZXZWYWx1ZSgpCWNvbnN0OwoKICAg
IHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZSgpOwogICAgdmlydHVhbCB2b2lkIHJhbmdlQ2hhbmdl
KCk7CiAgICB2aXJ0dWFsIHZvaWQgc3RlcENoYW5nZSgpOwoKcHJpdmF0ZToKICAgIGludAkJbWlu
VmFsLCBtYXhWYWw7CiAgICBpbnQJCWxpbmUsIHBhZ2U7CiAgICBpbnQJCXZhbCwgcHJldlZhbDsK
CiAgICBRUmFuZ2VDb250cm9sUHJpdmF0ZSAqIGQ7Cgpwcml2YXRlOgkgCgogICAgUVJhbmdlQ29u
dHJvbCggY29uc3QgUVJhbmdlQ29udHJvbCAmICk7CiAgICBRUmFuZ2VDb250cm9sICZvcGVyYXRv
cj0oIGNvbnN0IFFSYW5nZUNvbnRyb2wgJiApOwoKfTsKCgppbmxpbmUgaW50IFFSYW5nZUNvbnRy
b2w6OnZhbHVlKCkgY29uc3QKeyByZXR1cm4gdmFsOyB9CgppbmxpbmUgaW50IFFSYW5nZUNvbnRy
b2w6OnByZXZWYWx1ZSgpIGNvbnN0CnsgcmV0dXJuIHByZXZWYWw7IH0KCmlubGluZSBpbnQgUVJh
bmdlQ29udHJvbDo6bWluVmFsdWUoKSBjb25zdAp7IHJldHVybiBtaW5WYWw7IH0KCmlubGluZSBp
bnQgUVJhbmdlQ29udHJvbDo6bWF4VmFsdWUoKSBjb25zdAp7IHJldHVybiBtYXhWYWw7IH0KCmlu
bGluZSBpbnQgUVJhbmdlQ29udHJvbDo6bGluZVN0ZXAoKSBjb25zdAp7IHJldHVybiBsaW5lOyB9
CgppbmxpbmUgaW50IFFSYW5nZUNvbnRyb2w6OnBhZ2VTdGVwKCkgY29uc3QKeyByZXR1cm4gcGFn
ZTsgfQoKCgoKCgpjbGFzcyBRU3BpbldpZGdldFByaXZhdGU7CmNsYXNzICAgUVNwaW5XaWRnZXQg
OiBwdWJsaWMgUVdpZGdldAp7CiAgICBwdWJsaWM6CXZpcnR1YWwgUU1ldGFPYmplY3QgKm1ldGFP
YmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7CX0JdmlydHVhbCBjb25z
dCBjaGFyICpjbGFzc05hbWUoKSBjb25zdDsJdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBjb25zdCBj
aGFyKiApOyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFs
IGJvb2wgcXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X3Byb3BlcnR5
KCBpbnQsIGludCwgUVZhcmlhbnQqICk7IAlzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFP
YmplY3QoKTsJUU9iamVjdCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9IHN0
YXRpYyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgc3RhdGlj
IFFTdHJpbmcgdHJVdGY4KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgCXByaXZh
dGU6CXN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsgCnB1YmxpYzoKICAgIFFTcGluV2lkZ2V0
KCBRV2lkZ2V0KiBwYXJlbnQ9MCwgY29uc3QgY2hhciogbmFtZT0wICk7CiAgICB+UVNwaW5XaWRn
ZXQoKTsKCiAgICB2b2lkIAlzZXRFZGl0V2lkZ2V0KCBRV2lkZ2V0ICogd2lkZ2V0ICk7CiAgICBR
V2lkZ2V0ICogCWVkaXRXaWRnZXQoKTsKCiAgICBRUmVjdCB1cFJlY3QoKSBjb25zdDsKICAgIFFS
ZWN0IGRvd25SZWN0KCkgY29uc3Q7CgogICAgdm9pZCBzZXRVcEVuYWJsZWQoIGJvb2wgb24gKTsK
ICAgIHZvaWQgc2V0RG93bkVuYWJsZWQoIGJvb2wgb24gKTsKCiAgICBib29sIGlzVXBFbmFibGVk
KCkgY29uc3Q7CiAgICBib29sIGlzRG93bkVuYWJsZWQoKSBjb25zdDsKCiAgICBlbnVtIEJ1dHRv
blN5bWJvbHMgeyBVcERvd25BcnJvd3MsIFBsdXNNaW51cyB9OwogICAgdmlydHVhbCB2b2lkCXNl
dEJ1dHRvblN5bWJvbHMoIEJ1dHRvblN5bWJvbHMgYnMgKTsKICAgIEJ1dHRvblN5bWJvbHMJYnV0
dG9uU3ltYm9scygpIGNvbnN0OwoKICAgIHZvaWQgYXJyYW5nZSgpOwoKcHJvdGVjdGVkIDoKICAg
IHZvaWQgc3RlcFVwUHJlc3NlZCgpOwogICAgdm9pZCBzdGVwRG93blByZXNzZWQoKTsKCnB1Ymxp
YyAgOgogICAgdm9pZCBzdGVwVXAoKTsKICAgIHZvaWQgc3RlcERvd24oKTsKICAgIApwcm90ZWN0
ZWQ6CiAgICB2b2lkIG1vdXNlUHJlc3NFdmVudCggUU1vdXNlRXZlbnQgKmUgKTsKICAgIHZvaWQg
cmVzaXplRXZlbnQoIFFSZXNpemVFdmVudCogZXYgKTsKICAgIHZvaWQgbW91c2VSZWxlYXNlRXZl
bnQoIFFNb3VzZUV2ZW50ICplICk7CiAgICB2b2lkIG1vdXNlTW92ZUV2ZW50KCBRTW91c2VFdmVu
dCAqZSApOwoKICAgIHZvaWQgd2hlZWxFdmVudCggUVdoZWVsRXZlbnQgKiApOwoKICAgIHZvaWQg
c3R5bGVDaGFuZ2UoIFFTdHlsZSYgKTsKICAgIHZvaWQgcGFpbnRFdmVudCggUVBhaW50RXZlbnQg
KiApOwogICAgdm9pZCBlbmFibGVDaGFuZ2VkKCBib29sIG9sZCApOwogICAgdm9pZCB3aW5kb3dB
Y3RpdmF0aW9uQ2hhbmdlKCBib29sICk7Cgpwcml2YXRlICA6CiAgICB2b2lkIHRpbWVyRG9uZSgp
OwogICAgdm9pZCB0aW1lckRvbmVFeCgpOwoKcHJpdmF0ZToKICAgIFFTcGluV2lkZ2V0UHJpdmF0
ZSAqIGQ7CgogICAgdm9pZCB1cGRhdGVEaXNwbGF5KCk7Cgpwcml2YXRlOgkgCgogICAgUVNwaW5X
aWRnZXQoIGNvbnN0IFFTcGluV2lkZ2V0JiApOwogICAgUVNwaW5XaWRnZXQmIG9wZXJhdG9yPSgg
Y29uc3QgUVNwaW5XaWRnZXQmICk7Cgp9OwoKCgoKIyA0NSAiL3Vzci9sb2NhbC9xdC9pbmNsdWRl
L3FzY3JvbGxiYXIuaCIgMgoKCgoKCgpjbGFzcyAgIFFTY3JvbGxCYXIgOiBwdWJsaWMgUVdpZGdl
dCwgcHVibGljIFFSYW5nZUNvbnRyb2wKewogICAgcHVibGljOgl2aXJ0dWFsIFFNZXRhT2JqZWN0
ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOwl9CXZpcnR1
YWwgY29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7CXZpcnR1YWwgdm9pZCogcXRfY2FzdCgg
Y29uc3QgY2hhciogKTsgdmlydHVhbCBib29sIHF0X2ludm9rZSggaW50LCBRVU9iamVjdCogKTsg
dmlydHVhbCBib29sIHF0X2VtaXQoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9w
cm9wZXJ0eSggaW50LCBpbnQsIFFWYXJpYW50KiApOyAJc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0
aWNNZXRhT2JqZWN0KCk7CVFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhp
czsgfSBzdGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7
IHN0YXRpYyBRU3RyaW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7
IAlwcml2YXRlOglzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7IAogICAgIAogICAgIAogICAg
IAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAoKcHVibGljOgogICAgUVNjcm9sbEJhcigg
UVdpZGdldCAqcGFyZW50LCBjb25zdCBjaGFyKiBuYW1lPTAgKTsKICAgIFFTY3JvbGxCYXIoIE9y
aWVudGF0aW9uLCBRV2lkZ2V0ICpwYXJlbnQsIGNvbnN0IGNoYXIqIG5hbWU9MCApOwogICAgUVNj
cm9sbEJhciggaW50IG1pblZhbHVlLCBpbnQgbWF4VmFsdWUsIGludCBMaW5lU3RlcCwgaW50IFBh
Z2VTdGVwLAoJCWludCB2YWx1ZSwgT3JpZW50YXRpb24sCgkJUVdpZGdldCAqcGFyZW50LCBjb25z
dCBjaGFyKiBuYW1lPTAgKTsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0T3JpZW50YXRpb24oIE9yaWVu
dGF0aW9uICk7CiAgICBPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0OwogICAgdmlydHVh
bCB2b2lkIHNldFRyYWNraW5nKCBib29sIGVuYWJsZSApOwogICAgYm9vbAl0cmFja2luZygpIGNv
bnN0OwogICAgYm9vbAlkcmFnZ2luZ1NsaWRlcigpIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBz
ZXRQYWxldHRlKCBjb25zdCBRUGFsZXR0ZSAmICk7CiAgICBRU2l6ZQlzaXplSGludCgpIGNvbnN0
OwoKICAgIGludAkgbWluVmFsdWUoKSBjb25zdDsKICAgIGludAkgbWF4VmFsdWUoKSBjb25zdDsK
ICAgIHZvaWQgc2V0TWluVmFsdWUoIGludCApOwogICAgdm9pZCBzZXRNYXhWYWx1ZSggaW50ICk7
CiAgICBpbnQJIGxpbmVTdGVwKCkgY29uc3Q7CiAgICBpbnQJIHBhZ2VTdGVwKCkgY29uc3Q7CiAg
ICB2b2lkIHNldExpbmVTdGVwKCBpbnQgKTsKICAgIHZvaWQgc2V0UGFnZVN0ZXAoIGludCApOwog
ICAgaW50ICB2YWx1ZSgpIGNvbnN0OwoKICAgIGludAkJc2xpZGVyU3RhcnQoKSBjb25zdDsKICAg
IFFSZWN0CXNsaWRlclJlY3QoKSBjb25zdDsKCnB1YmxpYyAgOgogICAgdm9pZCBzZXRWYWx1ZSgg
aW50ICk7Cgpwcm90ZWN0ZWQgOgogICAgdm9pZAl2YWx1ZUNoYW5nZWQoIGludCB2YWx1ZSApOwog
ICAgdm9pZAlzbGlkZXJQcmVzc2VkKCk7CiAgICB2b2lkCXNsaWRlck1vdmVkKCBpbnQgdmFsdWUg
KTsKICAgIHZvaWQJc2xpZGVyUmVsZWFzZWQoKTsKICAgIHZvaWQJbmV4dExpbmUoKTsKICAgIHZv
aWQJcHJldkxpbmUoKTsKICAgIHZvaWQJbmV4dFBhZ2UoKTsKICAgIHZvaWQJcHJldlBhZ2UoKTsK
CnByb3RlY3RlZDoKCiAgICB2b2lkIAl3aGVlbEV2ZW50KCBRV2hlZWxFdmVudCAqICk7CgogICAg
dm9pZAlrZXlQcmVzc0V2ZW50KCBRS2V5RXZlbnQgKiApOwogICAgdm9pZAlyZXNpemVFdmVudCgg
UVJlc2l6ZUV2ZW50ICogKTsKICAgIHZvaWQJcGFpbnRFdmVudCggUVBhaW50RXZlbnQgKiApOwoK
ICAgIHZvaWQJbW91c2VQcmVzc0V2ZW50KCBRTW91c2VFdmVudCAqICk7CiAgICB2b2lkCW1vdXNl
UmVsZWFzZUV2ZW50KCBRTW91c2VFdmVudCAqICk7CiAgICB2b2lkCW1vdXNlTW92ZUV2ZW50KCBR
TW91c2VFdmVudCAqICk7CiAgICB2b2lkCWNvbnRleHRNZW51RXZlbnQoIFFDb250ZXh0TWVudUV2
ZW50ICogKTsKICAgIHZvaWQJaGlkZUV2ZW50KCBRSGlkZUV2ZW50KiApOwoKICAgIHZvaWQJdmFs
dWVDaGFuZ2UoKTsKICAgIHZvaWQJc3RlcENoYW5nZSgpOwogICAgdm9pZAlyYW5nZUNoYW5nZSgp
OwoKICAgIHZvaWQJc3R5bGVDaGFuZ2UoIFFTdHlsZSYgKTsKCnByaXZhdGUgIDoKICAgIHZvaWQg
ZG9BdXRvUmVwZWF0KCk7Cgpwcml2YXRlOgogICAgdm9pZCBpbml0KCk7CiAgICB2b2lkIHBvc2l0
aW9uU2xpZGVyRnJvbVZhbHVlKCk7CiAgICBpbnQgY2FsY3VsYXRlVmFsdWVGcm9tU2xpZGVyKCkg
Y29uc3Q7CgogICAgdm9pZCBzdGFydEF1dG9SZXBlYXQoKTsKICAgIHZvaWQgc3RvcEF1dG9SZXBl
YXQoKTsKCiAgICBpbnQgcmFuZ2VWYWx1ZVRvU2xpZGVyUG9zKCBpbnQgdmFsICkgY29uc3Q7CiAg
ICBpbnQgc2xpZGVyUG9zVG9SYW5nZVZhbHVlKCBpbnQgIHZhbCApIGNvbnN0OwoKICAgIHZvaWQg
YWN0aW9uKCBpbnQgY29udHJvbCApOwoKICAgIHZvaWQgZHJhd0NvbnRyb2xzKCB1aW50IGNvbnRy
b2xzLCB1aW50IGFjdGl2ZUNvbnRyb2wgKSBjb25zdDsKICAgIHZvaWQgZHJhd0NvbnRyb2xzKCB1
aW50IGNvbnRyb2xzLCB1aW50IGFjdGl2ZUNvbnRyb2wsCgkJCQlRUGFpbnRlciAqcCApIGNvbnN0
OwoKICAgIHVpbnQgcHJlc3NlZENvbnRyb2w7CiAgICBib29sIHRyYWNrOwogICAgYm9vbCBjbGlj
a2VkQXQ7CiAgICBPcmllbnRhdGlvbiBvcmllbnQ7CgogICAgaW50IHNsaWRlUHJldlZhbDsKICAg
IFFDT09SRCBzbGlkZXJQb3M7CiAgICBRQ09PUkQgY2xpY2tPZmZzZXQ7CgogICAgUVRpbWVyICog
cmVwZWF0ZXI7CiAgICB2b2lkICogZDsKCnByaXZhdGU6CSAKCiAgICBRU2Nyb2xsQmFyKCBjb25z
dCBRU2Nyb2xsQmFyICYgKTsKICAgIFFTY3JvbGxCYXIgJm9wZXJhdG9yPSggY29uc3QgUVNjcm9s
bEJhciAmICk7Cgp9OwoKCmlubGluZSB2b2lkIFFTY3JvbGxCYXI6OnNldFRyYWNraW5nKCBib29s
IHQgKQp7CiAgICB0cmFjayA9IHQ7Cn0KCmlubGluZSBib29sIFFTY3JvbGxCYXI6OnRyYWNraW5n
KCkgY29uc3QKewogICAgcmV0dXJuIHRyYWNrOwp9CgppbmxpbmUgUVNjcm9sbEJhcjo6T3JpZW50
YXRpb24gUVNjcm9sbEJhcjo6b3JpZW50YXRpb24oKSBjb25zdAp7CiAgICByZXR1cm4gb3JpZW50
Owp9CgppbmxpbmUgaW50IFFTY3JvbGxCYXI6OnNsaWRlclN0YXJ0KCkgY29uc3QKewogICAgcmV0
dXJuIHNsaWRlclBvczsKfQoKCgoKCiMgNDIgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xc2Nyb2xs
dmlldy5oIiAyCgoKCgoKY2xhc3MgUVNjcm9sbFZpZXdEYXRhOwoKY2xhc3MgICBRU2Nyb2xsVmll
dyA6IHB1YmxpYyBRRnJhbWUKewogICAgcHVibGljOgl2aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRh
T2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOwl9CXZpcnR1YWwgY29u
c3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7CXZpcnR1YWwgdm9pZCogcXRfY2FzdCggY29uc3Qg
Y2hhciogKTsgdmlydHVhbCBib29sIHF0X2ludm9rZSggaW50LCBRVU9iamVjdCogKTsgdmlydHVh
bCBib29sIHF0X2VtaXQoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9wZXJ0
eSggaW50LCBpbnQsIFFWYXJpYW50KiApOyAJc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRh
T2JqZWN0KCk7CVFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBz
dGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRp
YyBRU3RyaW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IAlwcml2
YXRlOglzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7IAogICAgIAogICAgIAogICAgIAogICAg
IAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAoKICAgICAKCgpwdWJsaWM6CiAg
ICBRU2Nyb2xsVmlldyhRV2lkZ2V0KiBwYXJlbnQ9MCwgY29uc3QgY2hhciogbmFtZT0wLCBXRmxh
Z3MgZj0wKTsKICAgIH5RU2Nyb2xsVmlldygpOwoKICAgIGVudW0gUmVzaXplUG9saWN5IHsgRGVm
YXVsdCwgTWFudWFsLCBBdXRvT25lLCBBdXRvT25lRml0IH07CiAgICB2aXJ0dWFsIHZvaWQgc2V0
UmVzaXplUG9saWN5KCBSZXNpemVQb2xpY3kgKTsKICAgIFJlc2l6ZVBvbGljeSByZXNpemVQb2xp
Y3koKSBjb25zdDsKCiAgICB2b2lkIHN0eWxlQ2hhbmdlKFFTdHlsZSYpOwogICAgdm9pZCByZW1v
dmVDaGlsZChRV2lkZ2V0KiBjaGlsZCk7CiAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoIFFXaWRn
ZXQqIGNoaWxkLCBpbnQgeD0wLCBpbnQgeT0wICk7CiAgICB2aXJ0dWFsIHZvaWQgbW92ZUNoaWxk
KCBRV2lkZ2V0KiBjaGlsZCwgaW50IHgsIGludCB5ICk7CiAgICBpbnQgY2hpbGRYKFFXaWRnZXQq
IGNoaWxkKTsKICAgIGludCBjaGlsZFkoUVdpZGdldCogY2hpbGQpOwogICAgYm9vbCBjaGlsZElz
VmlzaWJsZShRV2lkZ2V0KiBjaGlsZCkgeyByZXR1cm4gY2hpbGQtPmlzVmlzaWJsZSgpOyB9ICAK
ICAgIHZvaWQgc2hvd0NoaWxkKFFXaWRnZXQqIGNoaWxkLCBib29sIHllcz1UUlVFKSB7CglpZiAo
IHllcyApCgkgICAgY2hpbGQtPnNob3coKTsKCWVsc2UKCSAgICBjaGlsZC0+aGlkZSgpOwogICAg
fQoKICAgIGVudW0gU2Nyb2xsQmFyTW9kZSB7IEF1dG8sIEFsd2F5c09mZiwgQWx3YXlzT24gfTsK
CiAgICBTY3JvbGxCYXJNb2RlIHZTY3JvbGxCYXJNb2RlKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZv
aWQgIHNldFZTY3JvbGxCYXJNb2RlKCBTY3JvbGxCYXJNb2RlICk7CgogICAgU2Nyb2xsQmFyTW9k
ZSBoU2Nyb2xsQmFyTW9kZSgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkICBzZXRIU2Nyb2xsQmFy
TW9kZSggU2Nyb2xsQmFyTW9kZSApOwoKICAgIFFXaWRnZXQqICAgICBjb3JuZXJXaWRnZXQoKSBj
b25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRDb3JuZXJXaWRnZXQoUVdpZGdldCopOwoKICAgIFFT
Y3JvbGxCYXIqICBob3Jpem9udGFsU2Nyb2xsQmFyKCkgY29uc3Q7CiAgICBRU2Nyb2xsQmFyKiAg
dmVydGljYWxTY3JvbGxCYXIoKSBjb25zdDsKICAgIFFXaWRnZXQqCSB2aWV3cG9ydCgpIGNvbnN0
OwogICAgUVdpZGdldCoJIGNsaXBwZXIoKSBjb25zdDsKCiAgICBpbnQJCXZpc2libGVXaWR0aCgp
IGNvbnN0OwogICAgaW50CQl2aXNpYmxlSGVpZ2h0KCkgY29uc3Q7CgogICAgaW50CQljb250ZW50
c1dpZHRoKCkgY29uc3Q7CiAgICBpbnQJCWNvbnRlbnRzSGVpZ2h0KCkgY29uc3Q7CiAgICBpbnQJ
CWNvbnRlbnRzWCgpIGNvbnN0OwogICAgaW50CQljb250ZW50c1koKSBjb25zdDsKCiAgICB2b2lk
CXJlc2l6ZSggaW50IHcsIGludCBoICk7CiAgICB2b2lkCXJlc2l6ZSggY29uc3QgUVNpemUmICk7
CiAgICB2b2lkCXNob3coKTsKCiAgICB2b2lkCXVwZGF0ZUNvbnRlbnRzKCBpbnQgeCwgaW50IHks
IGludCB3LCBpbnQgaCApOwogICAgdm9pZAl1cGRhdGVDb250ZW50cyggY29uc3QgUVJlY3QmIHIg
KTsKICAgIHZvaWQgCXVwZGF0ZUNvbnRlbnRzKCk7CiAgICB2b2lkCXJlcGFpbnRDb250ZW50cygg
aW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsIGJvb2wgZXJhc2U9VFJVRSApOwogICAgdm9pZAly
ZXBhaW50Q29udGVudHMoIGNvbnN0IFFSZWN0JiByLCBib29sIGVyYXNlPVRSVUUgKTsKICAgIHZv
aWQgCXJlcGFpbnRDb250ZW50cyggYm9vbCBlcmFzZT1UUlVFICk7CiAgICB2b2lkCWNvbnRlbnRz
VG9WaWV3cG9ydCggaW50IHgsIGludCB5LCBpbnQmIHZ4LCBpbnQmIHZ5ICkgY29uc3Q7CiAgICB2
b2lkCXZpZXdwb3J0VG9Db250ZW50cyggaW50IHZ4LCBpbnQgdnksIGludCYgeCwgaW50JiB5ICkg
Y29uc3Q7CiAgICBRUG9pbnQJY29udGVudHNUb1ZpZXdwb3J0KCBjb25zdCBRUG9pbnQmICkgY29u
c3Q7CiAgICBRUG9pbnQJdmlld3BvcnRUb0NvbnRlbnRzKCBjb25zdCBRUG9pbnQmICkgY29uc3Q7
CiAgICB2b2lkCWVuYWJsZUNsaXBwZXIoIGJvb2wgeSApOwoKICAgIHZvaWQJc2V0U3RhdGljQmFj
a2dyb3VuZCggYm9vbCB5ICk7CiAgICBib29sCWhhc1N0YXRpY0JhY2tncm91bmQoKSBjb25zdDsK
CiAgICBRU2l6ZQl2aWV3cG9ydFNpemUoIGludCwgaW50ICkgY29uc3Q7CiAgICBRU2l6ZQlzaXpl
SGludCgpIGNvbnN0OwogICAgUVNpemUJbWluaW11bVNpemVIaW50KCkgY29uc3Q7CgogICAgdm9p
ZAlyZW1vdmVDaGlsZChRT2JqZWN0KiBjaGlsZCk7CgoKICAgIHZpcnR1YWwgdm9pZCBzZXREcmFn
QXV0b1Njcm9sbCggYm9vbCBiICk7CiAgICBib29sCSBkcmFnQXV0b1Njcm9sbCgpIGNvbnN0OwoK
CnByb3RlY3RlZCA6CiAgICB2b2lkCWNvbnRlbnRzTW92aW5nKGludCB4LCBpbnQgeSk7CgpwdWJs
aWMgIDoKICAgIHZpcnR1YWwgdm9pZCByZXNpemVDb250ZW50cyggaW50IHcsIGludCBoICk7CiAg
ICB2b2lkCXNjcm9sbEJ5KCBpbnQgZHgsIGludCBkeSApOwogICAgdmlydHVhbCB2b2lkIHNldENv
bnRlbnRzUG9zKCBpbnQgeCwgaW50IHkgKTsKICAgIHZvaWQJZW5zdXJlVmlzaWJsZShpbnQgeCwg
aW50IHkpOwogICAgdm9pZAllbnN1cmVWaXNpYmxlKGludCB4LCBpbnQgeSwgaW50IHhtYXJnaW4s
IGludCB5bWFyZ2luKTsKICAgIHZvaWQJY2VudGVyKGludCB4LCBpbnQgeSk7CiAgICB2b2lkCWNl
bnRlcihpbnQgeCwgaW50IHksIGZsb2F0IHhtYXJnaW4sIGZsb2F0IHltYXJnaW4pOwoKICAgIHZv
aWQJdXBkYXRlU2Nyb2xsQmFycygpOwogICAgdm9pZAlzZXRFbmFibGVkKCBib29sIGVuYWJsZSAp
OwoKcHJvdGVjdGVkOgogICAgdmlydHVhbCB2b2lkIGRyYXdDb250ZW50cyhRUGFpbnRlciosIGlu
dCBjeCwgaW50IGN5LCBpbnQgY3csIGludCBjaCk7CiAgICB2aXJ0dWFsIHZvaWQgZHJhd0NvbnRl
bnRzT2Zmc2V0KFFQYWludGVyKiwgaW50IG94LCBpbnQgb3ksCgkJICAgIGludCBjeCwgaW50IGN5
LCBpbnQgY3csIGludCBjaCk7CgoKICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c01vdXNlUHJlc3NF
dmVudCggUU1vdXNlRXZlbnQqICk7CiAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNNb3VzZVJlbGVh
c2VFdmVudCggUU1vdXNlRXZlbnQqICk7CiAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNNb3VzZURv
dWJsZUNsaWNrRXZlbnQoIFFNb3VzZUV2ZW50KiApOwogICAgdmlydHVhbCB2b2lkIGNvbnRlbnRz
TW91c2VNb3ZlRXZlbnQoIFFNb3VzZUV2ZW50KiApOwoKICAgIHZpcnR1YWwgdm9pZCBjb250ZW50
c0RyYWdFbnRlckV2ZW50KCBRRHJhZ0VudGVyRXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIGNv
bnRlbnRzRHJhZ01vdmVFdmVudCggUURyYWdNb3ZlRXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lk
IGNvbnRlbnRzRHJhZ0xlYXZlRXZlbnQoIFFEcmFnTGVhdmVFdmVudCAqICk7CiAgICB2aXJ0dWFs
IHZvaWQgY29udGVudHNEcm9wRXZlbnQoIFFEcm9wRXZlbnQgKiApOwoKCiAgICB2aXJ0dWFsIHZv
aWQgY29udGVudHNXaGVlbEV2ZW50KCBRV2hlZWxFdmVudCAqICk7CgogICAgdmlydHVhbCB2b2lk
IGNvbnRlbnRzQ29udGV4dE1lbnVFdmVudCggUUNvbnRleHRNZW51RXZlbnQgKiApOwoKCiAgICB2
aXJ0dWFsIHZvaWQgdmlld3BvcnRQYWludEV2ZW50KCBRUGFpbnRFdmVudCogKTsKICAgIHZpcnR1
YWwgdm9pZCB2aWV3cG9ydFJlc2l6ZUV2ZW50KCBRUmVzaXplRXZlbnQqICk7CiAgICB2aXJ0dWFs
IHZvaWQgdmlld3BvcnRNb3VzZVByZXNzRXZlbnQoIFFNb3VzZUV2ZW50KiApOwogICAgdmlydHVh
bCB2b2lkIHZpZXdwb3J0TW91c2VSZWxlYXNlRXZlbnQoIFFNb3VzZUV2ZW50KiApOwogICAgdmly
dHVhbCB2b2lkIHZpZXdwb3J0TW91c2VEb3VibGVDbGlja0V2ZW50KCBRTW91c2VFdmVudCogKTsK
ICAgIHZpcnR1YWwgdm9pZCB2aWV3cG9ydE1vdXNlTW92ZUV2ZW50KCBRTW91c2VFdmVudCogKTsK
CiAgICB2aXJ0dWFsIHZvaWQgdmlld3BvcnREcmFnRW50ZXJFdmVudCggUURyYWdFbnRlckV2ZW50
ICogKTsKICAgIHZpcnR1YWwgdm9pZCB2aWV3cG9ydERyYWdNb3ZlRXZlbnQoIFFEcmFnTW92ZUV2
ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCB2aWV3cG9ydERyYWdMZWF2ZUV2ZW50KCBRRHJhZ0xl
YXZlRXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIHZpZXdwb3J0RHJvcEV2ZW50KCBRRHJvcEV2
ZW50ICogKTsKCgogICAgdmlydHVhbCB2b2lkIHZpZXdwb3J0V2hlZWxFdmVudCggUVdoZWVsRXZl
bnQgKiApOwoKICAgIHZpcnR1YWwgdm9pZCB2aWV3cG9ydENvbnRleHRNZW51RXZlbnQoIFFDb250
ZXh0TWVudUV2ZW50ICogKTsKCiAgICB2b2lkCWZyYW1lQ2hhbmdlZCgpOwoKICAgIHZpcnR1YWwg
dm9pZCBzZXRNYXJnaW5zKGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20p
OwogICAgaW50IGxlZnRNYXJnaW4oKSBjb25zdDsKICAgIGludCB0b3BNYXJnaW4oKSBjb25zdDsK
ICAgIGludCByaWdodE1hcmdpbigpIGNvbnN0OwogICAgaW50IGJvdHRvbU1hcmdpbigpIGNvbnN0
OwoKICAgIGJvb2wgZm9jdXNOZXh0UHJldkNoaWxkKCBib29sIG5leHQgKTsKCiAgICB2aXJ0dWFs
IHZvaWQgc2V0SEJhckdlb21ldHJ5KFFTY3JvbGxCYXImIGhiYXIsIGludCB4LCBpbnQgeSwgaW50
IHcsIGludCBoKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRWQmFyR2VvbWV0cnkoUVNjcm9sbEJhciYg
dmJhciwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpOwoKICAgIHZvaWQJcmVzaXplRXZlbnQo
UVJlc2l6ZUV2ZW50Kik7CiAgICB2b2lkIAltb3VzZVByZXNzRXZlbnQoIFFNb3VzZUV2ZW50ICog
KTsKICAgIHZvaWQgCW1vdXNlUmVsZWFzZUV2ZW50KCBRTW91c2VFdmVudCAqICk7CiAgICB2b2lk
IAltb3VzZURvdWJsZUNsaWNrRXZlbnQoIFFNb3VzZUV2ZW50ICogKTsKICAgIHZvaWQgCW1vdXNl
TW92ZUV2ZW50KCBRTW91c2VFdmVudCAqICk7CgogICAgdm9pZCAJd2hlZWxFdmVudCggUVdoZWVs
RXZlbnQgKiApOwoKICAgIHZvaWQJY29udGV4dE1lbnVFdmVudCggUUNvbnRleHRNZW51RXZlbnQg
KiApOwogICAgYm9vbAlldmVudEZpbHRlciggUU9iamVjdCAqLCBRRXZlbnQgKmUgKTsKCgpwcml2
YXRlOgogICAgdm9pZCBkcmF3Q29udGVudHMoIFFQYWludGVyKiApOwogICAgdm9pZCBtb3ZlQ29u
dGVudHMoaW50IHgsIGludCB5KTsKCiAgICBRU2Nyb2xsVmlld0RhdGEqIGQ7Cgpwcml2YXRlICA6
CiAgICB2b2lkIGhzbGlkZShpbnQpOwogICAgdm9pZCB2c2xpZGUoaW50KTsKCiAgICB2b2lkIGRv
RHJhZ0F1dG9TY3JvbGwoKTsKICAgIHZvaWQgc3RhcnREcmFnQXV0b1Njcm9sbCgpOwogICAgdm9p
ZCBzdG9wRHJhZ0F1dG9TY3JvbGwoKTsKCgpwcml2YXRlOgkgCgogICAgUVNjcm9sbFZpZXcoIGNv
bnN0IFFTY3JvbGxWaWV3ICYgKTsKICAgIFFTY3JvbGxWaWV3ICZvcGVyYXRvcj0oIGNvbnN0IFFT
Y3JvbGxWaWV3ICYgKTsKCiAgICB2b2lkIGNoYW5nZUZyYW1lUmVjdChjb25zdCBRUmVjdCYpOwp9
OwoKCgoKIyA0MiAiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3FjYW52YXMuaCIgMgoKIyAxICIvdXNy
L2xvY2FsL3F0L2luY2x1ZGUvcXBpeG1hcC5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCmNsYXNzIFFHZng7CmNsYXNzIFFQaXhtYXBQcml2YXRlOwoK
CgoKCgoKY2xhc3MgICBRUGl4bWFwIDogcHVibGljIFFQYWludERldmljZSwgcHVibGljIFF0CnsK
cHVibGljOgogICAgZW51bSBDb2xvck1vZGUgeyBBdXRvLCBDb2xvciwgTW9ubyB9OwogICAgZW51
bSBPcHRpbWl6YXRpb24geyBEZWZhdWx0T3B0aW0sIE5vT3B0aW0sIE1lbW9yeU9wdGltPU5vT3B0
aW0sCgkJCU5vcm1hbE9wdGltLCBCZXN0T3B0aW0gfTsKCiAgICBRUGl4bWFwKCk7CiAgICBRUGl4
bWFwKCBjb25zdCBRSW1hZ2UmIGltYWdlICk7CiAgICBRUGl4bWFwKCBpbnQgdywgaW50IGgsICBp
bnQgZGVwdGggPSAtMSwgT3B0aW1pemF0aW9uID0gRGVmYXVsdE9wdGltICk7CiAgICBRUGl4bWFw
KCBjb25zdCBRU2l6ZSAmLCBpbnQgZGVwdGggPSAtMSwgT3B0aW1pemF0aW9uID0gRGVmYXVsdE9w
dGltICk7CgogICAgUVBpeG1hcCggY29uc3QgUVN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IGNoYXIg
KmZvcm1hdD0wLAoJICAgICBDb2xvck1vZGUgbW9kZT1BdXRvICk7CiAgICBRUGl4bWFwKCBjb25z
dCBRU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgY2hhciAqZm9ybWF0LAoJICAgICBpbnQgY29udmVy
c2lvbl9mbGFncyApOwogICAgUVBpeG1hcCggY29uc3QgY2hhciAqeHBtW10gKTsgIAogICAgUVBp
eG1hcCggY29uc3QgUUJ5dGVBcnJheSAmZGF0YSApOwoKICAgIFFQaXhtYXAoIGNvbnN0IFFQaXht
YXAgJiApOwogICB+UVBpeG1hcCgpOwoKICAgIFFQaXhtYXAgICAgJm9wZXJhdG9yPSggY29uc3Qg
UVBpeG1hcCAmICk7CiAgICBRUGl4bWFwICAgICZvcGVyYXRvcj0oIGNvbnN0IFFJbWFnZQkgJiAp
OwoKICAgIGJvb2wJaXNOdWxsKCkJY29uc3Q7CgogICAgaW50CQl3aWR0aCgpCQljb25zdCB7IHJl
dHVybiBkYXRhLT53OyB9CiAgICBpbnQJCWhlaWdodCgpCWNvbnN0IHsgcmV0dXJuIGRhdGEtPmg7
IH0KICAgIFFTaXplCXNpemUoKQkJY29uc3QgeyByZXR1cm4gUVNpemUoZGF0YS0+dyxkYXRhLT5o
KTsgfQogICAgUVJlY3QJcmVjdCgpCQljb25zdCB7IHJldHVybiBRUmVjdCgwLDAsZGF0YS0+dyxk
YXRhLT5oKTsgfQogICAgaW50CQlkZXB0aCgpCQljb25zdCB7IHJldHVybiBkYXRhLT5kOyB9CiAg
ICBzdGF0aWMgaW50CWRlZmF1bHREZXB0aCgpOwoKICAgIHZvaWQJZmlsbCggY29uc3QgUUNvbG9y
ICZmaWxsQ29sb3IgPSBRdDo6d2hpdGUgKTsKICAgIHZvaWQJZmlsbCggY29uc3QgUVdpZGdldCAq
LCBpbnQgeG9mcywgaW50IHlvZnMgKTsKICAgIHZvaWQJZmlsbCggY29uc3QgUVdpZGdldCAqLCBj
b25zdCBRUG9pbnQgJm9mcyApOwogICAgdm9pZAlyZXNpemUoIGludCB3aWR0aCwgaW50IGhlaWdo
dCApOwogICAgdm9pZAlyZXNpemUoIGNvbnN0IFFTaXplICYgKTsKCiAgICBjb25zdCBRQml0bWFw
ICptYXNrKCkgY29uc3Q7CiAgICB2b2lkCXNldE1hc2soIGNvbnN0IFFCaXRtYXAgJiApOwogICAg
Ym9vbAlzZWxmTWFzaygpIGNvbnN0OwoKICAgIFFCaXRtYXAJY3JlYXRlSGV1cmlzdGljTWFzaygg
Ym9vbCBjbGlwVGlnaHQgPSBUUlVFICkgY29uc3Q7CgogICAgc3RhdGljICBRUGl4bWFwIGdyYWJX
aW5kb3coIFdJZCwgaW50IHg9MCwgaW50IHk9MCwgaW50IHc9LTEsIGludCBoPS0xICk7CiAgICBz
dGF0aWMgIFFQaXhtYXAgZ3JhYldpZGdldCggUVdpZGdldCAqIHdpZGdldCwKCQkJCWludCB4PTAs
IGludCB5PTAsIGludCB3PS0xLCBpbnQgaD0tMSApOwoKCiAgICBRUGl4bWFwCSAgICB4Rm9ybSgg
Y29uc3QgUVdNYXRyaXggJiApIGNvbnN0OwogICAgc3RhdGljIFFXTWF0cml4IHRydWVNYXRyaXgo
IGNvbnN0IFFXTWF0cml4ICYsIGludCB3LCBpbnQgaCApOwoKCiAgICBRSW1hZ2UJY29udmVydFRv
SW1hZ2UoKSBjb25zdDsKICAgIGJvb2wJY29udmVydEZyb21JbWFnZSggY29uc3QgUUltYWdlICYs
IENvbG9yTW9kZSBtb2RlPUF1dG8gKTsKICAgIGJvb2wJY29udmVydEZyb21JbWFnZSggY29uc3Qg
UUltYWdlICYsIGludCBjb252ZXJzaW9uX2ZsYWdzICk7CgogICAgc3RhdGljIGNvbnN0IGNoYXIq
IGltYWdlRm9ybWF0KCBjb25zdCBRU3RyaW5nICZmaWxlTmFtZSApOwogICAgYm9vbAlsb2FkKCBj
b25zdCBRU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgY2hhciAqZm9ybWF0PTAsCgkJICAgICAgQ29s
b3JNb2RlIG1vZGU9QXV0byApOwogICAgYm9vbAlsb2FkKCBjb25zdCBRU3RyaW5nJiBmaWxlTmFt
ZSwgY29uc3QgY2hhciAqZm9ybWF0LAoJCSAgICAgIGludCBjb252ZXJzaW9uX2ZsYWdzICk7CiAg
ICBib29sCWxvYWRGcm9tRGF0YSggY29uc3QgdWNoYXIgKmJ1ZiwgdWludCBsZW4sCgkJCSAgICAg
IGNvbnN0IGNoYXIqIGZvcm1hdD0wLAoJCQkgICAgICBDb2xvck1vZGUgbW9kZT1BdXRvICk7CiAg
ICBib29sCWxvYWRGcm9tRGF0YSggY29uc3QgdWNoYXIgKmJ1ZiwgdWludCBsZW4sCgkJCSAgICAg
IGNvbnN0IGNoYXIqIGZvcm1hdCwKCQkJICAgICAgaW50IGNvbnZlcnNpb25fZmxhZ3MgKTsKICAg
IGJvb2wJbG9hZEZyb21EYXRhKCBjb25zdCBRQnl0ZUFycmF5ICZkYXRhLAoJCQkgICAgICBjb25z
dCBjaGFyKiBmb3JtYXQ9MCwKCQkJICAgICAgaW50IGNvbnZlcnNpb25fZmxhZ3M9MCApOwogICAg
Ym9vbAlzYXZlKCBjb25zdCBRU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgY2hhciogZm9ybWF0LCBp
bnQgcXVhbGl0eSA9IC0xICkgY29uc3Q7CgoKCgoKCiAgICBpbnQJCXNlcmlhbE51bWJlcigpCWNv
bnN0OwoKICAgIE9wdGltaXphdGlvbglvcHRpbWl6YXRpb24oKSBjb25zdDsKICAgIHZvaWQJCXNl
dE9wdGltaXphdGlvbiggT3B0aW1pemF0aW9uICk7CiAgICBzdGF0aWMgT3B0aW1pemF0aW9uIGRl
ZmF1bHRPcHRpbWl6YXRpb24oKTsKICAgIHN0YXRpYyB2b2lkCQlzZXREZWZhdWx0T3B0aW1pemF0
aW9uKCBPcHRpbWl6YXRpb24gKTsKCiAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CgogICAgYm9v
bAlpc1FCaXRtYXAoKSBjb25zdDsKCiMgMTU2ICIvdXNyL2xvY2FsL3F0L2luY2x1ZGUvcXBpeG1h
cC5oIgoKCgoKCgoKCgogICAgc3RhdGljIGludCB4MTFTZXREZWZhdWx0U2NyZWVuKCBpbnQgc2Ny
ZWVuICk7CiAgICB2b2lkIHgxMVNldFNjcmVlbiggaW50IHNjcmVlbiApOwoKCgoKCgpwcm90ZWN0
ZWQ6CiAgICBRUGl4bWFwKCBpbnQgdywgaW50IGgsIGNvbnN0IHVjaGFyICpkYXRhLCBib29sIGlz
WGJpdG1hcCApOwogICAgaW50IG1ldHJpYyggaW50ICkgY29uc3Q7CgoKCgoKCgoKICAgIHN0cnVj
dCBRUGl4bWFwRGF0YSA6IHB1YmxpYyBRU2hhcmVkIHsJIAoJUUNPT1JECXcsIGg7CglzaG9ydAlk
OwoJdWludAl1bmluaXQJIDogMTsKCXVpbnQJYml0bWFwCSA6IDE7Cgl1aW50CXNlbGZtYXNrIDog
MTsKCgoKCWludAlzZXJfbm87CglRQml0bWFwICptYXNrOwojIDIwMyAiL3Vzci9sb2NhbC9xdC9p
bmNsdWRlL3FwaXhtYXAuaCIKCgl2b2lkICAgKnhpbWFnZTsKCXZvaWQgICAqbWFza2djOwoJUVBp
eG1hcCAqYWxwaGFwbTsKIyAyMTYgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xcGl4bWFwLmgiCgoJ
T3B0aW1pemF0aW9uIG9wdGltOwogICAgfSAqZGF0YTsKcHJpdmF0ZToKICAgIFFQaXhtYXAoIGlu
dCB3LCBpbnQgaCwgaW50IGRlcHRoLCBib29sLCBPcHRpbWl6YXRpb24gKTsKICAgIHZvaWQJaW5p
dCggaW50LCBpbnQsIGludCwgYm9vbCwgT3B0aW1pemF0aW9uICk7CiAgICB2b2lkCWRlcmVmKCk7
CiAgICBRUGl4bWFwCWNvcHkoIGJvb2wgaWdub3JlTWFzayA9IEZBTFNFICkgY29uc3Q7CiAgICBz
dGF0aWMgT3B0aW1pemF0aW9uIGRlZk9wdGltOwogICAgZnJpZW5kICAgdm9pZCBiaXRCbHQoIFFQ
YWludERldmljZSAqLCBpbnQsIGludCwKCQkJCSBjb25zdCBRUGFpbnREZXZpY2UgKiwKCQkJCSBp
bnQsIGludCwgaW50LCBpbnQsIFJhc3Rlck9wLCBib29sICk7CiAgICBmcmllbmQgICB2b2lkIGJp
dEJsdCggUVBhaW50RGV2aWNlICosIGludCwgaW50LAoJCQkJIGNvbnN0IFFJbWFnZSogc3JjLAoJ
CQkJIGludCwgaW50LCBpbnQsIGludCwgaW50IGNvbnZlcnNpb25fZmxhZ3MgKTsKCgogICAgZnJp
ZW5kIHZvaWQgcXRfeDExX2NvcHlfYWxwaGFfcGl4bWFwKFFQaXhtYXAgKmRzdCwgY29uc3QgUVBp
eG1hcCAqc3JjKTsKICAgIGZyaWVuZCB2b2lkIHF0X3gxMV9ibGl0X2FscGhhX3BpeG1hcChRUGl4
bWFwICpkc3QsIGludCBkeCwgaW50IGR5LAoJCQkJCSBjb25zdCBRUGl4bWFwICpzcmMsIGludCBz
eCA9IDAsIGludCBzeSA9IDAsCgkJCQkJIGludCBzdyA9IC0xLCBpbnQgc2ggPSAtMSk7CgoKICAg
IGZyaWVuZCBjbGFzcyBRQml0bWFwOwogICAgZnJpZW5kIGNsYXNzIFFQYWludERldmljZTsKICAg
IGZyaWVuZCBjbGFzcyBRUGFpbnRlcjsKfTsKCgppbmxpbmUgYm9vbCBRUGl4bWFwOjppc051bGwo
KSBjb25zdAp7CiAgICByZXR1cm4gZGF0YS0+dyA9PSAwOwp9CgppbmxpbmUgdm9pZCBRUGl4bWFw
OjpmaWxsKCBjb25zdCBRV2lkZ2V0ICp3LCBjb25zdCBRUG9pbnQgJm9mcyApCnsKICAgIGZpbGwo
IHcsIG9mcy54KCksIG9mcy55KCkgKTsKfQoKaW5saW5lIHZvaWQgUVBpeG1hcDo6cmVzaXplKCBj
b25zdCBRU2l6ZSAmcyApCnsKICAgIHJlc2l6ZSggcy53aWR0aCgpLCBzLmhlaWdodCgpICk7Cn0K
CmlubGluZSBjb25zdCBRQml0bWFwICpRUGl4bWFwOjptYXNrKCkgY29uc3QKewogICAgcmV0dXJu
IGRhdGEtPm1hc2s7Cn0KCmlubGluZSBib29sIFFQaXhtYXA6OnNlbGZNYXNrKCkgY29uc3QKewog
ICAgcmV0dXJuIGRhdGEtPnNlbGZtYXNrOwp9CgoKCgoKCgoKaW5saW5lIGludCBRUGl4bWFwOjpz
ZXJpYWxOdW1iZXIoKSBjb25zdAp7CiAgICByZXR1cm4gZGF0YS0+c2VyX25vOwp9CgppbmxpbmUg
UVBpeG1hcDo6T3B0aW1pemF0aW9uIFFQaXhtYXA6Om9wdGltaXphdGlvbigpIGNvbnN0CnsKICAg
IHJldHVybiBkYXRhLT5vcHRpbTsKfQoKaW5saW5lIGJvb2wgUVBpeG1hcDo6aXNRQml0bWFwKCkg
Y29uc3QKewogICAgcmV0dXJuIGRhdGEtPmJpdG1hcDsKfQoKCgoKCgoKCgogCgoKCgogIFFEYXRh
U3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRUGl4bWFwICYgKTsKICBR
RGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUVBpeG1hcCAmICk7CgoKIAoK
CgoKCgoKCgpib29sIHF0X3hGb3JtX2hlbHBlciggY29uc3QgUVdNYXRyaXgmLCBpbnQsIGludCwg
aW50LCB1Y2hhciosIGludCwgaW50LCBpbnQsIHVjaGFyKiwgaW50LCBpbnQsIGludCApOwoKCgoj
IDQzICIvdXNyL2xvY2FsL3F0L2luY2x1ZGUvcWNhbnZhcy5oIiAyCgojIDEgIi91c3IvbG9jYWwv
cXQvaW5jbHVkZS9xcHRybGlzdC5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3FnbGlzdC5oIiAxCiAKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9xdC9pbmNs
dWRlL3FwdHJjb2xsZWN0aW9uLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgpjbGFzcyBRR1ZlY3RvcjsKY2xhc3MgUUdMaXN0OwpjbGFzcyBRR0RpY3Q7CgoK
Y2xhc3MgICBRUHRyQ29sbGVjdGlvbgkJCSAKewpwdWJsaWM6CiAgICBib29sIGF1dG9EZWxldGUo
KQljb25zdAkgICAgICAgeyByZXR1cm4gZGVsX2l0ZW07IH0KICAgIHZvaWQgc2V0QXV0b0RlbGV0
ZSggYm9vbCBlbmFibGUgKSAgeyBkZWxfaXRlbSA9IGVuYWJsZTsgfQoKICAgIHZpcnR1YWwgdWlu
dCAgY291bnQoKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgIGNsZWFyKCkgPSAwOwkJCSAK
CiAgICB0eXBlZGVmIHZvaWQgKkl0ZW07CQkJCSAKCnByb3RlY3RlZDoKICAgIFFQdHJDb2xsZWN0
aW9uKCkgeyBkZWxfaXRlbSA9IEZBTFNFOyB9CQkgCiAgICBRUHRyQ29sbGVjdGlvbihjb25zdCBR
UHRyQ29sbGVjdGlvbiAmKSB7IGRlbF9pdGVtID0gRkFMU0U7IH0KICAgIHZpcnR1YWwgflFQdHJD
b2xsZWN0aW9uKCkge30KCiAgICBib29sIGRlbF9pdGVtOwkJCQkgCgogICAgdmlydHVhbCBJdGVt
ICAgICBuZXdJdGVtKCBJdGVtICk7CQkgCiAgICB2aXJ0dWFsIHZvaWQgICAgIGRlbGV0ZUl0ZW0o
IEl0ZW0gKSA9IDA7CSAKfTsKCgoKCgoKCiMgNDIgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xZ2xp
c3QuaCIgMgoKCgpjbGFzcyAgIFFMTm9kZQp7CmZyaWVuZCBjbGFzcyBRR0xpc3Q7CmZyaWVuZCBj
bGFzcyBRR0xpc3RJdGVyYXRvcjsKcHVibGljOgogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gZ2V0
RGF0YSgpCXsgcmV0dXJuIGRhdGE7IH0KcHJpdmF0ZToKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVt
IGRhdGE7CiAgICBRTE5vZGUgKnByZXY7CiAgICBRTE5vZGUgKm5leHQ7CiAgICBRTE5vZGUoIFFQ
dHJDb2xsZWN0aW9uOjpJdGVtIGQgKSB7IGRhdGEgPSBkOyB9Cn07CgpjbGFzcyBRR0xpc3RJdGVy
YXRvckxpc3Q7ICAKCmNsYXNzICAgUUdMaXN0IDogcHVibGljIFFQdHJDb2xsZWN0aW9uCSAKewpm
cmllbmQgY2xhc3MgUUdMaXN0SXRlcmF0b3I7CmZyaWVuZCBjbGFzcyBRR0xpc3RJdGVyYXRvckxp
c3Q7CmZyaWVuZCBjbGFzcyBRR1ZlY3RvcjsJCQkJIApwdWJsaWM6CiAgICB1aW50ICBjb3VudCgp
IGNvbnN0OwkJCSAKCgogICAgUURhdGFTdHJlYW0gJnJlYWQoIFFEYXRhU3RyZWFtICYgKTsJCSAK
ICAgIFFEYXRhU3RyZWFtICZ3cml0ZSggUURhdGFTdHJlYW0gJiApIGNvbnN0OwkgCgpwcm90ZWN0
ZWQ6CiAgICBRR0xpc3QoKTsJCQkJCSAKICAgIFFHTGlzdCggY29uc3QgUUdMaXN0ICYgKTsJCQkg
CiAgICB2aXJ0dWFsIH5RR0xpc3QoKTsKCiAgICBRR0xpc3QgJm9wZXJhdG9yPSggY29uc3QgUUdM
aXN0ICYgKTsJIAogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRR0xpc3QmICkgY29uc3Q7Cgog
ICAgdm9pZCBpblNvcnQoIFFQdHJDb2xsZWN0aW9uOjpJdGVtICk7CQkgCiAgICB2b2lkIGFwcGVu
ZCggUVB0ckNvbGxlY3Rpb246Okl0ZW0gKTsJCSAKICAgIGJvb2wgaW5zZXJ0QXQoIHVpbnQgaW5k
ZXgsIFFQdHJDb2xsZWN0aW9uOjpJdGVtICk7ICAKICAgIHZvaWQgcmVsaW5rTm9kZSggUUxOb2Rl
ICogKTsJCSAKICAgIGJvb2wgcmVtb3ZlTm9kZSggUUxOb2RlICogKTsJCSAKICAgIGJvb2wgcmVt
b3ZlKCBRUHRyQ29sbGVjdGlvbjo6SXRlbSA9IDAgKTsJIAogICAgYm9vbCByZW1vdmVSZWYoIFFQ
dHJDb2xsZWN0aW9uOjpJdGVtID0gMCApOwkgCiAgICBib29sIHJlbW92ZUZpcnN0KCk7CQkJCSAK
ICAgIGJvb2wgcmVtb3ZlTGFzdCgpOwkJCQkgCiAgICBib29sIHJlbW92ZUF0KCB1aW50IGluZGV4
ICk7CQkgCiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSB0YWtlTm9kZSggUUxOb2RlICogKTsJIAog
ICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gdGFrZSgpOwkJCSAKICAgIFFQdHJDb2xsZWN0aW9uOjpJ
dGVtIHRha2VBdCggdWludCBpbmRleCApOwkgCiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSB0YWtl
Rmlyc3QoKTsJCSAKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIHRha2VMYXN0KCk7CQkgCgogICAg
dm9pZCBzb3J0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgdm9pZCBjbGVhcigpOwkJ
CSAKCiAgICBpbnQJIGZpbmRSZWYoIFFQdHJDb2xsZWN0aW9uOjpJdGVtLCBib29sID0gVFJVRSAp
OyAgCiAgICBpbnQJIGZpbmQoIFFQdHJDb2xsZWN0aW9uOjpJdGVtLCBib29sID0gVFJVRSApOyAg
CgogICAgdWludCBjb250YWluc1JlZiggUVB0ckNvbGxlY3Rpb246Okl0ZW0gKSBjb25zdDsgIAog
ICAgdWludCBjb250YWlucyggUVB0ckNvbGxlY3Rpb246Okl0ZW0gKQljb25zdDsJIAoKICAgIFFQ
dHJDb2xsZWN0aW9uOjpJdGVtIGF0KCB1aW50IGluZGV4ICk7CQkgCiAgICBpbnQJICBhdCgpIGNv
bnN0OwkJCQkgCiAgICBRTE5vZGUgKmN1cnJlbnROb2RlKCkgY29uc3Q7CQkgCgogICAgUVB0ckNv
bGxlY3Rpb246Okl0ZW0gZ2V0KCkgY29uc3Q7CQkgCgogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0g
Y2ZpcnN0KCkgY29uc3Q7CSAKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGNsYXN0KCkgIGNvbnN0
OwkgCiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSBmaXJzdCgpOwkJIAogICAgUVB0ckNvbGxlY3Rp
b246Okl0ZW0gbGFzdCgpOwkJIAogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gbmV4dCgpOwkJIAog
ICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gcHJldigpOwkJIAoKICAgIHZvaWQgIHRvVmVjdG9yKCBR
R1ZlY3RvciAqICkgY29uc3Q7CQkgCgogICAgdmlydHVhbCBpbnQgY29tcGFyZUl0ZW1zKCBRUHRy
Q29sbGVjdGlvbjo6SXRlbSwgUVB0ckNvbGxlY3Rpb246Okl0ZW0gKTsKCgogICAgdmlydHVhbCBR
RGF0YVN0cmVhbSAmcmVhZCggUURhdGFTdHJlYW0gJiwgUVB0ckNvbGxlY3Rpb246Okl0ZW0gJiAp
OwogICAgdmlydHVhbCBRRGF0YVN0cmVhbSAmd3JpdGUoIFFEYXRhU3RyZWFtICYsIFFQdHJDb2xs
ZWN0aW9uOjpJdGVtICkgY29uc3Q7Cgpwcml2YXRlOgogICAgdm9pZCAgcHJlcGVuZCggUVB0ckNv
bGxlY3Rpb246Okl0ZW0gKTsgIAoKICAgIHZvaWQgaGVhcFNvcnRQdXNoRG93biggUVB0ckNvbGxl
Y3Rpb246Okl0ZW0qIGhlYXAsIGludCBmaXJzdCwgaW50IGxhc3QgKTsKCiAgICBRTE5vZGUgKmZp
cnN0Tm9kZTsJCQkJIAogICAgUUxOb2RlICpsYXN0Tm9kZTsJCQkJIAogICAgUUxOb2RlICpjdXJO
b2RlOwkJCQkgCiAgICBpbnQgY3VySW5kZXg7CQkJCSAKICAgIHVpbnQgbnVtTm9kZXM7CQkJCSAK
ICAgIFFHTGlzdEl0ZXJhdG9yTGlzdCAqaXRlcmF0b3JzOyAJCQkgCgogICAgUUxOb2RlICpsb2Nh
dGUoIHVpbnQgKTsJCQkgCiAgICBRTE5vZGUgKnVubGluaygpOwkJCQkgCn07CgoKaW5saW5lIHVp
bnQgUUdMaXN0Ojpjb3VudCgpIGNvbnN0CnsKICAgIHJldHVybiBudW1Ob2RlczsKfQoKaW5saW5l
IGJvb2wgUUdMaXN0OjpyZW1vdmVGaXJzdCgpCnsKICAgIGZpcnN0KCk7CiAgICByZXR1cm4gcmVt
b3ZlKCk7Cn0KCmlubGluZSBib29sIFFHTGlzdDo6cmVtb3ZlTGFzdCgpCnsKICAgIGxhc3QoKTsK
ICAgIHJldHVybiByZW1vdmUoKTsKfQoKaW5saW5lIGludCBRR0xpc3Q6OmF0KCkgY29uc3QKewog
ICAgcmV0dXJuIGN1ckluZGV4Owp9CgppbmxpbmUgUVB0ckNvbGxlY3Rpb246Okl0ZW0gUUdMaXN0
OjphdCggdWludCBpbmRleCApCnsKICAgIFFMTm9kZSAqbiA9IGxvY2F0ZSggaW5kZXggKTsKICAg
IHJldHVybiBuID8gbi0+ZGF0YSA6IDA7Cn0KCmlubGluZSBRTE5vZGUgKlFHTGlzdDo6Y3VycmVu
dE5vZGUoKSBjb25zdAp7CiAgICByZXR1cm4gY3VyTm9kZTsKfQoKaW5saW5lIFFQdHJDb2xsZWN0
aW9uOjpJdGVtIFFHTGlzdDo6Z2V0KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyBjdXJO
b2RlLT5kYXRhIDogMDsKfQoKaW5saW5lIFFQdHJDb2xsZWN0aW9uOjpJdGVtIFFHTGlzdDo6Y2Zp
cnN0KCkgY29uc3QKewogICAgcmV0dXJuIGZpcnN0Tm9kZSA/IGZpcnN0Tm9kZS0+ZGF0YSA6IDA7
Cn0KCmlubGluZSBRUHRyQ29sbGVjdGlvbjo6SXRlbSBRR0xpc3Q6OmNsYXN0KCkgY29uc3QKewog
ICAgcmV0dXJuIGxhc3ROb2RlID8gbGFzdE5vZGUtPmRhdGEgOiAwOwp9CgoKIAoKCgoKICBRRGF0
YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUUdMaXN0ICYgKTsKICBRRGF0YVN0
cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUUdMaXN0ICYgKTsKCgogCgoK
CmNsYXNzICAgUUdMaXN0SXRlcmF0b3IJCQkgCnsKZnJpZW5kIGNsYXNzIFFHTGlzdDsKZnJpZW5k
IGNsYXNzIFFHTGlzdEl0ZXJhdG9yTGlzdDsKcHJvdGVjdGVkOgogICAgUUdMaXN0SXRlcmF0b3Io
IGNvbnN0IFFHTGlzdCAmICk7CiAgICBRR0xpc3RJdGVyYXRvciggY29uc3QgUUdMaXN0SXRlcmF0
b3IgJiApOwogICAgUUdMaXN0SXRlcmF0b3IgJm9wZXJhdG9yPSggY29uc3QgUUdMaXN0SXRlcmF0
b3IgJiApOwogICB+UUdMaXN0SXRlcmF0b3IoKTsKCiAgICBib29sICBhdEZpcnN0KCkgY29uc3Q7
CQkJIAogICAgYm9vbCAgYXRMYXN0KCkgIGNvbnN0OwkJCSAKICAgIFFQdHJDb2xsZWN0aW9uOjpJ
dGVtCSAgdG9GaXJzdCgpOwkJCQkgCiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbQkgIHRvTGFzdCgp
OwkJCQkgCgogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0JICBnZXQoKSBjb25zdDsJCQkJIAogICAg
UVB0ckNvbGxlY3Rpb246Okl0ZW0JICBvcGVyYXRvcigpKCk7CQkJCSAKICAgIFFQdHJDb2xsZWN0
aW9uOjpJdGVtCSAgb3BlcmF0b3IrKygpOwkJCQkgCiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbQkg
IG9wZXJhdG9yKz0odWludCk7CQkJIAogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0JICBvcGVyYXRv
ci0tKCk7CQkJCSAKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtCSAgb3BlcmF0b3ItPSh1aW50KTsJ
CQkgCgpwcm90ZWN0ZWQ6CiAgICBRR0xpc3QgKmxpc3Q7CQkJCSAKCnByaXZhdGU6CiAgICBRTE5v
ZGUgICpjdXJOb2RlOwkJCQkgCn07CgoKaW5saW5lIGJvb2wgUUdMaXN0SXRlcmF0b3I6OmF0Rmly
c3QoKSBjb25zdAp7CiAgICByZXR1cm4gY3VyTm9kZSA9PSBsaXN0LT5maXJzdE5vZGU7Cn0KCmlu
bGluZSBib29sIFFHTGlzdEl0ZXJhdG9yOjphdExhc3QoKSBjb25zdAp7CiAgICByZXR1cm4gY3Vy
Tm9kZSA9PSBsaXN0LT5sYXN0Tm9kZTsKfQoKaW5saW5lIFFQdHJDb2xsZWN0aW9uOjpJdGVtIFFH
TGlzdEl0ZXJhdG9yOjpnZXQoKSBjb25zdAp7CiAgICByZXR1cm4gY3VyTm9kZSA/IGN1ck5vZGUt
PmRhdGEgOiAwOwp9CgoKCiMgNDIgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xcHRybGlzdC5oIiAy
CgoKCgp0ZW1wbGF0ZTxjbGFzcyB0eXBlPiAKY2xhc3MgUVB0ckxpc3QKCgoKCTogcHVibGljIFFH
TGlzdAoKewpwdWJsaWM6CiAgICBRUHRyTGlzdCgpCQkJCXt9CiAgICBRUHRyTGlzdCggY29uc3Qg
UVB0ckxpc3Q8dHlwZT4gJmwgKSA6IFFHTGlzdChsKSB7fQogICAgflFQdHJMaXN0KCkJCQkJeyBj
bGVhcigpOyB9CiAgICBRUHRyTGlzdDx0eXBlPiAmb3BlcmF0b3I9KGNvbnN0IFFQdHJMaXN0PHR5
cGU+ICZsKQoJCQl7IHJldHVybiAoUVB0ckxpc3Q8dHlwZT4mKVFHTGlzdDo6b3BlcmF0b3I9KGwp
OyB9CiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFQdHJMaXN0PHR5cGU+ICZsaXN0ICkgY29u
c3QKICAgIHsgcmV0dXJuIFFHTGlzdDo6b3BlcmF0b3I9PSggbGlzdCApOyB9CiAgICB1aW50ICBj
b3VudCgpICAgY29uc3QJCXsgcmV0dXJuIFFHTGlzdDo6Y291bnQoKTsgfQogICAgYm9vbCAgaXNF
bXB0eSgpIGNvbnN0CQl7IHJldHVybiBRR0xpc3Q6OmNvdW50KCkgPT0gMDsgfQogICAgYm9vbCAg
aW5zZXJ0KCB1aW50IGksIGNvbnN0IHR5cGUgKmQpeyByZXR1cm4gUUdMaXN0OjppbnNlcnRBdChp
LChRUHRyQ29sbGVjdGlvbjo6SXRlbSlkKTsgfQogICAgdm9pZCAgaW5Tb3J0KCBjb25zdCB0eXBl
ICpkICkJeyBRR0xpc3Q6OmluU29ydCgoUVB0ckNvbGxlY3Rpb246Okl0ZW0pZCk7IH0KICAgIHZv
aWQgIHByZXBlbmQoIGNvbnN0IHR5cGUgKmQgKQl7IFFHTGlzdDo6aW5zZXJ0QXQoMCwoUVB0ckNv
bGxlY3Rpb246Okl0ZW0pZCk7IH0KICAgIHZvaWQgIGFwcGVuZCggY29uc3QgdHlwZSAqZCApCXsg
UUdMaXN0OjphcHBlbmQoKFFQdHJDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAgICBib29sICByZW1v
dmUoIHVpbnQgaSApCQl7IHJldHVybiBRR0xpc3Q6OnJlbW92ZUF0KGkpOyB9CiAgICBib29sICBy
ZW1vdmUoKQkJCXsgcmV0dXJuIFFHTGlzdDo6cmVtb3ZlKChRUHRyQ29sbGVjdGlvbjo6SXRlbSkw
KTsgfQogICAgYm9vbCAgcmVtb3ZlKCBjb25zdCB0eXBlICpkICkJeyByZXR1cm4gUUdMaXN0Ojpy
ZW1vdmUoKFFQdHJDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAgICBib29sICByZW1vdmVSZWYoIGNv
bnN0IHR5cGUgKmQgKQl7IHJldHVybiBRR0xpc3Q6OnJlbW92ZVJlZigoUVB0ckNvbGxlY3Rpb246
Okl0ZW0pZCk7IH0KICAgIHZvaWQgIHJlbW92ZU5vZGUoIFFMTm9kZSAqbiApCXsgUUdMaXN0Ojpy
ZW1vdmVOb2RlKG4pOyB9CiAgICBib29sICByZW1vdmVGaXJzdCgpCQkJeyByZXR1cm4gUUdMaXN0
OjpyZW1vdmVGaXJzdCgpOyB9CiAgICBib29sICByZW1vdmVMYXN0KCkJCQl7IHJldHVybiBRR0xp
c3Q6OnJlbW92ZUxhc3QoKTsgfQogICAgdHlwZSAqdGFrZSggdWludCBpICkJCXsgcmV0dXJuICh0
eXBlICopUUdMaXN0Ojp0YWtlQXQoaSk7IH0KICAgIHR5cGUgKnRha2UoKQkJCXsgcmV0dXJuICh0
eXBlICopUUdMaXN0Ojp0YWtlKCk7IH0KICAgIHR5cGUgKnRha2VOb2RlKCBRTE5vZGUgKm4gKQkJ
eyByZXR1cm4gKHR5cGUgKilRR0xpc3Q6OnRha2VOb2RlKG4pOyB9CiAgICB2b2lkICBjbGVhcigp
CQkJeyBRR0xpc3Q6OmNsZWFyKCk7IH0KICAgIHZvaWQgIHNvcnQoKQkJCXsgUUdMaXN0Ojpzb3J0
KCk7IH0KICAgIGludAkgIGZpbmQoIGNvbnN0IHR5cGUgKmQgKQkJeyByZXR1cm4gUUdMaXN0Ojpm
aW5kKChRUHRyQ29sbGVjdGlvbjo6SXRlbSlkKTsgfQogICAgaW50CSAgZmluZE5leHQoIGNvbnN0
IHR5cGUgKmQgKQl7IHJldHVybiBRR0xpc3Q6OmZpbmQoKFFQdHJDb2xsZWN0aW9uOjpJdGVtKWQs
RkFMU0UpOyB9CiAgICBpbnQJICBmaW5kUmVmKCBjb25zdCB0eXBlICpkICkJeyByZXR1cm4gUUdM
aXN0OjpmaW5kUmVmKChRUHRyQ29sbGVjdGlvbjo6SXRlbSlkKTsgfQogICAgaW50CSAgZmluZE5l
eHRSZWYoIGNvbnN0IHR5cGUgKmQgKXsgcmV0dXJuIFFHTGlzdDo6ZmluZFJlZigoUVB0ckNvbGxl
Y3Rpb246Okl0ZW0pZCxGQUxTRSk7fQogICAgdWludCAgY29udGFpbnMoIGNvbnN0IHR5cGUgKmQg
KSBjb25zdCB7IHJldHVybiBRR0xpc3Q6OmNvbnRhaW5zKChRUHRyQ29sbGVjdGlvbjo6SXRlbSlk
KTsgfQogICAgdWludCAgY29udGFpbnNSZWYoIGNvbnN0IHR5cGUgKmQgKSBjb25zdAoJCQkJCXsg
cmV0dXJuIFFHTGlzdDo6Y29udGFpbnNSZWYoKFFQdHJDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAg
ICB0eXBlICphdCggdWludCBpICkJCQl7IHJldHVybiAodHlwZSAqKVFHTGlzdDo6YXQoaSk7IH0K
ICAgIGludAkgIGF0KCkgY29uc3QJCQl7IHJldHVybiBRR0xpc3Q6OmF0KCk7IH0KICAgIHR5cGUg
KmN1cnJlbnQoKSAgY29uc3QJCXsgcmV0dXJuICh0eXBlICopUUdMaXN0OjpnZXQoKTsgfQogICAg
UUxOb2RlICpjdXJyZW50Tm9kZSgpICBjb25zdAl7IHJldHVybiBRR0xpc3Q6OmN1cnJlbnROb2Rl
KCk7IH0KICAgIHR5cGUgKmdldEZpcnN0KCkgY29uc3QJCXsgcmV0dXJuICh0eXBlICopUUdMaXN0
OjpjZmlyc3QoKTsgfQogICAgdHlwZSAqZ2V0TGFzdCgpICBjb25zdAkJeyByZXR1cm4gKHR5cGUg
KilRR0xpc3Q6OmNsYXN0KCk7IH0KICAgIHR5cGUgKmZpcnN0KCkJCQl7IHJldHVybiAodHlwZSAq
KVFHTGlzdDo6Zmlyc3QoKTsgfQogICAgdHlwZSAqbGFzdCgpCQkJeyByZXR1cm4gKHR5cGUgKilR
R0xpc3Q6Omxhc3QoKTsgfQogICAgdHlwZSAqbmV4dCgpCQkJeyByZXR1cm4gKHR5cGUgKilRR0xp
c3Q6Om5leHQoKTsgfQogICAgdHlwZSAqcHJldigpCQkJeyByZXR1cm4gKHR5cGUgKilRR0xpc3Q6
OnByZXYoKTsgfQogICAgdm9pZCAgdG9WZWN0b3IoIFFHVmVjdG9yICp2ZWMgKWNvbnN0eyBRR0xp
c3Q6OnRvVmVjdG9yKHZlYyk7IH0KCgoKCgoKCgpwcml2YXRlOgogICAgdm9pZCAgZGVsZXRlSXRl
bSggSXRlbSBkICk7Cn07CgoKdGVtcGxhdGU8PiBpbmxpbmUgdm9pZCBRUHRyTGlzdDx2b2lkPjo6
ZGVsZXRlSXRlbSggUVB0ckNvbGxlY3Rpb246Okl0ZW0gKQp7Cn0KCgp0ZW1wbGF0ZTxjbGFzcyB0
eXBlPiBpbmxpbmUgdm9pZCBRUHRyTGlzdDx0eXBlPjo6ZGVsZXRlSXRlbSggUVB0ckNvbGxlY3Rp
b246Okl0ZW0gZCApCnsKICAgIGlmICggZGVsX2l0ZW0gKSBkZWxldGUgKHR5cGUgKilkOwp9Cgp0
ZW1wbGF0ZTxjbGFzcyB0eXBlPiAKY2xhc3MgUVB0ckxpc3RJdGVyYXRvcgo6IHB1YmxpYyBRR0xp
c3RJdGVyYXRvcgp7CnB1YmxpYzoKICAgIFFQdHJMaXN0SXRlcmF0b3IoY29uc3QgUVB0ckxpc3Q8
dHlwZT4gJmwpIDpRR0xpc3RJdGVyYXRvcigoUUdMaXN0ICYpbCkge30KICAgflFQdHJMaXN0SXRl
cmF0b3IoKQkgICAgICB7fQogICAgdWludCAgY291bnQoKSAgIGNvbnN0ICAgICB7IHJldHVybiBs
aXN0LT5jb3VudCgpOyB9CiAgICBib29sICBpc0VtcHR5KCkgY29uc3QgICAgIHsgcmV0dXJuIGxp
c3QtPmNvdW50KCkgPT0gMDsgfQogICAgYm9vbCAgYXRGaXJzdCgpIGNvbnN0ICAgICB7IHJldHVy
biBRR0xpc3RJdGVyYXRvcjo6YXRGaXJzdCgpOyB9CiAgICBib29sICBhdExhc3QoKSAgY29uc3Qg
ICAgIHsgcmV0dXJuIFFHTGlzdEl0ZXJhdG9yOjphdExhc3QoKTsgfQogICAgdHlwZSAqdG9GaXJz
dCgpCSAgICAgIHsgcmV0dXJuICh0eXBlICopUUdMaXN0SXRlcmF0b3I6OnRvRmlyc3QoKTsgfQog
ICAgdHlwZSAqdG9MYXN0KCkJICAgICAgeyByZXR1cm4gKHR5cGUgKilRR0xpc3RJdGVyYXRvcjo6
dG9MYXN0KCk7IH0KICAgIG9wZXJhdG9yIHR5cGUgKigpIGNvbnN0ICAgeyByZXR1cm4gKHR5cGUg
KilRR0xpc3RJdGVyYXRvcjo6Z2V0KCk7IH0KICAgIHR5cGUgKm9wZXJhdG9yKigpICAgICAgICAg
eyByZXR1cm4gKHR5cGUgKilRR0xpc3RJdGVyYXRvcjo6Z2V0KCk7IH0KCiAgICAgCiAgICAgCiAg
ICAgCiAgICAgCiAgICAgCgogICAgdHlwZSAqY3VycmVudCgpICAgY29uc3QgICB7IHJldHVybiAo
dHlwZSAqKVFHTGlzdEl0ZXJhdG9yOjpnZXQoKTsgfQogICAgdHlwZSAqb3BlcmF0b3IoKSgpCSAg
ICAgIHsgcmV0dXJuICh0eXBlICopUUdMaXN0SXRlcmF0b3I6Om9wZXJhdG9yKCkoKTt9CiAgICB0
eXBlICpvcGVyYXRvcisrKCkJICAgICAgeyByZXR1cm4gKHR5cGUgKilRR0xpc3RJdGVyYXRvcjo6
b3BlcmF0b3IrKygpOyB9CiAgICB0eXBlICpvcGVyYXRvcis9KHVpbnQgaikgIHsgcmV0dXJuICh0
eXBlICopUUdMaXN0SXRlcmF0b3I6Om9wZXJhdG9yKz0oaik7fQogICAgdHlwZSAqb3BlcmF0b3It
LSgpCSAgICAgIHsgcmV0dXJuICh0eXBlICopUUdMaXN0SXRlcmF0b3I6Om9wZXJhdG9yLS0oKTsg
fQogICAgdHlwZSAqb3BlcmF0b3ItPSh1aW50IGopICB7IHJldHVybiAodHlwZSAqKVFHTGlzdEl0
ZXJhdG9yOjpvcGVyYXRvci09KGopO30KICAgIFFQdHJMaXN0SXRlcmF0b3I8dHlwZT4mIG9wZXJh
dG9yPShjb25zdCBRUHRyTGlzdEl0ZXJhdG9yPHR5cGU+Jml0KQoJCQkgICAgICB7IFFHTGlzdEl0
ZXJhdG9yOjpvcGVyYXRvcj0oaXQpOyByZXR1cm4gKnRoaXM7IH0KfTsKCgoKCgoKCiMgNDQgIi91
c3IvbG9jYWwvcXQvaW5jbHVkZS9xY2FudmFzLmgiIDIKCiMgMSAiL3Vzci9sb2NhbC9xdC9pbmNs
dWRlL3FwdHJkaWN0LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKIyAxICIvdXNyL2xvY2FsL3F0L2luY2x1ZGUvcWdkaWN0LmgiIDEKIAoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmNsYXNzIFFHRGljdEl0ZXJhdG9yOwpjbGFz
cyBRR0RJdExpc3Q7CgoKY2xhc3MgUUJhc2VCdWNrZXQJCQkJIAp7CnB1YmxpYzoKICAgIFFQdHJD
b2xsZWN0aW9uOjpJdGVtCSBnZXREYXRhKCkJCQl7IHJldHVybiBkYXRhOyB9CiAgICBRUHRyQ29s
bGVjdGlvbjo6SXRlbQkgc2V0RGF0YSggUVB0ckNvbGxlY3Rpb246Okl0ZW0gZCApIHsgcmV0dXJu
IGRhdGEgPSBkOyB9CiAgICBRQmFzZUJ1Y2tldAkJKmdldE5leHQoKQkJCXsgcmV0dXJuIG5leHQ7
IH0KICAgIHZvaWQJCSBzZXROZXh0KCBRQmFzZUJ1Y2tldCAqbikJeyBuZXh0ID0gbjsgfQpwcm90
ZWN0ZWQ6CiAgICBRQmFzZUJ1Y2tldCggUVB0ckNvbGxlY3Rpb246Okl0ZW0gZCwgUUJhc2VCdWNr
ZXQgKm4gKSA6IGRhdGEoZCksIG5leHQobikge30KICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtCSBk
YXRhOwogICAgUUJhc2VCdWNrZXQJCSpuZXh0Owp9OwoKY2xhc3MgUVN0cmluZ0J1Y2tldCA6IHB1
YmxpYyBRQmFzZUJ1Y2tldAp7CnB1YmxpYzoKICAgIFFTdHJpbmdCdWNrZXQoIGNvbnN0IFFTdHJp
bmcgJmssIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGQsIFFCYXNlQnVja2V0ICpuICkKCTogUUJhc2VC
dWNrZXQoZCxuKSwga2V5KGspCQl7fQogICAgY29uc3QgUVN0cmluZyAgJmdldEtleSgpIGNvbnN0
CQl7IHJldHVybiBrZXk7IH0KcHJpdmF0ZToKICAgIFFTdHJpbmcJICAgIGtleTsKfTsKCmNsYXNz
IFFBc2NpaUJ1Y2tldCA6IHB1YmxpYyBRQmFzZUJ1Y2tldAp7CnB1YmxpYzoKICAgIFFBc2NpaUJ1
Y2tldCggY29uc3QgY2hhciAqaywgUVB0ckNvbGxlY3Rpb246Okl0ZW0gZCwgUUJhc2VCdWNrZXQg
Km4gKQoJOiBRQmFzZUJ1Y2tldChkLG4pLCBrZXkoaykge30KICAgIGNvbnN0IGNoYXIgKmdldEtl
eSgpIGNvbnN0IHsgcmV0dXJuIGtleTsgfQpwcml2YXRlOgogICAgY29uc3QgY2hhciAqa2V5Owp9
OwoKY2xhc3MgUUludEJ1Y2tldCA6IHB1YmxpYyBRQmFzZUJ1Y2tldAp7CnB1YmxpYzoKICAgIFFJ
bnRCdWNrZXQoIGxvbmcgaywgUVB0ckNvbGxlY3Rpb246Okl0ZW0gZCwgUUJhc2VCdWNrZXQgKm4g
KQoJOiBRQmFzZUJ1Y2tldChkLG4pLCBrZXkoaykge30KICAgIGxvbmcgIGdldEtleSgpIGNvbnN0
IHsgcmV0dXJuIGtleTsgfQpwcml2YXRlOgogICAgbG9uZyAga2V5Owp9OwoKY2xhc3MgUVB0ckJ1
Y2tldCA6IHB1YmxpYyBRQmFzZUJ1Y2tldAp7CnB1YmxpYzoKICAgIFFQdHJCdWNrZXQoIHZvaWQg
KmssIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGQsIFFCYXNlQnVja2V0ICpuICkKCTogUUJhc2VCdWNr
ZXQoZCxuKSwga2V5KGspIHt9CiAgICB2b2lkICpnZXRLZXkoKSBjb25zdCB7IHJldHVybiBrZXk7
IH0KcHJpdmF0ZToKICAgIHZvaWQgKmtleTsKfTsKCgpjbGFzcyAgIFFHRGljdCA6IHB1YmxpYyBR
UHRyQ29sbGVjdGlvbgkgCnsKcHVibGljOgogICAgdWludAljb3VudCgpIGNvbnN0CXsgcmV0dXJu
IG51bUl0ZW1zOyB9CiAgICB1aW50CXNpemUoKQljb25zdAl7IHJldHVybiB2bGVuOyB9CiAgICBR
UHRyQ29sbGVjdGlvbjo6SXRlbSBsb29rX3N0cmluZyggY29uc3QgUVN0cmluZyYga2V5LCBRUHRy
Q29sbGVjdGlvbjo6SXRlbSwKCQkJCSAgIGludCApOwogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0g
bG9va19hc2NpaSggY29uc3QgY2hhciAqa2V5LCBRUHRyQ29sbGVjdGlvbjo6SXRlbSwgaW50ICk7
CiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSBsb29rX2ludCggbG9uZyBrZXksIFFQdHJDb2xsZWN0
aW9uOjpJdGVtLCBpbnQgKTsKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGxvb2tfcHRyKCB2b2lk
ICprZXksIFFQdHJDb2xsZWN0aW9uOjpJdGVtLCBpbnQgKTsKCiAgICBRRGF0YVN0cmVhbSAmcmVh
ZCggUURhdGFTdHJlYW0gJiApOwogICAgUURhdGFTdHJlYW0gJndyaXRlKCBRRGF0YVN0cmVhbSAm
ICkgY29uc3Q7Cgpwcm90ZWN0ZWQ6CiAgICBlbnVtIEtleVR5cGUgeyBTdHJpbmdLZXksIEFzY2lp
S2V5LCBJbnRLZXksIFB0cktleSB9OwoKICAgIFFHRGljdCggdWludCBsZW4sIEtleVR5cGUga3Qs
IGJvb2wgY3MsIGJvb2wgY2sgKTsKICAgIFFHRGljdCggY29uc3QgUUdEaWN0ICYgKTsKICAgflFH
RGljdCgpOwoKICAgIFFHRGljdCAgICAgJm9wZXJhdG9yPSggY29uc3QgUUdEaWN0ICYgKTsKCiAg
ICBib29sCXJlbW92ZV9zdHJpbmcoIGNvbnN0IFFTdHJpbmcgJmtleSwgUVB0ckNvbGxlY3Rpb246
Okl0ZW0gaXRlbT0wICk7CiAgICBib29sCXJlbW92ZV9hc2NpaSggY29uc3QgY2hhciAqa2V5LCBR
UHRyQ29sbGVjdGlvbjo6SXRlbSBpdGVtPTAgKTsKICAgIGJvb2wJcmVtb3ZlX2ludCggbG9uZyBr
ZXksIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGl0ZW09MCApOwogICAgYm9vbAlyZW1vdmVfcHRyKCB2
b2lkICprZXksIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGl0ZW09MCApOwogICAgUVB0ckNvbGxlY3Rp
b246Okl0ZW0gdGFrZV9zdHJpbmcoIGNvbnN0IFFTdHJpbmcgJmtleSApOwogICAgUVB0ckNvbGxl
Y3Rpb246Okl0ZW0gdGFrZV9hc2NpaSggY29uc3QgY2hhciAqa2V5ICk7CiAgICBRUHRyQ29sbGVj
dGlvbjo6SXRlbSB0YWtlX2ludCggbG9uZyBrZXkgKTsKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVt
IHRha2VfcHRyKCB2b2lkICprZXkgKTsKCiAgICB2b2lkCWNsZWFyKCk7CiAgICB2b2lkCXJlc2l6
ZSggdWludCApOwoKICAgIGludAkJaGFzaEtleVN0cmluZyggY29uc3QgUVN0cmluZyAmICk7CiAg
ICBpbnQJCWhhc2hLZXlBc2NpaSggY29uc3QgY2hhciAqICk7CgogICAgdm9pZAlzdGF0aXN0aWNz
KCkgY29uc3Q7CgoKICAgIHZpcnR1YWwgUURhdGFTdHJlYW0gJnJlYWQoIFFEYXRhU3RyZWFtICYs
IFFQdHJDb2xsZWN0aW9uOjpJdGVtICYgKTsKICAgIHZpcnR1YWwgUURhdGFTdHJlYW0gJndyaXRl
KCBRRGF0YVN0cmVhbSAmLCBRUHRyQ29sbGVjdGlvbjo6SXRlbSApIGNvbnN0OwoKcHJpdmF0ZToK
ICAgIFFCYXNlQnVja2V0ICoqdmVjOwogICAgdWludAl2bGVuOwogICAgdWludAludW1JdGVtczsK
ICAgIHVpbnQJa2V5dHlwZQk6IDI7CiAgICB1aW50CWNhc2VzCTogMTsKICAgIHVpbnQJY29weWsJ
OiAxOwogICAgUUdESXRMaXN0ICAqaXRlcmF0b3JzOwogICAgdm9pZAkgICB1bmxpbmtfY29tbW9u
KCBpbnQsIFFCYXNlQnVja2V0ICosIFFCYXNlQnVja2V0ICogKTsKICAgIFFTdHJpbmdCdWNrZXQg
KnVubGlua19zdHJpbmcoIGNvbnN0IFFTdHJpbmcgJiwKCQkJCSAgUVB0ckNvbGxlY3Rpb246Okl0
ZW0gaXRlbSA9IDAgKTsKICAgIFFBc2NpaUJ1Y2tldCAgKnVubGlua19hc2NpaSggY29uc3QgY2hh
ciAqLCBRUHRyQ29sbGVjdGlvbjo6SXRlbSBpdGVtID0gMCApOwogICAgUUludEJ1Y2tldCAgICAq
dW5saW5rX2ludCggbG9uZywgUVB0ckNvbGxlY3Rpb246Okl0ZW0gaXRlbSA9IDAgKTsKICAgIFFQ
dHJCdWNrZXQgICAgKnVubGlua19wdHIoIHZvaWQgKiwgUVB0ckNvbGxlY3Rpb246Okl0ZW0gaXRl
bSA9IDAgKTsKICAgIHZvaWQJaW5pdCggdWludCwgS2V5VHlwZSwgYm9vbCwgYm9vbCApOwogICAg
ZnJpZW5kIGNsYXNzIFFHRGljdEl0ZXJhdG9yOwp9OwoKCmNsYXNzICAgUUdEaWN0SXRlcmF0b3IJ
CQkgCnsKZnJpZW5kIGNsYXNzIFFHRGljdDsKcHVibGljOgogICAgUUdEaWN0SXRlcmF0b3IoIGNv
bnN0IFFHRGljdCAmICk7CiAgICBRR0RpY3RJdGVyYXRvciggY29uc3QgUUdEaWN0SXRlcmF0b3Ig
JiApOwogICAgUUdEaWN0SXRlcmF0b3IgJm9wZXJhdG9yPSggY29uc3QgUUdEaWN0SXRlcmF0b3Ig
JiApOwogICB+UUdEaWN0SXRlcmF0b3IoKTsKCiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSB0b0Zp
cnN0KCk7CgogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gZ2V0KCkJICAgICBjb25zdDsKICAgIFFT
dHJpbmcJICAgICAgZ2V0S2V5U3RyaW5nKCkgY29uc3Q7CiAgICBjb25zdCBjaGFyCSAgICAgKmdl
dEtleUFzY2lpKCkgIGNvbnN0OwogICAgbG9uZwkgICAgICBnZXRLZXlJbnQoKSAgICBjb25zdDsK
ICAgIHZvaWQJICAgICAqZ2V0S2V5UHRyKCkgICAgY29uc3Q7CgogICAgUVB0ckNvbGxlY3Rpb246
Okl0ZW0gb3BlcmF0b3IoKSgpOwogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gb3BlcmF0b3IrKygp
OwogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gb3BlcmF0b3IrPSh1aW50KTsKCnByb3RlY3RlZDoK
ICAgIFFHRGljdAkgICAgICpkaWN0OwoKcHJpdmF0ZToKICAgIFFCYXNlQnVja2V0ICAgICAgKmN1
ck5vZGU7CiAgICB1aW50CSAgICAgIGN1ckluZGV4Owp9OwoKaW5saW5lIFFQdHJDb2xsZWN0aW9u
OjpJdGVtIFFHRGljdEl0ZXJhdG9yOjpnZXQoKSBjb25zdAp7CiAgICByZXR1cm4gY3VyTm9kZSA/
IGN1ck5vZGUtPmdldERhdGEoKSA6IDA7Cn0KCmlubGluZSBRU3RyaW5nIFFHRGljdEl0ZXJhdG9y
OjpnZXRLZXlTdHJpbmcoKSBjb25zdAp7CiAgICByZXR1cm4gY3VyTm9kZSA/ICgoUVN0cmluZ0J1
Y2tldCopY3VyTm9kZSktPmdldEtleSgpIDogUVN0cmluZzo6bnVsbDsKfQoKaW5saW5lIGNvbnN0
IGNoYXIgKlFHRGljdEl0ZXJhdG9yOjpnZXRLZXlBc2NpaSgpIGNvbnN0CnsKICAgIHJldHVybiBj
dXJOb2RlID8gKChRQXNjaWlCdWNrZXQqKWN1ck5vZGUpLT5nZXRLZXkoKSA6IDA7Cn0KCmlubGlu
ZSBsb25nIFFHRGljdEl0ZXJhdG9yOjpnZXRLZXlJbnQoKSBjb25zdAp7CiAgICByZXR1cm4gY3Vy
Tm9kZSA/ICgoUUludEJ1Y2tldCopY3VyTm9kZSktPmdldEtleSgpIDogMDsKfQoKaW5saW5lIHZv
aWQgKlFHRGljdEl0ZXJhdG9yOjpnZXRLZXlQdHIoKSBjb25zdAp7CiAgICByZXR1cm4gY3VyTm9k
ZSA/ICgoUVB0ckJ1Y2tldCopY3VyTm9kZSktPmdldEtleSgpIDogMDsKfQoKCgojIDQyICIvdXNy
L2xvY2FsL3F0L2luY2x1ZGUvcXB0cmRpY3QuaCIgMgoKCgp0ZW1wbGF0ZTxjbGFzcyB0eXBlPgpj
bGFzcyBRUHRyRGljdAoKCgoJOiBwdWJsaWMgUUdEaWN0Cgp7CnB1YmxpYzoKICAgIFFQdHJEaWN0
KGludCBzaXplPTE3KSA6IFFHRGljdChzaXplLFB0cktleSwwLDApIHt9CiAgICBRUHRyRGljdCgg
Y29uc3QgUVB0ckRpY3Q8dHlwZT4gJmQgKSA6IFFHRGljdChkKSB7fQogICB+UVB0ckRpY3QoKQkJ
CQl7IGNsZWFyKCk7IH0KICAgIFFQdHJEaWN0PHR5cGU+ICZvcGVyYXRvcj0oY29uc3QgUVB0ckRp
Y3Q8dHlwZT4gJmQpCgkJCXsgcmV0dXJuIChRUHRyRGljdDx0eXBlPiYpUUdEaWN0OjpvcGVyYXRv
cj0oZCk7IH0KICAgIHVpbnQgIGNvdW50KCkgICBjb25zdAkJeyByZXR1cm4gUUdEaWN0Ojpjb3Vu
dCgpOyB9CiAgICB1aW50ICBzaXplKCkgICAgY29uc3QJCXsgcmV0dXJuIFFHRGljdDo6c2l6ZSgp
OyB9CiAgICBib29sICBpc0VtcHR5KCkgY29uc3QJCXsgcmV0dXJuIFFHRGljdDo6Y291bnQoKSA9
PSAwOyB9CiAgICB2b2lkICBpbnNlcnQoIHZvaWQgKmssIGNvbnN0IHR5cGUgKmQgKQoJCQkJCXsg
UUdEaWN0Ojpsb29rX3B0cihrLChJdGVtKWQsMSk7IH0KICAgIHZvaWQgIHJlcGxhY2UoIHZvaWQg
KmssIGNvbnN0IHR5cGUgKmQgKQoJCQkJCXsgUUdEaWN0Ojpsb29rX3B0cihrLChJdGVtKWQsMik7
IH0KICAgIGJvb2wgIHJlbW92ZSggdm9pZCAqayApCQl7IHJldHVybiBRR0RpY3Q6OnJlbW92ZV9w
dHIoayk7IH0KICAgIHR5cGUgKnRha2UoIHZvaWQgKmsgKQkJeyByZXR1cm4gKHR5cGUqKVFHRGlj
dDo6dGFrZV9wdHIoayk7IH0KICAgIHR5cGUgKmZpbmQoIHZvaWQgKmsgKSBjb25zdAoJCXsgcmV0
dXJuICh0eXBlICopKChRR0RpY3QqKXRoaXMpLT5RR0RpY3Q6Omxvb2tfcHRyKGssMCwwKTsgfQog
ICAgdHlwZSAqb3BlcmF0b3JbXSggdm9pZCAqayApIGNvbnN0CgkJeyByZXR1cm4gKHR5cGUgKiko
KFFHRGljdCopdGhpcyktPlFHRGljdDo6bG9va19wdHIoaywwLDApOyB9CiAgICB2b2lkICBjbGVh
cigpCQkJeyBRR0RpY3Q6OmNsZWFyKCk7IH0KICAgIHZvaWQgIHJlc2l6ZSggdWludCBuICkJCXsg
UUdEaWN0OjpyZXNpemUobik7IH0KICAgIHZvaWQgIHN0YXRpc3RpY3MoKSBjb25zdAkJeyBRR0Rp
Y3Q6OnN0YXRpc3RpY3MoKTsgfQoKCgoKCgoKcHJpdmF0ZToKICAgIHZvaWQgIGRlbGV0ZUl0ZW0o
IEl0ZW0gZCApOwp9OwoKCnRlbXBsYXRlPD4gaW5saW5lIHZvaWQgUVB0ckRpY3Q8dm9pZD46OmRl
bGV0ZUl0ZW0oIFFQdHJDb2xsZWN0aW9uOjpJdGVtICkKewp9CgoKdGVtcGxhdGU8Y2xhc3MgdHlw
ZT4KaW5saW5lIHZvaWQgUVB0ckRpY3Q8dHlwZT46OmRlbGV0ZUl0ZW0oIFFQdHJDb2xsZWN0aW9u
OjpJdGVtIGQgKQp7CiAgICBpZiAoIGRlbF9pdGVtICkgZGVsZXRlICh0eXBlICopZDsKfQoKdGVt
cGxhdGU8Y2xhc3MgdHlwZT4KY2xhc3MgUVB0ckRpY3RJdGVyYXRvcgo6IHB1YmxpYyBRR0RpY3RJ
dGVyYXRvcgp7CnB1YmxpYzoKICAgIFFQdHJEaWN0SXRlcmF0b3IoY29uc3QgUVB0ckRpY3Q8dHlw
ZT4gJmQpIDpRR0RpY3RJdGVyYXRvcigoUUdEaWN0ICYpZCkge30KICAgflFQdHJEaWN0SXRlcmF0
b3IoKQkgICAgICB7fQogICAgdWludCAgY291bnQoKSAgIGNvbnN0ICAgICB7IHJldHVybiBkaWN0
LT5jb3VudCgpOyB9CiAgICBib29sICBpc0VtcHR5KCkgY29uc3QgICAgIHsgcmV0dXJuIGRpY3Qt
PmNvdW50KCkgPT0gMDsgfQogICAgdHlwZSAqdG9GaXJzdCgpCSAgICAgIHsgcmV0dXJuICh0eXBl
ICopUUdEaWN0SXRlcmF0b3I6OnRvRmlyc3QoKTsgfQogICAgb3BlcmF0b3IgdHlwZSAqKCkgIGNv
bnN0ICB7IHJldHVybiAodHlwZSAqKVFHRGljdEl0ZXJhdG9yOjpnZXQoKTsgfQogICAgdHlwZSAq
Y3VycmVudCgpICAgIGNvbnN0ICB7IHJldHVybiAodHlwZSAqKVFHRGljdEl0ZXJhdG9yOjpnZXQo
KTsgfQogICAgdm9pZCAqY3VycmVudEtleSgpIGNvbnN0ICB7IHJldHVybiBRR0RpY3RJdGVyYXRv
cjo6Z2V0S2V5UHRyKCk7IH0KICAgIHR5cGUgKm9wZXJhdG9yKCkoKQkgICAgICB7IHJldHVybiAo
dHlwZSAqKVFHRGljdEl0ZXJhdG9yOjpvcGVyYXRvcigpKCk7IH0KICAgIHR5cGUgKm9wZXJhdG9y
KysoKQkgICAgICB7IHJldHVybiAodHlwZSAqKVFHRGljdEl0ZXJhdG9yOjpvcGVyYXRvcisrKCk7
IH0KICAgIHR5cGUgKm9wZXJhdG9yKz0odWludCBqKSAgeyByZXR1cm4gKHR5cGUgKilRR0RpY3RJ
dGVyYXRvcjo6b3BlcmF0b3IrPShqKTt9Cn07CgoKIyA0NSAiL3Vzci9sb2NhbC9xdC9pbmNsdWRl
L3FjYW52YXMuaCIgMgoKCiMgMSAiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3FwZW4uaCIgMQogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmNsYXNzICAgUVBlbjog
cHVibGljIFF0CnsKZnJpZW5kIGNsYXNzIFFQYWludGVyOwpwdWJsaWM6CiAgICBRUGVuKCk7CiAg
ICBRUGVuKCBQZW5TdHlsZSApOwogICAgUVBlbiggY29uc3QgUUNvbG9yICZjb2xvciwgdWludCB3
aWR0aD0wLCBQZW5TdHlsZSBzdHlsZT1Tb2xpZExpbmUgKTsKICAgIFFQZW4oIGNvbnN0IFFDb2xv
ciAmY2wsIHVpbnQgdywgUGVuU3R5bGUgcywgUGVuQ2FwU3R5bGUgYywgUGVuSm9pblN0eWxlIGop
OwogICAgUVBlbiggY29uc3QgUVBlbiAmICk7CiAgIH5RUGVuKCk7CiAgICBRUGVuICZvcGVyYXRv
cj0oIGNvbnN0IFFQZW4gJiApOwoKICAgIFBlblN0eWxlCXN0eWxlKCkgY29uc3QJCXsgcmV0dXJu
IGRhdGEtPnN0eWxlOyB9CiAgICB2b2lkCXNldFN0eWxlKCBQZW5TdHlsZSApOwogICAgdWludAl3
aWR0aCgpIGNvbnN0CQl7IHJldHVybiBkYXRhLT53aWR0aDsgfQogICAgdm9pZAlzZXRXaWR0aCgg
dWludCApOwogICAgY29uc3QgUUNvbG9yICZjb2xvcigpIGNvbnN0CQl7IHJldHVybiBkYXRhLT5j
b2xvcjsgfQogICAgdm9pZAlzZXRDb2xvciggY29uc3QgUUNvbG9yICYgKTsKICAgIFBlbkNhcFN0
eWxlCWNhcFN0eWxlKCkgY29uc3Q7CiAgICB2b2lkCXNldENhcFN0eWxlKCBQZW5DYXBTdHlsZSAp
OwogICAgUGVuSm9pblN0eWxlIGpvaW5TdHlsZSgpIGNvbnN0OwogICAgdm9pZAlzZXRKb2luU3R5
bGUoIFBlbkpvaW5TdHlsZSApOwoKICAgIGJvb2wJb3BlcmF0b3I9PSggY29uc3QgUVBlbiAmcCAp
IGNvbnN0OwogICAgYm9vbAlvcGVyYXRvciE9KCBjb25zdCBRUGVuICZwICkgY29uc3QKCQkJCQl7
IHJldHVybiAhKG9wZXJhdG9yPT0ocCkpOyB9Cgpwcml2YXRlOgogICAgUVBlbgljb3B5KCkJY29u
c3Q7CiAgICB2b2lkCWRldGFjaCgpOwogICAgdm9pZAlpbml0KCBjb25zdCBRQ29sb3IgJiwgdWlu
dCwgdWludCApOwogICAgc3RydWN0IFFQZW5EYXRhIDogcHVibGljIFFTaGFyZWQgewkJIAoJUGVu
U3R5bGUgIHN0eWxlOwoJdWludAkgIHdpZHRoOwoJUUNvbG9yCSAgY29sb3I7CglRX1VJTlQxNiAg
bGluZXN0OwogICAgfSAqZGF0YTsKfTsKCgogCgoKCiAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwo
IFFEYXRhU3RyZWFtICYsIGNvbnN0IFFQZW4gJiApOwogIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+
KCBRRGF0YVN0cmVhbSAmLCBRUGVuICYgKTsKCgoKIyA0NyAiL3Vzci9sb2NhbC9xdC9pbmNsdWRl
L3FjYW52YXMuaCIgMgoKCiMgMSAiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3Fwb2ludGFycmF5Lmgi
IDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKY2xh
c3MgICBRUG9pbnRBcnJheSA6IHB1YmxpYyBRTWVtQXJyYXk8UVBvaW50Pgp7CnB1YmxpYzoKICAg
IFFQb2ludEFycmF5KCkge30KICAgIH5RUG9pbnRBcnJheSgpIHt9CiAgICBRUG9pbnRBcnJheSgg
aW50IHNpemUgKSA6IFFNZW1BcnJheTxRUG9pbnQ+KCBzaXplICkge30KICAgIFFQb2ludEFycmF5
KCBjb25zdCBRUG9pbnRBcnJheSAmYSApIDogUU1lbUFycmF5PFFQb2ludD4oIGEgKSB7fQogICAg
UVBvaW50QXJyYXkoIGNvbnN0IFFSZWN0ICZyLCBib29sIGNsb3NlZD1GQUxTRSApOwogICAgUVBv
aW50QXJyYXkoIGludCBuUG9pbnRzLCBjb25zdCBRQ09PUkQgKnBvaW50cyApOwoKICAgIFFQb2lu
dEFycmF5CSAmb3BlcmF0b3I9KCBjb25zdCBRUG9pbnRBcnJheSAmYSApCgl7IHJldHVybiAoUVBv
aW50QXJyYXkmKWFzc2lnbiggYSApOyB9CgogICAgUVBvaW50QXJyYXkgY29weSgpIGNvbnN0Cgl7
IFFQb2ludEFycmF5IHRtcDsgcmV0dXJuICooKFFQb2ludEFycmF5KikmdG1wLmR1cGxpY2F0ZSgq
dGhpcykpOyB9CgogICAgdm9pZCAgICB0cmFuc2xhdGUoIGludCBkeCwgaW50IGR5ICk7CiAgICBR
UmVjdCAgIGJvdW5kaW5nUmVjdCgpIGNvbnN0OwoKICAgIHZvaWQgICAgcG9pbnQoIHVpbnQgaSwg
aW50ICp4LCBpbnQgKnkgKSBjb25zdDsKICAgIFFQb2ludCAgcG9pbnQoIHVpbnQgaSApIGNvbnN0
OwogICAgdm9pZCAgICBzZXRQb2ludCggdWludCBpLCBpbnQgeCwgaW50IHkgKTsKICAgIHZvaWQg
ICAgc2V0UG9pbnQoIHVpbnQgaSwgY29uc3QgUVBvaW50ICZwICk7CiAgICBib29sICAgIHNldFBv
aW50cyggaW50IG5Qb2ludHMsIGNvbnN0IFFDT09SRCAqcG9pbnRzICk7CiAgICBib29sICAgIHNl
dFBvaW50cyggaW50IG5Qb2ludHMsIGludCBmaXJzdHgsIGludCBmaXJzdHksIC4uLiApOwogICAg
Ym9vbCAgICBwdXRQb2ludHMoIGludCBpbmRleCwgaW50IG5Qb2ludHMsIGNvbnN0IFFDT09SRCAq
cG9pbnRzICk7CiAgICBib29sICAgIHB1dFBvaW50cyggaW50IGluZGV4LCBpbnQgblBvaW50cywg
aW50IGZpcnN0eCwgaW50IGZpcnN0eSwgLi4uICk7CiAgICBib29sICAgIHB1dFBvaW50cyggaW50
IGluZGV4LCBpbnQgblBvaW50cywKCQkgICAgICAgY29uc3QgUVBvaW50QXJyYXkgJiBmcm9tLCBp
bnQgZnJvbUluZGV4PTAgKTsKCiAgICB2b2lkICAgIG1ha2VBcmMoIGludCB4LCBpbnQgeSwgaW50
IHcsIGludCBoLCBpbnQgYTEsIGludCBhMiApOwogICAgdm9pZCAgICBtYWtlRWxsaXBzZSggaW50
IHgsIGludCB5LCBpbnQgdywgaW50IGggKTsKICAgIHZvaWQgICAgbWFrZUFyYyggaW50IHgsIGlu
dCB5LCBpbnQgdywgaW50IGgsIGludCBhMSwgaW50IGEyLAoJCSAgICAgY29uc3QgUVdNYXRyaXgm
ICk7CiAgICBRUG9pbnRBcnJheSBjdWJpY0JlemllcigpIGNvbnN0OwoKICAgIHZvaWQqICBzaG9y
dFBvaW50cyggaW50IGluZGV4ID0gMCwgaW50IG5Qb2ludHMgPSAtMSApIGNvbnN0OwogICAgc3Rh
dGljIHZvaWQgY2xlYW5CdWZmZXJzKCk7Cgpwcm90ZWN0ZWQ6CiAgICBzdGF0aWMgdWludCBzcGxl
bjsKICAgIHN0YXRpYyB2b2lkKiBzcDsKfTsKCgogCgoKCiAgUURhdGFTdHJlYW0gJm9wZXJhdG9y
PDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFQb2ludEFycmF5ICYgKTsKICBRRGF0YVN0cmVhbSAm
b3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUVBvaW50QXJyYXkgJiApOwoKCiAKCgoKaW5saW5l
IHZvaWQgUVBvaW50QXJyYXk6OnNldFBvaW50KCB1aW50IGksIGNvbnN0IFFQb2ludCAmcCApCnsK
ICAgIHNldFBvaW50KCBpLCBwLngoKSwgcC55KCkgKTsKfQoKCgojIDQ5ICIvdXNyL2xvY2FsL3F0
L2luY2x1ZGUvcWNhbnZhcy5oIiAyCgoKCgoKCgoKCgoKCmNsYXNzIFFDYW52YXNTcHJpdGU7CmNs
YXNzIFFDYW52YXNQb2x5Z29uYWxJdGVtOwpjbGFzcyBRQ2FudmFzUmVjdGFuZ2xlOwpjbGFzcyBR
Q2FudmFzUG9seWdvbjsKY2xhc3MgUUNhbnZhc0VsbGlwc2U7CmNsYXNzIFFDYW52YXNUZXh0Owpj
bGFzcyBRQ2FudmFzTGluZTsKY2xhc3MgUUNhbnZhc0NodW5rOwpjbGFzcyBRQ2FudmFzOwpjbGFz
cyBRQ2FudmFzSXRlbTsKY2xhc3MgUUNhbnZhc1ZpZXc7CmNsYXNzIFFDYW52YXNQaXhtYXA7CgoK
CgoKCgoKCgoKY2xhc3MgICAgUUNhbnZhc0l0ZW1MaXN0IDogcHVibGljIFFWYWx1ZUxpc3Q8UUNh
bnZhc0l0ZW0qPiB7CnB1YmxpYzoKICAgIHZvaWQgc29ydCgpOwogICAgdm9pZCBkcmF3VW5pcXVl
KCBRUGFpbnRlciYgcGFpbnRlciApOwp9OwoKCmNsYXNzIFFDYW52YXNJdGVtRXh0cmE7CgpjbGFz
cyAgICBRQ2FudmFzSXRlbSA6IHB1YmxpYyBRdAp7CnB1YmxpYzoKICAgIFFDYW52YXNJdGVtKFFD
YW52YXMqIGNhbnZhcyk7CiAgICB2aXJ0dWFsIH5RQ2FudmFzSXRlbSgpOwoKICAgIGRvdWJsZSB4
KCkgY29uc3QKCXsgcmV0dXJuIG15eDsgfQogICAgZG91YmxlIHkoKSBjb25zdAoJeyByZXR1cm4g
bXl5OyB9CiAgICBkb3VibGUgeigpIGNvbnN0Cgl7IHJldHVybiBteXo7IH0gIAoKICAgIHZpcnR1
YWwgdm9pZCBtb3ZlQnkoZG91YmxlIGR4LCBkb3VibGUgZHkpOwogICAgdm9pZCBtb3ZlKGRvdWJs
ZSB4LCBkb3VibGUgeSk7CiAgICB2b2lkIHNldFgoZG91YmxlIGEpIHsgbW92ZShhLHkoKSk7IH0K
ICAgIHZvaWQgc2V0WShkb3VibGUgYSkgeyBtb3ZlKHgoKSxhKTsgfQogICAgdm9pZCBzZXRaKGRv
dWJsZSBhKSB7IG15ej1hOyBjaGFuZ2VDaHVua3MoKTsgfQoKICAgIGJvb2wgYW5pbWF0ZWQoKSBj
b25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRBbmltYXRlZChib29sIHkpOwogICAgdmlydHVhbCB2
b2lkIHNldFZlbG9jaXR5KCBkb3VibGUgdngsIGRvdWJsZSB2eSk7CiAgICB2b2lkIHNldFhWZWxv
Y2l0eSggZG91YmxlIHZ4ICkgeyBzZXRWZWxvY2l0eSh2eCx5VmVsb2NpdHkoKSk7IH0KICAgIHZv
aWQgc2V0WVZlbG9jaXR5KCBkb3VibGUgdnkgKSB7IHNldFZlbG9jaXR5KHhWZWxvY2l0eSgpLHZ5
KTsgfQogICAgZG91YmxlIHhWZWxvY2l0eSgpIGNvbnN0OwogICAgZG91YmxlIHlWZWxvY2l0eSgp
IGNvbnN0OwogICAgdmlydHVhbCB2b2lkIGFkdmFuY2UoaW50IHN0YWdlKTsKCiAgICB2aXJ0dWFs
IGJvb2wgY29sbGlkZXNXaXRoKCBjb25zdCBRQ2FudmFzSXRlbSogKSBjb25zdD0wOwoKICAgIFFD
YW52YXNJdGVtTGlzdCBjb2xsaXNpb25zKGJvb2wgZXhhY3QgICApIGNvbnN0OwoKICAgIHZpcnR1
YWwgdm9pZCBzZXRDYW52YXMoUUNhbnZhcyopOwoKICAgIHZpcnR1YWwgdm9pZCBkcmF3KFFQYWlu
dGVyJik9MDsKCiAgICB2b2lkIHNob3coKTsKICAgIHZvaWQgaGlkZSgpOwoKICAgIHZpcnR1YWwg
dm9pZCBzZXRWaXNpYmxlKGJvb2wgeWVzKTsKICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QKCXsg
cmV0dXJuIChib29sKXZpczsgfQogICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGVkKGJvb2wgeWVz
KTsKICAgIGJvb2wgaXNTZWxlY3RlZCgpIGNvbnN0Cgl7IHJldHVybiAoYm9vbClzZWw7IH0KICAg
IHZpcnR1YWwgdm9pZCBzZXRFbmFibGVkKGJvb2wgeWVzKTsKICAgIGJvb2wgaXNFbmFibGVkKCkg
Y29uc3QKCXsgcmV0dXJuIChib29sKWVuYTsgfQogICAgdmlydHVhbCB2b2lkIHNldEFjdGl2ZShi
b29sIHllcyk7CiAgICBib29sIGlzQWN0aXZlKCkgY29uc3QKCXsgcmV0dXJuIChib29sKWFjdDsg
fQoKICAgIGJvb2wgdmlzaWJsZSgpIGNvbnN0Cgl7IHJldHVybiAoYm9vbCl2aXM7IH0KICAgIGJv
b2wgc2VsZWN0ZWQoKSBjb25zdAoJeyByZXR1cm4gKGJvb2wpc2VsOyB9CiAgICBib29sIGVuYWJs
ZWQoKSBjb25zdAoJeyByZXR1cm4gKGJvb2wpZW5hOyB9CiAgICBib29sIGFjdGl2ZSgpIGNvbnN0
Cgl7IHJldHVybiAoYm9vbClhY3Q7IH0KCgogICAgZW51bSBSdHRpVmFsdWVzIHsKCVJ0dGlfSXRl
bSA9IDAsCglSdHRpX1Nwcml0ZSA9IDEsCglSdHRpX1BvbHlnb25hbEl0ZW0gPSAyLAoJUnR0aV9U
ZXh0ID0gMywKCVJ0dGlfUG9seWdvbiA9IDQsCglSdHRpX1JlY3RhbmdsZSA9IDUsCglSdHRpX0Vs
bGlwc2UgPSA2LAoJUnR0aV9MaW5lID0gNywKCVJ0dGlfU3BsaW5lID0gOAogICAgfTsKCiAgICB2
aXJ0dWFsIGludCBydHRpKCkgY29uc3Q7CiAgICBzdGF0aWMgaW50IFJUVEk7CgogICAgdmlydHVh
bCBRUmVjdCBib3VuZGluZ1JlY3QoKSBjb25zdD0wOwogICAgdmlydHVhbCBRUmVjdCBib3VuZGlu
Z1JlY3RBZHZhbmNlZCgpIGNvbnN0OwoKICAgIFFDYW52YXMqIGNhbnZhcygpIGNvbnN0Cgl7IHJl
dHVybiBjbnY7IH0KCnByb3RlY3RlZDoKICAgIHZvaWQgdXBkYXRlKCkgeyBjaGFuZ2VDaHVua3Mo
KTsgfQoKcHJpdmF0ZToKICAgICAKCiAgICBmcmllbmQgY2xhc3MgUUNhbnZhc1BvbHlnb25hbEl0
ZW07CiAgICBmcmllbmQgY2xhc3MgUUNhbnZhc1Nwcml0ZTsKICAgIGZyaWVuZCBjbGFzcyBRQ2Fu
dmFzUmVjdGFuZ2xlOwogICAgZnJpZW5kIGNsYXNzIFFDYW52YXNQb2x5Z29uOwogICAgZnJpZW5k
IGNsYXNzIFFDYW52YXNFbGxpcHNlOwogICAgZnJpZW5kIGNsYXNzIFFDYW52YXNUZXh0OwogICAg
ZnJpZW5kIGNsYXNzIFFDYW52YXNMaW5lOwoKICAgIHZpcnR1YWwgUVBvaW50QXJyYXkgY2h1bmtz
KCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgYWRkVG9DaHVua3MoKTsKICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmVGcm9tQ2h1bmtzKCk7CiAgICB2aXJ0dWFsIHZvaWQgY2hhbmdlQ2h1bmtzKCk7CiAg
ICB2aXJ0dWFsIGJvb2wgY29sbGlkZXNXaXRoKCBjb25zdCBRQ2FudmFzU3ByaXRlKiwKCQkJICAg
ICAgIGNvbnN0IFFDYW52YXNQb2x5Z29uYWxJdGVtKiwKCQkJICAgICAgIGNvbnN0IFFDYW52YXNS
ZWN0YW5nbGUqLAoJCQkgICAgICAgY29uc3QgUUNhbnZhc0VsbGlwc2UqLAoJCQkgICAgICAgY29u
c3QgUUNhbnZhc1RleHQqICkgY29uc3QgPSAwOwogICAgIAoKICAgIFFDYW52YXMqIGNudjsKICAg
IHN0YXRpYyBRQ2FudmFzKiBjdXJyZW50X2NhbnZhczsKICAgIGRvdWJsZSBteXgsbXl5LG15ejsK
ICAgIFFDYW52YXNJdGVtRXh0cmEgKmV4dDsKICAgIFFDYW52YXNJdGVtRXh0cmEmIGV4dHJhKCk7
CiAgICB1aW50IGFuaToxOwogICAgdWludCB2aXM6MTsKICAgIHVpbnQgc2VsOjE7CiAgICB1aW50
IGVuYToxOwogICAgdWludCBhY3Q6MTsKfTsKCgpjbGFzcyBRQ2FudmFzRGF0YTsKCmNsYXNzICAg
IFFDYW52YXMgOiBwdWJsaWMgUU9iamVjdAp7CiAgICBwdWJsaWM6CXZpcnR1YWwgUU1ldGFPYmpl
Y3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7CX0Jdmly
dHVhbCBjb25zdCBjaGFyICpjbGFzc05hbWUoKSBjb25zdDsJdmlydHVhbCB2b2lkKiBxdF9jYXN0
KCBjb25zdCBjaGFyKiApOyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiAp
OyB2aXJ0dWFsIGJvb2wgcXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0
X3Byb3BlcnR5KCBpbnQsIGludCwgUVZhcmlhbnQqICk7IAlzdGF0aWMgUU1ldGFPYmplY3QqIHN0
YXRpY01ldGFPYmplY3QoKTsJUU9iamVjdCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0
aGlzOyB9IHN0YXRpYyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAg
KTsgc3RhdGljIFFTdHJpbmcgdHJVdGY4KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAg
KTsgCXByaXZhdGU6CXN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsgCnB1YmxpYzoKICAgIFFD
YW52YXMoIFFPYmplY3QqIHBhcmVudCA9IDAsIGNvbnN0IGNoYXIqIG5hbWUgPSAwICk7CiAgICBR
Q2FudmFzKGludCB3LCBpbnQgaCk7CiAgICBRQ2FudmFzKCBRUGl4bWFwIHAsIGludCBoLCBpbnQg
diwgaW50IHRpbGV3aWR0aCwgaW50IHRpbGVoZWlnaHQgKTsKCiAgICB2aXJ0dWFsIH5RQ2FudmFz
KCk7CgogICAgdmlydHVhbCB2b2lkIHNldFRpbGVzKCBRUGl4bWFwIHRpbGVzLCBpbnQgaCwgaW50
IHYsCgkJCSAgIGludCB0aWxld2lkdGgsIGludCB0aWxlaGVpZ2h0ICk7CiAgICB2aXJ0dWFsIHZv
aWQgc2V0QmFja2dyb3VuZFBpeG1hcCggY29uc3QgUVBpeG1hcCYgcCApOwogICAgUVBpeG1hcCBi
YWNrZ3JvdW5kUGl4bWFwKCkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIHNldEJhY2tncm91bmRD
b2xvciggY29uc3QgUUNvbG9yJiBjICk7CiAgICBRQ29sb3IgYmFja2dyb3VuZENvbG9yKCkgY29u
c3Q7CgogICAgdmlydHVhbCB2b2lkIHNldFRpbGUoIGludCB4LCBpbnQgeSwgaW50IHRpbGVudW0g
KTsKICAgIGludCB0aWxlKCBpbnQgeCwgaW50IHkgKSBjb25zdAoJeyByZXR1cm4gZ3JpZFt4K3kq
aHRpbGVzXTsgfQoKICAgIGludCB0aWxlc0hvcml6b250YWxseSgpIGNvbnN0Cgl7IHJldHVybiBo
dGlsZXM7IH0KICAgIGludCB0aWxlc1ZlcnRpY2FsbHkoKSBjb25zdAoJeyByZXR1cm4gdnRpbGVz
OyB9CgogICAgaW50IHRpbGVXaWR0aCgpIGNvbnN0Cgl7IHJldHVybiB0aWxldzsgfQogICAgaW50
IHRpbGVIZWlnaHQoKSBjb25zdAoJeyByZXR1cm4gdGlsZWg7IH0KCiAgICB2aXJ0dWFsIHZvaWQg
cmVzaXplKGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAgICBpbnQgd2lkdGgoKSBjb25zdAoJeyBy
ZXR1cm4gYXdpZHRoOyB9CiAgICBpbnQgaGVpZ2h0KCkgY29uc3QKCXsgcmV0dXJuIGFoZWlnaHQ7
IH0KICAgIFFTaXplIHNpemUoKSBjb25zdAoJeyByZXR1cm4gUVNpemUoYXdpZHRoLGFoZWlnaHQp
OyB9CiAgICBRUmVjdCByZWN0KCkgY29uc3QKCXsgcmV0dXJuIFFSZWN0KCAwLCAwLCBhd2lkdGgs
IGFoZWlnaHQgKTsgfQogICAgYm9vbCBvbkNhbnZhcyggaW50IHgsIGludCB5ICkgY29uc3QKCXsg
cmV0dXJuIHg+PTAgJiYgeT49MCAmJiB4PGF3aWR0aCAmJiB5PGFoZWlnaHQ7IH0KICAgIGJvb2wg
b25DYW52YXMoIGNvbnN0IFFQb2ludCYgcCApIGNvbnN0Cgl7IHJldHVybiBvbkNhbnZhcyhwLngo
KSxwLnkoKSk7IH0KICAgIGJvb2wgdmFsaWRDaHVuayggaW50IHgsIGludCB5ICkgY29uc3QKCXsg
cmV0dXJuIHg+PTAgJiYgeT49MCAmJiB4PGNod2lkdGggJiYgeTxjaGhlaWdodDsgfQogICAgYm9v
bCB2YWxpZENodW5rKCBjb25zdCBRUG9pbnQmIHAgKSBjb25zdAoJeyByZXR1cm4gdmFsaWRDaHVu
ayhwLngoKSxwLnkoKSk7IH0KCiAgICBpbnQgY2h1bmtTaXplKCkgY29uc3QKCXsgcmV0dXJuIGNo
dW5rc2l6ZTsgfQogICAgdmlydHVhbCB2b2lkIHJldHVuZShpbnQgY2h1bmtzaXplLCBpbnQgbWF4
Y2x1c3RlcnM9MTAwKTsKCiAgICBib29sIHNhbWVDaHVuayhpbnQgeDEsIGludCB5MSwgaW50IHgy
LCBpbnQgeTIpIGNvbnN0Cgl7IHJldHVybiB4MS9jaHVua3NpemU9PXgyL2NodW5rc2l6ZSAmJiB5
MS9jaHVua3NpemU9PXkyL2NodW5rc2l6ZTsgfQogICAgdmlydHVhbCB2b2lkIHNldENoYW5nZWRD
aHVuayhpbnQgaSwgaW50IGopOwogICAgdmlydHVhbCB2b2lkIHNldENoYW5nZWRDaHVua0NvbnRh
aW5pbmcoaW50IHgsIGludCB5KTsKICAgIHZpcnR1YWwgdm9pZCBzZXRBbGxDaGFuZ2VkKCk7CiAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q2hhbmdlZChjb25zdCBRUmVjdCYgYXJlYSk7CiAgICB2aXJ0dWFs
IHZvaWQgc2V0VW5jaGFuZ2VkKGNvbnN0IFFSZWN0JiBhcmVhKTsKCiAgICAgCiAgICB2b2lkIGFk
ZEl0ZW1Ub0NodW5rKFFDYW52YXNJdGVtKiwgaW50IGksIGludCBqKTsKICAgIHZvaWQgcmVtb3Zl
SXRlbUZyb21DaHVuayhRQ2FudmFzSXRlbSosIGludCBpLCBpbnQgaik7CiAgICB2b2lkIGFkZEl0
ZW1Ub0NodW5rQ29udGFpbmluZyhRQ2FudmFzSXRlbSosIGludCB4LCBpbnQgeSk7CiAgICB2b2lk
IHJlbW92ZUl0ZW1Gcm9tQ2h1bmtDb250YWluaW5nKFFDYW52YXNJdGVtKiwgaW50IHgsIGludCB5
KTsKCiAgICBRQ2FudmFzSXRlbUxpc3QgYWxsSXRlbXMoKTsKICAgIFFDYW52YXNJdGVtTGlzdCBj
b2xsaXNpb25zKCBjb25zdCBRUG9pbnQmKSBjb25zdDsKICAgIFFDYW52YXNJdGVtTGlzdCBjb2xs
aXNpb25zKCBjb25zdCBRUmVjdCYpIGNvbnN0OwogICAgUUNhbnZhc0l0ZW1MaXN0IGNvbGxpc2lv
bnMoIGNvbnN0IFFQb2ludEFycmF5JiBwYSwgY29uc3QgUUNhbnZhc0l0ZW0qIGl0ZW0sCgkJCQli
b29sIGV4YWN0KSBjb25zdDsKCiAgICB2b2lkIGRyYXdBcmVhKGNvbnN0IFFSZWN0JiwgUVBhaW50
ZXIqIHAsIGJvb2wgZG91YmxlX2J1ZmZlcj1GQUxTRSk7CgogICAgIAogICAgdmlydHVhbCB2b2lk
IGFkZFZpZXcoUUNhbnZhc1ZpZXcqKTsKICAgIHZpcnR1YWwgdm9pZCByZW1vdmVWaWV3KFFDYW52
YXNWaWV3Kik7CiAgICB2b2lkIGRyYXdDYW52YXNBcmVhKGNvbnN0IFFSZWN0JiwgUVBhaW50ZXIq
IHA9MCwgYm9vbCBkb3VibGVfYnVmZmVyPVRSVUUpOwoKICAgIHZvaWQgZHJhd1ZpZXdBcmVhKCBR
Q2FudmFzVmlldyogdmlldywgUVBhaW50ZXIqIHAsIGNvbnN0IFFSZWN0JiByLCBib29sIGRidWYg
KTsKCgogICAgIAogICAgdmlydHVhbCB2b2lkIGFkZEl0ZW0oUUNhbnZhc0l0ZW0qKTsKICAgIHZp
cnR1YWwgdm9pZCBhZGRBbmltYXRpb24oUUNhbnZhc0l0ZW0qKTsKICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVJdGVtKFFDYW52YXNJdGVtKik7CiAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0aW9u
KFFDYW52YXNJdGVtKik7CgogICAgdmlydHVhbCB2b2lkIHNldEFkdmFuY2VQZXJpb2QoaW50IG1z
KTsKICAgIHZpcnR1YWwgdm9pZCBzZXRVcGRhdGVQZXJpb2QoaW50IG1zKTsKCiAgICB2aXJ0dWFs
IHZvaWQgc2V0RG91YmxlQnVmZmVyaW5nKGJvb2wgeSk7Cgpwcm90ZWN0ZWQgOgogICAgdm9pZCBy
ZXNpemVkKCk7CgpwdWJsaWMgIDoKICAgIHZpcnR1YWwgdm9pZCBhZHZhbmNlKCk7CiAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlKCk7Cgpwcm90ZWN0ZWQ6CiAgICB2aXJ0dWFsIHZvaWQgZHJhd0JhY2tn
cm91bmQoUVBhaW50ZXImLCBjb25zdCBRUmVjdCYgYXJlYSk7CiAgICB2aXJ0dWFsIHZvaWQgZHJh
d0ZvcmVncm91bmQoUVBhaW50ZXImLCBjb25zdCBRUmVjdCYgYXJlYSk7Cgpwcml2YXRlOgogICAg
dm9pZCBpbml0KGludCB3LCBpbnQgaCwgaW50IGNodW5rc3plPTE2LCBpbnQgbWF4Y2x1c3Q9MTAw
KTsKCiAgICBRQ2FudmFzQ2h1bmsmIGNodW5rKGludCBpLCBpbnQgaikgY29uc3Q7CiAgICBRQ2Fu
dmFzQ2h1bmsmIGNodW5rQ29udGFpbmluZyhpbnQgeCwgaW50IHkpIGNvbnN0OwoKICAgIFFSZWN0
IGNoYW5nZUJvdW5kcyhjb25zdCBRUmVjdCYgaW5hcmVhKTsKICAgIHZvaWQgZHJhd0NoYW5nZXMo
Y29uc3QgUVJlY3QmIGluYXJlYSk7CgogICAgdm9pZCBlbnN1cmVPZmZTY3JTaXplKCBpbnQgb3N3
LCBpbnQgb3NoICk7CiAgICBRUGl4bWFwIG9mZnNjcjsKICAgIGludCBhd2lkdGgsYWhlaWdodDsK
ICAgIGludCBjaHVua3NpemU7CiAgICBpbnQgbWF4Y2x1c3RlcnM7CiAgICBpbnQgY2h3aWR0aCxj
aGhlaWdodDsKICAgIFFDYW52YXNDaHVuayogY2h1bmtzOwoKICAgIFFDYW52YXNEYXRhKiBkOwoK
ICAgIHZvaWQgaW5pdFRpbGVzKFFQaXhtYXAgcCwgaW50IGgsIGludCB2LCBpbnQgdGlsZXdpZHRo
LCBpbnQgdGlsZWhlaWdodCk7CiAgICB1c2hvcnQgKmdyaWQ7CiAgICB1c2hvcnQgaHRpbGVzOwog
ICAgdXNob3J0IHZ0aWxlczsKICAgIHVzaG9ydCB0aWxldzsKICAgIHVzaG9ydCB0aWxlaDsKICAg
IGJvb2wgb25lb25lOwogICAgUVBpeG1hcCBwbTsKICAgIFFUaW1lciogdXBkYXRlX3RpbWVyOwog
ICAgUUNvbG9yIGJnY29sb3I7CiAgICBib29sIGRlYnVnX3JlZHJhd19hcmVhczsKICAgIGJvb2wg
ZGJsYnVmOwoKICAgIGZyaWVuZCB2b2lkIHF0X3VudmlldyhRQ2FudmFzKiBjKTsKfTsKCmNsYXNz
IFFDYW52YXNWaWV3RGF0YTsKCmNsYXNzICAgIFFDYW52YXNWaWV3IDogcHVibGljIFFTY3JvbGxW
aWV3CnsKICAgIHB1YmxpYzoJdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY01ldGFPYmplY3QoKTsJfQl2aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNz
TmFtZSgpIGNvbnN0Owl2aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZpcnR1
YWwgYm9vbCBxdF9pbnZva2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9lbWl0
KCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCwgaW50LCBR
VmFyaWFudCogKTsgCXN0YXRpYyBRTWV0YU9iamVjdCogc3RhdGljTWV0YU9iamVjdCgpOwlRT2Jq
ZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4gKFFPYmplY3QqKXRoaXM7IH0gc3RhdGljIFFTdHJpbmcg
dHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBzdGF0aWMgUVN0cmluZyB0clV0
ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyAJcHJpdmF0ZToJc3RhdGljIFFN
ZXRhT2JqZWN0ICptZXRhT2JqOyAKcHVibGljOgoKICAgIFFDYW52YXNWaWV3KFFXaWRnZXQqIHBh
cmVudD0wLCBjb25zdCBjaGFyKiBuYW1lPTAsIFdGbGFncyBmPTApOwogICAgUUNhbnZhc1ZpZXco
UUNhbnZhcyogdmlld2luZywgUVdpZGdldCogcGFyZW50PTAsIGNvbnN0IGNoYXIqIG5hbWU9MCwg
V0ZsYWdzIGY9MCk7CiAgICB+UUNhbnZhc1ZpZXcoKTsKCiAgICBRQ2FudmFzKiBjYW52YXMoKSBj
b25zdAoJeyByZXR1cm4gdmlld2luZzsgfQogICAgdm9pZCBzZXRDYW52YXMoUUNhbnZhcyogdik7
CgogICAgY29uc3QgUVdNYXRyaXggJndvcmxkTWF0cml4KCkgY29uc3Q7CiAgICBjb25zdCBRV01h
dHJpeCAmaW52ZXJzZVdvcmxkTWF0cml4KCkgY29uc3Q7CiAgICBib29sIHNldFdvcmxkTWF0cml4
KCBjb25zdCBRV01hdHJpeCAmICk7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIGRyYXdDb250ZW50cygg
UVBhaW50ZXIqLCBpbnQgY3gsIGludCBjeSwgaW50IGN3LCBpbnQgY2ggKTsKICAgIFFTaXplIHNp
emVIaW50KCkgY29uc3Q7Cgpwcml2YXRlOgogICAgdm9pZCBkcmF3Q29udGVudHMoIFFQYWludGVy
KiApOwogICAgUUNhbnZhcyogdmlld2luZzsKICAgIFFDYW52YXNWaWV3RGF0YSogZDsKICAgIGZy
aWVuZCB2b2lkIHF0X3VudmlldyhRQ2FudmFzKiBjKTsKCnByaXZhdGUgIDoKICAgIHZvaWQgY01v
dmluZyhpbnQsaW50KTsKICAgIHZvaWQgdXBkYXRlQ29udGVudHNTaXplKCk7Cn07CgoKY2xhc3Mg
ICAgUUNhbnZhc1BpeG1hcCA6IHB1YmxpYyBRUGl4bWFwCnsKcHVibGljOgoKICAgIFFDYW52YXNQ
aXhtYXAoY29uc3QgUVN0cmluZyYgZGF0YWZpbGVuYW1lKTsKCiAgICBRQ2FudmFzUGl4bWFwKGNv
bnN0IFFJbWFnZSYgaW1hZ2UpOwogICAgUUNhbnZhc1BpeG1hcChjb25zdCBRUGl4bWFwJiwgY29u
c3QgUVBvaW50JiBob3RzcG90KTsKICAgIH5RQ2FudmFzUGl4bWFwKCk7CgogICAgaW50IG9mZnNl
dFgoKSBjb25zdAoJeyByZXR1cm4gaG90eDsgfQogICAgaW50IG9mZnNldFkoKSBjb25zdAoJeyBy
ZXR1cm4gaG90eTsgfQogICAgdm9pZCBzZXRPZmZzZXQoaW50IHgsIGludCB5KSB7IGhvdHggPSB4
OyBob3R5ID0geTsgfQoKcHJpdmF0ZToKICAgIHZvaWQgaW5pdChjb25zdCBRSW1hZ2UmKTsKICAg
IHZvaWQgaW5pdChjb25zdCBRUGl4bWFwJiBwaXhtYXAsIGludCBoeCwgaW50IGh5KTsKCiAgICBm
cmllbmQgY2xhc3MgUUNhbnZhc1Nwcml0ZTsKICAgIGZyaWVuZCBjbGFzcyBRQ2FudmFzUGl4bWFw
QXJyYXk7CiAgICBmcmllbmQgYm9vbCBxdF90ZXN0Q29sbGlzaW9uKGNvbnN0IFFDYW52YXNTcHJp
dGUqIHMxLCBjb25zdCBRQ2FudmFzU3ByaXRlKiBzMik7CgogICAgaW50IGhvdHgsaG90eTsKCiAg
ICBRSW1hZ2UqIGNvbGxpc2lvbl9tYXNrOwp9OwoKCmNsYXNzICAgIFFDYW52YXNQaXhtYXBBcnJh
eQp7CnB1YmxpYzoKICAgIFFDYW52YXNQaXhtYXBBcnJheSgpOwoKICAgIFFDYW52YXNQaXhtYXBB
cnJheShjb25zdCBRU3RyaW5nJiBkYXRhZmlsZW5hbWVwYXR0ZXJuLCBpbnQgZnJhbWVjb3VudD0w
KTsKCiAgICAgCiAgICBRQ2FudmFzUGl4bWFwQXJyYXkoUVB0ckxpc3Q8UVBpeG1hcD4sIFFQdHJM
aXN0PFFQb2ludD4gaG90c3BvdHMpOwoKICAgIFFDYW52YXNQaXhtYXBBcnJheShRVmFsdWVMaXN0
PFFQaXhtYXA+LCBRUG9pbnRBcnJheSBob3RzcG90cyA9IFFQb2ludEFycmF5KCkgKTsKICAgIH5R
Q2FudmFzUGl4bWFwQXJyYXkoKTsKCgogICAgYm9vbCByZWFkUGl4bWFwcyhjb25zdCBRU3RyaW5n
JiBkYXRhZmlsZW5hbWVwYXR0ZXJuLCBpbnQgZnJhbWVjb3VudD0wKTsKICAgIGJvb2wgcmVhZENv
bGxpc2lvbk1hc2tzKGNvbnN0IFFTdHJpbmcmIGZpbGVuYW1lcGF0dGVybik7CgoKICAgICAKICAg
IGJvb2wgb3BlcmF0b3IhKCk7ICAKICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwoKICAgIFFDYW52
YXNQaXhtYXAqIGltYWdlKGludCBpKSBjb25zdAoJeyByZXR1cm4gaW1nID8gaW1nW2ldIDogMDsg
fQogICAgdm9pZCBzZXRJbWFnZShpbnQgaSwgUUNhbnZhc1BpeG1hcCogcCk7CiAgICB1aW50IGNv
dW50KCkgY29uc3QKCXsgcmV0dXJuICh1aW50KWZyYW1lY291bnQ7IH0KCnByaXZhdGU6CgogICAg
Ym9vbCByZWFkUGl4bWFwcyhjb25zdCBRU3RyaW5nJiBkYXRhZmlsZW5hbWVwYXR0ZXJuLCBpbnQg
ZnJhbWVjb3VudCwgYm9vbCBtYXNrb25seSk7CgoKICAgIHZvaWQgcmVzZXQoKTsKICAgIGludCBm
cmFtZWNvdW50OwogICAgUUNhbnZhc1BpeG1hcCoqIGltZzsKfTsKCgpjbGFzcyAgICBRQ2FudmFz
U3ByaXRlIDogcHVibGljIFFDYW52YXNJdGVtCnsKcHVibGljOgogICAgUUNhbnZhc1Nwcml0ZShR
Q2FudmFzUGl4bWFwQXJyYXkqIGFycmF5LCBRQ2FudmFzKiBjYW52YXMpOwoKICAgIHZvaWQgc2V0
U2VxdWVuY2UoUUNhbnZhc1BpeG1hcEFycmF5KiBzZXEpOwoKICAgIHZpcnR1YWwgflFDYW52YXNT
cHJpdGUoKTsKCiAgICB2b2lkIG1vdmUoZG91YmxlIHgsIGRvdWJsZSB5KTsKICAgIHZpcnR1YWwg
dm9pZCBtb3ZlKGRvdWJsZSB4LCBkb3VibGUgeSwgaW50IGZyYW1lKTsKICAgIHZvaWQgc2V0RnJh
bWUoaW50KTsKICAgIGVudW0gRnJhbWVBbmltYXRpb25UeXBlIHsgQ3ljbGUsIE9zY2lsbGF0ZSB9
OwogICAgdmlydHVhbCB2b2lkIHNldEZyYW1lQW5pbWF0aW9uKEZyYW1lQW5pbWF0aW9uVHlwZT1D
eWNsZSwgaW50IHN0ZXA9MSwgaW50IHN0YXRlPTApOwogICAgaW50IGZyYW1lKCkgY29uc3QKCXsg
cmV0dXJuIGZybTsgfQogICAgaW50IGZyYW1lQ291bnQoKSBjb25zdAoJeyByZXR1cm4gaW1hZ2Vz
LT5jb3VudCgpOyB9CgogICAgaW50IHJ0dGkoKSBjb25zdDsKICAgIHN0YXRpYyBpbnQgUlRUSTsK
CiAgICBib29sIGNvbGxpZGVzV2l0aCggY29uc3QgUUNhbnZhc0l0ZW0qICkgY29uc3Q7CgogICAg
UVJlY3QgYm91bmRpbmdSZWN0KCkgY29uc3Q7CgogICAgIAogCgogICAgaW50IHdpZHRoKCkgY29u
c3Q7CiAgICBpbnQgaGVpZ2h0KCkgY29uc3Q7CgogICAgaW50IGxlZnRFZGdlKCkgY29uc3Q7CiAg
ICBpbnQgdG9wRWRnZSgpIGNvbnN0OwogICAgaW50IHJpZ2h0RWRnZSgpIGNvbnN0OwogICAgaW50
IGJvdHRvbUVkZ2UoKSBjb25zdDsKCiAgICBpbnQgbGVmdEVkZ2UoaW50IG54KSBjb25zdDsKICAg
IGludCB0b3BFZGdlKGludCBueSkgY29uc3Q7CiAgICBpbnQgcmlnaHRFZGdlKGludCBueCkgY29u
c3Q7CiAgICBpbnQgYm90dG9tRWRnZShpbnQgbnkpIGNvbnN0OwogICAgUUNhbnZhc1BpeG1hcCog
aW1hZ2UoKSBjb25zdAoJeyByZXR1cm4gaW1hZ2VzLT5pbWFnZShmcm0pOyB9CiAgICB2aXJ0dWFs
IFFDYW52YXNQaXhtYXAqIGltYWdlQWR2YW5jZWQoKSBjb25zdDsKICAgIFFDYW52YXNQaXhtYXAq
IGltYWdlKGludCBmKSBjb25zdAoJeyByZXR1cm4gaW1hZ2VzLT5pbWFnZShmKTsgfQogICAgdmly
dHVhbCB2b2lkIGFkdmFuY2UoaW50IHN0YWdlKTsKCnB1YmxpYzoKICAgIHZvaWQgZHJhdyhRUGFp
bnRlciYgcGFpbnRlcik7Cgpwcml2YXRlOgogICAgdm9pZCBhZGRUb0NodW5rcygpOwogICAgdm9p
ZCByZW1vdmVGcm9tQ2h1bmtzKCk7CiAgICB2b2lkIGNoYW5nZUNodW5rcygpOwoKICAgIGludCBm
cm07CiAgICB1c2hvcnQgYW5pbV92YWw7CiAgICB1aW50IGFuaW1fc3RhdGU6MjsKICAgIHVpbnQg
YW5pbV90eXBlOjE0OwogICAgYm9vbCBjb2xsaWRlc1dpdGgoIGNvbnN0IFFDYW52YXNTcHJpdGUq
LAoJCSAgICAgICBjb25zdCBRQ2FudmFzUG9seWdvbmFsSXRlbSosCgkJICAgICAgIGNvbnN0IFFD
YW52YXNSZWN0YW5nbGUqLAoJCSAgICAgICBjb25zdCBRQ2FudmFzRWxsaXBzZSosCgkJICAgICAg
IGNvbnN0IFFDYW52YXNUZXh0KiApIGNvbnN0OwoKICAgIGZyaWVuZCBib29sIHF0X3Rlc3RDb2xs
aXNpb24oIGNvbnN0IFFDYW52YXNTcHJpdGUqIHMxLAoJCQkJICBjb25zdCBRQ2FudmFzU3ByaXRl
KiBzMiApOwoKICAgIFFDYW52YXNQaXhtYXBBcnJheSogaW1hZ2VzOwp9OwoKY2xhc3MgUVBvbHln
b25hbFByb2Nlc3NvcjsKCmNsYXNzICAgIFFDYW52YXNQb2x5Z29uYWxJdGVtIDogcHVibGljIFFD
YW52YXNJdGVtCnsKcHVibGljOgogICAgUUNhbnZhc1BvbHlnb25hbEl0ZW0oUUNhbnZhcyogY2Fu
dmFzKTsKICAgIHZpcnR1YWwgflFDYW52YXNQb2x5Z29uYWxJdGVtKCk7CgogICAgYm9vbCBjb2xs
aWRlc1dpdGgoIGNvbnN0IFFDYW52YXNJdGVtKiApIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBz
ZXRQZW4oUVBlbiBwKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRCcnVzaChRQnJ1c2ggYik7CgogICAg
UVBlbiBwZW4oKSBjb25zdAoJeyByZXR1cm4gcG47IH0KICAgIFFCcnVzaCBicnVzaCgpIGNvbnN0
Cgl7IHJldHVybiBicjsgfQoKICAgIHZpcnR1YWwgUVBvaW50QXJyYXkgYXJlYVBvaW50cygpIGNv
bnN0PTA7CiAgICB2aXJ0dWFsIFFQb2ludEFycmF5IGFyZWFQb2ludHNBZHZhbmNlZCgpIGNvbnN0
OwogICAgUVJlY3QgYm91bmRpbmdSZWN0KCkgY29uc3Q7CgogICAgaW50IHJ0dGkoKSBjb25zdDsK
ICAgIHN0YXRpYyBpbnQgUlRUSTsKCnByb3RlY3RlZDoKICAgIHZvaWQgZHJhdyhRUGFpbnRlciAm
KTsKICAgIHZpcnR1YWwgdm9pZCBkcmF3U2hhcGUoUVBhaW50ZXIgJikgPSAwOwoKICAgIGJvb2wg
d2luZGluZygpIGNvbnN0OwogICAgdm9pZCBzZXRXaW5kaW5nKGJvb2wpOwoKcHJpdmF0ZToKICAg
IHZvaWQgc2NhblBvbHlnb24oIGNvbnN0IFFQb2ludEFycmF5JiBwYSwgaW50IHdpbmRpbmcsCgkJ
ICAgICAgUVBvbHlnb25hbFByb2Nlc3NvciYgcHJvY2VzcyApIGNvbnN0OwogICAgUVBvaW50QXJy
YXkgY2h1bmtzKCkgY29uc3Q7CgogICAgYm9vbCBjb2xsaWRlc1dpdGgoIGNvbnN0IFFDYW52YXNT
cHJpdGUqLAoJCSAgICAgICBjb25zdCBRQ2FudmFzUG9seWdvbmFsSXRlbSosCgkJICAgICAgIGNv
bnN0IFFDYW52YXNSZWN0YW5nbGUqLAoJCSAgICAgICBjb25zdCBRQ2FudmFzRWxsaXBzZSosCgkJ
ICAgICAgIGNvbnN0IFFDYW52YXNUZXh0KiApIGNvbnN0OwoKICAgIFFCcnVzaCBicjsKICAgIFFQ
ZW4gcG47CiAgICB1aW50IHdpbmQ6MTsKfTsKCgpjbGFzcyAgICBRQ2FudmFzUmVjdGFuZ2xlIDog
cHVibGljIFFDYW52YXNQb2x5Z29uYWxJdGVtCnsKcHVibGljOgogICAgUUNhbnZhc1JlY3Rhbmds
ZShRQ2FudmFzKiBjYW52YXMpOwogICAgUUNhbnZhc1JlY3RhbmdsZShjb25zdCBRUmVjdCYsIFFD
YW52YXMqIGNhbnZhcyk7CiAgICBRQ2FudmFzUmVjdGFuZ2xlKGludCB4LCBpbnQgeSwgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCBRQ2FudmFzKiBjYW52YXMpOwoKICAgIH5RQ2FudmFzUmVjdGFuZ2xl
KCk7CgogICAgaW50IHdpZHRoKCkgY29uc3Q7CiAgICBpbnQgaGVpZ2h0KCkgY29uc3Q7CiAgICB2
b2lkIHNldFNpemUoaW50IHcsIGludCBoKTsKICAgIFFTaXplIHNpemUoKSBjb25zdAoJeyByZXR1
cm4gUVNpemUodyxoKTsgfQogICAgUVBvaW50QXJyYXkgYXJlYVBvaW50cygpIGNvbnN0OwogICAg
UVJlY3QgcmVjdCgpIGNvbnN0Cgl7IHJldHVybiBRUmVjdChpbnQoeCgpKSxpbnQoeSgpKSx3LGgp
OyB9CgogICAgYm9vbCBjb2xsaWRlc1dpdGgoIGNvbnN0IFFDYW52YXNJdGVtKiApIGNvbnN0OwoK
ICAgIGludCBydHRpKCkgY29uc3Q7CiAgICBzdGF0aWMgaW50IFJUVEk7Cgpwcm90ZWN0ZWQ6CiAg
ICB2b2lkIGRyYXdTaGFwZShRUGFpbnRlciAmKTsKICAgIFFQb2ludEFycmF5IGNodW5rcygpIGNv
bnN0OwoKcHJpdmF0ZToKICAgIGJvb2wgY29sbGlkZXNXaXRoKCAgIGNvbnN0IFFDYW52YXNTcHJp
dGUqLAoJCQkgY29uc3QgUUNhbnZhc1BvbHlnb25hbEl0ZW0qLAoJCQkgY29uc3QgUUNhbnZhc1Jl
Y3RhbmdsZSosCgkJCSBjb25zdCBRQ2FudmFzRWxsaXBzZSosCgkJCSBjb25zdCBRQ2FudmFzVGV4
dCogKSBjb25zdDsKCiAgICBpbnQgdywgaDsKfTsKCgpjbGFzcyAgICBRQ2FudmFzUG9seWdvbiA6
IHB1YmxpYyBRQ2FudmFzUG9seWdvbmFsSXRlbQp7CnB1YmxpYzoKICAgIFFDYW52YXNQb2x5Z29u
KFFDYW52YXMqIGNhbnZhcyk7CiAgICB+UUNhbnZhc1BvbHlnb24oKTsKICAgIHZvaWQgc2V0UG9p
bnRzKFFQb2ludEFycmF5KTsKICAgIFFQb2ludEFycmF5IHBvaW50cygpIGNvbnN0OwogICAgdm9p
ZCBtb3ZlQnkoZG91YmxlIGR4LCBkb3VibGUgZHkpOwoKICAgIFFQb2ludEFycmF5IGFyZWFQb2lu
dHMoKSBjb25zdDsKCiAgICBpbnQgcnR0aSgpIGNvbnN0OwogICAgc3RhdGljIGludCBSVFRJOwoK
cHJvdGVjdGVkOgogICAgdm9pZCBkcmF3U2hhcGUoUVBhaW50ZXIgJik7CiAgICBRUG9pbnRBcnJh
eSBwb2x5Owp9OwoKCmNsYXNzICAgIFFDYW52YXNTcGxpbmUgOiBwdWJsaWMgUUNhbnZhc1BvbHln
b24KewpwdWJsaWM6CiAgICBRQ2FudmFzU3BsaW5lKFFDYW52YXMqIGNhbnZhcyk7CiAgICB+UUNh
bnZhc1NwbGluZSgpOwoKICAgIHZvaWQgc2V0Q29udHJvbFBvaW50cyhRUG9pbnRBcnJheSwgYm9v
bCBjbG9zZWQ9VFJVRSk7CiAgICBRUG9pbnRBcnJheSBjb250cm9sUG9pbnRzKCkgY29uc3Q7CiAg
ICBib29sIGNsb3NlZCgpIGNvbnN0OwoKICAgIGludCBydHRpKCkgY29uc3Q7CiAgICBzdGF0aWMg
aW50IFJUVEk7Cgpwcml2YXRlOgogICAgdm9pZCByZWNhbGNQb2x5KCk7CiAgICBRUG9pbnRBcnJh
eSBiZXo7CiAgICBib29sIGNsOwp9OwoKCmNsYXNzICAgIFFDYW52YXNMaW5lIDogcHVibGljIFFD
YW52YXNQb2x5Z29uYWxJdGVtCnsKcHVibGljOgogICAgUUNhbnZhc0xpbmUoUUNhbnZhcyogY2Fu
dmFzKTsKICAgIH5RQ2FudmFzTGluZSgpOwogICAgdm9pZCBzZXRQb2ludHMoaW50IHgxLCBpbnQg
eTEsIGludCB4MiwgaW50IHkyKTsKCiAgICBRUG9pbnQgc3RhcnRQb2ludCgpIGNvbnN0Cgl7IHJl
dHVybiBRUG9pbnQoeDEseTEpOyB9CiAgICBRUG9pbnQgZW5kUG9pbnQoKSBjb25zdAoJeyByZXR1
cm4gUVBvaW50KHgyLHkyKTsgfQoKICAgIGludCBydHRpKCkgY29uc3Q7CiAgICBzdGF0aWMgaW50
IFJUVEk7CgogICAgdm9pZCBzZXRQZW4oUVBlbiBwKTsKCnByb3RlY3RlZDoKICAgIHZvaWQgZHJh
d1NoYXBlKFFQYWludGVyICYpOwogICAgUVBvaW50QXJyYXkgYXJlYVBvaW50cygpIGNvbnN0OwoK
cHJpdmF0ZToKICAgIGludCB4MSx5MSx4Mix5MjsKfTsKCgpjbGFzcyAgICBRQ2FudmFzRWxsaXBz
ZSA6IHB1YmxpYyBRQ2FudmFzUG9seWdvbmFsSXRlbQp7CgpwdWJsaWM6CiAgICBRQ2FudmFzRWxs
aXBzZSggUUNhbnZhcyogY2FudmFzICk7CiAgICBRQ2FudmFzRWxsaXBzZSggaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LCBRQ2FudmFzKiBjYW52YXMgKTsKICAgIFFDYW52YXNFbGxpcHNlKCBpbnQgd2lk
dGgsIGludCBoZWlnaHQsIGludCBzdGFydGFuZ2xlLCBpbnQgYW5nbGUsCgkJICAgIFFDYW52YXMq
IGNhbnZhcyApOwoKICAgIH5RQ2FudmFzRWxsaXBzZSgpOwoKICAgIGludCB3aWR0aCgpIGNvbnN0
OwogICAgaW50IGhlaWdodCgpIGNvbnN0OwogICAgdm9pZCBzZXRTaXplKGludCB3LCBpbnQgaCk7
CiAgICB2b2lkIHNldEFuZ2xlcyhpbnQgc3RhcnQsIGludCBsZW5ndGgpOwogICAgaW50IGFuZ2xl
U3RhcnQoKSBjb25zdAoJeyByZXR1cm4gYTE7IH0KICAgIGludCBhbmdsZUxlbmd0aCgpIGNvbnN0
Cgl7IHJldHVybiBhMjsgfQogICAgUVBvaW50QXJyYXkgYXJlYVBvaW50cygpIGNvbnN0OwoKICAg
IGJvb2wgY29sbGlkZXNXaXRoKCBjb25zdCBRQ2FudmFzSXRlbSogKSBjb25zdDsKCiAgICBpbnQg
cnR0aSgpIGNvbnN0OwogICAgc3RhdGljIGludCBSVFRJOwoKcHJvdGVjdGVkOgogICAgdm9pZCBk
cmF3U2hhcGUoUVBhaW50ZXIgJik7Cgpwcml2YXRlOgogICAgYm9vbCBjb2xsaWRlc1dpdGgoIGNv
bnN0IFFDYW52YXNTcHJpdGUqLAoJCSAgICAgICBjb25zdCBRQ2FudmFzUG9seWdvbmFsSXRlbSos
CgkJICAgICAgIGNvbnN0IFFDYW52YXNSZWN0YW5nbGUqLAoJCSAgICAgICBjb25zdCBRQ2FudmFz
RWxsaXBzZSosCgkJICAgICAgIGNvbnN0IFFDYW52YXNUZXh0KiApIGNvbnN0OwogICAgaW50IHcs
IGg7CiAgICBpbnQgYTEsIGEyOwp9OwoKCmNsYXNzIFFDYW52YXNUZXh0RXh0cmE7CgpjbGFzcyAg
ICBRQ2FudmFzVGV4dCA6IHB1YmxpYyBRQ2FudmFzSXRlbQp7CnB1YmxpYzoKICAgIFFDYW52YXNU
ZXh0KFFDYW52YXMqIGNhbnZhcyk7CiAgICBRQ2FudmFzVGV4dChjb25zdCBRU3RyaW5nJiwgUUNh
bnZhcyogY2FudmFzKTsKICAgIFFDYW52YXNUZXh0KGNvbnN0IFFTdHJpbmcmLCBRRm9udCwgUUNh
bnZhcyogY2FudmFzKTsKCiAgICB2aXJ0dWFsIH5RQ2FudmFzVGV4dCgpOwoKICAgIHZvaWQgc2V0
VGV4dCggY29uc3QgUVN0cmluZyYgKTsKICAgIHZvaWQgc2V0Rm9udCggY29uc3QgUUZvbnQmICk7
CiAgICB2b2lkIHNldENvbG9yKCBjb25zdCBRQ29sb3ImICk7CiAgICBRU3RyaW5nIHRleHQoKSBj
b25zdDsKICAgIFFGb250IGZvbnQoKSBjb25zdDsKICAgIFFDb2xvciBjb2xvcigpIGNvbnN0OwoK
ICAgIHZvaWQgbW92ZUJ5KGRvdWJsZSBkeCwgZG91YmxlIGR5KTsKCiAgICBpbnQgdGV4dEZsYWdz
KCkgY29uc3QKCXsgcmV0dXJuIGZsYWdzOyB9CiAgICB2b2lkIHNldFRleHRGbGFncyhpbnQpOwoK
ICAgIFFSZWN0IGJvdW5kaW5nUmVjdCgpIGNvbnN0OwoKICAgIGJvb2wgY29sbGlkZXNXaXRoKCBj
b25zdCBRQ2FudmFzSXRlbSogKSBjb25zdDsKCiAgICBpbnQgcnR0aSgpIGNvbnN0OwogICAgc3Rh
dGljIGludCBSVFRJOwoKcHJvdGVjdGVkOgogICAgdmlydHVhbCB2b2lkIGRyYXcoUVBhaW50ZXIm
KTsKCnByaXZhdGU6CiAgICB2b2lkIGFkZFRvQ2h1bmtzKCk7CiAgICB2b2lkIHJlbW92ZUZyb21D
aHVua3MoKTsKICAgIHZvaWQgY2hhbmdlQ2h1bmtzKCk7CgogICAgdm9pZCBzZXRSZWN0KCk7CiAg
ICBRUmVjdCBicmVjdDsKICAgIFFTdHJpbmcgdHh0OwogICAgaW50IGZsYWdzOwogICAgUUZvbnQg
Zm50OwogICAgUUNvbG9yIGNvbDsKICAgIFFDYW52YXNUZXh0RXh0cmEqIGV4dHJhOwoKICAgIGJv
b2wgY29sbGlkZXNXaXRoKCAgIGNvbnN0IFFDYW52YXNTcHJpdGUqLAoJCQkgY29uc3QgUUNhbnZh
c1BvbHlnb25hbEl0ZW0qLAoJCQkgY29uc3QgUUNhbnZhc1JlY3RhbmdsZSosCgkJCSBjb25zdCBR
Q2FudmFzRWxsaXBzZSosCgkJCSBjb25zdCBRQ2FudmFzVGV4dCogKSBjb25zdDsKfTsKCgoKCgoj
IDQgImNhbnZhc3RleHQuaCIgMgoKCmNsYXNzIFFGb250OwoKCmNsYXNzIENhbnZhc1RleHQgOiBw
dWJsaWMgUUNhbnZhc1RleHQKewpwdWJsaWM6CiAgICBlbnVtIHsgQ0FOVkFTX1RFWFQgPSAxMTAw
IH07CgogICAgQ2FudmFzVGV4dCggaW50IGluZGV4LCBRQ2FudmFzICpjYW52YXMgKQoJOiBRQ2Fu
dmFzVGV4dCggY2FudmFzICksIG1faW5kZXgoIGluZGV4ICkge30KICAgIENhbnZhc1RleHQoIGlu
dCBpbmRleCwgY29uc3QgUVN0cmluZyYgdGV4dCwgUUNhbnZhcyAqY2FudmFzICkKCTogUUNhbnZh
c1RleHQoIHRleHQsIGNhbnZhcyApLCBtX2luZGV4KCBpbmRleCApIHt9CiAgICBDYW52YXNUZXh0
KCBpbnQgaW5kZXgsIGNvbnN0IFFTdHJpbmcmIHRleHQsIFFGb250IGZvbnQsIFFDYW52YXMgKmNh
bnZhcyApCgk6IFFDYW52YXNUZXh0KCB0ZXh0LCBmb250LCBjYW52YXMgKSwgbV9pbmRleCggaW5k
ZXggKSB7fQoKICAgIGludCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KICAgIHZv
aWQgc2V0SW5kZXgoIGludCBpbmRleCApIHsgbV9pbmRleCA9IGluZGV4OyB9CgogICAgaW50IHJ0
dGkoKSBjb25zdCB7IHJldHVybiBDQU5WQVNfVEVYVDsgfQoKcHJpdmF0ZToKICAgIGludCBtX2lu
ZGV4Owp9OwoKCgojIDUgImNhbnZhc3ZpZXcuaCIgMgoKCgoKCmNsYXNzIFFQb2ludDsKCgpjbGFz
cyBDYW52YXNWaWV3IDogcHVibGljIFFDYW52YXNWaWV3CnsKICAgIHB1YmxpYzoJdmlydHVhbCBR
TWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY01ldGFPYmplY3Qo
KTsJfQl2aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0Owl2aXJ0dWFsIHZvaWQq
IHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZpcnR1YWwgYm9vbCBxdF9pbnZva2UoIGludCwgUVVP
YmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9lbWl0KCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFs
IGJvb2wgcXRfcHJvcGVydHkoIGludCwgaW50LCBRVmFyaWFudCogKTsgCXN0YXRpYyBRTWV0YU9i
amVjdCogc3RhdGljTWV0YU9iamVjdCgpOwlRT2JqZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4gKFFP
YmplY3QqKXRoaXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh
ciAqID0gMCApOyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh
ciAqID0gMCApOyAJcHJpdmF0ZToJc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOyAKcHVibGlj
OgogICAgQ2FudmFzVmlldyggUUNhbnZhcyAqY2FudmFzLCBFbGVtZW50VmVjdG9yICplbGVtZW50
cywKCQlRV2lkZ2V0KiBwYXJlbnQgPSAwLCBjb25zdCBjaGFyKiBuYW1lID0gImNhbnZhcyB2aWV3
IiwKCQlXRmxhZ3MgZiA9IDAgKQoJOiBRQ2FudmFzVmlldyggY2FudmFzLCBwYXJlbnQsIG5hbWUs
IGYgKSwKCSAgbV9lbGVtZW50cyggZWxlbWVudHMgKSB7fQoKcHJvdGVjdGVkOgogICAgdm9pZCB2
aWV3cG9ydFJlc2l6ZUV2ZW50KCBRUmVzaXplRXZlbnQgKmUgKTsKICAgIHZvaWQgY29udGVudHNN
b3VzZVByZXNzRXZlbnQoIFFNb3VzZUV2ZW50ICplICk7CiAgICB2b2lkIGNvbnRlbnRzTW91c2VN
b3ZlRXZlbnQoIFFNb3VzZUV2ZW50ICplICk7CiAgICB2b2lkIGNvbnRlbnRzQ29udGV4dE1lbnVF
dmVudCggUUNvbnRleHRNZW51RXZlbnQgKmUgKTsKCnByaXZhdGU6CiAgICBRQ2FudmFzSXRlbSAq
bV9tb3ZpbmdJdGVtOwogICAgUVBvaW50IG1fcG9zOwogICAgRWxlbWVudFZlY3RvciAqbV9lbGVt
ZW50czsKfTsKCgoKIyAxICJjaGFydGZvcm1fZmlsZXMuY3BwIiAyCgojIDEgImNoYXJ0Zm9ybS5o
IiAxCgoKCgoKIyAxICIvdXNyL2xvY2FsL3F0L2luY2x1ZGUvcW1haW53aW5kb3cuaCIgMQogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2xvY2FsL3F0
L2luY2x1ZGUvcXRvb2xiYXIuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgojIDEgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xZG9ja3dpbmRvdy5oIiAxCiAKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKY2xhc3MgUURvY2tXaW5k
b3dIYW5kbGU7CmNsYXNzIFFEb2NrV2luZG93VGl0bGVCYXI7CmNsYXNzIFFQYWludGVyOwpjbGFz
cyBRRG9ja1dpbmRvd1Jlc2l6ZUhhbmRsZTsKY2xhc3MgUUJveExheW91dDsKY2xhc3MgUUhCb3hM
YXlvdXQ7CmNsYXNzIFFWQm94TGF5b3V0OwpjbGFzcyBRRG9ja0FyZWE7CmNsYXNzIFFXaWRnZXRS
ZXNpemVIYW5kbGVyOwpjbGFzcyBRTWFpbldpbmRvdzsKY2xhc3MgUURvY2tBcmVhTGF5b3V0Owpj
bGFzcyBRRG9ja1dpbmRvd1ByaXZhdGU7CgpjbGFzcyAgIFFEb2NrV2luZG93IDogcHVibGljIFFG
cmFtZQp7CiAgICBwdWJsaWM6CXZpcnR1YWwgUU1ldGFPYmplY3QgKm1ldGFPYmplY3QoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7CX0JdmlydHVhbCBjb25zdCBjaGFyICpjbGFz
c05hbWUoKSBjb25zdDsJdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBjb25zdCBjaGFyKiApOyB2aXJ0
dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfZW1p
dCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X3Byb3BlcnR5KCBpbnQsIGludCwg
UVZhcmlhbnQqICk7IAlzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmplY3QoKTsJUU9i
amVjdCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9IHN0YXRpYyBRU3RyaW5n
IHRyKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgc3RhdGljIFFTdHJpbmcgdHJV
dGY4KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgCXByaXZhdGU6CXN0YXRpYyBR
TWV0YU9iamVjdCAqbWV0YU9iajsgCiAgICAgCiAgICAgICAKICAgICAKICAgICAKICAgICAKICAg
ICAKICAgICAKICAgICAKICAgICAKICAgICAKICAgICAKCiAgICBmcmllbmQgY2xhc3MgUURvY2tX
aW5kb3dIYW5kbGU7CiAgICBmcmllbmQgY2xhc3MgUURvY2tXaW5kb3dUaXRsZUJhcjsKICAgIGZy
aWVuZCBjbGFzcyBRRG9ja0FyZWE7CiAgICBmcmllbmQgY2xhc3MgUURvY2tBcmVhTGF5b3V0Owog
ICAgZnJpZW5kIGNsYXNzIFFNYWluV2luZG93OwoKcHVibGljOgogICAgZW51bSBQbGFjZSB7IElu
RG9jaywgT3V0c2lkZURvY2sgfTsKICAgIGVudW0gQ2xvc2VNb2RlIHsgTmV2ZXIgPSAwLCBEb2Nr
ZWQgPSAxLCBVbmRvY2tlZCA9IDIsIEFsd2F5cyA9IERvY2tlZCB8IFVuZG9ja2VkIH07CgogICAg
UURvY2tXaW5kb3coIFBsYWNlIHAgPSBJbkRvY2ssIFFXaWRnZXQqIHBhcmVudD0wLCBjb25zdCBj
aGFyKiBuYW1lPTAsIFdGbGFncyBmID0gMCApOwogICAgflFEb2NrV2luZG93KCk7CgogICAgdmly
dHVhbCB2b2lkIHNldFdpZGdldCggUVdpZGdldCAqdyApOwogICAgUVdpZGdldCAqd2lkZ2V0KCkg
Y29uc3Q7CgogICAgUGxhY2UgcGxhY2UoKSBjb25zdCB7IHJldHVybiBjdXJQbGFjZTsgfQoKICAg
IFFEb2NrQXJlYSAqYXJlYSgpIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBzZXRDbG9zZU1vZGUo
IGludCBtICk7CiAgICBib29sIGlzQ2xvc2VFbmFibGVkKCkgY29uc3Q7CiAgICBpbnQgY2xvc2VN
b2RlKCkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIHNldFJlc2l6ZUVuYWJsZWQoIGJvb2wgYiAp
OwogICAgdmlydHVhbCB2b2lkIHNldE1vdmluZ0VuYWJsZWQoIGJvb2wgYiApOwogICAgYm9vbCBp
c1Jlc2l6ZUVuYWJsZWQoKSBjb25zdDsKICAgIGJvb2wgaXNNb3ZpbmdFbmFibGVkKCkgY29uc3Q7
CgogICAgdmlydHVhbCB2b2lkIHNldEhvcml6b250YWxseVN0cmV0Y2hhYmxlKCBib29sIGIgKTsK
ICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJ0aWNhbGx5U3RyZXRjaGFibGUoIGJvb2wgYiApOwogICAg
Ym9vbCBpc0hvcml6b250YWxseVN0cmV0Y2hhYmxlKCkgY29uc3Q7CiAgICBib29sIGlzVmVydGlj
YWxseVN0cmV0Y2hhYmxlKCkgY29uc3Q7CiAgICB2b2lkIHNldEhvcml6b250YWxTdHJldGNoYWJs
ZSggYm9vbCBiICkgeyBzZXRIb3Jpem9udGFsbHlTdHJldGNoYWJsZSggYiApOyB9CiAgICB2b2lk
IHNldFZlcnRpY2FsU3RyZXRjaGFibGUoIGJvb2wgYiApIHsgc2V0VmVydGljYWxseVN0cmV0Y2hh
YmxlKCBiICk7IH0KICAgIGJvb2wgaXNIb3Jpem9udGFsU3RyZXRjaGFibGUoKSBjb25zdCB7IHJl
dHVybiBpc0hvcml6b250YWxseVN0cmV0Y2hhYmxlKCk7IH0KICAgIGJvb2wgaXNWZXJ0aWNhbFN0
cmV0Y2hhYmxlKCkgY29uc3QgeyByZXR1cm4gaXNWZXJ0aWNhbGx5U3RyZXRjaGFibGUoKTsgfQog
ICAgYm9vbCBpc1N0cmV0Y2hhYmxlKCkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIHNldE9mZnNl
dCggaW50IG8gKTsKICAgIGludCBvZmZzZXQoKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0
Rml4ZWRFeHRlbnRXaWR0aCggaW50IHcgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRGaXhlZEV4dGVu
dEhlaWdodCggaW50IGggKTsKICAgIFFTaXplIGZpeGVkRXh0ZW50KCkgY29uc3Q7CgogICAgdmly
dHVhbCB2b2lkIHNldE5ld0xpbmUoIGJvb2wgYiApOwogICAgYm9vbCBuZXdMaW5lKCkgY29uc3Q7
CgogICAgUXQ6Ok9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3Q7CgogICAgUVNpemUgc2l6
ZUhpbnQoKSBjb25zdDsKICAgIFFTaXplIG1pbmltdW1TaXplKCkgY29uc3Q7CiAgICBRU2l6ZSBt
aW5pbXVtU2l6ZUhpbnQoKSBjb25zdDsKCiAgICBRQm94TGF5b3V0ICpib3hMYXlvdXQoKTsKCiAg
ICB2aXJ0dWFsIHZvaWQgc2V0T3BhcXVlTW92aW5nKCBib29sIGIgKTsKICAgIGJvb2wgb3BhcXVl
TW92aW5nKCkgY29uc3Q7CgogICAgYm9vbCBldmVudEZpbHRlciggUU9iamVjdCAqbywgUUV2ZW50
ICplICk7CgoKCgoKcHJvdGVjdGVkIDoKICAgIHZvaWQgb3JpZW50YXRpb25DaGFuZ2VkKCBPcmll
bnRhdGlvbiBvICk7CiAgICB2b2lkIHBsYWNlQ2hhbmdlZCggUURvY2tXaW5kb3c6OlBsYWNlIHAg
KTsKICAgIHZvaWQgdmlzaWJpbGl0eUNoYW5nZWQoIGJvb2wgKTsKCnB1YmxpYyAgOgogICAgdmly
dHVhbCB2b2lkIHVuZG9jayggUVdpZGdldCAqdyApOwogICAgdmlydHVhbCB2b2lkIHVuZG9jaygp
IHsgdW5kb2NrKCAwICk7IH0KICAgIHZpcnR1YWwgdm9pZCBkb2NrKCk7CiAgICB2aXJ0dWFsIHZv
aWQgc2V0T3JpZW50YXRpb24oIE9yaWVudGF0aW9uIG8gKTsKICAgIHZvaWQgc2V0Q2FwdGlvbigg
Y29uc3QgUVN0cmluZyAmcyApOwoKcHJvdGVjdGVkOgogICAgdm9pZCByZXNpemVFdmVudCggUVJl
c2l6ZUV2ZW50ICplICk7CiAgICB2b2lkIHNob3dFdmVudCggUVNob3dFdmVudCAqZSApOwogICAg
dm9pZCBoaWRlRXZlbnQoIFFIaWRlRXZlbnQgKmUgKTsKICAgIHZvaWQgY29udGV4dE1lbnVFdmVu
dCggUUNvbnRleHRNZW51RXZlbnQgKmUgKTsKCiAgICB2b2lkIGRyYXdGcmFtZSggUVBhaW50ZXIg
KiApOwoKICAgIGJvb2wgZXZlbnQoIFFFdmVudCAqZSApOwoKcHJpdmF0ZSAgOgogICAgdm9pZCB0
b2dnbGVWaXNpYmxlKCkgeyBpZiAoICFpc1Zpc2libGUoKSApIHNob3coKTsgZWxzZSBoaWRlKCk7
IH0KCnByaXZhdGU6CiAgICB2b2lkIGhhbmRsZU1vdmUoIGNvbnN0IFFQb2ludCAmcG9zLCBjb25z
dCBRUG9pbnQgJmdwLCBib29sIGRyYXdSZWN0ICk7CiAgICB2b2lkIHVwZGF0ZUd1aSgpOwogICAg
dm9pZCB1cGRhdGVTcGxpdHRlclZpc2liaWxpdHkoIGJvb2wgdmlzaWJsZSApOwoKICAgIHZvaWQg
c3RhcnRSZWN0RHJhdyggY29uc3QgUVBvaW50ICZzbywgYm9vbCBkcmF3UmVjdCApOwogICAgdm9p
ZCBlbmRSZWN0RHJhdyggYm9vbCBkcmF3UmVjdCApOwogICAgdm9pZCB1cGRhdGVQb3NpdGlvbigg
Y29uc3QgUVBvaW50ICZnbG9iYWxQb3MgICk7CiAgICBRV2lkZ2V0ICphcmVhQXQoIGNvbnN0IFFQ
b2ludCAmZ3AgKTsKICAgIHZvaWQgcmVtb3ZlRnJvbURvY2soIGJvb2wgZml4TmV3TGluZXMgPSBU
UlVFICk7CiAgICB2b2lkIHN3YXBSZWN0KCBRUmVjdCAmciwgUXQ6Ok9yaWVudGF0aW9uIG8sIGNv
bnN0IFFQb2ludCAmb2Zmc2V0LCBRRG9ja0FyZWEgKmFyZWEgKTsKCnByaXZhdGU6CiAgICBRRG9j
a1dpbmRvd0hhbmRsZSAqaG9ySGFuZGxlLCAqdmVySGFuZGxlOwogICAgUURvY2tXaW5kb3dUaXRs
ZUJhciAqdGl0bGVCYXI7CiAgICBRV2lkZ2V0ICp3aWQ7CiAgICBRUGFpbnRlciAqdW5jbGlwcGVk
UGFpbnRlcjsKICAgIFFEb2NrQXJlYSAqZG9ja0FyZWEsICp0bXBEb2NrQXJlYTsKICAgIFFSZWN0
IGN1cnJSZWN0OwogICAgUGxhY2UgY3VyUGxhY2U7CiAgICBQbGFjZSBzdGF0ZTsKICAgIGJvb2wg
cmVzaXplRW5hYmxlZCA6IDE7CiAgICBib29sIG1vdmVFbmFibGVkIDogMTsKICAgIGJvb2wgbmwg
OiAxOwogICAgYm9vbCBvcGFxdWUgOiAxOwogICAgYm9vbCBzdHJldGNoYWJsZVsgMyBdOwogICAg
T3JpZW50YXRpb24gc3RhcnRPcmllbnRhdGlvbjsKICAgIGludCBjTW9kZTsKICAgIFFQb2ludCBz
dGFydE9mZnNldDsKICAgIGludCBvZmZzOwogICAgUVNpemUgZkV4dGVudDsKICAgIFFEb2NrV2lu
ZG93UmVzaXplSGFuZGxlICpoSGFuZGxlVG9wLCAqaEhhbmRsZUJvdHRvbSwgKnZIYW5kbGVMZWZ0
LCAqdkhhbmRsZVJpZ2h0OwogICAgUVZCb3hMYXlvdXQgKmhib3g7CiAgICBRSEJveExheW91dCAq
dmJveDsKICAgIFFCb3hMYXlvdXQgKmxheW91dDsKICAgIHZvaWQgKmRvY2tXaW5kb3dEYXRhOwog
ICAgUVBvaW50IGxhc3RQb3M7CiAgICBRU2l6ZSBsYXN0U2l6ZTsKICAgIFFXaWRnZXRSZXNpemVI
YW5kbGVyICp3aWRnZXRSZXNpemVIYW5kbGVyOwogICAgUURvY2tXaW5kb3dQcml2YXRlICpkOwoK
cHJpdmF0ZToJIAoKICAgIFFEb2NrV2luZG93KCBjb25zdCBRRG9ja1dpbmRvdyAmICk7CiAgICBR
RG9ja1dpbmRvdyYgb3BlcmF0b3I9KCBjb25zdCBRRG9ja1dpbmRvdyAmICk7Cgp9OwoKaW5saW5l
IFFEb2NrQXJlYSAqUURvY2tXaW5kb3c6OmFyZWEoKSBjb25zdAp7CiAgICByZXR1cm4gZG9ja0Fy
ZWE7Cn0KCgoKCiMgNDIgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xdG9vbGJhci5oIiAyCgoKCgoK
Y2xhc3MgUU1haW5XaW5kb3c7CmNsYXNzIFFCdXR0b247CmNsYXNzIFFCb3hMYXlvdXQ7CmNsYXNz
IFFUb29sQmFyUHJpdmF0ZTsKCmNsYXNzICAgUVRvb2xCYXI6IHB1YmxpYyBRRG9ja1dpbmRvdwp7
CiAgICBwdWJsaWM6CXZpcnR1YWwgUU1ldGFPYmplY3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7CX0JdmlydHVhbCBjb25zdCBjaGFyICpjbGFzc05hbWUo
KSBjb25zdDsJdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBjb25zdCBjaGFyKiApOyB2aXJ0dWFsIGJv
b2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfZW1pdCggaW50
LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X3Byb3BlcnR5KCBpbnQsIGludCwgUVZhcmlh
bnQqICk7IAlzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmplY3QoKTsJUU9iamVjdCog
cU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9IHN0YXRpYyBRU3RyaW5nIHRyKCBj
b25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgc3RhdGljIFFTdHJpbmcgdHJVdGY4KCBj
b25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgCXByaXZhdGU6CXN0YXRpYyBRTWV0YU9i
amVjdCAqbWV0YU9iajsgCiAgICAgCgpwdWJsaWM6CiAgICBRVG9vbEJhciggY29uc3QgUVN0cmlu
ZyAmbGFiZWwsCgkgICAgICBRTWFpbldpbmRvdyAqLCBUb29sQmFyRG9jayA9IERvY2tUb3AsCgkg
ICAgICBib29sIG5ld0xpbmUgPSBGQUxTRSwgY29uc3QgY2hhciogbmFtZT0wICk7CiAgICBRVG9v
bEJhciggY29uc3QgUVN0cmluZyAmbGFiZWwsIFFNYWluV2luZG93ICosIFFXaWRnZXQgKiwKCSAg
ICAgIGJvb2wgbmV3TGluZSA9IEZBTFNFLCBjb25zdCBjaGFyKiBuYW1lPTAsIFdGbGFncyBmID0g
MCApOwogICAgUVRvb2xCYXIoIFFNYWluV2luZG93KiBwYXJlbnQ9MCwgY29uc3QgY2hhciogbmFt
ZT0wICk7CiAgICB+UVRvb2xCYXIoKTsKCiAgICB2b2lkIGFkZFNlcGFyYXRvcigpOwoKICAgIHZv
aWQgc2hvdygpOwogICAgdm9pZCBoaWRlKCk7CgogICAgUU1haW5XaW5kb3cgKiBtYWluV2luZG93
KCkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIHNldFN0cmV0Y2hhYmxlV2lkZ2V0KCBRV2lkZ2V0
ICogKTsKCiAgICBib29sIGV2ZW50KCBRRXZlbnQgKiBlICk7CgogICAgdmlydHVhbCB2b2lkIHNl
dExhYmVsKCBjb25zdCBRU3RyaW5nICYgKTsKICAgIFFTdHJpbmcgbGFiZWwoKSBjb25zdDsKCiAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXIoKTsKCiAgICBRU2l6ZSBtaW5pbXVtU2l6ZSgpIGNvbnN0Owog
ICAgUVNpemUgbWluaW11bVNpemVIaW50KCkgY29uc3Q7CgogICAgdm9pZCBzZXRPcmllbnRhdGlv
biggT3JpZW50YXRpb24gbyApOwogICAgdm9pZCBzZXRNaW5pbXVtU2l6ZSggaW50IG1pbncsIGlu
dCBtaW5oICk7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIHJlc2l6ZUV2ZW50KCBRUmVzaXplRXZlbnQg
KmUgKTsKICAgIHZvaWQgc3R5bGVDaGFuZ2UoIFFTdHlsZSAmICk7Cgpwcml2YXRlICA6CiAgICB2
b2lkIHBvcHVwU2VsZWN0ZWQoIGludCBpZCApOwogICAgdm9pZCBlbXVsYXRlQnV0dG9uQ2xpY2tl
ZCgpOwogICAgdm9pZCBzZXR1cEFycm93TWVudSgpOwoKcHJpdmF0ZToKICAgIHZvaWQgaW5pdCgp
OwoKICAgIFFUb29sQmFyUHJpdmF0ZSAqIGQ7CiAgICBRTWFpbldpbmRvdyAqIG13OwogICAgUVdp
ZGdldCAqIHN3OwogICAgUVN0cmluZyBsOwoKICAgIGZyaWVuZCBjbGFzcyBRTWFpbldpbmRvdzsK
CnByaXZhdGU6CSAKCiAgICBRVG9vbEJhciggY29uc3QgUVRvb2xCYXIgJiApOwogICAgUVRvb2xC
YXImIG9wZXJhdG9yPSggY29uc3QgUVRvb2xCYXIgJiApOwoKfTsKCgoKCiMgNDMgIi91c3IvbG9j
YWwvcXQvaW5jbHVkZS9xbWFpbndpbmRvdy5oIiAyCgoKCgoKCgpjbGFzcyBRTWVudUJhcjsKY2xh
c3MgUVN0YXR1c0JhcjsKY2xhc3MgUVRvb2xUaXBHcm91cDsKY2xhc3MgUU1haW5XaW5kb3dQcml2
YXRlOwpjbGFzcyBRTWFpbldpbmRvd0xheW91dDsKY2xhc3MgUVBvcHVwTWVudTsKCmNsYXNzICAg
UU1haW5XaW5kb3c6IHB1YmxpYyBRV2lkZ2V0CnsKICAgIHB1YmxpYzoJdmlydHVhbCBRTWV0YU9i
amVjdCAqbWV0YU9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY01ldGFPYmplY3QoKTsJfQl2
aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgpIGNvbnN0Owl2aXJ0dWFsIHZvaWQqIHF0X2Nh
c3QoIGNvbnN0IGNoYXIqICk7IHZpcnR1YWwgYm9vbCBxdF9pbnZva2UoIGludCwgUVVPYmplY3Qq
ICk7IHZpcnR1YWwgYm9vbCBxdF9lbWl0KCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wg
cXRfcHJvcGVydHkoIGludCwgaW50LCBRVmFyaWFudCogKTsgCXN0YXRpYyBRTWV0YU9iamVjdCog
c3RhdGljTWV0YU9iamVjdCgpOwlRT2JqZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4gKFFPYmplY3Qq
KXRoaXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0g
MCApOyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0g
MCApOyAJcHJpdmF0ZToJc3RhdGljIFFNZXRhT2JqZWN0ICptZXRhT2JqOyAKICAgICAKICAgICAK
ICAgICAKICAgICAKICAgICAKCnB1YmxpYzoKICAgIFFNYWluV2luZG93KCBRV2lkZ2V0KiBwYXJl
bnQ9MCwgY29uc3QgY2hhciogbmFtZT0wLCBXRmxhZ3MgZiA9IFdUeXBlX1RvcExldmVsICk7CiAg
ICB+UU1haW5XaW5kb3coKTsKCgogICAgUU1lbnVCYXIgKiBtZW51QmFyKCkgY29uc3Q7CgogICAg
UVN0YXR1c0JhciAqIHN0YXR1c0JhcigpIGNvbnN0OwoKICAgIFFUb29sVGlwR3JvdXAgKiB0b29s
VGlwR3JvdXAoKSBjb25zdDsKCgogICAgdmlydHVhbCB2b2lkIHNldENlbnRyYWxXaWRnZXQoIFFX
aWRnZXQgKiApOwogICAgUVdpZGdldCAqIGNlbnRyYWxXaWRnZXQoKSBjb25zdDsKCiAgICB2aXJ0
dWFsIHZvaWQgc2V0RG9ja0VuYWJsZWQoIERvY2sgZG9jaywgYm9vbCBlbmFibGUgKTsKICAgIGJv
b2wgaXNEb2NrRW5hYmxlZCggRG9jayBkb2NrICkgY29uc3Q7CiAgICBib29sIGlzRG9ja0VuYWJs
ZWQoIFFEb2NrQXJlYSAqYXJlYSApIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldERvY2tFbmFi
bGVkKCBRRG9ja1dpbmRvdyAqdGIsIERvY2sgZG9jaywgYm9vbCBlbmFibGUgKTsKICAgIGJvb2wg
aXNEb2NrRW5hYmxlZCggUURvY2tXaW5kb3cgKnRiLCBEb2NrIGRvY2sgKSBjb25zdDsKICAgIGJv
b2wgaXNEb2NrRW5hYmxlZCggUURvY2tXaW5kb3cgKnRiLCBRRG9ja0FyZWEgKmFyZWEgKSBjb25z
dDsKCiAgICB2aXJ0dWFsIHZvaWQgYWRkRG9ja1dpbmRvdyggUURvY2tXaW5kb3cgKiwgRG9jayA9
IERvY2tUb3AsIGJvb2wgbmV3TGluZSA9IEZBTFNFICk7CiAgICB2aXJ0dWFsIHZvaWQgYWRkRG9j
a1dpbmRvdyggUURvY2tXaW5kb3cgKiwgY29uc3QgUVN0cmluZyAmbGFiZWwsCgkJCQlEb2NrID0g
RG9ja1RvcCwgYm9vbCBuZXdMaW5lID0gRkFMU0UgKTsKICAgIHZpcnR1YWwgdm9pZCBtb3ZlRG9j
a1dpbmRvdyggUURvY2tXaW5kb3cgKiwgRG9jayA9IERvY2tUb3AgKTsKICAgIHZpcnR1YWwgdm9p
ZCBtb3ZlRG9ja1dpbmRvdyggUURvY2tXaW5kb3cgKiwgRG9jaywgYm9vbCBubCwgaW50IGluZGV4
LCBpbnQgZXh0cmFPZmZzZXQgPSAtMSApOwogICAgdmlydHVhbCB2b2lkIHJlbW92ZURvY2tXaW5k
b3coIFFEb2NrV2luZG93ICogKTsKCiAgICB2b2lkIHNob3coKTsKICAgIFFTaXplIHNpemVIaW50
KCkgY29uc3Q7CiAgICBRU2l6ZSBtaW5pbXVtU2l6ZUhpbnQoKSBjb25zdDsKCiAgICBib29sIHJp
Z2h0SnVzdGlmaWNhdGlvbigpIGNvbnN0OwogICAgYm9vbCB1c2VzQmlnUGl4bWFwcygpIGNvbnN0
OwogICAgYm9vbCB1c2VzVGV4dExhYmVsKCkgY29uc3Q7CiAgICBib29sIGRvY2tXaW5kb3dzTW92
YWJsZSgpIGNvbnN0OwogICAgYm9vbCBvcGFxdWVNb3ZpbmcoKSBjb25zdDsKCiAgICBib29sIGV2
ZW50RmlsdGVyKCBRT2JqZWN0KiwgUUV2ZW50KiApOwoKICAgIGJvb2wgZ2V0TG9jYXRpb24oIFFE
b2NrV2luZG93ICp0YiwgRG9jayAmZG9jaywgaW50ICZpbmRleCwgYm9vbCAmbmwsIGludCAmZXh0
cmFPZmZzZXQgKSBjb25zdDsKCiAgICBRUHRyTGlzdDxRRG9ja1dpbmRvdz4gZG9ja1dpbmRvd3Mo
IERvY2sgZG9jayApIGNvbnN0OwogICAgUVB0ckxpc3Q8UURvY2tXaW5kb3c+IGRvY2tXaW5kb3dz
KCkgY29uc3Q7CiAgICB2b2lkIGxpbmVVcERvY2tXaW5kb3dzKCBib29sIGtlZXBOZXdMaW5lcyA9
IEZBTFNFICk7CgogICAgYm9vbCBpc0RvY2tNZW51RW5hYmxlZCgpIGNvbnN0OwoKICAgICAKICAg
IGJvb2wgaGFzRG9ja1dpbmRvdyggUURvY2tXaW5kb3cgKmR3ICk7CgogICAgdm9pZCBhZGRUb29s
QmFyKCBRRG9ja1dpbmRvdyAqLCBEb2NrID0gRG9ja1RvcCwgYm9vbCBuZXdMaW5lID0gRkFMU0Ug
KTsKICAgIHZvaWQgYWRkVG9vbEJhciggUURvY2tXaW5kb3cgKiwgY29uc3QgUVN0cmluZyAmbGFi
ZWwsCgkJICAgICBEb2NrID0gRG9ja1RvcCwgYm9vbCBuZXdMaW5lID0gRkFMU0UgKTsKICAgIHZv
aWQgbW92ZVRvb2xCYXIoIFFEb2NrV2luZG93ICosIERvY2sgPSBEb2NrVG9wICk7CiAgICB2b2lk
IG1vdmVUb29sQmFyKCBRRG9ja1dpbmRvdyAqLCBEb2NrLCBib29sIG5sLCBpbnQgaW5kZXgsIGlu
dCBleHRyYU9mZnNldCA9IC0xICk7CiAgICB2b2lkIHJlbW92ZVRvb2xCYXIoIFFEb2NrV2luZG93
ICogKTsKCiAgICBib29sIHRvb2xCYXJzTW92YWJsZSgpIGNvbnN0OwogICAgUVB0ckxpc3Q8UVRv
b2xCYXI+IHRvb2xCYXJzKCBEb2NrIGRvY2sgKSBjb25zdDsKICAgIHZvaWQgbGluZVVwVG9vbEJh
cnMoIGJvb2wga2VlcE5ld0xpbmVzID0gRkFMU0UgKTsKCgogICAgdmlydHVhbCBRRG9ja0FyZWEg
KmRvY2tpbmdBcmVhKCBjb25zdCBRUG9pbnQgJnAgKTsKICAgIFFEb2NrQXJlYSAqbGVmdERvY2so
KSBjb25zdDsKICAgIFFEb2NrQXJlYSAqcmlnaHREb2NrKCkgY29uc3Q7CiAgICBRRG9ja0FyZWEg
KnRvcERvY2soKSBjb25zdDsKICAgIFFEb2NrQXJlYSAqYm90dG9tRG9jaygpIGNvbnN0OwoKICAg
IHZpcnR1YWwgYm9vbCBpc0N1c3RvbWl6YWJsZSgpIGNvbnN0OwoKICAgIGJvb2wgYXBwcm9wcmlh
dGUoIFFEb2NrV2luZG93ICpkdyApIGNvbnN0OwoKICAgIGVudW0gRG9ja1dpbmRvd3MgeyBPbmx5
VG9vbEJhcnMsIE5vVG9vbEJhcnMsIEFsbERvY2tXaW5kb3dzIH07CiAgICBRUG9wdXBNZW51ICpj
cmVhdGVEb2NrV2luZG93TWVudSggRG9ja1dpbmRvd3MgZG9ja1dpbmRvd3MgPSBBbGxEb2NrV2lu
ZG93cyApIGNvbnN0OwoKcHVibGljICA6CiAgICB2aXJ0dWFsIHZvaWQgc2V0UmlnaHRKdXN0aWZp
Y2F0aW9uKCBib29sICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0VXNlc0JpZ1BpeG1hcHMoIGJvb2wg
KTsKICAgIHZpcnR1YWwgdm9pZCBzZXRVc2VzVGV4dExhYmVsKCBib29sICk7CiAgICB2aXJ0dWFs
IHZvaWQgc2V0RG9ja1dpbmRvd3NNb3ZhYmxlKCBib29sICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0
T3BhcXVlTW92aW5nKCBib29sICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0RG9ja01lbnVFbmFibGVk
KCBib29sICk7CiAgICB2aXJ0dWFsIHZvaWQgd2hhdHNUaGlzKCk7CiAgICB2aXJ0dWFsIHZvaWQg
c2V0QXBwcm9wcmlhdGUoIFFEb2NrV2luZG93ICpkdywgYm9vbCBhICk7CiAgICB2aXJ0dWFsIHZv
aWQgY3VzdG9taXplKCk7CgogICAgIAogICAgdm9pZCBzZXRUb29sQmFyc01vdmFibGUoIGJvb2wg
KTsKCnByb3RlY3RlZCA6CiAgICB2b2lkIHBpeG1hcFNpemVDaGFuZ2VkKCBib29sICk7CiAgICB2
b2lkIHVzZXNUZXh0TGFiZWxDaGFuZ2VkKCBib29sICk7CiAgICB2b2lkIGRvY2tXaW5kb3dQb3Np
dGlvbkNoYW5nZWQoIFFEb2NrV2luZG93ICogKTsKCgogICAgIAogICAgdm9pZCB0b29sQmFyUG9z
aXRpb25DaGFuZ2VkKCBRVG9vbEJhciAqICk7CgoKcHJvdGVjdGVkICA6CiAgICB2aXJ0dWFsIHZv
aWQgc2V0VXBMYXlvdXQoKTsKICAgIHZpcnR1YWwgYm9vbCBzaG93RG9ja01lbnUoIGNvbnN0IFFQ
b2ludCAmZ2xvYmFsUG9zICk7CiAgICB2b2lkIG1lbnVBYm91dFRvU2hvdygpOwoKcHJvdGVjdGVk
OgogICAgdm9pZCBwYWludEV2ZW50KCBRUGFpbnRFdmVudCAqICk7CiAgICB2b2lkIGNoaWxkRXZl
bnQoIFFDaGlsZEV2ZW50ICogKTsKICAgIGJvb2wgZXZlbnQoIFFFdmVudCAqICk7CiAgICB2b2lk
IHN0eWxlQ2hhbmdlKCBRU3R5bGUmICk7Cgpwcml2YXRlICA6CiAgICB2b2lkIHNsb3RQbGFjZUNo
YW5nZWQoKTsKICAgIHZvaWQgZG9MaW5lVXAoKSB7IGxpbmVVcERvY2tXaW5kb3dzKCBUUlVFICk7
IH0KCnByaXZhdGU6CiAgICBRTWFpbldpbmRvd1ByaXZhdGUgKiBkOwogICAgdm9pZCB0cmlnZ2Vy
TGF5b3V0KCBib29sIGRlbGV0ZUxheW91dCA9IFRSVUUpOwogICAgYm9vbCBkb2NrTWFpbldpbmRv
dyggUU9iamVjdCAqZG9jayApOwoKCiAgICB2aXJ0dWFsIHZvaWQgc2V0TWVudUJhciggUU1lbnVC
YXIgKiApOwoKICAgIHZpcnR1YWwgdm9pZCBzZXRTdGF0dXNCYXIoIFFTdGF0dXNCYXIgKiApOwoK
ICAgIHZpcnR1YWwgdm9pZCBzZXRUb29sVGlwR3JvdXAoIFFUb29sVGlwR3JvdXAgKiApOwoKCiAg
ICBmcmllbmQgY2xhc3MgUURvY2tXaW5kb3c7CiAgICBmcmllbmQgY2xhc3MgUU1lbnVCYXI7CiAg
ICBmcmllbmQgY2xhc3MgUUhpZGVEb2NrOwogICAgZnJpZW5kIGNsYXNzIFFUb29sQmFyOwogICAg
ZnJpZW5kIGNsYXNzIFFNYWluV2luZG93TGF5b3V0Owpwcml2YXRlOgkgCgogICAgUU1haW5XaW5k
b3coIGNvbnN0IFFNYWluV2luZG93ICYgKTsKICAgIFFNYWluV2luZG93JiBvcGVyYXRvcj0oIGNv
bnN0IFFNYWluV2luZG93ICYgKTsKCn07CgoKaW5saW5lIHZvaWQgUU1haW5XaW5kb3c6OmFkZFRv
b2xCYXIoIFFEb2NrV2luZG93ICp3LCBUb29sQmFyRG9jayBkb2NrLCBib29sIG5ld0xpbmUgKQp7
CiAgICBhZGREb2NrV2luZG93KCB3LCBkb2NrLCBuZXdMaW5lICk7Cn0KCmlubGluZSB2b2lkIFFN
YWluV2luZG93OjphZGRUb29sQmFyKCBRRG9ja1dpbmRvdyAqdywgY29uc3QgUVN0cmluZyAmbGFi
ZWwsCgkJCSAgICAgIFRvb2xCYXJEb2NrIGRvY2ssIGJvb2wgbmV3TGluZSApCnsKICAgIGFkZERv
Y2tXaW5kb3coIHcsIGxhYmVsLCBkb2NrLCBuZXdMaW5lICk7Cn0KCmlubGluZSB2b2lkIFFNYWlu
V2luZG93Ojptb3ZlVG9vbEJhciggUURvY2tXaW5kb3cgKncsIFRvb2xCYXJEb2NrIGRvY2sgKQp7
CiAgICBtb3ZlRG9ja1dpbmRvdyggdywgZG9jayApOwp9CgppbmxpbmUgdm9pZCBRTWFpbldpbmRv
dzo6bW92ZVRvb2xCYXIoIFFEb2NrV2luZG93ICp3LCBUb29sQmFyRG9jayBkb2NrLCBib29sIG5s
LCBpbnQgaW5kZXgsIGludCBleHRyYU9mZnNldCApCnsKICAgIG1vdmVEb2NrV2luZG93KCB3LCBk
b2NrLCBubCwgaW5kZXgsIGV4dHJhT2Zmc2V0ICk7Cn0KCmlubGluZSB2b2lkIFFNYWluV2luZG93
OjpyZW1vdmVUb29sQmFyKCBRRG9ja1dpbmRvdyAqdyApCnsKICAgIHJlbW92ZURvY2tXaW5kb3co
IHcgKTsKfQoKaW5saW5lIGJvb2wgUU1haW5XaW5kb3c6OnRvb2xCYXJzTW92YWJsZSgpIGNvbnN0
CnsKICAgIHJldHVybiBkb2NrV2luZG93c01vdmFibGUoKTsKfQoKaW5saW5lIHZvaWQgUU1haW5X
aW5kb3c6OmxpbmVVcFRvb2xCYXJzKCBib29sIGtlZXBOZXdMaW5lcyApCnsKICAgIGxpbmVVcERv
Y2tXaW5kb3dzKCBrZWVwTmV3TGluZXMgKTsKfQoKaW5saW5lIHZvaWQgUU1haW5XaW5kb3c6OnNl
dFRvb2xCYXJzTW92YWJsZSggYm9vbCBiICkKewogICAgc2V0RG9ja1dpbmRvd3NNb3ZhYmxlKCBi
ICk7Cn0KCgoKICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PCggUVRleHRTdHJlYW0gJiwgY29uc3Qg
UU1haW5XaW5kb3cgJiApOwogIFFUZXh0U3RyZWFtICZvcGVyYXRvcj4+KCBRVGV4dFN0cmVhbSAm
LCBRTWFpbldpbmRvdyAmICk7CgoKCgoKIyA2ICJjaGFydGZvcm0uaCIgMgoKIyAxICIvdXNyL2xv
Y2FsL3F0L2luY2x1ZGUvcXN0cmluZ2xpc3QuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3FzdHJsaXN0Lmgi
IDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCnR5cGVkZWYgUVB0ckxpc3RJdGVyYXRvcjxjaGFyPiBRU3RyTGlzdEl0ZXJhdG9yOwoKCmNs
YXNzICAgUVN0ckxpc3QgOiBwdWJsaWMgUVB0ckxpc3Q8Y2hhcj4KewpwdWJsaWM6CiAgICBRU3Ry
TGlzdCggYm9vbCBkZWVwQ29waWVzPVRSVUUgKSB7IGRjID0gZGVlcENvcGllczsgZGVsX2l0ZW0g
PSBkZWVwQ29waWVzOyB9CiAgICBRU3RyTGlzdCggY29uc3QgUVN0ckxpc3QgJiApOwogICAgflFT
dHJMaXN0KCkJCQl7IGNsZWFyKCk7IH0KICAgIFFTdHJMaXN0JiBvcGVyYXRvcj0oIGNvbnN0IFFT
dHJMaXN0ICYgKTsKCnByaXZhdGU6CiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSBuZXdJdGVtKCBR
UHRyQ29sbGVjdGlvbjo6SXRlbSBkICkgeyByZXR1cm4gZGMgPyBxc3RyZHVwKCAoY29uc3QgY2hh
ciopZCApIDogZDsgfQogICAgdm9pZCBkZWxldGVJdGVtKCBRUHRyQ29sbGVjdGlvbjo6SXRlbSBk
ICkgeyBpZiAoIGRlbF9pdGVtICkgZGVsZXRlW10gKGNoYXIqKWQ7IH0KICAgIGludCBjb21wYXJl
SXRlbXMoIFFQdHJDb2xsZWN0aW9uOjpJdGVtIHMxLCBRUHRyQ29sbGVjdGlvbjo6SXRlbSBzMiAp
IHsgcmV0dXJuIHFzdHJjbXAoKGNvbnN0IGNoYXIqKXMxLAoJCQkJCQkJIChjb25zdCBjaGFyKilz
Mik7IH0KCiAgICBRRGF0YVN0cmVhbSAmcmVhZCggUURhdGFTdHJlYW0gJnMsIFFQdHJDb2xsZWN0
aW9uOjpJdGVtICZkICkKCQkJCXsgcyA+PiAoY2hhciAqJilkOyByZXR1cm4gczsgfQogICAgUURh
dGFTdHJlYW0gJndyaXRlKCBRRGF0YVN0cmVhbSAmcywgUVB0ckNvbGxlY3Rpb246Okl0ZW0gZCAp
IGNvbnN0CgkJCQl7IHJldHVybiBzIDw8IChjb25zdCBjaGFyICopZDsgfQoKICAgIGJvb2wgIGRj
Owp9OwoKCmNsYXNzICAgUVN0cklMaXN0IDogcHVibGljIFFTdHJMaXN0CSAKewpwdWJsaWM6CiAg
ICBRU3RySUxpc3QoIGJvb2wgZGVlcENvcGllcz1UUlVFICkgOiBRU3RyTGlzdCggZGVlcENvcGll
cyApIHt9CiAgICB+UVN0cklMaXN0KCkJCQl7IGNsZWFyKCk7IH0KcHJpdmF0ZToKICAgIGludAkg
IGNvbXBhcmVJdGVtcyggUVB0ckNvbGxlY3Rpb246Okl0ZW0gczEsIFFQdHJDb2xsZWN0aW9uOjpJ
dGVtIHMyICkKCQkJCXsgcmV0dXJuIHFzdHJpY21wKChjb25zdCBjaGFyKilzMSwKCQkJCQkJICAg
IChjb25zdCBjaGFyKilzMik7IH0KfTsKCgppbmxpbmUgUVN0ckxpc3QgJiBRU3RyTGlzdDo6b3Bl
cmF0b3I9KCBjb25zdCBRU3RyTGlzdCAmc3RyTGlzdCApCnsKICAgIGNsZWFyKCk7CiAgICBkYyA9
IHN0ckxpc3QuZGM7CiAgICBkZWxfaXRlbSA9IGRjOwogICAgUVB0ckxpc3Q8Y2hhcj46Om9wZXJh
dG9yPSggc3RyTGlzdCApOwogICAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgUVN0ckxpc3Q6OlFT
dHJMaXN0KCBjb25zdCBRU3RyTGlzdCAmc3RyTGlzdCApCiAgICA6IFFQdHJMaXN0PGNoYXI+KCBz
dHJMaXN0ICkKewogICAgZGMgPSBGQUxTRTsKICAgIG9wZXJhdG9yPSggc3RyTGlzdCApOwp9CgoK
IyA0NCAiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3FzdHJpbmdsaXN0LmgiIDIKCgoKCgpjbGFzcyBR
UmVnRXhwOwoKY2xhc3MgICBRU3RyaW5nTGlzdCA6IHB1YmxpYyBRVmFsdWVMaXN0PFFTdHJpbmc+
CnsKcHVibGljOgogICAgUVN0cmluZ0xpc3QoKSB7IH0KICAgIFFTdHJpbmdMaXN0KCBjb25zdCBR
U3RyaW5nTGlzdCYgbCApIDogUVZhbHVlTGlzdDxRU3RyaW5nPihsKSB7IH0KICAgIFFTdHJpbmdM
aXN0KCBjb25zdCBRVmFsdWVMaXN0PFFTdHJpbmc+JiBsICkgOiBRVmFsdWVMaXN0PFFTdHJpbmc+
KGwpIHsgfQogICAgUVN0cmluZ0xpc3QoIGNvbnN0IFFTdHJpbmcmIGkgKSB7IGFwcGVuZChpKTsg
fQoKICAgIFFTdHJpbmdMaXN0KCBjb25zdCBjaGFyKiBpICkgeyBhcHBlbmQoaSk7IH0KCgogICAg
c3RhdGljIFFTdHJpbmdMaXN0IGZyb21TdHJMaXN0KGNvbnN0IFFTdHJMaXN0Jik7CgogICAgdm9p
ZCBzb3J0KCk7CgogICAgc3RhdGljIFFTdHJpbmdMaXN0IHNwbGl0KCBjb25zdCBRU3RyaW5nICZz
ZXAsIGNvbnN0IFFTdHJpbmcgJnN0ciwgYm9vbCBhbGxvd0VtcHR5RW50cmllcyA9IEZBTFNFICk7
CiAgICBzdGF0aWMgUVN0cmluZ0xpc3Qgc3BsaXQoIGNvbnN0IFFDaGFyICZzZXAsIGNvbnN0IFFT
dHJpbmcgJnN0ciwgYm9vbCBhbGxvd0VtcHR5RW50cmllcyA9IEZBTFNFICk7CgogICAgc3RhdGlj
IFFTdHJpbmdMaXN0IHNwbGl0KCBjb25zdCBRUmVnRXhwICZzZXAsIGNvbnN0IFFTdHJpbmcgJnN0
ciwgYm9vbCBhbGxvd0VtcHR5RW50cmllcyA9IEZBTFNFICk7CgogICAgUVN0cmluZyBqb2luKCBj
b25zdCBRU3RyaW5nICZzZXAgKSBjb25zdDsKCiAgICBRU3RyaW5nTGlzdCBncmVwKCBjb25zdCBR
U3RyaW5nICZzdHIsIGJvb2wgY3MgPSBUUlVFICkgY29uc3Q7CgogICAgUVN0cmluZ0xpc3QgZ3Jl
cCggY29uc3QgUVJlZ0V4cCAmZXhwciApIGNvbnN0OwoKfTsKCgpjbGFzcyBRRGF0YVN0cmVhbTsK
ZXh0ZXJuICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFTdHJpbmdM
aXN0JiApOwpleHRlcm4gICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwg
Y29uc3QgUVN0cmluZ0xpc3QmICk7CgoKCgojIDcgImNoYXJ0Zm9ybS5oIiAyCgoKCmNsYXNzIENh
bnZhc1ZpZXc7CgpjbGFzcyBRQWN0aW9uOwpjbGFzcyBRQ2FudmFzOwpjbGFzcyBRRm9udDsKY2xh
c3MgUVByaW50ZXI7CmNsYXNzIFFTdHJpbmc7CgoKY2xhc3MgQ2hhcnRGb3JtOiBwdWJsaWMgUU1h
aW5XaW5kb3cKewogICAgcHVibGljOgl2aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOwl9CXZpcnR1YWwgY29uc3QgY2hhciAq
Y2xhc3NOYW1lKCkgY29uc3Q7CXZpcnR1YWwgdm9pZCogcXRfY2FzdCggY29uc3QgY2hhciogKTsg
dmlydHVhbCBib29sIHF0X2ludm9rZSggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0
X2VtaXQoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50LCBp
bnQsIFFWYXJpYW50KiApOyAJc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7
CVFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBzdGF0aWMgUVN0
cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRpYyBRU3RyaW5n
IHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IAlwcml2YXRlOglzdGF0
aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7IApwdWJsaWM6CiAgICBlbnVtIHsgTUFYX0VMRU1FTlRT
ID0gMTAwIH07CiAgICBlbnVtIHsgTUFYX1JFQ0VOVEZJTEVTID0gOSB9OyAgCiAgICBlbnVtIENo
YXJ0VHlwZSB7IFBJRSwgVkVSVElDQUxfQkFSLCBIT1JJWk9OVEFMX0JBUiB9OwogICAgZW51bSBB
ZGRWYWx1ZXNUeXBlIHsgTk8sIFlFUywgQVNfUEVSQ0VOVEFHRSB9OwoKICAgIENoYXJ0Rm9ybSgg
Y29uc3QgUVN0cmluZyYgZmlsZW5hbWUgKTsKICAgIH5DaGFydEZvcm0oKTsKCiAgICBpbnQgY2hh
cnRUeXBlKCkgeyByZXR1cm4gbV9jaGFydFR5cGU7IH0KICAgIHZvaWQgc2V0Q2hhbmdlZCggYm9v
bCBjaGFuZ2VkID0gVFJVRSApIHsgbV9jaGFuZ2VkID0gY2hhbmdlZDsgfQogICAgdm9pZCBkcmF3
RWxlbWVudHMoKTsKCiAgICBRUG9wdXBNZW51ICpvcHRpb25zTWVudTsgIAoKcHJpdmF0ZSAgOgog
ICAgdm9pZCBmaWxlTmV3KCk7CiAgICB2b2lkIGZpbGVPcGVuKCk7CiAgICB2b2lkIGZpbGVPcGVu
UmVjZW50KCBpbnQgaW5kZXggKTsKICAgIHZvaWQgZmlsZVNhdmUoKTsKICAgIHZvaWQgZmlsZVNh
dmVBcygpOwogICAgdm9pZCBmaWxlU2F2ZUFzUGl4bWFwKCk7CiAgICB2b2lkIGZpbGVQcmludCgp
OwogICAgdm9pZCBmaWxlUXVpdCgpOwogICAgdm9pZCBvcHRpb25zU2V0RGF0YSgpOwogICAgdm9p
ZCB1cGRhdGVDaGFydFR5cGUoIFFBY3Rpb24gKmFjdGlvbiApOwogICAgdm9pZCBvcHRpb25zU2V0
Rm9udCgpOwogICAgdm9pZCBvcHRpb25zU2V0T3B0aW9ucygpOwogICAgdm9pZCBoZWxwSGVscCgp
OwogICAgdm9pZCBoZWxwQWJvdXQoKTsKICAgIHZvaWQgaGVscEFib3V0UXQoKTsKICAgIHZvaWQg
c2F2ZU9wdGlvbnMoKTsKCnByaXZhdGU6CiAgICB2b2lkIGluaXQoKTsKICAgIHZvaWQgbG9hZCgg
Y29uc3QgUVN0cmluZyYgZmlsZW5hbWUgKTsKICAgIGJvb2wgb2tUb0NsZWFyKCk7CiAgICB2b2lk
IGRyYXdQaWVDaGFydCggY29uc3QgZG91YmxlIHNjYWxlc1tdLCBkb3VibGUgdG90YWwsIGludCBj
b3VudCApOwogICAgdm9pZCBkcmF3VmVydGljYWxCYXJDaGFydCggY29uc3QgZG91YmxlIHNjYWxl
c1tdLCBkb3VibGUgdG90YWwsIGludCBjb3VudCApOwogICAgdm9pZCBkcmF3SG9yaXpvbnRhbEJh
ckNoYXJ0KCBjb25zdCBkb3VibGUgc2NhbGVzW10sIGRvdWJsZSB0b3RhbCwgaW50IGNvdW50ICk7
CgogICAgUVN0cmluZyB2YWx1ZUxhYmVsKCBjb25zdCBRU3RyaW5nJiBsYWJlbCwgZG91YmxlIHZh
bHVlLCBkb3VibGUgdG90YWwgKTsKICAgIHZvaWQgdXBkYXRlUmVjZW50RmlsZXMoIGNvbnN0IFFT
dHJpbmcmIGZpbGVuYW1lICk7CiAgICB2b2lkIHVwZGF0ZVJlY2VudEZpbGVzTWVudSgpOwogICAg
dm9pZCBzZXRDaGFydFR5cGUoIENoYXJ0VHlwZSBjaGFydFR5cGUgKTsKCiAgICBRUG9wdXBNZW51
ICpmaWxlTWVudTsKICAgIFFBY3Rpb24gKm9wdGlvbnNQaWVDaGFydEFjdGlvbjsKICAgIFFBY3Rp
b24gKm9wdGlvbnNIb3Jpem9udGFsQmFyQ2hhcnRBY3Rpb247CiAgICBRQWN0aW9uICpvcHRpb25z
VmVydGljYWxCYXJDaGFydEFjdGlvbjsKCgogICAgUVN0cmluZyBtX2ZpbGVuYW1lOwogICAgUVN0
cmluZ0xpc3QgbV9yZWNlbnRGaWxlczsKICAgIFFDYW52YXMgKm1fY2FudmFzOwogICAgQ2FudmFz
VmlldyAqbV9jYW52YXNWaWV3OwogICAgYm9vbCBtX2NoYW5nZWQ7CiAgICBFbGVtZW50VmVjdG9y
IG1fZWxlbWVudHM7CiAgICBRUHJpbnRlciAqbV9wcmludGVyOwogICAgQ2hhcnRUeXBlIG1fY2hh
cnRUeXBlOwogICAgQWRkVmFsdWVzVHlwZSBtX2FkZFZhbHVlczsKICAgIGludCBtX2RlY2ltYWxQ
bGFjZXM7CiAgICBRRm9udCBtX2ZvbnQ7Cn07CgoKIyAyICJjaGFydGZvcm1fZmlsZXMuY3BwIiAy
CgoKIyAxICIvdXNyL2xvY2FsL3F0L2luY2x1ZGUvcWZpbGUuaCIgMQogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmNsYXNzIFFEaXI7CgoKY2xhc3MgICBRRmls
ZSA6IHB1YmxpYyBRSU9EZXZpY2UJCQkgCnsKcHVibGljOgogICAgUUZpbGUoKTsKICAgIFFGaWxl
KCBjb25zdCBRU3RyaW5nICZuYW1lICk7CiAgIH5RRmlsZSgpOwoKICAgIFFTdHJpbmcJbmFtZSgp
CWNvbnN0OwogICAgdm9pZAlzZXROYW1lKCBjb25zdCBRU3RyaW5nICZuYW1lICk7CgogICAgdHlw
ZWRlZiBRQ1N0cmluZyAoKkVuY29kZXJGbikoIGNvbnN0IFFTdHJpbmcgJmZpbGVOYW1lICk7CiAg
ICB0eXBlZGVmIFFTdHJpbmcgKCpEZWNvZGVyRm4pKCBjb25zdCBRQ1N0cmluZyAmbG9jYWxmaWxl
TmFtZSApOwogICAgc3RhdGljIFFDU3RyaW5nIGVuY29kZU5hbWUoIGNvbnN0IFFTdHJpbmcgJmZp
bGVOYW1lICk7CiAgICBzdGF0aWMgUVN0cmluZyBkZWNvZGVOYW1lKCBjb25zdCBRQ1N0cmluZyAm
bG9jYWxGaWxlTmFtZSApOwogICAgc3RhdGljIHZvaWQgc2V0RW5jb2RpbmdGdW5jdGlvbiggRW5j
b2RlckZuICk7CiAgICBzdGF0aWMgdm9pZCBzZXREZWNvZGluZ0Z1bmN0aW9uKCBEZWNvZGVyRm4g
KTsKCiAgICBib29sCWV4aXN0cygpICAgY29uc3Q7CiAgICBzdGF0aWMgYm9vbCBleGlzdHMoIGNv
bnN0IFFTdHJpbmcgJmZpbGVOYW1lICk7CgogICAgYm9vbAlyZW1vdmUoKTsKICAgIHN0YXRpYyBi
b29sIHJlbW92ZSggY29uc3QgUVN0cmluZyAmZmlsZU5hbWUgKTsKCiAgICBib29sCW9wZW4oIGlu
dCApOwogICAgYm9vbAlvcGVuKCBpbnQsIEZJTEUgKiApOwogICAgYm9vbAlvcGVuKCBpbnQsIGlu
dCApOwogICAgdm9pZAljbG9zZSgpOwogICAgdm9pZAlmbHVzaCgpOwoKICAgIE9mZnNldAlzaXpl
KCkgY29uc3Q7CiAgICBPZmZzZXQJYXQoKSBjb25zdDsKICAgIGJvb2wJYXQoIE9mZnNldCApOwog
ICAgYm9vbAlhdEVuZCgpIGNvbnN0OwoKICAgIFFfTE9ORwlyZWFkQmxvY2soIGNoYXIgKmRhdGEs
IFFfVUxPTkcgbGVuICk7CiAgICBRX0xPTkcJd3JpdGVCbG9jayggY29uc3QgY2hhciAqZGF0YSwg
UV9VTE9ORyBsZW4gKTsKICAgIFFfTE9ORwl3cml0ZUJsb2NrKCBjb25zdCBRQnl0ZUFycmF5JiBk
YXRhICkKCQkgICAgICB7IHJldHVybiBRSU9EZXZpY2U6OndyaXRlQmxvY2soZGF0YSk7IH0KICAg
IFFfTE9ORwlyZWFkTGluZSggY2hhciAqZGF0YSwgUV9VTE9ORyBtYXhsZW4gKTsKICAgIFFfTE9O
RwlyZWFkTGluZSggUVN0cmluZyAmLCBRX1VMT05HIG1heGxlbiApOwoKICAgIGludAkJZ2V0Y2go
KTsKICAgIGludAkJcHV0Y2goIGludCApOwogICAgaW50CQl1bmdldGNoKCBpbnQgKTsKCiAgICBp
bnQJCWhhbmRsZSgpIGNvbnN0OwoKcHJvdGVjdGVkOgogICAgUVN0cmluZwlmbjsKICAgIEZJTEUg
ICAgICAgKmZoOwogICAgaW50CQlmZDsKICAgIE9mZnNldAlsZW5ndGg7CiAgICBib29sCWV4dF9m
OwogICAgdm9pZCAqIAlkOwoKcHJpdmF0ZToKICAgIHZvaWQJaW5pdCgpOwogICAgUUNTdHJpbmcJ
dW5nZXRjaEJ1ZmZlcjsKCnByaXZhdGU6CSAKCiAgICBRRmlsZSggY29uc3QgUUZpbGUgJiApOwog
ICAgUUZpbGUgJm9wZXJhdG9yPSggY29uc3QgUUZpbGUgJiApOwoKfTsKCgppbmxpbmUgUVN0cmlu
ZyBRRmlsZTo6bmFtZSgpIGNvbnN0CnsgcmV0dXJuIGZuOyB9CgppbmxpbmUgUUlPRGV2aWNlOjpP
ZmZzZXQgUUZpbGU6OmF0KCkgY29uc3QKeyByZXR1cm4gaW9JbmRleDsgfQoKCgojIDQgImNoYXJ0
Zm9ybV9maWxlcy5jcHAiIDIKCiMgMSAiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3FmaWxlZGlhbG9n
LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpjbGFzcyBRUHVz
aEJ1dHRvbjsKY2xhc3MgUUJ1dHRvbjsKY2xhc3MgUUxhYmVsOwpjbGFzcyBRV2lkZ2V0OwpjbGFz
cyBRRmlsZURpYWxvZzsKY2xhc3MgUVRpbWVyOwpjbGFzcyBRTmV0d29ya09wZXJhdGlvbjsKY2xh
c3MgUUxpbmVFZGl0OwpjbGFzcyBRTGlzdFZpZXdJdGVtOwpjbGFzcyBRTGlzdEJveEl0ZW07CmNs
YXNzIFFGaWxlRGlhbG9nUHJpdmF0ZTsKY2xhc3MgUUZpbGVEaWFsb2dRRmlsZUxpc3RWaWV3OwoK
CiMgMSAiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3FkaXIuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2xvY2FsL3F0L2luY2x1ZGUvcWZpbGVp
bmZvLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAi
L3Vzci9sb2NhbC9xdC9pbmNsdWRlL3FkYXRldGltZS5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgpjbGFzcyAgIFFEYXRlCnsKcHVibGljOgog
ICAgUURhdGUoKSAgeyBqZD0wOyB9CQkJCSAKICAgIFFEYXRlKCBpbnQgeSwgaW50IG0sIGludCBk
ICk7CQkgCgogICAgYm9vbCAgIGlzTnVsbCgpCSBjb25zdCB7IHJldHVybiBqZCA9PSAwOyB9CiAg
ICBib29sICAgaXNWYWxpZCgpCSBjb25zdDsJCQkgCgogICAgaW50CSAgIHllYXIoKQkgY29uc3Q7
CQkJIAogICAgaW50CSAgIG1vbnRoKCkJIGNvbnN0OwkJCSAKICAgIGludAkgICBkYXkoKQkgY29u
c3Q7CQkJIAogICAgaW50CSAgIGRheU9mV2VlaygpCSBjb25zdDsJCQkgCiAgICBpbnQJICAgZGF5
T2ZZZWFyKCkJIGNvbnN0OwkJCSAKICAgIGludAkgICBkYXlzSW5Nb250aCgpIGNvbnN0OwkJCSAK
ICAgIGludAkgICBkYXlzSW5ZZWFyKCkJIGNvbnN0OwkJCSAKCgoKICAgIHN0YXRpYyBRU3RyaW5n
IG1vbnRoTmFtZSggaW50IG1vbnRoICkgeyByZXR1cm4gc2hvcnRNb250aE5hbWUoIG1vbnRoICk7
IH0KICAgIHN0YXRpYyBRU3RyaW5nIGRheU5hbWUoIGludCB3ZWVrZGF5ICkgeyByZXR1cm4gc2hv
cnREYXlOYW1lKCB3ZWVrZGF5ICk7IH0KCiAgICBzdGF0aWMgUVN0cmluZyBzaG9ydE1vbnRoTmFt
ZSggaW50IG1vbnRoICk7CiAgICBzdGF0aWMgUVN0cmluZyBzaG9ydERheU5hbWUoIGludCB3ZWVr
ZGF5ICk7CiAgICBzdGF0aWMgUVN0cmluZyBsb25nTW9udGhOYW1lKCBpbnQgbW9udGggKTsKICAg
IHN0YXRpYyBRU3RyaW5nIGxvbmdEYXlOYW1lKCBpbnQgd2Vla2RheSApOwoKCiAgICBRU3RyaW5n
IHRvU3RyaW5nKCBRdDo6RGF0ZUZvcm1hdCBmID0gUXQ6OlRleHREYXRlICkJIGNvbnN0OwoKICAg
IFFTdHJpbmcgdG9TdHJpbmcoIGNvbnN0IFFTdHJpbmcmIGZvcm1hdCApIGNvbnN0OwogICAgYm9v
bCAgIHNldFlNRCggaW50IHksIGludCBtLCBpbnQgZCApOwoKICAgIFFEYXRlICBhZGREYXlzKCBp
bnQgZGF5cyApCQljb25zdDsKICAgIFFEYXRlICBhZGRNb250aHMoIGludCBtb250aHMgKSAgICAg
IGNvbnN0OwogICAgUURhdGUgIGFkZFllYXJzKCBpbnQgeWVhcnMgKSAgICAgICAgY29uc3Q7CiAg
ICBpbnQJICAgZGF5c1RvKCBjb25zdCBRRGF0ZSAmICkJY29uc3Q7CgogICAgYm9vbCAgIG9wZXJh
dG9yPT0oIGNvbnN0IFFEYXRlICZkICkgY29uc3QgeyByZXR1cm4gamQgPT0gZC5qZDsgfQogICAg
Ym9vbCAgIG9wZXJhdG9yIT0oIGNvbnN0IFFEYXRlICZkICkgY29uc3QgeyByZXR1cm4gamQgIT0g
ZC5qZDsgfQogICAgYm9vbCAgIG9wZXJhdG9yPCggY29uc3QgUURhdGUgJmQgKQljb25zdCB7IHJl
dHVybiBqZCA8IGQuamQ7IH0KICAgIGJvb2wgICBvcGVyYXRvcjw9KCBjb25zdCBRRGF0ZSAmZCAp
IGNvbnN0IHsgcmV0dXJuIGpkIDw9IGQuamQ7IH0KICAgIGJvb2wgICBvcGVyYXRvcj4oIGNvbnN0
IFFEYXRlICZkICkJY29uc3QgeyByZXR1cm4gamQgPiBkLmpkOyB9CiAgICBib29sICAgb3BlcmF0
b3I+PSggY29uc3QgUURhdGUgJmQgKSBjb25zdCB7IHJldHVybiBqZCA+PSBkLmpkOyB9CgogICAg
c3RhdGljIFFEYXRlIGN1cnJlbnREYXRlKCk7CiAgICBzdGF0aWMgUURhdGUgZnJvbVN0cmluZygg
Y29uc3QgUVN0cmluZyYgcywgUXQ6OkRhdGVGb3JtYXQgZiA9IFF0OjpUZXh0RGF0ZSApOwoKICAg
IHN0YXRpYyBib29sCSBpc1ZhbGlkKCBpbnQgeSwgaW50IG0sIGludCBkICk7CiAgICBzdGF0aWMg
Ym9vbAkgbGVhcFllYXIoIGludCB5ZWFyICk7CgogICAgc3RhdGljIHVpbnQJIGdyZWdvcmlhblRv
SnVsaWFuKCBpbnQgeSwgaW50IG0sIGludCBkICk7CiAgICBzdGF0aWMgdm9pZAkganVsaWFuVG9H
cmVnb3JpYW4oIHVpbnQgamQsIGludCAmeSwgaW50ICZtLCBpbnQgJmQgKTsKcHJpdmF0ZToKICAg
IHVpbnQJIGpkOwogICAgZnJpZW5kIGNsYXNzIFFEYXRlVGltZTsKCiAgICBmcmllbmQgICBRRGF0
YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUURhdGUgJiApOwogICAg
ZnJpZW5kICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFEYXRlICYg
KTsKCn07CgoKIAoKCgpjbGFzcyAgIFFUaW1lCnsKcHVibGljOgogICAgUVRpbWUoKSB7IGRzPTA7
IH0JCQkJIAogICAgUVRpbWUoIGludCBoLCBpbnQgbSwgaW50IHM9MCwgaW50IG1zPTAgKTsJIAoK
ICAgIGJvb2wgICBpc051bGwoKQkgY29uc3QgeyByZXR1cm4gZHMgPT0gMDsgfQogICAgYm9vbCAg
IGlzVmFsaWQoKQkgY29uc3Q7CQkJIAoKICAgIGludAkgICBob3VyKCkJIGNvbnN0OwkJCSAKICAg
IGludAkgICBtaW51dGUoKQkgY29uc3Q7CQkJIAogICAgaW50CSAgIHNlY29uZCgpCSBjb25zdDsJ
CQkgCiAgICBpbnQJICAgbXNlYygpCSBjb25zdDsJCQkgCgoKICAgIFFTdHJpbmcgdG9TdHJpbmco
IFF0OjpEYXRlRm9ybWF0IGYgPSBRdDo6VGV4dERhdGUgKQkgY29uc3Q7CgogICAgUVN0cmluZyB0
b1N0cmluZyggY29uc3QgUVN0cmluZyYgZm9ybWF0ICkgY29uc3Q7CgogICAgYm9vbCAgIHNldEhN
UyggaW50IGgsIGludCBtLCBpbnQgcywgaW50IG1zPTAgKTsKCiAgICBRVGltZSAgYWRkU2Vjcygg
aW50IHNlY3MgKQkJY29uc3Q7CiAgICBpbnQJICAgc2Vjc1RvKCBjb25zdCBRVGltZSAmICkJY29u
c3Q7CiAgICBRVGltZSAgYWRkTVNlY3MoIGludCBtcyApCQljb25zdDsKICAgIGludAkgICBtc2Vj
c1RvKCBjb25zdCBRVGltZSAmICkJY29uc3Q7CgogICAgYm9vbCAgIG9wZXJhdG9yPT0oIGNvbnN0
IFFUaW1lICZkICkgY29uc3QgeyByZXR1cm4gZHMgPT0gZC5kczsgfQogICAgYm9vbCAgIG9wZXJh
dG9yIT0oIGNvbnN0IFFUaW1lICZkICkgY29uc3QgeyByZXR1cm4gZHMgIT0gZC5kczsgfQogICAg
Ym9vbCAgIG9wZXJhdG9yPCggY29uc3QgUVRpbWUgJmQgKQljb25zdCB7IHJldHVybiBkcyA8IGQu
ZHM7IH0KICAgIGJvb2wgICBvcGVyYXRvcjw9KCBjb25zdCBRVGltZSAmZCApIGNvbnN0IHsgcmV0
dXJuIGRzIDw9IGQuZHM7IH0KICAgIGJvb2wgICBvcGVyYXRvcj4oIGNvbnN0IFFUaW1lICZkICkJ
Y29uc3QgeyByZXR1cm4gZHMgPiBkLmRzOyB9CiAgICBib29sICAgb3BlcmF0b3I+PSggY29uc3Qg
UVRpbWUgJmQgKSBjb25zdCB7IHJldHVybiBkcyA+PSBkLmRzOyB9CgogICAgc3RhdGljIFFUaW1l
IGN1cnJlbnRUaW1lKCk7CiAgICBzdGF0aWMgUVRpbWUgZnJvbVN0cmluZyggY29uc3QgUVN0cmlu
ZyYgcywgUXQ6OkRhdGVGb3JtYXQgZiA9IFF0OjpUZXh0RGF0ZSApOwogICAgc3RhdGljIGJvb2wJ
IGlzVmFsaWQoIGludCBoLCBpbnQgbSwgaW50IHMsIGludCBtcz0wICk7CgogICAgdm9pZCAgIHN0
YXJ0KCk7CiAgICBpbnQJICAgcmVzdGFydCgpOwogICAgaW50CSAgIGVsYXBzZWQoKSBjb25zdDsK
CnByaXZhdGU6CiAgICBzdGF0aWMgYm9vbCBjdXJyZW50VGltZSggUVRpbWUgKiApOwoKICAgIHVp
bnQgICBkczsKICAgIGZyaWVuZCBjbGFzcyBRRGF0ZVRpbWU7CgogICAgZnJpZW5kICAgUURhdGFT
dHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFUaW1lICYgKTsKICAgIGZy
aWVuZCAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRVGltZSAmICk7
Cgp9OwoKCiAKCgoKY2xhc3MgICBRRGF0ZVRpbWUKewpwdWJsaWM6CiAgICBRRGF0ZVRpbWUoKSB7
fQkJCQkgCiAgICBRRGF0ZVRpbWUoIGNvbnN0IFFEYXRlICYgKTsKICAgIFFEYXRlVGltZSggY29u
c3QgUURhdGUgJiwgY29uc3QgUVRpbWUgJiApOwoKICAgIGJvb2wgICBpc051bGwoKQljb25zdAkJ
eyByZXR1cm4gZC5pc051bGwoKSAmJiB0LmlzTnVsbCgpOyB9CiAgICBib29sICAgaXNWYWxpZCgp
CWNvbnN0CQl7IHJldHVybiBkLmlzVmFsaWQoKSAmJiB0LmlzVmFsaWQoKTsgfQoKICAgIFFEYXRl
ICBkYXRlKCkJY29uc3QJCXsgcmV0dXJuIGQ7IH0KICAgIFFUaW1lICB0aW1lKCkJY29uc3QJCXsg
cmV0dXJuIHQ7IH0KICAgIHZvaWQgICBzZXREYXRlKCBjb25zdCBRRGF0ZSAmZGF0ZSApIHsgZD1k
YXRlOyB9CiAgICB2b2lkICAgc2V0VGltZSggY29uc3QgUVRpbWUgJnRpbWUgKSB7IHQ9dGltZTsg
fQogICAgdm9pZCAgIHNldFRpbWVfdCggdWludCBzZWNzU2luY2UxSmFuMTk3MFVUQyApOwoKCiAg
ICBRU3RyaW5nIHRvU3RyaW5nKCBRdDo6RGF0ZUZvcm1hdCBmID0gUXQ6OlRleHREYXRlICkJY29u
c3Q7CgogICAgUVN0cmluZyB0b1N0cmluZyggY29uc3QgUVN0cmluZyYgZm9ybWF0ICkgY29uc3Q7
CgogICAgUURhdGVUaW1lIGFkZERheXMoIGludCBkYXlzICkJY29uc3Q7CiAgICBRRGF0ZVRpbWUg
YWRkTW9udGhzKCBpbnQgbW9udGhzICkgICBjb25zdDsKICAgIFFEYXRlVGltZSBhZGRZZWFycygg
aW50IHllYXJzICkgICAgIGNvbnN0OwogICAgUURhdGVUaW1lIGFkZFNlY3MoIGludCBzZWNzICkJ
Y29uc3Q7CiAgICBpbnQJICAgZGF5c1RvKCBjb25zdCBRRGF0ZVRpbWUgJiApCWNvbnN0OwogICAg
aW50CSAgIHNlY3NUbyggY29uc3QgUURhdGVUaW1lICYgKQljb25zdDsKCiAgICBib29sICAgb3Bl
cmF0b3I9PSggY29uc3QgUURhdGVUaW1lICZkdCApIGNvbnN0OwogICAgYm9vbCAgIG9wZXJhdG9y
IT0oIGNvbnN0IFFEYXRlVGltZSAmZHQgKSBjb25zdDsKICAgIGJvb2wgICBvcGVyYXRvcjwoIGNv
bnN0IFFEYXRlVGltZSAmZHQgKSAgY29uc3Q7CiAgICBib29sICAgb3BlcmF0b3I8PSggY29uc3Qg
UURhdGVUaW1lICZkdCApIGNvbnN0OwogICAgYm9vbCAgIG9wZXJhdG9yPiggY29uc3QgUURhdGVU
aW1lICZkdCApICBjb25zdDsKICAgIGJvb2wgICBvcGVyYXRvcj49KCBjb25zdCBRRGF0ZVRpbWUg
JmR0ICkgY29uc3Q7CgogICAgc3RhdGljIFFEYXRlVGltZSBjdXJyZW50RGF0ZVRpbWUoKTsKICAg
IHN0YXRpYyBRRGF0ZVRpbWUgZnJvbVN0cmluZyggY29uc3QgUVN0cmluZyYgcywgUXQ6OkRhdGVG
b3JtYXQgZiA9IFF0OjpUZXh0RGF0ZSApOwoKcHJpdmF0ZToKICAgIFFEYXRlICBkOwogICAgUVRp
bWUgIHQ7CgogICAgZnJpZW5kICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFt
ICYsIGNvbnN0IFFEYXRlVGltZSAmKTsKICAgIGZyaWVuZCAgIFFEYXRhU3RyZWFtICZvcGVyYXRv
cj4+KCBRRGF0YVN0cmVhbSAmLCBRRGF0ZVRpbWUgJiApOwoKfTsKCgogCgoKCgogIFFEYXRhU3Ry
ZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRRGF0ZSAmICk7CiAgUURhdGFT
dHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFEYXRlICYgKTsKICBRRGF0YVN0cmVh
bSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUVRpbWUgJiApOwogIFFEYXRhU3Ry
ZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRVGltZSAmICk7CiAgUURhdGFTdHJlYW0g
Jm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFEYXRlVGltZSAmICk7CiAgUURhdGFT
dHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFEYXRlVGltZSAmICk7CgoKCgojIDQz
ICIvdXNyL2xvY2FsL3F0L2luY2x1ZGUvcWZpbGVpbmZvLmgiIDIKCgoKCmNsYXNzIFFEaXI7CnN0
cnVjdCBRRmlsZUluZm9DYWNoZTsKCgpjbGFzcyAgIFFGaWxlSW5mbwkJCQkgICAgCnsKcHVibGlj
OgogICAgZW51bSBQZXJtaXNzaW9uU3BlYyB7CglSZWFkVXNlciAgPSAwNDAwLCBXcml0ZVVzZXIg
ID0gMDIwMCwgRXhlVXNlciAgPSAwMTAwLAoJUmVhZEdyb3VwID0gMDA0MCwgV3JpdGVHcm91cCA9
IDAwMjAsIEV4ZUdyb3VwID0gMDAxMCwKCVJlYWRPdGhlciA9IDAwMDQsIFdyaXRlT3RoZXIgPSAw
MDAyLCBFeGVPdGhlciA9IDAwMDEgfTsKCiAgICBRRmlsZUluZm8oKTsKICAgIFFGaWxlSW5mbygg
Y29uc3QgUVN0cmluZyAmZmlsZSApOwogICAgUUZpbGVJbmZvKCBjb25zdCBRRmlsZSAmICk7Cgog
ICAgUUZpbGVJbmZvKCBjb25zdCBRRGlyICYsIGNvbnN0IFFTdHJpbmcgJmZpbGVOYW1lICk7Cgog
ICAgUUZpbGVJbmZvKCBjb25zdCBRRmlsZUluZm8gJiApOwogICB+UUZpbGVJbmZvKCk7CgogICAg
UUZpbGVJbmZvICAmb3BlcmF0b3I9KCBjb25zdCBRRmlsZUluZm8gJiApOwoKICAgIHZvaWQJc2V0
RmlsZSggY29uc3QgUVN0cmluZyAmZmlsZSApOwogICAgdm9pZAlzZXRGaWxlKCBjb25zdCBRRmls
ZSAmICk7CgogICAgdm9pZAlzZXRGaWxlKCBjb25zdCBRRGlyICYsIGNvbnN0IFFTdHJpbmcgJmZp
bGVOYW1lICk7CgogICAgYm9vbAlleGlzdHMoKQljb25zdDsKICAgIHZvaWQJcmVmcmVzaCgpCWNv
bnN0OwogICAgYm9vbAljYWNoaW5nKCkJY29uc3Q7CiAgICB2b2lkCXNldENhY2hpbmcoIGJvb2wg
KTsKCiAgICBRU3RyaW5nCWZpbGVQYXRoKCkJY29uc3Q7CiAgICBRU3RyaW5nCWZpbGVOYW1lKCkJ
Y29uc3Q7CgogICAgUVN0cmluZwlhYnNGaWxlUGF0aCgpCWNvbnN0OwoKICAgIFFTdHJpbmcJYmFz
ZU5hbWUoIGJvb2wgY29tcGxldGUgPSBGQUxTRSApIGNvbnN0OwogICAgUVN0cmluZwlleHRlbnNp
b24oIGJvb2wgY29tcGxldGUgPSBUUlVFICkgY29uc3Q7CgoKICAgIFFTdHJpbmcJZGlyUGF0aCgg
Ym9vbCBhYnNQYXRoID0gRkFMU0UgKSBjb25zdDsKCgogICAgUURpcglkaXIoIGJvb2wgYWJzUGF0
aCA9IEZBTFNFICkJY29uc3Q7CgogICAgYm9vbAlpc1JlYWRhYmxlKCkJY29uc3Q7CiAgICBib29s
CWlzV3JpdGFibGUoKQljb25zdDsKICAgIGJvb2wJaXNFeGVjdXRhYmxlKCkJY29uc3Q7CgoKICAg
IGJvb2wJaXNSZWxhdGl2ZSgpCWNvbnN0OwogICAgYm9vbAljb252ZXJ0VG9BYnMoKTsKCgogICAg
Ym9vbAlpc0ZpbGUoKQljb25zdDsKICAgIGJvb2wJaXNEaXIoKQkJY29uc3Q7CiAgICBib29sCWlz
U3ltTGluaygpCWNvbnN0OwoKICAgIFFTdHJpbmcJcmVhZExpbmsoKQljb25zdDsKCiAgICBRU3Ry
aW5nCW93bmVyKCkJCWNvbnN0OwogICAgdWludAlvd25lcklkKCkJY29uc3Q7CiAgICBRU3RyaW5n
CWdyb3VwKCkJCWNvbnN0OwogICAgdWludAlncm91cElkKCkJY29uc3Q7CgogICAgYm9vbAlwZXJt
aXNzaW9uKCBpbnQgcGVybWlzc2lvblNwZWMgKSBjb25zdDsKCiAgICB1aW50CXNpemUoKQkJY29u
c3Q7CgogICAgUURhdGVUaW1lCWNyZWF0ZWQoKQljb25zdDsKICAgIFFEYXRlVGltZQlsYXN0TW9k
aWZpZWQoKQljb25zdDsKICAgIFFEYXRlVGltZQlsYXN0UmVhZCgpCWNvbnN0OwoKcHJpdmF0ZToK
ICAgIHZvaWQJZG9TdGF0KCkgY29uc3Q7CiAgICBzdGF0aWMgdm9pZCBzbGFzaGlmeSggUVN0cmlu
ZyAmICk7CiAgICBzdGF0aWMgdm9pZCBtYWtlQWJzKCBRU3RyaW5nICYgKTsKICAgIAogICAgUVN0
cmluZwlmbjsKICAgIFFGaWxlSW5mb0NhY2hlICpmaWM7CiAgICBib29sCWNhY2hlOwoKICAgIGJv
b2wgICAgICAgIHN5bUxpbms7CgoKfTsKCgppbmxpbmUgYm9vbCBRRmlsZUluZm86OmNhY2hpbmco
KSBjb25zdAp7CiAgICByZXR1cm4gY2FjaGU7Cn0KCgoKIyA0MyAiL3Vzci9sb2NhbC9xdC9pbmNs
dWRlL3FkaXIuaCIgMgoKCgoKCgoKdHlwZWRlZiBRUHRyTGlzdDxRRmlsZUluZm8+IFFGaWxlSW5m
b0xpc3Q7CnR5cGVkZWYgUVB0ckxpc3RJdGVyYXRvcjxRRmlsZUluZm8+IFFGaWxlSW5mb0xpc3RJ
dGVyYXRvcjsKY2xhc3MgUVN0cmluZ0xpc3Q7CgoKY2xhc3MgICBRRGlyCnsKcHVibGljOgogICAg
ZW51bSBGaWx0ZXJTcGVjIHsgRGlycwkgICAgPSAweDAwMSwKCQkgICAgICBGaWxlcwkgICAgPSAw
eDAwMiwKCQkgICAgICBEcml2ZXMJICAgID0gMHgwMDQsCgkJICAgICAgTm9TeW1MaW5rcyAgICA9
IDB4MDA4LAoJCSAgICAgIEFsbAkgICAgPSAweDAwNywKCQkgICAgICAgVHlwZU1hc2sJICAgID0g
MHgwMEYsCgoJCSAgICAgIFJlYWRhYmxlCSAgICA9IDB4MDEwLAoJCSAgICAgIFdyaXRhYmxlCSAg
ICA9IDB4MDIwLAoJCSAgICAgIEV4ZWN1dGFibGUgICAgPSAweDA0MCwKCQkgICAgICAgUldFTWFz
awkgICAgPSAweDA3MCwKCgkJICAgICAgTW9kaWZpZWQJICAgID0gMHgwODAsCgkJICAgICAgSGlk
ZGVuCSAgICA9IDB4MTAwLAoJCSAgICAgIFN5c3RlbQkgICAgPSAweDIwMCwKCQkgICAgICAgQWNj
ZXNzTWFzayAgICA9IDB4M0YwLAoKCQkgICAgICBEZWZhdWx0RmlsdGVyID0gLTEgfTsKCiAgICBl
bnVtIFNvcnRTcGVjICAgeyBOYW1lCSAgICA9IDB4MDAsCgkJICAgICAgVGltZQkgICAgPSAweDAx
LAoJCSAgICAgIFNpemUJICAgID0gMHgwMiwKCQkgICAgICBVbnNvcnRlZAkgICAgPSAweDAzLAoJ
CSAgICAgICBTb3J0QnlNYXNrICAgID0gMHgwMywKCgkJICAgICAgRGlyc0ZpcnN0CSAgICA9IDB4
MDQsCgkJICAgICAgUmV2ZXJzZWQJICAgID0gMHgwOCwKCQkgICAgICBJZ25vcmVDYXNlICAgID0g
MHgxMCwKCQkgICAgICBEZWZhdWx0U29ydCAgID0gLTEgfTsKCiAgICBRRGlyKCk7CiAgICBRRGly
KCBjb25zdCBRU3RyaW5nICZwYXRoLCBjb25zdCBRU3RyaW5nICZuYW1lRmlsdGVyID0gUVN0cmlu
Zzo6bnVsbCwKCSAgaW50IHNvcnRTcGVjID0gTmFtZSB8IElnbm9yZUNhc2UsIGludCBmaWx0ZXJT
cGVjID0gQWxsICk7CiAgICBRRGlyKCBjb25zdCBRRGlyICYgKTsKCiAgICB2aXJ0dWFsIH5RRGly
KCk7CgogICAgUURpciAgICAgICAmb3BlcmF0b3I9KCBjb25zdCBRRGlyICYgKTsKICAgIFFEaXIg
ICAgICAgJm9wZXJhdG9yPSggY29uc3QgUVN0cmluZyAmcGF0aCApOwoKICAgIHZpcnR1YWwgdm9p
ZCBzZXRQYXRoKCBjb25zdCBRU3RyaW5nICZwYXRoICk7CiAgICB2aXJ0dWFsIFFTdHJpbmcgcGF0
aCgpCQljb25zdDsKICAgIHZpcnR1YWwgUVN0cmluZyBhYnNQYXRoKCkJY29uc3Q7CiAgICB2aXJ0
dWFsIFFTdHJpbmcgY2Fub25pY2FsUGF0aCgpCWNvbnN0OwoKICAgIHZpcnR1YWwgUVN0cmluZyBk
aXJOYW1lKCkgY29uc3Q7CiAgICB2aXJ0dWFsIFFTdHJpbmcgZmlsZVBhdGgoIGNvbnN0IFFTdHJp
bmcgJmZpbGVOYW1lLAoJCQkgICAgICBib29sIGFjY2VwdEFic1BhdGggPSBUUlVFICkgY29uc3Q7
CiAgICB2aXJ0dWFsIFFTdHJpbmcgYWJzRmlsZVBhdGgoIGNvbnN0IFFTdHJpbmcgJmZpbGVOYW1l
LAoJCQkJIGJvb2wgYWNjZXB0QWJzUGF0aCA9IFRSVUUgKSBjb25zdDsKCiAgICBzdGF0aWMgUVN0
cmluZyBjb252ZXJ0U2VwYXJhdG9ycyggY29uc3QgUVN0cmluZyAmcGF0aE5hbWUgKTsKCiAgICB2
aXJ0dWFsIGJvb2wgY2QoIGNvbnN0IFFTdHJpbmcgJmRpck5hbWUsIGJvb2wgYWNjZXB0QWJzUGF0
aCA9IFRSVUUgKTsKICAgIHZpcnR1YWwgYm9vbCBjZFVwKCk7CgogICAgUVN0cmluZwluYW1lRmls
dGVyKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0TmFtZUZpbHRlciggY29uc3QgUVN0cmlu
ZyAmbmFtZUZpbHRlciApOwogICAgRmlsdGVyU3BlYyBmaWx0ZXIoKSBjb25zdDsKICAgIHZpcnR1
YWwgdm9pZCBzZXRGaWx0ZXIoIGludCBmaWx0ZXJTcGVjICk7CiAgICBTb3J0U3BlYyBzb3J0aW5n
KCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0U29ydGluZyggaW50IHNvcnRTcGVjICk7Cgog
ICAgYm9vbAltYXRjaEFsbERpcnMoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRNYXRjaEFs
bERpcnMoIGJvb2wgKTsKCiAgICB1aW50IGNvdW50KCkgY29uc3Q7CiAgICBRU3RyaW5nCW9wZXJh
dG9yW10oIGludCApIGNvbnN0OwoKICAgIHZpcnR1YWwgUVN0ckxpc3QgZW5jb2RlZEVudHJ5TGlz
dCggaW50IGZpbHRlclNwZWMgPSBEZWZhdWx0RmlsdGVyLAoJCQkJICAgICAgIGludCBzb3J0U3Bl
YyAgID0gRGVmYXVsdFNvcnQgICkgY29uc3Q7CiAgICB2aXJ0dWFsIFFTdHJMaXN0IGVuY29kZWRF
bnRyeUxpc3QoIGNvbnN0IFFTdHJpbmcgJm5hbWVGaWx0ZXIsCgkJCQkgICAgICAgaW50IGZpbHRl
clNwZWMgPSBEZWZhdWx0RmlsdGVyLAoJCQkJICAgICAgIGludCBzb3J0U3BlYyAgID0gRGVmYXVs
dFNvcnQgICApIGNvbnN0OwogICAgdmlydHVhbCBRU3RyaW5nTGlzdCBlbnRyeUxpc3QoIGludCBm
aWx0ZXJTcGVjID0gRGVmYXVsdEZpbHRlciwKCQkJCSAgIGludCBzb3J0U3BlYyAgID0gRGVmYXVs
dFNvcnQgICkgY29uc3Q7CiAgICB2aXJ0dWFsIFFTdHJpbmdMaXN0IGVudHJ5TGlzdCggY29uc3Qg
UVN0cmluZyAmbmFtZUZpbHRlciwKCQkJCSAgIGludCBmaWx0ZXJTcGVjID0gRGVmYXVsdEZpbHRl
ciwKCQkJCSAgIGludCBzb3J0U3BlYyAgID0gRGVmYXVsdFNvcnQgICApIGNvbnN0OwoKICAgIHZp
cnR1YWwgY29uc3QgUUZpbGVJbmZvTGlzdCAqZW50cnlJbmZvTGlzdCggaW50IGZpbHRlclNwZWMg
PSBEZWZhdWx0RmlsdGVyLAoJCQkJCQlpbnQgc29ydFNwZWMgPSBEZWZhdWx0U29ydCApIGNvbnN0
OwogICAgdmlydHVhbCBjb25zdCBRRmlsZUluZm9MaXN0ICplbnRyeUluZm9MaXN0KCBjb25zdCBR
U3RyaW5nICZuYW1lRmlsdGVyLAoJCQkJCQlpbnQgZmlsdGVyU3BlYyA9IERlZmF1bHRGaWx0ZXIs
CgkJCQkJCWludCBzb3J0U3BlYyA9IERlZmF1bHRTb3J0ICkgY29uc3Q7CgogICAgc3RhdGljIGNv
bnN0IFFGaWxlSW5mb0xpc3QgKmRyaXZlcygpOwoKICAgIHZpcnR1YWwgYm9vbCBta2RpciggY29u
c3QgUVN0cmluZyAmZGlyTmFtZSwKCQkJYm9vbCBhY2NlcHRBYnNQYXRoID0gVFJVRSApIGNvbnN0
OwogICAgdmlydHVhbCBib29sIHJtZGlyKCBjb25zdCBRU3RyaW5nICZkaXJOYW1lLAoJCQlib29s
IGFjY2VwdEFic1BhdGggPSBUUlVFICkgY29uc3Q7CgogICAgdmlydHVhbCBib29sIGlzUmVhZGFi
bGUoKSBjb25zdDsKICAgIHZpcnR1YWwgYm9vbCBleGlzdHMoKSAgIGNvbnN0OwogICAgdmlydHVh
bCBib29sIGlzUm9vdCgpICAgY29uc3Q7CgogICAgdmlydHVhbCBib29sIGlzUmVsYXRpdmUoKSBj
b25zdDsKICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9BYnMoKTsKCiAgICB2aXJ0dWFsIGJvb2wg
b3BlcmF0b3I9PSggY29uc3QgUURpciAmICkgY29uc3Q7CiAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0
b3IhPSggY29uc3QgUURpciAmICkgY29uc3Q7CgogICAgdmlydHVhbCBib29sIHJlbW92ZSggY29u
c3QgUVN0cmluZyAmZmlsZU5hbWUsCgkJCSBib29sIGFjY2VwdEFic1BhdGggPSBUUlVFICk7CiAg
ICB2aXJ0dWFsIGJvb2wgcmVuYW1lKCBjb25zdCBRU3RyaW5nICZuYW1lLCBjb25zdCBRU3RyaW5n
ICZuZXdOYW1lLAoJCQkgYm9vbCBhY2NlcHRBYnNQYXRocyA9IFRSVUUgICk7CiAgICB2aXJ0dWFs
IGJvb2wgZXhpc3RzKCBjb25zdCBRU3RyaW5nICZuYW1lLAoJCQkgYm9vbCBhY2NlcHRBYnNQYXRo
ID0gVFJVRSApOwoKICAgIHN0YXRpYyBjaGFyIHNlcGFyYXRvcigpOwoKICAgIHN0YXRpYyBib29s
IHNldEN1cnJlbnQoIGNvbnN0IFFTdHJpbmcgJnBhdGggKTsKICAgIHN0YXRpYyBRRGlyIGN1cnJl
bnQoKTsKICAgIHN0YXRpYyBRRGlyIGhvbWUoKTsKICAgIHN0YXRpYyBRRGlyIHJvb3QoKTsKICAg
IHN0YXRpYyBRU3RyaW5nIGN1cnJlbnREaXJQYXRoKCk7CiAgICBzdGF0aWMgUVN0cmluZyBob21l
RGlyUGF0aCgpOwogICAgc3RhdGljIFFTdHJpbmcgcm9vdERpclBhdGgoKTsKCiAgICBzdGF0aWMg
Ym9vbCBtYXRjaCggY29uc3QgUVN0cmluZ0xpc3QgJmZpbHRlcnMsIGNvbnN0IFFTdHJpbmcgJmZp
bGVOYW1lICk7CiAgICBzdGF0aWMgYm9vbCBtYXRjaCggY29uc3QgUVN0cmluZyAmZmlsdGVyLCBj
b25zdCBRU3RyaW5nICZmaWxlTmFtZSApOwogICAgc3RhdGljIFFTdHJpbmcgY2xlYW5EaXJQYXRo
KCBjb25zdCBRU3RyaW5nICZkaXJQYXRoICk7CiAgICBzdGF0aWMgYm9vbCBpc1JlbGF0aXZlUGF0
aCggY29uc3QgUVN0cmluZyAmcGF0aCApOwoKcHJpdmF0ZToKCgoKICAgIHZvaWQgaW5pdCgpOwog
ICAgdmlydHVhbCBib29sIHJlYWREaXJFbnRyaWVzKCBjb25zdCBRU3RyaW5nICZuYW1lRmlsdGVy
LAoJCQkJIGludCBGaWx0ZXJTcGVjLCBpbnQgU29ydFNwZWMgICk7CgogICAgc3RhdGljIHZvaWQg
c2xhc2hpZnkgKCBRU3RyaW5nICYpOwoKICAgIFFTdHJpbmcJZFBhdGg7CiAgICBRU3RyaW5nTGlz
dCAgICpmTGlzdDsKICAgIFFGaWxlSW5mb0xpc3QgKmZpTGlzdDsKICAgIFFTdHJpbmcJbmFtZUZp
bHQ7CiAgICBGaWx0ZXJTcGVjCWZpbHRTOwogICAgU29ydFNwZWMJc29ydFM7CiAgICB1aW50CWRp
cnR5CTogMTsKICAgIHVpbnQJYWxsRGlycyA6IDE7Cn07CgoKaW5saW5lIFFTdHJpbmcgUURpcjo6
cGF0aCgpIGNvbnN0CnsKICAgIHJldHVybiBkUGF0aDsKfQoKaW5saW5lIFFTdHJpbmcgUURpcjo6
bmFtZUZpbHRlcigpIGNvbnN0CnsKICAgIHJldHVybiBuYW1lRmlsdDsKfQoKaW5saW5lIFFEaXI6
OkZpbHRlclNwZWMgUURpcjo6ZmlsdGVyKCkgY29uc3QKewogICAgcmV0dXJuIGZpbHRTOwp9Cgpp
bmxpbmUgUURpcjo6U29ydFNwZWMgUURpcjo6c29ydGluZygpIGNvbnN0CnsKICAgIHJldHVybiBz
b3J0UzsKfQoKaW5saW5lIGJvb2wgUURpcjo6bWF0Y2hBbGxEaXJzKCkgY29uc3QKewogICAgcmV0
dXJuIGFsbERpcnM7Cn0KCmlubGluZSBib29sIFFEaXI6Om9wZXJhdG9yIT0oIGNvbnN0IFFEaXIg
JmQgKSBjb25zdAp7CiAgICByZXR1cm4gISgqdGhpcyA9PSBkKTsKfQoKCnN0cnVjdCBRRGlyU29y
dEl0ZW0gewogICAgUVN0cmluZyBmaWxlbmFtZV9jYWNoZTsKICAgIFFGaWxlSW5mbyogaXRlbTsK
fTsKCgoKIyA1NSAiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3FmaWxlZGlhbG9nLmgiIDIKCiMgMSAi
L3Vzci9sb2NhbC9xdC9pbmNsdWRlL3FkaWFsb2cuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKY2xhc3MgUVB1c2hCdXR0b247CmNsYXNzIFFEaWFs
b2dQcml2YXRlOwoKY2xhc3MgICBRRGlhbG9nIDogcHVibGljIFFXaWRnZXQKewpmcmllbmQgY2xh
c3MgUVB1c2hCdXR0b247CiAgICBwdWJsaWM6CXZpcnR1YWwgUU1ldGFPYmplY3QgKm1ldGFPYmpl
Y3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7CX0JdmlydHVhbCBjb25zdCBj
aGFyICpjbGFzc05hbWUoKSBjb25zdDsJdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBjb25zdCBjaGFy
KiApOyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJv
b2wgcXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X3Byb3BlcnR5KCBp
bnQsIGludCwgUVZhcmlhbnQqICk7IAlzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmpl
Y3QoKTsJUU9iamVjdCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9IHN0YXRp
YyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgc3RhdGljIFFT
dHJpbmcgdHJVdGY4KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgCXByaXZhdGU6
CXN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsgCiAgICAgCgpwdWJsaWM6CiAgICBRRGlhbG9n
KCBRV2lkZ2V0KiBwYXJlbnQ9MCwgY29uc3QgY2hhciogbmFtZT0wLCBib29sIG1vZGFsPUZBTFNF
LAoJICAgICBXRmxhZ3MgZj0wICk7CiAgICB+UURpYWxvZygpOwoKICAgIGVudW0gRGlhbG9nQ29k
ZSB7IFJlamVjdGVkLCBBY2NlcHRlZCB9OwoKICAgIGludAkJcmVzdWx0KCkgY29uc3QgeyByZXR1
cm4gcmVzY29kZTsgfQoKICAgIHZvaWQJc2hvdygpOwogICAgdm9pZAloaWRlKCk7CiAgICB2b2lk
CW1vdmUoIGludCB4LCBpbnQgeSApOwogICAgdm9pZAltb3ZlKCBjb25zdCBRUG9pbnQgJnAgKTsK
ICAgIHZvaWQJcmVzaXplKCBpbnQgdywgaW50IGggKTsKICAgIHZvaWQJcmVzaXplKCBjb25zdCBR
U2l6ZSAmICk7CiAgICB2b2lkCXNldEdlb21ldHJ5KCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQg
aCApOwogICAgdm9pZAlzZXRHZW9tZXRyeSggY29uc3QgUVJlY3QgJiApOwoKICAgIHZvaWQJc2V0
T3JpZW50YXRpb24oIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uICk7CiAgICBPcmllbnRhdGlvbglv
cmllbnRhdGlvbigpIGNvbnN0OwoKICAgIHZvaWQJc2V0RXh0ZW5zaW9uKCBRV2lkZ2V0KiBleHRl
bnNpb24gKTsKICAgIFFXaWRnZXQqCWV4dGVuc2lvbigpIGNvbnN0OwoKICAgIFFTaXplCXNpemVI
aW50KCkgY29uc3Q7CiAgICBRU2l6ZQltaW5pbXVtU2l6ZUhpbnQoKSBjb25zdDsKCiAgICB2b2lk
IHNldFNpemVHcmlwRW5hYmxlZCggYm9vbCApOwogICAgYm9vbCBpc1NpemVHcmlwRW5hYmxlZCgp
IGNvbnN0OwoKcHVibGljICA6CiAgICBpbnQgZXhlYygpOwoKcHJvdGVjdGVkICA6CiAgICB2aXJ0
dWFsIHZvaWQgZG9uZSggaW50ICk7CiAgICB2aXJ0dWFsIHZvaWQgYWNjZXB0KCk7CiAgICB2aXJ0
dWFsIHZvaWQgcmVqZWN0KCk7CgogICAgdm9pZAlzaG93RXh0ZW5zaW9uKCBib29sICk7Cgpwcm90
ZWN0ZWQ6CiAgICB2b2lkCXNldFJlc3VsdCggaW50IHIgKQl7IHJlc2NvZGUgPSByOyB9CiAgICB2
b2lkCWtleVByZXNzRXZlbnQoIFFLZXlFdmVudCAqICk7CiAgICB2b2lkCWNsb3NlRXZlbnQoIFFD
bG9zZUV2ZW50ICogKTsKICAgIHZvaWQJcmVzaXplRXZlbnQoIFFSZXNpemVFdmVudCAqICk7CiAg
ICB2b2lkCWNvbnRleHRNZW51RXZlbnQoIFFDb250ZXh0TWVudUV2ZW50ICogKTsKICAgIGJvb2wJ
ZXZlbnRGaWx0ZXIoIFFPYmplY3QgKiwgUUV2ZW50ICogKTsKICAgIHZvaWQJYWRqdXN0UG9zaXRp
b24oIFFXaWRnZXQqKTsKCnByaXZhdGU6CiAgICB2b2lkCXNldERlZmF1bHQoIFFQdXNoQnV0dG9u
ICogKTsKICAgIHZvaWQJCWhpZGVEZWZhdWx0KCk7CiAgICBpbnQJCXJlc2NvZGU7CiAgICB1aW50
CWRpZF9tb3ZlICAgOiAxOwogICAgdWludAloYXNfcmVscG9zIDogMTsKICAgIHVpbnQJZGlkX3Jl
c2l6ZSA6IDE7CiAgICB1aW50CWluX2xvb3A6IDE7CiAgICB2b2lkIGFkanVzdFBvc2l0aW9uSW50
ZXJuYWwoIFFXaWRnZXQqLCBib29sIHVzZVJlbFBvcyA9IEZBTFNFICk7CiAgICBRRGlhbG9nUHJp
dmF0ZSogZDsKCnByaXZhdGU6CSAKCiAgICBRRGlhbG9nKCBjb25zdCBRRGlhbG9nICYgKTsKICAg
IFFEaWFsb2cgJm9wZXJhdG9yPSggY29uc3QgUURpYWxvZyAmICk7Cgp9OwoKCgojIDU2ICIvdXNy
L2xvY2FsL3F0L2luY2x1ZGUvcWZpbGVkaWFsb2cuaCIgMgoKIyAxICIvdXNyL2xvY2FsL3F0L2lu
Y2x1ZGUvcXVybG9wZXJhdG9yLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3F1cmwuaCIgMQogCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmNsYXNzIFFVcmxQcml2YXRlOwoK
Y2xhc3MgICBRVXJsCnsKcHVibGljOgogICAgUVVybCgpOwogICAgUVVybCggY29uc3QgUVN0cmlu
ZyYgdXJsICk7CiAgICBRVXJsKCBjb25zdCBRVXJsJiB1cmwgKTsKICAgIFFVcmwoIGNvbnN0IFFV
cmwmIHVybCwgY29uc3QgUVN0cmluZyYgcmVsVXJsLCBib29sIGNoZWNrU2xhc2ggPSBGQUxTRSAp
OwogICAgdmlydHVhbCB+UVVybCgpOwoKICAgIFFTdHJpbmcgcHJvdG9jb2woKSBjb25zdDsKICAg
IHZpcnR1YWwgdm9pZCBzZXRQcm90b2NvbCggY29uc3QgUVN0cmluZyYgcHJvdG9jb2wgKTsKCiAg
ICBRU3RyaW5nIHVzZXIoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRVc2VyKCBjb25zdCBR
U3RyaW5nJiB1c2VyICk7CiAgICBib29sIGhhc1VzZXIoKSBjb25zdDsKCiAgICBRU3RyaW5nIHBh
c3N3b3JkKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0UGFzc3dvcmQoIGNvbnN0IFFTdHJp
bmcmIHBhc3MgKTsKICAgIGJvb2wgaGFzUGFzc3dvcmQoKSBjb25zdDsKCiAgICBRU3RyaW5nIGhv
c3QoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRIb3N0KCBjb25zdCBRU3RyaW5nJiB1c2Vy
ICk7CiAgICBib29sIGhhc0hvc3QoKSBjb25zdDsKCiAgICBpbnQgcG9ydCgpIGNvbnN0OwogICAg
dmlydHVhbCB2b2lkIHNldFBvcnQoIGludCBwb3J0ICk7CiAgICBib29sIGhhc1BvcnQoKSBjb25z
dDsKCiAgICBRU3RyaW5nIHBhdGgoIGJvb2wgY29ycmVjdCA9IFRSVUUgKSBjb25zdDsKICAgIHZp
cnR1YWwgdm9pZCBzZXRQYXRoKCBjb25zdCBRU3RyaW5nJiBwYXRoICk7CiAgICBib29sIGhhc1Bh
dGgoKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0RW5jb2RlZFBhdGhBbmRRdWVyeSggY29u
c3QgUVN0cmluZyYgZW5jICk7CiAgICBRU3RyaW5nIGVuY29kZWRQYXRoQW5kUXVlcnkoKTsKCiAg
ICB2aXJ0dWFsIHZvaWQgc2V0UXVlcnkoIGNvbnN0IFFTdHJpbmcmIHR4dCApOwogICAgUVN0cmlu
ZyBxdWVyeSgpIGNvbnN0OwoKICAgIFFTdHJpbmcgcmVmKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZv
aWQgc2V0UmVmKCBjb25zdCBRU3RyaW5nJiB0eHQgKTsKICAgIGJvb2wgaGFzUmVmKCkgY29uc3Q7
CgogICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CiAgICBib29sIGlzTG9jYWxGaWxlKCkgY29uc3Q7
CgogICAgdmlydHVhbCB2b2lkIGFkZFBhdGgoIGNvbnN0IFFTdHJpbmcmIHBhdGggKTsKICAgIHZp
cnR1YWwgdm9pZCBzZXRGaWxlTmFtZSggY29uc3QgUVN0cmluZyYgdHh0ICk7CgogICAgUVN0cmlu
ZyBmaWxlTmFtZSgpIGNvbnN0OwogICAgUVN0cmluZyBkaXJQYXRoKCkgY29uc3Q7CgogICAgUVVy
bCYgb3BlcmF0b3I9KCBjb25zdCBRVXJsJiB1cmwgKTsKICAgIFFVcmwmIG9wZXJhdG9yPSggY29u
c3QgUVN0cmluZyYgdXJsICk7CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRVXJsJiB1cmwg
KSBjb25zdDsKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVN0cmluZyYgdXJsICkgY29uc3Q7
CgogICAgc3RhdGljIHZvaWQgZGVjb2RlKCBRU3RyaW5nJiB1cmwgKTsKICAgIHN0YXRpYyB2b2lk
IGVuY29kZSggUVN0cmluZyYgdXJsICk7CgogICAgb3BlcmF0b3IgUVN0cmluZygpIGNvbnN0Owog
ICAgdmlydHVhbCBRU3RyaW5nIHRvU3RyaW5nKCBib29sIGVuY29kZWRQYXRoID0gRkFMU0UsIGJv
b2wgZm9yY2VQcmVwZW5kUHJvdG9jb2wgPSBUUlVFICkgY29uc3Q7CgogICAgdmlydHVhbCBib29s
IGNkVXAoKTsKCiAgICBzdGF0aWMgYm9vbCBpc1JlbGF0aXZlVXJsKCBjb25zdCBRU3RyaW5nICZ1
cmwgKTsKCnByb3RlY3RlZDoKICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOwogICAgdmlydHVhbCBi
b29sIHBhcnNlKCBjb25zdCBRU3RyaW5nJiB1cmwgKTsKCnByaXZhdGU6CiAgICBRVXJsUHJpdmF0
ZSAqZDsKCn07CgoKCgojIDQzICIvdXNyL2xvY2FsL3F0L2luY2x1ZGUvcXVybG9wZXJhdG9yLmgi
IDIKCgojIDEgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xbmV0d29ya3Byb3RvY29sLmgiIDEKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2xvY2FsL3F0
L2luY2x1ZGUvcXVybGluZm8uaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKY2xhc3MgUVVybE9wZXJhdG9yOwpjbGFzcyBRVXJsOwpjbGFzcyBRVXJsSW5m
b1ByaXZhdGU7CgpjbGFzcyAgIFFVcmxJbmZvCnsKcHVibGljOgogICAgUVVybEluZm8oKTsKICAg
IFFVcmxJbmZvKCBjb25zdCBRVXJsT3BlcmF0b3IgJnBhdGgsIGNvbnN0IFFTdHJpbmcgJmZpbGUg
KTsKICAgIFFVcmxJbmZvKCBjb25zdCBRVXJsSW5mbyAmdWkgKTsKICAgIFFVcmxJbmZvKCBjb25z
dCBRU3RyaW5nICZuYW1lLCBpbnQgcGVybWlzc2lvbnMsIGNvbnN0IFFTdHJpbmcgJm93bmVyLAoJ
ICAgICAgY29uc3QgUVN0cmluZyAmZ3JvdXAsIHVpbnQgc2l6ZSwgY29uc3QgUURhdGVUaW1lICZs
YXN0TW9kaWZpZWQsCgkgICAgICBjb25zdCBRRGF0ZVRpbWUgJmxhc3RSZWFkLCBib29sIGlzRGly
LCBib29sIGlzRmlsZSwgYm9vbCBpc1N5bUxpbmssCgkgICAgICBib29sIGlzV3JpdGFibGUsIGJv
b2wgaXNSZWFkYWJsZSwgYm9vbCBpc0V4ZWN1dGFibGUgKTsKICAgIFFVcmxJbmZvKCBjb25zdCBR
VXJsICZ1cmwsIGludCBwZXJtaXNzaW9ucywgY29uc3QgUVN0cmluZyAmb3duZXIsCgkgICAgICBj
b25zdCBRU3RyaW5nICZncm91cCwgdWludCBzaXplLCBjb25zdCBRRGF0ZVRpbWUgJmxhc3RNb2Rp
ZmllZCwKCSAgICAgIGNvbnN0IFFEYXRlVGltZSAmbGFzdFJlYWQsIGJvb2wgaXNEaXIsIGJvb2wg
aXNGaWxlLCBib29sIGlzU3ltTGluaywKCSAgICAgIGJvb2wgaXNXcml0YWJsZSwgYm9vbCBpc1Jl
YWRhYmxlLCBib29sIGlzRXhlY3V0YWJsZSApOwogICAgUVVybEluZm8gJm9wZXJhdG9yPSggY29u
c3QgUVVybEluZm8gJnVpICk7CiAgICB2aXJ0dWFsIH5RVXJsSW5mbygpOwoKICAgIHZpcnR1YWwg
dm9pZCBzZXROYW1lKCBjb25zdCBRU3RyaW5nICZuYW1lICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0
RGlyKCBib29sIGIgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRGaWxlKCBib29sIGIgKTsKICAgIHZp
cnR1YWwgdm9pZCBzZXRTeW1MaW5rKCBib29sIGIgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRPd25l
ciggY29uc3QgUVN0cmluZyAmcyApOwogICAgdmlydHVhbCB2b2lkIHNldEdyb3VwKCBjb25zdCBR
U3RyaW5nICZzICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZSggdWludCBzICk7CiAgICB2aXJ0
dWFsIHZvaWQgc2V0V3JpdGFibGUoIGJvb2wgYiApOwogICAgdmlydHVhbCB2b2lkIHNldFJlYWRh
YmxlKCBib29sIGIgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRQZXJtaXNzaW9ucyggaW50IHAgKTsK
ICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0TW9kaWZpZWQoIGNvbnN0IFFEYXRlVGltZSAmZHQgKTsK
CiAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKCiAgICBRU3RyaW5nIG5hbWUoKSBjb25zdDsKICAg
IGludCBwZXJtaXNzaW9ucygpIGNvbnN0OwogICAgUVN0cmluZyBvd25lcigpIGNvbnN0OwogICAg
UVN0cmluZyBncm91cCgpIGNvbnN0OwogICAgdWludCBzaXplKCkgY29uc3Q7CiAgICBRRGF0ZVRp
bWUgbGFzdE1vZGlmaWVkKCkgY29uc3Q7CiAgICBRRGF0ZVRpbWUgbGFzdFJlYWQoKSBjb25zdDsK
ICAgIGJvb2wgaXNEaXIoKSBjb25zdDsKICAgIGJvb2wgaXNGaWxlKCkgY29uc3Q7CiAgICBib29s
IGlzU3ltTGluaygpIGNvbnN0OwogICAgYm9vbCBpc1dyaXRhYmxlKCkgY29uc3Q7CiAgICBib29s
IGlzUmVhZGFibGUoKSBjb25zdDsKICAgIGJvb2wgaXNFeGVjdXRhYmxlKCkgY29uc3Q7CgogICAg
c3RhdGljIGJvb2wgZ3JlYXRlclRoYW4oIGNvbnN0IFFVcmxJbmZvICZpMSwgY29uc3QgUVVybElu
Zm8gJmkyLAoJCQkgICAgIGludCBzb3J0QnkgKTsKICAgIHN0YXRpYyBib29sIGxlc3NUaGFuKCBj
b25zdCBRVXJsSW5mbyAmaTEsIGNvbnN0IFFVcmxJbmZvICZpMiwKCQkJICBpbnQgc29ydEJ5ICk7
CiAgICBzdGF0aWMgYm9vbCBlcXVhbCggY29uc3QgUVVybEluZm8gJmkxLCBjb25zdCBRVXJsSW5m
byAmaTIsCgkJICAgICAgIGludCBzb3J0QnkgKTsKCiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0
IFFVcmxJbmZvICZpICkgY29uc3Q7CnByaXZhdGU6CiAgICBRVXJsSW5mb1ByaXZhdGUgKmQ7Cgp9
OwoKCiMgNDIgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xbmV0d29ya3Byb3RvY29sLmgiIDIKCgoj
IDEgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xZGljdC5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnRlbXBsYXRlPGNsYXNzIHR5cGU+CmNsYXNzIFFEaWN0
CgoKCgk6IHB1YmxpYyBRR0RpY3QKCnsKcHVibGljOgogICAgUURpY3QoIGludCBzaXplID0gMTcs
IGJvb2wgY2FzZVNlbnNpdGl2ZSA9IFRSVUUgKQoJOiBRR0RpY3QoIHNpemUsIFN0cmluZ0tleSwg
Y2FzZVNlbnNpdGl2ZSwgRkFMU0UgKSB7IH0KICAgIFFEaWN0KCBjb25zdCBRRGljdDx0eXBlPiAm
ZCApIDogUUdEaWN0KCBkICkgeyB9CiAgICB+UURpY3QoKQkJCQl7IGNsZWFyKCk7IH0KICAgIFFE
aWN0PHR5cGU+ICZvcGVyYXRvcj0oY29uc3QgUURpY3Q8dHlwZT4gJmQpCgkJCXsgcmV0dXJuIChR
RGljdDx0eXBlPiYpUUdEaWN0OjpvcGVyYXRvcj0oZCk7IH0KICAgIHVpbnQgIGNvdW50KCkgICBj
b25zdAkJeyByZXR1cm4gUUdEaWN0Ojpjb3VudCgpOyB9CiAgICB1aW50ICBzaXplKCkgICAgY29u
c3QJCXsgcmV0dXJuIFFHRGljdDo6c2l6ZSgpOyB9CiAgICBib29sICBpc0VtcHR5KCkgY29uc3QJ
CXsgcmV0dXJuIFFHRGljdDo6Y291bnQoKSA9PSAwOyB9CgogICAgdm9pZCAgaW5zZXJ0KCBjb25z
dCBRU3RyaW5nICZrLCBjb25zdCB0eXBlICpkICkKCQkJCQl7IFFHRGljdDo6bG9va19zdHJpbmco
aywoSXRlbSlkLDEpOyB9CiAgICB2b2lkICByZXBsYWNlKCBjb25zdCBRU3RyaW5nICZrLCBjb25z
dCB0eXBlICpkICkKCQkJCQl7IFFHRGljdDo6bG9va19zdHJpbmcoaywoSXRlbSlkLDIpOyB9CiAg
ICBib29sICByZW1vdmUoIGNvbnN0IFFTdHJpbmcgJmsgKQl7IHJldHVybiBRR0RpY3Q6OnJlbW92
ZV9zdHJpbmcoayk7IH0KICAgIHR5cGUgKnRha2UoIGNvbnN0IFFTdHJpbmcgJmsgKQl7IHJldHVy
biAodHlwZSAqKVFHRGljdDo6dGFrZV9zdHJpbmcoayk7IH0KICAgIHR5cGUgKmZpbmQoIGNvbnN0
IFFTdHJpbmcgJmsgKSBjb25zdAoJCXsgcmV0dXJuICh0eXBlICopKChRR0RpY3QqKXRoaXMpLT5R
R0RpY3Q6Omxvb2tfc3RyaW5nKGssMCwwKTsgfQogICAgdHlwZSAqb3BlcmF0b3JbXSggY29uc3Qg
UVN0cmluZyAmayApIGNvbnN0CgkJeyByZXR1cm4gKHR5cGUgKikoKFFHRGljdCopdGhpcyktPlFH
RGljdDo6bG9va19zdHJpbmcoaywwLDApOyB9CgogICAgdm9pZCAgY2xlYXIoKQkJCXsgUUdEaWN0
OjpjbGVhcigpOyB9CiAgICB2b2lkICByZXNpemUoIHVpbnQgbiApCQl7IFFHRGljdDo6cmVzaXpl
KG4pOyB9CiAgICB2b2lkICBzdGF0aXN0aWNzKCkgY29uc3QJCXsgUUdEaWN0OjpzdGF0aXN0aWNz
KCk7IH0KCgoKCgoKCnByaXZhdGU6Cgl2b2lkICBkZWxldGVJdGVtKCBJdGVtIGQgKTsKfTsKCgp0
ZW1wbGF0ZTw+IGlubGluZSB2b2lkIFFEaWN0PHZvaWQ+OjpkZWxldGVJdGVtKCBJdGVtICkKewp9
CgoKdGVtcGxhdGU8Y2xhc3MgdHlwZT4gaW5saW5lIHZvaWQgUURpY3Q8dHlwZT46OmRlbGV0ZUl0
ZW0oIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGQgKQp7CiAgICBpZiAoIGRlbF9pdGVtICkgZGVsZXRl
ICh0eXBlICopZDsKfQoKdGVtcGxhdGU8Y2xhc3MgdHlwZT4KY2xhc3MgUURpY3RJdGVyYXRvcgog
OiBwdWJsaWMgUUdEaWN0SXRlcmF0b3IKewpwdWJsaWM6CiAgICBRRGljdEl0ZXJhdG9yKGNvbnN0
IFFEaWN0PHR5cGU+ICZkKSA6IFFHRGljdEl0ZXJhdG9yKChRR0RpY3QgJilkKSB7IH0KICAgIH5R
RGljdEl0ZXJhdG9yKCkJICAgICAge30KICAgIHVpbnQgIGNvdW50KCkgICBjb25zdCAgICAgeyBy
ZXR1cm4gZGljdC0+Y291bnQoKTsgfQogICAgYm9vbCAgaXNFbXB0eSgpIGNvbnN0ICAgICB7IHJl
dHVybiBkaWN0LT5jb3VudCgpID09IDA7IH0KICAgIHR5cGUgKnRvRmlyc3QoKQkgICAgICB7IHJl
dHVybiAodHlwZSAqKVFHRGljdEl0ZXJhdG9yOjp0b0ZpcnN0KCk7IH0KICAgIG9wZXJhdG9yIHR5
cGUgKigpIGNvbnN0ICAgeyByZXR1cm4gKHR5cGUgKilRR0RpY3RJdGVyYXRvcjo6Z2V0KCk7IH0K
ICAgIHR5cGUgKm9wZXJhdG9yKigpICAgICAgICAgeyByZXR1cm4gKHR5cGUgKilRR0RpY3RJdGVy
YXRvcjo6Z2V0KCk7IH0KICAgIHR5cGUgICAqY3VycmVudCgpIGNvbnN0ICAgeyByZXR1cm4gKHR5
cGUgKilRR0RpY3RJdGVyYXRvcjo6Z2V0KCk7IH0KICAgIFFTdHJpbmcgY3VycmVudEtleSgpIGNv
bnN0eyByZXR1cm4gUUdEaWN0SXRlcmF0b3I6OmdldEtleVN0cmluZygpOyB9CiAgICB0eXBlICpv
cGVyYXRvcigpKCkJICAgICAgeyByZXR1cm4gKHR5cGUgKilRR0RpY3RJdGVyYXRvcjo6b3BlcmF0
b3IoKSgpOyB9CiAgICB0eXBlICpvcGVyYXRvcisrKCkJICAgICAgeyByZXR1cm4gKHR5cGUgKilR
R0RpY3RJdGVyYXRvcjo6b3BlcmF0b3IrKygpOyB9CiAgICB0eXBlICpvcGVyYXRvcis9KHVpbnQg
aikgIHsgcmV0dXJuICh0eXBlICopUUdEaWN0SXRlcmF0b3I6Om9wZXJhdG9yKz0oaik7IH0KfTsK
CgojIDQ0ICIvdXNyL2xvY2FsL3F0L2luY2x1ZGUvcW5ldHdvcmtwcm90b2NvbC5oIiAyCgoKCgoK
CmNsYXNzIFFOZXR3b3JrUHJvdG9jb2w7CmNsYXNzIFFOZXR3b3JrT3BlcmF0aW9uOwpjbGFzcyBR
VGltZXI7CmNsYXNzIFFVcmxPcGVyYXRvcjsKY2xhc3MgUU5ldHdvcmtQcm90b2NvbFByaXZhdGU7
CnRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBRVmFsdWVMaXN0OwoKY2xhc3MgICBRTmV0d29ya1By
b3RvY29sRmFjdG9yeUJhc2UKewpwdWJsaWM6CiAgIHZpcnR1YWwgUU5ldHdvcmtQcm90b2NvbCAq
Y3JlYXRlT2JqZWN0KCkgPSAwOwoKfTsKCnRlbXBsYXRlPCBjbGFzcyBQcm90b2NvbCA+CmNsYXNz
IFFOZXR3b3JrUHJvdG9jb2xGYWN0b3J5IDogcHVibGljIFFOZXR3b3JrUHJvdG9jb2xGYWN0b3J5
QmFzZQp7CnB1YmxpYzoKICAgIFFOZXR3b3JrUHJvdG9jb2wgKmNyZWF0ZU9iamVjdCgpIHsKCXJl
dHVybiBuZXcgUHJvdG9jb2w7CiAgICB9Cgp9OwoKdHlwZWRlZiBRRGljdDwgUU5ldHdvcmtQcm90
b2NvbEZhY3RvcnlCYXNlID4gUU5ldHdvcmtQcm90b2NvbERpY3Q7CgpjbGFzcyAgIFFOZXR3b3Jr
UHJvdG9jb2wgOiBwdWJsaWMgUU9iamVjdAp7CiAgICBwdWJsaWM6CXZpcnR1YWwgUU1ldGFPYmpl
Y3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7CX0Jdmly
dHVhbCBjb25zdCBjaGFyICpjbGFzc05hbWUoKSBjb25zdDsJdmlydHVhbCB2b2lkKiBxdF9jYXN0
KCBjb25zdCBjaGFyKiApOyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiAp
OyB2aXJ0dWFsIGJvb2wgcXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0
X3Byb3BlcnR5KCBpbnQsIGludCwgUVZhcmlhbnQqICk7IAlzdGF0aWMgUU1ldGFPYmplY3QqIHN0
YXRpY01ldGFPYmplY3QoKTsJUU9iamVjdCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0
aGlzOyB9IHN0YXRpYyBRU3RyaW5nIHRyKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAg
KTsgc3RhdGljIFFTdHJpbmcgdHJVdGY4KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAg
KTsgCXByaXZhdGU6CXN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsgCgpwdWJsaWM6CiAgICBl
bnVtIFN0YXRlIHsKCVN0V2FpdGluZyA9IDAsCglTdEluUHJvZ3Jlc3MsCglTdERvbmUsCglTdEZh
aWxlZCwKCVN0U3RvcHBlZAogICAgfTsKCiAgICBlbnVtIE9wZXJhdGlvbiB7CglPcExpc3RDaGls
ZHJlbiA9IDEsCglPcE1rRGlyID0gMiwKCU9wTWtkaXIgPSBPcE1rRGlyLCAgCglPcFJlbW92ZSA9
IDQsCglPcFJlbmFtZSA9IDgsCglPcEdldCA9IDMyLAoJT3BQdXQgPSA2NAogICAgfTsKCiAgICBl
bnVtIENvbm5lY3Rpb25TdGF0ZSB7CglDb25Ib3N0Rm91bmQsCglDb25Db25uZWN0ZWQsCglDb25D
bG9zZWQKICAgIH07CgogICAgZW51bSBFcnJvciB7CgkgCglOb0Vycm9yID0gMCwKCSAKCUVyclZh
bGlkLAoJRXJyVW5rbm93blByb3RvY29sLAoJRXJyVW5zdXBwb3J0ZWQsCglFcnJQYXJzZSwKCSAK
CUVyckxvZ2luSW5jb3JyZWN0LAoJRXJySG9zdE5vdEZvdW5kLAoJIAoJRXJyTGlzdENoaWxkcmVu
LAoJRXJyTGlzdENobGlkcmVuID0gRXJyTGlzdENoaWxkcmVuLCAgCglFcnJNa0RpciwKCUVyck1r
ZGlyID0gRXJyTWtEaXIsICAKCUVyclJlbW92ZSwKCUVyclJlbmFtZSwKCUVyckdldCwKCUVyclB1
dCwKCUVyckZpbGVOb3RFeGlzdGluZywKCUVyclBlcm1pc3Npb25EZW5pZWQKICAgIH07CgogICAg
UU5ldHdvcmtQcm90b2NvbCgpOwogICAgdmlydHVhbCB+UU5ldHdvcmtQcm90b2NvbCgpOwoKICAg
IHZpcnR1YWwgdm9pZCBzZXRVcmwoIFFVcmxPcGVyYXRvciAqdSApOwoKICAgIHZpcnR1YWwgdm9p
ZCBzZXRBdXRvRGVsZXRlKCBib29sIGIsIGludCBpID0gMTAwMDAgKTsKICAgIGJvb2wgYXV0b0Rl
bGV0ZSgpIGNvbnN0OwoKICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTmV0d29ya1Byb3RvY29sKCBj
b25zdCBRU3RyaW5nICZwcm90b2NvbCwKCQkJCQkgUU5ldHdvcmtQcm90b2NvbEZhY3RvcnlCYXNl
ICpwcm90b2NvbEZhY3RvcnkgKTsKICAgIHN0YXRpYyBRTmV0d29ya1Byb3RvY29sICpnZXROZXR3
b3JrUHJvdG9jb2woIGNvbnN0IFFTdHJpbmcgJnByb3RvY29sICk7CiAgICBzdGF0aWMgYm9vbCBo
YXNPbmx5TG9jYWxGaWxlU3lzdGVtKCk7CgogICAgdmlydHVhbCBpbnQgc3VwcG9ydGVkT3BlcmF0
aW9ucygpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIGFkZE9wZXJhdGlvbiggUU5ldHdvcmtPcGVy
YXRpb24gKm9wICk7CgogICAgUVVybE9wZXJhdG9yICp1cmwoKSBjb25zdDsKICAgIFFOZXR3b3Jr
T3BlcmF0aW9uICpvcGVyYXRpb25JblByb2dyZXNzKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXJPcGVyYXRpb25RdWV1ZSgpOwogICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKCnByb3RlY3Rl
ZCA6CiAgICB2b2lkIGRhdGEoIGNvbnN0IFFCeXRlQXJyYXkgJiwgUU5ldHdvcmtPcGVyYXRpb24g
KnJlcyApOwogICAgdm9pZCBjb25uZWN0aW9uU3RhdGVDaGFuZ2VkKCBpbnQgc3RhdGUsIGNvbnN0
IFFTdHJpbmcgJmRhdGEgKTsKICAgIHZvaWQgZmluaXNoZWQoIFFOZXR3b3JrT3BlcmF0aW9uICpy
ZXMgKTsKICAgIHZvaWQgc3RhcnQoIFFOZXR3b3JrT3BlcmF0aW9uICpyZXMgKTsKICAgIHZvaWQg
bmV3Q2hpbGRyZW4oIGNvbnN0IFFWYWx1ZUxpc3Q8UVVybEluZm8+ICYsIFFOZXR3b3JrT3BlcmF0
aW9uICpyZXMgKTsKICAgIHZvaWQgbmV3Q2hpbGQoIGNvbnN0IFFVcmxJbmZvICYsIFFOZXR3b3Jr
T3BlcmF0aW9uICpyZXMgKTsKICAgIHZvaWQgY3JlYXRlZERpcmVjdG9yeSggY29uc3QgUVVybElu
Zm8gJiwgUU5ldHdvcmtPcGVyYXRpb24gKnJlcyApOwogICAgdm9pZCByZW1vdmVkKCBRTmV0d29y
a09wZXJhdGlvbiAqcmVzICk7CiAgICB2b2lkIGl0ZW1DaGFuZ2VkKCBRTmV0d29ya09wZXJhdGlv
biAqcmVzICk7CiAgICB2b2lkIGRhdGFUcmFuc2ZlclByb2dyZXNzKCBpbnQgYnl0ZXNEb25lLCBp
bnQgYnl0ZXNUb3RhbCwgUU5ldHdvcmtPcGVyYXRpb24gKnJlcyApOwoKcHJvdGVjdGVkOgogICAg
dmlydHVhbCB2b2lkIHByb2Nlc3NPcGVyYXRpb24oIFFOZXR3b3JrT3BlcmF0aW9uICpvcCApOwog
ICAgdmlydHVhbCB2b2lkIG9wZXJhdGlvbkxpc3RDaGlsZHJlbiggUU5ldHdvcmtPcGVyYXRpb24g
Km9wICk7CiAgICB2aXJ0dWFsIHZvaWQgb3BlcmF0aW9uTWtEaXIoIFFOZXR3b3JrT3BlcmF0aW9u
ICpvcCApOwogICAgdmlydHVhbCB2b2lkIG9wZXJhdGlvblJlbW92ZSggUU5ldHdvcmtPcGVyYXRp
b24gKm9wICk7CiAgICB2aXJ0dWFsIHZvaWQgb3BlcmF0aW9uUmVuYW1lKCBRTmV0d29ya09wZXJh
dGlvbiAqb3AgKTsKICAgIHZpcnR1YWwgdm9pZCBvcGVyYXRpb25HZXQoIFFOZXR3b3JrT3BlcmF0
aW9uICpvcCApOwogICAgdmlydHVhbCB2b2lkIG9wZXJhdGlvblB1dCggUU5ldHdvcmtPcGVyYXRp
b24gKm9wICk7CiAgICB2aXJ0dWFsIHZvaWQgb3BlcmF0aW9uUHV0Q2h1bmsoIFFOZXR3b3JrT3Bl
cmF0aW9uICpvcCApOwogICAgdmlydHVhbCBib29sIGNoZWNrQ29ubmVjdGlvbiggUU5ldHdvcmtP
cGVyYXRpb24gKm9wICk7Cgpwcml2YXRlOgogICAgUU5ldHdvcmtQcm90b2NvbFByaXZhdGUgKmQ7
Cgpwcml2YXRlICA6CiAgICB2b2lkIHByb2Nlc3NOZXh0T3BlcmF0aW9uKCBRTmV0d29ya09wZXJh
dGlvbiAqb2xkICk7CiAgICB2b2lkIHN0YXJ0T3BzKCk7CiAgICB2b2lkIGVtaXROZXdDaGlsZHJl
biggY29uc3QgUVVybEluZm8gJmksIFFOZXR3b3JrT3BlcmF0aW9uICpvcCApOwoKICAgIHZvaWQg
cmVtb3ZlTWUoKTsKCn07CgpjbGFzcyBRTmV0d29ya09wZXJhdGlvblByaXZhdGU7CgpjbGFzcyAg
IFFOZXR3b3JrT3BlcmF0aW9uIDogcHVibGljIFFPYmplY3QKewogICAgcHVibGljOgl2aXJ0dWFs
IFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVj
dCgpOwl9CXZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7CXZpcnR1YWwgdm9p
ZCogcXRfY2FzdCggY29uc3QgY2hhciogKTsgdmlydHVhbCBib29sIHF0X2ludm9rZSggaW50LCBR
VU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X2VtaXQoIGludCwgUVVPYmplY3QqICk7IHZpcnR1
YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50LCBpbnQsIFFWYXJpYW50KiApOyAJc3RhdGljIFFNZXRh
T2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7CVFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAo
UU9iamVjdCopdGhpczsgfSBzdGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBj
aGFyICogPSAwICk7IHN0YXRpYyBRU3RyaW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBj
aGFyICogPSAwICk7IAlwcml2YXRlOglzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7IAogICAg
ZnJpZW5kIGNsYXNzIFFVcmxPcGVyYXRvcjsKCnB1YmxpYzoKICAgIFFOZXR3b3JrT3BlcmF0aW9u
KCBRTmV0d29ya1Byb3RvY29sOjpPcGVyYXRpb24gb3BlcmF0aW9uLAoJCSAgICBjb25zdCBRU3Ry
aW5nICZhcmcwLCBjb25zdCBRU3RyaW5nICZhcmcxLAoJCSAgICBjb25zdCBRU3RyaW5nICZhcmcy
ICk7CiAgICBRTmV0d29ya09wZXJhdGlvbiggUU5ldHdvcmtQcm90b2NvbDo6T3BlcmF0aW9uIG9w
ZXJhdGlvbiwKCQkgICAgY29uc3QgUUJ5dGVBcnJheSAmYXJnMCwgY29uc3QgUUJ5dGVBcnJheSAm
YXJnMSwKCQkgICAgY29uc3QgUUJ5dGVBcnJheSAmYXJnMiApOwogICAgflFOZXR3b3JrT3BlcmF0
aW9uKCk7CgogICAgdm9pZCBzZXRTdGF0ZSggUU5ldHdvcmtQcm90b2NvbDo6U3RhdGUgc3RhdGUg
KTsKICAgIHZvaWQgc2V0UHJvdG9jb2xEZXRhaWwoIGNvbnN0IFFTdHJpbmcgJmRldGFpbCApOwog
ICAgdm9pZCBzZXRFcnJvckNvZGUoIGludCBlYyApOwogICAgdm9pZCBzZXRBcmcoIGludCBudW0s
IGNvbnN0IFFTdHJpbmcgJmFyZyApOwogICAgdm9pZCBzZXRSYXdBcmcoIGludCBudW0sIGNvbnN0
IFFCeXRlQXJyYXkgJmFyZyApOwoKICAgIFFOZXR3b3JrUHJvdG9jb2w6Ok9wZXJhdGlvbiBvcGVy
YXRpb24oKSBjb25zdDsKICAgIFFOZXR3b3JrUHJvdG9jb2w6OlN0YXRlIHN0YXRlKCkgY29uc3Q7
CiAgICBRU3RyaW5nIGFyZyggaW50IG51bSApIGNvbnN0OwogICAgUUJ5dGVBcnJheSByYXdBcmco
IGludCBudW0gKSBjb25zdDsKICAgIFFTdHJpbmcgcHJvdG9jb2xEZXRhaWwoKSBjb25zdDsKICAg
IGludCBlcnJvckNvZGUoKSBjb25zdDsKCiAgICB2b2lkIGZyZWUoKTsKCnByaXZhdGUgIDoKICAg
IHZvaWQgZGVsZXRlTWUoKTsKCnByaXZhdGU6CiAgICBRQnl0ZUFycmF5ICZyYXcoIGludCBudW0g
KSBjb25zdDsKICAgIFFOZXR3b3JrT3BlcmF0aW9uUHJpdmF0ZSAqZDsKCn07CgoKCgojIDQ1ICIv
dXNyL2xvY2FsL3F0L2luY2x1ZGUvcXVybG9wZXJhdG9yLmgiIDIKCgoKCgoKY2xhc3MgUVVybElu
Zm87CmNsYXNzIFFVcmxPcGVyYXRvclByaXZhdGU7CgpjbGFzcyAgIFFVcmxPcGVyYXRvciA6IHB1
YmxpYyBRT2JqZWN0LCBwdWJsaWMgUVVybAp7CiAgICBmcmllbmQgY2xhc3MgUU5ldHdvcmtQcm90
b2NvbDsKCiAgICBwdWJsaWM6CXZpcnR1YWwgUU1ldGFPYmplY3QgKm1ldGFPYmplY3QoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7CX0JdmlydHVhbCBjb25zdCBjaGFyICpjbGFz
c05hbWUoKSBjb25zdDsJdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBjb25zdCBjaGFyKiApOyB2aXJ0
dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfZW1p
dCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X3Byb3BlcnR5KCBpbnQsIGludCwg
UVZhcmlhbnQqICk7IAlzdGF0aWMgUU1ldGFPYmplY3QqIHN0YXRpY01ldGFPYmplY3QoKTsJUU9i
amVjdCogcU9iamVjdCgpIHsgcmV0dXJuIChRT2JqZWN0Kil0aGlzOyB9IHN0YXRpYyBRU3RyaW5n
IHRyKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgc3RhdGljIFFTdHJpbmcgdHJV
dGY4KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiA9IDAgKTsgCXByaXZhdGU6CXN0YXRpYyBR
TWV0YU9iamVjdCAqbWV0YU9iajsgCgpwdWJsaWM6CiAgICBRVXJsT3BlcmF0b3IoKTsKICAgIFFV
cmxPcGVyYXRvciggY29uc3QgUVN0cmluZyAmdXJMICk7CiAgICBRVXJsT3BlcmF0b3IoIGNvbnN0
IFFVcmxPcGVyYXRvciYgdXJsICk7CiAgICBRVXJsT3BlcmF0b3IoIGNvbnN0IFFVcmxPcGVyYXRv
ciYgdXJsLCBjb25zdCBRU3RyaW5nJiByZWxVcmwsIGJvb2wgY2hlY2tTbGFzaCA9IEZBTFNFICk7
CiAgICB2aXJ0dWFsIH5RVXJsT3BlcmF0b3IoKTsKCiAgICB2aXJ0dWFsIHZvaWQgc2V0UGF0aCgg
Y29uc3QgUVN0cmluZyYgcGF0aCApOwogICAgdmlydHVhbCBib29sIGNkVXAoKTsKCiAgICB2aXJ0
dWFsIGNvbnN0IFFOZXR3b3JrT3BlcmF0aW9uICpsaXN0Q2hpbGRyZW4oKTsKICAgIHZpcnR1YWwg
Y29uc3QgUU5ldHdvcmtPcGVyYXRpb24gKm1rZGlyKCBjb25zdCBRU3RyaW5nICZkaXJuYW1lICk7
CiAgICB2aXJ0dWFsIGNvbnN0IFFOZXR3b3JrT3BlcmF0aW9uICpyZW1vdmUoIGNvbnN0IFFTdHJp
bmcgJmZpbGVuYW1lICk7CiAgICB2aXJ0dWFsIGNvbnN0IFFOZXR3b3JrT3BlcmF0aW9uICpyZW5h
bWUoIGNvbnN0IFFTdHJpbmcgJm9sZG5hbWUsIGNvbnN0IFFTdHJpbmcgJm5ld25hbWUgKTsKICAg
IHZpcnR1YWwgY29uc3QgUU5ldHdvcmtPcGVyYXRpb24gKmdldCggY29uc3QgUVN0cmluZyAmbG9j
YXRpb24gPSBRU3RyaW5nOjpudWxsICk7CiAgICB2aXJ0dWFsIGNvbnN0IFFOZXR3b3JrT3BlcmF0
aW9uICpwdXQoIGNvbnN0IFFCeXRlQXJyYXkgJmRhdGEsIGNvbnN0IFFTdHJpbmcgJmxvY2F0aW9u
ID0gUVN0cmluZzo6bnVsbCAgKTsKICAgIHZpcnR1YWwgUVB0ckxpc3Q8UU5ldHdvcmtPcGVyYXRp
b24+IGNvcHkoIGNvbnN0IFFTdHJpbmcgJmZyb20sIGNvbnN0IFFTdHJpbmcgJnRvLCBib29sIG1v
dmUgPSBGQUxTRSwgYm9vbCB0b1BhdGggPSBUUlVFICk7CiAgICB2aXJ0dWFsIHZvaWQgY29weSgg
Y29uc3QgUVN0cmluZ0xpc3QgJmZpbGVzLCBjb25zdCBRU3RyaW5nICZkZXN0LCBib29sIG1vdmUg
PSBGQUxTRSApOwogICAgdmlydHVhbCBib29sIGlzRGlyKCBib29sICpvayA9IDAgKTsKCiAgICB2
aXJ0dWFsIHZvaWQgc2V0TmFtZUZpbHRlciggY29uc3QgUVN0cmluZyAmbmFtZUZpbHRlciApOwog
ICAgUVN0cmluZyBuYW1lRmlsdGVyKCkgY29uc3Q7CgogICAgdmlydHVhbCBRVXJsSW5mbyBpbmZv
KCBjb25zdCBRU3RyaW5nICZlbnRyeSApIGNvbnN0OwoKICAgIFFVcmxPcGVyYXRvciYgb3BlcmF0
b3I9KCBjb25zdCBRVXJsT3BlcmF0b3IgJnVybCApOwogICAgUVVybE9wZXJhdG9yJiBvcGVyYXRv
cj0oIGNvbnN0IFFTdHJpbmcgJnVybCApOwoKICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7Cgpwcm90
ZWN0ZWQgOgogICAgdm9pZCBuZXdDaGlsZHJlbiggY29uc3QgUVZhbHVlTGlzdDxRVXJsSW5mbz4g
JiwgUU5ldHdvcmtPcGVyYXRpb24gKnJlcyApOwogICAgdm9pZCBmaW5pc2hlZCggUU5ldHdvcmtP
cGVyYXRpb24gKnJlcyApOwogICAgdm9pZCBzdGFydCggUU5ldHdvcmtPcGVyYXRpb24gKnJlcyAp
OwogICAgdm9pZCBjcmVhdGVkRGlyZWN0b3J5KCBjb25zdCBRVXJsSW5mbyAmLCBRTmV0d29ya09w
ZXJhdGlvbiAqcmVzICk7CiAgICB2b2lkIHJlbW92ZWQoIFFOZXR3b3JrT3BlcmF0aW9uICpyZXMg
KTsKICAgIHZvaWQgaXRlbUNoYW5nZWQoIFFOZXR3b3JrT3BlcmF0aW9uICpyZXMgKTsKICAgIHZv
aWQgZGF0YSggY29uc3QgUUJ5dGVBcnJheSAmLCBRTmV0d29ya09wZXJhdGlvbiAqcmVzICk7CiAg
ICB2b2lkIGRhdGFUcmFuc2ZlclByb2dyZXNzKCBpbnQgYnl0ZXNEb25lLCBpbnQgYnl0ZXNUb3Rh
bCwgUU5ldHdvcmtPcGVyYXRpb24gKnJlcyApOwogICAgdm9pZCBzdGFydGVkTmV4dENvcHkoIGNv
bnN0IFFQdHJMaXN0PFFOZXR3b3JrT3BlcmF0aW9uPiAmbHN0ICk7CiAgICB2b2lkIGNvbm5lY3Rp
b25TdGF0ZUNoYW5nZWQoIGludCBzdGF0ZSwgY29uc3QgUVN0cmluZyAmZGF0YSApOwoKcHJvdGVj
dGVkOgogICAgdm9pZCByZXNldCgpOwogICAgYm9vbCBwYXJzZSggY29uc3QgUVN0cmluZyYgdXJs
ICk7CiAgICB2aXJ0dWFsIGJvb2wgY2hlY2tWYWxpZCgpOwogICAgdmlydHVhbCB2b2lkIGNsZWFy
RW50cmllcygpOwogICAgdm9pZCBnZXROZXR3b3JrUHJvdG9jb2woKTsKICAgIHZvaWQgZGVsZXRl
TmV0d29ya1Byb3RvY29sKCk7Cgpwcml2YXRlICA6CiAgICBjb25zdCBRTmV0d29ya09wZXJhdGlv
biAqc3RhcnRPcGVyYXRpb24oIFFOZXR3b3JrT3BlcmF0aW9uICpvcCApOwogICAgdm9pZCBjb3B5
R290RGF0YSggY29uc3QgUUJ5dGVBcnJheSAmZGF0YSwgUU5ldHdvcmtPcGVyYXRpb24gKm9wICk7
CiAgICB2b2lkIGNvbnRpbnVlQ29weSggUU5ldHdvcmtPcGVyYXRpb24gKm9wICk7CiAgICB2b2lk
IGZpbmlzaGVkQ29weSgpOwogICAgdm9pZCBhZGRFbnRyeSggY29uc3QgUVZhbHVlTGlzdDxRVXJs
SW5mbz4gJmkgKTsKICAgIHZvaWQgc2xvdEl0ZW1DaGFuZ2VkKCBRTmV0d29ya09wZXJhdGlvbiAq
b3AgKTsKCnByaXZhdGU6CiAgICB2b2lkIGRlbGV0ZU9wZXJhdGlvbiggUU5ldHdvcmtPcGVyYXRp
b24gKm9wICk7CgogICAgUVVybE9wZXJhdG9yUHJpdmF0ZSAqZDsKCn07CgoKCgojIDU3ICIvdXNy
L2xvY2FsL3F0L2luY2x1ZGUvcWZpbGVkaWFsb2cuaCIgMgoKCgoKCgpjbGFzcyAgIFFGaWxlSWNv
blByb3ZpZGVyIDogcHVibGljIFFPYmplY3QKewogICAgcHVibGljOgl2aXJ0dWFsIFFNZXRhT2Jq
ZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOwl9CXZp
cnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7CXZpcnR1YWwgdm9pZCogcXRfY2Fz
dCggY29uc3QgY2hhciogKTsgdmlydHVhbCBib29sIHF0X2ludm9rZSggaW50LCBRVU9iamVjdCog
KTsgdmlydHVhbCBib29sIHF0X2VtaXQoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBx
dF9wcm9wZXJ0eSggaW50LCBpbnQsIFFWYXJpYW50KiApOyAJc3RhdGljIFFNZXRhT2JqZWN0KiBz
dGF0aWNNZXRhT2JqZWN0KCk7CVFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCop
dGhpczsgfSBzdGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAw
ICk7IHN0YXRpYyBRU3RyaW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAw
ICk7IAlwcml2YXRlOglzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7IApwdWJsaWM6CiAgICBR
RmlsZUljb25Qcm92aWRlciggUU9iamVjdCAqIHBhcmVudCA9IDAsIGNvbnN0IGNoYXIqIG5hbWUg
PSAwICk7CiAgICB2aXJ0dWFsIGNvbnN0IFFQaXhtYXAgKiBwaXhtYXAoIGNvbnN0IFFGaWxlSW5m
byAmICk7Cgpwcml2YXRlOgkgCgogICAgUUZpbGVJY29uUHJvdmlkZXIoIGNvbnN0IFFGaWxlSWNv
blByb3ZpZGVyICYgKTsKICAgIFFGaWxlSWNvblByb3ZpZGVyJiBvcGVyYXRvcj0oIGNvbnN0IFFG
aWxlSWNvblByb3ZpZGVyICYgKTsKCn07CgpjbGFzcyAgIFFGaWxlUHJldmlldwp7CnB1YmxpYzoK
ICAgIFFGaWxlUHJldmlldygpOwogICAgdmlydHVhbCB2b2lkIHByZXZpZXdVcmwoIGNvbnN0IFFV
cmwgJnVybCApID0gMDsKCn07CgpjbGFzcyAgIFFGaWxlRGlhbG9nIDogcHVibGljIFFEaWFsb2cK
ewogICAgcHVibGljOgl2aXJ0dWFsIFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljTWV0YU9iamVjdCgpOwl9CXZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1l
KCkgY29uc3Q7CXZpcnR1YWwgdm9pZCogcXRfY2FzdCggY29uc3QgY2hhciogKTsgdmlydHVhbCBi
b29sIHF0X2ludm9rZSggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X2VtaXQoIGlu
dCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50LCBpbnQsIFFWYXJp
YW50KiApOyAJc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7CVFPYmplY3Qq
IHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBzdGF0aWMgUVN0cmluZyB0cigg
Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRpYyBRU3RyaW5nIHRyVXRmOCgg
Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IAlwcml2YXRlOglzdGF0aWMgUU1ldGFP
YmplY3QgKm1ldGFPYmo7IAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAg
IAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAoKcHVibGljOgogICAgUUZpbGVE
aWFsb2coIGNvbnN0IFFTdHJpbmcmIGRpck5hbWUsIGNvbnN0IFFTdHJpbmcmIGZpbHRlciA9IFFT
dHJpbmc6Om51bGwsCgkJIFFXaWRnZXQqIHBhcmVudD0wLCBjb25zdCBjaGFyKiBuYW1lPTAsIGJv
b2wgbW9kYWwgPSBGQUxTRSApOwogICAgUUZpbGVEaWFsb2coIFFXaWRnZXQqIHBhcmVudD0wLCBj
b25zdCBjaGFyKiBuYW1lPTAsIGJvb2wgbW9kYWwgPSBGQUxTRSApOwogICAgflFGaWxlRGlhbG9n
KCk7CgogICAgIAoKICAgIHN0YXRpYyBRU3RyaW5nIGdldE9wZW5GaWxlTmFtZSggY29uc3QgUVN0
cmluZyAmaW5pdGlhbGx5ID0gUVN0cmluZzo6bnVsbCwKCQkJCSAgICBjb25zdCBRU3RyaW5nICZm
aWx0ZXIgPSBRU3RyaW5nOjpudWxsLAoJCQkJICAgIFFXaWRnZXQgKnBhcmVudCA9IDAsIGNvbnN0
IGNoYXIqIG5hbWUgPSAwLAoJCQkJICAgIGNvbnN0IFFTdHJpbmcgJmNhcHRpb24gPSBRU3RyaW5n
OjpudWxsLAoJCQkJICAgIFFTdHJpbmcgKnNlbGVjdGVkRmlsdGVyID0gMCwKCQkJCSAgICBib29s
IHJlc29sdmVTeW1saW5rcyA9IFRSVUUpOwogICAgc3RhdGljIFFTdHJpbmcgZ2V0U2F2ZUZpbGVO
YW1lKCBjb25zdCBRU3RyaW5nICZpbml0aWFsbHkgPSBRU3RyaW5nOjpudWxsLAoJCQkJICAgIGNv
bnN0IFFTdHJpbmcgJmZpbHRlciA9IFFTdHJpbmc6Om51bGwsCgkJCQkgICAgUVdpZGdldCAqcGFy
ZW50ID0gMCwgY29uc3QgY2hhciogbmFtZSA9IDAsCgkJCQkgICAgY29uc3QgUVN0cmluZyAmY2Fw
dGlvbiA9IFFTdHJpbmc6Om51bGwsCgkJCQkgICAgUVN0cmluZyAqc2VsZWN0ZWRGaWx0ZXIgPSAw
LAoJCQkJICAgIGJvb2wgcmVzb2x2ZVN5bWxpbmtzID0gVFJVRSk7CiAgICBzdGF0aWMgUVN0cmlu
ZyBnZXRFeGlzdGluZ0RpcmVjdG9yeSggY29uc3QgUVN0cmluZyAmZGlyID0gUVN0cmluZzo6bnVs
bCwKCQkJCQkgUVdpZGdldCAqcGFyZW50ID0gMCwKCQkJCQkgY29uc3QgY2hhciogbmFtZSA9IDAs
CgkJCQkJIGNvbnN0IFFTdHJpbmcgJmNhcHRpb24gPSBRU3RyaW5nOjpudWxsLAoJCQkJCSBib29s
IGRpck9ubHkgPSBUUlVFLAoJCQkJCSBib29sIHJlc29sdmVTeW1saW5rcyA9IFRSVUUpOwogICAg
c3RhdGljIFFTdHJpbmdMaXN0IGdldE9wZW5GaWxlTmFtZXMoIGNvbnN0IFFTdHJpbmcgJmZpbHRl
cj0gUVN0cmluZzo6bnVsbCwKCQkJCQkgY29uc3QgUVN0cmluZyAmZGlyID0gUVN0cmluZzo6bnVs
bCwKCQkJCQkgUVdpZGdldCAqcGFyZW50ID0gMCwKCQkJCQkgY29uc3QgY2hhciogbmFtZSA9IDAs
CgkJCQkJIGNvbnN0IFFTdHJpbmcgJmNhcHRpb24gPSBRU3RyaW5nOjpudWxsLAoJCQkJCSBRU3Ry
aW5nICpzZWxlY3RlZEZpbHRlciA9IDAsCgkJCQkJIGJvb2wgcmVzb2x2ZVN5bWxpbmtzID0gVFJV
RSk7CgogICAgIAoKICAgIHN0YXRpYyB2b2lkIHNldEljb25Qcm92aWRlciggUUZpbGVJY29uUHJv
dmlkZXIgKiApOwogICAgc3RhdGljIFFGaWxlSWNvblByb3ZpZGVyICogaWNvblByb3ZpZGVyKCk7
CgogICAgIAoKICAgIFFTdHJpbmcgc2VsZWN0ZWRGaWxlKCkgY29uc3Q7CiAgICBRU3RyaW5nIHNl
bGVjdGVkRmlsdGVyKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0ZWRGaWx0ZXIo
IGNvbnN0IFFTdHJpbmcmICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0ZWRGaWx0ZXIoIGlu
dCApOwoKICAgIHZvaWQgc2V0U2VsZWN0aW9uKCBjb25zdCBRU3RyaW5nICYpOwoKICAgIHZvaWQg
c2VsZWN0QWxsKCBib29sIGIgKTsKCiAgICBRU3RyaW5nTGlzdCBzZWxlY3RlZEZpbGVzKCkgY29u
c3Q7CgogICAgUVN0cmluZyBkaXJQYXRoKCkgY29uc3Q7CgogICAgdm9pZCBzZXREaXIoIGNvbnN0
IFFEaXIgJiApOwogICAgY29uc3QgUURpciAqZGlyKCkgY29uc3Q7CgogICAgdm9pZCBzZXRTaG93
SGlkZGVuRmlsZXMoIGJvb2wgcyApOwogICAgYm9vbCBzaG93SGlkZGVuRmlsZXMoKSBjb25zdDsK
CiAgICB2b2lkIHJlcmVhZERpcigpOwogICAgdm9pZCByZXNvcnREaXIoKTsKCiAgICBlbnVtIE1v
ZGUgeyBBbnlGaWxlLCBFeGlzdGluZ0ZpbGUsIERpcmVjdG9yeSwgRXhpc3RpbmdGaWxlcywgRGly
ZWN0b3J5T25seSB9OwogICAgdm9pZCBzZXRNb2RlKCBNb2RlICk7CiAgICBNb2RlIG1vZGUoKSBj
b25zdDsKCiAgICBlbnVtIFZpZXdNb2RlIHsgRGV0YWlsLCBMaXN0IH07CiAgICBlbnVtIFByZXZp
ZXdNb2RlIHsgTm9QcmV2aWV3LCBDb250ZW50cywgSW5mbyB9OwogICAgdm9pZCBzZXRWaWV3TW9k
ZSggVmlld01vZGUgbSApOwogICAgVmlld01vZGUgdmlld01vZGUoKSBjb25zdDsKICAgIHZvaWQg
c2V0UHJldmlld01vZGUoIFByZXZpZXdNb2RlIG0gKTsKICAgIFByZXZpZXdNb2RlIHByZXZpZXdN
b2RlKCkgY29uc3Q7CgogICAgYm9vbCBldmVudEZpbHRlciggUU9iamVjdCAqLCBRRXZlbnQgKiAp
OwoKICAgIGJvb2wgaXNJbmZvUHJldmlld0VuYWJsZWQoKSBjb25zdDsKICAgIGJvb2wgaXNDb250
ZW50c1ByZXZpZXdFbmFibGVkKCkgY29uc3Q7CiAgICB2b2lkIHNldEluZm9QcmV2aWV3RW5hYmxl
ZCggYm9vbCApOwogICAgdm9pZCBzZXRDb250ZW50c1ByZXZpZXdFbmFibGVkKCBib29sICk7Cgog
ICAgdm9pZCBzZXRJbmZvUHJldmlldyggUVdpZGdldCAqdywgUUZpbGVQcmV2aWV3ICpwcmV2aWV3
ICk7CiAgICB2b2lkIHNldENvbnRlbnRzUHJldmlldyggUVdpZGdldCAqdywgUUZpbGVQcmV2aWV3
ICpwcmV2aWV3ICk7CgogICAgUVVybCB1cmwoKSBjb25zdDsKCiAgICB2b2lkIGFkZEZpbHRlcigg
Y29uc3QgUVN0cmluZyAmZmlsdGVyICk7CgpwdWJsaWMgIDoKICAgIHZvaWQgZG9uZSggaW50ICk7
CiAgICB2b2lkIHNldERpciggY29uc3QgUVN0cmluZyYgKTsKICAgIHZvaWQgc2V0VXJsKCBjb25z
dCBRVXJsT3BlcmF0b3IgJnVybCApOwogICAgdm9pZCBzZXRGaWx0ZXIoIGNvbnN0IFFTdHJpbmcm
ICk7CiAgICB2b2lkIHNldEZpbHRlcnMoIGNvbnN0IFFTdHJpbmcmICk7CiAgICB2b2lkIHNldEZp
bHRlcnMoIGNvbnN0IGNoYXIgKiogKTsKICAgIHZvaWQgc2V0RmlsdGVycyggY29uc3QgUVN0cmlu
Z0xpc3QmICk7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIHJlc2l6ZUV2ZW50KCBRUmVzaXplRXZlbnQg
KiApOwogICAgdm9pZCBrZXlQcmVzc0V2ZW50KCBRS2V5RXZlbnQgKiApOwoKICAgIHZvaWQgYWRk
V2lkZ2V0cyggUUxhYmVsICosIFFXaWRnZXQgKiwgUVB1c2hCdXR0b24gKiApOwogICAgdm9pZCBh
ZGRUb29sQnV0dG9uKCBRQnV0dG9uICpiLCBib29sIHNlcGFyYXRvciA9IEZBTFNFICk7CiAgICB2
b2lkIGFkZExlZnRXaWRnZXQoIFFXaWRnZXQgKncgKTsKICAgIHZvaWQgYWRkUmlnaHRXaWRnZXQo
IFFXaWRnZXQgKncgKTsKCnByb3RlY3RlZCA6CiAgICB2b2lkIGZpbGVIaWdobGlnaHRlZCggY29u
c3QgUVN0cmluZyYgKTsKICAgIHZvaWQgZmlsZVNlbGVjdGVkKCBjb25zdCBRU3RyaW5nJiApOwog
ICAgdm9pZCBmaWxlc1NlbGVjdGVkKCBjb25zdCBRU3RyaW5nTGlzdCYgKTsKICAgIHZvaWQgZGly
RW50ZXJlZCggY29uc3QgUVN0cmluZyYgKTsKICAgIHZvaWQgZmlsdGVyU2VsZWN0ZWQoIGNvbnN0
IFFTdHJpbmcmICk7Cgpwcml2YXRlICA6CiAgICB2b2lkIGRldGFpbFZpZXdTZWxlY3Rpb25DaGFu
Z2VkKCk7CiAgICB2b2lkIGxpc3RCb3hTZWxlY3Rpb25DaGFuZ2VkKCk7CiAgICB2b2lkIGNoYW5n
ZU1vZGUoIGludCApOwogICAgdm9pZCBmaWxlTmFtZUVkaXRSZXR1cm5QcmVzc2VkKCk7CiAgICB2
b2lkIHN0b3BDb3B5KCk7CiAgICB2b2lkIHJlbW92ZVByb2dyZXNzRGlhKCk7CgogICAgdm9pZCBm
aWxlU2VsZWN0ZWQoIGludCApOwogICAgdm9pZCBmaWxlSGlnaGxpZ2h0ZWQoIGludCApOwogICAg
dm9pZCBkaXJTZWxlY3RlZCggaW50ICk7CiAgICB2b2lkIHBhdGhTZWxlY3RlZCggaW50ICk7Cgog
ICAgdm9pZCB1cGRhdGVGaWxlTmFtZUVkaXQoIFFMaXN0Vmlld0l0ZW0gKik7CiAgICB2b2lkIHNl
bGVjdERpcmVjdG9yeU9yRmlsZSggUUxpc3RWaWV3SXRlbSAqICk7CiAgICB2b2lkIHBvcHVwQ29u
dGV4dE1lbnUoIFFMaXN0Vmlld0l0ZW0gKiwgY29uc3QgUVBvaW50ICYsIGludCApOwogICAgdm9p
ZCBwb3B1cENvbnRleHRNZW51KCBRTGlzdEJveEl0ZW0gKiwgY29uc3QgUVBvaW50ICYgKTsKICAg
IHZvaWQgdXBkYXRlRmlsZU5hbWVFZGl0KCBRTGlzdEJveEl0ZW0gKik7CiAgICB2b2lkIHNlbGVj
dERpcmVjdG9yeU9yRmlsZSggUUxpc3RCb3hJdGVtICogKTsKICAgIHZvaWQgZmlsZU5hbWVFZGl0
RG9uZSgpOwoKICAgIHZvaWQgb2tDbGlja2VkKCk7CiAgICB2b2lkIGZpbHRlckNsaWNrZWQoKTsg
IAogICAgdm9pZCBjYW5jZWxDbGlja2VkKCk7CgogICAgdm9pZCBjZFVwQ2xpY2tlZCgpOwogICAg
dm9pZCBuZXdGb2xkZXJDbGlja2VkKCk7CgogICAgdm9pZCBmaXh1cE5hbWVFZGl0KCk7CgogICAg
dm9pZCBkb01pbWVUeXBlTG9va3VwKCk7CgogICAgdm9pZCB1cGRhdGVHZW9tZXRyaWVzKCk7CiAg
ICB2b2lkIG1vZGVCdXR0b25zRGVzdHJveWVkKCk7CiAgICB2b2lkIHVybFN0YXJ0KCBRTmV0d29y
a09wZXJhdGlvbiAqb3AgKTsKICAgIHZvaWQgdXJsRmluaXNoZWQoIFFOZXR3b3JrT3BlcmF0aW9u
ICpvcCApOwogICAgdm9pZCBkYXRhVHJhbnNmZXJQcm9ncmVzcyggaW50IGJ5dGVzRG9uZSwgaW50
IGJ5dGVzVG90YWwsIFFOZXR3b3JrT3BlcmF0aW9uICogKTsKICAgIHZvaWQgaW5zZXJ0RW50cnko
IGNvbnN0IFFWYWx1ZUxpc3Q8UVVybEluZm8+ICZmaSwgUU5ldHdvcmtPcGVyYXRpb24gKm9wICk7
CiAgICB2b2lkIHJlbW92ZUVudHJ5KCBRTmV0d29ya09wZXJhdGlvbiAqICk7CiAgICB2b2lkIGNy
ZWF0ZWREaXJlY3RvcnkoIGNvbnN0IFFVcmxJbmZvICZpbmZvLCBRTmV0d29ya09wZXJhdGlvbiAq
ICk7CiAgICB2b2lkIGl0ZW1DaGFuZ2VkKCBRTmV0d29ya09wZXJhdGlvbiAqICk7CiAgICB2b2lk
IGdvQmFjaygpOwoKcHJpdmF0ZToKICAgIGVudW0gUG9wdXBBY3Rpb24gewoJUEFfT3BlbiA9IDAs
CglQQV9EZWxldGUsCglQQV9SZW5hbWUsCglQQV9Tb3J0TmFtZSwKCVBBX1NvcnRTaXplLAoJUEFf
U29ydFR5cGUsCglQQV9Tb3J0RGF0ZSwKCVBBX1NvcnRVbnNvcnRlZCwKCVBBX0NhbmNlbCwKCVBB
X1JlbG9hZCwKCVBBX0hpZGRlbgogICAgfTsKCiAgICB2b2lkIGluaXQoKTsKICAgIGJvb2wgdHJ5
U2V0U2VsZWN0aW9uKCBib29sIGlzRGlyLCBjb25zdCBRVXJsT3BlcmF0b3IgJiwgYm9vbCApOwog
ICAgdm9pZCBkZWxldGVGaWxlKCBjb25zdCBRU3RyaW5nICZmaWxlbmFtZSApOwogICAgdm9pZCBw
b3B1cENvbnRleHRNZW51KCBjb25zdCBRU3RyaW5nICZmaWxlbmFtZSwgYm9vbCB3aXRoU29ydCwK
CQkJICAgUG9wdXBBY3Rpb24gJmFjdGlvbiwgY29uc3QgUVBvaW50ICZwICk7CgogICAgUURpciBy
ZXNlcnZlZDsgIAogICAgUVN0cmluZyBmaWxlTmFtZTsKCiAgICBmcmllbmQgY2xhc3MgUUZpbGVE
aWFsb2dRRmlsZUxpc3RWaWV3OwogICAgZnJpZW5kIGNsYXNzIFFGaWxlTGlzdEJveDsKCiAgICBR
RmlsZURpYWxvZ1ByaXZhdGUgKmQ7CiAgICBRRmlsZURpYWxvZ1FGaWxlTGlzdFZpZXcgICpmaWxl
czsKCiAgICBRTGluZUVkaXQgICpuYW1lRWRpdDsgIAogICAgUVB1c2hCdXR0b24gKm9rQjsKICAg
IFFQdXNoQnV0dG9uICpjYW5jZWxCOwoKIyAzMTggIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xZmls
ZWRpYWxvZy5oIgoKIyAzMjcgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xZmlsZWRpYWxvZy5oIgoK
Cgpwcml2YXRlOgkgCgogICAgUUZpbGVEaWFsb2coIGNvbnN0IFFGaWxlRGlhbG9nICYgKTsKICAg
IFFGaWxlRGlhbG9nICZvcGVyYXRvcj0oIGNvbnN0IFFGaWxlRGlhbG9nICYgKTsKCn07CgoKCgoj
IDUgImNoYXJ0Zm9ybV9maWxlcy5jcHAiIDIKCiMgMSAiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3Fw
YWludGVyLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgojIDEgIi91c3IvbG9jYWwvcXQvaW5jbHVkZS9xd21hdHJpeC5oIiAxCiAKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKY2xhc3MgICBRV01hdHJpeAkJ
CQkJIAp7CnB1YmxpYzoKICAgIFFXTWF0cml4KCk7CiAgICBRV01hdHJpeCggZG91YmxlIG0xMSwg
ZG91YmxlIG0xMiwgZG91YmxlIG0yMSwgZG91YmxlIG0yMiwKCSAgICAgIGRvdWJsZSBkeCwgZG91
YmxlIGR5ICk7CgogICAgdm9pZAlzZXRNYXRyaXgoIGRvdWJsZSBtMTEsIGRvdWJsZSBtMTIsIGRv
dWJsZSBtMjEsIGRvdWJsZSBtMjIsCgkJCSAgIGRvdWJsZSBkeCwgIGRvdWJsZSBkeSApOwoKICAg
IGRvdWJsZQltMTEoKSBjb25zdCB7IHJldHVybiBfbTExOyB9CiAgICBkb3VibGUJbTEyKCkgY29u
c3QgeyByZXR1cm4gX20xMjsgfQogICAgZG91YmxlCW0yMSgpIGNvbnN0IHsgcmV0dXJuIF9tMjE7
IH0KICAgIGRvdWJsZQltMjIoKSBjb25zdCB7IHJldHVybiBfbTIyOyB9CiAgICBkb3VibGUJZHgo
KSAgY29uc3QgeyByZXR1cm4gX2R4OyB9CiAgICBkb3VibGUJZHkoKSAgY29uc3QgeyByZXR1cm4g
X2R5OyB9CgogICAgdm9pZAltYXAoIGludCB4LCBpbnQgeSwgaW50ICp0eCwgaW50ICp0eSApCSAg
ICAgIGNvbnN0OwogICAgdm9pZAltYXAoIGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlICp0eCwg
ZG91YmxlICp0eSApIGNvbnN0OwogICAgUVJlY3QJbWFwUmVjdCggY29uc3QgUVJlY3QgJiApCWNv
bnN0OwoKICAgIFFQb2ludAltYXAoIGNvbnN0IFFQb2ludCAmcCApCWNvbnN0IHsgcmV0dXJuIG9w
ZXJhdG9yICooIHAgKTsgfQogICAgUVJlY3QJbWFwKCBjb25zdCBRUmVjdCAmciApCWNvbnN0IHsg
cmV0dXJuIG1hcFJlY3QgKCByICk7IH0KICAgIFFQb2ludEFycmF5IG1hcCggY29uc3QgUVBvaW50
QXJyYXkgJmEgKSBjb25zdCB7IHJldHVybiBvcGVyYXRvciAqICggYSApOyB9CgogICAgdm9pZAly
ZXNldCgpOwogICAgYm9vbAlpc0lkZW50aXR5KCkgY29uc3Q7CgogICAgUVdNYXRyaXggICAmdHJh
bnNsYXRlKCBkb3VibGUgZHgsIGRvdWJsZSBkeSApOwogICAgUVdNYXRyaXggICAmc2NhbGUoIGRv
dWJsZSBzeCwgZG91YmxlIHN5ICk7CiAgICBRV01hdHJpeCAgICZzaGVhciggZG91YmxlIHNoLCBk
b3VibGUgc3YgKTsKICAgIFFXTWF0cml4ICAgJnJvdGF0ZSggZG91YmxlIGEgKTsKCiAgICBib29s
IGlzSW52ZXJ0aWJsZSgpIGNvbnN0IHsgcmV0dXJuIChfbTExKl9tMjIgLSBfbTEyKl9tMjEpICE9
IDA7IH0KICAgIFFXTWF0cml4CWludmVydCggYm9vbCAqID0gMCApIGNvbnN0OwoKICAgIGJvb2wJ
b3BlcmF0b3I9PSggY29uc3QgUVdNYXRyaXggJiApIGNvbnN0OwogICAgYm9vbAlvcGVyYXRvciE9
KCBjb25zdCBRV01hdHJpeCAmICkgY29uc3Q7CiAgICBRV01hdHJpeCAgICZvcGVyYXRvcio9KCBj
b25zdCBRV01hdHJpeCAmICk7CgogICAgIAogICAgUVBvaW50IG9wZXJhdG9yICogKGNvbnN0IFFQ
b2ludCAmICkgY29uc3Q7CiAgICBRUmVnaW9uIG9wZXJhdG9yICogKGNvbnN0IFFSZWN0ICYgKSBj
b25zdDsKICAgIFFSZWdpb24gb3BlcmF0b3IgKiAoY29uc3QgUVJlZ2lvbiAmICkgY29uc3Q7CiAg
ICBRUG9pbnRBcnJheSBvcGVyYXRvciAqICAoIGNvbnN0IFFQb2ludEFycmF5ICZhICkgY29uc3Q7
CiAgICAKcHJpdmF0ZToKICAgIFFXTWF0cml4ICAgJmJtdWwoIGNvbnN0IFFXTWF0cml4ICYgKTsK
ICAgIGRvdWJsZQlfbTExLCBfbTEyOwogICAgZG91YmxlCV9tMjEsIF9tMjI7CiAgICBkb3VibGUJ
X2R4LCAgX2R5Owp9OwoKCiAgUVdNYXRyaXggb3BlcmF0b3IqKCBjb25zdCBRV01hdHJpeCAmLCBj
b25zdCBRV01hdHJpeCAmICk7CgoKIAoKCgogIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0
YVN0cmVhbSAmLCBjb25zdCBRV01hdHJpeCAmICk7CiAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4o
IFFEYXRhU3RyZWFtICYsIFFXTWF0cml4ICYgKTsKCgoKCgojIDUwICIvdXNyL2xvY2FsL3F0L2lu
Y2x1ZGUvcXBhaW50ZXIuaCIgMgoKCgpjbGFzcyBRR2Z4OwpjbGFzcyBRVGV4dENvZGVjOwpjbGFz
cyBRVGV4dFBhcmFnOwpjbGFzcyBRUGFpbnREZXZpY2U7CgoKCmNsYXNzIFFQYWludGVyUHJpdmF0
ZTsKCmNsYXNzICAgUVBhaW50ZXIgOiBwdWJsaWMgUXQKewpwdWJsaWM6CiAgICBlbnVtIENvb3Jk
aW5hdGVNb2RlIHsgQ29vcmREZXZpY2UsIENvb3JkUGFpbnRlciB9OwoKICAgIFFQYWludGVyKCk7
CiAgICBRUGFpbnRlciggY29uc3QgUVBhaW50RGV2aWNlICosIGJvb2wgdW5jbGlwcGVkID0gRkFM
U0UgKTsKICAgIFFQYWludGVyKCBjb25zdCBRUGFpbnREZXZpY2UgKiwgY29uc3QgUVdpZGdldCAq
LCBib29sIHVuY2xpcHBlZCA9IEZBTFNFICk7CiAgIH5RUGFpbnRlcigpOwoKICAgIGJvb2wJYmVn
aW4oIGNvbnN0IFFQYWludERldmljZSAqLCBib29sIHVuY2xpcHBlZCA9IEZBTFNFICk7CiAgICBi
b29sCWJlZ2luKCBjb25zdCBRUGFpbnREZXZpY2UgKiwgY29uc3QgUVdpZGdldCAqLCBib29sIHVu
Y2xpcHBlZCA9IEZBTFNFICk7CiAgICBib29sCWVuZCgpOwogICAgUVBhaW50RGV2aWNlICpkZXZp
Y2UoKSBjb25zdDsKCgoKCgogICAgc3RhdGljIHZvaWQgcmVkaXJlY3QoIFFQYWludERldmljZSAq
cGRldiwgUVBhaW50RGV2aWNlICpyZXBsYWNlbWVudCApOwoKICAgIGJvb2wJaXNBY3RpdmUoKSBj
b25zdDsKCiAgICB2b2lkCWZsdXNoKCBjb25zdCBRUmVnaW9uICZyZWdpb24sIENvb3JkaW5hdGVN
b2RlIGNtID0gQ29vcmREZXZpY2UgKTsKICAgIHZvaWQJZmx1c2goKTsKICAgIHZvaWQJc2F2ZSgp
OwogICAgdm9pZAlyZXN0b3JlKCk7CgogICAKCiAgICBRRm9udE1ldHJpY3MgZm9udE1ldHJpY3Mo
KQljb25zdDsKICAgIFFGb250SW5mbwkgZm9udEluZm8oKQljb25zdDsKCiAgICBjb25zdCBRRm9u
dCAmZm9udCgpCQljb25zdDsKICAgIHZvaWQJc2V0Rm9udCggY29uc3QgUUZvbnQgJiApOwogICAg
Y29uc3QgUVBlbiAmcGVuKCkJCWNvbnN0OwogICAgdm9pZAlzZXRQZW4oIGNvbnN0IFFQZW4gJiAp
OwogICAgdm9pZAlzZXRQZW4oIFBlblN0eWxlICk7CiAgICB2b2lkCXNldFBlbiggY29uc3QgUUNv
bG9yICYgKTsKICAgIGNvbnN0IFFCcnVzaCAmYnJ1c2goKQljb25zdDsKICAgIHZvaWQJc2V0QnJ1
c2goIGNvbnN0IFFCcnVzaCAmICk7CiAgICB2b2lkCXNldEJydXNoKCBCcnVzaFN0eWxlICk7CiAg
ICB2b2lkCXNldEJydXNoKCBjb25zdCBRQ29sb3IgJiApOwogICAgUVBvaW50CXBvcygpIGNvbnN0
OwoKICAgCgogICAgY29uc3QgUUNvbG9yICZiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKICAgIHZv
aWQJc2V0QmFja2dyb3VuZENvbG9yKCBjb25zdCBRQ29sb3IgJiApOwogICAgQkdNb2RlCWJhY2tn
cm91bmRNb2RlKCkgY29uc3Q7CiAgICB2b2lkCXNldEJhY2tncm91bmRNb2RlKCBCR01vZGUgKTsK
ICAgIFJhc3Rlck9wCXJhc3Rlck9wKCkJY29uc3Q7CiAgICB2b2lkCXNldFJhc3Rlck9wKCBSYXN0
ZXJPcCApOwogICAgY29uc3QgUVBvaW50ICZicnVzaE9yaWdpbigpIGNvbnN0OwogICAgdm9pZAlz
ZXRCcnVzaE9yaWdpbiggaW50IHgsIGludCB5ICk7CiAgICB2b2lkCXNldEJydXNoT3JpZ2luKCBj
b25zdCBRUG9pbnQgJiApOwoKICAgCgogCiAKCiAgICBib29sCWhhc1ZpZXdYRm9ybSgpIGNvbnN0
OwogICAgYm9vbAloYXNXb3JsZFhGb3JtKCkgY29uc3Q7CgoKICAgIHZvaWQJc2V0Vmlld1hGb3Jt
KCBib29sICk7CQkgCiAgICBRUmVjdAl3aW5kb3coKSAgICAgICBjb25zdDsJCSAKICAgIHZvaWQJ
c2V0V2luZG93KCBjb25zdCBRUmVjdCAmICk7CSAKICAgIHZvaWQJc2V0V2luZG93KCBpbnQgeCwg
aW50IHksIGludCB3LCBpbnQgaCApOwogICAgUVJlY3QJdmlld3BvcnQoKSAgIGNvbnN0OwkJIAog
ICAgdm9pZAlzZXRWaWV3cG9ydCggY29uc3QgUVJlY3QgJiApOwkgCiAgICB2b2lkCXNldFZpZXdw
b3J0KCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCApOwoKICAgIHZvaWQJc2V0V29ybGRYRm9y
bSggYm9vbCApOwkJIAogICAgY29uc3QgUVdNYXRyaXggJndvcmxkTWF0cml4KCkgY29uc3Q7CSAK
ICAgIHZvaWQJc2V0V29ybGRNYXRyaXgoIGNvbnN0IFFXTWF0cml4ICYsIGJvb2wgY29tYmluZT1G
QUxTRSApOwoKICAgIHZvaWQJc2F2ZVdvcmxkTWF0cml4KCk7CiAgICB2b2lkCXJlc3RvcmVXb3Js
ZE1hdHJpeCgpOwoKICAgIHZvaWQJc2NhbGUoIGRvdWJsZSBzeCwgZG91YmxlIHN5ICk7CiAgICB2
b2lkCXNoZWFyKCBkb3VibGUgc2gsIGRvdWJsZSBzdiApOwogICAgdm9pZAlyb3RhdGUoIGRvdWJs
ZSBhICk7CgogICAgdm9pZAl0cmFuc2xhdGUoIGRvdWJsZSBkeCwgZG91YmxlIGR5ICk7CiAgICB2
b2lkCXJlc2V0WEZvcm0oKTsKICAgIGRvdWJsZQl0cmFuc2xhdGlvblgoKSBjb25zdDsKICAgIGRv
dWJsZQl0cmFuc2xhdGlvblkoKSBjb25zdDsKCiAgICBRUG9pbnQJeEZvcm0oIGNvbnN0IFFQb2lu
dCAmICkgY29uc3Q7CSAKICAgIFFSZWN0CXhGb3JtKCBjb25zdCBRUmVjdCAmICkJY29uc3Q7CiAg
ICBRUG9pbnRBcnJheSB4Rm9ybSggY29uc3QgUVBvaW50QXJyYXkgJiApIGNvbnN0OwogICAgUVBv
aW50QXJyYXkgeEZvcm0oIGNvbnN0IFFQb2ludEFycmF5ICYsIGludCBpbmRleCwgaW50IG5wb2lu
dHMgKSBjb25zdDsKICAgIFFQb2ludAl4Rm9ybURldiggY29uc3QgUVBvaW50ICYgKSBjb25zdDsg
IAogICAgUVJlY3QJeEZvcm1EZXYoIGNvbnN0IFFSZWN0ICYgKSAgY29uc3Q7CiAgICBRUG9pbnRB
cnJheSB4Rm9ybURldiggY29uc3QgUVBvaW50QXJyYXkgJiApIGNvbnN0OwogICAgUVBvaW50QXJy
YXkgeEZvcm1EZXYoIGNvbnN0IFFQb2ludEFycmF5ICYsIGludCBpbmRleCwgaW50IG5wb2ludHMg
KSBjb25zdDsKCiAgIAoKICAgIHZvaWQJc2V0Q2xpcHBpbmcoIGJvb2wgKTsJCSAKICAgIGJvb2wJ
aGFzQ2xpcHBpbmcoKSBjb25zdDsKICAgIFFSZWdpb24gY2xpcFJlZ2lvbiggQ29vcmRpbmF0ZU1v
ZGUgPSBDb29yZERldmljZSApIGNvbnN0OwogICAgdm9pZAlzZXRDbGlwUmVjdCggY29uc3QgUVJl
Y3QgJiwgQ29vcmRpbmF0ZU1vZGUgPSBDb29yZERldmljZSApOwkgCiAgICB2b2lkCXNldENsaXBS
ZWN0KCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgQ29vcmRpbmF0ZU1vZGUgPSBDb29yZERl
dmljZSApOwogICAgdm9pZAlzZXRDbGlwUmVnaW9uKCBjb25zdCBRUmVnaW9uICYsIENvb3JkaW5h
dGVNb2RlID0gQ29vcmREZXZpY2UgKTsgCgogICAKCiAgICB2b2lkCWRyYXdQb2ludCggaW50IHgs
IGludCB5ICk7CiAgICB2b2lkCWRyYXdQb2ludCggY29uc3QgUVBvaW50ICYgKTsKICAgIHZvaWQJ
ZHJhd1BvaW50cyggY29uc3QgUVBvaW50QXJyYXkmIGEsCgkJCSAgICBpbnQgaW5kZXg9MCwgaW50
IG5wb2ludHM9LTEgKTsKICAgIHZvaWQJbW92ZVRvKCBpbnQgeCwgaW50IHkgKTsKICAgIHZvaWQJ
bW92ZVRvKCBjb25zdCBRUG9pbnQgJiApOwogICAgdm9pZAlsaW5lVG8oIGludCB4LCBpbnQgeSAp
OwogICAgdm9pZAlsaW5lVG8oIGNvbnN0IFFQb2ludCAmICk7CiAgICB2b2lkCWRyYXdMaW5lKCBp
bnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIgKTsKICAgIHZvaWQJZHJhd0xpbmUoIGNvbnN0
IFFQb2ludCAmLCBjb25zdCBRUG9pbnQgJiApOwogICAgdm9pZAlkcmF3UmVjdCggaW50IHgsIGlu
dCB5LCBpbnQgdywgaW50IGggKTsKICAgIHZvaWQJZHJhd1JlY3QoIGNvbnN0IFFSZWN0ICYgKTsK
ICAgIHZvaWQJZHJhd1dpbkZvY3VzUmVjdCggaW50IHgsIGludCB5LCBpbnQgdywgaW50IGggKTsK
ICAgIHZvaWQJZHJhd1dpbkZvY3VzUmVjdCggaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsCgkJ
CQkgIGNvbnN0IFFDb2xvciAmYmdDb2xvciApOwogICAgdm9pZAlkcmF3V2luRm9jdXNSZWN0KCBj
b25zdCBRUmVjdCAmICk7CiAgICB2b2lkCWRyYXdXaW5Gb2N1c1JlY3QoIGNvbnN0IFFSZWN0ICYs
CgkJCQkgIGNvbnN0IFFDb2xvciAmYmdDb2xvciApOwogICAgdm9pZAlkcmF3Um91bmRSZWN0KCBp
bnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgaW50ID0gMjUsIGludCA9IDI1ICk7CiAgICB2b2lk
CWRyYXdSb3VuZFJlY3QoIGNvbnN0IFFSZWN0ICYsIGludCA9IDI1LCBpbnQgPSAyNSApOwogICAg
dm9pZAlkcmF3RWxsaXBzZSggaW50IHgsIGludCB5LCBpbnQgdywgaW50IGggKTsKICAgIHZvaWQJ
ZHJhd0VsbGlwc2UoIGNvbnN0IFFSZWN0ICYgKTsKICAgIHZvaWQJZHJhd0FyYyggaW50IHgsIGlu
dCB5LCBpbnQgdywgaW50IGgsIGludCBhLCBpbnQgYWxlbiApOwogICAgdm9pZAlkcmF3QXJjKCBj
b25zdCBRUmVjdCAmLCBpbnQgYSwgaW50IGFsZW4gKTsKICAgIHZvaWQJZHJhd1BpZSggaW50IHgs
IGludCB5LCBpbnQgdywgaW50IGgsIGludCBhLCBpbnQgYWxlbiApOwogICAgdm9pZAlkcmF3UGll
KCBjb25zdCBRUmVjdCAmLCBpbnQgYSwgaW50IGFsZW4gKTsKICAgIHZvaWQJZHJhd0Nob3JkKCBp
bnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgaW50IGEsIGludCBhbGVuICk7CiAgICB2b2lkCWRy
YXdDaG9yZCggY29uc3QgUVJlY3QgJiwgaW50IGEsIGludCBhbGVuICk7CiAgICB2b2lkCWRyYXdM
aW5lU2VnbWVudHMoIGNvbnN0IFFQb2ludEFycmF5ICYsCgkJCQkgIGludCBpbmRleD0wLCBpbnQg
bmxpbmVzPS0xICk7CiAgICB2b2lkCWRyYXdQb2x5bGluZSggY29uc3QgUVBvaW50QXJyYXkgJiwK
CQkJICAgICAgaW50IGluZGV4PTAsIGludCBucG9pbnRzPS0xICk7CiAgICB2b2lkCWRyYXdQb2x5
Z29uKCBjb25zdCBRUG9pbnRBcnJheSAmLCBib29sIHdpbmRpbmc9RkFMU0UsCgkJCSAgICAgaW50
IGluZGV4PTAsIGludCBucG9pbnRzPS0xICk7CiAgICB2b2lkCWRyYXdDb252ZXhQb2x5Z29uKCBj
b25zdCBRUG9pbnRBcnJheSAmLAoJCQkgICAgIGludCBpbmRleD0wLCBpbnQgbnBvaW50cz0tMSAp
OwoKICAgIHZvaWQJZHJhd0N1YmljQmV6aWVyKCBjb25zdCBRUG9pbnRBcnJheSAmLCBpbnQgaW5k
ZXg9MCApOwoKICAgIHZvaWQJZHJhd1BpeG1hcCggaW50IHgsIGludCB5LCBjb25zdCBRUGl4bWFw
ICYsCgkJCSAgICBpbnQgc3g9MCwgaW50IHN5PTAsIGludCBzdz0tMSwgaW50IHNoPS0xICk7CiAg
ICB2b2lkCWRyYXdQaXhtYXAoIGNvbnN0IFFQb2ludCAmLCBjb25zdCBRUGl4bWFwICYsCgkJCSAg
ICBjb25zdCBRUmVjdCAmc3IgKTsKICAgIHZvaWQJZHJhd1BpeG1hcCggY29uc3QgUVBvaW50ICYs
IGNvbnN0IFFQaXhtYXAgJiApOwogICAgdm9pZAlkcmF3UGl4bWFwKCBjb25zdCBRUmVjdCAmLCBj
b25zdCBRUGl4bWFwICYgKTsKICAgIHZvaWQJZHJhd0ltYWdlKCBpbnQgeCwgaW50IHksIGNvbnN0
IFFJbWFnZSAmLAoJCQkgICBpbnQgc3ggPSAwLCBpbnQgc3kgPSAwLCBpbnQgc3cgPSAtMSwgaW50
IHNoID0gLTEsCgkJCSAgIGludCBjb252ZXJzaW9uRmxhZ3MgPSAwICk7CiAgICB2b2lkCWRyYXdJ
bWFnZSggY29uc3QgUVBvaW50ICYsIGNvbnN0IFFJbWFnZSAmLAoJCQkgICBjb25zdCBRUmVjdCAm
c3IsIGludCBjb252ZXJzaW9uRmxhZ3MgPSAwICk7CiAgICB2b2lkCWRyYXdJbWFnZSggY29uc3Qg
UVBvaW50ICYsIGNvbnN0IFFJbWFnZSAmLAoJCQkgICBpbnQgY29udmVyc2lvbl9mbGFncyA9IDAg
KTsKICAgIHZvaWQJZHJhd0ltYWdlKCBjb25zdCBRUmVjdCAmLCBjb25zdCBRSW1hZ2UgJiApOwog
ICAgdm9pZAlkcmF3VGlsZWRQaXhtYXAoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBjb25z
dCBRUGl4bWFwICYsCgkJCQkgaW50IHN4PTAsIGludCBzeT0wICk7CiAgICB2b2lkCWRyYXdUaWxl
ZFBpeG1hcCggY29uc3QgUVJlY3QgJiwgY29uc3QgUVBpeG1hcCAmLAoJCQkJIGNvbnN0IFFQb2lu
dCAmICk7CiAgICB2b2lkCWRyYXdUaWxlZFBpeG1hcCggY29uc3QgUVJlY3QgJiwgY29uc3QgUVBp
eG1hcCAmICk7CgogICAgdm9pZAlkcmF3UGljdHVyZSggY29uc3QgUVBpY3R1cmUgJiApOwogICAg
dm9pZAlkcmF3UGljdHVyZSggaW50IHgsIGludCB5LCBjb25zdCBRUGljdHVyZSAmICk7CiAgICB2
b2lkCWRyYXdQaWN0dXJlKCBjb25zdCBRUG9pbnQgJiwgY29uc3QgUVBpY3R1cmUgJiApOwoKCiAg
ICB2b2lkCWZpbGxSZWN0KCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgY29uc3QgUUJydXNo
ICYgKTsKICAgIHZvaWQJZmlsbFJlY3QoIGNvbnN0IFFSZWN0ICYsIGNvbnN0IFFCcnVzaCAmICk7
CiAgICB2b2lkCWVyYXNlUmVjdCggaW50IHgsIGludCB5LCBpbnQgdywgaW50IGggKTsKICAgIHZv
aWQJZXJhc2VSZWN0KCBjb25zdCBRUmVjdCAmICk7CgogICAKCiAgICBlbnVtIFRleHREaXJlY3Rp
b24gewoJQXV0bywKCVJUTCwKCUxUUgogICAgfTsKCiAgICB2b2lkCWRyYXdUZXh0KCBpbnQgeCwg
aW50IHksIGNvbnN0IFFTdHJpbmcgJiwgaW50IGxlbiA9IC0xLCBUZXh0RGlyZWN0aW9uIGRpciA9
IEF1dG8gKTsKICAgIHZvaWQJZHJhd1RleHQoIGNvbnN0IFFQb2ludCAmLCBjb25zdCBRU3RyaW5n
ICYsIGludCBsZW4gPSAtMSwgVGV4dERpcmVjdGlvbiBkaXIgPSBBdXRvICk7CgogICAgdm9pZCAg
ICAgZHJhd1RleHQoIGludCB4LCBpbnQgeSwgY29uc3QgUVN0cmluZyAmLCBpbnQgcG9zLCBpbnQg
bGVuLCBUZXh0RGlyZWN0aW9uIGRpciA9IEF1dG8gKTsKICAgIHZvaWQgICAgIGRyYXdUZXh0KCBj
b25zdCBRUG9pbnQgJnAsIGNvbnN0IFFTdHJpbmcgJiwgaW50IHBvcywgaW50IGxlbiwgVGV4dERp
cmVjdGlvbiBkaXIgPSBBdXRvICk7CgogICAgdm9pZAlkcmF3VGV4dCggaW50IHgsIGludCB5LCBp
bnQgdywgaW50IGgsIGludCBmbGFncywKCQkJICBjb25zdCBRU3RyaW5nJiwgaW50IGxlbiA9IC0x
LCBRUmVjdCAqYnI9MCwKCQkJICBRVGV4dFBhcmFnICoqaW50ZXJuPTAgKTsKICAgIHZvaWQJZHJh
d1RleHQoIGNvbnN0IFFSZWN0ICYsIGludCBmbGFncywKCQkJICBjb25zdCBRU3RyaW5nJiwgaW50
IGxlbiA9IC0xLCBRUmVjdCAqYnI9MCwKCQkJICBRVGV4dFBhcmFnICoqaW50ZXJuPTAgKTsKCiAg
ICAgCgogICAKCiAgICBRUmVjdAlib3VuZGluZ1JlY3QoIGludCB4LCBpbnQgeSwgaW50IHcsIGlu
dCBoLCBpbnQgZmxhZ3MsCgkJCSAgICAgIGNvbnN0IFFTdHJpbmcmLCBpbnQgbGVuID0gLTEsIFFU
ZXh0UGFyYWcgKippbnRlcm49MCApOwogICAgUVJlY3QJYm91bmRpbmdSZWN0KCBjb25zdCBRUmVj
dCAmLCBpbnQgZmxhZ3MsCgkJCSAgICAgIGNvbnN0IFFTdHJpbmcmLCBpbnQgbGVuID0gLTEsIFFU
ZXh0UGFyYWcgKippbnRlcm49MCApOwoKICAgIGludAkJdGFiU3RvcHMoKSBjb25zdDsKICAgIHZv
aWQJc2V0VGFiU3RvcHMoIGludCApOwogICAgaW50CSAgICAgICAqdGFiQXJyYXkoKSBjb25zdDsK
ICAgIHZvaWQJc2V0VGFiQXJyYXkoIGludCAqICk7CgogICAgIAoKCgoKICAgIEhBTkRMRQloYW5k
bGUoKSBjb25zdDsKCgoKICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKTsKICAgIHN0YXRpYyB2
b2lkIGNsZWFudXAoKTsKCnByaXZhdGU6CiAgICB2b2lkCWluaXQoKTsKICAgIHZvaWQgICAgICAg
IGRlc3Ryb3koKTsKICAgIHZvaWQJdXBkYXRlRm9udCgpOwogICAgdm9pZAl1cGRhdGVQZW4oKTsK
ICAgIHZvaWQJdXBkYXRlQnJ1c2goKTsKCiAgICB2b2lkCXVwZGF0ZVhGb3JtKCk7CiAgICB2b2lk
CXVwZGF0ZUludlhGb3JtKCk7CgogICAgdm9pZAltYXAoIGludCwgaW50LCBpbnQgKnJ4LCBpbnQg
KnJ5ICkgY29uc3Q7CiAgICB2b2lkCW1hcCggaW50LCBpbnQsIGludCwgaW50LCBpbnQgKiwgaW50
ICosIGludCAqLCBpbnQgKiApIGNvbnN0OwogICAgdm9pZAltYXBJbnYoIGludCwgaW50LCBpbnQg
KiwgaW50ICogKSBjb25zdDsKICAgIHZvaWQJbWFwSW52KCBpbnQsIGludCwgaW50LCBpbnQsIGlu
dCAqLCBpbnQgKiwgaW50ICosIGludCAqICkgY29uc3Q7CiAgICB2b2lkCWRyYXdQb2x5SW50ZXJu
YWwoIGNvbnN0IFFQb2ludEFycmF5ICYsIGJvb2wgY2xvc2U9VFJVRSApOwogICAgdm9pZAlkcmF3
V2luRm9jdXNSZWN0KCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgYm9vbCB4b3JQYWludCwK
CQkJCSAgY29uc3QgUUNvbG9yICZwZW5Db2xvciApOwoKICAgIGVudW0geyBJc0FjdGl2ZT0weDAx
LCBFeHREZXY9MHgwMiwgSXNTdGFydGluZ1VwPTB4MDQsIE5vQ2FjaGU9MHgwOCwKCSAgIFZ4Rj0w
eDEwLCBXeEY9MHgyMCwgQ2xpcE9uPTB4NDAsIFNhZmVQb2x5Z29uPTB4ODAsIE1vbm9EZXY9MHgx
MDAsCgkgICBEaXJ0eUZvbnQ9MHgyMDAsIERpcnR5UGVuPTB4NDAwLCBEaXJ0eUJydXNoPTB4ODAw
LAoJICAgUkdCQ29sb3I9MHgxMDAwLCBGb250TWV0PTB4MjAwMCwgRm9udEluZj0weDQwMDAsIEN0
b3JCZWdpbj0weDgwMDAsCiAgICAgICAgICAgVXNlUHJpdmF0ZUN4ID0gMHgxMDAwMCwgVm9sYXRp
bGVEQyA9IDB4MjAwMDAsIFF0MkNvbXBhdCA9IDB4NDAwMDAgfTsKICAgIHVpbnQJZmxhZ3M7CiAg
ICBib29sCXRlc3RmKCB1aW50IGIgKSBjb25zdCB7IHJldHVybiAoZmxhZ3MmYikhPTA7IH0KICAg
IHZvaWQJc2V0ZiggdWludCBiICkJeyBmbGFncyB8PSBiOyB9CiAgICB2b2lkCXNldGYoIHVpbnQg
YiwgYm9vbCB2ICk7CiAgICB2b2lkCWNsZWFyZiggdWludCBiICkJeyBmbGFncyAmPSAodWludCko
fmIpOyB9CiAgICB2b2lkCWZpeF9uZWdfcmVjdCggaW50ICp4LCBpbnQgKnksIGludCAqdywgaW50
ICpoICk7CgogICAgUVBhaW50ZXJQcml2YXRlICpkOwogICAgUVBhaW50RGV2aWNlICpwZGV2Owog
ICAgUUNvbG9yCWJnX2NvbDsKICAgIHVjaGFyCWJnX21vZGU7CiAgICB1Y2hhcglyb3A7CiAgICB1
Y2hhcglwdTsKICAgIFFQb2ludAlicm87CiAgICBRRm9udAljZm9udDsKICAgIFFGb250ICpwZm9u
dDsgCSAKICAgIFFQZW4JY3BlbjsKICAgIFFCcnVzaAljYnJ1c2g7CiAgICBRUmVnaW9uCWNyZ247
CiAgICBpbnQJCXRhYnN0b3BzOwogICAgaW50CSAgICAgICAqdGFiYXJyYXk7CiAgICBpbnQJCXRh
YmFycmF5bGVuOwogICAgYm9vbAlibG9ja19leHQ7CSAKCiAgICAgCgogICAgUUNPT1JECXd4LCB3
eSwgd3csIHdoOwogICAgUUNPT1JECXZ4LCB2eSwgdncsIHZoOwogICAgUVdNYXRyaXgJd3htYXQ7
CgogICAgIAogICAgUVdNYXRyaXgJeG1hdDsKICAgIFFXTWF0cml4CWl4bWF0OwoKCgogICAgZG91
YmxlCW0xMSgpIGNvbnN0IHsgcmV0dXJuIHhtYXQubTExKCk7IH0KICAgIGRvdWJsZSAgICAgIG0x
MigpIGNvbnN0IHsgcmV0dXJuIHhtYXQubTEyKCk7IH0KICAgIGRvdWJsZSAgICAgIG0yMSgpIGNv
bnN0IHsgcmV0dXJuIHhtYXQubTIxKCk7IH0KICAgIGRvdWJsZSAgICAgIG0yMigpIGNvbnN0IHsg
cmV0dXJuIHhtYXQubTIyKCk7IH0KICAgIGRvdWJsZSAgICAgIGR4KCkgY29uc3QgeyByZXR1cm4g
eG1hdC5keCgpOyB9CiAgICBkb3VibGUgICAgICBkeSgpIGNvbnN0IHsgcmV0dXJuIHhtYXQuZHko
KTsgfQogICAgZG91YmxlCWltMTEoKSBjb25zdCB7IHJldHVybiBpeG1hdC5tMTEoKTsgfQogICAg
ZG91YmxlICAgICAgaW0xMigpIGNvbnN0IHsgcmV0dXJuIGl4bWF0Lm0xMigpOyB9CiAgICBkb3Vi
bGUgICAgICBpbTIxKCkgY29uc3QgeyByZXR1cm4gaXhtYXQubTIxKCk7IH0KICAgIGRvdWJsZSAg
ICAgIGltMjIoKSBjb25zdCB7IHJldHVybiBpeG1hdC5tMjIoKTsgfQogICAgZG91YmxlICAgICAg
aWR4KCkgY29uc3QgeyByZXR1cm4gaXhtYXQuZHgoKTsgfQogICAgZG91YmxlICAgICAgaWR5KCkg
Y29uc3QgeyByZXR1cm4gaXhtYXQuZHkoKTsgfQoKICAgIGludAkJdHhvcDsKICAgIGJvb2wJdHhp
bnY7CgoKCgoKCgogICAgdm9pZCAgICAgICAqcGVuUmVmOwkJCQkgCiAgICB2b2lkICAgICAgICpi
cnVzaFJlZjsJCQkgCiAgICB2b2lkICAgICAgICpwc19zdGFjazsKICAgIHZvaWQgICAgICAgKndt
X3N0YWNrOwogICAgdm9pZAlraWxsUFN0YWNrKCk7Cgpwcm90ZWN0ZWQ6CgoKCgoKCiAgICBEaXNw
bGF5ICAgICpkcHk7CQkJCSAKICAgIGludAkJc2NybjsJCQkJIAogICAgUXQ6OkhBTkRMRQloZDsJ
CQkJIAogICAgUXQ6OkhBTkRMRSAgcmVuZGhkOwkJCQkgCiAgICBHQwkJZ2M7CQkJCSAKICAgIEdD
CQlnY19icnVzaDsJCQkgCiAgICBRUG9pbnQJY3VyUHQ7CQkJCSAKICAgIHVpbnQJY2xpcF9zZXJp
YWw7CQkJIAoKCgoKCiAgICBmcmllbmQgY2xhc3MgUUZvbnRNZXRyaWNzOwogICAgZnJpZW5kIGNs
YXNzIFFGb250SW5mbzsKICAgIGZyaWVuZCB2b2lkIHF0X2Zvcm1hdF90ZXh0KCBjb25zdCBRRm9u
dCAmLCBjb25zdCBRUmVjdCAmciwKCQkgICAgIGludCB0ZiwgY29uc3QgUVN0cmluZyYgc3RyLCBp
bnQgbGVuLCBRUmVjdCAqYnJlY3QsCgkJICAgICBpbnQgdGFic3RvcHMsIGludCogdGFiYXJyYXks
IGludCB0YWJhcnJheWxlbiwKCQkgICAgIFFUZXh0UGFyYWcgKippbnRlcm5hbCwgUVBhaW50ZXIq
IHBhaW50ZXIgKTsKCnByaXZhdGU6CSAKCiAgICBRUGFpbnRlciggY29uc3QgUVBhaW50ZXIgJiAp
OwogICAgUVBhaW50ZXIgJm9wZXJhdG9yPSggY29uc3QgUVBhaW50ZXIgJiApOwoKfTsKCgogCgoK
CmlubGluZSBRUGFpbnREZXZpY2UgKlFQYWludGVyOjpkZXZpY2UoKSBjb25zdAp7CiAgICByZXR1
cm4gcGRldjsKfQoKaW5saW5lIGJvb2wgUVBhaW50ZXI6OmlzQWN0aXZlKCkgY29uc3QKewogICAg
cmV0dXJuIHRlc3RmKElzQWN0aXZlKTsKfQoKaW5saW5lIGNvbnN0IFFGb250ICZRUGFpbnRlcjo6
Zm9udCgpIGNvbnN0CnsKICAgIHJldHVybiBjZm9udDsKfQoKaW5saW5lIGNvbnN0IFFQZW4gJlFQ
YWludGVyOjpwZW4oKSBjb25zdAp7CiAgICByZXR1cm4gY3BlbjsKfQoKaW5saW5lIGNvbnN0IFFC
cnVzaCAmUVBhaW50ZXI6OmJydXNoKCkgY29uc3QKewogICAgcmV0dXJuIGNicnVzaDsKfQoKIAoK
CgoKCgppbmxpbmUgY29uc3QgUUNvbG9yICZRUGFpbnRlcjo6YmFja2dyb3VuZENvbG9yKCkgY29u
c3QKewogICAgcmV0dXJuIGJnX2NvbDsKfQoKaW5saW5lIFF0OjpCR01vZGUgUVBhaW50ZXI6OmJh
Y2tncm91bmRNb2RlKCkgY29uc3QKewogICAgcmV0dXJuIChCR01vZGUpYmdfbW9kZTsKfQoKaW5s
aW5lIFF0OjpSYXN0ZXJPcCBRUGFpbnRlcjo6cmFzdGVyT3AoKSBjb25zdAp7CiAgICByZXR1cm4g
KFJhc3Rlck9wKXJvcDsKfQoKaW5saW5lIGNvbnN0IFFQb2ludCAmUVBhaW50ZXI6OmJydXNoT3Jp
Z2luKCkgY29uc3QKewogICAgcmV0dXJuIGJybzsKfQoKaW5saW5lIGJvb2wgUVBhaW50ZXI6Omhh
c1ZpZXdYRm9ybSgpIGNvbnN0CnsKCiAgICByZXR1cm4gdGVzdGYoVnhGKTsKCgoKfQoKaW5saW5l
IGJvb2wgUVBhaW50ZXI6Omhhc1dvcmxkWEZvcm0oKSBjb25zdAp7CgogICAgcmV0dXJuIHRlc3Rm
KFd4Rik7CgoKCn0KCmlubGluZSBkb3VibGUgUVBhaW50ZXI6OnRyYW5zbGF0aW9uWCgpIGNvbnN0
CnsKCiAgICByZXR1cm4gd29ybGRNYXRyaXgoKS5keCgpOwoKCgp9CgppbmxpbmUgZG91YmxlIFFQ
YWludGVyOjp0cmFuc2xhdGlvblkoKSBjb25zdAp7CgogICAgcmV0dXJuIHdvcmxkTWF0cml4KCku
ZHkoKTsKCgoKfQoKCmlubGluZSBib29sIFFQYWludGVyOjpoYXNDbGlwcGluZygpIGNvbnN0CnsK
ICAgIHJldHVybiB0ZXN0ZihDbGlwT24pOwp9CgppbmxpbmUgaW50IFFQYWludGVyOjp0YWJTdG9w
cygpIGNvbnN0CnsKICAgIHJldHVybiB0YWJzdG9wczsKfQoKaW5saW5lIGludCAqUVBhaW50ZXI6
OnRhYkFycmF5KCkgY29uc3QKewogICAgcmV0dXJuIHRhYmFycmF5Owp9CgoKCgoKCgppbmxpbmUg
UXQ6OkhBTkRMRSBRUGFpbnRlcjo6aGFuZGxlKCkgY29uc3QKewogICAgcmV0dXJuIGhkOwp9CgoK
aW5saW5lIHZvaWQgUVBhaW50ZXI6OnNldEJydXNoT3JpZ2luKCBjb25zdCBRUG9pbnQgJnAgKQp7
CiAgICBzZXRCcnVzaE9yaWdpbiggcC54KCksIHAueSgpICk7Cn0KCgppbmxpbmUgdm9pZCBRUGFp
bnRlcjo6c2V0V2luZG93KCBjb25zdCBRUmVjdCAmciApCnsKICAgIHNldFdpbmRvdyggci54KCks
IHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkgKTsKfQoKaW5saW5lIHZvaWQgUVBhaW50ZXI6
OnNldFZpZXdwb3J0KCBjb25zdCBRUmVjdCAmciApCnsKICAgIHNldFZpZXdwb3J0KCByLngoKSwg
ci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSApOwp9CgoKaW5saW5lIHZvaWQgUVBhaW50ZXI6
OnNldENsaXBSZWN0KCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgQ29vcmRpbmF0ZU1vZGUg
bSApCnsKICAgIHNldENsaXBSZWN0KCBRUmVjdCh4LHksdyxoKSwgbSApOwp9CgppbmxpbmUgdm9p
ZCBRUGFpbnRlcjo6ZHJhd1BvaW50KCBjb25zdCBRUG9pbnQgJnAgKQp7CiAgICBkcmF3UG9pbnQo
IHAueCgpLCBwLnkoKSApOwp9CgppbmxpbmUgdm9pZCBRUGFpbnRlcjo6bW92ZVRvKCBjb25zdCBR
UG9pbnQgJnAgKQp7CiAgICBtb3ZlVG8oIHAueCgpLCBwLnkoKSApOwp9CgppbmxpbmUgdm9pZCBR
UGFpbnRlcjo6bGluZVRvKCBjb25zdCBRUG9pbnQgJnAgKQp7CiAgICBsaW5lVG8oIHAueCgpLCBw
LnkoKSApOwp9CgppbmxpbmUgdm9pZCBRUGFpbnRlcjo6ZHJhd0xpbmUoIGNvbnN0IFFQb2ludCAm
cDEsIGNvbnN0IFFQb2ludCAmcDIgKQp7CiAgICBkcmF3TGluZSggcDEueCgpLCBwMS55KCksIHAy
LngoKSwgcDIueSgpICk7Cn0KCmlubGluZSB2b2lkIFFQYWludGVyOjpkcmF3UmVjdCggY29uc3Qg
UVJlY3QgJnIgKQp7CiAgICBkcmF3UmVjdCggci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVp
Z2h0KCkgKTsKfQoKaW5saW5lIHZvaWQgUVBhaW50ZXI6OmRyYXdXaW5Gb2N1c1JlY3QoIGNvbnN0
IFFSZWN0ICZyICkKewogICAgZHJhd1dpbkZvY3VzUmVjdCggci54KCksIHIueSgpLCByLndpZHRo
KCksIHIuaGVpZ2h0KCkgKTsKfQoKaW5saW5lIHZvaWQgUVBhaW50ZXI6OmRyYXdXaW5Gb2N1c1Jl
Y3QoIGNvbnN0IFFSZWN0ICZyLGNvbnN0IFFDb2xvciAmcGVuQ29sb3IgKQp7CiAgICBkcmF3V2lu
Rm9jdXNSZWN0KCByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSwgcGVuQ29sb3Ig
KTsKfQoKaW5saW5lIHZvaWQgUVBhaW50ZXI6OmRyYXdSb3VuZFJlY3QoIGNvbnN0IFFSZWN0ICZy
LCBpbnQgeFJuZCwgaW50IHlSbmQgKQp7CiAgICBkcmF3Um91bmRSZWN0KCByLngoKSwgci55KCks
IHIud2lkdGgoKSwgci5oZWlnaHQoKSwgeFJuZCwgeVJuZCApOwp9CgppbmxpbmUgdm9pZCBRUGFp
bnRlcjo6ZHJhd0VsbGlwc2UoIGNvbnN0IFFSZWN0ICZyICkKewogICAgZHJhd0VsbGlwc2UoIHIu
eCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpICk7Cn0KCmlubGluZSB2b2lkIFFQYWlu
dGVyOjpkcmF3QXJjKCBjb25zdCBRUmVjdCAmciwgaW50IGEsIGludCBhbGVuICkKewogICAgZHJh
d0FyYyggci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCksIGEsIGFsZW4gKTsKfQoK
aW5saW5lIHZvaWQgUVBhaW50ZXI6OmRyYXdQaWUoIGNvbnN0IFFSZWN0ICZyLCBpbnQgYSwgaW50
IGFsZW4gKQp7CiAgICBkcmF3UGllKCByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQo
KSwgYSwgYWxlbiApOwp9CgppbmxpbmUgdm9pZCBRUGFpbnRlcjo6ZHJhd0Nob3JkKCBjb25zdCBR
UmVjdCAmciwgaW50IGEsIGludCBhbGVuICkKewogICAgZHJhd0Nob3JkKCByLngoKSwgci55KCks
IHIud2lkdGgoKSwgci5oZWlnaHQoKSwgYSwgYWxlbiApOwp9CgppbmxpbmUgdm9pZCBRUGFpbnRl
cjo6ZHJhd1BpeG1hcCggY29uc3QgUVBvaW50ICZwLCBjb25zdCBRUGl4bWFwICZwbSwKCQkJCSAg
Y29uc3QgUVJlY3QgJnNyICkKewogICAgZHJhd1BpeG1hcCggcC54KCksIHAueSgpLCBwbSwgc3Iu
eCgpLCBzci55KCksIHNyLndpZHRoKCksIHNyLmhlaWdodCgpICk7Cn0KCmlubGluZSB2b2lkIFFQ
YWludGVyOjpkcmF3SW1hZ2UoIGNvbnN0IFFQb2ludCAmcCwgY29uc3QgUUltYWdlICZwbSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVJlY3QgJnNyLCBpbnQgY29udmVy
c2lvbkZsYWdzICkKewogICAgZHJhd0ltYWdlKCBwLngoKSwgcC55KCksIHBtLAoJICAgICAgIHNy
LngoKSwgc3IueSgpLCBzci53aWR0aCgpLCBzci5oZWlnaHQoKSwgY29udmVyc2lvbkZsYWdzICk7
Cn0KCmlubGluZSB2b2lkIFFQYWludGVyOjpkcmF3VGlsZWRQaXhtYXAoIGNvbnN0IFFSZWN0ICZy
LCBjb25zdCBRUGl4bWFwICZwbSwKCQkJCSAgICAgICBjb25zdCBRUG9pbnQgJnNwICkKewogICAg
ZHJhd1RpbGVkUGl4bWFwKCByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSwgcG0s
IHNwLngoKSwgc3AueSgpICk7Cn0KCmlubGluZSB2b2lkIFFQYWludGVyOjpkcmF3VGlsZWRQaXht
YXAoIGNvbnN0IFFSZWN0ICZyLCBjb25zdCBRUGl4bWFwICZwbSApCnsKICAgIGRyYXdUaWxlZFBp
eG1hcCggci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCksIHBtLCAwLCAwICk7Cn0K
CmlubGluZSB2b2lkIFFQYWludGVyOjpmaWxsUmVjdCggY29uc3QgUVJlY3QgJnIsIGNvbnN0IFFC
cnVzaCAmYnJ1c2ggKQp7CiAgICBmaWxsUmVjdCggci54KCksIHIueSgpLCByLndpZHRoKCksIHIu
aGVpZ2h0KCksIGJydXNoICk7Cn0KCmlubGluZSB2b2lkIFFQYWludGVyOjplcmFzZVJlY3QoIGlu
dCB4LCBpbnQgeSwgaW50IHcsIGludCBoICkKewogICAgZmlsbFJlY3QoIHgsIHksIHcsIGgsIGJh
Y2tncm91bmRDb2xvcigpICk7Cn0KCmlubGluZSB2b2lkIFFQYWludGVyOjplcmFzZVJlY3QoIGNv
bnN0IFFSZWN0ICZyICkKewogICAgZmlsbFJlY3QoIHIueCgpLCByLnkoKSwgci53aWR0aCgpLCBy
LmhlaWdodCgpLCBiYWNrZ3JvdW5kQ29sb3IoKSApOwp9CgppbmxpbmUgdm9pZCBRUGFpbnRlcjo6
ZHJhd1RleHQoIGNvbnN0IFFQb2ludCAmcCwgY29uc3QgUVN0cmluZyAmcywgaW50IGxlbiwgVGV4
dERpcmVjdGlvbiBkaXIgKQp7CiAgICBkcmF3VGV4dCggcC54KCksIHAueSgpLCBzLCAwLCBsZW4s
IGRpciApOwp9CgppbmxpbmUgdm9pZCBRUGFpbnRlcjo6ZHJhd1RleHQoIGNvbnN0IFFQb2ludCAm
cCwgY29uc3QgUVN0cmluZyAmcywgaW50IHBvcywgaW50IGxlbiwgVGV4dERpcmVjdGlvbiBkaXIg
KQp7CiAgICBkcmF3VGV4dCggcC54KCksIHAueSgpLCBzLCBwb3MsIGxlbiwgZGlyICk7Cn0KCmlu
bGluZSB2b2lkIFFQYWludGVyOjpkcmF3VGV4dCggaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgs
IGludCB0ZiwKCQkJCWNvbnN0IFFTdHJpbmcmIHN0ciwgaW50IGxlbiwgUVJlY3QgKmJyLCBRVGV4
dFBhcmFnICoqaSApCnsKICAgIFFSZWN0IHIoeCwgeSwgdywgaCk7CiAgICBkcmF3VGV4dCggciwg
dGYsIHN0ciwgbGVuLCBiciwgaSApOwp9CgppbmxpbmUgUVJlY3QgUVBhaW50ZXI6OmJvdW5kaW5n
UmVjdCggaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsIGludCB0ZiwKCQkJCSAgICAgY29uc3Qg
UVN0cmluZyYgc3RyLCBpbnQgbGVuLCBRVGV4dFBhcmFnICoqaSApCnsKICAgIFFSZWN0IHIoeCwg
eSwgdywgaCk7CiAgICByZXR1cm4gYm91bmRpbmdSZWN0KCByLCB0Ziwgc3RyLCBsZW4sIGkgKTsK
fQoKCgoKCgoKCgojIDYgImNoYXJ0Zm9ybV9maWxlcy5jcHAiIDIKCiMgMSAiL3Vzci9sb2NhbC9x
dC9pbmNsdWRlL3FwcmludGVyLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpjbGFzcyBRUHJpbnRlclByaXZhdGU7CgpjbGFzcyAgIFFQ
cmludGVyIDogcHVibGljIFFQYWludERldmljZQp7CnB1YmxpYzoKICAgIGVudW0gUHJpbnRlck1v
ZGUgeyBTY3JlZW5SZXNvbHV0aW9uLCBQcmludGVyUmVzb2x1dGlvbiwgSGlnaFJlc29sdXRpb24s
IENvbXBhdGlibGUgfTsKCiAgICBRUHJpbnRlciggUHJpbnRlck1vZGUgbW9kZSA9IFNjcmVlblJl
c29sdXRpb24gKTsKICAgflFQcmludGVyKCk7CgogICAgZW51bSBPcmllbnRhdGlvbiB7IFBvcnRy
YWl0LCBMYW5kc2NhcGUgfTsKCiAgICBlbnVtIFBhZ2VTaXplICAgIHsgQTQsIEI1LCBMZXR0ZXIs
IExlZ2FsLCBFeGVjdXRpdmUsCgkJICAgICAgIEEwLCBBMSwgQTIsIEEzLCBBNSwgQTYsIEE3LCBB
OCwgQTksIEIwLCBCMSwKCQkgICAgICAgQjEwLCBCMiwgQjMsIEI0LCBCNiwgQjcsIEI4LCBCOSwg
QzVFLCBDb21tMTBFLAoJCSAgICAgICBETEUsIEZvbGlvLCBMZWRnZXIsIFRhYmxvaWQsIEN1c3Rv
bSwgTlBhZ2VTaXplID0gQ3VzdG9tIH07CgogICAgZW51bSBQYWdlT3JkZXIgICB7IEZpcnN0UGFn
ZUZpcnN0LCBMYXN0UGFnZUZpcnN0IH07CgogICAgZW51bSBDb2xvck1vZGUgICB7IEdyYXlTY2Fs
ZSwgQ29sb3IgfTsKCiAgICBlbnVtIFBhcGVyU291cmNlIHsgT25seU9uZSwgTG93ZXIsIE1pZGRs
ZSwgTWFudWFsLCBFbnZlbG9wZSwKICAgICAgICAgICAgICAgICAgICAgICBFbnZlbG9wZU1hbnVh
bCwgQXV0bywgVHJhY3RvciwgU21hbGxGb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgTGFy
Z2VGb3JtYXQsIExhcmdlQ2FwYWNpdHksIENhc3NldHRlLCBGb3JtU291cmNlIH07CgogICAgUVN0
cmluZyBwcmludGVyTmFtZSgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldFByaW50ZXJOYW1l
KCBjb25zdCBRU3RyaW5nICYpOwogICAgYm9vbCBvdXRwdXRUb0ZpbGUoKSBjb25zdDsKICAgIHZp
cnR1YWwgdm9pZCBzZXRPdXRwdXRUb0ZpbGUoIGJvb2wgKTsKICAgIFFTdHJpbmcgb3V0cHV0Rmls
ZU5hbWUoKWNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldE91dHB1dEZpbGVOYW1lKCBjb25zdCBR
U3RyaW5nICYpOwoKICAgIFFTdHJpbmcgcHJpbnRQcm9ncmFtKCkgY29uc3Q7CiAgICB2aXJ0dWFs
IHZvaWQgc2V0UHJpbnRQcm9ncmFtKCBjb25zdCBRU3RyaW5nICYpOwoKICAgIFFTdHJpbmcgcHJp
bnRlclNlbGVjdGlvbk9wdGlvbigpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldFByaW50ZXJT
ZWxlY3Rpb25PcHRpb24oIGNvbnN0IFFTdHJpbmcgJiApOwoKICAgIFFTdHJpbmcgZG9jTmFtZSgp
IGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldERvY05hbWUoIGNvbnN0IFFTdHJpbmcgJik7CiAg
ICBRU3RyaW5nIGNyZWF0b3IoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRDcmVhdG9yKCBj
b25zdCBRU3RyaW5nICYpOwoKICAgIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgICBjb25zdDsK
ICAgIHZpcnR1YWwgdm9pZCBzZXRPcmllbnRhdGlvbiggT3JpZW50YXRpb24gKTsKICAgIFBhZ2VT
aXplICAgIHBhZ2VTaXplKCkgICAgICBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdlU2l6
ZSggUGFnZVNpemUgKTsKCgoKCiAgICB2aXJ0dWFsIHZvaWQgc2V0UGFnZU9yZGVyKCBQYWdlT3Jk
ZXIgKTsKICAgIFBhZ2VPcmRlciAgIHBhZ2VPcmRlcigpIGNvbnN0OwoKICAgIHZvaWQgc2V0UmVz
b2x1dGlvbiggaW50ICk7CiAgICBpbnQgcmVzb2x1dGlvbigpIGNvbnN0OwoKICAgIHZpcnR1YWwg
dm9pZCBzZXRDb2xvck1vZGUoIENvbG9yTW9kZSApOwogICAgQ29sb3JNb2RlICAgY29sb3JNb2Rl
KCkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkICAgICAgICBzZXRGdWxsUGFnZSggYm9vbCApOwog
ICAgYm9vbCAgICAgICAgICAgICAgICBmdWxsUGFnZSgpIGNvbnN0OwogICAgUVNpemUgICAgICAg
bWFyZ2lucygpICAgICAgIGNvbnN0OwoKICAgIGludCAgICAgICAgIGZyb21QYWdlKCkgICAgICBj
b25zdDsKICAgIGludCAgICAgICAgIHRvUGFnZSgpICAgICAgICBjb25zdDsKICAgIHZpcnR1YWwg
dm9pZCBzZXRGcm9tVG8oIGludCBmcm9tUGFnZSwgaW50IHRvUGFnZSApOwogICAgaW50ICAgICAg
ICAgbWluUGFnZSgpICAgICAgIGNvbnN0OwogICAgaW50ICAgICAgICAgbWF4UGFnZSgpICAgICAg
IGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldE1pbk1heCggaW50IG1pblBhZ2UsIGludCBtYXhQ
YWdlICk7CiAgICBpbnQgICAgICAgICBudW1Db3BpZXMoKSAgICAgY29uc3Q7CiAgICB2aXJ0dWFs
IHZvaWQgc2V0TnVtQ29waWVzKCBpbnQgKTsKCiAgICBib29sCWNvbGxhdGVDb3BpZXNFbmFibGVk
KCkgY29uc3Q7ICAgIAogICAgdm9pZAlzZXRDb2xsYXRlQ29waWVzRW5hYmxlZChib29sICk7Cgog
ICAgYm9vbAljb2xsYXRlQ29waWVzKCkgY29uc3Q7CiAgICB2b2lkCXNldENvbGxhdGVDb3BpZXMo
Ym9vbCApOwoKICAgIGJvb2wgICAgICAgIG5ld1BhZ2UoKTsKICAgIGJvb2wgICAgICAgIGFib3J0
KCk7CiAgICBib29sICAgICAgICBhYm9ydGVkKCkgICAgICAgY29uc3Q7CgogICAgYm9vbCAgICAg
ICAgc2V0dXAoIFFXaWRnZXQgKnBhcmVudCA9IDAgKTsKCiAgICBQYXBlclNvdXJjZSBwYXBlclNv
dXJjZSgpICAgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0UGFwZXJTb3VyY2UoIFBhcGVyU291
cmNlICk7Cgpwcm90ZWN0ZWQ6CiAgICBib29sICAgICAgICBjbWQoIGludCwgUVBhaW50ZXIgKiwg
UVBEZXZDbWRQYXJhbSAqICk7CiAgICBpbnQgICAgICAgICBtZXRyaWMoIGludCApIGNvbnN0OwoK
CgoKCgpwcml2YXRlOgoKICAgIFFQYWludERldmljZSAqcGRydjsKICAgIGludCAgICAgICAgIHBp
ZDsKCgoKCgoKCgojIDE3NiAiL3Vzci9sb2NhbC9xdC9pbmNsdWRlL3FwcmludGVyLmgiCgoKICAg
IGludCAgICAgICAgIHN0YXRlOwogICAgUVN0cmluZyAgICAgcHJpbnRlcl9uYW1lOwogICAgUVN0
cmluZyAgICAgb3B0aW9uX3N0cmluZzsKICAgIFFTdHJpbmcgICAgIG91dHB1dF9maWxlbmFtZTsK
ICAgIGJvb2wgICAgICAgIG91dHB1dF9maWxlOwogICAgUVN0cmluZyAgICAgcHJpbnRfcHJvZzsK
ICAgIFFTdHJpbmcgICAgIGRvY19uYW1lOwogICAgUVN0cmluZyAgICAgY3JlYXRvcl9uYW1lOwoK
ICAgIFBhZ2VTaXplICAgIHBhZ2Vfc2l6ZTsKICAgIFBhcGVyU291cmNlIHBhcGVyX3NvdXJjZTsK
ICAgIFBhZ2VPcmRlciAgIHBhZ2Vfb3JkZXI7CiAgICBDb2xvck1vZGUgICBjb2xvcl9tb2RlOwog
ICAgT3JpZW50YXRpb24gb3JpZW50OwogICAgdWludAl0b19lZGdlIDogMTsKICAgIHVpbnQJYXBw
Y29sY29waWVzIDogMTsKICAgIHVpbnQJdXNlcmNvbGNvcGllcyA6IDE7CiAgICB1aW50CXJlc19z
ZXQgOiAxOwogICAgc2hvcnQgICAgICAgZnJvbV9wZywgdG9fcGc7CiAgICBzaG9ydCAgICAgICBt
aW5fcGcsICBtYXhfcGc7CiAgICBzaG9ydCAgICAgICBuY29waWVzOwogICAgaW50ICAgICAgICAg
cmVzOwogICAgUVByaW50ZXJQcml2YXRlICpkOwoKcHJpdmF0ZTogICAgICAgICAKCiAgICBRUHJp
bnRlciggY29uc3QgUVByaW50ZXIgJiApOwogICAgUVByaW50ZXIgJm9wZXJhdG9yPSggY29uc3Qg
UVByaW50ZXIgJiApOwoKfTsKCgppbmxpbmUgUVN0cmluZyBRUHJpbnRlcjo6cHJpbnRlck5hbWUo
KSBjb25zdAp7IHJldHVybiBwcmludGVyX25hbWU7IH0KCmlubGluZSBib29sIFFQcmludGVyOjpv
dXRwdXRUb0ZpbGUoKSBjb25zdAp7IHJldHVybiBvdXRwdXRfZmlsZTsgfQoKaW5saW5lIFFTdHJp
bmcgUVByaW50ZXI6Om91dHB1dEZpbGVOYW1lKCkgY29uc3QKeyByZXR1cm4gb3V0cHV0X2ZpbGVu
YW1lOyB9CgppbmxpbmUgUVN0cmluZyBRUHJpbnRlcjo6cHJpbnRQcm9ncmFtKCkgY29uc3QKeyBy
ZXR1cm4gcHJpbnRfcHJvZzsgfQoKaW5saW5lIFFTdHJpbmcgUVByaW50ZXI6OmRvY05hbWUoKSBj
b25zdAp7IHJldHVybiBkb2NfbmFtZTsgfQoKaW5saW5lIFFTdHJpbmcgUVByaW50ZXI6OmNyZWF0
b3IoKSBjb25zdAp7IHJldHVybiBjcmVhdG9yX25hbWU7IH0KCmlubGluZSBRUHJpbnRlcjo6UGFn
ZVNpemUgUVByaW50ZXI6OnBhZ2VTaXplKCkgY29uc3QKeyByZXR1cm4gcGFnZV9zaXplOyB9Cgpp
bmxpbmUgUVByaW50ZXI6Ok9yaWVudGF0aW9uIFFQcmludGVyOjpvcmllbnRhdGlvbigpIGNvbnN0
CnsgcmV0dXJuIG9yaWVudDsgfQoKaW5saW5lIGludCBRUHJpbnRlcjo6ZnJvbVBhZ2UoKSBjb25z
dAp7IHJldHVybiBmcm9tX3BnOyB9CgppbmxpbmUgaW50IFFQcmludGVyOjp0b1BhZ2UoKSBjb25z
dAp7IHJldHVybiB0b19wZzsgfQoKaW5saW5lIGludCBRUHJpbnRlcjo6bWluUGFnZSgpIGNvbnN0
CnsgcmV0dXJuIG1pbl9wZzsgfQoKaW5saW5lIGludCBRUHJpbnRlcjo6bWF4UGFnZSgpIGNvbnN0
CnsgcmV0dXJuIG1heF9wZzsgfQoKaW5saW5lIGludCBRUHJpbnRlcjo6bnVtQ29waWVzKCkgY29u
c3QKeyByZXR1cm4gbmNvcGllczsgfQoKaW5saW5lIGJvb2wgUVByaW50ZXI6OmNvbGxhdGVDb3Bp
ZXNFbmFibGVkKCkgY29uc3QKeyByZXR1cm4gYXBwY29sY29waWVzOyB9CgppbmxpbmUgdm9pZCBR
UHJpbnRlcjo6c2V0Q29sbGF0ZUNvcGllc0VuYWJsZWQoYm9vbCB2KQp7IGFwcGNvbGNvcGllcyA9
IHY7IH0KCmlubGluZSBib29sIFFQcmludGVyOjpjb2xsYXRlQ29waWVzKCkgY29uc3QKeyByZXR1
cm4gdXNlcmNvbGNvcGllczsgfQoKCgoKCiMgNyAiY2hhcnRmb3JtX2ZpbGVzLmNwcCIgMgoKIyAx
ICIvdXNyL2xvY2FsL3F0L2luY2x1ZGUvcXN0YXR1c2Jhci5oIiAxCiAKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmNsYXNzIFFTdGF0dXNCYXJQcml2YXRlOwoK
CmNsYXNzICAgUVN0YXR1c0JhcjogcHVibGljIFFXaWRnZXQKewogICAgcHVibGljOgl2aXJ0dWFs
IFFNZXRhT2JqZWN0ICptZXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljTWV0YU9iamVj
dCgpOwl9CXZpcnR1YWwgY29uc3QgY2hhciAqY2xhc3NOYW1lKCkgY29uc3Q7CXZpcnR1YWwgdm9p
ZCogcXRfY2FzdCggY29uc3QgY2hhciogKTsgdmlydHVhbCBib29sIHF0X2ludm9rZSggaW50LCBR
VU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X2VtaXQoIGludCwgUVVPYmplY3QqICk7IHZpcnR1
YWwgYm9vbCBxdF9wcm9wZXJ0eSggaW50LCBpbnQsIFFWYXJpYW50KiApOyAJc3RhdGljIFFNZXRh
T2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0KCk7CVFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAo
UU9iamVjdCopdGhpczsgfSBzdGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBj
aGFyICogPSAwICk7IHN0YXRpYyBRU3RyaW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBj
aGFyICogPSAwICk7IAlwcml2YXRlOglzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7IAogICAg
IAoKcHVibGljOgogICAgUVN0YXR1c0JhciggUVdpZGdldCogcGFyZW50PTAsIGNvbnN0IGNoYXIq
IG5hbWU9MCApOwogICAgdmlydHVhbCB+UVN0YXR1c0JhcigpOwoKICAgIHZpcnR1YWwgdm9pZCBh
ZGRXaWRnZXQoIFFXaWRnZXQgKiwgaW50IHN0cmV0Y2ggPSAwLCBib29sID0gRkFMU0UgKTsKICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVXaWRnZXQoIFFXaWRnZXQgKiApOwoKICAgIHZvaWQgc2V0U2l6
ZUdyaXBFbmFibGVkKGJvb2wpOwogICAgYm9vbCBpc1NpemVHcmlwRW5hYmxlZCgpIGNvbnN0OwoK
cHVibGljICA6CiAgICB2b2lkIG1lc3NhZ2UoIGNvbnN0IFFTdHJpbmcgJik7CiAgICB2b2lkIG1l
c3NhZ2UoIGNvbnN0IFFTdHJpbmcgJiwgaW50ICk7CiAgICB2b2lkIGNsZWFyKCk7Cgpwcm90ZWN0
ZWQ6CiAgICB2b2lkIHBhaW50RXZlbnQoIFFQYWludEV2ZW50ICogKTsKICAgIHZvaWQgcmVzaXpl
RXZlbnQoIFFSZXNpemVFdmVudCAqICk7CgogICAgdm9pZCByZWZvcm1hdCgpOwogICAgdm9pZCBo
aWRlT3JTaG93KCk7CiAgICBib29sIGV2ZW50KCBRRXZlbnQgKik7Cgpwcml2YXRlOgogICAgUVN0
YXR1c0JhclByaXZhdGUgKiBkOwpwcml2YXRlOgkgCgogICAgUVN0YXR1c0JhciggY29uc3QgUVN0
YXR1c0JhciAmICk7CiAgICBRU3RhdHVzQmFyJiBvcGVyYXRvcj0oIGNvbnN0IFFTdGF0dXNCYXIg
JiApOwoKfTsKCgoKCiMgOCAiY2hhcnRmb3JtX2ZpbGVzLmNwcCIgMgoKCgp2b2lkIENoYXJ0Rm9y
bTo6bG9hZCggY29uc3QgUVN0cmluZyYgZmlsZW5hbWUgKQp7CiAgICBRRmlsZSBmaWxlKCBmaWxl
bmFtZSApOwogICAgaWYgKCAhZmlsZS5vcGVuKCAweDAwMDEgICkgKSB7CglzdGF0dXNCYXIoKS0+
bWVzc2FnZSggUVN0cmluZyggIkZhaWxlZCB0byBsb2FkIFwnJTFcJyIgKS4KCQkJCWFyZyggZmls
ZW5hbWUgKSwgMjAwMCApOwoJcmV0dXJuOwogICAgfQoKICAgIGluaXQoKTsgIAogICAgbV9maWxl
bmFtZSA9IGZpbGVuYW1lOwogICAgUVRleHRTdHJlYW0gdHMoICZmaWxlICk7CiAgICBFbGVtZW50
IGVsZW1lbnQ7CiAgICBpbnQgZXJyb3JzID0gMDsKICAgIGludCBpID0gMDsKICAgIHdoaWxlICgg
IXRzLmVvZigpICkgewoJdHMgPj4gZWxlbWVudDsKCWlmICggZWxlbWVudC5pc1ZhbGlkKCkgKQoJ
ICAgIG1fZWxlbWVudHNbaSsrXSA9IGVsZW1lbnQ7CgllbHNlCgkgICAgZXJyb3JzKys7CglpZiAo
IGkgPT0gTUFYX0VMRU1FTlRTICkgewoJICAgIHN0YXR1c0JhcigpLT5tZXNzYWdlKAoJCVFTdHJp
bmcoICJSZWFkIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzICglMSkiCgkJICAgICAgICAgIiBk
aXNjYXJkaW5nIG90aGVycyIgKS5hcmcoIGkgKSwgMjAwMCApOwoJICAgIGJyZWFrOwoJfQogICAg
fQoKICAgIGZpbGUuY2xvc2UoKTsKCiAgICBRU3RyaW5nIGJhZCA9ICIiOwogICAgaWYgKCBlcnJv
cnMgKSB7CgliYWQgPSBRU3RyaW5nKCAiOyBza2lwcGVkICIgKSArIFFTdHJpbmc6Om51bWJlcigg
ZXJyb3JzICkgKyAiIGJhZCByZWNvcmQiOwoJaWYgKCBlcnJvcnMgPiAxICkKCSAgICBiYWQgKz0g
InMiOwogICAgfQogICAgc3RhdHVzQmFyKCktPm1lc3NhZ2UoIFFTdHJpbmcoICJSZWFkICUxIHZh
bHVlcyBmcm9tIFwnJTJcJyUzIiApLgoJCQkgIGFyZyggaSApLmFyZyggZmlsZW5hbWUgKS5hcmco
IGJhZCApLCAzMDAwICk7CgogICAgc2V0Q2FwdGlvbiggUVN0cmluZyggIkNoYXJ0IC0tICUxIiAp
LmFyZyggZmlsZW5hbWUgKSApOwogICAgdXBkYXRlUmVjZW50RmlsZXMoIGZpbGVuYW1lICk7Cgog
ICAgZHJhd0VsZW1lbnRzKCk7CiAgICBtX2NoYW5nZWQgPSBGQUxTRTsKfQoKCnZvaWQgQ2hhcnRG
b3JtOjpmaWxlU2F2ZSgpCnsKICAgIGlmICggbV9maWxlbmFtZS5pc0VtcHR5KCkgKSB7CglmaWxl
U2F2ZUFzKCk7CglyZXR1cm47CiAgICB9CgogICAgUUZpbGUgZmlsZSggbV9maWxlbmFtZSApOwog
ICAgaWYgKCAhZmlsZS5vcGVuKCAweDAwMDIgICkgKSB7CglzdGF0dXNCYXIoKS0+bWVzc2FnZSgg
UVN0cmluZyggIkZhaWxlZCB0byBzYXZlIFwnJTFcJyIgKS4KCQkJCWFyZyggbV9maWxlbmFtZSAp
LCAyMDAwICk7CglyZXR1cm47CiAgICB9CiAgICBRVGV4dFN0cmVhbSB0cyggJmZpbGUgKTsKICAg
IGZvciAoIGludCBpID0gMDsgaSA8IE1BWF9FTEVNRU5UUzsgKytpICkKCWlmICggbV9lbGVtZW50
c1tpXS5pc1ZhbGlkKCkgKQoJICAgIHRzIDw8IG1fZWxlbWVudHNbaV07CgogICAgZmlsZS5jbG9z
ZSgpOwoKICAgIHNldENhcHRpb24oIFFTdHJpbmcoICJDaGFydCAtLSAlMSIgKS5hcmcoIG1fZmls
ZW5hbWUgKSApOwogICAgc3RhdHVzQmFyKCktPm1lc3NhZ2UoIFFTdHJpbmcoICJTYXZlZCBcJyUx
XCciICkuYXJnKCBtX2ZpbGVuYW1lICksIDIwMDAgKTsKICAgIG1fY2hhbmdlZCA9IEZBTFNFOwp9
CgoKdm9pZCBDaGFydEZvcm06OmZpbGVTYXZlQXNQaXhtYXAoKQp7CiAgICBRU3RyaW5nIGZpbGVu
YW1lID0gUUZpbGVEaWFsb2c6OmdldFNhdmVGaWxlTmFtZSgKCQkJICAgIFFTdHJpbmc6Om51bGws
ICJJbWFnZXMgKCoucG5nICoueHBtICouanBnKSIsCgkJCSAgICB0aGlzLCAiZmlsZSBzYXZlIGFz
IGJpdG1hcCIsCgkJCSAgICAiQ2hhcnQgLS0gRmlsZSBTYXZlIEFzIEJpdG1hcCIgKTsKICAgIGlm
ICggUVBpeG1hcDo6Z3JhYldpZGdldCggbV9jYW52YXNWaWV3ICkuCgkgICAgc2F2ZSggZmlsZW5h
bWUsCgkJICBmaWxlbmFtZS5taWQoIGZpbGVuYW1lLmZpbmRSZXYoICcuJyApICsgMSApLnVwcGVy
KCkgKSApCglzdGF0dXNCYXIoKS0+bWVzc2FnZSggUVN0cmluZyggIldyb3RlIFwnJTFcJyIgKS5h
cmcoIGZpbGVuYW1lICksIDIwMDAgKTsKICAgIGVsc2UKCXN0YXR1c0JhcigpLT5tZXNzYWdlKCBR
U3RyaW5nKCAiRmFpbGVkIHRvIHdyaXRlIFwnJTFcJyIgKS4KCQkJCWFyZyggZmlsZW5hbWUgKSwg
MjAwMCApOwp9Cgp2b2lkIENoYXJ0Rm9ybTo6ZmlsZVByaW50KCkKewogICAgaWYgKCAhbV9wcmlu
dGVyICkKCW1fcHJpbnRlciA9IG5ldyBRUHJpbnRlcjsKICAgIGlmICggbV9wcmludGVyLT5zZXR1
cCgpICkgewoJUVBhaW50ZXIgcGFpbnRlciggbV9wcmludGVyICk7CgltX2NhbnZhcy0+ZHJhd0Fy
ZWEoIFFSZWN0KCAwLCAwLCBtX2NhbnZhcy0+d2lkdGgoKSwgbV9jYW52YXMtPmhlaWdodCgpICks
CgkJCSAgICAmcGFpbnRlciwgRkFMU0UgKTsKCWlmICggIW1fcHJpbnRlci0+b3V0cHV0RmlsZU5h
bWUoKS5pc0VtcHR5KCkgKQoJICAgIHN0YXR1c0JhcigpLT5tZXNzYWdlKCBRU3RyaW5nKCAiUHJp
bnRlZCBcJyUxXCciICkuCgkJCQkgIGFyZyggbV9wcmludGVyLT5vdXRwdXRGaWxlTmFtZSgpICks
IDIwMDAgKTsKICAgIH0KfQoK


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

end of thread, other threads:[~2002-11-04 15:46 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-11-04  7:46 c++/8438: Internal compiler error building Trolltech Qt library bangerth
  -- strict thread matches above, loose matches on Subject: below --
2002-11-03  9:26 bennyb

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