public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* middle-end/5785: g++ crashes on modified libgcj interpreter
@ 2002-02-26  9:06 tromey
  0 siblings, 0 replies; only message in thread
From: tromey @ 2002-02-26  9:06 UTC (permalink / raw)
  To: gcc-gnats


>Number:         5785
>Category:       middle-end
>Synopsis:       g++ crashes on modified libgcj interpreter
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Feb 26 08:36:01 PST 2002
>Closed-Date:
>Last-Modified:
>Originator:     Tom Tromey <tromey@redhat.com>
>Release:        GNU C++ version 3.1 20020225 (experimental) (i686-pc-linux-gnu)
>Organization:
>Environment:
x86 Red Hat Linux 6.2
>Description:
I've modified the libgcj interpreter to do direct
threading and some other tricks.  Now g++ crashes when
compiling it at -O2.  I've attached the .ii file.
The code is pretty unusual in that it uses computed
goto as well as exception handling in one huge function.
Compiling with -g (and not -O) works, but it defeats the
purpose of this work, which is making the interpreter
faster.
>How-To-Repeat:
Here is the command-line I used to generate the .ii file:

/x1/egcs/build/gcc/xgcc -v -B/x1/egcs/build/gcc/ -nostdinc++ -L/x1/egcs/build/i686-pc-linux-gnu/libstdc++-v3/src -L/x1/egcs/build/i686-pc-linux-gnu/libstdc++-v3/src/.libs -B/x1/egcs/install/i686-pc-linux-gnu/bin/ -B/x1/egcs/install/i686-pc-linux-gnu/lib/ -isystem /x1/egcs/install/i686-pc-linux-gnu/include -DHAVE_CONFIG_H -I. -I../../../gcc/libjava -I./include -I./gcj -I../../../gcc/libjava -Iinclude -I../../../gcc/libjava/include -I../../../gcc/libjava/../boehm-gc/include -DGC_LINUX_THREADS=1 -D_REENTRANT=1 -DTHREAD_LOCAL_ALLOC=1 -DSILENT=1 -DNO_SIGNALS=1 -DNO_EXECUTE_PERMISSION=1 -DALL_INTERIOR_POINTERS=1 -DJAVA_FINALIZATION=1 -DGC_GCJ_SUPPORT=1 -DATOMIC_UNCOLLECTABLE=1 -I../../../gcc/libjava/libltdl -I../../../gcc/libjava/libltdl -I../../../gcc/libjava/.././libjava/../gcc -I../../../gcc/libjava/../zlib -I../../../gcc/libjava/../libffi/include -I../libffi/include -fno-rtti -fnon-call-exceptions -fdollars-in-identifiers -D__NO_MATH_INLINES -ffloat-store -I/usr/X11R6/include -W -Wall -D_GNU_SOURCE -DPREFIX=\"/x1/egcs/install\" -O2  ../../../gcc/libjava/interpret.cc  -fPIC -DPIC -c -save-temps
>Fix:

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

IyAxICIuLi8uLi8uLi9nY2MvbGliamF2YS9pbnRlcnByZXQuY2MiCiMgMSAiPGJ1aWx0LWluPiIK
IyAxICI8Y29tbWFuZCBsaW5lPiIKIyAxICIuLi8uLi8uLi9nY2MvbGliamF2YS9pbnRlcnByZXQu
Y2MiCiMgMTMgIi4uLy4uLy4uL2djYy9saWJqYXZhL2ludGVycHJldC5jYyIKIyAxICJpbmNsdWRl
L2NvbmZpZy5oIiAxCiMgMTQgIi4uLy4uLy4uL2djYy9saWJqYXZhL2ludGVycHJldC5jYyIgMgoK
I3ByYWdtYSBpbXBsZW1lbnRhdGlvbiAiamF2YS1pbnRlcnAuaCIKCiMgMSAiLi4vLi4vLi4vZ2Nj
L2xpYmphdmEvaW5jbHVkZS9qdm0uaCIgMQojIDIwICIuLi8uLi8uLi9nY2MvbGliamF2YS9pbmNs
dWRlL2p2bS5oIgojIDEgIi4uLy4uLy4uL2djYy9saWJqYXZhL2djai9qYXZhcHJpbXMuaCIgMQoj
IDE1ICIuLi8uLi8uLi9nY2MvbGliamF2YS9nY2ovamF2YXByaW1zLmgiCiNwcmFnbWEgR0NDIGph
dmFfZXhjZXB0aW9ucwoKIyAxICJnY2ovbGliZ2NqLWNvbmZpZy5oIiAxCiMgMTggIi4uLy4uLy4u
L2djYy9saWJqYXZhL2djai9qYXZhcHJpbXMuaCIgMgojIDI5ICIuLi8uLi8uLi9nY2MvbGliamF2
YS9nY2ovamF2YXByaW1zLmgiCmV4dGVybiAiSmF2YSIKewogIHR5cGVkZWYgX19qYXZhX2J5dGUg
amJ5dGU7CiAgdHlwZWRlZiBfX2phdmFfc2hvcnQganNob3J0OwogIHR5cGVkZWYgX19qYXZhX2lu
dCBqaW50OwogIHR5cGVkZWYgX19qYXZhX2xvbmcgamxvbmc7CiAgdHlwZWRlZiBfX2phdmFfZmxv
YXQgamZsb2F0OwogIHR5cGVkZWYgX19qYXZhX2RvdWJsZSBqZG91YmxlOwogIHR5cGVkZWYgX19q
YXZhX2NoYXIgamNoYXI7CiAgdHlwZWRlZiBfX2phdmFfYm9vbGVhbiBqYm9vbGVhbjsKICB0eXBl
ZGVmIGppbnQganNpemU7CgoKCiAgbmFtZXNwYWNlIGphdmEKICB7CiAgICBuYW1lc3BhY2UgaW8K
ICAgIHsKICAgICAgY2xhc3MgQnVmZmVyZWRJbnB1dFN0cmVhbTsKICAgICAgY2xhc3MgQnVmZmVy
ZWRPdXRwdXRTdHJlYW07CiAgICAgIGNsYXNzIEJ1ZmZlcmVkUmVhZGVyOwogICAgICBjbGFzcyBC
dWZmZXJlZFdyaXRlcjsKICAgICAgY2xhc3MgQnl0ZUFycmF5SW5wdXRTdHJlYW07CiAgICAgIGNs
YXNzIEJ5dGVBcnJheU91dHB1dFN0cmVhbTsKICAgICAgY2xhc3MgQ2hhckFycmF5UmVhZGVyOwog
ICAgICBjbGFzcyBDaGFyQXJyYXlXcml0ZXI7CiAgICAgIGNsYXNzIENoYXJDb252ZXJzaW9uRXhj
ZXB0aW9uOwogICAgICBjbGFzcyBEYXRhSW5wdXQ7CiAgICAgIGNsYXNzIERhdGFJbnB1dFN0cmVh
bTsKICAgICAgY2xhc3MgRGF0YU91dHB1dDsKICAgICAgY2xhc3MgRGF0YU91dHB1dFN0cmVhbTsK
ICAgICAgY2xhc3MgRU9GRXhjZXB0aW9uOwogICAgICBjbGFzcyBFeHRlcm5hbGl6YWJsZTsKICAg
ICAgY2xhc3MgRmlsZTsKICAgICAgY2xhc3MgRmlsZURlc2NyaXB0b3I7CiAgICAgIGNsYXNzIEZp
bGVGaWx0ZXI7CiAgICAgIGNsYXNzIEZpbGVJbnB1dFN0cmVhbTsKICAgICAgY2xhc3MgRmlsZU5v
dEZvdW5kRXhjZXB0aW9uOwogICAgICBjbGFzcyBGaWxlT3V0cHV0U3RyZWFtOwogICAgICBjbGFz
cyBGaWxlUGVybWlzc2lvbjsKICAgICAgY2xhc3MgRmlsZVJlYWRlcjsKICAgICAgY2xhc3MgRmls
ZVdyaXRlcjsKICAgICAgY2xhc3MgRmlsZW5hbWVGaWx0ZXI7CiAgICAgIGNsYXNzIEZpbHRlcklu
cHV0U3RyZWFtOwogICAgICBjbGFzcyBGaWx0ZXJPdXRwdXRTdHJlYW07CiAgICAgIGNsYXNzIEZp
bHRlclJlYWRlcjsKICAgICAgY2xhc3MgRmlsdGVyV3JpdGVyOwogICAgICBjbGFzcyBJT0V4Y2Vw
dGlvbjsKICAgICAgY2xhc3MgSW5wdXRTdHJlYW07CiAgICAgIGNsYXNzIElucHV0U3RyZWFtUmVh
ZGVyOwogICAgICBjbGFzcyBJbnRlcmZhY2VDb21wYXJhdG9yOwogICAgICBjbGFzcyBJbnRlcnJ1
cHRlZElPRXhjZXB0aW9uOwogICAgICBjbGFzcyBJbnZhbGlkQ2xhc3NFeGNlcHRpb247CiAgICAg
IGNsYXNzIEludmFsaWRPYmplY3RFeGNlcHRpb247CiAgICAgIGNsYXNzIExpbmVOdW1iZXJJbnB1
dFN0cmVhbTsKICAgICAgY2xhc3MgTGluZU51bWJlclJlYWRlcjsKICAgICAgY2xhc3MgTWVtYmVy
Q29tcGFyYXRvcjsKICAgICAgY2xhc3MgTm90QWN0aXZlRXhjZXB0aW9uOwogICAgICBjbGFzcyBO
b3RTZXJpYWxpemFibGVFeGNlcHRpb247CiAgICAgIGNsYXNzIE9iamVjdElucHV0OwogICAgICBj
bGFzcyBPYmplY3RJbnB1dFN0cmVhbTsKICAgICAgY2xhc3MgT2JqZWN0SW5wdXRTdHJlYW0kR2V0
RmllbGQ7CiAgICAgIGNsYXNzIE9iamVjdElucHV0VmFsaWRhdGlvbjsKICAgICAgY2xhc3MgT2Jq
ZWN0T3V0cHV0OwogICAgICBjbGFzcyBPYmplY3RPdXRwdXRTdHJlYW07CiAgICAgIGNsYXNzIE9i
amVjdE91dHB1dFN0cmVhbSRQdXRGaWVsZDsKICAgICAgY2xhc3MgT2JqZWN0U3RyZWFtQ2xhc3M7
CiAgICAgIGNsYXNzIE9iamVjdFN0cmVhbUNvbnN0YW50czsKICAgICAgY2xhc3MgT2JqZWN0U3Ry
ZWFtRXhjZXB0aW9uOwogICAgICBjbGFzcyBPYmplY3RTdHJlYW1GaWVsZDsKICAgICAgY2xhc3Mg
T3B0aW9uYWxEYXRhRXhjZXB0aW9uOwogICAgICBjbGFzcyBPdXRwdXRTdHJlYW07CiAgICAgIGNs
YXNzIE91dHB1dFN0cmVhbVdyaXRlcjsKICAgICAgY2xhc3MgUGlwZWRJbnB1dFN0cmVhbTsKICAg
ICAgY2xhc3MgUGlwZWRPdXRwdXRTdHJlYW07CiAgICAgIGNsYXNzIFBpcGVkUmVhZGVyOwogICAg
ICBjbGFzcyBQaXBlZFdyaXRlcjsKICAgICAgY2xhc3MgUHJpbnRTdHJlYW07CiAgICAgIGNsYXNz
IFByaW50V3JpdGVyOwogICAgICBjbGFzcyBQdXNoYmFja0lucHV0U3RyZWFtOwogICAgICBjbGFz
cyBQdXNoYmFja1JlYWRlcjsKICAgICAgY2xhc3MgUmFuZG9tQWNjZXNzRmlsZTsKICAgICAgY2xh
c3MgUmVhZGVyOwogICAgICBjbGFzcyBTZXF1ZW5jZUlucHV0U3RyZWFtOwogICAgICBjbGFzcyBT
ZXJpYWxpemFibGU7CiAgICAgIGNsYXNzIFNlcmlhbGl6YWJsZVBlcm1pc3Npb247CiAgICAgIGNs
YXNzIFN0cmVhbUNvcnJ1cHRlZEV4Y2VwdGlvbjsKICAgICAgY2xhc3MgU3RyZWFtVG9rZW5pemVy
OwogICAgICBjbGFzcyBTdHJpbmdCdWZmZXJJbnB1dFN0cmVhbTsKICAgICAgY2xhc3MgU3RyaW5n
UmVhZGVyOwogICAgICBjbGFzcyBTdHJpbmdXcml0ZXI7CiAgICAgIGNsYXNzIFN5bmNGYWlsZWRF
eGNlcHRpb247CiAgICAgIGNsYXNzIFVURkRhdGFGb3JtYXRFeGNlcHRpb247CiAgICAgIGNsYXNz
IFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247CiAgICAgIGNsYXNzIFZhbGlkYXRvckFuZFBy
aW9yaXR5OwogICAgICBjbGFzcyBXcml0ZUFib3J0ZWRFeGNlcHRpb247CiAgICAgIGNsYXNzIFdy
aXRlcjsKICAgIH07CgogICAgbmFtZXNwYWNlIGxhbmcKICAgIHsKICAgICAgY2xhc3MgQWJzdHJh
Y3RNZXRob2RFcnJvcjsKICAgICAgY2xhc3MgQXJpdGhtZXRpY0V4Y2VwdGlvbjsKICAgICAgY2xh
c3MgQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uOwogICAgICBjbGFzcyBBcnJheVN0b3Jl
RXhjZXB0aW9uOwogICAgICBjbGFzcyBCb29sZWFuOwogICAgICBjbGFzcyBCeXRlOwogICAgICBj
bGFzcyBDUGx1c1BsdXNEZW1hbmdsZXI7CiAgICAgIGNsYXNzIENoYXJTZXF1ZW5jZTsKICAgICAg
Y2xhc3MgQ2hhcmFjdGVyOwogICAgICBjbGFzcyBDaGFyYWN0ZXIkU3Vic2V0OwogICAgICBjbGFz
cyBDaGFyYWN0ZXIkVW5pY29kZUJsb2NrOwogICAgICBjbGFzcyBDbGFzczsKICAgICAgY2xhc3Mg
Q2xhc3NDYXN0RXhjZXB0aW9uOwogICAgICBjbGFzcyBDbGFzc0NpcmN1bGFyaXR5RXJyb3I7CiAg
ICAgIGNsYXNzIENsYXNzRm9ybWF0RXJyb3I7CiAgICAgIGNsYXNzIENsYXNzTG9hZGVyOwogICAg
ICBjbGFzcyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uOwogICAgICBjbGFzcyBDbG9uZU5vdFN1cHBv
cnRlZEV4Y2VwdGlvbjsKICAgICAgY2xhc3MgQ2xvbmVhYmxlOwogICAgICBjbGFzcyBDb21wYXJh
YmxlOwogICAgICBjbGFzcyBDb21waWxlcjsKICAgICAgY2xhc3MgQ29uY3JldGVQcm9jZXNzOwog
ICAgICBjbGFzcyBEb3VibGU7CiAgICAgIGNsYXNzIEVycm9yOwogICAgICBjbGFzcyBFeGNlcHRp
b247CiAgICAgIGNsYXNzIEV4Y2VwdGlvbkluSW5pdGlhbGl6ZXJFcnJvcjsKICAgICAgY2xhc3Mg
RmxvYXQ7CiAgICAgIGNsYXNzIElsbGVnYWxBY2Nlc3NFcnJvcjsKICAgICAgY2xhc3MgSWxsZWdh
bEFjY2Vzc0V4Y2VwdGlvbjsKICAgICAgY2xhc3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uOwog
ICAgICBjbGFzcyBJbGxlZ2FsTW9uaXRvclN0YXRlRXhjZXB0aW9uOwogICAgICBjbGFzcyBJbGxl
Z2FsU3RhdGVFeGNlcHRpb247CiAgICAgIGNsYXNzIElsbGVnYWxUaHJlYWRTdGF0ZUV4Y2VwdGlv
bjsKICAgICAgY2xhc3MgSW5jb21wYXRpYmxlQ2xhc3NDaGFuZ2VFcnJvcjsKICAgICAgY2xhc3Mg
SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbjsKICAgICAgY2xhc3MgSW5oZXJpdGFibGVUaHJlYWRM
b2NhbDsKICAgICAgY2xhc3MgSW5zdGFudGlhdGlvbkVycm9yOwogICAgICBjbGFzcyBJbnN0YW50
aWF0aW9uRXhjZXB0aW9uOwogICAgICBjbGFzcyBJbnRlZ2VyOwogICAgICBjbGFzcyBJbnRlcm5h
bEVycm9yOwogICAgICBjbGFzcyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbjsKICAgICAgY2xhc3MgTGlu
a2FnZUVycm9yOwogICAgICBjbGFzcyBMb25nOwogICAgICBjbGFzcyBNYXRoOwogICAgICBjbGFz
cyBOZWdhdGl2ZUFycmF5U2l6ZUV4Y2VwdGlvbjsKICAgICAgY2xhc3MgTm9DbGFzc0RlZkZvdW5k
RXJyb3I7CiAgICAgIGNsYXNzIE5vU3VjaEZpZWxkRXJyb3I7CiAgICAgIGNsYXNzIE5vU3VjaEZp
ZWxkRXhjZXB0aW9uOwogICAgICBjbGFzcyBOb1N1Y2hNZXRob2RFcnJvcjsKICAgICAgY2xhc3Mg
Tm9TdWNoTWV0aG9kRXhjZXB0aW9uOwogICAgICBjbGFzcyBOdWxsUG9pbnRlckV4Y2VwdGlvbjsK
ICAgICAgY2xhc3MgTnVtYmVyOwogICAgICBjbGFzcyBOdW1iZXJGb3JtYXRFeGNlcHRpb247CiAg
ICAgIGNsYXNzIE9iamVjdDsKICAgICAgY2xhc3MgT3V0T2ZNZW1vcnlFcnJvcjsKICAgICAgY2xh
c3MgUGFja2FnZTsKICAgICAgY2xhc3MgUHJvY2VzczsKICAgICAgY2xhc3MgUnVubmFibGU7CiAg
ICAgIGNsYXNzIFJ1bnRpbWU7CiAgICAgIGNsYXNzIFJ1bnRpbWVFeGNlcHRpb247CiAgICAgIGNs
YXNzIFJ1bnRpbWVQZXJtaXNzaW9uOwogICAgICBjbGFzcyBTZWN1cml0eUNvbnRleHQ7CiAgICAg
IGNsYXNzIFNlY3VyaXR5RXhjZXB0aW9uOwogICAgICBjbGFzcyBTZWN1cml0eU1hbmFnZXI7CiAg
ICAgIGNsYXNzIFNob3J0OwogICAgICBjbGFzcyBTdGFja092ZXJmbG93RXJyb3I7CiAgICAgIGNs
YXNzIFN0cmljdE1hdGg7CiAgICAgIGNsYXNzIFN0cmluZzsKICAgICAgY2xhc3MgU3RyaW5nJENh
c2VJbnNlbnNpdGl2ZUNvbXBhcmF0b3I7CiAgICAgIGNsYXNzIFN0cmluZ0J1ZmZlcjsKICAgICAg
Y2xhc3MgU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbjsKICAgICAgY2xhc3MgU3lzdGVt
OwogICAgICBjbGFzcyBUaHJlYWQ7CiAgICAgIGNsYXNzIFRocmVhZERlYXRoOwogICAgICBjbGFz
cyBUaHJlYWRHcm91cDsKICAgICAgY2xhc3MgVGhyZWFkTG9jYWw7CiAgICAgIGNsYXNzIFRocmVh
ZExvY2FsJFZhbHVlOwogICAgICBjbGFzcyBUaHJvd2FibGU7CiAgICAgIGNsYXNzIFVua25vd25F
cnJvcjsKICAgICAgY2xhc3MgVW5zYXRpc2ZpZWRMaW5rRXJyb3I7CiAgICAgIGNsYXNzIFVuc3Vw
cG9ydGVkQ2xhc3NWZXJzaW9uRXJyb3I7CiAgICAgIGNsYXNzIFVuc3VwcG9ydGVkT3BlcmF0aW9u
RXhjZXB0aW9uOwogICAgICBjbGFzcyBWTUNsYXNzTG9hZGVyOwogICAgICBjbGFzcyBWTVNlY3Vy
aXR5TWFuYWdlcjsKICAgICAgY2xhc3MgVmVyaWZ5RXJyb3I7CiAgICAgIGNsYXNzIFZpcnR1YWxN
YWNoaW5lRXJyb3I7CiAgICAgIGNsYXNzIFZvaWQ7CiAgICAgIG5hbWVzcGFjZSByZWYKICAgICAg
ewogICAgICAgIGNsYXNzIFBoYW50b21SZWZlcmVuY2U7CiAgICAgICAgY2xhc3MgUmVmZXJlbmNl
OwogICAgICAgIGNsYXNzIFJlZmVyZW5jZVF1ZXVlOwogICAgICAgIGNsYXNzIFNvZnRSZWZlcmVu
Y2U7CiAgICAgICAgY2xhc3MgV2Vha1JlZmVyZW5jZTsKICAgICAgfTsKCiAgICAgIG5hbWVzcGFj
ZSByZWZsZWN0CiAgICAgIHsKICAgICAgICBjbGFzcyBBY2Nlc3NpYmxlT2JqZWN0OwogICAgICAg
IGNsYXNzIEFycmF5OwogICAgICAgIGNsYXNzIENvbnN0cnVjdG9yOwogICAgICAgIGNsYXNzIEZp
ZWxkOwogICAgICAgIGNsYXNzIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb247CiAgICAgICAgY2xh
c3MgTWVtYmVyOwogICAgICAgIGNsYXNzIE1ldGhvZDsKICAgICAgICBjbGFzcyBNb2RpZmllcjsK
ICAgICAgICBjbGFzcyBSZWZsZWN0UGVybWlzc2lvbjsKICAgICAgfTsKICAgIH07CgogICAgbmFt
ZXNwYWNlIHV0aWwKICAgIHsKICAgICAgY2xhc3MgQWJzdHJhY3RDb2xsZWN0aW9uOwogICAgICBj
bGFzcyBBYnN0cmFjdExpc3Q7CiAgICAgIGNsYXNzIEFic3RyYWN0TGlzdCRBYnN0cmFjdExpc3RJ
dHI7CiAgICAgIGNsYXNzIEFic3RyYWN0TWFwOwogICAgICBjbGFzcyBBYnN0cmFjdFNlcXVlbnRp
YWxMaXN0OwogICAgICBjbGFzcyBBYnN0cmFjdFNldDsKICAgICAgY2xhc3MgQXJyYXlMaXN0Owog
ICAgICBjbGFzcyBBcnJheXM7CiAgICAgIGNsYXNzIEFycmF5cyRMaXN0SW1wbDsKICAgICAgY2xh
c3MgQmFzaWNNYXBFbnRyeTsKICAgICAgY2xhc3MgQml0U2V0OwogICAgICBjbGFzcyBDYWxlbmRh
cjsKICAgICAgY2xhc3MgQ29sbGVjdGlvbjsKICAgICAgY2xhc3MgQ29sbGVjdGlvbnM7CiAgICAg
IGNsYXNzIENvbGxlY3Rpb25zJFJldmVyc2VDb21wYXJhdG9yOwogICAgICBjbGFzcyBDb2xsZWN0
aW9ucyRTeW5jaHJvbml6ZWRDb2xsZWN0aW9uOwogICAgICBjbGFzcyBDb2xsZWN0aW9ucyRTeW5j
aHJvbml6ZWRJdGVyYXRvcjsKICAgICAgY2xhc3MgQ29sbGVjdGlvbnMkU3luY2hyb25pemVkTGlz
dDsKICAgICAgY2xhc3MgQ29sbGVjdGlvbnMkU3luY2hyb25pemVkTGlzdEl0ZXJhdG9yOwogICAg
ICBjbGFzcyBDb2xsZWN0aW9ucyRTeW5jaHJvbml6ZWRNYXA7CiAgICAgIGNsYXNzIENvbGxlY3Rp
b25zJFN5bmNocm9uaXplZFNldDsKICAgICAgY2xhc3MgQ29sbGVjdGlvbnMkU3luY2hyb25pemVk
U29ydGVkTWFwOwogICAgICBjbGFzcyBDb2xsZWN0aW9ucyRTeW5jaHJvbml6ZWRTb3J0ZWRTZXQ7
CiAgICAgIGNsYXNzIENvbGxlY3Rpb25zJFVubW9kaWZpYWJsZUNvbGxlY3Rpb247CiAgICAgIGNs
YXNzIENvbGxlY3Rpb25zJFVubW9kaWZpYWJsZUl0ZXJhdG9yOwogICAgICBjbGFzcyBDb2xsZWN0
aW9ucyRVbm1vZGlmaWFibGVMaXN0OwogICAgICBjbGFzcyBDb2xsZWN0aW9ucyRVbm1vZGlmaWFi
bGVMaXN0SXRlcmF0b3I7CiAgICAgIGNsYXNzIENvbGxlY3Rpb25zJFVubW9kaWZpYWJsZU1hcDsK
ICAgICAgY2xhc3MgQ29sbGVjdGlvbnMkVW5tb2RpZmlhYmxlU2V0OwogICAgICBjbGFzcyBDb2xs
ZWN0aW9ucyRVbm1vZGlmaWFibGVTb3J0ZWRNYXA7CiAgICAgIGNsYXNzIENvbGxlY3Rpb25zJFVu
bW9kaWZpYWJsZVNvcnRlZFNldDsKICAgICAgY2xhc3MgQ29tcGFyYXRvcjsKICAgICAgY2xhc3Mg
Q29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbjsKICAgICAgY2xhc3MgRGF0ZTsKICAgICAg
Y2xhc3MgRGljdGlvbmFyeTsKICAgICAgY2xhc3MgRW1wdHlTdGFja0V4Y2VwdGlvbjsKICAgICAg
Y2xhc3MgRW51bWVyYXRpb247CiAgICAgIGNsYXNzIEV2ZW50TGlzdGVuZXI7CiAgICAgIGNsYXNz
IEV2ZW50T2JqZWN0OwogICAgICBjbGFzcyBHcmVnb3JpYW5DYWxlbmRhcjsKICAgICAgY2xhc3Mg
SGFzaE1hcDsKICAgICAgY2xhc3MgSGFzaE1hcCRIYXNoRW50cnk7CiAgICAgIGNsYXNzIEhhc2hN
YXAkSGFzaEl0ZXJhdG9yOwogICAgICBjbGFzcyBIYXNoU2V0OwogICAgICBjbGFzcyBIYXNodGFi
bGU7CiAgICAgIGNsYXNzIEhhc2h0YWJsZSRFbnVtZXJhdG9yOwogICAgICBjbGFzcyBIYXNodGFi
bGUkSGFzaEVudHJ5OwogICAgICBjbGFzcyBIYXNodGFibGUkSGFzaEl0ZXJhdG9yOwogICAgICBj
bGFzcyBJZGVudGl0eUhhc2hNYXA7CiAgICAgIGNsYXNzIElkZW50aXR5SGFzaE1hcCRJZGVudGl0
eUl0ZXJhdG9yOwogICAgICBjbGFzcyBJdGVyYXRvcjsKICAgICAgY2xhc3MgTGlua2VkSGFzaE1h
cDsKICAgICAgY2xhc3MgTGlua2VkSGFzaE1hcCRMaW5rZWRIYXNoRW50cnk7CiAgICAgIGNsYXNz
IExpbmtlZExpc3Q7CiAgICAgIGNsYXNzIExpbmtlZExpc3QkRW50cnk7CiAgICAgIGNsYXNzIExp
bmtlZExpc3QkTGlua2VkTGlzdEl0cjsKICAgICAgY2xhc3MgTGlzdDsKICAgICAgY2xhc3MgTGlz
dEl0ZXJhdG9yOwogICAgICBjbGFzcyBMaXN0UmVzb3VyY2VCdW5kbGU7CiAgICAgIGNsYXNzIExv
Y2FsZTsKICAgICAgY2xhc3MgTWFwOwogICAgICBjbGFzcyBNYXAkRW50cnk7CiAgICAgIGNsYXNz
IE1hcCRNYXA7CiAgICAgIGNsYXNzIE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKICAgICAgY2xh
c3MgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbjsKICAgICAgY2xhc3MgT2JzZXJ2YWJsZTsKICAgICAg
Y2xhc3MgT2JzZXJ2ZXI7CiAgICAgIGNsYXNzIFByb3BlcnRpZXM7CiAgICAgIGNsYXNzIFByb3Bl
cnR5UGVybWlzc2lvbjsKICAgICAgY2xhc3MgUHJvcGVydHlSZXNvdXJjZUJ1bmRsZTsKICAgICAg
Y2xhc3MgUmFuZG9tOwogICAgICBjbGFzcyBSYW5kb21BY2Nlc3M7CiAgICAgIGNsYXNzIFJlc291
cmNlQnVuZGxlOwogICAgICBjbGFzcyBTZXQ7CiAgICAgIGNsYXNzIFNpbXBsZVRpbWVab25lOwog
ICAgICBjbGFzcyBTb3J0ZWRNYXA7CiAgICAgIGNsYXNzIFNvcnRlZFNldDsKICAgICAgY2xhc3Mg
U3RhY2s7CiAgICAgIGNsYXNzIFN0cmluZ1Rva2VuaXplcjsKICAgICAgY2xhc3MgU3ViTGlzdDsK
ICAgICAgY2xhc3MgVGltZVpvbmU7CiAgICAgIGNsYXNzIFRpbWVyOwogICAgICBjbGFzcyBUaW1l
ciRTY2hlZHVsZXI7CiAgICAgIGNsYXNzIFRpbWVyJFRhc2tRdWV1ZTsKICAgICAgY2xhc3MgVGlt
ZXJUYXNrOwogICAgICBjbGFzcyBUb29NYW55TGlzdGVuZXJzRXhjZXB0aW9uOwogICAgICBjbGFz
cyBUcmVlTWFwOwogICAgICBjbGFzcyBUcmVlTWFwJE5vZGU7CiAgICAgIGNsYXNzIFRyZWVNYXAk
U3ViTWFwOwogICAgICBjbGFzcyBUcmVlTWFwJFRyZWVJdGVyYXRvcjsKICAgICAgY2xhc3MgVHJl
ZU1hcCRWZXJpZnlSZXN1bHQ7CiAgICAgIGNsYXNzIFRyZWVTZXQ7CiAgICAgIGNsYXNzIFZlY3Rv
cjsKICAgICAgY2xhc3MgV2Vha0hhc2hNYXA7CiAgICAgIGNsYXNzIFdlYWtIYXNoTWFwJEVudHJ5
OwogICAgICBjbGFzcyBXZWFrSGFzaE1hcCRXZWFrQnVja2V0OwogICAgICBjbGFzcyBXZWFrSGFz
aE1hcCRXZWFrRW50cnlTZXQ7CiAgICAgIG5hbWVzcGFjZSBqYXIKICAgICAgewogICAgICAgIGNs
YXNzIEF0dHJpYnV0ZXM7CiAgICAgICAgY2xhc3MgQXR0cmlidXRlcyROYW1lOwogICAgICAgIGNs
YXNzIEphckVudHJ5OwogICAgICAgIGNsYXNzIEphckV4Y2VwdGlvbjsKICAgICAgICBjbGFzcyBK
YXJGaWxlOwogICAgICAgIGNsYXNzIEphckZpbGUkSmFyRW51bWVyYXRpb247CiAgICAgICAgY2xh
c3MgSmFySW5wdXRTdHJlYW07CiAgICAgICAgY2xhc3MgSmFyT3V0cHV0U3RyZWFtOwogICAgICAg
IGNsYXNzIE1hbmlmZXN0OwogICAgICB9OwoKICAgICAgbmFtZXNwYWNlIHppcAogICAgICB7CiAg
ICAgICAgY2xhc3MgQWRsZXIzMjsKICAgICAgICBjbGFzcyBDUkMzMjsKICAgICAgICBjbGFzcyBD
aGVja2VkSW5wdXRTdHJlYW07CiAgICAgICAgY2xhc3MgQ2hlY2tlZE91dHB1dFN0cmVhbTsKICAg
ICAgICBjbGFzcyBDaGVja3N1bTsKICAgICAgICBjbGFzcyBEYXRhRm9ybWF0RXhjZXB0aW9uOwog
ICAgICAgIGNsYXNzIERlZmxhdGVyOwogICAgICAgIGNsYXNzIERlZmxhdGVyT3V0cHV0U3RyZWFt
OwogICAgICAgIGNsYXNzIEdaSVBJbnB1dFN0cmVhbTsKICAgICAgICBjbGFzcyBHWklQT3V0cHV0
U3RyZWFtOwogICAgICAgIGNsYXNzIEluZmxhdGVyOwogICAgICAgIGNsYXNzIEluZmxhdGVySW5w
dXRTdHJlYW07CiAgICAgICAgY2xhc3MgWmlwQ29uc3RhbnRzOwogICAgICAgIGNsYXNzIFppcEVu
dHJ5OwogICAgICAgIGNsYXNzIFppcEVudW1lcmF0aW9uOwogICAgICAgIGNsYXNzIFppcEV4Y2Vw
dGlvbjsKICAgICAgICBjbGFzcyBaaXBGaWxlOwogICAgICAgIGNsYXNzIFppcElucHV0U3RyZWFt
OwogICAgICAgIGNsYXNzIFppcE91dHB1dFN0cmVhbTsKICAgICAgfTsKICAgIH07CiAgfTsKfTsK
CnR5cGVkZWYgc3RydWN0IGphdmE6Omxhbmc6Ok9iamVjdCogam9iamVjdDsKdHlwZWRlZiBjbGFz
cyBqYXZhOjpsYW5nOjpDbGFzcyogamNsYXNzOwp0eXBlZGVmIGNsYXNzIGphdmE6Omxhbmc6OlRo
cm93YWJsZSoganRocm93YWJsZTsKdHlwZWRlZiBjbGFzcyBqYXZhOjpsYW5nOjpTdHJpbmcqIGpz
dHJpbmc7CnN0cnVjdCBfSnZfSk5JRW52OwoKdHlwZWRlZiBzdHJ1Y3QgX0p2X0ZpZWxkICpqZmll
bGRJRDsKdHlwZWRlZiBzdHJ1Y3QgX0p2X01ldGhvZCAqam1ldGhvZElEOwoKZXh0ZXJuICJDIiBq
b2JqZWN0IF9Kdl9BbGxvY09iamVjdCAoamNsYXNzLCBqaW50KSBfX2F0dHJpYnV0ZV9fKChfX21h
bGxvY19fKSk7CmV4dGVybiAiQyIgam9iamVjdCBfSnZfQWxsb2NPYmplY3ROb0ZpbmFsaXplciAo
amNsYXNzLCBqaW50KSBfX2F0dHJpYnV0ZV9fKChfX21hbGxvY19fKSk7CmV4dGVybiAiQyIgam9i
amVjdCBfSnZfQWxsb2NPYmplY3ROb0luaXROb0ZpbmFsaXplciAoamNsYXNzLCBqaW50KSBfX2F0
dHJpYnV0ZV9fKChfX21hbGxvY19fKSk7CgogIGV4dGVybiAiQyIgam9iamVjdCBfSnZfQWxsb2NQ
dHJGcmVlT2JqZWN0IChqY2xhc3MsIGppbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2F0dHJpYnV0ZV9fKChfX21hbGxvY19fKSk7CgoKCgoKCgpleHRlcm4gIkMiIGpib29sZWFuIF9K
dl9Jc0luc3RhbmNlT2Yoam9iamVjdCwgamNsYXNzKTsKZXh0ZXJuICJDIiBqc3RyaW5nIF9Kdl9B
bGxvY1N0cmluZyhqc2l6ZSkgX19hdHRyaWJ1dGVfXygoX19tYWxsb2NfXykpOwpleHRlcm4gIkMi
IGpzdHJpbmcgX0p2X05ld1N0cmluZyAoY29uc3QgamNoYXIqLCBqc2l6ZSkKICBfX2F0dHJpYnV0
ZV9fKChfX21hbGxvY19fKSk7CmV4dGVybiBqaW50IF9Kdl9Gb3JtYXRJbnQgKGpjaGFyKiBidWZl
bmQsIGppbnQgbnVtKTsKZXh0ZXJuICJDIiBqY2hhciogX0p2X0dldFN0cmluZ0NoYXJzIChqc3Ry
aW5nIHN0cik7CmV4dGVybiAiQyIgdm9pZCBfSnZfTW9uaXRvckVudGVyIChqb2JqZWN0KTsKZXh0
ZXJuICJDIiB2b2lkIF9Kdl9Nb25pdG9yRXhpdCAoam9iamVjdCk7CmV4dGVybiAiQyIganN0cmlu
ZyBfSnZfTmV3U3RyaW5nTGF0aW4xKGNvbnN0IGNoYXIqLCBqc2l6ZSkKICBfX2F0dHJpYnV0ZV9f
KChfX21hbGxvY19fKSk7CmV4dGVybiAiQyIganNpemUgX0p2X0dldFN0cmluZ1VURkxlbmd0aCAo
anN0cmluZyk7CmV4dGVybiAiQyIganNpemUgX0p2X0dldFN0cmluZ1VURlJlZ2lvbiAoanN0cmlu
ZywganNpemUsIGpzaXplLCBjaGFyICopOwoKZXh0ZXJuIGppbnQgX0p2X0NyZWF0ZUphdmFWTSAo
dm9pZCogKTsKCnZvaWQKX0p2X1RocmVhZFJ1biAoamF2YTo6bGFuZzo6VGhyZWFkKiB0aHJlYWQp
OwpqaW50Cl9Kdl9BdHRhY2hDdXJyZW50VGhyZWFkKGphdmE6Omxhbmc6OlRocmVhZCogdGhyZWFk
KTsKZXh0ZXJuICJDIiBqYXZhOjpsYW5nOjpUaHJlYWQqCl9Kdl9BdHRhY2hDdXJyZW50VGhyZWFk
KGpzdHJpbmcgbmFtZSwgamF2YTo6bGFuZzo6VGhyZWFkR3JvdXAqIGdyb3VwKTsKZXh0ZXJuICJD
IiBqaW50IF9Kdl9EZXRhY2hDdXJyZW50VGhyZWFkICh2b2lkKTsKCmV4dGVybiAiQyIgdm9pZCBf
SnZfVGhyb3cgKGp0aHJvd2FibGUpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKZXh0
ZXJuICJDIiB2b2lkKiBfSnZfTWFsbG9jIChqc2l6ZSkgX19hdHRyaWJ1dGVfXygoX19tYWxsb2Nf
XykpOwpleHRlcm4gIkMiIHZvaWQqIF9Kdl9SZWFsbG9jICh2b2lkICosIGpzaXplKTsKZXh0ZXJu
ICJDIiB2b2lkIF9Kdl9GcmVlICh2b2lkKik7CmV4dGVybiB2b2lkICgqX0p2X1JlZ2lzdGVyQ2xh
c3NIb29rKSAoamNsYXNzIGNsKTsKZXh0ZXJuICJDIiB2b2lkIF9Kdl9SZWdpc3RlckNsYXNzSG9v
a0RlZmF1bHQgKGpjbGFzcyk7Cgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9Kdl91c2hvcnQgX19h
dHRyaWJ1dGVfXygoX19tb2RlX18oX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfSnZf
dWludCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX1NJX18pKSk7CgpzdHJ1Y3QgX0p2X1V0ZjhD
b25zdAp7CiAgX0p2X3VzaG9ydCBoYXNoOwogIF9Kdl91c2hvcnQgbGVuZ3RoOwogIGNoYXIgZGF0
YVsxXTsKfTsKIyAyMSAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvaW5jbHVkZS9qdm0uaCIgMgoKIyAx
ICIuLi8uLi8uLi9nY2MvbGliamF2YS9pbmNsdWRlL2phdmEtYXNzZXJ0LmgiIDEKIyAxNiAiLi4v
Li4vLi4vZ2NjL2xpYmphdmEvaW5jbHVkZS9qYXZhLWFzc2VydC5oIgp2b2lkIF9Kdl9BYm9ydCAo
Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqKQogIF9fYXR0cmli
dXRlX18gKChfX25vcmV0dXJuX18pKTsKIyAyMyAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvaW5jbHVk
ZS9qdm0uaCIgMgojIDEgImluY2x1ZGUvamF2YS10aHJlYWRzLmgiIDEKIyAyMCAiaW5jbHVkZS9q
YXZhLXRocmVhZHMuaCIKIyAxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAxIDMKIyAxOCAiL3Vz
ci9pbmNsdWRlL3B0aHJlYWQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMK
IyAyNTAgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9j
ZGVmcy5oIiAxIDMKIyAyNTEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAyNzggIi91
c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAx
IDMKIyAyNzkgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAxOSAiL3Vzci9pbmNsdWRl
L3B0aHJlYWQuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAxIDMKIyAyNiAiL3Vz
ci9pbmNsdWRlL3NjaGVkLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMK
IyAyOSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwojIDEgIi94MS9lZ2NzL2J1aWxkL2dj
Yy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyMDEgIi94MS9lZ2NzL2J1aWxkL2djYy9pbmNsdWRl
L3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsKIyAzMCAiL3Vzci9pbmNs
dWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFyOwp0
eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191
X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdV9sb25nOwoKX19leHRlbnNpb25fXyB0eXBl
ZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRfdDsKX19leHRlbnNpb25fXyB0eXBl
ZGVmIGxvbmcgbG9uZyBpbnQgX19xdWFkX3Q7CiMgNDkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz
LmgiIDMKdHlwZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBjaGFy
IF9fdWludDhfdDsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50IF9faW50MTZfdDsKdHlwZWRlZiB1
bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZfdDsKdHlwZWRlZiBzaWduZWQgaW50IF9faW50MzJf
dDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsKCl9fZXh0ZW5zaW9uX18gdHlwZWRl
ZiBzaWduZWQgbG9uZyBsb25nIGludCBfX2ludDY0X3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1
bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdWludDY0X3Q7Cgp0eXBlZGVmIF9fcXVhZF90ICpfX3Fh
ZGRyX3Q7Cgp0eXBlZGVmIF9fdV9xdWFkX3QgX19kZXZfdDsKdHlwZWRlZiBfX3VfaW50IF9fdWlk
X3Q7CnR5cGVkZWYgX191X2ludCBfX2dpZF90Owp0eXBlZGVmIF9fdV9sb25nIF9faW5vX3Q7CnR5
cGVkZWYgX191X2ludCBfX21vZGVfdDsKdHlwZWRlZiBfX3VfaW50IF9fbmxpbmtfdDsKdHlwZWRl
ZiBsb25nIGludCBfX29mZl90Owp0eXBlZGVmIF9fcXVhZF90IF9fbG9mZl90Owp0eXBlZGVmIGlu
dCBfX3BpZF90Owp0eXBlZGVmIGludCBfX3NzaXplX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19ybGlt
X3Q7CnR5cGVkZWYgX19xdWFkX3QgX19ybGltNjRfdDsKdHlwZWRlZiBfX3VfaW50IF9faWRfdDsK
CnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9fdmFsWzJdOwogIH0gX19mc2lkX3Q7CgoKdHlw
ZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVmIGNoYXIgKl9fY2FkZHJfdDsKdHlwZWRlZiBsb25n
IGludCBfX3RpbWVfdDsKdHlwZWRlZiBsb25nIGludCBfX3N3YmxrX3Q7Cgp0eXBlZGVmIGxvbmcg
aW50IF9fY2xvY2tfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fZmRfbWFzazsKIyAx
MDAgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKICB7CgoKCiAg
ICBfX2ZkX21hc2sgZmRzX2JpdHNbMTAyNCAvICg4ICogc2l6ZW9mIChfX2ZkX21hc2spKV07CgoK
CgoKICB9IF9fZmRfc2V0OwoKCnR5cGVkZWYgaW50IF9fa2V5X3Q7CgoKdHlwZWRlZiB1bnNpZ25l
ZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90
Owp0eXBlZGVmIF9fcXVhZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNi
bGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191
X2xvbmcgX19mc2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgoK
dHlwZWRlZiBfX3VfbG9uZyBfX2lubzY0X3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7
CgoKdHlwZWRlZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBp
bnQgX190X3VzY2FsYXJfdDsKCgp0eXBlZGVmIGludCBfX2ludHB0cl90OwoKCgoKIyAxICIvdXNy
L2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRz
L3B0aHJlYWR0eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCiMg
NjggIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDMKc3RydWN0IF9fc2NoZWRfcGFyYW0KICB7
CiAgICBpbnQgc2NoZWRfcHJpb3JpdHk7CiAgfTsKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRo
cmVhZHR5cGVzLmgiIDIgMwoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQg
X19zdGF0dXM7CiAgaW50IF9fc3BpbmxvY2s7Cn07CgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFk
X2Rlc2NyX3N0cnVjdCAqX3B0aHJlYWRfZGVzY3I7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGlu
dCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3NjaGVkX3Bh
cmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2NvcGU7CiAg
c2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAqX19zdGFj
a2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCgp0eXBlZGVm
IHN0cnVjdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fY19sb2NrOwogIF9wdGhyZWFk
X2Rlc2NyIF9fY193YWl0aW5nOwp9IHB0aHJlYWRfY29uZF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7
CiAgaW50IF9fZHVtbXk7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQg
aW50IHB0aHJlYWRfa2V5X3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX21fcmVzZXJ2
ZWQ7CiAgaW50IF9fbV9jb3VudDsKICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7CiAgaW50IF9f
bV9raW5kOwogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX21fbG9jazsKfSBwdGhyZWFkX211
dGV4X3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tdXRleGtpbmQ7Cn0gcHRocmVhZF9t
dXRleGF0dHJfdDsKCgoKdHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7CgoKCgp0eXBlZGVmIHN0
cnVjdCBfcHRocmVhZF9yd2xvY2tfdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fcndf
bG9jazsKICBpbnQgX19yd19yZWFkZXJzOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVyOwog
IF9wdGhyZWFkX2Rlc2NyIF9fcndfcmVhZF93YWl0aW5nOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndf
d3JpdGVfd2FpdGluZzsKICBpbnQgX19yd19raW5kOwogIGludCBfX3J3X3BzaGFyZWQ7Cn0gcHRo
cmVhZF9yd2xvY2tfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2xvY2traW5kOwogIGlu
dCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7CgoKCgp0eXBlZGVmIHVuc2lnbmVk
IGxvbmcgaW50IHB0aHJlYWRfdDsKIyAxNTEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIg
MwojIDI3ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvdGlt
ZS5oIiAxIDMKIyA4MyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXNwZWMKICB7
CiAgICBsb25nIGludCB0dl9zZWM7CiAgICBsb25nIGludCB0dl9uc2VjOwogIH07CiMgMzAgIi91
c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgi
IDEgMwojIDQ3ICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAzCnN0cnVjdCBzY2hlZF9wYXJh
bQogIHsKICAgIGludCBzY2hlZF9wcmlvcml0eTsKICB9OwoKZXh0ZXJuICJDIiB7CgoKCmV4dGVy
biBpbnQgY2xvbmUgKGludCAoKl9fZm4pICh2b2lkICpfX2FyZyksIHZvaWQgKl9fY2hpbGRfc3Rh
Y2ssIGludCBfX2ZsYWdzLCB2b2lkICpfX2FyZykgdGhyb3cgKCk7CgoKCn0KIyAzMyAiL3Vzci9p
bmNsdWRlL3NjaGVkLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBfX3NjaGVkX3Nl
dHBhcmFtIChfX3BpZF90IF9fcGlkLCBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJh
bSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNjaGVkX3NldHBhcmFtIChfX3BpZF90IF9fcGlkLCBf
X2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgX19zY2hlZF9nZXRwYXJhbSAoX19waWRfdCBfX3BpZCwgc3RydWN0IHNjaGVkX3BhcmFtICpf
X3BhcmFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBzY2hlZF9nZXRwYXJhbSAoX19waWRfdCBfX3Bp
ZCwgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9f
c2NoZWRfc2V0c2NoZWR1bGVyIChfX3BpZF90IF9fcGlkLCBpbnQgX19wb2xpY3ksIF9fY29uc3Qg
c3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2NoZWRf
c2V0c2NoZWR1bGVyIChfX3BpZF90IF9fcGlkLCBpbnQgX19wb2xpY3ksIF9fY29uc3Qgc3RydWN0
IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX3NjaGVkX2dl
dHNjaGVkdWxlciAoX19waWRfdCBfX3BpZCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgc2NoZWRfZ2V0
c2NoZWR1bGVyIChfX3BpZF90IF9fcGlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fc2NoZWRf
eWllbGQgKHZvaWQpIHRocm93ICgpOwpleHRlcm4gaW50IHNjaGVkX3lpZWxkICh2b2lkKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IF9fc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAoaW50IF9fYWxnb3Jp
dGhtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IChpbnQgX19h
bGdvcml0aG0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgX19zY2hlZF9nZXRfcHJpb3JpdHlfbWlu
IChpbnQgX19hbGdvcml0aG0pIHRocm93ICgpOwpleHRlcm4gaW50IHNjaGVkX2dldF9wcmlvcml0
eV9taW4gKGludCBfX2FsZ29yaXRobSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3NjaGVkX3Jy
X2dldF9pbnRlcnZhbCAoX19waWRfdCBfX3BpZCwgc3RydWN0IHRpbWVzcGVjICpfX3QpIHRocm93
ICgpOwpleHRlcm4gaW50IHNjaGVkX3JyX2dldF9pbnRlcnZhbCAoX19waWRfdCBfX3BpZCwgc3Ry
dWN0IHRpbWVzcGVjICpfX3QpIHRocm93ICgpOwoKfQojIDIxICIvdXNyL2luY2x1ZGUvcHRocmVh
ZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRl
L3RpbWUuaCIgMwpleHRlcm4gIkMiIHsKCgoKCgoKCiMgMSAiL3gxL2VnY3MvYnVpbGQvZ2NjL2lu
Y2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCgoKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvdGltZS5o
IiAyIDMKIyA2MCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9fY2xvY2tfdCBjbG9j
a190OwojIDcxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5cGVkZWYgX190aW1lX3QgdGltZV90
OwojIDk1ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnN0cnVjdCB0bQp7CiAgaW50IHRtX3NlYzsK
ICBpbnQgdG1fbWluOwogIGludCB0bV9ob3VyOwogIGludCB0bV9tZGF5OwogIGludCB0bV9tb247
CiAgaW50IHRtX3llYXI7CiAgaW50IHRtX3dkYXk7CiAgaW50IHRtX3lkYXk7CiAgaW50IHRtX2lz
ZHN0OwoKCiAgbG9uZyBpbnQgdG1fZ210b2ZmOwogIF9fY29uc3QgY2hhciAqdG1fem9uZTsKCgoK
Cn07CgoKCgpleHRlcm4gY2xvY2tfdCBjbG9jayAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHRp
bWVfdCB0aW1lICh0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZGlm
ZnRpbWUgKHRpbWVfdCBfX3RpbWUxLCB0aW1lX3QgX190aW1lMCkgdGhyb3cgKCkKICAgICBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIHRpbWVfdCBta3RpbWUgKHN0cnVjdCB0
bSAqX190cCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHNpemVfdCBzdHJmdGltZSAoY2hhciAqX19y
ZXN0cmljdCBfX3MsIHNpemVfdCBfX21heHNpemUsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2Zvcm1hdCwgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoK
CgoKCmV4dGVybiBjaGFyICpzdHJwdGltZSAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hh
ciAqX19mbXQsIHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBzdHJ1Y3Qg
dG0gKmdtdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgpleHRlcm4g
c3RydWN0IHRtICpsb2NhbHRpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBzdHJ1Y3QgdG0gKl9fZ210aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3Ry
aWN0IF9fdGltZXIsIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCmV4dGVy
biBzdHJ1Y3QgdG0gKmdtdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVy
LCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gc3RydWN0
IHRtICpsb2NhbHRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwgc3Ry
dWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICphc2N0
aW1lIChfX2NvbnN0IHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKmN0
aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFy
ICphc2N0aW1lX3IgKF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHAsIGNoYXIgKl9f
cmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqY3RpbWVfciAoX19jb25z
dCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKl9fdHpuYW1lWzJdOwpleHRlcm4gaW50IF9fZGF5bGln
aHQ7CmV4dGVybiBsb25nIGludCBfX3RpbWV6b25lOwoKCgoKZXh0ZXJuIGNoYXIgKnR6bmFtZVsy
XTsKCgoKZXh0ZXJuIHZvaWQgdHpzZXQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGRh
eWxpZ2h0OwpleHRlcm4gbG9uZyBpbnQgdGltZXpvbmU7CgoKCgoKZXh0ZXJuIGludCBzdGltZSAo
X19jb25zdCB0aW1lX3QgKl9fd2hlbikgdGhyb3cgKCk7CiMgMjI4ICIvdXNyL2luY2x1ZGUvdGlt
ZS5oIiAzCmV4dGVybiB0aW1lX3QgdGltZWdtIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoK
CmV4dGVybiB0aW1lX3QgdGltZWxvY2FsIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgZHlzaXplIChpbnQgX195ZWFyKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IG5h
bm9zbGVlcCAoX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxdWVzdGVkX3RpbWUsIHN0cnVj
dCB0aW1lc3BlYyAqX19yZW1haW5pbmcpIHRocm93ICgpOwojIDI1NyAiL3Vzci9pbmNsdWRlL3Rp
bWUuaCIgMwpleHRlcm4gaW50IGdldGRhdGVfZXJyOwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdl
dGRhdGUgKF9fY29uc3QgY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwojIDI3MiAiL3Vzci9pbmNs
dWRlL3RpbWUuaCIgMwpleHRlcm4gaW50IGdldGRhdGVfciAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fc3RyaW5nLCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX19yZXNidWZwKSB0aHJvdyAoKTsK
CgoKCn0KIyAyMiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1
ZGUvc2lnbmFsLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKZXh0ZXJuICJD
IiB7CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMKIyAyMyAiL3Vzci9pbmNs
dWRlL2JpdHMvc2lnc2V0LmgiIDMKdHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7CgoKCgp0eXBl
ZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdmFsWygxMDI0IC8gKDggKiBz
aXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9fc2lnc2V0X3Q7CiMgMzQgIi91c3Iv
aW5jbHVkZS9zaWduYWwuaCIgMiAzCiMgNDkgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwp0eXBl
ZGVmIF9fc2lnc2V0X3Qgc2lnc2V0X3Q7CiMgMzYyICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMK
fQojIDI1ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy9wdGhyZWFkdHlwZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwoK
CmV4dGVybiAiQyIgewojIDQ5ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmVudW0KewogIFBU
SFJFQURfQ1JFQVRFX0pPSU5BQkxFLAoKICBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRAoKfTsKCmVu
dW0KewogIFBUSFJFQURfSU5IRVJJVF9TQ0hFRCwKCiAgUFRIUkVBRF9FWFBMSUNJVF9TQ0hFRAoK
fTsKCmVudW0KewogIFBUSFJFQURfU0NPUEVfU1lTVEVNLAoKICBQVEhSRUFEX1NDT1BFX1BST0NF
U1MKCn07CgplbnVtCnsKICBQVEhSRUFEX01VVEVYX0ZBU1RfTlAsCiAgUFRIUkVBRF9NVVRFWF9S
RUNVUlNJVkVfTlAsCiAgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLX05QCgogICwKICBQVEhSRUFE
X01VVEVYX05PUk1BTCA9IFBUSFJFQURfTVVURVhfRkFTVF9OUCwKICBQVEhSRUFEX01VVEVYX1JF
Q1VSU0lWRSA9IFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QLAogIFBUSFJFQURfTVVURVhfRVJS
T1JDSEVDSyA9IFBUSFJFQURfTVVURVhfRVJST1JDSEVDS19OUCwKICBQVEhSRUFEX01VVEVYX0RF
RkFVTFQgPSBQVEhSRUFEX01VVEVYX05PUk1BTAoKfTsKCmVudW0KewogIFBUSFJFQURfUFJPQ0VT
U19QUklWQVRFLAoKICBQVEhSRUFEX1BST0NFU1NfU0hBUkVECgp9OwoKCmVudW0KewogIFBUSFJF
QURfUldMT0NLX1BSRUZFUl9SRUFERVJfTlAsCiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRF
Ul9OUCwKICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05PTlJFQ1VSU0lWRV9OUCwKICBQ
VEhSRUFEX1JXTE9DS19ERUZBVUxUX05QID0gUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRFUl9O
UAp9OwoKCgoKCgpzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIKewogIHZvaWQgKCpfX3Jv
dXRpbmUpICh2b2lkICopOwogIHZvaWQgKl9fYXJnOwogIGludCBfX2NhbmNlbHR5cGU7CiAgc3Ry
dWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX3ByZXY7Cn07CgoKCmVudW0KewogIFBUSFJF
QURfQ0FOQ0VMX0VOQUJMRSwKCiAgUFRIUkVBRF9DQU5DRUxfRElTQUJMRQoKfTsKZW51bQp7CiAg
UFRIUkVBRF9DQU5DRUxfREVGRVJSRUQsCgogIFBUSFJFQURfQ0FOQ0VMX0FTWU5DSFJPTk9VUwoK
fTsKIyAxNDEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX2Ny
ZWF0ZSAocHRocmVhZF90ICpfX3RocmVhZCwgX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRy
LCB2b2lkICooKl9fc3RhcnRfcm91dGluZSkgKHZvaWQgKiksIHZvaWQgKl9fYXJnKSB0aHJvdyAo
KTsKCgoKCgpleHRlcm4gcHRocmVhZF90IHB0aHJlYWRfc2VsZiAodm9pZCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBwdGhyZWFkX2VxdWFsIChwdGhyZWFkX3QgX190aHJlYWQxLCBwdGhyZWFkX3Qg
X190aHJlYWQyKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQgKHZvaWQgKl9f
cmV0dmFsKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRl
cm4gaW50IHB0aHJlYWRfam9pbiAocHRocmVhZF90IF9fdGgsIHZvaWQgKipfX3RocmVhZF9yZXR1
cm4pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9kZXRhY2ggKHB0aHJlYWRfdCBf
X3RoKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2luaXQgKHB0aHJl
YWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2Rl
c3Ryb3kgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9hdHRyX3NldGRldGFjaHN0YXRlIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgX19k
ZXRhY2hzdGF0ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGRldGFj
aHN0YXRlIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCAqX19kZXRhY2hzdGF0
ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcGFyYW0gKHB0
aHJlYWRfYXR0cl90ICpfX2F0dHIsIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFt
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwYXJhbSAoX19j
b25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0p
IHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGljeSAocHRo
cmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9fcG9saWN5KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwb2xpY3kgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9f
YXR0ciwgaW50ICpfX3BvbGljeSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy
X3NldGluaGVyaXRzY2hlZCAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9faW5oZXJpdCkg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGluaGVyaXRzY2hlZCAoX19j
b25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgKl9faW5oZXJpdCkgdGhyb3cgKCk7CgoK
CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjb3BlIChwdGhyZWFkX2F0dHJfdCAqX19hdHRy
LCBpbnQgX19zY29wZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2Nv
cGUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50ICpfX3Njb3BlKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGd1YXJkc2l6ZSAocHRocmVhZF9hdHRy
X3QgKl9fYXR0ciwgc2l6ZV90IF9fZ3VhcmRzaXplKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBw
dGhyZWFkX2F0dHJfZ2V0Z3VhcmRzaXplIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIs
IHNpemVfdCAqX19ndWFyZHNpemUpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFk
X2F0dHJfc2V0c3RhY2thZGRyIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCB2b2lkICpfX3N0YWNr
YWRkcikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrYWRkciAo
X19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCB2b2lkICoqX19zdGFja2FkZHIpIHRocm93
ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSAocHRocmVhZF9h
dHRyX3QgKl9fYXR0ciwgc2l6ZV90IF9fc3RhY2tzaXplKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2tzaXplIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0
dHIsIHNpemVfdCAqX19zdGFja3NpemUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJl
YWRfc2V0c2NoZWRwYXJhbSAocHRocmVhZF90IF9fdGFyZ2V0X3RocmVhZCwgaW50IF9fcG9saWN5
LCBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKCmV4dGVy
biBpbnQgcHRocmVhZF9nZXRzY2hlZHBhcmFtIChwdGhyZWFkX3QgX190YXJnZXRfdGhyZWFkLCBp
bnQgKl9fcG9saWN5LCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCgoK
CmV4dGVybiBpbnQgcHRocmVhZF9nZXRjb25jdXJyZW5jeSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBwdGhyZWFkX3NldGNvbmN1cnJlbmN5IChpbnQgX19sZXZlbCkgdGhyb3cgKCk7CgoK
CgoKCmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4X2luaXQgKHB0aHJlYWRfbXV0ZXhfdCAqX19t
dXRleCwgX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICpfX211dGV4X2F0dHIpIHRocm93ICgp
OwoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2luaXQgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRl
eCwgX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICpfX211dGV4X2F0dHIpIHRocm93ICgpOwoK
CgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF9kZXN0cm95IChwdGhyZWFkX211dGV4X3QgKl9f
bXV0ZXgpIHRocm93ICgpOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAocHRocmVh
ZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRl
eF90cnlsb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwpleHRlcm4gaW50
IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF9sb2NrIChwdGhyZWFkX211dGV4X3QgKl9f
bXV0ZXgpIHRocm93ICgpOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfbG9jayAocHRocmVhZF9t
dXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF91
bmxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHRo
cmVhZF9tdXRleF91bmxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoK
CgoKCmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4YXR0cl9pbml0IChwdGhyZWFkX211dGV4YXR0
cl90ICpfX2F0dHIpIHRocm93ICgpOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQg
KHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3B0
aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgdGhy
b3cgKCk7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSAocHRocmVhZF9tdXRl
eGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRl
eGF0dHJfc2V0dHlwZSAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLCBpbnQgX19raW5kKSB0
aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSAocHRocmVhZF9t
dXRleGF0dHJfdCAqX19hdHRyLCBpbnQgX19raW5kKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBw
dGhyZWFkX211dGV4YXR0cl9nZXR0eXBlIChfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9f
YXR0ciwgaW50ICpfX2tpbmQpIHRocm93ICgpOwojIDMyMyAiL3Vzci9pbmNsdWRlL3B0aHJlYWQu
aCIgMwpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9pbml0IChwdGhyZWFkX2NvbmRfdCAqX19jb25k
LCBfX2NvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCAqX19jb25kX2F0dHIpIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IHB0aHJlYWRfY29uZF9kZXN0cm95IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9zaWduYWwgKHB0aHJlYWRfY29uZF90
ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCAo
cHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9j
b25kX3dhaXQgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQsIHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRl
eCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdCAocHRo
cmVhZF9jb25kX3QgKl9fY29uZCwgcHRocmVhZF9tdXRleF90ICpfX211dGV4LCBfX2NvbnN0IHN0
cnVjdCB0aW1lc3BlYyAqX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhy
ZWFkX2NvbmRhdHRyX2luaXQgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfZGVzdHJveSAocHRocmVhZF9jb25kYXR0cl90
ICpfX2F0dHIpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19pbml0
IChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaywgX19jb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJf
dCAqX19hdHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19kZXN0cm95
IChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhy
ZWFkX3J3bG9ja19yZGxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RyeXJkbG9jayAocHRocmVhZF9yd2xvY2tfdCAq
X19yd2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfd3Jsb2NrIChw
dGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk
X3J3bG9ja190cnl3cmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3VubG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19y
d2xvY2spIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2luaXQg
KHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9yd2xvY2thdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIpIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2dldHBzaGFyZWQgKF9fY29u
c3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwgaW50ICpfX3BzaGFyZWQpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9y
d2xvY2thdHRyX3QgKl9fYXR0ciwgaW50IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgcHRocmVhZF9yd2xvY2thdHRyX2dldGtpbmRfbnAgKF9fY29uc3QgcHRocmVhZF9yd2xvY2th
dHRyX3QgKl9fYXR0ciwgaW50ICpfX3ByZWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhy
ZWFkX3J3bG9ja2F0dHJfc2V0a2luZF9ucCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwg
aW50IF9fcHJlZikgdGhyb3cgKCk7CiMgNDIwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4
dGVybiBpbnQgX19wdGhyZWFkX2tleV9jcmVhdGUgKHB0aHJlYWRfa2V5X3QgKl9fa2V5LCB2b2lk
ICgqX19kZXN0cl9mdW5jdGlvbikgKHZvaWQgKikpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhy
ZWFkX2tleV9jcmVhdGUgKHB0aHJlYWRfa2V5X3QgKl9fa2V5LCB2b2lkICgqX19kZXN0cl9mdW5j
dGlvbikgKHZvaWQgKikpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2RlbGV0
ZSAocHRocmVhZF9rZXlfdCBfX2tleSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3B0aHJlYWRf
c2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXksIF9fY29uc3Qgdm9pZCAqX19wb2ludGVy
KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRzcGVjaWZpYyAocHRocmVhZF9rZXlf
dCBfX2tleSwgX19jb25zdCB2b2lkICpfX3BvaW50ZXIpIHRocm93ICgpOwoKCgpleHRlcm4gdm9p
ZCAqX19wdGhyZWFkX2dldHNwZWNpZmljIChwdGhyZWFkX2tleV90IF9fa2V5KSB0aHJvdyAoKTsK
ZXh0ZXJuIHZvaWQgKnB0aHJlYWRfZ2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXkpIHRo
cm93ICgpOwojIDQ0NSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IF9fcHRo
cmVhZF9vbmNlIChwdGhyZWFkX29uY2VfdCAqX19vbmNlX2NvbnRyb2wsIHZvaWQgKCpfX2luaXRf
cm91dGluZSkgKHZvaWQpKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9vbmNlIChwdGhy
ZWFkX29uY2VfdCAqX19vbmNlX2NvbnRyb2wsIHZvaWQgKCpfX2luaXRfcm91dGluZSkgKHZvaWQp
KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWxzdGF0ZSAoaW50
IF9fc3RhdGUsIGludCAqX19vbGRzdGF0ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVh
ZF9zZXRjYW5jZWx0eXBlIChpbnQgX190eXBlLCBpbnQgKl9fb2xkdHlwZSkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBwdGhyZWFkX2NhbmNlbCAocHRocmVhZF90IF9fdGhyZWFkKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiB2b2lkIHB0aHJlYWRfdGVzdGNhbmNlbCAodm9pZCkgdGhyb3cgKCk7CiMgNDgx
ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBf
cHVzaCAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwgdm9pZCAoKl9f
cm91dGluZSkgKHZvaWQgKiksIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKIyA0OTEgIi91c3IvaW5j
bHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3AgKHN0cnVj
dCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsIGludCBfX2V4ZWN1dGUpIHRocm93
ICgpOwojIDUwMiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVh
ZF9jbGVhbnVwX3B1c2hfZGVmZXIgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19i
dWZmZXIsIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopLCB2b2lkICpfX2FyZykgdGhyb3cgKCk7
CiMgNTEzICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiB2b2lkIF9wdGhyZWFkX2Ns
ZWFudXBfcG9wX3Jlc3RvcmUgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZm
ZXIsIGludCBfX2V4ZWN1dGUpIHRocm93ICgpOwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9z
aWd0aHJlYWQuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3RocmVhZC5oIiAzCmV4
dGVybiBpbnQgcHRocmVhZF9zaWdtYXNrIChpbnQgX19ob3csIF9fY29uc3QgX19zaWdzZXRfdCAq
X19uZXdtYXNrLCBfX3NpZ3NldF90ICpfX29sZG1hc2spIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IHB0aHJlYWRfa2lsbCAocHRocmVhZF90IF9fdGhyZWFkLCBpbnQgX19zaWdubykgdGhyb3cgKCk7
CiMgNTE5ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyA1MzQgIi91c3IvaW5jbHVkZS9w
dGhyZWFkLmgiIDMKZXh0ZXJuIGludCBfX3B0aHJlYWRfYXRmb3JrICh2b2lkICgqX19wcmVwYXJl
KSAodm9pZCksIHZvaWQgKCpfX3BhcmVudCkgKHZvaWQpLCB2b2lkICgqX19jaGlsZCkgKHZvaWQp
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXRmb3JrICh2b2lkICgqX19wcmVwYXJl
KSAodm9pZCksIHZvaWQgKCpfX3BhcmVudCkgKHZvaWQpLCB2b2lkICgqX19jaGlsZCkgKHZvaWQp
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgcHRocmVhZF9raWxsX290aGVyX3RocmVhZHNf
bnAgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBfX3B0aHJlYWRfaW5pdGlhbGl6ZSAo
dm9pZCkgdGhyb3cgKCk7Cgp9CiMgMjEgImluY2x1ZGUvamF2YS10aHJlYWRzLmgiIDIKCgoKCgoK
dHlwZWRlZiBzdHJ1Y3QgX0p2X1RocmVhZF90CnsKCiAgaW50IGZsYWdzOwoKCiAgcHRocmVhZF90
IHRocmVhZDsKCgogIGphdmE6Omxhbmc6OlRocmVhZCAqdGhyZWFkX29iajsKCgoKICBwdGhyZWFk
X2NvbmRfdCB3YWl0X2NvbmQ7CiAgcHRocmVhZF9tdXRleF90IHdhaXRfbXV0ZXg7CgoKICBfSnZf
VGhyZWFkX3QgKm5leHQ7Cgp9IF9Kdl9UaHJlYWRfdDsKCnR5cGVkZWYgdm9pZCBfSnZfVGhyZWFk
U3RhcnRGdW5jIChqYXZhOjpsYW5nOjpUaHJlYWQgKik7CgoKCnR5cGVkZWYgc3RydWN0CnsKCiAg
X0p2X1RocmVhZF90ICpmaXJzdDsKCn0gX0p2X0NvbmRpdGlvblZhcmlhYmxlX3Q7Cgp0eXBlZGVm
IHN0cnVjdAp7CgoKCgogIHB0aHJlYWRfbXV0ZXhfdCBtdXRleDsKCgogIHB0aHJlYWRfdCBvd25l
cjsKCgogIGludCBjb3VudDsKfSBfSnZfTXV0ZXhfdDsKCgoKCgoKaW5saW5lIGludApfSnZfUHRo
cmVhZENoZWNrTW9uaXRvciAoX0p2X011dGV4X3QgKm11KQp7CiAgcHRocmVhZF90IHNlbGYgPSBw
dGhyZWFkX3NlbGYoKTsKICBpZiAobXUtPm93bmVyID09IHNlbGYpCiAgICByZXR1cm4gMDsKICBl
bHNlIHJldHVybiAxOwp9CgoKCgoKaW50IF9Kdl9Db25kV2FpdCAoX0p2X0NvbmRpdGlvblZhcmlh
YmxlX3QgKmN2LCBfSnZfTXV0ZXhfdCAqbXUsCiAgICAgICAgICAgICAgICAgIGpsb25nIG1pbGxp
cywgamludCBuYW5vcyk7CgppbnQgX0p2X0NvbmROb3RpZnkgKF9Kdl9Db25kaXRpb25WYXJpYWJs
ZV90ICpjdiwgX0p2X011dGV4X3QgKm11KTsKCmludCBfSnZfQ29uZE5vdGlmeUFsbCAoX0p2X0Nv
bmRpdGlvblZhcmlhYmxlX3QgKmN2LCBfSnZfTXV0ZXhfdCAqbXUpOwoKaW5saW5lIHZvaWQKX0p2
X0NvbmRJbml0IChfSnZfQ29uZGl0aW9uVmFyaWFibGVfdCAqY3YpCnsKICBjdi0+Zmlyc3QgPSAw
Owp9CiMgMTEzICJpbmNsdWRlL2phdmEtdGhyZWFkcy5oIgppbmxpbmUgdm9pZApfSnZfTXV0ZXhJ
bml0IChfSnZfTXV0ZXhfdCAqbXUpCnsKCgoKCgoKICBwdGhyZWFkX211dGV4X2luaXQgKCZtdS0+
bXV0ZXgsIDApOwoKCiAgbXUtPmNvdW50ID0gMDsKICBtdS0+b3duZXIgPSAwOwp9CgppbmxpbmUg
aW50Cl9Kdl9NdXRleExvY2sgKF9Kdl9NdXRleF90ICptdSkKewogIHB0aHJlYWRfdCBzZWxmID0g
cHRocmVhZF9zZWxmICgpOwogIGlmIChtdS0+b3duZXIgPT0gc2VsZikKICAgIHsKICAgICAgbXUt
PmNvdW50Kys7CiAgICB9CiAgZWxzZQogICAgewojIDE0NyAiaW5jbHVkZS9qYXZhLXRocmVhZHMu
aCIKICAgICAgICBwdGhyZWFkX211dGV4X2xvY2sgKCZtdS0+bXV0ZXgpOwoKICAgICAgbXUtPmNv
dW50ID0gMTsKICAgICAgbXUtPm93bmVyID0gc2VsZjsKICAgIH0KICByZXR1cm4gMDsKfQoKaW5s
aW5lIGludApfSnZfTXV0ZXhVbmxvY2sgKF9Kdl9NdXRleF90ICptdSkKewogIGlmIChfSnZfUHRo
cmVhZENoZWNrTW9uaXRvciAobXUpKQogICAgewoKCgoKICAgICAgcmV0dXJuIDE7CiAgICB9Cgog
IG11LT5jb3VudC0tOwoKICBpZiAobXUtPmNvdW50ID09IDApCiAgICB7CiAgICAgIG11LT5vd25l
ciA9IDA7CiMgMTgwICJpbmNsdWRlL2phdmEtdGhyZWFkcy5oIgogICAgICAgIHB0aHJlYWRfbXV0
ZXhfdW5sb2NrICgmbXUtPm11dGV4KTsKCiAgICB9CiAgcmV0dXJuIDA7Cn0KIyAyMDUgImluY2x1
ZGUvamF2YS10aHJlYWRzLmgiCnZvaWQgX0p2X0luaXRUaHJlYWRzICh2b2lkKTsKCl9Kdl9UaHJl
YWRfdCAqX0p2X1RocmVhZEluaXREYXRhIChqYXZhOjpsYW5nOjpUaHJlYWQgKnRocmVhZCk7CnZv
aWQgX0p2X1RocmVhZERlc3Ryb3lEYXRhIChfSnZfVGhyZWFkX3QgKmRhdGEpOwoKaW5saW5lIGph
dmE6Omxhbmc6OlRocmVhZCAqCl9Kdl9UaHJlYWRDdXJyZW50ICh2b2lkKQp7CiAgZXh0ZXJuIHB0
aHJlYWRfa2V5X3QgX0p2X1RocmVhZEtleTsKICByZXR1cm4gKGphdmE6Omxhbmc6OlRocmVhZCAq
KSBwdGhyZWFkX2dldHNwZWNpZmljIChfSnZfVGhyZWFkS2V5KTsKfQojIDI3MyAiaW5jbHVkZS9q
YXZhLXRocmVhZHMuaCIKdHlwZWRlZiBwdGhyZWFkX3QgX0p2X1RocmVhZElkX3Q7CiMgMzA0ICJp
bmNsdWRlL2phdmEtdGhyZWFkcy5oIgpleHRlcm4gdm9sYXRpbGUKc3RydWN0IHNlbGZfY2FjaGVf
ZW50cnkgewogIHNpemVfdCBoaWdoX3NwX2JpdHM7CiAgcHRocmVhZF90IHNlbGY7Cn0gX0p2X3Nl
bGZfY2FjaGVbXTsKCnZvaWQgX0p2X1NlbGZfQ2FjaGVfSW5pdCgpOwoKX0p2X1RocmVhZElkX3QK
X0p2X1RocmVhZFNlbGZfb3V0X29mX2xpbmUodm9sYXRpbGUgc2VsZl9jYWNoZV9lbnRyeSAqc2Nl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaGlnaF9zcF9iaXRzKTsKCmlubGlu
ZSBfSnZfVGhyZWFkSWRfdApfSnZfVGhyZWFkU2VsZiAodm9pZCkKewogIGludCBkdW1teTsKICBz
aXplX3Qgc3AgPSAoc2l6ZV90KSgmZHVtbXkpOwogIHVuc2lnbmVkIGggPSAoKCh1bnNpZ25lZCBs
b25nKShzcCkgPj4gMTkpICYgKDEwMjQgLTEpKTsKICB2b2xhdGlsZSBzZWxmX2NhY2hlX2VudHJ5
ICpzY2UgPSBfSnZfc2VsZl9jYWNoZSArIGg7CiAgcHRocmVhZF90IGNhbmRpZGF0ZV9zZWxmID0g
c2NlIC0+IHNlbGY7CgogIGlmIChzY2UgLT4gaGlnaF9zcF9iaXRzID09IHNwID4+IDEyKQogICAg
ewoKCgoKICAgICAgcmV0dXJuIGNhbmRpZGF0ZV9zZWxmOwogICAgfQogIGVsc2UKICAgIHJldHVy
biBfSnZfVGhyZWFkU2VsZl9vdXRfb2ZfbGluZShzY2UsIHNwID4+IDEyKTsKfQojIDM1NSAiaW5j
bHVkZS9qYXZhLXRocmVhZHMuaCIKaW5saW5lIF9Kdl9UaHJlYWRfdCAqCl9Kdl9UaHJlYWRDdXJy
ZW50RGF0YSAodm9pZCkKewogIGV4dGVybiBwdGhyZWFkX2tleV90IF9Kdl9UaHJlYWREYXRhS2V5
OwogIHJldHVybiAoX0p2X1RocmVhZF90ICopIHB0aHJlYWRfZ2V0c3BlY2lmaWMgKF9Kdl9UaHJl
YWREYXRhS2V5KTsKfQoKaW5saW5lIHZvaWQKX0p2X1RocmVhZFlpZWxkICh2b2lkKQp7CgogIHNj
aGVkX3lpZWxkICgpOwoKfQoKdm9pZCBfSnZfVGhyZWFkUmVnaXN0ZXIgKF9Kdl9UaHJlYWRfdCAq
ZGF0YSk7CnZvaWQgX0p2X1RocmVhZFVuUmVnaXN0ZXIgKCk7Cgp2b2lkIF9Kdl9UaHJlYWRTZXRQ
cmlvcml0eSAoX0p2X1RocmVhZF90ICpkYXRhLCBqaW50IHByaW8pOwoKdm9pZCBfSnZfVGhyZWFk
U3RhcnQgKGphdmE6Omxhbmc6OlRocmVhZCAqdGhyZWFkLCBfSnZfVGhyZWFkX3QgKmRhdGEsCiAg
ICAgICAgICAgICAgICAgICAgICBfSnZfVGhyZWFkU3RhcnRGdW5jICptZXRoKTsKCnZvaWQgX0p2
X1RocmVhZFdhaXQgKHZvaWQpOwoKdm9pZCBfSnZfVGhyZWFkSW50ZXJydXB0IChfSnZfVGhyZWFk
X3QgKmRhdGEpOwojIDI0ICIuLi8uLi8uLi9nY2MvbGliamF2YS9pbmNsdWRlL2p2bS5oIiAyCgoj
IDEgImluY2x1ZGUvamF2YS1nYy5oIiAxCiMgMTggImluY2x1ZGUvamF2YS1nYy5oIgpleHRlcm4g
IkMiCnsKICB2b2lkICpfSnZfTWFya09iaiAodm9pZCAqLCB2b2lkICosIHZvaWQgKiwgdm9pZCAq
KTsKICB2b2lkICpfSnZfTWFya0FycmF5ICh2b2lkICosIHZvaWQgKiwgdm9pZCAqLCB2b2lkICop
Owp9OwoKCgojIDEgIi4uLy4uLy4uL2djYy9saWJqYXZhL2phdmEvbGFuZy9DbGFzcy5oIiAxCiMg
MTUgIi4uLy4uLy4uL2djYy9saWJqYXZhL2phdmEvbGFuZy9DbGFzcy5oIgojcHJhZ21hIGludGVy
ZmFjZQoKIyAxICIuLi8uLi8uLi9nY2MvbGliamF2YS9qYXZhL2xhbmcvT2JqZWN0LmgiIDEKIyAx
NCAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvamF2YS9sYW5nL09iamVjdC5oIgojcHJhZ21hIGludGVy
ZmFjZQoKCgoKCnN0cnVjdCBfSnZPYmplY3RQcmVmaXgKewpwcm90ZWN0ZWQ6CgogIHZpcnR1YWwg
dm9pZCBuYWNkXzEgKHZvaWQpIHt9OwoKCiAgICB2aXJ0dWFsIHZvaWQgbmFjZF8yICh2b2lkKSB7
fTsKCn07CgpjbGFzcyBqYXZhOjpsYW5nOjpPYmplY3QgOiBwdWJsaWMgX0p2T2JqZWN0UHJlZml4
CnsKcHJvdGVjdGVkOgogIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZSAodm9pZCk7CnB1YmxpYzoKCiAg
amNsYXNzIGdldENsYXNzICh2b2lkKTsKICB2aXJ0dWFsIGppbnQgaGFzaENvZGUgKHZvaWQpOwog
IHZvaWQgbm90aWZ5ICh2b2lkKTsKICB2b2lkIG5vdGlmeUFsbCAodm9pZCk7CiAgdm9pZCB3YWl0
IChqbG9uZyB0aW1lb3V0LCBqaW50IG5hbm9zKTsKICB2aXJ0dWFsIGpib29sZWFuIGVxdWFscyAo
am9iamVjdCBvYmopOwogIE9iamVjdCAodm9pZCk7CiAgdmlydHVhbCBqc3RyaW5nIHRvU3RyaW5n
ICh2b2lkKTsKICB2b2lkIHdhaXQgKHZvaWQpOwogIHZvaWQgd2FpdCAoamxvbmcgdGltZW91dCk7
CgogIGZyaWVuZCB2b2lkIF9Kdl9Nb25pdG9yRW50ZXIgKGpvYmplY3Qgb2JqKTsKICBmcmllbmQg
dm9pZCBfSnZfTW9uaXRvckV4aXQgKGpvYmplY3Qgb2JqKTsKICBmcmllbmQgdm9pZCBfSnZfSW5p
dGlhbGl6ZVN5bmNNdXRleCAodm9pZCk7CiAgZnJpZW5kIHZvaWQgX0p2X0ZpbmFsaXplT2JqZWN0
IChqb2JqZWN0IG9iaik7CgoKICBmcmllbmQgdm9pZCAqX0p2X01hcmtPYmogKHZvaWQgKiwgdm9p
ZCAqLCB2b2lkICosIHZvaWQgKik7CgoKICBmcmllbmQgdm9pZCAqX0p2X01hcmtBcnJheSAodm9p
ZCAqLCB2b2lkICosIHZvaWQgKiwgdm9pZCAqKTsKCgogIHN0YXRpYyBqYXZhOjpsYW5nOjpDbGFz
cyBjbGFzcyQ7Cgpwcm90ZWN0ZWQ6CiAgdmlydHVhbCBqb2JqZWN0IGNsb25lICh2b2lkKTsKCnBy
aXZhdGU6CiMgNzQgIi4uLy4uLy4uL2djYy9saWJqYXZhL2phdmEvbGFuZy9PYmplY3QuaCIKICAg
IHZvaWQgc3luY19pbml0ICh2b2lkKTsKfTsKIyAxOCAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvamF2
YS9sYW5nL0NsYXNzLmgiIDIKIyAxICJqYXZhL2xhbmcvU3RyaW5nLmgiIDEKCgoKCgojcHJhZ21h
IGludGVyZmFjZQoKCiMgMSAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvZ2NqL2FycmF5LmgiIDEKIyAx
NiAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvZ2NqL2FycmF5LmgiCmV4dGVybiAiSmF2YSIgewoKY2xh
c3MgX19KQXJyYXkgOiBwdWJsaWMgamF2YTo6bGFuZzo6T2JqZWN0CnsKcHJvdGVjdGVkOgoKCgog
IF9fSkFycmF5ICgpIDogbGVuZ3RoICgwKQogIHsKICB9CnB1YmxpYzoKICBjb25zdCBqc2l6ZSBs
ZW5ndGg7CiAgZnJpZW5kIGpzaXplIEp2R2V0QXJyYXlMZW5ndGggKF9fSkFycmF5Kik7Cn07Cgp0
ZW1wbGF0ZTxjbGFzcyBUPgpjbGFzcyBKQXJyYXkgOiBwdWJsaWMgX19KQXJyYXkKewogIFQgZGF0
YVswXTsKcHVibGljOgogIGZyaWVuZCBUKiBlbGVtZW50czw+KEpBcnJheTxUPiYgeCk7CiAgZnJp
ZW5kIFQqIGVsZW1lbnRzPD4oSkFycmF5PFQ+KiB4KTsKCgp9OwoKdGVtcGxhdGU8Y2xhc3MgVD4K
aW5saW5lIFQqIGVsZW1lbnRzKEpBcnJheTxUPiYgeCkgeyByZXR1cm4geC5kYXRhOyB9CnRlbXBs
YXRlPGNsYXNzIFQ+CmlubGluZSBUKiBlbGVtZW50cyhKQXJyYXk8VD4qIHgpIHsgcmV0dXJuIHgt
PmRhdGE7IH0KCn07CgoKdHlwZWRlZiBfX0pBcnJheSAqamFycmF5Owp0eXBlZGVmIEpBcnJheTxq
b2JqZWN0PiAqam9iamVjdEFycmF5Owp0eXBlZGVmIEpBcnJheTxqYm9vbGVhbj4gKmpib29sZWFu
QXJyYXk7CnR5cGVkZWYgSkFycmF5PGpieXRlPiAqamJ5dGVBcnJheTsKdHlwZWRlZiBKQXJyYXk8
amNoYXI+ICpqY2hhckFycmF5Owp0eXBlZGVmIEpBcnJheTxqc2hvcnQ+ICpqc2hvcnRBcnJheTsK
dHlwZWRlZiBKQXJyYXk8amludD4gKmppbnRBcnJheTsKdHlwZWRlZiBKQXJyYXk8amxvbmc+ICpq
bG9uZ0FycmF5Owp0eXBlZGVmIEpBcnJheTxqZmxvYXQ+ICpqZmxvYXRBcnJheTsKdHlwZWRlZiBK
QXJyYXk8amRvdWJsZT4gKmpkb3VibGVBcnJheTsKdHlwZWRlZiBKQXJyYXk8anN0cmluZz4gKmpz
dHJpbmdBcnJheTsKCmV4dGVybiBqYXZhOjpsYW5nOjpDbGFzcyBfSnZfYnl0ZUNsYXNzLCBfSnZf
c2hvcnRDbGFzcywgX0p2X2ludENsYXNzLAogIF9Kdl9sb25nQ2xhc3MsIF9Kdl9ib29sZWFuQ2xh
c3MsIF9Kdl9jaGFyQ2xhc3MsIF9Kdl9mbG9hdENsYXNzLAogIF9Kdl9kb3VibGVDbGFzcywgX0p2
X3ZvaWRDbGFzczsKCgpleHRlcm4gIkMiIGpvYmplY3RBcnJheSBfSnZfTmV3T2JqZWN0QXJyYXko
anNpemUgbGVuZ3RoLCBqY2xhc3MsIGpvYmplY3QgaW5pdCk7CmV4dGVybiAiQyIgam9iamVjdCBf
SnZfTmV3UHJpbUFycmF5IChqY2xhc3MgZWx0eXBlLCBqaW50IGNvdW50KTsKCmV4dGVybiBpbmxp
bmUgam9iamVjdEFycmF5Ckp2TmV3T2JqZWN0QXJyYXkgKGpzaXplIGxlbmd0aCwgamNsYXNzIGNs
cywgam9iamVjdCBpbml0KQp7CiAgcmV0dXJuIF9Kdl9OZXdPYmplY3RBcnJheSAobGVuZ3RoLCBj
bHMsIGluaXQpOwp9CgpleHRlcm4gaW5saW5lIGpjaGFyQXJyYXkKSnZOZXdDaGFyQXJyYXkgKGpp
bnQgbGVuZ3RoKQp7CiAgcmV0dXJuIChqY2hhckFycmF5KSBfSnZfTmV3UHJpbUFycmF5ICgoJiBf
SnZfY2hhckNsYXNzKSwgbGVuZ3RoKTsKfQoKZXh0ZXJuIGlubGluZSBqYm9vbGVhbkFycmF5Ckp2
TmV3Qm9vbGVhbkFycmF5IChqaW50IGxlbmd0aCkKewogIHJldHVybiAoamJvb2xlYW5BcnJheSkg
X0p2X05ld1ByaW1BcnJheSAoKCYgX0p2X2Jvb2xlYW5DbGFzcyksIGxlbmd0aCk7Cn0KCmV4dGVy
biBpbmxpbmUgamJ5dGVBcnJheQpKdk5ld0J5dGVBcnJheSAoamludCBsZW5ndGgpCnsKICByZXR1
cm4gKGpieXRlQXJyYXkpIF9Kdl9OZXdQcmltQXJyYXkgKCgmIF9Kdl9ieXRlQ2xhc3MpLCBsZW5n
dGgpOwp9CgpleHRlcm4gaW5saW5lIGpzaG9ydEFycmF5Ckp2TmV3U2hvcnRBcnJheSAoamludCBs
ZW5ndGgpCnsKICByZXR1cm4gKGpzaG9ydEFycmF5KSBfSnZfTmV3UHJpbUFycmF5ICgoJiBfSnZf
c2hvcnRDbGFzcyksIGxlbmd0aCk7Cn0KCmV4dGVybiBpbmxpbmUgamludEFycmF5Ckp2TmV3SW50
QXJyYXkgKGppbnQgbGVuZ3RoKQp7CiAgcmV0dXJuIChqaW50QXJyYXkpIF9Kdl9OZXdQcmltQXJy
YXkgKCgmIF9Kdl9pbnRDbGFzcyksIGxlbmd0aCk7Cn0KCmV4dGVybiBpbmxpbmUgamxvbmdBcnJh
eQpKdk5ld0xvbmdBcnJheSAoamludCBsZW5ndGgpCnsKICByZXR1cm4gKGpsb25nQXJyYXkpIF9K
dl9OZXdQcmltQXJyYXkgKCgmIF9Kdl9sb25nQ2xhc3MpLCBsZW5ndGgpOwp9CgpleHRlcm4gaW5s
aW5lIGpmbG9hdEFycmF5Ckp2TmV3RmxvYXRBcnJheSAoamludCBsZW5ndGgpCnsKICByZXR1cm4g
KGpmbG9hdEFycmF5KSBfSnZfTmV3UHJpbUFycmF5ICgoJiBfSnZfZmxvYXRDbGFzcyksIGxlbmd0
aCk7Cn0KCmV4dGVybiBpbmxpbmUgamRvdWJsZUFycmF5Ckp2TmV3RG91YmxlQXJyYXkgKGppbnQg
bGVuZ3RoKQp7CiAgcmV0dXJuIChqZG91YmxlQXJyYXkpIF9Kdl9OZXdQcmltQXJyYXkgKCgmIF9K
dl9kb3VibGVDbGFzcyksIGxlbmd0aCk7Cn0KCgpleHRlcm4gIkMiIGpzdHJpbmdBcnJheSBKdkNv
bnZlcnRBcmd2KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CgppbmxpbmUganNpemUgSnZH
ZXRBcnJheUxlbmd0aCAoamFycmF5IGFycmF5KSB7IHJldHVybiBhcnJheS0+bGVuZ3RoOyB9CiMg
MTAgImphdmEvbGFuZy9TdHJpbmcuaCIgMgoKZXh0ZXJuICJKYXZhIgp7CiAgbmFtZXNwYWNlIGdu
dQogIHsKICAgIG5hbWVzcGFjZSBnY2oKICAgIHsKICAgICAgbmFtZXNwYWNlIHJ1bnRpbWUKICAg
ICAgewogICAgICAgIGNsYXNzIFN0cmluZ0J1ZmZlcjsKICAgICAgfQogICAgfQogIH0KfTsKCmNs
YXNzIDo6amF2YTo6bGFuZzo6U3RyaW5nIDogcHVibGljIDo6amF2YTo6bGFuZzo6T2JqZWN0CnsK
cHVibGljOgogIFN0cmluZyAoKTsKICBTdHJpbmcgKDo6amF2YTo6bGFuZzo6U3RyaW5nICopOwog
IFN0cmluZyAoOjpqYXZhOjpsYW5nOjpTdHJpbmdCdWZmZXIgKik7CnB1YmxpYzoKICBTdHJpbmcg
KDo6Z251OjpnY2o6OnJ1bnRpbWU6OlN0cmluZ0J1ZmZlciAqKTsKcHVibGljOgogIFN0cmluZyAo
amNoYXJBcnJheSk7CiAgU3RyaW5nIChqY2hhckFycmF5LCBqaW50LCBqaW50KTsKICBTdHJpbmcg
KGpieXRlQXJyYXkpOwogIFN0cmluZyAoamJ5dGVBcnJheSwgamludCwgamludCk7CiAgU3RyaW5n
IChqYnl0ZUFycmF5LCA6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICBTdHJpbmcgKGpieXRlQXJy
YXksIGppbnQsIGppbnQsIDo6amF2YTo6bGFuZzo6U3RyaW5nICopOwogIHN0YXRpYyA6OmphdmE6
Omxhbmc6OlN0cmluZyAqY29weVZhbHVlT2YgKGpjaGFyQXJyYXkpOwogIHN0YXRpYyA6OmphdmE6
Omxhbmc6OlN0cmluZyAqY29weVZhbHVlT2YgKGpjaGFyQXJyYXksIGppbnQsIGppbnQpOwogIFN0
cmluZyAoamJ5dGVBcnJheSwgamludCk7CiAgU3RyaW5nIChqYnl0ZUFycmF5LCBqaW50LCBqaW50
LCBqaW50KTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAqdG9TdHJpbmcgKCkgeyByZXR1cm4gdGhp
czsgfQogIGpib29sZWFuIGVxdWFscyAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKik7CiAgamludCBo
YXNoQ29kZSAoKTsKICBqaW50IGxlbmd0aCAoKSB7IHJldHVybiBjb3VudDsgfQogIGpjaGFyIGNo
YXJBdCAoamludCk7CiAgdm9pZCBnZXRDaGFycyAoamludCwgamludCwgamNoYXJBcnJheSwgamlu
dCk7CiAgamJ5dGVBcnJheSBnZXRCeXRlcyAoKTsKICBqYnl0ZUFycmF5IGdldEJ5dGVzICg6Omph
dmE6Omxhbmc6OlN0cmluZyAqKTsKICB2b2lkIGdldEJ5dGVzIChqaW50LCBqaW50LCBqYnl0ZUFy
cmF5LCBqaW50KTsKICBqY2hhckFycmF5IHRvQ2hhckFycmF5ICgpOwogIGpib29sZWFuIGVxdWFs
c0lnbm9yZUNhc2UgKDo6amF2YTo6bGFuZzo6U3RyaW5nICopOwogIGppbnQgY29tcGFyZVRvICg6
OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICBqaW50IGNvbXBhcmVUbyAoOjpqYXZhOjpsYW5nOjpP
YmplY3QgKik7CiAgamludCBjb21wYXJlVG9JZ25vcmVDYXNlICg6OmphdmE6Omxhbmc6OlN0cmlu
ZyAqKTsKICBqYm9vbGVhbiByZWdpb25NYXRjaGVzIChqaW50LCA6OmphdmE6Omxhbmc6OlN0cmlu
ZyAqLCBqaW50LCBqaW50KTsKICBqYm9vbGVhbiByZWdpb25NYXRjaGVzIChqYm9vbGVhbiwgamlu
dCwgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwgamludCwgamludCk7CiAgamJvb2xlYW4gc3RhcnRz
V2l0aCAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgamJvb2xlYW4gc3RhcnRzV2l0aCAoOjpq
YXZhOjpsYW5nOjpTdHJpbmcgKiwgamludCk7CiAgamJvb2xlYW4gZW5kc1dpdGggKDo6amF2YTo6
bGFuZzo6U3RyaW5nICopOwogIGppbnQgaW5kZXhPZiAoamludCk7CiAgamludCBpbmRleE9mIChq
aW50LCBqaW50KTsKICBqaW50IGluZGV4T2YgKDo6amF2YTo6bGFuZzo6U3RyaW5nICopOwogIGpp
bnQgaW5kZXhPZiAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwgamludCk7CiAgamludCBsYXN0SW5k
ZXhPZiAoamludCk7CiAgamludCBsYXN0SW5kZXhPZiAoamludCwgamludCk7CiAgamludCBsYXN0
SW5kZXhPZiAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgamludCBsYXN0SW5kZXhPZiAoOjpq
YXZhOjpsYW5nOjpTdHJpbmcgKiwgamludCk7CiAgOjpqYXZhOjpsYW5nOjpDaGFyU2VxdWVuY2Ug
KnN1YlNlcXVlbmNlIChqaW50LCBqaW50KTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAqc3Vic3Ry
aW5nIChqaW50KTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAqc3Vic3RyaW5nIChqaW50LCBqaW50
KTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAqY29uY2F0ICg6OmphdmE6Omxhbmc6OlN0cmluZyAq
KTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAqcmVwbGFjZSAoamNoYXIsIGpjaGFyKTsKICA6Omph
dmE6Omxhbmc6OlN0cmluZyAqdG9Mb3dlckNhc2UgKDo6amF2YTo6dXRpbDo6TG9jYWxlICopOwog
IDo6amF2YTo6bGFuZzo6U3RyaW5nICp0b1VwcGVyQ2FzZSAoOjpqYXZhOjp1dGlsOjpMb2NhbGUg
Kik7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnRvTG93ZXJDYXNlICgpOwogIDo6amF2YTo6bGFu
Zzo6U3RyaW5nICp0b1VwcGVyQ2FzZSAoKTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAqdHJpbSAo
KTsKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnZhbHVlT2YgKDo6amF2YTo6bGFuZzo6
T2JqZWN0ICopOwogIHN0YXRpYyA6OmphdmE6Omxhbmc6OlN0cmluZyAqdmFsdWVPZiAoamNoYXJB
cnJheSk7CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6U3RyaW5nICp2YWx1ZU9mIChqY2hhckFycmF5
LCBqaW50LCBqaW50KTsKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnZhbHVlT2YgKGpi
b29sZWFuKTsKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnZhbHVlT2YgKGpjaGFyKTsK
ICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnZhbHVlT2YgKGppbnQpOwogIHN0YXRpYyA6
OmphdmE6Omxhbmc6OlN0cmluZyAqdmFsdWVPZiAoamxvbmcpOwogIHN0YXRpYyA6OmphdmE6Omxh
bmc6OlN0cmluZyAqdmFsdWVPZiAoamZsb2F0KTsKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJp
bmcgKnZhbHVlT2YgKGpkb3VibGUpOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nICppbnRlcm4gKCk7
CnByaXZhdGU6CiAgdm9pZCBpbml0ICgpOwogIHZvaWQgaW5pdCAoamNoYXJBcnJheSwgamludCwg
amludCwgamJvb2xlYW4pOwogIHZvaWQgaW5pdCAoamJ5dGVBcnJheSwgamludCwgamludCwgamlu
dCk7CiAgdm9pZCBpbml0IChqYnl0ZUFycmF5LCBqaW50LCBqaW50LCA6OmphdmE6Omxhbmc6OlN0
cmluZyAqKTsKICBzdGF0aWMgdm9pZCByZWhhc2ggKCk7CiAgOjpqYXZhOjpsYW5nOjpPYmplY3Qg
KmRhdGE7CiAgamludCBib2Zmc2V0OwogIGppbnQgY291bnQ7CiAgc3RhdGljIGNvbnN0IGpsb25n
IHNlcmlhbFZlcnNpb25VSUQgPSAtNjg0OTc5NDQ3MDc1NDY2NzcxMExMOwpwdWJsaWM6CiAgc3Rh
dGljIDo6amF2YTo6dXRpbDo6Q29tcGFyYXRvciAqQ0FTRV9JTlNFTlNJVElWRV9PUkRFUjsKICBm
cmllbmQgamNoYXIqIF9Kdl9HZXRTdHJpbmdDaGFycyAoanN0cmluZyBzdHIpOwogIGZyaWVuZCBq
c3RyaW5nKiBfSnZfU3RyaW5nRmluZFNsb3QgKGpjaGFyKiwgamludCwgamludCk7CiAgZnJpZW5k
IGpzdHJpbmcqIF9Kdl9TdHJpbmdHZXRTbG90IChqc3RyaW5nKTsKICBmcmllbmQganN0cmluZyBf
SnZfTmV3U3RyaW5nVXRmOENvbnN0IChfSnZfVXRmOENvbnN0KiBzdHIpOwogIGZyaWVuZCBqc3Ry
aW5nIF9Kdl9OZXdTdHJpbmdMYXRpbjEgKGNvbnN0IGNoYXIqLCBqc2l6ZSk7CiAgZnJpZW5kIGpz
dHJpbmcgX0p2X0FsbG9jU3RyaW5nIChqc2l6ZSk7CgogIHN0YXRpYyA6OmphdmE6Omxhbmc6OkNs
YXNzIGNsYXNzJDsKfTsKIyAxOSAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvamF2YS9sYW5nL0NsYXNz
LmgiIDIKIyAxICJqYXZhL25ldC9VUkwuaCIgMQoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCmV4
dGVybiAiSmF2YSIKewogIG5hbWVzcGFjZSBqYXZhCiAgewogICAgbmFtZXNwYWNlIG5ldAogICAg
ewogICAgICBjbGFzcyBVUkxDb25uZWN0aW9uOwogICAgICBjbGFzcyBVUkw7CiAgICAgIGNsYXNz
IFVSTFN0cmVhbUhhbmRsZXJGYWN0b3J5OwogICAgICBjbGFzcyBVUkxTdHJlYW1IYW5kbGVyOwog
ICAgfQogIH0KfTsKCmNsYXNzIDo6amF2YTo6bmV0OjpVUkwgOiBwdWJsaWMgOjpqYXZhOjpsYW5n
OjpPYmplY3QKewpwdWJsaWM6CiAgVVJMICg6OmphdmE6Omxhbmc6OlN0cmluZyAqLCA6OmphdmE6
Omxhbmc6OlN0cmluZyAqLCBqaW50LCA6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICBVUkwgKDo6
amF2YTo6bGFuZzo6U3RyaW5nICosIDo6amF2YTo6bGFuZzo6U3RyaW5nICosIDo6amF2YTo6bGFu
Zzo6U3RyaW5nICopOwogIFVSTCAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwgOjpqYXZhOjpsYW5n
OjpTdHJpbmcgKiwgamludCwgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwgOjpqYXZhOjpuZXQ6OlVS
TFN0cmVhbUhhbmRsZXIgKik7CiAgVVJMICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICBVUkwg
KDo6amF2YTo6bmV0OjpVUkwgKiwgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgVVJMICg6Omph
dmE6Om5ldDo6VVJMICosIDo6amF2YTo6bGFuZzo6U3RyaW5nICosIDo6amF2YTo6bmV0OjpVUkxT
dHJlYW1IYW5kbGVyICopOwogIGpib29sZWFuIGVxdWFscyAoOjpqYXZhOjpsYW5nOjpPYmplY3Qg
Kik7CiAgOjpqYXZhOjpsYW5nOjpPYmplY3QgKmdldENvbnRlbnQgKCk7CiAgOjpqYXZhOjpsYW5n
OjpTdHJpbmcgKmdldEZpbGUgKCkgeyByZXR1cm4gZmlsZTsgfQogIDo6amF2YTo6bGFuZzo6U3Ry
aW5nICpnZXRQYXRoICgpOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nICpnZXRIb3N0ICgpIHsgcmV0
dXJuIGhvc3Q7IH0KICBqaW50IGdldFBvcnQgKCkgeyByZXR1cm4gcG9ydDsgfQogIDo6amF2YTo6
bGFuZzo6U3RyaW5nICpnZXRQcm90b2NvbCAoKSB7IHJldHVybiBwcm90b2NvbDsgfQogIDo6amF2
YTo6bGFuZzo6U3RyaW5nICpnZXRSZWYgKCkgeyByZXR1cm4gcmVmOyB9CiAgamludCBoYXNoQ29k
ZSAoKTsKICA6OmphdmE6Om5ldDo6VVJMQ29ubmVjdGlvbiAqb3BlbkNvbm5lY3Rpb24gKCk7CiAg
OjpqYXZhOjppbzo6SW5wdXRTdHJlYW0gKm9wZW5TdHJlYW0gKCk7CiAgamJvb2xlYW4gc2FtZUZp
bGUgKDo6amF2YTo6bmV0OjpVUkwgKik7CnB1YmxpYzoKICB2b2lkIHNldCAoOjpqYXZhOjpsYW5n
OjpTdHJpbmcgKiwgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwgamludCwgOjpqYXZhOjpsYW5nOjpT
dHJpbmcgKiwgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CnB1YmxpYzoKICBzdGF0aWMgdm9pZCBz
ZXRVUkxTdHJlYW1IYW5kbGVyRmFjdG9yeSAoOjpqYXZhOjpuZXQ6OlVSTFN0cmVhbUhhbmRsZXJG
YWN0b3J5ICopOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nICp0b0V4dGVybmFsRm9ybSAoKTsKICA6
OmphdmE6Omxhbmc6OlN0cmluZyAqdG9TdHJpbmcgKCk7CnByaXZhdGU6CiAgOjpqYXZhOjpuZXQ6
OlVSTFN0cmVhbUhhbmRsZXIgKnNldFVSTFN0cmVhbUhhbmRsZXIgKDo6amF2YTo6bGFuZzo6U3Ry
aW5nICopOwogIHZvaWQgcmVhZE9iamVjdCAoOjpqYXZhOjppbzo6T2JqZWN0SW5wdXRTdHJlYW0g
Kik7CiAgdm9pZCB3cml0ZU9iamVjdCAoOjpqYXZhOjppbzo6T2JqZWN0T3V0cHV0U3RyZWFtICop
OwogIDo6amF2YTo6bGFuZzo6U3RyaW5nICpwcm90b2NvbDsKICA6OmphdmE6Omxhbmc6OlN0cmlu
ZyAqaG9zdDsKICBqaW50IHBvcnQ7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKmZpbGU7CiAgOjpq
YXZhOjpsYW5nOjpTdHJpbmcgKnJlZjsKICBqaW50IGhhc2hDb2RlX187CiAgOjpqYXZhOjpuZXQ6
OlVSTFN0cmVhbUhhbmRsZXIgKmhhbmRsZXI7CiAgc3RhdGljIDo6amF2YTo6dXRpbDo6SGFzaHRh
YmxlICpoYW5kbGVyczsKICBzdGF0aWMgOjpqYXZhOjpuZXQ6OlVSTFN0cmVhbUhhbmRsZXJGYWN0
b3J5ICpmYWN0b3J5OwogIHN0YXRpYyBjb25zdCBqbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gLTc2
Mjc2Mjk2ODgzNjE1MjQxMTBMTDsKcHVibGljOgoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFz
cyBjbGFzcyQ7Cn07CiMgMjAgIi4uLy4uLy4uL2djYy9saWJqYXZhL2phdmEvbGFuZy9DbGFzcy5o
IiAyCiMgMSAiamF2YS9sYW5nL3JlZmxlY3QvTW9kaWZpZXIuaCIgMQoKCgoKCiNwcmFnbWEgaW50
ZXJmYWNlCgoKCmNsYXNzIDo6amF2YTo6bGFuZzo6cmVmbGVjdDo6TW9kaWZpZXIgOiBwdWJsaWMg
OjpqYXZhOjpsYW5nOjpPYmplY3QKewpwdWJsaWM6CiAgTW9kaWZpZXIgKCk7CiAgc3RhdGljIGpi
b29sZWFuIGlzQWJzdHJhY3QgKGppbnQpOwogIHN0YXRpYyBqYm9vbGVhbiBpc0ZpbmFsIChqaW50
KTsKICBzdGF0aWMgamJvb2xlYW4gaXNJbnRlcmZhY2UgKGppbnQpOwogIHN0YXRpYyBqYm9vbGVh
biBpc05hdGl2ZSAoamludCk7CiAgc3RhdGljIGpib29sZWFuIGlzUHJpdmF0ZSAoamludCk7CiAg
c3RhdGljIGpib29sZWFuIGlzUHJvdGVjdGVkIChqaW50KTsKICBzdGF0aWMgamJvb2xlYW4gaXNQ
dWJsaWMgKGppbnQpOwogIHN0YXRpYyBqYm9vbGVhbiBpc1N0YXRpYyAoamludCk7CiAgc3RhdGlj
IGpib29sZWFuIGlzU3RyaWN0IChqaW50KTsKICBzdGF0aWMgamJvb2xlYW4gaXNTeW5jaHJvbml6
ZWQgKGppbnQpOwogIHN0YXRpYyBqYm9vbGVhbiBpc1RyYW5zaWVudCAoamludCk7CiAgc3RhdGlj
IGpib29sZWFuIGlzVm9sYXRpbGUgKGppbnQpOwogIHN0YXRpYyA6OmphdmE6Omxhbmc6OlN0cmlu
ZyAqdG9TdHJpbmcgKGppbnQpOwpwdWJsaWM6CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6U3RyaW5n
QnVmZmVyICp0b1N0cmluZyAoamludCwgOjpqYXZhOjpsYW5nOjpTdHJpbmdCdWZmZXIgKik7CnB1
YmxpYzoKICBzdGF0aWMgY29uc3QgamludCBQVUJMSUMgPSAxTDsKICBzdGF0aWMgY29uc3Qgamlu
dCBQUklWQVRFID0gMkw7CiAgc3RhdGljIGNvbnN0IGppbnQgUFJPVEVDVEVEID0gNEw7CiAgc3Rh
dGljIGNvbnN0IGppbnQgU1RBVElDID0gOEw7CiAgc3RhdGljIGNvbnN0IGppbnQgRklOQUwgPSAx
Nkw7CiAgc3RhdGljIGNvbnN0IGppbnQgU1lOQ0hST05JWkVEID0gMzJMOwogIHN0YXRpYyBjb25z
dCBqaW50IFZPTEFUSUxFID0gNjRMOwogIHN0YXRpYyBjb25zdCBqaW50IFRSQU5TSUVOVCA9IDEy
OEw7CiAgc3RhdGljIGNvbnN0IGppbnQgTkFUSVZFID0gMjU2TDsKICBzdGF0aWMgY29uc3Qgamlu
dCBJTlRFUkZBQ0UgPSA1MTJMOwogIHN0YXRpYyBjb25zdCBqaW50IEFCU1RSQUNUID0gMTAyNEw7
CiAgc3RhdGljIGNvbnN0IGppbnQgU1RSSUNUID0gMjA0OEw7CnB1YmxpYzoKICBzdGF0aWMgY29u
c3QgamludCBTVVBFUiA9IDMyTDsKICBzdGF0aWMgY29uc3QgamludCBBTExfRkxBR1MgPSA0MDk1
TDsKcHVibGljOgoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cn07CiMgMjEg
Ii4uLy4uLy4uL2djYy9saWJqYXZhL2phdmEvbGFuZy9DbGFzcy5oIiAyCiMgMSAiamF2YS9zZWN1
cml0eS9Qcm90ZWN0aW9uRG9tYWluLmgiIDEKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCgpleHRl
cm4gIkphdmEiCnsKICBuYW1lc3BhY2UgamF2YQogIHsKICAgIG5hbWVzcGFjZSBzZWN1cml0eQog
ICAgewogICAgICBjbGFzcyBQcm90ZWN0aW9uRG9tYWluOwogICAgICBjbGFzcyBQZXJtaXNzaW9u
OwogICAgICBjbGFzcyBQZXJtaXNzaW9uQ29sbGVjdGlvbjsKICAgICAgY2xhc3MgQ29kZVNvdXJj
ZTsKICAgIH0KICB9Cn07CgpjbGFzcyA6OmphdmE6OnNlY3VyaXR5OjpQcm90ZWN0aW9uRG9tYWlu
IDogcHVibGljIDo6amF2YTo6bGFuZzo6T2JqZWN0CnsKcHVibGljOgogIFByb3RlY3Rpb25Eb21h
aW4gKDo6amF2YTo6c2VjdXJpdHk6OkNvZGVTb3VyY2UgKiwgOjpqYXZhOjpzZWN1cml0eTo6UGVy
bWlzc2lvbkNvbGxlY3Rpb24gKik7CiAgOjpqYXZhOjpzZWN1cml0eTo6Q29kZVNvdXJjZSAqZ2V0
Q29kZVNvdXJjZSAoKSB7IHJldHVybiBjb2RlX3NvdXJjZTsgfQogIDo6amF2YTo6c2VjdXJpdHk6
OlBlcm1pc3Npb25Db2xsZWN0aW9uICpnZXRQZXJtaXNzaW9ucyAoKSB7IHJldHVybiBwZXJtczsg
fQogIHZpcnR1YWwgamJvb2xlYW4gaW1wbGllcyAoOjpqYXZhOjpzZWN1cml0eTo6UGVybWlzc2lv
biAqKTsKICB2aXJ0dWFsIDo6amF2YTo6bGFuZzo6U3RyaW5nICp0b1N0cmluZyAoKTsKcHJpdmF0
ZToKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKmxpbmVzZXA7CiAgOjpqYXZhOjpzZWN1
cml0eTo6Q29kZVNvdXJjZSAqY29kZV9zb3VyY2U7CiAgOjpqYXZhOjpzZWN1cml0eTo6UGVybWlz
c2lvbkNvbGxlY3Rpb24gKnBlcm1zOwpwdWJsaWM6CgogIHN0YXRpYyA6OmphdmE6Omxhbmc6OkNs
YXNzIGNsYXNzJDsKfTsKIyAyMiAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvamF2YS9sYW5nL0NsYXNz
LmgiIDIKCgpleHRlcm4gIkMiIHZvaWQgX0p2X0luaXRDbGFzcyAoamNsYXNzIGtsYXNzKTsKZXh0
ZXJuICJDIiB2b2lkIF9Kdl9SZWdpc3RlckNsYXNzZXMgKGpjbGFzcyAqY2xhc3Nlcyk7CgoKZXh0
ZXJuICJDIiB2b2lkICpfSnZfTG9va3VwSW50ZXJmYWNlTWV0aG9kSWR4IChqY2xhc3Mga2xhc3Ms
IGpjbGFzcyBpZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgbWV0aF9pZHgpOwoKCgoKZW51bQp7CiAgSlZfU1RBVEVfTk9USElORyA9IDAsCgog
IEpWX1NUQVRFX1BSRUxPQURJTkcgPSAxLAogIEpWX1NUQVRFX0xPQURJTkcgPSAzLAogIEpWX1NU
QVRFX0xPQURFRCA9IDUsCgogIEpWX1NUQVRFX0NPTVBJTEVEID0gNiwKCiAgSlZfU1RBVEVfUFJF
UEFSRUQgPSA3LAogIEpWX1NUQVRFX0xJTktFRCA9IDksCgogIEpWX1NUQVRFX0lOX1BST0dSRVNT
ID0gMTAsCiAgSlZfU1RBVEVfRE9ORSA9IDEyLAoKICBKVl9TVEFURV9FUlJPUiA9IDE0Cn07Cgpz
dHJ1Y3QgX0p2X0ZpZWxkOwpzdHJ1Y3QgX0p2X1ZUYWJsZTsKdW5pb24gX0p2X3dvcmQ7CnN0cnVj
dCBfSnZfQXJyYXlWVGFibGU7CgpzdHJ1Y3QgX0p2X0NvbnN0YW50cwp7CiAgamludCBzaXplOwog
IGpieXRlICp0YWdzOwogIF9Kdl93b3JkICpkYXRhOwp9OwoKc3RydWN0IF9Kdl9NZXRob2QKewoK
ICBfSnZfVXRmOENvbnN0ICpuYW1lOwoKICBfSnZfVXRmOENvbnN0ICpzaWduYXR1cmU7CgogIF9K
dl91c2hvcnQgYWNjZmxhZ3M7CgogIF9Kdl91c2hvcnQgaW5kZXg7CgogIHZvaWQgKm5jb2RlOwoK
CiAgX0p2X1V0ZjhDb25zdCAqKnRocm93czsKCiAgX0p2X01ldGhvZCAqZ2V0TmV4dE1ldGhvZCAo
KQogIHsgcmV0dXJuIHRoaXMgKyAxOyB9Cn07CgoKdW5pb24gX0p2X0lEaXNwYXRjaFRhYmxlCnsK
ICBzdHJ1Y3QKICB7CgogICAganNob3J0IGlpbmRleDsKICAgIGpzaG9ydCBpdGFibGVfbGVuZ3Ro
OwoKICAgIHZvaWQgKippdGFibGU7CiAgfSBjbHM7CgogIHN0cnVjdAogIHsKCiAgICBqc2hvcnQg
KmlvZmZzZXRzOwogIH0gaWZhY2U7Cn07CgoKc3RydWN0IF9Kdl9pZmFjZXMKewogIGpjbGFzcyAq
bGlzdDsKICBqc2hvcnQgbGVuOwogIGpzaG9ydCBjb3VudDsKfTsKCnN0cnVjdCBfSnZfTWV0aG9k
U3ltYm9sCnsKICBfSnZfVXRmOENvbnN0ICpjbGFzc19uYW1lOwogIF9Kdl9VdGY4Q29uc3QgKm5h
bWU7CiAgX0p2X1V0ZjhDb25zdCAqc2lnbmF0dXJlOwp9OwoKc3RydWN0IF9Kdl9PZmZzZXRUYWJs
ZQp7CiAgamludCBzdGF0ZTsKICBqaW50IG9mZnNldHNbXTsKfTsKCgoKCgpjbGFzcyBqYXZhOjps
YW5nOjpDbGFzcyA6IHB1YmxpYyBqYXZhOjpsYW5nOjpPYmplY3QKewpwdWJsaWM6CiAgc3RhdGlj
IGpjbGFzcyBmb3JOYW1lIChqc3RyaW5nIGNsYXNzTmFtZSwgamJvb2xlYW4gaW5pdGlhbGl6ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgIGphdmE6Omxhbmc6OkNsYXNzTG9hZGVyICpsb2FkZXIp
OwogIHN0YXRpYyBqY2xhc3MgZm9yTmFtZSAoanN0cmluZyBjbGFzc05hbWUpOwogIEpBcnJheTxq
Y2xhc3M+ICpnZXRDbGFzc2VzICh2b2lkKTsKCiAgamF2YTo6bGFuZzo6Q2xhc3NMb2FkZXIgKmdl
dENsYXNzTG9hZGVyICh2b2lkKTsKCiAgamF2YTo6bGFuZzo6cmVmbGVjdDo6Q29uc3RydWN0b3Ig
KmdldENvbnN0cnVjdG9yIChKQXJyYXk8amNsYXNzPiAqKTsKICBKQXJyYXk8amF2YTo6bGFuZzo6
cmVmbGVjdDo6Q29uc3RydWN0b3IgKj4gKmdldENvbnN0cnVjdG9ycyAodm9pZCk7CiAgamF2YTo6
bGFuZzo6cmVmbGVjdDo6Q29uc3RydWN0b3IgKmdldERlY2xhcmVkQ29uc3RydWN0b3IgKEpBcnJh
eTxqY2xhc3M+ICopOwogIEpBcnJheTxqYXZhOjpsYW5nOjpyZWZsZWN0OjpDb25zdHJ1Y3RvciAq
PiAqZ2V0RGVjbGFyZWRDb25zdHJ1Y3RvcnMgKHZvaWQpOwogIGphdmE6Omxhbmc6OnJlZmxlY3Q6
OkZpZWxkICpnZXREZWNsYXJlZEZpZWxkIChqc3RyaW5nKTsKICBKQXJyYXk8amF2YTo6bGFuZzo6
cmVmbGVjdDo6RmllbGQgKj4gKmdldERlY2xhcmVkRmllbGRzICh2b2lkKTsKICBqYXZhOjpsYW5n
OjpyZWZsZWN0OjpNZXRob2QgKmdldERlY2xhcmVkTWV0aG9kIChqc3RyaW5nLCBKQXJyYXk8amNs
YXNzPiAqKTsKICBKQXJyYXk8amF2YTo6bGFuZzo6cmVmbGVjdDo6TWV0aG9kICo+ICpnZXREZWNs
YXJlZE1ldGhvZHMgKHZvaWQpOwoKICBKQXJyYXk8amNsYXNzPiAqZ2V0RGVjbGFyZWRDbGFzc2Vz
ICh2b2lkKTsKICBqY2xhc3MgZ2V0RGVjbGFyaW5nQ2xhc3MgKHZvaWQpOwoKICBqYXZhOjpsYW5n
OjpyZWZsZWN0OjpGaWVsZCAqZ2V0RmllbGQgKGpzdHJpbmcpOwpwcml2YXRlOgogIGppbnQgX2dl
dEZpZWxkcyAoSkFycmF5PGphdmE6Omxhbmc6OnJlZmxlY3Q6OkZpZWxkICo+ICpyZXN1bHQsIGpp
bnQgb2Zmc2V0KTsKICBKQXJyYXk8amF2YTo6bGFuZzo6cmVmbGVjdDo6Q29uc3RydWN0b3IgKj4g
Kl9nZXRDb25zdHJ1Y3RvcnMgKGpib29sZWFuKTsKICBqYXZhOjpsYW5nOjpyZWZsZWN0OjpGaWVs
ZCAqZ2V0RmllbGQgKGpzdHJpbmcsIGppbnQpOwogIGppbnQgX2dldE1ldGhvZHMgKEpBcnJheTxq
YXZhOjpsYW5nOjpyZWZsZWN0OjpNZXRob2QgKj4gKnJlc3VsdCwKICAgICAgICAgICAgICAgICAg
ICBqaW50IG9mZnNldCk7CiAgamF2YTo6bGFuZzo6cmVmbGVjdDo6RmllbGQgKmdldFByaXZhdGVG
aWVsZCAoanN0cmluZyk7CiAgamF2YTo6bGFuZzo6cmVmbGVjdDo6TWV0aG9kICpnZXRQcml2YXRl
TWV0aG9kIChqc3RyaW5nLCBKQXJyYXk8amNsYXNzPiAqKTsKICBqYXZhOjpzZWN1cml0eTo6UHJv
dGVjdGlvbkRvbWFpbiAqZ2V0UHJvdGVjdGlvbkRvbWFpbjAgKCk7CgpwdWJsaWM6CiAgSkFycmF5
PGphdmE6Omxhbmc6OnJlZmxlY3Q6OkZpZWxkICo+ICpnZXRGaWVsZHMgKHZvaWQpOwoKICBKQXJy
YXk8amNsYXNzPiAqZ2V0SW50ZXJmYWNlcyAodm9pZCk7CgogIHZvaWQgZ2V0U2lnbmF0dXJlIChq
YXZhOjpsYW5nOjpTdHJpbmdCdWZmZXIgKmJ1ZmZlcik7CiAgc3RhdGljIGpzdHJpbmcgZ2V0U2ln
bmF0dXJlIChKQXJyYXk8amNsYXNzPiAqLCBqYm9vbGVhbiBpc19jb25zdHJ1Y3Rvcik7CiAgamF2
YTo6bGFuZzo6cmVmbGVjdDo6TWV0aG9kICpnZXRNZXRob2QgKGpzdHJpbmcsIEpBcnJheTxqY2xh
c3M+ICopOwogIEpBcnJheTxqYXZhOjpsYW5nOjpyZWZsZWN0OjpNZXRob2QgKj4gKmdldE1ldGhv
ZHMgKHZvaWQpOwoKICBpbmxpbmUgamludCBnZXRNb2RpZmllcnMgKHZvaWQpCiAgICB7CiAgICAg
IHJldHVybiBhY2NmbGFnczsKICAgIH0KCiAganN0cmluZyBnZXROYW1lICh2b2lkKTsKCiAgamF2
YTo6bmV0OjpVUkwgKmdldFJlc291cmNlIChqc3RyaW5nIHJlc291cmNlTmFtZSk7CiAgamF2YTo6
aW86OklucHV0U3RyZWFtICpnZXRSZXNvdXJjZUFzU3RyZWFtIChqc3RyaW5nIHJlc291cmNlTmFt
ZSk7CiAgSkFycmF5PGpvYmplY3Q+ICpnZXRTaWduZXJzICh2b2lkKTsKCiAgaW5saW5lIGpjbGFz
cyBnZXRTdXBlcmNsYXNzICh2b2lkKQogICAgewogICAgICByZXR1cm4gc3VwZXJjbGFzczsKICAg
IH0KCiAgaW5saW5lIGpib29sZWFuIGlzQXJyYXkgKHZvaWQpCiAgICB7CiAgICAgIHJldHVybiBu
YW1lLT5kYXRhWzBdID09ICdbJzsKICAgIH0KCiAgaW5saW5lIGpjbGFzcyBnZXRDb21wb25lbnRU
eXBlICh2b2lkKQogICAgewogICAgICByZXR1cm4gaXNBcnJheSAoKSA/ICgqIChqY2xhc3MgKikg
Jm1ldGhvZHMpIDogMDsKICAgIH0KCiAgamJvb2xlYW4gaXNBc3NpZ25hYmxlRnJvbSAoamNsYXNz
IGNscyk7CiAgamJvb2xlYW4gaXNJbnN0YW5jZSAoam9iamVjdCBvYmopOwoKICBpbmxpbmUgamJv
b2xlYW4gaXNJbnRlcmZhY2UgKHZvaWQpCiAgewogICAgcmV0dXJuIChhY2NmbGFncyAmIGphdmE6
Omxhbmc6OnJlZmxlY3Q6Ok1vZGlmaWVyOjpJTlRFUkZBQ0UpICE9IDA7CiAgfQoKICBpbmxpbmUg
amJvb2xlYW4gaXNQcmltaXRpdmUgKHZvaWQpCiAgICB7CiAgICAgIHJldHVybiB2dGFibGUgPT0g
KChfSnZfVlRhYmxlICopIC0xKTsKICAgIH0KCiAgam9iamVjdCBuZXdJbnN0YW5jZSAodm9pZCk7
CiAganN0cmluZyB0b1N0cmluZyAodm9pZCk7CgoKICBqaW50IHNpemUgKHZvaWQpCiAgICB7CiAg
ICAgIHJldHVybiBzaXplX2luX2J5dGVzOwogICAgfQoKCiAgdm9pZCBmaW5hbGl6ZSAoKTsKCgoK
ICBDbGFzcyAoKTsKCiAgc3RhdGljIGphdmE6Omxhbmc6OkNsYXNzIGNsYXNzJDsKCnByaXZhdGU6
CgogIHZvaWQgY2hlY2tNZW1iZXJBY2Nlc3MgKGppbnQgZmxhZ3MpOwoKICB2b2lkIGluaXRpYWxp
emVDbGFzcyAodm9pZCk7CgoKICBmcmllbmQgX0p2X01ldGhvZCAqX0p2X0dldE1ldGhvZExvY2Fs
IChqY2xhc3Mga2xhc3MsIF9Kdl9VdGY4Q29uc3QgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0p2X1V0ZjhDb25zdCAqc2lnbmF0dXJlKTsKICBmcmllbmQg
amJvb2xlYW4gX0p2X0lzQXNzaWduYWJsZUZyb20oamNsYXNzLCBqY2xhc3MpOwogIGZyaWVuZCBq
Ym9vbGVhbiBfSnZfSW50ZXJmYWNlQXNzaWduYWJsZUZyb20gKGpjbGFzcywgamNsYXNzKTsKICBm
cmllbmQgdm9pZCAqX0p2X0xvb2t1cEludGVyZmFjZU1ldGhvZElkeCAoamNsYXNzIGtsYXNzLCBq
Y2xhc3MgaWZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBtZXRob2RfaWR4KTsKCiAgaW5saW5lIGZyaWVuZCB2b2lkCiAgX0p2X0luaXRDbGFzcyAo
amNsYXNzIGtsYXNzKQogIHsKICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChrbGFzcy0+c3RhdGUg
PT0gSlZfU1RBVEVfRE9ORSwgdHJ1ZSkpCiAgICAgIHJldHVybjsKICAgIGtsYXNzLT5pbml0aWFs
aXplQ2xhc3MgKCk7CiAgfQoKICBmcmllbmQgX0p2X01ldGhvZCogX0p2X0xvb2t1cERlY2xhcmVk
TWV0aG9kIChqY2xhc3MsIF9Kdl9VdGY4Q29uc3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfSnZfVXRmOENvbnN0Kik7CiAgZnJpZW5kIGpmaWVsZElE
IEp2R2V0Rmlyc3RJbnN0YW5jZUZpZWxkIChqY2xhc3MpOwogIGZyaWVuZCBqaW50IEp2TnVtSW5z
dGFuY2VGaWVsZHMgKGpjbGFzcyk7CiAgZnJpZW5kIGpmaWVsZElEIEp2R2V0Rmlyc3RTdGF0aWNG
aWVsZCAoamNsYXNzKTsKICBmcmllbmQgamludCBKdk51bVN0YXRpY0ZpZWxkcyAoamNsYXNzKTsK
CiAgZnJpZW5kIGpvYmplY3QgX0p2X0FsbG9jT2JqZWN0IChqY2xhc3MsIGppbnQpOwogIGZyaWVu
ZCB2b2lkICpfSnZfQWxsb2NPYmogKGppbnQsIGpjbGFzcyk7CiAgZnJpZW5kIHZvaWQgKl9Kdl9B
bGxvY1B0ckZyZWVPYmogKGppbnQsIGpjbGFzcyk7CiAgZnJpZW5kIHZvaWQgKl9Kdl9BbGxvY0Fy
cmF5IChqaW50LCBqY2xhc3MpOwoKICBmcmllbmQgam9iamVjdCBfSnZfSk5JX1RvUmVmbGVjdGVk
RmllbGQgKF9Kdl9KTklFbnYgKiwgamNsYXNzLCBqZmllbGRJRCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpib29sZWFuKTsKICBmcmllbmQgam9iamVjdCBfSnZf
Sk5JX1RvUmVmbGVjdGVkTWV0aG9kIChfSnZfSk5JRW52ICosIGpjbGFzcywgam1ldGhvZElELAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpib29sZWFuKTsKICBm
cmllbmQgamZpZWxkSUQgX0p2X0Zyb21SZWZsZWN0ZWRGaWVsZCAoamF2YTo6bGFuZzo6cmVmbGVj
dDo6RmllbGQgKik7CgogIGZyaWVuZCBqbWV0aG9kSUQgX0p2X0Zyb21SZWZsZWN0ZWRNZXRob2Qg
KGphdmE6Omxhbmc6OnJlZmxlY3Q6Ok1ldGhvZCAqKTsKICBmcmllbmQgam1ldGhvZElEIF9Kdl9G
cm9tUmVmbGVjdGVkQ29uc3RydWN0b3IgKGphdmE6Omxhbmc6OnJlZmxlY3Q6OkNvbnN0cnVjdG9y
ICopOwogIGZyaWVuZCBqaW50IEp2TnVtTWV0aG9kcyAoamNsYXNzKTsKICBmcmllbmQgam1ldGhv
ZElEIEp2R2V0Rmlyc3RNZXRob2QgKGpjbGFzcyk7CgoKICBmcmllbmQgY2xhc3MgamF2YTo6bGFu
Zzo6Q2xhc3NMb2FkZXI7CgogIGZyaWVuZCBjbGFzcyBqYXZhOjppbzo6T2JqZWN0T3V0cHV0U3Ry
ZWFtOwogIGZyaWVuZCBjbGFzcyBqYXZhOjppbzo6T2JqZWN0SW5wdXRTdHJlYW07CiAgZnJpZW5k
IGNsYXNzIGphdmE6OmlvOjpPYmplY3RTdHJlYW1DbGFzczsKCiAgZnJpZW5kIHZvaWQgX0p2X1dh
aXRGb3JTdGF0ZSAoamNsYXNzLCBpbnQpOwogIGZyaWVuZCB2b2lkIF9Kdl9SZWdpc3RlckNsYXNz
ZXMgKGpjbGFzcyAqY2xhc3Nlcyk7CiAgZnJpZW5kIHZvaWQgX0p2X1JlZ2lzdGVyQ2xhc3NIb29r
RGVmYXVsdCAoamNsYXNzIGtsYXNzKTsKICBmcmllbmQgdm9pZCBfSnZfUmVnaXN0ZXJJbml0aWF0
aW5nTG9hZGVyIChqY2xhc3MsamF2YTo6bGFuZzo6Q2xhc3NMb2FkZXIqKTsKICBmcmllbmQgdm9p
ZCBfSnZfVW5yZWdpc3RlckNsYXNzIChqY2xhc3MpOwogIGZyaWVuZCBqY2xhc3MgX0p2X0ZpbmRD
bGFzcyAoX0p2X1V0ZjhDb25zdCAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGphdmE6Omxhbmc6OkNsYXNzTG9hZGVyICpsb2FkZXIpOwogIGZyaWVuZCBqY2xhc3MgX0p2X0Zp
bmRDbGFzc0luQ2FjaGUgKF9Kdl9VdGY4Q29uc3QgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgamF2YTo6bGFuZzo6Q2xhc3NMb2FkZXIgKmxvYWRlcik7CiAgZnJp
ZW5kIHZvaWQgX0p2X05ld0FycmF5Q2xhc3MgKGpjbGFzcyBlbGVtZW50LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqYXZhOjpsYW5nOjpDbGFzc0xvYWRlciAqbG9hZGVyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSnZfVlRhYmxlICphcnJheV92dGFibGUgPSAw
KTsKICBmcmllbmQgamNsYXNzIF9Kdl9OZXdDbGFzcyAoX0p2X1V0ZjhDb25zdCAqbmFtZSwgamNs
YXNzIHN1cGVyY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmE6Omxhbmc6
OkNsYXNzTG9hZGVyICpsb2FkZXIpOwogIGZyaWVuZCB2b2lkIF9Kdl9Jbml0TmV3Q2xhc3NGaWVs
ZHMgKGpjbGFzcyBrbGFzcyk7CgoKICBmcmllbmQgdm9pZCBfSnZfSW5pdFByaW1DbGFzcyAoamNs
YXNzLCBjaGFyICosIGNoYXIsIGludCwgX0p2X0FycmF5VlRhYmxlICopOwoKICBmcmllbmQgdm9p
ZCBfSnZfUHJlcGFyZUNvbXBpbGVkQ2xhc3MgKGpjbGFzcyk7CiAgZnJpZW5kIHZvaWQgX0p2X1By
ZXBhcmVDb25zdGFudFRpbWVUYWJsZXMgKGpjbGFzcyk7CiAgZnJpZW5kIGpzaG9ydCBfSnZfR2V0
SW50ZXJmYWNlcyAoamNsYXNzLCBfSnZfaWZhY2VzICopOwogIGZyaWVuZCB2b2lkIF9Kdl9HZW5l
cmF0ZUlUYWJsZSAoamNsYXNzLCBfSnZfaWZhY2VzICosIGpzaG9ydCAqKTsKICBmcmllbmQganN0
cmluZyBfSnZfR2V0TWV0aG9kU3RyaW5nKGpjbGFzcywgX0p2X1V0ZjhDb25zdCAqKTsKICBmcmll
bmQganNob3J0IF9Kdl9BcHBlbmRQYXJ0aWFsSVRhYmxlIChqY2xhc3MsIGpjbGFzcywgdm9pZCAq
KiwganNob3J0KTsKICBmcmllbmQganNob3J0IF9Kdl9GaW5kSUluZGV4IChqY2xhc3MgKiwganNo
b3J0ICosIGpzaG9ydCk7CiAgZnJpZW5kIHZvaWQgX0p2X0xpbmtPZmZzZXRUYWJsZSAoamNsYXNz
KTsKICBmcmllbmQgdm9pZCBfSnZfTGF5b3V0VlRhYmxlTWV0aG9kcyAoamNsYXNzIGtsYXNzKTsK
ICBmcmllbmQgdm9pZCBfSnZfU2V0VlRhYmxlRW50cmllcyAoamNsYXNzLCBfSnZfVlRhYmxlICop
OwogIGZyaWVuZCB2b2lkIF9Kdl9NYWtlVlRhYmxlIChqY2xhc3MpOwoKCgogIGlubGluZSBmcmll
bmQgamNsYXNzCiAgX0p2X0dldEFycmF5Q2xhc3MgKGpjbGFzcyBrbGFzcywgamF2YTo6bGFuZzo6
Q2xhc3NMb2FkZXIgKmxvYWRlcikKICB7CiAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoIWtsYXNz
LT5hcnJheWNsYXNzLCBmYWxzZSkpCiAgICAgIF9Kdl9OZXdBcnJheUNsYXNzIChrbGFzcywgbG9h
ZGVyKTsKICAgIHJldHVybiBrbGFzcy0+YXJyYXljbGFzczsKICB9CgoKICBmcmllbmQgamJvb2xl
YW4gX0p2X0lzSW50ZXJwcmV0ZWRDbGFzcyAoamNsYXNzKTsKICBmcmllbmQgdm9pZCBfSnZfSW5p
dEZpZWxkIChqb2JqZWN0LCBqY2xhc3MsIF9Kdl9GaWVsZCopOwogIGZyaWVuZCBpbnQgX0p2X0Rl
dGVybWluZVZUYWJsZUluZGV4IChqY2xhc3MsIF9Kdl9VdGY4Q29uc3QgKiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0p2X1V0ZjhDb25zdCopOwogIGZyaWVuZCB2b2lk
IF9Kdl9Jbml0RmllbGQgKGpvYmplY3QsIGpjbGFzcywgaW50KTsKICBmcmllbmQgX0p2X3dvcmQg
X0p2X1Jlc29sdmVQb29sRW50cnkgKGpjbGFzcywgaW50KTsKICBmcmllbmQgX0p2X01ldGhvZCAq
X0p2X1NlYXJjaE1ldGhvZEluQ2xhc3MgKGpjbGFzcyBjbHMsIGpjbGFzcyBrbGFzcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Kdl9VdGY4Q29uc3QgKm1l
dGhvZF9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0p2X1V0ZjhDb25zdCAqbWV0aG9kX3NpZ25hdHVyZSk7CgogIGZyaWVuZCB2b2lkIF9Kdl9QcmVw
YXJlQ2xhc3MgKGpjbGFzcyk7CgogIGZyaWVuZCBjbGFzcyBfSnZfQ2xhc3NSZWFkZXI7CiAgZnJp
ZW5kIGNsYXNzIF9Kdl9JbnRlcnBDbGFzczsKICBmcmllbmQgY2xhc3MgX0p2X0ludGVycE1ldGhv
ZDsKCgoKICBmcmllbmQgdm9pZCAqX0p2X01hcmtPYmogKHZvaWQgKiwgdm9pZCAqLCB2b2lkICos
IHZvaWQgKik7CgoKICBmcmllbmQgY2xhc3MgX0p2X0J5dGVjb2RlVmVyaWZpZXI7CgoKICBqY2xh
c3MgbmV4dDsKCiAgX0p2X1V0ZjhDb25zdCAqbmFtZTsKCiAgX0p2X3VzaG9ydCBhY2NmbGFnczsK
CiAgamNsYXNzIHN1cGVyY2xhc3M7CgogIF9Kdl9Db25zdGFudHMgY29uc3RhbnRzOwoKCiAgX0p2
X01ldGhvZCAqbWV0aG9kczsKCgogIGpzaG9ydCBtZXRob2RfY291bnQ7CgogIGpzaG9ydCB2dGFi
bGVfbWV0aG9kX2NvdW50OwoKICBfSnZfRmllbGQgKmZpZWxkczsKCiAgamludCBzaXplX2luX2J5
dGVzOwoKICBqc2hvcnQgZmllbGRfY291bnQ7CgogIGpzaG9ydCBzdGF0aWNfZmllbGRfY291bnQ7
CgogIF9Kdl9WVGFibGUgKnZ0YWJsZTsKCiAgX0p2X09mZnNldFRhYmxlICpvdGFibGU7CgogIF9K
dl9NZXRob2RTeW1ib2wgKm90YWJsZV9zeW1zOwoKICBqY2xhc3MgKmludGVyZmFjZXM7CgogIGph
dmE6Omxhbmc6OkNsYXNzTG9hZGVyICpsb2FkZXI7CgogIGpzaG9ydCBpbnRlcmZhY2VfY291bnQ7
CgogIGpieXRlIHN0YXRlOwoKCiAgamF2YTo6bGFuZzo6VGhyZWFkICp0aHJlYWQ7CgogIGpzaG9y
dCBkZXB0aDsKCiAgamNsYXNzICphbmNlc3RvcnM7CgogIF9Kdl9JRGlzcGF0Y2hUYWJsZSAqaWR0
OwoKICBqY2xhc3MgYXJyYXljbGFzczsKCiAgamF2YTo6c2VjdXJpdHk6OlByb3RlY3Rpb25Eb21h
aW4gKnByb3RlY3Rpb25Eb21haW47Cn07CiMgMjcgImluY2x1ZGUvamF2YS1nYy5oIiAyCiMgMSAi
L3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAz
CmV4dGVybiAiQyIgewoKCgoKIyAxICIveDEvZWdjcy9idWlsZC9nY2MvaW5jbHVkZS9zdGRkZWYu
aCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKCmV4dGVybiB2b2lkICog
bWVtY3B5ICh2b2lkICogX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqIF9fcmVzdHJp
Y3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCAqIG1lbW1vdmUg
KHZvaWQgKiBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqIF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIHZvaWQgKiBtZW1jY3B5ICh2b2lkICogX19kZXN0LCBfX2NvbnN0IHZv
aWQgKiBfX3NyYywgaW50IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZv
aWQgKiBtZW1zZXQgKHZvaWQgKiBfX3MsIGludCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgbWVtY21wIChfX2NvbnN0IHZvaWQgKiBfX3MxLCBfX2NvbnN0IHZvaWQgKiBf
X3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgKiBtZW1jaHIgKF9fY29u
c3Qgdm9pZCAqIF9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4g
dm9pZCAqIHJhd21lbWNociAoX19jb25zdCB2b2lkICogX19zLCBpbnQgX19jKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBjaGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJuY3B5
IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3Jj
LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmNhdCAoY2hhciAqX19y
ZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykgdGhyb3cgKCk7
CgoKZXh0ZXJuIGNoYXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4g
aW50IHN0cmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpIHRocm93
ICgpOwoKZXh0ZXJuIGludCBzdHJuY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hh
ciAqX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzdHJjb2xsIChfX2Nv
bnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgdGhyb3cgKCk7CgpleHRlcm4gc2l6
ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgojIDEgIi91c3IvaW5jbHVk
ZS94bG9jYWxlLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAzCnR5cGVkZWYg
c3RydWN0IF9fbG9jYWxlX3N0cnVjdAp7CiAgc3RydWN0IGxvY2FsZV9kYXRhICpfX2xvY2FsZXNb
Nl07CgoKICBjb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsKICBjb25zdCBpbnQg
Kl9fY3R5cGVfdG9sb3dlcjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG91cHBlcjsKfSAqX19sb2Nh
bGVfdDsKIyAxMDAgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKZXh0ZXJuIGludCBfX3N0
cmNvbGxfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIF9fbG9jYWxl
X3QgX19sKSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IF9fc3RyeGZybV9sIChjaGFyICpfX2Rl
c3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sKSB0aHJv
dyAoKTsKCgoKCgpleHRlcm4gY2hhciAqX19zdHJkdXAgKF9fY29uc3QgY2hhciAqX19zKSB0aHJv
dyAoKTsKZXh0ZXJuIGNoYXIgKnN0cmR1cCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gY2hhciAqc3RybmR1cCAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90
IF9fbikgdGhyb3cgKCk7CiMgMTQ2ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNo
YXIgKnN0cmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpOwoKZXh0ZXJu
IGNoYXIgKnN0cnJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBjaGFyICpzdHJjaHJudWwgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBzaXplX3Qgc3RyY3NwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29u
c3QgY2hhciAqX19yZWplY3QpIHRocm93ICgpOwoKCmV4dGVybiBzaXplX3Qgc3Ryc3BuIChfX2Nv
bnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkgdGhyb3cgKCk7CgpleHRlcm4g
Y2hhciAqc3RycGJyayAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQp
IHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cnN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNr
LCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3Ry
Y2FzZXN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxl
KSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJjYXNlc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5
c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIg
KnN0cnRvayAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2RlbGltKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpfX3N0cnRva19yIChjaGFyICpfX3Jl
c3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sIGNoYXIgKipfX3Jl
c3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqc3RydG9rX3IgKGNo
YXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwgY2hh
ciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CiMgMTk0ICIvdXNyL2luY2x1ZGUv
c3RyaW5nLmgiIDMKZXh0ZXJuIHZvaWQgKiBtZW1tZW0gKF9fY29uc3Qgdm9pZCAqIF9faGF5c3Rh
Y2ssIHNpemVfdCBfX2hheXN0YWNrbGVuLCBfX2NvbnN0IHZvaWQgKiBfX25lZWRsZSwgc2l6ZV90
IF9fbmVlZGxlbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkICogX19tZW1wY3B5ICh2b2lk
ICogX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqIF9fcmVzdHJpY3QgX19zcmMsIHNp
emVfdCBfX24pIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgKiBtZW1wY3B5ICh2b2lkICogX19yZXN0
cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqIF9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24p
IHRocm93ICgpOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RybGVuIChfX2NvbnN0IGNoYXIgKl9fcykg
dGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cm5sZW4gKF9fY29uc3QgY2hhciAqX19zdHJp
bmcsIHNpemVfdCBfX21heGxlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3Ig
KGludCBfX2Vycm51bSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpfX3N0cmVycm9yX3IgKGlu
dCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CmV4dGVy
biBjaGFyICpzdHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19i
dWZsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgX19iemVybyAodm9pZCAqIF9fcywgc2l6
ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGJjb3B5IChfX2NvbnN0IHZvaWQgKiBf
X3NyYywgdm9pZCAqIF9fZGVzdCwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQg
Ynplcm8gKHZvaWQgKiBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgYmNt
cCAoX19jb25zdCB2b2lkICogX19zMSwgX19jb25zdCB2b2lkICogX19zMiwgc2l6ZV90IF9fbikg
dGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9f
YykgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnJpbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGlu
dCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fZmZzIChpbnQgX19pKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChjb25zdCkpOwoKCgoKZXh0ZXJuIGludCBmZnNsIChsb25nIGludCBf
X2wpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChjb25zdCkpOwoKX19leHRlbnNpb25fXyBleHRl
cm4gaW50IGZmc2xsIChsb25nIGxvbmcgaW50IF9fbGwpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1
dGVfXyAoKGNvbnN0KSk7CgoKCgpleHRlcm4gaW50IF9fc3RyY2FzZWNtcCAoX19jb25zdCBjaGFy
ICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpIHRocm93ICgpOwpleHRlcm4gaW50IHN0cmNhc2Vj
bXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IHN0cm5jYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAq
X19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgX19zdHJjYXNlY21w
X2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBfX2xvY2FsZV90IF9f
bG9jKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fc3RybmNhc2VjbXBfbCAoX19jb25zdCBjaGFy
ICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2Mp
IHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqc3Ryc2VwIChjaGFyICoqX19yZXN0cmljdCBf
X3N0cmluZ3AsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKSB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gaW50IHN0cnZlcnNjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFy
ICpfX3MyKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3Ryc2lnbmFsIChpbnQgX19zaWcpIHRo
cm93ICgpOwoKCmV4dGVybiBjaGFyICpfX3N0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3Qs
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAq
c3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fc3JjKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpfX3N0cG5jcHkgKGNoYXIgKl9fcmVz
dHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24p
IHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0
LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoK
CgpleHRlcm4gY2hhciAqc3RyZnJ5IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKZXh0ZXJu
IHZvaWQgKiBtZW1mcm9iICh2b2lkICogX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgoK
ZXh0ZXJuIGNoYXIgKmJhc2VuYW1lIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIHRocm93ICgp
OwojIDM1MCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCn0KIyAyOCAiaW5jbHVkZS9qYXZhLWdj
LmgiIDIKCmV4dGVybiAiQyIgdm9pZCAqIEdDX2djal9tYWxsb2Moc2l6ZV90LCB2b2lkICopOwpl
eHRlcm4gIkMiIHZvaWQgKiBHQ19tYWxsb2NfYXRvbWljKHNpemVfdCk7CgpleHRlcm4gIkMiIHZv
aWQgKiBHQ19sb2NhbF9nY2pfbWFsbG9jKHNpemVfdCwgdm9pZCAqKTsKZXh0ZXJuICJDIiB2b2lk
ICogR0NfbG9jYWxfbWFsbG9jX2F0b21pYyhzaXplX3QpOwoKCmlubGluZSB2b2lkICoKX0p2X0Fs
bG9jT2JqIChqc2l6ZSBzaXplLCBqY2xhc3Mga2xhc3MpCnsKCgoKICByZXR1cm4gR0NfbG9jYWxf
Z2NqX21hbGxvYyAoc2l6ZSwga2xhc3MtPnZ0YWJsZSk7CgoKCn0KCmlubGluZSB2b2lkICoKX0p2
X0FsbG9jUHRyRnJlZU9iaiAoanNpemUgc2l6ZSwgamNsYXNzIGtsYXNzKQp7CgoKICAgIHZvaWQg
KiBvYmogPSBHQ19sb2NhbF9tYWxsb2NfYXRvbWljKHNpemUpOwoKCgogICooKF9Kdl9WVGFibGUg
KiopIG9iaikgPSBrbGFzcy0+dnRhYmxlOwoKCgoKCgoKICByZXR1cm4gb2JqOwp9CiMgMjYgIi4u
Ly4uLy4uL2djYy9saWJqYXZhL2luY2x1ZGUvanZtLmgiIDIKCgoKCiMgMSAiLi4vLi4vLi4vZ2Nj
L2xpYmphdmEvZ2NqL2NuaS5oIiAxCiMgMjMgIi4uLy4uLy4uL2djYy9saWJqYXZhL2djai9jbmku
aCIKZXh0ZXJuIGlubGluZSBqb2JqZWN0Ckp2QWxsb2NPYmplY3QgKGpjbGFzcyBjbHMpCnsKICBy
ZXR1cm4gX0p2X0FsbG9jT2JqZWN0IChjbHMsIGNscy0+c2l6ZSgpKTsKfQoKZXh0ZXJuIGlubGlu
ZSBqb2JqZWN0Ckp2QWxsb2NPYmplY3QgKGpjbGFzcyBjbHMsIGpzaXplIHN6KQp7CiAgcmV0dXJu
IF9Kdl9BbGxvY09iamVjdCAoY2xzLCBzeik7Cn0KCmV4dGVybiAiQyIganN0cmluZyBfSnZfTmV3
U3RyaW5nVVRGIChjb25zdCBjaGFyICpieXRlcyk7CmV4dGVybiAiQyIgdm9pZCBfSnZfSW5pdENs
YXNzIChqY2xhc3MpOwoKZXh0ZXJuIGlubGluZSB2b2lkCkp2SW5pdENsYXNzIChqY2xhc3MgY2xz
KQp7CiAgcmV0dXJuIF9Kdl9Jbml0Q2xhc3MgKGNscyk7Cn0KCmV4dGVybiBpbmxpbmUganN0cmlu
ZwpKdkFsbG9jU3RyaW5nIChqc2l6ZSBzeikKewogIHJldHVybiBfSnZfQWxsb2NTdHJpbmcgKHN6
KTsKfQoKZXh0ZXJuIGlubGluZSBqc3RyaW5nCkp2TmV3U3RyaW5nIChjb25zdCBqY2hhciAqY2hh
cnMsIGpzaXplIGxlbikKewogIHJldHVybiBfSnZfTmV3U3RyaW5nIChjaGFycywgbGVuKTsKfQoK
ZXh0ZXJuIGlubGluZSBqc3RyaW5nCkp2TmV3U3RyaW5nTGF0aW4xIChjb25zdCBjaGFyICpieXRl
cywganNpemUgbGVuKQp7CiAgcmV0dXJuIF9Kdl9OZXdTdHJpbmdMYXRpbjEgKGJ5dGVzLCBsZW4p
Owp9CgpleHRlcm4gaW5saW5lIGpzdHJpbmcKSnZOZXdTdHJpbmdMYXRpbjEgKGNvbnN0IGNoYXIg
KmJ5dGVzKQp7CiAgcmV0dXJuIF9Kdl9OZXdTdHJpbmdMYXRpbjEgKGJ5dGVzLCBzdHJsZW4gKGJ5
dGVzKSk7Cn0KCmV4dGVybiBpbmxpbmUgamNoYXIgKgpfSnZfR2V0U3RyaW5nQ2hhcnMgKGpzdHJp
bmcgc3RyKQp7CiAgcmV0dXJuIChqY2hhciopKChjaGFyKikgc3RyLT5kYXRhICsgc3RyLT5ib2Zm
c2V0KTsKfQoKZXh0ZXJuIGlubGluZSBqY2hhcioKSnZHZXRTdHJpbmdDaGFycyAoanN0cmluZyBz
dHIpCnsKICByZXR1cm4gX0p2X0dldFN0cmluZ0NoYXJzIChzdHIpOwp9CgpleHRlcm4gaW5saW5l
IGpzaXplCkp2R2V0U3RyaW5nVVRGTGVuZ3RoIChqc3RyaW5nIHN0cmluZykKewogIHJldHVybiBf
SnZfR2V0U3RyaW5nVVRGTGVuZ3RoIChzdHJpbmcpOwp9CgpleHRlcm4gaW5saW5lIGpzaXplCkp2
R2V0U3RyaW5nVVRGUmVnaW9uIChqc3RyaW5nIHN0ciwganNpemUgc3RhcnQsIGpzaXplIGxlbiwg
Y2hhciAqYnVmKQp7CiAgcmV0dXJuIF9Kdl9HZXRTdHJpbmdVVEZSZWdpb24gKHN0ciwgc3RhcnQs
IGxlbiwgYnVmKTsKfQoKZXh0ZXJuIGlubGluZSBqc3RyaW5nCkp2TmV3U3RyaW5nVVRGIChjb25z
dCBjaGFyICpieXRlcykKewogIHJldHVybiBfSnZfTmV3U3RyaW5nVVRGIChieXRlcyk7Cn0KCmNs
YXNzIEp2U3luY2hyb25pemUKewpwcml2YXRlOgogIGpvYmplY3Qgb2JqOwpwdWJsaWM6CiAgSnZT
eW5jaHJvbml6ZSAoY29uc3Qgam9iamVjdCAmbykgOiBvYmogKG8pCiAgICB7IF9Kdl9Nb25pdG9y
RW50ZXIgKG9iaik7IH0KICB+SnZTeW5jaHJvbml6ZSAoKQogICAgeyBfSnZfTW9uaXRvckV4aXQg
KG9iaik7IH0KfTsKCgpleHRlcm4gaW5saW5lIHZvaWQgKgpKdk1hbGxvYyAoanNpemUgc2l6ZSkK
ewogIHJldHVybiBfSnZfTWFsbG9jIChzaXplKTsKfQoKZXh0ZXJuIGlubGluZSB2b2lkCkp2RnJl
ZSAodm9pZCAqcHRyKQp7CiAgcmV0dXJuIF9Kdl9GcmVlIChwdHIpOwp9CgpleHRlcm4gaW5saW5l
IGppbnQKSnZDcmVhdGVKYXZhVk0gKHZvaWQqIHZtX2FyZ3MpCnsKICByZXR1cm4gX0p2X0NyZWF0
ZUphdmFWTSAodm1fYXJncyk7Cn0KCmV4dGVybiBpbmxpbmUgamF2YTo6bGFuZzo6VGhyZWFkKgpK
dkF0dGFjaEN1cnJlbnRUaHJlYWQgKGpzdHJpbmcgbmFtZSwgamF2YTo6bGFuZzo6VGhyZWFkR3Jv
dXAqIGdyb3VwKQp7CiAgcmV0dXJuIF9Kdl9BdHRhY2hDdXJyZW50VGhyZWFkIChuYW1lLCBncm91
cCk7Cn0KCmV4dGVybiBpbmxpbmUgamludApKdkRldGFjaEN1cnJlbnRUaHJlYWQgKHZvaWQpCnsK
ICByZXR1cm4gX0p2X0RldGFjaEN1cnJlbnRUaHJlYWQgKCk7Cn0KIyAzMSAiLi4vLi4vLi4vZ2Nj
L2xpYmphdmEvaW5jbHVkZS9qdm0uaCIgMgojIDEgIi4uLy4uLy4uL2djYy9saWJqYXZhL2djai9m
aWVsZC5oIiAxCiMgMTUgIi4uLy4uLy4uL2djYy9saWJqYXZhL2djai9maWVsZC5oIgojIDEgImph
dmEvbGFuZy9yZWZsZWN0L0ZpZWxkLmgiIDEKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKIyAxICJq
YXZhL2xhbmcvcmVmbGVjdC9BY2Nlc3NpYmxlT2JqZWN0LmgiIDEKCgoKCgojcHJhZ21hIGludGVy
ZmFjZQoKCgoKY2xhc3MgOjpqYXZhOjpsYW5nOjpyZWZsZWN0OjpBY2Nlc3NpYmxlT2JqZWN0IDog
cHVibGljIDo6amF2YTo6bGFuZzo6T2JqZWN0CnsKcHVibGljOgogIEFjY2Vzc2libGVPYmplY3Qg
KCk7CnB1YmxpYzoKICB2aXJ0dWFsIGpib29sZWFuIGlzQWNjZXNzaWJsZSAoKSB7IHJldHVybiBm
bGFnOyB9CiAgc3RhdGljIHZvaWQgc2V0QWNjZXNzaWJsZSAoSkFycmF5PCA6OmphdmE6Omxhbmc6
OnJlZmxlY3Q6OkFjY2Vzc2libGVPYmplY3QgKj4gKiwgamJvb2xlYW4pOwogIHZpcnR1YWwgdm9p
ZCBzZXRBY2Nlc3NpYmxlIChqYm9vbGVhbik7CnByaXZhdGU6CiAgc3RhdGljIHZvaWQgY2hlY2tQ
ZXJtaXNzaW9uICgpOwogIHZvaWQgc2VjdXJlU2V0QWNjZXNzaWJsZSAoamJvb2xlYW4pOwpwdWJs
aWM6CiAgamJvb2xlYW4gZmxhZzsKcHVibGljOgoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFz
cyBjbGFzcyQ7Cn07CiMgOSAiamF2YS9sYW5nL3JlZmxlY3QvRmllbGQuaCIgMgoKY2xhc3MgOjpq
YXZhOjpsYW5nOjpyZWZsZWN0OjpGaWVsZCA6IHB1YmxpYyA6OmphdmE6Omxhbmc6OnJlZmxlY3Q6
OkFjY2Vzc2libGVPYmplY3QKewpwdWJsaWM6CiAgRmllbGQgKCk7CnB1YmxpYzoKICBqYm9vbGVh
biBlcXVhbHMgKDo6amF2YTo6bGFuZzo6T2JqZWN0ICopOwogIDo6amF2YTo6bGFuZzo6Q2xhc3Mg
KmdldERlY2xhcmluZ0NsYXNzICgpIHsgcmV0dXJuIGRlY2xhcmluZ0NsYXNzOyB9CiAgOjpqYXZh
OjpsYW5nOjpTdHJpbmcgKmdldE5hbWUgKCk7CiAgOjpqYXZhOjpsYW5nOjpDbGFzcyAqZ2V0VHlw
ZSAoKTsKICBqaW50IGdldE1vZGlmaWVycyAoKTsKICBqaW50IGhhc2hDb2RlICgpOwogIGpib29s
ZWFuIGdldEJvb2xlYW4gKDo6amF2YTo6bGFuZzo6T2JqZWN0ICopOwogIGpjaGFyIGdldENoYXIg
KDo6amF2YTo6bGFuZzo6T2JqZWN0ICopOwogIGpieXRlIGdldEJ5dGUgKDo6amF2YTo6bGFuZzo6
T2JqZWN0ICopOwogIGpzaG9ydCBnZXRTaG9ydCAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKik7CiAg
amludCBnZXRJbnQgKDo6amF2YTo6bGFuZzo6T2JqZWN0ICopOwogIGpsb25nIGdldExvbmcgKDo6
amF2YTo6bGFuZzo6T2JqZWN0ICopOwogIGpmbG9hdCBnZXRGbG9hdCAoOjpqYXZhOjpsYW5nOjpP
YmplY3QgKik7CiAgamRvdWJsZSBnZXREb3VibGUgKDo6amF2YTo6bGFuZzo6T2JqZWN0ICopOwog
IDo6amF2YTo6bGFuZzo6T2JqZWN0ICpnZXQgKDo6amF2YTo6bGFuZzo6T2JqZWN0ICopOwpwcml2
YXRlOgogIGpib29sZWFuIGdldEJvb2xlYW4gKDo6amF2YTo6bGFuZzo6Q2xhc3MgKiwgOjpqYXZh
OjpsYW5nOjpPYmplY3QgKik7CiAgamNoYXIgZ2V0Q2hhciAoOjpqYXZhOjpsYW5nOjpDbGFzcyAq
LCA6OmphdmE6Omxhbmc6Ok9iamVjdCAqKTsKICBqYnl0ZSBnZXRCeXRlICg6OmphdmE6Omxhbmc6
OkNsYXNzICosIDo6amF2YTo6bGFuZzo6T2JqZWN0ICopOwogIGpzaG9ydCBnZXRTaG9ydCAoOjpq
YXZhOjpsYW5nOjpDbGFzcyAqLCA6OmphdmE6Omxhbmc6Ok9iamVjdCAqKTsKICBqaW50IGdldElu
dCAoOjpqYXZhOjpsYW5nOjpDbGFzcyAqLCA6OmphdmE6Omxhbmc6Ok9iamVjdCAqKTsKICBqbG9u
ZyBnZXRMb25nICg6OmphdmE6Omxhbmc6OkNsYXNzICosIDo6amF2YTo6bGFuZzo6T2JqZWN0ICop
OwogIGpmbG9hdCBnZXRGbG9hdCAoOjpqYXZhOjpsYW5nOjpDbGFzcyAqLCA6OmphdmE6Omxhbmc6
Ok9iamVjdCAqKTsKICBqZG91YmxlIGdldERvdWJsZSAoOjpqYXZhOjpsYW5nOjpDbGFzcyAqLCA6
OmphdmE6Omxhbmc6Ok9iamVjdCAqKTsKICA6OmphdmE6Omxhbmc6Ok9iamVjdCAqZ2V0ICg6Omph
dmE6Omxhbmc6OkNsYXNzICosIDo6amF2YTo6bGFuZzo6T2JqZWN0ICopOwpwdWJsaWM6CiAgdm9p
ZCBzZXRCeXRlICg6OmphdmE6Omxhbmc6Ok9iamVjdCAqLCBqYnl0ZSk7CiAgdm9pZCBzZXRTaG9y
dCAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKiwganNob3J0KTsKICB2b2lkIHNldEludCAoOjpqYXZh
OjpsYW5nOjpPYmplY3QgKiwgamludCk7CiAgdm9pZCBzZXRMb25nICg6OmphdmE6Omxhbmc6Ok9i
amVjdCAqLCBqbG9uZyk7CiAgdm9pZCBzZXRGbG9hdCAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKiwg
amZsb2F0KTsKICB2b2lkIHNldERvdWJsZSAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKiwgamRvdWJs
ZSk7CiAgdm9pZCBzZXRDaGFyICg6OmphdmE6Omxhbmc6Ok9iamVjdCAqLCBqY2hhcik7CiAgdm9p
ZCBzZXRCb29sZWFuICg6OmphdmE6Omxhbmc6Ok9iamVjdCAqLCBqYm9vbGVhbik7CnByaXZhdGU6
CiAgdm9pZCBzZXRCeXRlICg6OmphdmE6Omxhbmc6OkNsYXNzICosIDo6amF2YTo6bGFuZzo6T2Jq
ZWN0ICosIGpieXRlKTsKICB2b2lkIHNldFNob3J0ICg6OmphdmE6Omxhbmc6OkNsYXNzICosIDo6
amF2YTo6bGFuZzo6T2JqZWN0ICosIGpzaG9ydCk7CiAgdm9pZCBzZXRJbnQgKDo6amF2YTo6bGFu
Zzo6Q2xhc3MgKiwgOjpqYXZhOjpsYW5nOjpPYmplY3QgKiwgamludCk7CiAgdm9pZCBzZXRMb25n
ICg6OmphdmE6Omxhbmc6OkNsYXNzICosIDo6amF2YTo6bGFuZzo6T2JqZWN0ICosIGpsb25nKTsK
ICB2b2lkIHNldEZsb2F0ICg6OmphdmE6Omxhbmc6OkNsYXNzICosIDo6amF2YTo6bGFuZzo6T2Jq
ZWN0ICosIGpmbG9hdCk7CiAgdm9pZCBzZXREb3VibGUgKDo6amF2YTo6bGFuZzo6Q2xhc3MgKiwg
OjpqYXZhOjpsYW5nOjpPYmplY3QgKiwgamRvdWJsZSk7CiAgdm9pZCBzZXRDaGFyICg6OmphdmE6
Omxhbmc6OkNsYXNzICosIDo6amF2YTo6bGFuZzo6T2JqZWN0ICosIGpjaGFyKTsKICB2b2lkIHNl
dEJvb2xlYW4gKDo6amF2YTo6bGFuZzo6Q2xhc3MgKiwgOjpqYXZhOjpsYW5nOjpPYmplY3QgKiwg
amJvb2xlYW4pOwogIHZvaWQgc2V0ICg6OmphdmE6Omxhbmc6OkNsYXNzICosIDo6amF2YTo6bGFu
Zzo6T2JqZWN0ICosIDo6amF2YTo6bGFuZzo6T2JqZWN0ICosIDo6amF2YTo6bGFuZzo6Q2xhc3Mg
Kik7CnB1YmxpYzoKICB2b2lkIHNldCAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKiwgOjpqYXZhOjps
YW5nOjpPYmplY3QgKik7CnByaXZhdGU6CiAgdm9pZCBzZXQgKDo6amF2YTo6bGFuZzo6Q2xhc3Mg
KiwgOjpqYXZhOjpsYW5nOjpPYmplY3QgKiwgOjpqYXZhOjpsYW5nOjpPYmplY3QgKik7CnB1Ymxp
YzoKICA6OmphdmE6Omxhbmc6OlN0cmluZyAqdG9TdHJpbmcgKCk7CnByaXZhdGU6CiAgOjpqYXZh
OjpsYW5nOjpDbGFzcyAqZGVjbGFyaW5nQ2xhc3M7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKm5h
bWU7CiAgamludCBvZmZzZXQ7CiAgZnJpZW5kIGpmaWVsZElEIF9Kdl9Gcm9tUmVmbGVjdGVkRmll
bGQgKGphdmE6Omxhbmc6OnJlZmxlY3Q6OkZpZWxkICopOwogIGZyaWVuZCBqb2JqZWN0IF9Kdl9K
TklfVG9SZWZsZWN0ZWRGaWVsZCAoX0p2X0pOSUVudiosIGpjbGFzcywgamZpZWxkSUQsIGpib29s
ZWFuKTsKICBmcmllbmQgY2xhc3MgamF2YTo6bGFuZzo6Q2xhc3M7CnB1YmxpYzoKCiAgc3RhdGlj
IDo6amF2YTo6bGFuZzo6Q2xhc3MgY2xhc3MkOwp9OwojIDE2ICIuLi8uLi8uLi9nY2MvbGliamF2
YS9nY2ovZmllbGQuaCIgMgoKIyAxICJnbnUvZ2NqL1Jhd0RhdGEuaCIgMQoKCgoKCiNwcmFnbWEg
aW50ZXJmYWNlCgoKCmV4dGVybiAiSmF2YSIKewogIG5hbWVzcGFjZSBnbnUKICB7CiAgICBuYW1l
c3BhY2UgZ2NqCiAgICB7CiAgICAgIGNsYXNzIFJhd0RhdGE7CiAgICB9CiAgfQp9OwoKY2xhc3Mg
OjpnbnU6Omdjajo6UmF3RGF0YSA6IHB1YmxpYyA6OmphdmE6Omxhbmc6Ok9iamVjdAp7CnByaXZh
dGU6CiAgUmF3RGF0YSAoKTsKcHVibGljOgoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBj
bGFzcyQ7Cn07CiMgMTggIi4uLy4uLy4uL2djYy9saWJqYXZhL2djai9maWVsZC5oIiAyCgoKCgpz
dHJ1Y3QgX0p2X0ZpZWxkCnsKCiAgc3RydWN0IF9Kdl9VdGY4Q29uc3QqIG5hbWU7CgoKCgogIGpj
bGFzcyB0eXBlOwoKICBfSnZfdXNob3J0IGZsYWdzOwoKCgoKICBfSnZfdXNob3J0IGJzaXplOwoK
CiAgdW5pb24gewogICAgamludCBib2Zmc2V0OwogICAgdm9pZCogYWRkcjsKICB9IHU7CgoKICBq
Ym9vbGVhbiBpc1Jlc29sdmVkICgpCiAgeyByZXR1cm4gISAoZmxhZ3MgJiAweDgwMDApOyB9Cgog
IHB1YmxpYzoKCiAgaW50IGdldE9mZnNldCAoKSB7IHJldHVybiB1LmJvZmZzZXQ7IH0KCiAgam9i
amVjdCBnZXRPYmplY3RGaWVsZCAoam9iamVjdCBvYmopCiAgeyByZXR1cm4gKihqb2JqZWN0ICop
KChjaGFyICopb2JqICsgZ2V0T2Zmc2V0ICgpKTsgfQoKICBqZmllbGRJRCBnZXROZXh0RmllbGQg
KCkgeyByZXR1cm4gdGhpcyArIDE7IH0KCiAgamJvb2xlYW4gaXNSZWYgKCkKICAgIHsKICAgICAg
aWYgKCFpc1Jlc29sdmVkICgpKQogICAgICAgIHsKICAgICAgICAgIGNoYXIgZmlyc3QgPSAoKF9K
dl9VdGY4Q29uc3QqKXR5cGUpLT5kYXRhWzBdOwogICAgICAgICAgcmV0dXJuIGZpcnN0ID09ICdb
JyB8fCBmaXJzdCA9PSAnTCc7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAg
ICAgcmV0dXJuICEgdHlwZS0+aXNQcmltaXRpdmUgKCk7CiAgICAgICAgfQogICAgfQoKICBqY2xh
c3MgZ2V0Q2xhc3MgKCkKICB7CgoKCiAgICByZXR1cm4gdHlwZTsKICB9CgoKICBpbnQgZ2V0TW9k
aWZpZXJzKCkKICB7CiAgICByZXR1cm4gZmxhZ3MgJiBqYXZhOjpsYW5nOjpyZWZsZWN0OjpNb2Rp
Zmllcjo6QUxMX0ZMQUdTOwogIH0KCgoKCgogIF9Kdl9VdGY4Q29uc3QgKiBnZXROYW1lVXRmOENv
bnN0IChqY2xhc3MpIHsgcmV0dXJuIG5hbWU7IH0KCgp9OwoKCgppbmxpbmUgamJ5dGUKX0p2X0dl
dFN0YXRpY0J5dGVGaWVsZCAoamNsYXNzLCBfSnZfRmllbGQqIGZpZWxkKQp7CiAgcmV0dXJuICog
KGpieXRlICopIGZpZWxkLT51LmFkZHI7Cn0KCmlubGluZSBqc2hvcnQKX0p2X0dldFN0YXRpY1No
b3J0RmllbGQgKGpjbGFzcywgX0p2X0ZpZWxkKiBmaWVsZCkKewogIHJldHVybiAqIChqc2hvcnQg
KikgZmllbGQtPnUuYWRkcjsKfQoKaW5saW5lIGppbnQKX0p2X0dldFN0YXRpY0ludEZpZWxkIChq
Y2xhc3MsIF9Kdl9GaWVsZCogZmllbGQpCnsKICByZXR1cm4gKiAoamludCAqKSBmaWVsZC0+dS5h
ZGRyOwp9CgppbmxpbmUgamxvbmcKX0p2X0dldFN0YXRpY0xvbmdGaWVsZCAoamNsYXNzLCBfSnZf
RmllbGQqIGZpZWxkKQp7CiAgcmV0dXJuICogKGpsb25nICopIGZpZWxkLT51LmFkZHI7Cn0KCmlu
bGluZSBqb2JqZWN0Cl9Kdl9HZXRPYmplY3RGaWVsZCAoam9iamVjdCBvYmosIF9Kdl9GaWVsZCog
ZmllbGQpCnsKICByZXR1cm4gZmllbGQtPmdldE9iamVjdEZpZWxkIChvYmopOwp9CgppbmxpbmUg
amJ5dGUKX0p2X0dldEJ5dGVGaWVsZCAoam9iamVjdCBvYmosIF9Kdl9GaWVsZCogZmllbGQpCnsK
ICByZXR1cm4gKiAoamJ5dGUgKikgKChjaGFyKikgb2JqICsgZmllbGQtPmdldE9mZnNldCAoKSk7
Cn0KCmlubGluZSBqc2hvcnQKX0p2X0dldFNob3J0RmllbGQgKGpvYmplY3Qgb2JqLCBfSnZfRmll
bGQqIGZpZWxkKQp7CiAgcmV0dXJuICogKGpzaG9ydCAqKSAoKGNoYXIqKSBvYmogKyBmaWVsZC0+
Z2V0T2Zmc2V0ICgpKTsKfQppbmxpbmUgamludApfSnZfR2V0SW50RmllbGQgKGpvYmplY3Qgb2Jq
LCBfSnZfRmllbGQqIGZpZWxkKQp7CiAgcmV0dXJuICogKGppbnQgKikgKChjaGFyKikgb2JqICsg
ZmllbGQtPmdldE9mZnNldCAoKSk7Cn0KaW5saW5lIGpsb25nCl9Kdl9HZXRMb25nRmllbGQgKGpv
YmplY3Qgb2JqLCBfSnZfRmllbGQqIGZpZWxkKQp7CiAgcmV0dXJuICogKGpsb25nICopICgoY2hh
ciopIG9iaiArIGZpZWxkLT5nZXRPZmZzZXQgKCkpOwp9CgpleHRlcm4gaW5saW5lIGpmaWVsZElE
Cl9Kdl9Gcm9tUmVmbGVjdGVkRmllbGQgKGphdmE6Omxhbmc6OnJlZmxlY3Q6OkZpZWxkICpmaWVs
ZCkKewogIHJldHVybiAoamZpZWxkSUQpICgoY2hhciAqKSBmaWVsZC0+ZGVjbGFyaW5nQ2xhc3Mt
PmZpZWxkcyArIGZpZWxkLT5vZmZzZXQpOwp9CgoKCmV4dGVybiBpbmxpbmUgamZpZWxkSUQKSnZH
ZXRGaXJzdEluc3RhbmNlRmllbGQgKGpjbGFzcyBrbGFzcykKewogIHJldHVybiAmKGtsYXNzLT5m
aWVsZHNba2xhc3MtPnN0YXRpY19maWVsZF9jb3VudF0pOwp9CgpleHRlcm4gaW5saW5lIGppbnQK
SnZOdW1JbnN0YW5jZUZpZWxkcyAoamNsYXNzIGtsYXNzKQp7CiAgcmV0dXJuIGtsYXNzLT5maWVs
ZF9jb3VudCAtIGtsYXNzLT5zdGF0aWNfZmllbGRfY291bnQ7Cn0KCmV4dGVybiBpbmxpbmUgamZp
ZWxkSUQKSnZHZXRGaXJzdFN0YXRpY0ZpZWxkIChqY2xhc3Mga2xhc3MpCnsKICByZXR1cm4gJihr
bGFzcy0+ZmllbGRzWzBdKTsKfQoKZXh0ZXJuIGlubGluZSBqaW50Ckp2TnVtU3RhdGljRmllbGRz
IChqY2xhc3Mga2xhc3MpCnsKICByZXR1cm4ga2xhc3MtPnN0YXRpY19maWVsZF9jb3VudDsKfQoK
ZXh0ZXJuIGlubGluZSBqYm9vbGVhbgpKdkZpZWxkSXNSZWYgKGpmaWVsZElEIGZpZWxkKQp7CiAg
cmV0dXJuIGZpZWxkLT5pc1JlZiAoKSAmJiBmaWVsZC0+dHlwZSAhPSAmZ251OjpnY2o6OlJhd0Rh
dGE6OmNsYXNzJDsKfQoKZXh0ZXJuIGlubGluZSBqb2JqZWN0Ckp2R2V0T2JqZWN0RmllbGQgKGpv
YmplY3Qgb2JqLCBfSnZfRmllbGQqIGZpZWxkKQp7CiAgcmV0dXJuIF9Kdl9HZXRPYmplY3RGaWVs
ZCAob2JqLCBmaWVsZCk7Cn0KIyAzMiAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvaW5jbHVkZS9qdm0u
aCIgMgoKCnN0cnVjdCBfSnZfVlRhYmxlCnsKCgoKICB0eXBlZGVmIHZvaWQgKnZ0YWJsZV9lbHQ7
CgogIGpjbGFzcyBjbGFzOwogIHZvaWQgKmdjX2Rlc2NyOwoKCgogIHZ0YWJsZV9lbHQgbWV0aG9k
WzFdOwojIDYwICIuLi8uLi8uLi9nY2MvbGliamF2YS9pbmNsdWRlL2p2bS5oIgogIHZvaWQgKmdl
dF9tZXRob2QoaW50IGkpIHsgcmV0dXJuIG1ldGhvZFtpXTsgfQogIHZvaWQgc2V0X21ldGhvZChp
bnQgaSwgdm9pZCAqZnB0cikgeyBtZXRob2RbaV0gPSBmcHRyOyB9CiAgdm9pZCAqZ2V0X2ZpbmFs
aXplcigpIHsgcmV0dXJuIGdldF9tZXRob2QoMCk7IH0KCgogIHN0YXRpYyBzaXplX3QgdnRhYmxl
X2VsdF9zaXplKCkgeyByZXR1cm4gc2l6ZW9mKHZ0YWJsZV9lbHQpOyB9CgoKICBzdGF0aWMgamlu
dCBpZHhfdG9fb2Zmc2V0IChpbnQgaW5kZXgpCiAgewogICAgcmV0dXJuICgyICogc2l6ZW9mICh2
b2lkICopKSArIChpbmRleCAqIHZ0YWJsZV9lbHRfc2l6ZSAoKSk7CiAgfQogIHN0YXRpYyBfSnZf
VlRhYmxlICpuZXdfdnRhYmxlIChpbnQgY291bnQpOwp9OwoKCgoKCgpzdHJ1Y3QgX0p2X0FycmF5
VlRhYmxlIDogcHVibGljIF9Kdl9WVGFibGUKewogIHZ0YWJsZV9lbHQgZXh0cmFfbWV0aG9kWzUg
LSAxXTsKfTsKCnVuaW9uIF9Kdl93b3JkCnsKICBqb2JqZWN0IG87CiAgamludCBpOwogIGpmbG9h
dCBmOwogIGppbnQgaWFbMV07CiAgdm9pZCogcDsKIyAxMDAgIi4uLy4uLy4uL2djYy9saWJqYXZh
L2luY2x1ZGUvanZtLmgiCiAgamNsYXNzIGNsYXp6OwogIGpzdHJpbmcgc3RyaW5nOwogIHN0cnVj
dCBfSnZfRmllbGQgKmZpZWxkOwogIHN0cnVjdCBfSnZfVXRmOENvbnN0ICp1dGY4OwogIHN0cnVj
dCBfSnZfUmVzb2x2ZWRNZXRob2QgKnJtZXRob2Q7Cn07Cgp1bmlvbiBfSnZfd29yZDIKewogIGpp
bnQgaWFbMl07CiAgamxvbmcgbDsKICBqZG91YmxlIGQ7Cn07CiMgMTI5ICIuLi8uLi8uLi9nY2Mv
bGliamF2YS9pbmNsdWRlL2p2bS5oIgpleHRlcm4gaW50IF9Kdl9zdHJMZW5ndGhVdGY4KGNoYXIq
IHN0ciwgaW50IGxlbik7Cgp0eXBlZGVmIHN0cnVjdCBfSnZfVXRmOENvbnN0IFV0ZjhDb25zdDsK
X0p2X1V0ZjhDb25zdCAqX0p2X21ha2VVdGY4Q29uc3QgKGNoYXIgKnMsIGludCBsZW4pOwpfSnZf
VXRmOENvbnN0ICpfSnZfbWFrZVV0ZjhDb25zdCAoanN0cmluZyBzdHJpbmcpOwpleHRlcm4gamJv
b2xlYW4gX0p2X2VxdWFsVXRmOENvbnN0cyAoX0p2X1V0ZjhDb25zdCAqLCBfSnZfVXRmOENvbnN0
ICopOwpleHRlcm4gamJvb2xlYW4gX0p2X2VxdWFsIChfSnZfVXRmOENvbnN0ICosIGpzdHJpbmcs
IGppbnQpOwpleHRlcm4gamJvb2xlYW4gX0p2X2VxdWFsbiAoX0p2X1V0ZjhDb25zdCAqLCBqc3Ry
aW5nLCBqaW50KTsKCgoKCm5hbWVzcGFjZSBnY2oKewoKICBleHRlcm4gX0p2X1V0ZjhDb25zdCAq
dm9pZF9zaWduYXR1cmU7CiAgZXh0ZXJuIF9Kdl9VdGY4Q29uc3QgKmNsaW5pdF9uYW1lOwogIGV4
dGVybiBfSnZfVXRmOENvbnN0ICppbml0X25hbWU7CiAgZXh0ZXJuIF9Kdl9VdGY4Q29uc3QgKmZp
bml0X25hbWU7CgoKICBleHRlcm4gYm9vbCBydW50aW1lSW5pdGlhbGl6ZWQ7Cn07CgoKdHlwZWRl
ZiB2b2lkIF9Kdl9GaW5hbGl6ZXJGdW5jIChqb2JqZWN0KTsKCgp2b2lkICpfSnZfQWxsb2NPYmog
KGpzaXplIHNpemUsIGpjbGFzcyBjbCkgX19hdHRyaWJ1dGVfXygoX19tYWxsb2NfXykpOwoKCnZv
aWQgKl9Kdl9BbGxvY1B0ckZyZWVPYmogKGpzaXplIHNpemUsIGpjbGFzcyBjbCkgX19hdHRyaWJ1
dGVfXygoX19tYWxsb2NfXykpOwoKdm9pZCAqX0p2X0FsbG9jQXJyYXkgKGpzaXplIHNpemUsIGpj
bGFzcyBjbCkgX19hdHRyaWJ1dGVfXygoX19tYWxsb2NfXykpOwoKdm9pZCAqX0p2X0FsbG9jQnl0
ZXMgKGpzaXplIHNpemUpIF9fYXR0cmlidXRlX18oKF9fbWFsbG9jX18pKTsKCgp2b2lkICpfSnZf
QWxsb2NSYXdPYmogKGpzaXplIHNpemUpIF9fYXR0cmlidXRlX18oKF9fbWFsbG9jX18pKTsKCnZv
aWQgX0p2X1Rocm93Tm9NZW1vcnkoKSBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKTsKCgp2
b2lkICpfSnZfQWxsb2NUcmFjZU9uZSAoanNpemUgc2l6ZSApOwoKdm9pZCAqX0p2X0FsbG9jVHJh
Y2VUd28gKGpzaXplIHNpemUgKTsKCnZvaWQgX0p2X0luaXRHQyAodm9pZCk7Cgp2b2lkIF9Kdl9S
ZWdpc3RlckZpbmFsaXplciAodm9pZCAqb2JqZWN0LCBfSnZfRmluYWxpemVyRnVuYyAqbWV0aG9k
KTsKCnZvaWQgKiBfSnZfQnVpbGRHQ0Rlc2NyKGpjbGFzcyk7CgoKCnZvaWQgKl9Kdl9NYWxsb2NV
bmNoZWNrZWQgKGpzaXplIHNpemUpIF9fYXR0cmlidXRlX18oKF9fbWFsbG9jX18pKTsKCgoKdm9p
ZCBfSnZfR0NJbml0aWFsaXplRmluYWxpemVycyAodm9pZCAoKm5vdGlmaWVyKSAodm9pZCkpOwoK
dm9pZCBfSnZfUnVuRmluYWxpemVycyAodm9pZCk7Cgp2b2lkIF9Kdl9SdW5BbGxGaW5hbGl6ZXJz
ICh2b2lkKTsKCnZvaWQgX0p2X1J1bkdDICh2b2lkKTsKCnZvaWQgX0p2X0Rpc2FibGVHQyAodm9p
ZCk7CnZvaWQgX0p2X0VuYWJsZUdDICh2b2lkKTsKCgoKdm9pZCBfSnZfR0NSZWdpc3RlckRpc2Fw
cGVhcmluZ0xpbmsgKGpvYmplY3QgKm9ianApOwoKCmpib29sZWFuIF9Kdl9HQ0NhblJlY2xhaW1T
b2Z0UmVmZXJlbmNlIChqb2JqZWN0IG9iaik7CgoKbG9uZyBfSnZfR0NUb3RhbE1lbW9yeSAodm9p
ZCk7Cgpsb25nIF9Kdl9HQ0ZyZWVNZW1vcnkgKHZvaWQpOwoKCgp2b2lkIF9Kdl9HQ1NldEluaXRp
YWxIZWFwU2l6ZSAoc2l6ZV90IHNpemUpOwoKCgp2b2lkIF9Kdl9HQ1NldE1heGltdW1IZWFwU2l6
ZSAoc2l6ZV90IHNpemUpOwoKCgoKdm9pZCBfSnZfU2V0SW5pdGlhbEhlYXBTaXplIChjb25zdCBj
aGFyICphcmcpOwoKCgoKdm9pZCBfSnZfU2V0TWF4aW11bUhlYXBTaXplIChjb25zdCBjaGFyICph
cmcpOwoKZXh0ZXJuICJDIiB2b2lkIEp2UnVuTWFpbiAoamNsYXNzIGtsYXNzLCBpbnQgYXJnYywg
Y29uc3QgY2hhciAqKmFyZ3YpOwp2b2lkIF9Kdl9SdW5NYWluIChqY2xhc3Mga2xhc3MsIGNvbnN0
IGNoYXIgKm5hbWUsIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKICAgICAgICAgICAgICAg
ICAgYm9vbCBpc19qYXIpOwoKCgoKCgppbmxpbmUgX0p2X1ZUYWJsZSAqCl9Kdl9WVGFibGU6Om5l
d192dGFibGUgKGludCBjb3VudCkKewogIHNpemVfdCBzaXplID0gc2l6ZW9mKF9Kdl9WVGFibGUp
ICsgKGNvdW50IC0gMSkgKiB2dGFibGVfZWx0X3NpemUgKCk7CiAgcmV0dXJuIChfSnZfVlRhYmxl
ICopIF9Kdl9BbGxvY0J5dGVzIChzaXplKTsKfQoKCmlubGluZSBqaW50Cl9Kdl9IYXNoQ29kZSAo
am9iamVjdCBvYmopCnsKCgoKICByZXR1cm4gKGppbnQpICgodW5zaWduZWQgbG9uZykgb2JqICUg
MHg3ZmZmZmZmZik7Cn0KCgoKCgoKaW5saW5lIGNoYXIgKgpfSnZfR2V0QXJyYXlFbGVtZW50RnJv
bUVsZW1lbnRUeXBlIChqb2JqZWN0IGFycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqY2xhc3MgZWxlbWVudF90eXBlKQp7CiAgY2hhciAqZWx0czsKICBpZiAoZWxlbWVu
dF90eXBlID09ICgmIF9Kdl9ieXRlQ2xhc3MpKQogICAgZWx0cyA9IChjaGFyICopIGVsZW1lbnRz
ICgoamJ5dGVBcnJheSkgYXJyYXkpOwogIGVsc2UgaWYgKGVsZW1lbnRfdHlwZSA9PSAoJiBfSnZf
c2hvcnRDbGFzcykpCiAgICBlbHRzID0gKGNoYXIgKikgZWxlbWVudHMgKChqc2hvcnRBcnJheSkg
YXJyYXkpOwogIGVsc2UgaWYgKGVsZW1lbnRfdHlwZSA9PSAoJiBfSnZfaW50Q2xhc3MpKQogICAg
ZWx0cyA9IChjaGFyICopIGVsZW1lbnRzICgoamludEFycmF5KSBhcnJheSk7CiAgZWxzZSBpZiAo
ZWxlbWVudF90eXBlID09ICgmIF9Kdl9sb25nQ2xhc3MpKQogICAgZWx0cyA9IChjaGFyICopIGVs
ZW1lbnRzICgoamxvbmdBcnJheSkgYXJyYXkpOwogIGVsc2UgaWYgKGVsZW1lbnRfdHlwZSA9PSAo
JiBfSnZfYm9vbGVhbkNsYXNzKSkKICAgIGVsdHMgPSAoY2hhciAqKSBlbGVtZW50cyAoKGpib29s
ZWFuQXJyYXkpIGFycmF5KTsKICBlbHNlIGlmIChlbGVtZW50X3R5cGUgPT0gKCYgX0p2X2NoYXJD
bGFzcykpCiAgICBlbHRzID0gKGNoYXIgKikgZWxlbWVudHMgKChqY2hhckFycmF5KSBhcnJheSk7
CiAgZWxzZSBpZiAoZWxlbWVudF90eXBlID09ICgmIF9Kdl9mbG9hdENsYXNzKSkKICAgIGVsdHMg
PSAoY2hhciAqKSBlbGVtZW50cyAoKGpmbG9hdEFycmF5KSBhcnJheSk7CiAgZWxzZSBpZiAoZWxl
bWVudF90eXBlID09ICgmIF9Kdl9kb3VibGVDbGFzcykpCiAgICBlbHRzID0gKGNoYXIgKikgZWxl
bWVudHMgKChqZG91YmxlQXJyYXkpIGFycmF5KTsKICBlbHNlCiAgICBlbHRzID0gKGNoYXIgKikg
ZWxlbWVudHMgKChqb2JqZWN0QXJyYXkpIGFycmF5KTsKICByZXR1cm4gZWx0czsKfQoKZXh0ZXJu
ICJDIiB2b2lkIF9Kdl9UaHJvd0JhZEFycmF5SW5kZXggKGppbnQgYmFkX2luZGV4KTsKZXh0ZXJu
ICJDIiB2b2lkIF9Kdl9UaHJvd051bGxQb2ludGVyRXhjZXB0aW9uICh2b2lkKTsKZXh0ZXJuICJD
IiBqb2JqZWN0IF9Kdl9OZXdBcnJheSAoamludCB0eXBlLCBqaW50IHNpemUpCiAgX19hdHRyaWJ1
dGVfXygoX19tYWxsb2NfXykpOwpleHRlcm4gIkMiIGpvYmplY3QgX0p2X05ld011bHRpQXJyYXkg
KGpjbGFzcyBrbGFzcywgamludCBkaW1zLCAuLi4pCiAgX19hdHRyaWJ1dGVfXygoX19tYWxsb2Nf
XykpOwpleHRlcm4gIkMiIHZvaWQgKl9Kdl9DaGVja0Nhc3QgKGpjbGFzcyBrbGFzcywgam9iamVj
dCBvYmopOwpleHRlcm4gIkMiIHZvaWQgKl9Kdl9Mb29rdXBJbnRlcmZhY2VNZXRob2QgKGpjbGFz
cyBrbGFzcywgVXRmOENvbnN0ICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVXRmOENvbnN0ICpzaWduYXR1cmUpOwpleHRlcm4gIkMiIHZvaWQgKl9Kdl9M
b29rdXBJbnRlcmZhY2VNZXRob2RJZHggKGpjbGFzcyBrbGFzcywgamNsYXNzIGlmYWNlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtZXRoX2lkeCk7
CmV4dGVybiAiQyIgdm9pZCBfSnZfQ2hlY2tBcnJheVN0b3JlIChqb2JqZWN0IGFycmF5LCBqb2Jq
ZWN0IG9iaik7CmV4dGVybiAiQyIgdm9pZCBfSnZfUmVnaXN0ZXJDbGFzcyAoamNsYXNzIGtsYXNz
KTsKZXh0ZXJuICJDIiB2b2lkIF9Kdl9SZWdpc3RlckNsYXNzZXMgKGpjbGFzcyAqY2xhc3Nlcyk7
CmV4dGVybiAiQyIgdm9pZCBfSnZfUmVnaXN0ZXJSZXNvdXJjZSAodm9pZCAqdnB0cik7CmV4dGVy
biB2b2lkIF9Kdl9VbnJlZ2lzdGVyQ2xhc3MgKF9Kdl9VdGY4Q29uc3QqLCBqYXZhOjpsYW5nOjpD
bGFzc0xvYWRlciopOwpleHRlcm4gdm9pZCBfSnZfUmVzb2x2ZUZpZWxkIChfSnZfRmllbGQgKiwg
amF2YTo6bGFuZzo6Q2xhc3NMb2FkZXIqKTsKCmV4dGVybiBqY2xhc3MgX0p2X0ZpbmRDbGFzcyAo
X0p2X1V0ZjhDb25zdCAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhOjps
YW5nOjpDbGFzc0xvYWRlciAqbG9hZGVyKTsKZXh0ZXJuIGpjbGFzcyBfSnZfRmluZENsYXNzRnJv
bVNpZ25hdHVyZSAoY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqYXZhOjpsYW5nOjpDbGFzc0xvYWRlciAqbG9hZGVyKTsKZXh0ZXJuIHZvaWQgX0p2X0dl
dFR5cGVzRnJvbVNpZ25hdHVyZSAoam1ldGhvZElEIG1ldGhvZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgamNsYXNzIGRlY2xhcmluZ0NsYXNzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBKQXJyYXk8amNsYXNzPiAqKmFyZ190eXBlc19vdXQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpjbGFzcyAqcmV0dXJuX3R5
cGVfb3V0KTsKCmV4dGVybiBqb2JqZWN0IF9Kdl9DYWxsQW55TWV0aG9kQSAoam9iamVjdCBvYmos
IGpjbGFzcyByZXR1cm5fdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
bWV0aG9kSUQgbWV0aCwgamJvb2xlYW4gaXNfY29uc3RydWN0b3IsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgSkFycmF5PGpjbGFzcz4gKnBhcmFtZXRlcl90eXBlcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2JqZWN0QXJyYXkgYXJncyk7Cgp1bmlvbiBq
dmFsdWU7CmV4dGVybiBqdGhyb3dhYmxlIF9Kdl9DYWxsQW55TWV0aG9kQSAoam9iamVjdCBvYmos
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamNsYXNzIHJldHVybl90eXBl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRoLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpib29sZWFuIGlzX2NvbnN0cnVj
dG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBcnJheTxqY2xhc3M+
ICpwYXJhbWV0ZXJfdHlwZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
anZhbHVlICphcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp2YWx1
ZSAqcmVzdWx0KTsKCmV4dGVybiBqb2JqZWN0IF9Kdl9OZXdNdWx0aUFycmF5IChqY2xhc3MsIGpp
bnQgbmRpbXMsIGppbnQqIGRpbXMpCiAgX19hdHRyaWJ1dGVfXygoX19tYWxsb2NfXykpOwoKCmV4
dGVybiAiQyIKewogIGppbnQgX0p2X2RpdkkgKGppbnQsIGppbnQpOwogIGppbnQgX0p2X3JlbUkg
KGppbnQsIGppbnQpOwogIGpsb25nIF9Kdl9kaXZKIChqbG9uZywgamxvbmcpOwogIGpsb25nIF9K
dl9yZW1KIChqbG9uZywgamxvbmcpOwp9CgoKZXh0ZXJuIGNoYXIgKl9Kdl9UaGlzRXhlY3V0YWJs
ZSAodm9pZCk7CmV4dGVybiB2b2lkIF9Kdl9UaGlzRXhlY3V0YWJsZSAoY29uc3QgY2hhciAqKTsK
Cgp2b2lkICpfSnZfRmluZFN5bWJvbEluRXhlY3V0YWJsZSAoY29uc3QgY2hhciAqKTsKCgpleHRl
cm4gdm9pZCBfSnZfSk5JX0luaXQgKHZvaWQpOwoKCl9Kdl9KTklFbnYgKl9Kdl9HZXRDdXJyZW50
Sk5JRW52ICgpOwp2b2lkIF9Kdl9TZXRDdXJyZW50Sk5JRW52IChfSnZfSk5JRW52ICopOwoKc3Ry
dWN0IF9Kdl9KYXZhVk07Cl9Kdl9KYXZhVk0gKl9Kdl9HZXRKYXZhVk0gKCk7CgoKYm9vbCBfSnZf
VmVyaWZ5RmllbGRTaWduYXR1cmUgKF9Kdl9VdGY4Q29uc3Qqc2lnKTsKYm9vbCBfSnZfVmVyaWZ5
TWV0aG9kU2lnbmF0dXJlIChfSnZfVXRmOENvbnN0KnNpZyk7CmJvb2wgX0p2X1ZlcmlmeUNsYXNz
TmFtZSAodW5zaWduZWQgY2hhciogcHRyLCBfSnZfdXNob3J0IGxlbmd0aCk7CmJvb2wgX0p2X1Zl
cmlmeUNsYXNzTmFtZSAoX0p2X1V0ZjhDb25zdCAqbmFtZSk7CmJvb2wgX0p2X1ZlcmlmeUlkZW50
aWZpZXIgKF9Kdl9VdGY4Q29uc3QgKik7CmJvb2wgX0p2X0NsYXNzTmFtZVNhbWVQYWNrYWdlIChf
SnZfVXRmOENvbnN0ICpuYW1lMSwgX0p2X1V0ZjhDb25zdCAqbmFtZTIpOwoKCgojIDEgIi4uLy4u
Ly4uL2djYy9saWJqYXZhL2luY2x1ZGUvanZtcGkuaCIgMQojIDE3ICIuLi8uLi8uLi9nY2MvbGli
amF2YS9pbmNsdWRlL2p2bXBpLmgiCiMgMSAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvaW5jbHVkZS9q
bmkuaCIgMQojIDE3ICIuLi8uLi8uLi9nY2MvbGliamF2YS9pbmNsdWRlL2puaS5oIgojIDEgImdj
ai9saWJnY2otY29uZmlnLmgiIDEKIyAxOCAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvaW5jbHVkZS9q
bmkuaCIgMgoKIyAxICIveDEvZWdjcy9idWlsZC9nY2MvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMg
NDMgIi94MS9lZ2NzL2J1aWxkL2djYy9pbmNsdWRlL3N0ZGFyZy5oIiAzCnR5cGVkZWYgX19idWls
dGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7CiMgMTEwICIveDEvZWdjcy9idWlsZC9nY2MvaW5j
bHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9fZ251Y192YV9saXN0IHZhX2xpc3Q7CiMgMjAgIi4u
Ly4uLy4uL2djYy9saWJqYXZhL2luY2x1ZGUvam5pLmgiIDIKIyAyOSAiLi4vLi4vLi4vZ2NjL2xp
YmphdmEvaW5jbHVkZS9qbmkuaCIKIyAxICJnbnUvZ2NqL3J1bnRpbWUvSk5JV2Vha1JlZi5oIiAx
CgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCiMgMSAiamF2YS9sYW5nL3JlZi9XZWFrUmVmZXJlbmNl
LmgiIDEKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKIyAxICJqYXZhL2xhbmcvcmVmL1JlZmVyZW5j
ZS5oIiAxCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCgoKZXh0ZXJuICJKYXZhIgp7CiAgbmFtZXNw
YWNlIGdudQogIHsKICAgIG5hbWVzcGFjZSBnY2oKICAgIHsKICAgICAgY2xhc3MgUmF3RGF0YTsK
ICAgIH0KICB9Cn07CgpjbGFzcyA6OmphdmE6Omxhbmc6OnJlZjo6UmVmZXJlbmNlIDogcHVibGlj
IDo6amF2YTo6bGFuZzo6T2JqZWN0CnsKcHVibGljOgogIFJlZmVyZW5jZSAoOjpqYXZhOjpsYW5n
OjpPYmplY3QgKik7CiAgUmVmZXJlbmNlICg6OmphdmE6Omxhbmc6Ok9iamVjdCAqLCA6OmphdmE6
Omxhbmc6OnJlZjo6UmVmZXJlbmNlUXVldWUgKik7CnByaXZhdGU6CiAgdm9pZCBjcmVhdGUgKDo6
amF2YTo6bGFuZzo6T2JqZWN0ICopOwpwdWJsaWM6CiAgdmlydHVhbCA6OmphdmE6Omxhbmc6Ok9i
amVjdCAqZ2V0ICgpOwogIHZpcnR1YWwgdm9pZCBjbGVhciAoKTsKICB2aXJ0dWFsIGpib29sZWFu
IGlzRW5xdWV1ZWQgKCk7CiAgdmlydHVhbCBqYm9vbGVhbiBlbnF1ZXVlICgpOwpwdWJsaWM6CiAg
OjpnbnU6Omdjajo6UmF3RGF0YSAqcmVmZXJlbnQ7CiAgOjpnbnU6Omdjajo6UmF3RGF0YSAqY29w
eTsKICA6OmphdmE6Omxhbmc6OnJlZjo6UmVmZXJlbmNlUXVldWUgKnF1ZXVlOwogIDo6amF2YTo6
bGFuZzo6cmVmOjpSZWZlcmVuY2UgKm5leHRPblF1ZXVlOwogIHN0YXRpYyA6OmphdmE6Omxhbmc6
Ok9iamVjdCAqbG9jazsKcHVibGljOgoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBjbGFz
cyQ7Cn07CiMgOSAiamF2YS9sYW5nL3JlZi9XZWFrUmVmZXJlbmNlLmgiIDIKCmNsYXNzIDo6amF2
YTo6bGFuZzo6cmVmOjpXZWFrUmVmZXJlbmNlIDogcHVibGljIDo6amF2YTo6bGFuZzo6cmVmOjpS
ZWZlcmVuY2UKewpwdWJsaWM6CiAgV2Vha1JlZmVyZW5jZSAoOjpqYXZhOjpsYW5nOjpPYmplY3Qg
Kik7CiAgV2Vha1JlZmVyZW5jZSAoOjpqYXZhOjpsYW5nOjpPYmplY3QgKiwgOjpqYXZhOjpsYW5n
OjpyZWY6OlJlZmVyZW5jZVF1ZXVlICopOwoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBj
bGFzcyQ7Cn07CiMgOSAiZ251L2djai9ydW50aW1lL0pOSVdlYWtSZWYuaCIgMgoKZXh0ZXJuICJK
YXZhIgp7CiAgbmFtZXNwYWNlIGdudQogIHsKICAgIG5hbWVzcGFjZSBnY2oKICAgIHsKICAgICAg
bmFtZXNwYWNlIHJ1bnRpbWUKICAgICAgewogICAgICAgIGNsYXNzIEpOSVdlYWtSZWY7CiAgICAg
IH0KICAgIH0KICB9Cn07CgpjbGFzcyA6OmdudTo6Z2NqOjpydW50aW1lOjpKTklXZWFrUmVmIDog
cHVibGljIDo6amF2YTo6bGFuZzo6cmVmOjpXZWFrUmVmZXJlbmNlCnsKcHVibGljOgogIEpOSVdl
YWtSZWYgKDo6amF2YTo6bGFuZzo6T2JqZWN0ICopOwoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpD
bGFzcyBjbGFzcyQ7Cn07CiMgMzAgIi4uLy4uLy4uL2djYy9saWJqYXZhL2luY2x1ZGUvam5pLmgi
IDIKCnR5cGVkZWYgZ251OjpnY2o6OnJ1bnRpbWU6OkpOSVdlYWtSZWYgKmp3ZWFrOwoKdHlwZWRl
ZiBzdHJ1Y3QgX0p2X0pOSUVudiBKTklFbnY7CnR5cGVkZWYgc3RydWN0IF9Kdl9KYXZhVk0gSmF2
YVZNOwojIDE3MyAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvaW5jbHVkZS9qbmkuaCIKZXh0ZXJuICJD
Igp7CgoKCgpleHRlcm4gamludCBKTklfT25Mb2FkIChKYXZhVk0gKiwgdm9pZCAqKTsKZXh0ZXJu
IHZvaWQgSk5JX09uVW5sb2FkIChKYXZhVk0gKiwgdm9pZCAqKTsKCgoKZXh0ZXJuIGppbnQgSk5J
X0dldERlZmF1bHRKYXZhVk1Jbml0QXJncyAodm9pZCAqKTsKZXh0ZXJuIGppbnQgSk5JX0NyZWF0
ZUphdmFWTSAoSmF2YVZNICoqLCB2b2lkICoqLCB2b2lkICopOwpleHRlcm4gamludCBKTklfR2V0
Q3JlYXRlZEphdmFWTXMoSmF2YVZNICoqLCBqc2l6ZSwganNpemUgKik7CgoKfTsKCgp0eXBlZGVm
IHVuaW9uIGp2YWx1ZQp7CiAgamJvb2xlYW4gejsKICBqYnl0ZSBiOwogIGpjaGFyIGM7CiAganNo
b3J0IHM7CiAgamludCBpOwogIGpsb25nIGo7CiAgamZsb2F0IGY7CiAgamRvdWJsZSBkOwogIGpv
YmplY3QgbDsKfSBqdmFsdWU7CgoKdHlwZWRlZiB2b2lkICogKCpfSnZfZnVuYykgKC4uLik7CgoK
CgoKdHlwZWRlZiBzdHJ1Y3QKewogIGNoYXIgKm5hbWU7CiAgY2hhciAqc2lnbmF0dXJlOwogIHZv
aWQgKmZuUHRyOwp9IEpOSU5hdGl2ZU1ldGhvZDsKCnN0cnVjdCBKTklOYXRpdmVJbnRlcmZhY2UK
ewogIF9Kdl9mdW5jIHJlc2VydmVkMDsKICBfSnZfZnVuYyByZXNlcnZlZDE7CiAgX0p2X2Z1bmMg
cmVzZXJ2ZWQyOwogIF9Kdl9mdW5jIHJlc2VydmVkMzsKCiAgamludCAoKkdldFZlcnNpb24pIChK
TklFbnYgKik7CiAgamNsYXNzICgqRGVmaW5lQ2xhc3MpIChKTklFbnYgKiwgam9iamVjdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBqYnl0ZSAqLCBq
c2l6ZSk7CiAgamNsYXNzICgqRmluZENsYXNzKSAoSk5JRW52ICosIGNvbnN0IGNoYXIgKik7Cgog
IGptZXRob2RJRCAoKkZyb21SZWZsZWN0ZWRNZXRob2QpIChKTklFbnYgKiwgam9iamVjdCk7CiAg
amZpZWxkSUQgKCpGcm9tUmVmbGVjdGVkRmllbGQpIChKTklFbnYgKiwgam9iamVjdCk7CiAgam9i
amVjdCAoKlRvUmVmbGVjdGVkTWV0aG9kKSAoSk5JRW52ICosIGpjbGFzcywgam1ldGhvZElELAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpib29sZWFuKTsKCiAg
amNsYXNzICgqR2V0U3VwZXJjbGFzcykgKEpOSUVudiAqLCBqY2xhc3MpOwogIGpib29sZWFuICgq
SXNBc3NpZ25hYmxlRnJvbSkgKEpOSUVudiAqLCBqY2xhc3MsIGpjbGFzcyk7CgogIGpvYmplY3Qg
KCpUb1JlZmxlY3RlZEZpZWxkKSAoSk5JRW52ICosIGpjbGFzcywgamZpZWxkSUQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamJvb2xlYW4pOwoKICBqaW50ICgq
VGhyb3cpIChKTklFbnYgKiwganRocm93YWJsZSk7CiAgamludCAoKlRocm93TmV3KSAoSk5JRW52
ICosIGpjbGFzcywgY29uc3QgY2hhciAqKTsKICBqdGhyb3dhYmxlICgqRXhjZXB0aW9uT2NjdXJy
ZWQpIChKTklFbnYgKik7CiAgdm9pZCAoKkV4Y2VwdGlvbkRlc2NyaWJlKSAoSk5JRW52ICopOwog
IHZvaWQgKCpFeGNlcHRpb25DbGVhcikgKEpOSUVudiAqKTsKICB2b2lkICgqRmF0YWxFcnJvcikg
KEpOSUVudiAqLCBjb25zdCBjaGFyICopOwoKICBqaW50ICgqUHVzaExvY2FsRnJhbWUpIChKTklF
bnYgKiwgamludCk7CiAgam9iamVjdCAoKlBvcExvY2FsRnJhbWUpIChKTklFbnYgKiwgam9iamVj
dCk7CgogIGpvYmplY3QgKCpOZXdHbG9iYWxSZWYpIChKTklFbnYgKiwgam9iamVjdCk7CiAgdm9p
ZCAoKkRlbGV0ZUdsb2JhbFJlZikgKEpOSUVudiAqLCBqb2JqZWN0KTsKICB2b2lkICgqRGVsZXRl
TG9jYWxSZWYpIChKTklFbnYgKiwgam9iamVjdCk7CiAgamJvb2xlYW4gKCpJc1NhbWVPYmplY3Qp
IChKTklFbnYgKiwgam9iamVjdCwgam9iamVjdCk7CgogIGpvYmplY3QgKCpOZXdMb2NhbFJlZikg
KEpOSUVudiAqLCBqb2JqZWN0KTsKICBqaW50ICgqRW5zdXJlTG9jYWxDYXBhY2l0eSkgKEpOSUVu
diAqLCBqaW50KTsKCiAgam9iamVjdCAoKkFsbG9jT2JqZWN0KSAoSk5JRW52ICosIGpjbGFzcyk7
CiAgam9iamVjdCAoKk5ld09iamVjdCkgKEpOSUVudiAqLCBqY2xhc3MsIGptZXRob2RJRCwgLi4u
KTsKICBqb2JqZWN0ICgqTmV3T2JqZWN0VikgKEpOSUVudiAqLCBqY2xhc3MsIGptZXRob2RJRCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0KTsKICBq
b2JqZWN0ICgqTmV3T2JqZWN0QSkgKEpOSUVudiAqLCBqY2xhc3MsIGptZXRob2RJRCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdmFsdWUgKik7CgogIGpjbGFz
cyAoKkdldE9iamVjdENsYXNzKSAoSk5JRW52ICosIGpvYmplY3QpOwogIGpib29sZWFuICgqSXNJ
bnN0YW5jZU9mKSAoSk5JRW52ICosIGpvYmplY3QsIGpjbGFzcyk7CiAgam1ldGhvZElEICgqR2V0
TWV0aG9kSUQpIChKTklFbnYgKiwgamNsYXNzLCBjb25zdCBjaGFyICosCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKTsKCiAgam9iamVjdCAo
KkNhbGxPYmplY3RNZXRob2QpIChKTklFbnYgKiwgam9iamVjdCwgam1ldGhvZElELAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CiAgam9iamVjdCAoKkNh
bGxPYmplY3RNZXRob2RWKSAoSk5JRW52ICosIGpvYmplY3QsIGptZXRob2RJRCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0KTsKICBqb2JqZWN0ICgq
Q2FsbE9iamVjdE1ldGhvZEEpIChKTklFbnYgKiwgam9iamVjdCwgam1ldGhvZElELAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp2YWx1ZSAqKTsKICBqYm9vbGVh
biAoKkNhbGxCb29sZWFuTWV0aG9kKSAoSk5JRW52ICosIGpvYmplY3QsIGptZXRob2RJRCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwogIGpib29sZWFu
ICgqQ2FsbEJvb2xlYW5NZXRob2RWKSAoSk5JRW52ICosIGpvYmplY3QsIGptZXRob2RJRCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0KTsKICBqYm9v
bGVhbiAoKkNhbGxCb29sZWFuTWV0aG9kQSkgKEpOSUVudiAqLCBqb2JqZWN0LCBqbWV0aG9kSUQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganZhbHVlICopOwog
IGpieXRlICgqQ2FsbEJ5dGVNZXRob2QpIChKTklFbnYgKiwgam9iamVjdCwgam1ldGhvZElELAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CiAgamJ5dGUg
KCpDYWxsQnl0ZU1ldGhvZFYpIChKTklFbnYgKiwgam9iamVjdCwgam1ldGhvZElELAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QpOwogIGpieXRlICgq
Q2FsbEJ5dGVNZXRob2RBKSAoSk5JRW52ICosIGpvYmplY3QsIGptZXRob2RJRCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdmFsdWUgKik7CiAgamNoYXIgKCpD
YWxsQ2hhck1ldGhvZCkgKEpOSUVudiAqLCBqb2JqZWN0LCBqbWV0aG9kSUQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKICBqY2hhciAoKkNhbGxDaGFy
TWV0aG9kVikgKEpOSUVudiAqLCBqb2JqZWN0LCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCk7CiAgamNoYXIgKCpDYWxsQ2hhck1l
dGhvZEEpIChKTklFbnYgKiwgam9iamVjdCwgam1ldGhvZElELAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGp2YWx1ZSAqKTsKICBqc2hvcnQgKCpDYWxsU2hvcnRN
ZXRob2QpIChKTklFbnYgKiwgam9iamVjdCwgam1ldGhvZElELAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CiAganNob3J0ICgqQ2FsbFNob3J0TWV0aG9k
VikgKEpOSUVudiAqLCBqb2JqZWN0LCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCk7CiAganNob3J0ICgqQ2FsbFNob3J0TWV0aG9k
QSkgKEpOSUVudiAqLCBqb2JqZWN0LCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAganZhbHVlICopOwogIGppbnQgKCpDYWxsSW50TWV0aG9kKSAo
Sk5JRW52ICosIGpvYmplY3QsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAuLi4pOwogIGppbnQgKCpDYWxsSW50TWV0aG9kVikgKEpOSUVudiAq
LCBqb2JqZWN0LCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFfbGlzdCk7CiAgamludCAoKkNhbGxJbnRNZXRob2RBKSAoSk5JRW52ICosIGpv
YmplY3QsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqdmFsdWUgKik7CiAgamxvbmcgKCpDYWxsTG9uZ01ldGhvZCkgKEpOSUVudiAqLCBqb2Jq
ZWN0LCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLi4uKTsKICBqbG9uZyAoKkNhbGxMb25nTWV0aG9kVikgKEpOSUVudiAqLCBqb2JqZWN0LCBq
bWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFf
bGlzdCk7CiAgamxvbmcgKCpDYWxsTG9uZ01ldGhvZEEpIChKTklFbnYgKiwgam9iamVjdCwgam1l
dGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp2YWx1
ZSAqKTsKICBqZmxvYXQgKCpDYWxsRmxvYXRNZXRob2QpIChKTklFbnYgKiwgam9iamVjdCwgam1l
dGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7
CiAgamZsb2F0ICgqQ2FsbEZsb2F0TWV0aG9kVikgKEpOSUVudiAqLCBqb2JqZWN0LCBqbWV0aG9k
SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCk7
CiAgamZsb2F0ICgqQ2FsbEZsb2F0TWV0aG9kQSkgKEpOSUVudiAqLCBqb2JqZWN0LCBqbWV0aG9k
SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganZhbHVlICop
OwogIGpkb3VibGUgKCpDYWxsRG91YmxlTWV0aG9kKSAoSk5JRW52ICosIGpvYmplY3QsIGptZXRo
b2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwog
IGpkb3VibGUgKCpDYWxsRG91YmxlTWV0aG9kVikgKEpOSUVudiAqLCBqb2JqZWN0LCBqbWV0aG9k
SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCk7
CiAgamRvdWJsZSAoKkNhbGxEb3VibGVNZXRob2RBKSAoSk5JRW52ICosIGpvYmplY3QsIGptZXRo
b2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdmFsdWUg
Kik7CiAgdm9pZCAoKkNhbGxWb2lkTWV0aG9kKSAoSk5JRW52ICosIGpvYmplY3QsIGptZXRob2RJ
RCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwogIHZv
aWQgKCpDYWxsVm9pZE1ldGhvZFYpIChKTklFbnYgKiwgam9iamVjdCwgam1ldGhvZElELAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QpOwogIHZvaWQg
KCpDYWxsVm9pZE1ldGhvZEEpIChKTklFbnYgKiwgam9iamVjdCwgam1ldGhvZElELAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp2YWx1ZSAqKTsKCiAgam9iamVj
dCAoKkNhbGxOb252aXJ0dWFsT2JqZWN0TWV0aG9kKSAoSk5JRW52ICosIGpvYmplY3QsIGpjbGFz
cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQs
IC4uLik7CiAgam9iamVjdCAoKkNhbGxOb252aXJ0dWFsT2JqZWN0TWV0aG9kVikgKEpOSUVudiAq
LCBqb2JqZWN0LCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgam1ldGhvZElELCB2YV9saXN0KTsKICBqb2JqZWN0ICgqQ2FsbE5vbnZpcnR1YWxPYmpl
Y3RNZXRob2RBKSAoSk5JRW52ICosIGpvYmplY3QsIGpjbGFzcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQsIGp2YWx1ZSAqKTsKICBqYm9vbGVh
biAoKkNhbGxOb252aXJ0dWFsQm9vbGVhbk1ldGhvZCkgKEpOSUVudiAqLCBqb2JqZWN0LCBqY2xh
c3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElE
LCAuLi4pOwogIGpib29sZWFuICgqQ2FsbE5vbnZpcnR1YWxCb29sZWFuTWV0aG9kVikgKEpOSUVu
diAqLCBqb2JqZWN0LCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGptZXRob2RJRCwgdmFfbGlzdCk7CiAgamJvb2xlYW4gKCpDYWxsTm9udmlydHVh
bEJvb2xlYW5NZXRob2RBKSAoSk5JRW52ICosIGpvYmplY3QsIGpjbGFzcywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElELCBqdmFsdWUgKik7CiAg
amJ5dGUgKCpDYWxsTm9udmlydHVhbEJ5dGVNZXRob2QpIChKTklFbnYgKiwgam9iamVjdCwgamNs
YXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJ
RCwgLi4uKTsKICBqYnl0ZSAoKkNhbGxOb252aXJ0dWFsQnl0ZU1ldGhvZFYpIChKTklFbnYgKiwg
am9iamVjdCwgamNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGptZXRob2RJRCwgdmFfbGlzdCk7CiAgamJ5dGUgKCpDYWxsTm9udmlydHVhbEJ5dGVNZXRo
b2RBKSAoSk5JRW52ICosIGpvYmplY3QsIGpjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQsIGp2YWx1ZSAqKTsKICBqY2hhciAoKkNhbGxO
b252aXJ0dWFsQ2hhck1ldGhvZCkgKEpOSUVudiAqLCBqb2JqZWN0LCBqY2xhc3MsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElELCAuLi4pOwogIGpj
aGFyICgqQ2FsbE5vbnZpcnR1YWxDaGFyTWV0aG9kVikgKEpOSUVudiAqLCBqb2JqZWN0LCBqY2xh
c3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElE
LCB2YV9saXN0KTsKICBqY2hhciAoKkNhbGxOb252aXJ0dWFsQ2hhck1ldGhvZEEpIChKTklFbnYg
Kiwgam9iamVjdCwgamNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGptZXRob2RJRCwganZhbHVlICopOwogIGpzaG9ydCAoKkNhbGxOb252aXJ0dWFsU2hv
cnRNZXRob2QpIChKTklFbnYgKiwgam9iamVjdCwgamNsYXNzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCwgLi4uKTsKICBqc2hvcnQgKCpDYWxs
Tm9udmlydHVhbFNob3J0TWV0aG9kVikgKEpOSUVudiAqLCBqb2JqZWN0LCBqY2xhc3MsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElELCB2YV9saXN0
KTsKICBqc2hvcnQgKCpDYWxsTm9udmlydHVhbFNob3J0TWV0aG9kQSkgKEpOSUVudiAqLCBqb2Jq
ZWN0LCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
am1ldGhvZElELCBqdmFsdWUgKik7CiAgamludCAoKkNhbGxOb252aXJ0dWFsSW50TWV0aG9kKSAo
Sk5JRW52ICosIGpvYmplY3QsIGpjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqbWV0aG9kSUQsIC4uLik7CiAgamludCAoKkNhbGxOb252aXJ0dWFsSW50
TWV0aG9kVikgKEpOSUVudiAqLCBqb2JqZWN0LCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElELCB2YV9saXN0KTsKICBqaW50ICgqQ2Fs
bE5vbnZpcnR1YWxJbnRNZXRob2RBKSAoSk5JRW52ICosIGpvYmplY3QsIGpjbGFzcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQsIGp2YWx1ZSAq
KTsKICBqbG9uZyAoKkNhbGxOb252aXJ0dWFsTG9uZ01ldGhvZCkgKEpOSUVudiAqLCBqb2JqZWN0
LCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1l
dGhvZElELCAuLi4pOwogIGpsb25nICgqQ2FsbE5vbnZpcnR1YWxMb25nTWV0aG9kVikgKEpOSUVu
diAqLCBqb2JqZWN0LCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgam1ldGhvZElELCB2YV9saXN0KTsKICBqbG9uZyAoKkNhbGxOb252aXJ0dWFsTG9u
Z01ldGhvZEEpIChKTklFbnYgKiwgam9iamVjdCwgamNsYXNzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCwganZhbHVlICopOwogIGpmbG9hdCAo
KkNhbGxOb252aXJ0dWFsRmxvYXRNZXRob2QpIChKTklFbnYgKiwgam9iamVjdCwgamNsYXNzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCwgLi4u
KTsKICBqZmxvYXQgKCpDYWxsTm9udmlydHVhbEZsb2F0TWV0aG9kVikgKEpOSUVudiAqLCBqb2Jq
ZWN0LCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
am1ldGhvZElELCB2YV9saXN0KTsKICBqZmxvYXQgKCpDYWxsTm9udmlydHVhbEZsb2F0TWV0aG9k
QSkgKEpOSUVudiAqLCBqb2JqZWN0LCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgam1ldGhvZElELCBqdmFsdWUgKik7CiAgamRvdWJsZSAoKkNhbGxO
b252aXJ0dWFsRG91YmxlTWV0aG9kKSAoSk5JRW52ICosIGpvYmplY3QsIGpjbGFzcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQsIC4uLik7CiAg
amRvdWJsZSAoKkNhbGxOb252aXJ0dWFsRG91YmxlTWV0aG9kVikgKEpOSUVudiAqLCBqb2JqZWN0
LCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1l
dGhvZElELCB2YV9saXN0KTsKICBqZG91YmxlICgqQ2FsbE5vbnZpcnR1YWxEb3VibGVNZXRob2RB
KSAoSk5JRW52ICosIGpvYmplY3QsIGpjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqbWV0aG9kSUQsIGp2YWx1ZSAqKTsKICB2b2lkICgqQ2FsbE5vbnZp
cnR1YWxWb2lkTWV0aG9kKSAoSk5JRW52ICosIGpvYmplY3QsIGpjbGFzcywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQsIC4uLik7CiAgdm9pZCAo
KkNhbGxOb252aXJ0dWFsVm9pZE1ldGhvZFYpIChKTklFbnYgKiwgam9iamVjdCwgamNsYXNzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCwgdmFf
bGlzdCk7CiAgdm9pZCAoKkNhbGxOb252aXJ0dWFsVm9pZE1ldGhvZEEpIChKTklFbnYgKiwgam9i
amVjdCwgamNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGptZXRob2RJRCwganZhbHVlICopOwoKICBqZmllbGRJRCAoKkdldEZpZWxkSUQpIChKTklFbnYg
KiwgamNsYXNzLCBjb25zdCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqKTsKCiAgam9iamVjdCAoKkdldE9iamVjdEZpZWxkKSAo
Sk5JRW52ICosIGpvYmplY3QsIGpmaWVsZElEKTsKICBqYm9vbGVhbiAoKkdldEJvb2xlYW5GaWVs
ZCkgKEpOSUVudiAqLCBqb2JqZWN0LCBqZmllbGRJRCk7CiAgamJ5dGUgKCpHZXRCeXRlRmllbGQp
IChKTklFbnYgKiwgam9iamVjdCwgamZpZWxkSUQpOwogIGpjaGFyICgqR2V0Q2hhckZpZWxkKSAo
Sk5JRW52ICosIGpvYmplY3QsIGpmaWVsZElEKTsKICBqc2hvcnQgKCpHZXRTaG9ydEZpZWxkKSAo
Sk5JRW52ICosIGpvYmplY3QsIGpmaWVsZElEKTsKICBqaW50ICgqR2V0SW50RmllbGQpIChKTklF
bnYgKiwgam9iamVjdCwgamZpZWxkSUQpOwogIGpsb25nICgqR2V0TG9uZ0ZpZWxkKSAoSk5JRW52
ICosIGpvYmplY3QsIGpmaWVsZElEKTsKICBqZmxvYXQgKCpHZXRGbG9hdEZpZWxkKSAoSk5JRW52
ICosIGpvYmplY3QsIGpmaWVsZElEKTsKICBqZG91YmxlICgqR2V0RG91YmxlRmllbGQpIChKTklF
bnYgKiwgam9iamVjdCwgamZpZWxkSUQpOwoKICB2b2lkICgqU2V0T2JqZWN0RmllbGQpIChKTklF
bnYgKiwgam9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqZmllbGRJRCwgam9iamVjdCk7CiAgdm9pZCAoKlNldEJvb2xlYW5GaWVsZCkgKEpOSUVudiAq
LCBqb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpm
aWVsZElELCBqYm9vbGVhbik7CiAgdm9pZCAoKlNldEJ5dGVGaWVsZCkgKEpOSUVudiAqLCBqb2Jq
ZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpmaWVsZElE
LCBqYnl0ZSk7CiAgdm9pZCAoKlNldENoYXJGaWVsZCkgKEpOSUVudiAqLCBqb2JqZWN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpmaWVsZElELCBqY2hhcik7
CiAgdm9pZCAoKlNldFNob3J0RmllbGQpIChKTklFbnYgKiwgam9iamVjdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZmllbGRJRCwganNob3J0KTsKICB2b2lk
ICgqU2V0SW50RmllbGQpIChKTklFbnYgKiwgam9iamVjdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqZmllbGRJRCwgamludCk7CiAgdm9pZCAoKlNldExvbmdG
aWVsZCkgKEpOSUVudiAqLCBqb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGpmaWVsZElELCBqbG9uZyk7CiAgdm9pZCAoKlNldEZsb2F0RmllbGQpIChK
TklFbnYgKiwgam9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqZmllbGRJRCwgamZsb2F0KTsKICB2b2lkICgqU2V0RG91YmxlRmllbGQpIChKTklFbnYg
Kiwgam9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
ZmllbGRJRCwgamRvdWJsZSk7CgogIGptZXRob2RJRCAoKkdldFN0YXRpY01ldGhvZElEKSAoSk5J
RW52ICosIGpjbGFzcywgY29uc3QgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKik7CgogIGpvYmplY3QgKCpDYWxsU3RhdGljT2Jq
ZWN0TWV0aG9kKSAoSk5JRW52ICosIGpjbGFzcywgam1ldGhvZElELAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CiAgam9iamVjdCAoKkNhbGxTdGF0aWNP
YmplY3RNZXRob2RWKSAoSk5JRW52ICosIGpjbGFzcywgam1ldGhvZElELAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QpOwogIGpvYmplY3QgKCpDYWxs
U3RhdGljT2JqZWN0TWV0aG9kQSkgKEpOSUVudiAqLCBqY2xhc3MsIGptZXRob2RJRCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdmFsdWUgKik7CiAgamJvb2xl
YW4gKCpDYWxsU3RhdGljQm9vbGVhbk1ldGhvZCkgKEpOSUVudiAqLCBqY2xhc3MsIGptZXRob2RJ
RCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwogIGpi
b29sZWFuICgqQ2FsbFN0YXRpY0Jvb2xlYW5NZXRob2RWKSAoSk5JRW52ICosIGpjbGFzcywgam1l
dGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9s
aXN0KTsKICBqYm9vbGVhbiAoKkNhbGxTdGF0aWNCb29sZWFuTWV0aG9kQSkgKEpOSUVudiAqLCBq
Y2xhc3MsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAganZhbHVlICopOwogIGpieXRlICgqQ2FsbFN0YXRpY0J5dGVNZXRob2QpIChKTklFbnYg
KiwgamNsYXNzLCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLi4uKTsKICBqYnl0ZSAoKkNhbGxTdGF0aWNCeXRlTWV0aG9kVikgKEpOSUVudiAq
LCBqY2xhc3MsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YV9saXN0KTsKICBqYnl0ZSAoKkNhbGxTdGF0aWNCeXRlTWV0aG9kQSkgKEpOSUVu
diAqLCBqY2xhc3MsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqdmFsdWUgKik7CiAgamNoYXIgKCpDYWxsU3RhdGljQ2hhck1ldGhvZCkgKEpO
SUVudiAqLCBqY2xhc3MsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAuLi4pOwogIGpjaGFyICgqQ2FsbFN0YXRpY0NoYXJNZXRob2RWKSAoSk5J
RW52ICosIGpjbGFzcywgam1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhX2xpc3QpOwogIGpjaGFyICgqQ2FsbFN0YXRpY0NoYXJNZXRob2RBKSAo
Sk5JRW52ICosIGpjbGFzcywgam1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGp2YWx1ZSAqKTsKICBqc2hvcnQgKCpDYWxsU3RhdGljU2hvcnRNZXRo
b2QpIChKTklFbnYgKiwgamNsYXNzLCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLi4uKTsKICBqc2hvcnQgKCpDYWxsU3RhdGljU2hvcnRNZXRo
b2RWKSAoSk5JRW52ICosIGpjbGFzcywgam1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QpOwogIGpzaG9ydCAoKkNhbGxTdGF0aWNTaG9y
dE1ldGhvZEEpIChKTklFbnYgKiwgamNsYXNzLCBqbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAganZhbHVlICopOwogIGppbnQgKCpDYWxsU3RhdGlj
SW50TWV0aG9kKSAoSk5JRW52ICosIGpjbGFzcywgam1ldGhvZElELAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CiAgamludCAoKkNhbGxTdGF0aWNJbnRN
ZXRob2RWKSAoSk5JRW52ICosIGpjbGFzcywgam1ldGhvZElELAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QpOwogIGppbnQgKCpDYWxsU3RhdGljSW50
TWV0aG9kQSkgKEpOSUVudiAqLCBqY2xhc3MsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqdmFsdWUgKik7CiAgamxvbmcgKCpDYWxsU3RhdGlj
TG9uZ01ldGhvZCkgKEpOSUVudiAqLCBqY2xhc3MsIGptZXRob2RJRCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwogIGpsb25nICgqQ2FsbFN0YXRpY0xv
bmdNZXRob2RWKSAoSk5JRW52ICosIGpjbGFzcywgam1ldGhvZElELAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QpOwogIGpsb25nICgqQ2FsbFN0YXRp
Y0xvbmdNZXRob2RBKSAoSk5JRW52ICosIGpjbGFzcywgam1ldGhvZElELAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp2YWx1ZSAqKTsKICBqZmxvYXQgKCpDYWxs
U3RhdGljRmxvYXRNZXRob2QpIChKTklFbnYgKiwgamNsYXNzLCBqbWV0aG9kSUQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKICBqZmxvYXQgKCpDYWxs
U3RhdGljRmxvYXRNZXRob2RWKSAoSk5JRW52ICosIGpjbGFzcywgam1ldGhvZElELAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QpOwogIGpmbG9hdCAo
KkNhbGxTdGF0aWNGbG9hdE1ldGhvZEEpIChKTklFbnYgKiwgamNsYXNzLCBqbWV0aG9kSUQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganZhbHVlICopOwogIGpk
b3VibGUgKCpDYWxsU3RhdGljRG91YmxlTWV0aG9kKSAoSk5JRW52ICosIGpjbGFzcywgam1ldGhv
ZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CiAg
amRvdWJsZSAoKkNhbGxTdGF0aWNEb3VibGVNZXRob2RWKSAoSk5JRW52ICosIGpjbGFzcywgam1l
dGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xp
c3QpOwogIGpkb3VibGUgKCpDYWxsU3RhdGljRG91YmxlTWV0aG9kQSkgKEpOSUVudiAqLCBqY2xh
c3MsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqdmFsdWUgKik7CiAgdm9pZCAoKkNhbGxTdGF0aWNWb2lkTWV0aG9kKSAoSk5JRW52ICosIGpj
bGFzcywgam1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC4uLik7CiAgdm9pZCAoKkNhbGxTdGF0aWNWb2lkTWV0aG9kVikgKEpOSUVudiAqLCBqY2xh
c3MsIGptZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YV9saXN0KTsKICB2b2lkICgqQ2FsbFN0YXRpY1ZvaWRNZXRob2RBKSAoSk5JRW52ICosIGpj
bGFzcywgam1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGp2YWx1ZSAqKTsKCiAgamZpZWxkSUQgKCpHZXRTdGF0aWNGaWVsZElEKSAoSk5JRW52ICos
IGpjbGFzcywgY29uc3QgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKik7CgogIGpvYmplY3QgKCpHZXRTdGF0aWNPYmplY3RGaWVs
ZCkgKEpOSUVudiAqLCBqY2xhc3MsIGpmaWVsZElEKTsKICBqYm9vbGVhbiAoKkdldFN0YXRpY0Jv
b2xlYW5GaWVsZCkgKEpOSUVudiAqLCBqY2xhc3MsIGpmaWVsZElEKTsKICBqYnl0ZSAoKkdldFN0
YXRpY0J5dGVGaWVsZCkgKEpOSUVudiAqLCBqY2xhc3MsIGpmaWVsZElEKTsKICBqY2hhciAoKkdl
dFN0YXRpY0NoYXJGaWVsZCkgKEpOSUVudiAqLCBqY2xhc3MsIGpmaWVsZElEKTsKICBqc2hvcnQg
KCpHZXRTdGF0aWNTaG9ydEZpZWxkKSAoSk5JRW52ICosIGpjbGFzcywgamZpZWxkSUQpOwogIGpp
bnQgKCpHZXRTdGF0aWNJbnRGaWVsZCkgKEpOSUVudiAqLCBqY2xhc3MsIGpmaWVsZElEKTsKICBq
bG9uZyAoKkdldFN0YXRpY0xvbmdGaWVsZCkgKEpOSUVudiAqLCBqY2xhc3MsIGpmaWVsZElEKTsK
ICBqZmxvYXQgKCpHZXRTdGF0aWNGbG9hdEZpZWxkKSAoSk5JRW52ICosIGpjbGFzcywgamZpZWxk
SUQpOwogIGpkb3VibGUgKCpHZXRTdGF0aWNEb3VibGVGaWVsZCkgKEpOSUVudiAqLCBqY2xhc3Ms
IGpmaWVsZElEKTsKCiAgdm9pZCAoKlNldFN0YXRpY09iamVjdEZpZWxkKSAoSk5JRW52ICosIGpj
bGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZmllbGRJ
RCwgam9iamVjdCk7CiAgdm9pZCAoKlNldFN0YXRpY0Jvb2xlYW5GaWVsZCkgKEpOSUVudiAqLCBq
Y2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamZpZWxk
SUQsIGpib29sZWFuKTsKICB2b2lkICgqU2V0U3RhdGljQnl0ZUZpZWxkKSAoSk5JRW52ICosIGpj
bGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZmllbGRJ
RCwgamJ5dGUpOwogIHZvaWQgKCpTZXRTdGF0aWNDaGFyRmllbGQpIChKTklFbnYgKiwgamNsYXNz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpmaWVsZElELCBq
Y2hhcik7CiAgdm9pZCAoKlNldFN0YXRpY1Nob3J0RmllbGQpIChKTklFbnYgKiwgamNsYXNzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpmaWVsZElELCBqc2hv
cnQpOwogIHZvaWQgKCpTZXRTdGF0aWNJbnRGaWVsZCkgKEpOSUVudiAqLCBqY2xhc3MsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamZpZWxkSUQsIGppbnQpOwog
IHZvaWQgKCpTZXRTdGF0aWNMb25nRmllbGQpIChKTklFbnYgKiwgamNsYXNzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpmaWVsZElELCBqbG9uZyk7CiAgdm9p
ZCAoKlNldFN0YXRpY0Zsb2F0RmllbGQpIChKTklFbnYgKiwgamNsYXNzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpmaWVsZElELCBqZmxvYXQpOwogIHZvaWQg
KCpTZXRTdGF0aWNEb3VibGVGaWVsZCkgKEpOSUVudiAqLCBqY2xhc3MsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamZpZWxkSUQsIGpkb3VibGUpOwoKICBqc3Ry
aW5nICgqTmV3U3RyaW5nKSAoSk5JRW52ICosIGNvbnN0IGpjaGFyICosIGpzaXplKTsKICBqc2l6
ZSAoKkdldFN0cmluZ0xlbmd0aCkgKEpOSUVudiAqLCBqc3RyaW5nKTsKICBjb25zdCBqY2hhciAq
ICgqR2V0U3RyaW5nQ2hhcnMpIChKTklFbnYgKiwganN0cmluZywgamJvb2xlYW4gKik7CiAgdm9p
ZCAoKlJlbGVhc2VTdHJpbmdDaGFycykgKEpOSUVudiAqLCBqc3RyaW5nLCBjb25zdCBqY2hhciAq
KTsKICBqc3RyaW5nICgqTmV3U3RyaW5nVVRGKSAoSk5JRW52ICosIGNvbnN0IGNoYXIgKik7CiAg
anNpemUgKCpHZXRTdHJpbmdVVEZMZW5ndGgpIChKTklFbnYgKiwganN0cmluZyk7CiAgY29uc3Qg
Y2hhciAqICgqR2V0U3RyaW5nVVRGQ2hhcnMpIChKTklFbnYgKiwganN0cmluZywgamJvb2xlYW4g
Kik7CiAgdm9pZCAoKlJlbGVhc2VTdHJpbmdVVEZDaGFycykgKEpOSUVudiAqLCBqc3RyaW5nLCBj
b25zdCBjaGFyICopOwogIGpzaXplICgqR2V0QXJyYXlMZW5ndGgpIChKTklFbnYgKiwgamFycmF5
KTsKICBqYXJyYXkgKCpOZXdPYmplY3RBcnJheSkgKEpOSUVudiAqLCBqc2l6ZSwgamNsYXNzLCBq
b2JqZWN0KTsKICBqb2JqZWN0ICgqR2V0T2JqZWN0QXJyYXlFbGVtZW50KSAoSk5JRW52ICosIGpv
YmplY3RBcnJheSwganNpemUpOwogIHZvaWQgKCpTZXRPYmplY3RBcnJheUVsZW1lbnQpIChKTklF
bnYgKiwgam9iamVjdEFycmF5LCBqc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqb2JqZWN0KTsKCiAgamJvb2xlYW5BcnJheSAoKk5ld0Jvb2xlYW5BcnJh
eSkgKEpOSUVudiAqLCBqc2l6ZSk7CiAgamJ5dGVBcnJheSAoKk5ld0J5dGVBcnJheSkgKEpOSUVu
diAqLCBqc2l6ZSk7CiAgamNoYXJBcnJheSAoKk5ld0NoYXJBcnJheSkgKEpOSUVudiAqLCBqc2l6
ZSk7CiAganNob3J0QXJyYXkgKCpOZXdTaG9ydEFycmF5KSAoSk5JRW52ICosIGpzaXplKTsKICBq
aW50QXJyYXkgKCpOZXdJbnRBcnJheSkgKEpOSUVudiAqLCBqc2l6ZSk7CiAgamxvbmdBcnJheSAo
Kk5ld0xvbmdBcnJheSkgKEpOSUVudiAqLCBqc2l6ZSk7CiAgamZsb2F0QXJyYXkgKCpOZXdGbG9h
dEFycmF5KSAoSk5JRW52ICosIGpzaXplKTsKICBqZG91YmxlQXJyYXkgKCpOZXdEb3VibGVBcnJh
eSkgKEpOSUVudiAqLCBqc2l6ZSk7CgogIGpib29sZWFuICogKCpHZXRCb29sZWFuQXJyYXlFbGVt
ZW50cykgKEpOSUVudiAqLCBqYm9vbGVhbkFycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpib29sZWFuICopOwogIGpieXRlICogKCpHZXRCeXRlQXJyYXlF
bGVtZW50cykgKEpOSUVudiAqLCBqYnl0ZUFycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpib29sZWFuICopOwogIGpjaGFyICogKCpHZXRDaGFyQXJyYXlF
bGVtZW50cykgKEpOSUVudiAqLCBqY2hhckFycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpib29sZWFuICopOwogIGpzaG9ydCAqICgqR2V0U2hvcnRBcnJh
eUVsZW1lbnRzKSAoSk5JRW52ICosIGpzaG9ydEFycmF5LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGpib29sZWFuICopOwogIGppbnQgKiAoKkdldEludEFycmF5
RWxlbWVudHMpIChKTklFbnYgKiwgamludEFycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpib29sZWFuICopOwogIGpsb25nICogKCpHZXRMb25nQXJyYXlF
bGVtZW50cykgKEpOSUVudiAqLCBqbG9uZ0FycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpib29sZWFuICopOwogIGpmbG9hdCAqICgqR2V0RmxvYXRBcnJh
eUVsZW1lbnRzKSAoSk5JRW52ICosIGpmbG9hdEFycmF5LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGpib29sZWFuICopOwogIGpkb3VibGUgKiAoKkdldERvdWJs
ZUFycmF5RWxlbWVudHMpIChKTklFbnYgKiwgamRvdWJsZUFycmF5LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpib29sZWFuICopOwoKICB2b2lkICgqUmVsZWFz
ZUJvb2xlYW5BcnJheUVsZW1lbnRzKSAoSk5JRW52ICosIGpib29sZWFuQXJyYXksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpib29sZWFuICosIGppbnQp
OwogIHZvaWQgKCpSZWxlYXNlQnl0ZUFycmF5RWxlbWVudHMpIChKTklFbnYgKiwgamJ5dGVBcnJh
eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamJ5dGUg
KiwgamludCk7CiAgdm9pZCAoKlJlbGVhc2VDaGFyQXJyYXlFbGVtZW50cykgKEpOSUVudiAqLCBq
Y2hhckFycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqY2hhciAqLCBqaW50KTsKICB2b2lkICgqUmVsZWFzZVNob3J0QXJyYXlFbGVtZW50cykgKEpO
SUVudiAqLCBqc2hvcnRBcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAganNob3J0ICosIGppbnQpOwogIHZvaWQgKCpSZWxlYXNlSW50QXJyYXlFbGVt
ZW50cykgKEpOSUVudiAqLCBqaW50QXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGppbnQgKiwgamludCk7CiAgdm9pZCAoKlJlbGVhc2VMb25nQXJy
YXlFbGVtZW50cykgKEpOSUVudiAqLCBqbG9uZ0FycmF5LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqbG9uZyAqLCBqaW50KTsKICB2b2lkICgqUmVsZWFz
ZUZsb2F0QXJyYXlFbGVtZW50cykgKEpOSUVudiAqLCBqZmxvYXRBcnJheSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamZsb2F0ICosIGppbnQpOwogIHZv
aWQgKCpSZWxlYXNlRG91YmxlQXJyYXlFbGVtZW50cykgKEpOSUVudiAqLCBqZG91YmxlQXJyYXks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpkb3VibGUg
KiwgamludCk7CgogIHZvaWQgKCpHZXRCb29sZWFuQXJyYXlSZWdpb24pIChKTklFbnYgKiwgamJv
b2xlYW5BcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
c2l6ZSwganNpemUsIGpib29sZWFuICopOwogIHZvaWQgKCpHZXRCeXRlQXJyYXlSZWdpb24pIChK
TklFbnYgKiwgamJ5dGVBcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqc2l6ZSwganNpemUsIGpieXRlICopOwogIHZvaWQgKCpHZXRDaGFyQXJyYXlSZWdp
b24pIChKTklFbnYgKiwgamNoYXJBcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqc2l6ZSwganNpemUsIGpjaGFyICopOwogIHZvaWQgKCpHZXRTaG9ydEFy
cmF5UmVnaW9uKSAoSk5JRW52ICosIGpzaG9ydEFycmF5LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGpzaXplLCBqc2l6ZSwganNob3J0ICopOwogIHZvaWQgKCpH
ZXRJbnRBcnJheVJlZ2lvbikgKEpOSUVudiAqLCBqaW50QXJyYXksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAganNpemUsIGpzaXplLCBqaW50ICopOwogIHZvaWQg
KCpHZXRMb25nQXJyYXlSZWdpb24pIChKTklFbnYgKiwgamxvbmdBcnJheSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc2l6ZSwganNpemUsIGpsb25nICopOwog
IHZvaWQgKCpHZXRGbG9hdEFycmF5UmVnaW9uKSAoSk5JRW52ICosIGpmbG9hdEFycmF5LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzaXplLCBqc2l6ZSwgamZs
b2F0ICopOwogIHZvaWQgKCpHZXREb3VibGVBcnJheVJlZ2lvbikgKEpOSUVudiAqLCBqZG91Ymxl
QXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNpemUs
IGpzaXplLCBqZG91YmxlICopOwoKICB2b2lkICgqU2V0Qm9vbGVhbkFycmF5UmVnaW9uKSAoSk5J
RW52ICosIGpib29sZWFuQXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAganNpemUsIGpzaXplLCBqYm9vbGVhbiAqKTsKICB2b2lkICgqU2V0Qnl0ZUFycmF5
UmVnaW9uKSAoSk5JRW52ICosIGpieXRlQXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAganNpemUsIGpzaXplLCBqYnl0ZSAqKTsKICB2b2lkICgqU2V0Q2hh
ckFycmF5UmVnaW9uKSAoSk5JRW52ICosIGpjaGFyQXJyYXksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAganNpemUsIGpzaXplLCBqY2hhciAqKTsKICB2b2lkICgq
U2V0U2hvcnRBcnJheVJlZ2lvbikgKEpOSUVudiAqLCBqc2hvcnRBcnJheSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc2l6ZSwganNpemUsIGpzaG9ydCAqKTsK
ICB2b2lkICgqU2V0SW50QXJyYXlSZWdpb24pIChKTklFbnYgKiwgamludEFycmF5LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzaXplLCBqc2l6ZSwgamludCAq
KTsKICB2b2lkICgqU2V0TG9uZ0FycmF5UmVnaW9uKSAoSk5JRW52ICosIGpsb25nQXJyYXksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNpemUsIGpzaXplLCBq
bG9uZyAqKTsKICB2b2lkICgqU2V0RmxvYXRBcnJheVJlZ2lvbikgKEpOSUVudiAqLCBqZmxvYXRB
cnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc2l6ZSwg
anNpemUsIGpmbG9hdCAqKTsKICB2b2lkICgqU2V0RG91YmxlQXJyYXlSZWdpb24pIChKTklFbnYg
KiwgamRvdWJsZUFycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpzaXplLCBqc2l6ZSwgamRvdWJsZSAqKTsKCiAgamludCAoKlJlZ2lzdGVyTmF0aXZlcykg
KEpOSUVudiAqLCBqY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgSk5JTmF0aXZlTWV0aG9kICosIGppbnQpOwogIGppbnQgKCpVbnJlZ2lzdGVy
TmF0aXZlcykgKEpOSUVudiAqLCBqY2xhc3MpOwogIGppbnQgKCpNb25pdG9yRW50ZXIpIChKTklF
bnYgKiwgam9iamVjdCk7CiAgamludCAoKk1vbml0b3JFeGl0KSAoSk5JRW52ICosIGpvYmplY3Qp
OwogIGppbnQgKCpHZXRKYXZhVk0pIChKTklFbnYgKiwgSmF2YVZNICoqKTsKCiAgdm9pZCAoKkdl
dFN0cmluZ1JlZ2lvbikgKEpOSUVudiAqLCBqc3RyaW5nLCBqc2l6ZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc2l6ZSwgamNoYXIgKik7CiAgdm9pZCAoKkdl
dFN0cmluZ1VURlJlZ2lvbikgKEpOSUVudiAqLCBqc3RyaW5nLCBqc2l6ZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc2l6ZSwgY2hhciAqKTsKCiAgdm9pZCAq
ICgqR2V0UHJpbWl0aXZlQXJyYXlDcml0aWNhbCkgKEpOSUVudiAqLCBqYXJyYXksIGpib29sZWFu
ICopOwogIHZvaWQgKCpSZWxlYXNlUHJpbWl0aXZlQXJyYXlDcml0aWNhbCkgKEpOSUVudiAqLCBq
YXJyYXksIHZvaWQgKiwgamludCk7CgogIGNvbnN0IGpjaGFyICogKCpHZXRTdHJpbmdDcml0aWNh
bCkgKEpOSUVudiAqLCBqc3RyaW5nLCBqYm9vbGVhbiAqKTsKICB2b2lkICgqUmVsZWFzZVN0cmlu
Z0NyaXRpY2FsKSAoSk5JRW52ICosIGpzdHJpbmcsIGNvbnN0IGpjaGFyICopOwoKICBqd2VhayAo
Kk5ld1dlYWtHbG9iYWxSZWYpIChKTklFbnYgKiwgam9iamVjdCk7CiAgdm9pZCAoKkRlbGV0ZVdl
YWtHbG9iYWxSZWYpIChKTklFbnYgKiwgandlYWspOwoKICBqYm9vbGVhbiAoKkV4Y2VwdGlvbkNo
ZWNrKSAoSk5JRW52ICopOwp9OwoKCgpjbGFzcyBfSnZfSk5JRW52CnsKcHVibGljOgoKICBzdHJ1
Y3QgSk5JTmF0aXZlSW50ZXJmYWNlICpwOwoKCgoKCgogIGp0aHJvd2FibGUgZXg7CgoKICBqY2xh
c3Mga2xhc3M7CgoKICBzdHJ1Y3QgX0p2X0pOSV9Mb2NhbEZyYW1lICpsb2NhbHM7CgpwdWJsaWM6
CiAgamludCBHZXRWZXJzaW9uICgpCiAgeyByZXR1cm4gcC0+R2V0VmVyc2lvbiAodGhpcyk7IH0K
CiAgamNsYXNzIERlZmluZUNsYXNzIChqb2JqZWN0IG9iajAsIGNvbnN0IGpieXRlICogdmFsMSwg
anNpemUgdmFsMikKICB7IHJldHVybiBwLT5EZWZpbmVDbGFzcyAodGhpcywgb2JqMCwgdmFsMSwg
dmFsMik7IH0KCiAgamNsYXNzIEZpbmRDbGFzcyAoY29uc3QgY2hhciAqIHZhbDApCiAgeyByZXR1
cm4gcC0+RmluZENsYXNzICh0aGlzLCB2YWwwKTsgfQoKICBqbWV0aG9kSUQgRnJvbVJlZmxlY3Rl
ZE1ldGhvZCAoam9iamVjdCBvYmowKQogIHsgcmV0dXJuIHAtPkZyb21SZWZsZWN0ZWRNZXRob2Qg
KHRoaXMsIG9iajApOyB9CgogIGpmaWVsZElEIEZyb21SZWZsZWN0ZWRGaWVsZCAoam9iamVjdCBv
YmowKQogIHsgcmV0dXJuIHAtPkZyb21SZWZsZWN0ZWRGaWVsZCAodGhpcywgb2JqMCk7IH0KCiAg
am9iamVjdCBUb1JlZmxlY3RlZE1ldGhvZCAoamNsYXNzIGNsMCwgam1ldGhvZElEIG1ldGgxLCBq
Ym9vbGVhbiB2YWwyKQogIHsgcmV0dXJuIHAtPlRvUmVmbGVjdGVkTWV0aG9kICh0aGlzLCBjbDAs
IG1ldGgxLCB2YWwyKTsgfQoKICBqY2xhc3MgR2V0U3VwZXJjbGFzcyAoamNsYXNzIGNsMCkKICB7
IHJldHVybiBwLT5HZXRTdXBlcmNsYXNzICh0aGlzLCBjbDApOyB9CgogIGpib29sZWFuIElzQXNz
aWduYWJsZUZyb20gKGpjbGFzcyBjbDAsIGpjbGFzcyBjbDEpCiAgeyByZXR1cm4gcC0+SXNBc3Np
Z25hYmxlRnJvbSAodGhpcywgY2wwLCBjbDEpOyB9CgogIGpvYmplY3QgVG9SZWZsZWN0ZWRGaWVs
ZCAoamNsYXNzIGNsMCwgamZpZWxkSUQgZmxkMSwgamJvb2xlYW4gdmFsMikKICB7IHJldHVybiBw
LT5Ub1JlZmxlY3RlZEZpZWxkICh0aGlzLCBjbDAsIGZsZDEsIHZhbDIpOyB9CgogIGppbnQgVGhy
b3cgKGp0aHJvd2FibGUgdmFsMCkKICB7IHJldHVybiBwLT5UaHJvdyAodGhpcywgdmFsMCk7IH0K
CiAgamludCBUaHJvd05ldyAoamNsYXNzIGNsMCwgY29uc3QgY2hhciAqIHZhbDEpCiAgeyByZXR1
cm4gcC0+VGhyb3dOZXcgKHRoaXMsIGNsMCwgdmFsMSk7IH0KCiAganRocm93YWJsZSBFeGNlcHRp
b25PY2N1cnJlZCAoKQogIHsgcmV0dXJuIHAtPkV4Y2VwdGlvbk9jY3VycmVkICh0aGlzKTsgfQoK
ICB2b2lkIEV4Y2VwdGlvbkRlc2NyaWJlICgpCiAgeyBwLT5FeGNlcHRpb25EZXNjcmliZSAodGhp
cyk7IH0KCiAgdm9pZCBFeGNlcHRpb25DbGVhciAoKQogIHsgcC0+RXhjZXB0aW9uQ2xlYXIgKHRo
aXMpOyB9CgogIHZvaWQgRmF0YWxFcnJvciAoY29uc3QgY2hhciAqIHZhbDApCiAgeyBwLT5GYXRh
bEVycm9yICh0aGlzLCB2YWwwKTsgfQoKICBqaW50IFB1c2hMb2NhbEZyYW1lIChqaW50IHZhbDAp
CiAgeyByZXR1cm4gcC0+UHVzaExvY2FsRnJhbWUgKHRoaXMsIHZhbDApOyB9CgogIGpvYmplY3Qg
UG9wTG9jYWxGcmFtZSAoam9iamVjdCBvYmowKQogIHsgcmV0dXJuIHAtPlBvcExvY2FsRnJhbWUg
KHRoaXMsIG9iajApOyB9CgogIGpvYmplY3QgTmV3R2xvYmFsUmVmIChqb2JqZWN0IG9iajApCiAg
eyByZXR1cm4gcC0+TmV3R2xvYmFsUmVmICh0aGlzLCBvYmowKTsgfQoKICB2b2lkIERlbGV0ZUds
b2JhbFJlZiAoam9iamVjdCBvYmowKQogIHsgcC0+RGVsZXRlR2xvYmFsUmVmICh0aGlzLCBvYmow
KTsgfQoKICB2b2lkIERlbGV0ZUxvY2FsUmVmIChqb2JqZWN0IG9iajApCiAgeyBwLT5EZWxldGVM
b2NhbFJlZiAodGhpcywgb2JqMCk7IH0KCiAgamJvb2xlYW4gSXNTYW1lT2JqZWN0IChqb2JqZWN0
IG9iajAsIGpvYmplY3Qgb2JqMSkKICB7IHJldHVybiBwLT5Jc1NhbWVPYmplY3QgKHRoaXMsIG9i
ajAsIG9iajEpOyB9CgogIGpvYmplY3QgTmV3TG9jYWxSZWYgKGpvYmplY3Qgb2JqMCkKICB7IHJl
dHVybiBwLT5OZXdMb2NhbFJlZiAodGhpcywgb2JqMCk7IH0KCiAgamludCBFbnN1cmVMb2NhbENh
cGFjaXR5IChqaW50IHZhbDApCiAgeyByZXR1cm4gcC0+RW5zdXJlTG9jYWxDYXBhY2l0eSAodGhp
cywgdmFsMCk7IH0KCiAgam9iamVjdCBBbGxvY09iamVjdCAoamNsYXNzIGNsMCkKICB7IHJldHVy
biBwLT5BbGxvY09iamVjdCAodGhpcywgY2wwKTsgfQoKICBqb2JqZWN0IE5ld09iamVjdCAoamNs
YXNzIGNsMCwgam1ldGhvZElEIG1ldGgxLCAuLi4pCiAgewogICAgdmFfbGlzdCBhcmdzOwogICAg
X19idWlsdGluX3N0ZGFyZ19zdGFydCgoYXJncyksbWV0aDEpOwogICAgam9iamVjdCByZXN1bHQg
PSBwLT5OZXdPYmplY3RWICh0aGlzLCBjbDAsIG1ldGgxLCBhcmdzKTsKICAgIF9fYnVpbHRpbl92
YV9lbmQgKGFyZ3MpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGpvYmplY3QgTmV3T2JqZWN0
ViAoamNsYXNzIGNsMCwgam1ldGhvZElEIG1ldGgxLCB2YV9saXN0IHZhbDIpCiAgeyByZXR1cm4g
cC0+TmV3T2JqZWN0ViAodGhpcywgY2wwLCBtZXRoMSwgdmFsMik7IH0KCiAgam9iamVjdCBOZXdP
YmplY3RBIChqY2xhc3MgY2wwLCBqbWV0aG9kSUQgbWV0aDEsIGp2YWx1ZSAqIHZhbDIpCiAgeyBy
ZXR1cm4gcC0+TmV3T2JqZWN0QSAodGhpcywgY2wwLCBtZXRoMSwgdmFsMik7IH0KCiAgamNsYXNz
IEdldE9iamVjdENsYXNzIChqb2JqZWN0IG9iajApCiAgeyByZXR1cm4gcC0+R2V0T2JqZWN0Q2xh
c3MgKHRoaXMsIG9iajApOyB9CgogIGpib29sZWFuIElzSW5zdGFuY2VPZiAoam9iamVjdCBvYmow
LCBqY2xhc3MgY2wxKQogIHsgcmV0dXJuIHAtPklzSW5zdGFuY2VPZiAodGhpcywgb2JqMCwgY2wx
KTsgfQoKICBqbWV0aG9kSUQgR2V0TWV0aG9kSUQgKGpjbGFzcyBjbDAsIGNvbnN0IGNoYXIgKiB2
YWwxLCBjb25zdCBjaGFyICogdmFsMikKICB7IHJldHVybiBwLT5HZXRNZXRob2RJRCAodGhpcywg
Y2wwLCB2YWwxLCB2YWwyKTsgfQoKICBqb2JqZWN0IENhbGxPYmplY3RNZXRob2QgKGpvYmplY3Qg
b2JqMCwgam1ldGhvZElEIG1ldGgxLCAuLi4pCiAgewogICAgdmFfbGlzdCBhcmdzOwogICAgX19i
dWlsdGluX3N0ZGFyZ19zdGFydCgoYXJncyksbWV0aDEpOwogICAgam9iamVjdCByZXN1bHQgPSBw
LT5DYWxsT2JqZWN0TWV0aG9kViAodGhpcywgb2JqMCwgbWV0aDEsIGFyZ3MpOwogICAgX19idWls
dGluX3ZhX2VuZCAoYXJncyk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgam9iamVjdCBDYWxs
T2JqZWN0TWV0aG9kViAoam9iamVjdCBvYmowLCBqbWV0aG9kSUQgbWV0aDEsIHZhX2xpc3QgdmFs
MikKICB7IHJldHVybiBwLT5DYWxsT2JqZWN0TWV0aG9kViAodGhpcywgb2JqMCwgbWV0aDEsIHZh
bDIpOyB9CgogIGpvYmplY3QgQ2FsbE9iamVjdE1ldGhvZEEgKGpvYmplY3Qgb2JqMCwgam1ldGhv
ZElEIG1ldGgxLCBqdmFsdWUgKiB2YWwyKQogIHsgcmV0dXJuIHAtPkNhbGxPYmplY3RNZXRob2RB
ICh0aGlzLCBvYmowLCBtZXRoMSwgdmFsMik7IH0KCiAgamJvb2xlYW4gQ2FsbEJvb2xlYW5NZXRo
b2QgKGpvYmplY3Qgb2JqMCwgam1ldGhvZElEIG1ldGgxLCAuLi4pCiAgewogICAgdmFfbGlzdCBh
cmdzOwogICAgX19idWlsdGluX3N0ZGFyZ19zdGFydCgoYXJncyksbWV0aDEpOwogICAgamJvb2xl
YW4gcmVzdWx0ID0gcC0+Q2FsbEJvb2xlYW5NZXRob2RWICh0aGlzLCBvYmowLCBtZXRoMSwgYXJn
cyk7CiAgICBfX2J1aWx0aW5fdmFfZW5kIChhcmdzKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoK
ICBqYm9vbGVhbiBDYWxsQm9vbGVhbk1ldGhvZFYgKGpvYmplY3Qgb2JqMCwgam1ldGhvZElEIG1l
dGgxLCB2YV9saXN0IHZhbDIpCiAgeyByZXR1cm4gcC0+Q2FsbEJvb2xlYW5NZXRob2RWICh0aGlz
LCBvYmowLCBtZXRoMSwgdmFsMik7IH0KCiAgamJvb2xlYW4gQ2FsbEJvb2xlYW5NZXRob2RBIChq
b2JqZWN0IG9iajAsIGptZXRob2RJRCBtZXRoMSwganZhbHVlICogdmFsMikKICB7IHJldHVybiBw
LT5DYWxsQm9vbGVhbk1ldGhvZEEgKHRoaXMsIG9iajAsIG1ldGgxLCB2YWwyKTsgfQoKICBqYnl0
ZSBDYWxsQnl0ZU1ldGhvZCAoam9iamVjdCBvYmowLCBqbWV0aG9kSUQgbWV0aDEsIC4uLikKICB7
CiAgICB2YV9saXN0IGFyZ3M7CiAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRo
MSk7CiAgICBqYnl0ZSByZXN1bHQgPSBwLT5DYWxsQnl0ZU1ldGhvZFYgKHRoaXMsIG9iajAsIG1l
dGgxLCBhcmdzKTsKICAgIF9fYnVpbHRpbl92YV9lbmQgKGFyZ3MpOwogICAgcmV0dXJuIHJlc3Vs
dDsKICB9CgogIGpieXRlIENhbGxCeXRlTWV0aG9kViAoam9iamVjdCBvYmowLCBqbWV0aG9kSUQg
bWV0aDEsIHZhX2xpc3QgdmFsMikKICB7IHJldHVybiBwLT5DYWxsQnl0ZU1ldGhvZFYgKHRoaXMs
IG9iajAsIG1ldGgxLCB2YWwyKTsgfQoKICBqYnl0ZSBDYWxsQnl0ZU1ldGhvZEEgKGpvYmplY3Qg
b2JqMCwgam1ldGhvZElEIG1ldGgxLCBqdmFsdWUgKiB2YWwyKQogIHsgcmV0dXJuIHAtPkNhbGxC
eXRlTWV0aG9kQSAodGhpcywgb2JqMCwgbWV0aDEsIHZhbDIpOyB9CgogIGpjaGFyIENhbGxDaGFy
TWV0aG9kIChqb2JqZWN0IG9iajAsIGptZXRob2RJRCBtZXRoMSwgLi4uKQogIHsKICAgIHZhX2xp
c3QgYXJnczsKICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1ldGgxKTsKICAgIGpj
aGFyIHJlc3VsdCA9IHAtPkNhbGxDaGFyTWV0aG9kViAodGhpcywgb2JqMCwgbWV0aDEsIGFyZ3Mp
OwogICAgX19idWlsdGluX3ZhX2VuZCAoYXJncyk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAg
amNoYXIgQ2FsbENoYXJNZXRob2RWIChqb2JqZWN0IG9iajAsIGptZXRob2RJRCBtZXRoMSwgdmFf
bGlzdCB2YWwyKQogIHsgcmV0dXJuIHAtPkNhbGxDaGFyTWV0aG9kViAodGhpcywgb2JqMCwgbWV0
aDEsIHZhbDIpOyB9CgogIGpjaGFyIENhbGxDaGFyTWV0aG9kQSAoam9iamVjdCBvYmowLCBqbWV0
aG9kSUQgbWV0aDEsIGp2YWx1ZSAqIHZhbDIpCiAgeyByZXR1cm4gcC0+Q2FsbENoYXJNZXRob2RB
ICh0aGlzLCBvYmowLCBtZXRoMSwgdmFsMik7IH0KCiAganNob3J0IENhbGxTaG9ydE1ldGhvZCAo
am9iamVjdCBvYmowLCBqbWV0aG9kSUQgbWV0aDEsIC4uLikKICB7CiAgICB2YV9saXN0IGFyZ3M7
CiAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRoMSk7CiAgICBqc2hvcnQgcmVz
dWx0ID0gcC0+Q2FsbFNob3J0TWV0aG9kViAodGhpcywgb2JqMCwgbWV0aDEsIGFyZ3MpOwogICAg
X19idWlsdGluX3ZhX2VuZCAoYXJncyk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAganNob3J0
IENhbGxTaG9ydE1ldGhvZFYgKGpvYmplY3Qgb2JqMCwgam1ldGhvZElEIG1ldGgxLCB2YV9saXN0
IHZhbDIpCiAgeyByZXR1cm4gcC0+Q2FsbFNob3J0TWV0aG9kViAodGhpcywgb2JqMCwgbWV0aDEs
IHZhbDIpOyB9CgogIGpzaG9ydCBDYWxsU2hvcnRNZXRob2RBIChqb2JqZWN0IG9iajAsIGptZXRo
b2RJRCBtZXRoMSwganZhbHVlICogdmFsMikKICB7IHJldHVybiBwLT5DYWxsU2hvcnRNZXRob2RB
ICh0aGlzLCBvYmowLCBtZXRoMSwgdmFsMik7IH0KCiAgamludCBDYWxsSW50TWV0aG9kIChqb2Jq
ZWN0IG9iajAsIGptZXRob2RJRCBtZXRoMSwgLi4uKQogIHsKICAgIHZhX2xpc3QgYXJnczsKICAg
IF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1ldGgxKTsKICAgIGppbnQgcmVzdWx0ID0g
cC0+Q2FsbEludE1ldGhvZFYgKHRoaXMsIG9iajAsIG1ldGgxLCBhcmdzKTsKICAgIF9fYnVpbHRp
bl92YV9lbmQgKGFyZ3MpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGppbnQgQ2FsbEludE1l
dGhvZFYgKGpvYmplY3Qgb2JqMCwgam1ldGhvZElEIG1ldGgxLCB2YV9saXN0IHZhbDIpCiAgeyBy
ZXR1cm4gcC0+Q2FsbEludE1ldGhvZFYgKHRoaXMsIG9iajAsIG1ldGgxLCB2YWwyKTsgfQoKICBq
aW50IENhbGxJbnRNZXRob2RBIChqb2JqZWN0IG9iajAsIGptZXRob2RJRCBtZXRoMSwganZhbHVl
ICogdmFsMikKICB7IHJldHVybiBwLT5DYWxsSW50TWV0aG9kQSAodGhpcywgb2JqMCwgbWV0aDEs
IHZhbDIpOyB9CgogIGpsb25nIENhbGxMb25nTWV0aG9kIChqb2JqZWN0IG9iajAsIGptZXRob2RJ
RCBtZXRoMSwgLi4uKQogIHsKICAgIHZhX2xpc3QgYXJnczsKICAgIF9fYnVpbHRpbl9zdGRhcmdf
c3RhcnQoKGFyZ3MpLG1ldGgxKTsKICAgIGpsb25nIHJlc3VsdCA9IHAtPkNhbGxMb25nTWV0aG9k
ViAodGhpcywgb2JqMCwgbWV0aDEsIGFyZ3MpOwogICAgX19idWlsdGluX3ZhX2VuZCAoYXJncyk7
CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgamxvbmcgQ2FsbExvbmdNZXRob2RWIChqb2JqZWN0
IG9iajAsIGptZXRob2RJRCBtZXRoMSwgdmFfbGlzdCB2YWwyKQogIHsgcmV0dXJuIHAtPkNhbGxM
b25nTWV0aG9kViAodGhpcywgb2JqMCwgbWV0aDEsIHZhbDIpOyB9CgogIGpsb25nIENhbGxMb25n
TWV0aG9kQSAoam9iamVjdCBvYmowLCBqbWV0aG9kSUQgbWV0aDEsIGp2YWx1ZSAqIHZhbDIpCiAg
eyByZXR1cm4gcC0+Q2FsbExvbmdNZXRob2RBICh0aGlzLCBvYmowLCBtZXRoMSwgdmFsMik7IH0K
CiAgamZsb2F0IENhbGxGbG9hdE1ldGhvZCAoam9iamVjdCBvYmowLCBqbWV0aG9kSUQgbWV0aDEs
IC4uLikKICB7CiAgICB2YV9saXN0IGFyZ3M7CiAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChh
cmdzKSxtZXRoMSk7CiAgICBqZmxvYXQgcmVzdWx0ID0gcC0+Q2FsbEZsb2F0TWV0aG9kViAodGhp
cywgb2JqMCwgbWV0aDEsIGFyZ3MpOwogICAgX19idWlsdGluX3ZhX2VuZCAoYXJncyk7CiAgICBy
ZXR1cm4gcmVzdWx0OwogIH0KCiAgamZsb2F0IENhbGxGbG9hdE1ldGhvZFYgKGpvYmplY3Qgb2Jq
MCwgam1ldGhvZElEIG1ldGgxLCB2YV9saXN0IHZhbDIpCiAgeyByZXR1cm4gcC0+Q2FsbEZsb2F0
TWV0aG9kViAodGhpcywgb2JqMCwgbWV0aDEsIHZhbDIpOyB9CgogIGpmbG9hdCBDYWxsRmxvYXRN
ZXRob2RBIChqb2JqZWN0IG9iajAsIGptZXRob2RJRCBtZXRoMSwganZhbHVlICogdmFsMikKICB7
IHJldHVybiBwLT5DYWxsRmxvYXRNZXRob2RBICh0aGlzLCBvYmowLCBtZXRoMSwgdmFsMik7IH0K
CiAgamRvdWJsZSBDYWxsRG91YmxlTWV0aG9kIChqb2JqZWN0IG9iajAsIGptZXRob2RJRCBtZXRo
MSwgLi4uKQogIHsKICAgIHZhX2xpc3QgYXJnczsKICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQo
KGFyZ3MpLG1ldGgxKTsKICAgIGpkb3VibGUgcmVzdWx0ID0gcC0+Q2FsbERvdWJsZU1ldGhvZFYg
KHRoaXMsIG9iajAsIG1ldGgxLCBhcmdzKTsKICAgIF9fYnVpbHRpbl92YV9lbmQgKGFyZ3MpOwog
ICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGpkb3VibGUgQ2FsbERvdWJsZU1ldGhvZFYgKGpvYmpl
Y3Qgb2JqMCwgam1ldGhvZElEIG1ldGgxLCB2YV9saXN0IHZhbDIpCiAgeyByZXR1cm4gcC0+Q2Fs
bERvdWJsZU1ldGhvZFYgKHRoaXMsIG9iajAsIG1ldGgxLCB2YWwyKTsgfQoKICBqZG91YmxlIENh
bGxEb3VibGVNZXRob2RBIChqb2JqZWN0IG9iajAsIGptZXRob2RJRCBtZXRoMSwganZhbHVlICog
dmFsMikKICB7IHJldHVybiBwLT5DYWxsRG91YmxlTWV0aG9kQSAodGhpcywgb2JqMCwgbWV0aDEs
IHZhbDIpOyB9CgogIHZvaWQgQ2FsbFZvaWRNZXRob2QgKGpvYmplY3Qgb2JqMCwgam1ldGhvZElE
IG1ldGgxLCAuLi4pCiAgewogICAgdmFfbGlzdCBhcmdzOwogICAgX19idWlsdGluX3N0ZGFyZ19z
dGFydCgoYXJncyksbWV0aDEpOwogICAgcC0+Q2FsbFZvaWRNZXRob2RWICh0aGlzLCBvYmowLCBt
ZXRoMSwgYXJncyk7CiAgICBfX2J1aWx0aW5fdmFfZW5kIChhcmdzKTsKICB9CgogIHZvaWQgQ2Fs
bFZvaWRNZXRob2RWIChqb2JqZWN0IG9iajAsIGptZXRob2RJRCBtZXRoMSwgdmFfbGlzdCB2YWwy
KQogIHsgcC0+Q2FsbFZvaWRNZXRob2RWICh0aGlzLCBvYmowLCBtZXRoMSwgdmFsMik7IH0KCiAg
dm9pZCBDYWxsVm9pZE1ldGhvZEEgKGpvYmplY3Qgb2JqMCwgam1ldGhvZElEIG1ldGgxLCBqdmFs
dWUgKiB2YWwyKQogIHsgcC0+Q2FsbFZvaWRNZXRob2RBICh0aGlzLCBvYmowLCBtZXRoMSwgdmFs
Mik7IH0KCiAgam9iamVjdCBDYWxsTm9udmlydHVhbE9iamVjdE1ldGhvZCAoam9iamVjdCBvYmow
LCBqY2xhc3MgY2wxLCBqbWV0aG9kSUQgbWV0aDIsIC4uLikKICB7CiAgICB2YV9saXN0IGFyZ3M7
CiAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRoMik7CiAgICBqb2JqZWN0IHJl
c3VsdCA9IHAtPkNhbGxOb252aXJ0dWFsT2JqZWN0TWV0aG9kViAodGhpcywgb2JqMCwgY2wxLCBt
ZXRoMiwgYXJncyk7CiAgICBfX2J1aWx0aW5fdmFfZW5kIChhcmdzKTsKICAgIHJldHVybiByZXN1
bHQ7CiAgfQoKICBqb2JqZWN0IENhbGxOb252aXJ0dWFsT2JqZWN0TWV0aG9kViAoam9iamVjdCBv
YmowLCBqY2xhc3MgY2wxLCBqbWV0aG9kSUQgbWV0aDIsIHZhX2xpc3QgdmFsMykKICB7IHJldHVy
biBwLT5DYWxsTm9udmlydHVhbE9iamVjdE1ldGhvZFYgKHRoaXMsIG9iajAsIGNsMSwgbWV0aDIs
IHZhbDMpOyB9CgogIGpvYmplY3QgQ2FsbE5vbnZpcnR1YWxPYmplY3RNZXRob2RBIChqb2JqZWN0
IG9iajAsIGpjbGFzcyBjbDEsIGptZXRob2RJRCBtZXRoMiwganZhbHVlICogdmFsMykKICB7IHJl
dHVybiBwLT5DYWxsTm9udmlydHVhbE9iamVjdE1ldGhvZEEgKHRoaXMsIG9iajAsIGNsMSwgbWV0
aDIsIHZhbDMpOyB9CgogIGpib29sZWFuIENhbGxOb252aXJ0dWFsQm9vbGVhbk1ldGhvZCAoam9i
amVjdCBvYmowLCBqY2xhc3MgY2wxLCBqbWV0aG9kSUQgbWV0aDIsIC4uLikKICB7CiAgICB2YV9s
aXN0IGFyZ3M7CiAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRoMik7CiAgICBq
Ym9vbGVhbiByZXN1bHQgPSBwLT5DYWxsTm9udmlydHVhbEJvb2xlYW5NZXRob2RWICh0aGlzLCBv
YmowLCBjbDEsIG1ldGgyLCBhcmdzKTsKICAgIF9fYnVpbHRpbl92YV9lbmQgKGFyZ3MpOwogICAg
cmV0dXJuIHJlc3VsdDsKICB9CgogIGpib29sZWFuIENhbGxOb252aXJ0dWFsQm9vbGVhbk1ldGhv
ZFYgKGpvYmplY3Qgb2JqMCwgamNsYXNzIGNsMSwgam1ldGhvZElEIG1ldGgyLCB2YV9saXN0IHZh
bDMpCiAgeyByZXR1cm4gcC0+Q2FsbE5vbnZpcnR1YWxCb29sZWFuTWV0aG9kViAodGhpcywgb2Jq
MCwgY2wxLCBtZXRoMiwgdmFsMyk7IH0KCiAgamJvb2xlYW4gQ2FsbE5vbnZpcnR1YWxCb29sZWFu
TWV0aG9kQSAoam9iamVjdCBvYmowLCBqY2xhc3MgY2wxLCBqbWV0aG9kSUQgbWV0aDIsIGp2YWx1
ZSAqIHZhbDMpCiAgeyByZXR1cm4gcC0+Q2FsbE5vbnZpcnR1YWxCb29sZWFuTWV0aG9kQSAodGhp
cywgb2JqMCwgY2wxLCBtZXRoMiwgdmFsMyk7IH0KCiAgamJ5dGUgQ2FsbE5vbnZpcnR1YWxCeXRl
TWV0aG9kIChqb2JqZWN0IG9iajAsIGpjbGFzcyBjbDEsIGptZXRob2RJRCBtZXRoMiwgLi4uKQog
IHsKICAgIHZhX2xpc3QgYXJnczsKICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1l
dGgyKTsKICAgIGpieXRlIHJlc3VsdCA9IHAtPkNhbGxOb252aXJ0dWFsQnl0ZU1ldGhvZFYgKHRo
aXMsIG9iajAsIGNsMSwgbWV0aDIsIGFyZ3MpOwogICAgX19idWlsdGluX3ZhX2VuZCAoYXJncyk7
CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgamJ5dGUgQ2FsbE5vbnZpcnR1YWxCeXRlTWV0aG9k
ViAoam9iamVjdCBvYmowLCBqY2xhc3MgY2wxLCBqbWV0aG9kSUQgbWV0aDIsIHZhX2xpc3QgdmFs
MykKICB7IHJldHVybiBwLT5DYWxsTm9udmlydHVhbEJ5dGVNZXRob2RWICh0aGlzLCBvYmowLCBj
bDEsIG1ldGgyLCB2YWwzKTsgfQoKICBqYnl0ZSBDYWxsTm9udmlydHVhbEJ5dGVNZXRob2RBIChq
b2JqZWN0IG9iajAsIGpjbGFzcyBjbDEsIGptZXRob2RJRCBtZXRoMiwganZhbHVlICogdmFsMykK
ICB7IHJldHVybiBwLT5DYWxsTm9udmlydHVhbEJ5dGVNZXRob2RBICh0aGlzLCBvYmowLCBjbDEs
IG1ldGgyLCB2YWwzKTsgfQoKICBqY2hhciBDYWxsTm9udmlydHVhbENoYXJNZXRob2QgKGpvYmpl
Y3Qgb2JqMCwgamNsYXNzIGNsMSwgam1ldGhvZElEIG1ldGgyLCAuLi4pCiAgewogICAgdmFfbGlz
dCBhcmdzOwogICAgX19idWlsdGluX3N0ZGFyZ19zdGFydCgoYXJncyksbWV0aDIpOwogICAgamNo
YXIgcmVzdWx0ID0gcC0+Q2FsbE5vbnZpcnR1YWxDaGFyTWV0aG9kViAodGhpcywgb2JqMCwgY2wx
LCBtZXRoMiwgYXJncyk7CiAgICBfX2J1aWx0aW5fdmFfZW5kIChhcmdzKTsKICAgIHJldHVybiBy
ZXN1bHQ7CiAgfQoKICBqY2hhciBDYWxsTm9udmlydHVhbENoYXJNZXRob2RWIChqb2JqZWN0IG9i
ajAsIGpjbGFzcyBjbDEsIGptZXRob2RJRCBtZXRoMiwgdmFfbGlzdCB2YWwzKQogIHsgcmV0dXJu
IHAtPkNhbGxOb252aXJ0dWFsQ2hhck1ldGhvZFYgKHRoaXMsIG9iajAsIGNsMSwgbWV0aDIsIHZh
bDMpOyB9CgogIGpjaGFyIENhbGxOb252aXJ0dWFsQ2hhck1ldGhvZEEgKGpvYmplY3Qgb2JqMCwg
amNsYXNzIGNsMSwgam1ldGhvZElEIG1ldGgyLCBqdmFsdWUgKiB2YWwzKQogIHsgcmV0dXJuIHAt
PkNhbGxOb252aXJ0dWFsQ2hhck1ldGhvZEEgKHRoaXMsIG9iajAsIGNsMSwgbWV0aDIsIHZhbDMp
OyB9CgogIGpzaG9ydCBDYWxsTm9udmlydHVhbFNob3J0TWV0aG9kIChqb2JqZWN0IG9iajAsIGpj
bGFzcyBjbDEsIGptZXRob2RJRCBtZXRoMiwgLi4uKQogIHsKICAgIHZhX2xpc3QgYXJnczsKICAg
IF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1ldGgyKTsKICAgIGpzaG9ydCByZXN1bHQg
PSBwLT5DYWxsTm9udmlydHVhbFNob3J0TWV0aG9kViAodGhpcywgb2JqMCwgY2wxLCBtZXRoMiwg
YXJncyk7CiAgICBfX2J1aWx0aW5fdmFfZW5kIChhcmdzKTsKICAgIHJldHVybiByZXN1bHQ7CiAg
fQoKICBqc2hvcnQgQ2FsbE5vbnZpcnR1YWxTaG9ydE1ldGhvZFYgKGpvYmplY3Qgb2JqMCwgamNs
YXNzIGNsMSwgam1ldGhvZElEIG1ldGgyLCB2YV9saXN0IHZhbDMpCiAgeyByZXR1cm4gcC0+Q2Fs
bE5vbnZpcnR1YWxTaG9ydE1ldGhvZFYgKHRoaXMsIG9iajAsIGNsMSwgbWV0aDIsIHZhbDMpOyB9
CgogIGpzaG9ydCBDYWxsTm9udmlydHVhbFNob3J0TWV0aG9kQSAoam9iamVjdCBvYmowLCBqY2xh
c3MgY2wxLCBqbWV0aG9kSUQgbWV0aDIsIGp2YWx1ZSAqIHZhbDMpCiAgeyByZXR1cm4gcC0+Q2Fs
bE5vbnZpcnR1YWxTaG9ydE1ldGhvZEEgKHRoaXMsIG9iajAsIGNsMSwgbWV0aDIsIHZhbDMpOyB9
CgogIGppbnQgQ2FsbE5vbnZpcnR1YWxJbnRNZXRob2QgKGpvYmplY3Qgb2JqMCwgamNsYXNzIGNs
MSwgam1ldGhvZElEIG1ldGgyLCAuLi4pCiAgewogICAgdmFfbGlzdCBhcmdzOwogICAgX19idWls
dGluX3N0ZGFyZ19zdGFydCgoYXJncyksbWV0aDIpOwogICAgamludCByZXN1bHQgPSBwLT5DYWxs
Tm9udmlydHVhbEludE1ldGhvZFYgKHRoaXMsIG9iajAsIGNsMSwgbWV0aDIsIGFyZ3MpOwogICAg
X19idWlsdGluX3ZhX2VuZCAoYXJncyk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgamludCBD
YWxsTm9udmlydHVhbEludE1ldGhvZFYgKGpvYmplY3Qgb2JqMCwgamNsYXNzIGNsMSwgam1ldGhv
ZElEIG1ldGgyLCB2YV9saXN0IHZhbDMpCiAgeyByZXR1cm4gcC0+Q2FsbE5vbnZpcnR1YWxJbnRN
ZXRob2RWICh0aGlzLCBvYmowLCBjbDEsIG1ldGgyLCB2YWwzKTsgfQoKICBqaW50IENhbGxOb252
aXJ0dWFsSW50TWV0aG9kQSAoam9iamVjdCBvYmowLCBqY2xhc3MgY2wxLCBqbWV0aG9kSUQgbWV0
aDIsIGp2YWx1ZSAqIHZhbDMpCiAgeyByZXR1cm4gcC0+Q2FsbE5vbnZpcnR1YWxJbnRNZXRob2RB
ICh0aGlzLCBvYmowLCBjbDEsIG1ldGgyLCB2YWwzKTsgfQoKICBqbG9uZyBDYWxsTm9udmlydHVh
bExvbmdNZXRob2QgKGpvYmplY3Qgb2JqMCwgamNsYXNzIGNsMSwgam1ldGhvZElEIG1ldGgyLCAu
Li4pCiAgewogICAgdmFfbGlzdCBhcmdzOwogICAgX19idWlsdGluX3N0ZGFyZ19zdGFydCgoYXJn
cyksbWV0aDIpOwogICAgamxvbmcgcmVzdWx0ID0gcC0+Q2FsbE5vbnZpcnR1YWxMb25nTWV0aG9k
ViAodGhpcywgb2JqMCwgY2wxLCBtZXRoMiwgYXJncyk7CiAgICBfX2J1aWx0aW5fdmFfZW5kIChh
cmdzKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBqbG9uZyBDYWxsTm9udmlydHVhbExvbmdN
ZXRob2RWIChqb2JqZWN0IG9iajAsIGpjbGFzcyBjbDEsIGptZXRob2RJRCBtZXRoMiwgdmFfbGlz
dCB2YWwzKQogIHsgcmV0dXJuIHAtPkNhbGxOb252aXJ0dWFsTG9uZ01ldGhvZFYgKHRoaXMsIG9i
ajAsIGNsMSwgbWV0aDIsIHZhbDMpOyB9CgogIGpsb25nIENhbGxOb252aXJ0dWFsTG9uZ01ldGhv
ZEEgKGpvYmplY3Qgb2JqMCwgamNsYXNzIGNsMSwgam1ldGhvZElEIG1ldGgyLCBqdmFsdWUgKiB2
YWwzKQogIHsgcmV0dXJuIHAtPkNhbGxOb252aXJ0dWFsTG9uZ01ldGhvZEEgKHRoaXMsIG9iajAs
IGNsMSwgbWV0aDIsIHZhbDMpOyB9CgogIGpmbG9hdCBDYWxsTm9udmlydHVhbEZsb2F0TWV0aG9k
IChqb2JqZWN0IG9iajAsIGpjbGFzcyBjbDEsIGptZXRob2RJRCBtZXRoMiwgLi4uKQogIHsKICAg
IHZhX2xpc3QgYXJnczsKICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1ldGgyKTsK
ICAgIGpmbG9hdCByZXN1bHQgPSBwLT5DYWxsTm9udmlydHVhbEZsb2F0TWV0aG9kViAodGhpcywg
b2JqMCwgY2wxLCBtZXRoMiwgYXJncyk7CiAgICBfX2J1aWx0aW5fdmFfZW5kIChhcmdzKTsKICAg
IHJldHVybiByZXN1bHQ7CiAgfQoKICBqZmxvYXQgQ2FsbE5vbnZpcnR1YWxGbG9hdE1ldGhvZFYg
KGpvYmplY3Qgb2JqMCwgamNsYXNzIGNsMSwgam1ldGhvZElEIG1ldGgyLCB2YV9saXN0IHZhbDMp
CiAgeyByZXR1cm4gcC0+Q2FsbE5vbnZpcnR1YWxGbG9hdE1ldGhvZFYgKHRoaXMsIG9iajAsIGNs
MSwgbWV0aDIsIHZhbDMpOyB9CgogIGpmbG9hdCBDYWxsTm9udmlydHVhbEZsb2F0TWV0aG9kQSAo
am9iamVjdCBvYmowLCBqY2xhc3MgY2wxLCBqbWV0aG9kSUQgbWV0aDIsIGp2YWx1ZSAqIHZhbDMp
CiAgeyByZXR1cm4gcC0+Q2FsbE5vbnZpcnR1YWxGbG9hdE1ldGhvZEEgKHRoaXMsIG9iajAsIGNs
MSwgbWV0aDIsIHZhbDMpOyB9CgogIGpkb3VibGUgQ2FsbE5vbnZpcnR1YWxEb3VibGVNZXRob2Qg
KGpvYmplY3Qgb2JqMCwgamNsYXNzIGNsMSwgam1ldGhvZElEIG1ldGgyLCAuLi4pCiAgewogICAg
dmFfbGlzdCBhcmdzOwogICAgX19idWlsdGluX3N0ZGFyZ19zdGFydCgoYXJncyksbWV0aDIpOwog
ICAgamRvdWJsZSByZXN1bHQgPSBwLT5DYWxsTm9udmlydHVhbERvdWJsZU1ldGhvZFYgKHRoaXMs
IG9iajAsIGNsMSwgbWV0aDIsIGFyZ3MpOwogICAgX19idWlsdGluX3ZhX2VuZCAoYXJncyk7CiAg
ICByZXR1cm4gcmVzdWx0OwogIH0KCiAgamRvdWJsZSBDYWxsTm9udmlydHVhbERvdWJsZU1ldGhv
ZFYgKGpvYmplY3Qgb2JqMCwgamNsYXNzIGNsMSwgam1ldGhvZElEIG1ldGgyLCB2YV9saXN0IHZh
bDMpCiAgeyByZXR1cm4gcC0+Q2FsbE5vbnZpcnR1YWxEb3VibGVNZXRob2RWICh0aGlzLCBvYmow
LCBjbDEsIG1ldGgyLCB2YWwzKTsgfQoKICBqZG91YmxlIENhbGxOb252aXJ0dWFsRG91YmxlTWV0
aG9kQSAoam9iamVjdCBvYmowLCBqY2xhc3MgY2wxLCBqbWV0aG9kSUQgbWV0aDIsIGp2YWx1ZSAq
IHZhbDMpCiAgeyByZXR1cm4gcC0+Q2FsbE5vbnZpcnR1YWxEb3VibGVNZXRob2RBICh0aGlzLCBv
YmowLCBjbDEsIG1ldGgyLCB2YWwzKTsgfQoKICB2b2lkIENhbGxOb252aXJ0dWFsVm9pZE1ldGhv
ZCAoam9iamVjdCBvYmowLCBqY2xhc3MgY2wxLCBqbWV0aG9kSUQgbWV0aDIsIC4uLikKICB7CiAg
ICB2YV9saXN0IGFyZ3M7CiAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRoMik7
CiAgICBwLT5DYWxsTm9udmlydHVhbFZvaWRNZXRob2RWICh0aGlzLCBvYmowLCBjbDEsIG1ldGgy
LCBhcmdzKTsKICAgIF9fYnVpbHRpbl92YV9lbmQgKGFyZ3MpOwogIH0KCiAgdm9pZCBDYWxsTm9u
dmlydHVhbFZvaWRNZXRob2RWIChqb2JqZWN0IG9iajAsIGpjbGFzcyBjbDEsIGptZXRob2RJRCBt
ZXRoMiwgdmFfbGlzdCB2YWwzKQogIHsgcC0+Q2FsbE5vbnZpcnR1YWxWb2lkTWV0aG9kViAodGhp
cywgb2JqMCwgY2wxLCBtZXRoMiwgdmFsMyk7IH0KCiAgdm9pZCBDYWxsTm9udmlydHVhbFZvaWRN
ZXRob2RBIChqb2JqZWN0IG9iajAsIGpjbGFzcyBjbDEsIGptZXRob2RJRCBtZXRoMiwganZhbHVl
ICogdmFsMykKICB7IHAtPkNhbGxOb252aXJ0dWFsVm9pZE1ldGhvZEEgKHRoaXMsIG9iajAsIGNs
MSwgbWV0aDIsIHZhbDMpOyB9CgogIGpmaWVsZElEIEdldEZpZWxkSUQgKGpjbGFzcyBjbDAsIGNv
bnN0IGNoYXIgKiB2YWwxLCBjb25zdCBjaGFyICogdmFsMikKICB7IHJldHVybiBwLT5HZXRGaWVs
ZElEICh0aGlzLCBjbDAsIHZhbDEsIHZhbDIpOyB9CgogIGpvYmplY3QgR2V0T2JqZWN0RmllbGQg
KGpvYmplY3Qgb2JqMCwgamZpZWxkSUQgZmxkMSkKICB7IHJldHVybiBwLT5HZXRPYmplY3RGaWVs
ZCAodGhpcywgb2JqMCwgZmxkMSk7IH0KCiAgamJvb2xlYW4gR2V0Qm9vbGVhbkZpZWxkIChqb2Jq
ZWN0IG9iajAsIGpmaWVsZElEIGZsZDEpCiAgeyByZXR1cm4gcC0+R2V0Qm9vbGVhbkZpZWxkICh0
aGlzLCBvYmowLCBmbGQxKTsgfQoKICBqYnl0ZSBHZXRCeXRlRmllbGQgKGpvYmplY3Qgb2JqMCwg
amZpZWxkSUQgZmxkMSkKICB7IHJldHVybiBwLT5HZXRCeXRlRmllbGQgKHRoaXMsIG9iajAsIGZs
ZDEpOyB9CgogIGpjaGFyIEdldENoYXJGaWVsZCAoam9iamVjdCBvYmowLCBqZmllbGRJRCBmbGQx
KQogIHsgcmV0dXJuIHAtPkdldENoYXJGaWVsZCAodGhpcywgb2JqMCwgZmxkMSk7IH0KCiAganNo
b3J0IEdldFNob3J0RmllbGQgKGpvYmplY3Qgb2JqMCwgamZpZWxkSUQgZmxkMSkKICB7IHJldHVy
biBwLT5HZXRTaG9ydEZpZWxkICh0aGlzLCBvYmowLCBmbGQxKTsgfQoKICBqaW50IEdldEludEZp
ZWxkIChqb2JqZWN0IG9iajAsIGpmaWVsZElEIGZsZDEpCiAgeyByZXR1cm4gcC0+R2V0SW50Rmll
bGQgKHRoaXMsIG9iajAsIGZsZDEpOyB9CgogIGpsb25nIEdldExvbmdGaWVsZCAoam9iamVjdCBv
YmowLCBqZmllbGRJRCBmbGQxKQogIHsgcmV0dXJuIHAtPkdldExvbmdGaWVsZCAodGhpcywgb2Jq
MCwgZmxkMSk7IH0KCiAgamZsb2F0IEdldEZsb2F0RmllbGQgKGpvYmplY3Qgb2JqMCwgamZpZWxk
SUQgZmxkMSkKICB7IHJldHVybiBwLT5HZXRGbG9hdEZpZWxkICh0aGlzLCBvYmowLCBmbGQxKTsg
fQoKICBqZG91YmxlIEdldERvdWJsZUZpZWxkIChqb2JqZWN0IG9iajAsIGpmaWVsZElEIGZsZDEp
CiAgeyByZXR1cm4gcC0+R2V0RG91YmxlRmllbGQgKHRoaXMsIG9iajAsIGZsZDEpOyB9CgogIHZv
aWQgU2V0T2JqZWN0RmllbGQgKGpvYmplY3Qgb2JqMCwgamZpZWxkSUQgZmxkMSwgam9iamVjdCBv
YmoyKQogIHsgcC0+U2V0T2JqZWN0RmllbGQgKHRoaXMsIG9iajAsIGZsZDEsIG9iajIpOyB9Cgog
IHZvaWQgU2V0Qm9vbGVhbkZpZWxkIChqb2JqZWN0IG9iajAsIGpmaWVsZElEIGZsZDEsIGpib29s
ZWFuIHZhbDIpCiAgeyBwLT5TZXRCb29sZWFuRmllbGQgKHRoaXMsIG9iajAsIGZsZDEsIHZhbDIp
OyB9CgogIHZvaWQgU2V0Qnl0ZUZpZWxkIChqb2JqZWN0IG9iajAsIGpmaWVsZElEIGZsZDEsIGpi
eXRlIHZhbDIpCiAgeyBwLT5TZXRCeXRlRmllbGQgKHRoaXMsIG9iajAsIGZsZDEsIHZhbDIpOyB9
CgogIHZvaWQgU2V0Q2hhckZpZWxkIChqb2JqZWN0IG9iajAsIGpmaWVsZElEIGZsZDEsIGpjaGFy
IHZhbDIpCiAgeyBwLT5TZXRDaGFyRmllbGQgKHRoaXMsIG9iajAsIGZsZDEsIHZhbDIpOyB9Cgog
IHZvaWQgU2V0U2hvcnRGaWVsZCAoam9iamVjdCBvYmowLCBqZmllbGRJRCBmbGQxLCBqc2hvcnQg
dmFsMikKICB7IHAtPlNldFNob3J0RmllbGQgKHRoaXMsIG9iajAsIGZsZDEsIHZhbDIpOyB9Cgog
IHZvaWQgU2V0SW50RmllbGQgKGpvYmplY3Qgb2JqMCwgamZpZWxkSUQgZmxkMSwgamludCB2YWwy
KQogIHsgcC0+U2V0SW50RmllbGQgKHRoaXMsIG9iajAsIGZsZDEsIHZhbDIpOyB9CgogIHZvaWQg
U2V0TG9uZ0ZpZWxkIChqb2JqZWN0IG9iajAsIGpmaWVsZElEIGZsZDEsIGpsb25nIHZhbDIpCiAg
eyBwLT5TZXRMb25nRmllbGQgKHRoaXMsIG9iajAsIGZsZDEsIHZhbDIpOyB9CgogIHZvaWQgU2V0
RmxvYXRGaWVsZCAoam9iamVjdCBvYmowLCBqZmllbGRJRCBmbGQxLCBqZmxvYXQgdmFsMikKICB7
IHAtPlNldEZsb2F0RmllbGQgKHRoaXMsIG9iajAsIGZsZDEsIHZhbDIpOyB9CgogIHZvaWQgU2V0
RG91YmxlRmllbGQgKGpvYmplY3Qgb2JqMCwgamZpZWxkSUQgZmxkMSwgamRvdWJsZSB2YWwyKQog
IHsgcC0+U2V0RG91YmxlRmllbGQgKHRoaXMsIG9iajAsIGZsZDEsIHZhbDIpOyB9CgogIGptZXRo
b2RJRCBHZXRTdGF0aWNNZXRob2RJRCAoamNsYXNzIGNsMCwgY29uc3QgY2hhciAqIHZhbDEsIGNv
bnN0IGNoYXIgKiB2YWwyKQogIHsgcmV0dXJuIHAtPkdldFN0YXRpY01ldGhvZElEICh0aGlzLCBj
bDAsIHZhbDEsIHZhbDIpOyB9CgogIGpvYmplY3QgQ2FsbFN0YXRpY09iamVjdE1ldGhvZCAoamNs
YXNzIGNsMCwgam1ldGhvZElEIG1ldGgxLCAuLi4pCiAgewogICAgdmFfbGlzdCBhcmdzOwogICAg
X19idWlsdGluX3N0ZGFyZ19zdGFydCgoYXJncyksbWV0aDEpOwogICAgam9iamVjdCByZXN1bHQg
PSBwLT5DYWxsU3RhdGljT2JqZWN0TWV0aG9kViAodGhpcywgY2wwLCBtZXRoMSwgYXJncyk7CiAg
ICBfX2J1aWx0aW5fdmFfZW5kIChhcmdzKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBqb2Jq
ZWN0IENhbGxTdGF0aWNPYmplY3RNZXRob2RWIChqY2xhc3MgY2wwLCBqbWV0aG9kSUQgbWV0aDEs
IHZhX2xpc3QgdmFsMikKICB7IHJldHVybiBwLT5DYWxsU3RhdGljT2JqZWN0TWV0aG9kViAodGhp
cywgY2wwLCBtZXRoMSwgdmFsMik7IH0KCiAgam9iamVjdCBDYWxsU3RhdGljT2JqZWN0TWV0aG9k
QSAoamNsYXNzIGNsMCwgam1ldGhvZElEIG1ldGgxLCBqdmFsdWUgKiB2YWwyKQogIHsgcmV0dXJu
IHAtPkNhbGxTdGF0aWNPYmplY3RNZXRob2RBICh0aGlzLCBjbDAsIG1ldGgxLCB2YWwyKTsgfQoK
ICBqYm9vbGVhbiBDYWxsU3RhdGljQm9vbGVhbk1ldGhvZCAoamNsYXNzIGNsMCwgam1ldGhvZElE
IG1ldGgxLCAuLi4pCiAgewogICAgdmFfbGlzdCBhcmdzOwogICAgX19idWlsdGluX3N0ZGFyZ19z
dGFydCgoYXJncyksbWV0aDEpOwogICAgamJvb2xlYW4gcmVzdWx0ID0gcC0+Q2FsbFN0YXRpY0Jv
b2xlYW5NZXRob2RWICh0aGlzLCBjbDAsIG1ldGgxLCBhcmdzKTsKICAgIF9fYnVpbHRpbl92YV9l
bmQgKGFyZ3MpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGpib29sZWFuIENhbGxTdGF0aWNC
b29sZWFuTWV0aG9kViAoamNsYXNzIGNsMCwgam1ldGhvZElEIG1ldGgxLCB2YV9saXN0IHZhbDIp
CiAgeyByZXR1cm4gcC0+Q2FsbFN0YXRpY0Jvb2xlYW5NZXRob2RWICh0aGlzLCBjbDAsIG1ldGgx
LCB2YWwyKTsgfQoKICBqYm9vbGVhbiBDYWxsU3RhdGljQm9vbGVhbk1ldGhvZEEgKGpjbGFzcyBj
bDAsIGptZXRob2RJRCBtZXRoMSwganZhbHVlICogdmFsMikKICB7IHJldHVybiBwLT5DYWxsU3Rh
dGljQm9vbGVhbk1ldGhvZEEgKHRoaXMsIGNsMCwgbWV0aDEsIHZhbDIpOyB9CgogIGpieXRlIENh
bGxTdGF0aWNCeXRlTWV0aG9kIChqY2xhc3MgY2wwLCBqbWV0aG9kSUQgbWV0aDEsIC4uLikKICB7
CiAgICB2YV9saXN0IGFyZ3M7CiAgICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRo
MSk7CiAgICBqYnl0ZSByZXN1bHQgPSBwLT5DYWxsU3RhdGljQnl0ZU1ldGhvZFYgKHRoaXMsIGNs
MCwgbWV0aDEsIGFyZ3MpOwogICAgX19idWlsdGluX3ZhX2VuZCAoYXJncyk7CiAgICByZXR1cm4g
cmVzdWx0OwogIH0KCiAgamJ5dGUgQ2FsbFN0YXRpY0J5dGVNZXRob2RWIChqY2xhc3MgY2wwLCBq
bWV0aG9kSUQgbWV0aDEsIHZhX2xpc3QgdmFsMikKICB7IHJldHVybiBwLT5DYWxsU3RhdGljQnl0
ZU1ldGhvZFYgKHRoaXMsIGNsMCwgbWV0aDEsIHZhbDIpOyB9CgogIGpieXRlIENhbGxTdGF0aWNC
eXRlTWV0aG9kQSAoamNsYXNzIGNsMCwgam1ldGhvZElEIG1ldGgxLCBqdmFsdWUgKiB2YWwyKQog
IHsgcmV0dXJuIHAtPkNhbGxTdGF0aWNCeXRlTWV0aG9kQSAodGhpcywgY2wwLCBtZXRoMSwgdmFs
Mik7IH0KCiAgamNoYXIgQ2FsbFN0YXRpY0NoYXJNZXRob2QgKGpjbGFzcyBjbDAsIGptZXRob2RJ
RCBtZXRoMSwgLi4uKQogIHsKICAgIHZhX2xpc3QgYXJnczsKICAgIF9fYnVpbHRpbl9zdGRhcmdf
c3RhcnQoKGFyZ3MpLG1ldGgxKTsKICAgIGpjaGFyIHJlc3VsdCA9IHAtPkNhbGxTdGF0aWNDaGFy
TWV0aG9kViAodGhpcywgY2wwLCBtZXRoMSwgYXJncyk7CiAgICBfX2J1aWx0aW5fdmFfZW5kIChh
cmdzKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBqY2hhciBDYWxsU3RhdGljQ2hhck1ldGhv
ZFYgKGpjbGFzcyBjbDAsIGptZXRob2RJRCBtZXRoMSwgdmFfbGlzdCB2YWwyKQogIHsgcmV0dXJu
IHAtPkNhbGxTdGF0aWNDaGFyTWV0aG9kViAodGhpcywgY2wwLCBtZXRoMSwgdmFsMik7IH0KCiAg
amNoYXIgQ2FsbFN0YXRpY0NoYXJNZXRob2RBIChqY2xhc3MgY2wwLCBqbWV0aG9kSUQgbWV0aDEs
IGp2YWx1ZSAqIHZhbDIpCiAgeyByZXR1cm4gcC0+Q2FsbFN0YXRpY0NoYXJNZXRob2RBICh0aGlz
LCBjbDAsIG1ldGgxLCB2YWwyKTsgfQoKICBqc2hvcnQgQ2FsbFN0YXRpY1Nob3J0TWV0aG9kIChq
Y2xhc3MgY2wwLCBqbWV0aG9kSUQgbWV0aDEsIC4uLikKICB7CiAgICB2YV9saXN0IGFyZ3M7CiAg
ICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRoMSk7CiAgICBqc2hvcnQgcmVzdWx0
ID0gcC0+Q2FsbFN0YXRpY1Nob3J0TWV0aG9kViAodGhpcywgY2wwLCBtZXRoMSwgYXJncyk7CiAg
ICBfX2J1aWx0aW5fdmFfZW5kIChhcmdzKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBqc2hv
cnQgQ2FsbFN0YXRpY1Nob3J0TWV0aG9kViAoamNsYXNzIGNsMCwgam1ldGhvZElEIG1ldGgxLCB2
YV9saXN0IHZhbDIpCiAgeyByZXR1cm4gcC0+Q2FsbFN0YXRpY1Nob3J0TWV0aG9kViAodGhpcywg
Y2wwLCBtZXRoMSwgdmFsMik7IH0KCiAganNob3J0IENhbGxTdGF0aWNTaG9ydE1ldGhvZEEgKGpj
bGFzcyBjbDAsIGptZXRob2RJRCBtZXRoMSwganZhbHVlICogdmFsMikKICB7IHJldHVybiBwLT5D
YWxsU3RhdGljU2hvcnRNZXRob2RBICh0aGlzLCBjbDAsIG1ldGgxLCB2YWwyKTsgfQoKICBqaW50
IENhbGxTdGF0aWNJbnRNZXRob2QgKGpjbGFzcyBjbDAsIGptZXRob2RJRCBtZXRoMSwgLi4uKQog
IHsKICAgIHZhX2xpc3QgYXJnczsKICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1l
dGgxKTsKICAgIGppbnQgcmVzdWx0ID0gcC0+Q2FsbFN0YXRpY0ludE1ldGhvZFYgKHRoaXMsIGNs
MCwgbWV0aDEsIGFyZ3MpOwogICAgX19idWlsdGluX3ZhX2VuZCAoYXJncyk7CiAgICByZXR1cm4g
cmVzdWx0OwogIH0KCiAgamludCBDYWxsU3RhdGljSW50TWV0aG9kViAoamNsYXNzIGNsMCwgam1l
dGhvZElEIG1ldGgxLCB2YV9saXN0IHZhbDIpCiAgeyByZXR1cm4gcC0+Q2FsbFN0YXRpY0ludE1l
dGhvZFYgKHRoaXMsIGNsMCwgbWV0aDEsIHZhbDIpOyB9CgogIGppbnQgQ2FsbFN0YXRpY0ludE1l
dGhvZEEgKGpjbGFzcyBjbDAsIGptZXRob2RJRCBtZXRoMSwganZhbHVlICogdmFsMikKICB7IHJl
dHVybiBwLT5DYWxsU3RhdGljSW50TWV0aG9kQSAodGhpcywgY2wwLCBtZXRoMSwgdmFsMik7IH0K
CiAgamxvbmcgQ2FsbFN0YXRpY0xvbmdNZXRob2QgKGpjbGFzcyBjbDAsIGptZXRob2RJRCBtZXRo
MSwgLi4uKQogIHsKICAgIHZhX2xpc3QgYXJnczsKICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQo
KGFyZ3MpLG1ldGgxKTsKICAgIGpsb25nIHJlc3VsdCA9IHAtPkNhbGxTdGF0aWNMb25nTWV0aG9k
ViAodGhpcywgY2wwLCBtZXRoMSwgYXJncyk7CiAgICBfX2J1aWx0aW5fdmFfZW5kIChhcmdzKTsK
ICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBqbG9uZyBDYWxsU3RhdGljTG9uZ01ldGhvZFYgKGpj
bGFzcyBjbDAsIGptZXRob2RJRCBtZXRoMSwgdmFfbGlzdCB2YWwyKQogIHsgcmV0dXJuIHAtPkNh
bGxTdGF0aWNMb25nTWV0aG9kViAodGhpcywgY2wwLCBtZXRoMSwgdmFsMik7IH0KCiAgamxvbmcg
Q2FsbFN0YXRpY0xvbmdNZXRob2RBIChqY2xhc3MgY2wwLCBqbWV0aG9kSUQgbWV0aDEsIGp2YWx1
ZSAqIHZhbDIpCiAgeyByZXR1cm4gcC0+Q2FsbFN0YXRpY0xvbmdNZXRob2RBICh0aGlzLCBjbDAs
IG1ldGgxLCB2YWwyKTsgfQoKICBqZmxvYXQgQ2FsbFN0YXRpY0Zsb2F0TWV0aG9kIChqY2xhc3Mg
Y2wwLCBqbWV0aG9kSUQgbWV0aDEsIC4uLikKICB7CiAgICB2YV9saXN0IGFyZ3M7CiAgICBfX2J1
aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxtZXRoMSk7CiAgICBqZmxvYXQgcmVzdWx0ID0gcC0+
Q2FsbFN0YXRpY0Zsb2F0TWV0aG9kViAodGhpcywgY2wwLCBtZXRoMSwgYXJncyk7CiAgICBfX2J1
aWx0aW5fdmFfZW5kIChhcmdzKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBqZmxvYXQgQ2Fs
bFN0YXRpY0Zsb2F0TWV0aG9kViAoamNsYXNzIGNsMCwgam1ldGhvZElEIG1ldGgxLCB2YV9saXN0
IHZhbDIpCiAgeyByZXR1cm4gcC0+Q2FsbFN0YXRpY0Zsb2F0TWV0aG9kViAodGhpcywgY2wwLCBt
ZXRoMSwgdmFsMik7IH0KCiAgamZsb2F0IENhbGxTdGF0aWNGbG9hdE1ldGhvZEEgKGpjbGFzcyBj
bDAsIGptZXRob2RJRCBtZXRoMSwganZhbHVlICogdmFsMikKICB7IHJldHVybiBwLT5DYWxsU3Rh
dGljRmxvYXRNZXRob2RBICh0aGlzLCBjbDAsIG1ldGgxLCB2YWwyKTsgfQoKICBqZG91YmxlIENh
bGxTdGF0aWNEb3VibGVNZXRob2QgKGpjbGFzcyBjbDAsIGptZXRob2RJRCBtZXRoMSwgLi4uKQog
IHsKICAgIHZhX2xpc3QgYXJnczsKICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLG1l
dGgxKTsKICAgIGpkb3VibGUgcmVzdWx0ID0gcC0+Q2FsbFN0YXRpY0RvdWJsZU1ldGhvZFYgKHRo
aXMsIGNsMCwgbWV0aDEsIGFyZ3MpOwogICAgX19idWlsdGluX3ZhX2VuZCAoYXJncyk7CiAgICBy
ZXR1cm4gcmVzdWx0OwogIH0KCiAgamRvdWJsZSBDYWxsU3RhdGljRG91YmxlTWV0aG9kViAoamNs
YXNzIGNsMCwgam1ldGhvZElEIG1ldGgxLCB2YV9saXN0IHZhbDIpCiAgeyByZXR1cm4gcC0+Q2Fs
bFN0YXRpY0RvdWJsZU1ldGhvZFYgKHRoaXMsIGNsMCwgbWV0aDEsIHZhbDIpOyB9CgogIGpkb3Vi
bGUgQ2FsbFN0YXRpY0RvdWJsZU1ldGhvZEEgKGpjbGFzcyBjbDAsIGptZXRob2RJRCBtZXRoMSwg
anZhbHVlICogdmFsMikKICB7IHJldHVybiBwLT5DYWxsU3RhdGljRG91YmxlTWV0aG9kQSAodGhp
cywgY2wwLCBtZXRoMSwgdmFsMik7IH0KCiAgdm9pZCBDYWxsU3RhdGljVm9pZE1ldGhvZCAoamNs
YXNzIGNsMCwgam1ldGhvZElEIG1ldGgxLCAuLi4pCiAgewogICAgdmFfbGlzdCBhcmdzOwogICAg
X19idWlsdGluX3N0ZGFyZ19zdGFydCgoYXJncyksbWV0aDEpOwogICAgcC0+Q2FsbFN0YXRpY1Zv
aWRNZXRob2RWICh0aGlzLCBjbDAsIG1ldGgxLCBhcmdzKTsKICAgIF9fYnVpbHRpbl92YV9lbmQg
KGFyZ3MpOwogIH0KCiAgdm9pZCBDYWxsU3RhdGljVm9pZE1ldGhvZFYgKGpjbGFzcyBjbDAsIGpt
ZXRob2RJRCBtZXRoMSwgdmFfbGlzdCB2YWwyKQogIHsgcC0+Q2FsbFN0YXRpY1ZvaWRNZXRob2RW
ICh0aGlzLCBjbDAsIG1ldGgxLCB2YWwyKTsgfQoKICB2b2lkIENhbGxTdGF0aWNWb2lkTWV0aG9k
QSAoamNsYXNzIGNsMCwgam1ldGhvZElEIG1ldGgxLCBqdmFsdWUgKiB2YWwyKQogIHsgcC0+Q2Fs
bFN0YXRpY1ZvaWRNZXRob2RBICh0aGlzLCBjbDAsIG1ldGgxLCB2YWwyKTsgfQoKICBqZmllbGRJ
RCBHZXRTdGF0aWNGaWVsZElEIChqY2xhc3MgY2wwLCBjb25zdCBjaGFyICogdmFsMSwgY29uc3Qg
Y2hhciAqIHZhbDIpCiAgeyByZXR1cm4gcC0+R2V0U3RhdGljRmllbGRJRCAodGhpcywgY2wwLCB2
YWwxLCB2YWwyKTsgfQoKICBqb2JqZWN0IEdldFN0YXRpY09iamVjdEZpZWxkIChqY2xhc3MgY2ww
LCBqZmllbGRJRCBmbGQxKQogIHsgcmV0dXJuIHAtPkdldFN0YXRpY09iamVjdEZpZWxkICh0aGlz
LCBjbDAsIGZsZDEpOyB9CgogIGpib29sZWFuIEdldFN0YXRpY0Jvb2xlYW5GaWVsZCAoamNsYXNz
IGNsMCwgamZpZWxkSUQgZmxkMSkKICB7IHJldHVybiBwLT5HZXRTdGF0aWNCb29sZWFuRmllbGQg
KHRoaXMsIGNsMCwgZmxkMSk7IH0KCiAgamJ5dGUgR2V0U3RhdGljQnl0ZUZpZWxkIChqY2xhc3Mg
Y2wwLCBqZmllbGRJRCBmbGQxKQogIHsgcmV0dXJuIHAtPkdldFN0YXRpY0J5dGVGaWVsZCAodGhp
cywgY2wwLCBmbGQxKTsgfQoKICBqY2hhciBHZXRTdGF0aWNDaGFyRmllbGQgKGpjbGFzcyBjbDAs
IGpmaWVsZElEIGZsZDEpCiAgeyByZXR1cm4gcC0+R2V0U3RhdGljQ2hhckZpZWxkICh0aGlzLCBj
bDAsIGZsZDEpOyB9CgogIGpzaG9ydCBHZXRTdGF0aWNTaG9ydEZpZWxkIChqY2xhc3MgY2wwLCBq
ZmllbGRJRCBmbGQxKQogIHsgcmV0dXJuIHAtPkdldFN0YXRpY1Nob3J0RmllbGQgKHRoaXMsIGNs
MCwgZmxkMSk7IH0KCiAgamludCBHZXRTdGF0aWNJbnRGaWVsZCAoamNsYXNzIGNsMCwgamZpZWxk
SUQgZmxkMSkKICB7IHJldHVybiBwLT5HZXRTdGF0aWNJbnRGaWVsZCAodGhpcywgY2wwLCBmbGQx
KTsgfQoKICBqbG9uZyBHZXRTdGF0aWNMb25nRmllbGQgKGpjbGFzcyBjbDAsIGpmaWVsZElEIGZs
ZDEpCiAgeyByZXR1cm4gcC0+R2V0U3RhdGljTG9uZ0ZpZWxkICh0aGlzLCBjbDAsIGZsZDEpOyB9
CgogIGpmbG9hdCBHZXRTdGF0aWNGbG9hdEZpZWxkIChqY2xhc3MgY2wwLCBqZmllbGRJRCBmbGQx
KQogIHsgcmV0dXJuIHAtPkdldFN0YXRpY0Zsb2F0RmllbGQgKHRoaXMsIGNsMCwgZmxkMSk7IH0K
CiAgamRvdWJsZSBHZXRTdGF0aWNEb3VibGVGaWVsZCAoamNsYXNzIGNsMCwgamZpZWxkSUQgZmxk
MSkKICB7IHJldHVybiBwLT5HZXRTdGF0aWNEb3VibGVGaWVsZCAodGhpcywgY2wwLCBmbGQxKTsg
fQoKICB2b2lkIFNldFN0YXRpY09iamVjdEZpZWxkIChqY2xhc3MgY2wwLCBqZmllbGRJRCBmbGQx
LCBqb2JqZWN0IG9iajIpCiAgeyBwLT5TZXRTdGF0aWNPYmplY3RGaWVsZCAodGhpcywgY2wwLCBm
bGQxLCBvYmoyKTsgfQoKICB2b2lkIFNldFN0YXRpY0Jvb2xlYW5GaWVsZCAoamNsYXNzIGNsMCwg
amZpZWxkSUQgZmxkMSwgamJvb2xlYW4gdmFsMikKICB7IHAtPlNldFN0YXRpY0Jvb2xlYW5GaWVs
ZCAodGhpcywgY2wwLCBmbGQxLCB2YWwyKTsgfQoKICB2b2lkIFNldFN0YXRpY0J5dGVGaWVsZCAo
amNsYXNzIGNsMCwgamZpZWxkSUQgZmxkMSwgamJ5dGUgdmFsMikKICB7IHAtPlNldFN0YXRpY0J5
dGVGaWVsZCAodGhpcywgY2wwLCBmbGQxLCB2YWwyKTsgfQoKICB2b2lkIFNldFN0YXRpY0NoYXJG
aWVsZCAoamNsYXNzIGNsMCwgamZpZWxkSUQgZmxkMSwgamNoYXIgdmFsMikKICB7IHAtPlNldFN0
YXRpY0NoYXJGaWVsZCAodGhpcywgY2wwLCBmbGQxLCB2YWwyKTsgfQoKICB2b2lkIFNldFN0YXRp
Y1Nob3J0RmllbGQgKGpjbGFzcyBjbDAsIGpmaWVsZElEIGZsZDEsIGpzaG9ydCB2YWwyKQogIHsg
cC0+U2V0U3RhdGljU2hvcnRGaWVsZCAodGhpcywgY2wwLCBmbGQxLCB2YWwyKTsgfQoKICB2b2lk
IFNldFN0YXRpY0ludEZpZWxkIChqY2xhc3MgY2wwLCBqZmllbGRJRCBmbGQxLCBqaW50IHZhbDIp
CiAgeyBwLT5TZXRTdGF0aWNJbnRGaWVsZCAodGhpcywgY2wwLCBmbGQxLCB2YWwyKTsgfQoKICB2
b2lkIFNldFN0YXRpY0xvbmdGaWVsZCAoamNsYXNzIGNsMCwgamZpZWxkSUQgZmxkMSwgamxvbmcg
dmFsMikKICB7IHAtPlNldFN0YXRpY0xvbmdGaWVsZCAodGhpcywgY2wwLCBmbGQxLCB2YWwyKTsg
fQoKICB2b2lkIFNldFN0YXRpY0Zsb2F0RmllbGQgKGpjbGFzcyBjbDAsIGpmaWVsZElEIGZsZDEs
IGpmbG9hdCB2YWwyKQogIHsgcC0+U2V0U3RhdGljRmxvYXRGaWVsZCAodGhpcywgY2wwLCBmbGQx
LCB2YWwyKTsgfQoKICB2b2lkIFNldFN0YXRpY0RvdWJsZUZpZWxkIChqY2xhc3MgY2wwLCBqZmll
bGRJRCBmbGQxLCBqZG91YmxlIHZhbDIpCiAgeyBwLT5TZXRTdGF0aWNEb3VibGVGaWVsZCAodGhp
cywgY2wwLCBmbGQxLCB2YWwyKTsgfQoKICBqc3RyaW5nIE5ld1N0cmluZyAoY29uc3QgamNoYXIg
KiB2YWwwLCBqc2l6ZSB2YWwxKQogIHsgcmV0dXJuIHAtPk5ld1N0cmluZyAodGhpcywgdmFsMCwg
dmFsMSk7IH0KCiAgamludCBHZXRTdHJpbmdMZW5ndGggKGpzdHJpbmcgdmFsMCkKICB7IHJldHVy
biBwLT5HZXRTdHJpbmdMZW5ndGggKHRoaXMsIHZhbDApOyB9CgogIGNvbnN0IGpjaGFyICogR2V0
U3RyaW5nQ2hhcnMgKGpzdHJpbmcgdmFsMCwgamJvb2xlYW4gKiB2YWwxKQogIHsgcmV0dXJuIHAt
PkdldFN0cmluZ0NoYXJzICh0aGlzLCB2YWwwLCB2YWwxKTsgfQoKICB2b2lkIFJlbGVhc2VTdHJp
bmdDaGFycyAoanN0cmluZyB2YWwwLCBjb25zdCBqY2hhciAqIHZhbDEpCiAgeyBwLT5SZWxlYXNl
U3RyaW5nQ2hhcnMgKHRoaXMsIHZhbDAsIHZhbDEpOyB9CgogIGpzdHJpbmcgTmV3U3RyaW5nVVRG
IChjb25zdCBjaGFyICogdmFsMCkKICB7IHJldHVybiBwLT5OZXdTdHJpbmdVVEYgKHRoaXMsIHZh
bDApOyB9CgogIGpzaXplIEdldFN0cmluZ1VURkxlbmd0aCAoanN0cmluZyB2YWwwKQogIHsgcmV0
dXJuIHAtPkdldFN0cmluZ1VURkxlbmd0aCAodGhpcywgdmFsMCk7IH0KCiAgY29uc3QgY2hhciAq
IEdldFN0cmluZ1VURkNoYXJzIChqc3RyaW5nIHZhbDAsIGpib29sZWFuICogdmFsMSkKICB7IHJl
dHVybiBwLT5HZXRTdHJpbmdVVEZDaGFycyAodGhpcywgdmFsMCwgdmFsMSk7IH0KCiAgdm9pZCBS
ZWxlYXNlU3RyaW5nVVRGQ2hhcnMgKGpzdHJpbmcgdmFsMCwgY29uc3QgY2hhciAqIHZhbDEpCiAg
eyBwLT5SZWxlYXNlU3RyaW5nVVRGQ2hhcnMgKHRoaXMsIHZhbDAsIHZhbDEpOyB9CgogIGpzaXpl
IEdldEFycmF5TGVuZ3RoIChqYXJyYXkgdmFsMCkKICB7IHJldHVybiBwLT5HZXRBcnJheUxlbmd0
aCAodGhpcywgdmFsMCk7IH0KCiAgamFycmF5IE5ld09iamVjdEFycmF5IChqc2l6ZSB2YWwwLCBq
Y2xhc3MgY2wxLCBqb2JqZWN0IG9iajIpCiAgeyByZXR1cm4gcC0+TmV3T2JqZWN0QXJyYXkgKHRo
aXMsIHZhbDAsIGNsMSwgb2JqMik7IH0KCiAgam9iamVjdCBHZXRPYmplY3RBcnJheUVsZW1lbnQg
KGpvYmplY3RBcnJheSB2YWwwLCBqc2l6ZSB2YWwxKQogIHsgcmV0dXJuIHAtPkdldE9iamVjdEFy
cmF5RWxlbWVudCAodGhpcywgdmFsMCwgdmFsMSk7IH0KCiAgdm9pZCBTZXRPYmplY3RBcnJheUVs
ZW1lbnQgKGpvYmplY3RBcnJheSB2YWwwLCBqc2l6ZSB2YWwxLCBqb2JqZWN0IG9iajIpCiAgeyBw
LT5TZXRPYmplY3RBcnJheUVsZW1lbnQgKHRoaXMsIHZhbDAsIHZhbDEsIG9iajIpOyB9CgogIGpi
b29sZWFuQXJyYXkgTmV3Qm9vbGVhbkFycmF5IChqc2l6ZSB2YWwwKQogIHsgcmV0dXJuIHAtPk5l
d0Jvb2xlYW5BcnJheSAodGhpcywgdmFsMCk7IH0KCiAgamJ5dGVBcnJheSBOZXdCeXRlQXJyYXkg
KGpzaXplIHZhbDApCiAgeyByZXR1cm4gcC0+TmV3Qnl0ZUFycmF5ICh0aGlzLCB2YWwwKTsgfQoK
ICBqY2hhckFycmF5IE5ld0NoYXJBcnJheSAoanNpemUgdmFsMCkKICB7IHJldHVybiBwLT5OZXdD
aGFyQXJyYXkgKHRoaXMsIHZhbDApOyB9CgogIGpzaG9ydEFycmF5IE5ld1Nob3J0QXJyYXkgKGpz
aXplIHZhbDApCiAgeyByZXR1cm4gcC0+TmV3U2hvcnRBcnJheSAodGhpcywgdmFsMCk7IH0KCiAg
amludEFycmF5IE5ld0ludEFycmF5IChqc2l6ZSB2YWwwKQogIHsgcmV0dXJuIHAtPk5ld0ludEFy
cmF5ICh0aGlzLCB2YWwwKTsgfQoKICBqbG9uZ0FycmF5IE5ld0xvbmdBcnJheSAoanNpemUgdmFs
MCkKICB7IHJldHVybiBwLT5OZXdMb25nQXJyYXkgKHRoaXMsIHZhbDApOyB9CgogIGpmbG9hdEFy
cmF5IE5ld0Zsb2F0QXJyYXkgKGpzaXplIHZhbDApCiAgeyByZXR1cm4gcC0+TmV3RmxvYXRBcnJh
eSAodGhpcywgdmFsMCk7IH0KCiAgamRvdWJsZUFycmF5IE5ld0RvdWJsZUFycmF5IChqc2l6ZSB2
YWwwKQogIHsgcmV0dXJuIHAtPk5ld0RvdWJsZUFycmF5ICh0aGlzLCB2YWwwKTsgfQoKICBqYm9v
bGVhbiAqIEdldEJvb2xlYW5BcnJheUVsZW1lbnRzIChqYm9vbGVhbkFycmF5IHZhbDAsIGpib29s
ZWFuICogdmFsMSkKICB7IHJldHVybiBwLT5HZXRCb29sZWFuQXJyYXlFbGVtZW50cyAodGhpcywg
dmFsMCwgdmFsMSk7IH0KCiAgamJ5dGUgKiBHZXRCeXRlQXJyYXlFbGVtZW50cyAoamJ5dGVBcnJh
eSB2YWwwLCBqYm9vbGVhbiAqIHZhbDEpCiAgeyByZXR1cm4gcC0+R2V0Qnl0ZUFycmF5RWxlbWVu
dHMgKHRoaXMsIHZhbDAsIHZhbDEpOyB9CgogIGpjaGFyICogR2V0Q2hhckFycmF5RWxlbWVudHMg
KGpjaGFyQXJyYXkgdmFsMCwgamJvb2xlYW4gKiB2YWwxKQogIHsgcmV0dXJuIHAtPkdldENoYXJB
cnJheUVsZW1lbnRzICh0aGlzLCB2YWwwLCB2YWwxKTsgfQoKICBqc2hvcnQgKiBHZXRTaG9ydEFy
cmF5RWxlbWVudHMgKGpzaG9ydEFycmF5IHZhbDAsIGpib29sZWFuICogdmFsMSkKICB7IHJldHVy
biBwLT5HZXRTaG9ydEFycmF5RWxlbWVudHMgKHRoaXMsIHZhbDAsIHZhbDEpOyB9CgogIGppbnQg
KiBHZXRJbnRBcnJheUVsZW1lbnRzIChqaW50QXJyYXkgdmFsMCwgamJvb2xlYW4gKiB2YWwxKQog
IHsgcmV0dXJuIHAtPkdldEludEFycmF5RWxlbWVudHMgKHRoaXMsIHZhbDAsIHZhbDEpOyB9Cgog
IGpsb25nICogR2V0TG9uZ0FycmF5RWxlbWVudHMgKGpsb25nQXJyYXkgdmFsMCwgamJvb2xlYW4g
KiB2YWwxKQogIHsgcmV0dXJuIHAtPkdldExvbmdBcnJheUVsZW1lbnRzICh0aGlzLCB2YWwwLCB2
YWwxKTsgfQoKICBqZmxvYXQgKiBHZXRGbG9hdEFycmF5RWxlbWVudHMgKGpmbG9hdEFycmF5IHZh
bDAsIGpib29sZWFuICogdmFsMSkKICB7IHJldHVybiBwLT5HZXRGbG9hdEFycmF5RWxlbWVudHMg
KHRoaXMsIHZhbDAsIHZhbDEpOyB9CgogIGpkb3VibGUgKiBHZXREb3VibGVBcnJheUVsZW1lbnRz
IChqZG91YmxlQXJyYXkgdmFsMCwgamJvb2xlYW4gKiB2YWwxKQogIHsgcmV0dXJuIHAtPkdldERv
dWJsZUFycmF5RWxlbWVudHMgKHRoaXMsIHZhbDAsIHZhbDEpOyB9CgogIHZvaWQgUmVsZWFzZUJv
b2xlYW5BcnJheUVsZW1lbnRzIChqYm9vbGVhbkFycmF5IHZhbDAsIGpib29sZWFuICogdmFsMSwg
amludCB2YWwyKQogIHsgcC0+UmVsZWFzZUJvb2xlYW5BcnJheUVsZW1lbnRzICh0aGlzLCB2YWww
LCB2YWwxLCB2YWwyKTsgfQoKICB2b2lkIFJlbGVhc2VCeXRlQXJyYXlFbGVtZW50cyAoamJ5dGVB
cnJheSB2YWwwLCBqYnl0ZSAqIHZhbDEsIGppbnQgdmFsMikKICB7IHAtPlJlbGVhc2VCeXRlQXJy
YXlFbGVtZW50cyAodGhpcywgdmFsMCwgdmFsMSwgdmFsMik7IH0KCiAgdm9pZCBSZWxlYXNlQ2hh
ckFycmF5RWxlbWVudHMgKGpjaGFyQXJyYXkgdmFsMCwgamNoYXIgKiB2YWwxLCBqaW50IHZhbDIp
CiAgeyBwLT5SZWxlYXNlQ2hhckFycmF5RWxlbWVudHMgKHRoaXMsIHZhbDAsIHZhbDEsIHZhbDIp
OyB9CgogIHZvaWQgUmVsZWFzZVNob3J0QXJyYXlFbGVtZW50cyAoanNob3J0QXJyYXkgdmFsMCwg
anNob3J0ICogdmFsMSwgamludCB2YWwyKQogIHsgcC0+UmVsZWFzZVNob3J0QXJyYXlFbGVtZW50
cyAodGhpcywgdmFsMCwgdmFsMSwgdmFsMik7IH0KCiAgdm9pZCBSZWxlYXNlSW50QXJyYXlFbGVt
ZW50cyAoamludEFycmF5IHZhbDAsIGppbnQgKiB2YWwxLCBqaW50IHZhbDIpCiAgeyBwLT5SZWxl
YXNlSW50QXJyYXlFbGVtZW50cyAodGhpcywgdmFsMCwgdmFsMSwgdmFsMik7IH0KCiAgdm9pZCBS
ZWxlYXNlTG9uZ0FycmF5RWxlbWVudHMgKGpsb25nQXJyYXkgdmFsMCwgamxvbmcgKiB2YWwxLCBq
aW50IHZhbDIpCiAgeyBwLT5SZWxlYXNlTG9uZ0FycmF5RWxlbWVudHMgKHRoaXMsIHZhbDAsIHZh
bDEsIHZhbDIpOyB9CgogIHZvaWQgUmVsZWFzZUZsb2F0QXJyYXlFbGVtZW50cyAoamZsb2F0QXJy
YXkgdmFsMCwgamZsb2F0ICogdmFsMSwgamludCB2YWwyKQogIHsgcC0+UmVsZWFzZUZsb2F0QXJy
YXlFbGVtZW50cyAodGhpcywgdmFsMCwgdmFsMSwgdmFsMik7IH0KCiAgdm9pZCBSZWxlYXNlRG91
YmxlQXJyYXlFbGVtZW50cyAoamRvdWJsZUFycmF5IHZhbDAsIGpkb3VibGUgKiB2YWwxLCBqaW50
IHZhbDIpCiAgeyBwLT5SZWxlYXNlRG91YmxlQXJyYXlFbGVtZW50cyAodGhpcywgdmFsMCwgdmFs
MSwgdmFsMik7IH0KCiAgdm9pZCBHZXRCb29sZWFuQXJyYXlSZWdpb24gKGpib29sZWFuQXJyYXkg
dmFsMCwganNpemUgdmFsMSwganNpemUgdmFsMiwgamJvb2xlYW4gKiB2YWwzKQogIHsgcC0+R2V0
Qm9vbGVhbkFycmF5UmVnaW9uICh0aGlzLCB2YWwwLCB2YWwxLCB2YWwyLCB2YWwzKTsgfQoKICB2
b2lkIEdldEJ5dGVBcnJheVJlZ2lvbiAoamJ5dGVBcnJheSB2YWwwLCBqc2l6ZSB2YWwxLCBqc2l6
ZSB2YWwyLCBqYnl0ZSAqIHZhbDMpCiAgeyBwLT5HZXRCeXRlQXJyYXlSZWdpb24gKHRoaXMsIHZh
bDAsIHZhbDEsIHZhbDIsIHZhbDMpOyB9CgogIHZvaWQgR2V0Q2hhckFycmF5UmVnaW9uIChqY2hh
ckFycmF5IHZhbDAsIGpzaXplIHZhbDEsIGpzaXplIHZhbDIsIGpjaGFyICogdmFsMykKICB7IHAt
PkdldENoYXJBcnJheVJlZ2lvbiAodGhpcywgdmFsMCwgdmFsMSwgdmFsMiwgdmFsMyk7IH0KCiAg
dm9pZCBHZXRTaG9ydEFycmF5UmVnaW9uIChqc2hvcnRBcnJheSB2YWwwLCBqc2l6ZSB2YWwxLCBq
c2l6ZSB2YWwyLCBqc2hvcnQgKiB2YWwzKQogIHsgcC0+R2V0U2hvcnRBcnJheVJlZ2lvbiAodGhp
cywgdmFsMCwgdmFsMSwgdmFsMiwgdmFsMyk7IH0KCiAgdm9pZCBHZXRJbnRBcnJheVJlZ2lvbiAo
amludEFycmF5IHZhbDAsIGpzaXplIHZhbDEsIGpzaXplIHZhbDIsIGppbnQgKiB2YWwzKQogIHsg
cC0+R2V0SW50QXJyYXlSZWdpb24gKHRoaXMsIHZhbDAsIHZhbDEsIHZhbDIsIHZhbDMpOyB9Cgog
IHZvaWQgR2V0TG9uZ0FycmF5UmVnaW9uIChqbG9uZ0FycmF5IHZhbDAsIGpzaXplIHZhbDEsIGpz
aXplIHZhbDIsIGpsb25nICogdmFsMykKICB7IHAtPkdldExvbmdBcnJheVJlZ2lvbiAodGhpcywg
dmFsMCwgdmFsMSwgdmFsMiwgdmFsMyk7IH0KCiAgdm9pZCBHZXRGbG9hdEFycmF5UmVnaW9uIChq
ZmxvYXRBcnJheSB2YWwwLCBqc2l6ZSB2YWwxLCBqc2l6ZSB2YWwyLCBqZmxvYXQgKiB2YWwzKQog
IHsgcC0+R2V0RmxvYXRBcnJheVJlZ2lvbiAodGhpcywgdmFsMCwgdmFsMSwgdmFsMiwgdmFsMyk7
IH0KCiAgdm9pZCBHZXREb3VibGVBcnJheVJlZ2lvbiAoamRvdWJsZUFycmF5IHZhbDAsIGpzaXpl
IHZhbDEsIGpzaXplIHZhbDIsIGpkb3VibGUgKiB2YWwzKQogIHsgcC0+R2V0RG91YmxlQXJyYXlS
ZWdpb24gKHRoaXMsIHZhbDAsIHZhbDEsIHZhbDIsIHZhbDMpOyB9CgogIHZvaWQgU2V0Qm9vbGVh
bkFycmF5UmVnaW9uIChqYm9vbGVhbkFycmF5IHZhbDAsIGpzaXplIHZhbDEsIGpzaXplIHZhbDIs
IGpib29sZWFuICogdmFsMykKICB7IHAtPlNldEJvb2xlYW5BcnJheVJlZ2lvbiAodGhpcywgdmFs
MCwgdmFsMSwgdmFsMiwgdmFsMyk7IH0KCiAgdm9pZCBTZXRCeXRlQXJyYXlSZWdpb24gKGpieXRl
QXJyYXkgdmFsMCwganNpemUgdmFsMSwganNpemUgdmFsMiwgamJ5dGUgKiB2YWwzKQogIHsgcC0+
U2V0Qnl0ZUFycmF5UmVnaW9uICh0aGlzLCB2YWwwLCB2YWwxLCB2YWwyLCB2YWwzKTsgfQoKICB2
b2lkIFNldENoYXJBcnJheVJlZ2lvbiAoamNoYXJBcnJheSB2YWwwLCBqc2l6ZSB2YWwxLCBqc2l6
ZSB2YWwyLCBqY2hhciAqIHZhbDMpCiAgeyBwLT5TZXRDaGFyQXJyYXlSZWdpb24gKHRoaXMsIHZh
bDAsIHZhbDEsIHZhbDIsIHZhbDMpOyB9CgogIHZvaWQgU2V0U2hvcnRBcnJheVJlZ2lvbiAoanNo
b3J0QXJyYXkgdmFsMCwganNpemUgdmFsMSwganNpemUgdmFsMiwganNob3J0ICogdmFsMykKICB7
IHAtPlNldFNob3J0QXJyYXlSZWdpb24gKHRoaXMsIHZhbDAsIHZhbDEsIHZhbDIsIHZhbDMpOyB9
CgogIHZvaWQgU2V0SW50QXJyYXlSZWdpb24gKGppbnRBcnJheSB2YWwwLCBqc2l6ZSB2YWwxLCBq
c2l6ZSB2YWwyLCBqaW50ICogdmFsMykKICB7IHAtPlNldEludEFycmF5UmVnaW9uICh0aGlzLCB2
YWwwLCB2YWwxLCB2YWwyLCB2YWwzKTsgfQoKICB2b2lkIFNldExvbmdBcnJheVJlZ2lvbiAoamxv
bmdBcnJheSB2YWwwLCBqc2l6ZSB2YWwxLCBqc2l6ZSB2YWwyLCBqbG9uZyAqIHZhbDMpCiAgeyBw
LT5TZXRMb25nQXJyYXlSZWdpb24gKHRoaXMsIHZhbDAsIHZhbDEsIHZhbDIsIHZhbDMpOyB9Cgog
IHZvaWQgU2V0RmxvYXRBcnJheVJlZ2lvbiAoamZsb2F0QXJyYXkgdmFsMCwganNpemUgdmFsMSwg
anNpemUgdmFsMiwgamZsb2F0ICogdmFsMykKICB7IHAtPlNldEZsb2F0QXJyYXlSZWdpb24gKHRo
aXMsIHZhbDAsIHZhbDEsIHZhbDIsIHZhbDMpOyB9CgogIHZvaWQgU2V0RG91YmxlQXJyYXlSZWdp
b24gKGpkb3VibGVBcnJheSB2YWwwLCBqc2l6ZSB2YWwxLCBqc2l6ZSB2YWwyLCBqZG91YmxlICog
dmFsMykKICB7IHAtPlNldERvdWJsZUFycmF5UmVnaW9uICh0aGlzLCB2YWwwLCB2YWwxLCB2YWwy
LCB2YWwzKTsgfQoKICBqaW50IFJlZ2lzdGVyTmF0aXZlcyAoamNsYXNzIGNsMCwgY29uc3QgSk5J
TmF0aXZlTWV0aG9kICogdmFsMSwgamludCB2YWwyKQogIHsgcmV0dXJuIHAtPlJlZ2lzdGVyTmF0
aXZlcyAodGhpcywgY2wwLCB2YWwxLCB2YWwyKTsgfQoKICBqaW50IFVucmVnaXN0ZXJOYXRpdmVz
IChqY2xhc3MgY2wwKQogIHsgcmV0dXJuIHAtPlVucmVnaXN0ZXJOYXRpdmVzICh0aGlzLCBjbDAp
OyB9CgogIGppbnQgTW9uaXRvckVudGVyIChqb2JqZWN0IG9iajApCiAgeyByZXR1cm4gcC0+TW9u
aXRvckVudGVyICh0aGlzLCBvYmowKTsgfQoKICBqaW50IE1vbml0b3JFeGl0IChqb2JqZWN0IG9i
ajApCiAgeyByZXR1cm4gcC0+TW9uaXRvckV4aXQgKHRoaXMsIG9iajApOyB9CgogIGppbnQgR2V0
SmF2YVZNIChKYXZhVk0gKiogdmFsMCkKICB7IHJldHVybiBwLT5HZXRKYXZhVk0gKHRoaXMsIHZh
bDApOyB9CgogIHZvaWQgR2V0U3RyaW5nUmVnaW9uIChqc3RyaW5nIHZhbDAsIGpzaXplIHZhbDEs
IGpzaXplIHZhbDIsIGpjaGFyICogdmFsMykKICB7IHAtPkdldFN0cmluZ1JlZ2lvbiAodGhpcywg
dmFsMCwgdmFsMSwgdmFsMiwgdmFsMyk7IH0KCiAgdm9pZCBHZXRTdHJpbmdVVEZSZWdpb24gKGpz
dHJpbmcgdmFsMCwganNpemUgdmFsMSwganNpemUgdmFsMiwgY2hhciAqIHZhbDMpCiAgeyBwLT5H
ZXRTdHJpbmdVVEZSZWdpb24gKHRoaXMsIHZhbDAsIHZhbDEsIHZhbDIsIHZhbDMpOyB9CgogIHZv
aWQgKiBHZXRQcmltaXRpdmVBcnJheUNyaXRpY2FsIChqYXJyYXkgdmFsMCwgamJvb2xlYW4gKiB2
YWwxKQogIHsgcmV0dXJuIHAtPkdldFByaW1pdGl2ZUFycmF5Q3JpdGljYWwgKHRoaXMsIHZhbDAs
IHZhbDEpOyB9CgogIHZvaWQgUmVsZWFzZVByaW1pdGl2ZUFycmF5Q3JpdGljYWwgKGphcnJheSB2
YWwwLCB2b2lkICogdmFsMSwgamludCB2YWwyKQogIHsgcC0+UmVsZWFzZVByaW1pdGl2ZUFycmF5
Q3JpdGljYWwgKHRoaXMsIHZhbDAsIHZhbDEsIHZhbDIpOyB9CgogIGNvbnN0IGpjaGFyICogR2V0
U3RyaW5nQ3JpdGljYWwgKGpzdHJpbmcgdmFsMCwgamJvb2xlYW4gKiB2YWwxKQogIHsgcmV0dXJu
IHAtPkdldFN0cmluZ0NyaXRpY2FsICh0aGlzLCB2YWwwLCB2YWwxKTsgfQoKICB2b2lkIFJlbGVh
c2VTdHJpbmdDcml0aWNhbCAoanN0cmluZyB2YWwwLCBjb25zdCBqY2hhciAqIHZhbDEpCiAgeyBw
LT5SZWxlYXNlU3RyaW5nQ3JpdGljYWwgKHRoaXMsIHZhbDAsIHZhbDEpOyB9CgogIGp3ZWFrIE5l
d1dlYWtHbG9iYWxSZWYgKGpvYmplY3Qgb2JqMCkKICB7IHJldHVybiBwLT5OZXdXZWFrR2xvYmFs
UmVmICh0aGlzLCBvYmowKTsgfQoKICB2b2lkIERlbGV0ZVdlYWtHbG9iYWxSZWYgKGp3ZWFrIHZh
bDApCiAgeyBwLT5EZWxldGVXZWFrR2xvYmFsUmVmICh0aGlzLCB2YWwwKTsgfQoKICBqYm9vbGVh
biBFeGNlcHRpb25DaGVjayAoKQogIHsgcmV0dXJuIHAtPkV4Y2VwdGlvbkNoZWNrICh0aGlzKTsg
fQp9OwoKCgoKCgpzdHJ1Y3QgSk5JSW52b2tlSW50ZXJmYWNlCnsKICBfSnZfZnVuYyByZXNlcnZl
ZDA7CiAgX0p2X2Z1bmMgcmVzZXJ2ZWQxOwogIF9Kdl9mdW5jIHJlc2VydmVkMjsKCiAgamludCAo
KkRlc3Ryb3lKYXZhVk0pIChKYXZhVk0gKik7CiAgamludCAoKkF0dGFjaEN1cnJlbnRUaHJlYWQp
IChKYXZhVk0gKiwgdm9pZCAqKiwgdm9pZCAqKTsKICBqaW50ICgqRGV0YWNoQ3VycmVudFRocmVh
ZCkgKEphdmFWTSAqKTsKICBqaW50ICgqR2V0RW52KSAoSmF2YVZNICosIHZvaWQgKiosIGppbnQp
Owp9OwoKCgpjbGFzcyBfSnZfSmF2YVZNCnsKcHVibGljOgogIGNvbnN0IHN0cnVjdCBKTklJbnZv
a2VJbnRlcmZhY2UgKmZ1bmN0aW9uczsKCnByaXZhdGU6CgoKcHVibGljOgogIGppbnQgRGVzdHJv
eUphdmFWTSAoKQogIHsgcmV0dXJuIGZ1bmN0aW9ucy0+RGVzdHJveUphdmFWTSAodGhpcyk7IH0K
CiAgamludCBBdHRhY2hDdXJyZW50VGhyZWFkICh2b2lkICoqcGVudiwgdm9pZCAqYXJncykKICB7
IHJldHVybiBmdW5jdGlvbnMtPkF0dGFjaEN1cnJlbnRUaHJlYWQgKHRoaXMsIHBlbnYsIGFyZ3Mp
OyB9CgogIGppbnQgRGV0YWNoQ3VycmVudFRocmVhZCAoKQogIHsgcmV0dXJuIGZ1bmN0aW9ucy0+
RGV0YWNoQ3VycmVudFRocmVhZCAodGhpcyk7IH0KCiAgamludCBHZXRFbnYgKHZvaWQgKipwZW52
LCBqaW50IHZlcnNpb24pCiAgeyByZXR1cm4gZnVuY3Rpb25zLT5HZXRFbnYgKHRoaXMsIHBlbnYs
IHZlcnNpb24pOyB9Cn07CgoKdHlwZWRlZiBzdHJ1Y3QgSmF2YVZNQXR0YWNoQXJncwp7CiAgamlu
dCB2ZXJzaW9uOwogIGNoYXIgKm5hbWU7CiAgam9iamVjdCBncm91cDsKCn0gSmF2YVZNQXR0YWNo
QXJnczsKCnR5cGVkZWYgc3RydWN0IEphdmFWTU9wdGlvbgp7CiAgY2hhciAqb3B0aW9uU3RyaW5n
OwogIHZvaWQgKmV4dHJhSW5mbzsKfSBKYXZhVk1PcHRpb247Cgp0eXBlZGVmIHN0cnVjdCBKYXZh
Vk1Jbml0QXJncwp7CgogIGppbnQgdmVyc2lvbjsKCgogIGppbnQgbk9wdGlvbnM7CgoKICBKYXZh
Vk1PcHRpb24gKm9wdGlvbnM7CgoKICBqYm9vbGVhbiBpZ25vcmVVbnJlY29nbml6ZWQ7Cn0gSmF2
YVZNSW5pdEFyZ3M7CiMgMTggIi4uLy4uLy4uL2djYy9saWJqYXZhL2luY2x1ZGUvanZtcGkuaCIg
MgojIDMwICIuLi8uLi8uLi9nY2MvbGliamF2YS9pbmNsdWRlL2p2bXBpLmgiCnN0cnVjdCBfam9i
amVjdElEOwp0eXBlZGVmIHN0cnVjdCBfam9iamVjdElEICogam9iamVjdElEOwoKdHlwZWRlZiBz
dHJ1Y3QKewoKICBqaW50IGxpbmVubzsKCiAgam1ldGhvZElEIG1ldGhvZF9pZDsKfSBKVk1QSV9D
YWxsRnJhbWU7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgSk5JRW52ICplbnZfaWQ7CgogIGppbnQgbnVt
X2ZyYW1lczsKCiAgSlZNUElfQ2FsbEZyYW1lICpmcmFtZXM7Cn0gSlZNUElfQ2FsbFRyYWNlOwoK
dHlwZWRlZiBzdHJ1Y3QKewoKICBjaGFyICpmaWVsZF9uYW1lOwoKICBjaGFyICpmaWVsZF9zaWdu
YXR1cmU7Cn0gSlZNUElfRmllbGQ7CiMgNjYgIi4uLy4uLy4uL2djYy9saWJqYXZhL2luY2x1ZGUv
anZtcGkuaCIKdHlwZWRlZiBzdHJ1Y3QKewoKCiAgamludCBoZWFwX2R1bXBfbGV2ZWw7Cn0gSlZN
UElfSGVhcER1bXBBcmc7Cgp0eXBlZGVmIHN0cnVjdAp7CgogIGppbnQgb2Zmc2V0OwoKICBqaW50
IGxpbmVubzsKfSBKVk1QSV9MaW5lbm87Cgp0eXBlZGVmIHN0cnVjdAp7CgogIGNoYXIgKm1ldGhv
ZF9uYW1lOwoKICBjaGFyICptZXRob2Rfc2lnbmF0dXJlOwoKICBqaW50IHN0YXJ0X2xpbmVubzsK
CiAgamludCBlbmRfbGluZW5vOwoKICBqbWV0aG9kSUQgbWV0aG9kX2lkOwp9IEpWTVBJX01ldGhv
ZDsKCgpzdHJ1Y3QgX0pWTVBJX1Jhd01vbml0b3I7CnR5cGVkZWYgc3RydWN0IF9KVk1QSV9SYXdN
b25pdG9yICpKVk1QSV9SYXdNb25pdG9yOwojIDE0MCAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvaW5j
bHVkZS9qdm1waS5oIgp0eXBlZGVmIHN0cnVjdAp7CgogIGppbnQgZXZlbnRfdHlwZTsKCgogIEpO
SUVudiAqZW52X2lkOwoKICB1bmlvbgogIHsKICAgIHN0cnVjdAogICAgewogICAgICBjaGFyICpj
bGFzc19uYW1lOwogICAgICBjaGFyICpzb3VyY2VfbmFtZTsKICAgICAgamludCBudW1faW50ZXJm
YWNlczsKICAgICAgamludCBudW1fbWV0aG9kczsKICAgICAgSlZNUElfTWV0aG9kICptZXRob2Rz
OwogICAgICBqaW50IG51bV9zdGF0aWNfZmllbGRzOwogICAgICBKVk1QSV9GaWVsZCAqc3RhdGlj
czsKICAgICAgamludCBudW1faW5zdGFuY2VfZmllbGRzOwogICAgICBKVk1QSV9GaWVsZCAqaW5z
dGFuY2VzOwogICAgICBqb2JqZWN0SUQgY2xhc3NfaWQ7CiAgICB9IGNsYXNzX2xvYWQ7CgogICAg
c3RydWN0CiAgICB7CiAgICAgIGpvYmplY3RJRCBjbGFzc19pZDsKICAgIH0gY2xhc3NfdW5sb2Fk
OwoKICAgIHN0cnVjdAogICAgewogICAgICBqaW50IGFyZW5hX2lkOwogICAgICBqb2JqZWN0SUQg
Y2xhc3NfaWQ7CiAgICAgIGppbnQgaXNfYXJyYXk7CiAgICAgIGppbnQgc2l6ZTsKICAgICAgam9i
amVjdElEIG9ial9pZDsKICAgIH0gb2JqX2FsbG9jOwoKICAgIHN0cnVjdAogICAgewogICAgICBj
aGFyICp0aHJlYWRfbmFtZTsKICAgICAgY2hhciAqZ3JvdXBfbmFtZTsKICAgICAgY2hhciAqcGFy
ZW50X25hbWU7CiAgICAgIGpvYmplY3RJRCB0aHJlYWRfaWQ7CiAgICAgIEpOSUVudiAqdGhyZWFk
X2Vudl9pZDsKICAgIH0gdGhyZWFkX3N0YXJ0OwoKICB9IHU7Cgp9IEpWTVBJX0V2ZW50OwoKdHlw
ZWRlZiBzdHJ1Y3QKewoKICBqaW50IHZlcnNpb247CgoKICB2b2lkICgqTm90aWZ5RXZlbnQpIChK
Vk1QSV9FdmVudCAqZXZlbnQpOwoKCiAgamludCAoKkVuYWJsZUV2ZW50KSAoamludCBldmVudF90
eXBlLCB2b2lkICphcmcpOwogIGppbnQgKCpEaXNhYmxlRXZlbnQpIChqaW50IGV2ZW50X3R5cGUs
IHZvaWQgKmFyZyk7CiAgamludCAoKlJlcXVlc3RFdmVudCkgKGppbnQgZXZlbnRfdHlwZSwgdm9p
ZCAqYXJnKTsKICB2b2lkICgqR2V0Q2FsbFRyYWNlKSAoSlZNUElfQ2FsbFRyYWNlICp0cmFjZSwg
amludCBkZXB0aCk7CiAgdm9pZCAoKlByb2ZpbGVyRXhpdCkgKGppbnQpOwogIEpWTVBJX1Jhd01v
bml0b3IgKCpSYXdNb25pdG9yQ3JlYXRlKSAoY2hhciAqbG9ja19uYW1lKTsKICB2b2lkICgqUmF3
TW9uaXRvckVudGVyKSAoSlZNUElfUmF3TW9uaXRvciBsb2NrX2lkKTsKICB2b2lkICgqUmF3TW9u
aXRvckV4aXQpIChKVk1QSV9SYXdNb25pdG9yIGxvY2tfaWQpOwogIHZvaWQgKCpSYXdNb25pdG9y
V2FpdCkgKEpWTVBJX1Jhd01vbml0b3IgbG9ja19pZCwgamxvbmcgbXMpOwogIHZvaWQgKCpSYXdN
b25pdG9yTm90aWZ5QWxsKSAoSlZNUElfUmF3TW9uaXRvciBsb2NrX2lkKTsKICB2b2lkICgqUmF3
TW9uaXRvckRlc3Ryb3kpIChKVk1QSV9SYXdNb25pdG9yIGxvY2tfaWQpOwogIGpsb25nICgqR2V0
Q3VycmVudFRocmVhZENwdVRpbWUpICh2b2lkKTsKICB2b2lkICgqU3VzcGVuZFRocmVhZCkgKEpO
SUVudiAqZW52KTsKICB2b2lkICgqUmVzdW1lVGhyZWFkKSAoSk5JRW52ICplbnYpOwogIGppbnQg
KCpHZXRUaHJlYWRTdGF0dXMpIChKTklFbnYgKmVudik7CiAgamJvb2xlYW4gKCpUaHJlYWRIYXNS
dW4pIChKTklFbnYgKmVudik7CiAgamludCAoKkNyZWF0ZVN5c3RlbVRocmVhZCkgKGNoYXIgKm5h
bWUsIGppbnQgcHJpb3JpdHksIHZvaWQgKCpmKSAodm9pZCAqKSk7CiAgdm9pZCAoKlNldFRocmVh
ZExvY2FsU3RvcmFnZSkgKEpOSUVudiAqZW52X2lkLCB2b2lkICpwdHIpOwogIHZvaWQgKigqR2V0
VGhyZWFkTG9jYWxTdG9yYWdlKSAoSk5JRW52ICplbnZfaWQpOwogIHZvaWQgKCpEaXNhYmxlR0Mp
ICh2b2lkKTsKICB2b2lkICgqRW5hYmxlR0MpICh2b2lkKTsKICB2b2lkICgqUnVuR0MpICh2b2lk
KTsKICBqb2JqZWN0SUQgKCpHZXRUaHJlYWRPYmplY3QpIChKTklFbnYgKmVudik7CiAgam9iamVj
dElEICgqR2V0TWV0aG9kQ2xhc3MpIChqbWV0aG9kSUQgbWlkKTsKCn0gSlZNUElfSW50ZXJmYWNl
OwojIDM2NyAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvaW5jbHVkZS9qdm0uaCIgMgoKZXh0ZXJuIHZv
aWQgKCpfSnZfSlZNUElfTm90aWZ5X09CSkVDVF9BTExPQykgKEpWTVBJX0V2ZW50ICpldmVudCk7
CmV4dGVybiB2b2lkICgqX0p2X0pWTVBJX05vdGlmeV9USFJFQURfU1RBUlQpIChKVk1QSV9FdmVu
dCAqZXZlbnQpOwpleHRlcm4gdm9pZCAoKl9Kdl9KVk1QSV9Ob3RpZnlfVEhSRUFEX0VORCkgKEpW
TVBJX0V2ZW50ICpldmVudCk7CiMgMTggIi4uLy4uLy4uL2djYy9saWJqYXZhL2ludGVycHJldC5j
YyIgMgojIDEgIi4uLy4uLy4uL2djYy9saWJqYXZhL2luY2x1ZGUvamF2YS1jcG9vbC5oIiAxCiMg
MzQgIi4uLy4uLy4uL2djYy9saWJqYXZhL2luY2x1ZGUvamF2YS1jcG9vbC5oIgpleHRlcm4gaW5s
aW5lIHZvaWQKX0p2X3N0b3JlSW5kZXhlcyAoX0p2X3dvcmQgKmRhdGEsCiAgICAgICAgICAgICAg
ICAgX0p2X3VzaG9ydCBpbmRleDAsCiAgICAgICAgICAgICAgICAgX0p2X3VzaG9ydCBpbmRleDEp
CnsKICBkYXRhLT5pID0gKCgoamludClpbmRleDApIDw8IDE2KSB8IChqaW50KSBpbmRleDE7Cn0K
CmV4dGVybiBpbmxpbmUgdm9pZApfSnZfbG9hZEluZGV4ZXMgKGNvbnN0IF9Kdl93b3JkICpkYXRh
LAogICAgICAgICAgICAgICAgIF9Kdl91c2hvcnQmIGluZGV4MCwKICAgICAgICAgICAgICAgICBf
SnZfdXNob3J0JiBpbmRleDEpCnsKICBqaW50IHVkYXRhID0gZGF0YS0+aTsKCiAgX0p2X3VpbnQg
dWluZGV4MCA9ICgodWRhdGEgPj4gMTYpICYgMHhmZmZmKTsKICBfSnZfdWludCB1aW5kZXgxID0g
dWRhdGEgJiAweGZmZmY7CgogIGluZGV4MCA9IHVpbmRleDA7CiAgaW5kZXgxID0gdWluZGV4MTsK
fQoKZXh0ZXJuIGlubGluZSB2b2lkCl9Kdl9zdG9yZUZsb2F0IChfSnZfd29yZCAqZGF0YSwgamZs
b2F0IGYpCnsKICBkYXRhLT5mID0gZjsKfQoKZXh0ZXJuIGlubGluZSBqZmxvYXQKX0p2X2xvYWRG
bG9hdCAoX0p2X3dvcmQgKmRhdGEpCnsKICByZXR1cm4gZGF0YS0+ZjsKfQoKZXh0ZXJuIGlubGlu
ZSB2b2lkCl9Kdl9zdG9yZUludCAoX0p2X3dvcmQgKmRhdGEsIGppbnQgaSkKewogIGRhdGEtPmkg
PSBpOwp9CgpleHRlcm4gaW5saW5lIGppbnQKX0p2X2xvYWRJbnQgKF9Kdl93b3JkICpkYXRhKQp7
CiAgcmV0dXJuIGRhdGEtPmk7Cn0KCmV4dGVybiBpbmxpbmUgdm9pZApfSnZfc3RvcmVMb25nIChf
SnZfd29yZCAqZGF0YSwgamxvbmcgbCkKewoKCgogIF9Kdl93b3JkMiB0bXA7CiAgdG1wLmwgPSBs
OwogIGRhdGFbMF0uaWFbMF0gPSB0bXAuaWFbMF07CiAgZGF0YVsxXS5pYVswXSA9IHRtcC5pYVsx
XTsKCn0KCmV4dGVybiBpbmxpbmUgamxvbmcKX0p2X2xvYWRMb25nIChfSnZfd29yZCAqZGF0YSkK
ewoKCgogIF9Kdl93b3JkMiB0bXA7CiAgdG1wLmlhWzBdID0gZGF0YVswXS5pYVswXTsKICB0bXAu
aWFbMV0gPSBkYXRhWzFdLmlhWzBdOwogIHJldHVybiB0bXAubDsKCn0KCmV4dGVybiBpbmxpbmUg
dm9pZApfSnZfc3RvcmVEb3VibGUgKF9Kdl93b3JkICpkYXRhLCBqZG91YmxlIGQpCnsKCgoKICBf
SnZfd29yZDIgdG1wOwogIHRtcC5kID0gZDsKICBkYXRhWzBdLmlhWzBdID0gdG1wLmlhWzBdOwog
IGRhdGFbMV0uaWFbMF0gPSB0bXAuaWFbMV07Cgp9CgpleHRlcm4gaW5saW5lIGpkb3VibGUKX0p2
X2xvYWREb3VibGUgKF9Kdl93b3JkICpkYXRhKQp7CgoKCiAgX0p2X3dvcmQyIHRtcDsKICB0bXAu
aWFbMF0gPSBkYXRhWzBdLmlhWzBdOwogIHRtcC5pYVsxXSA9IGRhdGFbMV0uaWFbMF07CiAgcmV0
dXJuIHRtcC5kOwoKfQojIDE5ICIuLi8uLi8uLi9nY2MvbGliamF2YS9pbnRlcnByZXQuY2MiIDIK
IyAxICIuLi8uLi8uLi9nY2MvbGliamF2YS9pbmNsdWRlL2phdmEtaW50ZXJwLmgiIDEKIyAxOSAi
Li4vLi4vLi4vZ2NjL2xpYmphdmEvaW5jbHVkZS9qYXZhLWludGVycC5oIgojcHJhZ21hIGludGVy
ZmFjZQoKCiMgMSAiamF2YS9sYW5nL0NsYXNzTG9hZGVyLmgiIDEKCgoKCgojcHJhZ21hIGludGVy
ZmFjZQoKCgoKZXh0ZXJuICJKYXZhIgp7CiAgbmFtZXNwYWNlIGphdmEKICB7CiAgICBuYW1lc3Bh
Y2UgbmV0CiAgICB7CiAgICAgIGNsYXNzIFVSTDsKICAgIH0KICAgIG5hbWVzcGFjZSBzZWN1cml0
eQogICAgewogICAgICBjbGFzcyBQcm90ZWN0aW9uRG9tYWluOwogICAgICBjbGFzcyBQZXJtaXNz
aW9uOwogICAgfQogIH0KfTsKCmNsYXNzIDo6amF2YTo6bGFuZzo6Q2xhc3NMb2FkZXIgOiBwdWJs
aWMgOjpqYXZhOjpsYW5nOjpPYmplY3QKewpwdWJsaWM6CiAgOjpqYXZhOjpsYW5nOjpDbGFzc0xv
YWRlciAqZ2V0UGFyZW50ICgpIHsgcmV0dXJuIHBhcmVudDsgfQogIHN0YXRpYyA6OmphdmE6Omxh
bmc6OkNsYXNzTG9hZGVyICpnZXRTeXN0ZW1DbGFzc0xvYWRlciAoKTsKcHVibGljOgogIENsYXNz
TG9hZGVyICgpOwogIENsYXNzTG9hZGVyICg6OmphdmE6Omxhbmc6OkNsYXNzTG9hZGVyICopOwpw
dWJsaWM6CiAgdmlydHVhbCA6OmphdmE6Omxhbmc6OkNsYXNzICpsb2FkQ2xhc3MgKDo6amF2YTo6
bGFuZzo6U3RyaW5nICopOwpwdWJsaWM6CiAgdmlydHVhbCA6OmphdmE6Omxhbmc6OkNsYXNzICps
b2FkQ2xhc3MgKDo6amF2YTo6bGFuZzo6U3RyaW5nICosIGpib29sZWFuKTsKICB2aXJ0dWFsIDo6
amF2YTo6bGFuZzo6Q2xhc3MgKmZpbmRDbGFzcyAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAg
OjpqYXZhOjpsYW5nOjpDbGFzcyAqZGVmaW5lQ2xhc3MgKGpieXRlQXJyYXksIGppbnQsIGppbnQp
OwogIDo6amF2YTo6bGFuZzo6Q2xhc3MgKmRlZmluZUNsYXNzICg6OmphdmE6Omxhbmc6OlN0cmlu
ZyAqLCBqYnl0ZUFycmF5LCBqaW50LCBqaW50KTsKICA6OmphdmE6Omxhbmc6OkNsYXNzICpkZWZp
bmVDbGFzcyAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwgamJ5dGVBcnJheSwgamludCwgamludCwg
OjpqYXZhOjpzZWN1cml0eTo6UHJvdGVjdGlvbkRvbWFpbiAqKTsKcHJpdmF0ZToKICA6OmphdmE6
Omxhbmc6OkNsYXNzICpkZWZpbmVDbGFzczAgKDo6amF2YTo6bGFuZzo6U3RyaW5nICosIGpieXRl
QXJyYXksIGppbnQsIGppbnQsIDo6amF2YTo6c2VjdXJpdHk6OlByb3RlY3Rpb25Eb21haW4gKik7
CnB1YmxpYzoKICB2b2lkIHJlc29sdmVDbGFzcyAoOjpqYXZhOjpsYW5nOjpDbGFzcyAqKTsKcHVi
bGljOgogIHN0YXRpYyB2b2lkIHJlc29sdmVDbGFzczAgKDo6amF2YTo6bGFuZzo6Q2xhc3MgKik7
CnByaXZhdGU6CiAgc3RhdGljIHZvaWQgbGlua0NsYXNzMCAoOjpqYXZhOjpsYW5nOjpDbGFzcyAq
KTsKICBzdGF0aWMgdm9pZCBtYXJrQ2xhc3NFcnJvclN0YXRlMCAoOjpqYXZhOjpsYW5nOjpDbGFz
cyAqKTsKcHVibGljOgogIHZpcnR1YWwgOjpqYXZhOjpsYW5nOjpQYWNrYWdlICpkZWZpbmVQYWNr
YWdlICg6OmphdmE6Omxhbmc6OlN0cmluZyAqLCA6OmphdmE6Omxhbmc6OlN0cmluZyAqLCA6Omph
dmE6Omxhbmc6OlN0cmluZyAqLCA6OmphdmE6Omxhbmc6OlN0cmluZyAqLCA6OmphdmE6Omxhbmc6
OlN0cmluZyAqLCA6OmphdmE6Omxhbmc6OlN0cmluZyAqLCA6OmphdmE6Omxhbmc6OlN0cmluZyAq
LCA6OmphdmE6Om5ldDo6VVJMICopOwogIHZpcnR1YWwgOjpqYXZhOjpsYW5nOjpQYWNrYWdlICpn
ZXRQYWNrYWdlICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICB2aXJ0dWFsIEpBcnJheTwgOjpq
YXZhOjpsYW5nOjpQYWNrYWdlICo+ICpnZXRQYWNrYWdlcyAoKTsKICA6OmphdmE6Omxhbmc6OkNs
YXNzICpmaW5kU3lzdGVtQ2xhc3MgKDo6amF2YTo6bGFuZzo6U3RyaW5nICopOwogIHZvaWQgc2V0
U2lnbmVycyAoOjpqYXZhOjpsYW5nOjpDbGFzcyAqLCBKQXJyYXk8IDo6amF2YTo6bGFuZzo6T2Jq
ZWN0ICo+ICopIHsgfQogIDo6amF2YTo6bGFuZzo6Q2xhc3MgKmZpbmRMb2FkZWRDbGFzcyAoOjpq
YXZhOjpsYW5nOjpTdHJpbmcgKik7CnB1YmxpYzoKICBzdGF0aWMgOjpqYXZhOjppbzo6SW5wdXRT
dHJlYW0gKmdldFN5c3RlbVJlc291cmNlQXNTdHJlYW0gKDo6amF2YTo6bGFuZzo6U3RyaW5nICop
OwogIHN0YXRpYyA6OmphdmE6Om5ldDo6VVJMICpnZXRTeXN0ZW1SZXNvdXJjZSAoOjpqYXZhOjps
YW5nOjpTdHJpbmcgKik7CiAgdmlydHVhbCA6OmphdmE6OmlvOjpJbnB1dFN0cmVhbSAqZ2V0UmVz
b3VyY2VBc1N0cmVhbSAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgdmlydHVhbCA6OmphdmE6
Om5ldDo6VVJMICpnZXRSZXNvdXJjZSAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CnB1YmxpYzoK
ICB2aXJ0dWFsIDo6amF2YTo6bmV0OjpVUkwgKmZpbmRSZXNvdXJjZSAoOjpqYXZhOjpsYW5nOjpT
dHJpbmcgKikgeyByZXR1cm4gMDsgfQpwdWJsaWM6CiAgOjpqYXZhOjp1dGlsOjpFbnVtZXJhdGlv
biAqZ2V0UmVzb3VyY2VzICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKcHVibGljOgogIHZpcnR1
YWwgOjpqYXZhOjp1dGlsOjpFbnVtZXJhdGlvbiAqZmluZFJlc291cmNlcyAoOjpqYXZhOjpsYW5n
OjpTdHJpbmcgKikgeyByZXR1cm4gMDsgfQpwcml2YXRlOgogIDo6amF2YTo6bGFuZzo6Q2xhc3NM
b2FkZXIgKnBhcmVudDsKICA6OmphdmE6OnV0aWw6Okhhc2hNYXAgKmRlZmluZWRQYWNrYWdlczsK
cHVibGljOgogIHN0YXRpYyA6OmphdmE6OnNlY3VyaXR5OjpQZXJtaXNzaW9uICpwcm90ZWN0aW9u
RG9tYWluUGVybWlzc2lvbjsKICBzdGF0aWMgOjpqYXZhOjpzZWN1cml0eTo6UHJvdGVjdGlvbkRv
bWFpbiAqdW5rbm93blByb3RlY3Rpb25Eb21haW47CiAgc3RhdGljIDo6amF2YTo6c2VjdXJpdHk6
OlByb3RlY3Rpb25Eb21haW4gKmRlZmF1bHRQcm90ZWN0aW9uRG9tYWluOwogIGZyaWVuZCBqY2xh
c3MgX0p2X0ZpbmRDbGFzcyAoX0p2X1V0ZjhDb25zdCAqbmFtZSwgamF2YTo6bGFuZzo6Q2xhc3NM
b2FkZXIgKmxvYWRlcik7CiAgZnJpZW5kIHZvaWQgX0p2X1J1bk1haW4gKGpjbGFzcyBrbGFzcywg
Y29uc3QgY2hhciAqbmFtZSwgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBib29sIGlzX2ph
cik7CnB1YmxpYzoKCiAgc3RhdGljIDo6amF2YTo6bGFuZzo6Q2xhc3MgY2xhc3MkOwp9OwojIDIz
ICIuLi8uLi8uLi9nY2MvbGliamF2YS9pbmNsdWRlL2phdmEtaW50ZXJwLmgiIDIKCmV4dGVybiAi
QyIgewojIDEgIi4uL2xpYmZmaS9pbmNsdWRlL2ZmaS5oIiAxCiMgNTUgIi4uL2xpYmZmaS9pbmNs
dWRlL2ZmaS5oIgpleHRlcm4gIkMiIHsKCgoKCgoKCiMgMSAiLi4vbGliZmZpL2luY2x1ZGUvZmZp
Y29uZmlnLmgiIDEKIyA2NCAiLi4vbGliZmZpL2luY2x1ZGUvZmZpLmgiIDIKCgojIDEgIi94MS9l
Z2NzL2J1aWxkL2djYy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAxNDcgIi94MS9lZ2NzL2J1aWxk
L2djYy9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgaW50IHB0cmRpZmZfdDsKIyA2NyAiLi4v
bGliZmZpL2luY2x1ZGUvZmZpLmgiIDIKIyAxNzUgIi4uL2xpYmZmaS9pbmNsdWRlL2ZmaS5oIgp0
eXBlZGVmIGVudW0gZmZpX2FiaSB7CgoKICBGRklfRklSU1RfQUJJID0gMCwKIyAxOTQgIi4uL2xp
YmZmaS9pbmNsdWRlL2ZmaS5oIgogIEZGSV9TWVNWLAogIEZGSV9ERUZBVUxUX0FCSSA9IEZGSV9T
WVNWLAojIDI1NSAiLi4vbGliZmZpL2luY2x1ZGUvZmZpLmgiCiAgRkZJX0xBU1RfQUJJCgp9IGZm
aV9hYmk7Cgp0eXBlZGVmIHN0cnVjdCBfZmZpX3R5cGUKewogIHNpemVfdCBzaXplOwogIHVuc2ln
bmVkIHNob3J0IGFsaWdubWVudDsKICB1bnNpZ25lZCBzaG9ydCB0eXBlOwogICAgICAgICAgICAg
c3RydWN0IF9mZmlfdHlwZSAqKmVsZW1lbnRzOwp9IGZmaV90eXBlOwoKCmV4dGVybiBmZmlfdHlw
ZSBmZmlfdHlwZV92b2lkOwpleHRlcm4gZmZpX3R5cGUgZmZpX3R5cGVfdWludDg7CmV4dGVybiBm
ZmlfdHlwZSBmZmlfdHlwZV9zaW50ODsKZXh0ZXJuIGZmaV90eXBlIGZmaV90eXBlX3VpbnQxNjsK
ZXh0ZXJuIGZmaV90eXBlIGZmaV90eXBlX3NpbnQxNjsKZXh0ZXJuIGZmaV90eXBlIGZmaV90eXBl
X3VpbnQzMjsKZXh0ZXJuIGZmaV90eXBlIGZmaV90eXBlX3NpbnQzMjsKZXh0ZXJuIGZmaV90eXBl
IGZmaV90eXBlX3VpbnQ2NDsKZXh0ZXJuIGZmaV90eXBlIGZmaV90eXBlX3NpbnQ2NDsKZXh0ZXJu
IGZmaV90eXBlIGZmaV90eXBlX2Zsb2F0OwpleHRlcm4gZmZpX3R5cGUgZmZpX3R5cGVfZG91Ymxl
OwpleHRlcm4gZmZpX3R5cGUgZmZpX3R5cGVfbG9uZ2RvdWJsZTsKZXh0ZXJuIGZmaV90eXBlIGZm
aV90eXBlX3BvaW50ZXI7CgoKCgoKdHlwZWRlZiBlbnVtIHsKICBGRklfT0sgPSAwLAogIEZGSV9C
QURfVFlQRURFRiwKICBGRklfQkFEX0FCSQp9IGZmaV9zdGF0dXM7Cgp0eXBlZGVmIHVuc2lnbmVk
IEZGSV9UWVBFOwoKdHlwZWRlZiBzdHJ1Y3QgewogIGZmaV9hYmkgYWJpOwogIHVuc2lnbmVkIG5h
cmdzOwogICAgICAgICAgICAgICAgICBmZmlfdHlwZSAqKmFyZ190eXBlczsKICAgICAgICAgICAg
ICAgICAgZmZpX3R5cGUgKnJ0eXBlOwogIHVuc2lnbmVkIGJ5dGVzOwogIHVuc2lnbmVkIGZsYWdz
OwoKCgoKCgoKfSBmZmlfY2lmOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IGZmaV9hcmc7CiMgMzM4
ICIuLi9saWJmZmkvaW5jbHVkZS9mZmkuaCIKdHlwZWRlZiB1bmlvbiB7CiAgaW50IHNpbnQ7CiAg
dW5zaWduZWQgaW50IHVpbnQ7CiAgZmxvYXQgZmx0OwogIGNoYXIgZGF0YVs0XTsKICB2b2lkKiBw
dHI7Cn0gZmZpX3JhdzsKCnZvaWQgZmZpX3Jhd19jYWxsICggZmZpX2NpZiAqY2lmLAogICAgICAg
ICAgICAgICAgICAgdm9pZCAoKmZuKSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv
aWQgKnJ2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZmlfcmF3ICph
dmFsdWUpOwoKdm9pZCBmZmlfcHRyYXJyYXlfdG9fcmF3IChmZmlfY2lmICpjaWYsIHZvaWQgKiph
cmdzLCBmZmlfcmF3ICpyYXcpOwp2b2lkIGZmaV9yYXdfdG9fcHRyYXJyYXkgKGZmaV9jaWYgKmNp
ZiwgZmZpX3JhdyAqcmF3LCB2b2lkICoqYXJncyk7CnNpemVfdCBmZmlfcmF3X3NpemUgKGZmaV9j
aWYgKmNpZik7CgoKCgoKCgp2b2lkIGZmaV9qYXZhX3Jhd19jYWxsICggZmZpX2NpZiAqY2lmLAog
ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqZm4pKCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2b2lkICpydmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmZmlfcmF3ICphdmFsdWUpOwoKdm9pZCBmZmlfamF2YV9wdHJhcnJheV90b19y
YXcgKGZmaV9jaWYgKmNpZiwgdm9pZCAqKmFyZ3MsIGZmaV9yYXcgKnJhdyk7CnZvaWQgZmZpX2ph
dmFfcmF3X3RvX3B0cmFycmF5IChmZmlfY2lmICpjaWYsIGZmaV9yYXcgKnJhdywgdm9pZCAqKmFy
Z3MpOwpzaXplX3QgZmZpX2phdmFfcmF3X3NpemUgKGZmaV9jaWYgKmNpZik7CiMgNDI2ICIuLi9s
aWJmZmkvaW5jbHVkZS9mZmkuaCIKdHlwZWRlZiBzdHJ1Y3QgewogIGNoYXIgdHJhbXBbMTBdOwog
IGZmaV9jaWYgKmNpZjsKICB2b2lkICgqZnVuKShmZmlfY2lmKix2b2lkKix2b2lkKiosdm9pZCop
OwogIHZvaWQgKnVzZXJfZGF0YTsKfSBmZmlfY2xvc3VyZTsKCmZmaV9zdGF0dXMKZmZpX3ByZXBf
Y2xvc3VyZSAoZmZpX2Nsb3N1cmUqLAogICAgICAgICAgICAgICAgICBmZmlfY2lmICosCiAgICAg
ICAgICAgICAgICAgIHZvaWQgKCpmdW4pKGZmaV9jaWYqLHZvaWQqLHZvaWQqKix2b2lkKiksCiAg
ICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSk7CgoKCnR5cGVkZWYgc3RydWN0IHsKICBj
aGFyIHRyYW1wWzEwXTsKCiAgZmZpX2NpZiAqY2lmOwojIDQ1NyAiLi4vbGliZmZpL2luY2x1ZGUv
ZmZpLmgiCiAgdm9pZCAoKmZ1bikoZmZpX2NpZiosdm9pZCosZmZpX3Jhdyosdm9pZCopOwogIHZv
aWQgKnVzZXJfZGF0YTsKCn0gZmZpX3Jhd19jbG9zdXJlOwoKZmZpX3N0YXR1cwpmZmlfcHJlcF9y
YXdfY2xvc3VyZSAoZmZpX3Jhd19jbG9zdXJlKiwKICAgICAgICAgICAgICAgICAgICAgIGZmaV9j
aWYgKmNpZiwKICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpmdW4pKGZmaV9jaWYqLHZvaWQq
LGZmaV9yYXcqLHZvaWQqKSwKICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSk7
CgoKZmZpX3N0YXR1cwpmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlIChmZmlfcmF3X2Nsb3N1cmUq
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBmZmlfY2lmICpjaWYsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQgKCpmdW4pKGZmaV9jaWYqLHZvaWQqLGZmaV9yYXcqLHZvaWQqKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhKTsKCgoKCgoKCmZmaV9z
dGF0dXMgZmZpX3ByZXBfY2lmKCBmZmlfY2lmICpjaWYsCiAgICAgICAgICAgICAgICAgICAgICAg
IGZmaV9hYmkgYWJpLAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbmFyZ3Ms
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmZmlfdHlwZSAqcnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmZmlfdHlwZSAqKmF0eXBlcyk7Cgp2b2lkIGZmaV9jYWxsKCBmZmlfY2lmICpjaWYs
CiAgICAgICAgICAgICAgdm9pZCAoKmZuKSgpLAogICAgICAgICAgICAgICAgICAgICAgICB2b2lk
ICpydmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiphdmFsdWUpOwoj
IDUyNCAiLi4vbGliZmZpL2luY2x1ZGUvZmZpLmgiCn0KIyAyNiAiLi4vLi4vLi4vZ2NjL2xpYmph
dmEvaW5jbHVkZS9qYXZhLWludGVycC5oIiAyCn0KCmV4dGVybiBpbmxpbmUgamJvb2xlYW4KX0p2
X0lzSW50ZXJwcmV0ZWRDbGFzcyAoamNsYXNzIGMpCnsKICByZXR1cm4gKGMtPmxvYWRlciAhPSAw
KTsKfQoKc3RydWN0IF9Kdl9SZXNvbHZlZE1ldGhvZDsKCnZvaWQgX0p2X0RlZmluZUNsYXNzIChq
Y2xhc3MsIGpieXRlQXJyYXksIGppbnQsIGppbnQpOwoKdm9pZCBfSnZfSW5pdEZpZWxkIChqb2Jq
ZWN0LCBqY2xhc3MsIGludCk7CnZvaWQgKiBfSnZfQWxsb2NNZXRob2RJbnZvY2F0aW9uIChqc2l6
ZSBzaXplKTsKaW50IF9Kdl9jb3VudF9hcmd1bWVudHMgKF9Kdl9VdGY4Q29uc3QgKnNpZ25hdHVy
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBqYm9vbGVhbiBzdGF0aWNwID0gdHJ1ZSk7CnZv
aWQgX0p2X1ZlcmlmeU1ldGhvZCAoX0p2X0ludGVycE1ldGhvZCAqbWV0aG9kKTsKCgoKCgoKCmNs
YXNzIF9Kdl9JbnRlcnBDbGFzczsKY2xhc3MgX0p2X0ludGVycE1ldGhvZDsKCgoKCnVuaW9uIF9K
dl9JbnRlcnBQQwp7CiAgaW50IGk7CiAgdm9pZCAqcDsKfTsKCmNsYXNzIF9Kdl9JbnRlcnBFeGNl
cHRpb24KewogIF9Kdl9JbnRlcnBQQyBzdGFydF9wYzsKICBfSnZfSW50ZXJwUEMgZW5kX3BjOwog
IF9Kdl9JbnRlcnBQQyBoYW5kbGVyX3BjOwogIF9Kdl9JbnRlcnBQQyBoYW5kbGVyX3R5cGU7Cgog
IGZyaWVuZCBjbGFzcyBfSnZfQ2xhc3NSZWFkZXI7CiAgZnJpZW5kIGNsYXNzIF9Kdl9JbnRlcnBN
ZXRob2Q7CiAgZnJpZW5kIGNsYXNzIF9Kdl9CeXRlY29kZVZlcmlmaWVyOwp9OwoKCgpjbGFzcyBf
SnZfTWV0aG9kQmFzZQp7CnByb3RlY3RlZDoKCiAgX0p2X0ludGVycENsYXNzICpkZWZpbmluZ19j
bGFzczsKCgogIF9Kdl9NZXRob2QgKnNlbGY7CgoKICBfSnZfdXNob3J0IGFyZ3NfcmF3X3NpemU7
CgpwdWJsaWM6CiAgX0p2X01ldGhvZCAqZ2V0X21ldGhvZCAoKQogIHsKICAgIHJldHVybiBzZWxm
OwogIH0KfTsKCmNsYXNzIF9Kdl9JbnRlcnBNZXRob2QgOiBwdWJsaWMgX0p2X01ldGhvZEJhc2UK
ewogIF9Kdl91c2hvcnQgbWF4X3N0YWNrOwogIF9Kdl91c2hvcnQgbWF4X2xvY2FsczsKICBpbnQg
Y29kZV9sZW5ndGg7CgogIF9Kdl91c2hvcnQgZXhjX2NvdW50OwoKICB2b2lkICpwcmVwYXJlZDsK
CiAgdW5zaWduZWQgY2hhciogYnl0ZWNvZGUgKCkKICB7CiAgICByZXR1cm4KICAgICAgKCh1bnNp
Z25lZCBjaGFyKil0aGlzKQogICAgICArICgoKCgodW5zaWduZWQpICgoc2l6ZW9mIChfSnZfSW50
ZXJwTWV0aG9kKSArIGV4Y19jb3VudCpzaXplb2YgKF9Kdl9JbnRlcnBFeGNlcHRpb24pKSkpLTEp
IHwgKCg0KS0xKSkrMSk7CgogIH0KCiAgX0p2X0ludGVycEV4Y2VwdGlvbiAqIGV4Y2VwdGlvbnMg
KCkKICB7CiAgICByZXR1cm4gKF9Kdl9JbnRlcnBFeGNlcHRpb24qKSAodGhpcysxKTsKICB9Cgog
IHN0YXRpYyBzaXplX3Qgc2l6ZSAoaW50IGV4Y19jb3VudCwgaW50IGNvZGVfbGVuZ3RoKQogIHsK
ICAgIHJldHVybgogICAgICAoKCgoKHVuc2lnbmVkKSAoKHNpemVvZiAoX0p2X0ludGVycE1ldGhv
ZCkgKyAoZXhjX2NvdW50ICogc2l6ZW9mIChfSnZfSW50ZXJwRXhjZXB0aW9uKSkpKSktMSkgfCAo
KDQpLTEpKSsxKQoKICAgICAgKyBjb2RlX2xlbmd0aDsKICB9CgoKICB2b2lkICpuY29kZSAoKTsK
ICB2b2lkIGNvbXBpbGUgKGNvbnN0IHZvaWQgKiBjb25zdCAqKTsKCiAgc3RhdGljIHZvaWQgcnVu
X25vcm1hbCAoZmZpX2NpZiosIHZvaWQqLCBmZmlfcmF3Kiwgdm9pZCopOwogIHN0YXRpYyB2b2lk
IHJ1bl9zeW5jaF9vYmplY3QgKGZmaV9jaWYqLCB2b2lkKiwgZmZpX3JhdyosIHZvaWQqKTsKICBz
dGF0aWMgdm9pZCBydW5fc3luY2hfY2xhc3MgKGZmaV9jaWYqLCB2b2lkKiwgZmZpX3JhdyosIHZv
aWQqKTsKCiAgdm9pZCBydW4gKHZvaWQqLCBmZmlfcmF3ICopOwoKIHB1YmxpYzoKICBzdGF0aWMg
dm9pZCBkdW1wX29iamVjdChqb2JqZWN0IG8pOwoKICBmcmllbmQgY2xhc3MgX0p2X0NsYXNzUmVh
ZGVyOwogIGZyaWVuZCBjbGFzcyBfSnZfQnl0ZWNvZGVWZXJpZmllcjsKCiAgZnJpZW5kIHZvaWQg
X0p2X1ByZXBhcmVDbGFzcyhqY2xhc3MpOwp9OwoKY2xhc3MgX0p2X0ludGVycENsYXNzIDogcHVi
bGljIGphdmE6Omxhbmc6OkNsYXNzCnsKICBfSnZfTWV0aG9kQmFzZSAqKmludGVycHJldGVkX21l
dGhvZHM7CiAgX0p2X3VzaG9ydCAqZmllbGRfaW5pdGlhbGl6ZXJzOwoKICBmcmllbmQgY2xhc3Mg
X0p2X0NsYXNzUmVhZGVyOwogIGZyaWVuZCBjbGFzcyBfSnZfSW50ZXJwTWV0aG9kOwogIGZyaWVu
ZCB2b2lkIF9Kdl9QcmVwYXJlQ2xhc3MoamNsYXNzKTsKICBmcmllbmQgdm9pZCBfSnZfSW5pdEZp
ZWxkIChqb2JqZWN0LCBqY2xhc3MsIGludCk7CgogIGZyaWVuZCB2b2lkICpfSnZfTWFya09iaiAo
dm9pZCAqLCB2b2lkICosIHZvaWQgKiwgdm9pZCAqKTsKCgogIGZyaWVuZCBfSnZfTWV0aG9kQmFz
ZSAqKiBfSnZfR2V0Rmlyc3RNZXRob2QgKF9Kdl9JbnRlcnBDbGFzcyAqa2xhc3MpOwp9OwoKZXh0
ZXJuIGlubGluZSBfSnZfTWV0aG9kQmFzZSAqKgpfSnZfR2V0Rmlyc3RNZXRob2QgKF9Kdl9JbnRl
cnBDbGFzcyAqa2xhc3MpCnsKICByZXR1cm4ga2xhc3MtPmludGVycHJldGVkX21ldGhvZHM7Cn0K
CnN0cnVjdCBfSnZfUmVzb2x2ZWRNZXRob2QgewogIGppbnQgc3RhY2tfaXRlbV9jb3VudDsKICBq
aW50IHZ0YWJsZV9pbmRleDsKICBqY2xhc3Mga2xhc3M7CiAgX0p2X01ldGhvZCogbWV0aG9kOwoK
CgoKICBmZmlfY2lmIGNpZjsKICBmZmlfdHlwZSAqIGFyZ190eXBlc1swXTsKfTsKCmNsYXNzIF9K
dl9KTklNZXRob2QgOiBwdWJsaWMgX0p2X01ldGhvZEJhc2UKewoKCiAgdm9pZCAqZnVuY3Rpb247
CgoKICBmZmlfY2lmIGpuaV9jaWY7CgoKICBmZmlfdHlwZSAqKmpuaV9hcmdfdHlwZXM7CgoKICBz
dGF0aWMgdm9pZCBjYWxsIChmZmlfY2lmICosIHZvaWQgKiwgZmZpX3JhdyAqLCB2b2lkICopOwoK
ICB2b2lkICpuY29kZSAoKTsKCiAgZnJpZW5kIGNsYXNzIF9Kdl9DbGFzc1JlYWRlcjsKICBmcmll
bmQgdm9pZCBfSnZfUHJlcGFyZUNsYXNzKGpjbGFzcyk7CgpwdWJsaWM6CgogIHZvaWQgc2V0X2Z1
bmN0aW9uICh2b2lkICpmKQogIHsKICAgIGZ1bmN0aW9uID0gZjsKICB9Cn07CiMgMjAgIi4uLy4u
Ly4uL2djYy9saWJqYXZhL2ludGVycHJldC5jYyIgMgoKIyAxICJqYXZhL2xhbmcvU3lzdGVtLmgi
IDEKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCgpjbGFzcyA6OmphdmE6Omxhbmc6OlN5c3RlbSA6
IHB1YmxpYyA6OmphdmE6Omxhbmc6Ok9iamVjdAp7CnB1YmxpYzoKICBzdGF0aWMgdm9pZCBhcnJh
eWNvcHkgKDo6amF2YTo6bGFuZzo6T2JqZWN0ICosIGppbnQsIDo6amF2YTo6bGFuZzo6T2JqZWN0
ICosIGppbnQsIGppbnQpOwogIHN0YXRpYyBqbG9uZyBjdXJyZW50VGltZU1pbGxpcyAoKTsKcHJp
dmF0ZToKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKmdldFN5c3RlbVRpbWVab25lICgp
OwogIHN0YXRpYyA6OmphdmE6Omxhbmc6OlN0cmluZyAqZ2V0RGVmYXVsdFRpbWVab25lSWQgKCk7
CnB1YmxpYzoKICBzdGF0aWMgdm9pZCBleGl0IChqaW50KTsKICBzdGF0aWMgdm9pZCBnYyAoKTsK
ICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKmdldGVudiAoOjpqYXZhOjpsYW5nOjpTdHJp
bmcgKik7CnByaXZhdGU6CiAgc3RhdGljIHZvaWQgaW5pdF9wcm9wZXJ0aWVzICgpOwpwdWJsaWM6
CiAgc3RhdGljIDo6amF2YTo6dXRpbDo6UHJvcGVydGllcyAqZ2V0UHJvcGVydGllcyAoKTsKICBz
dGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKmdldFByb3BlcnR5ICg6OmphdmE6Omxhbmc6OlN0
cmluZyAqKTsKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKmdldFByb3BlcnR5ICg6Omph
dmE6Omxhbmc6OlN0cmluZyAqLCA6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICBzdGF0aWMgOjpq
YXZhOjpsYW5nOjpTZWN1cml0eU1hbmFnZXIgKmdldFNlY3VyaXR5TWFuYWdlciAoKTsKICBzdGF0
aWMgamludCBpZGVudGl0eUhhc2hDb2RlICg6OmphdmE6Omxhbmc6Ok9iamVjdCAqKTsKICBzdGF0
aWMgdm9pZCBsb2FkICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICBzdGF0aWMgdm9pZCBsb2Fk
TGlicmFyeSAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgc3RhdGljIHZvaWQgcnVuRmluYWxp
emF0aW9uICgpOwogIHN0YXRpYyB2b2lkIHJ1bkZpbmFsaXplcnNPbkV4aXQgKGpib29sZWFuKTsK
cHJpdmF0ZToKICBzdGF0aWMgdm9pZCBjaGVja1NldElPICgpOwpwdWJsaWM6CiAgc3RhdGljIHZv
aWQgc2V0RXJyICg6OmphdmE6OmlvOjpQcmludFN0cmVhbSAqKTsKICBzdGF0aWMgdm9pZCBzZXRJ
biAoOjpqYXZhOjppbzo6SW5wdXRTdHJlYW0gKik7CiAgc3RhdGljIHZvaWQgc2V0T3V0ICg6Omph
dmE6OmlvOjpQcmludFN0cmVhbSAqKTsKICBzdGF0aWMgdm9pZCBzZXRQcm9wZXJ0aWVzICg6Omph
dmE6OnV0aWw6OlByb3BlcnRpZXMgKik7CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6U3RyaW5nICpz
ZXRQcm9wZXJ0eSAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwgOjpqYXZhOjpsYW5nOjpTdHJpbmcg
Kik7CiAgc3RhdGljIHZvaWQgc2V0U2VjdXJpdHlNYW5hZ2VyICg6OmphdmE6Omxhbmc6OlNlY3Vy
aXR5TWFuYWdlciAqKTsKcHJpdmF0ZToKICBTeXN0ZW0gKCk7CnB1YmxpYzoKICBzdGF0aWMgOjpq
YXZhOjppbzo6SW5wdXRTdHJlYW0gKmluOwogIHN0YXRpYyA6OmphdmE6OmlvOjpQcmludFN0cmVh
bSAqb3V0OwogIHN0YXRpYyA6OmphdmE6OmlvOjpQcmludFN0cmVhbSAqZXJyOwpwcml2YXRlOgog
IHN0YXRpYyA6OmphdmE6Omxhbmc6OlNlY3VyaXR5TWFuYWdlciAqc2VjbWFuOwogIHN0YXRpYyA6
OmphdmE6OnV0aWw6OlByb3BlcnRpZXMgKnByb3BlcnRpZXM7CnB1YmxpYzoKCiAgc3RhdGljIDo6
amF2YTo6bGFuZzo6Q2xhc3MgY2xhc3MkOwp9OwojIDIyICIuLi8uLi8uLi9nY2MvbGliamF2YS9p
bnRlcnByZXQuY2MiIDIKCiMgMSAiamF2YS9sYW5nL0ludGVnZXIuaCIgMQoKCgoKCiNwcmFnbWEg
aW50ZXJmYWNlCgojIDEgImphdmEvbGFuZy9OdW1iZXIuaCIgMQoKCgoKCiNwcmFnbWEgaW50ZXJm
YWNlCgoKCmNsYXNzIDo6amF2YTo6bGFuZzo6TnVtYmVyIDogcHVibGljIDo6amF2YTo6bGFuZzo6
T2JqZWN0CnsKcHVibGljOgogIHZpcnR1YWwgamJ5dGUgYnl0ZVZhbHVlICgpOwogIHZpcnR1YWwg
anNob3J0IHNob3J0VmFsdWUgKCk7CiAgdmlydHVhbCBqaW50IGludFZhbHVlICgpID0gMDsKICB2
aXJ0dWFsIGpsb25nIGxvbmdWYWx1ZSAoKSA9IDA7CiAgdmlydHVhbCBqZmxvYXQgZmxvYXRWYWx1
ZSAoKSA9IDA7CiAgdmlydHVhbCBqZG91YmxlIGRvdWJsZVZhbHVlICgpID0gMDsKICBOdW1iZXIg
KCk7CnByaXZhdGU6CiAgc3RhdGljIGNvbnN0IGpsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAtODc0
MjQ0ODgyNDY1MjA3ODk2NUxMOwpwdWJsaWM6CgogIHN0YXRpYyA6OmphdmE6Omxhbmc6OkNsYXNz
IGNsYXNzJDsKfTsKIyA5ICJqYXZhL2xhbmcvSW50ZWdlci5oIiAyCgpjbGFzcyA6OmphdmE6Omxh
bmc6OkludGVnZXIgOiBwdWJsaWMgOjpqYXZhOjpsYW5nOjpOdW1iZXIKewpwdWJsaWM6CiAgSW50
ZWdlciAoamludCk7CiAgSW50ZWdlciAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgamludCBo
YXNoQ29kZSAoKSB7IHJldHVybiB2YWx1ZTsgfQogIGpib29sZWFuIGVxdWFscyAoOjpqYXZhOjps
YW5nOjpPYmplY3QgKik7CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6SW50ZWdlciAqZ2V0SW50ZWdl
ciAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6SW50ZWdl
ciAqZ2V0SW50ZWdlciAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwgamludCk7CiAgc3RhdGljIDo6
amF2YTo6bGFuZzo6SW50ZWdlciAqZ2V0SW50ZWdlciAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwg
OjpqYXZhOjpsYW5nOjpJbnRlZ2VyICopOwpwcml2YXRlOgogIHN0YXRpYyA6OmphdmE6Omxhbmc6
OlN0cmluZyAqdG9VbnNpZ25lZFN0cmluZyAoamludCwgamludCk7CnB1YmxpYzoKICBzdGF0aWMg
OjpqYXZhOjpsYW5nOjpTdHJpbmcgKnRvSGV4U3RyaW5nIChqaW50KTsKICBzdGF0aWMgOjpqYXZh
OjpsYW5nOjpTdHJpbmcgKnRvT2N0YWxTdHJpbmcgKGppbnQpOwogIHN0YXRpYyA6OmphdmE6Omxh
bmc6OlN0cmluZyAqdG9CaW5hcnlTdHJpbmcgKGppbnQpOwogIHN0YXRpYyA6OmphdmE6Omxhbmc6
OlN0cmluZyAqdG9TdHJpbmcgKGppbnQpOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nICp0b1N0cmlu
ZyAoKTsKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnRvU3RyaW5nIChqaW50LCBqaW50
KTsKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpJbnRlZ2VyICp2YWx1ZU9mICg6OmphdmE6Omxhbmc6
OlN0cmluZyAqKTsKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpJbnRlZ2VyICp2YWx1ZU9mICg6Omph
dmE6Omxhbmc6OlN0cmluZyAqLCBqaW50KTsKICBzdGF0aWMgamludCBwYXJzZUludCAoOjpqYXZh
OjpsYW5nOjpTdHJpbmcgKik7CiAgc3RhdGljIGppbnQgcGFyc2VJbnQgKDo6amF2YTo6bGFuZzo6
U3RyaW5nICosIGppbnQpOwpwcml2YXRlOgogIHN0YXRpYyBqaW50IHBhcnNlSW50ICg6OmphdmE6
Omxhbmc6OlN0cmluZyAqLCBqaW50LCBqaW50LCBqYm9vbGVhbiwgamludCk7CnB1YmxpYzoKICBz
dGF0aWMgOjpqYXZhOjpsYW5nOjpJbnRlZ2VyICpkZWNvZGUgKDo6amF2YTo6bGFuZzo6U3RyaW5n
ICopOwogIGpieXRlIGJ5dGVWYWx1ZSAoKTsKICBqc2hvcnQgc2hvcnRWYWx1ZSAoKTsKICBqaW50
IGludFZhbHVlICgpIHsgcmV0dXJuIHZhbHVlOyB9CiAgamxvbmcgbG9uZ1ZhbHVlICgpOwogIGpm
bG9hdCBmbG9hdFZhbHVlICgpOwogIGpkb3VibGUgZG91YmxlVmFsdWUgKCk7CiAgamludCBjb21w
YXJlVG8gKDo6amF2YTo6bGFuZzo6SW50ZWdlciAqKTsKICBqaW50IGNvbXBhcmVUbyAoOjpqYXZh
OjpsYW5nOjpPYmplY3QgKik7CnByaXZhdGU6CiAgc3RhdGljIGNvbnN0IGpsb25nIHNlcmlhbFZl
cnNpb25VSUQgPSAxMzYwODI2NjY3ODA2ODUyOTIwTEw7CnB1YmxpYzoKICBzdGF0aWMgY29uc3Qg
amludCBNSU5fVkFMVUUgPSAtMjE0NzQ4MzY0N0wgLSAxOwogIHN0YXRpYyBjb25zdCBqaW50IE1B
WF9WQUxVRSA9IDIxNDc0ODM2NDdMOwogIHN0YXRpYyA6OmphdmE6Omxhbmc6OkNsYXNzICpUWVBF
Owpwcml2YXRlOgogIGppbnQgdmFsdWU7CnB1YmxpYzoKCiAgc3RhdGljIDo6amF2YTo6bGFuZzo6
Q2xhc3MgY2xhc3MkOwp9OwojIDI0ICIuLi8uLi8uLi9nY2MvbGliamF2YS9pbnRlcnByZXQuY2Mi
IDIKIyAxICJqYXZhL2xhbmcvTG9uZy5oIiAxCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCgoKY2xh
c3MgOjpqYXZhOjpsYW5nOjpMb25nIDogcHVibGljIDo6amF2YTo6bGFuZzo6TnVtYmVyCnsKcHVi
bGljOgogIExvbmcgKGpsb25nKTsKICBMb25nICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKICBq
Ym9vbGVhbiBlcXVhbHMgKDo6amF2YTo6bGFuZzo6T2JqZWN0ICopOwogIGppbnQgaGFzaENvZGUg
KCk7CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6TG9uZyAqZ2V0TG9uZyAoOjpqYXZhOjpsYW5nOjpT
dHJpbmcgKik7CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6TG9uZyAqZ2V0TG9uZyAoOjpqYXZhOjps
YW5nOjpTdHJpbmcgKiwgamxvbmcpOwogIHN0YXRpYyA6OmphdmE6Omxhbmc6OkxvbmcgKmdldExv
bmcgKDo6amF2YTo6bGFuZzo6U3RyaW5nICosIDo6amF2YTo6bGFuZzo6TG9uZyAqKTsKcHJpdmF0
ZToKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnRvVW5zaWduZWRTdHJpbmcgKGpsb25n
LCBqaW50KTsKcHVibGljOgogIHN0YXRpYyA6OmphdmE6Omxhbmc6OlN0cmluZyAqdG9IZXhTdHJp
bmcgKGpsb25nKTsKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnRvT2N0YWxTdHJpbmcg
KGpsb25nKTsKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnRvQmluYXJ5U3RyaW5nIChq
bG9uZyk7CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6U3RyaW5nICp0b1N0cmluZyAoamxvbmcpOwog
IDo6amF2YTo6bGFuZzo6U3RyaW5nICp0b1N0cmluZyAoKTsKICBzdGF0aWMgOjpqYXZhOjpsYW5n
OjpTdHJpbmcgKnRvU3RyaW5nIChqbG9uZywgamludCk7CiAgc3RhdGljIDo6amF2YTo6bGFuZzo6
TG9uZyAqdmFsdWVPZiAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgc3RhdGljIDo6amF2YTo6
bGFuZzo6TG9uZyAqdmFsdWVPZiAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwgamludCk7CiAgc3Rh
dGljIGpsb25nIHBhcnNlTG9uZyAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgc3RhdGljIGps
b25nIHBhcnNlTG9uZyAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKiwgamludCk7CiAgc3RhdGljIDo6
amF2YTo6bGFuZzo6TG9uZyAqZGVjb2RlICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKcHJpdmF0
ZToKICBzdGF0aWMgamxvbmcgcGFyc2VMb25nICg6OmphdmE6Omxhbmc6OlN0cmluZyAqLCBqaW50
LCBqaW50LCBqYm9vbGVhbiwgamludCk7CnB1YmxpYzoKICBqYnl0ZSBieXRlVmFsdWUgKCk7CiAg
anNob3J0IHNob3J0VmFsdWUgKCk7CiAgamludCBpbnRWYWx1ZSAoKTsKICBqbG9uZyBsb25nVmFs
dWUgKCkgeyByZXR1cm4gdmFsdWU7IH0KICBqZmxvYXQgZmxvYXRWYWx1ZSAoKTsKICBqZG91Ymxl
IGRvdWJsZVZhbHVlICgpOwogIGppbnQgY29tcGFyZVRvICg6OmphdmE6Omxhbmc6OkxvbmcgKik7
CiAgamludCBjb21wYXJlVG8gKDo6amF2YTo6bGFuZzo6T2JqZWN0ICopOwpwdWJsaWM6CiAgc3Rh
dGljIGNvbnN0IGpsb25nIHNlcmlhbFZlcnNpb25VSUQgPSA0MjkwNzc0MzgwNTU4ODg1ODU1TEw7
CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgamxvbmcgTUlOX1ZBTFVFID0gLTkyMjMzNzIwMzY4NTQ3
NzU4MDdMTCAtIDE7CiAgc3RhdGljIGNvbnN0IGpsb25nIE1BWF9WQUxVRSA9IDkyMjMzNzIwMzY4
NTQ3NzU4MDdMTDsKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyAqVFlQRTsKcHJpdmF0ZToK
ICBqbG9uZyB2YWx1ZTsKcHVibGljOgoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBjbGFz
cyQ7Cn07CiMgMjUgIi4uLy4uLy4uL2djYy9saWJqYXZhL2ludGVycHJldC5jYyIgMgojIDEgImph
dmEvbGFuZy9TdHJpbmdCdWZmZXIuaCIgMQoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCgpjbGFz
cyA6OmphdmE6Omxhbmc6OlN0cmluZ0J1ZmZlciA6IHB1YmxpYyA6OmphdmE6Omxhbmc6Ok9iamVj
dAp7CnB1YmxpYzoKICA6OmphdmE6Omxhbmc6OlN0cmluZ0J1ZmZlciAqYXBwZW5kIChqYm9vbGVh
bik7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmdCdWZmZXIgKmFwcGVuZCAoamNoYXIpOwogIDo6amF2
YTo6bGFuZzo6U3RyaW5nQnVmZmVyICphcHBlbmQgKGppbnQpOwogIDo6amF2YTo6bGFuZzo6U3Ry
aW5nQnVmZmVyICphcHBlbmQgKGpsb25nKTsKICA6OmphdmE6Omxhbmc6OlN0cmluZ0J1ZmZlciAq
YXBwZW5kIChqZmxvYXQpOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nQnVmZmVyICphcHBlbmQgKGpk
b3VibGUpOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nQnVmZmVyICphcHBlbmQgKDo6amF2YTo6bGFu
Zzo6T2JqZWN0ICopOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nQnVmZmVyICphcHBlbmQgKDo6amF2
YTo6bGFuZzo6U3RyaW5nICopOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nQnVmZmVyICphcHBlbmQg
KGpjaGFyQXJyYXkpOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nQnVmZmVyICphcHBlbmQgKGpjaGFy
QXJyYXksIGppbnQsIGppbnQpOwogIGppbnQgY2FwYWNpdHkgKCk7CiAgamNoYXIgY2hhckF0IChq
aW50KTsKICA6OmphdmE6Omxhbmc6OlN0cmluZ0J1ZmZlciAqZGVsZXRlJCAoamludCwgamludCk7
CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmdCdWZmZXIgKmRlbGV0ZUNoYXJBdCAoamludCk7CiAgdm9p
ZCBlbnN1cmVDYXBhY2l0eSAoamludCk7CnByaXZhdGU6CiAgdm9pZCBlbnN1cmVDYXBhY2l0eV91
bnN5bmNocm9uaXplZCAoamludCk7CnB1YmxpYzoKICB2b2lkIGdldENoYXJzIChqaW50LCBqaW50
LCBqY2hhckFycmF5LCBqaW50KTsKICA6OmphdmE6Omxhbmc6OlN0cmluZ0J1ZmZlciAqaW5zZXJ0
IChqaW50LCBqYm9vbGVhbik7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmdCdWZmZXIgKmluc2VydCAo
amludCwgamNoYXIpOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nQnVmZmVyICppbnNlcnQgKGppbnQs
IGppbnQpOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nQnVmZmVyICppbnNlcnQgKGppbnQsIGpsb25n
KTsKICA6OmphdmE6Omxhbmc6OlN0cmluZ0J1ZmZlciAqaW5zZXJ0IChqaW50LCBqZmxvYXQpOwog
IDo6amF2YTo6bGFuZzo6U3RyaW5nQnVmZmVyICppbnNlcnQgKGppbnQsIGpkb3VibGUpOwogIDo6
amF2YTo6bGFuZzo6U3RyaW5nQnVmZmVyICppbnNlcnQgKGppbnQsIDo6amF2YTo6bGFuZzo6T2Jq
ZWN0ICopOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nQnVmZmVyICppbnNlcnQgKGppbnQsIDo6amF2
YTo6bGFuZzo6U3RyaW5nICopOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nQnVmZmVyICppbnNlcnQg
KGppbnQsIGpjaGFyQXJyYXkpOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nQnVmZmVyICppbnNlcnQg
KGppbnQsIGpjaGFyQXJyYXksIGppbnQsIGppbnQpOwogIGppbnQgbGVuZ3RoICgpIHsgcmV0dXJu
IGNvdW50OyB9CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmdCdWZmZXIgKnJlcGxhY2UgKGppbnQsIGpp
bnQsIDo6amF2YTo6bGFuZzo6U3RyaW5nICopOwogIDo6amF2YTo6bGFuZzo6U3RyaW5nQnVmZmVy
ICpyZXZlcnNlICgpOwogIHZvaWQgc2V0Q2hhckF0IChqaW50LCBqY2hhcik7CiAgdm9pZCBzZXRM
ZW5ndGggKGppbnQpOwogIFN0cmluZ0J1ZmZlciAoKTsKICBTdHJpbmdCdWZmZXIgKGppbnQpOwog
IFN0cmluZ0J1ZmZlciAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgOjpqYXZhOjpsYW5nOjpT
dHJpbmcgKnN1YnN0cmluZyAoamludCk7CiAgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKnN1YnN0cmlu
ZyAoamludCwgamludCk7CiAgOjpqYXZhOjpsYW5nOjpDaGFyU2VxdWVuY2UgKnN1YlNlcXVlbmNl
IChqaW50LCBqaW50KTsKICA6OmphdmE6Omxhbmc6OlN0cmluZyAqdG9TdHJpbmcgKCk7CnB1Ymxp
YzoKICBqaW50IGNvdW50OwogIGpjaGFyQXJyYXkgdmFsdWU7CiAgamJvb2xlYW4gc2hhcmVkOwog
IHN0YXRpYyBjb25zdCBqbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMzM4ODY4NTg3NzE0NzkyMTEw
N0xMOwpwcml2YXRlOgogIHN0YXRpYyBjb25zdCBqaW50IERFRkFVTFRfQ0FQQUNJVFkgPSAxNkw7
CnB1YmxpYzoKCiAgc3RhdGljIDo6amF2YTo6bGFuZzo6Q2xhc3MgY2xhc3MkOwp9OwojIDI2ICIu
Li8uLi8uLi9nY2MvbGliamF2YS9pbnRlcnByZXQuY2MiIDIKCgojIDEgImphdmEvbGFuZy9DbGFz
c0Nhc3RFeGNlcHRpb24uaCIgMQoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgojIDEgImphdmEvbGFu
Zy9SdW50aW1lRXhjZXB0aW9uLmgiIDEKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKIyAxICJqYXZh
L2xhbmcvRXhjZXB0aW9uLmgiIDEKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKIyAxICJqYXZhL2xh
bmcvVGhyb3dhYmxlLmgiIDEKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCgoKY2xhc3MgOjpqYXZh
OjpsYW5nOjpUaHJvd2FibGUgOiBwdWJsaWMgOjpqYXZhOjpsYW5nOjpPYmplY3QKewpwdWJsaWM6
CiAgdmlydHVhbCA6OmphdmE6Omxhbmc6OlRocm93YWJsZSAqZmlsbEluU3RhY2tUcmFjZSAoKTsK
ICB2aXJ0dWFsIDo6amF2YTo6bGFuZzo6U3RyaW5nICpnZXRMb2NhbGl6ZWRNZXNzYWdlICgpOwog
IHZpcnR1YWwgOjpqYXZhOjpsYW5nOjpTdHJpbmcgKmdldE1lc3NhZ2UgKCkgeyByZXR1cm4gZGV0
YWlsTWVzc2FnZTsgfQogIHZpcnR1YWwgdm9pZCBwcmludFN0YWNrVHJhY2UgKCk7CiAgdmlydHVh
bCB2b2lkIHByaW50U3RhY2tUcmFjZSAoOjpqYXZhOjppbzo6UHJpbnRTdHJlYW0gKik7CiAgdmly
dHVhbCB2b2lkIHByaW50U3RhY2tUcmFjZSAoOjpqYXZhOjppbzo6UHJpbnRXcml0ZXIgKik7CiAg
VGhyb3dhYmxlICgpOwogIFRocm93YWJsZSAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CiAgdmly
dHVhbCA6OmphdmE6Omxhbmc6OlN0cmluZyAqdG9TdHJpbmcgKCk7CnByaXZhdGU6CiAgdm9pZCBw
cmludFJhd1N0YWNrVHJhY2UgKDo6amF2YTo6aW86OlByaW50V3JpdGVyICopOwogIDo6amF2YTo6
bGFuZzo6U3RyaW5nICpkZXRhaWxNZXNzYWdlOwpwdWJsaWM6CiAgc3RhdGljIGpib29sZWFuIHRy
YWNlX2VuYWJsZWQ7CnByaXZhdGU6CiAgamJ5dGVBcnJheSBzdGFja1RyYWNlOwogIHN0YXRpYyBj
b25zdCBqbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gLTMwNDI2ODYwNTU2NTgwNDcyODVMTDsKcHVi
bGljOgoKICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cn07CiMgOSAiamF2YS9s
YW5nL0V4Y2VwdGlvbi5oIiAyCgpjbGFzcyA6OmphdmE6Omxhbmc6OkV4Y2VwdGlvbiA6IHB1Ymxp
YyA6OmphdmE6Omxhbmc6OlRocm93YWJsZQp7CnB1YmxpYzoKICBFeGNlcHRpb24gKCk7CiAgRXhj
ZXB0aW9uICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKcHVibGljOgogIHN0YXRpYyBjb25zdCBq
bG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gLTMzODc1MTY5OTMxMjQyMjk5NDhMTDsKcHVibGljOgoK
ICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cn07CiMgOSAiamF2YS9sYW5nL1J1
bnRpbWVFeGNlcHRpb24uaCIgMgoKY2xhc3MgOjpqYXZhOjpsYW5nOjpSdW50aW1lRXhjZXB0aW9u
IDogcHVibGljIDo6amF2YTo6bGFuZzo6RXhjZXB0aW9uCnsKcHVibGljOgogIFJ1bnRpbWVFeGNl
cHRpb24gKCk7CiAgUnVudGltZUV4Y2VwdGlvbiAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CnB1
YmxpYzoKICBzdGF0aWMgY29uc3Qgamxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC03MDM0ODk3MTkw
NzQ1NzY2OTM5TEw7CnB1YmxpYzoKCiAgc3RhdGljIDo6amF2YTo6bGFuZzo6Q2xhc3MgY2xhc3Mk
Owp9OwojIDkgImphdmEvbGFuZy9DbGFzc0Nhc3RFeGNlcHRpb24uaCIgMgoKY2xhc3MgOjpqYXZh
OjpsYW5nOjpDbGFzc0Nhc3RFeGNlcHRpb24gOiBwdWJsaWMgOjpqYXZhOjpsYW5nOjpSdW50aW1l
RXhjZXB0aW9uCnsKcHVibGljOgogIENsYXNzQ2FzdEV4Y2VwdGlvbiAoKTsKICBDbGFzc0Nhc3RF
eGNlcHRpb24gKDo6amF2YTo6bGFuZzo6U3RyaW5nICopOwpwdWJsaWM6CiAgc3RhdGljIGNvbnN0
IGpsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAtOTIyMzM2NTY1MTA3MDQ1ODUzMkxMOwpwdWJsaWM6
CgogIHN0YXRpYyA6OmphdmE6Omxhbmc6OkNsYXNzIGNsYXNzJDsKfTsKIyAyOSAiLi4vLi4vLi4v
Z2NjL2xpYmphdmEvaW50ZXJwcmV0LmNjIiAyCiMgMSAiamF2YS9sYW5nL1ZpcnR1YWxNYWNoaW5l
RXJyb3IuaCIgMQoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgojIDEgImphdmEvbGFuZy9FcnJvci5o
IiAxCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCgoKY2xhc3MgOjpqYXZhOjpsYW5nOjpFcnJvciA6
IHB1YmxpYyA6OmphdmE6Omxhbmc6OlRocm93YWJsZQp7CnB1YmxpYzoKICBFcnJvciAoKTsKICBF
cnJvciAoOjpqYXZhOjpsYW5nOjpTdHJpbmcgKik7CnB1YmxpYzoKICBzdGF0aWMgY29uc3Qgamxv
bmcgc2VyaWFsVmVyc2lvblVJRCA9IDQ5ODAxOTY1MDgyNzcyODAzNDJMTDsKcHVibGljOgoKICBz
dGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cn07CiMgOSAiamF2YS9sYW5nL1ZpcnR1
YWxNYWNoaW5lRXJyb3IuaCIgMgoKY2xhc3MgOjpqYXZhOjpsYW5nOjpWaXJ0dWFsTWFjaGluZUVy
cm9yIDogcHVibGljIDo6amF2YTo6bGFuZzo6RXJyb3IKewpwdWJsaWM6CiAgVmlydHVhbE1hY2hp
bmVFcnJvciAoKTsKICBWaXJ0dWFsTWFjaGluZUVycm9yICg6OmphdmE6Omxhbmc6OlN0cmluZyAq
KTsKcHVibGljOgogIHN0YXRpYyBjb25zdCBqbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gNDE2MTk4
MzkyNjU3MTU2ODY3MExMOwpwdWJsaWM6CgogIHN0YXRpYyA6OmphdmE6Omxhbmc6OkNsYXNzIGNs
YXNzJDsKfTsKIyAzMCAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvaW50ZXJwcmV0LmNjIiAyCiMgMSAi
amF2YS9sYW5nL0ludGVybmFsRXJyb3IuaCIgMQoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCmNs
YXNzIDo6amF2YTo6bGFuZzo6SW50ZXJuYWxFcnJvciA6IHB1YmxpYyA6OmphdmE6Omxhbmc6OlZp
cnR1YWxNYWNoaW5lRXJyb3IKewpwdWJsaWM6CiAgSW50ZXJuYWxFcnJvciAoKTsKICBJbnRlcm5h
bEVycm9yICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKcHVibGljOgogIHN0YXRpYyBjb25zdCBq
bG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gLTkwNjI1OTM0MTYxMjU1NjIzNjVMTDsKcHVibGljOgoK
ICBzdGF0aWMgOjpqYXZhOjpsYW5nOjpDbGFzcyBjbGFzcyQ7Cn07CiMgMzEgIi4uLy4uLy4uL2dj
Yy9saWJqYXZhL2ludGVycHJldC5jYyIgMgojIDEgImphdmEvbGFuZy9OdWxsUG9pbnRlckV4Y2Vw
dGlvbi5oIiAxCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCgoKY2xhc3MgOjpqYXZhOjpsYW5nOjpO
dWxsUG9pbnRlckV4Y2VwdGlvbiA6IHB1YmxpYyA6OmphdmE6Omxhbmc6OlJ1bnRpbWVFeGNlcHRp
b24KewpwdWJsaWM6CiAgTnVsbFBvaW50ZXJFeGNlcHRpb24gKCk7CiAgTnVsbFBvaW50ZXJFeGNl
cHRpb24gKDo6amF2YTo6bGFuZzo6U3RyaW5nICopOwpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IGps
b25nIHNlcmlhbFZlcnNpb25VSUQgPSA1MTYyNzEwMTgzMzg5MDI4NzkyTEw7CnB1YmxpYzoKCiAg
c3RhdGljIDo6amF2YTo6bGFuZzo6Q2xhc3MgY2xhc3MkOwp9OwojIDMyICIuLi8uLi8uLi9nY2Mv
bGliamF2YS9pbnRlcnByZXQuY2MiIDIKIyAxICJqYXZhL2xhbmcvQXJpdGhtZXRpY0V4Y2VwdGlv
bi5oIiAxCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCgoKY2xhc3MgOjpqYXZhOjpsYW5nOjpBcml0
aG1ldGljRXhjZXB0aW9uIDogcHVibGljIDo6amF2YTo6bGFuZzo6UnVudGltZUV4Y2VwdGlvbgp7
CnB1YmxpYzoKICBBcml0aG1ldGljRXhjZXB0aW9uICgpOwogIEFyaXRobWV0aWNFeGNlcHRpb24g
KDo6amF2YTo6bGFuZzo6U3RyaW5nICopOwpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IGpsb25nIHNl
cmlhbFZlcnNpb25VSUQgPSAyMjU2NDc3NTU4MzE0NDk2MDA3TEw7CnB1YmxpYzoKCiAgc3RhdGlj
IDo6amF2YTo6bGFuZzo6Q2xhc3MgY2xhc3MkOwp9OwojIDMzICIuLi8uLi8uLi9nY2MvbGliamF2
YS9pbnRlcnByZXQuY2MiIDIKIyAxICJqYXZhL2xhbmcvSW5jb21wYXRpYmxlQ2xhc3NDaGFuZ2VF
cnJvci5oIiAxCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCiMgMSAiamF2YS9sYW5nL0xpbmthZ2VF
cnJvci5oIiAxCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCgoKY2xhc3MgOjpqYXZhOjpsYW5nOjpM
aW5rYWdlRXJyb3IgOiBwdWJsaWMgOjpqYXZhOjpsYW5nOjpFcnJvcgp7CnB1YmxpYzoKICBMaW5r
YWdlRXJyb3IgKCk7CiAgTGlua2FnZUVycm9yICg6OmphdmE6Omxhbmc6OlN0cmluZyAqKTsKcHVi
bGljOgogIHN0YXRpYyBjb25zdCBqbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMzU3OTYwMDEwODE1
NzE2MDEyMkxMOwpwdWJsaWM6CgogIHN0YXRpYyA6OmphdmE6Omxhbmc6OkNsYXNzIGNsYXNzJDsK
fTsKIyA5ICJqYXZhL2xhbmcvSW5jb21wYXRpYmxlQ2xhc3NDaGFuZ2VFcnJvci5oIiAyCgpjbGFz
cyA6OmphdmE6Omxhbmc6OkluY29tcGF0aWJsZUNsYXNzQ2hhbmdlRXJyb3IgOiBwdWJsaWMgOjpq
YXZhOjpsYW5nOjpMaW5rYWdlRXJyb3IKewpwdWJsaWM6CiAgSW5jb21wYXRpYmxlQ2xhc3NDaGFu
Z2VFcnJvciAoKTsKICBJbmNvbXBhdGlibGVDbGFzc0NoYW5nZUVycm9yICg6OmphdmE6Omxhbmc6
OlN0cmluZyAqKTsKcHVibGljOgogIHN0YXRpYyBjb25zdCBqbG9uZyBzZXJpYWxWZXJzaW9uVUlE
ID0gLTQ5MTQ5NzU1MDM2NDI4MDIxMTlMTDsKcHVibGljOgoKICBzdGF0aWMgOjpqYXZhOjpsYW5n
OjpDbGFzcyBjbGFzcyQ7Cn07CiMgMzQgIi4uLy4uLy4uL2djYy9saWJqYXZhL2ludGVycHJldC5j
YyIgMgojIDEgIi4uLy4uLy4uL2djYy9saWJqYXZhL2luY2x1ZGUvamF2YS1pbnNucy5oIiAxCiMg
MTQgIi4uLy4uLy4uL2djYy9saWJqYXZhL2luY2x1ZGUvamF2YS1pbnNucy5oIgplbnVtIGphdmFf
b3Bjb2RlCnsKICBvcF9ub3AgPSAweDAwLAogIG9wX2Fjb25zdF9udWxsID0gMHgwMSwKICBvcF9p
Y29uc3RfbTEgPSAweDAyLAogIG9wX2ljb25zdF8wID0gMHgwMywKICBvcF9pY29uc3RfMSA9IDB4
MDQsCiAgb3BfaWNvbnN0XzIgPSAweDA1LAogIG9wX2ljb25zdF8zID0gMHgwNiwKICBvcF9pY29u
c3RfNCA9IDB4MDcsCiAgb3BfaWNvbnN0XzUgPSAweDA4LAogIG9wX2xjb25zdF8wID0gMHgwOSwK
ICBvcF9sY29uc3RfMSA9IDB4MGEsCiAgb3BfZmNvbnN0XzAgPSAweDBiLAogIG9wX2Zjb25zdF8x
ID0gMHgwYywKICBvcF9mY29uc3RfMiA9IDB4MGQsCiAgb3BfZGNvbnN0XzAgPSAweDBlLAogIG9w
X2Rjb25zdF8xID0gMHgwZiwKICBvcF9iaXB1c2ggPSAweDEwLAogIG9wX3NpcHVzaCA9IDB4MTEs
CiAgb3BfbGRjID0gMHgxMiwKICBvcF9sZGNfdyA9IDB4MTMsCiAgb3BfbGRjMl93ID0gMHgxNCwK
ICBvcF9pbG9hZCA9IDB4MTUsCiAgb3BfbGxvYWQgPSAweDE2LAogIG9wX2Zsb2FkID0gMHgxNywK
ICBvcF9kbG9hZCA9IDB4MTgsCiAgb3BfYWxvYWQgPSAweDE5LAogIG9wX2lsb2FkXzAgPSAweDFh
LAogIG9wX2lsb2FkXzEgPSAweDFiLAogIG9wX2lsb2FkXzIgPSAweDFjLAogIG9wX2lsb2FkXzMg
PSAweDFkLAogIG9wX2xsb2FkXzAgPSAweDFlLAogIG9wX2xsb2FkXzEgPSAweDFmLAogIG9wX2xs
b2FkXzIgPSAweDIwLAogIG9wX2xsb2FkXzMgPSAweDIxLAogIG9wX2Zsb2FkXzAgPSAweDIyLAog
IG9wX2Zsb2FkXzEgPSAweDIzLAogIG9wX2Zsb2FkXzIgPSAweDI0LAogIG9wX2Zsb2FkXzMgPSAw
eDI1LAogIG9wX2Rsb2FkXzAgPSAweDI2LAogIG9wX2Rsb2FkXzEgPSAweDI3LAogIG9wX2Rsb2Fk
XzIgPSAweDI4LAogIG9wX2Rsb2FkXzMgPSAweDI5LAogIG9wX2Fsb2FkXzAgPSAweDJhLAogIG9w
X2Fsb2FkXzEgPSAweDJiLAogIG9wX2Fsb2FkXzIgPSAweDJjLAogIG9wX2Fsb2FkXzMgPSAweDJk
LAogIG9wX2lhbG9hZCA9IDB4MmUsCiAgb3BfbGFsb2FkID0gMHgyZiwKICBvcF9mYWxvYWQgPSAw
eDMwLAogIG9wX2RhbG9hZCA9IDB4MzEsCiAgb3BfYWFsb2FkID0gMHgzMiwKICBvcF9iYWxvYWQg
PSAweDMzLAogIG9wX2NhbG9hZCA9IDB4MzQsCiAgb3Bfc2Fsb2FkID0gMHgzNSwKICBvcF9pc3Rv
cmUgPSAweDM2LAogIG9wX2xzdG9yZSA9IDB4MzcsCiAgb3BfZnN0b3JlID0gMHgzOCwKICBvcF9k
c3RvcmUgPSAweDM5LAogIG9wX2FzdG9yZSA9IDB4M2EsCiAgb3BfaXN0b3JlXzAgPSAweDNiLAog
IG9wX2lzdG9yZV8xID0gMHgzYywKICBvcF9pc3RvcmVfMiA9IDB4M2QsCiAgb3BfaXN0b3JlXzMg
PSAweDNlLAogIG9wX2xzdG9yZV8wID0gMHgzZiwKICBvcF9sc3RvcmVfMSA9IDB4NDAsCiAgb3Bf
bHN0b3JlXzIgPSAweDQxLAogIG9wX2xzdG9yZV8zID0gMHg0MiwKICBvcF9mc3RvcmVfMCA9IDB4
NDMsCiAgb3BfZnN0b3JlXzEgPSAweDQ0LAogIG9wX2ZzdG9yZV8yID0gMHg0NSwKICBvcF9mc3Rv
cmVfMyA9IDB4NDYsCiAgb3BfZHN0b3JlXzAgPSAweDQ3LAogIG9wX2RzdG9yZV8xID0gMHg0OCwK
ICBvcF9kc3RvcmVfMiA9IDB4NDksCiAgb3BfZHN0b3JlXzMgPSAweDRhLAogIG9wX2FzdG9yZV8w
ID0gMHg0YiwKICBvcF9hc3RvcmVfMSA9IDB4NGMsCiAgb3BfYXN0b3JlXzIgPSAweDRkLAogIG9w
X2FzdG9yZV8zID0gMHg0ZSwKICBvcF9pYXN0b3JlID0gMHg0ZiwKICBvcF9sYXN0b3JlID0gMHg1
MCwKICBvcF9mYXN0b3JlID0gMHg1MSwKICBvcF9kYXN0b3JlID0gMHg1MiwKICBvcF9hYXN0b3Jl
ID0gMHg1MywKICBvcF9iYXN0b3JlID0gMHg1NCwKICBvcF9jYXN0b3JlID0gMHg1NSwKICBvcF9z
YXN0b3JlID0gMHg1NiwKICBvcF9wb3AgPSAweDU3LAogIG9wX3BvcDIgPSAweDU4LAogIG9wX2R1
cCA9IDB4NTksCiAgb3BfZHVwX3gxID0gMHg1YSwKICBvcF9kdXBfeDIgPSAweDViLAogIG9wX2R1
cDIgPSAweDVjLAogIG9wX2R1cDJfeDEgPSAweDVkLAogIG9wX2R1cDJfeDIgPSAweDVlLAogIG9w
X3N3YXAgPSAweDVmLAogIG9wX2lhZGQgPSAweDYwLAogIG9wX2xhZGQgPSAweDYxLAogIG9wX2Zh
ZGQgPSAweDYyLAogIG9wX2RhZGQgPSAweDYzLAogIG9wX2lzdWIgPSAweDY0LAogIG9wX2xzdWIg
PSAweDY1LAogIG9wX2ZzdWIgPSAweDY2LAogIG9wX2RzdWIgPSAweDY3LAogIG9wX2ltdWwgPSAw
eDY4LAogIG9wX2xtdWwgPSAweDY5LAogIG9wX2ZtdWwgPSAweDZhLAogIG9wX2RtdWwgPSAweDZi
LAogIG9wX2lkaXYgPSAweDZjLAogIG9wX2xkaXYgPSAweDZkLAogIG9wX2ZkaXYgPSAweDZlLAog
IG9wX2RkaXYgPSAweDZmLAogIG9wX2lyZW0gPSAweDcwLAogIG9wX2xyZW0gPSAweDcxLAogIG9w
X2ZyZW0gPSAweDcyLAogIG9wX2RyZW0gPSAweDczLAogIG9wX2luZWcgPSAweDc0LAogIG9wX2xu
ZWcgPSAweDc1LAogIG9wX2ZuZWcgPSAweDc2LAogIG9wX2RuZWcgPSAweDc3LAogIG9wX2lzaGwg
PSAweDc4LAogIG9wX2xzaGwgPSAweDc5LAogIG9wX2lzaHIgPSAweDdhLAogIG9wX2xzaHIgPSAw
eDdiLAogIG9wX2l1c2hyID0gMHg3YywKICBvcF9sdXNociA9IDB4N2QsCiAgb3BfaWFuZCA9IDB4
N2UsCiAgb3BfbGFuZCA9IDB4N2YsCiAgb3BfaW9yID0gMHg4MCwKICBvcF9sb3IgPSAweDgxLAog
IG9wX2l4b3IgPSAweDgyLAogIG9wX2x4b3IgPSAweDgzLAogIG9wX2lpbmMgPSAweDg0LAogIG9w
X2kybCA9IDB4ODUsCiAgb3BfaTJmID0gMHg4NiwKICBvcF9pMmQgPSAweDg3LAogIG9wX2wyaSA9
IDB4ODgsCiAgb3BfbDJmID0gMHg4OSwKICBvcF9sMmQgPSAweDhhLAogIG9wX2YyaSA9IDB4OGIs
CiAgb3BfZjJsID0gMHg4YywKICBvcF9mMmQgPSAweDhkLAogIG9wX2QyaSA9IDB4OGUsCiAgb3Bf
ZDJsID0gMHg4ZiwKICBvcF9kMmYgPSAweDkwLAogIG9wX2kyYiA9IDB4OTEsCiAgb3BfaTJjID0g
MHg5MiwKICBvcF9pMnMgPSAweDkzLAogIG9wX2xjbXAgPSAweDk0LAogIG9wX2ZjbXBsID0gMHg5
NSwKICBvcF9mY21wZyA9IDB4OTYsCiAgb3BfZGNtcGwgPSAweDk3LAogIG9wX2RjbXBnID0gMHg5
OCwKICBvcF9pZmVxID0gMHg5OSwKICBvcF9pZm5lID0gMHg5YSwKICBvcF9pZmx0ID0gMHg5YiwK
ICBvcF9pZmdlID0gMHg5YywKICBvcF9pZmd0ID0gMHg5ZCwKICBvcF9pZmxlID0gMHg5ZSwKICBv
cF9pZl9pY21wZXEgPSAweDlmLAogIG9wX2lmX2ljbXBuZSA9IDB4YTAsCiAgb3BfaWZfaWNtcGx0
ID0gMHhhMSwKICBvcF9pZl9pY21wZ2UgPSAweGEyLAogIG9wX2lmX2ljbXBndCA9IDB4YTMsCiAg
b3BfaWZfaWNtcGxlID0gMHhhNCwKICBvcF9pZl9hY21wZXEgPSAweGE1LAogIG9wX2lmX2FjbXBu
ZSA9IDB4YTYsCiAgb3BfZ290byA9IDB4YTcsCiAgb3BfanNyID0gMHhhOCwKICBvcF9yZXQgPSAw
eGE5LAogIG9wX3RhYmxlc3dpdGNoID0gMHhhYSwKICBvcF9sb29rdXBzd2l0Y2ggPSAweGFiLAog
IG9wX2lyZXR1cm4gPSAweGFjLAogIG9wX2xyZXR1cm4gPSAweGFkLAogIG9wX2ZyZXR1cm4gPSAw
eGFlLAogIG9wX2RyZXR1cm4gPSAweGFmLAogIG9wX2FyZXR1cm4gPSAweGIwLAogIG9wX3JldHVy
biA9IDB4YjEsCiAgb3BfZ2V0c3RhdGljID0gMHhiMiwKICBvcF9wdXRzdGF0aWMgPSAweGIzLAog
IG9wX2dldGZpZWxkID0gMHhiNCwKICBvcF9wdXRmaWVsZCA9IDB4YjUsCiAgb3BfaW52b2tldmly
dHVhbCA9IDB4YjYsCiAgb3BfaW52b2tlc3BlY2lhbCA9IDB4YjcsCiAgb3BfaW52b2tlc3RhdGlj
ID0gMHhiOCwKICBvcF9pbnZva2VpbnRlcmZhY2UgPSAweGI5LAogIG9wX3h4eHVudXNlZHh4eDEg
PSAweGJhLAogIG9wX25ldyA9IDB4YmIsCiAgb3BfbmV3YXJyYXkgPSAweGJjLAogIG9wX2FuZXdh
cnJheSA9IDB4YmQsCiAgb3BfYXJyYXlsZW5ndGggPSAweGJlLAogIG9wX2F0aHJvdyA9IDB4YmYs
CiAgb3BfY2hlY2tjYXN0ID0gMHhjMCwKICBvcF9pbnN0YW5jZW9mID0gMHhjMSwKICBvcF9tb25p
dG9yZW50ZXIgPSAweGMyLAogIG9wX21vbml0b3JleGl0ID0gMHhjMywKICBvcF93aWRlID0gMHhj
NCwKICBvcF9tdWx0aWFuZXdhcnJheSA9IDB4YzUsCiAgb3BfaWZudWxsID0gMHhjNiwKICBvcF9p
Zm5vbm51bGwgPSAweGM3LAogIG9wX2dvdG9fdyA9IDB4YzgsCiAgb3BfanNyX3cgPSAweGM5LAoK
CgogIG9wX3B1dGZpZWxkXzEgPSAweGNhLAogIG9wX3B1dGZpZWxkXzIgPSAweGNiLAogIG9wX3B1
dGZpZWxkXzQgPSAweGNjLAogIG9wX3B1dGZpZWxkXzggPSAweGNkLAogIG9wX3B1dGZpZWxkX2Eg
PSAweGNlLAoKICBvcF9wdXRzdGF0aWNfMSA9IDB4Y2YsCiAgb3BfcHV0c3RhdGljXzIgPSAweGQw
LAogIG9wX3B1dHN0YXRpY180ID0gMHhkMSwKICBvcF9wdXRzdGF0aWNfOCA9IDB4ZDIsCiAgb3Bf
cHV0c3RhdGljX2EgPSAweGQzLAoKICBvcF9nZXRmaWVsZF8xID0gMHhkNCwKICBvcF9nZXRmaWVs
ZF8ycyA9IDB4ZDUsCiAgb3BfZ2V0ZmllbGRfMnUgPSAweGQ2LAogIG9wX2dldGZpZWxkXzQgPSAw
eGQ3LAogIG9wX2dldGZpZWxkXzggPSAweGQ4LAogIG9wX2dldGZpZWxkX2EgPSAweGQ5LAoKICBv
cF9nZXRzdGF0aWNfMSA9IDB4ZGEsCiAgb3BfZ2V0c3RhdGljXzJzID0gMHhkYiwKICBvcF9nZXRz
dGF0aWNfMnUgPSAweGRjLAogIG9wX2dldHN0YXRpY180ID0gMHhkZCwKICBvcF9nZXRzdGF0aWNf
OCA9IDB4ZGUsCiAgb3BfZ2V0c3RhdGljX2EgPSAweGRmCn07CiMgMzUgIi4uLy4uLy4uL2djYy9s
aWJqYXZhL2ludGVycHJldC5jYyIgMgojIDEgImluY2x1ZGUvamF2YS1zaWduYWwuaCIgMQojIDE5
ICJpbmNsdWRlL2phdmEtc2lnbmFsLmgiCiMgMSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAxIDMK
IyAzMSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCmV4dGVybiAiQyIgewoKIyAxICIvdXNyL2lu
Y2x1ZGUvYml0cy9zaWdzZXQuaCIgMSAzCiMgMTAzICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQu
aCIgMwpleHRlcm4gaW50IF9fc2lnaXNtZW1iZXIgKF9fY29uc3QgX19zaWdzZXRfdCAqLCBpbnQp
OwpleHRlcm4gaW50IF9fc2lnYWRkc2V0IChfX3NpZ3NldF90ICosIGludCk7CmV4dGVybiBpbnQg
X19zaWdkZWxzZXQgKF9fc2lnc2V0X3QgKiwgaW50KTsKIyAxMTcgIi91c3IvaW5jbHVkZS9iaXRz
L3NpZ3NldC5oIiAzCmV4dGVybiBfX2lubGluZSBpbnQgX19zaWdpc21lbWJlciAoX19jb25zdCBf
X3NpZ3NldF90ICpfX3NldCwgaW50IF9fc2lnKSB7IHVuc2lnbmVkIGxvbmcgaW50IF9fbWFzayA9
ICgoKHVuc2lnbmVkIGxvbmcgaW50KSAxKSA8PCAoKChfX3NpZykgLSAxKSAlICg4ICogc2l6ZW9m
ICh1bnNpZ25lZCBsb25nIGludCkpKSk7IHVuc2lnbmVkIGxvbmcgaW50IF9fd29yZCA9ICgoKF9f
c2lnKSAtIDEpIC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpOyByZXR1cm4gKF9f
c2V0LT5fX3ZhbFtfX3dvcmRdICYgX19tYXNrKSA/IDEgOiAwOyB9CmV4dGVybiBfX2lubGluZSBp
bnQgX19zaWdhZGRzZXQgKCBfX3NpZ3NldF90ICpfX3NldCwgaW50IF9fc2lnKSB7IHVuc2lnbmVk
IGxvbmcgaW50IF9fbWFzayA9ICgoKHVuc2lnbmVkIGxvbmcgaW50KSAxKSA8PCAoKChfX3NpZykg
LSAxKSAlICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGludCkpKSk7IHVuc2lnbmVkIGxvbmcg
aW50IF9fd29yZCA9ICgoKF9fc2lnKSAtIDEpIC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcg
aW50KSkpOyByZXR1cm4gKChfX3NldC0+X192YWxbX193b3JkXSB8PSBfX21hc2spLCAwKTsgfQpl
eHRlcm4gX19pbmxpbmUgaW50IF9fc2lnZGVsc2V0ICggX19zaWdzZXRfdCAqX19zZXQsIGludCBf
X3NpZykgeyB1bnNpZ25lZCBsb25nIGludCBfX21hc2sgPSAoKCh1bnNpZ25lZCBsb25nIGludCkg
MSkgPDwgKCgoX19zaWcpIC0gMSkgJSAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSkp
OyB1bnNpZ25lZCBsb25nIGludCBfX3dvcmQgPSAoKChfX3NpZykgLSAxKSAvICg4ICogc2l6ZW9m
ICh1bnNpZ25lZCBsb25nIGludCkpKTsgcmV0dXJuICgoX19zZXQtPl9fdmFsW19fd29yZF0gJj0g
fl9fbWFzayksIDApOyB9CiMgMzQgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMiAzCgoKCgoKCgp0
eXBlZGVmIF9fc2lnX2F0b21pY190IHNpZ19hdG9taWNfdDsKIyA1NiAiL3Vzci9pbmNsdWRlL3Np
Z25hbC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnbnVtLmgiIDEgMwojIDU3ICIvdXNy
L2luY2x1ZGUvc2lnbmFsLmgiIDIgMwoKCgp0eXBlZGVmIF9fcGlkX3QgcGlkX3Q7CgoKCnR5cGVk
ZWYgX191aWRfdCB1aWRfdDsKCgoKCgoKdHlwZWRlZiB2b2lkICgqX19zaWdoYW5kbGVyX3QpIChp
bnQpOwoKCgoKZXh0ZXJuIF9fc2lnaGFuZGxlcl90IF9fc3lzdl9zaWduYWwgKGludCBfX3NpZywg
X19zaWdoYW5kbGVyX3QgX19oYW5kbGVyKSB0aHJvdyAoKTsKCgpleHRlcm4gX19zaWdoYW5kbGVy
X3Qgc3lzdl9zaWduYWwgKGludCBfX3NpZywgX19zaWdoYW5kbGVyX3QgX19oYW5kbGVyKSB0aHJv
dyAoKTsKCgoKCgoKZXh0ZXJuIF9fc2lnaGFuZGxlcl90IHNpZ25hbCAoaW50IF9fc2lnLCBfX3Np
Z2hhbmRsZXJfdCBfX2hhbmRsZXIpIHRocm93ICgpOwojIDEwMSAiL3Vzci9pbmNsdWRlL3NpZ25h
bC5oIiAzCmV4dGVybiBfX3NpZ2hhbmRsZXJfdCBic2Rfc2lnbmFsIChpbnQgX19zaWcsIF9fc2ln
aGFuZGxlcl90IF9faGFuZGxlcikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQga2lsbCAoX19w
aWRfdCBfX3BpZCwgaW50IF9fc2lnKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBraWxscGcg
KF9fcGlkX3QgX19wZ3JwLCBpbnQgX19zaWcpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHJhaXNl
IChpbnQgX19zaWcpIHRocm93ICgpOwoKCgpleHRlcm4gX19zaWdoYW5kbGVyX3Qgc3NpZ25hbCAo
aW50IF9fc2lnLCBfX3NpZ2hhbmRsZXJfdCBfX2hhbmRsZXIpIHRocm93ICgpOwpleHRlcm4gaW50
IGdzaWduYWwgKGludCBfX3NpZykgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBwc2lnbmFsIChp
bnQgX19zaWcsIF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKTsKIyAxMzggIi91c3IvaW5jbHVk
ZS9zaWduYWwuaCIgMwpleHRlcm4gaW50IF9fc2lncGF1c2UgKGludCBfX3NpZ19vcl9tYXNrLCBp
bnQgX19pc19zaWcpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzaWdwYXVzZSAoaW50IF9fbWFz
aykgdGhyb3cgKCk7CiMgMTYzICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKZXh0ZXJuIGludCBz
aWdibG9jayAoaW50IF9fbWFzaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzaWdzZXRtYXNrIChp
bnQgX19tYXNrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNpZ2dldG1hc2sgKHZvaWQpIHRocm93
ICgpOwojIDE3OCAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCnR5cGVkZWYgX19zaWdoYW5kbGVy
X3Qgc2lnaGFuZGxlcl90OwoKCgoKdHlwZWRlZiBfX3NpZ2hhbmRsZXJfdCBzaWdfdDsKIyAxOTQg
Ii91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ2luZm8u
aCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ2luZm8uaCIgMwp0eXBlZGVmIHVuaW9u
IHNpZ3ZhbAogIHsKICAgIGludCBzaXZhbF9pbnQ7CiAgICB2b2lkICpzaXZhbF9wdHI7CiAgfSBz
aWd2YWxfdDsKCgoKCnR5cGVkZWYgc3RydWN0IHNpZ2luZm8KICB7CiAgICBpbnQgc2lfc2lnbm87
CiAgICBpbnQgc2lfZXJybm87CgogICAgaW50IHNpX2NvZGU7CgogICAgdW5pb24KICAgICAgewog
ICAgICAgIGludCBfcGFkWygoMTI4IC8gc2l6ZW9mIChpbnQpKSAtIDMpXTsKCgogICAgICAgIHN0
cnVjdAogICAgICAgICAgewogICAgICAgICAgICBfX3BpZF90IHNpX3BpZDsKICAgICAgICAgICAg
X191aWRfdCBzaV91aWQ7CiAgICAgICAgICB9IF9raWxsOwoKCiAgICAgICAgc3RydWN0CiAgICAg
ICAgICB7CiAgICAgICAgICAgIHVuc2lnbmVkIGludCBfdGltZXIxOwogICAgICAgICAgICB1bnNp
Z25lZCBpbnQgX3RpbWVyMjsKICAgICAgICAgIH0gX3RpbWVyOwoKCiAgICAgICAgc3RydWN0CiAg
ICAgICAgICB7CiAgICAgICAgICAgIF9fcGlkX3Qgc2lfcGlkOwogICAgICAgICAgICBfX3VpZF90
IHNpX3VpZDsKICAgICAgICAgICAgc2lndmFsX3Qgc2lfc2lndmFsOwogICAgICAgICAgfSBfcnQ7
CgoKICAgICAgICBzdHJ1Y3QKICAgICAgICAgIHsKICAgICAgICAgICAgX19waWRfdCBzaV9waWQ7
CiAgICAgICAgICAgIF9fdWlkX3Qgc2lfdWlkOwogICAgICAgICAgICBpbnQgc2lfc3RhdHVzOwog
ICAgICAgICAgICBfX2Nsb2NrX3Qgc2lfdXRpbWU7CiAgICAgICAgICAgIF9fY2xvY2tfdCBzaV9z
dGltZTsKICAgICAgICAgIH0gX3NpZ2NobGQ7CgoKICAgICAgICBzdHJ1Y3QKICAgICAgICAgIHsK
ICAgICAgICAgICAgdm9pZCAqc2lfYWRkcjsKICAgICAgICAgIH0gX3NpZ2ZhdWx0OwoKCiAgICAg
ICAgc3RydWN0CiAgICAgICAgICB7CiAgICAgICAgICAgIGludCBzaV9iYW5kOwogICAgICAgICAg
ICBpbnQgc2lfZmQ7CiAgICAgICAgICB9IF9zaWdwb2xsOwogICAgICB9IF9zaWZpZWxkczsKICB9
IHNpZ2luZm9fdDsKIyAxMTMgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ2luZm8uaCIgMwplbnVtCnsK
ICBTSV9TSUdJTyA9IC01LAoKICBTSV9BU1lOQ0lPLAoKICBTSV9NRVNHUSwKCiAgU0lfVElNRVIs
CgogIFNJX1FVRVVFLAoKICBTSV9VU0VSCgp9OwoKCgplbnVtCnsKICBJTExfSUxMT1BDID0gMSwK
CiAgSUxMX0lMTE9QTiwKCiAgSUxMX0lMTEFEUiwKCiAgSUxMX0lMTFRSUCwKCiAgSUxMX1BSVk9Q
QywKCiAgSUxMX1BSVlJFRywKCiAgSUxMX0NPUFJPQywKCiAgSUxMX0JBRFNUSwoKfTsKCgplbnVt
CnsKICBGUEVfSU5URElWID0gMSwKCiAgRlBFX0lOVE9WRiwKCiAgRlBFX0ZMVERJViwKCiAgRlBF
X0ZMVE9WRiwKCiAgRlBFX0ZMVFVORCwKCiAgRlBFX0ZMVFJFUywKCiAgRlBFX0ZMVElOViwKCiAg
RlBFX0ZMVFNVQgoKfTsKCgplbnVtCnsKICBTRUdWX01BUEVSUiA9IDEsCgogIFNFR1ZfQUNDRVJS
Cgp9OwoKCmVudW0KewogIEJVU19BRFJBTE4gPSAxLAoKICBCVVNfQURSRVJSLAoKICBCVVNfT0JK
RVJSCgp9OwoKCmVudW0KewogIFRSQVBfQlJLUFQgPSAxLAoKICBUUkFQX1RSQUNFCgp9OwoKCmVu
dW0KewogIENMRF9FWElURUQgPSAxLAoKICBDTERfS0lMTEVELAoKICBDTERfRFVNUEVELAoKICBD
TERfVFJBUFBFRCwKCiAgQ0xEX1NUT1BQRUQsCgogIENMRF9DT05USU5VRUQKCn07CgoKZW51bQp7
CiAgUE9MTF9JTiA9IDEsCgogIFBPTExfT1VULAoKICBQT0xMX01TRywKCiAgUE9MTF9FUlIsCgog
IFBPTExfUFJJLAoKICBQT0xMX0hVUAoKfTsKIyAyNDYgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ2lu
Zm8uaCIgMwp0eXBlZGVmIHN0cnVjdCBzaWdldmVudAogIHsKICAgIHNpZ3ZhbF90IHNpZ2V2X3Zh
bHVlOwogICAgaW50IHNpZ2V2X3NpZ25vOwogICAgaW50IHNpZ2V2X25vdGlmeTsKCiAgICB1bmlv
bgogICAgICB7CiAgICAgICAgaW50IF9wYWRbKCg2NCAvIHNpemVvZiAoaW50KSkgLSAzKV07Cgog
ICAgICAgIHN0cnVjdAogICAgICAgICAgewogICAgICAgICAgICB2b2lkICgqX2Z1bmN0aW9uKSAo
c2lndmFsX3QpOwogICAgICAgICAgICB2b2lkICpfYXR0cmlidXRlOwogICAgICAgICAgfSBfc2ln
ZXZfdGhyZWFkOwogICAgICB9IF9zaWdldl91bjsKICB9IHNpZ2V2ZW50X3Q7CgoKCgoKCmVudW0K
ewogIFNJR0VWX1NJR05BTCA9IDAsCgogIFNJR0VWX05PTkUsCgogIFNJR0VWX1RIUkVBRAoKfTsK
IyAxOTUgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMiAzCgoKCmV4dGVybiBpbnQgc2lnZW1wdHlz
ZXQgKHNpZ3NldF90ICpfX3NldCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzaWdmaWxsc2V0IChz
aWdzZXRfdCAqX19zZXQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2lnYWRkc2V0IChzaWdzZXRf
dCAqX19zZXQsIGludCBfX3NpZ25vKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNpZ2RlbHNldCAo
c2lnc2V0X3QgKl9fc2V0LCBpbnQgX19zaWdubykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzaWdp
c21lbWJlciAoX19jb25zdCBzaWdzZXRfdCAqX19zZXQsIGludCBfX3NpZ25vKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGludCBzaWdpc2VtcHR5c2V0IChfX2NvbnN0IHNpZ3NldF90ICpfX3NldCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBzaWdhbmRzZXQgKHNpZ3NldF90ICpfX3NldCwgX19jb25zdCBz
aWdzZXRfdCAqX19sZWZ0LCBfX2NvbnN0IHNpZ3NldF90ICpfX3JpZ2h0KSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGludCBzaWdvcnNldCAoc2lnc2V0X3QgKl9fc2V0LCBfX2NvbnN0IHNpZ3NldF90ICpf
X2xlZnQsIF9fY29uc3Qgc2lnc2V0X3QgKl9fcmlnaHQpIHRocm93ICgpOwoKCgoKCiMgMSAiL3Vz
ci9pbmNsdWRlL2JpdHMvc2lnYWN0aW9uLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9z
aWdhY3Rpb24uaCIgMwpzdHJ1Y3Qgc2lnYWN0aW9uCiAgewoKCiAgICB1bmlvbgogICAgICB7Cgog
ICAgICAgIF9fc2lnaGFuZGxlcl90IHNhX2hhbmRsZXI7CgogICAgICAgIHZvaWQgKCpzYV9zaWdh
Y3Rpb24pIChpbnQsIHNpZ2luZm9fdCAqLCB2b2lkICopOwogICAgICB9CiAgICBfX3NpZ2FjdGlv
bl9oYW5kbGVyOwoKCgoKCgoKICAgIF9fc2lnc2V0X3Qgc2FfbWFzazsKCgogICAgaW50IHNhX2Zs
YWdzOwoKCiAgICB2b2lkICgqc2FfcmVzdG9yZXIpICh2b2lkKTsKICB9OwojIDIyOCAiL3Vzci9p
bmNsdWRlL3NpZ25hbC5oIiAyIDMKCgpleHRlcm4gaW50IHNpZ3Byb2NtYXNrIChpbnQgX19ob3cs
IF9fY29uc3Qgc2lnc2V0X3QgKl9fc2V0LCBzaWdzZXRfdCAqX19vc2V0KSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBpbnQgc2lnc3VzcGVuZCAoX19jb25zdCBzaWdzZXRfdCAqX19zZXQpIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgX19zaWdhY3Rpb24gKGludCBfX3NpZywgX19jb25zdCBzdHJ1Y3Qgc2ln
YWN0aW9uICpfX2FjdCwgc3RydWN0IHNpZ2FjdGlvbiAqX19vYWN0KSB0aHJvdyAoKTsKCmV4dGVy
biBpbnQgc2lnYWN0aW9uIChpbnQgX19zaWcsIF9fY29uc3Qgc3RydWN0IHNpZ2FjdGlvbiAqX19h
Y3QsIHN0cnVjdCBzaWdhY3Rpb24gKl9fb2FjdCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc2ln
cGVuZGluZyAoc2lnc2V0X3QgKl9fc2V0KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzaWd3YWl0
IChfX2NvbnN0IHNpZ3NldF90ICpfX3NldCwgaW50ICpfX3NpZykgdGhyb3cgKCk7CgoKCmV4dGVy
biBpbnQgc2lnd2FpdGluZm8gKF9fY29uc3Qgc2lnc2V0X3QgKl9fc2V0LCBzaWdpbmZvX3QgKl9f
aW5mbykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc2lndGltZWR3YWl0IChfX2NvbnN0IHNpZ3Nl
dF90ICpfX3NldCwgc2lnaW5mb190ICpfX2luZm8sIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpf
X3RpbWVvdXQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzaWdxdWV1ZSAoX19waWRfdCBfX3Bp
ZCwgaW50IF9fc2lnLCBfX2NvbnN0IHVuaW9uIHNpZ3ZhbCBfX3ZhbCkgdGhyb3cgKCk7CiMgMjcx
ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBf
c3lzX3NpZ2xpc3RbNjRdOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IHN5c19zaWdsaXN0
WzY0XTsKCgpzdHJ1Y3Qgc2lndmVjCiAgewogICAgX19zaWdoYW5kbGVyX3Qgc3ZfaGFuZGxlcjsK
ICAgIGludCBzdl9tYXNrOwoKICAgIGludCBzdl9mbGFnczsKCiAgfTsKIyAyOTUgIi91c3IvaW5j
bHVkZS9zaWduYWwuaCIgMwpleHRlcm4gaW50IHNpZ3ZlYyAoaW50IF9fc2lnLCBfX2NvbnN0IHN0
cnVjdCBzaWd2ZWMgKl9fdmVjLCBzdHJ1Y3Qgc2lndmVjICpfX292ZWMpIHRocm93ICgpOwoKCgoK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWdjb250ZXh0LmgiIDEgMwojIDI4ICIvdXNyL2luY2x1
ZGUvYml0cy9zaWdjb250ZXh0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQu
aCIgMSAzCiMgMTIgIi91c3IvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oIiAzCnN0cnVjdCBfZnBy
ZWcgewogICAgICAgIHVuc2lnbmVkIHNob3J0IHNpZ25pZmljYW5kWzRdOwogICAgICAgIHVuc2ln
bmVkIHNob3J0IGV4cG9uZW50Owp9OwoKc3RydWN0IF9mcHN0YXRlIHsKICAgICAgICB1bnNpZ25l
ZCBsb25nIGN3LAogICAgICAgICAgICAgICAgICAgICAgICBzdywKICAgICAgICAgICAgICAgICAg
ICAgICAgdGFnLAogICAgICAgICAgICAgICAgICAgICAgICBpcG9mZiwKICAgICAgICAgICAgICAg
ICAgICAgICAgY3NzZWwsCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFvZmYsCiAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFzZWw7CiAgICAgICAgc3RydWN0IF9mcHJlZyBfc3RbOF07CiAg
ICAgICAgdW5zaWduZWQgbG9uZyBzdGF0dXM7Cn07CgpzdHJ1Y3Qgc2lnY29udGV4dCB7CiAgICAg
ICAgdW5zaWduZWQgc2hvcnQgZ3MsIF9fZ3NoOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGZzLCBf
X2ZzaDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBlcywgX19lc2g7CiAgICAgICAgdW5zaWduZWQg
c2hvcnQgZHMsIF9fZHNoOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWRpOwogICAgICAgIHVuc2ln
bmVkIGxvbmcgZXNpOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWJwOwogICAgICAgIHVuc2lnbmVk
IGxvbmcgZXNwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWJ4OwogICAgICAgIHVuc2lnbmVkIGxv
bmcgZWR4OwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWN4OwogICAgICAgIHVuc2lnbmVkIGxvbmcg
ZWF4OwogICAgICAgIHVuc2lnbmVkIGxvbmcgdHJhcG5vOwogICAgICAgIHVuc2lnbmVkIGxvbmcg
ZXJyOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWlwOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGNz
LCBfX2NzaDsKICAgICAgICB1bnNpZ25lZCBsb25nIGVmbGFnczsKICAgICAgICB1bnNpZ25lZCBs
b25nIGVzcF9hdF9zaWduYWw7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3MsIF9fc3NoOwogICAg
ICAgIHN0cnVjdCBfZnBzdGF0ZSAqIGZwc3RhdGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBvbGRt
YXNrOwogICAgICAgIHVuc2lnbmVkIGxvbmcgY3IyOwp9OwojIDI5ICIvdXNyL2luY2x1ZGUvYml0
cy9zaWdjb250ZXh0LmgiIDIgMwojIDMwMSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAyIDMKCgpl
eHRlcm4gaW50IHNpZ3JldHVybiAoc3RydWN0IHNpZ2NvbnRleHQgKl9fc2NwKSB0aHJvdyAoKTsK
IyAzMTMgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwpleHRlcm4gaW50IHNpZ2ludGVycnVwdCAo
aW50IF9fc2lnLCBpbnQgX19pbnRlcnJ1cHQpIHRocm93ICgpOwoKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy9zaWdzdGFjay5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc3RhY2suaCIg
MwpzdHJ1Y3Qgc2lnc3RhY2sKICB7CiAgICB2b2lkICogc3Nfc3A7CiAgICBpbnQgc3Nfb25zdGFj
azsKICB9OwoKCgplbnVtCnsKICBTU19PTlNUQUNLID0gMSwKCiAgU1NfRElTQUJMRQoKfTsKIyA1
MCAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc3RhY2suaCIgMwp0eXBlZGVmIHN0cnVjdCBzaWdhbHRz
dGFjawogIHsKICAgIHZvaWQgKiBzc19zcDsKICAgIGludCBzc19mbGFnczsKICAgIHNpemVfdCBz
c19zaXplOwogIH0gc3RhY2tfdDsKIyAzMTYgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMiAzCgoj
IDEgIi91c3IvaW5jbHVkZS91Y29udGV4dC5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3Vjb250
ZXh0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3Vjb250ZXh0LmgiIDEgMwojIDI3ICIvdXNy
L2luY2x1ZGUvc3lzL3Vjb250ZXh0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWdjb250
ZXh0LmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvc3lzL3Vjb250ZXh0LmgiIDIgMwoKCgojIDEg
Ii91c3IvaW5jbHVkZS9zeXMvdXNlci5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N5cy91c2Vy
LmgiIDMKc3RydWN0IHVzZXJfZnByZWdzX3N0cnVjdAp7CiAgbG9uZyBjd2Q7CiAgbG9uZyBzd2Q7
CiAgbG9uZyB0d2Q7CiAgbG9uZyBmaXA7CiAgbG9uZyBmY3M7CiAgbG9uZyBmb287CiAgbG9uZyBm
b3M7CiAgbG9uZyBzdF9zcGFjZSBbMjBdOwp9OwoKc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QKewog
IGxvbmcgZWJ4OwogIGxvbmcgZWN4OwogIGxvbmcgZWR4OwogIGxvbmcgZXNpOwogIGxvbmcgZWRp
OwogIGxvbmcgZWJwOwogIGxvbmcgZWF4OwogIGxvbmcgeGRzOwogIGxvbmcgeGVzOwogIGxvbmcg
eGZzOwogIGxvbmcgeGdzOwogIGxvbmcgb3JpZ19lYXg7CiAgbG9uZyBlaXA7CiAgbG9uZyB4Y3M7
CiAgbG9uZyBlZmxhZ3M7CiAgbG9uZyBlc3A7CiAgbG9uZyB4c3M7Cn07CgpzdHJ1Y3QgdXNlcgp7
CiAgc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QgcmVnczsKICBpbnQgdV9mcHZhbGlkOwogIHN0cnVj
dCB1c2VyX2ZwcmVnc19zdHJ1Y3QgaTM4NzsKICB1bnNpZ25lZCBsb25nIGludCB1X3RzaXplOwog
IHVuc2lnbmVkIGxvbmcgaW50IHVfZHNpemU7CiAgdW5zaWduZWQgbG9uZyBpbnQgdV9zc2l6ZTsK
ICB1bnNpZ25lZCBsb25nIHN0YXJ0X2NvZGU7CiAgdW5zaWduZWQgbG9uZyBzdGFydF9zdGFjazsK
ICBsb25nIGludCBzaWduYWw7CiAgaW50IHJlc2VydmVkOwogIHN0cnVjdCB1c2VyX3JlZ3Nfc3Ry
dWN0KiB1X2FyMDsKICBzdHJ1Y3QgdXNlcl9mcHJlZ3Nfc3RydWN0KiB1X2Zwc3RhdGU7CiAgdW5z
aWduZWQgbG9uZyBtYWdpYzsKICBjaGFyIHVfY29tbSBbMzJdOwogIGludCB1X2RlYnVncmVnIFs4
XTsKfTsKIyAzMiAiL3Vzci9pbmNsdWRlL3N5cy91Y29udGV4dC5oIiAyIDMKCgoKdHlwZWRlZiBp
bnQgZ3JlZ190OwoKCgoKCnR5cGVkZWYgZ3JlZ190IGdyZWdzZXRfdFsxOV07CgoKCmVudW0Kewog
IEdTID0gMCwKCiAgRlMsCgogIEVTLAoKICBEUywKCiAgRURJLAoKICBFU0ksCgogIEVCUCwKCiAg
RVNQLAoKICBFQlgsCgogIEVEWCwKCiAgRUNYLAoKICBFQVgsCgogIFRSQVBOTywKCiAgRVJSLAoK
ICBFSVAsCgogIENTLAoKICBFRkwsCgogIFVFU1AsCgogIFNTCgp9OwoKCgpzdHJ1Y3QgX2xpYmNf
ZnByZWcKewogIHVuc2lnbmVkIHNob3J0IGludCBzaWduaWZpY2FuZFs0XTsKICB1bnNpZ25lZCBz
aG9ydCBpbnQgZXhwb25lbnQ7Cn07CgpzdHJ1Y3QgX2xpYmNfZnBzdGF0ZQp7CiAgdW5zaWduZWQg
bG9uZyBpbnQgY3c7CiAgdW5zaWduZWQgbG9uZyBpbnQgc3c7CiAgdW5zaWduZWQgbG9uZyBpbnQg
dGFnOwogIHVuc2lnbmVkIGxvbmcgaW50IGlwb2ZmOwogIHVuc2lnbmVkIGxvbmcgaW50IGNzc2Vs
OwogIHVuc2lnbmVkIGxvbmcgaW50IGRhdGFvZmY7CiAgdW5zaWduZWQgbG9uZyBpbnQgZGF0YXNl
bDsKICBzdHJ1Y3QgX2xpYmNfZnByZWcgX3N0WzhdOwogIHVuc2lnbmVkIGxvbmcgaW50IHN0YXR1
czsKfTsKCgp0eXBlZGVmIHN0cnVjdCBfbGliY19mcHN0YXRlICpmcHJlZ3NldF90OwoKCnR5cGVk
ZWYgc3RydWN0CiAgewogICAgZ3JlZ3NldF90IGdyZWdzOwoKCiAgICBmcHJlZ3NldF90IGZwcmVn
czsKICAgIHVuc2lnbmVkIGxvbmcgaW50IG9sZG1hc2s7CiAgICB1bnNpZ25lZCBsb25nIGludCBj
cjI7CiAgfSBtY29udGV4dF90OwoKCnR5cGVkZWYgc3RydWN0IHVjb250ZXh0CiAgewogICAgdW5z
aWduZWQgbG9uZyBpbnQgdWNfZmxhZ3M7CiAgICBzdHJ1Y3QgdWNvbnRleHQgKnVjX2xpbms7CiAg
ICBzdGFja190IHVjX3N0YWNrOwogICAgbWNvbnRleHRfdCB1Y19tY29udGV4dDsKICAgIF9fc2ln
c2V0X3QgdWNfc2lnbWFzazsKICAgIHN0cnVjdCBfbGliY19mcHN0YXRlIF9fZnByZWdzX21lbTsK
ICB9IHVjb250ZXh0X3Q7CiMgMjggIi91c3IvaW5jbHVkZS91Y29udGV4dC5oIiAyIDMKCmV4dGVy
biAiQyIgewoKCmV4dGVybiBpbnQgZ2V0Y29udGV4dCAodWNvbnRleHRfdCAqX191Y3ApIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgc2V0Y29udGV4dCAoX19jb25zdCB1Y29udGV4dF90ICpfX3VjcCkg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc3dhcGNvbnRleHQgKHVjb250ZXh0X3QgKl9fb3VjcCwg
X19jb25zdCB1Y29udGV4dF90ICpfX3VjcCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gdm9pZCBt
YWtlY29udGV4dCAodWNvbnRleHRfdCAqX191Y3AsIHZvaWQgKCpfX2Z1bmMpICh2b2lkKSwgaW50
IF9fYXJnYywgLi4uKSB0aHJvdyAoKTsKCgp9CiMgMzE4ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgi
IDIgMwoKCgoKCmV4dGVybiBpbnQgc2lnc3RhY2sgKHN0cnVjdCBzaWdzdGFjayAqX19zcywgc3Ry
dWN0IHNpZ3N0YWNrICpfX29zcykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc2lnYWx0c3RhY2sg
KF9fY29uc3Qgc3RydWN0IHNpZ2FsdHN0YWNrICpfX3NzLCBzdHJ1Y3Qgc2lnYWx0c3RhY2sgKl9f
b3NzKSB0aHJvdyAoKTsKIyAzMzYgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwpleHRlcm4gaW50
IHNpZ2hvbGQgKGludCBfX3NpZykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzaWdyZWxzZSAoaW50
IF9fc2lnKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNpZ2lnbm9yZSAoaW50IF9fc2lnKSB0aHJv
dyAoKTsKCgpleHRlcm4gX19zaWdoYW5kbGVyX3Qgc2lnc2V0IChpbnQgX19zaWcsIF9fc2lnaGFu
ZGxlcl90IF9fZGlzcCkgdGhyb3cgKCk7CiMgMzU2ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMK
ZXh0ZXJuIGludCBfX2xpYmNfY3VycmVudF9zaWdydG1pbiAodm9pZCkgdGhyb3cgKCk7CgpleHRl
cm4gaW50IF9fbGliY19jdXJyZW50X3NpZ3J0bWF4ICh2b2lkKSB0aHJvdyAoKTsKCgoKfQojIDIw
ICJpbmNsdWRlL2phdmEtc2lnbmFsLmgiIDIKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3N5c2NhbGwu
aCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9zeXMvc3lzY2FsbC5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2FzbS91bmlzdGQuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zeXMvc3lzY2FsbC5oIiAy
IDMKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zeXNjYWxsLmgiIDEgMwojIDMzICIvdXNy
L2luY2x1ZGUvc3lzL3N5c2NhbGwuaCIgMiAzCiMgMjEgImluY2x1ZGUvamF2YS1zaWduYWwuaCIg
MgojIDM2ICIuLi8uLi8uLi9nY2MvbGliamF2YS9pbnRlcnByZXQuY2MiIDIKCgoKIyAxICIvdXNy
L2luY2x1ZGUvc3RkbGliLmgiIDEgMwojIDMzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAx
ICIveDEvZWdjcy9idWlsZC9nY2MvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5j
bHVkZS9zdGRsaWIuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgp0eXBlZGVmIHN0cnVjdAogIHsK
ICAgIGludCBxdW90OwogICAgaW50IHJlbTsKICB9IGRpdl90OwoKCgp0eXBlZGVmIHN0cnVjdAog
IHsKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGludCByZW07CiAgfSBsZGl2X3Q7CgoKCgoK
X19leHRlbnNpb25fXyB0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgbG9uZyBpbnQgcXVvdDsK
ICAgIGxvbmcgbG9uZyBpbnQgcmVtOwogIH0gbGxkaXZfdDsKIyA4MCAiL3Vzci9pbmNsdWRlL3N0
ZGxpYi5oIiAzCmV4dGVybiBzaXplX3QgX19jdHlwZV9nZXRfbWJfY3VyX21heCAodm9pZCkgdGhy
b3cgKCk7CgoKCmV4dGVybiBkb3VibGUgYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93
ICgpOwoKZXh0ZXJuIGludCBhdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCk7Cgpl
eHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpOwoKCgpf
X2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9f
bnB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgc3RydG9kIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoK
CgpleHRlcm4gZmxvYXQgc3RydG9mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBj
aGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91Ymxl
IHN0cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGludCBzdHJ0b2wgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBp
bnQgX19iYXNlKSB0aHJvdyAoKTsKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bCAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcg
bG9uZyBpbnQgc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoq
X19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgoKX19leHRlbnNpb25f
XwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkg
dGhyb3cgKCk7CiMgMTMyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKX19leHRlbnNpb25fXwpl
eHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u
cHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgoK
X19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
IGludCBfX2Jhc2UpIHRocm93ICgpOwojIDE2MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4
dGVybiBsb25nIGludCBfX3N0cnRvbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy
LCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xv
YykgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfbCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
IGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9f
CmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9sbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwgX19sb2Nh
bGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxv
bmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy
LCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xv
YykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBfX3N0cnRvZF9sIChfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVf
dCBfX2xvYykgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2wgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2Fs
ZV90IF9fbG9jKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2wgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKIyAxOTYgIi91c3IvaW5jbHVkZS9zdGRsaWIu
aCIgMwpleHRlcm4gZG91YmxlIF9fc3RydG9kX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApIHRo
cm93ICgpOwoKCmV4dGVybiBmbG9hdCBfX3N0cnRvZl9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3Vw
KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRvbGRfaW50ZXJuYWwgKF9fY29u
c3QgY2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg
aW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9sX2ludGVy
bmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0ciwgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKCmV4dGVybiB1
bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqIF9fcmVz
dHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwgaW50
IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25n
IGludCBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs
IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhy
b3cgKCk7CgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBf
X3N0cnRvdWxsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0IF9fbnB0ciwgY2hh
ciAqKiBfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cg
KCk7CiMgMjQyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIF9faW5saW5lIGRvdWJs
ZQpzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG9kX2ludGVybmFsIChfX25w
dHIsIF9fZW5kcHRyLCAwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQKc3RydG9sIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwK
ICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG9sX2ludGVybmFs
IChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CmV4dGVybiBfX2lubGluZSB1bnNpZ25l
ZCBsb25nIGludApzdHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFy
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewog
IHJldHVybiBfX3N0cnRvdWxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7
Cn0KCgpleHRlcm4gX19pbmxpbmUgZmxvYXQKc3RydG9mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkKewogIHJldHVy
biBfX3N0cnRvZl9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0ZXJuIF9faW5s
aW5lIGxvbmcgZG91YmxlCnN0cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs
IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG9s
ZF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KCgoKX19leHRlbnNpb25fXyBleHRl
cm4gX19pbmxpbmUgbG9uZyBsb25nIGludApzdHJ0b3EgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgIGludCBfX2Jhc2Up
IHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRy
LCBfX2Jhc2UsIDApOwp9Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxv
bmcgbG9uZyBpbnQKc3RydG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsK
ICByZXR1cm4gX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAw
KTsKfQoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRv
bGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG9s
bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9f
IGV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50CnN0cnRvdWxsIChfX2NvbnN0
IGNoYXIgKiBfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAg
ICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJu
YWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KCgpleHRlcm4gX19pbmxpbmUgZG91
YmxlCmF0b2YgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKQp7CiAgcmV0dXJuIHN0cnRv
ZCAoX19ucHRyLCAoY2hhciAqKikgX19udWxsKTsKfQpleHRlcm4gX19pbmxpbmUgaW50CmF0b2kg
KF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKQp7CiAgcmV0dXJuIChpbnQpIHN0cnRvbCAo
X19ucHRyLCAoY2hhciAqKikgX19udWxsLCAxMCk7Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50
CmF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKQp7CiAgcmV0dXJuIHN0cnRvbCAo
X19ucHRyLCAoY2hhciAqKikgX19udWxsLCAxMCk7Cn0KCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBf
X2lubGluZSBsb25nIGxvbmcgaW50CmF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cg
KCkKewogIHJldHVybiBzdHJ0b2xsIChfX25wdHIsIChjaGFyICoqKSBfX251bGwsIDEwKTsKfQoj
IDMzMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpsNjRhIChsb25nIGlu
dCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBhNjRsIChfX2NvbnN0IGNoYXIgKl9f
cykgdGhyb3cgKCk7CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI4ICIv
dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKZXh0ZXJuICJDIiB7CgoKCgp0eXBlZGVmIF9fdV9j
aGFyIHVfY2hhcjsKdHlwZWRlZiBfX3Vfc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiBfX3VfaW50IHVf
aW50Owp0eXBlZGVmIF9fdV9sb25nIHVfbG9uZzsKdHlwZWRlZiBfX3F1YWRfdCBxdWFkX3Q7CnR5
cGVkZWYgX191X3F1YWRfdCB1X3F1YWRfdDsKdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CgoKdHlw
ZWRlZiBfX2xvZmZfdCBsb2ZmX3Q7CgoKCnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKCgoKCgoKdHlw
ZWRlZiBfX2lubzY0X3QgaW5vNjRfdDsKCgoKCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKCgoKCnR5
cGVkZWYgX19naWRfdCBnaWRfdDsKCgoKCnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoKCgoKdHlw
ZWRlZiBfX25saW5rX3QgbmxpbmtfdDsKIyA4NCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAz
CnR5cGVkZWYgX19vZmZfdCBvZmZfdDsKCgoKCgoKdHlwZWRlZiBfX29mZjY0X3Qgb2ZmNjRfdDsK
IyAxMDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9faWRfdCBpZF90OwoK
Cgp0eXBlZGVmIF9fc3NpemVfdCBzc2l6ZV90OwoKCgoKdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJf
dDsKdHlwZWRlZiBfX2NhZGRyX3QgY2FkZHJfdDsKCgoKdHlwZWRlZiBfX2tleV90IGtleV90Owoj
IDEyNSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3gxL2VnY3MvYnVpbGQvZ2Nj
L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDEyNiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAy
IDMKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1bG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBz
aG9ydCBpbnQgdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50OwojIDE2OSAiL3Vzci9p
bmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgaW50IGludDhfdCBfX2F0dHJpYnV0ZV9fICgo
X19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiBpbnQgaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgo
X19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgo
X19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiBpbnQgaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgo
X19tb2RlX18gKF9fRElfXykpKTsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDhfdCBfX2F0
dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9p
bnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2ln
bmVkIGludCB1X2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5
cGVkZWYgdW5zaWduZWQgaW50IHVfaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9f
RElfXykpKTsKCnR5cGVkZWYgaW50IHJlZ2lzdGVyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f
IChfX3dvcmRfXykpKTsKIyAxOTEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9lbmRpYW4uaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9iaXRzL2VuZGlhbi5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2Vu
ZGlhbi5oIiAyIDMKIyAxOTIgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKIyAxICIv
dXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxl
Y3QuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NlbGVjdC5oIiAxIDMKIyAzMiAiL3Vzci9p
bmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQu
aCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCgoKCmV4dGVybiAi
QyIgewoKCgoKCnN0cnVjdCB0aW1ldmFsOwoKdHlwZWRlZiBfX2ZkX21hc2sgZmRfbWFzazsKCgp0
eXBlZGVmIF9fZmRfc2V0IGZkX3NldDsKIyA3NCAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIg
MwpleHRlcm4gaW50IF9fc2VsZWN0IChpbnQgX19uZmRzLCBfX2ZkX3NldCAqX19yZWFkZmRzLCBf
X2ZkX3NldCAqX193cml0ZWZkcywgX19mZF9zZXQgKl9fZXhjZXB0ZmRzLCBzdHJ1Y3QgdGltZXZh
bCAqX190aW1lb3V0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNlbGVjdCAoaW50IF9fbmZkcywg
X19mZF9zZXQgKl9fcmVhZGZkcywgX19mZF9zZXQgKl9fd3JpdGVmZHMsIF9fZmRfc2V0ICpfX2V4
Y2VwdGZkcywgc3RydWN0IHRpbWV2YWwgKl9fdGltZW91dCkgdGhyb3cgKCk7CiMgODcgIi91c3Iv
aW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKZXh0ZXJuIGludCBwc2VsZWN0IChpbnQgX19uZmRzLCBf
X2ZkX3NldCAqX19yZWFkZmRzLCBfX2ZkX3NldCAqX193cml0ZWZkcywgX19mZF9zZXQgKl9fZXhj
ZXB0ZmRzLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fdGltZW91dCwgY29uc3QgX19zaWdzZXRf
dCAqX19zaWdtYXNrKSB0aHJvdyAoKTsKCgoKCgp9CiMgMTk1ICIvdXNyL2luY2x1ZGUvc3lzL3R5
cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIgMSAzCiMgMTk4
ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgoKCnR5cGVkZWYgX19ibGtjbnRfdCBi
bGtjbnRfdDsKdHlwZWRlZiBfX2ZzYmxrY250X3QgZnNibGtjbnRfdDsKdHlwZWRlZiBfX2ZzZmls
Y250X3QgZnNmaWxjbnRfdDsKCgoKCgoKCnR5cGVkZWYgX19ibGtjbnQ2NF90IGJsa2NudDY0X3Q7
CnR5cGVkZWYgX19mc2Jsa2NudDY0X3QgZnNibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNmaWxjbnQ2
NF90IGZzZmlsY250NjRfdDsKCgp9CiMgMzQwICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoK
CgoKCgpleHRlcm4gaW50MzJfdCByYW5kb20gKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB2b2lk
IHNyYW5kb20gKHVuc2lnbmVkIGludCBfX3NlZWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lk
ICogaW5pdHN0YXRlICh1bnNpZ25lZCBpbnQgX19zZWVkLCB2b2lkICogX19zdGF0ZWJ1Ziwgc2l6
ZV90IF9fc3RhdGVsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgKiBzZXRzdGF0ZSAodm9p
ZCAqIF9fc3RhdGVidWYpIHRocm93ICgpOwoKCgoKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewog
ICAgaW50MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7CiAgICBpbnQzMl90ICpzdGF0ZTsK
ICAgIGludCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7CiAgICBpbnQgcmFuZF9zZXA7CiAg
ICBpbnQzMl90ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yIChzdHJ1Y3QgcmFu
ZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYsIGludDMyX3QgKl9fcmVzdHJpY3QgX19yZXN1bHQp
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3JhbmRvbV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBz
dHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgaW5pdHN0YXRl
X3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIHZvaWQgKiBfX3Jlc3RyaWN0IF9fc3RhdGVidWYsIHNp
emVfdCBfX3N0YXRlbGVuLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRzdGF0ZV9yICh2b2lkICogX19yZXN0cmljdCBfX3N0
YXRlYnVmLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gaW50IHJhbmQgKHZvaWQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgc3JhbmQg
KHVuc2lnbmVkIGludCBfX3NlZWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHJhbmRfciAodW5z
aWduZWQgaW50ICpfX3NlZWQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4
ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBp
bnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGxyYW5kNDggKHZvaWQp
IHRocm93ICgpOwpleHRlcm4gbG9uZyBpbnQgbnJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9f
eHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSB0aHJv
dyAoKTsKZXh0ZXJuIGxvbmcgaW50IGpyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJp
WzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFuZDQ4IChsb25nIGludCBfX3NlZWR2YWwp
IHRocm93ICgpOwpleHRlcm4gdW5zaWduZWQgc2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNo
b3J0IGludCBfX3NlZWQxNnZbM10pIHRocm93ICgpOwpleHRlcm4gdm9pZCBsY29uZzQ4ICh1bnNp
Z25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSkgdGhyb3cgKCk7CgoKc3RydWN0IGRyYW5kNDhfZGF0
YQogIHsKICAgIHVuc2lnbmVkIHNob3J0IGludCB4WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50
IGFbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgYzsKICAgIHVuc2lnbmVkIHNob3J0IGludCBv
bGRfeFszXTsKICAgIGludCBpbml0OwogIH07CgoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1
Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLCBkb3VibGUgKl9fcmVzdHJpY3Qg
X19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBlcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0
IGludCBfX3hzdWJpWzNdLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVy
LCBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBs
cmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsIGxvbmcg
aW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgbnJhbmQ0OF9y
ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19y
ZXN0cmljdCBfX2J1ZmZlciwgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGludCBtcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJp
Y3QgX19idWZmZXIsIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4
dGVybiBpbnQganJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwgc3RydWN0
IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwgbG9uZyBpbnQgKl9fcmVzdHJpY3Qg
X19yZXN1bHQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzcmFuZDQ4X3IgKGxvbmcgaW50IF9f
c2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIHRocm93ICgpOwoKZXh0ZXJu
IGludCBzZWVkNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSwgc3RydWN0IGRy
YW5kNDhfZGF0YSAqX19idWZmZXIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbGNvbmc0OF9yICh1
bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZm
ZXIpIHRocm93ICgpOwojIDQ3NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiB2b2lk
ICogbWFsbG9jIChzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkICogY2FsbG9j
IChzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZv
aWQgKiByZWFsbG9jICh2b2lkICogX19wdHIsIHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKZXh0
ZXJuIHZvaWQgZnJlZSAodm9pZCAqIF9fcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2Zy
ZWUgKHZvaWQgKiBfX3B0cikgdGhyb3cgKCk7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5o
IiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAzCiMgMSAiL3gxL2VnY3MvYnVpbGQv
Z2NjL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDIg
MwoKZXh0ZXJuICJDIiB7CgoKCgoKZXh0ZXJuIHZvaWQgKiBhbGxvY2EgKHNpemVfdCBfX3NpemUp
IHRocm93ICgpOwoKCgoKCn0KIyA0OTMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgpl
eHRlcm4gdm9pZCAqIHZhbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4g
dm9pZCBhYm9ydCAodm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykp
OwoKCgpleHRlcm4gaW50IGF0ZXhpdCAodm9pZCAoKl9fZnVuYykgKHZvaWQpKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBpbnQgX19vbl9leGl0ICh2b2lkICgqX19mdW5jKSAoaW50IF9fc3RhdHVzLCB2
b2lkICogX19hcmcpLCB2b2lkICogX19hcmcpIHRocm93ICgpOwoKZXh0ZXJuIGludCBvbl9leGl0
ICh2b2lkICgqX19mdW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICogX19hcmcpLCB2b2lkICogX19h
cmcpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gdm9pZCBleGl0IChpbnQgX19zdGF0dXMpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiB2b2lkIF9FeGl0
IChpbnQgX19zdGF0dXMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsK
CgoKCmV4dGVybiBjaGFyICpnZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGNoYXIgKl9fc2VjdXJlX2dldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRo
cm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHV0ZW52IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIGludCBzZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lLCBfX2NvbnN0IGNo
YXIgKl9fdmFsdWUsIGludCBfX3JlcGxhY2UpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCB1bnNl
dGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGNs
ZWFyZW52ICh2b2lkKSB0aHJvdyAoKTsKIyA1NjYgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpl
eHRlcm4gY2hhciAqbWt0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCgoKZXh0
ZXJuIGludCBta3N0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBp
bnQgc3lzdGVtIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy
biBjaGFyICpjYW5vbmljYWxpemVfZmlsZV9uYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhy
b3cgKCk7CiMgNTk1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKnJlYWxw
YXRoIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLCBjaGFyICpfX3Jlc3RyaWN0IF9f
cmVzb2x2ZWQpIHRocm93ICgpOwoKCgoKCgoKdHlwZWRlZiBpbnQgKCpfX2NvbXBhcl9mbl90KSAo
X19jb25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAqKTsKCgp0eXBlZGVmIF9fY29tcGFyX2ZuX3Qg
Y29tcGFyaXNvbl9mbl90OwoKCgoKCmV4dGVybiB2b2lkICogYnNlYXJjaCAoX19jb25zdCB2b2lk
ICogX19rZXksIF9fY29uc3Qgdm9pZCAqIF9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBf
X3NpemUsIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgoKCmV4dGVybiB2b2lkIHFzb3J0ICh2
b2lkICogX19iYXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5f
dCBfX2NvbXBhcik7CgoKCgpleHRlcm4gaW50IGFicyAoaW50IF9feCkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbG9uZyBpbnQgbGFicyAobG9uZyBpbnQgX194
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4
dGVybiBsb25nIGxvbmcgaW50IGxsYWJzIChsb25nIGxvbmcgaW50IF9feCkgdGhyb3cgKCkKICAg
ICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCmV4dGVybiBkaXZfdCBkaXYgKGlu
dCBfX251bWVyLCBpbnQgX19kZW5vbSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwpleHRlcm4gbGRpdl90IGxkaXYgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVu
b20pIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNp
b25fXyBleHRlcm4gbGxkaXZfdCBsbGRpdiAobG9uZyBsb25nIGludCBfX251bWVyLCBsb25nIGxv
bmcgaW50IF9fZGVub20pIHRocm93ICgpCgogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKIyA2NTEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqZWN2dCAoZG91
YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAq
X19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpmY3Z0IChkb3Vi
bGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpf
X3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmdjdnQgKGRvdWJs
ZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgpleHRlcm4g
Y2hhciAqcWVjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jl
c3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKZXh0ZXJu
IGNoYXIgKnFmY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19y
ZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCmV4dGVy
biBjaGFyICpxZ2N2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpf
X2J1ZikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBp
bnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19z
aWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgZmN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVz
dHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBf
X2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBxZWN2dF9yIChsb25n
IGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBp
bnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19s
ZW4pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcWZjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwg
aW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9f
c2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKIyA2
OTUgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50IG1ibGVuIChfX2NvbnN0IGNo
YXIgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtYnRvd2MgKHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19wd2MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVf
dCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHdjdG9tYiAoY2hhciAqX19zLCB3Y2hhcl90
IF9fd2NoYXIpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IG1ic3Rvd2NzICh3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fcHdjcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9f
bikgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hhciAqX19yZXN0cmljdCBf
X3MsIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIHNpemVfdCBfX24pIHRocm93
ICgpOwojIDcxOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQgcnBtYXRjaCAo
X19jb25zdCBjaGFyICpfX3Jlc3BvbnNlKSB0aHJvdyAoKTsKIyA3MjkgIi91c3IvaW5jbHVkZS9z
dGRsaWIuaCIgMwpleHRlcm4gaW50IGdldHN1Ym9wdCAoY2hhciAqKl9fcmVzdHJpY3QgX19vcHRp
b25wLCBfX2NvbnN0IGNoYXIgKl9fY29uc3QgKl9fcmVzdHJpY3QgX190b2tlbnMsIGNoYXIgKipf
X3Jlc3RyaWN0IF9fdmFsdWVwKSB0aHJvdyAoKTsKIyA3MzggIi91c3IvaW5jbHVkZS9zdGRsaWIu
aCIgMwpleHRlcm4gdm9pZCBzZXRrZXkgKF9fY29uc3QgY2hhciAqX19rZXkpIHRocm93ICgpOwoK
CgoKCgoKZXh0ZXJuIGludCBncmFudHB0IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgdW5sb2NrcHQgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpwdHNuYW1l
IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRzbmFtZV9yIChpbnQgX19m
ZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBn
ZXRwdCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKfQojIDQwICIuLi8uLi8uLi9nY2MvbGliamF2YS9p
bnRlcnByZXQuY2MiIDIKCnVzaW5nIG5hbWVzcGFjZSBnY2o7CgpzdGF0aWMgdm9pZCB0aHJvd19p
bnRlcm5hbF9lcnJvciAoY2hhciAqbXNnKQogIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18p
KTsKc3RhdGljIHZvaWQgdGhyb3dfaW5jb21wYXRpYmxlX2NsYXNzX2NoYW5nZV9lcnJvciAoanN0
cmluZyBtc2cpCiAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKCmV4dGVybiAi
QyIgZG91YmxlIF9faWVlZTc1NF9mbW9kIChkb3VibGUsZG91YmxlKTsKCgoKdW5pb24gaW5zbl9z
bG90CnsKCiAgdm9pZCAqaW5zbjsKCiAgamludCBpbnRfdmFsOwoKICB2b2lkICpkYXR1bTsKfTsK
CnN0YXRpYyBpbmxpbmUgdm9pZCBkdXB4IChfSnZfd29yZCAqc3AsIGludCBuLCBpbnQgeCkKewoK
ICBpbnQgdG9wID0gbi0xOwogIGZvciAoaW50IGkgPSAwOyBpIDwgbit4OyBpKyspCiAgICB7CiAg
ICAgIHNwWyh0b3AtaSldID0gc3BbKHRvcC1pKS1uXTsKICAgIH0KCgogIGZvciAoaW50IGkgPSAw
OyBpIDwgbjsgaSsrKQogICAgewogICAgICBzcFt0b3AtKG4reCktaV0gPSBzcFt0b3AtaV07CiAg
ICB9Cgp9OwoKCnRlbXBsYXRlPHR5cGVuYW1lIFRPLCB0eXBlbmFtZSBGUk9NPgpzdGF0aWMgaW5s
aW5lIFRPCmNvbnZlcnQgKEZST00gdmFsLCBUTyBtaW4sIFRPIG1heCkKewogIFRPIHJldDsKICBp
ZiAodmFsID49IChGUk9NKSBtYXgpCiAgICByZXQgPSBtYXg7CiAgZWxzZSBpZiAodmFsIDw9IChG
Uk9NKSBtaW4pCiAgICByZXQgPSBtaW47CiAgZWxzZSBpZiAodmFsICE9IHZhbCkKICAgIHJldCA9
IDA7CiAgZWxzZQogICAgcmV0ID0gKFRPKSB2YWw7CiAgcmV0dXJuIHJldDsKfQojIDE4OCAiLi4v
Li4vLi4vZ2NjL2xpYmphdmEvaW50ZXJwcmV0LmNjIgpzdGF0aWMgaW5saW5lIGppbnQgZ2V0MXMo
dW5zaWduZWQgY2hhciogbG9jKSB7CiAgcmV0dXJuICooc2lnbmVkIGNoYXIqKWxvYzsKfQoKc3Rh
dGljIGlubGluZSBqaW50IGdldDF1KHVuc2lnbmVkIGNoYXIqIGxvYykgewogIHJldHVybiAqbG9j
Owp9CgpzdGF0aWMgaW5saW5lIGppbnQgZ2V0MnModW5zaWduZWQgY2hhciogbG9jKSB7CiAgcmV0
dXJuICgoKGppbnQpKihzaWduZWQgY2hhciopbG9jKSA8PCA4KSB8ICgoamludCkqKGxvYysxKSk7
Cn0KCnN0YXRpYyBpbmxpbmUgamludCBnZXQydSh1bnNpZ25lZCBjaGFyKiBsb2MpIHsKICByZXR1
cm4gKCgoamludCkoKmxvYykpIDw8IDgpIHwgKChqaW50KSoobG9jKzEpKTsKfQoKc3RhdGljIGpp
bnQgZ2V0NCh1bnNpZ25lZCBjaGFyKiBsb2MpIHsKICByZXR1cm4gKCgoamludCkobG9jWzBdKSkg
PDwgMjQpCiAgICAgICB8ICgoKGppbnQpKGxvY1sxXSkpIDw8IDE2KQogICAgICAgfCAoKChqaW50
KShsb2NbMl0pKSA8PCA4KQogICAgICAgfCAoKChqaW50KShsb2NbM10pKSA8PCAwKTsKfQojIDIz
MCAiLi4vLi4vLi4vZ2NjL2xpYmphdmEvaW50ZXJwcmV0LmNjIgp2b2lkIF9Kdl9JbnRlcnBNZXRo
b2Q6OnJ1bl9ub3JtYWwgKGZmaV9jaWYgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2b2lkKiByZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmZpX3Jh
dyAqIGFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogX190aGlz
KQp7CiAgX0p2X0ludGVycE1ldGhvZCAqX3RoaXMgPSAoX0p2X0ludGVycE1ldGhvZCAqKSBfX3Ro
aXM7CiAgX3RoaXMtPnJ1biAocmV0LCBhcmdzKTsKfQoKdm9pZCBfSnZfSW50ZXJwTWV0aG9kOjpy
dW5fc3luY2hfb2JqZWN0IChmZmlfY2lmICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdm9pZCogcmV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZmaV9yYXcgKiBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZvaWQqIF9fdGhpcykKewogIF9Kdl9JbnRlcnBNZXRob2QgKl90aGlzID0gKF9Kdl9J
bnRlcnBNZXRob2QgKikgX190aGlzOwoKICBqb2JqZWN0IHJjdiA9IChqb2JqZWN0KSBhcmdzWzBd
LnB0cjsKICBKdlN5bmNocm9uaXplIG11dGV4IChyY3YpOwoKICBfdGhpcy0+cnVuIChyZXQsIGFy
Z3MpOwp9Cgp2b2lkIF9Kdl9JbnRlcnBNZXRob2Q6OnJ1bl9zeW5jaF9jbGFzcyAoZmZpX2NpZiAq
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogcmV0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmZpX3JhdyAqIGFyZ3MsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBfX3RoaXMpCnsKICBfSnZf
SW50ZXJwTWV0aG9kICpfdGhpcyA9IChfSnZfSW50ZXJwTWV0aG9kICopIF9fdGhpczsKCiAgamNs
YXNzIHN5bmMgPSBfdGhpcy0+ZGVmaW5pbmdfY2xhc3M7CiAgSnZTeW5jaHJvbml6ZSBtdXRleCAo
c3luYyk7CgogIF90aGlzLT5ydW4gKHJldCwgYXJncyk7Cn0KCgoKdm9pZApfSnZfSW50ZXJwTWV0
aG9kOjpjb21waWxlIChjb25zdCB2b2lkICogY29uc3QgKmluc25fdGFyZ2V0cykKewogIGluc25f
c2xvdCAqaW5zbnMgPSBfX251bGw7CiAgaW50IG5leHQgPSAwOwogIHVuc2lnbmVkIGNoYXIgKmNv
ZGVzdGFydCA9IGJ5dGVjb2RlICgpOwogIHVuc2lnbmVkIGNoYXIgKmVuZCA9IGNvZGVzdGFydCAr
IGNvZGVfbGVuZ3RoOwogIF9Kdl93b3JkICpwb29sX2RhdGEgPSBkZWZpbmluZ19jbGFzcy0+Y29u
c3RhbnRzLmRhdGE7CiMgMjkxICIuLi8uLi8uLi9nY2MvbGliamF2YS9pbnRlcnByZXQuY2MiCiAg
aW50ICpwY19tYXBwaW5nID0gKGludCAqKSBfX2J1aWx0aW5fYWxsb2NhIChzaXplb2YgKGludCkg
KiBjb2RlX2xlbmd0aCk7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2RlX2xlbmd0aDsgKytpKQog
ICAgcGNfbWFwcGluZ1tpXSA9IC0xOwoKICBmb3IgKGludCBpID0gMDsgaSA8IDI7ICsraSkKICAg
IHsKICAgICAgamJvb2xlYW4gZmlyc3RfcGFzcyA9IGkgPT0gMDsKCiAgICAgIGlmICghIGZpcnN0
X3Bhc3MpCiAgICAgICAgewogICAgICAgICAgaW5zbnMgPSAoaW5zbl9zbG90ICopIF9Kdl9NYWxs
b2MgKHNpemVvZiAoaW5zbl9zbG90KSAqIG5leHQpOwogICAgICAgICAgbmV4dCA9IDA7CiAgICAg
ICAgfQoKICAgICAgdW5zaWduZWQgY2hhciAqcGMgPSBjb2Rlc3RhcnQ7CiAgICAgIHdoaWxlIChw
YyA8IGVuZCkKICAgICAgICB7CiAgICAgICAgICBpbnQgYmFzZV9wY192YWwgPSBwYyAtIGNvZGVz
dGFydDsKICAgICAgICAgIGlmIChmaXJzdF9wYXNzKQogICAgICAgICAgICBwY19tYXBwaW5nW2Jh
c2VfcGNfdmFsXSA9IG5leHQ7CgogICAgICAgICAgamF2YV9vcGNvZGUgb3Bjb2RlID0gKGphdmFf
b3Bjb2RlKSAqcGMrKzsKCiAgICAgICAgICBpZiAob3Bjb2RlID09IG9wX25vcCkKICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICBkbyB7IGlmIChmaXJzdF9wYXNzKSArK25leHQ7IGVsc2Ug
aW5zbnNbbmV4dCsrXS5pbnNuID0gKHZvaWQgKikgaW5zbl90YXJnZXRzW29wY29kZV07IH0gd2hp
bGUgKDApOwoKICAgICAgICAgIHN3aXRjaCAob3Bjb2RlKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgIGNhc2Ugb3Bfbm9wOgogICAgICAgICAgICBjYXNlIG9wX2Fjb25zdF9udWxsOgogICAgICAg
ICAgICBjYXNlIG9wX2ljb25zdF9tMToKICAgICAgICAgICAgY2FzZSBvcF9pY29uc3RfMDoKICAg
ICAgICAgICAgY2FzZSBvcF9pY29uc3RfMToKICAgICAgICAgICAgY2FzZSBvcF9pY29uc3RfMjoK
ICAgICAgICAgICAgY2FzZSBvcF9pY29uc3RfMzoKICAgICAgICAgICAgY2FzZSBvcF9pY29uc3Rf
NDoKICAgICAgICAgICAgY2FzZSBvcF9pY29uc3RfNToKICAgICAgICAgICAgY2FzZSBvcF9sY29u
c3RfMDoKICAgICAgICAgICAgY2FzZSBvcF9sY29uc3RfMToKICAgICAgICAgICAgY2FzZSBvcF9m
Y29uc3RfMDoKICAgICAgICAgICAgY2FzZSBvcF9mY29uc3RfMToKICAgICAgICAgICAgY2FzZSBv
cF9mY29uc3RfMjoKICAgICAgICAgICAgY2FzZSBvcF9kY29uc3RfMDoKICAgICAgICAgICAgY2Fz
ZSBvcF9kY29uc3RfMToKICAgICAgICAgICAgY2FzZSBvcF9pbG9hZF8wOgogICAgICAgICAgICBj
YXNlIG9wX2lsb2FkXzE6CiAgICAgICAgICAgIGNhc2Ugb3BfaWxvYWRfMjoKICAgICAgICAgICAg
Y2FzZSBvcF9pbG9hZF8zOgogICAgICAgICAgICBjYXNlIG9wX2xsb2FkXzA6CiAgICAgICAgICAg
IGNhc2Ugb3BfbGxvYWRfMToKICAgICAgICAgICAgY2FzZSBvcF9sbG9hZF8yOgogICAgICAgICAg
ICBjYXNlIG9wX2xsb2FkXzM6CiAgICAgICAgICAgIGNhc2Ugb3BfZmxvYWRfMDoKICAgICAgICAg
ICAgY2FzZSBvcF9mbG9hZF8xOgogICAgICAgICAgICBjYXNlIG9wX2Zsb2FkXzI6CiAgICAgICAg
ICAgIGNhc2Ugb3BfZmxvYWRfMzoKICAgICAgICAgICAgY2FzZSBvcF9kbG9hZF8wOgogICAgICAg
ICAgICBjYXNlIG9wX2Rsb2FkXzE6CiAgICAgICAgICAgIGNhc2Ugb3BfZGxvYWRfMjoKICAgICAg
ICAgICAgY2FzZSBvcF9kbG9hZF8zOgogICAgICAgICAgICBjYXNlIG9wX2Fsb2FkXzA6CiAgICAg
ICAgICAgIGNhc2Ugb3BfYWxvYWRfMToKICAgICAgICAgICAgY2FzZSBvcF9hbG9hZF8yOgogICAg
ICAgICAgICBjYXNlIG9wX2Fsb2FkXzM6CiAgICAgICAgICAgIGNhc2Ugb3BfaWFsb2FkOgogICAg
ICAgICAgICBjYXNlIG9wX2xhbG9hZDoKICAgICAgICAgICAgY2FzZSBvcF9mYWxvYWQ6CiAgICAg
ICAgICAgIGNhc2Ugb3BfZGFsb2FkOgogICAgICAgICAgICBjYXNlIG9wX2FhbG9hZDoKICAgICAg
ICAgICAgY2FzZSBvcF9iYWxvYWQ6CiAgICAgICAgICAgIGNhc2Ugb3BfY2Fsb2FkOgogICAgICAg
ICAgICBjYXNlIG9wX3NhbG9hZDoKICAgICAgICAgICAgY2FzZSBvcF9pc3RvcmVfMDoKICAgICAg
ICAgICAgY2FzZSBvcF9pc3RvcmVfMToKICAgICAgICAgICAgY2FzZSBvcF9pc3RvcmVfMjoKICAg
ICAgICAgICAgY2FzZSBvcF9pc3RvcmVfMzoKICAgICAgICAgICAgY2FzZSBvcF9sc3RvcmVfMDoK
ICAgICAgICAgICAgY2FzZSBvcF9sc3RvcmVfMToKICAgICAgICAgICAgY2FzZSBvcF9sc3RvcmVf
MjoKICAgICAgICAgICAgY2FzZSBvcF9sc3RvcmVfMzoKICAgICAgICAgICAgY2FzZSBvcF9mc3Rv
cmVfMDoKICAgICAgICAgICAgY2FzZSBvcF9mc3RvcmVfMToKICAgICAgICAgICAgY2FzZSBvcF9m
c3RvcmVfMjoKICAgICAgICAgICAgY2FzZSBvcF9mc3RvcmVfMzoKICAgICAgICAgICAgY2FzZSBv
cF9kc3RvcmVfMDoKICAgICAgICAgICAgY2FzZSBvcF9kc3RvcmVfMToKICAgICAgICAgICAgY2Fz
ZSBvcF9kc3RvcmVfMjoKICAgICAgICAgICAgY2FzZSBvcF9kc3RvcmVfMzoKICAgICAgICAgICAg
Y2FzZSBvcF9hc3RvcmVfMDoKICAgICAgICAgICAgY2FzZSBvcF9hc3RvcmVfMToKICAgICAgICAg
ICAgY2FzZSBvcF9hc3RvcmVfMjoKICAgICAgICAgICAgY2FzZSBvcF9hc3RvcmVfMzoKICAgICAg
ICAgICAgY2FzZSBvcF9pYXN0b3JlOgogICAgICAgICAgICBjYXNlIG9wX2xhc3RvcmU6CiAgICAg
ICAgICAgIGNhc2Ugb3BfZmFzdG9yZToKICAgICAgICAgICAgY2FzZSBvcF9kYXN0b3JlOgogICAg
ICAgICAgICBjYXNlIG9wX2Fhc3RvcmU6CiAgICAgICAgICAgIGNhc2Ugb3BfYmFzdG9yZToKICAg
ICAgICAgICAgY2FzZSBvcF9jYXN0b3JlOgogICAgICAgICAgICBjYXNlIG9wX3Nhc3RvcmU6CiAg
ICAgICAgICAgIGNhc2Ugb3BfcG9wOgogICAgICAgICAgICBjYXNlIG9wX3BvcDI6CiAgICAgICAg
ICAgIGNhc2Ugb3BfZHVwOgogICAgICAgICAgICBjYXNlIG9wX2R1cF94MToKICAgICAgICAgICAg
Y2FzZSBvcF9kdXBfeDI6CiAgICAgICAgICAgIGNhc2Ugb3BfZHVwMjoKICAgICAgICAgICAgY2Fz
ZSBvcF9kdXAyX3gxOgogICAgICAgICAgICBjYXNlIG9wX2R1cDJfeDI6CiAgICAgICAgICAgIGNh
c2Ugb3Bfc3dhcDoKICAgICAgICAgICAgY2FzZSBvcF9pYWRkOgogICAgICAgICAgICBjYXNlIG9w
X2lzdWI6CiAgICAgICAgICAgIGNhc2Ugb3BfaW11bDoKICAgICAgICAgICAgY2FzZSBvcF9pZGl2
OgogICAgICAgICAgICBjYXNlIG9wX2lyZW06CiAgICAgICAgICAgIGNhc2Ugb3BfaXNobDoKICAg
ICAgICAgICAgY2FzZSBvcF9pc2hyOgogICAgICAgICAgICBjYXNlIG9wX2l1c2hyOgogICAgICAg
ICAgICBjYXNlIG9wX2lhbmQ6CiAgICAgICAgICAgIGNhc2Ugb3BfaW9yOgogICAgICAgICAgICBj
YXNlIG9wX2l4b3I6CiAgICAgICAgICAgIGNhc2Ugb3BfbGFkZDoKICAgICAgICAgICAgY2FzZSBv
cF9sc3ViOgogICAgICAgICAgICBjYXNlIG9wX2xtdWw6CiAgICAgICAgICAgIGNhc2Ugb3BfbGRp
djoKICAgICAgICAgICAgY2FzZSBvcF9scmVtOgogICAgICAgICAgICBjYXNlIG9wX2xzaGw6CiAg
ICAgICAgICAgIGNhc2Ugb3BfbHNocjoKICAgICAgICAgICAgY2FzZSBvcF9sdXNocjoKICAgICAg
ICAgICAgY2FzZSBvcF9sYW5kOgogICAgICAgICAgICBjYXNlIG9wX2xvcjoKICAgICAgICAgICAg
Y2FzZSBvcF9seG9yOgogICAgICAgICAgICBjYXNlIG9wX2ZhZGQ6CiAgICAgICAgICAgIGNhc2Ug
b3BfZnN1YjoKICAgICAgICAgICAgY2FzZSBvcF9mbXVsOgogICAgICAgICAgICBjYXNlIG9wX2Zk
aXY6CiAgICAgICAgICAgIGNhc2Ugb3BfZnJlbToKICAgICAgICAgICAgY2FzZSBvcF9kYWRkOgog
ICAgICAgICAgICBjYXNlIG9wX2RzdWI6CiAgICAgICAgICAgIGNhc2Ugb3BfZG11bDoKICAgICAg
ICAgICAgY2FzZSBvcF9kZGl2OgogICAgICAgICAgICBjYXNlIG9wX2RyZW06CiAgICAgICAgICAg
IGNhc2Ugb3BfaW5lZzoKICAgICAgICAgICAgY2FzZSBvcF9pMmI6CiAgICAgICAgICAgIGNhc2Ug
b3BfaTJjOgogICAgICAgICAgICBjYXNlIG9wX2kyczoKICAgICAgICAgICAgY2FzZSBvcF9sbmVn
OgogICAgICAgICAgICBjYXNlIG9wX2ZuZWc6CiAgICAgICAgICAgIGNhc2Ugb3BfZG5lZzoKICAg
ICAgICAgICAgY2FzZSBvcF9pMmw6CiAgICAgICAgICAgIGNhc2Ugb3BfaTJmOgogICAgICAgICAg
ICBjYXNlIG9wX2kyZDoKICAgICAgICAgICAgY2FzZSBvcF9sMmk6CiAgICAgICAgICAgIGNhc2Ug
b3BfbDJmOgogICAgICAgICAgICBjYXNlIG9wX2wyZDoKICAgICAgICAgICAgY2FzZSBvcF9mMmk6
CiAgICAgICAgICAgIGNhc2Ugb3BfZjJsOgogICAgICAgICAgICBjYXNlIG9wX2YyZDoKICAgICAg
ICAgICAgY2FzZSBvcF9kMmk6CiAgICAgICAgICAgIGNhc2Ugb3BfZDJsOgogICAgICAgICAgICBj
YXNlIG9wX2QyZjoKICAgICAgICAgICAgY2FzZSBvcF9sY21wOgogICAgICAgICAgICBjYXNlIG9w
X2ZjbXBsOgogICAgICAgICAgICBjYXNlIG9wX2ZjbXBnOgogICAgICAgICAgICBjYXNlIG9wX2Rj
bXBsOgogICAgICAgICAgICBjYXNlIG9wX2RjbXBnOgogICAgICAgICAgICBjYXNlIG9wX21vbml0
b3JlbnRlcjoKICAgICAgICAgICAgY2FzZSBvcF9tb25pdG9yZXhpdDoKICAgICAgICAgICAgY2Fz
ZSBvcF9pcmV0dXJuOgogICAgICAgICAgICBjYXNlIG9wX2xyZXR1cm46CiAgICAgICAgICAgIGNh
c2Ugb3BfZnJldHVybjoKICAgICAgICAgICAgY2FzZSBvcF9kcmV0dXJuOgogICAgICAgICAgICBj
YXNlIG9wX2FyZXR1cm46CiAgICAgICAgICAgIGNhc2Ugb3BfcmV0dXJuOgogICAgICAgICAgICBj
YXNlIG9wX2F0aHJvdzoKICAgICAgICAgICAgY2FzZSBvcF9hcnJheWxlbmd0aDoKCiAgICAgICAg
ICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIG9wX2JpcHVzaDoKICAgICAgICAgICAgICBk
byB7IGlmIChmaXJzdF9wYXNzKSArK25leHQ7IGVsc2UgaW5zbnNbbmV4dCsrXS5pbnRfdmFsID0g
Z2V0MXMgKHBjKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgICAgICAgKytwYzsKICAgICAgICAgICAg
ICBicmVhazsKCiAgICAgICAgICAgIGNhc2Ugb3BfbGRjOgogICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgIGludCBpbmRleCA9IGdldDF1IChwYyk7CiAgICAgICAgICAgICAgICArK3BjOwog
ICAgICAgICAgICAgICAgZG8geyBpZiAoZmlyc3RfcGFzcykgKytuZXh0OyBlbHNlIGluc25zW25l
eHQrK10uZGF0dW0gPSBwb29sX2RhdGFbaW5kZXhdLm87IH0gd2hpbGUgKDApOwogICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2Ugb3BfcmV0OgogICAg
ICAgICAgICBjYXNlIG9wX2lsb2FkOgogICAgICAgICAgICBjYXNlIG9wX2xsb2FkOgogICAgICAg
ICAgICBjYXNlIG9wX2Zsb2FkOgogICAgICAgICAgICBjYXNlIG9wX2Rsb2FkOgogICAgICAgICAg
ICBjYXNlIG9wX2Fsb2FkOgogICAgICAgICAgICBjYXNlIG9wX2lzdG9yZToKICAgICAgICAgICAg
Y2FzZSBvcF9sc3RvcmU6CiAgICAgICAgICAgIGNhc2Ugb3BfZnN0b3JlOgogICAgICAgICAgICBj
YXNlIG9wX2RzdG9yZToKICAgICAgICAgICAgY2FzZSBvcF9hc3RvcmU6CiAgICAgICAgICAgIGNh
c2Ugb3BfbmV3YXJyYXk6CiAgICAgICAgICAgICAgZG8geyBpZiAoZmlyc3RfcGFzcykgKytuZXh0
OyBlbHNlIGluc25zW25leHQrK10uaW50X3ZhbCA9IGdldDF1IChwYyk7IH0gd2hpbGUgKDApOwog
ICAgICAgICAgICAgICsrcGM7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNl
IG9wX2lpbmM6CiAgICAgICAgICAgICAgZG8geyBpZiAoZmlyc3RfcGFzcykgKytuZXh0OyBlbHNl
IGluc25zW25leHQrK10uaW50X3ZhbCA9IGdldDF1IChwYyk7IH0gd2hpbGUgKDApOwogICAgICAg
ICAgICAgIGRvIHsgaWYgKGZpcnN0X3Bhc3MpICsrbmV4dDsgZWxzZSBpbnNuc1tuZXh0KytdLmlu
dF92YWwgPSBnZXQxcyAocGMgKyAxKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgICAgICAgcGMgKz0g
MjsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2Ugb3BfbGRjX3c6CiAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgaW50IGluZGV4ID0gZ2V0MnUgKHBjKTsKICAgICAg
ICAgICAgICAgIHBjICs9IDI7CiAgICAgICAgICAgICAgICBkbyB7IGlmIChmaXJzdF9wYXNzKSAr
K25leHQ7IGVsc2UgaW5zbnNbbmV4dCsrXS5kYXR1bSA9IHBvb2xfZGF0YVtpbmRleF0ubzsgfSB3
aGlsZSAoMCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAg
ICAgY2FzZSBvcF9sZGMyX3c6CiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaW50IGlu
ZGV4ID0gZ2V0MnUgKHBjKTsKICAgICAgICAgICAgICAgIHBjICs9IDI7CiAgICAgICAgICAgICAg
ICBkbyB7IGlmIChmaXJzdF9wYXNzKSArK25leHQ7IGVsc2UgaW5zbnNbbmV4dCsrXS5kYXR1bSA9
ICZwb29sX2RhdGFbaW5kZXhdOyB9IHdoaWxlICgwKTsKICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIG9wX3NpcHVzaDoKICAgICAgICAgICAgICBk
byB7IGlmIChmaXJzdF9wYXNzKSArK25leHQ7IGVsc2UgaW5zbnNbbmV4dCsrXS5pbnRfdmFsID0g
Z2V0MnMgKHBjKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgICAgICAgcGMgKz0gMjsKICAgICAgICAg
ICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2Ugb3BfbmV3OgogICAgICAgICAgICBjYXNlIG9w
X2dldHN0YXRpYzoKICAgICAgICAgICAgY2FzZSBvcF9nZXRmaWVsZDoKICAgICAgICAgICAgY2Fz
ZSBvcF9wdXRmaWVsZDoKICAgICAgICAgICAgY2FzZSBvcF9wdXRzdGF0aWM6CiAgICAgICAgICAg
IGNhc2Ugb3BfYW5ld2FycmF5OgogICAgICAgICAgICBjYXNlIG9wX2luc3RhbmNlb2Y6CiAgICAg
ICAgICAgIGNhc2Ugb3BfY2hlY2tjYXN0OgogICAgICAgICAgICBjYXNlIG9wX2ludm9rZXNwZWNp
YWw6CiAgICAgICAgICAgIGNhc2Ugb3BfaW52b2tlc3RhdGljOgogICAgICAgICAgICBjYXNlIG9w
X2ludm9rZXZpcnR1YWw6CiAgICAgICAgICAgICAgZG8geyBpZiAoZmlyc3RfcGFzcykgKytuZXh0
OyBlbHNlIGluc25zW25leHQrK10uaW50X3ZhbCA9IGdldDJ1IChwYyk7IH0gd2hpbGUgKDApOwog
ICAgICAgICAgICAgIHBjICs9IDI7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBj
YXNlIG9wX211bHRpYW5ld2FycmF5OgogICAgICAgICAgICAgIGRvIHsgaWYgKGZpcnN0X3Bhc3Mp
ICsrbmV4dDsgZWxzZSBpbnNuc1tuZXh0KytdLmludF92YWwgPSBnZXQydSAocGMpOyB9IHdoaWxl
ICgwKTsKICAgICAgICAgICAgICBkbyB7IGlmIChmaXJzdF9wYXNzKSArK25leHQ7IGVsc2UgaW5z
bnNbbmV4dCsrXS5pbnRfdmFsID0gZ2V0MXUgKHBjICsgMik7IH0gd2hpbGUgKDApOwogICAgICAg
ICAgICAgIHBjICs9IDM7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIG9w
X2pzcjoKICAgICAgICAgICAgY2FzZSBvcF9pZmVxOgogICAgICAgICAgICBjYXNlIG9wX2lmbmU6
CiAgICAgICAgICAgIGNhc2Ugb3BfaWZsdDoKICAgICAgICAgICAgY2FzZSBvcF9pZmdlOgogICAg
ICAgICAgICBjYXNlIG9wX2lmZ3Q6CiAgICAgICAgICAgIGNhc2Ugb3BfaWZsZToKICAgICAgICAg
ICAgY2FzZSBvcF9pZl9pY21wZXE6CiAgICAgICAgICAgIGNhc2Ugb3BfaWZfaWNtcG5lOgogICAg
ICAgICAgICBjYXNlIG9wX2lmX2ljbXBsdDoKICAgICAgICAgICAgY2FzZSBvcF9pZl9pY21wZ2U6
CiAgICAgICAgICAgIGNhc2Ugb3BfaWZfaWNtcGd0OgogICAgICAgICAgICBjYXNlIG9wX2lmX2lj
bXBsZToKICAgICAgICAgICAgY2FzZSBvcF9pZl9hY21wZXE6CiAgICAgICAgICAgIGNhc2Ugb3Bf
aWZfYWNtcG5lOgogICAgICAgICAgICBjYXNlIG9wX2lmbnVsbDoKICAgICAgICAgICAgY2FzZSBv
cF9pZm5vbm51bGw6CiAgICAgICAgICAgIGNhc2Ugb3BfZ290bzoKICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gZ2V0MnMgKHBjKTsKICAgICAgICAgICAgICAgIHBj
ICs9IDI7CiAgICAgICAgICAgICAgICBkbyB7IGlmIChmaXJzdF9wYXNzKSArK25leHQ7IGVsc2Ug
aW5zbnNbbmV4dCsrXS5kYXR1bSA9ICZpbnNuc1twY19tYXBwaW5nW2Jhc2VfcGNfdmFsICsgb2Zm
c2V0XV07IH0gd2hpbGUgKDApOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVhazsK
CiAgICAgICAgICAgIGNhc2Ugb3BfdGFibGVzd2l0Y2g6CiAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgd2hpbGUgKChwYyAtIGNvZGVzdGFydCkgJSA0ICE9IDApCiAgICAgICAgICAgICAg
ICAgICsrcGM7CgogICAgICAgICAgICAgICAgamludCBkZWYgPSBnZXQ0IChwYyk7CiAgICAgICAg
ICAgICAgICBkbyB7IGlmIChmaXJzdF9wYXNzKSArK25leHQ7IGVsc2UgaW5zbnNbbmV4dCsrXS5k
YXR1bSA9ICZpbnNuc1twY19tYXBwaW5nW2Jhc2VfcGNfdmFsICsgZGVmXV07IH0gd2hpbGUgKDAp
OwogICAgICAgICAgICAgICAgcGMgKz0gNDsKCiAgICAgICAgICAgICAgICBpbnQgbG93ID0gZ2V0
NCAocGMpOwogICAgICAgICAgICAgICAgZG8geyBpZiAoZmlyc3RfcGFzcykgKytuZXh0OyBlbHNl
IGluc25zW25leHQrK10uaW50X3ZhbCA9IGxvdzsgfSB3aGlsZSAoMCk7CiAgICAgICAgICAgICAg
ICBwYyArPSA0OwogICAgICAgICAgICAgICAgaW50IGhpZ2ggPSBnZXQ0IChwYyk7CiAgICAgICAg
ICAgICAgICBkbyB7IGlmIChmaXJzdF9wYXNzKSArK25leHQ7IGVsc2UgaW5zbnNbbmV4dCsrXS5p
bnRfdmFsID0gaGlnaDsgfSB3aGlsZSAoMCk7CiAgICAgICAgICAgICAgICBwYyArPSA0OwoKICAg
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSBsb3c7IGkgPD0gaGlnaDsgKytpKQogICAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZG8geyBpZiAoZmlyc3RfcGFzcykgKytuZXh0
OyBlbHNlIGluc25zW25leHQrK10uZGF0dW0gPSAmaW5zbnNbcGNfbWFwcGluZ1tiYXNlX3BjX3Zh
bCArIGdldDQgKHBjKV1dOyB9IHdoaWxlICgwKTsKICAgICAgICAgICAgICAgICAgICBwYyArPSA0
OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGJyZWFr
OwoKICAgICAgICAgICAgY2FzZSBvcF9sb29rdXBzd2l0Y2g6CiAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgd2hpbGUgKChwYyAtIGNvZGVzdGFydCkgJSA0ICE9IDApCiAgICAgICAgICAg
ICAgICAgICsrcGM7CgogICAgICAgICAgICAgICAgamludCBkZWYgPSBnZXQ0IChwYyk7CiAgICAg
ICAgICAgICAgICBkbyB7IGlmIChmaXJzdF9wYXNzKSArK25leHQ7IGVsc2UgaW5zbnNbbmV4dCsr
XS5kYXR1bSA9ICZpbnNuc1twY19tYXBwaW5nW2Jhc2VfcGNfdmFsICsgZGVmXV07IH0gd2hpbGUg
KDApOwogICAgICAgICAgICAgICAgcGMgKz0gNDsKCiAgICAgICAgICAgICAgICBqaW50IG5wYWly
cyA9IGdldDQgKHBjKTsKICAgICAgICAgICAgICAgIHBjICs9IDQ7CiAgICAgICAgICAgICAgICBk
byB7IGlmIChmaXJzdF9wYXNzKSArK25leHQ7IGVsc2UgaW5zbnNbbmV4dCsrXS5pbnRfdmFsID0g
bnBhaXJzOyB9IHdoaWxlICgwKTsKCiAgICAgICAgICAgICAgICB3aGlsZSAobnBhaXJzLS0gPiAw
KQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgamludCBtYXRjaCA9IGdl
dDQgKHBjKTsKICAgICAgICAgICAgICAgICAgICBqaW50IG9mZnNldCA9IGdldDQgKHBjICsgNCk7
CiAgICAgICAgICAgICAgICAgICAgZG8geyBpZiAoZmlyc3RfcGFzcykgKytuZXh0OyBlbHNlIGlu
c25zW25leHQrK10uaW50X3ZhbCA9IG1hdGNoOyB9IHdoaWxlICgwKTsKICAgICAgICAgICAgICAg
ICAgICBkbyB7IGlmIChmaXJzdF9wYXNzKSArK25leHQ7IGVsc2UgaW5zbnNbbmV4dCsrXS5kYXR1
bSA9ICZpbnNuc1twY19tYXBwaW5nW2Jhc2VfcGNfdmFsICsgb2Zmc2V0XV07IH0gd2hpbGUgKDAp
OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGJyZWFr
OwoKICAgICAgICAgICAgY2FzZSBvcF9pbnZva2VpbnRlcmZhY2U6CiAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgamludCBpbmRleCA9IGdldDJ1IChwYyk7CiAgICAgICAgICAgICAgICBw
YyArPSAyOwoKICAgICAgICAgICAgICAgIHBjICs9IDI7CiAgICAgICAgICAgICAgICBkbyB7IGlm
IChmaXJzdF9wYXNzKSArK25leHQ7IGVsc2UgaW5zbnNbbmV4dCsrXS5pbnRfdmFsID0gaW5kZXg7
IH0gd2hpbGUgKDApOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVhazsKCiAgICAg
ICAgICAgIGNhc2Ugb3Bfd2lkZToKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBvcGNv
ZGUgPSAoamF2YV9vcGNvZGUpIGdldDF1IChwYyk7CiAgICAgICAgICAgICAgICBwYyArPSAxOwog
ICAgICAgICAgICAgICAgamludCB2YWwgPSBnZXQydSAocGMpOwogICAgICAgICAgICAgICAgcGMg
Kz0gMjsKCgoKCiAgICAgICAgICAgICAgICBpZiAoISBmaXJzdF9wYXNzKQogICAgICAgICAgICAg
ICAgICBpbnNuc1tuZXh0IC0gMV0uaW5zbiA9ICh2b2lkICopIGluc25fdGFyZ2V0c1tvcGNvZGVd
OwogICAgICAgICAgICAgICAgZG8geyBpZiAoZmlyc3RfcGFzcykgKytuZXh0OyBlbHNlIGluc25z
W25leHQrK10uaW50X3ZhbCA9IHZhbDsgfSB3aGlsZSAoMCk7CgogICAgICAgICAgICAgICAgaWYg
KG9wY29kZSA9PSBvcF9paW5jKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgZG8geyBpZiAoZmlyc3RfcGFzcykgKytuZXh0OyBlbHNlIGluc25zW25leHQrK10uaW50X3Zh
bCA9IGdldDJzIChwYyk7IH0gd2hpbGUgKDApOwogICAgICAgICAgICAgICAgICAgIHBjICs9IDI7
CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnJlYWs7
CgogICAgICAgICAgICBjYXNlIG9wX2pzcl93OgogICAgICAgICAgICBjYXNlIG9wX2dvdG9fdzoK
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBqaW50IG9mZnNldCA9IGdldDQgKHBjKTsK
ICAgICAgICAgICAgICAgIHBjICs9IDQ7CiAgICAgICAgICAgICAgICBkbyB7IGlmIChmaXJzdF9w
YXNzKSArK25leHQ7IGVsc2UgaW5zbnNbbmV4dCsrXS5kYXR1bSA9ICZpbnNuc1twY19tYXBwaW5n
W2Jhc2VfcGNfdmFsICsgb2Zmc2V0XV07IH0gd2hpbGUgKDApOwogICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGRlZmF1bHQ6CgogICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKCiAgX0p2X0ludGVycEV4Y2VwdGlv
biAqZXhjID0gZXhjZXB0aW9ucyAoKTsKICBmb3IgKGludCBpID0gMDsgaSA8IGV4Y19jb3VudDsg
KytpKQogICAgewogICAgICBleGNbaV0uc3RhcnRfcGMucCA9ICZpbnNuc1twY19tYXBwaW5nW2V4
Y1tpXS5zdGFydF9wYy5pXV07CiAgICAgIGV4Y1tpXS5lbmRfcGMucCA9ICZpbnNuc1twY19tYXBw
aW5nW2V4Y1tpXS5lbmRfcGMuaV1dOwogICAgICBleGNbaV0uaGFuZGxlcl9wYy5wID0gJmluc25z
W3BjX21hcHBpbmdbZXhjW2ldLmhhbmRsZXJfcGMuaV1dOwogICAgICBqY2xhc3MgaGFuZGxlciA9
IChfSnZfUmVzb2x2ZVBvb2xFbnRyeSAoZGVmaW5pbmdfY2xhc3MsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNbaV0uaGFuZGxlcl90eXBlLmkpKS5jbGF6
ejsKICAgICAgZXhjW2ldLmhhbmRsZXJfdHlwZS5wID0gaGFuZGxlcjsKICAgIH0KCiAgcHJlcGFy
ZWQgPSBpbnNuczsKfQoKdm9pZApfSnZfSW50ZXJwTWV0aG9kOjpydW4gKHZvaWQgKnJldHAsIGZm
aV9yYXcgKmFyZ3MpCnsKICB1c2luZyBuYW1lc3BhY2UgamF2YTo6bGFuZzo6cmVmbGVjdDsKCiAg
X0p2X3dvcmQgc3RhY2tbbWF4X3N0YWNrXTsKICBfSnZfd29yZCAqc3AgPSBzdGFjazsKCiAgX0p2
X3dvcmQgbG9jYWxzW21heF9sb2NhbHNdOwoKCgoKICBtZW1jcHkgKCh2b2lkKikgbG9jYWxzLCAo
dm9pZCopIGFyZ3MsIGFyZ3NfcmF3X3NpemUpOwoKICBfSnZfd29yZCAqcG9vbF9kYXRhID0gZGVm
aW5pbmdfY2xhc3MtPmNvbnN0YW50cy5kYXRhOwoKCgogIHZvaWQgKCpmdW4pKCk7CiAgX0p2X1Jl
c29sdmVkTWV0aG9kKiBybWV0aDsKICBpbnQgdG1wdmFsOwoKCgogIHN0YXRpYyBjb25zdCB2b2lk
ICpjb25zdCBpbnNuX3RhcmdldFtdID0KICB7CiAgICAwLAogICAgJiZpbnNuX2Fjb25zdF9udWxs
LAogICAgJiZpbnNuX2ljb25zdF9tMSwKICAgICYmaW5zbl9pY29uc3RfMCwKICAgICYmaW5zbl9p
Y29uc3RfMSwKICAgICYmaW5zbl9pY29uc3RfMiwKICAgICYmaW5zbl9pY29uc3RfMywKICAgICYm
aW5zbl9pY29uc3RfNCwKICAgICYmaW5zbl9pY29uc3RfNSwKICAgICYmaW5zbl9sY29uc3RfMCwK
ICAgICYmaW5zbl9sY29uc3RfMSwKICAgICYmaW5zbl9mY29uc3RfMCwKICAgICYmaW5zbl9mY29u
c3RfMSwKICAgICYmaW5zbl9mY29uc3RfMiwKICAgICYmaW5zbl9kY29uc3RfMCwKICAgICYmaW5z
bl9kY29uc3RfMSwKICAgICYmaW5zbl9iaXB1c2gsCiAgICAmJmluc25fc2lwdXNoLAogICAgJiZp
bnNuX2xkYywKICAgICYmaW5zbl9sZGNfdywKICAgICYmaW5zbl9sZGMyX3csCiAgICAmJmluc25f
aWxvYWQsCiAgICAmJmluc25fbGxvYWQsCiAgICAmJmluc25fZmxvYWQsCiAgICAmJmluc25fZGxv
YWQsCiAgICAmJmluc25fYWxvYWQsCiAgICAmJmluc25faWxvYWRfMCwKICAgICYmaW5zbl9pbG9h
ZF8xLAogICAgJiZpbnNuX2lsb2FkXzIsCiAgICAmJmluc25faWxvYWRfMywKICAgICYmaW5zbl9s
bG9hZF8wLAogICAgJiZpbnNuX2xsb2FkXzEsCiAgICAmJmluc25fbGxvYWRfMiwKICAgICYmaW5z
bl9sbG9hZF8zLAogICAgJiZpbnNuX2Zsb2FkXzAsCiAgICAmJmluc25fZmxvYWRfMSwKICAgICYm
aW5zbl9mbG9hZF8yLAogICAgJiZpbnNuX2Zsb2FkXzMsCiAgICAmJmluc25fZGxvYWRfMCwKICAg
ICYmaW5zbl9kbG9hZF8xLAogICAgJiZpbnNuX2Rsb2FkXzIsCiAgICAmJmluc25fZGxvYWRfMywK
ICAgICYmaW5zbl9hbG9hZF8wLAogICAgJiZpbnNuX2Fsb2FkXzEsCiAgICAmJmluc25fYWxvYWRf
MiwKICAgICYmaW5zbl9hbG9hZF8zLAogICAgJiZpbnNuX2lhbG9hZCwKICAgICYmaW5zbl9sYWxv
YWQsCiAgICAmJmluc25fZmFsb2FkLAogICAgJiZpbnNuX2RhbG9hZCwKICAgICYmaW5zbl9hYWxv
YWQsCiAgICAmJmluc25fYmFsb2FkLAogICAgJiZpbnNuX2NhbG9hZCwKICAgICYmaW5zbl9zYWxv
YWQsCiAgICAmJmluc25faXN0b3JlLAogICAgJiZpbnNuX2xzdG9yZSwKICAgICYmaW5zbl9mc3Rv
cmUsCiAgICAmJmluc25fZHN0b3JlLAogICAgJiZpbnNuX2FzdG9yZSwKICAgICYmaW5zbl9pc3Rv
cmVfMCwKICAgICYmaW5zbl9pc3RvcmVfMSwKICAgICYmaW5zbl9pc3RvcmVfMiwKICAgICYmaW5z
bl9pc3RvcmVfMywKICAgICYmaW5zbl9sc3RvcmVfMCwKICAgICYmaW5zbl9sc3RvcmVfMSwKICAg
ICYmaW5zbl9sc3RvcmVfMiwKICAgICYmaW5zbl9sc3RvcmVfMywKICAgICYmaW5zbl9mc3RvcmVf
MCwKICAgICYmaW5zbl9mc3RvcmVfMSwKICAgICYmaW5zbl9mc3RvcmVfMiwKICAgICYmaW5zbl9m
c3RvcmVfMywKICAgICYmaW5zbl9kc3RvcmVfMCwKICAgICYmaW5zbl9kc3RvcmVfMSwKICAgICYm
aW5zbl9kc3RvcmVfMiwKICAgICYmaW5zbl9kc3RvcmVfMywKICAgICYmaW5zbl9hc3RvcmVfMCwK
ICAgICYmaW5zbl9hc3RvcmVfMSwKICAgICYmaW5zbl9hc3RvcmVfMiwKICAgICYmaW5zbl9hc3Rv
cmVfMywKICAgICYmaW5zbl9pYXN0b3JlLAogICAgJiZpbnNuX2xhc3RvcmUsCiAgICAmJmluc25f
ZmFzdG9yZSwKICAgICYmaW5zbl9kYXN0b3JlLAogICAgJiZpbnNuX2Fhc3RvcmUsCiAgICAmJmlu
c25fYmFzdG9yZSwKICAgICYmaW5zbl9jYXN0b3JlLAogICAgJiZpbnNuX3Nhc3RvcmUsCiAgICAm
Jmluc25fcG9wLAogICAgJiZpbnNuX3BvcDIsCiAgICAmJmluc25fZHVwLAogICAgJiZpbnNuX2R1
cF94MSwKICAgICYmaW5zbl9kdXBfeDIsCiAgICAmJmluc25fZHVwMiwKICAgICYmaW5zbl9kdXAy
X3gxLAogICAgJiZpbnNuX2R1cDJfeDIsCiAgICAmJmluc25fc3dhcCwKICAgICYmaW5zbl9pYWRk
LAogICAgJiZpbnNuX2xhZGQsCiAgICAmJmluc25fZmFkZCwKICAgICYmaW5zbl9kYWRkLAogICAg
JiZpbnNuX2lzdWIsCiAgICAmJmluc25fbHN1YiwKICAgICYmaW5zbl9mc3ViLAogICAgJiZpbnNu
X2RzdWIsCiAgICAmJmluc25faW11bCwKICAgICYmaW5zbl9sbXVsLAogICAgJiZpbnNuX2ZtdWws
CiAgICAmJmluc25fZG11bCwKICAgICYmaW5zbl9pZGl2LAogICAgJiZpbnNuX2xkaXYsCiAgICAm
Jmluc25fZmRpdiwKICAgICYmaW5zbl9kZGl2LAogICAgJiZpbnNuX2lyZW0sCiAgICAmJmluc25f
bHJlbSwKICAgICYmaW5zbl9mcmVtLAogICAgJiZpbnNuX2RyZW0sCiAgICAmJmluc25faW5lZywK
ICAgICYmaW5zbl9sbmVnLAogICAgJiZpbnNuX2ZuZWcsCiAgICAmJmluc25fZG5lZywKICAgICYm
aW5zbl9pc2hsLAogICAgJiZpbnNuX2xzaGwsCiAgICAmJmluc25faXNociwKICAgICYmaW5zbl9s
c2hyLAogICAgJiZpbnNuX2l1c2hyLAogICAgJiZpbnNuX2x1c2hyLAogICAgJiZpbnNuX2lhbmQs
CiAgICAmJmluc25fbGFuZCwKICAgICYmaW5zbl9pb3IsCiAgICAmJmluc25fbG9yLAogICAgJiZp
bnNuX2l4b3IsCiAgICAmJmluc25fbHhvciwKICAgICYmaW5zbl9paW5jLAogICAgJiZpbnNuX2ky
bCwKICAgICYmaW5zbl9pMmYsCiAgICAmJmluc25faTJkLAogICAgJiZpbnNuX2wyaSwKICAgICYm
aW5zbl9sMmYsCiAgICAmJmluc25fbDJkLAogICAgJiZpbnNuX2YyaSwKICAgICYmaW5zbl9mMmws
CiAgICAmJmluc25fZjJkLAogICAgJiZpbnNuX2QyaSwKICAgICYmaW5zbl9kMmwsCiAgICAmJmlu
c25fZDJmLAogICAgJiZpbnNuX2kyYiwKICAgICYmaW5zbl9pMmMsCiAgICAmJmluc25faTJzLAog
ICAgJiZpbnNuX2xjbXAsCiAgICAmJmluc25fZmNtcGwsCiAgICAmJmluc25fZmNtcGcsCiAgICAm
Jmluc25fZGNtcGwsCiAgICAmJmluc25fZGNtcGcsCiAgICAmJmluc25faWZlcSwKICAgICYmaW5z
bl9pZm5lLAogICAgJiZpbnNuX2lmbHQsCiAgICAmJmluc25faWZnZSwKICAgICYmaW5zbl9pZmd0
LAogICAgJiZpbnNuX2lmbGUsCiAgICAmJmluc25faWZfaWNtcGVxLAogICAgJiZpbnNuX2lmX2lj
bXBuZSwKICAgICYmaW5zbl9pZl9pY21wbHQsCiAgICAmJmluc25faWZfaWNtcGdlLAogICAgJiZp
bnNuX2lmX2ljbXBndCwKICAgICYmaW5zbl9pZl9pY21wbGUsCiAgICAmJmluc25faWZfYWNtcGVx
LAogICAgJiZpbnNuX2lmX2FjbXBuZSwKICAgICYmaW5zbl9nb3RvLAogICAgJiZpbnNuX2pzciwK
ICAgICYmaW5zbl9yZXQsCiAgICAmJmluc25fdGFibGVzd2l0Y2gsCiAgICAmJmluc25fbG9va3Vw
c3dpdGNoLAogICAgJiZpbnNuX2lyZXR1cm4sCiAgICAmJmluc25fbHJldHVybiwKICAgICYmaW5z
bl9mcmV0dXJuLAogICAgJiZpbnNuX2RyZXR1cm4sCiAgICAmJmluc25fYXJldHVybiwKICAgICYm
aW5zbl9yZXR1cm4sCiAgICAmJmluc25fZ2V0c3RhdGljLAogICAgJiZpbnNuX3B1dHN0YXRpYywK
ICAgICYmaW5zbl9nZXRmaWVsZCwKICAgICYmaW5zbl9wdXRmaWVsZCwKICAgICYmaW5zbl9pbnZv
a2V2aXJ0dWFsLAogICAgJiZpbnNuX2ludm9rZXNwZWNpYWwsCiAgICAmJmluc25faW52b2tlc3Rh
dGljLAogICAgJiZpbnNuX2ludm9rZWludGVyZmFjZSwKICAgIDAsCiAgICAmJmluc25fbmV3LAog
ICAgJiZpbnNuX25ld2FycmF5LAogICAgJiZpbnNuX2FuZXdhcnJheSwKICAgICYmaW5zbl9hcnJh
eWxlbmd0aCwKICAgICYmaW5zbl9hdGhyb3csCiAgICAmJmluc25fY2hlY2tjYXN0LAogICAgJiZp
bnNuX2luc3RhbmNlb2YsCiAgICAmJmluc25fbW9uaXRvcmVudGVyLAogICAgJiZpbnNuX21vbml0
b3JleGl0LAogICAgMCwKICAgICYmaW5zbl9tdWx0aWFuZXdhcnJheSwKICAgICYmaW5zbl9pZm51
bGwsCiAgICAmJmluc25faWZub25udWxsLAogICAgJiZpbnNuX2dvdG9fdywKICAgICYmaW5zbl9q
c3JfdywKICAgIDAKICB9OwoKCiAgaWYgKHByZXBhcmVkID09IF9fbnVsbCkKICAgIGNvbXBpbGUg
KGluc25fdGFyZ2V0KTsKCgogIGluc25fc2xvdCAqcGMgPSAoaW5zbl9zbG90ICopIHByZXBhcmVk
OwoKCgoKCgogIHRyeQogICAgewogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCgoKCgogICAg
aW5zbl9hbG9hZF8wOgogICAgICAoc3ArKyktPm8gPSBsb2NhbHNbMF0ubzsKICAgICAgZ290byAq
KChwYysrKS0+aW5zbik7CgogICAgaW5zbl9pbG9hZDoKICAgICAgKHNwKyspLT5pID0gbG9jYWxz
WygocGMrKyktPmludF92YWwpXS5pOwogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBp
bnNuX2lsb2FkXzE6CiAgICAgIChzcCsrKS0+aSA9IGxvY2Fsc1sxXS5pOwogICAgICBnb3RvICoo
KHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2ludm9rZXZpcnR1YWw6CiAgICAgIDsKICAgICAgewog
ICAgICAgIGludCBpbmRleCA9ICgocGMrKyktPmludF92YWwpOwoKCgoKCgoKICAgICAgICBybWV0
aCA9IChfSnZfUmVzb2x2ZVBvb2xFbnRyeSAoZGVmaW5pbmdfY2xhc3MsIGluZGV4KSkucm1ldGhv
ZDsKCiAgICAgICAgc3AgLT0gcm1ldGgtPnN0YWNrX2l0ZW1fY291bnQ7CgoKCiAgICAgICAgaWYg
KCEgc3BbMF0ubykKICAgICAgICAgIHRocm93IG5ldyBqYXZhOjpsYW5nOjpOdWxsUG9pbnRlckV4
Y2VwdGlvbjsKCiAgICAgICAgaWYgKHJtZXRoLT52dGFibGVfaW5kZXggPT0gLTEpCiAgICAgICAg
ICB7CgoKICAgICAgICAgICAgZnVuID0gKHZvaWQgKCopKCkpIHJtZXRoLT5tZXRob2QtPm5jb2Rl
OwogICAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIHsKICAgICAgICAgICAgam9iamVj
dCByY3YgPSBzcFswXS5vOwogICAgICAgICAgICBfSnZfVlRhYmxlICp0YWJsZSA9ICooX0p2X1ZU
YWJsZSoqKSByY3Y7CiAgICAgICAgICAgIGZ1biA9ICh2b2lkICgqKSgpKSB0YWJsZS0+Z2V0X21l
dGhvZCAocm1ldGgtPnZ0YWJsZV9pbmRleCk7CiAgICAgICAgICB9CgoKCiAgICAgICAgcGNbLTJd
Lmluc24gPSAmJmludm9rZXZpcnR1YWxfcmVzb2x2ZWQ7CiAgICAgICAgcGNbLTFdLmRhdHVtID0g
cm1ldGg7CiAgICAgIH0KICAgICAgZ290byBwZXJmb3JtX2ludm9rZTsKCiAgICBpbnZva2V2aXJ0
dWFsX3Jlc29sdmVkOgogICAgICA7CiAgICAgIHsKICAgICAgICBybWV0aCA9IChfSnZfUmVzb2x2
ZWRNZXRob2QgKikgKChwYysrKS0+ZGF0dW0pOwogICAgICAgIHNwIC09IHJtZXRoLT5zdGFja19p
dGVtX2NvdW50OwoKCgogICAgICAgIGlmICghIHNwWzBdLm8pCiAgICAgICAgICB0aHJvdyBuZXcg
amF2YTo6bGFuZzo6TnVsbFBvaW50ZXJFeGNlcHRpb247CgogICAgICAgIGlmIChybWV0aC0+dnRh
YmxlX2luZGV4ID09IC0xKQogICAgICAgICAgewoKCiAgICAgICAgICAgIGZ1biA9ICh2b2lkICgq
KSgpKSBybWV0aC0+bWV0aG9kLT5uY29kZTsKICAgICAgICAgIH0KICAgICAgICBlbHNlCiAgICAg
ICAgICB7CiAgICAgICAgICAgIGpvYmplY3QgcmN2ID0gc3BbMF0ubzsKICAgICAgICAgICAgX0p2
X1ZUYWJsZSAqdGFibGUgPSAqKF9Kdl9WVGFibGUqKikgcmN2OwogICAgICAgICAgICBmdW4gPSAo
dm9pZCAoKikoKSkgdGFibGUtPmdldF9tZXRob2QgKHJtZXRoLT52dGFibGVfaW5kZXgpOwogICAg
ICAgICAgfQogICAgICB9CiAgICAgIGdvdG8gcGVyZm9ybV9pbnZva2U7CgogICAgcGVyZm9ybV9p
bnZva2U6CiAgICAgIHsKCiAgICAgICAgZmZpX2NpZiAqY2lmID0gJnJtZXRoLT5jaWY7CiAgICAg
ICAgZmZpX3JhdyAqcmF3ID0gKGZmaV9yYXcqKSBzcDsKCiAgICAgICAgamRvdWJsZSBydmFsdWU7
CgoKCgogICAgICAgIGZmaV9yYXdfY2FsbCAoY2lmLCBmdW4sICh2b2lkKikmcnZhbHVlLCByYXcp
OwoKCgoKICAgICAgICBpbnQgcnR5cGUgPSBjaWYtPnJ0eXBlLT50eXBlOwoKCgogICAgICAgIGlm
IChydHlwZSA9PSAxNCkKICAgICAgICAgIHsKICAgICAgICAgICAgKHNwKyspLT5vID0gKCooam9i
amVjdCopJnJ2YWx1ZSk7CiAgICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAocnR5cGUgPT0gMTAp
CiAgICAgICAgICB7CiAgICAgICAgICAgIChzcCsrKS0+aSA9ICgqKGppbnQqKSZydmFsdWUpOwog
ICAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHJ0eXBlID09IDApCiAgICAgICAgICB7CgogICAg
ICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIHsKICAgICAgICAgICAgc3dpdGNoIChydHlw
ZSkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2FzZSA2OgogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICBqYnl0ZSB2YWx1ZSA9ICgqKGppbnQqKSZydmFsdWUpICYgMHhm
ZjsKICAgICAgICAgICAgICAgICAgKHNwKyspLT5pID0gKHZhbHVlKTsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICBjYXNlIDg6CiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGpzaG9ydCB2YWx1ZSA9ICgqKGppbnQqKSZydmFs
dWUpICYgMHhmZmZmOwogICAgICAgICAgICAgICAgICAoc3ArKyktPmkgPSAodmFsdWUpOwogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgIGNhc2Ug
NzoKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgamludCB2YWx1ZSA9ICgqKGpp
bnQqKSZydmFsdWUpICYgMHhmZmZmOwogICAgICAgICAgICAgICAgICAoc3ArKyktPmkgPSAodmFs
dWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAg
ICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgIChzcCsrKS0+ZiA9ICgqKGpmbG9hdCopJnJ2YWx1
ZSk7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAg
ICAgICAgICAgZG8geyBfSnZfd29yZDIgdzI7IHcyLmQ9KHJ2YWx1ZSk7IChzcCsrKS0+aWFbMF0g
PSB3Mi5pYVswXTsgKHNwKyspLT5pYVswXSA9IHcyLmlhWzFdOyB9IHdoaWxlICgwKTsKICAgICAg
ICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICBjYXNlIDEyOgogICAgICAgICAgICAgICAg
ZG8geyBfSnZfd29yZDIgdzI7IHcyLmw9KCooamxvbmcqKSZydmFsdWUpOyAoc3ArKyktPmlhWzBd
ID0gdzIuaWFbMF07IChzcCsrKS0+aWFbMF0gPSB3Mi5pYVsxXTsgfSB3aGlsZSAoMCk7CiAgICAg
ICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
IHRocm93X2ludGVybmFsX2Vycm9yICgidW5rbm93biByZXR1cm4gdHlwZSBpbiBpbnZva2VYWFgi
KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgIH0KICAgICAgZ290byAqKChwYysr
KS0+aW5zbik7CgogICAgaW5zbl9hY29uc3RfbnVsbDoKICAgICAgKHNwKyspLT5vID0gKF9fbnVs
bCk7CiAgICAgIGdvdG8gKigocGMrKyktPmluc24pOwoKICAgIGluc25faWNvbnN0X20xOgogICAg
ICAoc3ArKyktPmkgPSAoLTEpOwogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNu
X2ljb25zdF8wOgogICAgICAoc3ArKyktPmkgPSAoMCk7CiAgICAgIGdvdG8gKigocGMrKyktPmlu
c24pOwoKICAgIGluc25faWNvbnN0XzE6CiAgICAgIChzcCsrKS0+aSA9ICgxKTsKICAgICAgZ290
byAqKChwYysrKS0+aW5zbik7CgogICAgaW5zbl9pY29uc3RfMjoKICAgICAgKHNwKyspLT5pID0g
KDIpOwogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2ljb25zdF8zOgogICAg
ICAoc3ArKyktPmkgPSAoMyk7CiAgICAgIGdvdG8gKigocGMrKyktPmluc24pOwoKICAgIGluc25f
aWNvbnN0XzQ6CiAgICAgIChzcCsrKS0+aSA9ICg0KTsKICAgICAgZ290byAqKChwYysrKS0+aW5z
bik7CgogICAgaW5zbl9pY29uc3RfNToKICAgICAgKHNwKyspLT5pID0gKDUpOwogICAgICBnb3Rv
ICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2xjb25zdF8wOgogICAgICBkbyB7IF9Kdl93b3Jk
MiB3MjsgdzIubD0oMCk7IChzcCsrKS0+aWFbMF0gPSB3Mi5pYVswXTsgKHNwKyspLT5pYVswXSA9
IHcyLmlhWzFdOyB9IHdoaWxlICgwKTsKICAgICAgZ290byAqKChwYysrKS0+aW5zbik7CgogICAg
aW5zbl9sY29uc3RfMToKICAgICAgZG8geyBfSnZfd29yZDIgdzI7IHcyLmw9KDEpOyAoc3ArKykt
PmlhWzBdID0gdzIuaWFbMF07IChzcCsrKS0+aWFbMF0gPSB3Mi5pYVsxXTsgfSB3aGlsZSAoMCk7
CiAgICAgIGdvdG8gKigocGMrKyktPmluc24pOwoKICAgIGluc25fZmNvbnN0XzA6CiAgICAgIChz
cCsrKS0+ZiA9ICgwKTsKICAgICAgZ290byAqKChwYysrKS0+aW5zbik7CgogICAgaW5zbl9mY29u
c3RfMToKICAgICAgKHNwKyspLT5mID0gKDEpOwogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsK
CiAgICBpbnNuX2Zjb25zdF8yOgogICAgICAoc3ArKyktPmYgPSAoMik7CiAgICAgIGdvdG8gKigo
cGMrKyktPmluc24pOwoKICAgIGluc25fZGNvbnN0XzA6CiAgICAgIGRvIHsgX0p2X3dvcmQyIHcy
OyB3Mi5kPSgwKTsgKHNwKyspLT5pYVswXSA9IHcyLmlhWzBdOyAoc3ArKyktPmlhWzBdID0gdzIu
aWFbMV07IH0gd2hpbGUgKDApOwogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNu
X2Rjb25zdF8xOgogICAgICBkbyB7IF9Kdl93b3JkMiB3MjsgdzIuZD0oMSk7IChzcCsrKS0+aWFb
MF0gPSB3Mi5pYVswXTsgKHNwKyspLT5pYVswXSA9IHcyLmlhWzFdOyB9IHdoaWxlICgwKTsKICAg
ICAgZ290byAqKChwYysrKS0+aW5zbik7CgogICAgaW5zbl9iaXB1c2g6CiAgICBpbnNuX3NpcHVz
aDoKICAgICAgKHNwKyspLT5pID0gKCgocGMrKyktPmludF92YWwpKTsKICAgICAgZ290byAqKChw
YysrKS0+aW5zbik7CgogICAgaW5zbl9sZGM6CiAgICBpbnNuX2xkY193OgogICAgICB7CiAgICAg
ICAgKHNwKyspLT5vID0gKChqb2JqZWN0KSAoKHBjKyspLT5kYXR1bSkpOwogICAgICB9CiAgICAg
IGdvdG8gKigocGMrKyktPmluc24pOwoKICAgIGluc25fbGRjMl93OgogICAgICB7CiAgICAgICAg
dm9pZCAqd2hlcmUgPSAoKHBjKyspLT5kYXR1bSk7CiAgICAgICAgbWVtY3B5IChzcCwgd2hlcmUs
IDIqc2l6ZW9mIChfSnZfd29yZCkpOwogICAgICAgIHNwICs9IDI7CiAgICAgIH0KICAgICAgZ290
byAqKChwYysrKS0+aW5zbik7CgogICAgaW5zbl9sbG9hZDoKICAgICAgZG8geyBqaW50IF9faWR4
ID0gKCgocGMrKyktPmludF92YWwpKTsgKHNwKyspLT5pYVswXSA9IGxvY2Fsc1tfX2lkeF0uaWFb
MF07IChzcCsrKS0+aWFbMF0gPSBsb2NhbHNbX19pZHgrMV0uaWFbMF07IH0gd2hpbGUgKDApOwog
ICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2Zsb2FkOgogICAgICAoc3ArKykt
PmYgPSBsb2NhbHNbKChwYysrKS0+aW50X3ZhbCldLmY7CiAgICAgIGdvdG8gKigocGMrKyktPmlu
c24pOwoKICAgIGluc25fZGxvYWQ6CiAgICAgIGRvIHsgamludCBfX2lkeCA9ICgoKHBjKyspLT5p
bnRfdmFsKSk7IChzcCsrKS0+aWFbMF0gPSBsb2NhbHNbX19pZHhdLmlhWzBdOyAoc3ArKyktPmlh
WzBdID0gbG9jYWxzW19faWR4KzFdLmlhWzBdOyB9IHdoaWxlICgwKTsKICAgICAgZ290byAqKChw
YysrKS0+aW5zbik7CgogICAgaW5zbl9hbG9hZDoKICAgICAgKHNwKyspLT5vID0gbG9jYWxzWygo
cGMrKyktPmludF92YWwpXS5vOwogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNu
X2lsb2FkXzA6CiAgICAgIChzcCsrKS0+aSA9IGxvY2Fsc1swXS5pOwogICAgICBnb3RvICooKHBj
KyspLT5pbnNuKTsKCiAgICBpbnNuX2lsb2FkXzI6CiAgICAgIChzcCsrKS0+aSA9IGxvY2Fsc1sy
XS5pOwogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2lsb2FkXzM6CiAgICAg
IChzcCsrKS0+aSA9IGxvY2Fsc1szXS5pOwogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAg
ICBpbnNuX2xsb2FkXzA6CiAgICAgIGRvIHsgamludCBfX2lkeCA9ICgwKTsgKHNwKyspLT5pYVsw
XSA9IGxvY2Fsc1tfX2lkeF0uaWFbMF07IChzcCsrKS0+aWFbMF0gPSBsb2NhbHNbX19pZHgrMV0u
aWFbMF07IH0gd2hpbGUgKDApOwogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNu
X2xsb2FkXzE6CiAgICAgIGRvIHsgamludCBfX2lkeCA9ICgxKTsgKHNwKyspLT5pYVswXSA9IGxv
Y2Fsc1tfX2lkeF0uaWFbMF07IChzcCsrKS0+aWFbMF0gPSBsb2NhbHNbX19pZHgrMV0uaWFbMF07
IH0gd2hpbGUgKDApOwogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2xsb2Fk
XzI6CiAgICAgIGRvIHsgamludCBfX2lkeCA9ICgyKTsgKHNwKyspLT5pYVswXSA9IGxvY2Fsc1tf
X2lkeF0uaWFbMF07IChzcCsrKS0+aWFbMF0gPSBsb2NhbHNbX19pZHgrMV0uaWFbMF07IH0gd2hp
bGUgKDApOwogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2xsb2FkXzM6CiAg
ICAgIGRvIHsgamludCBfX2lkeCA9ICgzKTsgKHNwKyspLT5pYVswXSA9IGxvY2Fsc1tfX2lkeF0u
aWFbMF07IChzcCsrKS0+aWFbMF0gPSBsb2NhbHNbX19pZHgrMV0uaWFbMF07IH0gd2hpbGUgKDAp
OwogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2Zsb2FkXzA6CiAgICAgIChz
cCsrKS0+ZiA9IGxvY2Fsc1swXS5mOwogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBp
bnNuX2Zsb2FkXzE6CiAgICAgIChzcCsrKS0+ZiA9IGxvY2Fsc1sxXS5mOwogICAgICBnb3RvICoo
KHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2Zsb2FkXzI6CiAgICAgIChzcCsrKS0+ZiA9IGxvY2Fs
c1syXS5mOwogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2Zsb2FkXzM6CiAg
ICAgIChzcCsrKS0+ZiA9IGxvY2Fsc1szXS5mOwogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsK
CiAgICBpbnNuX2Rsb2FkXzA6CiAgICAgIGRvIHsgamludCBfX2lkeCA9ICgwKTsgKHNwKyspLT5p
YVswXSA9IGxvY2Fsc1tfX2lkeF0uaWFbMF07IChzcCsrKS0+aWFbMF0gPSBsb2NhbHNbX19pZHgr
MV0uaWFbMF07IH0gd2hpbGUgKDApOwogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBp
bnNuX2Rsb2FkXzE6CiAgICAgIGRvIHsgamludCBfX2lkeCA9ICgxKTsgKHNwKyspLT5pYVswXSA9
IGxvY2Fsc1tfX2lkeF0uaWFbMF07IChzcCsrKS0+aWFbMF0gPSBsb2NhbHNbX19pZHgrMV0uaWFb
MF07IH0gd2hpbGUgKDApOwogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2Rs
b2FkXzI6CiAgICAgIGRvIHsgamludCBfX2lkeCA9ICgyKTsgKHNwKyspLT5pYVswXSA9IGxvY2Fs
c1tfX2lkeF0uaWFbMF07IChzcCsrKS0+aWFbMF0gPSBsb2NhbHNbX19pZHgrMV0uaWFbMF07IH0g
d2hpbGUgKDApOwogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2Rsb2FkXzM6
CiAgICAgIGRvIHsgamludCBfX2lkeCA9ICgzKTsgKHNwKyspLT5pYVswXSA9IGxvY2Fsc1tfX2lk
eF0uaWFbMF07IChzcCsrKS0+aWFbMF0gPSBsb2NhbHNbX19pZHgrMV0uaWFbMF07IH0gd2hpbGUg
KDApOwogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2Fsb2FkXzE6CiAgICAg
IChzcCsrKS0+byA9IGxvY2Fsc1sxXS5vOwogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAg
ICBpbnNuX2Fsb2FkXzI6CiAgICAgIChzcCsrKS0+byA9IGxvY2Fsc1syXS5vOwogICAgICBnb3Rv
ICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2Fsb2FkXzM6CiAgICAgIChzcCsrKS0+byA9IGxv
Y2Fsc1szXS5vOwogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2lhbG9hZDoK
ICAgICAgewogICAgICAgIGppbnQgaW5kZXggPSAoKGppbnQpICgtLXNwKS0+aSk7CiAgICAgICAg
amludEFycmF5IGFyciA9IChqaW50QXJyYXkpICgoLS1zcCktPm8pOwogICAgICAgIGRvIHsgOyB9
IHdoaWxlICgwKTsKICAgICAgICBkbyB7IGlmICgoKHVuc2lnbmVkKSBpbmRleCkgPj0gKHVuc2ln
bmVkKSAoYXJyLT5sZW5ndGgpKSBfSnZfVGhyb3dCYWRBcnJheUluZGV4IChpbmRleCk7IH0gd2hp
bGUgKDApOwogICAgICAgIChzcCsrKS0+aSA9IChlbGVtZW50cyhhcnIpW2luZGV4XSk7CiAgICAg
IH0KICAgICAgZ290byAqKChwYysrKS0+aW5zbik7CgogICAgaW5zbl9sYWxvYWQ6CiAgICAgIHsK
ICAgICAgICBqaW50IGluZGV4ID0gKChqaW50KSAoLS1zcCktPmkpOwogICAgICAgIGpsb25nQXJy
YXkgYXJyID0gKGpsb25nQXJyYXkpICgoLS1zcCktPm8pOwogICAgICAgIGRvIHsgOyB9IHdoaWxl
ICgwKTsKICAgICAgICBkbyB7IGlmICgoKHVuc2lnbmVkKSBpbmRleCkgPj0gKHVuc2lnbmVkKSAo
YXJyLT5sZW5ndGgpKSBfSnZfVGhyb3dCYWRBcnJheUluZGV4IChpbmRleCk7IH0gd2hpbGUgKDAp
OwogICAgICAgIGRvIHsgX0p2X3dvcmQyIHcyOyB3Mi5sPShlbGVtZW50cyhhcnIpW2luZGV4XSk7
IChzcCsrKS0+aWFbMF0gPSB3Mi5pYVswXTsgKHNwKyspLT5pYVswXSA9IHcyLmlhWzFdOyB9IHdo
aWxlICgwKTsKICAgICAgfQogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2Zh
bG9hZDoKICAgICAgewogICAgICAgIGppbnQgaW5kZXggPSAoKGppbnQpICgtLXNwKS0+aSk7CiAg
ICAgICAgamZsb2F0QXJyYXkgYXJyID0gKGpmbG9hdEFycmF5KSAoKC0tc3ApLT5vKTsKICAgICAg
ICBkbyB7IDsgfSB3aGlsZSAoMCk7CiAgICAgICAgZG8geyBpZiAoKCh1bnNpZ25lZCkgaW5kZXgp
ID49ICh1bnNpZ25lZCkgKGFyci0+bGVuZ3RoKSkgX0p2X1Rocm93QmFkQXJyYXlJbmRleCAoaW5k
ZXgpOyB9IHdoaWxlICgwKTsKICAgICAgICAoc3ArKyktPmYgPSAoZWxlbWVudHMoYXJyKVtpbmRl
eF0pOwogICAgICB9CiAgICAgIGdvdG8gKigocGMrKyktPmluc24pOwoKICAgIGluc25fZGFsb2Fk
OgogICAgICB7CiAgICAgICAgamludCBpbmRleCA9ICgoamludCkgKC0tc3ApLT5pKTsKICAgICAg
ICBqZG91YmxlQXJyYXkgYXJyID0gKGpkb3VibGVBcnJheSkgKCgtLXNwKS0+byk7CiAgICAgICAg
ZG8geyA7IH0gd2hpbGUgKDApOwogICAgICAgIGRvIHsgaWYgKCgodW5zaWduZWQpIGluZGV4KSA+
PSAodW5zaWduZWQpIChhcnItPmxlbmd0aCkpIF9Kdl9UaHJvd0JhZEFycmF5SW5kZXggKGluZGV4
KTsgfSB3aGlsZSAoMCk7CiAgICAgICAgZG8geyBfSnZfd29yZDIgdzI7IHcyLmQ9KGVsZW1lbnRz
KGFycilbaW5kZXhdKTsgKHNwKyspLT5pYVswXSA9IHcyLmlhWzBdOyAoc3ArKyktPmlhWzBdID0g
dzIuaWFbMV07IH0gd2hpbGUgKDApOwogICAgICB9CiAgICAgIGdvdG8gKigocGMrKyktPmluc24p
OwoKICAgIGluc25fYWFsb2FkOgogICAgICB7CiAgICAgICAgamludCBpbmRleCA9ICgoamludCkg
KC0tc3ApLT5pKTsKICAgICAgICBqb2JqZWN0QXJyYXkgYXJyID0gKGpvYmplY3RBcnJheSkgKCgt
LXNwKS0+byk7CiAgICAgICAgZG8geyA7IH0gd2hpbGUgKDApOwogICAgICAgIGRvIHsgaWYgKCgo
dW5zaWduZWQpIGluZGV4KSA+PSAodW5zaWduZWQpIChhcnItPmxlbmd0aCkpIF9Kdl9UaHJvd0Jh
ZEFycmF5SW5kZXggKGluZGV4KTsgfSB3aGlsZSAoMCk7CiAgICAgICAgKHNwKyspLT5vID0gKGVs
ZW1lbnRzKGFycilbaW5kZXhdKTsKICAgICAgfQogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsK
CiAgICBpbnNuX2JhbG9hZDoKICAgICAgewogICAgICAgIGppbnQgaW5kZXggPSAoKGppbnQpICgt
LXNwKS0+aSk7CiAgICAgICAgamJ5dGVBcnJheSBhcnIgPSAoamJ5dGVBcnJheSkgKCgtLXNwKS0+
byk7CiAgICAgICAgZG8geyA7IH0gd2hpbGUgKDApOwogICAgICAgIGRvIHsgaWYgKCgodW5zaWdu
ZWQpIGluZGV4KSA+PSAodW5zaWduZWQpIChhcnItPmxlbmd0aCkpIF9Kdl9UaHJvd0JhZEFycmF5
SW5kZXggKGluZGV4KTsgfSB3aGlsZSAoMCk7CiAgICAgICAgKHNwKyspLT5pID0gKGVsZW1lbnRz
KGFycilbaW5kZXhdKTsKICAgICAgfQogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBp
bnNuX2NhbG9hZDoKICAgICAgewogICAgICAgIGppbnQgaW5kZXggPSAoKGppbnQpICgtLXNwKS0+
aSk7CiAgICAgICAgamNoYXJBcnJheSBhcnIgPSAoamNoYXJBcnJheSkgKCgtLXNwKS0+byk7CiAg
ICAgICAgZG8geyA7IH0gd2hpbGUgKDApOwogICAgICAgIGRvIHsgaWYgKCgodW5zaWduZWQpIGlu
ZGV4KSA+PSAodW5zaWduZWQpIChhcnItPmxlbmd0aCkpIF9Kdl9UaHJvd0JhZEFycmF5SW5kZXgg
KGluZGV4KTsgfSB3aGlsZSAoMCk7CiAgICAgICAgKHNwKyspLT5pID0gKGVsZW1lbnRzKGFycilb
aW5kZXhdKTsKICAgICAgfQogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX3Nh
bG9hZDoKICAgICAgewogICAgICAgIGppbnQgaW5kZXggPSAoKGppbnQpICgtLXNwKS0+aSk7CiAg
ICAgICAganNob3J0QXJyYXkgYXJyID0gKGpzaG9ydEFycmF5KSAoKC0tc3ApLT5vKTsKICAgICAg
ICBkbyB7IDsgfSB3aGlsZSAoMCk7CiAgICAgICAgZG8geyBpZiAoKCh1bnNpZ25lZCkgaW5kZXgp
ID49ICh1bnNpZ25lZCkgKGFyci0+bGVuZ3RoKSkgX0p2X1Rocm93QmFkQXJyYXlJbmRleCAoaW5k
ZXgpOyB9IHdoaWxlICgwKTsKICAgICAgICAoc3ArKyktPmkgPSAoZWxlbWVudHMoYXJyKVtpbmRl
eF0pOwogICAgICB9CiAgICAgIGdvdG8gKigocGMrKyktPmluc24pOwoKICAgIGluc25faXN0b3Jl
OgogICAgICBsb2NhbHNbKChwYysrKS0+aW50X3ZhbCldLmkgPSAoLS1zcCktPmk7CiAgICAgIGdv
dG8gKigocGMrKyktPmluc24pOwoKICAgIGluc25fbHN0b3JlOgogICAgICBkbyB7IGppbnQgX19p
ZHggPSAoKChwYysrKS0+aW50X3ZhbCkpOyBsb2NhbHNbX19pZHgrMV0uaWFbMF0gPSAoLS1zcCkt
PmlhWzBdOyBsb2NhbHNbX19pZHhdLmlhWzBdID0gKC0tc3ApLT5pYVswXTsgfSB3aGlsZSAoMCk7
CiAgICAgIGdvdG8gKigocGMrKyktPmluc24pOwoKICAgIGluc25fZnN0b3JlOgogICAgICBsb2Nh
bHNbKChwYysrKS0+aW50X3ZhbCldLmYgPSAoLS1zcCktPmY7CiAgICAgIGdvdG8gKigocGMrKykt
Pmluc24pOwoKICAgIGluc25fZHN0b3JlOgogICAgICBkbyB7IGppbnQgX19pZHggPSAoKChwYysr
KS0+aW50X3ZhbCkpOyBsb2NhbHNbX19pZHgrMV0uaWFbMF0gPSAoLS1zcCktPmlhWzBdOyBsb2Nh
bHNbX19pZHhdLmlhWzBdID0gKC0tc3ApLT5pYVswXTsgfSB3aGlsZSAoMCk7CiAgICAgIGdvdG8g
KigocGMrKyktPmluc24pOwoKICAgIGluc25fYXN0b3JlOgogICAgICBsb2NhbHNbKChwYysrKS0+
aW50X3ZhbCldLm8gPSAoLS1zcCktPm87CiAgICAgIGdvdG8gKigocGMrKyktPmluc24pOwoKICAg
IGluc25faXN0b3JlXzA6CiAgICAgIGxvY2Fsc1swXS5pID0gKC0tc3ApLT5pOwogICAgICBnb3Rv
ICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2lzdG9yZV8xOgogICAgICBsb2NhbHNbMV0uaSA9
ICgtLXNwKS0+aTsKICAgICAgZ290byAqKChwYysrKS0+aW5zbik7CgogICAgaW5zbl9pc3RvcmVf
MjoKICAgICAgbG9jYWxzWzJdLmkgPSAoLS1zcCktPmk7CiAgICAgIGdvdG8gKigocGMrKyktPmlu
c24pOwoKICAgIGluc25faXN0b3JlXzM6CiAgICAgIGxvY2Fsc1szXS5pID0gKC0tc3ApLT5pOwog
ICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2xzdG9yZV8wOgogICAgICBkbyB7
IGppbnQgX19pZHggPSAoMCk7IGxvY2Fsc1tfX2lkeCsxXS5pYVswXSA9ICgtLXNwKS0+aWFbMF07
IGxvY2Fsc1tfX2lkeF0uaWFbMF0gPSAoLS1zcCktPmlhWzBdOyB9IHdoaWxlICgwKTsKICAgICAg
Z290byAqKChwYysrKS0+aW5zbik7CgogICAgaW5zbl9sc3RvcmVfMToKICAgICAgZG8geyBqaW50
IF9faWR4ID0gKDEpOyBsb2NhbHNbX19pZHgrMV0uaWFbMF0gPSAoLS1zcCktPmlhWzBdOyBsb2Nh
bHNbX19pZHhdLmlhWzBdID0gKC0tc3ApLT5pYVswXTsgfSB3aGlsZSAoMCk7CiAgICAgIGdvdG8g
KigocGMrKyktPmluc24pOwoKICAgIGluc25fbHN0b3JlXzI6CiAgICAgIGRvIHsgamludCBfX2lk
eCA9ICgyKTsgbG9jYWxzW19faWR4KzFdLmlhWzBdID0gKC0tc3ApLT5pYVswXTsgbG9jYWxzW19f
aWR4XS5pYVswXSA9ICgtLXNwKS0+aWFbMF07IH0gd2hpbGUgKDApOwogICAgICBnb3RvICooKHBj
KyspLT5pbnNuKTsKCiAgICBpbnNuX2xzdG9yZV8zOgogICAgICBkbyB7IGppbnQgX19pZHggPSAo
Myk7IGxvY2Fsc1tfX2lkeCsxXS5pYVswXSA9ICgtLXNwKS0+aWFbMF07IGxvY2Fsc1tfX2lkeF0u
aWFbMF0gPSAoLS1zcCktPmlhWzBdOyB9IHdoaWxlICgwKTsKICAgICAgZ290byAqKChwYysrKS0+
aW5zbik7CgogICAgaW5zbl9mc3RvcmVfMDoKICAgICAgbG9jYWxzWzBdLmYgPSAoLS1zcCktPmY7
CiAgICAgIGdvdG8gKigocGMrKyktPmluc24pOwoKICAgIGluc25fZnN0b3JlXzE6CiAgICAgIGxv
Y2Fsc1sxXS5mID0gKC0tc3ApLT5mOwogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBp
bnNuX2ZzdG9yZV8yOgogICAgICBsb2NhbHNbMl0uZiA9ICgtLXNwKS0+ZjsKICAgICAgZ290byAq
KChwYysrKS0+aW5zbik7CgogICAgaW5zbl9mc3RvcmVfMzoKICAgICAgbG9jYWxzWzNdLmYgPSAo
LS1zcCktPmY7CiAgICAgIGdvdG8gKigocGMrKyktPmluc24pOwoKICAgIGluc25fZHN0b3JlXzA6
CiAgICAgIGRvIHsgamludCBfX2lkeCA9ICgwKTsgbG9jYWxzW19faWR4KzFdLmlhWzBdID0gKC0t
c3ApLT5pYVswXTsgbG9jYWxzW19faWR4XS5pYVswXSA9ICgtLXNwKS0+aWFbMF07IH0gd2hpbGUg
KDApOwogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2RzdG9yZV8xOgogICAg
ICBkbyB7IGppbnQgX19pZHggPSAoMSk7IGxvY2Fsc1tfX2lkeCsxXS5pYVswXSA9ICgtLXNwKS0+
aWFbMF07IGxvY2Fsc1tfX2lkeF0uaWFbMF0gPSAoLS1zcCktPmlhWzBdOyB9IHdoaWxlICgwKTsK
ICAgICAgZ290byAqKChwYysrKS0+aW5zbik7CgogICAgaW5zbl9kc3RvcmVfMjoKICAgICAgZG8g
eyBqaW50IF9faWR4ID0gKDIpOyBsb2NhbHNbX19pZHgrMV0uaWFbMF0gPSAoLS1zcCktPmlhWzBd
OyBsb2NhbHNbX19pZHhdLmlhWzBdID0gKC0tc3ApLT5pYVswXTsgfSB3aGlsZSAoMCk7CiAgICAg
IGdvdG8gKigocGMrKyktPmluc24pOwoKICAgIGluc25fZHN0b3JlXzM6CiAgICAgIGRvIHsgamlu
dCBfX2lkeCA9ICgzKTsgbG9jYWxzW19faWR4KzFdLmlhWzBdID0gKC0tc3ApLT5pYVswXTsgbG9j
YWxzW19faWR4XS5pYVswXSA9ICgtLXNwKS0+aWFbMF07IH0gd2hpbGUgKDApOwogICAgICBnb3Rv
ICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2FzdG9yZV8wOgogICAgICBsb2NhbHNbMF0ubyA9
ICgtLXNwKS0+bzsKICAgICAgZ290byAqKChwYysrKS0+aW5zbik7CgogICAgaW5zbl9hc3RvcmVf
MToKICAgICAgbG9jYWxzWzFdLm8gPSAoLS1zcCktPm87CiAgICAgIGdvdG8gKigocGMrKyktPmlu
c24pOwoKICAgIGluc25fYXN0b3JlXzI6CiAgICAgIGxvY2Fsc1syXS5vID0gKC0tc3ApLT5vOwog
ICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2FzdG9yZV8zOgogICAgICBsb2Nh
bHNbM10ubyA9ICgtLXNwKS0+bzsKICAgICAgZ290byAqKChwYysrKS0+aW5zbik7CgogICAgaW5z
bl9pYXN0b3JlOgogICAgICB7CiAgICAgICAgamludCB2YWx1ZSA9ICgoamludCkgKC0tc3ApLT5p
KTsKICAgICAgICBqaW50IGluZGV4ID0gKChqaW50KSAoLS1zcCktPmkpOwogICAgICAgIGppbnRB
cnJheSBhcnIgPSAoamludEFycmF5KSAoKC0tc3ApLT5vKTsKICAgICAgICBkbyB7IDsgfSB3aGls
ZSAoMCk7CiAgICAgICAgZG8geyBpZiAoKCh1bnNpZ25lZCkgaW5kZXgpID49ICh1bnNpZ25lZCkg
KGFyci0+bGVuZ3RoKSkgX0p2X1Rocm93QmFkQXJyYXlJbmRleCAoaW5kZXgpOyB9IHdoaWxlICgw
KTsKICAgICAgICBlbGVtZW50cyhhcnIpW2luZGV4XSA9IHZhbHVlOwogICAgICB9CiAgICAgIGdv
dG8gKigocGMrKyktPmluc24pOwoKICAgIGluc25fbGFzdG9yZToKICAgICAgewogICAgICAgIGps
b25nIHZhbHVlID0gKHsgX0p2X3dvcmQyIHcyOyB3Mi5pYVsxXSA9ICgtLXNwKS0+aWFbMF07IHcy
LmlhWzBdID0gKC0tc3ApLT5pYVswXTsgdzIubDsgfSk7CiAgICAgICAgamludCBpbmRleCA9ICgo
amludCkgKC0tc3ApLT5pKTsKICAgICAgICBqbG9uZ0FycmF5IGFyciA9IChqbG9uZ0FycmF5KSAo
KC0tc3ApLT5vKTsKICAgICAgICBkbyB7IDsgfSB3aGlsZSAoMCk7CiAgICAgICAgZG8geyBpZiAo
KCh1bnNpZ25lZCkgaW5kZXgpID49ICh1bnNpZ25lZCkgKGFyci0+bGVuZ3RoKSkgX0p2X1Rocm93
QmFkQXJyYXlJbmRleCAoaW5kZXgpOyB9IHdoaWxlICgwKTsKICAgICAgICBlbGVtZW50cyhhcnIp
W2luZGV4XSA9IHZhbHVlOwogICAgICB9CiAgICAgIGdvdG8gKigocGMrKyktPmluc24pOwoKICAg
IGluc25fZmFzdG9yZToKICAgICAgewogICAgICAgIGpmbG9hdCB2YWx1ZSA9ICgoamZsb2F0KSAo
LS1zcCktPmYpOwogICAgICAgIGppbnQgaW5kZXggPSAoKGppbnQpICgtLXNwKS0+aSk7CiAgICAg
ICAgamZsb2F0QXJyYXkgYXJyID0gKGpmbG9hdEFycmF5KSAoKC0tc3ApLT5vKTsKICAgICAgICBk
byB7IDsgfSB3aGlsZSAoMCk7CiAgICAgICAgZG8geyBpZiAoKCh1bnNpZ25lZCkgaW5kZXgpID49
ICh1bnNpZ25lZCkgKGFyci0+bGVuZ3RoKSkgX0p2X1Rocm93QmFkQXJyYXlJbmRleCAoaW5kZXgp
OyB9IHdoaWxlICgwKTsKICAgICAgICBlbGVtZW50cyhhcnIpW2luZGV4XSA9IHZhbHVlOwogICAg
ICB9CiAgICAgIGdvdG8gKigocGMrKyktPmluc24pOwoKICAgIGluc25fZGFzdG9yZToKICAgICAg
ewogICAgICAgIGpkb3VibGUgdmFsdWUgPSAoeyBfSnZfd29yZDIgdzI7IHcyLmlhWzFdID0gKC0t
c3ApLT5pYVswXTsgdzIuaWFbMF0gPSAoLS1zcCktPmlhWzBdOyB3Mi5kOyB9KTsKICAgICAgICBq
aW50IGluZGV4ID0gKChqaW50KSAoLS1zcCktPmkpOwogICAgICAgIGpkb3VibGVBcnJheSBhcnIg
PSAoamRvdWJsZUFycmF5KSAoKC0tc3ApLT5vKTsKICAgICAgICBkbyB7IDsgfSB3aGlsZSAoMCk7
CiAgICAgICAgZG8geyBpZiAoKCh1bnNpZ25lZCkgaW5kZXgpID49ICh1bnNpZ25lZCkgKGFyci0+
bGVuZ3RoKSkgX0p2X1Rocm93QmFkQXJyYXlJbmRleCAoaW5kZXgpOyB9IHdoaWxlICgwKTsKICAg
ICAgICBlbGVtZW50cyhhcnIpW2luZGV4XSA9IHZhbHVlOwogICAgICB9CiAgICAgIGdvdG8gKigo
cGMrKyktPmluc24pOwoKICAgIGluc25fYWFzdG9yZToKICAgICAgewogICAgICAgIGpvYmplY3Qg
dmFsdWUgPSAoKC0tc3ApLT5vKTsKICAgICAgICBqaW50IGluZGV4ID0gKChqaW50KSAoLS1zcCkt
PmkpOwogICAgICAgIGpvYmplY3RBcnJheSBhcnIgPSAoam9iamVjdEFycmF5KSAoKC0tc3ApLT5v
KTsKICAgICAgICBkbyB7IDsgfSB3aGlsZSAoMCk7CiAgICAgICAgZG8geyBpZiAoKCh1bnNpZ25l
ZCkgaW5kZXgpID49ICh1bnNpZ25lZCkgKGFyci0+bGVuZ3RoKSkgX0p2X1Rocm93QmFkQXJyYXlJ
bmRleCAoaW5kZXgpOyB9IHdoaWxlICgwKTsKICAgICAgICBfSnZfQ2hlY2tBcnJheVN0b3JlIChh
cnIsIHZhbHVlKTsKICAgICAgICBlbGVtZW50cyhhcnIpW2luZGV4XSA9IHZhbHVlOwogICAgICB9
CiAgICAgIGdvdG8gKigocGMrKyktPmluc24pOwoKICAgIGluc25fYmFzdG9yZToKICAgICAgewog
ICAgICAgIGpieXRlIHZhbHVlID0gKGpieXRlKSAoKGppbnQpICgtLXNwKS0+aSk7CiAgICAgICAg
amludCBpbmRleCA9ICgoamludCkgKC0tc3ApLT5pKTsKICAgICAgICBqYnl0ZUFycmF5IGFyciA9
IChqYnl0ZUFycmF5KSAoKC0tc3ApLT5vKTsKICAgICAgICBkbyB7IDsgfSB3aGlsZSAoMCk7CiAg
ICAgICAgZG8geyBpZiAoKCh1bnNpZ25lZCkgaW5kZXgpID49ICh1bnNpZ25lZCkgKGFyci0+bGVu
Z3RoKSkgX0p2X1Rocm93QmFkQXJyYXlJbmRleCAoaW5kZXgpOyB9IHdoaWxlICgwKTsKICAgICAg
ICBlbGVtZW50cyhhcnIpW2luZGV4XSA9IHZhbHVlOwogICAgICB9CiAgICAgIGdvdG8gKigocGMr
KyktPmluc24pOwoKICAgIGluc25fY2FzdG9yZToKICAgICAgewogICAgICAgIGpjaGFyIHZhbHVl
ID0gKGpjaGFyKSAoKGppbnQpICgtLXNwKS0+aSk7CiAgICAgICAgamludCBpbmRleCA9ICgoamlu
dCkgKC0tc3ApLT5pKTsKICAgICAgICBqY2hhckFycmF5IGFyciA9IChqY2hhckFycmF5KSAoKC0t
c3ApLT5vKTsKICAgICAgICBkbyB7IDsgfSB3aGlsZSAoMCk7CiAgICAgICAgZG8geyBpZiAoKCh1
bnNpZ25lZCkgaW5kZXgpID49ICh1bnNpZ25lZCkgKGFyci0+bGVuZ3RoKSkgX0p2X1Rocm93QmFk
QXJyYXlJbmRleCAoaW5kZXgpOyB9IHdoaWxlICgwKTsKICAgICAgICBlbGVtZW50cyhhcnIpW2lu
ZGV4XSA9IHZhbHVlOwogICAgICB9CiAgICAgIGdvdG8gKigocGMrKyktPmluc24pOwoKICAgIGlu
c25fc2FzdG9yZToKICAgICAgewogICAgICAgIGpzaG9ydCB2YWx1ZSA9IChqc2hvcnQpICgoamlu
dCkgKC0tc3ApLT5pKTsKICAgICAgICBqaW50IGluZGV4ID0gKChqaW50KSAoLS1zcCktPmkpOwog
ICAgICAgIGpzaG9ydEFycmF5IGFyciA9IChqc2hvcnRBcnJheSkgKCgtLXNwKS0+byk7CiAgICAg
ICAgZG8geyA7IH0gd2hpbGUgKDApOwogICAgICAgIGRvIHsgaWYgKCgodW5zaWduZWQpIGluZGV4
KSA+PSAodW5zaWduZWQpIChhcnItPmxlbmd0aCkpIF9Kdl9UaHJvd0JhZEFycmF5SW5kZXggKGlu
ZGV4KTsgfSB3aGlsZSAoMCk7CiAgICAgICAgZWxlbWVudHMoYXJyKVtpbmRleF0gPSB2YWx1ZTsK
ICAgICAgfQogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX3BvcDoKICAgICAg
c3AgLT0gMTsKICAgICAgZ290byAqKChwYysrKS0+aW5zbik7CgogICAgaW5zbl9wb3AyOgogICAg
ICBzcCAtPSAyOwogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2R1cDoKICAg
ICAgc3BbMF0gPSBzcFstMV07CiAgICAgIHNwICs9IDE7CiAgICAgIGdvdG8gKigocGMrKyktPmlu
c24pOwoKICAgIGluc25fZHVwX3gxOgogICAgICBkdXB4IChzcCwgMSwgMSk7IHNwKz0xOwogICAg
ICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2R1cF94MjoKICAgICAgZHVweCAoc3As
IDEsIDIpOyBzcCs9MTsKICAgICAgZ290byAqKChwYysrKS0+aW5zbik7CgogICAgaW5zbl9kdXAy
OgogICAgICBzcFswXSA9IHNwWy0yXTsKICAgICAgc3BbMV0gPSBzcFstMV07CiAgICAgIHNwICs9
IDI7CiAgICAgIGdvdG8gKigocGMrKyktPmluc24pOwoKICAgIGluc25fZHVwMl94MToKICAgICAg
ZHVweCAoc3AsIDIsIDEpOyBzcCs9MjsKICAgICAgZ290byAqKChwYysrKS0+aW5zbik7CgogICAg
aW5zbl9kdXAyX3gyOgogICAgICBkdXB4IChzcCwgMiwgMik7IHNwKz0yOwogICAgICBnb3RvICoo
KHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX3N3YXA6CiAgICAgIHsKICAgICAgICBqb2JqZWN0IHRt
cDEgPSAoKC0tc3ApLT5vKTsKICAgICAgICBqb2JqZWN0IHRtcDIgPSAoKC0tc3ApLT5vKTsKICAg
ICAgICAoc3ArKyktPm8gPSAodG1wMSk7CiAgICAgICAgKHNwKyspLT5vID0gKHRtcDIpOwogICAg
ICB9CiAgICAgIGdvdG8gKigocGMrKyktPmluc24pOwoKICAgIGluc25faWFkZDoKICAgICAgeyBq
aW50IHZhbHVlMiA9ICgoamludCkgKC0tc3ApLT5pKTsgamludCB2YWx1ZTEgPSAoKGppbnQpICgt
LXNwKS0+aSk7IChzcCsrKS0+aSA9ICh2YWx1ZTEgKyB2YWx1ZTIpOyB9OwogICAgICBnb3RvICoo
KHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2xhZGQ6CiAgICAgIHsgamxvbmcgdmFsdWUyID0gKHsg
X0p2X3dvcmQyIHcyOyB3Mi5pYVsxXSA9ICgtLXNwKS0+aWFbMF07IHcyLmlhWzBdID0gKC0tc3Ap
LT5pYVswXTsgdzIubDsgfSk7IGpsb25nIHZhbHVlMSA9ICh7IF9Kdl93b3JkMiB3MjsgdzIuaWFb
MV0gPSAoLS1zcCktPmlhWzBdOyB3Mi5pYVswXSA9ICgtLXNwKS0+aWFbMF07IHcyLmw7IH0pOyBk
byB7IF9Kdl93b3JkMiB3MjsgdzIubD0odmFsdWUxICsgdmFsdWUyKTsgKHNwKyspLT5pYVswXSA9
IHcyLmlhWzBdOyAoc3ArKyktPmlhWzBdID0gdzIuaWFbMV07IH0gd2hpbGUgKDApOyB9OwogICAg
ICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2ZhZGQ6CiAgICAgIHsgamZsb2F0IHZh
bHVlMiA9ICgoamZsb2F0KSAoLS1zcCktPmYpOyBqZmxvYXQgdmFsdWUxID0gKChqZmxvYXQpICgt
LXNwKS0+Zik7IChzcCsrKS0+ZiA9ICh2YWx1ZTEgKyB2YWx1ZTIpOyB9OwogICAgICBnb3RvICoo
KHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2RhZGQ6CiAgICAgIHsgamRvdWJsZSB2YWx1ZTIgPSAo
eyBfSnZfd29yZDIgdzI7IHcyLmlhWzFdID0gKC0tc3ApLT5pYVswXTsgdzIuaWFbMF0gPSAoLS1z
cCktPmlhWzBdOyB3Mi5kOyB9KTsgamRvdWJsZSB2YWx1ZTEgPSAoeyBfSnZfd29yZDIgdzI7IHcy
LmlhWzFdID0gKC0tc3ApLT5pYVswXTsgdzIuaWFbMF0gPSAoLS1zcCktPmlhWzBdOyB3Mi5kOyB9
KTsgZG8geyBfSnZfd29yZDIgdzI7IHcyLmQ9KHZhbHVlMSArIHZhbHVlMik7IChzcCsrKS0+aWFb
MF0gPSB3Mi5pYVswXTsgKHNwKyspLT5pYVswXSA9IHcyLmlhWzFdOyB9IHdoaWxlICgwKTsgfTsK
ICAgICAgZ290byAqKChwYysrKS0+aW5zbik7CgogICAgaW5zbl9pc3ViOgogICAgICB7IGppbnQg
dmFsdWUyID0gKChqaW50KSAoLS1zcCktPmkpOyBqaW50IHZhbHVlMSA9ICgoamludCkgKC0tc3Ap
LT5pKTsgKHNwKyspLT5pID0gKHZhbHVlMSAtIHZhbHVlMik7IH07CiAgICAgIGdvdG8gKigocGMr
KyktPmluc24pOwoKICAgIGluc25fbHN1YjoKICAgICAgeyBqbG9uZyB2YWx1ZTIgPSAoeyBfSnZf
d29yZDIgdzI7IHcyLmlhWzFdID0gKC0tc3ApLT5pYVswXTsgdzIuaWFbMF0gPSAoLS1zcCktPmlh
WzBdOyB3Mi5sOyB9KTsgamxvbmcgdmFsdWUxID0gKHsgX0p2X3dvcmQyIHcyOyB3Mi5pYVsxXSA9
ICgtLXNwKS0+aWFbMF07IHcyLmlhWzBdID0gKC0tc3ApLT5pYVswXTsgdzIubDsgfSk7IGRvIHsg
X0p2X3dvcmQyIHcyOyB3Mi5sPSh2YWx1ZTEgLSB2YWx1ZTIpOyAoc3ArKyktPmlhWzBdID0gdzIu
aWFbMF07IChzcCsrKS0+aWFbMF0gPSB3Mi5pYVsxXTsgfSB3aGlsZSAoMCk7IH07CiAgICAgIGdv
dG8gKigocGMrKyktPmluc24pOwoKICAgIGluc25fZnN1YjoKICAgICAgeyBqZmxvYXQgdmFsdWUy
ID0gKChqZmxvYXQpICgtLXNwKS0+Zik7IGpmbG9hdCB2YWx1ZTEgPSAoKGpmbG9hdCkgKC0tc3Ap
LT5mKTsgKHNwKyspLT5mID0gKHZhbHVlMSAtIHZhbHVlMik7IH07CiAgICAgIGdvdG8gKigocGMr
KyktPmluc24pOwoKICAgIGluc25fZHN1YjoKICAgICAgeyBqZG91YmxlIHZhbHVlMiA9ICh7IF9K
dl93b3JkMiB3MjsgdzIuaWFbMV0gPSAoLS1zcCktPmlhWzBdOyB3Mi5pYVswXSA9ICgtLXNwKS0+
aWFbMF07IHcyLmQ7IH0pOyBqZG91YmxlIHZhbHVlMSA9ICh7IF9Kdl93b3JkMiB3MjsgdzIuaWFb
MV0gPSAoLS1zcCktPmlhWzBdOyB3Mi5pYVswXSA9ICgtLXNwKS0+aWFbMF07IHcyLmQ7IH0pOyBk
byB7IF9Kdl93b3JkMiB3MjsgdzIuZD0odmFsdWUxIC0gdmFsdWUyKTsgKHNwKyspLT5pYVswXSA9
IHcyLmlhWzBdOyAoc3ArKyktPmlhWzBdID0gdzIuaWFbMV07IH0gd2hpbGUgKDApOyB9OwogICAg
ICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2ltdWw6CiAgICAgIHsgamludCB2YWx1
ZTIgPSAoKGppbnQpICgtLXNwKS0+aSk7IGppbnQgdmFsdWUxID0gKChqaW50KSAoLS1zcCktPmkp
OyAoc3ArKyktPmkgPSAodmFsdWUxICogdmFsdWUyKTsgfTsKICAgICAgZ290byAqKChwYysrKS0+
aW5zbik7CgogICAgaW5zbl9sbXVsOgogICAgICB7IGpsb25nIHZhbHVlMiA9ICh7IF9Kdl93b3Jk
MiB3MjsgdzIuaWFbMV0gPSAoLS1zcCktPmlhWzBdOyB3Mi5pYVswXSA9ICgtLXNwKS0+aWFbMF07
IHcyLmw7IH0pOyBqbG9uZyB2YWx1ZTEgPSAoeyBfSnZfd29yZDIgdzI7IHcyLmlhWzFdID0gKC0t
c3ApLT5pYVswXTsgdzIuaWFbMF0gPSAoLS1zcCktPmlhWzBdOyB3Mi5sOyB9KTsgZG8geyBfSnZf
d29yZDIgdzI7IHcyLmw9KHZhbHVlMSAqIHZhbHVlMik7IChzcCsrKS0+aWFbMF0gPSB3Mi5pYVsw
XTsgKHNwKyspLT5pYVswXSA9IHcyLmlhWzFdOyB9IHdoaWxlICgwKTsgfTsKICAgICAgZ290byAq
KChwYysrKS0+aW5zbik7CgogICAgaW5zbl9mbXVsOgogICAgICB7IGpmbG9hdCB2YWx1ZTIgPSAo
KGpmbG9hdCkgKC0tc3ApLT5mKTsgamZsb2F0IHZhbHVlMSA9ICgoamZsb2F0KSAoLS1zcCktPmYp
OyAoc3ArKyktPmYgPSAodmFsdWUxICogdmFsdWUyKTsgfTsKICAgICAgZ290byAqKChwYysrKS0+
aW5zbik7CgogICAgaW5zbl9kbXVsOgogICAgICB7IGpkb3VibGUgdmFsdWUyID0gKHsgX0p2X3dv
cmQyIHcyOyB3Mi5pYVsxXSA9ICgtLXNwKS0+aWFbMF07IHcyLmlhWzBdID0gKC0tc3ApLT5pYVsw
XTsgdzIuZDsgfSk7IGpkb3VibGUgdmFsdWUxID0gKHsgX0p2X3dvcmQyIHcyOyB3Mi5pYVsxXSA9
ICgtLXNwKS0+aWFbMF07IHcyLmlhWzBdID0gKC0tc3ApLT5pYVswXTsgdzIuZDsgfSk7IGRvIHsg
X0p2X3dvcmQyIHcyOyB3Mi5kPSh2YWx1ZTEgKiB2YWx1ZTIpOyAoc3ArKyktPmlhWzBdID0gdzIu
aWFbMF07IChzcCsrKS0+aWFbMF0gPSB3Mi5pYVsxXTsgfSB3aGlsZSAoMCk7IH07CiAgICAgIGdv
dG8gKigocGMrKyktPmluc24pOwoKICAgIGluc25faWRpdjoKICAgICAgOwogICAgICB7CiAgICAg
ICAgamludCB2YWx1ZTIgPSAoKGppbnQpICgtLXNwKS0+aSk7CiAgICAgICAgamludCB2YWx1ZTEg
PSAoKGppbnQpICgtLXNwKS0+aSk7CiAgICAgICAgamludCByZXMgPSBfSnZfZGl2SSAodmFsdWUx
LCB2YWx1ZTIpOwogICAgICAgIChzcCsrKS0+aSA9IChyZXMpOwogICAgICB9CiAgICAgIGdvdG8g
KigocGMrKyktPmluc24pOwoKICAgIGluc25fbGRpdjoKICAgICAgOwogICAgICB7CiAgICAgICAg
amxvbmcgdmFsdWUyID0gKHsgX0p2X3dvcmQyIHcyOyB3Mi5pYVsxXSA9ICgtLXNwKS0+aWFbMF07
IHcyLmlhWzBdID0gKC0tc3ApLT5pYVswXTsgdzIubDsgfSk7CiAgICAgICAgamxvbmcgdmFsdWUx
ID0gKHsgX0p2X3dvcmQyIHcyOyB3Mi5pYVsxXSA9ICgtLXNwKS0+aWFbMF07IHcyLmlhWzBdID0g
KC0tc3ApLT5pYVswXTsgdzIubDsgfSk7CiAgICAgICAgamxvbmcgcmVzID0gX0p2X2RpdkogKHZh
bHVlMSwgdmFsdWUyKTsKICAgICAgICBkbyB7IF9Kdl93b3JkMiB3MjsgdzIubD0ocmVzKTsgKHNw
KyspLT5pYVswXSA9IHcyLmlhWzBdOyAoc3ArKyktPmlhWzBdID0gdzIuaWFbMV07IH0gd2hpbGUg
KDApOwogICAgICB9CiAgICAgIGdvdG8gKigocGMrKyktPmluc24pOwoKICAgIGluc25fZmRpdjoK
ICAgICAgewogICAgICAgIGpmbG9hdCB2YWx1ZTIgPSAoKGpmbG9hdCkgKC0tc3ApLT5mKTsKICAg
ICAgICBqZmxvYXQgdmFsdWUxID0gKChqZmxvYXQpICgtLXNwKS0+Zik7CiAgICAgICAgamZsb2F0
IHJlcyA9IHZhbHVlMSAvIHZhbHVlMjsKICAgICAgICAoc3ArKyktPmYgPSAocmVzKTsKICAgICAg
fQogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2RkaXY6CiAgICAgIHsKICAg
ICAgICBqZG91YmxlIHZhbHVlMiA9ICh7IF9Kdl93b3JkMiB3MjsgdzIuaWFbMV0gPSAoLS1zcCkt
PmlhWzBdOyB3Mi5pYVswXSA9ICgtLXNwKS0+aWFbMF07IHcyLmQ7IH0pOwogICAgICAgIGpkb3Vi
bGUgdmFsdWUxID0gKHsgX0p2X3dvcmQyIHcyOyB3Mi5pYVsxXSA9ICgtLXNwKS0+aWFbMF07IHcy
LmlhWzBdID0gKC0tc3ApLT5pYVswXTsgdzIuZDsgfSk7CiAgICAgICAgamRvdWJsZSByZXMgPSB2
YWx1ZTEgLyB2YWx1ZTI7CiAgICAgICAgZG8geyBfSnZfd29yZDIgdzI7IHcyLmQ9KHJlcyk7IChz
cCsrKS0+aWFbMF0gPSB3Mi5pYVswXTsgKHNwKyspLT5pYVswXSA9IHcyLmlhWzFdOyB9IHdoaWxl
ICgwKTsKICAgICAgfQogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2lyZW06
CiAgICAgIDsKICAgICAgewogICAgICAgIGppbnQgdmFsdWUyID0gKChqaW50KSAoLS1zcCktPmkp
OwogICAgICAgIGppbnQgdmFsdWUxID0gKChqaW50KSAoLS1zcCktPmkpOwogICAgICAgIGppbnQg
cmVzID0gX0p2X3JlbUkgKHZhbHVlMSwgdmFsdWUyKTsKICAgICAgICAoc3ArKyktPmkgPSAocmVz
KTsKICAgICAgfQogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2xyZW06CiAg
ICAgIDsKICAgICAgewogICAgICAgIGpsb25nIHZhbHVlMiA9ICh7IF9Kdl93b3JkMiB3MjsgdzIu
aWFbMV0gPSAoLS1zcCktPmlhWzBdOyB3Mi5pYVswXSA9ICgtLXNwKS0+aWFbMF07IHcyLmw7IH0p
OwogICAgICAgIGpsb25nIHZhbHVlMSA9ICh7IF9Kdl93b3JkMiB3MjsgdzIuaWFbMV0gPSAoLS1z
cCktPmlhWzBdOyB3Mi5pYVswXSA9ICgtLXNwKS0+aWFbMF07IHcyLmw7IH0pOwogICAgICAgIGps
b25nIHJlcyA9IF9Kdl9yZW1KICh2YWx1ZTEsIHZhbHVlMik7CiAgICAgICAgZG8geyBfSnZfd29y
ZDIgdzI7IHcyLmw9KHJlcyk7IChzcCsrKS0+aWFbMF0gPSB3Mi5pYVswXTsgKHNwKyspLT5pYVsw
XSA9IHcyLmlhWzFdOyB9IHdoaWxlICgwKTsKICAgICAgfQogICAgICBnb3RvICooKHBjKyspLT5p
bnNuKTsKCiAgICBpbnNuX2ZyZW06CiAgICAgIHsKICAgICAgICBqZmxvYXQgdmFsdWUyID0gKChq
ZmxvYXQpICgtLXNwKS0+Zik7CiAgICAgICAgamZsb2F0IHZhbHVlMSA9ICgoamZsb2F0KSAoLS1z
cCktPmYpOwogICAgICAgIGpmbG9hdCByZXMgPSBfX2llZWU3NTRfZm1vZCAodmFsdWUxLCB2YWx1
ZTIpOwogICAgICAgIChzcCsrKS0+ZiA9IChyZXMpOwogICAgICB9CiAgICAgIGdvdG8gKigocGMr
KyktPmluc24pOwoKICAgIGluc25fZHJlbToKICAgICAgewogICAgICAgIGpkb3VibGUgdmFsdWUy
ID0gKHsgX0p2X3dvcmQyIHcyOyB3Mi5pYVsxXSA9ICgtLXNwKS0+aWFbMF07IHcyLmlhWzBdID0g
KC0tc3ApLT5pYVswXTsgdzIuZDsgfSk7CiAgICAgICAgamRvdWJsZSB2YWx1ZTEgPSAoeyBfSnZf
d29yZDIgdzI7IHcyLmlhWzFdID0gKC0tc3ApLT5pYVswXTsgdzIuaWFbMF0gPSAoLS1zcCktPmlh
WzBdOyB3Mi5kOyB9KTsKICAgICAgICBqZG91YmxlIHJlcyA9IF9faWVlZTc1NF9mbW9kICh2YWx1
ZTEsIHZhbHVlMik7CiAgICAgICAgZG8geyBfSnZfd29yZDIgdzI7IHcyLmQ9KHJlcyk7IChzcCsr
KS0+aWFbMF0gPSB3Mi5pYVswXTsgKHNwKyspLT5pYVswXSA9IHcyLmlhWzFdOyB9IHdoaWxlICgw
KTsKICAgICAgfQogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2luZWc6CiAg
ICAgIHsKICAgICAgICBqaW50IHZhbHVlID0gKChqaW50KSAoLS1zcCktPmkpOwogICAgICAgIChz
cCsrKS0+aSA9ICh2YWx1ZSAqIC0xKTsKICAgICAgfQogICAgICBnb3RvICooKHBjKyspLT5pbnNu
KTsKCiAgICBpbnNuX2xuZWc6CiAgICAgIHsKICAgICAgICBqbG9uZyB2YWx1ZSA9ICh7IF9Kdl93
b3JkMiB3MjsgdzIuaWFbMV0gPSAoLS1zcCktPmlhWzBdOyB3Mi5pYVswXSA9ICgtLXNwKS0+aWFb
MF07IHcyLmw7IH0pOwogICAgICAgIGRvIHsgX0p2X3dvcmQyIHcyOyB3Mi5sPSh2YWx1ZSAqIC0x
KTsgKHNwKyspLT5pYVswXSA9IHcyLmlhWzBdOyAoc3ArKyktPmlhWzBdID0gdzIuaWFbMV07IH0g
d2hpbGUgKDApOwogICAgICB9CiAgICAgIGdvdG8gKigocGMrKyktPmluc24pOwoKICAgIGluc25f
Zm5lZzoKICAgICAgewogICAgICAgIGpmbG9hdCB2YWx1ZSA9ICgoamZsb2F0KSAoLS1zcCktPmYp
OwogICAgICAgIChzcCsrKS0+ZiA9ICh2YWx1ZSAqIC0xKTsKICAgICAgfQogICAgICBnb3RvICoo
KHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2RuZWc6CiAgICAgIHsKICAgICAgICBqZG91YmxlIHZh
bHVlID0gKHsgX0p2X3dvcmQyIHcyOyB3Mi5pYVsxXSA9ICgtLXNwKS0+aWFbMF07IHcyLmlhWzBd
ID0gKC0tc3ApLT5pYVswXTsgdzIuZDsgfSk7CiAgICAgICAgZG8geyBfSnZfd29yZDIgdzI7IHcy
LmQ9KHZhbHVlICogLTEpOyAoc3ArKyktPmlhWzBdID0gdzIuaWFbMF07IChzcCsrKS0+aWFbMF0g
PSB3Mi5pYVsxXTsgfSB3aGlsZSAoMCk7CiAgICAgIH0KICAgICAgZ290byAqKChwYysrKS0+aW5z
bik7CgogICAgaW5zbl9pc2hsOgogICAgICB7CiAgICAgICAgamludCBzaGlmdCA9ICgoKGppbnQp
ICgtLXNwKS0+aSkgJiAweDFmKTsKICAgICAgICBqaW50IHZhbHVlID0gKChqaW50KSAoLS1zcCkt
PmkpOwogICAgICAgIChzcCsrKS0+aSA9ICh2YWx1ZSA8PCBzaGlmdCk7CiAgICAgIH0KICAgICAg
Z290byAqKChwYysrKS0+aW5zbik7CgogICAgaW5zbl9sc2hsOgogICAgICB7CiAgICAgICAgamlu
dCBzaGlmdCA9ICgoKGppbnQpICgtLXNwKS0+aSkgJiAweDNmKTsKICAgICAgICBqbG9uZyB2YWx1
ZSA9ICh7IF9Kdl93b3JkMiB3MjsgdzIuaWFbMV0gPSAoLS1zcCktPmlhWzBdOyB3Mi5pYVswXSA9
ICgtLXNwKS0+aWFbMF07IHcyLmw7IH0pOwogICAgICAgIGRvIHsgX0p2X3dvcmQyIHcyOyB3Mi5s
PSh2YWx1ZSA8PCBzaGlmdCk7IChzcCsrKS0+aWFbMF0gPSB3Mi5pYVswXTsgKHNwKyspLT5pYVsw
XSA9IHcyLmlhWzFdOyB9IHdoaWxlICgwKTsKICAgICAgfQogICAgICBnb3RvICooKHBjKyspLT5p
bnNuKTsKCiAgICBpbnNuX2lzaHI6CiAgICAgIHsKICAgICAgICBqaW50IHNoaWZ0ID0gKCgoamlu
dCkgKC0tc3ApLT5pKSAmIDB4MWYpOwogICAgICAgIGppbnQgdmFsdWUgPSAoKGppbnQpICgtLXNw
KS0+aSk7CiAgICAgICAgKHNwKyspLT5pID0gKHZhbHVlID4+IHNoaWZ0KTsKICAgICAgfQogICAg
ICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2xzaHI6CiAgICAgIHsKICAgICAgICBq
aW50IHNoaWZ0ID0gKCgoamludCkgKC0tc3ApLT5pKSAmIDB4M2YpOwogICAgICAgIGpsb25nIHZh
bHVlID0gKHsgX0p2X3dvcmQyIHcyOyB3Mi5pYVsxXSA9ICgtLXNwKS0+aWFbMF07IHcyLmlhWzBd
ID0gKC0tc3ApLT5pYVswXTsgdzIubDsgfSk7CiAgICAgICAgZG8geyBfSnZfd29yZDIgdzI7IHcy
Lmw9KHZhbHVlID4+IHNoaWZ0KTsgKHNwKyspLT5pYVswXSA9IHcyLmlhWzBdOyAoc3ArKyktPmlh
WzBdID0gdzIuaWFbMV07IH0gd2hpbGUgKDApOwogICAgICB9CiAgICAgIGdvdG8gKigocGMrKykt
Pmluc24pOwoKICAgIGluc25faXVzaHI6CiAgICAgIHsKICAgICAgICBqaW50IHNoaWZ0ID0gKCgo
amludCkgKC0tc3ApLT5pKSAmIDB4MWYpOwogICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsdWUgPSAo
KGppbnQpICgtLXNwKS0+aSk7CiAgICAgICAgKHNwKyspLT5pID0gKChqaW50KSAodmFsdWUgPj4g
c2hpZnQpKTsKICAgICAgfQogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2x1
c2hyOgogICAgICB7CiAgICAgICAgamludCBzaGlmdCA9ICgoKGppbnQpICgtLXNwKS0+aSkgJiAw
eDNmKTsKICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUgPSAodW5zaWduZWQgbG9uZyBs
b25nKSAoeyBfSnZfd29yZDIgdzI7IHcyLmlhWzFdID0gKC0tc3ApLT5pYVswXTsgdzIuaWFbMF0g
PSAoLS1zcCktPmlhWzBdOyB3Mi5sOyB9KTsKICAgICAgICBkbyB7IF9Kdl93b3JkMiB3MjsgdzIu
bD0oKHZhbHVlID4+IHNoaWZ0KSk7IChzcCsrKS0+aWFbMF0gPSB3Mi5pYVswXTsgKHNwKyspLT5p
YVswXSA9IHcyLmlhWzFdOyB9IHdoaWxlICgwKTsKICAgICAgfQogICAgICBnb3RvICooKHBjKysp
LT5pbnNuKTsKCiAgICBpbnNuX2lhbmQ6CiAgICAgIHsgamludCB2YWx1ZTIgPSAoKGppbnQpICgt
LXNwKS0+aSk7IGppbnQgdmFsdWUxID0gKChqaW50KSAoLS1zcCktPmkpOyAoc3ArKyktPmkgPSAo
dmFsdWUxICYgdmFsdWUyKTsgfTsKICAgICAgZ290byAqKChwYysrKS0+aW5zbik7CgogICAgaW5z
bl9sYW5kOgogICAgICB7IGpsb25nIHZhbHVlMiA9ICh7IF9Kdl93b3JkMiB3MjsgdzIuaWFbMV0g
PSAoLS1zcCktPmlhWzBdOyB3Mi5pYVswXSA9ICgtLXNwKS0+aWFbMF07IHcyLmw7IH0pOyBqbG9u
ZyB2YWx1ZTEgPSAoeyBfSnZfd29yZDIgdzI7IHcyLmlhWzFdID0gKC0tc3ApLT5pYVswXTsgdzIu
aWFbMF0gPSAoLS1zcCktPmlhWzBdOyB3Mi5sOyB9KTsgZG8geyBfSnZfd29yZDIgdzI7IHcyLmw9
KHZhbHVlMSAmIHZhbHVlMik7IChzcCsrKS0+aWFbMF0gPSB3Mi5pYVswXTsgKHNwKyspLT5pYVsw
XSA9IHcyLmlhWzFdOyB9IHdoaWxlICgwKTsgfTsKICAgICAgZ290byAqKChwYysrKS0+aW5zbik7
CgogICAgaW5zbl9pb3I6CiAgICAgIHsgamludCB2YWx1ZTIgPSAoKGppbnQpICgtLXNwKS0+aSk7
IGppbnQgdmFsdWUxID0gKChqaW50KSAoLS1zcCktPmkpOyAoc3ArKyktPmkgPSAodmFsdWUxIHwg
dmFsdWUyKTsgfTsKICAgICAgZ290byAqKChwYysrKS0+aW5zbik7CgogICAgaW5zbl9sb3I6CiAg
ICAgIHsgamxvbmcgdmFsdWUyID0gKHsgX0p2X3dvcmQyIHcyOyB3Mi5pYVsxXSA9ICgtLXNwKS0+
aWFbMF07IHcyLmlhWzBdID0gKC0tc3ApLT5pYVswXTsgdzIubDsgfSk7IGpsb25nIHZhbHVlMSA9
ICh7IF9Kdl93b3JkMiB3MjsgdzIuaWFbMV0gPSAoLS1zcCktPmlhWzBdOyB3Mi5pYVswXSA9ICgt
LXNwKS0+aWFbMF07IHcyLmw7IH0pOyBkbyB7IF9Kdl93b3JkMiB3MjsgdzIubD0odmFsdWUxIHwg
dmFsdWUyKTsgKHNwKyspLT5pYVswXSA9IHcyLmlhWzBdOyAoc3ArKyktPmlhWzBdID0gdzIuaWFb
MV07IH0gd2hpbGUgKDApOyB9OwogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNu
X2l4b3I6CiAgICAgIHsgamludCB2YWx1ZTIgPSAoKGppbnQpICgtLXNwKS0+aSk7IGppbnQgdmFs
dWUxID0gKChqaW50KSAoLS1zcCktPmkpOyAoc3ArKyktPmkgPSAodmFsdWUxIF4gdmFsdWUyKTsg
fTsKICAgICAgZ290byAqKChwYysrKS0+aW5zbik7CgogICAgaW5zbl9seG9yOgogICAgICB7IGps
b25nIHZhbHVlMiA9ICh7IF9Kdl93b3JkMiB3MjsgdzIuaWFbMV0gPSAoLS1zcCktPmlhWzBdOyB3
Mi5pYVswXSA9ICgtLXNwKS0+aWFbMF07IHcyLmw7IH0pOyBqbG9uZyB2YWx1ZTEgPSAoeyBfSnZf
d29yZDIgdzI7IHcyLmlhWzFdID0gKC0tc3ApLT5pYVswXTsgdzIuaWFbMF0gPSAoLS1zcCktPmlh
WzBdOyB3Mi5sOyB9KTsgZG8geyBfSnZfd29yZDIgdzI7IHcyLmw9KHZhbHVlMSBeIHZhbHVlMik7
IChzcCsrKS0+aWFbMF0gPSB3Mi5pYVswXTsgKHNwKyspLT5pYVswXSA9IHcyLmlhWzFdOyB9IHdo
aWxlICgwKTsgfTsKICAgICAgZ290byAqKChwYysrKS0+aW5zbik7CgogICAgaW5zbl9paW5jOgog
ICAgICB7CiAgICAgICAgamludCBpbmRleCA9ICgocGMrKyktPmludF92YWwpOwogICAgICAgIGpp
bnQgYW1vdW50ID0gKChwYysrKS0+aW50X3ZhbCk7CiAgICAgICAgbG9jYWxzW2luZGV4XS5pICs9
IGFtb3VudDsKICAgICAgfQogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2ky
bDoKICAgICAge2psb25nIHZhbHVlID0gKChqaW50KSAoLS1zcCktPmkpOyBkbyB7IF9Kdl93b3Jk
MiB3MjsgdzIubD0odmFsdWUpOyAoc3ArKyktPmlhWzBdID0gdzIuaWFbMF07IChzcCsrKS0+aWFb
MF0gPSB3Mi5pYVsxXTsgfSB3aGlsZSAoMCk7fQogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsK
CiAgICBpbnNuX2kyZjoKICAgICAge2pmbG9hdCB2YWx1ZSA9ICgoamludCkgKC0tc3ApLT5pKTsg
KHNwKyspLT5mID0gKHZhbHVlKTt9CiAgICAgIGdvdG8gKigocGMrKyktPmluc24pOwoKICAgIGlu
c25faTJkOgogICAgICB7amRvdWJsZSB2YWx1ZSA9ICgoamludCkgKC0tc3ApLT5pKTsgZG8geyBf
SnZfd29yZDIgdzI7IHcyLmQ9KHZhbHVlKTsgKHNwKyspLT5pYVswXSA9IHcyLmlhWzBdOyAoc3Ar
KyktPmlhWzBdID0gdzIuaWFbMV07IH0gd2hpbGUgKDApO30KICAgICAgZ290byAqKChwYysrKS0+
aW5zbik7CgogICAgaW5zbl9sMmk6CiAgICAgIHtqaW50IHZhbHVlID0gKHsgX0p2X3dvcmQyIHcy
OyB3Mi5pYVsxXSA9ICgtLXNwKS0+aWFbMF07IHcyLmlhWzBdID0gKC0tc3ApLT5pYVswXTsgdzIu
bDsgfSk7IChzcCsrKS0+aSA9ICh2YWx1ZSk7fQogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsK
CiAgICBpbnNuX2wyZjoKICAgICAge2pmbG9hdCB2YWx1ZSA9ICh7IF9Kdl93b3JkMiB3MjsgdzIu
aWFbMV0gPSAoLS1zcCktPmlhWzBdOyB3Mi5pYVswXSA9ICgtLXNwKS0+aWFbMF07IHcyLmw7IH0p
OyAoc3ArKyktPmYgPSAodmFsdWUpO30KICAgICAgZ290byAqKChwYysrKS0+aW5zbik7CgogICAg
aW5zbl9sMmQ6CiAgICAgIHtqZG91YmxlIHZhbHVlID0gKHsgX0p2X3dvcmQyIHcyOyB3Mi5pYVsx
XSA9ICgtLXNwKS0+aWFbMF07IHcyLmlhWzBdID0gKC0tc3ApLT5pYVswXTsgdzIubDsgfSk7IGRv
IHsgX0p2X3dvcmQyIHcyOyB3Mi5kPSh2YWx1ZSk7IChzcCsrKS0+aWFbMF0gPSB3Mi5pYVswXTsg
KHNwKyspLT5pYVswXSA9IHcyLmlhWzFdOyB9IHdoaWxlICgwKTt9CiAgICAgIGdvdG8gKigocGMr
KyktPmluc24pOwoKICAgIGluc25fZjJpOgogICAgICB7CiAgICAgICAgdXNpbmcgbmFtZXNwYWNl
IGphdmE6Omxhbmc7CiAgICAgICAgamludCB2YWx1ZSA9IGNvbnZlcnQgKCgoamZsb2F0KSAoLS1z
cCktPmYpLCBJbnRlZ2VyOjpNSU5fVkFMVUUsIEludGVnZXI6Ok1BWF9WQUxVRSk7CiAgICAgICAg
KHNwKyspLT5pID0gKHZhbHVlKTsKICAgICAgfQogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsK
CiAgICBpbnNuX2YybDoKICAgICAgewogICAgICAgIHVzaW5nIG5hbWVzcGFjZSBqYXZhOjpsYW5n
OwogICAgICAgIGpsb25nIHZhbHVlID0gY29udmVydCAoKChqZmxvYXQpICgtLXNwKS0+ZiksIExv
bmc6Ok1JTl9WQUxVRSwgTG9uZzo6TUFYX1ZBTFVFKTsKICAgICAgICBkbyB7IF9Kdl93b3JkMiB3
MjsgdzIubD0odmFsdWUpOyAoc3ArKyktPmlhWzBdID0gdzIuaWFbMF07IChzcCsrKS0+aWFbMF0g
PSB3Mi5pYVsxXTsgfSB3aGlsZSAoMCk7CiAgICAgIH0KICAgICAgZ290byAqKChwYysrKS0+aW5z
bik7CgogICAgaW5zbl9mMmQ6CiAgICAgIHsgamRvdWJsZSB2YWx1ZSA9ICgoamZsb2F0KSAoLS1z
cCktPmYpOyBkbyB7IF9Kdl93b3JkMiB3MjsgdzIuZD0odmFsdWUpOyAoc3ArKyktPmlhWzBdID0g
dzIuaWFbMF07IChzcCsrKS0+aWFbMF0gPSB3Mi5pYVsxXTsgfSB3aGlsZSAoMCk7IH0KICAgICAg
Z290byAqKChwYysrKS0+aW5zbik7CgogICAgaW5zbl9kMmk6CiAgICAgIHsKICAgICAgICB1c2lu
ZyBuYW1lc3BhY2UgamF2YTo6bGFuZzsKICAgICAgICBqaW50IHZhbHVlID0gY29udmVydCAoKHsg
X0p2X3dvcmQyIHcyOyB3Mi5pYVsxXSA9ICgtLXNwKS0+aWFbMF07IHcyLmlhWzBdID0gKC0tc3Ap
LT5pYVswXTsgdzIuZDsgfSksIEludGVnZXI6Ok1JTl9WQUxVRSwgSW50ZWdlcjo6TUFYX1ZBTFVF
KTsKICAgICAgICAoc3ArKyktPmkgPSAodmFsdWUpOwogICAgICB9CiAgICAgIGdvdG8gKigocGMr
KyktPmluc24pOwoKICAgIGluc25fZDJsOgogICAgICB7CiAgICAgICAgdXNpbmcgbmFtZXNwYWNl
IGphdmE6Omxhbmc7CiAgICAgICAgamxvbmcgdmFsdWUgPSBjb252ZXJ0ICgoeyBfSnZfd29yZDIg
dzI7IHcyLmlhWzFdID0gKC0tc3ApLT5pYVswXTsgdzIuaWFbMF0gPSAoLS1zcCktPmlhWzBdOyB3
Mi5kOyB9KSwgTG9uZzo6TUlOX1ZBTFVFLCBMb25nOjpNQVhfVkFMVUUpOwogICAgICAgIGRvIHsg
X0p2X3dvcmQyIHcyOyB3Mi5sPSh2YWx1ZSk7IChzcCsrKS0+aWFbMF0gPSB3Mi5pYVswXTsgKHNw
KyspLT5pYVswXSA9IHcyLmlhWzFdOyB9IHdoaWxlICgwKTsKICAgICAgfQogICAgICBnb3RvICoo
KHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2QyZjoKICAgICAgeyBqZmxvYXQgdmFsdWUgPSAoeyBf
SnZfd29yZDIgdzI7IHcyLmlhWzFdID0gKC0tc3ApLT5pYVswXTsgdzIuaWFbMF0gPSAoLS1zcCkt
PmlhWzBdOyB3Mi5kOyB9KTsgKHNwKyspLT5mID0gKHZhbHVlKTsgfQogICAgICBnb3RvICooKHBj
KyspLT5pbnNuKTsKCiAgICBpbnNuX2kyYjoKICAgICAgeyBqYnl0ZSB2YWx1ZSA9ICgoamludCkg
KC0tc3ApLT5pKTsgKHNwKyspLT5pID0gKHZhbHVlKTsgfQogICAgICBnb3RvICooKHBjKyspLT5p
bnNuKTsKCiAgICBpbnNuX2kyYzoKICAgICAgeyBqY2hhciB2YWx1ZSA9ICgoamludCkgKC0tc3Ap
LT5pKTsgKHNwKyspLT5pID0gKHZhbHVlKTsgfQogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsK
CiAgICBpbnNuX2kyczoKICAgICAgeyBqc2hvcnQgdmFsdWUgPSAoKGppbnQpICgtLXNwKS0+aSk7
IChzcCsrKS0+aSA9ICh2YWx1ZSk7IH0KICAgICAgZ290byAqKChwYysrKS0+aW5zbik7CgogICAg
aW5zbl9sY21wOgogICAgICB7CiAgICAgICAgamxvbmcgdmFsdWUyID0gKHsgX0p2X3dvcmQyIHcy
OyB3Mi5pYVsxXSA9ICgtLXNwKS0+aWFbMF07IHcyLmlhWzBdID0gKC0tc3ApLT5pYVswXTsgdzIu
bDsgfSk7CiAgICAgICAgamxvbmcgdmFsdWUxID0gKHsgX0p2X3dvcmQyIHcyOyB3Mi5pYVsxXSA9
ICgtLXNwKS0+aWFbMF07IHcyLmlhWzBdID0gKC0tc3ApLT5pYVswXTsgdzIubDsgfSk7CiAgICAg
ICAgaWYgKHZhbHVlMSA+IHZhbHVlMikKICAgICAgICAgIHsgKHNwKyspLT5pID0gKDEpOyB9CiAg
ICAgICAgZWxzZSBpZiAodmFsdWUxID09IHZhbHVlMikKICAgICAgICAgIHsgKHNwKyspLT5pID0g
KDApOyB9CiAgICAgICAgZWxzZQogICAgICAgICAgeyAoc3ArKyktPmkgPSAoLTEpOyB9CiAgICAg
IH0KICAgICAgZ290byAqKChwYysrKS0+aW5zbik7CgogICAgaW5zbl9mY21wbDoKICAgICAgdG1w
dmFsID0gLTE7CiAgICAgIGdvdG8gZmNtcDsKCiAgICBpbnNuX2ZjbXBnOgogICAgICB0bXB2YWwg
PSAxOwoKICAgIGZjbXA6CiAgICAgIHsKICAgICAgICBqZmxvYXQgdmFsdWUyID0gKChqZmxvYXQp
ICgtLXNwKS0+Zik7CiAgICAgICAgamZsb2F0IHZhbHVlMSA9ICgoamZsb2F0KSAoLS1zcCktPmYp
OwogICAgICAgIGlmICh2YWx1ZTEgPiB2YWx1ZTIpCiAgICAgICAgICAoc3ArKyktPmkgPSAoMSk7
CiAgICAgICAgZWxzZSBpZiAodmFsdWUxID09IHZhbHVlMikKICAgICAgICAgIChzcCsrKS0+aSA9
ICgwKTsKICAgICAgICBlbHNlIGlmICh2YWx1ZTEgPCB2YWx1ZTIpCiAgICAgICAgICAoc3ArKykt
PmkgPSAoLTEpOwogICAgICAgIGVsc2UKICAgICAgICAgIChzcCsrKS0+aSA9ICh0bXB2YWwpOwog
ICAgICB9CiAgICAgIGdvdG8gKigocGMrKyktPmluc24pOwoKICAgIGluc25fZGNtcGw6CiAgICAg
IHRtcHZhbCA9IDE7CiAgICAgIGdvdG8gZGNtcDsKCiAgICBpbnNuX2RjbXBnOgogICAgICB0bXB2
YWwgPSAtMTsKCiAgICBkY21wOgogICAgICB7CiAgICAgICAgamRvdWJsZSB2YWx1ZTIgPSAoeyBf
SnZfd29yZDIgdzI7IHcyLmlhWzFdID0gKC0tc3ApLT5pYVswXTsgdzIuaWFbMF0gPSAoLS1zcCkt
PmlhWzBdOyB3Mi5kOyB9KTsKICAgICAgICBqZG91YmxlIHZhbHVlMSA9ICh7IF9Kdl93b3JkMiB3
MjsgdzIuaWFbMV0gPSAoLS1zcCktPmlhWzBdOyB3Mi5pYVswXSA9ICgtLXNwKS0+aWFbMF07IHcy
LmQ7IH0pOwogICAgICAgIGlmICh2YWx1ZTEgPiB2YWx1ZTIpCiAgICAgICAgICAoc3ArKyktPmkg
PSAoMSk7CiAgICAgICAgZWxzZSBpZiAodmFsdWUxID09IHZhbHVlMikKICAgICAgICAgIChzcCsr
KS0+aSA9ICgwKTsKICAgICAgICBlbHNlIGlmICh2YWx1ZTEgPCB2YWx1ZTIpCiAgICAgICAgICAo
c3ArKyktPmkgPSAoLTEpOwogICAgICAgIGVsc2UKICAgICAgICAgIChzcCsrKS0+aSA9ICh0bXB2
YWwpOwogICAgICB9CiAgICAgIGdvdG8gKigocGMrKyktPmluc24pOwoKICAgIGluc25faWZlcToK
ICAgICAgewogICAgICAgIGlmICgoKGppbnQpICgtLXNwKS0+aSkgPT0gMCkKICAgICAgICAgIHBj
ID0gKGluc25fc2xvdCAqKSBwYy0+ZGF0dW07CiAgICAgICAgZWxzZQogICAgICAgICAgKytwYzsK
ICAgICAgfQogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2lmbmU6CiAgICAg
IHsKICAgICAgICBpZiAoKChqaW50KSAoLS1zcCktPmkpICE9IDApCiAgICAgICAgICBwYyA9IChp
bnNuX3Nsb3QgKikgcGMtPmRhdHVtOwogICAgICAgIGVsc2UKICAgICAgICAgICsrcGM7CiAgICAg
IH0KICAgICAgZ290byAqKChwYysrKS0+aW5zbik7CgogICAgaW5zbl9pZmx0OgogICAgICB7CiAg
ICAgICAgaWYgKCgoamludCkgKC0tc3ApLT5pKSA8IDApCiAgICAgICAgICBwYyA9IChpbnNuX3Ns
b3QgKikgcGMtPmRhdHVtOwogICAgICAgIGVsc2UKICAgICAgICAgICsrcGM7CiAgICAgIH0KICAg
ICAgZ290byAqKChwYysrKS0+aW5zbik7CgogICAgaW5zbl9pZmdlOgogICAgICB7CiAgICAgICAg
aWYgKCgoamludCkgKC0tc3ApLT5pKSA+PSAwKQogICAgICAgICAgcGMgPSAoaW5zbl9zbG90ICop
IHBjLT5kYXR1bTsKICAgICAgICBlbHNlCiAgICAgICAgICArK3BjOwogICAgICB9CiAgICAgIGdv
dG8gKigocGMrKyktPmluc24pOwoKICAgIGluc25faWZndDoKICAgICAgewogICAgICAgIGlmICgo
KGppbnQpICgtLXNwKS0+aSkgPiAwKQogICAgICAgICAgcGMgPSAoaW5zbl9zbG90ICopIHBjLT5k
YXR1bTsKICAgICAgICBlbHNlCiAgICAgICAgICArK3BjOwogICAgICB9CiAgICAgIGdvdG8gKigo
cGMrKyktPmluc24pOwoKICAgIGluc25faWZsZToKICAgICAgewogICAgICAgIGlmICgoKGppbnQp
ICgtLXNwKS0+aSkgPD0gMCkKICAgICAgICAgIHBjID0gKGluc25fc2xvdCAqKSBwYy0+ZGF0dW07
CiAgICAgICAgZWxzZQogICAgICAgICAgKytwYzsKICAgICAgfQogICAgICBnb3RvICooKHBjKysp
LT5pbnNuKTsKCiAgICBpbnNuX2lmX2ljbXBlcToKICAgICAgewogICAgICAgIGppbnQgdmFsdWUy
ID0gKChqaW50KSAoLS1zcCktPmkpOwogICAgICAgIGppbnQgdmFsdWUxID0gKChqaW50KSAoLS1z
cCktPmkpOwogICAgICAgIGlmICh2YWx1ZTEgPT0gdmFsdWUyKQogICAgICAgICAgcGMgPSAoaW5z
bl9zbG90ICopIHBjLT5kYXR1bTsKICAgICAgICBlbHNlCiAgICAgICAgICArK3BjOwogICAgICB9
CiAgICAgIGdvdG8gKigocGMrKyktPmluc24pOwoKICAgIGluc25faWZfaWNtcG5lOgogICAgICB7
CiAgICAgICAgamludCB2YWx1ZTIgPSAoKGppbnQpICgtLXNwKS0+aSk7CiAgICAgICAgamludCB2
YWx1ZTEgPSAoKGppbnQpICgtLXNwKS0+aSk7CiAgICAgICAgaWYgKHZhbHVlMSAhPSB2YWx1ZTIp
CiAgICAgICAgICBwYyA9IChpbnNuX3Nsb3QgKikgcGMtPmRhdHVtOwogICAgICAgIGVsc2UKICAg
ICAgICAgICsrcGM7CiAgICAgIH0KICAgICAgZ290byAqKChwYysrKS0+aW5zbik7CgogICAgaW5z
bl9pZl9pY21wbHQ6CiAgICAgIHsKICAgICAgICBqaW50IHZhbHVlMiA9ICgoamludCkgKC0tc3Ap
LT5pKTsKICAgICAgICBqaW50IHZhbHVlMSA9ICgoamludCkgKC0tc3ApLT5pKTsKICAgICAgICBp
ZiAodmFsdWUxIDwgdmFsdWUyKQogICAgICAgICAgcGMgPSAoaW5zbl9zbG90ICopIHBjLT5kYXR1
bTsKICAgICAgICBlbHNlCiAgICAgICAgICArK3BjOwogICAgICB9CiAgICAgIGdvdG8gKigocGMr
KyktPmluc24pOwoKICAgIGluc25faWZfaWNtcGdlOgogICAgICB7CiAgICAgICAgamludCB2YWx1
ZTIgPSAoKGppbnQpICgtLXNwKS0+aSk7CiAgICAgICAgamludCB2YWx1ZTEgPSAoKGppbnQpICgt
LXNwKS0+aSk7CiAgICAgICAgaWYgKHZhbHVlMSA+PSB2YWx1ZTIpCiAgICAgICAgICBwYyA9IChp
bnNuX3Nsb3QgKikgcGMtPmRhdHVtOwogICAgICAgIGVsc2UKICAgICAgICAgICsrcGM7CiAgICAg
IH0KICAgICAgZ290byAqKChwYysrKS0+aW5zbik7CgogICAgaW5zbl9pZl9pY21wZ3Q6CiAgICAg
IHsKICAgICAgICBqaW50IHZhbHVlMiA9ICgoamludCkgKC0tc3ApLT5pKTsKICAgICAgICBqaW50
IHZhbHVlMSA9ICgoamludCkgKC0tc3ApLT5pKTsKICAgICAgICBpZiAodmFsdWUxID4gdmFsdWUy
KQogICAgICAgICAgcGMgPSAoaW5zbl9zbG90ICopIHBjLT5kYXR1bTsKICAgICAgICBlbHNlCiAg
ICAgICAgICArK3BjOwogICAgICB9CiAgICAgIGdvdG8gKigocGMrKyktPmluc24pOwoKICAgIGlu
c25faWZfaWNtcGxlOgogICAgICB7CiAgICAgICAgamludCB2YWx1ZTIgPSAoKGppbnQpICgtLXNw
KS0+aSk7CiAgICAgICAgamludCB2YWx1ZTEgPSAoKGppbnQpICgtLXNwKS0+aSk7CiAgICAgICAg
aWYgKHZhbHVlMSA8PSB2YWx1ZTIpCiAgICAgICAgICBwYyA9IChpbnNuX3Nsb3QgKikgcGMtPmRh
dHVtOwogICAgICAgIGVsc2UKICAgICAgICAgICsrcGM7CiAgICAgIH0KICAgICAgZ290byAqKChw
YysrKS0+aW5zbik7CgogICAgaW5zbl9pZl9hY21wZXE6CiAgICAgIHsKICAgICAgICBqb2JqZWN0
IHZhbHVlMiA9ICgoLS1zcCktPm8pOwogICAgICAgIGpvYmplY3QgdmFsdWUxID0gKCgtLXNwKS0+
byk7CiAgICAgICAgaWYgKHZhbHVlMSA9PSB2YWx1ZTIpCiAgICAgICAgICBwYyA9IChpbnNuX3Ns
b3QgKikgcGMtPmRhdHVtOwogICAgICAgIGVsc2UKICAgICAgICAgICsrcGM7CiAgICAgIH0KICAg
ICAgZ290byAqKChwYysrKS0+aW5zbik7CgogICAgaW5zbl9pZl9hY21wbmU6CiAgICAgIHsKICAg
ICAgICBqb2JqZWN0IHZhbHVlMiA9ICgoLS1zcCktPm8pOwogICAgICAgIGpvYmplY3QgdmFsdWUx
ID0gKCgtLXNwKS0+byk7CiAgICAgICAgaWYgKHZhbHVlMSAhPSB2YWx1ZTIpCiAgICAgICAgICBw
YyA9IChpbnNuX3Nsb3QgKikgcGMtPmRhdHVtOwogICAgICAgIGVsc2UKICAgICAgICAgICsrcGM7
CiAgICAgIH0KICAgICAgZ290byAqKChwYysrKS0+aW5zbik7CgogICAgaW5zbl9nb3RvOgogICAg
aW5zbl9nb3RvX3c6CiAgICAgIHBjID0gKGluc25fc2xvdCAqKSBwYy0+ZGF0dW07CiAgICAgIGdv
dG8gKigocGMrKyktPmluc24pOwoKICAgIGluc25fanNyOgogICAgaW5zbl9qc3JfdzoKICAgICAg
ewogICAgICAgIHZvaWQgKm5leHQgPSAoKHBjKyspLT5kYXR1bSk7CiAgICAgICAgKHNwKyspLT5v
ID0gKChqb2JqZWN0KSBwYyk7CiAgICAgICAgcGMgPSAoaW5zbl9zbG90ICopIG5leHQ7CiAgICAg
IH0KICAgICAgZ290byAqKChwYysrKS0+aW5zbik7CgogICAgaW5zbl9yZXQ6CiAgICAgIHsKICAg
ICAgICBqaW50IGluZGV4ID0gKChwYysrKS0+aW50X3ZhbCk7CiAgICAgICAgcGMgPSAoaW5zbl9z
bG90ICopIChsb2NhbHMrKGluZGV4KSktPm87CiAgICAgIH0KICAgICAgZ290byAqKChwYysrKS0+
aW5zbik7CgogICAgaW5zbl90YWJsZXN3aXRjaDoKICAgICAgewogICAgICAgIHZvaWQgKmRlZiA9
IChwYysrKS0+ZGF0dW07CgogICAgICAgIGludCBpbmRleCA9ICgoamludCkgKC0tc3ApLT5pKTsK
CiAgICAgICAgamludCBsb3cgPSAoKHBjKyspLT5pbnRfdmFsKTsKICAgICAgICBqaW50IGhpZ2gg
PSAoKHBjKyspLT5pbnRfdmFsKTsKCiAgICAgICAgaWYgKGluZGV4IDwgbG93IHx8IGluZGV4ID4g
aGlnaCkKICAgICAgICAgIHBjID0gKGluc25fc2xvdCAqKSBkZWY7CiAgICAgICAgZWxzZQogICAg
ICAgICAgcGMgPSAoaW5zbl9zbG90ICopICgocGMgKyBpbmRleCAtIGxvdyktPmRhdHVtKTsKICAg
ICAgfQogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2xvb2t1cHN3aXRjaDoK
ICAgICAgewogICAgICAgIHZvaWQgKmRlZiA9IChwYysrKS0+aW5zbjsKCiAgICAgICAgaW50IGlu
ZGV4ID0gKChqaW50KSAoLS1zcCktPmkpOwoKICAgICAgICBqaW50IG5wYWlycyA9ICgocGMrKykt
PmludF92YWwpOwoKICAgICAgICBpbnQgbWF4ID0gbnBhaXJzIC0gMTsKICAgICAgICBpbnQgbWlu
ID0gMDsKCgogICAgICAgIHdoaWxlIChtaW4gPCBtYXgpCiAgICAgICAgICB7CiAgICAgICAgICAg
IGludCBoYWxmID0gKG1pbiArIG1heCkgLyAyOwogICAgICAgICAgICBpbnQgbWF0Y2ggPSBwY1sy
ICogaGFsZl0uaW50X3ZhbDsKCiAgICAgICAgICAgIGlmIChpbmRleCA9PSBtYXRjaCkKICAgICAg
ICAgICAgICB7CgogICAgICAgICAgICAgICAgcGMgPSAoaW5zbl9zbG90ICopIHBjWzIgKiBoYWxm
ICsgMV0uZGF0dW07CiAgICAgICAgICAgICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKGluZGV4IDwgbWF0Y2gpCiAgICAgICAgICAg
ICAgbWF4ID0gaGFsZiAtIDE7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBtaW4gPSBo
YWxmICsgMTsKICAgICAgICAgIH0KICAgICAgICBwYyA9IChpbnNuX3Nsb3QgKikgZGVmOwogICAg
ICB9CiAgICAgIGdvdG8gKigocGMrKyktPmluc24pOwoKICAgIGluc25fYXJldHVybjoKICAgICAg
Kihqb2JqZWN0ICopIHJldHAgPSAoKC0tc3ApLT5vKTsKICAgICAgcmV0dXJuOwoKICAgIGluc25f
bHJldHVybjoKICAgICAgKihqbG9uZyAqKSByZXRwID0gKHsgX0p2X3dvcmQyIHcyOyB3Mi5pYVsx
XSA9ICgtLXNwKS0+aWFbMF07IHcyLmlhWzBdID0gKC0tc3ApLT5pYVswXTsgdzIubDsgfSk7CiAg
ICAgIHJldHVybjsKCiAgICBpbnNuX2ZyZXR1cm46CiAgICAgICooamZsb2F0ICopIHJldHAgPSAo
KGpmbG9hdCkgKC0tc3ApLT5mKTsKICAgICAgcmV0dXJuOwoKICAgIGluc25fZHJldHVybjoKICAg
ICAgKihqZG91YmxlICopIHJldHAgPSAoeyBfSnZfd29yZDIgdzI7IHcyLmlhWzFdID0gKC0tc3Ap
LT5pYVswXTsgdzIuaWFbMF0gPSAoLS1zcCktPmlhWzBdOyB3Mi5kOyB9KTsKICAgICAgcmV0dXJu
OwoKICAgIGluc25faXJldHVybjoKICAgICAgKihqaW50ICopIHJldHAgPSAoKGppbnQpICgtLXNw
KS0+aSk7CiAgICAgIHJldHVybjsKCiAgICBpbnNuX3JldHVybjoKICAgICAgcmV0dXJuOwoKICAg
IGluc25fZ2V0c3RhdGljOgogICAgICA7CiAgICAgIHsKICAgICAgICBqaW50IGZpZWxkcmVmX2lu
ZGV4ID0gKChwYysrKS0+aW50X3ZhbCk7CiAgICAgICAgX0p2X1Jlc29sdmVQb29sRW50cnkgKGRl
ZmluaW5nX2NsYXNzLCBmaWVsZHJlZl9pbmRleCk7CiAgICAgICAgX0p2X0ZpZWxkICpmaWVsZCA9
IHBvb2xfZGF0YVtmaWVsZHJlZl9pbmRleF0uZmllbGQ7CgogICAgICAgIGlmICgoZmllbGQtPmZs
YWdzICYgTW9kaWZpZXI6OlNUQVRJQykgPT0gMCkKICAgICAgICAgIHRocm93X2luY29tcGF0aWJs
ZV9jbGFzc19jaGFuZ2VfZXJyb3IKICAgICAgICAgICAgKEp2TmV3U3RyaW5nTGF0aW4xICgiZmll
bGQgbm8gbG9uZ2VyIHN0YXRpYyIpKTsKCiAgICAgICAgamNsYXNzIHR5cGUgPSBmaWVsZC0+dHlw
ZTsKCgoKICAgICAgICB2b2lkICpuZXdpbnNuID0gX19udWxsOwogICAgICAgIGlmICh0eXBlLT5p
c1ByaW1pdGl2ZSAoKSkKICAgICAgICAgIHsKICAgICAgICAgICAgc3dpdGNoICh0eXBlLT5zaXpl
X2luX2J5dGVzKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAg
ICAgICAgICAoc3ArKyktPmkgPSAoKihqYnl0ZSopIChmaWVsZC0+dS5hZGRyKSk7CiAgICAgICAg
ICAgICAgICBuZXdpbnNuID0gJiZnZXRzdGF0aWNfcmVzb2x2ZWRfMTsKICAgICAgICAgICAgICAg
IGJyZWFrOwoKICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICBpZiAodHlwZSA9
PSAoJiBfSnZfY2hhckNsYXNzKSkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgIChzcCsrKS0+aSA9ICgqKGpjaGFyKikgKGZpZWxkLT51LmFkZHIpKTsKICAgICAgICAgICAg
ICAgICAgICBuZXdpbnNuID0gJiZnZXRzdGF0aWNfcmVzb2x2ZWRfY2hhcjsKICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgKHNwKyspLT5pID0gKCooanNob3J0KikgKGZpZWxkLT51LmFkZHIpKTsKICAg
ICAgICAgICAgICAgICAgICBuZXdpbnNuID0gJiZnZXRzdGF0aWNfcmVzb2x2ZWRfc2hvcnQ7CiAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICBj
YXNlIDQ6CiAgICAgICAgICAgICAgICAoc3ArKyktPmkgPSAoKihqaW50KikgKGZpZWxkLT51LmFk
ZHIpKTsKICAgICAgICAgICAgICAgIG5ld2luc24gPSAmJmdldHN0YXRpY19yZXNvbHZlZF80Owog
ICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgIGNhc2UgODoKICAgICAgICAgICAg
ICAgIGRvIHsgX0p2X3dvcmQyIHcyOyB3Mi5sPSgqKGpsb25nKikgKGZpZWxkLT51LmFkZHIpKTsg
KHNwKyspLT5pYVswXSA9IHcyLmlhWzBdOyAoc3ArKyktPmlhWzBdID0gdzIuaWFbMV07IH0gd2hp
bGUgKDApOwogICAgICAgICAgICAgICAgbmV3aW5zbiA9ICYmZ2V0c3RhdGljX3Jlc29sdmVkXzg7
CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAg
ICAgZWxzZQogICAgICAgICAgewogICAgICAgICAgICAoc3ArKyktPm8gPSAoKihqb2JqZWN0Kikg
KGZpZWxkLT51LmFkZHIpKTsKICAgICAgICAgICAgbmV3aW5zbiA9ICYmZ2V0c3RhdGljX3Jlc29s
dmVkX29iajsKICAgICAgICAgIH0KCiAgICAgICAgcGNbLTJdLmluc24gPSBuZXdpbnNuOwogICAg
ICAgIHBjWy0xXS5kYXR1bSA9IGZpZWxkLT51LmFkZHI7CiAgICAgIH0KICAgICAgZ290byAqKChw
YysrKS0+aW5zbik7CgogICAgZ2V0c3RhdGljX3Jlc29sdmVkXzE6CiAgICAgIChzcCsrKS0+aSA9
ICgqKGpieXRlICopICgocGMrKyktPmRhdHVtKSk7CiAgICAgIGdvdG8gKigocGMrKyktPmluc24p
OwoKICAgIGdldHN0YXRpY19yZXNvbHZlZF9jaGFyOgogICAgICAoc3ArKyktPmkgPSAoKihqY2hh
ciAqKSAoKHBjKyspLT5kYXR1bSkpOwogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBn
ZXRzdGF0aWNfcmVzb2x2ZWRfc2hvcnQ6CiAgICAgIChzcCsrKS0+aSA9ICgqKGpzaG9ydCAqKSAo
KHBjKyspLT5kYXR1bSkpOwogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBnZXRzdGF0
aWNfcmVzb2x2ZWRfNDoKICAgICAgKHNwKyspLT5pID0gKCooamludCAqKSAoKHBjKyspLT5kYXR1
bSkpOwogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBnZXRzdGF0aWNfcmVzb2x2ZWRf
ODoKICAgICAgZG8geyBfSnZfd29yZDIgdzI7IHcyLmw9KCooamxvbmcgKikgKChwYysrKS0+ZGF0
dW0pKTsgKHNwKyspLT5pYVswXSA9IHcyLmlhWzBdOyAoc3ArKyktPmlhWzBdID0gdzIuaWFbMV07
IH0gd2hpbGUgKDApOwogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBnZXRzdGF0aWNf
cmVzb2x2ZWRfb2JqOgogICAgICAoc3ArKyktPm8gPSAoKihqb2JqZWN0ICopICgocGMrKyktPmRh
dHVtKSk7CiAgICAgIGdvdG8gKigocGMrKyktPmluc24pOwoKICAgIGluc25fZ2V0ZmllbGQ6CiAg
ICAgIDsKICAgICAgewogICAgICAgIGppbnQgZmllbGRyZWZfaW5kZXggPSAoKHBjKyspLT5pbnRf
dmFsKTsKICAgICAgICBfSnZfUmVzb2x2ZVBvb2xFbnRyeSAoZGVmaW5pbmdfY2xhc3MsIGZpZWxk
cmVmX2luZGV4KTsKICAgICAgICBfSnZfRmllbGQgKmZpZWxkID0gcG9vbF9kYXRhW2ZpZWxkcmVm
X2luZGV4XS5maWVsZDsKCiAgICAgICAgaWYgKChmaWVsZC0+ZmxhZ3MgJiBNb2RpZmllcjo6U1RB
VElDKSAhPSAwKQogICAgICAgICAgdGhyb3dfaW5jb21wYXRpYmxlX2NsYXNzX2NoYW5nZV9lcnJv
cgogICAgICAgICAgICAoSnZOZXdTdHJpbmdMYXRpbjEgKCJmaWVsZCBpcyBzdGF0aWMiKSk7Cgog
ICAgICAgIGpjbGFzcyB0eXBlID0gZmllbGQtPnR5cGU7CiAgICAgICAgamludCBmaWVsZF9vZmZz
ZXQgPSBmaWVsZC0+dS5ib2Zmc2V0OwogICAgICAgIGlmIChmaWVsZF9vZmZzZXQgPiAweGZmZmYp
CiAgICAgICAgICB0aHJvdyBuZXcgamF2YTo6bGFuZzo6VmlydHVhbE1hY2hpbmVFcnJvcjsKCiAg
ICAgICAgam9iamVjdCBvYmogPSAoKC0tc3ApLT5vKTsKICAgICAgICA7CgogICAgICAgIHZvaWQg
Km5ld2luc24gPSBfX251bGw7CiAgICAgICAgaWYgKHR5cGUtPmlzUHJpbWl0aXZlICgpKQogICAg
ICAgICAgewogICAgICAgICAgICBzd2l0Y2ggKHR5cGUtPnNpemVfaW5fYnl0ZXMpCiAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgIChzcCsrKS0+aSA9
ICgqKGpieXRlKikgKChjaGFyKilvYmogKyBmaWVsZF9vZmZzZXQpKTsKICAgICAgICAgICAgICAg
IG5ld2luc24gPSAmJmdldGZpZWxkX3Jlc29sdmVkXzE7CiAgICAgICAgICAgICAgICBicmVhazsK
CiAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gKCYgX0p2
X2NoYXJDbGFzcykpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAoc3Ar
KyktPmkgPSAoKihqY2hhciopICgoY2hhciopb2JqICsgZmllbGRfb2Zmc2V0KSk7CiAgICAgICAg
ICAgICAgICAgICAgbmV3aW5zbiA9ICYmZ2V0ZmllbGRfcmVzb2x2ZWRfY2hhcjsKICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgKHNwKyspLT5pID0gKCooanNob3J0KikgKChjaGFyKilvYmogKyBmaWVs
ZF9vZmZzZXQpKTsKICAgICAgICAgICAgICAgICAgICBuZXdpbnNuID0gJiZnZXRmaWVsZF9yZXNv
bHZlZF9zaG9ydDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7Cgog
ICAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICAgIChzcCsrKS0+aSA9ICgqKGppbnQq
KSAoKGNoYXIqKW9iaiArIGZpZWxkX29mZnNldCkpOwogICAgICAgICAgICAgICAgbmV3aW5zbiA9
ICYmZ2V0ZmllbGRfcmVzb2x2ZWRfNDsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAg
ICAgICBjYXNlIDg6CiAgICAgICAgICAgICAgICBkbyB7IF9Kdl93b3JkMiB3MjsgdzIubD0oKihq
bG9uZyopICgoY2hhciopb2JqICsgZmllbGRfb2Zmc2V0KSk7IChzcCsrKS0+aWFbMF0gPSB3Mi5p
YVswXTsgKHNwKyspLT5pYVswXSA9IHcyLmlhWzFdOyB9IHdoaWxlICgwKTsKICAgICAgICAgICAg
ICAgIG5ld2luc24gPSAmJmdldGZpZWxkX3Jlc29sdmVkXzg7CiAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgewog
ICAgICAgICAgICAoc3ArKyktPm8gPSAoKihqb2JqZWN0KikgKChjaGFyKilvYmogKyBmaWVsZF9v
ZmZzZXQpKTsKICAgICAgICAgICAgbmV3aW5zbiA9ICYmZ2V0ZmllbGRfcmVzb2x2ZWRfb2JqOwog
ICAgICAgICAgfQoKICAgICAgICBwY1stMl0uaW5zbiA9IG5ld2luc247CiAgICAgICAgcGNbLTFd
LmludF92YWwgPSBmaWVsZF9vZmZzZXQ7CiAgICAgIH0KICAgICAgZ290byAqKChwYysrKS0+aW5z
bik7CgogICAgZ2V0ZmllbGRfcmVzb2x2ZWRfMToKICAgICAgOwogICAgICB7CiAgICAgICAgY2hh
ciAqb2JqID0gKGNoYXIgKikgKCgtLXNwKS0+byk7CiAgICAgICAgOwogICAgICAgIChzcCsrKS0+
aSA9ICgqKGpieXRlICopIChvYmogKyAoKHBjKyspLT5pbnRfdmFsKSkpOwogICAgICB9CiAgICAg
IGdvdG8gKigocGMrKyktPmluc24pOwoKICAgIGdldGZpZWxkX3Jlc29sdmVkX2NoYXI6CiAgICAg
IDsKICAgICAgewogICAgICAgIGNoYXIgKm9iaiA9IChjaGFyICopICgoLS1zcCktPm8pOwogICAg
ICAgIDsKICAgICAgICAoc3ArKyktPmkgPSAoKihqY2hhciAqKSAob2JqICsgKChwYysrKS0+aW50
X3ZhbCkpKTsKICAgICAgfQogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBnZXRmaWVs
ZF9yZXNvbHZlZF9zaG9ydDoKICAgICAgOwogICAgICB7CiAgICAgICAgY2hhciAqb2JqID0gKGNo
YXIgKikgKCgtLXNwKS0+byk7CiAgICAgICAgOwogICAgICAgIChzcCsrKS0+aSA9ICgqKGpzaG9y
dCAqKSAob2JqICsgKChwYysrKS0+aW50X3ZhbCkpKTsKICAgICAgfQogICAgICBnb3RvICooKHBj
KyspLT5pbnNuKTsKCiAgICBnZXRmaWVsZF9yZXNvbHZlZF80OgogICAgICA7CiAgICAgIHsKICAg
ICAgICBjaGFyICpvYmogPSAoY2hhciAqKSAoKC0tc3ApLT5vKTsKICAgICAgICA7CiAgICAgICAg
KHNwKyspLT5pID0gKCooamludCAqKSAob2JqICsgKChwYysrKS0+aW50X3ZhbCkpKTsKICAgICAg
fQogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBnZXRmaWVsZF9yZXNvbHZlZF84Ogog
ICAgICA7CiAgICAgIHsKICAgICAgICBjaGFyICpvYmogPSAoY2hhciAqKSAoKC0tc3ApLT5vKTsK
ICAgICAgICA7CiAgICAgICAgZG8geyBfSnZfd29yZDIgdzI7IHcyLmw9KCooamxvbmcgKikgKG9i
aiArICgocGMrKyktPmludF92YWwpKSk7IChzcCsrKS0+aWFbMF0gPSB3Mi5pYVswXTsgKHNwKysp
LT5pYVswXSA9IHcyLmlhWzFdOyB9IHdoaWxlICgwKTsKICAgICAgfQogICAgICBnb3RvICooKHBj
KyspLT5pbnNuKTsKCiAgICBnZXRmaWVsZF9yZXNvbHZlZF9vYmo6CiAgICAgIDsKICAgICAgewog
ICAgICAgIGNoYXIgKm9iaiA9IChjaGFyICopICgoLS1zcCktPm8pOwogICAgICAgIDsKICAgICAg
ICAoc3ArKyktPm8gPSAoKihqb2JqZWN0ICopIChvYmogKyAoKHBjKyspLT5pbnRfdmFsKSkpOwog
ICAgICB9CiAgICAgIGdvdG8gKigocGMrKyktPmluc24pOwoKICAgIGluc25fcHV0c3RhdGljOgog
ICAgICA7CiAgICAgIHsKICAgICAgICBqaW50IGZpZWxkcmVmX2luZGV4ID0gKChwYysrKS0+aW50
X3ZhbCk7CiAgICAgICAgX0p2X1Jlc29sdmVQb29sRW50cnkgKGRlZmluaW5nX2NsYXNzLCBmaWVs
ZHJlZl9pbmRleCk7CiAgICAgICAgX0p2X0ZpZWxkICpmaWVsZCA9IHBvb2xfZGF0YVtmaWVsZHJl
Zl9pbmRleF0uZmllbGQ7CgogICAgICAgIGpjbGFzcyB0eXBlID0gZmllbGQtPnR5cGU7CgoKICAg
ICAgICBpZiAoKGZpZWxkLT5mbGFncyAmIE1vZGlmaWVyOjpTVEFUSUMpID09IDApCiAgICAgICAg
ICB0aHJvd19pbmNvbXBhdGlibGVfY2xhc3NfY2hhbmdlX2Vycm9yCiAgICAgICAgICAgIChKdk5l
d1N0cmluZ0xhdGluMSAoImZpZWxkIG5vIGxvbmdlciBzdGF0aWMiKSk7CgogICAgICAgIHZvaWQg
Km5ld2luc24gPSBfX251bGw7CiAgICAgICAgaWYgKHR5cGUtPmlzUHJpbWl0aXZlICgpKQogICAg
ICAgICAgewogICAgICAgICAgICBzd2l0Y2ggKHR5cGUtPnNpemVfaW5fYnl0ZXMpCiAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgamludCB2YWx1ZSA9ICgoamludCkgKC0tc3ApLT5pKTsKICAgICAgICAgICAgICAg
ICAgKihqYnl0ZSopIChmaWVsZC0+dS5hZGRyKSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICBu
ZXdpbnNuID0gJiZwdXRzdGF0aWNfcmVzb2x2ZWRfMTsKICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgamludCB2YWx1ZSA9ICgoamludCkgKC0tc3ApLT5pKTsKICAg
ICAgICAgICAgICAgICAgKihqY2hhciopIChmaWVsZC0+dS5hZGRyKSA9IHZhbHVlOwogICAgICAg
ICAgICAgICAgICBuZXdpbnNuID0gJiZwdXRzdGF0aWNfcmVzb2x2ZWRfMjsKICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIGNhc2UgNDoKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgamludCB2YWx1ZSA9ICgoamludCkgKC0t
c3ApLT5pKTsKICAgICAgICAgICAgICAgICAgKihqaW50KikgKGZpZWxkLT51LmFkZHIpID0gdmFs
dWU7CiAgICAgICAgICAgICAgICAgIG5ld2luc24gPSAmJnB1dHN0YXRpY19yZXNvbHZlZF80Owog
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
Y2FzZSA4OgogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBqbG9uZyB2YWx1ZSA9
ICh7IF9Kdl93b3JkMiB3MjsgdzIuaWFbMV0gPSAoLS1zcCktPmlhWzBdOyB3Mi5pYVswXSA9ICgt
LXNwKS0+aWFbMF07IHcyLmw7IH0pOwogICAgICAgICAgICAgICAgICAqKGpsb25nKikgKGZpZWxk
LT51LmFkZHIpID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgIG5ld2luc24gPSAmJnB1dHN0YXRp
Y19yZXNvbHZlZF84OwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgewogICAg
ICAgICAgICBqb2JqZWN0IHZhbHVlID0gKCgtLXNwKS0+byk7CiAgICAgICAgICAgICooam9iamVj
dCopIChmaWVsZC0+dS5hZGRyKSA9IHZhbHVlOwogICAgICAgICAgICBuZXdpbnNuID0gJiZwdXRz
dGF0aWNfcmVzb2x2ZWRfb2JqOwogICAgICAgICAgfQoKICAgICAgICBwY1stMl0uaW5zbiA9IG5l
d2luc247CiAgICAgICAgcGNbLTFdLmRhdHVtID0gZmllbGQtPnUuYWRkcjsKICAgICAgfQogICAg
ICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBwdXRzdGF0aWNfcmVzb2x2ZWRfMToKICAgICAg
KihqYnl0ZSAqKSAoKHBjKyspLT5kYXR1bSkgPSAoKGppbnQpICgtLXNwKS0+aSk7CiAgICAgIGdv
dG8gKigocGMrKyktPmluc24pOwoKICAgIHB1dHN0YXRpY19yZXNvbHZlZF8yOgogICAgICAqKGpj
aGFyICopICgocGMrKyktPmRhdHVtKSA9ICgoamludCkgKC0tc3ApLT5pKTsKICAgICAgZ290byAq
KChwYysrKS0+aW5zbik7CgogICAgcHV0c3RhdGljX3Jlc29sdmVkXzQ6CiAgICAgICooamludCAq
KSAoKHBjKyspLT5kYXR1bSkgPSAoKGppbnQpICgtLXNwKS0+aSk7CiAgICAgIGdvdG8gKigocGMr
KyktPmluc24pOwoKICAgIHB1dHN0YXRpY19yZXNvbHZlZF84OgogICAgICAqKGpsb25nICopICgo
cGMrKyktPmRhdHVtKSA9ICh7IF9Kdl93b3JkMiB3MjsgdzIuaWFbMV0gPSAoLS1zcCktPmlhWzBd
OyB3Mi5pYVswXSA9ICgtLXNwKS0+aWFbMF07IHcyLmw7IH0pOwogICAgICBnb3RvICooKHBjKysp
LT5pbnNuKTsKCiAgICBwdXRzdGF0aWNfcmVzb2x2ZWRfb2JqOgogICAgICAqKGpvYmplY3QgKikg
KChwYysrKS0+ZGF0dW0pID0gKCgtLXNwKS0+byk7CiAgICAgIGdvdG8gKigocGMrKyktPmluc24p
OwoKICAgIGluc25fcHV0ZmllbGQ6CiAgICAgIDsKICAgICAgewogICAgICAgIGppbnQgZmllbGRy
ZWZfaW5kZXggPSAoKHBjKyspLT5pbnRfdmFsKTsKICAgICAgICBfSnZfUmVzb2x2ZVBvb2xFbnRy
eSAoZGVmaW5pbmdfY2xhc3MsIGZpZWxkcmVmX2luZGV4KTsKICAgICAgICBfSnZfRmllbGQgKmZp
ZWxkID0gcG9vbF9kYXRhW2ZpZWxkcmVmX2luZGV4XS5maWVsZDsKCiAgICAgICAgamNsYXNzIHR5
cGUgPSBmaWVsZC0+dHlwZTsKCiAgICAgICAgaWYgKChmaWVsZC0+ZmxhZ3MgJiBNb2RpZmllcjo6
U1RBVElDKSAhPSAwKQogICAgICAgICAgdGhyb3dfaW5jb21wYXRpYmxlX2NsYXNzX2NoYW5nZV9l
cnJvcgogICAgICAgICAgICAoSnZOZXdTdHJpbmdMYXRpbjEgKCJmaWVsZCBpcyBzdGF0aWMiKSk7
CgogICAgICAgIGppbnQgZmllbGRfb2Zmc2V0ID0gZmllbGQtPnUuYm9mZnNldDsKICAgICAgICBp
ZiAoZmllbGRfb2Zmc2V0ID4gMHhmZmZmKQogICAgICAgICAgdGhyb3cgbmV3IGphdmE6Omxhbmc6
OlZpcnR1YWxNYWNoaW5lRXJyb3I7CgogICAgICAgIHZvaWQgKm5ld2luc24gPSBfX251bGw7CiAg
ICAgICAgaWYgKHR5cGUtPmlzUHJpbWl0aXZlICgpKQogICAgICAgICAgewogICAgICAgICAgICBz
d2l0Y2ggKHR5cGUtPnNpemVfaW5fYnl0ZXMpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAg
IGNhc2UgMToKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgamludCB2YWx1ZSA9
ICgoamludCkgKC0tc3ApLT5pKTsKICAgICAgICAgICAgICAgICAgam9iamVjdCBvYmogPSAoKC0t
c3ApLT5vKTsKICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAqKGpieXRlKikg
KChjaGFyKilvYmogKyBmaWVsZF9vZmZzZXQpID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgIG5l
d2luc24gPSAmJnB1dGZpZWxkX3Jlc29sdmVkXzE7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgIGppbnQgdmFsdWUgPSAoKGppbnQpICgtLXNwKS0+aSk7CiAgICAg
ICAgICAgICAgICAgIGpvYmplY3Qgb2JqID0gKCgtLXNwKS0+byk7CiAgICAgICAgICAgICAgICAg
IDsKICAgICAgICAgICAgICAgICAgKihqY2hhciopICgoY2hhciopb2JqICsgZmllbGRfb2Zmc2V0
KSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICBuZXdpbnNuID0gJiZwdXRmaWVsZF9yZXNvbHZl
ZF8yOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgY2FzZSA0OgogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBqaW50IHZh
bHVlID0gKChqaW50KSAoLS1zcCktPmkpOwogICAgICAgICAgICAgICAgICBqb2JqZWN0IG9iaiA9
ICgoLS1zcCktPm8pOwogICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICooamlu
dCopICgoY2hhciopb2JqICsgZmllbGRfb2Zmc2V0KSA9IHZhbHVlOwogICAgICAgICAgICAgICAg
ICBuZXdpbnNuID0gJiZwdXRmaWVsZF9yZXNvbHZlZF80OwogICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgY2FzZSA4OgogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICBqbG9uZyB2YWx1ZSA9ICh7IF9Kdl93b3JkMiB3MjsgdzIu
aWFbMV0gPSAoLS1zcCktPmlhWzBdOyB3Mi5pYVswXSA9ICgtLXNwKS0+aWFbMF07IHcyLmw7IH0p
OwogICAgICAgICAgICAgICAgICBqb2JqZWN0IG9iaiA9ICgoLS1zcCktPm8pOwogICAgICAgICAg
ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICooamxvbmcqKSAoKGNoYXIqKW9iaiArIGZpZWxk
X29mZnNldCkgPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgbmV3aW5zbiA9ICYmcHV0ZmllbGRf
cmVzb2x2ZWRfODsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIHsKICAgICAg
ICAgICAgam9iamVjdCB2YWx1ZSA9ICgoLS1zcCktPm8pOwogICAgICAgICAgICBqb2JqZWN0IG9i
aiA9ICgoLS1zcCktPm8pOwogICAgICAgICAgICA7CiAgICAgICAgICAgICooam9iamVjdCopICgo
Y2hhciopb2JqICsgZmllbGRfb2Zmc2V0KSA9IHZhbHVlOwogICAgICAgICAgICBuZXdpbnNuID0g
JiZwdXRmaWVsZF9yZXNvbHZlZF9vYmo7CiAgICAgICAgICB9CgogICAgICAgIHBjWy0yXS5pbnNu
ID0gbmV3aW5zbjsKICAgICAgICBwY1stMV0uaW50X3ZhbCA9IGZpZWxkX29mZnNldDsKICAgICAg
fQogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBwdXRmaWVsZF9yZXNvbHZlZF8xOgog
ICAgICA7CiAgICAgIHsKICAgICAgICBqaW50IHZhbCA9ICgoamludCkgKC0tc3ApLT5pKTsKICAg
ICAgICBjaGFyICpvYmogPSAoY2hhciAqKSAoKC0tc3ApLT5vKTsKICAgICAgICA7CiAgICAgICAg
KihqYnl0ZSAqKSAob2JqICsgKChwYysrKS0+aW50X3ZhbCkpID0gdmFsOwogICAgICB9CiAgICAg
IGdvdG8gKigocGMrKyktPmluc24pOwoKICAgIHB1dGZpZWxkX3Jlc29sdmVkXzI6CiAgICAgIDsK
ICAgICAgewogICAgICAgIGppbnQgdmFsID0gKChqaW50KSAoLS1zcCktPmkpOwogICAgICAgIGNo
YXIgKm9iaiA9IChjaGFyICopICgoLS1zcCktPm8pOwogICAgICAgIDsKICAgICAgICAqKGpjaGFy
ICopIChvYmogKyAoKHBjKyspLT5pbnRfdmFsKSkgPSB2YWw7CiAgICAgIH0KICAgICAgZ290byAq
KChwYysrKS0+aW5zbik7CgogICAgcHV0ZmllbGRfcmVzb2x2ZWRfNDoKICAgICAgOwogICAgICB7
CiAgICAgICAgamludCB2YWwgPSAoKGppbnQpICgtLXNwKS0+aSk7CiAgICAgICAgY2hhciAqb2Jq
ID0gKGNoYXIgKikgKCgtLXNwKS0+byk7CiAgICAgICAgOwogICAgICAgICooamludCAqKSAob2Jq
ICsgKChwYysrKS0+aW50X3ZhbCkpID0gdmFsOwogICAgICB9CiAgICAgIGdvdG8gKigocGMrKykt
Pmluc24pOwoKICAgIHB1dGZpZWxkX3Jlc29sdmVkXzg6CiAgICAgIDsKICAgICAgewogICAgICAg
IGpsb25nIHZhbCA9ICh7IF9Kdl93b3JkMiB3MjsgdzIuaWFbMV0gPSAoLS1zcCktPmlhWzBdOyB3
Mi5pYVswXSA9ICgtLXNwKS0+aWFbMF07IHcyLmw7IH0pOwogICAgICAgIGNoYXIgKm9iaiA9IChj
aGFyICopICgoLS1zcCktPm8pOwogICAgICAgIDsKICAgICAgICAqKGpsb25nICopIChvYmogKyAo
KHBjKyspLT5pbnRfdmFsKSkgPSB2YWw7CiAgICAgIH0KICAgICAgZ290byAqKChwYysrKS0+aW5z
bik7CgogICAgcHV0ZmllbGRfcmVzb2x2ZWRfb2JqOgogICAgICA7CiAgICAgIHsKICAgICAgICBq
b2JqZWN0IHZhbCA9ICgoLS1zcCktPm8pOwogICAgICAgIGNoYXIgKm9iaiA9IChjaGFyICopICgo
LS1zcCktPm8pOwogICAgICAgIDsKICAgICAgICAqKGpvYmplY3QgKikgKG9iaiArICgocGMrKykt
PmludF92YWwpKSA9IHZhbDsKICAgICAgfQogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAg
ICBpbnNuX2ludm9rZXNwZWNpYWw6CiAgICAgIDsKICAgICAgewogICAgICAgIGludCBpbmRleCA9
ICgocGMrKyktPmludF92YWwpOwoKICAgICAgICBybWV0aCA9IChfSnZfUmVzb2x2ZVBvb2xFbnRy
eSAoZGVmaW5pbmdfY2xhc3MsIGluZGV4KSkucm1ldGhvZDsKCiAgICAgICAgc3AgLT0gcm1ldGgt
PnN0YWNrX2l0ZW1fY291bnQ7CgogICAgICAgIDsKCiAgICAgICAgZnVuID0gKHZvaWQgKCopKCkp
IHJtZXRoLT5tZXRob2QtPm5jb2RlOwoKCgogICAgICAgIHBjWy0yXS5pbnNuID0gJiZpbnZva2Vz
cGVjaWFsX3Jlc29sdmVkOwogICAgICAgIHBjWy0xXS5kYXR1bSA9IHJtZXRoOwogICAgICB9CiAg
ICAgIGdvdG8gcGVyZm9ybV9pbnZva2U7CgogICAgaW52b2tlc3BlY2lhbF9yZXNvbHZlZDoKICAg
ICAgOwogICAgICB7CiAgICAgICAgcm1ldGggPSAoX0p2X1Jlc29sdmVkTWV0aG9kICopICgocGMr
KyktPmRhdHVtKTsKICAgICAgICBzcCAtPSBybWV0aC0+c3RhY2tfaXRlbV9jb3VudDsKICAgICAg
ICA7CiAgICAgICAgZnVuID0gKHZvaWQgKCopKCkpIHJtZXRoLT5tZXRob2QtPm5jb2RlOwogICAg
ICB9CiAgICAgIGdvdG8gcGVyZm9ybV9pbnZva2U7CgogICAgaW5zbl9pbnZva2VzdGF0aWM6CiAg
ICAgIDsKICAgICAgewogICAgICAgIGludCBpbmRleCA9ICgocGMrKyktPmludF92YWwpOwoKICAg
ICAgICBybWV0aCA9IChfSnZfUmVzb2x2ZVBvb2xFbnRyeSAoZGVmaW5pbmdfY2xhc3MsIGluZGV4
KSkucm1ldGhvZDsKCiAgICAgICAgc3AgLT0gcm1ldGgtPnN0YWNrX2l0ZW1fY291bnQ7CgogICAg
ICAgIF9Kdl9Jbml0Q2xhc3MgKHJtZXRoLT5rbGFzcyk7CiAgICAgICAgZnVuID0gKHZvaWQgKCop
KCkpIHJtZXRoLT5tZXRob2QtPm5jb2RlOwoKCgogICAgICAgIHBjWy0yXS5pbnNuID0gJiZpbnZv
a2VzdGF0aWNfcmVzb2x2ZWQ7CiAgICAgICAgcGNbLTFdLmRhdHVtID0gcm1ldGg7CiAgICAgIH0K
ICAgICAgZ290byBwZXJmb3JtX2ludm9rZTsKCiAgICBpbnZva2VzdGF0aWNfcmVzb2x2ZWQ6CiAg
ICAgIDsKICAgICAgewogICAgICAgIHJtZXRoID0gKF9Kdl9SZXNvbHZlZE1ldGhvZCAqKSAoKHBj
KyspLT5kYXR1bSk7CiAgICAgICAgc3AgLT0gcm1ldGgtPnN0YWNrX2l0ZW1fY291bnQ7CiAgICAg
ICAgZnVuID0gKHZvaWQgKCopKCkpIHJtZXRoLT5tZXRob2QtPm5jb2RlOwogICAgICB9CiAgICAg
IGdvdG8gcGVyZm9ybV9pbnZva2U7CgogICAgaW5zbl9pbnZva2VpbnRlcmZhY2U6CiAgICAgIDsK
ICAgICAgewogICAgICAgIGludCBpbmRleCA9ICgocGMrKyktPmludF92YWwpOwoKICAgICAgICBy
bWV0aCA9IChfSnZfUmVzb2x2ZVBvb2xFbnRyeSAoZGVmaW5pbmdfY2xhc3MsIGluZGV4KSkucm1l
dGhvZDsKCiAgICAgICAgc3AgLT0gcm1ldGgtPnN0YWNrX2l0ZW1fY291bnQ7CgogICAgICAgIGpv
YmplY3QgcmN2ID0gc3BbMF0ubzsKCiAgICAgICAgOwoKICAgICAgICBmdW4gPSAodm9pZCAoKiko
KSkKICAgICAgICAgIF9Kdl9Mb29rdXBJbnRlcmZhY2VNZXRob2QgKHJjdi0+Z2V0Q2xhc3MgKCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBybWV0aC0+bWV0aG9kLT5uYW1l
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm1ldGgtPm1ldGhvZC0+c2ln
bmF0dXJlKTsKCgoKICAgICAgICBwY1stMl0uaW5zbiA9ICYmaW52b2tlaW50ZXJmYWNlX3Jlc29s
dmVkOwogICAgICAgIHBjWy0xXS5kYXR1bSA9IHJtZXRoOwogICAgICB9CiAgICAgIGdvdG8gcGVy
Zm9ybV9pbnZva2U7CgogICAgaW52b2tlaW50ZXJmYWNlX3Jlc29sdmVkOgogICAgICA7CiAgICAg
IHsKICAgICAgICBybWV0aCA9IChfSnZfUmVzb2x2ZWRNZXRob2QgKikgKChwYysrKS0+ZGF0dW0p
OwogICAgICAgIHNwIC09IHJtZXRoLT5zdGFja19pdGVtX2NvdW50OwogICAgICAgIGpvYmplY3Qg
cmN2ID0gc3BbMF0ubzsKICAgICAgICA7CiAgICAgICAgZnVuID0gKHZvaWQgKCopKCkpCiAgICAg
ICAgICBfSnZfTG9va3VwSW50ZXJmYWNlTWV0aG9kIChyY3YtPmdldENsYXNzICgpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm1ldGgtPm1ldGhvZC0+bmFtZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJtZXRoLT5tZXRob2QtPnNpZ25hdHVyZSk7
CiAgICAgIH0KICAgICAgZ290byBwZXJmb3JtX2ludm9rZTsKCgogICAgaW5zbl9uZXc6CiAgICAg
IDsKICAgICAgewogICAgICAgIGludCBpbmRleCA9ICgocGMrKyktPmludF92YWwpOwogICAgICAg
IGpjbGFzcyBrbGFzcyA9IChfSnZfUmVzb2x2ZVBvb2xFbnRyeSAoZGVmaW5pbmdfY2xhc3MsIGlu
ZGV4KSkuY2xheno7CiAgICAgICAgX0p2X0luaXRDbGFzcyAoa2xhc3MpOwogICAgICAgIGpvYmpl
Y3QgcmVzID0gX0p2X0FsbG9jT2JqZWN0IChrbGFzcywga2xhc3MtPnNpemVfaW5fYnl0ZXMpOwog
ICAgICAgIChzcCsrKS0+byA9IChyZXMpOwoKICAgICAgICBwY1stMl0uaW5zbiA9ICYmbmV3X3Jl
c29sdmVkOwogICAgICAgIHBjWy0xXS5kYXR1bSA9IGtsYXNzOwogICAgICB9CiAgICAgIGdvdG8g
KigocGMrKyktPmluc24pOwoKICAgIG5ld19yZXNvbHZlZDoKICAgICAgOwogICAgICB7CiAgICAg
ICAgamNsYXNzIGtsYXNzID0gKGpjbGFzcykgKChwYysrKS0+ZGF0dW0pOwogICAgICAgIGpvYmpl
Y3QgcmVzID0gX0p2X0FsbG9jT2JqZWN0IChrbGFzcywga2xhc3MtPnNpemVfaW5fYnl0ZXMpOwog
ICAgICAgIChzcCsrKS0+byA9IChyZXMpOwogICAgICB9CiAgICAgIGdvdG8gKigocGMrKyktPmlu
c24pOwoKICAgIGluc25fbmV3YXJyYXk6CiAgICAgIDsKICAgICAgewogICAgICAgIGludCBhdHlw
ZSA9ICgocGMrKyktPmludF92YWwpOwogICAgICAgIGludCBzaXplID0gKChqaW50KSAoLS1zcCkt
PmkpOwogICAgICAgIGpvYmplY3QgcmVzdWx0ID0gX0p2X05ld0FycmF5IChhdHlwZSwgc2l6ZSk7
CiAgICAgICAgKHNwKyspLT5vID0gKHJlc3VsdCk7CiAgICAgIH0KICAgICAgZ290byAqKChwYysr
KS0+aW5zbik7CgogICAgaW5zbl9hbmV3YXJyYXk6CiAgICAgIDsKICAgICAgewogICAgICAgIGlu
dCBpbmRleCA9ICgocGMrKyktPmludF92YWwpOwogICAgICAgIGpjbGFzcyBrbGFzcyA9IChfSnZf
UmVzb2x2ZVBvb2xFbnRyeSAoZGVmaW5pbmdfY2xhc3MsIGluZGV4KSkuY2xheno7CiAgICAgICAg
aW50IHNpemUgPSAoKGppbnQpICgtLXNwKS0+aSk7CiAgICAgICAgX0p2X0luaXRDbGFzcyAoa2xh
c3MpOwogICAgICAgIGpvYmplY3QgcmVzdWx0ID0gX0p2X05ld09iamVjdEFycmF5IChzaXplLCBr
bGFzcywgMCk7CiAgICAgICAgKHNwKyspLT5vID0gKHJlc3VsdCk7CgogICAgICAgIHBjWy0yXS5p
bnNuID0gJiZhbmV3YXJyYXlfcmVzb2x2ZWQ7CiAgICAgICAgcGNbLTFdLmRhdHVtID0ga2xhc3M7
CiAgICAgIH0KICAgICAgZ290byAqKChwYysrKS0+aW5zbik7CgogICAgYW5ld2FycmF5X3Jlc29s
dmVkOgogICAgICA7CiAgICAgIHsKICAgICAgICBqY2xhc3Mga2xhc3MgPSAoamNsYXNzKSAoKHBj
KyspLT5kYXR1bSk7CiAgICAgICAgaW50IHNpemUgPSAoKGppbnQpICgtLXNwKS0+aSk7CiAgICAg
ICAgam9iamVjdCByZXN1bHQgPSBfSnZfTmV3T2JqZWN0QXJyYXkgKHNpemUsIGtsYXNzLCAwKTsK
ICAgICAgICAoc3ArKyktPm8gPSAocmVzdWx0KTsKICAgICAgfQogICAgICBnb3RvICooKHBjKysp
LT5pbnNuKTsKCiAgICBpbnNuX2FycmF5bGVuZ3RoOgogICAgICB7CiAgICAgICAgX19KQXJyYXkg
KmFyciA9IChfX0pBcnJheSopKCgtLXNwKS0+byk7CiAgICAgICAgZG8geyA7IH0gd2hpbGUgKDAp
OwogICAgICAgIChzcCsrKS0+aSA9IChhcnItPmxlbmd0aCk7CiAgICAgIH0KICAgICAgZ290byAq
KChwYysrKS0+aW5zbik7CgogICAgaW5zbl9hdGhyb3c6CiAgICAgIDsKICAgICAgewogICAgICAg
IGpvYmplY3QgdmFsdWUgPSAoKC0tc3ApLT5vKTsKICAgICAgICB0aHJvdyBzdGF0aWNfY2FzdDxq
dGhyb3dhYmxlPih2YWx1ZSk7CiAgICAgIH0KICAgICAgZ290byAqKChwYysrKS0+aW5zbik7Cgog
ICAgaW5zbl9jaGVja2Nhc3Q6CiAgICAgIDsKICAgICAgewogICAgICAgIGpvYmplY3QgdmFsdWUg
PSAoKC0tc3ApLT5vKTsKICAgICAgICBqaW50IGluZGV4ID0gKChwYysrKS0+aW50X3ZhbCk7CiAg
ICAgICAgamNsYXNzIHRvID0gKF9Kdl9SZXNvbHZlUG9vbEVudHJ5IChkZWZpbmluZ19jbGFzcywg
aW5kZXgpKS5jbGF6ejsKCiAgICAgICAgaWYgKHZhbHVlICE9IF9fbnVsbCAmJiAhIHRvLT5pc0lu
c3RhbmNlICh2YWx1ZSkpCiAgICAgICAgICB0aHJvdyBuZXcgamF2YTo6bGFuZzo6Q2xhc3NDYXN0
RXhjZXB0aW9uICh0by0+Z2V0TmFtZSgpKTsKCiAgICAgICAgKHNwKyspLT5vID0gKHZhbHVlKTsK
CiAgICAgICAgcGNbLTJdLmluc24gPSAmJmNoZWNrY2FzdF9yZXNvbHZlZDsKICAgICAgICBwY1st
MV0uZGF0dW0gPSB0bzsKICAgICAgfQogICAgICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBj
aGVja2Nhc3RfcmVzb2x2ZWQ6CiAgICAgIDsKICAgICAgewogICAgICAgIGpvYmplY3QgdmFsdWUg
PSAoKC0tc3ApLT5vKTsKICAgICAgICBqY2xhc3MgdG8gPSAoamNsYXNzKSAoKHBjKyspLT5kYXR1
bSk7CiAgICAgICAgaWYgKHZhbHVlICE9IF9fbnVsbCAmJiAhIHRvLT5pc0luc3RhbmNlICh2YWx1
ZSkpCiAgICAgICAgICB0aHJvdyBuZXcgamF2YTo6bGFuZzo6Q2xhc3NDYXN0RXhjZXB0aW9uICh0
by0+Z2V0TmFtZSgpKTsKICAgICAgICAoc3ArKyktPm8gPSAodmFsdWUpOwogICAgICB9CiAgICAg
IGdvdG8gKigocGMrKyktPmluc24pOwoKICAgIGluc25faW5zdGFuY2VvZjoKICAgICAgOwogICAg
ICB7CiAgICAgICAgam9iamVjdCB2YWx1ZSA9ICgoLS1zcCktPm8pOwogICAgICAgIGppbnQgaW5k
ZXggPSAoKHBjKyspLT5pbnRfdmFsKTsKICAgICAgICBqY2xhc3MgdG8gPSAoX0p2X1Jlc29sdmVQ
b29sRW50cnkgKGRlZmluaW5nX2NsYXNzLCBpbmRleCkpLmNsYXp6OwogICAgICAgIChzcCsrKS0+
aSA9ICh0by0+aXNJbnN0YW5jZSAodmFsdWUpKTsKCiAgICAgICAgcGNbLTJdLmluc24gPSAmJmlu
c3RhbmNlb2ZfcmVzb2x2ZWQ7CiAgICAgICAgcGNbLTFdLmRhdHVtID0gdG87CiAgICAgIH0KICAg
ICAgZ290byAqKChwYysrKS0+aW5zbik7CgogICAgaW5zdGFuY2VvZl9yZXNvbHZlZDoKICAgICAg
OwogICAgICB7CiAgICAgICAgam9iamVjdCB2YWx1ZSA9ICgoLS1zcCktPm8pOwogICAgICAgIGpj
bGFzcyB0byA9IChqY2xhc3MpICgocGMrKyktPmRhdHVtKTsKICAgICAgICAoc3ArKyktPmkgPSAo
dG8tPmlzSW5zdGFuY2UgKHZhbHVlKSk7CiAgICAgIH0KICAgICAgZ290byAqKChwYysrKS0+aW5z
bik7CgogICAgaW5zbl9tb25pdG9yZW50ZXI6CiAgICAgIDsKICAgICAgewogICAgICAgIGpvYmpl
Y3QgdmFsdWUgPSAoKC0tc3ApLT5vKTsKICAgICAgICA7CiAgICAgICAgX0p2X01vbml0b3JFbnRl
ciAodmFsdWUpOwogICAgICB9CiAgICAgIGdvdG8gKigocGMrKyktPmluc24pOwoKICAgIGluc25f
bW9uaXRvcmV4aXQ6CiAgICAgIDsKICAgICAgewogICAgICAgIGpvYmplY3QgdmFsdWUgPSAoKC0t
c3ApLT5vKTsKICAgICAgICA7CiAgICAgICAgX0p2X01vbml0b3JFeGl0ICh2YWx1ZSk7CiAgICAg
IH0KICAgICAgZ290byAqKChwYysrKS0+aW5zbik7CgogICAgaW5zbl9pZm51bGw6CiAgICAgIHsK
ICAgICAgICBqb2JqZWN0IHZhbCA9ICgoLS1zcCktPm8pOwogICAgICAgIGlmICh2YWwgPT0gX19u
dWxsKQogICAgICAgICAgcGMgPSAoaW5zbl9zbG90ICopIHBjLT5kYXR1bTsKICAgICAgfQogICAg
ICBnb3RvICooKHBjKyspLT5pbnNuKTsKCiAgICBpbnNuX2lmbm9ubnVsbDoKICAgICAgewogICAg
ICAgIGpvYmplY3QgdmFsID0gKCgtLXNwKS0+byk7CiAgICAgICAgaWYgKHZhbCAhPSBfX251bGwp
CiAgICAgICAgICBwYyA9IChpbnNuX3Nsb3QgKikgcGMtPmRhdHVtOwogICAgICB9CiAgICAgIGdv
dG8gKigocGMrKyktPmluc24pOwoKICAgIGluc25fbXVsdGlhbmV3YXJyYXk6CiAgICAgIDsKICAg
ICAgewogICAgICAgIGludCBraW5kX2luZGV4ID0gKChwYysrKS0+aW50X3ZhbCk7CiAgICAgICAg
aW50IGRpbSA9ICgocGMrKyktPmludF92YWwpOwoKICAgICAgICBqY2xhc3MgdHlwZQogICAgICAg
ICAgPSAoX0p2X1Jlc29sdmVQb29sRW50cnkgKGRlZmluaW5nX2NsYXNzLCBraW5kX2luZGV4KSku
Y2xheno7CiAgICAgICAgX0p2X0luaXRDbGFzcyAodHlwZSk7CiAgICAgICAgamludCAqc2l6ZXMg
PSAoamludCopIF9fYnVpbHRpbl9hbGxvY2EgKHNpemVvZiAoamludCkqZGltKTsKCiAgICAgICAg
Zm9yIChpbnQgaSA9IGRpbSAtIDE7IGkgPj0gMDsgaS0tKQogICAgICAgICAgewogICAgICAgICAg
ICBzaXplc1tpXSA9ICgoamludCkgKC0tc3ApLT5pKTsKICAgICAgICAgIH0KCiAgICAgICAgam9i
amVjdCByZXMgPSBfSnZfTmV3TXVsdGlBcnJheSAodHlwZSxkaW0sIHNpemVzKTsKCiAgICAgICAg
KHNwKyspLT5vID0gKHJlcyk7CiAgICAgIH0KICAgICAgZ290byAqKChwYysrKS0+aW5zbik7CiAg
ICB9CiAgY2F0Y2ggKGphdmE6Omxhbmc6OlRocm93YWJsZSAqZXgpCiAgICB7CiAgICAgIHZvaWQg
KmxvZ2ljYWxfcGMgPSAodm9pZCAqKSAoKGluc25fc2xvdCAqKSBwYyAtIDEpOwogICAgICBfSnZf
SW50ZXJwRXhjZXB0aW9uICpleGMgPSBleGNlcHRpb25zICgpOwogICAgICBqY2xhc3MgZXhjX2Ns
YXNzID0gZXgtPmdldENsYXNzICgpOwoKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleGNfY291
bnQ7IGkrKykKICAgICAgICB7CiAgICAgICAgICBpZiAoZXhjW2ldLnN0YXJ0X3BjLnAgPD0gbG9n
aWNhbF9wYyAmJiBsb2dpY2FsX3BjIDwgZXhjW2ldLmVuZF9wYy5wKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgamNsYXNzIGhhbmRsZXIgPSAoamNsYXNzKSBleGNbaV0uaGFuZGxlcl90eXBl
LnA7CiAgICAgICAgICAgICAgaWYgKGhhbmRsZXIgPT0gX19udWxsIHx8IGhhbmRsZXItPmlzQXNz
aWduYWJsZUZyb20gKGV4Y19jbGFzcykpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgIHBjID0gKGluc25fc2xvdCAqKSBleGNbaV0uaGFuZGxlcl9wYy5wOwogICAgICAgICAgICAg
ICAgICBzcCA9IHN0YWNrOwogICAgICAgICAgICAgICAgICBzcCsrLT5vID0gZXg7CiAgICAgICAg
ICAgICAgICAgIGdvdG8gKigocGMrKyktPmluc24pOwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICB9CiAgICAgICAgfQoKCiAgICAgIHRocm93IGV4OwogICAgfQp9CgpzdGF0aWMgdm9pZAp0
aHJvd19pbnRlcm5hbF9lcnJvciAoY2hhciAqbXNnKQp7CiAgdGhyb3cgbmV3IGphdmE6Omxhbmc6
OkludGVybmFsRXJyb3IgKEp2TmV3U3RyaW5nTGF0aW4xIChtc2cpKTsKfQoKc3RhdGljIHZvaWQK
dGhyb3dfaW5jb21wYXRpYmxlX2NsYXNzX2NoYW5nZV9lcnJvciAoanN0cmluZyBtc2cpCnsKICB0
aHJvdyBuZXcgamF2YTo6bGFuZzo6SW5jb21wYXRpYmxlQ2xhc3NDaGFuZ2VFcnJvciAobXNnKTsK
fQo=


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

only message in thread, other threads:[~2002-02-26 16:36 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-02-26  9:06 middle-end/5785: g++ crashes on modified libgcj interpreter tromey

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